<template> 
 | 
  <div class="bsb"> 
 | 
    <div class="bsb_box"> 
 | 
      <div class="bsb_box_item"> 
 | 
        <span>设备编码</span> 
 | 
        <span>{{info.code}}</span> 
 | 
      </div> 
 | 
      <div class="bsb_box_item"> 
 | 
        <span>设备名称</span> 
 | 
        <span>{{info.name}}</span> 
 | 
      </div> 
 | 
      <div class="bsb_box_item"> 
 | 
        <span>设备型号</span> 
 | 
        <span>{{info.model}}</span> 
 | 
      </div> 
 | 
      <div class="bsb_box_item"> 
 | 
        <span>关联用户</span> 
 | 
        <span>{{store.state.userInfo.realname}}/{{store.state.userInfo.companyUser.dmodel.name}}</span> 
 | 
      </div> 
 | 
    </div> 
 | 
    <div class="bsb_footer"> 
 | 
      <div class="bsb_footer_jx" @click="continueScanning">重新扫码</div> 
 | 
      <div class="bsb_footer_tj" @click="submit">提交</div> 
 | 
    </div> 
 | 
    <v-ScanCode 
 | 
        :openCode="openCode" 
 | 
        :infos="['请扫描设备码']" 
 | 
        @closePopup="closePopup" 
 | 
        @onDecode="onDecode" /> 
 | 
  </div> 
 | 
</template> 
 | 
  
 | 
<script setup lang="ts"> 
 | 
  import { ref, onMounted, nextTick } from 'vue' 
 | 
  import { useRoute, useRouter } from "vue-router" 
 | 
  import { useStore } from "vuex" 
 | 
  import { QRCodeType } from '@/enum' 
 | 
  import { Toast } from 'vant' 
 | 
  import { getSbInfo, getBarcodeContent, bindingDevice } from '@/apis/WorkOrderAPI' 
 | 
  import vScanCode from '@/components/common/ScanCode.vue' 
 | 
  
 | 
  const route = useRoute() 
 | 
  
 | 
  const router = useRouter() 
 | 
  
 | 
  const store = useStore() 
 | 
  
 | 
  let openCode = ref<boolean>(false) 
 | 
  
 | 
  let info: any = ref({}) 
 | 
  
 | 
  const closePopup = () => { 
 | 
      openCode.value = false 
 | 
  } 
 | 
  
 | 
  // 扫码回调 
 | 
  const onDecode = (data: string[]): void => { 
 | 
      nextTick(() => { 
 | 
          openCode.value = false 
 | 
      }) 
 | 
      getBarcodeContent({ 
 | 
          barcode: data[0] 
 | 
      }).then(res => { 
 | 
          if (res.code === 200 && res.data.barcodeType === QRCodeType.SB) { 
 | 
              getInfo(res.data.id) 
 | 
          } else { 
 | 
              Toast({ message: '请扫描正确的设备码' }) 
 | 
          } 
 | 
      }) 
 | 
  } 
 | 
  
 | 
  //重新扫码 
 | 
  const continueScanning = () => { 
 | 
      openCode.value = true 
 | 
  } 
 | 
  
 | 
  // 互殴设备信息 
 | 
  const getInfo = (id: string) => { 
 | 
      getSbInfo(id) 
 | 
        .then(res => { 
 | 
            if (res.code === 200) { 
 | 
                info.value = res.data 
 | 
            } 
 | 
        }) 
 | 
  } 
 | 
  
 | 
  // 提交 
 | 
  const submit = () => { 
 | 
      bindingDevice({ 
 | 
          deviceId: info.value.id, 
 | 
          userIds: store.state.userInfo.companyUser.id 
 | 
      }).then(res => { 
 | 
          if (res.code === 200) { 
 | 
              Toast.success({ message: '绑定成功', duration: 2000, forbidClick: true }) 
 | 
              setTimeout(() => { 
 | 
                  router.go(-1) 
 | 
              }, 2000) 
 | 
          } 
 | 
      }) 
 | 
  } 
 | 
  
 | 
  onMounted(() => { 
 | 
      let id: any = route.query.id 
 | 
      getInfo(id) 
 | 
  }) 
 | 
</script> 
 | 
  
 | 
<style lang="scss" scoped> 
 | 
.bsb { 
 | 
  width: 100%; 
 | 
  height: 100%; 
 | 
  position: absolute; 
 | 
  background: #F7F7F7; 
 | 
  .bsb_box { 
 | 
    padding: 0 30px; 
 | 
    background: white; 
 | 
    .bsb_box_item { 
 | 
      height: 98px; 
 | 
      display: flex; 
 | 
      align-items: center; 
 | 
      justify-content: space-between; 
 | 
      border-bottom: 1px solid #E5E5E5; 
 | 
      &:last-child { 
 | 
        border: none; 
 | 
      } 
 | 
      span { 
 | 
        &:nth-child(1) { 
 | 
          font-size: 30px; 
 | 
          font-weight: 400; 
 | 
          color: #222222; 
 | 
        } 
 | 
        &:nth-child(2) { 
 | 
          font-size: 28px; 
 | 
          font-weight: 400; 
 | 
          color: #333333; 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
  } 
 | 
  .bsb_footer { 
 | 
    position: fixed; 
 | 
    bottom: 0; 
 | 
    width: 100%; 
 | 
    padding: 0 30px 68px 30px; 
 | 
    box-sizing: border-box; 
 | 
    display: flex; 
 | 
    align-items: center; 
 | 
    justify-content: space-between; 
 | 
    .bsb_footer_jx { 
 | 
      width: 334px; 
 | 
      height: 88px; 
 | 
      background: #FFFFFF; 
 | 
      box-shadow: 0 0 12px 0 rgba(0, 0, 0, 0.08); 
 | 
      border-radius: 8px; 
 | 
      color: $nav-color; 
 | 
      display: flex; 
 | 
      align-items: center; 
 | 
      justify-content: center; 
 | 
      font-size: 30px; 
 | 
      font-weight: 500; 
 | 
    } 
 | 
    .bsb_footer_tj { 
 | 
      width: 334px; 
 | 
      height: 88px; 
 | 
      background: $nav-color; 
 | 
      box-shadow: 0 0 12px 0 rgba(0, 0, 0, 0.08); 
 | 
      border-radius: 8px; 
 | 
      font-size: 30px; 
 | 
      font-weight: 500; 
 | 
      color: #FFFFFF; 
 | 
      display: flex; 
 | 
      align-items: center; 
 | 
      justify-content: center; 
 | 
    } 
 | 
  } 
 | 
} 
 | 
</style> 
 |