Bläddra i källkod

feat: adapt the new audit process

Casper Dai 3 år sedan
förälder
incheckning
48e3606a7f

+ 16 - 3
src/api/base.js

@@ -21,13 +21,21 @@ export function addTenant (data) {
   return data
 }
 
-export function addStatusScope (data) {
-  switch (data.status) {
+const Status = {
+  [State.READY]: [0],
+  [State.SUBMITTED]: [1],
+  [State.RESOLVED]: [2],
+  [State.REJECTED]: [3, 4, 5],
+  [State.REVIEW]: [1],
+  [State.AVAILABLE]: [0, 1, 2],
+  [State.EDITABLE]: [0, 1, 3, 4, 5]
+}
+export function addStatusScope ({ status, ...data }) {
+  switch (status) {
     case State.RESOLVED:
       data.tenant = store.getters.tenant
       break
     case State.REVIEW:
-      data.status = State.SUBMITTED
       if (store.getters.isGroupAdmin) {
         if (store.getters.isTopGroupAdmin) {
           data.tenant = store.getters.tenant
@@ -36,10 +44,15 @@ export function addStatusScope (data) {
         }
       }
       break
+    case State.AVAILABLE:
+      data.tenant = store.getters.tenant
+      data.user = store.getters.userId
+      break
     default:
       data.user = store.getters.userId
       break
   }
+  data.statusList = Status[status]
   return data
 }
 

+ 2 - 2
src/api/calendar.js

@@ -18,8 +18,8 @@ export function getSchedules (query) {
   const { pageNum: pageIndex, pageSize, ...params } = query
   return tenantRequest({
     url: '/content/calendar/page',
-    method: 'GET',
-    params: addStatusScope({
+    method: 'POST',
+    data: addStatusScope({
       pageIndex, pageSize,
       ...params
     })

+ 2 - 2
src/api/program.js

@@ -45,8 +45,7 @@ export function deleteProgram ({ id, name }) {
   }, name)
 }
 
-export function updateProgram (data) {
-  const { id, duration, itemJsonStr, base64 } = data
+export function updateProgram ({ id, duration, itemJsonStr, keyNameList, base64 }) {
   const formData = new FormData()
   const result = /^data:(.+);base64,(.+)$/.exec(base64)
   if (result) {
@@ -61,6 +60,7 @@ export function updateProgram (data) {
   formData.append('id', id)
   formData.append('duration', duration)
   formData.append('itemJsonStr', itemJsonStr)
+  formData.append('keyNameList', JSON.stringify(keyNameList))
   return request({
     url: '/item/update',
     method: 'POST',

+ 1 - 1
src/components/Schedule/ScheduleSwiper/index.vue

@@ -116,7 +116,7 @@ export default {
       programs: [],
       programSchema: {
         pagination: { small: true, layout: 'prev,pager,next' },
-        condition: { status: State.RESOLVED, resolutionRatio: this.ratio, name: '' },
+        condition: { status: State.AVAILABLE, resolutionRatio: this.ratio, name: '' },
         list: getPrograms,
         filters: [
           { key: 'name', type: 'search', placeholder: '节目名称' }

+ 5 - 7
src/components/dialog/EventTargetDialog/index.vue

@@ -54,22 +54,20 @@ export default {
     show () {
       this.$refs.tableDialog.show()
     },
-    getListInvoke ({ type, name, pageSize, pageNum }) {
+    getListInvoke ({ type, pageSize, pageNum, name }) {
       switch (type) {
         case EventTarget.RECUR:
           return getSchedules({
-            pageSize, pageNum,
-            name,
+            pageSize, pageNum, name,
             type: ScheduleType.RECUR,
             resolutionRatio: this.ratio,
-            status: State.RESOLVED
+            status: State.AVAILABLE
           })
         default:
           return getPrograms({
-            pageSize, pageNum,
-            name,
+            pageSize, pageNum, name,
             resolutionRatio: this.ratio,
-            status: State.RESOLVED
+            status: State.AVAILABLE
           })
       }
     },

+ 4 - 2
src/constant.js

@@ -26,8 +26,10 @@ export const State = {
   SUBMITTED: 1,
   RESOLVED: 2,
   REJECTED: 3,
-  // 占位值,用于区分是审核还是查看自身的数据,发送请求前会被修改为SUBMITTED
-  REVIEW: 99
+  // 占位值
+  REVIEW: 99,
+  AVAILABLE: 100,
+  EDITABLE: 101
 }
 
 export const ScheduleType = {

+ 3 - 3
src/views/bigscreen/Program.vue

@@ -6,7 +6,7 @@
       @click="onClick"
     >
       <span class="c-program__ratio">{{ program.resolutionRatio }}</span>
-      <div class="c-program__time u-ellipsis">{{ createTime }}</div>
+      <div class="c-program__time u-ellipsis">{{ time }}</div>
     </div>
     <div class="l-flex--col c-program__footer">
       <edit-input
@@ -53,8 +53,8 @@ export default {
         }
         : {}
     },
-    createTime () {
-      return this.program.createTime?.split(' ')[0]
+    time () {
+      return this.program.updateTime?.split(' ')[0]
     }
   },
   methods: {

+ 4 - 0
src/views/bigscreen/ProgramDesigner.vue

@@ -21,6 +21,10 @@
           </div>
         </template>
       </el-tab-pane>
+      <el-tab-pane
+        label="被驳回"
+        name="3"
+      />
       <el-tab-pane
         label="已审核"
         name="2"

+ 3 - 1
src/views/bigscreen/ast/Designer.vue

@@ -345,6 +345,7 @@ import {
   copy,
   fix,
   getDuration,
+  getUsedAssets,
   toJSON
 } from './core/utils'
 import mixin from './mixin'
@@ -658,7 +659,7 @@ export default {
     getAssets (params) {
       this.$choosenAssets = []
       return getAssets({
-        status: State.RESOLVED,
+        status: State.AVAILABLE,
         ...params
       })
     },
@@ -804,6 +805,7 @@ export default {
           id: this.program.id,
           duration: getDuration(this.node),
           itemJsonStr: JSON.stringify(toJSON(this.node)),
+          keyNameList: getUsedAssets(this.node),
           base64
         })
         if (result) {

+ 19 - 0
src/views/bigscreen/ast/core/utils.js

@@ -213,6 +213,25 @@ export function getDuration (node) {
   }, 0)
 }
 
+export function getUsedAssets ({ bgm, backgroundImage, widgets }) {
+  const assetSet = new Set()
+
+  addAssetToSet(bgm, assetSet)
+  addAssetToSet(backgroundImage, assetSet)
+  widgets.forEach(({ sources }) => {
+    addAssetToSet(sources, assetSet)
+  })
+  addAssetToSet(bgm, assetSet)
+
+  return [...assetSet]
+}
+
+function addAssetToSet (arr, assetSet) {
+  arr?.forEach(({ keyName }) => {
+    keyName && assetSet.add(keyName)
+  })
+}
+
 export function validate (node) {
   const { widgets } = node
   if (!widgets.length) {

+ 6 - 8
src/views/bigscreen/ast/index.vue

@@ -54,15 +54,13 @@ export default {
               return
             }
 
-            if (status === State.READY) {
-              if (this.accessSet.has(Access.MANAGE_CALENDAR)) {
-                this.activeComponent = 'Designer'
-              } else {
-                this.showMessage('warning', '暂无编辑权限,请联系管理员')
-                return
-              }
-            } else {
+            if (status === State.SUBMITTED || status === State.RESOLVED) {
               this.activeComponent = 'Viewer'
+            } else if (this.accessSet.has(Access.MANAGE_CALENDAR)) {
+              this.activeComponent = 'Designer'
+            } else {
+              this.showMessage('warning', '暂无编辑权限,请联系管理员')
+              return
             }
 
             this.program = {

+ 1 - 5
src/views/bigscreen/mixin.js

@@ -19,11 +19,7 @@ export default {
   data () {
     return {
       schema: {
-        condition: {
-          status: this.status,
-          resolutionRatio: void 0,
-          name: ''
-        },
+        condition: { status: this.status, resolutionRatio: void 0, name: '' },
         list: getPrograms,
         filters: [
           { key: 'resolutionRatio', type: 'select', placeholder: '全部分辨率', simple: true, remote: getRatios },

+ 4 - 0
src/views/schedule/ScheduleDesigner.vue

@@ -21,6 +21,10 @@
           </div>
         </template>
       </el-tab-pane>
+      <el-tab-pane
+        label="被驳回"
+        name="3"
+      />
       <el-tab-pane
         label="已审核"
         name="2"

+ 4 - 1
src/views/schedule/deploy/index.vue

@@ -137,8 +137,11 @@ export default {
       selectedDevices: [],
       eventOptions: null,
       scheduleSchema: {
-        condition: { type: ScheduleType.COMPLEX, status: State.RESOLVED },
+        condition: { type: ScheduleType.COMPLEX, status: State.AVAILABLE, name: '' },
         list: getSchedules,
+        filters: [
+          { key: 'name', type: 'search', placeholder: '排期名称' }
+        ],
         cols: [{ prop: 'name', label: '名称', align: 'center' }]
       }
     }