riku
2025-08-20 a09f984cbe2369e13d8694e91c4f8165ec6c2ba9
动态溯源模块优化
已修改6个文件
98 ■■■■■ 文件已修改
src/api/index.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components.d.ts 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/constant/scene-types/options.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sourcetrace/SourceTrace.vue 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sourcetrace/component/ClueRecordItem.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/sourcetrace/component/SourceTraceFilter.vue 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/index.js
@@ -1,8 +1,8 @@
import axios from 'axios';
import { ElMessage } from 'element-plus';
const openLog = true;
const debug = true;
const openLog = false;
const debug = false;
let ip1 = 'http://47.100.191.150:9029/';
let ws = `47.100.191.150:9031`;
src/components.d.ts
@@ -14,7 +14,6 @@
    'CardDialog copy': typeof import('./components/CardDialog copy.vue')['default']
    CheckButton: typeof import('./components/common/CheckButton.vue')['default']
    ConfigManage: typeof import('./components/map/ConfigManage.vue')['default']
    copy: typeof import('./components/CardDialog copy.vue')['default']
    CoreHeader: typeof import('./components/core/CoreHeader.vue')['default']
    CoreMenu: typeof import('./components/core/CoreMenu.vue')['default']
    DataSummary: typeof import('./components/monitor/DataSummary.vue')['default']
@@ -39,6 +38,7 @@
    ElFormItem: typeof import('element-plus/es')['ElFormItem']
    ElIcon: typeof import('element-plus/es')['ElIcon']
    ElInput: typeof import('element-plus/es')['ElInput']
    ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
    ElLink: typeof import('element-plus/es')['ElLink']
    ElOption: typeof import('element-plus/es')['ElOption']
    ElPagination: typeof import('element-plus/es')['ElPagination']
src/constant/scene-types/options.js
@@ -82,5 +82,9 @@
  {
    label: '市控点',
    value: '20'
  },
  {
    label: '小微站',
    value: '21'
  }
];
src/views/sourcetrace/SourceTrace.vue
@@ -200,7 +200,10 @@
        }
        // 判断场景类型是否选中
        if (v.pollutedSource.sceneList.length == 0) {
        if (
          v.pollutedSource == undefined ||
          v.pollutedSource.sceneList.length == 0
        ) {
          b3 = selectedSceneTypes.value.indexOf(NO_SCENE) != -1;
        } else {
          b3 =
@@ -306,25 +309,29 @@
      }
      // 筛选场景类型
      if (objData.pollutedSource.sceneList.length == 0) {
        // 若没有找到风险源时,将该分类设定为null
        if (sceneOptions.value.findIndex((v) => v.value == NO_SCENE) == -1) {
          sceneOptions.value.push({
            label: '未知',
            value: NO_SCENE
          });
          selectedSceneTypes.value.push(NO_SCENE);
        }
      } else {
        objData.pollutedSource.sceneList.forEach((s) => {
          if (sceneOptions.value.findIndex((v) => v.value == s.typeId) == -1) {
      if (objData.pollutedSource != undefined) {
        if (objData.pollutedSource.sceneList.length == 0) {
          // 若没有找到风险源时,将该分类设定为null
          if (sceneOptions.value.findIndex((v) => v.value == NO_SCENE) == -1) {
            sceneOptions.value.push({
              label: s.type,
              value: s.typeId
              label: '未知',
              value: NO_SCENE
            });
            selectedSceneTypes.value.push(s.typeId);
            selectedSceneTypes.value.push(NO_SCENE);
          }
        });
        } else {
          objData.pollutedSource.sceneList.forEach((s) => {
            if (
              sceneOptions.value.findIndex((v) => v.value == s.typeId) == -1
            ) {
              sceneOptions.value.push({
                label: s.type,
                value: s.typeId
              });
              selectedSceneTypes.value.push(s.typeId);
            }
          });
        }
      }
    // case '2':
    //   break;
@@ -355,6 +362,10 @@
  dataAnalysisApi
    .fetchPollutionTraceHistory(props.missionCode)
    .then((res) => {
      factorOptions.value = [];
      selectedFactorTypes.value = [];
      sceneOptions.value = [];
      selectedSceneTypes.value = [];
      const objList = JSON.parse(res.data);
      objList.forEach((obj) => {
        obj._type = obj.msgType + '';
src/views/sourcetrace/component/ClueRecordItem.vue
@@ -43,7 +43,7 @@
          <el-text :type="noWarn ? 'info' : 'warning'">
            {{
              item.pollutedSource.sceneList.length == 0
                ? '未找到风险源'
                ? '可能存在现场污染,请注意周边情况。'
                : '找到' + item.pollutedSource.sceneList.length + '个风险源'
            }}
          </el-text>
src/views/sourcetrace/component/SourceTraceFilter.vue
@@ -26,15 +26,15 @@
          size="default"
          :min="1"
        >
          <el-space>
            <el-checkbox
              v-for="item in factorOptions"
              :value="item.value"
              :key="item.label"
            >
              {{ item.label }}
            </el-checkbox>
          </el-space>
          <!-- <el-space> -->
          <el-checkbox
            v-for="item in factorOptions"
            :value="item.value"
            :key="item.label"
          >
            {{ item.label }}
          </el-checkbox>
          <!-- </el-space> -->
        </el-checkbox-group>
      </el-space>
    </div>
@@ -65,13 +65,30 @@
import { ref } from 'vue';
const props = defineProps({
  // 数据切片,线索、提示、溯源
  /**
   * 包含追踪信息的数据切片,包括线索、提示和溯源数据
   * @type {Array}
   */
  dataSlice: Array,
  // 监测因子
  /**
   * 监测因子类型数组
   * @type {Array}
   */
  factorType: Array,
  /**
   * 监测因子的可用选项
   * @type {Array<{value: string, label: string}>}
   */
  factorOptions: Array,
  // 场景类型
  /**
   * 用于过滤的场景类型数组
   * @type {Array}
   */
  sceneType: Array,
  /**
   * 场景选择的可用选项
   * @type {Array<{value: string, label: string}>}
   */
  sceneOptions: Array
});