sd
2025-07-22 c1784a781aad8271cf6ebd25325aef785535f0a4
src/pages/cameraAccess/components/SceneRule.vue
@@ -1,21 +1,21 @@
<template>
  <div class="scene-edit-container">
    <div class="scene-title">
      <b style="font-size: 14px; line-height: 18px">场景</b>
      <b style="font-size: 14px; line-height: 18px">督查任务</b>
      <el-button
        type="primary"
        size="mini"
        @click="handleCreate"
        style="margin-left: 90%"
        v-show="!editScene && TreeDataPool.selectedNode.type !== 'MENU'"
        >+ 添加场景</el-button
        >+ 添加任务</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-form-item label="任务名称">
            <el-input
              v-model="sceneForm.scene_name"
              size="mini"
@@ -38,7 +38,7 @@
          </el-form-item>
          <el-form-item label="时间段">
            <el-select
              v-model="sceneForm.time_rule_id"
              v-model="sceneForm.workingTimes"
              placeholder="请选择"
              size="mini"
            >
@@ -50,16 +50,39 @@
              ></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-form-item label="任务描述">
            <el-input
              v-model="sceneForm.desc"
              type="textarea"
              size="mini"
            ></el-input>
          </el-form-item>
          <el-form-item label="事件声音">
          <!-- <el-form-item label="事件声音">
            <el-select
              v-model="sceneForm.voice"
              placeholder="空"
@@ -90,17 +113,18 @@
                style="font-size: 26px; vertical-align: middle; color: #409eff"
              ></i>
            </span>
          </el-form-item>
          </el-form-item> -->
        </div>
      </div>
      <scene-editor
      <!-- <scene-editor
        ref="sceneEditor"
        :isLinkRule="linkRule"
        :Cameras="seletedCameras"
        :ruleList="templateRules"
        @sdkNameChange="getSceneName"
      ></scene-editor>
      ></scene-editor> -->
      <el-form-item style="width: 60%; min-width: 1048px">
        <el-button size="mini" @click="editScene = false">取消</el-button>
@@ -126,12 +150,17 @@
            align="center"
          ></el-table-column>
          <el-table-column
            label="场景名称"
            label="任务名称"
            prop="scene_name"
            align="center"
            show-overflow-tooltip
          ></el-table-column>
          <el-table-column
          <el-table-column label="事件等级" align="center">
            <template slot-scope="scope">
              <span>{{ scope.row.alarm_level | alarmLevel }}</span>
            </template>
          </el-table-column>
          <!-- <el-table-column
            label="策略"
            prop="group_text"
            align="center"
@@ -140,12 +169,43 @@
            <template slot-scope="scope">
              <span v-html="scope.row.group_text"></span>
            </template>
          </el-table-column>
          </el-table-column> -->
          <el-table-column
            label="时间段"
            prop="time_name"
            align="center"
          ></el-table-column>
          >
            <template slot-scope="scope">
            {{(scope.row.workingTime || []).map(r => r.labelName).join(' / ') || ''}}
              </template>
          </el-table-column>
          <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"
          >
            <template slot-scope="scope">
            {{(scope.row.warningRule || []).map(r => r.fileName).join(' / ') || ''}}
              </template>
          </el-table-column>
          <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"
@@ -157,16 +217,11 @@
              <el-switch v-model="scope.row.defence_state" @change="updateDefence(scope.row)"></el-switch>
            </template>
          </el-table-column>-->
          <el-table-column label="事件声音" align="center">
          <!-- <el-table-column label="事件声音" align="center">
            <template slot-scope="scope">
              <span>{{ getSoundById(scope.row.voiceId) }}</span>
            </template>
          </el-table-column>
          <el-table-column label="事件等级" align="center">
            <template slot-scope="scope">
              <span>{{ scope.row.alarm_level | alarmLevel }}</span>
            </template>
          </el-table-column>
          </el-table-column> -->
          <el-table-column label="操作" fixed="right" align="center">
            <template slot-scope="scope">
              <el-tooltip
@@ -202,7 +257,7 @@
</template>
<script>
import { saveCameraScene, deleteCameraScene } 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";
@@ -440,7 +495,7 @@
      if (!this.sceneForm.scene_name.trim()) {
        this.$notify({
          type: "warning",
          message: "场景名不能为空",
          message: "任务名不能为空",
        });
        return false;
      } else if (!this.sceneForm.alarm_level) {
@@ -449,7 +504,7 @@
          message: "事件等级不能为空",
        });
        return false;
      } else if (!this.sceneForm.time_rule_id) {
      } else if (!this.sceneForm.workingTimes) {
        this.$notify({
          type: "warning",
          message: "时间段不能为空",
@@ -462,27 +517,46 @@
      if (!this.validateForm()) {
        return;
      }
      let editorResp = this.$refs.sceneEditor.submitRule();
      if (!editorResp) {
        return;
      }
      this.sceneForm.rules = editorResp.rules;
      this.sceneForm.id = editorResp.id;
      this.sceneForm.group_text = editorResp.text;
      // let editorResp = this.$refs.sceneEditor.submitRule();
      // if (!editorResp) {
      //   return;
      // }
      // 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 : ''
          }
        })
      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.taskDescription = this.sceneForm.desc
      this.onSaveScene(this.sceneForm);
    },
    handleDelScene(groupRule) {
      let _this = this;
      this.$confirm("提示:删除后,该条规则将失效,是否删除?", {
      this.$confirm("提示:删除后,该条任务将失效,是否删除?", {
        center: true,
        cancelButtonClass: "comfirm-class-cancle",
        confirmButtonClass: "comfirm-class-sure",
      })
        .then(() => {
          deleteCameraScene(groupRule.id).then((res) => {
          // console.info("groupRule:"+JSON.stringify(groupRule))
          deleteCameraSceneTwo(
            {
            taskId: groupRule.taskId
          }
          ).then((res) => {
            this.$emit("delete-rule");
            if (res && res.success) {
            if (res && res.status === 200) {
              // console.info("删除成功")
              this.$notify({
                type: "success",
                message: "删除成功",