From ab77cf83de3f6978909e6f1f3b6e0d28db456681 Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期一, 10 十一月 2025 08:58:27 +0800
Subject: [PATCH] 测试完成

---
 src/views/patient/patient/profile/index.vue | 1059 +++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 811 insertions(+), 248 deletions(-)

diff --git a/src/views/patient/patient/profile/index.vue b/src/views/patient/patient/profile/index.vue
index c38ea4c..df9c840 100644
--- a/src/views/patient/patient/profile/index.vue
+++ b/src/views/patient/patient/profile/index.vue
@@ -3,7 +3,7 @@
     <!-- 澶撮儴鐩掑瓙 -->
     <div class="personages">
       <el-row :gutter="20">
-        <el-col :span="18">
+        <el-col :span="24">
           <div class="headportrait">
             <div class="text-center">
               <img
@@ -16,7 +16,11 @@
               {{ userform.sex == 1 ? "鐢�" : "濂�" }}
             </div>
             <div style="margin-left: 10px" class="text-title">
-              {{ userform.age }}宀�
+              <span v-if="userform.age"
+                >{{ userform.age }}{{ userform.ageUnit }}</span
+              ><span v-if="userform.age2"
+                >{{ userform.age2 }}{{ userform.ageUnit2 }}</span
+              >
             </div>
             <div style="margin-left: 10px" class="text-title">
               {{ userform.birthdate }}
@@ -54,13 +58,13 @@
           >
         </el-tabs>
       </el-tab-pane>
-      <!-- <el-tab-pane name="monitor">
+      <el-tab-pane name="monitor">
         <span class="mulsz" slot="label"
           ><i class="el-icon-s-data"></i> 鍋ュ悍鐩戞祴</span
         >
 
-        <el-tabs v-model="sontwoactiveName" @tab-click="handleClick">
-          <el-tab-pane name="blood"
+        <el-tabs v-model="sontwoactiveName">
+          <!-- <el-tab-pane name="blood"
             ><span class="mulsz" slot="label"
               ><i class="el-icon-s-operation"></i> 琛�鍘�</span
             ></el-tab-pane
@@ -69,13 +73,13 @@
             ><span class="mulsz" slot="label"
               ><i class="el-icon-odometer"></i>琛�绯�
             </span></el-tab-pane
-          >
+          > -->
           <el-tab-pane name="weight"
             ><span class="mulsz" slot="label"
-              ><i class="el-icon-s-data"></i>浣撻噸
+              ><i class="el-icon-s-data"></i>韬暱澶村洿瓒嬪娍
             </span></el-tab-pane
           >
-          <el-tab-pane name="heartrate"
+          <!-- <el-tab-pane name="heartrate"
             ><span class="mulsz" slot="label"
               ><i class="el-icon-s-operation"></i>蹇冪巼
             </span></el-tab-pane
@@ -89,9 +93,9 @@
             ><span class="mulsz" slot="label"
               ><i class="el-icon-s-opportunity"></i>浣撴俯
             </span></el-tab-pane
-          >
-        </el-tabs></el-tab-pane
-      > -->
+          > -->
+        </el-tabs>
+      </el-tab-pane>
       <el-tab-pane name="serve">
         <span class="mulsz" slot="label"
           ><i class="el-icon-s-custom"></i> 鏈嶅姟璁板綍</span
@@ -123,11 +127,21 @@
                     disabled
                   ></el-input> </el-form-item
               ></el-col>
+            </el-row>
+            <el-row :gutter="20">
               <el-col :span="12"
                 ><el-form-item label="鑱旂郴鏂瑰紡" prop="telcode">
                   <el-input
                     v-model="userform.telcode"
                     placeholder="璇疯緭鍏ヨ仈绯绘柟寮�"
+                    maxlength="30"
+                  /> </el-form-item
+              ></el-col>
+              <el-col :span="12"
+                ><el-form-item label="棰勭暀鐢佃瘽" prop="reservedPhone">
+                  <el-input
+                    v-model="userform.reservedPhone"
+                    placeholder="璇疯緭鍏ラ鐣欑數璇�"
                     maxlength="30"
                   /> </el-form-item
               ></el-col>
@@ -202,107 +216,112 @@
         </div>
       </div>
       <div class="top-message">
-        <div class="headline">鐥呭彶</div>
+        <div class="headline">鏂扮敓鍎跨梾鍙�</div>
         <div class="detailed">
           <el-form :model="form" label-width="100px">
             <el-row>
-              <el-col :span="8">
-                <el-form-item label="杩囧線鐤剧梾" prop="name">
+              <el-col :span="12">
+                <el-form-item label="姣嶇敓鑲插彶" prop="procreate">
                   <el-input
-                    v-model="form.pastIllnesses"
-                    placeholder="璇疯緭鍏�"
-                    maxlength="30"
-                  />
-                </el-form-item>
-              </el-col>
-              <el-col :span="8">
-                <el-form-item label="鑽墿杩囨晱" prop="sex">
-                  <el-input
-                    v-model="form.drugAllergy"
-                    placeholder="璇疯緭鍏ュ叿浣撹嵂鐗�/鏃�"
-                    maxlength="30"
-                  />
-                </el-form-item>
-              </el-col>
-              <el-col :span="8">
-                <el-form-item label="瀹舵棌鐥呭彶" prop="age">
-                  <el-input
-                    v-model="form.familyHistory"
-                    placeholder="璇疯緭鍏ュ叿浣撶柧鐥�/鏃�"
-                    maxlength="30"
-                  />
-                </el-form-item>
-              </el-col>
-            </el-row>
-            <el-row>
-              <el-col :span="8">
-                <el-form-item label="鎵嬫湳鍙�" prop="name">
-                  <el-input
-                    v-model="form.surgicalHistory"
-                    placeholder="璇疯緭鍏ユ墜鏈�/鏃�"
-                    maxlength="30"
-                  />
-                </el-form-item>
-              </el-col>
-              <el-col :span="8">
-                <el-form-item label="鐢熻偛鍙�" prop="age">
-                  <el-input
-                    v-model="form.reproductiveHistory"
+                    v-model="form.procreate"
                     placeholder="璇疯緭鍏ヨ儙鏁�/鏃�"
                     maxlength="30"
                   />
                 </el-form-item>
               </el-col>
-              <el-col :span="8">
-                <el-form-item label="鏈堢粡鍙�" prop="menstrualHistory">
-                  <el-radio-group v-model="form.menstrualHistory">
-                    <el-radio label="1">鏈�</el-radio>
-                    <el-radio label="2">鏃�</el-radio>
-                  </el-radio-group>
-                </el-form-item>
-              </el-col>
-            </el-row>
-            <el-row>
-              <el-col :span="8">
-                <el-form-item label="鍚哥儫鎯呭喌" prop="smoking">
-                  <el-radio-group v-model="form.smoking">
-                    <el-radio label="1">鏈�</el-radio>
-                    <el-radio label="2">鏃�</el-radio>
-                  </el-radio-group>
-                </el-form-item>
-              </el-col>
-              <el-col :span="8">
-                <el-form-item label="楗厭鎯呭喌" prop="drink">
-                  <el-radio-group v-model="form.drink">
-                    <el-radio label="1">鏈�</el-radio>
-                    <el-radio label="2">鏃�</el-radio>
-                  </el-radio-group>
-                </el-form-item>
-              </el-col>
-              <el-col :span="8">
-                <el-form-item label="杩愬姩鎯呭喌" prop="motion">
-                  <el-radio-group v-model="form.motion">
-                    <el-radio label="1">鏈�</el-radio>
-                    <el-radio label="2">鏃�</el-radio>
-                  </el-radio-group>
+              <el-col :span="12">
+                <el-form-item label="姣嶅濞犳湡鐤剧梾鍙�" prop="gestationIllnesses">
+                  <el-input
+                    v-model="form.gestationIllnesses"
+                    placeholder="璇疯緭鍏�"
+                    maxlength="30"
+                  />
                 </el-form-item>
               </el-col>
             </el-row>
             <el-row>
               <el-col :span="12">
-                <el-form-item label="楗鎯呭喌" prop="diet">
-                  <el-radio-group v-model="form.diet">
-                    <el-radio label="1">杩囧害楗</el-radio>
-                    <el-radio label="2">姝e父楗</el-radio>
-                    <el-radio label="3">椋熸涓嶆尟</el-radio>
-                  </el-radio-group>
-                </el-form-item> </el-col
-              ><el-col :span="12">
-                <el-form-item label="蹇冪悊鎯呭喌" prop="psychology">
-                  <el-radio-group v-model="form.psychology">
-                    <el-radio label="1">蹇冩儏鎰夋偊</el-radio>
-                    <el-radio label="2">杞诲井鐒﹁檻</el-radio>
-                    <el-radio label="3">鎶戦儊</el-radio>
+                <el-form-item label="鍑虹敓鑳庨緞" prop="birthAge">
+                  <el-input
+                    v-model="form.birthAge"
+                    placeholder="璇疯緭鍏ヨ儙榫�"
+                    maxlength="30"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="鍑虹敓浣撻噸" prop="birthWeight">
+                  <el-input
+                    v-model="form.birthWeight"
+                    placeholder="璇疯緭鍏ュ嚭鐢熶綋閲�"
+                    maxlength="30"
+                  />
+                </el-form-item>
+              </el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12">
+                <el-form-item label="鍑洪櫌鏃剁籂姝h儙榫�" prop="outCorrectAge">
+                  <el-input
+                    v-model="form.outCorrectAge"
+                    placeholder="璇疯緭鍏�"
+                    maxlength="30"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="鍑洪櫌鏃朵綋閲�" prop="outWeight">
+                  <el-input
+                    v-model="form.outWeight"
+                    placeholder="璇疯緭鍏�"
+                    maxlength="30"
+                  />
+                </el-form-item>
+              </el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="12">
+                <el-form-item label="瀹舵棌鐥呭彶" prop="familyHistory">
+                  <el-input
+                    v-model="form.familyHistory"
+                    placeholder="璇疯緭鍏�"
+                    maxlength="30"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="杩囨晱鍙�" prop="allergy">
+                  <el-input
+                    v-model="form.allergy"
+                    placeholder="璇疯緭鍏�"
+                    maxlength="30"
+                  />
+                </el-form-item>
+              </el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="24">
+                <el-form-item label="鎵嬫湳鍙�" prop="surgicalHistory">
+                  <el-input
+                    type="textarea"
+                    :rows="2"
+                    placeholder="璇疯緭鍏�"
+                    v-model="form.surgicalHistory"
+                  >
+                  </el-input>
+                </el-form-item>
+              </el-col>
+            </el-row>
+            <el-row>
+              <el-col :span="24">
+                <el-form-item label="鍠傚吇鎯呭喌" prop="feed">
+                  <el-radio-group v-model="form.feed">
+                    <el-radio label="姣嶄钩">姣嶄钩</el-radio>
+                    <el-radio label="閰嶆柟濂�">閰嶆柟濂�</el-radio>
+                    <el-radio label="鏃╅鍎垮ザ">鏃╅鍎垮ザ</el-radio>
+                    <el-radio label="钄煎効鑸�">钄煎効鑸�</el-radio>
+                    <el-radio label="MCT濂�">MCT濂�</el-radio>
+                    <el-radio label="鍏跺畠鐗规畩濂剁矇">鍏跺畠鐗规畩濂剁矇</el-radio>
                   </el-radio-group>
                 </el-form-item>
               </el-col>
@@ -366,12 +385,12 @@
           <el-table-column
             label="灏辫瘖鏃堕棿"
             align="center"
-            key="createTime"
-            prop="createTime"
+            key="admitdate"
+            prop="admitdate"
             width="160"
           >
             <template slot-scope="scope">
-              <span>{{ formatTime(scope.row.createTime) }}</span>
+              <span>{{ formatTime(scope.row.admitdate) }}</span>
             </template>
           </el-table-column>
 
@@ -522,7 +541,6 @@
             prop="bedNo"
             width="120"
           />
-
         </el-table>
       </div>
       <!-- 鍑洪櫌 -->
@@ -600,7 +618,6 @@
             prop="bedNo"
             width="120"
           />
-
         </el-table>
       </div>
     </div>
@@ -621,26 +638,22 @@
               border-left: 4px solid rgb(190, 65, 134);
             "
           >
-          <span v-if="item.serviceType==2">鍑洪櫌闅忚</span>
-          <span v-if="item.serviceType==1">鐩戞祴璇勪及</span>
-          <span v-if="item.serviceType==3">闂ㄨ瘖闅忚</span>
-          <span v-if="item.serviceType==4">瀹f暀鍏虫��</span>
+            <span v-if="item.serviceType == 2">鍑洪櫌闅忚</span>
+            <span v-if="item.serviceType == 1">鐩戞祴璇勪及</span>
+            <span v-if="item.serviceType == 3">闂ㄨ瘖闅忚</span>
+            <span v-if="item.serviceType == 4">瀹f暀鍏虫��</span>
           </div>
           <el-divider></el-divider>
           <div style="margin-top: 10px">
-            鏈嶅姟鍚嶇О锛�<span style="color: #2775b6"
-              >{{ item.templatename }}</span
-            >
+            鏈嶅姟鍚嶇О锛�<span style="color: #2775b6">{{
+              item.templatename
+            }}</span>
           </div>
           <div style="margin-top: 10px">
-            鍒涘缓鏃堕棿锛�<span style="color: #2775b6"
-              >{{item.createTime}}</span
-            >
+            鍒涘缓鏃堕棿锛�<span style="color: #2775b6">{{ item.createTime }}</span>
           </div>
           <div style="margin-top: 10px">
-            瀹屾垚鏃堕棿锛�<span style="color: #2775b6"
-              >{{ item.finishtime }}</span
-            >
+            瀹屾垚鏃堕棿锛�<span style="color: #2775b6">{{ item.finishtime }}</span>
           </div>
           <div style="margin-top: 10px">
             <el-row :gutter="20">
@@ -650,9 +663,10 @@
               >
               <el-col :span="12"
                 >鐥呭尯锛�
-                <span style="color: #2775b6">{{ item.leavehospitaldistrictname }}</span></el-col
+                <span style="color: #2775b6">{{
+                  item.leavehospitaldistrictname
+                }}</span></el-col
               >
-
             </el-row>
           </div>
 
@@ -677,15 +691,15 @@
                 <span style="color: #2775b6">{{ item.drname }}</span></el-col
               >
               <el-col :span="6"
-                >璐d换鎶ゅ+ <span style="color: #2775b6">{{ item.nurseName }}</span></el-col
+                >璐d换鎶ゅ+
+                <span style="color: #2775b6">{{ item.nurseName }}</span></el-col
               >
             </el-row>
           </div>
           <div style="margin-top: 10px">
             缁撴灉鐘舵�侊細
-            <span style="color: #2775b6" v-if="item.excep==0">鏈嶅姟姝e父</span>
-            <span style="color: #B55E54" v-if="item.excep==1">寮傚父</span>
-
+            <span style="color: #2775b6" v-if="item.excep == 0">鏈嶅姟姝e父</span>
+            <span style="color: #b55e54" v-if="item.excep == 1">寮傚父</span>
           </div>
           <!-- <div style="margin-top: 10px">
             澶囨敞锛�
@@ -695,8 +709,8 @@
       </div>
     </div>
     <!-- 鍋ュ悍鐩戞祴 -->
-    <!-- <div class="medical-record" v-show="activeName == 'monitor'">
-      <div v-show="sontwoactiveName == 'blood'" style="display: flex">
+    <div class="medical-record" v-show="activeName == 'monitor'">
+      <!-- <div v-show="sontwoactiveName == 'blood'" style="display: flex">
         <div
           id="xyeCharts"
           class="sontwoactiveName"
@@ -712,8 +726,8 @@
             />
           </el-card>
         </div>
-      </div>
-      <div v-show="sontwoactiveName == 'glucose'" style="display: flex">
+      </div> -->
+      <!-- <div v-show="sontwoactiveName == 'glucose'" style="display: flex">
         <div
           id="xteCharts"
           class="sontwoactiveName"
@@ -729,25 +743,135 @@
             />
           </el-card>
         </div>
-      </div>
+      </div> -->
       <div v-show="sontwoactiveName == 'weight'" style="display: flex">
         <div
           id="tzeCharts"
           class="sontwoactiveName"
           style="width: 880px; height: 560px"
         ></div>
-        <div style="width: 400px">
+        <div style="width: 600px">
           <el-card class="box-card">
-            <SFtable
-              :currentList="tableDatalist"
-              :tableLabel="tableLabeltz"
-              :center="false"
-              :multiplechoice="false"
-            />
+            <el-button @click="borninfoVisible = true" type="success" round
+              >娣诲姞鏁版嵁</el-button
+            >
+            <el-table :data="borninfooptions" style="width: 100%" border>
+              <el-table-column
+                prop="generatedTime"
+                label="璁板綍鏃ユ湡"
+                width="120"
+              >
+                <template slot-scope="scope">
+                  <span v-if="!scope.row.editing">{{
+                    scope.row.generatedTime
+                  }}</span>
+                  <!-- <el-date-picker
+                    v-else
+                    v-model="scope.row.generatedTime"
+                    type="date"
+                    placeholder="閫夋嫨鏃ユ湡"
+                    value-format="yyyy-MM-dd"
+                    size="small"
+                  ></el-date-picker> -->
+                  <el-date-picker
+                    v-else
+                    v-model="scope.row.generatedTime"
+                    type="datetime"
+                    value-format="yyyy-MM-dd HH:mm:ss"
+                    placeholder="閫夋嫨鏃ユ湡鏃堕棿"
+                    size="small"
+                  >
+                  </el-date-picker>
+                </template>
+              </el-table-column>
+              <el-table-column prop="doctor" label="璐d换鍖荤敓" width="100">
+                <template slot-scope="scope">
+                  <span v-if="!scope.row.editing">{{ scope.row.doctor }}</span>
+                  <el-input
+                    v-else
+                    v-model="scope.row.doctor"
+                    size="small"
+                    placeholder="璇疯緭鍏ュ尰鐢熷鍚�"
+                  ></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column prop="height" label="韬暱(cm)" width="100">
+                <template slot-scope="scope">
+                  <span v-if="!scope.row.editing">{{ scope.row.height }}</span>
+                  <el-input
+                    v-else
+                    v-model.number="scope.row.height"
+                    size="small"
+                    placeholder="韬暱"
+                  ></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column prop="headCir" label="澶村洿(cm)" width="100">
+                <template slot-scope="scope">
+                  <span v-if="!scope.row.editing">{{ scope.row.headCir }}</span>
+                  <el-input
+                    v-else
+                    v-model.number="scope.row.headCir"
+                    size="small"
+                    placeholder="澶村洿"
+                  ></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column prop="age" label="鑳庨緞(鍛�)" width="100">
+                <template slot-scope="scope">
+                  <span v-if="!scope.row.editing">{{ scope.row.age }}</span>
+                  <el-input
+                    v-else
+                    v-model.number="scope.row.age"
+                    size="small"
+                    placeholder="鑳庨緞"
+                  ></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column prop="weight" label="浣撻噸(kg)" width="100">
+                <template slot-scope="scope">
+                  <span v-if="!scope.row.editing">{{ scope.row.weight }}</span>
+                  <el-input
+                    v-else
+                    v-model.number="scope.row.weight"
+                    size="small"
+                    placeholder="浣撻噸"
+                  ></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column label="鎿嶄綔" width="180" fixed="right">
+                <template slot-scope="scope">
+                  <el-button
+                    v-if="!scope.row.editing"
+                    type="primary"
+                    size="mini"
+                    @click="handleEdit(scope.row)"
+                    >缂栬緫</el-button
+                  >
+                  <el-button
+                    v-else
+                    type="success"
+                    size="mini"
+                    @click="handleSave(scope.row)"
+                    >淇濆瓨</el-button
+                  >
+                  <el-button
+                    v-if="!scope.row.editing"
+                    type="danger"
+                    size="mini"
+                    @click="handleDelete(scope.$index, scope.row)"
+                    >鍒犻櫎</el-button
+                  >
+                  <el-button v-else size="mini" @click="handleCancel(scope.row)"
+                    >鍙栨秷</el-button
+                  >
+                </template>
+              </el-table-column>
+            </el-table>
           </el-card>
         </div>
       </div>
-      <div v-show="sontwoactiveName == 'heartrate'" style="display: flex">
+      <!-- <div v-show="sontwoactiveName == 'heartrate'" style="display: flex">
         <div
           id="xleCharts"
           class="sontwoactiveName"
@@ -763,8 +887,8 @@
             />
           </el-card>
         </div>
-      </div>
-      <div v-show="sontwoactiveName == 'bloodoxygen'" style="display: flex">
+      </div> -->
+      <!-- <div v-show="sontwoactiveName == 'bloodoxygen'" style="display: flex">
         <div
           id="xueyangeCharts"
           class="sontwoactiveName"
@@ -780,8 +904,8 @@
             />
           </el-card>
         </div>
-      </div>
-      <div v-show="sontwoactiveName == 'animalheat'" style="display: flex">
+      </div> -->
+      <!-- <div v-show="sontwoactiveName == 'animalheat'" style="display: flex">
         <div
           id="tweCharts"
           class="sontwoactiveName"
@@ -797,8 +921,8 @@
             />
           </el-card>
         </div>
-      </div>
-    </div> -->
+      </div> -->
+    </div>
 
     <el-dialog :title="titletb" :visible.sync="AddanumberVisible">
       <el-form :model="numberform" label-width="100px">
@@ -815,6 +939,71 @@
       <div slot="footer" class="dialog-footer">
         <el-button @click="AddanumberVisible = false">鍙� 娑�</el-button>
         <el-button type="primary" @click="archivecontact">纭� 瀹�</el-button>
+      </div>
+    </el-dialog>
+    <el-dialog title="鏂扮敓鍎挎暟鎹柊澧�" :visible.sync="borninfoVisible">
+      <el-form
+        :rules="borninforules"
+        ref="borninfoform"
+        :model="borninfoform"
+        label-width="120px"
+      >
+        <!-- 韬暱 -->
+        <el-form-item label="韬暱(cm)" prop="height">
+          <el-input
+            v-model.number="borninfoform.height"
+            autocomplete="off"
+            placeholder="璇疯緭鍏ヨ韩闀匡紙30-120cm锛�"
+          >
+          </el-input>
+        </el-form-item>
+
+        <!-- 澶村洿 -->
+        <el-form-item label="澶村洿(cm)" prop="headCir">
+          <el-input
+            v-model.number="borninfoform.headCir"
+            autocomplete="off"
+            placeholder="璇疯緭鍏ュご鍥达紙20-60cm锛�"
+          >
+          </el-input>
+        </el-form-item>
+        <el-form-item label="浣撻噸锛坘g锛�" prop="weight">
+          <el-input
+            v-model.number="borninfoform.weight"
+            autocomplete="off"
+            placeholder="璇疯緭鍏ヤ綋閲�"
+          >
+          </el-input>
+        </el-form-item>
+        <el-form-item label="璁板綍鏃ユ湡" prop="generatedTime">
+          <!-- <el-date-picker
+            v-model="borninfoform.generatedTime"
+            type="date"
+            placeholder="閫夋嫨鏃ユ湡"
+          >
+          </el-date-picker> -->
+          <el-date-picker
+            v-model="borninfoform.generatedTime"
+             value-format="yyyy-MM-dd HH:mm:ss"
+            type="datetime"
+            placeholder="閫夋嫨鏃ユ湡鏃堕棿"
+          >
+          </el-date-picker>
+        </el-form-item>
+
+        <!-- 鑳庨緞 -->
+        <el-form-item label="鑳庨緞锛堝懆锛�" prop="age">
+          <el-input
+            v-model="borninfoform.age"
+            autocomplete="off"
+            placeholder="璇疯緭鍏ヨ儙榫�"
+          >
+          </el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="borninfoVisible = false">鍙� 娑�</el-button>
+        <el-button type="primary" @click="newborninfoadd">纭� 瀹�</el-button>
       </div>
     </el-dialog>
   </div>
@@ -841,11 +1030,14 @@
   Patientclinic,
 } from "@/api/patient/homepage";
 
+import { getsearchrResults, getTaskservelist } from "@/api/AiCentre/index";
 import {
-  getsearchrResults,
-  getTaskservelist,
-} from "@/api/AiCentre/index";
-import { listPatouthosp } from "@/api/smartor/patouthosp";
+  listPatouthosp,
+  newborninfoadd,
+  newborninfoedit,
+  newborninforemove,
+  newborninfolist,
+} from "@/api/smartor/patouthosp";
 import { listpatient } from "@/api/patient/record";
 
 export default {
@@ -864,45 +1056,100 @@
       tjnumber: 12,
       yynumber: 12,
       total: 0, // 鎬绘潯鏁�
+      borninfoVisible: false,
       titletb: "鏂板鑱旂郴鏂瑰紡",
       activeTab: "userinfo",
       id: "",
       loading: false,
       activeName: "health", //涓�绫诲鑸�
       sonactiveName: "inhospital", //鍋ュ悍鐩戞祴瀵艰埅
-      sontwoactiveName: "blood", //鍖荤枟妗f瀵艰埅
+      sontwoactiveName: "weight", //鍖荤枟妗f瀵艰埅
       dynamicTags: [],
+      borninforules: {
+        height: [
+          { required: true, message: "韬暱涓嶈兘涓虹┖", trigger: "blur" },
+          {
+            type: "number",
+            message: "蹇呴』涓烘暟瀛楀��",
+            trigger: "blur",
+          },
+          {
+            validator: (rule, value, callback) => {
+              // 鏂扮敓鍎胯韩闀夸竴鑸寖鍥达細30-120cm
+              if (value < 30 || value > 120) {
+                callback(new Error("璇疯緭鍏�30-120cm涔嬮棿鐨勫悎鐞嗚韩闀垮��"));
+              } else if (!/^[0-9]+(\.[0-9]{1})?$/.test(value)) {
+                callback(new Error("鏈�澶氫繚鐣欎竴浣嶅皬鏁�"));
+              } else {
+                callback();
+              }
+            },
+            trigger: "blur",
+          },
+        ],
+        headCir: [
+          { required: true, message: "澶村洿涓嶈兘涓虹┖", trigger: "blur" },
+          { type: "number", message: "蹇呴』涓烘暟瀛楀��" },
+          {
+            validator: (rule, value, callback) => {
+              // 鏂扮敓鍎垮ご鍥翠竴鑸寖鍥达細20-60cm
+              if (value < 20 || value > 60) {
+                callback(new Error("璇疯緭鍏�20-60cm涔嬮棿鐨勫悎鐞嗗ご鍥村��"));
+              } else {
+                callback();
+              }
+            },
+            trigger: "blur",
+          },
+        ],
+        age: [
+          { required: true, message: "鑳庨緞涓嶈兘涓虹┖", trigger: "blur" },
+          // { type: "integer", message: "蹇呴』涓烘暣鏁板懆鏁�" },
+          {
+            validator: (rule, value, callback) => {
+              // 妫�鏌ユ槸鍚﹀凡瀛樺湪璇ュ懆鏁版暟鎹�
+              if (this.checkAgeExists(value)) {
+                callback(new Error("璇ュ懆鏁版暟鎹凡瀛樺湪锛岃鍕块噸澶嶆坊鍔�"));
+              } else {
+                callback();
+              }
+            },
+            trigger: "blur",
+          },
+        ],
+      },
       record: [
         {
           name: "瀹f暀浠诲姟",
-          serviceType:'4',
-          templatename:'绠¢ゲ瀹f暀涓�鏈�',
-          createTime:'2024-11-10',
-          finishtime:'2024-11-12',
-          createBy:'鐜嬫斂',
-          drname:'鍒樻槑',
-          nurseName:'寮犳窇鐞�',
-          excep:'0',
-          deptname:'鍛煎惛绉�',
-          leavehospitaldistrictname:'浜旂梾鍖�',
+          serviceType: "4",
+          templatename: "绠¢ゲ瀹f暀涓�鏈�",
+          createTime: "2024-11-10",
+          finishtime: "2024-11-12",
+          createBy: "鐜嬫斂",
+          drname: "鍒樻槑",
+          nurseName: "寮犳窇鐞�",
+          excep: "0",
+          deptname: "鍛煎惛绉�",
+          leavehospitaldistrictname: "浜旂梾鍖�",
         },
         {
           name: "闅忚浠诲姟",
-          serviceType:'2',
-          templatename:'蹇冭绠¢殢璁夸竴鏈�',
-          createTime:'2024-11-11',
-          finishtime:'2024-11-14',
-          createBy:'绔犵▼',
-          drname:'鍒樻槑',
-          nurseName:'鏉庝附',
-          excep:'0',
-          deptname:'鍛煎惛绉�',
-          leavehospitaldistrictname:'浜旂梾鍖�',
+          serviceType: "2",
+          templatename: "蹇冭绠¢殢璁夸竴鏈�",
+          createTime: "2024-11-11",
+          finishtime: "2024-11-14",
+          createBy: "绔犵▼",
+          drname: "鍒樻槑",
+          nurseName: "鏉庝附",
+          excep: "0",
+          deptname: "鍛煎惛绉�",
+          leavehospitaldistrictname: "浜旂梾鍖�",
         },
         // {
         //   name: "闂嵎璋冩煡",
         // },
       ],
+      borninfoform: {},
       inputVisible: false,
       AddanumberVisible: false,
       inputValue: "",
@@ -960,6 +1207,7 @@
           label: "浣撴",
         },
       ],
+      borninfooptions: [],
       tableLabelxy: [
         { label: "娴嬮噺鏃堕棿", width: "", prop: "name" },
         { label: "鏀剁缉鍘�", width: "", prop: "sex" },
@@ -971,10 +1219,12 @@
         { label: "鑸掑紶鍘�", width: "", prop: "age" },
       ],
       tableLabeltz: [
-        { label: "娴嬮噺鏃堕棿", width: "", prop: "name" },
-        { label: "韬珮", width: "", prop: "sex" },
-        { label: "浣撻噸", width: "", prop: "age" },
-        { label: "BMI鎸囨暟", width: "", prop: "update_by" },
+        { label: "鏃ユ湡", width: "", prop: "generatedTime" },
+        { label: "璐d换鍖荤敓", width: "", prop: "doctor" },
+        { label: "韬暱(cm)", width: "", prop: "height" },
+        { label: "澶村洿(cm)", width: "", prop: "headCir" },
+        { label: "鑳庨緞(鍛�)", width: "", prop: "age" },
+        { label: "浣撻噸(kg)", width: "", prop: "weight" },
       ],
       tableLabelxl: [
         { label: "娴嬮噺鏃堕棿", width: "", prop: "name" },
@@ -1027,21 +1277,6 @@
     this.id = this.$route.query.id;
     this.getuserinfo();
     this.gettabList();
-    this.$nextTick(function () {
-      this.echartdom = document.getElementById("xyeCharts");
-      this.xtechartdom = document.getElementById("xteCharts");
-      this.tzechartdom = document.getElementById("tzeCharts");
-      this.xlechartdom = document.getElementById("xleCharts");
-      this.xueyangechartdom = document.getElementById("xueyangeCharts");
-      this.twechartdom = document.getElementById("tweCharts");
-
-      this.echartsInit();
-      this.xtechartsInit();
-      this.tzechartsInit();
-      this.xlechartsInit();
-      this.xueyangechartsInit();
-      this.twechartsInit();
-    });
   },
 
   methods: {
@@ -1067,10 +1302,14 @@
           if (response.code == 200) {
             this.serviceDatacy = response.rows;
             console.log(this.serviceDatacy);
-            this.$forceUpdate()
+            this.$forceUpdate();
           }
         });
       }
+    },
+    checkAgeExists(newAge) {
+      // 鍋囪宸叉湁鏁版嵁瀛樺偍鍦� this.existingData 涓�
+      return this.borninfooptions.some((item) => item.age === parseInt(newAge));
     },
     getcontactlist() {
       listcontactinformation({ patid: this.id }).then((response) => {
@@ -1083,7 +1322,7 @@
     // 鑾峰彇鍩虹淇℃伅
     getuserinfo() {
       const queryParams = {
-        pid: Number(this.id),
+        patid: Number(this.id),
         allhosp: "0",
         pageNum: 1,
       };
@@ -1095,7 +1334,7 @@
         console.log(this.dynamicTags);
       });
       // 鐥呭彶淇℃伅
-      getmedicalhistory({ pid: this.id }).then((res) => {
+      getmedicalhistory({ patid: this.id }).then((res) => {
         if (res.code == 200 && res.rows[0]) {
           this.form = res.rows[0];
         }
@@ -1132,7 +1371,7 @@
           }
         });
       } else {
-        this.form.pid = this.id;
+        this.form.patid = this.id;
         addmedicalhistory(this.form).then((res) => {
           if (res.code == 200) {
             this.$modal.msgSuccess("鐥呭彶淇濆瓨鎴愬姛");
@@ -1229,8 +1468,12 @@
     handleClick(tab, event) {
       if (tab.index == "1") {
         this.getList(1);
-      }else if (tab.index == "2") {
-this.handleClickfw();
+      } else if (tab.index == "2") {
+        console.log(1111);
+
+        this.newcharts();
+      } else if (tab.index == "3") {
+        this.handleClickfw();
       }
     },
     handleClickson(tab, event) {
@@ -1238,7 +1481,7 @@
       this.getList(tab.index);
     },
     // 鏌ヨ鏈嶅姟璁板綍
-    handleClickfw(){
+    handleClickfw() {
       getTaskservelist({
         patid: this.id,
       }).then((res) => {
@@ -1259,11 +1502,52 @@
       };
       listtag(tagqueryParams).then((response) => {
         this.options = response.rows;
+
         console.log(this.options, "鏍囩");
       });
     },
+    newcharts() {
+      this.$nextTick(function () {
+        // this.echartdom = document.getElementById("xyeCharts");
+        // this.xtechartdom = document.getElementById("xteCharts");
+        this.tzechartdom = document.getElementById("tzeCharts");
+        // this.xlechartdom = document.getElementById("xleCharts");
+        // this.xueyangechartdom = document.getElementById("xueyangeCharts");
+        // this.twechartdom = document.getElementById("tweCharts");
+
+        // this.echartsInit();
+        // this.xtechartsInit();
+        this.tzechartsInit();
+        // this.xlechartsInit();
+        // this.xueyangechartsInit();
+        // this.twechartsInit();
+      });
+    },
+
+    // 淇濆瓨鎸囨爣鏁版嵁
+    newborninfoadd() {
+      this.$refs["borninfoform"].validate((valid) => {
+        if (valid) {
+          this.borninfoform.patId = this.id;
+          this.borninfoform.sex = this.userform.sex;
+          newborninfoadd(this.borninfoform).then((res) => {
+            if (res.code == 200) {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              // this.newbornList();
+              this.tzechartsInit();
+              this.borninfoVisible = false;
+            } else {
+              this.$modal.msgError("鏂板澶辫触");
+              // this.newbornList();
+              this.tzechartsInit();
+              this.borninfoVisible = false;
+            }
+          });
+        }
+      });
+    },
     remoteMethod(value) {
-      console.log('瑙﹀彂');
+      console.log("瑙﹀彂");
 
       const illnessqueryParams = {
         pageNum: 1,
@@ -1492,64 +1776,275 @@
       // 浣跨敤鍒氭寚瀹氱殑閰嶇疆椤瑰拰鏁版嵁鏄剧ず鍥捐〃銆�
       myxyChart.setOption(option);
     },
-    // 浣撻噸鍥捐〃
-    tzechartsInit() {
-      // 鍩轰簬鍑嗗濂界殑dom锛屽垵濮嬪寲echarts瀹炰緥
+    // 鏂扮敓鍎垮浘琛�
+    // 鏂扮敓鍎垮浘琛� - 浣跨敤鏃堕棿杞�
+    async tzechartsInit() {
+      try {
+        // 绛夊緟鏁版嵁鍔犺浇瀹屾垚
+        await this.newbornList();
 
-      var myxyChart = echarts.init(this.tzechartdom);
-      var option = {
-        title: {
-          text: "浣撻噸鎸囨爣鍥�",
-        },
-        tooltip: {
-          trigger: "axis",
-        },
-        legend: {
-          data: ["韬珮", "浣撻噸", "BMI鎸囨暟"],
-        },
-        grid: {
-          left: "3%",
-          right: "4%",
-          bottom: "3%",
-          containLabel: true,
-        },
-        toolbox: {
-          feature: {
-            saveAsImage: {},
-          },
-        },
-        xAxis: {
-          type: "category",
-          boundaryGap: false,
-          data: ["涓�鏈�", "浜屾湀", "涓夋湀", "鍥涙湀", "浜旀湀", "鍏湀", "涓冩湀"],
-        },
-        yAxis: {
-          type: "value",
-        },
-        series: [
-          {
-            name: "韬珮",
-            type: "line",
-            stack: "Total",
-            data: [120, 132, 101, 134, 90, 230, 210],
-          },
-          {
-            name: "浣撻噸",
-            type: "line",
-            stack: "Total",
-            data: [220, 182, 191, 234, 290, 330, 310],
-          },
+        if (!this.borninfooptions || this.borninfooptions.length === 0) {
+          console.warn("娌℃湁鍙敤鐨勬柊鐢熷効鏁版嵁");
+          return;
+        }
 
-          {
-            name: "BMI鎸囨暟",
-            type: "line",
-            stack: "Total",
-            data: [320, 332, 301, 334, 390, 330, 320],
+        // 鍒濆鍖栧浘琛�
+        const myChart = echarts.init(this.tzechartdom);
+
+        // 澶勭悊鏁版嵁 - 鎸夋椂闂存帓搴�
+        const sortedData = this.borninfooptions
+          .filter((item) => item.generatedTime)
+          .sort(
+            (a, b) => new Date(a.generatedTime) - new Date(b.generatedTime)
+          );
+
+        if (sortedData.length === 0) {
+          console.warn("娌℃湁鏈夋晥鐨勬椂闂存暟鎹�");
+          return;
+        }
+
+        // 鍑嗗鍥捐〃鏁版嵁
+        const timeData = sortedData.map((item) => item.generatedTime);
+        const heightData = sortedData.map((item) => ({
+          name: item.generatedTime,
+          value: [item.generatedTime, item.height || null],
+        }));
+        const headCirData = sortedData.map((item) => ({
+          name: item.generatedTime,
+          value: [item.generatedTime, item.headCir || null],
+        }));
+        const weightData = sortedData.map((item) => ({
+          name: item.generatedTime,
+          value: [item.generatedTime, item.weight || null],
+        }));
+
+        const option = {
+          title: {
+            text: "鏂扮敓鍎跨敓闀垮彂鑲茶秼鍔垮浘",
+            left: "center",
+            textStyle: {
+              fontSize: 16,
+              fontWeight: "bold",
+            },
           },
-        ],
-      };
-      // 浣跨敤鍒氭寚瀹氱殑閰嶇疆椤瑰拰鏁版嵁鏄剧ず鍥捐〃銆�
-      myxyChart.setOption(option);
+          tooltip: {
+            trigger: "axis",
+            formatter: function (params) {
+              let result = `${params[0].name}<br/>`;
+              params.forEach((item) => {
+                if (item.value && item.value[1] !== null) {
+                  const unit =
+                    item.seriesName.includes("韬暱") ||
+                    item.seriesName.includes("澶村洿")
+                      ? "cm"
+                      : item.seriesName.includes("浣撻噸")
+                      ? "kg"
+                      : "";
+                  result += `${item.marker} ${item.seriesName}: ${item.value[1]} ${unit}<br/>`;
+                }
+              });
+              return result;
+            },
+          },
+          legend: {
+            data: ["韬暱", "澶村洿", "浣撻噸"],
+            bottom: 10,
+          },
+          grid: {
+            left: "3%",
+            right: "4%",
+            bottom: "15%",
+            top: "15%",
+            containLabel: true,
+          },
+          toolbox: {
+            feature: {
+              saveAsImage: {
+                title: "淇濆瓨鍥剧墖",
+                pixelRatio: 2,
+              },
+              dataView: {
+                title: "鏁版嵁瑙嗗浘",
+                readOnly: true,
+                lang: ["鏁版嵁瑙嗗浘", "鍏抽棴", "鍒锋柊"],
+              },
+              dataZoom: {
+                yAxisIndex: "none",
+                title: {
+                  zoom: "鍖哄煙缂╂斁",
+                  back: "鍖哄煙缂╂斁杩樺師",
+                },
+              },
+            },
+            right: 20,
+            top: 10,
+          },
+          dataZoom: [
+            {
+              type: "inside",
+              xAxisIndex: [0],
+              start: 0,
+              end: 100,
+            },
+            {
+              type: "slider",
+              xAxisIndex: [0],
+              start: 0,
+              end: 100,
+              bottom: 0,
+              height: 20,
+            },
+          ],
+          xAxis: {
+            type: "time", // 浣跨敤鏃堕棿杞碵1,3](@ref)
+            name: "璁板綍鏃堕棿",
+            nameLocation: "middle",
+            nameGap: 30,
+            axisLabel: {
+              formatter: {
+                year: "{yyyy}",
+                month: "{MM}/{dd}",
+                day: "{MM}/{dd}",
+                hour: "{MM}/{dd}",
+              },
+              rotate: 45,
+            },
+            splitLine: {
+              show: true,
+              lineStyle: {
+                type: "dashed",
+              },
+            },
+          },
+          yAxis: [
+            {
+              type: "value",
+              name: "韬暱/澶村洿(cm)",
+              position: "left",
+              axisLabel: {
+                formatter: "{value} cm",
+              },
+              splitLine: {
+                show: true,
+                lineStyle: {
+                  type: "dashed",
+                },
+              },
+            },
+            {
+              type: "value",
+              name: "浣撻噸(kg)",
+              position: "right",
+              axisLabel: {
+                formatter: "{value} kg",
+              },
+              splitLine: {
+                show: false,
+              },
+            },
+          ],
+          series: [
+            {
+              name: "韬暱",
+              type: "line",
+              yAxisIndex: 0,
+              data: heightData,
+              smooth: true, // 骞虫粦鏇茬嚎[1](@ref)
+              symbol: "circle",
+              symbolSize: 6,
+              itemStyle: {
+                color: "#5470C6",
+              },
+              lineStyle: {
+                width: 3,
+              },
+              markPoint: {
+                data: [
+                  { type: "max", name: "鏈�澶у��" },
+                  { type: "min", name: "鏈�灏忓��" },
+                ],
+              },
+              connectNulls: true,
+            },
+            {
+              name: "澶村洿",
+              type: "line",
+              yAxisIndex: 0,
+              data: headCirData,
+              smooth: true,
+              symbol: "circle",
+              symbolSize: 6,
+              itemStyle: {
+                color: "#91CC75",
+              },
+              lineStyle: {
+                width: 3,
+              },
+              markPoint: {
+                data: [
+                  { type: "max", name: "鏈�澶у��" },
+                  { type: "min", name: "鏈�灏忓��" },
+                ],
+              },
+              connectNulls: true,
+            },
+            {
+              name: "浣撻噸",
+              type: "line",
+              yAxisIndex: 1,
+              data: weightData,
+              smooth: true,
+              symbol: "circle",
+              symbolSize: 6,
+              itemStyle: {
+                color: "#EE6666",
+              },
+              lineStyle: {
+                width: 3,
+              },
+              markPoint: {
+                data: [
+                  { type: "max", name: "鏈�澶у��" },
+                  { type: "min", name: "鏈�灏忓��" },
+                ],
+              },
+              connectNulls: true,
+            },
+          ],
+          animationDuration: 1000,
+        };
+
+        // 浣跨敤閰嶇疆椤规樉绀哄浘琛�
+        myChart.setOption(option);
+
+        // 绐楀彛澶у皬鍙樺寲鏃堕噸鏂拌皟鏁村浘琛ㄥぇ灏�
+        const resizeHandler = () => myChart.resize();
+        window.addEventListener("resize", resizeHandler);
+
+        // 鍦ㄧ粍浠堕攢姣佹椂绉婚櫎浜嬩欢鐩戝惉
+        this.$once("hook:beforeDestroy", () => {
+          window.removeEventListener("resize", resizeHandler);
+          myChart.dispose();
+        });
+      } catch (error) {
+        console.error("鍔犺浇鍥捐〃澶辫触:", error);
+      }
+    },
+
+    async newbornList() {
+      try {
+        const response = await newborninfolist({ patId: this.id });
+        this.borninfooptions = (response.rows || []).map((item) => ({
+          ...item,
+          // 纭繚鏃堕棿鏍煎紡姝g‘
+          generatedTime: item.generatedTime || item.createTime,
+          editing: false,
+        }));
+        console.log("鍔犺浇鐨勬柊鐢熷効鏁版嵁:", this.borninfooptions);
+      } catch (error) {
+        console.error("璇锋眰鏁版嵁澶辫触:", error);
+        this.borninfooptions = [];
+      }
     },
     // 蹇冪巼
     xlechartsInit() {
@@ -1772,6 +2267,74 @@
       // 浣跨敤鍒氭寚瀹氱殑閰嶇疆椤瑰拰鏁版嵁鏄剧ず鍥捐〃銆�
       myxyChart.setOption(option);
     },
+    // 鏂扮敓鍎挎暟鎹紪杈�
+    // 缂栬緫琛�
+    handleEdit(row) {
+      this.$set(row, "editing", true);
+      // 澶囦唤鍘熷鏁版嵁鐢ㄤ簬鍙栨秷鎿嶄綔
+      this.$set(row, "originalData", { ...row });
+    },
+
+    // 淇濆瓨琛�
+    handleSave(row) {
+      this.$set(row, "editing", false);
+      // 璋冪敤API淇濆瓨鏁版嵁
+      this.saveNewbornData(row);
+    },
+
+    // 鍙栨秷缂栬緫
+    handleCancel(row) {
+      this.$set(row, "editing", false);
+      // 鎭㈠鍘熷鏁版嵁
+      if (row.originalData) {
+        Object.assign(row, row.originalData);
+        delete row.originalData;
+      }
+    },
+
+    // 鍒犻櫎琛�
+    handleDelete(index, row) {
+      this.$confirm("纭畾瑕佸垹闄よ繖鏉¤褰曞悧锛�", "鎻愮ず", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning",
+      })
+        .then(() => {
+          // 璋冪敤API鍒犻櫎鏁版嵁
+          newborninforemove(row.id).then(() => {
+            this.borninfooptions.splice(index, 1);
+            this.$message.success("鍒犻櫎鎴愬姛");
+            // 閲嶆柊娓叉煋鍥捐〃
+            this.tzechartsInit();
+          });
+        })
+        .catch(() => {});
+    },
+
+    // 淇濆瓨鏁版嵁鍒板悗绔�
+    async saveNewbornData(data) {
+      try {
+        const response = await newborninfoedit(data);
+        if (response.code === 200) {
+          this.$message.success("淇濆瓨鎴愬姛");
+          // 閲嶆柊鍔犺浇鏁版嵁骞跺埛鏂板浘琛�
+          await this.newbornList();
+          this.tzechartsInit();
+        } else {
+          this.$message.error("淇濆瓨澶辫触");
+        }
+      } catch (error) {
+        console.error("淇濆瓨鏁版嵁澶辫触:", error);
+        this.$message.error("淇濆瓨澶辫触");
+      }
+    },
+
+    // 鍒犻櫎鏁版嵁
+    async deleteNewbornData(id) {
+      // 瀹炵幇鍒犻櫎API璋冪敤
+      // 杩欓噷闇�瑕佹牴鎹綘鐨勫悗绔帴鍙e疄鐜�
+      return Promise.resolve();
+    },
   },
 };
 </script>

--
Gitblit v1.9.3