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 22KB

2 viikkoa sitten
2 viikkoa sitten
2 viikkoa sitten
2 viikkoa sitten
2 viikkoa sitten
2 viikkoa sitten
2 viikkoa sitten
2 viikkoa sitten
2 viikkoa sitten
2 viikkoa sitten
2 viikkoa sitten
2 viikkoa sitten
2 viikkoa sitten
2 viikkoa sitten
2 viikkoa sitten
2 viikkoa sitten
2 viikkoa sitten
2 viikkoa sitten
2 viikkoa sitten
2 viikkoa sitten
2 viikkoa sitten
2 viikkoa sitten
2 viikkoa sitten
2 viikkoa sitten
2 viikkoa sitten
2 viikkoa sitten
2 viikkoa sitten
2 viikkoa sitten
2 viikkoa sitten
2 viikkoa sitten
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670
  1. <template>
  2. <div>
  3. <crud-template v-if="itemStart" class="as-weight" :ref="(el) => crudRef = el" :home-data="field"
  4. @btnSearch="btnSearch" @refreshLeft="refreshLeft" :tableData="tableData" @CurrentChange="handleCurrentChange"
  5. @handleRemark="handleRemark" @cancel="cancel" @download="download" @pageSizeChange="(val) => {
  6. field.paging.currentPage = 1
  7. field.paging.pageSize = val
  8. getList()
  9. }">
  10. <template #search>
  11. <el-input maxlength="60" v-trim clearable v-model="searchForm.externalOrderNo" style="width: 160px;"
  12. placeholder="请输入支付单号" />
  13. <el-input
  14. maxlength="60"
  15. v-trim
  16. clearable
  17. v-model="searchForm.vehiclePlate"
  18. placeholder="请输入车牌号"
  19. style="width: 320px"
  20. >
  21. <template #append>
  22. <el-select
  23. clearable
  24. v-model="searchForm.vehiclePlatecolor"
  25. placeholder="请选择车牌颜色"
  26. style="width: 150px"
  27. >
  28. <el-option
  29. :label="item.label"
  30. :key="item.label"
  31. :value="item.value"
  32. v-for="item in VEHICLE_COLOR_TYPE"
  33. />
  34. </el-select>
  35. </template>
  36. </el-input>
  37. <el-input maxlength="60" v-trim clearable v-model="searchForm.cardId" style="width: 160px;"
  38. placeholder="请输入卡号" />
  39. <el-select
  40. clearable
  41. v-model="searchForm.status"
  42. placeholder="请选择退费状态"
  43. style="width: 200px"
  44. >
  45. <el-option
  46. v-for="item in statusList"
  47. :label="item.label"
  48. :value="item.value"
  49. />
  50. </el-select>
  51. <el-select
  52. clearable
  53. v-model="searchForm.businessPort"
  54. placeholder="请选择退费业务"
  55. style="width: 200px"
  56. >
  57. <el-option
  58. v-for="item in portList"
  59. :label="item.label"
  60. :value="item.value"
  61. />
  62. </el-select>
  63. <el-date-picker unlink-panels clearable v-model="value1" type="daterange" range-separator="到"
  64. start-placeholder="创建开始日期" end-placeholder="创建结束日期" value-format="YYYY-MM-DD" format="YYYY-MM-DD"
  65. @change="dateChangeHandle" :clearable="true" />
  66. </template>
  67. <template #operation="{ scope }">
  68. <el-button type="primary" @click="confirmRefund(scope.row)" size="small"
  69. v-if="scope.row.status === 'AUDITED' && IsPermission(route, 'REFUND_CONFIRM')">退款确认</el-button>
  70. <el-button type="primary" @click="handleCheck(scope.row.id, 'REFUNDED')" size="small"
  71. v-if="scope.row.status === 'ARTIFICIAL' && IsPermission(route, 'REFUNDED')">已退款</el-button>
  72. <el-button type="warning" @click="handleCheck(scope.row.id, 'REFUNDFAILED')" size="small"
  73. v-if="scope.row.status === 'ARTIFICIAL' && IsPermission(route, 'NO_REFUND')">未退款</el-button>
  74. </template>
  75. <template #dialog>
  76. <el-descriptions :column="3" border>
  77. <el-descriptions-item label="支付单号" label-align="right" align="center">
  78. {{ rowData.externalOrderNo }}
  79. </el-descriptions-item>
  80. <el-descriptions-item label="ETC卡号" label-align="right" align="center">
  81. {{ rowData.cardId }}
  82. </el-descriptions-item>
  83. <el-descriptions-item label="车牌号" label-align="right" align="center">
  84. {{ rowData.vehiclePlate }}
  85. </el-descriptions-item>
  86. <el-descriptions-item label="车牌颜色" label-align="right" align="center">
  87. {{ getDictLabel(VEHICLE_COLOR_TYPE, rowData.vehiclePlatecolor) }}
  88. </el-descriptions-item>
  89. <el-descriptions-item label="金额(元)" label-align="right" align="center">
  90. {{
  91. rowData.amount === null ? 0 + "元" : rowData.amount * 0.01 + "元"
  92. }}
  93. </el-descriptions-item>
  94. <el-descriptions-item label="状态" label-align="right" align="center">
  95. {{ getDictLabel($storeinitData.state.dictData['REFUND_STATUS'], rowData.status) }}
  96. </el-descriptions-item>
  97. <el-descriptions-item label="业务端口" label-align="right" align="center">
  98. {{ getDictLabel(portList, rowData.businessPort) }}
  99. </el-descriptions-item>
  100. <el-descriptions-item label="申请时间" label-align="right" align="center">
  101. {{ rowData.insertTime ? rowData.insertTime.replaceAll("T", " ") : ""}}
  102. </el-descriptions-item>
  103. <el-descriptions-item v-if="rowData.salesmanNickName !== null" label="业务员" label-align="right" align="center">
  104. {{ rowData.salesmanNickName }}
  105. </el-descriptions-item>
  106. <el-descriptions-item label="联系人姓名" label-align="right" align="center">{{ rowData.userName
  107. }}</el-descriptions-item>
  108. <el-descriptions-item label="手机号" label-align="right" align="center">{{ rowData.userMobile
  109. }}</el-descriptions-item>
  110. <el-descriptions-item label="退费方式" label-align="right" align="center">
  111. {{ getDictLabel(refundOperateTypeList, rowData.operateType) }}
  112. </el-descriptions-item>
  113. <el-descriptions-item
  114. v-if="rowData.operateType === 'ORIGINAL'"
  115. label="原路退回方式"
  116. label-align="right"
  117. align="center"
  118. >
  119. {{ rowData.payReturnType ?? "---" }}
  120. </el-descriptions-item>
  121. </el-descriptions>
  122. <el-descriptions title="银行卡退费信息" v-if="rowData.operateType === 'BANK'" :column="3" border>
  123. <el-descriptions-item label="开户行" label-align="right" align="center">
  124. {{ getDictLabel(bankTypeList, rowData.bankType) }}
  125. </el-descriptions-item>
  126. <el-descriptions-item label="银行卡号" label-align="right" align="center">
  127. {{ rowData.bankCardId }}
  128. </el-descriptions-item>
  129. <el-descriptions-item label="开户行所在的省" label-align="right" align="center">
  130. {{ rowData.province }}
  131. </el-descriptions-item>
  132. <el-descriptions-item label="开户行所在的市" label-align="right" align="center">
  133. {{ rowData.sell }}
  134. </el-descriptions-item>
  135. <el-descriptions-item label="开户人名称" label-align="right" align="center">
  136. {{ rowData.cusName }}
  137. </el-descriptions-item>
  138. <el-descriptions-item label="开户用户类型" label-align="right" align="center">
  139. {{ getDictLabel(cusTypeList, rowData.cusType) }}</el-descriptions-item>
  140. <el-descriptions-item label="开户人联系方式" label-align="right" align="center">
  141. {{ rowData.cusTel }}
  142. </el-descriptions-item>
  143. <el-descriptions-item label="开户行支行名称" label-align="right" align="center">
  144. {{ rowData.branchName }}
  145. </el-descriptions-item>
  146. </el-descriptions>
  147. <el-descriptions title="实际退费信息" v-if="refundBtn || rowData.refundAmount" :column="3" border>
  148. <el-descriptions-item label="实际退费金额(元)" label-align="right" align="center">
  149. {{ rowData.refundAmount }}
  150. </el-descriptions-item>
  151. </el-descriptions>
  152. <el-descriptions title="付费银行账号信息" v-if="rowData.operateType === 'BANK'" :column="2" border>
  153. <el-descriptions-item label="付费银行" label-align="right" align="center" v-if="refundBtn">
  154. <el-select clearable v-model="rowData.paymentBankType" :disabled="!refundBtn" class="m-2"
  155. placeholder="请选择付费银行">
  156. <el-option v-for="item in bankTypeList" :key="item.value" :label="item.label" :value="item.value" />
  157. </el-select>
  158. </el-descriptions-item>
  159. <el-descriptions-item label="付费银行卡号" label-align="right" align="center" v-if="refundBtn">
  160. <el-input maxlength="60" v-trim clearable v-model="rowData.paymentBankCardId" :disabled="!refundBtn"
  161. placeholder="请输入银行卡号" />
  162. </el-descriptions-item>
  163. <el-descriptions-item label="付费银行" label-align="right" align="center" v-if="!refundBtn">
  164. {{ getDictLabel(bankTypeList, rowData.paymentBankType) }}
  165. </el-descriptions-item>
  166. <el-descriptions-item label="付费银行卡号" label-align="right" align="center" v-if="!refundBtn">
  167. {{ rowData.paymentBankCardId }}
  168. </el-descriptions-item>
  169. </el-descriptions>
  170. </template>
  171. <template #footer>
  172. <el-button type="primary" @click="refundSubmit(rowData.id, '退费确认')" v-if="refundBtn">退费确认</el-button>
  173. <el-button type="primary" @click="refundSubmit(rowData.id, '重新审核')" v-if="refundBtn">重新审核</el-button>
  174. <el-button type="primary" @click="cancellation" v-if="refundBtn">取消</el-button>
  175. </template>
  176. </crud-template>
  177. </div>
  178. </template>
  179. <!-- 退款管理 -->
  180. <script lang="ts" setup>
  181. // @ts-ignore crudFrom模板
  182. import CrudTemplate from '@/crud/index.vue'
  183. import { reactive, ref, toRaw, getCurrentInstance, onMounted, computed } from 'vue'
  184. import { ElNotification, ElMessage } from "element-plus";
  185. import Cookies from 'js-cookie'
  186. import { useDebounce, getDictLabel } from "@/utils/utils";
  187. import BaseService from "@/utils/baseService";
  188. import { IHttpResponse, IObject } from "@/types/interface";
  189. import { logListApi } from "@/api/api";
  190. import { cloneDeep } from 'lodash';
  191. import { refundPageApi, refundQueryApi, refundExamineApi, refundOncemoreApi, refundCheckApi, refundConfirmApi, refundExportApi } from "@/api/onlineBusinessHall/salesAndQuery";
  192. import $storeinitData from "@/store/initData";
  193. import { useRoute } from 'vue-router';
  194. import { IsPermission } from "@/router/routerUtil";
  195. import { getDefaultTime } from '../../exportFn';
  196. import moment from 'moment';
  197. //或取路由传入过来的对象数据
  198. const route = useRoute();
  199. const crudRef = ref()
  200. const itemStart = ref(true)
  201. const tableType = ref(null);
  202. const refundBtn = ref(false);
  203. const searchForm = ref({
  204. externalOrderNo: '',
  205. cardId: '',
  206. startTime: '',
  207. endTime: '',
  208. vehiclePlate: '',
  209. vehiclePlatecolor: '',
  210. status: '',
  211. })
  212. const statusList = computed(() => {
  213. return $storeinitData.state.dictData['REFUND_STATUS'] || []
  214. })
  215. const portList = computed(() => {
  216. return $storeinitData.state.dictData['REFUND_BUSINESS'] || []
  217. })
  218. const refundOperateTypeList = computed(() => {
  219. return $storeinitData.state.dictData['REFUND_OPERATE_TYPE'] || []
  220. })
  221. const cusTypeList = computed(() => {
  222. return $storeinitData.state.dictData['ETC_USER_TYPE'] || []
  223. })
  224. const bankTypeList = computed(() => {
  225. return $storeinitData.state.dictData['BANK_TYPE'] || []
  226. })
  227. const VEHICLE_COLOR_TYPE = computed(() => {
  228. return $storeinitData.state.dictData['VEHICLE_COLOR_TYPE'] || []
  229. }) //车牌颜色
  230. const refundNum = ref(0)
  231. const tableData = ref([] as any[]);
  232. const rowData = ref({});
  233. const initItem = {
  234. id: "",
  235. };
  236. const addForm: any = ref(initItem);
  237. //表单数据配置
  238. const field = ref({
  239. tabSize: 'small', //Table 的尺寸 large / default /small (默认default)
  240. searchShow: IsPermission(route, 'QUERY_BASE'), //是否显示搜索模块(默认false)
  241. border: true, //是否添加边框(默认false)
  242. dialogCustom: true, //自定义Dialog (默认false)
  243. dialogFooter: true, //隐藏弹窗页脚显示 (默认false)
  244. dialogWidth: '60%', //dialog宽度 (默认40%)
  245. crudShow: true, //是否显示CURD操作栏 (默认true)
  246. crudChildShow: true, //是否显示CURD子操作栏 (默认true)
  247. paginStart: true, //是否显示分页查询 (默认false)
  248. isPageSizes: true,
  249. pageLayout: 'total, sizes, prev, pager, next',
  250. titleDialog: "", //table 标题
  251. tableOperation: true,
  252. paging: {
  253. pageSize: 10,
  254. currentPage: 1,
  255. total: 0
  256. },
  257. crud: {
  258. add: false,
  259. edit: false,
  260. delete: false,
  261. derive: false,
  262. search: false,
  263. refresh: false,
  264. },
  265. searchOperation: {
  266. isDownload: true,
  267. isAdd: false,
  268. isTransferMachine: false
  269. },
  270. tableSize: -1,
  271. operateShow: true, //是否为表格添加操作栏(默认true)
  272. operateTitle: '操作', //操作栏标题(默认为"")
  273. operateFixed: false, //操作栏是否固定(默认false)
  274. operateWidth: '150', //操作栏宽度
  275. operate: {
  276. edit: false, //是否编辑(默认true)
  277. delete: false, //是否删除(默认true)
  278. announcement: false, // 公告
  279. remark: true, // 详情
  280. forbidden: false, // 禁用
  281. enable: false, // 启用
  282. authorization: false, // 授权
  283. cancel: false,// 取消订单
  284. writeOff: false,// 注销
  285. make: false,// 补缴
  286. },
  287. extend: [
  288. {
  289. type: 'index',
  290. label: '序号',
  291. },
  292. ],
  293. field: [
  294. {
  295. label: '支付单号',
  296. prop: 'externalOrderNo',
  297. },
  298. {
  299. label: '卡号',
  300. prop: 'cardId',
  301. },
  302. {
  303. label: '车牌号',
  304. prop: 'vehiclePlate',
  305. },
  306. {
  307. label: '车牌颜色',
  308. prop: 'vehiclePlatecolor',
  309. funRuleStarts: true,
  310. funRule: (val) => {
  311. return getDictLabel(VEHICLE_COLOR_TYPE, val)
  312. },
  313. },
  314. {
  315. label: '金额(元)',
  316. prop: 'amount',
  317. unit: "元",
  318. funRuleStarts: true,
  319. funRule: (val: any) => {
  320. var m = 0;
  321. var s1 = val.toString();
  322. var s2 = '0.01'.toString();
  323. try {
  324. m += s1.split(".")[1].length;
  325. } catch (e) { }
  326. try {
  327. m += s2.split(".")[1].length;
  328. } catch (e) { }
  329. return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
  330. // return val === null ? 0+"元" : val*0.01+"元"
  331. },
  332. },
  333. {
  334. label: '状态',
  335. prop: 'status',
  336. width: "170",
  337. funRuleStarts: true,
  338. funRule: (val: any) => {
  339. return getDictLabel(statusList.value, val)
  340. },
  341. },
  342. {
  343. label: '业务端口',
  344. prop: 'businessPort',
  345. width: "170",
  346. funRuleStarts: true,
  347. funRule: (val: any) => {
  348. return getDictLabel(portList.value, val)
  349. },
  350. },
  351. {
  352. label: '操作员',
  353. prop: 'salesmanNickName',
  354. },
  355. {
  356. prop: 'refundTime',
  357. label: '退款时间',
  358. width: '170px',
  359. funRuleStarts: true,
  360. funRule: (val: any) => {
  361. if (val) {
  362. return val.replaceAll('T', ' ')
  363. }
  364. return val
  365. },
  366. },
  367. {
  368. prop: 'insertTime',
  369. label: '创建时间',
  370. width: '170px',
  371. funRuleStarts: true,
  372. funRule: (val: any) => {
  373. if (val) {
  374. return val.replaceAll('T', ' ')
  375. }
  376. return val
  377. },
  378. },
  379. {
  380. prop: 'auditTime',
  381. label: '审核时间',
  382. width: '170px',
  383. funRuleStarts: true,
  384. funRule: (val: any) => {
  385. if (val) {
  386. return val.replaceAll('T', ' ')
  387. }
  388. return val
  389. },
  390. },
  391. ],
  392. })
  393. // 搜索按钮
  394. function btnSearch() {
  395. field.value.paging.currentPage = 1;
  396. getList();
  397. }
  398. // 搜索重置
  399. function refreshLeft() {
  400. field.value.paging.currentPage = 1;
  401. searchForm.value = {
  402. externalOrderNo: '',
  403. cardId: '',
  404. startTime: '',
  405. endTime: '',
  406. vehiclePlate: '',
  407. vehiclePlatecolor: '',
  408. status: '',
  409. }
  410. value1.value = []
  411. tableData.value = [];
  412. getList();
  413. }
  414. // const defaultTime: [Date, Date] = getDefaultTime('day', 1,'YYYY-MM-DD')
  415. // const value1: any = ref(defaultTime) // 筛选时间
  416. const value1 = ref([])
  417. // 时间
  418. function dateChangeHandle(val) {
  419. if (val) {
  420. searchForm.value.startTime = val[0] + ' 00:00:00';
  421. searchForm.value.endTime = val[1] + ' 23:59:59';
  422. } else {
  423. searchForm.value.startTime = '';
  424. searchForm.value.endTime = '';
  425. }
  426. }
  427. // function dateChange(time) {
  428. // if (time) {
  429. // time = moment(time).format("YYYY-MM-DD");
  430. // }
  431. // return time
  432. // }
  433. function download() {
  434. crudRef.value.tableLoding = true;
  435. let params: any = {
  436. }
  437. let searchFormList = { ...searchForm.value }
  438. for (let key in searchFormList) {
  439. if (searchFormList[key]) {
  440. params[key] = searchFormList[key]
  441. }
  442. }
  443. BaseService.postN('/settlew/api/issue/refund/export', params).then(
  444. (res: any) => {
  445. if (res && res.code === 0) {
  446. let bizContent = res.data
  447. BaseService.getDownload(import.meta.env.VITE_APP_UPLOAD_URL + bizContent.fileUrl, "退费信息")
  448. crudRef.value.tableLoding = false;
  449. getList()
  450. } else {
  451. crudRef.value.tableLoding = false;
  452. ElMessage.error(res.message)
  453. getList()
  454. }
  455. })
  456. }
  457. function getList() {
  458. crudRef.value.tableLoding = true;
  459. let params: any = {
  460. pageNo: field.value.paging.currentPage,
  461. pageSize: field.value.paging.pageSize,
  462. status: tableType.value
  463. }
  464. let searchFormList = { ...searchForm.value }
  465. for (let key in searchFormList) {
  466. if (searchFormList[key]) {
  467. params[key] = searchFormList[key]
  468. }
  469. }
  470. BaseService.postN('/settlew/api/issue/refund/page', params).then((res: any) => {
  471. if (res && res.statusCode === 0) {
  472. let bizContent = res.data
  473. let data = bizContent.result || [];
  474. console.log("====data", data)
  475. tableData.value = data;
  476. crudRef.value.tableLoding = false;
  477. field.value.paging.total = bizContent.totalCount;
  478. } else {
  479. crudRef.value.tableLoding = false;
  480. ElMessage.error(res.message)
  481. }
  482. })
  483. }
  484. function handleCurrentChange(val: number) {
  485. field.value.paging.currentPage = val;
  486. getList();
  487. }
  488. // 导出
  489. function downloadHandle() {
  490. }
  491. // 切换列表
  492. // function tableTypeChange(val) {
  493. // if (val) {
  494. // let findItem = radioData.find((item) => item.value === val);
  495. // console.log("item", findItem)
  496. // if (findItem) {
  497. // crudRef.value.tableFrom.field = findItem.fieldData || [];
  498. // }
  499. // refreshLeft();
  500. // }
  501. // }
  502. function confirmRefund(row: IObject) {
  503. getRow(row.id)
  504. refundBtn.value = true;
  505. crudRef.value.title = "退款确认";
  506. crudRef.value.dialogFormVisible = true;
  507. }
  508. function cancellation() {
  509. refundBtn.value = false;
  510. crudRef.value.dialogFormVisible = false;
  511. }
  512. //查看
  513. function handleRemark(idx: any, row: any) {
  514. const data = toRaw(row);
  515. rowData.value = {
  516. ...data
  517. // cusType: data.cusType ?? null,
  518. // bankType: data.bankType ?? null,
  519. // refundAmount: data.amount ? data.amount * 0.01 : null,
  520. // operateType: data.operateType ?? ''
  521. }
  522. refundBtn.value = false;
  523. }
  524. // 获取数据
  525. function getRow(id: string) {
  526. // BaseService.postN('/settlew/agencymapping/refundquery', { id: id }).then((res: any) => {
  527. // if (res && res.code === 0) {
  528. // let bizContent = res.data
  529. // let data = bizContent.data || {};
  530. // console.log("data:", data)
  531. // rowData.value = data;
  532. // if (data.cusType !== null) {
  533. // rowData.value.cusType = '' + data.cusType;
  534. // }
  535. // if (data.bankType !== null) {
  536. // rowData.value.bankType = '' + data.bankType;
  537. // }
  538. // if (data.refundAmount !== null) {
  539. // rowData.value.refundAmount = data.refundAmount * 0.01;
  540. // }
  541. // } else {
  542. // ElMessage.error(res.message)
  543. // }
  544. // })
  545. }
  546. //取消
  547. function cancel() {
  548. refundBtn.value = false;
  549. addForm.value = {
  550. ...initItem
  551. }
  552. }
  553. // const submitHandle = useDebounce(refundSubmit)
  554. // 退款审核
  555. let timer: any = null
  556. function refundSubmit(id: string, examine: string) {
  557. if (timer) return
  558. timer = setTimeout(() => {
  559. let params: any = {
  560. id: id,
  561. censorResult: examine,
  562. paymentBankType: rowData.value.paymentBankType,
  563. paymentBankCardId: rowData.value.paymentBankCardId,
  564. failReason: ""
  565. }
  566. let reqApi = '/settlew/api/issue/refund/result';
  567. BaseService.post(reqApi, params).then((res: any) => {
  568. if (res && res.code === 0) {
  569. ElMessage.success("操作成功")
  570. crudRef.value.dialogFormVisible = false;
  571. getList()
  572. } else {
  573. ElMessage.error(res.message)
  574. }
  575. })
  576. timer = null
  577. }, 1000)
  578. }
  579. function conversion(val: any) {
  580. var m = 0;
  581. if (!val) return 0
  582. var s1 = val.toString();
  583. var s2 = '0.01'.toString();
  584. try {
  585. m += s1.split(".")[1].length;
  586. } catch (e) { }
  587. try {
  588. m += s2.split(".")[1].length;
  589. } catch (e) { }
  590. return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
  591. // return val === null ? 0+"元" : val*0.01+"元"
  592. }
  593. // 退款核对
  594. function handleCheck(id: string, examine: string) {
  595. let params: any = {
  596. id: id,
  597. result: examine,
  598. }
  599. BaseService.post(refundCheckApi, params).then((res: any) => {
  600. if (res && res.code === 0) {
  601. ElMessage.success("操作成功")
  602. crudRef.value.dialogFormVisible = false;
  603. getList()
  604. } else {
  605. ElMessage.error(res.message)
  606. }
  607. })
  608. }
  609. onMounted(() => {
  610. getList();
  611. })
  612. </script>
  613. <style scoped lang="less">
  614. .data-item {
  615. display: inline-block;
  616. padding: 10px;
  617. border: 1px solid #d7d7d7;
  618. height: 200px;
  619. width: 100%;
  620. overflow-y: auto;
  621. }
  622. .row-wrap {
  623. margin-bottom: 16px;
  624. }
  625. .col-wrap {
  626. display: flex;
  627. align-items: center;
  628. .label {
  629. color: #333;
  630. width: 100px;
  631. text-align: right;
  632. }
  633. &>span:last-child {
  634. color: #666;
  635. margin-left: 8px;
  636. }
  637. }
  638. </style>