WXL
4 天以前 871522ed7e06fd9c62a87c178d7f5c88d7853a20
pages/case/CaseDetails.vue
@@ -16,51 +16,41 @@
          </view>
          <view class="form-grid">
            <!-- 修改后:治疗医院输入框 -->
            <view class="form-item">
              <text class="item-label">案例编号</text>
              <text class="item-label required">治疗医院</text>
              <u-input
                v-model="form.caseNo"
                placeholder="上报后自动生成"
                disabled
                :disabledColor="disabledColor"
                border="none"
                v-model="form.treatmenthospitalname"
                placeholder="请输入治疗医院名称"
                maxlength="100"
                class="custom-input"
              />
            </view>
            <!-- 改造后的医疗机构选择 -->
            <!-- 新增:上报医院 -->
            <view class="form-item">
              <text class="item-label">医疗机构</text>
              <picker
                mode="selector"
                :range="hospitalLabels"
                :value="hospitalIndex"
                @change="onHospitalChange"
              >
                <view class="picker">
                  <text>{{ currentHospital }}</text>
                  <text class="icon-arrow">›</text>
                </view>
              </picker>
              <text class="item-label">上报医院</text>
              <u-input
                v-model="form.toHospital"
                placeholder="请输入上报医院"
                maxlength="100"
                class="custom-input"
              />
            </view>
            <!-- 改造后的科室选择 -->
            <!-- 新增:部门名称 -->
            <view class="form-item">
              <text class="item-label">科室</text>
              <picker
                mode="selector"
                :range="deptLabels"
                :value="deptIndex"
                @change="onDeptChange"
              >
                <view class="picker">
                  <text>{{ currentDept }}</text>
                  <text class="icon-arrow">›</text>
                </view>
              </picker>
              <text class="item-label">部门名称</text>
              <u-input
                v-model="form.deptName"
                placeholder="请输入部门名称"
                maxlength="50"
                class="custom-input"
              />
            </view>
            <view class="form-item">
              <text class="item-label required">姓名</text>
              <text class="item-label required">患者姓名</text>
              <u-input
                type="text"
                v-model="form.name"
@@ -201,7 +191,7 @@
            <view class="form-item">
              <text class="item-label">GCS评分</text>
              <u-input
                v-model="form.gscScore"
                v-model="form.gcsScore"
                placeholder="请输入GCS评分"
                border="none"
              />
@@ -225,11 +215,11 @@
                  v-for="bloodType in bloodTypeOptions"
                  :key="bloodType.value"
                  class="radio-item"
                  @click="form.bloodtype = bloodType.value"
                  @click="form.bloodType = bloodType.value"
                >
                  <view
                    class="radio-dot"
                    :class="{ active: form.bloodtype === bloodType.value }"
                    :class="{ active: form.bloodType === bloodType.value }"
                  ></view>
                  <text class="radio-label">{{ bloodType.label }}</text>
                </view>
@@ -246,7 +236,7 @@
                >
                  <view
                    class="radio-dot"
                    :class="{ active: form.bloodtype === bloodType.value }"
                    :class="{ active: form.infectious == bloodType.value }"
                  ></view>
                  <text class="radio-label">{{ bloodType.label }}</text>
                </view>
@@ -268,11 +258,11 @@
                  v-for="rh in rhOptions"
                  :key="rh.value"
                  class="radio-item"
                  @click="form.rhyin = rh.value"
                  @click="form.rhYin = rh.value"
                >
                  <view
                    class="radio-dot"
                    :class="{ active: form.rhyin === rh.value }"
                    :class="{ active: form.rhYin === rh.value }"
                  ></view>
                  <text class="radio-label">{{ rh.label }}</text>
                </view>
@@ -452,8 +442,8 @@
  ageunit: "", // 新增:年龄单位
  inpatientno: "",
  diagnosisname: "",
  bloodtype: "",
  rhyin: "",
  bloodType: "",
  rhYin: "",
  infoname: "",
  infophone: "",
  reportername: userStore.name || "",
@@ -493,6 +483,8 @@
// 选择器状态
const attachments = ref([]);
const infectiousDiseaselist = ref([]);
const nationLabel = ref([]);
const isReadonly = ref(false);
const id = ref(null);
const selectShow = ref(false);
@@ -566,7 +558,12 @@
// 计算属性
const isFormValid = computed(() => {
  return form.value.name && form.value.idcardno && form.value.diagnosisname;
  return (
    form.value.name &&
    form.value.idcardno &&
    form.value.diagnosisname &&
    form.value.toHospital
  );
});
// 选择器索引
const hospitalIndex = ref(-1);
@@ -576,11 +573,11 @@
// 计算属性 - 标签数组
const hospitalLabels = computed(() =>
  hospitalOptions.value.map((item) => item.label)
  hospitalOptions.value.map((item) => item.label),
);
const ageDisplay = computed(() => {
  if (!form.value.age || !form.value.ageunit) {
    return '自动计算';
    return "自动计算";
  }
  return `${form.value.age}${form.value.ageunit}`;
});
@@ -588,10 +585,10 @@
  return pickerColumns.value[0].map((item) => item.label);
});
const nationLabels = computed(() =>
  nationOptions.value.map((item) => item.label)
  nationLabel.value.map((item) => item.label),
);
const idCardTypeLabels = computed(() =>
  idCardTypeOptions.value.map((item) => item.label)
  idCardTypeOptions.value.map((item) => item.label),
);
// 计算属性 - 当前选中显示文本
@@ -619,22 +616,10 @@
    : "请选择证件类型";
});
// 选择器变更事件
const onHospitalChange = (e) => {
  const index = parseInt(e.detail.value);
  hospitalIndex.value = index;
  form.value.treatmenthospitalname = hospitalOptions.value[index].label;
};
const onDeptChange = (e) => {
  const index = parseInt(e.detail.value);
  deptIndex.value = index;
  form.value.treatmentdeptname = pickerColumns.value[0][index].label;
};
const onNationChange = (e) => {
  const index = parseInt(e.detail.value);
  nationIndex.value = index;
  nationIndex.value = nationOptions.value[index].label;
  form.value.nation = nationOptions.value[index].label;
};
@@ -650,12 +635,12 @@
};
const onDateConfirm = (e) => {
  const date = new Date(e.value);
  // 格式化日期为 YYYY-MM-DD
  form.value.birthday = `${date.getFullYear()}-${(date.getMonth() + 1)
    .toString()
    .padStart(2, "0")}-${date.getDate().toString().padStart(2, "0")}`;
  calculateAge();
  showDatePicker.value = false;
};
@@ -710,12 +695,12 @@
  dict.value = await useDict(
    "sys_IDType",
    "sys_user_sex",
    "sys_Nation",
    "sys_BloodType",
    "sys_Infectious",
    "sys_AgeUnit", // 新增年龄单位
    "sys_education", // 新增学历
    "sys_nation", // 新增民族
    "sys_occupation" // 新增职业
    "sys_occupation", // 新增职业
  );
  initOptions();
  updateCurrentTime();
@@ -724,6 +709,7 @@
const initOptions = () => {
  infectiousDiseaselist.value = dict.value.sys_Infectious || [];
  idCardTypeOptions.value = dict.value.sys_IDType || [];
  nationLabel.value = dict.value.sys_Nation || [];
};
// 方法定义
const updateCurrentTime = () => {
@@ -753,18 +739,18 @@
const calculateAge = () => {
  if (!form.value.birthday) {
    form.value.age = '';
    form.value.ageunit = '';
    form.value.age = "";
    form.value.ageunit = "";
    return;
  }
  const birthDate = new Date(form.value.birthday);
  const today = new Date();
  // 检查日期有效性
  if (isNaN(birthDate.getTime())) {
    form.value.age = '';
    form.value.ageunit = '';
    form.value.age = "";
    form.value.ageunit = "";
    return;
  }
@@ -774,8 +760,8 @@
  if (daysDiff < 0) {
    // 未来日期处理
    form.value.age = '';
    form.value.ageunit = '';
    form.value.age = "";
    form.value.ageunit = "";
    return;
  }
@@ -789,14 +775,14 @@
  if (years >= 1) {
    // 大于等于1年:显示年
    let actualYears = years;
    // 处理月份和日期的边界情况
    if (months < 0 || (months === 0 && days < 0)) {
      actualYears = years - 1;
    }
    ageValue = actualYears.toString();
    ageUnit = '岁';
    ageUnit = "岁";
  } else if (daysDiff >= 30) {
    // 大于等于30天:显示月
    let totalMonths = years * 12 + months;
@@ -804,11 +790,11 @@
      totalMonths--;
    }
    ageValue = Math.max(1, totalMonths).toString(); // 确保至少1个月
    ageUnit = '个月';
    ageUnit = "个月";
  } else {
    // 小于30天:显示天
    ageValue = Math.max(1, daysDiff).toString(); // 确保至少1天
    ageUnit = '天';
    ageUnit = "天";
  }
  form.value.age = ageValue;
@@ -844,7 +830,7 @@
        .map((f) =>
          f.url.startsWith("http")
            ? f.url
            : baseUrlHt + (f.url.startsWith("/") ? "" : "/") + f.url
            : baseUrlHt + (f.url.startsWith("/") ? "" : "/") + f.url,
        ),
      current: fullUrl,
    });
@@ -974,7 +960,6 @@
      isTransport: form.value.isTransport || "1",
      terminationCase: form.value.terminationCase || 0,
      reportStatus: form.value.reportStatus || "1",
    };
    let res;
@@ -982,13 +967,13 @@
      // 修改接口
      res = await uni.$uapi.post(
        "/project/donatebaseinforeport/edit",
        submitData
        submitData,
      );
    } else {
      // 新增接口
      res = await uni.$uapi.post(
        "/project/donatebaseinforeport/add",
        submitData
        submitData,
      );
    }
@@ -1043,8 +1028,8 @@
  //   age: "38",
  //   inpatientno: "ZY20241216001",
  //   diagnosisname: "脑外伤导致脑死亡",
  //   bloodtype: "A",
  //   rhyin: "positive",
  //   bloodType: "A",
  //   rhYin: "positive",
  //   infoname: "李医生",
  //   infophone: "13800138000",
  //   reporterno: "张医生",
@@ -1053,24 +1038,24 @@
  try {
    loading.value = true;
    const res = await uni.$uapi.get(
      `/project/donatebaseinforeport/getInfo/${id}`
      `/project/donatebaseinforeport/getInfo/${id}`,
    );
    if (res.code === 200 && res.data) {
      // 填充表单数据
      Object.keys(form.value).forEach((key) => {
        if (res.data[key] !== undefined && res.data[key] !== null) {
          form.value[key] = res.data[key];
        }
      });
    if (res) {
      console.log(res, "res");
      form.value = res;
      console.log(1, "res");
      // 处理选择器索引
      updatePickerIndexes();
      // updatePickerIndexes();
      console.log(2, "res");
      // 处理附件
      if (res.data.annexfilesList) {
        attachments.value = res.data.annexfilesList;
      if (res.annexfilesList) {
        attachments.value = res.annexfilesList;
      }
      console.log(3, "res");
      uni.showToast({
        title: "数据加载成功",
@@ -1093,25 +1078,25 @@
const updatePickerIndexes = () => {
  // 医疗机构索引
  const hospitalIndex = hospitalOptions.value.findIndex(
    (item) => item.label === form.value.treatmenthospitalname
    (item) => item.label === form.value.treatmenthospitalname,
  );
  if (hospitalIndex !== -1) hospitalIndex.value = hospitalIndex;
  // 科室索引
  const deptIndex = pickerColumns.value[0].findIndex(
    (item) => item.label === form.value.treatmentdeptname
    (item) => item.label === form.value.treatmentdeptname,
  );
  if (deptIndex !== -1) deptIndex.value = deptIndex;
  // 民族索引
  const nationIndex = nationOptions.value.findIndex(
    (item) => item.label === form.value.nation
    (item) => item.label === form.value.nation,
  );
  if (nationIndex !== -1) nationIndex.value = nationIndex;
  // 证件类型索引
  const idCardTypeIndex = idCardTypeOptions.value.findIndex(
    (item) => item.value === form.value.idcardtype
    (item) => item.value === form.value.idcardtype,
  );
  if (idCardTypeIndex !== -1) idCardTypeIndex.value = idCardTypeIndex;
};