From 39c8b288ec8294e026459dfb1955f0bbc49ebb52 Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期一, 19 十月 2026 11:10:40 +0800
Subject: [PATCH] 测试完成
---
src/views/patient/archives/childHealth/detail.vue | 156 +++++++++++++++++++++++++++++++++++----------------
1 files changed, 106 insertions(+), 50 deletions(-)
diff --git a/src/views/patient/archives/childHealth/detail.vue b/src/views/patient/archives/childHealth/detail.vue
index be662b4..2c13ee6 100644
--- a/src/views/patient/archives/childHealth/detail.vue
+++ b/src/views/patient/archives/childHealth/detail.vue
@@ -60,9 +60,20 @@
</div>
<el-form :model="archive" label-width="110px" size="small" :disabled="!editing">
<el-row :gutter="20">
+ <el-col :span="8"><el-form-item label="韬唤璇佸彿"><el-input v-model="archive.idcardno" class="w-md" placeholder="杈撳叆鍚堟硶韬唤璇佸彿鍚庤嚜鍔ㄥ甫鍑哄嚭鐢熸棩鏈熶笌骞撮緞" /></el-form-item></el-col>
+ </el-row>
+ <el-row :gutter="20">
<el-col :span="8"><el-form-item label="鍑虹敓鏃ユ湡"><el-date-picker v-model="archive.birthday" value-format="yyyy-MM-dd" class="w-md" /></el-form-item></el-col>
- <el-col :span="8"><el-form-item label="鍑虹敓浣撻噸"><el-input v-model="archive.birthWeight" class="w-xs" /></el-form-item></el-col>
- <el-col :span="8"><el-form-item label="鍑虹敓瀛曞懆"><el-input v-model="archive.gestationalWeek" class="w-xs" /></el-form-item></el-col>
+ <el-col :span="8"><el-form-item label="鍑虹敓浣撻噸">
+ <el-input v-model="archive.birthWeight" class="w-xs">
+ <template slot="append">kg</template>
+ </el-input>
+ </el-form-item></el-col>
+ <el-col :span="8"><el-form-item label="鍑虹敓瀛曞懆">
+ <el-input v-model="archive.gestationalWeek" class="w-xs">
+ <template slot="append">鍛�</template>
+ </el-input>
+ </el-form-item></el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8"><el-form-item label="璇婃柇鏃ユ湡"><el-date-picker v-model="archive.diagnosisDate" value-format="yyyy-MM-dd" class="w-md" /></el-form-item></el-col>
@@ -76,11 +87,11 @@
</el-card>
<!-- 楂樺嵄鍎夸笓妗� 鈫� 鍙紪杈戣〃鏍� -->
- <el-card v-if="archive.subType === 'highRisk'" class="info-card" shadow="never" style="margin-top:14px">
+ <el-card v-if="archive.subType === 'highrisk'" class="info-card" shadow="never" style="margin-top:14px">
<div slot="header" class="card-header"><span>楂樺嵄鍎夸笓妗堢鐞�</span></div>
<el-form :model="archive" label-width="110px" size="small" :disabled="!editing" inline>
- <el-form-item label="楂樺嵄鍎垮垎绫�"><el-input v-model="archive.highRiskCategory" class="w-md" /></el-form-item>
- <el-form-item label="楂樺嵄鍎垮悕绉�"><el-input v-model="archive.highRiskName" class="w-lg" /></el-form-item>
+ <el-form-item label="楂樺嵄鍎垮垎绫�"><el-input v-model="archive.highriskCategory" class="w-md" /></el-form-item>
+ <el-form-item label="楂樺嵄鍎垮悕绉�"><el-input v-model="archive.highriskName" class="w-lg" /></el-form-item>
<el-form-item label="鎷熼殢璁挎棩鏈�"><el-date-picker v-model="archive.followupDate" value-format="yyyy-MM-dd" class="w-md" /></el-form-item>
</el-form>
<el-tabs v-model="activeTab" type="border-card">
@@ -177,7 +188,7 @@
import EditableTable from "../components/EditableTable.vue";
import InfoField from "./InfoField.vue";
import ServiceRecords from "../components/ServiceRecords.vue";
-import { loadArchives, saveArchives } from "../types";
+import { getArchive, saveArchive, closeArchive, calcAge } from "../apiAdapter";
export default {
name: "ChildHealthArchiveDetail",
@@ -195,37 +206,37 @@
growthData: [], neuroData: [], interventionData: [],
measureData: [], dietData: [], planData: [],
growthColumns: [
- { prop:"checkDate", label:"妫�鏌ユ棩鏈�", width:120, type:"date" },{ prop:"monthAge", label:"鏈堥緞", width:80 },
+ { prop:"checkDate", label:"妫�鏌ユ棩鏈�", width:180, type:"date" },{ prop:"monthAge", label:"鏈堥緞", width:80 },
{ prop:"weight", label:"浣撻噸(kg)", width:100, type:"number" },{ prop:"height", label:"韬珮(cm)", width:100, type:"number" },
{ prop:"headCircum", label:"澶村洿(cm)", width:100, type:"number" },{ prop:"weightPercentile", label:"浣撻噸鐧惧垎浣�", width:110 },
{ prop:"heightPercentile", label:"韬珮鐧惧垎浣�", width:110 },{ prop:"evaluation", label:"璇勪及缁撴灉", type:"select", options:["姝e父","鍋忕槮","鍋忚儢","鍙戣偛杩熺紦"] },
{ prop:"doctor", label:"妫�鏌ュ尰鐢�", width:100 },
],
neuroColumns: [
- { prop:"checkDate", label:"璇勪及鏃ユ湡", width:120, type:"date" },{ prop:"monthAge", label:"鏈堥緞", width:70 },
+ { prop:"checkDate", label:"璇勪及鏃ユ湡", width:180, type:"date" },{ prop:"monthAge", label:"鏈堥緞", width:70 },
{ prop:"muscleTone", label:"鑲屽紶鍔�", width:100 },{ prop:"reflex", label:"鍘熷鍙嶅皠", width:100 },
{ prop:"gms", label:"GMs璇勪及", width:120 },{ prop:"nbnaScore", label:"NBNA璇勫垎", width:100, type:"number" },
{ prop:"evaluation", label:"缁煎悎璇勪及", type:"select", options:["姝e父","寮傚父","鍙枒"] },{ prop:"doctor", label:"璇勪及鍖荤敓", width:100 },
],
interventionColumns: [
- { prop:"date", label:"鏃ユ湡", width:120, type:"date" },{ prop:"type", label:"骞查绫诲瀷", width:140 },
+ { prop:"date", label:"鏃ユ湡", width:180, type:"date" },{ prop:"type", label:"骞查绫诲瀷", width:140 },
{ prop:"content", label:"骞查鍐呭", minWidth:200 },{ prop:"frequency", label:"棰戠巼", width:120 },
{ prop:"effect", label:"鏁堟灉璇勪环", width:100 },{ prop:"executor", label:"鎵ц浜�", width:100 },
],
measureColumns: [
- { prop:"checkDate", label:"妫�鏌ユ棩鏈�", width:120, type:"date" },{ prop:"weight", label:"浣撻噸(kg)", width:100, type:"number" },
+ { prop:"checkDate", label:"妫�鏌ユ棩鏈�", width:180, type:"date" },{ prop:"weight", label:"浣撻噸(kg)", width:100, type:"number" },
{ prop:"height", label:"韬珮(cm)", width:100, type:"number" },{ prop:"bmi", label:"BMI", width:80, type:"number" },
{ prop:"bmiPercentile", label:"BMI鐧惧垎浣�", width:110 },{ prop:"waistHip", label:"鑵板洿/鑷�鍥�", width:120 },
{ prop:"evaluation", label:"钀ュ吇璇勪环", type:"select", options:["姝e父","瓒呴噸","鑲ヨ儢","钀ュ吇涓嶈壇"] },
],
dietColumns: [
- { prop:"date", label:"璇勪及鏃ユ湡", width:120, type:"date" },{ prop:"energy", label:"鑳介噺(kcal/d)", width:120, type:"number" },
+ { prop:"date", label:"璇勪及鏃ユ湡", width:180, type:"date" },{ prop:"energy", label:"鑳介噺(kcal/d)", width:120, type:"number" },
{ prop:"protein", label:"铔嬬櫧璐�(g/d)", width:120, type:"number" },{ prop:"fat", label:"鑴傝偑(g/d)", width:100, type:"number" },
{ prop:"carbs", label:"纰虫按(g/d)", width:100, type:"number" },{ prop:"dietScore", label:"鑶抽璇勫垎", width:100 },
{ prop:"problem", label:"瀛樺湪闂", minWidth:160 },
],
planColumns: [
- { prop:"date", label:"鍒跺畾鏃ユ湡", width:120, type:"date" },{ prop:"target", label:"骞查鐩爣", minWidth:200 },
+ { prop:"date", label:"鍒跺畾鏃ユ湡", width:180, type:"date" },{ prop:"target", label:"骞查鐩爣", minWidth:200 },
{ prop:"energyTarget", label:"鑳介噺鐩爣(kcal)", width:130, type:"number" },{ prop:"foodGuide", label:"鑶抽鎸囧", minWidth:200 },
{ prop:"exercise", label:"杩愬姩寤鸿", minWidth:180 },{ prop:"reviewDate", label:"澶嶆煡鏃ユ湡", width:120 },
],
@@ -238,40 +249,81 @@
return map[this.archive?.sourcePage] || this.archive?.sourcePage || "-";
},
},
+ watch: {
+ // 韬唤璇佸彿濉畬鏁村悗锛岃嚜鍔ㄦ妸鍑虹敓鏃ユ湡涓庡勾榫勮ˉ涓婏紙鍙ˉ绌哄瓧娈碉級
+ "archive.idcardno"(val) { this.fillBirthdayFromIdcard(val); },
+ },
created() {
const id = this.$route.query.id;
- if (id) this.loadArchive(id, this.$route.query.edit == 1);
+ const typeKey = this.$route.query.type;
+ if (id) this.loadArchive(id, typeKey, this.$route.query.edit == 1, this.$route.query.detailId);
},
methods: {
- loadArchive(id, autoEdit) {
- this.loading = true;
- this.archive = loadArchives().find((item) => item.id === id) || null;
- if (this.archive) {
- if (!this.archive.parentInfo) this.archive.parentInfo = {};
- if (this.archive.subType === 'highRisk') {
- this.activeTab = "growth";
- this.growthData = this.archive.growthData || getDefaultGrowthData();
- this.neuroData = this.archive.neuroData || getDefaultNeuroData();
- this.interventionData = this.archive.interventionData || getDefaultInterventionData();
- } else if (this.archive.subType === 'nutrition') {
- this.activeTab = "measure";
- this.measureData = this.archive.measureData || getDefaultMeasureData();
- this.dietData = this.archive.dietData || getDefaultDietData();
- this.planData = this.archive.planData || getDefaultPlanData();
- } else if (this.archive.subType === 'learning' && this.archive.archiveForm?.learningData) {
- Object.assign(this.form, this.archive.archiveForm.learningData);
- }
+ /**
+ * 浠庤韩浠借瘉鍙疯В鏋愬嚭鐢熸棩鏈� yyyy-MM-dd
+ * 18 浣嶏細绗� 7-14 浣嶆槸 yyyyMMdd锛�15 浣嶈�佽韩浠借瘉锛氱 7-12 浣嶆槸 yyMMdd锛屽墠闈㈣ˉ 19
+ * 鏍煎紡涓嶅鎴栨棩鏈熶笉瀛樺湪锛堝 20260231锛夎繑鍥炵┖
+ */
+ parseIdcardBirth(id) {
+ if (!id) return "";
+ const s = String(id).trim().toUpperCase();
+ let y, m, d;
+ if (/^\d{17}[\dX]$/.test(s)) {
+ y = s.substring(6, 10); m = s.substring(10, 12); d = s.substring(12, 14);
+ } else if (/^\d{15}$/.test(s)) {
+ y = "19" + s.substring(6, 8); m = s.substring(8, 10); d = s.substring(10, 12);
+ } else {
+ return "";
}
- if (autoEdit) this.editing = true;
- this.loading = false;
+ const pad = (n) => String(n).padStart(2, "0");
+ const dt = new Date(Number(y), Number(m) - 1, Number(d));
+ if (isNaN(dt.getTime())) return "";
+ // 鎷掔粷 2 鏈� 31 鏃ヨ繖绫讳笉瀛樺湪鐨勬棩鏈�
+ if (dt.getFullYear() !== Number(y) || pad(dt.getMonth() + 1) !== m || pad(dt.getDate()) !== d) return "";
+ return y + "-" + m + "-" + d;
+ },
+ /** 韬唤璇佸悎娉曟椂琛ラ綈鍑虹敓鏃ユ湡涓庡勾榫勶紝宸茬粡鏈夊�肩殑瀛楁涓嶅姩 */
+ fillBirthdayFromIdcard(id) {
+ if (!this.archive) return;
+ const birth = this.parseIdcardBirth(id);
+ if (!birth) return;
+ if (!this.archive.birthday) this.archive.birthday = birth;
+ if (!this.archive.age) this.archive.age = calcAge(birth);
+ },
+ loadArchive(id, typeKey, autoEdit, detailId) {
+ this.loading = true;
+ getArchive(typeKey, id, detailId)
+ .then((archive) => {
+ this.archive = archive || null;
+ if (this.archive) {
+ if (!this.archive.parentInfo) this.archive.parentInfo = {};
+ if (this.archive.subType === 'highrisk') {
+ this.activeTab = "growth";
+ this.growthData = this.archive.growthData || getDefaultGrowthData();
+ this.neuroData = this.archive.neuroData || getDefaultNeuroData();
+ this.interventionData = this.archive.interventionData || getDefaultInterventionData();
+ } else if (this.archive.subType === 'nutrition') {
+ this.activeTab = "measure";
+ this.measureData = this.archive.measureData || getDefaultMeasureData();
+ this.dietData = this.archive.dietData || getDefaultDietData();
+ this.planData = this.archive.planData || getDefaultPlanData();
+ } else if (this.archive.subType === 'learning' && this.archive.archiveForm && this.archive.archiveForm.learningData) {
+ Object.assign(this.form, this.archive.archiveForm.learningData);
+ }
+ }
+ if (autoEdit) this.editing = true;
+ })
+ .catch(() => { this.archive = null; })
+ .finally(() => { this.loading = false; });
},
toggleEdit() {
if (this.editing) {
+ // 鍏堟妸椤甸潰琛ㄥ崟鍥炲~鍒版。妗堝璞★紝鍐嶆暣浣撴彁浜�
if (this.archive.subType === 'learning') {
if (!this.archive.archiveForm) this.archive.archiveForm = {};
this.archive.archiveForm.learningData = JSON.parse(JSON.stringify(this.form));
}
- if (this.archive.subType === 'highRisk') {
+ if (this.archive.subType === 'highrisk') {
this.archive.growthData = JSON.parse(JSON.stringify(this.growthData));
this.archive.neuroData = JSON.parse(JSON.stringify(this.neuroData));
this.archive.interventionData = JSON.parse(JSON.stringify(this.interventionData));
@@ -281,27 +333,31 @@
this.archive.dietData = JSON.parse(JSON.stringify(this.dietData));
this.archive.planData = JSON.parse(JSON.stringify(this.planData));
}
- this.archive.updateTime = new Date().toISOString().replace("T"," ").substring(0,19);
- const all = loadArchives();
- const idx = all.findIndex(item => item.id === this.archive.id);
- if (idx >= 0) all[idx] = JSON.parse(JSON.stringify(this.archive));
- saveArchives(all);
- this.$message.success("淇濆瓨鎴愬姛");
+ this.loading = true;
+ saveArchive(this.archive)
+ .then(() => {
+ this.$message.success("淇濆瓨鎴愬姛");
+ this.editing = false;
+ })
+ .catch(() => {})
+ .finally(() => { this.loading = false; });
+ return;
}
- this.editing = !this.editing;
+ this.editing = true;
},
handleCloseCase() {
this.$modal.confirm("纭灏嗚妗f缁撴锛�").then(() => {
- this.archive.closeStatus = 1;
- this.archive.updateTime = new Date().toISOString().replace("T"," ").substring(0,19);
- const all = loadArchives();
- const idx = all.findIndex(item => item.id === this.archive.id);
- if (idx >= 0) all[idx] = JSON.parse(JSON.stringify(this.archive));
- saveArchives(all);
- this.$message.success("宸茬粨妗�");
+ this.loading = true;
+ return closeArchive(this.archive)
+ .then(() => {
+ this.archive.closeStatus = 1;
+ this.$message.success("宸茬粨妗�");
+ })
+ .catch(() => {})
+ .finally(() => { this.loading = false; });
}).catch(() => {});
},
- subTypeTag(type) { const m={highRisk:"danger",nutrition:"warning",learning:"info"}; return m[type]||""; },
+ subTypeTag(type) { const m={highrisk:"danger",nutrition:"warning",learning:"info"}; return m[type]||""; },
},
};
@@ -340,7 +396,7 @@
<style lang="scss" scoped>
// 杈撳叆妗嗗搴︼紙鎸夊瓧娈甸暱鐭尯鍒嗭級
-.w-xs { width: 90px; }
+.w-xs { width: 120px; }
.w-sm { width: 150px; }
.w-md { width: 200px; }
.w-lg { width: 280px; }
--
Gitblit v1.9.3