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