From 03348941a9c44e3b9706a3b6c25c8fb5ba25d9d5 Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期一, 30 三月 2026 09:15:28 +0800
Subject: [PATCH] 测试完成

---
 dist (2).zip                                                          |    0 
 dist.zip                                                              |    0 
 src/views/followvisit/record/detailpage/index.vue                     |    8 
 src/views/sfstatistics/percentage/index.vue                           |   16 
 src/views/Satisfaction/sfstatistics/components/FollowupStatistics.vue |    2 
 dist (3).zip                                                          |    0 
 src/views/Satisfaction/configurationmyd/batch.vue                     |  899 ++++++++++++++++++++++++++++
 src/views/Satisfaction/configurationmyd/components/DetailsAnomaly.vue |    0 
 src/views/Satisfaction/configurationmyd/dispose.vue                   |  980 ++++++++++++++++++++++++++++++
 src/views/Satisfaction/sfstatistics/components/visitStatistics.vue    |    2 
 10 files changed, 1,892 insertions(+), 15 deletions(-)

diff --git "a/\346\214\207\346\240\207\347\273\237\350\256\241\346\225\264\345\220\210\351\241\265\351\200\202\351\205\215\344\270\275\346\260\264\347\234\201\347\253\213\345\220\214\345\276\267.zip" "b/dist \0502\051.zip"
similarity index 94%
copy from "\346\214\207\346\240\207\347\273\237\350\256\241\346\225\264\345\220\210\351\241\265\351\200\202\351\205\215\344\270\275\346\260\264\347\234\201\347\253\213\345\220\214\345\276\267.zip"
copy to "dist \0502\051.zip"
index 85fc265..a864390 100644
--- "a/\346\214\207\346\240\207\347\273\237\350\256\241\346\225\264\345\220\210\351\241\265\351\200\202\351\205\215\344\270\275\346\260\264\347\234\201\347\253\213\345\220\214\345\276\267.zip"
+++ "b/dist \0502\051.zip"
Binary files differ
diff --git "a/\346\214\207\346\240\207\347\273\237\350\256\241\346\225\264\345\220\210\351\241\265\351\200\202\351\205\215\344\270\275\346\260\264\347\234\201\347\253\213\345\220\214\345\276\267.zip" "b/dist \0503\051.zip"
similarity index 94%
copy from "\346\214\207\346\240\207\347\273\237\350\256\241\346\225\264\345\220\210\351\241\265\351\200\202\351\205\215\344\270\275\346\260\264\347\234\201\347\253\213\345\220\214\345\276\267.zip"
copy to "dist \0503\051.zip"
index 85fc265..2dab64e 100644
--- "a/\346\214\207\346\240\207\347\273\237\350\256\241\346\225\264\345\220\210\351\241\265\351\200\202\351\205\215\344\270\275\346\260\264\347\234\201\347\253\213\345\220\214\345\276\267.zip"
+++ "b/dist \0503\051.zip"
Binary files differ
diff --git "a/\346\214\207\346\240\207\347\273\237\350\256\241\346\225\264\345\220\210\351\241\265\351\200\202\351\205\215\344\270\275\346\260\264\347\234\201\347\253\213\345\220\214\345\276\267.zip" b/dist.zip
similarity index 95%
rename from "\346\214\207\346\240\207\347\273\237\350\256\241\346\225\264\345\220\210\351\241\265\351\200\202\351\205\215\344\270\275\346\260\264\347\234\201\347\253\213\345\220\214\345\276\267.zip"
rename to dist.zip
index 85fc265..a9d30e9 100644
--- "a/\346\214\207\346\240\207\347\273\237\350\256\241\346\225\264\345\220\210\351\241\265\351\200\202\351\205\215\344\270\275\346\260\264\347\234\201\347\253\213\345\220\214\345\276\267.zip"
+++ b/dist.zip
Binary files differ
diff --git a/src/views/Satisfaction/configurationmyd/batch.vue b/src/views/Satisfaction/configurationmyd/batch.vue
new file mode 100644
index 0000000..41c2d0d
--- /dev/null
+++ b/src/views/Satisfaction/configurationmyd/batch.vue
@@ -0,0 +1,899 @@
+<template>
+  <div class="batch-process">
+    <!-- 椤甸潰鏍囬 -->
+    <div class="page-header">
+      <div class="header-content">
+        <h2 class="page-title">寮傚父鎵归噺澶勭悊</h2>
+        <p class="page-description">鎵归噺澶勭悊閫変腑鐨勫紓甯稿弽棣�</p>
+        <div class="header-actions">
+          <el-button
+            type="primary"
+            icon="el-icon-check"
+            @click="handleBatchSubmit"
+            :loading="batchProcessing"
+          >
+            鎵归噺鎻愪氦澶勭悊
+          </el-button>
+          <el-button
+            type="warning"
+            icon="el-icon-back"
+            @click="handleGoBack"
+          >
+            杩斿洖寮傚父鍒楄〃
+          </el-button>
+        </div>
+      </div>
+    </div>
+
+    <!-- 寮傚父鍒楄〃 -->
+    <div class="list-section">
+      <el-card shadow="never">
+        <div class="filter-section">
+          <el-form
+            :model="filterParams"
+            :inline="true"
+            size="medium"
+            class="filter-form"
+          >
+            <el-form-item label="璐熻矗绉戝">
+              <el-select
+                v-model="filterParams.deptId"
+                placeholder="璇烽�夋嫨绉戝"
+                clearable
+                style="width: 200px"
+              >
+                <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="澶勭悊鐘舵��">
+              <el-select
+                v-model="filterParams.status"
+                placeholder="璇烽�夋嫨鐘舵��"
+                clearable
+                style="width: 200px"
+              >
+                <el-option label="寰呭鐞�" :value="0" />
+                <el-option label="澶勭悊涓�" :value="1" />
+                <el-option label="宸插鐞�" :value="2" />
+              </el-select>
+            </el-form-item>
+            <el-form-item>
+              <el-button
+                type="primary"
+                icon="el-icon-search"
+                @click="handleFilter"
+              >
+                绛涢��
+              </el-button>
+              <el-button
+                icon="el-icon-refresh"
+                @click="handleResetFilter"
+              >
+                閲嶇疆
+              </el-button>
+            </el-form-item>
+          </el-form>
+        </div>
+
+        <el-table
+          v-loading="loading"
+          :data="exceptionList"
+          :border="true"
+          style="width: 100%"
+          @selection-change="handleSelectionChange"
+          class="exception-table"
+        >
+          <el-table-column
+            type="selection"
+            width="55"
+            align="center"
+          />
+
+          <el-table-column
+            label="搴忓彿"
+            type="index"
+            width="60"
+            align="center"
+          />
+
+          <el-table-column
+            label="璐熻矗绉戝"
+            prop="responsibilityDept"
+            width="120"
+            align="center"
+          >
+            <template slot-scope="{ row }">
+              <el-tag type="primary">{{ row.responsibilityDept }}</el-tag>
+            </template>
+          </el-table-column>
+
+          <el-table-column
+            label="涓嶆弧鎰忚鎯�"
+            prop="unsatisfactoryDetail"
+            min-width="200"
+            align="center"
+          >
+            <template slot-scope="{ row }">
+              <div class="detail-content">
+                {{ row.unsatisfactoryDetail }}
+              </div>
+            </template>
+          </el-table-column>
+
+          <el-table-column
+            label="鎮h�呬俊鎭�"
+            width="300"
+            align="center"
+          >
+            <template slot-scope="{ row }">
+              <div class="patient-info">
+                <div class="patient-item">
+                  <span class="label">濮撳悕锛�</span>
+                  <span class="value">{{ row.patientName }}</span>
+                </div>
+                <div class="patient-item">
+                  <span class="label">鎬у埆锛�</span>
+                  <span class="value">{{ row.gender === 1 ? '鐢�' : '濂�' }}</span>
+                </div>
+                <div class="patient-item">
+                  <span class="label">骞撮緞锛�</span>
+                  <span class="value">{{ row.age }}宀�</span>
+                </div>
+                <div class="patient-item">
+                  <span class="label">鐢佃瘽锛�</span>
+                  <span class="value">{{ row.phone }}</span>
+                </div>
+              </div>
+            </template>
+          </el-table-column>
+
+          <el-table-column
+            label="鍑洪櫌淇℃伅"
+            width="250"
+            align="center"
+          >
+            <template slot-scope="{ row }">
+              <div class="discharge-info">
+                <div class="info-item">
+                  <span class="label">绉戝锛�</span>
+                  <span class="value">{{ row.dischargeDept }}</span>
+                </div>
+                <div class="info-item">
+                  <span class="label">鐥呭尯锛�</span>
+                  <span class="value">{{ row.dischargeWard }}</span>
+                </div>
+                <div class="info-item">
+                  <span class="label">濉啓鏃堕棿锛�</span>
+                  <span class="value time">{{ row.fillTime }}</span>
+                </div>
+              </div>
+            </template>
+          </el-table-column>
+
+          <el-table-column
+            label="澶勭悊鐘舵��"
+            prop="processStatus"
+            width="100"
+            align="center"
+          >
+            <template slot-scope="{ row }">
+              <el-tag
+                :type="getStatusTagType(row.processStatus)"
+                effect="dark"
+              >
+                {{ getStatusText(row.processStatus) }}
+              </el-tag>
+            </template>
+          </el-table-column>
+
+          <el-table-column
+            label="鎿嶄綔"
+            width="180"
+            align="center"
+            fixed="right"
+          >
+            <template slot-scope="{ row }">
+              <el-button
+                type="primary"
+                size="small"
+                icon="el-icon-view"
+                @click="handleViewDetail(row)"
+              >
+                鏌ョ湅璇︽儏
+              </el-button>
+              <el-button
+                type="warning"
+                size="small"
+                icon="el-icon-edit"
+                @click="handleProcess(row)"
+                :disabled="row.processStatus === 2"
+              >
+                澶勭悊
+              </el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+
+        <!-- 鍒嗛〉 -->
+        <div class="pagination-section">
+          <el-pagination
+            background
+            layout="total, sizes, prev, pager, next, jumper"
+            :current-page="filterParams.pageNum"
+            :page-size="filterParams.pageSize"
+            :page-sizes="[10, 20, 30, 50]"
+            :total="total"
+            @size-change="handleSizeChange"
+            @current-change="handlePageChange"
+          />
+        </div>
+      </el-card>
+    </div>
+
+    <!-- 澶勭悊瀵硅瘽妗� -->
+    <el-dialog
+      title="澶勭悊寮傚父鍙嶉"
+      :visible.sync="processDialogVisible"
+      width="600px"
+      center
+    >
+      <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="handlePreview"
+            :on-remove="handleRemove"
+            :before-remove="beforeRemove"
+            :limit="3"
+            :on-exceed="handleExceed"
+            :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
+      title="鎵归噺澶勭悊寮傚父鍙嶉"
+      :visible.sync="batchDialogVisible"
+      width="600px"
+      center
+    >
+      <el-form
+        :model="batchProcessForm"
+        :rules="processRules"
+        ref="batchProcessForm"
+        label-width="100px"
+        size="medium"
+      >
+        <el-form-item label="澶勭悊鐘舵��" prop="status">
+          <el-select
+            v-model="batchProcessForm.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="batchProcessForm.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="batchProcessForm.remark"
+            type="textarea"
+            :rows="4"
+            placeholder="璇疯緭鍏ュ鐞嗗娉紙鏈�澶�500瀛楋級"
+            maxlength="500"
+            show-word-limit
+          />
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="batchDialogVisible = false">鍙栨秷</el-button>
+        <el-button
+          type="primary"
+          @click="submitBatchProcess"
+          :loading="batchProcessing"
+        >
+          鎵归噺鎻愪氦
+        </el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'BatchProcess',
+  data() {
+    return {
+      // 褰撳墠澶勭悊鐨勫紓甯窱D
+      currentExceptionId: null,
+
+      // 鎵归噺閫変腑鐨勫紓甯窱D
+      selectedExceptionIds: [],
+
+      // 杩囨护鍙傛暟
+      filterParams: {
+        deptId: '',
+        status: '',
+        pageNum: 1,
+        pageSize: 10
+      },
+
+      // 鍔犺浇鐘舵��
+      loading: false,
+      processing: false,
+      batchProcessing: false,
+
+      // 绉戝鍒楄〃
+      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: '鍐呭垎娉岀' }
+      ],
+
+      // 寮傚父鍒楄〃鏁版嵁
+      exceptionList: [],
+      total: 0,
+
+      // 澶勭悊瀵硅瘽妗�
+      processDialogVisible: 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: [],
+
+      // 鎵归噺澶勭悊瀵硅瘽妗�
+      batchDialogVisible: false,
+      batchProcessForm: {
+        status: '',
+        reportDepts: [],
+        remark: ''
+      }
+    };
+  },
+
+  mounted() {
+    this.loadExceptionList();
+  },
+
+  methods: {
+    // 鍔犺浇寮傚父鍒楄〃
+    async loadExceptionList() {
+      this.loading = true;
+      try {
+        // Mock 鏁版嵁
+        await new Promise(resolve => {
+          setTimeout(() => {
+            this.exceptionList = [
+              {
+                id: 1,
+                responsibilityDept: '蹇冭绠″唴绉�',
+                unsatisfactoryDetail: '鍖荤敓鏌ユ埧鏃堕棿澶煭锛屾矡閫氫笉澶熷厖鍒嗭紝瀵圭梾鎯呰В閲婁笉澶熻缁�',
+                patientName: '寮犲厛鐢�',
+                gender: 1,
+                age: 45,
+                phone: '138****1234',
+                dischargeDept: '蹇冭绠″唴绉�',
+                dischargeWard: '鍐呯涓�鐥呭尯',
+                fillTime: '2024-01-15 10:30:25',
+                processStatus: 0,
+                questionnaireId: 1001
+              },
+              {
+                id: 2,
+                responsibilityDept: '绁炵粡鍐呯',
+                unsatisfactoryDetail: '鎶ゅ+鎵撻拡鎶�鏈笉浣筹紝鎵庝簡涓夋鎵嶆垚鍔燂紝涓旀�佸害涓嶅鑰愬績',
+                patientName: '鏉庡コ澹�',
+                gender: 0,
+                age: 38,
+                phone: '139****5678',
+                dischargeDept: '绁炵粡鍐呯',
+                dischargeWard: '鍐呯浜岀梾鍖�',
+                fillTime: '2024-01-14 16:20:10',
+                processStatus: 0,
+                questionnaireId: 1002
+              },
+              {
+                id: 3,
+                responsibilityDept: '鏅绉�',
+                unsatisfactoryDetail: '鏈悗鎹㈣嵂涓嶅強鏃讹紝浼ゅ彛鐤肩棝鏃舵病鏈夊強鏃跺鐞�',
+                patientName: '鐜嬪厛鐢�',
+                gender: 1,
+                age: 52,
+                phone: '137****9012',
+                dischargeDept: '鏅绉�',
+                dischargeWard: '澶栫涓�鐥呭尯',
+                fillTime: '2024-01-13 09:15:45',
+                processStatus: 1,
+                questionnaireId: 1003
+              },
+              {
+                id: 4,
+                responsibilityDept: '楠ㄧ',
+                unsatisfactoryDetail: '搴峰鎸囧涓嶅涓撲笟锛屽鎭㈠杩囩▼鎻忚堪涓嶆竻妤�',
+                patientName: '鍒樺コ澹�',
+                gender: 0,
+                age: 65,
+                phone: '136****3456',
+                dischargeDept: '楠ㄧ',
+                dischargeWard: '澶栫浜岀梾鍖�',
+                fillTime: '2024-01-12 14:40:30',
+                processStatus: 0,
+                questionnaireId: 1004
+              },
+              {
+                id: 5,
+                responsibilityDept: '濡囦骇绉�',
+                unsatisfactoryDetail: '浜у墠妫�鏌ユ帓闃熸椂闂磋繃闀匡紝绛夊緟鏈熼棿娌℃湁浼戞伅搴т綅',
+                patientName: '闄堝コ澹�',
+                gender: 0,
+                age: 28,
+                phone: '135****7890',
+                dischargeDept: '濡囦骇绉�',
+                dischargeWard: '濡囦骇绉戠梾鍖�',
+                fillTime: '2024-01-11 11:25:15',
+                processStatus: 2,
+                questionnaireId: 1005
+              },
+              {
+                id: 6,
+                responsibilityDept: '鍎跨',
+                unsatisfactoryDetail: '鍎跨鐢ㄨ嵂鍓傞噺浜や唬涓嶆竻鏅帮紝鐢ㄨ嵂娉ㄦ剰浜嬮」娌℃湁璇存槑',
+                patientName: '璧靛疂瀹�',
+                gender: 1,
+                age: 5,
+                phone: '134****1234',
+                dischargeDept: '鍎跨',
+                dischargeWard: '鍎跨鐥呭尯',
+                fillTime: '2024-01-10 15:50:20',
+                processStatus: 0,
+                questionnaireId: 1006
+              },
+              {
+                id: 7,
+                responsibilityDept: '鎬ヨ瘖绉�',
+                unsatisfactoryDetail: '鎬ヨ瘖绛夊緟鏃堕棿杩囬暱锛岀梾鎯呮病鏈夊緱鍒板強鏃惰瘎浼�',
+                patientName: '瀛欏厛鐢�',
+                gender: 1,
+                age: 40,
+                phone: '133****5678',
+                dischargeDept: '鎬ヨ瘖绉�',
+                dischargeWard: '鎬ヨ瘖鐥呭尯',
+                fillTime: '2024-01-09 10:15:40',
+                processStatus: 0,
+                questionnaireId: 1007
+              },
+              {
+                id: 8,
+                responsibilityDept: '鍛煎惛鍐呯',
+                unsatisfactoryDetail: '鍖荤敓寮�鑽緝澶氾紝璐圭敤杈冮珮锛屾病鏈夎鏄庡繀瑕佹��',
+                patientName: '鍛ㄥコ澹�',
+                gender: 0,
+                age: 55,
+                phone: '132****9012',
+                dischargeDept: '鍛煎惛鍐呯',
+                dischargeWard: '鍐呯涓�鐥呭尯',
+                fillTime: '2024-01-08 13:30:55',
+                processStatus: 1,
+                questionnaireId: 1008
+              }
+            ];
+            this.total = this.exceptionList.length;
+            resolve();
+          }, 500);
+        });
+      } finally {
+        this.loading = false;
+      }
+    },
+
+    // 鑾峰彇鐘舵�佹爣绛剧被鍨�
+    getStatusTagType(status) {
+      switch (status) {
+        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 '鏈煡';
+      }
+    },
+
+    // 澶勭悊绛涢��
+    handleFilter() {
+      this.filterParams.pageNum = 1;
+      this.loadExceptionList();
+    },
+
+    // 閲嶇疆绛涢��
+    handleResetFilter() {
+      this.filterParams = {
+        deptId: '',
+        status: '',
+        pageNum: 1,
+        pageSize: 10
+      };
+      this.loadExceptionList();
+    },
+
+    // 澶勭悊閫夋嫨鍙樺寲
+    handleSelectionChange(selection) {
+      this.selectedExceptionIds = selection.map(item => item.id);
+    },
+
+    // 澶勭悊鎵归噺鎻愪氦
+    handleBatchSubmit() {
+      if (this.selectedExceptionIds.length === 0) {
+        this.$message.warning('璇峰厛閫夋嫨瑕佸鐞嗙殑寮傚父鍙嶉');
+        return;
+      }
+      this.batchDialogVisible = true;
+    },
+
+    // 杩斿洖寮傚父鍒楄〃
+    handleGoBack() {
+      this.$router.push('/satisfaction/exception/list');
+    },
+
+    // 鏌ョ湅璇︽儏
+    handleViewDetail(row) {
+      this.$router.push({
+        path: '/satisfaction/exception/detail',
+        query: {
+          id: row.questionnaireId
+        }
+      });
+    },
+
+    // 澶勭悊鍗曚釜寮傚父
+    handleProcess(row) {
+      this.currentExceptionId = row.id;
+      this.processForm = {
+        status: row.processStatus === 0 ? 1 : row.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;
+            this.loadExceptionList();
+          } finally {
+            this.processing = false;
+          }
+        }
+      });
+    },
+
+    // 鎻愪氦鎵归噺澶勭悊
+    async submitBatchProcess() {
+      this.$refs.batchProcessForm.validate(async (valid) => {
+        if (valid) {
+          this.batchProcessing = true;
+          try {
+            // Mock API璋冪敤
+            await new Promise(resolve => setTimeout(resolve, 1500));
+
+            this.$message.success(`宸叉壒閲忓鐞� ${this.selectedExceptionIds.length} 鏉″紓甯稿弽棣坄);
+            this.batchDialogVisible = false;
+            this.selectedExceptionIds = [];
+            this.loadExceptionList();
+          } finally {
+            this.batchProcessing = false;
+          }
+        }
+      });
+    },
+
+    // 鍒嗛〉澶у皬鍙樺寲
+    handleSizeChange(size) {
+      this.filterParams.pageSize = size;
+      this.filterParams.pageNum = 1;
+      this.loadExceptionList();
+    },
+
+    // 椤电爜鍙樺寲
+    handlePageChange(page) {
+      this.filterParams.pageNum = page;
+      this.loadExceptionList();
+    },
+
+    // 鏂囦欢涓婁紶鐩稿叧鏂规硶
+    handlePreview(file) {
+      console.log('棰勮鏂囦欢:', file);
+    },
+
+    handleRemove(file, fileList) {
+      console.log('绉婚櫎鏂囦欢:', file, fileList);
+    },
+
+    beforeRemove(file) {
+      return this.$confirm(`纭畾绉婚櫎 ${file.name}锛焋);
+    },
+
+    handleExceed(files, fileList) {
+      this.$message.warning(`褰撳墠闄愬埗閫夋嫨 3 涓枃浠讹紝鏈閫夋嫨浜� ${files.length} 涓枃浠讹紝鍏遍�夋嫨浜� ${files.length + fileList.length} 涓枃浠禶);
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.batch-process {
+  padding: 20px;
+  background-color: #f5f7fa;
+  min-height: 100vh;
+
+  .page-header {
+    margin-bottom: 20px;
+    padding: 20px;
+    background: linear-gradient(135deg, #5788FE 0%, #66b1ff 100%);
+    border-radius: 8px;
+    color: white;
+
+    .header-content {
+      .page-title {
+        margin: 0 0 8px 0;
+        font-size: 20px;
+        font-weight: 600;
+      }
+
+      .page-description {
+        margin: 0 0 20px 0;
+        opacity: 0.9;
+        font-size: 14px;
+      }
+
+      .header-actions {
+        display: flex;
+        gap: 10px;
+      }
+    }
+  }
+
+  .list-section {
+    .filter-section {
+      margin-bottom: 20px;
+
+      .filter-form {
+        display: flex;
+        flex-wrap: wrap;
+        align-items: center;
+
+        ::v-deep .el-form-item {
+          margin-bottom: 0;
+          margin-right: 20px;
+
+          &:last-child {
+            margin-right: 0;
+          }
+        }
+      }
+    }
+
+    .exception-table {
+      ::v-deep .el-table__header-wrapper {
+        th {
+          background-color: #f8f9fa;
+          font-weight: 600;
+          color: #333;
+        }
+      }
+
+      .detail-content {
+        font-size: 13px;
+        color: #606266;
+        line-height: 1.5;
+        text-align: left;
+      }
+
+      .patient-info {
+        .patient-item {
+          display: flex;
+          justify-content: space-between;
+          align-items: center;
+          margin-bottom: 5px;
+          padding: 2px 0;
+
+          .label {
+            font-size: 12px;
+            color: #606266;
+            min-width: 40px;
+          }
+
+          .value {
+            font-size: 13px;
+            color: #333;
+            font-weight: 500;
+            text-align: right;
+            flex: 1;
+          }
+        }
+      }
+
+      .discharge-info {
+        .info-item {
+          display: flex;
+          justify-content: space-between;
+          align-items: center;
+          margin-bottom: 5px;
+          padding: 2px 0;
+
+          .label {
+            font-size: 12px;
+            color: #606266;
+            min-width: 50px;
+          }
+
+          .value {
+            font-size: 13px;
+            color: #333;
+            font-weight: 500;
+            text-align: right;
+            flex: 1;
+
+            &.time {
+              font-size: 12px;
+              color: #909399;
+            }
+          }
+        }
+      }
+    }
+
+    .pagination-section {
+      display: flex;
+      justify-content: center;
+      padding: 20px 0 0 0;
+    }
+  }
+}
+
+@media (max-width: 768px) {
+  .batch-process {
+    padding: 10px;
+
+    .page-header {
+      .header-actions {
+        flex-direction: column;
+        align-items: stretch;
+      }
+    }
+
+    .list-section {
+      .filter-section {
+        .filter-form {
+          ::v-deep .el-form-item {
+            width: 100%;
+            margin-right: 0;
+            margin-bottom: 10px;
+          }
+        }
+      }
+    }
+  }
+}
+</style>
diff --git a/src/views/Satisfaction/configurationmyd/components/DetailsAnomaly.vue b/src/views/Satisfaction/configurationmyd/components/DetailsAnomaly.vue
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/views/Satisfaction/configurationmyd/components/DetailsAnomaly.vue
diff --git a/src/views/Satisfaction/configurationmyd/dispose.vue b/src/views/Satisfaction/configurationmyd/dispose.vue
new file mode 100644
index 0000000..8a59106
--- /dev/null
+++ b/src/views/Satisfaction/configurationmyd/dispose.vue
@@ -0,0 +1,980 @@
+<template>
+  <div class="exception-list">
+    <!-- 椤甸潰鏍囬 -->
+    <div class="page-header">
+      <div class="header-content">
+        <h2 class="page-title">婊℃剰搴﹀紓甯稿鐞�</h2>
+        <p class="page-description">鐩戞帶鍜屽鐞嗘弧鎰忓害闂嵎涓殑寮傚父鍙嶉</p>
+      </div>
+    </div>
+
+    <!-- 鏌ヨ鏉′欢鍖哄煙 -->
+    <div class="search-section">
+      <el-card shadow="never">
+        <el-form
+          :model="queryParams"
+          ref="queryForm"
+          size="medium"
+          :inline="true"
+          label-width="120px"
+          class="search-form"
+        >
+          <el-form-item label="婊℃剰搴︽ā鏉�" prop="templateId">
+            <el-select
+              v-model="queryParams.templateId"
+              placeholder="璇烽�夋嫨妯℃澘"
+              clearable
+              style="width: 200px"
+            >
+              <el-option
+                v-for="template in templateList"
+                :key="template.id"
+                :label="template.name"
+                :value="template.id"
+              />
+            </el-select>
+          </el-form-item>
+
+          <el-form-item label="璐d换绉戝" prop="deptIds">
+            <el-select
+              v-model="queryParams.deptIds"
+              placeholder="璇烽�夋嫨璐d换绉戝"
+              clearable
+              filterable
+              multiple
+              collapse-tags
+              style="width: 300px"
+            >
+              <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="dateRange">
+            <el-date-picker
+              v-model="queryParams.dateRange"
+              type="daterange"
+              range-separator="鑷�"
+              start-placeholder="寮�濮嬫棩鏈�"
+              end-placeholder="缁撴潫鏃ユ湡"
+              value-format="yyyy-MM-dd"
+              :picker-options="pickerOptions"
+              style="width: 380px"
+            />
+          </el-form-item>
+
+          <el-form-item>
+            <el-button
+              type="primary"
+              icon="el-icon-search"
+              @click="handleSearch"
+              :loading="loading"
+            >
+              鏌ヨ
+            </el-button>
+            <el-button icon="el-icon-refresh" @click="handleReset">
+              閲嶇疆
+            </el-button>
+          </el-form-item>
+        </el-form>
+      </el-card>
+    </div>
+
+    <!-- 鎵归噺鎿嶄綔 -->
+    <div class="batch-section">
+      <el-card shadow="never">
+        <div class="batch-actions">
+          <el-button
+            type="primary"
+            icon="el-icon-s-operation"
+            :disabled="selectedIds.length === 0"
+            @click="handleBatchProcess"
+          >
+            鎵归噺澶勭悊 ({{ selectedIds.length }})
+          </el-button>
+          <el-button
+            type="info"
+            icon="el-icon-download"
+            @click="handleExport"
+          >
+            瀵煎嚭寮傚父鏁版嵁
+          </el-button>
+          <el-button
+            type="warning"
+            icon="el-icon-refresh-right"
+            @click="refreshData"
+          >
+            鍒锋柊鏁版嵁
+          </el-button>
+        </div>
+      </el-card>
+    </div>
+
+    <!-- 寮傚父缁熻姒傝 -->
+    <div class="overview-section">
+      <el-row :gutter="20">
+        <el-col :span="6">
+          <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>
+              <div class="stat-info">
+                <div class="stat-title">鎬诲紓甯告暟閲�</div>
+                <div class="stat-value">{{ overviewData.totalExceptionCount }}</div>
+              </div>
+            </div>
+          </el-card>
+        </el-col>
+        <el-col :span="6">
+          <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>
+              <div class="stat-info">
+                <div class="stat-title">寰呭鐞嗗紓甯�</div>
+                <div class="stat-value">{{ overviewData.pendingCount }}</div>
+              </div>
+            </div>
+          </el-card>
+        </el-col>
+        <el-col :span="6">
+          <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>
+              <div class="stat-info">
+                <div class="stat-title">宸插鐞嗗紓甯�</div>
+                <div class="stat-value">{{ overviewData.processedCount }}</div>
+              </div>
+            </div>
+          </el-card>
+        </el-col>
+        <el-col :span="6">
+          <el-card shadow="never" class="stat-card">
+            <div class="stat-content">
+              <div class="stat-icon" style="background: #f0f9ff;">
+                <i class="el-icon-s-order" style="color: #909399;"></i>
+              </div>
+              <div class="stat-info">
+                <div class="stat-title">浠婃棩澶勭悊鏁�</div>
+                <div class="stat-value">{{ overviewData.todayProcessedCount }}</div>
+              </div>
+            </div>
+          </el-card>
+        </el-col>
+      </el-row>
+    </div>
+
+    <!-- 寮傚父鍒楄〃 -->
+    <div class="list-section">
+      <el-card shadow="never">
+        <el-table
+          v-loading="loading"
+          :data="exceptionList"
+          :border="true"
+          style="width: 100%"
+          @selection-change="handleSelectionChange"
+          class="exception-table"
+        >
+          <el-table-column
+            type="selection"
+            width="55"
+            align="center"
+          />
+
+          <el-table-column
+            label="搴忓彿"
+            type="index"
+            width="60"
+            align="center"
+          />
+
+          <el-table-column
+            label="棰樼洰鍐呭"
+            prop="questionContent"
+            min-width="300"
+            align="center"
+          >
+            <template slot-scope="{ row }">
+              <div class="question-content">
+                <span class="question-text">{{ row.questionContent }}</span>
+                <div class="question-tags">
+                  <el-tag
+                    size="mini"
+                    :type="getQuestionTypeTag(row.questionType)"
+                  >
+                    {{ row.questionType === 1 ? '鍗曢�夐' : '澶氶�夐' }}
+                  </el-tag>
+                  <el-tag
+                    size="mini"
+                    type="info"
+                  >
+                    {{ row.templateName }}
+                  </el-tag>
+                </div>
+              </div>
+            </template>
+          </el-table-column>
+
+          <el-table-column
+            label="璐熻矗绉戝"
+            prop="responsibilityDepts"
+            width="180"
+            align="center"
+          >
+            <template slot-scope="{ row }">
+              <div class="dept-list">
+                <el-tag
+                  v-for="dept in row.responsibilityDepts"
+                  :key="dept.id"
+                  size="small"
+                  type="primary"
+                  class="dept-tag"
+                >
+                  {{ dept.name }}
+                </el-tag>
+              </div>
+            </template>
+          </el-table-column>
+
+          <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.validFillCount }}</span>
+                </div>
+                <div class="stat-item">
+                  <span class="stat-label">寮傚父濉啓锛�</span>
+                  <span class="stat-value exception-count">{{ row.exceptionFillCount }}</span>
+                </div>
+              </div>
+            </template>
+          </el-table-column>
+
+          <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.processedCount }}</div>
+                </div>
+                <div class="task-category">
+                  <div class="task-title">寰呭鐞�</div>
+                  <div class="task-count pending">{{ row.pendingCount }}</div>
+                </div>
+                <div class="task-category">
+                  <div class="task-title">寮傚父鎬绘暟</div>
+                  <div class="task-count total">{{ row.totalExceptionCount }}</div>
+                </div>
+              </div>
+            </template>
+          </el-table-column>
+
+          <el-table-column
+            label="鏈�杩戝鐞�"
+            prop="lastProcessTime"
+            width="180"
+            align="center"
+          >
+            <template slot-scope="{ row }">
+              <div v-if="row.lastProcessTime" class="last-process">
+                <div class="process-time">{{ row.lastProcessTime }}</div>
+                <div class="process-user">{{ row.lastProcessUser }}</div>
+              </div>
+              <span v-else class="no-process">鏆傛棤澶勭悊璁板綍</span>
+            </template>
+          </el-table-column>
+
+          <el-table-column
+            label="鎿嶄綔"
+            width="180"
+            align="center"
+            fixed="right"
+          >
+            <template slot-scope="{ row }">
+              <!-- <el-button
+                type="primary"
+                size="small"
+                icon="el-icon-view"
+                @click="handleViewDetail(row)"
+              >
+                璇︽儏
+              </el-button> -->
+              <el-button
+                type="warning"
+                size="small"
+                icon="el-icon-s-operation"
+                @click="handleBatchQuestion(row)"
+              >
+                鎵归噺澶勭悊
+              </el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+
+        <!-- 鍒嗛〉 -->
+        <div class="pagination-section">
+          <el-pagination
+            background
+            layout="total, sizes, prev, pager, next, jumper"
+            :current-page="queryParams.pageNum"
+            :page-size="queryParams.pageSize"
+            :page-sizes="[10, 20, 30, 50]"
+            :total="total"
+            @size-change="handleSizeChange"
+            @current-change="handlePageChange"
+          />
+        </div>
+      </el-card>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'ExceptionList',
+  data() {
+    return {
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        templateId: '',
+        deptIds: [],
+        dateRange: [],
+        pageNum: 1,
+        pageSize: 10
+      },
+
+      // 鍔犺浇鐘舵��
+      loading: false,
+
+      // 閫変腑鐨処D
+      selectedIds: [],
+
+      // 妯℃澘鍒楄〃
+      templateList: [
+        { id: 1, name: '鍑洪櫌婊℃剰搴﹂棶鍗�' },
+        { id: 2, name: '浣忛櫌婊℃剰搴﹂棶鍗�' },
+        { id: 3, name: '闂ㄨ瘖婊℃剰搴﹂棶鍗�' },
+        { id: 4, name: '甯哥敤婊℃剰搴﹂棶鍗�' }
+      ],
+
+      // 绉戝鍒楄〃
+      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: 11, name: '鑲惧唴绉�' },
+        { id: 12, name: '鑲跨槫绉�' }
+      ],
+
+      // 寮傚父鍒楄〃鏁版嵁
+      exceptionList: [],
+      total: 0,
+
+      // 缁熻姒傝鏁版嵁
+      overviewData: {
+        totalExceptionCount: 0,
+        pendingCount: 0,
+        processedCount: 0,
+        todayProcessedCount: 0
+      },
+
+      // 鏃ユ湡閫夋嫨鍣ㄩ�夐」
+      pickerOptions: {
+        shortcuts: [
+          {
+            text: '鏈�杩戜竴鍛�',
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
+              picker.$emit('pick', [start, end]);
+            }
+          },
+          {
+            text: '鏈�杩戜竴涓湀',
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
+              picker.$emit('pick', [start, end]);
+            }
+          },
+          {
+            text: '鏈�杩戜笁涓湀',
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
+              picker.$emit('pick', [start, end]);
+            }
+          }
+        ],
+        disabledDate(time) {
+          return time.getTime() > Date.now();
+        }
+      }
+    };
+  },
+
+  mounted() {
+    this.loadData();
+  },
+
+  methods: {
+    // 鍔犺浇鏁版嵁
+    async loadData() {
+      this.loading = true;
+      try {
+        await Promise.all([
+          this.loadExceptionList(),
+          this.loadOverviewData()
+        ]);
+      } finally {
+        this.loading = false;
+      }
+    },
+
+    // 鍔犺浇寮傚父鍒楄〃
+    async loadExceptionList() {
+      return new Promise((resolve) => {
+        setTimeout(() => {
+          // Mock 鏁版嵁
+          this.exceptionList = [
+            {
+              id: 1,
+              questionId: 101,
+              questionContent: '鎮ㄥ鍖绘姢浜哄憳鐨勬湇鍔℃�佸害鏄惁婊℃剰锛�',
+              questionType: 1, // 1: 鍗曢�夐, 2: 澶氶�夐
+              templateName: '鍑洪櫌婊℃剰搴﹂棶鍗�',
+              responsibilityDepts: [
+                { id: 1, name: '蹇冭绠″唴绉�' },
+                { id: 2, name: '绁炵粡鍐呯' }
+              ],
+              validFillCount: 145,
+              exceptionFillCount: 8,
+              processedCount: 5,
+              pendingCount: 3,
+              totalExceptionCount: 8,
+              lastProcessTime: '2024-01-15 10:30:25',
+              lastProcessUser: '寮犲尰鐢�'
+            },
+            {
+              id: 2,
+              questionId: 102,
+              questionContent: '鎮ㄥ鍖荤敓鐨勮瘖鐤楁按骞冲拰鎶�鏈兘鍔涜瘎浠峰浣曪紵',
+              questionType: 1,
+              templateName: '浣忛櫌婊℃剰搴﹂棶鍗�',
+              responsibilityDepts: [
+                { id: 3, name: '鏅绉�' },
+                { id: 4, name: '楠ㄧ' }
+              ],
+              validFillCount: 120,
+              exceptionFillCount: 12,
+              processedCount: 8,
+              pendingCount: 4,
+              totalExceptionCount: 12,
+              lastProcessTime: '2024-01-14 16:20:10',
+              lastProcessUser: '鏉庢姢澹暱'
+            },
+            {
+              id: 3,
+              questionId: 103,
+              questionContent: '鎮ㄥ鍖婚櫌鐨勭幆澧冨拰鍗敓鐘跺喌鏄惁婊℃剰锛�',
+              questionType: 1,
+              templateName: '闂ㄨ瘖婊℃剰搴﹂棶鍗�',
+              responsibilityDepts: [
+                { id: 5, name: '濡囦骇绉�' },
+                { id: 6, name: '鍎跨' },
+                { id: 7, name: '鎬ヨ瘖绉�' }
+              ],
+              validFillCount: 180,
+              exceptionFillCount: 15,
+              processedCount: 10,
+              pendingCount: 5,
+              totalExceptionCount: 15,
+              lastProcessTime: '2024-01-13 09:15:45',
+              lastProcessUser: '鐜嬩富浠�'
+            },
+            {
+              id: 4,
+              questionId: 104,
+              questionContent: '鎮ㄨ涓哄尰鎶や汉鍛樹笌鎮ㄧ殑娌熼�氭槸鍚﹀厖鍒嗭紵',
+              questionType: 1,
+              templateName: '甯哥敤婊℃剰搴﹂棶鍗�',
+              responsibilityDepts: [
+                { id: 8, name: '鍛煎惛鍐呯' },
+                { id: 9, name: '娑堝寲鍐呯' }
+              ],
+              validFillCount: 95,
+              exceptionFillCount: 6,
+              processedCount: 4,
+              pendingCount: 2,
+              totalExceptionCount: 6,
+              lastProcessTime: '2024-01-12 14:40:30',
+              lastProcessUser: '璧靛尰鐢�'
+            },
+            {
+              id: 5,
+              questionId: 105,
+              questionContent: '鎮ㄥ绛夊緟灏辫瘖鍜屾不鐤楃殑鏃堕棿鏄惁婊℃剰锛�',
+              questionType: 1,
+              templateName: '浣忛櫌婊℃剰搴﹂棶鍗�',
+              responsibilityDepts: [
+                { id: 10, name: '鍐呭垎娉岀' },
+                { id: 11, name: '鑲惧唴绉�' }
+              ],
+              validFillCount: 200,
+              exceptionFillCount: 25,
+              processedCount: 15,
+              pendingCount: 10,
+              totalExceptionCount: 25,
+              lastProcessTime: '2024-01-11 11:25:15',
+              lastProcessUser: '瀛欐姢澹�'
+            },
+            {
+              id: 6,
+              questionId: 106,
+              questionContent: '鎮ㄥ鍖婚櫌鏀惰垂鐨勯�忔槑搴﹀拰鍚堢悊鎬ц瘎浠峰浣曪紵',
+              questionType: 1,
+              templateName: '闂ㄨ瘖婊℃剰搴﹂棶鍗�',
+              responsibilityDepts: [
+                { id: 12, name: '鑲跨槫绉�' }
+              ],
+              validFillCount: 160,
+              exceptionFillCount: 18,
+              processedCount: 12,
+              pendingCount: 6,
+              totalExceptionCount: 18,
+              lastProcessTime: '2024-01-10 15:50:20',
+              lastProcessUser: '鍛ㄥ尰鐢�'
+            },
+            {
+              id: 7,
+              questionId: 107,
+              questionContent: '鎮ㄤ細鍚戜翰鍙嬫帹鑽愭垜浠尰闄㈠悧锛�',
+              questionType: 1,
+              templateName: '鍑洪櫌婊℃剰搴﹂棶鍗�',
+              responsibilityDepts: [
+                { id: 1, name: '蹇冭绠″唴绉�' },
+                { id: 8, name: '鍛煎惛鍐呯' }
+              ],
+              validFillCount: 110,
+              exceptionFillCount: 7,
+              processedCount: 5,
+              pendingCount: 2,
+              totalExceptionCount: 7,
+              lastProcessTime: '2024-01-09 10:15:40',
+              lastProcessUser: '鍚翠富浠�'
+            },
+            {
+              id: 8,
+              questionId: 108,
+              questionContent: '鎮ㄥ浠ヤ笅鍝簺鏂归潰姣旇緝婊℃剰锛堝閫夛級锛�',
+              questionType: 2,
+              templateName: '甯哥敤婊℃剰搴﹂棶鍗�',
+              responsibilityDepts: [
+                { id: 2, name: '绁炵粡鍐呯' },
+                { id: 3, name: '鏅绉�' },
+                { id: 5, name: '濡囦骇绉�' }
+              ],
+              validFillCount: 135,
+              exceptionFillCount: 9,
+              processedCount: 6,
+              pendingCount: 3,
+              totalExceptionCount: 9,
+              lastProcessTime: '2024-01-08 13:30:55',
+              lastProcessUser: '閮戝尰鐢�'
+            }
+          ];
+          this.total = this.exceptionList.length;
+          resolve();
+        }, 500);
+      });
+    },
+
+    // 鍔犺浇姒傝鏁版嵁
+    async loadOverviewData() {
+      return new Promise((resolve) => {
+        setTimeout(() => {
+          // 璁$畻缁熻鏁版嵁
+          const totalExceptionCount = this.exceptionList.reduce((sum, item) => sum + item.totalExceptionCount, 0);
+          const pendingCount = this.exceptionList.reduce((sum, item) => sum + item.pendingCount, 0);
+          const processedCount = this.exceptionList.reduce((sum, item) => sum + item.processedCount, 0);
+
+          this.overviewData = {
+            totalExceptionCount,
+            pendingCount,
+            processedCount,
+            todayProcessedCount: 8 // 浠婃棩澶勭悊鏁� mock
+          };
+          resolve();
+        }, 300);
+      });
+    },
+
+    // 鑾峰彇棰樼洰绫诲瀷鏍囩鏍峰紡
+    getQuestionTypeTag(type) {
+      return type === 1 ? 'primary' : 'success';
+    },
+
+    // 澶勭悊鏌ヨ
+    handleSearch() {
+      this.queryParams.pageNum = 1;
+      this.loadData();
+    },
+
+    // 澶勭悊閲嶇疆
+    handleReset() {
+      this.$refs.queryForm.resetFields();
+      this.queryParams.dateRange = [];
+      this.queryParams.pageNum = 1;
+      this.loadData();
+    },
+
+    // 澶勭悊鎵归噺澶勭悊
+    handleBatchProcess() {
+      if (this.selectedIds.length === 0) {
+        this.$message.warning('璇峰厛閫夋嫨瑕佸鐞嗙殑寮傚父棰樼洰');
+        return;
+      }
+
+      // 璺宠浆鍒版壒閲忓鐞嗛〉闈�
+      this.$router.push({
+        path: '/satisfaction/exception/batch-process',
+        query: {
+          questionIds: this.selectedIds.join(',')
+        }
+      });
+    },
+
+    // 澶勭悊瀵煎嚭
+    handleExport() {
+      this.$message.success('瀵煎嚭鍔熻兘寮�鍙戜腑...');
+    },
+
+    // 鍒锋柊鏁版嵁
+    refreshData() {
+      this.loadData();
+      this.$message.success('鏁版嵁宸插埛鏂�');
+    },
+
+    // 澶勭悊閫夋嫨鍙樺寲
+    handleSelectionChange(selection) {
+      this.selectedIds = selection.map(item => item.questionId);
+    },
+
+    // 澶勭悊鏌ョ湅璇︽儏
+    handleViewDetail(row) {
+      this.$router.push({
+        path: '/satisfaction/exception/detail',
+        query: {
+          id: row.questionId
+        }
+      });
+    },
+
+    // 澶勭悊鍗曚釜棰樼洰鎵归噺澶勭悊
+    handleBatchQuestion(row) {
+      this.$router.push({
+        path: '/Intelligentcenter/batch',
+        query: {
+          questionId: row.questionId
+        }
+      });
+    },
+
+    // 澶勭悊鍒嗛〉澶у皬鍙樺寲
+    handleSizeChange(size) {
+      this.queryParams.pageSize = size;
+      this.queryParams.pageNum = 1;
+      this.loadExceptionList();
+    },
+
+    // 澶勭悊椤电爜鍙樺寲
+    handlePageChange(page) {
+      this.queryParams.pageNum = page;
+      this.loadExceptionList();
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.exception-list {
+  padding: 20px;
+  background-color: #f5f7fa;
+  min-height: 100vh;
+
+  .page-header {
+    margin-bottom: 20px;
+    padding: 20px;
+    background: linear-gradient(135deg, #5788FE 0%, #66b1ff 100%);
+    border-radius: 8px;
+    color: white;
+
+    .header-content {
+      .page-title {
+        margin: 0 0 8px 0;
+        font-size: 20px;
+        font-weight: 600;
+      }
+
+      .page-description {
+        margin: 0;
+        opacity: 0.9;
+        font-size: 14px;
+      }
+    }
+  }
+
+  .search-section {
+    margin-bottom: 20px;
+
+    .search-form {
+      display: flex;
+      flex-wrap: wrap;
+      align-items: center;
+
+      ::v-deep .el-form-item {
+        margin-bottom: 0;
+        margin-right: 20px;
+
+        &:last-child {
+          margin-right: 0;
+        }
+      }
+    }
+  }
+
+  .batch-section {
+    margin-bottom: 20px;
+
+    .batch-actions {
+      display: flex;
+      gap: 10px;
+      align-items: center;
+    }
+  }
+
+  .overview-section {
+    margin-bottom: 20px;
+
+    .stat-card {
+      .stat-content {
+        display: flex;
+        align-items: center;
+        gap: 20px;
+
+        .stat-icon {
+          width: 60px;
+          height: 60px;
+          border-radius: 12px;
+          display: flex;
+          align-items: center;
+          justify-content: center;
+
+          i {
+            font-size: 28px;
+          }
+        }
+
+        .stat-info {
+          flex: 1;
+
+          .stat-title {
+            font-size: 14px;
+            color: #606266;
+            margin-bottom: 8px;
+          }
+
+          .stat-value {
+            font-size: 24px;
+            font-weight: 600;
+            color: #303133;
+          }
+        }
+      }
+    }
+  }
+
+  .list-section {
+    .exception-table {
+      ::v-deep .el-table__header-wrapper {
+        th {
+          background-color: #f8f9fa;
+          font-weight: 600;
+          color: #333;
+        }
+      }
+
+      .question-content {
+        .question-text {
+          display: block;
+          font-size: 14px;
+          color: #303133;
+          margin-bottom: 8px;
+          line-height: 1.5;
+        }
+
+        .question-tags {
+          display: flex;
+          gap: 5px;
+          justify-content: center;
+        }
+      }
+
+      .dept-list {
+        display: flex;
+        flex-direction: column;
+        gap: 5px;
+        align-items: center;
+
+        .dept-tag {
+          margin: 2px 0;
+        }
+      }
+
+      .fill-statistics {
+        .stat-item {
+          display: flex;
+          justify-content: space-between;
+          align-items: center;
+          margin-bottom: 5px;
+          padding: 2px 0;
+
+          .stat-label {
+            font-size: 12px;
+            color: #606266;
+          }
+
+          .stat-value {
+            font-size: 14px;
+            font-weight: 500;
+            color: #333;
+          }
+
+          .exception-count {
+            color: #e6a23c;
+            font-weight: 600;
+          }
+        }
+      }
+
+      .exception-tasks {
+        display: flex;
+        justify-content: space-around;
+        align-items: center;
+
+        .task-category {
+          text-align: center;
+          padding: 5px 8px;
+          border-radius: 6px;
+          min-width: 70px;
+
+          .task-title {
+            font-size: 12px;
+            color: #606266;
+            margin-bottom: 5px;
+          }
+
+          .task-count {
+            font-size: 18px;
+            font-weight: 600;
+            line-height: 1;
+
+            &.processed {
+              color: #67c23a;
+            }
+
+            &.pending {
+              color: #e6a23c;
+            }
+
+            &.total {
+              color: #5788FE;
+            }
+          }
+        }
+      }
+
+      .last-process {
+        .process-time {
+          font-size: 12px;
+          color: #606266;
+          margin-bottom: 4px;
+        }
+
+        .process-user {
+          font-size: 13px;
+          color: #5788FE;
+          font-weight: 500;
+        }
+      }
+
+      .no-process {
+        color: #909399;
+        font-style: italic;
+      }
+    }
+
+    .pagination-section {
+      display: flex;
+      justify-content: center;
+      padding: 20px 0 0 0;
+    }
+  }
+}
+
+@media (max-width: 768px) {
+  .exception-list {
+    padding: 10px;
+
+    .search-section {
+      .search-form {
+        ::v-deep .el-form-item {
+          width: 100%;
+          margin-right: 0;
+          margin-bottom: 10px;
+        }
+      }
+    }
+
+    .overview-section {
+      .el-row {
+        margin-left: 0;
+        margin-right: 0;
+
+        .el-col {
+          padding-left: 0;
+          padding-right: 0;
+          margin-bottom: 10px;
+        }
+      }
+    }
+  }
+}
+</style>
diff --git a/src/views/Satisfaction/sfstatistics/components/FollowupStatistics.vue b/src/views/Satisfaction/sfstatistics/components/FollowupStatistics.vue
index 1b59b49..8de4434 100644
--- a/src/views/Satisfaction/sfstatistics/components/FollowupStatistics.vue
+++ b/src/views/Satisfaction/sfstatistics/components/FollowupStatistics.vue
@@ -199,7 +199,7 @@
                 scope.row.followUpRate !== undefined
               "
             >
-              {{ formatPercent(scope.row.followUpRate) }}
+              {{ scope.row.followUpRate }}
             </span>
             <span v-else>-</span>
           </template>
diff --git a/src/views/Satisfaction/sfstatistics/components/visitStatistics.vue b/src/views/Satisfaction/sfstatistics/components/visitStatistics.vue
index 60a1c59..1b77e5a 100644
--- a/src/views/Satisfaction/sfstatistics/components/visitStatistics.vue
+++ b/src/views/Satisfaction/sfstatistics/components/visitStatistics.vue
@@ -199,7 +199,7 @@
                 scope.row.followUpRate !== undefined
               "
             >
-              {{ formatPercent(scope.row.followUpRate) }}
+              {{ scope.row.followUpRate }}
             </span>
             <span v-else>-</span>
           </template>
diff --git a/src/views/followvisit/record/detailpage/index.vue b/src/views/followvisit/record/detailpage/index.vue
index 70752cc..0d8c44c 100644
--- a/src/views/followvisit/record/detailpage/index.vue
+++ b/src/views/followvisit/record/detailpage/index.vue
@@ -129,9 +129,7 @@
                 >
               </div>
               <div v-if="scope.row.sendstate == 7">
-                <el-tag type="danger" :disable-transitions="false"
-                  >瓒呮椂</el-tag
-                >
+                <el-tag type="danger" :disable-transitions="false">瓒呮椂</el-tag>
               </div>
             </template>
           </el-table-column>
@@ -1060,7 +1058,7 @@
                 align="right"
                 v-model="form.date1"
                 class="custom-disabled"
-                value-format="yyyy-MM-dd"
+                value-format="yyyy-MM-dd hh:mm:ss"
                 @change="checkFollowupDate"
               ></el-date-picker>
             </el-form-item>
@@ -2450,7 +2448,7 @@
           this.form.remark =
             this.form.remark + "銆�" + this.getCurrentTime() + "銆�";
           let form = structuredClone(this.form);
-          form.visitTime = this.formatTime(form.date1);
+          form.visitTime = this.parseTime(form.date1);
           form.finishtime = "";
           if (form.resource) {
             if (form.resource == 2) {
diff --git a/src/views/sfstatistics/percentage/index.vue b/src/views/sfstatistics/percentage/index.vue
index f94291b..5cad6ba 100644
--- a/src/views/sfstatistics/percentage/index.vue
+++ b/src/views/sfstatistics/percentage/index.vue
@@ -1069,7 +1069,7 @@
             :total="patienttotal"
             :page.sync="patientqueryParams.pn"
             :limit.sync="patientqueryParams.ps"
-            @pagination="Seedetails"
+            @pagination="Seedetailstion"
           />
         </div>
       </div>
@@ -1298,13 +1298,6 @@
               </el-table>
             </div>
           </el-row>
-          <pagination
-            v-show="patienttotal > 0 && this.patientqueryParams.allhosp != 6"
-            :total="patienttotal"
-            :page.sync="patientqueryParams.pn"
-            :limit.sync="patientqueryParams.ps"
-            @pagination="Seedetails"
-          />
         </div>
       </div>
     </el-dialog>
@@ -1990,6 +1983,13 @@
         this.Seedloading = false;
       });
     },
+    Seedetailstion() {
+      selectTimelyRate(this.patientqueryParams).then((response) => {
+        this.logsheetlist = response.data.detail;
+        this.patienttotal = response.data.total;
+        this.Seedloading = false;
+      });
+    },
     viewDetails(row, title) {
       this.infotitleVisible = true;
       this.infotitle = title;

--
Gitblit v1.9.3