feat: publish member notices and balance-aware order settlement
Deploy olons-admin production / deploy (push) Successful in 8m50s
Deploy olons-admin production / deploy (push) Successful in 8m50s
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="n-layout-page-header"><n-card :bordered="false" title="订单列表">手动单匹配后立即完成并允许余额为负;自动单可在预约时间前人工匹配,逾期未处理则由系统自动匹配。</n-card></div>
|
||||
<div class="n-layout-page-header"><n-card :bordered="false" title="订单列表">匹配时会校验会员可用余额;余额不足的订单保留为待处理,充值审核通过且余额足够后自动完成并结算本金及佣金。</n-card></div>
|
||||
<n-card :bordered="false" class="proCard">
|
||||
<BasicForm ref="searchFormRef" @register="register" @submit="reloadTable" @reset="reloadTable" />
|
||||
<BasicTable ref="actionRef" :columns="columns" :request="loadDataTable" :row-key="(row)=>row.id" :action-column="actionColumn" :scroll-x="scrollX" :resize-height-offset="-10000">
|
||||
@@ -45,6 +45,9 @@
|
||||
<n-form-item label="商品数量">
|
||||
<n-input-number v-model:value="matchForm.quantity" :min="1" :max="999" />
|
||||
</n-form-item>
|
||||
<n-alert v-if="matchShortfall > 0" type="warning" :bordered="false">
|
||||
会员余额不足:当前可用 {{ yuan(matchMember.availableAmount) }},订单金额 {{ yuan(selectedProduct.priceAmount * matchForm.quantity) }},还差 {{ yuan(matchShortfall) }}。订单将保留为待处理,充值审核通过且余额足够后自动完成。
|
||||
</n-alert>
|
||||
</n-form>
|
||||
</n-spin>
|
||||
<template #action>
|
||||
@@ -99,6 +102,7 @@ const approvalColumns=[{title:'节点',key:'stepNo',width:70},{title:'操作人I
|
||||
const matchLoading=ref(false),productLoading=ref(false),matchSubmitting=ref(false),products=ref<any[]>([]),selectedProduct=ref<any>();
|
||||
const matchMember=reactive({id:0,username:'',availableAmount:0,frozenAmount:0});
|
||||
const matchForm=reactive({id:0,productId:0,quantity:1});
|
||||
const matchShortfall=computed(()=>Math.max(0,(selectedProduct.value?.priceAmount||0)*matchForm.quantity-matchMember.availableAmount));
|
||||
const amountMember=reactive({username:'',availableAmount:0});
|
||||
const amountForm=reactive<{id:number;amount:number|null;quantity:number}>({id:0,amount:null,quantity:1});
|
||||
const amountSubmitting=ref(false);
|
||||
@@ -123,7 +127,7 @@ function clearProductFilter(){Object.assign(productFilter,{name:'',priceMin:null
|
||||
function selectProduct(row){selectedProduct.value=row;matchForm.productId=row.id}
|
||||
async function confirmMatch(){
|
||||
if(!matchForm.productId){message.error('请先选择商品');return}
|
||||
matchSubmitting.value=true;try{await TradeOrderMatch(matchForm);message.success('订单已匹配并完成');showMatch.value=false;reloadTable()}finally{matchSubmitting.value=false}
|
||||
matchSubmitting.value=true;try{await TradeOrderMatch(matchForm);message.success('订单已匹配;如余额不足将保持待处理,充值审核通过且余额足够后自动完成');showMatch.value=false;reloadTable()}finally{matchSubmitting.value=false}
|
||||
}
|
||||
async function view(row){detail.value=await TradeOrderView({id:row.id});showDetail.value=true}
|
||||
function openAmount(row){Object.assign(amountMember,{username:row.username,availableAmount:row.availableAmount});Object.assign(amountForm,{id:row.id,amount:Number(row.totalAmount||0)/100,quantity:row.quantity||1});showAmount.value=true}
|
||||
@@ -137,7 +141,8 @@ const actionColumn=reactive({width:300,title:'操作',key:'action',fixed:'right'
|
||||
if(row.canForcePay)actions.push({label:'强制付款',type:'primary',onClick:()=>forcePay(row)});
|
||||
if(row.canFreeze)actions.push({label:'冻结订单',type:'warning',onClick:()=>freezeOrder(row)});
|
||||
const hasManualActions=row.canChangeAmount||row.canForcePay||row.canFreeze;
|
||||
if(!hasManualActions&&row.orderType===2&&row.orderStatus===2&&row.canReview)actions.push({label:'审核任务',type:'warning',onClick:()=>router.push({name:'task_submission_list',query:{tradeOrderId:String(row.id)}})});
|
||||
if(!hasManualActions&&row.paymentStatus==='balance_pending')actions.push({label:'余额不足待处理',type:'error',disabled:true,title:row.message||'充值审核通过且余额足够后将自动完成'});
|
||||
else if(!hasManualActions&&row.orderType===2&&row.orderStatus===2&&row.canReview)actions.push({label:'审核任务',type:'warning',onClick:()=>router.push({name:'task_submission_list',query:{tradeOrderId:String(row.id)}})});
|
||||
else if(!hasManualActions&&row.orderType===2&&row.orderStatus===2)actions.push({label:'等待会员付款',disabled:true,title:'等待会员完成付款'});
|
||||
if(!hasManualActions)actions.push({label:'详情',onClick:()=>view(row)});
|
||||
return h(TableAction as any,{style:'button',actions});
|
||||
|
||||
Reference in New Issue
Block a user