index.vue 19 KB

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