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[];
}
export interface UpdateAgentRequest {
id: number;
mobile: string;
level_name: string;
region: string;
membership_expiry_time: string;
}
export interface GetAgentListParams {
page: number;
pageSize: number;
@@ -135,6 +143,7 @@ export namespace AgentApi {
agent_id?: number;
status?: number;
withdraw_no?: string;
withdraw_type?: number;
}
// 提现统计数据
@@ -272,7 +281,7 @@ export interface GetAgentLinkProductStatisticsParams {}
payment_method: 'alipay' | 'appleiap' | 'other' | 'wechat';
order_no: string;
platform_order_id: string;
status: 'cancelled' | 'failed' | 'pending' | 'success';
status: 'closed' | 'failed' | 'paid' | 'pending' | 'refunded';
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,
getAgentLinkProductStatistics,
getAgentList,
updateAgent,
getAgentMembershipConfigList,
getAgentOrderStatistics,
getAgentPlatformDeductionList,

View File

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

Binary file not shown.

View File

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

View File

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

View File

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

View File

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

View File

@@ -120,7 +120,14 @@ const [Grid, gridApi] = useVbenVxeGrid({
},
proxyConfig: {
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
? {
order_by: sort.field,
@@ -131,7 +138,7 @@ const [Grid, gridApi] = useVbenVxeGrid({
const res = await getAgentList({
page: page.currentPage,
pageSize: page.pageSize,
...formValues,
...filters,
...sortParams,
parent_agent_id: route.query.parent_agent_id
? Number(route.query.parent_agent_id)

View File

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

View File

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

View File

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

View File

@@ -157,10 +157,17 @@ const [Grid] = useVbenVxeGrid({
},
proxyConfig: {
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({
agent_id: modalData.value?.agentId || 0,
...formValues,
...filters,
page: page.currentPage,
pageSize: page.pageSize,
});

View File

@@ -39,11 +39,18 @@ const [Grid, gridApi] = useVbenVxeGrid({
keepSource: true,
proxyConfig: {
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({
page: page.currentPage,
pageSize: page.pageSize,
level_name: formValues.level_name,
level_name: filters.level_name,
});
return res;
},

View File

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

View File

@@ -24,13 +24,20 @@ const [Grid, _gridApi] = useVbenVxeGrid({
proxyConfig: {
ajax: {
query: async (
{ page }: { page: { currentPage: number; pageSize: number } },
{
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 getMembershipRechargeOrderList({
page: page.currentPage,
pageSize: page.pageSize,
...formValues,
...filters,
});
return { items: res.items, total: res.total };
},

View File

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

View File

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

View File

@@ -46,7 +46,14 @@ const [Grid, gridApi] = useVbenVxeGrid({
},
proxyConfig: {
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
? {
order_by: sort.field,
@@ -57,7 +64,7 @@ const [Grid, gridApi] = useVbenVxeGrid({
const params: AgentApi.GetAgentProductionConfigListParams = {
page: page.currentPage,
pageSize: page.pageSize,
product_name: formValues.product_name,
product_name: filters.product_name,
...sortParams,
};

View File

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

View File

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

View File

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

View File

@@ -37,8 +37,8 @@ const columns = useColumns<NotificationApi.NotificationItem>(
},
);
function buildNotificationListParams(formValues: Recordable) {
const params: Recordable = { ...formValues };
function buildNotificationListParams(formValues: Record<string, any>) {
const params: Record<string, any> = { ...formValues };
delete params.date_range;
for (const key of ['title', 'notification_page']) {
@@ -77,11 +77,18 @@ const [Grid, gridApi] = useVbenVxeGrid({
keepSource: false,
proxyConfig: {
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({
page: page.currentPage,
pageSize: page.pageSize,
...buildNotificationListParams(formValues),
...buildNotificationListParams(filters),
});
},
},

View File

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

View File

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

View File

@@ -31,11 +31,18 @@ const [Grid, gridApi] = useVbenVxeGrid({
keepSource: true,
proxyConfig: {
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({
page: page.currentPage,
pageSize: page.pageSize,
...formValues,
...filters,
});
},
},

View File

@@ -37,7 +37,14 @@ const [Grid, gridApi] = useVbenVxeGrid({
keepSource: true,
proxyConfig: {
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>();
if (!logId) {
return {
@@ -48,7 +55,7 @@ const [Grid, gridApi] = useVbenVxeGrid({
const result = await getQueryCleanupDetailList(logId, {
page: page.currentPage,
pageSize: page.pageSize,
...formValues,
...filters,
});
return result;
},

View File

@@ -148,11 +148,18 @@ const [Grid, gridApi] = useVbenVxeGrid({
keepSource: true,
proxyConfig: {
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({
page: page.currentPage,
pageSize: page.pageSize,
...formValues,
...filters,
});
return result;
},

View File

@@ -47,7 +47,14 @@ const [Grid, gridApi] = useVbenVxeGrid({
},
proxyConfig: {
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
? {
order_by: sort.field,
@@ -58,7 +65,7 @@ const [Grid, gridApi] = useVbenVxeGrid({
const res = await getPlatformUserList({
page: page.currentPage,
pageSize: page.pageSize,
...formValues,
...filters,
...sortParams,
});

View File

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

View File

@@ -41,11 +41,18 @@ const [Grid, gridApi] = useVbenVxeGrid({
keepSource: true,
proxyConfig: {
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({
page: page.currentPage,
pageSize: page.pageSize,
...formValues,
...filters,
});
},
},

View File

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

View File

@@ -41,11 +41,18 @@ const [Grid, gridApi] = useVbenVxeGrid({
keepSource: true,
proxyConfig: {
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({
page: page.currentPage,
pageSize: page.pageSize,
...formValues,
...filters,
});
},
},

View File

@@ -155,11 +155,18 @@ const [Grid] = useVbenVxeGrid({
},
proxyConfig: {
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({
page: page.currentPage,
pageSize: page.pageSize,
...formValues,
...filters,
});
},
},

View File

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

View File

@@ -36,11 +36,18 @@ const [Grid, gridApi] = useVbenVxeGrid({
keepSource: true,
proxyConfig: {
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({
page: page.currentPage,
pageSize: page.pageSize,
...formValues,
...filters,
});
},
},

View File

@@ -42,11 +42,18 @@ const [Grid, gridApi] = useVbenVxeGrid({
keepSource: true,
proxyConfig: {
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({
page: page.currentPage,
pageSize: page.pageSize,
...formValues,
...filters,
});
},
},

View File

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

View File

@@ -42,11 +42,18 @@ const [Grid, gridApi] = useVbenVxeGrid({
keepSource: true,
proxyConfig: {
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({
page: page.currentPage,
pageSize: page.pageSize,
...formValues,
...filters,
});
},
},

View File

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

View File

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

View File

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