liusheng
2 天以前 bbbc478129f72b26e2ec4a2e981ed8698a96880c
src/views/Satisfaction/sfstatistics/components/DataOverview.vue
@@ -3,6 +3,19 @@
    <!-- 顶部筛选:时间范围 + 科室/病区,控制本页所有数据 -->
    <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"
@@ -497,11 +510,14 @@
  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=按科室统计
@@ -553,6 +569,11 @@
    // 未选病区时的默认查询范围:全部病区编码
    defaultWardCodes() {
      return Array.from(new Set(this.wardOptions.map((w) => w.value)));
    },
    // 是否按「在院满意度」口径查询:在院满意度用 deptcodes/hospitaldistrictcodes,
    // 离院满意度(以及清空下拉时的默认口径)用 leaveldeptcodes/leavehospitaldistrictcodes
    isInHospitalSatisfaction() {
      return this.satisfactionScope === "hospital";
    },
    // 未选科室时的默认查询范围:全部科室编码
    defaultDeptCodes() {
@@ -828,8 +849,10 @@
        return;
      }
      // 病区 => leavehospitaldistrictcodes,科室 => leaveldeptcodes
      // 科室/病区互斥:按病区只传 leavehospitaldistrictcodes,按科室只传 leaveldeptcodes
      // 科室/病区条件随「满意度类型」切换:
      // 在院满意度 => deptcodes / hospitaldistrictcodes(在院科室、在院病区)
      // 离院满意度 => leaveldeptcodes / leavehospitaldistrictcodes(离院科室、离院病区)
      // 科室/病区互斥:按病区只传病区编码,按科室只传科室编码
      const wards = this.queryParams.wardCodes || [];
      const depts = this.queryParams.deptCodes || [];
@@ -839,13 +862,23 @@
        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.leaveldeptcodes = deptCodes;
        }
      } else {
        payload.leavehospitaldistrictcodes = wards.length
        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 || [];
@@ -892,10 +925,17 @@
        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(