Forráskód Böngészése

feat:新增二次回访申请,二次回访审批,特提申请,特提申请审批页面;

zhangchong 1 éve
szülő
commit
5ee797c42f

+ 52 - 15
src/components/ProcessAudit/index.vue

@@ -363,6 +363,9 @@
 							<el-select v-model="state.ruleForm.nextStepCode" placeholder="请选择下一环节" class="w100" @change="selectNextStep">
 								<el-option v-for="item in state.nextStepOptions" :key="item.key" :label="item.value" :value="item.key" />
 							</el-select>
+							<p class="flex-center-align color-danger" v-if="showFastSendOrder">
+								当前推荐派单处理人:{{ fastStepName }} <el-button type="primary" link class="ml4" @click="fastSendOrder">快捷派单</el-button>
+							</p>
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" v-if="!returnArr.includes(state.processType)">
@@ -502,21 +505,44 @@
 </template>
 
 <script setup lang="ts" name="processApproval">
-import {computed, defineAsyncComponent, nextTick, reactive, ref, watchEffect} from 'vue';
-import {ElMessage, ElMessageBox, FormInstance} from 'element-plus';
+import { computed, defineAsyncComponent, nextTick, reactive, ref, watchEffect } from 'vue';
+import { ElMessage, ElMessageBox, FormInstance } from 'element-plus';
 import other from '/@/utils/other';
-import {useUserInfo} from '/@/stores/userInfo';
-import {storeToRefs} from 'pinia';
-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, delayBaseData, delayCalcEndTime, workflowDelayParams} 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';
-import {getCanUseOrg} from '/@/api/system/user';
-import {KnowledgeAdd, KnowledgeAddStartFlowParams, KnowledgeDel, KnowledgeDeleteStartFlowParams, KnowledgeUpdate, KnowledgeUpdateStartFlowParams,} from '/@/api/knowledge';
+import { useUserInfo } from '/@/stores/userInfo';
+import { storeToRefs } from 'pinia';
+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, delayBaseData, delayCalcEndTime, workflowDelayParams } 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';
+import { getCanUseOrg } from '/@/api/system/user';
+import {
+	KnowledgeAdd,
+	KnowledgeAddStartFlowParams,
+	KnowledgeDel,
+	KnowledgeDeleteStartFlowParams,
+	KnowledgeUpdate,
+	KnowledgeUpdateStartFlowParams,
+} from '/@/api/knowledge';
 import dayjs from 'dayjs';
 
 // 引入组件
@@ -783,6 +809,8 @@ watchEffect(() => {
 });
 // 流程选择下一环节
 const inputRealHandler = ref(false); // 是否是汇总节点(汇总需要填入其他参数)
+const showFastSendOrder = ref(false); // 是否显示快捷派单
+const fastStepName = ref(''); // 推荐派单处理者
 const selectNextStep = (val: any) => {
 	ruleFormRef.value?.resetFields('nextHandlers');
 	ruleFormRef.value?.resetFields('nextMainHandler');
@@ -792,8 +820,16 @@ const selectNextStep = (val: any) => {
 	state.ruleForm.backToCountersignEnd = next.backToCountersignEnd ?? false; // 是否回到会签结束节点
 	state.handlerOptions = items ?? [];
 	inputRealHandler.value = next.inputRealHandler; // 是否需要填入其他参数
-};
 
+	if (items && items.length) {
+		showFastSendOrder.value = true;
+		fastStepName.value = items[0].value;
+	}
+};
+// 快速派单
+const fastSendOrder = () => {
+	state.ruleForm.nextHandlers = [state.handlerOptions[0]];
+};
 // 选择处理人
 const selectHandlers = () => {
 	ruleFormRef.value?.resetFields('nextMainHandler');
@@ -822,6 +858,7 @@ const restForm = (formEl: FormInstance | undefined) => {
 	if (!formEl) return;
 	state.ruleForm.opinion = '';
 	state.delayForm.endTime = '';
+  showFastSendOrder.value = false;
 	formEl.resetFields();
 	formEl.clearValidate();
 };

+ 1 - 1
src/layout/navBars/breadcrumb/user.vue

@@ -41,7 +41,7 @@
 			<i class="iconfont" :class="!isScreenfull ? 'icon-quanping1' : 'icon-tuichuquanping'"></i>
 		</div>-->
 		<div class="layout-navbars-breadcrumb-user-link" :title="userInfos.name">
-			<el-popover ref="popover" placement="bottom" :width="250" trigger="click" popper-class="user-info-box" v-model:visible="userVisible">
+			<el-popover ref="popover" placement="bottom" :width="250" trigger="hover" popper-class="user-info-box" v-model:visible="userVisible">
 				<template #reference>
 					<div class="layout-navbars-breadcrumb-user-link-photoBox" @userVisible="userVisible = !userVisible">
 						<el-avatar :src="userInfos.photo" :size="24" class="layout-navbars-breadcrumb-user-link-photo">

+ 3 - 3
src/views/business/order/accept/History.vue

@@ -28,10 +28,10 @@
 		<el-table-column prop="no" label="工单编码" show-overflow-tooltip> </el-table-column>
 		<el-table-column prop="currentStepName" label="当前环节" show-overflow-tooltip></el-table-column>
 		<el-table-column prop="statusText" label="状态" width="70" fixed="right" align="center"></el-table-column>
-		<el-table-column prop="statusText" label="操作" width="170" fixed="right" align="center" v-if="!props.readonly">
+		<el-table-column prop="statusText" label="操作" width="100" fixed="right" align="center" v-if="!props.readonly">
 			<template #default="{ row }">
-				<el-button @click="onSupply(row)" link type="primary" v-auth="'business:order:supply'"> 补充 </el-button>
-				<el-button @click="onRevoke(row)" link type="primary" v-auth="'business:order:revoke'"> 撤销 </el-button>
+<!--				<el-button @click="onSupply(row)" link type="primary" v-auth="'business:order:supply'"> 补充 </el-button>
+				<el-button @click="onRevoke(row)" link type="primary" v-auth="'business:order:revoke'"> 撤销 </el-button>-->
 				<el-button @click="onSupervise(row)" link type="primary"> 督办 </el-button>
 			</template>
 		</el-table-column>

+ 17 - 17
src/views/business/order/accept/index.vue

@@ -299,6 +299,23 @@
 										</el-select>
 									</el-form-item>
 								</el-col>
+                <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
+                  <el-form-item label="推送分类" prop="pushTypeObj" :rules="[{ required: false, message: '请选择推送分类', trigger: 'change' }]">
+                    <el-select
+                        v-model="state.ruleForm.pushTypeObj"
+                        placeholder="请选择推送分类"
+                        class="w100"
+                        clearable
+                        value-key="dicDataValue"
+                        @change="(val:any) => {
+											state.ruleForm.pushType = val.dicDataName;
+											state.ruleForm.pushTypeCode = val.dicDataValue
+										}"
+                    >
+                      <el-option v-for="item in state.pushTypeOptions" :key="item.dicDataValue" :label="item.dicDataName" :value="item" />
+                    </el-select>
+                  </el-form-item>
+                </el-col>
 								<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 									<el-form-item label="热点分类" prop="hotspotId" :rules="[{ required: true, message: '请选择热点分类', trigger: 'change' }]">
 										<el-tree-select
@@ -399,23 +416,6 @@
 										</el-col>
 									</el-row>
 								</el-col>
-								<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-									<el-form-item label="推送分类" prop="pushTypeObj" :rules="[{ required: false, message: '请选择推送分类', trigger: 'change' }]">
-										<el-select
-											v-model="state.ruleForm.pushTypeObj"
-											placeholder="请选择推送分类"
-											class="w100"
-											clearable
-											value-key="dicDataValue"
-											@change="(val:any) => {
-											state.ruleForm.pushType = val.dicDataName;
-											state.ruleForm.pushTypeCode = val.dicDataValue
-										}"
-										>
-											<el-option v-for="item in state.pushTypeOptions" :key="item.dicDataValue" :label="item.dicDataName" :value="item" />
-										</el-select>
-									</el-form-item>
-								</el-col>
 								<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 									<el-form-item label="工单标题" prop="title" :rules="[{ required: true, message: '请填写工单标题', trigger: 'blur' }]">
 										<el-input v-model="state.ruleForm.title" placeholder="请填写工单标题" clearable> </el-input>

+ 18 - 12
src/views/business/order/components/Order-detail.vue

@@ -461,7 +461,16 @@
 
 		<template #footer>
 			<span class="dialog-footer">
-				<el-button type="primary" @click="onRecord" :loading="state.loading" v-auth="'system:workflow:record'">流转记录</el-button>
+				<el-button type="primary" @click="onRecord" :loading="state.loading" v-auth="'system:workflow:record'">流程明细</el-button>
+        <el-button
+            type="primary"
+            @click="onSubmit('工单撤回')"
+            :loading="state.loading"
+            v-if="[0].includes(state.ruleForm.workflow?.status)"
+        >撤 回(特提)</el-button>
+        <el-button type="primary" @click="onSupervise" :loading="state.loading" v-auth="'business:order:urge:apply'">督 办</el-button>
+        <el-button type="primary" @click="onUrge" :loading="state.loading" v-auth="'business:order:supervise:apply'"> 催 办</el-button>
+        <el-button type="primary" @click="onSubmit('延期申请', '延期附件')" v-auth="'business:order:delay'" :loading="state.loading">延 期</el-button>
 				<!-- 工单未归档和可以办理展示办理按钮 -->
 				<el-button
 					type="primary"
@@ -471,32 +480,29 @@
 					v-auth="'business:order:handle'"
 					>办 理</el-button
 				>
-				<el-button type="primary" @click="onSubmit('延期申请', '延期附件')" v-auth="'business:order:delay'" :loading="state.loading">延 期</el-button>
 				<!-- 流程结束之后不展示补充按钮 -->
-				<el-button type="primary" @click="onSupply" :loading="state.loading" v-if="[0].includes(state.workflow.status)" v-auth="'workflow:supply'"
+<!--				<el-button type="primary" @click="onSupply" :loading="state.loading" v-if="[0].includes(state.workflow.status)" v-auth="'workflow:supply'"
 					>补 充</el-button
-				>
-				<el-button type="primary" @click="onUrge" :loading="state.loading" v-auth="'business:order:supervise:apply'"> 催 办</el-button>
-				<el-button type="primary" @click="onSupervise" :loading="state.loading" v-auth="'business:order:urge:apply'">督 办</el-button>
-				<el-button type="primary" @click="onRevoke" :loading="state.loading" v-auth="'business:order:revoke'">撤 销</el-button>
+				>-->
+<!--				<el-button type="primary" @click="onRevoke" :loading="state.loading" v-auth="'business:order:revoke'">撤 销</el-button>-->
 				<!-- 工单未归档都可以撤回 -->
-				<el-button
+<!--				<el-button
 					type="primary"
 					@click="onSubmit('工单撤回')"
 					:loading="state.loading"
 					v-if="[0].includes(state.ruleForm.workflow?.status)"
 					v-auth="'business:order:recall'"
-					>撤 回</el-button
-				>
+					>撤 回(特提)</el-button
+				>-->
 				<!-- 工单未归档和可以办理展示退回按钮 -->
-				<el-button
+<!--				<el-button
 					type="primary"
 					@click="onSubmit('工单退回')"
 					:loading="state.loading"
 					v-if="![60].includes(state.ruleForm.workflow?.status) && state.workflow.canHandle"
 					v-auth="'business:order:return'"
 					>退 回</el-button
-				>
+				>-->
 			</span>
 		</template>
 	</el-dialog>

+ 1 - 1
src/views/business/order/components/Order-expand-form.vue

@@ -547,7 +547,7 @@
 				<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" v-if="state.acceptTypeCode === '35'">
 					<el-form-item label="诉求" prop="complainTypes" :rules="[{ required: false, message: '请选择诉求', trigger: 'change' }]">
 						<el-checkbox-group v-model="state.expandForm.complainTypes">
-							<el-checkbox v-for="item in state.complainTypeOptions" :key="item.id" :label="item">{{ item.name }}</el-checkbox>
+							<el-checkbox v-for="item in state.complainTypeOptions" :key="item.key" :label="item">{{ item.value }}</el-checkbox>
 						</el-checkbox-group>
 					</el-form-item>
 				</el-col>

+ 3 - 33
src/views/business/publish/index.vue

@@ -29,12 +29,12 @@
 				<el-table-column prop="order.no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>
 				<el-table-column width="100" label="省/市工单" prop="isProvince">
 					<template #default="{ row }">
-						<span>{{ row.order.isProvince ? '省工单' : '市工单' }}</span>
+						<span>{{ row.order?.isProvince ? '省工单' : '市工单' }}</span>
 					</template>
 				</el-table-column>
 				<el-table-column label="工单标题" show-overflow-tooltip width="400">
 					<template #default="{ row }">
-						<span class="color-primary">{{ row.order.title }}</span>
+						<span class="color-primary">{{ row.order?.title }}</span>
 					</template>
 				</el-table-column>
         <el-table-column prop="order.sourceChannel" label="来源方式" show-overflow-tooltip></el-table-column>
@@ -64,17 +64,14 @@
 						<span>{{ formatDate(row.publishTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
 					</template>
 				</el-table-column>
-
 				<el-table-column prop="publishState" label="是否公开" show-overflow-tooltip width="100">
 					<template #default="{ row }">
 						<span>{{ row.publishState ? '公开' : '不公开' }}</span>
 					</template>
 				</el-table-column>
-				<el-table-column label="操作" width="140" fixed="right" align="center">
+				<el-table-column label="操作" width="100" fixed="right" align="center">
 					<template #default="{ row }">
 						<el-button link type="primary" @click="editPublish(row)" title="编辑发布" v-auth="'business:publish:edit'"> 编辑发布 </el-button>
-						<el-button link type="primary" @click="OnOrderRedo(row)" title="重办工单" v-auth="'business:publish:reDo'"> 重办 </el-button>
-<!--						<el-button link type="primary" @click="publishDetail(row)" title="发布详情" v-auth="'business:publish:detail'"> 发布详情 </el-button>-->
 					</template>
 				</el-table-column>
 				<template #empty>
@@ -93,8 +90,6 @@
 		<order-publish ref="orderPublishRef" @updateList="queryList" />
 		<!-- 工单发布修改 -->
 		<order-publish-edit ref="orderPublishEditRef" @updateList="queryList" />
-		<!--  流程审批  -->
-		<process-audit ref="processAuditRef" @orderProcessSuccess="queryList" />
 	</div>
 </template>
 <script setup lang="ts" name="orderPublish">
@@ -107,7 +102,6 @@ import {publishedList} from '/@/api/business/publish';
 // 引入组件
 const OrderPublish = defineAsyncComponent(() => import('/@/views/business/publish/component/Order-publish.vue')); // 工单发布和查看详情
 const OrderPublishEdit = defineAsyncComponent(() => import('/@/views/business/publish/component/Order-publish-edit.vue')); // 工单发布修改
-const ProcessAudit = defineAsyncComponent(() => import('/@/components/ProcessAudit/index.vue')); // 流程审批
 // 定义变量内容
 const ruleFormRef = ref<RefType>(); // 表单ref
 const state = reactive(<any>{
@@ -153,35 +147,11 @@ const multipleSelection = ref<any>([]);
 const handleSelectionChange = (val: any[]) => {
 	multipleSelection.value = val;
 };
-// 批量发布
-const publishMultiple = () => {
-	console.log('批量发布');
-};
 // 修改发布
 const orderPublishEditRef = ref<RefType>(); // 工单发布修改ref
 const editPublish = (row: any) => {
 	orderPublishEditRef.value.openDialog(row);
 };
-// 工单重办
-const processAuditRef = ref<RefType>(); // 流程审批ref
-const OnOrderRedo = (row: any) => {
-	const params = {
-		id: row.order.workflowId,
-		processType: '工单重办',
-		orderDetail: row.order,
-		extra: {
-			dialogTitle: '工单重办',
-			inputPlaceholder: '重办意见',
-			annexName: '办理附件',
-		},
-	};
-	processAuditRef.value.openDialog(params);
-};
-// 发布详情
-const orderPublishRef = ref<RefType>(); // 工单发布ref
-const publishDetail = (row: any) => {
-	orderPublishRef.value.openDialog(row, true);
-};
 onMounted(() => {
 	queryList();
 });

+ 175 - 0
src/views/business/secondVisit/components/Visit.vue

@@ -0,0 +1,175 @@
+<template>
+  <el-dialog
+      v-model="state.dialogVisible"
+      draggable
+      title="二次回访申请"
+      @mouseup="mouseup"
+      :style="'transform: ' + state.transform + ';'"
+      ref="dialogRef"
+      width="50%"
+      append-to-body
+      destroy-on-close
+      @close="close"
+  >
+    <div class="collapse-container pb1">
+      <el-form label-width="110px" ref="ruleFormRef" :model="state.ruleForm">
+        <el-row :gutter="35">
+          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+            <el-form-item label="工单编码"> {{ state.orderDetail.no }} </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+            <el-form-item label="工单标题"> {{ state.orderDetail.title }} </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+            <el-form-item label="督办人"> {{ userInfos.name }} </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+            <el-form-item label="督办部门"> {{ userInfos.orgName }} </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+            <el-form-item label="督办时间"> {{ formatDate(Date(), 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+            <el-form-item label="督办回复时限" prop="replyLimitTime" :rules="[{ required: true, message: '请选择督办回复时限', trigger: 'change' }]">
+              <el-date-picker
+                  v-model="state.ruleForm.replyLimitTime"
+                  type="datetime"
+                  placeholder="请选择督办回复时限"
+                  value-format="YYYY-MM-DD[T]HH:mm:ss"
+                  class="w100"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
+            <el-form-item label="被督办部门" prop="org" :rules="[{ required: true, message: '请选择被督办部门', trigger: 'change' }]">
+              <el-select
+                  v-model="state.ruleForm.org"
+                  placeholder="请选择被督办部门"
+                  class="w100"
+                  value-key="key"
+                  multiple
+                  collapse-tags
+                  collapse-tags-tooltip
+              >
+                <el-option v-for="item in state.orgData" :value="item" :key="item.key" :label="item.value" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+            <el-form-item label="发送督办短信" prop="acceptSms" :rules="[{ required: false, message: '请选择发送督办短信', trigger: 'change' }]">
+              <el-checkbox v-model="state.ruleForm.acceptSms" label="发送督办短信" />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+            <el-form-item label="督办内容" prop="applyContent" :rules="[{ required: true, message: '请填写督办内容', trigger: 'blur' }]">
+              <common-advice
+                  @chooseAdvice="chooseAdvice"
+                  v-model="state.ruleForm.applyContent"
+                  placeholder="请填写督办内容"
+                  :loading="state.loading"
+                  :commonEnum="commonEnum.Supervise"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+            <el-form-item label="附件" prop="handleResult" :rules="[{ required: false, message: '请选择附件', trigger: 'change' }]">
+              <annex-list name="督办附件" ref="annexListRef" businessId="" classify="督办申请" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+    </div>
+    <template #footer>
+			<span class="dialog-footer">
+				<el-button @click="closeDialog" class="default-button">取 消</el-button>
+				<el-button type="primary" @click="onSubmit(ruleFormRef)" :loading="state.loading" v-auth="'business:order:supervise:apply'">提交</el-button>
+			</span>
+    </template>
+  </el-dialog>
+</template>
+<script setup lang="ts" name="secondVisitDialog">
+import {defineAsyncComponent, reactive, ref} from 'vue';
+import {ElMessage, FormInstance} from 'element-plus';
+import {storeToRefs} from 'pinia';
+import {useUserInfo} from '/@/stores/userInfo';
+import {formatDate} from '/@/utils/formatTime';
+import {commonEnum} from '/@/utils/constants';
+import {superviseApply, urgeOrgList} from '/@/api/business/supervise';
+
+// 引入组件
+const AnnexList = defineAsyncComponent(() => import('/@/components/AnnexList/index.vue'));
+const CommonAdvice = defineAsyncComponent(() => import('/@/components/CommonAdvice/index.vue')); // 常用意见
+
+// 定义子组件向父组件传值/事件
+const emit = defineEmits(['updateList']);
+// 定义变量内容
+const state = reactive<any>({
+  collapseArr: ['1', '2'], // 折叠面板
+  dialogVisible: false, // 是否显示弹窗
+  loading: false, // 是否显示加载
+  ruleForm: {
+    acceptSms: false, // 发送督办短信
+    applyContent: '', // 督办内容
+    org:[]
+  },
+  orderDetail: {}, // 工单详情
+  transform: 'translate(0px, 0px)', // 滚动条位置
+  orgData: [], // 被督办部门
+});
+const ruleFormRef = ref<RefType>();
+const storesUserInfo = useUserInfo();
+const { userInfos } = storeToRefs(storesUserInfo); // 用户信息
+// 打开弹窗
+const openDialog = (val: any) => {
+  state.orderDetail = val;
+
+  state.dialogVisible = true;
+};
+// 关闭弹窗
+const closeDialog = () => {
+  state.dialogVisible = false;
+};
+const close = ()=>{
+  ruleFormRef.value?.clearValidate();
+  ruleFormRef.value?.resetFields();
+}
+// 选中常用意见
+const chooseAdvice = (item: any) => {
+  state.ruleForm.content += item.content;
+};
+// 设置抽屉
+const dialogRef = ref<RefType>();
+const mouseup = () => {
+  state.transform = dialogRef.value.dialogContentRef.$el.style.transform;
+};
+// 提交
+const annexListRef = ref<RefType>(); // 附件列表
+const onSubmit = (formEl: FormInstance | undefined) => {
+  if (!formEl) return;
+  formEl.validate((valid: boolean) => {
+    if (!valid) return;
+    state.loading = true;
+    let request = {
+      ...state.ruleForm,
+      orgId: state.ruleForm.org.id,
+      orgName: state.ruleForm.org.name,
+      orderId: state.orderDetail.id,
+      files: annexListRef.value?.fileList,
+    };
+    superviseApply(request)
+        .then((res: any) => {
+          state.loading = false;
+          closeDialog();
+          emit('updateList');
+          ElMessage.success('操作成功');
+        })
+        .catch(() => {
+          state.loading = false;
+        });
+  });
+};
+defineExpose({
+  openDialog,
+  closeDialog,
+});
+</script>

+ 49 - 36
src/views/business/secondVisit/index.vue

@@ -28,54 +28,75 @@
       <!-- 表格 -->
       <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="no" label="会签编码" show-overflow-tooltip></el-table-column>
         <el-table-column prop="order.no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>
-        <el-table-column prop="sourceChannel" label="来源方式" show-overflow-tooltip></el-table-column>
         <el-table-column width="100" label="省/市工单" prop="isProvince" >
           <template #default="{ row }">
             <span>{{ row.order?.isProvince ? '省工单' : '市工单' }}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="expiredTime" label="节点期满时间" show-overflow-tooltip width="170">
+        <el-table-column label="工单标题" show-overflow-tooltip width="400">
           <template #default="{ row }">
-            <span>{{ formatDate(row.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+            <span class="color-primary">{{ row.order?.title }}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="expiredTime" label="工单期满时间" show-overflow-tooltip width="170">
+        <el-table-column prop="order.sourceChannel" label="来源方式" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="sourceChannel" label="回访状态" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="order.acceptType" label="受理类型" show-overflow-tooltip width="150"></el-table-column>
+        <el-table-column prop="sourceChannel" label="热点分类" show-overflow-tooltip></el-table-column>
+        <el-table-column label="受理人" show-overflow-tooltip width="170">
           <template #default="{ row }">
-            <span>{{ formatDate(row.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+						<span
+            >{{ row.order?.acceptorName }} <span v-if="row.order?.acceptorStaffNo">[{{ row.order?.acceptorStaffNo }}]</span>
+						</span>
           </template>
         </el-table-column>
-        <el-table-column prop="startTime" label="受理时间" show-overflow-tooltip width="170">
+        <el-table-column prop="orgLevelOneName" label="一级部门" show-overflow-tooltip width="170"></el-table-column>
+        <el-table-column prop="actualHandleOrgName" label="接办部门" show-overflow-tooltip width="170"></el-table-column>
+        <el-table-column 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="acceptType" 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="工单编码" prop="no" show-overflow-tooltip width="150">
+        <el-table-column label="办结时间" show-overflow-tooltip width="170">
           <template #default="{ row }">
-            <span>{{ row.no }}</span>
+            <span>{{ formatDate(row.filedTime, '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="actualHandleTime" label="接办时间" show-overflow-tooltip width="170">
+        <el-table-column prop="publishTime" label="发布时间" show-overflow-tooltip width="170">
+          <template #default="{ row }">
+            <span>{{ formatDate(row.publishTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="visitTime" label="回访时间" show-overflow-tooltip width="170">
+          <template #default="{ row }">
+            <span>{{ formatDate(row.visitTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="被回访部门" show-overflow-tooltip width="150">
           <template #default="{ row }">
-            <span>{{ formatDate(row.actualHandleTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+            <span v-if="row.visitTarget===20">{{row.visitOrgName}}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="hotspotName" label="热点分类" show-overflow-tooltip width="200"></el-table-column>
-        <el-table-column prop="acceptTypeText" label="会签发起部门" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="acceptTypeText" label="会签发起人" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="expiredTime" label="会签发起时间" show-overflow-tooltip width="170">
+        <el-table-column label="部门办件结果" show-overflow-tooltip width="150">
           <template #default="{ row }">
-            <span>{{ formatDate(row.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+            <span v-if="row.visitTarget===20">{{row.orgProcessingResults?.value}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="部门办件态度" show-overflow-tooltip width="150">
+          <template #default="{ row }">
+            <span v-if="row.visitTarget===20">{{row.orgHandledAttitude?.value}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="不满意原因" show-overflow-tooltip width="150">
+          <template #default="{ row }">
+            <span v-if="row.visitTarget===20">
+              {{row.orgNoSatisfiedReason?.map(item => item.value).join(',')}}
+            </span>
           </template>
         </el-table-column>
         <el-table-column label="操作" width="160" fixed="right" align="center">
           <template #default="{ row }">
-            <el-button link type="primary" @click="onCountersignDetail(row)" title="查看会签明细" v-auth="'query:countersign:detail'"> 会签明细 </el-button>
-            <el-button link type="primary" @click="onOrderDetail(row)" title="查看工单详情"> 工单详情 </el-button>
+            <el-button link type="primary" @click="onSecondVisit(row)" title="二次回访" > 二次回访 </el-button>
           </template>
         </el-table-column>
         <template #empty>
@@ -90,10 +111,8 @@
           @pagination="queryList"
       />
     </el-card>
-    <!-- 工单详情 -->
-    <order-detail ref="orderDetailRef" @updateList="queryList" />
-    <!-- 会签明细 -->
-    <countersign-detail ref="countersignDetailRef" @updateList="queryList" />
+    <!-- 二次回访 -->
+    <second-visit ref="secondVisitRef" />
   </div>
 </template>
 <script setup lang="ts" name="secondVisit">
@@ -104,8 +123,7 @@ import {throttle,} from '/@/utils/tools';
 import {formatDate} from '/@/utils/formatTime';
 import {useRouter} from "vue-router";
 // 引入组件
-const OrderDetail = defineAsyncComponent(() => import('/@/views/business/order/components/Order-detail.vue'));
-const CountersignDetail = defineAsyncComponent(() => import('/@/views/query/countersign/detail/index.vue'));
+const SecondVisit = defineAsyncComponent(() => import('/@/views/business/secondVisit/components/Visit.vue'));
 // 定义变量内容
 const ruleFormRef = ref<RefType>(); // 表单ref
 const router = useRouter(); // 路由
@@ -143,15 +161,10 @@ const handleSelectionChange = (val: any[]) => {
 const onExport = () => {
   console.log('导出');
 };
-// 查看工单详情
-const orderDetailRef = ref<RefType>(); // 工单详情ref
-const onOrderDetail = (row: any) => {
-  orderDetailRef.value.openDialog(row)
-};
-// 会签明细
-const countersignDetailRef = ref<RefType>(); // 会签明细ref
-const onCountersignDetail = (row:any)=>{
-  countersignDetailRef.value.openDialog(row)
+// 二次回访
+const secondVisitRef = ref<RefType>(); // 二次回访
+const onSecondVisit = (row:any)=>{
+  secondVisitRef.value.openDialog(row)
 }
 onMounted( () => {
   queryList();

+ 141 - 132
src/views/business/secondVisitAudit/index.vue

@@ -1,165 +1,174 @@
 <template>
-  <div class="business-countersign-container layout-pd">
-    <!-- 搜索  -->
-    <el-card shadow="never">
-      <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">
-            <el-form-item label="关键词" prop="Keyword">
-              <el-input v-model="state.queryParams.Keyword" placeholder="工单编码/标题" clearable @keyup.enter="queryList" />
-            </el-form-item>
-          </el-col>
-          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
-            <el-form-item label=" ">
-              <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" :loading="state.loading"> <SvgIcon name="ele-Refresh" class="mr5" />重置 </el-button>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </el-card>
-    <el-card shadow="never">
-      <!-- 功能按钮 -->
-      <div class="mb20">
-        <el-button type="primary" @click="onExport" v-auth="'business:countersign:export'" :disabled="!multipleSelection.length">
-          <SvgIcon name="iconfont icon-daochu" class="mr5" />导出
-        </el-button>
-      </div>
-      <!-- 表格 -->
-      <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="no" label="会签编码" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="order.no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>
-        <el-table-column prop="sourceChannel" label="来源方式" show-overflow-tooltip></el-table-column>
-        <el-table-column width="100" label="省/市工单" prop="isProvince" >
+	<div class="business-countersign-container layout-pd">
+		<!-- 搜索  -->
+		<el-card shadow="never">
+			<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">
+						<el-form-item label="关键词" prop="Keyword">
+							<el-input v-model="state.queryParams.Keyword" placeholder="工单编码/标题" clearable @keyup.enter="queryList" />
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
+						<el-form-item label=" ">
+							<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" :loading="state.loading">
+								<SvgIcon name="ele-Refresh" class="mr5" />重置
+							</el-button>
+						</el-form-item>
+					</el-col>
+				</el-row>
+			</el-form>
+		</el-card>
+		<el-card shadow="never">
+			<!-- 功能按钮 -->
+			<div class="mb20">
+				<el-button type="primary" @click="onExport" v-auth="'business:countersign:export'" :disabled="!multipleSelection.length">
+					<SvgIcon name="iconfont icon-daochu" class="mr5" />导出
+				</el-button>
+			</div>
+			<!-- 表格 -->
+			<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="order.no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>
+				<el-table-column width="100" label="省/市工单" prop="isProvince">
+					<template #default="{ row }">
+						<span>{{ row.order?.isProvince ? '省工单' : '市工单' }}</span>
+					</template>
+				</el-table-column>
+        <el-table-column label="工单标题" show-overflow-tooltip width="400">
           <template #default="{ row }">
-            <span>{{ row.order?.isProvince ? '省工单' : '市工单' }}</span>
+            <span class="color-primary">{{ row.order?.title }}</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="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="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="acceptType" 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="工单编码" prop="no" show-overflow-tooltip width="150">
-          <template #default="{ row }">
-            <span>{{ row.no }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column prop="actualHandleOrgName" label="接办部门" show-overflow-tooltip width="170"></el-table-column>
-        <el-table-column prop="actualHandleTime" label="接办时间" show-overflow-tooltip width="170">
-          <template #default="{ row }">
-            <span>{{ formatDate(row.actualHandleTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column prop="hotspotName" label="热点分类" show-overflow-tooltip width="200"></el-table-column>
-        <el-table-column prop="acceptTypeText" label="会签发起部门" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="acceptTypeText" label="会签发起人" show-overflow-tooltip></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 label="操作" width="160" fixed="right" align="center">
-          <template #default="{ row }">
-            <el-button link type="primary" @click="onCountersignDetail(row)" title="查看会签明细" v-auth="'query:countersign:detail'"> 会签明细 </el-button>
-            <el-button link type="primary" @click="onOrderDetail(row)" 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>
-    <!-- 工单详情 -->
-    <order-detail ref="orderDetailRef" @updateList="queryList" />
-    <!-- 会签明细 -->
-    <countersign-detail ref="countersignDetailRef" @updateList="queryList" />
-  </div>
+				<el-table-column prop="order.sourceChannel" label="来源方式" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="sourceChannel" label="回访方式" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="order.acceptType" label="受理类型" show-overflow-tooltip width="150"></el-table-column>
+				<el-table-column prop="sourceChannel" label="热点分类" show-overflow-tooltip></el-table-column>
+				<el-table-column label="受理人" show-overflow-tooltip width="170">
+					<template #default="{ row }">
+						<span
+							>{{ row.order?.acceptorName }} <span v-if="row.order?.acceptorStaffNo">[{{ row.order?.acceptorStaffNo }}]</span>
+						</span>
+					</template>
+				</el-table-column>
+				<el-table-column prop="orgLevelOneName" label="一级部门" show-overflow-tooltip width="170"></el-table-column>
+				<el-table-column prop="publishTime" label="发布时间" show-overflow-tooltip width="170">
+					<template #default="{ row }">
+						<span>{{ formatDate(row.publishTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+					</template>
+				</el-table-column>
+				<el-table-column prop="orgLevelOneName" label="回访人" show-overflow-tooltip width="170"></el-table-column>
+				<el-table-column prop="visitTime" label="回访时间" show-overflow-tooltip width="170">
+					<template #default="{ row }">
+						<span>{{ formatDate(row.visitTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+					</template>
+				</el-table-column>
+				<el-table-column label="被回访部门" show-overflow-tooltip width="150">
+					<template #default="{ row }">
+						<span v-if="row.visitTarget === 20">{{ row.visitOrgName }}</span>
+					</template>
+				</el-table-column>
+				<el-table-column label="部门办件结果" show-overflow-tooltip width="150">
+					<template #default="{ row }">
+						<span v-if="row.visitTarget === 20">{{ row.orgProcessingResults?.value }}</span>
+					</template>
+				</el-table-column>
+				<el-table-column label="部门办件态度" show-overflow-tooltip width="150">
+					<template #default="{ row }">
+						<span v-if="row.visitTarget === 20">{{ row.orgHandledAttitude?.value }}</span>
+					</template>
+				</el-table-column>
+				<el-table-column label="不满意原因" show-overflow-tooltip width="150">
+					<template #default="{ row }">
+						<span v-if="row.visitTarget === 20">
+							{{ row.orgNoSatisfiedReason?.map((item) => item.value).join(',') }}
+						</span>
+					</template>
+				</el-table-column>
+				<el-table-column prop="actualHandleOrgName" label="二次回访状态" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="actualHandleOrgName" label="申请人" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="actualHandleOrgName" label="申请部门" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="actualHandleOrgName" label="申请理由" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="actualHandleOrgName" label="审批意见" show-overflow-tooltip></el-table-column>
+				<el-table-column label="操作" width="160" fixed="right" align="center">
+					<template #default="{ row }">
+						<el-button link type="primary" @click="onAudit(row)" 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>
+		<!-- 会签明细 -->
+		<countersign-detail ref="countersignDetailRef" @updateList="queryList" />
+	</div>
 </template>
 <script setup lang="ts" name="secondVisitAudit">
-import {defineAsyncComponent, onMounted, reactive, ref} from 'vue';
-import {ElButton, ElMessage, FormInstance} from 'element-plus';
-import {auth} from '/@/utils/authFunction';
-import {throttle,} from '/@/utils/tools';
-import {formatDate} from '/@/utils/formatTime';
-import {useRouter} from "vue-router";
+import { defineAsyncComponent, onMounted, reactive, ref } from 'vue';
+import { ElButton, ElMessage, FormInstance } from 'element-plus';
+import { auth } from '/@/utils/authFunction';
+import { throttle } from '/@/utils/tools';
+import { formatDate } from '/@/utils/formatTime';
+import { useRouter } from 'vue-router';
 // 引入组件
-const OrderDetail = defineAsyncComponent(() => import('/@/views/business/order/components/Order-detail.vue'));
 const CountersignDetail = defineAsyncComponent(() => import('/@/views/query/countersign/detail/index.vue'));
 // 定义变量内容
 const ruleFormRef = ref<RefType>(); // 表单ref
 const router = useRouter(); // 路由
 const state = reactive(<any>{
-  queryParams: {
-    // 查询条件
-    PageIndex: 1,
-    PageSize: 10,
-    Keyword: null, // 关键字
-  },
-  tableData: [{}], //表单
-  loading: false, // 加载
-  total: 0, // 总数
+	queryParams: {
+		// 查询条件
+		PageIndex: 1,
+		PageSize: 10,
+		Keyword: null, // 关键字
+	},
+	tableData: [{}], //表单
+	loading: false, // 加载
+	total: 0, // 总数
 });
 /** 获取列表 */
 const queryList = throttle(() => {
-  if (!auth('business:secondVisitAudit:query')) ElMessage.error('抱歉,您没有权限查看二次回访审批!');
-  else {
-  }
+	if (!auth('business:secondVisitAudit:query')) ElMessage.error('抱歉,您没有权限查看二次回访审批!');
+	else {
+	}
 }, 300);
 
 /** 重置按钮操作 */
 const resetQuery = throttle((formEl: FormInstance | undefined) => {
-  if (!formEl) return;
-  formEl.resetFields();
-  queryList();
+	if (!formEl) return;
+	formEl.resetFields();
+	queryList();
 }, 300);
 // 表格多选
-const multipleTableRef = ref<RefType>()
-const multipleSelection = ref<any>([])
+const multipleTableRef = ref<RefType>();
+const multipleSelection = ref<any>([]);
 const handleSelectionChange = (val: any[]) => {
-  multipleSelection.value = val
-}
+	multipleSelection.value = val;
+};
 // 导出
 const onExport = () => {
-  console.log('导出');
-};
-// 查看工单详情
-const orderDetailRef = ref<RefType>(); // 工单详情ref
-const onOrderDetail = (row: any) => {
-  orderDetailRef.value.openDialog(row)
+	console.log('导出');
 };
-// 会签明细
+// 审批
 const countersignDetailRef = ref<RefType>(); // 会签明细ref
-const onCountersignDetail = (row:any)=>{
-  countersignDetailRef.value.openDialog(row)
-}
-onMounted( () => {
-  queryList();
+const onAudit = (row: any) => {
+	countersignDetailRef.value.openDialog(row);
+};
+onMounted(() => {
+	queryList();
 });
 </script>
 
 <style scoped lang="scss">
 .business-countersign-container {
-
 }
 </style>

+ 1 - 1
src/views/business/supervise/index.vue

@@ -43,7 +43,7 @@
         </el-table-column>
         <el-table-column label="标题" show-overflow-tooltip width="300">
           <template #default="{ row }">
-            <span class="color-primary">{{ row.order.title }}</span>
+            <span class="color-primary">{{ row.order?.title }}</span>
           </template>
         </el-table-column>
         <el-table-column prop="order.sourceChannel" label="来源方式" show-overflow-tooltip></el-table-column>

+ 175 - 0
src/views/business/teti/components/Teti.vue

@@ -0,0 +1,175 @@
+<template>
+  <el-dialog
+      v-model="state.dialogVisible"
+      draggable
+      title="特提申请"
+      @mouseup="mouseup"
+      :style="'transform: ' + state.transform + ';'"
+      ref="dialogRef"
+      width="50%"
+      append-to-body
+      destroy-on-close
+      @close="close"
+  >
+    <div class="collapse-container pb1">
+      <el-form label-width="110px" ref="ruleFormRef" :model="state.ruleForm">
+        <el-row :gutter="35">
+          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+            <el-form-item label="工单编码"> {{ state.orderDetail.no }} </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+            <el-form-item label="工单标题"> {{ state.orderDetail.title }} </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+            <el-form-item label="督办人"> {{ userInfos.name }} </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+            <el-form-item label="督办部门"> {{ userInfos.orgName }} </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+            <el-form-item label="督办时间"> {{ formatDate(Date(), 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+            <el-form-item label="督办回复时限" prop="replyLimitTime" :rules="[{ required: true, message: '请选择督办回复时限', trigger: 'change' }]">
+              <el-date-picker
+                  v-model="state.ruleForm.replyLimitTime"
+                  type="datetime"
+                  placeholder="请选择督办回复时限"
+                  value-format="YYYY-MM-DD[T]HH:mm:ss"
+                  class="w100"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
+            <el-form-item label="被督办部门" prop="org" :rules="[{ required: true, message: '请选择被督办部门', trigger: 'change' }]">
+              <el-select
+                  v-model="state.ruleForm.org"
+                  placeholder="请选择被督办部门"
+                  class="w100"
+                  value-key="key"
+                  multiple
+                  collapse-tags
+                  collapse-tags-tooltip
+              >
+                <el-option v-for="item in state.orgData" :value="item" :key="item.key" :label="item.value" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+            <el-form-item label="发送督办短信" prop="acceptSms" :rules="[{ required: false, message: '请选择发送督办短信', trigger: 'change' }]">
+              <el-checkbox v-model="state.ruleForm.acceptSms" label="发送督办短信" />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+            <el-form-item label="督办内容" prop="applyContent" :rules="[{ required: true, message: '请填写督办内容', trigger: 'blur' }]">
+              <common-advice
+                  @chooseAdvice="chooseAdvice"
+                  v-model="state.ruleForm.applyContent"
+                  placeholder="请填写督办内容"
+                  :loading="state.loading"
+                  :commonEnum="commonEnum.Supervise"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+            <el-form-item label="附件" prop="handleResult" :rules="[{ required: false, message: '请选择附件', trigger: 'change' }]">
+              <annex-list name="督办附件" ref="annexListRef" businessId="" classify="督办申请" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+    </div>
+    <template #footer>
+			<span class="dialog-footer">
+				<el-button @click="closeDialog" class="default-button">取 消</el-button>
+				<el-button type="primary" @click="onSubmit(ruleFormRef)" :loading="state.loading" v-auth="'business:order:supervise:apply'">提交</el-button>
+			</span>
+    </template>
+  </el-dialog>
+</template>
+<script setup lang="ts" name="tetiDialog">
+import {defineAsyncComponent, reactive, ref} from 'vue';
+import {ElMessage, FormInstance} from 'element-plus';
+import {storeToRefs} from 'pinia';
+import {useUserInfo} from '/@/stores/userInfo';
+import {formatDate} from '/@/utils/formatTime';
+import {commonEnum} from '/@/utils/constants';
+import {superviseApply, urgeOrgList} from '/@/api/business/supervise';
+
+// 引入组件
+const AnnexList = defineAsyncComponent(() => import('/@/components/AnnexList/index.vue'));
+const CommonAdvice = defineAsyncComponent(() => import('/@/components/CommonAdvice/index.vue')); // 常用意见
+
+// 定义子组件向父组件传值/事件
+const emit = defineEmits(['updateList']);
+// 定义变量内容
+const state = reactive<any>({
+  collapseArr: ['1', '2'], // 折叠面板
+  dialogVisible: false, // 是否显示弹窗
+  loading: false, // 是否显示加载
+  ruleForm: {
+    acceptSms: false, // 发送督办短信
+    applyContent: '', // 督办内容
+    org:[]
+  },
+  orderDetail: {}, // 工单详情
+  transform: 'translate(0px, 0px)', // 滚动条位置
+  orgData: [], // 被督办部门
+});
+const ruleFormRef = ref<RefType>();
+const storesUserInfo = useUserInfo();
+const { userInfos } = storeToRefs(storesUserInfo); // 用户信息
+// 打开弹窗
+const openDialog = (val: any) => {
+  state.orderDetail = val;
+
+  state.dialogVisible = true;
+};
+// 关闭弹窗
+const closeDialog = () => {
+  state.dialogVisible = false;
+};
+const close = ()=>{
+  ruleFormRef.value?.clearValidate();
+  ruleFormRef.value?.resetFields();
+}
+// 选中常用意见
+const chooseAdvice = (item: any) => {
+  state.ruleForm.content += item.content;
+};
+// 设置抽屉
+const dialogRef = ref<RefType>();
+const mouseup = () => {
+  state.transform = dialogRef.value.dialogContentRef.$el.style.transform;
+};
+// 提交
+const annexListRef = ref<RefType>(); // 附件列表
+const onSubmit = (formEl: FormInstance | undefined) => {
+  if (!formEl) return;
+  formEl.validate((valid: boolean) => {
+    if (!valid) return;
+    state.loading = true;
+    let request = {
+      ...state.ruleForm,
+      orgId: state.ruleForm.org.id,
+      orgName: state.ruleForm.org.name,
+      orderId: state.orderDetail.id,
+      files: annexListRef.value?.fileList,
+    };
+    superviseApply(request)
+        .then((res: any) => {
+          state.loading = false;
+          closeDialog();
+          emit('updateList');
+          ElMessage.success('操作成功');
+        })
+        .catch(() => {
+          state.loading = false;
+        });
+  });
+};
+defineExpose({
+  openDialog,
+  closeDialog,
+});
+</script>

+ 49 - 36
src/views/business/teti/index.vue

@@ -28,54 +28,75 @@
       <!-- 表格 -->
       <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="no" label="会签编码" show-overflow-tooltip></el-table-column>
         <el-table-column prop="order.no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>
-        <el-table-column prop="sourceChannel" label="来源方式" show-overflow-tooltip></el-table-column>
         <el-table-column width="100" label="省/市工单" prop="isProvince" >
           <template #default="{ row }">
             <span>{{ row.order?.isProvince ? '省工单' : '市工单' }}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="expiredTime" label="节点期满时间" show-overflow-tooltip width="170">
+        <el-table-column label="工单标题" show-overflow-tooltip width="400">
           <template #default="{ row }">
-            <span>{{ formatDate(row.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+            <span class="color-primary">{{ row.order?.title }}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="expiredTime" label="工单期满时间" show-overflow-tooltip width="170">
+        <el-table-column prop="sourceChannel" label="来源方式" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="sourceChannel" label="回访状态" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="acceptType" label="受理类型" show-overflow-tooltip width="100"></el-table-column>
+        <el-table-column prop="hotspotName" label="热点分类" show-overflow-tooltip width="100"></el-table-column>
+        <el-table-column label="受理人" show-overflow-tooltip width="170">
           <template #default="{ row }">
-            <span>{{ formatDate(row.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+						<span
+            >{{ row.order?.acceptorName }} <span v-if="row.order?.acceptorStaffNo">[{{ row.order?.acceptorStaffNo }}]</span>
+						</span>
           </template>
         </el-table-column>
-        <el-table-column prop="startTime" label="受理时间" show-overflow-tooltip width="170">
+        <el-table-column prop="orgLevelOneName" label="一级部门" show-overflow-tooltip width="170"></el-table-column>
+        <el-table-column prop="actualHandleOrgName" label="接办部门" show-overflow-tooltip width="170"></el-table-column>
+        <el-table-column 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="acceptType" 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="工单编码" prop="no" show-overflow-tooltip width="150">
+        <el-table-column label="办结时间" show-overflow-tooltip width="170">
           <template #default="{ row }">
-            <span>{{ row.no }}</span>
+            <span>{{ formatDate(row.filedTime, '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="actualHandleTime" label="接办时间" show-overflow-tooltip width="170">
+        <el-table-column prop="publishTime" label="发布时间" show-overflow-tooltip width="170">
           <template #default="{ row }">
-            <span>{{ formatDate(row.actualHandleTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+            <span>{{ formatDate(row.publishTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="hotspotName" label="热点分类" show-overflow-tooltip width="200"></el-table-column>
-        <el-table-column prop="acceptTypeText" label="会签发起部门" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="acceptTypeText" label="会签发起人" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="expiredTime" label="会签发起时间" show-overflow-tooltip width="170">
+        <el-table-column prop="visitTime" label="回访时间" show-overflow-tooltip width="170">
           <template #default="{ row }">
-            <span>{{ formatDate(row.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+            <span>{{ formatDate(row.visitTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="被回访部门" show-overflow-tooltip width="150">
+          <template #default="{ row }">
+            <span v-if="row.visitTarget===20">{{row.visitOrgName}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="部门办件结果" show-overflow-tooltip width="150">
+          <template #default="{ row }">
+            <span v-if="row.visitTarget===20">{{row.orgProcessingResults?.value}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="部门办件态度" show-overflow-tooltip width="150">
+          <template #default="{ row }">
+            <span v-if="row.visitTarget===20">{{row.orgHandledAttitude?.value}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="不满意原因" show-overflow-tooltip width="150">
+          <template #default="{ row }">
+            <span v-if="row.visitTarget===20">
+              {{row.orgNoSatisfiedReason?.map(item => item.value).join(',')}}
+            </span>
           </template>
         </el-table-column>
         <el-table-column label="操作" width="160" fixed="right" align="center">
           <template #default="{ row }">
-            <el-button link type="primary" @click="onCountersignDetail(row)" title="查看会签明细" v-auth="'query:countersign:detail'"> 会签明细 </el-button>
-            <el-button link type="primary" @click="onOrderDetail(row)" title="查看工单详情"> 工单详情 </el-button>
+            <el-button link type="primary" @click="onTeti(row)" title="特提申请"> 特提申请 </el-button>
           </template>
         </el-table-column>
         <template #empty>
@@ -90,10 +111,8 @@
           @pagination="queryList"
       />
     </el-card>
-    <!-- 工单详情 -->
-    <order-detail ref="orderDetailRef" @updateList="queryList" />
-    <!-- 会签明细 -->
-    <countersign-detail ref="countersignDetailRef" @updateList="queryList" />
+    <!-- 特提申请 -->
+    <teti ref="tetiRef" @updateList="queryList" />
   </div>
 </template>
 <script setup lang="ts" name="tetiOrder">
@@ -104,8 +123,7 @@ import {throttle,} from '/@/utils/tools';
 import {formatDate} from '/@/utils/formatTime';
 import {useRouter} from "vue-router";
 // 引入组件
-const OrderDetail = defineAsyncComponent(() => import('/@/views/business/order/components/Order-detail.vue'));
-const CountersignDetail = defineAsyncComponent(() => import('/@/views/query/countersign/detail/index.vue'));
+const Teti = defineAsyncComponent(() => import('/@/views/business/teti/components/Teti.vue'));
 // 定义变量内容
 const ruleFormRef = ref<RefType>(); // 表单ref
 const router = useRouter(); // 路由
@@ -143,15 +161,10 @@ const handleSelectionChange = (val: any[]) => {
 const onExport = () => {
   console.log('导出');
 };
-// 查看工单详情
-const orderDetailRef = ref<RefType>(); // 工单详情ref
-const onOrderDetail = (row: any) => {
-  orderDetailRef.value.openDialog(row)
-};
-// 会签明细
-const countersignDetailRef = ref<RefType>(); // 会签明细ref
-const onCountersignDetail = (row:any)=>{
-  countersignDetailRef.value.openDialog(row)
+// 特提申请
+const tetiRef = ref<RefType>();
+const onTeti = (row:any)=>{
+  tetiRef.value.openDialog(row)
 }
 onMounted( () => {
   queryList();

+ 39 - 32
src/views/business/tetiAudit/index.vue

@@ -28,54 +28,69 @@
       <!-- 表格 -->
       <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="no" label="会签编码" show-overflow-tooltip></el-table-column>
         <el-table-column prop="order.no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>
-        <el-table-column prop="sourceChannel" label="来源方式" show-overflow-tooltip></el-table-column>
         <el-table-column width="100" label="省/市工单" prop="isProvince" >
           <template #default="{ row }">
             <span>{{ row.order?.isProvince ? '省工单' : '市工单' }}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="expiredTime" label="节点期满时间" show-overflow-tooltip width="170">
+        <el-table-column label="工单标题" show-overflow-tooltip width="400">
+          <template #default="{ row }">
+            <span class="color-primary">{{ row.order?.title }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="sourceChannel" label="来源方式" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="sourceChannel" label="回访状态" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="acceptType" label="受理类型" show-overflow-tooltip width="100"></el-table-column>
+        <el-table-column prop="hotspotName" label="热点分类" show-overflow-tooltip width="100"></el-table-column>
+        <el-table-column label="受理人" show-overflow-tooltip width="170">
           <template #default="{ row }">
-            <span>{{ formatDate(row.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+						<span
+            >{{ row.order?.acceptorName }} <span v-if="row.order?.acceptorStaffNo">[{{ row.order?.acceptorStaffNo }}]</span>
+						</span>
           </template>
         </el-table-column>
-        <el-table-column prop="expiredTime" label="工单期满时间" show-overflow-tooltip width="170">
+        <el-table-column prop="orgLevelOneName" label="一级部门" show-overflow-tooltip width="170"></el-table-column>
+        <el-table-column prop="publishTime" label="发布时间" show-overflow-tooltip width="170">
           <template #default="{ row }">
-            <span>{{ formatDate(row.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+            <span>{{ formatDate(row.publishTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="startTime" label="受理时间" show-overflow-tooltip width="170">
+        <el-table-column prop="visitTime" label="回访时间" show-overflow-tooltip width="170">
           <template #default="{ row }">
-            <span>{{ formatDate(row.startTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+            <span>{{ formatDate(row.visitTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="acceptType" 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="工单编码" prop="no" show-overflow-tooltip width="150">
+        <el-table-column label="被回访部门" show-overflow-tooltip width="150">
           <template #default="{ row }">
-            <span>{{ row.no }}</span>
+            <span v-if="row.visitTarget===20">{{row.visitOrgName}}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="actualHandleOrgName" label="接办部门" show-overflow-tooltip width="170"></el-table-column>
-        <el-table-column prop="actualHandleTime" label="接办时间" show-overflow-tooltip width="170">
+        <el-table-column label="部门办件结果" show-overflow-tooltip width="150">
           <template #default="{ row }">
-            <span>{{ formatDate(row.actualHandleTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+            <span v-if="row.visitTarget===20">{{row.orgProcessingResults?.value}}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="hotspotName" label="热点分类" show-overflow-tooltip width="200"></el-table-column>
-        <el-table-column prop="acceptTypeText" label="会签发起部门" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="acceptTypeText" label="会签发起人" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="expiredTime" label="会签发起时间" show-overflow-tooltip width="170">
+        <el-table-column label="部门办件态度" show-overflow-tooltip width="150">
           <template #default="{ row }">
-            <span>{{ formatDate(row.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+            <span v-if="row.visitTarget===20">{{row.orgHandledAttitude?.value}}</span>
           </template>
         </el-table-column>
+        <el-table-column label="不满意原因" show-overflow-tooltip width="150">
+          <template #default="{ row }">
+            <span v-if="row.visitTarget===20">
+              {{row.orgNoSatisfiedReason?.map(item => item.value).join(',')}}
+            </span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="orgLevelOneName" label="特提审批状态" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="orgLevelOneName" label="特提原因" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="orgLevelOneName" label="申请人" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="orgLevelOneName" label="申请部门" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="orgLevelOneName" label="申请理由" show-overflow-tooltip></el-table-column>
         <el-table-column label="操作" width="160" fixed="right" align="center">
           <template #default="{ row }">
-            <el-button link type="primary" @click="onCountersignDetail(row)" title="查看会签明细" v-auth="'query:countersign:detail'"> 会签明细 </el-button>
-            <el-button link type="primary" @click="onOrderDetail(row)" title="查看工单详情"> 工单详情 </el-button>
+            <el-button link type="primary" @click="onAudit(row)" title="审批特提"> 审批 </el-button>
           </template>
         </el-table-column>
         <template #empty>
@@ -90,8 +105,6 @@
           @pagination="queryList"
       />
     </el-card>
-    <!-- 工单详情 -->
-    <order-detail ref="orderDetailRef" @updateList="queryList" />
     <!-- 会签明细 -->
     <countersign-detail ref="countersignDetailRef" @updateList="queryList" />
   </div>
@@ -104,7 +117,6 @@ import {throttle,} from '/@/utils/tools';
 import {formatDate} from '/@/utils/formatTime';
 import {useRouter} from "vue-router";
 // 引入组件
-const OrderDetail = defineAsyncComponent(() => import('/@/views/business/order/components/Order-detail.vue'));
 const CountersignDetail = defineAsyncComponent(() => import('/@/views/query/countersign/detail/index.vue'));
 // 定义变量内容
 const ruleFormRef = ref<RefType>(); // 表单ref
@@ -143,14 +155,9 @@ const handleSelectionChange = (val: any[]) => {
 const onExport = () => {
   console.log('导出');
 };
-// 查看工单详情
-const orderDetailRef = ref<RefType>(); // 工单详情ref
-const onOrderDetail = (row: any) => {
-  orderDetailRef.value.openDialog(row)
-};
-// 会签明细
+// 审批
 const countersignDetailRef = ref<RefType>(); // 会签明细ref
-const onCountersignDetail = (row:any)=>{
+const onAudit = (row:any)=>{
   countersignDetailRef.value.openDialog(row)
 }
 onMounted( () => {

+ 0 - 2
src/views/business/visit/component/Visit-detail.vue

@@ -322,7 +322,6 @@ const cities = [
 	{ label: '加0', value: '+0' },
 	{ label: '去0', value: '-0' },
 ];
-const againCount = ref<number>(0); // 重办次数
 const visitCount = ref<number>(0); // 回访次数
 const seatEvaluate = ref<EmptyArrayType>(); // 话务员评价
 const viceEvaluate = ref<EmptyArrayType>(); // 语音评价
@@ -335,7 +334,6 @@ const getBaseData = async (id: string) => {
 	state.loading = true;
 	try {
 		const res = await visitDetailBaseData(id);
-		againCount.value = res.result?.againCount ?? 0;
 		visitCount.value = res.result?.visitCount ?? 0;
 		seatEvaluate.value = res.result?.seatEvaluate ?? [];
 		viceEvaluate.value = res.result?.viceEvaluate ?? [];

+ 4 - 4
src/views/query/urge/index.vue

@@ -33,24 +33,24 @@
         <el-table-column prop="order.currentStepName" label="当前办理节点" show-overflow-tooltip width="150"></el-table-column>
         <el-table-column width="100" label="省/市工单" prop="isProvince" >
           <template #default="{ row }">
-            <span>{{ row.order.isProvince ? '省工单' : '市工单' }}</span>
+            <span>{{ row.order?.isProvince ? '省工单' : '市工单' }}</span>
           </template>
         </el-table-column>
         <el-table-column prop="expiredTime" label="期满时间" show-overflow-tooltip width="170">
           <template #default="{ row }">
-            <span>{{ formatDate(row.order.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+            <span>{{ formatDate(row.order?.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
           </template>
         </el-table-column>
         <el-table-column prop="startTime" label="受理时间" show-overflow-tooltip width="170">
           <template #default="{ row }">
-            <span>{{ formatDate(row.order.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+            <span>{{ formatDate(row.order?.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
           </template>
         </el-table-column>
         <el-table-column prop="order.acceptType" label="受理类型" show-overflow-tooltip width="100"></el-table-column>
         <el-table-column prop="order.statusText" label="工单状态" show-overflow-tooltip></el-table-column>
         <el-table-column label="工单标题" show-overflow-tooltip width="300">
           <template #default="{ row }">
-            <span class="color-primary">{{ row.order.title }}</span>
+            <span class="color-primary">{{ row.order?.title }}</span>
           </template>
         </el-table-column>
         <el-table-column prop="order.actualHandleOrgName" label="接办部门" show-overflow-tooltip width="150"></el-table-column>

+ 0 - 15
src/views/system/public/index.vue

@@ -1,15 +0,0 @@
-<template>
-    <div class="system-public-container layout-padding">
-        <div  class="layout-padding-auto layout-padding-view pd15">
-            公用
-        </div>
-    </div>
-</template>
-
-<script setup lang="ts" name="systemPublic">
-
-</script>
-
-<style scoped>
-
-</style>

+ 114 - 64
src/views/todo/delay/index.vue

@@ -3,7 +3,8 @@
 		<!-- 搜索  -->
 		<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-tab-pane name="false" label="延期待办"></el-tab-pane>
+				<el-tab-pane name="true" 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">
@@ -27,59 +28,118 @@
 			<!-- 表格 -->
 			<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="order.no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>
-				<el-table-column width="100" label="省/市工单" prop="isProvince">
-					<template #default="{ row }">
-						<span>{{ row.order?.isProvince ? '省工单' : '市工单' }}</span>
-					</template>
-				</el-table-column>
-				<el-table-column label="工单标题" show-overflow-tooltip width="300">
-					<template #default="{ row }">
-						<span class="color-primary">{{ row.order?.title }}</span>
-					</template>
-				</el-table-column>
-				<el-table-column prop="delayStateText" label="延期申请状态" show-overflow-tooltip width="120"></el-table-column>
-				<el-table-column prop="expiredTime" label="受理时间" show-overflow-tooltip width="170">
-					<template #default="{ row }">
-						<span>{{ formatDate(row.order?.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
-					</template>
-				</el-table-column>
-				<el-table-column prop="acceptorName" label="受理人" show-overflow-tooltip width="170">
-					<template #default="{ row }">
-						<span
-							>{{ row.order?.acceptorName }} <span v-if="row.order?.acceptorStaffNo">[{{ row.order?.acceptorStaffNo }}]</span>
-						</span>
-					</template>
-				</el-table-column>
-				<el-table-column prop="order.hotspotName" label="热点分类" show-overflow-tooltip></el-table-column>
-				<el-table-column prop="order.acceptType" label="受理类型" show-overflow-tooltip></el-table-column>
-				<el-table-column prop="order.orgLevelOneName" label="一级部门" show-overflow-tooltip></el-table-column>
-				<el-table-column prop="order.actualHandleOrgName" label="接办部门" show-overflow-tooltip></el-table-column>
-				<el-table-column prop="actualHandleTime" label="接办时间" show-overflow-tooltip width="170">
-					<template #default="{ row }">
-						<span>{{ formatDate(row.order.actualHandleTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
-					</template>
-				</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="creatorOrgName" label="延期申请部门" show-overflow-tooltip width="120"></el-table-column>
-				<el-table-column prop="creatorName" label="延期申请人" show-overflow-tooltip width="120"></el-table-column>
-				<el-table-column prop="delayNum" label="延期申请时限" show-overflow-tooltip width="120"></el-table-column>
-				<el-table-column prop="delayUnitText" label="延期申请单位" show-overflow-tooltip width="120"></el-table-column>
-				<el-table-column prop="delayReason" label="申请理由" show-overflow-tooltip width="120"></el-table-column>
-				<el-table-column label="申请前期满时间" show-overflow-tooltip width="170">
-					<template #default="{ row }">
-						<span>{{ formatDate(row.applyDelayTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
-					</template>
-				</el-table-column>
-				<el-table-column label="通过后期满时间" show-overflow-tooltip width="170">
-					<template #default="{ row }">
-						<span>{{ formatDate(row.afterDelay, 'YYYY-mm-dd HH:MM:SS') }}</span>
-					</template>
-				</el-table-column>
+				<template v-if="state.queryParams.IsApply === 'false'">
+					<el-table-column prop="order.no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>
+					<el-table-column width="100" label="省/市工单" prop="isProvince">
+						<template #default="{ row }">
+							<span>{{ row.order?.isProvince ? '省工单' : '市工单' }}</span>
+						</template>
+					</el-table-column>
+					<el-table-column label="工单标题" show-overflow-tooltip width="300">
+						<template #default="{ row }">
+							<span class="color-primary">{{ row.order?.title }}</span>
+						</template>
+					</el-table-column>
+					<el-table-column prop="delayStateText" label="延期申请状态" show-overflow-tooltip width="120"></el-table-column>
+					<el-table-column prop="expiredTime" label="受理时间" show-overflow-tooltip width="170">
+						<template #default="{ row }">
+							<span>{{ formatDate(row.order?.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+						</template>
+					</el-table-column>
+					<el-table-column prop="acceptorName" label="受理人" show-overflow-tooltip width="170">
+						<template #default="{ row }">
+							<span
+								>{{ row.order?.acceptorName }} <span v-if="row.order?.acceptorStaffNo">[{{ row.order?.acceptorStaffNo }}]</span>
+							</span>
+						</template>
+					</el-table-column>
+					<el-table-column prop="order.hotspotName" label="热点分类" show-overflow-tooltip></el-table-column>
+					<el-table-column prop="order.acceptType" label="受理类型" show-overflow-tooltip></el-table-column>
+					<el-table-column prop="order.orgLevelOneName" label="一级部门" show-overflow-tooltip></el-table-column>
+					<el-table-column prop="order.actualHandleOrgName" label="接办部门" show-overflow-tooltip></el-table-column>
+					<el-table-column prop="actualHandleTime" label="接办时间" show-overflow-tooltip width="170">
+						<template #default="{ row }">
+							<span>{{ formatDate(row.order.actualHandleTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+						</template>
+					</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="creatorOrgName" label="延期申请部门" show-overflow-tooltip width="120"></el-table-column>
+					<el-table-column prop="creatorName" label="延期申请人" show-overflow-tooltip width="120"></el-table-column>
+					<el-table-column prop="delayNum" label="延期申请时限" show-overflow-tooltip width="120"></el-table-column>
+					<el-table-column prop="delayUnitText" label="延期申请单位" show-overflow-tooltip width="120"></el-table-column>
+					<el-table-column prop="delayReason" label="申请理由" show-overflow-tooltip width="120"></el-table-column>
+					<el-table-column label="申请前期满时间" show-overflow-tooltip width="170">
+						<template #default="{ row }">
+							<span>{{ formatDate(row.applyDelayTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+						</template>
+					</el-table-column>
+					<el-table-column label="通过后期满时间" show-overflow-tooltip width="170">
+						<template #default="{ row }">
+							<span>{{ formatDate(row.afterDelay, 'YYYY-mm-dd HH:MM:SS') }}</span>
+						</template>
+					</el-table-column>
+				</template>
+				<template v-if="state.queryParams.IsApply === 'true'">
+					<el-table-column prop="order.no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>
+					<el-table-column width="100" label="省/市工单" prop="isProvince">
+						<template #default="{ row }">
+							<span>{{ row.order?.isProvince ? '省工单' : '市工单' }}</span>
+						</template>
+					</el-table-column>
+					<el-table-column prop="currentStepName" label="当前节点" show-overflow-tooltip width="150"></el-table-column>
+					<el-table-column prop="actualHandlerName" label="当前审批人" show-overflow-tooltip width="150"></el-table-column>
+					<el-table-column prop="delayStateText" label="延期申请状态" show-overflow-tooltip width="120"></el-table-column>
+					<el-table-column label="工单标题" show-overflow-tooltip width="300">
+						<template #default="{ row }">
+							<span class="color-primary">{{ row.order?.title }}</span>
+						</template>
+					</el-table-column>
+					<el-table-column prop="expiredTime" label="受理时间" show-overflow-tooltip width="170">
+						<template #default="{ row }">
+							<span>{{ formatDate(row.order?.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+						</template>
+					</el-table-column>
+					<el-table-column prop="acceptorName" label="受理人" show-overflow-tooltip width="170">
+						<template #default="{ row }">
+							<span
+								>{{ row.order?.acceptorName }} <span v-if="row.order?.acceptorStaffNo">[{{ row.order?.acceptorStaffNo }}]</span>
+							</span>
+						</template>
+					</el-table-column>
+					<el-table-column prop="order.hotspotName" label="热点分类" show-overflow-tooltip></el-table-column>
+					<el-table-column prop="order.acceptType" label="受理类型" show-overflow-tooltip></el-table-column>
+					<el-table-column prop="order.orgLevelOneName" label="一级部门" show-overflow-tooltip></el-table-column>
+					<el-table-column prop="order.actualHandleOrgName" label="接办部门" show-overflow-tooltip></el-table-column>
+					<el-table-column prop="actualHandleTime" label="接办时间" show-overflow-tooltip width="170">
+						<template #default="{ row }">
+							<span>{{ formatDate(row.order.actualHandleTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+						</template>
+					</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="creatorOrgName" label="延期申请部门" show-overflow-tooltip width="120"></el-table-column>
+					<el-table-column prop="creatorName" label="延期申请人" show-overflow-tooltip width="120"></el-table-column>
+					<el-table-column prop="delayNum" label="延期申请时限" show-overflow-tooltip width="120"></el-table-column>
+					<el-table-column prop="delayUnitText" label="延期申请单位" show-overflow-tooltip width="120"></el-table-column>
+					<el-table-column prop="delayReason" label="申请理由" show-overflow-tooltip width="120"></el-table-column>
+					<el-table-column label="申请前期满时间" show-overflow-tooltip width="170">
+						<template #default="{ row }">
+							<span>{{ formatDate(row.applyDelayTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+						</template>
+					</el-table-column>
+					<el-table-column label="通过后期满时间" show-overflow-tooltip width="170">
+						<template #default="{ row }">
+							<span>{{ formatDate(row.afterDelay, 'YYYY-mm-dd HH:MM:SS') }}</span>
+						</template>
+					</el-table-column>
+				</template>
 				<el-table-column label="操作" width="100" fixed="right" align="center">
 					<template #default="{ row }">
 						<el-button link type="primary" @click="onDetail(row)" title="延期详情" v-auth="'todo:delay:audit'"> 延期详情 </el-button>
@@ -124,16 +184,6 @@ const state = reactive(<any>{
 	tableData: [], // 表格
 	loading: false, // 加载
 	total: 0, // 总数
-	tabPaneList: [
-		{
-			label: '延期待办',
-			value: 'false',
-		},
-		{
-			label: '延期已办',
-			value: 'true',
-		},
-	], // tab列表
 });
 const ruleFormRef = ref<RefType>(); // 表单ref
 const router = useRouter(); // 路由

+ 103 - 51
src/views/todo/discern/index.vue

@@ -1,7 +1,11 @@
 <template>
 	<div class="todo-discern-container layout-pd">
-		<!-- 搜索  -->
 		<el-card shadow="never">
+			<!-- 功能按钮 -->
+			<el-tabs v-model="state.queryParams.State" class="demo-tabs" @tab-change="queryList">
+				<el-tab-pane name="0" label="甄别待办"></el-tab-pane>
+				<el-tab-pane name="1" 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">
@@ -34,61 +38,108 @@
 					</el-col>
 				</el-row>
 			</el-form>
-		</el-card>
-		<el-card shadow="never">
-			<!-- 功能按钮 -->
-			<el-tabs v-model="state.queryParams.status" 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" />
-				<el-table-column prop="order.no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>
-				<el-table-column width="100" label="省/市工单" prop="isProvince">
-					<template #default="{ row }">
-						<span>{{ row.order?.isProvince ? '省工单' : '市工单' }}</span>
-					</template>
-				</el-table-column>
-				<el-table-column label="工单标题" show-overflow-tooltip width="300">
-					<template #default="{ row }">
-						<span class="color-primary">{{ row.order?.title }}</span>
-					</template>
-				</el-table-column>
-				<el-table-column prop="order.sourceChannel" label="来源方式" show-overflow-tooltip></el-table-column>
-				<el-table-column prop="order.acceptType" label="受理类型" show-overflow-tooltip width="120"></el-table-column>
-				<el-table-column prop="expiredTime" label="受理人" show-overflow-tooltip width="170">
-					<template #default="{ row }">
+				<template v-if="state.queryParams.State === '0'">
+					<el-table-column prop="order.no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>
+					<el-table-column width="100" label="省/市工单" prop="isProvince">
+						<template #default="{ row }">
+							<span>{{ row.order?.isProvince ? '省工单' : '市工单' }}</span>
+						</template>
+					</el-table-column>
+					<el-table-column label="工单标题" show-overflow-tooltip width="300">
+						<template #default="{ row }">
+							<span class="color-primary">{{ row.order?.title }}</span>
+						</template>
+					</el-table-column>
+					<el-table-column prop="order.sourceChannel" label="来源方式" show-overflow-tooltip></el-table-column>
+					<el-table-column prop="order.acceptType" label="受理类型" show-overflow-tooltip width="120"></el-table-column>
+					<el-table-column prop="expiredTime" label="受理人" show-overflow-tooltip width="170">
+						<template #default="{ row }">
+							<span
+								>{{ row.order?.acceptorName }} <span v-if="row.order?.acceptorStaffNo">[{{ row.order?.acceptorStaffNo }}]</span>
+							</span>
+						</template>
+					</el-table-column>
+					<el-table-column prop="order.orgLevelOneName" label="一级部门" show-overflow-tooltip width="150"></el-table-column>
+					<el-table-column prop="order.actualHandleOrgName" label="接办部门" show-overflow-tooltip width="150"></el-table-column>
+					<el-table-column prop="actualHandleTime" label="接办时间" show-overflow-tooltip width="170">
+						<template #default="{ row }">
+							<span>{{ formatDate(row.order?.actualHandleTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+						</template>
+					</el-table-column>
+					<el-table-column prop="order.startTime" label="受理时间" show-overflow-tooltip width="170">
+						<template #default="{ row }">
+							<span>{{ formatDate(row.order?.startTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+						</template>
+					</el-table-column>
+					<el-table-column prop="visit.visitTime" label="回访时间" show-overflow-tooltip width="170">
+						<template #default="{ row }">
+							<span>{{ formatDate(row.visit?.visitTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+						</template>
+					</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="creatorName" label="甄别申请人" show-overflow-tooltip width="170"></el-table-column>
+					<el-table-column prop="creatorOrgName" label="甄别申请部门" show-overflow-tooltip width="200"></el-table-column>
+					<el-table-column prop="typeDicName" label="甄别申请类型" show-overflow-tooltip width="170"></el-table-column>
+					<el-table-column prop="content" label="甄别申请原因" show-overflow-tooltip width="200"></el-table-column>
+				</template>
+				<template v-if="state.queryParams.State === '1'">
+          <el-table-column prop="order.no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>
+          <el-table-column width="100" label="省/市工单" prop="isProvince">
+            <template #default="{ row }">
+              <span>{{ row.order?.isProvince ? '省工单' : '市工单' }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column prop="statusText" label="甄别状态" show-overflow-tooltip></el-table-column>
+          <el-table-column prop="currentStepName" label="当前节点" show-overflow-tooltip width="150"></el-table-column>
+          <el-table-column prop="actualHandlerName" label="当前审批人" show-overflow-tooltip width="150"></el-table-column>
+          <el-table-column label="工单标题" show-overflow-tooltip width="300">
+            <template #default="{ row }">
+              <span class="color-primary">{{ row.order?.title }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column prop="order.sourceChannel" label="来源方式" show-overflow-tooltip></el-table-column>
+          <el-table-column prop="order.acceptType" label="受理类型" show-overflow-tooltip width="120"></el-table-column>
+          <el-table-column prop="expiredTime" label="受理人" show-overflow-tooltip width="170">
+            <template #default="{ row }">
 						<span
-							>{{ row.order?.acceptorName }} <span v-if="row.order?.acceptorStaffNo">[{{ row.order?.acceptorStaffNo }}]</span>
+            >{{ row.order?.acceptorName }} <span v-if="row.order?.acceptorStaffNo">[{{ row.order?.acceptorStaffNo }}]</span>
 						</span>
-					</template>
-				</el-table-column>
-				<el-table-column prop="order.orgLevelOneName" label="一级部门" show-overflow-tooltip width="150"></el-table-column>
-				<el-table-column prop="order.actualHandleOrgName" label="接办部门" show-overflow-tooltip width="150"></el-table-column>
-				<el-table-column prop="actualHandleTime" label="接办时间" show-overflow-tooltip width="170">
-					<template #default="{ row }">
-						<span>{{ formatDate(row.order?.actualHandleTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
-					</template>
-				</el-table-column>
-				<el-table-column prop="order.startTime" label="受理时间" show-overflow-tooltip width="170">
-					<template #default="{ row }">
-						<span>{{ formatDate(row.order?.startTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
-					</template>
-				</el-table-column>
-				<el-table-column prop="visit.visitTime" label="回访时间" show-overflow-tooltip width="170">
-					<template #default="{ row }">
-						<span>{{ formatDate(row.visit?.visitTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
-					</template>
-				</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="creatorName" label="甄别申请人" show-overflow-tooltip width="170"></el-table-column>
-				<el-table-column prop="creatorOrgName" label="甄别申请部门" show-overflow-tooltip width="200"></el-table-column>
-				<el-table-column prop="typeDicName" label="甄别申请类型" show-overflow-tooltip width="170"></el-table-column>
-				<el-table-column prop="content" label="甄别申请原因" show-overflow-tooltip width="200"></el-table-column>
+            </template>
+          </el-table-column>
+          <el-table-column prop="order.orgLevelOneName" label="一级部门" show-overflow-tooltip width="150"></el-table-column>
+          <el-table-column prop="order.actualHandleOrgName" label="接办部门" show-overflow-tooltip width="150"></el-table-column>
+          <el-table-column prop="actualHandleTime" label="接办时间" show-overflow-tooltip width="170">
+            <template #default="{ row }">
+              <span>{{ formatDate(row.order?.actualHandleTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column prop="order.startTime" label="受理时间" show-overflow-tooltip width="170">
+            <template #default="{ row }">
+              <span>{{ formatDate(row.order?.startTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column prop="visit.visitTime" label="回访时间" show-overflow-tooltip width="170">
+            <template #default="{ row }">
+              <span>{{ formatDate(row.visit?.visitTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+            </template>
+          </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="creatorName" label="甄别申请人" show-overflow-tooltip width="170"></el-table-column>
+          <el-table-column prop="creatorOrgName" label="甄别申请部门" show-overflow-tooltip width="200"></el-table-column>
+          <el-table-column prop="typeDicName" label="甄别申请类型" show-overflow-tooltip width="170"></el-table-column>
+          <el-table-column prop="content" label="甄别申请原因" show-overflow-tooltip width="200"></el-table-column>
+        </template>
 				<el-table-column label="操作" width="100" fixed="right" align="center">
 					<template #default="{ row }">
 						<el-button link type="primary" @click="onDetail(row)" title="查看甄别详情" v-auth="'todo:discern:detail'"> 甄别详情 </el-button>
@@ -133,6 +184,7 @@ const state = reactive(<any>{
 		CreationTimeStart: null, // 创建时间 开始
 		CreationTimeEnd: null, // 创建时间 结束
 		exTime: [], // 办理期限
+		State: '0',
 		Status: '1',
 	},
 	tableData: [], //表单

+ 208 - 136
src/views/todo/order/index.vue

@@ -1,170 +1,242 @@
 <template>
-  <div class="todo-order-container layout-pd">
-    <!-- 搜索  -->
-    <el-card shadow="never">
-      <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">
-            <el-form-item label="关键字" prop="Keyword">
-              <el-input v-model="state.queryParams.Keyword" placeholder="工单编码/标题" clearable @keyup.enter="queryList" />
-            </el-form-item>
-          </el-col>
-          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
-            <el-form-item label=" ">
-              <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" :loading="state.loading">
-                <SvgIcon name="ele-Refresh" class="mr5" />重置
-              </el-button>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </el-card>
-    <el-card shadow="never">
-      <!-- 功能按钮 -->
-      <div class="mb20">
-        <el-button type="primary" @click="onAddWorkOrder" v-auth="'todo:order:add'">
-          <SvgIcon name="ele-Plus" class="mr5" />新建工单
-        </el-button>
-        <el-button type="primary" @click="onExport" v-auth="'todo:order:export'" :disabled="!multipleSelection.length">
-          <SvgIcon name="iconfont icon-daochu" class="mr5" />导出
-        </el-button>
-      </div>
-      <!-- 表格 -->
-      <el-table :data="state.tableData" v-loading="state.loading" row-key="id" ref="multipleTableRef" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="40" />
-        <el-table-column prop="expiredText" label="工单超期间隔" show-overflow-tooltip width="120"></el-table-column>
-        <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 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 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="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="acceptType" label="受理类型" show-overflow-tooltip></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="hotspotName" label="热点分类" show-overflow-tooltip width="200"></el-table-column>
-        <el-table-column prop="employeeName" label="受理人" show-overflow-tooltip width="150">
-          <template #default="{ row }">
-						<span
-            >{{ row.acceptorName }} <span v-if="row.acceptorStaffNo">[{{ row.acceptorStaffNo }}]</span>
-						</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="操作" width="100" fixed="right" align="center">
-          <template #default="{ row }">
-            <el-button link type="primary" @click="onOrderDetail(row)" title="查看工单详情" v-auth="'todo:order:detail'">
-              详情
-            </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>
-    <!-- 工单详情 -->
-    <order-detail ref="OrderDetailRef" @updateList="queryList" />
-  </div>
+	<div class="todo-order-container layout-pd">
+		<el-card shadow="never">
+			<el-tabs v-model="state.queryParams.Status" class="demo-tabs" @tab-change="queryList">
+				<el-tab-pane name="0" label="工单待办"></el-tab-pane>
+				<el-tab-pane name="1" 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">
+						<el-form-item label="关键字" prop="Keyword">
+							<el-input v-model="state.queryParams.Keyword" placeholder="工单编码/标题" clearable @keyup.enter="queryList" />
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
+						<el-form-item label=" ">
+							<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" :loading="state.loading">
+								<SvgIcon name="ele-Refresh" class="mr5" />重置
+							</el-button>
+						</el-form-item>
+					</el-col>
+				</el-row>
+			</el-form>
+			<!-- 功能按钮 -->
+			<div class="mb20">
+				<el-button type="primary" @click="onAddWorkOrder" v-auth="'todo:order:add'"> <SvgIcon name="ele-Plus" class="mr5" />新建工单 </el-button>
+				<el-button type="primary" @click="onExport" v-auth="'todo:order:export'" :disabled="!multipleSelection.length">
+					<SvgIcon name="iconfont icon-daochu" class="mr5" />导出
+				</el-button>
+			</div>
+			<!-- 表格 -->
+			<el-table :data="state.tableData" v-loading="state.loading" row-key="id" ref="multipleTableRef" @selection-change="handleSelectionChange">
+				<el-table-column type="selection" width="40" />
+				<template v-if="state.queryParams.Status === '0'">
+					<el-table-column prop="expiredText" label="工单超期间隔" show-overflow-tooltip width="120"></el-table-column>
+					<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>
+					<template v-if="state.queryParams.Status === '0'">
+						<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>
+					</template>
+					<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 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 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 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 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="acceptType" label="受理类型" show-overflow-tooltip></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="hotspotName" label="热点分类" show-overflow-tooltip width="100"></el-table-column>
+					<el-table-column prop="employeeName" label="受理人" show-overflow-tooltip width="150">
+						<template #default="{ row }">
+							<span
+								>{{ row.acceptorName }} <span v-if="row.acceptorStaffNo">[{{ row.acceptorStaffNo }}]</span>
+							</span>
+						</template>
+					</el-table-column>
+				</template>
+				<template v-if="state.queryParams.Status === '1'">
+					<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>
+					<template v-if="state.queryParams.Status === '0'">
+						<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>
+					</template>
+					<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 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 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 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 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="orgLevelOneName" label="一级部门" show-overflow-tooltip width="150"></el-table-column>
+					<el-table-column prop="actualHandleOrgName" label="接办部门" show-overflow-tooltip width="150"></el-table-column>
+					<el-table-column prop="acceptType" label="受理类型" show-overflow-tooltip></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="hotspotName" label="热点分类" show-overflow-tooltip width="100"></el-table-column>
+					<el-table-column prop="employeeName" label="受理人" show-overflow-tooltip width="150">
+						<template #default="{ row }">
+							<span
+								>{{ row.acceptorName }} <span v-if="row.acceptorStaffNo">[{{ row.acceptorStaffNo }}]</span>
+							</span>
+						</template>
+					</el-table-column>
+				</template>
+				<el-table-column label="操作" width="100" fixed="right" align="center">
+					<template #default="{ row }">
+						<el-button link type="primary" @click="onOrderDetail(row)" title="查看工单详情" v-auth="'todo:order:detail'"> 详情 </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>
+		<!-- 工单详情 -->
+		<order-detail ref="OrderDetailRef" @updateList="queryList" />
+	</div>
 </template>
 <script setup lang="ts" name="todoOrder">
-import {defineAsyncComponent, onMounted, reactive, ref} from 'vue';
-import {ElButton, ElMessage, FormInstance} from 'element-plus';
-import {auth} from '/@/utils/authFunction';
-import {throttle} from '/@/utils/tools';
-import {formatDate} from '/@/utils/formatTime';
-import {useRouter} from 'vue-router';
-import {orderListTodo} from '/@/api/todo/order';
+import { defineAsyncComponent, onMounted, reactive, ref } from 'vue';
+import { ElButton, ElMessage, FormInstance } from 'element-plus';
+import { auth } from '/@/utils/authFunction';
+import { throttle } from '/@/utils/tools';
+import { formatDate } from '/@/utils/formatTime';
+import { useRouter } from 'vue-router';
+import { orderListTodo } from '/@/api/todo/order';
 // 引入组件
 const OrderDetail = defineAsyncComponent(() => import('/@/views/business/order/components/Order-detail.vue')); // 工单详情
 
 // 定义变量内容
 const state = reactive(<any>{
-  queryParams: {
-    // 查询条件
-    PageIndex: 1, // 当前页
-    PageSize: 10, // 每页条数
-    Keyword: null, // 关键字
-  },
-  tableData: [], //表单
-  loading: false, // 加载
-  total: 0, // 总数
-  channelOptions: [], // 来源频道
-  emergencyLevelOptions: [], // 紧急程度
-  orderStatusOptions: [], // 工单状态
-  orgsOptions: [], // 部门
-  pushTypeOptions: [], //推送分类
-  orgData: [], // 机构数据
+	queryParams: {
+		// 查询条件
+		PageIndex: 1, // 当前页
+		PageSize: 10, // 每页条数
+		Status: '0', // 工单状态
+		Keyword: null, // 关键字
+	},
+	tableData: [], //表单
+	loading: false, // 加载
+	total: 0, // 总数
+	channelOptions: [], // 来源频道
+	emergencyLevelOptions: [], // 紧急程度
+	orderStatusOptions: [], // 工单状态
+	orgsOptions: [], // 部门
+	pushTypeOptions: [], //推送分类
+	orgData: [], // 机构数据
 });
 const ruleFormRef = ref<RefType>(); // 表单ref
 const router = useRouter(); // 路由
 // 获取查询条件基础信息
 /** 获取列表 */
 const queryList = throttle(async () => {
-  if (!auth('todo:order:query')) ElMessage.error('抱歉,您没有权限查看工单待办!');
-  else {
-    try {
-      state.loading = true;
-      const res: any = await orderListTodo(state.queryParams);
-      state.tableData = res.result?.items ?? [];
-      state.total = res.result?.total ?? 0;
-      state.loading = false;
-    } catch (e) {
-      state.loading = false;
-    }
-  }
+	if (!auth('todo:order:query')) ElMessage.error('抱歉,您没有权限查看工单待办!');
+	else {
+		try {
+			state.loading = true;
+			const res: any = await orderListTodo(state.queryParams);
+			state.tableData = res.result?.items ?? [];
+			state.total = res.result?.total ?? 0;
+			state.loading = false;
+		} catch (e) {
+			state.loading = false;
+		}
+	}
 }, 300);
 /** 重置按钮操作 */
 const resetQuery = throttle((formEl: FormInstance | undefined) => {
-  if (!formEl) return;
-  formEl.resetFields();
-  queryList();
+	if (!formEl) return;
+	formEl.resetFields();
+	queryList();
 }, 300);
 // 新增工单
 const onAddWorkOrder = () => {
-  // 跳转到录入工单页面
-  router.push('/business/order/accept');
+	// 跳转到录入工单页面
+	router.push('/business/order/accept');
 };
 // 表格多选
 const multipleTableRef = ref<RefType>();
 const multipleSelection = ref<any>([]);
 const handleSelectionChange = (val: any[]) => {
-  multipleSelection.value = val;
+	multipleSelection.value = val;
 };
 // 导出
 const onExport = () => {
-  console.log('导出');
+	console.log('导出');
 };
 // 查看详情
 const OrderDetailRef = ref<RefType>(); // 工单详情ref
 const onOrderDetail = (row: any) => {
-  OrderDetailRef.value.openDialog(row);
+	OrderDetailRef.value.openDialog(row);
 };
-onMounted( () => {
-  queryList();
+onMounted(() => {
+	queryList();
 });
-</script>
+</script>

+ 0 - 18
src/views/todo/publish/index.vue

@@ -86,8 +86,6 @@
 		</el-card>
 		<!-- 工单发布详情 -->
 		<order-publish ref="orderPublishRef" @updateList="queryList" />
-		<!--  流程审批  -->
-		<process-audit ref="processAuditRef" @orderProcessSuccess="queryList" />
 	</div>
 </template>
 <script setup lang="ts" name="todoPublish">
@@ -99,7 +97,6 @@ import {formatDate} from '/@/utils/formatTime';
 import {publishList} from '/@/api/todo/publish';
 // 引入组件
 const OrderPublish = defineAsyncComponent(() => import('/@/views/business/publish/component/Order-publish.vue'));
-const ProcessAudit = defineAsyncComponent(() => import('/@/components/ProcessAudit/index.vue')); // 流程审批
 // 定义变量内容
 const ruleFormRef = ref<RefType>(); // 表单ref
 const state = reactive(<any>{
@@ -154,21 +151,6 @@ const orderPublishRef = ref<RefType>(); // 工单发布详情ref
 const publish = (row: any) => {
 	orderPublishRef.value.openDialog(row);
 };
-// 工单重办
-const processAuditRef = ref<RefType>(); // 流程审批ref
-const OnOrderRedo = (row: any) => {
-	const params = {
-		id: row.workflowId,
-		processType: '工单重办',
-		orderDetail: row,
-		extra: {
-			dialogTitle: '工单重办',
-			inputPlaceholder: '重办意见',
-			annexName: '办理附件',
-		},
-	};
-	processAuditRef.value.openDialog(params);
-};
 onMounted(() => {
 	queryList();
 });

+ 2 - 2
src/views/todo/supervise/index.vue

@@ -25,14 +25,14 @@
         <el-table-column prop="order.no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>
         <el-table-column label="工单标题" show-overflow-tooltip width="400">
           <template #default="{ row }">
-            <span class="color-primary">{{ row.order.title }}</span>
+            <span class="color-primary">{{ row.order?.title }}</span>
           </template>
         </el-table-column>
         <el-table-column prop="order.sourceChannel" label="来源方式" show-overflow-tooltip></el-table-column>
         <el-table-column prop="order.statusText" label="工单状态" show-overflow-tooltip></el-table-column>
         <el-table-column width="100" label="省/市工单" prop="isProvince" >
           <template #default="{ row }">
-            <span>{{ row.order.isProvince ? '省工单' : '市工单' }}</span>
+            <span>{{ row.order?.isProvince ? '省工单' : '市工单' }}</span>
           </template>
         </el-table-column>
         <el-table-column prop="order.acceptType" label="受理类型" show-overflow-tooltip></el-table-column>

+ 2 - 2
src/views/todo/urge/index.vue

@@ -33,7 +33,7 @@
         <el-table-column prop="order.currentStepName" label="当前办理节点" show-overflow-tooltip width="150"></el-table-column>
         <el-table-column width="100" label="省/市工单" prop="isProvince" >
           <template #default="{ row }">
-            <span>{{ row.order.isProvince ? '省工单' : '市工单' }}</span>
+            <span>{{ row.order?.isProvince ? '省工单' : '市工单' }}</span>
           </template>
         </el-table-column>
         <el-table-column prop="expiredTime" label="期满时间" show-overflow-tooltip width="170">
@@ -50,7 +50,7 @@
         <el-table-column prop="order.statusText" label="工单状态" show-overflow-tooltip></el-table-column>
         <el-table-column label="工单标题" show-overflow-tooltip width="300">
           <template #default="{ row }">
-            <span class="color-primary">{{ row.order.title }}</span>
+            <span class="color-primary">{{ row.order?.title }}</span>
           </template>
         </el-table-column>
         <el-table-column prop="order.actualHandleOrgName" label="接办部门" show-overflow-tooltip width="150"></el-table-column>