qx
qx
8 天以前 12933fc6115f3fab514b64d9324beadb115c0f58
src/views/reservation/reservations/index.vue
@@ -1,54 +1,150 @@
<template>
  <div class="app-container">
    <el-dialog :title="title" :visible.sync="open1" width="1000px" append-to-body>
      <el-form ref="form1" :model="form1" :rules="rules1" label-width="100px" :inline="true">
        <el-form-item label="单位名称" prop="cnName">
          <el-input v-model="form1.cnName" placeholder="请输入中文名称" />
        </el-form-item>
        <el-form-item label="联系人" prop="contactPerson">
          <el-input v-model="form1.contactPerson" placeholder="请输入联系人" />
        </el-form-item>
        <el-form-item label="联系电话" prop="contactPhone">
          <el-input v-model="form1.contactPhone" placeholder="请输入联系电话" />
        </el-form-item>
        <el-form-item label="税号" prop="taxNumber">
          <el-input v-model="form1.taxNumber" placeholder="请输入税号" />
        </el-form-item>
        <el-form-item label="法人" prop="legalPerson">
          <el-input v-model="form1.legalPerson" placeholder="请输入法人" />
        </el-form-item>
        <el-form-item label="注册地址" prop="registerAddress">
          <el-input v-model="form1.registerAddress" placeholder="请输入注册地址" />
        </el-form-item>
        <el-form-item label="通讯地址" prop="mailingAddress">
          <el-input v-model="form1.mailingAddress" placeholder="请输入通讯地址" />
        </el-form-item>
        <el-form-item label="开户银行" prop="bankAccount">
          <el-input v-model="form1.bankAccount" placeholder="请输入开户银行" />
        </el-form-item>
        <el-form-item label="银行账户" prop="countNum">
          <el-input v-model="form1.countNum" placeholder="请输入银行账户" />
        </el-form-item>
        <el-form-item label="邮箱" prop="email">
          <el-input v-model="form1.email" placeholder="请输入邮箱" />
        </el-form-item>
        <el-form-item label="负责人" prop="principal">
          <el-input v-model="form1.principal" placeholder="请输入负责人" />
        </el-form-item>
        <el-form-item label="网址" prop="url">
          <el-input v-model="form1.url" placeholder="请输入网址" />
        </el-form-item>
        <el-form-item label="传真" prop="faxNumber">
          <el-input v-model="form1.faxNumber" placeholder="请输入传真" />
        </el-form-item>
        <el-form-item label="行政区划名称" prop="areaName">
          <el-input v-model="form1.areaName" placeholder="请输入行政区划名称" />
        </el-form-item>
        <el-form-item label="排序" prop="orderNum">
          <el-input v-model="form1.orderNum" placeholder="请输入排序" />
        </el-form-item>
        <el-form-item label="有效时间" prop="validTime">
          <el-date-picker clearable v-model="form1.validTime" type="date" value-format="yyyy-MM-dd"
            placeholder="请选择有效时间">
          </el-date-picker> </el-form-item><br />
        <el-form-item label="备注" prop="remark">
          <el-input v-model="form1.remark" type="textarea" placeholder="请输入内容" :rows="2" label-width="400px"
            style="width: 830px" resize="none"></el-input>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer2">
        <el-button type="primary" @click="submitFormS">确 定</el-button>
        <el-button @click="cancel1">取 消</el-button>
      </div>
    </el-dialog>
    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
      <el-form-item label="姓名" prop="name">
        <el-input style="width: 120px" v-model="queryParams.name" placeholder="请输入姓名" clearable
          @keyup.enter.native="handleQuery" />
      </el-form-item>
      <el-form-item label="身份证号" prop="idCard">
        <el-input v-model="queryParams.idCard" placeholder="请输入身份证号" clearable @keyup.enter.native="handleQuery" />
      </el-form-item>
      <el-form-item label="联系电话" prop="phoe">
        <el-input v-model="queryParams.phoe" placeholder="请输入联系电话" clearable @keyup.enter.native="handleQuery"
          style="width: 140px" />
      </el-form-item>
      <el-form-item label="单位名称" prop="company">
        <el-select :remote-method="getRemoteData" v-model="queryParams.company" value-key="drugManufacturerId" remote
          filterable placeholder="请选择单位名称" clearable @change="searchSelect">
          <el-option v-for="dict in CompanyList" :key="dict.drugManufacturerId" :label="dict.cnName"
            :value="dict.cnName" />
        </el-select>
      </el-form-item>
      <el-form-item label="预约超期" prop="isExpire">
        <el-select v-model="queryParams.isExpire" placeholder="请选择是否超期" clearable style="width: 140px">
          <el-option v-for="dict in options" :key="dict.value" :label="dict.label" :value="dict.value" />
        </el-select>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
      </el-form-item>
      <el-row>
        <el-col>
          <el-form-item label="姓名" prop="name">
            <el-input style="width: 120px" v-model="queryParams.name" placeholder="请输入姓名" clearable
              @keyup.enter.native="handleQuery" />
          </el-form-item>
          <el-form-item label="身份证号" prop="idCard">
            <el-input v-model="queryParams.idCard" placeholder="请输入身份证号" clearable @keyup.enter.native="handleQuery" />
          </el-form-item>
          <el-form-item label="单位名称" prop="company">
            <el-select :remote-method="getRemoteData" v-model="queryParams.company" remote default-first-option
              allow-create filterable style="width: 200px" placeholder="请选择单位名称" clearable @change="idFn1">
              <el-option v-for="dict in CompanyList" :key="dict.cnName" :label="dict.cnName"
                :value="dict.drugManufacturerId" />
            </el-select>
            <i class="el-icon-circle-plus-outline" @click="handleAdd1"></i>
          </el-form-item>
          <el-form-item label="套餐名称" prop="dwDeptName">
            <el-select v-model="queryParams.dwDeptName" placeholder="请选择套餐名称" clearable style="width: 100%"
              @change="idFn2">
              <el-option v-for="dict in deptList" :key="dict.id" :label="dict.dwDeptName" :value="dict.id" />
            </el-select>
          </el-form-item>
          <el-form-item label="分组名称" prop="groupingName">
            <el-select v-model="queryParams.groupingName" placeholder="请选择分组名称" clearable style="width: 100%">
              <el-option v-for="dict in groupingList" :key="dict.id" :label="dict.pacName" :value="dict.id" />
            </el-select>
          </el-form-item>
        </el-col>
        <el-col>
          <el-form-item label="预约时间">
            <el-date-picker clearable v-model="createTimeList" @change="dateChangebirthday2" type="daterange"
              range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :picker-options="pickerOptions"
              value-format="yyyy-MM-dd" placeholder="请选择出预约时间" style="width: 300px">
            </el-date-picker>
          </el-form-item>
          <el-form-item label="联系电话" prop="phoe">
            <el-input v-model="queryParams.phoe" placeholder="请输入联系电话" clearable @keyup.enter.native="handleQuery"
              style="width: 140px" />
          </el-form-item>
          <el-form-item label="预约超期" prop="isExpire">
            <el-select v-model="queryParams.isExpire" placeholder="请选择是否超期" clearable style="width: 140px">
              <el-option v-for="dict in options" :key="dict.value" :label="dict.label" :value="dict.value" />
            </el-select>
          </el-form-item>
          <el-form-item>
            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>
    <el-row :gutter="10" class="mb8">
    <el-row :gutter="10" style="margin: 10px 15px">
      <el-col :span="1.5">
        <el-button type="primary" icon="el-icon-delete" size="mini" :disabled="multiple" @click="batch"
          v-hasPermi="['reservation:reservation:remove']">撤销预约</el-button>
        <el-button type="primary" icon="el-icon-delete" size="mini" :disabled="multiple" @click="batch">撤销预约</el-button>
        <!--  v-hasPermi="['reservation:reservation:remove']" -->
      </el-col>
      <el-col :span="1.5">
        <el-button type="primary" size="mini" :disabled="single" @click="receipt"
          v-hasPermi="['reservation:reservation:remove']">补打小票</el-button>
        <el-button type="primary" size="mini" :disabled="single" @click="receipt">补打小票</el-button>
        <!-- v-hasPermi="['reservation:reservation:remove']" -->
      </el-col>
      <el-col :span="1.5">
        <el-button type="primary" size="mini" :disabled="multiple" @click="Groupsignin">团体签到</el-button>
        <!-- v-hasPermi="['reservation:reservation:remove']" -->
      </el-col>
      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
    </el-row>
    <el-table border v-loading="loading" :data="reservationList" @selection-change="handleSelectionChange"
      :default-sort="{ prop: 'reservationTime', order: 'descending' }" highlight-current-row>
      :default-sort="{ prop: 'reservationTime', order: 'descending' }" highlight-current-row style="margin-left: 15px">
      <el-table-column type="selection" width="40px" align="center" fixed="left" :selectable="selectHandle" />
      <el-table-column label="姓名" align="center" prop="name" width="90px" :show-overflow-tooltip="true" fixed="left" />
      <el-table-column label="性别" align="center" prop="sex" width="60px" :show-overflow-tooltip="true">
        <template slot-scope="scope">
          <span v-if="scope.row.sex == '0'">男</span>
          <span v-if="scope.row.sex == '1'">女</span>
          <span v-if="scope.row.sex == '2'">未知</span>
        </template>
      </el-table-column>
      <el-table-column label="年龄" align="center" prop="age" width="60px" :show-overflow-tooltip="true" />
@@ -59,15 +155,24 @@
        </template>
      </el-table-column>
      <el-table-column label="联系电话" align="center" prop="phoe" width="110px" :show-overflow-tooltip="true" />
      <el-table-column label="邮箱" align="center" prop="email" :show-overflow-tooltip="true" width="160px" />
      <el-table-column label="地址" align="center" prop="address" :show-overflow-tooltip="true" width="160px" />
      <el-table-column label="预约时间" align="center" prop="reservationTime" width="100px" :show-overflow-tooltip="true"
        sortable>
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.reservationTime, "{y}-{m}-{d}") }}</span>
        </template>
      </el-table-column>
      <el-table-column label="体检类型" align="center" prop="tjType" width="80px" :show-overflow-tooltip="true" />
      <!-- <el-table-column
        label="体检类型"
        align="center"
        prop="tjType"
        width="80px"
        :show-overflow-tooltip="true"
      >
        <template slot-scope="scope">
          <dict-tag :options="dict.type.dict_team" :value="scope.row.tjType" />
        </template>
      </el-table-column> -->
      <el-table-column label="婚姻" align="center" prop="marriage" width="60px" :show-overflow-tooltip="true">
        <template slot-scope="scope">
          <dict-tag :options="dict.type.dict_user_marry" :value="scope.row.marriage" />
@@ -87,12 +192,17 @@
        </template>
      </el-table-column>
      <el-table-column label="单位名称" align="center" prop="company" :show-overflow-tooltip="true" />
      <el-table-column label="套餐名称" align="center" prop="email" :show-overflow-tooltip="true" width="160px" />
      <el-table-column label="分组名称" align="center" prop="email" :show-overflow-tooltip="true" width="160px" />
      <el-table-column label="地址" align="center" prop="address" :show-overflow-tooltip="true" width="160px" />
      <el-table-column label="操作" align="center" width="90px" fixed="right">
        <template slot-scope="scope">
          <el-button size="mini" type="text" icon="el-icon-s-order" @click="handleUpdate1(scope.row)"
            v-hasPermi="['reservation:reservation:edit']" title="预约详细"></el-button>
            title="预约详细"></el-button>
          <!--  v-hasPermi="['reservation:reservation:edit']" -->
          <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
            v-hasPermi="['reservation:reservation:edit']" title="修改"></el-button>
            title="修改"></el-button>
          <!-- v-hasPermi="['reservation:reservation:edit']" -->
          <el-button size="mini" type="text" title="撤销预约" icon="el-icon-delete" @click="handleDelete(scope.row)">
          </el-button>
        </template>
@@ -101,8 +211,8 @@
    <div class="pag">
      <div class="pag1">
        <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
          @pagination="getList" />
        <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum"
          :limit.sync="queryParams.pageSize" @pagination="getList" />
      </div>
    </div>
    <!-- 预约登记详情对话框 -->
@@ -161,7 +271,7 @@
                <el-input v-model="formIn.address" placeholder="请输入现居住地址" style="width: 410px" />
              </el-form-item>
              <el-form-item label="体检类别" prop="tjCategory">
                <el-select style="width: 150px" v-model="formIn.tjCategory" placeholder="请选择体检类别">
                <el-select style="width: 140px" v-model="formIn.tjCategory" placeholder="请选择体检类别">
                  <el-option v-for="dict in dict.type.dict_tjtype" :key="dict.value" :label="dict.label"
                    :value="dict.value"></el-option>
                </el-select>
@@ -169,8 +279,13 @@
              <el-form-item label="部门" prop="department">
                <el-input v-model="formIn.department" placeholder="请输入部门" style="width: 160px" />
              </el-form-item>
              <el-form-item label="工作单位" prop="company">
                <el-input v-model="formIn.company" placeholder="请输入工作单位" style="width: 410px" />
              <el-form-item label="单位名称" prop="company">
                <el-select :remote-method="getRemoteData" v-model="formIn.company" remote default-first-option
                  allow-create filterable style="width: 200px" placeholder="请选择单位名称" clearable @change="idFn1">
                  <el-option v-for="dict in CompanyList" :key="dict.cnName" :label="dict.cnName"
                    :value="dict.drugManufacturerId" />
                </el-select>
                <i class="el-icon-circle-plus-outline" @click="handleAdd1"></i>
              </el-form-item>
              <el-form-item label="职业" prop="career">
                <el-select filterable :disabled="isDisabled" v-model="formIn.career" placeholder="请输入职业"
@@ -180,8 +295,8 @@
                </el-select>
              </el-form-item>
              <el-form-item label="预约日期" prop="reservationTime">
                <el-date-picker v-model="formIn.reservationTime" type="date" value-format="yyyy-MM-dd" placeholder="选择日期"
                  :picker-options="setDisabled" style="width: 160px">
                <el-date-picker v-model="formIn.reservationTime" type="date" value-format="yyyy-MM-dd"
                  placeholder="选择日期" :picker-options="setDisabled" style="width: 160px">
                </el-date-picker>
              </el-form-item>
              <el-form-item label="时间" prop="timeRegion">
@@ -203,7 +318,8 @@
                <el-form :model="queryParam" ref="queryForm" size="small" :inline="true" v-show="showSearch"
                  label-width="auto" @submit.native.prevent>
                  <el-form-item label="套餐名称" prop="pacName">
                    <el-input v-model="queryParam.pacName" placeholder="请输入套餐名称" clearable @keyup.enter.native="handle" />
                    <el-input v-model="queryParam.pacName" placeholder="请输入套餐名称" clearable
                      @keyup.enter.native="handle" />
                  </el-form-item>
                  <el-form-item>
                    <el-button type="primary" icon="el-icon-search" size="mini" @click="handle">查询</el-button>
@@ -241,9 +357,13 @@
              <el-tab-pane label="单项">
                <div class="tab3">
                  <div class="tab2">
                    <el-tree :data="data" show-checkbox node-key="proId" :props="defaultProps"
                      @check-change="handleCurrentChecked">
                    </el-tree>
                    <v-tree-transfer :treeData="treedataList" :defaultProps="{
                      children: 'tjProjectList',
                      label: 'proName',
                    }" :defaultKeys="defaultKeys" @changeKeys="changeCategoryKeys" :key="datekey"></v-tree-transfer>
                    <!-- <el-tree :data="data" show-checkbox node-key="proId" :props="defaultProps"
                      @check-change="handleCurrentChecked">
                    </el-tree>-->
                  </div>
                </div>
              </el-tab-pane>
@@ -269,7 +389,7 @@
                    <!-- <div class="tab1"> -->
                    <!-- <el-form :inline="true" class="tab1"> -->
                    <el-form-item label="应收金额">
                      <el-input placeholder="应收金额" :value="TotalPrice1 + '.00'" disabled style="width: 160px"></el-input>
                      <el-input placeholder="应收金额" :value="TotalPrice1" disabled style="width: 160px"></el-input>
                    </el-form-item>
                    <el-form-item label="优惠折扣">
                      <!-- <el-input style="width: 100px" type="number" v-model="discount" :value="discount"></el-input> -->
@@ -277,7 +397,7 @@
                        :step="0.1" :max="10" :min="1" @change="numberChange" :disabled="isfalse"></el-input-number>
                    </el-form-item>
                    <el-form-item label="实收金额">
                      <el-input placeholder="实收金额" v-model="TotalPrice" style="width: 120px"></el-input>
                      <el-input placeholder="实收金额" v-model="TotalPrice" style="width: 120px" disabled></el-input>
                    </el-form-item>
                    <el-form-item>
@@ -289,17 +409,91 @@
                  </el-form>
                </template>
                <div style="text-align: center; margin-bottom: 10px">
                <div style="
                    display: flex;
                    align-items: center;
                    justify-content: flex-start;
                    width: 100%;
                  ">
                  <div style="
                      white-space: nowrap;
                      overflow: hidden;
                      text-overflow: ellipsis;
                      margin-left: 46px;
                      font-size: 16px;
                      margin-right: 20px;
                    ">
                    已选项目条数:<span style="font-weight: 700; color: red; margin-right: 5px">{{ this.tableData1.length || 0
                    }}</span>条
                  </div>
                  已选项目列表
                </div>
                <div style="
                    padding: 0px 6px;
                    border: 1px solid #e6ebf5;
                    max-height: 650%;
                    overflow: auto;
                    width: 916px;
                    margin-left: 35px;
                  ">
                  <el-table :data="tableData1" border style="width: 100%">
                    <el-table-column prop="proName" label="项目" width="180" align="center">
                    </el-table-column>
                    <el-table-column prop="proType" label="性别" width="50" align="center">
                      <template slot-scope="scope">
                        <template v-if="isAll(scope.row.proType)">
                          全部
                        </template>
                        <template v-else>
                          <dict-tag :options="dict.type.sys_user_sex" :value="scope.row.proType" />
                        </template>
                      </template>
                    </el-table-column>
                    <el-table-column prop="ordPrice" label="应收金额" align="center">
                    </el-table-column>
                    <el-table-column label="折扣" width="160px" align="center">
                      <template slot-scope="scope">
                        <el-input-number v-model.number="scope.row.discount" @input="validateDiscount(scope.row)"
                          placeholder="输入折扣" size="small" type="number" :precision="1" :step="0.1" :max="10" :min="0"
                          :disabled="true">
                        </el-input-number>
                      </template>
                    </el-table-column>
                    <el-table-column prop="nowPrice" label="实收金额" align="center">
                    </el-table-column>
                    <el-table-column prop="proCheckMethod" label="是否空腹" align="center">
                      <template slot-scope="scope">
                        <dict-tag :options="dict.type.sys_yes_no" :value="scope.row.proCheckMethod" />
                      </template>
                    </el-table-column>
                    <el-table-column label="操作" align="center" width="80px">
                      <template slot-scope="scope">
                        <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete1(scope.row)"
                          title="删除">
                        </el-button>
                      </template>
                    </el-table-column>
                  </el-table>
                </div>
                <!-- <div style="text-align: center; margin-bottom: 10px">
                  已选项目列表
                </div> -->
                <!-- <div
                  style="
                    padding: 0px 6px;
                    border: 1px solid #e6ebf5;
                    max-height: 420px;
                    overflow: auto;
                  ">
                  <el-collapse v-model="index" accordion v-if="list3">
                    <div class="info1" v-for="(item, index) in tableData1" :key="'info1-' + index">
                  "
                > -->
                <!-- <el-collapse v-model="index" accordion v-if="list3">
                    <div
                      class="info1"
                      v-for="(item, index) in tableData1"
                      :key="'info1-' + index"
                    >
                      <el-collapse-item :name="index">
                        <template slot="title">
                          {{
@@ -308,42 +502,108 @@
                            item.parentName +
                            " (应收金额:" +
                            item.ordPrice +
                            ".00元 / 实收金额:" +
                            " / 实收金额:" +
                            item.nowPrice +
                            ".00元)"
                            "元)"
                          }}
                          <div style="font-size: 16px; margin-left: 20px">
                            已选项目条数:<span
                              style="
                                font-weight: 700 !important;
                                color: red;
                                margin-right: 5px;
                              "
                              >{{ item.list.length || 0 }}</span
                            >条
                          </div>
                        </template>
                        <el-table :data="item.list" border style="width: 100%" height="270">
                          <el-table-column prop="proName" label="项目" width="180">
                        <el-table
                          :data="item.list"
                          border
                          style="width: 100%"
                          height="270"
                        >
                          <el-table-column
                            prop="proName"
                            label="项目"
                            width="180"
                          >
                          </el-table-column>
                          <el-table-column prop="ordPrice" label="应收金额">
                          </el-table-column>
                          <el-table-column label="折扣">
                            <template slot-scope="scope">
                              <el-input-number
                                v-model.number="scope.row.discount"
                                @input="validateDiscount(scope.row)"
                                placeholder="输入折扣"
                                size="small"
                                type="number"
                                :precision="1"
                                :step="0.1"
                                :max="10"
                                :min="0"
                              >
                              </el-input-number>
                            </template>
                          </el-table-column>
                          <el-table-column prop="nowPrice" label="实收金额">
                          </el-table-column>
                          <el-table-column
                            label="操作"
                            align="center"
                            width="80px"
                          >
                            <template slot-scope="scope">
                              <el-button
                                size="mini"
                                type="text"
                                icon="el-icon-delete"
                                @click="handleDelete1(scope.row)"
                                title="删除"
                              >
                              </el-button>
                            </template>
                          </el-table-column>
                        </el-table>
                      </el-collapse-item>
                    </div>
                  </el-collapse>
                  <el-collapse v-model="activeName" accordion v-if="list2">
                    <div class="info" v-for="(item, index) in tableData1" :key="'info-' + index">
                    <div
                      class="info"
                      v-for="(item, index) in tableData1"
                      :key="'info-' + index"
                    >
                      <el-collapse-item>
                        <template slot="title">
                          {{ item.pacName }}
                        </template>
                        <el-table :data="item.tjProjectList" border style="width: 100%" height="250">
                          <el-table-column prop="proName" label="项目" width="180">
                        <el-table
                          :data="item.tjProjectList"
                          border
                          style="width: 100%"
                          height="250"
                        >
                          <el-table-column
                            prop="proName"
                            label="项目"
                            width="180"
                          >
                          </el-table-column>
                          <el-table-column prop="proSex" label="性别" width="180">
                          <el-table-column
                            prop="proSex"
                            label="性别"
                            width="180"
                          >
                          </el-table-column>
                          <el-table-column prop="ordPrice" label="应收金额">
                          </el-table-column>
                          <el-table-column prop="nowPrice" label="实收金额">
                          </el-table-column>
                          <el-table-column prop="isEat" label="空腹">
                          <el-table-column prop="proCheckMethod" label="空腹">
                          </el-table-column>
                        </el-table>
                      </el-collapse-item>
                    </div>
@@ -353,22 +613,29 @@
                    <div>
                      <el-collapse-item title="请选择项目">
                        <el-table :data="list" border style="width: 100%">
                          <el-table-column prop="proName" label="项目" width="180">
                          <el-table-column
                            prop="proName"
                            label="项目"
                            width="180"
                          >
                          </el-table-column>
                          <el-table-column prop="proSex" label="性别" width="180">
                          <el-table-column
                            prop="proSex"
                            label="性别"
                            width="180"
                          >
                          </el-table-column>
                          <el-table-column prop="ordPrice" label="应收金额">
                          </el-table-column>
                          <el-table-column prop="nowPrice" label="实收金额">
                          </el-table-column>
                          <el-table-column prop="isEat" label="空腹">
                          <el-table-column prop="proCheckMethod" label="空腹">
                          </el-table-column>
                        </el-table>
                      </el-collapse-item>
                    </div>
                  </el-collapse>
                </div>
                  </el-collapse> -->
                <!-- </div> -->
              </div>
            </el-col>
          </el-row>
@@ -382,30 +649,45 @@
      </template>
    </el-drawer>
    <el-dialog title="PDF 预览" :visible.sync="dialogVisible" :close-on-click-modal="false">
      <div class="main">
        <iframe id="printIframe" :src="url" frameborder="0" style="width: 100%; height: 100%"></iframe>
      </div>
    </el-dialog>
    <el-dialog :title="title" :visible.sync="open2" width="800px" append-to-body>
      <el-form ref="form" :model="forms" label-width="100px" :inline="true">
        <el-form-item label="体检类别">
          <el-select style="width: 150px" v-model="forms.tjCategory" placeholder="请选择体检类别">
            <el-option v-for="dict in dict.type.dict_tjtype" :key="dict.value" :label="dict.label"
              :value="dict.value"></el-option>
          </el-select>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer2">
        <el-button type="primary" @click="submitType">确 定</el-button>
        <el-button @click="cancel">取 消</el-button>
      </div>
    </el-dialog>
    <div style="
              position: absolute;
              bottom: 100px;
              left: 500px;
              width: 700px;
              display: none;
            ">
        position: absolute;
        bottom: 100px;
        left: 500px;
        width: 700px;
        display: none;
      ">
      <div id="printBill">
        <div style="font-size: 13px; color: #000000">
          <div style="width: 48%; margin-top: 10px">
            姓名:{{ fmobj.name }}
          </div>
          <div style="width: 48%; margin-top: 10px">姓名:{{ fmobj.name }}</div>
          <div style="width: 48%; margin-top: 10px">
            性别:{{ fmobj.sex === 0 ? "男" : "女" }}
          </div>
          <div style="width: 48%; margin-top: 10px">
            电话:{{ fmobj.phoe }}
          </div>
          <div style="width: 48%; margin-top: 10px">电话:{{ fmobj.phoe }}</div>
          <div style="width: 48%; margin-top: 10px">
            日期:{{ fmobj.reservationTime }}
          </div>
          <div style="width: 58%; margin-top: 10px">
            套餐:{{ pacName }}
          </div>
          <div style="width: 58%; margin-top: 10px">套餐:{{ pacName }}</div>
          <div style="width: 100%; margin-top: 10px">温馨提示:</div>
          <div style="width: 100%">1、采血,腹部彩超检查后方可用餐。</div>
          <div style="width: 100%">
@@ -414,15 +696,11 @@
          <div style="width: 100%">
            3、怀孕或可能已受孕的女士,还应避免妇科、放射科及阴式超声检查。
          </div>
          <div style="width: 100%">
            4、经期女性不宜进行妇科及尿常规检查。
          </div>
          <div style="width: 100%">4、经期女性不宜进行妇科及尿常规检查。</div>
          <div style="width: 100%">
            5、若您在等待检查过程中有疑问,请及时联系导检护士。
          </div>
          <div style="width: 100%">
            6、体检结束后请将导检单交还至前台。
          </div>
          <div style="width: 100%">6、体检结束后请将导检单交还至前台。</div>
        </div>
      </div>
    </div>
@@ -491,8 +769,13 @@
              <el-form-item label="部门" prop="department">
                <el-input v-model="formIn.department" placeholder="请输入部门" style="width: 160px" />
              </el-form-item>
              <el-form-item label="工作单位" prop="company">
                <el-input v-model="formIn.company" placeholder="请输入工作单位" style="width: 410px" />
              <el-form-item label="单位名称" prop="company">
                <el-select :remote-method="getRemoteData" v-model="formIn.company" remote default-first-option
                  allow-create filterable style="width: 200px" placeholder="请选择单位名称" clearable @change="idFn1">
                  <el-option v-for="dict in CompanyList" :key="dict.cnName" :label="dict.cnName"
                    :value="dict.drugManufacturerId" />
                </el-select>
                <i class="el-icon-circle-plus-outline" @click="handleAdd1"></i>
              </el-form-item>
              <el-form-item label="职业" prop="career">
                <el-select filterable :disabled="isDisabled" v-model="formIn.career" placeholder="请输入职业"
@@ -502,8 +785,8 @@
                </el-select>
              </el-form-item>
              <el-form-item label="预约日期" prop="reservationTime">
                <el-date-picker v-model="formIn.reservationTime" type="date" value-format="yyyy-MM-dd" placeholder="选择日期"
                  :picker-options="setDisabled" style="width: 160px">
                <el-date-picker v-model="formIn.reservationTime" type="date" value-format="yyyy-MM-dd"
                  placeholder="选择日期" :picker-options="setDisabled" style="width: 160px">
                </el-date-picker>
              </el-form-item>
              <el-form-item label="时间" prop="timeRegion">
@@ -515,7 +798,7 @@
              <el-form-item label="卡号" prop="indexCard">
                <el-input v-model="formIn.indexCard" placeholder="请输入卡号" style="width: 190px" />
              </el-form-item>
              <el-button type="primary" @click="taocan = true" size="mini">选择套餐</el-button>
              <!-- <el-button type="primary" @click="Package" size="mini">选择套餐</el-button> -->
            </el-form>
          </div>
@@ -525,7 +808,8 @@
                <el-form :model="queryParam" ref="queryForm" size="small" :inline="true" v-show="showSearch"
                  label-width="auto" @submit.native.prevent>
                  <el-form-item label="套餐名称" prop="pacName">
                    <el-input v-model="queryParam.pacName" placeholder="请输入套餐名称" clearable @keyup.enter.native="handle" />
                    <el-input v-model="queryParam.pacName" placeholder="请输入套餐名称" clearable
                      @keyup.enter.native="handle" />
                  </el-form-item>
                  <el-form-item>
                    <el-button type="primary" icon="el-icon-search" size="mini" @click="handle">查询</el-button>
@@ -539,6 +823,7 @@
                      <template slot="empty">数据正在加载中</template>
                      <el-table-column type="selection" width="40px" align="center" label="选择" />
                      <el-table-column label="套餐名称" align="center" prop="pacName" width="120px" />
                      <el-table-column label="套餐价格" align="center" prop="price" width="120px" />
                      <el-table-column label="套餐明细" align="center" prop="allProName" :show-overflow-tooltip="true" />
                    </el-table>
                  </div>
@@ -603,14 +888,10 @@
                          :value="dict.value"></el-option>
                      </el-select>
                    </el-form-item>
                    <!-- <div class="tab1"> -->
                    <!-- <el-form :inline="true" class="tab1"> -->
                    <el-form-item label="应收金额">
                      <el-input placeholder="应收金额" :value="TotalPrice1 + '.00'" disabled style="width: 160px"></el-input>
                      <el-input placeholder="应收金额" :value="TotalPrice1" disabled style="width: 160px"></el-input>
                    </el-form-item>
                    <el-form-item label="优惠折扣">
                      <!-- <el-input style="width: 100px" type="number" v-model="discount" :value="discount"></el-input> -->
                      <el-input-number ref="inputNumber" style="width: 130px" v-model="discount" :precision="2"
                        :step="0.1" :max="10" :min="1" @change="numberChange" :disabled="isfalse"></el-input-number>
                    </el-form-item>
@@ -619,7 +900,7 @@
                    </el-form-item>
                    <el-form-item>
                      <el-button type="primary" @click="submitPrice" :disabled="confirm" size="mini">签到登记</el-button>
                      <el-button type="primary" @click="submitPrice" :disabled="confirm" size="mini">预约修改</el-button>
                    </el-form-item>
                    <!-- </el-form> -->
                    <!-- </div> -->
@@ -629,14 +910,78 @@
                <div style="text-align: center; margin-bottom: 10px">
                  已选项目列表
                </div>
                <div style="
                    padding: 0px 6px;
                    border: 1px solid #e6ebf5;
                    max-height: 650%;
                    overflow: auto;
                    width: 916px;
                    margin-left: 35px;
                  ">
                  <el-table :data="tableData1" border style="width: 100%">
                    <el-table-column prop="proName" label="项目" width="180" align="center">
                    </el-table-column>
                    <el-table-column prop="proType" label="性别" width="50" align="center">
                      <template slot-scope="scope">
                        <template v-if="isAll(scope.row.proType)">
                          全部
                        </template>
                        <template v-else>
                          <dict-tag :options="dict.type.sys_user_sex" :value="scope.row.proType" />
                        </template>
                      </template>
                    </el-table-column>
                    <el-table-column prop="ordPrice" label="应收金额" align="center">
                    </el-table-column>
                    <el-table-column label="折扣" width="160px" align="center">
                      <template slot-scope="scope">
                        <el-input-number v-model.number="scope.row.discount" @input="validateDiscount(scope.row)"
                          placeholder="输入折扣" size="small" type="number" :precision="1" :step="0.1" :max="10" :min="0"
                          :disabled="true">
                        </el-input-number>
                      </template>
                    </el-table-column>
                    <el-table-column prop="nowPrice" label="实收金额" align="center">
                    </el-table-column>
                    <el-table-column prop="proCheckMethod" label="是否空腹" align="center">
                      <template slot-scope="scope">
                        <dict-tag :options="dict.type.sys_yes_no" :value="scope.row.proCheckMethod" />
                      </template>
                    </el-table-column>
                    <el-table-column label="操作" align="center" width="80px">
                      <template slot-scope="scope">
                        <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete1(scope.row)"
                          title="删除">
                        </el-button>
                      </template>
                    </el-table-column>
                  </el-table>
                </div>
                <!--  <div
                  style="
                    padding: 0px 6px;
                    border: 1px solid #e6ebf5;
                    max-height: 420px;
                    overflow: auto;
                  ">
                  "
                >
                  <div
                    style="
                      padding: 0px 6px;
                      border: 1px solid #e6ebf5;
                      max-height: 420px;
                      overflow: auto;
                    "
                  ></div>
                  <el-collapse v-model="index" accordion v-if="list3">
                    <div class="info1" v-for="(item, index) in tableData1" :key="'info1-' + index">
                    <div
                      class="info1"
                      v-for="(item, index) in tableData1"
                      :key="'info1-' + index"
                    >
                      <el-collapse-item :name="index">
                        <template slot="title">
                          {{
@@ -649,42 +994,97 @@
                            item.nowPrice +
                            ".00元)"
                          }}
                          <div style="font-size: 16px; margin-left: 20px">
                            已选项目条数:<span
                              style="
                                font-weight: 700 !important;
                                color: red;
                                margin-right: 5px;
                              "
                              >{{ item.list.length || 0 }}</span
                            >条
                          </div>
                        </template>
                        <el-table :data="item.list" border style="width: 100%" height="270">
                          <el-table-column prop="proName" label="项目" width="180">
                        <el-table
                          :data="item.list"
                          border
                          style="width: 100%"
                          height="270"
                        >
                          <el-table-column
                            prop="proName"
                            label="项目"
                            width="180"
                          >
                          </el-table-column>
                          <el-table-column prop="proSex" label="性别" width="180">
                          <el-table-column
                            prop="proSex"
                            label="性别"
                            width="180"
                          >
                          </el-table-column>
                          <el-table-column prop="ordPrice" label="应收金额">
                          </el-table-column>
                          <el-table-column label="折扣">
                            <template slot-scope="scope">
                              <el-input-number
                                v-model.number="scope.row.discount"
                                @input="validateDiscount(scope.row)"
                                placeholder="输入折扣"
                                size="small"
                                type="number"
                                :precision="1"
                                :step="0.1"
                                :max="10"
                                :min="0"
                              >
                              </el-input-number>
                            </template>
                          </el-table-column>
                          <el-table-column prop="nowPrice" label="实收金额">
                          </el-table-column>
                          <el-table-column prop="isEat" label="空腹">
                          <el-table-column prop="proCheckMethod" label="空腹">
                          </el-table-column>
                        </el-table>
                      </el-collapse-item>
                    </div>
                  </el-collapse>
                  <el-collapse v-model="activeName" accordion v-if="list2">
                    <div class="info" v-for="(item, index) in tableData1" :key="'info-' + index">
                    <div
                      class="info"
                      v-for="(item, index) in tableData1"
                      :key="'info-' + index"
                    >
                      <el-collapse-item>
                        <template slot="title">
                          {{ item.pacName }}
                        </template>
                        <el-table :data="item.tjProjectList" border style="width: 100%" height="250">
                          <el-table-column prop="proName" label="项目" width="180">
                        <el-table
                          :data="item.tjProjectList"
                          border
                          style="width: 100%"
                          height="250"
                        >
                          <el-table-column
                            prop="proName"
                            label="项目"
                            width="180"
                          >
                          </el-table-column>
                          <el-table-column prop="proSex" label="性别" width="180">
                          <el-table-column
                            prop="proSex"
                            label="性别"
                            width="180"
                          >
                          </el-table-column>
                          <el-table-column prop="ordPrice" label="应收金额">
                          </el-table-column>
                          <el-table-column prop="nowPrice" label="实收金额">
                          </el-table-column>
                          <el-table-column prop="isEat" label="空腹">
                          <el-table-column prop="proCheckMethod" label="空腹">
                          </el-table-column>
                        </el-table>
                      </el-collapse-item>
                    </div>
@@ -694,22 +1094,29 @@
                    <div>
                      <el-collapse-item title="请选择项目">
                        <el-table :data="list" border style="width: 100%">
                          <el-table-column prop="proName" label="项目" width="180">
                          <el-table-column
                            prop="proName"
                            label="项目"
                            width="180"
                          >
                          </el-table-column>
                          <el-table-column prop="proSex" label="性别" width="180">
                          <el-table-column
                            prop="proSex"
                            label="性别"
                            width="180"
                          >
                          </el-table-column>
                          <el-table-column prop="ordPrice" label="应收金额">
                          </el-table-column>
                          <el-table-column prop="nowPrice" label="实收金额">
                          </el-table-column>
                          <el-table-column prop="isEat" label="空腹">
                          <el-table-column prop="proCheckMethod" label="空腹">
                          </el-table-column>
                        </el-table>
                      </el-collapse-item>
                    </div>
                  </el-collapse>
                </div>
                </div> -->
              </div>
            </el-col>
          </el-row>
@@ -726,17 +1133,62 @@
</template>
<script>
import { listReservation, gettjCancel, tjReappoint, tjCancelTj, } from "@/api/reservation/reservation";
import {
  addComp, addPlOrderAndDetail, Deptlist,
  getDwAndDwDept,
} from "@/api/system/comp";
import Big from "big.js";
import { Loading } from "element-ui";
import {
  listReservation,
  gettjCancel,
  tjReappoint,
  tjCancelTj,
  getReservation,
} from "@/api/reservation/reservation";
import printJS from "print-js";
import { deptTreeSelect, projectGetList, getPackageListName, getaddtTransition, getTransitionList, } from "@/api/system/tijian";
import {
  deptTreeSelect,
  projectGetList,
  getPackageListName,
  getaddtTransition,
  getTransitionList,
  getconfigKey,
  delTbBycusCardIdAndProId,
  getTransitionList1,
} from "@/api/system/tijian";
import { getCompany, queryCompany } from "@/api/team/tuanti";
import user from "@/store/modules/user";
import VTreeTransfer from "../../system/tijian/TreeTransfer.vue";
export default {
  components: {
    VTreeTransfer,
  },
  name: "Reservation",
  dicts: ["dict_user_national", "dict_user_national", "dict_user_marry", "sys_yes_no",
    "sys_user_sex", "dict_team", "tj_time_region", "dict_tjtype", "dict_job",
    "dict_user_cardtype", "dict_ageunit",],
  dicts: [
    "dict_user_national",
    "dict_user_national",
    "dict_user_marry",
    "sys_yes_no",
    "sys_user_sex",
    "dict_team",
    "tj_time_region",
    "dict_tjtype",
    "dict_job",
    "dict_user_cardtype",
    "dict_ageunit",
  ],
  data() {
    let checkPhoneNum = (rule, value, callback) => {
      let patter = new RegExp(/^1\s*[3456789]\s*(\d\s*){9}$/);
      if (value == "" && value == undefined && !value) {
        return callback("");
      } else if (value != undefined && value != "") {
        return callback();
      } else if (!patter.test(value)) {
        return callback("");
      }
    };
    return {
      isfalse: false,
      tijiao1: true,
@@ -749,7 +1201,12 @@
          return time.getTime() < Date.now() - 8.64e7; // 不可选历史天、不可选当前天、可选未来天
        },
      },
      discount: 10,
      taocan: false,
      webSocket: null,
      defaultKeys: [],
      deptList: [],
      groupingList: [],
      value1: "",
      pacName: "",
      hides: false,
@@ -759,6 +1216,10 @@
      dialogVisibles: false,
      src: "",
      url: "",
      open2: false,
      forms: {
        tjCategory: "12",
      },
      dialogVisible: false,
      /** 照相机弹窗模块-start */
      videoWidth: 200,
@@ -769,6 +1230,8 @@
      thisCancas: null,
      thisContext: null,
      thisVideo: null,
      datekey: Date.now(),
      treedataList: [],
      list: [],
      activeName: "1",
      // 遮罩层
@@ -812,10 +1275,13 @@
      multiple: true,
      nodeobj: {},
      // 是否显示弹出层
      Seachopen: false,
      pacId: "",
      cusIds: [],
      // 结果
      result: "",
      createTimeList: "",
      startTime: "",
      proIds: [],
      // 显示搜索条件
      showSearch: true,
@@ -847,6 +1313,8 @@
        cusBrithday: null,
        cusAddr: null,
        cusPhone: null,
        yykssj: "", // 预约开始时间
        yyjssj: "", // 预约结束时间
        cusPostcode: null,
        cusEmail: null,
        indexCard: null,
@@ -857,28 +1325,68 @@
        cusNumber: null,
        cusIsvip: null,
      },
      formIn: {},
      formIn: {
        name: "",
        age: "",
        idCard: "",
        remark: null,
        pacName: "",
        cusaddr: null,
        idType: null,
        ageUnit: null,
        sex: null,
        phoe: "",
        nation: null,
        email: "",
        marriage: null,
        address: "",
        tjCategory: null,
        company: "",
        career: null,
        reservationTime: null,
        timeRegion: null,
        indexCard: "",
        department: "",
      },
      fmobj: {},
      // 表单校验
      form1: {},
      open1: false,
      rules1: {
        cnName: [{ required: true, trigger: "blur" }],
        contactPerson: [{ required: true, trigger: "blur" }],
        contactPhone: [
          {
            required: true,
            trigger: "blur",
          },
          {
            pattern: /^1[3-9]\d{9}$/,
            trigger: "blur",
          },
        ],
      },
      rules: {
        cusName: [{ required: true, message: "姓名不能为空", trigger: "blur" }],
        cusName: [
          { required: true, validator: checkPhoneNum, trigger: "blur" },
        ],
        cusSex: [
          { required: true, message: "性别不能为空", trigger: "change" },
          { required: true, validator: checkPhoneNum, trigger: "change" },
        ],
        cusBrithday: [
          { required: true, message: "出生日期不能为空", trigger: "blur" },
          { required: true, validator: checkPhoneNum, trigger: "blur" },
        ],
        // cusAddr: [
        //   { required: true, message: "现居住地址不能为空", trigger: "blur" },
        // ],
        cusPhone: [
          { required: true, message: "联系电话不能为空", trigger: "blur" },
          { required: true, validator: checkPhoneNum, trigger: "blur" },
        ],
        reservationTime: [
          { required: true, message: "预约日期不能为空", trigger: "change" },
          { required: true, validator: checkPhoneNum, trigger: "change" },
        ],
        timeRegion: [
          { required: true, message: "时间不能为空", trigger: "blur" },
          { required: true, validator: checkPhoneNum, trigger: "blur" },
        ],
      },
      options: [
@@ -908,6 +1416,7 @@
      reservationList: [],
      // 弹出层标题
      title: "",
      valueUrls: "ws://127.0.0.1:6789/websocket",
      drawer: false,
      drawer1: false,
      // 查询参数
@@ -917,6 +1426,7 @@
        orderByColumn: "reservationTime",
        isAsc: "desc",
        name: null,
        reservationTime: null,
        idCard: null,
        phoe: null,
        email: null,
@@ -932,21 +1442,21 @@
        name: [
          {
            required: true,
            message: "姓名不能为空",
            validator: checkPhoneNum,
            trigger: "blur",
          },
        ],
        idCard: [
          {
            required: true,
            message: "身份证号不能为空",
            validator: checkPhoneNum,
            trigger: "blur",
          },
        ],
        phoe: [
          {
            required: true,
            message: "联系电话不能为空",
            validator: checkPhoneNum,
            trigger: "blur",
          },
        ],
@@ -958,44 +1468,191 @@
        //   },
        // ],
      },
      pickerOptions: {
        shortcuts: [
          {
            text: "最近一周",
            onClick(picker) {
              const end = new Date();
              const start = new Date(new Date().setHours(0, 0, 0, 0));
              start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
              picker.$emit("pick", [start, end]);
            },
          },
          {
            text: "最近一个月",
            onClick(picker) {
              const end = new Date();
              const start = new Date(new Date().setHours(0, 0, 0, 0));
              start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
              picker.$emit("pick", [start, end]);
            },
          },
          {
            text: "最近三个月",
            onClick(picker) {
              const end = new Date();
              const start = new Date(new Date().setHours(0, 0, 0, 0));
              start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
              picker.$emit("pick", [start, end]);
            },
          },
        ],
      },
    };
  },
  created() {
    this.getList();
  },
  methods: {
    isAll(value) {
      return value === "" || value === null;
    },
    validateDiscount(row) {
      if (row.discount == null || isNaN(row.discount)) {
        row.discount = 10;
      }
      if (row.discount > 10) {
        row.discount = 10; // 强制将值设置为最大值
      } else if (row.discount < 0) {
        row.discount = 0; // 强制将值设置为最小值
      }
      this.updateProPrice(row); // 更新价格或其他逻辑
    },
    updateProPrice(row) {
      const ordPrice = new Big(row.ordPrice || 0);
      const discount = new Big(row.discount || 0);
      const result = ordPrice.times(discount.div(10)); // ordPrice * (discount / 10)
      row.nowPrice = result.toNumber();
      this.TotalPrice = this.tableData1.reduce((sum, item) => {
        return sum.plus(new Big(item.nowPrice || "0"));
      }, new Big(0));
      this.discount =
        (Math.floor((this.TotalPrice / this.TotalPrice1) * 100) / 100) * 10;
    },
    dateChangebirthday2(val) {
      this.startTime = val;
    },
    /** 删除按钮操作 */
    handleDelete1(row) {
      // console.log(row);
      let data = {
        cusCardId: row.cusId,
        proId: row.parentProId,
      };
      this.$modal
        .confirm("是否确认删除?")
        .then(() => {
          return delTbBycusCardIdAndProId(data);
        })
        .then(() => {
          this.TotalPrice1 = 0;
          getTransitionList1(row.cusId).then((response) => {
            this.tableData1 = response.data;
            this.tableData1.forEach((item) => {
              this.TotalPrice1 += item.ordPrice;
              this.TotalPrice += item.nowPrice;
            });
            this.TotalPrice = this.tableData1.reduce((sum, item) => {
              return sum.plus(new Big(item.nowPrice || "0"));
            }, new Big(0));
            this.discount =
              (Math.floor((this.TotalPrice / this.TotalPrice1) * 100) / 100) *
              10;
          });
          this.$modal.msgSuccess("删除成功");
        })
        .catch(() => { });
    },
    getCompanyList() {
      this.loading = true;
      getconfigKey("team_reservation_default_day").then((res) => {
        this.queryParams.yxts = res.msg;
      });
      getCompany(this.queryParam).then((response) => {
        this.CompanyList = response.data;
        this.total = response.total;
        this.loading = false;
      });
    },
    cancel1() {
      this.open1 = false;
      this.reset1();
    },
    submitFormS() {
      this.$refs["form1"].validate((valid) => {
        if (valid) {
          addComp(this.form1).then((response) => {
            this.$modal.msgSuccess("新增成功");
            this.open1 = false;
            this.getCompanyList();
          });
        }
      });
    },
    reset1() {
      this.form1 = {
        company: "",
        payType: "",
        name: "",
        phoe: "",
        signingPic: "",
        discount: "",
      };
    },
    handleAdd1() {
      this.reset1();
      this.open1 = true;
      this.title = "添加体检单位信息维护";
    },
    idFn1(value) {
      console.log(value)
      if (value) {
        this.form.dictCompId = value;
        this.CompanyList.forEach((item) => {
          if (item.drugManufacturerId == this.form.dictCompId) {
            this.form.compName = item.cnName;
            this.queryParams.company = item.cnName;
          }
        });
        Deptlist(value).then((response) => {
          this.deptList = response.data;
        });
      }
    },
    idFn2(value) {
      let data = {
        deptId: value,
        dwId: this.form.dictCompId,
      };
      getDwAndDwDept(data).then((response) => {
        // 部门名称
        this.groupingList = response.data;
      });
    },
    /** 查询体检预约列表 */
    getList() {
      this.loading = true;
      if (this.startTime) {
        this.queryParams.yykssj = this.startTime[0];
        this.queryParams.yyjssj = this.startTime[1];
      } else if (this.createTimeList) {
        this.queryParams.yykssj = this.createTimeList[0];
        this.queryParams.yyjssj = this.createTimeList[1];
      } else if (this.createTimeList == null) {
        this.queryParams.yykssj = null;
        this.queryParams.yyjssj = null;
      }
      listReservation(this.queryParams).then((response) => {
        this.reservationList = response.rows;
        //  response.rows.forEach((item, index) =>
        // {item.newID =(this.queryParams.pageNum - 1) * this.queryParams.pageSize +index +1;
        //   });
        this.reservationList.forEach((item) => {
          if (item.tjType === "2") {
            item.tjType = "个人";
          } else {
            item.tjType = "团队";
          }
          if (item.tjCategory === "01") {
            item.tjCategory = "健康体检";
          } else if (item.tjCategory === "02") {
            item.tjCategory = "职业病体检";
          } else if (item.tjCategory === "03") {
            item.tjCategory = "公卫体检";
          } else if (item.tjCategory === "04") {
            item.tjCategory = "入职体检";
          } else if (item.tjCategory === "05") {
            item.tjCategory = "公务员体检";
          } else if (item.tjCategory === "06") {
            item.tjCategory = "医保体检";
          } else if (item.tjCategory === "07") {
            item.tjCategory = "婚检";
          } else if (item.tjCategory === "09") {
            item.tjCategory = "出入境体检";
          }
        });
        this.total = response.total;
        this.loading = false;
      });
@@ -1007,6 +1664,7 @@
    // 取消按钮
    cancel() {
      this.open = false;
      this.open2 = false;
      this.reset();
    },
@@ -1065,15 +1723,37 @@
    },
    /** 重置按钮操作 */
    resetQuery() {
      this.startTime = [];
      this.createTimeList = [];
      this.resetForm("queryForm");
      this.queryParams = {
        pageNum: 1,
        pageSize: 10,
        cusName: null,
        cusSex: null,
        cusBrithday: null,
        cusAddr: null,
        cusPhone: null,
        yykssj: "", // 预约开始时间
        yyjssj: "", // 预约结束时间
        cusPostcode: null,
        cusEmail: null,
        indexCard: null,
        cusNational: null,
        cusMarryStatus: null,
        cusIdcard: null,
        cusIntroduce: null,
        cusNumber: null,
        cusIsvip: null,
      };
      this.handleQuery();
    },
    // 多选框选中数据
    handleSelectionChange(selection) {
      selection.forEach(item =>{
         this.fmobj = item
      })
      console.log(this.fmobj)
      this.cusIds = selection.map((item) => item.idCard);
      selection.forEach((item) => {
        this.fmobj = item;
      });
      this.ids = selection.map((item) => item.id);
      this.single = selection.length !== 1;
      this.multiple = !selection.length;
@@ -1090,6 +1770,7 @@
    handleUpdate(row) {
      this.title = "修改体检预约";
      this.formIn = row;
      this.form.tjType = this.formIn.tjType;
      if (this.formIn.timeRegion === 0) {
        this.formIn.timeRegion = "8:00-9:00";
      }
@@ -1104,66 +1785,74 @@
      }
      if (this.formIn.isExpire === 2) {
        this.drawer = true;
        this.discount = this.formIn.discount;
        if (this.formIn.discount != null) {
          this.discount = this.formIn.discount;
        }
        //全部套餐
        if (this.formIn.sex != null) {
          let cusSex = this.formIn.sex;
          deptTreeSelect(cusSex).then((response) => {
            this.newpacName = response.rows;
            this.newpacName.forEach((item3) => {
              this.tableData1.forEach((item4) => {
                item4.list.forEach((item6) => {
                  if (item6.pacName === item3.pacName) {
                    this.$refs.tb.toggleRowSelection(item3, true);
                    throw Error();
                  }
                });
              });
            });
            // this.newpacName.forEach((item3) => {
            //   this.tableData1.forEach((item4) => {
            //     item4.list.forEach((item6) => {
            //       if (item6.pacName === item3.pacName) {
            //         this.$refs.tb.toggleRowSelection(item3, true);
            //         throw Error();
            //       }
            //     });
            //   });
            // });
            this.loading = false;
          });
        } else {
          deptTreeSelect().then((response) => {
            this.newpacName = response.rows;
            this.newpacName.forEach((item3) => {
              this.tableData1.forEach((item4) => {
                item4.list.forEach((item6) => {
                  if (item6.pacName === item3.pacName) {
                    this.$nextTick(() => {
                      this.$refs.tb.toggleRowSelection(item3, true);
                    });
                    throw Error();
                  }
                });
              });
            });
            // this.newpacName.forEach((item3) => {
            //   this.tableData1.forEach((item4) => {
            //     item4.list.forEach((item6) => {
            //       if (item6.pacName === item3.pacName) {
            //         this.$nextTick(() => {
            //           this.$refs.tb.toggleRowSelection(item3, true);
            //         });
            //         throw Error();
            //       }
            //     });
            //   });
            // });
            this.loading = false;
          });
        }
        let cusId = this.formIn.idCard;
        let id = this.formIn.id;
        this.list1 = true;
        (this.tableData1 = []),
          (this.newpacName = []),
          getTransitionList(cusId).then((response) => {
          getReservation(id).then((response) => {
            if (response.data) {
              this.tableData1 = response.data;
              if (this.tableData1.length != 0) {
                this.TotalPrice1 = 0;
                this.tableData1.forEach((item) => {
                  this.TotalPrice1 += item.nowPrice;
                  this.TotalPrice = (
                    this.TotalPrice1 *
                    (this.discount / 10)
                  ).toFixed(2);
                  if (item.pacName === null) {
                    item.pacName = "单项";
              let cusId = response.data.idCard;
              getTransitionList1(cusId).then((response) => {
                if (response.data) {
                  this.tableData1 = response.data;
                  if (this.tableData1.length != 0) {
                    this.TotalPrice1 = 0;
                    this.tableData1.forEach((item) => {
                      this.TotalPrice1 += item.nowPrice;
                      this.TotalPrice = (
                        this.TotalPrice1 *
                        (this.discount / 10)
                      ).toFixed(2);
                      if (item.pacName === null) {
                        item.pacName = "单项";
                      }
                    });
                    this.list1 = false;
                    this.list3 = true;
                  } else {
                    this.list1 = true;
                  }
                });
                this.list1 = false;
                this.list3 = true;
              } else {
                this.list1 = true;
              }
                }
              });
            } else {
              this.tableData1 = [];
              this.list3 = false;
@@ -1171,15 +1860,19 @@
            }
          });
        /** 查询部门下拉树结构 */
        projectGetList().then((response) => {
          this.data = response.data;
          this.dXData = response.data;
          return;
        });
        // /** 查询部门下拉树结构 */
        // projectGetList().then((response) => {
        //   this.treedataList = response.data.list;
        //   this.dXData = response.data.list;
        //   return;
        // });
      } else {
        this.$message.warning("已过期请重新预约");
      }
    },
    changeCategoryKeys(val) {
      this.proIds = [];
      this.proIds = val;
    },
    /** 修改详细按钮操作 */
    handleUpdate1(row) {
@@ -1201,7 +1894,9 @@
        this.tijiao1 = false;
      }
      this.drawer1 = true;
      this.discount = this.formIn.discount;
      if (this.formIn.discount != null) {
        this.discount = this.formIn.discount;
      }
      //全部套餐
      if (this.formIn.sex != null) {
        let cusSex = this.formIn.sex;
@@ -1239,41 +1934,47 @@
          this.loading = false;
        });
      }
      let cusId = this.formIn.idCard;
      let id = this.formIn.id;
      this.list1 = true;
      (this.tableData1 = []),
        (this.newpacName = []),
        getTransitionList(cusId).then((response) => {
        getReservation(id).then((response) => {
          if (response.data) {
            this.tableData1 = response.data;
            if (this.tableData1.length != 0) {
              this.TotalPrice1 = 0;
              this.tableData1.forEach((item) => {
                this.TotalPrice1 += item.nowPrice;
                this.TotalPrice = (
                  this.TotalPrice1 *
                  (this.discount / 10)
                ).toFixed(2);
                if (item.pacName === null) {
                  item.pacName = "单项";
            let cusId = response.data.idCard;
            getTransitionList1(cusId).then((response) => {
              if (response.data) {
                this.tableData1 = response.data;
                if (this.tableData1.length != 0) {
                  this.TotalPrice1 = 0;
                  this.tableData1.forEach((item) => {
                    this.TotalPrice1 += item.nowPrice;
                    this.TotalPrice = (
                      this.TotalPrice1 *
                      (this.discount / 10)
                    ).toFixed(2);
                    if (item.pacName === null) {
                      item.pacName = "单项";
                    }
                  });
                  this.list1 = false;
                  this.list3 = true;
                } else {
                  this.list1 = true;
                }
              });
              this.list1 = false;
              this.list3 = true;
            } else {
              this.list1 = true;
            }
          } else {
            this.tableData1 = [];
            this.list3 = false;
            this.list1 = true;
              } else {
                this.tableData1 = [];
                this.list3 = false;
                this.list1 = true;
              }
            });
          }
        });
      /** 查询部门下拉树结构 */
      projectGetList().then((response) => {
        this.data = response.data;
        this.dXData = response.data;
        this.treedataList = response.data.list;
        this.dXData = response.data.list;
        return;
      });
    },
@@ -1282,6 +1983,11 @@
    numberChange(currentValue, oldValue) {
      this.discount = currentValue;
      this.TotalPrice = (this.TotalPrice1 * (this.discount / 10)).toFixed(2);
    },
    Package() {
      this.taocan = true;
      this.datekey = Date.now();
    },
    /** 搜索操作 */
@@ -1312,9 +2018,9 @@
      this.multiple = !selection.length;
      if (selection[0]) {
        this.DataList = [];
        this.data = JSON.parse(JSON.stringify(this.dXData));
        this.treedataList = JSON.parse(JSON.stringify(this.dXData));
        selection[0].tjProjectList.forEach((selectionitem) => {
          this.data.forEach((item) => {
          this.treedataList.forEach((item) => {
            if (selectionitem.proName == item.proName) {
              item.disabled = true;
              item.tjProjectList = [];
@@ -1338,9 +2044,146 @@
          });
        });
      } else {
        this.data = JSON.parse(JSON.stringify(this.dXData));
        this.treedataList = JSON.parse(JSON.stringify(this.dXData));
        return;
      }
    },
    Groupsignin() {
      this.open2 = true;
    },
    submitType() {
      // let cusIds = [];
      // this.selectList.forEach((item) => {
      //   cusIds.push(item.idCard);
      // });
      let loadingInstance1 = Loading.service({
        fullscreen: true,
        text: "签到中",
      });
      let data = {
        cusIds: this.cusIds,
        tjCategory: this.forms.tjCategory,
      };
      this.open2 = false;
      addPlOrderAndDetail(data).then((res) => {
        if (res.code == 200) {
          this.open2 = false;
          this.$modal.msgSuccess("签到成功");
          if (res.file) {
            let base64 = res.file;
            this.base64ToBlob({
              b64data: base64,
              contentType: "application/pdf",
            }).then((res) => {
              this.dialogVisible = true;
              // 转后后的blob对象
              try {
                this.url = res.preview;
              } catch (error) {
                this.url = window.webkitURL.createObjectURL(res.preview);
              }
            });
          } else {
            let _this = this;
            this.$nextTick(() => {
              // 以服务的方式调用的 Loading 需要异步关闭
              loadingInstance1.close();
            });
            var websocket = null;
            var url = _this.valueUrls;
            if ("WebSocket" in window) {
              websocket = new WebSocket(url);
            } else if ("MozWebSocket" in window) {
              websocket = new MozWebSocket(url);
            } else {
            }
            if (websocket == null) {
              alert("11111");
            }
            websocket.onopen = function () {
              console.log("res", res);
              try {
                // 连接设备
                var jsonObjs = {
                  type: 4,
                  data: res,
                };
                var jStrs = JSON.stringify(jsonObjs);
                websocket.send(jStrs);
              } catch (err) {
                var tryTime = 0;
                // 重试10次,每次之间间隔3秒
                if (tryTime < 1) {
                  var t1 = setTimeout(function () {
                    tryTime++;
                    var jsonObjs = {
                      type: 4,
                      data: res,
                    };
                    var jStrs = JSON.stringify(jsonObjs);
                    websocket.send(jStrs);
                  }, 1 * 1000);
                } else {
                  console.error("重连失败.");
                }
              }
            };
            websocket.onclose = function () {
              alert("连接关闭");
            };
            websocket.onmessage = function (event) {
              var resultObj = JSON.parse(event.data);
              _this.cardreader = false;
            };
            //连接发生错误的回调方法
            websocket.onerror = function () {
              alert("请检查连接是否正常");
            };
            this.getList();
          }
        } else {
          this.$nextTick(() => {
            // 以服务的方式调用的 Loading 需要异步关闭
            loadingInstance1.close();
          });
        }
      });
    },
    base64ToBlob({ b64data = "", contentType = "", sliceSize = 512 } = {}) {
      return new Promise((resolve, reject) => {
        // 使用 atob() 方法将数据解码
        let byteCharacters = atob(b64data);
        let byteArrays = [];
        for (
          let offset = 0;
          offset < byteCharacters.length;
          offset += sliceSize
        ) {
          let slice = byteCharacters.slice(offset, offset + sliceSize);
          let byteNumbers = [];
          for (let i = 0; i < slice.length; i++) {
            byteNumbers.push(slice.charCodeAt(i));
          }
          // 8 位无符号整数值的类型化数组。内容将初始化为 0。
          // 如果无法分配请求数目的字节,则将引发异常。
          byteArrays.push(new Uint8Array(byteNumbers));
        }
        let result = new Blob(byteArrays, {
          type: contentType,
        });
        result = Object.assign(result, {
          // jartto: 这里一定要处理一下 URL.createObjectURL
          preview: URL.createObjectURL(result),
          // name: `图片示例.png`,
        });
        resolve(result);
      });
    },
    // 点击获取每个树节点
@@ -1362,8 +2205,7 @@
    receipt() {
      setTimeout(function () {
        const style =
          "@media print { @page{margin:0 10mm,size:4mm 6mm;}};"; //打印时去掉眉页眉尾
        const style = "@media print { @page{margin:0 10mm,size:4mm 6mm;}};"; //打印时去掉眉页眉尾
        printJS({
          printable: "printBill", // 标签元素id
          type: "html",
@@ -1436,91 +2278,91 @@
    // 最后提交按钮
    submitPrice() {
      let _this = this;
      if (_this.tableData1.length > 0) {
        if (this.tableData[0]) {
          var pacId = this.tableData[0].pacId;
        }
        // let copeWith = this.TotalPrice1;
        // let paidIn = this.TotalPrice;
        // let discount = this.discount;
        // this.tjFlowingWater = { copeWith, paidIn, discount };
        if (this.formIn.timeRegion === "8:00-9:00") {
          this.formIn.timeRegion = 0;
        }
        if (this.formIn.timeRegion === "9:00-10:00") {
          this.formIn.timeRegion = 1;
        }
        if (this.formIn.timeRegion === "10:00-11:00") {
          this.formIn.timeRegion = 2;
        }
        if (this.formIn.timeRegion === "11:00-12:00") {
          this.formIn.timeRegion = 3;
        }
        let data;
        if (pacId) {
          data = {
            id: this.formIn.id,
            isExpire: this.formIn.isExpire,
            address: this.formIn.address,
            company: this.formIn.company,
            department: this.formIn.department,
            discount: this.discount,
            email: this.formIn.email,
            idCard: this.formIn.idCard,
            marriage: this.formIn.marriage,
            name: this.formIn.name,
            nation: this.formIn.nation,
            pacId,
            phoe: this.formIn.cusPhone,
            reservationTime: this.formIn.reservationTime,
            sex: this.formIn.sex,
            timeRegion: this.formIn.timeRegion,
            tjCategory: this.formIn.tjCategory,
            // tjFlowingWater: this.tjFlowingWater,
            tjType: this.formIn.tjType,
            idType: this.formIn.idType,
            age: this.formIn.age,
            ageUnit: this.formIn.ageUnit,
            career: this.formIn.career,
          };
        } else {
          data = {
            id: this.formIn.id,
            isExpire: this.formIn.isExpire,
            address: this.formIn.address,
            company: this.formIn.company,
            department: this.formIn.department,
            discount: this.discount,
            email: this.formIn.email,
            idCard: this.formIn.idCard,
            marriage: this.formIn.marriage,
            name: this.formIn.name,
            nation: this.formIn.nation,
            pacId,
            phoe: this.formIn.phoe,
            reservationTime: this.formIn.reservationTime,
            sex: this.formIn.sex,
            timeRegion: this.formIn.timeRegion,
            tjCategory: this.formIn.tjCategory,
            // tjFlowingWater: this.tjFlowingWater,
            tjType: this.formIn.tjType,
            idType: this.formIn.idType,
            age: this.formIn.age,
            ageUnit: this.formIn.ageUnit,
            career: this.formIn.career,
          };
        }
        tjReappoint(data).then((res) => {
          if (res.code === 200) {
            this.$modal.msgSuccess("登记成功");
          }
          _this.drawer = false;
        });
        this.getList();
        this.$tab.refreshPage();
      } else {
        this.$message.warning("请选择您要体检的内容");
      // if (_this.tableData1.length > 0) {
      if (this.tableData[0]) {
        var pacId = this.tableData[0].pacId;
      }
      // let copeWith = this.TotalPrice1;
      // let paidIn = this.TotalPrice;
      // let discount = this.discount;
      // this.tjFlowingWater = { copeWith, paidIn, discount };
      if (this.formIn.timeRegion === "8:00-9:00") {
        this.formIn.timeRegion = 0;
      }
      if (this.formIn.timeRegion === "9:00-10:00") {
        this.formIn.timeRegion = 1;
      }
      if (this.formIn.timeRegion === "10:00-11:00") {
        this.formIn.timeRegion = 2;
      }
      if (this.formIn.timeRegion === "11:00-12:00") {
        this.formIn.timeRegion = 3;
      }
      let data;
      if (pacId) {
        data = {
          id: this.formIn.id,
          isExpire: this.formIn.isExpire,
          address: this.formIn.address,
          company: this.formIn.company,
          department: this.formIn.department,
          discount: this.discount,
          email: this.formIn.email,
          idCard: this.formIn.idCard,
          marriage: this.formIn.marriage,
          name: this.formIn.name,
          nation: this.formIn.nation,
          pacId,
          phoe: this.formIn.cusPhone,
          reservationTime: this.formIn.reservationTime,
          sex: this.formIn.sex,
          timeRegion: this.formIn.timeRegion,
          tjCategory: this.formIn.tjCategory,
          // tjFlowingWater: this.tjFlowingWater,
          tjType: this.formIn.tjType,
          idType: this.formIn.idType,
          age: this.formIn.age,
          ageUnit: this.formIn.ageUnit,
          career: this.formIn.career,
        };
      } else {
        data = {
          id: this.formIn.id,
          isExpire: this.formIn.isExpire,
          address: this.formIn.address,
          company: this.formIn.company,
          department: this.formIn.department,
          discount: this.discount,
          email: this.formIn.email,
          idCard: this.formIn.idCard,
          marriage: this.formIn.marriage,
          name: this.formIn.name,
          nation: this.formIn.nation,
          pacId,
          phoe: this.formIn.phoe,
          reservationTime: this.formIn.reservationTime,
          sex: this.formIn.sex,
          timeRegion: this.formIn.timeRegion,
          tjCategory: this.formIn.tjCategory,
          // tjFlowingWater: this.tjFlowingWater,
          tjType: this.formIn.tjType,
          idType: this.formIn.idType,
          age: this.formIn.age,
          ageUnit: this.formIn.ageUnit,
          career: this.formIn.career,
        };
      }
      tjReappoint(data).then((res) => {
        if (res.code === 200) {
          this.$modal.msgSuccess("预约成功");
        }
        _this.drawer = false;
      });
      this.getList();
      this.$tab.refreshPage();
      // } else {
      //   this.$message.warning("请选择您要体检的内容");
      // }
    },
    // 最后提交按钮
    submitPrice1() {
@@ -1751,6 +2593,13 @@
  border-radius: 2em;
}
.dialog-footer2 {
  width: 960px;
  height: 36px;
  display: flex;
  justify-content: center;
}
/* 修改 滑块 */
#printIframe::-webkit-scrollbar-thumb {
  background-color: #dcdfe6;