DialogProcesses.vue 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. <template>
  2. <el-dialog
  3. title="添加工序"
  4. v-model="visible"
  5. width="800px"
  6. height="400px"
  7. @close="close"
  8. append-to-body
  9. draggable
  10. >
  11. <el-form
  12. ref="dialogForm"
  13. :model="queryParams"
  14. :inline="true"
  15. style="padding-top: 16px"
  16. >
  17. <el-form-item label="工序名称:" prop="processAlias" label-width="104">
  18. <el-input
  19. v-model.trim="queryParams.keyword"
  20. type="text"
  21. @keydown.enter.prevent
  22. style="width: 160px"
  23. placeholder="请输入关键字"
  24. :clearable="true"
  25. @keyup.enter="handleSearch"
  26. />
  27. </el-form-item>
  28. <el-form-item label-width="20px">
  29. <el-button type="info" icon="Search" @click="handleSearch"
  30. >搜索</el-button
  31. >
  32. </el-form-item>
  33. </el-form>
  34. <el-table
  35. ref="dialogTable"
  36. :data="productList"
  37. size="small"
  38. v-loading="loading"
  39. border
  40. height="370px"
  41. @selection-change="handleSelectionChange"
  42. >
  43. <el-table-column type="selection" width="40" align="center" />
  44. <el-table-column label="序号" width="56" align="center" type="index" />
  45. <el-table-column label="工序名称" align="center" prop="processAlias" />
  46. </el-table>
  47. <!-- 分页 -->
  48. <!-- <pagination
  49. v-show="total > 0"
  50. :total="total"
  51. v-model:page="queryParams.pageNum"
  52. v-model:limit="queryParams.pageSize"
  53. @pagination="getList"
  54. /> -->
  55. <template #footer>
  56. <div class="dialog-footer">
  57. <el-button
  58. type="primary"
  59. icon="Check"
  60. :disabled="selections.length === 0"
  61. @click="handleMultipleSelected"
  62. >
  63. 确 定
  64. </el-button>
  65. <el-button type="danger" icon="Close" @click="close">取 消</el-button>
  66. </div>
  67. </template>
  68. </el-dialog>
  69. </template>
  70. <script setup>
  71. /**
  72. * 需要多选,确定后带回至发货明细中,并且会组合成一个英文逗号分割的字符串
  73. * 逻辑
  74. * 0、数据来源:根据当前明细对应的daywork_id,找到这个daywork尚未完成的工序。
  75. * 思路:
  76. * 1)先找到这个daywork对应的daywork_item,查找status >= 4,并且是外协的那一条记录
  77. * 2)这条记录中,记录了process_id,这个工序就是外协之前完成的工序,需要到当前daywork对应的标准工艺中查询所有工序
  78. * 3)将未完成的工序找出来,可以根据process_id对应的工序的【工序序号】,比这个序号大的,就是未完成的工序。
  79. * 4)这里要注意的是:废品回用、单批单改的工艺,不是标准工艺,要从另外一个表中获得。需要将工序查询分在2个私有方法中实现。避免混淆。
  80. *
  81. * 1、发货明细每条都对应一个从表,记录该外协产品需要外协的工序,这个从表是不在前端展示的,但要保存到数据库中
  82. * 2、选择的工序,在对应的发货明细中,以英文逗号分割的形式存储在当前明细的processNames字段中,
  83. * 在form页面中的ref=【dialogProcessesRef】的对话框:multiple-selected="handleMultipleSelectedProcesses"
  84. * 中查看
  85. * 3、后端 BizOutsourcedOrderController,要保存的数据:
  86. * 【biz_outsourced_order】
  87. * 【biz_outsourced_order_detail】
  88. * 【biz_outsourced_order_detail_process】
  89. * 4、外协单做完后,需要做外协报工,这个部分的功能是给外协商使用,是一个新的前端工程,需要用到的数据:
  90. * 【biz_outsourced_order】
  91. * 【biz_outsourced_order_detail】
  92. * 【biz_outsourced_order_detail_process】
  93. * 外协商要看到,是什么产品,什么工序,多少数量
  94. */
  95. import { processesForOutsource } from "@/api/business/daywork";
  96. const { proxy } = getCurrentInstance();
  97. /** 字典数组区 */
  98. const { process_status } = proxy.useDict("process_status");
  99. /** 工序变量 */
  100. const total = ref(0);
  101. const props = defineProps({
  102. multipleSelected: {
  103. type: Function,
  104. default: null,
  105. },
  106. supplierId: {
  107. type: String,
  108. default: "",
  109. },
  110. });
  111. const { multipleSelected, supplierId } = toRefs(props);
  112. const productList = ref([]);
  113. const visible = ref(false);
  114. const loading = ref(false);
  115. const queryParams = ref({
  116. pageNum: 1,
  117. pageSize: 10,
  118. });
  119. const selections = ref([]);
  120. /**
  121. * 对话框打开 事件
  122. */
  123. function open(data) {
  124. console.log(data)
  125. queryParams.value.lotId = data.lotId
  126. queryParams.value.outsourceDetailId = data.id?data.id:0
  127. queryParams.value.pageNum = 1;
  128. queryParams.value.pageSize = 10;
  129. visible.value = true;
  130. getList();
  131. }
  132. /**
  133. * 对话框关闭 事件
  134. */
  135. function close() {
  136. proxy.$refs.dialogForm.resetFields();
  137. proxy.$refs.dialogTable.clearSelection();
  138. queryParams.value.pageNum = 1;
  139. visible.value = false;
  140. }
  141. /**
  142. * 加载数据
  143. */
  144. function getList() {
  145. loading.value = true;
  146. processesForOutsource(queryParams.value).then((res) => {
  147. productList.value = res.rows;
  148. total.value = res.total;
  149. loading.value = false;
  150. });
  151. }
  152. /**
  153. * 列表checkbox列选择 事件
  154. */
  155. function handleSelectionChange(selection) {
  156. selections.value = selection;
  157. }
  158. /** 搜索 事件 */
  159. function handleSearch() {
  160. getList();
  161. }
  162. /** 多选事件 */
  163. function handleMultipleSelected() {
  164. if (multipleSelected.value) {
  165. multipleSelected.value(selections.value);
  166. }
  167. close();
  168. }
  169. defineExpose({
  170. open,
  171. });
  172. </script>