You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.vue 24KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907
  1. <template>
  2. <div>
  3. <crud-template
  4. v-if="itemStart"
  5. class="as-weight"
  6. :ref="(el) => (crudRef = el)"
  7. :home-data="field"
  8. @btnSearch="btnSearch"
  9. @refreshLeft="refreshLeft"
  10. :tableData="tableData"
  11. @CurrentChange="handleCurrentChange"
  12. @handleRemark="handleRemark"
  13. @cancel="cancel"
  14. @download="download"
  15. >
  16. <template #search>
  17. <el-input
  18. maxlength="60"
  19. v-trim
  20. clearable
  21. v-model="searchForm.externalOrderNo"
  22. style="width: 160px"
  23. placeholder="请输入支付单号"
  24. />
  25. <el-input
  26. maxlength="60"
  27. v-trim
  28. clearable
  29. v-model="searchForm.vehiclePlate"
  30. placeholder="请输入车牌号"
  31. style="width: 320px"
  32. >
  33. <template #append>
  34. <el-select
  35. clearable
  36. v-model="searchForm.vehiclePlateColor"
  37. placeholder="请选择车牌颜色"
  38. style="width: 150px"
  39. >
  40. <el-option
  41. :label="item.label"
  42. :key="item.label"
  43. :value="item.value"
  44. v-for="item in VEHICLE_COLOR_TYPE"
  45. />
  46. </el-select>
  47. </template>
  48. </el-input>
  49. <el-input
  50. maxlength="60"
  51. v-trim
  52. clearable
  53. v-model="searchForm.cardId"
  54. style="width: 160px"
  55. placeholder="请输入卡号"
  56. />
  57. <!-- <el-select
  58. clearable
  59. v-model="searchForm.status"
  60. placeholder="请选择退费状态"
  61. style="width: 200px"
  62. >
  63. <el-option
  64. v-for="item in statusList"
  65. :label="item.label"
  66. :value="item.value"
  67. />
  68. </el-select> -->
  69. <el-select
  70. clearable
  71. v-model="searchForm.businessPort"
  72. placeholder="请选择退费业务"
  73. style="width: 200px"
  74. >
  75. <el-option
  76. v-for="item in portList"
  77. :label="item.label"
  78. :value="item.value"
  79. />
  80. </el-select>
  81. <el-date-picker
  82. unlink-panels
  83. v-model="value1"
  84. type="daterange"
  85. range-separator="到"
  86. start-placeholder="创建开始日期"
  87. end-placeholder="创建结束日期"
  88. format="YYYY-MM-DD"
  89. value-format="YYYY-MM-DD"
  90. @change="dateChangeHandle"
  91. :clearable="false"
  92. />
  93. </template>
  94. <template #button2>
  95. <el-tabs @tab-click="handleClick" v-model="searchForm.status">
  96. <el-tab-pane
  97. v-for="(item, index) in statusList"
  98. :key="index"
  99. :label="item.label"
  100. :name="item.name"
  101. ></el-tab-pane>
  102. </el-tabs>
  103. </template>
  104. <template #operation="{ scope }">
  105. <el-button
  106. style="margin-top: 5px"
  107. type="primary"
  108. @click="handleRefund(scope.row, 1)"
  109. size="small"
  110. v-if="
  111. scope.row.status === 'NOTREFUND' && IsPermission(route, 'REFUND')
  112. "
  113. >
  114. 退款审核
  115. </el-button>
  116. <!-- <el-button type="primary" @click="handleCheck(scope.row.id, 'REFUNDED')" size="small"-->
  117. <!-- v-if="scope.row.status === 'ARTIFICIAL' && IsPermission(route, 'REFUNDED')">已退款</el-button>-->
  118. <!-- <el-button type="warning" @click="handleCheck(scope.row.id, 'REFUNDFAILED')" size="small"-->
  119. <!-- v-if="scope.row.status === 'ARTIFICIAL' && IsPermission(route, 'NO_REFUND')">未退款</el-button>-->
  120. <el-button
  121. style="margin-top: 5px"
  122. type="primary"
  123. @click="handleRefund(scope.row, 2)"
  124. size="small"
  125. v-if="
  126. scope.row.status === 'FAILREFUND' && IsPermission(route, 'REFUNDS')
  127. "
  128. >
  129. 再次退款审核
  130. </el-button>
  131. </template>
  132. <template #dialog>
  133. <el-descriptions :column="3" border>
  134. <el-descriptions-item
  135. label="支付单号"
  136. label-align="right"
  137. align="center"
  138. >
  139. {{ rowData.externalOrderNo }}
  140. </el-descriptions-item>
  141. <el-descriptions-item
  142. label="ETC卡号"
  143. label-align="right"
  144. align="center"
  145. >
  146. {{ rowData.cardId }}
  147. </el-descriptions-item>
  148. <el-descriptions-item
  149. label="车牌号"
  150. label-align="right"
  151. align="center"
  152. >
  153. {{ rowData.vehiclePlate }}
  154. </el-descriptions-item>
  155. <el-descriptions-item
  156. label="车牌颜色"
  157. label-align="right"
  158. align="center"
  159. >
  160. {{ getDictLabel(VEHICLE_COLOR_TYPE, rowData.vehiclePlatecolor) }}
  161. </el-descriptions-item>
  162. <el-descriptions-item label="金额" label-align="right" align="center">
  163. {{
  164. rowData.amount === null ? 0 + '元' : rowData.amount * 0.01 + '元'
  165. }}
  166. </el-descriptions-item>
  167. <el-descriptions-item label="状态" label-align="right" align="center">
  168. {{ getDictLabel(statusList, rowData.status) }}
  169. </el-descriptions-item>
  170. <el-descriptions-item
  171. label="业务端口"
  172. label-align="right"
  173. align="center"
  174. >
  175. {{ getDictLabel(portList, rowData.businessPort) }}
  176. </el-descriptions-item>
  177. <el-descriptions-item
  178. label="申请时间"
  179. label-align="right"
  180. align="center"
  181. >
  182. {{
  183. rowData.insertTime ? rowData.insertTime.replaceAll('T', ' ') : ''
  184. }}
  185. </el-descriptions-item>
  186. <el-descriptions-item
  187. v-if="rowData.salesmanNickName !== null"
  188. label="业务员"
  189. label-align="right"
  190. align="center"
  191. >
  192. {{ rowData.salesmanNickName }}
  193. </el-descriptions-item>
  194. <el-descriptions-item
  195. label="联系人姓名"
  196. label-align="right"
  197. align="center"
  198. >
  199. {{ rowData.userName }}
  200. </el-descriptions-item>
  201. <el-descriptions-item
  202. label="手机号"
  203. label-align="right"
  204. align="center"
  205. >
  206. {{ rowData.userMobile }}
  207. </el-descriptions-item>
  208. <el-descriptions-item
  209. label="退费方式"
  210. label-align="right"
  211. align="center"
  212. >
  213. <el-select
  214. clearable
  215. v-model="rowData.operateType"
  216. :disabled="!refundBtn"
  217. class="m-2"
  218. placeholder="请选择退费方式"
  219. >
  220. <el-option
  221. v-for="item in refundOperateTypeList"
  222. :key="item.value"
  223. :label="item.label"
  224. :value="item.value"
  225. />
  226. </el-select>
  227. </el-descriptions-item>
  228. <el-descriptions-item
  229. v-if="rowData.operateType === 'ORIGINAL'"
  230. label="原路退回方式"
  231. label-align="right"
  232. align="center"
  233. >
  234. {{ rowData.payReturnType ?? '---' }}
  235. </el-descriptions-item>
  236. </el-descriptions>
  237. <el-descriptions
  238. title="银行卡退费信息"
  239. v-if="rowData.operateType === 'BANK'"
  240. :column="3"
  241. border
  242. >
  243. <el-descriptions-item
  244. label="开户行"
  245. label-align="right"
  246. align="center"
  247. >
  248. <el-select
  249. clearable
  250. v-model="rowData.bankType"
  251. :disabled="!refundBtn"
  252. class="m-2"
  253. placeholder="请选择开户行"
  254. >
  255. <el-option
  256. v-for="item in bankTypeList"
  257. :key="item.value"
  258. :label="item.label"
  259. :value="item.value"
  260. />
  261. </el-select>
  262. </el-descriptions-item>
  263. <el-descriptions-item
  264. label="银行卡号"
  265. label-align="right"
  266. align="center"
  267. >
  268. <el-input
  269. maxlength="60"
  270. v-trim
  271. clearable
  272. v-model="rowData.bankCardId"
  273. :disabled="!refundBtn"
  274. placeholder="请输入银行卡号"
  275. />
  276. </el-descriptions-item>
  277. <el-descriptions-item
  278. label="开户行所在的省"
  279. label-align="right"
  280. align="center"
  281. >
  282. <el-input
  283. maxlength="60"
  284. v-trim
  285. clearable
  286. v-model="rowData.province"
  287. :disabled="!refundBtn"
  288. placeholder="请输入开户行所在的省"
  289. />
  290. </el-descriptions-item>
  291. <el-descriptions-item
  292. label="开户行所在的市"
  293. label-align="right"
  294. align="center"
  295. >
  296. <el-input
  297. maxlength="60"
  298. v-trim
  299. clearable
  300. v-model="rowData.sell"
  301. :disabled="!refundBtn"
  302. placeholder="请输入开户行所在的市"
  303. />
  304. </el-descriptions-item>
  305. <el-descriptions-item
  306. label="开户人名称"
  307. label-align="right"
  308. align="center"
  309. >
  310. <el-input
  311. maxlength="60"
  312. v-trim
  313. clearable
  314. v-model="rowData.cusName"
  315. :disabled="!refundBtn"
  316. placeholder="请输入开户人名称"
  317. />
  318. </el-descriptions-item>
  319. <el-descriptions-item
  320. label="开户用户类型"
  321. label-align="right"
  322. align="center"
  323. >
  324. <el-select
  325. clearable
  326. v-model="rowData.cusType"
  327. :disabled="!refundBtn"
  328. class="m-2"
  329. placeholder="请选择开户用户类型"
  330. >
  331. <el-option
  332. v-for="item in cusTypeList"
  333. :key="item.value"
  334. :label="item.label"
  335. :value="item.value"
  336. />
  337. </el-select>
  338. </el-descriptions-item>
  339. <el-descriptions-item
  340. label="开户人联系方式"
  341. label-align="right"
  342. align="center"
  343. >
  344. <el-input
  345. maxlength="60"
  346. v-trim
  347. clearable
  348. v-model="rowData.cusTel"
  349. :disabled="!refundBtn"
  350. placeholder="请输入开户人联系方式"
  351. />
  352. </el-descriptions-item>
  353. <el-descriptions-item
  354. label="开户行支行名称"
  355. label-align="right"
  356. align="center"
  357. >
  358. <el-input
  359. maxlength="60"
  360. v-trim
  361. clearable
  362. v-model="rowData.branchName"
  363. :disabled="!refundBtn"
  364. placeholder="请输入开户行支行名称"
  365. />
  366. </el-descriptions-item>
  367. </el-descriptions>
  368. <el-descriptions
  369. title="实际退费信息"
  370. v-if="refundBtn || rowData.refundAmount"
  371. :column="3"
  372. border
  373. >
  374. <el-descriptions-item
  375. label="实际退费金额"
  376. label-align="right"
  377. align="center"
  378. >
  379. <el-input
  380. maxlength="60"
  381. v-trim
  382. number
  383. clearable
  384. v-model="rowData.refundAmount"
  385. :disabled="!refundBtn"
  386. :precision="2"
  387. :step="0.1"
  388. :min="0"
  389. placeholder="请输入实际退费金额"
  390. />
  391. </el-descriptions-item>
  392. </el-descriptions>
  393. </template>
  394. <template #footer>
  395. <el-button
  396. type="primary"
  397. @click="refundSubmit(rowData.id, 'CONFIRM')"
  398. v-if="refundBtn"
  399. >
  400. 通过
  401. </el-button>
  402. <el-button
  403. type="primary"
  404. @click="refundSubmit(rowData.id, 'REJECT')"
  405. v-if="refundBtn"
  406. >
  407. 驳回
  408. </el-button>
  409. </template>
  410. </crud-template>
  411. </div>
  412. </template>
  413. <!-- 退款管理 -->
  414. <script lang="ts" setup>
  415. // @ts-ignore crudFrom模板
  416. import CrudTemplate from '@/crud/index.vue'
  417. import {
  418. reactive,
  419. ref,
  420. toRaw,
  421. getCurrentInstance,
  422. onMounted,
  423. computed,
  424. nextTick,
  425. } from 'vue'
  426. import { ElNotification, ElMessage } from 'element-plus'
  427. import Cookies from 'js-cookie'
  428. import { useDebounce, getDictLabel } from '@/utils/utils'
  429. import BaseService from '@/utils/baseService'
  430. import { IHttpResponse, IObject } from '@/types/interface'
  431. import { logListApi } from '@/api/api'
  432. import { cloneDeep } from 'lodash'
  433. import {
  434. refundPageApi,
  435. refundQueryApi,
  436. refundExamineApi,
  437. refundOncemoreApi,
  438. refundCheckApi,
  439. refundConfirmApi,
  440. refundExportApi,
  441. } from '@/api/onlineBusinessHall/salesAndQuery'
  442. import $storeinitData from '@/store/initData'
  443. import { useRoute } from 'vue-router'
  444. import { IsPermission } from '@/router/routerUtil'
  445. //或取路由传入过来的对象数据
  446. const route = useRoute()
  447. const crudRef = ref()
  448. const itemStart = ref(true)
  449. const tableType = ref('REQUESTED')
  450. const refundBtn = ref(false)
  451. const searchForm = ref({
  452. orderId: '',
  453. vehicleId: '',
  454. cardId: '',
  455. beginTime: '',
  456. finishTime: '',
  457. vehiclePlate: '',
  458. vehiclePlateColor: '',
  459. status: '',
  460. })
  461. const statusList = computed(() => {
  462. const data = $storeinitData.state.dictData['REFUND_STATUS'] || []
  463. let newData = [
  464. {
  465. label: '全部',
  466. name: '',
  467. value: '',
  468. },
  469. ]
  470. for (let i = 0; i < data.length; i++) {
  471. newData.push({
  472. label: data[i].label,
  473. name: data[i].value,
  474. value: data[i].value,
  475. })
  476. }
  477. return newData
  478. })
  479. const portList = computed(() => {
  480. return $storeinitData.state.dictData['REFUND_BUSINESS'] || []
  481. })
  482. const refundOperateTypeList = computed(() => {
  483. return $storeinitData.state.dictData['REFUND_OPERATE_TYPE'] || []
  484. })
  485. const cusTypeList = computed(() => {
  486. return $storeinitData.state.dictData['CUS_TYPE'] || []
  487. })
  488. const bankTypeList = computed(() => {
  489. return $storeinitData.state.dictData['BANK_TYPE'] || []
  490. })
  491. const VEHICLE_COLOR_TYPE = computed(() => {
  492. return $storeinitData.state.dictData['VEHICLE_COLOR_TYPE'] || []
  493. }) //车牌颜色
  494. let activeName = ref('')
  495. const handleClick = (val) => {
  496. console.log(val, '点击的按钮')
  497. nextTick(() => {
  498. getList()
  499. })
  500. }
  501. let tageList = ref<any>([])
  502. const refundNum = ref(0)
  503. const value1 = ref() // 筛选时间
  504. const tableData = ref([] as any[])
  505. const rowData = ref<any>({})
  506. const initItem = {
  507. id: '',
  508. }
  509. const addForm: any = ref(initItem)
  510. //表单数据配置
  511. const field = ref({
  512. tabSize: 'small', //Table 的尺寸 large / default /small (默认default)
  513. searchShow: IsPermission(route, 'QUERY_BASE'), //是否显示搜索模块(默认false)
  514. border: true, //是否添加边框(默认false)
  515. dialogCustom: true, //自定义Dialog (默认false)
  516. dialogFooter: true, //隐藏弹窗页脚显示 (默认false)
  517. dialogWidth: '60%', //dialog宽度 (默认40%)
  518. crudShow: true, //是否显示CURD操作栏 (默认true)
  519. crudChildShow: true, //是否显示CURD子操作栏 (默认true)
  520. paginStart: true, //是否显示分页查询 (默认false)
  521. titleDialog: '', //table 标题
  522. tableOperation: true,
  523. paging: {
  524. pageSize: 10,
  525. currentPage: 1,
  526. total: 0,
  527. },
  528. crud: {
  529. add: false,
  530. edit: false,
  531. delete: false,
  532. derive: false,
  533. search: false,
  534. refresh: false,
  535. },
  536. searchOperation: {
  537. isDownload: true,
  538. isAdd: false,
  539. isTransferMachine: false,
  540. },
  541. tableSize: -1,
  542. operateShow: true, //是否为表格添加操作栏(默认true)
  543. operateTitle: '操作', //操作栏标题(默认为"")
  544. operateFixed: false, //操作栏是否固定(默认false)
  545. operateWidth: '130', //操作栏宽度
  546. operate: {
  547. edit: false, //是否编辑(默认true)
  548. delete: false, //是否删除(默认true)
  549. announcement: false, // 公告
  550. remark: IsPermission(route, 'VIEW_LIST'), // 详情
  551. forbidden: false, // 禁用
  552. enable: false, // 启用
  553. authorization: false, // 授权
  554. cancel: false, // 取消订单
  555. writeOff: false, // 注销
  556. make: false, // 补缴
  557. },
  558. extend: [
  559. {
  560. type: 'index',
  561. label: '序号',
  562. },
  563. ],
  564. field: [
  565. {
  566. label: '支付单号',
  567. prop: 'externalOrderNo',
  568. },
  569. {
  570. label: '卡号',
  571. prop: 'cardId',
  572. },
  573. {
  574. label: '车牌号',
  575. prop: 'vehiclePlate',
  576. },
  577. {
  578. label: '车牌颜色',
  579. prop: 'vehiclePlatecolor',
  580. funRuleStarts: true,
  581. funRule: (val) => {
  582. return getDictLabel(VEHICLE_COLOR_TYPE, val)
  583. },
  584. },
  585. {
  586. label: '金额',
  587. prop: 'amount',
  588. funRuleStarts: true,
  589. funRule: (val: any) => {
  590. var m = 0
  591. var s1 = val.toString()
  592. var s2 = '0.01'.toString()
  593. try {
  594. m += s1.split('.')[1].length
  595. } catch (e) {}
  596. try {
  597. m += s2.split('.')[1].length
  598. } catch (e) {}
  599. return (
  600. (Number(s1.replace('.', '')) * Number(s2.replace('.', ''))) /
  601. Math.pow(10, m) +
  602. '元'
  603. )
  604. // return val === null ? 0+"元" : val*0.01+"元"
  605. },
  606. },
  607. {
  608. label: '状态',
  609. prop: 'status',
  610. width: '170',
  611. listData: statusList,
  612. // funRuleStarts: true,
  613. // funRule: (val: any) => {
  614. // return getDictLabel(statusList.value, val)
  615. // },
  616. },
  617. {
  618. label: '业务端口',
  619. prop: 'businessPort',
  620. width: '170',
  621. funRuleStarts: true,
  622. funRule: (val: any) => {
  623. return getDictLabel(portList.value, val)
  624. },
  625. },
  626. {
  627. label: '操作员',
  628. prop: 'salesmanNickName',
  629. },
  630. {
  631. prop: 'refundTime',
  632. label: '退款时间',
  633. width: '170px',
  634. funRuleStarts: true,
  635. funRule: (val: any) => {
  636. if (val) {
  637. return val.replaceAll('T', ' ')
  638. }
  639. return val
  640. },
  641. },
  642. {
  643. prop: 'insertTime',
  644. label: '创建时间',
  645. width: '170px',
  646. funRuleStarts: true,
  647. funRule: (val: any) => {
  648. if (val) {
  649. return val.replaceAll('T', ' ')
  650. }
  651. return val
  652. },
  653. },
  654. {
  655. prop: 'auditTime',
  656. label: '审核时间',
  657. width: '170px',
  658. funRuleStarts: true,
  659. funRule: (val: any) => {
  660. if (val) {
  661. return val.replaceAll('T', ' ')
  662. }
  663. return val
  664. },
  665. },
  666. ],
  667. })
  668. // 搜索按钮
  669. function btnSearch() {
  670. field.value.paging.currentPage = 1
  671. getList()
  672. }
  673. // 搜索重置
  674. function refreshLeft() {
  675. field.value.paging.currentPage = 1
  676. searchForm.value = {
  677. orderId: '',
  678. vehicleId: '',
  679. cardId: '',
  680. beginTime: '',
  681. finishTime: '',
  682. vehiclePlate: '',
  683. vehiclePlateColor: '',
  684. status: '',
  685. }
  686. value1.value = null
  687. getList()
  688. }
  689. function dateChangeHandle(val) {
  690. if (val) {
  691. searchForm.value.beginTime = val[0] + 'T00:00:00'
  692. searchForm.value.finishTime = val[1] + 'T23:59:59'
  693. } else {
  694. searchForm.value.beginTime = ''
  695. searchForm.value.finishTime = ''
  696. }
  697. }
  698. function getList() {
  699. crudRef.value.tableLoding = true
  700. let params: any = {
  701. pageNo: field.value.paging.currentPage,
  702. pageSize: field.value.paging.pageSize,
  703. suppleStatus: tableType.value,
  704. }
  705. let searchFormList = { ...searchForm.value }
  706. for (let key in searchFormList) {
  707. if (searchFormList[key]) {
  708. params[key] = searchFormList[key]
  709. }
  710. }
  711. BaseService.post('settlew/agencymapping/refundpage', params).then(
  712. (res: any) => {
  713. if (res && res.statusCode === 0) {
  714. let bizContent = res.data
  715. let data = bizContent.data || []
  716. console.log('====data', data)
  717. tableData.value = data
  718. crudRef.value.tableLoding = false
  719. field.value.paging.total = bizContent.totalCount
  720. } else {
  721. crudRef.value.tableLoding = false
  722. ElMessage.error(res.message)
  723. }
  724. }
  725. )
  726. }
  727. function handleCurrentChange(val: number) {
  728. field.value.paging.currentPage = val
  729. getList()
  730. }
  731. // 导出
  732. function downloadHandle() {}
  733. // 切换列表
  734. // function tableTypeChange(val) {
  735. // if (val) {
  736. // let findItem = radioData.find((item) => item.value === val);
  737. // console.log("item", findItem)
  738. // if (findItem) {
  739. // crudRef.value.tableFrom.field = findItem.fieldData || [];
  740. // }
  741. // refreshLeft();
  742. // }
  743. // }
  744. // 退款
  745. function handleRefund(row: IObject, refundNumreq) {
  746. refundNum.value = refundNumreq
  747. getRow(row.id)
  748. refundBtn.value = true
  749. if (refundNumreq > 1) {
  750. crudRef.value.title = '再次退款'
  751. } else {
  752. crudRef.value.title = '退款'
  753. }
  754. crudRef.value.dialogFormVisible = true
  755. }
  756. //查看
  757. function handleRemark(idx: any, row: any) {
  758. const data = toRaw(row)
  759. getRow(data.id)
  760. refundBtn.value = false
  761. }
  762. // 获取数据
  763. function getRow(id: string) {
  764. BaseService.post('settlew/agencymapping/refundquery', { id: id }).then(
  765. (res: any) => {
  766. if (res && res.statusCode === 0) {
  767. let bizContent = res.data
  768. let data = bizContent.data || {}
  769. console.log('data:', data)
  770. rowData.value = data
  771. rowData.value.cusType = data.cusType ?? ''
  772. rowData.value.bankType = data.bankType ?? ''
  773. rowData.value.refundAmount = data.refundAmount * 0.01 ?? ''
  774. } else {
  775. ElMessage.error(res.message)
  776. }
  777. }
  778. )
  779. }
  780. //取消
  781. function cancel() {
  782. refundBtn.value = false
  783. addForm.value = {
  784. ...initItem,
  785. }
  786. }
  787. // 退款审核
  788. function refundSubmit(id: string, examine: string) {
  789. let params: any = {
  790. id: id,
  791. examine: examine,
  792. operateType: rowData.value.operateType,
  793. refundAmount:
  794. rowData.value.refundAmount === null
  795. ? null
  796. : rowData.value.refundAmount * 100,
  797. bankCardId: rowData.value.bankCardId,
  798. bankType: rowData.value.bankType,
  799. province: rowData.value.province,
  800. sell: rowData.value.sell,
  801. cusName: rowData.value.cusName,
  802. cusTel: rowData.value.cusTel,
  803. cusType: rowData.value.cusType,
  804. branchName: rowData.value.branchName,
  805. }
  806. let reqApi = 'settlew/agencymapping/examine'
  807. if (refundNum.value > 1) {
  808. reqApi = refundOncemoreApi
  809. }
  810. console.log(params, 'paramsparams')
  811. BaseService.post(reqApi, params).then((res: any) => {
  812. if (res && res.statusCode === 0) {
  813. ElMessage.success('操作成功')
  814. crudRef.value.dialogFormVisible = false
  815. getList()
  816. } else {
  817. ElMessage.error(res.message)
  818. }
  819. })
  820. }
  821. // 退款核对
  822. function handleCheck(id: string, examine: string) {
  823. let params: any = {
  824. id: id,
  825. result: examine,
  826. }
  827. BaseService.post(refundCheckApi, params).then((res: any) => {
  828. if (res && res.statusCode === 0) {
  829. ElMessage.success('操作成功')
  830. crudRef.value.dialogFormVisible = false
  831. getList()
  832. } else {
  833. ElMessage.error(res.message)
  834. }
  835. })
  836. }
  837. function download() {
  838. crudRef.value.tableLoding = true
  839. let params: any = {}
  840. let searchFormList = { ...searchForm.value }
  841. for (let key in searchFormList) {
  842. if (searchFormList[key]) {
  843. params[key] = searchFormList[key]
  844. }
  845. }
  846. BaseService.post('settlew/agencymapping/refundexport', params).then(
  847. (res: any) => {
  848. if (res && res.statusCode === 0) {
  849. let bizContent = res.data
  850. BaseService.getDownload(
  851. import.meta.env.VITE_APP_UPLOAD_URL + bizContent.fileUrl,
  852. '退费信息'
  853. )
  854. crudRef.value.tableLoding = false
  855. getList()
  856. } else {
  857. crudRef.value.tableLoding = false
  858. ElMessage.error(res.message)
  859. getList()
  860. }
  861. }
  862. )
  863. }
  864. onMounted(() => {
  865. getList()
  866. })
  867. </script>
  868. <style scoped lang="less">
  869. .data-item {
  870. display: inline-block;
  871. padding: 10px;
  872. border: 1px solid #d7d7d7;
  873. height: 200px;
  874. width: 100%;
  875. overflow-y: auto;
  876. }
  877. .row-wrap {
  878. margin-bottom: 16px;
  879. }
  880. .col-wrap {
  881. display: flex;
  882. align-items: center;
  883. .label {
  884. color: #333;
  885. width: 100px;
  886. text-align: right;
  887. }
  888. & > span:last-child {
  889. color: #666;
  890. margin-left: 8px;
  891. }
  892. }
  893. </style>