diff --git a/src/api/cases/index.js b/src/api/cases/index.js index a6366b4..1c84cfc 100644 --- a/src/api/cases/index.js +++ b/src/api/cases/index.js @@ -67,4 +67,12 @@ export function postReportEdit(data) { method: 'post', data: data }) -} \ No newline at end of file +} +// 修改预约时间 +export function postReportTimeSectionEdit(data) { + return request({ + url: '/report/time_section/edit', + method: 'post', + data: data + }) +} diff --git a/src/views/cases/index.vue b/src/views/cases/index.vue index 206b9c1..df1f3f3 100644 --- a/src/views/cases/index.vue +++ b/src/views/cases/index.vue @@ -48,23 +48,19 @@ - + @@ -80,37 +76,32 @@ - + @@ -219,6 +210,7 @@ :data="caseList" border height="calc(100vh - 300px)" + @row-dblclick="handleView" > - - - + /> - + - + - + - + - + - + - + - + - + - + - + - - + + + v-for="item in expertIdsList" + :key="item.id" + :label="item.name" + :value="item.id" + > + {{ item.name }} + + {{ item.username }} + + - + - - + + - - {{ item.label }} - - {{ item.category }} - - + + + - + - + @@ -688,9 +657,9 @@ type="date" value-format="yyyy-MM-dd" placeholder="请选择预约日期" - @change="handleDateChange" style="width: 100%" clearable + :disabled="isEditMode" /> @@ -705,10 +674,10 @@ > @@ -728,10 +697,12 @@ import { postReportExamRoomList, postReportTemplateTree, postReportEquipmentList, + postReportTimeSections, postReportCreate, postReportInfo, - postReportEdit, + postReportTimeSectionEdit, } from "@/api/cases/index.js"; +import { searchUsers } from "@/api/contacts/index.js"; export default { name: "Case", data() { @@ -760,6 +731,7 @@ export default { { label: "男", value: 1 }, { label: "女", value: 2 }, ], + // 年龄单位 patientAgeTypeList: [ { label: "岁", value: 0 }, { label: "月", value: 1 }, @@ -775,10 +747,16 @@ export default { { label: "急诊", value: 1 }, { label: "住院", value: 2 }, ], + // 专家 + expertIdsList: [], // 检查设备 - equipmentList: [], + equipmentsList: [], + // 检查部位 + templatesList: [], // 检查诊室 - examRoomList: [], + examRoomsList: [], + // 预约时间 + timeSectionList: [], // 病例类型 reportTypeList: [ { label: "本院报告", value: 1 }, @@ -787,11 +765,10 @@ export default { ], // 检查结果 negativeList: [ - // { label: "全部", value: -1 }, + { label: "全部", value: -1 }, { label: "阳性", value: 0 }, { label: "阴性", value: 1 }, ], - statusList: [ { label: "新建", value: 1 }, { label: "暂存", value: 5 }, @@ -799,34 +776,9 @@ export default { { label: "驳回", value: 15 }, { label: "已完成", value: 20 }, ], - - templateTree: [], - doctorList: [ - { label: "专家1", value: "1" }, - { label: "专家2", value: "2" }, - ], - - body_textList: [ - { label: "肝脏", value: "1", category: "腹部" }, - { label: "胆囊", value: "2", category: "腹部" }, - { label: "胰腺", value: "3", category: "腹部" }, - { label: "肾脏", value: "4", category: "腹部" }, - { label: "脾脏", value: "5", category: "腹部" }, - { label: "腹部血管", value: "6", category: "腹部" }, - { label: "子宫", value: "7", category: "子宫" }, - { label: "颈部血管", value: "8", category: "外周血管" }, - { label: "上肢血管", value: "9", category: "外周血管" }, - { label: "下肢血管", value: "10", category: "外周血管" }, - { label: "产科", value: "11", category: "产科" }, - { label: "甲状腺", value: "12", category: "甲状腺" }, - { label: "乳腺", value: "13", category: "乳腺" }, - { label: "睾丸", value: "14", category: "睾丸" }, - { label: "泌尿", value: "15", category: "泌尿" }, - { label: "心脏", value: "16", category: "心脏" }, - { label: "其它", value: "17", category: "其它" }, - { label: "眼科", value: "18", category: "眼科" }, - ], - availableTimeSlots: [], + // 查询参数 + timeType: "date_time", + date: [], datePickerOptions: { shortcuts: [ { @@ -894,39 +846,105 @@ export default { }, ], }, - // 查询参数 - timeType: "date_time", - date: [], queryParams: { page: 1, size: 10, total: 0, + create_time_start: "", + create_time_end: "", + review_time_start: "", + review_time_end: "", + date_time_start: "", + date_time_end: "", patient_type: -1, - exam_room_id: "", + exam_room: "", body_text: "", - equipment_ids: [], + equipment: "", reporter_name: "", reviewer_name: "", - report_type: 0, + report_type: 1, patient_name: "", patient_id: "", negative: -1, - create_time_start: "", - create_time_end: "", - review_time_start: "", - review_time_end: "", - date_time_start: "", - date_time_end: "", }, // 表单参数 - form: {}, + form: { + // 患者姓名* + patient_name: "", + // 性别* + patient_sex: "", + // 年龄* + patient_age: "", + // 年龄类型* + patient_age_type: "", + // 病例号* + patient_id: "", + // 检查类型* + patient_type: "", + // 门诊号 + outpatient_number: "", + // 住院号 + hospitalization_number: "", + // 病区号 + area_number: "", + // 床位号 + bed_number: "", + // 申请医生 + request_doctor: "", + // 专家 + expert_ids: [], + // 检查设备 + equipments: [], + // 检查部位 + templates: [], + // 检查诊室 + exam_rooms: [], + // 自定义部位 + position_text: "", + // 预约日期 + date_time: "", + // 预约时间 + time_section: "", + // 备注 + comment: "", + // 患者电话 + patient_phone: "", + // 会诊ID + consultation_id: 0, + // 离线会诊ID + off_consultation_id: 0, + }, // 表单校验 rules: { - patientName: [ + patient_name: [ { required: true, message: "患者姓名不能为空", trigger: "blur" }, + { + min: 2, + max: 50, + message: "患者姓名长度必须在2到50个字符之间", + trigger: "blur", + }, ], - patientRecordNumber: [ + patient_age: [ + { required: true, message: "年龄不能为空", trigger: "change" }, + ], + patient_age_type: [ + { required: true, message: "年龄类型不能为空", trigger: "change" }, + ], + patient_sex: [ + { required: true, message: "性别不能为空", trigger: "change" }, + ], + patient_id: [ { required: true, message: "病例号不能为空", trigger: "blur" }, + { + min: 0, + max: 50, + message: "病例号长度必须在0到50个字符之间", + trigger: "blur", + }, + ], + patient_type: [ + { required: true, message: "检查类型不能为空", trigger: "change" }, ], }, }; @@ -938,20 +956,24 @@ export default { methods: { // 初始化数据字典 initDataDictionaries() { + this.loadExpertIdsList(); this.loadExamRooms(); this.loadEquipments(); this.loadTemplateTree(); }, - // 检查诊室列表 - loadExamRooms() { - postReportExamRoomList({}) + // 加载专家列表 + loadExpertIdsList() { + searchUsers({ + role_id: 1, + size: 99999, + }) .then((response) => { if (response.code === 200 && response.data) { - this.examRoomList = response.data; + this.expertIdsList = response.data.list; } }) .catch((error) => { - console.error("加载检查诊室列表失败:", error); + console.error("加载专家列表失败:", error); }); }, // 加载检查设备列表 @@ -959,132 +981,49 @@ export default { postReportEquipmentList({}) .then((response) => { if (response.code === 200 && response.data) { - this.equipmentList = response.data; + this.equipmentsList = response.data; } }) .catch((error) => { console.error("加载检查设备列表失败:", error); }); }, - // 查询列表 - getList() { - this.loading = true; - postReportList(this.queryParams) - .then((response) => { - (this.caseList = [ - { - id: 61141, - patient_id: "病区号", - patient_name: "患者姓名", - patient_sex: 1, - patient_age: 3, - patient_age_type: 0, - patient_number: "", - number: "HJ2026052817270301", - outpatient_number: "门诊号", - request_doctor: "申请医师", - hospitalization_number: "住院号", - area_number: "病区号", - bed_number: "床位号", - patient_type: 0, - patient_phone: "", - comment: "", - position_text: "自定义部位", - print: 0, - negative: 1, - status: 1, - status_comment: "", - reporter_id: 688, - reviewer_id: 0, - review_time: "", - create_time: "2026-05-28 17:27:03", - date_time: "2026-05-28", - time_section: "08:00-08:10", - reporter_name: "会诊专家测试01", - reviewer_name: "", - positions: [ - { - level1: { - template_id: 1, - name: "腹部", - }, - level2: { - template_id: 2, - name: "肝脏", - }, - }, - ], - exam_rooms: [ - { - id: 6, - name: "我的诊室", - }, - ], - }, - ]), - (this.queryParams.total = response.data.total); - console.log("病例库", response.data); - this.loading = false; - }) - .catch(() => { - this.caseList = []; - this.queryParams.total = 0; - this.loading = false; - }); - }, - // 获取年龄单位 - getAgeUnit(type) { - const unit = this.patientAgeTypeList.find((i) => i.value == type); - return unit ? unit.label : ""; - }, - - // 加载检查部位模板树 + // 加载检查部位 loadTemplateTree() { postReportTemplateTree({}) .then((response) => { if (response.code === 200 && response.data) { - this.templateTree = response.data; - this.buildBodyTextList(response.data); + this.templatesList = response.data; } }) .catch((error) => { console.error("加载检查部位模板树失败:", error); }); }, - // 构建检查部位列表 - buildBodyTextList(treeData) { - const flatList = []; - const flatten = (items, parentName = "") => { - items.forEach((item) => { - if (item.children && item.children.length > 0) { - flatten(item.children, item.name); - } else { - flatList.push({ - label: item.name, - value: item.id.toString(), - category: parentName || item.level1?.name || "", - level1: item.level1, - level2: item.level2, - }); + // 检查诊室列表 + loadExamRooms() { + postReportExamRoomList({}) + .then((response) => { + if (response.code === 200 && response.data) { + this.examRoomsList = response.data; } + }) + .catch((error) => { + console.error("加载检查诊室列表失败:", error); }); - }; - flatten(treeData); - this.body_textList = flatList; - }, - cancel() { - this.open = false; }, - // 表单重置 - reset() { - this.form = {}; - this.resetForm("form"); + // 选择检查室后,根据日期和检查室获取可用时间槽 + handleExamRoomsChange(exam_rooms_id) { + this.form.time_section = ""; + if (this.form.date_time) this.fetchTimeSlots(exam_rooms_id[0]); + else this.timeSectionList = []; }, - // 搜索按钮操作 - handleQuery() { - this.queryParams.page = 1; - this.buildTimeRangeParams(); - this.getList(); + async fetchTimeSlots(exam_rooms_id) { + postReportTimeSections({ exam_room_id: exam_rooms_id }).then( + (response) => { + this.timeSectionList = response.data || []; + } + ); }, // 构建时间范围参数 buildTimeRangeParams() { @@ -1101,6 +1040,12 @@ export default { this.queryParams[`${this.timeType}_end`] = this.date[1]; } }, + // 搜索按钮操作 + handleQuery() { + this.queryParams.page = 1; + this.buildTimeRangeParams(); + this.getList(); + }, // 重置按钮操作 resetQuery() { this.resetForm("queryForm"); @@ -1111,137 +1056,76 @@ export default { // this.queryParams.report_type = this.reportTypeList[0].value; this.handleQuery(); }, + // 查询列表 + getList() { + this.loading = true; + postReportList(this.queryParams) + .then((response) => { + this.caseList = response.data?.list || []; + this.queryParams.total = response.data.total; + console.log("病例库", response.data); + this.loading = false; + }) + .catch(() => { + this.caseList = []; + this.queryParams.total = 0; + this.loading = false; + }); + }, + cancel() { + this.open = false; + }, // 新增按钮操作 handleAdd() { this.reset(); const today = new Date().toISOString().split("T")[0]; this.form = { - gender: this.patientSexList[0].value, - patient_type: this.patientTypeList[0].value, - ageUnit: this.patientAgeTypeList[0].value, + patient_sex: this.patientSexList[0].value, + patient_type: this.patientTypeList[1].value, + patient_age_type: this.patientAgeTypeList[0].value, date_time: today, }; this.open = true; this.title = "新增病例"; this.isEditMode = false; }, - // 修改按钮操作 - handleUpdate(row) { + // 修改预约时间按钮操作 + handleTimeSectionUpdate(row) { this.reset(); - // postReportInfo({ report_id: row.id }).then((response) => { - this.form = { - id: 61141, - patient_id: "病区号", - patient_name: "患者姓名", - patient_sex: 1, - patient_age: 3, - patient_age_type: 0, - patient_number: "", - number: "HJ2026052817270301", - outpatient_number: "门诊号", - request_doctor: "申请医师", - hospitalization_number: "住院号", - area_number: "病区号", - bed_number: "床位号", - patient_type: 0, - patient_phone: "", - comment: "", - position_text: "自定义部位", - extend_json: "", - consultation_id: 0, - off_consultation_id: 0, - print: 0, - negative: 1, - status: 1, - status_comment: "", - group_id: 23, - hospital_id: 23, - p_code: "37", - c_code: "3702", - a_code: "370202", - reporter_id: 688, - reviewer_id: 0, - del_flag: 0, - review_time: "", - date_time: "2026-05-28", - time_section: "08:00-08:10", - pstkey: null, - hmac: "", - create_time: "2026-05-28 17:27:03", - update_time: "2026-05-28 17:27:03", - positions: [ - { - level1: { - template_id: 1, - name: "腹部", - }, - level2: { - template_id: 2, - name: "肝脏", - }, - }, - ], - equipments: [ - { - id: 25, - name: "测试B超检测设备", - }, - ], - exam_rooms: [ - { - id: 6, - name: "我的诊室", - }, - ], - text_comment: "", - text_conclusion: "", - attachment: [], - reporter_name: "会诊专家测试01", - reporter_signature: "", - reporter_sign_hash: "", - reviewer_name: "", - reviewer_signature: "", - reviewer_sign_hash: "", - experts: [ - { - expert_id: 10, - expert_name: "测试01", - user_comment: "", - confirm: 0, - signature: "", - sign_hash: "", - comment_time: "2026-05-28 17:27:03", - }, - ], - }; - this.open = true; - this.title = "修改病例"; - this.isEditMode = true; - // }); + postReportInfo({ report_id: row.id }).then((response) => { + this.fetchTimeSlots(response.data.exam_rooms[0].id); + this.form = response.data || {}; + this.open = true; + this.title = "修改预约时间"; + this.isEditMode = true; + }); }, // 提交按钮 submitForm() { this.$refs["form"].validate((valid) => { if (valid) { - const formData = this.buildCaseFormData(); if (this.form.id != undefined) { // 修改病例 - postReportEdit(formData) + postReportTimeSectionEdit({ + date_time: this.form.date_time, + report_id: this.form.id, + time_section: this.form.time_section, + }) .then((response) => { if (response.code === 200) { - this.$modal.msgSuccess("修改成功"); + this.$modal.msgSuccess("预约时间修改成功"); this.open = false; this.getList(); } else { - this.$modal.msgError(response.msg || "修改失败"); + this.$modal.msgError(response.msg || "预约时间修改成功失败"); } }) .catch(() => { - this.$modal.msgError("修改失败"); + this.$modal.msgError("预约时间修改成功失败"); }); } else { // 新增病例 - postReportCreate(formData) + postReportCreate(this.form) .then((response) => { if (response.code === 200) { this.$modal.msgSuccess("新增成功"); @@ -1262,101 +1146,10 @@ export default { } }); }, - // 构建病例表单数据 - buildCaseFormData() { - const form = { ...this.form }; - // 转换字段名以匹配API要求 - if (form.patientName !== undefined) form.patient_name = form.patientName; - if (form.gender !== undefined) form.patient_sex = parseInt(form.gender); - if (form.age !== undefined) form.patient_age = parseInt(form.age); - if (form.ageUnit !== undefined) - form.patient_age_type = parseInt(form.ageUnit); - if (form.patientRecordNumber !== undefined) - form.patient_id = form.patientRecordNumber; - if (form.checkType !== undefined) - form.patient_type = parseInt(form.checkType); - if (form.outpatient_number !== undefined) - form.outpatient_number = form.outpatient_number; - if (form.inpatientNumber !== undefined) - form.hospitalization_number = form.inpatientNumber; - if (form.wardNumber !== undefined) form.area_number = form.wardNumber; - if (form.bedNumber !== undefined) form.bed_number = form.bedNumber; - if (form.applyDoctor !== undefined) - form.request_doctor = form.applyDoctor; - if (form.checkRoom !== undefined) - form.exam_room_id = parseInt(form.checkRoom); - if (form.customPart !== undefined) form.position_text = form.customPart; - if (form.date_time !== undefined) form.date_time = form.date_time; - if (form.time_section !== undefined) - form.time_section = form.time_section; - return form; - }, - // 选择检查室后,根据日期和检查室获取可用时间槽 - handleexam_roomChange(roomId) { - this.form.time_section = ""; - if (roomId && this.form.date_time) - this.fetchTimeSlots(roomId, this.form.date_time); - else this.availableTimeSlots = []; - }, - handleDateChange(date) { - this.form.time_section = ""; - if (this.form.exam_room && date) - this.fetchTimeSlots(this.form.exam_room, date); - else this.availableTimeSlots = []; - }, - async fetchTimeSlots(roomId) { - const mockData = { - 1: [ - { label: "13:30-14:00", value: "13:30-14:00" }, - { label: "14:00-14:30", value: "14:00-14:30" }, - { label: "14:30-15:00", value: "14:30-15:00" }, - { label: "15:00-15:30", value: "15:00-15:30" }, - ], - 2: [ - { label: "09:00-09:30", value: "09:00-09:30" }, - { label: "09:30-10:00", value: "09:30-10:00" }, - { label: "10:00-10:30", value: "10:00-10:30" }, - { label: "10:30-11:00", value: "10:30-11:00" }, - ], - }; - this.availableTimeSlots = mockData[roomId] || []; - }, - getTimeSlots(roomId) { - const mockData = { - 1: [ - { label: "13:30-14:00", value: "13:30-14:00" }, - { label: "14:00-14:30", value: "14:00-14:30" }, - { label: "14:30-15:00", value: "14:30-15:00" }, - { label: "15:00-15:30", value: "15:00-15:30" }, - ], - 2: [ - { label: "09:00-09:30", value: "09:00-09:30" }, - { label: "09:30-10:00", value: "09:30-10:00" }, - { label: "10:00-10:30", value: "10:00-10:30" }, - { label: "10:30-11:00", value: "10:30-11:00" }, - ], - }; - return mockData[roomId] || []; - }, - // 选择预约时间后,更新预约时间 - handletime_sectionChange(row) { - const updateData = { - id: row.id, - date_time: row.date_time, - time_section: row.time_section, - }; - updateCase(updateData) - .then((response) => { - if (response.code === 200) { - this.$modal.msgSuccess("预约时间修改成功"); - this.getList(); - } else { - this.$modal.msgError(response.msg || "修改失败"); - } - }) - .catch(() => { - this.$modal.msgError("修改失败"); - }); + // 表单重置 + reset() { + this.form = {}; + this.resetForm("form"); }, // 查看按钮操作 handleView(row) {