Explorar o código

feat: 违规问题(原报警问题管理)接口更新完成

bxy hai 1 ano
pai
achega
1cee7dd77d

+ 29 - 25
src/api/datamanagement/alert-default.ts

@@ -1,22 +1,26 @@
 import { http } from '@/utils/http/axios';
 
-// 获取默认数据表格
-export interface TableQueryForm {
-  pageNumber: number; // 页码
-  pageSize: number; // 页大小
-  source?: number; // 问题单来源:1-AI检测、2-人工上报
+export interface QueryParam {
   issueMainTypeList?: number[]; // 问题单类型(第一级)
   issueTypeList?: number[]; // 问题单类型(第二级)
   workspaceId?: number[]; // 工位id
+  source?: number; // 问题单来源:1-AI检测、2-人工上报
   issueState?: number[]; // 问题单状态
   startTime?: string; // 开始时间
   endTime?: string; // 结束时间
   hide?: boolean; // 问题生效状态,false-已生效,true-未生效
   order?: string; // 时间排序方式,desc-降序,asc-升序(默认降序)
 }
+
+// 获取默认数据表格
+export interface TableQueryForm {
+  pageNumber: number; // 页码
+  pageSize: number; // 页大小
+  queryParam: QueryParam;
+}
 export const getDefaultTableData = (body: TableQueryForm) => {
   return http.request({
-    url: '/issueManagement/getIssueDefaultListPageByCondition',
+    url: '/admin/issueManage/getIssueDefaultListPageByCondition',
     method: 'post',
     data: body,
   });
@@ -25,7 +29,7 @@ export const getDefaultTableData = (body: TableQueryForm) => {
 // 复制到展示问题单列表
 export const copyToShowTableData = (ids: number[]) => {
   return http.request({
-    url: `/issueManagement/copyToIssueDisplayList?issueId=${ids.join(',')}`,
+    url: `/admin/issueManage/copyToIssueDisplayList?issueIds=${ids.join(',')}`,
     method: 'post',
   });
 };
@@ -33,24 +37,24 @@ export const copyToShowTableData = (ids: number[]) => {
 // 删除默认问题单
 export const deleteDefaultTableData = (ids: number[]) => {
   return http.request({
-    url: `/issueManagement/deleteIssueDefault?issueId=${ids.join(',')}`,
-    method: 'delete',
+    url: `/admin/issueManage/deleteIssueDefault?issueIds=${ids.join(',')}`,
+    method: 'post',
   });
 };
 
 // 更新默认问题单列表状态(加急/隐藏)
-export interface UpdateList {
-  id: Number[]; // 问题单id,可批量操作
-  isHide?: Boolean; // 是否隐藏
-  priority?: Number; // 0-未加急,1-加急
-}
-export const updateDefaultTableData = (body: UpdateList) => {
-  return http.request({
-    url: '/issueManagement/updateIssueDefaultList',
-    method: 'put',
-    data: body,
-  });
-};
+// export interface UpdateList {
+//   id: Number[]; // 问题单id,可批量操作
+//   isHide?: Boolean; // 是否隐藏
+//   priority?: Number; // 0-未加急,1-加急
+// }
+// export const updateDefaultTableData = (body: UpdateList) => {  // 未曾使用
+//   return http.request({
+//     url: '/issueManagement/updateIssueDefaultList',
+//     method: 'put',
+//     data: body,
+//   });
+// };
 
 // 隐藏问题单
 export interface UpdateHide {
@@ -59,7 +63,7 @@ export interface UpdateHide {
 }
 export const updateDefaultHide = (body: UpdateHide) => {
   return http.request({
-    url: '/issue/hide',
+    url: '/admin/issueManage/hide',
     method: 'post',
     data: body,
   });
@@ -71,7 +75,7 @@ export interface UpdateHides {
 }
 export const updateDefaultHideAll = (body: UpdateHides) => {
   return http.request({
-    url: '/issue/hide/batch',
+    url: '/admin/issueManage/hide/batch',
     method: 'post',
     data: body,
   });
@@ -84,7 +88,7 @@ export interface UpdatePriority {
 }
 export const updateDefaultPriority = (body: UpdatePriority) => {
   return http.request({
-    url: '/issue/priority',
+    url: '/admin/issueManage/priority',
     method: 'post',
     data: body,
   });
@@ -97,7 +101,7 @@ export interface UpdatePrioritys {
 }
 export const updateDefaultPriorityAll = (body: UpdatePrioritys) => {
   return http.request({
-    url: '/issue/priority/batch',
+    url: '/admin/issueManage/priority/batch',
     method: 'post',
     data: body,
   });

+ 10 - 10
src/api/datamanagement/alert-show.ts

@@ -4,7 +4,7 @@ import { TableQueryForm } from './alert-default';
 // 获取展示数据表格
 export const getShowTableData = (body: TableQueryForm) => {
   return http.request({
-    url: '/issueManagement/getIssueDisplayListPageByCondition',
+    url: '/admin/issueManage/getIssueDisplayListPageByCondition',
     method: 'post',
     data: body,
   });
@@ -22,7 +22,7 @@ export interface AddForm {
 }
 export const addShowTableData = (body: AddForm) => {
   return http.request({
-    url: '/issueManagement/addIssueDisplay',
+    url: '/admin/issueManage/addIssueDisplay',
     method: 'post',
     data: body,
   });
@@ -31,8 +31,8 @@ export const addShowTableData = (body: AddForm) => {
 // 删除展示表格接口(delete)
 export const deleteShowTableData = (ids: number[]) => {
   return http.request({
-    url: `/issueManagement/deleteIssueDisplay?issueId=${ids.join(',')}`,
-    method: 'delete',
+    url: `/admin/issueManage/deleteIssueDisplay?issueId=${ids.join(',')}`,
+    method: 'post',
   });
 };
 
@@ -50,21 +50,21 @@ export interface EditForm {
 }
 export const EditShowTableData = (body: EditForm) => {
   return http.request({
-    url: '/issueManagement/editIssueDisplay',
-    method: 'put',
+    url: '/admin/issueManage/editIssueDisplay',
+    method: 'post',
     data: body,
   });
 };
 
 // 更新展示表格状态(show/hide)
 export interface UpdateList {
-  id: Number[]; // 问题单id,可批量操作
-  isHide?: Boolean; // 是否隐藏
+  ids: Number[]; // 问题单id,可批量操作
+  hide?: Boolean; // 是否隐藏
 }
 export const updateShowTableData = (body: UpdateList) => {
   return http.request({
-    url: '/issueManagement/updateIssueDisplayList',
-    method: 'put',
+    url: '/admin/issueManage/updateIssueDisplayList',
+    method: 'post',
     data: body,
   });
 };

+ 4 - 4
src/api/datamanagement/alert.ts

@@ -3,7 +3,7 @@ import { http } from '@/utils/http/axios';
 // 问题类型接口1:AI检测
 export const getAIList = () => {
   return http.request({
-    url: '/cameraPreview/getAlgoList',
+    url: '/admin/algo/queryAlgoInfo',
     method: 'get',
   });
 };
@@ -11,15 +11,15 @@ export const getAIList = () => {
 // 问题类型接口2:人工上报
 export const getManualList = () => {
   return http.request({
-    url: '/issue/getIssueTypeList',
+    url: '/admin/issueManage/getIssueTypeList',
     method: 'get',
   });
 };
 
-// 地点获取接口:获取问题单地点列表
+// 地点获取接口:获取问题单地点列表(现为从公司-车间-工位-相机树中提取)
 export const getWorkLocationList = () => {
   return http.request({
-    url: '/issue/getSiteList',
+    url: '/admin/cameraPreview/queryCameraTree',
     method: 'get',
   });
 };

+ 6 - 6
src/api/datamanagement/getDevMode.ts

@@ -11,21 +11,21 @@ export const getDevMode = () => {
 // 切换开发者模式开关状态
 export const switchDevMode = () => {
   return http.request({
-    url: '/issue/switchDevMode',
+    url: '/admin/issueManage/switchDevMode',
     method: 'post',
   });
 };
 
 export const getVideoLength = () => {
   return http.request({
-    url: '/sysconfig/getVideoLength',
+    url: '/admin/issueManage/getVideoLength',
     method: 'get',
   });
 };
 
 export const updateVideoLength = (len: number) => {
   return http.request({
-    url: '/sysconfig/updateVideoLength',
+    url: '/admin/issueManage/updateVideoLength',
     method: 'post',
     data: {
       videoLength: len,
@@ -43,14 +43,14 @@ export interface DirectPushIssueType {
 // 查询当前直接推送问题类型
 export const getCurIssueTypeList = () => {
   return http.request<DirectPushIssueType[]>({
-    url: '/issue/queryDirectPushIssueTypeList',
+    url: '/admin/issueManage/queryDirectPushIssueTypeList',
     method: 'get',
   });
 };
 
 export const addCurIssueTypeList = (data: { algoInfoIdList: number[] }) => {
   return http.request({
-    url: '/issue/saveDirectPushIssueType',
+    url: '/admin/issueManage/saveDirectPushIssueType',
     method: 'post',
     data,
   });
@@ -58,7 +58,7 @@ export const addCurIssueTypeList = (data: { algoInfoIdList: number[] }) => {
 
 export const deleteCurIssueTypeList = (val: number) => {
   return http.request({
-    url: `/issue/deleteDirectPushIssueTypeById?id=${val}`,
+    url: `/admin/issueManage/deleteDirectPushIssueTypeById?id=${val}`,
     method: 'post',
   });
 };

+ 53 - 43
src/views/datamanager/alertformdata/AlertformDataComplex.vue

@@ -1,62 +1,72 @@
 <template>
-  <div class="control-btn" v-if="hasPermisson()">
-    <div class="btn" :class="{ 'btn-active': activeName === 'default' }" @click="activeName = 'default'">默认数据</div>
-    <div class="btn" :class="{ 'btn-active': activeName === 'show' }" @click="activeName = 'show'">展示数据</div>
+  <div class="control-btn" v-if="hasFakeDataViewPermission()">
+    <div
+      class="btn"
+      :class="{ 'btn-active': activeName === 'default' }"
+      @click="activeName = 'default'"
+      >默认数据</div
+    >
+    <div class="btn" :class="{ 'btn-active': activeName === 'show' }" @click="activeName = 'show'"
+      >展示数据</div
+    >
   </div>
   <Default class="content-box" v-if="activeName === 'default'" />
   <Show class="content-box" v-else />
 </template>
 
 <script setup lang="ts">
-import { ref } from 'vue';
-import Default from './components/default/Default.vue';
-import Show from './components/show/Show.vue';
-import { useUserStore } from '@/store/modules/user';
+  import { ref } from 'vue';
+  import Default from './components/default/Default.vue';
+  import Show from './components/show/Show.vue';
+  import { useUserStore } from '@/store/modules/user';
 
-const activeName = ref('default');
+  const activeName = ref('default');
 
-const userStore = useUserStore();
-const hasPermisson = () => {
-  return userStore.checkPermission("question_mock_edit_admin");
-};
+  const userStore = useUserStore();
+  const hasFakeDataViewPermission = () => {
+    return (
+      userStore.checkPermission('back:data:violation:fake:add') ||
+      userStore.checkPermission('back:data:violation:fake:delete')
+    );
+  };
 </script>
 
 <style scoped lang="scss">
-.control-btn {
-  display: flex;
-  margin-bottom: 20px;
-
-  .btn {
+  .control-btn {
     display: flex;
-    justify-content: center;
-    align-items: center;
-    width: 188px;
-    height: 38px;
-    font-size: 14px;
-    font-weight: 400;
-    color: rgba(0, 0, 0, 0.88);
-    border: 1px solid #D9D9D9;
-    background: rgba(0, 0, 0, 0.02);
-    cursor: pointer;
-  }
+    margin-bottom: 20px;
 
-  :first-child {
-    border-radius: 8px 0px 0px 8px;
-  }
+    .btn {
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      width: 188px;
+      height: 38px;
+      font-size: 14px;
+      font-weight: 400;
+      color: rgba(0, 0, 0, 0.88);
+      border: 1px solid #d9d9d9;
+      background: rgba(0, 0, 0, 0.02);
+      cursor: pointer;
+    }
 
-  :last-child {
-    border-radius: 0px 8px 8px 0px;
-  }
+    :first-child {
+      border-radius: 8px 0px 0px 8px;
+    }
+
+    :last-child {
+      border-radius: 0px 8px 8px 0px;
+    }
 
-  .btn-active {
-    font-weight: 500;
-    color: #1890FF;
-    border: 1px solid #1890FF;
-    background-color: rgba(24, 144, 255, 0.15);
+    .btn-active {
+      font-weight: 500;
+      color: #1890ff;
+      border: 1px solid #1890ff;
+      background-color: rgba(24, 144, 255, 0.15);
+    }
   }
-}
 
-.content-box {
-  flex: 1;
-}
+  .content-box {
+    flex: 1;
+  }
 </style>

+ 4 - 1
src/views/datamanager/alertformdata/components/common/AlertTable.vue

@@ -128,7 +128,10 @@
 
   const userStore = useUserStore();
   const hasDataDeletePermisson = () => {
-    return userStore.checkPermission('data_delete');
+    // isShowTab = true 展示数据
+    if (props.isShowTab) return userStore.checkPermission('back:data:violation:fake:delete');
+    // isShowTab = false 默认数据
+    else return userStore.checkPermission('back:data:violation:general:delete');
   };
 
   const { aiOptions, manualOptions, getAIOptions, getManualOptions, getNameByType } =

+ 48 - 41
src/views/datamanager/alertformdata/components/common/Prequalification.vue

@@ -1,16 +1,18 @@
 <template>
-  <div class="main-container">
+  <div class="main-container" v-if="hasDevModePermisson() || hasVideoCutPermisson()">
     <div class="switch-container">
       <div class="prequal-container" v-if="hasDevModePermisson()">
-        <div>预审后生效模式:</div>
-        <el-tooltip :disabled="devMode" effect="light" placement="bottom-start">
-          <template #content>
-            开启后,违规数据将不直接在前台展示<br />在下方问题管理列表中,操作生效后,推送到前台问题列表展示
-          </template>
-          <el-switch :model-value="devMode" @change="handelSwitchDevMode" />
+        <el-tooltip
+          effect="light"
+          placement="bottom-start"
+          content="预审模式开启后,违规问题发生后再操作生效后进行展示"
+        >
+          <el-icon :size="20" style="margin: 6px 4px"><QuestionFilled /></el-icon>
         </el-tooltip>
+        <span>预审模式:</span>
+        <el-switch :model-value="devMode" @change="handelSwitchDevMode" />
       </div>
-      <div style="display: flex" v-if="hasDataDelete()">
+      <div style="display: flex" v-if="hasVideoCutPermisson()">
         <div>报警视频截取时长:</div>
         <el-select
           v-model="videoLength"
@@ -23,41 +25,44 @@
       </div>
     </div>
     <div class="options-container" v-if="hasDevModePermisson() && devMode">
-      <div class="option-title">直接推送问题类型:</div>
+      <el-tooltip
+        effect="light"
+        placement="bottom-start"
+        content="选择不需要预审即可直接生效展示在前台的问题类型"
+      >
+        <el-icon :size="20" style="margin: 6px 4px"><WarningFilled /></el-icon>
+      </el-tooltip>
+      <div class="option-title">白名单问题类型:</div>
       <div class="option-tags" :class="expandAll ? 'hide-style' : ''" id="option-id">
-        <el-tooltip effect="light" placement="top-start">
-          <template #content>
-            选择可直接推送到前台展示的违规问题类型<br />选择后检测到该类型问题发生时直接展示在前台问题列表
+        <el-popover
+          placement="bottom-start"
+          trigger="click"
+          :width="240"
+          popper-style="height: 400px; overflow: auto;"
+        >
+          <template #reference>
+            <div class="add-options">+</div>
           </template>
-          <span>
-            <el-popover
-              placement="bottom-start"
-              trigger="click"
-              :width="240"
-              popper-style="height: 400px; overflow: auto;"
+          <template #default>
+            <div
+              v-for="item in options"
+              :key="item.id"
+              class="common-option"
+              :class="isOptionInTags(item.id) ? 'chosen-option' : ''"
+              @click="handleChangeTagStatus(item.id)"
             >
-              <template #reference>
-                <div class="add-options">+</div>
-              </template>
-              <template #default>
-                <div
-                  v-for="item in options"
-                  :key="item.id"
-                  class="common-option"
-                  :class="isOptionInTags(item.id) ? 'chosen-option' : ''"
-                  @click="handleChangeTagStatus(item.id)"
-                >
-                  {{ item.name }}
-                </div>
-              </template>
-            </el-popover>
-          </span>
-        </el-tooltip>
+              {{ item.name }}
+            </div>
+          </template>
+        </el-popover>
+
         <el-tag
           class="option-tag"
           v-for="item in tags"
           :key="item.id"
-          type="info"
+          :hit="true"
+          color="#fff"
+          type="primary"
           closable
           @close="handleDeleteTag(item)"
           >{{ item.algoName }}</el-tag
@@ -87,7 +92,7 @@
     ElPopover,
     ElIcon,
   } from 'element-plus';
-  import { ArrowDown, ArrowUp } from '@element-plus/icons-vue';
+  import { QuestionFilled, WarningFilled, ArrowDown, ArrowUp } from '@element-plus/icons-vue';
   import { useUserStore } from '@/store/modules/user';
   import {
     getDevMode,
@@ -103,10 +108,10 @@
 
   const userStore = useUserStore();
   const hasDevModePermisson = () => {
-    return userStore.checkPermission('control_activation');
+    return userStore.checkPermission('back:data:violation:general:preview');
   };
-  const hasDataDelete = () => {
-    return userStore.checkPermission('data_delete');
+  const hasVideoCutPermisson = () => {
+    return userStore.checkPermission('back:data:violation:general:time');
   };
 
   const devMode = ref(true);
@@ -218,7 +223,9 @@
 
   .options-container {
     display: flex;
-    margin-bottom: 10px;
+    padding: 10px;
+    border-radius: 4px;
+    background-color: rgba(55, 55, 55, 0.05);
 
     .option-title {
       width: 130px;

+ 28 - 27
src/views/datamanager/alertformdata/components/common/QueryForm.vue

@@ -2,9 +2,9 @@
   <div>
     <el-form :model="queryForm" label-width="auto" :inline="true" ref="formRef">
       <div class="select-group">
-        <el-form-item label="问题来源:" prop="source">
+        <el-form-item label="问题来源:" prop="queryParam.source">
           <el-select
-            v-model="queryForm.source"
+            v-model="queryForm.queryParam.source"
             placeholder="全部"
             clearable
             @change="handleSelectChange"
@@ -17,7 +17,7 @@
             />
           </el-select>
         </el-form-item>
-        <el-form-item label="类型:" prop="issueTypeList">
+        <el-form-item label="类型:" prop="queryParam.issueTypeList">
           <el-cascader
             v-model="issueTypeValue"
             :options="options"
@@ -30,7 +30,7 @@
             @change="handleIssueMainTypeChange"
           />
         </el-form-item>
-        <el-form-item label="地点:" prop="workspaceId">
+        <el-form-item label="地点:" prop="queryParam.workspaceId">
           <el-cascader
             v-model="workLocation"
             :options="locationOptions"
@@ -42,7 +42,7 @@
             @change="handleCascaderChange"
           />
         </el-form-item>
-        <el-form-item label="处理状态:" prop="issueState">
+        <el-form-item label="处理状态:" prop="queryParam.issueState">
           <el-select v-model="tempState" clearable @change="handleIssueStateChange">
             <el-option
               v-for="item in issueStateOptions"
@@ -52,8 +52,8 @@
             />
           </el-select>
         </el-form-item>
-        <el-form-item label="生效状态:" prop="hide">
-          <el-select v-model="queryForm.hide" clearable>
+        <el-form-item label="生效状态:" prop="queryParam.hide">
+          <el-select v-model="queryForm.queryParam.hide" clearable>
             <el-option
               v-for="item in hideStateOptions"
               :key="item.value"
@@ -107,6 +107,7 @@
   const queryForm = reactive<TableQueryForm>({
     pageNumber: 1,
     pageSize: 10,
+    queryParam: {},
   });
 
   type MainOption = {
@@ -143,10 +144,10 @@
     workLocation.value = [];
     tempState.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();
     emits('onReset', queryForm);
   };
@@ -156,17 +157,17 @@
   };
 
   const handleSelectChange = () => {
-    if (Number(queryForm.source) === 1) {
+    if (Number(queryForm.queryParam.source) === 1) {
       typeDisable.value = false;
       options.value = props.aiOptions;
-    } else if (Number(queryForm.source) === 2) {
+    } else if (Number(queryForm.queryParam.source) === 2) {
       typeDisable.value = false;
       options.value = props.manualOptions;
     } else {
       typeDisable.value = true;
       options.value = [];
-      queryForm.issueMainTypeList = undefined;
-      queryForm.issueTypeList = undefined;
+      queryForm.queryParam.issueMainTypeList = undefined;
+      queryForm.queryParam.issueTypeList = undefined;
     }
   };
 
@@ -178,11 +179,11 @@
         arrMain.push(item[0]);
         arrSub.push(item[1]);
       });
-      queryForm.issueMainTypeList = [...new Set(arrMain)];
-      queryForm.issueTypeList = arrSub;
+      queryForm.queryParam.issueMainTypeList = [...new Set(arrMain)];
+      queryForm.queryParam.issueTypeList = arrSub;
     } else {
-      Reflect.deleteProperty(queryForm, 'issueMainTypeList');
-      Reflect.deleteProperty(queryForm, 'issueTypeList');
+      Reflect.deleteProperty(queryForm.queryParam, 'issueMainTypeList');
+      Reflect.deleteProperty(queryForm.queryParam, 'issueTypeList');
     }
   };
 
@@ -194,25 +195,25 @@
         arr.push(item[1]);
         workShopIds.value.push(item[0]);
       });
-      queryForm.workspaceId = arr;
+      queryForm.queryParam.workspaceId = arr;
       workShopIds.value = [...new Set(workShopIds.value)];
     } else {
-      Reflect.deleteProperty(queryForm, 'workspaceId');
+      Reflect.deleteProperty(queryForm.queryParam, 'workspaceId');
     }
   };
 
   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 = () => {
     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 {
-      Reflect.deleteProperty(queryForm, 'startTime');
-      Reflect.deleteProperty(queryForm, 'endTime');
+      Reflect.deleteProperty(queryForm.queryParam, 'startTime');
+      Reflect.deleteProperty(queryForm.queryParam, 'endTime');
     }
   };
 

+ 1 - 1
src/views/datamanager/alertformdata/components/common/QuestionFormBase.vue

@@ -300,7 +300,7 @@
   };
 
   const actionUrl = computed(() => {
-    return urlJoin(urlPrefix!, `/issue/uploadPicture`);
+    return urlJoin(urlPrefix!, `/admin/minio/uploadFile`);
   });
 
   // 保存

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

@@ -98,6 +98,7 @@
   const query = ref<TableQueryForm>({
     pageNumber: 1,
     pageSize: 10,
+    queryParam: {},
   });
   // 查询
   const handleSearch = (queryForm) => {
@@ -112,7 +113,7 @@
 
   // 表格排序切换
   const handleChangeTimeSort = (curTimeSort) => {
-    query.value.order = curTimeSort;
+    query.value.queryParam.order = curTimeSort;
     getTableData();
   };
 

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

@@ -149,6 +149,7 @@
   const query = ref<TableQueryForm>({
     pageNumber: 1,
     pageSize: 10,
+    queryParam: {},
   });
   // 查询
   const handleSearch = (queryForm) => {
@@ -212,7 +213,7 @@
 
   // 表格排序切换
   const handleChangeTimeSort = (curTimeSort) => {
-    query.value.order = curTimeSort;
+    query.value.queryParam.order = curTimeSort;
     getTableData();
   };
 
@@ -471,7 +472,10 @@
   };
 
   const hasPermisson = () => {
-    return userStore.checkPermission('question_mock_edit_admin');
+    return (
+      userStore.checkPermission('back:data:violation:fake:add') ||
+      userStore.checkPermission('back:data:violation:fake:delete')
+    );
   };
 
   onMounted(() => {

+ 8 - 7
src/views/datamanager/alertformdata/components/show/Show.vue

@@ -122,6 +122,7 @@
   const query = ref<TableQueryForm>({
     pageNumber: 1,
     pageSize: 10,
+    queryParam: {},
   });
   // 查询
   const handleSearch = (queryForm) => {
@@ -136,7 +137,7 @@
 
   // 表格排序切换
   const handleChangeTimeSort = (curTimeSort) => {
-    query.value.order = curTimeSort;
+    query.value.queryParam.order = curTimeSort;
     getTableData();
   };
 
@@ -167,8 +168,8 @@
   const handleHideAll = () => {
     if (showActionBar.value) isActiveHide.value = !isActiveHide.value;
     const updateList = {
-      id: chooseId.value,
-      isHide: true,
+      ids: chooseId.value,
+      hide: true,
     };
     updateShowTableData(updateList).then(() => {
       handleSelectNone();
@@ -187,8 +188,8 @@
   const handleCancelHideAll = () => {
     if (showActionBar.value) isActiveCancelHide.value = !isActiveCancelHide.value;
     const updateList = {
-      id: chooseId.value,
-      isHide: false,
+      ids: chooseId.value,
+      hide: false,
     };
     updateShowTableData(updateList).then(() => {
       handleSelectNone();
@@ -293,8 +294,8 @@
   const handleShow = (row) => {
     const tempHide = row.isHide === false ? true : false;
     const updateList = {
-      id: [row.id],
-      isHide: tempHide,
+      ids: [row.id],
+      hide: tempHide,
     };
     updateShowTableData(updateList).then(() => {
       getTableData();

+ 25 - 11
src/views/datamanager/alertformdata/hooks/useWorkLocation.ts

@@ -13,20 +13,34 @@ type Location = {
 export function useWorkLocation() {
   const locationOptions = ref<Location[]>([]);
 
-  const getLocationOptions = () => {
-    getWorkLocationList().then((res) => {
-      locationOptions.value =
-        res?.map((item) => {
+  const result = ref<Location[]>([]);
+  const getWorkLocationTree = (cameraTree) => {
+    cameraTree.forEach((item) => {
+      if (item.nodeType === 'workshop') {
+        if (item.children && item.children.length > 0) {
           const newChildren =
-            item.workspaceList?.map((x) => {
-              return { value: x.workspaceId, label: x.workspaceName };
+            item.children.map((x) => {
+              return { value: x.id, label: x.name };
             }) || [];
-          return {
-            value: item.workshopId,
-            label: item.workshopName,
+          const newNode = {
+            value: item.id,
+            label: item.name,
             children: newChildren,
           };
-        }) || [];
+          result.value.push(newNode);
+          return result.value;
+        }
+        return result.value;
+      } else if (item.nodeType === 'company') {
+        getWorkLocationTree(item.children);
+      }
+    });
+    return result.value;
+  };
+
+  const getLocationOptions = () => {
+    getWorkLocationList().then((res) => {
+      locationOptions.value = getWorkLocationTree(res);
     });
   };
 
@@ -40,7 +54,7 @@ export function useWorkLocation() {
     const space = shop.children.find((item) => item.value === workspaceId);
     let str = shop.label;
     if (space?.label) {
-      str += ' - ' + space?.label
+      str += ' - ' + space?.label;
     }
     return str;
   };

+ 31 - 29
src/views/message/sysnotion-config/compontents/BasicInfo.vue

@@ -49,7 +49,6 @@
         </el-upload>
       </el-form-item>
 
-
       <el-form-item label="推送渠道: " prop="pushChannel">
         <el-checkbox-group v-model="ruleForm.pushChannel">
           <el-checkbox
@@ -104,13 +103,16 @@
   const labelPosition = ref<FormProps['labelPosition']>('left');
   const childFromRef = ref<InstanceType<typeof PushObject>>();
   const actionUrl = computed(() => {
-    return urlJoin(urlPrefix!, `/issue/uploadPicture`);
+    return urlJoin(urlPrefix!, `/admin/minio/uploadFile`);
   });
 
   /**
    * 表单相关操作
    */
-  type Rule = Omit<RuleFormView, 'introduction' | 'contentType' | 'content' | 'contentUrl' | 'operator'>;
+  type Rule = Omit<
+    RuleFormView,
+    'introduction' | 'contentType' | 'content' | 'contentUrl' | 'operator'
+  >;
   const formRules: FormRules<Rule> = {
     messageType: [{ required: true, trigger: 'change', message: '请选择消息样式' }],
     title: [{ required: true, trigger: 'change', message: '请输入消息标题' }],
@@ -121,11 +123,11 @@
   const ruleForm = ref<Rule>({
     messageType: MessageTypeEnum.TEXT,
     title: '',
-    bannerUrl:'',
+    bannerUrl: '',
     pushChannel: [],
     expirationTime: '',
     recipientType: 1, // 默认全员
-    userGroupList:[],
+    userGroupList: [],
     customUserList: [],
   });
 
@@ -160,7 +162,7 @@
           basicInfo.recipientType = childValue.recipientType!;
           basicInfo.userGroupList = childValue.userGroupList!;
           basicInfo.customUserList = childValue.customUserList!;
-        } 
+        }
         return basicInfo;
       }
     } catch (error) {
@@ -190,29 +192,29 @@
 </script>
 
 <style scoped lang="scss">
-.avatar-uploader .avatar {
-  width: 58px;
-  height: 58px;
-  display: block;
-}
-.avatar-uploader .el-upload {
-  border: 1px dashed var(--el-border-color);
-  border-radius: 6px;
-  cursor: pointer;
-  position: relative;
-  overflow: hidden;
-  transition: var(--el-transition-duration-fast);
-}
+  .avatar-uploader .avatar {
+    width: 58px;
+    height: 58px;
+    display: block;
+  }
+  .avatar-uploader .el-upload {
+    border: 1px dashed var(--el-border-color);
+    border-radius: 6px;
+    cursor: pointer;
+    position: relative;
+    overflow: hidden;
+    transition: var(--el-transition-duration-fast);
+  }
 
-.avatar-uploader .el-upload:hover {
-  border-color: var(--el-color-primary);
-}
+  .avatar-uploader .el-upload:hover {
+    border-color: var(--el-color-primary);
+  }
 
-.el-icon.avatar-uploader-icon {
-  font-size: 28px;
-  color: #8c939d;
-  width: 58px;
-  height: 58px;
-  text-align: center;
-}
+  .el-icon.avatar-uploader-icon {
+    font-size: 28px;
+    color: #8c939d;
+    width: 58px;
+    height: 58px;
+    text-align: center;
+  }
 </style>