|
@@ -10,9 +10,9 @@
|
|
|
<el-form-item label="关键词" prop="Keyword">
|
|
|
<el-input v-model="state.queryParams.Keyword" placeholder="关键词" clearable @keyup.enter="queryList" class="keyword-input" />
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="分数区间" prop="value">
|
|
|
- <input-number-range v-model="state.queryParams.value"/>
|
|
|
- </el-form-item>
|
|
|
+ <el-form-item label="分数区间" prop="value">
|
|
|
+ <input-number-range v-model="state.queryParams.value" />
|
|
|
+ </el-form-item>
|
|
|
<el-form-item label="创建时间" prop="exTime">
|
|
|
<el-date-picker
|
|
|
v-model="state.queryParams.exTime"
|
|
@@ -31,148 +31,40 @@
|
|
|
<el-button @click="resetQuery(ruleFormRef)" v-waves class="default-button"> <SvgIcon name="ele-Refresh" class="mr5" />重置 </el-button>
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
- <!-- 表格 -->
|
|
|
- <el-table :data="state.tableData" v-loading="state.loading" row-key="id" ref="multipleTableRef" @selection-change="handleSelectionChange">
|
|
|
- <el-table-column type="selection" width="55" />
|
|
|
- <template v-if="state.queryParams.Source === 1">
|
|
|
- <el-table-column prop="order.no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>
|
|
|
- <el-table-column prop="mode" label="质检方式" show-overflow-tooltip width="100"></el-table-column>
|
|
|
- <el-table-column prop="order.sourceChannel" label="来源方式" show-overflow-tooltip></el-table-column>
|
|
|
- <el-table-column label="受理时间" show-overflow-tooltip width="170">
|
|
|
- <template #default="{ row }">
|
|
|
- <span>{{ formatDate(row.order?.startTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="order.acceptType" label="受理类型" show-overflow-tooltip></el-table-column>
|
|
|
- <el-table-column prop="order.statusText" label="工单状态" show-overflow-tooltip></el-table-column>
|
|
|
- <el-table-column label="工单标题" show-overflow-tooltip width="300">
|
|
|
- <template #default="{ row }">
|
|
|
- <order-detail :order="row.order">{{ row.order?.title }}</order-detail>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="order.hotspotName" label="热点分类" show-overflow-tooltip min-width="120"></el-table-column>
|
|
|
- <el-table-column prop="employeeName" label="受理人" show-overflow-tooltip width="120">
|
|
|
- <template #default="{ row }">
|
|
|
- <span
|
|
|
- >{{ row.order?.acceptorName }} <span v-if="row.order?.acceptorStaffNo">[{{ row.order?.acceptorStaffNo }}]</span>
|
|
|
- </span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="order.fromPhone" label="来电电话" show-overflow-tooltip width="120"></el-table-column>
|
|
|
- </template>
|
|
|
- <template v-if="state.queryParams.Source === 2">
|
|
|
- <el-table-column prop="order.no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>
|
|
|
- <el-table-column prop="mode" label="质检方式" show-overflow-tooltip width="100"></el-table-column>
|
|
|
- <el-table-column prop="order.sourceChannel" label="来源方式" show-overflow-tooltip></el-table-column>
|
|
|
- <el-table-column label="受理时间" show-overflow-tooltip width="170">
|
|
|
- <template #default="{ row }">
|
|
|
- <span>{{ formatDate(row.order?.startTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="order.acceptType" label="受理类型" show-overflow-tooltip></el-table-column>
|
|
|
- <el-table-column prop="order.statusText" label="工单状态" show-overflow-tooltip></el-table-column>
|
|
|
- <el-table-column label="工单标题" show-overflow-tooltip width="300">
|
|
|
- <template #default="{ row }">
|
|
|
- <span class="color-primary">{{ row.order?.title }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="order.hotspotName" label="热点分类" show-overflow-tooltip min-width="120"></el-table-column>
|
|
|
- <el-table-column prop="employeeName" label="受理人" show-overflow-tooltip width="120">
|
|
|
- <template #default="{ row }">
|
|
|
- <span
|
|
|
- >{{ row.order?.acceptorName }} <span v-if="row.order?.acceptorStaffNo">[{{ row.order?.acceptorStaffNo }}]</span>
|
|
|
- </span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="creationTime" label="交办时间" show-overflow-tooltip width="170">
|
|
|
- <template #default="{ row }">
|
|
|
- <span>{{ formatDate(row.creationTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="order.fromPhone" label="来电电话" show-overflow-tooltip width="120"></el-table-column>
|
|
|
+ <ProTable
|
|
|
+ ref="proTableRef"
|
|
|
+ :columns="columns"
|
|
|
+ :data="state.tableData"
|
|
|
+ @updateTable="queryList"
|
|
|
+ :loading="state.loading"
|
|
|
+ :total="state.total"
|
|
|
+ v-model:page-index="state.queryParams.PageIndex"
|
|
|
+ v-model:page-size="state.queryParams.PageSize"
|
|
|
+ :key="Math.random()"
|
|
|
+ >
|
|
|
+ <template #title="{ row }">
|
|
|
+ <order-detail :order="row.order" @updateList="queryList">{{ row.order?.title }}</order-detail>
|
|
|
</template>
|
|
|
- <template v-if="state.queryParams.Source === 3">
|
|
|
- <el-table-column prop="order.no" label="工单编码" show-overflow-tooltip width="150"></el-table-column>
|
|
|
- <el-table-column prop="mode" label="质检方式" show-overflow-tooltip width="100"></el-table-column>
|
|
|
- <el-table-column label="工单标题" show-overflow-tooltip width="300">
|
|
|
- <template #default="{ row }">
|
|
|
- <span class="color-primary">{{ row.order?.title }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="order.sourceChannel" label="来源方式" show-overflow-tooltip></el-table-column>
|
|
|
- <el-table-column prop="visit.visitStateText" label="回访状态" show-overflow-tooltip></el-table-column>
|
|
|
- <el-table-column prop="visit.visitTypeText" label="回访方式" show-overflow-tooltip width="100"></el-table-column>
|
|
|
- <el-table-column prop="order.acceptType" label="受理类型" show-overflow-tooltip></el-table-column>
|
|
|
- <el-table-column prop="order.hotspotName" label="热点分类" show-overflow-tooltip min-width="120"></el-table-column>
|
|
|
- <el-table-column prop="employeeName" label="受理人" show-overflow-tooltip width="120">
|
|
|
- <template #default="{ row }">
|
|
|
- <span
|
|
|
- >{{ row.order?.acceptorName }} <span v-if="row.order?.acceptorStaffNo">[{{ row.order?.acceptorStaffNo }}]</span>
|
|
|
- </span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="order.actualHandleOrgName" label="接办对象" show-overflow-tooltip width="170"></el-table-column>
|
|
|
- <el-table-column label="受理时间" show-overflow-tooltip width="170">
|
|
|
- <template #default="{ row }">
|
|
|
- <span>{{ formatDate(row.order?.startTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="办结时间" show-overflow-tooltip width="170">
|
|
|
- <template #default="{ row }">
|
|
|
- <span>{{ formatDate(row.order?.filedTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="startTime" label="发布时间" show-overflow-tooltip width="170">
|
|
|
- <template #default="{ row }">
|
|
|
- <span>{{ formatDate(row.visit?.publishTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="回访任务创建时间" show-overflow-tooltip width="170">
|
|
|
- <template #default="{ row }">
|
|
|
- <span>{{ formatDate(row.visit?.creationTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="visit.employeeName" label="回访人" show-overflow-tooltip width="170"></el-table-column>
|
|
|
- <el-table-column label="回访时间" show-overflow-tooltip width="170">
|
|
|
- <template #default="{ row }">
|
|
|
- <span>{{ formatDate(row.visit?.visitTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="order.counterSignTypeText" label="是否会签" show-overflow-tooltip></el-table-column>
|
|
|
+ <template #employeeName="{ row }">
|
|
|
+ <span
|
|
|
+ >{{ row.order?.acceptorName }} <span v-if="row.order?.acceptorStaffNo">[{{ row.order?.acceptorStaffNo }}]</span>
|
|
|
+ </span>
|
|
|
</template>
|
|
|
- <el-table-column prop="userName" label="质检人" show-overflow-tooltip></el-table-column>
|
|
|
- <el-table-column label="质检时间" show-overflow-tooltip width="170">
|
|
|
- <template #default="{ row }">
|
|
|
- <span>{{ formatDate(row.qualityTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="grade" label="质检得分" show-overflow-tooltip></el-table-column>
|
|
|
- <el-table-column label="操作" width="120" fixed="right" align="center">
|
|
|
- <template #default="{ row }">
|
|
|
- <el-button link type="primary" @click="onQualityView(row)" v-auth="'quality:done:view'" title="查看质检详情"> 查看 </el-button>
|
|
|
- <el-button link type="primary" @click="onQualityEdit(row)" v-auth="'quality:done:edit'" title="编辑质检"> 编辑 </el-button>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <template #empty>
|
|
|
- <Empty />
|
|
|
+ <!-- 表格操作 -->
|
|
|
+ <template #operation="{ row }">
|
|
|
+ <el-button link type="primary" @click="onQualityView(row)" v-auth="'quality:done:view'" title="查看质检详情"> 查看 </el-button>
|
|
|
+ <el-button link type="primary" @click="onQualityEdit(row)" v-auth="'quality:done:edit'" title="编辑质检"> 编辑 </el-button>
|
|
|
</template>
|
|
|
- </el-table>
|
|
|
- <!-- 分页 -->
|
|
|
- <pagination
|
|
|
- :total="state.total"
|
|
|
- v-model:page="state.queryParams.PageIndex"
|
|
|
- v-model:limit="state.queryParams.PageSize"
|
|
|
- @pagination="queryList"
|
|
|
- />
|
|
|
+ </ProTable>
|
|
|
</el-card>
|
|
|
<!-- 质检 -->
|
|
|
<quality-inspection ref="qualityInspectionRef" @updateList="queryList" />
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
-<script lang="ts" setup name="qualityDone">
|
|
|
+<script lang="tsx" setup name="qualityDone">
|
|
|
import { defineAsyncComponent, onMounted, reactive, ref } from 'vue';
|
|
|
-import { FormInstance } from 'element-plus';
|
|
|
+import { ElButton, FormInstance } from 'element-plus';
|
|
|
import { formatDate } from '@/utils/formatTime';
|
|
|
import { qualityBaseData, qualityList } from '@/api/quality';
|
|
|
import { shortcuts } from '@/utils/constants';
|
|
@@ -180,10 +72,29 @@ import { shortcuts } from '@/utils/constants';
|
|
|
// 引入组件
|
|
|
const QualityInspection = defineAsyncComponent(() => import('@/views/quality/done/components/Quality-inspection.vue')); // 质检
|
|
|
const OrderDetail = defineAsyncComponent(() => import('@/components/OrderDetail/index.vue')); // 工单详情
|
|
|
-const InputNumberRange = defineAsyncComponent(() => import('@/components/NumberRange/index.vue')); // 数字区间
|
|
|
+const InputNumberRange = defineAsyncComponent(() => import('@/components/NumberRange/index.vue')); // 数字区间
|
|
|
+
|
|
|
+const proTableRef = ref<RefType>(); // 表格ref
|
|
|
+// 表格配置项
|
|
|
+const columns = ref<any[]>([
|
|
|
+ { prop: 'order.no', label: '工单编码', width: 150 },
|
|
|
+ { prop: 'aiQuality', label: '质检方式', width: 100, render: (scope: any) => (scope.row.aiQuality ? '智能质检' : '人工质检') },
|
|
|
+ { prop: 'order.sourceChannel', label: '来源方式' },
|
|
|
+ { prop: 'order.startTime', label: '受理时间', width: 170, render: (scope: any) => formatDate(scope.row.order?.startTime, 'YYYY-mm-dd HH:MM:SS') },
|
|
|
+ { prop: 'order.acceptType', label: '受理类型' },
|
|
|
+ { prop: 'order.statusText', label: '工单状态' },
|
|
|
+ { prop: 'order.title', label: '工单标题', width: 300 },
|
|
|
+ { prop: 'order.hotspotName', label: '热点分类' },
|
|
|
+ { prop: 'employeeName', label: '受理人', width: 120 },
|
|
|
+ { prop: 'order.fromPhone', label: '来电电话', width: 120 },
|
|
|
+ { prop: 'userName', label: '质检人' },
|
|
|
+ { prop: 'qualityTime', label: '质检时间', width: 170, render: (scope: any) => formatDate(scope.row.qualityTime, 'YYYY-mm-dd HH:MM:SS') },
|
|
|
+ { prop: 'grade', label: '质检得分' },
|
|
|
+ { label: '操作', width: 140, fixed: 'right', align: 'center', prop: 'operation' },
|
|
|
+]);
|
|
|
|
|
|
// 定义变量内容
|
|
|
-const state = reactive<any>({
|
|
|
+const state = reactive({
|
|
|
loading: false, // 加载状态
|
|
|
queryParams: {
|
|
|
// 查询参数
|
|
@@ -195,7 +106,7 @@ const state = reactive<any>({
|
|
|
exTime: [], // 办理期限
|
|
|
State: 1, // 待质检
|
|
|
Keyword: null,
|
|
|
- value:[0, 100]
|
|
|
+ value: [0, 100],
|
|
|
},
|
|
|
total: 0, // 总条数
|
|
|
tableData: [], // 表格数据
|
|
@@ -225,14 +136,96 @@ const handleTimeChange = (val: string[], startKey: string, endKey: string) => {
|
|
|
const timeStartChangeCr = (val: string[]) => {
|
|
|
handleTimeChange(val, 'CreationTimeStart', 'CreationTimeEnd');
|
|
|
};
|
|
|
+// 受理待质检表头
|
|
|
+const acceptQualityColumns = [
|
|
|
+ { prop: 'order.no', label: '工单编码', width: 150 },
|
|
|
+ { prop: 'aiQuality', label: '质检方式', width: 100, render: (scope: any) => (scope.row.aiQuality ? '智能质检' : '人工质检') },
|
|
|
+ { prop: 'order.sourceChannel', label: '来源方式' },
|
|
|
+ { prop: 'order.startTime', label: '受理时间', width: 170, render: (scope: any) => formatDate(scope.row.order?.startTime, 'YYYY-mm-dd HH:MM:SS') },
|
|
|
+ { prop: 'order.acceptType', label: '受理类型' },
|
|
|
+ { prop: 'order.statusText', label: '工单状态' },
|
|
|
+ { prop: 'order.title', label: '工单标题', width: 300 },
|
|
|
+ { prop: 'order.hotspotName', label: '热点分类' },
|
|
|
+ { prop: 'employeeName', label: '受理人', width: 120 },
|
|
|
+ { prop: 'order.fromPhone', label: '来电电话', width: 120 },
|
|
|
+ { prop: 'userName', label: '质检人' },
|
|
|
+ { prop: 'qualityTime', label: '质检时间', width: 170, render: (scope: any) => formatDate(scope.row.qualityTime, 'YYYY-mm-dd HH:MM:SS') },
|
|
|
+ { prop: 'grade', label: '质检得分' },
|
|
|
+ { label: '操作', width: 140, fixed: 'right', align: 'center', prop: 'operation' },
|
|
|
+];
|
|
|
+// 交办待质检表头
|
|
|
+const assignQualityColumns = [
|
|
|
+ { prop: 'order.no', label: '工单编码', width: 150 },
|
|
|
+ { prop: 'aiQuality', label: '质检方式', width: 100, render: (scope: any) => (scope.row.aiQuality ? '智能质检' : '人工质检') },
|
|
|
+ { prop: 'order.sourceChannel', label: '来源方式' },
|
|
|
+ { prop: 'order.startTime', label: '受理时间', width: 170, render: (scope: any) => formatDate(scope.row.order?.startTime, 'YYYY-mm-dd HH:MM:SS') },
|
|
|
+ { prop: 'order.acceptType', label: '受理类型' },
|
|
|
+ { prop: 'order.statusText', label: '工单状态' },
|
|
|
+ { prop: 'title', label: '工单标题', width: 300 },
|
|
|
+ { prop: 'order.hotspotName', label: '热点分类' },
|
|
|
+ { prop: 'employeeName', label: '受理人', width: 120 },
|
|
|
+ { prop: 'creationTime', label: '交办时间', width: 170, render: (scope: any) => formatDate(scope.row.creationTime, 'YYYY-mm-dd HH:MM:SS') },
|
|
|
+ { prop: 'order.fromPhone', label: '来电电话', width: 120 },
|
|
|
+ { prop: 'userName', label: '质检人' },
|
|
|
+ { prop: 'qualityTime', label: '质检时间', width: 170, render: (scope: any) => formatDate(scope.row.qualityTime, 'YYYY-mm-dd HH:MM:SS') },
|
|
|
+ { prop: 'grade', label: '质检得分' },
|
|
|
+ { label: '操作', width: 140, fixed: 'right', align: 'center', prop: 'operation' },
|
|
|
+];
|
|
|
+// 回访待质检表头
|
|
|
+const visitQualityColumns = [
|
|
|
+ { prop: 'order.no', label: '工单编码', width: 150 },
|
|
|
+ { prop: 'aiQuality', label: '质检方式', width: 100, render: (scope: any) => (scope.row.aiQuality ? '智能质检' : '人工质检') },
|
|
|
+ { prop: 'title', label: '工单标题', width: 300 },
|
|
|
+ { prop: 'order.sourceChannel', label: '来源方式' },
|
|
|
+ { prop: 'visit.visitStateText', label: '回访状态' },
|
|
|
+ { prop: 'visit.visitTypeText', label: '回访方式', width: 100 },
|
|
|
+ { prop: 'order.acceptType', label: '受理类型' },
|
|
|
+ { prop: 'order.hotspotName', label: '热点分类', width: 120 },
|
|
|
+ { prop: 'employeeName', label: '受理人', width: 120 },
|
|
|
+ { prop: 'order.actualHandleOrgName', label: '接办对象', width: 170 },
|
|
|
+ { prop: 'order.startTime', label: '受理时间', width: 170, render: (scope: any) => formatDate(scope.row.order?.startTime, 'YYYY-mm-dd HH:MM:SS') },
|
|
|
+ { prop: 'order.filedTime', label: '办结时间', width: 170, render: (scope: any) => formatDate(scope.row.order?.filedTime, 'YYYY-mm-dd HH:MM:SS') },
|
|
|
+ {
|
|
|
+ prop: 'visit.publishTime',
|
|
|
+ label: '发布时间',
|
|
|
+ width: 170,
|
|
|
+ render: (scope: any) => formatDate(scope.row.visit?.publishTime, 'YYYY-mm-dd HH:MM:SS'),
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prop: 'visit.creationTime',
|
|
|
+ label: '回访任务创建时间',
|
|
|
+ width: 170,
|
|
|
+ render: (scope: any) => formatDate(scope.row.visit?.creationTime, 'YYYY-mm-dd HH:MM:SS'),
|
|
|
+ },
|
|
|
+ { prop: 'visit.employeeName', label: '回访人', width: 170 },
|
|
|
+ { prop: 'visit.visitTime', label: '回访时间', width: 170, render: (scope: any) => formatDate(scope.row.visit?.visitTime, 'YYYY-mm-dd HH:MM:SS') },
|
|
|
+ { prop: 'order.counterSignTypeText', label: '是否会签' },
|
|
|
+ { prop: 'userName', label: '质检人' },
|
|
|
+ { prop: 'qualityTime', label: '质检时间', width: 170, render: (scope: any) => formatDate(scope.row.qualityTime, 'YYYY-mm-dd HH:MM:SS') },
|
|
|
+ { prop: 'grade', label: '质检得分' },
|
|
|
+ { label: '操作', width: 140, fixed: 'right', align: 'center', prop: 'operation' },
|
|
|
+];
|
|
|
// 获取参数列表
|
|
|
const queryList = () => {
|
|
|
state.loading = true;
|
|
|
- const request = {
|
|
|
- ...state.queryParams,
|
|
|
- MaxGrade: state.queryParams.value[1],
|
|
|
- MinGrade: state.queryParams.value[0],
|
|
|
- }
|
|
|
+ switch (state.queryParams.Source) {
|
|
|
+ case 1:
|
|
|
+ columns.value = acceptQualityColumns;
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ columns.value = assignQualityColumns;
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ columns.value = visitQualityColumns;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ const request = {
|
|
|
+ ...state.queryParams,
|
|
|
+ MaxGrade: state.queryParams.value[1],
|
|
|
+ MinGrade: state.queryParams.value[0],
|
|
|
+ };
|
|
|
qualityList(request)
|
|
|
.then((res) => {
|
|
|
state.loading = false;
|
|
@@ -271,4 +264,4 @@ onMounted(() => {
|
|
|
getBaseData();
|
|
|
queryList();
|
|
|
});
|
|
|
-</script>
|
|
|
+</script>
|