摄像机配置-必填项样式调整;任务名称去掉默认值增加提示词;图表功能优化。
预警规则-新增功能调整 添加默认图标。
数据推送-调整页面文案显示;修复任务配置bug(选择是否预警后 摄像机名称显示且无法多选)
1个文件已添加
5个文件已修改
345 ■■■■■ 已修改文件
src/assets/img/空白.png 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/cameraAccess/components/SceneRule.vue 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/cameraAccess/components/ruleSelect/ruleSelect.vue 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/datapush/index/RightEvent copy.vue 265 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/datapush/index/RightEvent.vue 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/settings/views/WarningRuleView.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/img/¿Õ°×.png
src/pages/cameraAccess/components/SceneRule.vue
@@ -12,12 +12,14 @@
          <el-form-item label="图标">
            <!-- å›¾ç‰‡é¢„览 -->
            <div class="icon-preview-container">
              <el-image :src="sceneForm.iconUrl?sceneForm.iconUrl + '?t=' + timestamp:'/opt/smart/icon/task_icon.png'" fit="cover" />
              <!-- <el-image v-else src="@/assets/img/容器@1x.png" fit="cover" /> -->
              <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>
@@ -26,7 +28,7 @@
              <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>
@@ -44,11 +46,11 @@
        </div>
        <div class="right">
          <el-form-item label="任务名称">
            <el-input v-model="sceneForm.scene_name" size="mini" maxlength="15"></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-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>
@@ -302,15 +304,24 @@
      this.sceneForm.iconUrl = rule.iconUrl
      // æ›´æ–°æ—¶é—´æˆ³å¼ºåˆ¶åˆ·æ–°å›¾ç‰‡
      this.timestamp = Date.now();
      console.info(this.sceneForm.iconUrl)
      console.info("iconUrl:" + this.sceneForm.iconUrl)
      // æ‰§è¡Œé¢„警判断逻辑
    },
    handleRuleCreate(newRule) {
      // console.log('创建新规则:', newRule);
      this.sceneForm.ruleName = newRule.fileName
      this.sceneForm.warningRules = []
      this.sceneForm.rules = []
      // å°†æ–°è§„则保存到后端
      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) {
@@ -393,7 +404,7 @@
        time_rule_id: "",
        voice: {},
        voiceId: "",
        iconUrl:""
        iconUrl: ""
      };
      // this.$refs.sceneEditor.cleanRule();
      // this.$refs.sceneEditor.getSdkConnection();
@@ -441,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;
    },
@@ -559,8 +570,8 @@
      // this.sceneForm.workTimes = workTimes
      this.sceneForm.taskDescription = this.sceneForm.desc
      this.sceneForm.knows = fileIds,
      this.sceneForm.createUser = this.userInfo.id
      this.sceneForm.type = this.isGb28182?1:0
        this.sceneForm.createUser = this.userInfo.id
      this.sceneForm.type = this.isGb28182 ? 1 : 0
      // console.info(this.sceneForm)
      this.onSaveScene(this.sceneForm);
    },
src/pages/cameraAccess/components/ruleSelect/ruleSelect.vue
@@ -1,7 +1,8 @@
<template>
  <div class="rule-selector">
    <el-autocomplete v-model="inputValue" :fetch-suggestions="querySearch" placeholder="请输入任务描述"
    <el-autocomplete v-model="inputValue" :fetch-suggestions="querySearch" placeholder="一句话生成算法"
      :trigger-on-focus="true" value-key="fileName" @select="handleSelect" @blur="handleBlur" clearable
      @clear="handleClear"
      class="rule-input">
      <template slot-scope="{ item }">
        <div class="rule-item">
@@ -92,6 +93,10 @@
      return text.replace(regex, '<span class="highlight">$1</span>');
    },
    // æ¸…空输入框
    handleClear() {
      this.$emit('rule-created');
    },
    // é€‰æ‹©è§„则
    handleSelect(item) {
      this.$emit('rule-selected', item);
@@ -117,7 +122,7 @@
        // fileName: `自定义规则-${new Date().toLocaleDateString()}`,
        fileName: this.inputValue,
        warningRules: this.inputValue,
        iconUrl: '',
        iconUrl: '/opt/smart/icon/task_icon.png',
        rangeValue: 50,
        createTime: new Date().toISOString(),
        createUser: 1 // å‡è®¾å½“前用户ID为1
src/pages/datapush/index/RightEvent copy.vue
@@ -3,25 +3,13 @@
    <div class="s-right-config">
      <el-form>
        <el-form-item label="名称">
          <el-input
            v-model="taskEditData.name"
            placeholder="请输入名称"
            size="small"
            style="width: 400px"
          ></el-input>
          <el-input v-model="taskEditData.name" placeholder="请输入名称" size="small" style="width: 400px"></el-input>
        </el-form-item>
        <el-form-item label="时间">
          <el-date-picker
            v-model="taskEditData.time"
            format="yyyy-MM-dd HH:mm:ss"
            value-format="yyyy-MM-dd HH:mm:ss"
            type="datetimerange"
            range-separator="至"
            start-placeholder="开始日期"
            end-placeholder="结束日期"
            size="small"
          ></el-date-picker>
          <el-date-picker v-model="taskEditData.time" format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss"
            type="datetimerange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"
            size="small"></el-date-picker>
        </el-form-item>
        <span style="line-height: 38px">推送服务器</span>
@@ -29,54 +17,30 @@
          <i class="el-icon-circle-plus-outline"></i>
          <span>&nbsp;添加接口地址</span>
        </div>
        <div
          v-for="(item, index) in urls"
          :key="item.hash"
          class="flex-box server-url"
        >
        <div v-for="(item, index) in urls" :key="item.hash" class="flex-box server-url">
          <div>
            <el-checkbox v-model="item.enable"></el-checkbox>
            <span class="ml20">{{ "URL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" }}</span>
            <el-input
              v-model="item.url"
              style="width: 360px; margin-left: 0px"
              size="small"
              placeholder="http://10.10.10.10:8000/dataApi"
            ></el-input>
            <el-input v-model="item.url" style="width: 360px; margin-left: 0px" size="small"
              placeholder="http://10.10.10.10:8000/dataApi"></el-input>
          </div>
          <div class="server-add">
            <i
              class="el-icon-remove-outline"
              @click="delUrl(index)"
              style="color: red; margin-right: 10px"
            />
            <i class="el-icon-remove-outline" @click="delUrl(index)" style="color: red; margin-right: 10px" />
            <i class="el-icon-circle-plus-outline" @click="addUrl()"></i>
          </div>
        </div>
        <el-form-item label="联动方式" style="margin-top: 20px; width: 100">
          <el-select
            v-model="taskEditData.lineWay"
            placeholder="请选择"
            size="small"
          >
          <el-select v-model="taskEditData.lineWay" placeholder="请选择" size="small">
            <el-option label="请选择" value=""></el-option>
            <el-option
              v-for="item in taskEditData.lineOptions"
              :key="item.value"
              :label="item.label"
              :value="item.value"
            ></el-option>
            <el-option v-for="item in taskEditData.lineOptions" :key="item.value" :label="item.label"
              :value="item.value"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="标签">
          <el-radio v-model="taskEditData.radioValue" label="1"
            >满足全部</el-radio
          >
          <el-radio v-model="taskEditData.radioValue" label="2"
            >满足任意一个</el-radio
          >
          <el-radio v-model="taskEditData.radioValue" label="1">满足全部</el-radio>
          <el-radio v-model="taskEditData.radioValue" label="2">满足任意一个</el-radio>
        </el-form-item>
      </el-form>
    </div>
@@ -94,116 +58,58 @@
        </div>
      </div>
      <div
        v-for="(rule, index) in dataList"
        :key="index"
        style="margin-top: 10px"
      >
      <div v-for="(rule, index) in dataList" :key="index" style="margin-top: 10px">
        <el-row :gutter="20">
          <!-- ä¸»é¢˜ -->
          <el-col :span="4">
            <el-select
              v-model="rule.topic_type"
              placeholder="请选择"
              @change="selectTopic(rule, true)"
              size="small"
            >
              <el-option
                v-for="item in rule.topicTypeOptions"
                :key="item.id"
                :label="item.name"
                :value="item.value"
              ></el-option>
            <el-select v-model="rule.topic_type" placeholder="请选择" @change="selectTopic(rule, true)" size="small">
              <el-option v-for="item in rule.topicTypeOptions" :key="item.id" :label="item.name"
                :value="item.value"></el-option>
            </el-select>
          </el-col>
          <!-- è¿‡æ»¤å€¼ -->
          <el-col :span="4">
            <el-select
              v-model="rule.topic_arg"
              placeholder="请选择"
              @change="selectArg(rule, true)"
              size="small"
            >
              <el-option
                v-for="item in rule.topicArgOptions"
                :key="item.id"
                :label="item.name"
                :value="item.value"
              ></el-option>
            <el-select v-model="rule.topic_arg" placeholder="请选择" @change="selectArg(rule, true)" size="small">
              <el-option v-for="item in rule.topicArgOptions" :key="item.id" :label="item.name"
                :value="item.value"></el-option>
            </el-select>
          </el-col>
          <!-- æ“ä½œç¬¦ -->
          <el-col :span="4">
            <el-select
              v-model="rule.operator"
              placeholder="请选择"
              size="small"
            >
            <el-select v-model="rule.operator" placeholder="请选择" size="small">
              <el-option label="==" value="="></el-option>
            </el-select>
          </el-col>
          <!-- å€¼ç±»åž‹ -->
          <el-col :span="4">
            <el-select
              v-model="rule.operator_type"
              placeholder="请选择"
              @change="selectOperator(rule, true)"
              size="small"
            >
              <el-option
                v-for="item in rule.operatorTypeOpionts"
                :key="item.id"
                :label="item.name"
                :value="item.value"
              ></el-option>
            <el-select v-model="rule.operator_type" placeholder="请选择" @change="selectOperator(rule, true)" size="small">
              <el-option v-for="item in rule.operatorTypeOpionts" :key="item.id" :label="item.name"
                :value="item.value"></el-option>
            </el-select>
          </el-col>
          <!-- è¿‡æ»¤å€¼ -->
          <el-col :span="4">
            <div v-if="rule.operator_type === 'custom'">
              <el-input
                v-model="rule.rule_value"
                placeholder="请输入内容"
                size="small"
              ></el-input>
              <el-input v-model="rule.rule_value" placeholder="请输入内容" size="small"></el-input>
            </div>
            <div v-else>
              <el-select
                v-model="rule.rule_values"
                multiple
                collapse-tags
                placeholder="请选择"
                size="small"
                @change="selectValue(rule, $event)"
              >
                <el-option
                  v-for="item in rule.ruleValueOptions"
                  :key="item.id"
                  :label="item.name"
                  :disabled="item.disabled"
                  :value="item.value"
                ></el-option>
              <el-select v-model="rule.rule_values" multiple collapse-tags placeholder="请选择" size="small"
                @change="selectValue(rule, $event)">
                <el-option v-for="item in rule.ruleValueOptions" :key="item.id" :label="item.name"
                  :disabled="item.disabled" :value="item.value"></el-option>
              </el-select>
            </div>
          </el-col>
          <el-col :span="4">
            <div class="rule-edit-btn">
              <i
                v-show="dataList.length > 1"
                class="el-icon-remove-outline"
                @click="delRule(index)"
                style="color: red; margin-right: 10px"
              />
              <i
                v-show="index === dataList.length - 1"
                class="el-icon-circle-plus-outline"
                @click="addRule()"
                style="color: #3d68e1"
              ></i>
              <i v-show="dataList.length > 1" class="el-icon-remove-outline" @click="delRule(index)"
                style="color: red; margin-right: 10px" />
              <i v-show="index === dataList.length - 1" class="el-icon-circle-plus-outline" @click="addRule()"
                style="color: #3d68e1"></i>
            </div>
          </el-col>
        </el-row>
@@ -216,87 +122,43 @@
      </div>
      <div class="config-item">
        <b>推送字段</b>
        <el-button type="primary" size="mini" @click="openPushSetDialog"
          >设置</el-button
        >
        <el-button type="primary" size="mini" @click="openPushSetDialog">设置</el-button>
      </div>
      <div class="save-btn">
        <el-button
          type="info"
          size="small"
          @click="onCancle"
          style="color: #222"
          >取消</el-button
        >
        <el-button type="primary" @click="eventPushsSave" size="small"
          >保存</el-button
        >
        <el-button type="info" size="small" @click="onCancle" style="color: #222">取消</el-button>
        <el-button type="primary" @click="eventPushsSave" size="small">保存</el-button>
      </div>
    </div>
    <el-dialog
      :visible="pushFieldDialog"
      :append-to-body="false"
      :close-on-click-modal="false"
      class="dialog-push-field"
      @close="pushFieldDialog = false"
    >
    <el-dialog :visible="pushFieldDialog" :append-to-body="false" :close-on-click-modal="false"
      class="dialog-push-field" @close="pushFieldDialog = false">
      <div slot="title" class="slot-title">
        <p>请选择想要推送的字段</p>
        <div class="right">
          <el-checkbox
            v-model="allFieldChecked"
            @change="allCheckChange"
          ></el-checkbox>
          <el-checkbox v-model="allFieldChecked" @change="allCheckChange"></el-checkbox>
        </div>
      </div>
      <div
        class="check-area"
        v-for="configObj in tempPushSet"
        :key="configObj.id"
      >
      <div class="check-area" v-for="configObj in tempPushSet" :key="configObj.id">
        <div class="header">
          <div class="title">{{ configObj.name }}</div>
          <div class="right">
            <el-checkbox
              v-model="configObj.checked"
              @change="toggleConfigCheck(configObj)"
              >全选</el-checkbox
            >
            <el-checkbox v-model="configObj.checked" @change="toggleConfigCheck(configObj)">全选</el-checkbox>
          </div>
        </div>
        <div class="flex-box flex-wrap">
          <div
            class="param flex-box"
            v-for="param in configObj.children"
            :key="param.id"
          >
            <el-checkbox
              v-model="param.checked"
              @change="checkChildren"
            ></el-checkbox>
          <div class="param flex-box" v-for="param in configObj.children" :key="param.id">
            <el-checkbox v-model="param.checked" @change="checkChildren"></el-checkbox>
            <span class="param-name">{{ param.name }}</span>
            <el-input
              v-model="param.alias"
              size="mini"
              :ref="`input_${param.id}`"
              @input="varifyField(param)"
              :style="{
                color: param.error ? 'red' : '',
                borderColor: param.error ? 'red' : '',
              }"
            ></el-input>
            <el-input v-model="param.alias" size="mini" :ref="`input_${param.id}`" @input="varifyField(param)" :style="{
              color: param.error ? 'red' : '',
              borderColor: param.error ? 'red' : '',
            }"></el-input>
          </div>
        </div>
      </div>
      <div slot="footer" class="text-center">
        <el-button size="small" @click="canclePushFieldSet">取消</el-button>
        <el-button
          size="small"
          type="primary"
          :disabled="disabledPushFieldSet"
          @click="submitPushFieldSet"
          >保存</el-button
        >
        <el-button size="small" type="primary" :disabled="disabledPushFieldSet"
          @click="submitPushFieldSet">保存</el-button>
      </div>
    </el-dialog>
  </div>
@@ -855,9 +717,11 @@
.s-event-push-right {
  text-align: left;
  font-size: 14px;
  i {
    cursor: pointer;
  }
  .s-right-config {
    padding: 10px 40px;
  }
@@ -876,9 +740,11 @@
  .s-right-rule {
    padding: 20px 40px;
    margin-top: 17px;
    .rule-title {
      border-bottom: 1px solid #e0e0e0;
    }
    .rule-title2 {
      margin-top: 20px;
    }
@@ -903,12 +769,15 @@
      margin-left: 895px;
    }
  }
  .config-item {
    margin: 20px 0;
    b {
      margin-right: 10px;
    }
  }
  .el-button--text {
    text-decoration: unset;
  }
@@ -919,9 +788,11 @@
      position: relative;
      top: 2px;
    }
    span {
      font-size: 14px;
    }
    display: inline;
    color: #3d68e1;
    line-height: 38px;
@@ -932,71 +803,88 @@
  .server-url {
    padding-top: 25px;
  }
  .server-add {
    font-size: 18px;
    margin-left: 8px;
    color: #3d68e1;
    line-height: 39px;
  }
  .dialog-push-field {
    .el-button--primary.is-disabled,
    .el-button--primary.is-disabled:hover {
      background-color: #9eb4f0 !important;
      border-color: #9eb4f0 !important;
    }
    .el-dialog {
      width: 910px;
      height: 700px;
      .el-dialog__body {
        padding-top: 14px;
        height: 540px;
        overflow-y: auto;
      }
    }
    .text-center {
      text-align: center;
    }
    .slot-title {
      position: relative;
      .right {
        position: absolute;
        top: 0;
        right: 30px;
      }
    }
    .check-area {
      padding-bottom: 10px;
      .header {
        position: relative;
        background: #efefef;
        line-height: 30px;
        margin-bottom: 14px;
        font-weight: bold;
        .title {
          border-left: 3px solid #2481fa;
          padding-left: 10px;
        }
        .right {
          position: absolute;
          top: 0;
          right: 30px;
        }
      }
      .flex-box.flex-wrap {
        flex-wrap: wrap;
      }
      .param.flex-box {
        word-break: keep-all;
        align-items: center;
        margin: 0 10px;
        min-width: 260px;
        margin-bottom: 10px;
        .param-name {
          margin: 0 5px;
        }
        .el-input {
          border-color: #dcdfe6;
          color: #606266;
          .el-input__inner {
            color: inherit;
            border-color: inherit;
@@ -1007,6 +895,3 @@
  }
}
</style>
src/pages/datapush/index/RightEvent.vue
@@ -27,11 +27,11 @@
        <div v-for="(item, index) in urls" :key="item.hash" class="flex-box server-url">
          <div>
            <el-checkbox v-model="item.enable"></el-checkbox>
            <span class="ml20">{{ "URL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" }}</span>
            <span class="ml20">{{ "服务器&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" }}</span>
            <el-input v-if="taskEditData.pushType === '1'" v-model="item.server_ip"
              style="width: 180px; margin-left: 0px;margin-right: 30px" size="small"
              placeholder="192.168.1.100"></el-input>
            ç«¯å£ <el-input v-if="taskEditData.pushType === '1'" v-model="item.port" style="width: 70px; margin-left: 10px"
             <el-input v-if="taskEditData.pushType === '1'" v-model="item.port" style="width: 70px; margin-left: 10px"
              size="small" placeholder="8030"></el-input>
            <el-input v-if="taskEditData.pushType === '2'" v-model="item.url" style="width: 360px; margin-left: 0px"
              size="small" placeholder="http://10.10.10.10:8000/dataApi"></el-input>
@@ -111,15 +111,10 @@
              <el-input v-model="rule.rule_value" placeholder="请输入内容" size="small"></el-input>
            </div>
            <div v-else>
              <el-select v-if="!isWarningSelect" v-model="rule.rule_values" multiple collapse-tags placeholder="请选择"
                size="small" @change="selectValue(rule, $event)">
                <el-option v-for="item in rule.ruleValueOptions" :key="item.id" :label="item.name"
                  :disabled="item.disabled" :value="item.value"></el-option>
              </el-select>
              <el-select v-else v-model="rule.rule_values" collapse-tags placeholder="请选择" size="small"
              <el-select v-model="rule.rule_values" multiple collapse-tags placeholder="请选择" size="small"
                @change="selectValue(rule, $event)">
                <el-option v-for="item in rule.ruleValueOptions" :key="item.id" :label="item.name"
                  :value="item.value"></el-option>
                  :disabled="item.disabled" :value="item.value"></el-option>
              </el-select>
            </div>
          </el-col>
@@ -211,7 +206,6 @@
  },
  data() {
    return {
      isWarningSelect: true,
      taskEditData: {},
      dataList: [],
      dictionary: [],
@@ -625,11 +619,6 @@
          }
        }
      });
      if (rule.topic_type && rule.topic_type === 'warning') {
        this.isWarningSelect = true
      } else {
        this.isWarningSelect = false
      }
    },
    selectArg(rule, resetNext = false) {
      let argInfo = rule.topicArgOptions.filter((arg) => {
@@ -695,11 +684,6 @@
          rule.rule_value = "null*null";
          return;
        }
      }
      if (this.isWarningSelect) {
        rule.rule_value = val
      } else {
        rule.rule_value = val.join(",");
      }
    },
src/pages/settings/views/WarningRuleView.vue
@@ -278,7 +278,7 @@
          warningRules: file.warningRules,
          rangeValue: file.rangeValue,
          createUser:this.userInfo.id,
          iconUrl:file.iconUrl2
          iconUrl:file.iconUrl2?file.iconUrl2:"/opt/smart/icon/task_icon.png"
        })
        this.$message.success('添加成功')
        this.fetchFiles()