Quellcode durchsuchen

feat:重复性事件对接;

zhangchong vor 1 Jahr
Ursprung
Commit
6642d5e16a

+ 7 - 7
package-lock.json

@@ -22,7 +22,7 @@
 				"echarts": "^5.4.0",
 				"echarts-gl": "^2.0.9",
 				"echarts-wordcloud": "^2.1.0",
-				"element-plus": "^2.3.8",
+				"element-plus": "^2.4.0",
 				"file-saver": "^2.0.5",
 				"js-cookie": "^3.0.1",
 				"js-table2excel": "^1.0.3",
@@ -1645,9 +1645,9 @@
 			"peer": true
 		},
 		"node_modules/element-plus": {
-			"version": "2.3.8",
-			"resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.3.8.tgz",
-			"integrity": "sha512-yHQR0/tG2LvPkpGUt7Te/hPmP2XW/BytBNUbx+EFO54VnGCOE3upmQcVffNp1PLgwg9sthYDXontUWpnpmLPJw==",
+			"version": "2.4.0",
+			"resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.4.0.tgz",
+			"integrity": "sha512-yJEa8LXkGOOgkfkeqMMEdeX/Dc8EH9qPcRuX91dlhSXxgCKKbp9tH3QFTOG99ibZsrN/Em62nh7ddvbc7I1frw==",
 			"dependencies": {
 				"@ctrl/tinycolor": "^3.4.1",
 				"@element-plus/icons-vue": "^2.0.6",
@@ -5263,9 +5263,9 @@
 			"peer": true
 		},
 		"element-plus": {
-			"version": "2.3.8",
-			"resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.3.8.tgz",
-			"integrity": "sha512-yHQR0/tG2LvPkpGUt7Te/hPmP2XW/BytBNUbx+EFO54VnGCOE3upmQcVffNp1PLgwg9sthYDXontUWpnpmLPJw==",
+			"version": "2.4.0",
+			"resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.4.0.tgz",
+			"integrity": "sha512-yJEa8LXkGOOgkfkeqMMEdeX/Dc8EH9qPcRuX91dlhSXxgCKKbp9tH3QFTOG99ibZsrN/Em62nh7ddvbc7I1frw==",
 			"requires": {
 				"@ctrl/tinycolor": "^3.4.1",
 				"@element-plus/icons-vue": "^2.0.6",

+ 1 - 1
package.json

@@ -26,7 +26,7 @@
 		"echarts": "^5.4.0",
 		"echarts-gl": "^2.0.9",
 		"echarts-wordcloud": "^2.1.0",
-		"element-plus": "^2.3.8",
+		"element-plus": "^2.4.0",
 		"file-saver": "^2.0.5",
 		"js-cookie": "^3.0.1",
 		"js-table2excel": "^1.0.3",

+ 6 - 4
src/App.vue

@@ -1,9 +1,11 @@
 <template>
 	<el-config-provider :size="getGlobalComponentSize" :locale="zhCn" :message="messageConfig" :button="buttonConfig">
-		<router-view v-show="setLockScreen" />
-		<LockScreen v-if="themeConfig.isLockScreen" />
-		<Setings ref="setingsRef" v-show="setLockScreen" />
-		<CloseFull v-if="!themeConfig.isLockScreen" />
+<!--    <el-watermark :content="['Element', 'Element Plus']">
+    </el-watermark>-->
+    <router-view v-show="setLockScreen" />
+    <LockScreen v-if="themeConfig.isLockScreen" />
+    <Setings ref="setingsRef" v-show="setLockScreen" />
+    <CloseFull v-if="!themeConfig.isLockScreen" />
 	</el-config-provider>
 </template>
 

+ 70 - 0
src/api/business/repeatEvent.ts

@@ -0,0 +1,70 @@
+/*
+ * @Author: zc
+ * @description 业务管理-重复性时间管理
+ */
+import request from '/@/utils/request';
+/**
+ * @description 工单受理根据热点和地区获取重复性事件
+ * @param {object} data
+ */
+export const orderRepeatEvent = (data: object) => {
+    return request({
+        url: `/api/v1/Order/order_repeatable_event`,
+        method: 'post',
+        data
+    });
+};
+/**
+ * @description 重复性事件列表
+ * @param {object} params
+ */
+export const repeatEventList = (params?: object) => {
+    return request({
+        url: `/api/v1/Order/repeatable_event/list`,
+        method: 'get',
+        params
+    });
+};
+/**
+ * @description 重复性事件新增
+ * @param {object} data
+ */
+export const repeatEventAdd = (data: object) => {
+    return request({
+        url: `/api/v1/Order/repeatable_event`,
+        method: 'post',
+        data
+    });
+};
+/**
+ * @description 重复性事件更新
+ * @param {object} data
+ */
+export const repeatEventUpdate = (data: object) => {
+    return request({
+        url: `/api/v1/Order/repeatable_event`,
+        method: 'put',
+        data
+    });
+};
+/**
+ * @description 重复性事件删除
+ * @param {object} data
+ */
+export const repeatEventDelete = (data: object) => {
+    return request({
+        url: `/api/v1/Order/repeatable_event`,
+        method: 'delete',
+    });
+};
+/**
+ * @description 重复性事件详情
+ * @param {object} data
+ */
+export const repeatEventDetail = (data: object) => {
+    return request({
+        url: `/api/v1/Order/repeatable_event`,
+        method: 'post',
+        data
+    });
+};

+ 7 - 6
src/components/ProcessAudit/index.vue

@@ -40,7 +40,7 @@
 						<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
 							<el-form-item label="当前期满时间"> {{ formatDate(state.orderDetail.expiredTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
 						</el-col>
-						<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="12">
+						<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="12" v-loading="state.loading">
 							<el-form-item label="延期申请数量" prop="timeLimitCount" :rules="[{ required: true, message: '请输入延期申请数量', trigger: 'blur' }]">
 								<el-row :gutter="10">
 									<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
@@ -50,6 +50,7 @@
 											controls-position="right"
 											class="w100"
 											@input="computeTime"
+
 										></el-input-number>
 									</el-col>
 									<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" v-loading="state.loading">
@@ -522,7 +523,7 @@ import {commonEnum} from '/@/utils/constants';
 import {orderFlowParams, orderStartFlow} from '/@/api/business/order';
 import {workflowNext, workflowNextSteps, workflowPrevious, workflowRecall, workflowRecallParams, workflowRedoParams,workflowReject} from '/@/api/system/workflow';
 import {redoApply, redoBaseData} from '/@/api/business/redo';
-import {delayApply, delayCalcEndTime, workflowDelayParams} from '/@/api/business/delay';
+import {delayApply, delayCalcEndTime, workflowDelayParams ,delayBaseData} from '/@/api/business/delay';
 import {discernApply, screenBaseData, workflowDiscernParams} from '/@/api/business/discern';
 import {debounce} from '/@/utils/tools';
 import {bulletinAdd, bulletinAddBaseData, circularAdd, circularAddBaseData, getAllUsers, workflowBulletinParams, workflowCircularParams} from '/@/api/auxiliary/notice';
@@ -630,7 +631,6 @@ const handleResult = (res: any) => {
 
 	// state.handleId = res.result.id; //流程ID
 	communicationModeOptions.value = res.result.communicationModeOptions ?? []; // 沟通方式
-	timeTypeOptions.value = res.result.timeTypeOptions ?? []; // 时间单位
 
 	if (handelArr.includes(state.processType)) {
 		// 办理才有期满时间
@@ -678,17 +678,18 @@ const openDialog = async (val: any) => {
 			handleResult(workflowRecallResponse);
 			break;
 		case '延期申请': // 延期申请
-			const [workflowDelayResponse] = await Promise.all([workflowDelayParams()]); //获取开启流程参数
+			const [workflowDelayResponse,responseDelay] = await Promise.all([workflowDelayParams(),delayBaseData()]); //获取开启流程参数
+      timeTypeOptions.value = responseDelay.result?.timeType ?? []; // 延期时间单位
 			handleResult(workflowDelayResponse);
 			break;
 		case '甄别申请': // 甄别申请
 			const [workflowDiscernResponse, responseDiscern] = await Promise.all([workflowDiscernParams(), screenBaseData()]); //获取开启流程参数
-			screenTypeOptions.value = responseDiscern.result?.screenType ?? [];
+			screenTypeOptions.value = responseDiscern.result?.screenType ?? []; // 甄别理由
 			handleResult(workflowDiscernResponse);
 			break;
 		case '工单重办': // 工单重办
 			const [workflowRedoResponse, responseRedo] = await Promise.all([workflowRedoParams(state.workflowId), redoBaseData()]); //获取开启流程参数
-			orderRedoReasonOptions.value = responseRedo.result?.orderRedoReasonOptions ?? [];
+			orderRedoReasonOptions.value = responseRedo.result?.orderRedoReasonOptions ?? []; // 重办理由
 			handleResult(workflowRedoResponse);
 			break;
 		case '工单退回': // 退回流程

+ 3 - 3
src/layout/navBars/breadcrumb/userNews.vue

@@ -3,13 +3,13 @@
 		<el-popover placement="bottom" v-model:visible="visible" trigger="click" popper-class="layout-navBars-breadcrumb-user-news" transition="el-zoom-in-top" :width="300" :persistent="false">
 			<template #reference>
 				<el-badge :value="messageCount" :max="99" :hidden="messageHidden">
-					<SvgIcon name="ele-Bell" size="18px" />
+					<SvgIcon name="ele-Bell" size="18px"/>
 				</el-badge>
 			</template>
 			<template #default>
 				<div class="head-box">
 					<div class="head-box-title">通知</div>
-					<div class="head-box-btn" v-if="state.newsList.length > 0" @click="onAllReadClick">全部已读</div>
+<!--					<div class="head-box-btn" v-if="state.newsList.length > 0" @click="onAllReadClick">全部已读</div>-->
 				</div>
 				<div class="content-box">
 					<template v-if="state.newsList.length > 0">
@@ -44,7 +44,7 @@ const onAllReadClick = () => {
 	messageCount.value = 0;
 };
 
-const messageCount = ref<number>(2); //消息数量
+const messageCount = ref<number>(0); //消息数量
 const messageHidden = computed(() => {
 	//消息是否隐藏
 	return messageCount.value === 0;

+ 3 - 5
src/views/business/delay/backlog/index.vue

@@ -2,6 +2,9 @@
 	<div class="business-delay-backlog-container layout-pd">
 		<!-- 搜索  -->
 		<el-card shadow="never">
+      <el-tabs v-model="state.queryParams.IsApply" class="demo-tabs" @tab-change="handleClick">
+        <el-tab-pane :name="item.value" v-for="item in state.tabPaneList" :key="item.value" :label="item.label"></el-tab-pane>
+      </el-tabs>
 			<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent class="mt15" label-width="100px">
 				<el-row :gutter="10">
 					<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
@@ -19,11 +22,6 @@
           </el-col>
 				</el-row>
 			</el-form>
-		</el-card>
-		<el-card shadow="never">
-      <el-tabs v-model="state.queryParams.IsApply" class="demo-tabs" @tab-change="handleClick">
-        <el-tab-pane :name="item.value" v-for="item in state.tabPaneList" :key="item.value" :label="item.label"></el-tab-pane>
-      </el-tabs>
 			<!-- 表格 -->
 			<el-table :data="state.tableData" v-loading="state.loading" row-key="id" ref="multipleTableRef" @selection-change="handleSelectionChange">
 				<el-table-column type="selection" width="55" />

+ 255 - 22
src/views/business/order/accept/Repeat-event.vue

@@ -1,7 +1,5 @@
->
-
 <template>
-	<div>
+	<div class="business-order-accept-repeat-event-container">
 		<el-form :model="state.queryParams" ref="queryParamsRef" :inline="true" @submit.native.prevent>
 			<el-form-item label="关键词" prop="Keyword">
 				<el-input v-model="state.queryParams.Keyword" placeholder="事件标题/关键词" clearable @keyup.enter="handleQuery" />
@@ -16,6 +14,7 @@
 					end-placeholder="结束时间"
 					:shortcuts="shortcuts"
 					@change="timeStartChangeCr"
+					:clearable="false"
 					value-format="YYYY-MM-DD[T]HH:mm:ss"
 				/>
 			</el-form-item>
@@ -27,23 +26,37 @@
 			</el-form-item>
 		</el-form>
 		<div class="mb10">
-			<el-button type="primary" @click="onAdd" v-auth="'business:repeatEvent:add'"> <SvgIcon name="ele-Plus" class="mr5" />创建重复事件 </el-button>
+			<el-button type="primary" @click="onCreate" v-auth="'business:repeatEvent:add'">
+				<SvgIcon name="ele-Plus" class="mr5" />创建重复事件
+			</el-button>
 		</div>
 		<el-table :data="state.tableData" v-loading="state.loading" max-height="300">
+			<el-table-column label="操作" width="80" fixed="left" align="center">
+				<template #default="{ row }">
+					<el-button @click="onAdd(row)" link type="primary"> 添加 </el-button>
+				</template>
+			</el-table-column>
 			<el-table-column prop="phoneNo" label="标题" show-overflow-tooltip width="180">
 				<template #default="{ row }">
 					{{ row.title }}
 				</template>
 			</el-table-column>
-			<el-table-column prop="hotspotName" label="关键词" show-overflow-tooltip> </el-table-column>
-			<el-table-column prop="no" label="创建时间" show-overflow-tooltip width="170">
-				<template #default="{ row }"> </template>
+			<el-table-column prop="keyWords" label="关键词" show-overflow-tooltip> </el-table-column>
+			<el-table-column label="创建时间" show-overflow-tooltip width="170">
+				<template #default="{ row }">
+          {{ formatDate(row.creationTime, 'YYYY-mm-dd HH:MM:SS') }}
+        </template>
 			</el-table-column>
-			<el-table-column prop="currentStepName" label="创建人" show-overflow-tooltip></el-table-column>
-			<el-table-column prop="statusText" label="事件工单数" width="100" fixed="right" align="center"></el-table-column>
+			<el-table-column prop="creatorName" label="创建人" show-overflow-tooltip></el-table-column>
+			<el-table-column prop="statusText" label="事件工单数" width="100" fixed="right" align="center">
+        <template #default="{ row }">
+          {{ row.details?.length }}
+        </template>
+      </el-table-column>
 		</el-table>
-
-		<el-dialog v-model="state.dialogVisible" width="500px" draggable title="新增重复性事件" @close="close">
+		<pagination :total="state.total" v-model:page="state.queryParams.PageIndex" v-model:limit="state.queryParams.PageSize" @pagination="queryList" />
+    <!--  添加重复性事件  -->
+		<el-dialog v-model="state.dialogVisible" width="50%" draggable title="新增重复性事件" @close="close" append-to-body destroy-on-close>
 			<el-form :model="state.ruleForm" label-width="80px" ref="ruleFormRef">
 				<el-row :gutter="10">
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
@@ -52,7 +65,7 @@
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-						<el-form-item label="关键词" prop="synonym" :rules="[{ required: false, message: '请输入关键词', trigger: 'change' }]">
+						<el-form-item label="关键词" prop="keyWords" :rules="[{ required: false, message: '请输入关键词', trigger: 'change' }]">
 							<el-tag
 								v-for="tag in dynamicTags"
 								:key="tag"
@@ -78,6 +91,125 @@
 					</el-col>
 				</el-row>
 			</el-form>
+			<el-divider content-position="left"><span class="font16"> 重复事件工单 </span></el-divider>
+			<div class="mb10">
+				<el-button type="primary" @click="onAddRepeatTable">添加 </el-button>
+				<el-button type="primary" @click="onRemoveRepeatTable" :disabled="!multipleSelection.length">移除 </el-button>
+			</div>
+			<el-table
+				:data="state.repeatTable"
+				v-loading="state.loading"
+				row-key="id"
+				@selection-change="handleSelectionChange"
+				ref="multipleTableRef"
+			>
+				<el-table-column type="selection" label="" width="55" :reserve-selection="true" />
+        <el-table-column prop="no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>
+        <el-table-column width="100" label="省/市工单" prop="isProvince">
+          <template #default="{ row }">
+            <span>{{ row.isProvince ? '省工单' : '市工单' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="currentStepName" label="当前办理节点" show-overflow-tooltip width="150"></el-table-column>
+        <el-table-column label="工单状态" show-overflow-tooltip width="100" prop="statusText"></el-table-column>
+        <el-table-column label="标题" show-overflow-tooltip width="300">
+          <template #default="{ row }">
+            <span class="color-primary">{{ row.title }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="startTime" label="受理时间" show-overflow-tooltip width="170">
+          <template #default="{ row }">
+            <span>{{ formatDate(row.startTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="expiredTime" label="工单期满时间" show-overflow-tooltip width="170">
+          <template #default="{ row }">
+            <span>{{ formatDate(row.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="actualHandleOrgName" label="接办部门" show-overflow-tooltip width="170"></el-table-column>
+        <el-table-column prop="acceptType" label="受理类型" show-overflow-tooltip width="150"></el-table-column>
+        <el-table-column label="紧急程度" show-overflow-tooltip prop="emergencyLevelText" width="100"></el-table-column>
+        <el-table-column prop="sourceChannel" label="来源方式" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="employeeName" label="受理人" show-overflow-tooltip width="120">
+          <template #default="{ row }">
+						<span
+            >{{ row.acceptorName }} <span v-if="row.acceptorStaffNo">[{{ row.acceptorStaffNo }}]</span>
+						</span>
+          </template>
+        </el-table-column>
+			</el-table>
+
+      <!--   从所有工单重选择重复   -->
+      <el-dialog v-model="state.dialogVisibleAllTable" width="50%" draggable title="选择重复事件工单" append-to-body destroy-on-close>
+        <el-form :model="state.queryParamsAll" ref="queryParamsAllRef" :inline="true" @submit.native.prevent>
+          <el-form-item label="关键词" prop="Keyword">
+            <el-input v-model="state.queryParamsAll.Keyword" placeholder="工单标题/工单编码" clearable @keyup.enter="queryListAll" />
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" @click="queryListAll" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
+            <el-button @click="resetQueryAll(queryParamsAllRef)" :loading="state.loading" class="default-button">
+              <SvgIcon name="ele-Refresh" class="mr5" />重置
+            </el-button>
+          </el-form-item>
+        </el-form>
+        <el-table
+            :data="state.allTable"
+            v-loading="state.loading"
+            row-key="id"
+            @selection-change="handleSelectionChangeAll"
+            ref="multipleTableAllRef"
+        >
+          <el-table-column type="selection" label="" width="55" :reserve-selection="true" />
+          <el-table-column prop="no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>
+          <el-table-column width="100" label="省/市工单" prop="isProvince">
+            <template #default="{ row }">
+              <span>{{ row.isProvince ? '省工单' : '市工单' }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column prop="currentStepName" label="当前办理节点" show-overflow-tooltip width="150"></el-table-column>
+          <el-table-column label="工单状态" show-overflow-tooltip width="100" prop="statusText"></el-table-column>
+          <el-table-column label="标题" show-overflow-tooltip width="300">
+            <template #default="{ row }">
+              <span class="color-primary">{{ row.title }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column prop="startTime" label="受理时间" show-overflow-tooltip width="170">
+            <template #default="{ row }">
+              <span>{{ formatDate(row.startTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column prop="expiredTime" label="工单期满时间" show-overflow-tooltip width="170">
+            <template #default="{ row }">
+              <span>{{ formatDate(row.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column prop="actualHandleOrgName" label="接办部门" show-overflow-tooltip width="170"></el-table-column>
+          <el-table-column prop="acceptType" label="受理类型" show-overflow-tooltip width="150"></el-table-column>
+          <el-table-column label="紧急程度" show-overflow-tooltip prop="emergencyLevelText" width="100"></el-table-column>
+          <el-table-column prop="sourceChannel" label="来源方式" show-overflow-tooltip></el-table-column>
+          <el-table-column prop="employeeName" label="受理人" show-overflow-tooltip width="120">
+            <template #default="{ row }">
+						<span
+            >{{ row.acceptorName }} <span v-if="row.acceptorStaffNo">[{{ row.acceptorStaffNo }}]</span>
+						</span>
+            </template>
+          </el-table-column>
+        </el-table>
+        <!-- 分页 -->
+        <pagination
+            :total="state.totalAll"
+            v-model:page="state.queryParamsAll.PageIndex"
+            v-model:limit="state.queryParamsAll.PageSize"
+            @pagination="queryListAll"
+        />
+        <template #footer>
+				<span class="dialog-footer">
+					<el-button @click="state.dialogVisibleAllTable = false" class="default-button">取 消</el-button>
+					<el-button type="primary" @click="onSubmitAll" :loading="state.loading" :disabled="!multipleSelectionAll.length">确 定</el-button>
+				</span>
+        </template>
+      </el-dialog>
 			<template #footer>
 				<span class="dialog-footer">
 					<el-button @click="state.dialogVisible = false" class="default-button">取 消</el-button>
@@ -89,25 +221,39 @@
 </template>
 <script setup lang="ts" name="orderAcceptRepeatEvent">
 import { nextTick, reactive, ref } from 'vue';
-import { ElButton, ElInput, ElMessage, FormInstance } from 'element-plus';
+import {ElButton, ElInput, ElMessage, ElMessageBox, FormInstance} from 'element-plus';
 import { shortcuts } from '/@/utils/constants';
 import { throttle } from '/@/utils/tools';
-import { addCommon } from '/@/api/auxiliary/advice';
+import dayjs from 'dayjs';
+import {repeatEventAdd, repeatEventList} from '/@/api/business/repeatEvent';
+import { auth } from '/@/utils/authFunction';
+import {formatDate} from "/@/utils/formatTime";
+import {orderList} from "/@/api/business/order";
+import {removeDuplicate} from "/@/utils/arrayOperation";
 const state = reactive<any>({
 	queryParams: {
 		// 查询条件
 		PageIndex: 1,
 		PageSize: 10,
-		Keyword: '', // 关键字
-		CreationTimeStart: '', // 创建时间 开始
-		CreationTimeEnd: '', // 创建时间 结束
-		exTime: [], // 办理期限
+		Keyword: null, // 关键字
+		CreationTimeStart: dayjs().startOf('day').format('YYYY-MM-DD[T]HH:mm:ss'), // 创建时间 开始
+		CreationTimeEnd: dayjs().endOf('day').format('YYYY-MM-DD[T]HH:mm:ss'), // 创建时间 结束
+		exTime: [dayjs().startOf('day').format('YYYY-MM-DD[T]HH:mm:ss'), dayjs().endOf('day').format('YYYY-MM-DD[T]HH:mm:ss')], // 创建时间
 	},
 	tableData: [], //表格
 	loading: false, // 加载
 	total: 0, // 总数
 	dialogVisible: false, // 弹窗
 	ruleForm: {},
+  repeatTable: [], // 重复事件工单
+  dialogVisibleAllTable:false, // 全部工单 重复事件工单弹窗
+  allTable: [], // 全部工单
+  totalAll:0,
+  queryParamsAll:{
+    PageIndex: 1,
+    PageSize: 10,
+    Keyword: '', // 关键字
+  }
 });
 
 const inputValue = ref('');
@@ -159,11 +305,87 @@ const resetQuery = throttle((formEl: FormInstance | undefined) => {
 	formEl.resetFields();
 	handleQuery();
 }, 300);
-const queryList = () => {};
+const queryList = () => {
+	state.loading = true;
+	if (!auth('business:repeatEvent:query')) ElMessage.error('抱歉,您没有权限获取重复性事件列表!');
+	else {
+		const request = {
+			...state.queryParams,
+		};
+		Reflect.deleteProperty(request, 'exTime');
+		repeatEventList(request)
+			.then((res: any) => {
+				state.loading = false;
+				state.tableData = res.result.items ?? [];
+				state.total = res.result.total ?? 0;
+			})
+			.finally(() => {
+				state.loading = false;
+			});
+	}
+};
+// 添加
+const onAdd = () => {};
 // 创建重复事件
-const onAdd = () => {
+const onCreate = () => {
 	state.dialogVisible = true;
 };
+// 打开所有工单列表选择重复工单
+const onAddRepeatTable = ()=>{
+  queryListAll();
+  state.dialogVisibleAllTable = true;
+}
+// 获取所有工单列表
+const queryListAll = async ()=>{
+  try {
+    const res = await orderList(state.queryParamsAll);
+    state.allTable = res.result.items ?? [];
+    state.totalAll = res.result.total ?? 0;
+  }catch (e) {
+    console.log(e)
+  }
+}
+// 重置所有工单列表
+const queryParamsAllRef = ref<RefType>();
+const resetQueryAll = (formEl: FormInstance | undefined) => {
+  if (!formEl) return;
+  formEl.resetFields();
+  queryListAll();
+};
+const multipleSelection = ref<EmptyArrayType>([]); // 重复件表格选中项
+const multipleTableRef = ref<RefType>(); // 重复件表格ref
+const handleSelectionChange = (row:any)=>{
+  multipleSelection.value = row;
+}
+const multipleSelectionAll = ref<EmptyArrayType>([]); // 所有工单表格选中项
+const multipleTableAllRef = ref<RefType>(); // 所有工单表格ref
+const handleSelectionChangeAll = (row:any)=>{
+  multipleSelectionAll.value = row;
+}
+// 确定选择所有工单到重复工单
+const onSubmitAll = ()=>{
+  state.dialogVisibleAllTable = false;
+  state.repeatTable = removeDuplicate([...state.repeatTable,...multipleSelectionAll.value], 'id'); // 添加时去重
+  multipleSelectionAll.value = [];
+}
+// 删除重复工单
+const onRemoveRepeatTable = ()=>{
+  const title = multipleSelection.value.map((item: any) => item.title);
+  ElMessageBox.confirm(`您确定要删除:【${title}】,是否继续?`, '提示', {
+    confirmButtonText: '确认',
+    cancelButtonText: '取消',
+    type: 'warning',
+    draggable: true,
+    cancelButtonClass: 'default-button',
+    autofocus: false,
+  })
+      .then(() => {
+        state.repeatTable = state.repeatTable.filter((item:any)=>{
+          return !multipleSelection.value.includes(item)
+        })
+      })
+      .catch(() => {});
+}
 const ruleFormRef = ref<RefType>();
 const close = () => {
 	ruleFormRef.value.clearValidate();
@@ -174,16 +396,24 @@ const onSubmit = throttle(async (formEl: FormInstance | undefined) => {
 	await formEl.validate((valid: boolean) => {
 		if (!valid) return;
 		state.loading = true;
+    const details = state.repeatTable.map((item:any)=>{
+      return {
+        orderNo: item.no,
+        orderId: item.id,
+      }
+    })
 		const request = {
 			...state.ruleForm,
-			synonym: dynamicTags.value.join(','),
+      keyWords: dynamicTags.value.join(','),
+      details
 		};
-		addCommon(request)
+    repeatEventAdd(request)
 			.then(() => {
 				ElMessage({
 					message: '操作成功',
 					type: 'success',
 				});
+        queryList();
 				state.dialogVisible = false;
 			})
 			.catch((error) => {})
@@ -193,5 +423,8 @@ const onSubmit = throttle(async (formEl: FormInstance | undefined) => {
 			});
 	});
 }, 300);
+defineExpose({
+  queryList,
+})
 </script>
 <style scoped lang="scss"></style>

+ 90 - 75
src/views/business/order/accept/index.vue

@@ -362,7 +362,7 @@
 											</el-form-item>
 										</el-col>
 										<div v-if="showRepeatEvent" class="color-danger mb10" style="margin-left: 110px">
-											【{{ state.ruleForm.address }}】下存在多起【热点类型】事件,点击前往查看或右侧添加重复性事件
+											【{{ state.ruleForm.address }}】下存在多起【{{ state.ruleForm.hotspotSpliceName }}】事件,点击前往查看或右侧添加重复性事件
 											<el-button type="primary" link style="padding: 0 0 3px" @click="onRepeatEvent"> 查看详情</el-button>
 										</div>
 									</el-row>
@@ -463,7 +463,7 @@
 								</el-tabs>
 							</el-tab-pane>
 							<el-tab-pane label="重复性事件" name="repeat">
-								<repeat-event />
+								<repeat-event ref="repeatEventRef"/>
 							</el-tab-pane>
 							<el-tab-pane label="历史工单" name="history">
 								<history-order
@@ -492,8 +492,6 @@
 		<order-expand-form ref="ExpandFormRef" @saveExpandForm="saveExpandForm" :orderDetail="orderDetailInfo" :extra="extra" />
 		<!-- 历史工单 -->
 		<order-history ref="HistoryOrderRef" @saveSelect="saveSelect" />
-		<!-- 重复事件列表 -->
-		<repeat-event-dialog ref="repeatEventDialogRef" />
 		<!--  流程审批  -->
 		<process-audit ref="processAuditRef" @orderProcessSuccess="orderProcessSuccess" />
 		<!-- 地图选点 -->
@@ -516,6 +514,7 @@ import { orderBaseDataAdd, orderAdd, hotSpotType, orderEdit, orderDetail, orderB
 import { useUserInfo } from '/@/stores/userInfo';
 import { treeArea } from '/@/api/auxiliary/area';
 import mittBus from '/@/utils/mitt';
+import { orderRepeatEvent } from '/@/api/business/repeatEvent';
 
 // 引入组件
 const Knowledge = defineAsyncComponent(() => import('/@/views/business/order/accept/Knowledge.vue')); // 知识库
@@ -523,7 +522,6 @@ const HistoryOrder = defineAsyncComponent(() => import('/@/views/business/order/
 const RepeatEvent = defineAsyncComponent(() => import('/@/views/business/order/accept/Repeat-event.vue')); // 重复事件
 const VoiceAssistant = defineAsyncComponent(() => import('/@/views/business/order/accept/Voice-assistant.vue')); // 重复事件
 const CitizenPortrait = defineAsyncComponent(() => import('/@/views/business/order/accept/Citizen-portrait.vue')); // 市民坏画像
-const RepeatEventDialog = defineAsyncComponent(() => import('/@/views/business/order/components/Order-repeat-event.vue')); // 重复事件弹窗列表
 const OrderExpandForm = defineAsyncComponent(() => import('/@/views/business/order/components/Order-expand-form.vue')); // 拓展表单
 const OrderHistory = defineAsyncComponent(() => import('/@/views/business/order/components/Order-history.vue')); // 历史工单弹窗列表
 const CommonAdvice = defineAsyncComponent(() => import('/@/components/CommonAdvice/index.vue')); // 常用意见
@@ -643,6 +641,7 @@ const hotSpotChange = (val: any, e: any) => {
 	state.ruleForm.hotspotSpliceName = val.hotSpotFullName;
 	state.ruleForm.hotspotName = val.hotSpotName;
 	knowledgeActiveRef.value.knowledgeRetrievalPaged(val.hotSpotName);
+  searchRepeatEvent(val.hotSpotFullName,state.ruleForm.address);
 };
 // 递归查找父级Id
 const getParentId = (val: any, arr: string[]) => {
@@ -672,8 +671,20 @@ const showRepeatEvent = ref<boolean>(false); //是否展示重复性事件
 const changeArea = () => {
 	const currentNode = areaRef.value.getCheckedNodes();
 	state.ruleForm.address = currentNode[0].pathLabels.join(''); // 事发地址
-	showRepeatEvent.value = true;
-	rightActive.value = 'repeat';
+	searchRepeatEvent(state.ruleForm.hotspotSpliceName,state.ruleForm.address);
+};
+// 根据热点和事发地址去查询重复性事件
+const repeatEventRef = ref<RefType>();
+const searchRepeatEvent = async (hotspotSpliceName:string,address:string) => {
+	if (hotspotSpliceName && address) {
+		const {result} = await orderRepeatEvent({hotspotSpliceName,address});
+    if(result){
+      showRepeatEvent.value = true;
+      repeatEventRef.value.queryList();
+    }else{
+      showRepeatEvent.value = false;
+    }
+	}
 };
 // 地图选点
 const mapDialogRef = ref<RefType>();
@@ -693,9 +704,78 @@ const selectMap = (location: any) => {
 	state.ruleForm.latitude = location.latitude;
 	state.ruleForm.areaCode = location.adcode;
 	state.ruleForm.street = location.formattedAddress;
+  searchRepeatEvent(state.ruleForm.hotspotSpliceName,location.formattedAddress);
 };
-const ExpandFormRef = ref<RefType>();
+// 查看重复事件
+const onRepeatEvent = () => {
+  rightActive.value = 'repeat';
+};
+
+// 选择是否重复
+const isRepeatChange = (val: string) => {
+  if (val === 'false') clearRepeat();
+};
+// 清除重复件
+const clearRepeat = () => {
+  ElMessageBox.confirm(`确认要清除选择的重复工单?`, '提示', {
+    confirmButtonText: '确认',
+    cancelButtonText: '取消',
+    type: 'warning',
+    draggable: true,
+    cancelButtonClass: 'default-button',
+    autofocus: false,
+  })
+      .then(() => {
+        historyOrderRef.value.clearRepeat();
+        setTimeout(() => {
+          state.ruleForm.duplicateTitle = '';
+          state.ruleForm.duplicateIds = [];
+        }, 0);
+      })
+      .catch(() => {
+        state.ruleForm.isRepeat = 'true';
+      });
+};
+// 选择重复件
+const HistoryOrderRef = ref<RefType>();
+const selectRepeat = () => {
+  HistoryOrderRef.value.openDialog(state.ruleForm);
+};
+// 弹窗确定选择重复件
+const saveSelect = (row: any) => {
+  historyOrderRef.value.clearRepeat();
+  state.ruleForm.duplicateIds = row.map((item: any) => item.id);
+  state.ruleForm.duplicateTitle = '已选择';
+  historyOrderRef.value.dialogConfirmRepeat(row);
+  HistoryOrderRef.value.closeDialog();
+};
+// 右侧选择历史工单
+const handleSelectionChange = (row: any) => {
+  if (row && row.length) {
+    state.ruleForm.duplicateIds = row.map((item: any) => item.id);
+    state.ruleForm.duplicateTitle = '已选择';
+  } else {
+    state.ruleForm.duplicateIds = [];
+    state.ruleForm.duplicateTitle = '';
+  }
+};
+const historyOrderRef = ref<RefType>(); // 历史工单组件
+const citizenPortraitRef = ref<RefType>(); // 市民画像组件
+// 查询历史工单 和市民画像
+const searchHistory = (val?: any) => {
+  historyOrderRef.value.searchHistory(val);
+  rightActive.value = 'history';
+  citizenPortraitRef.value.getCitizen(state.ruleForm);
+};
+const rightActive = ref<string>('knowledge'); // 右侧顶部Tab
+const handleRight = (val: string) => {};
+const knowledgeActive = ref<string>('center'); // 知识库顶部Tab
+const handleKnowledge = (val: string) => {};
+const rightBottomActive = ref<string>('voice'); // 右侧底部Tab
+const handleRightBottom = (val: string) => {};
+
 // 打开拓展表单
+const ExpandFormRef = ref<RefType>();
 const showExpandForm = () => {
 	ExpandFormRef.value.openDialog(state.ruleForm.acceptTypeCode);
 };
@@ -811,73 +891,8 @@ const orderProcessSuccess = () => {
 		path: '/business/order/index',
 	});
 };
-// 选择是否重复
-const isRepeatChange = (val: string) => {
-	if (val === 'false') clearRepeat();
-};
-// 清除重复件
-const clearRepeat = () => {
-	ElMessageBox.confirm(`确认要清除选择的重复工单?`, '提示', {
-		confirmButtonText: '确认',
-		cancelButtonText: '取消',
-		type: 'warning',
-		draggable: true,
-		cancelButtonClass: 'default-button',
-		autofocus: false,
-	})
-		.then(() => {
-			historyOrderRef.value.clearRepeat();
-			setTimeout(() => {
-				state.ruleForm.duplicateTitle = '';
-				state.ruleForm.duplicateIds = [];
-			}, 0);
-		})
-		.catch(() => {
-			state.ruleForm.isRepeat = 'true';
-		});
-};
-// 选择重复件
-const HistoryOrderRef = ref<RefType>();
-const selectRepeat = () => {
-	HistoryOrderRef.value.openDialog(state.ruleForm);
-};
-// 弹窗确定选择重复件
-const saveSelect = (row: any) => {
-	historyOrderRef.value.clearRepeat();
-	state.ruleForm.duplicateIds = row.map((item: any) => item.id);
-	state.ruleForm.duplicateTitle = '已选择';
-	historyOrderRef.value.dialogConfirmRepeat(row);
-	HistoryOrderRef.value.closeDialog();
-};
-// 右侧选择历史工单
-const handleSelectionChange = (row: any) => {
-	if (row && row.length) {
-		state.ruleForm.duplicateIds = row.map((item: any) => item.id);
-		state.ruleForm.duplicateTitle = '已选择';
-	} else {
-		state.ruleForm.duplicateIds = [];
-		state.ruleForm.duplicateTitle = '';
-	}
-};
-const historyOrderRef = ref<RefType>(); // 历史工单组件
-const citizenPortraitRef = ref<RefType>(); // 市民画像组件
-// 查询历史工单 和市民画像
-const searchHistory = (val?: any) => {
-	historyOrderRef.value.searchHistory(val);
-	rightActive.value = 'history';
-	citizenPortraitRef.value.getCitizen(state.ruleForm);
-};
-const rightActive = ref<string>('knowledge'); // 右侧顶部Tab
-const handleRight = (val: string) => {};
-const knowledgeActive = ref<string>('center'); // 知识库顶部Tab
-const handleKnowledge = (val: string) => {};
-const rightBottomActive = ref<string>('voice'); // 右侧底部Tab
-const handleRightBottom = (val: string) => {};
-// 查看重复事件
-const repeatEventDialogRef = ref<RefType>();
-const onRepeatEvent = () => {
-	repeatEventDialogRef.value.openDialog();
-};
+
+// 拓展信息
 const extra = ref<any>({
 	ext: {},
 	area: {},

+ 0 - 114
src/views/business/order/components/Order-repeat-event.vue

@@ -1,114 +0,0 @@
-<template>
-	<el-dialog v-model="state.dialogVisible" draggable title="重复性事件" ref="dialogRef" width="60%" append-to-body>
-		<el-form :model="state.queryParams" ref="queryParamsRef" :inline="true" @submit.native.prevent>
-			<el-form-item label="关键词" prop="Keyword">
-				<el-input v-model="state.queryParams.Keyword" placeholder="事件标题/关键词" clearable @keyup.enter="handleQuery" />
-			</el-form-item>
-			<el-form-item label="创建时间" prop="exTime">
-				<el-date-picker
-					v-model="state.queryParams.exTime"
-					type="datetimerange"
-					unlink-panels
-					range-separator="至"
-					start-placeholder="开始时间"
-					end-placeholder="结束时间"
-					:shortcuts="shortcuts"
-					@change="timeStartChangeCr"
-					value-format="YYYY-MM-DD[T]HH:mm:ss"
-				/>
-			</el-form-item>
-			<el-form-item>
-				<el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
-				<el-button @click="resetQuery(queryParamsRef)" :loading="state.loading" class="default-button">
-					<SvgIcon name="ele-Refresh" class="mr5" />重置
-				</el-button>
-			</el-form-item>
-		</el-form>
-		<el-table :data="state.tableData" v-loading="state.loading" max-height="300">
-			<el-table-column prop="phoneNo" label="标题" show-overflow-tooltip width="180">
-				<template #default="{ row }">
-					{{ row.title }}
-				</template>
-			</el-table-column>
-			<el-table-column prop="hotspotName" label="关键词" show-overflow-tooltip> </el-table-column>
-			<el-table-column prop="no" label="创建时间" show-overflow-tooltip width="170">
-				<template #default="{ row }"> </template>
-			</el-table-column>
-			<el-table-column prop="currentStepName" label="创建人" show-overflow-tooltip></el-table-column>
-			<el-table-column prop="statusText" label="事件工单数" width="100" fixed="right" align="center"></el-table-column>
-		</el-table>
-		<template #footer>
-			<span class="dialog-footer">
-				<el-button class="default-button" @click="state.dialogVisible = false">关 闭</el-button>
-			</span>
-		</template>
-	</el-dialog>
-</template>
-
-<script setup lang="ts" name="orderRepeatEvent">
-import { reactive, ref } from 'vue';
-import type { FormInstance } from 'element-plus';
-import { shortcuts } from '/@/utils/constants';
-import { ElButton, ElMessage } from 'element-plus';
-import { throttle } from '/@/utils/tools';
-import { auth } from '/@/utils/authFunction';
-// 引入组件
-// 定义变量内容
-const state = reactive<any>({
-	dialogVisible: false, // 弹窗显示隐藏
-	queryParams: {
-		PageIndex: 1, // 当前页
-		PageSize: 10, // 每页条数
-		Keyword: '', // 关键字
-	},
-	tableData: [], // 表格数据
-	total: 0, // 总条数
-	loading: false, // 加载状态
-	ruleForm: {}, // 表单数据
-});
-const queryParamsRef = ref<RefType>(); // 查询参数
-const handleTimeChange = (val: string[], startKey: string, endKey: string) => {
-	if (val) {
-		state.queryParams[startKey] = val[0];
-		state.queryParams[endKey] = val[1];
-	} else {
-		state.queryParams[startKey] = '';
-		state.queryParams[endKey] = '';
-	}
-};
-// 时间
-const timeStartChangeCr = (val: string[]) => {
-	handleTimeChange(val, 'CreationTimeStart', 'CreationTimeEnd');
-};
-/** 搜索按钮操作 */
-const handleQuery = throttle(() => {
-	state.queryParams.PageIndex = 1;
-	queryList();
-}, 500);
-/** 重置按钮操作 */
-const resetQuery = throttle((formEl: FormInstance | undefined) => {
-	if (!formEl) return;
-	formEl.resetFields();
-	handleQuery();
-}, 300);
-const queryList = () => {
-	if (!auth('business:order:history')) ElMessage.error('抱歉,您没有权限查询历史工单!');
-	else {
-	}
-};
-// 打开弹窗
-const openDialog = (row: any) => {
-	queryList();
-	state.dialogVisible = true;
-};
-const dialogRef = ref<RefType>();
-// 关闭弹窗
-const closeDialog = () => {
-	state.dialogVisible = false;
-};
-// 暴露变量
-defineExpose({
-	openDialog,
-	closeDialog,
-});
-</script>

+ 108 - 108
src/views/business/repeatEvent/index.vue

@@ -1,68 +1,70 @@
 <template>
-  <div class="quality-lexicon-container layout-pd">
-    <el-card shadow="never">
-      <el-form :model="state.queryParams" ref="ruleFormRef" :inline="true" @submit.native.prevent>
-        <el-form-item label="市民联系方式" prop="Name">
-          <el-input v-model="state.queryParams.Name" placeholder="请输入市民联系方式" clearable @keyup.enter="queryList" style="width: 250px" />
-        </el-form-item>
-        <el-form-item label="市民标签" prop="Name">
-          <el-input v-model="state.queryParams.Name" placeholder="请输入市民标签" clearable @keyup.enter="queryList" style="width: 250px" />
-        </el-form-item>
-        <el-form-item>
-          <el-button type="primary" @click="queryList" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
-          <el-button @click="resetQuery(ruleFormRef)" v-waves class="default-button"> <SvgIcon name="ele-Refresh" class="mr5" />重置 </el-button>
-        </el-form-item>
-      </el-form>
-    </el-card>
-    <el-card shadow="never">
-      <el-table :data="state.tableData" v-loading="state.loading" row-key="id" ref="multipleTableRef" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" />
-        <el-table-column prop="phoneNumber" label="重复事件编码" show-overflow-tooltip width="200"></el-table-column>
-        <el-table-column prop="label" label="重复事件标题" show-overflow-tooltip width="400"></el-table-column>
-        <el-table-column prop="label" label="关键词" show-overflow-tooltip width="300"></el-table-column>
-        <el-table-column prop="creatorName" label="创建人" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="creationTime" label="创建时间" show-overflow-tooltip width="170">
-          <template #default="{ row }">
-            <span>{{ formatDate(row.creationTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column prop="lastModificationName" label="更新人" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="lastModificationTime" label="更新时间" show-overflow-tooltip width="170">
-          <template #default="{ row }">
-            <span>{{ formatDate(row.lastModificationTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="操作" width="140" fixed="right" align="center">
-          <template #default="{ row }">
-            <el-button link type="primary" @click="onTagsRecord(row)" v-auth="'business:repeatEvent:detail'" title="查看重复性详情"> 事件详情 </el-button>
-            <el-button link type="primary" @click="onTagsEdit(row)" v-auth="'business:repeatEvent:edit'" title="编辑重复性事件"> 编辑 </el-button>
-          </template>
-        </el-table-column>
-        <template #empty>
-          <Empty />
-        </template>
-      </el-table>
-      <!-- 分页 -->
-      <pagination
-          :total="state.total"
-          v-model:page="state.queryParams.PageIndex"
-          v-model:limit="state.queryParams.PageSize"
-          @pagination="queryList"
-      />
-    </el-card>
-    <!-- 标签记录   -->
-    <tags-record  ref="tagsRecordRef"/>
-    <!-- 编辑市民画像   -->
-    <tags-edit ref="TagsEditRef" @updateList="queryList" />
-  </div>
+	<div class="quality-lexicon-container layout-pd">
+		<el-card shadow="never">
+			<el-form :model="state.queryParams" ref="ruleFormRef" :inline="true" @submit.native.prevent>
+				<el-form-item label="标题" prop="Title">
+					<el-input v-model="state.queryParams.Title" placeholder="请输入重复性事件标题" clearable @keyup.enter="queryList" style="width: 250px" />
+				</el-form-item>
+				<el-form-item label="关键词" prop="KeyWords">
+					<el-input v-model="state.queryParams.KeyWords" placeholder="请输入关键词" clearable @keyup.enter="queryList" style="width: 250px" />
+				</el-form-item>
+				<el-form-item>
+					<el-button type="primary" @click="queryList" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
+					<el-button @click="resetQuery(ruleFormRef)" v-waves class="default-button"> <SvgIcon name="ele-Refresh" class="mr5" />重置 </el-button>
+				</el-form-item>
+			</el-form>
+		</el-card>
+		<el-card shadow="never">
+			<el-table :data="state.tableData" v-loading="state.loading" row-key="id" ref="multipleTableRef" @selection-change="handleSelectionChange">
+				<el-table-column type="selection" width="55" />
+				<el-table-column prop="title" label="重复事件标题" show-overflow-tooltip width="400"></el-table-column>
+				<el-table-column prop="keyWords" label="关键词" show-overflow-tooltip width="300"></el-table-column>
+				<el-table-column prop="creatorName" label="创建人" show-overflow-tooltip></el-table-column>
+				<el-table-column label="创建时间" show-overflow-tooltip width="170">
+					<template #default="{ row }">
+						<span>{{ formatDate(row.creationTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+					</template>
+				</el-table-column>
+				<el-table-column prop="lastModificationName" label="更新人" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="lastModificationTime" label="更新时间" show-overflow-tooltip width="170">
+					<template #default="{ row }">
+						<span>{{ formatDate(row.lastModificationTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+					</template>
+				</el-table-column>
+				<el-table-column label="操作" width="140" fixed="right" align="center">
+					<template #default="{ row }">
+						<el-button link type="primary" @click="onTagsRecord(row)" v-auth="'business:repeatEvent:detail'" title="查看重复性详情">
+							事件详情
+						</el-button>
+						<el-button link type="primary" @click="onTagsEdit(row)" v-auth="'business:repeatEvent:edit'" title="编辑重复性事件"> 编辑 </el-button>
+					</template>
+				</el-table-column>
+				<template #empty>
+					<Empty />
+				</template>
+			</el-table>
+			<!-- 分页 -->
+			<pagination
+				:total="state.total"
+				v-model:page="state.queryParams.PageIndex"
+				v-model:limit="state.queryParams.PageSize"
+				@pagination="queryList"
+			/>
+		</el-card>
+		<!-- 标签记录   -->
+		<tags-record ref="tagsRecordRef" />
+		<!-- 编辑市民画像   -->
+		<tags-edit ref="TagsEditRef" @updateList="queryList" />
+	</div>
 </template>
 
 <script lang="ts" setup name="businessRepeatEvent">
 import { reactive, ref, onMounted, defineAsyncComponent } from 'vue';
 import { ElMessage, ElMessageBox, FormInstance } from 'element-plus';
 import { formatDate } from '/@/utils/formatTime';
-import {auth} from "/@/utils/authFunction";
-import {citizenList,citizenDelete} from "/@/api/business/citizen"
+import { auth } from '/@/utils/authFunction';
+import { citizenDelete } from '/@/api/business/citizen';
+import { repeatEventList } from '/@/api/business/repeatEvent';
 
 // 引入组件
 const TagsRecord = defineAsyncComponent(() => import('/@/views/business/citizen/components/Tags-record.vue')); // 标签记录
@@ -70,85 +72,83 @@ const TagsEdit = defineAsyncComponent(() => import('/@/views/business/citizen/co
 
 // 定义变量内容
 const state = reactive<any>({
-  loading: false, // 加载状态
-  queryParams: {
-    // 查询参数
-    PageIndex: 1,
-    PageSize: 10,
-    Classify: null,
-    Type: null,
-    Name:''
-  },
-  total: 0, // 总条数
-  tableData: [], // 表格数据
+	loading: false, // 加载状态
+	queryParams: {
+		// 查询参数
+		PageIndex: 1,
+		PageSize: 10,
+		Title: null,
+		Keyword: null,
+	},
+	total: 0, // 总条数
+	tableData: [], // 表格数据
 });
 const ruleFormRef = ref<RefType>(null); // 表单ref
 // 获取参数列表
 const queryList = () => {
-  state.loading = true;
-  if (!auth('business:repeatEvent:query')) ElMessage.error('抱歉,您没有权限获取市民画像列表!');
-  else {
-    citizenList(state.queryParams)
-        .then((res) => {
-          state.loading = false;
-          state.tableData = res.result.items ?? [];
-          state.total = res.result.total ?? 0;
-        })
-        .finally(() => {
-          state.loading = false;
-        });
-  }
+	state.loading = true;
+	if (!auth('business:repeatEvent:query')) ElMessage.error('抱歉,您没有权限获取重复性事件列表!');
+	else {
+		repeatEventList(state.queryParams)
+			.then((res: any) => {
+				state.loading = false;
+				state.tableData = res.result.items ?? [];
+				state.total = res.result.total ?? 0;
+			})
+			.finally(() => {
+				state.loading = false;
+			});
+	}
 };
 // 重置表单
 const resetQuery = (formEl: FormInstance | undefined) => {
-  if (!formEl) return;
-  formEl.resetFields();
-  queryList();
+	if (!formEl) return;
+	formEl.resetFields();
+	queryList();
 };
 // 标签记录
 const tagsRecordRef = ref<RefType>();
-const onTagsRecord = (row:any) => {
-  tagsRecordRef.value.openDialog(row);
+const onTagsRecord = (row: any) => {
+	tagsRecordRef.value.openDialog(row);
 };
 // 编辑标签
 const TagsEditRef = ref<RefType>();
 const onTagsEdit = (row: any) => {
-  TagsEditRef.value.openDialog(row);
+	TagsEditRef.value.openDialog(row);
 };
 // 表格多选
 const multipleTableRef = ref<RefType>();
 const multipleSelection = ref<any>([]);
 const handleSelectionChange = (val: any[]) => {
-  multipleSelection.value = val;
+	multipleSelection.value = val;
 };
 // 删除参数
 const onLexiconDelete = () => {
-  const names = multipleSelection.value.map((item: any) => item.name).join('、');
-  const ids = multipleSelection.value.map((item: any) => item.id);
-  ElMessageBox.confirm(`您确定要删除:【${names}】市民画像,是否继续?`, '提示', {
-    confirmButtonText: '确认',
-    cancelButtonText: '取消',
-    type: 'warning',
-    draggable: true,
-    cancelButtonClass: 'default-button',
-    autofocus: false,
-  })
-      .then(() => {
-        citizenDelete({ids}).then(() => {
-          ElMessage.success('操作成功');
-          queryList();
-        });
-      })
-      .catch(() => {});
+	const names = multipleSelection.value.map((item: any) => item.name).join('、');
+	const ids = multipleSelection.value.map((item: any) => item.id);
+	ElMessageBox.confirm(`您确定要删除:【${names}】市民画像,是否继续?`, '提示', {
+		confirmButtonText: '确认',
+		cancelButtonText: '取消',
+		type: 'warning',
+		draggable: true,
+		cancelButtonClass: 'default-button',
+		autofocus: false,
+	})
+		.then(() => {
+			citizenDelete({ ids }).then(() => {
+				ElMessage.success('操作成功');
+				queryList();
+			});
+		})
+		.catch(() => {});
 };
 // 页面加载时
 onMounted(() => {
-  queryList();
+	queryList();
 });
 </script>
 
 <style lang="scss" scoped>
 .quality-lexicon-container {
-
 }
 </style>

+ 3 - 3
src/views/system/organize/index.vue

@@ -74,13 +74,13 @@ const state = reactive({
 			key: 'name',
 			dataKey: 'name',
 			title: '部门名称',
-			width: 400,
+			width: 300,
 		},
 		{
 			key: 'shortName',
 			dataKey: 'shortName',
 			title: '部门简称',
-			width: 400,
+			width: 300,
 		},
 		{
 			key: 'parentName',
@@ -98,7 +98,7 @@ const state = reactive({
 			key: 'id',
 			dataKey: 'id',
 			title: '部门编码',
-			width: 100,
+			width: 200,
 		},
     {
       key: 'areaName',