WXL (wul)
10 天以前 ab77cf83de3f6978909e6f1f3b6e0d28db456681
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
@@ -120,13 +124,24 @@
                    v-model="userform.name"
                    placeholder="请输入姓名"
                    maxlength="30"
                    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>
@@ -171,6 +186,8 @@
                      v-model="inputValue"
                      @change="handleInputConfirm"
                      filterable
                      remote
                      :remote-method="remoteMethod"
                      allow-create
                      default-first-option
                      placeholder="请选择/查询"
@@ -199,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">正常饮食</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="出院时纠正胎龄" 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>
@@ -363,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>
@@ -421,7 +443,7 @@
            prop="leavehospitaldistrictname"
            width="120"
          />
          <el-table-column
          <!-- <el-table-column
            label="主治医生"
            align="center"
            key="drname"
@@ -435,7 +457,7 @@
            key="nurseName"
            prop="nurseName"
            width="120"
          />
          /> -->
        </el-table>
        <pagination
          v-show="total > 0"
@@ -519,7 +541,6 @@
            prop="bedNo"
            width="120"
          />
        </el-table>
      </div>
      <!-- 出院 -->
@@ -597,7 +618,6 @@
            prop="bedNo"
            width="120"
          />
        </el-table>
      </div>
    </div>
@@ -618,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">宣教关怀</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">宣教关怀</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">
@@ -647,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>
@@ -674,15 +691,15 @@
                <span style="color: #2775b6">{{ item.drname }}</span></el-col
              >
              <el-col :span="6"
                >责任护士 <span style="color: #2775b6">{{ item.nurseName }}</span></el-col
                >责任护士
                <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">服务正常</span>
            <span style="color: #B55E54" v-if="item.excep==1">异常</span>
            <span style="color: #2775b6" v-if="item.excep == 0">服务正常</span>
            <span style="color: #b55e54" v-if="item.excep == 1">异常</span>
          </div>
          <!-- <div style="margin-top: 10px">
            备注:
@@ -692,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"
@@ -709,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"
@@ -726,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="责任医生" 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"
@@ -760,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"
@@ -777,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"
@@ -794,8 +921,8 @@
            />
          </el-card>
        </div>
      </div>
    </div> -->
      </div> -->
    </div>
    <el-dialog :title="titletb" :visible.sync="AddanumberVisible">
      <el-form :model="numberform" label-width="100px">
@@ -812,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="体重(kg)" 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>
@@ -838,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 {
@@ -861,25 +1056,100 @@
      tjnumber: 12,
      yynumber: 12,
      total: 0, // 总条数
      borninfoVisible: false,
      titletb: "新增联系方式",
      activeTab: "userinfo",
      id: "",
      loading: false,
      activeName: "health", //一类导航
      sonactiveName: "inhospital", //健康监测导航
      sontwoactiveName: "blood", //医疗档案导航
      sontwoactiveName: "weight", //医疗档案导航
      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: "宣教任务",
          serviceType: "4",
          templatename: "管饲宣教一期",
          createTime: "2024-11-10",
          finishtime: "2024-11-12",
          createBy: "王政",
          drname: "刘明",
          nurseName: "张淑琴",
          excep: "0",
          deptname: "呼吸科",
          leavehospitaldistrictname: "五病区",
        },
        {
          name: "通知任务",
          name: "随访任务",
          serviceType: "2",
          templatename: "心血管随访一期",
          createTime: "2024-11-11",
          finishtime: "2024-11-14",
          createBy: "章程",
          drname: "刘明",
          nurseName: "李丽",
          excep: "0",
          deptname: "呼吸科",
          leavehospitaldistrictname: "五病区",
        },
        {
          name: "问卷调查",
        },
        // {
        //   name: "问卷调查",
        // },
      ],
      borninfoform: {},
      inputVisible: false,
      AddanumberVisible: false,
      inputValue: "",
@@ -937,6 +1207,7 @@
          label: "体检",
        },
      ],
      borninfooptions: [],
      tableLabelxy: [
        { label: "测量时间", width: "", prop: "name" },
        { label: "收缩压", width: "", prop: "sex" },
@@ -948,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: "责任医生", 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" },
@@ -1004,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: {
@@ -1044,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) => {
@@ -1060,7 +1322,7 @@
    // 获取基础信息
    getuserinfo() {
      const queryParams = {
        pid: Number(this.id),
        patid: Number(this.id),
        allhosp: "0",
        pageNum: 1,
      };
@@ -1072,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];
        }
@@ -1109,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("病史保存成功");
@@ -1206,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) {
@@ -1215,12 +1481,12 @@
      this.getList(tab.index);
    },
    // 查询服务记录
    handleClickfw(){
    handleClickfw() {
      getTaskservelist({
        patid: this.id,
      }).then((res) => {
        if (res.code == 200) {
          this.record = res.rows;
          this.record = res.rows[0].serviceSubtaskList;
        }
      });
    },
@@ -1236,10 +1502,53 @@
      };
      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("触发");
      const illnessqueryParams = {
        pageNum: 1,
        pageSize: 100,
@@ -1467,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,
          // 确保时间格式正确
          generatedTime: item.generatedTime || item.createTime,
          editing: false,
        }));
        console.log("加载的新生儿数据:", this.borninfooptions);
      } catch (error) {
        console.error("请求数据失败:", error);
        this.borninfooptions = [];
      }
    },
    // 心率
    xlechartsInit() {
@@ -1747,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调用
      // 这里需要根据你的后端接口实现
      return Promise.resolve();
    },
  },
};
</script>