From 01d3b0dd65574a8b6ff6ff66b0474f2de82daa6a Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期二, 31 三月 2026 10:34:49 +0800
Subject: [PATCH] 测试完成
---
src/views/Satisfaction/sfstatistics/components/SatisfactionStatistics.vue | 4
vue.config.js | 4
src/views/followvisit/record/detailpage/index.vue | 14
src/views/Satisfaction/configurationmyd/batch.vue | 337 ++++++++-------
src/views/followvisit/satisfaction/index.vue | 23
src/views/Satisfaction/configurationmyd/components/DetailsAnomaly.vue | 923 +++++++++++++++++++++++++++++++++++++++++
6 files changed, 1,139 insertions(+), 166 deletions(-)
diff --git a/src/views/Satisfaction/configurationmyd/batch.vue b/src/views/Satisfaction/configurationmyd/batch.vue
index 41c2d0d..10d6619 100644
--- a/src/views/Satisfaction/configurationmyd/batch.vue
+++ b/src/views/Satisfaction/configurationmyd/batch.vue
@@ -14,11 +14,7 @@
>
鎵归噺鎻愪氦澶勭悊
</el-button>
- <el-button
- type="warning"
- icon="el-icon-back"
- @click="handleGoBack"
- >
+ <el-button type="warning" icon="el-icon-back" @click="handleGoBack">
杩斿洖寮傚父鍒楄〃
</el-button>
</div>
@@ -70,10 +66,7 @@
>
绛涢��
</el-button>
- <el-button
- icon="el-icon-refresh"
- @click="handleResetFilter"
- >
+ <el-button icon="el-icon-refresh" @click="handleResetFilter">
閲嶇疆
</el-button>
</el-form-item>
@@ -88,11 +81,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="搴忓彿"
@@ -125,11 +114,7 @@
</template>
</el-table-column>
- <el-table-column
- label="鎮h�呬俊鎭�"
- width="300"
- align="center"
- >
+ <el-table-column label="鎮h�呬俊鎭�" width="300" align="center">
<template slot-scope="{ row }">
<div class="patient-info">
<div class="patient-item">
@@ -138,7 +123,9 @@
</div>
<div class="patient-item">
<span class="label">鎬у埆锛�</span>
- <span class="value">{{ row.gender === 1 ? '鐢�' : '濂�' }}</span>
+ <span class="value">{{
+ row.gender === 1 ? "鐢�" : "濂�"
+ }}</span>
</div>
<div class="patient-item">
<span class="label">骞撮緞锛�</span>
@@ -152,11 +139,7 @@
</template>
</el-table-column>
- <el-table-column
- label="鍑洪櫌淇℃伅"
- width="250"
- align="center"
- >
+ <el-table-column label="鍑洪櫌淇℃伅" width="250" align="center">
<template slot-scope="{ row }">
<div class="discharge-info">
<div class="info-item">
@@ -182,10 +165,7 @@
align="center"
>
<template slot-scope="{ row }">
- <el-tag
- :type="getStatusTagType(row.processStatus)"
- effect="dark"
- >
+ <el-tag :type="getStatusTagType(row.processStatus)" effect="dark">
{{ getStatusText(row.processStatus) }}
</el-tag>
</template>
@@ -193,7 +173,7 @@
<el-table-column
label="鎿嶄綔"
- width="180"
+ width="210"
align="center"
fixed="right"
>
@@ -302,17 +282,15 @@
:file-list="fileList"
>
<el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button>
- <div slot="tip" class="el-upload__tip">鏀寔涓婁紶鍥剧墖銆佹枃妗g瓑闄勪欢锛屽崟涓枃浠朵笉瓒呰繃10MB</div>
+ <div slot="tip" class="el-upload__tip">
+ 鏀寔涓婁紶鍥剧墖銆佹枃妗g瓑闄勪欢锛屽崟涓枃浠朵笉瓒呰繃10MB
+ </div>
</el-upload>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="processDialogVisible = false">鍙栨秷</el-button>
- <el-button
- type="primary"
- @click="submitProcess"
- :loading="processing"
- >
+ <el-button type="primary" @click="submitProcess" :loading="processing">
鎻愪氦澶勭悊
</el-button>
</span>
@@ -384,14 +362,31 @@
</el-button>
</span>
</el-dialog>
+ <!-- 寮傚父璇︽儏寮规 -->
+ <Details-anomaly
+ :visible="detailDialogVisible"
+ :record-id="selectedRecordId"
+ :title="detailDialogTitle"
+ @update:visible="handleDetailDialogClose"
+ @processed="handleProcessed"
+ @close="handleDetailDialogClose"
+ />
</div>
</template>
<script>
+import DetailsAnomaly from "./components/DetailsAnomaly.vue";
export default {
- name: 'BatchProcess',
+ name: "BatchProcess",
+ components: {
+ DetailsAnomaly,
+ },
data() {
return {
+ // 娣诲姞浠ヤ笅鏁版嵁
+ detailDialogVisible: false,
+ selectedRecordId: null,
+ detailDialogTitle: "寮傚父鍙嶉璇︽儏",
// 褰撳墠澶勭悊鐨勫紓甯窱D
currentExceptionId: null,
@@ -400,10 +395,10 @@
// 杩囨护鍙傛暟
filterParams: {
- deptId: '',
- status: '',
+ deptId: "",
+ status: "",
pageNum: 1,
- pageSize: 10
+ pageSize: 10,
},
// 鍔犺浇鐘舵��
@@ -413,16 +408,16 @@
// 绉戝鍒楄〃
deptList: [
- { id: 1, name: '蹇冭绠″唴绉�' },
- { id: 2, name: '绁炵粡鍐呯' },
- { id: 3, name: '鏅绉�' },
- { id: 4, name: '楠ㄧ' },
- { id: 5, name: '濡囦骇绉�' },
- { id: 6, name: '鍎跨' },
- { id: 7, name: '鎬ヨ瘖绉�' },
- { id: 8, name: '鍛煎惛鍐呯' },
- { id: 9, name: '娑堝寲鍐呯' },
- { id: 10, name: '鍐呭垎娉岀' }
+ { id: 1, name: "蹇冭绠″唴绉�" },
+ { id: 2, name: "绁炵粡鍐呯" },
+ { id: 3, name: "鏅绉�" },
+ { id: 4, name: "楠ㄧ" },
+ { id: 5, name: "濡囦骇绉�" },
+ { id: 6, name: "鍎跨" },
+ { id: 7, name: "鎬ヨ瘖绉�" },
+ { id: 8, name: "鍛煎惛鍐呯" },
+ { id: 9, name: "娑堝寲鍐呯" },
+ { id: 10, name: "鍐呭垎娉岀" },
],
// 寮傚父鍒楄〃鏁版嵁
@@ -432,28 +427,33 @@
// 澶勭悊瀵硅瘽妗�
processDialogVisible: false,
processForm: {
- status: '',
+ status: "",
reportDepts: [],
- remark: ''
+ remark: "",
},
processRules: {
status: [
- { required: true, message: '璇烽�夋嫨澶勭悊鐘舵��', trigger: 'change' }
+ { required: true, message: "璇烽�夋嫨澶勭悊鐘舵��", trigger: "change" },
],
remark: [
- { required: true, message: '璇疯緭鍏ュ鐞嗗娉�', trigger: 'blur' },
- { min: 5, max: 500, message: '澶囨敞闀垮害鍦� 5 鍒� 500 涓瓧绗�', trigger: 'blur' }
- ]
+ { required: true, message: "璇疯緭鍏ュ鐞嗗娉�", trigger: "blur" },
+ {
+ min: 5,
+ max: 500,
+ message: "澶囨敞闀垮害鍦� 5 鍒� 500 涓瓧绗�",
+ trigger: "blur",
+ },
+ ],
},
fileList: [],
// 鎵归噺澶勭悊瀵硅瘽妗�
batchDialogVisible: false,
batchProcessForm: {
- status: '',
+ status: "",
reportDepts: [],
- remark: ''
- }
+ remark: "",
+ },
};
},
@@ -467,121 +467,125 @@
this.loading = true;
try {
// Mock 鏁版嵁
- await new Promise(resolve => {
+ await new Promise((resolve) => {
setTimeout(() => {
this.exceptionList = [
{
id: 1,
- responsibilityDept: '蹇冭绠″唴绉�',
- unsatisfactoryDetail: '鍖荤敓鏌ユ埧鏃堕棿澶煭锛屾矡閫氫笉澶熷厖鍒嗭紝瀵圭梾鎯呰В閲婁笉澶熻缁�',
- patientName: '寮犲厛鐢�',
+ responsibilityDept: "蹇冭绠″唴绉�",
+ unsatisfactoryDetail:
+ "鍖荤敓鏌ユ埧鏃堕棿澶煭锛屾矡閫氫笉澶熷厖鍒嗭紝瀵圭梾鎯呰В閲婁笉澶熻缁�",
+ patientName: "寮犲厛鐢�",
gender: 1,
age: 45,
- phone: '138****1234',
- dischargeDept: '蹇冭绠″唴绉�',
- dischargeWard: '鍐呯涓�鐥呭尯',
- fillTime: '2024-01-15 10:30:25',
+ phone: "138****1234",
+ dischargeDept: "蹇冭绠″唴绉�",
+ dischargeWard: "鍐呯涓�鐥呭尯",
+ fillTime: "2024-01-15 10:30:25",
processStatus: 0,
- questionnaireId: 1001
+ questionnaireId: 1001,
},
{
id: 2,
- responsibilityDept: '绁炵粡鍐呯',
- unsatisfactoryDetail: '鎶ゅ+鎵撻拡鎶�鏈笉浣筹紝鎵庝簡涓夋鎵嶆垚鍔燂紝涓旀�佸害涓嶅鑰愬績',
- patientName: '鏉庡コ澹�',
+ responsibilityDept: "绁炵粡鍐呯",
+ unsatisfactoryDetail:
+ "鎶ゅ+鎵撻拡鎶�鏈笉浣筹紝鎵庝簡涓夋鎵嶆垚鍔燂紝涓旀�佸害涓嶅鑰愬績",
+ patientName: "鏉庡コ澹�",
gender: 0,
age: 38,
- phone: '139****5678',
- dischargeDept: '绁炵粡鍐呯',
- dischargeWard: '鍐呯浜岀梾鍖�',
- fillTime: '2024-01-14 16:20:10',
+ phone: "139****5678",
+ dischargeDept: "绁炵粡鍐呯",
+ dischargeWard: "鍐呯浜岀梾鍖�",
+ fillTime: "2024-01-14 16:20:10",
processStatus: 0,
- questionnaireId: 1002
+ questionnaireId: 1002,
},
{
id: 3,
- responsibilityDept: '鏅绉�',
- unsatisfactoryDetail: '鏈悗鎹㈣嵂涓嶅強鏃讹紝浼ゅ彛鐤肩棝鏃舵病鏈夊強鏃跺鐞�',
- patientName: '鐜嬪厛鐢�',
+ responsibilityDept: "鏅绉�",
+ unsatisfactoryDetail: "鏈悗鎹㈣嵂涓嶅強鏃讹紝浼ゅ彛鐤肩棝鏃舵病鏈夊強鏃跺鐞�",
+ patientName: "鐜嬪厛鐢�",
gender: 1,
age: 52,
- phone: '137****9012',
- dischargeDept: '鏅绉�',
- dischargeWard: '澶栫涓�鐥呭尯',
- fillTime: '2024-01-13 09:15:45',
+ phone: "137****9012",
+ dischargeDept: "鏅绉�",
+ dischargeWard: "澶栫涓�鐥呭尯",
+ fillTime: "2024-01-13 09:15:45",
processStatus: 1,
- questionnaireId: 1003
+ questionnaireId: 1003,
},
{
id: 4,
- responsibilityDept: '楠ㄧ',
- unsatisfactoryDetail: '搴峰鎸囧涓嶅涓撲笟锛屽鎭㈠杩囩▼鎻忚堪涓嶆竻妤�',
- patientName: '鍒樺コ澹�',
+ responsibilityDept: "楠ㄧ",
+ unsatisfactoryDetail: "搴峰鎸囧涓嶅涓撲笟锛屽鎭㈠杩囩▼鎻忚堪涓嶆竻妤�",
+ patientName: "鍒樺コ澹�",
gender: 0,
age: 65,
- phone: '136****3456',
- dischargeDept: '楠ㄧ',
- dischargeWard: '澶栫浜岀梾鍖�',
- fillTime: '2024-01-12 14:40:30',
+ phone: "136****3456",
+ dischargeDept: "楠ㄧ",
+ dischargeWard: "澶栫浜岀梾鍖�",
+ fillTime: "2024-01-12 14:40:30",
processStatus: 0,
- questionnaireId: 1004
+ questionnaireId: 1004,
},
{
id: 5,
- responsibilityDept: '濡囦骇绉�',
- unsatisfactoryDetail: '浜у墠妫�鏌ユ帓闃熸椂闂磋繃闀匡紝绛夊緟鏈熼棿娌℃湁浼戞伅搴т綅',
- patientName: '闄堝コ澹�',
+ responsibilityDept: "濡囦骇绉�",
+ unsatisfactoryDetail:
+ "浜у墠妫�鏌ユ帓闃熸椂闂磋繃闀匡紝绛夊緟鏈熼棿娌℃湁浼戞伅搴т綅",
+ patientName: "闄堝コ澹�",
gender: 0,
age: 28,
- phone: '135****7890',
- dischargeDept: '濡囦骇绉�',
- dischargeWard: '濡囦骇绉戠梾鍖�',
- fillTime: '2024-01-11 11:25:15',
+ phone: "135****7890",
+ dischargeDept: "濡囦骇绉�",
+ dischargeWard: "濡囦骇绉戠梾鍖�",
+ fillTime: "2024-01-11 11:25:15",
processStatus: 2,
- questionnaireId: 1005
+ questionnaireId: 1005,
},
{
id: 6,
- responsibilityDept: '鍎跨',
- unsatisfactoryDetail: '鍎跨鐢ㄨ嵂鍓傞噺浜や唬涓嶆竻鏅帮紝鐢ㄨ嵂娉ㄦ剰浜嬮」娌℃湁璇存槑',
- patientName: '璧靛疂瀹�',
+ responsibilityDept: "鍎跨",
+ unsatisfactoryDetail:
+ "鍎跨鐢ㄨ嵂鍓傞噺浜や唬涓嶆竻鏅帮紝鐢ㄨ嵂娉ㄦ剰浜嬮」娌℃湁璇存槑",
+ patientName: "璧靛疂瀹�",
gender: 1,
age: 5,
- phone: '134****1234',
- dischargeDept: '鍎跨',
- dischargeWard: '鍎跨鐥呭尯',
- fillTime: '2024-01-10 15:50:20',
+ phone: "134****1234",
+ dischargeDept: "鍎跨",
+ dischargeWard: "鍎跨鐥呭尯",
+ fillTime: "2024-01-10 15:50:20",
processStatus: 0,
- questionnaireId: 1006
+ questionnaireId: 1006,
},
{
id: 7,
- responsibilityDept: '鎬ヨ瘖绉�',
- unsatisfactoryDetail: '鎬ヨ瘖绛夊緟鏃堕棿杩囬暱锛岀梾鎯呮病鏈夊緱鍒板強鏃惰瘎浼�',
- patientName: '瀛欏厛鐢�',
+ responsibilityDept: "鎬ヨ瘖绉�",
+ unsatisfactoryDetail: "鎬ヨ瘖绛夊緟鏃堕棿杩囬暱锛岀梾鎯呮病鏈夊緱鍒板強鏃惰瘎浼�",
+ patientName: "瀛欏厛鐢�",
gender: 1,
age: 40,
- phone: '133****5678',
- dischargeDept: '鎬ヨ瘖绉�',
- dischargeWard: '鎬ヨ瘖鐥呭尯',
- fillTime: '2024-01-09 10:15:40',
+ phone: "133****5678",
+ dischargeDept: "鎬ヨ瘖绉�",
+ dischargeWard: "鎬ヨ瘖鐥呭尯",
+ fillTime: "2024-01-09 10:15:40",
processStatus: 0,
- questionnaireId: 1007
+ questionnaireId: 1007,
},
{
id: 8,
- responsibilityDept: '鍛煎惛鍐呯',
- unsatisfactoryDetail: '鍖荤敓寮�鑽緝澶氾紝璐圭敤杈冮珮锛屾病鏈夎鏄庡繀瑕佹��',
- patientName: '鍛ㄥコ澹�',
+ responsibilityDept: "鍛煎惛鍐呯",
+ unsatisfactoryDetail: "鍖荤敓寮�鑽緝澶氾紝璐圭敤杈冮珮锛屾病鏈夎鏄庡繀瑕佹��",
+ patientName: "鍛ㄥコ澹�",
gender: 0,
age: 55,
- phone: '132****9012',
- dischargeDept: '鍛煎惛鍐呯',
- dischargeWard: '鍐呯涓�鐥呭尯',
- fillTime: '2024-01-08 13:30:55',
+ phone: "132****9012",
+ dischargeDept: "鍛煎惛鍐呯",
+ dischargeWard: "鍐呯涓�鐥呭尯",
+ fillTime: "2024-01-08 13:30:55",
processStatus: 1,
- questionnaireId: 1008
- }
+ questionnaireId: 1008,
+ },
];
this.total = this.exceptionList.length;
resolve();
@@ -595,20 +599,28 @@
// 鑾峰彇鐘舵�佹爣绛剧被鍨�
getStatusTagType(status) {
switch (status) {
- case 0: return 'warning'; // 寰呭鐞�
- case 1: return 'primary'; // 澶勭悊涓�
- case 2: return 'success'; // 宸插鐞�
- default: return 'info';
+ case 0:
+ return "warning"; // 寰呭鐞�
+ case 1:
+ return "primary"; // 澶勭悊涓�
+ case 2:
+ return "success"; // 宸插鐞�
+ default:
+ return "info";
}
},
// 鑾峰彇鐘舵�佹枃鏈�
getStatusText(status) {
switch (status) {
- case 0: return '寰呭鐞�';
- case 1: return '澶勭悊涓�';
- case 2: return '宸插鐞�';
- default: return '鏈煡';
+ case 0:
+ return "寰呭鐞�";
+ case 1:
+ return "澶勭悊涓�";
+ case 2:
+ return "宸插鐞�";
+ default:
+ return "鏈煡";
}
},
@@ -621,23 +633,23 @@
// 閲嶇疆绛涢��
handleResetFilter() {
this.filterParams = {
- deptId: '',
- status: '',
+ deptId: "",
+ status: "",
pageNum: 1,
- pageSize: 10
+ pageSize: 10,
};
this.loadExceptionList();
},
// 澶勭悊閫夋嫨鍙樺寲
handleSelectionChange(selection) {
- this.selectedExceptionIds = selection.map(item => item.id);
+ this.selectedExceptionIds = selection.map((item) => item.id);
},
// 澶勭悊鎵归噺鎻愪氦
handleBatchSubmit() {
if (this.selectedExceptionIds.length === 0) {
- this.$message.warning('璇峰厛閫夋嫨瑕佸鐞嗙殑寮傚父鍙嶉');
+ this.$message.warning("璇峰厛閫夋嫨瑕佸鐞嗙殑寮傚父鍙嶉");
return;
}
this.batchDialogVisible = true;
@@ -645,26 +657,31 @@
// 杩斿洖寮傚父鍒楄〃
handleGoBack() {
- this.$router.push('/satisfaction/exception/list');
+ this.$router.push("/satisfaction/exception/list");
},
// 鏌ョ湅璇︽儏
handleViewDetail(row) {
- this.$router.push({
- path: '/satisfaction/exception/detail',
- query: {
- id: row.questionnaireId
- }
- });
+ this.selectedRecordId = row.id;
+ this.detailDialogTitle = `${row.patientName} - 寮傚父鍙嶉璇︽儏`;
+ this.detailDialogVisible = true;
},
-
+ // 澶勭悊璇︽儏寮规鍏抽棴
+ handleDetailDialogClose() {
+ this.detailDialogVisible = false;
+ this.selectedRecordId = null;
+ }, // 澶勭悊瀹屾垚鍚庣殑鍥炶皟
+ handleProcessed() {
+ // 閲嶆柊鍔犺浇鏁版嵁
+ this.loadExceptionList();
+ },
// 澶勭悊鍗曚釜寮傚父
handleProcess(row) {
this.currentExceptionId = row.id;
this.processForm = {
status: row.processStatus === 0 ? 1 : row.processStatus,
reportDepts: [],
- remark: ''
+ remark: "",
};
this.processDialogVisible = true;
},
@@ -676,9 +693,9 @@
this.processing = true;
try {
// Mock API璋冪敤
- await new Promise(resolve => setTimeout(resolve, 1000));
+ await new Promise((resolve) => setTimeout(resolve, 1000));
- this.$message.success('澶勭悊鎻愪氦鎴愬姛');
+ this.$message.success("澶勭悊鎻愪氦鎴愬姛");
this.processDialogVisible = false;
this.loadExceptionList();
} finally {
@@ -695,9 +712,11 @@
this.batchProcessing = true;
try {
// Mock API璋冪敤
- await new Promise(resolve => setTimeout(resolve, 1500));
+ await new Promise((resolve) => setTimeout(resolve, 1500));
- this.$message.success(`宸叉壒閲忓鐞� ${this.selectedExceptionIds.length} 鏉″紓甯稿弽棣坄);
+ this.$message.success(
+ `宸叉壒閲忓鐞� ${this.selectedExceptionIds.length} 鏉″紓甯稿弽棣坄
+ );
this.batchDialogVisible = false;
this.selectedExceptionIds = [];
this.loadExceptionList();
@@ -723,11 +742,11 @@
// 鏂囦欢涓婁紶鐩稿叧鏂规硶
handlePreview(file) {
- console.log('棰勮鏂囦欢:', file);
+ console.log("棰勮鏂囦欢:", file);
},
handleRemove(file, fileList) {
- console.log('绉婚櫎鏂囦欢:', file, fileList);
+ console.log("绉婚櫎鏂囦欢:", file, fileList);
},
beforeRemove(file) {
@@ -735,9 +754,13 @@
},
handleExceed(files, fileList) {
- this.$message.warning(`褰撳墠闄愬埗閫夋嫨 3 涓枃浠讹紝鏈閫夋嫨浜� ${files.length} 涓枃浠讹紝鍏遍�夋嫨浜� ${files.length + fileList.length} 涓枃浠禶);
- }
- }
+ this.$message.warning(
+ `褰撳墠闄愬埗閫夋嫨 3 涓枃浠讹紝鏈閫夋嫨浜� ${files.length} 涓枃浠讹紝鍏遍�夋嫨浜� ${
+ files.length + fileList.length
+ } 涓枃浠禶
+ );
+ },
+ },
};
</script>
@@ -750,7 +773,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;
diff --git a/src/views/Satisfaction/configurationmyd/components/DetailsAnomaly.vue b/src/views/Satisfaction/configurationmyd/components/DetailsAnomaly.vue
index e69de29..57b4dff 100644
--- a/src/views/Satisfaction/configurationmyd/components/DetailsAnomaly.vue
+++ b/src/views/Satisfaction/configurationmyd/components/DetailsAnomaly.vue
@@ -0,0 +1,923 @@
+<template>
+ <el-dialog
+ :title="title"
+ :visible.sync="dialogVisible"
+ width="900px"
+ top="5vh"
+ class="exception-detail-dialog"
+ @close="handleClose"
+ >
+ <!-- 鍩烘湰淇℃伅 -->
+ <div class="info-section">
+ <div class="section-title">鍩烘湰淇℃伅</div>
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <div class="info-item">
+ <span class="label">鎮h�呭鍚嶏細</span>
+ <span class="value">{{ currentRecord.patientName }}</span>
+ </div>
+ </el-col>
+ <el-col :span="8">
+ <div class="info-item">
+ <span class="label">鎬у埆锛�</span>
+ <span class="value">{{ currentRecord.gender === 1 ? '鐢�' : '濂�' }}</span>
+ </div>
+ </el-col>
+ <el-col :span="8">
+ <div class="info-item">
+ <span class="label">骞撮緞锛�</span>
+ <span class="value">{{ currentRecord.age }}宀�</span>
+ </div>
+ </el-col>
+ <el-col :span="8">
+ <div class="info-item">
+ <span class="label">鑱旂郴鏂瑰紡锛�</span>
+ <span class="value">{{ currentRecord.phone }}</span>
+ </div>
+ </el-col>
+ <el-col :span="8">
+ <div class="info-item">
+ <span class="label">鍑洪櫌绉戝锛�</span>
+ <span class="value">{{ currentRecord.dischargeDept }}</span>
+ </div>
+ </el-col>
+ <el-col :span="8">
+ <div class="info-item">
+ <span class="label">鍑洪櫌鐥呭尯锛�</span>
+ <span class="value">{{ currentRecord.dischargeWard }}</span>
+ </div>
+ </el-col>
+ <el-col :span="8">
+ <div class="info-item">
+ <span class="label">濉啓鏃堕棿锛�</span>
+ <span class="value">{{ currentRecord.fillTime }}</span>
+ </div>
+ </el-col>
+ <el-col :span="8">
+ <div class="info-item">
+ <span class="label">璐熻矗绉戝锛�</span>
+ <el-tag type="primary">{{ currentRecord.responsibilityDept }}</el-tag>
+ </div>
+ </el-col>
+ <el-col :span="8">
+ <div class="info-item">
+ <span class="label">澶勭悊鐘舵�侊細</span>
+ <el-tag
+ :type="getStatusTagType(currentRecord.processStatus)"
+ effect="dark"
+ >
+ {{ getStatusText(currentRecord.processStatus) }}
+ </el-tag>
+ </div>
+ </el-col>
+ </el-row>
+ </div>
+
+ <!-- 闂嵎璇︽儏 -->
+ <div class="questionnaire-section">
+ <div class="section-title">闂嵎濉啓璇︽儏</div>
+ <div class="questionnaire-content">
+ <div class="question-item" v-for="(question, index) in questionnaireData" :key="index">
+ <div class="question-header">
+ <span class="question-index">{{ index + 1 }}.</span>
+ <span class="question-text">{{ question.question }}</span>
+ <el-tag
+ size="mini"
+ :type="question.type === 1 ? 'primary' : 'success'"
+ class="question-type"
+ >
+ {{ question.type === 1 ? '鍗曢�夐' : '澶氶�夐' }}
+ </el-tag>
+ </div>
+ <div class="question-options">
+ <el-radio-group
+ v-model="question.answer"
+ v-if="question.type === 1"
+ disabled
+ >
+ <el-radio
+ v-for="option in question.options"
+ :key="option.value"
+ :label="option.value"
+ :class="{ 'unsatisfactory-option': isUnsatisfactoryOption(option.value) }"
+ >
+ {{ option.text }}
+ </el-radio>
+ </el-radio-group>
+ <el-checkbox-group
+ v-model="question.answer"
+ v-else
+ disabled
+ >
+ <el-checkbox
+ v-for="option in question.options"
+ :key="option.value"
+ :label="option.value"
+ :class="{ 'unsatisfactory-option': isUnsatisfactoryOption(option.value) }"
+ >
+ {{ option.text }}
+ </el-checkbox>
+ </el-checkbox-group>
+ </div>
+ <div v-if="question.additional" class="additional-remark">
+ <div class="remark-label">琛ュ厖璇存槑锛�</div>
+ <div class="remark-content">{{ question.additional }}</div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <!-- 澶勭悊璁板綍 -->
+ <div class="process-section">
+ <div class="section-title">澶勭悊璁板綍</div>
+ <div class="process-timeline" v-if="processRecords.length > 0">
+ <el-timeline>
+ <el-timeline-item
+ v-for="(record, index) in processRecords"
+ :key="index"
+ :timestamp="record.time"
+ placement="top"
+ >
+ <el-card>
+ <div class="process-item">
+ <div class="process-header">
+ <span class="process-user">{{ record.user }}</span>
+ <el-tag
+ size="small"
+ :type="getStatusTagType(record.status)"
+ >
+ {{ getStatusText(record.status) }}
+ </el-tag>
+ </div>
+ <div class="process-content">
+ <div v-if="record.reportDepts && record.reportDepts.length > 0" class="process-depts">
+ <span class="label">鎶ュ绉戝锛�</span>
+ <el-tag
+ v-for="dept in record.reportDepts"
+ :key="dept"
+ size="small"
+ type="info"
+ class="dept-tag"
+ >
+ {{ dept }}
+ </el-tag>
+ </div>
+ <div v-if="record.remark" class="process-remark">
+ <span class="label">澶勭悊澶囨敞锛�</span>
+ <span class="content">{{ record.remark }}</span>
+ </div>
+ <div v-if="record.attachments && record.attachments.length > 0" class="process-attachments">
+ <span class="label">闄勪欢锛�</span>
+ <el-button
+ v-for="file in record.attachments"
+ :key="file.id"
+ type="text"
+ size="small"
+ icon="el-icon-document"
+ @click="handlePreviewFile(file)"
+ >
+ {{ file.name }}
+ </el-button>
+ </div>
+ </div>
+ </div>
+ </el-card>
+ </el-timeline-item>
+ </el-timeline>
+ </div>
+ <div v-else class="no-record">
+ 鏆傛棤澶勭悊璁板綍
+ </div>
+ </div>
+
+ <span slot="footer" class="dialog-footer">
+ <el-button
+ type="primary"
+ icon="el-icon-edit"
+ @click="handleProcess"
+ v-if="currentRecord.processStatus !== 2"
+ >
+ 澶勭悊寮傚父
+ </el-button>
+ <el-button @click="dialogVisible = false">鍏抽棴</el-button>
+ </span>
+
+ <!-- 澶勭悊瀵硅瘽妗� -->
+ <el-dialog
+ title="澶勭悊寮傚父鍙嶉"
+ :visible.sync="processDialogVisible"
+ width="600px"
+ center
+ append-to-body
+ >
+ <el-form
+ :model="processForm"
+ :rules="processRules"
+ ref="processForm"
+ label-width="100px"
+ size="medium"
+ >
+ <el-form-item label="澶勭悊鐘舵��" prop="status">
+ <el-select
+ v-model="processForm.status"
+ placeholder="璇烽�夋嫨澶勭悊鐘舵��"
+ style="width: 100%"
+ >
+ <el-option label="澶勭悊涓�" :value="1" />
+ <el-option label="宸插鐞�" :value="2" />
+ <el-option label="宸查┏鍥�" :value="3" />
+ </el-select>
+ </el-form-item>
+
+ <el-form-item label="鎶ュ绉戝" prop="reportDepts">
+ <el-select
+ v-model="processForm.reportDepts"
+ placeholder="璇烽�夋嫨鎶ュ绉戝"
+ multiple
+ filterable
+ collapse-tags
+ style="width: 100%"
+ >
+ <el-option
+ v-for="dept in deptList"
+ :key="dept.id"
+ :label="dept.name"
+ :value="dept.id"
+ />
+ </el-select>
+ </el-form-item>
+
+ <el-form-item label="澶勭悊澶囨敞" prop="remark">
+ <el-input
+ v-model="processForm.remark"
+ type="textarea"
+ :rows="4"
+ placeholder="璇疯緭鍏ュ鐞嗗娉紙鏈�澶�500瀛楋級"
+ maxlength="500"
+ show-word-limit
+ />
+ </el-form-item>
+
+ <el-form-item label="闄勪欢涓婁紶">
+ <el-upload
+ class="upload-demo"
+ action="#"
+ :on-preview="handleFilePreview"
+ :on-remove="handleFileRemove"
+ :before-remove="beforeFileRemove"
+ :limit="3"
+ :on-exceed="handleFileExceed"
+ :file-list="fileList"
+ >
+ <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button>
+ <div slot="tip" class="el-upload__tip">鏀寔涓婁紶鍥剧墖銆佹枃妗g瓑闄勪欢锛屽崟涓枃浠朵笉瓒呰繃10MB</div>
+ </el-upload>
+ </el-form-item>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="processDialogVisible = false">鍙栨秷</el-button>
+ <el-button
+ type="primary"
+ @click="submitProcess"
+ :loading="processing"
+ >
+ 鎻愪氦澶勭悊
+ </el-button>
+ </span>
+ </el-dialog>
+ </el-dialog>
+</template>
+
+<script>
+export default {
+ name: 'ExceptionDetailDialog',
+ props: {
+ // 鏄惁鏄剧ず瀵硅瘽妗�
+ visible: {
+ type: Boolean,
+ default: false
+ },
+ // 璁板綍ID
+ recordId: {
+ type: [Number, String],
+ default: null
+ },
+ // 瀵硅瘽妗嗘爣棰�
+ title: {
+ type: String,
+ default: '寮傚父鍙嶉璇︽儏'
+ }
+ },
+ data() {
+ return {
+ // 褰撳墠璁板綍
+ currentRecord: {},
+
+ // 闂嵎鏁版嵁
+ questionnaireData: [],
+
+ // 澶勭悊璁板綍
+ processRecords: [],
+
+ // 绉戝鍒楄〃
+ deptList: [
+ { id: 1, name: '蹇冭绠″唴绉�' },
+ { id: 2, name: '绁炵粡鍐呯' },
+ { id: 3, name: '鏅绉�' },
+ { id: 4, name: '楠ㄧ' },
+ { id: 5, name: '濡囦骇绉�' },
+ { id: 6, name: '鍎跨' },
+ { id: 7, name: '鎬ヨ瘖绉�' },
+ { id: 8, name: '鍛煎惛鍐呯' }
+ ],
+
+ // 澶勭悊瀵硅瘽妗�
+ processDialogVisible: false,
+ processing: false,
+ processForm: {
+ status: '',
+ reportDepts: [],
+ remark: ''
+ },
+ processRules: {
+ status: [
+ { required: true, message: '璇烽�夋嫨澶勭悊鐘舵��', trigger: 'change' }
+ ],
+ remark: [
+ { required: true, message: '璇疯緭鍏ュ鐞嗗娉�', trigger: 'blur' },
+ { min: 5, max: 500, message: '澶囨敞闀垮害鍦� 5 鍒� 500 涓瓧绗�', trigger: 'blur' }
+ ]
+ },
+ fileList: [],
+
+ // 鍔犺浇鐘舵��
+ loading: false
+ };
+ },
+
+ computed: {
+ dialogVisible: {
+ get() {
+ return this.visible;
+ },
+ set(val) {
+ this.$emit('update:visible', val);
+ }
+ }
+ },
+
+ watch: {
+ visible: {
+ immediate: true,
+ handler(val) {
+ if (val && this.recordId) {
+ this.loadData();
+ }
+ }
+ }
+ },
+
+ methods: {
+ // 鍔犺浇鏁版嵁
+ async loadData() {
+ this.loading = true;
+ try {
+ await Promise.all([
+ this.loadRecordDetail(),
+ this.loadQuestionnaireData(),
+ this.loadProcessRecords()
+ ]);
+ } finally {
+ this.loading = false;
+ }
+ },
+
+ // 鍔犺浇璁板綍璇︽儏
+ async loadRecordDetail() {
+ return new Promise(resolve => {
+ setTimeout(() => {
+ // 鏍规嵁涓嶅悓鐨剅ecordId杩斿洖涓嶅悓鐨刴ock鏁版嵁
+ const mockRecords = {
+ 1: {
+ id: 1,
+ patientName: '寮犲厛鐢�',
+ gender: 1,
+ age: 45,
+ phone: '13800138000',
+ dischargeDept: '蹇冭绠″唴绉�',
+ dischargeWard: '鍐呯涓�鐥呭尯',
+ fillTime: '2024-01-15 10:30:25',
+ responsibilityDept: '蹇冭绠″唴绉�',
+ processStatus: 0
+ },
+ 2: {
+ id: 2,
+ patientName: '鏉庡コ澹�',
+ gender: 0,
+ age: 38,
+ phone: '13900139000',
+ dischargeDept: '绁炵粡鍐呯',
+ dischargeWard: '鍐呯浜岀梾鍖�',
+ fillTime: '2024-01-14 16:20:10',
+ responsibilityDept: '绁炵粡鍐呯',
+ processStatus: 0
+ },
+ 3: {
+ id: 3,
+ patientName: '鐜嬪厛鐢�',
+ gender: 1,
+ age: 52,
+ phone: '13700137000',
+ dischargeDept: '鏅绉�',
+ dischargeWard: '澶栫涓�鐥呭尯',
+ fillTime: '2024-01-13 09:15:45',
+ responsibilityDept: '鏅绉�',
+ processStatus: 1
+ }
+ };
+
+ this.currentRecord = mockRecords[this.recordId] || {
+ id: 1,
+ patientName: '寮犲厛鐢�',
+ gender: 1,
+ age: 45,
+ phone: '13800138000',
+ dischargeDept: '蹇冭绠″唴绉�',
+ dischargeWard: '鍐呯涓�鐥呭尯',
+ fillTime: '2024-01-15 10:30:25',
+ responsibilityDept: '蹇冭绠″唴绉�',
+ processStatus: 0
+ };
+ resolve();
+ }, 300);
+ });
+ },
+
+ // 鍔犺浇闂嵎鏁版嵁
+ async loadQuestionnaireData() {
+ return new Promise(resolve => {
+ setTimeout(() => {
+ this.questionnaireData = [
+ {
+ question: '鎮ㄥ鍖绘姢浜哄憳鐨勬湇鍔℃�佸害鏄惁婊℃剰锛�',
+ type: 1,
+ options: [
+ { value: '闈炲父婊℃剰', text: '闈炲父婊℃剰' },
+ { value: '婊℃剰', text: '婊℃剰' },
+ { value: '涓�鑸�', text: '涓�鑸�' },
+ { value: '涓嶆弧鎰�', text: '涓嶆弧鎰�' },
+ { value: '闈炲父涓嶆弧鎰�', text: '闈炲父涓嶆弧鎰�' }
+ ],
+ answer: '涓嶆弧鎰�',
+ additional: '鍖荤敓鏌ユ埧鏃堕棿澶煭锛屾矡閫氫笉澶熷厖鍒嗭紝瀵圭梾鎯呰В閲婁笉澶熻缁�'
+ },
+ {
+ question: '鎮ㄥ鍖荤敓鐨勮瘖鐤楁按骞冲拰鎶�鏈兘鍔涜瘎浠峰浣曪紵',
+ type: 1,
+ options: [
+ { value: '闈炲父涓撲笟', text: '闈炲父涓撲笟' },
+ { value: '姣旇緝涓撲笟', text: '姣旇緝涓撲笟' },
+ { value: '涓�鑸�', text: '涓�鑸�' },
+ { value: '涓嶅涓撲笟', text: '涓嶅涓撲笟' },
+ { value: '闈炲父涓嶄笓涓�', text: '闈炲父涓嶄笓涓�' }
+ ],
+ answer: '姣旇緝涓撲笟',
+ additional: ''
+ },
+ {
+ question: '鎮ㄥ鍖婚櫌鐨勭幆澧冨拰鍗敓鐘跺喌鏄惁婊℃剰锛�',
+ type: 1,
+ options: [
+ { value: '闈炲父婊℃剰', text: '闈炲父婊℃剰' },
+ { value: '婊℃剰', text: '婊℃剰' },
+ { value: '涓�鑸�', text: '涓�鑸�' },
+ { value: '涓嶆弧鎰�', text: '涓嶆弧鎰�' },
+ { value: '闈炲父涓嶆弧鎰�', text: '闈炲父涓嶆弧鎰�' }
+ ],
+ answer: '涓�鑸�',
+ additional: ''
+ },
+ {
+ question: '鎮ㄨ涓哄尰鎶や汉鍛樹笌鎮ㄧ殑娌熼�氭槸鍚﹀厖鍒嗭紵',
+ type: 1,
+ options: [
+ { value: '闈炲父鍏呭垎', text: '闈炲父鍏呭垎' },
+ { value: '姣旇緝鍏呭垎', text: '姣旇緝鍏呭垎' },
+ { value: '涓�鑸�', text: '涓�鑸�' },
+ { value: '涓嶅鍏呭垎', text: '涓嶅鍏呭垎' },
+ { value: '闈炲父涓嶅厖鍒�', text: '闈炲父涓嶅厖鍒�' }
+ ],
+ answer: '涓嶅鍏呭垎',
+ additional: '鍖荤敓璁茶В鐥呮儏鏃惰閫熷お蹇紝娌℃湁缁欒冻澶熺殑鏃堕棿鎻愰棶'
+ },
+ {
+ question: '鎮ㄥ绛夊緟灏辫瘖鍜屾不鐤楃殑鏃堕棿鏄惁婊℃剰锛�',
+ type: 1,
+ options: [
+ { value: '闈炲父婊℃剰', text: '闈炲父婊℃剰' },
+ { value: '婊℃剰', text: '婊℃剰' },
+ { value: '涓�鑸�', text: '涓�鑸�' },
+ { value: '涓嶆弧鎰�', text: '涓嶆弧鎰�' },
+ { value: '闈炲父涓嶆弧鎰�', text: '闈炲父涓嶆弧鎰�' }
+ ],
+ answer: '涓嶆弧鎰�',
+ additional: '棰勭害鐨�9鐐癸紝瀹為檯10鐐规墠瑙佸埌鍖荤敓'
+ }
+ ];
+ resolve();
+ }, 300);
+ });
+ },
+
+ // 鍔犺浇澶勭悊璁板綍
+ async loadProcessRecords() {
+ return new Promise(resolve => {
+ setTimeout(() => {
+ this.processRecords = [
+ {
+ id: 1,
+ time: '2024-01-15 14:20:30',
+ user: '寮犲尰鐢�',
+ status: 1, // 澶勭悊涓�
+ reportDepts: ['鍖诲姟绉�', '鎶ょ悊閮�'],
+ remark: '宸叉敹鍒板弽棣堬紝姝e湪瀹夋帓鐩稿叧浜哄憳鏍告煡鎯呭喌',
+ attachments: [
+ { id: 1, name: '鍒濇璋冩煡璁板綍.docx' },
+ { id: 2, name: '鎮h�呮矡閫氳褰�.jpg' }
+ ]
+ },
+ {
+ id: 2,
+ time: '2024-01-15 10:45:12',
+ user: '绯荤粺',
+ status: 0, // 寰呭鐞�
+ remark: '绯荤粺鑷姩璇嗗埆涓哄紓甯稿弽棣堬紝宸插垎閰嶅埌璐d换绉戝',
+ attachments: []
+ }
+ ];
+ resolve();
+ }, 300);
+ });
+ },
+
+ // 鍒ゆ柇鏄惁涓轰笉婊℃剰閫夐」
+ isUnsatisfactoryOption(value) {
+ const unsatisfactoryValues = [
+ '涓嶆弧鎰�',
+ '闈炲父涓嶆弧鎰�',
+ '涓嶅涓撲笟',
+ '闈炲父涓嶄笓涓�',
+ '涓嶅鍏呭垎',
+ '闈炲父涓嶅厖鍒�'
+ ];
+ return unsatisfactoryValues.includes(value);
+ },
+
+ // 鑾峰彇鐘舵�佹爣绛剧被鍨�
+ getStatusTagType(status) {
+ switch (status) {
+ case 0: return 'warning'; // 寰呭鐞�
+ case 1: return 'primary'; // 澶勭悊涓�
+ case 2: return 'success'; // 宸插鐞�
+ case 3: return 'danger'; // 宸查┏鍥�
+ default: return 'info';
+ }
+ },
+
+ // 鑾峰彇鐘舵�佹枃鏈�
+ getStatusText(status) {
+ switch (status) {
+ case 0: return '寰呭鐞�';
+ case 1: return '澶勭悊涓�';
+ case 2: return '宸插鐞�';
+ case 3: return '宸查┏鍥�';
+ default: return '鏈煡';
+ }
+ },
+
+ // 澶勭悊寮傚父
+ handleProcess() {
+ this.processForm = {
+ status: this.currentRecord.processStatus === 0 ? 1 : this.currentRecord.processStatus,
+ reportDepts: [],
+ remark: ''
+ };
+ this.processDialogVisible = true;
+ },
+
+ // 鎻愪氦澶勭悊
+ async submitProcess() {
+ this.$refs.processForm.validate(async (valid) => {
+ if (valid) {
+ this.processing = true;
+ try {
+ // Mock API璋冪敤
+ await new Promise(resolve => setTimeout(resolve, 1000));
+
+ this.$message.success('澶勭悊鎻愪氦鎴愬姛');
+ this.processDialogVisible = false;
+
+ // 閲嶆柊鍔犺浇鏁版嵁
+ await this.loadData();
+
+ // 瑙﹀彂鐖剁粍浠跺埛鏂�
+ this.$emit('processed');
+ } finally {
+ this.processing = false;
+ }
+ }
+ });
+ },
+
+ // 棰勮鏂囦欢
+ handlePreviewFile(file) {
+ this.$message.info(`棰勮鏂囦欢: ${file.name}`);
+ },
+
+ // 澶勭悊瀵硅瘽妗嗗叧闂�
+ handleClose() {
+ this.$emit('close');
+ },
+
+ // 鏂囦欢涓婁紶鐩稿叧鏂规硶
+ handleFilePreview(file) {
+ console.log('棰勮鏂囦欢:', file);
+ },
+
+ handleFileRemove(file, fileList) {
+ console.log('绉婚櫎鏂囦欢:', file, fileList);
+ },
+
+ beforeFileRemove(file) {
+ return this.$confirm(`纭畾绉婚櫎 ${file.name}锛焋);
+ },
+
+ handleFileExceed(files, fileList) {
+ this.$message.warning(`褰撳墠闄愬埗閫夋嫨 3 涓枃浠讹紝鏈閫夋嫨浜� ${files.length} 涓枃浠讹紝鍏遍�夋嫨浜� ${files.length + fileList.length} 涓枃浠禶);
+ }
+ }
+};
+</script>
+
+<style lang="scss" scoped>
+.exception-detail-dialog {
+ ::v-deep .el-dialog {
+ max-height: 85vh;
+ display: flex;
+ flex-direction: column;
+
+ .el-dialog__body {
+ flex: 1;
+ overflow-y: auto;
+ padding: 20px;
+ }
+ }
+
+ .info-section {
+ margin-bottom: 20px;
+ padding: 20px;
+ background: #f8f9fa;
+ border-radius: 8px;
+ border: 1px solid #ebeef5;
+
+ .section-title {
+ font-size: 16px;
+ font-weight: 600;
+ color: #303133;
+ margin-bottom: 15px;
+ padding-bottom: 10px;
+ border-bottom: 2px solid #409EFF;
+ }
+
+ .info-item {
+ margin-bottom: 12px;
+ display: flex;
+ align-items: center;
+
+ .label {
+ font-size: 14px;
+ color: #606266;
+ min-width: 80px;
+ font-weight: 500;
+ }
+
+ .value {
+ font-size: 14px;
+ color: #303133;
+ font-weight: 500;
+ }
+ }
+ }
+
+ .questionnaire-section {
+ margin-bottom: 20px;
+ padding: 20px;
+ background: #fff;
+ border-radius: 8px;
+ border: 1px solid #ebeef5;
+
+ .section-title {
+ font-size: 16px;
+ font-weight: 600;
+ color: #303133;
+ margin-bottom: 15px;
+ padding-bottom: 10px;
+ border-bottom: 2px solid #409EFF;
+ }
+
+ .questionnaire-content {
+ .question-item {
+ margin-bottom: 20px;
+ padding: 15px;
+ border-radius: 6px;
+ border: 1px solid #ebeef5;
+ transition: all 0.3s;
+
+ &:hover {
+ border-color: #409EFF;
+ box-shadow: 0 2px 12px 0 rgba(64, 158, 255, 0.1);
+ }
+
+ .question-header {
+ display: flex;
+ align-items: center;
+ margin-bottom: 15px;
+ padding-bottom: 10px;
+ border-bottom: 1px dashed #dcdfe6;
+
+ .question-index {
+ font-weight: 600;
+ color: #409EFF;
+ margin-right: 8px;
+ font-size: 15px;
+ }
+
+ .question-text {
+ flex: 1;
+ font-size: 15px;
+ color: #303133;
+ font-weight: 500;
+ line-height: 1.5;
+ }
+
+ .question-type {
+ margin-left: 10px;
+ }
+ }
+
+ .question-options {
+ ::v-deep .el-radio-group {
+ display: flex;
+ flex-direction: column;
+ gap: 10px;
+ }
+
+ ::v-deep .el-checkbox-group {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 15px;
+ }
+
+ ::v-deep .el-radio,
+ ::v-deep .el-checkbox {
+ margin: 0;
+ padding: 8px 12px;
+ border-radius: 4px;
+ border: 1px solid #ebeef5;
+ transition: all 0.3s;
+
+ &:hover {
+ background: #f5f7fa;
+ }
+
+ &.unsatisfactory-option {
+ border-color: #e6a23c;
+ background: #fdf6ec;
+ }
+ }
+ }
+
+ .additional-remark {
+ margin-top: 15px;
+ padding: 12px;
+ background: #f0f9ff;
+ border-radius: 6px;
+ border-left: 4px solid #409EFF;
+
+ .remark-label {
+ font-size: 13px;
+ color: #606266;
+ font-weight: 500;
+ margin-bottom: 5px;
+ }
+
+ .remark-content {
+ font-size: 14px;
+ color: #303133;
+ line-height: 1.6;
+ }
+ }
+ }
+ }
+ }
+
+ .process-section {
+ .section-title {
+ font-size: 16px;
+ font-weight: 600;
+ color: #303133;
+ margin-bottom: 15px;
+ padding-bottom: 10px;
+ border-bottom: 2px solid #409EFF;
+ }
+
+ .process-timeline {
+ ::v-deep .el-timeline-item {
+ padding-bottom: 20px;
+
+ .el-timeline-item__timestamp {
+ font-size: 13px;
+ color: #909399;
+ }
+ }
+
+ .process-item {
+ .process-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 10px;
+
+ .process-user {
+ font-size: 14px;
+ font-weight: 600;
+ color: #409EFF;
+ }
+ }
+
+ .process-content {
+ .process-depts {
+ margin-bottom: 8px;
+
+ .label {
+ font-size: 13px;
+ color: #606266;
+ margin-right: 5px;
+ }
+
+ .dept-tag {
+ margin-right: 5px;
+ margin-bottom: 5px;
+ }
+ }
+
+ .process-remark {
+ margin-bottom: 8px;
+
+ .label {
+ font-size: 13px;
+ color: #606266;
+ margin-right: 5px;
+ }
+
+ .content {
+ font-size: 13px;
+ color: #303133;
+ line-height: 1.5;
+ }
+ }
+
+ .process-attachments {
+ .label {
+ font-size: 13px;
+ color: #606266;
+ margin-right: 5px;
+ }
+
+ ::v-deep .el-button {
+ margin-right: 8px;
+ margin-bottom: 5px;
+ }
+ }
+ }
+ }
+ }
+
+ .no-record {
+ text-align: center;
+ padding: 40px 0;
+ color: #909399;
+ font-style: italic;
+ background: #f8f9fa;
+ border-radius: 6px;
+ }
+ }
+
+ .dialog-footer {
+ display: flex;
+ justify-content: flex-end;
+ align-items: center;
+ gap: 10px;
+ }
+}
+</style>
diff --git a/src/views/Satisfaction/sfstatistics/components/SatisfactionStatistics.vue b/src/views/Satisfaction/sfstatistics/components/SatisfactionStatistics.vue
index a6463e6..a4c07a4 100644
--- a/src/views/Satisfaction/sfstatistics/components/SatisfactionStatistics.vue
+++ b/src/views/Satisfaction/sfstatistics/components/SatisfactionStatistics.vue
@@ -273,10 +273,10 @@
<!-- 缁煎悎寰楀垎琛� -->
<div class="summary-row">
<div class="summary-content">
- <div class="summary-item">
+ <!-- <div class="summary-item">
<span class="label">缁煎悎寰楀垎锛�</span>
<span class="value">{{ totalScore.toFixed(1) }}</span>
- </div>
+ </div> -->
<div class="summary-item">
<span class="label">鎬荤瓟棰樹汉鏁帮細</span>
<span class="value">{{ totalAnswerCount }}</span>
diff --git a/src/views/followvisit/record/detailpage/index.vue b/src/views/followvisit/record/detailpage/index.vue
index 0d8c44c..ca5b159 100644
--- a/src/views/followvisit/record/detailpage/index.vue
+++ b/src/views/followvisit/record/detailpage/index.vue
@@ -655,6 +655,20 @@
</el-input>
</el-form-item>
</el-col>
+ <el-col :span="10">
+ <el-form-item label="鐭彿鐢佃瘽">
+ <el-input
+ placeholder="鑱旂郴鐢佃瘽缂哄け"
+ v-model="userform.telshortcode"
+ >
+ <el-button
+ slot="append"
+ icon="el-icon-phone"
+ @click="handleCall(userform.telshortcode, 'tel')"
+ ></el-button>
+ </el-input>
+ </el-form-item>
+ </el-col>
</el-row>
<!-- 鑱旂郴浜轰俊鎭 -->
diff --git a/src/views/followvisit/satisfaction/index.vue b/src/views/followvisit/satisfaction/index.vue
index 59915c3..af713d3 100644
--- a/src/views/followvisit/satisfaction/index.vue
+++ b/src/views/followvisit/satisfaction/index.vue
@@ -29,6 +29,17 @@
v-model="topqueryParams.patName"
></el-input>
</el-form-item>
+ <el-form-item label="鏃堕棿鑼冨洿">
+ <el-date-picker
+ v-model="dateRangefs"
+ style="width: 240px"
+ value-format="yyyy-MM-dd HH:MM:SS"
+ type="datetimerange"
+ range-separator="-"
+ start-placeholder="寮�濮嬫棩鏈�"
+ end-placeholder="缁撴潫鏃ユ湡"
+ ></el-date-picker>
+ </el-form-item>
<el-form-item>
<el-button
type="primary"
@@ -279,8 +290,8 @@
fixed="right"
width="150"
align="center"
- key="createTime"
- prop="createTime"
+ key="updateTime"
+ prop="updateTime"
sortable
>
</el-table-column>
@@ -366,6 +377,8 @@
total: 0,
// 鐢ㄦ埛琛ㄦ牸鏁版嵁
userList: null,
+ dateRangefs: [],
+
// 寮瑰嚭灞傛爣棰�
title: "鏂板褰卞儚闅忚",
// 鏄惁鏄剧ず淇敼銆佹坊鍔犲脊鍑哄眰
@@ -594,14 +607,14 @@
/** 鎼滅储鎸夐挳鎿嶄綔 */
handleQuery() {
this.topqueryParams.pageNum = 1;
+ this.topqueryParams.startTime = this.dateRangefs[0] || null;
+ this.topqueryParams.endTime = this.dateRangefs[1] || null;
this.getList();
},
/** 閲嶇疆鎸夐挳鎿嶄綔 */
resetQuery() {
this.dateRange = [];
- this.resetForm("queryForm");
- this.topqueryParams.deptId = undefined;
- this.$refs.tree.setCurrentKey(null);
+ this.topqueryParams = {};
this.handleQuery();
},
// 澶氶�夋閫変腑鏁版嵁
diff --git a/vue.config.js b/vue.config.js
index 79d9dfb..5a49e1f 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -36,8 +36,8 @@
// detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: {
// target: `https://www.health-y.cn/lssf`,
- // target: `http://192.168.100.10:8096`,
- target: `http://192.168.100.10:8094`,//鐪佺珛鍚屽痉
+ target: `http://192.168.100.10:8096`,
+ // target: `http://192.168.100.10:8094`,//鐪佺珛鍚屽痉
// target: `http://192.168.100.10:8095`,//鏂板崕
// target:`http://localhost:8095`,
// target:`http://35z1t16164.qicp.vip`,
--
Gitblit v1.9.3