From c65b90aaa3477a90ebc325024927d80227c0c841 Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期四, 09 四月 2026 14:09:25 +0800
Subject: [PATCH] 测试完成
---
src/views/Satisfaction/configurationmyd/dispose.vue | 268 +++++++++++++++++++++++++++++------------------------
1 files changed, 148 insertions(+), 120 deletions(-)
diff --git a/src/views/Satisfaction/configurationmyd/dispose.vue b/src/views/Satisfaction/configurationmyd/dispose.vue
index 8de73b1..4c39707 100644
--- a/src/views/Satisfaction/configurationmyd/dispose.vue
+++ b/src/views/Satisfaction/configurationmyd/dispose.vue
@@ -21,7 +21,7 @@
>
<el-form-item label="婊℃剰搴︾被鍨�" prop="templateid">
<el-select
- v-model="queryParams.templateid"
+ v-model="queryParams.templateType"
placeholder="璇烽�夋嫨妯℃澘"
clearable
style="width: 200px"
@@ -48,7 +48,7 @@
<el-option
v-for="dept in deptList"
:key="dept.deptCode"
- :label="dept.deptName"
+ :label="dept.label"
:value="dept.deptCode"
/>
</el-select>
@@ -96,11 +96,7 @@
>
鎵归噺澶勭悊 ({{ selectedIds.length }})
</el-button>
- <el-button
- type="info"
- icon="el-icon-download"
- @click="handleExport"
- >
+ <el-button type="info" icon="el-icon-download" @click="handleExport">
瀵煎嚭寮傚父鏁版嵁
</el-button>
<el-button
@@ -120,12 +116,14 @@
<el-col :span="8">
<el-card shadow="never" class="stat-card">
<div class="stat-content">
- <div class="stat-icon" style="background: #f0f9ff;">
- <i class="el-icon-s-claim" style="color: #5788FE;"></i>
+ <div class="stat-icon" style="background: #f0f9ff">
+ <i class="el-icon-s-claim" style="color: #5788fe"></i>
</div>
<div class="stat-info">
<div class="stat-title">鎬诲紓甯告暟閲�</div>
- <div class="stat-value">{{ overviewData.totalExceptionCount }}</div>
+ <div class="stat-value">
+ {{ overviewData.totalExceptionCount }}
+ </div>
</div>
</div>
</el-card>
@@ -133,8 +131,8 @@
<el-col :span="8">
<el-card shadow="never" class="stat-card">
<div class="stat-content">
- <div class="stat-icon" style="background: #f0f9ff;">
- <i class="el-icon-s-flag" style="color: #E6A23C;"></i>
+ <div class="stat-icon" style="background: #f0f9ff">
+ <i class="el-icon-s-flag" style="color: #e6a23c"></i>
</div>
<div class="stat-info">
<div class="stat-title">寰呭鐞嗗紓甯�</div>
@@ -146,8 +144,8 @@
<el-col :span="8">
<el-card shadow="never" class="stat-card">
<div class="stat-content">
- <div class="stat-icon" style="background: #f0f9ff;">
- <i class="el-icon-check" style="color: #67C23A;"></i>
+ <div class="stat-icon" style="background: #f0f9ff">
+ <i class="el-icon-check" style="color: #67c23a"></i>
</div>
<div class="stat-info">
<div class="stat-title">宸插鐞嗗紓甯�</div>
@@ -170,11 +168,7 @@
@selection-change="handleSelectionChange"
class="exception-table"
>
- <el-table-column
- type="selection"
- width="55"
- align="center"
- />
+ <el-table-column type="selection" width="55" align="center" />
<el-table-column
label="搴忓彿"
@@ -197,7 +191,7 @@
size="mini"
:type="getTemplateTypeTag(row.templateType)"
>
- {{ row.templateType === 1 ? '璇煶妯℃澘' : '闂嵎妯℃澘' }}
+ {{ row.templateType === 1 ? "璇煶妯℃澘" : "闂嵎妯℃澘" }}
</el-tag>
</div>
</div>
@@ -225,43 +219,45 @@
</template>
</el-table-column>
- <el-table-column
- label="濉啓鎯呭喌"
- width="200"
- align="center"
- >
+ <el-table-column label="濉啓鎯呭喌" width="200" align="center">
<template slot-scope="{ row }">
<div class="fill-statistics">
<div class="stat-item">
<span class="stat-label">鏈夋晥濉啓锛�</span>
- <span class="stat-value">{{ row.fillSituation.effectiveFillNum }}</span>
+ <span class="stat-value">{{
+ row.fillSituation.effectiveFillNum
+ }}</span>
</div>
<div class="stat-item">
<span class="stat-label">寮傚父濉啓锛�</span>
- <span class="stat-value exception-count">{{ row.fillSituation.exceptionFillNum }}</span>
+ <span class="stat-value exception-count">{{
+ row.fillSituation.exceptionFillNum
+ }}</span>
</div>
</div>
</template>
</el-table-column>
- <el-table-column
- label="寮傚父浠诲姟"
- width="280"
- align="center"
- >
+ <el-table-column label="寮傚父浠诲姟" width="280" align="center">
<template slot-scope="{ row }">
<div class="exception-tasks">
<div class="task-category">
<div class="task-title">宸插鐞�</div>
- <div class="task-count processed">{{ row.exceptionQuesNum.yesDeal }}</div>
+ <div class="task-count processed">
+ {{ row.exceptionQuesNum.yesDeal }}
+ </div>
</div>
<div class="task-category">
<div class="task-title">寰呭鐞�</div>
- <div class="task-count pending">{{ row.exceptionQuesNum.noDeal }}</div>
+ <div class="task-count pending">
+ {{ row.exceptionQuesNum.noDeal }}
+ </div>
</div>
<div class="task-category">
<div class="task-title">寮傚父鎬绘暟</div>
- <div class="task-count total">{{ row.exceptionQuesNum.all }}</div>
+ <div class="task-count total">
+ {{ row.exceptionQuesNum.all }}
+ </div>
</div>
</div>
</template>
@@ -275,8 +271,10 @@
>
<template slot-scope="{ row }">
<div v-if="row.handleTime" class="last-process">
- <div class="process-time">{{ formatDateTime(row.handleTime) }}</div>
- <div class="process-user">{{ row.handleBy || '绯荤粺澶勭悊' }}</div>
+ <div class="process-time">
+ {{ formatDateTime(row.handleTime) }}
+ </div>
+ <div class="process-user">{{ row.handleBy || "绯荤粺澶勭悊" }}</div>
</div>
<span v-else class="no-process">鏆傛棤澶勭悊璁板綍</span>
</template>
@@ -321,21 +319,22 @@
<script>
import { tracedeallist } from "@/api/AiCentre/index";
+import { deptTreeSelect } from "@/api/system/user";
export default {
- name: 'ExceptionList',
+ name: "ExceptionList",
data() {
return {
// 鏌ヨ鍙傛暟
queryParams: {
todeptcode: [], // 澶勭悊绉戝缂栧彿鏁扮粍
- todeptname: '', // 澶勭悊绉戝鍚嶇О
- templateid: '', // 浠诲姟妯℃澘ID
- handleStartTime: '', // 澶勭悊寮�濮嬫椂闂�
- handleEndTime: '', // 澶勭悊缁撴潫鏃堕棿
+ todeptname: "", // 澶勭悊绉戝鍚嶇О
+ templateType: 2, // 浠诲姟妯℃澘ID
+ handleStartTime: "", // 澶勭悊寮�濮嬫椂闂�
+ handleEndTime: "", // 澶勭悊缁撴潫鏃堕棿
handleTimeRange: [], // 鏃堕棿鑼冨洿锛岀敤浜庣晫闈㈠睍绀�
pageNum: 1,
- pageSize: 10
+ pageSize: 10,
},
// 鍔犺浇鐘舵��
@@ -346,27 +345,13 @@
// 妯℃澘鍒楄〃
templateList: [
- { id: 1, name: '璇煶妯℃澘' },
- { id: 2, name: '闂嵎妯℃澘' }
+ { id: 1, name: "璇煶婊℃剰搴�" },
+ { id: 2, name: "闂嵎婊℃剰搴�" },
// 浣犲彲浠ユ牴鎹疄闄呮儏鍐典粠鎺ュ彛鑾峰彇妯℃澘鍒楄〃
],
// 绉戝鍒楄〃
- deptList: [
- // 浣犲彲浠ヤ粠鎺ュ彛鑾峰彇绉戝鍒楄〃锛岃繖閲屽厛鐢ㄩ潤鎬佹暟鎹�
- { deptCode: '001', deptName: '蹇冭绠″唴绉�' },
- { deptCode: '002', deptName: '绁炵粡鍐呯' },
- { deptCode: '003', deptName: '鏅绉�' },
- { deptCode: '004', deptName: '楠ㄧ' },
- { deptCode: '005', deptName: '濡囦骇绉�' },
- { deptCode: '006', deptName: '鍎跨' },
- { deptCode: '007', deptName: '鎬ヨ瘖绉�' },
- { deptCode: '008', deptName: '鍛煎惛鍐呯' },
- { deptCode: '009', deptName: '娑堝寲鍐呯' },
- { deptCode: '010', deptName: '鍐呭垎娉岀' },
- { deptCode: '011', deptName: '鑲惧唴绉�' },
- { deptCode: '012', deptName: '鑲跨槫绉�' }
- ],
+ deptList: [],
// 寮傚父鍒楄〃鏁版嵁
exceptionList: [],
@@ -377,100 +362,134 @@
totalExceptionCount: 0,
pendingCount: 0,
processedCount: 0,
- todayProcessedCount: 0
+ todayProcessedCount: 0,
},
// 鏃ユ湡閫夋嫨鍣ㄩ�夐」
pickerOptions: {
shortcuts: [
{
- text: '鏈�杩戜竴鍛�',
+ text: "鏈�杩戜竴鍛�",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
- picker.$emit('pick', [start, end]);
- }
+ picker.$emit("pick", [start, end]);
+ },
},
{
- text: '鏈�杩戜竴涓湀',
+ text: "鏈�杩戜竴涓湀",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
- picker.$emit('pick', [start, end]);
- }
+ picker.$emit("pick", [start, end]);
+ },
},
{
- text: '鏈�杩戜笁涓湀',
+ text: "鏈�杩戜笁涓湀",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
- picker.$emit('pick', [start, end]);
- }
- }
+ picker.$emit("pick", [start, end]);
+ },
+ },
],
disabledDate(time) {
return time.getTime() > Date.now();
- }
- }
+ },
+ },
};
},
mounted() {
this.loadData();
+ this.getDeptOptions();
},
methods: {
// 鏍煎紡鍖栨棩鏈熸椂闂�
formatDateTime(dateTime) {
- if (!dateTime) return '';
+ if (!dateTime) return "";
const date = new Date(dateTime);
- return date.toLocaleDateString().replace(/\//g, '-') + ' ' +
- date.toTimeString().split(' ')[0];
+ return (
+ date.toLocaleDateString().replace(/\//g, "-") +
+ " " +
+ date.toTimeString().split(" ")[0]
+ );
},
// 鑾峰彇妯℃澘绫诲瀷鏍囩鏍峰紡
getTemplateTypeTag(type) {
- return type === 1 ? 'primary' : 'success';
+ return type === 1 ? "primary" : "success";
},
// 鏋勫缓鏌ヨ鍙傛暟
buildQueryParams() {
const params = {
pageNum: this.queryParams.pageNum,
- pageSize: this.queryParams.pageSize
+ pageSize: this.queryParams.pageSize,
};
// 澶勭悊绉戝缂栧彿
- if (this.queryParams.todeptcode && this.queryParams.todeptcode.length > 0) {
+ if (
+ this.queryParams.todeptcode &&
+ this.queryParams.todeptcode.length > 0
+ ) {
// 鎺ュ彛鍙兘闇�瑕佸瓧绗︿覆鏍煎紡鐨勭瀹ょ紪鍙凤紝鏍规嵁瀹為檯鎯呭喌璋冩暣
- params.todeptcode = this.queryParams.todeptcode.join(',');
+ params.todeptcode = this.queryParams.todeptcode.join(",");
}
// 妯℃澘ID
- if (this.queryParams.templateid) {
- params.templateid = this.queryParams.templateid;
+ if (this.queryParams.templateType) {
+ params.templateType = this.queryParams.templateType;
}
// 澶勭悊鏃堕棿鑼冨洿
- if (this.queryParams.handleTimeRange && this.queryParams.handleTimeRange.length === 2) {
+ if (
+ this.queryParams.handleTimeRange &&
+ this.queryParams.handleTimeRange.length === 2
+ ) {
params.handleStartTime = this.queryParams.handleTimeRange[0];
params.handleEndTime = this.queryParams.handleTimeRange[1];
}
return params;
},
+ /** 鏌ヨ绉戝鍒楄〃 */
+ getDeptOptions() {
+ deptTreeSelect()
+ .then((res) => {
+ if (res.code == 200) {
+ this.deptList = this.flattenArray(res.data) || [];
+ }
+ })
+ .catch((error) => {
+ console.error("鑾峰彇绉戝鍒楄〃澶辫触:", error);
+ this.$message.error("鑾峰彇绉戝鍒楄〃澶辫触");
+ });
+ },
+ flattenArray(multiArray) {
+ let result = [];
+ function flatten(element) {
+ if (element.children && element.children.length > 0) {
+ element.children.forEach((child) => flatten(child));
+ } else {
+ let item = JSON.parse(JSON.stringify(element));
+ result.push(item);
+ }
+ }
+
+ multiArray.forEach((element) => flatten(element));
+ return result;
+ },
// 鍔犺浇鏁版嵁
async loadData() {
this.loading = true;
try {
- await Promise.all([
- this.loadExceptionList(),
- this.loadOverviewData()
- ]);
+ await Promise.all([this.loadExceptionList(), this.loadOverviewData()]);
} finally {
this.loading = false;
}
@@ -482,19 +501,19 @@
const params = this.buildQueryParams();
const response = await tracedeallist(params);
- if (response.code==200) {
+ if (response.code == 200) {
this.exceptionList = response.rows.detailTraceDealDTOList || [];
- this.overviewData.totalExceptionCount=response.rows.totalException
- this.overviewData.pendingCount=response.rows.noDealException
- this.overviewData.processedCount=response.rows.yesDealException
+ this.overviewData.totalExceptionCount = response.rows.totalException;
+ this.overviewData.pendingCount = response.rows.noDealException;
+ this.overviewData.processedCount = response.rows.yesDealException;
this.total = response.total || 0;
} else {
this.exceptionList = [];
this.total = 0;
}
} catch (error) {
- console.error('鍔犺浇寮傚父鍒楄〃澶辫触:', error);
- this.$message.error('鍔犺浇寮傚父鍒楄〃澶辫触锛岃绋嶅悗閲嶈瘯');
+ console.error("鍔犺浇寮傚父鍒楄〃澶辫触:", error);
+ this.$message.error("鍔犺浇寮傚父鍒楄〃澶辫触锛岃绋嶅悗閲嶈瘯");
this.exceptionList = [];
this.total = 0;
}
@@ -504,18 +523,26 @@
async loadOverviewData() {
try {
// 浠庢帴鍙f暟鎹绠楃粺璁℃暟鎹�
- const totalExceptionCount = this.exceptionList.reduce((sum, item) =>
- sum + (item.exceptionQuesNum?.all || 0), 0);
- const pendingCount = this.exceptionList.reduce((sum, item) =>
- sum + (item.exceptionQuesNum?.noDeal || 0), 0);
- const processedCount = this.exceptionList.reduce((sum, item) =>
- sum + (item.exceptionQuesNum?.yesDeal || 0), 0);
+ const totalExceptionCount = this.exceptionList.reduce(
+ (sum, item) => sum + (item.exceptionQuesNum?.all || 0),
+ 0
+ );
+ const pendingCount = this.exceptionList.reduce(
+ (sum, item) => sum + (item.exceptionQuesNum?.noDeal || 0),
+ 0
+ );
+ const processedCount = this.exceptionList.reduce(
+ (sum, item) => sum + (item.exceptionQuesNum?.yesDeal || 0),
+ 0
+ );
// 璁$畻浠婃棩澶勭悊鏁帮紙杩欓噷鍙互鏍规嵁瀹為檯闇�姹傝皟鏁撮�昏緫锛�
- const today = new Date().toISOString().split('T')[0];
- const todayProcessedCount = this.exceptionList.filter(item => {
+ const today = new Date().toISOString().split("T")[0];
+ const todayProcessedCount = this.exceptionList.filter((item) => {
if (!item.handleTime) return false;
- const handleDate = new Date(item.handleTime).toISOString().split('T')[0];
+ const handleDate = new Date(item.handleTime)
+ .toISOString()
+ .split("T")[0];
return handleDate === today;
}).length;
@@ -523,15 +550,15 @@
totalExceptionCount,
pendingCount,
processedCount,
- todayProcessedCount
+ todayProcessedCount,
};
} catch (error) {
- console.error('鍔犺浇姒傝鏁版嵁澶辫触:', error);
+ console.error("鍔犺浇姒傝鏁版嵁澶辫触:", error);
this.overviewData = {
totalExceptionCount: 0,
pendingCount: 0,
processedCount: 0,
- todayProcessedCount: 0
+ todayProcessedCount: 0,
};
}
},
@@ -554,43 +581,44 @@
// 澶勭悊鎵归噺澶勭悊
handleBatchProcess() {
if (this.selectedIds.length === 0) {
- this.$message.warning('璇峰厛閫夋嫨瑕佸鐞嗙殑寮傚父棰樼洰');
+ this.$message.warning("璇峰厛閫夋嫨瑕佸鐞嗙殑寮傚父棰樼洰");
return;
}
// 璺宠浆鍒版壒閲忓鐞嗛〉闈�
this.$router.push({
- path: '/Intelligentcenter/batch',
+ path: "/Intelligentcenter/batch",
query: {
- questionIds: this.selectedIds.join(',')
- }
+ questionIds: this.selectedIds.join(","),
+ type: this.queryParams.templateType,
+ },
});
},
// 澶勭悊瀵煎嚭
handleExport() {
- this.$message.success('瀵煎嚭鍔熻兘寮�鍙戜腑...');
+ this.$message.success("瀵煎嚭鍔熻兘寮�鍙戜腑...");
},
// 鍒锋柊鏁版嵁
refreshData() {
this.loadData();
- this.$message.success('鏁版嵁宸插埛鏂�');
+ this.$message.success("鏁版嵁宸插埛鏂�");
},
// 澶勭悊閫夋嫨鍙樺寲
handleSelectionChange(selection) {
- this.selectedIds = selection.map(item => item.scriptid);
+ this.selectedIds = selection.map((item) => item.scriptid);
},
// 澶勭悊鍗曚釜棰樼洰鎵归噺澶勭悊
handleBatchQuestion(row) {
this.$router.push({
- path: '/Intelligentcenter/batch',
+ path: "/Intelligentcenter/batch",
query: {
questionId: row.scriptid,
- questionText: encodeURIComponent(row.questiontext)
- }
+ type: this.queryParams.templateType,
+ },
});
},
@@ -605,8 +633,8 @@
handlePageChange(page) {
this.queryParams.pageNum = page;
this.loadExceptionList();
- }
- }
+ },
+ },
};
</script>
@@ -619,7 +647,7 @@
.page-header {
margin-bottom: 20px;
padding: 20px;
- background: linear-gradient(135deg, #5788FE 0%, #66b1ff 100%);
+ background: linear-gradient(135deg, #5788fe 0%, #66b1ff 100%);
border-radius: 8px;
color: white;
@@ -803,7 +831,7 @@
}
&.total {
- color: #5788FE;
+ color: #5788fe;
}
}
}
@@ -818,7 +846,7 @@
.process-user {
font-size: 13px;
- color: #5788FE;
+ color: #5788fe;
font-weight: 500;
}
}
--
Gitblit v1.9.3