<template> 
 | 
  <GlobalWindow 
 | 
    :title="title" 
 | 
    width="70%" 
 | 
    :visible.sync="visible" 
 | 
    append-to-body 
 | 
    :confirm-working="isWorking" 
 | 
    @confirm="confirm" 
 | 
  > 
 | 
    <div class="list"> 
 | 
      <div class="list_item"> 
 | 
        <div class="list_item_label">拜访信息</div> 
 | 
        <div class="list_item_val" v-if="info" style="display: inline-block"> 
 | 
          <div class="list_item_val_item"> 
 | 
            拜访对方:{{ info.receptMemberName }} - 
 | 
            {{ info.receptMemberDepartment }} 
 | 
          </div> 
 | 
          <div class="list_item_val_item"> 
 | 
            预约时间:{{ info.starttime }} 至 {{ info.endtime }} 
 | 
          </div> 
 | 
          <div class="list_item_val_item" v-if="info.inDate && info.outDate"> 
 | 
            签到时间:{{ info.inDate }} 至 {{ info.outDate }} 
 | 
          </div> 
 | 
          <div class="list_item_val_item" v-else>签到时间:-</div> 
 | 
          <div class="list_item_val_item">拜访事由:{{ info.reason }}</div> 
 | 
          <div class="list_item_val_item"> 
 | 
            申请人员:{{ info.name }} {{ info.companyName }} 
 | 
          </div> 
 | 
          <div class="list_item_val_item"> 
 | 
            申请门禁:{{ 
 | 
              info.deviceRoleList 
 | 
                ? info.deviceRoleList.map((item) => item.name).join(" | ") 
 | 
                : "-" 
 | 
            }} 
 | 
          </div> 
 | 
          <div class="list_item_val_item">创建时间:{{ info.createDate }}</div> 
 | 
        </div> 
 | 
        <div 
 | 
          class="list_item_val" 
 | 
          v-if="info" 
 | 
          style="display: inline-block; float: right" 
 | 
        > 
 | 
          <div class="list_item_val_item" id="qrcode2" ref="qrcode2"></div> 
 | 
        </div> 
 | 
      </div> 
 | 
      <div class="list_item"> 
 | 
        <div class="list_item_label">访客信息</div> 
 | 
        <div class="list_item_table" v-if="info"> 
 | 
          <el-table 
 | 
            :data="info.withUserList ? info.withUserList : []" 
 | 
            border 
 | 
            :header-cell-style="{ 
 | 
              background: '#dcdde2', 
 | 
              color: 'rgb(51, 51, 51)', 
 | 
            }" 
 | 
            style="width: 100%" 
 | 
          > 
 | 
            <el-table-column prop="status" label="状态" min-width="100px"> 
 | 
              <template slot-scope="{ row }"> 
 | 
                <span 
 | 
                  style="color: rgba(245, 154, 35, 0.996)" 
 | 
                  v-if="row.status === 0" 
 | 
                  >待提交审批</span 
 | 
                > 
 | 
                <span v-if="row.status === 1">审批中</span> 
 | 
                <span v-if="row.status === 2">审核通过</span> 
 | 
                <span style="color: red" v-if="row.status === 3" 
 | 
                  >审核不通过</span 
 | 
                > 
 | 
                <span v-if="row.status === 4">取消</span> 
 | 
                <span v-if="row.status === 5">预约成功</span> 
 | 
                <span v-if="row.status === 6">预约失败</span> 
 | 
                <span v-if="row.status === 7">已登记</span> 
 | 
                <span v-if="row.status === 8">已签离</span> 
 | 
                <span v-if="row.status === 9">已失效</span> 
 | 
              </template> 
 | 
            </el-table-column> 
 | 
            <el-table-column width="150" label="姓名"> 
 | 
              <template slot-scope="{ row }"> 
 | 
                <span>{{ row.name }}</span> 
 | 
                <span 
 | 
                  style=" 
 | 
                    border-radius: 5px; 
 | 
                    padding: 2px 5px; 
 | 
                    box-sizing: border-box; 
 | 
                    border: 1px solid #0d68ff; 
 | 
                    color: #0d68ff; 
 | 
                    margin-left: 5px; 
 | 
                  " 
 | 
                  v-if="info.memberId === row.memberId" 
 | 
                  >申请人</span 
 | 
                > 
 | 
              </template> 
 | 
            </el-table-column> 
 | 
            <el-table-column label="性别"> 
 | 
              <template slot-scope="{ row }"> 
 | 
                <span v-if="row.sex === 1">男</span> 
 | 
                <span v-if="row.sex === 2">女</span> 
 | 
              </template> 
 | 
            </el-table-column> 
 | 
            <el-table-column prop="birthday" label="年龄"> 
 | 
              <template slot-scope="{ row }"> 
 | 
                <span>{{ getAge(row.birthday) }}</span> 
 | 
              </template> 
 | 
            </el-table-column> 
 | 
            <el-table-column width="150" prop="phone" label="手机号"> 
 | 
            </el-table-column> 
 | 
            <el-table-column label="证件类型"> 
 | 
              <template slot-scope="{ row }"> 
 | 
                <span v-if="row.idcardType === 0">身份证</span> 
 | 
                <span v-if="row.idcardType === 1">港澳证件</span> 
 | 
                <span v-if="row.idcardType === 2">护照</span> 
 | 
              </template> 
 | 
            </el-table-column> 
 | 
            <el-table-column width="160" prop="idcardDecode" label="身份证号码"> 
 | 
            </el-table-column> 
 | 
            <el-table-column width="150" prop="companyName" label="组织"> 
 | 
            </el-table-column> 
 | 
            <el-table-column width="150" prop="carNos" label="随行车辆"> 
 | 
            </el-table-column> 
 | 
            <el-table-column width="150" label="访客二维码"> 
 | 
              <template slot-scope="{ row }"> 
 | 
                <div :id="`qrcode${row.id}`" :ref="`qrcode${row.id}`"></div> 
 | 
              </template> 
 | 
            </el-table-column> 
 | 
            <el-table-column width="150" label="人脸照片"> 
 | 
              <template slot-scope="{ row }"> 
 | 
                <el-image 
 | 
                  v-if="row.faceImg" 
 | 
                  style="width: 100px; height: 100px" 
 | 
                  :src="info.prefixUrl + row.faceImg" 
 | 
                  :preview-src-list="[info.prefixUrl + row.faceImg]" 
 | 
                > 
 | 
                </el-image> 
 | 
              </template> 
 | 
            </el-table-column> 
 | 
            <el-table-column width="150" label="健康证"> 
 | 
              <template slot-scope="{ row }"> 
 | 
                <el-image 
 | 
                  v-if="row.imgurl" 
 | 
                  style="width: 100px; height: 100px" 
 | 
                  :src="info.prefixUrl + row.imgurl" 
 | 
                  :preview-src-list="[info.prefixUrl + row.imgurl]" 
 | 
                > 
 | 
                </el-image> 
 | 
              </template> 
 | 
            </el-table-column> 
 | 
          </el-table> 
 | 
        </div> 
 | 
      </div> 
 | 
      <!--            <div class="list_item">--> 
 | 
      <!--                <div class="list_item_label">审批流程</div>--> 
 | 
      <!--                <div class="list_item_status">--> 
 | 
      <!--                    <div class="list_item_status_item" v-for="(item, index) in 3" :key="index">--> 
 | 
      <!--                        <div class="dian"></div>--> 
 | 
      <!--                        <div class="xian"></div>--> 
 | 
      <!--                        <div class="status_info">--> 
 | 
      <!--                            <span class="status_info_a">张三提交的劳务在园申请</span>--> 
 | 
      <!--                            <span class="status_info_b">王经理(已同意)</span>--> 
 | 
      <!--                            <div class="status_info_c">来访参观工厂,望领导批准</div>--> 
 | 
      <!--                        </div>--> 
 | 
      <!--                    </div>--> 
 | 
      <!--                </div>--> 
 | 
      <!--            </div>--> 
 | 
    </div> 
 | 
  </GlobalWindow> 
 | 
</template> 
 | 
  
 | 
<script> 
 | 
import BaseOpera from '@/components/base/BaseOpera' 
 | 
import GlobalWindow from '@/components/common/GlobalWindow' 
 | 
import { queryById } from '@/api/business/visits' 
 | 
import QRCode from "qrcodejs2" 
 | 
export default { 
 | 
  name: 'OperaVisitsWindow', 
 | 
  extends: BaseOpera, 
 | 
  components: { GlobalWindow }, 
 | 
  data() { 
 | 
    return { 
 | 
      list: [], 
 | 
      info: null, 
 | 
      innerVisible: false 
 | 
    } 
 | 
  }, 
 | 
  created() { 
 | 
  }, 
 | 
  methods: { 
 | 
    getAge(val) { 
 | 
      if (!val) return '' 
 | 
      const currentYear = new Date().getFullYear() // 当前的年份 
 | 
      const calculationYear = new Date(val).getFullYear() // 计算的年份 
 | 
      const wholeTime = currentYear + val.substring(4) // 周岁时间 
 | 
      const calculationAge = currentYear - calculationYear // 按照年份计算的年龄 
 | 
      // 判断是否过了生日 
 | 
      if (new Date().getTime() > new Date(wholeTime).getTime()) { 
 | 
        return calculationAge 
 | 
      } else { 
 | 
        return calculationAge - 1 
 | 
      } 
 | 
    }, 
 | 
    crateQrcodeShow(div, qrcode1) { 
 | 
      if (qrcode1 == null || qrcode1 == '') { 
 | 
        return 
 | 
      } 
 | 
      this.qr = new QRCode(div, { 
 | 
        width: 90, 
 | 
        height: 90, 
 | 
        text: qrcode1 
 | 
      }) 
 | 
    }, 
 | 
  
 | 
    open(title, id) { 
 | 
      this.title = title 
 | 
      this.visible = true 
 | 
      queryById(id) 
 | 
        .then(res => { 
 | 
          console.log(res) 
 | 
          this.info = res 
 | 
          this.$nextTick(() => { 
 | 
            // this.$refs.qrcode2.innerHTML = '' 
 | 
            // this.crateQrcodeShow('qrcode2',res.qrcode) 
 | 
            if (this.info.withUserList) { 
 | 
              this.info.withUserList.forEach(row => { 
 | 
                this.$refs['qrcode' + row.id].innerHTML = '' 
 | 
                this.crateQrcodeShow('qrcode' + row.id, row.qrcode) 
 | 
              }) 
 | 
            } 
 | 
          }) 
 | 
        }) 
 | 
    } 
 | 
  } 
 | 
} 
 | 
</script> 
 | 
<style> 
 | 
.el-image-viewer__wrapper { 
 | 
  z-index: 3000 !important; 
 | 
} 
 | 
</style> 
 | 
<style lang="scss" scoped> 
 | 
.list { 
 | 
  width: 100%; 
 | 
  display: flex; 
 | 
  flex-direction: column; 
 | 
  .list_item { 
 | 
    width: 100%; 
 | 
    margin-bottom: 30px; 
 | 
    &:last-child { 
 | 
      margin-bottom: 0 !important; 
 | 
    } 
 | 
    .list_item_label { 
 | 
      font-size: 18px; 
 | 
      font-weight: 600; 
 | 
      color: #000000; 
 | 
      margin-bottom: 15px; 
 | 
    } 
 | 
    .list_item_info { 
 | 
      font-size: 14px; 
 | 
      color: #222222; 
 | 
      margin-bottom: 10px; 
 | 
    } 
 | 
    .list_item_status { 
 | 
      width: 100%; 
 | 
      display: flex; 
 | 
      flex-direction: column; 
 | 
      .list_item_status_item { 
 | 
        width: 100%; 
 | 
        max-height: 100px; 
 | 
        position: relative; 
 | 
        margin-bottom: 30px; 
 | 
        .dian { 
 | 
          width: 15px; 
 | 
          height: 15px; 
 | 
          border-radius: 50%; 
 | 
          background: #ffb447; 
 | 
          position: absolute; 
 | 
          left: 0; 
 | 
          top: 50%; 
 | 
          transform: translate(0, -50%); 
 | 
        } 
 | 
        .xian { 
 | 
          width: 1px; 
 | 
          height: calc(100% + 30px); 
 | 
          background: #ffb447; 
 | 
          position: absolute; 
 | 
          top: 50%; 
 | 
          left: 7px; 
 | 
          transform: translate(-50%, 0); 
 | 
        } 
 | 
        .status_info { 
 | 
          /*width: 100%;*/ 
 | 
          height: 100%; 
 | 
          display: flex; 
 | 
          flex-direction: column; 
 | 
          margin-left: 30px; 
 | 
          box-sizing: border-box; 
 | 
          .status_info_a { 
 | 
            font-size: 16px; 
 | 
            color: black; 
 | 
            margin-bottom: 10px; 
 | 
          } 
 | 
          .status_info_b { 
 | 
            font-size: 13px; 
 | 
            color: #666666; 
 | 
            margin-bottom: 10px; 
 | 
          } 
 | 
          .status_info_c { 
 | 
            padding: 5px 10px; 
 | 
            background: #ececec; 
 | 
            font-size: 13px; 
 | 
            color: black; 
 | 
            border-radius: 5px; 
 | 
            box-sizing: border-box; 
 | 
          } 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
    .list_item_val { 
 | 
      width: 100%; 
 | 
      margin-bottom: 15px; 
 | 
      &:last-child { 
 | 
        margin-bottom: 0 !important; 
 | 
      } 
 | 
      .list_item_val_item { 
 | 
        font-size: 14px; 
 | 
        color: #222222; 
 | 
        margin-bottom: 5px; 
 | 
        &:last-child { 
 | 
          margin-bottom: 0 !important; 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
  } 
 | 
} 
 | 
</style> 
 |