index.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471
  1. <template>
  2. <div class="ele-body">
  3. <el-card shadow="never" v-loading="loading">
  4. <div class="ele-border-lighter form-content" v-loading="loading">
  5. <search-table @search="reload"></search-table>
  6. <!-- 数据表格 -->
  7. <ele-pro-table
  8. ref="table"
  9. :columns="columns"
  10. :datasource="datasource"
  11. height="calc(100vh - 410px)"
  12. style="margin-bottom: 10px"
  13. full-height="calc(100vh - 116px)"
  14. tool-class="ele-toolbar-form"
  15. :selection.sync="selection"
  16. @columns-change="handleColumnChange"
  17. :cache-key="cacheKeyUrl"
  18. :page-size="20"
  19. >
  20. <!-- 表头工具栏 -->
  21. <template v-slot:toolbar>
  22. <el-button
  23. size="small"
  24. type="primary"
  25. icon="el-icon-plus"
  26. class="ele-btn-icon"
  27. @click="openEdit('add', {})"
  28. >
  29. 新建
  30. </el-button>
  31. <el-button
  32. size="small"
  33. type="danger"
  34. el-icon-delete
  35. class="ele-btn-icon"
  36. @click="allDelBtn"
  37. :disabled="selection?.length === 0"
  38. >
  39. 批量删除
  40. </el-button>
  41. </template>
  42. <!-- 查看详情列 -->
  43. <template v-slot:code="{ row }">
  44. <el-link
  45. type="primary"
  46. :underline="false"
  47. @click="openorderDetail(row, 'code')"
  48. >
  49. {{ row.code }}
  50. </el-link>
  51. </template>
  52. <template v-slot:orderNo="{ row }">
  53. <el-link
  54. type="primary"
  55. :underline="false"
  56. @click="openorderDetail(row, 'orderNo')"
  57. >
  58. {{ row.orderNo }}
  59. </el-link>
  60. </template>
  61. <!-- 操作列 -->
  62. <template v-slot:action="{ row }">
  63. <el-link
  64. type="primary"
  65. :underline="false"
  66. icon="el-icon-edit"
  67. @click="openEdit('edit', row)"
  68. v-if="
  69. (isNeed_process_is_close &&
  70. [0, 3].includes(row.reviewStatus)) ||
  71. !isNeed_process_is_close
  72. "
  73. >
  74. 修改
  75. </el-link>
  76. <el-link
  77. type="primary"
  78. :underline="false"
  79. icon="el-icon-plus"
  80. @click="sendSubmit(row)"
  81. v-if="
  82. isNeed_process_is_close && [0, 3].includes(row.reviewStatus)
  83. "
  84. >
  85. 提交
  86. </el-link>
  87. <el-popconfirm
  88. class="ele-action"
  89. title="确定要删除此信息吗?"
  90. @confirm="remove([row.id])"
  91. v-if="
  92. (isNeed_process_is_close &&
  93. [0, 3].includes(row.reviewStatus)) ||
  94. !isNeed_process_is_close
  95. "
  96. >
  97. <template v-slot:reference>
  98. <el-link type="danger" :underline="false" icon="el-icon-delete">
  99. 删除
  100. </el-link>
  101. </template>
  102. </el-popconfirm>
  103. <el-link
  104. type="primary"
  105. :underline="false"
  106. icon="el-icon-edit"
  107. @click="creatSendGoods('entrustedReceive', row)"
  108. v-if="[2].includes(row.reviewStatus)"
  109. >
  110. 创建发货单
  111. </el-link>
  112. <el-link
  113. type="primary"
  114. :underline="false"
  115. icon="el-icon-edit"
  116. @click="creatReturnGoods('entrustedReceive', row)"
  117. v-if="[2].includes(row.reviewStatus)"
  118. >
  119. 创建退货单
  120. </el-link>
  121. </template>
  122. </ele-pro-table>
  123. </div>
  124. </el-card>
  125. <!-- 新增、修改 -->
  126. <add-or-edit-dialog
  127. ref="addOrEditDialogRef"
  128. :add-or-edit-dialog-flag.sync="addOrEditDialogFlag"
  129. v-if="addOrEditDialogFlag"
  130. @done="reload"
  131. ></add-or-edit-dialog>
  132. <!-- 详情 -->
  133. <detail-dialog
  134. ref="detailDialogRef"
  135. :detailDialogFlag.sync="detailDialogFlag"
  136. v-if="detailDialogFlag"
  137. ></detail-dialog>
  138. <order-detail-dialog ref="orderDetailDialogRef"></order-detail-dialog>
  139. <add-invoice-dialog
  140. ref="invoiceDialogRef"
  141. @done="reload"
  142. ></add-invoice-dialog>
  143. <!-- 多选删除弹窗 -->
  144. <pop-modal
  145. :visible.sync="delVisible"
  146. content="是否确定删除?"
  147. @done="commitBtn"
  148. />
  149. <addReturnGoodsDialog
  150. ref="addReturnGoodsRef"
  151. @done="reload"
  152. ></addReturnGoodsDialog>
  153. <process-submit-dialog
  154. :isNotNeedProcess="false"
  155. :processSubmitDialogFlag.sync="processSubmitDialogFlag"
  156. v-if="processSubmitDialogFlag"
  157. ref="processSubmitDialogRef"
  158. @reload="reload"
  159. ></process-submit-dialog>
  160. </div>
  161. </template>
  162. <script>
  163. import searchTable from './components/searchTable.vue';
  164. import addOrEditDialog from './components/addOrEditDialog.vue';
  165. import popModal from '@/components/pop-modal';
  166. import { reviewStatus } from '@/enum/dict';
  167. import detailDialog from './components/detailDialog.vue';
  168. import orderDetailDialog from '@/views/saleManage/saleOrder/components/detailDialog.vue';
  169. import dictMixins from '@/mixins/dictMixins';
  170. import {
  171. deleteSaleEntrustedReceiveAPI,
  172. getSaleEntrustedReceivePageAPI,
  173. submit,
  174. getPSaleEntrustedReceiveDetailAPI
  175. } from '@/api/saleManage/entrustedReceive';
  176. // import AddOrEditDialog from '@/views/saleManage/saleOrder/customerReturnOrder/addOrEditDialog.vue';
  177. import addInvoiceDialog from '@/views/saleManage/saleOrder/invoice/components/addInvoiceDialog.vue';
  178. import processSubmitDialog from '@/BIZComponents/processSubmitDialog/processSubmitDialog.vue';
  179. import tabMixins from '@/mixins/tableColumnsMixin';
  180. import { getWarehouseListByIds } from '@/api/purchasingManage/returnGoods';
  181. import addReturnGoodsDialog from '@/views/saleManage/saleOrder/returnGoods/components/addReturnGoodsDialog';
  182. export default {
  183. mixins: [dictMixins, tabMixins],
  184. components: {
  185. processSubmitDialog,
  186. addInvoiceDialog,
  187. // AddOrEditDialog,
  188. searchTable,
  189. popModal,
  190. orderDetailDialog,
  191. addOrEditDialog,
  192. detailDialog,
  193. addReturnGoodsDialog
  194. },
  195. data() {
  196. return {
  197. activeComp: 'outSourceSend',
  198. addOrEditDialogFlag: false,
  199. detailDialogFlag: false,
  200. processSubmitDialogFlag: false,
  201. selection: [], //单选中集合
  202. delVisible: false, //批量删除弹框状态
  203. loading: false, // 加载状态
  204. columns: [
  205. {
  206. width: 45,
  207. type: 'selection',
  208. columnKey: 'selection',
  209. align: 'center'
  210. },
  211. {
  212. columnKey: 'index',
  213. label: '序号',
  214. type: 'index',
  215. width: 55,
  216. align: 'center',
  217. showOverflowTooltip: true,
  218. fixed: 'left'
  219. },
  220. {
  221. prop: 'code',
  222. label: '收货单编码',
  223. align: 'center',
  224. slot: 'code',
  225. showOverflowTooltip: true,
  226. sortable: true,
  227. minWidth: 200
  228. },
  229. {
  230. prop: 'orderNo',
  231. label: '销售订单编码',
  232. align: 'center',
  233. slot: 'orderNo',
  234. showOverflowTooltip: true,
  235. sortable: true,
  236. minWidth: 200
  237. },
  238. {
  239. prop: 'productNames',
  240. label: '产品名称',
  241. align: 'center',
  242. showOverflowTooltip: true,
  243. minWidth: 140
  244. },
  245. {
  246. prop: 'productCodes',
  247. label: '产品编码',
  248. align: 'center',
  249. showOverflowTooltip: true,
  250. minWidth: 160
  251. },
  252. {
  253. prop: 'batchNos',
  254. label: '批次号',
  255. align: 'center',
  256. showOverflowTooltip: true,
  257. minWidth: 140
  258. },
  259. {
  260. prop: 'productCount',
  261. label: '数量',
  262. align: 'center',
  263. showOverflowTooltip: true,
  264. minWidth: 140
  265. },
  266. {
  267. prop: 'contactName',
  268. label: '客户名称',
  269. align: 'center',
  270. showOverflowTooltip: true,
  271. minWidth: 180
  272. },
  273. {
  274. prop: 'reviewStatus',
  275. label: '状态',
  276. align: 'center',
  277. showOverflowTooltip: true,
  278. minWidth: 120,
  279. formatter: (_row, _column, cellValue) => {
  280. return reviewStatus[_row.reviewStatus];
  281. }
  282. },
  283. {
  284. prop: 'createUserName',
  285. label: '创建人',
  286. align: 'center',
  287. showOverflowTooltip: true,
  288. minWidth: 80
  289. },
  290. {
  291. prop: 'createTime',
  292. label: '创建时间',
  293. align: 'center',
  294. showOverflowTooltip: true,
  295. minWidth: 170
  296. },
  297. {
  298. columnKey: 'action',
  299. label: '操作',
  300. width: 230,
  301. align: 'center',
  302. resizable: false,
  303. slot: 'action',
  304. showOverflowTooltip: true,
  305. fixed: 'right'
  306. }
  307. ],
  308. cacheKeyUrl: 'eos-00bf7292-saleManage-entrustedReceive'
  309. };
  310. },
  311. computed: {},
  312. methods: {
  313. /* 表格数据源 */
  314. datasource({ page, limit, where, order }) {
  315. return getSaleEntrustedReceivePageAPI({
  316. pageNum: page,
  317. size: limit,
  318. ...where
  319. });
  320. },
  321. //创建退货单
  322. creatReturnGoods(type, row) {
  323. this.$refs.addReturnGoodsRef.open('add', {}, row.id, true);
  324. },
  325. //创建收货单
  326. creatSendGoods(type, row) {
  327. this.$refs.invoiceDialogRef.entrustedReceiveInit(row);
  328. },
  329. /* 刷新表格 */
  330. reload(where) {
  331. this.$refs.table.reload({ page: 1, where });
  332. this.$emit('getToDoReminder');
  333. },
  334. //新增编辑
  335. openEdit(type, row) {
  336. this.addOrEditDialogFlag = true;
  337. this.$nextTick(() => {
  338. this.$refs.addOrEditDialogRef.open(type, row);
  339. });
  340. },
  341. //批量删除
  342. allDelBtn() {
  343. if (this.selection.length === 0) return;
  344. let flag = this.selection.some((item) =>
  345. [1, 2].includes(item.reviewStatus)
  346. );
  347. if (flag)
  348. return this.$message.warning(
  349. '抱歉已审核、审核中的数据不能删除,请检查'
  350. );
  351. this.delVisible = true;
  352. },
  353. //删除接口
  354. remove(delData) {
  355. deleteSaleEntrustedReceiveAPI(delData).then((res) => {
  356. this.$message.success('删除成功!');
  357. this.reload();
  358. });
  359. },
  360. //删除弹框确定
  361. commitBtn() {
  362. const dataId = this.selection.map((v) => v.id);
  363. this.remove(dataId);
  364. },
  365. async sendSubmit(res) {
  366. const data = await getPSaleEntrustedReceiveDetailAPI(res.id);
  367. let storemanIds = '';
  368. let ids = data.productList.map((item) => item.warehouseId);
  369. let warehouseList = await getWarehouseListByIds(ids || []);
  370. storemanIds = warehouseList.map((item) => item.ownerId);
  371. this.processSubmitDialogFlag = true;
  372. this.$nextTick(() => {
  373. let params = {
  374. businessId: res.id,
  375. businessKey: 'sale_entrusted_receive_approve',
  376. formCreateUserId: res.createUserId,
  377. variables: {
  378. businessCode: res.code,
  379. storemanIds: storemanIds.toString(),
  380. businessName: res.productNames,
  381. businessType: '受托收货'
  382. }
  383. };
  384. this.$refs.processSubmitDialogRef.init(params);
  385. });
  386. },
  387. //查看详情
  388. openorderDetail(row, type) {
  389. if (type === 'code') {
  390. this.detailDialogFlag = true;
  391. this.$nextTick(() => {
  392. this.$refs.detailDialogRef.open(row);
  393. });
  394. }
  395. if (type === 'orderNo') {
  396. this.$refs.orderDetailDialogRef.open({ id: row.orderId });
  397. }
  398. }
  399. }
  400. };
  401. </script>
  402. <style lang="scss" scoped>
  403. .ele-body {
  404. padding-top: 0;
  405. padding-bottom: 0;
  406. }
  407. :deep .el-card__body {
  408. padding: 0;
  409. }
  410. :deep(.el-link--inner) {
  411. margin-left: 0px !important;
  412. }
  413. .sys-organization-list {
  414. height: calc(100vh - 264px);
  415. box-sizing: border-box;
  416. border-width: 1px;
  417. border-style: solid;
  418. overflow: auto;
  419. }
  420. .sys-organization-list :deep(.el-tree-node__content) {
  421. height: 40px;
  422. & > .el-tree-node__expand-icon {
  423. margin-left: 10px;
  424. }
  425. }
  426. .switch_left ul .active {
  427. border-top: 4px solid var(--color-primary);
  428. color: var(--color-primary-5);
  429. }
  430. .switch {
  431. padding-bottom: 20px;
  432. }
  433. .el-dropdown-link {
  434. cursor: pointer;
  435. color: var(--color-primary-5);
  436. }
  437. .el-icon-arrow-down {
  438. font-size: 12px;
  439. }
  440. </style>