Newer
Older
IntegratedFront / src / components / ScanSampleDialog / index.vue
lyg on 1 Nov 4 KB first
<!-- 扫描操作弹窗 -->
<script setup lang="ts" name="BarCodeBind">
import { ref } from 'vue'
import { ElMessageBox } from 'element-plus'
import type { ISampleScan } from './scan-interface'
import scanImg from '@/assets/images/scan.png'
// 扫描状态,未开始0,正在扫描1,扫描结束2

const props = defineProps({
  // 对话框标题
  title: {
    type: String,
    default: '扫描收入',
  },
})
const emits = defineEmits(['confirm'])
const dialogVisible = ref(false) // 弹窗显示
const scanStatus = ref('0')

// 扫描到的标签列表
const list = ref<ISampleScan[]>([])

const closeDialog = () => {
  dialogVisible.value = false
}

// 点击确定,保存选择的成员配置
const confirm = () => {
  ElMessageBox.confirm(
    `确认${props.title}列表中全部样品吗?`,
    '提示',
    { confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning' },
  ).then(() => {
    emits('confirm', list.value)
  })
}

// 扫描/ 重新扫描
const scan = () => {
  // 扫描到的标签及样品信息列表
  list.value = [
    { sampleNo: '1yp123456', sampleName: '压力表', orderNo: 'wtd123456', customerNo: 'kh123456', customerName: '北京无线电测量研究所', sampleModel: 'JBT-011', manufacturingNo: '24432231124', sampleId: '1', orderId: '123', labelBind: '12345648' },
    { sampleNo: '1yp123457', sampleName: '压力表', orderNo: 'wtd123456', customerNo: 'kh123456', customerName: '北京无线电测量研究所', sampleModel: 'JBT-011', manufacturingNo: '24432231124', sampleId: '1', orderId: '123', labelBind: '12345648' },
  ]
  scanStatus.value = '2'
}
// 重新扫描
const reScan = () => {
  scanStatus.value = '1'
  setTimeout(() => {
    scan()
  }, 3000)
}
const deleteRow = (index: number) => {
  list.value.splice(index, 1)
}
/**
 * 打开弹窗
 * @param sampleid 样品id, 需要在弹窗内完成绑定操作的传, 不需要传空字符串
 */
const initDialog = () => {
  scanStatus.value = '1'
  setTimeout(() => {
    scan()
  }, 3000)
  dialogVisible.value = true
}
// ----定义对外暴露的方法 初始化弹窗, 关闭弹窗
defineExpose({ initDialog, closeDialog })
</script>

<template>
  <el-dialog v-model="dialogVisible" :title="title" width="1000px" append-to-body>
    <div style="margin-top: -20px;width: 100%;">
      <div v-if="scanStatus === '1'" class="wait-scan">
        <div>请使用扫码枪扫描样品标签</div>
        <el-image :src="scanImg" class="scan-img" />
      </div>
      <!-- 扫描结果 -->
      <div v-else-if="scanStatus === '2'">
        <div>
          扫描到 {{ list.length }} 个样品{{ list.length > 1 ? ',请移除不需要绑定的样品。' : '' }}
        </div>
        <el-table ref="multipleTableRef" :data="list" style="width: 100%;margin-top: 10px;" border stripe>
          <el-table-column type="index" label="序号" width="55" align="center" />
          <el-table-column prop="sampleNo" label="样品编号" align="center" />
          <el-table-column prop="sampleName" label="样品名称" align="center" />
          <el-table-column prop="sampleModel" label="型号" align="center" />
          <el-table-column prop="manufacture" label="出厂编号" align="center" />
          <el-table-column prop="orderNo" label="委托书编号" align="center" />
          <el-table-column prop="customerNo" label="委托方代码" align="center" />
          <el-table-column prop="customerName" label="委托方名称" align="center" />
          <el-table-column prop="labelBind" label="标签信息" align="center" />
          <el-table-column prop="labelBind" label="操作" align="center" width="60px">
            <template #default="scope">
              <el-button size="small" link type="primary" @click="deleteRow (scope.$index)">
                删除
              </el-button>
            </template>
          </el-table-column>
        </el-table>
      </div>
    </div>
    <!-- </div> -->
    <template #footer>
      <el-button v-if="scanStatus === '2'" type="primary" @click="reScan">
        重新扫描
      </el-button>
      <el-button @click="closeDialog">
        取 消
      </el-button>
      <el-button type="primary" @click="confirm">
        确 定
      </el-button>
    </template>
  </el-dialog>
</template>

<style lang="scss">
.wait-scan {
  font-size: 18px;
  font-weight: bold;
  text-align: center;
  line-height: 3;

  .scan-img {
    margin-top: 20px;
    width: 128px;
    height: 128px;
  }
}
</style>