Parcourir la source

reactor:甄别调整;

zhangchong il y a 9 mois
Parent
commit
4cca6ebe0b

+ 1 - 1
.env.development

@@ -25,4 +25,4 @@ VITE_JTHS_API_URL=http://118.121.58.161:19021
 # 捷通华声AppKey
 VITE_JTHS_APPKEY=MTAwMDAx
 # 当前地州市
-VITE_CURRENT_CITY=yibin
+VITE_CURRENT_CITY=zigong

+ 4 - 4
src/components/ProcessAudit/index.vue

@@ -159,8 +159,8 @@
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" v-if="!returnArr.includes(state.processType)">
 						<el-form-item label="审批结果" prop="isPass" :rules="[{ required: true, message: '请选择审批结果', trigger: 'change' }]">
 							<el-radio-group v-model="state.ruleForm.isPass">
-								<el-radio :label="true">同意</el-radio>
-								<el-radio :label="false">不同意</el-radio>
+								<el-radio :value="true">同意</el-radio>
+								<el-radio :value="false">不同意</el-radio>
 							</el-radio-group>
 						</el-form-item>
 					</el-col>
@@ -382,8 +382,8 @@
 						<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
 							<el-form-item label="处理结果" prop="isResolved" :rules="[{ required: true, message: '请选择处理结果', trigger: 'change' }]">
 								<el-radio-group v-model="state.ruleForm.isResolved">
-									<el-radio :label="true">已得到解决</el-radio>
-									<el-radio :label="false">未得到解决</el-radio>
+									<el-radio :value="true">已得到解决</el-radio>
+									<el-radio :value="false">未得到解决</el-radio>
 								</el-radio-group>
 							</el-form-item>
 						</el-col>

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

@@ -86,7 +86,7 @@
 
 			<!-- 可用挂断 -->
 			<template v-if="telStatusInfo.isDutyOn && activeArr.includes('hangup')">
-				<div class="item active" :class="state.active.includes('hangup') ? 'active' : ''" @click="onControlClick('hangup')" title="挂断">
+				<div class="item active" @click="onControlClick('hangup')" title="挂断">
 					<SvgIcon name="iconfont icon-hangup" class="icon mr3" size="16px" />
 					<span>挂断</span>
 				</div>

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

@@ -286,7 +286,7 @@ import { storeToRefs } from 'pinia';
 import { useUserInfo } from '@/stores/userInfo';
 import { callCenterIsOnThePhone, callCenterIsSignIn, callCenterWs, currentTel } from '@/utils/callCenter';
 import mittBus from '@/utils/mitt';
-import { callCenterSignIn, callCenterSignOut, getCallCenterGroupList, getCallCenterList, getCallCenterStatus } from '@/api/callCenter';
+import { callCenterSignIn, callCenterSignOut, getCallCenterGroupList, getCallCenterList } from '@/api/callCenter';
 import { getCurrentCityConfig } from '@/utils/appConfig';
 import {useTimeoutFn} from "@vueuse/shared/index";
 const state = reactive({

+ 1 - 1
src/utils/appConfig.ts

@@ -50,7 +50,7 @@ export const getCurrentCityConfig = () => {
 				loginBg: 'login/login_bg.png',
 				isShowLogo: false,
 				favicon: 'zigong/favicon.ico',
-				callCenterSocketUrl: isProduction() ? 'ws://123.56.10.71:7681' : ' ws://123.56.10.71:7681', // 呼叫中心socket地址
+				callCenterSocketUrl: isProduction() ? 'ws://171.94.154.2:7681' : ' ws://123.56.10.71:7681', // 呼叫中心socket地址
 				recordPrefix: isProduction() ? 'http://123.56.10.71:8066/' : 'http://123.56.10.71:8066/', // 播放录音地址前缀
 				recordDownLoadPrefix: isProduction() ? 'http://123.56.10.71:8066/' : 'http://123.56.10.71:8066/', // 录音地址下载前缀
 			};

+ 2 - 2
src/views/auxiliary/smartCallOut/components/Create-task.vue

@@ -26,8 +26,8 @@
 				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
 					<el-form-item label="节日禁呼" prop="festivalBan" :rules="[{ required: true, message: '请选择节日禁呼', trigger: 'change' }]">
 						<el-radio-group v-model="state.ruleForm.festivalBan">
-							<el-radio :label="1">是</el-radio>
-							<el-radio :label="0">否</el-radio>
+							<el-radio :value="1">是</el-radio>
+							<el-radio :value="0">否</el-radio>
 						</el-radio-group>
 					</el-form-item>
 				</el-col>

+ 57 - 35
src/views/business/discern/apply.vue

@@ -178,35 +178,31 @@
 				:total="state.total"
 				v-model:page-index="state.queryParams.PageIndex"
 				v-model:page-size="state.queryParams.PageSize"
+        @sort-change="sortChange"
 			>
 				<template #title="{ row }">
 					<order-detail :order="row.order" @updateList="queryList">{{ row.order?.title }}</order-detail>
 				</template>
-				<template #visitTarget="{ row }">
-					<span v-if="row.visitTarget === 20">{{ row.visitOrgName }}</span>
-				</template>
-				<template #orgProcessingResults="{ row }">
-					<span v-if="row.visitTarget === 20">{{ row.orgProcessingResults?.value }}</span>
-				</template>
-				<template #orgHandledAttitude="{ row }">
-					<span v-if="row.visitTarget === 20">{{ row.orgHandledAttitude?.value }}</span>
-				</template>
-				<template #orgNoSatisfiedReason="{ row }">
-					<span v-if="row.visitTarget === 20">
-						{{ row.orgNoSatisfiedReason?.map((item) => item.value).join(',') }}
-					</span>
-				</template>
 				<!-- 表格操作 -->
 				<template #operation="{ row }">
 					<el-button link type="primary" @click="submitDiscern(row)" title="发起甄别申请" v-auth="'business:discern:apply:submit'">
 						发起甄别
 					</el-button>
-					<order-detail :order="row.order" @updateList="queryList" />
+          <el-button link type="primary" @click="onDetail(row)" title="查看甄别详情">
+            甄别详情
+          </el-button>
+          <el-button link type="primary" @click="visitDetail(row)" title="查看回访明细">
+            回访明细
+          </el-button>
 				</template>
 			</ProTable>
 		</el-card>
 		<!-- 流程审批 -->
 		<process-audit ref="processAuditRef" @orderProcessSuccess="queryList" />
+    <!-- 回访详情 -->
+    <visit-detail-com ref="visitDetailRef" @updateList="queryList" />
+    <!-- 甄别详情 -->
+    <discern-detail ref="discernDetailRef" @updateList="queryList" />
 	</div>
 </template>
 <script setup lang="tsx" name="businessDiscernApply">
@@ -220,24 +216,36 @@ import Other from "@/utils/other";
 // 引入组件
 const ProcessAudit = defineAsyncComponent(() => import('@/components/ProcessAudit/index.vue')); // 流程审批
 const OrderDetail = defineAsyncComponent(() => import('@/components/OrderDetail/index.vue')); // 工单详情
+const VisitDetailCom = defineAsyncComponent(() => import('@/views/business/visit/component/Visit-detail.vue')); // 回访
+const DiscernDetail = defineAsyncComponent(() => import('@/views/business/discern/components/Discern-detail.vue')); // 甄别详情
 // 定义变量内容
 const ruleFormRef = ref<RefType>(); // 表单ref
 const proTableRef = ref<RefType>(); // 表格ref
 // 表格配置项
 const columns = ref<any[]>([
-	{ prop: 'order.no', label: '工单编码', minWidth: 150 },
+  { prop: 'screenSendBackText', label: '甄别退回' },
+	{ prop: 'order.no', label: '工单编码', minWidth: 140 },
 	{ prop: 'order.isProvinceText', label: '省/市工单', minWidth: 90 },
 	{ prop: 'order.title', label: '工单标题', minWidth: 200 },
+  { prop: 'order.acceptType', label: '受理类型', minWidth: 100 },
 	{ prop: 'order.sourceChannel', label: '来源渠道', minWidth: 100 },
-	{ prop: 'order.acceptType', label: '受理类型', minWidth: 100 },
-	{ prop: 'order.counterSignTypeText', label: '是否会签', minWidth: 90 },
-	{ prop: 'order.acceptorName', label: '受理人', minWidth: 120 },
 	{ prop: 'order.orgLevelOneName', label: '一级部门', minWidth: 140 },
 	{ prop: 'order.currentHandleOrgName', label: '接办部门', minWidth: 140 },
+  { prop: 'visitOrgName', label: '被回访部门', minWidth: 140 },
+  {
+    prop: 'order.startTime',
+    label: '受理时间',
+    minWidth: 160,
+    sortable:'custom',
+    render: (scope) => {
+      return <span>{formatDate(scope.row.order?.startTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
+    },
+  },
 	{
 		prop: 'order.actualHandleTime',
 		label: '接办时间',
 		minWidth: 160,
+    sortable:'custom',
 		render: (scope) => {
 			return <span>{formatDate(scope.row.order?.actualHandleTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
@@ -246,31 +254,21 @@ const columns = ref<any[]>([
 		prop: 'order.filedTime',
 		label: '办结时间',
 		minWidth: 160,
+    sortable:'custom',
 		render: (scope) => {
 			return <span>{formatDate(scope.row.order?.filedTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
 	},
-	{
-		prop: 'order.startTime',
-		label: '受理时间',
-		minWidth: 160,
-		render: (scope) => {
-			return <span>{formatDate(scope.row.order?.startTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
-		},
-	},
 	{
 		prop: 'orderVisit.visitTime',
 		label: '回访时间',
 		minWidth: 160,
+    sortable:'custom',
 		render: (scope) => {
 			return <span>{formatDate(scope.row.orderVisit?.visitTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
 	},
-	{ prop: 'visitTarget', label: '被回访部门', minWidth: 140 },
-	{ prop: 'orgProcessingResults', label: '部门办件结果', minWidth: 120 },
-	// { prop: 'orgHandledAttitude', label: '部门办件态度', minWidth: 150 },
-	{ prop: 'orgNoSatisfiedReason', label: '不满意原因', minWidth: 120 },
-	{ prop: 'operation', label: '操作', fixed: 'right', minWidth: 160, align: 'center' },
+	{ prop: 'operation', label: '操作', fixed: 'right', width: 240, align: 'center' },
 ]);
 const state = reactive<any>({
 	queryParams: {
@@ -299,7 +297,9 @@ const state = reactive<any>({
     EndFiledTime:null,
     hfTime:[], // 回访时间
     VisitTime:null,
-    EndVisitTime:null
+    EndVisitTime:null,
+    SortField:null,
+    SortRule:null
 	},
 	tableData: [], //表单
 	loading: false, // 加载
@@ -309,8 +309,6 @@ const state = reactive<any>({
 	counterSignTypeOptions: [], // 会签类型
 	acceptTypeOptions: [], // 受理类型
 	sourceChannelOptions: [], // 来源渠道
-	dissatisfiedReason: [], // 不满意原因
-	visitSatisfaction: [], // 满意度
 });
 const searchCol = ref(true); // 展开/收起
 // 展开/收起
@@ -371,6 +369,13 @@ const resetQuery = (formEl: FormInstance | undefined) => {
 	state.queryParams.IsHomePage = null;
 	queryList();
 };
+// 排序
+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;
+  queryList();
+};
 // 甄别审批
 const processAuditRef = ref<RefType>(); // 流程审批ref
 const submitDiscern = (row: any) => {
@@ -392,6 +397,23 @@ const submitDiscern = (row: any) => {
 	};
 	processAuditRef.value.openDialog(params);
 };
+// 查看甄别详情
+const discernDetailRef = ref<RefType>();
+const onDetail = (row:any)=>{
+  console.log(row,'1111')
+  if(row && row.orderScreens && row.orderScreens.length){
+      const params = {
+        id:row.orderScreens[0].id,
+      }
+    discernDetailRef.value.openDialog(params);
+  }
+
+}
+// 查看回访明细
+const visitDetailRef = ref<RefType>();
+const visitDetail = (row:any)=>{
+  visitDetailRef.value.openDialog(row.orderVisit, '回访明细');
+}
 const historyParams = history.state;
 onMounted(async () => {
 	if (historyParams.IsHomePage) {

+ 298 - 91
src/views/business/discern/index.vue

@@ -2,41 +2,201 @@
 	<div class="business-discern-container layout-pd">
 		<!-- 搜索  -->
 		<el-card shadow="never">
-			<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
-				<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="Status">
-					<el-select v-model="state.queryParams.Status" placeholder="请选择甄别申请状态" @change="handleQuery">
-						<el-option v-for="item in state.screenStatus" :value="item.key" :key="item.key" :label="item.value" />
-					</el-select>
-				</el-form-item>
-				<!--						<el-form-item label="甄别类型" prop="AcceptType">
-							<el-select v-model="state.queryParams.AcceptType" placeholder="请选择甄别类型" class="w100">
-								<el-option v-for="item in state.screenType" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName" />
-							</el-select>
-						</el-form-item>-->
-				<el-form-item label="甄别时间" prop="exTime">
-					<el-date-picker
-						v-model="state.queryParams.exTime"
-						type="datetimerange"
-						unlink-panels
-						range-separator="至"
-						start-placeholder="开始时间"
-						end-placeholder="结束时间"
-						:shortcuts="shortcuts"
-						@change="timeStartChangeCr"
-						value-format="YYYY-MM-DD[T]HH:mm:ss"
-            :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="resetQuery(ruleFormRef)" v-waves class="default-button" :loading="state.loading">
-						<SvgIcon name="ele-Refresh" class="mr5" />重置
-					</el-button>
-				</el-form-item>
-			</el-form>
+      <el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent label-width="100px">
+        <el-row>
+          <el-col>
+            <el-form-item label="快捷查询" prop="DataScope">
+              <el-segmented
+                  :options="[
+									{
+										value: 0,
+										label: '全部',
+									},
+									{
+										value: 1,
+										label: '我发起的',
+									},
+								]"
+                  v-model="state.queryParams.DataScope"
+                  @change="handleQuery"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
+            <el-form-item label="甄别状态" prop="Status">
+              <el-select v-model="state.queryParams.Status" placeholder="请选择甄别状态" @change="handleQuery" clearable>
+                <el-option v-for="item in state.screenStatus" :value="item.key" :key="item.key" :label="item.value" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
+            <el-form-item label="工单编码" prop="No">
+              <el-input v-model="state.queryParams.No" placeholder="工单编码" clearable @keyup.enter="handleQuery" />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
+            <el-form-item label="工单标题" prop="Title">
+              <el-input v-model="state.queryParams.Title" placeholder="工单标题" clearable @keyup.enter="handleQuery" />
+            </el-form-item>
+          </el-col>
+          <transition name="el-zoom-in-top" v-show="!searchCol">
+            <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
+              <el-form-item label="省/市工单" prop="IsProvince">
+                <el-select v-model="state.queryParams.IsProvince" clearable placeholder="请选择省/市工单" @change="handleQuery">
+                  <el-option  :value="false" label="市工单" />
+                  <el-option  :value="true" label="省工单" />
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </transition>
+          <transition name="el-zoom-in-top" v-show="!searchCol">
+            <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
+              <el-form-item label="受理类型" prop="AcceptType">
+                <el-select v-model="state.queryParams.AcceptType" placeholder="请选择受理类型" clearable class="w100" @change="handleQuery">
+                  <el-option v-for="item in state.acceptTypeOptions" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName" />
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </transition>
+          <transition name="el-zoom-in-top" v-show="!searchCol">
+            <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
+              <el-form-item label="热点分类" prop="HotspotSpliceName">
+                <el-input v-model="state.queryParams.HotspotSpliceName" placeholder="热点分类名称" clearable @keyup.enter="handleQuery" />
+              </el-form-item>
+            </el-col>
+          </transition>
+          <transition name="el-zoom-in-top" v-show="!searchCol">
+            <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
+              <el-form-item label="来源渠道" prop="SourceChannel">
+                <el-select v-model="state.queryParams.SourceChannel" placeholder="请选择来源渠道" clearable class="w100" @change="handleQuery">
+                  <el-option v-for="item in state.sourceChannelOptions" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName" />
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </transition>
+          <transition name="el-zoom-in-top" v-show="!searchCol">
+            <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
+              <el-form-item label="一级部门" prop="OrgLevelOneName">
+                <el-input v-model="state.queryParams.OrgLevelOneName" placeholder="一级部门名称" clearable @keyup.enter="handleQuery" />
+              </el-form-item>
+            </el-col>
+          </transition>
+          <transition name="el-zoom-in-top" v-show="!searchCol">
+            <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
+              <el-form-item label="接办部门" prop="CurrentHandleOrgName">
+                <el-input v-model="state.queryParams.CurrentHandleOrgName" placeholder="接办部门名称" clearable @keyup.enter="handleQuery" />
+              </el-form-item>
+            </el-col>
+          </transition>
+          <transition name="el-zoom-in-top" v-show="!searchCol">
+            <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
+              <el-form-item label="被回访部门" prop="VisitOrgName">
+                <el-input v-model="state.queryParams.VisitOrgName" placeholder="被回访部门名称" clearable @keyup.enter="handleQuery" />
+              </el-form-item>
+            </el-col>
+          </transition>
+          <transition name="el-zoom-in-top">
+            <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6" v-show="!searchCol">
+              <el-form-item label="受理时间" prop="slTime">
+                <el-date-picker
+                    v-model="state.queryParams.slTime"
+                    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-col>
+          </transition>
+          <transition name="el-zoom-in-top">
+            <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6" v-show="!searchCol">
+              <el-form-item label="接办时间" prop="jbTime">
+                <el-date-picker
+                    v-model="state.queryParams.jbTime"
+                    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-col>
+          </transition>
+          <transition name="el-zoom-in-top">
+            <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6" v-show="!searchCol">
+              <el-form-item label="办结时间" prop="bjTime">
+                <el-date-picker
+                    v-model="state.queryParams.bjTime"
+                    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-col>
+          </transition>
+          <transition name="el-zoom-in-top">
+            <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6" v-show="!searchCol">
+              <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-col>
+          </transition>
+          <transition name="el-zoom-in-top" v-show="!searchCol">
+            <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
+              <el-form-item label="联系电话" prop="Contact">
+                <el-input v-model="state.queryParams.Contact" placeholder="联系电话" clearable @keyup.enter="handleQuery" />
+              </el-form-item>
+            </el-col>
+          </transition>
+          <transition name="el-zoom-in-top" v-show="!searchCol">
+            <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
+              <el-form-item label="来电号码" prop="FromPhone">
+                <el-input v-model="state.queryParams.FromPhone" placeholder="来电号码" clearable @keyup.enter="handleQuery" />
+              </el-form-item>
+            </el-col>
+          </transition>
+          <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
+            <el-form-item label=" ">
+              <div class="flex-end w100">
+                <el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
+                <el-button @click="resetQuery(ruleFormRef)" class="default-button" :loading="state.loading">
+                  <SvgIcon name="ele-Refresh" class="mr5" />重置
+                </el-button>
+                <el-button link type="primary" @click="closeSearch" :loading="state.loading">
+                  {{ searchCol ? '展开' : '收起' }}
+                  <SvgIcon :class="{ 'is-reverse': searchCol }" name="ele-ArrowUp" class="mr5 arrow" size="18px" />
+                </el-button>
+              </div>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
 		</el-card>
 		<el-card shadow="never">
 			<ProTable
@@ -48,6 +208,7 @@
 				:total="state.total"
 				v-model:page-index="state.queryParams.PageIndex"
 				v-model:page-size="state.queryParams.PageSize"
+        @sort-change="sortChange"
 			>
 				<template #title="{ row }">
 					<order-detail :order="row.order" @updateList="queryList">{{ row.order?.title }}</order-detail>
@@ -55,7 +216,9 @@
 				<!-- 表格操作 -->
 				<template #operation="{ row }">
 					<el-button link type="primary" @click="onDetail(row)" title="查看甄别详情"> 甄别详情 </el-button>
-					<order-detail :order="row.order" @updateList="queryList" />
+          <el-button link type="primary" @click="visitDetail(row)" title="查看回访明细">
+            回访明细
+          </el-button>
 				</template>
 			</ProTable>
 		</el-card>
@@ -63,6 +226,8 @@
 		<discern-detail ref="discernDetailRef" @updateList="queryList" />
 		<!-- 甄别修改 -->
 		<discern-edit ref="discernEditRef" @updateList="queryList" />
+    <!-- 回访详情 -->
+    <visit-detail-com ref="visitDetailRef" @updateList="queryList" />
 	</div>
 </template>
 <script setup lang="tsx" name="businessDiscern">
@@ -71,114 +236,124 @@ import { FormInstance } from 'element-plus';
 import { formatDate } from '@/utils/formatTime';
 import { defaultTimeStartEnd, shortcuts } from "@/utils/constants";
 import { screenBaseData, screenDetail, screenList } from '@/api/business/discern';
-import other from '@/utils/other';
+import Other from "@/utils/other";
 
 // 引入组件
 const DiscernDetail = defineAsyncComponent(() => import('@/views/business/discern/components/Discern-detail.vue')); // 甄别详情
 const DiscernEdit = defineAsyncComponent(() => import('@/views/business/discern/components/Discern-edit.vue')); //  甄别修改
 const AnnexList = defineAsyncComponent(() => import('@/components/AnnexList/index.vue')); // 附件列表
 const OrderDetail = defineAsyncComponent(() => import('@/components/OrderDetail/index.vue')); // 工单详情
+const VisitDetailCom = defineAsyncComponent(() => import('@/views/business/visit/component/Visit-detail.vue')); // 回访
 
 const proTableRef = ref<RefType>(); // 表格ref
 // 表格配置项
 const columns = ref<any[]>([
-	{ prop: 'order.no', label: '工单编码', minWidth: 140 },
 	{ prop: 'statusText', label: '甄别状态', minWidth: 100 },
+  { prop: 'statusText', label: '当前节点', minWidth: 100 },
+  { prop: 'order.no', label: '工单编码', minWidth: 140 },
 	{ prop: 'order.isProvinceText', label: '省/市工单', minWidth: 90 },
 	{ prop: 'order.title', label: '工单标题', minWidth: 200 },
-	{ prop: 'order.sourceChannel', label: '来源渠道', minWidth: 100 },
 	{ prop: 'order.acceptType', label: '受理类型', minWidth: 100 },
 	{ prop: 'order.hotspotName', label: '热点分类', minWidth: 150 },
-	{ prop: 'order.acceptorName', label: '受理人', minWidth: 120 },
+  { prop: 'order.sourceChannel', label: '来源渠道', minWidth: 100 },
 	{ prop: 'order.orgLevelOneName', label: '一级部门', minWidth: 140 },
 	{ prop: 'order.currentHandleOrgName', label: '接办部门', minWidth: 140 },
+  { prop: 'visitDetail.visitOrgName', label: '回访部门', minWidth: 140 },
 	{
 		prop: 'order.startTime',
 		label: '受理时间',
 		minWidth: 160,
+    sortable:'custom',
 		render: (scope) => {
 			return <span>{formatDate(scope.row.order?.startTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
 	},
+  {
+    prop: 'order.actualHandleTime',
+    label: '接办时间',
+    minWidth: 160,
+    sortable:'custom',
+    render: (scope) => {
+      return <span>{formatDate(scope.row.order?.actualHandleTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
+    },
+  },
 	{
 		prop: 'order.filedTime',
 		label: '办结时间',
 		minWidth: 160,
+    sortable:'custom',
 		render: (scope) => {
 			return <span>{formatDate(scope.row.order?.filedTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
 	},
-	{
-		prop: 'visit.publishTime',
-		label: '发布时间',
-		minWidth: 160,
-		render: (scope) => {
-			return <span>{formatDate(scope.row.visit?.publishTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
-		},
-	},
 	{
 		prop: 'visit.visitTime',
 		label: '回访时间',
 		minWidth: 160,
+    sortable:'custom',
 		render: (scope) => {
 			return <span>{formatDate(scope.row.visit?.visitTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
 		},
 	},
-	{ prop: 'order.counterSignTypeText', label: '是否会签', minWidth: 90 },
-	{ prop: 'visit.employee', label: '回访人', minWidth: 120  },
-	{ prop: 'visitDetail.visitOrgName', label: '被回访部门', minWidth: 140 },
-	{
-		prop: 'creationTime',
-		label: '甄别申请时间',
-		minWidth: 160,
-		render: (scope) => {
-			return <span>{formatDate(scope.row.creationTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
-		},
-	},
-	{ prop: 'creatorName', label: '甄别申请人', minWidth: 120 },
-	{ prop: 'creatorOrgName', label: '甄别申请部门', minWidth: 140 },
-	{ prop: 'typeDicName', label: '甄别申请类型', minWidth: 120 },
-	{ prop: 'content', label: '甄别申请原因', minWidth: 150 },
-	{ prop: 'operation', label: '操作', fixed: 'right', minWidth: 160, align: 'center' },
+	{ prop: 'operation', label: '操作', fixed: 'right', width: 160, align: 'center' },
 ]);
 // 定义变量内容
 const ruleFormRef = ref<RefType>(); // 表单ref
-const state = reactive({
+const state = reactive<any>({
 	queryParams: {
 		// 查询条件
 		PageIndex: 1,
 		PageSize: 10,
-		Keyword: null, // 关键字
-		CreationTimeStart: null, // 创建时间 开始
-		CreationTimeEnd: null, // 创建时间 结束
-		exTime: [], // 办理期限
 		source: '2', // 甄别列表 2
+    Status:null,// 甄别状态
+    DataScope:0, // 快捷查询
+    No:null, // 工单编码
+    Title:null, // 工单标题
+    IsProvince: null, // 省/市工单
+    IsHomePage: null, // 是否首页进入
+    AcceptType:null, // 受理类型
+    HotspotSpliceName:null, // 热点分类
+    SourceChannel:null, // 来源渠道
+    OrgLevelOneName: null, // 一级部门
+    CurrentHandleOrgName: null, // 接办部门名称
+    VisitOrgName: null, // 被回访部门
+    slTime:[],// 受理时间
+    CreationTime:null,
+    EndCreationTime:null,
+    jbTime:[], // 接办时间
+    CurrentHandleTime:null,
+    EndCurrentHandleTime:null,
+    bjTime:[], // 办结时间
+    FiledTime:null,
+    EndFiledTime:null,
+    hfTime:[], // 回访时间
+    VisitTime:null,
+    EndVisitTime:null,
+    SortField:null,
+    SortRule:null,
+    Contact:null, // 联系电话
+    FromPhone:null, // 来电电话
 	},
 	tableData: [], //表单
 	loading: false, // 加载
 	total: 0, // 总数
 	screenStatus: [], // 甄别状态
 	screenType: [], // 甄别类型
+  acceptTypeOptions:[], // 受理类型
+  sourceChannelOptions:[] , // 来源渠道
 });
-const handleTimeChange = (val: string[], startKey: string, endKey: string) => {
-	if (val) {
-		state.queryParams[startKey] = val[0];
-		state.queryParams[endKey] = val[1];
-	} else {
-		state.queryParams[startKey] = '';
-		state.queryParams[endKey] = '';
-	}
-	handleQuery();
-};
-// 甄别时间
-const timeStartChangeCr = (val: string[]) => {
-	handleTimeChange(val, 'CreationTimeStart', 'CreationTimeEnd');
+const searchCol = ref(true); // 展开/收起
+// 展开/收起
+const closeSearch = () => {
+  searchCol.value = !searchCol.value;
 };
 // 获取查询条件基础信息
 const getBaseData = async () => {
-	const res: any = await screenBaseData();
-	state.screenStatus = res.result?.screenStatus ?? [];
-	state.screenType = res.result?.screenType ?? [];
+	const {result} = await screenBaseData();
+  state.screenStatus = result?.screenStatus ?? [];
+  state.screenType = result?.screenType ?? [];
+  state.acceptTypeOptions = result?.acceptType ?? [];
+  state.sourceChannelOptions = result?.sourceChannel ?? [];
 };
 // 手动查询,将页码设置为1
 const handleQuery = () => {
@@ -186,11 +361,23 @@ const handleQuery = () => {
 	queryList();
 };
 /** 获取列表 */
+const requestParams = ref({});
 const queryList = () => {
-	let request = other.deepClone(state.queryParams);
-	Reflect.deleteProperty(request, 'exTime'); // 删除无用的参数
+  requestParams.value = Other.deepClone(state.queryParams);
+  requestParams.value.CreationTime = state.queryParams.slTime === null ? null : state.queryParams.slTime[0]; // 受理时间
+  requestParams.value.EndCreationTime = state.queryParams.slTime === null ? null : state.queryParams.slTime[1];
+  Reflect.deleteProperty(requestParams.value, 'slTime'); // 删除无用的参数
+  requestParams.value.CurrentHandleTime = state.queryParams.jbTime === null ? null : state.queryParams.jbTime[0]; // 接办时间
+  requestParams.value.EndCurrentHandleTime = state.queryParams.jbTime === null ? null : state.queryParams.jbTime[1];
+  Reflect.deleteProperty(requestParams.value, 'jbTime'); // 删除无用的参数
+  requestParams.value.FiledTime = state.queryParams.bjTime === null ? null : state.queryParams.bjTime[0]; // 办结时间
+  requestParams.value.EndFiledTime = state.queryParams.bjTime === null ? null : state.queryParams.bjTime[1];
+  Reflect.deleteProperty(requestParams.value, 'bjTime'); // 删除无用的参数
+  requestParams.value.VisitTime = state.queryParams.hfTime === null ? null : state.queryParams.hfTime[0]; // 回访时间
+  requestParams.value.EndVisitTime = state.queryParams.hfTime === null ? null : state.queryParams.hfTime[1];
+  Reflect.deleteProperty(requestParams.value, 'hfTime'); // 删除无用的参数
 	state.loading = true;
-	screenList(request)
+	screenList(requestParams.value)
 		.then((response: any) => {
 			state.tableData = response?.result.items ?? [];
 			state.total = response?.result.total;
@@ -200,15 +387,19 @@ const queryList = () => {
 			state.loading = false;
 		});
 };
-
 /** 重置按钮操作 */
 const resetQuery = (formEl: FormInstance | undefined) => {
 	if (!formEl) return;
 	formEl.resetFields();
-	state.queryParams.CreationTimeStart = null;
-	state.queryParams.CreationTimeEnd = null;
 	queryList();
 };
+// 排序
+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;
+  queryList();
+};
 // 查看详情
 const discernDetailRef = ref<RefType>(); // 甄别详情ref
 const discernEditRef = ref<RefType>(); // 甄别修改ref
@@ -225,8 +416,24 @@ const onDetail = async (row: any) => {
 		console.log(e);
 	}
 };
+// 查看回访明细
+const visitDetailRef = ref<RefType>();
+const visitDetail = (row:any)=>{
+  visitDetailRef.value.openDialog(row.visit, '回访明细');
+}
 onMounted(async () => {
 	await getBaseData();
 	queryList();
 });
 </script>
+<style scoped lang="scss">
+.business-discern-container {
+  .arrow {
+    transition: transform var(--el-transition-duration);
+    cursor: pointer;
+  }
+  .arrow.is-reverse {
+    transform: rotateZ(-180deg);
+  }
+}
+</style>

+ 2 - 2
src/views/business/return/components/Return-audit-multiple.vue

@@ -6,8 +6,8 @@
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="12">
 						<el-form-item label="审批结果" prop="isPass" :rules="[{ required: true, message: '请选择审批结果', trigger: 'change' }]">
 							<el-radio-group v-model="state.ruleForm.isPass">
-								<el-radio :label="true">同意</el-radio>
-								<el-radio :label="false">不同意</el-radio>
+								<el-radio :value="true">同意</el-radio>
+								<el-radio :value="false">不同意</el-radio>
 							</el-radio-group>
 						</el-form-item>
 					</el-col>

+ 2 - 2
src/views/business/secondHandle/components/Second-handle-audit-multiple.vue

@@ -6,8 +6,8 @@
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="12">
 						<el-form-item label="审批结果" prop="isPass" :rules="[{ required: true, message: '请选择审批结果', trigger: 'change' }]">
 							<el-radio-group v-model="state.ruleForm.isPass">
-								<el-radio :label="true">同意</el-radio>
-								<el-radio :label="false">不同意</el-radio>
+								<el-radio :value="true">同意</el-radio>
+								<el-radio :value="false">不同意</el-radio>
 							</el-radio-group>
 						</el-form-item>
 					</el-col>

+ 2 - 2
src/views/business/secondHandle/components/Second-handle-audit.vue

@@ -17,8 +17,8 @@
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="12">
 						<el-form-item label="审批结果" prop="isPass" :rules="[{ required: true, message: '请选择审批结果', trigger: 'change' }]">
 							<el-radio-group v-model="state.ruleForm.isPass">
-								<el-radio :label="true">同意</el-radio>
-								<el-radio :label="false">不同意</el-radio>
+								<el-radio :value="true">同意</el-radio>
+								<el-radio :value="false">不同意</el-radio>
 							</el-radio-group>
 						</el-form-item>
 					</el-col>

+ 2 - 2
src/views/business/special/components/Special-audit-multiple.vue

@@ -6,8 +6,8 @@
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="12">
 						<el-form-item label="审批结果" prop="isPass" :rules="[{ required: true, message: '请选择审批结果', trigger: 'change' }]">
 							<el-radio-group v-model="state.ruleForm.isPass">
-								<el-radio :label="true">同意</el-radio>
-								<el-radio :label="false">不同意</el-radio>
+								<el-radio :value="true">同意</el-radio>
+								<el-radio :value="false">不同意</el-radio>
 							</el-radio-group>
 						</el-form-item>
 					</el-col>

+ 2 - 2
src/views/business/visit/component/Reverse-audit.vue

@@ -6,8 +6,8 @@
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="12">
 						<el-form-item label="评判结果" prop="isAgree" :rules="[{ required: true, message: '请选择评判结果', trigger: 'change' }]">
 							<el-radio-group v-model="state.ruleForm.isAgree">
-								<el-radio :label="true">同意</el-radio>
-								<el-radio :label="false">不同意</el-radio>
+								<el-radio :value="true">同意</el-radio>
+								<el-radio :value="false">不同意</el-radio>
 							</el-radio-group>
 						</el-form-item>
 					</el-col>

+ 7 - 3
src/views/business/visit/component/Visit-detail.vue

@@ -110,7 +110,7 @@
 				</template>
 				<div class="collapse-container">
 					<el-form label-width="120px" ref="ruleFormRef" :model="state.ruleForm" label-position="left">
-						<el-row :gutter="10">
+						<el-row :gutter="10" class="show-info-form">
 							<!-- 详情 -->
 							<template v-if="disabled">
 								<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
@@ -157,7 +157,7 @@
 										<!-- 部门评价 -->
 										<template v-if="item.visitTarget === 20">
 											<el-divider content-position="left">
-												<el-text tag="b" size="large"> {{ item.visitOrgName }} </el-text>
+												<el-text tag="b" size="large" type="primary"> {{ item.visitOrgName }} </el-text>
 											</el-divider>
 											<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 												<el-form-item label="部门是否联系">
@@ -554,12 +554,16 @@ const isTelSource = computed(() => {
 });
 // 打开弹窗
 const openDialog = (row: any, type: string = '回访') => {
+	if (!row.id || !row) {
+		ElMessage.warning('传入回访ID不正确');
+		return;
+	}
 	state.dialogVisible = true;
 	getBaseData(row.id);
 	dialogTitle.value = type;
 };
 const disabled = computed(() => {
-	return dialogTitle.value === '回访详情';
+	return ['回访明细', '回访详情'].includes(dialogTitle.value);
 });
 // 设置抽屉
 const dialogRef = ref<RefType>(); // 弹窗ref

+ 2 - 2
src/views/knowledge/index/edit.vue

@@ -111,8 +111,8 @@
 							<template #default>
 								<el-form-item label="是否公开" prop="isPublic" :rules="[{ required: false, message: '请选择是否公开', trigger: 'change' }]">
 									<el-radio-group v-model="state.ruleForm.isPublic">
-										<el-radio :label="true">是</el-radio>
-										<el-radio :label="false">否</el-radio>
+										<el-radio :value="true">是</el-radio>
+										<el-radio :value="false">否</el-radio>
 									</el-radio-group>
 									<span class="color-danger ml10" v-if="state.ruleForm.isPublic">(公开后将在12345官网进行展示)</span>
 								</el-form-item>

+ 2 - 2
src/views/province/components/Detail-drawer.vue

@@ -1,13 +1,13 @@
 <template>
 	<el-drawer v-model="state.dialogVisible" title="明细信息" destroy-on-close size="500px" append-to-body>
 		<el-form label-width="110px" ref="ruleFormRef" :model="state.ruleForm" class="show-info-form" v-loading="state.loading">
-			<el-divider><el-text tag="b" style="font-size: var(--el-font-size-medium)">申请信息</el-text></el-divider>
+      <p class="border-title mb10">申请信息</p>
 			<el-form-item label="申请人"> {{ state.ruleForm.applyUserName }} </el-form-item>
 			<el-form-item label="申请部门"> {{ state.ruleForm.applyOrgName }} </el-form-item>
 			<el-form-item label="申请时间"> {{ formatDate(state.ruleForm.applyTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>
 			<el-form-item label="申请时限" v-if="currentType === 'delay'"> {{ state.ruleForm.applyDelayNum }} </el-form-item>
 			<el-form-item label="申请原因"> {{ state.ruleForm.applyReason }} </el-form-item>
-			<el-divider><el-text tag="b" style="font-size: var(--el-font-size-medium)">审核信息</el-text></el-divider>
+      <p class="border-title mb10 mt20">审核信息</p>
 			<el-form-item label="审核人">{{ state.ruleForm.auditName }}</el-form-item>
 			<el-form-item label="审核部门">{{ state.ruleForm.auditOrgName }}</el-form-item>
 			<el-form-item label="审核时间"> {{ formatDate(state.ruleForm.auditTime, 'YYYY-mm-dd HH:MM:SS') }} </el-form-item>

+ 0 - 1
src/views/todo/seats/accept/index.vue

@@ -655,7 +655,6 @@ const state = reactive<any>({
 	],
 	focusOnEvents: [], // 重点关注事项
 	orderId: null, // 工单id
-	orgData: [],
 	tagsViewList: [],
 });
 const useTelStatusStore = useTelStatus(); // 来电弹屏