|
@@ -518,28 +518,24 @@ export function useOrder(tableRef: Ref) {
|
|
|
<ElTable data={refundState.orderDetail?.products || []} border size="small" style="width: 100%">
|
|
<ElTable data={refundState.orderDetail?.products || []} border size="small" style="width: 100%">
|
|
|
<ElTableColumn width={55} align="center"
|
|
<ElTableColumn width={55} align="center"
|
|
|
v-slots={{
|
|
v-slots={{
|
|
|
- default: ({ $index, row: r }: any) => {
|
|
|
|
|
- const refundedQty = r.refundedQuantity || 0;
|
|
|
|
|
- const isFullyRefunded = refundedQty >= (r.productNum || 1);
|
|
|
|
|
- return (
|
|
|
|
|
- <el-checkbox
|
|
|
|
|
- model-value={refundState.selectedProducts.includes($index)}
|
|
|
|
|
- disabled={isFullyRefunded}
|
|
|
|
|
- onChange={(val: boolean) => {
|
|
|
|
|
- if (val) {
|
|
|
|
|
- refundState.selectedProducts.push($index);
|
|
|
|
|
- if (!refundState.refundQuantities[$index]) {
|
|
|
|
|
- const remaining = (r.productNum || 1) - refundedQty;
|
|
|
|
|
- refundState.refundQuantities[$index] = Math.max(1, remaining);
|
|
|
|
|
- }
|
|
|
|
|
- } else {
|
|
|
|
|
- const idx = refundState.selectedProducts.indexOf($index);
|
|
|
|
|
- if (idx > -1) refundState.selectedProducts.splice(idx, 1);
|
|
|
|
|
|
|
+ default: ({ $index, row: r }: any) => (
|
|
|
|
|
+ <el-checkbox
|
|
|
|
|
+ model-value={refundState.selectedProducts.includes($index)}
|
|
|
|
|
+ disabled={(r.refundedQuantity || 0) >= (r.productNum || 1)}
|
|
|
|
|
+ onChange={(val: boolean) => {
|
|
|
|
|
+ if (val) {
|
|
|
|
|
+ refundState.selectedProducts.push($index);
|
|
|
|
|
+ if (!refundState.refundQuantities[$index]) {
|
|
|
|
|
+ const remaining = (r.productNum || 1) - (r.refundedQuantity || 0);
|
|
|
|
|
+ refundState.refundQuantities[$index] = Math.max(1, remaining);
|
|
|
}
|
|
}
|
|
|
- }}
|
|
|
|
|
- />
|
|
|
|
|
- );
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ } else {
|
|
|
|
|
+ const idx = refundState.selectedProducts.indexOf($index);
|
|
|
|
|
+ if (idx > -1) refundState.selectedProducts.splice(idx, 1);
|
|
|
|
|
+ }
|
|
|
|
|
+ }}
|
|
|
|
|
+ />
|
|
|
|
|
+ )
|
|
|
}}
|
|
}}
|
|
|
/>
|
|
/>
|
|
|
<ElTableColumn label="商品名称" min-width={160}>
|
|
<ElTableColumn label="商品名称" min-width={160}>
|
|
@@ -579,16 +575,14 @@ export function useOrder(tableRef: Ref) {
|
|
|
/>
|
|
/>
|
|
|
<ElTableColumn label="退款数量" width={160} align="center"
|
|
<ElTableColumn label="退款数量" width={160} align="center"
|
|
|
v-slots={{
|
|
v-slots={{
|
|
|
- default: ({ $index, row: r }: any) => {
|
|
|
|
|
- const maxRefundable = (r.productNum || 1) - (r.refundedQuantity || 0);
|
|
|
|
|
- return (
|
|
|
|
|
- refundState.selectedProducts.includes($index) ? (
|
|
|
|
|
- <el-input-number
|
|
|
|
|
- model-value={refundState.refundQuantities[$index] || 1}
|
|
|
|
|
- min={1}
|
|
|
|
|
- max={maxRefundable}
|
|
|
|
|
- size="small"
|
|
|
|
|
- controls-position="right"
|
|
|
|
|
|
|
+ default: ({ $index, row: r }: any) => (
|
|
|
|
|
+ refundState.selectedProducts.includes($index) ? (
|
|
|
|
|
+ <el-input-number
|
|
|
|
|
+ model-value={refundState.refundQuantities[$index] || 1}
|
|
|
|
|
+ min={1}
|
|
|
|
|
+ max={(r.productNum || 1) - (r.refundedQuantity || 0)}
|
|
|
|
|
+ size="small"
|
|
|
|
|
+ controls-position="right"
|
|
|
style="width: 120px"
|
|
style="width: 120px"
|
|
|
onUpdate:modelValue={(val: number) => { refundState.refundQuantities[$index] = val; }}
|
|
onUpdate:modelValue={(val: number) => { refundState.refundQuantities[$index] = val; }}
|
|
|
/>
|
|
/>
|