From 4b65f439152d211d30e2d7f449552d73ae738cd1 Mon Sep 17 00:00:00 2001 From: sd <shidong@jhsoft.cc> Date: 星期三, 13 八月 2025 17:06:05 +0800 Subject: [PATCH] 摄像机配置-必填项样式调整;任务名称去掉默认值增加提示词;图表功能优化。 预警规则-新增功能调整 添加默认图标。 数据推送-调整页面文案显示;修复任务配置bug(选择是否预警后 摄像机名称显示且无法多选) --- src/pages/cameraAccess/components/SceneRule.vue | 163 +++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 131 insertions(+), 32 deletions(-) diff --git a/src/pages/cameraAccess/components/SceneRule.vue b/src/pages/cameraAccess/components/SceneRule.vue index 3e67bce..fba6762 100644 --- a/src/pages/cameraAccess/components/SceneRule.vue +++ b/src/pages/cameraAccess/components/SceneRule.vue @@ -1,7 +1,7 @@ <template> <div class="scene-edit-container"> <div class="scene-title"> - <b style="font-size: 14px; line-height: 18px">鐫f煡浠诲姟</b> + <b style="font-size: 14px; line-height: 18px">AI浠诲姟</b> <el-button type="primary" size="mini" @click="handleCreate" style="margin-left: 90%" v-show="!editScene && TreeDataPool.selectedNode.type !== 'MENU'">+ 娣诲姞浠诲姟</el-button> </div> @@ -9,10 +9,17 @@ <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-form-item label="鍥炬爣"> + <!-- 鍥剧墖棰勮 --> + <div class="icon-preview-container"> + <el-image v-if="sceneForm.iconUrl" + :src="sceneForm.iconUrl + '?t=' + timestamp"></el-image> + <!-- <el-image :src="sceneForm.iconUrl?'http://192.168.1.235:7009'+sceneForm.iconUrl + '?t=' + timestamp:'http://192.168.1.235:7009/opt/smart/icon/task_icon.png'" fit="cover" /> --> + <img v-else src="@/assets/img/绌虹櫧.png" fit="cover" /> + <!-- <img style="width: 60px;" v-else src="@/assets/img/瀹瑰櫒@1x.png" /> --> + </div> </el-form-item> - <el-form-item label="浜嬩欢绛夌骇"> + <el-form-item label="浜嬩欢绛夌骇" required> <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> @@ -21,37 +28,47 @@ <el-option label="浜旂骇" :value="5"></el-option> </el-select> </el-form-item> - <el-form-item label="鏃堕棿娈�"> + <el-form-item label="鏃堕棿娈�" required> <el-select v-model="sceneForm.workTimeId" 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-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> --> </div> <div class="right"> - <el-form-item label="浠诲姟鎻忚堪"> - <el-input v-model="sceneForm.desc" type="textarea" size="mini"></el-input> + + <el-form-item label="浠诲姟鍚嶇О" required> + <el-input v-model="sceneForm.scene_name" placeholder="璇疯緭鍏ヤ换鍔″悕绉�" size="mini" maxlength="15"></el-input> </el-form-item> <!-- 棰勮瑙勫垯 --> - <el-form-item label="棰勮瑙勫垯"> - <el-select v-model="sceneForm.warningRules" placeholder="璇烽�夋嫨" size="mini" multiple> + <el-form-item label="浠诲姟鎻忚堪" required> + <!-- <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-select> --> + <!-- <el-select v-model="sceneForm.warningRules" placeholder="璇烽�夋嫨" size="mini" filterable> + <el-option v-for="item in VideoManageData.ruleOptions" :key="item.ruleId" :label="item.fileName" + :value="item.ruleId"></el-option> + </el-select> --> + <ruleSelect :initial-rules="VideoManageData.ruleOptions" :selected-rule="currentRule" + @rule-selected="handleRuleSelect" @rule-created="handleRuleCreate" /> </el-form-item> <!-- 鐭ヨ瘑搴� --> - <el-form-item label="鐭ヨ瘑搴�" size="mini"> + <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-input v-model="sceneForm.desc" type="textarea" size="mini"></el-input> </el-form-item> <!-- <el-form-item label="浜嬩欢澹伴煶"> <el-select @@ -133,22 +150,22 @@ {{ 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> - </el-table-column> - <el-table-column label="棰勮瑙勫垯" prop="warningRule" align="center"> + </el-table-column> --> + <el-table-column label="浠诲姟鎻忚堪" prop="warningRule" align="center"> <template slot-scope="scope"> {{(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> </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> @@ -181,12 +198,14 @@ import RuleEditor from "@/components/subComponents/RuleEditor"; import SceneEditor from "./scene/Editor"; import { getSoundList } from "@/api/event"; +import ruleSelect from "../components/ruleSelect/ruleSelect.vue"; import { forEach } from "jszip"; export default { name: "SceneRuleEditor", components: { SceneEditor, + ruleSelect, }, props: { seletedCameras: { @@ -231,6 +250,14 @@ this.editScene = false; }, }, + created() { + this.userInfo = sessionStorage.getItem("userInfo") && JSON.parse(sessionStorage.getItem("userInfo")) + }, + computed: { + isGb28182() { + return this.TreeDataPool.selectedNode.cameraType === 1 + } + }, mounted() { // window.addEventListener('resize', this.windowSizeChange) this.getSounds(); @@ -240,6 +267,9 @@ }, data() { return { + timestamp: Date.now(), // 鏃堕棿鎴崇敤浜庡己鍒跺埛鏂板浘鐗� + userInfo: {}, + currentRule: null,// 鍒濆鏃犻�変腑瑙勫垯 knowledgeProps: { multiple: true, // 鏀寔澶氶�� value: 'id', // 鎸囧畾閫夐」鍊煎瓧娈� @@ -260,7 +290,6 @@ }, templateSdks: [], templateRules: "", - ruleList: [], sceneNameStore: [], eventAudio: new Audio(), soundList: [], @@ -268,6 +297,32 @@ }; }, methods: { + handleRuleSelect(rule) { + // console.log('閫変腑瑙勫垯:', rule); + this.sceneForm.warningRules = [rule.ruleId] + this.sceneForm.ruleName = null + this.sceneForm.iconUrl = rule.iconUrl + // 鏇存柊鏃堕棿鎴冲己鍒跺埛鏂板浘鐗� + this.timestamp = Date.now(); + console.info("iconUrl:" + this.sceneForm.iconUrl) + // 鎵ц棰勮鍒ゆ柇閫昏緫 + }, + handleRuleCreate(newRule) { + if (newRule) { + // console.log('鍒涘缓鏂拌鍒�:', newRule); + this.sceneForm.ruleName = newRule.fileName + this.sceneForm.warningRules = [] + this.sceneForm.rules = [] + this.sceneForm.iconUrl = newRule.iconUrl + console.log(this.sceneForm) + // 灏嗘柊瑙勫垯淇濆瓨鍒板悗绔� + } else { + this.sceneForm.ruleName = null + this.sceneForm.warningRules = [] + this.sceneForm.rules = [] + this.sceneForm.iconUrl = null + } + }, getSoundById(id) { if (id) { let sound = this.soundList.find((item) => item.id == id); @@ -349,9 +404,10 @@ time_rule_id: "", voice: {}, voiceId: "", + iconUrl: "" }; - this.$refs.sceneEditor.cleanRule(); - this.$refs.sceneEditor.getSdkConnection(); + // this.$refs.sceneEditor.cleanRule(); + // this.$refs.sceneEditor.getSdkConnection(); }, handleCreate() { if (this.linkRule && this.TreeDataPool.selectedNodes.length < 2) { @@ -396,7 +452,7 @@ ? this.bubbleSort(tempArr)[tempArr.length - 1] + 1 : 1; - this.sceneForm.scene_name = "鍦烘櫙" + latest; + // this.sceneForm.scene_name = "鍦烘櫙" + latest;//鍘绘帀鍒濆鍖栧悕绉� //鍒濆鍖栨椂闂存 this.sceneForm.time_rule_id = this.VideoManageData.TimeRules[0].id; }, @@ -426,6 +482,11 @@ this.templateSdks = selectedTpl.sdks; this.templateRules = JSON.stringify(scene.rules); + this.sceneForm.iconUrl = this.VideoManageData.ruleOptions.find(rue => + rue.ruleId === scene.warningRule[0].ruleId + ).iconUrl + this.currentRule = this.sceneForm.warningRule[0] + console.info(this.currentRule) // this.$refs.sceneEditor.editHandle(this.templateRules);//绠楁硶鐩稿叧 }, @@ -448,13 +509,15 @@ message: "鏃堕棿娈典笉鑳戒负绌�", }); return false; - } else if (!this.sceneForm.checkContents) { - this.$notify({ - type: "warning", - message: "妫�娴嬪唴瀹逛笉鑳戒负绌�", - }); - return false; - } else if (!this.sceneForm.warningRules) { + } + // else if (!this.sceneForm.checkContents) { + // this.$notify({ + // type: "warning", + // message: "妫�娴嬪唴瀹逛笉鑳戒负绌�", + // }); + // return false; + // } + else if (!this.sceneForm.warningRules) { this.$notify({ type: "warning", message: "棰勮瑙勫垯涓嶈兘涓虹┖", @@ -471,6 +534,7 @@ return true; }, saveSceneRule() { + console.log(this.Camera) if (!this.validateForm()) { return; } @@ -500,12 +564,16 @@ } this.sceneForm.taskName = this.sceneForm.scene_name this.sceneForm.eventLevel = this.sceneForm.alarm_level - this.sceneForm.checks = this.sceneForm.checkContents + // this.sceneForm.checks = this.sceneForm.checkContents + this.sceneForm.checks = [this.VideoManageData.checkOptions[0].checkId] this.sceneForm.rules = this.sceneForm.warningRules // this.sceneForm.workTimes = workTimes this.sceneForm.taskDescription = this.sceneForm.desc this.sceneForm.knows = fileIds, - this.onSaveScene(this.sceneForm); + this.sceneForm.createUser = this.userInfo.id + this.sceneForm.type = this.isGb28182 ? 1 : 0 + // console.info(this.sceneForm) + this.onSaveScene(this.sceneForm); }, handleDelScene(groupRule) { @@ -550,6 +618,34 @@ </script> <style lang="scss"> +.icon-preview-container { + margin-right: 240px; + width: 60px; + height: 60px; + border: 1px dashed #d9d9d9; + border-radius: 6px; + cursor: pointer; + position: relative; + overflow: hidden; + display: flex; + justify-content: center; + align-items: center; + + .el-image { + width: 100%; + height: 100%; + } + + .el-icon-plus { + font-size: 28px; + color: #8c939d; + } + + &:hover { + border-color: #409EFF; + } +} + .scene-edit-container { .scene-title { height: 30px; @@ -573,6 +669,8 @@ .el-form-item__label { text-align: left; + // min-width: 82px; + font-size: 13px; } .el-form-item__content { @@ -585,7 +683,8 @@ } textarea { - height: 92px; + height: 72px; + width: 400px; } } -- Gitblit v1.8.0