Browse Source

素材播放方案bug修改及优化

zmj 2 tuần trước cách đây
mục cha
commit
d13459e0a9
1 tập tin đã thay đổi với 60 bổ sung5 xóa
  1. 60 5
      src/views/base/plan/index.vue

+ 60 - 5
src/views/base/plan/index.vue

@@ -782,12 +782,67 @@ function handlePreviewMediaError() {
 }
 
 
-/** 状态变更 */
-function handleStatusChange(row, status) {
-  const actionText = status === '1' ? '启用播放' : '设为备用'
-  proxy.$modal.msgWarning('播放方案\u201c' + actionText + '\u201d接口暂未单独接入,建议后端提供独立状态接口后再联调,避免通过完整编辑接口覆盖素材明细。')
-}
+/** 状态变更 (启用播放/设为备用) */
+function handleStatusChange(row, targetStatus) {
+  const isEnable = targetStatus === '1'
+  const actionText = isEnable ? '启用播放' : '设为备用'
+  const confirmMsg = isEnable 
+    ? '确认启动播放吗?注意:系统通常只允许一个方案处于当前播放状态,其他方案可能会自动转为备用。' 
+    : '确认设为备用吗?'
+
+  // 修改点:添加第二个参数对象,设置 dangerouslyUseHTMLString: true
+  proxy.$modal.confirm(confirmMsg, {
+    dangerouslyUseHTMLString: true,
+    confirmButtonText: '确定',
+    cancelButtonText: '取消',
+    type: 'warning'
+  }).then(() => {
+    // 1. 显示加载状态,防止重复点击
+    loading.value = true
+    
+    // 2. 获取该方案的最新完整数据
+    return getPlan(row.id)
+  }).then(response => {
+    const data = response.data || {}
+    
+    // 3. 构建提交 payload,仅修改 status,保留其他所有数据(包括素材列表)
+    const itemList = data.robotOpsPlayPlanItemList || data.itemList || []
+    
+    // 确保素材列表格式正确(复用 submitForm 中的处理逻辑)
+    const submitItemList = itemList.map(item => ({
+      id: item.id,
+      planId: item.planId,
+      assetId: item.assetId,
+      playOrder: item.playOrder,
+      staySeconds: item.assetType === 'image' ? item.staySeconds : null,
+      transitionType: item.transitionType || 'none'
+    }))
 
+    const payload = {
+      id: data.id,
+      planName: data.planName,
+      loopMode: data.loopMode,
+      status: String(targetStatus), // 【关键】修改为目标状态
+      remark: data.remark,
+      robotOpsPlayPlanItemList: submitItemList,
+      itemList: submitItemList
+    }
+
+    // 4. 调用更新接口
+    return updatePlan(payload)
+  }).then(() => {
+    proxy.$modal.msgSuccess(`${actionText}成功`)
+    getList() // 刷新列表以显示最新状态
+  }).catch((error) => {
+    // 如果是用户取消确认,不报错
+    if (error !== 'cancel') {
+      console.error(error)
+      proxy.$modal.msgError(`${actionText}失败`)
+    }
+  }).finally(() => {
+    loading.value = false
+  })
+}
 /** 选择素材 */
 function handleSelectAsset() {
   selectedAssets.value = []