Просмотр исходного кода

Merge branch 'all-v4-bxy' into 'all-v4'

All v4 bxy

See merge request skyeye/skyeye_frontend/skyeye-admin!318
Fei Liu 1 год назад
Родитель
Сommit
0c02d02448

+ 9 - 22
src/api/datamanagement/alert.ts

@@ -1,38 +1,25 @@
 import { http } from '@/utils/http/axios';
 import { http } from '@/utils/http/axios';
 
 
-// 问题类型接口1:AI检测
-export const getAIList = () => {
+// 地点获取接口:获取问题单地点列表(现为从公司-车间-工位-相机树中提取)
+export const getWorkLocationList = () => {
   return http.request({
   return http.request({
-    url: '/admin/algo/queryAlgoInfo',
+    url: '/admin/cameraPreview/queryCameraTree',
     method: 'get',
     method: 'get',
   });
   });
 };
 };
 
 
-// 问题类型接口2:人工上报
-export const getManualList = () => {
+// 获取问题类型及对应算法列表(此接口已根据问题一级分类进行汇总归类)
+export const getIssueTypeListWithMainType = (query: number) => {
   return http.request({
   return http.request({
-    url: '/admin/issueManage/getIssueTypeList',
+    url: `/issue/queryIssueTypeListWithMainType?source=${query}`,
     method: 'get',
     method: 'get',
   });
   });
 };
 };
 
 
-// 地点获取接口:获取问题单地点列表(现为从公司-车间-工位-相机树中提取
-export const getWorkLocationList = () => {
+// 获取问题单二级分类列表(此接口枚举当前source下所有算法的全部参数,未根据问题issueMainType进行汇总归类
+export const getIssueSubTypeList = (query: number) => {
   return http.request({
   return http.request({
-    url: '/admin/cameraPreview/queryCameraTree',
+    url: `/issue/getIssueSubTypeList?source=${query}`,
     method: 'get',
     method: 'get',
   });
   });
 };
 };
-
-// AI问题类型(issueMainType-issueType)
-export const getAIMainList = () => {
-  return http.request(
-    {
-      url: '/issue/getIssueSubTypeList',
-      method: 'get',
-    },
-    {
-      isShowErrorMessage: false,
-    },
-  );
-};

+ 12 - 54
src/views/cameras/overview/components/AddCameraByIP.vue

@@ -14,46 +14,22 @@
           <el-input v-model="cameraIPData.name" placeholder="请输入名称" style="width: 200px" />
           <el-input v-model="cameraIPData.name" placeholder="请输入名称" style="width: 200px" />
         </el-form-item>
         </el-form-item>
         <el-form-item label="设备ID:" prop="code">
         <el-form-item label="设备ID:" prop="code">
-          <el-input
-            v-model="cameraIPData.code"
-            placeholder="自定义ID,不能重复"
-            style="width: 200px"
-          />
+          <el-input v-model="cameraIPData.code" placeholder="自定义ID,不能重复" style="width: 200px" />
         </el-form-item>
         </el-form-item>
         <el-form-item label="IP地址:" prop="cameraIp">
         <el-form-item label="IP地址:" prop="cameraIp">
-          <el-input
-            v-model="cameraIPData.cameraIp"
-            placeholder="请输入IP地址"
-            style="width: 200px"
-          />
+          <el-input v-model="cameraIPData.cameraIp" placeholder="请输入IP地址" style="width: 200px" />
         </el-form-item>
         </el-form-item>
         <el-form-item label="端口:" prop="cameraPort">
         <el-form-item label="端口:" prop="cameraPort">
-          <el-input
-            v-model="cameraIPData.cameraPort"
-            placeholder="请输入端口号"
-            style="width: 200px"
-          />
+          <el-input v-model="cameraIPData.cameraPort" placeholder="请输入端口号" style="width: 200px" />
         </el-form-item>
         </el-form-item>
         <el-form-item label="用户名:" prop="username">
         <el-form-item label="用户名:" prop="username">
-          <el-input
-            v-model="cameraIPData.username"
-            placeholder="请输入用户名"
-            style="width: 200px"
-          />
+          <el-input v-model="cameraIPData.username" placeholder="请输入用户名" style="width: 200px" />
         </el-form-item>
         </el-form-item>
         <el-form-item label="密码:" prop="password">
         <el-form-item label="密码:" prop="password">
-          <el-input
-            v-model="cameraIPData.password"
-            placeholder="请输入用户名密码"
-            style="width: 200px"
-          />
+          <el-input v-model="cameraIPData.password" placeholder="请输入用户名密码" style="width: 200px" />
         </el-form-item>
         </el-form-item>
         <el-form-item label="视频编码标准:" prop="videoStandard">
         <el-form-item label="视频编码标准:" prop="videoStandard">
-          <el-select
-            v-model="cameraIPData.videoStandard"
-            placeholder="请选择视频编码标准"
-            style="width: 200px"
-          >
+          <el-select v-model="cameraIPData.videoStandard" placeholder="请选择视频编码标准" style="width: 200px">
             <el-option
             <el-option
               v-for="protocal in standardTypeSelect"
               v-for="protocal in standardTypeSelect"
               :key="protocal.value"
               :key="protocal.value"
@@ -63,11 +39,7 @@
           </el-select>
           </el-select>
         </el-form-item>
         </el-form-item>
         <el-form-item label="服务类型:" prop="videoServiceType">
         <el-form-item label="服务类型:" prop="videoServiceType">
-          <el-select
-            v-model="cameraIPData.videoServiceType"
-            placeholder="请选择服务类型"
-            style="width: 200px"
-          >
+          <el-select v-model="cameraIPData.videoServiceType" placeholder="请选择服务类型" style="width: 200px">
             <el-option
             <el-option
               v-for="protocal in serviceTypeSelect"
               v-for="protocal in serviceTypeSelect"
               :key="protocal.value"
               :key="protocal.value"
@@ -79,12 +51,7 @@
 
 
         <el-form-item label="NVR设备:" prop="nvrId">
         <el-form-item label="NVR设备:" prop="nvrId">
           <el-select v-model="cameraIPData.nvrId" placeholder="请选择NVR设备" style="width: 200px">
           <el-select v-model="cameraIPData.nvrId" placeholder="请选择NVR设备" style="width: 200px">
-            <el-option
-              v-for="item in nvrDevice"
-              :key="item.id"
-              :label="item.label"
-              :value="item.id"
-            />
+            <el-option v-for="item in nvrDevice" :key="item.id" :label="item.label" :value="item.id" />
           </el-select>
           </el-select>
           <div style="margin-left: 10px; position: relative; width: 20px; height: 32px">
           <div style="margin-left: 10px; position: relative; width: 20px; height: 32px">
             <el-tooltip content="选择已添加在【NVR设备管理】中的设备编号">
             <el-tooltip content="选择已添加在【NVR设备管理】中的设备编号">
@@ -93,11 +60,7 @@
           </div>
           </div>
         </el-form-item>
         </el-form-item>
         <el-form-item label="协议类型:" prop="cameraType">
         <el-form-item label="协议类型:" prop="cameraType">
-          <el-select
-            v-model="cameraIPData.cameraType"
-            placeholder="请选择协议类型"
-            style="width: 200px"
-          >
+          <el-select v-model="cameraIPData.cameraType" placeholder="请选择协议类型" style="width: 200px">
             <el-option
             <el-option
               v-for="protocal in protocalTypeSelect"
               v-for="protocal in protocalTypeSelect"
               :key="protocal.value"
               :key="protocal.value"
@@ -148,11 +111,7 @@
   import { ElIcon } from 'element-plus';
   import { ElIcon } from 'element-plus';
   import { InfoFilled } from '@element-plus/icons-vue';
   import { InfoFilled } from '@element-plus/icons-vue';
   import { CameraDetailServer } from '@/types/camera/type';
   import { CameraDetailServer } from '@/types/camera/type';
-  import {
-    protocalTypeSelect,
-    serviceTypeSelect,
-    standardTypeSelect,
-  } from '@/types/camera/constant';
+  import { protocalTypeSelect, serviceTypeSelect, standardTypeSelect } from '@/types/camera/constant';
   import useNvrDevice from '../hooks/useNvrDevice';
   import useNvrDevice from '../hooks/useNvrDevice';
   import useTreeWorkspaceInfo from '../hooks/useTreeWorkspaceInfo';
   import useTreeWorkspaceInfo from '../hooks/useTreeWorkspaceInfo';
   import { cloneDeep } from 'lodash-es';
   import { cloneDeep } from 'lodash-es';
@@ -177,6 +136,7 @@
       callback(new Error('请至少选择一个业务场景及对应应用模版'));
       callback(new Error('请至少选择一个业务场景及对应应用模版'));
     else if (value && Object.keys(sceneCheckedDataRef.value).length > value.length)
     else if (value && Object.keys(sceneCheckedDataRef.value).length > value.length)
       callback(new Error('请完成已选业务场景中的应用模版选择'));
       callback(new Error('请完成已选业务场景中的应用模版选择'));
+    else callback();
   };
   };
 
 
   const rules = {
   const rules = {
@@ -207,9 +167,7 @@
       if (valid) {
       if (valid) {
         const copyData = cloneDeep(cameraIPData.value);
         const copyData = cloneDeep(cameraIPData.value);
         if (cameraIPData.value.workspaceIdStr)
         if (cameraIPData.value.workspaceIdStr)
-          copyData.workspaceId = Number(
-            getWorkspaceIdFromTreeNode(cameraIPData.value.workspaceIdStr),
-          );
+          copyData.workspaceId = Number(getWorkspaceIdFromTreeNode(cameraIPData.value.workspaceIdStr));
         delete (copyData as any).principal;
         delete (copyData as any).principal;
         copyData.sourceType = 'IP';
         copyData.sourceType = 'IP';
         emits('confirm-execute', copyData);
         emits('confirm-execute', copyData);

+ 9 - 39
src/views/cameras/overview/components/AddCameraByNVR.vue

@@ -14,18 +14,10 @@
           <el-input v-model="cameraNVRData.name" placeholder="请输入名称" style="width: 200px" />
           <el-input v-model="cameraNVRData.name" placeholder="请输入名称" style="width: 200px" />
         </el-form-item>
         </el-form-item>
         <el-form-item label="设备ID:" prop="code">
         <el-form-item label="设备ID:" prop="code">
-          <el-input
-            v-model="cameraNVRData.code"
-            placeholder="自定义ID,不能重复"
-            style="width: 200px"
-          />
+          <el-input v-model="cameraNVRData.code" placeholder="自定义ID,不能重复" style="width: 200px" />
         </el-form-item>
         </el-form-item>
         <el-form-item label="视频编码标准:" prop="videoStandard">
         <el-form-item label="视频编码标准:" prop="videoStandard">
-          <el-select
-            v-model="cameraNVRData.videoStandard"
-            placeholder="请选择视频编码标准"
-            style="width: 200px"
-          >
+          <el-select v-model="cameraNVRData.videoStandard" placeholder="请选择视频编码标准" style="width: 200px">
             <el-option
             <el-option
               v-for="protocal in standardTypeSelect"
               v-for="protocal in standardTypeSelect"
               :key="protocal.value"
               :key="protocal.value"
@@ -35,11 +27,7 @@
           </el-select>
           </el-select>
         </el-form-item>
         </el-form-item>
         <el-form-item label="服务类型:" prop="videoServiceType">
         <el-form-item label="服务类型:" prop="videoServiceType">
-          <el-select
-            v-model="cameraNVRData.videoServiceType"
-            placeholder="请选择服务类型"
-            style="width: 200px"
-          >
+          <el-select v-model="cameraNVRData.videoServiceType" placeholder="请选择服务类型" style="width: 200px">
             <el-option
             <el-option
               v-for="protocal in serviceTypeSelect"
               v-for="protocal in serviceTypeSelect"
               :key="protocal.value"
               :key="protocal.value"
@@ -50,12 +38,7 @@
         </el-form-item>
         </el-form-item>
         <el-form-item label="NVR设备:" prop="nvrId">
         <el-form-item label="NVR设备:" prop="nvrId">
           <el-select v-model="cameraNVRData.nvrId" placeholder="请选择NVR设备" style="width: 200px">
           <el-select v-model="cameraNVRData.nvrId" placeholder="请选择NVR设备" style="width: 200px">
-            <el-option
-              v-for="item in nvrDevice"
-              :key="item.id"
-              :label="item.label"
-              :value="item.id"
-            />
+            <el-option v-for="item in nvrDevice" :key="item.id" :label="item.label" :value="item.id" />
           </el-select>
           </el-select>
           <div style="margin-left: 10px; position: relative; width: 20px; height: 32px">
           <div style="margin-left: 10px; position: relative; width: 20px; height: 32px">
             <el-tooltip content="选择已添加在【NVR设备管理】中的设备编号">
             <el-tooltip content="选择已添加在【NVR设备管理】中的设备编号">
@@ -64,11 +47,7 @@
           </div>
           </div>
         </el-form-item>
         </el-form-item>
         <el-form-item label="NVR平台通道号:" prop="nvrChannel">
         <el-form-item label="NVR平台通道号:" prop="nvrChannel">
-          <el-input
-            v-model="cameraNVRData.nvrChannel"
-            placeholder="请输入NVR平台通道号"
-            style="width: 200px"
-          />
+          <el-input v-model="cameraNVRData.nvrChannel" placeholder="请输入NVR平台通道号" style="width: 200px" />
         </el-form-item>
         </el-form-item>
         <el-form-item label="所属工位:" prop="workspaceIdStr">
         <el-form-item label="所属工位:" prop="workspaceIdStr">
           <el-tree-select
           <el-tree-select
@@ -97,11 +76,7 @@
           />
           />
         </el-form-item>
         </el-form-item>
         <el-form-item label="协议类型:" prop="cameraType">
         <el-form-item label="协议类型:" prop="cameraType">
-          <el-select
-            v-model="cameraNVRData.cameraType"
-            placeholder="请选择协议类型"
-            style="width: 200px"
-          >
+          <el-select v-model="cameraNVRData.cameraType" placeholder="请选择协议类型" style="width: 200px">
             <el-option
             <el-option
               v-for="protocal in protocalTypeSelect"
               v-for="protocal in protocalTypeSelect"
               :key="protocal.value"
               :key="protocal.value"
@@ -128,11 +103,7 @@
   import { ElIcon, ElTooltip } from 'element-plus';
   import { ElIcon, ElTooltip } from 'element-plus';
   import { InfoFilled } from '@element-plus/icons-vue';
   import { InfoFilled } from '@element-plus/icons-vue';
   import { CameraDetailServer } from '@/types/camera/type';
   import { CameraDetailServer } from '@/types/camera/type';
-  import {
-    protocalTypeSelect,
-    serviceTypeSelect,
-    standardTypeSelect,
-  } from '@/types/camera/constant';
+  import { protocalTypeSelect, serviceTypeSelect, standardTypeSelect } from '@/types/camera/constant';
   import useNvrDevice from '../hooks/useNvrDevice';
   import useNvrDevice from '../hooks/useNvrDevice';
   import useTreeWorkspaceInfo from '../hooks/useTreeWorkspaceInfo';
   import useTreeWorkspaceInfo from '../hooks/useTreeWorkspaceInfo';
   import sysConfigItemOfAddCamera from './sysConfigItemOfAddCamera.vue';
   import sysConfigItemOfAddCamera from './sysConfigItemOfAddCamera.vue';
@@ -156,6 +127,7 @@
       callback(new Error('请至少选择一个业务场景及对应应用模版'));
       callback(new Error('请至少选择一个业务场景及对应应用模版'));
     else if (value && Object.keys(sceneCheckedDataRef.value).length > value.length)
     else if (value && Object.keys(sceneCheckedDataRef.value).length > value.length)
       callback(new Error('请完成已选业务场景中的应用模版选择'));
       callback(new Error('请完成已选业务场景中的应用模版选择'));
+    else callback();
   };
   };
 
 
   const rules = {
   const rules = {
@@ -184,9 +156,7 @@
       if (valid) {
       if (valid) {
         const copyData = cloneDeep(cameraNVRData.value);
         const copyData = cloneDeep(cameraNVRData.value);
         if (cameraNVRData.value.workspaceIdStr)
         if (cameraNVRData.value.workspaceIdStr)
-          copyData.workspaceId = Number(
-            getWorkspaceIdFromTreeNode(cameraNVRData.value.workspaceIdStr),
-          );
+          copyData.workspaceId = Number(getWorkspaceIdFromTreeNode(cameraNVRData.value.workspaceIdStr));
         delete (copyData as any).principal;
         delete (copyData as any).principal;
         copyData.sourceType = 'NVR';
         copyData.sourceType = 'NVR';
         emits('confirm-execute', copyData);
         emits('confirm-execute', copyData);

+ 7 - 29
src/views/cameras/overview/components/AddCameraBySRS.vue

@@ -14,11 +14,7 @@
           <el-input v-model="CameraSRSData.name" placeholder="请输入名称" style="width: 200px" />
           <el-input v-model="CameraSRSData.name" placeholder="请输入名称" style="width: 200px" />
         </el-form-item>
         </el-form-item>
         <el-form-item label="设备ID:" prop="code">
         <el-form-item label="设备ID:" prop="code">
-          <el-input
-            v-model="CameraSRSData.code"
-            placeholder="自定义ID,不能重复"
-            style="width: 200px"
-          />
+          <el-input v-model="CameraSRSData.code" placeholder="自定义ID,不能重复" style="width: 200px" />
         </el-form-item>
         </el-form-item>
         <el-form-item label="rtsp地址:" prop="rtspUrl">
         <el-form-item label="rtsp地址:" prop="rtspUrl">
           <el-input
           <el-input
@@ -29,12 +25,7 @@
         </el-form-item>
         </el-form-item>
         <el-form-item label="NVR设备:" prop="nvrId">
         <el-form-item label="NVR设备:" prop="nvrId">
           <el-select v-model="CameraSRSData.nvrId" placeholder="请选择NVR设备" style="width: 200px">
           <el-select v-model="CameraSRSData.nvrId" placeholder="请选择NVR设备" style="width: 200px">
-            <el-option
-              v-for="item in nvrDevice"
-              :key="item.id"
-              :label="item.label"
-              :value="item.id"
-            />
+            <el-option v-for="item in nvrDevice" :key="item.id" :label="item.label" :value="item.id" />
           </el-select>
           </el-select>
           <div style="margin-left: 10px; position: relative; width: 20px; height: 32px">
           <div style="margin-left: 10px; position: relative; width: 20px; height: 32px">
             <el-tooltip content="选择已添加在【NVR设备管理】中的设备编号">
             <el-tooltip content="选择已添加在【NVR设备管理】中的设备编号">
@@ -43,19 +34,11 @@
           </div>
           </div>
         </el-form-item>
         </el-form-item>
         <el-form-item label="相机IP地址:" prop="cameraIp">
         <el-form-item label="相机IP地址:" prop="cameraIp">
-          <el-input
-            v-model="CameraSRSData.cameraIp"
-            placeholder="请输入IP地址"
-            style="width: 200px"
-          />
+          <el-input v-model="CameraSRSData.cameraIp" placeholder="请输入IP地址" style="width: 200px" />
         </el-form-item>
         </el-form-item>
 
 
         <el-form-item label="视频编码标准:" prop="videoStandard">
         <el-form-item label="视频编码标准:" prop="videoStandard">
-          <el-select
-            v-model="CameraSRSData.videoStandard"
-            placeholder="请选择视频编码标准"
-            style="width: 200px"
-          >
+          <el-select v-model="CameraSRSData.videoStandard" placeholder="请选择视频编码标准" style="width: 200px">
             <el-option
             <el-option
               v-for="protocal in standardTypeSelect"
               v-for="protocal in standardTypeSelect"
               :key="protocal.value"
               :key="protocal.value"
@@ -65,11 +48,7 @@
           </el-select>
           </el-select>
         </el-form-item>
         </el-form-item>
         <el-form-item label="服务类型:" prop="videoServiceType">
         <el-form-item label="服务类型:" prop="videoServiceType">
-          <el-select
-            v-model="CameraSRSData.videoServiceType"
-            placeholder="请选择服务类型"
-            style="width: 200px"
-          >
+          <el-select v-model="CameraSRSData.videoServiceType" placeholder="请选择服务类型" style="width: 200px">
             <el-option
             <el-option
               v-for="protocal in serviceTypeSelect"
               v-for="protocal in serviceTypeSelect"
               :key="protocal.value"
               :key="protocal.value"
@@ -145,6 +124,7 @@
       callback(new Error('请至少选择一个业务场景及对应应用模版'));
       callback(new Error('请至少选择一个业务场景及对应应用模版'));
     else if (value && Object.keys(sceneCheckedDataRef.value).length > value.length)
     else if (value && Object.keys(sceneCheckedDataRef.value).length > value.length)
       callback(new Error('请完成已选业务场景中的应用模版选择'));
       callback(new Error('请完成已选业务场景中的应用模版选择'));
+    else callback();
   };
   };
 
 
   const rules = {
   const rules = {
@@ -172,9 +152,7 @@
       if (valid) {
       if (valid) {
         const copyData = cloneDeep(CameraSRSData.value);
         const copyData = cloneDeep(CameraSRSData.value);
         if (CameraSRSData.value.workspaceIdStr)
         if (CameraSRSData.value.workspaceIdStr)
-          copyData.workspaceId = Number(
-            getWorkspaceIdFromTreeNode(CameraSRSData.value.workspaceIdStr),
-          );
+          copyData.workspaceId = Number(getWorkspaceIdFromTreeNode(CameraSRSData.value.workspaceIdStr));
         delete (copyData as any).principal;
         delete (copyData as any).principal;
         copyData.sourceType = 'RTSP';
         copyData.sourceType = 'RTSP';
         emits('confirm-execute', copyData);
         emits('confirm-execute', copyData);

+ 1 - 1
src/views/cameras/overview/components/BatchImportCamera.vue

@@ -237,7 +237,7 @@
       cardVisible.value = false;
       cardVisible.value = false;
     } catch (error) {
     } catch (error) {
       ElMessage({
       ElMessage({
-        message: '系统错误',
+        message: response.message,
         type: 'error',
         type: 'error',
       });
       });
       emits('update');
       emits('update');

+ 5 - 8
src/views/datamanager/alertformdata/components/common/AlertTable.vue

@@ -21,7 +21,7 @@
       </el-table-column>
       </el-table-column>
       <el-table-column label="类型" prop="issueType" width="150">
       <el-table-column label="类型" prop="issueType" width="150">
         <template #default="{ row }">
         <template #default="{ row }">
-          {{ getNameByType(row.source, row.issueType) }}
+          {{ getNameByType(row.source, row.issueMainType, row.issueType) }}
         </template>
         </template>
       </el-table-column>
       </el-table-column>
       <el-table-column label="问题描述" prop="description" width="280" show-overflow-tooltip>
       <el-table-column label="问题描述" prop="description" width="280" show-overflow-tooltip>
@@ -122,7 +122,7 @@
   import { ElTable } from 'element-plus';
   import { ElTable } from 'element-plus';
   import { onBeforeMount, onMounted, ref } from 'vue';
   import { onBeforeMount, onMounted, ref } from 'vue';
   import { getNameBySource, getNameByState } from './constant.question';
   import { getNameBySource, getNameByState } from './constant.question';
-  import { useIssueType } from '../../hooks/useIssueType';
+  import { useIssueMainType } from '../../hooks/useIssueMainType';
   import { useWorkLocation } from '../../hooks/useWorkLocation';
   import { useWorkLocation } from '../../hooks/useWorkLocation';
   import { useUserStore } from '@/store/modules/user';
   import { useUserStore } from '@/store/modules/user';
   import { PERM_DATA } from '@/types/permission/constants';
   import { PERM_DATA } from '@/types/permission/constants';
@@ -135,10 +135,7 @@
     else return userStore.checkPermission(PERM_DATA.VIOLATION_DELETE);
     else return userStore.checkPermission(PERM_DATA.VIOLATION_DELETE);
   };
   };
 
 
-  const { aiOptions, manualOptions, getAIOptions, getManualOptions, getNameByType } =
-    useIssueType();
-  console.log(aiOptions.value, manualOptions.value);
-
+  const { getAIMainOptions, getManualMainOptions, getNameByType } = useIssueMainType();
   const { locationOptions, getLocationOptions, getNameByWorkid } = useWorkLocation();
   const { locationOptions, getLocationOptions, getNameByWorkid } = useWorkLocation();
 
 
   const multipleTableRef = ref<InstanceType<typeof ElTable>>();
   const multipleTableRef = ref<InstanceType<typeof ElTable>>();
@@ -286,8 +283,8 @@
   defineExpose({ clearAll, updateCurRowChosen });
   defineExpose({ clearAll, updateCurRowChosen });
 
 
   onBeforeMount(() => {
   onBeforeMount(() => {
-    getAIOptions();
-    getManualOptions();
+    getAIMainOptions();
+    getManualMainOptions();
     getLocationOptions();
     getLocationOptions();
   });
   });
 
 

+ 5 - 5
src/views/datamanager/alertformdata/components/common/AlertTableSimple.vue

@@ -16,7 +16,7 @@
       <el-table-column type="selection" width="55"></el-table-column>
       <el-table-column type="selection" width="55"></el-table-column>
       <el-table-column label="类型" prop="issueType" width="180">
       <el-table-column label="类型" prop="issueType" width="180">
         <template #default="{ row }">
         <template #default="{ row }">
-          {{ getNameByType(row.source, row.issueType) }}
+          {{ getNameByType(row.source, row.issueMainType, row.issueType) }}
         </template>
         </template>
       </el-table-column>
       </el-table-column>
       <el-table-column label="问题描述" prop="description" width="280" show-overflow-tooltip>
       <el-table-column label="问题描述" prop="description" width="280" show-overflow-tooltip>
@@ -72,10 +72,10 @@
   import { ElTable } from 'element-plus';
   import { ElTable } from 'element-plus';
   import { onBeforeMount, onMounted, ref } from 'vue';
   import { onBeforeMount, onMounted, ref } from 'vue';
   import { getNameByStateZJC } from './constant.question';
   import { getNameByStateZJC } from './constant.question';
-  import { useIssueType } from '../../hooks/useIssueType';
+  import { useIssueMainType } from '../../hooks/useIssueMainType';
   import { useWorkLocation } from '../../hooks/useWorkLocation';
   import { useWorkLocation } from '../../hooks/useWorkLocation';
 
 
-  const { getAIOptions, getManualOptions, getNameByType } = useIssueType();
+  const { getAIMainOptions, getManualMainOptions, getNameByType } = useIssueMainType();
   const { locationOptions, getLocationOptions, getNameByWorkid } = useWorkLocation();
   const { locationOptions, getLocationOptions, getNameByWorkid } = useWorkLocation();
 
 
   const multipleTableRef = ref<InstanceType<typeof ElTable>>();
   const multipleTableRef = ref<InstanceType<typeof ElTable>>();
@@ -208,8 +208,8 @@
   defineExpose({ clearAll, updateCurRowChosen });
   defineExpose({ clearAll, updateCurRowChosen });
 
 
   onBeforeMount(() => {
   onBeforeMount(() => {
-    getAIOptions();
-    getManualOptions();
+    getAIMainOptions();
+    getManualMainOptions();
     getLocationOptions();
     getLocationOptions();
   });
   });
 
 

+ 17 - 16
src/views/datamanager/alertformdata/components/common/QueryFormSimple.vue

@@ -75,6 +75,7 @@
   const queryForm = reactive<TableQueryForm>({
   const queryForm = reactive<TableQueryForm>({
     pageNumber: 1,
     pageNumber: 1,
     pageSize: 10,
     pageSize: 10,
+    queryParam: {},
   });
   });
 
 
   const issueTypeValue = ref([]);
   const issueTypeValue = ref([]);
@@ -97,10 +98,10 @@
     workLocation.value = [];
     workLocation.value = [];
     tempState.value = '';
     tempState.value = '';
     dateRange.value = [];
     dateRange.value = [];
-    Reflect.deleteProperty(queryForm, 'startTime');
-    Reflect.deleteProperty(queryForm, 'endTime');
-    Reflect.deleteProperty(queryForm, 'issueMainTypeList');
-    Reflect.deleteProperty(queryForm, 'issueTypeList');
+    Reflect.deleteProperty(queryForm.queryParam, 'startTime');
+    Reflect.deleteProperty(queryForm.queryParam, 'endTime');
+    Reflect.deleteProperty(queryForm.queryParam, 'issueMainTypeList');
+    Reflect.deleteProperty(queryForm.queryParam, 'issueTypeList');
     formRef.value?.resetFields();
     formRef.value?.resetFields();
     emits('onReset', queryForm);
     emits('onReset', queryForm);
   };
   };
@@ -113,11 +114,11 @@
         arrMain.push(item[0]);
         arrMain.push(item[0]);
         arrSub.push(item[1]);
         arrSub.push(item[1]);
       });
       });
-      queryForm.issueMainTypeList = [...new Set(arrMain)];
-      queryForm.issueTypeList = arrSub;
+      queryForm.queryParam.issueMainTypeList = [...new Set(arrMain)];
+      queryForm.queryParam.issueTypeList = arrSub;
     } else {
     } else {
-      Reflect.deleteProperty(queryForm, 'issueMainTypeList');
-      Reflect.deleteProperty(queryForm, 'issueTypeList');
+      Reflect.deleteProperty(queryForm.queryParam, 'issueMainTypeList');
+      Reflect.deleteProperty(queryForm.queryParam, 'issueTypeList');
     }
     }
   };
   };
 
 
@@ -127,24 +128,24 @@
       workLocation.value.forEach((item) => {
       workLocation.value.forEach((item) => {
         arr.push(item[1]);
         arr.push(item[1]);
       });
       });
-      queryForm.workspaceId = arr;
+      queryForm.queryParam.workspaceId = arr;
     } else {
     } else {
-      Reflect.deleteProperty(queryForm, 'workspaceId');
+      Reflect.deleteProperty(queryForm.queryParam, 'workspaceId');
     }
     }
   };
   };
 
 
   const handleIssueStateChange = () => {
   const handleIssueStateChange = () => {
-    if (tempState.value) queryForm.issueState = JSON.parse(tempState.value);
-    else Reflect.deleteProperty(queryForm, 'issueState');
+    if (tempState.value) queryForm.queryParam.issueState = JSON.parse(tempState.value);
+    else Reflect.deleteProperty(queryForm.queryParam, 'issueState');
   };
   };
 
 
   const handleDateChange = () => {
   const handleDateChange = () => {
     if (dateRange.value != null) {
     if (dateRange.value != null) {
-      queryForm.startTime = dateRange.value[0];
-      queryForm.endTime = dateRange.value[1];
+      queryForm.queryParam.startTime = dateRange.value[0];
+      queryForm.queryParam.endTime = dateRange.value[1];
     } else {
     } else {
-      Reflect.deleteProperty(queryForm, 'startTime');
-      Reflect.deleteProperty(queryForm, 'endTime');
+      Reflect.deleteProperty(queryForm.queryParam, 'startTime');
+      Reflect.deleteProperty(queryForm.queryParam, 'endTime');
     }
     }
   };
   };
 </script>
 </script>

+ 0 - 2
src/views/datamanager/alertformdata/components/default-simple/Default.vue

@@ -59,7 +59,6 @@
   import AlertTableSimple, { DataSourceItem } from '../common/AlertTableSimple.vue';
   import AlertTableSimple, { DataSourceItem } from '../common/AlertTableSimple.vue';
   import DetailDialog from '../common/DetailDialog.vue';
   import DetailDialog from '../common/DetailDialog.vue';
   import Pagination from '../common/Pagination.vue';
   import Pagination from '../common/Pagination.vue';
-  // import { useIssueType } from '../../hooks/useIssueType';
   import { useWorkLocation } from '../../hooks/useWorkLocation';
   import { useWorkLocation } from '../../hooks/useWorkLocation';
   import { useIssueMainType } from '../../hooks/useIssueMainType';
   import { useIssueMainType } from '../../hooks/useIssueMainType';
   import Prequalification from '../common/Prequalification.vue';
   import Prequalification from '../common/Prequalification.vue';
@@ -69,7 +68,6 @@
     deleteDefaultTableData,
     deleteDefaultTableData,
   } from '@/api/datamanagement/alert-default';
   } from '@/api/datamanagement/alert-default';
 
 
-  // const { aiOptions, manualOptions, getAIOptions, getManualOptions } = useIssueType();
   const { locationOptions, getLocationOptions } = useWorkLocation();
   const { locationOptions, getLocationOptions } = useWorkLocation();
   const { aiMainOptions, getAIMainOptions } = useIssueMainType();
   const { aiMainOptions, getAIMainOptions } = useIssueMainType();
 
 

+ 1 - 1
src/views/datamanager/alertformdata/components/default/Default.vue

@@ -485,9 +485,9 @@
   });
   });
 
 
   onBeforeMount(() => {
   onBeforeMount(() => {
-    getLocationOptions();
     getAIMainOptions();
     getAIMainOptions();
     getManualMainOptions();
     getManualMainOptions();
+    getLocationOptions();
   });
   });
 </script>
 </script>
 
 

+ 0 - 1
src/views/datamanager/alertformdata/components/show/Show.vue

@@ -77,7 +77,6 @@
   import Pagination from '../common/Pagination.vue';
   import Pagination from '../common/Pagination.vue';
   import AddDrawer from '../common/AddDrawer.vue';
   import AddDrawer from '../common/AddDrawer.vue';
   import EditDrawer from '../common/EditDrawer.vue';
   import EditDrawer from '../common/EditDrawer.vue';
-  // import { useIssueType } from '../../hooks/useIssueType';
   import { useWorkLocation } from '../../hooks/useWorkLocation';
   import { useWorkLocation } from '../../hooks/useWorkLocation';
   import { useIssueMainType } from '../../hooks/useIssueMainType';
   import { useIssueMainType } from '../../hooks/useIssueMainType';
   import {
   import {

+ 41 - 57
src/views/datamanager/alertformdata/hooks/useIssueMainType.ts

@@ -1,17 +1,8 @@
 import { ref } from 'vue';
 import { ref } from 'vue';
-import { getAIMainList, getManualList } from '@/api/datamanagement/alert';
-import { questionMainTypeNameMap } from '@/views/datamanager/alertformdata/components/common/constant.question';
+import { getIssueTypeListWithMainType } from '@/api/datamanagement/alert';
+import { Source } from '@/views/datamanager/alertformdata/components/common/constant.question';
 
 
-type AIMainOption = {
-  value: number;
-  label: string;
-  children: {
-    value: number;
-    label: string;
-  }[];
-};
-
-type ManualMainOption = {
+type IssueMainTypeOption = {
   value: number;
   value: number;
   label: string;
   label: string;
   children: {
   children: {
@@ -21,63 +12,56 @@ type ManualMainOption = {
 };
 };
 
 
 export function useIssueMainType() {
 export function useIssueMainType() {
-  // AI检测
-  const aiMainOptions = ref<AIMainOption[]>([]);
-  // 人工上报
-  const manualMainOptions = ref<ManualMainOption[]>([]);
+  const aiMainOptions = ref<IssueMainTypeOption[]>([]); // AI检测
+  const manualMainOptions = ref<IssueMainTypeOption[]>([]); // 人工上报
+
+  const processBackendData = (data): IssueMainTypeOption[] => {
+    return data.map((item) => ({
+      value: item.issueMainTypeId,
+      label: item.issueMainTypeName,
+      children: item.issueTypeList.map((child) => ({
+        value: child.issueTypeId,
+        label: child.issueTypeName,
+      })),
+    }));
+  };
 
 
   const getAIMainOptions = async () => {
   const getAIMainOptions = async () => {
-    await getAIMainList().then((res) => {
-      res.forEach((item) => {
-        // 找不到当前issueMainType,新建一个
-        if (
-          !aiMainOptions.value.find((x) => x.value === item.issueMainTypeId) &&
-          questionMainTypeNameMap[item.issueMainTypeId]
-        ) {
-          aiMainOptions.value.push({
-            value: item.issueMainTypeId,
-            label: questionMainTypeNameMap[item.issueMainTypeId],
-            children: [
-              {
-                value: item.issueTypeId,
-                label: item.issueTypeName,
-              },
-            ],
-          });
-        } else if (aiMainOptions.value.find((x) => x.value === item.issueMainTypeId)) {
-          const existingMainType = aiMainOptions.value.find(
-            (x) => x.value === item.issueMainTypeId,
-          )!;
-          existingMainType.children.push({
-            value: item.issueTypeId,
-            label: item.issueTypeName,
-          });
-        }
-      });
+    await getIssueTypeListWithMainType(Source.ai).then((res) => {
+      aiMainOptions.value = processBackendData(res);
     });
     });
   };
   };
 
 
-  const getManualMainOptions = () => {
-    getManualList().then((res) => {
-      res.forEach((item) => {
-        manualMainOptions.value.push({
-          value: item.id,
-          label: item.name,
-          children: [
-            {
-              value: item.id,
-              label: item.name,
-            },
-          ],
-        });
-      });
+  const getManualMainOptions = async () => {
+    await getIssueTypeListWithMainType(Source.manual).then((res) => {
+      manualMainOptions.value = processBackendData(res);
     });
     });
   };
   };
 
 
+  // 根据 问题来源id + 问题类型id 决定表格类型栏展示文字
+  const getNameByType = (source, mainType, subType) => {
+    const sourceTypeMap = {
+      [Source.ai]: aiMainOptions,
+      [Source.manual]: manualMainOptions,
+    };
+    const targetArray = sourceTypeMap[source];
+    if (targetArray) {
+      const foundObject = targetArray.value.find((obj) => obj.value === mainType);
+      if (foundObject) {
+        const subObj = foundObject.children.find((sub) => sub.value === subType);
+        if (subObj) return subObj.label;
+        return '-';
+      }
+      return '-';
+    }
+    return '-';
+  };
+
   return {
   return {
     aiMainOptions,
     aiMainOptions,
     manualMainOptions,
     manualMainOptions,
     getAIMainOptions,
     getAIMainOptions,
     getManualMainOptions,
     getManualMainOptions,
+    getNameByType,
   };
   };
 }
 }

+ 21 - 41
src/views/datamanager/alertformdata/hooks/useIssueType.ts

@@ -1,58 +1,39 @@
+/**
+ * @description: 用于展示数据-添加-问题类型选择-可选项
+ */
 import { ref } from 'vue';
 import { ref } from 'vue';
-import { getAIList, getManualList } from '@/api/datamanagement/alert'
+import { getIssueSubTypeList } from '@/api/datamanagement/alert';
 import { Source } from '../components/common/constant.question';
 import { Source } from '../components/common/constant.question';
 
 
-type AIOption = {
-  id: number
-  name: string
-};
-
-type ManualOption = {
-  id: number
-  name: string
+type IssueOptionType = {
+  id: number;
+  name: string;
 };
 };
 
 
 export function useIssueType() {
 export function useIssueType() {
-  // AI检测
-  const aiOptions = ref<AIOption[]>([]);
-  // 人工上报
-  const manualOptions = ref<ManualOption[]>([]);
+  const aiOptions = ref<IssueOptionType[]>([]); // AI检测
+  const manualOptions = ref<IssueOptionType[]>([]); // 人工上报
 
 
   const getAIOptions = () => {
   const getAIOptions = () => {
-    getAIList().then((res) => {
+    getIssueSubTypeList(Source.ai).then((res) => {
       res.forEach((item) => {
       res.forEach((item) => {
         aiOptions.value.push({
         aiOptions.value.push({
-          id: item.id,
-          name: item.name
-        })
+          id: item.issueTypeId,
+          name: item.issueTypeName,
+        });
       });
       });
-    })
+    });
   };
   };
 
 
   const getManualOptions = () => {
   const getManualOptions = () => {
-    getManualList().then((res) => {
+    getIssueSubTypeList(Source.manual).then((res) => {
       res.forEach((item) => {
       res.forEach((item) => {
         manualOptions.value.push({
         manualOptions.value.push({
-          id: item.id,
-          name: item.name
-        })
-      })
-    })
-  };
-
-  // 根据 问题来源id + 问题类型id 决定表格类型栏展示文字
-  const getNameByType = (source, type) => {
-    const sourceTypeMap = {
-      [Source.ai]: aiOptions,
-      [Source.manual]: manualOptions,
-    }
-    const targetArray = sourceTypeMap[source];
-    if (targetArray) {
-      const foundObject = targetArray.value.find(obj => obj.id === type);
-      if (foundObject) return foundObject.name;
-      return '-'
-    }
-    return '-'
+          id: item.issueTypeId,
+          name: item.issueTypeName,
+        });
+      });
+    });
   };
   };
 
 
   return {
   return {
@@ -60,6 +41,5 @@ export function useIssueType() {
     manualOptions,
     manualOptions,
     getAIOptions,
     getAIOptions,
     getManualOptions,
     getManualOptions,
-    getNameByType
   };
   };
-}
+}