| | |
| | | </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" |
| | |
| | | <view class="form-item"> |
| | | <text class="item-label">GCS评分</text> |
| | | <u-input |
| | | v-model="form.gscScore" |
| | | v-model="form.gcsScore" |
| | | placeholder="请输入GCS评分" |
| | | border="none" |
| | | /> |
| | |
| | | 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> |
| | |
| | | > |
| | | <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> |
| | |
| | | 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> |
| | |
| | | ageunit: "", // 新增:年龄单位 |
| | | inpatientno: "", |
| | | diagnosisname: "", |
| | | bloodtype: "", |
| | | rhyin: "", |
| | | bloodType: "", |
| | | rhYin: "", |
| | | infoname: "", |
| | | infophone: "", |
| | | reportername: userStore.name || "", |
| | |
| | | // 选择器状态 |
| | | const attachments = ref([]); |
| | | const infectiousDiseaselist = ref([]); |
| | | const nationLabel = ref([]); |
| | | |
| | | const isReadonly = ref(false); |
| | | const id = ref(null); |
| | | const selectShow = ref(false); |
| | |
| | | |
| | | // 计算属性 |
| | | 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); |
| | |
| | | |
| | | // 计算属性 - 标签数组 |
| | | 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}`; |
| | | }); |
| | |
| | | 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), |
| | | ); |
| | | |
| | | // 计算属性 - 当前选中显示文本 |
| | |
| | | : "请选择证件类型"; |
| | | }); |
| | | |
| | | // 选择器变更事件 |
| | | 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; |
| | | }; |
| | | |
| | |
| | | }; |
| | | 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; |
| | | }; |
| | |
| | | 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(); |
| | |
| | | const initOptions = () => { |
| | | infectiousDiseaselist.value = dict.value.sys_Infectious || []; |
| | | idCardTypeOptions.value = dict.value.sys_IDType || []; |
| | | nationLabel.value = dict.value.sys_Nation || []; |
| | | }; |
| | | // 方法定义 |
| | | const updateCurrentTime = () => { |
| | |
| | | |
| | | 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; |
| | | } |
| | | |
| | |
| | | |
| | | if (daysDiff < 0) { |
| | | // 未来日期处理 |
| | | form.value.age = ''; |
| | | form.value.ageunit = ''; |
| | | form.value.age = ""; |
| | | form.value.ageunit = ""; |
| | | return; |
| | | } |
| | | |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | .map((f) => |
| | | f.url.startsWith("http") |
| | | ? f.url |
| | | : baseUrlHt + (f.url.startsWith("/") ? "" : "/") + f.url |
| | | : baseUrlHt + (f.url.startsWith("/") ? "" : "/") + f.url, |
| | | ), |
| | | current: fullUrl, |
| | | }); |
| | |
| | | isTransport: form.value.isTransport || "1", |
| | | terminationCase: form.value.terminationCase || 0, |
| | | reportStatus: form.value.reportStatus || "1", |
| | | |
| | | }; |
| | | |
| | | let res; |
| | |
| | | // 修改接口 |
| | | res = await uni.$uapi.post( |
| | | "/project/donatebaseinforeport/edit", |
| | | submitData |
| | | submitData, |
| | | ); |
| | | } else { |
| | | // 新增接口 |
| | | res = await uni.$uapi.post( |
| | | "/project/donatebaseinforeport/add", |
| | | submitData |
| | | submitData, |
| | | ); |
| | | } |
| | | |
| | |
| | | // age: "38", |
| | | // inpatientno: "ZY20241216001", |
| | | // diagnosisname: "脑外伤导致脑死亡", |
| | | // bloodtype: "A", |
| | | // rhyin: "positive", |
| | | // bloodType: "A", |
| | | // rhYin: "positive", |
| | | // infoname: "李医生", |
| | | // infophone: "13800138000", |
| | | // reporterno: "张医生", |
| | |
| | | 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: "数据加载成功", |
| | |
| | | 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; |
| | | }; |