| | |
| | | <!-- 顶部筛选:时间范围 + 科室/病区,控制本页所有数据 --> |
| | | <el-card shadow="never" class="overview-card filter-card"> |
| | | <el-form inline class="filter-form"> |
| | | <el-form-item label="满意度类型"> |
| | | <el-select |
| | | v-model="satisfactionScope" |
| | | size="small" |
| | | style="width: 140px" |
| | | clearable |
| | | placeholder="默认离院" |
| | | @change="fetchData" |
| | | > |
| | | <el-option label="离院满意度" value="leave" /> |
| | | <el-option label="在院满意度" value="hospital" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="出院日期"> |
| | | <el-date-picker |
| | | v-model="queryParams.dateRange" |
| | |
| | | name: "DataOverview", |
| | | data() { |
| | | return { |
| | | // 满意度类型:leave=离院满意度(离院科室/病区),hospital=在院满意度(在院科室/病区) |
| | | satisfactionScope: "leave", |
| | | // 顶部全局筛选 |
| | | queryParams: { |
| | | dateRange: [], |
| | | deptCodes: [], // 科室编码集合 => leaveldeptcodes |
| | | wardCodes: [], // 出院病区编码集合 => leavehospitaldistrictcodes(接口必填) |
| | | // 病区编码集合:住院满意度按在院病区(hospitaldistrictcodes),其余按出院病区(leavehospitaldistrictcodes) |
| | | wardCodes: [], |
| | | serviceTypeList: [], // 服务类型多选,提交时用逗号拼接 |
| | | deptOrDistrict: "1", // 科室/病区组合方式,默认 1:离院病区 and 离院科室 |
| | | statMode: "ward", // 统计维度:ward=按病区统计 dept=按科室统计 |
| | |
| | | // 未选病区时的默认查询范围:全部病区编码 |
| | | defaultWardCodes() { |
| | | return Array.from(new Set(this.wardOptions.map((w) => w.value))); |
| | | }, |
| | | // 是否按「在院满意度」口径查询:在院满意度用 deptcodes/hospitaldistrictcodes, |
| | | // 离院满意度(以及清空下拉时的默认口径)用 leaveldeptcodes/leavehospitaldistrictcodes |
| | | isInHospitalSatisfaction() { |
| | | return this.satisfactionScope === "hospital"; |
| | | }, |
| | | // 未选科室时的默认查询范围:全部科室编码 |
| | | defaultDeptCodes() { |
| | |
| | | return; |
| | | } |
| | | |
| | | // 病区 => leavehospitaldistrictcodes,科室 => leaveldeptcodes |
| | | // 科室/病区互斥:按病区只传 leavehospitaldistrictcodes,按科室只传 leaveldeptcodes |
| | | // 科室/病区条件随「满意度类型」切换: |
| | | // 在院满意度 => deptcodes / hospitaldistrictcodes(在院科室、在院病区) |
| | | // 离院满意度 => leaveldeptcodes / leavehospitaldistrictcodes(离院科室、离院病区) |
| | | // 科室/病区互斥:按病区只传病区编码,按科室只传科室编码 |
| | | const wards = this.queryParams.wardCodes || []; |
| | | const depts = this.queryParams.deptCodes || []; |
| | | |
| | |
| | | endFinishTime: range[1], |
| | | }; |
| | | if (this.queryParams.statMode === "dept") { |
| | | payload.leaveldeptcodes = depts.length |
| | | const deptCodes = depts.length |
| | | ? Array.from(new Set(depts)) |
| | | : this.defaultDeptCodes; |
| | | if (this.isInHospitalSatisfaction) { |
| | | payload.deptcodes = deptCodes; |
| | | } else { |
| | | payload.leavehospitaldistrictcodes = wards.length |
| | | payload.leaveldeptcodes = deptCodes; |
| | | } |
| | | } else { |
| | | const wardCodes = wards.length |
| | | ? Array.from(new Set(wards)) |
| | | : this.defaultWardCodes; |
| | | if (this.isInHospitalSatisfaction) { |
| | | payload.hospitaldistrictcodes = wardCodes; |
| | | } else { |
| | | payload.leavehospitaldistrictcodes = wardCodes; |
| | | } |
| | | } |
| | | // 服务类型多选:逗号分隔(接口字段为 serviceType 字符串) |
| | | const serviceTypes = this.queryParams.serviceTypeList || []; |
| | |
| | | endFinishTime: range[1], |
| | | }; |
| | | try { |
| | | // 按科室统计(leaveldeptcodes 优先)与按病区统计(leavehospitaldistrictcodes)各查一次 |
| | | // 按科室统计、按病区统计各查一次,条件随「满意度类型」切换: |
| | | // 在院满意度 => deptcodes / hospitaldistrictcodes;离院满意度 => leaveldeptcodes / leavehospitaldistrictcodes |
| | | const deptParam = this.isInHospitalSatisfaction |
| | | ? { deptcodes: this.defaultDeptCodes } |
| | | : { leaveldeptcodes: this.defaultDeptCodes }; |
| | | const wardParam = this.isInHospitalSatisfaction |
| | | ? { hospitaldistrictcodes: this.defaultWardCodes } |
| | | : { leavehospitaldistrictcodes: this.defaultWardCodes }; |
| | | const [deptRes, wardRes] = await Promise.all([ |
| | | statQuestionOptionByKsOrBq({ ...base, leaveldeptcodes: this.defaultDeptCodes }), |
| | | statQuestionOptionByKsOrBq({ ...base, leavehospitaldistrictcodes: this.defaultWardCodes }), |
| | | statQuestionOptionByKsOrBq({ ...base, ...deptParam }), |
| | | statQuestionOptionByKsOrBq({ ...base, ...wardParam }), |
| | | ]); |
| | | // 排查用:打印接口原始返回,便于核对两级嵌套 Map 结构(确认无误后可删除) |
| | | console.log( |