batch-mode.vue 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. <script setup lang="ts">
  2. import { ref, unref } from "vue";
  3. import { ElTable } from "element-plus";
  4. import { useAsync } from "/@/hooks/core/useAsync";
  5. import { httpBatch } from "/@/api/purchase/orderRecord";
  6. import { selectOptions as _selectOptions } from "../_options";
  7. import { ElMessage } from "element-plus";
  8. import {
  9. send_status_list,
  10. cg_order_source_options,
  11. cg_order_type_options
  12. } from "/@/utils/status";
  13. const emit = defineEmits(["selection"]);
  14. const props = defineProps<{
  15. supplierNo?: string;
  16. companyNo?: string;
  17. }>();
  18. const tableRef = ref<InstanceType<typeof ElTable>>(null);
  19. const sourceText = ref("");
  20. const {
  21. data: tableData,
  22. loading,
  23. run
  24. } = useAsync({
  25. success: _data => {}
  26. });
  27. const $space = " ";
  28. const $wrap = "\n";
  29. function replaceTextWrapAndSpace(text = "") {
  30. if (!text) return "";
  31. let _text = text;
  32. const hasSpace = _text.includes($space);
  33. const hasWrap = _text.includes($wrap);
  34. if (hasSpace) _text = _text.split($space).join("");
  35. if (hasWrap) _text = _text.split($wrap).join("");
  36. return _text;
  37. }
  38. function handleEnter() {
  39. const text = replaceTextWrapAndSpace(sourceText.value);
  40. /* 去掉回车和空格 **/
  41. if (text.length === 0) {
  42. ElMessage.warning("不能解析空文本");
  43. sourceText.value = text;
  44. return;
  45. }
  46. /* 统一替换字符 **/
  47. const parserText = text.replace(/[,。;、; .]/g, ",");
  48. const cgdNoArr = parserText.split(",");
  49. sourceText.value = "";
  50. run(
  51. httpBatch({
  52. size: 100,
  53. cgdNoArr,
  54. companyNo: props.companyNo,
  55. supplierNo: props.supplierNo
  56. })
  57. );
  58. }
  59. function onSubmit() {
  60. emit("selection", unref(tableData));
  61. }
  62. </script>
  63. <template>
  64. <ElInput
  65. :rows="4"
  66. v-model="sourceText"
  67. style="margin-bottom: 10px"
  68. placeholder="输入采购单编码(小于100条),系统支持的分割符为逗号(,)、句号(.)、分号(;)、顿号(、),回车后开始解析。"
  69. type="textarea"
  70. @keydown.enter="handleEnter"
  71. />
  72. <ElTable
  73. ref="tableRef"
  74. size="small"
  75. :data="tableData"
  76. v-loading="loading"
  77. max-height="580px"
  78. >
  79. <el-table-column type="index" width="50" label="序号" />
  80. <ElTableColumn label="采购单编码" prop="sequenceNo" width="150" />
  81. <ElTableColumn label="采购主单编码" prop="cxCode" width="150" />
  82. <ElTableColumn label="采购单信息">
  83. <ElTableColumn
  84. label="供货商"
  85. prop="supplierName"
  86. width="160"
  87. show-overflow-tooltip
  88. />
  89. <ElTableColumn
  90. label="发货状态"
  91. prop="sendStatus"
  92. width="90"
  93. show-overflow-tooltip
  94. >
  95. <template #default="{ row }">
  96. <ElTag>{{
  97. send_status_list.find(s => s.value === String(row.sendStatus))
  98. ?.label
  99. }}</ElTag>
  100. </template>
  101. </ElTableColumn>
  102. <ElTableColumn
  103. label="业务公司"
  104. prop="companyName"
  105. width="180"
  106. show-overflow-tooltip
  107. />
  108. <ElTableColumn
  109. label="订单来源"
  110. prop="cgdSource"
  111. width="100"
  112. show-overflow-tooltip
  113. >
  114. <template #default="{ row }">
  115. <ElTag>
  116. {{
  117. cg_order_source_options.find(
  118. t => t.value === String(row.cgdSource)
  119. )?.label
  120. }}
  121. </ElTag>
  122. </template>
  123. </ElTableColumn>
  124. <ElTableColumn
  125. label="总货款"
  126. prop="totalPrice"
  127. width="80"
  128. show-overflow-tooltip
  129. />
  130. </ElTableColumn>
  131. <ElTableColumn label="商品信息">
  132. <ElTableColumn
  133. label="商品编码"
  134. prop="goodNo"
  135. width="150"
  136. show-overflow-tooltip
  137. />
  138. <ElTableColumn
  139. label="商品名称"
  140. prop="goodName"
  141. width="180"
  142. show-overflow-tooltip
  143. />
  144. <ElTableColumn
  145. label="商品来源"
  146. prop="cgdType"
  147. width="90"
  148. show-overflow-tooltip
  149. >
  150. <template #="{ row }">
  151. <ElTag>
  152. {{
  153. cg_order_type_options.find(t => t.value === String(row.cgdType))
  154. ?.label
  155. }}
  156. </ElTag>
  157. </template>
  158. </ElTableColumn>
  159. <ElTableColumn
  160. label="商品数量"
  161. prop="goodNum"
  162. width="90"
  163. show-overflow-tooltip
  164. />
  165. </ElTableColumn>
  166. <ElTableColumn
  167. label="采购员"
  168. prop="ownerName"
  169. width="75"
  170. show-overflow-tooltip
  171. />
  172. </ElTable>
  173. <div flex w-full justify-end mt-2>
  174. <ElButton type="primary" @click="onSubmit">保存</ElButton>
  175. </div>
  176. </template>
  177. <style lang="scss" scoped>
  178. ::v-deep(.el-select-v2__wrapper) {
  179. box-shadow: 0 0 0 1px var(--el-input-border-color, var(--el-border-color))
  180. inset !important;
  181. }
  182. ::v-deep(.el-input__wrapper) {
  183. // box-shadow: none !important;
  184. box-shadow: 0 0 0 1px var(--el-input-border-color, var(--el-border-color))
  185. inset !important;
  186. }
  187. </style>