<template>
  <div>
    <!--组件主体-->
    <div style="display: flex">
      <div :style="'width:' + (window.pageWidth - 200 - 145) + 'px;'" @contextmenu.prevent="onContextmenu">
        <div>
          <el-table :data="tableData" border
            :height="window.pageHeight < 600 ? 248 : Math.floor(((window.pageHeight - 250) * 2) / 3)"
            highlight-current-row @row-click="rowClick" size="small" row-key="id"
            @selection-change="handleSelectionChange" @cell-contextmenu="onCellRightClick" ref="info" id="info"
            :row-class-name="handleRowClassName">
            <el-table-column type="selection" width="40" align="center"></el-table-column>
            <el-table-column v-for="(item, index) in dragCol" :key="index" :type="dragCol[index].type"
              :min-width="dragCol[index].minWidth" :align="dragCol[index].align" :label="item.label"
              :prop="dragCol[index].prop" :sortable="dragCol[index].type || dragCol[index].prop == 'sn' ? false : true">
              <template slot-scope="scope" v-if="!(dragCol[index].type)">
                <div v-if="!dragCol[index].type">
                  <div v-if="dragCol[index].prop == 'sn'">
                    {{ scope.$index + 1 }}
                  </div>
                  <div v-else-if="dragCol[index].prop == 'completeFlag'"
                    :style="`color: ${setPrStatusColor(scope.row.isAudit, scope.row.completeFlag)}`">
                    {{ scope.row.isAudit == 'Y' ? "已审核" : dddw(dict.completeFlag, "id", scope.row.completeFlag,
                      "displayName") }}
                  </div>
                  <div v-else-if="dragCol[index].prop == 'qztlType'">
                    {{ dddw(dict.qztlType, "id", scope.row.qztlType, "displayName") }}
                  </div>
                  <div v-else-if="dragCol[index].prop == 'guidePrintTimes'">
                    <i class="el-icon-printer" v-if="scope.row.guidePrintTimes > 0"
                      style="font-size: 20px; color: green" />
                  </div>
                  <div v-else-if="dragCol[index].prop == 'isLock'">
                    <i class="el-icon-lock" v-if="scope.row.isLock == 'Y'" style="font-size: 20px; color: red" />
                  </div>
                  <div v-else-if="dragCol[index].prop == 'isVip'
                    || dragCol[index].prop == 'isUpload'
                    || dragCol[index].prop == 'qztlIsMain'
                    || dragCol[index].prop == 'qztlIsCy'
                    || dragCol[index].prop == 'qztlIsCw'
                    || dragCol[index].prop == 'qztlIsGt'
                    || dragCol[index].prop == 'qztlIsWh'
                    || dragCol[index].prop == 'qztlIsFj'
                  ">
                    {{ scope.row[dragCol[index].prop] == "Y" ? "是" : "否" }}
                  </div>

                  <div v-else-if="dragCol[index].prop == 'customerOrgParentName'">
                    {{ scope.row.customerOrgParentName
                      ? scope.row.customerOrgParentName
                      : scope.row.customerOrgName }}
                  </div>
                  <div v-else-if="dragCol[index].prop == 'sexId'">
                    {{ dddw(dict.sex, "id", scope.row[dragCol[index].prop], "displayName") }}
                  </div>
                  <div v-else-if="dragCol[index].prop == 'groupPack'">
                    <div
                      v-if="scope.row.medicalPackageId !== dict.personOrgId && scope.row.customerOrgId === dict.personOrgId">
                      {{ dddw(dict.medicalPackage, "id", scope.row.medicalPackageId, "displayName") }}
                    </div>
                    <div
                      v-if="scope.row.medicalPackageId !== dict.personOrgId && scope.row.customerOrgId !== dict.personOrgId">
                      {{ dddw(dict.customerOrgGroupAll, "id", scope.row.customerOrgGroupId, "displayName") }}
                    </div>
                  </div>
                  <div v-else-if="dragCol[index].prop == 'nationId'">
                    {{ dddw(dict.nation, "id", scope.row[dragCol[index].prop], "displayName") }}
                  </div>
                  <div v-else-if="dragCol[index].prop == 'birthDate'">
                    {{ scope.row[dragCol[index].prop] ? moment(scope.row[dragCol[index].prop]).format('yyyy-MM-DD') : ''
                    }}
                  </div>
                  <div v-else-if="dragCol[index].prop == 'maritalStatusId'">
                    {{ dddw(dict.maritalStatus, "id", scope.row[dragCol[index].prop], "displayName") }}
                  </div>
                  <div v-else-if="dragCol[index].prop == 'medicalTypeId'">
                    {{ dddw(dict.medicalType, "id", scope.row[dragCol[index].prop], "displayName") }}
                  </div>
                  <div v-else-if="dragCol[index].prop == 'personnelTypeId'">
                    {{ dddw(dict.personnelType, "id", scope.row[dragCol[index].prop], "displayName") }}
                  </div>
                  <div v-else-if="dragCol[index].prop == 'idNo'">
                    {{ scope.row[dragCol[index].prop] }}&#031;
                  </div>
                  <div v-else-if="dragCol[index].prop == 'customerOrgName'">
                    {{ scope.row[dragCol[index].prop] == scope.row['customerOrgParentName'] ?
                      '' : scope.row[dragCol[index].prop] }}
                  </div>
                  <div v-else>
                    {{ scope.row[dragCol[index].prop] }}
                  </div>
                </div>
              </template>
            </el-table-column>


            <!--
          "sexHormoneTermId": "00000000-0000-0000-0000-000000000000",
          "interposeMeasure": null,
          "medicalConclusionId": "00000000-0000-0000-0000-000000000000",
          "reportPrintTimes": 0,        
          "isMedicalStart": "N",
          "medicalStartDate": "6/28/2023",
          "isRecoverGuide": "N",
          "summaryDate": "",
          "summaryDoctor": null,
          "isAudit": "N",
          "auditDoctor": null,
          "auditDate": "",        
          "isNameHide": "N",
          "isPhoneFollow": "N",
          "thirdInfo": null,
          "guidePrintTimes": null,
          "remark": null,
          "medicalCenterId": "00000000-0000-0000-0000-000000000000",
          "customerOrgRegisterId": "00000000-0000-0000-0000-000000000000",
          "lastModifierName": "",
          "lastModificationTime": null,
          "lastModifierId": null,
          "creatorId": null,
          "id": "3a0c196d-a6d0-37fe-5c32-4806bdc4530f"
          -->
          </el-table>
          <div style="display: flex;justify-content:space-between;">
            <div></div>
            <div>
              <span style="font-size:12px;">共：{{ loadOpts.totalCount }} 条记录，当前显示：{{ tableData.length }}
                条。</span>
            </div>
          </div>
        </div>
        <!-- 组合项目  基本信息  -->
        <el-tabs v-model="tabChoosed" style="margin-top: -22px;">
          <!-- 组合项目 -->
          <el-tab-pane label="已选组合项目" name="1">
            <PatientRegisterAsbItem />
          </el-tab-pane>
        </el-tabs>
      </div>
      <div style="margin-left: 10px;">
        <div v-show="checkPagePriv(pagePriv.privs, '导入青藏数据')" class="listBtn">
          <el-button type="success" class="commonbutton" @click="btnImportOrgData">导入青藏数据</el-button>
        </div>
        <div v-show="checkPagePriv(pagePriv.privs, '人员登记')" class="listBtn">
          <el-button type="success" class="commonbutton" @click="btnAdd">人员登记</el-button>
        </div>
        <div v-show="checkPagePriv(pagePriv.privs, '批量正式登记')" class="listBtn">
          <el-button type="success" class="commonbutton" @click="btnAddBatch('1')">批量正式登记</el-button>
        </div>
        <div v-show="checkPagePriv(pagePriv.privs, '批量转预登记')" class="listBtn">
          <el-button type="success" class="commonbutton" @click="btnAddBatch('0')">批量转预登记</el-button>
        </div>
        <div v-show="checkPagePriv(pagePriv.privs, '编辑')" class="listBtn">
          <el-button type="primary" class="commonbutton" @click="btnEdit">编辑</el-button>
        </div>
        <div v-show="checkPagePriv(pagePriv.privs, '删除')" class="listBtn">
          <el-button type="danger" class="deleteButton" @click="btnDel">删除</el-button>
        </div>
        <!--
      <div class="listBtn">
        <el-button
          type=""
          class="btnClass"
          @click="openCamera"
          icon="el-icon-camera"
          >拍照</el-button
        >
      </div>      
      <div class="listBtn">
        <el-button type="" class="btnClass commonbutton">健康档案</el-button>
      </div>
      -->
        <div v-show="checkPagePriv(pagePriv.privs, '批量调整分组')" class="listBtn">
          <el-button type="" class="commonbutton" @click="btnGroupBatch">批量调整分组</el-button>
        </div>
        <div v-show="checkPagePriv(pagePriv.privs, '批量调整项目')" class="listBtn">
          <el-button type="" class="commonbutton" @click="btnAsbBatch">批量调整项目</el-button>
        </div>
        <div v-show="checkPagePriv(pagePriv.privs, '指引单打印')" class="listBtn">
          <el-button type="" class="commonbutton" @click="guidePrint('0001', false)">指引单打印</el-button>
        </div>
        <div v-show="checkPagePriv(pagePriv.privs, '指引单预览')" class="listBtn">
          <el-button type="" class="commonbutton" @click="guidePrint('0001', true)">指引单预览</el-button>
        </div>
        <div v-show="checkPagePriv(pagePriv.privs, '人员检验检查条码')" class="listBtn">
          <el-button type="" class="commonbutton" @click="printPromise()" style="font-size: 12px;">人员检验检查条码</el-button>
        </div>
        <div v-show="checkPagePriv(pagePriv.privs, '人员信息导出')" class="listBtn">
          <el-button type="" class="commonbutton" @click="btnExport('info')">人员信息导出</el-button>
        </div>
        <div class="listBtn">
          <el-button type="" class="commonbutton" @click="btnDragColDesign">设计列排序</el-button>
        </div>
        <!-- elProgress.display  dialogWin.LocalConfig
        <div class="listBtn"> 
          <el-button type="" class="commonbutton" @click="dialogWin.LocalConfig = true">本地设置</el-button>
        </div>
        -->
        <!--
      <div class="listBtn">
        <el-button type="" class="btnClass commonbutton" @click="rowSelected(tableData)">选中</el-button>
      </div>
      -->
      </div>
    </div>
    <!--组件弹窗-->
    <div>

      <!-- 体检人员登记 :title="patientRegister.patientRegisterRd.id ? '体检人员--编辑' : '体检人员--新增'" -->
      <el-dialog :title="dataTransOpts.tableS.patient_register.id ? '体检人员--编辑' : '体检人员--新增'"
        :visible.sync="dialogWin.PatientRegisterEdit" :close-on-click-modal="false" fullscreen
        @close="close_dialogWin_PatientRegisterEdit">
        <!-- :formInitData="patientRegister.patientRegisterRd" -->
        <PatientRegisterEdit :isDoctor="'1'" :patientRegisterId="patientRegister.patientRegisterRd.id"
          :editTimes="editTimes" :refFuncSetData="refFuncSetData" />
      </el-dialog>

      <!-- 修改信息 -->
      <el-dialog :title="`修改信息--${upBaseInfo.label}`" :visible.sync="upBaseInfo.visble" width="400" :show-close="false"
        :append-to-body="true" :close-on-click-modal="false">
        <div>
          <div style="display: flex;margin-bottom: 20px;">
            <span style="padding: 5px 0 0 10px; width:100px;">{{ upBaseInfo.label }}</span>
            <el-input v-model="upBaseInfo.value" size="small"></el-input>
          </div>
          <div style="display: flex;justify-content: space-between;">
            <div></div>
            <div>
              <el-button class="commonbutton" @click="btnUpBaseInfo">提交</el-button>
              <el-button class="commonbutton" @click="close_dialogWin_upBaseInfo">关闭</el-button>
            </div>
          </div>
        </div>
      </el-dialog>

      <!-- 分诊排队 -->
      <el-dialog title="分诊排队" :visible.sync="dialogWin.queue" width="800px" :append-to-body="true"
        :close-on-click-modal="false">
        <Queue :refParams="queueParams" />
      </el-dialog>

      <!-- 拍照 -->
      <el-dialog title="拍照" :visible.sync="patientRegister.cameraVisble" width="400" height="800" :show-close="false"
        :append-to-body="true" :close-on-click-modal="false">
        <Camera :id="patientRegister.patientRegisterId" />
      </el-dialog>

      <!-- 导入企业数据 -->
      <el-dialog title="导入企业数据" :visible.sync="dialogWin.ImportOrgData" width="800px" :append-to-body="true"
        :close-on-click-modal="false">
        <ImportOrgData />
      </el-dialog>

      <!-- 列排序 -->
      <el-dialog title="列排序" :visible.sync="dialogColSort" width="300px" :append-to-body="true"
        :close-on-click-modal="false">
        <el-table id="elTable_dragCol" :data="dragColDesign" row-key="prop" border height="600">
          <el-table-column type="index" label="序号" width="40" align="center">
          </el-table-column>
          <el-table-column label="列名" prop="label" min-width="120" align="center"></el-table-column>
        </el-table>
        <span slot="footer" class="dialog-footer">
          <el-button class="commonbutton" @click="dialogColSort = false">取消</el-button>
          <el-button class="commonbutton" @click="btnDragColDesignOk">确定</el-button>
        </span>
      </el-dialog>

      <!-- 批量调整分组 -->
      <el-dialog title="批量调整分组" :visible.sync="dialogWin.PatientRegisterEditGroupBatch" width="600px" height="800px"
        :append-to-body="true" :close-on-click-modal="false">
        <PatientRegisterEditGroupBatch :multipleSelection="multipleSelection" />
      </el-dialog>

      <!-- 批量调整项目 -->
      <el-dialog title="批量调整项目" :visible.sync="dialogWin.PatientRegisterEditItemBatch" width="610px" height="800px"
        :append-to-body="true" :close-on-click-modal="false">
        <PatientRegisterEditItemBatch :multipleSelection="multipleSelection" />
      </el-dialog>

      <!-- 批量调整检查项目医生 -->
      <el-dialog title="批量调整检查项目医生" :visible.sync="dialogWin.PatientRegisterEditDoctorBatch" width="610px"
        :append-to-body="true" :close-on-click-modal="false">
        <PatientRegisterEditDoctorBatch :multipleSelection="multipleSelection" />
      </el-dialog>

      <!-- 通用进度条 -->
      <el-dialog title="数据处理中……" :visible.sync="elProgress.display" width="600px" height="400" :show-close="false"
        :close-on-click-modal="false" :append-to-body="true">
        <ElProgressOCX />
      </el-dialog>

      <!--通用本地参数设置-->
      <el-dialog title="本地参数设置" :visible.sync="dialogWin.LocalConfig" :close-on-click-modal="false"
        :append-to-body="true" width="800px" height="600px">
        <LocalConfig />
      </el-dialog>
    </div>
  </div>
</template>
<script>
import moment from "moment";
import { mapState, mapActions } from "vuex";
import { getapi, postapi, putapi, deletapi } from "@/api/api";
import Sortable from "sortablejs";
import FileSaver from 'file-saver';
import html2canvas from 'html2canvas';

import {
  getPagePriv, checkPagePriv,
  dddw,
  objCopy,
  arrayReduce,
  arrayExistObj,
  deepCopy, setPrStatusColor
} from "../../utlis/proFunc";

import PatientRegisterEdit from "../../components/patientRegister/PatientRegisterEdit.vue";
import Camera from "../../components/patientRegister/Camera.vue";
import PatientRegisterAsbItem from "../../components/patientRegister/patientRegisterAsbItem.vue";

import ElProgressOCX from "../../components/report/ElProgressOCX.vue";
import PatientRegisterEditGroupBatch from "./PatientRegisterEditGroupBatch.vue";
import PatientRegisterEditItemBatch from "./PatientRegisterEditItemBatch.vue";
import PatientRegisterEditDoctorBatch from "./PatientRegisterEditDoctorBatch.vue";
import ImportOrgData from "./ImportOrgData.vue";
import LocalConfig from "../../components/common/LocalConfig.vue";
import Queue from "../../components/queue/Queue.vue";

export default {
  components: {
    PatientRegisterEdit,
    Camera,
    PatientRegisterAsbItem,
    PatientRegisterEditGroupBatch, // 批量调整分组
    PatientRegisterEditItemBatch, // 批量调整项目
    PatientRegisterEditDoctorBatch, // 批量调整检查项目医生
    ElProgressOCX,
    LocalConfig,
    ImportOrgData,
    Queue,
  },
  data() {
    return {
      pagePriv: {
        routeUrlorPageName: 'patientRegister', //当前页面归属路由或归属页面权限名称
        privs: [] // 页面权限
      },
      peisid: null,
      startPoint: -1, // 多选起点 -1 表示选择
      endPoint: -1, // 多选终点 -1 表示未选择

      tableData: [], //表格数据
      tableDataCurrentRow: {}, // 当前被选中的行

      multipleSelection: [], //选中的数据列表

      dialogCamera: false,
      tabChoosed: "1",
      formInitData: {}, //体检登记初始表单数据
      editTimes: 0,

      rClickRow: null, //右击的行
      rClickColumn: null, //右击的列（预留）

      dragColDesign: [],  // 待调整的排序的序
      //拖动列
      dragCol: [
        { label: "序号", prop: "sn", minWidth: 40, align: "center" },
        { label: "体检进度", prop: "completeFlag", minWidth: 80, align: "center" },
        { label: "打印", prop: "guidePrintTimes", minWidth: 55, align: "center" },
        { label: "锁住", prop: "isLock", minWidth: 55, align: "center" },
        { label: "单位", prop: "customerOrgParentName", minWidth: 180, align: "center" },
        { label: "部门", prop: "customerOrgName", minWidth: 120, align: "center" },
        { label: "姓名", prop: "patientName", minWidth: 80, align: "center" },
        { label: "性别", prop: "sexId", minWidth: 55, align: "center" },
        { label: "年龄", prop: "age", minWidth: 55, align: "center" },
        { label: "条码号", prop: "patientRegisterNo", minWidth: 150, align: "center" },
        { label: "档案号", prop: "patientNo", minWidth: 100, align: "center" },
        { label: "体检次数", prop: "medicalTimes", minWidth: 80, align: "center" },
        { label: "分组/套餐", prop: "groupPack", minWidth: 150, align: "center" },
        { label: "民族", prop: "nationId", minWidth: 55, align: "center" },
        { label: "身份证", prop: "idNo", minWidth: 160, align: "center" },
        { label: "出生日期", prop: "birthDate", minWidth: 80, align: "center" },
        { label: "邮箱", prop: "email", minWidth: 150, align: "center" },
        { label: "手机", prop: "mobileTelephone", minWidth: 130, align: "center" },
        { label: "电话", prop: "telephone", minWidth: 130, align: "center" },
        { label: "地址", prop: "address", minWidth: 400, align: "" },
        { label: "体检卡号", prop: "medicalCardNo", minWidth: 80, align: "center" },
        { label: "工卡号", prop: "jobCardNo", minWidth: 80, align: "center" },
        { label: "婚姻状况", prop: "maritalStatusId", minWidth: 80, align: "center" },
        { label: "体检类别", prop: "medicalTypeId", minWidth: 80, align: "center" },
        { label: "人员类别", prop: "personnelTypeId", minWidth: 80, align: "center" },
        { label: "职务", prop: "jobPost", minWidth: 200, align: "center" },
        { label: "职称", prop: "jobTitle", minWidth: 80, align: "center" },
        { label: "介绍人", prop: "salesman", minWidth: 80, align: "center" },
        { label: "是否VIP", prop: "isVip", minWidth: 80, align: "center" },
        { label: "登记人", prop: "creatorName", minWidth: 80, align: "center" },
        { label: "登记日期", prop: "creationTime", minWidth: 140, align: "center" },
        { label: "体检日期", prop: "medicalStartDate", minWidth: 140, align: "center" },
        { label: "是否上传", prop: "isUpload", minWidth: 80, align: "center" },
        { label: "高原/健康", prop: "qztlType", minWidth: 90, align: "center" },
        { label: "行车", prop: "qztlIsMain", minWidth: 50, align: "center" },
        { label: "从业", prop: "qztlIsCy", minWidth: 50, align: "center" },
        { label: "普速", prop: "qztlIsCw", minWidth: 50, align: "center" },
        { label: "高铁", prop: "qztlIsGt", minWidth: 50, align: "center" },
        { label: "职害", prop: "qztlIsWh", minWidth: 50, align: "center" },
        { label: "复检", prop: "qztlIsFj", minWidth: 50, align: "center" },
      ],
      dialogColSort: false,

      dom: null,   //用于滚动加载数据
      lazyLoading: false,  //是否懒加载中
      loadOpts: {
        totalCount: 0,
        skipCount: 0,
        maxResultCount: 100,
      },
      loadOptsInit: {},

      upBaseInfo: {
        visble: false,
        label: "姓名",
        value: "",
        colName: "patientName",
        patientRegisterId: ""
      },

      queueParams: {}, // 分诊排队参数
      LocalConfig: {
        normal: {
          maxResultCount: 100, //分页时单页记录数          
        },
      },
      LocalConfigInit: {},
    };
  },

  created() {
    //获取用户当前页面的权限
    let userPriv = window.sessionStorage.getItem('userPriv')
    if (userPriv) this.pagePriv.privs = deepCopy(getPagePriv(this.pagePriv.routeUrlorPageName))

    this.LocalConfigInit = deepCopy(this.LocalConfig)
    let LocalConfig = window.localStorage.getItem("LocalConfig") || null
    // console.log('LocalConfig',LocalConfig)
    try {
      this.LocalConfig = Object.assign({}, deepCopy(this.LocalConfigInit), JSON.parse(LocalConfig) || {})
    } catch (error) {
      console.log('window.localStorage.getItem("LocalConfig")', error)
    }
    // console.log('this.LocalConfig',this.LocalConfig)
    this.loadOpts.maxResultCount = Number(this.LocalConfig.normal.maxResultCount || 100)

    this.loadOptsInit = Object.assign({}, this.loadOpts)

  },

  //挂载完成
  mounted() {
    this.quickAsb = this.dict.asbItemAll;

    this.peisid = window.sessionStorage.getItem('peisid');


    this.$nextTick(() => {
      this.scrollFull()
    })


  },
  computed: {
    ...mapState([
      "window",
      "dataTransOpts",
      "dialogWin",
      "dict",
      "elProgress",
      "patientRegister",
      "customerOrg",
    ]),
  },
  methods: {
    ...mapActions(["getCustomerOrgGroup", "getPatientRegisterAbs"]),
    moment, dddw, deepCopy, checkPagePriv, setPrStatusColor,

    // 扩展定义表格行样式
    handleRowClassName({ row, rowIndex }) {
      // highLightBg 为 'selected'的高亮
      //// console.log(rowIndex, row)
      //return row.highLightBg == 'selected' ? 'high-light-bg' : '';
      if (row.choosed) {
        return "current-row";
      } else {
        return "";
      }
    },

    // 行选择
    rowSelected(rows) {
      rows.forEach((e) => {
        this.$refs["info"].toggleRowSelection(e, true);
      });
    },




    refFuncSetData(item, v) {
      setData(this, item, v)
    },

    // 打印指引单(isPreview)
    async guidePrint(ReportCode, isPreview) {

      if (!this.$peisAPI) {
        this.$message.info({ showClose: true, message: "此功能，需要在壳客户端才可运行！" });
        return;
      }
      let token = window.sessionStorage.getItem("token");
      let user = window.sessionStorage.getItem("user");
      let toOutShell = {
        ReportCode,
        token,
        isBuildImage: 'N',
        IsUploadPdf: 'N',
        preViewCanPrint: "N",
        Parameters: [
          { Name: "printer", Value: user },
          { Name: "hisLog", Value: "pic/hisLog.jpg" },
          { Name: 'pageFooter', Value: 'pic/peisQrCode.jpg' },
        ],
      };
      let lfind = -1;

      //选中（取消勾选）start -------------------------
      // this.multipleSelection = []
      // this.tableData.forEach(e => {
      //   if (e.choosed) {
      //     this.multipleSelection.push(deepCopy(e))
      //   }
      // })
      //选中（取消勾选） end  -------------------------

      if (this.multipleSelection.length < 1) {
        this.$message.info({ showClose: true, message: "请勾选要打印指引单的人员记录！" });
        return;
      }

      if (isPreview) {
        /*
        //this.multipleSelection.forEach((item,index) =>{
        postapi(
          `/api/app/printreport/getpatientregisterguidereport?PatientRegisterId=${this.multipleSelection[0].id}`
        )
          .then((res) => {
            if (res.code != -1) {
              toOutShell.ReportTable = res.data;
              // console.log(
                "JSON.stringify(toOutShell)",
                JSON.stringify(toOutShell)
              );
              return this.$peisAPI.printPre(JSON.stringify(toOutShell));
            }
          })
          .then(res => {
            // console.log('this.$peisAPI.printPre', res)
            if (JSON.parse(res).code < 0) {
              this.$message.warning(JSON.parse(res).message);
            }
          })
          .catch((err) => {
            // console.log('打印指引单', err)
            this.$message.warning({ showClose: true, message: err });
          });
        */
        toOutShell.BusinessCode = this.multipleSelection[0].id
        if (this.multipleSelection[0].completeFlag == '0') {
          this.$message.warning({ showClose: true, message: '预登记人员，不可执行此操作！' })
          return
        }

        this.$peisAPI.printPre(JSON.stringify(toOutShell))
          .then(res => {
            if (JSON.parse(res).code < 0) {
              this.$message.warning({ showClose: true, message: JSON.parse(res).message });
            }
          })
          .catch((err) => {
            // console.log('打印指引单', err)
            this.$message.warning({ showClose: true, message: `${err}` });
          });

      } else {

        this.elProgress.display = true;
        this.elProgress.percentage = 0;

        for (let i = 0; i < this.multipleSelection.length; i++) {
          try {

            let patientregisterId = this.multipleSelection[i].id
            if (this.multipleSelection[i].completeFlag == '0') {
              this.$message.warning({ showClose: true, message: `${this.multipleSelection[i].patientName} 为预登记人员，不可打印指引单` });
              continue
            }
            toOutShell.BusinessCode = patientregisterId
            let resPeisAPI = await this.$peisAPI.print(JSON.stringify(toOutShell));
            if (JSON.parse(resPeisAPI).code < 0) continue
            let resPrintTimes = await postapi("/api/app/patientregister/updatepatientregisterguideprinttimesmany", [patientregisterId]);
            if (resPrintTimes.code == -1) continue
            lfind = arrayExistObj(this.tableData, "id", patientregisterId);
            if (lfind > -1) {
              if (this.tableData[lfind].guidePrintTimes) {
                this.tableData[lfind].guidePrintTimes = Number(this.tableData[lfind].guidePrintTimes) + 1;
              } else {
                this.tableData[lfind].guidePrintTimes = 1;
              }
            }

          } catch (error) {
            // console.log('打印指引单', error)
            this.$message.warning({ showClose: true, message: `${error}` });
          }

          this.elProgress.percentage = Math.floor(
            ((i + 1) * 100) / this.multipleSelection.length
          );
        }
        this.elProgress.display = false;
      }
    },

    // 指引单新打印方式，promise 
    guidePrintPromise(ReportCode, isPreview, row) {
      return new Promise((resolve, reject) => {
        if (!this.$peisAPI) reject("此功能，需要在壳客户端才可运行！")


        let token = window.sessionStorage.getItem("token");
        let user = window.sessionStorage.getItem("user");
        let toOutShell = {
          ReportCode,
          token,
          isBuildImage: 'N',
          IsUploadPdf: 'N',
          preViewCanPrint: "N",
          Parameters: [
            { Name: "printer", Value: user },
            { Name: "hisLog", Value: "pic/hisLog.jpg" },
            { Name: 'pageFooter', Value: 'pic/peisQrCode.jpg' },
          ],
        };

        if (!row.completeFlag || row.completeFlag == '0') reject('预登记人员，不可执行此操作！')
        toOutShell.BusinessCode = row.id
        console.log(JSON.stringify(toOutShell))
        if (isPreview) {
          this.$peisAPI.printPre(JSON.stringify(toOutShell))
            .then(res => {
              let lres = JSON.parse(res)
              if (lres.code > -1) {
                resolve(lres)
              } else {
                reject(lres.message)
              }
            })
            .catch((err) => {
              reject(err)
            });
        } else {
          this.$peisAPI.print(JSON.stringify(toOutShell))
            .then(res => {
              let lres = JSON.parse(res)
              if (lres.code > -1) {
                return postapi("/api/app/patientregister/updatepatientregisterguideprinttimesmany", [row.id]);
              } else {
                reject(lres.message)
              }
            })
            .then(res => {
              if (res && res.code > -1) {
                let lfind = arrayExistObj(this.tableData, "id", row.id);
                if (lfind > -1) {
                  if (this.tableData[lfind].guidePrintTimes) {
                    this.tableData[lfind].guidePrintTimes = Number(this.tableData[lfind].guidePrintTimes) + 1;
                  } else {
                    this.tableData[lfind].guidePrintTimes = 1;
                  }
                }
              }
              resolve(res)
            })
            .catch((err) => {
              reject(err)
            });
        }
      })
    },



    printGuideLisPacs(row) {
      return new Promise((resolve, reject) => {
        this.guidePrintPromise("0008", false, row)
          .then(res => {
            return this.lisPrint(row, "0002", false)
          })
          .then(res => {
            return this.pacsPrint(row, "0004", false)
          })
          .then(res => {
            resolve(res)
          })
          .catch(err => {
            reject(err)
          })
      })
    },


    async printPromise() {

      if (this.multipleSelection.length < 1) {
        this.$message.info({ showClose: true, message: "请勾选要打印人员检验检查条码的记录！" });
        return;
      }

      this.elProgress.display = true;
      this.elProgress.percentage = 0;

      for (let i = 0; i < this.multipleSelection.length; i++) {
        let row = this.multipleSelection[i]
        try {
          await this.printGuideLisPacs(row)
        } catch (error) {
          console.log('printPromise', error)
        }

        this.elProgress.percentage = Math.floor(
          ((i + 1) * 100) / this.multipleSelection.length
        );
      }
      this.elProgress.display = false;
    },



    handleSelectionChange(rows) {
      //this.multipleSelection = rows;
      //// console.log('this.multipleSelection',this.multipleSelection)
      // rows.forEach((item) => {
      //   item.highLightBg = "selected";
      // });
      // // 取消全选
      // if (!rows.length) {
      //   this.tableData.forEach((item) => {
      //     item.highLightBg = "";
      //   });
      // }
      this.multipleSelection = rows;
    },

    //设置新增/编辑的form数据
    setForm(formData) {
      this.patientRegister.patientRegisterRd = deepCopy(formData)
      if (!this.patientRegister.patientRegisterRd.id) {
        this.patientRegister.patientRegisterRd.customerOrgId = this.patientRegister.query.customerOrgId
      }
    },

    //点击体检次数行
    rowClick(row) {
      // 按住了shift键
      // if (this.window.shift) {
      //   //清除所有选择
      //   this.tableData.forEach((e, index) => {
      //     e.choosed = false;
      //     e.index = index;
      //   });

      //   if (this.startPoint == -1) {
      //     this.tableData[row.index].choosed = true;
      //     this.startPoint = row.index;
      //   } else {
      //     if (this.startPoint > row.index) {
      //       for (let i = row.index; i <= this.startPoint; i++) {
      //         this.tableData[i].choosed = true;
      //       }
      //     } else if (this.startPoint <= row.index) {
      //       for (let i = this.startPoint; i <= row.index; i++) {
      //         this.tableData[i].choosed = true;
      //       }
      //     }
      //   }
      // } else if (this.window.ctrl) {  // 按住了ctrl 键
      //   this.tableData[row.index].choosed = true;
      //   if (this.startPoint == -1) {
      //     this.startPoint = row.index;
      //   }
      // } else {
      //   // 未按住了ctrl 、shift 键
      //   //清除所有选择
      //   // console.log("清除所有选择");
      //   this.tableData.forEach((e, index) => {
      //     e.choosed = false;
      //     e.index = index;
      //   });
      //   // console.log(this.tableData, row.index);
      //   // console.log(this.tableData[row.index].choosed);

      //   this.tableData[row.index].choosed = true;
      //   this.startPoint = row.index;
      // }

      //选中了多个点编辑时，排序最前的作为当前选中的
      // console.log('row.index <= this.startPoint', row.index, this.startPoint)
      // let lfind = -1
      // for (let i = 0; i < this.tableData.length; i++) {
      //   if (this.tableData[i].choosed) {
      //     lfind = i
      //     break
      //   }
      // }

      // if (lfind > -1) {
      // 弹出编辑框，只有在编辑框显示时，才去触发获取数据
      this.dataTransOpts.tableS.patient_register = deepCopy(row)
      this.tableDataCurrentRow = deepCopy(row)
      this.dataTransOpts.refresh.register_check_asbitem.M++ //触发所选组合项目刷新       
      // }
    },

    // 导入企业(青藏公司)数据
    btnImportOrgData() {

      //
      this.dataTransOpts.plus.ImportOrgData++
      this.dialogWin.ImportOrgData = true

    },

    //体检次数 相关操作
    btnAdd() {
      if (!this.peisid || this.peisid == 'null') {
        this.$message.warning({ showClose: true, message: "该用户未选归属体检中心，不能执行此操作！" });
        return
      }

      let customerOrgId = this.patientRegister.query.customerOrgId;
      if (!customerOrgId) {
        this.$message.warning({ showClose: true, message: "请选择单位或个人" });
        return;
      }

      // this.patientRegister.patientRegisterRdInit.customerOrgId = customerOrgId
      // this.setForm(this.patientRegister.patientRegisterRdInit)      
      // this.patientRegister.patientRegisterAbs = [];
      // this.patientRegister.patientRegisterRd.id = ''
      // this.dialogWin.PatientRegisterEdit = true;
      // this.editTimes++; //触发表单窗口，数据更新
      // this.getPatientRegisterAbs();

      this.dataTransOpts.tableS.patient_register.id = ''
      this.dialogWin.PatientRegisterEdit = true;
      this.dataTransOpts.plus.clearPatientRegisterQuery++ //触发清空人员登记界面的查询条件
      setTimeout(() => {
        this.dataTransOpts.refresh.patient_register.S++  //触发人员信息刷新
      }, 10);

    },

    //批量正式登记
    btnAddBatch(completeFlag) {
      let patientRegisterIds = []
      //取消勾选，换成选择的方式  start
      // this.multipleSelection = [];
      // this.tableData.forEach((e) => {
      //   if (e.choosed && e.completeFlag == '0') {
      //     this.multipleSelection.push(e);
      //     patientRegisterIds.push(e.id)
      //   }
      // });
      //取消勾选，换成选择的方式  end


      if (this.multipleSelection.length < 1) {
        this.$message.info({ showClose: true, message: "请勾选要操作的记录！" });
        return;
      }

      this.multipleSelection.forEach(e => {
        switch (completeFlag) {
          case '0':
            if (e.completeFlag == '1') patientRegisterIds.push(e.id)
            break;
          case '1':
            if (e.completeFlag == '0') patientRegisterIds.push(e.id)
            break;
        }
      });

      if (patientRegisterIds.length == 0) {
        this.$message.info({ showClose: true, message: "没有可操作的数据！" });
        return;
      }
      let body = { completeFlag, patientRegisterIds }
      postapi('/api/app/patientregister/updatepatientregistercompleteflagormedicalstartdate', body)
        .then(res => {
          if (res.code != -1) {
            // console.log('操作成功！')
            patientRegisterIds.forEach(e => {
              let lfind = arrayExistObj(this.tableData, 'id', e)
              if (lfind > -1) this.tableData[lfind].completeFlag = completeFlag
            });
          }
        })
        .catch(err => {
          this.$message.error({ showClose: true, message: `操作失败 ${err}` });
        });
    },

    // 单个编辑
    btnEdit() {
      // if (!this.patientRegister.patientRegisterRd.id) {
      if (!this.dataTransOpts.tableS.patient_register.id) {
        this.$message.warning({ showClose: true, message: "请选择要操作的记录" });
        return;
      }
      //// console.log(this.patientRegister.patientRegisterRd,this.tableData)

      // 触发数据刷新
      this.dataTransOpts.refresh.patient_register.S++  //触发人员信息刷新(会同时刷新组合项目)
      this.dataTransOpts.plus.clearPatientRegisterQuery++ //触发清空人员登记界面的查询条件

      this.dialogWin.PatientRegisterEdit = true;

    },

    //新增或编辑后选中记录
    async close_dialogWin_PatientRegisterEdit() {
      // 如果 dataTransOpts.tableS.patient_register.id 为空(未增加)，则不做处理
      let id = this.dataTransOpts.tableS.patient_register.id
      if (!id) {
        id = this.tableDataCurrentRow.id
      }
      if (!id) return
      this.dataTransOpts.tableS.patient_register.id = id

      let res = await postapi('/api/app/patientregister/getlistinfilter', { patientRegisterNo: this.dataTransOpts.tableS.patient_register.patientRegisterNo })
      if (res.code != 1) return
      let currentRow = res.data.items[0]

      // this.tableData.forEach(e => {
      //   e.choosed = false
      // });      
      let lfind = arrayExistObj(this.tableData, 'id', this.dataTransOpts.tableS.patient_register.id)
      if (lfind > -1) {
        objCopy(currentRow, this.tableData[lfind])
      } else {
        lfind = this.tableData.length
        currentRow.index = lfind
        currentRow.choosed = true
        this.tableData.push(currentRow)
      }

      // 刷新 register_check_asbitem 表记录
      if (lfind > -1) {
        this.dataTransOpts.refresh.register_check_asbitem.M++
      }
    },

    //拍照
    openCamera() {
      if (!this.patientRegister.patientRegisterId) {
        this.$message.warning({ showClose: true, message: "请选择要操作的记录" });
        return;
      }
      this.patientRegister.cameraVisble = true;
    },

    //删除（可批量删除）
    // /api/app/patient-register/many?PatientRegisterIds=3a0c2cac-f44c-f407-9504-c1fc5e80a159&PatientRegisterIds=3a0c2cb3-d10c-ed70-db6a-b835e75ce641
    btnDel() {

      //选中（取消勾选）start -------------------------
      // this.multipleSelection = []
      // this.tableData.forEach(e => {
      //   if (e.choosed) {
      //     this.multipleSelection.push(deepCopy(e))
      //   }
      // })
      //选中（取消勾选） end  -------------------------

      if (this.multipleSelection.length < 1) {
        this.$message.warning({ showClose: true, message: "请先勾选要操作的记录" });
        return;
      }

      let patientRegisterIds = [];
      for (let i = 0; i < this.multipleSelection.length; i++) {
        patientRegisterIds.push(this.multipleSelection[i]["id"]);
      }

      this.$confirm("此操作将永久删除该记录, 是否继续?", "提示", {
        confirmButtonText: "是",
        cancelButtonText: "否",
        type: "warning",
      })
        .then(() => {
          //// console.log('{patientRegisterIds}',{patientRegisterIds})
          return postapi('/api/app/patient-register/delete-many', {
            patientRegisterIds,
          });
        })
        .then((res) => {
          if (res.code != -1) {
            // console.log("操作成功");
            this.dataTransOpts.tableS.patient_register.id = ''
            setTimeout(() => {
              this.dataTransOpts.refresh.register_check_asbitem.M++
            }, 10);
            arrayReduce(this.tableData, this.multipleSelection, 'id=id') //清除列表记录
            // this.setForm(this.patientRegister.patientRegisterRdInit)
            // this.getPatientRegisterAbs();
          }
        })
        .catch((err) => {
          if (err == "cancel") {
            this.$message.info({ showClose: true, message: "已取消操作" });
          }
        });
    },


    //查询
    async Query() {
      // 查询时，清掉明细数据 （滚动时不清）
      this.dataTransOpts.tableS.patient_register.id = ''
      this.tableDataCurrentRow = {} // 清除选择
      this.tableData = []

      setTimeout(() => {
        this.dataTransOpts.refresh.register_check_asbitem.M++ //触发所选组合项目刷新  
      }, 10);

      this.loadOpts = Object.assign(this.loadOpts, this.loadOptsInit)
      await this.getPrList()
    },

    //数据量多时，滚动加载
    async load() {
      this.loadOpts.skipCount++
      await this.getPrList()
    },

    // 获取列表数据
    async getPrList() {

      if (this.loadOpts.skipCount != 0 && this.loadOpts.skipCount * this.loadOpts.maxResultCount >= this.loadOpts.totalCount) return
      // console.log('getPrList', this.loadOpts)

      let body = {
        skipCount: this.loadOpts.skipCount,
        maxResultCount: this.loadOpts.maxResultCount
      };

      // console.log(`this.patientRegister.query`, this.patientRegister.query);
      if (this.patientRegister.query.customerOrgFlag) {
        // if (this.patientRegister.query.CustomerOrgParentId) {
        //   body.customerOrgId = this.patientRegister.query.CustomerOrgParentId;
        // } else {
        //   if (this.patientRegister.query.customerOrgId)
        //     body.customerOrgId = this.patientRegister.query.customerOrgId;
        // }
        if (this.patientRegister.query.customerOrgId) body.customerOrgId = this.patientRegister.query.customerOrgId;
        if (this.patientRegister.query.customerOrgId
          && this.patientRegister.query.customerOrgId != this.dict.personOrgId
          && this.patientRegister.query.customerOrgRegister.id) {
          body.customerOrgRegisterId = this.patientRegister.query.customerOrgRegister.id
          body.customerOrgGroupIds = this.patientRegister.query.customerOrgGroupIds
        }

      }

      if (this.patientRegister.query.sex)
        body.sexId = this.patientRegister.query.sex;

      if (this.patientRegister.query.patientName)
        body.patientName = this.patientRegister.query.patientName;

      if (this.patientRegister.query.medicalTypeIds && this.patientRegister.query.medicalTypeIds.length > 0)
        body.medicalTypeIds = this.patientRegister.query.medicalTypeIds;

      if (this.patientRegister.query.completeFlags && this.patientRegister.query.completeFlags.length > 0)
        body.completeFlags = this.patientRegister.query.completeFlags;

      //StartDate EndDate
      if (
        this.patientRegister.query.startDate &&
        this.patientRegister.query.endDate
      ) {
        body.dateType = this.patientRegister.query.dateType
        body.startDate = moment(this.patientRegister.query.startDate).format(
          "yyyy-MM-DD"
        );
        body.endDate = moment(this.patientRegister.query.endDate).format(
          "yyyy-MM-DD"
        );
        if (body.startDate > body.endDate) {
          this.$message.warning({ showClose: true, message: "起始日期不能大于截止日期，数据校验不通过！" });
          return;
        }
      }

      if (this.patientRegister.query.phone)
        body.phone = this.patientRegister.query.phone;

      if (this.patientRegister.query.idCardNo) {
        body.idNo = this.patientRegister.query.idCardNo;

        try {
          let sysParmId = "patient_register_query_idno"
          let sysParam = await postapi('/api/app/SysParmValue/GetSysParmValueBySysParmId', { sysParmId })
          // console.log('sysParam', sysParam)
          if (sysParam.data != 'N') {
            body = {
              idNo: this.patientRegister.query.idCardNo,
              skipCount: this.loadOpts.skipCount,
              maxResultCount: this.loadOpts.maxResultCount
            };
          }
        } catch (error) {
          console.log(error)
        }
      }

      if (this.patientRegister.query.patientNo)
        body = {
          patientNo: this.patientRegister.query.patientNo,
          skipCount: this.loadOpts.skipCount,
          maxResultCount: this.loadOpts.maxResultCount
        };

      if (this.patientRegister.query.patientRegisterNo)
        body = {
          patientRegisterNo: this.patientRegister.query.patientRegisterNo,
          skipCount: this.loadOpts.skipCount,
          maxResultCount: this.loadOpts.maxResultCount
        };

      // console.log("/api/app/patientregister/getlistinfilter", body);

      postapi("/api/app/patientregister/getlistinfilter", body)
        .then(res => {
          if (res.code > -1) {
            // 刷新最大记录数
            this.loadOpts.totalCount = res.data.totalCount
            let curLoad = res.data.items
            // let oldCount = 0
            // 处理分组/套餐 排序混乱的问题
            curLoad.forEach(e => {
              if (e.customerOrgId == this.dict.personOrgId) {
                e.groupPack = e.medicalPackageId
              } else {
                e.groupPack = e.customerOrgGroupId
              }
            });

            if (body.skipCount == 0) {  //查询
              this.tableData = [];
            }

            this.tableData = this.tableData.concat(curLoad)
            // else {
            //   // 懒加载 ,原数据集不用清空
            //   oldCount = this.tableData.length
            // }
            // curLoad.forEach((e, index) => {
            //   this.tableData.push(Object.assign({ index: Number(oldCount) + Number(index), choosed: false }, e))
            // })

            //如果 有选中 记录，则刷新其对应的组合项目
            if (this.dataTransOpts.tableS.patient_register.id) {
              this.dataTransOpts.refresh.register_check_asbitem.M++
            }
          }
        })
    },

    //滚动加载数据 
    scrollFull() {
      this.dom = this.$refs['info'].bodyWrapper
      // console.log('this.dom', this.dom)

      this.dom.addEventListener('scroll', async () => {
        // // console.log('scrollTop',this.dom.scrollTop,'clientHeight',this.dom.clientHeight,'scrollHeight',this.dom.scrollHeight);
        if (this.dom.scrollTop + this.dom.clientHeight + 20 > this.dom.scrollHeight && !this.lazyLoading) {
          // 获取到的不是全部数据 当滚动到底部 
          // console.log('scrollTop', this.dom.scrollTop, 'clientHeight', this.dom.clientHeight, 'scrollHeight', this.dom.scrollHeight);
          if ((Number(this.loadOpts.skipCount) + 1) * Number(this.loadOpts.maxResultCount) >= Number(this.loadOpts.totalCount)) {
            this.lazyLoading = false
          } else {
            this.lazyLoading = true
            await this.load()
            this.lazyLoading = false
            // this.dom.scrollTop = this.dom.scrollTop - 100
          }
        }
      })
    },


    close_dialogWin_upBaseInfo() {
      this.upBaseInfo.visble = false
      this.close_dialogWin_PatientRegisterEdit()
    },
    btnUpBaseInfo() {
      let body = {
        patientRegisterId: this.upBaseInfo.patientRegisterId,
        // "patientName": "string",
        // "mobileTelephone": "string",
        // "idNo": "string"
      }
      body[this.upBaseInfo.colName] = this.upBaseInfo.value

      postapi('/api/app/PatientRegister/UpdatePatientRegisterBaseInfoByPatientRegisterId', body).then(res => {
        if (res.code > -1) {
          this.close_dialogWin_upBaseInfo()
        }
      })
    },
    // 修改基本信息
    fnUpBaseInfo(row, baseInfoType) {
      this.dataTransOpts.tableS.patient_register.id = row.id
      this.upBaseInfo.visble = true
      this.upBaseInfo.patientRegisterId = row.id
      this.upBaseInfo.colName = baseInfoType
      switch (baseInfoType) {
        case "idNo":
          this.upBaseInfo.label = "新身份证号"
          break;
        case "mobileTelephone":
          this.upBaseInfo.label = "新手机号"
          break;
        default:
          this.upBaseInfo.label = "新姓名"
          break;
      }
      this.upBaseInfo.value = row[baseInfoType]

    },

    // 分诊排队
    fnQueue(row) {
      this.queueParams = {
        patientRegisterId: row.id
      }
      this.dialogWin.queue = true
      this.dataTransOpts.plus.queue++
    },

    //右击菜单
    onCellRightClick(row, column) {
      this.rClickRow = { ...row }; //右击的行记录
      this.rClickColumn = { ...column }; //右击的列（预留）
      // console.log(row, column.property);
    },
    onContextmenu(event) {
      //// console.log('onContextmenu',event);
      if (!this.rClickRow) return false;
      let row = { ...this.rClickRow };
      let items = [] //菜单项

      // items.push({
      //   label: "一级菜单",
      //   children: [
      //     { label: "修改姓名", onClick: () => { this.fnUpBaseInfo(row, 'patientName'); } }
      //   ]
      // })

      if (checkPagePriv(this.pagePriv.privs, '修改姓名') && row.completeFlag != '0')
        items.push({
          label: "修改姓名",
          onClick: () => {
            this.fnUpBaseInfo(row, 'patientName');
          },
        })
      if (checkPagePriv(this.pagePriv.privs, '修改手机号') && row.completeFlag != '0')
        items.push({
          label: "修改手机号",
          onClick: () => {
            this.fnUpBaseInfo(row, 'mobileTelephone');
          },
        })
      if (checkPagePriv(this.pagePriv.privs, '修改身份证号') && row.completeFlag != '0')
        items.push({
          label: "修改身份证号",
          onClick: () => {
            this.fnUpBaseInfo(row, 'idNo');
          },
        })
      if (checkPagePriv(this.pagePriv.privs, '分诊排队') && row.completeFlag != '0')
        items.push({
          label: "分诊排队",
          onClick: () => {
            this.fnQueue(row);
          },
        })
      if (checkPagePriv(this.pagePriv.privs, '发送检验申请') && row.completeFlag != '0')
        items.push({
          label: "发送检验申请",
          onClick: () => {
            this.lisRequest(row);
          },
        })
      // 预览条码
      let subMenuPre = []
      if (checkPagePriv(this.pagePriv.privs, '预览人员条码') && row.completeFlag != '0')
        subMenuPre.push({
          label: "预览人员条码",
          onClick: () => {
            this.guidePrintPromise("0008", true, row);
          },
        })
      if (checkPagePriv(this.pagePriv.privs, '预览检验条码') && row.completeFlag != '0')
        subMenuPre.push({
          label: "预览检验条码",
          onClick: () => {
            this.lisPrint(row, "0002", true);
          },
        })
      if (checkPagePriv(this.pagePriv.privs, '预览Pacs条码') && row.completeFlag != '0')
        subMenuPre.push({
          label: "预览Pacs条码",
          onClick: () => {
            // console.log('预览Pacs条码 row',row)
            this.pacsPrint(row, "0004", true);
          },
        })
      if (subMenuPre.length > 0) items.push({ label: "预览条码", children: subMenuPre })


      let subMenuPrint = []
      if (checkPagePriv(this.pagePriv.privs, '打印人员条码') && row.completeFlag != '0')
        subMenuPrint.push({
          label: "打印人员条码",
          onClick: () => {
            this.guidePrintPromise("0008", false, row);
          },
        })
      if (checkPagePriv(this.pagePriv.privs, '打印检验条码') && row.completeFlag != '0')
        subMenuPrint.push({
          label: "打印检验条码",
          onClick: () => {
            this.lisPrint(row, "0002", false);
          },
        })
      if (checkPagePriv(this.pagePriv.privs, '打印Pacs条码') && row.completeFlag != '0')
        subMenuPrint.push({
          label: "打印Pacs条码",
          onClick: () => {
            this.pacsPrint(row, "0004", false);
          },
        })
      if (subMenuPrint.length > 0) items.push({ label: "打印条码", children: subMenuPrint })

      let subMenuImp = []
      if (checkPagePriv(this.pagePriv.privs, '导入检查结果') && row.completeFlag != '0')
        subMenuImp.push({
          label: "导入检查结果",
          onClick: () => {
            this.importResult('pacs', row);
          },
        })
      if (checkPagePriv(this.pagePriv.privs, '导入检验结果') && row.completeFlag != '0')
        subMenuImp.push({
          label: "导入检验结果",
          onClick: () => {
            this.importResult('lis', row);
          },
        })
      if (subMenuImp.length > 0) items.push({ label: "导入结果", children: subMenuImp })

      if (checkPagePriv(this.pagePriv.privs, '批量更新组合项目明细') && this.multipleSelection.length > 0)
        items.push({
          label: "批量更新组合项目明细",
          onClick: () => {
            this.btnItemBatch();
          },
        })
      if (checkPagePriv(this.pagePriv.privs, '调整检查项目医生') && this.multipleSelection.length > 0)
        items.push({
          label: "调整检查项目医生",
          onClick: () => {
            this.dataTransOpts.plus.PatientRegisterEditDoctorBatch++  //如果放在弹窗显示后面，在首次加载子组件时，会触发两次数据处理 
            this.dialogWin.PatientRegisterEditDoctorBatch = true;
          },
        })
      items.push({ label: "----------------", })
      this.$contextmenu({
        items,
        event,
        //x: event.clientX,
        //y: event.clientY,
        customClass: "custom-class",
        zIndex: 3,
        minWidth: 80,
      });

      this.rClickRow = null;
      return false;
    },

    //批量更新分组按钮
    btnGroupBatch() {
      let customerOrgId = this.patientRegister.query.customerOrgId;
      if (!customerOrgId) {
        this.$message.warning({ showClose: true, message: "请选择单位" });
        return;
      }
      //取消勾选，换成选择的方式  start
      // this.multipleSelection = [];
      // this.tableData.forEach((e) => {
      //   if (e.choosed) this.multipleSelection.push(e);
      // });
      //取消勾选，换成选择的方式  end

      if (this.multipleSelection.length < 1) {
        this.$message.info({ showClose: true, message: "请选择要操作的记录！" });
        return;
      }
      this.dataTransOpts.plus.PatientRegisterEditGroupBatch++
      this.dialogWin.PatientRegisterEditGroupBatch = true;

    },

    //批量更新组合项目
    btnAsbBatch() {
      let customerOrgId = this.patientRegister.query.customerOrgId;
      if (!customerOrgId) {
        this.$message.warning({ showClose: true, message: "请选择单位" });
        return;
      }
      //取消勾选，换成选择的方式  start
      // this.multipleSelection = [];
      // this.tableData.forEach((e) => {
      //   if (e.choosed) this.multipleSelection.push(e);
      // });
      //取消勾选，换成选择的方式  end

      if (this.multipleSelection.length < 1) {
        this.$message.warning({ showClose: true, message: "请选择要操作的记录" })
        return
      }

      this.dataTransOpts.plus.PatientRegisterEditItemBatch++  //如果放在弹窗显示后面，在首次加载子组件时，会触发两次数据处理 
      this.dialogWin.PatientRegisterEditItemBatch = true;

    },

    //批量更新组合项目
    async btnItemBatch() {
      if (this.multipleSelection.length < 1) {
        this.$message.warning({ showClose: true, message: "请选择要操作的记录" })
        return
      }

      this.elProgress.display = true;
      this.elProgress.percentage = 0;

      for (let i = 0; i < this.multipleSelection.length; i++) {
        let patientRegisterId = this.multipleSelection[i].id
        try {
          await postapi('/api/app/RegisterCheckItem/SyncRegisterCheckItem', { patientRegisterId })
        } catch (error) {
          console.log('printPromise', error)
        }

        this.elProgress.percentage = Math.floor(
          ((i + 1) * 100) / this.multipleSelection.length
        );
      }
      this.elProgress.display = false;



    },

    //检验申请
    async lisRequest(row) {
      let isPrintLisRequest = false;
      let res = null;
      if (row.completeFlag == '0') {
        this.$message.info({ showClose: true, message: "预登记人员，不可执行此操作！" });
        return;
      }

      try {
        res = await postapi(`/api/app/lisrequest/setlisrequest?PatientRegisterId=${row.id}`);
        // console.log(`/ api / app / lisrequest / setlisrequest ? PatientRegisterId = ${ prId }`,res);
      } catch (error) {
        return;
      }
      if (res.code > -1) {
        isPrintLisRequest = true;
      }

      //重复申请，重打
      if (res.code == -1 && res.message.indexOf("已申请") > -1) {
        isPrintLisRequest = true;
      }

      if (!isPrintLisRequest) return;

      try {
        await this.$confirm("是否打印检验申请单?", "提示", {
          confirmButtonText: "是",
          cancelButtonText: "否",
          type: "info",
          showClose: false,
          closeOnClickModal: false,
          closeOnPressEscape: false,
        });
      } catch (error) {
        return;
      }
      //打印检验申请单
      this.lisPrint(row, "0003", false);
    },

    //检验条码打印 改造成 promise
    lisPrint(row, ReportCode, isPreview) {
      return new Promise((resolve, reject) => {
        if (!this.$peisAPI) reject("此功能，需要在壳客户端才可运行！");
        if (!row.completeFlag || row.completeFlag == '0') reject("预登记人员，不可执行此操作！")



        let token = window.sessionStorage.getItem("token");
        let user = window.sessionStorage.getItem("user");
        let toOutShell = {
          ReportCode,
          token,
          IsMoreLabel: 'Y',
          isBuildImage: 'N',
          IsUploadPdf: 'N',
          preViewCanPrint: "N",
          Parameters: [
            { Name: "printer", Value: user },
            { Name: "hisLog", Value: "pic/hisLog.jpg" },
          ],
          BusinessCode: row.id
        };
        console.log('this.$peisAPI.toOutShell', toOutShell)
        if (isPreview) {
          this.$peisAPI.printPre(JSON.stringify(toOutShell))
            .then(res => {
              console.log('this.$peisAPI.printPre', res)
              let lres = JSON.parse(res)
              if (lres.code > -1) {
                resolve(lres)
              } else {
                reject(lres.message);
              }
            })
            .catch((err) => {
              reject(err);
            });
        } else {
          this.$peisAPI.print(JSON.stringify(toOutShell))
            .then(res => {
              console.log('this.$peisAPI.print', res)
              let lres = JSON.parse(res)
              if (lres.code < 0) {
                reject(lres.message);
              } else {
                return postapi("/api/app/lisrequest/updatelisrequestisprint", {
                  operateType: 1,
                  patientRegisterId: row.id,
                });
              }
            })
            .then(res => {
              if (res && res.code < 0) {
                reject(res.message);
              } else {
                resolve(res)
              }
            })
            .catch((err) => {
              reject(err);
            });
        }
      })
    },

    //pacs条码打印
    pacsPrint(row, ReportCode, isPreview) {
      return new Promise((resolve, reject) => {
        if (!this.$peisAPI) reject("此功能，需要在壳客户端才可运行！");
        if (!row.completeFlag || row.completeFlag == '0') reject("预登记人员，不可执行此操作！")

        let token = window.sessionStorage.getItem("token");
        let user = window.sessionStorage.getItem("user");
        let toOutShell = {
          ReportCode,
          token,
          IsMoreLabel: 'Y',
          isBuildImage: 'N',
          IsUploadPdf: 'N',
          preViewCanPrint: "N",
          Parameters: [
            { Name: "printer", Value: user },
            { Name: "hisLog", Value: "pic/hisLog.jpg" },
          ],
          BusinessCode: row.id
        };
        console.log('this.$peisAPI.print', toOutShell)
        if (isPreview) {
          this.$peisAPI.printPre(JSON.stringify(toOutShell))
            .then(res => {
              console.log('this.$peisAPI.printPre', res)
              let lres = JSON.parse(res)
              if (lres.code > -1) {
                resolve(lres)
              } else {
                reject(lres.message);
              }
            })
            .catch((err) => {
              reject(err);
            });
        } else {
          this.$peisAPI.print(JSON.stringify(toOutShell))
            .then(res => {
              console.log('this.$peisAPI.print', res)
              let lres = JSON.parse(res)
              if (lres.code > -1) {
                resolve(lres)
              } else {
                reject(lres.message);
              }
            })
            .catch((err) => {
              reject(err);
            });
        }
      })
    },

    // 导入检查检验结果
    importResult(checkType, row) {
      let url = '/api/app/ImportLisResult/ImportResultByPatientRegisterId'
      switch (checkType) {
        case 'pacs':
          url = '/api/app/ImportPacsResult/ImportResultByPatientRegisterId'
          postapi(url, { patientRegisterId: row.id })
            .then(res => {
              if (res.code > -1) {
                return postapi('/api/app/ImportElectrocardiogramResult/ImportElectrocardiogramResultByPatientRegisterId', { patientRegisterId: row.id })
              }
            })
            .then(res => {
              if (res && res.code > -1) {
                this.$message.success({ showClose: true, message: '导入成功！' })
                this.rowClick(row)
              }
            })
          break;
        default:
          postapi(url, { patientRegisterId: row.id }).then(res => {
            if (res.code > -1) {
              this.$message.success({ showClose: true, message: '导入成功！' })
              this.rowClick(row)
            }
          })
          break;
      }
    },

    //通用导出
    btnExport(elId) {
      // 获取HTML元素（表格）
      // let table = document.getElementById(elId); //.cloneNode(true)
      this.$nextTick(() => {
        // let refsTable = this.$refs[elId]  //.cloneNode(true) true
        let table = document.getElementById(elId)
        // console.log('table,refsTable', table, refsTable)

        let tableData = table.innerHTML
        let fileName = moment(new Date()).format('yyyyMMDDHHmmss')

        let blob = new Blob([tableData], { type: "text/plain;charset=utf-8" });

        FileSaver.saveAs(blob, fileName + '.xls');

        // 导出图片       
        // 使用html2canvas将HTML元素转换为画布
        // let cloneTable = table.cloneNode(true) //[elId]
        /*
        html2canvas(table).then(canvas => {

          // 创建一个a元素用于下载
          const link = document.createElement('a');
          link.href = canvas.toDataURL('image/jpeg');
          link.download = fileName + '.jpg';
          document.body.appendChild(link);
          link.click();
          //document.body.removeChild(link);

          // // 创建一个PDF对象
          // var pdf = new jsPDF();    
          // // 设置PDF的尺寸
          // pdf.addImage(canvas.toDataURL('image/png'), 'PNG', 0, 0, canvas.width, canvas.height);    
          // // 导出PDF
          // pdf.save('员工信息表.pdf');

        });
        */
      })
    },

    btnDragColDesign() {
      this.dragColDesign = deepCopy(this.dragCol)
      this.dialogColSort = true
      this.rowDrag()
    },

    btnDragColDesignOk() {
      this.dragCol = deepCopy(this.dragColDesign)
      this.dialogColSort = false
    },
    //拖拽
    rowDrag() {
      this.$nextTick(() => {
        const el = document.querySelector("#elTable_dragCol tbody");
        // console.log('el0', el)
        const that = this;
        Sortable.create(el, {
          animation: 150, // ms, number 单位：ms，定义排序动画的时间
          //拖拽结束
          onEnd({ newIndex, oldIndex }) {
            that.isshow = false;
            const currRow = that.dragColDesign.splice(oldIndex, 1)[0];
            that.dragColDesign.splice(newIndex, 0, currRow);
            // console.log('el', el)
          },
        });
      });
    },

  },

  //监听事件
  watch: {
    "patientRegister.query.customerOrgId": {
      // immediate: true, // 立即执行
      // deep: true, // 深度监听复杂类型内变化
      handler(newVal, oldVal) {
        //// console.log('watch:patientRegister.query.customerOrgId:',newVal,oldVal)
        // 单位变化时，清除当前列表信息
        if (newVal && newVal != oldVal) {
          this.tableData = []
          this.dataTransOpts.tableM.register_check_asbitem = []
        }
      }
    },

    //触发查询事件
    "patientRegister.query.times"(newVal, oldVal) {
      if (newVal != oldVal) {
        //alert('触发查询事件')
        this.Query();
      }
    },

    //新增后，触发赋值
    // "patientRegister.patientRegisterRd.id"(newVal, oldVal) {
    //   if (newVal != oldVal) {
    //     //// console.log('patientRegister.patientRegisterRd.customerOrgId',this.patientRegister.patientRegisterRd.customerOrgId)
    //     objCopy(this.patientRegister.patientRegisterRd, this.form);
    //   }
    // },
  },
};
</script>
<style scoped>
@import "../../assets/css/global_input.css";
@import "../../assets/css/global_table.css";
@import "../../assets/css/global.css";


.box {
  display: flex;
}

.listBtn {
  margin-top: 5px;
  text-align: center;
}

.btnClass {
  width: 100px;
}
</style>
