优化支付功能
This commit is contained in:
@@ -144,8 +144,7 @@ import { useRouter } from 'vue-router'
|
||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
import { Refresh, Setting } from '@element-plus/icons-vue'
|
||||
import StatusTag from '../components/StatusTag.vue'
|
||||
// TODO: 接口联调时打开
|
||||
// import { getCommissionList, getCommissionStats, markCommissionPaid } from '@/api/payment'
|
||||
import { getCommissionList, getCommissionStats, markCommissionPaid } from '@/api/payment'
|
||||
|
||||
const router = useRouter()
|
||||
const loading = ref(false)
|
||||
@@ -181,24 +180,19 @@ const payMethodMap: Record<string, string> = {
|
||||
}
|
||||
const payMethodLabel = (method: string) => payMethodMap[method] || method || '-'
|
||||
|
||||
/**
|
||||
* 统计卡片数据:TODO 换成 getCommissionStats()
|
||||
* 后端聚合自 yz_platform_commission_order:
|
||||
* 应付总额 = sum(amount) where status='payable'
|
||||
* 已付总额 = sum(amount) where status='settled'
|
||||
* 待处理笔数 = count(*) where status in ('payable','tax_processing')
|
||||
*/
|
||||
/** 统计卡片数据。 */
|
||||
const stats = reactive({
|
||||
payable_amount: 1288000,
|
||||
paid_amount: 4560500,
|
||||
pending_count: 23
|
||||
payable_amount: 0,
|
||||
paid_amount: 0,
|
||||
pending_count: 0
|
||||
})
|
||||
|
||||
/* ---------------- Mock 数据(本地筛选 + 分页) ---------------- */
|
||||
/* ---------------- 列表数据 ---------------- */
|
||||
|
||||
interface CommissionRow {
|
||||
id: number
|
||||
commission_no: string
|
||||
pay_no: string
|
||||
out_trade_no: string
|
||||
promoter_name: string
|
||||
amount: number
|
||||
@@ -208,57 +202,36 @@ interface CommissionRow {
|
||||
paid_at: string
|
||||
}
|
||||
|
||||
const ALL_COMMISSIONS: CommissionRow[] = Array.from({ length: 24 }).map((_, index) => {
|
||||
const promoters = ['云泽渠道-张明', '渠道伙伴-李雷', '服务商-杭州微光', '渠道伙伴-王芳', '服务商-深圳智联']
|
||||
const statuses = ['payable', 'payable', 'settled', 'settled', 'tax_processing']
|
||||
const methods = ['bank', 'balance', 'manual', 'offset']
|
||||
const day = String(15 - Math.floor(index / 8)).padStart(2, '0')
|
||||
const status = statuses[index % statuses.length]
|
||||
|
||||
return {
|
||||
id: index + 1,
|
||||
commission_no: `CM202609${day}${String(3000 + index)}`,
|
||||
out_trade_no: `ORD202609${day}${String(2000 + index)}`,
|
||||
promoter_name: promoters[index % promoters.length],
|
||||
amount: [9990, 19990, 29990, 49990][index % 4],
|
||||
status,
|
||||
pay_method: methods[index % methods.length],
|
||||
create_time: `2026-09-${day} 11:${String((index * 5) % 60).padStart(2, '0')}:00`,
|
||||
paid_at: status === 'settled' ? `2026-09-${day} 16:20:00` : ''
|
||||
}
|
||||
})
|
||||
|
||||
const tableData = ref<CommissionRow[]>([])
|
||||
|
||||
async function fetchStats() {
|
||||
try {
|
||||
const res: any = await getCommissionStats()
|
||||
if (res?.code === 200 && res.data) Object.assign(stats, res.data)
|
||||
} catch (error: any) {
|
||||
ElMessage.error(error?.response?.data?.msg || error?.message || '获取佣金统计失败')
|
||||
}
|
||||
}
|
||||
|
||||
async function fetchList() {
|
||||
loading.value = true
|
||||
try {
|
||||
// TODO: 接口联通后替换为真实请求
|
||||
// const res = await getCommissionList({
|
||||
// page: page.current,
|
||||
// pageSize: page.size,
|
||||
// promoter: filters.promoter,
|
||||
// status: filters.status,
|
||||
// start_time: filters.dateRange?.[0],
|
||||
// end_time: filters.dateRange?.[1]
|
||||
// })
|
||||
// tableData.value = res.data.list || []
|
||||
// page.total = res.data.total || 0
|
||||
|
||||
const [start, end] = filters.dateRange || []
|
||||
const filtered = ALL_COMMISSIONS.filter((item) => {
|
||||
if (filters.promoter && !item.promoter_name.includes(filters.promoter)) return false
|
||||
if (filters.status && item.status !== filters.status) return false
|
||||
const date = item.create_time.slice(0, 10)
|
||||
if (start && date < start) return false
|
||||
if (end && date > end) return false
|
||||
return true
|
||||
const res: any = await getCommissionList({
|
||||
page: page.current,
|
||||
pageSize: page.size,
|
||||
promoter: filters.promoter,
|
||||
status: filters.status,
|
||||
start_time: filters.dateRange?.[0],
|
||||
end_time: filters.dateRange?.[1]
|
||||
})
|
||||
page.total = filtered.length
|
||||
const from = (page.current - 1) * page.size
|
||||
tableData.value = filtered.slice(from, from + page.size)
|
||||
if (res?.code === 200) {
|
||||
tableData.value = res.data?.list || []
|
||||
page.total = Number(res.data?.total || 0)
|
||||
} else {
|
||||
ElMessage.error(res?.msg || '获取佣金台账失败')
|
||||
}
|
||||
} catch (error: any) {
|
||||
ElMessage.error(error?.message || '获取佣金台账失败')
|
||||
ElMessage.error(error?.response?.data?.msg || error?.message || '获取佣金台账失败')
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
@@ -294,11 +267,16 @@ async function handleMarkPaid(row: CommissionRow) {
|
||||
confirmButtonText: '确认发放'
|
||||
}
|
||||
)
|
||||
// TODO: 接口联通后替换为 markCommissionPaid(row.id, { pay_method: row.pay_method, remark: value })
|
||||
row.status = 'settled'
|
||||
row.paid_at = new Date().toLocaleString('zh-CN')
|
||||
const res: any = await markCommissionPaid(row.id, {
|
||||
pay_method: row.pay_method || 'manual',
|
||||
remark: value
|
||||
})
|
||||
if (res?.code !== 200) {
|
||||
ElMessage.error(res?.msg || '标记已付失败')
|
||||
return
|
||||
}
|
||||
ElMessage.success('已标记为已付')
|
||||
await fetchList()
|
||||
await Promise.all([fetchList(), fetchStats()])
|
||||
} catch {
|
||||
// 取消
|
||||
}
|
||||
@@ -309,7 +287,11 @@ function goRules() {
|
||||
}
|
||||
|
||||
function goOrder(row: CommissionRow) {
|
||||
router.push({ path: ORDER_DETAIL_PATH, query: { outTradeNo: row.out_trade_no } })
|
||||
if (!row.pay_no) {
|
||||
ElMessage.warning('该佣金单未关联支付单')
|
||||
return
|
||||
}
|
||||
router.push({ path: ORDER_DETAIL_PATH, query: { payNo: row.pay_no } })
|
||||
}
|
||||
|
||||
/** 金额:分 -> 元 */
|
||||
@@ -320,7 +302,7 @@ function fenToYuan(fen: number | string | null | undefined): string {
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
fetchList()
|
||||
Promise.all([fetchList(), fetchStats()])
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user