index.vue 7.5 KB

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