yumi-admin/apps/src/views/operate/compensate-order.vue
2026-04-13 19:31:36 +08:00

238 lines
5.6 KiB
Vue

<script lang="ts" setup>
import { computed, reactive } from 'vue';
import { Page } from '@vben/common-ui';
import { useAccessStore } from '@vben/stores';
import {
compensateCandy,
orderPurchaseHistoryCompensate,
} from '#/api/legacy/operate';
import { getAllowedSysOrigins } from '#/views/system/shared';
import {
Alert,
Button,
Card,
DatePicker,
Form,
FormItem,
Input,
Modal,
Select,
message,
} from 'antdv-next';
defineOptions({ name: 'OperateCompensateOrder' });
const PAY_PLATFORM_OPTIONS = [
{ disabled: false, label: 'Apple', value: 'APPLE' },
{ disabled: false, label: 'Google', value: 'GOOGLE' },
{ disabled: true, label: 'Stripe', value: 'STRIPE' },
{ disabled: true, label: 'PayerMax', value: 'PAY_MAX' },
];
const payPlatformOptions = PAY_PLATFORM_OPTIONS.map((item) => ({
disabled: item.disabled,
label: item.label,
value: item.value as any,
}));
const accessStore = useAccessStore();
const sysOriginOptions = computed(() => {
const options = getAllowedSysOrigins(accessStore.accessCodes || []);
return options.length > 0 ? options : getAllowedSysOrigins([]);
});
const loading = reactive({
candy: false,
order: false,
});
const orderForm = reactive<Record<string, any>>({
orderId: '',
platform: '',
productCode: '',
sysOrigin: sysOriginOptions.value[0]?.value || '',
userId: '',
vipExpireTime: '',
});
const candyForm = reactive<Record<string, any>>({
candy: '',
userId: '',
});
function resetOrderForm() {
orderForm.orderId = '';
orderForm.platform = '';
orderForm.productCode = '';
orderForm.sysOrigin = sysOriginOptions.value[0]?.value || '';
orderForm.userId = '';
orderForm.vipExpireTime = '';
}
function resetCandyForm() {
candyForm.candy = '';
candyForm.userId = '';
}
function validateOrderForm() {
if (!String(orderForm.userId || '').trim()) {
message.warning('请输入用户ID');
return false;
}
if (!String(orderForm.orderId || '').trim()) {
message.warning('请输入订单id');
return false;
}
if (!String(orderForm.sysOrigin || '').trim()) {
message.warning('请选择平台');
return false;
}
if (!String(orderForm.platform || '').trim()) {
message.warning('请选择支付方式');
return false;
}
if (!String(orderForm.productCode || '').trim()) {
message.warning('请输入产品CODE');
return false;
}
return true;
}
function validateCandyForm() {
if (!String(candyForm.userId || '').trim()) {
message.warning('请输入用户ID');
return false;
}
if (!String(candyForm.candy || '').trim()) {
message.warning('请输入糖果数量');
return false;
}
return true;
}
function submitOrderForm() {
if (!validateOrderForm()) {
return;
}
Modal.confirm({
content: '是否确认提交?',
onOk: async () => {
loading.order = true;
try {
await orderPurchaseHistoryCompensate({ ...orderForm });
message.success('提交成功');
resetOrderForm();
} finally {
loading.order = false;
}
},
title: '提示',
});
}
function submitCandyForm() {
if (!validateCandyForm()) {
return;
}
Modal.confirm({
content: '是否确认提交?',
onOk: async () => {
loading.candy = true;
try {
await compensateCandy({ ...candyForm });
message.success('提交成功');
resetCandyForm();
} finally {
loading.candy = false;
}
},
title: '提示',
});
}
</script>
<template>
<Page title="订单补偿">
<div class="stack">
<Card>
<Alert
message="补偿订单"
show-icon
type="info"
/>
<Form class="form" layout="vertical">
<FormItem label="用户ID">
<Input v-model:value="orderForm.userId" />
</FormItem>
<FormItem label="订单id">
<Input v-model:value="orderForm.orderId" />
</FormItem>
<FormItem label="平台">
<SysOriginSelect v-model:value="orderForm.sysOrigin" placeholder="请选择平台"
:options="sysOriginOptions"
></SysOriginSelect>
</FormItem>
<FormItem label="支付方式">
<Select
option-label-prop="label"
v-model:value="orderForm.platform"
:options="payPlatformOptions"
placeholder="请选择支付方式"
/>
</FormItem>
<FormItem label="产品CODE">
<Input v-model:value="orderForm.productCode" />
</FormItem>
<FormItem label="过期时间">
<DatePicker
v-model:value="orderForm.vipExpireTime"
style="width: 100%"
value-format="x"
/>
</FormItem>
<FormItem>
<Button :loading="loading.order" type="primary" @click="submitOrderForm">
提交
</Button>
</FormItem>
</Form>
</Card>
<Card>
<Alert
message="补偿糖果"
show-icon
type="info"
/>
<Form class="form" layout="vertical">
<FormItem label="用户ID">
<Input v-model:value="candyForm.userId" />
</FormItem>
<FormItem label="糖果">
<Input v-model:value="candyForm.candy" />
</FormItem>
<FormItem>
<Button :loading="loading.candy" type="primary" @click="submitCandyForm">
提交
</Button>
</FormItem>
</Form>
</Card>
</div>
</Page>
</template>
<style scoped>
.stack {
display: grid;
gap: 16px;
}
.form {
margin-top: 20px;
max-width: 560px;
}
</style>