Browse Source

feat:威而信白名单,评价按键对接;

zhangchong 1 year ago
parent
commit
31c734c797

+ 48 - 0
src/api/business/followUp.ts

@@ -0,0 +1,48 @@
+/*
+ * @Author: zc
+ * @Description: 工单回访
+ */
+import request from '/@/utils/request';
+/**
+ * @description: 工单回访列表
+ * @param {object} params
+ */
+export const visitList = (params: object) => {
+    return request({
+        url: `/api/v1/Order/visit`,
+        method: 'get',
+        params
+    });
+};
+/**
+ * @description: 工单回访保存
+ * @param data
+ */
+export const visitOrder = (data: object) => {
+    return request({
+        url: `/api/v1/Order/visit`,
+        method: 'post',
+        data
+    });
+};
+/**
+ * @description: 工单回访详情
+ * @param id
+ */
+export const visitDetail = (id: string) => {
+    return request({
+        url: `/api/v1/Order/visit/${id}`,
+        method: 'get'
+    });
+};
+/**
+ * @description: 工单回访明细列表
+ * @param params
+ */
+export const visitDetailList = (params: object) => {
+    return request({
+        url: `/api/v1/Order/visit/detail`,
+        method: 'get',
+        params
+    });
+};

+ 48 - 0
src/api/business/overdue.ts

@@ -0,0 +1,48 @@
+/*
+ * @Author: zc
+ * @Description: 工单延期
+ */
+import request from '/@/utils/request';
+/**
+ * @description: 可申请延期工单
+ * @param {object} params
+ */
+export const candelayList = (params: object) => {
+    return request({
+        url: `/api/v1/Order/candelay`,
+        method: 'get',
+        params
+    });
+};
+/**
+ * @description: 申请延期
+ * @param data
+ */
+export const delayOrder = (data: object) => {
+    return request({
+        url: `/api/v1/Order/delay`,
+        method: 'post',
+        data
+    });
+};
+/**
+ * @description: 延期工单列表
+ * @param {object} params
+ */
+export const delayList = (params: object) => {
+    return request({
+        url: `/api/v1/Order/delay`,
+        method: 'get',
+        params
+    });
+};
+/**
+ * @description: 延期详情
+ * @param id
+ */
+export const delalDetail = (id: string) => {
+    return request({
+        url: `/api/v1/Order/delay/${id}`,
+        method: 'get'
+    });
+};

+ 26 - 0
src/api/business/redo.ts

@@ -0,0 +1,26 @@
+/*
+ * @Author: zc
+ * @Description: 工单重办
+ */
+import request from '/@/utils/request';
+/**
+ * @description: 工单重办列表
+ * @param {object} params
+ */
+export const redoList = (params: object) => {
+    return request({
+        url: `/api/v1/Order/redo`,
+        method: 'get',
+        params
+    });
+};
+/**
+ * @description: 工单重办详情
+ * @param id
+ */
+export const redoDetail = (id: string) => {
+    return request({
+        url: `/api/v1/Order/redo/${id}`,
+        method: 'get'
+    });
+};

+ 2 - 2
src/api/business/release.ts

@@ -11,7 +11,7 @@ import request from '/@/utils/request';
  * @description: 工单发布列表
  * @param {any} params
  */
-export const publishList = (params: any) => {
+export const publishList = (params: object) => {
     return request({
         url: `/api/v1/Order/publish`,
         method: 'get',
@@ -22,7 +22,7 @@ export const publishList = (params: any) => {
  * @description: 工单发布
  * @param data
  */
-export const publishOrder = (data: any) => {
+export const publishOrder = (data: object) => {
     return request({
         url: `/api/v1/Order/publish`,
         method: 'post',

+ 75 - 14
src/api/public/wex.ts

@@ -1,6 +1,6 @@
 /*
  * @Author: zc
- * @Description: 维尔信(电话控件api和调用维尔信api)
+ * @Description: 威而信(电话控件api和调用威而信api)
  * @version:
  * @Date: 2022-08-09 16:19:55
  * @LastEditors: Please set LastEditors
@@ -70,7 +70,7 @@ export const telUnrestWex = () => {
 };
 
 /**
- * @description 维尔信登录
+ * @description 威而信登录
  * @param data
  */
 export const wexLogin = (data:object) => {
@@ -82,7 +82,7 @@ export const wexLogin = (data:object) => {
     });
 }
 /**
- * @description 查询维尔信所有分机
+ * @description 查询威而信所有分机
  * @param data
  */
 export const getTelList = (data?:object) => {
@@ -94,7 +94,7 @@ export const getTelList = (data?:object) => {
     });
 }
 /**
- * @description 查询维尔信通话记录分页
+ * @description 查询威而信通话记录分页
  * @param {object} data
  */
 export const callLogPaged = (data:object) => {
@@ -106,7 +106,7 @@ export const callLogPaged = (data:object) => {
     });
 }
 /**
- * @description 查询维尔信通话记录播放地址
+ * @description 查询威而信通话记录播放地址
  * @param {object} data
  */
 export const getCallLogPlayUrl = (data:object) => {
@@ -121,7 +121,7 @@ export const getCallLogPlayUrl = (data:object) => {
     });
 }
 /**
- * @description 查询维尔信黑名单分页
+ * @description 查询威而信黑名单分页
  * @param {object} data
  */
 export const blacklistPaged = (data:object) => {
@@ -133,7 +133,7 @@ export const blacklistPaged = (data:object) => {
     });
 }
 /**
- * @description 维尔信黑名单新增
+ * @description 威而信黑名单新增
  * @param {object} data
  */
 export const blacklistAdd = (data:object) => {
@@ -145,7 +145,7 @@ export const blacklistAdd = (data:object) => {
     });
 }
 /**
- * @description 维尔信黑名单删除
+ * @description 威而信黑名单删除
  * @param {object} ids
  * @param data
  */
@@ -158,37 +158,98 @@ export const blacklistRemove = (ids:string,data?:object) => {
     });
 }
 /**
- * @description 查询维尔信白名单分页
+ * @description 查询威而信白名单分页
  * @param {object} data
  */
 export const whitelistPaged = (data:object) => {
     return request({
-        url: `/api/black/list_page`,
+        url: `/api/vip/page`,
         method: 'post',
         baseURL:import.meta.env.VITE_WEX_API_URL,
         data
     });
 }
 /**
- * @description 维尔信白名单新增
+ * @description 威而信白名单新增
  * @param {object} data
  */
 export const whitelistAdd = (data:object) => {
     return request({
-        url: `/api/black/add`,
+        url: `/api/vip/add`,
+        method: 'post',
+        baseURL:import.meta.env.VITE_WEX_API_URL,
+        data
+    });
+}
+/**
+ * @description 威而信白名单编辑
+ * @param {object} data
+ */
+export const whitelistEdit= (data:object) => {
+    return request({
+        url: `/api/vip/edit`,
         method: 'post',
         baseURL:import.meta.env.VITE_WEX_API_URL,
         data
     });
 }
 /**
- * @description 维尔信白名单删除
+ * @description 威而信白名单删除
  * @param {object} ids
  * @param data
  */
 export const whitelistRemove = (ids:string,data?:object) => {
     return request({
-        url: `/api/black/delete?ids=${ids}`,
+        url: `/api/vip/delete?ids=${ids}`,
+        method: 'post',
+        baseURL:import.meta.env.VITE_WEX_API_URL,
+        data
+    });
+}
+/**
+ * @description 查询威而信评价按键列表
+ * @param {object} data
+ */
+export const satisPaged = (data:object) => {
+    return request({
+        url: `/api/satis/list`,
+        method: 'post',
+        baseURL:import.meta.env.VITE_WEX_API_URL,
+        data
+    });
+}
+/**
+ * @description 威而信评价按键新增
+ * @param {object} data
+ */
+export const satisAdd = (data:object) => {
+    return request({
+        url: `/api/satis/add`,
+        method: 'post',
+        baseURL:import.meta.env.VITE_WEX_API_URL,
+        data
+    });
+}
+/**
+ * @description 威而信评价按键修改
+ * @param {object} data
+ */
+export const satisEdit = (data:object) => {
+    return request({
+        url: `/api/satis/edit`,
+        method: 'post',
+        baseURL:import.meta.env.VITE_WEX_API_URL,
+        data
+    });
+}
+/**
+ * @description 威而信评价按键删除
+ * @param ids
+ * @param {object} data
+ */
+export const satisRemove = (ids:string,data?:object) => {
+    return request({
+        url: `/api/satis/delete?ids=${ids}`,
         method: 'post',
         baseURL:import.meta.env.VITE_WEX_API_URL,
         data

+ 2 - 2
src/utils/PhoneScript.ts

@@ -85,8 +85,8 @@ export const VoiceInterfaceObject: any = {
 				name: 'orderAccept',
 				state: {
 					createBy: 'tel',
-					telNo: DialInfo.fromTel,
-					callId: DialInfo.telGuid,
+					fromTel: DialInfo.fromTel,
+					telGuid: DialInfo.telGuid,
 					transfer: DialInfo.transfer,
 					telArea: DialInfo.telArea,
 				},

+ 16 - 170
src/views/business/delay/backlog/index.vue

@@ -5,114 +5,15 @@
 			<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent class="mt15" label-width="100px">
 				<el-row :gutter="10">
 					<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
-						<el-form-item label="发布状态" prop="AcceptType">
-							<el-select v-model="state.queryParams.AcceptType" placeholder="请选择发布状态" multiple clearable class="w100">
-								<el-option v-for="item in state.acceptTypeOptions" :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="8" :xl="8">
-						<el-form-item label="工单标题" prop="Keyword">
+						<el-form-item label="关键字" prop="Keyword">
 							<el-input v-model="state.queryParams.Keyword" placeholder="工单编码/标题" clearable @keyup.enter="queryList" />
 						</el-form-item>
 					</el-col>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<el-form-item label="发布人" prop="Content">
-								<el-input v-model="state.queryParams.Content" placeholder="姓名/工号" clearable @keyup.enter="queryList" />
-							</el-form-item>
-						</el-col>
-					</transition>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<el-form-item label="发布范围" prop="AcceptType">
-								<el-select v-model="state.queryParams.AcceptType" placeholder="请选择发布范围" multiple clearable class="w100">
-									<el-option v-for="item in state.acceptTypeOptions" :value="item.key" :key="item.key" :label="item.value" />
-								</el-select>
-							</el-form-item>
-						</el-col>
-					</transition>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<el-form-item label="受理类型" prop="Channel">
-								<el-select v-model="state.queryParams.Channel" placeholder="请选择受理类型" multiple clearable class="w100">
-									<el-option v-for="item in state.channelOptions" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName" />
-								</el-select>
-							</el-form-item>
-						</el-col>
-					</transition>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<el-form-item label="热点分类" prop="HotspotId">
-								<el-tree-select
-									class="w100"
-									v-model="state.queryParams.HotspotId"
-									filterable
-									clearable
-									multiple
-									:render-after-expand="false"
-									show-checkbox
-									placeholder="请选择热点分类"
-									:props="HotspotProps"
-									lazy
-									:load="load"
-									node-key="id"
-									check-strictly
-								/>
-							</el-form-item>
-						</el-col>
-					</transition>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<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="timeStartChangeCr"
-									value-format="YYYY-MM-DD[T]HH:mm:ss"
-								/>
-							</el-form-item>
-						</el-col>
-					</transition>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<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="timeStartChangeEx"
-									value-format="YYYY-MM-DD[T]HH:mm:ss"
-								/>
-							</el-form-item>
-						</el-col>
-					</transition>
-					<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
-            <el-form-item label=" ">
-              <div class="flex-end w100">
-                <el-button type="primary" @click="queryList" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
-                <el-button @click="resetQuery(ruleFormRef)" v-waves class="default-button" :loading="state.loading"> <SvgIcon name="ele-Refresh" class="mr5" />重置 </el-button>
-                <el-button link type="primary" @click="closeSearch">
-                  {{ 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">
-      <el-tabs v-model="state.queryParams.status" class="demo-tabs" @tab-change="handleClick">
+      <el-tabs v-model="state.queryParams.IsApply" class="demo-tabs" @tab-change="handleClick">
         <el-tab-pane :name="item.value" v-for="item in state.tabPaneList" :key="item.value" :label="item.label"></el-tab-pane>
       </el-tabs>
 			<!-- 表格 -->
@@ -197,13 +98,13 @@
 </template>
 <script setup lang="ts" name="orderDelayBacklog">
 import { defineAsyncComponent, onMounted, reactive, ref } from 'vue';
-import { hotSpotType, listBaseData } from '/@/api/business/order';
+import {  listBaseData } from '/@/api/business/order';
 import { ElButton, ElMessage, ElMessageBox, FormInstance } from 'element-plus';
 import { auth } from '/@/utils/authFunction';
 import { throttle } from '/@/utils/tools';
-import { shortcuts } from '/@/utils/constants';
 import { formatDate } from '/@/utils/formatTime';
 import { useRouter } from 'vue-router';
+import {candelayList} from "/@/api/business/overdue";
 // 引入组件
 const OrderDetail = defineAsyncComponent(() => import('/@/views/business/order/components/Order-detail.vue'));  // 工单详情
 const OrderDelay = defineAsyncComponent(() => import('/@/views/business/delay/components/Order-delay.vue'));  // 工单延期
@@ -217,25 +118,7 @@ const state = reactive(<any>{
 		PageIndex: 1,
 		PageSize: 10,
 		Keyword: '', // 关键字
-		Content: '', // 工单内容
-		AcceptType: '', // 受理类型
-		Channel: '', // 渠道
-		HotspotId: [], // 热点
-		OrgCode: [], // 机构
-		NameOrNo: '', // 受理坐席
-		crTime: [], // 创建时间
-		CreationTimeStart: '', // 创建时间 开始
-		CreationTimeEnd: '', // 创建时间 结束
-		TransferPhone: '', // 转派人
-		EmergencyLevel: [], // 紧急程度
-		exTime: [], // 办理期限
-		ExpiredTimeStart: '', //办理期限 开始
-		ExpiredTimeEnd: '', //办理期限 结束
-		PhoneNo: '', // 手机号
-		Status: [], // 状态
-		pushTypeOptions: '', //
-		PushTypeCode: '', //推送类型
-    status:'0', // 延期状态
+    IsApply:'false',// 待办/已办
 	},
 	tableList: [{}], //表单
 	loading: false, // 加载
@@ -250,52 +133,17 @@ const state = reactive(<any>{
   tabPaneList: [
     {
       label:'延期待办',
-      value:'0',
+      value:'false',
     },
     {
       label:'延期已办',
-      value:'1',
+      value:'true',
     },
   ], // tab列表
 });
 const ruleFormRef = ref<RefType>(); // 表单ref
-const searchCol = ref(true); // 展开/收起
 const OrderDetailRef = ref<RefType>(); // 工单详情ref
 const router = useRouter(); // 路由
-// 热点分类远程搜索
-const HotspotProps = {
-	label: 'hotSpotName',
-	children: 'children',
-	isLeaf: 'isLeaf',
-};
-// 热点分类远程搜索
-const load = async (node: any, resolve: any) => {
-	if (node.isLeaf) return resolve([]);
-	let res: any = await hotSpotType({ id: node.data.id ? node.data.id : '' });
-	resolve(res.result);
-};
-
-// 展开/收起
-const closeSearch = () => {
-	searchCol.value = !searchCol.value;
-};
-const handleTimeChange = (val: string[], startKey: string, endKey: string) => {
-	if (val) {
-		state.queryParams[startKey] = val[0];
-		state.queryParams[endKey] = val[1];
-	} else {
-		state.queryParams[startKey] = '';
-		state.queryParams[endKey] = '';
-	}
-};
-// 受理时间
-const timeStartChangeCr = (val: string[]) => {
-	handleTimeChange(val, 'CreationTimeStart', 'CreationTimeEnd');
-};
-// 过期时间
-const timeStartChangeEx = (val: string[]) => {
-	handleTimeChange(val, 'ExpiredTimeStart', 'ExpiredTimeEnd');
-};
 // 获取查询条件基础信息
 const getBaseData = async () => {
 	const res: any = await listBaseData();
@@ -310,6 +158,14 @@ const getBaseData = async () => {
 const queryList = throttle(() => {
 	if (!auth('business:delay:backlog:query')) ElMessage.error('抱歉,您没有权限查看工单延期待办!');
 	else {
+    state.loading = true;
+    candelayList(state.queryParams).then((res: any) => {
+      state.tableList = res.result?.items ?? [];
+      state.total = res.result?.total ?? 0;
+      state.loading = false;
+    }).catch((err: any) => {
+      state.loading = false;
+    })
 	}
 }, 500);
 // 切换tab 查询列表
@@ -320,10 +176,6 @@ const handleClick = () => {
 const resetQuery = throttle((formEl: FormInstance | undefined) => {
 	if (!formEl) return;
 	formEl.resetFields();
-	state.queryParams.CreationTimeStart = '';
-	state.queryParams.CreationTimeEnd = '';
-	state.queryParams.ExpiredTimeStart = '';
-	state.queryParams.ExpiredTimeStart = '';
 	queryList();
 }, 500);
 // 导出
@@ -367,12 +219,6 @@ onMounted(async () => {
 
 <style scoped lang="scss">
 .business-delay-backlog-container {
-	.arrow {
-		transition: transform var(--el-transition-duration);
-		cursor: pointer;
-	}
-	.arrow.is-reverse {
-		transform: rotateZ(-180deg);
-	}
+
 }
 </style>

+ 10 - 158
src/views/business/delay/index.vue

@@ -5,109 +5,10 @@
 			<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent class="mt15" label-width="100px">
 				<el-row :gutter="10">
 					<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
-						<el-form-item label="发布状态" prop="AcceptType">
-							<el-select v-model="state.queryParams.AcceptType" placeholder="请选择发布状态" multiple clearable class="w100">
-								<el-option v-for="item in state.acceptTypeOptions" :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="8" :xl="8">
-						<el-form-item label="工单标题" prop="Keyword">
+						<el-form-item label="关键字" prop="Keyword">
 							<el-input v-model="state.queryParams.Keyword" placeholder="工单编码/标题" clearable @keyup.enter="queryList" />
 						</el-form-item>
 					</el-col>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<el-form-item label="发布人" prop="Content">
-								<el-input v-model="state.queryParams.Content" placeholder="姓名/工号" clearable @keyup.enter="queryList" />
-							</el-form-item>
-						</el-col>
-					</transition>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<el-form-item label="发布范围" prop="AcceptType">
-								<el-select v-model="state.queryParams.AcceptType" placeholder="请选择发布范围" multiple clearable class="w100">
-									<el-option v-for="item in state.acceptTypeOptions" :value="item.key" :key="item.key" :label="item.value" />
-								</el-select>
-							</el-form-item>
-						</el-col>
-					</transition>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<el-form-item label="受理类型" prop="Channel">
-								<el-select v-model="state.queryParams.Channel" placeholder="请选择受理类型" multiple clearable class="w100">
-									<el-option v-for="item in state.channelOptions" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName" />
-								</el-select>
-							</el-form-item>
-						</el-col>
-					</transition>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<el-form-item label="热点分类" prop="HotspotId">
-								<el-tree-select
-									class="w100"
-									v-model="state.queryParams.HotspotId"
-									filterable
-									clearable
-									multiple
-									:render-after-expand="false"
-									show-checkbox
-									placeholder="请选择热点分类"
-									:props="HotspotProps"
-									lazy
-									:load="load"
-									node-key="id"
-									check-strictly
-								/>
-							</el-form-item>
-						</el-col>
-					</transition>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<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="timeStartChangeCr"
-									value-format="YYYY-MM-DD[T]HH:mm:ss"
-								/>
-							</el-form-item>
-						</el-col>
-					</transition>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<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="timeStartChangeEx"
-									value-format="YYYY-MM-DD[T]HH:mm:ss"
-								/>
-							</el-form-item>
-						</el-col>
-					</transition>
-					<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
-            <el-form-item label=" ">
-              <div class="flex-end w100">
-                <el-button type="primary" @click="queryList" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
-                <el-button @click="resetQuery(ruleFormRef)" v-waves class="default-button" :loading="state.loading"> <SvgIcon name="ele-Refresh" class="mr5" />重置 </el-button>
-                <el-button link type="primary" @click="closeSearch">
-                  {{ 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>
@@ -199,9 +100,9 @@ import { hotSpotType, listBaseData } from '/@/api/business/order';
 import { ElButton, ElMessage, ElMessageBox, FormInstance } from 'element-plus';
 import { auth } from '/@/utils/authFunction';
 import { throttle } from '/@/utils/tools';
-import { shortcuts } from '/@/utils/constants';
 import { formatDate } from '/@/utils/formatTime';
 import { useRouter } from 'vue-router';
+import { delayList} from "/@/api/business/overdue";
 // 引入组件
 const OrderDetail = defineAsyncComponent(() => import('/@/views/business/order/components/Order-detail.vue'));  // 工单详情
 
@@ -212,24 +113,6 @@ const state = reactive(<any>{
 		PageIndex: 1,
 		PageSize: 10,
 		Keyword: '', // 关键字
-		Content: '', // 工单内容
-		AcceptType: '', // 受理类型
-		Channel: '', // 渠道
-		HotspotId: [], // 热点
-		OrgCode: [], // 机构
-		NameOrNo: '', // 受理坐席
-		crTime: [], // 创建时间
-		CreationTimeStart: '', // 创建时间 开始
-		CreationTimeEnd: '', // 创建时间 结束
-		TransferPhone: '', // 转派人
-		EmergencyLevel: [], // 紧急程度
-		exTime: [], // 办理期限
-		ExpiredTimeStart: '', //办理期限 开始
-		ExpiredTimeEnd: '', //办理期限 结束
-		PhoneNo: '', // 手机号
-		Status: [], // 状态
-		pushTypeOptions: '', //
-		PushTypeCode: '', //推送类型
 	},
 	tableList: [{}], //表单
 	loading: false, // 加载
@@ -243,43 +126,8 @@ const state = reactive(<any>{
 	orgData: [], // 机构数据
 });
 const ruleFormRef = ref<RefType>(); // 表单ref
-const searchCol = ref(true); // 展开/收起
 const OrderDetailRef = ref<RefType>(); // 工单详情ref
 const router = useRouter(); // 路由
-// 热点分类远程搜索
-const HotspotProps = {
-	label: 'hotSpotName',
-	children: 'children',
-	isLeaf: 'isLeaf',
-};
-// 热点分类远程搜索
-const load = async (node: any, resolve: any) => {
-	if (node.isLeaf) return resolve([]);
-	let res: any = await hotSpotType({ id: node.data.id ? node.data.id : '' });
-	resolve(res.result);
-};
-
-// 展开/收起
-const closeSearch = () => {
-	searchCol.value = !searchCol.value;
-};
-const handleTimeChange = (val: string[], startKey: string, endKey: string) => {
-	if (val) {
-		state.queryParams[startKey] = val[0];
-		state.queryParams[endKey] = val[1];
-	} else {
-		state.queryParams[startKey] = '';
-		state.queryParams[endKey] = '';
-	}
-};
-// 受理时间
-const timeStartChangeCr = (val: string[]) => {
-	handleTimeChange(val, 'CreationTimeStart', 'CreationTimeEnd');
-};
-// 过期时间
-const timeStartChangeEx = (val: string[]) => {
-	handleTimeChange(val, 'ExpiredTimeStart', 'ExpiredTimeEnd');
-};
 // 获取查询条件基础信息
 const getBaseData = async () => {
 	const res: any = await listBaseData();
@@ -294,6 +142,14 @@ const getBaseData = async () => {
 const queryList = throttle(() => {
 	if (!auth('business:delay:query')) ElMessage.error('抱歉,您没有权限查看工单延期申请!');
 	else {
+    state.loading = true;
+    delayList(state.queryParams).then((res: any) => {
+      state.tableList = res.result?.items ?? [];
+      state.total = res.result?.total ?? 0;
+      state.loading = false;
+    }).catch((err: any) => {
+      state.loading = false;
+    })
 	}
 }, 500);
 
@@ -301,10 +157,6 @@ const queryList = throttle(() => {
 const resetQuery = throttle((formEl: FormInstance | undefined) => {
 	if (!formEl) return;
 	formEl.resetFields();
-	state.queryParams.CreationTimeStart = '';
-	state.queryParams.CreationTimeEnd = '';
-	state.queryParams.ExpiredTimeStart = '';
-	state.queryParams.ExpiredTimeStart = '';
 	queryList();
 }, 500);
 // 导出

+ 11 - 129
src/views/business/followUp/backlog/index.vue

@@ -9,85 +9,6 @@
 							<el-input v-model="state.queryParams.Keyword" placeholder="工单编码/标题" clearable @keyup.enter="queryList" />
 						</el-form-item>
 					</el-col>
-					<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
-						<el-form-item label="回访状态" prop="AcceptType">
-							<el-select v-model="state.queryParams.AcceptType" placeholder="请选择回访状态" multiple clearable class="w100">
-								<el-option v-for="item in state.acceptTypeOptions" :value="item.key" :key="item.key" :label="item.value" />
-							</el-select>
-						</el-form-item>
-					</el-col>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<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="timeStartChangeCr"
-									value-format="YYYY-MM-DD[T]HH:mm:ss"
-								/>
-							</el-form-item>
-						</el-col>
-					</transition>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<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="timeStartChangeEx"
-									value-format="YYYY-MM-DD[T]HH:mm:ss"
-								/>
-							</el-form-item>
-						</el-col>
-					</transition>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<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="timeStartChangeEx"
-									value-format="YYYY-MM-DD[T]HH:mm:ss"
-								/>
-							</el-form-item>
-						</el-col>
-					</transition>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<el-form-item label="回访方式" prop="AcceptType">
-								<el-select v-model="state.queryParams.AcceptType" placeholder="请选择回访方式" multiple clearable class="w100">
-									<el-option v-for="item in state.acceptTypeOptions" :value="item.key" :key="item.key" :label="item.value" />
-								</el-select>
-							</el-form-item>
-						</el-col>
-					</transition>
-					<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
-            <el-form-item label=" ">
-              <div class="flex-end w100">
-                <el-button type="primary" @click="queryList" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
-                <el-button @click="resetQuery(ruleFormRef)" v-waves class="default-button" :loading="state.loading"> <SvgIcon name="ele-Refresh" class="mr5" />重置 </el-button>
-                <el-button link type="primary" @click="closeSearch">
-                  {{ 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>
@@ -183,6 +104,7 @@ import { throttle } from '/@/utils/tools';
 import { shortcuts } from '/@/utils/constants';
 import { formatDate } from '/@/utils/formatTime';
 import { useRouter } from 'vue-router';
+import {visitList} from "/@/api/business/followUp";
 // 引入组件
 const FollowUpDetail = defineAsyncComponent(() => import('/@/views/business/followUp/component/Follow-up-detail.vue'));   // 回访
 const OrderDetail = defineAsyncComponent(() => import('/@/views/business/order/components/Order-detail.vue'));  // 工单详情
@@ -197,24 +119,7 @@ const state = reactive(<any>{
 		PageIndex: 1,
 		PageSize: 10,
 		Keyword: '', // 关键字
-		Content: '', // 工单内容
-		AcceptType: '', // 受理类型
-		Channel: '', // 渠道
-		HotspotId: [], // 热点
-		OrgCode: [], // 机构
-		NameOrNo: '', // 受理坐席
-		crTime: [], // 创建时间
-		CreationTimeStart: '', // 创建时间 开始
-		CreationTimeEnd: '', // 创建时间 结束
-		TransferPhone: '', // 转派人
-		EmergencyLevel: [], // 紧急程度
-		exTime: [], // 办理期限
-		ExpiredTimeStart: '', //办理期限 开始
-		ExpiredTimeEnd: '', //办理期限 结束
-		PhoneNo: '', // 手机号
-		Status: [], // 状态
-		pushTypeOptions: '', //
-		PushTypeCode: '', //推送类型
+    VisitState:'0', // 回访状态
 	},
 	tableList: [{}], //表单
 	loading: false, // 加载
@@ -227,27 +132,6 @@ const state = reactive(<any>{
 	pushTypeOptions: [], //推送分类
 	orgData: [], // 机构数据
 });
-// 展开/收起
-const closeSearch = () => {
-	searchCol.value = !searchCol.value;
-};
-const handleTimeChange = (val: string[], startKey: string, endKey: string) => {
-	if (val) {
-		state.queryParams[startKey] = val[0];
-		state.queryParams[endKey] = val[1];
-	} else {
-		state.queryParams[startKey] = '';
-		state.queryParams[endKey] = '';
-	}
-};
-// 受理时间
-const timeStartChangeCr = (val: string[]) => {
-	handleTimeChange(val, 'CreationTimeStart', 'CreationTimeEnd');
-};
-// 过期时间
-const timeStartChangeEx = (val: string[]) => {
-	handleTimeChange(val, 'ExpiredTimeStart', 'ExpiredTimeEnd');
-};
 // 获取查询条件基础信息
 const getBaseData = async () => {
 	const res: any = await listBaseData();
@@ -262,6 +146,14 @@ const getBaseData = async () => {
 const queryList = throttle(() => {
 	if (!auth('business:followUp:backlog:query')) ElMessage.error('抱歉,您没有权限查看待回访列表!');
 	else {
+    state.loading = true;
+    visitList(state.queryParams).then((res: any) => {
+      state.tableList = res.result?.items ?? [];
+      state.total = res.result?.total ?? 0;
+      state.loading = false;
+    }).catch((err: any) => {
+      state.loading = false;
+    })
 	}
 }, 500);
 
@@ -269,10 +161,6 @@ const queryList = throttle(() => {
 const resetQuery = throttle((formEl: FormInstance | undefined) => {
 	if (!formEl) return;
 	formEl.resetFields();
-	state.queryParams.CreationTimeStart = '';
-	state.queryParams.CreationTimeEnd = '';
-	state.queryParams.ExpiredTimeStart = '';
-	state.queryParams.ExpiredTimeStart = '';
 	queryList();
 }, 500);
 // 短信回访
@@ -325,12 +213,6 @@ onMounted(async () => {
 
 <style scoped lang="scss">
 .business-followUp-backlog-container {
-	.arrow {
-		transition: transform var(--el-transition-duration);
-		cursor: pointer;
-	}
-	.arrow.is-reverse {
-		transform: rotateZ(-180deg);
-	}
+
 }
 </style>

+ 10 - 131
src/views/business/followUp/followedUp/index.vue

@@ -9,85 +9,6 @@
 							<el-input v-model="state.queryParams.Keyword" placeholder="工单编码/标题" clearable @keyup.enter="queryList" />
 						</el-form-item>
 					</el-col>
-					<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
-						<el-form-item label="回访状态" prop="AcceptType">
-							<el-select v-model="state.queryParams.AcceptType" placeholder="请选择回访状态" multiple clearable class="w100">
-								<el-option v-for="item in state.acceptTypeOptions" :value="item.key" :key="item.key" :label="item.value" />
-							</el-select>
-						</el-form-item>
-					</el-col>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<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="timeStartChangeCr"
-									value-format="YYYY-MM-DD[T]HH:mm:ss"
-								/>
-							</el-form-item>
-						</el-col>
-					</transition>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<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="timeStartChangeEx"
-									value-format="YYYY-MM-DD[T]HH:mm:ss"
-								/>
-							</el-form-item>
-						</el-col>
-					</transition>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<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="timeStartChangeEx"
-									value-format="YYYY-MM-DD[T]HH:mm:ss"
-								/>
-							</el-form-item>
-						</el-col>
-					</transition>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<el-form-item label="回访方式" prop="AcceptType">
-								<el-select v-model="state.queryParams.AcceptType" placeholder="请选择回访方式" multiple clearable class="w100">
-									<el-option v-for="item in state.acceptTypeOptions" :value="item.key" :key="item.key" :label="item.value" />
-								</el-select>
-							</el-form-item>
-						</el-col>
-					</transition>
-					<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
-            <el-form-item label=" ">
-              <div class="flex-end w100">
-                <el-button type="primary" @click="queryList" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
-                <el-button @click="resetQuery(ruleFormRef)" v-waves class="default-button" :loading="state.loading"> <SvgIcon name="ele-Refresh" class="mr5" />重置 </el-button>
-                <el-button link type="primary" @click="closeSearch">
-                  {{ 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>
@@ -185,13 +106,12 @@ import { ElButton, ElMessage, ElMessageBox, FormInstance } from 'element-plus';
 import { listBaseData } from '/@/api/business/order';
 import { auth } from '/@/utils/authFunction';
 import { throttle } from '/@/utils/tools';
-import { shortcuts } from '/@/utils/constants';
 import { formatDate } from '/@/utils/formatTime';
 import { useRouter } from 'vue-router';
+import {visitList} from "/@/api/business/followUp";
 
 // 定义变量内容
 const ruleFormRef = ref<RefType>(); // 表单ref
-const searchCol = ref(true); // 是否显示搜索栏
 const router = useRouter(); // 路由
 const state = reactive(<any>{
 	queryParams: {
@@ -199,24 +119,7 @@ const state = reactive(<any>{
 		PageIndex: 1,
 		PageSize: 10,
 		Keyword: '', // 关键字
-		Content: '', // 工单内容
-		AcceptType: '', // 受理类型
-		Channel: '', // 渠道
-		HotspotId: [], // 热点
-		OrgCode: [], // 机构
-		NameOrNo: '', // 受理坐席
-		crTime: [], // 创建时间
-		CreationTimeStart: '', // 创建时间 开始
-		CreationTimeEnd: '', // 创建时间 结束
-		TransferPhone: '', // 转派人
-		EmergencyLevel: [], // 紧急程度
-		exTime: [], // 办理期限
-		ExpiredTimeStart: '', //办理期限 开始
-		ExpiredTimeEnd: '', //办理期限 结束
-		PhoneNo: '', // 手机号
-		Status: [], // 状态
-		pushTypeOptions: '', //
-		PushTypeCode: '', //推送类型
+    VisitState:'0', // 回访状态
 	},
 	tableList: [{}], //表单
 	loading: false, // 加载
@@ -229,27 +132,6 @@ const state = reactive(<any>{
 	pushTypeOptions: [], //推送分类
 	orgData: [], // 机构数据
 });
-// 展开/收起
-const closeSearch = () => {
-	searchCol.value = !searchCol.value;
-};
-const handleTimeChange = (val: string[], startKey: string, endKey: string) => {
-	if (val) {
-		state.queryParams[startKey] = val[0];
-		state.queryParams[endKey] = val[1];
-	} else {
-		state.queryParams[startKey] = '';
-		state.queryParams[endKey] = '';
-	}
-};
-// 受理时间
-const timeStartChangeCr = (val: string[]) => {
-	handleTimeChange(val, 'CreationTimeStart', 'CreationTimeEnd');
-};
-// 过期时间
-const timeStartChangeEx = (val: string[]) => {
-	handleTimeChange(val, 'ExpiredTimeStart', 'ExpiredTimeEnd');
-};
 // 获取查询条件基础信息
 const getBaseData = async () => {
 	const res: any = await listBaseData();
@@ -264,6 +146,14 @@ const getBaseData = async () => {
 const queryList = throttle(() => {
 	if (!auth('business:followedUp:query')) ElMessage.error('抱歉,您没有权限查看已回访列表!');
 	else {
+    state.loading = true;
+    visitList(state.queryParams).then((res: any) => {
+      state.tableList = res.result?.items ?? [];
+      state.total = res.result?.total ?? 0;
+      state.loading = false;
+    }).catch((err: any) => {
+      state.loading = false;
+    })
 	}
 }, 500);
 
@@ -271,10 +161,6 @@ const queryList = throttle(() => {
 const resetQuery = throttle((formEl: FormInstance | undefined) => {
 	if (!formEl) return;
 	formEl.resetFields();
-	state.queryParams.CreationTimeStart = '';
-	state.queryParams.CreationTimeEnd = '';
-	state.queryParams.ExpiredTimeStart = '';
-	state.queryParams.ExpiredTimeStart = '';
 	queryList();
 }, 500);
 // 短信回访
@@ -317,12 +203,5 @@ onMounted(async () => {
 
 <style scoped lang="scss">
 .business-followUp-followedUp-container {
-	.arrow {
-		transition: transform var(--el-transition-duration);
-		cursor: pointer;
-	}
-	.arrow.is-reverse {
-		transform: rotateZ(-180deg);
-	}
 }
 </style>

+ 44 - 163
src/views/business/followUp/index.vue

@@ -9,85 +9,13 @@
 							<el-input v-model="state.queryParams.Keyword" placeholder="工单编码/标题" clearable @keyup.enter="queryList" />
 						</el-form-item>
 					</el-col>
-					<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
-						<el-form-item label="回访状态" prop="AcceptType">
-							<el-select v-model="state.queryParams.AcceptType" placeholder="请选择回访状态" multiple clearable class="w100">
-								<el-option v-for="item in state.acceptTypeOptions" :value="item.key" :key="item.key" :label="item.value" />
-							</el-select>
-						</el-form-item>
-					</el-col>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<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="timeStartChangeCr"
-									value-format="YYYY-MM-DD[T]HH:mm:ss"
-								/>
-							</el-form-item>
-						</el-col>
-					</transition>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<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="timeStartChangeEx"
-									value-format="YYYY-MM-DD[T]HH:mm:ss"
-								/>
-							</el-form-item>
-						</el-col>
-					</transition>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<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="timeStartChangeEx"
-									value-format="YYYY-MM-DD[T]HH:mm:ss"
-								/>
-							</el-form-item>
-						</el-col>
-					</transition>
-					<transition name="el-zoom-in-top">
-						<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-							<el-form-item label="回访方式" prop="AcceptType">
-								<el-select v-model="state.queryParams.AcceptType" placeholder="请选择回访方式" multiple clearable class="w100">
-									<el-option v-for="item in state.acceptTypeOptions" :value="item.key" :key="item.key" :label="item.value" />
-								</el-select>
-							</el-form-item>
-						</el-col>
-					</transition>
-					<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
-            <el-form-item label=" ">
-              <div class="flex-end w100">
-                <el-button type="primary" @click="queryList" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
-                <el-button @click="resetQuery(ruleFormRef)" v-waves class="default-button" :loading="state.loading"> <SvgIcon name="ele-Refresh" class="mr5" />重置 </el-button>
-                <el-button link type="primary" @click="closeSearch">
-                  {{ searchCol ? '展开' : '收起' }}
-                  <SvgIcon :class="{ 'is-reverse': searchCol }" name="ele-ArrowUp" class="mr5 arrow" size="18px" />
-                </el-button>
-              </div>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
+            <el-form-item label="回访状态" prop="VisitState">
+              <el-select v-model="state.queryParams.VisitState" placeholder="请选择回访状态" clearable class="w100">
+                <el-option v-for="item in state.acceptTypeOptions" :value="item.key" :key="item.key" :label="item.value" />
+              </el-select>
             </el-form-item>
-					</el-col>
+          </el-col>
 				</el-row>
 			</el-form>
 		</el-card>
@@ -95,27 +23,23 @@
 			<!-- 功能按钮 -->
 			<div class="mb20">
 				<el-button type="primary" @click="onTextMessageFollowUp" :disabled="!multipleSelection.length" v-auth="'business:followUp:textMessage'">
-					<SvgIcon name="ele-Message" class="mr5" />短信回访</el-button
-				>
+					<SvgIcon name="ele-Message" class="mr5" />短信回访</el-button>
 				<el-button type="primary" @click="multiplePeople" :disabled="!multipleSelection.length" v-auth="'business:followUp:multiplePeople'">
-					<SvgIcon name="ele-User" class="mr5" />批量分配</el-button
-				>
+					<SvgIcon name="ele-User" class="mr5" />批量分配</el-button>
 				<el-button type="primary" @click="smartFollowUp" :disabled="!multipleSelection.length" v-auth="'business:followUp:smart'">
-					<SvgIcon name="iconfont icon-diannao1" class="mr5" />智能回访</el-button
-				>
+					<SvgIcon name="iconfont icon-diannao1" class="mr5" />智能回访</el-button>
 				<el-button type="primary" @click="onExport" :disabled="!multipleSelection.length" v-auth="'business:followUp:export'">
-					<SvgIcon name="iconfont icon-daochu" class="mr5" />导出</el-button
-				>
+					<SvgIcon name="iconfont icon-daochu" class="mr5" />导出</el-button>
 			</div>
 			<!-- 表格 -->
 			<el-table :data="state.tableList" v-loading="state.loading" row-key="id" ref="multipleTableRef" @selection-change="handleSelectionChange">
 				<el-table-column type="selection" width="55" />
 				<el-table-column prop="no" label="工单编码" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="no" label="来源方式" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="no" label="来源方式" show-overflow-tooltip></el-table-column>
 				<el-table-column prop="no" label="省/市工单" show-overflow-tooltip></el-table-column>
 				<el-table-column prop="no" label="中心会签" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="no" label="回访状态" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="no" label="回访方式" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="no" label="回访状态" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="no" label="回访方式" show-overflow-tooltip></el-table-column>
 				<el-table-column label="工单标题" show-overflow-tooltip width="400">
 					<template #default="{ row }">
 						<el-button link type="primary">{{ row.title }}</el-button>
@@ -151,21 +75,23 @@
 					</template>
 				</el-table-column>
 				<el-table-column prop="no" label="回访人" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="expiredTime" label="回访时间" show-overflow-tooltip width="170">
-          <template #default="{ row }">
-            <span>{{ formatDate(row.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column prop="expiredTime" label="回访标签" show-overflow-tooltip width="170">
-          <template #default="{ row }">
-            <span>{{ formatDate(row.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
-          </template>
-        </el-table-column>
+				<el-table-column prop="expiredTime" label="回访时间" show-overflow-tooltip width="170">
+					<template #default="{ row }">
+						<span>{{ formatDate(row.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+					</template>
+				</el-table-column>
+				<el-table-column prop="expiredTime" label="回访标签" show-overflow-tooltip width="170">
+					<template #default="{ row }">
+						<span>{{ formatDate(row.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+					</template>
+				</el-table-column>
 				<el-table-column prop="no" label="语音评价" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="no" label="话务员满意度" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="no" label="话务员满意度" show-overflow-tooltip></el-table-column>
 				<el-table-column label="操作" width="150" fixed="right" align="center">
 					<template #default="{ row }">
-						<el-button link type="primary" @click="followUpDetail(row)" title="查看回访详情" v-auth="'business:followUp:detail'"> 回访详情 </el-button>
+						<el-button link type="primary" @click="followUpDetail(row)" title="查看回访详情" v-auth="'business:followUp:detail'">
+							回访详情
+						</el-button>
 						<el-button link type="primary" @click="editFollowUp(row)" title="修改回访" v-auth="'business:followUp:edit'"> 修改 </el-button>
 					</template>
 				</el-table-column>
@@ -181,27 +107,25 @@
 				@pagination="queryList"
 			/>
 		</el-card>
-    <!-- 回访详情 -->
-    <FollowUpDetail ref="followUpDetailRef" @updateList="queryList" />
+		<!-- 回访详情 -->
+		<FollowUpDetail ref="followUpDetailRef" @updateList="queryList" />
 	</div>
 </template>
 
 <script setup lang="ts" name="orderFollowUp">
 import { defineAsyncComponent, onMounted, reactive, ref } from 'vue';
 import { ElButton, ElMessage, ElMessageBox, FormInstance } from 'element-plus';
-import { listBaseData } from '/@/api/business/order';
 import { auth } from '/@/utils/authFunction';
 import { throttle } from '/@/utils/tools';
-import { shortcuts } from '/@/utils/constants';
 import { formatDate } from '/@/utils/formatTime';
 import { useRouter } from 'vue-router';
-
+import {visitList} from "/@/api/business/followUp";
+import { listBaseData } from '/@/api/business/order';
 // 引入组件
-const FollowUpDetail = defineAsyncComponent(() => import('/@/views/business/followUp/component/Follow-up-detail.vue'));   // 回访
+const FollowUpDetail = defineAsyncComponent(() => import('/@/views/business/followUp/component/Follow-up-detail.vue')); // 回访
 
 // 定义变量内容
 const ruleFormRef = ref<RefType>(); // 表单ref
-const searchCol = ref(true); // 是否显示搜索栏
 const router = useRouter(); // 路由
 const state = reactive(<any>{
 	queryParams: {
@@ -209,26 +133,9 @@ const state = reactive(<any>{
 		PageIndex: 1,
 		PageSize: 10,
 		Keyword: '', // 关键字
-		Content: '', // 工单内容
-		AcceptType: '', // 受理类型
-		Channel: '', // 渠道
-		HotspotId: [], // 热点
-		OrgCode: [], // 机构
-		NameOrNo: '', // 受理坐席
-		crTime: [], // 创建时间
-		CreationTimeStart: '', // 创建时间 开始
-		CreationTimeEnd: '', // 创建时间 结束
-		TransferPhone: '', // 转派人
-		EmergencyLevel: [], // 紧急程度
-		exTime: [], // 办理期限
-		ExpiredTimeStart: '', //办理期限 开始
-		ExpiredTimeEnd: '', //办理期限 结束
-		PhoneNo: '', // 手机号
-		Status: [], // 状态
-		pushTypeOptions: '', //
-		PushTypeCode: '', //推送类型
+    VisitState:'0', // 回访状态
 	},
-	tableList: [{}], //表单
+	tableList: [], //表单
 	loading: false, // 加载
 	total: 0, // 总数
 	acceptTypeOptions: [], //受理类型
@@ -239,27 +146,6 @@ const state = reactive(<any>{
 	pushTypeOptions: [], //推送分类
 	orgData: [], // 机构数据
 });
-// 展开/收起
-const closeSearch = () => {
-	searchCol.value = !searchCol.value;
-};
-const handleTimeChange = (val: string[], startKey: string, endKey: string) => {
-	if (val) {
-		state.queryParams[startKey] = val[0];
-		state.queryParams[endKey] = val[1];
-	} else {
-		state.queryParams[startKey] = '';
-		state.queryParams[endKey] = '';
-	}
-};
-// 受理时间
-const timeStartChangeCr = (val: string[]) => {
-	handleTimeChange(val, 'CreationTimeStart', 'CreationTimeEnd');
-};
-// 过期时间
-const timeStartChangeEx = (val: string[]) => {
-	handleTimeChange(val, 'ExpiredTimeStart', 'ExpiredTimeEnd');
-};
 // 获取查询条件基础信息
 const getBaseData = async () => {
 	const res: any = await listBaseData();
@@ -274,6 +160,14 @@ const getBaseData = async () => {
 const queryList = throttle(() => {
 	if (!auth('business:followUp:query')) ElMessage.error('抱歉,您没有权限查看回访列表!');
 	else {
+    state.loading = true;
+    visitList(state.queryParams).then((res: any) => {
+      state.tableList = res.result?.items ?? [];
+      state.total = res.result?.total ?? 0;
+      state.loading = false;
+    }).catch((err: any) => {
+      state.loading = false;
+    })
 	}
 }, 500);
 
@@ -281,10 +175,6 @@ const queryList = throttle(() => {
 const resetQuery = throttle((formEl: FormInstance | undefined) => {
 	if (!formEl) return;
 	formEl.resetFields();
-	state.queryParams.CreationTimeStart = '';
-	state.queryParams.CreationTimeEnd = '';
-	state.queryParams.ExpiredTimeStart = '';
-	state.queryParams.ExpiredTimeStart = '';
 	queryList();
 }, 500);
 // 短信回访
@@ -322,12 +212,10 @@ const onExport = () => {
 // 回访详情
 const followUpDetailRef = ref<RefType>();
 const followUpDetail = (row: any) => {
-  followUpDetailRef.value.openDialog(row);
+	followUpDetailRef.value.openDialog(row);
 };
 // 修改回访
-const editFollowUp = (row: any) => {
-
-};
+const editFollowUp = (row: any) => {};
 onMounted(async () => {
 	await getBaseData();
 	queryList();
@@ -336,12 +224,5 @@ onMounted(async () => {
 
 <style scoped lang="scss">
 .business-followUp-container {
-	.arrow {
-		transition: transform var(--el-transition-duration);
-		cursor: pointer;
-	}
-	.arrow.is-reverse {
-		transform: rotateZ(-180deg);
-	}
 }
 </style>

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

@@ -1061,8 +1061,8 @@ onMounted(async () => {
 				//通话
 				state.ruleForm.sourceChannel = '电话'; //电话
         state.ruleForm.sourceChannelCode = 'RGDH'; //电话
-				state.ruleForm.fromPhone = historyParams.telNo;
-				state.ruleForm.callId = historyParams.callId;
+				state.ruleForm.fromPhone = historyParams.fromTel;
+				state.ruleForm.callId = historyParams.telGuid;
 				state.ruleForm.transferPhone = historyParams.transfer;
 				searchHistory(); // 查询历史订单
 			}

+ 0 - 1
src/views/business/order/components/Order-history.vue

@@ -39,7 +39,6 @@
 						</template>
 					</el-table-column>
           <el-table-column label="操作" width="150" fixed="right" align="center">
-            <!-- 草稿0 status 可以删除 -->
             <template #default="{ row }">
               <el-button type="primary" link @click="onSupply(row)" :loading="state.loading"  v-auth="'business:order:supply'">补充</el-button>
               <el-button type="primary" link @click="onRevoke(row)" :loading="state.loading"  v-auth="'business:order:revoke'">撤销</el-button>

+ 141 - 294
src/views/business/redo/index.vue

@@ -1,336 +1,183 @@
 <template>
-  <div class="business-redo-container layout-pd">
-    <!-- 搜索  -->
-    <el-card shadow="never">
-      <el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent class="mt15" label-width="100px">
-        <el-row :gutter="10">
-          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
-            <el-form-item label="发布状态" prop="AcceptType">
-              <el-select v-model="state.queryParams.AcceptType" placeholder="请选择发布状态" multiple clearable class="w100">
-                <el-option v-for="item in state.acceptTypeOptions" :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="8" :xl="8">
-            <el-form-item label="工单标题" prop="Keyword">
-              <el-input v-model="state.queryParams.Keyword" placeholder="工单编码/标题" clearable @keyup.enter="queryList" />
-            </el-form-item>
-          </el-col>
-          <transition name="el-zoom-in-top">
-            <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-              <el-form-item label="发布人" prop="Content">
-                <el-input v-model="state.queryParams.Content" placeholder="姓名/工号" clearable @keyup.enter="queryList" />
-              </el-form-item>
-            </el-col>
-          </transition>
-          <transition name="el-zoom-in-top">
-            <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-              <el-form-item label="发布范围" prop="AcceptType">
-                <el-select v-model="state.queryParams.AcceptType" placeholder="请选择发布范围" multiple clearable class="w100">
-                  <el-option v-for="item in state.acceptTypeOptions" :value="item.key" :key="item.key" :label="item.value" />
-                </el-select>
-              </el-form-item>
-            </el-col>
-          </transition>
-          <transition name="el-zoom-in-top">
-            <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-              <el-form-item label="受理类型" prop="Channel">
-                <el-select v-model="state.queryParams.Channel" placeholder="请选择受理类型" multiple clearable class="w100">
-                  <el-option v-for="item in state.channelOptions" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName" />
-                </el-select>
-              </el-form-item>
-            </el-col>
-          </transition>
-          <transition name="el-zoom-in-top">
-            <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-              <el-form-item label="热点分类" prop="HotspotId">
-                <el-tree-select
-                    class="w100"
-                    v-model="state.queryParams.HotspotId"
-                    filterable
-                    clearable
-                    multiple
-                    :render-after-expand="false"
-                    show-checkbox
-                    placeholder="请选择热点分类"
-                    :props="HotspotProps"
-                    lazy
-                    :load="load"
-                    node-key="id"
-                    check-strictly
-                />
-              </el-form-item>
-            </el-col>
-          </transition>
-          <transition name="el-zoom-in-top">
-            <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-              <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="timeStartChangeCr"
-                    value-format="YYYY-MM-DD[T]HH:mm:ss"
-                />
-              </el-form-item>
-            </el-col>
-          </transition>
-          <transition name="el-zoom-in-top">
-            <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8" v-show="!searchCol">
-              <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="timeStartChangeEx"
-                    value-format="YYYY-MM-DD[T]HH:mm:ss"
-                />
-              </el-form-item>
-            </el-col>
-          </transition>
-          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
-            <el-form-item label=" ">
-              <div class="flex-end w100">
-                <el-button type="primary" @click="queryList" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
-                <el-button @click="resetQuery(ruleFormRef)" v-waves class="default-button" :loading="state.loading"> <SvgIcon name="ele-Refresh" class="mr5" />重置 </el-button>
-                <el-button link type="primary" @click="closeSearch">
-                  {{ 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">
-      <!-- 功能按钮 -->
-      <div class="mb20">
-          <el-button type="primary" @click="onExport" v-auth="'business:supervise:export'" :disabled="!multipleSelection.length">
-            <SvgIcon name="iconfont icon-daochu" class="mr5" />导出
-          </el-button>
-      </div>
-      <!-- 表格 -->
-      <el-table :data="state.tableList" v-loading="state.loading" row-key="id" ref="multipleTableRef" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" />
-        <el-table-column prop="no" label="工单编号" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="no" label="来源方式" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="no" label="重办类型" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="no" label="当前节点" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="acceptTypeText" label="省/市工单" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="expiredTime" label="期满时间" show-overflow-tooltip width="170">
-          <template #default="{ row }">
-            <span>{{ formatDate(row.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column prop="expiredTime" label="受理时间" show-overflow-tooltip width="170">
-          <template #default="{ row }">
-            <span>{{ formatDate(row.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column prop="acceptTypeText" label="受理类型" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="acceptTypeText" label="工单状态" show-overflow-tooltip></el-table-column>
-        <el-table-column label="工单标题" show-overflow-tooltip width="400">
-          <template #default="{ row }">
-            <el-button link type="primary">{{ row.title }}</el-button>
-          </template>
-        </el-table-column>
-        <el-table-column prop="acceptTypeText" label="接办部门" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="expiredTime" label="接办时间" show-overflow-tooltip width="170">
-          <template #default="{ row }">
-            <span>{{ formatDate(row.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column prop="hotspotName" label="热点分类" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="acceptTypeText" label="要求重办部门" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="acceptTypeText" label="要求重办人" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="expiredTime" label="重办时间" show-overflow-tooltip width="170">
-          <template #default="{ row }">
-            <span>{{ formatDate(row.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column prop="expiredTime" label="重办人" show-overflow-tooltip width="170">
-          <template #default="{ row }">
-            <span>{{ formatDate(row.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column prop="acceptTypeText" label="重办人" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="acceptTypeText" label="重办意见" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="acceptTypeText" label="重办原因内容" show-overflow-tooltip></el-table-column>
-        <el-table-column label="操作" width="150" fixed="right" align="center">
-          <template #default="{ row }">
-            <el-button link type="primary" @click="onDetail(row)" title="查看工单详情" v-auth="'business:redo:detail'"> 工单详情 </el-button>
-          </template>
-        </el-table-column>
-        <template #empty>
-          <Empty />
-        </template>
-      </el-table>
-      <!-- 分页 -->
-      <pagination
-          :total="state.total"
-          v-model:page="state.queryParams.PageIndex"
-          v-model:limit="state.queryParams.PageSize"
-          @pagination="queryList"
-      />
-    </el-card>
-    <!-- 工单详情 -->
-    <order-detail ref="OrderDetailRef" @updateList="queryList" />
-    <!-- 督办内容 -->
-    <order-supervise ref="OrderSuperviseRef" @updateList="queryList" />
-  </div>
+	<div class="business-redo-container layout-pd">
+		<!-- 搜索  -->
+		<el-card shadow="never">
+			<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent class="mt15" label-width="100px">
+				<el-row :gutter="10">
+					<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
+						<el-form-item label="关键字" prop="Keyword">
+							<el-input v-model="state.queryParams.Keyword" placeholder="工单编码/标题" clearable @keyup.enter="queryList" />
+						</el-form-item>
+					</el-col>
+				</el-row>
+			</el-form>
+		</el-card>
+		<el-card shadow="never">
+			<!-- 功能按钮 -->
+			<div class="mb20">
+				<el-button type="primary" @click="onExport" v-auth="'business:supervise:export'" :disabled="!multipleSelection.length">
+					<SvgIcon name="iconfont icon-daochu" class="mr5" />导出
+				</el-button>
+			</div>
+			<!-- 表格 -->
+			<el-table :data="state.tableList" v-loading="state.loading" row-key="id" ref="multipleTableRef" @selection-change="handleSelectionChange">
+				<el-table-column type="selection" width="55" />
+				<el-table-column prop="no" label="工单编号" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="no" label="来源方式" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="no" label="重办类型" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="no" label="当前节点" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="acceptTypeText" label="省/市工单" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="expiredTime" label="期满时间" show-overflow-tooltip width="170">
+					<template #default="{ row }">
+						<span>{{ formatDate(row.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+					</template>
+				</el-table-column>
+				<el-table-column prop="expiredTime" label="受理时间" show-overflow-tooltip width="170">
+					<template #default="{ row }">
+						<span>{{ formatDate(row.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+					</template>
+				</el-table-column>
+				<el-table-column prop="acceptTypeText" label="受理类型" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="acceptTypeText" label="工单状态" show-overflow-tooltip></el-table-column>
+				<el-table-column label="工单标题" show-overflow-tooltip width="400">
+					<template #default="{ row }">
+						<el-button link type="primary">{{ row.title }}</el-button>
+					</template>
+				</el-table-column>
+				<el-table-column prop="acceptTypeText" label="接办部门" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="expiredTime" label="接办时间" show-overflow-tooltip width="170">
+					<template #default="{ row }">
+						<span>{{ formatDate(row.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+					</template>
+				</el-table-column>
+				<el-table-column prop="hotspotName" label="热点分类" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="acceptTypeText" label="要求重办部门" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="acceptTypeText" label="要求重办人" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="expiredTime" label="重办时间" show-overflow-tooltip width="170">
+					<template #default="{ row }">
+						<span>{{ formatDate(row.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+					</template>
+				</el-table-column>
+				<el-table-column prop="expiredTime" label="重办人" show-overflow-tooltip width="170">
+					<template #default="{ row }">
+						<span>{{ formatDate(row.expiredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+					</template>
+				</el-table-column>
+				<el-table-column prop="acceptTypeText" label="重办人" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="acceptTypeText" label="重办意见" show-overflow-tooltip></el-table-column>
+				<el-table-column prop="acceptTypeText" label="重办原因内容" show-overflow-tooltip></el-table-column>
+				<el-table-column label="操作" width="150" fixed="right" align="center">
+					<template #default="{ row }">
+						<el-button link type="primary" @click="onDetail(row)" title="查看工单详情" v-auth="'business:redo:detail'"> 工单详情 </el-button>
+					</template>
+				</el-table-column>
+				<template #empty>
+					<Empty />
+				</template>
+			</el-table>
+			<!-- 分页 -->
+			<pagination
+				:total="state.total"
+				v-model:page="state.queryParams.PageIndex"
+				v-model:limit="state.queryParams.PageSize"
+				@pagination="queryList"
+			/>
+		</el-card>
+		<!-- 工单详情 -->
+		<order-detail ref="OrderDetailRef" @updateList="queryList" />
+		<!-- 督办内容 -->
+		<order-supervise ref="OrderSuperviseRef" @updateList="queryList" />
+	</div>
 </template>
 <script setup lang="ts" name="orderRedo">
 import { defineAsyncComponent, onMounted, reactive, ref } from 'vue';
-import { hotSpotType, listBaseData } from '/@/api/business/order';
-import {ElButton, ElMessage, FormInstance} from 'element-plus';
+import { listBaseData } from '/@/api/business/order';
+import { ElButton, ElMessage, FormInstance } from 'element-plus';
 import { auth } from '/@/utils/authFunction';
-import { throttle, } from '/@/utils/tools';
-import { shortcuts } from '/@/utils/constants';
+import { throttle } from '/@/utils/tools';
 import { formatDate } from '/@/utils/formatTime';
-import {useRouter} from "vue-router";
+import { useRouter } from 'vue-router';
+import { redoList } from '/@/api/business/redo';
 // 引入组件
 const OrderDetail = defineAsyncComponent(() => import('/@/views/business/order/components/Order-detail.vue'));
 const OrderSupervise = defineAsyncComponent(() => import('/@/views/business/supervise/components/Order-supervise.vue'));
 
 // 定义变量内容
 const ruleFormRef = ref<RefType>(); // 表单ref
-const searchCol = ref(true); // 是否显示搜索栏
 const router = useRouter(); // 路由
 const state = reactive(<any>{
-  queryParams: {
-    // 查询条件
-    PageIndex: 1,
-    PageSize: 10,
-    Keyword: '', // 关键字
-    Content: '', // 工单内容
-    AcceptType: '', // 受理类型
-    Channel: '', // 渠道
-    HotspotId: [], // 热点
-    OrgCode: [], // 机构
-    NameOrNo: '', // 受理坐席
-    crTime: [], // 创建时间
-    CreationTimeStart: '', // 创建时间 开始
-    CreationTimeEnd: '', // 创建时间 结束
-    TransferPhone: '', // 转派人
-    EmergencyLevel: [], // 紧急程度
-    exTime: [], // 办理期限
-    ExpiredTimeStart: '', //办理期限 开始
-    ExpiredTimeEnd: '', //办理期限 结束
-    PhoneNo: '', // 手机号
-    Status: [], // 状态
-    pushTypeOptions: '', //
-    PushTypeCode: '', //推送类型
-  },
-  tableList: [{}], //表单
-  loading: false, // 加载
-  total: 0, // 总数
-  acceptTypeOptions: [], //受理类型
-  channelOptions: [], // 来源频道
-  emergencyLevelOptions: [], // 紧急程度
-  orderStatusOptions: [], // 工单状态
-  orgsOptions: [], // 部门
-  pushTypeOptions: [], //推送分类
-  orgData: [], // 机构数据
+	queryParams: {
+		// 查询条件
+		PageIndex: 1,
+		PageSize: 10,
+		Keyword: '', // 关键字
+	},
+	tableList: [{}], //表单
+	loading: false, // 加载
+	total: 0, // 总数
+	acceptTypeOptions: [], //受理类型
+	channelOptions: [], // 来源频道
+	emergencyLevelOptions: [], // 紧急程度
+	orderStatusOptions: [], // 工单状态
+	orgsOptions: [], // 部门
+	pushTypeOptions: [], //推送分类
+	orgData: [], // 机构数据
 });
-// 热点分类远程搜索
-const HotspotProps = {
-  label: 'hotSpotName',
-  children: 'children',
-  isLeaf: 'isLeaf',
-};
-// 热点分类远程搜索
-const load = async (node: any, resolve: any) => {
-  if (node.isLeaf) return resolve([]);
-  let res: any = await hotSpotType({ id: node.data.id ? node.data.id : '' });
-  resolve(res.result);
-};
-
-// 展开/收起
-const closeSearch = () => {
-  searchCol.value = !searchCol.value;
-};
-const handleTimeChange = (val: string[], startKey: string, endKey: string) => {
-  if (val) {
-    state.queryParams[startKey] = val[0];
-    state.queryParams[endKey] = val[1];
-  } else {
-    state.queryParams[startKey] = '';
-    state.queryParams[endKey] = '';
-  }
-};
-// 受理时间
-const timeStartChangeCr = (val: string[]) => {
-  handleTimeChange(val, 'CreationTimeStart', 'CreationTimeEnd');
-};
-// 过期时间
-const timeStartChangeEx = (val: string[]) => {
-  handleTimeChange(val, 'ExpiredTimeStart', 'ExpiredTimeEnd');
-};
 // 获取查询条件基础信息
 const getBaseData = async () => {
-  const res: any = await listBaseData();
-  state.acceptTypeOptions = res.result?.acceptTypeOptions ?? [];
-  state.channelOptions = res.result?.channelOptions ?? [];
-  state.emergencyLevelOptions = res.result?.emergencyLevelOptions ?? [];
-  state.orgsOptions = res.result?.orgsOptions ?? [];
-  state.pushTypeOptions = res.result?.pushTypeOptions ?? [];
-  state.orderStatusOptions = res.result?.orderStatusOptions ?? [];
+	const res: any = await listBaseData();
+	state.acceptTypeOptions = res.result?.acceptTypeOptions ?? [];
+	state.channelOptions = res.result?.channelOptions ?? [];
+	state.emergencyLevelOptions = res.result?.emergencyLevelOptions ?? [];
+	state.orgsOptions = res.result?.orgsOptions ?? [];
+	state.pushTypeOptions = res.result?.pushTypeOptions ?? [];
+	state.orderStatusOptions = res.result?.orderStatusOptions ?? [];
 };
 /** 获取列表 */
 const queryList = throttle(() => {
-  if (!auth('business:redo:query')) ElMessage.error('抱歉,您没有权限查看工单重办列表!');
-  else {
-  }
+	if (!auth('business:redo:query')) ElMessage.error('抱歉,您没有权限查看工单重办列表!');
+	else {
+    state.loading = true;
+		redoList(state.queryParams)
+			.then((res: any) => {
+				state.tableList = res.result?.items ?? [];
+				state.total = res.result?.total ?? 0;
+				state.loading = false;
+			})
+			.catch((err: any) => {
+				state.loading = false;
+			});
+	}
 }, 500);
 
 /** 重置按钮操作 */
 const resetQuery = throttle((formEl: FormInstance | undefined) => {
-  if (!formEl) return;
-  formEl.resetFields();
-  state.queryParams.CreationTimeStart = '';
-  state.queryParams.CreationTimeEnd = '';
-  state.queryParams.ExpiredTimeStart = '';
-  state.queryParams.ExpiredTimeStart = '';
-  queryList();
+	if (!formEl) return;
+	formEl.resetFields();
+	queryList();
 }, 500);
 // 表格多选
-const multipleTableRef = ref<RefType>()
-const multipleSelection = ref<any>([])
+const multipleTableRef = ref<RefType>();
+const multipleSelection = ref<any>([]);
 const handleSelectionChange = (val: any[]) => {
-  multipleSelection.value = val
-}
+	multipleSelection.value = val;
+};
 // 导出
 const onExport = () => {
-  console.log('导出');
+	console.log('导出');
 };
 // 查看工单详情
 const OrderDetailRef = ref<RefType>(); // 工单详情ref
 const onDetail = (row: any) => {
-  OrderDetailRef.value.openDialog()
+	OrderDetailRef.value.openDialog();
 };
 onMounted(async () => {
-  await getBaseData();
-  queryList();
+	await getBaseData();
+	queryList();
 });
 </script>
 
 <style scoped lang="scss">
 .business-redo-container {
-  .arrow {
-    transition: transform var(--el-transition-duration);
-    cursor: pointer;
-  }
-  .arrow.is-reverse {
-    transform: rotateZ(-180deg);
-  }
 }
 </style>

+ 5 - 4
src/views/business/release/index.vue

@@ -211,9 +211,9 @@ const state = reactive(<any>{
     CreationTimeStart:'', //受理时间(工单创建时间)
     CreationTimeEnd:'',//受理时间(工单创建时间)
     FiledTimeStart:'',// 归档时间
-    FiledTimeStart:'', //归档时间
+    FiledTimeEnd:'', //归档时间
 	},
-	tableList: [{}], //表单
+	tableList: [], //表单
 	loading: false, // 加载
 	total: 0, // 总数
 	acceptTypeOptions: [], //受理类型
@@ -271,9 +271,10 @@ const getBaseData = async () => {
 const queryList = throttle(() => {
 	if (!auth('business:release:query')) ElMessage.error('抱歉,您没有权限查看工单发布列表!');
 	else {
+    state.loading = true;
     publishList(state.queryParams).then((res: any) => {
-      state.tableList = res.result;
-      state.total = res.count;
+      state.tableList = res.result?.items ?? [];
+      state.total = res.result?.total ?? 0;
       state.loading = false;
     }).catch((err: any) => {
       state.loading = false;

+ 1 - 1
src/views/tels/blacklist/component/Blacklist-add.vue

@@ -9,7 +9,7 @@
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-						<el-form-item label="时间" prop="time" :rules="[{ required: true, message: '请选择时间', trigger: 'change' }]">
+						<el-form-item label="时间" prop="time" :rules="[{ required: false, message: '请选择时间', trigger: 'change' }]">
 							<el-date-picker
 								v-model="state.ruleForm.time"
 								type="datetimerange"

+ 4 - 16
src/views/tels/blacklist/index.vue

@@ -75,11 +75,9 @@ const state = reactive<any>({
 	queryParams: {
 		// 查询参数
 		pageIndex: 1, // 当前页码
-		pageSize: 10, // 每页条数
+		pageSize: 100, // 每页条数
 		telePhone: '', // 电话号码
 		remark: '', // 备注
-		sortFiled: '',  // 排序字段
-		asAsc: false, // 是否升序
 	},
 	loading: false, // 加载状态
 	total: 0, // 总条数
@@ -89,7 +87,7 @@ const state = reactive<any>({
 const ruleFormRef = ref<FormInstance>();  // 表单ref
 /** 搜索按钮操作 节流操作 */
 const handleQuery = throttle(() => {
-	state.queryParams.PageIndex = 1;
+	state.queryParams.pageIndex = 1;
 	queryList();
 }, 500);
 /** 获取黑名单列表 */
@@ -97,17 +95,7 @@ const queryList = () => {
 	if (!auth('tels:blackList:query')) ElMessage.error('抱歉,您没有权限获取黑名单列表!');
 	else {
 		state.loading = true;
-		let request = {
-			pageIndex: state.queryParams.pageIndex,
-			pageSize: state.queryParams.pageSize,
-			sortFiled: state.queryParams.sortFiled,
-			asAsc: state.queryParams.asAsc,
-			input: {
-				telePhone: state.queryParams.telePhone,
-				remark: state.queryParams.remark,
-			},
-		};
-		blacklistPaged(request)
+		blacklistPaged(state.queryParams)
 			.then((response: any) => {
 				state.tableData = response.data ?? [];
 				state.total = response.count ?? 0;
@@ -149,7 +137,7 @@ const onRemove = () => {
 	})
 		.then(() => {
 			blacklistRemove(ids).then(() => {
-				ElMessage.success('删除成功');
+				ElMessage.success('操作成功');
 				queryList();
 			});
 		})

+ 86 - 0
src/views/tels/evaluationKey/component/EvaluationKey-add.vue

@@ -0,0 +1,86 @@
+<template>
+	<div class="system-blacklist-add-container">
+		<el-dialog v-model="state.dialogVisible" width="500px" draggable :title="dialogTitle">
+			<el-form :model="state.ruleForm" ref="evaluationKeyRef" label-width="80px" label-position="left">
+				<el-row :gutter="10">
+					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+						<el-form-item label="评价名称" prop="satisName" :rules="[{ required: true, message: '请输入评价名称', trigger: 'blur' }]">
+							<el-input v-model="state.ruleForm.satisName" placeholder="请输入评价名称" clearable></el-input>
+						</el-form-item>
+					</el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+            <el-form-item label="评价值" prop="satisVal" :rules="[{ required: true, message: '请输入评价值', trigger: 'blur' }]">
+              <el-input v-model="state.ruleForm.satisVal" placeholder="请输入评价值" clearable></el-input>
+            </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(evaluationKeyRef)">保 存</el-button>
+				</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+
+<script lang="ts" setup name="EvaluationKeyAdd">
+import {nextTick, reactive, ref} from 'vue';
+import {ElMessage, FormInstance} from 'element-plus';
+import {satisAdd,satisEdit} from '/@/api/public/wex';
+import other from "/@/utils/other";
+
+// 定义子组件向父组件传值/事件
+const emit = defineEmits(['updateList', 'openDialog', 'closeDialog']);
+
+// 定义变量内容
+const dialogTitle = ref<string>('新增评价按键');
+const state = reactive<any>({
+	ruleForm: {
+    satisName: '',  // 评价名称
+    satisVal: '', // 评价值
+	},
+	dialogVisible: false, // 弹窗显示隐藏
+});
+// 打开弹窗
+const evaluationKeyRef = ref<RefType>();
+const openDialog = async (row?:any) => {
+	state.dialogVisible = true;
+	emit('openDialog');
+  await nextTick(() => {
+    evaluationKeyRef.value?.resetFields();
+    evaluationKeyRef.value?.clearValidate();
+    if(row && row.id) {
+      dialogTitle.value = '编辑评价按键';
+      state.ruleForm = other.deepClone(row);
+    }else{
+      dialogTitle.value = '新增评价按键';
+      state.ruleForm = {
+        satisName: '',  // 评价名称
+        satisVal: '', // 评价值
+      };
+    }
+  });
+};
+// 关闭弹窗
+const closeDialog = () => {
+	state.dialogVisible = false;
+	emit('closeDialog');
+};
+// 新增保存
+const onSubmit = (formEl: FormInstance | undefined) => {
+  if (!formEl) return;
+  formEl.validate((valid: boolean) => {
+    if(!valid) return;
+    const operation = state.ruleForm.id ? satisEdit : satisAdd; // 判断是新增还是编辑
+    operation(state.ruleForm).then(() => {
+        ElMessage.success('操作成功');
+        emit('updateList');
+        state.dialogVisible = false;
+      });
+	});
+};
+//暴漏变量和方法
+defineExpose({ closeDialog, openDialog });
+</script>

+ 134 - 0
src/views/tels/evaluationKey/index.vue

@@ -0,0 +1,134 @@
+<template>
+  <div class="tels-evaluationKey-container layout-pd">
+    <el-card shadow="never">
+      <!-- 通用搜索 -->
+      <el-form :model="state.queryParams" ref="ruleFormRef" :inline="true" @submit.native.prevent class="mt15">
+        <el-form-item label="评价名称" prop="satisName">
+          <el-input v-model="state.queryParams.satisName" placeholder="请输入评价名称" clearable @keyup.enter="handleQuery" />
+        </el-form-item>
+        <el-form-item label="评价值" prop="satisVal">
+          <el-input v-model="state.queryParams.satisVal" placeholder="评价值" clearable @keyup.enter="handleQuery" />
+        </el-form-item>
+
+        <el-form-item>
+          <el-button type="primary" @click="handleQuery" :loading="state.loading" v-waves> <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-card>
+    <el-card shadow="never">
+      <div class="mb20">
+        <el-button type="primary" @click="onAddWhitelist" v-auth="'tels:evaluationKey:add'"> <SvgIcon name="ele-Plus" class="mr5" />新增 </el-button>
+        <el-button type="primary" @click="onRemove" v-auth="'tels:evaluationKey:delete'" :disabled="!multipleSelection.length">
+          <SvgIcon name="ele-Delete" class="mr5" />删除
+        </el-button>
+      </div>
+      <!-- 表格 -->
+      <el-table :data="state.tableData" v-loading="state.loading" row-key="id" ref="multipleTableRef" @selection-change="handleSelectionChange">
+        <el-table-column type="selection" width="55" />
+        <el-table-column prop="satisName" label="评价名称" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="satisVal" label="评价值" show-overflow-tooltip></el-table-column>
+        <el-table-column label="操作" width="70" fixed="right" align="center">
+          <template #default="{ row }">
+            <el-button type="primary" link @click="onEdit(row)" v-auth="'tels:evaluationKey:edit'">编辑</el-button>
+          </template>
+        </el-table-column>
+        <template #empty>
+          <Empty />
+        </template>
+      </el-table>
+    </el-card>
+    <!--  新增编辑按键  -->
+    <evaluation-key-add ref="evaluationKeyAddRef" @updateList="handleQuery" />
+  </div>
+</template>
+
+<script lang="ts" setup name="evaluationKey">
+import { defineAsyncComponent, ref, reactive, onMounted } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import type { FormInstance } from 'element-plus';
+import { auth } from '/@/utils/authFunction';
+import { satisPaged, satisRemove } from '/@/api/public/wex';
+import { throttle } from '/@/utils/tools';
+
+// 引入组件
+const evaluationKeyAdd = defineAsyncComponent(() => import('/@/views/tels/evaluationKey/component/EvaluationKey-add.vue')); // 新增白名单
+
+// 定义变量内容
+const state = reactive<any>({
+  queryParams: {
+    // 查询参数
+    satisName: '', // 评价名称
+    satisVal: '', // 评价值
+  },
+  loading: false, // 加载状态
+  tableData: [],  // 表格数据
+  multipleSelection: [],  // 多选数据
+});
+const ruleFormRef = ref<FormInstance>();  // 表单ref
+/** 搜索按钮操作 节流操作 */
+const handleQuery = throttle(() => {
+  queryList();
+}, 500);
+/** 获取白名单列表 */
+const queryList = () => {
+  if (!auth('tels:evaluationKey:query')) ElMessage.error('抱歉,您没有权限获评价按键列表!');
+  else {
+    state.loading = true;
+    satisPaged(state.queryParams)
+        .then((response: any) => {
+          state.tableData = response.data ?? [];
+          state.loading = false;
+        })
+        .catch(() => {
+          state.loading = false;
+        });
+  }
+};
+/** 重置按钮操作 */
+const resetQuery = throttle((formEl: FormInstance | undefined) => {
+  if (!formEl) return;
+  formEl.resetFields();
+  handleQuery();
+}, 500);
+// 打开新增评价按键弹窗
+const evaluationKeyAddRef = ref<RefType>();
+const onAddWhitelist = () => {
+  evaluationKeyAddRef.value.openDialog();
+};
+// 编辑评价按键
+const onEdit = (row: any) => {
+  evaluationKeyAddRef.value.openDialog(row);
+};
+// 表格多选
+const multipleTableRef = ref<RefType>();
+const multipleSelection = ref<any>([]);
+const handleSelectionChange = (val: any[]) => {
+  multipleSelection.value = val;
+};
+// 删除评价按键
+const onRemove = () => {
+  const ids:string = multipleSelection.value.map((item: any) => item.id).join(',');
+  const phoneNo:string = multipleSelection.value.map((item: any) => item.satisName).join(',');
+  ElMessageBox.confirm(`此操作将删除:【${phoneNo}】的评价按键,是否继续?`, '提示', {
+    confirmButtonText: '确认',
+    cancelButtonText: '取消',
+    type: 'warning',
+    draggable: true,
+    cancelButtonClass: 'default-button',
+    autofocus: false,
+  })
+      .then(() => {
+        satisRemove(ids).then(() => {
+          ElMessage.success('操作成功');
+          queryList();
+        });
+      })
+      .catch(() => {});
+};
+onMounted(() => {
+  queryList();
+});
+</script>

+ 38 - 41
src/views/tels/whitelist/component/Whitelist-add.vue

@@ -1,34 +1,18 @@
 <template>
 	<div class="system-blacklist-add-container">
-		<el-dialog v-model="state.dialogVisible" width="500px" draggable title="新增黑名单">
-			<el-form :model="state.ruleForm" ref="blacklistFormRef" label-width="80px" label-position="left">
-				<el-row :gutter="35">
+		<el-dialog v-model="state.dialogVisible" width="500px" draggable :title="dialogTitle">
+			<el-form :model="state.ruleForm" ref="whitelistFormRef" label-width="80px" label-position="left">
+				<el-row :gutter="10">
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-						<el-form-item label="电话号码" prop="telePhone" :rules="[{ required: true, message: '请输入电话号码', trigger: 'blur' }]">
-							<el-input v-model="state.ruleForm.telePhone" placeholder="请输入电话号码" clearable></el-input>
-						</el-form-item>
-					</el-col>
-					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-						<el-form-item label="时间" prop="time" :rules="[{ required: true, message: '请选择时间', trigger: 'change' }]">
-							<el-date-picker
-								v-model="state.ruleForm.time"
-								type="datetimerange"
-								range-separator="至"
-								start-placeholder="开始时间"
-								end-placeholder="结束时间"
-								value-format="YYYY-MM-DD HH:mm:ss"
-                @change="(val:any) => {
-                    state.ruleForm.setTime = val[0];
-                    state.ruleForm.removeTime = val[1]
-                  }"
-							/>
+						<el-form-item label="电话号码" prop="telPhone" :rules="[{ required: true, message: '请输入电话号码', trigger: 'blur' }]">
+							<el-input v-model="state.ruleForm.telPhone" placeholder="请输入电话号码" clearable></el-input>
 						</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: true, message: '请填写备注', trigger: 'blur' }]">
+            <el-form-item label="备注" prop="remark" :rules="[{ required: false, message: '请填写备注', trigger: 'blur' }]">
               <el-input
                   type="textarea"
-                  :autosize="{ minRows: 6, maxRows: 10 }"
+                  :autosize="{ minRows: 4, maxRows: 6 }"
                   maxlength="2000"
                   placeholder="请填写备注"
                   v-model="state.ruleForm.remark"
@@ -40,38 +24,50 @@
 			<template #footer>
 				<span class="dialog-footer">
 					<el-button @click="closeDialog" class="default-button">取 消</el-button>
-					<el-button type="primary" @click="onSubmit(blacklistFormRef)">保 存</el-button>
+					<el-button type="primary" @click="onSubmit(whitelistFormRef)">保 存</el-button>
 				</span>
 			</template>
 		</el-dialog>
 	</div>
 </template>
 
-<script lang="ts" setup name="blackAdd">
-import { ref, reactive } from 'vue';
+<script lang="ts" setup name="whitelistAdd">
+import {nextTick, reactive, ref} from 'vue';
 import {ElMessage, FormInstance} from 'element-plus';
-import { whitelistAdd } from '/@/api/public/wex';
+import {whitelistAdd,whitelistEdit} from '/@/api/public/wex';
+import other from "/@/utils/other";
 
 // 定义子组件向父组件传值/事件
 const emit = defineEmits(['updateList', 'openDialog', 'closeDialog']);
 
 // 定义变量内容
-
+const dialogTitle = ref<string>('新增白名单');
 const state = reactive<any>({
 	ruleForm: {
-    telePhone: '',  // 电话号码
-    time:[],  // 时间
-    setTime: '',  // 开始时间
-    removeTime: '', // 结束时间
+    telPhone: '',  // 电话号码
+    remark: '', // 备注
 	},
 	dialogVisible: false, // 弹窗显示隐藏
 });
 // 打开弹窗
-const blacklistFormRef = ref<RefType>();
-const openDialog = () => {
-	blacklistFormRef.value?.resetFields();
+const whitelistFormRef = ref<RefType>();
+const openDialog = async (row?:any) => {
 	state.dialogVisible = true;
 	emit('openDialog');
+  await nextTick(() => {
+    whitelistFormRef.value?.resetFields();
+    whitelistFormRef.value?.clearValidate();
+    if(row && row.zTelPhoneID) {
+      dialogTitle.value = '编辑白名单';
+      state.ruleForm = other.deepClone(row);
+    }else{
+      dialogTitle.value = '新增白名单';
+      state.ruleForm = {
+        telPhone: '',  // 电话号码
+        remark: '', // 备注
+      };
+    }
+  });
 };
 // 关闭弹窗
 const closeDialog = () => {
@@ -83,12 +79,13 @@ const onSubmit = (formEl: FormInstance | undefined) => {
   if (!formEl) return;
   formEl.validate((valid: boolean) => {
     if(!valid) return;
-    Reflect.deleteProperty(state.ruleForm, 'time');
-    whitelistAdd(state.ruleForm).then(() => {
-      ElMessage.success('新增成功');
-      emit('updateList');
-      state.dialogVisible = false;
-    });
+    const operation = state.ruleForm.zTelPhoneID ? whitelistEdit : whitelistAdd; // 判断是新增还是编辑
+      Reflect.deleteProperty(state.ruleForm, 'time');
+    operation(state.ruleForm).then(() => {
+        ElMessage.success('操作成功');
+        emit('updateList');
+        state.dialogVisible = false;
+      });
 	});
 };
 //暴漏变量和方法

+ 18 - 33
src/views/tels/whitelist/index.vue

@@ -3,8 +3,8 @@
     <el-card shadow="never">
       <!-- 通用搜索 -->
       <el-form :model="state.queryParams" ref="ruleFormRef" :inline="true" @submit.native.prevent class="mt15">
-        <el-form-item label="白名单号码" prop="telePhone">
-          <el-input v-model="state.queryParams.telePhone" placeholder="请输入白名单号码" clearable @keyup.enter="handleQuery" />
+        <el-form-item label="白名单号码" prop="telPhone">
+          <el-input v-model="state.queryParams.telPhone" placeholder="请输入白名单号码" clearable @keyup.enter="handleQuery" />
         </el-form-item>
         <el-form-item label="备注" prop="remark">
           <el-input v-model="state.queryParams.remark" placeholder="请输入备注" clearable @keyup.enter="handleQuery" />
@@ -28,19 +28,13 @@
       <!-- 表格 -->
       <el-table :data="state.tableData" v-loading="state.loading" row-key="id" ref="multipleTableRef" @selection-change="handleSelectionChange">
         <el-table-column type="selection" width="55" />
-        <el-table-column prop="telePhone" label="黑名单号码" show-overflow-tooltip></el-table-column>
-        <el-table-column label="开始时间" show-overflow-tooltip width="170">
-          <template #default="{ row }">
-            <span>{{ formatDate(row.setTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="失效时间" show-overflow-tooltip width="170">
+        <el-table-column prop="telPhone" label="白名单号码" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="remark" label="备注" show-overflow-tooltip></el-table-column>
+        <el-table-column label="操作" width="70" fixed="right" align="center">
           <template #default="{ row }">
-            <span>{{ formatDate(row.removeTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+            <el-button type="primary" link @click="onEdit(row)" v-auth="'tels:whitelist:edit'">编辑</el-button>
           </template>
         </el-table-column>
-        <el-table-column prop="remark" label="备注" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="platFromCode" label="平台编码" show-overflow-tooltip></el-table-column>
         <template #empty>
           <Empty />
         </template>
@@ -62,7 +56,6 @@
 import { defineAsyncComponent, ref, reactive, onMounted } from 'vue';
 import { ElMessageBox, ElMessage } from 'element-plus';
 import type { FormInstance } from 'element-plus';
-import { formatDate } from '/@/utils/formatTime';
 import { auth } from '/@/utils/authFunction';
 import { whitelistPaged, whitelistRemove } from '/@/api/public/wex';
 import { throttle } from '/@/utils/tools';
@@ -75,11 +68,9 @@ const state = reactive<any>({
   queryParams: {
     // 查询参数
     pageIndex: 1, // 当前页码
-    pageSize: 10, // 每页条数
-    telePhone: '', // 电话号码
+    pageSize: 100, // 每页条数
+    telPhone: '', // 电话号码
     remark: '', // 备注
-    sortFiled: '',  // 排序字段
-    asAsc: false, // 是否升序
   },
   loading: false, // 加载状态
   total: 0, // 总条数
@@ -89,25 +80,15 @@ const state = reactive<any>({
 const ruleFormRef = ref<FormInstance>();  // 表单ref
 /** 搜索按钮操作 节流操作 */
 const handleQuery = throttle(() => {
-  state.queryParams.PageIndex = 1;
+  state.queryParams.pageIndex = 1;
   queryList();
 }, 500);
 /** 获取白名单列表 */
 const queryList = () => {
-  if (!auth('tels:whitelist:query')) ElMessage.error('抱歉,您没有权限获取名单列表!');
+  if (!auth('tels:whitelist:query')) ElMessage.error('抱歉,您没有权限获取名单列表!');
   else {
     state.loading = true;
-    let request = {
-      pageIndex: state.queryParams.pageIndex,
-      pageSize: state.queryParams.pageSize,
-      sortFiled: state.queryParams.sortFiled,
-      asAsc: state.queryParams.asAsc,
-      input: {
-        telePhone: state.queryParams.telePhone,
-        remark: state.queryParams.remark,
-      },
-    };
-    whitelistPaged(request)
+    whitelistPaged(state.queryParams)
         .then((response: any) => {
           state.tableData = response.data ?? [];
           state.total = response.count ?? 0;
@@ -129,6 +110,10 @@ const whitelistAddRef = ref<RefType>();
 const onAddWhitelist = () => {
   whitelistAddRef.value.openDialog();
 };
+// 编辑白名单
+const onEdit = (row: any) => {
+  whitelistAddRef.value.openDialog(row);
+};
 // 表格多选
 const multipleTableRef = ref<RefType>();
 const multipleSelection = ref<any>([]);
@@ -137,8 +122,8 @@ const handleSelectionChange = (val: any[]) => {
 };
 // 删除白名单
 const onRemove = () => {
-  const ids:string = multipleSelection.value.map((item: any) => item.blackId).join(',');
-  const phoneNo:string = multipleSelection.value.map((item: any) => item.telePhone).join(',');
+  const ids:string = multipleSelection.value.map((item: any) => item.zTelPhoneID).join(',');
+  const phoneNo:string = multipleSelection.value.map((item: any) => item.telPhone).join(',');
   ElMessageBox.confirm(`此操作将解除:【${phoneNo}】的白名单,是否继续?`, '提示', {
     confirmButtonText: '确认',
     cancelButtonText: '取消',
@@ -149,7 +134,7 @@ const onRemove = () => {
   })
       .then(() => {
         whitelistRemove(ids).then(() => {
-          ElMessage.success('删除成功');
+          ElMessage.success('操作成功');
           queryList();
         });
       })