| | |
| | | > |
| | | 批量提交处理 |
| | | </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> |
| | |
| | | > |
| | | 筛选 |
| | | </el-button> |
| | | <el-button |
| | | icon="el-icon-refresh" |
| | | @click="handleResetFilter" |
| | | > |
| | | <el-button icon="el-icon-refresh" @click="handleResetFilter"> |
| | | 重置 |
| | | </el-button> |
| | | </el-form-item> |
| | |
| | | @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="序号" |
| | |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column |
| | | label="患者信息" |
| | | width="300" |
| | | align="center" |
| | | > |
| | | <el-table-column label="患者信息" width="300" align="center"> |
| | | <template slot-scope="{ row }"> |
| | | <div class="patient-info"> |
| | | <div class="patient-item"> |
| | |
| | | </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> |
| | |
| | | </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"> |
| | |
| | | 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> |
| | |
| | | |
| | | <el-table-column |
| | | label="操作" |
| | | width="180" |
| | | width="210" |
| | | align="center" |
| | | fixed="right" |
| | | > |
| | |
| | | :file-list="fileList" |
| | | > |
| | | <el-button size="small" type="primary">点击上传</el-button> |
| | | <div slot="tip" class="el-upload__tip">支持上传图片、文档等附件,单个文件不超过10MB</div> |
| | | <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 type="primary" @click="submitProcess" :loading="processing"> |
| | | 提交处理 |
| | | </el-button> |
| | | </span> |
| | |
| | | </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: "异常反馈详情", |
| | | // 当前处理的异常ID |
| | | currentExceptionId: null, |
| | | |
| | |
| | | |
| | | // 过滤参数 |
| | | filterParams: { |
| | | deptId: '', |
| | | status: '', |
| | | deptId: "", |
| | | status: "", |
| | | pageNum: 1, |
| | | pageSize: 10 |
| | | pageSize: 10, |
| | | }, |
| | | |
| | | // 加载状态 |
| | |
| | | |
| | | // 科室列表 |
| | | 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: "内分泌科" }, |
| | | ], |
| | | |
| | | // 异常列表数据 |
| | |
| | | // 处理对话框 |
| | | 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: "", |
| | | }, |
| | | }; |
| | | }, |
| | | |
| | |
| | | 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(); |
| | |
| | | // 获取状态标签类型 |
| | | 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 "未知"; |
| | | } |
| | | }, |
| | | |
| | |
| | | // 重置筛选 |
| | | 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; |
| | |
| | | |
| | | // 返回异常列表 |
| | | 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; |
| | | }, |
| | |
| | | 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 { |
| | |
| | | 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(); |
| | |
| | | |
| | | // 文件上传相关方法 |
| | | handlePreview(file) { |
| | | console.log('预览文件:', file); |
| | | console.log("预览文件:", file); |
| | | }, |
| | | |
| | | handleRemove(file, fileList) { |
| | | console.log('移除文件:', file, fileList); |
| | | console.log("移除文件:", file, fileList); |
| | | }, |
| | | |
| | | beforeRemove(file) { |
| | |
| | | }, |
| | | |
| | | handleExceed(files, fileList) { |
| | | this.$message.warning(`当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`); |
| | | } |
| | | } |
| | | this.$message.warning( |
| | | `当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${ |
| | | files.length + fileList.length |
| | | } 个文件` |
| | | ); |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | |
| | | .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; |
| | | |