Kaynağa Gözat

feat(deploy): eventFrequencyConfigDialog supports modifying events

Casper Dai 2 yıl önce
ebeveyn
işleme
1a36f34c65

+ 13 - 0
src/api/workflow.js

@@ -56,6 +56,19 @@ export function getWorkflowsByUser (query, options) {
   })
 }
 
+export function getWorkflowsBySuperAdmin (query, options) {
+  const { pageNum: pageIndex, pageSize, ...params } = query
+  return request({
+    url: '/workflow/pageByPropertis',
+    method: 'POST',
+    data: {
+      pageIndex, pageSize,
+      param: addTenant(params)
+    },
+    ...options
+  })
+}
+
 export function getWorkflowDetail (workflowId, options) {
   return (options?.loading ? send : request)({
     url: '/workflow/getBussinessData',

+ 57 - 11
src/views/screen/deploy/components/EventFrequencyConfigDialog.vue

@@ -7,10 +7,13 @@
   >
     <template #default>
       <div class="c-grid-form u-align-self--center">
-        <div class="c-grid-form__label">模式</div>
+        <div class="c-grid-form__label">
+          模式
+        </div>
         <el-select
           v-model="frequency"
           class="c-sibling-item--v near u-width--xs"
+          :disabled="isEdit"
         >
           <el-option
             v-for="option in frequencyOptions"
@@ -20,7 +23,9 @@
           />
         </el-select>
         <template v-if="isOnce">
-          <span class="c-grid-form__label u-font-size--sm u-required">生效时间</span>
+          <span class="c-grid-form__label u-font-size--sm u-required">
+            生效时间
+          </span>
           <el-date-picker
             v-model="dateTimeRange"
             type="datetimerange"
@@ -34,7 +39,9 @@
         </template>
         <template v-else>
           <template v-if="isMulti">
-            <span class="c-grid-form__label u-font-size--sm u-required">生效日期</span>
+            <span class="c-grid-form__label u-font-size--sm u-required">
+              生效日期
+            </span>
             <el-date-picker
               v-model="dates"
               class="u-width--lg"
@@ -45,7 +52,9 @@
             />
           </template>
           <template v-if="isWeekly">
-            <span class="c-grid-form__label u-font-size--sm u-required">生效日期</span>
+            <span class="c-grid-form__label u-font-size--sm u-required">
+              生效日期
+            </span>
             <el-date-picker
               v-model="dateRange"
               class="u-width--lg"
@@ -55,7 +64,9 @@
               :picker-options="pickerOptions"
               :clearable="false"
             />
-            <span class="c-grid-form__label u-font-size--sm u-required">每周</span>
+            <span class="c-grid-form__label u-font-size--sm u-required">
+              每周
+            </span>
             <el-checkbox-group
               v-model="weeks"
               class="l-flex--row c-grid-form__option"
@@ -72,31 +83,42 @@
               </el-checkbox-button>
             </el-checkbox-group>
           </template>
-          <span class="c-grid-form__label u-font-size--sm u-required">生效时间</span>
+          <span class="c-grid-form__label u-font-size--sm u-required">
+            生效时间
+          </span>
           <div class="l-flex--col">
             <div class="l-flex--row c-grid-form__option">
               <div
+                v-if="!isEdit"
                 class="l-flex--row inline c-sibling-item u-font-size--sm has-active u-line-height"
                 @click="onAdd"
               >
                 <i class="c-sibling-item el-icon-circle-plus-outline" />
-                <span class="c-sibling-item nearer">新增</span>
+                <span class="c-sibling-item nearer">
+                  新增
+                </span>
+              </div>
+              <div class="c-sibling-item far u-color--info u-font-size--xs">
+                结束时间为00:00:00时表示播至当天结束
               </div>
-              <div class="c-sibling-item far u-color--info u-font-size--xs">结束时间为00:00:00时表示播至当天结束</div>
             </div>
             <div
               v-for="(timeRange, index) in timeRanges"
               :key="index"
               class="l-flex--row c-sibling-item--v far"
             >
-              <span class="u-width--3xs u-color--info u-font-size--xs">时段{{ index + 1 }}</span>
+              <span class="u-width--3xs u-color--info u-font-size--xs">
+                时段{{ index + 1 }}
+              </span>
               <el-time-picker
                 v-model="timeRange.startTime"
                 class="c-sibling-item u-width--xs"
                 value-format="HH:mm:ss"
                 :clearable="false"
               />
-              <div class="c-sibling-item near u-font-size--xs">至</div>
+              <div class="c-sibling-item near u-font-size--xs">
+                至
+              </div>
               <el-time-picker
                 v-model="timeRange.endTime"
                 class="c-sibling-item near u-width--xs"
@@ -132,6 +154,7 @@ export default {
   name: 'EventFrequencyConfigDialog',
   data () {
     return {
+      isEdit: false,
       frequencyOptions: [
         { value: EventFrequency.ONCE, label: '单时段' },
         { value: EventFrequency.MULTI, label: '多日期' },
@@ -181,6 +204,7 @@ export default {
       return date <= Date.now() - ONE_DAY
     },
     init () {
+      this.isEdit = false
       const startDateTime = `${toDateStr(new Date())} 00:00:00`
       this.frequency = EventFrequency.WEEKLY
       this.dateTimeRange = [startDateTime, `${toDateStr(new Date(), 1)} 00:00:00`]
@@ -189,8 +213,30 @@ export default {
       this.weeks = this.weekOptions.map(({ value }) => value)
       this.timeRanges = [{ startTime: '00:00:00', endTime: '00:00:00' }]
     },
+    initByEvent ({ freq, byDay, start, until, startTime, endTime }) {
+      this.isEdit = true
+      switch (freq) {
+        case EventFrequency.ONCE:
+          this.frequency = EventFrequency.ONCE
+          this.dateTimeRange = [start, until]
+          break
+        case EventFrequency.WEEKLY:
+          this.frequency = EventFrequency.WEEKLY
+          this.dateRange = [start, `${toDateStr(until, endTime === '00:00:00' ? -1 : 0)} 00:00:00`]
+          this.weeks = byDay.split(',')
+          this.timeRanges = [{ startTime, endTime }]
+          break
+        default:
+          this.init()
+          break
+      }
+    },
     show (event) {
-      this.init(event)
+      if (event) {
+        this.initByEvent(event)
+      } else {
+        this.init()
+      }
       this.$refs.dialog.show()
     },
     onAdd () {

+ 52 - 25
src/views/screen/deploy/device/index.vue

@@ -33,7 +33,9 @@
         @change="onChange"
       />
       <div class="l-flex__none l-flex--col c-step__column u-width--lg">
-        <div class="c-sibling-item--v near u-font-size--sm  u-bold">上播类型</div>
+        <div class="c-sibling-item--v near u-font-size--sm  u-bold">
+          上播类型
+        </div>
         <el-select
           v-model="eventOptions.type"
           class="c-sibling-item--v nearer u-width--sm"
@@ -47,7 +49,9 @@
           />
         </el-select>
         <template v-if="!isDefaultPlayback">
-          <div class="c-sibling-item--v near u-font-size--sm">优先级</div>
+          <div class="c-sibling-item--v near u-font-size--sm">
+            优先级
+          </div>
           <el-select
             v-model="priority"
             class="c-sibling-item--v nearer u-width--sm"
@@ -65,7 +69,9 @@
               class="l-flex--row inline u-font-size--sm has-active"
               @click="onAddEvent"
             >
-              <span class="c-sibling-item">播放时段</span>
+              <span class="c-sibling-item">
+                播放时段
+              </span>
               <i class="c-sibling-item near el-icon-circle-plus-outline" />
             </div>
           </div>
@@ -130,6 +136,7 @@ import {
 import { publish } from '@/api/platform'
 import {
   getWorkflowsByUser,
+  getWorkflowsBySuperAdmin,
   getWorkflowDetail
 } from '@/api/workflow'
 import WorkflowDialog from '../workflow/components/WorkflowDialog.vue'
@@ -161,7 +168,11 @@ export default {
       timeSchema: {
         nonPagination: true,
         props: {
-          size: 'small'
+          size: 'small',
+          'row-class-name': 'u-pointer'
+        },
+        listeners: {
+          'row-click': this.onEditEvent
         },
         list: this.getEvents,
         cols: [
@@ -175,13 +186,15 @@ export default {
       eventTarget: this.createEventTarget(),
       conflicts: [],
       workflowSchema: {
-        list: getWorkflowsByUser,
+        list: this.$store.getters.isSuperAdmin ? getWorkflowsBySuperAdmin : getWorkflowsByUser,
         filters: [
           { key: 'status', type: 'select', placeholder: '流程状态', options: [
             { value: State.SUBMITTED, label: '待审核' },
             { value: State.RESOLVED, label: '通过' },
             { value: State.REJECTED, label: '驳回' }
-          ] }
+          ] },
+          { key: 'flowName', type: 'search', placeholder: '上播内容' },
+          { type: 'refresh' }
         ],
         cols: [
           { prop: 'flowDesc', label: '优先级', width: 100, align: 'center' },
@@ -192,6 +205,7 @@ export default {
               label: ['', '待审核', '通过', '驳回'][status]
             }
           } },
+          this.$store.getters.isSuperAdmin && { prop: 'createUser', label: '提交人', width: 100, align: 'center' },
           { prop: 'createTime', label: '提交时间', width: 160, align: 'center' },
           { type: 'invoke', render: [
             { label: '详情', on: this.onViewWorkflow }
@@ -237,21 +251,29 @@ export default {
       return Promise.resolve(({ data: this.events }))
     },
     onAddEvent () {
+      this.$eventProxy = null
       this.$refs.eventFrequencyConfigDialog.show()
     },
+    onEditEvent (eventProxy) {
+      const { origin } = eventProxy
+      this.$eventProxy = eventProxy
+      this.$refs.eventFrequencyConfigDialog.show(origin)
+    },
     onConfirmEventFrequency ({ value, done }) {
       const conflicts = new Map()
       if (this.events.length) {
         this.events.forEach(eventProxy => {
-          value.forEach(event => {
-            const date = getConflict(event, eventProxy.origin)
-            if (date) {
-              conflicts.set(eventProxy.key, {
-                key: eventProxy.key,
-                info: `与 ${eventProxy.time} 有冲突`
-              })
-            }
-          })
+          if (!this.$eventProxy || this.$eventProxy.key !== eventProxy.key) {
+            value.forEach(event => {
+              const date = getConflict(event, eventProxy.origin)
+              if (date) {
+                conflicts.set(eventProxy.key, {
+                  key: eventProxy.key,
+                  info: `与 ${eventProxy.time} 有冲突`
+                })
+              }
+            })
+          }
         })
       }
       if (conflicts.size) {
@@ -270,16 +292,21 @@ export default {
       this.onAdded(value, done)
     },
     onAdded (value, done) {
-      this.events = [
-        ...value.map(event => {
-          return {
-            key: `${Date.now()}_${Math.random().toString(16).slice(2)}`,
-            origin: event,
-            time: getEventDescription(event)
-          }
-        }),
-        ...this.events
-      ]
+      if (this.$eventProxy) {
+        this.$eventProxy.origin = value[0]
+        this.$eventProxy.time = getEventDescription(value[0])
+      } else {
+        this.events = [
+          ...value.map(event => {
+            return {
+              key: `${Date.now()}_${Math.random().toString(16).slice(2)}`,
+              origin: event,
+              time: getEventDescription(event)
+            }
+          }),
+          ...this.events
+        ]
+      }
       this.$refs.timeTable?.pageTo(1)
       done()
     },