qx
2025-06-05 53606eac81e6d3a76937c4cb6f45ad61581cb4da
src/views/doctor/examination/index.vue
@@ -7,15 +7,6 @@
      :inline="true"
      label-width="68px"
    >
      <el-form-item label="体检号" prop="tjNumber">
        <el-input
          v-model="queryParams.tjNumber"
          placeholder="请输入体检号"
          clearable
          @keyup.enter.native="handleQuery"
          style="width: 170px"
        />
      </el-form-item>
      <el-form-item label="姓名" prop="name">
        <el-input
          v-model="queryParams.name"
@@ -23,6 +14,51 @@
          clearable
          @keyup.enter.native="handleQuery"
          style="width: 110px"
        />
      </el-form-item>
      <el-form-item label="体检号" prop="tjNumber">
        <el-input
          ref="inputName"
          v-model="queryParams.tjNumber"
          placeholder="请输入体检号"
          clearable
          @keyup.enter.native="handleQuery"
          @blur="hb"
          style="width: 170px"
        />
      </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="tcm">
        <el-input
          v-model="queryParams.tcm"
          placeholder="请输入体检号"
          clearable
          @keyup.enter.native="handleQuery"
          style="width: 170px"
        />
      </el-form-item>
      <el-form-item label="登记时间" prop="createTimeList">
@@ -47,6 +83,7 @@
          icon="el-icon-search"
          size="mini"
          @click="handleQuery"
          style="margin-right: 15px"
          >查询</el-button
        >
        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
@@ -64,60 +101,80 @@
    </el-radio-group>
    <div style="width: 100%; margin-left: 10px; display: flex">
      <div style="width: 40%; margin-right: 20px">
      <div style="width: 45%">
        <el-table
          id="ta"
          v-loading="loading"
          ref="tb"
          :data="exaList"
          border
          height="520px"
          @selection-change="handleSelectionChange"
          height="520"
          :row-class-name="tableRowClassName"
          highlight-current-row
          @current-change="handleCurrentChange"
        >
          <el-table-column type="selection" width="40" align="center" />
          <!-- <el-table-column type="selection" width="40" align="center" /> -->
          <el-table-column
            label="体检号"
            align="center"
            prop="tjNumber"
            width="160px"
            min-width="160"
          />
          <el-table-column
            label="姓名"
            align="center"
            prop="cusName"
            width="80px"
            min-width="80"
          />
          <el-table-column
            label="性别"
            align="center"
            prop="cusSex"
            width="60px"
            min-width="50"
          >
            <template slot-scope="scope">
              <!-- {{scope.row.customer.cusSex}} -->
              {{ scope.row.cusSex === 0 ? "男" : "女" }}
              <!-- <dict-tag :options="dict.type.sys_user_sex" :value="scope.row.cusSex " /> -->
              <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>
            <!-- <template slot-scope="scope"> -->
            <!-- {{scope.row.customer.cusSex}} -->
            <!-- {{ scope.row.cusSex === 0 ? "男" : "女" }} -->
            <!-- <dict-tag :options="dict.type.sys_user_sex" :value="scope.row.cusSex " /> -->
            <!-- </template> -->
          </el-table-column>
          <el-table-column
            label="年龄"
            align="center"
            prop="age"
            min-width="100"
          />
          <el-table-column
            label="手机号"
            align="center"
            prop="cusPhone"
            width="120px"
            min-width="100"
          />
          <el-table-column
            label="套餐名"
            align="center"
            prop="tcm"
            min-width="100"
          />
          <el-table-column
            label="登记时间"
            align="center"
            prop="tjTime"
            width="120px"
            min-width="120"
          />
          <el-table-column
            v-if="checkStatus == '1'"
            label="审核状态"
            align="center"
            prop="confirmStatus"
            width="110px"
            min-width="80"
          >
            <template slot-scope="scope">
              <span
@@ -138,111 +195,118 @@
              >
            </template>
          </el-table-column>
          <el-table-column label="操作" align="center">
          <!--   v-hasPermi="['reservation:reservation:edit']" -->
          <el-table-column label="操作" align="center" min-width="120px">
            <template slot-scope="scope">
              <el-button
                size="mini"
                type="text"
                v-hasPermi="['reservation:reservation:edit']"
                v-show="
                  scope.row.confirmStatus == '299' ||
                  scope.row.confirmStatus == 288
                "
                @click="tongbu(scope.row)"
                >同步</el-button
              >
              <!-- :disabled="dis" -->
              <!-- <el-button
                disabled
                size="mini"
                type="text"
                @click="tongguo(scope.row)"
                >通过</el-button
              >
              <el-button
                size="mini"
                type="text"
                v-hasPermi="['reservation:reservation:edit']"
                v-show="
                  scope.row.confirmStatus == '301' ||
                  scope.row.confirmStatus == 288
                "
                disabled
                @click="bohui(scope.row)"
                >驳回</el-button
              >
              <el-button
                size="mini"
                type="text"
                v-hasPermi="['reservation:reservation:edit']"
                v-show="
                  scope.row.confirmStatus == '299' ||
                  scope.row.confirmStatus == 288
                "
                @click="tongbu(scope.row)"
                >同步</el-button
              >
              > -->
            </template>
            <!--    v-show="
                  (xianshi == 'Y' || xianshi == 'y') &&
                  (scope.row.confirmStatus == '301' ||
                    scope.row.confirmStatus == 288)
                " -->
          </el-table-column>
        </el-table>
      </div>
      <div style="width: 50%">
      <div style="width: 45%; margin-left: 5%">
        <el-table
          v-loading="loading"
          border
          height="520px"
          :row-class-name="tableRowClassName"
          height="520"
          ref="tab1"
          :data="xiangmuList"
          highlight-current-row
          @row-click="handleRowClick"
        >
          <!-- <el-table-column type="selection" width="40" align="center" /> -->
          <el-table-column
            label="部门"
            label="科室"
            align="center"
            prop="deptName"
            min-width="100"
            :show-overflow-tooltip="true"
          />
          <el-table-column
            label="项目"
            align="center"
            prop="proName"
            width="140"
            min-width="150"
            :show-overflow-tooltip="true"
          />
          <el-table-column
            label="状态"
            align="center"
            prop="type"
            :show-overflow-tooltip="true"
            width="60"
            min-width="100"
          >
            <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 == '0'"
                :style="type == 0 ? { color: 'red' } : { color: '#409EFF' }"
              >
                {{ 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
          <!-- <el-table-column
            label="收费方式"
            align="center"
            prop="sffs"
            :show-overflow-tooltip="true"
            width="80"
          />
          <el-table-column
          /> -->
          <!-- <el-table-column
            label="是否收费"
            align="center"
            prop="isPay"
            :show-overflow-tooltip="true"
          />
          /> -->
          <!-- <el-table-column
            label="签到时间"
            align="center"
            prop="qdcreateTime"
            width="160"
          /> -->
          <el-table-column
          <!-- <el-table-column
            label="检查医生"
            align="center"
            prop="doctorName"
            width="100"
          />
          /> -->
          <el-table-column
            label="检查时间"
            align="center"
            prop="bcupdateTime"
            width="160"
            min-width="160"
          />
          <!-- <el-table-column
            label="保存医生"
@@ -250,39 +314,150 @@
            prop="bcdoctorName"
            width="120"
          /> -->
          <el-table-column
          <!-- <el-table-column
            label="最后修改时间"
            align="center"
            prop="zhupdateTime"
            width="160"
          />
          /> -->
          <el-table-column label="操作" align="center" min-width="120px">
            <template slot-scope="scope">
              <el-button
                size="mini"
                type="text"
                :disabled="scope.row.type === 1"
                :loading="scope.row.isLoading"
                @click="qijian(scope.row)"
                >{{ scope.row.type === 0 ? "弃检" : "恢复" }}</el-button
              >
              <el-button
                size="mini"
                type="text"
                @click="yijian(scope.row)"
                 v-if="yijiantype == 'N'"
                >已检</el-button
              >
              <el-button
                size="mini"
                type="text"
                :disabled="scope.row.type === 0 || scope.row.type === 2"
                @click="queryResultone(scope.row)"
                >结果</el-button
              >
              <!--  -->
              <!--  @click="chaxun(scope.row) " -->
            </template>
          </el-table-column>
        </el-table>
      </div>
    </div>
    <div style="margin-right: 67%">
      <!-- <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :pager-count="5" :current-page.sync="currentPage1" :current-page="page"
    <el-drawer title="我是标题" :visible.sync="drawer" :with-header="false">
      <div style="text-align: center; background-color: #aad8df">
        {{ name || "" }}
      </div>
      <div class="a">
        <div v-if="jyjc == 0">
          <el-table
            :data="jieguoList"
            border
            :row-style="changRed"
            style="width: 100%"
            :header-cell-style="{ background: '#AAD8DF' }"
          >
            <el-table-column label="检测项目" prop="pro_name">
            </el-table-column>
            <el-table-column label="检测结果" prop="pro_result">
            </el-table-column>
            <el-table-column label="参考范围" prop="ckfw"> </el-table-column>
             <el-table-column label="异常标志" prop="ycbz">
               <template slot-scope="scope">
                {{ scope.row.ycbz == 0 ? "正常" : "异常" }}
               </template>
            </el-table-column>
          </el-table>
        </div>
        <div v-if="jyjc == 1">
          <div style="text-align: center; background-color: #aad8df"></div>
          <div class="check-result-container">
            <div class="check-item">
              <div class="check-title">检查所见:</div>
              <div
                class="check-description"
                :style="{ color: isRed ? 'red' : '' }"
              >
                {{ jieguoList[0].pro_result }}
              </div>
            </div>
            <div class="check-item">
              <div class="check-title">检查结论:</div>
              <div
                class="check-description"
                :style="{ color: isRed ? 'red' : '' }"
              >
                {{ jieguoList[0].yxzd || "暂无结论" }}
              </div>
            </div>
          </div>
        </div>
      </div>
    </el-drawer>
    <div class="pag">
      <div class="pag1">
        <!-- <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :pager-count="5" :current-page.sync="currentPage1" :current-page="page"
                :page-sizes="pageSize" :page-size="size" layout="total, sizes, prev, pager, next, jumper" :total="total">
            </el-pagination> -->
      <pagination
        v-show="total > 0"
        :total="total"
        :page.sync="queryParams.page"
        :limit.sync="queryParams.pageSize"
        @pagination="getList"
      />
        <pagination
          v-show="total > 0"
          :total="total"
          :pager-count="5"
          :page.sync="queryParams.page"
          :limit.sync="queryParams.pageSize"
          @pagination="submitForm"
        />
      </div>
    </div>
  </div>
</template>
<script>
import { getCsList, confirmOrder, cSWebGetPro } from "@/api/doctor/examination";
import { getConfigKey } from "@/api/system/config";
import {
  getCsList,
  confirmOrder,
  cSWebGetPro,
  dataSynchronization,
  qijian,
  yijian,
  resultList,
  typeOne,
  huifu,
} from "@/api/doctor/examination";
import { getCompany, queryCompany } from "@/api/team/tuanti";
import { getNewDateList } from "@/api/hosp/order";
import moment from "moment";
export default {
  dicts: ["dict_tj_status"],
  data() {
    return {
      jieguoList: [],
      jyjc: null,
      dis: false,
      isLoading:false,
      createTimeList: "",
      currentRow: null,
      total: 0,
      loading: true,
      selectedTjNumber: "",
      drawer: false,
      yijiantype: null,
      type: null,
      CompanyList: [],
      CheckBox: {},
      // 查询参数
      queryParams: {
        page: 1,
@@ -293,12 +468,17 @@
        name: null,
        beginTime: null,
        endTime: null,
        tcm:"",
        tjCompName: "",
      },
      // 绑定单选按钮
      checkStatus: "0",
      exaList: [],
      // 表单参数
      xianshi: "",
      name: "",
      form: {},
      clearTimeSet: null,
      tjNumbers: "",
      multipleSelection: "",
      tjnum: "",
@@ -340,10 +520,42 @@
    };
  },
  created() {
    this.getList();
    this.getdate();
    // this.getNowTime();
  },
  mounted() {
    this.$nextTick(() => {
      this.$refs.inputName.focus();
    });
  },
  methods: {
    changRed({ row }) {
      if (row.ycbz != "" && row.ycbz != null && row.ycbz === 1) {
        // 变颜色的条件
        return {
          color: "red", // 这个return的就是样式 可以是color 也可以是backgroundColor
        };
      }
    },
    getdate() {
      getConfigKey("tj_confirm").then((res) => {
        this.xianshi = res.msg;
        // console.log(this.xianshi, 999);
      });
      getNewDateList().then((res) => {
        // console.log(res,222);
        // this.createTimeList = [
        //   moment(res.data).format("YYYY-MM-DD 00:00:00"),
        //   moment(res.data).format("YYYY-MM-DD 23:59:00"),
        // ];
        // console.log(this.createTimeList,8855);
        this.getList();
      });
    },
    // / 处理默认选中当前日期
    getNowTime() {
      var curDate = new Date().getTime();
@@ -379,11 +591,31 @@
    dateChangebirthday1(val) {
      this.startTime = val;
    },
    // 选框数据
    searchSelect(val) {
      this.CheckBox = val;
      // console.log(this.CheckBox, 9999);
    },
    getList() {
      this.loading = true;
      this.queryParams.checkStatus = this.checkStatus;
      this.queryParams.beginTime = this.createTimeList[0];
      this.queryParams.endTime = this.createTimeList[1];
      this.queryParams.compId = this.CheckBox.drugManufacturerId;
      if (this.createTimeList) {
        this.queryParams.beginTime = this.createTimeList[0];
        this.queryParams.endTime = this.createTimeList[1];
      } else if (this.createTimeList == null) {
        this.queryParams.beginTime = null;
        this.queryParams.endTime = null;
      }
      // 获取单位信息集合
      getCompany(this.queryParam).then((response) => {
        this.CompanyList = response.data;
        // console.log(this.CompanyList, 555);
        this.loading = false;
      });
      getCsList(this.queryParams).then((res) => {
        if (res.code == 200) {
          this.loading = false;
@@ -405,6 +637,15 @@
        }
      });
    },
    // 体检公司拼音搜索
    getRemoteData(query) {
      if (query) {
        let compName = query;
        queryCompany(compName).then((response) => {
          this.CompanyList = response.data;
        });
      }
    },
    // 单选按钮
    radioChange(value) {
      this.loading = true;
@@ -425,6 +666,50 @@
        }
      });
    },
    hb() {
      // console.log(this.queryParams.tjNumber);
      if (this.queryParams.tjNumber != null) {
        // this.handleQuery();
        this.submitForm();
      }
    },
    submitForm() {
      this.loading = true;
      this.queryParams.checkStatus = this.checkStatus;
      this.queryParams.compId = this.CheckBox.drugManufacturerId;
      if (this.createTimeList) {
        this.queryParams.beginTime = this.createTimeList[0];
        this.queryParams.endTime = this.createTimeList[1];
      } else if (this.createTimeList == null) {
        this.queryParams.beginTime = null;
        this.queryParams.endTime = null;
      }
      // 页面数据
      getCsList(this.queryParams).then((res) => {
        if (res.code == 200) {
          this.loading = false;
          if (res.data) {
            this.exaList = res.data.customers;
            this.total = res.data.total;
            if (this.exaList.length != 0) {
              this.$nextTick(() => {
                this.$refs.tb.toggleRowSelection(this.exaList[0], true);
              });
            } else {
              this.$refs.tb.clearSelection();
            }
            this.total = res.data.total;
          } else {
            this.exaList = [];
            this.tableList = [];
          }
        }
      });
    },
    /** 搜索按钮操作 */
    handleQuery() {
      this.queryParams.page = 1;
@@ -432,8 +717,22 @@
    },
    /** 重置按钮操作 */
    resetQuery() {
      this.resetForm("queryForm");
      this.createTimeList = [];
      (this.queryParams = {
        page: 1,
        pageSize: 20,
        checkStatus: null,
        tjNumber: null,
        compId: null,
        name: null,
        beginTime: null,
        endTime: null,
        tjCompName: "",
        tcm:""
      }),
        (this.CheckBox.drugManufacturerId = "");
      this.handleQuery();
      this.loading = true;
    },
    // 单选框选中数据
@@ -447,11 +746,21 @@
      this.multipleSelection = selection[selection.length - 1]
        ? [selection[selection.length - 1]]
        : [];
      this.multipleSelection.forEach((element) => {
        this.tjnum = element.tjNumber;
        let tjNumber = this.tjnum;
        cSWebGetPro(tjNumber).then((res) => {
          this.xiangmuList = res.data;
          this.xiangmuList.forEach((item) => {
            // console.log(item);
            // if (item.type == 0) {
            //   this.dis = true;
            // } else {
            //   this.dis = false;
            // }
          });
        });
      });
    },
@@ -461,6 +770,31 @@
          return "warning-row";
        }
      }
    },
    handleCurrentChange(val) {
      this.currentRow = val;
      let tjNumber = val.tjNumber;
      this.selectedTjNumber = val.tjNumber;
      typeOne(tjNumber).then((res) => {
        this.type = res.data;
      });
      getConfigKey("sfyccsyjan").then((res) => {
        this.yijiantype = res.msg;
      });
      cSWebGetPro(tjNumber).then((res) => {
        this.xiangmuList = res.data;
        this.xiangmuList.forEach((item) => {
          // console.log(item);
          // if (item.type == 0) {
          //   this.dis = true;
          // } else {
          //   this.dis = false;
          // }
        });
      });
    },
    // 通过按钮
    tongguo(row) {
@@ -478,12 +812,121 @@
          if (res.code == 200) {
            // this.$forceUpdate();
            this.getList();
            this.xiangmuList = [];
            this.$modal.msgSuccess("提交成功!");
          }
        });
      });
    },
    tongbu() {},
    // 弃检按钮
    qijian(row) {
      const tjNUm = this.selectedTjNumber;
      const proId = row.proId;
      row.isLoading = true;
      if (row.type == "2") {
        huifu(tjNUm, proId).then((res) => {
          if (res.code == 200) {
            cSWebGetPro(tjNUm).then((res) => {
              if (res.code === 200) {
                // 更新右边表格的数据
                this.xiangmuList = res.data;
                row.isLoading = false
              }
            });
          }
        });
      } else {
        qijian(tjNUm, proId).then((res) => {
          if (res.code == 200) {
            cSWebGetPro(tjNUm).then((res) => {
              if (res.code === 200) {
                // 更新右边表格的数据
                this.xiangmuList = res.data;
                this.isLoading = false
              }
            });
          }
        });
      }
    },
    yijian(row) {
      const tjNUm = this.selectedTjNumber;
      const proId = row.proId;
      row.isLoading = true;
      yijian(tjNUm, proId).then((res) => {
        if (res.code == 200) {
          this.$modal.msgSuccess("已检成功");
          cSWebGetPro(tjNUm).then((res) => {
            if (res.code === 200) {
              this.xiangmuList = res.data;
              row.isLoading = false;
            }
          });
        }
      }).catch(() => {
        row.isLoading = false;
      });
    },
    handleRowClick(row, column, event) {
      // console.log(row, 2323);
      this.name = row.proName;
      // console.log(this.name, 99999);
    },
    queryResultone(row) {
      // 打开抽屉
      const tjNum = this.selectedTjNumber;
      const proId = row.proId;
      resultList(tjNum, proId).then((res) => {
        this.jieguoList = res.data;
        this.jyjc = this.jieguoList[0].jyjc;
        const ycbz = this.jieguoList[0].ycbz;
        /* if (ycbz === "" || ycbz === null) {
          return;
        } */
        // 设置是否需要改变颜色
        if (ycbz === "1") {
          this.isRed = true; // 设置标识,改变字体颜色
          console.log(this.isRed, 444);
        } else {
          this.isRed = false; // 恢复默认颜色
        }
        if (res.data.length > 0) {
          this.drawer = true;
        } else {
          this.$message.warning("该项目没有结果");
        }
      });
    },
    setTime() {
      //设置定时器
      this.clearTimeSet = setInterval(() => {
        this.$modal.closeLoading();
      }, 300000);
    },
    tongbu(row) {
      this.$modal.loading("正在同步,请稍候...");
      this.setTime();
      let tjNumber = row.tjNumber;
      dataSynchronization(tjNumber)
        .then((res, error) => {
          if (res.code == 200) {
            this.handleCurrentChange(row);
            clearInterval(this.clearTimeSet);
            this.clearTimeSet = null;
            this.$modal.closeLoading();
            this.$modal.msgSuccess("同步成功!");
          }
        })
        .catch((error) => {
          this.handleCurrentChange(row);
          clearInterval(this.clearTimeSet);
          this.clearTimeSet = null;
          this.$modal.closeLoading();
        });
    },
    // 驳回按钮
    bohui(row) {
      this.tjNumbers = row.tjNumber;
@@ -516,4 +959,71 @@
.el-table .warning-row {
  background: #e5f3ff !important;
}
::v-deep .el-table__body tr.current-row > td {
  background: #edf2fa !important;
}
.pag {
  width: 100%;
  display: flex;
  justify-content: center;
}
.red-text {
  color: red !important;
}
.pag1 {
  width: 30%;
}
.a ::v-deep .el-table__cell {
  padding: 1px 0 !important;
}
.check-result-container {
  // background-color: #fafafa;
  padding: 20px;
  border-radius: 8px;
  // box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
  margin: 0 auto;
  max-width: 700px;
}
.check-item {
  margin-bottom: 20px;
}
.check-title {
  font-size: 16px;
  font-weight: bold;
  color: #333;
  // margin-bottom: 8px;
}
.check-description {
  font-size: 14px;
  color: #555; /* 中灰色文字 */
  line-height: 1.6; /* 行高,增加可读性 */
  padding: 8px 0; /* 上下内边距 */
}
.check-description.no-result {
  color: #bbb; /* 如果没有结论,文字为淡灰色 */
}
::v-deep .el-table {
  width: 100% !important;
}
::v-deep .el-table__body {
  width: 100% !important;
}
::v-deep .el-table__header {
  width: 100% !important;
}
/* 如果需要隐藏横向滚动条 */
::v-deep .el-table__body-wrapper::-webkit-scrollbar-horizontal {
  display: none;
}
</style>