Просмотр исходного кода

fix: program status verification method

Casper Dai 3 лет назад
Родитель
Сommit
287e95ff6e

+ 8 - 2
src/api/calendar.js

@@ -12,7 +12,10 @@ import {
   addOrg,
   canDel
 } from './base'
-import { ScheduleType } from '@/constant'
+import {
+  State,
+  ScheduleType
+} from '@/constant'
 
 export function getSchedules (query) {
   const { pageNum: pageIndex, pageSize, ...params } = query
@@ -65,7 +68,10 @@ export function saveScheduleEvents (schedule, events) {
   return messageSend({
     url: `/content/calendar/${id}/eventList`,
     method: 'POST',
-    data: { eventAddCmdList: events, status: events.length ? 0 : -1 }
+    data: {
+      eventAddCmdList: events,
+      status: events.length ? State.READY : State.DRAFT
+    }
   }, '保存')
 }
 

+ 2 - 2
src/api/program.js

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

+ 1 - 0
src/constant.js

@@ -22,6 +22,7 @@ export const Role = {
 }
 
 export const State = {
+  DRAFT: -1,
   READY: 0,
   SUBMITTED: 1,
   RESOLVED: 2,

+ 12 - 11
src/views/bigscreen/ast/Designer.vue

@@ -777,28 +777,28 @@ export default {
       this.scale = Math.min(this.scale + 10, this.maxScale)
     },
     onSave () {
-      this.check().then(() => {
+      this.check().then(status => {
         this.selectedWidgetIndex = -1
         this.loading = true
-        this.$nextTick(() => {
-          this._save().finally(() => {
+        setTimeout(() => {
+          this._save(status).finally(() => {
             this.loading = false
           })
-        })
+        }, 100)
       })
     },
     check () {
-      const warning = fix(this.node)
-      if (warning) {
+      const { state, message } = fix(this.node)
+      if (message) {
         return this.$confirm(
-          warning,
+          message,
           '继续保存',
           { type: 'warning' }
-        )
+        ).then(() => state)
       }
-      return Promise.resolve()
+      return Promise.resolve(state)
     },
-    async _save () {
+    async _save (status) {
       try {
         const base64 = await this.snap()
         const result = await updateProgram({
@@ -806,7 +806,8 @@ export default {
           duration: getDuration(this.node),
           itemJsonStr: JSON.stringify(toJSON(this.node)),
           keyNameList: getUsedAssets(this.node),
-          base64
+          base64,
+          status
         })
         if (result) {
           if (window.opener) {

+ 47 - 44
src/views/bigscreen/ast/core/utils.js

@@ -1,5 +1,8 @@
 import Vue from 'vue'
-import { AssetType } from '@/constant'
+import {
+  State,
+  AssetType
+} from '@/constant'
 import { WidgetType } from './constant'
 import widgetCanvas from './config-json/canvas'
 import widgetText from './config-json/text'
@@ -160,7 +163,47 @@ function transform (data, transformOptions = {}, strat = {}) {
 }
 
 export function fix (node) {
-  const { bgm, widgets } = node
+  const { bgm, backgroundImage, widgets } = node
+
+  if (!widgets.length) {
+    if (backgroundImage.length) {
+      return { state: State.READY }
+    }
+    return { state: State.DRAFT }
+  }
+
+  for (let i = 0; i < widgets.length; i++) {
+    const widget = widgets[i]
+    switch (widget.type) {
+      case WidgetType.MEDIA:
+        if (widget.sources.length === 0) {
+          return { state: State.DRAFT, message: '有媒资组件未配置数据' }
+        }
+        break
+      case WidgetType.IMAGE:
+        if (widget.sources.length === 0) {
+          return { state: State.DRAFT, message: '有图片组件未配置数据' }
+        }
+        break
+      case WidgetType.VIDEO:
+        if (widget.sources.length === 0) {
+          return { state: State.DRAFT, message: '有视频组件未配置数据' }
+        }
+        break
+      case WidgetType.WEB:
+        if (!widget.href) {
+          return { state: State.DRAFT, message: '有网页组件未配置链接地址' }
+        }
+        break
+      case WidgetType.LIVE:
+        if (!widget.url) {
+          return { state: State.DRAFT, message: '有直播组件未配置播放地址' }
+        }
+        break
+      default:
+        break
+    }
+  }
 
   if (bgm.length === 0) {
     const volumeWidgets = widgets.filter(({ type, sources }) => {
@@ -191,11 +234,11 @@ export function fix (node) {
       if (volumeWidgets.length === 1) {
         volumeWidgets[0].mute = 0
       } else {
-        return '视频均未设置音频输出'
+        return { state: State.READY, message: '视频均未设置音频输出' }
       }
     }
   }
-  return null
+  return { state: State.READY }
 }
 
 export function getDuration (node) {
@@ -232,46 +275,6 @@ function addAssetToSet (arr, assetSet) {
   })
 }
 
-export function validate (node) {
-  const { widgets } = node
-  if (!widgets.length) {
-    return '未配置组件,请先进行配置'
-  }
-  for (let i = 0; i < widgets.length; i++) {
-    const widget = widgets[i]
-    switch (widget.type) {
-      case WidgetType.MEDIA:
-        if (widget.sources.length === 0) {
-          return '有媒资组件未配置数据,请先进行配置'
-        }
-        break
-      case WidgetType.IMAGE:
-        if (widget.sources.length === 0) {
-          return '有图片组件未配置数据,请先进行配置'
-        }
-        break
-      case WidgetType.VIDEO:
-        if (widget.sources.length === 0) {
-          return '有视频组件未配置数据,请先进行配置'
-        }
-        break
-      case WidgetType.WEB:
-        if (!widget.href) {
-          return '有网页组件未配置链接地址,请先进行配置'
-        }
-        break
-      case WidgetType.LIVE:
-        if (!widget.url) {
-          return '有直播组件未配置播放地址,请先进行配置'
-        }
-        break
-      default:
-        break
-    }
-  }
-  return null
-}
-
 export function switchToNext (toggleType, arr, curr) {
   const length = arr.length
   if (length === 0) {