index.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646
  1. <template>
  2. <zj-page-container>
  3. <zj-page-fill class="neibuview">
  4. <template v-if="payData.length">
  5. <zj-form-container>
  6. <template v-for="(item, index) in payData">
  7. <zj-form-module
  8. :title="'支付费用' + (index + 1)"
  9. :form-data="payData[index]"
  10. :form-items="
  11. [formItemsL1, formItems(item)][!!~[1, 2, 3].indexOf(workOrderType) ? 0 : workOrderType == 4 ? 1 : 0]
  12. "
  13. >
  14. <div v-if="item.examineStatus === 'FAIL'" style="text-align: right">
  15. <el-button size="mini" type="danger" plain @click="enginMaterialCancelFun(item)">取消申请</el-button>
  16. </div>
  17. </zj-form-module>
  18. </template>
  19. </zj-form-container>
  20. </template>
  21. <el-empty v-else description="暂时没有支付信息"></el-empty>
  22. </zj-page-fill>
  23. </zj-page-container>
  24. </template>
  25. <script>
  26. import { listPageV2 } from '@/api/workOrder/appraise'
  27. import { tableDataParsing } from '@/utils/common.js'
  28. import { changeOrderGetOrderList, enginMaterialDetailWorker, enginMaterialCancel } from '@/api/workOrderPool.js'
  29. export default {
  30. props: {
  31. id: {
  32. type: [String, Number],
  33. default: null
  34. },
  35. workOrderType: {
  36. type: Number,
  37. default: 1 // 1普通工单, 4维保工单
  38. }
  39. },
  40. data() {
  41. return {
  42. payData: []
  43. }
  44. },
  45. watch: {
  46. id: {
  47. handler(newVal, oldVal) {
  48. this.getxiangqing()
  49. },
  50. deep: true,
  51. immediate: true
  52. }
  53. },
  54. computed: {
  55. formItemsL1() {
  56. return [
  57. {
  58. md: 24,
  59. name: 'slot-component',
  60. formItemAttributes: {
  61. label: '维修费用信息'
  62. },
  63. render: (h, { props, onInput }) => {
  64. var { formData } = props
  65. return (
  66. <el-descriptions
  67. border
  68. title=""
  69. column={3}
  70. colon={false}
  71. labelStyle={{ width: '11%' }}
  72. contentStyle={{ width: '22.3%' }}
  73. >
  74. <el-descriptions-item label="网点名称">{formData.websitName}</el-descriptions-item>
  75. <el-descriptions-item label="工单号">{formData.workerOrderId}</el-descriptions-item>
  76. <el-descriptions-item label="工程师名称">{formData.workerName}</el-descriptions-item>
  77. <el-descriptions-item label="工程师联系电话">{formData.workerMobile}</el-descriptions-item>
  78. <el-descriptions-item label="支付方式">
  79. {{ WECHAT: '微信支付', LINE: '线下支付', EXAMINE: '审批' }[formData.payType] || '微信支付'}
  80. </el-descriptions-item>
  81. <el-descriptions-item label="客户名称">{formData.pgOrderBase.userName}</el-descriptions-item>
  82. <el-descriptions-item label="电话号码">{formData.userMobile}</el-descriptions-item>
  83. <el-descriptions-item label="支付状态">
  84. {{ CANCEL: '取消', WAIT: '待支付', PAID: '已支付' }[formData.payStatus]}
  85. </el-descriptions-item>
  86. <el-descriptions-item label="支付总金额">{formData.totalAmount}</el-descriptions-item>
  87. {!!~[1, 2, 3].indexOf(this?.workOrderType) ? (
  88. <el-descriptions-item label="总手续费">{formData.commissionAmount}</el-descriptions-item>
  89. ) : null}
  90. <el-descriptions-item label="支付时间">{formData.payTime}</el-descriptions-item>
  91. <el-descriptions-item label=""></el-descriptions-item>
  92. {this?.workOrderType == 4
  93. ? [
  94. <el-descriptions-item label=""></el-descriptions-item>,
  95. <el-descriptions-item label="审批状态">
  96. {{ WAIT: '待审', OK: '审批', FAIL: '驳回', NO: '取消' }[formData.examineStatus] || ''}
  97. </el-descriptions-item>,
  98. <el-descriptions-item label="审批人">{formData.examineName}</el-descriptions-item>,
  99. <el-descriptions-item label="审批时间">{formData.examineTime}</el-descriptions-item>
  100. ]
  101. : null}
  102. </el-descriptions>
  103. )
  104. }
  105. },
  106. {
  107. md: 24,
  108. name: 'slot-component',
  109. formItemAttributes: {
  110. label: '支付明细'
  111. },
  112. render: (h, { props, onInput }) => {
  113. var { formData } = props
  114. return (
  115. <zj-table
  116. columns={[
  117. {
  118. columnAttributes: {
  119. label: '费用名称',
  120. prop: 'goodsName'
  121. }
  122. },
  123. {
  124. columnAttributes: {
  125. label: '单价',
  126. prop: 'goodsAmount'
  127. }
  128. },
  129. {
  130. columnAttributes: {
  131. label: '数量',
  132. prop: 'num'
  133. }
  134. },
  135. {
  136. columnAttributes: {
  137. label: '费用金额',
  138. prop: 'totalAmount'
  139. }
  140. },
  141. ...(() => {
  142. if (!!~[1, 2, 3].indexOf(this?.workOrderType)) {
  143. return [
  144. {
  145. columnAttributes: {
  146. label: '师傅分账金额',
  147. prop: 'workerAmount'
  148. }
  149. },
  150. {
  151. columnAttributes: {
  152. label: '师傅手续费',
  153. prop: 'workerProceAmount'
  154. }
  155. },
  156. {
  157. columnAttributes: {
  158. label: '网点分账金额',
  159. prop: 'websitAmount'
  160. }
  161. },
  162. {
  163. columnAttributes: {
  164. label: '网点手续费',
  165. prop: 'websitProceAmount'
  166. }
  167. }
  168. ]
  169. }
  170. return []
  171. })()
  172. ]}
  173. table-data={
  174. [formData.workerOrderItems, formData.rpMaterialOrderItems][
  175. !!~[1, 2, 3].indexOf(this?.workOrderType) ? 0 : this?.workOrderType == 4 ? 1 : 0
  176. ]
  177. }
  178. />
  179. )
  180. }
  181. },
  182. {
  183. name: 'el-input',
  184. md: 24,
  185. attributes: { disabled: true, type: 'textarea', placeholder: '' },
  186. formItemAttributes: { label: '备注', prop: 'remark' }
  187. },
  188. {
  189. md: 24,
  190. name: 'slot-component',
  191. formItemAttributes: {
  192. label: '交易记录'
  193. },
  194. render: (h, { props, onInput }) => {
  195. var { formData } = props
  196. return (
  197. <zj-table
  198. columns={[
  199. {
  200. columnAttributes: {
  201. label: 'id',
  202. prop: 'orderId'
  203. }
  204. },
  205. {
  206. columnAttributes: {
  207. label: '交易类型',
  208. prop: 'goodsType'
  209. },
  210. render: (h, { row }) => {
  211. return <div>{{ M: '辅材', P: '配件' }[row.goodsType]}</div>
  212. }
  213. },
  214. {
  215. columnAttributes: {
  216. label: '交易金额',
  217. prop: 'totalAmount'
  218. }
  219. },
  220. {
  221. columnAttributes: {
  222. label: '交易状态',
  223. prop: 'payStatus'
  224. },
  225. render: (h, { row }) => {
  226. return <div>{{ CANCEL: '取消', WAIT: '待支付', PAID: '已支付' }[row.payStatus]}</div>
  227. }
  228. },
  229. {
  230. columnAttributes: {
  231. label: '交易时间',
  232. prop: 'payTime'
  233. }
  234. },
  235. {
  236. columnAttributes: {
  237. label: '创建时间',
  238. prop: 'createTime'
  239. }
  240. }
  241. ]}
  242. table-data={[formData]}
  243. />
  244. )
  245. }
  246. },
  247. {
  248. md: 24,
  249. name: 'slot-component',
  250. formItemAttributes: {
  251. label: '配件信息'
  252. },
  253. render: (h, { props, onInput }) => {
  254. var { formData } = props
  255. return (
  256. <zj-table
  257. columns={[
  258. {
  259. columnAttributes: {
  260. label: '维修费用',
  261. prop: 'repairFlag'
  262. },
  263. render: (h, { row }) => {
  264. return <div>{{ INNER: '保内', OUTSIDE: '保外' }[row.repairFlag]}</div>
  265. }
  266. },
  267. {
  268. columnAttributes: {
  269. label: '旧配件编号',
  270. prop: 'oldPartsNumber'
  271. }
  272. },
  273. {
  274. columnAttributes: {
  275. label: '旧配件名称',
  276. prop: 'oldPartsName'
  277. }
  278. },
  279. {
  280. columnAttributes: {
  281. label: '新配件编号',
  282. prop: 'goodsCode'
  283. }
  284. },
  285. {
  286. columnAttributes: {
  287. label: '新配件名称',
  288. prop: 'goodsName'
  289. }
  290. }
  291. ]}
  292. table-data={formData.workerOrderItems || []}
  293. />
  294. )
  295. }
  296. }
  297. ]
  298. }
  299. },
  300. methods: {
  301. formItems(itemData) {
  302. return [
  303. {
  304. md: 24,
  305. name: 'slot-component',
  306. formItemAttributes: {
  307. label: '基本信息'
  308. },
  309. render: (h, { props, onInput }) => {
  310. var { formData } = props
  311. return (
  312. <el-descriptions
  313. border
  314. title=""
  315. column={2}
  316. colon={false}
  317. labelStyle={{ width: '13%' }}
  318. contentStyle={{ width: '37%' }}
  319. >
  320. <el-descriptions-item label="申请单号">{formData.orderId}</el-descriptions-item>
  321. <el-descriptions-item label="项目名称">{formData.rpProjectRepairName}</el-descriptions-item>
  322. <el-descriptions-item label="工单单号">{formData.workerOrderId}</el-descriptions-item>
  323. <el-descriptions-item label="负责人">{formData.userName}</el-descriptions-item>
  324. <el-descriptions-item label="联系电话">{formData.userMobile}</el-descriptions-item>
  325. <el-descriptions-item label="项目地址">{formData.pgOrderBase.address}</el-descriptions-item>
  326. <el-descriptions-item label="创单人">{formData.pgOrderBase.createBy}</el-descriptions-item>
  327. <el-descriptions-item label="创单人电话">{formData.pgOrderBase.createMobile}</el-descriptions-item>
  328. <el-descriptions-item label="创单时间">{formData.pgOrderBase.createTime}</el-descriptions-item>
  329. <el-descriptions-item label="工单类型">{formData.orderSmallTypeText}</el-descriptions-item>
  330. <el-descriptions-item label="网点名称">{formData.websitName}</el-descriptions-item>
  331. <el-descriptions-item label="申请人">{formData.workerName}</el-descriptions-item>
  332. <el-descriptions-item label="联系电话">{formData.workerMobile}</el-descriptions-item>
  333. <el-descriptions-item label="申请时间">{formData.createTime}</el-descriptions-item>
  334. <el-descriptions-item label="包含全部费用">
  335. {{ YES: '是', NO: '否' }[formData.isAllFee]}
  336. </el-descriptions-item>
  337. {formData.isAllFee == 'NO' || formData.payType == 'WECHAT' || formData.payType == 'LINE' ? (
  338. <el-descriptions-item label="费用支付方式">
  339. {{ EXAMINE: '审批后结算', SITE: '现场支付' }[formData.feePayMethod]}
  340. </el-descriptions-item>
  341. ) : null}
  342. {(formData.isAllFee == 'NO' || formData.payType == 'WECHAT') && formData.feePayMethod == 'EXAMINE'
  343. ? [
  344. <el-descriptions-item label="费用单状态">
  345. {
  346. { WAIT: '待审', OK: '通过', FAIL: '驳回', PAID: '现场支付', NO: '取消', NO_PAID: '未支付' }[
  347. formData.examineStatus
  348. ]
  349. }
  350. </el-descriptions-item>,
  351. <el-descriptions-item label="审批人">{formData.examineName}</el-descriptions-item>,
  352. <el-descriptions-item label="审批时间">{formData.examineTime}</el-descriptions-item>,
  353. <el-descriptions-item label="取消人">{formData.cancelName}</el-descriptions-item>,
  354. <el-descriptions-item label="取消时间">{formData.cancelTime}</el-descriptions-item>
  355. ]
  356. : null}
  357. {formData.payType == 'LINE' && formData.feePayMethod == 'EXAMINE'
  358. ? [
  359. <el-descriptions-item label="结算状态">
  360. {{ WAIT: '待结算', OVER: '已结算' }[formData.status]}
  361. </el-descriptions-item>,
  362. <el-descriptions-item label="结算人">{formData.settleName}</el-descriptions-item>,
  363. <el-descriptions-item label="结算时间">{formData.settleTime}</el-descriptions-item>
  364. ]
  365. : null}
  366. </el-descriptions>
  367. )
  368. }
  369. },
  370. {
  371. md: 24,
  372. name: 'slot-component',
  373. formItemAttributes: {
  374. label: '费用明细'
  375. },
  376. render: (h, { props, onInput }) => {
  377. var { formData } = props
  378. return (
  379. <zj-table
  380. columns={[
  381. {
  382. columnAttributes: {
  383. label: '费用名称',
  384. prop: 'goodsName'
  385. }
  386. },
  387. {
  388. columnAttributes: {
  389. label: '费用类型',
  390. prop: 'chargeType'
  391. },
  392. render: (h, { row, column, index }) => {
  393. return (
  394. <div style="padding-left:10px">
  395. {{ MCC: '辅材物料', ACC: '配件物料', SERV: '服务收费' }[row.chargeType]}
  396. </div>
  397. )
  398. }
  399. },
  400. {
  401. columnAttributes: {
  402. label: '单价',
  403. prop: 'goodsAmount'
  404. }
  405. },
  406. {
  407. columnAttributes: {
  408. label: '数量',
  409. prop: 'num'
  410. }
  411. },
  412. {
  413. columnAttributes: {
  414. label: '费用金额',
  415. prop: 'totalAmount'
  416. }
  417. }
  418. ]}
  419. table-data={formData.rpMaterialOrderItems}
  420. />
  421. )
  422. }
  423. },
  424. {
  425. md: 8,
  426. isShow: itemData.goodsType == 'M',
  427. name: 'slot-component',
  428. formItemAttributes: {
  429. label: '辅材费用合计'
  430. },
  431. render: (h, { props, onInput }) => {
  432. var { formData } = props
  433. return (
  434. <span>
  435. {[
  436. 0,
  437. 0,
  438. 0,
  439. ...formData.rpMaterialOrderItems
  440. .filter(item => item.chargeType == 'MCC')
  441. .map(item => item.totalAmount)
  442. ]
  443. .reduce(function (prev, curr, idx, arr) {
  444. return prev + curr
  445. })
  446. .toFixed(2)}
  447. </span>
  448. )
  449. }
  450. },
  451. {
  452. md: 8,
  453. isShow: itemData.goodsType == 'P',
  454. name: 'slot-component',
  455. formItemAttributes: {
  456. label: '配件费用合计'
  457. },
  458. render: (h, { props, onInput }) => {
  459. var { formData } = props
  460. return (
  461. <span>
  462. {[
  463. 0,
  464. 0,
  465. 0,
  466. ...formData.rpMaterialOrderItems
  467. .filter(item => item.chargeType == 'ACC')
  468. .map(item => item.totalAmount)
  469. ]
  470. .reduce(function (prev, curr, idx, arr) {
  471. return prev + curr
  472. })
  473. .toFixed(2)}
  474. </span>
  475. )
  476. }
  477. },
  478. {
  479. md: 8,
  480. name: 'slot-component',
  481. formItemAttributes: {
  482. label: '服务收费费用合计'
  483. },
  484. render: (h, { props, onInput }) => {
  485. var { formData } = props
  486. return (
  487. <span>
  488. {[
  489. 0,
  490. 0,
  491. 0,
  492. ...formData.rpMaterialOrderItems
  493. .filter(item => item.chargeType == 'SERV')
  494. .map(item => item.totalAmount)
  495. ]
  496. .reduce(function (prev, curr, idx, arr) {
  497. return prev + curr
  498. })
  499. .toFixed(2)}
  500. </span>
  501. )
  502. }
  503. },
  504. {
  505. md: 8,
  506. name: 'slot-component',
  507. formItemAttributes: {
  508. label: '总金额'
  509. },
  510. render: (h, { props, onInput }) => {
  511. var { formData } = props
  512. return (
  513. <span>
  514. {[0, 0, 0, ...formData.rpMaterialOrderItems.map(item => item.totalAmount)]
  515. .reduce(function (prev, curr, idx, arr) {
  516. return prev + curr
  517. })
  518. .toFixed(2)}
  519. </span>
  520. )
  521. }
  522. },
  523. {
  524. name: 'el-input',
  525. md: 24,
  526. attributes: { disabled: true, type: 'textarea', placeholder: '' },
  527. formItemAttributes: { label: '申请备注', prop: 'remark' }
  528. },
  529. {
  530. md: 24,
  531. isShow: itemData.payType == 'WECHAT',
  532. name: 'slot-component',
  533. formItemAttributes: {
  534. label: '交易记录'
  535. },
  536. render: (h, { props, onInput }) => {
  537. var { formData } = props
  538. return (
  539. <zj-table
  540. columns={[
  541. {
  542. columnAttributes: {
  543. label: 'id',
  544. prop: 'orderId'
  545. }
  546. },
  547. {
  548. columnAttributes: {
  549. label: '交易类型',
  550. prop: 'goodsType'
  551. },
  552. render: (h, { row }) => {
  553. return <div>{{ M: '辅材', P: '配件' }[row.goodsType]}</div>
  554. }
  555. },
  556. {
  557. columnAttributes: {
  558. label: '交易金额',
  559. prop: 'totalAmount'
  560. }
  561. },
  562. {
  563. columnAttributes: {
  564. label: '交易状态',
  565. prop: 'payStatus'
  566. },
  567. render: (h, { row }) => {
  568. return <div>{{ CANCEL: '取消', WAIT: '待支付', PAID: '已支付' }[row.payStatus]}</div>
  569. }
  570. },
  571. {
  572. columnAttributes: {
  573. label: '交易时间',
  574. prop: 'payTime'
  575. }
  576. },
  577. {
  578. columnAttributes: {
  579. label: '创建时间',
  580. prop: 'createTime'
  581. }
  582. }
  583. ]}
  584. table-data={[formData]}
  585. />
  586. )
  587. }
  588. }
  589. ]
  590. },
  591. getxiangqing() {
  592. if (this.id) {
  593. if (!!~[1, 2, 3].indexOf(this?.workOrderType)) {
  594. changeOrderGetOrderList({
  595. id: this.id
  596. }).then(res => {
  597. this.payData = res.data
  598. })
  599. } else if (this?.workOrderType == 4) {
  600. enginMaterialDetailWorker({
  601. workerOrderId: this.id
  602. }).then(res => {
  603. this.payData = res.data
  604. })
  605. }
  606. }
  607. },
  608. enginMaterialCancelFun(item) {
  609. this.$confirm('是否确认取消申请?', '提示', {
  610. confirmButtonText: '确定',
  611. cancelButtonText: '取消',
  612. type: 'warning'
  613. })
  614. .then(() => {
  615. enginMaterialCancel({
  616. id: item.orderId
  617. }).then(res => {
  618. this.getxiangqing()
  619. })
  620. })
  621. .catch(() => {})
  622. }
  623. }
  624. }
  625. </script>
  626. <style lang="scss" scoped>
  627. .neibuview {
  628. box-sizing: border-box;
  629. padding-left: 16px;
  630. ::v-deep & > .zj-page-fill-scroll {
  631. box-sizing: border-box;
  632. padding-right: 16px;
  633. & > div:nth-child(1) {
  634. margin-top: 20px;
  635. }
  636. }
  637. }
  638. </style>