Browse Source

reactor:中心待办新增批量回访; 数据共享平台列表增加查询条件;回访待办新增未接通设置; 市州通用-为某些明细表增加自定义排序功能;

zhangchong 5 months ago
parent
commit
b7a08806ab

+ 2 - 2
src/components/OrderDetail/index.vue

@@ -306,9 +306,9 @@
 									</el-row>
 								</el-form-item>
 							</el-col>
-							<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" v-if="state.ruleForm.isUrgentText || state.ruleForm.IsEvasiveTxt || state.ruleForm.isInactivelyTxt">
+							<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" v-if="state.ruleForm.isStepUrgentTxt || state.ruleForm.IsEvasiveTxt || state.ruleForm.isInactivelyTxt">
 								<el-form-item label="派单员勾选">
-									<span class="color-danger" v-if="state.ruleForm.isUrgentText">{{state.ruleForm.isUrgentText}}</span>
+									<span class="color-danger" v-if="state.ruleForm.isStepUrgentTxt">{{state.ruleForm.isStepUrgentTxt}}</span>
 									<span class="color-danger" v-if="state.ruleForm.IsEvasiveTxt">,{{state.ruleForm.IsEvasiveTxt}}</span>
 									<span class="color-danger" v-if="state.ruleForm.isInactivelyTxt">,{{state.ruleForm.isInactivelyTxt}}</span>
 								</el-form-item>

+ 5 - 7
src/components/ProcessAudit/ZGProcess.vue

@@ -109,7 +109,7 @@
 							<el-checkbox v-model="state.ruleForm.isSms" label="短信通知" v-if="isSmsSelectShow" :key="Math.random()" />
 							<el-checkbox v-model="state.ruleForm.isForwarded" label="是否转办" v-if="seatTopaidan || seatToOrgOne" :key="Math.random()" />
 							<template v-if="paidanToOrgOne || paidanToEnd">
-								<el-checkbox v-model="state.ruleForm.isUrgent" label="紧急" :key="Math.random()" />
+								<el-checkbox v-model="state.ruleForm.isStepUrgent" label="紧急" :key="Math.random()" />
 								<el-checkbox v-model="state.ruleForm.isEvasive" label="推诿" :key="Math.random()" />
 								<el-checkbox v-model="state.ruleForm.isInactively" label="不积极" :key="Math.random()" />
 							</template>
@@ -336,8 +336,7 @@
 						</el-col>
 					</template>
 					<!-- 派单组流转到归档  派单组到一级部门 -->
-					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" v-if="paidanToOrgOne || paidanToEnd">
-						<el-row>
+					<template v-if="paidanToOrgOne || paidanToEnd">
 							<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
 								<el-form-item label="市州转办" prop="transpond" :rules="[{ required: false, message: '请选择市州转办', trigger: 'change' }]">
 									<el-select v-model="state.ruleForm.transpond" placeholder="请选择市州转办" class="w100" @change="changeTransPond">
@@ -361,8 +360,7 @@
 									</el-select>
 								</el-form-item>
 							</el-col>
-						</el-row>
-					</el-col>
+					</template>
 					<!-- 派单组到一级部门  -->
 					<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" v-if="paidanToOrgOne">
 						<el-form-item label="领导短信" prop="leaderSMSKey" :rules="[{ required: false, message: '请选择领导短信', trigger: 'change' }]">
@@ -536,7 +534,7 @@ const state = reactive<any>({
 		isStartCountersign: false, // 是否发起会签
 		stepId: null, // 步骤id
 		isForwarded: false, // 是否转办
-		isUrgent: null, // 是否紧急
+		isStepUrgent: null, // 是否紧急
 		isEvasive: null, // 是否推诿
 		isInactively: null, // 是否不积极
 		leaderSMSKey: null, // 领导短信key
@@ -762,7 +760,7 @@ const isNotShowNextHandlers = ref(false);
 const restFormData = () => {
 	state.ruleForm.nextHandlers = [];
 	state.ruleForm.nextHandler = {};
-	state.ruleForm.isUrgent = null;
+	state.ruleForm.isStepUrgent = null;
 	state.ruleForm.isEvasive = null;
 	state.ruleForm.isInactively = null;
 	state.ruleForm.leaderSMSKey = null;

+ 4 - 4
src/views/business/order/components/Order-supply.vue

@@ -45,13 +45,13 @@
 							placeholder="请填写补充内容"
 							:loading="state.loading"
 							:commonEnum="commonEnum.OrderCirculation"
-							:maxlegth="2000"
+							:maxlength="2000"
 						/>
 					</el-form-item>
 				</el-col>
 <!--				<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 					<el-form-item label="附件" prop="additions">
-						<annex-list name="补充附件" ref="annexListRef" :businessId="state.orderDetail.id" classify="补充上传" />
+						<annex-list name="补充附件" ref="annexListRef" :businessId="state.orderDetail.id" classify="补充上传"  v-model:format="handleFiles"/>
 					</el-form-item>
 				</el-col>-->
 			</el-row>
@@ -123,7 +123,7 @@ const mouseup = () => {
 	state.transform = dialogRef.value.dialogContentRef.$el.style.transform;
 };
 // 提交
-const annexListRef = ref<RefType>(); // 附件列表
+const handleFiles = ref<EmptyArrayType>([]); // 附件列表
 const onSubmit = throttle((formEl: FormInstance | undefined) => {
 	if (!formEl) return;
 	formEl.validate((valid: boolean) => {
@@ -131,7 +131,7 @@ const onSubmit = throttle((formEl: FormInstance | undefined) => {
 		state.loading = true;
 		let request = {
 			...state.ruleForm,
-			files: annexListRef.value?.fileList,
+			files: handleFiles.value
 		};
 		orderComplement(request)
 			.then(() => {

+ 306 - 240
src/views/business/order/index.vue

@@ -1,7 +1,7 @@
 <template>
 	<div class="business-order-container layout-padding">
 		<div class="layout-padding-auto layout-padding-view pd20">
-				<ProTable
+			<ProTable
 				ref="proTableRef"
 				:columns="columns"
 				:data="state.tableData"
@@ -12,6 +12,7 @@
 				:exportMethod="exportOrder"
 				:exportParams="requestParams"
 				v-if="['YiBin'].includes(themeConfig.appScope)"
+				@sort-change="sortChange"
 			>
 				<template #table-search>
 					<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
@@ -20,19 +21,19 @@
 								<el-form-item label="快捷查询" prop="fastSearch">
 									<el-segmented
 										:options="[
-												{
-													value: 'all',
-													label: '全部',
-												},
-												{
-													value: 'city',
-													label: '市工单',
-												},
-												{
-													value: 'province',
-													label: '省工单',
-												},
-											]"
+											{
+												value: 'all',
+												label: '全部',
+											},
+											{
+												value: 'city',
+												label: '市工单',
+											},
+											{
+												value: 'province',
+												label: '省工单',
+											},
+										]"
 										v-model="fastSearch"
 										@change="fastSearchChange"
 										:disabled="state.loading"
@@ -76,17 +77,21 @@
 					<el-button type="primary" @click="onCreateRepeatEvent" :loading="state.loading">
 						<SvgIcon name="ele-Plus" class="mr5" />创建重复性事件
 					</el-button>
-					<el-button type="primary" @click="onRevoke" :loading="state.loading" v-auth="'business:order:revoke'" :disabled="!scope.isSelected" >
-						<SvgIcon name="ele-Setting" class="mr5" />设置撤销<span v-if="proTableRef?.selectedList?.length">({{proTableRef?.selectedList?.length}})</span>
+					<el-button type="primary" @click="onRevoke" :loading="state.loading" v-auth="'business:order:revoke'" :disabled="!scope.isSelected">
+						<SvgIcon name="ele-Setting" class="mr5" />设置撤销<span v-if="proTableRef?.selectedList?.length"
+							>({{ proTableRef?.selectedList?.length }})</span
+						>
 					</el-button>
 					<el-button type="primary" @click="onObserve" v-auth="'business:order:observe'" :disabled="!scope.isSelected" :loading="state.loading"
-					>添加关注<span v-if="proTableRef?.selectedList?.length">({{proTableRef?.selectedList?.length}})</span>
+						>添加关注<span v-if="proTableRef?.selectedList?.length">({{ proTableRef?.selectedList?.length }})</span>
 					</el-button>
 					<el-button type="primary" @click="onEnd" v-auth="'business:order:end'" :disabled="!scope.isSelected" :loading="state.loading"
-					>设置终结件<span v-if="proTableRef?.selectedList?.length">({{proTableRef?.selectedList?.length}})</span>
+						>设置终结件<span v-if="proTableRef?.selectedList?.length">({{ proTableRef?.selectedList?.length }})</span>
 					</el-button>
 					<el-button type="primary" @click="onJbExport" :disabled="!scope.isSelected" :loading="state.loading" v-auth="'business:order:jbdExport'"
-					><SvgIcon name="iconfont icon-daochu" class="mr5" />交办单导出<span v-if="proTableRef?.selectedList?.length">({{proTableRef?.selectedList?.length}})</span>
+						><SvgIcon name="iconfont icon-daochu" class="mr5" />交办单导出<span v-if="proTableRef?.selectedList?.length"
+							>({{ proTableRef?.selectedList?.length }})</span
+						>
 					</el-button>
 				</template>
 				<template #expiredStatusText="{ row }">
@@ -104,140 +109,149 @@
 						title="省工单退回"
 						v-auth="'business:order:return:province'"
 						v-if="
-								row.isProvince &&
-								(row.actualHandleOrgCode === '001' || row.actualHandleOrgCode === null || row.actualHandleOrgCode === '' || row.status === 0) &&
-								row.status < 300 && row.status !== 9 && !row.provinceSendBack
-							"
+							row.isProvince &&
+							(row.actualHandleOrgCode === '001' || row.actualHandleOrgCode === null || row.actualHandleOrgCode === '' || row.status === 0) &&
+							row.status < 300 &&
+							row.status !== 9 &&
+							!row.provinceSendBack
+						"
 					>
 						退回</el-button
 					>
 					<order-detail :order="row" @updateList="handleQuery" />
 				</template>
 			</ProTable>
-				<ProTable
-					ref="proTableRef"
-					:columns="columns1"
-					:data="state.tableData"
-					@updateTable="queryList"
-					:loading="state.loading"
-					:pagination="false"
-					:toolButton="['refresh', 'setting', 'exportCurrent', 'exportAll']"
-					:exportMethod="exportOrder"
-					:exportParams="requestParams"
-					v-else
-				>
-					<template #table-search>
-						<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
-							<el-row>
-								<el-col>
-									<el-form-item label="快捷查询" prop="fastSearch">
-										<el-segmented
-											:options="[
-												{
-													value: 'all',
-													label: '全部',
-												},
-												{
-													value: 'city',
-													label: '市工单',
-												},
-												{
-													value: 'province',
-													label: '省工单',
-												},
-											]"
-											v-model="fastSearch"
-											@change="fastSearchChange"
-											:disabled="state.loading"
-										/>
-										<el-checkbox-group v-model="checkList" @change="changeCheckList" class="ml15">
-											<el-checkbox value="IsSensitiveWord" border>敏感类工单</el-checkbox>
-										</el-checkbox-group>
-									</el-form-item>
-									<el-form-item>
-										<el-button @click="contentRetrieval"><SvgIcon name="ele-DocumentCopy" class="mr5" />内容检索</el-button>
-									</el-form-item>
-								</el-col>
-							</el-row>
-							<el-form-item label="工单标题" prop="Keyword">
-								<el-input v-model="state.queryParams.Keyword" placeholder="工单标题" clearable @keyup.enter="handleQuery" class="keyword-input" />
-							</el-form-item>
-							<el-form-item label="工单编码" prop="No">
-								<el-input v-model="state.queryParams.No" placeholder="工单编码" clearable @keyup.enter="handleQuery" class="keyword-input" />
-							</el-form-item>
-							<el-form-item label="生成时间" prop="crTime">
-								<el-date-picker
-									v-model="state.queryParams.crTime"
-									type="datetimerange"
-									unlink-panels
-									range-separator="至"
-									start-placeholder="开始时间"
-									end-placeholder="结束时间"
-									:shortcuts="shortcuts"
-									@change="handleQuery"
-									value-format="YYYY-MM-DD[T]HH:mm:ss"
-									:default-time="defaultTimeStartEnd"
-								/>
-							</el-form-item>
-							<el-form-item>
-								<el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
-								<el-button @click="drawer = true" class="default-button"> <SvgIcon name="ele-Search" class="mr5" />更多查询</el-button>
-							</el-form-item>
-						</el-form>
-					</template>
-					<template #tableHeader="scope">
-						<el-button type="primary" @click="onCreateRepeatEvent" :loading="state.loading">
-							<SvgIcon name="ele-Plus" class="mr5" />创建重复性事件
-						</el-button>
-						<el-button type="primary" @click="onRevoke" :loading="state.loading" v-auth="'business:order:revoke'" :disabled="!scope.isSelected" >
-							<SvgIcon name="ele-Setting" class="mr5" />设置撤销<span v-if="proTableRef?.selectedList?.length">({{proTableRef?.selectedList?.length}})</span>
-						</el-button>
-						<el-button type="primary" @click="onObserve" v-auth="'business:order:observe'" :disabled="!scope.isSelected" :loading="state.loading"
-							>添加关注<span v-if="proTableRef?.selectedList?.length">({{proTableRef?.selectedList?.length}})</span>
-						</el-button>
-						<el-button type="primary" @click="onEnd" v-auth="'business:order:end'" :disabled="!scope.isSelected" :loading="state.loading"
-							>设置终结件<span v-if="proTableRef?.selectedList?.length">({{proTableRef?.selectedList?.length}})</span>
-						</el-button>
-						<el-button type="primary" @click="onJbExport" :disabled="!scope.isSelected" :loading="state.loading" v-auth="'business:order:jbdExport'"
-							><SvgIcon name="iconfont icon-daochu" class="mr5" />交办单导出<span v-if="proTableRef?.selectedList?.length">({{proTableRef?.selectedList?.length}})</span>
-						</el-button>
-					</template>
-					<template #expiredStatusText="{ row }">
-						<span :class="'overdue-status-' + row.expiredStatus" :title="row.expiredStatusText"></span>
-					</template>
-					<template #title="{ row }">
-						<order-detail :order="row" @updateList="handleQuery">{{ row.title }}</order-detail>
-					</template>
-					<template #operation="{ row }">
-						<!-- 省工单退回条件 是省工单(工单未归档且当前节点处于热线中心办理节点时)工单状态为办理中(归档之前) 9代表有退回申请 -->
-						<el-button
-							link
-							type="danger"
-							@click="onReturn(row)"
-							title="省工单退回"
-							v-auth="'business:order:return:province'"
-							v-if="
-								row.isProvince &&
-								(row.actualHandleOrgCode === '001' || row.actualHandleOrgCode === null || row.actualHandleOrgCode === '' || row.status === 0) &&
-								row.status < 300 && row.status !== 9 && !row.provinceSendBack
-							"
+			<ProTable
+				ref="proTableRef"
+				:columns="columns1"
+				:data="state.tableData"
+				@updateTable="queryList"
+				:loading="state.loading"
+				:pagination="false"
+				:toolButton="['refresh', 'setting', 'exportCurrent', 'exportAll']"
+				:exportMethod="exportOrder"
+				:exportParams="requestParams"
+				v-else
+				@sort-change="sortChange"
+			>
+				<template #table-search>
+					<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
+						<el-row>
+							<el-col>
+								<el-form-item label="快捷查询" prop="fastSearch">
+									<el-segmented
+										:options="[
+											{
+												value: 'all',
+												label: '全部',
+											},
+											{
+												value: 'city',
+												label: '市工单',
+											},
+											{
+												value: 'province',
+												label: '省工单',
+											},
+										]"
+										v-model="fastSearch"
+										@change="fastSearchChange"
+										:disabled="state.loading"
+									/>
+									<el-checkbox-group v-model="checkList" @change="changeCheckList" class="ml15">
+										<el-checkbox value="IsSensitiveWord" border>敏感类工单</el-checkbox>
+									</el-checkbox-group>
+								</el-form-item>
+								<el-form-item>
+									<el-button @click="contentRetrieval"><SvgIcon name="ele-DocumentCopy" class="mr5" />内容检索</el-button>
+								</el-form-item>
+							</el-col>
+						</el-row>
+						<el-form-item label="工单标题" prop="Keyword">
+							<el-input v-model="state.queryParams.Keyword" placeholder="工单标题" clearable @keyup.enter="handleQuery" class="keyword-input" />
+						</el-form-item>
+						<el-form-item label="工单编码" prop="No">
+							<el-input v-model="state.queryParams.No" placeholder="工单编码" clearable @keyup.enter="handleQuery" class="keyword-input" />
+						</el-form-item>
+						<el-form-item label="生成时间" prop="crTime">
+							<el-date-picker
+								v-model="state.queryParams.crTime"
+								type="datetimerange"
+								unlink-panels
+								range-separator="至"
+								start-placeholder="开始时间"
+								end-placeholder="结束时间"
+								:shortcuts="shortcuts"
+								@change="handleQuery"
+								value-format="YYYY-MM-DD[T]HH:mm:ss"
+								:default-time="defaultTimeStartEnd"
+							/>
+						</el-form-item>
+						<el-form-item>
+							<el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
+							<el-button @click="drawer = true" class="default-button"> <SvgIcon name="ele-Search" class="mr5" />更多查询</el-button>
+						</el-form-item>
+					</el-form>
+				</template>
+				<template #tableHeader="scope">
+					<el-button type="primary" @click="onCreateRepeatEvent" :loading="state.loading">
+						<SvgIcon name="ele-Plus" class="mr5" />创建重复性事件
+					</el-button>
+					<el-button type="primary" @click="onRevoke" :loading="state.loading" v-auth="'business:order:revoke'" :disabled="!scope.isSelected">
+						<SvgIcon name="ele-Setting" class="mr5" />设置撤销<span v-if="proTableRef?.selectedList?.length"
+							>({{ proTableRef?.selectedList?.length }})</span
 						>
-							退回</el-button
+					</el-button>
+					<el-button type="primary" @click="onObserve" v-auth="'business:order:observe'" :disabled="!scope.isSelected" :loading="state.loading"
+						>添加关注<span v-if="proTableRef?.selectedList?.length">({{ proTableRef?.selectedList?.length }})</span>
+					</el-button>
+					<el-button type="primary" @click="onEnd" v-auth="'business:order:end'" :disabled="!scope.isSelected" :loading="state.loading"
+						>设置终结件<span v-if="proTableRef?.selectedList?.length">({{ proTableRef?.selectedList?.length }})</span>
+					</el-button>
+					<el-button type="primary" @click="onJbExport" :disabled="!scope.isSelected" :loading="state.loading" v-auth="'business:order:jbdExport'"
+						><SvgIcon name="iconfont icon-daochu" class="mr5" />交办单导出<span v-if="proTableRef?.selectedList?.length"
+							>({{ proTableRef?.selectedList?.length }})</span
 						>
-						<order-detail :order="row" @updateList="handleQuery" />
-					</template>
-				</ProTable>
-				<div class="flex-end mt20" style="align-items: center">
-					<!--					<el-button class="default-button" @click="onChangeTotal">展示总数</el-button>-->
-					<span v-loading="totalLoading" class="mr10">共 {{ totalCount }} 条</span>
-					<el-pagination
-						layout="prev, pager, next"
-						:total="state.total"
-						@current-change="handleCurrentChange"
-						:page-size="state.queryParams.PageSize"
-						:current-page="state.queryParams.PageIndex"
-					/>
-				</div>
+					</el-button>
+				</template>
+				<template #expiredStatusText="{ row }">
+					<span :class="'overdue-status-' + row.expiredStatus" :title="row.expiredStatusText"></span>
+				</template>
+				<template #title="{ row }">
+					<order-detail :order="row" @updateList="handleQuery">{{ row.title }}</order-detail>
+				</template>
+				<template #operation="{ row }">
+					<!-- 省工单退回条件 是省工单(工单未归档且当前节点处于热线中心办理节点时)工单状态为办理中(归档之前) 9代表有退回申请 -->
+					<el-button
+						link
+						type="danger"
+						@click="onReturn(row)"
+						title="省工单退回"
+						v-auth="'business:order:return:province'"
+						v-if="
+							row.isProvince &&
+							(row.actualHandleOrgCode === '001' || row.actualHandleOrgCode === null || row.actualHandleOrgCode === '' || row.status === 0) &&
+							row.status < 300 &&
+							row.status !== 9 &&
+							!row.provinceSendBack
+						"
+					>
+						退回</el-button
+					>
+					<order-detail :order="row" @updateList="handleQuery" />
+				</template>
+			</ProTable>
+			<div class="flex-end mt20" style="align-items: center">
+				<!--					<el-button class="default-button" @click="onChangeTotal">展示总数</el-button>-->
+				<span v-loading="totalLoading" class="mr10">共 {{ totalCount }} 条</span>
+				<el-pagination
+					layout="prev, pager, next"
+					:total="state.total"
+					@current-change="handleCurrentChange"
+					:page-size="state.queryParams.PageSize"
+					:current-page="state.queryParams.PageIndex"
+				/>
+			</div>
 		</div>
 		<!-- 编辑重复性事件 -->
 		<repeat-event-edit ref="repeatEventEditRef" @updateList="handleQuery" />
@@ -380,6 +394,34 @@
 						:default-time="defaultTimeStartEnd"
 					/>
 				</el-form-item>
+				<el-form-item label="发布时间" prop="fbTime">
+					<el-date-picker
+						v-model="state.queryParams.fbTime"
+						type="datetimerange"
+						unlink-panels
+						range-separator="至"
+						start-placeholder="开始时间"
+						end-placeholder="结束时间"
+						:shortcuts="shortcuts"
+						@change="handleQuery"
+						value-format="YYYY-MM-DD[T]HH:mm:ss"
+						:default-time="defaultTimeStartEnd"
+					/>
+				</el-form-item>
+				<el-form-item label="回访时间" prop="hfTime">
+					<el-date-picker
+						v-model="state.queryParams.hfTime"
+						type="datetimerange"
+						unlink-panels
+						range-separator="至"
+						start-placeholder="开始时间"
+						end-placeholder="结束时间"
+						:shortcuts="shortcuts"
+						@change="handleQuery"
+						value-format="YYYY-MM-DD[T]HH:mm:ss"
+						:default-time="defaultTimeStartEnd"
+					/>
+				</el-form-item>
 				<el-form-item label="受理情况" prop="IsSgin">
 					<el-select v-model="state.queryParams.IsSgin" placeholder="请选择受理情况" clearable @change="handleQuery">
 						<el-option label="已签收" :value="true" />
@@ -496,8 +538,12 @@ const state = reactive<any>({
 		SensitiveWord: null, // 敏感词
 		IsUrgent: null, // 是否加急
 		ContentRetrieval: null, // 内容检索
-		IsSgin:null, // 受理情况
-		OrderTagCode:null, // 工单标签
+		IsSgin: null, // 受理情况
+		OrderTagCode: null, // 工单标签
+		SortField: null,
+		SortRule: null,
+		fbTime: [], // 发布时间
+		hfTime: [], // 回访时间
 	},
 	tableData: [], //表单
 	loading: false, // 加载
@@ -545,52 +591,57 @@ const proTableRef = ref<RefType>(); // 表格ref
 // 表格配置项
 const columns = ref<any[]>([
 	{ type: 'selection', minWidth: 40, align: 'center' },
-	{ prop: 'expiredStatusText', label: '超期状态', align: 'center', minWidth: 80 },
-	{ prop: 'no', label: '工单编码', minWidth: 140 },
-	{ prop: 'isProvinceText', label: '省/市工单', minWidth: 90 },
-	{ prop: 'reTransactNum', label: '重办次数' },
+	{ prop: 'expiredStatusText', label: '超期状态', align: 'center', minWidth: 110, sortable: 'custom' },
+	{ prop: 'no', label: '工单编码', minWidth: 140, sortable: 'custom' },
+	{ prop: 'isProvinceText', label: '省/市工单', minWidth: 110, sortable: 'custom' },
+	{ prop: 'reTransactNum', label: '重办次数', sortable: 'custom', minWidth: 110 },
 	{
 		prop: 'isUrgentText',
 		label: '是否紧急',
-		render: (scope) => {
+		render: (scope:any) => {
 			return <span class="color-danger font-bold">{scope.row.isUrgentText}</span>;
 		},
+		minWidth: 120,
+		sortable: 'custom',
 	},
-	{ prop: 'currentStepName', label: '当前节点', minWidth: 120 },
-	{ prop: 'actualStepAcceptText', label: '受理情况' },
-	{ prop: 'statusText', label: '工单状态', minWidth: 100 },
+	{ prop: 'currentStepName', label: '当前节点', minWidth: 120, sortable: 'custom' },
+	{ prop: 'actualStepAcceptText', label: '受理情况', sortable: 'custom', minWidth: 110 },
+	{ prop: 'statusText', label: '工单状态', minWidth: 110, sortable: 'custom' },
 	{ prop: 'title', label: '工单标题', minWidth: 200 },
 	{
 		prop: 'startTime',
 		label: '受理时间',
 		minWidth: 160,
-		render: (scope) => {
+		render: (scope:any) => {
 			return <span>{formatDate(scope.row.startTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
 	{
 		prop: 'expiredTime',
 		label: '工单期满时间',
 		minWidth: 160,
-		render: (scope) => {
+		render: (scope:any) => {
 			return <span>{formatDate(scope.row.expiredTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
 	{
 		prop: 'filedTime',
 		label: '办结时间',
 		minWidth: 160,
-		render: (scope) => {
+		render: (scope:any) => {
 			return <span>{formatDate(scope.row.filedTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
-	{ prop: 'orgLevelOneName', label: '一级部门', minWidth: 140 },
-	{ prop: 'actualHandleOrgName', label: '接办部门', minWidth: 140 },
-	{ prop: 'acceptType', label: '受理类型', minWidth: 100 },
-	{ prop: 'counterSignTypeText', label: '是否会签', minWidth: 90 },
+	{ prop: 'orgLevelOneName', label: '一级部门', minWidth: 140, sortable: 'custom' },
+	{ prop: 'actualHandleOrgName', label: '接办部门', minWidth: 140, sortable: 'custom' },
+	{ prop: 'acceptType', label: '受理类型', minWidth: 110, sortable: 'custom' },
+	{ prop: 'counterSignTypeText', label: '是否会签', minWidth: 110, sortable: 'custom' },
 	{ prop: 'sourceChannel', label: '来源渠道', minWidth: 100 },
-	{ prop: 'hotspotName', label: '热点分类', minWidth: 150 },
-	{ prop: 'acceptorName', label: '受理人', minWidth: 120 },
+	{ prop: 'hotspotName', label: '热点分类', minWidth: 150, sortable: 'custom' },
+	{ prop: 'acceptorName', label: '受理人', minWidth: 120, sortable: 'custom' },
 	{
 		prop: 'sensitiveText',
 		label: '敏感词',
@@ -610,60 +661,68 @@ const columns = ref<any[]>([
 ]);
 const columns1 = ref<any[]>([
 	{ type: 'selection', minWidth: 40, align: 'center' },
-	{ prop: 'expiredStatusText', label: '超期状态', align: 'center', minWidth: 80 },
-	{ prop: 'no', label: '工单编码', minWidth: 140 },
-	{ prop: 'isProvinceText', label: '省/市工单', minWidth: 90 },
-	{ prop: 'reTransactNum', label: '重办次数' },
+	{ prop: 'expiredStatusText', label: '超期状态', align: 'center', minWidth: 110, sortable: 'custom' },
+	{ prop: 'no', label: '工单编码', minWidth: 140, sortable: 'custom' },
+	{ prop: 'isProvinceText', label: '省/市工单', minWidth: 110, sortable: 'custom' },
+	{ prop: 'reTransactNum', label: '重办次数', sortable: 'custom', minWidth: 110 },
 	{
 		prop: 'isUrgentText',
 		label: '是否紧急',
-		render: (scope) => {
+		render: (scope: any) => {
 			return <span class="color-danger font-bold">{scope.row.isUrgentText}</span>;
 		},
+		minWidth: 110,
+		sortable: 'custom',
 	},
-	{ prop: 'currentStepName', label: '当前节点', minWidth: 120 },
-	{ prop: 'actualStepAcceptText', label: '受理情况' },
-	{ prop: 'statusText', label: '工单状态', minWidth: 100 },
+/*	{ prop: 'isSecret', label: '是否保密', minWidth: 110, sortable: 'custom' },
+	{ prop: 'isSecret', label: '甄别状态', minWidth: 110, sortable: 'custom' },*/
+	{ prop: 'currentStepName', label: '当前节点', minWidth: 120, sortable: 'custom' },
+	{ prop: 'actualStepAcceptText', label: '受理情况', sortable: 'custom', minWidth: 110 },
+	{ prop: 'statusText', label: '工单状态', minWidth: 110, sortable: 'custom' },
 	{ prop: 'title', label: '工单标题', minWidth: 200 },
 	{
 		prop: 'startTime',
 		label: '受理时间',
 		minWidth: 160,
-		render: (scope) => {
+		render: (scope: any) => {
 			return <span>{formatDate(scope.row.startTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
 	{
 		prop: 'expiredTime',
 		label: '工单期满时间',
 		minWidth: 160,
-		render: (scope) => {
+		render: (scope: any) => {
 			return <span>{formatDate(scope.row.expiredTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
 	{
 		prop: 'filedTime',
 		label: '办结时间',
 		minWidth: 160,
-		render: (scope) => {
+		render: (scope: any) => {
 			return <span>{formatDate(scope.row.filedTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
-	{ prop: 'fromPhone', label: '来电号码', minWidth: 120 },
-	{ prop: 'contact', label: '联系电话', minWidth: 120 },
-	{ prop: 'fromName', label: '来电人姓名', minWidth: 110 },
-	{ prop: 'fromGenderText', label: '来电人性别', minWidth: 100 },
-	{ prop: 'fullAddress', label: '事发地址', minWidth: 110 },
-	{ prop: 'orgLevelOneName', label: '一级部门', minWidth: 140 },
-	{ prop: 'actualHandleOrgName', label: '接办部门', minWidth: 140 },
-	{ prop: 'acceptType', label: '受理类型', minWidth: 100 },
-	{ prop: 'counterSignTypeText', label: '是否会签', minWidth: 90 },
+	{ prop: 'fromPhone', label: '来电号码', minWidth: 120, sortable: 'custom' },
+	{ prop: 'contact', label: '联系电话', minWidth: 120, sortable: 'custom' },
+	{ prop: 'fromName', label: '来电人姓名', minWidth: 120, sortable: 'custom' },
+	{ prop: 'fromGenderText', label: '来电人性别', minWidth: 120, sortable: 'custom' },
+	{ prop: 'fullAddress', label: '事发地址', minWidth: 110, sortable: 'custom' },
+	{ prop: 'orgLevelOneName', label: '一级部门', minWidth: 140, sortable: 'custom' },
+	{ prop: 'orgLevelTwoName', label: '二级部门', minWidth: 140, sortable: 'custom' },
+	{ prop: 'actualHandleOrgName', label: '接办部门', minWidth: 140, sortable: 'custom' },
+	{ prop: 'acceptType', label: '受理类型', minWidth: 110, sortable: 'custom' },
+	{ prop: 'counterSignTypeText', label: '是否会签', minWidth: 110, sortable: 'custom' },
 	{ prop: 'sourceChannel', label: '来源渠道', minWidth: 100 },
-	{ prop: 'orderTag', label: '工单标签', minWidth: 100 },
-	{ prop: 'allDurationHour', label: '办理时长(小时)', minWidth: 120 },
-	{ prop: 'hotspotSpliceName', label: '热点分类全称', minWidth: 150 },
-	{ prop: 'hotspotName', label: '热点分类', minWidth: 150 },
-	{ prop: 'acceptorName', label: '受理人', minWidth: 120 },
+	{ prop: 'orderTag', label: '工单标签', minWidth: 110, sortable: 'custom' },
+	{ prop: 'allDurationHour', label: '办理时长(小时)', minWidth: 150, sortable: 'custom' },
+	{ prop: 'hotspotSpliceName', label: '热点分类全称', minWidth: 150, sortable: 'custom' },
+	{ prop: 'hotspotName', label: '热点分类', minWidth: 150, sortable: 'custom' },
+	{ prop: 'acceptorName', label: '受理人', minWidth: 120, sortable: 'custom' },
 	{
 		prop: 'sensitiveText',
 		label: '敏感词',
@@ -679,8 +738,8 @@ const columns1 = ref<any[]>([
 		label: '办理结果',
 		isShow: false,
 	},
-	{ prop: 'seatEvaluateTxt', label: '坐席满意度', minWidth: 110 },
-	{ prop: 'orgEvaluateValue', label: '部门满意度', minWidth: 110 },
+	{ prop: 'seatEvaluateTxt', label: '坐席满意度', minWidth: 120, sortable: 'custom' },
+	{ prop: 'orgEvaluateValue', label: '部门满意度', minWidth: 120, sortable: 'custom' },
 	{ prop: 'operation', label: '操作', fixed: 'right', width: 140, align: 'center' },
 ]);
 // 获取查询条件基础信息
@@ -695,7 +754,7 @@ const getBaseData = async () => {
 			orderStatusOptions: 'orderStatusOptions',
 			identityTypeOptions: 'identityTypeOptions',
 			currentStepOptions: 'currentStepOptions',
-			orderTagOptions:'orderTags',
+			orderTagOptions: 'orderTags',
 		};
 		for (const key in mappings) {
 			state[key] = res.result?.[mappings[key]] ?? [];
@@ -706,6 +765,13 @@ const getBaseData = async () => {
 		console.log(error);
 	}
 };
+// 排序
+const sortChange = (val: any) => {
+	state.queryParams.SortField = val.order ? val.prop : null;
+	// 0 升序 1 降序
+	state.queryParams.SortRule = val.order ? (val.order == 'descending' ? 1 : 0) : null;
+	handleQuery();
+};
 // 手动查询,将页码设置为1
 const handleQuery = () => {
 	state.queryParams.PageIndex = 1;
@@ -728,52 +794,52 @@ const requestParams = ref<EmptyObjectType>({});
 const totalCount = ref(0);
 const totalLoading = ref(false);
 const queryList = (isQuery: boolean = false) => {
-		requestParams.value = Other.deepClone(state.queryParams);
-		requestParams.value.CreationTimeStart = state.queryParams.crTime === null ? null : state.queryParams.crTime[0]; // 生成时间
-		requestParams.value.CreationTimeEnd = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
-		Reflect.deleteProperty(requestParams.value, 'crTime'); // 删除无用的参数
-		requestParams.value.ExpiredTimeStart = state.queryParams.exTime === null ? null : state.queryParams.exTime[0]; // 期满时间
-		requestParams.value.ExpiredTimeEnd = state.queryParams.exTime === null ? null : state.queryParams.exTime[1];
-		Reflect.deleteProperty(requestParams.value, 'exTime'); // 删除无用的参数
-		requestParams.value.ActualHandleTimeStart = state.queryParams.doneTime === null ? null : state.queryParams.doneTime[0]; // 办结时间
-		requestParams.value.ActualHandleTimeEnd = state.queryParams.doneTime === null ? null : state.queryParams.doneTime[1];
-		Reflect.deleteProperty(requestParams.value, 'doneTime'); // 删除无用的参数
-		requestParams.value.QueryIndex = queryIndex.value; // 数据批次
-		requestParams.value.ContentRetrieval = state.ruleForm.content;
-		state.loading = true;
-		totalLoading.value = true;
-		orderListFixed(requestParams.value)
-			.then((response: any) => {
-				if (isQuery) {
-					// 如果是查询
-					totalTable.value = []; // 先清空
-					totalTable.value = response?.result;
-					state.total = totalTable.value.length;
-					state.tableData = getNeedArr(totalTable.value, state.queryParams.PageSize)[state.queryParams.PageIndex - 1]; //当前页的表格数据
-					queryIndex.value = 1; // 请求完成之后,页码加一避免重复
-				} else {
-					if (response?.result.length) queryIndex.value++;
-					totalTable.value = totalTable.value.concat(response?.result);
-					state.total = totalTable.value.length;
-					state.tableData = getNeedArr(totalTable.value, state.queryParams.PageSize)[state.queryParams.PageIndex - 1]; //当前页的表格数据
-				}
-				state.loading = false;
-			})
-			.then(() => {
-				// 查询总数
-				orderListCount(requestParams.value)
-					.then((count) => {
-						totalCount.value = count.result;
-						totalLoading.value = false;
-					})
-					.catch(() => {
-						totalLoading.value = false;
-					});
-			})
-			.catch(() => {
-				state.loading = false;
-				totalLoading.value = false;
-			});
+	requestParams.value = Other.deepClone(state.queryParams);
+	requestParams.value.CreationTimeStart = state.queryParams.crTime === null ? null : state.queryParams.crTime[0]; // 生成时间
+	requestParams.value.CreationTimeEnd = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
+	Reflect.deleteProperty(requestParams.value, 'crTime'); // 删除无用的参数
+	requestParams.value.ExpiredTimeStart = state.queryParams.exTime === null ? null : state.queryParams.exTime[0]; // 期满时间
+	requestParams.value.ExpiredTimeEnd = state.queryParams.exTime === null ? null : state.queryParams.exTime[1];
+	Reflect.deleteProperty(requestParams.value, 'exTime'); // 删除无用的参数
+	requestParams.value.ActualHandleTimeStart = state.queryParams.doneTime === null ? null : state.queryParams.doneTime[0]; // 办结时间
+	requestParams.value.ActualHandleTimeEnd = state.queryParams.doneTime === null ? null : state.queryParams.doneTime[1];
+	Reflect.deleteProperty(requestParams.value, 'doneTime'); // 删除无用的参数
+	requestParams.value.QueryIndex = queryIndex.value; // 数据批次
+	requestParams.value.ContentRetrieval = state.ruleForm.content;
+	state.loading = true;
+	totalLoading.value = true;
+	orderListFixed(requestParams.value)
+		.then((response: any) => {
+			if (isQuery) {
+				// 如果是查询
+				totalTable.value = []; // 先清空
+				totalTable.value = response?.result;
+				state.total = totalTable.value.length;
+				state.tableData = getNeedArr(totalTable.value, state.queryParams.PageSize)[state.queryParams.PageIndex - 1]; //当前页的表格数据
+				queryIndex.value = 1; // 请求完成之后,页码加一避免重复
+			} else {
+				if (response?.result.length) queryIndex.value++;
+				totalTable.value = totalTable.value.concat(response?.result);
+				state.total = totalTable.value.length;
+				state.tableData = getNeedArr(totalTable.value, state.queryParams.PageSize)[state.queryParams.PageIndex - 1]; //当前页的表格数据
+			}
+			state.loading = false;
+		})
+		.then(() => {
+			// 查询总数
+			orderListCount(requestParams.value)
+				.then((count) => {
+					totalCount.value = count.result;
+					totalLoading.value = false;
+				})
+				.catch(() => {
+					totalLoading.value = false;
+				});
+		})
+		.catch(() => {
+			state.loading = false;
+			totalLoading.value = false;
+		});
 };
 /** 重置按钮操作 */
 const drawerRuleFormRef = ref();
@@ -842,10 +908,10 @@ const onCreateRepeatEvent = () => {
 };
 // 设置撤销
 const orderRevokeRef = ref<RefType>();
-const onRevoke = ()=>{
+const onRevoke = () => {
 	const ids = proTableRef.value.selectedList.map((item: any) => item.id);
 	orderRevokeRef.value.openDialog(ids);
-}
+};
 // 工单省退回
 const orderReturnRef = ref<RefType>(); // 工单退回ref
 const onReturn = (row: any) => {

+ 17 - 4
src/views/business/overdue/index.vue

@@ -13,6 +13,7 @@
 				:toolButton="['refresh', 'setting', 'exportCurrent', 'exportAll']"
 				:exportMethod="exportOverdueList"
 				:exportParams="requestParams"
+				@sort-change="sortChange"
 			>
 				<template #table-search>
 					<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
@@ -78,26 +79,29 @@ const columns = ref<any[]>([
 		prop: 'startTime',
 		label: '受理时间',
 		minWidth: 160,
-		render: (scope) => {
+		render: (scope:any) => {
 			return <span>{formatDate(scope.row.startTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
 	{
 		prop: 'expiredTime',
 		label: '工单期满时间',
 		minWidth: 160,
-		render: (scope) => {
+		render: (scope:any) => {
 			return <span>{formatDate(scope.row.expiredTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
 	{ prop: 'actualHandleOrgName', label: '接办部门', minWidth: 140 },
 	{
 		prop: 'filedTime',
 		label: '办结时间',
 		minWidth: 160,
-		render: (scope) => {
+		render: (scope:any) => {
 			return <span>{formatDate(scope.row.filedTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
 	{ prop: 'orgLevelOneName', label: '一级部门', minWidth: 140 },
 	{ prop: 'acceptType', label: '受理类型', minWidth: 100 },
@@ -107,7 +111,7 @@ const columns = ref<any[]>([
 	{ prop: 'acceptorName', label: '受理人', minWidth: 120 },
 ]);
 // 定义变量内容
-const state = reactive({
+const state = reactive<any>({
 	queryParams: {
 		// 查询条件
 		PageIndex: 1,
@@ -116,11 +120,20 @@ const state = reactive({
 		No: null, // 工单编码
 		IsProvince: null, // 是否省工单
 		Delay: null, // 是否延期
+		SortField:null,
+		SortRule:null,
 	},
 	tableData: [{}], //表单
 	loading: false, // 加载
 	total: 0, // 总数
 });
+// 排序
+const sortChange = (val: any) => {
+	state.queryParams.SortField = val.order ? val.prop : null;
+	// 0 升序 1 降序
+	state.queryParams.SortRule = val.order ? (val.order == 'descending' ? 1 : 0) : null;
+	handleQuery();
+};
 // 手动查询,将页码设置为1
 const handleQuery = () => {
 	state.queryParams.PageIndex = 1;

+ 29 - 16
src/views/business/overdue/soon.vue

@@ -13,6 +13,7 @@
 				:toolButton="['refresh', 'setting', 'exportCurrent', 'exportAll']"
 				:exportMethod="exportOverdueSoon"
 				:exportParams="requestParams"
+				@sort-change="sortChange"
 			>
 				<template #table-search>
 					<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
@@ -61,45 +62,48 @@ import { defineAsyncComponent, onMounted, reactive, ref } from 'vue';
 import { FormInstance } from 'element-plus';
 import { formatDate } from '@/utils/formatTime';
 import { exportOverdueSoon, overdueSoonList } from '@/api/query/overdue';
+import Other from '@/utils/other';
 // 引入组件
 const OrderDetail = defineAsyncComponent(() => import('@/components/OrderDetail/index.vue')); // 工单详情
 
 const proTableRef = ref<RefType>(); // 表格ref
 // 表格配置项
 const columns = ref<any[]>([
-	{ prop: 'no', label: '工单编码', minWidth: 140 },
-	{ prop: 'isProvinceText', label: '省/市工单', minWidth: 90 },
-	{ prop: 'currentStepName', label: '当前节点', minWidth: 120 },
-	{ prop: 'delayText', label: '是否延期' },
-	{ prop: 'statusText', label: '工单状态', minWidth: 100 },
+	{ prop: 'no', label: '工单编码', minWidth: 140,sortable: 'custom', },
+	{ prop: 'isProvinceText', label: '省/市工单', minWidth: 110,sortable: 'custom', },
+	{ prop: 'currentStepName', label: '当前节点', minWidth: 120,sortable: 'custom', },
+	{ prop: 'delayText', label: '是否延期',sortable: 'custom', minWidth: 110 },
+	{ prop: 'statusText', label: '工单状态', minWidth: 110,sortable: 'custom', },
 	{ prop: 'title', label: '标题', minWidth: 200 },
 	{
 		prop: 'startTime',
 		label: '受理时间',
 		minWidth: 160,
-		render: (scope) => {
+		render: (scope:any) => {
 			return <span>{formatDate(scope.row.startTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
 	{
 		prop: 'expiredTime',
 		label: '工单期满时间',
 		minWidth: 160,
-		render: (scope) => {
+		render: (scope:any) => {
 			return <span>{formatDate(scope.row.expiredTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
 
-	{ prop: 'actualHandleOrgName', label: '接办部门', minWidth: 140 },
-	{ prop: 'acceptType', label: '受理类型', minWidth: 100 },
-	{ prop: 'counterSignTypeText', label: '是否会签', minWidth: 90 },
-	{ prop: 'orgLevelOneName', label: '一级部门', minWidth: 140 },
-	{ prop: 'sourceChannel', label: '来源渠道', minWidth: 100 },
-	{ prop: 'hotspotName', label: '热点分类', minWidth: 150 },
-	{ prop: 'acceptorName', label: '受理人', minWidth: 120 }
+	{ prop: 'actualHandleOrgName', label: '接办部门', minWidth: 140,sortable: 'custom', },
+	{ prop: 'acceptType', label: '受理类型', minWidth: 110 ,sortable: 'custom',},
+	{ prop: 'counterSignTypeText', label: '是否会签', minWidth: 110,sortable: 'custom', },
+	{ prop: 'orgLevelOneName', label: '一级部门', minWidth: 140,sortable: 'custom', },
+	{ prop: 'sourceChannel', label: '来源渠道', minWidth: 110,sortable: 'custom', },
+	{ prop: 'hotspotName', label: '热点分类', minWidth: 150,sortable: 'custom', },
+	{ prop: 'acceptorName', label: '受理人', minWidth: 120,sortable: 'custom' }
 ]);
 // 定义变量内容
-const state = reactive({
+const state = reactive<any>({
 	queryParams: {
 		// 查询条件
 		PageIndex: 1,
@@ -108,11 +112,20 @@ const state = reactive({
 		No: null, // 工单编码
 		IsProvince: null, // 是否省工单
 		Delay: null, // 是否延期
+		SortField:null,
+		SortRule:null,
 	},
 	tableData: [{}], //表单
 	loading: false, // 加载
 	total: 0, // 总数
 });
+// 排序
+const sortChange = (val: any) => {
+	state.queryParams.SortField = val.order ? val.prop : null;
+	// 0 升序 1 降序
+	state.queryParams.SortRule = val.order ? (val.order == 'descending' ? 1 : 0) : null;
+	handleQuery();
+};
 // 手动查询,将页码设置为1
 const handleQuery = () => {
 	state.queryParams.PageIndex = 1;
@@ -122,7 +135,7 @@ const handleQuery = () => {
 const requestParams = ref<EmptyObjectType>({});
 const queryList = () => {
 	state.loading = true;
-	requestParams.value = state.queryParams;
+	requestParams.value = Other.deepClone(state.queryParams);
 	overdueSoonList(state.queryParams)
 		.then((res) => {
 			state.tableData = res.result?.items ?? [];

+ 29 - 15
src/views/business/visit/components/Visit-detail.vue

@@ -80,11 +80,7 @@
 										type="primary"
 										class="ml8"
 										@click="recordFile"
-										v-if="
-											['ZiGong'].includes(themeConfig.appScope)
-												? state.recordingAbsolutePath && userInfos.isCenter
-												: state.recordingAbsolutePath
-										"
+										v-if="['ZiGong'].includes(themeConfig.appScope) ? state.recordingAbsolutePath && userInfos.isCenter : state.recordingAbsolutePath"
 										>人工回访录音</el-button
 									>
 								</el-form-item>
@@ -136,10 +132,8 @@
 											class="ml8"
 											@click="recordFile"
 											v-if="
-											['ZiGong'].includes(themeConfig.appScope)
-												? state.recordingAbsolutePath && userInfos.isCenter
-												: state.recordingAbsolutePath
-										"
+												['ZiGong'].includes(themeConfig.appScope) ? state.recordingAbsolutePath && userInfos.isCenter : state.recordingAbsolutePath
+											"
 											>人工回访录音</el-button
 										>
 									</el-form-item>
@@ -270,10 +264,8 @@
 											class="ml8"
 											@click="recordFile"
 											v-if="
-											['ZiGong'].includes(themeConfig.appScope)
-												? state.recordingAbsolutePath && userInfos.isCenter
-												: state.recordingAbsolutePath
-										"
+												['ZiGong'].includes(themeConfig.appScope) ? state.recordingAbsolutePath && userInfos.isCenter : state.recordingAbsolutePath
+											"
 											>人工回访录音</el-button
 										>
 									</el-form-item>
@@ -518,6 +510,13 @@
 					v-if="['ZiGong'].includes(themeConfig.appScope)"
 					>重办</el-button
 				>
+				<template v-if="['ZiGong'].includes(themeConfig.appScope)" v-auth="'business:visit:notConnected'">
+					<el-popconfirm title="您确定将当前回访设置为未接通?" @confirm="notConnected" width="260">
+						<template #reference>
+							<el-button type="primary" :loading="state.loading">设为未接通</el-button>
+						</template>
+					</el-popconfirm>
+				</template>
 				<el-button type="primary" @click="onSubmit(ruleFormRef)" :loading="state.loading">保存</el-button>
 			</span>
 		</template>
@@ -529,7 +528,7 @@
 </template>
 <script setup lang="tsx" name="orderFollowUpDetail">
 import { computed, defineAsyncComponent, reactive, ref, watch } from 'vue';
-import { ElMessage, FormInstance } from 'element-plus';
+import { ElMessage, ElMessageBox, FormInstance } from 'element-plus';
 import { commonEnum } from '@/utils/constants';
 import { storeToRefs } from 'pinia';
 import { useUserInfo } from '@/stores/userInfo';
@@ -540,6 +539,7 @@ import { callCenterOutbound } from '@/utils/callCenter';
 import { useThemeConfig } from '@/stores/themeConfig';
 import { formatDate } from '@/utils/formatTime';
 import { specialApplyBase } from '@/api/business/special';
+import { orderAverage } from '@/api/todo/order';
 
 // 引入组件
 const CommonAdvice = defineAsyncComponent(() => import('@/components/CommonAdvice/index.vue')); // 常用意见
@@ -796,6 +796,20 @@ const columns = ref<any[]>([
 		},
 	},
 ]);
+// 设为未接通
+const notConnected = () => {
+			/*state.loading = true;
+			orderAverage()
+				.then(() => {
+					state.loading = false;
+					ElMessage.success('设置未接通成功');
+					closeDialog();
+					emit('updateList');
+				})
+				.catch(() => {
+					state.loading = false;
+				});*/
+};
 defineExpose({
 	openDialog,
 	closeDialog,
@@ -848,7 +862,7 @@ defineExpose({
 }
 </style>
 <style lang="scss">
-.visit_dialog_no_modal{
+.visit_dialog_no_modal {
 	pointer-events: auto;
 	margin: 0 !important;
 	position: absolute;

+ 27 - 14
src/views/statistics/department/detailHandle.vue

@@ -13,6 +13,7 @@
 				:toolButton="['refresh', 'setting', 'exportCurrent', 'exportAll']"
 				:exportMethod="departmentOrderDetailExport"
 				:exportParams="requestParams"
+				@sort-change="sortChange"
 			>
         <template #table-search>
           <el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
@@ -61,6 +62,8 @@ const state = reactive<any>({
 		PageIndex: 1, // 当前页
 		PageSize: 20, // 每页条数
 		TypeId: 0,
+		SortField:null,
+		SortRule:null,
 	},
 	tableData: [], //表单
 	loading: false, // 加载
@@ -71,44 +74,54 @@ const route = useRoute(); // 路由
 const proTableRef = ref<RefType>(); // 表格ref
 // 表格配置项
 const columns = ref<any[]>([
-	{ prop: 'expiredStatusText', label: '超期状态', align: 'center', width: 80 },
-	{ prop: 'no', label: '工单编码', width: 140 },
-	{ prop: 'isProvinceText', label: '省/市工单', width: 90 },
-	{ prop: 'currentStepName', label: '当前节点', width: 100 },
-	{ prop: 'statusText', label: '工单状态', width: 100 },
+	{ prop: 'expiredStatusText', label: '超期状态', align: 'center', width: 110,sortable: 'custom' },
+	{ prop: 'no', label: '工单编码', width: 140,sortable: 'custom' },
+	{ prop: 'isProvinceText', label: '省/市工单', width: 110,sortable: 'custom' },
+	{ prop: 'currentStepName', label: '当前节点', width: 110,sortable: 'custom' },
+	{ prop: 'statusText', label: '工单状态', width: 110,sortable: 'custom' },
 	{ prop: 'title', label: '工单标题', width: 200 },
 	{
 		prop: 'startTime',
 		label: '受理时间',
 		width: 160,
-		render: (scope) => {
+		render: (scope:any) => {
 			return <span>{formatDate(scope.row.startTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
 	{
 		prop: 'expiredTime',
 		label: '工单期满时间',
 		width: 160,
-		render: (scope) => {
+		render: (scope:any) => {
 			return <span>{formatDate(scope.row.expiredTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
 	{
 		prop: 'filedTime',
 		label: '办结时间',
 		width: 160,
-		render: (scope) => {
+		render: (scope:any) => {
 			return <span>{formatDate(scope.row.filedTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
-	{ prop: 'orgLevelOneName', label: '一级部门', width: 140 },
-	{ prop: 'actualHandleOrgName', label: '接办部门', width: 140 },
-	{ prop: 'acceptType', label: '受理类型', width: 100 },
-	{ prop: 'counterSignTypeText', label: '是否会签', width: 90 },
+	{ prop: 'orgLevelOneName', label: '一级部门', width: 140,sortable: 'custom' },
+	{ prop: 'actualHandleOrgName', label: '接办部门', width: 140,sortable: 'custom' },
+	{ prop: 'acceptType', label: '受理类型', width: 110,sortable: 'custom' },
+	{ prop: 'counterSignTypeText', label: '是否会签', width: 110 ,sortable: 'custom'},
 	{ prop: 'sourceChannel', label: '来源渠道', minWidth: 100 },
-	{ prop: 'hotspotName', label: '热点分类', minWidth: 150 },
-	{ prop: 'acceptorName', label: '受理人', width: 120 }
+	{ prop: 'hotspotName', label: '热点分类', minWidth: 150,sortable: 'custom' },
+	{ prop: 'acceptorName', label: '受理人', width: 120,sortable: 'custom' }
 ]);
+// 排序
+const sortChange = (val: any) => {
+	state.queryParams.SortField = val.order ? val.prop : null;
+	// 0 升序 1 降序
+	state.queryParams.SortRule = val.order ? (val.order == 'descending' ? 1 : 0) : null;
+	handleQuery();
+};
 // 手动查询,将页码设置为1
 const handleQuery = () => {
 	state.queryParams.PageIndex = 1;

+ 26 - 13
src/views/statistics/department/detailHandleList.vue

@@ -13,6 +13,7 @@
 				:toolButton="['refresh', 'setting', 'exportCurrent', 'exportAll']"
 				:exportMethod="departmentOrderListExport"
 				:exportParams="requestParams"
+				@sort-change="sortChange"
 			>
         <template #table-search>
           <el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
@@ -63,47 +64,51 @@ const StatisticalTime = defineAsyncComponent(() => import('@/components/Statisti
 // 表格配置项
 const columns = ref<any[]>([
 	{ type: 'selection', width: 40, align: 'center' },
-	{ prop: 'statusText', label: '工单状态', width: 100 },
-	{ prop: 'sourceChannel', label: '来源渠道', width: 100 },
-	{ prop: 'currentStepName', label: '当前节点', width: 100 },
-	{ prop: 'no', label: '工单编码', width: 140 },
+	{ prop: 'statusText', label: '工单状态', width: 110 ,sortable: 'custom'},
+	{ prop: 'sourceChannel', label: '来源渠道', width: 110 },
+	{ prop: 'currentStepName', label: '当前节点', width: 110,sortable: 'custom' },
+	{ prop: 'no', label: '工单编码', width: 140,sortable: 'custom' },
 	{
 		prop: 'startTime',
 		label: '受理时间',
 		minWidth: 160,
-		render: (scope) => {
+		render: (scope:any) => {
 			return <span>{formatDate(scope.row.startTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
 	{ prop: 'title', label: '工单标题', width: 200 },
 	{
 		prop: 'expiredTime',
 		label: '工单期满时间',
 		minWidth: 160,
-		render: (scope) => {
+		render: (scope:any) => {
 			return <span>{formatDate(scope.row.expiredTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
-	{ prop: 'actualHandleOrgName', label: '接办部门', minWidth: 140 },
+	{ prop: 'actualHandleOrgName', label: '接办部门', minWidth: 140,sortable: 'custom' },
 	{
 		prop: 'actualHandleTime',
 		label: '接办时间',
 		minWidth: 160,
-		render: (scope) => {
+		render: (scope:any) => {
 			return <span>{formatDate(scope.row.actualHandleTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
 	{
 		prop: 'filedTime',
 		label: '办结时间',
 		minWidth: 160,
-		render: (scope) => {
+		render: (scope:any) => {
 			return <span>{formatDate(scope.row.filedTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
-	{ prop: 'hotspotName', label: '热点分类', minWidth: 150 },
-	{ prop: 'acceptType', label: '受理类型', width: 100 },
-	{ prop: 'acceptorName', label: '受理人', width: 120 }
+	{ prop: 'hotspotName', label: '热点分类', minWidth: 150,sortable: 'custom', },
+	{ prop: 'acceptType', label: '受理类型', width: 110,sortable: 'custom' },
+	{ prop: 'acceptorName', label: '受理人', width: 120 ,sortable: 'custom'}
 ]);
 // 定义变量内容
 const ruleFormRef = ref<RefType>(); // 表单ref
@@ -116,17 +121,25 @@ const state = reactive<any>({
 		StartTime: null,
 		EndTime: null,
     TypeId:0,
+		SortField:null,
+		SortRule:null,
 	},
 	tableData: [], //表单
 	loading: false, // 加载
 	total: 0, // 总数
 });
+// 排序
+const sortChange = (val: any) => {
+	state.queryParams.SortField = val.order ? val.prop : null;
+	// 0 升序 1 降序
+	state.queryParams.SortRule = val.order ? (val.order == 'descending' ? 1 : 0) : null;
+	handleQuery();
+};
 /** 搜索按钮操作 */
 const handleQuery = () => {
 	state.queryParams.PageIndex = 1;
 	queryList();
 };
-
 /** 获取列表 */
 const requestParams = ref<EmptyObjectType>({});
 const queryList = () => {

+ 31 - 18
src/views/statistics/department/detailSatisfied.vue

@@ -13,6 +13,7 @@
 				:toolButton="['refresh', 'setting', 'exportCurrent', 'exportAll']"
 				:exportMethod="departmentSatisfactionDetailExport"
 				:exportParams="requestParams"
+				@sort-change="sortChange"
 			>
         <template #table-search>
           <el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
@@ -64,49 +65,52 @@ const OrderDetail = defineAsyncComponent(() => import('@/components/OrderDetail/
 // 表格配置项
 const columns = ref<any[]>([
 	{ type: 'selection', width: 40, align: 'center' },
-	{ prop: 'no', label: '工单编码', width: 140 },
-	{ prop: 'reTransactNum', label: '重办次数' },
+	{ prop: 'no', label: '工单编码', width: 140,sortable: 'custom'},
+	{ prop: 'reTransactNum', label: '重办次数', minWidth: 110 ,sortable: 'custom'},
 	{ prop: 'orderScreenStatusText', label: '甄别', minWidth: 100 },
-	{ prop: 'visitContent', label: '回访信息', minWidth: 150 },
-	{ prop: 'hotspotSpliceName', label: '热点全称', minWidth: 150 },
-	{ prop: 'orgLevelOneName', label: '一级部门', minWidth: 140 },
-	{ prop: 'actualHandleOrgName', label: '接办部门', minWidth: 140 },
+	{ prop: 'visitContent', label: '回访信息', minWidth: 150,sortable: 'custom' },
+	{ prop: 'hotspotSpliceName', label: '热点全称', minWidth: 150,sortable: 'custom' },
+	{ prop: 'orgLevelOneName', label: '一级部门', minWidth: 140,sortable: 'custom' },
+	{ prop: 'actualHandleOrgName', label: '接办部门', minWidth: 140,sortable: 'custom' },
 	{
 		prop: 'creationTime',
 		label: '受理时间',
 		minWidth: 160,
-		render: (scope) => {
+		render: (scope:any) => {
 			return <span>{formatDate(scope.row.creationTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
-	{ prop: 'title', label: '工单标题', width: 200 },
-	{ prop: 'visitUser', label: '回访人', minWidth: 120 },
-	{ prop: 'visitOrgName', label: '回访部门', minWidth: 140 },
-	{ prop: 'visitTypeText', label: '回访方式', minWidth: 100 },
+	{ prop: 'title', label: '工单标题', width: 200 ,sortable: 'custom'},
+	{ prop: 'visitUser', label: '回访人', minWidth: 120 ,sortable: 'custom'},
+	{ prop: 'visitOrgName', label: '回访部门', minWidth: 140,sortable: 'custom' },
+	{ prop: 'visitTypeText', label: '回访方式', minWidth: 110,sortable: 'custom' },
 	{
 		prop: 'visitTime',
 		label: '回访时间',
 		minWidth: 160,
-		render: (scope) => {
+		render: (scope:any) => {
 			return <span>{formatDate(scope.row.visitTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
-	{ prop: 'orgProcessingResults', label: '满意度', minWidth: 120 },
-	{ prop: 'content', label: '受理内容', minWidth: 150 },
-	{ prop: 'fileOpinion', label: '承办意见', minWidth: 150 },
+	{ prop: 'orgProcessingResults', label: '满意度', minWidth: 120,sortable: 'custom' },
+	{ prop: 'content', label: '受理内容', minWidth: 150,sortable: 'custom' },
+	{ prop: 'fileOpinion', label: '承办意见', minWidth: 150 ,sortable: 'custom'},
 	{
 		prop: 'filedTime',
 		label: '办结时间',
 		minWidth: 160,
-		render: (scope) => {
+		render: (scope:any) => {
 			return <span>{formatDate(scope.row.filedTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
 	{ prop: 'operation', label: '操作', fixed: 'right', width: 90, align: 'center' },
 ]);
 // 定义变量内容
 const ruleFormRef = ref<RefType>(); // 表单ref
-const state = reactive({
+const state = reactive<any>({
 	queryParams: {
 		// 查询条件
 		PageIndex: 1,
@@ -114,12 +118,21 @@ const state = reactive({
 		TypeId: '1', //
 		LineNum: null,
 		crTime: defaultDate, // 时间默认今天开始到今天结束
-    TypeCode:0
+    TypeCode:0,
+		SortField:null,
+		SortRule:null,
 	},
 	tableData: [], //表单
 	loading: false, // 加载
 	total: 0, // 总数
 });
+// 排序
+const sortChange = (val: any) => {
+	state.queryParams.SortField = val.order ? val.prop : null;
+	// 0 升序 1 降序
+	state.queryParams.SortRule = val.order ? (val.order == 'descending' ? 1 : 0) : null;
+	handleQuery();
+};
 /** 搜索按钮操作 */
 const handleQuery = () => {
 	state.queryParams.PageIndex = 1;

+ 29 - 17
src/views/statistics/department/detailSatisfiedList.vue

@@ -13,6 +13,7 @@
 				:toolButton="['refresh', 'setting', 'exportCurrent', 'exportAll']"
 				:exportMethod="departmentSatisfactionListExport"
 				:exportParams="requestParams"
+				@sort-change="sortChange"
 			>
 				<template #table-search>
 					<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
@@ -161,43 +162,46 @@ const StatisticalTime = defineAsyncComponent(() => import('@/components/Statisti
 // 表格配置项
 const columns = ref<any[]>([
 	{ type: 'selection', width: 40, align: 'center' },
-	{ prop: 'no', label: '工单编码', width: 140 },
-	{ prop: 'reTransactNum', label: '重办次数' },
+	{ prop: 'no', label: '工单编码', width: 140 ,sortable: 'custom'},
+	{ prop: 'reTransactNum', label: '重办次数', minWidth: 110 ,sortable: 'custom'},
 	{ prop: 'orderScreenStatusText', label: '甄别', minWidth: 100 },
-	{ prop: 'visitContent', label: '回访信息', minWidth: 150 },
-	{ prop: 'hotspotSpliceName', label: '热点全称', minWidth: 150 },
-	{ prop: 'orgLevelOneName', label: '一级部门', minWidth: 140 },
-	{ prop: 'actualHandleOrgName', label: '接办部门', minWidth: 140 },
+	{ prop: 'visitContent', label: '回访信息', minWidth: 150,sortable: 'custom' },
+	{ prop: 'hotspotSpliceName', label: '热点全称', minWidth: 150,sortable: 'custom' },
+	{ prop: 'orgLevelOneName', label: '一级部门', minWidth: 140,sortable: 'custom' },
+	{ prop: 'actualHandleOrgName', label: '接办部门', minWidth: 140,sortable: 'custom' },
 	{
 		prop: 'creationTime',
 		label: '受理时间',
 		minWidth: 160,
-		render: (scope) => {
+		render: (scope:any) => {
 			return <span>{formatDate(scope.row.creationTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
-	{ prop: 'title', label: '工单标题', width: 200 },
-	{ prop: 'visitUser', label: '回访人', minWidth: 120 },
-	{ prop: 'visitOrgName', label: '回访部门', minWidth: 140 },
-	{ prop: 'visitTypeText', label: '回访方式', minWidth: 100 },
+	{ prop: 'title', label: '工单标题', width: 200,sortable: 'custom' },
+	{ prop: 'visitUser', label: '回访人', minWidth: 120,sortable: 'custom' },
+	{ prop: 'visitOrgName', label: '回访部门', minWidth: 140,sortable: 'custom' },
+	{ prop: 'visitTypeText', label: '回访方式', minWidth: 110,sortable: 'custom' },
 	{
 		prop: 'visitTime',
 		label: '回访时间',
 		minWidth: 160,
-		render: (scope) => {
+		render: (scope:any) => {
 			return <span>{formatDate(scope.row.visitTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
-	{ prop: 'orgProcessingResults', label: '满意度', minWidth: 120 },
-	{ prop: 'content', label: '受理内容', minWidth: 150 },
-	{ prop: 'fileOpinion', label: '承办意见', minWidth: 150 },
+	{ prop: 'orgProcessingResults', label: '满意度', minWidth: 120,sortable: 'custom' },
+	{ prop: 'content', label: '受理内容', minWidth: 150,sortable: 'custom' },
+	{ prop: 'fileOpinion', label: '承办意见', minWidth: 150 ,sortable: 'custom'},
 	{
 		prop: 'filedTime',
 		label: '办结时间',
 		minWidth: 160,
-		render: (scope) => {
+		render: (scope:any) => {
 			return <span>{formatDate(scope.row.filedTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
 	{ prop: 'operation', label: '操作', fixed: 'right', width: 90, align: 'center' },
 ]);
@@ -223,17 +227,25 @@ const state = reactive<any>({
 		OrgId: null,
 		AttitudeType: 1,
 		TypeCode: 0,
+		SortField:null,
+		SortRule:null,
 	},
 	tableData: [], //表单
 	loading: false, // 加载
 	total: 0, // 总数
 });
+// 排序
+const sortChange = (val: any) => {
+	state.queryParams.SortField = val.order ? val.prop : null;
+	// 0 升序 1 降序
+	state.queryParams.SortRule = val.order ? (val.order == 'descending' ? 1 : 0) : null;
+	handleQuery();
+};
 /** 搜索按钮操作 */
 const handleQuery = () => {
 	state.queryParams.PageIndex = 1;
 	queryList();
 };
-
 /** 获取列表 */
 const requestParams = ref<EmptyObjectType>({});
 const queryList = () => {

+ 28 - 16
src/views/statistics/department/dpSatisfied.vue

@@ -13,6 +13,7 @@
 				:toolButton="['refresh', 'setting', 'exportCurrent', 'exportAll']"
 				:exportMethod="departmentSatisfactionListExport"
 				:exportParams="requestParams"
+				@sort-change="sortChange"
 			>
 				<template #table-search>
 					<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
@@ -161,43 +162,46 @@ const StatisticalTime = defineAsyncComponent(() => import('@/components/Statisti
 // 表格配置项
 const columns = ref<any[]>([
 	{ type: 'selection', width: 40, align: 'center' },
-	{ prop: 'no', label: '工单编码', width: 140 },
-	{ prop: 'reTransactNum', label: '重办次数' },
+	{ prop: 'no', label: '工单编码', width: 140 ,sortable: 'custom'},
+	{ prop: 'reTransactNum', label: '重办次数', width: 110,sortable: 'custom' },
 	{ prop: 'orderScreenStatusText', label: '甄别', minWidth: 100 },
-	{ prop: 'visitContent', label: '回访信息', minWidth: 150 },
-	{ prop: 'hotspotSpliceName', label: '热点全称', minWidth: 150 },
-	{ prop: 'orgLevelOneName', label: '一级部门', minWidth: 140 },
-	{ prop: 'actualHandleOrgName', label: '接办部门', minWidth: 140 },
+	{ prop: 'visitContent', label: '回访信息', minWidth: 150,sortable: 'custom' },
+	{ prop: 'hotspotSpliceName', label: '热点全称', minWidth: 150,sortable: 'custom' },
+	{ prop: 'orgLevelOneName', label: '一级部门', minWidth: 140,sortable: 'custom' },
+	{ prop: 'actualHandleOrgName', label: '接办部门', minWidth: 140,sortable: 'custom' },
 	{
 		prop: 'creationTime',
 		label: '受理时间',
 		minWidth: 160,
-		render: (scope) => {
+		render: (scope:any) => {
 			return <span>{formatDate(scope.row.creationTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
 	{ prop: 'title', label: '工单标题', width: 200 },
-	{ prop: 'visitUser', label: '回访人', minWidth: 120 },
-	{ prop: 'visitOrgName', label: '回访部门', minWidth: 140 },
-	{ prop: 'visitTypeText', label: '回访方式', minWidth: 100 },
+	{ prop: 'visitUser', label: '回访人', minWidth: 120,sortable: 'custom' },
+	{ prop: 'visitOrgName', label: '回访部门', minWidth: 140,sortable: 'custom' },
+	{ prop: 'visitTypeText', label: '回访方式', minWidth: 110,sortable: 'custom' },
 	{
 		prop: 'visitTime',
 		label: '回访时间',
 		minWidth: 160,
-		render: (scope) => {
+		render: (scope:any) => {
 			return <span>{formatDate(scope.row.visitTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
-	{ prop: 'orgProcessingResults', label: '满意度', minWidth: 120 },
-	{ prop: 'content', label: '受理内容', minWidth: 150 },
-	{ prop: 'fileOpinion', label: '承办意见', minWidth: 150 },
+	{ prop: 'orgProcessingResults', label: '满意度', minWidth: 120,sortable: 'custom' },
+	{ prop: 'content', label: '受理内容', minWidth: 150,sortable: 'custom' },
+	{ prop: 'fileOpinion', label: '承办意见', minWidth: 150,sortable: 'custom' },
 	{
 		prop: 'filedTime',
 		label: '办结时间',
 		minWidth: 160,
-		render: (scope) => {
+		render: (scope:any) => {
 			return <span>{formatDate(scope.row.filedTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
 	{ prop: 'operation', label: '操作', fixed: 'right', width: 90, align: 'center' },
 ]);
@@ -223,18 +227,26 @@ const state = reactive<any>({
 		OrgId: null,
 		AttitudeType: 1,
 		TypeCode: 0,
+		SortField:null,
+		SortRule:null,
 	},
 	tableData: [], //表单
 	loading: false, // 加载
 	total: 0, // 总数
 	attitudeType:[]
 });
+// 排序
+const sortChange = (val: any) => {
+	state.queryParams.SortField = val.order ? val.prop : null;
+	// 0 升序 1 降序
+	state.queryParams.SortRule = val.order ? (val.order == 'descending' ? 1 : 0) : null;
+	handleQuery();
+};
 /** 搜索按钮操作 */
 const handleQuery = () => {
 	state.queryParams.PageIndex = 1;
 	queryList();
 };
-
 /** 获取列表 */
 const requestParams = ref<EmptyObjectType>({});
 const queryList = () => {

+ 184 - 0
src/views/todo/center/components/To-end.vue

@@ -0,0 +1,184 @@
+<template>
+	<el-dialog
+		v-model="state.dialogVisible"
+		draggable
+		title="批量归档"
+		append-to-body
+		@mouseup="mouseup"
+		:style="'transform: ' + state.transform + ';'"
+		ref="dialogRef"
+		destroy-on-close
+		@close="close"
+	>
+		<el-form :model="state.ruleForm" label-width="90px" ref="ruleFormRef">
+			<el-row :gutter="35">
+				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+					<el-form-item label="下一环节" prop="nextStepCode" :rules="[{ required: true, message: '请选择下一环节', trigger: 'change' }]">
+						<el-select v-model="state.ruleForm.nextStepCode" placeholder="请选择下一环节" class="w100">
+							<el-option label="归档" value="end" />
+						</el-select>
+					</el-form-item>
+				</el-col>
+				<!-- 复选框参数 -->
+				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+					<el-form-item prop="isUrgent">
+						<el-checkbox v-model="state.ruleForm.isUrgent" label="紧急" />
+						<el-checkbox v-model="state.ruleForm.isEvasive" label="推诿" />
+						<el-checkbox v-model="state.ruleForm.isInactively" label="不积极" />
+					</el-form-item>
+				</el-col>
+				<!-- 派单组流转到归档  派单组到一级部门 -->
+				<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
+					<el-form-item label="市州转办" prop="transpond" :rules="[{ required: false, message: '请选择市州转办', trigger: 'change' }]">
+						<el-select v-model="state.ruleForm.transpond" placeholder="请选择市州转办" class="w100" @change="changeTransPond">
+							<el-option :key="true" label="是" :value="true" />
+							<el-option :key="false" label="否" :value="false" />
+						</el-select>
+					</el-form-item>
+				</el-col>
+				<!-- 必填,若“是否市州互转”为“是”,则展示选择市州选择框 -->
+				<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" v-if="state.ruleForm.transpond">
+					<el-form-item prop="transpondCityObj" label-width="0px" :rules="[{ required: true, message: '请选择转办市州', trigger: 'change' }]">
+						<el-select
+							v-model="state.ruleForm.transpondCityObj"
+							placeholder="请选择转办市州"
+							class="w100"
+							value-key="dicDataValue"
+							@change="changeTranspondCity"
+							clearable
+						>
+							<el-option v-for="item in transpondCity" :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="办理意见" class="textarea" prop="opinion" :rules="[{ required: true, message: '请填写办理意见', trigger: 'blur' }]">
+						<common-advice
+							@chooseAdvice="chooseAdvice"
+							v-model="state.ruleForm.opinion"
+							placeholder="请填写办理意见"
+							:loading="state.loading"
+							:commonEnum="commonEnum.OrderCirculation"
+							:maxlength="2000"
+						/>
+					</el-form-item>
+				</el-col>
+				<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+					<el-form-item label="备注信息" prop="remark" :rules="[{ required: false, message: `请填写备注信息`, trigger: 'blur' }]">
+						<el-input v-model="state.ruleForm.remark" :rows="2" type="textarea" placeholder="请填写备注信息" />
+					</el-form-item>
+				</el-col>
+				<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+					<el-form-item label="附件" prop="additions">
+						<annex-list name="办理附件" businessId="" classify="办理上传" v-model:format="handleFiles" />
+					</el-form-item>
+				</el-col>
+			</el-row>
+		</el-form>
+		<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">办 理</el-button>
+			</span>
+		</template>
+	</el-dialog>
+</template>
+
+<script setup lang="ts">
+import { reactive, ref, defineAsyncComponent } from 'vue';
+import { FormInstance } from 'element-plus';
+import { throttle } from '@/utils/tools';
+import { commonEnum } from '@/utils/constants';
+import { orderComplement } from '@/api/business/order';
+
+// 引入组件
+const AnnexList = defineAsyncComponent(() => import('@/components/AnnexList/index.vue')); // 附件列表
+const CommonAdvice = defineAsyncComponent(() => import('@/components/CommonAdvice/index.vue')); // 常用意见
+
+// 定义子组件向父组件传值/事件
+const emit = defineEmits(['onSupplySuccess']);
+// 定义变量内容
+const state = reactive<any>({
+	dialogVisible: false,
+	ruleForm: {
+		opinion: null, // 补充内容
+		orderId: null, // 工单ID
+		caseSerial: null, // 工单编号
+		isUrgent: false,
+		isEvasive: false,
+		isInactively: false,
+		nextStepCode: 'end',
+		transpond:false,
+	},
+	orderDetail: {}, // 工单信息
+	fileList: [], // 附件列表
+	loading: false, // 提交按钮loading
+	transform: 'translate(0px, 0px)', // 滚动条位置
+});
+const ruleFormRef = ref<RefType>();
+const handleFiles = ref<EmptyArrayType>([]); // 附件列表
+// 打开弹窗
+const openDialog = async (val: any) => {
+	state.dialogVisible = true;
+};
+// 关闭弹窗
+const closeDialog = () => {
+	state.dialogVisible = false;
+};
+const close = () => {
+	ruleFormRef.value?.clearValidate();
+	ruleFormRef.value?.resetFields();
+};
+// 选中常用意见
+const chooseAdvice = (item: any) => {
+	state.ruleForm.opinion += item.content;
+};
+// 设置抽屉
+const dialogRef = ref<RefType>();
+const mouseup = () => {
+	state.transform = dialogRef.value.dialogContentRef.$el.style.transform;
+};
+const transpondCity = ref<EmptyArrayType>([]);
+// 选择是否市州互转
+const changeTransPond = (val: any) => {
+	if (!val) {
+		state.ruleForm.transpondCityValue = null;
+		state.ruleForm.transpondCityName = null;
+		state.ruleForm.transpondCityId = null;
+		state.ruleForm.transpondCityObj = null;
+	}
+};
+// 选择市州互转
+const changeTranspondCity = (val: any) => {
+	state.ruleForm.transpondCityId = val?.id ?? null;
+	state.ruleForm.transpondCityValue = val?.dicDataValue ?? null;
+	state.ruleForm.transpondCityName = val?.dicDataName ?? null;
+};
+// 提交
+const onSubmit = throttle((formEl: FormInstance | undefined) => {
+	if (!formEl) return;
+	formEl.validate((valid: boolean) => {
+		if (!valid) return;
+		state.loading = true;
+		let request = {
+			...state.ruleForm,
+			files: handleFiles.value,
+		};
+		orderComplement(request)
+			.then(() => {
+				state.loading = false;
+				state.dialogVisible = false;
+				emit('onSupplySuccess');
+			})
+			.catch(() => {
+				state.loading = false;
+				state.dialogVisible = false;
+			});
+	});
+}, 300);
+// 暴露变量
+defineExpose({
+	openDialog,
+	closeDialog,
+});
+</script>

+ 24 - 0
src/views/todo/center/index.vue

@@ -10,6 +10,7 @@
 				:total="state.total"
 				v-model:page-index="state.queryParams.PageIndex"
 				v-model:page-size="state.queryParams.PageSize"
+				@sort-change="sortChange"
 			>
 				<template #table-search>
 					<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent class="mb10" inline>
@@ -30,6 +31,9 @@
 					<el-button type="primary" @click="onJbExport" :disabled="!scope.isSelected" :loading="state.loading" v-auth="'todo:center:jbdExport'"
 						><SvgIcon name="iconfont icon-daochu" class="mr5" />交办单导出<span v-if="proTableRef?.selectedList?.length">({{proTableRef?.selectedList?.length}})</span>
 					</el-button>
+					<el-button type="primary" @click="onToEnd" :disabled="!scope.isSelected" :loading="state.loading" v-auth="'todo:center:toEnd:multiple'"
+					><SvgIcon name="ele-List" class="mr5" />批量归档<span v-if="proTableRef?.selectedList?.length">({{proTableRef?.selectedList?.length}})</span>
+					</el-button>
 					<el-button type="primary" @click="onAssignOrders" :loading="state.loading" v-auth="'todo:center:assignOrders'"
 					><SvgIcon name="ele-List" class="mr5" />分配工单
 					</el-button>
@@ -50,6 +54,8 @@
 		</div>
 		<!-- 工单平移 -->
 		<order-migration ref="orderMigrationRef" @updateList="queryList" />
+		<!-- 批量归档 -->
+		<to-end ref="toEndOrderRef" @updateList="queryList" />
 		<!--	更多查询	-->
 		<el-drawer v-model="drawer" title="更多查询" size="500px">
 			<el-form :model="state.queryParams" ref="drawerRuleFormRef" @submit.native.prevent label-width="100px">
@@ -136,6 +142,7 @@ import mittBus from '@/utils/mitt';
 // 引入组件
 const OrderDetail = defineAsyncComponent(() => import('@/components/OrderDetail/index.vue')); // 工单详情
 const OrderMigration = defineAsyncComponent(() => import('@/views/todo/center/Order-migration.vue')); // 工单平移
+const ToEnd = defineAsyncComponent(() => import('@/views/todo/center/components/To-end.vue')); // 批量归档
 
 // 定义变量内容
 const state = reactive<any>({
@@ -157,6 +164,8 @@ const state = reactive<any>({
 		StepName: null, // 当前节点名称
 		IsUrgent: null,
 		CenterToOrgHandlerName: null, // 派单员
+		SortField:null,
+		SortRule:null,
 	},
 	tableData: [], //表单
 	loading: false, // 加载
@@ -191,6 +200,7 @@ const columns = ref<any[]>([
 		render: (scope:any) => {
 			return <span>{formatDate(scope.row.startTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
 	{
 		prop: 'expiredTime',
@@ -199,6 +209,7 @@ const columns = ref<any[]>([
 		render: (scope:any) => {
 			return <span>{formatDate(scope.row.expiredTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
 	{
 		prop: 'filedTime',
@@ -207,6 +218,7 @@ const columns = ref<any[]>([
 		render: (scope:any) => {
 			return <span>{formatDate(scope.row.filedTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
 	{ prop: 'orgLevelOneName', label: '一级部门', minWidth: 140 },
 	{ prop: 'actualHandleOrgName', label: '接办部门', minWidth: 140 },
@@ -242,6 +254,13 @@ const getBaseData = async () => {
 		console.log(error);
 	}
 };
+// 排序
+const sortChange = (val: any) => {
+	state.queryParams.SortField = val.order ? val.prop : null;
+	// 0 升序 1 降序
+	state.queryParams.SortRule = val.order ? (val.order == 'descending' ? 1 : 0) : null;
+	handleQuery();
+};
 // 手动查询,将页码设置为1
 const handleQuery = () => {
 	state.queryParams.PageIndex = 1;
@@ -361,6 +380,11 @@ const onAssignOrders = () => {
 		})
 		.catch(() => {});
 };
+// 批量归档
+const toEndOrderRef = ref<RefType>();
+const onToEnd = ()=>{
+	toEndOrderRef.value.openDialog();
+}
 onMounted(() => {
 	getBaseData();
 	queryList();

+ 17 - 0
src/views/todo/order/index.vue

@@ -15,6 +15,7 @@
 				v-model:page-index="state.queryParams.PageIndex"
 				v-model:page-size="state.queryParams.PageSize"
 				v-if="state.queryParams.IsHandled === 'false'"
+				@sort-change="sortChange"
 			>
 				<template #table-search>
 					<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
@@ -75,6 +76,7 @@
 				v-model:page-index="state.queryParams.PageIndex"
 				v-model:page-size="state.queryParams.PageSize"
 				v-else
+				@sort-change="sortChange"
 			>
 				<template #table-search>
 					<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
@@ -198,6 +200,8 @@ const state = reactive<any>({
 		EndTime: null,
 		IsUrgent: null,
 		AreaCode: null,
+		SortField:null,
+		SortRule:null,
 	},
 	tableData: [], //表单
 	loading: false, // 加载
@@ -230,6 +234,7 @@ const columnsTodo = ref<any[]>([
 		render: (scope: any) => {
 			return <span>{formatDate(scope.row.creationTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
 	{
 		prop: 'startTime',
@@ -238,6 +243,7 @@ const columnsTodo = ref<any[]>([
 		render: (scope: any) => {
 			return <span>{formatDate(scope.row.startTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
 	{
 		prop: 'expiredTime',
@@ -246,6 +252,7 @@ const columnsTodo = ref<any[]>([
 		render: (scope: any) => {
 			return <span>{formatDate(scope.row.expiredTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
 	{ prop: 'acceptType', label: '受理类型', minWidth: 100 },
 	{ prop: 'sourceChannel', label: '来源渠道', minWidth: 100 },
@@ -280,6 +287,7 @@ const columnsDone = ref<any[]>([
 		render: (scope: any) => {
 			return <span>{formatDate(scope.row.creationTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
 	{
 		prop: 'startTime',
@@ -288,6 +296,7 @@ const columnsDone = ref<any[]>([
 		render: (scope: any) => {
 			return <span>{formatDate(scope.row.startTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
 	{
 		prop: 'expiredTime',
@@ -296,6 +305,7 @@ const columnsDone = ref<any[]>([
 		render: (scope: any) => {
 			return <span>{formatDate(scope.row.expiredTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
 	{ prop: 'orgLevelOneName', label: '一级部门', minWidth: 140 },
 	{ prop: 'actualHandleOrgName', label: '接办部门', minWidth: 140 },
@@ -308,6 +318,13 @@ const columnsDone = ref<any[]>([
 		label: '重办次数',
 	},
 ]);
+// 排序
+const sortChange = (val: any) => {
+	state.queryParams.SortField = val.order ? val.prop : null;
+	// 0 升序 1 降序
+	state.queryParams.SortRule = val.order ? (val.order == 'descending' ? 1 : 0) : null;
+	handleQuery();
+};
 // 手动查询,将页码设置为1
 const handleQuery = () => {
 	state.queryParams.PageIndex = 1;

+ 11 - 47
src/views/todo/seats/accept/zgAccept.vue

@@ -104,37 +104,6 @@
 										</el-radio-group>
 									</el-form-item>
 								</el-col>
-								<!--								<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-									<el-form-item label="证件类型" prop="licenceTypeObj" :rules="[{ required: false, message: '请选择证件类型', trigger: 'change' }]">
-										<el-select
-											v-model="state.ruleForm.licenceTypeObj"
-											placeholder="请选择证件类型"
-											class="w100"
-											clearable
-											value-key="dicDataValue"
-											@change="changeLicenceType"
-										>
-											<el-option v-for="item in state.licenceTypeOptions" :key="item.dicDataValue" :label="item.dicDataName" :value="item" />
-										</el-select>
-									</el-form-item>
-								</el-col>
-								&lt;!&ndash; 若“证件类型”有值,则证件号码必填 &ndash;&gt;
-								<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-									<el-form-item
-										label="证件号码"
-										prop="licenceNo"
-										:rules="[
-											{ required: state.ruleForm.licenceTypeCode, message: '请填写证件号码', trigger: 'blur' },
-											{
-												pattern: licenceNoPattern,
-												message: '证件号码格式错误',
-												trigger: 'blur',
-											},
-										]"
-									>
-										<el-input v-model="state.ruleForm.licenceNo" placeholder="请填写证件号码" clearable> </el-input>
-									</el-form-item>
-								</el-col>-->
 								<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
 									<el-form-item
 										label="联系电话"
@@ -147,11 +116,18 @@
 										<el-input v-model.trim="state.ruleForm.contact" placeholder="请填写联系电话" @blur="searchHistory" clearable> </el-input>
 									</el-form-item>
 								</el-col>
-								<!--								<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-									<el-form-item label="工作单位" prop="company" :rules="[{ required: false, message: '请填写工作单位', trigger: 'blur' }]">
-										<el-input v-model="state.ruleForm.company" placeholder="请填写工作单位" clearable> </el-input>
+								<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+									<el-form-item label="重点标签" prop="focusOnEventsArr" :rules="[{ required: false, message: '请选择重点标签', trigger: 'change' }]">
+										<el-checkbox-group v-model="state.ruleForm.focusOnEventsArr" @change="changeFocusEvent">
+											<el-checkbox
+												:label="item.dicDataName"
+												:value="item.dicDataValue"
+												v-for="item in state.focusOnEvents"
+												:key="item.dicDataValue"
+											/>
+										</el-checkbox-group>
 									</el-form-item>
-								</el-col>-->
+								</el-col>
 							</el-row>
 							<p class="border-title mb10">诉求信息</p>
 							<el-row>
@@ -187,18 +163,6 @@
 										</el-select>
 									</el-form-item>
 								</el-col>
-								<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-									<el-form-item label="重点标签" prop="focusOnEventsArr" :rules="[{ required: false, message: '请选择重点标签', trigger: 'change' }]">
-										<el-checkbox-group v-model="state.ruleForm.focusOnEventsArr" @change="changeFocusEvent">
-											<el-checkbox
-												:label="item.dicDataName"
-												:value="item.dicDataValue"
-												v-for="item in state.focusOnEvents"
-												:key="item.dicDataValue"
-											/>
-										</el-checkbox-group>
-									</el-form-item>
-								</el-col>
 								<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
 									<el-form-item label="推送分类" prop="orderPushTypes" :rules="[{ required: false, message: '请选择推送分类', trigger: 'change' }]">
 										<el-select

+ 13 - 46
src/views/todo/seats/index.vue

@@ -16,6 +16,7 @@
 				v-model:page-index="state.queryParams.PageIndex"
 				v-model:page-size="state.queryParams.PageSize"
 				:pagination="false"
+				@sort-change="sortChange"
 			>
 				<template #table-search>
 					<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
@@ -156,6 +157,8 @@ const state = reactive<any>({
 		AreaCode: null,
 		Status: null,
 		TypeCode:null,
+		SortField:null,
+		SortRule:null,
 	},
 	tableData: [], //表单
 	loading: false, // 加载
@@ -189,6 +192,7 @@ const columnsTodo = ref<any[]>([
 		render: (scope: any) => {
 			return <span>{formatDate(scope.row.creationTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
 	{
 		prop: 'startTime',
@@ -197,6 +201,7 @@ const columnsTodo = ref<any[]>([
 		render: (scope: any) => {
 			return <span>{formatDate(scope.row.startTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
 	{
 		prop: 'expiredTime',
@@ -205,6 +210,7 @@ const columnsTodo = ref<any[]>([
 		render: (scope: any) => {
 			return <span>{formatDate(scope.row.expiredTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
+		sortable: 'custom',
 	},
 	{ prop: 'acceptType', label: '受理类型', minWidth: 100 },
 	{ prop: 'sourceChannel', label: '来源渠道', minWidth: 100 },
@@ -216,52 +222,13 @@ const columnsTodo = ref<any[]>([
 	},
 	{ prop: 'operation', label: '操作', fixed: 'right', minWidth: 80, align: 'center' },
 ]);
-const columnsDone = ref<any[]>([
-	// 已办
-	{ type: 'selection', minWidth: 40, align: 'center' },
-	{ prop: 'expiredStatusText', label: '超期状态', align: 'center', minWidth: 80 },
-	{ prop: 'no', label: '工单编码', minWidth: 140 },
-	{ prop: 'isProvinceText', label: '省/市工单', minWidth: 90 },
-	{ prop: 'currentStepName', label: '当前节点', minWidth: 120 },
-	{ prop: 'statusText', label: '工单状态', minWidth: 100 },
-	{ prop: 'title', label: '工单标题', minWidth: 200 },
-	{ prop: 'counterSignTypeText', label: '是否会签', minWidth: 90 },
-	{
-		prop: 'creationTime',
-		label: '生成时间',
-		minWidth: 160,
-		render: (scope: any) => {
-			return <span>{formatDate(scope.row.creationTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
-		},
-	},
-	{
-		prop: 'startTime',
-		label: '受理时间',
-		minWidth: 160,
-		render: (scope: any) => {
-			return <span>{formatDate(scope.row.startTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
-		},
-	},
-	{
-		prop: 'expiredTime',
-		label: '工单期满时间',
-		minWidth: 160,
-		render: (scope: any) => {
-			return <span>{formatDate(scope.row.expiredTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
-		},
-	},
-	{ prop: 'orgLevelOneName', label: '一级部门', minWidth: 140 },
-	{ prop: 'actualHandleOrgName', label: '接办部门', minWidth: 140 },
-	{ prop: 'acceptType', label: '受理类型', minWidth: 100 },
-	{ prop: 'sourceChannel', label: '来源渠道', minWidth: 100 },
-	{ prop: 'hotspotName', label: '热点分类', minWidth: 150 },
-	{ prop: 'acceptorName', label: '受理人', minWidth: 100 },
-	{
-		prop: 'reTransactNum',
-		label: '重办次数',
-	},
-	{ prop: 'operation', label: '操作', fixed: 'right', width: 80, align: 'center' },
-]);
+// 排序
+const sortChange = (val: any) => {
+	state.queryParams.SortField = val.order ? val.prop : null;
+	// 0 升序 1 降序
+	state.queryParams.SortRule = val.order ? (val.order == 'descending' ? 1 : 0) : null;
+	handleQuery();
+};
 // 修改查询参数
 const changeTab = (val:string)=>{
 	switch (val) {