qx
昨天 5f6e994d3ce5f47e8b5dd95bbdfb8aef3e321cb0
Merge branch 'master' of http://101.42.27.146:5001/r/ltkj_peisweb_region
4个文件已修改
3个文件已添加
3462 ■■■■■ 已修改文件
public/yuanqu.ini 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/proposal/index.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/doctor/checkAll/index copy.vue 2711 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/doctor/checkAll/index.vue 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hosp/order/index.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/login copy.vue 392 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/tijian/index.vue 288 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/yuanqu.ini
New file
@@ -0,0 +1,29 @@
[development]
8094=pbkwyy
81=jdczgzyy
8095=jdczgzyy
8096=sqyy
8097=wbzxyy
8098=bjxjyy
8099=bjfhyy
8100=ssyjyy
8101=bjsqyy
[staging]
9013=pbkwyy
9014=jdczgzyy
9015=sqyy
9016=wbzxyy
9017=bjxjyy
9018=ssyjyy
9019=bjsqyy
[production]
8094=pbkwyy
8095=jdczgzyy
8096=sqyy
8097=wbzxyy
8098=bjxjyy
8099=bjfhyy
8100=ssyjyy
8101=bjsqyy
src/components/proposal/index.vue
@@ -19,8 +19,8 @@
      <el-form inline @submit.native.prevent="search">
        <el-form-item>
          <el-radio-group v-model="tjproposal" @input="radiotjproposalChange">
            <el-radio-button label="0">常用建议</el-radio-button>
            <el-radio-button label="1">快捷建议</el-radio-button>
            <el-radio-button label="0">快捷建议</el-radio-button>
            <el-radio-button label="1">常用建议</el-radio-button>
          </el-radio-group>
        </el-form-item>
        <el-form-item v-show="tjproposal == 0">
@@ -171,6 +171,10 @@
      this.tjproposal = "0";
      this.getList();
    },
     mrjy(val) {
     const mode = val === "Y" ? "1" : "0";
     this.setTjProposal(mode);
    },
  },
  mounted() {
    // this.getList()
@@ -182,6 +186,12 @@
    // }
  },
  methods: {
    setTjProposal(mode) {
      if (this.tjproposal !== mode) {
        this.tjproposal = mode;
        this.radiotjproposalChange(mode); // 执行切换逻辑
      }
    },
    getAllList() {
      this.loading = true;
      this.openone = true;
src/views/doctor/checkAll/index copy.vue
New file
@@ -0,0 +1,2711 @@
<template>
  <div class="mainbox">
    <el-form :model="queryParams" ref="tableList" :inline="true" label-width="76px" style="margin-top: 10px"
      v-if="tjStatus == 0">
      <el-form-item label="姓名" prop="name">
        <el-input v-model="queryParams.name" style="width: 120px" placeholder="请输入姓名" clearable
          @keyup.enter.native="submitForm"></el-input>
      </el-form-item>
      <el-form-item label="体检号" prop="tjNumber">
        <el-input ref="inputName" v-model="queryParams.tjNumber" style="width: 180px" placeholder="请输入体检号" clearable
          @keyup.enter.native="submitForm" @blur="hb"></el-input>
      </el-form-item>
      <el-form-item label="体检时间" prop="tjTime">
        <el-date-picker v-model="startTime" type="datetimerange" align="right" :picker-options="pickerOptions"
          style="width: 310px" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:00:00']"
          format="yyyy-MM-dd HH:mm" value-format="yyyy-MM-dd HH:mm" @change="dateChangebirthday1">
        </el-date-picker>
      </el-form-item>
      <el-form-item label="单位名称" prop="tjCompName" style="margin-left: 20px">
        <el-select :remote-method="getRemoteData" v-model="queryParams.tjCompName" value-key="drugManufacturerId"
          style="width: 180px" remote filterable placeholder="请选择单位名称" clearable @change="searchSelect">
          <el-option v-for="dict in CompanyList" :key="dict.drugManufacturerId" :label="dict.cnName" :value="dict" />
        </el-select>
      </el-form-item>
      <el-form-item label="体检类别">
        <el-select style="width: 200px" v-model="queryParams.tjCategory" placeholder="请选择体检类别"  @change="searchCategory">
          <el-option v-for="dict in dict.type.dict_tjtype" :key="dict.value" :label="dict.label"
            :value="dict.value"></el-option>
        </el-select>
        <!-- <el-input v-model="form.category" placeholder="请输入体检类别" /> -->
      </el-form-item>
      <el-form-item>
        <el-button type="primary" size="mini" @click="submitForm" style="margin-right: 15px">搜索</el-button>
        <el-button size="mini" @click="resetQuery">重置</el-button>
      </el-form-item>
    </el-form>
    <el-form :model="queryParams" ref="tableList" :inline="true" label-width="76px" style="margin-top: 10px"
      v-if="tjStatus == 1">
      <el-form-item label="姓名" prop="name">
        <el-input v-model="queryParams.name" style="width: 120px" placeholder="请输入姓名" clearable
          @keyup.enter.native="submitForm"></el-input>
      </el-form-item>
      <el-form-item label="体检号" prop="tjNumber">
        <el-input ref="inputName" v-model="queryParams.tjNumber" style="width: 180px" placeholder="请输入体检号" clearable
          @keyup.enter.native="submitForm" @blur="hb"></el-input>
      </el-form-item>
      <el-form-item label="单位名称" prop="tjCompName" style="margin-left: 20px">
        <el-select :remote-method="getRemoteData" v-model="queryParams.tjCompName" value-key="drugManufacturerId"
          style="width: 180px" remote filterable placeholder="请选择单位名称" clearable @change="searchSelect">
          <el-option v-for="dict in CompanyList" :key="dict.drugManufacturerId" :label="dict.cnName" :value="dict" />
        </el-select>
      </el-form-item>
      <el-form-item label="审核医师" prop="shys">
        <el-input ref="inputName" v-model="queryParams.shys" style="width: 180px" placeholder="请输入审核医师" clearable
          @keyup.enter.native="submitForm"></el-input>
      </el-form-item>
      <el-form-item label="体检类别">
        <el-select style="width: 200px" v-model="queryParams.tjCategory" placeholder="请选择体检类别">
          <el-option v-for="dict in dict.type.dict_tjtype" :key="dict.value" :label="dict.label"
            :value="dict.value"></el-option>
        </el-select>
        <!-- <el-input v-model="form.category" placeholder="请输入体检类别" /> -->
      </el-form-item>
      <el-form-item>
        <el-button type="primary" size="mini" @click="submitForm" style="margin-right: 15px">搜索</el-button>
        <el-button size="mini" @click="resetQuery">重置</el-button>
        <el-button type="primary" size="mini" @click="toggleCollapse" style="margin-right: 15px"
          v-show="isCollapsed == 0">高级搜索</el-button>
        <el-button type="primary" size="mini" @click="toggleCollapse3" style="margin-right: 15px"
          v-show="isCollapsed == 1">高级搜索</el-button>
      </el-form-item>
      <el-row v-show="isCollapsed == 1" :gutter="20">
        <el-col :span="8">
          <el-form-item label="体检时间" prop="tjTime">
            <el-date-picker v-model="startTime" type="datetimerange" align="right" :picker-options="pickerOptions"
              style="width: 310px" start-placeholder="开始日期" end-placeholder="结束日期"
              :default-time="['00:00:00', '23:00:00']" format="yyyy-MM-dd HH:mm" value-format="yyyy-MM-dd HH:mm"
              @change="dateChangebirthday1">
            </el-date-picker>
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>
    <el-radio-group v-model="tjStatus" @input="radioChange" style="margin-left: 20px">
      <el-radio-button label="0">未审核</el-radio-button>
      <el-radio-button label="1">已审核</el-radio-button>
    </el-radio-group>
     <el-row :gutter="10" class="mb8" v-if="piliang" style="margin: 15px;">
      <el-col :span="1.5">
        <el-button type="primary"  size="mini" @click="handleshenhe">批量核收</el-button>
      </el-col>
    </el-row>
    <template>
      <el-table v-loading="loading" :data="checkList" ref="table" border style="margin: 20px; width: 98%"
        @current-change="handleCurrentChange">
        <el-table-column  type="selection" align="center" label="选择" width="50"  v-if="piliang"/>
        <el-table-column label="体检号" align="center" prop="tjNumber" :show-overflow-tooltip="true" width="160px"
          fixed="left" />
        <el-table-column label="姓名" align="center" prop="cusName" :show-overflow-tooltip="true" width="100px"
          fixed="left" />
        <el-table-column label="性别" align="center" prop="cusSex" :show-overflow-tooltip="true" width="55px">
          <template slot-scope="scope">
            <span v-if="scope.row.cusSex == '0'">男</span>
            <span v-if="scope.row.cusSex == '1'">女</span>
            <span v-if="scope.row.cusSex == '2'">未知</span>
            <span v-if="scope.row.cusSex == '9'">未说明性别</span>
          </template>
        </el-table-column>
        <el-table-column label="出生日期" align="center" prop="cusBrithday" :show-overflow-tooltip="true" width="110px" />
        <el-table-column label="电话" align="center" prop="cusPhone" :show-overflow-tooltip="true" width="130px" />
        <el-table-column label="审核时间" align="center" prop="shsj" :show-overflow-tooltip="true" width="180px" v-if="tjStatus == 1" />
        <el-table-column label="体检时间" align="center" prop="tjTime" :show-overflow-tooltip="true" width="180px" v-if="tjStatus == 0" />
        <!-- <el-table-column label="完成时间" align="center" prop="finishTime" :show-overflow-tooltip="true" width="160px" /> -->
        <el-table-column label="状态" align="center" prop="tjStatus" :show-overflow-tooltip="true" width="120px"
          v-if="tjStatus == 0">
          <template slot-scope="scope" v-if="tjStatus == 0">
            <span>{{ scope.row.tjStatus == "1" ? "已审核" : "未审核" }}</span>
          </template>
        </el-table-column>
        <el-table-column label="审核医师" align="center" prop="shys" width="120px" v-if="tjStatus == 1" />
        <el-table-column label="单位名称" align="center" prop="tjCompName" :show-overflow-tooltip="true" />
        <el-table-column label="体检类别" align="center" prop="tjCategory">
          <template slot-scope="scope">
            <dict-tag :options="dict.type.dict_tjtype" :value="scope.row.tjCategory" />
          </template>
        </el-table-column>
        <el-table-column label="操作" align="center" width="120px" fixed="right">
          <template slot-scope="scope">
            <el-button fixed="right" title="处方" type="text" size="mini" @click.stop="rowClick(scope.row)"
              icon="el-icon-edit-outline"></el-button>
            <el-button fixed="right" title="详情" type="text" size="mini" @click.stop="handleClick(scope.row)"
              icon="el-icon-document-copy"></el-button>
            <el-button type="text" size="mini" @click.stop="viewReport(scope.row)" v-if="scope.row.tjStatus == '1'"
              title="预览" icon="el-icon-view"></el-button>
            <el-button type="text" size="mini" v-if="scope.row.tjStatus == '1'" title="撤销"
              @click.stop="getRevoke(scope.row)" icon="el-icon-refresh-left"></el-button>
          </template>
        </el-table-column>
      </el-table>
      <div class="pag">
        <div class="pag1">
          <pagination v-show="total > 0" :total="total" :page.sync="queryParams.page" :limit.sync="queryParams.pageSize"
            @pagination="submitForm" />
        </div>
      </div>
    </template>
    <!-- 点击弹出框 -->
    <el-drawer custom-class="tanchu" :visible.sync="drawer" :before-close="handleClose" :with-header="false" size="100%"
      :show-close="true">
      <div v-loading="isLoading" element-loading-text="正在加载数据,请稍候..." element-loading-spinner="el-icon-loading"
        element-loading-background="rgba(255, 255, 255, 0.8)" style="height: 100%; padding: 20px; position: relative;">
        <div class="top">
          <table style="width: 100%; margin: 10px 10px; border: 1px solid #dfe6ec; border-collapse: collapse;"
            cellspacing="4">
            <caption style="background-color: #f8f8f9; font-size: 18px">
              {{ tableAll.cusName }}的体检资料
            </caption>
            <tr style="border: 1px solid #dfe6ec; border-collapse: collapse; height: 36px;">
              <td style="border: 1px solid #dfe6ec; border-collapse: collapse">姓名:</td>
              <td style="border: 1px solid #dfe6ec; border-collapse: collapse">{{ tableAll.cusName }}</td>
              <td style="border: 1px solid #dfe6ec; border-collapse: collapse">性别:{{ tableAll.cusSex == 0 ? "男" :
                tableAll.cusSex == 1 ? "女" : "未知" }}</td>
              <td style="border: 1px solid #dfe6ec; border-collapse: collapse">年龄:{{ tableAll.age }}</td>
            </tr>
            <tr style="border: 1px solid #dfe6ec; border-collapse: collapse; height: 36px;">
              <td style="border: 1px solid #dfe6ec; border-collapse: collapse">体检单号:</td>
              <td style="border: 1px solid #dfe6ec; border-collapse: collapse">{{ tableAll.tjNumber }}</td>
              <td style="border: 1px solid #dfe6ec; border-collapse: collapse">体检时间:</td>
              <td style="border: 1px solid #dfe6ec; border-collapse: collapse">{{ tableAll.tjTime }}</td>
            </tr>
          </table>
          <i class="el-icon-close" @click="guanbi"></i>
        </div>
        <div style="margin-right: 10px; display: flex" class="btnbox">
          <div class="btn1" v-if="msgtuwen == 'y' || msgtuwen == 'Y'">
            <el-button @click="Graphicreport()" type="primary">
              <span class="vertical-text">图文报告</span>
            </el-button>
          </div>
          <div class="btn1">
            <el-button @click="historicalreport()" type="primary"><span class="vertical-text">历史报告</span></el-button>
          </div>
          <div v-if="tableAll.tjCategory == '02'" class="btn1">
            <el-button @click="medicalhistory()" type="primary"><span class="vertical-text">职业病史</span></el-button>
          </div>
          <div class="btn1" v-if="msgjianqian == 'y' || msgjianqian == 'Y'">
            <el-button @click="jianqian()" type="primary"><span class="vertical-text">检前问诊</span></el-button>
          </div>
          <div class="btn1">
            <el-button @click="xiangmuqingkuang()" type="primary"><span class="vertical-text">项目情况</span></el-button>
          </div>
          <div class="btn1">
            <el-button @click="yichangjieguo()" type="primary"><span class="vertical-text">异常结果</span></el-button>
          </div>
          <div class="btn1">
            <el-button @click="fuchaxiangmu()" type="primary"><span class="vertical-text">复查项目</span></el-button>
          </div>
          <div class="btn1">
            <el-button @click="yichanghuifu()" type="primary"><span class="vertical-text">异常恢复</span></el-button>
          </div>
        </div>
        <div class="box">
          <div class="left-container">
            <div class="left">
              <div v-for="(item, index) in changedate" :key="index">
                <div style="text-align: center; background-color: #aad8df; margin-top: 10px;">
                  {{ item.parent || "" }}
                </div>
                <div v-if="item.xmlb == '0'">
                  <el-table :data="item.sons" border style="width: 100%" :row-style="changRed"
                    :header-cell-style="{ background: '#aad8df' }">
                    <el-table-column align="center" label="检测项目" width="464">
                      <template slot-scope="scope">
                        <div>{{ scope.row.proName }}</div>
                      </template>
                    </el-table-column>
                    <el-table-column align="center" prop="proResult" label="检测结果" width="180"></el-table-column>
                    <el-table-column align="center" prop="" label="单位">
                      <template slot-scope="scope">
                        <div v-if="scope.row.project != null">{{ scope.row.standard.company || "" }}</div>
                        <div v-else>{{ scope.row.proAdvice }}</div>
                      </template>
                    </el-table-column>
                    <el-table-column align="center" prop="conclusion" label="异常" width="180"></el-table-column>
                    <el-table-column align="center" prop="" label=" 参考范围">
                      <template slot-scope="scope">
                        <div v-if="scope.row.project != null">
                          {{ scope.row.standard.tjStandardGtValue || "/" + "-" + scope.row.standard.tjStandardLtValue ||
                            "/" }}
                        </div>
                        <div v-else>{{ scope.row.stanId || "/" }}</div>
                      </template>
                    </el-table-column>
                  </el-table>
                  <table style="width: 100%" v-if="tjproject != '1'">
                    <tr style="border: 1px solid #dfe6ec; border-collapse: collapse">
                      <td style="border: 1px solid #dfe6ec; border-collapse: collapse; width: 7%;">
                        小结:
                      </td>
                      <td style="border: 1px solid #dfe6ec; width: 45%">
                        <el-input v-model="item.remark" disabled></el-input>
                      </td>
                      <td style="border: 1px solid #dfe6ec; border-collapse: collapse; width: 15%;">
                        主检医师:
                      </td>
                      <td style="border: 1px solid #dfe6ec; border-collapse: collapse" colspan="2">
                        {{ item.doctorName }}
                      </td>
                    </tr>
                    <tr style="border: 1px solid #dfe6ec; border-collapse: collapse; width: 200px;">
                      <td style="border: 1px solid #dfe6ec; border-collapse: collapse; width: 240px;">
                        备注:
                      </td>
                      <td style="border: 1px solid #dfe6ec; border-collapse: collapse" colspan="3">
                        <el-input type="textarea" autosize placeholder="请输入内容" v-model="changedate[index].remark"
                          v-on:input="change" style="width: 100%"></el-input>
                      </td>
                    </tr>
                  </table>
                </div>
                <div v-else>
                  <table style="width: 100%" v-if="tjproject != '1'">
                    <tr style="border: 1px solid #dfe6ec">
                      <td style="border: 1px solid #dfe6ec; border-collapse: collapse; width: 15%; height: auto;">
                        检查所见:
                      </td>
                      <td style="border: 1px solid #dfe6ec; height: auto" colspan="2">
                        <el-input type="textarea" autosize placeholder="请输入内容" v-model="item.jgbx"
                          style="width: 100%"></el-input>
                      </td>
                    </tr>
                    <tr style="border: 1px solid #dfe6ec; border-collapse: collapse">
                      <td style="border: 1px solid #dfe6ec; border-collapse: collapse; width: 15%;">
                        检查提示:
                      </td>
                      <td style="border: 1px solid #dfe6ec; border-collapse: collapse" colspan="2">
                        <el-input type="textarea" autosize placeholder="请输入内容" v-model="item.remark"
                          style="width: 100%"></el-input>
                      </td>
                    </tr>
                    <tr style="border: 1px solid #dfe6ec; border-collapse: collapse; width: 200px;">
                      <td style="border: 1px solid #dfe6ec; border-collapse: collapse; width: 15%;">
                        主检医师:
                      </td>
                      <td style="border: 1px solid #dfe6ec; border-collapse: collapse" colspan="2">
                        {{ item.doctorName }}
                      </td>
                    </tr>
                  </table>
                </div>
              </div>
              <div v-if="tableAll && tableAll.tjCategory === '02'" class="section-title">职业病总检</div>
              <el-form v-if="tableAll && tableAll.tjCategory === '02'" ref="numberValidateForm" label-width="80px"
                class="demo-ruleForm">
                <el-form-item label="检查结论">
                  <el-input type="textarea" placeholder="请输入内容" v-model="zhiyeJl" :rows="3"
                    style="width: 96%"></el-input>
                </el-form-item>
                <el-form-item label="体检结果">
                  <el-input type="textarea" placeholder="请输入内容" v-model="zhiyeJg" :rows="3"
                    style="width: 96%"></el-input>
                </el-form-item>
              </el-form>
              <div style="margin: 0 0px 10px 15px" v-if="tjproject != '1'">
                <el-button type="primary" @click="propoChange">快捷建议</el-button>
                <el-button type="primary" @click="proposalChange">生成建议</el-button>
              </div>
              <el-form ref="numberValidateForm" label-width="80px" class="demo-ruleForm" v-if="tjproject != '1'">
                <el-form-item label="总检建议">
                  <el-input type="textarea" placeholder="请输入内容" v-model="textarea1" :rows="3"
                    style="width: 96%"></el-input>
                </el-form-item>
              </el-form>
              <el-form ref="numberValidateForm" label-width="100px" class="demo-ruleForm" v-if="tjproject != '1' && sfsjsh == 'Y'">
                <el-form-item label="上级医师建议">
                  <el-input type="textarea" placeholder="请输入内容" v-model="textarea1" :rows="3"
                    style="width: 96%"></el-input>
                </el-form-item>
              </el-form>
              <el-form ref="numberValidateForm" label-width="100px" class="demo-ruleForm" v-if="tjproject != '1' && sfsjsh == 'Y'">
                <el-form-item label="主任医师建议">
                  <el-input type="textarea" placeholder="请输入内容" v-model="textarea1" :rows="3"
                    style="width: 96%"></el-input>
                </el-form-item>
              </el-form>
              <div slot="footer" class="dialog-footers">
                <el-button type="primary" @click.stop="guanbi">取消</el-button>
                <el-button v-if="tjproject == '0' && (msgkcf == 'y' || msgkcf == 'Y')" type="primary"
                  @click.stop="rowClick" icon="el-icon-edit-outline">开处方</el-button>
                <div v-if="tjproject == '0'">
                  <el-button type="primary" @click="determine" :disabled="isdisabled">提交并生成报告</el-button>
                </div>
              </div>
            </div>
          </div>
          <div class="rightbox">
            <div class="right">
              <template v-if="status1 == 0">
                <div v-for="(item, index) in yichangList" :key="index">
                  <div style="text-align: center; background-color: #67c23a; margin-top: 10px;">
                    {{ item.proName || "" }}
                  </div>
                  <template v-if="item.jyjc == '0'">
                    <el-table :stripe="true" :row-style="red" :data="item.sone" border style="width: 100%"
                      :header-cell-style="{ background: '#67C23A' }" :expand-row-keys="expends" :row-key="getRowKeys"
                      v-loading="loading">
                      <el-table-column type="expand">
                        <template slot-scope="props">
                          <div style="padding: 10px;">
                            <!-- 内容区域 -->
                            <div v-if="props.row.advices && props.row.advices.length > 0">
                              <div v-for="(jianyi, index1) in props.row.advices" :key="index1"
                                style="margin-bottom: 10px">
                                <div>
                                  标题:
                                  <el-input v-model="jianyi.bt" size="small" type="textarea" autosize
                                    @blur="handleAdviceBlur(props.row, index1)"></el-input>
                                </div>
                                <div>
                                  内容:
                                  <el-input v-model="jianyi.nr" size="small" type="textarea" autosize
                                    @blur="handleAdviceBlur(props.row, index1)"></el-input>
                                </div>
                              </div>
                            </div>
                            <!-- 如果 advices 为空时,渲染空的输入框 -->
                            <div v-else>
                              <div>
                                标题:
                                <el-input v-model="emptyAdvice.bt" size="small" type="textarea" autosize
                                  @blur="handleAdviceBlur(props.row, -1)"></el-input>
                              </div>
                              <div>
                                内容:
                                <el-input v-model="emptyAdvice.nr" size="small" type="textarea" autosize
                                  @blur="handleAdviceBlur(props.row, -1)"></el-input>
                              </div>
                            </div>
                            <div style="margin-top: 10px;">
                              <el-button @click="shanchu(props.row)" type="danger" size="small">删除</el-button>
                            </div>
                          </div>
                        </template>
                      </el-table-column>
                      <el-table-column align="center" label="检测项目" :show-overflow-tooltip="true" width="353">
                        <template slot-scope="scope">
                          <div>{{ scope.row.proName }}</div>
                        </template>
                      </el-table-column>
                      <el-table-column align="center" prop="proResult" label="检测结果" width="85"></el-table-column>
                      <el-table-column align="center" prop="stanId" label=" 参考范围" width="117"></el-table-column>
                      <el-table-column align="center" prop="proAdvice" label="单位" width="78"></el-table-column>
                    </el-table>
                  </template>
                  <template v-if="item.jyjc == '1'">
                    <el-table :stripe="true" :row-style="red" :data="item.sone" border style="width: 100%"
                      :header-cell-style="{ background: '#67C23A' }" :expand-row-keys="expends" :row-key="getRowKeys">
                      <el-table-column type="expand">
                        <template slot-scope="props">
                          <div style="padding: 10px;">
                            <!-- 内容区域 -->
                            <div v-if="props.row.advices && props.row.advices.length > 0">
                              <div v-for="(jianyi, index1) in props.row.advices" :key="index1"
                                style="margin-bottom: 10px">
                                <div>
                                  标题:
                                  <el-input v-model="jianyi.bt" size="small" type="textarea" autosize
                                    @blur="handleAdviceBlur(props.row, index1)"></el-input>
                                </div>
                                <div>
                                  内容:
                                  <el-input v-model="jianyi.nr" size="small" type="textarea" autosize
                                    @blur="handleAdviceBlur(props.row, index1)"></el-input>
                                </div>
                              </div>
                            </div>
                            <!-- 如果 advices 为空时,渲染空的输入框 -->
                            <div v-else>
                              <div>
                                标题:
                                <el-input v-model="emptyAdvice.bt" size="small" type="textarea" autosize
                                  @blur="handleAdviceBlur(props.row, -1)"></el-input>
                              </div>
                              <div>
                                内容:
                                <el-input v-model="emptyAdvice.nr" size="small" type="textarea" autosize
                                  @blur="handleAdviceBlur(props.row, -1)"></el-input>
                              </div>
                            </div>
                            <div style="margin-top: 10px;">
                              <el-button @click="shanchu(props.row)" type="danger" size="small">删除</el-button>
                            </div>
                          </div>
                        </template>
                      </el-table-column>
                      <el-table-column align="center" label="检测项目" width="232" :show-overflow-tooltip="true">
                        <template slot-scope="scope">
                          <div>{{ scope.row.proName }}</div>
                        </template>
                      </el-table-column>
                      <el-table-column align="center" prop="proResult" label="检测结果" width="403"></el-table-column>
                    </el-table>
                  </template>
                </div>
              </template>
              <template v-if="status1 == 1">
                <div>
                  <div style="text-align: center; background-color: #e6a23c; margin-top: 10px;">
                    项目检查情况
                  </div>
                  <el-table :row-style="redxiangmu" :data="statusList" style="width: 100%"
                    :header-cell-style="{ background: '#e6a23c' }">
                    <el-table-column align="center" label="部门" width="144" prop="deptName"></el-table-column>
                    <el-table-column align="center" prop="proName" label="项目" width="260"></el-table-column>
                    <el-table-column label="状态" align="center" prop="type" :show-overflow-tooltip="true" width="120">
                      <template slot-scope="scope">
                        <span v-if="scope.row.type == '0'">未审核</span>
                        <span v-if="scope.row.type == '1'">已审核</span>
                        <span v-if="scope.row.type == '2'">弃检</span>
                        <span v-if="scope.row.type == '3'">延期</span>
                      </template>
                    </el-table-column>
                    <el-table-column label="检查时间" align="center" prop="bcupdateTime" width="160" />
                    <el-table-column label="操作" align="center" width="130px">
                      <template slot-scope="scope">
                        <el-button type="primary" size="mini" @click="huifu" v-if="scope.row.type == '2'">恢复</el-button>
                      </template>
                    </el-table-column>
                  </el-table>
                </div>
              </template>
              <template v-if="status1 == 2">
                <div>
                  <div style="text-align: center; margin-top: 10px;">
                    复查项目
                  </div>
                  <div style="display: flex;margin:15px ;">
                    <span slot="label" style="display: inline-block; border-bottom: 2px solid blue;font-size: 0.8vw;"
                      @click="handleQuery">
                      项目选择
                    </span>
                    <div v-if="xmChange.length > 0" style="display: flex;">
                      <div style="margin:0 40px;font-size: 0.8vw;">项目名称:{{ xmChange[0].proName || "" }}</div>
                      <div style="margin:0 80px ;font-size: 0.8vw;">价格:{{ xmChange[0].price || "" }}</div>
                    </div>
                    <div v-else style="display: flex;">
                      <div style="margin:0 40px;font-size: 0.8vw;">项目名称:{{ }}</div>
                      <div style="margin:0 80px ;font-size: 0.8vw;">价格:{{ }}</div>
                    </div>
                    <el-button type="primary" size="mini" @click="handleaddClick()">添加</el-button>
                  </div>
                  <el-table :row-style="redxiangmu" :data="fcList" style="width: 100%" border>
                    <el-table-column type="selection" width="40" align="center" />
                    <el-table-column label="序号" align="center" prop="newID" />
                    <el-table-column label="名称" align="center" prop="proName" width="100px" />
                    <el-table-column label="价格" align="center" prop="price" />
                    <el-table-column label="科室" align="center" prop="deptName" />
                    <el-table-column label="操作" align="center" width="130px">
                      <template slot-scope="scope">
                        <el-button type="primary" size="mini" @click="handledeleteClick(scope.row)">删除</el-button>
                      </template>
                    </el-table-column>
                  </el-table>
                </div>
              </template>
              <template v-if="status1 == 3">
                <div class="hist3">
                  <span class="txt">问诊信息</span>
                  <el-form ref="form" :model="formobj" label-width="100px" :inline="true" size="mini">
                    <el-collapse class="coll" v-model="activeName" accordion>
                      <el-collapse-item class="coll" title="基本信息" name="1" style="width: 100%; font-weight: 600">
                        <div style="width: 100%">
                          <el-form-item label="姓名" prop="cusName">
                            <el-input disabled v-model="formobj.cusName" placeholder="请输入姓名" />
                          </el-form-item>
                          <el-form-item label="职业" prop="work">
                            <el-select filterable v-model="formobj.work" placeholder="请选择职业" clearable
                              style="width: 150px" disabled>
                              <el-option v-for="dict in dict.type.tj_work" :key="dict.value" :label="dict.label"
                                :value="dict.value" />
                            </el-select>
                          </el-form-item>
                          <el-form-item label="工作状态" prop="workStatus">
                            <el-select disabled filterable v-model="formobj.workStatus" placeholder="请选择工作状态" clearable
                              style="width: 150px">
                              <el-option v-for="dict in dict.type.tj_work_status" :key="dict.value" :label="dict.label"
                                :value="dict.value" />
                            </el-select>
                          </el-form-item>
                          <el-form-item label="接触毒物" prop="contactPoison">
                            <el-input disabled type="textarea" rows="4" v-model="formobj.contactPoison"
                              placeholder="请输入接触毒物" style="width: 700px" />
                          </el-form-item>
                          <el-form-item label="既往病史" prop="medicalHistory">
                            <el-input disabled type="textarea" rows="4" v-model="formobj.medicalHistory"
                              placeholder="请输入既往病史" style="width: 700px" />
                          </el-form-item>
                        </div>
                      </el-collapse-item>
                      <el-collapse-item title="月经史" name="2" v-show="sex">
                        <div style="width: 100%">
                          <el-form-item label="初潮(岁)" prop="chuchao">
                            <el-input v-model="formobj.chuchao" style="width: 70px" disabled />
                          </el-form-item>
                          <el-form-item label="经期" prop="jingqi">
                            <el-input v-model="formobj.jingqi" disabled style="width: 70px" />天
                          </el-form-item>
                          <el-form-item label="周期" prop="zhouqi">
                            <el-input v-model="formobj.zhouqi" disabled style="width: 70px" />天
                          </el-form-item>
                          <el-form-item label="末次月经" prop="mociage">
                            <el-input v-model="formobj.mociage" disabled style="width: 100px" />
                          </el-form-item>
                        </div>
                      </el-collapse-item>
                      <el-collapse-item title="生育史" name="3" v-show="sex">
                        <div style="width: 100%">
                          <el-form-item label="现有子女(人)" prop="zinv">
                            <el-input v-model="formobj.zinv" style="width: 70px" disabled />
                          </el-form-item>
                          <el-form-item label="流产(次)" prop="liuchan">
                            <el-input v-model="formobj.liuchan" style="width: 70px" disabled />
                          </el-form-item>
                          <el-form-item label="早产(次)" prop="zaochan">
                            <el-input v-model="formobj.zaochan" style="width: 70px" disabled />
                          </el-form-item>
                          <el-form-item label="死产(次)" prop="sichan">
                            <el-input v-model="formobj.sichan" style="width: 70px" disabled />
                          </el-form-item>
                          <el-form-item label="异常胎(次)" prop="yichangtai">
                            <el-input v-model="formobj.yichangtai" style="width: 70px" disabled />
                          </el-form-item>
                        </div>
                      </el-collapse-item>
                      <el-collapse-item title="烟酒史" name="4">
                        <div style="width: 100%">
                          <el-form-item label="是否吸烟" prop="xiyan">
                            <el-select disabled filterable v-model="formobj.xiyan" placeholder="请选择是否吸烟" clearable
                              style="width: 150px">
                              <el-option v-for="dict in dict.type.tj_smoking_pinlv" :key="dict.value"
                                :label="dict.label" :value="dict.value" />
                            </el-select>
                          </el-form-item>
                          <el-form-item label="吸烟频率" prop="xiyanpinlv">
                            <el-input v-model="formobj.xiyanpinlv" disabled style="width: 70px" />支/天
                          </el-form-item>
                          <el-form-item label="吸烟时间" prop="xiyanyear">
                            <el-input v-model="formobj.xiyanyear" disabled style="width: 70px" />年
                          </el-form-item><br />
                          <el-form-item label="是否饮酒" prop="yinjiu">
                            <el-select filterable v-model="formobj.yinjiu" disabled placeholder="请选择是否饮酒" clearable
                              style="width: 150px">
                              <el-option v-for="dict in dict.type.tj_smoking_pinlv" :key="dict.value"
                                :label="dict.label" :value="dict.value" />
                            </el-select>
                          </el-form-item>
                          <el-form-item label="饮酒频率" prop="yinjiupinlv">
                            <el-input v-model="formobj.yinjiupinlv" disabled style="width: 70px" />ml/天
                          </el-form-item>
                          <el-form-item label="饮酒时间" prop="yinjiuyear">
                            <el-input v-model="formobj.yinjiuyear" disabled style="width: 70px" />年
                          </el-form-item>
                          <el-form-item label="其他" prop="qita">
                            <el-input v-model="formobj.qita" placeholder="请输入其他" disabled type="textarea"
                              style="width: 600px" rows="2" />
                          </el-form-item>
                        </div>
                      </el-collapse-item>
                      <el-collapse-item title="急慢性职业病史信息" name="5">
                        <div style="width: 100%">
                          <el-table border :data="formobj.tjAskHistorysList" ref="tjAskHistorys" style="width: 98%">
                            <el-table-column type="selection" width="40" align="center" />
                            <el-table-column label="疾病名称" prop="diseaseName">
                              <template slot-scope="scope">
                                <el-input size="mini" disabled v-model="scope.row.diseaseName" placeholder="请输入疾病名称" />
                              </template>
                            </el-table-column>
                            <el-table-column label="诊断日期" prop="diseaseData">
                              <template slot-scope="scope">
                                <el-date-picker size="mini" v-model="scope.row.diseaseData" align="right" type="date"
                                  placeholder="选择日期" :picker-options="pickerOptions" style="width: 130px"
                                  value-format="yyyy-MM-dd">
                                </el-date-picker>
                              </template>
                            </el-table-column>
                            <el-table-column label="诊断单位" prop="diseaseCompany">
                              <template slot-scope="scope">
                                <el-input size="mini" disabled v-model="scope.row.diseaseCompany"
                                  placeholder="请输入诊断单位" />
                              </template>
                            </el-table-column>
                            <el-table-column label="是否痊愈" prop="isOk">
                              <template slot-scope="scope">
                                <el-select disabled filterable size="mini" v-model="scope.row.isOk"
                                  placeholder="请选择是否痊愈" clearable>
                                  <el-option v-for="dict in dict.type.sys_yes_no" :key="dict.value" :label="dict.label"
                                    :value="dict.value" />
                                </el-select>
                              </template>
                            </el-table-column>
                            <el-table-column label="备注" prop="remark">
                              <template slot-scope="scope">
                                <el-input disabled size="mini" v-model="scope.row.remark" placeholder="请输入备注" />
                              </template>
                            </el-table-column>
                          </el-table>
                        </div>
                      </el-collapse-item>
                      <el-collapse-item title="职业史" name="7">
                        <div style="width: 100%">
                          <el-table border :data="formobj.workLogs" style="width: 98%">
                            <el-table-column type="selection" width="40" align="center" />
                            <el-table-column label="开始时间" prop="beginTime">
                              <template slot-scope="scope">
                                <el-date-picker size="mini" v-model="scope.row.beginTime" align="right" type="date"
                                  placeholder="选择日期" :picker-options="pickerOptions" style="width: 130px"
                                  value-format="yyyy-MM-dd">
                                </el-date-picker>
                              </template>
                            </el-table-column>
                            <el-table-column label="结束时间" prop="endTime">
                              <template slot-scope="scope">
                                <el-date-picker size="mini" disabled v-model="scope.row.endTime" align="right"
                                  type="date" placeholder="选择日期" :picker-options="pickerOptions" style="width: 130px"
                                  value-format="yyyy-MM-dd">
                                </el-date-picker>
                              </template>
                            </el-table-column>
                            <el-table-column label="工作单位" prop="workCompany">
                              <template slot-scope="scope">
                                <el-input size="mini" disabled v-model="scope.row.workCompany" placeholder="请输入工作单位" />
                              </template>
                            </el-table-column>
                            <el-table-column label="部门" prop="workDept">
                              <template slot-scope="scope">
                                <el-input disabled size="mini" v-model="scope.row.workDept" placeholder="请输入部门" />
                              </template>
                            </el-table-column>
                            <el-table-column label="工种" prop="workType">
                              <template slot-scope="scope">
                                <el-input disabled size="mini" v-model="scope.row.workType" placeholder="请输入工种" />
                              </template>
                            </el-table-column>
                            <el-table-column label="有害因素" prop="harmTypeLogs">
                              <template slot-scope="scope">
                                <el-select filterable disabled size="mini" v-model="scope.row.harmTypeLogs" multiple
                                  placeholder="请选择有害因素" clearable>
                                  <el-option v-for="dict in harmTypeList" :key="dict.aid" :label="dict.harmtype"
                                    :value="dict.aid" />
                                </el-select>
                              </template>
                            </el-table-column>
                            <el-table-column label="防护措施" prop="fangHu">
                              <template slot-scope="scope">
                                <el-input disabled size="mini" v-model="scope.row.fangHu" placeholder="请输入防护措施" />
                              </template>
                            </el-table-column>
                          </el-table>
                        </div>
                      </el-collapse-item>
                    </el-collapse>
                  </el-form>
                </div>
              </template>
              <template v-if="status1 == 4">
                <div>
                  <el-table
                    :data="ychfList"
                    style="width: 100%"
                    :header-cell-style="{ background: '#e6a23c' }"
                  >
                    <el-table-column
                      align="center"
                      prop="jcxm"
                      label="项目名"
                      width="260"
                    ></el-table-column>
                    <el-table-column
                      label="结果"
                      align="center"
                      prop="jcjg"
                      width="160"
                    />
                    <el-table-column label="操作" align="center" width="130px">
                      <template v-slot="scope">
                        <el-button
                          type="primary"
                          size="mini"
                          @click="hfyc(scope.row.id)"
                          >恢复</el-button
                        >
                      </template>
                    </el-table-column>
                  </el-table>
                </div>
              </template>
              <el-button type="primary" @click="addnew" :disabled="isdisabled" style="margin-top: 20px;">新增</el-button>
            </div>
          </div>
        </div>
      </div>
    </el-drawer>
    <el-dialog title="PDF 预览" :visible.sync="dialogVisible" :close-on-click-modal="false" width="50%">
      <div class="main">
        <iframe id="printIframe" :src="url" frameborder="0" style="width: 100%; height: 100%"></iframe>
      </div>
    </el-dialog>
    <el-dialog title="提示" :visible.sync="jianqians" width="1000px" :before-close="handleClose1">
      <jianqianwenzhen :jianqianwenzhendata="jianqianwenzhendata" v-if="flags"></jianqianwenzhen>
      <span slot="footer" class="dialog-footer">
        <el-button @click="jianqians = false">取 消</el-button>
      </span>
    </el-dialog>
    <el-dialog title="新增异常结果" :visible.sync="addNewDialogVisible" width="900px" class="custom-dialog">
      <el-form :model="newItem" ref="newItemForm" label-width="100px" class="custom-form">
        <el-form-item label="项目分类" prop="parentName">
          <el-select v-model="newItem.parentName" placeholder="请选择项目分类" clearable filterable
            @change="handleCategoryChange">
            <el-option v-for="item in projectCategories" :key="item.proId" :label="item.proName"
              :value="item.proName" />
          </el-select>
        </el-form-item>
        <el-form-item label="检测项目" prop="jcxm">
          <el-input v-model="newItem.jcxm" placeholder="请输入检测项目或从分类选择" clearable></el-input>
        </el-form-item>
        <el-form-item label="检测结果" prop="jcjg">
          <el-input v-model="newItem.jcjg" placeholder="请输入检测结果" clearable></el-input>
        </el-form-item>
        <el-form-item label="参考范围" prop="ckfw">
          <el-input v-model="newItem.ckfw" placeholder="请输入参考范围" clearable></el-input>
        </el-form-item>
        <el-form-item label="单位" prop="dw">
          <el-input v-model="newItem.dw" placeholder="请输入单位" clearable></el-input>
        </el-form-item>
        <!-- 动态建议组 -->
        <div v-for="(advice, index) in newItem.map" :key="index" class="advice-group">
          <el-form-item label="建议标题" :prop="'map.' + index + '.bt'">
            <el-input v-model="advice.bt" placeholder="请输入建议标题" clearable @focus="tan($event)"></el-input>
          </el-form-item>
          <el-form-item label="建议内容" :prop="'map.' + index + '.nr'">
            <el-input v-model="advice.nr" type="textarea" rows="3" placeholder="请输入建议内容" resize="none"
              @focus="tan($event)"></el-input>
          </el-form-item>
          <el-button v-if="index > 0" type="danger" size="small" @click="removeAdvice(index)"
            style="margin-left: 100px; margin-bottom: 10px;">删除</el-button>
        </div>
        <el-form-item>
          <el-button type="primary" size="small" @click="addAdvice" style="margin-left: 100px;">添加建议</el-button>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="addNewDialogVisible = false">取消</el-button>
        <el-button type="primary" @click="submitNewItem">确定</el-button>
      </span>
    </el-dialog>
    <el-dialog title="快捷建议选择" :visible.sync="showjianyi" width="1000px" class="custom-dialog"
      :before-close="handleCloseAdviceDialog">
      <!-- 搜索区域 -->
      <div style="margin-bottom: 15px;">
        <el-form :inline="true">
          <el-form-item label="建议名称">
            <el-input v-model="queryParams1.zyzd" placeholder="请输入建议名称进行筛选" clearable style="width: 200px"
              @input="filterAdvices(true)" @keyup.enter.native="filterAdvices(true)" />
          </el-form-item>
        </el-form>
      </div>
      <!-- 建议表格 -->
      <el-table v-loading="adviceLoading" :data="advicerulesList" ref="adviceTable" border highlight-current-row
        @current-change="handleCurrentChangeAdvice" style="max-height: 400px; overflow-y: auto;"
        :empty-text="adviceEmptyText">
        <el-table-column label="科室" prop="ks" width="100" align="center" />
        <el-table-column label="建议名称" prop="jymc" align="center" />
        <el-table-column label="建议内容" prop="jynr" align="center" />
      </el-table>
      <!-- 分页 -->
      <div class="pag">
        <div class="pag2">
          <pagination v-show="total1 > 0" :total="total1" :page.sync="queryParams1.pageNum"
            :limit.sync="queryParams1.pageSize" @pagination="filterAdvices(false)" />
        </div>
      </div>
      <!-- 底部按钮 -->
      <span slot="footer" class="dialog-footer">
        <el-button @click="cancelAdviceDialog">取消</el-button>
        <el-button type="primary" @click="applySelectedAdvice" :disabled="!selectedAdvice">确定</el-button>
      </span>
    </el-dialog>
    <el-dialog :visible.sync="xmopen" width="800px" append-to-body>
      <div style="margin: 20px;">
        <el-table :data="datasList" ref="elTable" v-loading="loading" @selection-change="handlexmChange" border
          height="320px">
          <el-table-column type="selection" width="40" align="center" />
          <el-table-column label="名称" align="center" prop="proName" width="100px" />
          <el-table-column label="价格" align="center" prop="price" />
          <el-table-column label="科室" align="center" prop="deptName" />
        </el-table>
      </div>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitFormxm">确 定</el-button>
        <el-button @click="cancels">取 消</el-button>
      </div>
    </el-dialog>
    <Packages ref="bbb" :baogao="baogao" />
    <Prescription ref="Pre" :preObj="preObj" />
    <proposal ref="proposal" :cusobj="cusobj" @event1="eventchange($event)" />
    <createproposal ref="createproposal" :creatobj="creatobj" />
    <el-dialog title="常用建议维护" :visible.sync="propdialog" width="500px" append-to-body></el-dialog>
  </div>
</template>
<script>
import _ from 'lodash';
import jianqianwenzhen from "@/components/jianqianwenzhen";
import Packages from "@/components/Packages";
import Prescription from "@/components/Prescription";
import proposal from "@/components/proposal";
import createproposal from "@/components/createproposal";
import {
  getcheckList,
  getTjdetailList,
  getupdateCheckType,
  getupdateCheckTypeHuaYan,
  getModifiedState,
  getfiedState,
  getState,
  getforceIn,
  gettoPdf,
  getModified,
  isPdfOrJimu,
  addOrder,
  addOrder1,
  getFcList,
  UpdFcPro,
  huiFuyichangxiangmu,
  hfbt,
} from "@/api/doctor/checkAll";
import { getInfoById } from "@/api/hosp/history";
import { getInfo } from "@/api/login";
import { getCompany, queryCompany } from "@/api/team/tuanti";
import { reportHistory, yichang, shanchu } from "@/api/doctor/check";
import { getPdf, revoke } from "@/api/hosp/order";
import { cSWebGetPro,huifu,} from "@/api/doctor/examination";
import ViewPdf from "@/components/ViewPdf";
import Historicalreport from "@/components/Historicalreport";
import { getDicts } from "@/api/system/dict/data";
import { getTjYxjcList } from "@/api/system/package";
import { getNewDateList } from "@/api/hosp/order";
import { getConfigKey } from "@/api/system/config";
import moment from "moment";
import { listAdvicerules } from "@/api/hosp/advicerules";
export default {
  components: {
    ViewPdf,
    Historicalreport,
    jianqianwenzhen,
    Packages,
    proposal,
    createproposal,
    Prescription,
  },
  dicts: [
    "dict_team",
    "dict_tjtype",
    "sys_user_sex",
    "sys_yes_no",
    "tj_result_type",
    "lj_positive",
    "tj_work",
    "tj_work_status",
    "tj_smoking_pinlv",
    "tj_work",
  ],
  name: "checkAll",
  data() {
    return {
      sfsjsh: '', // 是否三级审核
      zhiyeJl: '', // 初始化检查结论为空
      zhiyeJg: '', // 初始化体检结果为默认值
      selectedAdvice: null,
      activeAdviceIndex: 0,
      gotyval: null,
      advicerulesList: [],
      xmChange: [],
      showjianyi: false,
      piliang: false,
      isLoading: false,
      adviceLoading: false,
      adviceEmptyText: '暂无数据',
      total1: 0,
      forms: {
        pacName: ""
      },
      xmopen: false,
      datasList: [],
      queryParams1: {
        pageNum: 1,
        pageSize: 10,
        zyzd: '',
      },
      adviceCache: new Map(),
      addNewDialogVisible: false,
      newItem: {
        parentName: '',
        jcxm: '',
        jcjg: '',
        ckfw: '',
        dw: '',
        map: [{ bt: '', nr: '' }]
      },
      projectCategories: [],
      emptyAdvice: {
        bt: "",
        nr: "",
      },
      initialTotalCheckAdvice: "",
      initialState: "",
      preObj: {},
      baogao: [],
      flags: false,
      jianqianwenzhendata: [],
      jianqians: false,
      sex: true,
      activeName: "1",
      hosproy: true,
      remarks: "",
      remark: "",
      creatobj: {},
      propdialog: false,
      proIds: "",
      cusobj: {},
      xiaojie: "",
      isdisabled: false,
      src: "",
      url: "",
      userId: "",
      flag: true,
      bill: null,
      numberList: [],
      reportHistorydata: [],
      dialogVisible: false,
      pickerOptions: {
        shortcuts: [
          {
            text: "最近一周",
            onClick(picker) {
              const end = new Date();
              const start = new Date();
              start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
              picker.$emit("pick", [start, end]);
            },
          },
          {
            text: "最近一个月",
            onClick(picker) {
              const end = new Date();
              const start = new Date();
              start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
              picker.$emit("pick", [start, end]);
            },
          },
          {
            text: "最近三个月",
            onClick(picker) {
              const end = new Date();
              const start = new Date();
              start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
              picker.$emit("pick", [start, end]);
            },
          },
        ],
      },
      msgtuwen: "",
      msgjianqian: "",
      msgkcf: "",
      checkList: [],
      tjStatus: "0",
      tjproject: "0",
      total: 0,
      CompanyList: [],
      Testitems: [],
      CheckBox: {},
      startTime: [],
      isCollapsed: 0,
      textarea1: "",
      loading: true,
      selectLettercurrent: " ",
      drawer: false,
      tableAll: {},
      tjNumber: "",
      DeptadviceAll: [],
      MsgId: "",
      Deptobj: "",
      changedate: [],
      dataText: [],
      status: {},
      queryParams: {
        page: 1,
        pageSize: 10,
        tjNumber: "",
        beginTime: null,
        endTime: null,
        compId: null,
        name: null,
        checkStatus: null,
        shys: null,
        tjCategory: null
      },
      formobj: {},
      yichangList: [],
      fcList: [],
      statusList: [],
      queryParam: {
        pageNum: 1,
        pageSize: 10,
        company: undefined,
        companyId: undefined,
        pacId: undefined,
        pacName: undefined,
        jobNo: undefined,
        name: undefined,
        sex: undefined,
        idCard: undefined,
        age: undefined,
        birthday: undefined,
        position: undefined,
        department: undefined,
        departmentId: undefined,
        phoe: undefined,
        address: undefined,
        marriage: undefined,
        nation: undefined,
        email: undefined,
        tjCategory: undefined,
        payType: undefined,
      },
      status1: 0,
      viewportHeight: 0,
      expends: [],
    };
  },
  created() {
    console.log(this.dict.type.dict_tjtype, "职业体检");
    this.getConfigKey();
    this.getdate();
  },
  mounted() {
    this.$nextTick(() => {
      this.$refs.inputName.focus();
      this.viewportHeight = window.innerHeight || document.documentElement.clientHeight;
    });
  },
  methods: {
    // 打开建议选择弹窗
    tan(event) {
      this.activeAdviceIndex = event.target.closest('.advice-group')
        ? Array.from(event.target.closest('.el-form').querySelectorAll('.advice-group'))
          .indexOf(event.target.closest('.advice-group'))
        : 0;
      this.queryParams1.pageNum = 1;
      this.queryParams1.pageSize = 10;
      this.queryParams1.zyzd = '';
      this.selectedAdvice = null;
      this.advicerulesList = [];
      this.total1 = 0;
      this.adviceCache.clear();
      this.filterAdvices();
      this.showjianyi = true;
    },
    // 筛选快捷建议(防抖 800ms,带缓存和加载状态)
    filterAdvices: _.debounce(function (resetPage = false) {
      if (resetPage) {
        this.queryParams1.pageNum = 1;
      }
      const cacheKey = `${this.queryParams1.zyzd || ''}_${this.queryParams1.pageNum}_${this.queryParams1.pageSize}`;
      if (this.adviceCache.has(cacheKey)) {
        const cachedData = this.adviceCache.get(cacheKey);
        this.advicerulesList = cachedData.rows;
        this.total1 = cachedData.total;
        this.adviceEmptyText = this.advicerulesList.length === 0 ? '暂无匹配的建议' : '暂无数据';
        return;
      }
      this.adviceLoading = true;
      this.adviceEmptyText = '加载中...';
      listAdvicerules(this.queryParams1)
        .then((response) => {
          this.advicerulesList = response.rows || [];
          this.total1 = response.total || 0;
          this.adviceCache.set(cacheKey, {
            rows: this.advicerulesList,
            total: this.total1,
          });
          this.adviceEmptyText = this.advicerulesList.length === 0 ? '暂无匹配的建议' : '暂无数据';
        })
        .catch((error) => {
          console.error('筛选快捷建议失败:', error);
          this.advicerulesList = [];
          this.total1 = 0;
          this.adviceEmptyText = '加载失败,请稍后重试';
          this.$message.error('加载建议失败,请检查网络后重试');
        })
        .finally(() => {
          this.adviceLoading = false;
        });
    }, 800),
    handleCurrentChangeAdvice(currentRow) {
      this.selectedAdvice = currentRow;
    },
    toggleCollapse3() {
      this.isCollapsed = 0;
    },
    toggleCollapse() {
      this.isCollapsed = 1;
    },
    applySelectedAdvice() {
      if (this.selectedAdvice) {
        this.$set(this.newItem.map, this.activeAdviceIndex, {
          bt: this.selectedAdvice.jymc,
          nr: this.selectedAdvice.jynr,
        });
        this.showjianyi = false;
        this.selectedAdvice = null;
      } else {
        this.$message.warning('请先选择一条建议');
      }
    },
    cancelAdviceDialog() {
      this.showjianyi = false;
      this.selectedAdvice = null;
      this.queryParams1.zyzd = '';
      this.queryParams1.pageNum = 1;
      this.advicerulesList = [];
      this.total1 = 0;
      this.adviceCache.clear();
    },
    handleCloseAdviceDialog(done) {
      if (this.selectedAdvice) {
        this.$confirm('您已选择一条建议,确定要关闭吗?', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning',
        })
          .then(() => {
            this.cancelAdviceDialog();
            done();
          })
          .catch(() => { });
      } else {
        this.cancelAdviceDialog();
        done();
      }
    },
    handleAdviceBlur(row, index) {
      let advicesToSubmit = [];
      if (index === -1) {
        if (this.emptyAdvice.bt || this.emptyAdvice.nr) {
          advicesToSubmit = [{ bt: this.emptyAdvice.bt || '', nr: this.emptyAdvice.nr || '' }];
          this.$set(row, 'advices', advicesToSubmit);
        }
      } else {
        advicesToSubmit = row.advices;
      }
      if (!advicesToSubmit || advicesToSubmit.length === 0) {
        return;
      }
      const parentItem = this.yichangList.find(item =>
        item.sone.some(soneItem => soneItem.orderDetailId === row.orderDetailId)
      );
      if (!parentItem) {
        this.$message.error('未找到对应的父级项目');
        return;
      }
      const data = {
        tjh: this.tableAll.tjNumber,
        parentName: parentItem.proName,
        jcxm: row.proName,
        jcjg: row.proResult,
        ckfw: row.stanId,
        dw: row.proAdvice,
        map: advicesToSubmit,
        jyjc: parentItem.jyjc,
        id: row.orderDetailId,
      };
      addOrder1(data).then((res) => {
        if (res.code === 200) {
          // 成功更新建议
        } else {
          this.$message.error('建议更新失败:' + (res.msg || '未知错误'));
        }
      }).catch((error) => {
        console.error('建议更新失败:', error);
        this.$message.error('建议更新失败:' + error.message);
      });
    },
    handleSelectionChange(selection) {
      console.log(selection);
    },
    submitNewItem() {
      const data = {
        tjh: this.tableAll.tjNumber,
        parentName: this.newItem.parentName,
        jcxm: this.newItem.jcxm,
        jcjg: this.newItem.jcjg,
        ckfw: this.newItem.ckfw,
        dw: this.newItem.dw,
        map: this.newItem.map,
        jyjc: this.newItem.ckfw ? "0" : "1"
      };
      addOrder1(data).then((res) => {
        if (res.code === 200) {
          this.$message.success('新增异常结果成功');
          this.addNewDialogVisible = false;
          this.yichangjieguo();
        } else {
          this.$message.error('新增失败');
        }
      }).catch((error) => {
        console.error('新增异常结果失败:', error);
        this.$message.error('新增异常结果失败');
      });
    },
    addnew() {
      this.newItem = {
        parentName: '',
        jcxm: '',
        jcjg: '',
        ckfw: '',
        dw: '',
        map: [{ bt: '', nr: '' }]
      };
      this.addNewDialogVisible = true;
      cSWebGetPro(this.tjNumber).then((res) => {
        if (res.data && Array.isArray(res.data)) {
          this.projectCategories = res.data;
        } else {
          this.$message.warning('未获取到项目分类数据');
          this.projectCategories = [];
        }
      }).catch((error) => {
        console.error('获取项目分类失败:', error);
        this.$message.error('获取项目分类失败');
        this.projectCategories = [];
      });
    },
    handleCategoryChange(value) {
      if (value) {
        this.newItem.jcxm = value;
      }
    },
    change(val) {
      console.log('选中的值是:', val);
    },
    addAdvice() {
      this.newItem.map.push({ bt: '', nr: '' });
    },
    removeAdvice(index) {
      if (this.newItem.map.length > 1) {
        this.newItem.map.splice(index, 1);
      } else {
        this.$message.warning('至少保留一组建议');
      }
    },
    shanchu(row) {
      this.isdisabled = true;
      shanchu({
        id: row.orderDetailId,
      }).then((res) => {
        console.log(res, 1111);
        if (res.code === 200) {
          const parentItem = this.yichangList.find(item =>
            item.sone.some(soneItem => soneItem.orderDetailId === row.orderDetailId)
          );
          if (parentItem) {
            const index = parentItem.sone.findIndex(item => item.orderDetailId === row.orderDetailId);
            if (index > -1) {
              parentItem.sone.splice(index, 1);
              if (parentItem.sone.length === 0) {
                const parentIndex = this.yichangList.indexOf(parentItem);
                if (parentIndex > -1) {
                  this.yichangList.splice(parentIndex, 1);
                }
              }
              this.getExpends();
              this.$forceUpdate();
              this.$message.success('删除成功');
            } else {
              this.$message.error('未找到要删除的子项');
            }
          } else {
            this.$message.error('未找到要删除的父项');
          }
        } else {
          this.$message.error('后端删除失败:' + (res.msg || '未知错误'));
        }
      }).catch((error) => {
        console.error('删除失败:', error);
        this.$message.error('删除操作失败:' + error.message);
      }).finally(() => {
        this.isdisabled = false;
      });
    },
    handleQuery() {
      this.xmopen = true;
      let data = {
        tjNum: this.tjNumber,
        type: 0
      };
      getFcList(data).then(res => {
        this.datasList = res.data;
      });
    },
    handleaddClick() {
      console.log(this.xmChange);
      let data = {
        orderId: this.xmChange[0].orderId,
        data: [{
          proId: this.xmChange[0].proId,
          type: 1
        }]
      };
      UpdFcPro(data).then(res => { });
    },
    handledeleteClick() {
      UpdFcPro(data).then(res => { });
    },
    handlexmChange(selection) {
      this.xmChange = [];
      this.xmChange = selection;
      if (selection.length > 1) {
        let del_row = selection.shift();
        this.$refs.elTable.toggleRowSelection(del_row, false);
      }
    },
    submitFormxm() {
      this.xmopen = false;
    },
    cancels() {
      this.xmopen = false;
      this.xmChange = [];
    },
    getExpends() {
      this.expends = this.yichangList.flatMap(item =>
        item.sone.map(soneItem => soneItem.orderDetailId)
      );
    },
    getConfigKey() {
      getConfigKey("sfkqtwbg").then((res) => {
        this.msgtuwen = res.msg;
      });
      getConfigKey("sfkqjqwz").then((res) => {
        this.msgjianqian = res.msg;
      });
      getConfigKey("kcf").then((res) => {
        this.msgkcf = res.msg;
      });
      getConfigKey("sfsjsh").then((res) => {
        this.sfsjsh = res.msg;
      });
    },
    getRowKeys(row) {
      return row.orderDetailId;
    },
    xiangmuqingkuang() {
      this.loading = true;
      cSWebGetPro(this.tjNumber)
        .then((res) => {
          this.status1 = 1;
          this.statusList = res.data;
          if (this.statusList.length == 0) {
            this.$message.success("暂无项目情况");
          }
        })
        .catch((error) => {
          console.error('获取项目情况失败:', error);
          this.$message.error('获取项目情况失败');
        })
        .finally(() => {
          this.loading = false;
        });
    },
    guanbi() {
      this.drawer = false;
    },
    yichangjieguo() {
      this.isLoading = true
      this.status1 = 0;
      this.yichangList = []
      yichang({
        tjNum: this.tjNumber,
      })
        .then((res) => {
          this.isLoading = false
          this.yichangList = res.data;
          this.yichangList.forEach((item) => {
            item.sone.forEach((soneItem) => {
              if (!Array.isArray(soneItem.advices) || soneItem.advices.length === 0) {
                soneItem.advices = [{ bt: "", nr: "" }];
              }
            });
          });
          if (!this.yichangList) {
            this.$message.warning("暂无异常报告");
          }
        })
        .catch((error) => {
          this.isLoading = false
          console.error('获取异常结果失败:', error);
          this.$message.error('获取异常结果失败');
        })
        .finally(() => {
          this.isLoading = false
          this.loading = false;
        });
    },
    fuchaxiangmu() {
      this.loading = true;
      this.status1 = 2;
      let data = {
        tjNum: this.tjNumber,
        type: 1
      };
      getFcList(data)
        .then((res) => {
          this.fcList = res.data;
        })
        .catch((error) => {
          console.error('获取复查项目失败:', error);
          this.$message.error('获取复查项目失败');
        })
        .finally(() => {
          this.loading = false;
        });
    },
    getdate() {
      getNewDateList().then((res) => {
        this.getList();
      });
    },
    getNowTime() {
      var curDate = new Date().getTime();
      var dayNum = 7 * 24 * 3600 * 1000;
      var threeDays = curDate - dayNum;
      var sDay = this.getLocalTime(threeDays);
      var end = this.getLocalTime(curDate);
      this.startTime = [sDay, end];
    },
    add0(m) {
      return m < 10 ? "0" + m : m;
    },
    getLocalTime(nS) {
      var time = new Date(nS);
      var y = time.getFullYear();
      var m = time.getMonth() + 1;
      var d = time.getDate();
      var h = time.getHours();
      var mm = time.getMinutes();
      return (
        y +
        "-" +
        this.add0(m) +
        "-" +
        this.add0(d) +
        " " +
        this.add0(h) +
        ":" +
        this.add0(mm)
      );
    },
    jianqian() {
      this.flags = true;
      this.jianqians = true;
      let tjNumber = this.tableAll.tjNumber;
      this.jianqianwenzhendata.push(tjNumber);
    },
    getList() {
      this.loading = true;
      this.queryParams.compId = this.CheckBox.drugManufacturerId;
      this.queryParams.checkStatus = this.tjStatus;
      if (this.startTime) {
        this.queryParams.beginTime = this.startTime[0];
        this.queryParams.endTime = this.startTime[1];
      } else {
        this.queryParams.beginTime = null;
        this.queryParams.endTime = null;
      }
      getcheckList(this.queryParams).then((response) => {
        if (response.code == 200) {
          this.loading = false;
          if (response.data) {
            if (response.data.date) {
              this.checkList = response.data.date;
            } else {
              this.checkList = response.data.customers;
            }
            this.total = response.data.total;
          } else {
            this.checkList = [];
          }
        }
      });
      getCompany(this.queryParam).then((response) => {
        this.CompanyList = response.data;
        this.loading = false;
      });
    },
    viewReport(row) {
      const tjNumber = row.tjNumber;
      isPdfOrJimu(tjNumber).then((response) => {
        if (response.data.flag == "0") {
          const flag = true;
          getPdf(tjNumber, flag).then((response) => {
            if (response.size === 0) {
              const loading = this.$loading({
                lock: true,
                text: "Loading",
                spinner: "el-icon-loading",
                background: "rgba(0, 0, 0, 0.7)",
              });
              setTimeout(() => {
                loading.close();
              }, 3000);
              this.$message({
                message: "请撤回重新生成报告",
                type: "error"
              });
            } else {
              this.dialogVisible = true;
              this.url = window.webkitURL.createObjectURL(response);
            }
          });
        } else {
          let url = response.data.url;
          const params = { url };
          this.$tab.openPage("健康证检查表", "/report/zongjianjiankangzheng", params);
        }
      });
    },
    Graphicreport() {
      this.loading = true;
      let dictType = "dict_ageunit";
      getDicts(dictType)
        .then((res) => {
          if (res.code == 200) {
            res.data.forEach((item) => {
              if (this.tableAll.age_unit == item.dictValue) {
                this.tableAll.age_unit = item.dictLabel;
              }
            });
            let dictTypes = "sys_user_sex";
            return getDicts(dictTypes);
          } else {
            throw new Error('获取年龄单位字典失败');
          }
        })
        .then((res) => {
          if (res.code == 200) {
            res.data.forEach((item) => {
              if (this.tableAll.cusSex == item.dictValue) {
                this.tableAll.cusSex = item.dictLabel;
              }
            });
            let data = {
              patname: this.tableAll.cusName,
              sex: this.tableAll.cusSex,
              patage: this.tableAll.age,
              patagename: this.tableAll.age_unit,
              patbirth: this.tableAll.cusBrithday,
            };
            return getTjYxjcList(data);
          } else {
            throw new Error('获取性别字典失败');
          }
        })
        .then((res) => {
          this.baogao = res.data;
          this.$refs.bbb.open = true;
          this.$refs.bbb.title = "报告字典";
        })
        .catch((error) => {
          console.error('生成图文报告失败:', error);
          this.$message.error('生成图文报告失败');
        })
        .finally(() => {
          this.loading = false;
        });
    },
    historicalreport() {
      this.loading = true;
      let data = {
        cusId: this.tableAll.cusId,
      };
      reportHistory(data)
        .then((res) => {
          if (res.data[0] != null) {
            this.reportHistorydata = res.data;
          } else {
            this.reportHistorydata = [];
          }
        })
        .catch((error) => {
          console.error('获取历史报告失败:', error);
          this.$message.error('获取历史报告失败');
        })
        .finally(() => {
          this.loading = false;
        });
    },
    medicalhistory() {
      this.loading = true;
      this.status1 = 3;
      let tjNumber = this.tableAll.tjNumber;
      getInfoById(tjNumber)
        .then((response) => {
          this.formobj = response.data;
          if (this.formobj.xiyan == null) {
            this.formobj.xiyan = "1";
          }
          if (this.formobj.xiyanpinlv == null) {
            this.formobj.xiyanpinlv = "0";
          }
          if (this.formobj.xiyanyear == null) {
            this.formobj.xiyanyear = "0";
          }
          if (this.formobj.yinjiu == null) {
            this.formobj.yinjiu = "1";
          }
          if (this.formobj.yinjiupinlv == null) {
            this.formobj.yinjiupinlv = "0";
          }
          if (this.formobj.yinjiuyear == null) {
            this.formobj.yinjiuyear = "0";
          }
        })
        .catch((error) => {
          console.error('获取职业病史失败:', error);
          this.$message.error('获取职业病史失败');
        })
        .finally(() => {
          this.loading = false;
        });
    },
    downLoadFileImg(row) {
      const tjNumber = row.tjNumber;
      const flag = true;
      getPdf(tjNumber, flag).then((response) => {
        this.url = window.webkitURL.createObjectURL(response);
      });
    },
    rowClick(row) {
      if (row.tjNumber) {
        this.preObj = row;
      } else {
        this.preObj = this.tableAll;
      }
      this.$refs.Pre.open = true;
      this.$refs.Pre.title = "处方";
    },
    radioChange(value) {
      this.loading = true;
      if(value == "0" && this.gotyval == "01"){
        this.piliang = true
      }else{
        this.piliang = false
      }
      this.queryParams.checkStatus = value;
      this.queryParams.page = 1;
      this.queryParams.pageSize = 10;
      getcheckList(this.queryParams).then((response) => {
        if (response.data) {
          this.checkList = response.data.customers;
          this.total = response.data.total;
        } else {
          this.checkList = [];
        }
        this.loading = false;
      });
    },
    propoChange() {
      this.cusobj = { sex: this.tableAll.cusSex, isZj: 0 };
      this.$refs.proposal.open = true;
      this.$refs.proposal.title = "建议方案";
    },
    eventchange(data) {
      this.dataText = data;
      if (this.textarea1 == null) {
        this.textarea1 = "";
      }
      data.forEach((item) => {
        if (item.advice) {
          this.textarea1 += item.advice;
        } else {
          this.textarea1 += item.jynr;
        }
      });
    },
    proposalChange() {
      if (this.textarea1) {
        this.creatobj = { proParentList: this.textarea1, isZj: 0 };
        this.$refs.createproposal.open = true;
        this.$refs.createproposal.title = "常用建议维护";
      } else {
        this.$message({
          type: "warning",
          message: "请先填写总检建议",
        });
      }
    },
    radiotjprojectChange() {
      if (this.tjproject == "0") {
        getupdateCheckType(this.tjNumber).then((response) => {
          this.changedate = response.data;
          this.changedate.forEach((item) => {
            this.textarea1 = item.checkAdvice;
          });
          if (this.changedate) {
            for (let i = 0; i < this.changedate.length; i++) {
              this.remark = this.changedate[i].remark;
            }
          } else {
            this.$message({
              type: "warning",
              message: "该客户没有体检项目数据",
            });
          }
        });
      } else if (this.tjproject == "1") {
        getupdateCheckTypeHuaYan(this.tjNumber).then((res) => {
          if (res.data) {
            this.changedate = res.data;
            this.changedate.forEach((item) => {
              this.textarea1 = item.checkAdvice;
            });
            if (this.changedate) {
              for (let i = 0; i < this.changedate.length; i++) {
                this.remark = this.changedate[i].remark;
              }
            }
          } else {
            this.$message({
              type: "warning",
              message: "该客户没有化验项目数据",
            });
          }
        });
      }
    },
    getRemoteData(query) {
      if (query) {
        let compName = query;
        queryCompany(compName).then((response) => {
          this.CompanyList = response.data;
        });
      }
    },
    searchSelect(val) {
      this.CheckBox = val;
    },
    searchCategory(val){
      this.gotyval = val
      if(val == "01" && this.tjStatus == "0"){
          this.piliang = true
      }else{
         this.piliang = false
      }
    },
    handleshenhe(){
    },
    dateChangebirthday1(val) {
      this.startTime = val;
    },
    hb() {
      if (this.queryParams.tjNumber != "") {
        this.submitForm();
      }
    },
    submitForm() {
      this.loading = true;
      this.queryParams.compId = this.CheckBox.drugManufacturerId;
      this.queryParams.checkStatus = this.tjStatus;
      if (this.startTime) {
        this.queryParams.beginTime = this.startTime[0];
        this.queryParams.endTime = this.startTime[1];
      } else {
        this.queryParams.beginTime = null;
        this.queryParams.endTime = null;
      }
      getcheckList(this.queryParams).then((response) => {
        if (response.code == 200) {
          this.loading = false;
          if (response.data.customers != null) {
            this.checkList = response.data.customers;
            this.checkList.forEach((item) => {
              this.tjStatus = item.tjStatus.toString();
            });
            this.total = response.data.total;
          } else {
            this.checkList = [];
          }
        }
      });
    },
    huifu(row){
      const tjNUm = this.tjNumber;
      const proId = row.proId;
        huifu(tjNUm, proId).then((res) => {
          if (res.code == 200) {
           this.xiangmuqingkuang()
          }
        });
    },
    yichanghuifu() {
      this.loading = true;
      let tjNum = this.tjNumber;
      huiFuyichangxiangmu(tjNum).then((res) => {
        this.status1 = 4;
        this.ychfList = res.data;
        if(this.ychfList.length == 0){
          this.message.success("暂无异常恢复项目")
        }
      })
      .catch((error)=>{
        console.error("获取项目失败:",error);
        this.$message.error("获取项目失败")
      })
      .finally(()=>{
        this.loading = false;
      })
    },
    hfyc(id) {
      this.$confirm("确认要恢复该项吗?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          // 用户确认后执行接口
          hfbt({ id })
            .then((res) => {
              this.$message.success("恢复成功");
              this.yichanghuifu(); // 恢复后刷新列表
            })
            .catch((err) => {
              console.error(err);
              this.$message.error("恢复失败");
            });
        })
        .catch(() => {
          // 用户取消了操作
          this.$message.info("已取消恢复");
        });
    },
    resetQuery() {
      this.startTime = [];
      this.queryParams = {
        page: 1,
        pageSize: 10,
        tjNumber: "",
        beginTime: null,
        endTime: null,
        compId: null,
        name: null,
        checkStatus: null,
        shys: null,
        tjCategory: null
      },
        this.resetForm("tableList");
      this.submitForm();
    },
    changRed({ row }) {
      if (row.ycbz != "" && row.ycbz != null) {
        return {
          color: "red",
        };
      }
    },
    red() {
      return {
        color: "red",
      };
    },
    redxiangmu({ row }) {
      if (row.type != 1) {
        return {
          backgroundColor: "#AAD8DF !important",
        };
      }
    },
    handleCurrentChange(val) {
      console.log(val)
      if (val != null) {
        this.handleClick(val);
      }
    },
    qingkong() {
      this.tableAll = {}
      this.changedate = []
      this.yichangList = []
      this.statusList = []
      this.xmChange = []
      this.fcList = []
      this.formobj = {}
    },
    handleClick(row) {
      this.qingkong()
      this.$refs.Pre.open = false;
      this.tableAll = row;
      this.tjproject = "0";
      this.tjNumber = this.tableAll.tjNumber;
      getState(this.tjNumber).then((res) => {
        this.status = res.data;
        if (this.status) {
          if (this.status.status === "1") {
            this.yichangjieguo();
            getInfo().then((response) => {
              this.userId = response.user.userId;
              if (this.userId) {
                let data = {
                  userId: this.userId,
                  tjNumber: this.tjNumber,
                  state: 0,
                };
                getModifiedState(data).then((res) => {
                  this.MsgId = res.msg;
                  this.isLoading = true
                  this.drawer = true;
                  getupdateCheckType(this.tjNumber).then((response) => {
                    this.isLoading = false
                    this.changedate = response.data;
                    if (this.changedate) {
                      this.changedate.forEach((item) => {
                        this.textarea1 = item.checkAdvice || "";
                      });
                      this.initialTotalCheckAdvice = this.textarea1;
                      this.initialState = JSON.parse(JSON.stringify(this.changedate));
                      for (let i = 0; i < this.changedate.length; i++) {
                        this.remark = this.changedate[i].remark;
                      }
                      // 回显 zhiyeJl 和 zhiyeJg
                      this.zhiyeJl = this.changedate[0].zhiyejl || '';
                      this.zhiyeJg = this.changedate[0].zhiyejg || '未发现目标性疾病';
                    } else {
                      this.$message({
                        type: "warning",
                        message: "该客户没有体检项目数据",
                      });
                      // 如果没有数据,清空字段
                      this.zhiyeJl = '';
                      this.zhiyeJg = '未发现目标性疾病';
                    }
                  });
                });
              }
            });
          } else {
            this.$confirm("" + this.status.name + "正在修改该信息, 是否强制进去?", "提示", {
              confirmButtonText: "是",
              cancelButtonText: "否",
              type: "warning",
            })
              .then(() => {
                this.yichangjieguo();
                getInfo().then((response) => {
                  this.userId = response.user.userId;
                  if (this.userId) {
                    let data = {
                      userId: this.userId,
                      tjNumber: this.tjNumber,
                      state: 0,
                    };
                    getforceIn(data).then((res) => {
                      this.MsgId = res.msg;
                      this.isLoading = true
                      this.drawer = true;
                      getupdateCheckType(this.tjNumber).then((response) => {
                        this.isLoading = false
                        this.changedate = response.data;
                        if (this.changedate) {
                          for (let i = 0; i < this.changedate.length; i++) {
                            this.remark = this.changedate[i].remark;
                          }
                          this.initialState = JSON.parse(JSON.stringify(this.changedate));
                          this.changedate.forEach((item) => {
                            this.textarea1 = item.checkAdvice || "";
                          });
                          // 回显 zhiyeJl 和 zhiyeJg
                          this.zhiyeJl = this.changedate[0].zhiyejl || '';
                          this.zhiyeJg = this.changedate[0].zhiyejg || '未发现目标性疾病';
                        } else {
                          this.$message({
                            type: "warning",
                            message: "该客户没有体检项目数据",
                          });
                          // 如果没有数据,清空字段
                          this.zhiyeJl = '';
                          this.zhiyeJg = '未发现目标性疾病';
                        }
                      });
                    });
                  }
                });
              })
              .catch(() => {
                this.$message({
                  type: "info",
                  message: "已取消进入",
                });
              });
          }
        }
      });
    },
    handleClose(done) {
      if (JSON.stringify(this.initialState) !== JSON.stringify(this.changedate) || this.initialTotalCheckAdvice !== this.textarea1) {
        this.$confirm("您有未保存的更改,确定要关闭吗?", "提示", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning",
        })
          .then(() => {
            let data = {
              userId: this.userId,
              tjNumber: this.tjNumber,
              state: 1,
            };
            getfiedState(data).then((res) => {
              this.drawer = false;
              done();
            });
          })
          .catch(() => { });
      } else {
        let data = {
          userId: this.userId,
          tjNumber: this.tjNumber,
          state: 1,
        };
        getfiedState(data).then((res) => {
          this.drawer = false;
          done();
        });
      }
    },
    handleClose1(done) {
      this.jianqians = false;
      this.flags = false;
      done();
    },
    determine() {
      let tjNumber = this.tableAll.tjNumber;
      let tjh = this.tableAll.tjNumber;
      let advice = this.textarea1;
      let data = {
        tjNumber,
        advice,
        checkStatus: 1,
        zhiyeJl: this.zhiyeJl, // 添加检查结论
        zhiyeJg: this.zhiyeJg  // 添加体检结果
      };
      let dataList = this.yichangList
        .map((item) => {
          return item.sone.map((soneItem) => ({
            tjh,
            parentName: item.proName,
            jcxm: soneItem.proName,
            map: soneItem.advices,
            jyjc: item.jyjc,
            jcjg: soneItem.proResult,
            ckfw: soneItem.stanId,
            dw: soneItem.proAdvice,
          }));
        })
        .flat();
      this.loading = true;
      getTjdetailList(data)
        .then((response) => {
          if (response.code === 200) {
            this.$modal.msgSuccess("提交成功");
            // 清空字段
            this.zhiyeJl = '';
            this.zhiyeJg = '';
            let reportData = {
              userId: this.userId,
              tjNumber: tjNumber,
              state: 1,
              id: this.MsgId,
            };
            addOrder(dataList)
              .then((res) => {
                if (res.code == 200) {
                  gettoPdf(tjNumber)
                    .then((res) => {
                      this.$modal.msgSuccess(
                        "已生成报告!请前往报告核收页面确认!"
                      );
                    })
                    .catch(() => {
                      this.$modal.msgError(
                        "打印报告失败,请前往报告打印页面补打报告!"
                      );
                    });
                  const statePromise = getfiedState(reportData).then(() => {
                    this.drawer = false;
                  });
                  const updatePromises = this.changedate.map((item) => {
                    this.proIds = item.parentId;
                    let remarks = item.remark;
                    let updateOrderRemarkVos = [
                      {
                        tjNumber,
                        proId: this.proIds.toString(),
                        remarks,
                      },
                    ];
                    return getModified(updateOrderRemarkVos);
                  });
                  Promise.all([statePromise, ...updatePromises])
                    .then(() => {
                      this.loading = false;
                      this.queryParams.page = 1;
                      this.queryParams.pageSize = 10;
                      this.submitForm();
                      this.$forceUpdate();
                    })
                    .catch((error) => {
                      this.loading = false;
                      console.error("发生错误:", error);
                    });
                }
              })
              .catch((error) => {
                this.loading = false;
                console.error("addOrderPromise 失败:", error);
              });
          } else {
            this.loading = false;
            this.$modal.msgError("提交失败");
          }
        })
        .catch((error) => {
          this.loading = false;
          console.error("提交请求失败:", error);
          this.$modal.msgError("提交请求失败");
        });
    },
    getRevoke(row) {
      this.$confirm("确认撤销该报告吗?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          revoke(row.tjNumber).then((response) => {
            if (response.code === 200) {
              this.submitForm();
              this.$message.success("撤销成功");
            } else {
              this.$message.error("撤销失败");
            }
          });
        })
        .catch(() => {
          this.$message({
            type: "info",
            message: "已取消撤销",
          });
        });
    },
  },
};
</script>
<style scoped lang="scss">
.mainbox {
  position: relative;
}
.btn {
  margin: 20px 0px;
}
.btnbox {
  display: flex;
  flex-direction: column;
  gap: 10px;
  /* 按钮之间的间距 */
  position: fixed;
  /* 使整个按钮区域固定在页面 */
  right: 0;
  /* 固定在页面右侧 */
  top: 20%;
  /* 初始位置 */
  z-index: 10;
}
/* 每个按钮的样式 */
.btn1 {
  animation: fadeInUp 0.5s ease-out forwards;
  /* 按钮加载时的淡入动画 */
  cursor: pointer;
  text-align: center;
}
.vertical-text {
  writing-mode: vertical-rl;
  text-orientation: upright;
}
/* 设置动画效果 */
@keyframes fadeInUp {
  0% {
    opacity: 0;
    transform: translateY(20px) scale(0.5);
    /* 初始状态:透明且缩小 */
  }
  100% {
    opacity: 1;
    transform: translateY(0) scale(1);
    /* 最终状态:完全显示且正常大小 */
  }
}
/* 每个按钮的位置和动画延迟 */
.btnbox>div:nth-child(1) {
  top: 20%;
  /* 第一个按钮的位置 */
  animation-delay: 0s;
  /* 无延迟 */
}
.btnbox>div:nth-child(2) {
  top: 30%;
  /* 第二个按钮的位置 */
  animation-delay: 0.2s;
}
.btnbox>div:nth-child(3) {
  top: 40%;
  /* 第三个按钮的位置 */
  animation-delay: 0.4s;
}
.btnbox>div:nth-child(4) {
  top: 50%;
  /* 第四个按钮的位置 */
  animation-delay: 0.6s;
}
.btnbox>div:nth-child(5) {
  top: 60%;
  /* 第五个按钮的位置 */
  animation-delay: 0.8s;
}
.btnbox>div:nth-child(6) {
  top: 70%;
  /* 第六个按钮的位置 */
  animation-delay: 1s;
}
.main {
  height: 80vh; // 改为使用视窗高度
  min-height: 600px; // 设置最小高度
  overflow: auto; // 改为auto允许滚动
}
// 优化滚动条样式
.main::-webkit-scrollbar {
  width: 6px;
}
.main::-webkit-scrollbar-track {
  background-color: white;
  border-radius: 2em;
}
.main::-webkit-scrollbar-thumb {
  background-color: #dcdfe6;
  border-radius: 2em;
}
::v-deep .el-dialog {
  margin-top: 5vh !important; // 调整对话框位置
}
::v-deep .el-dialog__header {
  padding: 8px;
}
::v-deep .el-dialog__body {
  padding: 0;
}
::v-deep .el-button--medium {
  padding: 10px;
}
::v-deep .el-dialog__headerbtn {
  // position: relative;
  top: 13px;
}
/* .el-dialog {
  width: 1264px;
  height: 800px;
}
.el-dialog__header {
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.el-dialog__body {
  padding: 0;
} */
.pag {
  width: 100%;
  display: flex;
  justify-content: center;
  /* 确保分页器整体居中 */
  align-items: center;
  /* 垂直居中 */
  margin-top: 15px;
  /* 与表格的间距 */
}
.pag2 {
  width: auto;
  /* 移除固定宽度,让分页器根据内容自适应 */
  min-width: 750px;
  /* 设置最小宽度,确保分页器不会太窄 */
  text-align: center;
  /* 确保分页器内部元素居中 */
}
@media (max-width: 750px) {
  .pag2 {
    min-width: 300px;
    /* 移动端最小宽度 */
    overflow-x: auto;
    /* 允许横向滚动 */
    padding: 10px;
    /* 移动端内边距 */
  }
}
.pag1 {
  width: auto;
  /* 移除固定宽度,让分页器根据内容自适应 */
  min-width: 300px;
  /* 设置最小宽度,确保分页器不会太窄 */
  text-align: center;
  /* 确保分页器内部元素居中 */
}
.dialog-footers {
  position: fixed;
  bottom: 0;
  left: 50%;
  transform: translateX(-50%);
  display: flex;
  justify-content: center;
  align-items: center;
  z-index: 1000;
  /* 确保按钮层级在其他内容上方 */
  width: 300px;
  background-color: white;
  /* 可根据需要调整背景颜色 */
}
/* 确保按钮之间有合适的间距 */
.dialog-footers .el-button {
  margin: 0 5px;
}
textarea {
  background: #ffffff;
  border: none;
  outline: none;
}
.box {
  display: flex;
  height: calc(100vh - 200px);
  margin-top: 20px;
  overflow: hidden;
}
.left-container {
  flex: 1;
  margin-right: 10px;
  overflow: hidden;
}
.left {
  height: 100%;
  padding: 0 10px;
  overflow-y: scroll; // 改为 scroll 而不是 auto
  &::-webkit-scrollbar {
    width: 8px; // 增加宽度使其更容易看见
    background-color: #f5f5f5;
    display: block; // 确保显示
  }
  &::-webkit-scrollbar-thumb {
    background: #909399;
    border-radius: 4px;
  }
  &::-webkit-scrollbar-track {
    background: #f5f5f5;
    border-radius: 4px;
  }
}
.rightbox {
  width: 700px;
  overflow: hidden;
}
.right {
  height: 100%;
  padding: 0 10px;
  overflow-y: scroll; // 改为 scroll 而不是 auto
  &::-webkit-scrollbar {
    width: 8px; // 增加宽度
    background-color: #f5f5f5;
    display: block; // 确保显示
  }
  &::-webkit-scrollbar-thumb {
    background: #909399;
    border-radius: 4px;
  }
  &::-webkit-scrollbar-track {
    background: #f5f5f5;
    border-radius: 4px;
  }
}
.top {
  position: sticky;
  top: 0;
  z-index: 10;
  background-color: #fff;
  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
  display: flex;
  .el-icon-close {
    cursor: pointer;
    font-size: 30px;
    position: relative;
    top: 7px;
    right: 4px;
    color: rgb(24, 144, 255);
  }
}
.kong {
  box-shadow: none;
}
::v-deep .el-table--medium .el-table__cell {
  padding: 5px 0;
}
::-webkit-scrollbar {
  display: none;
}
::v-deep .el-drawer {
  padding: 0 0 50px;
}
.custom-dialog {
  ::v-deep .el-dialog__header {
    padding: 15px 20px;
    background-color: #f5f7fa;
    border-bottom: 1px solid #e8ecef;
  }
  ::v-deep .el-dialog__title {
    font-size: 18px;
    color: #303133;
    font-weight: 600;
  }
  ::v-deep .el-dialog__body {
    padding: 20px; // 增加内边距
    background-color: #fff;
  }
  ::v-deep .el-dialog__footer {
    padding: 10px 20px;
    border-top: 1px solid #e8ecef;
    text-align: right;
  }
  .custom-form {
    .advice-group {
      border: 1px solid #e8ecef;
      border-radius: 4px;
      padding: 10px;
      margin-bottom: 15px;
      background-color: #f9fbfc;
      .el-form-item {
        margin-bottom: 15px;
      }
      .el-button {
        margin-top: 5px;
      }
    }
  }
}
.section-title {
  font-size: 20px;
  font-weight: bold;
  color: #303133;
  background-color: #f5f7fa;
  padding: 10px 15px;
  border-left: 4px solid #409eff;
  /* 左侧蓝色边条,增强视觉效果 */
  margin-bottom: 15px;
  margin-top: 15px;
  border-radius: 4px;
}
.dialog-pager {
  display: flex;
  justify-content: center;
  /* 水平居中 */
  align-items: center;
  /* 垂直居中 */
  margin-top: 15px;
  /* 与表格的间距 */
  padding: 0 20px;
  /* 增加内边距,避免过于贴边 */
  box-sizing: border-box;
  /* 确保内边距不影响宽度 */
}
// .dialog-pager-inner {
//   width: auto; /* 自适应宽度 */
//   min-width: 300px; /* 设置最小宽度,确保分页器不会太窄 */
//   text-align: center; /* 确保分页器内部元素居中 */
// }</style>
src/views/doctor/checkAll/index.vue
@@ -337,8 +337,7 @@
              <el-form ref="numberValidateForm" label-width="80px" class="demo-ruleForm" v-if="tjproject != '1'">
                <el-form-item label="总检建议">
                  <el-input type="textarea" placeholder="请输入内容" v-model="textarea1" :rows="3"
                    style="width: 96%"></el-input>
                  <el-input type="textarea" placeholder="请输入内容" v-model="textarea1" :autosize="{ minRows: minRows, maxRows: maxRows }"></el-input>
                </el-form-item>
              </el-form>
              <div slot="footer" class="dialog-footers">
@@ -869,13 +868,14 @@
    </el-dialog>
    <Packages ref="bbb" :baogao="baogao" />
    <Prescription ref="Pre" :preObj="preObj" />
    <proposal ref="proposal" :cusobj="cusobj" @event1="eventchange($event)" />
    <proposal ref="proposal" :cusobj="cusobj" :mrjy="mrjy" @event1="eventchange($event)" />
    <createproposal ref="createproposal" :creatobj="creatobj" />
    <el-dialog title="常用建议维护" :visible.sync="propdialog" width="500px" append-to-body></el-dialog>
  </div>
</template>
<script>
import _ from 'lodash';
import { getConfigKey } from "@/api/system/config";
import jianqianwenzhen from "@/components/jianqianwenzhen";
import Packages from "@/components/Packages";
import Prescription from "@/components/Prescription";
@@ -945,6 +945,8 @@
      zhiyeJg: '', // 初始化体检结果为默认值
      selectedAdvice: null,
      activeAdviceIndex: 0,
      minRows: 3,
      maxRows: null,
      gotyval: null,
      advicerulesList: [],
      xmChange: [],
@@ -1000,6 +1002,7 @@
      src: "",
      url: "",
      userId: "",
      mrjy: "",
      flag: true,
      bill: null,
      numberList: [],
@@ -1116,6 +1119,12 @@
    this.$nextTick(() => {
      this.$refs.inputName.focus();
      this.viewportHeight = window.innerHeight || document.documentElement.clientHeight;
    });
    getConfigKey("zjysjymrhs").then((res) => {
      const val = parseInt(res.msg); // 确保是数字
      if (!isNaN(val)) {
        this.maxRows = val;
      }
    });
  },
@@ -1813,8 +1822,11 @@
    propoChange() {
      this.cusobj = { sex: this.tableAll.cusSex, isZj: 0 };
      this.$refs.proposal.open = true;
      this.$refs.proposal.title = "建议方案";
      getConfigKey("mrzscyjy").then((res) => {
        this.mrjy = res.msg;
        this.$refs.proposal.title = "建议方案";
        this.$refs.proposal.open = true;
      });
    },
    eventchange(data) {
src/views/hosp/order/index.vue
@@ -785,6 +785,12 @@
              </el-table-column>
              <el-table-column align="center" prop="price" label="费用合计">
              </el-table-column>
              <el-table-column align="center" prop="sfzt" label="费用状态">
                 <template v-slot="scope">
                    <span v-if="scope.row.sfzt">{{ '已结账' }}</span>
                    <span v-else>{{ '未结账' }}</span>
                 </template>
              </el-table-column>
            </el-table>
            <h3>付款详情</h3>
            <el-table :data="bill" style="width: 100%; margin-top: 10px">
src/views/login copy.vue
New file
@@ -0,0 +1,392 @@
<template>
  <div class="login">
    <!-- <div style="padding-top: 130px;"> -->
    <div style="font-weight: 700;font-size: 50px;">智能健康体检管理系统</div>
    <!-- </div> -->
    <el-form :inline="true" ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
      <div class="img">
        <img class="image" src="../assets/images/ewm.png" alt="" />
      </div>
      <div class="card">
        <!-- <h3 class="title">路泰科技后台管理系统</h3> -->
        <el-form-item>
          <el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号/手机号码/体检号"
            @keyup.enter.native="jumpInput">
            <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" @click="hide"
              @keyup.enter.native="jumpInput" />
          </el-input>
        </el-form-item>
        <el-form-item>
          <el-input v-model="loginForm.password" :type="type" auto-complete="off" placeholder="密码" ref="barcodeMsg"
            @keyup.enter.native="handleLogin">
            <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
            <i slot="suffix" class="icon-style" :class="elIcon" autocomplete="auto" @click="flag = !flag" /></el-input>
          <!-- <img :src="openeye" class="show_hid" @click="changetype" > -->
        </el-form-item>
        <el-form-item prop="code" v-if="captchaEnabled">
          <el-input v-model="loginForm.code" auto-complete="off" placeholder="验证码" style="width: 63%"
            @keyup.enter.native="handleLogin">
            <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
          </el-input>
          <div class="login-code">
            <img :src="codeUrl" @click="getCode" class="login-code-img" />
          </div>
        </el-form-item>
        <el-checkbox v-model="loginForm.rememberMe" style="margin:10px 0px 40px 0px;">记住密码</el-checkbox>
        <!-- <el-form-item style="margin-left:10px"  prop="mobile">
        <el-radio-group v-model="loginForm.mobile">
          <el-radio :label="true">员工登录</el-radio>
          <el-radio :label="false">用户登录</el-radio>
        </el-radio-group>
      </el-form-item> -->
        <el-form-item style="width:100%;">
          <el-button :loading="loading" size="medium" type="primary" style="width:310px;" @keyup.enter="keyDown(e)"
            @click.native.prevent="handleLogin">
            <span v-if="!loading">登 录</span>
            <span v-else>登 录 中...</span>
          </el-button>
          <div style="float: right;" v-if="register">
            <router-link class="link-type" :to="'/register'">立即注册</router-link>
          </div>
        </el-form-item>
      </div>
    </el-form>
    <!--  底部  -->
    <div class="el-login-footer">
      <span>Copyright © 2024-2025 All Rights Reserved.</span>
      <!-- <span>Copyright © 2022-2023龙美网络 All Rights Reserved.</span> -->
    </div>
  </div>
</template>
<script>
import { getCodeImg, getconfigKey } from "@/api/login";
import Cookies from "js-cookie";
import { encrypt, decrypt } from '@/utils/jsencrypt'
import ini from 'ini';
import fs from 'fs'; // Node.js 文件系统模块
export default {
  name: "Login",
  data() {
    return {
      codeUrl: "",
      loginForm: {
        username: "",
        password: "",
        mobile: false,
        hospId: "",
        // username:"13800138008",
        // password:"888888",
        rememberMe: false,
        code: "",
        uuid: "",
        // type: false,
      },
      loginRules: {
        username: [
          { required: true, trigger: "blur", message: "" }
        ],
        password: [
          { required: true, trigger: "blur", message: "" }
        ],
        code: [{ required: true, trigger: "change", message: "" }],
        mobile: [
          { required: true, trigger: "change", message: "" }
        ]
      },
      pwdtype: 'password',
      openeye: require('../assets/images/by.png'),
      flag: false,
      loading: false,
      configKey: "captcha_switch",
      // // 验证码开关
      captchaEnabled: true,
      // 注册开关
      register: false,
      redirect: undefined
    };
  },
  computed: {
    type() {
      return this.flag ? "text" : "password";
    },
    elIcon() {
      return this.flag ? "el-icon-minus" : "el-icon-view";
    }
  },
  mounted() {
    // 绑定监听事件
    window.addEventListener("keydown", this.keyDown);
  },
  destroyed() {
    // 销毁事件
    window.removeEventListener("keydown", this.keyDown, false);
  },
  watch: {
    $route: {
      handler: function (route) {
        this.redirect = route.query && route.query.redirect;
      },
      immediate: true
    }
  },
  created() {
    this.getstate();
    this.getCookie();
    this.loadAll();
  },
  methods: {
    getstate() {
      getconfigKey().then(res => {
        if (res.msg == "Y") {
          this.captchaEnabled = true
          this.getCode();
        } else if (res.msg == "N") {
          this.captchaEnabled = false
        }
      })
    },
    loadAll() {
      const env = process.env.VUE_APP_ENV;
      const port = window.location.port;
      // yuanqu.ini加载hospId
      fetch('/yuanqu.ini')
        .then(response => {
          if (!response.ok) {
            throw new Error('Failed to fetch config.ini');
          }
          return response.text();
        })
        .then(text => {
          const config = ini.parse(text);
          if (config[env] && config[env][port]) {
            this.loginForm.hospId = config[env][port];
            Cookies.set("hospId", this.loginForm.hospId);
          } else {
            console.error(`No hospId found for environment ${env} and port ${port}`);
            this.$message.error(`配置错误:未找到环境 ${env} 和端口 ${port} 对应的医院ID`);
          }
        })
        .catch(error => {
          console.error('Error fetching or parsing config.ini:', error);
          this.$message.error('无法加载配置文件,请联系管理员');
        });
    },
    hide() {
      // this.loginForm.username = "10001";
      // this.loginForm.password = "admin123";
    },
    changetype() {
      this.pwdtype = this.pwdtype === 'password' ? 'text' : 'password'
      this.openeye = this.openeye === require('../assets/images/by.png') ? require('../assets/images/zy.png') : require('../assets/images/by.png')
    },
    getCode() {
      getCodeImg().then(res => {
        this.captchaEnabled = res.captchaEnabled === undefined ? true : res.captchaEnabled;
        if (this.captchaEnabled) {
          this.codeUrl = "data:image/gif;base64," + res.img;
          this.loginForm.uuid = res.uuid;
        }
      });
    },
    getCookie() {
      const username = Cookies.get("username");
      const password = Cookies.get("password");
      const rememberMe = Cookies.get('rememberMe')
      this.loginForm = {
        username: username === undefined ? this.loginForm.username : username,
        password: password === undefined ? this.loginForm.password : decrypt(password),
        rememberMe: rememberMe === undefined ? false : Boolean(rememberMe),
      };
    },
    jumpInput() {
      if (this.loginForm.password) {
        this.handleLogin(); // 定义的登录方法
      } else {
        this.$refs.barcodeMsg.focus(); // 自动获取焦点
      }
    },
    handleLogin() {
      if (this.loginForm.username.length < 12) {
        this.loginForm.mobile = true;
        this.$router.push({ path: this.redirect || "/" }).catch(() => { });
      } else {
        this.$router.push({ path: this.redirect || "/404" }).catch(() => { });
        this.loginForm.mobile = false;
      }
      this.$refs.loginForm.validate(valid => {
        if (valid) {
          this.loading = true;
          if (this.loginForm.rememberMe) {
            Cookies.set("username", this.loginForm.username, { expires: 30 });
            Cookies.set("password", encrypt(this.loginForm.password), { expires: 30 });
            Cookies.set('rememberMe', this.loginForm.rememberMe, { expires: 30 });
          } else {
            Cookies.remove("username");
            Cookies.remove("password");
            Cookies.remove('rememberMe');
          }
          this.$store.dispatch("Login", this.loginForm).then((res) => {
            if (res.msg == "该账号正在使用中") {
              this.$confirm('该账号正在使用中,是否强制登陆?', '温馨提示', {
                confirmButtonText: '确定',
                cancelButtonText: '取消',
                type: 'warning'
              }).then(() => {
                this.loginForm.type = true
                this.$store.dispatch("Login", this.loginForm).then((res) => {
                  this.$router.push({ path: this.redirect || "/" }).catch(() => { });
                })
              }).catch(() => {
                this.loading = false;
              });
            } else {
              const securitMessage = JSON.parse(localStorage.getItem("securitMessage"));
              if (securitMessage) {
                if (securitMessage != null) {
                  this.$message({
                    message: securitMessage,
                    type: 'success'
                  });
                  localStorage.removeItem("securitMessage");
                }
              }
              this.$router.push({ path: this.redirect || "/" }).catch(() => { });
              location.reload();
            }
          }).catch(() => {
            this.loading = false;
            if (this.captchaEnabled) {
              this.getCode();
            }
          });
        }
      });
    }
  }
};
</script>
<style rel="stylesheet/scss" lang="scss">
.login {
  display: flex;
  justify-content: flex-start;
  align-items: center;
  width: 100%;
  height: 100%;
  // background-image: url("../assets/images/login-background.jpg");
  background-size: cover;
  flex-direction: column;
  margin-top: 170px;
}
.card {
  width: 519px;
  padding-left: 100px;
  border-left: 1px solid #ededed;
  display: flex;
  flex-direction: column;
  // margin-left: 100px;
}
.show_hid {
  width: 25px;
  height: 25px;
}
.img {
  width: 506px;
  height: 200px;
  display: flex;
  align-items: center;
  justify-content: flex-end;
}
.image {
  width: 200px;
  height: 200px;
}
.title {
  margin: 0px auto 30px auto;
  text-align: center;
  color: #707070;
}
.login-form {
  border-radius: 6px;
  background: #ffffff;
  width: 90%;
  padding: 25px 25px 5px 25px;
  // margin-left: 800px;
  margin-top: 100px;
  display: flex;
  justify-content: space-around;
  // justify-content: space-evenly;
  .el-input {
    height: 38px;
    input {
      width: 300px;
      height: 38px;
    }
  }
  .input-icon {
    height: 39px;
    width: 14px;
    margin-left: 2px;
  }
}
.login-tip {
  font-size: 13px;
  text-align: center;
  color: #bfbfbf;
}
.login-code {
  width: 33%;
  height: 38px;
  margin-top: 5px;
  // float: right;
  img {
    cursor: pointer;
    vertical-align: middle;
  }
}
.el-login-footer {
  height: 40px;
  line-height: 40px;
  position: fixed;
  bottom: 0;
  width: 100%;
  text-align: center;
  color: black;
  font-family: Arial;
  font-size: 12px;
  letter-spacing: 1px;
}
.login-code-img {
  height: 38px;
}
</style>
src/views/system/tijian/index.vue
@@ -427,7 +427,7 @@
            <el-form-item label="姓名" prop="pacName">
              <el-input v-model="queryParam.pacName" placeholder="请输入姓名" clearable @keyup.enter.native="handle" />
            </el-form-item>
             <el-form-item label="身份证" prop="pacName">
            <el-form-item label="身份证" prop="pacName">
              <el-input v-model="queryParam.pacName" placeholder="请输入身份证" clearable @keyup.enter.native="handle" />
            </el-form-item>
            <el-form-item>
@@ -952,7 +952,7 @@
      // 显示搜索条件
      showSearch: true,
      tjtype: false,
      sftj:null,
      sftj: null,
      activeNames: "first",
      // 树状形状
      Treedata: [],
@@ -984,12 +984,10 @@
        pacName: null,
        pacRemark: null,
      },
      // valueUrl: "ws://127.0.0.1:18890",
      // valueUrl: "ws://192.168.1.3:6789/websocket",
      valueUrl: "ws://127.0.0.1:6789/websocket",
      valueUrls: "ws://127.0.0.1:6789/websocket",
      // valueUrls: "ws://"+getIp() +":6789/websocket",
      // valueUrl: "ws://127.0.0.1:6789/websocket",
      // valueUrls: "ws://127.0.0.1:6789/websocket",
      valueUrl: "ws://192.168.1.244:6789/websocket",
      valueUrls: "ws://192.168.1.244:6789/websocket",
      webSocket: null,
      // 身份证需要
      // socket: null,
@@ -1742,57 +1740,57 @@
    },
    /** 登记提交按钮 */
    /** 登记提交按钮 */
  submitForm() {
  let _this = this;
  if (!this.form.cusPhone || !this.form.cusName) {
    this.$message.warning("请填选必填项");
    return;
  }
  this.$refs["form"].validate((valid) => {
    if (valid) {
      // 创建表单数据的副本并去除空格
      const formData = { ...this.form };
      formData.cusName = formData.cusName ? formData.cusName.replace(/\s/g, '') : '';
      formData.cusPhone = formData.cusPhone ? formData.cusPhone.replace(/\s/g, '') : '';
      formData.cusIdcard = formData.cusIdcard ? formData.cusIdcard.replace(/\s/g, '') : '';
      // 添加 sfzImg 字段
      formData.sfzImg = this.imageUrl || ''; // 使用 base64 格式的头像数据,若为空则传空字符串
      // 处理性别值
      if (formData.cusSex === "女") {
        formData.cusSex = 1;
      }
      if (formData.cusSex === "男") {
        formData.cusSex = 0;
      }
      if (formData.cusSex === "未知") {
        formData.cusSex = 2;
      }
      if (formData.tjType === "") {
        formData.tjType = this.dict.type.dict_team[0].value;
    submitForm() {
      let _this = this;
      if (!this.form.cusPhone || !this.form.cusName) {
        this.$message.warning("请填选必填项");
        return;
      }
      // 可选:检查 sfzImg 是否存在
      // if (!formData.sfzImg) {
      //   this.$message.warning("请先获取身份证头像");
      //   return;
      // }
      this.$refs["form"].validate((valid) => {
        if (valid) {
          // 创建表单数据的副本并去除空格
          const formData = { ...this.form };
          formData.cusName = formData.cusName ? formData.cusName.replace(/\s/g, '') : '';
          formData.cusPhone = formData.cusPhone ? formData.cusPhone.replace(/\s/g, '') : '';
          formData.cusIdcard = formData.cusIdcard ? formData.cusIdcard.replace(/\s/g, '') : '';
          // 添加 sfzImg 字段
          formData.sfzImg = this.imageUrl || ''; // 使用 base64 格式的头像数据,若为空则传空字符串
      addCustomer(formData).then((response) => {
        this.responseList = response.data;
        this.form.tjType = this.dict.type.dict_team[0].value;
        this.$modal.msgSuccess("新增成功");
        _this.tcShow = true;
        _this.isDisabled = true;
        _this.top = false;
      }).catch((error) => {
        this.$modal.msgError("登记失败,请检查数据");
        console.error("Error in addCustomer:", error);
          // 处理性别值
          if (formData.cusSex === "女") {
            formData.cusSex = 1;
          }
          if (formData.cusSex === "男") {
            formData.cusSex = 0;
          }
          if (formData.cusSex === "未知") {
            formData.cusSex = 2;
          }
          if (formData.tjType === "") {
            formData.tjType = this.dict.type.dict_team[0].value;
          }
          // 可选:检查 sfzImg 是否存在
          // if (!formData.sfzImg) {
          //   this.$message.warning("请先获取身份证头像");
          //   return;
          // }
          addCustomer(formData).then((response) => {
            this.responseList = response.data;
            this.form.tjType = this.dict.type.dict_team[0].value;
            this.$modal.msgSuccess("新增成功");
            _this.tcShow = true;
            _this.isDisabled = true;
            _this.top = false;
          }).catch((error) => {
            this.$modal.msgError("登记失败,请检查数据");
            console.error("Error in addCustomer:", error);
          });
        }
      });
    }
  });
},
    },
    getmailType() {
      if (this.getType == "2") {
@@ -2978,7 +2976,7 @@
    // 处理订单项目
    processOrderItems(cusId) {
      getTransitionList1(cusId).then((response) => {
       this.tableData1 = response.data;
        this.tableData1 = response.data;
        // if (response.data.tjCategory != null) {
        //   this.tjCategory = response.data.tjCategory;
        // }
@@ -3288,100 +3286,100 @@
    },
    // 最后提交按钮
  submitPrice() {
  let _this = this;
  this.loadingSubmit = true;
  if (_this.tjCategory !== "") {
    let List = _this.tableData1; // 单个项目信息
    if (this.responseList.cusId) {
      var userId = this.responseList.cusId;
    } else {
      var userId = _this.form.cusId;
    }
    let tjType = _this.form.tjType;
    if (this.tableData[0]) {
      var pacId = this.tableData[0].pacId;
    }
    // tjOrderList 处理
    List.forEach((item) => {
      if (item.list) {
        item.list.forEach((item1) => {
          this.tjOrderList.push({
            proName: item1.proName,
            proPrice: item1.nowPrice,
            proId: item1.proId,
          });
        });
      } else if (item.tjProjectList) {
        item.tjProjectList.forEach((item1) => {
          this.tjOrderList.push({
            proName: item1.proName,
            proPrice: item1.priceNow,
            proId: item1.proId,
          });
        });
      } else {
        this.tjOrderList.push({
          proName: item.proName,
          proPrice: item.ysPrice,
          proId: item.proId,
        });
      }
    });
    let copeWith = this.TotalPrice1;
    let paidIn = this.TotalPrice.toString();
    let discount = this.discount;
    this.tjFlowingWater = { copeWith, paidIn, discount };
    const newArray = this.tableData1
      .filter((item) => item.discount < 10)
      .map((item) => ({
        discount: item.discount,
        parentProId: item.parentProId,
        cusIdCard: item.cusId,
        yhj: item.nowPrice,
      }));
    gaibianzhekou(newArray).then((res) => {
      this.loadingSubmit = false;
      if (res.code === 200) {
        let data;
        if (pacId || this.tjOrderList.length > 0) {
          data = {
            photo: this.srcUrl, // 保留原有 photo 字段(如果后端仍需要)
            sfzImg: this.imageUrl, // 添加 sfzImg 字段,优先使用服务器URL,若无则使用base64
            pacId,
            tjOrderList: this.tjOrderList,
            tjFlowingWater: this.tjFlowingWater,
            userId,
            tjType,
            tjCategory: this.tjCategory,
            firmId: this.form.firmId,
            firmName: this.form.firmName,
            firmDeptName: this.form.firmDeptName,
          };
          this.listgetOrder(data);
    submitPrice() {
      let _this = this;
      this.loadingSubmit = true;
      if (_this.tjCategory !== "") {
        let List = _this.tableData1; // 单个项目信息
        if (this.responseList.cusId) {
          var userId = this.responseList.cusId;
        } else {
          this.loadingSubmit = false;
          this.$message({
            type: "warning",
            message: "请选择套餐!",
          });
          var userId = _this.form.cusId;
        }
        let tjType = _this.form.tjType;
        if (this.tableData[0]) {
          var pacId = this.tableData[0].pacId;
        }
        // tjOrderList 处理
        List.forEach((item) => {
          if (item.list) {
            item.list.forEach((item1) => {
              this.tjOrderList.push({
                proName: item1.proName,
                proPrice: item1.nowPrice,
                proId: item1.proId,
              });
            });
          } else if (item.tjProjectList) {
            item.tjProjectList.forEach((item1) => {
              this.tjOrderList.push({
                proName: item1.proName,
                proPrice: item1.priceNow,
                proId: item1.proId,
              });
            });
          } else {
            this.tjOrderList.push({
              proName: item.proName,
              proPrice: item.ysPrice,
              proId: item.proId,
            });
          }
        });
        let copeWith = this.TotalPrice1;
        let paidIn = this.TotalPrice.toString();
        let discount = this.discount;
        this.tjFlowingWater = { copeWith, paidIn, discount };
        const newArray = this.tableData1
          .filter((item) => item.discount < 10)
          .map((item) => ({
            discount: item.discount,
            parentProId: item.parentProId,
            cusIdCard: item.cusId,
            yhj: item.nowPrice,
          }));
        gaibianzhekou(newArray).then((res) => {
          this.loadingSubmit = false;
          if (res.code === 200) {
            let data;
            if (pacId || this.tjOrderList.length > 0) {
              data = {
                photo: this.srcUrl, // 保留原有 photo 字段(如果后端仍需要)
                sfzImg: this.imageUrl, // 添加 sfzImg 字段,优先使用服务器URL,若无则使用base64
                pacId,
                tjOrderList: this.tjOrderList,
                tjFlowingWater: this.tjFlowingWater,
                userId,
                tjType,
                tjCategory: this.tjCategory,
                firmId: this.form.firmId,
                firmName: this.form.firmName,
                firmDeptName: this.form.firmDeptName,
              };
              this.listgetOrder(data);
            } else {
              this.loadingSubmit = false;
              this.$message({
                type: "warning",
                message: "请选择套餐!",
              });
            }
          } else {
            this.loadingSubmit = false;
            this.$modal.msgError("改变折扣错误");
          }
        });
      } else {
        this.loadingSubmit = false;
        this.$modal.msgError("改变折扣错误");
        this.$modal.msgError("请选择体检类别");
      }
    });
  } else {
    this.loadingSubmit = false;
    this.$modal.msgError("请选择体检类别");
  }
},
    },
  },
};
</script>