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.

906 lines
32 KiB

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