feate:添加退款接口
This commit is contained in:
@@ -77,11 +77,21 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="Note" label="备注" min-width="200" show-overflow-tooltip />
|
||||
<el-table-column prop="PaymentOrderId" label="支付订单ID" width="150" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
{{ row.PaymentOrderId || '-' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="创建时间" width="180">
|
||||
<template #default="{ row }">
|
||||
{{ formatDateTime(row.CreatedAt) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="100" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button type="warning" size="small" @click="handleRefund(row)">退款</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<div class="pagination-wrapper">
|
||||
@@ -151,6 +161,10 @@
|
||||
<template #prepend>¥</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="支付平台订单id" prop="paymentOrderId">
|
||||
<el-input v-model="recordForm.paymentOrderId" placeholder="请输入支付平台订单ID" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="备注" prop="note">
|
||||
<el-input v-model="recordForm.note" type="textarea" :rows="3" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
@@ -160,15 +174,38 @@
|
||||
<el-button type="primary" @click="submitRecordForm">确定</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 退款对话框 -->
|
||||
<el-dialog v-model="refundDialogVisible" title="退款" width="500px">
|
||||
<el-form ref="refundFormRef" :model="refundForm" :rules="refundRules" label-width="120px">
|
||||
<el-form-item label="余额记录ID">
|
||||
<el-input :value="refundForm.history_id" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="订单ID" prop="order_id">
|
||||
<el-input v-model="refundForm.order_id" :min="0" style="width: 100%" placeholder="请输入订单ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="退款方式" prop="bandwidth">
|
||||
<el-radio-group v-model="refundForm.bandwidth">
|
||||
<el-radio :label="false">退回余额</el-radio>
|
||||
<el-radio :label="true">提现</el-radio>
|
||||
</el-radio-group>
|
||||
<div class="form-tip">退回余额:将退款金额添加到对应余额;提现:将退款金额提现</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="refundDialogVisible = false">取消</el-button>
|
||||
<el-button type="warning" @click="submitRefundForm" :loading="refundLoading">确认退款</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, reactive, onMounted, computed } from 'vue'
|
||||
import { ref, reactive, onMounted, computed, watch } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { Refresh } from '@element-plus/icons-vue'
|
||||
import { getUserBalance, getUserBalanceRecord, editUserBalance, addUserConsumption, getUserBalanceCount, getUserList } from '@/api/admin/user'
|
||||
import { getUserBalance, getUserBalanceRecord, editUserBalance, addUserConsumption, getUserBalanceCount, getUserList, refundBalance } from '@/api/admin/user'
|
||||
|
||||
const route = useRoute()
|
||||
|
||||
@@ -203,8 +240,11 @@ const userList = ref([])
|
||||
// 对话框
|
||||
const balanceDialogVisible = ref(false)
|
||||
const recordDialogVisible = ref(false)
|
||||
const refundDialogVisible = ref(false)
|
||||
const balanceFormRef = ref(null)
|
||||
const recordFormRef = ref(null)
|
||||
const refundFormRef = ref(null)
|
||||
const refundLoading = ref(false)
|
||||
|
||||
// 余额表单
|
||||
const balanceForm = reactive({
|
||||
@@ -231,7 +271,8 @@ const recordForm = reactive({
|
||||
apply_balance: false,
|
||||
price: 0,
|
||||
state: 'add',
|
||||
note: ''
|
||||
note: '',
|
||||
paymentOrderId: ''
|
||||
})
|
||||
|
||||
const recordRules = {
|
||||
@@ -243,6 +284,18 @@ const recordRules = {
|
||||
note: [{ required: true, message: '请输入备注', trigger: 'blur' }]
|
||||
}
|
||||
|
||||
// 退款表单
|
||||
const refundForm = reactive({
|
||||
history_id: 0,
|
||||
order_id: 0,
|
||||
bandwidth: false
|
||||
})
|
||||
|
||||
const refundRules = {
|
||||
order_id: [{ required: true, message: '请输入订单ID', trigger: 'blur' }],
|
||||
bandwidth: [{ required: true, message: '请选择退款方式', trigger: 'change' }]
|
||||
}
|
||||
|
||||
// 当前余额显示
|
||||
const currentBalanceDisplay = computed(() => {
|
||||
const balance = balanceList.value.find(b => userBalance[b.type]?.type === balanceForm.balance_type)
|
||||
@@ -365,7 +418,7 @@ const fetchBalanceRecord = async () => {
|
||||
const res = await getUserBalanceRecord(recordParams)
|
||||
if (res.data.code === 200) {
|
||||
recordList.value = res.data.data.data || []
|
||||
recordTotal.value = res.data.data.all_count || 0
|
||||
recordTotal.value = res.data.data.total || 0
|
||||
} else {
|
||||
ElMessage.error(res.data.message || '获取余额记录失败')
|
||||
}
|
||||
@@ -401,7 +454,8 @@ const handleAddRecord = (balanceType) => {
|
||||
apply_balance: false,
|
||||
price: 0,
|
||||
state: 'add',
|
||||
note: ''
|
||||
note: '',
|
||||
paymentOrderId: ''
|
||||
})
|
||||
recordDialogVisible.value = true
|
||||
}
|
||||
@@ -457,6 +511,40 @@ const handleRecordCurrentChange = () => {
|
||||
fetchBalanceRecord()
|
||||
}
|
||||
|
||||
// 退款
|
||||
const handleRefund = (row) => {
|
||||
Object.assign(refundForm, {
|
||||
history_id: row.Id,
|
||||
order_id: String(row.PaymentOrderId) || 0,
|
||||
bandwidth: false
|
||||
})
|
||||
refundDialogVisible.value = true
|
||||
}
|
||||
|
||||
// 提交退款
|
||||
const submitRefundForm = () => {
|
||||
refundFormRef.value?.validate(async (valid) => {
|
||||
if (valid) {
|
||||
refundLoading.value = true
|
||||
try {
|
||||
const res = await refundBalance(refundForm)
|
||||
if (res.data.code === 200) {
|
||||
ElMessage.success('退款成功')
|
||||
refundDialogVisible.value = false
|
||||
fetchUserBalance()
|
||||
} else {
|
||||
ElMessage.error(res.data.message || '退款失败')
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('退款错误:', error)
|
||||
ElMessage.error('退款失败')
|
||||
} finally {
|
||||
refundLoading.value = false
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 初始化
|
||||
onMounted(() => {
|
||||
getUserListData()
|
||||
@@ -466,6 +554,19 @@ onMounted(() => {
|
||||
ElMessage.warning('缺少用户ID参数')
|
||||
}
|
||||
})
|
||||
|
||||
// 监听路由参数变化
|
||||
watch(
|
||||
() => route.query.user_id,
|
||||
(newUserId) => {
|
||||
if (newUserId && newUserId !== queryParams.user_id) {
|
||||
queryParams.user_id = newUserId
|
||||
recordParams.user_id = newUserId
|
||||
fetchUserBalance()
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
@@ -684,6 +785,12 @@ onMounted(() => {
|
||||
background: #fafafa;
|
||||
}
|
||||
|
||||
.form-tip {
|
||||
font-size: 12px;
|
||||
color: #909399;
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
/* 响应式 */
|
||||
@media (max-width: 1200px) {
|
||||
.balance-cards {
|
||||
|
||||
Reference in New Issue
Block a user