index.vue 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. <template>
  2. <div class="ele-body">
  3. <el-card shadow="never" v-loading="loading">
  4. <pick-search @search="reload" ref="searchRef" :isReturn="isReturn">
  5. </pick-search>
  6. <!-- 数据表格 -->
  7. <ele-pro-table
  8. ref="table"
  9. :columns="columns"
  10. :datasource="datasource"
  11. cache-key="pickKey"
  12. :selection.sync="selection"
  13. autoAmendPage
  14. :parse-data="parseData"
  15. @update:selection="handleSelectionChange"
  16. :pageSize="20"
  17. >
  18. <template v-slot:toolbar>
  19. <el-button
  20. type="primary"
  21. v-if="!isReturn"
  22. size="mini"
  23. @click="handPick"
  24. >工单领料</el-button
  25. >
  26. <el-button
  27. type="primary"
  28. v-if="!isReturn"
  29. size="mini"
  30. @click="handSelfPick"
  31. >自建领料单</el-button
  32. >
  33. </template>
  34. <template v-slot:code="{ row }">
  35. <el-link type="primary" :underline="false" @click="handDetailed(row)">
  36. {{ row.code }}
  37. </el-link>
  38. </template>
  39. <template v-slot:joinWorkOrderCode="{ row }">
  40. <el-tag type="warning" v-if="row.type == 1">自建领料单</el-tag>
  41. <div v-else>{{ row.joinWorkOrderCode }}</div>
  42. </template>
  43. <template v-slot:status="{ row }">
  44. <el-tag
  45. :type="['info', 'success', 'warning', 'danger'][row.status]"
  46. effect="dark"
  47. >{{ statusList[row.status] }}</el-tag
  48. >
  49. </template>
  50. <template v-slot:action="{ row }">
  51. <!-- <el-button type="text" size="mini" @click="handDetailed(row)"
  52. >详情</el-button
  53. > -->
  54. <el-button type="text" size="mini" @click="checkProcess(row)"
  55. >流程</el-button
  56. >
  57. </template>
  58. </ele-pro-table>
  59. </el-card>
  60. <addPick v-if="addPickShow" @close="close"></addPick>
  61. <selfBuildPick v-if="selfBuildPickShow" @close="close"></selfBuildPick>
  62. <detailed
  63. @detailedClose="detailedClose"
  64. v-if="detailedShow"
  65. :detailedObj="detailedObj"
  66. ></detailed>
  67. <selfDetailed
  68. @detailedClose="detailedClose"
  69. v-if="selfDetailedShow"
  70. :detailedObj="detailedObj"
  71. ></selfDetailed>
  72. <flow ref="flowRef"></flow>
  73. </div>
  74. </template>
  75. <script>
  76. import { getAllPage, returnPage, getPage } from '@/api/pick/pickApply';
  77. import pickSearch from './components/pick-search.vue';
  78. import flow from './components/flow.vue';
  79. import addPick from './components/addPick.vue';
  80. import selfBuildPick from './components/selfBuildPick.vue';
  81. import detailed from '@/views/produce/components/picking/detailed.vue';
  82. import selfDetailed from './components/selfDetailed.vue';
  83. export default {
  84. components: {
  85. pickSearch,
  86. addPick,
  87. selfBuildPick,
  88. detailed,
  89. selfDetailed,
  90. flow
  91. },
  92. props: {
  93. isReturn: {
  94. type: Boolean,
  95. default() {
  96. return false;
  97. }
  98. }
  99. },
  100. data() {
  101. return {
  102. // 加载状态
  103. loading: false,
  104. selection: [],
  105. addPickShow: false,
  106. selfBuildPickShow: false,
  107. detailedShow: false,
  108. detailedObj: null,
  109. selfDetailedShow: false,
  110. statusList: ['未领料', '领料中', '已出库', '已驳回']
  111. };
  112. },
  113. computed: {
  114. columns() {
  115. return [
  116. {
  117. width: 45,
  118. type: 'selection',
  119. columnKey: 'selection',
  120. align: 'center',
  121. reserveSelection: true,
  122. show: this.isReturn
  123. },
  124. {
  125. prop: 'code',
  126. slot: 'code',
  127. label: '领料单编号',
  128. align: 'center',
  129. align: 'left'
  130. },
  131. {
  132. prop: 'joinWorkOrderCode',
  133. slot: 'joinWorkOrderCode',
  134. label: '关联工单编号',
  135. align: 'center'
  136. },
  137. {
  138. prop: 'joinWarehouseName',
  139. label: '领料仓库名称',
  140. align: 'center'
  141. },
  142. {
  143. prop: 'joinReviewerName',
  144. label: '关联审核人',
  145. align: 'center'
  146. },
  147. {
  148. prop: 'executorName',
  149. label: '领料人',
  150. align: 'center'
  151. },
  152. {
  153. prop: 'createTime',
  154. label: '领料时间',
  155. align: 'center'
  156. },
  157. {
  158. prop: 'status',
  159. slot: 'status',
  160. label: '状态',
  161. align: 'center',
  162. showOverflowTooltip: true
  163. },
  164. {
  165. prop: '',
  166. label: '操作',
  167. width: 80,
  168. align: 'center',
  169. resizable: false,
  170. fixed: 'right',
  171. slot: 'action'
  172. }
  173. ];
  174. }
  175. },
  176. created() {},
  177. methods: {
  178. /* 表格数据源 */
  179. async datasource({ page, limit, where }) {
  180. let URL = this.isReturn ? returnPage : getAllPage;
  181. let parma = {
  182. ...where,
  183. pageNum: page,
  184. size: limit
  185. };
  186. if (this.isReturn) {
  187. parma.status = 2;
  188. }
  189. let res = await URL(parma);
  190. return res;
  191. },
  192. /* 数据转为树形结构 */
  193. parseData(data) {
  194. return {
  195. ...data,
  196. list: this.$util.toTreeData({
  197. data: data.list,
  198. count: data.total,
  199. idField: 'id',
  200. parentIdField: 'parentId'
  201. })
  202. };
  203. },
  204. handPick() {
  205. this.addPickShow = true;
  206. },
  207. close(val) {
  208. if (val) {
  209. this.reload();
  210. }
  211. this.addPickShow = false;
  212. this.selfBuildPickShow = false;
  213. },
  214. handSelfPick() {
  215. this.selfBuildPickShow = true;
  216. },
  217. selfClose(val) {
  218. if (val) {
  219. this.reload();
  220. }
  221. this.selfBuildPickShow = false;
  222. },
  223. handDetailed(row) {
  224. this.detailedObj = JSON.stringify(row);
  225. if (row.type == 1) {
  226. this.selfDetailedShow = true;
  227. } else {
  228. this.detailedShow = true;
  229. }
  230. },
  231. detailedClose() {
  232. this.detailedShow = false;
  233. this.selfDetailedShow = false;
  234. },
  235. //查看流程
  236. checkProcess(row) {
  237. if (!row.processInstanceId) {
  238. return this.$message.warning('暂无流程图');
  239. }
  240. this.$refs.flowRef.open(row.processInstanceId);
  241. },
  242. handleSelectionChange(data) {
  243. let ids = [];
  244. ids = data.map((item) => item.id);
  245. this.$emit('selectionChange', ids);
  246. },
  247. /* 刷新表格 */
  248. reload(where = {}) {
  249. this.$refs.table.reload({ page: 1, where });
  250. }
  251. }
  252. };
  253. </script>