|
@@ -17,8 +17,8 @@
|
|
|
:default-time="defaultTimeStartEnd"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="工单标题" prop="Keyword">
|
|
|
- <el-input v-model="state.queryParams.Keyword" placeholder="工单标题" clearable @keyup.enter="handleQuery" class="keyword-input" />
|
|
|
+ <el-form-item label="工单标题" prop="Title">
|
|
|
+ <el-input v-model="state.queryParams.Title" placeholder="工单标题" clearable @keyup.enter="handleQuery" class="keyword-input" />
|
|
|
</el-form-item>
|
|
|
<el-form-item label="工单编码" prop="No">
|
|
|
<el-input v-model="state.queryParams.No" placeholder="工单编码" clearable @keyup.enter="handleQuery" class="keyword-input" />
|
|
@@ -54,11 +54,11 @@
|
|
|
:custom-config="{ storage: true }"
|
|
|
showHeaderOverflow
|
|
|
:sort-config="{ remote: true }"
|
|
|
- :params="{ exportMethod: departmentOverdueDetailExport, exportParams: requestParams }"
|
|
|
+ :params="{ exportMethod: departmentVisitZGDetailExport, exportParams: requestParams }"
|
|
|
>
|
|
|
<vxe-column field="order.expiredStatusText" title="状态" width="60" align="center">
|
|
|
<template #default="{ row }">
|
|
|
- <span :class="'overdue-status-' + row.order?.expiredStatus" :title="row.order.expiredStatusText"></span>
|
|
|
+ <span :class="'overdue-status-' + row.order?.expiredStatus" :title="row.order?.expiredStatusText"></span>
|
|
|
</template>
|
|
|
</vxe-column>
|
|
|
<vxe-column field="statusText" title="工单状态" width="110">
|
|
@@ -70,7 +70,7 @@
|
|
|
</template>
|
|
|
</vxe-column>
|
|
|
<vxe-column field="order.sourceChannel" title="来源渠道" width="110"></vxe-column>
|
|
|
- <vxe-column field="order.sourceChannel" title="当前节点" width="110"></vxe-column>
|
|
|
+ <vxe-column field="order.currentStepName" title="当前节点" width="110"></vxe-column>
|
|
|
<vxe-column field="order.no" title="工单编码" width="140"></vxe-column>
|
|
|
<vxe-column field="order.creationTime" title="受理时间" width="160">
|
|
|
<template #default="{ row }">
|
|
@@ -82,17 +82,17 @@
|
|
|
<order-detail :order="row.order" @updateList="queryList">{{ row.order?.title }}</order-detail>
|
|
|
</template>
|
|
|
</vxe-column>
|
|
|
- <vxe-column field="order.contact" title="联系电话" width="120"></vxe-column>
|
|
|
- <vxe-column field="order.contact" title="接办部门" width="120"></vxe-column>
|
|
|
- <vxe-column field="visitTime" title="办结时间" width="160">
|
|
|
+ <vxe-column field="order.fromPhone" title="来电号码" width="120"></vxe-column>
|
|
|
+ <vxe-column field="order.actualHandleOrgName" title="接办部门" width="120"></vxe-column>
|
|
|
+ <vxe-column field="order.filedTime" title="办结时间" width="160">
|
|
|
<template #default="{ row }">
|
|
|
- {{ formatDate(row.visitTime, 'YYYY-mm-dd HH:MM:SS') }}
|
|
|
+ {{ formatDate(row.order?.filedTime, 'YYYY-mm-dd HH:MM:SS') }}
|
|
|
</template>
|
|
|
</vxe-column>
|
|
|
<vxe-column field="employeeName" title="回访人" width="120"></vxe-column>
|
|
|
- <vxe-column field="employeeName" title="受理类型" width="120"></vxe-column>
|
|
|
- <vxe-column field="employeeName" title="热点分类" width="150"></vxe-column>
|
|
|
- <vxe-column field="employeeName" title="受理人" width="120"></vxe-column>
|
|
|
+ <vxe-column field="order.acceptType" title="受理类型" width="120"></vxe-column>
|
|
|
+ <vxe-column field="order.hotspotName" title="热点分类" width="150"></vxe-column>
|
|
|
+ <vxe-column field="order.acceptorName" title="受理人" width="120"></vxe-column>
|
|
|
<vxe-column title="操作" fixed="right" width="100" align="center" :show-overflow="false">
|
|
|
<template #default="{ row }">
|
|
|
<el-button link type="primary" @click="visitDetail(row)" title="查看回访详情"> 回访详情 </el-button>
|
|
@@ -113,9 +113,32 @@
|
|
|
<!-- 更多查询 -->
|
|
|
<el-drawer v-model="drawer" title="更多查询" size="500px">
|
|
|
<el-form :model="state.queryParams" ref="drawerRuleFormRef" @submit.native.prevent label-width="100px" :disabled="state.loading">
|
|
|
- <el-form-item label="受理时间" prop="crTime">
|
|
|
+ <el-form-item label="接办部门" prop="ActualHandleOrgName">
|
|
|
+ <el-input v-model="state.queryParams.ActualHandleOrgName" placeholder="接办部门" clearable @keyup.enter="handleQuery" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="受理类型" prop="AcceptType">
|
|
|
+ <el-select v-model="state.queryParams.AcceptType" placeholder="请选择受理类型" clearable class="w100" @change="handleQuery">
|
|
|
+ <el-option v-for="item in state.acceptTypeOptions" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="受理人" prop="AcceptorName">
|
|
|
+ <el-input v-model="state.queryParams.AcceptorName" placeholder="受理人" clearable @keyup.enter="handleQuery" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="接办人" prop="ActualHandlerName">
|
|
|
+ <el-input v-model="state.queryParams.ActualHandlerName" placeholder="接办人" clearable @keyup.enter="handleQuery" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="来电号码" prop="FromPhone">
|
|
|
+ <el-input v-model="state.queryParams.FromPhone" placeholder="来电号码" clearable @keyup.enter="handleQuery" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="联系电话" prop="Contact">
|
|
|
+ <el-input v-model="state.queryParams.Contact" placeholder="联系电话" clearable @keyup.enter="handleQuery" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="来电人姓名" prop="FromName">
|
|
|
+ <el-input v-model="state.queryParams.FromName" placeholder="来电人姓名" clearable @keyup.enter="handleQuery" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="受理时间" prop="slTime">
|
|
|
<el-date-picker
|
|
|
- v-model="state.queryParams.crTime"
|
|
|
+ v-model="state.queryParams.slTime"
|
|
|
type="datetimerange"
|
|
|
unlink-panels
|
|
|
range-separator="至"
|
|
@@ -127,63 +150,9 @@
|
|
|
:default-time="defaultTimeStartEnd"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="部门分类" prop="OrgVisitStatisticsType">
|
|
|
- <el-select v-model="state.queryParams.OrgVisitStatisticsType" placeholder="请选择部门分类" @change="handleQuery" clearable>
|
|
|
- <el-option label="中心归档" value="10" />
|
|
|
- <el-option label="部门归档" value="20" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="来源渠道" prop="Channel">
|
|
|
- <el-select v-model="state.queryParams.Channel" placeholder="请选择来源渠道" clearable @change="handleQuery">
|
|
|
- <el-option v-for="item in state.channelOptions" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="回访人姓名" prop="VisitUser">
|
|
|
- <el-input v-model="state.queryParams.VisitUser" placeholder="回访人姓名" clearable @keyup.enter="handleQuery" />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="查询类型" prop="AttitudeType">
|
|
|
- <el-select v-model="state.queryParams.AttitudeType" placeholder="请选择查询类型">
|
|
|
- <el-option v-for="item in state.attitudeType" :value="item.key" :key="item.key" :label="item.value" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="办件结果" prop="OrgProcessingResults" v-if="state.queryParams.AttitudeType === 1">
|
|
|
- <el-select v-model="state.queryParams.OrgProcessingResults" placeholder="请选择办件结果" multiple clearable>
|
|
|
- <el-option
|
|
|
- v-for="item in state.visitSatisfaction"
|
|
|
- :value="item.dicDataValue"
|
|
|
- :key="item.dicDataValue"
|
|
|
- :label="item.dicDataName"
|
|
|
- ></el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="办件态度" prop="OrgProcessingResults" v-if="state.queryParams.AttitudeType === 2">
|
|
|
- <el-select v-model="state.queryParams.OrgProcessingResults" placeholder="请选择办件态度" multiple clearable>
|
|
|
- <el-option v-for="item in state.visitMananer" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName"></el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="热点分类" prop="Hotspot">
|
|
|
- <el-input v-model="state.queryParams.Hotspot" placeholder="热点分类名称" clearable @keyup.enter="handleQuery" />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="接办部门" prop="ActualHandleOrgName">
|
|
|
- <el-input v-model="state.queryParams.ActualHandleOrgName" placeholder="接办部门" clearable @keyup.enter="handleQuery" />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="回访部门" prop="OrgId">
|
|
|
- <el-cascader
|
|
|
- :options="state.orgsOptions"
|
|
|
- filterable
|
|
|
- :show-all-levels="false"
|
|
|
- :props="{ checkStrictly: true, value: 'id', label: 'name', emitPath: false }"
|
|
|
- placeholder="请选择回访部门"
|
|
|
- clearable
|
|
|
- class="w100"
|
|
|
- v-model="state.queryParams.OrgId"
|
|
|
- @change="handleQuery"
|
|
|
- >
|
|
|
- </el-cascader>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="办结时间" prop="doneTime">
|
|
|
+ <el-form-item label="期满时间" prop="qmTime">
|
|
|
<el-date-picker
|
|
|
- v-model="state.queryParams.doneTime"
|
|
|
+ v-model="state.queryParams.qmTime"
|
|
|
type="datetimerange"
|
|
|
unlink-panels
|
|
|
range-separator="至"
|
|
@@ -195,32 +164,9 @@
|
|
|
:default-time="defaultTimeStartEnd"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="来电主体" prop="TypeCode">
|
|
|
- <el-select v-model="state.queryParams.TypeCode" placeholder="请选择来电主体" @change="handleQuery">
|
|
|
- <el-option :value="0" label="全部" />
|
|
|
- <el-option :value="1" label="市民" />
|
|
|
- <el-option :value="2" label="企业" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="省/市工单" prop="IsProvinceOrder">
|
|
|
- <el-select v-model="state.queryParams.IsProvinceOrder" placeholder="请选择省/市工单" clearable @change="handleQuery">
|
|
|
- <el-option :value="true" label="省工单" />
|
|
|
- <el-option :value="false" label="市工单" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="来源渠道" prop="SourceChannelCode">
|
|
|
- <el-select v-model="state.queryParams.SourceChannelCode" placeholder="请选择来源渠道" clearable class="w100" @change="handleQuery">
|
|
|
- <el-option v-for="item in state.channelOptions" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="受理类型" prop="AcceptTypeCode">
|
|
|
- <el-select v-model="state.queryParams.AcceptTypeCode" placeholder="请选择受理类型" clearable class="w100" @change="handleQuery">
|
|
|
- <el-option v-for="item in state.acceptTypeOptions" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="不满意原因" prop="OrgNoSatisfiedReason">
|
|
|
- <el-select v-model="state.queryParams.OrgNoSatisfiedReason" placeholder="请选择不满意原因" clearable class="w100" @change="handleQuery">
|
|
|
- <el-option v-for="item in state.dissatisfiedReason" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName" />
|
|
|
+ <el-form-item label="工单状态" prop="Status">
|
|
|
+ <el-select v-model="state.queryParams.Status" placeholder="请选择工单状态" clearable @change="handleQuery">
|
|
|
+ <el-option v-for="item in state.orderStatusOptions" :value="item.key" :key="item.key" :label="item.value" />
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="事发地址" prop="AreaCode">
|
|
@@ -236,20 +182,45 @@
|
|
|
>
|
|
|
</el-cascader>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="回访内容" prop="ContentRetrieval">
|
|
|
- <el-input v-model="state.queryParams.ContentRetrieval" placeholder="回访内容" clearable @keyup.enter="handleQuery" />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="回访方式" prop="VisitType">
|
|
|
- <el-select v-model="state.queryParams.VisitType" placeholder="请选择回访方式" clearable class="w100" @change="handleQuery">
|
|
|
- <el-option v-for="item in state.visitType" :value="item.key" :key="item.key" :label="item.value" />
|
|
|
+ <el-form-item label="来源渠道" prop="Channel">
|
|
|
+ <el-select v-model="state.queryParams.Channel" placeholder="请选择来源渠道" clearable @change="handleQuery">
|
|
|
+ <el-option v-for="item in state.channelOptions" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName" />
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="是否甄别" prop="IsScreen">
|
|
|
- <el-select v-model="state.queryParams.IsScreen" placeholder="请选择是否甄别" @change="handleQuery" clearable>
|
|
|
+ <el-select v-model="state.queryParams.IsScreen" placeholder="请选择是否甄别" clearable @change="handleQuery">
|
|
|
<el-option label="是" :value="true" />
|
|
|
<el-option label="否" :value="false" />
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
+ <el-form-item label="当前节点" prop="CurrentStepName">
|
|
|
+ <el-select v-model="state.queryParams.CurrentStepName" placeholder="请选择当前节点" clearable @change="handleQuery">
|
|
|
+ <el-option v-for="item in state.currentStepOptions" :value="item.value" :key="item.key" :label="item.value" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="办结时间" prop="doneTime">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="state.queryParams.doneTime"
|
|
|
+ type="datetimerange"
|
|
|
+ unlink-panels
|
|
|
+ range-separator="至"
|
|
|
+ start-placeholder="开始时间"
|
|
|
+ end-placeholder="结束时间"
|
|
|
+ :shortcuts="shortcuts"
|
|
|
+ @change="handleQuery"
|
|
|
+ value-format="YYYY-MM-DD[T]HH:mm:ss"
|
|
|
+ :default-time="defaultTimeStartEnd"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="热点分类" prop="Hotspot">
|
|
|
+ <el-input v-model.trim="state.queryParams.Hotspot" placeholder="热点分类名称" clearable @keyup.enter="handleQuery" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="是否紧急" prop="IsUrgent">
|
|
|
+ <el-select v-model="state.queryParams.IsUrgent" placeholder="请选择是否紧急" clearable @change="handleQuery">
|
|
|
+ <el-option :value="true" label="紧急" />
|
|
|
+ <el-option :value="false" label="不紧急" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
</el-form>
|
|
|
<template #footer>
|
|
|
<el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
|
|
@@ -263,10 +234,11 @@ import { defineAsyncComponent, onMounted, reactive, ref } from 'vue';
|
|
|
import { FormInstance } from 'element-plus';
|
|
|
import { formatDate } from '@/utils/formatTime';
|
|
|
import { useRoute } from 'vue-router';
|
|
|
-import { departmentOverdueDetailExport } from '@/api/statistics/department';
|
|
|
import { defaultDate, defaultTimeStartEnd, shortcuts } from '@/utils/constants';
|
|
|
-import { departmentVisitDetailSmart } from '@/api/statistics/order';
|
|
|
+import { departmentVisitZGDetail, departmentVisitZGDetailExport } from '@/api/statistics/order';
|
|
|
import other from '@/utils/other';
|
|
|
+import { listBaseData } from '@/api/business/order';
|
|
|
+import { treeArea } from '@/api/auxiliary/area';
|
|
|
|
|
|
// 引入组件
|
|
|
const OrderDetail = defineAsyncComponent(() => import('@/components/OrderDetail/index.vue')); // 工单详情
|
|
@@ -283,10 +255,39 @@ const state = reactive<any>({
|
|
|
crTime: defaultDate,
|
|
|
StartTime: null,
|
|
|
EndTime: null,
|
|
|
+ No: null, // 工单编码
|
|
|
+ Title: null, // 工单标题
|
|
|
+ ActualHandleOrgName: null, // 接办部门
|
|
|
+ AcceptType: null, // 受理类型
|
|
|
+ AcceptorName: null, // 受理人
|
|
|
+ ActualHandlerName: null, // 接办人
|
|
|
+ FromPhone: null, // 来电号码
|
|
|
+ Contact: null, // 联系电话
|
|
|
+ FromName: null, // 来电人姓名
|
|
|
+ slTime: [], // 受理时间
|
|
|
+ CreationTimeStart: null, // 受理时间开始
|
|
|
+ CreationTimeEnd: null, // 受理时间结束
|
|
|
+ qmTime: [], // 期满时间
|
|
|
+ ExpiredTimeStart: null, // 期满时间开始
|
|
|
+ ExpiredTimeEnd: null, // 期满时间结束
|
|
|
+ Status: null, // 工单状态
|
|
|
+ AreaCode: null, // 事发地址
|
|
|
+ Channel: null, // 来源渠道
|
|
|
+ IsScreen: null, // 是否甄别
|
|
|
+ CurrentStepName: null, // 当前节点
|
|
|
+ doneTime: [], // 办结时间
|
|
|
+ FiledTimeStart: null, // 办结时间开始
|
|
|
+ FiledTimeEnd: null, // 办结时间结束
|
|
|
+ Hotspot: null, // 热点分类
|
|
|
+ IsUrgent: null, // 是否紧急
|
|
|
},
|
|
|
tableData: [], //表单
|
|
|
loading: false, // 加载
|
|
|
total: 0, // 总数
|
|
|
+ acceptTypeOptions: [], // 受理类型
|
|
|
+ channelOptions: [], // 来源渠道
|
|
|
+ orderStatusOptions: [], // 工单状态
|
|
|
+ areaOptions: [], // 事发地址
|
|
|
});
|
|
|
// 手动查询,将页码设置为1
|
|
|
const handleQuery = () => {
|
|
@@ -302,15 +303,11 @@ const queryList = () => {
|
|
|
requestParams.value = other.deepClone(state.queryParams);
|
|
|
requestParams.value.StartTime = state.queryParams.crTime === null ? null : state.queryParams.crTime[0];
|
|
|
requestParams.value.EndTime = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
|
|
|
+ requestParams.value.UserId = routeQueryParams.UserId;
|
|
|
Reflect.deleteProperty(requestParams.value, 'crTime');
|
|
|
- departmentVisitDetailSmart(requestParams.value)
|
|
|
+ departmentVisitZGDetail(requestParams.value)
|
|
|
.then((res) => {
|
|
|
state.tableData = res.result?.items ?? [];
|
|
|
- state.tableData = state.tableData.map((item: any) => {
|
|
|
- return {
|
|
|
- ...item.orderVisit,
|
|
|
- };
|
|
|
- });
|
|
|
state.total = res.result?.total ?? 0;
|
|
|
state.loading = false;
|
|
|
})
|
|
@@ -336,7 +333,26 @@ const resetQuery = (formEl: FormInstance | undefined) => {
|
|
|
// 回访详情
|
|
|
const visitDetailRef = ref<RefType>();
|
|
|
const visitDetail = (row: any) => {
|
|
|
- visitDetailRef.value.openDialog({ ...row, id: row.visitId }, '回访详情');
|
|
|
+ visitDetailRef.value.openDialog(row, '回访详情');
|
|
|
+};
|
|
|
+// 获取查询条件基础信息
|
|
|
+const getBaseData = async () => {
|
|
|
+ try {
|
|
|
+ const { result } = await listBaseData();
|
|
|
+ const mappings: any = {
|
|
|
+ acceptTypeOptions: 'acceptTypeOptions',
|
|
|
+ channelOptions: 'channelOptions',
|
|
|
+ orderStatusOptions: 'orderStatusOptions',
|
|
|
+ currentStepOptions: 'currentStepOptions',
|
|
|
+ };
|
|
|
+ for (const key in mappings) {
|
|
|
+ state[key] = result?.[mappings[key]] ?? [];
|
|
|
+ }
|
|
|
+ const area = await treeArea();
|
|
|
+ state.areaOptions = area?.result ?? []; //省市区数据
|
|
|
+ } catch (error) {
|
|
|
+ console.log(error);
|
|
|
+ }
|
|
|
};
|
|
|
onMounted(async () => {
|
|
|
if (routeQueryParams.StartTime && routeQueryParams.EndTime) {
|
|
@@ -346,5 +362,6 @@ onMounted(async () => {
|
|
|
if (tableRef.value && toolbarRef.value) {
|
|
|
tableRef.value.connect(toolbarRef.value);
|
|
|
}
|
|
|
+ await getBaseData();
|
|
|
});
|
|
|
</script>
|