index.vue 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <template>
  2. <div class="page-container row-container">
  3. <section class="list-part-container" style="flex: 2">
  4. <el-form class="list-search-container" :model="storageCodeParams" ref="queryRef" :inline="true">
  5. <el-form-item class="section-title" label="存储码管理" />
  6. <el-form-item label="年份:">
  7. <el-input placeholder="请输入年份" clearable style="width: 120px"
  8. v-model.trim="storageCodeParams.year" @keydown.enter.prevent />
  9. </el-form-item>
  10. <el-form-item label="存储码编号:">
  11. <el-input placeholder="请输入存储码编号" clearable style="width: 120px"
  12. v-model.trim="storageCodeParams.code" @keydown.enter.prevent />
  13. </el-form-item>
  14. <el-form-item label="打印状态:">
  15. <el-select placeholder="请选择打印状态" clearable style="width: 140px" v-model.trim="storageCodeParams.isPrint">
  16. <el-option v-for="dict in printStatus" :key="dict.value" :label="dict.label" :value="dict.value" />
  17. </el-select>
  18. </el-form-item>
  19. <el-form-item>
  20. <el-button type="info" icon="Search" @click="handleQueryStorageCode">
  21. 搜索
  22. </el-button>
  23. <el-button type="primary" icon="Plus" @click="handleShowDialog">
  24. 新增
  25. </el-button>
  26. <el-button :disabled="selections.length == 0" type="warning" icon="Printer"
  27. @click="handleBatchPrintQrCode">打印</el-button>
  28. </el-form-item>
  29. </el-form>
  30. <!-- 列表区 -->
  31. <div class="el-table-container">
  32. <div class="el-table-inner-container">
  33. <el-table v-loading="storageCodeLoading" row-key="id" @selection-change="handleSelectionChange"
  34. :data="storageCodeList" height="100%">
  35. <el-table-column type="selection" width="40" align="center" :reserve-selection="true" />
  36. <el-table-column type="index" label="行号" align="center" />
  37. <el-table-column prop="year" label="年份" align="center" />
  38. <el-table-column prop="code" label="编号" align="center" />
  39. <el-table-column label="是否打印" align="center">
  40. <template #default="scope">
  41. {{ scope.row.isPrint == 1 ? '已打印' : '未打印' }}
  42. </template>
  43. </el-table-column>
  44. <el-table-column prop="createTime" label="创建时间" align="center">
  45. <template #default="scope">
  46. {{
  47. proxy
  48. .moment(scope.row.createTime)
  49. .format("YYYY-MM-DD HH:mm:ss")
  50. }}
  51. </template>
  52. </el-table-column>
  53. </el-table>
  54. </div>
  55. </div>
  56. <!-- 分页 -->
  57. <pagination v-show="storageCodeTotal > 0" :total="storageCodeTotal" v-model:page="storageCodeParams.pageNum"
  58. v-model:limit="storageCodeParams.pageSize" @pagination="getStorageCode" />
  59. </section>
  60. <!-- 载具类别表单 -->
  61. <storage-code-form ref="storageCodeRef" @handleSaveSuccess="getStorageCode" />
  62. <div id="image-group" style="height: 0px; width: 0px">
  63. <el-image v-for="item in selections" :key="item.id" :src="webHost + item.qcCode" fit="cover"
  64. style="width: 100mm; height: 100mm">
  65. </el-image>
  66. </div>
  67. </div>
  68. </template>
  69. <script setup name="storageCode">
  70. import {
  71. listStorageCode,
  72. printUpdate
  73. } from "@/api/business/storageCode";
  74. import printJS from "print-js";
  75. import storageCodeForm from "./form";
  76. import { nextTick } from "vue";
  77. import JSZip from "jszip";
  78. import { saveAs } from "file-saver";
  79. const { proxy } = getCurrentInstance();
  80. const storageCodeList = ref([]);
  81. const storageCodeLoading = ref(false);
  82. const storageCodeTotal = ref(0);
  83. const selections = ref([]);
  84. const printStatus = ref([{
  85. label: '未打印',
  86. value: 0
  87. }, {
  88. label: '已打印',
  89. value: 1
  90. }])
  91. const data = reactive({
  92. form: {},
  93. storageCodeParams: {
  94. code: "",
  95. pageNum: 1,
  96. pageSize: 10,
  97. },
  98. });
  99. const { storageCodeParams } = toRefs(data);
  100. /**************************** 存储托盘吗相关事件 ****************************/
  101. /**打开载具类别弹窗 */
  102. function handleShowDialog() {
  103. proxy.$refs.storageCodeRef.open();
  104. }
  105. const getStorageCode = () => {
  106. listStorageCode(storageCodeParams.value).then((res) => {
  107. storageCodeLoading.value = false;
  108. storageCodeList.value = res.rows;
  109. storageCodeTotal.value = res.total;
  110. });
  111. };
  112. /**
  113. * 列表checkbox列选择 事件
  114. */
  115. function handleSelectionChange(selection) {
  116. selections.value = selection;
  117. console.log(selections.value);
  118. }
  119. /**刷新载具 */
  120. const handleRefreshStorageCode = () => {
  121. getStorageCode();
  122. };
  123. /**载具查询 */
  124. const handleQueryStorageCode = () => {
  125. storageCodeParams.value.pageNum = 1;
  126. handleRefreshStorageCode();
  127. };
  128. const handleBatchPrintQrCode = async () => {
  129. if (selections.value.length > 0) {
  130. let index = selections.value.findIndex(l=>l.isPrint == 1)
  131. if (index != -1) {
  132. proxy.$modal.msgError('不能重复打印存储码')
  133. return
  134. }
  135. const imageGroup = document.getElementById("image-group");
  136. const res1 = await printUpdate(selections.value.map(e => e.id))
  137. if (res1.code == 200) {
  138. handleRefreshStorageCode()
  139. printJS({
  140. printable: "image-group", // 这里是你要打印内容的DOM元素的id
  141. type: "html",
  142. style: "@page { size: auto; margin: 0mm; }", // 可以添加打印样式
  143. });
  144. }
  145. }
  146. };
  147. onMounted(() => {
  148. getStorageCode();
  149. });
  150. </script>
  151. <style scoped>
  152. :deep(.el-tree-node__label) {
  153. font-size: 14px !important;
  154. display: inline-block;
  155. width: 100%;
  156. }
  157. :deep(.el-tree-node__content) {
  158. height: 40px;
  159. border-bottom: 1px solid #ebeef5;
  160. padding: 8px 0;
  161. line-height: 23px;
  162. }
  163. </style>