ss
Some checks failed
Deploy Website on push / Deploy Push Element Ftp (push) Waiting to run
Lock Threads / action (push) Has been cancelled
Issue Close Require / close-issues (push) Has been cancelled
Close stale issues / stale (push) Has been cancelled
CI / Test (ubuntu-latest) (push) Has been cancelled
CI / Test (windows-latest) (push) Has been cancelled
CI / Lint (ubuntu-latest) (push) Has been cancelled
CI / Lint (windows-latest) (push) Has been cancelled
CI / Check (ubuntu-latest) (push) Has been cancelled
CI / Check (windows-latest) (push) Has been cancelled
CI / CI OK (push) Has been cancelled
CodeQL / Analyze (javascript-typescript) (push) Has been cancelled
Deploy Website on push / Deploy Push Playground Ftp (push) Has been cancelled
Deploy Website on push / Deploy Push Docs Ftp (push) Has been cancelled
Deploy Website on push / Deploy Push Antd Ftp (push) Has been cancelled
Deploy Website on push / Deploy Push Naive Ftp (push) Has been cancelled
Deploy Website on push / Rerun on failure (push) Has been cancelled
Release Drafter / update_release_draft (push) Has been cancelled

This commit is contained in:
Mrx
2026-01-30 16:03:46 +08:00
commit 62e532846e
1451 changed files with 127726 additions and 0 deletions

View File

@@ -0,0 +1,715 @@
import { requestClient } from '#/api/request';
export namespace AgentApi {
export interface AgentListItem {
id: number;
user_id: number;
level_name: string;
region: string;
mobile: string;
membership_expiry_time: string;
balance: number;
total_earnings: number;
frozen_balance: number;
withdrawn_amount: number;
create_time: string;
is_real_name_verified: boolean;
real_name: string;
id_card: string;
real_name_status: 'approved' | 'pending' | 'rejected';
}
export interface AgentList {
total: number;
items: AgentListItem[];
}
export interface GetAgentListParams {
page: number;
pageSize: number;
mobile?: string;
region?: string;
parent_agent_id?: number;
id?: number;
create_time_start?: string;
create_time_end?: string;
order_by?: string;
order_type?: 'asc' | 'desc';
}
export interface AgentLinkListItem {
agent_id: number;
product_name: string;
price: number;
link_identifier: string;
create_time: string;
}
export interface AgentLinkList {
total: number;
items: AgentLinkListItem[];
}
export interface GetAgentLinkListParams {
page: number;
pageSize: number;
agent_id?: number;
product_name?: string;
link_identifier?: string;
}
// 代理佣金相关接口
export interface AgentCommissionListItem {
id: number;
agent_id: number;
order_id: number;
amount: number;
product_name: string;
status: number;
create_time: string;
}
export interface AgentCommissionList {
total: number;
items: AgentCommissionListItem[];
}
export interface GetAgentCommissionListParams {
page: number;
pageSize: number;
agent_id?: number;
order_id?: number;
product_name?: string;
status?: number;
}
// 代理奖励相关接口
export interface AgentRewardListItem {
id: number;
agent_id: number;
relation_agent_id: number;
amount: number;
type: string;
create_time: string;
}
export interface AgentRewardList {
total: number;
items: AgentRewardListItem[];
}
export interface GetAgentRewardListParams {
page: number;
pageSize: number;
agent_id?: number;
relation_agent_id?: number;
type?: string;
}
// 代理提现相关接口
export interface AgentWithdrawalListItem {
id: number;
agent_id: number;
withdraw_no: string;
amount: number;
actual_amount: number; // 实际到账金额(扣税后)
tax_amount: number; // 扣税金额
status: number;
payee_account: string;
remark: string;
create_time: string;
withdraw_type: number; // 提现类型:1-支付宝,2-银行卡
bank_card_no?: string; // 银行卡号
bank_name?: string; // 开户支行
payee_name?: string; // 收款人姓名
}
export interface AgentWithdrawalList {
total: number;
items: AgentWithdrawalListItem[];
}
export interface GetAgentWithdrawalListParams {
page: number;
pageSize: number;
agent_id?: number;
status?: number;
withdraw_no?: string;
}
// 提现统计数据
export interface WithdrawalStatistics {
total_withdrawal_amount: number;
today_withdrawal_amount: number;
total_actual_amount: number;
total_tax_amount: number;
}
// 代理订单统计数据
export interface AgentOrderStatistics {
total_agent_order_count: number; // 总代理订单数
today_agent_order_count: number; // 今日代理订单数
}
// 代理统计数据
export interface AgentStatistics {
total_agent_count: number; // 总代理数
today_agent_count: number; // 今日新增代理数
}
// 代理链接产品统计项
export interface AgentLinkProductStatisticsItem {
product_name: string;
link_count: number;
}
// 代理链接产品统计响应
export interface AgentLinkProductStatisticsResp {
items: AgentLinkProductStatisticsItem[];
}
// 代理链接产品统计请求参数
export interface GetAgentLinkProductStatisticsParams {}
// 代理上级抽佣相关接口
export interface AgentCommissionDeductionListItem {
id: number;
agent_id: number;
deducted_agent_id: number;
amount: number;
product_name: string;
type: 'cost' | 'pricing';
status: number;
create_time: string;
}
export interface AgentCommissionDeductionList {
total: number;
items: AgentCommissionDeductionListItem[];
}
export interface GetAgentCommissionDeductionListParams {
page: number;
pageSize: number;
agent_id?: number;
product_name?: string;
type?: 'cost' | 'pricing';
status?: number;
}
// 平台抽佣列表项
export interface AgentPlatformDeductionListItem {
id: number;
agent_id: number;
amount: number;
type: 'cost' | 'pricing';
status: number;
create_time: string;
}
// 平台抽佣列表响应
export interface AgentPlatformDeductionList {
total: number;
items: AgentPlatformDeductionListItem[];
}
// 获取平台抽佣列表参数
export interface GetAgentPlatformDeductionListParams {
page: number;
pageSize: number;
agent_id?: number;
type?: 'cost' | 'pricing';
status?: number;
}
// 代理产品配置列表项
export interface AgentProductionConfigItem {
id: number;
product_name: string;
cost_price: number;
price_range_min: number;
price_range_max: number;
pricing_standard: number;
overpricing_ratio: number;
create_time: string;
}
// 代理产品配置列表响应
export interface AgentProductionConfigList {
total: number;
items: AgentProductionConfigItem[];
}
// 获取代理产品配置列表参数
export interface GetAgentProductionConfigListParams {
page: number;
pageSize: number;
product_name?: string;
id?: number;
}
// 更新代理产品配置参数
export interface UpdateAgentProductionConfigParams {
id: number;
cost_price: number;
price_range_min: number;
price_range_max: number;
pricing_standard: number;
overpricing_ratio: number;
}
// 更新代理产品配置响应
export interface UpdateAgentProductionConfigResp {
success: boolean;
}
export interface MembershipRechargeOrderListItem {
id: number;
user_id: number;
agent_id: number;
level_name: string;
amount: number;
payment_method: 'alipay' | 'appleiap' | 'other' | 'wechat';
order_no: string;
platform_order_id: string;
status: 'cancelled' | 'failed' | 'pending' | 'success';
create_time: string;
}
export interface GetMembershipRechargeOrderListParams {
page: number;
pageSize: number;
user_id?: number;
agent_id?: number;
level_name?: string;
status?: string;
}
export interface MembershipRechargeOrderList {
total: number;
items: MembershipRechargeOrderListItem[];
}
// 代理会员配置相关接口
export interface AgentMembershipConfigListItem {
id: number;
level_name: string;
price: number;
report_commission: number;
lower_activity_reward: null | number;
new_activity_reward: null | number;
lower_standard_count: null | number;
new_lower_standard_count: null | number;
lower_withdraw_reward_ratio: null | number;
lower_convert_vip_reward: null | number;
lower_convert_svip_reward: null | number;
exemption_amount: number;
price_increase_max: null | number;
price_ratio: null | number;
price_increase_amount: null | number;
create_time: string;
}
export interface GetAgentMembershipConfigListParams {
page: number;
pageSize: number;
level_name?: string;
}
// 代理会员配置编辑请求参数
export interface UpdateAgentMembershipConfigParams {
id: number; // 主键
level_name: string; // 会员级别名称
price: number; // 会员年费
report_commission: number; // 直推报告收益
lower_activity_reward?: null | number; // 下级活跃奖励金额
new_activity_reward?: null | number; // 新增活跃奖励金额
lower_standard_count?: null | number; // 活跃下级达标个数
new_lower_standard_count?: null | number; // 新增活跃下级达标个数
lower_withdraw_reward_ratio?: null | number; // 下级提现奖励比例
lower_convert_vip_reward?: null | number; // 下级转化VIP奖励
lower_convert_svip_reward?: null | number; // 下级转化SVIP奖励
exemption_amount?: null | number; // 免责金额
price_increase_max?: null | number; // 提价最高金额
price_ratio?: null | number; // 提价区间收取比例
price_increase_amount?: null | number; // 在原本成本上加价的金额
}
// 代理钱包信息
export interface AgentWalletInfo {
balance: number; // 可用余额
frozen_balance: number; // 冻结余额
total_earnings: number; // 总收益
}
// 修改代理钱包余额请求
export interface UpdateAgentWalletBalanceReq {
agent_id: number; // 代理ID
amount: number; // 修改金额(正数增加,负数减少)
}
// 修改代理钱包余额响应
export interface UpdateAgentWalletBalanceResp {
success: boolean; // 是否成功
balance: number; // 修改后的余额
}
// 代理钱包流水相关接口
export interface WalletTransactionListItem {
id: number;
agent_id: number;
transaction_type: string;
amount: number;
balance_before: number;
balance_after: number;
frozen_balance_before: number;
frozen_balance_after: number;
transaction_id?: string;
related_user_id?: number;
remark?: string;
create_time: string;
}
export interface WalletTransactionList {
total: number;
items: WalletTransactionListItem[];
}
export interface GetWalletTransactionListParams {
page: number;
pageSize: number;
agent_id: number;
transaction_type?: string;
create_time_start?: string;
create_time_end?: string;
}
// 系统配置相关接口
export interface SystemConfig {
commission_safe_mode: boolean; // 佣金安全防御模式
}
export interface UpdateSystemConfigReq {
commission_safe_mode: boolean; // 佣金安全防御模式true-冻结模式false-直接结算模式
}
export interface UpdateSystemConfigResp {
success: boolean; // 是否成功
}
}
/**
* 获取代理列表数据
* @param params 查询参数
*/
async function getAgentList(params: AgentApi.GetAgentListParams) {
return requestClient.get<AgentApi.AgentList>('/agent/list', {
params,
});
}
/**
* 获取代理推广链接列表
*/
async function getAgentLinkList(params: AgentApi.GetAgentLinkListParams) {
return requestClient.get<AgentApi.AgentLinkList>('/agent/agent-link/list', {
params,
});
}
/**
* 获取代理佣金列表
*/
async function getAgentCommissionList(
params: AgentApi.GetAgentCommissionListParams,
) {
return requestClient.get<AgentApi.AgentCommissionList>(
'/agent/agent-commission/list',
{
params,
},
);
}
/**
* 更新代理佣金状态
*/
async function updateAgentCommissionStatus(
id: number,
status: number,
) {
return requestClient.post<{ success: boolean }>(
'/agent/agent-commission/update-status',
{
id,
status,
},
);
}
/**
* 批量解冻代理佣金
*/
async function batchUnfreezeAgentCommission(
agentId?: number,
) {
return requestClient.post<{
success: boolean;
count: number;
amount: number;
}>('/agent/agent-commission/batch-unfreeze', {
agent_id: agentId,
});
}
/**
* 获取代理奖励列表
*/
async function getAgentRewardList(params: AgentApi.GetAgentRewardListParams) {
return requestClient.get<AgentApi.AgentRewardList>(
'/agent/agent-reward/list',
{
params,
},
);
}
/**
* 获取代理提现列表
*/
async function getAgentWithdrawalList(
params: AgentApi.GetAgentWithdrawalListParams,
) {
return requestClient.get<AgentApi.AgentWithdrawalList>(
'/agent/agent-withdrawal/list',
{
params,
},
);
}
/**
* 获取代理上级抽佣列表
*/
async function getAgentCommissionDeductionList(
params: AgentApi.GetAgentCommissionDeductionListParams,
) {
return requestClient.get<AgentApi.AgentCommissionDeductionList>(
'/agent/agent-commission-deduction/list',
{
params,
},
);
}
/**
* 获取平台抽佣列表
*/
async function getAgentPlatformDeductionList(
params: AgentApi.GetAgentPlatformDeductionListParams,
) {
return requestClient.get<AgentApi.AgentPlatformDeductionList>(
'/agent/agent-platform-deduction/list',
{
params,
},
);
}
/**
* 获取代理产品配置列表
*/
async function getAgentProductionConfigList(
params: AgentApi.GetAgentProductionConfigListParams,
) {
return requestClient.get<AgentApi.AgentProductionConfigList>(
'/agent/agent-production-config/list',
{
params,
},
);
}
/**
* 更新代理产品配置
*/
async function updateAgentProductionConfig(
params: AgentApi.UpdateAgentProductionConfigParams,
) {
return requestClient.post<AgentApi.UpdateAgentProductionConfigResp>(
'/agent/agent-production-config/update',
params,
);
}
/**
* 获取会员充值订单列表
*/
async function getMembershipRechargeOrderList(
params: AgentApi.GetMembershipRechargeOrderListParams,
) {
return requestClient.get<AgentApi.MembershipRechargeOrderList>(
'/agent/agent-membership-recharge-order/list',
{
params,
},
);
}
/**
* 获取代理会员配置列表
*/
async function getAgentMembershipConfigList(
params: AgentApi.GetAgentMembershipConfigListParams,
) {
return requestClient.get<{
items: AgentApi.AgentMembershipConfigListItem[];
total: number;
}>('/agent/agent-membership-config/list', { params });
}
/**
* 更新代理会员配置
*/
async function updateAgentMembershipConfig(
params: AgentApi.UpdateAgentMembershipConfigParams,
) {
return requestClient.post<{ success: boolean }>(
'/agent/agent-membership-config/update',
params,
);
}
/**
* 银行卡提现审核
*/
export interface ReviewBankCardWithdrawalParams {
withdrawal_id: number;
action: 1 | 2; // 1-确认, 2-拒绝
remark?: string;
}
async function reviewBankCardWithdrawal(
params: ReviewBankCardWithdrawalParams,
) {
return requestClient.post<{ success: boolean }>(
'/agent/agent-withdrawal/bank-card/review',
params,
);
}
/**
* 获取提现统计数据
*/
async function getWithdrawalStatistics() {
return requestClient.get<AgentApi.WithdrawalStatistics>(
'/agent/agent-withdrawal/statistics',
);
}
/**
* 获取代理订单统计数据
*/
async function getAgentOrderStatistics() {
return requestClient.get<AgentApi.AgentOrderStatistics>(
'/agent/agent-order/statistics',
);
}
/**
* 获取代理统计数据
*/
async function getAgentStatistics() {
return requestClient.get<AgentApi.AgentStatistics>(
'/agent/statistics',
);
}
/**
* 获取代理链接产品统计数据
*/
async function getAgentLinkProductStatistics() {
return requestClient.get<AgentApi.AgentLinkProductStatisticsResp>(
'/agent/agent-link/product-statistics',
);
}
/**
* 获取代理钱包信息
*/
async function getAgentWallet(agentId: number) {
return requestClient.get<AgentApi.AgentWalletInfo>(
`/agent/wallet/${agentId}`,
);
}
/**
* 修改代理钱包余额
*/
async function updateAgentWalletBalance(params: AgentApi.UpdateAgentWalletBalanceReq) {
return requestClient.post<AgentApi.UpdateAgentWalletBalanceResp>(
'/agent/wallet/update-balance',
params,
);
}
/**
* 获取系统配置
*/
async function getSystemConfig() {
return requestClient.get<AgentApi.SystemConfig>(
'/agent/system-config',
);
}
/**
* 更新系统配置
*/
async function updateSystemConfig(params: AgentApi.UpdateSystemConfigReq) {
return requestClient.post<AgentApi.UpdateSystemConfigResp>(
'/agent/system-config',
params,
);
}
/**
* 获取代理钱包流水列表
*/
async function getWalletTransactionList(
params: AgentApi.GetWalletTransactionListParams,
) {
return requestClient.get<AgentApi.WalletTransactionList>(
'/agent/wallet-transaction/list',
{ params },
);
}
export {
batchUnfreezeAgentCommission,
getAgentCommissionDeductionList,
getAgentCommissionList,
getAgentLinkList,
getAgentLinkProductStatistics,
getAgentList,
getAgentMembershipConfigList,
getAgentOrderStatistics,
getAgentPlatformDeductionList,
getAgentProductionConfigList,
getAgentRewardList,
getAgentStatistics,
getAgentWallet,
getAgentWithdrawalList,
getMembershipRechargeOrderList,
getWithdrawalStatistics,
reviewBankCardWithdrawal,
updateAgentCommissionStatus,
updateAgentMembershipConfig,
updateAgentProductionConfig,
updateAgentWalletBalance,
getSystemConfig,
updateSystemConfig,
getWalletTransactionList,
};

View File

@@ -0,0 +1 @@
export * from './agent';

View File

@@ -0,0 +1,52 @@
import { baseRequestClient, requestClient } from '#/api/request';
export namespace AuthApi {
/** 登录接口参数 */
export interface LoginParams {
password?: string;
username?: string;
}
/** 登录接口返回值 */
export interface LoginResult {
access_token: string;
}
export interface RefreshTokenResult {
data: string;
status: number;
}
}
/**
* 登录
*/
export async function loginApi(data: AuthApi.LoginParams) {
return requestClient.post<AuthApi.LoginResult>('/auth/login', data);
}
/**
* 刷新accessToken
*/
export async function refreshTokenApi() {
return baseRequestClient.post<AuthApi.RefreshTokenResult>('/auth/refresh', {
withCredentials: true,
});
}
/**
* 退出登录
*/
export async function logoutApi() {
return baseRequestClient.post('/auth/logout', {
withCredentials: true,
});
}
/**
* 获取用户权限码
*/
export async function getAccessCodesApi() {
// return requestClient.get<string[]>('/auth/codes');
return [];
}

View File

@@ -0,0 +1,3 @@
export * from './auth';
export * from './menu';
export * from './user';

View File

@@ -0,0 +1,10 @@
import type { RouteRecordStringComponent } from '@vben/types';
import { requestClient } from '#/api/request';
/**
* 获取用户所有菜单
*/
export async function getAllMenusApi() {
return requestClient.get<RouteRecordStringComponent[]>('/menu/all');
}

View File

@@ -0,0 +1,10 @@
import type { UserInfo } from '@vben/types';
import { requestClient } from '#/api/request';
/**
* 获取用户信息
*/
export async function getUserInfoApi() {
return requestClient.get<UserInfo>('/user/info');
}

View File

@@ -0,0 +1,37 @@
export * from './agent';
export * from './core';
export * from './notification';
export * from './order';
export * from './platform-user';
export * from './product-manage';
export * from './promotion';
export * from './system';
export interface ApiResponse<T = any> {
code: number;
data: T;
message: string;
}
export interface PageResult<T> {
items: T[];
total: number;
}
declare global {
interface Window {
$http: {
delete<T = any>(url: string, config?: any): Promise<ApiResponse<T>>;
get<T = any>(url: string, config?: any): Promise<ApiResponse<T>>;
post<T = any>(
url: string,
data?: any,
config?: any,
): Promise<ApiResponse<T>>;
put<T = any>(
url: string,
data?: any,
config?: any,
): Promise<ApiResponse<T>>;
};
}
}

View File

@@ -0,0 +1,105 @@
import type { Recordable } from '@vben/types';
import { requestClient } from '#/api/request';
export namespace NotificationApi {
export interface NotificationItem {
id: number;
title: string;
content?: string;
notification_page: string;
start_date: string;
start_time: string;
end_date: string;
end_time: string;
status: number;
create_time: string;
update_time: string;
}
export interface NotificationList {
total: number;
items: NotificationItem[];
}
export interface CreateNotificationRequest {
title: string;
content: string;
notification_page: string;
start_date: string;
start_time: string;
end_date: string;
end_time: string;
status: 0 | 1;
}
export interface CreateNotificationResponse {
id: number;
}
export interface UpdateNotificationRequest
extends Partial<CreateNotificationRequest> {
id: number;
}
export interface UpdateNotificationResponse {
success: boolean;
}
export interface DeleteNotificationResponse {
success: boolean;
}
}
/**
* 获取通知列表
*/
async function getNotificationList(params: Recordable<any>) {
return requestClient.get<NotificationApi.NotificationList>(
'/notification/list',
{
params,
},
);
}
/**
* 创建通知
*/
async function createNotification(
data: NotificationApi.CreateNotificationRequest,
) {
return requestClient.post<NotificationApi.CreateNotificationResponse>(
'/notification/create',
data,
);
}
/**
* 更新通知
*/
async function updateNotification(
id: number,
data: NotificationApi.UpdateNotificationRequest,
) {
return requestClient.put<NotificationApi.UpdateNotificationResponse>(
`/notification/update/${id}`,
data,
);
}
/**
* 删除通知
*/
async function deleteNotification(id: number) {
return requestClient.delete<NotificationApi.DeleteNotificationResponse>(
`/notification/delete/${id}`,
);
}
export {
createNotification,
deleteNotification,
getNotificationList,
updateNotification,
};

View File

@@ -0,0 +1 @@
export * from './order';

View File

@@ -0,0 +1,28 @@
import { requestClient } from '#/api/request';
export namespace OrderStatisticsApi {
// 订单统计数据项
export interface OrderStatisticsItem {
date: string; // 日期
count: number; // 订单数量
amount: number; // 订单金额
}
// 订单统计响应
export interface OrderStatisticsResponse {
items: OrderStatisticsItem[];
}
// 时间维度类型
export type TimeDimension = 'day' | 'month' | 'year' | 'all';
}
/**
* 获取订单统计数据
* @param dimension 时间维度day-日(当月1号到今天)month-月(今年1月到当月)year-年(过去5年)all-全部(按日统计)
*/
export function getOrderStatistics(dimension: OrderStatisticsApi.TimeDimension) {
return requestClient.get<OrderStatisticsApi.OrderStatisticsResponse>('/order/statistics', {
params: { dimension }
});
}

View File

@@ -0,0 +1,102 @@
import type { Recordable } from '@vben/types';
import { requestClient } from '#/api/request';
export namespace OrderApi {
export interface Order {
id: number;
order_no: string;
platform_order_id: string;
product_name: string;
payment_platform: 'alipay' | 'appleiap' | 'wechat';
payment_scene: 'app' | 'h5' | 'mini_program' | 'public_account';
amount: number;
sales_cost: number;
status: 'closed' | 'failed' | 'paid' | 'pending' | 'refunded';
query_state: 'cleaned' | 'failed' | 'pending' | 'processing' | 'success';
create_time: string;
pay_time: null | string;
refund_time: null | string;
is_promotion: 0 | 1;
}
export interface OrderList {
total: number;
items: Order[];
}
export interface RefundOrderRequest {
refund_amount: number;
refund_reason: string;
}
export interface RefundOrderResponse {
status: string;
refund_no: string;
amount: number;
}
// 退款统计数据
export interface RefundStatistics {
total_refund_amount: number;
today_refund_amount: number;
}
// 收入统计数据
export interface IncomeStatistics {
total_revenue_amount: number;
today_revenue_amount: number;
total_profit_amount: number;
today_profit_amount: number;
}
// 订单来源统计数据
export interface OrderSourceStatistics {
product_name: string;
order_count: number;
}
}
/**
* 获取订单列表数据
*/
async function getOrderList(params: Recordable<any>) {
return requestClient.get<OrderApi.OrderList>('/order/list', {
params,
});
}
/**
* 订单退款
* @param id 订单 ID
* @param data 退款请求数据
*/
async function refundOrder(id: number, data: OrderApi.RefundOrderRequest) {
return requestClient.post<OrderApi.RefundOrderResponse>(
`/order/refund/${id}`,
data,
);
}
/**
* 获取退款统计数据
*/
async function getRefundStatistics() {
return requestClient.get<OrderApi.RefundStatistics>('/order/refund-statistics');
}
/**
* 获取收入统计数据
*/
async function getIncomeStatistics() {
return requestClient.get<OrderApi.IncomeStatistics>('/order/revenue-statistics');
}
/**
* 获取订单来源统计数据
*/
async function getOrderSourceStatistics() {
return requestClient.get<{ items: OrderApi.OrderSourceStatistics[] }>('/order/source-statistics');
}
export { getOrderList, refundOrder, getRefundStatistics, getIncomeStatistics, getOrderSourceStatistics };

View File

@@ -0,0 +1,184 @@
import type { Recordable } from '@vben/types';
import { requestClient } from '#/api/request';
export namespace OrderQueryApi {
export interface QueryItem {
feature: Recordable<any>;
data: Recordable<any>;
}
export interface QueryDetail {
id: number;
order_id: number;
user_id: number;
product_name: string;
query_params: Recordable<any>;
query_data: QueryItem[];
create_time: string;
update_time: string;
query_state: string;
}
export interface GetQueryDetailRequest {
order_id: number;
}
export interface GetQueryDetailResponse {
id: number;
order_id: number;
user_id: number;
product_name: string;
query_params: Recordable<any>;
query_data: QueryItem[];
create_time: string;
update_time: string;
query_state: string;
}
// 清理日志相关接口定义
export interface GetQueryCleanupLogListRequest {
page?: number;
page_size?: number;
status?: number;
start_time?: string;
end_time?: string;
}
export interface QueryCleanupLogItem {
id: number;
cleanup_time: string;
cleanup_before: string;
status: number;
affected_rows: number;
error_msg: string;
remark: string;
create_time: string;
}
export interface GetQueryCleanupLogListResponse {
total: number;
items: QueryCleanupLogItem[];
}
// 清理详情相关接口定义
export interface GetQueryCleanupDetailListRequest {
log_id: number;
page?: number;
page_size?: number;
}
export interface QueryCleanupDetailItem {
id: number;
cleanup_log_id: number;
query_id: number;
order_id: number;
user_id: number;
product_id: number;
query_state: string;
create_time_old: string;
create_time: string;
}
export interface GetQueryCleanupDetailListResponse {
total: number;
items: QueryCleanupDetailItem[];
}
// 清理配置相关接口定义
export interface GetQueryCleanupConfigListRequest {
status?: number;
}
export interface QueryCleanupConfigItem {
id: number;
config_key: string;
config_value: string;
config_desc: string;
status: number;
create_time: string;
update_time: string;
}
export interface GetQueryCleanupConfigListResponse {
items: QueryCleanupConfigItem[];
}
export interface UpdateQueryCleanupConfigRequest {
id: number;
config_value: string;
status: number;
}
export interface UpdateQueryCleanupConfigResponse {
success: boolean;
}
}
/**
* 获取订单查询详情
* @param orderId 订单ID
*/
async function getOrderQueryDetail(orderId: number) {
return requestClient.get<OrderQueryApi.GetQueryDetailResponse>(
`/query/detail/${orderId}`,
);
}
/**
* 获取清理日志列表
*/
async function getQueryCleanupLogList(
params: OrderQueryApi.GetQueryCleanupLogListRequest,
) {
return requestClient.get<OrderQueryApi.GetQueryCleanupLogListResponse>(
'/query/cleanup/logs',
{ params },
);
}
/**
* 获取清理详情列表
* @param logId 清理日志ID
*/
async function getQueryCleanupDetailList(
logId: number,
params: Omit<OrderQueryApi.GetQueryCleanupDetailListRequest, 'log_id'>,
) {
return requestClient.get<OrderQueryApi.GetQueryCleanupDetailListResponse>(
`/query/cleanup/details/${logId}`,
{ params },
);
}
/**
* 获取清理配置列表
*/
async function getQueryCleanupConfigList(
params?: OrderQueryApi.GetQueryCleanupConfigListRequest,
) {
return requestClient.get<OrderQueryApi.GetQueryCleanupConfigListResponse>(
'/query/cleanup/configs',
{ params },
);
}
/**
* 更新清理配置
*/
async function updateQueryCleanupConfig(
data: OrderQueryApi.UpdateQueryCleanupConfigRequest,
) {
return requestClient.put<OrderQueryApi.UpdateQueryCleanupConfigResponse>(
'/query/cleanup/config',
data,
);
}
export {
getOrderQueryDetail,
getQueryCleanupConfigList,
getQueryCleanupDetailList,
getQueryCleanupLogList,
updateQueryCleanupConfig,
};

View File

@@ -0,0 +1,53 @@
import type { Recordable } from '@vben/types';
import { requestClient } from '#/api/request';
export namespace PlatformUserApi {
export interface PlatformUserItem {
id: number;
mobile: string;
nickname: string;
info: string;
inside: number;
create_time: string;
update_time: string;
}
export interface PlatformUserList {
total: number;
items: PlatformUserItem[];
}
export interface UpdatePlatformUserRequest {
mobile: string;
nickname: string;
info: string;
inside: number;
}
}
/**
* 获取平台用户列表数据
*/
async function getPlatformUserList(params: Recordable<any>) {
return requestClient.get<PlatformUserApi.PlatformUserList>(
'/platform_user/list',
{
params,
},
);
}
/**
* 更新平台用户
* @param id 用户 ID
* @param data 用户数据
*/
async function updatePlatformUser(
id: number,
data: PlatformUserApi.UpdatePlatformUserRequest,
) {
return requestClient.put(`/platform_user/update/${id}`, data);
}
export { getPlatformUserList, updatePlatformUser };

View File

@@ -0,0 +1,140 @@
import type { Recordable } from '@vben/types';
import { requestClient } from '#/api/request';
export namespace FeatureApi {
export interface FeatureItem {
id: number;
api_id: string;
name: string;
cost_price: number;
create_time: string;
update_time: string;
}
export interface FeatureList {
total: number;
items: FeatureItem[];
}
export interface CreateFeatureRequest {
api_id: string;
name: string;
cost_price: number;
}
export interface UpdateFeatureRequest {
api_id?: string;
name?: string;
cost_price?: number;
}
export interface FeatureExampleItem {
id: number;
feature_id: number;
api_id: string;
data: string;
create_time: string;
update_time: string;
}
export interface ConfigFeatureExampleRequest {
feature_id: number;
data: string;
}
export interface ConfigFeatureExampleResponse {
success: boolean;
}
export interface GetFeatureExampleRequest {
feature_id: number;
}
export interface GetFeatureExampleResponse {
id: number;
feature_id: number;
api_id: string;
data: string;
create_time: string;
update_time: string;
}
}
/**
* 获取模块列表数据
*/
async function getFeatureList(params: Recordable<any>) {
return requestClient.get<FeatureApi.FeatureList>('/feature/list', {
params,
});
}
/**
* 获取模块详情
* @param id 模块ID
*/
async function getFeatureDetail(id: number) {
return requestClient.get<FeatureApi.FeatureItem>(`/feature/detail/${id}`);
}
/**
* 创建模块
* @param data 模块数据
*/
async function createFeature(data: FeatureApi.CreateFeatureRequest) {
return requestClient.post<{ id: number }>('/feature/create', data);
}
/**
* 更新模块
* @param id 模块ID
* @param data 模块数据
*/
async function updateFeature(
id: number,
data: FeatureApi.UpdateFeatureRequest,
) {
return requestClient.put<{ success: boolean }>(`/feature/update/${id}`, data);
}
/**
* 删除模块
* @param id 模块ID
*/
async function deleteFeature(id: number) {
return requestClient.delete<{ success: boolean }>(`/feature/delete/${id}`);
}
/**
* 配置功能示例数据
* @param data 示例数据配置
*/
async function configFeatureExample(
data: FeatureApi.ConfigFeatureExampleRequest,
) {
return requestClient.post<FeatureApi.ConfigFeatureExampleResponse>(
'/feature/config-example',
data,
);
}
/**
* 获取功能示例数据
* @param featureId 功能ID
*/
async function getFeatureExample(featureId: number) {
return requestClient.get<FeatureApi.GetFeatureExampleResponse>(
`/feature/example/${featureId}`,
);
}
export {
configFeatureExample,
createFeature,
deleteFeature,
getFeatureDetail,
getFeatureExample,
getFeatureList,
updateFeature,
};

View File

@@ -0,0 +1,2 @@
export * from './feature';
export * from './product';

View File

@@ -0,0 +1,148 @@
import type { Recordable } from '@vben/types';
import { requestClient } from '#/api/request';
export namespace ProductApi {
export interface ProductItem {
id: number;
product_name: string;
product_en: string;
description: string;
notes: string;
cost_price: number;
sell_price: number;
create_time: string;
update_time: string;
}
export interface ProductList {
total: number;
items: ProductItem[];
}
export interface CreateProductRequest {
product_name: string;
product_en: string;
description: string;
notes?: string;
cost_price: number;
sell_price: number;
}
export interface UpdateProductRequest {
product_name?: string;
product_en?: string;
description?: string;
notes?: string;
cost_price?: number;
sell_price?: number;
}
export interface ProductFeatureListItem {
id: number;
product_id: number;
feature_id: number;
api_id: string;
name: string;
sort: number;
enable: number;
is_important: number;
create_time: string;
update_time: string;
}
export interface ProductFeatureItem {
feature_id: number;
sort: number;
enable: number;
is_important: number;
}
export interface UpdateProductFeaturesRequest {
features: ProductFeatureItem[];
}
export interface UpdateProductFeaturesResponse {
success: boolean;
}
}
/**
* 获取产品列表数据
*/
async function getProductList(params: Recordable<any>) {
return requestClient.get<ProductApi.ProductList>('/product/list', {
params,
});
}
/**
* 获取产品详情
* @param id 产品ID
*/
async function getProductDetail(id: number) {
return requestClient.get<ProductApi.ProductItem>(`/product/detail/${id}`);
}
/**
* 创建产品
* @param data 产品数据
*/
async function createProduct(data: ProductApi.CreateProductRequest) {
return requestClient.post<{ id: number }>('/product/create', data);
}
/**
* 更新产品
* @param id 产品ID
* @param data 产品数据
*/
async function updateProduct(
id: number,
data: ProductApi.UpdateProductRequest,
) {
return requestClient.put<{ success: boolean }>(`/product/update/${id}`, data);
}
/**
* 删除产品
* @param id 产品ID
*/
async function deleteProduct(id: number) {
return requestClient.delete<{ success: boolean }>(`/product/delete/${id}`);
}
/**
* 获取产品功能列表
* @param productId 产品ID
*/
async function getProductFeatureList(productId: number) {
return requestClient.get<ProductApi.ProductFeatureListItem[]>(
`/product/feature/list/${productId}`,
);
}
/**
* 更新产品功能关联
* @param productId 产品ID
* @param data 功能列表数据
*/
async function updateProductFeatures(
productId: number,
data: ProductApi.UpdateProductFeaturesRequest,
) {
return requestClient.put<{ success: boolean }>(
`/product/feature/update/${productId}`,
data,
);
}
export {
createProduct,
deleteProduct,
getProductDetail,
getProductFeatureList,
getProductList,
updateProduct,
updateProductFeatures,
};

View File

@@ -0,0 +1,45 @@
import { requestClient } from '#/api/request';
export namespace PromotionAnalyticsApi {
export interface OverviewData {
today_click_count: number;
today_pay_count: number;
today_pay_amount: number;
total_click_count: number;
total_pay_count: number;
total_pay_amount: number;
}
export interface TrendData {
id: number;
link_id: number;
pay_amount: number;
click_count: number;
pay_count: number;
stats_date: string;
}
}
/**
* 获取推广数据概览
*/
async function statsTotal() {
return requestClient.get<PromotionAnalyticsApi.OverviewData>(
'/promotion/stats/total',
);
}
/**
* 获取推广数据趋势
* @param params 日期范围参数
*/
async function statsHistory(params: { end_date: string; start_date: string }) {
return requestClient.get<PromotionAnalyticsApi.TrendData[]>(
'/promotion/stats/history',
{
params,
},
);
}
export { statsHistory, statsTotal };

View File

@@ -0,0 +1,2 @@
export * from './analytics';
export * from './link';

View File

@@ -0,0 +1,67 @@
import type { Recordable } from '@vben/types';
import { requestClient } from '#/api/request';
export namespace PromotionLinkApi {
export interface PromotionLinkItem {
id: number;
name: string;
url: string;
create_time: string;
}
export interface PromotionLink {
total: number;
items: PromotionLinkItem[];
}
}
/**
* 获取推广链接列表数据
*/
async function getPromotionLinkList(params: Recordable<any>) {
return requestClient.get<PromotionLinkApi.PromotionLink>(
'/promotion/link/list',
{
params,
},
);
}
/**
* 创建推广链接
* @param data 推广链接数据
*/
async function createPromotionLink(
data: Omit<PromotionLinkApi.PromotionLinkItem, 'id'>,
) {
return requestClient.post('/promotion/link/create', data);
}
/**
* 更新推广链接
*
* @param id 推广链接 ID
* @param data 推广链接数据
*/
async function updatePromotionLink(
id: string,
data: Omit<PromotionLinkApi.PromotionLinkItem, 'id'>,
) {
return requestClient.put(`/promotion/link/update/${id}`, data);
}
/**
* 删除推广链接
* @param id 推广链接 ID
*/
async function deletePromotionLink(id: string) {
return requestClient.delete(`/promotion/link/delete/${id}`);
}
export {
createPromotionLink,
deletePromotionLink,
getPromotionLinkList,
updatePromotionLink,
};

View File

@@ -0,0 +1,113 @@
/**
* 该文件可自行根据业务逻辑进行调整
*/
import type { RequestClientOptions } from '@vben/request';
import { useAppConfig } from '@vben/hooks';
import { preferences } from '@vben/preferences';
import {
authenticateResponseInterceptor,
defaultResponseInterceptor,
errorMessageResponseInterceptor,
RequestClient,
} from '@vben/request';
import { useAccessStore } from '@vben/stores';
import { message } from 'ant-design-vue';
import { useAuthStore } from '#/store';
import { refreshTokenApi } from './core';
const { apiURL } = useAppConfig(import.meta.env, import.meta.env.PROD);
function createRequestClient(baseURL: string, options?: RequestClientOptions) {
const client = new RequestClient({
...options,
baseURL,
});
/**
* 重新认证逻辑
*/
async function doReAuthenticate() {
console.warn('Access token or refresh token is invalid or expired. ');
const accessStore = useAccessStore();
const authStore = useAuthStore();
accessStore.setAccessToken(null);
if (
preferences.app.loginExpiredMode === 'modal' &&
accessStore.isAccessChecked
) {
accessStore.setLoginExpired(true);
} else {
await authStore.logout();
}
}
/**
* 刷新token逻辑
*/
async function doRefreshToken() {
const accessStore = useAccessStore();
const resp = await refreshTokenApi();
const newToken = resp.data;
accessStore.setAccessToken(newToken);
return newToken;
}
function formatToken(token: null | string) {
return token ? `Bearer ${token}` : null;
}
// 请求头处理
client.addRequestInterceptor({
fulfilled: async (config) => {
const accessStore = useAccessStore();
config.headers.Authorization = formatToken(accessStore.accessToken);
config.headers['Accept-Language'] = preferences.app.locale;
return config;
},
});
// 处理返回的响应数据格式
client.addResponseInterceptor(
defaultResponseInterceptor({
codeField: 'code',
dataField: 'data',
successCode: 200,
}),
);
// token过期的处理
client.addResponseInterceptor(
authenticateResponseInterceptor({
client,
doReAuthenticate,
doRefreshToken,
enableRefreshToken: preferences.app.enableRefreshToken,
formatToken,
}),
);
// 通用的错误处理,如果没有进入上面的错误处理逻辑,就会进入这里
client.addResponseInterceptor(
errorMessageResponseInterceptor((msg: string, error) => {
// 这里可以根据业务进行定制,你可以拿到 error 内的信息进行定制化处理,根据不同的 code 做不同的提示,而不是直接使用 message.error 提示 msg
// 当前mock接口返回的错误字段是 error 或者 message
const responseData = error?.response?.data ?? {};
const errorMessage = responseData?.error ?? responseData?.msg ?? '';
// 如果没有错误信息,则会根据状态码进行提示
message.error(errorMessage || msg);
}),
);
return client;
}
export const requestClient = createRequestClient(apiURL, {
responseReturn: 'data',
});
export const baseRequestClient = new RequestClient({ baseURL: apiURL });

View File

@@ -0,0 +1,165 @@
import type { Recordable } from '@vben/types';
import { requestClient } from '#/api/request';
export namespace SystemApiApi {
export interface SystemApiItem {
id: number;
role_id?: number;
api_id?: number;
api_name: string;
api_code: string;
method: string;
url: string;
status: 0 | 1;
description?: string;
create_time?: string;
update_time?: string;
}
export interface SystemApi {
list: SystemApiItem[];
total: number;
}
export interface SystemApiAllResponse {
items: SystemApiItem[];
}
export interface SystemRoleApiResponse {
items: null | SystemApiItem[];
}
export interface RoleApiItem {
id: number;
role_id: number;
api_id: number;
api_name: string;
api_code: string;
method: string;
url: string;
status: 0 | 1;
description?: string;
}
export interface RoleApi {
list: RoleApiItem[];
}
}
/**
* 获取API列表数据
*/
async function getApiList(params: Recordable<any>) {
return requestClient.get<SystemApiApi.SystemApi>('/api/list', {
params,
});
}
/**
* 获取API详情
* @param id API ID
*/
async function getApiDetail(id: number) {
return requestClient.get<SystemApiApi.SystemApiItem>(`/api/detail/${id}`);
}
/**
* 创建API
* @param data API数据
*/
async function createApi(
data: Omit<SystemApiApi.SystemApiItem, 'create_time' | 'id' | 'update_time'>,
) {
return requestClient.post('/api/create', data);
}
/**
* 更新API
* @param id API ID
* @param data API数据
*/
async function updateApi(
id: number,
data: Omit<SystemApiApi.SystemApiItem, 'create_time' | 'id' | 'update_time'>,
) {
return requestClient.put(`/api/update/${id}`, data);
}
/**
* 删除API
* @param id API ID
*/
async function deleteApi(id: number) {
return requestClient.delete(`/api/delete/${id}`);
}
/**
* 批量更新API状态
* @param data.ids API ID数组
* @param data.status 状态值
*/
async function batchUpdateApiStatus(data: { ids: number[]; status: 0 | 1 }) {
return requestClient.put('/api/batch-update-status', data);
}
/**
* 获取角色API权限列表
* @param roleId 角色ID
*/
async function getRoleApiList(roleId: number) {
return requestClient.get<SystemApiApi.SystemRoleApiResponse>(
`/role/${roleId}/api/list`,
);
}
/**
* 分配角色API权限
* @param data.api_ids API ID数组
* @param data.role_id 角色ID
*/
async function assignRoleApi(data: { api_ids: number[]; role_id: number }) {
return requestClient.post('/role/api/assign', data);
}
/**
* 移除角色API权限
* @param data.api_ids API ID数组
* @param data.role_id 角色ID
*/
async function removeRoleApi(data: { api_ids: number[]; role_id: number }) {
return requestClient.post('/role/api/remove', data);
}
/**
* 更新角色API权限全量更新
* @param data.api_ids API ID数组
* @param data.role_id 角色ID
*/
async function updateRoleApi(data: { api_ids: number[]; role_id: number }) {
return requestClient.put('/role/api/update', data);
}
/**
* 获取所有API列表用于权限分配
* @param params.status 状态过滤
*/
async function getAllApiList(params?: { status?: number }) {
return requestClient.get<SystemApiApi.SystemApiAllResponse>('/api/all', {
params,
});
}
export {
assignRoleApi,
batchUpdateApiStatus,
createApi,
deleteApi,
getAllApiList,
getApiDetail,
getApiList,
getRoleApiList,
removeRoleApi,
updateApi,
updateRoleApi,
};

View File

@@ -0,0 +1,54 @@
import { requestClient } from '#/api/request';
export namespace SystemDeptApi {
export interface SystemDept {
[key: string]: any;
children?: SystemDept[];
id: string;
name: string;
remark?: string;
status: 0 | 1;
}
}
/**
* 获取部门列表数据
*/
async function getDeptList() {
return requestClient.get<Array<SystemDeptApi.SystemDept>>(
'/system/dept/list',
);
}
/**
* 创建部门
* @param data 部门数据
*/
async function createDept(
data: Omit<SystemDeptApi.SystemDept, 'children' | 'id'>,
) {
return requestClient.post('/system/dept', data);
}
/**
* 更新部门
*
* @param id 部门 ID
* @param data 部门数据
*/
async function updateDept(
id: string,
data: Omit<SystemDeptApi.SystemDept, 'children' | 'id'>,
) {
return requestClient.put(`/system/dept/${id}`, data);
}
/**
* 删除部门
* @param id 部门 ID
*/
async function deleteDept(id: string) {
return requestClient.delete(`/system/dept/${id}`);
}
export { createDept, deleteDept, getDeptList, updateDept };

View File

@@ -0,0 +1,5 @@
export * from './api';
export * from './dept';
export * from './menu';
export * from './role';
export * from './user';

View File

@@ -0,0 +1,156 @@
import type { Recordable } from '@vben/types';
import { requestClient } from '#/api/request';
export namespace SystemMenuApi {
/** 徽标颜色集合 */
export const BadgeVariants = [
'default',
'destructive',
'primary',
'success',
'warning',
] as const;
/** 徽标类型集合 */
export const BadgeTypes = ['dot', 'normal'] as const;
/** 菜单类型集合 */
export const MenuTypes = [
'catalog',
'menu',
'embedded',
'link',
'button',
] as const;
/** 系统菜单 */
export interface SystemMenu {
[key: string]: any;
/** 后端权限标识 */
authCode: string;
/** 子级 */
children?: SystemMenu[];
/** 组件 */
component?: string;
/** 菜单ID */
id: string;
/** 菜单元数据 */
meta?: {
/** 激活时显示的图标 */
activeIcon?: string;
/** 作为路由时需要激活的菜单的Path */
activePath?: string;
/** 固定在标签栏 */
affixTab?: boolean;
/** 在标签栏固定的顺序 */
affixTabOrder?: number;
/** 徽标内容(当徽标类型为normal时有效) */
badge?: string;
/** 徽标类型 */
badgeType?: (typeof BadgeTypes)[number];
/** 徽标颜色 */
badgeVariants?: (typeof BadgeVariants)[number];
/** 在菜单中隐藏下级 */
hideChildrenInMenu?: boolean;
/** 在面包屑中隐藏 */
hideInBreadcrumb?: boolean;
/** 在菜单中隐藏 */
hideInMenu?: boolean;
/** 在标签栏中隐藏 */
hideInTab?: boolean;
/** 菜单图标 */
icon?: string;
/** 内嵌Iframe的URL */
iframeSrc?: string;
/** 是否缓存页面 */
keepAlive?: boolean;
/** 外链页面的URL */
link?: string;
/** 同一个路由最大打开的标签数 */
maxNumOfOpenTab?: number;
/** 无需基础布局 */
noBasicLayout?: boolean;
/** 是否在新窗口打开 */
openInNewWindow?: boolean;
/** 菜单排序 */
order?: number;
/** 额外的路由参数 */
query?: Recordable<any>;
/** 菜单标题 */
title?: string;
};
/** 菜单名称 */
name: string;
/** 路由路径 */
path: string;
/** 父级ID */
pid: string;
/** 重定向 */
redirect?: string;
/** 菜单类型 */
type: (typeof MenuTypes)[number];
}
}
/**
* 获取菜单数据列表
*/
async function getMenuList() {
return requestClient.get<Array<SystemMenuApi.SystemMenu>>('/menu/list');
}
async function isMenuNameExists(
name: string,
id?: SystemMenuApi.SystemMenu['id'],
) {
return requestClient.get<boolean>('/menu/name-exists', {
params: { id, name },
});
}
async function isMenuPathExists(
path: string,
id?: SystemMenuApi.SystemMenu['id'],
) {
return requestClient.get<boolean>('/menu/path-exists', {
params: { id, path },
});
}
/**
* 创建菜单
* @param data 菜单数据
*/
async function createMenu(
data: Omit<SystemMenuApi.SystemMenu, 'children' | 'id'>,
) {
return requestClient.post('/menu/create', data);
}
/**
* 更新菜单
*
* @param id 菜单 ID
* @param data 菜单数据
*/
async function updateMenu(
id: string,
data: Omit<SystemMenuApi.SystemMenu, 'children' | 'id'>,
) {
return requestClient.put(`/menu/update/${id}`, data);
}
/**
* 删除菜单
* @param id 菜单 ID
*/
async function deleteMenu(id: string) {
return requestClient.delete(`/menu/delete/${id}`);
}
export {
createMenu,
deleteMenu,
getMenuList,
isMenuNameExists,
isMenuPathExists,
updateMenu,
};

View File

@@ -0,0 +1,61 @@
import type { Recordable } from '@vben/types';
import { requestClient } from '#/api/request';
export namespace SystemRoleApi {
export interface SystemRoleItem {
id: number;
role_name: string;
role_code: string;
description?: string;
status: 0 | 1;
sort: number;
create_time: string;
menu_ids: number[];
}
export interface SystemRole {
total: number;
items: SystemRoleItem[];
}
}
/**
* 获取角色列表数据
*/
async function getRoleList(params: Recordable<any>) {
return requestClient.get<SystemRoleApi.SystemRole>('/role/list', {
params,
});
}
/**
* 创建角色
* @param data 角色数据
*/
async function createRole(data: Omit<SystemRoleApi.SystemRoleItem, 'id'>) {
return requestClient.post('/role/create', data);
}
/**
* 更新角色
*
* @param id 角色 ID
* @param data 角色数据
*/
async function updateRole(
id: number,
data: Omit<SystemRoleApi.SystemRoleItem, 'id'>,
) {
return requestClient.put(`/role/update/${id}`, data);
}
/**
* 删除角色
* @param id 角色 ID
*/
async function deleteRole(id: string) {
return requestClient.delete(`/role/delete/${id}`);
}
export { createRole, deleteRole, getRoleList, updateRole };

View File

@@ -0,0 +1,64 @@
import type { Recordable } from '@vben/types';
import { requestClient } from '#/api/request';
export namespace SystemUserApi {
export interface SystemUser {
[key: string]: any;
id: string;
name: string;
permissions: string[];
remark?: string;
status: 0 | 1;
}
}
/**
* 获取角色列表数据
*/
async function getUserList(params: Recordable<any>) {
return requestClient.get<Array<SystemUserApi.SystemUser>>('/user/list', {
params,
});
}
/**
* 创建角色
* @param data 角色数据
*/
async function createUser(data: Omit<SystemUserApi.SystemUser, 'id'>) {
return requestClient.post('/user/create', data);
}
/**
* 更新角色
*
* @param id 角色 ID
* @param data 角色数据
*/
async function updateUser(
id: string,
data: Omit<SystemUserApi.SystemUser, 'id'>,
) {
return requestClient.put(`/user/update/${id}`, data);
}
/**
* 删除角色
* @param id 角色 ID
*/
async function deleteUser(id: string) {
return requestClient.delete(`/user/delete/${id}`);
}
/**
* 重置用户密码
* @param id 用户 ID
* @param data 新密码数据
* @param data.password 新密码
*/
async function resetPassword(id: string, data: { password: string }) {
return requestClient.post(`/reset-password/${id}`, data);
}
export { createUser, deleteUser, getUserList, resetPassword, updateUser };