Quellcode durchsuchen

reactor:自贡呼叫中心逻辑调整;自贡通话记录调整

zhangchong vor 8 Monaten
Ursprung
Commit
0a34dcbccd

+ 65 - 0
src/api/auxiliary/smartCallOut.ts

@@ -144,4 +144,69 @@ export const smartCallOutTaskPause = (data: object) => {
     method: 'post',
     data
   });
+};
+/**
+ * @description 短信任务列表基础数据
+ * @param {object} params
+ */
+export const smartCallOutSmsBaseData = (params?: object) => {
+  return request({
+    url: '/api/v1/PushMessage/batchsmstask-basedata',
+    method: 'get',
+    params
+  });
+};
+/**
+ * @description 短信任务列表查询
+ * @param {object} params
+ */
+export const smartCallOutSmsList = (params: object) => {
+  return request({
+    url: '/api/v1/PushMessage/batchsmstask-query',
+    method: 'get',
+    params
+  });
+}
+/**
+ * @description 新增批量短信任务
+ * @param {object} data
+ */
+export const smartCallOutSmsAdd = (data: object) => {
+  return request({
+    url: '/api/v1/PushMessage/add-batchsmstask',
+    method: 'post',
+    data
+  });
+};
+/**
+ * @description 终止任务
+ * @param {string} id
+ */
+export const smartCallOutSmsStop = (id: string) => {
+  return request({
+    url: `/api/v1/PushMessage/stop-batchsmstask?id=${id}`,
+    method: 'delete',
+  });
+};
+/**
+ * @description 获取批量短信任务详情
+ * @param {object} params
+ */
+export const smartCallOutSmsDetail = (params: object) => {
+  return request({
+    url: '/api/v1/PushMessage/batchsmstask-detail',
+    method: 'get',
+    params
+  });
+};
+/**
+ * @description 获取批量短信任务详情(查询人)
+ * @param {object} params
+ */
+export const smartCallOutSmsDetailQuery = (params: object) => {
+  return request({
+    url: '/api/v1/PushMessage/batchsmsmtaskdetail-query',
+    method: 'get',
+    params
+  });
 };

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

@@ -291,7 +291,7 @@ const onSubmit = throttle(async (formEl: FormInstance | undefined) => {
 		smartCallOutTaskAdd(request)
 			.then(() => {
 				ElMessage({
-					message: '操作成功',
+					message: '智能外呼任务创建成功',
 					type: 'success',
 				});
 				emit('updateList');

+ 0 - 1
src/views/auxiliary/smartCallOut/components/Task-detail.vue

@@ -88,7 +88,6 @@ const queryList = () => {
       })
       .finally(() => {
         state.loading = false;
-        state.tableData = [];
       });
 };
 // 重置表单

+ 14 - 14
src/views/auxiliary/smsTask/components/Create-task.vue

@@ -3,14 +3,14 @@
 		<el-form :model="state.ruleForm" label-width="120px" ref="ruleFormRef">
 			<el-row :gutter="10">
 				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-					<el-form-item label="任务名称" prop="tag" :rules="[{ required: true, message: '请填写任务名称', trigger: 'blur' }]">
-						<el-input v-model="state.ruleForm.tag" placeholder="请填写任务名称" clearable></el-input>
+					<el-form-item label="任务名称" prop="taskName" :rules="[{ required: true, message: '请填写任务名称', trigger: 'blur' }]">
+						<el-input v-model="state.ruleForm.taskName" placeholder="请填写任务名称" clearable></el-input>
 					</el-form-item>
 				</el-col>
 				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-					<el-form-item label="计划发送时间" prop="time" :rules="[{ required: true, message: '请选择计划发送时间', trigger: 'change' }]">
+					<el-form-item label="计划发送时间" prop="planSendTime" :rules="[{ required: true, message: '请选择计划发送时间', trigger: 'change' }]">
 						<el-date-picker
-							v-model="state.ruleForm.time"
+							v-model="state.ruleForm.planSendTime"
 							type="datetime"
 							placeholder="请选择计划发送时间"
 							class="w100"
@@ -20,8 +20,8 @@
 					</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-input v-model="state.ruleForm.remark" placeholder="请填写短信内容" type="textarea" :autosize="{ minRows: 4, maxRows: 8 }"></el-input>
+					<el-form-item label="短信内容" prop="content" :rules="[{ required: true, message: '请填写短信内容', trigger: 'blur' }]">
+						<el-input v-model="state.ruleForm.content" placeholder="请填写短信内容" type="textarea" :autosize="{ minRows: 4, maxRows: 8 }"></el-input>
 					</el-form-item>
 				</el-col>
 			</el-row>
@@ -79,6 +79,7 @@ import { orderLexiconAdd } from '@/api/auxiliary/orderLexicon';
 import { removeDuplicate } from '@/utils/arrayOperation';
 import { formatDate } from "@/utils/formatTime";
 import { externalCitizenImport, externalCitizenTemplate } from "@/api/auxiliary/externalCitizen";
+import { smartCallOutSmsAdd } from '@/api/auxiliary/smartCallOut';
 
 const CitizenAdd = defineAsyncComponent(() => import('@/views/auxiliary/smsTask/components/Add-citizen.vue')); // 创建任务
 
@@ -88,11 +89,10 @@ const emit = defineEmits(['updateList']);
 const state = reactive<any>({
 	dialogVisible: false,
 	ruleForm: {
-		tag: '', // 工单关键词
-		classifyArray: [], // 标签分类
-		isEnable: 1, // 是否启用
-		synonym: '', // 违禁同义词
-		remark: '', // 备注说明
+		taskName:null,
+		planSendTime:null,
+		content:null,
+		batchSmsTaskDetail:[]
 	},
 	tableData: [], // 表格内容
 });
@@ -245,12 +245,12 @@ const onSubmit = throttle(async (formEl: FormInstance | undefined) => {
 		loading.value = true;
 		const request = {
 			...state.ruleForm,
-			classify: state.ruleForm.classifyArray.join(','),
+			batchSmsTaskDetail:state.tableData
 		};
-		orderLexiconAdd(request)
+		smartCallOutSmsAdd(request)
 			.then(() => {
 				ElMessage({
-					message: '操作成功',
+					message: '短信任务创建成功',
 					type: 'success',
 				});
 				emit('updateList');

+ 67 - 69
src/views/auxiliary/smsTask/components/Task-detail.vue

@@ -1,103 +1,101 @@
 <template>
-  <el-dialog v-model="state.dialogVisible" draggable title="短信明细" @close="close" destroy-on-close append-to-body>
-    <el-form :model="state.queryParams" ref="ruleFormRef" inline @submit.native.prevent>
-      <el-form-item label="市民姓名" prop="PhoneNumber">
-        <el-input v-model="state.queryParams.PhoneNumber" placeholder="请填写市民姓名" clearable @keyup.enter="handleQuery" />
-      </el-form-item>
-      <el-form-item label="联系电话" prop="Label">
-        <el-input v-model="state.queryParams.Label" 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>
-    <ProTable
-      ref="proTableRef"
-      :columns="columns"
-      :data="state.tableData"
-      :loading="state.loading"
-      :total="state.total"
-      v-model:page-index="state.queryParams.PageIndex"
-      v-model:page-size="state.queryParams.PageSize"
-      :tool-button="false"
-    >
-    </ProTable>
-  </el-dialog>
+	<el-dialog v-model="state.dialogVisible" draggable title="短信明细" @close="close" destroy-on-close append-to-body>
+		<el-form :model="state.queryParams" ref="ruleFormRef" inline @submit.native.prevent>
+			<el-form-item label="市民姓名" prop="PhoneNumber">
+				<el-input v-model="state.queryParams.PhoneNumber" placeholder="请填写市民姓名" clearable @keyup.enter="handleQuery" />
+			</el-form-item>
+			<el-form-item label="联系电话" prop="Name">
+				<el-input v-model="state.queryParams.Name" 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>
+		<ProTable
+			ref="proTableRef"
+			:columns="columns"
+			:data="state.tableData"
+			:loading="state.loading"
+			:total="state.total"
+			v-model:page-index="state.queryParams.PageIndex"
+			v-model:page-size="state.queryParams.PageSize"
+			:tool-button="false"
+		>
+		</ProTable>
+	</el-dialog>
 </template>
 
 <script setup lang="tsx">
-import { computed, nextTick, reactive, ref } from 'vue';
-import { ElMessage, FormInstance } from 'element-plus';
+import { computed, reactive, ref } from 'vue';
+import { FormInstance } from 'element-plus';
+import { smartCallOutSmsDetailQuery } from '@/api/auxiliary/smartCallOut';
 
 // 定义变量内容
 const state = reactive<any>({
-  dialogVisible: false,
-  queryParams: {
-    // 查询参数
-    PageIndex: 1,
-    PageSize: 10,
-    PhoneNumber: null,
-    Label: null,
-  },
-  tableData: [],
+	dialogVisible: false,
+	queryParams: {
+		// 查询参数
+		PageIndex: 1,
+		PageSize: 10,
+		PhoneNumber: null,
+		Name: null,
+	},
+	tableData: [],
 });
 
 const ruleFormRef = ref<RefType>(null); // 表单ref
 /** 搜索按钮操作 */
 const handleQuery = () => {
-  state.queryParams.PageIndex = 1;
-  queryList();
+	state.queryParams.PageIndex = 1;
+	queryList();
 };
 // 获取列表
 const queryList = () => {
-  /*state.loading = true;
-  citizenList(state.queryParams)
-    .then((res) => {
-      state.loading = false;
-      state.tableData = res.result.items ?? [];
-      state.total = res.result.total ?? 0;
-    })
-    .finally(() => {
-      state.loading = false;
-    });*/
+	state.loading = true;
+	smartCallOutSmsDetailQuery(state.queryParams)
+		.then((res) => {
+			state.loading = false;
+			state.tableData = res.result.items ?? [];
+			state.total = res.result.total ?? 0;
+		})
+		.finally(() => {
+			state.loading = false;
+		});
 };
 // 重置表单
 const resetQuery = (formEl: FormInstance | undefined) => {
-  if (!formEl) return;
-  formEl.resetFields();
-  queryList();
+	if (!formEl) return;
+	formEl.resetFields();
+	queryList();
 };
 const proTableRef = ref<RefType>(); // 表格ref
-const canChoose = computed(() => {
-  return proTableRef.value?.selectedList.length;
-});
 // 表格配置项
 const columns = ref<any[]>([
-  { prop: 'phoneNumber', label: '市民姓名' },
-  { prop: 'label', label: '联系电话' },
+	{ prop: 'phoneNumber', label: '市民姓名' },
+	{ prop: 'label', label: '联系电话' },
 ]);
-
-let loading = ref<boolean>(false); // 加载状态
 // 打开弹窗
-const openDialog = async () => {
-  try {
-    state.dialogVisible = true;
-  } catch (error) {
-    console.log(error);
-  }
+const openDialog = async (row:any) => {
+	try {
+		state.dialogVisible = true;
+		state.queryParams.id = row.id;
+		queryList();
+	} catch (error) {
+		console.log(error);
+	}
 };
 // 关闭弹窗
 const closeDialog = () => {
-  state.dialogVisible = false;
+	state.dialogVisible = false;
 };
 const close = () => {
-  ruleFormRef.value?.resetFields();
-  ruleFormRef.value?.resetFields();
+	ruleFormRef.value?.resetFields();
+	ruleFormRef.value?.resetFields();
 };
 // 暴露变量
 defineExpose({
-  openDialog,
-  closeDialog,
+	openDialog,
+	closeDialog,
 });
 </script>

+ 32 - 17
src/views/auxiliary/smsTask/index.vue

@@ -13,12 +13,12 @@
 			>
         <template #table-search>
           <el-form :model="state.queryParams" ref="ruleFormRef" inline @submit.native.prevent>
-            <el-form-item label="任务名称" prop="PhoneNumber">
-              <el-input v-model="state.queryParams.PhoneNumber" placeholder="请填写任务名称" clearable @keyup.enter="handleQuery" class="keyword-input" />
+            <el-form-item label="任务名称" prop="TaskName">
+              <el-input v-model="state.queryParams.TaskName" placeholder="请填写任务名称" clearable @keyup.enter="handleQuery" class="keyword-input" />
             </el-form-item>
-            <el-form-item label="任务状态" prop="PushBusiness">
-              <el-select v-model="state.queryParams.PushBusiness" placeholder="请选择任务状态" @change="handleQuery">
-                <el-option v-for="item in ePushBusinessData" :value="item.key" :key="item.key" :label="item.value" />
+            <el-form-item label="任务状态" prop="State">
+              <el-select v-model="state.queryParams.State" placeholder="请选择任务状态" @change="handleQuery">
+                <el-option v-for="item in smsTaskState" :value="item.key" :key="item.key" :label="item.value" />
               </el-select>
             </el-form-item>
             <el-form-item label="创建时间" prop="crTime">
@@ -60,8 +60,8 @@
 import { defineAsyncComponent, onMounted, reactive, ref } from 'vue';
 import { ElMessage, ElMessageBox, FormInstance } from 'element-plus';
 import { formatDate } from '@/utils/formatTime';
-import { citizenDelete, citizenList } from '@/api/auxiliary/citizen';
 import { defaultTimeStartEnd, shortcuts } from "@/utils/constants";
+import { smartCallOutSmsBaseData, smartCallOutSmsList, smartCallOutSmsStop, smartCallOutTaskStop } from '@/api/auxiliary/smartCallOut';
 
 // 引入组件
 const CreateTask = defineAsyncComponent(() => import('@/views/auxiliary/smsTask/components/Create-task.vue')); // 创建任务
@@ -100,8 +100,8 @@ const state = reactive({
 		// 查询参数
 		PageIndex: 1,
 		PageSize: 20,
-		PhoneNumber: null,
-		Label: null,
+		State: null,
+		TaskName: null,
 		crTime: [],
 	},
 	total: 0, // 总条数
@@ -130,8 +130,8 @@ const handleQuery = () => {
 };
 // 获取列表
 const queryList = () => {
-	/*state.loading = true;
-	citizenList(state.queryParams)
+	state.loading = true;
+	smartCallOutSmsList(state.queryParams)
 		.then((res) => {
 			state.loading = false;
 			state.tableData = res.result.items ?? [];
@@ -139,7 +139,7 @@ const queryList = () => {
 		})
 		.finally(() => {
 			state.loading = false;
-		});*/
+		});
 };
 // 重置表单
 const resetQuery = (formEl: FormInstance | undefined) => {
@@ -159,7 +159,7 @@ const onDetail = (row: any) => {
 };
 // 终止任务
 const onEnd = (row: any) => {
-	ElMessageBox.confirm('确定终止任务?', '提示', {
+	ElMessageBox.confirm(`您确定要终止短信任务【${row.taskName}】吗?`, '提示', {
 		confirmButtonText: '确定',
 		cancelButtonText: '取消',
 		type: 'warning',
@@ -167,16 +167,31 @@ const onEnd = (row: any) => {
 		autofocus: false,
 	})
 		.then(() => {
-			ElMessage({
-				type: 'success',
-				message: '终止任务成功',
-			});
+			smartCallOutSmsStop(row.id )
+				.then(() => {
+					ElMessage({
+						type: 'success',
+						message: '终止任务成功',
+					});
+					queryList();
+					state.loading = false;
+				})
+				.catch(() => {
+					state.loading = false;
+				});
 		})
 		.catch(() => {});
 };
-const ePushBusinessData = ref([]);
+const smsTaskState = ref([]);
+// 获取基础数据
+const getBaseData  = () => {
+	smartCallOutSmsBaseData().then((res) => {
+		smsTaskState.value = res.result?.smsTaskState ?? [];
+	});
+};
 // 页面加载时
 onMounted(() => {
+	getBaseData();
 	queryList();
 });
 </script>

+ 3 - 25
src/views/tels/callLog/zgCallLog.vue

@@ -369,7 +369,8 @@ const noColumns = ref<any[]>([
 	{ prop: 'operation', label: '操作', fixed: 'right', minWidth: 160, align: 'center' },
 ]);
 const changeTba = () => {
-	ruleFormRef.value.resetFields();
+	ruleFormRef.value?.resetFields();
+	drawerRuleFormRef.value?.resetFields();
 	handleQuery();
 };
 // 手动查询,将页码设置为1
@@ -401,29 +402,6 @@ const queryList = async (isQuery: boolean = false) => {
 	requestParams.value.CallStartTimeStart = state.queryParams.crTime === null ? null : state.queryParams.crTime[0];
 	requestParams.value.CallStartTimeEnd = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
 	Reflect.deleteProperty(requestParams.value, 'crTime'); // 通话开始和结束时间段
-
-	switch (state.queryParams.type) {
-		case '0': // 全部
-			columns.value = allColumns;
-			break;
-		case '1': // 呼入列表(已接通)
-			columns.value = inColumns;
-			requestParams.value.IsConnected = true; // 是否接通
-			requestParams.value.Direction = 0; // 来电
-			break;
-		case '2': // 呼出列表(已接通)
-			columns.value = outColumns;
-			requestParams.value.IsConnected = true; // 是否接通
-			requestParams.value.Direction = 1; // 呼出
-			break;
-		case '3': // 未接列表
-			columns.value = noColumns;
-			requestParams.value.IsConnected = false; // 是否接通
-			break;
-		default:
-			columns.value = allColumns;
-			break;
-	}
 	requestParams.value.QueryIndex = queryIndex.value; // 数据批次
 	state.loading = true;
 	getCallCenterCallRecord(requestParams.value)
@@ -453,7 +431,7 @@ const resetQuery = (formEl: FormInstance | undefined) => {
 	if (!formEl) return;
 	formEl.resetFields();
 	queryIndex.value = 0;
-	queryList();
+	queryList(true);
 };
 // 播放录音
 const playRecordRef = ref<RefType>();

+ 1 - 1
src/views/tels/phoneAction.vue

@@ -174,7 +174,7 @@ const resetQuery = (formEl: FormInstance | undefined) => {
 	if (!formEl) return;
 	formEl.resetFields();
 	queryIndex.value = 0;
-	queryList();
+	queryList(true);
 };
 // 基础信息
 const getBaseData = async () => {