Prechádzať zdrojové kódy

Merge branch 'question-alert' into 'dev'

Question alert

See merge request skyeye/skyeye_frontend/skyeye-admin!36
航飞 楼 1 rok pred
rodič
commit
1537e74a71

+ 9 - 2
src/views/datamanager/alertformdata/components/common/QueryForm.vue

@@ -17,7 +17,7 @@
             @change="handleCascaderChange" />
         </el-form-item>
         <el-form-item label="状态:" prop="issueState">
-          <el-select v-model="queryForm.issueState" clearable>
+          <el-select v-model="tempState" clearable @change="handleIssueStateChange">
             <el-option v-for="item in issueStateOptions" :key="item.value" :label="item.label" :value="item.value" />
           </el-select>
         </el-form-item>
@@ -57,7 +57,7 @@ interface QueryModel {
   source?: number,         // 来源
   issueType?: number,      // 类型
   workspaceId?: number[],  // 地点=工位id
-  issueState?: number,     // 状态
+  issueState?: number[],   // 状态
   startTime?: string,      // 开始时间(默认)
   endTime?: string,        // 结束时间(默认)
 };
@@ -77,6 +77,7 @@ const options = ref<OptionModel[]>([]);
 const typeDisable = ref(true);
 const location = { multiple: true };  // 级联选择器(打开多选)
 const workLocation = ref([]);   // 级联选择器,为二维数组(提取workspaceId)
+const tempState = ref('');  // 状态,字符串转number[]
 const dateRange = ref([]);  // 时间段,拆分成startTime/endTime
 const defaultTime = ref<[Date, Date]>([
   new Date(2000, 1, 1, 0, 0, 0),
@@ -90,6 +91,7 @@ const handleSearch = () => {
 const handleReset = () => {
   typeDisable.value = true;
   workLocation.value = [];
+  tempState.value = '';
   dateRange.value = [];
   Reflect.deleteProperty(queryForm, "startTime");
   Reflect.deleteProperty(queryForm, "endTime");
@@ -121,6 +123,11 @@ const handleCascaderChange = () => {
   queryForm.workspaceId = arr;
 };
 
+const handleIssueStateChange = () => {
+  if (tempState.value)
+    queryForm.issueState = JSON.parse(tempState.value);
+};
+
 const handleDateChange = () => {
   if (dateRange.value != null) {
     queryForm.startTime = dateRange.value[0];

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

@@ -41,7 +41,7 @@
         </el-form-item>
         <el-form-item label="问题状态:" prop="issueState" :rules="{ required: true, message: '请完成必填项' }">
           <el-select v-model="formData.issueState" placeholder="请选择问题状态" clearable>
-            <el-option v-for="item in issueStateOptions" :key="item.value" :label="item.label" :value="item.value" />
+            <el-option v-for="item in issueStateOptionsAdd" :key="item.value" :label="item.label" :value="item.value" />
           </el-select>
         </el-form-item>
         <el-form-item>
@@ -59,7 +59,7 @@
 import { computed, onBeforeMount, onMounted, reactive, ref } from 'vue';
 import type { FormInstance, UploadProps, UploadUserFile } from 'element-plus';
 import { Plus } from '@element-plus/icons-vue';
-import { sourceOptions, issueStateOptions } from './constant.question';
+import { IssueState, sourceOptions, issueStateOptionsAdd } from './constant.question';
 import { useIssueType } from '../../hooks/useIssueType';
 import { useWorkLocation } from '../../hooks/useWorkLocation';
 import { useUserStore } from '@/store/modules/user';
@@ -145,7 +145,25 @@ const handleCopyData = () => {
   formData.workshopId = props.initialData?.workshopId;
   formData.workspaceId = props.initialData?.workspaceId;
   formData.createdAt = props.initialData?.createdAt;
-  formData.issueState = props.initialData?.issueState;
+  console.log(props.initialData?.issueState);
+  switch (props.initialData?.issueState) {
+    case IssueState.toAuth0:
+      formData.issueState = 2;
+      break;
+    case IssueState.toAuth1:
+      formData.issueState = 2;
+      break;
+    case IssueState.toDeal6:
+      formData.issueState = 4;
+      break;
+    case IssueState.hasDone7:
+      formData.issueState = 8;
+      break;
+    default:
+      formData.issueState = props.initialData?.issueState;
+      break;
+  }
+  console.log(formData.issueState);
 
   workLocation.value = [props.initialData?.workshopId, props.initialData?.workspaceId!];
   fileList.value = props.initialData?.pictures?.map(str => ({ name: str, url: str })) || [];

+ 30 - 14
src/views/datamanager/alertformdata/components/common/constant.question.ts

@@ -20,27 +20,43 @@ export const getNameBySource = (source: Source) => {
 
 // 问题状态
 export enum IssueState {
-  toAuth = 1,
-  toDeal = 2,
-  toReview = 3,
-  toRetreat = 4,
-  hasDone = 5,
+  toAuth0 = 0,
+  toAuth1 = 1,
+  toAuth2 = 2,    // 待审核
+  hasRevoke = 3,  // 已撤销
+  toDeal4 = 4,    // 待处理
+  toDeal6 = 6,
+  toReview = 5,   // 待复核
+  hasDone7 = 7,
+  hasDone8 = 8,   // 已处理
 }
 export const issueStateNameMap = {
-  [IssueState.toAuth]: '待审核',
-  [IssueState.toDeal]: '待处理',
+  [IssueState.toAuth0]: '待审核',
+  [IssueState.toAuth1]: '待审核',
+  [IssueState.toAuth2]: '待审核',
+  [IssueState.hasRevoke]: '已撤销',
+  [IssueState.toDeal4]: '待处理',
+  [IssueState.toDeal6]: '待处理',
   [IssueState.toReview]: '待复核',
-  [IssueState.toRetreat]: '已退回',
-  [IssueState.hasDone]: '已处理',
+  [IssueState.hasDone7]: '已处理',
+  [IssueState.hasDone8]: '已处理',
 }
-// 问题状态下拉框选项
+// 问题状态下拉框选项(默认数据——待审核(012) 待处理(46) 待复核(5) 已处理(78) 已撤销(3))
 export const issueStateOptions = [
-  { label: issueStateNameMap[IssueState.toAuth], value: IssueState.toAuth },
-  { label: issueStateNameMap[IssueState.toDeal], value: IssueState.toDeal },
+  { label: issueStateNameMap[IssueState.toAuth0], value: '[0, 1, 2]' },
+  { label: issueStateNameMap[IssueState.toDeal4], value: '[4, 6]' },
+  { label: issueStateNameMap[IssueState.toReview], value: '[5]' },
+  { label: issueStateNameMap[IssueState.hasDone7], value: '[7,8]' },
+  { label: issueStateNameMap[IssueState.hasRevoke], value: '[3]' }
+]
+
+export const issueStateOptionsAdd = [
+  { label: issueStateNameMap[IssueState.toAuth2], value: IssueState.toAuth2 },
+  { label: issueStateNameMap[IssueState.toDeal4], value: IssueState.toDeal4 },
   { label: issueStateNameMap[IssueState.toReview], value: IssueState.toReview },
-  { label: issueStateNameMap[IssueState.toRetreat], value: IssueState.toRetreat },
-  { label: issueStateNameMap[IssueState.hasDone], value: IssueState.hasDone }
+  { label: issueStateNameMap[IssueState.hasDone8], value: IssueState.hasDone8 },
 ]
+
 // 表格数据-转换value为label
 export const getNameByState = (issueState: IssueState) => {
   return issueStateNameMap[issueState] || '-'

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

@@ -7,10 +7,17 @@
     <div class="table-list">
       <div v-if="showActionBar" class="action-bar">
         <span class="num-text">已选{{ chooseNum }}项</span>
-        <el-button :class="isActiveHide ? 'btn-active' : 'btn-normal'" @click="handleHideAll">全部隐藏</el-button>
+        <el-button v-if="!cancelHideFlag" :class="isActiveHide ? 'btn-active' : 'btn-normal'"
+          @click="handleHideAll">全部隐藏</el-button>
+        <el-button v-if="cancelHideFlag" :class="isActiveCancelHide ? 'btn-active' : 'btn-normal'"
+          @click="handleCancelHideAll">取消隐藏</el-button>
         <el-button :class="isActiveDelete ? 'btn-active' : 'btn-normal'" @click="handleDeleteAll">删除</el-button>
-        <el-button :class="isActiveUrgent ? 'btn-active' : 'btn-normal'" @click="handleUrgentAll">标记加急</el-button>
-        <el-button :class="isActiveCopy ? 'btn-active' : 'btn-normal'" @click="handleCopyToShow">复制到展示数据</el-button>
+        <el-button v-if="!cancelUrgentFlag" :class="isActiveUrgent ? 'btn-active' : 'btn-normal'"
+          @click="handleUrgentAll">标记加急</el-button>
+        <el-button v-if="cancelUrgentFlag" :class="isActiveCancelUrgent ? 'btn-active' : 'btn-normal'"
+          @click="handleCancelUrgentAll">取消加急</el-button>
+        <el-button v-if="hasPermisson()" :class="isActiveCopy ? 'btn-active' : 'btn-normal'"
+          @click="handleCopyToShow">复制到展示数据</el-button>
         <span class="close-btn" @click="handleSelectNone"></span>
       </div>
       <AlertTable ref="alertTableRef" class="table-bar" :is-show-tab="false" :table-data="tableData"
@@ -41,7 +48,9 @@ import {
   deleteDefaultTableData,
   copyToShowTableData
 } from '@/api/datamanagement/alert-default';
+import { useUserStore } from '@/store/modules/user';
 
+const userStore = useUserStore();
 const { aiOptions, manualOptions, getAIOptions, getManualOptions } = useIssueType();
 const { locationOptions, getLocationOptions } = useWorkLocation();
 
@@ -50,9 +59,13 @@ const tableData = ref([]);
 const showActionBar = ref(false);
 const chooseNum = ref(0);
 const chooseId = ref<number[]>([]);
+const cancelHideFlag = ref(true);   // true取消隐藏 / false全部隐藏
+const cancelUrgentFlag = ref(true); // true取消加急 / false全部加急
 const isActiveHide = ref(false);
+const isActiveCancelHide = ref(false);
 const isActiveDelete = ref(false);
 const isActiveUrgent = ref(false);
+const isActiveCancelUrgent = ref(false);
 const isActiveCopy = ref(false);
 // 详情
 const isDetailDialogShow = ref(false);
@@ -78,9 +91,16 @@ const handleReset = (queryForm) => {
 
 // 多选
 const handlePop = (selection) => {
+  chooseId.value = [];
+  cancelHideFlag.value = true;
+  cancelUrgentFlag.value = true;
   selection.forEach((item) => {
     if (chooseId.value.indexOf(item.id) === -1)
       chooseId.value.push(item.id);
+    // 只要有一个item.isHide === false 说明多选的这些选项不是全都隐藏,不用变成“取消隐藏”
+    if (item.isHide === false) cancelHideFlag.value = false;
+    // 只要有一个item.priority === 0 说明不是全都加急状态,不用变成“取消加急”
+    if (item.priority === 0) cancelUrgentFlag.value = false;
   });
   chooseNum.value = selection.length;
   showActionBar.value = chooseNum.value > 0 ? true : false;
@@ -113,6 +133,26 @@ const handleHideAll = () => {
   });
 };
 
+// 取消隐藏
+const handleCancelHideAll = () => {
+  if (showActionBar.value) isActiveCancelHide.value = !isActiveCancelHide.value;
+  const updateList = {
+    id: chooseId.value,
+    isHide: false,
+  };
+  updateDefaultTableData(updateList).then(() => {
+    handleSelectNone();
+    getTableData();
+    ElMessage({
+      message: '取消隐藏成功',
+      type: 'success',
+    });
+    setTimeout(function () {
+      isActiveCancelHide.value = !isActiveCancelHide.value;
+    }, 1000);
+  });
+}
+
 // 批量删除
 const handleDeleteAll = () => {
   if (showActionBar.value) isActiveDelete.value = !isActiveDelete.value;
@@ -167,6 +207,26 @@ const handleUrgentAll = () => {
   });
 };
 
+// 取消加急
+const handleCancelUrgentAll = () => {
+  if (showActionBar.value) isActiveCancelUrgent.value = !isActiveCancelUrgent.value;
+  const updateList = {
+    id: chooseId.value,
+    priority: 0,
+  };
+  updateDefaultTableData(updateList).then(() => {
+    handleSelectNone();
+    getTableData();
+    ElMessage({
+      message: '已取消加急',
+      type: 'success',
+    });
+    setTimeout(function () {
+      isActiveCancelUrgent.value = !isActiveCancelUrgent.value;
+    }, 1000);
+  });
+};
+
 // 复制到展示数据
 const handleCopyToShow = () => {
   if (showActionBar.value) isActiveCopy.value = !isActiveCopy.value;
@@ -264,6 +324,10 @@ const getTableData = () => {
   })
 };
 
+const hasPermisson = () => {
+  return userStore.checkPermission("question_mock_edit_admin");
+};
+
 onMounted(() => {
   getTableData();
 });

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

@@ -10,7 +10,10 @@
     <div class="table-list">
       <div v-if="showActionBar" class="action-bar">
         <span class="num-text">已选{{ chooseNum }}项</span>
-        <el-button :class="isActiveHide ? 'btn-active' : 'btn-normal'" @click="handleHideAll">全部隐藏</el-button>
+        <el-button v-if="!cancelHideFlag" :class="isActiveHide ? 'btn-active' : 'btn-normal'"
+          @click="handleHideAll">全部隐藏</el-button>
+        <el-button v-if="cancelHideFlag" :class="isActiveCancelHide ? 'btn-active' : 'btn-normal'"
+          @click="handleCancelHideAll">取消隐藏</el-button>
         <el-button :class="isActiveDelete ? 'btn-active' : 'btn-normal'" @click="handleDeleteAll">删除</el-button>
         <span class="close-btn" @click="handleSelectNone"></span>
       </div>
@@ -56,7 +59,9 @@ const tableData = ref([]);
 const showActionBar = ref(false);
 const chooseNum = ref(0);
 const chooseId = ref<number[]>([]);
+const cancelHideFlag = ref(true);   // true取消隐藏 / false全部隐藏
 const isActiveHide = ref(false);
+const isActiveCancelHide = ref(false);
 const isActiveDelete = ref(false);
 // 详情
 const isDetailDialogShow = ref(false);
@@ -86,9 +91,13 @@ const handleReset = (queryForm) => {
 
 // 多选
 const handlePop = (selection) => {
+  chooseId.value = [];
+  cancelHideFlag.value = true;
   selection.forEach((item) => {
     if (chooseId.value.indexOf(item.id) === -1)
       chooseId.value.push(item.id);
+    // 只要有一个item.isHide === false 说明多选的这些选项不是全都隐藏,不用变成“取消隐藏”
+    if (item.isHide === false) cancelHideFlag.value = false;
   });
   chooseNum.value = selection.length;
   showActionBar.value = chooseNum.value > 0 ? true : false;
@@ -121,6 +130,26 @@ const handleHideAll = () => {
   });
 };
 
+// 取消隐藏
+const handleCancelHideAll = () => {
+  if (showActionBar.value) isActiveCancelHide.value = !isActiveCancelHide.value;
+  const updateList = {
+    id: chooseId.value,
+    isHide: false,
+  };
+  updateShowTableData(updateList).then(() => {
+    handleSelectNone();
+    getTableData();
+    ElMessage({
+      message: '隐藏成功',
+      type: 'success',
+    });
+    setTimeout(function () {
+      isActiveCancelHide.value = !isActiveCancelHide.value;
+    }, 1000);
+  });
+};
+
 // 批量删除
 const handleDeleteAll = () => {
   if (showActionBar.value) isActiveDelete.value = !isActiveDelete.value;