YangYuGang
2025-03-11 7462fd192326d7cf3418b6185ca437b2667cbeab
src/views/tigerprojects/wms/createqrcode/index.vue
@@ -1,21 +1,22 @@
/* stylelint-disable rule-empty-line-before */
<template>
  <PageWrapper title="生成二维码" contentFullHeight contentClass="flex">
    <template #headerContent>
      <BasicForm @register="register">
        <template #search="{ field }">
          <Button v-if="field" style="margin-left: 0" @click="onSearch">生成</Button>
          <Button v-if="field" style="margin-left: 10" @click="onSearch">生成</Button>
        </template>
      </BasicForm>
    </template>
    <div class="w-1/4 xl:w-1/5 p-3" style="background-color: white">
      <a-list size="small" bordered :data-source="hisData">
    <div class="w-2/4 xl:w-2/6 p-3" style="background-color: white">
      <a-list size="large" bordered :pagination="pagination" :data-source="hisData">
        <template #renderItem="{ item }">
          <a-list-item>
            <a-list-item-meta description="">
              <template #title>
                <span @click="showQr(item)">{{ item }}</span>
              </template>
            </a-list-item-meta>
            <template #actions>
              <a key="list-loadmore-edit" @click="del(item.key)">删除</a>
            </template>
            <span @click="showQr(item.data)">{{ item.data }}</span>
            <!-- {{ item }} -->
          </a-list-item>
        </template>
        <template #header>
@@ -26,7 +27,7 @@
        </template> -->
      </a-list>
    </div>
    <div class="w-3/4 xl:w-4/5 p-5" v-if="show">
    <div class="w-2/4 xl:w-4/6 p-5">
      <!-- <CollapseContainer title="二维码" class="text-center qrcode-demo-item"></CollapseContainer> -->
      <div class="mb-4 pt-4 text-center" style="width: 99%; background-color: white">
        <QrCode
@@ -39,24 +40,25 @@
          @done="onQrcodeDone"
        />
        <!-- <a-button class="mb-2" type="primary" @click="downloadDiy"> 下载 </a-button> -->
        <!-- <div class="msg">要进行扩展绘制则不能将tag设为img</div> -->
        <span class="mb-5 p-5" style="color: #0780b9">{{ qrCodeUrl }}</span>
      </div>
    </div>
  </PageWrapper>
</template>
<script lang="ts" setup>
  import { onMounted, ref } from 'vue';
  import { onMounted, onUnmounted, ref } from 'vue';
  import { List, ListItem, ListItemMeta } from 'ant-design-vue';
  import { QrCode } from '/@/components/Qrcode/index';
  import LogoImg from '/@/assets/images/logo.png';
  import { CollapseContainer } from '/@/components/Container/index';
  import { GetQrCode } from '/@/api/tigerapi/wms/qrcode';
  import { useMessage } from '/@/hooks/web/useMessage';
  import { PageWrapper } from '/@/components/Page';
  import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
  import { Button } from '/@/components/Button';
  import { useQrhisStore } from '/@/store/modules/qrhis';
  import { storeToRefs } from 'pinia';
  import { buildUUID } from '/@/utils/uuid';
  import printJS from 'print-js';
  import { useWebSocketStore } from '/@/store/modules/websocket';
  const AList = List;
  const AListItem = ListItem;
@@ -80,12 +82,14 @@
    },
  ];
  let qrDatas:any[] = []
  let qrDatas: any[] = [];
  const usewebSocket = useWebSocketStore();
  const useQrhis = useQrhisStore();
  const { hisData } = storeToRefs(useQrhis);
  const { createMessage } = useMessage();
  const show = ref(false);
  const qrCodeUrl = ref('');
  const qrCodeKey = ref('');
  const [register, { validateFields, clearValidate, getFieldsValue, resetFields, setFieldsValue }] =
    useForm({
      showSubmitButton: false,
@@ -105,7 +109,7 @@
      ctx.font = '16px "微软雅黑"';
      ctx.textBaseline = 'bottom';
      ctx.textAlign = 'center';
      ctx.fillText('你帅你先扫', 200, 380, 200);
      ctx.fillText('你帅你先扫', 200, 380, 600);
    }
  }
  async function onSearch({ ctx }: any) {
@@ -113,8 +117,9 @@
    if (barcode.SN != '') {
      show.value = true;
      qrCodeUrl.value = barcode.SN;
      useQrhis.gethisData.push(barcode.SN);
      qrDatas = useQrhis.gethisData
      qrCodeKey.value = buildUUID();
      useQrhis.gethisData.push({ key: qrCodeKey.value, data: qrCodeUrl.value });
      qrDatas = useQrhis.gethisData;
      useQrhis.sethisData(qrDatas);
      // var apiAction = await GetQrCode(barcode.SN)
      // if(apiAction.IsSuccessed){
@@ -127,11 +132,29 @@
      //   qrCodeUrl.value=barcode.SN;
      //   //createMessage.error('条码系统不存在');
      // }
      resetFields();
    } else {
      show.value = false;
      createMessage.error('输入的条码为空');
    }
  }
  const unsubscribe = usewebSocket.$subscribe((mutation, state) => {
    if (state.printTag == qrCodeUrl.value) {
      jsonPrint(state.printJson);
      usewebSocket.SetPrintTag('');
    }
  });
  // 当组件卸载时取消订阅
  onUnmounted(() => {
    unsubscribe();
  });
  /**
   * @description: 显示二维码
   * @param {*} code
   * @return {*}
   */
  async function showQr(code: string) {
    if (code != '') {
      show.value = true;
@@ -141,10 +164,41 @@
      createMessage.error('输入的条码为空');
    }
  }
  /**
   * @description: 删除
   * @param {*} code
   * @return {*}
   */
  function del(code) {
    useQrhis.hisData = useQrhis.gethisData.filter((item) => item.key !== code);
    qrDatas = useQrhis.gethisData;
    useQrhis.sethisData(qrDatas);
  }
  const pagination = {
    onChange: (page: number) => {
      console.log(page);
    },
    pageSize: 10,
  };
  function jsonPrint(option) {
    printJS(option);
  }
</script>
<style scoped>
  .qrcode-demo-item {
    width: 100%;
    margin-right: 1%;
  }
  span {
    display: block;
    width: auto;
    overflow: hidden;
    word-wrap: break-word;
    word-break: normal;
    white-space: pre-wrap;
  }
</style>