Prechádzať zdrojové kódy

reactor:首页登录;

zhangchong 6 mesiacov pred
rodič
commit
ed9090db06

+ 22 - 0
src/api/auxiliary/message.ts

@@ -22,4 +22,26 @@ export const messageList = (params: object) => {
         method: 'get',
         params,
     });
+};
+/**
+ * @description 新增短信基础数据
+ * @param {object} params
+ */
+export const messageAddBase = (params?: object) => {
+    return request({
+        url: `/api/v1/PushMessage/send/basedata`,
+        method: 'get',
+        params,
+    });
+};
+/**
+ * @description 新增短信
+ * @param {object} data
+ */
+export const messageAdd = (data: object) => {
+    return request({
+        url: `/api/v1/PushMessage/send`,
+        method: 'post',
+        data,
+    });
 };

+ 15 - 0
src/api/business/discern.ts

@@ -25,6 +25,21 @@ export const screenList = (params: object) => {
 		params,
 	});
 };
+/**
+ * @description 工单甄别列表导出
+ * @param {object} data
+ */
+export const screenListExport = (data: object) => {
+	return request({
+		url: `/api/v1/Order/screen_list/_export`,
+		method: 'post',
+			responseType: 'blob',
+			data,
+		},
+		{
+			reduce_data_format: false,
+		});
+};
 /**
  * @description 甄别列表页基础数据
  */

+ 52 - 36
src/api/business/order.ts

@@ -182,7 +182,7 @@ export const hotSpotSearch = (params: string) => {
 export const duplicateOrder = (params?: object) => {
 	return request({
 		url: `/api/v1/Order/duplicate?${qs.stringify(params)}`,
-		method: 'get'
+		method: 'get',
 	});
 };
 /**
@@ -193,7 +193,7 @@ export const orderTimeConfig = (params?: object) => {
 	return request({
 		url: `/api/v1/Order/time-config`,
 		method: 'get',
-		params
+		params,
 	});
 };
 /**
@@ -204,9 +204,9 @@ export const companyInfo = (params?: object) => {
 	return request({
 		url: `/api/v1/Enterprises/enterprise/list`,
 		method: 'get',
-		params
+		params,
 	});
-}
+};
 /**
  * @description 结束会签
  * @param {object} data
@@ -215,9 +215,9 @@ export const endCounterSign = (data: object) => {
 	return request({
 		url: `/api/v1/Order/endcs`,
 		method: 'post',
-		data
+		data,
 	});
-}
+};
 /**
  * @description 取消延期
  * @param {object} data
@@ -226,9 +226,9 @@ export const cancelDelay = (data: object) => {
 	return request({
 		url: `/api/v1/Order/delay/cancel`,
 		method: 'post',
-		data
+		data,
 	});
-}
+};
 /**
  * @description 工单办理
  * @param {object} data
@@ -237,9 +237,9 @@ export const orderHandle = (data: object) => {
 	return request({
 		url: `/api/v1/Order/handle`,
 		method: 'post',
-		data
+		data,
 	});
-}
+};
 /**
  * @description 省退回批量申请
  * @param {object} data
@@ -248,37 +248,43 @@ export const provinceReturn = (data: object) => {
 	return request({
 		url: `/api/v1/Order/send_back/batch`,
 		method: 'post',
-		data
+		data,
 	});
-}
+};
 /**
  * @description 导出交办单
  * @param {object} data
  */
 export const exportJbOrder = (data: object) => {
-	return request({
-		url: `/api/v1/ExportWord/order_submission_form`,
-		method: 'post',
-		responseType: 'blob',
-		data,
-	},{
-		reduce_data_format:false
-	});
-}
+	return request(
+		{
+			url: `/api/v1/ExportWord/order_submission_form`,
+			method: 'post',
+			responseType: 'blob',
+			data,
+		},
+		{
+			reduce_data_format: false,
+		}
+	);
+};
 /**
  * @description 工单导出 综合查询
  * @param {object} data
  */
 export const exportOrder = (data: object) => {
-	return request({
-		url: `/api/v1/Order/order/export`,
-		method: 'post',
-		responseType: 'blob',
-		data,
-	},{
-		reduce_data_format:false
-	})
-}
+	return request(
+		{
+			url: `/api/v1/Order/order/export`,
+			method: 'post',
+			responseType: 'blob',
+			data,
+		},
+		{
+			reduce_data_format: false,
+		}
+	);
+};
 /**
  * @description 副本工单列表
  * @param {object} params
@@ -287,9 +293,9 @@ export const copyOrderList = (params: object) => {
 	return request({
 		url: `/api/v1/Order/order_copy/list`,
 		method: 'get',
-		params
+		params,
 	});
-}
+};
 /**
  * @description 工单撤销
  * @param {object} data
@@ -298,9 +304,9 @@ export const orderRevoke = (data: object) => {
 	return request({
 		url: `/api/v1/OrderRevocation/add_order_revocation`,
 		method: 'post',
-		data
+		data,
 	});
-}
+};
 /**
  * @description 工单流程临时保存
  * @param {object} data
@@ -309,6 +315,16 @@ export const orderProcessTempSave = (data: object) => {
 	return request({
 		url: `/api/v1/Order/steps/temp`,
 		method: 'post',
-		data
+		data,
 	});
-}
+};
+/**
+ * @description 查询一级部门的下级部门
+ * @param {string} id
+ */
+export const getDepartmentList = (id: string | any) => {
+	return request({
+		url: `/api/v1/Org/cascade?id=${id}`,
+		method: 'get',
+	});
+};

+ 75 - 24
src/components/ProcessAudit/ZGProcess.vue

@@ -120,12 +120,12 @@
 								<el-radio-group v-model="state.ruleForm.orderAssignMode" @change="selectDispatchType">
 									<el-radio :value="0">逐级派单</el-radio>
 									<el-radio :value="1">跨级派单</el-radio>
-									<el-radio :value="2">主协办</el-radio>
+<!--									<el-radio :value="2">主协办</el-radio>-->
 								</el-radio-group>
 							</el-form-item>
 						</el-col>
 						<el-col :span="24" v-if="state.ruleForm.orderAssignMode === 0">
-							<el-row class="w100"  :key="Math.random()">
+							<el-row class="w100">
 								<el-col :span="12">
 									<el-form-item label="接办部门" prop="nextHandlers" :rules="[{ required: true, message: '请选择接办部门', trigger: 'change' }]">
 										<!--										<el-select v-model="state.ruleForm.paidanObj" placeholder="请选择接办部门" class="w100" filterable multiple>
@@ -166,31 +166,45 @@
 							</el-row>
 						</el-col>
 						<el-col :span="24" v-if="state.ruleForm.orderAssignMode === 1">
-							<el-form-item label="接办部门" prop="nextHandlers" :rules="[{ required: true, message: '请选择接办部门', trigger: 'change' }]"  :key="Math.random()">
-								<el-row class="w100" :gutter="10">
-									<el-col :span="12">
+							<el-row class="w100" :gutter="10">
+								<el-col :span="12">
+									<el-form-item label="接办部门" prop="nextHandler" :rules="[{ required: true, message: '请选择接办部门', trigger: 'change' }]">
 										<el-select-v2
-											v-model="state.ruleForm.nextHandlers"
+											v-model="state.ruleForm.nextHandler"
 											:options="state.handlerOptions"
 											placeholder="请选择接办部门"
 											class="w100"
-											multiple
 											clearable
-											collapse-tags
-											collapse-tags-tooltip
 											filterable
 											value-key="key"
 											@change="selectHandlers"
-											:multiple-limit="1"
 										/>
-									</el-col>
-									<el-col :span="12">
-										<el-select v-model="state.ruleForm.paidanObj" placeholder="下级部门" class="w100" filterable multiple>
-											<el-option v-for="item in state.paidanObjOptions" :key="item.key" :label="item.value" :value="item.key" />
-										</el-select>
-									</el-col>
-								</el-row>
-							</el-form-item>
+									</el-form-item>
+								</el-col>
+								<el-col :span="12">
+									<el-form-item label-width="0" prop="secondaryHandlers" :rules="[{ required: true, message: '请选择下级部门', trigger: 'change' }]">
+										<el-cascader
+											:options="secondaryHandlers"
+											:props="{
+												multiple: true,
+												label: 'name',
+												value: 'id',
+												children: 'children',
+												checkStrictly: true,
+											}"
+											collapse-tags
+											collapse-tags-tooltip
+											:max-collapse-tags="1"
+											clearable
+											placeholder="请选择下级部门"
+											v-model="state.ruleForm.secondaryHandlers"
+											class="w100"
+											@change="secondaryHandlersChange"
+											ref="cascaderRef"
+										/>
+									</el-form-item>
+								</el-col>
+							</el-row>
 						</el-col>
 						<el-col :span="24" v-if="state.ruleForm.orderAssignMode === 2">
 							<el-form-item label="主办部门" prop="paidanObj" :rules="[{ required: true, message: '请选择主办部门', trigger: 'change' }]">
@@ -428,7 +442,7 @@ import { ElMessage, FormInstance } from 'element-plus';
 import other from '@/utils/other';
 import { storeToRefs } from 'pinia';
 import { commonEnum } from '@/utils/constants';
-import { orderFlowParams, orderHandle, orderProcessTempSave, orderStartFlow, orderTimeConfig } from '@/api/business/order';
+import { getDepartmentList, orderFlowParams, orderHandle, orderProcessTempSave, orderStartFlow, orderTimeConfig } from '@/api/business/order';
 import { orderPrevious, workflowNextSteps, workflowNextStepsByOrder, workflowNextStepsByOrderInstead } from '@/api/system/workflow';
 import { useAppConfig } from '@/stores/appConfig';
 
@@ -448,6 +462,7 @@ const state = reactive<any>({
 		nextStepName: '', // 下一节点名称
 		backToCountersignEnd: false, // 是否回到会签结束节点
 		nextHandlers: [], // 下一节点办理对象
+		nextHandler: null, // 单选对象
 		isSms: false, // 是否短信通知
 		isStartCountersign: false, // 是否发起会签
 		stepId: null, // 步骤id
@@ -469,8 +484,8 @@ const state = reactive<any>({
 		transpondCityId: null, // 市州转办信息id
 		transpondCityValue: null, // 市州转办信息
 		orderAssignMode: 0, // 派单类型默认逐级派单
-		secondaryHandlers:[], // 跨级转派得下级办理对象/主协办得协办对象
-		copyToHandlers:[], // 抄送对象
+		secondaryHandlers: [], // 跨级转派得下级办理对象/主协办得协办对象
+		copyToHandlers: [], // 抄送对象
 	},
 	nextStepOptions: [], // 下一节点
 	handlerOptions: [], // 办理对象
@@ -648,6 +663,7 @@ const isNotShowNextHandlers = ref(false);
 const selectNext = ref<EmptyObjectType>({}); // 选择的下一个节点
 const selectNextStep = (val: any) => {
 	ruleFormRef.value?.resetFields('nextHandlers');
+	ruleFormRef.value?.resetFields('nextHandler');
 	const next = state.nextStepOptions.find((item: any) => item.key === val);
 	selectNext.value = next;
 	const items = next.items; //获取下一节点
@@ -692,7 +708,7 @@ const multipleLimit = computed(() => {
 watch(
 	() => state.ruleForm.nextHandlers, // 监听办理对象 多个办理对象自动发起会签
 	(val) => {
-		if(val){
+		if (val) {
 			state.ruleForm.isStartCountersign = val.length > 1;
 		}
 	}
@@ -712,8 +728,11 @@ const changeStartCountersign = (val: boolean) => {
 // 选择派单类型 需要清空选择的内容
 const selectDispatchType = (val: any) => {
 	ruleFormRef.value.resetFields('nextHandlers');
+	ruleFormRef.value.resetFields('nextHandler');
 	state.ruleForm.nextHandlers = [];
+	state.ruleForm.nextHandler = null;
 	state.ruleForm.isStartCountersign = false;
+	state.ruleForm.secondaryHandlers = [];
 };
 
 // 是否展示办理对象 (办理对象下拉框隐藏:AppConfigInfo.value.isAverageSendOrder= true 表示开启了平均派单 )
@@ -755,7 +774,29 @@ watch(
 		}
 	}
 );
+// 查询一级部门的下级部门 不传默认查所有
+const secondaryHandlers = ref<EmptyArrayType>([]);
+const getNextOrgList = async (orgCode?: string | any) => {
+	try {
+		const { result } = await getDepartmentList(orgCode);
+		secondaryHandlers.value = result;
+	} catch (e) {
+		console.log(e);
+	}
+};
+// 选择下级部门
+const cascaderRef = ref<RefType>(null);
+const secondaryHandlersChange = (val: any) => {
+	const arr = cascaderRef.value.getCheckedNodes();
 
+	console.log(val, state.ruleForm.secondaryHandlers,arr);
+/*	state.ruleForm.secondaryHandlers = arr.map((item:any)=>{
+		return {
+			orgId:item.value,
+			orgName:item.label
+		}
+	})*/
+};
 // 选择办理对象
 const selectHandlers = () => {
 	if (state.ruleForm.nextHandlers.length > 1) {
@@ -774,8 +815,18 @@ const selectHandlers = () => {
 		// 如果只有一个办理对象就不需要发起会签
 		state.ruleForm.isStartCountersign = false;
 	}
-	if((seatToOrgOne.value || paidanToOrgOne.value) && state.ruleForm.orderAssignMode === 1){ // 话务部到一级部门 派单组到一级部门 并且是跨级派单 需要查询下一级部门
-			console.log('11212',state.ruleForm.nextHandlers)
+	if ((seatToOrgOne.value || paidanToOrgOne.value) && state.ruleForm.orderAssignMode === 1) {
+		// 话务部到一级部门 派单组到一级部门 并且是跨级派单 需要查询下一级部门
+		console.log(state.ruleForm.nextHandler, '1111');
+		if (state.ruleForm.nextHandlers) state.ruleForm.nextHandlers = [state.ruleForm.nextHandler]; // 因为传上去需要数组所以处理一次
+		else state.ruleForm.nextHandlers = [];
+		if (state.ruleForm.nextHandlers.length) {
+			getNextOrgList(state.ruleForm.nextHandler.key);
+			state.ruleForm.secondaryHandlers = [];
+		} else {
+			secondaryHandlers.value = [];
+			state.ruleForm.secondaryHandlers = [];
+		}
 	}
 };
 // 办理对象是否必填

+ 17 - 27
src/views/auxiliary/message/components/Message-add.vue

@@ -27,10 +27,10 @@
 							filterable
 							:filter-method="filterMethod"
 							filter-placeholder="姓名/手机号码"
-							:data="data"
+							:data="contacts"
 						>
 						<template #default="{ option }">
-							<span>{{ option.key }} - {{ option.label }}</span>
+							<span>{{ option.name }} - {{ option.phoneNo }}</span>
 						</template>
 							<template #left-footer>
 								<el-text type="danger">温馨提示:没有电话号码的不显示。</el-text>
@@ -55,6 +55,7 @@
 import { reactive, ref } from 'vue';
 import { ElMessage, FormInstance } from 'element-plus';
 import { addKnowledgeHotWords } from '@/api/knowledge/hotWords';
+import { messageAddBase } from '@/api/auxiliary/message';
 
 // 定义子组件向父组件传值/事件
 const emit = defineEmits(['updateList']);
@@ -69,9 +70,10 @@ const state = reactive<any>({
 	},
 	loading: false, // 确定按钮loading
 });
-const typeOptions = ref<EmptyArrayType>([]);
+
 // 打开弹窗
 const openDialog = async () => {
+	await getBaseData();
 	state.dialogVisible = true;
 };
 // 关闭弹窗
@@ -81,31 +83,10 @@ const closeDialog = () => {
 const close = () => {
 	ruleFormRef.value?.clearValidate();
 	ruleFormRef.value?.resetFields();
-};const generateData = () => {
-	const data: any[] = []
-	const states = [
-		'California',
-		'Illinois',
-		'Maryland',
-		'Texas',
-		'Florida',
-		'Colorado',
-		'Connecticut ',
-	]
-	const initials = ['CA', 'IL', 'MD', 'TX', 'FL', 'CO', 'CT']
-	states.forEach((city, index) => {
-		data.push({
-			label: city,
-			key: index,
-			initial: initials[index],
-		})
-	})
-	return data
-}
-
-const data = ref<any[]>(generateData())
+};
+const contacts = ref<EmptyArrayType>([]); // 用户列表
 const filterMethod = (query, item) => {
-	return item.initial.toLowerCase().includes(query.toLowerCase())
+	return item.phoneNo.toLowerCase().includes(query.toLowerCase()) || item.name.toLowerCase().includes(query.toLowerCase());
 }
 // 新增
 const onSubmit = (formEl: FormInstance | undefined) => {
@@ -126,6 +107,15 @@ const onSubmit = (formEl: FormInstance | undefined) => {
 			});
 	});
 };
+// 获取基础信息
+const getBaseData = async () => {
+		try {
+			const {result} = await messageAddBase();
+			contacts.value = result.contacts ?? [];
+		}catch (e){
+			console.log(e)
+		}
+}
 // 暴露变量
 defineExpose({
 	openDialog,

+ 2 - 3
src/views/business/discern/index.vue

@@ -12,7 +12,7 @@
 				v-model:page-size="state.queryParams.PageSize"
 				@sort-change="sortChange"
 				:toolButton="['refresh', 'setting', 'exportCurrent', 'exportAll']"
-				:exportMethod="orderSourceListDetailExport"
+				:exportMethod="screenListExport"
 				:exportParams="requestParams"
 			>
 				<template #table-search>
@@ -130,9 +130,8 @@ import { defineAsyncComponent, onMounted, reactive, ref } from 'vue';
 import { FormInstance } from 'element-plus';
 import { formatDate } from '@/utils/formatTime';
 import { defaultTimeStartEnd, shortcuts } from '@/utils/constants';
-import { screenBaseData, screenDetail, screenList } from '@/api/business/discern';
+import { screenBaseData, screenDetail, screenList,screenListExport } from '@/api/business/discern';
 import Other from '@/utils/other';
-import { orderSourceListDetailExport } from '@/api/statistics/order';
 
 // 引入组件
 const DiscernDetail = defineAsyncComponent(() => import('@/views/business/discern/components/Discern-detail.vue')); // 甄别详情