Переглянути джерело

fix: V4版本报表推送与报警推送

qindao 1 рік тому
батько
коміт
098a9d7adc

+ 36 - 18
src/api/message/person-group.ts

@@ -1,4 +1,5 @@
 import { http } from '@/utils/http/axios';
+import { PaginationRequest, PaginationResponse } from '@/types/common/type';
 
 // 已弃用
 export function queryUserTree() {
@@ -20,14 +21,18 @@ export function addUserGroup(params: addUserGroupParams) {
     params,
   });
 }
+
+/*
+ *@description: 查询用户组列表
+*/
 export interface queryUserGroupListParams {
   pageNumber: number;
   pageSize: number;
-  queryStr?: string;
+  queryParam?: string;
 }
 export function queryUserGroupList(params: queryUserGroupListParams) {
   return http.request({
-    url: '/userGroup/queryUserGroupList',
+    url: '/userGroup/queryUserGroupPage',
     method: 'post',
     params,
   });
@@ -48,9 +53,8 @@ export function deleteUserGroup(userGroupId: number) {
 }
 export function getUserGroupDetail(userGroupId: number) {
   return http.request({
-    url: '/userGroup/queryUserGroupDetail',
+    url: `/userGroup/queryUserGroupDetail?userGroupId=${userGroupId}`,
     method: 'get',
-    params: { userGroupId },
   });
 }
 export interface modifyUserGroupParams extends addUserGroupParams {
@@ -59,13 +63,13 @@ export interface modifyUserGroupParams extends addUserGroupParams {
 export function modifyUserGroup(params: modifyUserGroupParams) {
   return http.request({
     url: '/userGroup/modifyUserGroup',
-    method: 'post',
+    method: 'put',
     params,
   });
 }
 export function ToPushObjectqueryUserGroupList() {
   return http.request({
-    url: '/userGroup/ToPushObjectqueryUserGroupList',
+    url: '/userGroup/ToPushObjectQueryUserGroupList',
     method: 'post',
   });
 }
@@ -75,36 +79,50 @@ export function queryUserGroupDetail(userGroupList: number[]) {
     method: 'post',
   });
 }
-
-export interface QueryPersonFilterParams {
+export interface FilterParams {
   deptName?: string;
   nickname?: string;
   staffNo?: string;
-  pageNumber: number;
-  pageSize: number;
 }
-export function queryPersonFilterList(params: QueryPersonFilterParams) {
+
+export type QueryPersonFilterParams = PaginationRequest & {
+  queryParam: FilterParams
+}
+export interface UserListitem {
+  checked?: boolean;
+  /*自增主键 */
+  id: number;
+  /*姓名 */
+  realname: string;
+  /*部门id */
+  deptId: number;
+  /*部门名称 */
+  deptName: string;
+  /*工号 */
+  staffNo: string;
+}
+/* 
+ * @description: 获取人员选择列表-为发送通知选择用户
+ */
+export function queryPersonFilterList(params: QueryPersonFilterParams): Promise<PaginationResponse<UserListitem>> {
   return http.request({
-    url: '/dept/queryAvailableUserList',
+    url: '/admin/user/queryAvailableUserList',
     method: 'post',
     params,
   });
 }
 
-export interface QueryPersonFilterListReturn {
-  total: number;
-  availableUserDTOS: FilterPersonInfo[];
-}
+export type QueryPersonFilterListReturn = PaginationResponse<UserListitem>;
 
 export interface SelectedFilterPersonInfo {
   id: number;
-  nickname: string;
+  realname: string;
   staffNo: string;
 }
 
 export interface FilterPersonInfo extends SelectedFilterPersonInfo {
   id: number;
-  nickname: string;
+  realname: string;
   deptId: number;
   deptName: string;
   staffNo: string;

+ 18 - 13
src/api/message/report-message.ts

@@ -1,4 +1,6 @@
 import { http } from '@/utils/http/axios';
+import { PushMessageTypeEnum } from '@/types/message/constant';
+import { queryPushRecordsParams } from '@/types/message/type';
 
 // 新增消息
 export function addMassage(params?) {
@@ -22,7 +24,7 @@ export function searchMassage(params?) {
 export function editMassage(params?) {
   return http.request({
     url: '/reportMessage/modifyReportConfig',
-    method: 'POST',
+    method: 'PUT',
     params,
   });
 }
@@ -30,11 +32,11 @@ export function editMassage(params?) {
 // 查询分组
 export function searchGroup() {
   return http.request({
-    url: '/userGroup/ToPushObjectqueryUserGroupList',
+    url: '/userGroup/ToPushObjectQueryUserGroupList',
     method: 'POST',
   });
 }
-export function queryReportConfigList(type: number) {
+export function queryReportConfigList(type: PushMessageTypeEnum) {
   return http.request({
     url: '/reportMessage/queryReportConfigList',
     method: 'get',
@@ -44,18 +46,16 @@ export function queryReportConfigList(type: number) {
 export function deleteReportConfig(type: number, statisticType: number) {
   return http.request({
     url: `/reportMessage/deleteReportConfig?type=${type}&statisticType=${statisticType}`,
-    method: 'post',
+    method: 'DELETE',
   });
 }
-export interface queryPushRecordsParams {
-  pageNum: number;
-  pageSize: number;
-  statisticType?: number;
-  type?: number;
-}
+
+/*
+ *@description: 推送记录
+*/
 export function queryPushRecords(params: queryPushRecordsParams) {
   return http.request({
-    url: '/reportMessage/queryPushRecords',
+    url: '/reportMessage/queryPushRecordPage',
     method: 'post',
     params,
   });
@@ -65,9 +65,14 @@ export interface updateStatusParams {
   statisticType: number;
   status: number;
 }
+
+/* 
+ *@description: 启用-禁用
+ */
 export function updateStatus(params: updateStatusParams) {
   return http.request({
-    url: `/reportMessage/updateStatus?statisticType=${params.statisticType}&status=${params.status}&type=${params.type}`,
-    method: 'post',
+    url: '/reportMessage/updateStatus',
+    method: 'PUT',
+    params
   });
 }

+ 4 - 4
src/api/message/system-notifications.ts

@@ -1,15 +1,15 @@
 import { http } from '@/utils/http/axios';
 
 export interface queryParams {
-  content?: string;
+  queryParam?: string;
   pageNumber: number;
   pageSize: number;
 }
 // 获取系统通知数据列表
 export function getSystemMessageList(params: queryParams) {
   return http.request({
-    url: '/systemMessage/getSystemMessageList',
-    method: 'get',
+    url: '/systemMessage/querySystemMessagePage',
+    method: 'POST',
     params,
   });
 }
@@ -40,7 +40,7 @@ export function modifyContent(content: string, id: number) {
 // 获取车间列表
 export function getList() {
   return http.request({
-    url: '/scene/getList',
+    url: '/admin/workshop/queryWorkshopList',
     method: 'get',
   });
 }

+ 4 - 1
src/types/message/constant.ts

@@ -25,4 +25,7 @@ export const OperationTypeNames = {
   [OperationTypeEnum.ADD]: '新增',
   [OperationTypeEnum.SEARCH]: '查询',
   [OperationTypeEnum.EDIT]: '编辑',
-} 
+} 
+
+/* 默认值 */
+export const Default_Value = 0;

+ 10 - 0
src/types/message/type.ts

@@ -0,0 +1,10 @@
+import { PaginationRequest } from '@/types/common/type';
+
+/* 查询推送记录列表入参  */
+export interface QueryParam {
+  /* 统计时间段类型:1-周报 2-月报 3-季报 4-年报 5-自定义 */
+  statisticType?: number;
+  /* 推送消息类型:1-平台违规报警数据 2-平台访问统计数 3-指定人员访问数据 */
+  type?: number;
+}
+export type queryPushRecordsParams = PaginationRequest & { queryParam: QueryParam }

+ 1 - 1
src/views/message/alarmMessages/hook/index.ts

@@ -17,7 +17,7 @@ export const useAlarmDataList = defineStore('useAlarmDataList', () => {
 
   function getAlarmData() {
     getAlarmMessageList({
-      content: searchContent.value,
+      queryParam: searchContent.value,
       pageNumber: currentPage.value,
       pageSize: pageSize.value,
     }).then((res: alarmInfoRes) => {

+ 5 - 5
src/views/message/components/PersonFilterSelection.vue

@@ -37,18 +37,18 @@
       </div>
       <!-- 搜索结果展示 -->
       <div
-        v-if="personFilterList?.availableUserDTOS?.length"
+        v-if="personFilterList?.records?.length"
         class="filter-result"
         ref="filterResult"
       >
         <div
           class="filter-result-item"
-          v-for="person in personFilterList.availableUserDTOS"
+          v-for="person in personFilterList.records"
           :key="person.id"
         >
           <el-checkbox
             v-model="person.checked"
-            :label="person.staffNo + '-' + person.nickname + '&nbsp' + '(' + person.deptName + ')'"
+            :label="person.staffNo + '-' + person.realname + '&nbsp' + '(' + person.deptName + ')'"
             @change="handleSelect($event, person)"
           ></el-checkbox>
           <!-- <div style="margin-left: 8px">
@@ -58,7 +58,7 @@
         <div
           id="next-loading"
           style="text-align: center"
-          v-if="personFilterList.total > personFilterList.availableUserDTOS.length"
+          v-if="personFilterList.totalRow > personFilterList.records.length"
         >
           <el-icon class="el-input__icon" :size="24">
             <Loading />
@@ -87,7 +87,7 @@
           closable
           @close="handleRemoveSelectedPerson(person.id)"
         >
-          {{ person.staffNo + '-' + person.nickname }}
+          {{ person.staffNo + '-' + person.realname }}
         </el-tag>
       </div>
       <div class="footer">

+ 5 - 2
src/views/message/components/PushObject.vue

@@ -60,7 +60,7 @@
           <el-option
             v-for="user in selectedUser"
             :key="user.id"
-            :label="user.staffNo + '-' + user.nickname"
+            :label="user.staffNo + '-' + user.realname"
             :value="user"
           >
           </el-option>
@@ -231,7 +231,10 @@
   });
   onMounted(() => {
     ToPushObjectqueryUserGroupList().then((res) => {
-      options.value = res.groupVOList;
+      if (res) {
+        options.value = res.groupVOList;
+      }
+      
     });
   });
   watchEffect(() => {

+ 2 - 2
src/views/message/persongroup/store/index.ts

@@ -14,7 +14,7 @@ export const userGroupList = defineStore('user-group', () => {
       pageSize: pagesize.value,
     };
     if (queryStr.value) {
-      params.queryStr = queryStr.value;
+      params.queryParam = queryStr.value;
     }
     return queryUserGroupList(params).then((res) => {
       return res;
@@ -24,7 +24,7 @@ export const userGroupList = defineStore('user-group', () => {
   const { run: getUserGroup } = useRequest(conditionSearch, {
     manual: true,
     onSuccess: (res) => {
-      userListData.value = res.groupVOList;
+      userListData.value = res.records;
       total.value = res.total;
     },
   });

+ 43 - 89
src/views/message/reportmessage/ReportOperation.vue

@@ -5,16 +5,14 @@
         <img src="./img/rollback.png" style="margin-right: 8px" /><span>返回</span>
       </div>
       <div class="topRight">
-        <span v-if="pageType === 1">新建报表配置</span>
-        <span v-if="pageType === 2">查看报表配置</span>
-        <span v-if="pageType === 3">编辑报表配置</span>
+        <span >{{ OperationTypeNames[pageType] }}报表配置</span>
       </div>
     </div>
     <div class="content">
       <div class="left">
         <el-form ref="ruleFormRef" style="max-width: 1000px" :model="form" :rules="rules" label-width="auto"
           class="demo-ruleForm" :size="formSize" :label-position="labelPosition">
-          <el-form-item v-if="form.type === 3" label="指定人员:" required prop="designatedUserList" style="width: 660px"
+          <el-form-item v-if="form.type === PushMessageTypeEnum.DESIGNEE_ACCESS_DATA" label="指定人员:" required prop="designatedUserList" style="width: 660px"
             :rules="{ required: true, message: '请选择人员', trigger: 'change' }">
             <el-col :span="18">
               <DesignatedPersonSelection :form="form" :disableType="disableType" />
@@ -39,18 +37,6 @@
                 <el-radio :value="2" @mouseenter="monthVisible = true" @mouseleave="monthVisible = false">月报</el-radio>
               </el-tooltip>
 
-              <!-- <el-tooltip :visible="seasonVisible" placement="top">
-                <template #content>
-                  <span>每次将推送上个自然季度数据</span>
-                </template>
-                <el-radio
-                  :value="3"
-                  @mouseenter="seasonVisible = true"
-                  @mouseleave="seasonVisible = false"
-                  >季报</el-radio
-                >
-              </el-tooltip> -->
-
               <el-tooltip :visible="yearVisible" placement="top">
                 <template #content>
                   <span>每次推送上一整年的数据</span>
@@ -68,19 +54,8 @@
             </el-radio-group>
           </el-form-item>
 
-          <div v-if="form.statisticType === 1">
-            <WeekReport :form="form" :disableType="disableType"></WeekReport>
-          </div>
-
-          <div v-if="form.statisticType === 2">
-            <MonthReport :form="form" :disableType="disableType"></MonthReport>
-          </div>
-
-          <div v-if="form.statisticType === 4">
-            <YearReport :form="form" :disableType="disableType"></YearReport>
-          </div>
-
-          <div v-if="form.statisticType === 5" class="custom-report">
+          <component :is="currentComponent" :form="form" :disableType="disableType" />
+          <div v-if="Number(form.statisticType) === StatisticTypeEnum.CUSTOM_REPORT" class="custom-report">
             <CustomReport ref="CustomReportComponent" :form="form" :disableType="disableType"
               :ruleFormRef="ruleFormRef">
             </CustomReport>
@@ -116,58 +91,53 @@
 </template>
 
 <script lang="ts" setup>
-import { reactive, ref, watch, onBeforeMount } from 'vue';
-import type { FormInstance } from 'element-plus';
+import { reactive, ref, onBeforeMount, computed } from 'vue';
+import { useRoute, useRouter } from 'vue-router';
+import { storeToRefs } from 'pinia';
+import { ElMessage } from 'element-plus';
+import type { FormInstance, FormProps } from 'element-plus';
+import { debounce } from 'lodash-es';
+import { addMassage, searchMassage, editMassage } from '@/api/message/report-message';
+import { useUserStore } from '@/store/modules/user';
+import { useFormList } from './store/useFormList';
+import { reportMessage, toReportMessage, reportMessageToFinal } from './class';
+import { OperationTypeEnum, StatisticTypeEnum, OperationTypeNames,PushMessageTypeEnum, Default_Value } from '@/types/message/constant';
+import DesignatedPersonSelection from './components/DesignatedPersonSelection.vue';
 import TemplateExample from './TemplateExample.vue';
 import WeekReport from './WeekReport.vue';
 import MonthReport from './MonthReport.vue';
 import YearReport from './YearReport.vue';
 import CustomReport from './CustomReport.vue';
-import { reportMessage, toReportMessage, reportMessageToFinal } from './class.ts';
-import { addMassage, searchMassage, editMassage } from '@/api/message/report-message';
-import { ElMessage } from 'element-plus';
-import { storeToRefs } from 'pinia';
-import { useUserStore } from '@/store/modules/user';
-import { useFormList } from './store/useFormList';
-import { useRoute, useRouter } from 'vue-router';
-import DesignatedPersonSelection from './components/DesignatedPersonSelection.vue';
-import type { FormProps } from 'element-plus';
-import { debounce } from 'lodash-es';
 
 const labelPosition = ref<FormProps['labelPosition']>('left');
-
 const useUser = useUserStore();
 const FormList = useFormList();
 const { info } = storeToRefs(useUser);
 const { type } = storeToRefs(FormList);
-let operater = info.value.nickname;
-
+let operater = info.value.realname;
 const weekVisible = ref(false); // 控制Tooltip显示
 const monthVisible = ref(false); // 控制Tooltip显示
-// const seasonVisible = ref(false); // 控制Tooltip显示
 const yearVisible = ref(false); // 控制Tooltip显示
 const customVisible = ref(false); // 控制Tooltip显示
-
 let disableType = ref({ statisticTypeDisable: false, contentDisable: false }); // 控制是否可编辑
-
 const formSize = ref('default'); // 校验表单
 const ruleFormRef = ref();
-
-// let pageType = 3  // 功能类型:1是新增,2是查询,3是编辑
-// let reportType = 1  // 报表类型:1是违规报警,2是平台访问,3是指定人员访问
 const route = useRoute();
 const router = useRouter();
-const pageType = ref<number>(route.query.operationType ? Number(route.query.operationType) : 0);
-const reportType = ref<number>(route.query.type ? Number(route.query.type) : 0);
+// 功能类型:1是新增,2是查询,3是编辑
+const pageType = ref<number>(route.query.operationType ? Number(route.query.operationType) : Default_Value);
+// 报表类型:1是违规报警,2是平台访问,3是指定人员访问
+const reportType = ref<number>(route.query.type ? Number(route.query.type) : Default_Value);
+// 统计时间段类型:1-周报 2-月报 3-季报 4-年报 5-自定义
 const statisticType = ref<number>(
-  route.query.statisticType ? Number(route.query.statisticType) : 0,
+  route.query.statisticType ? Number(route.query.statisticType) : Default_Value,
 );
 let queryType = { type: reportType.value, statisticType: statisticType.value };
 
 const form = reactive<reportMessage>({
   configIdList: null,
-  type: 0,
-  statisticType: 0,
+  type: Default_Value,
+  statisticType: Default_Value,
   monthAndDayList: ['1', '1'],
   dayOfWeek: 1,
   monthList: [''],
@@ -181,6 +151,16 @@ const form = reactive<reportMessage>({
   customUserList: [],
 });
 
+// 根据报表周期展示不同组件
+const ComponentEnum = {
+  [StatisticTypeEnum.WEEK_REPORT]: WeekReport,
+  [StatisticTypeEnum.MONTH_REPORT]: MonthReport,
+  [StatisticTypeEnum.YEAR_REPORT]: YearReport,
+}
+
+// 当前组件
+const currentComponent = computed(() => ComponentEnum[form.statisticType]);
+
 form.customUserList.value = []; // 防止进入页面开始就显示校验错误
 form.designatedUserList = [];
 
@@ -209,44 +189,33 @@ const editDebounce = debounce((form) => {
 
 const submitForm = async (formEl: FormInstance | undefined) => {
   if (!formEl) return;
-  await formEl.validate((valid, fields) => {
+  await formEl.validate((valid) => {
     if (valid) {
       let submitForm = reportMessageToFinal(form);
-      if (pageType.value != 3) {
+      if (pageType.value != OperationTypeEnum.EDIT) {
         addDebounce(submitForm);
       } else {
         editDebounce(submitForm);
       }
-    } else {
-      console.log('error submit!', fields);
-    }
+    } 
   });
 };
 
-// const resetForm = (formEl: FormInstance | undefined) => {
-//   if (!formEl) return;
-//   formEl.resetFields();
-// };
-
 const clickBack = () => {
   type.value = reportType.value;
   router.back();
 };
 
-watch(form, () => {
-  console.log(`form newvalue:`, form);
-});
-
 const getDisableType = (pageType) => {
-  if (pageType === 1) {
+  if (pageType === OperationTypeEnum.ADD) {
     // 新增
     disableType.value.statisticTypeDisable = false;
     disableType.value.contentDisable = false;
-  } else if (pageType === 2) {
+  } else if (pageType === OperationTypeEnum.SEARCH) {
     // 查询
     disableType.value.statisticTypeDisable = true;
     disableType.value.contentDisable = true;
-  } else if (pageType === 3) {
+  } else if (pageType === OperationTypeEnum.EDIT) {
     // 编辑
     disableType.value.statisticTypeDisable = true;
     disableType.value.contentDisable = false;
@@ -254,24 +223,9 @@ const getDisableType = (pageType) => {
 };
 
 onBeforeMount(() => {
-  if (pageType.value === 1) {
-    // 新增
-    getDisableType(1);
-  }
-  if (pageType.value === 2) {
-    // 查询
-    getDisableType(2);
-    searchMassage(queryType).then((res) => {
-      console.log('res', res);
-      toReportMessage(form, res);
-      return res;
-    });
-  }
-  if (pageType.value === 3) {
-    // 编辑
-    getDisableType(3);
+  getDisableType(pageType.value);
+  if (pageType.value === OperationTypeEnum.SEARCH || pageType.value === OperationTypeEnum.EDIT) {
     searchMassage(queryType).then((res) => {
-      console.log('res3333', res);
       toReportMessage(form, res);
       return res;
     });

+ 6 - 5
src/views/message/reportmessage/components/Form.vue

@@ -50,9 +50,11 @@
   import LogForm from './LogForm.vue';
   import { storeToRefs } from 'pinia';
   import useFormList from '../store/useFormList';
+  import { deleteReportConfig } from '@/api/message/report-message';
+  import { PushMessageTypeEnum } from '@/types/message/constant';
+
   const formStore = useFormList();
   const { getForm } = formStore;
-  import { deleteReportConfig } from '@/api/message/report-message';
   const { type, formList } = storeToRefs(formStore);
   const logFormVisible = ref(false);
   const actionColumn: BasicColumn = reactive({
@@ -95,7 +97,7 @@
   import { useRouter } from 'vue-router';
   const router = useRouter();
   const CreateReport = (type) => {
-    router.push(`/message/reportoperation?type=${type}&operationType=1`);
+    router.push(`/message/report-config?type=${type}&operationType=1`);
   };
   const statisticType = ref<number>(0);
   const handleLog = (record: Recordable) => {
@@ -103,13 +105,12 @@
     statisticType.value = record.statisticType;
   };
   const handleView = (record: Recordable) => {
-    router.push(
-      `/message/reportoperation?type=${type.value}&statisticType=${record.statisticType}&operationType=2`,
+    router.push(`/message/report-config?type=${type.value}&statisticType=${record.statisticType}&operationType=2`
     );
   };
   const handleEdit = (record: Recordable) => {
     router.push(
-      `/message/reportoperation?type=${type.value}&statisticType=${record.statisticType}&operationType=3`,
+      `/message/report-config?type=${type.value}&statisticType=${record.statisticType}&operationType=3`,
     );
   };
   const handleDelete = (record: Recordable) => {

+ 5 - 3
src/views/message/reportmessage/components/LogForm.vue

@@ -50,10 +50,12 @@
   const pageNum = ref<number>(1);
   const getLoglist = (pageNum, pageSize) => {
     const params: queryPushRecordsParams = {
-      pageNum: pageNum,
+      pageNumber: pageNum,
       pageSize: pageSize,
-      statisticType: props.statisticType,
-      type: type.value,
+      queryParam: {
+        statisticType: props.statisticType,
+        type: type.value,
+      }
     };
     queryPushRecords(params).then((res) => {
       logList.value = res.reportPushRecords;

+ 4 - 1
src/views/message/reportmessage/store/useFormList.ts

@@ -2,8 +2,11 @@ import { ref } from 'vue';
 import { defineStore } from 'pinia';
 import { reportData } from '../type';
 import { queryReportConfigList } from '@/api/message/report-message';
+import { PushMessageTypeEnum } from '@/types/message/constant';
+
+
 export const useFormList = defineStore('form-list', () => {
-  const type = ref<number>(1);
+  const type = ref<PushMessageTypeEnum>(1);
   const formList = ref<reportData[]>([]);
   const getForm = (type: number) => {
     queryReportConfigList(type).then((res) => {

+ 5 - 0
src/views/message/systemNotifications/type.ts

@@ -121,3 +121,8 @@ export const issueStateMapping = {
   [issueStateEnum.reviewSuccess]: '复核通过',
   [issueStateEnum.closed]: '已关闭',
 };
+
+export enum PushStatusEnum {
+  PEDDING = 0, // 等待推送
+  FULFILL = 1  // 已完成
+}