From e6ac83c1fe04e95a3b89b1e1a39773465f2ffb9b Mon Sep 17 00:00:00 2001
From: sd <shidong@jhsoft.cc>
Date: 星期五, 25 七月 2025 09:02:23 +0800
Subject: [PATCH] 实时监控-右侧数据不准确修复;详情样式调整:任务名称颜色变更;预警声音提示暂时隐藏。 摄像机配置-隐藏复制粘贴功能;

---
 src/pages/cameraAccess/components/SceneRule.vue |  280 ++++++++++++++++++++++++++------------------------------
 1 files changed, 130 insertions(+), 150 deletions(-)

diff --git a/src/pages/cameraAccess/components/SceneRule.vue b/src/pages/cameraAccess/components/SceneRule.vue
index 9d3715d..d061e72 100644
--- a/src/pages/cameraAccess/components/SceneRule.vue
+++ b/src/pages/cameraAccess/components/SceneRule.vue
@@ -2,33 +2,18 @@
   <div class="scene-edit-container">
     <div class="scene-title">
       <b style="font-size: 14px; line-height: 18px">鐫f煡浠诲姟</b>
-      <el-button
-        type="primary"
-        size="mini"
-        @click="handleCreate"
-        style="margin-left: 90%"
-        v-show="!editScene && TreeDataPool.selectedNode.type !== 'MENU'"
-        >+ 娣诲姞浠诲姟</el-button
-      >
+      <el-button type="primary" size="mini" @click="handleCreate" style="margin-left: 90%"
+        v-show="!editScene && TreeDataPool.selectedNode.type !== 'MENU'">+ 娣诲姞浠诲姟</el-button>
     </div>
 
     <el-form ref="form" label-width="80px" v-show="editScene">
       <div class="flex-form">
         <div class="left">
           <el-form-item label="浠诲姟鍚嶇О">
-            <el-input
-              v-model="sceneForm.scene_name"
-              size="mini"
-              maxlength="15"
-            ></el-input>
+            <el-input v-model="sceneForm.scene_name" size="mini" maxlength="15"></el-input>
           </el-form-item>
           <el-form-item label="浜嬩欢绛夌骇">
-            <el-select
-              v-model="sceneForm.alarm_level"
-              placeholder="璇烽�夋嫨"
-              size="mini"
-              style="width: 250px"
-            >
+            <el-select v-model="sceneForm.alarm_level" placeholder="璇烽�夋嫨" size="mini" style="width: 250px">
               <el-option label="涓�绾�" :value="1"></el-option>
               <el-option label="浜岀骇" :value="2"></el-option>
               <el-option label="涓夌骇" :value="3"></el-option>
@@ -37,50 +22,36 @@
             </el-select>
           </el-form-item>
           <el-form-item label="鏃堕棿娈�">
-            <el-select
-              v-model="sceneForm.workingTimes"
-              placeholder="璇烽�夋嫨"
-              size="mini"
-            >
-              <el-option
-                v-for="item in VideoManageData.TimeRules"
-                :key="item.id"
-                :label="item.name"
-                :value="item.id"
-              ></el-option>
+            <el-select v-model="sceneForm.workingTimes" placeholder="璇烽�夋嫨" size="mini">
+              <el-option v-for="item in VideoManageData.TimeRules" :key="item.id" :label="item.name"
+                :value="item.id"></el-option>
             </el-select>
           </el-form-item>
           <!-- 妫�娴嬪唴瀹� -->
-        <el-form-item label="妫�娴嬪唴瀹�">
-          <el-select v-model="sceneForm.checkContents" multiple placeholder="璇烽�夋嫨"
-              size="mini">
-            <el-option v-for="item in VideoManageData.checkOptions" :key="item.checkId" :label="item.fileName"
-              :value="item.checkId"></el-option>
-          </el-select>
-        </el-form-item>
+          <el-form-item label="妫�娴嬪唴瀹�">
+            <el-select v-model="sceneForm.checkContents" multiple placeholder="璇烽�夋嫨" size="mini">
+              <el-option v-for="item in VideoManageData.checkOptions" :key="item.checkId" :label="item.fileName"
+                :value="item.checkId"></el-option>
+            </el-select>
+          </el-form-item>
 
-        <!-- 棰勮瑙勫垯 -->
-        <el-form-item label="棰勮瑙勫垯">
-          <el-select v-model="sceneForm.warningRules" placeholder="璇烽�夋嫨"
-              size="mini" multiple>
-            <el-option v-for="item in VideoManageData.ruleOptions" :key="item.ruleId" :label="item.fileName"
-              :value="item.ruleId"></el-option>
-          </el-select>
-        </el-form-item>
-        <!-- 鐭ヨ瘑搴� -->
-        <!-- <el-form-item label="鐭ヨ瘑搴�"
-              size="mini">
-          <el-cascader v-model="sceneForm.knowsList" :options="VideoManageData.knowledgeOptions" :props="knowledgeProps" clearable
-            filterable placeholder="璇烽�夋嫨" class="knowledge-cascader" :show-all-levels="false"></el-cascader>
-        </el-form-item> -->
+
         </div>
         <div class="right">
           <el-form-item label="浠诲姟鎻忚堪">
-            <el-input
-              v-model="sceneForm.desc"
-              type="textarea"
-              size="mini"
-            ></el-input>
+            <el-input v-model="sceneForm.desc" type="textarea" size="mini"></el-input>
+          </el-form-item>
+          <!-- 棰勮瑙勫垯 -->
+          <el-form-item label="棰勮瑙勫垯">
+            <el-select v-model="sceneForm.warningRules" placeholder="璇烽�夋嫨" size="mini" multiple>
+              <el-option v-for="item in VideoManageData.ruleOptions" :key="item.ruleId" :label="item.fileName"
+                :value="item.ruleId"></el-option>
+            </el-select>
+          </el-form-item>
+          <!-- 鐭ヨ瘑搴� -->
+          <el-form-item label="鐭ヨ瘑搴�" size="mini">
+            <el-cascader v-model="sceneForm.knowsList" :options="VideoManageData.knowsList" :props="knowledgeProps"
+              clearable filterable placeholder="璇烽�夋嫨" class="knowledge-cascader" :show-all-levels="false"></el-cascader>
           </el-form-item>
           <!-- <el-form-item label="浜嬩欢澹伴煶">
             <el-select
@@ -124,37 +95,21 @@
         :ruleList="templateRules"
         @sdkNameChange="getSceneName"
       ></scene-editor> -->
-       
+
 
       <el-form-item style="width: 60%; min-width: 1048px">
         <el-button size="mini" @click="editScene = false">鍙栨秷</el-button>
-        <el-button type="primary" size="mini" @click="saveSceneRule"
-          >淇濆瓨</el-button
-        >
+        <el-button type="primary" size="mini" @click="saveSceneRule">淇濆瓨</el-button>
       </el-form-item>
     </el-form>
 
     <!-- 瑙勫垯鍒楄〃 -->
     <div class="edit-rule-table" v-show="!editScene">
       <div class="task-rules-table-box">
-        <el-table
-          :data="tableRuleList"
-          border
-          style="width: 100%"
-          :cell-style="cellStyle"
-          :header-cell-style="{ background: '#f8f8f8', color: '#222222' }"
-        >
-          <el-table-column
-            label="搴忓彿"
-            type="index"
-            align="center"
-          ></el-table-column>
-          <el-table-column
-            label="浠诲姟鍚嶇О"
-            prop="scene_name"
-            align="center"
-            show-overflow-tooltip
-          ></el-table-column>
+        <el-table :data="tableRuleList" border style="width: 100%" :cell-style="cellStyle"
+          :header-cell-style="{ background: '#f8f8f8', color: '#222222' }">
+          <el-table-column label="搴忓彿" type="index" align="center"></el-table-column>
+          <el-table-column label="浠诲姟鍚嶇О" prop="scene_name" align="center" show-overflow-tooltip></el-table-column>
           <el-table-column label="浜嬩欢绛夌骇" align="center">
             <template slot-scope="scope">
               <span>{{ scope.row.alarm_level | alarmLevel }}</span>
@@ -169,49 +124,31 @@
             <template slot-scope="scope">
               <span v-html="scope.row.group_text"></span>
             </template>
-          </el-table-column> -->
-          <el-table-column
-            label="鏃堕棿娈�"
-            prop="time_name"
-            align="center"
-          >
+          </el-table-column>workTimeId -->
+          <el-table-column label="鏃堕棿娈�" prop="time_name" align="center">
             <template slot-scope="scope">
-            {{(scope.row.workingTime || []).map(r => r.labelName).join(' / ') || ''}}
-              </template>
+              <!-- {{(scope.row.workingTime || []).map(r => r.labelName).join(' / ') || ''}} -->
+              <span v-for="(tag, idx) in VideoManageData.TimeRules.filter(t => t.id === scope.row.workTimeId)"
+                :key="idx">
+                {{ tag.name }}</span>
+            </template>
           </el-table-column>
-          <el-table-column
-            label="妫�娴嬪唴瀹�"
-            prop="checkContent"
-            align="center"
-          >
+          <el-table-column label="妫�娴嬪唴瀹�" prop="checkContent" align="center">
             <template slot-scope="scope">
-            {{(scope.row.checkContent || []).map(r => r.fileName).join(' / ') || ''}}
-              </template>
+              {{(scope.row.checkContent || []).map(r => r.fileName).join(' / ') || ''}}
+            </template>
           </el-table-column>
-          <el-table-column
-            label="棰勮瑙勫垯"
-            prop="warningRule"
-            align="center"
-          >
+          <el-table-column label="棰勮瑙勫垯" prop="warningRule" align="center">
             <template slot-scope="scope">
-            {{(scope.row.warningRule || []).map(r => r.fileName).join(' / ') || ''}}
-              </template>
+              {{(scope.row.warningRule || []).map(r => r.fileName).join(' / ') || ''}}
+            </template>
           </el-table-column>
-          <el-table-column
-            label="鐭ヨ瘑搴�"
-            prop="knowledge"
-            align="center"
-          >
+          <el-table-column label="鐭ヨ瘑搴�" prop="knowledge" align="center">
             <template slot-scope="scope">
-            {{(scope.row.knowledge || []).map(r => r.fileName).join(' / ') || ''}}
-              </template>
+              {{(scope.row.knowledge || []).map(r => r.fileName).join(' / ') || ''}}
+            </template>
           </el-table-column>
-          <el-table-column
-            label="鎻忚堪"
-            prop="desc"
-            align="center"
-            min-width="120"
-          ></el-table-column>
+          <el-table-column label="鎻忚堪" prop="desc" align="center" min-width="120"></el-table-column>
           <!-- <el-table-column label="鐘舵��" align="center" width="90">
             <template slot-scope="scope">
               <el-switch v-model="scope.row.defence_state" @change="updateDefence(scope.row)"></el-switch>
@@ -224,29 +161,12 @@
           </el-table-column> -->
           <el-table-column label="鎿嶄綔" fixed="right" align="center">
             <template slot-scope="scope">
-              <el-tooltip
-                content="缂栬緫"
-                :hide-after="700"
-                placement="top"
-                popper-class="atooltip"
-              >
-                <i
-                  class="iconfont iconbianji1 btn-icon"
-                  style="font-size: 28px"
-                  @click="handleEdit(scope.row)"
-                ></i>
+              <el-tooltip content="缂栬緫" :hide-after="700" placement="top" popper-class="atooltip">
+                <i class="iconfont iconbianji1 btn-icon" style="font-size: 28px" @click="handleEdit(scope.row)"></i>
               </el-tooltip>
-              <el-tooltip
-                content="鍒犻櫎"
-                :hide-after="700"
-                placement="top"
-                popper-class="atooltipgroup_"
-              >
-                <i
-                  class="iconfont iconshanchu4 btn-icon"
-                  style="font-size: 28px; color: red"
-                  @click="handleDelScene(scope.row)"
-                ></i>
+              <el-tooltip content="鍒犻櫎" :hide-after="700" placement="top" popper-class="atooltipgroup_">
+                <i class="iconfont iconshanchu4 btn-icon" style="font-size: 28px; color: red"
+                  @click="handleDelScene(scope.row)"></i>
               </el-tooltip>
             </template>
           </el-table-column>
@@ -257,10 +177,11 @@
 </template>
 
 <script>
-import { saveCameraScene, deleteCameraScene,deleteCameraSceneTwo } from "@/api/scene";
+import { saveCameraScene, deleteCameraScene, deleteCameraSceneTwo } from "@/api/scene";
 import RuleEditor from "@/components/subComponents/RuleEditor";
 import SceneEditor from "./scene/Editor";
 import { getSoundList } from "@/api/event";
+import { forEach } from "jszip";
 
 export default {
   name: "SceneRuleEditor",
@@ -319,6 +240,12 @@
   },
   data() {
     return {
+      knowledgeProps: {
+        multiple: true, // 鏀寔澶氶��
+        value: 'id',    // 鎸囧畾閫夐」鍊煎瓧娈�
+        label: 'title', // 鎸囧畾閫夐」鏍囩瀛楁
+        children: 'files' // 鎸囧畾瀛愰�夐」瀛楁锛堟枃浠跺垪琛級
+      },
       editScene: false,
       sceneTemplates: [],
       sceneForm: {
@@ -475,6 +402,17 @@
     },
     handleEdit(scene) {
       this.sceneForm = JSON.parse(JSON.stringify(scene));
+      // 淇鐭ヨ瘑搴撴枃浠惰浆鎹㈤�昏緫
+      if (scene.knowledge) {
+        const convertKnowledge = scene.knowledge.map(file => {
+          const library = this.VideoManageData.knowsList.find(lib =>
+            lib.files.some(f => f.id === file.id)
+          )
+          return library ? [library.id, file.id] : null
+        }).filter(item => item !== null) || []
+        this.sceneForm.knowsList = convertKnowledge
+        // console.info("know:" + JSON.stringify(convertKnowledge))
+      }
       // this.originSceneInfo = JSON.parse(JSON.stringify(scene));
       this.sceneForm.voice = this.soundList.find((o) => o.id === scene.voiceId);
 
@@ -488,7 +426,7 @@
       this.templateSdks = selectedTpl.sdks;
 
       this.templateRules = JSON.stringify(scene.rules);
-      this.$refs.sceneEditor.editHandle(this.templateRules);
+      // this.$refs.sceneEditor.editHandle(this.templateRules);//绠楁硶鐩稿叧 
     },
 
     validateForm() {
@@ -510,6 +448,24 @@
           message: "鏃堕棿娈典笉鑳戒负绌�",
         });
         return false;
+      } else if (!this.sceneForm.checkContents) {
+        this.$notify({
+          type: "warning",
+          message: "妫�娴嬪唴瀹逛笉鑳戒负绌�",
+        });
+        return false;
+      } else if (!this.sceneForm.workingTimes) {
+        this.$notify({
+          type: "warning",
+          message: "棰勮瑙勫垯涓嶈兘涓虹┖",
+        });
+        return false;
+      } else if (!this.sceneForm.knowsList) {
+        this.$notify({
+          type: "warning",
+          message: "鐭ヨ瘑搴撲笉鑳戒负绌�",
+        });
+        return false;
       }
       return true;
     },
@@ -524,20 +480,29 @@
       // this.sceneForm.rules = editorResp.rules;
       // this.sceneForm.id = editorResp.id;
       // this.sceneForm.group_text = editorResp.text;
-      const workTimes = [this.sceneForm.workingTimes].map(id => {
-          const timeOption = this.VideoManageData.TimeRules.find(opt => opt.id === id)
-          return {
-            labelId: id,
-            labelName: timeOption ? timeOption.name : ''
-          }
-        })
+      // const workTimes = [this.sceneForm.workingTimes].map(id => {
+      //   const timeOption = this.VideoManageData.TimeRules.find(opt => opt.id === id)
+      //   return {
+      //     labelId: id,
+      //     labelName: timeOption ? timeOption.name : ''
+      //   }
+      // })
+      const fileIds = this.sceneForm.knowsList.map(
+        path => {
+          // 鎻愬彇鏈�鍚庝竴绾х殑鏂囦欢ID骞惰浆鎹负鏁板瓧
+          const id = path[path.length - 1];
+          return Number(id); // 鎴栬�呬娇鐢� parseInt(id) 鎴� +id
+        }
+      )
       this.sceneForm.taskName = this.sceneForm.scene_name
       this.sceneForm.eventLevel = this.sceneForm.alarm_level
       this.sceneForm.checks = this.sceneForm.checkContents
       this.sceneForm.rules = this.sceneForm.warningRules
-      this.sceneForm.workTimes = workTimes
+      // this.sceneForm.workTimes = workTimes
+      this.sceneForm.workTimeId = this.sceneForm.workingTimes
       this.sceneForm.taskDescription = this.sceneForm.desc
-      this.onSaveScene(this.sceneForm);
+      this.sceneForm.knows = fileIds,
+        this.onSaveScene(this.sceneForm);
     },
 
     handleDelScene(groupRule) {
@@ -551,8 +516,8 @@
           // console.info("groupRule锛�"+JSON.stringify(groupRule))
           deleteCameraSceneTwo(
             {
-            taskId: groupRule.taskId
-          }
+              taskId: groupRule.taskId
+            }
           ).then((res) => {
             this.$emit("delete-rule");
             if (res && res.status === 200) {
@@ -570,7 +535,7 @@
             }
           });
         })
-        .catch(() => {});
+        .catch(() => { });
     },
     cellStyle(obj) {
       if (obj.column.label == "绛栫暐" || obj.column.label == "浜嬩欢澹伴煶") {
@@ -588,44 +553,55 @@
     text-align: left;
     margin: 10px 0px;
   }
+
   .flex-form {
     display: flex;
     width: 80%;
     padding-left: 25px;
+
     .left,
     .right {
       width: 43.3%;
       min-width: 550px;
+
       .el-form-item {
         margin-bottom: 16px;
       }
+
       .el-form-item__label {
         text-align: left;
       }
+
       .el-form-item__content {
         text-align: left;
+
         .el-input,
         .el-select {
           width: 400px !important;
         }
       }
+
       textarea {
         height: 92px;
       }
     }
+
     .right {
       padding-top: 6px;
     }
   }
+
   .edit-rule-table {
     .task-rules-table-box {
       width: 98%;
       padding: 0px;
       box-sizing: border-box;
     }
+
     .el-form-item {
       width: calc(100% - 30px);
     }
+
     .el-input__inner {
       border: 0px !important;
       border-radius: 2px;
@@ -636,17 +612,21 @@
     .el-input__suffix {
       right: 8px;
     }
+
     span {
       cursor: pointer;
     }
+
     .cell {
       padding-left: 0 !important;
+
       i {
         outline: none !important;
       }
     }
   }
-  .el-table th.el-table__cell > .cell {
+
+  .el-table th.el-table__cell>.cell {
     padding-right: 0;
   }
 }

--
Gitblit v1.8.0