Explorar o código

feat:通话记录对接;

zhangchong hai 1 ano
pai
achega
227b169d6c

+ 10 - 0
src/api/business/order.ts

@@ -135,3 +135,13 @@ export const hotSpotType = (params?: object) => {
 		params,
 	});
 };
+/**
+ * @description: 重复工单列表查询
+ * @param {object} params
+ */
+export const duplicateOrder = (params?: object) => {
+	return request({
+		url: `/api/v1/Order/duplicate?${qs.stringify(params)}`,
+		method: 'get'
+	});
+};

+ 6 - 8
src/api/tels/callLog.ts

@@ -13,22 +13,20 @@ import request from '/@/utils/request';
  * @param {object} params  
  * @return {*}
  */
-export const callPaged = (params?: object) => {
+export const callLogPaged = (params?: object) => {
 	return request({
-		url: '/api/v1/Call/paged',
+		url: `/api/v1/Call/wexpaged`,
 		method: 'get',
-		params: params,
+		params
 	});
 };
 /**
- * @description: 分页通话记录未接列表
- * @param {object} params 
+ * @description: 分页通话记录基础信息
  * @return {*}
  */
-export const callPagedMissed = (params?: object) => {
+export const callBaseData = () => {
 	return request({
-		url: '/api/v1/Call/messed-paged',
+		url: `/api/v1/Call/base-data`,
 		method: 'get',
-		params: params,
 	});
 };

+ 2 - 4
src/components/ProcessTimeLine/index.vue

@@ -24,18 +24,16 @@
 				<el-card class="card">
 					<!-- 正常流转 -->
 					<div
-						class="icon"
+						class="icon color-primary"
 						v-if="item.status === 1"
-						style="color: var(--el-color-primary)"
 						:style="'background-image:url(' + getImageUrl('order/processNormal.png') + ')'"
 					>
 						{{ item.statusText }}
 					</div>
 					<!-- 其他状态 -->
 					<div
-						class="icon"
+						class="icon color-danger"
 						:style="'background-image:url(' + getImageUrl('order/processReturn.png') + ')'"
-						style="color: var(--el-color-danger)"
 						v-else
 					>
 						{{ item.statusText }}

+ 0 - 4
src/layout/navBars/breadcrumb/telControl.vue

@@ -1093,16 +1093,12 @@ onBeforeMount(() => {
 			&.disabled {
 				cursor: not-allowed;
 				overflow: hidden;
-				// &:hover{
-				//     background-color:var(--hotline-bg-main-color);
-				// }
 			}
 		}
 
 		.active {
 			&:hover {
 				color: var(--hotline-color-white);
-				// background-image: url('../../../assets/images/phoneControls/active.png');
 				background-image: url('/@/assets/images/phoneControls/active.png');
 				background-repeat: no-repeat;
 				background-size: 100% 100%;

+ 4 - 0
src/theme/app.scss

@@ -445,3 +445,7 @@ li {
 	border-left: 4px solid var(--el-color-primary);
 	padding-left: 7px;
 }
+// 字体加粗
+.font-bold{
+	font-weight: bold;
+}

+ 16 - 14
src/views/business/order/accept/index.vue

@@ -451,20 +451,20 @@
 							<el-table-column prop="currentStepName" label="当前环节" show-overflow-tooltip></el-table-column>
 							<el-table-column prop="statusText" label="状态" width="70" fixed="right" align="center">
 								<template #default="{ row }">
-									<!-- 草稿 -->
-									<span style="color: var(--el-color-info)" v-if="row.status === 0">{{ row.statusText }}</span>
-									<!-- 待签收 -->
-									<span style="color: var(--el-color-success)" v-if="row.status === 10">{{ row.statusText }}</span>
-									<!-- 办理中 -->
-									<span style="color: var(--el-color-primary)" v-if="row.status === 20">{{ row.statusText }}</span>
-									<!-- 会签中 -->
-									<span style="color: var(--el-color-primary)" v-if="row.status === 30">{{ row.statusText }}</span>
-									<!-- 退回 -->
-									<span style="color: var(--el-color-danger)" v-if="row.status === 40">{{ row.statusText }}</span>
-									<!-- 办理完成 -->
-									<span style="color: var(--el-color-success)" v-if="row.status === 50">{{ row.statusText }}</span>
-									<!-- 已归档 -->
-									<span style="color: var(--el-color-info)" v-if="row.status === 60">{{ row.statusText }}</span>
+                  <!-- 草稿 -->
+                  <span class="color-info" v-if="row.status === 0">{{ row.statusText }}</span>
+                  <!-- 待签收 -->
+                  <span class="color-success" v-if="row.status === 10">{{ row.statusText }}</span>
+                  <!-- 办理中 -->
+                  <span class="color-primary" v-if="row.status === 20">{{ row.statusText }}</span>
+                  <!-- 会签中 -->
+                  <span class="color-primary" v-if="row.status === 30">{{ row.statusText }}</span>
+                  <!-- 退回 -->
+                  <span class="color-danger" v-if="row.status === 40">{{ row.statusText }}</span>
+                  <!-- 办理完成 -->
+                  <span class="color-success" v-if="row.status === 50">{{ row.statusText }}</span>
+                  <!-- 已归档 -->
+                  <span class="color-info" v-if="row.status === 60">{{ row.statusText }}</span>
 								</template>
 							</el-table-column>
 							<el-table-column prop="statusText" label="操作" width="170" fixed="right" align="center">
@@ -629,6 +629,7 @@ const state = reactive<any>({
 		content: '', // 工单内容
     duplicateIds:[], //重复工单id
     duplicateTitle: '', // 重复工单标题
+    callAddress:'',// 来电归属地
 	},
 	formLoading: false, // 表单加载状态
 	historyOrderLoading: false, // 历史工单加载状态
@@ -1064,6 +1065,7 @@ onBeforeMount(async () => {
         state.ruleForm.fromPhone = historyParams.fromTel;
         state.ruleForm.callId = historyParams.telGuid;
         state.ruleForm.transferPhone = historyParams.transfer;
+        state.ruleForm.callAddress = historyParams.telArea; // 来电归属地
         state.ruleForm.channel = {
           // 来源渠道
           dicDataValue: state.ruleForm.sourceChannelCode,

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

@@ -151,10 +151,10 @@
         <el-table-column prop="hotspotName" label="热点分类" show-overflow-tooltip></el-table-column>
         <el-table-column label="紧急程度" show-overflow-tooltip prop="emergencyLevelText" width="100">
           <template #default="{row}">
-						<span v-if="row.emergencyLevel === 2 || row.emergencyLevel === 3" style="color: var(--el-color-danger)">{{
+						<span v-if="row.emergencyLevel === 2 || row.emergencyLevel === 3" class="color-danger">{{
                 row.emergencyLevelText
               }}</span>
-            <span v-else style="color: var(--el-color-primary)">{{ row.emergencyLevelText }}</span>
+            <span v-else class="color-primary">{{ row.emergencyLevelText }}</span>
           </template>
         </el-table-column>
         <el-table-column prop="acceptTypeText" label="来源方式" show-overflow-tooltip></el-table-column>

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

@@ -32,16 +32,16 @@
                       </el-popover> -->
 								</el-form-item>
 							</el-col>
+              <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
+                <el-form-item label="号码归属地">
+                  {{ state.ruleForm.callAddress }}
+                </el-form-item>
+              </el-col>
 							<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
 								<el-form-item label="来电人姓名">
 									{{ state.ruleForm.fromName }} <span class="ml5"> {{ state.ruleForm.fromGenderText }}</span>
 								</el-form-item>
 							</el-col>
-							<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
-								<el-form-item label="号码归属地">
-									{{ state.ruleForm.fromName }}
-								</el-form-item>
-							</el-col>
 							<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
 								<el-form-item label="来电人性别">
 									{{ state.ruleForm.fromGenderText }}

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

@@ -13,7 +13,7 @@
           <el-table-column type="selection" label="请选择" width="80" :reserve-selection="true"/>
 					<el-table-column prop="phoneNo" label="工单标题" show-overflow-tooltip>
 						<template #default="{row}">
-							<span style="color: var(--el-color-primary)">{{ row.title }}</span>
+							<span class="color-primary">{{ row.title }}</span>
 						</template>
 					</el-table-column>
 					<el-table-column prop="hotspotName" label="热点分类" show-overflow-tooltip> </el-table-column>
@@ -21,20 +21,20 @@
 					<el-table-column prop="currentStepName" label="当前环节" show-overflow-tooltip></el-table-column>
 					<el-table-column prop="statusText" label="状态" width="70" fixed="right" align="center">
 						<template #default="{row}">
-							<!-- 草稿 -->
-							<span style="color: var(--el-color-info)" v-if="row.status === 0">{{ row.statusText }}</span>
-							<!-- 待签收 -->
-							<span style="color: var(--el-color-success)" v-if="row.status === 10">{{ row.statusText }}</span>
-							<!-- 办理中 -->
-							<span style="color: var(--el-color-primary)" v-if="row.status === 20">{{ row.statusText }}</span>
-							<!-- 会签中 -->
-							<span style="color: var(--el-color-primary)" v-if="row.status === 30">{{ row.statusText }}</span>
-							<!-- 退回 -->
-							<span style="color: var(--el-color-danger)" v-if="row.status === 40">{{ row.statusText }}</span>
-							<!-- 办理完成 -->
-							<span style="color: var(--el-color-success)" v-if="row.status === 50">{{ row.statusText }}</span>
-							<!-- 已归档 -->
-							<span style="color: var(--el-color-info)" v-if="row.status === 60">{{ row.statusText }}</span>
+              <!-- 草稿 -->
+              <span class="color-info" v-if="row.status === 0">{{ row.statusText }}</span>
+              <!-- 待签收 -->
+              <span class="color-success" v-if="row.status === 10">{{ row.statusText }}</span>
+              <!-- 办理中 -->
+              <span class="color-primary" v-if="row.status === 20">{{ row.statusText }}</span>
+              <!-- 会签中 -->
+              <span class="color-primary" v-if="row.status === 30">{{ row.statusText }}</span>
+              <!-- 退回 -->
+              <span class="color-danger" v-if="row.status === 40">{{ row.statusText }}</span>
+              <!-- 办理完成 -->
+              <span class="color-success" v-if="row.status === 50">{{ row.statusText }}</span>
+              <!-- 已归档 -->
+              <span class="color-info" v-if="row.status === 60">{{ row.statusText }}</span>
 						</template>
 					</el-table-column>
           <el-table-column label="操作" width="150" fixed="right" align="center">

+ 0 - 366
src/views/business/order/components/Order-process.vue

@@ -1,366 +0,0 @@
-<template>
-		<el-dialog
-			v-model="state.dialogVisible"
-			draggable
-			:title="state.title + '流程'"
-			ref="dialogRef"
-			@mouseup="mouseup"
-			:style="'transform: ' + state.transform + ';'"
-			append-to-body
-			destroy-on-close
-			@opened="opened"
-		>
-			<el-form :model="state.ruleForm" label-width="100px" ref="ruleFormRef">
-				<el-row :gutter="35">
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" v-if="!['return'].includes(state.processType)">
-						<el-form-item label="下一环节" prop="nextStepCode" :rules="[{ required: true, message: '请选择下一环节', trigger: 'change' }]">
-							<el-select v-model="state.ruleForm.nextStepCode" placeholder="请选择下一环节" class="w100" @change="selectNextStep">
-								<el-option v-for="item in state.nextStepOptions" :key="item.key" :label="item.value" :value="item.key" />
-							</el-select>
-						</el-form-item>
-					</el-col>
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" v-if="!['return'].includes(state.processType)">
-						<el-form-item label="处理人" prop="nextHandlers" :rules="[{ required: false, message: '请选择处理人', trigger: 'change' }]">
-							<el-select
-								v-model="state.ruleForm.nextHandlers"
-								multiple
-								filterable
-								placeholder="请选择处理人"
-								class="w100"
-								@change="selectHandlers"
-								value-key="key"
-								clearable
-							>
-								<el-option v-for="item in state.handlerOptions" :key="item.key" :label="item.value" :value="item" />
-							</el-select>
-						</el-form-item>
-					</el-col>
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" v-if="!['return'].includes(state.processType) && showMainHandler">
-						<el-form-item label="主办" prop="nextMainHandler" :rules="[{ required: false, message: '请选择主办', trigger: 'change' }]">
-							<el-select v-model="state.ruleForm.nextMainHandler" placeholder="请选择主办" class="w100" filterable>
-								<el-option v-for="item in state.handlerMainOptions" :key="item.key" :label="item.value" :value="item.key" />
-							</el-select>
-						</el-form-item>
-					</el-col>
-					<!-- <el-col :xs="24" :sm="12" :md="8" :lg="12" :xl="12">
-						<el-form-item label="" prop="acceptSms">
-							<el-checkbox v-model="state.ruleForm.acceptSms" label="短信通知" />
-						</el-form-item>
-					</el-col> -->
-					<!--  办理流程展示期满时间  -->
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" v-if="['next'].includes(state.processType)">
-						<el-form-item label="期满时间" prop="expiredTime" :rules="[{ required: true, message: '请选择期满时间', trigger: 'change' }]">
-							<el-date-picker
-								v-model="state.ruleForm.expiredTime"
-								type="datetime"
-								placeholder="请选择期满时间"
-								value-format="YYYY-MM-DD[T]HH:mm:ss"
-								class="w100"
-							/>
-						</el-form-item>
-					</el-col>
-					<!--  办理流程和开始流程是否发起会签  -->
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" v-if="['next', 'start'].includes(state.processType)">
-						<el-form-item
-							label="是否发起会签"
-							prop="isStartCountersign"
-							:rules="[{ required: false, message: '请选择是否发起会签', trigger: 'change' }]"
-						>
-							<el-switch v-model="state.ruleForm.isStartCountersign" inline-prompt active-text="是" inactive-text="否" />
-						</el-form-item>
-					</el-col>
-					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-						<el-form-item :label="state.title + '意见'" prop="opinion" :rules="[{ required: true, message: '请填写常用意见', trigger: 'blur' }]">
-              <common-advice
-                  @chooseAdvice="chooseAdvice"
-                  v-model="state.ruleForm.opinion"
-                  placeholder="请填写常用意见"
-                  :loading="state.loading"
-                  :commonEnum="state.commonEnum"
-              />
-						</el-form-item>
-					</el-col>
-					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-						<el-form-item label="附件" prop="additions" :rules="[{ required: false, message: '请填写诉求内容', trigger: 'change' }]">
-							<annex-list></annex-list>
-						</el-form-item>
-					</el-col>
-				</el-row>
-			</el-form>
-			<template #footer>
-				<span class="dialog-footer">
-					<el-button @click="onCancel" class="default-button">取 消</el-button>
-					<el-button type="primary" @click="onSubmit(ruleFormRef)" :loading="state.loading">提 交</el-button>
-				</span>
-			</template>
-		</el-dialog>
-</template>
-
-<script setup lang="ts" name="orderProcess">
-import { defineAsyncComponent, reactive, ref, computed } from 'vue';
-import { ElMessage, ElMessageBox, FormInstance } from 'element-plus';
-import other from '/@/utils/other';
-import { OrderFlowParams, orderStartFlow } from '/@/api/business/order';
-import { workflowNextSteps, workflowNext, workflowRecall, workflowPrevious, workflowRecallParams, workflowStepOptions } from '/@/api/system/workflow';
-
-// 引入组件
-const CommonAdvice = defineAsyncComponent(() => import('/@/components/CommonAdvice/index.vue')); // 常用意见
-const AnnexList = defineAsyncComponent(() => import('/@/components/AnnexList/index.vue'));  // 附件列表
-// 定义子组件向父组件传值/事件
-const emit = defineEmits(['orderProcessSuccess', 'orderProcessFailed']);
-// 定义变量内容
-const state = reactive<any>({
-	dialogVisible: false, // 弹窗显示隐藏
-	title: '提交',  // 弹窗标题
-	ruleForm: {
-		acceptSms: false, // 是否接收短信
-		opinion: '', // 意见
-		nextHandlers: [], // 下一节点处理人
-		nextMainHandler: '', // 主办人
-		expiredTime: '', //期满时间
-		isStartCountersign: false, // 是否发起会签
-	},
-	nextStepOptions: [], // 下一节点
-	handlerOptions: [], // 处理人
-	transform: 'translate(0px, 0px)', // 滚动条位置
-	fileList: [], // 附件列表
-	loading: false, // 提交按钮loading
-	processType: 'next',  // 流程状态
-	workflowId: '', // 流程id
-	commonEnum: '', // 常用意见类型
-	handlerClassifies: [], //撤回处理人
-	handlerMainOptions: [], // 主办人
-	handleId: '', // 流程处理ID
-});
-const ruleFormRef = ref<RefType>(); //表单组件
-// 打开弹窗
-const openDialog = async (val: any) => {
-	state.processType = val.processType ?? 'next'; // 流程状态
-	state.ruleForm.workflowId = state.workflowId = val.id ?? ''; // 流程id
-	state.commonEnum = val.commonEnum ?? ''; // 常用意见类型
-	state.title = val.title ?? '提交流程'; // 流程标题
-	let res: any = {};
-	switch (state.processType) {
-		case 'start': //开始流程
-			res = await OrderFlowParams(); //获取开启流程参数
-			state.nextStepOptions = res.result.steps;
-			state.handleId = res.result.id;
-			if (state.nextStepOptions.length === 1) {
-				state.ruleForm.nextStepCode = state.nextStepOptions[0].key;
-				getNextStepOption(res.result.id, state.nextStepOptions[0].key);
-			}
-			break;
-		case 'recall': // 撤回流程
-			res = await workflowRecallParams(state.workflowId); //撤回参数
-			state.nextStepOptions = res.result.steps;
-			state.handleId = res.result.id;
-			if (state.nextStepOptions.length === 1) {
-				state.ruleForm.nextStepCode = state.nextStepOptions[0].key;
-				getNextStepOption(res.result.id, state.nextStepOptions[0].key);
-			}
-			break;
-		case 'return': // 退回流程
-			break;
-		case 'next': // 默认下一流程
-			res = await workflowNextSteps(state.workflowId);
-			state.nextStepOptions = res.result.steps;
-			state.ruleForm.expiredTime = res.result?.expiredTime ?? '';
-			state.handleId = res.result.id;
-			if (state.nextStepOptions.length === 1) {
-				state.ruleForm.nextStepCode = state.nextStepOptions[0].key;
-				getNextStepOption(res.result.id, state.nextStepOptions[0].key);
-			}
-			break;
-		case 'delay': // 延期
-			res = await workflowNextSteps(state.workflowId);
-			state.nextStepOptions = res.result.steps;
-			state.ruleForm.expiredTime = res.result?.expiredTime ?? '';
-			state.handleId = res.result.id;
-			if (state.nextStepOptions.length === 1) {
-				state.ruleForm.nextStepCode = state.nextStepOptions[0].key;
-				getNextStepOption(res.result.id, state.nextStepOptions[0].key);
-			}
-			break;
-		case 'supervise': // 督办
-			res = await workflowNextSteps(state.workflowId);
-			state.nextStepOptions = res.result.steps;
-			state.ruleForm.expiredTime = res.result?.expiredTime ?? '';
-			state.handleId = res.result.id;
-			if (state.nextStepOptions.length === 1) {
-				state.ruleForm.nextStepCode = state.nextStepOptions[0].key;
-				getNextStepOption(res.result.id, state.nextStepOptions[0].key);
-			}
-			break;
-
-		default: // 默认下一流程
-			res = await workflowNextSteps(state.workflowId);
-			state.nextStepOptions = res.result.steps;
-			state.ruleForm.expiredTime = res.result?.expiredTime ?? '';
-			state.handleId = res.result.id;
-			if (state.nextStepOptions.length === 1) {
-				state.ruleForm.nextStepCode = state.nextStepOptions[0].key;
-				getNextStepOption(res.result.id, state.nextStepOptions[0].key);
-			}
-			break;
-	}
-	state.dialogVisible = true;
-};
-// 打开弹窗清空表单
-const opened = () => {
-	ruleFormRef.value?.clearValidate();
-	ruleFormRef.value?.resetFields();
-};
-// 流程选择下一环节
-const selectNextStep = (val: any) => {
-	ruleFormRef.value?.resetFields('nextHandlers');
-	ruleFormRef.value?.resetFields('nextMainHandler');
-	let next: any;
-	next = state.nextStepOptions.find((item: any) => item.key === val);
-	getNextStepOption(state.handleId, next.key);
-};
-// 查询流程下一节点参数
-const getNextStepOption = async (DefineId: string, Code: string) => {
-	try {
-		const res: any = await workflowStepOptions({ DefineId, Code });
-		state.handlerOptions = res.result ?? [];
-	} catch (error) {
-		console.log(error);
-	}
-};
-// 选择处理人
-const selectHandlers = () => {
-	ruleFormRef.value?.resetFields('nextMainHandler');
-};
-const showMainHandler = computed(() => {
-	return state.ruleForm.nextHandlers.length > 1;
-});
-// 主办从处理人中选择
-state.handlerMainOptions = computed(() => {
-	return state.ruleForm.nextHandlers;
-});
-// 设置抽屉
-const dialogRef = ref<RefType>();
-const mouseup = () => {
-	state.transform = dialogRef.value.dialogContentRef.$el.style.transform;
-};
-// 关闭弹窗
-const closeDialog = () => {
-	state.dialogVisible = false;
-};
-// 取消
-const onCancel = () => {
-	closeDialog();
-};
-// 选择常用意见 填入填写框
-const chooseAdvice = (item: any) => {
-	state.ruleForm.opinion += item.content;
-};
-// 提交
-const onSubmit = (formEl: FormInstance | undefined) => {
-	if (!formEl) return;
-	formEl.validate((valid: boolean) => {
-		if (!valid) return;
-		ElMessageBox.confirm(`确认提交?`, '提示', {
-			confirmButtonText: '确认',
-			cancelButtonText: '取消',
-			type: 'warning',
-			draggable: true,
-			cancelButtonClass: 'default-button',
-			autofocus: false,
-		})
-			.then(() => {
-				state.loading = true;
-				state.ruleForm.additions = state.fileList;
-				let submitObj = other.deepClone(state.ruleForm);
-				if (submitObj.nextHandlers && submitObj.nextHandlers.length) {
-					submitObj.nextHandlers = submitObj.nextHandlers.map((item: any) => {
-						return {
-							id: item.key,
-							name: item.value,
-						};
-					});
-					if (submitObj.nextHandlers.length === 1) {
-						submitObj.nextMainHandler = submitObj.nextHandlers[0].id;
-					}
-				}
-				switch (state.processType) {
-					case 'start': //开始流程
-						orderStartFlow(state.workflowId, submitObj)
-							.then(() => {
-								ElMessage.success('操作成功');
-								state.loading = false;
-								state.dialogVisible = false;
-								emit('orderProcessSuccess');
-							})
-							.catch(() => {
-								state.loading = false;
-								state.dialogVisible = false;
-							});
-						break;
-					case 'recall': // 撤回流程
-						workflowRecall(submitObj)
-							.then(() => {
-								ElMessage.success('操作成功');
-								state.loading = false;
-								state.dialogVisible = false;
-								emit('orderProcessSuccess');
-							})
-							.catch(() => {
-								state.loading = false;
-								state.dialogVisible = false;
-								emit('orderProcessFailed');
-							});
-						break;
-					case 'return': // 退回流程
-						workflowPrevious(submitObj)
-							.then(() => {
-								ElMessage.success('操作成功');
-								state.loading = false;
-								state.dialogVisible = false;
-								emit('orderProcessSuccess');
-							})
-							.catch(() => {
-								state.loading = false;
-								state.dialogVisible = false;
-								emit('orderProcessFailed');
-							});
-						break;
-					case 'next': // 默认下一流程
-						workflowNext(submitObj)
-							.then(() => {
-								ElMessage.success('操作成功');
-								state.loading = false;
-								state.dialogVisible = false;
-								emit('orderProcessSuccess');
-							})
-							.catch(() => {
-								state.loading = false;
-								state.dialogVisible = false;
-								emit('orderProcessFailed');
-							});
-						break;
-					default: // 默认下一流程
-						workflowNext(submitObj)
-							.then(() => {
-								ElMessage.success('操作成功');
-								state.loading = false;
-								state.dialogVisible = false;
-								emit('orderProcessSuccess');
-							})
-							.catch(() => {
-								state.loading = false;
-								state.dialogVisible = false;
-								emit('orderProcessFailed');
-							});
-						break;
-				}
-			})
-			.catch(() => {});
-	});
-};
-// 暴露变量
-defineExpose({
-	openDialog,
-	closeDialog,
-});
-</script>

+ 15 - 37
src/views/business/order/components/Order-repeat.vue

@@ -1,18 +1,9 @@
 <template>
   <el-dialog v-model="state.dialogVisible" draggable title="重复工单" ref="dialogRef" width="60%" append-to-body>
-    <el-form :model="state.queryParams" ref="ruleFormRef" :inline="true" @submit.native.prevent>
-      <el-form-item label="关键词" prop="Keyword">
-        <el-input v-model="state.queryParams.Keyword" placeholder="工单标题/工单编码" clearable @keyup.enter="handleQuery" />
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
-        <el-button @click="resetQuery(ruleFormRef)" class="default-button"> <SvgIcon name="ele-Refresh" class="mr5" />重置 </el-button>
-      </el-form-item>
-    </el-form>
     <el-table :data="state.tableData"  ref="multipleTableRef" >
       <el-table-column prop="phoneNo" label="工单标题" show-overflow-tooltip>
         <template #default="{row}">
-          <span style="color: var(--el-color-primary)">{{ row.title }}</span>
+          <span class="color-primary">{{ row.title }}</span>
         </template>
       </el-table-column>
       <el-table-column prop="hotspotName" label="热点分类" show-overflow-tooltip> </el-table-column>
@@ -21,19 +12,19 @@
       <el-table-column prop="statusText" label="状态" width="70" fixed="right" align="center">
         <template #default="{row}">
           <!-- 草稿 -->
-          <span style="color: var(--el-color-info)" v-if="row.status === 0">{{ row.statusText }}</span>
+          <span class="color-info" v-if="row.status === 0">{{ row.statusText }}</span>
           <!-- 待签收 -->
-          <span style="color: var(--el-color-success)" v-if="row.status === 10">{{ row.statusText }}</span>
+          <span class="color-success" v-if="row.status === 10">{{ row.statusText }}</span>
           <!-- 办理中 -->
-          <span style="color: var(--el-color-primary)" v-if="row.status === 20">{{ row.statusText }}</span>
+          <span class="color-primary" v-if="row.status === 20">{{ row.statusText }}</span>
           <!-- 会签中 -->
-          <span style="color: var(--el-color-primary)" v-if="row.status === 30">{{ row.statusText }}</span>
+          <span class="color-primary" v-if="row.status === 30">{{ row.statusText }}</span>
           <!-- 退回 -->
-          <span style="color: var(--el-color-danger)" v-if="row.status === 40">{{ row.statusText }}</span>
+          <span class="color-danger" v-if="row.status === 40">{{ row.statusText }}</span>
           <!-- 办理完成 -->
-          <span style="color: var(--el-color-success)" v-if="row.status === 50">{{ row.statusText }}</span>
+          <span class="color-success" v-if="row.status === 50">{{ row.statusText }}</span>
           <!-- 已归档 -->
-          <span style="color: var(--el-color-info)" v-if="row.status === 60">{{ row.statusText }}</span>
+          <span class="color-info" v-if="row.status === 60">{{ row.statusText }}</span>
         </template>
       </el-table-column>
       <template #empty>
@@ -56,15 +47,13 @@
 
 <script setup lang="ts" name="orderRepeat">
 import { reactive, ref} from 'vue';
-import type { FormInstance } from 'element-plus';
-import { historyOrder } from '/@/api/business/order';
+import {duplicateOrder} from '/@/api/business/order'
 // 定义变量内容
 const state = reactive<any>({
   dialogVisible: false, // 弹窗显示隐藏
   queryParams: {
     PageIndex: 1, // 当前页
     PageSize: 10, // 每页条数
-    Keyword: '',  // 关键字
   },
   tableData: [], // 表格数据
   total: 0,   // 总条数
@@ -75,7 +64,6 @@ const ruleFormRef = ref<RefType>(); // 表单ref
 // 打开弹窗
 const openDialog = (row: any) => {
   state.ruleForm = row;
-  console.log(row)
   getList();
   state.dialogVisible = true;
 };
@@ -84,25 +72,15 @@ const dialogRef = ref<RefType>();
 const closeDialog = () => {
   state.dialogVisible = false;
 };
-/** 搜索按钮操作 */
-const handleQuery = () => {
-  state.queryParams.PageIndex = 1;
-  getList();
-};
-/** 重置按钮操作 */
-const resetQuery = (formEl: FormInstance | undefined) => {
-  if (!formEl) return;
-  formEl.resetFields();
-  handleQuery();
-};
 /** 获取历史工单 */
 const getList = () => {
-  if (!state.ruleForm.fromPhone) return;
+  if (!state.ruleForm.duplicateIds) return;
   state.loading = true;
-  let request = {
-    ...state.queryParams
-  };
-  historyOrder(request)
+  let req = {
+    ...state.queryParams,
+    OrderIds:state.ruleForm.duplicateIds
+  }
+  duplicateOrder(req)
       .then((response: any) => {
         state.tableData = response?.result.items ?? [];
         state.total = response?.result.total;

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

@@ -38,10 +38,10 @@
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-						<el-form-item label="补充内容" class="textarea" prop="content" :rules="[{ required: true, message: '请填写补充内容', trigger: 'blur' }]">
+						<el-form-item label="补充内容" class="textarea" prop="opinion" :rules="[{ required: true, message: '请填写补充内容', trigger: 'blur' }]">
               <common-advice
                   @chooseAdvice="chooseAdvice"
-                  v-model="state.ruleForm.content"
+                  v-model="state.ruleForm.opinion"
                   placeholder="请填写补充内容"
                   :loading="state.loading"
                   :commonEnum="commonEnum.HandleAgain"
@@ -84,7 +84,7 @@ const emit = defineEmits(['onSupplySuccess']);
 const state = reactive<any>({
 	dialogVisible: false,
 	ruleForm: {
-		opinion: '', // 补充内容
+    opinion: '', // 补充内容
 		additions: [], // 附件
 		workflowId: '', // 流程id
 	},

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

@@ -200,25 +200,25 @@
 				</el-table-column>
 				<el-table-column label="标题" show-overflow-tooltip width="400">
 					<template #default="{ row }">
-						<span style="color: var(--el-color-primary)">{{ row.title }}</span>
+						<span class="color-primary">{{ row.title }}</span>
 					</template>
 				</el-table-column>
 				<el-table-column label="工单状态" show-overflow-tooltip width="100">
 					<template #default="{ row }">
-						<!-- 草稿 -->
-						<span style="color: var(--el-color-info)" v-if="row.status === 0">{{ row.statusText }}</span>
-						<!-- 待签收 -->
-						<span style="color: var(--el-color-success)" v-if="row.status === 10">{{ row.statusText }}</span>
-						<!-- 办理中 -->
-						<span style="color: var(--el-color-primary)" v-if="row.status === 20">{{ row.statusText }}</span>
-						<!-- 会签中 -->
-						<span style="color: var(--el-color-primary)" v-if="row.status === 30">{{ row.statusText }}</span>
-						<!-- 退回 -->
-						<span style="color: var(--el-color-danger)" v-if="row.status === 40">{{ row.statusText }}</span>
-						<!-- 办理完成 -->
-						<span style="color: var(--el-color-success)" v-if="row.status === 50">{{ row.statusText }}</span>
-						<!-- 已归档 -->
-						<span style="color: var(--el-color-info)" v-if="row.status === 60">{{ row.statusText }}</span>
+            <!-- 草稿 -->
+            <span class="color-info" v-if="row.status === 0">{{ row.statusText }}</span>
+            <!-- 待签收 -->
+            <span class="color-success" v-if="row.status === 10">{{ row.statusText }}</span>
+            <!-- 办理中 -->
+            <span class="color-primary" v-if="row.status === 20">{{ row.statusText }}</span>
+            <!-- 会签中 -->
+            <span class="color-primary" v-if="row.status === 30">{{ row.statusText }}</span>
+            <!-- 退回 -->
+            <span class="color-danger" v-if="row.status === 40">{{ row.statusText }}</span>
+            <!-- 办理完成 -->
+            <span class="color-success" v-if="row.status === 50">{{ row.statusText }}</span>
+            <!-- 已归档 -->
+            <span class="color-info" v-if="row.status === 60">{{ row.statusText }}</span>
 					</template>
 				</el-table-column>
 				<el-table-column prop="currentStepName" label="当前办理节点" show-overflow-tooltip width="150"></el-table-column>
@@ -243,10 +243,10 @@
 
 				<el-table-column label="紧急程度" show-overflow-tooltip prop="emergencyLevelText" width="100">
 					<template #default="{ row }">
-						<span v-if="row.emergencyLevel === 2 || row.emergencyLevel === 3" style="color: var(--el-color-danger)">{{
+						<span v-if="row.emergencyLevel === 2 || row.emergencyLevel === 3" class="color-danger">{{
 							row.emergencyLevelText
 						}}</span>
-						<span v-else style="color: var(--el-color-primary)">{{ row.emergencyLevelText }}</span>
+						<span v-else class="color-primary">{{ row.emergencyLevelText }}</span>
 					</template>
 				</el-table-column>
 

+ 1 - 1
src/views/business/release/component/Order-release.vue

@@ -72,7 +72,7 @@
 								<el-radio label="1">不公开</el-radio>
 								<el-radio label="2">公开</el-radio>
 							</el-radio-group>
-							<span class="ml10" style="color: var(--el-color-danger)"
+							<span class="ml10 color-danger"
 								>( 提示:①不公开:市民需使用信件查询码方可查询工单信息和办理结果;②公开:市民无需查询码即可查询工单信息和办理结果。)</span
 							>
 						</el-form-item>

+ 3 - 3
src/views/business/release/index.vue

@@ -205,9 +205,9 @@ const state = reactive(<any>{
     OrderTitle: '', // 工单标题
 		AcceptType: '', // 受理类型
     HotspotIds: [], // 热点分类
-    PubState:'',// 发布状态
-    PubMan:'',//发布人
-    PubRange:'',//发布范围
+    PubState:'0',// 发布状态
+    PubMan:'0',//发布人
+    PubRange:'0',//发布范围
     CreationTimeStart:'', //受理时间(工单创建时间)
     CreationTimeEnd:'',//受理时间(工单创建时间)
     FiledTimeStart:'',// 归档时间

+ 2 - 2
src/views/home/index.vue

@@ -99,9 +99,9 @@
 								<el-table-column prop="no" label="受理类型" show-overflow-tooltip></el-table-column>
 								<el-table-column label="紧急程度" show-overflow-tooltip prop="emergencyLevelText" width="100">
 									<template #default="{ row }">
-										<span v-if="row.emergencyLevel === 2 || row.emergencyLevel === 3" style="color: var(--el-color-danger)">{{
+										<span v-if="row.emergencyLevel === 2 || row.emergencyLevel === 3" class="color-danger">{{
 											row.emergencyLevelText}}</span>
-										<span v-else style="color: var(--el-color-primary)">{{ row.emergencyLevelText }}</span>
+										<span v-else class="color-primary">{{ row.emergencyLevelText }}</span>
 									</template>
 								</el-table-column>
 								<el-table-column prop="no" label="热点分类" show-overflow-tooltip></el-table-column>

+ 3 - 3
src/views/knowledge/apply/index.vue

@@ -49,9 +49,9 @@
 				<el-table-column prop="knowledgeApplyTypeName" label="申请类型" show-overflow-tooltip></el-table-column>
 				<el-table-column label="状态" show-overflow-tooltip width="170">
 					<template #default="{ row }">
-						<span style="color: var(--el-color-primary)" v-if="row.status === 0">{{ row.statusName }}</span>
-						<span style="color: var(--el-color-success)" v-if="row.status === 1">{{ row.statusName }}</span>
-						<span style="color: var(--el-color-danger)" v-if="row.status === 2">{{ row.statusName }}</span>
+						<span class="color-primary" v-if="row.status === 0">{{ row.statusName }}</span>
+						<span class="color-success" v-if="row.status === 1">{{ row.statusName }}</span>
+						<span class="color-danger" v-if="row.status === 2">{{ row.statusName }}</span>
 					</template>
 				</el-table-column>
 				<el-table-column prop="processor" label="处理人" show-overflow-tooltip width="170"></el-table-column>

+ 4 - 4
src/views/knowledge/apply/my/index.vue

@@ -51,10 +51,10 @@
 				<el-table-column prop="knowledgeApplyTypeName" label="申请类型" show-overflow-tooltip></el-table-column>
 				<el-table-column label="状态" show-overflow-tooltip>
 					<template #default="{ row }">
-						<span style="color: var(--el-color-primary)" v-if="row.status === 0">{{ row.statusName }}</span>
-						<span style="color: var(--el-color-success)" v-if="row.status === 1">{{ row.statusName }}</span>
-						<span style="color: var(--el-color-danger)" v-if="row.status === 2">{{ row.statusName }}</span>
-						<span style="color: var(--el-color-info)" v-if="row.status === 3">{{ row.statusName }}</span>
+            <span v-if="row.status === 0" class="color-primary">{{ row.statusName }}</span>
+            <span v-if="row.status === 1" class="color-success">{{ row.statusName }}</span>
+            <span v-if="row.status === 2" class="color-danger">{{ row.statusName }}</span>
+            <span v-if="row.status === 3" class="color-info">{{ row.statusName }}</span>
 					</template>
 				</el-table-column>
 				<el-table-column prop="toNo" label="创建时间" show-overflow-tooltip width="170">

+ 1 - 1
src/views/knowledge/knowledge/component/knowledge-edit.vue

@@ -5,7 +5,7 @@
 				<el-row :gutter="35">
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 						<el-form-item label="温馨提示">
-							<span style="color: var(--el-color-danger)">
+							<span class="color-danger">
 								发布知识前请仔细阅读 <el-link type="primary" @click="showStandard">【知识编写规范】</el-link>,以免知识无法通过审核,浪费您的时间!
 							</span>
 						</el-form-item>

+ 4 - 4
src/views/knowledge/knowledge/delApply/index.vue

@@ -49,10 +49,10 @@
 				<el-table-column prop="pageView" label="阅读次数" show-overflow-tooltip></el-table-column>
 				<el-table-column label="状态" show-overflow-tooltip>
 					<template #default="{ row }">
-						<span v-if="row.workFlowApplyStatus === 1" style="color: var(--el-color-primary)">{{ row.workFlowApplyStatusName }}</span>
-						<span v-if="row.workFlowApplyStatus === 2" style="color: var(--el-color-success)">{{ row.workFlowApplyStatusName }}</span>
-						<span v-if="row.workFlowApplyStatus === 3" style="color: var(--el-color-info)">{{ row.workFlowApplyStatusName }}</span>
-						<span v-if="row.workFlowApplyStatus === 4" style="color: var(--el-color-danger)">{{ row.workFlowApplyStatusName }}</span>
+						<span v-if="row.workFlowApplyStatus === 1" class="color-primary">{{ row.workFlowApplyStatusName }}</span>
+						<span v-if="row.workFlowApplyStatus === 2" class="color-success">{{ row.workFlowApplyStatusName }}</span>
+						<span v-if="row.workFlowApplyStatus === 3" class="color-info">{{ row.workFlowApplyStatusName }}</span>
+						<span v-if="row.workFlowApplyStatus === 4" class="color-danger">{{ row.workFlowApplyStatusName }}</span>
 					</template>
 				</el-table-column>
 				<el-table-column prop="toNo" label="申请时间" show-overflow-tooltip width="170">

+ 4 - 4
src/views/knowledge/knowledge/index.vue

@@ -169,10 +169,10 @@
 							</el-table-column>
 							<el-table-column prop="status" label="状态" show-overflow-tooltip width="100">
 								<template #default="{ row }">
-									<span v-if="row.status === 1" style="color: var(--el-color-primary)">{{ row.statusName }}</span>
-									<span v-if="row.status === 2" style="color: var(--el-color-danger)">{{ row.statusName }}</span>
-									<span v-if="row.status === 3" style="color: var(--el-color-success)">{{ row.statusName }}</span>
-									<span v-if="row.status === 4" style="color: var(--el-color-info)">{{ row.statusName }}</span>
+									<span v-if="row.status === 1" class="color-primary">{{ row.statusName }}</span>
+									<span v-if="row.status === 2" class="color-danger">{{ row.statusName }}</span>
+									<span v-if="row.status === 3" class="color-success">{{ row.statusName }}</span>
+									<span v-if="row.status === 4" class="color-info">{{ row.statusName }}</span>
 								</template>
 							</el-table-column>
 							<el-table-column label="操作" width="300" fixed="right" align="center">

+ 5 - 5
src/views/knowledge/process/index.vue

@@ -28,8 +28,8 @@
 			<el-table :data="state.tableList" v-loading="state.loading" row-key="id">
 				<el-table-column prop="knowledgeTypeName" label="审核类型" show-overflow-tooltip>
 					<template #default="{ row }">
-						<span v-if="row.workflowModuleStatus === 0" style="color: var(--el-color-primary)">{{ row.workflowModuleStatusName }}</span>
-						<span v-if="row.workflowModuleStatus === 2" style="color: var(--el-color-danger)">{{ row.workflowModuleStatusName }}</span>
+						<span v-if="row.workflowModuleStatus === 0" class="color-primary">{{ row.workflowModuleStatusName }}</span>
+						<span v-if="row.workflowModuleStatus === 2" class="color-danger">{{ row.workflowModuleStatusName }}</span>
 					</template>
 				</el-table-column>
 				<el-table-column prop="title" label="标题" show-overflow-tooltip></el-table-column>
@@ -38,9 +38,9 @@
 				<el-table-column prop="createBMName" label="创建部门" show-overflow-tooltip width="170"></el-table-column>
 				<el-table-column label="状态" show-overflow-tooltip>
 					<template #default="{ row }">
-						<span v-if="row.workFlowApplyStatus === 1" style="color: var(--el-color-primary)">{{ row.workFlowApplyStatusName }}</span>
-						<span v-if="row.workFlowApplyStatus === 2" style="color: var(--el-color-success)">{{ row.workFlowApplyStatusName }}</span>
-						<span v-if="row.workFlowApplyStatus === 3" style="color: var(--el-color-danger)">{{ row.workFlowApplyStatusName }}</span>
+						<span v-if="row.workFlowApplyStatus === 1" class="color-primary">{{ row.workFlowApplyStatusName }}</span>
+						<span v-if="row.workFlowApplyStatus === 2" class="color-success">{{ row.workFlowApplyStatusName }}</span>
+						<span v-if="row.workFlowApplyStatus === 3" class="color-danger">{{ row.workFlowApplyStatusName }}</span>
 					</template>
 				</el-table-column>
 				<el-table-column prop="toNo" label="创建时间" show-overflow-tooltip width="170">

+ 1 - 1
src/views/knowledge/retrieval/index.vue

@@ -88,7 +88,7 @@ const onPreview = (row: any) => {
 const queryTitleLight = (titleInfo: string) => {
   return titleInfo.replace(
       new RegExp(state.queryParams.Keyword, 'g'),
-      `<span style="color:var(--el-color-danger)">${state.queryParams.Keyword}</span>`
+      `<span class="color-danger">${state.queryParams.Keyword}</span>`
   );
 };
 const queryList = () => {

+ 2 - 2
src/views/system/config/holiday/index.vue

@@ -20,9 +20,9 @@
             <div v-if="data.day === item.currantTime" class="h100">
               <el-checkbox v-model="item.checked" class="w100 h100">
                 <div>
-                  {{dayjs(data.day).format('D')}}<span :style="item.isWorkDay ? 'color:var(--el-color-primary)' : 'color:var(--el-color-success)'">({{ item.isWorkDay ? '工作日' :'休息日'}})</span>
+                  {{dayjs(data.day).format('D')}}<span :class="item.isWorkDay ? 'color-primary':'color-success'">({{ item.isWorkDay ? '工作日' :'休息日'}})</span>
                 </div>
-                <div class="lunar"  :style="isFestival( data) ? 'color:var(--el-color-danger);font-weight:bold;' :''">{{ solarToLunar(data) }}</div>
+                <div class="lunar"  :class="{'color-danger font-bold':isFestival(data)}">{{ solarToLunar(data) }}</div>
               </el-checkbox>
             </div>
           </template>

+ 1 - 1
src/views/system/config/workflow/component/Workflow-config.vue

@@ -26,7 +26,7 @@
         </el-table-column>
         <el-table-column prop="phoneNo" label="模板名称" show-overflow-tooltip>
           <template #default="{ row }">
-            <span style="color: var(--el-color-primary)">{{ row.name }}</span>
+            <span class="color-primary">{{ row.name }}</span>
           </template>
         </el-table-column>
         <el-table-column prop="version" label="模板版本号" show-overflow-tooltip> </el-table-column>

+ 3 - 3
src/views/tels/callLog/component/Play-record.vue

@@ -13,11 +13,11 @@ const AudioPlayer = defineAsyncComponent(() => import('/@/components/AudioPlayer
 
 // 定义子组件向父组件传值/事件
 const emit = defineEmits(['openDialog', 'closeDialog']);
-const RecordUrl = ref('http://music.163.com/song/media/outer/url?id=447925558.mp3');//录音地址
-const dialogVisible = ref(false);//是否显示弹窗
+const RecordUrl = ref<string>('');//录音地址
+const dialogVisible = ref<boolean>(false);//是否显示弹窗
 // 打开弹窗
 const openDialog = async (row:any) => {
-  RecordUrl.value = row.RecordUrl;
+  RecordUrl.value = row.recordUrl;
   dialogVisible.value = true;
   emit('openDialog');
 };

+ 86 - 147
src/views/tels/callLog/index.vue

@@ -4,51 +4,40 @@
 			<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="GongHao">
-							<el-input v-model="state.queryParams.GongHao" placeholder="请输入分机号" clearable @keyup.enter="queryList" />
+						<el-form-item label="工号" prop="StaffNo">
+							<el-input v-model="state.queryParams.StaffNo" 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="Telphone">
-								<el-input v-model="state.queryParams.Telphone" 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="CPN">
+              <el-input v-model="state.queryParams.CPN" 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="CDPN">
+                <el-input v-model="state.queryParams.CDPN" 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="CallType">
-								<el-select v-model="state.queryParams.CallType" placeholder="请选择呼叫类型" clearable class="w100">
-									<el-option v-for="item in state.CallTypeOptions" :value="item.value" :key="item.value" :label="item.label" />
+							<el-form-item label="呼叫类型" prop="Direction">
+								<el-select v-model="state.queryParams.Direction" placeholder="请选择呼叫类型" clearable class="w100">
+									<el-option v-for="item in state.callDirectionOption" :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="Result">
-								<el-select v-model="state.queryParams.Result" placeholder="请选择结果" clearable class="w100">
-									<el-option v-for="item in state.resultOptions" :value="item.value" :key="item.value" :label="item.label" />
+							<el-form-item label="呼叫结果" prop="OnState">
+								<el-select v-model="state.queryParams.OnState" placeholder="请选择呼叫结果" clearable class="w100">
+									<el-option v-for="item in state.onStateOption" :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="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 HH:mm:ss"
-								/>
-							</el-form-item>
-						</el-col>
-					</transition>
 					<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
 						<div class="flex-end w100">
 							<el-button type="primary" @click="queryList" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
@@ -66,27 +55,56 @@
 		</el-card>
 		<el-card shadow="never">
 			<!-- 表格 -->
-			<el-table :data="state.tableList" v-loading="state.loading" @sort-change="sortChange">
-				<el-table-column prop="GongHao" label="分机号" show-overflow-tooltip></el-table-column>
-				<el-table-column prop="Telphone" label="电话号码" show-overflow-tooltip width="120"></el-table-column>
-        <el-table-column prop="BeginIvrTime" label="ivr开始时间" show-overflow-tooltip width="170"></el-table-column>
-        <el-table-column prop="EndIvrTime" label="ivr结束时间" show-overflow-tooltip width="170"></el-table-column>
-        <el-table-column prop="BeginQueueTime" label="队列开始时间" show-overflow-tooltip width="170"></el-table-column>
-        <el-table-column prop="EndQueueTime" label="队列结束时间" show-overflow-tooltip width="170"></el-table-column>
-				<el-table-column prop="CallTime" label="通话时间" show-overflow-tooltip width="170"></el-table-column>
-				<el-table-column prop="CallType" label="呼叫类型" show-overflow-tooltip></el-table-column>
-				<el-table-column prop="RingTimes" label="响铃次数" show-overflow-tooltip sortable="custom" width="110"></el-table-column>
-        <el-table-column prop="BeginTalking" label="开始通话时间" show-overflow-tooltip width="170" sortable="custom"> </el-table-column>
-        <el-table-column prop="EndTalking" label="结束通话时间" show-overflow-tooltip width="170" sortable="custom"></el-table-column>
-				<el-table-column prop="TrunkLinePhone" label="中继号" show-overflow-tooltip></el-table-column>
-				<el-table-column prop="AreaName" label="区域" show-overflow-tooltip width="160"></el-table-column>
-				<el-table-column prop="TalkLenth" label="通话时长" show-overflow-tooltip sortable="custom" width="120"></el-table-column>
-				<el-table-column prop="Result" label="结果" show-overflow-tooltip></el-table-column>
-				<el-table-column prop="NoAnswerResult" label="挂机类型" show-overflow-tooltip width="150"></el-table-column>
+			<el-table :data="state.tableList" v-loading="state.loading">
+				<el-table-column prop="staffNo" label="工号" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="cpn" label="主叫" show-overflow-tooltip width="120"></el-table-column>
+				<el-table-column prop="cdpn" label="被叫" show-overflow-tooltip width="120"></el-table-column>
+        <el-table-column prop="areaName" label="号码归属地" show-overflow-tooltip width="120"></el-table-column>
+        <el-table-column prop="onState" label="呼叫类型" show-overflow-tooltip> </el-table-column>
+        <el-table-column prop="ringTimes" label="响铃次数" show-overflow-tooltip width="110"></el-table-column>
+        <el-table-column prop="trunkLine" label="中继号" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="talkTime" label="通话时间(秒)" show-overflow-tooltip width="120"></el-table-column>
+        <el-table-column prop="onStateText" label="通话结果" show-overflow-tooltip> </el-table-column>
+        <el-table-column prop="directionText" label="电话方向" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="endByText" label="挂机类型" show-overflow-tooltip width="120"></el-table-column>
+        <el-table-column prop="inIvrTime" label="ivr开始时间" show-overflow-tooltip width="170">
+          <template #default="{ row }">
+            <span>{{ formatDate(row.inIvrTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="outIvrTime" label="ivr结束时间" show-overflow-tooltip width="170">
+          <template #default="{ row }">
+            <span>{{ formatDate(row.outIvrTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="inQueueTime" label="队列开始时间" show-overflow-tooltip width="170">
+          <template #default="{ row }">
+            <span>{{ formatDate(row.inQueueTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="outQueueTime" label="队列结束时间" show-overflow-tooltip width="170">
+          <template #default="{ row }">
+            <span>{{ formatDate(row.outQueueTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="beginTime" label="开始通话时间" show-overflow-tooltip width="170">
+          <template #default="{ row }">
+            <span>{{ formatDate(row.beginTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+          </template></el-table-column>
+        <el-table-column prop="answeredTime" label="应答时间" show-overflow-tooltip width="170">
+          <template #default="{ row }">
+            <span>{{ formatDate(row.answeredTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="byeTime" label="结束通话时间" show-overflow-tooltip width="170">
+          <template #default="{ row }">
+            <span>{{ formatDate(row.byeTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+          </template>
+        </el-table-column>
 				<el-table-column label="操作" width="160" fixed="right" align="center">
 					<template #default="{ row }">
-						<el-button type="primary" @click="onPlaySoundRecording(row)" title="播放录音" link v-if="row.RecordUrl">播放录音</el-button>
-						<el-button link type="success" @click="onDownload(row)" title="下载录音" v-if="row.RecordUrl"> 下载录音 </el-button>
+						<el-button type="primary" @click="onPlaySoundRecording(row)" title="播放录音" link v-if="row.recordUrl">播放录音</el-button>
+						<el-button link type="success" @click="onDownload(row)" title="下载录音" v-if="row.recordUrl"> 下载录音 </el-button>
 					</template>
 				</el-table-column>
 				<template #empty>
@@ -112,7 +130,8 @@ import { ElButton, ElMessage, ElMessageBox } from 'element-plus';
 import { auth } from '/@/utils/authFunction';
 import { throttle } from '/@/utils/tools';
 import { shortcuts } from '/@/utils/constants';
-import { callLogPaged } from '/@/api/public/wex';
+import {callBaseData,callLogPaged} from '/@/api/tels/callLog'
+import {formatDate} from "/@/utils/formatTime";
 
 // 引入组件
 const PlayRecord = defineAsyncComponent(() => import('/@/views/tels/callLog/component/Play-record.vue'));  // 播放录音
@@ -122,60 +141,15 @@ const state = reactive(<any>{
 	queryParams: {
 		pageIndex: 1, // 当前页
 		pageSize: 10, // 每页条数
-		sortFiled: '', // 排序字段
-		asAsc: false, // 是否升序
-		CallID: '', // 呼叫ID
-		GongHao: '', // 分机号
-		Telphone: '', // 电话号码
-		CallType: '', // 呼叫类型
-		Result: '', // 呼叫结果
-		QueryStartTime: '', // 查询开始时间
-		QueryEndTime: '', // 查询结束时间
-		crTime: [], // 通话时间
+		StaffNo: '', // 分机号
+    CPN: '', // 中继号码
+    CDPN: '', // 分机号
+    Direction: '', // 呼叫类型
+    OnState: '', // 结果
 	},
 	tableList: [], // 列表数据
 	loading: false, // 加载
 	total: 0, // 总条数
-	CallTypeOptions: [  // 呼叫类型
-		{
-			value: '外呼',
-			label: '外呼',
-		},
-		{
-			value: '来电',
-			label: '来电',
-		},
-		{
-			value: '自动外呼',
-			label: '自动外呼',
-		},
-		{
-			value: '会议',
-			label: '会议',
-		},
-		{
-			value: '留言',
-			label: '留言',
-		},
-	], // 呼叫类型
-	resultOptions: [  // 呼叫结果
-		{
-			value: '未接',
-			label: '未接',
-		},
-		{
-			value: '接听',
-			label: '接听',
-		},
-		{
-			value: '成功',
-			label: '成功',
-		},
-		{
-			value: '失败',
-			label: '失败',
-		},
-	], // 呼叫结果
 });
 const ruleFormRef = ref<FormInstance>();  // 表单ref
 const searchCol = ref(true);  // 展开/收起
@@ -183,43 +157,15 @@ const searchCol = ref(true);  // 展开/收起
 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, 'QueryStartTime', 'QueryEndTime');
-};
 /** 通话记录列表 */
 const queryList = throttle(async () => {
 	if (!auth('tels:callLog:query')) ElMessage.error('抱歉,您没有权限查询通话记录!');
 	else {
 		state.loading = true;
-		const request = {
-			pageIndex: state.queryParams.pageIndex, // 当前页
-			pageSize: state.queryParams.pageSize, // 每页条数
-			sortFiled: state.queryParams.sortFiled, // 排序字段
-			asAsc: state.queryParams.asAsc, // 是否升序
-			input: {
-				CallID: state.queryParams.CallID, // 呼叫ID
-				GongHao: state.queryParams.GongHao, // 工号
-				Telphone: state.queryParams.Telphone, // 电话号码
-				CallType: state.queryParams.CallType, // 呼叫类型
-				Result: state.queryParams.Result, // 呼叫结果
-				QueryStartTime: state.queryParams.QueryStartTime, // 查询开始时间
-				QueryEndTime: state.queryParams.QueryEndTime, // 查询结束时间
-			},
-		};
 		try {
-			const response = await callLogPaged(request);
-			state.tableList = response.data ?? [];
-			state.total = response.count ?? 0;
+			const response = await callLogPaged(state.queryParams);
+			state.tableList = response.result?.items ?? [];
+			state.total = response.result?.total ?? 0;
 			state.loading = false;
 		} catch (e) {
 			state.loading = false;
@@ -231,8 +177,6 @@ const queryList = throttle(async () => {
 const resetQuery = throttle((formEl: FormInstance | undefined) => {
 	if (!formEl) return;
 	formEl.resetFields();
-	state.queryParams.QueryStartTime = '';
-	state.queryParams.QueryEndTime = '';
 	queryList();
 }, 500);
 // 播放录音
@@ -251,23 +195,18 @@ const onDownload = (row: any) => {
 		autofocus: false,
 	})
 		.then(() => {
-			window.open(row.RecordUrl);
+			window.open(row.recordUrl);
 		})
 		.catch(() => {});
 };
-// 排序
-const sortChange = (column: any) => {
-	if (column.order === null) {
-		state.queryParams.sortFiled = '';
-		state.queryParams.asAsc = false;
-		queryList();
-		return;
-	}
-	state.queryParams.sortFiled = column.prop;
-	state.queryParams.asAsc = column.order === 'ascending';
-	queryList();
-};
+// 基础信息
+const getBaseData = async ()=>{
+  const response = await callBaseData();
+  state.callDirectionOption = response.result.callDirectionOption;
+  state.onStateOption = response.result.onStateOption;
+}
 onMounted(() => {
+  getBaseData();
 	queryList();
 });
 </script>

+ 18 - 7
src/views/tels/restApply/index.vue

@@ -86,7 +86,7 @@
 						<el-button
 							link
 							type="primary"
-							@click="onSubmit(row, '提交', 'next')"
+							@click="onSubmit(row)"
 							v-auth="'system:workflow:handle'"
 							title="审批"
 							v-if="[0].includes(row.applyStatus)"
@@ -108,8 +108,9 @@
 			/>
 		</el-card>
 
-		<!-- 处理流程 -->
-		<process ref="processRef" @orderProcessSuccess="orderProcessSuccess" @orderProcessFailed="handleQuery" />
+		<!-- 流程 -->
+		<process-approval ref="processApprovalRef" @orderProcessSuccess="orderProcessSuccess" @orderProcessFailed="handleQuery" />
+
 		<!-- 流转记录 -->
 		<audit-record ref="AuditRecordRef" />
 	</div>
@@ -125,7 +126,7 @@ import { commonEnum, shortcuts } from '/@/utils/constants';
 import other from '/@/utils/other';
 // 引入组件
 const AuditRecord = defineAsyncComponent(() => import('/@/components/AuditRecord/index.vue'));  // 流转记录
-const Process = defineAsyncComponent(() => import('/@/views/business/order/components/Order-process.vue')); // 处理流程
+const ProcessApproval = defineAsyncComponent(() => import('/@/components/ProcessApproval/index.vue')); // 审批流程
 
 // 定义变量内容
 const state = reactive<any>({
@@ -179,9 +180,19 @@ const resetQuery = debounce((formEl: FormInstance | undefined) => {
 	handleQuery();
 }, 300);
 // 办理 下一步
-const processRef = ref<RefType>();
-const onSubmit = debounce((row: any, title: string, type?: string) => {
-	processRef.value.openDialog({ id: row.workflowId, title, processType: type, commonEnum: commonEnum.OrderCirculation });
+const processApprovalRef = ref<RefType>();
+const onSubmit = debounce((row: any) => {
+  const params = {
+    id: row.workflowId,
+    commonEnum: commonEnum.OrderCirculation,
+    processType: '小休办理',
+    extra: {
+      dialogTitle: '小休办理',
+      inputPlaceholder: '办理意见',
+      annexName: '办理附件',
+    },
+  }
+  processApprovalRef.value.openDialog(params);
 }, 1000);
 // 审核记录
 const AuditRecordRef = ref<RefType>();