feat: 完善订单定价与支付收益管理
Build and Deploy Vue3 / build (push) Successful in 1m44s
Build and Deploy Vue3 / deploy (push) Successful in 47s

This commit is contained in:
shiran
2026-07-20 18:33:46 +08:00
parent afc00141f7
commit c5d4dbc0db
11 changed files with 1600 additions and 98 deletions
+35 -80
View File
@@ -92,11 +92,6 @@
{{ 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">
@@ -131,6 +126,16 @@
<el-radio label="sub">减少</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-if="balanceForm.state === 'add'" label="收益入账">
<div class="account-amount-field">
<el-switch
v-model="balanceForm.account_amount"
active-text="计入 007pay"
inactive-text="不计入"
/>
<div class="form-tip">加款同时生成 007pay 手工入账记录用于收益统计</div>
</div>
</el-form-item>
<el-form-item label="变动金额" prop="price">
<el-input v-model.number="balanceForm.price" placeholder="请输入变动金额">
<template #prepend>¥</template>
@@ -180,28 +185,6 @@
</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>
@@ -210,7 +193,7 @@ import { ref, reactive, onMounted, computed, watch } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { ElMessage } from 'element-plus'
import { Refresh, ArrowLeft } from '@element-plus/icons-vue'
import { getUserBalanceRecord, editUserBalance, addUserConsumption, getUserBalanceCount, getUserList, refundBalance } from '@/api/admin/user'
import { getUserBalanceRecord, editUserBalance, addUserConsumption, getUserBalanceCount, getUserList } from '@/api/admin/user'
const route = useRoute()
const router = useRouter()
@@ -246,11 +229,8 @@ 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({
@@ -258,7 +238,8 @@ const balanceForm = reactive({
balance_type: '',
price: 0,
state: 'add',
note: ''
note: '',
account_amount: false
})
const balanceRules = {
@@ -290,18 +271,6 @@ 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)
@@ -445,7 +414,8 @@ const handleEditBalance = (balanceType) => {
balance_type: apiType,
price: 0,
state: 'add',
note: ''
note: '',
account_amount: false
})
balanceDialogVisible.value = true
}
@@ -471,7 +441,11 @@ const submitBalanceForm = () => {
balanceFormRef.value?.validate(async (valid) => {
if (valid) {
try {
const res = await editUserBalance(balanceForm)
const submitData = { ...balanceForm }
if (submitData.state !== 'add' || !submitData.account_amount) {
delete submitData.account_amount
}
const res = await editUserBalance(submitData)
if (res.data.code === 200) {
ElMessage.success('修改成功')
balanceDialogVisible.value = false
@@ -517,40 +491,6 @@ const handleRecordCurrentChange = () => {
fetchBalanceRecord()
}
// 退款
const handleRefund = (row) => {
Object.assign(refundForm, {
history_id: row.Id,
order_id: String(row.OrderId) || 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()
@@ -573,6 +513,15 @@ watch(
},
{ immediate: true }
)
watch(
() => balanceForm.state,
(state) => {
if (state !== 'add') {
balanceForm.account_amount = false
}
}
)
</script>
<style scoped>
@@ -802,6 +751,12 @@ watch(
margin-top: 4px;
}
.account-amount-field {
display: flex;
flex-direction: column;
gap: 4px;
}
/* 响应式 */
@media (max-width: 1200px) {
.balance-cards {