This commit is contained in:
2026-04-23 11:49:32 +08:00
parent beddbf97ee
commit 3adcece7db
43 changed files with 328 additions and 223 deletions

Binary file not shown.

View File

@@ -24,6 +24,14 @@ export namespace AgentApi {
items: AgentListItem[]; items: AgentListItem[];
} }
export interface UpdateAgentRequest {
id: number;
mobile: string;
level_name: string;
region: string;
membership_expiry_time: string;
}
export interface GetAgentListParams { export interface GetAgentListParams {
page: number; page: number;
pageSize: number; pageSize: number;
@@ -135,6 +143,7 @@ export namespace AgentApi {
agent_id?: number; agent_id?: number;
status?: number; status?: number;
withdraw_no?: string; withdraw_no?: string;
withdraw_type?: number;
} }
// 提现统计数据 // 提现统计数据
@@ -272,7 +281,7 @@ export interface GetAgentLinkProductStatisticsParams {}
payment_method: 'alipay' | 'appleiap' | 'other' | 'wechat'; payment_method: 'alipay' | 'appleiap' | 'other' | 'wechat';
order_no: string; order_no: string;
platform_order_id: string; platform_order_id: string;
status: 'cancelled' | 'failed' | 'pending' | 'success'; status: 'closed' | 'failed' | 'paid' | 'pending' | 'refunded';
create_time: string; create_time: string;
} }
@@ -409,6 +418,13 @@ async function getAgentList(params: AgentApi.GetAgentListParams) {
}); });
} }
/**
* 编辑代理
*/
async function updateAgent(params: AgentApi.UpdateAgentRequest) {
return requestClient.post<{ success: boolean }>('/agent/update', params);
}
/** /**
* 获取代理推广链接列表 * 获取代理推广链接列表
*/ */
@@ -694,6 +710,7 @@ export {
getAgentLinkList, getAgentLinkList,
getAgentLinkProductStatistics, getAgentLinkProductStatistics,
getAgentList, getAgentList,
updateAgent,
getAgentMembershipConfigList, getAgentMembershipConfigList,
getAgentOrderStatistics, getAgentOrderStatistics,
getAgentPlatformDeductionList, getAgentPlatformDeductionList,

View File

@@ -17,7 +17,6 @@ export namespace OrderApi {
create_time: string; create_time: string;
pay_time: null | string; pay_time: null | string;
refund_time: null | string; refund_time: null | string;
is_promotion: 0 | 1;
} }
export interface OrderList { export interface OrderList {

Binary file not shown.

View File

@@ -36,16 +36,17 @@ const [Grid] = useVbenVxeGrid({
columns: useCommissionDeductionColumns(), columns: useCommissionDeductionColumns(),
proxyConfig: { proxyConfig: {
ajax: { ajax: {
query: async ({ query: async (
form, { page, form }: { page: QueryParams; form?: Record<string, any> },
page, formValues: Record<string, any>,
}: { ) => {
form: Record<string, any>; const filters =
page: QueryParams; formValues && Object.keys(formValues).length > 0
}) => { ? formValues
: (form ?? {});
return await getAgentCommissionDeductionList({ return await getAgentCommissionDeductionList({
...queryParams.value, ...queryParams.value,
...form, ...filters,
page: page.currentPage, page: page.currentPage,
pageSize: page.pageSize, pageSize: page.pageSize,
}); });

View File

@@ -384,9 +384,13 @@ const [Grid, gridApi] = useVbenVxeGrid({
proxyConfig: { proxyConfig: {
ajax: { ajax: {
query: async ({ page, form, sort }: any, formValues: Record<string, any>) => { query: async ({ page, form, sort }: any, formValues: Record<string, any>) => {
const filters =
formValues && Object.keys(formValues).length > 0
? formValues
: (form ?? {});
return await getAgentCommissionList({ return await getAgentCommissionList({
...queryParams.value, ...queryParams.value,
...formValues, ...filters,
page: page.currentPage, page: page.currentPage,
pageSize: page.pageSize, pageSize: page.pageSize,
}); });

View File

@@ -33,16 +33,17 @@ const [Grid] = useVbenVxeGrid({
columns: useLinkColumns(), columns: useLinkColumns(),
proxyConfig: { proxyConfig: {
ajax: { ajax: {
query: async ({ query: async (
page, { page, form }: { page: QueryParams; form?: Record<string, any> },
form, formValues: Record<string, any>,
}: { ) => {
form: Record<string, any>; const filters =
page: QueryParams; formValues && Object.keys(formValues).length > 0
}) => { ? formValues
: (form ?? {});
return await getAgentLinkList({ return await getAgentLinkList({
...queryParams.value, ...queryParams.value,
...form, ...filters,
page: page.currentPage, page: page.currentPage,
pageSize: page.pageSize, pageSize: page.pageSize,
}); });

View File

@@ -11,10 +11,18 @@ export function useFormSchema(): VbenFormSchema[] {
rules: 'required', rules: 'required',
}, },
{ {
component: 'Input', component: 'Select',
fieldName: 'level_name', fieldName: 'level_name',
label: '等级名称', label: '代理等级',
rules: 'required', rules: 'required',
componentProps: {
allowClear: false,
options: [
{ label: '普通代理', value: 'normal' },
{ label: 'VIP会员', value: 'VIP' },
{ label: 'SVIP会员', value: 'SVIP' },
],
},
}, },
{ {
component: 'Input', component: 'Input',
@@ -28,7 +36,9 @@ export function useFormSchema(): VbenFormSchema[] {
label: '会员到期时间', label: '会员到期时间',
rules: 'required', rules: 'required',
componentProps: { componentProps: {
format: 'YYYY-MM-DD HH:mm:ss',
showTime: true, showTime: true,
valueFormat: 'YYYY-MM-DD HH:mm:ss',
}, },
}, },
]; ];
@@ -50,7 +60,7 @@ export function useGridFormSchema(): VbenFormSchema[] {
{ {
component: 'RangePicker', component: 'RangePicker',
fieldName: 'create_time', fieldName: 'create_time',
label: '创建时间', label: '成为代理时间',
componentProps: { componentProps: {
showTime: true, showTime: true,
}, },
@@ -72,12 +82,18 @@ export function useColumns(): VxeTableGridOptions['columns'] {
}, },
{ {
field: 'level_name', field: 'level_name',
title: '等级名称', title: '代理等级',
width: 120, width: 120,
formatter: ({ cellValue }: { cellValue: string }) => { formatter: ({ cellValue }: { cellValue: string }) => {
if (cellValue === '' || cellValue === 'normal') { if (cellValue === '' || cellValue === 'normal') {
return '普通代理'; return '普通代理';
} }
if (cellValue === 'VIP') {
return 'VIP会员';
}
if (cellValue === 'SVIP') {
return 'SVIP会员';
}
return cellValue; return cellValue;
}, },
}, },

View File

@@ -120,7 +120,14 @@ const [Grid, gridApi] = useVbenVxeGrid({
}, },
proxyConfig: { proxyConfig: {
ajax: { ajax: {
query: async ({ page, sort }, formValues) => { query: async (
{ page, sort, form }: { page: { currentPage: number; pageSize: number }; sort?: any; form?: Record<string, any> },
formValues: Record<string, any>,
) => {
const filters =
formValues && Object.keys(formValues).length > 0
? formValues
: (form ?? {});
const sortParams = sort const sortParams = sort
? { ? {
order_by: sort.field, order_by: sort.field,
@@ -131,7 +138,7 @@ const [Grid, gridApi] = useVbenVxeGrid({
const res = await getAgentList({ const res = await getAgentList({
page: page.currentPage, page: page.currentPage,
pageSize: page.pageSize, pageSize: page.pageSize,
...formValues, ...filters,
...sortParams, ...sortParams,
parent_agent_id: route.query.parent_agent_id parent_agent_id: route.query.parent_agent_id
? Number(route.query.parent_agent_id) ? Number(route.query.parent_agent_id)

View File

@@ -1,7 +1,7 @@
<script lang="ts" setup> <script lang="ts" setup>
import { computed, ref } from 'vue'; import { computed, ref } from 'vue';
import { message, Modal } from 'ant-design-vue'; import { message, Modal, Button } from 'ant-design-vue';
import { useVbenModal } from '@vben/common-ui'; import { useVbenModal } from '@vben/common-ui';
import { useVbenForm } from '#/adapter/form'; import { useVbenForm } from '#/adapter/form';
@@ -91,7 +91,7 @@ const [Form, formApi] = useVbenForm({
}); });
// 提交前确认 // 提交前确认
async function handleSubmit() { async function handleSubmit() {
try { try {
const { valid } = await formApi.validate(); const { valid } = await formApi.validate();
if (!valid) return; if (!valid) return;
@@ -140,8 +140,8 @@ function handleReset() {
<div class="balance-modal"> <div class="balance-modal">
<Form /> <Form />
<div class="form-actions"> <div class="form-actions">
<a-button @click="handleReset">重置</a-button> <Button @click="handleReset">重置</Button>
<a-button type="primary" @click="handleSubmit">确认修改</a-button> <Button type="primary" @click="handleSubmit">确认修改</Button>
</div> </div>
</div> </div>
</ModalComponent> </ModalComponent>

View File

@@ -177,10 +177,17 @@ const [Grid, gridApi] = useVbenVxeGrid({
}, },
proxyConfig: { proxyConfig: {
ajax: { ajax: {
query: async ({ page }: { page: { currentPage: number; pageSize: number } }, formValues: Record<string, any>) => { query: async (
{ page, form }: { page: { currentPage: number; pageSize: number }; form?: Record<string, any> },
formValues: Record<string, any>,
) => {
const filters =
formValues && Object.keys(formValues).length > 0
? formValues
: (form ?? {});
const params: any = { const params: any = {
agent_id: modalData.value?.agentId, agent_id: modalData.value?.agentId,
...formValues, ...filters,
page: page.currentPage, page: page.currentPage,
pageSize: page.pageSize, pageSize: page.pageSize,
}; };
@@ -244,13 +251,8 @@ watch(dateRange, () => {
<Button size="small" type="default" @click="resetTimeRange">全部</Button> <Button size="small" type="default" @click="resetTimeRange">全部</Button>
<span class="text-sm text-gray-400 ml-4">|</span> <span class="text-sm text-gray-400 ml-4">|</span>
<span class="text-sm text-gray-600">自定义</span> <span class="text-sm text-gray-600">自定义</span>
<DatePicker.RangePicker <DatePicker.RangePicker v-model:value="dateRange" show-time format="YYYY-MM-DD HH:mm:ss"
v-model:value="dateRange" :placeholder="['开始时间', '结束时间']" style="width: 380px" />
show-time
format="YYYY-MM-DD HH:mm:ss"
:placeholder="['开始时间', '结束时间']"
style="width: 380px"
/>
</Space> </Space>
</Card> </Card>
@@ -261,34 +263,19 @@ watch(dateRange, () => {
<Statistic title="总记录数" :value="statistics.totalCount" /> <Statistic title="总记录数" :value="statistics.totalCount" />
</Col> </Col>
<Col :span="6"> <Col :span="6">
<Statistic <Statistic title="总佣金金额" :value="statistics.totalAmount" :precision="2" prefix="¥"
title="总佣金金额" :value-style="{ color: '#1890ff' }" />
:value="statistics.totalAmount"
:precision="2"
prefix="¥"
:value-style="{ color: '#1890ff' }"
/>
</Col> </Col>
<Col :span="6"> <Col :span="6">
<Statistic <Statistic title="已结算金额" :value="statistics.settledAmount" :precision="2" prefix="¥"
title="已结算金额" :value-style="{ color: '#52c41a' }" />
:value="statistics.settledAmount"
:precision="2"
prefix="¥"
:value-style="{ color: '#52c41a' }"
/>
<div class="text-sm text-gray-500 mt-1"> <div class="text-sm text-gray-500 mt-1">
{{ statistics.settledCount }} 条记录 {{ statistics.settledCount }} 条记录
</div> </div>
</Col> </Col>
<Col :span="6"> <Col :span="6">
<Statistic <Statistic title="冻结中金额" :value="statistics.frozenAmount" :precision="2" prefix="¥"
title="冻结中金额" :value-style="{ color: '#fa8c16' }" />
:value="statistics.frozenAmount"
:precision="2"
prefix="¥"
:value-style="{ color: '#fa8c16' }"
/>
<div class="text-sm text-gray-500 mt-1"> <div class="text-sm text-gray-500 mt-1">
{{ statistics.frozenCount }} 条记录 {{ statistics.frozenCount }} 条记录
</div> </div>
@@ -296,13 +283,8 @@ watch(dateRange, () => {
</Row> </Row>
<Row :gutter="[16, 16]" class="mt-4"> <Row :gutter="[16, 16]" class="mt-4">
<Col :span="12"> <Col :span="12">
<Statistic <Statistic title="已退款金额" :value="statistics.refundedAmount" :precision="2" prefix="¥"
title="已退款金额" :value-style="{ color: '#f5222d' }" />
:value="statistics.refundedAmount"
:precision="2"
prefix="¥"
:value-style="{ color: '#f5222d' }"
/>
<div class="text-sm text-gray-500 mt-1"> <div class="text-sm text-gray-500 mt-1">
{{ statistics.refundedCount }} 条记录 {{ statistics.refundedCount }} 条记录
</div> </div>

View File

@@ -6,6 +6,7 @@ import { computed, ref } from 'vue';
import { useVbenDrawer } from '@vben/common-ui'; import { useVbenDrawer } from '@vben/common-ui';
import { useVbenForm } from '#/adapter/form'; import { useVbenForm } from '#/adapter/form';
import { updateAgent } from '#/api/agent';
import { useFormSchema } from '../data'; import { useFormSchema } from '../data';
@@ -22,18 +23,22 @@ const id = ref();
const [Drawer, drawerApi] = useVbenDrawer({ const [Drawer, drawerApi] = useVbenDrawer({
async onConfirm() { async onConfirm() {
const { valid } = await formApi.validate(); const { valid } = await formApi.validate();
if (!valid) return; if (!valid || !id.value) return;
const values = await formApi.getValues(); const values = await formApi.getValues();
drawerApi.lock(); drawerApi.lock();
// TODO: 实现更新代理信息的接口 try {
// updateAgent(id.value, values as AgentApi.UpdateAgentRequest) await updateAgent({
// .then(() => { id: id.value,
// emit('success'); mobile: values.mobile,
// drawerApi.close(); level_name: values.level_name,
// }) region: values.region,
// .catch(() => { membership_expiry_time: values.membership_expiry_time,
// drawerApi.unlock(); });
// }); emit('success');
drawerApi.close();
} finally {
drawerApi.unlock();
}
}, },
onOpenChange(isOpen) { onOpenChange(isOpen) {
if (isOpen) { if (isOpen) {

View File

@@ -157,10 +157,17 @@ const [Grid] = useVbenVxeGrid({
}, },
proxyConfig: { proxyConfig: {
ajax: { ajax: {
query: async ({ page }: { page: { currentPage: number; pageSize: number } }, formValues: Record<string, any>) => { query: async (
{ page, form }: { page: { currentPage: number; pageSize: number }; form?: Record<string, any> },
formValues: Record<string, any>,
) => {
const filters =
formValues && Object.keys(formValues).length > 0
? formValues
: (form ?? {});
return await getWalletTransactionList({ return await getWalletTransactionList({
agent_id: modalData.value?.agentId || 0, agent_id: modalData.value?.agentId || 0,
...formValues, ...filters,
page: page.currentPage, page: page.currentPage,
pageSize: page.pageSize, pageSize: page.pageSize,
}); });

View File

@@ -39,11 +39,18 @@ const [Grid, gridApi] = useVbenVxeGrid({
keepSource: true, keepSource: true,
proxyConfig: { proxyConfig: {
ajax: { ajax: {
query: async ({ page }, formValues) => { query: async (
{ page, form }: { page: { currentPage: number; pageSize: number }; form?: Record<string, any> },
formValues: Record<string, any>,
) => {
const filters =
formValues && Object.keys(formValues).length > 0
? formValues
: (form ?? {});
const res = await getAgentMembershipConfigList({ const res = await getAgentMembershipConfigList({
page: page.currentPage, page: page.currentPage,
pageSize: page.pageSize, pageSize: page.pageSize,
level_name: formValues.level_name, level_name: filters.level_name,
}); });
return res; return res;
}, },

View File

@@ -19,9 +19,10 @@ export const levelNameOptions = [
// 状态选项 // 状态选项
export const statusOptions = [ export const statusOptions = [
{ label: '待支付', value: 'pending' }, { label: '待支付', value: 'pending' },
{ label: '支付成功', value: 'success' }, { label: '支付', value: 'paid' },
{ label: '支付失败', value: 'failed' }, { label: '支付失败', value: 'failed' },
{ label: '已取消', value: 'cancelled' }, { label: '已退款', value: 'refunded' },
{ label: '已关闭', value: 'closed' },
]; ];
// 列表列配置 // 列表列配置

View File

@@ -24,13 +24,20 @@ const [Grid, _gridApi] = useVbenVxeGrid({
proxyConfig: { proxyConfig: {
ajax: { ajax: {
query: async ( query: async (
{ page }: { page: { currentPage: number; pageSize: number } }, {
page,
form,
}: { page: { currentPage: number; pageSize: number }; form?: Record<string, any> },
formValues: Record<string, any>, formValues: Record<string, any>,
) => { ) => {
const filters =
formValues && Object.keys(formValues).length > 0
? formValues
: (form ?? {});
const res = await getMembershipRechargeOrderList({ const res = await getMembershipRechargeOrderList({
page: page.currentPage, page: page.currentPage,
pageSize: page.pageSize, pageSize: page.pageSize,
...formValues, ...filters,
}); });
return { items: res.items, total: res.total }; return { items: res.items, total: res.total };
}, },

View File

@@ -44,16 +44,13 @@ export function usePlatformDeductionColumns(): VxeTableGridOptions['columns'] {
title: '状态', title: '状态',
field: 'status', field: 'status',
width: 100, width: 100,
formatter: ({ cellValue }) => { cellRender: {
const statusMap = { name: 'CellTag',
0: { text: '待处理', type: 'warning' }, options: [
1: { text: '已处理', type: 'success' }, { value: 0, color: 'warning', label: '待处理' },
2: { text: '已取消', type: 'error' }, { value: 1, color: 'success', label: '已处理' },
}; { value: 2, color: 'error', label: '已取消' },
const status = statusMap[cellValue as keyof typeof statusMap]; ],
return status
? `<a-tag color="${status.type}">${status.text}</a-tag>`
: cellValue;
}, },
}, },
{ {

View File

@@ -36,16 +36,17 @@ const [Grid] = useVbenVxeGrid({
columns: usePlatformDeductionColumns(), columns: usePlatformDeductionColumns(),
proxyConfig: { proxyConfig: {
ajax: { ajax: {
query: async ({ query: async (
form, { page, form }: { page: QueryParams; form?: Record<string, any> },
page, formValues: Record<string, any>,
}: { ) => {
form: Record<string, any>; const filters =
page: QueryParams; formValues && Object.keys(formValues).length > 0
}) => { ? formValues
: (form ?? {});
return await getAgentPlatformDeductionList({ return await getAgentPlatformDeductionList({
...queryParams.value, ...queryParams.value,
...form, ...filters,
page: page.currentPage, page: page.currentPage,
pageSize: page.pageSize, pageSize: page.pageSize,
}); });

View File

@@ -46,7 +46,14 @@ const [Grid, gridApi] = useVbenVxeGrid({
}, },
proxyConfig: { proxyConfig: {
ajax: { ajax: {
query: async ({ page, sort }, formValues) => { query: async (
{ page, sort, form }: { page: { currentPage: number; pageSize: number }; sort?: any; form?: Record<string, any> },
formValues: Record<string, any>,
) => {
const filters =
formValues && Object.keys(formValues).length > 0
? formValues
: (form ?? {});
const sortParams = sort const sortParams = sort
? { ? {
order_by: sort.field, order_by: sort.field,
@@ -57,7 +64,7 @@ const [Grid, gridApi] = useVbenVxeGrid({
const params: AgentApi.GetAgentProductionConfigListParams = { const params: AgentApi.GetAgentProductionConfigListParams = {
page: page.currentPage, page: page.currentPage,
pageSize: page.pageSize, pageSize: page.pageSize,
product_name: formValues.product_name, product_name: filters.product_name,
...sortParams, ...sortParams,
}; };

View File

@@ -45,29 +45,20 @@ export function useRewardColumns(): VxeTableGridOptions['columns'] {
export function useRewardFormSchema(): VbenFormSchema[] { export function useRewardFormSchema(): VbenFormSchema[] {
return [ return [
{ {
fieldName: 'type', fieldName: 'relation_agent_id',
label: '奖励类型', label: '关联代理ID',
component: 'Select', component: 'InputNumber',
componentProps: { componentProps: {
options: [ placeholder: '请输入关联代理ID',
{ label: '注册奖励', value: 'register' }, style: { width: '100%' },
{ label: '首单奖励', value: 'first_order' },
{ label: '升级奖励', value: 'level_up' },
],
allowClear: true,
}, },
}, },
{ {
fieldName: 'status', fieldName: 'type',
label: '状态', label: '奖励类型',
component: 'Select', component: 'Input',
componentProps: { componentProps: {
options: [ placeholder: '请输入奖励类型',
{ label: '待发放', value: 'pending' },
{ label: '已发放', value: 'paid' },
{ label: '发放失败', value: 'failed' },
],
allowClear: true,
}, },
}, },
]; ];

View File

@@ -33,16 +33,17 @@ const [Grid] = useVbenVxeGrid({
columns: useRewardColumns(), columns: useRewardColumns(),
proxyConfig: { proxyConfig: {
ajax: { ajax: {
query: async ({ query: async (
page, { page, form }: { page: QueryParams; form?: Record<string, any> },
form, formValues: Record<string, any>,
}: { ) => {
form: Record<string, any>; const filters =
page: QueryParams; formValues && Object.keys(formValues).length > 0
}) => { ? formValues
: (form ?? {});
return await getAgentRewardList({ return await getAgentRewardList({
...queryParams.value, ...queryParams.value,
...form, ...filters,
page: page.currentPage, page: page.currentPage,
pageSize: page.pageSize, pageSize: page.pageSize,
}); });

View File

@@ -57,13 +57,17 @@ const [Grid, gridApi] = useVbenVxeGrid({
columns: useWithdrawalColumns(), columns: useWithdrawalColumns(),
proxyConfig: { proxyConfig: {
ajax: { ajax: {
query: async ({ query: async (
page, { page, form }: { page: QueryParams; form?: Record<string, any> },
}: { formValues: Record<string, any>,
page: QueryParams; ) => {
}) => { const filters =
formValues && Object.keys(formValues).length > 0
? formValues
: (form ?? {});
return await getAgentWithdrawalList({ return await getAgentWithdrawalList({
...queryParams.value, ...queryParams.value,
...filters,
page: page.currentPage, page: page.currentPage,
pageSize: page.pageSize, pageSize: page.pageSize,
}); });

View File

@@ -37,8 +37,8 @@ const columns = useColumns<NotificationApi.NotificationItem>(
}, },
); );
function buildNotificationListParams(formValues: Recordable) { function buildNotificationListParams(formValues: Record<string, any>) {
const params: Recordable = { ...formValues }; const params: Record<string, any> = { ...formValues };
delete params.date_range; delete params.date_range;
for (const key of ['title', 'notification_page']) { for (const key of ['title', 'notification_page']) {
@@ -77,11 +77,18 @@ const [Grid, gridApi] = useVbenVxeGrid({
keepSource: false, keepSource: false,
proxyConfig: { proxyConfig: {
ajax: { ajax: {
query: async ({ page }, formValues) => { query: async (
{ page, form }: { page: { currentPage: number; pageSize: number }; form?: Record<string, any> },
formValues: Record<string, any>,
) => {
const filters =
formValues && Object.keys(formValues).length > 0
? formValues
: (form ?? {});
return await getNotificationList({ return await getNotificationList({
page: page.currentPage, page: page.currentPage,
pageSize: page.pageSize, pageSize: page.pageSize,
...buildNotificationListParams(formValues), ...buildNotificationListParams(filters),
}); });
}, },
}, },

View File

@@ -78,7 +78,7 @@ const [Drawer, drawerApi] = useVbenDrawer({
)); ));
emit('success'); emit('success');
drawerApi.close(); drawerApi.close();
} catch { } finally {
drawerApi.unlock(); drawerApi.unlock();
} }
}, },

View File

@@ -115,18 +115,6 @@ export function useColumns<T = OrderApi.Order>(
title: '退款时间', title: '退款时间',
width: 180, width: 180,
}, },
{
cellRender: {
name: 'CellTag',
options: [
{ value: 0, color: 'default', label: '否' },
{ value: 1, color: 'success', label: '是' },
],
},
field: 'is_promotion',
title: '推广订单',
width: 100,
},
{ {
align: 'center', align: 'center',
cellRender: { cellRender: {
@@ -235,18 +223,6 @@ export function useGridFormSchema(): VbenFormSchema[] {
fieldName: 'status', fieldName: 'status',
label: '支付状态', label: '支付状态',
}, },
{
component: 'Select',
componentProps: {
allowClear: true,
options: [
{ label: '否', value: 0 },
{ label: '是', value: 1 },
],
},
fieldName: 'is_promotion',
label: '推广订单',
},
{ {
component: 'RangePicker', component: 'RangePicker',
fieldName: 'create_time', fieldName: 'create_time',

View File

@@ -31,11 +31,18 @@ const [Grid, gridApi] = useVbenVxeGrid({
keepSource: true, keepSource: true,
proxyConfig: { proxyConfig: {
ajax: { ajax: {
query: async ({ page }, formValues) => { query: async (
{ page, form }: { page: { currentPage: number; pageSize: number }; form?: Record<string, any> },
formValues: Record<string, any>,
) => {
const filters =
formValues && Object.keys(formValues).length > 0
? formValues
: (form ?? {});
return await getOrderList({ return await getOrderList({
page: page.currentPage, page: page.currentPage,
pageSize: page.pageSize, pageSize: page.pageSize,
...formValues, ...filters,
}); });
}, },
}, },

View File

@@ -37,7 +37,14 @@ const [Grid, gridApi] = useVbenVxeGrid({
keepSource: true, keepSource: true,
proxyConfig: { proxyConfig: {
ajax: { ajax: {
query: async ({ page }, formValues) => { query: async (
{ page, form }: { page: { currentPage: number; pageSize: number }; form?: Record<string, any> },
formValues: Record<string, any>,
) => {
const filters =
formValues && Object.keys(formValues).length > 0
? formValues
: (form ?? {});
const { logId } = modalApi.getData<ModalData>(); const { logId } = modalApi.getData<ModalData>();
if (!logId) { if (!logId) {
return { return {
@@ -48,7 +55,7 @@ const [Grid, gridApi] = useVbenVxeGrid({
const result = await getQueryCleanupDetailList(logId, { const result = await getQueryCleanupDetailList(logId, {
page: page.currentPage, page: page.currentPage,
pageSize: page.pageSize, pageSize: page.pageSize,
...formValues, ...filters,
}); });
return result; return result;
}, },

View File

@@ -148,11 +148,18 @@ const [Grid, gridApi] = useVbenVxeGrid({
keepSource: true, keepSource: true,
proxyConfig: { proxyConfig: {
ajax: { ajax: {
query: async ({ page }, formValues) => { query: async (
{ page, form }: { page: { currentPage: number; pageSize: number }; form?: Record<string, any> },
formValues: Record<string, any>,
) => {
const filters =
formValues && Object.keys(formValues).length > 0
? formValues
: (form ?? {});
const result = await getQueryCleanupLogList({ const result = await getQueryCleanupLogList({
page: page.currentPage, page: page.currentPage,
pageSize: page.pageSize, pageSize: page.pageSize,
...formValues, ...filters,
}); });
return result; return result;
}, },

View File

@@ -47,7 +47,14 @@ const [Grid, gridApi] = useVbenVxeGrid({
}, },
proxyConfig: { proxyConfig: {
ajax: { ajax: {
query: async ({ page, sort }, formValues) => { query: async (
{ page, sort, form }: { page: { currentPage: number; pageSize: number }; sort?: any; form?: Record<string, any> },
formValues: Record<string, any>,
) => {
const filters =
formValues && Object.keys(formValues).length > 0
? formValues
: (form ?? {});
const sortParams = sort const sortParams = sort
? { ? {
order_by: sort.field, order_by: sort.field,
@@ -58,7 +65,7 @@ const [Grid, gridApi] = useVbenVxeGrid({
const res = await getPlatformUserList({ const res = await getPlatformUserList({
page: page.currentPage, page: page.currentPage,
pageSize: page.pageSize, pageSize: page.pageSize,
...formValues, ...filters,
...sortParams, ...sortParams,
}); });

View File

@@ -23,20 +23,19 @@ const id = ref();
const [Drawer, drawerApi] = useVbenDrawer({ const [Drawer, drawerApi] = useVbenDrawer({
async onConfirm() { async onConfirm() {
const { valid } = await formApi.validate(); const { valid } = await formApi.validate();
if (!valid) return; if (!valid || !id.value) return;
const values = await formApi.getValues(); const values = await formApi.getValues();
drawerApi.lock(); drawerApi.lock();
updatePlatformUser( try {
id.value, await updatePlatformUser(
values as PlatformUserApi.UpdatePlatformUserRequest, id.value,
) values as PlatformUserApi.UpdatePlatformUserRequest,
.then(() => { );
emit('success'); emit('success');
drawerApi.close(); drawerApi.close();
}) } finally {
.catch(() => { drawerApi.unlock();
drawerApi.unlock(); }
});
}, },
onOpenChange(isOpen) { onOpenChange(isOpen) {
if (isOpen) { if (isOpen) {

View File

@@ -41,11 +41,18 @@ const [Grid, gridApi] = useVbenVxeGrid({
keepSource: true, keepSource: true,
proxyConfig: { proxyConfig: {
ajax: { ajax: {
query: async ({ page }, formValues) => { query: async (
{ page, form }: { page: { currentPage: number; pageSize: number }; form?: Record<string, any> },
formValues: Record<string, any>,
) => {
const filters =
formValues && Object.keys(formValues).length > 0
? formValues
: (form ?? {});
return await getFeatureList({ return await getFeatureList({
page: page.currentPage, page: page.currentPage,
pageSize: page.pageSize, pageSize: page.pageSize,
...formValues, ...filters,
}); });
}, },
}, },

View File

@@ -32,7 +32,7 @@ const [Drawer, drawerApi] = useVbenDrawer({
: createFeature(values as FeatureApi.CreateFeatureRequest)); : createFeature(values as FeatureApi.CreateFeatureRequest));
emit('success'); emit('success');
drawerApi.close(); drawerApi.close();
} catch { } finally {
drawerApi.unlock(); drawerApi.unlock();
} }
}, },

View File

@@ -41,11 +41,18 @@ const [Grid, gridApi] = useVbenVxeGrid({
keepSource: true, keepSource: true,
proxyConfig: { proxyConfig: {
ajax: { ajax: {
query: async ({ page }, formValues) => { query: async (
{ page, form }: { page: { currentPage: number; pageSize: number }; form?: Record<string, any> },
formValues: Record<string, any>,
) => {
const filters =
formValues && Object.keys(formValues).length > 0
? formValues
: (form ?? {});
return await getProductList({ return await getProductList({
page: page.currentPage, page: page.currentPage,
pageSize: page.pageSize, pageSize: page.pageSize,
...formValues, ...filters,
}); });
}, },
}, },

View File

@@ -155,11 +155,18 @@ const [Grid] = useVbenVxeGrid({
}, },
proxyConfig: { proxyConfig: {
ajax: { ajax: {
query: async ({ page }, formValues) => { query: async (
{ page, form }: { page: { currentPage: number; pageSize: number }; form?: Record<string, any> },
formValues: Record<string, any>,
) => {
const filters =
formValues && Object.keys(formValues).length > 0
? formValues
: (form ?? {});
return await getFeatureList({ return await getFeatureList({
page: page.currentPage, page: page.currentPage,
pageSize: page.pageSize, pageSize: page.pageSize,
...formValues, ...filters,
}); });
}, },
}, },

View File

@@ -32,7 +32,7 @@ const [Drawer, drawerApi] = useVbenDrawer({
: createProduct(values as ProductApi.CreateProductRequest)); : createProduct(values as ProductApi.CreateProductRequest));
emit('success'); emit('success');
drawerApi.close(); drawerApi.close();
} catch { } finally {
drawerApi.unlock(); drawerApi.unlock();
} }
}, },

View File

@@ -36,11 +36,18 @@ const [Grid, gridApi] = useVbenVxeGrid({
keepSource: true, keepSource: true,
proxyConfig: { proxyConfig: {
ajax: { ajax: {
query: async ({ page }, formValues) => { query: async (
{ page, form }: { page: { currentPage: number; pageSize: number }; form?: Record<string, any> },
formValues: Record<string, any>,
) => {
const filters =
formValues && Object.keys(formValues).length > 0
? formValues
: (form ?? {});
return await getApiList({ return await getApiList({
page: page.currentPage, page: page.currentPage,
pageSize: page.pageSize, pageSize: page.pageSize,
...formValues, ...filters,
}); });
}, },
}, },

View File

@@ -42,11 +42,18 @@ const [Grid, gridApi] = useVbenVxeGrid({
keepSource: true, keepSource: true,
proxyConfig: { proxyConfig: {
ajax: { ajax: {
query: async ({ page }, formValues) => { query: async (
{ page, form }: { page: { currentPage: number; pageSize: number }; form?: Record<string, any> },
formValues: Record<string, any>,
) => {
const filters =
formValues && Object.keys(formValues).length > 0
? formValues
: (form ?? {});
return await getRoleList({ return await getRoleList({
page: page.currentPage, page: page.currentPage,
pageSize: page.pageSize, pageSize: page.pageSize,
...formValues, ...filters,
}); });
}, },
}, },

View File

@@ -38,14 +38,13 @@ const [Drawer, drawerApi] = useVbenDrawer({
if (!valid) return; if (!valid) return;
const values = await formApi.getValues(); const values = await formApi.getValues();
drawerApi.lock(); drawerApi.lock();
(id.value ? updateRole(id.value, values) : createRole(values)) try {
.then(() => { await (id.value ? updateRole(id.value, values) : createRole(values));
emits('success'); emits('success');
drawerApi.close(); drawerApi.close();
}) } finally {
.catch(() => { drawerApi.unlock();
drawerApi.unlock(); }
});
}, },
onOpenChange(isOpen) { onOpenChange(isOpen) {
if (isOpen) { if (isOpen) {

View File

@@ -42,11 +42,18 @@ const [Grid, gridApi] = useVbenVxeGrid({
keepSource: true, keepSource: true,
proxyConfig: { proxyConfig: {
ajax: { ajax: {
query: async ({ page }, formValues) => { query: async (
{ page, form }: { page: { currentPage: number; pageSize: number }; form?: Record<string, any> },
formValues: Record<string, any>,
) => {
const filters =
formValues && Object.keys(formValues).length > 0
? formValues
: (form ?? {});
return await getUserList({ return await getUserList({
page: page.currentPage, page: page.currentPage,
pageSize: page.pageSize, pageSize: page.pageSize,
...formValues, ...filters,
}); });
}, },
}, },

View File

@@ -43,14 +43,13 @@ const [Drawer, drawerApi] = useVbenDrawer({
} }
drawerApi.lock(); drawerApi.lock();
(id.value ? updateUser(id.value, values) : createUser(values)) try {
.then(() => { await (id.value ? updateUser(id.value, values) : createUser(values));
emits('success'); emits('success');
drawerApi.close(); drawerApi.close();
}) } finally {
.catch(() => { drawerApi.unlock();
drawerApi.unlock(); }
});
}, },
onOpenChange(isOpen) { onOpenChange(isOpen) {
if (isOpen) { if (isOpen) {

View File

@@ -49,14 +49,13 @@ const [Drawer, drawerApi] = useVbenDrawer({
const values = await formApi.getValues(); const values = await formApi.getValues();
drawerApi.lock(); drawerApi.lock();
resetPassword(id.value, { password: values.password }) try {
.then(() => { await resetPassword(id.value, { password: values.password });
emits('success'); emits('success');
drawerApi.close(); drawerApi.close();
}) } finally {
.catch(() => { drawerApi.unlock();
drawerApi.unlock(); }
});
}, },
onOpenChange(isOpen) { onOpenChange(isOpen) {
if (isOpen) { if (isOpen) {

View File

@@ -10,7 +10,8 @@ export default defineConfig(async () => {
changeOrigin: true, changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, ''), rewrite: (path) => path.replace(/^\/api/, ''),
// mock代理目标地址 // mock代理目标地址
target: 'http://localhost:8888/api', // target: 'http://localhost:8888/api',
target: 'https://chimei.ronsafe.cn/api',
ws: true, ws: true,
}, },
}, },