| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <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="æ£è
ä¿¡æ¯" 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="210" |
| | | 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"> |
| | | æ¯æä¸ä¼ å¾çãææ¡£çéä»¶ï¼å个æä»¶ä¸è¶
è¿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> |
| | | <!-- å¼å¸¸è¯¦æ
å¼¹æ¡ --> |
| | | <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", |
| | | components: { |
| | | DetailsAnomaly, |
| | | }, |
| | | data() { |
| | | return { |
| | | // æ·»å 以䏿°æ® |
| | | detailDialogVisible: false, |
| | | selectedRecordId: null, |
| | | detailDialogTitle: "å¼å¸¸åé¦è¯¦æ
", |
| | | // å½åå¤ççå¼å¸¸ID |
| | | currentExceptionId: null, |
| | | |
| | | // æ¹ééä¸çå¼å¸¸ID |
| | | 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.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: "", |
| | | }; |
| | | 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> |