<template>
  <div>
    <el-form :model="formData" class="order-el-form" ref="formData" label-width="120px" @submit.native.prevent>
      <el-card>

        <!--  <el-alert-->
        <!--  style="margin-top: 15px"-->
        <!--  :title="msgTip"-->
        <!--  :closable="false"-->
        <!--  type="warning">-->
        <!--</el-alert>-->

        <el-row :gutter="0" style="margin-top: 15px">
          <el-col :span="24" align="right">
            <el-button-group>
              <el-button type="primary" @click.native="deleteCode"
                         v-if="labelName == 1"
                         :disabled="formData.billNo == null"
              >扫码剔除
              </el-button>
              <el-button size="mini" type="primary"
                         v-if="labelName == 2"
                         @click.native="overdeleteCode"
              >结束剔除
              </el-button>
              <!--<el-button-->
              <!--  type="primary"-->
              <!--  :disabled="formData.billNo  || (this.formDataVisible != null &&  this.formDataVisible.scanType == 1)"-->
              <!--  @click.native="nextCollectOrder()"-->
              <!--&gt;下一单-->
              <!--</el-button>-->
              <el-button
                type="primary"
                :disabled="formData.billNo ||(this.formDataVisible != null &&  this.formDataVisible.scanType == 1)"
                @click.native="selectPrescribe()"
              >选单
              </el-button>
              <el-button
                type="primary"
                :disabled="!formData.billNo"
                @click.native="saveDraftOrder()"
              >挂起
              </el-button>
              <el-button
                type="primary"
                :disabled="!formData.billNo"
                @click.native="cancelOrder()"
              >放弃
              </el-button>
              <el-button
                type="primary"
                :disabled="!formData.billNo"
                @click.native="confirmFinishOrder()"
              >完成
              </el-button>

              <!--              <el-dropdown @command="handleCommand">-->
              <!--                <el-button type="primary">-->
              <!--                  更多功能<i class="el-icon-arrow-down el-icon&#45;&#45;right"></i>-->
              <!--                </el-button>-->
              <!--                <el-dropdown-menu slot="dropdown">-->
              <!--                  <el-dropdown-item divided @click.native="handleClickOut('IoCreateOrderBlank')">工位上货</el-dropdown-item>-->
              <!--                  <el-dropdown-item divided @click.native="handleClickReturn('IoCreateOrderBlank')">工位退货-->
              <!--                  </el-dropdown-item>-->
              <!--                  <el-dropdown-item divided @click.native="handleClick('ioSplitFifoCodeBlank')">工位存量</el-dropdown-item>-->
              <!--                  <el-dropdown-item divided @click.native="handleClick('CollectOrderAllotBlank')">待处理单-->
              <!--                  </el-dropdown-item>-->
              <!--                  <el-dropdown-item divided @click.native="handleClick('CollectOrderEndBlank')">已完成单</el-dropdown-item>-->
              <!--                </el-dropdown-menu>-->
              <!--              </el-dropdown>-->
            </el-button-group>
          </el-col>
        </el-row>

        <el-row style="margin-top: 6px;margin-bottom: -6px;"
                v-if="this.formDataVisible != null &&  this.formDataVisible.scanType == 1">
          <!--          <el-col :span="6">-->
          <!--            <el-form-item prop="workPlaceCode" class="query-form-item" label="当前工位:">-->
          <!--              <el-select-->
          <!--                v-model="formData.workPlaceCode"-->
          <!--                placeholder="当前工位"-->
          <!--                style="width: 90%"-->
          <!--                :disabled="corpOrderIdDisabled"-->
          <!--                filterable-->
          <!--                @change="workPlaceCodeChange"-->
          <!--              >-->
          <!--                <el-option-->
          <!--                  v-for="item in curWorkPlaces"-->
          <!--                  :key="item.workplaceId"-->
          <!--                  :label="item.workplaceName"-->
          <!--                  :value="item.workplaceId"-->
          <!--                >-->
          <!--                  <span style="float: left">{{ item.workplaceName }}</span>-->
          <!--                  <span style="float: right; color: #8492a6; font-size: 13px">{{-->
          <!--                      item.workplaceId-->
          <!--                    }}</span>-->
          <!--                </el-option>-->
          <!--              </el-select>-->
          <!--            </el-form-item>-->
          <!--          </el-col>-->

          <!--          <el-col :span="6">-->
          <!--            <el-form-item prop="busType" class="query-form-item" label="当前业务类型:">-->
          <!--              <el-select v-model="formData.busType"-->
          <!--                         filterable-->
          <!--                         remote-->
          <!--                         @change="busTypeChange"-->
          <!--                         reserve-keyword-->
          <!--                         disabled-->
          <!--                         placeholder="请选择业务类型" clearable style="width: 55%">-->
          <!--                <el-option-->
          <!--                  v-for="item in busTypeList"-->
          <!--                  :key="item.documentTypeCode"-->
          <!--                  :label="item.busName"-->
          <!--                  :value="item.documentTypeCode"-->
          <!--                >-->
          <!--                  <span style="float: left">{{ item.busName }}</span>-->
          <!--                  <span style="float: right; color: #8492a6; font-size: 13px">{{ item.documentTypeCode }}</span>-->
          <!--                </el-option>-->
          <!--              </el-select>-->
          <!--              <el-button type="primary" @click="toggleBusType" style="margin-left: 5px">切换业务</el-button>-->
          <!--            </el-form-item>-->
          <!--          </el-col>-->
          <el-col :span="6">
            <el-form-item prop="locInvCode" label="发货方:">
              <el-select v-model="formData.shipper" placeholder="请选择发货方" clearable
                         :disabled="formData.billNo"
                         style="width: 90%"
                         @change="changeShipper"

              >
                <el-option
                  v-for="item in invList"
                  :key="item.name"
                  :label="item.name"
                  :value="item.code">
                  <span style="float: left">{{ item.name }}</span>
                </el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <!--            :label="this.formDataVisible.unitTittle + ':'"-->
            <el-form-item class="query-form-item" label="收货方:">
              <el-select v-model="formData.fromCorp"
                         filterable
                         :disabled="formData.billNo"
                         remote
                         reserve-keyword
                         @change="changeCorp"
                         placeholder="请选择收货方" clearable style="width: 90%">
                <el-option
                  v-for="item in fromInvOptions"
                  :key="item.code"
                  :label="item.name"
                  :value="item.code"
                >
                  <span style="float: left">{{ item.name }}</span>
                  <span style="float: right; color: #8492a6; font-size: 13px">{{ item.code }}</span>
                </el-option>
              </el-select>
            </el-form-item>
          </el-col>

        </el-row>

        <div style="border: 1px solid #ebeef5;border-radius: 2px;margin-top: 15px;padding: 15px">
          <el-row :gutter="0" style="margin-top: 5px">
            <el-col :span="20">
              <el-form-item prop="code" :label="scanTip" label-width="80px">
                <el-input
                  id="inputer"
                  @focus="getInputFocus($event)"
                  @keypress.enter.native="enterKey($event)"
                  ref="inputRef"
                  style="ime-mode: disabled"
                  type="tel"
                  :placeholder="this.placeholder"
                  v-model="scanCode"
                ></el-input>
                <!--                       :disabled="scanDisabled"-->
              </el-form-item>
            </el-col>
            <el-col :span="4">
              <el-button-group style="display: flex;">
                <el-button
                  type="primary"
                  size="mini"
                  icon="el-icon-search"
                  @click.native.stop="enterKey($event)"
                  style="margin-left: 15px"
                >
                </el-button>
                <!-- :disabled="!formData.billNo ||  (this.formDataVisible != null &&  this.formDataVisible.scanType == 1)"-->
                <el-button type="primary"
                           @click="addGs">ALT+29
                </el-button>
                <el-button
                  type="primary"
                  size="mini"
                  icon="el-icon-delete"
                  @click.native.stop="clearCode()"
                >清空
                </el-button>
              </el-button-group>
            </el-col>
          </el-row>
          <el-row :gutter="0">
            <el-col :span="20" style="margin-top: 0px;margin-bottom: 10px;margin-left: 80px">
              <el-checkbox v-model="checked" v-if="!this.formData.billNo && this.formDataVisible.scanType != 1">定向查询
              </el-checkbox>
            </el-col>
          </el-row>
          <el-alert
            :title="scanTitle"
            :type="scanResultType"
            :closable="false"
            :dangerouslyUseHTMLString="true"
            :description="result">
          </el-alert>
          <el-alert
            v-if="warnVisible"
            title="警告信息:"
            type="warning"
            :closable="true"
            :dangerouslyUseHTMLString="true"
            :description="warnResult">
          </el-alert>
          <el-alert
            v-if="errVisible"
            title="错误信息:"
            type="warning"
            :closable="true"
            :dangerouslyUseHTMLString="true"
            :description="errResult">
          </el-alert>


        </div>
        <el-descriptions title="单据信息" :column="4" border style="margin-top: 15px" class="custom-descriptions">
          <!--{{ formData.billNo }}-->
          <el-descriptions-item label="业务单号">
            <!--<svg ref="barcodeContainer" ></svg>-->
            <div class="barcode-wrapper" >
              <svg ref="barcodeContainer" v-show="formData.billNo != null"></svg>
              <!--<span>{{ formData.billNo }}</span>-->
            </div>
          </el-descriptions-item>
          <el-descriptions-item label="发货方">{{ formData.shipperName }}</el-descriptions-item>
          <el-descriptions-item label="收货方">{{ formData.fromCorpName }}</el-descriptions-item>
          <el-descriptions-item label="单据类型">{{ formData.busTypeName }}</el-descriptions-item>
          <el-descriptions-item label="来源系统">{{ formData.fromType }}</el-descriptions-item>
          <el-descriptions-item label="单据时间">{{ formData.billTime }}</el-descriptions-item>
          <el-descriptions-item label="单据备注">{{ formData.remark }}</el-descriptions-item>
        </el-descriptions>
        <!--<div id="qrcode-container" ref="barcodeContainer" style="margin-right: 38px;padding-bottom: 30px"></div>-->
        <!--<svg ref="barcodeContainer"></svg>-->
      </el-card>

      <el-tabs type="border-card" style="margin: 15px" v-model="editableTabsValue">
        <el-tab-pane label="扫码详情" name="prescribeOriginPanel">
          <prescribeOriginPanel
            v-if="panelALive"
            :prescribeData="curRow"
          ></prescribeOriginPanel>
          <!-- 在表格下方添加说明 -->
          <el-row style="text-align: right;font-size: 12px;margin-top: 10px">
            <el-col span="24">
              <div style="float: right">
                <td>
                  <div style="background-color: #F56C6C;width: 10px;height: 10px;"></div>
                </td>
                <td><span style="color: #6d6d6d;"><pre>未赋码  </pre></span></td>


                <td>
                  <div style="background-color: #E6A23C;width: 10px;height: 10px;"></div>
                </td>
                <td>
                  <span style="color: #6d6d6d;"><pre>预赋码  </pre></span>
                </td>


                <td>
                  <div style="background-color: #67C23A;width: 10px;height: 10px;"></div>
                </td>
                <td>
                  <span style="color: #6d6d6d;"><pre>已赋码</pre></span>
                </td>
              </div>
            </el-col>
          </el-row>
        </el-tab-pane>
        <!--        <el-tab-pane label="扫码明细">-->
        <!--          <PanelOrderManuTagCode-->
        <!--            v-if="panelALive"-->
        <!--            :fifoSplit="3"-->
        <!--            :prescribeData="curRow"-->
        <!--            :refreshPanel="refreshCodesPanelP"-->
        <!--          ></PanelOrderManuTagCode>-->
        <!--        </el-tab-pane>-->
        <!--        <el-tab-pane label="拆零详情" name="prescribeCodePanel1">-->
        <!--          <prescribeCodePanel-->
        <!--            v-if="panelALive"-->
        <!--            :prescribeData="curRow"-->
        <!--            :fifoSplit="1"-->
        <!--          ></prescribeCodePanel>-->
        <!--        </el-tab-pane>-->
        <!--        <el-tab-pane label="整取详情" name="prescribeCodePanel2">-->
        <!--          <prescribeCodePanel-->
        <!--            v-if="panelALive"-->
        <!--            :prescribeData="curRow"-->
        <!--            :fifoSplit="2"-->
        <!--          ></prescribeCodePanel>-->
        <!--        </el-tab-pane>-->
        <!--        <el-tab-pane label="整单详情" name="PanelOrderAllDetail">-->
        <!--          <PanelOrderAllDetail-->
        <!--            v-if="panelALive"-->
        <!--            :prescribeData="curRow"-->
        <!--          ></PanelOrderAllDetail>-->
        <!--        </el-tab-pane>-->

      </el-tabs>

      <el-dialog
        title="选入业务单据"
        :visible.sync="selectPrescriptionVisible"
        :close-on-click-modal="false"
        :close-on-press-escape="false"
        v-if="selectPrescriptionVisible"
        width="65%"
        append-to-body
      >
        <selectPrescribeDialog
          ref="childRef"
          :workPlaceCode="this.workplaceId"
          :busType="this.formData.busType"
          :fromCorp="this.formData.fromCorp"
          :confirmSelect="this.confirmSelect"
          :closeDialog="this.closeDialog"
          :viewType="viewType"
        ></selectPrescribeDialog>
      </el-dialog>


      <el-dialog
        title="选择业务类型"
        :visible.sync="selectBusTypeDisabled"
        :close-on-click-modal="false"
        :close-on-press-escape="false"
        :show-close="false"
        v-if="selectBusTypeDisabled"
        width="65%"
        append-to-body
      >
        <el-row>
          <!--          <el-button v-for="(item, index) in busTypeList" :key="index" type="primary" plain @click="selectBusType(item.code)">{{ item.name }}</el-button>-->

          <el-col v-for="(info, index)  in busTypeList" :key="index" :xs="12" :sm="8" :md="8" :lg="6">
            <el-card :body-style="{margin:'20px'}"
                     style="margin:20px 20px 20px 20px;height: 200px;background-color: #e1f3fb;border-radius: 12px; position: relative;"

            >

              <div
                style="display: flex; justify-content: space-between; align-items: center; height: 46px; /* 约为 200px 的 1/3 */"
                @click="selectBusType(info.documentTypeCode)">
                <p style="font-size: 20px;background-color: #e1f3fb;font-weight: bold;">{{ info.busName }}</p>
                <!-- 假设你的信息对象中包含一个title属性 -->
                <!--            <div style="width: 60px; height: 60px;  display: flex; justify-content: center; align-items: center;">-->
                <!--              &lt;!&ndash; 二维码占位，这里用灰色方块代替 &ndash;&gt;-->
                <!--&lt;!&ndash;              <span>QR</span>&ndash;&gt;-->
                <!--              <div ref="qrcode" :id="'qrcode-'+index" style="width: 60px;height: 60px;"></div>-->

                <!--            </div>-->
              </div>
              <div style="flex: 1; display: flex; flex-direction: column; justify-content: flex-end; padding-top: 10px;"
              >
                <!-- 假设这里有一些信息内容 -->
                <p style="font-size: 14px;background-color: #e1f3fb" @click="selectBusType(info.documentTypeCode)">
                  {{ info.remark }}</p>
                <el-button type="primary" style="position: absolute; bottom: 20px; right: 20px;" icon="el-icon-thumb"
                           @click="selectBusType(info.documentTypeCode)">开始作业
                </el-button>

              </div>


            </el-card>
          </el-col>
        </el-row>
      </el-dialog>


    </el-form>
  </div>

</template>

<script>
import addOrder from "@/views/inout/DialogCreateOrder";
import errOrder from "@/views/inout/IoCreateErrorOrder";
import {executeFuc, getHead} from "@/utils/customConfig";
import {convertDate} from "@/utils/date";
import selectPrescribeDialog from "@/views/collect/selectCollectOrderDialog";
import PanelOrderManuTagCode from "./PanelOrderManuTagCode";
import prescribeOriginPanel from "./PannelOrderBiz";
import prescribeCodePanel from "./PanelOrderTagCode";
import PannelOrderBiz from "./PannelOrderBiz";
import {listPage} from "@/api/basic/workPlace/sysWorkplaceManage";
import {enterCodeWeb, batchVailCode, enterCodeBillNo, saveOrderWeb, batchUpdateCode} from "@/api/inout/order";
import {
  cancelOrder,
  draftOrder,
  finishOrder,
  startSplit,
  tagCode,
  updateOrder,
  vailOrderFinish
} from "@/api/collect/splitCreateOrder";
import {selectCorpList} from "@/api/basic/basicUnitMaintain";
import {
  getCurOrder,
  getNextOrder,
  findByBill,
  findFromCorp,
  orderDetail,
  removeByScanCode
} from "@/api/collect/collectOrder";
import PanelOrderAllDetail from "@/views/collect/PanelOrderAllDetail";
import {getWorkBindBusTypes, removeBusTypeById} from '@/api/basic/workPlace/sysWorkplaceDocuments'
import {getInvListByUser} from "@/api/system/invWarehouse";
import {orderbatchAddCode} from "@/api/inout/splitCode";
import {isBlank} from "@/utils/strUtil";

import JsBarcode from 'jsbarcode';
export default {
  /**
   * 处理处方
   */
  name: "prescribeTagCodeDeal",
  props: {
    resetKey: {
      type: Function,
      required: true
    },
  },
  data() {
    return {
      tabsName: [
        'prescribeOriginPanel',
        'prescribeCodePanel1',
        'prescribeCodePanel2',
        'PanelOrderAllDetail',
      ],
      editableTabsValue: 'prescribeOriginPanel',
      fromInvOptions: [],
      //界面配置相关
      //患者处方
      loading: false,
      placeholder: '请点击输入框进行选择单据',
      tableHeader: [],
      queryList: [],
      tableObj: [],
      fromList: [],
      convertDateFun: convertDate,
      //界面配置-------------end

      showSearch: true,
      filterQuery: {
        billNo: null,
        page: 1,
        limit: 10,
      },
      list: [],
      total: 0,
      defaultSort: {prop: 'createTime', order: 'desc'},
      formDataVisible: {
        scanType: null,
        unitTittle: "往来单位",
        corpType: 3,
      },
      curWorkPlaces: [],
      erpList: [],
      formData: {
        billNo: null,
        tagStatus: -1,
        invCode: null,
        busType: null,
        workPlaceCode: null,
        fromCorp: null,
        confirmFinish: false,
      },
      selectPrescriptionVisible: false,
      corpOrderIdDisabled: false,
      isLinkDisabled: false,
      selectBusTypeDisabled: false,
      userInfo: {
        inv: this.$store.getters.locInvName,
        deptName: this.$store.getters.locDeptName,
        userName: this.$store.getters.name,
        companyName: this.$store.getters.companyName,
      },
      curRow: null,
      panelALive: false,
      autoFinishOrderFlag: true,//是否对完成的单据提示立即提交

      //扫码相关
      scanCode: "",
      isSuccess: false,
      checked: true,
      scanTitle: "扫码结果:",
      result: "  \n",
      msgTip: "信息提醒：",
      originCode: "",
      checkSuccess: false,
      scanResultType: "success",
      isSelectOrder: false,
      isFinishOrder: true,
      busQuery: {
        busKey: '',
        workplaceCode: null,
        page: 1,
        limit: 100
      },
      busTypeList: [],
      busTypeTotal: 0,

      invList: [],
      viewType: 1,
      scanDisabled: false,
      valiCodes: [],
      warnResult: "",
      errResult: "",
      warnVisible: false,
      errVisible: false,
      workplaceId: null,
      ws: null,
      scanTip: "扫码录入:",
      scanSplit: false,
      //
      labels: {
        1: '扫码录入:',
        2: '扫码剔除:'
      },
      labelName: 1,
      scanStatus: null, // 1:扫码剔除; null 处理单据
    }
  },

  components: {
    addOrder,
    errOrder,
    selectPrescribeDialog,
    prescribeCodePanel,
    PanelOrderManuTagCode, prescribeOriginPanel,
    PannelOrderBiz,
    PanelOrderAllDetail
  },
  watch: {
    resetKey(newVal, oldVal) {
      this.$refs.inputRef.focus()
    }
  },
  methods: {
    generateBarcode() {
      const barcodeData = this.formData.billNo;
      // 获取条形码容器
      const barcodeContainer = this.$refs.barcodeContainer;
      // 使用JsBarcode生成条形码
      JsBarcode(barcodeContainer, barcodeData, {
        format: 'CODE128',
        displayValue: true,
        fontSize: 8, // 减小字体大小
        textColor: '#000',
        lineColor: '#000',
        width: 1.2, // 减小条形码宽度
        height: 15, // 减小条形码高度
        margin: 1 // 减小外边距
      });

    },
    getBillNo(billNo) {
      let post = {
        billNo: billNo,
        workPlaceCode: this.workplaceId,
        page: 1,
        limit: 10,
      }
      findByBill(post).then(res => {
        if (res.code == 20000) {
          if (res.data.billNo != null) {
            this.formData = res.data
            this.generateBarcode()
            this.scanCode = "";
            this.formData.workPlaceCode = this.workplaceId
            this.checked = false
          }
        } else {
          this.checked = true
          this.formData.billNo = null
          this.$message.error(res.message)
        }
      })
    },
    selectBusType(val) {
      this.formData.busType = val
      this.selectBusTypeDisabled = false
      if (this.formData.workPlaceCode != null) {
        this.findCurOrder();
      }
    },
    getWorkBindBusTypes(workplaceId) {
      this.busQuery.workplaceCode = workplaceId
      getWorkBindBusTypes(this.busQuery).then(res => {
        if (res.code == 20000) {
          this.busTypeList = res.data.list
          this.busTypeTotal = res.data.total
          if (this.formData.billNo != null) {
            this.getBillNo(this.formData.billNo)
            this.startDeal();
          } else {
            if (this.busTypeList.length == 1 && this.$route.query.busType == null) {
              this.formDataVisible = this.busTypeList[0]
              this.formData.busType = this.busTypeList[0].documentTypeCode
              this.selectBusTypeDisabled = false
              if (this.formDataVisible.scanType == 1) {
                this.findFromInvList("");
                this.getInvList();
                this.placeholder = '请点击输入框进行扫码生成业务单据';
              } else {
                this.findCurOrder();
              }

            } else {
              console.log(this.$route.query.busType)
              if (this.$route.query.busType != null) {
                this.formData.busType = this.$route.query.busType
                this.$refs.inputRef.focus();
                this.formDataVisible = this.busTypeList.find(item => item.documentTypeCode == this.formData.busType);

                if (this.formDataVisible.scanType == 1) {
                  this.findFromInvList("");
                  this.getInvList();
                  this.placeholder = '请点击输入框进行扫码生成业务单据';
                } else {
                  this.findCurOrder();
                }
              }

            }

          }

        }
        return
      })
    },
    findFromInvList(val) {
      let cQuery = {
        corpType: this.formDataVisible.consignee,
        invCode: this.formData.invCode
      };
      findFromCorp(cQuery)
        .then((response) => {
          if (!isBlank(this.$route.query.busType) && this.formDataVisible.consignee == 2) {
            this.invList = response.data || [];
          } else {
            this.fromInvOptions = response.data || [];
          }
        })
        .catch(() => {
        });
    },
    workPlaceCodeChange(value) {
      this.getWorkBindBusTypes(value)
      return
    },

    busTypeChange(value) {
      let busType = this.busTypeList.find(item => item.documentTypeCode === value);
      this.formData.busType = busType.documentTypeCode
      this.selectBusTypeDisabled = false
      this.formDataVisible = busType
      if (this.formDataVisible.scanType == 1) {
        this.findFromInvList("");
      }
      this.findCurOrder();
    },

    handleClick(blankName) {
      // let url = window.location.origin+`#/tagCodeBlank?workplaceId=`+ this.stationList[index].workplaceId
      let url = window.location.origin + `#/` + blankName + `?workplaceId=` + this.workplaceId
      // this.$router.push( workplaceId)
      window.open(url, '_blank');
    },
    handleClickOut(blankName) {
      // let url = window.location.origin+`#/tagCodeBlank?workplaceId=`+ this.stationList[index].workplaceId
      let url = window.location.origin + `#/` + blankName + `?splitType=out&workplaceId=` + this.workplaceId
      // this.$router.push( workplaceId)
      window.open(url, '_blank');
    },
    handleClickReturn(blankName) {
      // let url = window.location.origin+`#/tagCodeBlank?workplaceId=`+ this.stationList[index].workplaceId
      let url = window.location.origin + `#/` + blankName + `?splitType=return&workplaceId=` + this.workplaceId
      // this.$router.push( workplaceId)
      window.open(url, '_blank');
    },
    //获取当前货位
    findCurWorkPlaces(val) {
      let query = {
        key: val,
        status: 1,
        // invCode: this.formData.invCode,
        page: 1,
        limit: 100,
      }
      listPage(query).then((res) => {
        this.curWorkPlaces = res.data.list || [];
        if (this.curWorkPlaces.length == 1 && this.formData.workPlaceCode == null) {
          this.formData.workPlaceCode = this.curWorkPlaces[0].workplaceId;
          this.workPlaceCodeChange(this.formData.workPlaceCode);
        }
      })
    },
    //界面配置相关------------
    executeFuc(row, type, clickFuc, value) {
      return executeFuc(this, row, type, clickFuc, value);
    },
    executeEval(row, expression, defaultRet) {
      if (expression) {
        return eval(expression);
      }
      return defaultRet;
    },
    ///界面配置相关------------end


    hideSearch() {
      this.showSearch = !this.showSearch;
    },

    refreshCodesPanel(_this) {
      _this.panelALive = false;
      _this.$nextTick(() => {
        _this.panelALive = true;
      });
      _this.getBizDetailList();
      _this.vailOrderFinish();
    },
    refreshCodesPanelBank(_this) {
      _this.panelALive = false;
      _this.$nextTick(() => {
        _this.panelALive = true;
      });
      // _this.getBizDetailList();
      _this.vailOrderFinish();
    },
    refreshCodesPanelP() {
      let _this = this
      _this.panelALive = false;
      _this.$nextTick(() => {
        _this.panelALive = true;
      });
      _this.vailOrderFinish();
    },

    getInputFocus(event) {
      event.currentTarget.select();
    },
    getBizDetailList() {
      let preQuery = {}
      if (this.formData == null)
        return
      if (this.formData != null) {
        preQuery = {
          orderIdFk: this.formData.billNo
        };
      }
      orderDetail(preQuery).then(res => {
        if (res.code != 20000) {
          this.$message.error(res.message)
          return
        }
        this.splitBizList = res.data.list
        let tip = "";
        this.splitBizList.forEach((item) => {
          if (item.splitUnCheck) {
            tip = tip + item.cpmctymc + ","
          }
        });
        if (this.$isNotBlank(tip)) {
          tip = "请扫码确认以下产品" + tip + "需拆零的追溯码！"
          // this.$alert(tip, "提示", {
          //   confirmButtonText: "确定",
          //   type: "warning",
          //   closeOnClickModal: true,
          //   callback: (action) => {
          //   },
          // });

          this.warnVisible = true;
          this.warnResult = tip;
          this.scanTip = "拆零确认:"
          this.$refs.inputRef.focus();
          this.$refs.inputRef.select();
          this.scanSplit = true
          return;
        } else {
          //没有需要确认的
          this.scanSplit = false
          this.overdeleteCode();
        }


      }).catch(() => {
        this.$message.error("数据加载失败")
      })
    },

    enterKey() {

      if (this.scanCode.includes("DMOENTER")) {
        if (this.formData.billNo == null) {
          this.$message.error('请先选择单据')
        }else {
          this.confirmFinishOrder()
        }
        this.scanCode = ''
        return
      }else if (this.scanCode.includes("DMOCANCEL")) {
        if (this.formData.billNo == null) {
          this.$message.error('请先选择单据')
        }else {
          this.cancelOrder()
        }
        this.scanCode = ''
        return
      }else if (this.scanCode.includes("DMODEL")) {
        if (this.formData.billNo == null) {
          this.$message.error('请先选择单据')
        }else {
          this.deleteCode()
        }
        this.scanCode = ''
        return
      }

      if (this.formData.billNo == null && this.formDataVisible.scanType != 1) {
        this.enterBillNoKey()
        return;
      }


      this.checkSuccess = true;
      this.filterQuery.code = this.scanCode.trim();
      if (this.filterQuery.code.includes(";")) {
        const codeArray = this.filterQuery.code.split(";");
        let params = {
          codeList: codeArray,
        };
        this.batchVailCode(params)
        return;
      }
      if (this.filterQuery.code)
        if (!this.parseString(this.filterQuery.code)) {
          this.$refs.inputRef.focus();
          this.$refs.inputRef.select();
          this.$message.error("无效追溯码");
          return;
        }
      let tQuery = {
        viewType: "tagCode",
        workPlaceCode: this.workplaceId,
        originCode: this.originCode,
        busType: this.formData.busType,
        code: this.filterQuery.code.trim(),
      };
      if (this.scanStatus == 1) {
        const codeArray = this.filterQuery.code.split(";");
        let query = {
          orderId: this.formData.billNo,
          codeList: codeArray
        }
        //剔除码
        this.removeCodesTemp(query)
      } else if (this.scanSplit) {

        //todo   拆零扫码确认
        const codeArray = this.filterQuery.code.split(";");
        let query = {
          billNo: this.formData.billNo,
          codeList: codeArray
        }
        //更新扫码确认
        batchUpdateCode(query).then((response) => {
          this.saveLoading = false
          if (response.code === 20000) {
            this.$message.success('确认成功')
            this.result = ''
            this.$refs.inputRef.focus()
            this.$refs.inputRef.select()
            this.getBizDetailList();
          } else {
            this.$message.error(response.message)
          }
          this.loading = false
          this.saveLoading = false
        })


      } else {
        enterCodeWeb(tQuery).then((response) => {
          if (response.code === 20000) {
            this.$refs.inputRef.focus();
            this.$refs.inputRef.select();
            this.isSuccess = true;
            this.printCodeResult(response.data, response.message)
            this.filterQuery.code = response.data.code;
            this.scanCode = ""
            this.originCode = ""
            this.addCode();
          } else {
            if (response.code == 502) {
              this.checkSuccess = false;
              this.isSuccess = false;
              this.printCodeResult(response.data, response.message)
              this.filterQuery.code = response.data.code;
              this.originCode = response.data.code;
            } else if (response.code == 501) {
              this.checkSuccess = false;
              this.$message.error(response.message);
              this.scanCode = ""
            } else if (response.code == 503) {
              this.checkSuccess = false;
              this.isSuccess = false;
              this.printCodeResult(response.data, response.message)
              this.filterQuery.code = response.data.code;
              this.scanCode = ""
              this.$confirm(response.message, "提示", {
                type: "warning",
              })
                .then(() => {
                  this.filterQuery.code = response.data.code;
                  this.addCode();
                })
                .catch(() => {
                  this.filterQuery.code = response.data.code;
                });
            } else if (response.code == 508) {
              this.originCode = "";
              this.filterQuery.code = "01" + response.data.nameCode;
              this.originCode = this.filterQuery.code;
            } else if (response.code == 601) {
              this.formData.billNo = response.data.billNo
              this.placeholder = "已选入单据，请扫UDI码进行作业"
              this.getBillNo(this.formData.billNo)
              this.startDeal();

            } else {
              this.scanCode = ""
              this.$alert(response.message, "提示", {
                confirmButtonText: "确定",
                type: "warning",
                closeOnClickModal: true,
                callback: (action) => {
                  this.$refs.inputRef.focus();
                  this.$refs.inputRef.select();
                },
              });
            }
          }
          this.loading = false;
        });
      }

    },

    enterBillNoKey(billNo) {
      this.checkSuccess = true;
      this.filterQuery.code = this.scanCode;
      let tQuery = {
        viewType: "tagCode",
        workPlaceCode: this.workplaceId,
        originCode: this.originCode,
        busType: this.formData.busType,
        code: this.filterQuery.code.trim(),
      };
      if (billNo != null) {
        tQuery.code = billNo
      }
      enterCodeBillNo(tQuery).then((response) => {
        if (response.code === 20000) {
          this.$refs.inputRef.focus();
          this.$refs.inputRef.select();
          this.isSuccess = true;
          this.printCodeResult(response.data, response.message)
          this.filterQuery.code = response.data.code;
          this.scanCode = ""
          this.originCode = ""
          this.addCode();
        } else {
          if (response.code == 502) {
            this.checkSuccess = false;
            this.isSuccess = false;
            this.printCodeResult(response.data, response.message)
            this.filterQuery.code = response.data.code;
            this.originCode = response.data.code;
            this.scanCode = ""
          } else if (response.code == 501) {
            this.checkSuccess = false;
            this.$message.error(response.message);
            this.scanCode = ""
          } else if (response.code == 503) {
            this.checkSuccess = false;
            this.isSuccess = false;
            this.printCodeResult(response.data, response.message)
            this.filterQuery.code = response.data.code;
            this.scanCode = ""
            this.$confirm(response.message, "提示", {
              type: "warning",
            })
              .then(() => {
                this.filterQuery.code = response.data.code;
                this.addCode();
              })
              .catch(() => {
                this.filterQuery.code = response.data.code;
              });
          } else if (response.code == 508) {
            this.originCode = "";
            this.filterQuery.code = "01" + response.data.nameCode;
            this.originCode = this.filterQuery.code;
          } else if (response.code == 601) {
            this.placeholder = "已选入单据，请扫UDI码进行作业"
            this.formData.billNo = response.data.billNo
            this.getBillNo(this.formData.billNo)
            this.startDeal();

          } else {
            this.scanCode = ""
            this.$alert(response.message, "提示", {
              confirmButtonText: "确定",
              type: "warning",
              closeOnClickModal: true,
              callback: (action) => {
                this.$refs.inputRef.focus();
                this.$refs.inputRef.select();
              },
            });
          }
        }
        this.loading = false;
      });
    },

    addCode(code) {
      if (this.$isNotBlank(code)) {
        this.filterQuery.code = code;
      }
      if (this.$isBlank(this.filterQuery.code)) {
        this.filterQuery.code = this.scanCode.trim();
      }
      if (this.$isBlank(this.filterQuery.code) && this.$isBlank(this.scanCode)) {
        return;
      }
      let tagQuery = {
        workPlaceCode: this.formData.workPlaceCode,
        fromCorp: this.formData.fromCorp,
        fromCorpName: this.formData.fromCorpName,
        shipper: this.formData.shipper,
        shipperName: this.formData.shipperName,
        billNo: this.formData.billNo,
        code: this.filterQuery.code.trim(),
        insert: this.formData.insert,
        busType: this.formData.busType,
      };
      tagCode(tagQuery).then(res => {
        this.loading = false
        if (res.code == 20000) {
          this.formData.tagStatus = 2;
          this.formData.insert = false;
          this.formData = res.data;
          this.curRow = this.formData;
          this.$refs.inputRef.focus();
          this.refreshCodesPanel(this);
        } else {
          if (res.code == 502) {
            this.$confirm(res.message + '是否强制添加?', '提示', {
              confirmButtonText: '确定',
              cancelButtonText: '取消',
              type: 'warning'
            }).then(() => {
              this.formData.insert = true;
              this.addCode();
            }).catch(() => {
            });
          } else {
            this.$refs.inputRef.focus();
            this.$message.error(res.message)
          }

        }
      }).catch(() => {
        this.loading = false
      })
    },

    saveDraftOrder() {
      this.$confirm('此操作将挂起当前正在处理单据，是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        draftOrder(this.formData).then(res => {
          this.loading = false
          if (res.code == 20000) {
            if (this.scanStatus == 1) {
              this.overdeleteCode()
            }
            this.reset()
          }
        }).catch(() => {
          this.loading = false
        })
      }).catch(() => {
      });
    },

    cancelOrder() {
      this.$confirm('此操作将取消当前正在处理单据，是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        cancelOrder(this.formData).then(res => {
          this.loading = false
          if (res.code == 20000) {
            this.overdeleteCode()
            this.reset()
          }
        }).catch(() => {
          this.loading = false
        })
      }).catch(() => {
      });
    },

    confirmFinishOrder() {
      this.$confirm('是否确定完成此单据?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.finishOrder()
      }).catch(() => {
      });
    },

    finishOrder() {
      finishOrder(this.formData).then(res => {
        this.loading = false
        if (res.code == 20000) {
          this.reset()
          if (this.formDataVisible.scanType != 1)
            this.findCurOrder()
        } else if (res.code == 502) {
          this.$confirm(res.message, '提示', {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            type: 'warning'
          }).then(() => {
            this.formData.confirmFinish = true;
            this.finishOrder();
          }).catch(() => {
          });
        } else if (res.code == 503) {
          this.$alert('该单据未全部赋码无法完成,请检查后重试', '提示', {
            confirmButtonText: '确定',
            callback: action => {
            }
          });
        } else {
          this.$message.error(res.message)
        }
      }).catch(() => {
        this.loading = false
      })
    },

    updateOrder() {
      this.formData.workPlaceCode = this.workplaceId;
      updateOrder(this.formData).then(res => {
        this.loading = false
      }).catch(() => {
        this.loading = false
      })

    },

    //选择单据
    selectPrescribe() {
      // console.log(this.formData.workPlaceCode)
      if (this.$route.query.busType != null) {
        this.formData.busType = this.$route.query.busType
      }
      this.selectPrescriptionVisible = true;
    },

    //获取下一单据
    nextCollectOrder() {
      let nextQuery = {
        busType: this.formData.busType
      }
      getNextOrder(nextQuery).then(res => {
        this.loading = false
        if (res.code == 20000) {
          this.formData = res.data;

          this.startDeal();
        } else {
          this.$message.error(res.message)
        }
      }).catch(() => {
        this.loading = false
      })
    },

    findCurOrder() {
      let nextQuery = {
        // workPlaceCode: this.formData.workPlaceCode,
        busType: this.formData.busType
      }
      getCurOrder(nextQuery).then(res => {
        this.loading = false
        if (res.code == 20000) {
          let temp = res.data;
          if (temp.tagStatus === -1) {
            this.$confirm('检测到当前工位存在挂起单据，是否继续上一次单据处理?', '提示', {
              confirmButtonText: '确定',
              cancelButtonText: '取消',
              type: 'warning'
            }).then(() => {
              this.formData = temp;
              this.startDeal();
            }).catch(() => {
            });
          } else if (temp.tagStatus === 2 || temp.tagStatus === 1) {

            this.formData = temp;
            this.panelALive = true
            this.startDeal();
            // this.$confirm('检测到当前工位存在正在处理单据，是否继续上一次单据处理?', '提示', {
            //   confirmButtonText: '确定',
            //   cancelButtonText: '取消',
            //   type: 'warning'
            // }).then(() => {
            //
            // }).catch(() => {
            // });
          }


        } else {
          // this.$message.error(res.message)
          this.$refs.inputRef.focus();
        }
      }).catch(() => {
        this.loading = false
      })
    },

    closeDialog() {
      this.selectPrescriptionVisible = false;
    },

    confirmSelect(row) {
      this.formData = row;
      this.formData.workPlaceCode = this.workplaceId;
      this.startDeal();
      this.generateBarcode()
    },

    startDeal() {
      this.autoFinishOrderFlag = true
      this.curRow = this.formData;
      this.dealSplitOrder()
      //处理哪个活动的明细子组件
      // this.selectTabsname(this.formData.busType);
      this.formData.tagStatus = 2;
      this.updateOrder();
      // this.refreshCodesPanel(this);
      this.$refs.inputRef.focus();
    },

    selectTabsname(value) {
      if (this.$isBlank(this.filterQuery.code) && this.busTypeList.length > 0) {
        let busType = this.busTypeList.find(item => item.documentTypeCode === value);
        let autoTag = busType.autoTag;
        if (autoTag == 1) {
          this.editableTabsValue = this.tabsName[1]
        }
      }
    },
    //开始拆零
    dealSplitOrder() {
      this.formData.workPlaceCode = this.workplaceId;
      startSplit(this.formData).then(res => {
        this.loading = false
        if (res.code == 20000) {
          this.selectPrescriptionVisible = false;
          this.refreshCodesPanel(this);
        } else if (res.code == 501) {

          this.$refs.childRef.getList();
          this.$refs.childRef.getDraftList();
          this.$refs.childRef.getOtherList();
          this.$message.warning(res.message)
          this.refreshCodesPanel(this);
        }
      }).catch(() => {
        this.loading = false
      })
    },


    printCodeResult(data, message) {
      const resultParts = [];
      if (data.udi) {
        resultParts.push("层级标识: " + data.udi);
      }
      if (data.cpmctymc) {
        resultParts.push(data.productType == 2 ? "药品通用名称" : "产品通用名称: " + data.cpmctymc);
      }
      if (data.batchNo) {
        resultParts.push("批次号: " + data.batchNo);
      }
      if (data.produceDate) {
        resultParts.push("生产日期: " + data.produceDate);
      }
      if (data.expireDate) {
        resultParts.push("失效日期: " + data.expireDate);
      }
      if (data.serialNo) {
        resultParts.push("序列号: " + data.serialNo);
      }
      if (data.productType == 2) {
        if (data.bzgg) {
          resultParts.push("包装规格: " + data.bzgg);
        }
      } else {
        if (data.ggxh) {
          resultParts.push("规格型号: " + data.ggxh);
        }
      }
      if (data.prepnSpec) {
        resultParts.push("制剂规格: " + data.prepnSpec);
      }
      if (data.prepnUnit) {
        resultParts.push("剂型: " + data.prepnUnit);
      }
      if (data.packUnit) {
        resultParts.push("计量单位: " + data.packUnit);
      }

      this.scanTitle = "扫码结果：" + data.code;
      this.result = resultParts.join(" , ");
      if (message == 'success') {
        this.scanResultType = "success";
      } else {
        this.scanResultType = "warning";
        this.result = this.result + "\n" + message;
      }
    },

    popupTip(data) {
      this.$confirm(data.errMsg, '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.formData.insert = true
        this.addCode(data.code);
      }).catch(() => {
      });
    },


    vailOrderFinish() {
      if (!this.autoFinishOrderFlag) {
        return
      }

      if (this.formDataVisible.scanType == 1)
        return;

      vailOrderFinish(this.formData).then(res => {
        this.loading = false
        if (res.code == 20000) {
          if (res.data) {
            this.$confirm("单据已赋码或可自动赋码，是否立即完成单据？", '提示', {
              confirmButtonText: '立即提交',
              cancelButtonText: '手动扫码',
              type: 'warning'
            }).then(() => {
              this.finishOrder();
            }).catch(() => {
              this.autoFinishOrderFlag = false
            });
          }
        } else {

        }
      }).catch(() => {
        this.loading = false
      })
    },


    async printMutiCodeResult(vailCodeResultResponses) {
      this.warnResult = "";
      this.errResult = "";
      this.result = "";
      this.warnVisible = false;
      this.errVisible = false;
      for (let i = 0; i < vailCodeResultResponses.length; i++) {
        let data = vailCodeResultResponses[i]
        if (data.status == 1)
          this.result = this.result + ";" + vailCodeResultResponses[i].code;
        else if (data.status == 2) {
          this.warnResult = this.warnResult + "\n" + vailCodeResultResponses[i].code + ":" + vailCodeResultResponses[i].errMsg;
        } else if (data.status == 3) {
          this.result = this.result + "\n" + vailCodeResultResponses[i].code;
          // this.warnResult = this.warnResult + "\n" + vailCodeResultResponses[i].code + ":" + vailCodeResultResponses[i].errMsg;
          await this.popupTip(data)
        }
        // else
        //   this.errResult = this.errResult + "\n" + vailCodeResultResponses[i].code + ":" + vailCodeResultResponses[i].errMsg;
      }
      if (!isBlank(this.warnResult))
        this.warnVisible = true;
      if (!isBlank(this.errResult))
        this.errVisible = true;
    },
    handleCommand(command) {
      // this.$message('click on item ' + command);
    },
    clearCode() {
      // this.originCode = "";
      // this.formData.code = "";
      // this.formData.billNo = null;
      // this.formData.shipper = null;
      // this.formData.fromCorp = null;
      this.scanCode = "";
      // this.scanTitle = "扫码结果：";
      // this.result = "";
      // this.warnResult = ""
      // this.errResult = ""
      // this.warnVisible = false
      // this.errVisible = false
    },

    /**
     * 重置
     */
    resetWork() {
      this.formData = {
        tagStatus: -1,
        workPlaceCode: this.formData.workPlaceCode,
        busType: this.formData.busType
      };
      this.curRow = null
      this.formData.confirmFinish = false;
      this.refreshCodesPanel(this)
      this.clearCode()
      this.$refs.inputRef.focus();
      this.$refs.inputRef.select();
    },
    reset() {
      this.formData = {
        billNo: null,
        tagStatus: -1,
        workPlaceCode: this.formData.workPlaceCode,
        busType: this.formData.busType,
        shipper: null,
        fromCorp: null,
      };
      this.curRow = null
      this.formData.confirmFinish = false;
      this.refreshCodesPanelBank(this)
      this.clearCode()
      this.$refs.inputRef.focus();
      this.$refs.inputRef.select();
    },
    toggleBusType() {
      //隐藏下拉框内容
      // this.$refs.selectHeadEmpId.blur();
      this.selectBusTypeDisabled = true
    },


    getInvList() {
      let query = {
        advanceType: 1,
      }
      getInvListByUser(query)
        .then((response) => {
          if (!isBlank(this.$route.query.busType) && this.formDataVisible.consignee == 2) {
            this.fromInvOptions = response.data || [];
          } else {
            this.invList = response.data || []
          }
        })
        .catch(() => {
        })
    },
    changeCorp() {
      let corp = this.fromInvOptions.find(item => item.code === this.formData.fromCorp);
      this.formData.fromCorpName = corp.name
    },
    changeShipper() {
      let corp = this.invList.find(item => item.code === this.formData.shipper);
      this.formData.shipperName = corp.name
      this.formData.shipper = corp.code
    },
    //处理事件
    handleRecCodesEvent(event) {
      console.log('接收 recCodes event:', event.detail.recCodes);
      let params = {
        codeList: event.detail.recCodes,
      };
      if (this.formData.billNo == null) {
        this.$message.error("请先选入单据！");
        return
      }
      this.batchVailCode(params)

    },


    batchVailCode(params) {
      if (this.scanStatus == 1) {
        //剔除
        const codeArray = this.filterQuery.code.split(';')
        // const codeArray = this.codeFormData.code.split(';')
        let query = {
          orderId: this.formData.billNo,
          codeList: codeArray
        }
        //剔除码
        this.removeCodesTemp(query)
      } else {
        batchVailCode(params).then((res) => {
          if (res.code === 20000) {
            this.valiCodes = [];
            let list = res.data;
            list.forEach(item => {
              if (item.status === 1) {
                this.valiCodes.push(item.code);
              }
            });
            this.$refs.inputRef.focus();
            this.$refs.inputRef.select();
            this.printMutiCodeResult(list)
            if (this.valiCodes != null && this.valiCodes.length > 0) {
              //批量添加
              let params2 = {
                workPlaceCode: this.formData.workPlaceCode,
                codeList: this.valiCodes,
                fromCorp: this.formData.fromCorp,
                billNo: this.formData.billNo,
                insert: this.formData.insert,
                busType: this.formData.busType,
                fromCorpName: this.formData.fromCorpName,
                invCode: this.formData.invCode,
              }
              orderbatchAddCode(params2).then((res) => {
                if (res.code === 20000) {
                  this.formData.tagStatus = 2;
                  this.formData.insert = false;
                  this.curRow = this.formData;
                  this.$refs.inputRef.focus();
                  this.refreshCodesPanel(this);
                  this.printMutiCodeResult(res.data.vailCodeResultResponses)
                } else {
                  this.$message.error(res.message)
                }
              });
              // this.scanCode = this.valiCodes.join(";");
            }

          } else {
            this.$message.error(res.message)
          }
        });
      }

    },
    removeCodesTemp(query) {
      removeByScanCode(query).then(res => {
        if (res.code == 20000) {
          this.$message.success('剔除成功')
          this.scanCode = ''
          this.panelALive = false
          this.$nextTick(() => {
            this.panelALive = true
          })
          this.result = ''
        } else if (res.code == 501) {

        } else {
          this.result = ''
          this.scanCode = ''
          this.$message.error(res.message)
        }
      })
    },
    //扫码校验
    addGs() {
      const input = this.$refs.inputRef.$refs.input;
      const textToInsert = "\u001D";
      const start = input.selectionStart;
      const end = input.selectionEnd;
      this.scanCode = this.scanCode.slice(0, start) + textToInsert + this.scanCode.slice(end);
      this.$nextTick(() => {
        this.focus = true;
        input.selectionStart = input.selectionEnd = start + textToInsert.length;
        this.$refs.inputRef.focus();
      });
    },

    handleScanComplete(fullScanData) {
      console.log("Scan complete:", fullScanData.join(";"));
      if (this.formData.billNo == null && this.formDataVisible.scanType != 1) {
        this.enterBillNoKey(fullScanData[0])
        return;
      }
      let params = {
        codeList: fullScanData,
      };
      if (this.formData.billNo == null) {
        this.$message.error("请先选入单据！");
        return
      }
      this.batchVailCode(params)
      // 在这里处理完整的扫码数据，如提交到后台或显示
    },

    parseString(str) {
      // 1. 判断是否以 "MA" 开头
      if (str.startsWith("MA")) {
        return true;
      }

      // 2. 判断是否以 "01" 开头且长度大于等于 18
      if (str.startsWith("01") && str.length >= 16) {
        return true;
      }

      // 3. 判断是否以 "#" 开头且 "#" 的个数大于等于 4
      if (str.startsWith("#") && (str.match(/#/g) || []).length >= 4) {
        return true;
      }

      // 4. 判断是否以 "8" 开头且长度为 20 位
      if (str.startsWith("8") && str.length === 20) {
        return true;
      }

      // 5. 判断是否以 "11", "17", "21", 或 "10" 开头
      const prefixes = ["11", "17", "21", "10"];
      if (prefixes.some(prefix => str.startsWith(prefix))) {
        return true;
      }
      // 如果没有任何条件满足，返回 false
      return false;
    },
    socketListener() {
      let lastScanTime = Date.now();
      let scanBuffer = [];
      let scanTimeout = null;
      const SCAN_TIMEOUT = 1000; // 1秒间隔，表示扫码结束的判定标准
      const self = this;
      console.log("启用监听")
      this.ws.onmessage = function (event) {
        let scanData = event.data; // 获取扫码数据
        let currentTime = Date.now();
        console.log(scanData)
        // 如果时间间隔超过预设的阈值，表示这是一次新的扫码
        if (currentTime - lastScanTime > SCAN_TIMEOUT) {
          // 处理上一次完整的扫码数据
          if (scanBuffer.length > 0) {
            self.handleScanComplete(scanBuffer);
          }
          // 清空缓冲区，开始新的扫码
          scanBuffer = [];
        }
        // 重置上一次扫码的时间
        lastScanTime = currentTime;
        // 将数据添加到缓冲区
        scanBuffer.push(scanData);

        // 如果已经有一个定时器在等待，可以清除它
        if (scanTimeout) {
          clearTimeout(scanTimeout);
        }
        // 设置新的定时器，等待指定的时间后执行扫码结束处理
        scanTimeout = setTimeout(() => {
          // 定时器到时，处理扫码结束
          self.handleScanComplete(scanBuffer);
          scanBuffer = [];
        }, SCAN_TIMEOUT);
      };
    },
    handleVisibilityChange() {
      if (document.visibilityState === 'visible') {
        console.log('用户切回到了处理页面');
        if (this.ws == null || this.ws.readyState === WebSocket.CLOSED) {
          this.ws = new WebSocket("ws://127.0.0.1:9988");
          const self = this;
          this.ws.onopen = function (evt) {
            console.log("处理单据WebSocket 连接中 ...");
            self.socketListener()
          };

        }
      } else {
        if (this.ws && this.ws.readyState === WebSocket.OPEN) {
          this.ws.close();
          console.log("关闭处理单据websocket成功")
        }
      }
    },

    //扫码剔除操作
    deleteCode() {
      this.scanTip = "扫码剔除:"
      this.labelName = 2
      this.placeholder = "请点击输入框进行扫码剔除"
      this.scanStatus = 1
      this.scanCode = ''
      if (!isBlank(this.warnResult)) {
        this.warnResult = ""
      }
    },
    overdeleteCode() {
      this.warnVisible = false
      this.warnResult = "";
      this.labelName = 1
      this.scanStatus = null
      this.scanTip = "扫码录入:"
      this.placeholder = '请点击输入框进行选扫码'
    },
  },
  mounted() {
    this.$refs.inputRef.focus();
    //环境判断
    if (window.navigator.userAgent.indexOf("GLXP_PC") != -1) {
      this.scanDisabled = true;
      window.removeEventListener('djcl', this.handleRecCodesEvent);
      window.addEventListener('djcl', this.handleRecCodesEvent);
    }
    document.addEventListener('visibilitychange', this.handleVisibilityChange);
    // window.addEventListener('storage', (event) => {
    //   if (document.visibilityState == 'hidden') {
    //     console.log("关闭处理单据websocket")
    //     if (this.ws && this.ws.readyState === WebSocket.OPEN) {
    //       this.ws.close();
    //       console.log("关闭处理单据websocket成功")
    //     }
    //   } else {
    //     if (!this.ws) {
    //       this.ws = new WebSocket("ws://127.0.0.1:9988");
    //       this.ws.onopen = function (evt) {
    //         console.log("处理单据WebSocket 连接中 ...");
    //       };
    //       this.socketListener()
    //     }
    //   }
    // });

  },


  beforeDestroy() {
    window.removeEventListener('djcl', this.handleRecCodesEvent);
    document.removeEventListener('visibilitychange', this.handleVisibilityChange);

    this.ws.close();
    this.ws.onclose = function (evt) {
      console.log("处理单据 Connection closed.");
    };
  },
  created() {
    getHead("prescribeTagCodeDeal", "1").then((re) => {
      // 处理返回的数据
      this.tableObj = re.data;
      this.tableHeader = re.data.tableList;
      this.queryList = re.data.queryList;
      this.fromList = re.data.fromList;
    });
    this.findCurWorkPlaces();

    this.formData.invCode = this.$store.getters.locInvCode;
    if (this.$route.query.billNo != null) {
      this.formData.billNo = this.$route.query.billNo
    }
    if (this.$route.query.workplaceId != null) {
      this.isLinkDisabled = true
      if (this.$route.query.billNo == null) {
        // this.selectBusTypeDisabled = true
      }
      this.corpOrderIdDisabled = true
      this.workplaceId = Number(this.$route.query.workplaceId);
      this.formData.workPlaceCode = Number(this.$route.query.workplaceId);
      this.getWorkBindBusTypes(this.formData.workPlaceCode);
    }
  }

}
</script>

<style scoped>
.el-col {
  margin-top: -5px;
  margin-bottom: -5px;
}

.el-dropdown {
  vertical-align: top;
}

.el-dropdown + .el-dropdown {
  margin-left: 15px;
}

.el-icon-arrow-down {
  font-size: 12px;
}

.custom-descriptions {
  position: relative; /* 设置相对定位，为绝对定位的边框线提供参考 */
}


.barcode-wrapper {
  display: flex;
  flex-direction: column;
  align-items: center; /* 水平居中 */
  justify-content: center; /* 垂直居中 */
}
.custom-descriptions .el-descriptions__cell svg {
  vertical-align: middle;
  margin-left: 20px;
  margin-right: 10px;
}
</style>
