transferOrderForm.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766
  1. <template>
  2. <div>
  3. <zj-form-container ref="formRef" :form-data="formData" :form-rules="formRules">
  4. <zj-form-module title="调拨单" :form-data="formData" :form-items="formItems" label-width="100px" :column="3" />
  5. <zj-form-module title="调拨单明细" :form-items="detailData" label-width="0" :column="3" />
  6. <zj-form-module
  7. v-if="moduleType === 2"
  8. title="物流费用"
  9. :form-items="formLogisticsData"
  10. label-width="0"
  11. :column="3"
  12. />
  13. <zj-form-module
  14. v-if="moduleType === 3"
  15. title="审核信息"
  16. :form-data="formData"
  17. :form-items="formExamine"
  18. label-width="100px"
  19. :column="3"
  20. />
  21. </zj-form-container>
  22. <el-dialog title="添加产品" :visible.sync="visible" width="60%" :append-to-body="true" @close="visible = false">
  23. <div style="height: 600px">
  24. <template-page
  25. ref="pageRef"
  26. style="height: 100%"
  27. :get-list="getList"
  28. :column-parsing="columnParsing"
  29. :table-attributes="tableAttributes"
  30. :table-events="tableEvents"
  31. />
  32. </div>
  33. <span slot="footer">
  34. <el-button type="primary" @click="handleAddData">提交</el-button>
  35. </span>
  36. </el-dialog>
  37. <!-- 新增 -->
  38. <div v-if="!comDisabled">
  39. <template v-if="moduleType === 1">
  40. <el-button type="primary" size="default" @click="onSubmit('WAIT')">提交</el-button>
  41. <el-button size="default" @click="onSubmit('SAVE')">保存</el-button>
  42. </template>
  43. <template v-else>
  44. <el-button type="primary" size="default" @click="onSubmit">编辑</el-button>
  45. </template>
  46. <el-button size="default" @click="onReset">重置</el-button>
  47. </div>
  48. <!-- 审核 /详情-->
  49. <div v-if="moduleType === 3 || moduleType === 2">
  50. <el-button v-if="moduleType === 3" type="primary" size="default" @click="onExamine('OK')">同意</el-button>
  51. <el-button size="default" @click="onInvoice('SAVE')">撤回</el-button>
  52. </div>
  53. </div>
  54. </template>
  55. <script>
  56. import TemplatePage from '@/components/template/template-page-1.vue'
  57. import { getcustomerFrontList } from '@/api/stock'
  58. import { getListCostBillV2 } from '@/api/logisticsBill'
  59. import { getStagecustomerListV2, getDealerListV2 } from '@/api/basic_data/dealer'
  60. import {
  61. addCustomerTransfer,
  62. updateCustomerTransfer,
  63. getCustomerTransferDetail,
  64. examineCustomerTransfer,
  65. invoiceCustomerTransfer
  66. } from '@/api/transferOrder'
  67. import { mapGetters } from 'vuex'
  68. export default {
  69. components: { TemplatePage },
  70. props: {
  71. edit: {
  72. type: Boolean,
  73. default: false
  74. },
  75. detailsId: {
  76. type: String,
  77. default: null
  78. },
  79. moduleType: {
  80. type: Number,
  81. default: null
  82. }
  83. },
  84. data() {
  85. return {
  86. visible: false,
  87. // 表格属性
  88. tableAttributes: {
  89. // 启用勾选列
  90. selectColumn: true,
  91. selectable: this.selectable
  92. }, // 关闭新增弹窗
  93. // 表格事件
  94. tableEvents: {
  95. 'selection-change': this.selectionChange
  96. },
  97. itemTableEvents: { 'selection-change': this.itemSelectionChange },
  98. defaultTableAttributes: {
  99. border: true,
  100. headerCellClassName: 'headerRowColor',
  101. size: 'mini',
  102. 'summary-method': this.$getSummaries,
  103. 'show-summary': true
  104. },
  105. recordSelected: [],
  106. formData: {
  107. customerNumber: '',
  108. customerName: '',
  109. transferTime: '',
  110. createBy: '',
  111. transferCustomerNumber: '',
  112. transferCustomerName: '',
  113. stockType: '',
  114. createTime: '',
  115. notes: ''
  116. },
  117. formRules: {
  118. customerNumber: [{ required: true, message: '请输入', trigger: 'blur' }],
  119. customerName: [{ required: true, message: '请输入', trigger: 'blur' }],
  120. transferTime: [{ required: true, message: '请选择', trigger: 'change' }],
  121. transferCustomerNumber: [{ required: true, message: '请输入', trigger: 'blur' }],
  122. transferCustomerName: [{ required: true, message: '请选择', trigger: 'change' }],
  123. stockType: [{ required: true, message: '请输入', trigger: 'blur' }]
  124. },
  125. fileType: ['word', 'excel', 'ppt', 'pdf'],
  126. fileList: [],
  127. fileList2: [],
  128. srcList: [],
  129. dict: [],
  130. mainContractList: [],
  131. serviceProviderList: [],
  132. filetype: [],
  133. authList: [],
  134. selectData: [],
  135. itemRecordSelected: [],
  136. sonCustomerList: [],
  137. logisticsData: [],
  138. sonCustomerNumberList: [],
  139. sonCustomerNameList: []
  140. }
  141. },
  142. computed: {
  143. ...mapGetters(['customerNumber']),
  144. comDisabled() {
  145. // 禁止
  146. return !!~[2, 3].indexOf(this.moduleType || 1)
  147. },
  148. formItems() {
  149. return [
  150. {
  151. name: 'el-input',
  152. md: 6,
  153. attributes: { disabled: true, placeholder: '请输入' },
  154. formItemAttributes: { label: '商家编号', prop: 'customerNumber' }
  155. },
  156. {
  157. name: 'el-input',
  158. md: 6,
  159. attributes: { disabled: true, placeholder: '请输入' },
  160. formItemAttributes: { label: '商家名称', prop: 'customerName' }
  161. },
  162. {
  163. name: 'el-date-picker',
  164. md: 6,
  165. attributes: {
  166. type: 'datetime',
  167. style: { width: '100%' },
  168. placeholder: '选择日期时间',
  169. valueFormat: 'yyyy-MM-dd HH:mm:ss',
  170. disabled: this.comDisabled
  171. },
  172. formItemAttributes: { label: '调整日期', prop: 'transferTime' }
  173. },
  174. {
  175. name: 'el-input',
  176. md: 6,
  177. attributes: { disabled: true, placeholder: '系统自动生成' },
  178. formItemAttributes: { label: '制单人', prop: 'createBy' }
  179. },
  180. // {
  181. // name: 'el-input',
  182. // md: 6,
  183. // attributes: { disabled: this.comDisabled, placeholder: '请输入' },
  184. // formItemAttributes: { label: '商家编号', prop: 'transferCustomerNumber' }
  185. // },
  186. // {
  187. // name: 'el-input',
  188. // md: 6,
  189. // attributes: { disabled: this.comDisabled, placeholder: '请输入' },
  190. // formItemAttributes: { label: '商家名称', prop: 'transferCustomerName' }
  191. // },
  192. {
  193. name: 'el-select',
  194. options: this.sonCustomerNumberList,
  195. md: 6,
  196. attributes: {
  197. clearable: true,
  198. filterable: true,
  199. disabled: this.comDisabled
  200. },
  201. formItemAttributes: { label: '商家编号', prop: 'transferCustomerNumber' }
  202. },
  203. {
  204. name: 'el-select',
  205. options: this.sonCustomerNameList,
  206. md: 6,
  207. attributes: {
  208. clearable: true,
  209. filterable: true,
  210. disabled: this.comDisabled
  211. },
  212. formItemAttributes: { label: '商家名称', prop: 'transferCustomerName' }
  213. },
  214. {
  215. name: 'el-select',
  216. md: 6,
  217. options: [
  218. { label: '嘉贤前置仓', value: 'JIAXIAN' },
  219. { label: '商家仓', value: 'SHANGJIA' }
  220. ],
  221. attributes: { disabled: this.comDisabled, placeholder: '请输入' },
  222. formItemAttributes: { label: '调拨仓库', prop: 'stockType' }
  223. },
  224. {
  225. name: 'el-input',
  226. md: 6,
  227. attributes: { disabled: true, placeholder: '系统自动生成' },
  228. formItemAttributes: { label: '制单时间', prop: 'createTime' }
  229. },
  230. {
  231. name: 'el-input',
  232. md: 24,
  233. attributes: { type: 'textarea', style: { width: '100%' }, disabled: this.comDisabled, placeholder: '请输入' },
  234. formItemAttributes: { label: '备注', prop: 'notes' }
  235. }
  236. ]
  237. },
  238. formExamine() {
  239. return [
  240. {
  241. name: 'el-input',
  242. md: 6,
  243. attributes: { disabled: true },
  244. formItemAttributes: { label: '审核人', prop: 'approvalName' }
  245. },
  246. {
  247. name: 'el-input',
  248. md: 6,
  249. attributes: { disabled: true },
  250. formItemAttributes: { label: '审核时间', prop: 'approvalTime' }
  251. },
  252. {
  253. name: 'el-input',
  254. md: 24,
  255. attributes: { type: 'textarea', style: { width: '100%' }, placeholder: '请输入' },
  256. formItemAttributes: { label: '备注', prop: 'approvalRemark' }
  257. }
  258. ]
  259. },
  260. columns() {
  261. return [
  262. {
  263. columnAttributes: {
  264. label: '产品名称',
  265. prop: 'materialName'
  266. }
  267. },
  268. {
  269. columnAttributes: {
  270. label: '产品编码',
  271. prop: 'materialOldNumber'
  272. }
  273. },
  274. {
  275. columnAttributes: {
  276. label: '规格型号',
  277. prop: 'specification',
  278. width: 300
  279. }
  280. },
  281. {
  282. columnAttributes: {
  283. label: '可调拨库存数',
  284. prop: 'frontStockNum'
  285. }
  286. },
  287. {
  288. columnAttributes: {
  289. label: '调拨数量',
  290. prop: 'qty'
  291. },
  292. render: (h, { column, row, index }) => {
  293. return (
  294. <div style='margin:0 20px'>
  295. <el-input
  296. type='number'
  297. disabled={this.comDisabled}
  298. value={row.qty}
  299. onInput={e => (row.qty = e)}
  300. placeholder='调拨数量'
  301. size='mini'
  302. ></el-input>
  303. </div>
  304. )
  305. }
  306. },
  307. {
  308. columnAttributes: {
  309. label: '备注',
  310. prop: 'notes'
  311. },
  312. render: (h, { column, row, index }) => {
  313. return (
  314. <el-input
  315. type='text'
  316. value={row.notes}
  317. disabled={this.comDisabled}
  318. onInput={e => (row.notes = e)}
  319. placeholder='备注'
  320. size='mini'
  321. ></el-input>
  322. )
  323. }
  324. },
  325. {
  326. columnAttributes: {
  327. label: '调拨仓库',
  328. prop: 'stockName'
  329. }
  330. },
  331. {
  332. columnAttributes: {
  333. label: '操作',
  334. prop: ''
  335. },
  336. render: (h, { column, row, index }) => {
  337. return (
  338. <div>
  339. {!this.comDisabled ? (
  340. <el-button
  341. type='text'
  342. size='default'
  343. onClick={() => {
  344. this.handleDel(index)
  345. }}
  346. >
  347. 删除
  348. </el-button>
  349. ) : null}
  350. </div>
  351. )
  352. }
  353. }
  354. ]
  355. },
  356. detailData() {
  357. return [
  358. ...[
  359. !this.comDisabled
  360. ? {
  361. name: 'slot-component',
  362. md: 24,
  363. attributes: { disabled: false },
  364. formItemAttributes: { label: '', prop: '' },
  365. render: (h, { props, onInput }) => {
  366. return (
  367. <div>
  368. <el-button
  369. size='mini'
  370. onClick={() => {
  371. this.visible = true
  372. this.recordSelected = []
  373. }}
  374. >
  375. 添加
  376. </el-button>
  377. <el-button size='mini' onClick={() => this.handleAllDel()}>
  378. 删除
  379. </el-button>
  380. </div>
  381. )
  382. }
  383. }
  384. : {}
  385. ],
  386. {
  387. name: 'slot-component',
  388. md: 24,
  389. attributes: { disabled: false },
  390. formItemAttributes: { label: '', prop: '' },
  391. render: (h, { props, onInput }) => {
  392. var { value } = props
  393. return (
  394. <zj-table
  395. isDrop={true}
  396. columns={this.columns}
  397. tableData={this.selectData}
  398. tableAttributes={{ border: true, selectColumn: !this.comDisabled }}
  399. tableEvents={this.itemTableEvents}
  400. ></zj-table>
  401. )
  402. }
  403. }
  404. ]
  405. },
  406. formLogistics() {
  407. return [
  408. {
  409. columnAttributes: {
  410. label: '序号',
  411. prop: 'materialName',
  412. type: 'index'
  413. }
  414. },
  415. {
  416. columnAttributes: {
  417. label: '结算状态',
  418. prop: 'materialName'
  419. }
  420. },
  421. {
  422. columnAttributes: {
  423. label: '调拨单号',
  424. prop: 'materialName'
  425. }
  426. },
  427. {
  428. columnAttributes: {
  429. label: '嘉贤单据号',
  430. prop: 'materialName'
  431. }
  432. },
  433. {
  434. columnAttributes: {
  435. label: '存货编码',
  436. prop: 'materialName'
  437. }
  438. },
  439. {
  440. columnAttributes: {
  441. label: '物料代码',
  442. prop: 'materialName'
  443. }
  444. },
  445. {
  446. columnAttributes: {
  447. label: '产品名称',
  448. prop: 'materialName'
  449. }
  450. },
  451. {
  452. columnAttributes: {
  453. label: '规格型号',
  454. prop: 'materialName'
  455. }
  456. },
  457. {
  458. columnAttributes: {
  459. label: '单价',
  460. prop: 'materialName'
  461. }
  462. },
  463. {
  464. columnAttributes: {
  465. label: '数量',
  466. prop: 'materialName'
  467. }
  468. },
  469. {
  470. columnAttributes: {
  471. label: '物流费用',
  472. prop: 'materialName'
  473. }
  474. },
  475. {
  476. columnAttributes: {
  477. label: '仓储费用',
  478. prop: 'materialName'
  479. }
  480. },
  481. {
  482. columnAttributes: {
  483. label: '合计费用',
  484. prop: 'materialName'
  485. }
  486. },
  487. {
  488. columnAttributes: {
  489. label: '对账人',
  490. prop: 'materialName'
  491. }
  492. },
  493. {
  494. columnAttributes: {
  495. label: '对账日期',
  496. prop: 'materialName'
  497. }
  498. },
  499. {
  500. columnAttributes: {
  501. label: '结算人',
  502. prop: 'materialName'
  503. }
  504. },
  505. {
  506. columnAttributes: {
  507. label: '结算日期',
  508. prop: 'materialName'
  509. }
  510. }
  511. ]
  512. },
  513. formLogisticsData() {
  514. return [
  515. {
  516. name: 'slot-component',
  517. md: 24,
  518. attributes: { disabled: false },
  519. formItemAttributes: { label: '', prop: '' },
  520. render: (h, { props, onInput }) => {
  521. var { value } = props
  522. return (
  523. <zj-table
  524. tableAttributes={{ ...this.defaultTableAttributes }}
  525. isDrop={true}
  526. columns={this.formLogistics}
  527. tableData={this.logisticsData}
  528. tableEvents={this.itemTableEvents}
  529. ></zj-table>
  530. )
  531. }
  532. }
  533. ]
  534. }
  535. },
  536. mounted() {
  537. this.getStagecustomerListV2()
  538. if (this.detailsId) {
  539. getCustomerTransferDetail({ id: this.detailsId }).then(res => {
  540. this.formData = res.data
  541. this.selectData = res.data.orders.map(k => {
  542. k.disabledId = k.customerStockId
  543. k.stockName = '嘉贤前置仓'
  544. return k
  545. })
  546. delete this.formData.orders
  547. })
  548. }
  549. if (this.detailsId && this.moduleType === 2) {
  550. getListCostBillV2({
  551. pageNum: 1,
  552. pageSize: -1,
  553. params: [
  554. {
  555. param: 'order_code',
  556. compare: '=',
  557. value: this.detailsId
  558. }
  559. ]
  560. }).then(res => {
  561. res.data.records.forEach(item => {
  562. item.sums1 = ['orderHasSendQty', 'subsidyCoefficient', 'unloadUpstairsCoefficient', 'coefficient']
  563. item.sums2 = ['cost', 'unitPrice', 'totalCost', 'allowanceCost']
  564. })
  565. this.logisticsData = res.data.records
  566. })
  567. }
  568. },
  569. methods: {
  570. // 列表请求函数
  571. getList(...p) {
  572. this.recordSelected = []
  573. return getcustomerFrontList(...p)
  574. },
  575. // 表格列解析渲染数据更改
  576. columnParsing(item, defaultData) {
  577. return defaultData
  578. }, // 监听勾选变化
  579. selectionChange(data) {
  580. this.recordSelected = data
  581. },
  582. itemSelectionChange(data) {
  583. this.itemRecordSelected = data
  584. },
  585. selectable(row, index) {
  586. if (this.selectData.length) {
  587. for (let j = 0; j < this.selectData.length; j++) {
  588. if (row.id === this.selectData[j].disabledId) {
  589. this.$set(row, 'disabledId', this.selectData[j].disabledId)
  590. }
  591. }
  592. }
  593. if (!row.disabledId) {
  594. return true
  595. } else {
  596. return false
  597. }
  598. },
  599. getStagecustomerListV2() {
  600. getStagecustomerListV2({
  601. pageNum: 1,
  602. pageSize: -1,
  603. params: [
  604. {
  605. param: 'a.higher_prant_number',
  606. compare: '=',
  607. value: this.customerNumber || ''
  608. }
  609. ]
  610. }).then(res => {
  611. this.sonCustomerNameList = res.data.records.map(k => {
  612. return {
  613. label: k.name,
  614. value: k.name
  615. }
  616. })
  617. this.sonCustomerNumberList = res.data.records.map(k => {
  618. return {
  619. label: k.number,
  620. value: k.number
  621. }
  622. })
  623. })
  624. },
  625. handleAddData() {
  626. this.selectData = [...this.selectData, ...this.recordSelected]
  627. for (let i = 0; i < this.$refs.pageRef.$children[0].tableData.length; i++) {
  628. for (let j = 0; j < this.selectData.length; j++) {
  629. if (this.$refs.pageRef.$children[0].tableData[i].id == this.selectData[j].id) {
  630. this.$set(this.$refs.pageRef.$children[0].tableData[i], 'disabledId', this.selectData[j].id)
  631. }
  632. }
  633. }
  634. this.selectData = this.selectData.map(k => {
  635. return {
  636. materialCode: k.materialCode,
  637. materialId: '',
  638. materialName: k.materialName,
  639. materialOldNumber: k.materialOldNumber,
  640. notes: '',
  641. qty: 0,
  642. specification: k.specification,
  643. disabledId: k.disabledId,
  644. stockName: '嘉贤前置仓',
  645. customerStockId: k.disabledId
  646. }
  647. })
  648. this.visible = false
  649. this.handleClearSelection()
  650. },
  651. handleAllDel() {
  652. if (this.itemRecordSelected.length) {
  653. if (this.$refs.pageRef) {
  654. for (let i = 0; i < this.$refs.pageRef.$children[0].tableData.length; i++) {
  655. for (let j = 0; j < this.itemRecordSelected.length; j++) {
  656. if (this.$refs.pageRef.$children[0].tableData[i].id === this.itemRecordSelected[j].disabledId) {
  657. this.$set(this.$refs.pageRef.$children[0].tableData[i], 'disabledId', null)
  658. }
  659. }
  660. }
  661. }
  662. for (let j = 0; j < this.itemRecordSelected.length; j++) {
  663. for (let k = 0; k < this.selectData.length; k++) {
  664. if (this.selectData[k].disabledId === this.itemRecordSelected[j].disabledId) {
  665. this.selectData.splice(k, 1)
  666. }
  667. }
  668. }
  669. this.handleClearSelection()
  670. } else {
  671. this.$errorMsg('请选择删除项')
  672. }
  673. },
  674. handleDel(index) {
  675. if (this.$refs.pageRef) {
  676. for (let i = 0; i < this.$refs.pageRef.$children[0].tableData.length; i++) {
  677. if (this.$refs.pageRef.$children[0].tableData[i].id === this.selectData[index].disabledId) {
  678. this.$set(this.$refs.pageRef.$children[0].tableData[i], 'disabledId', null)
  679. }
  680. }
  681. }
  682. this.selectData.splice(index, 1)
  683. this.handleClearSelection()
  684. },
  685. handleClearSelection() {
  686. this.recordSelected = []
  687. this.$refs.pageRef &&
  688. this.$refs.pageRef.$children[0].$children[0].$children[2].$children[0].$children[0].clearSelection()
  689. },
  690. handleChangeNumber(e){
  691. console.log(e);
  692. },
  693. handlerefreshList() {
  694. this.$emit('refresh')
  695. this.onClose()
  696. },
  697. onClose() {
  698. this.formData = {}
  699. this.selectData = []
  700. this.$emit('close')
  701. },
  702. onReset() {
  703. this.$refs.formRef.resetFields()
  704. this.selectData = []
  705. },
  706. onSubmit(type) {
  707. this.$refs.formRef.validate(valid => {
  708. if (valid) {
  709. const params = {
  710. ...this.formData,
  711. orders: this.selectData
  712. }
  713. if (this.moduleType === 1) {
  714. params.status = type
  715. addCustomerTransfer(params).then(res => {
  716. this.$successMsg(type === 'SAVE' ? '保存成功' : '新增成功')
  717. this.handlerefreshList()
  718. })
  719. } else {
  720. updateCustomerTransfer(params).then(res => {
  721. this.$successMsg('编辑成功')
  722. this.handlerefreshList()
  723. })
  724. }
  725. } else {
  726. console.log('error submit!!')
  727. return false
  728. }
  729. })
  730. },
  731. onExamine(type) {
  732. examineCustomerTransfer({
  733. id: this.detailsId,
  734. status: type
  735. }).then(res => {
  736. this.$successMsg('审核成功')
  737. this.handlerefreshList()
  738. })
  739. },
  740. onInvoice(type) {
  741. invoiceCustomerTransfer({
  742. id: this.detailsId,
  743. status: type
  744. }).then(res => {
  745. this.$successMsg('撤回成功')
  746. this.handlerefreshList()
  747. })
  748. }
  749. }
  750. }
  751. </script>
  752. <style lang="scss" scoped>
  753. .header1style {
  754. text-align: right;
  755. font-size: 12px;
  756. color: red;
  757. line-height: 18px;
  758. }
  759. </style>