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 |  667 ++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 490 insertions(+), 177 deletions(-)

diff --git a/src/views/patient/patient/profile/index.vue b/src/views/patient/patient/profile/index.vue
index 0376149..df9c840 100644
--- a/src/views/patient/patient/profile/index.vue
+++ b/src/views/patient/patient/profile/index.vue
@@ -16,11 +16,11 @@
               {{ userform.sex == 1 ? "鐢�" : "濂�" }}
             </div>
             <div style="margin-left: 10px" class="text-title">
-               <span v-if="userform.age"
-                    >{{ userform.age }}{{ userform.ageUnit }}</span
-                  ><span v-if="userform.age2"
-                    >{{ userform.age2 }}{{ userform.ageUnit2 }}</span
-                  >
+              <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 }}
@@ -76,7 +76,7 @@
           > -->
           <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"
@@ -127,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>
@@ -313,9 +323,8 @@
                     <el-radio label="MCT濂�">MCT濂�</el-radio>
                     <el-radio label="鍏跺畠鐗规畩濂剁矇">鍏跺畠鐗规畩濂剁矇</el-radio>
                   </el-radio-group>
-                </el-form-item> </el-col
-              >
-
+                </el-form-item>
+              </el-col>
             </el-row>
           </el-form>
         </div>
@@ -741,18 +750,124 @@
           class="sontwoactiveName"
           style="width: 880px; height: 560px"
         ></div>
-        <div style="width: 400px">
+        <div style="width: 600px">
           <el-card class="box-card">
             <el-button @click="borninfoVisible = true" type="success" round
               >娣诲姞鏁版嵁</el-button
             >
-            <SFtable
-              :currentList="borninfooptions"
-              :tableLabel="tableLabeltz"
-              :serialnumber="false"
-              :center="false"
-              :multiplechoice="false"
-            />
+            <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>
@@ -833,12 +948,12 @@
         :model="borninfoform"
         label-width="120px"
       >
-        <!-- 韬珮 -->
-        <el-form-item label="韬珮(cm)" prop="height">
+        <!-- 韬暱 -->
+        <el-form-item label="韬暱(cm)" prop="height">
           <el-input
             v-model.number="borninfoform.height"
             autocomplete="off"
-            placeholder="璇疯緭鍏ヨ韩楂橈紙30-120cm锛�"
+            placeholder="璇疯緭鍏ヨ韩闀匡紙30-120cm锛�"
           >
           </el-input>
         </el-form-item>
@@ -852,11 +967,34 @@
           >
           </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.number="borninfoform.age"
+            v-model="borninfoform.age"
             autocomplete="off"
             placeholder="璇疯緭鍏ヨ儙榫�"
           >
@@ -896,6 +1034,8 @@
 import {
   listPatouthosp,
   newborninfoadd,
+  newborninfoedit,
+  newborninforemove,
   newborninfolist,
 } from "@/api/smartor/patouthosp";
 import { listpatient } from "@/api/patient/record";
@@ -927,7 +1067,7 @@
       dynamicTags: [],
       borninforules: {
         height: [
-          { required: true, message: "韬珮涓嶈兘涓虹┖", trigger: "blur" },
+          { required: true, message: "韬暱涓嶈兘涓虹┖", trigger: "blur" },
           {
             type: "number",
             message: "蹇呴』涓烘暟瀛楀��",
@@ -935,9 +1075,9 @@
           },
           {
             validator: (rule, value, callback) => {
-              // 鏂扮敓鍎胯韩楂樹竴鑸寖鍥达細30-120cm
+              // 鏂扮敓鍎胯韩闀夸竴鑸寖鍥达細30-120cm
               if (value < 30 || value > 120) {
-                callback(new Error("璇疯緭鍏�30-120cm涔嬮棿鐨勫悎鐞嗚韩楂樺��"));
+                callback(new Error("璇疯緭鍏�30-120cm涔嬮棿鐨勫悎鐞嗚韩闀垮��"));
               } else if (!/^[0-9]+(\.[0-9]{1})?$/.test(value)) {
                 callback(new Error("鏈�澶氫繚鐣欎竴浣嶅皬鏁�"));
               } else {
@@ -964,7 +1104,7 @@
         ],
         age: [
           { required: true, message: "鑳庨緞涓嶈兘涓虹┖", trigger: "blur" },
-          { type: "integer", message: "蹇呴』涓烘暣鏁板懆鏁�" },
+          // { type: "integer", message: "蹇呴』涓烘暣鏁板懆鏁�" },
           {
             validator: (rule, value, callback) => {
               // 妫�鏌ユ槸鍚﹀凡瀛樺湪璇ュ懆鏁版暟鎹�
@@ -1079,9 +1219,12 @@
         { label: "鑸掑紶鍘�", width: "", prop: "age" },
       ],
       tableLabeltz: [
+        { label: "鏃ユ湡", width: "", prop: "generatedTime" },
         { label: "璐d换鍖荤敓", width: "", prop: "doctor" },
-        { label: "韬珮", width: "", prop: "height" },
-        { label: "澶村洿", width: "", prop: "headCir" },
+        { label: "韬暱(cm)", width: "", prop: "height" },
+        { label: "澶村洿(cm)", width: "", prop: "headCir" },
+        { label: "鑳庨緞(鍛�)", width: "", prop: "age" },
+        { label: "浣撻噸(kg)", width: "", prop: "weight" },
       ],
       tableLabelxl: [
         { label: "娴嬮噺鏃堕棿", width: "", prop: "name" },
@@ -1326,7 +1469,9 @@
       if (tab.index == "1") {
         this.getList(1);
       } else if (tab.index == "2") {
-        this.newbornList();
+        console.log(1111);
+
+        this.newcharts();
       } else if (tab.index == "3") {
         this.handleClickfw();
       }
@@ -1384,15 +1529,17 @@
       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.newbornList();
+              this.tzechartsInit();
               this.borninfoVisible = false;
             } else {
               this.$modal.msgError("鏂板澶辫触");
-              this.newbornList();
+              // this.newbornList();
+              this.tzechartsInit();
               this.borninfoVisible = false;
             }
           });
@@ -1629,177 +1776,275 @@
       // 浣跨敤鍒氭寚瀹氱殑閰嶇疆椤瑰拰鏁版嵁鏄剧ず鍥捐〃銆�
       myxyChart.setOption(option);
     },
-    tzechartsInit() {
-      // 鑾峰彇鏁版嵁闆嗗悎
-      this.newbornList()
-        .then(() => {
-          // 妫�鏌ユ暟鎹湁鏁堟��
-          if (!this.borninfooptions || this.borninfooptions.length === 0) {
-            console.warn("娌℃湁鍙敤鐨勬柊鐢熷効鏁版嵁");
-            return;
-          }
-          // 鎵惧嚭鏈�澶х殑age鍊硷紙纭畾X杞磋寖鍥达級
-          const maxAge = Math.max(
-            ...this.borninfooptions.map((item) => parseInt(item.age) || 0)
-          );
-          if (maxAge <= 0) {
-            console.error("鏃犳晥鐨勫懆鏁版暟鎹�");
-            return;
-          }
+    // 鏂扮敓鍎垮浘琛�
+    // 鏂扮敓鍎垮浘琛� - 浣跨敤鏃堕棿杞�
+    async tzechartsInit() {
+      try {
+        // 绛夊緟鏁版嵁鍔犺浇瀹屾垚
+        await this.newbornList();
 
-          // 鍔ㄦ�佺敓鎴恱Axis鏁版嵁锛堜粠1鍛ㄥ埌鏈�澶у懆锛�
-          const xAxisData = Array.from(
-            { length: maxAge },
-            (_, i) => `${i + 1}鍛╜
+        if (!this.borninfooptions || this.borninfooptions.length === 0) {
+          console.warn("娌℃湁鍙敤鐨勬柊鐢熷効鏁版嵁");
+          return;
+        }
+
+        // 鍒濆鍖栧浘琛�
+        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)
           );
 
-          // 鍒濆鍖栨暟鎹暟缁�
-          const heightData = Array(maxAge).fill(null);
-          const headCirData = Array(maxAge).fill(null);
+        if (sortedData.length === 0) {
+          console.warn("娌℃湁鏈夋晥鐨勬椂闂存暟鎹�");
+          return;
+        }
 
-          // 閬嶅巻鎵�鏈夋暟鎹偣锛屽~鍏呭埌瀵瑰簲浣嶇疆
-          this.borninfooptions.forEach((item) => {
-            try {
-              const age = parseInt(item.age);
-              const height = parseFloat(item.height);
-              const headCir = parseFloat(item.headCir);
+        // 鍑嗗鍥捐〃鏁版嵁
+        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],
+        }));
 
-              // 纭繚鏁版嵁鏈夋晥涓斿懆鏁板湪鑼冨洿鍐�
-              if (age > 0 && age <= maxAge) {
-                const weekIndex = age - 1;
-                if (!isNaN(height)) heightData[weekIndex] = height;
-                if (!isNaN(headCir)) headCirData[weekIndex] = headCir;
-              }
-            } catch (e) {
-              console.error("鏁版嵁澶勭悊閿欒:", e);
-            }
-          });
-
-          // 鑾峰彇鎮h�呭鍚嶏紙浣跨敤绗竴鏉℃湁鏁堟暟鎹級
-          const patientName = this.borninfooptions[0]?.name || "鏈煡";
-
-          // 鍒濆鍖栧浘琛�
-          const myxyChart = echarts.init(this.tzechartdom);
-          const option = {
-            title: {
-              text: `${patientName}鐢熼暱鍙戣偛鎸囨爣鍥綻,
-              left: "center",
+        const option = {
+          title: {
+            text: "鏂扮敓鍎跨敓闀垮彂鑲茶秼鍔垮浘",
+            left: "center",
+            textStyle: {
+              fontSize: 16,
+              fontWeight: "bold",
             },
-            tooltip: {
-              trigger: "axis",
-              formatter: function (params) {
-                let result = params[0].axisValue + "<br/>";
-                params.forEach((item) => {
-                  const value = item.value !== null ? item.value : "鏆傛棤鏁版嵁";
-                  result += `${item.marker} ${item.seriesName}: ${value}<br/>`;
-                });
-                return result;
+          },
+          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,
               },
-            },
-            legend: {
-              data: ["韬珮(cm)", "澶村洿(cm)"],
-              bottom: 10,
-            },
-            grid: {
-              left: "3%",
-              right: "4%",
-              bottom: "15%", // 涓哄浘渚嬬暀鍑虹┖闂�
-              containLabel: true,
-            },
-            toolbox: {
-              feature: {
-                saveAsImage: {
-                  title: "淇濆瓨鍥剧墖",
-                  pixelRatio: 2,
-                },
-                dataView: {
-                  title: "鏁版嵁瑙嗗浘",
-                  readOnly: true,
+              dataView: {
+                title: "鏁版嵁瑙嗗浘",
+                readOnly: true,
+                lang: ["鏁版嵁瑙嗗浘", "鍏抽棴", "鍒锋柊"],
+              },
+              dataZoom: {
+                yAxisIndex: "none",
+                title: {
+                  zoom: "鍖哄煙缂╂斁",
+                  back: "鍖哄煙缂╂斁杩樺師",
                 },
               },
-              right: 20,
             },
-            xAxis: {
-              type: "category",
-              boundaryGap: false,
-              data: xAxisData,
-              axisLabel: {
-                interval: 0, // 鏄剧ず鎵�鏈夋爣绛�
-                rotate: 30, // 鏍囩鏃嬭浆闃叉閲嶅彔
+            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: {
+          },
+          yAxis: [
+            {
               type: "value",
+              name: "韬暱/澶村洿(cm)",
+              position: "left",
               axisLabel: {
                 formatter: "{value} cm",
               },
+              splitLine: {
+                show: true,
+                lineStyle: {
+                  type: "dashed",
+                },
+              },
             },
-            series: [
-              {
-                name: "韬珮",
-                type: "line",
-                data: heightData,
-                symbol: "circle",
-                symbolSize: 8,
-                itemStyle: {
-                  color: "#5470C6",
-                },
-                lineStyle: {
-                  width: 3,
-                },
-                connectNulls: true, // 杩炴帴绌哄��
+            {
+              type: "value",
+              name: "浣撻噸(kg)",
+              position: "right",
+              axisLabel: {
+                formatter: "{value} kg",
               },
-              {
-                name: "澶村洿",
-                type: "line",
-                data: headCirData,
-                symbol: "circle",
-                symbolSize: 8,
-                itemStyle: {
-                  color: "#91CC75",
-                },
-                lineStyle: {
-                  width: 3,
-                },
-                connectNulls: true, // 杩炴帴绌哄��
+              splitLine: {
+                show: false,
               },
-            ],
-            animationDuration: 1000, // 鍔ㄧ敾鏃堕暱
-          };
+            },
+          ],
+          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,
+        };
 
-          // 浣跨敤閰嶇疆椤规樉绀哄浘琛�
-          myxyChart.setOption(option);
+        // 浣跨敤閰嶇疆椤规樉绀哄浘琛�
+        myChart.setOption(option);
 
-          // 绐楀彛澶у皬鍙樺寲鏃堕噸鏂拌皟鏁村浘琛ㄥぇ灏�
-          const resizeHandler = () => myxyChart.resize();
-          window.addEventListener("resize", resizeHandler);
+        // 绐楀彛澶у皬鍙樺寲鏃堕噸鏂拌皟鏁村浘琛ㄥぇ灏�
+        const resizeHandler = () => myChart.resize();
+        window.addEventListener("resize", resizeHandler);
 
-          // 鍦ㄧ粍浠堕攢姣佹椂绉婚櫎浜嬩欢鐩戝惉锛堝鏋滄槸Vue/React缁勪欢锛�
-          this.$once("hook:beforeDestroy", () => {
-            window.removeEventListener("resize", resizeHandler);
-            myxyChart.dispose();
-          });
-        })
-        .catch((error) => {
-          console.error("鍔犺浇鏁版嵁澶辫触:", error);
+        // 鍦ㄧ粍浠堕攢姣佹椂绉婚櫎浜嬩欢鐩戝惉
+        this.$once("hook:beforeDestroy", () => {
+          window.removeEventListener("resize", resizeHandler);
+          myChart.dispose();
         });
+      } catch (error) {
+        console.error("鍔犺浇鍥捐〃澶辫触:", error);
+      }
     },
 
-    // 鑾峰彇鏂扮敓鍎挎暟鎹�
-    newbornList() {
-      return newborninfolist({ patId: this.id })
-        .then((response) => {
-          this.borninfooptions = response.rows || [];
-
-          this.newcharts();
-          console.log("鍔犺浇鐨勬柊鐢熷効鏁版嵁:", this.borninfooptions);
-          return Promise.resolve();
-        })
-        .catch((error) => {
-          console.error("璇锋眰鏁版嵁澶辫触:", error);
-          this.borninfooptions = [];
-          return Promise.reject(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() {
@@ -2022,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