|
@@ -3,8 +3,32 @@
|
|
|
<!-- 搜索 -->
|
|
|
<el-card shadow="never">
|
|
|
<el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
|
|
|
- <el-form-item label="部门名称" prop="OrgName">
|
|
|
- <el-input v-model="state.queryParams.OrgName" placeholder="部门名称" clearable @keyup.enter="handleQuery" class="keyword-input" />
|
|
|
+ <el-form-item label="" prop="Level">
|
|
|
+ <el-radio-group v-model="state.queryParams.Level" @change="handleQuery">
|
|
|
+ <el-radio-button label="0">全部</el-radio-button>
|
|
|
+ <el-radio-button label="1">本部</el-radio-button>
|
|
|
+ <el-radio-button label="2">下级</el-radio-button>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="" prop="Signed">
|
|
|
+ <el-radio-group v-model="state.queryParams.Signed" @change="handleQuery">
|
|
|
+ <el-radio-button label="0">未签收</el-radio-button>
|
|
|
+ <el-radio-button label="1">已签收</el-radio-button>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="时间段" prop="crTime">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="state.queryParams.crTime"
|
|
|
+ type="daterange"
|
|
|
+ unlink-panels
|
|
|
+ range-separator="至"
|
|
|
+ start-placeholder="开始时间"
|
|
|
+ end-placeholder="结束时间"
|
|
|
+ :shortcuts="shortcuts"
|
|
|
+ @change="handleQuery"
|
|
|
+ value-format="YYYY-MM-DD"
|
|
|
+ :clearable="false"
|
|
|
+ />
|
|
|
</el-form-item>
|
|
|
<el-form-item>
|
|
|
<el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
|
|
@@ -25,28 +49,17 @@
|
|
|
:total="state.total"
|
|
|
v-model:page-index="state.queryParams.PageIndex"
|
|
|
v-model:page-size="state.queryParams.PageSize"
|
|
|
- @export-current="exportCurrent"
|
|
|
- @export-all="exportAll"
|
|
|
+ :toolButton="['refresh', 'setting', 'exportCurrent', 'exportAll']"
|
|
|
+ @export-current="exportTable($event)"
|
|
|
+ @export-all="exportTable($event, true)"
|
|
|
:key="Math.random()"
|
|
|
border
|
|
|
>
|
|
|
- <template #expiredStatus="{ row }">
|
|
|
- <span :class="'overdue-status-' + row.expiredStatus" :title="row.expiredStatusText"></span>
|
|
|
- </template>
|
|
|
- <template #isProvince="{ row }">
|
|
|
- <span>{{ row.isProvince ? '省工单' : '市工单' }}</span>
|
|
|
+ <template #expiredStatusText="{ row }">
|
|
|
+ <span :class="'overdue-status-' + row.order?.expiredStatus" :title="row.order?.expiredStatusText"></span>
|
|
|
</template>
|
|
|
<template #title="{ row }">
|
|
|
- <order-detail :order="row" @updateList="queryList">{{ row.title }}</order-detail>
|
|
|
- </template>
|
|
|
- <template #employeeName="{ row }">
|
|
|
- <span
|
|
|
- >{{ row.acceptorName }} <span v-if="row.acceptorStaffNo">[{{ row.acceptorStaffNo }}]</span>
|
|
|
- </span>
|
|
|
- </template>
|
|
|
- <!-- 表格操作 -->
|
|
|
- <template #operation="{ row }">
|
|
|
- <order-detail :order="row" @updateList="queryList" />
|
|
|
+ <order-detail :order="row.order" @updateList="queryList" :type="row.order?.canSign ? 'danger' : 'primary'">{{ row.order?.title }}</order-detail>
|
|
|
</template>
|
|
|
</ProTable>
|
|
|
</el-card>
|
|
@@ -55,10 +68,11 @@
|
|
|
<script setup lang="tsx" name="statisticsDepartmentUnSigned">
|
|
|
import { defineAsyncComponent, onMounted, reactive, ref } from 'vue';
|
|
|
import type { FormInstance } from 'element-plus';
|
|
|
-import other from '@/utils/other';
|
|
|
import { useRoute, useRouter } from 'vue-router';
|
|
|
import { formatDate } from '@/utils/formatTime';
|
|
|
-import { departmentOrderDetail } from '@/api/statistics/department';
|
|
|
+import { departmentUnSignExport, departmentUnSign } from "@/api/statistics/department";
|
|
|
+import { downloadFileByStream } from "@/utils/tools";
|
|
|
+import { defaultDate, shortcuts } from "@/utils/constants";
|
|
|
|
|
|
// 引入组件
|
|
|
const OrderDetail = defineAsyncComponent(() => import('@/components/OrderDetail/index.vue')); // 工单详情
|
|
@@ -68,6 +82,9 @@ const state = reactive<any>({
|
|
|
queryParams: {
|
|
|
PageIndex: 1, // 当前页
|
|
|
PageSize: 10, // 每页条数
|
|
|
+ Level:'0',
|
|
|
+ Signed:'0',
|
|
|
+ crTime: defaultDate, // 时间默认今天开始到今天结束
|
|
|
},
|
|
|
tableData: [], //表单
|
|
|
loading: false, // 加载
|
|
@@ -79,43 +96,42 @@ const router = useRouter(); // 路由
|
|
|
const proTableRef = ref<RefType>(); // 表格ref
|
|
|
// 表格配置项
|
|
|
const columns = ref<any[]>([
|
|
|
- { prop: 'expiredStatus', label: '超期状态', align: 'center',width: 90 },
|
|
|
- { prop: 'statusText', label: '工单状态', width: 100 },
|
|
|
- { prop: 'sourceChannel', label: '来源方式', width: 120 },
|
|
|
- { prop: 'actualHandleStepName', label: '当前节点', width: 120 },
|
|
|
- { prop: 'no', label: '工单编码', width: 150 },
|
|
|
+ { prop: 'order.expiredStatusText', label: '超期状态', align: 'center',width: 90,fixed:'left',},
|
|
|
+ { prop: 'order.statusText', label: '工单状态', width: 100 },
|
|
|
+ { prop: 'order.sourceChannel', label: '来源方式', width: 120 },
|
|
|
+ { prop: 'order.actualHandleStepName', label: '当前节点', width: 120 },
|
|
|
+ { prop: 'order.no', label: '工单编码', width: 150 },
|
|
|
|
|
|
{
|
|
|
- prop: 'startTime',
|
|
|
+ prop: 'order.startTime',
|
|
|
label: '受理时间',
|
|
|
width: 170,
|
|
|
render: (scope) => {
|
|
|
- return <span>{formatDate(scope.row.startTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
|
|
|
+ return <span>{formatDate(scope.row.order.startTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
|
|
|
},
|
|
|
},
|
|
|
- { prop: 'title', label: '工单标题', width: 300 },
|
|
|
+ { prop: 'order.title', label: '工单标题', width: 300 },
|
|
|
{
|
|
|
- prop: 'expiredTime',
|
|
|
+ prop: 'order.expiredTime',
|
|
|
label: '工单期满时间',
|
|
|
width: 170,
|
|
|
render: (scope) => {
|
|
|
- return <span>{formatDate(scope.row.expiredTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
|
|
|
+ return <span>{formatDate(scope.row.order.expiredTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
|
|
|
},
|
|
|
},
|
|
|
- { prop: 'orgLevelOneName', label: '转办部门', width: 170 },
|
|
|
+ { prop: 'workflowStep.creatorOrgName', label: '转办部门', width: 170 },
|
|
|
{
|
|
|
- prop: 'filedTime',
|
|
|
+ prop: 'workflowStep.creationTime',
|
|
|
label: '转办时间',
|
|
|
width: 170,
|
|
|
render: (scope) => {
|
|
|
- return <span>{formatDate(scope.row.filedTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
|
|
|
+ return <span>{formatDate(scope.row.workflowStep.creationTime, 'YYYY-mm-dd HH:MM:SS')}</span>;
|
|
|
},
|
|
|
},
|
|
|
- { prop: 'orgLevelOneName', label: '签收部门', width: 170 },
|
|
|
- { prop: 'actualHandleOrgName', label: '未签收时间(小时)', width: 170 },
|
|
|
- { prop: 'acceptType', label: '受理类型', width: 150 },
|
|
|
- { prop: 'hotspotName', label: '热点分类', width: 200 },
|
|
|
- { prop: 'operation', label: '操作', fixed: 'right', width: 90, align: 'center' },
|
|
|
+ { prop: 'workflowStep.acceptorOrgName', label: '签收部门', width: 170 },
|
|
|
+ { prop: 'unsignedTime', label: '未签收时间(小时)', width: 170 },
|
|
|
+ { prop: 'order.acceptType', label: '受理类型', width: 150 },
|
|
|
+ { prop: 'order.hotspotName', label: '热点分类', width: 200 }
|
|
|
]);
|
|
|
// 手动查询,将页码设置为1
|
|
|
const handleQuery = () => {
|
|
@@ -125,13 +141,20 @@ const handleQuery = () => {
|
|
|
const historyParams = history.state;
|
|
|
/** 获取列表 */
|
|
|
const queryList = () => {
|
|
|
- let request = other.deepClone(state.queryParams);
|
|
|
- request.StartDate = historyParams.StartDate;
|
|
|
- request.EndDate = historyParams.EndDate;
|
|
|
- request.OrgCode = historyParams.OrgCode;
|
|
|
- request.StatisticsType = historyParams.StatisticsType;
|
|
|
+ let StartTime = null;
|
|
|
+ let EndTime = null;
|
|
|
+ if (state.queryParams?.crTime) {
|
|
|
+ StartTime = state.queryParams?.crTime[0];
|
|
|
+ EndTime = state.queryParams?.crTime[1];
|
|
|
+ }
|
|
|
+ const request = {
|
|
|
+ StartTime,
|
|
|
+ EndTime,
|
|
|
+ Level: state.queryParams.Level,
|
|
|
+ Signed: state.queryParams.Signed,
|
|
|
+ };
|
|
|
state.loading = true;
|
|
|
- departmentOrderDetail(request)
|
|
|
+ departmentUnSign(request)
|
|
|
.then((response: any) => {
|
|
|
state.tableData = response?.result.items ?? [];
|
|
|
state.total = response?.result.total;
|
|
@@ -147,11 +170,40 @@ const resetQuery = (formEl: FormInstance | undefined) => {
|
|
|
formEl.resetFields();
|
|
|
queryList();
|
|
|
};
|
|
|
-const exportCurrent = () => {
|
|
|
- console.log('导出当前页', proTableRef.value);
|
|
|
-};
|
|
|
-const exportAll = () => {
|
|
|
- console.log('导出全部', proTableRef.value);
|
|
|
+// 表格导出
|
|
|
+const exportTable = (val: any, isExportAll = false) => {
|
|
|
+ let StartTime = null;
|
|
|
+ let EndTime = null;
|
|
|
+ if (state.queryParams?.crTime) {
|
|
|
+ StartTime = state.queryParams?.crTime[0];
|
|
|
+ EndTime = state.queryParams?.crTime[1];
|
|
|
+ }
|
|
|
+ const request = {
|
|
|
+ StartTime,
|
|
|
+ EndTime,
|
|
|
+ Level: state.queryParams.Level,
|
|
|
+ Signed: state.queryParams.Signed,
|
|
|
+ };
|
|
|
+ const columnInfos = val.map((item: any) => {
|
|
|
+ return {
|
|
|
+ prop: item.prop,
|
|
|
+ name: item.label,
|
|
|
+ };
|
|
|
+ });
|
|
|
+ const req = {
|
|
|
+ queryDto: request,
|
|
|
+ columnInfos,
|
|
|
+ isExportAll,
|
|
|
+ };
|
|
|
+ state.loading = true;
|
|
|
+ departmentUnSignExport(req)
|
|
|
+ .then((res: any) => {
|
|
|
+ state.loading = false;
|
|
|
+ downloadFileByStream(res);
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ state.loading = false;
|
|
|
+ });
|
|
|
};
|
|
|
onMounted(() => {
|
|
|
queryList();
|