|
@@ -1,14 +1,26 @@
|
|
<template>
|
|
<template>
|
|
<el-container>
|
|
<el-container>
|
|
<el-main>
|
|
<el-main>
|
|
- <el-form ref="formRef" :model="formData" label-width="100px" :rules="rules">
|
|
|
|
- <!-- 审核通过时显示通道选择 - 暂时注释 -->
|
|
|
|
- <!-- <el-form-item v-if="auditType === 'approve'" label="选择通道:" prop="channel">
|
|
|
|
- <el-select v-model="formData.channel" placeholder="请选择提款通道" style="width: 100%">
|
|
|
|
- <el-option label="TKPAY" value="TKPAY" />
|
|
|
|
- <el-option label="3QPAY" value="3QPAY" />
|
|
|
|
|
|
+ <el-form ref="formRef" :model="formData" :label-width="formLabelWidth" :rules="rules">
|
|
|
|
+ <!-- 审核通过时显示通道选择 -->
|
|
|
|
+ <el-form-item v-if="auditType === 'approve'" :label="t('modules.withdraw.paymentChannel') + ':'"
|
|
|
|
+ prop="channelId">
|
|
|
|
+ <el-select v-model="formData.channelId" :placeholder="t('modules.withdraw.selectPaymentChannel')"
|
|
|
|
+ style="width: 100%" @change="handleChannelChange" :loading="channelLoading">
|
|
|
|
+ <el-option v-for="channel in channelList" :key="channel.id" :label="channel.channelName"
|
|
|
|
+ :value="channel.id" />
|
|
</el-select>
|
|
</el-select>
|
|
- </el-form-item> -->
|
|
|
|
|
|
+ </el-form-item>
|
|
|
|
+
|
|
|
|
+ <!-- 通道代码选择 -->
|
|
|
|
+ <el-form-item v-if="auditType === 'approve' && formData.channelId"
|
|
|
|
+ :label="t('modules.withdraw.channelCode') + ':'" prop="channelCode">
|
|
|
|
+ <el-radio-group v-model="formData.channelCode">
|
|
|
|
+ <el-radio v-for="code in channelCodeOptions" :key="code.value" :label="code.value">
|
|
|
|
+ {{ code.label }}
|
|
|
|
+ </el-radio>
|
|
|
|
+ </el-radio-group>
|
|
|
|
+ </el-form-item>
|
|
|
|
|
|
<!-- 审核内容 -->
|
|
<!-- 审核内容 -->
|
|
<el-form-item
|
|
<el-form-item
|
|
@@ -27,10 +39,12 @@
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
<script setup>
|
|
-import { reactive, ref, computed } from 'vue';
|
|
|
|
|
|
+import { reactive, ref, computed, onMounted } from 'vue';
|
|
import { ElMessage } from 'element-plus';
|
|
import { ElMessage } from 'element-plus';
|
|
import { useI18n } from 'vue-i18n';
|
|
import { useI18n } from 'vue-i18n';
|
|
|
|
+import { useFormConfig } from '@/hooks/useFormConfig';
|
|
import { api } from '../finance.service';
|
|
import { api } from '../finance.service';
|
|
|
|
+import adminApi from '@/app/admin/api';
|
|
|
|
|
|
const { t } = useI18n();
|
|
const { t } = useI18n();
|
|
|
|
|
|
@@ -39,6 +53,9 @@ const emit = defineEmits(['modalCallBack']);
|
|
|
|
|
|
const formRef = ref();
|
|
const formRef = ref();
|
|
const loading = ref(false);
|
|
const loading = ref(false);
|
|
|
|
+const channelLoading = ref(false);
|
|
|
|
+const channelList = ref([]);
|
|
|
|
+const channelCodeOptions = ref([]);
|
|
|
|
|
|
// 审核类型:approve(通过) 或 reject(拒绝)
|
|
// 审核类型:approve(通过) 或 reject(拒绝)
|
|
const auditType = computed(() => props.modal?.params?.type || 'approve');
|
|
const auditType = computed(() => props.modal?.params?.type || 'approve');
|
|
@@ -46,8 +63,54 @@ const auditType = computed(() => props.modal?.params?.type || 'approve');
|
|
// 表单数据
|
|
// 表单数据
|
|
const formData = reactive({
|
|
const formData = reactive({
|
|
review: '', // 审核内容
|
|
review: '', // 审核内容
|
|
|
|
+ channelId: '', // 支付通道ID
|
|
|
|
+ channelCode: '', // 通道代码
|
|
});
|
|
});
|
|
|
|
|
|
|
|
+// 使用表单配置hooks
|
|
|
|
+const { formLabelWidth, formLayout } = useFormConfig();
|
|
|
|
+// 获取支付通道列表
|
|
|
|
+async function getChannelList() {
|
|
|
|
+ if (auditType.value !== 'approve') return;
|
|
|
|
+
|
|
|
|
+ channelLoading.value = true;
|
|
|
|
+ try {
|
|
|
|
+ const { code, data } = await adminApi.payment.channel.list({});
|
|
|
|
+ if (code === '200') {
|
|
|
|
+ channelList.value = data || [];
|
|
|
|
+ }
|
|
|
|
+ } catch (error) {
|
|
|
|
+ console.error('获取支付通道失败:', error);
|
|
|
|
+ ElMessage.error(t('message.fetchDataFailed'));
|
|
|
|
+ } finally {
|
|
|
|
+ channelLoading.value = false;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// 处理通道变更
|
|
|
|
+function handleChannelChange(channelId) {
|
|
|
|
+ formData.channelCode = ''; // 重置通道代码
|
|
|
|
+
|
|
|
|
+ const selectedChannel = channelList.value.find(channel => channel.id === channelId);
|
|
|
|
+ if (selectedChannel) {
|
|
|
|
+ // 构建通道代码选项
|
|
|
|
+ channelCodeOptions.value = [
|
|
|
|
+ {
|
|
|
|
+ label: 'Bkash',
|
|
|
|
+ value: selectedChannel.bkashPayCode
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ label: 'Nagad',
|
|
|
|
+ value: selectedChannel.nagadPayCode
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ label: 'Rocket',
|
|
|
|
+ value: selectedChannel.rocketPayCode
|
|
|
|
+ }
|
|
|
|
+ ].filter(option => option.value); // 过滤掉空值
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
// 表单验证规则
|
|
// 表单验证规则
|
|
const rules = computed(() => {
|
|
const rules = computed(() => {
|
|
const baseRules = {};
|
|
const baseRules = {};
|
|
@@ -58,6 +121,14 @@ const rules = computed(() => {
|
|
{ required: true, message: t('modules.withdraw.rejectReasonRequired'), trigger: 'blur' },
|
|
{ required: true, message: t('modules.withdraw.rejectReasonRequired'), trigger: 'blur' },
|
|
{ min: 1, max: 200, message: t('modules.withdraw.rejectReasonLength'), trigger: 'blur' },
|
|
{ min: 1, max: 200, message: t('modules.withdraw.rejectReasonLength'), trigger: 'blur' },
|
|
];
|
|
];
|
|
|
|
+ } else if (auditType.value === 'approve') {
|
|
|
|
+ // 审核通过时需要选择通道和通道代码
|
|
|
|
+ baseRules.channelId = [
|
|
|
|
+ { required: true, message: t('modules.withdraw.paymentChannelRequired'), trigger: 'change' }
|
|
|
|
+ ];
|
|
|
|
+ baseRules.channelCode = [
|
|
|
|
+ { required: true, message: t('modules.withdraw.channelCodeRequired'), trigger: 'change' }
|
|
|
|
+ ];
|
|
}
|
|
}
|
|
|
|
|
|
return baseRules;
|
|
return baseRules;
|
|
@@ -85,6 +156,12 @@ async function handleConfirm() {
|
|
review: formData.review || '', // 审核内容
|
|
review: formData.review || '', // 审核内容
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+ // 审核通过时添加通道信息
|
|
|
|
+ if (auditType.value === 'approve') {
|
|
|
|
+ requestData.channelId = formData.channelId;
|
|
|
|
+ requestData.channelCode = formData.channelCode;
|
|
|
|
+ }
|
|
|
|
+
|
|
// 调用审核API
|
|
// 调用审核API
|
|
const { code, message } = await api.withdraw.review(requestData);
|
|
const { code, message } = await api.withdraw.review(requestData);
|
|
|
|
|
|
@@ -102,6 +179,11 @@ async function handleConfirm() {
|
|
loading.value = false;
|
|
loading.value = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+// 组件挂载时获取支付通道列表
|
|
|
|
+onMounted(() => {
|
|
|
|
+ getChannelList();
|
|
|
|
+});
|
|
</script>
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped></style>
|
|
<style lang="scss" scoped></style>
|