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.

806 lines
27 KiB

2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
2 months ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
1 month ago
1 month ago
2 months ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
2 months ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
1 month ago
2 months ago
2 months ago
1 month ago
2 months ago
2 months ago
2 months ago
1 month ago
1 month ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
1 month ago
1 month ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
1 month ago
1 month ago
2 months ago
1 month ago
2 months ago
  1. <!-- 客服 -->
  2. <template>
  3. <el-card style="margin-bottom: 0.5vh;background-color: rgb(243,250,254);">
  4. <div class="condition">
  5. <div class="item1">
  6. <el-text size="large" style="width:4vw;">精网号</el-text>
  7. <el-input v-model="searchForm.jwcode" placeholder="请输入精网号" style="width:9vw;" clearable />
  8. </div>
  9. <div class="item1">
  10. <el-text size="large" style="width:4vw;">客户姓名</el-text>
  11. <el-input v-model="searchForm.name" placeholder="请输入客户姓名" style="width:9vw;" clearable />
  12. </div>
  13. <div class="item1">
  14. <el-text size="large" style="width:4vw;">所属地区</el-text>
  15. <el-cascader style="width: 9vw;" v-model="searchForm.market" :options="market"
  16. placeholder="请选择所属地区" clearable @change="handleMarketChange" />
  17. </div>
  18. <div class="item1">
  19. <el-text size="large" style="width:4vw;">产品名称</el-text>
  20. <el-cascader v-model="searchForm.goodsName" :options="productList" style="width: 10vw;" />
  21. </div>
  22. <div class="item1">
  23. <el-text size="large" style="width:4vw;" multiple>订单状态</el-text>
  24. <el-select v-model="searchForm.statuses" style="width:9vw;">
  25. <el-option v-for="item in statusList" :key="item.value" :label="item.label" :value="item.value" />
  26. </el-select>
  27. </div>
  28. </div>
  29. <div class="condition">
  30. <div class="item2">
  31. <el-text size="large" style="width:4vw;">付款币种</el-text>
  32. <el-select v-model="searchForm.paymentCurrency" style="width:9vw;">
  33. <el-option v-for="item in currencies" :key="item.value" :label="item.label" :value="item.value" />
  34. </el-select>
  35. </div>
  36. <div class="item2">
  37. <el-text size="large" style="width:4vw;">支付方式</el-text>
  38. <el-select v-model="searchForm.payType" style="width:9vw;">
  39. <el-option v-for="item in channelOptions" :key="item.value" :label="item.label" :value="item.value" />
  40. </el-select>
  41. </div>
  42. <div class="item2" style="width: 28.5vw;">
  43. <el-text size="large" style="width:4vw;">付款时间</el-text>
  44. <el-date-picker v-model="dateRange" type="datetimerange" range-separator="" start-placeholder="起始时间"
  45. end-placeholder="结束时间" style="width:22vw;" :disabled-date="disabledDate" />
  46. </div>
  47. <div>
  48. <el-button type="primary" @click="getRefund">查询</el-button>
  49. <el-button type="success" @click="reset">重置</el-button>
  50. <el-button type="warning">导出excel</el-button>
  51. <el-button type="primary">查看导出列表</el-button>
  52. </div>
  53. </div>
  54. </el-card>
  55. <el-card style="margin-top: 0.5vh;background-color: rgb(231,244,253);">
  56. <el-table :data="tableData" style="height:64vh;width:82vw;background-color: rgb(243,250,254);">
  57. <el-table-column type="index" label="序号" width="60" fixed="left" />
  58. <el-table-column prop="jwcode" label="Homily ID" width="120" fixed="left" />
  59. <el-table-column prop="name" label="姓名" width="120" fixed="left" show-overflow-tooltip />
  60. <el-table-column prop="market" label="所属地区" width="120" />
  61. <el-table-column prop="activity" label="活动名称" width="120px" show-overflow-tooltip />
  62. <el-table-column prop="goodsName" label="产品名称" width="120" />
  63. <el-table-column prop="goodNum" label="产品数量" width="120" />
  64. <el-table-column prop="paymentCurrency" label="付款币种" width="120" />
  65. <el-table-column prop="paymentAmount" label="付款金额" width="120" />
  66. <el-table-column prop="payType" label="支付方式" width="120" />
  67. <el-table-column prop="payTime" label="付款时间" width="180" />
  68. <el-table-column prop="voucher" label="转账凭证" width="120" show-overflow-tooltip>
  69. <template #default="scope">
  70. <img v-if="scope.row.voucher" :src="scope.row.voucher" style="width: 40px; height: 40px;" />
  71. <span v-else>无转账凭证</span>
  72. </template>
  73. </el-table-column>
  74. <el-table-column prop="remark" label="备注" width="150" show-overflow-tooltip />
  75. <el-table-column prop="status" label="订单状态" width="120">
  76. <template #default="scope">
  77. {{
  78. [10, 20, 30, 40].includes(scope.row.status) ? '审核中' :
  79. [12, 22, 32].includes(scope.row.status) ? '审核驳回' :
  80. scope.row.status === 41 ? '退款完成' : scope.row.status
  81. }}
  82. </template>
  83. </el-table-column>
  84. <el-table-column prop="operation" label="操作" fixed="right" width="100px">
  85. <template #default="scope">
  86. <div class="operation">
  87. <el-button v-if="scope.row.status === 10" type="primary" text
  88. @click="showBackDialog(scope.row)">
  89. 撤回
  90. </el-button>
  91. <el-button v-if="scope.row.status === 11" type="primary" text
  92. @click="showEditDialog(scope.row)">
  93. 编辑
  94. </el-button>
  95. </div>
  96. </template>
  97. </el-table-column>
  98. </el-table>
  99. <el-pagination v-model:current-page="pagination.pageNum" v-model:page-size="pagination.pageSize"
  100. layout="total, sizes, prev, pager, next, jumper" :total="pagination.total"
  101. @size-change="handlePageSizeChange" @current-change="handleCurrentChange"
  102. style="margin-top: 1vh;"></el-pagination>
  103. </el-card>
  104. <el-dialog v-model="showEdit" title="退款" class="editDialog" overflow draggable style="width: 40vw;">
  105. <div style="display: flex;">
  106. <div class="left">
  107. <div class="add-item">
  108. <el-text style="width:4vw;">精网号</el-text>
  109. <el-input v-model="editRow.jwcode" style="width:10vw;" disabled />
  110. </div>
  111. <div class="add-item">
  112. <el-text style="width:4vw;">客户姓名</el-text>
  113. <el-input v-model="editRow.name" style="width:10vw;" disabled />
  114. </div>
  115. <div class="add-item">
  116. <el-text style="width:4vw;">所属地区</el-text>
  117. <el-input v-model="editRow.marketName" style="width:10vw;" disabled />
  118. </div>
  119. <div class="add-item">
  120. <el-text style="width:4vw;">活动名称</el-text>
  121. <el-input v-model="editRow.activity" style="width:10vw;" disabled />
  122. </div>
  123. <div class="add-item">
  124. <el-text style="width:4vw;">产品名称</el-text>
  125. <el-input v-model="editRow.goodsName" style="width:10vw;" disabled />
  126. </div>
  127. <div class="add-item">
  128. <el-text style="width:4vw;">产品数量</el-text>
  129. <el-input v-model="editRow.goodNum" style="width:10vw;" disabled />
  130. &nbsp;
  131. </div>
  132. <div class="add-item">
  133. <el-text style="width:4vw;">付款币种</el-text>
  134. <el-input v-model="editRow.paymentCurrency" style="width:10vw;" disabled />
  135. </div>
  136. <div class="add-item">
  137. <el-text style="width:4vw;">付款金额</el-text>
  138. <el-input v-model="editRow.paymentAmount" style="width:10vw;" disabled />
  139. </div>
  140. <div class="add-item">
  141. <el-text style="width:4vw;">支付方式</el-text>
  142. <el-input v-model="editRow.payType" style="width:10vw;" disabled />
  143. </div>
  144. <div class="add-item">
  145. <el-text style="width:4vw;">付款时间</el-text>
  146. <el-date-picker v-model="editRow.payTime" type="datetime" style="width:10vw;" disabled />
  147. </div>
  148. <div class="add-item">
  149. <el-text style="width:4vw;">转账凭证</el-text>
  150. <img v-if="editRow.voucher" :src="editRow.voucher"
  151. style="width: 100%; height: 100%; object-fit: cover;">
  152. <div v-else>
  153. 无转账凭证
  154. </div>
  155. </div>
  156. <div class="add-item">
  157. <el-text style="width:4vw;">备注</el-text>
  158. <el-input v-model="editRow.remark" style="width:10vw;" :rows="3" type="textarea" maxLength="100"
  159. disabled show-word-limit />
  160. </div>
  161. </div>
  162. <div class="right">
  163. <div class="add-item">
  164. <el-text style="width:4vw;">退款模式</el-text>
  165. <el-radio-group v-model="editForm.refundModel">
  166. <el-radio value="0">全部退款</el-radio>
  167. <el-radio value="1">部分退款</el-radio>
  168. </el-radio-group>
  169. </div>
  170. <div class="add-item">
  171. <el-text style="width:4vw;">退款理由</el-text>
  172. <el-input v-model="editForm.refundReason" style="width:10vw;" :rows="5" maxlength="150"
  173. show-word-limit type="textarea" />
  174. </div>
  175. <div>ps:请在退款理由表明用户的退款需求</div>
  176. <div style="display:flex;justify-content: center;margin-top: 5vh;">
  177. <el-button type="default" @click="resetEdit">重置</el-button>
  178. <el-button type="primary" @click="submitEdit">提交</el-button>
  179. </div>
  180. </div>
  181. </div>
  182. </el-dialog>
  183. <el-dialog v-model="showSteps" overflow draggable width="1206px" :style="{
  184. backgroundImage: 'url(/src/assets/images/背景图.png)',
  185. backgroundSize: 'cover',
  186. backgroundPosition: 'center'
  187. }">
  188. <div class="steps">
  189. <div class="steps-content">
  190. <el-steps style="min-width: 60vw" :active="1" align-center>
  191. <el-step> <template #title>
  192. <div>提交人<br>你是死的</div>
  193. </template>
  194. <template #icon>
  195. <img src="@/assets/images/已审核.png" alt="已审核图标">
  196. </template>
  197. </el-step>
  198. <el-step title="地区财务">
  199. <template #icon>
  200. <img src="@/assets/images/待审核.png" alt="待审核图标">
  201. </template>
  202. </el-step>
  203. <el-step title="地区负责人">
  204. <template #icon>
  205. <img src="@/assets/images/还没传到.png" alt="还没传到图标">
  206. </template>
  207. </el-step>
  208. <el-step title="总部财务">
  209. <template #icon>
  210. <img src="@/assets/images/还没传到.png" alt="还没传到图标">
  211. </template>
  212. </el-step>
  213. <el-step title="指定执行人">
  214. <template #icon>
  215. <img src="@/assets/images/还没传到.png" alt="还没传到图标">
  216. </template>
  217. </el-step>
  218. </el-steps>
  219. </div>
  220. <div class="steps-btn">
  221. <el-button type="primary" @click="showSteps = false">确定</el-button>
  222. </div>
  223. </div>
  224. </el-dialog>
  225. <el-dialog v-model="showBack" title="撤回退款" overflow draggable class="back-dialog" :style="{
  226. backgroundImage: 'url(/src/assets/images/撤回.png)',
  227. backgroundSize: 'cover',
  228. backgroundPosition: 'center'
  229. }">
  230. <div class="back-text"> </div>
  231. <div class="back-btn">
  232. <el-button type="default" @click="showBack = false">取消</el-button>
  233. <el-button type="primary" @click="recall" style="margin-left: 2vw;">确定</el-button>
  234. </div>
  235. </el-dialog>
  236. <el-dialog v-model="showError" overflow draggable class="back-dialog" :style="{
  237. backgroundImage: 'url(/src/assets/images/撤回.png)',
  238. backgroundSize: 'cover',
  239. backgroundPosition: 'center'
  240. }">
  241. <div class="back-text">退 </div>
  242. <div class="back-btn">
  243. <el-button type="default" @click="showError = false">取消</el-button>
  244. <el-button type="primary" @click="" style="margin-left: 2vw;">确定</el-button>
  245. </div>
  246. </el-dialog>
  247. </template>
  248. <script setup>
  249. import { ref, onMounted } from 'vue'
  250. import { ElMessage } from 'element-plus'
  251. import API from '@/util/http.js'
  252. const uploadUrl = 'https://api.homilychart.com/hljw/api/aws/upload'
  253. import { useAdminStore } from "@/store/index.js"
  254. import { storeToRefs } from "pinia"
  255. import dayjs from 'dayjs'
  256. const adminStore = useAdminStore()
  257. const { adminData, menuTree } = storeToRefs(adminStore)
  258. import { permissionMapping, findMenuById, hasMenuPermission } from "@/utils/menuTreePermission.js"
  259. const dateRange = ref([])
  260. const searchForm = ref({
  261. jwcode: '',
  262. market: [],
  263. statuses: []
  264. })
  265. const market = ref([])
  266. const backRow = ref({})// 撤回存数据
  267. const editRow = ref({})// 编辑存数据
  268. const editForm = ref({
  269. refundModel: '',
  270. refundReason: ''
  271. })
  272. const auditForm = ref({
  273. refundType: ''
  274. })
  275. const pagination = ref({
  276. pageNum: 1,
  277. pageSize: 50,
  278. total: 0
  279. })
  280. const tableData = ref([])
  281. const showEdit = ref(false)
  282. const currentRow = ref({})// 审核进度行信息
  283. const showSteps = ref(false)
  284. const uploadRef = ref(null)
  285. const showBack = ref(false)
  286. const showError = ref(false)
  287. const isKF = adminData.value.adminName.includes('客服')
  288. const statusList = ref([
  289. {
  290. value: 'waiting',
  291. label: '待审核',
  292. },
  293. {
  294. value: 'pending',
  295. label: '审核中'
  296. },
  297. {
  298. value: 'completed',
  299. label: '退款完成'
  300. }
  301. ])
  302. // 查全部
  303. const getRefund = async function () {
  304. if (!hasMenuPermission(menuTree.value, permissionMapping.refundServiceShow)) {
  305. ElMessage.error('无此权限')
  306. return
  307. }
  308. try {
  309. if (searchForm.value.statuses === 'completed') {
  310. searchForm.value.statuses = [41]
  311. } else if (searchForm.value.statuses === 'pending') {
  312. searchForm.value.statuses = [20, 30, 40]
  313. } else if (searchForm.value.statuses === 'waiting') {
  314. searchForm.value.statuses = [10]
  315. }
  316. const params = {
  317. pageNum: pagination.value.pageNum,
  318. pageSize: pagination.value.pageSize,
  319. cashRecordDone: {
  320. jwcode: searchForm.value.jwcode,//精网号
  321. name: searchForm.value.name,//姓名
  322. markets: searchForm.value.market,//地区
  323. goodsName: searchForm.value.goodsName,//商品名
  324. statuses: searchForm.value.statuses,//10:地区财务待审核;12:地区财务驳回;
  325. // 20:地区负责人待审核;22:地区负责人驳回;
  326. // 30:总部财务待审核;32:总部财务驳回;
  327. // 40:执行人待处理;41:执行人已处理,退款完成;
  328. paymentCurrency: searchForm.value.paymentCurrency,//付款币种
  329. payType: searchForm.value.payType,//支付方式
  330. startTime: dateRange.value && dateRange.value[0] ? moment(dateRange.value[0]).format('YYYY-MM-DD HH:mm:ss') : "",
  331. endtime: dateRange.value && dateRange.value[1] ? moment(dateRange.value[1]).format('YYYY-MM-DD HH:mm:ss') : "",
  332. submitterId: isKF ? adminData.value.id : null
  333. }
  334. }
  335. const result = await API({
  336. url: '/Money/select',
  337. method: 'POST',
  338. data: params
  339. })
  340. tableData.value = result.data.list || []
  341. } catch (error) {
  342. ElMessage.error(error.message || '查询失败')
  343. }
  344. }
  345. // 撤回
  346. const recall = async function () {
  347. if (!hasMenuPermission(menuTree.value, permissionMapping.refundServiceBack)) {
  348. ElMessage.error('无此权限')
  349. return
  350. }
  351. try {
  352. console.log(backRow.value)
  353. const params = {
  354. id: backRow.value.id,
  355. status: backRow.value.status,
  356. orderType: backRow.value.orderType
  357. }
  358. const result = await API({
  359. url: '/Money/update',
  360. data: params
  361. })
  362. if (result.code === 200) {
  363. ElMessage.success(result.msg || '退款成功')
  364. showBack.value = false
  365. getRefund()
  366. } else {
  367. ElMessage.error(result.msg || '退款失败')
  368. }
  369. } catch (error) {
  370. ElMessage.error(error.message || '退款失败')
  371. }
  372. }
  373. // 编辑
  374. const submitEdit = async function () {
  375. if (!hasMenuPermission(menuTree.value, permissionMapping.refundServiceEdit)) {
  376. ElMessage.error('无此权限')
  377. return
  378. }
  379. try {
  380. console.log(editRow.value)
  381. const params = {
  382. id: editRow.value.id,
  383. status: editRow.value.status,
  384. refundModel: editForm.value.refundModel,
  385. refundReason: editForm.value.refundReason,
  386. jwcode: editRow.value.jwcode,
  387. paymentAmount: editRow.value.paymentAmount,
  388. paymentCurrency: editRow.value.paymentCurrency
  389. }
  390. const result = await API({
  391. url: '/Money/update',
  392. data: params
  393. })
  394. if (result.code === 200) {
  395. ElMessage.success(result.msg || '编辑成功')
  396. showEdit.value = false
  397. getRefund()
  398. } else {
  399. ElMessage.error(result.msg || '编辑失败')
  400. }
  401. } catch (error) {
  402. ElMessage.error(error.message || '编辑失败')
  403. }
  404. }
  405. const getMarket = async function () {
  406. try {
  407. const result = await API({
  408. url: '/market/selectMarket',
  409. })
  410. console.log('看看地区树', result)
  411. const transformTree = (nodes) => {
  412. const allChildren = nodes.flatMap(node => node.children || []);
  413. return allChildren.map(child => {
  414. const grandchildren = child.children && child.children.length
  415. ? transformTree([child])
  416. : null;
  417. return {
  418. value: child.name,
  419. label: child.name,
  420. children: grandchildren
  421. };
  422. });
  423. };
  424. market.value = transformTree(result.data)
  425. console.log('转换后的地区树==============', market.value)
  426. } catch (error) {
  427. console.log('请求失败', error)
  428. }
  429. }
  430. const currencies = ref([
  431. {
  432. value: '新币',
  433. label: '新币'
  434. },
  435. {
  436. value: '港币',
  437. label: '港币'
  438. },
  439. {
  440. value: '马币',
  441. label: '马币'
  442. },
  443. {
  444. value: '加币',
  445. label: '加币'
  446. },
  447. {
  448. value: '泰铢',
  449. label: '泰铢'
  450. },
  451. {
  452. value: '越南盾',
  453. label: '越南盾'
  454. }
  455. ])
  456. const channelOptions = ref([{
  457. value: '银行转账',
  458. label: '银行转账'
  459. },
  460. {
  461. value: '现金',
  462. label: '现金'
  463. },
  464. {
  465. value: '支票',
  466. label: '支票'
  467. },
  468. {
  469. value: '刷卡',
  470. label: '刷卡'
  471. },
  472. {
  473. value: 'Grabpay',
  474. label: 'Grabpay'
  475. },
  476. {
  477. value: 'Nets',
  478. label: 'Nets'
  479. },
  480. {
  481. value: 'PayPal',
  482. label: 'PayPal'
  483. },
  484. {
  485. value: 'Stripe-链接收款',
  486. label: 'Stripe-链接收款'
  487. },
  488. {
  489. value: 'Ipay88-链接收款',
  490. label: 'Ipay88-链接收款'
  491. },
  492. {
  493. value: 'PaymentAsia-链接收款',
  494. label: 'PaymentAsia-链接收款'
  495. },
  496. {
  497. value: 'Stripe-Link平台',
  498. label: 'Stripe-Link平台'
  499. },
  500. {
  501. value: 'PaymentAsia-Link平台',
  502. label: 'PaymentAsia-Link平台'
  503. },
  504. {
  505. value: 'FirstData-Link平台-Link平台',
  506. label: 'FirstData-Link平台-Link平台'
  507. },
  508. {
  509. value: 'IOS-Link平台',
  510. label: 'IOS-Link平台'
  511. },
  512. {
  513. value: 'Ipay88-Link平台',
  514. label: 'Ipay88-Link平台'
  515. }
  516. ])
  517. const productList = [
  518. {
  519. "value": "金币产品",
  520. "label": "金币产品",
  521. "children": [
  522. {
  523. "value": "金币充值",
  524. "label": "金币充值",
  525. }
  526. ]
  527. },
  528. {
  529. "value": "软件产品",
  530. "label": "软件产品",
  531. "children": [
  532. {
  533. "value": "美股",
  534. "label": "美股",
  535. "children": [
  536. {
  537. "value": "美股软件",
  538. "label": "美股软件"
  539. }
  540. ]
  541. },
  542. {
  543. "value": "港股",
  544. "label": "港股",
  545. "children": [
  546. {
  547. "value": "港股软件",
  548. "label": "港股软件"
  549. }
  550. ]
  551. },
  552. {
  553. "value": "A股",
  554. "label": "A股",
  555. "children": [
  556. {
  557. "value": "A股软件",
  558. "label": "A股软件"
  559. }
  560. ]
  561. },
  562. {
  563. "value": "新加坡股",
  564. "label": "新加坡股",
  565. "children": [
  566. {
  567. "value": "新加坡股软件",
  568. "label": "新加坡股软件"
  569. }
  570. ]
  571. },
  572. {
  573. "value": "马股",
  574. "label": "马股",
  575. "children": [
  576. {
  577. "value": "马股软件",
  578. "label": "马股软件"
  579. }
  580. ]
  581. },
  582. {
  583. "value": "日本股",
  584. "label": "日本股",
  585. "children": [
  586. {
  587. "value": "日本股软件",
  588. "label": "日本股软件"
  589. }
  590. ]
  591. },
  592. {
  593. "value": "泰股",
  594. "label": "泰股",
  595. "children": [
  596. {
  597. "value": "泰股软件",
  598. "label": "泰股软件"
  599. }
  600. ]
  601. },
  602. {
  603. "value": "越南股",
  604. "label": "越南股",
  605. "children": [
  606. {
  607. "value": "越南股软件",
  608. "label": "越南股软件"
  609. }
  610. ]
  611. },
  612. {
  613. "value": "印尼股",
  614. "label": "印尼股",
  615. "children": [
  616. {
  617. "value": "印尼股软件",
  618. "label": "印尼股软件"
  619. }
  620. ]
  621. },
  622. {
  623. "value": "韩国股",
  624. "label": "韩国股",
  625. "children": [
  626. {
  627. "value": "韩国股软件",
  628. "label": "韩国股软件"
  629. }
  630. ]
  631. },
  632. {
  633. "value": "台湾股",
  634. "label": "台湾股",
  635. "children": [
  636. {
  637. "value": "台湾股软件",
  638. "label": "台湾股软件"
  639. }
  640. ]
  641. }
  642. ]
  643. },
  644. ]
  645. const reset = function () {
  646. searchForm.value = {
  647. jwcode: ''
  648. }
  649. dateRange.value = []
  650. getRefund()
  651. }
  652. const resetEdit = function () {
  653. editForm.value = {
  654. refundModel: '',
  655. refundReason: ''
  656. }
  657. }
  658. const showBackDialog = function (row) {
  659. backRow.value = row
  660. showBack.value = true
  661. }
  662. const showEditDialog = function (row) {
  663. editRow.value = row
  664. showEdit.value = true
  665. }
  666. const handlePageSizeChange = function (val) {
  667. pagination.value.pageSize = val
  668. getRefund()
  669. }
  670. const handleCurrentChange = function (val) {
  671. pagination.value.pageNum = val
  672. getRefund()
  673. }
  674. const disabledDate = (time) => {
  675. const limitDate = new Date(2025, 0, 1);
  676. return time.getTime() < limitDate.getTime();
  677. }
  678. const handleMarketChange = (value) => {
  679. searchForm.value.market = value || []
  680. }
  681. onMounted(() => {
  682. getRefund()
  683. getMarket()
  684. console.log('???????????????????', adminData.value)
  685. })
  686. </script>
  687. <style scoped lang="scss">
  688. :deep(.el-table__header-wrapper),
  689. :deep(.el-table__body-wrapper),
  690. :deep(.el-table__cell),
  691. :deep(.el-table__body td) {
  692. background-color: #F3FAFE !important;
  693. }
  694. :deep(.el-table__header th) {
  695. background-color: #F3FAFE !important;
  696. }
  697. .condition {
  698. width: 82vw;
  699. display: flex;
  700. align-items: center;
  701. height: 4vh;
  702. .item1 {
  703. width: 18%;
  704. display: flex;
  705. align-items: center;
  706. margin-bottom: 1vh;
  707. margin-right: 0.5vw;
  708. }
  709. .item2 {
  710. width: 18%;
  711. display: flex;
  712. align-items: center;
  713. margin-right: 0.5vw;
  714. }
  715. }
  716. .editDialog {
  717. .left {
  718. width: 50%;
  719. height: 70vh;
  720. padding: 0 2vw;
  721. .add-item {
  722. display: flex;
  723. align-items: center;
  724. margin-bottom: 1vh;
  725. }
  726. .image {
  727. width: 4vw !important;
  728. height: 4vw !important;
  729. }
  730. }
  731. .right {
  732. width: 50%;
  733. height: 50vh;
  734. .add-item {
  735. display: flex;
  736. align-items: center;
  737. margin-bottom: 1vh;
  738. }
  739. }
  740. }
  741. .steps {
  742. .steps-content {
  743. width: 45vw;
  744. height: 15vh;
  745. display: flex;
  746. justify-content: center;
  747. padding-top: 15vw;
  748. padding-left: 8vw;
  749. }
  750. .steps-status {
  751. display: flex;
  752. align-items: center;
  753. justify-content: center;
  754. }
  755. .steps-btn {
  756. height: 15vh;
  757. display: flex;
  758. justify-content: center;
  759. align-items: center;
  760. }
  761. }
  762. .back-dialog {
  763. width: 700px;
  764. height: auto;
  765. .back-text {
  766. font-size: 60px;
  767. font-weight: bold;
  768. color: #000000;
  769. text-align: center;
  770. justify-content: center;
  771. margin-top: 22vh;
  772. }
  773. .back-btn {
  774. height: 20vh;
  775. display: flex;
  776. justify-content: center;
  777. align-items: center;
  778. }
  779. }
  780. </style>