WXL (wul)
昨天 66cc734e81fe0497d88e0951b6aee9c9c8342f2c
src/components/PatientSelection/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,585 @@
<template>
  <div>
    <el-dialog
      title="派发患者选择"
      :visible.sync="dialogVisiblepatient"
      width="70%"
      :before-close="handleClosehz"
    >
      <div class="examine-jic">
        <div style="margin: 0 10px 20px 10px">
          <el-card class="box-card">
            <el-tag
              v-for="item in overallCase"
              :key="item.icdid"
              type="primary"
              closables
              @close="handleClose(item)"
            >
              {{ item.name }}
            </el-tag>
            <div style="margin-top: 20px; text-align: right">
              å…±é€‰æ‹©<span
                style="font-size: 18px; color: #409eff; margin: 0 10px"
                >{{ overallCase.length }}</span
              >位患者
            </div>
          </el-card>
        </div>
        <div class="jic-value">
          <el-row :gutter="20">
            <!--用户数据-->
            <el-form
              :model="patientqueryParams"
              ref="queryForm"
              size="small"
              :inline="true"
              label-width="98px"
            >
              <el-form-item label="患者:">
                <el-input
                  v-model="patientqueryParams.name"
                  @keyup.enter.native="handleQuery"
                ></el-input>
              </el-form-item>
              <el-form-item label="患者类型">
                <el-select
                  v-model="patientqueryParams.allhosp"
                  placeholder="请选择新增类型"
                >
                  <el-option
                    v-for="item in taskoptions"
                    :label="item.label"
                    :value="item.value"
                  >
                  </el-option>
                </el-select>
              </el-form-item>
              <el-form-item label="患者诊断:">
                <el-input
                  v-model="patientqueryParams.leavediagname"
                  @keyup.enter.native="handleQuery"
                ></el-input>
              </el-form-item>
              <el-form-item label="主治医生:">
                <el-input
                  v-model="patientqueryParams.drname"
                  @keyup.enter.native="handleQuery"
                ></el-input>
              </el-form-item>
              <el-form-item>
                <el-button
                  type="primary"
                  icon="el-icon-search"
                  size="medium"
                  @click="handleQuery"
                  >搜索</el-button
                >
                <el-button
                  icon="el-icon-refresh"
                  size="medium"
                  @click="resetQuery"
                  >重置</el-button
                >
              </el-form-item>
            </el-form>
            <!-- é€‰æ‹©æ‚£è€…列表 -->
            <el-table
              ref="multipleTable"
              :data="donorchargeList"
              tooltip-effect="dark"
              style="width: 100%"
              @selection-change="handleSelectionChange"
            >
              <el-table-column
                fixed="left"
                class="checkall"
                type="selection"
                width="55"
              >
              </el-table-column>
              <div v-for="(item, index) in tableLabel">
                <el-table-column
                  v-if="item.label == '出院日期'"
                  :key="index"
                  :prop="item.prop"
                  :width="item.width"
                  :label="item.label"
                  :formatter="formatData"
                >
                  <template slot-scope="scope">
                    <span>{{ formatTime(scope.row.endtime) }}</span>
                  </template>
                </el-table-column>
                <el-table-column
                  v-if="item.label == '性别'"
                  :key="index"
                  :prop="item.prop"
                  :width="item.width"
                  :label="item.label"
                  :formatter="formatData"
                >
                  <template slot-scope="scope">
                    <span>{{ scope.row.sex == 1 ? "男" : "女" }}</span>
                  </template>
                </el-table-column>
                <el-table-column
                  v-if="item.label != '性别' && item.label != '出院日期'"
                  :key="index"
                  :prop="item.prop"
                  :width="item.width"
                  :label="item.label"
                  :formatter="formatData"
                >
                </el-table-column>
              </div>
            </el-table>
          </el-row>
          <pagination
            v-show="patienttotal > 0"
            :total="patienttotal"
            :page.sync="patientqueryParams.pageNum"
            :limit.sync="patientqueryParams.pageSize"
            @pagination="handleQuery"
          />
        </div>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="$emit('addoption')">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="AddDispatchpatients"
          >确定添加</el-button
        >
      </span>
    </el-dialog>
  </div>
</template>
<script>
import {
  getillnesslist,
  deltargetillness,
  getTaskpatientQC,
  Questionnairetaskgetson,
  Externallist,
  Editsingletask,
} from "@/api/AiCentre/index";
export default {
  name: "Diseasetotality",
  data() {
    return {
      patienttotal: 0, //
      allpids: [],
      // å½“前页选中数据
      multipleSelection: [],
      overallpatin: [],
      form: {},
      patientqueryParams: {
        pageNum: 1,
        pageSize: 10,
        allhosp: "4",
        pids: null,
      },
      donorchargeList: [],
      donorchargeanlList: [], //案例列表
      taskoptions: [
        {
          value: "4",
          label: "出院病人",
        },
        {
          value: "1",
          label: "在院病人",
        },
        {
          value: "2",
          label: "门诊病人",
        },
        {
          value: "3",
          label: "体检病人",
        },
        {
          value: "6",
          label: "院外患者",
        },
        {
          value: "5",
          label: "手术病人",
        },
      ],
      overallCase:[],
      tableLabel: [
        { label: "出院日期", width: "150", prop: "inhosptime" },
        { label: "患者", width: "", prop: "name" },
        { label: "患者诊断", width: "", prop: "leavediagname" },
        { label: "身份证", width: "200", prop: "idcardno" },
        { label: "性别", width: "", prop: "sex" },
        { label: "年龄", width: "", prop: "age" },
        { label: "责任护士", width: "", prop: "nurseName" },
        { label: "主治医生", width: "", prop: "drname" },
        { label: "科室", width: "240", prop: "dept" },
        { label: "病区", width: "240", prop: "leavehospitaldistrictname" },
      ],
    };
  },
  props: {
    dialogVisiblepatient: {
      type: Boolean,
      default: () => {
        return false;
      },
    },
    // 5问卷模板、3随访模板、6宣教
    type: {
      type: Number,
      default: () => {
        return 5;
      },
    },
  },
  created() {},
  mounted() {
    // this.handleAddpatient();
  },
  watch: {},
  methods: {
    //   æ•°æ®è¿‡æ»¤
    formatData(row, column, cellValue) {
      if (column.property === "createType") {
        if (cellValue === 1) {
          return "自动";
        }
        return "手动";
      }
      if (
        column.property === "createTime" ||
        column.property === "inhosptime"
      ) {
        if (cellValue === null) {
          return "";
        }
        return dayjs(cellValue).format("YYYY-MM-DD ");
      }
      return cellValue;
    },
    handleClosehz() {
      this.$emit("addoption");
    },
    // é€‰æ‹©æ•°æ®æ ‡ç­¾åˆ é™¤äº‹ä»¶
    handleClose(item) {
      console.log(item);
      if (this.multipleSelection.indexOf(item) == -1 && !item.outid) {
        this.overallCase.splice(this.overallCase.indexOf(item), 1);
      } else if (item.outid) {
        this.$modal
          .confirm('是否确认删除名称为"' + item.icd10name + '"的数据项?')
          .then(() => {
            this.multipleSelection.splice(
              this.multipleSelection.indexOf(item),
              1
            );
            deltargetillness(item.id).then((res) => {
              if (res.code == 200) {
                this.$modal.msgSuccess("删除成功");
                this.overallCase.splice(this.overallCase.indexOf(item), 1);
              }
            });
            // å–消挂载状态
            this.$refs.multipleTable.toggleRowSelection(item, false);
          })
          .catch(() => {});
      } else {
        this.overallCase.splice(this.overallCase.indexOf(item), 1);
        this.multipleSelection.splice(this.multipleSelection.indexOf(item), 1);
        // å–消挂载状态
        this.$refs.multipleTable.toggleRowSelection(item, false);
      }
    },
    resetQuery() {
      this.patientqueryParams.name = null;
      this.handleAddpatient();
    },
    // è§¦å‘查询事件
    handleAddpatients() {
      this.$emit("kkoption");
      getillnesslist(this.patientqueryParams).then((res) => {
        this.donorchargeList = res.rows;
        this.patienttotal = res.total;
        this.Restorecheck();
      });
    },
    // è§¦å‘查询事件
    handleAddpatient(taskid) {
      this.$emit("kkoption");
      if (taskid != this.taskid) {
        this.recover();
      }
      if (taskid) {
        this.taskid = taskid;
        Questionnairetaskgetson({ taskid: this.taskid }).then((res) => {
          if (res.code == 200) {
            this.form = res.data;
            this.overallpatin = this.form.patTaskRelevances.concat();
            this.allpids = [];
            this.overallpatin.forEach((item) => {
              this.allpids.push(item.patid);
            });
            if (this.allpids[0]) {
              this.patientqueryParams.pids = this.allpids;
            } else {
              this.patientqueryParams.pids = null;
            }
            this.handleQuery();
          }
        });
      }
    },
    handleQuery() {
      // èŽ·å–å¤–éƒ¨æ‚£è€…
      if (this.patientqueryParams.allhosp == 6) {
        this.Externallist();
        return;
      }
      console.log(11);
      if (this.patientqueryParams.allhosp == 4) {
        this.tableLabel = [
          // { label: "入院日期", width: "170", prop: "starttime" },
          { label: "出院日期", width: "150", prop: "endtime" },
          { label: "患者", width: "", prop: "name" },
          { label: "患者诊断", width: "", prop: "leavediagname" },
          { label: "身份证", width: "200", prop: "idcardno" },
          { label: "性别", width: "", prop: "sex" },
          { label: "年龄", width: "", prop: "age" },
          { label: "出院天数", width: "", prop: "endDay" },
          { label: "责任护士", width: "", prop: "nurseName" },
          { label: "医生", width: "", prop: "drname" },
          { label: "科室", width: "180", prop: "dept" },
          { label: "病区", width: "150", prop: "leavehospitaldistrictname" },
        ];
      } else if (this.patientqueryParams.allhosp == 1) {
        this.tableLabel = [
          { label: "入院日期", width: "150", prop: "starttime" },
          { label: "患者", width: "", prop: "name" },
          { label: "患者诊断", width: "", prop: "leavediagname" },
          { label: "身份证", width: "200", prop: "idcardno" },
          { label: "性别", width: "", prop: "sex" },
          { label: "年龄", width: "", prop: "age" },
          { label: "出院天数", width: "", prop: "endDay" },
          { label: "责任护士", width: "", prop: "nurseName" },
          { label: "医生", width: "", prop: "drname" },
          { label: "科室", width: "180", prop: "dept" },
          { label: "病区", width: "150", prop: "leavehospitaldistrictname" },
        ];
      }
      console.log(this.patientqueryParams.allhosp);
      // èŽ·å–æ‚£è€…æ•°æ®
      getTaskpatientQC(this.patientqueryParams).then((response) => {
        this.donorchargeList = response.rows;
        this.donorchargeList.forEach((item) => {
          if (item.endtime) {
            item.endDay = this.daysBetween(item.endtime);
          }
        });
        this.Restorecheck();
        this.patienttotal = response.total;
      });
    },
    // èŽ·å–å¤–éƒ¨æ‚£è€…å¯¼å…¥åˆ—è¡¨
    Externallist() {
      this.tableLabel = [
        { label: "患者", width: "", prop: "name" },
        { label: "身份证", width: "200", prop: "idcardno" },
        { label: "性别", width: "", prop: "sex" },
        { label: "年龄", width: "", prop: "age" },
        { label: "出院天数", width: "", prop: "endDay" },
      ];
      this.patientqueryParams.pageSize = 1000;
      Externallist(this.patientqueryParams).then((response) => {
        this.donorchargeList = response.rows;
        this.donorchargeList.forEach((item) => {
          if (item.endtime) {
            item.endDay = this.daysBetween(item.endtime);
          }
        });
        // this.dialogVisiblepatient = true;
        this.patienttotal = response.total;
      });
    },
    // å¤šé€‰æ¡†é€‰ä¸­æ•°æ®
    handleSelectionChange(selection) {
      if (this.decision) return;
      // åˆ¤æ–­æ˜¯å¦æœ‰åˆ é™¤
      if (this.multipleSelection.length <= selection.length) {
        this.multipleSelection = selection;
      } else {
        this.multipleSelection.forEach((item) => {
          if (selection.includes(item)) {
          } else {
            if (this.multipleSelection.length == 1) {
              this.multipleSelection = [];
            } else {
              this.multipleSelection.splice(
                this.multipleSelection.indexOf(item),
                1
              );
            }
            if (this.overallCase.length == 1) {
              this.overallCase = [];
            } else {
              this.overallCase.splice(this.overallCase.indexOf(item), 1);
            }
          }
        });
      }
      // èµ‹å€¼ç»™æ•´ä½“选中数组
      this.multipleSelection.forEach((item) => {
        if (this.overallCase.every((obj) => obj.name != item.name)) {
          item.isoperation = 1;
          item.patid = item.id;
          item.hospType = this.patientqueryParams.allhosp;
          item.sfzh = item.idcardno;
          item.deptCode = item.deptcode;
          item.deptName = item.dept;
          item.admindate = item.inhosptime;
          item.diagname = item.leavediagname;
          item.sfzh = item.idcardno;
          if (this.patientqueryParams.allhosp == 6) {
            item.patfrom = 1;
          }
          this.overallCase.push(item);
        }
      });
      console.log(this.multipleSelection, "触发选择后multipleSelection");
    },
    // åˆ‡æ¢é¡µåŽæ¢å¤é€‰ä¸­
    Restorecheck() {
      console.log(this.overallCase, "this.overallCase");
      const allid = this.overallCase.map((item) => item.name);
      const overlap = this.donorchargeList.filter((value) => {
        return allid.includes(value.name);
      });
      // ä¿æŒids和当前页面的同步性
      this.multipleSelection = overlap;
      console.log(this.multipleSelection, "进入分页multipleSelection");
      this.toggleSelection(overlap);
    },
    // æŒ‚载选择状态
    toggleSelection(rows) {
      if (rows) {
        this.decision = true;
        this.$nextTick(() => {
          rows.forEach((row) => {
            this.$refs.multipleTable.toggleRowSelection(row, true);
          });
          this.decision = false;
        });
        console.log(123);
      } else {
        this.$refs.multipleTable.clearSelection();
      }
    },
    AddDispatchpatients() {
      console.log(this.overallCase);
      this.form.patTaskRelevances.push(...this.overallCase);
      console.log(this.form.patTaskRelevances);
      this.form.isoperation=2;
      Editsingletask(this.form).then((res) => {
        if (res.code == 200) {
          if (this.form.taskid) {
            this.$modal.msgSuccess("修改成功");
          } else {
            this.$modal.msgSuccess("新增成功");
          }
          this.recover();
      this.$emit("addoption");
        }
      });
      // this.dialogVisiblepatient = false;
      // this.$emit("addoption");
    },
    recover() {
      this.donorchargeList = [];
      this.donorchargeanlList = [];
      this.multipleSelection = [];
      this.allpids = [];
      this.overallpatin = [];
      this.form = {};
      this.patientqueryParams = {
        pageNum: 1,
        pageSize: 10,
        allhosp: "4",
        pids: null,
      };
      this.overallCase = [];
      // this.dialogVisiblepatient = false;
    },
  },
};
</script>
<style lang="scss" scoped>
.examine-jic {
  .headline {
    font-size: 24px;
    border-left: 5px solid #41a1be;
    padding-left: 5px;
    margin-bottom: 10px;
    display: flex;
    justify-content: space-between;
    .Add-details {
      font-size: 18px;
      color: #02a7f0;
      cursor: pointer;
    }
  }
  .jic-value {
    font-size: 20px;
    border-top: 1px solid #a7abac;
    padding: 10px;
    margin-bottom: 10px;
    .details-jic {
      padding: 10px 15px;
      border: 1px solid #dcdfe6;
      -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
        0 0 6px 0 rgba(0, 0, 0, 0.04);
      .details-title {
        display: flex;
        justify-content: space-between;
        margin-bottom: 10px;
        div:nth-child(2) {
          color: #02a7f0;
          cursor: pointer;
        }
      }
      .details-renw {
        background: #e4ebfc;
        padding: 15px 5px;
        border-radius: 5px;
        margin-bottom: 20px;
      }
    }
  }
}
::v-deep.el-table .el-table__header th:first-child .el-checkbox {
  display: none;
}
.el-tag + .el-tag {
  margin-left: 10px;
  margin-bottom: 10px;
}
</style>