init project

This commit is contained in:
caiyuchao
2025-05-16 14:52:30 +08:00
commit 1d6f7521c4
1496 changed files with 134863 additions and 0 deletions

View File

@@ -0,0 +1,157 @@
import type { AuthPermissionInfo } from '@vben/types';
import { baseRequestClient, requestClient } from '#/api/request';
export namespace AuthApi {
/** 登录接口参数 */
export interface LoginParams {
password?: string;
username?: string;
captchaVerification?: string;
// 绑定社交登录时,需要传递如下参数
socialType?: number;
socialCode?: string;
socialState?: string;
}
/** 登录接口返回值 */
export interface LoginResult {
accessToken: string;
refreshToken: string;
userId: number;
expiresTime: number;
}
/** 租户信息返回值 */
export interface TenantResult {
id: number;
name: string;
}
/** 手机验证码获取接口参数 */
export interface SmsCodeParams {
mobile: string;
scene: number;
}
/** 手机验证码登录接口参数 */
export interface SmsLoginParams {
mobile: string;
code: string;
}
/** 注册接口参数 */
export interface RegisterParams {
username: string;
password: string;
captchaVerification: string;
}
/** 重置密码接口参数 */
export interface ResetPasswordParams {
password: string;
mobile: string;
code: string;
}
/** 社交快捷登录接口参数 */
export interface SocialLoginParams {
type: number;
code: string;
state: string;
}
}
/** 登录 */
export async function loginApi(data: AuthApi.LoginParams) {
return requestClient.post<AuthApi.LoginResult>('/system/auth/login', data);
}
/** 刷新 accessToken */
export async function refreshTokenApi(refreshToken: string) {
return baseRequestClient.post(
`/system/auth/refresh-token?refreshToken=${refreshToken}`,
);
}
/** 退出登录 */
export async function logoutApi(accessToken: string) {
return baseRequestClient.post(
'/system/auth/logout',
{},
{
headers: {
Authorization: `Bearer ${accessToken}`,
},
},
);
}
/** 获取权限信息 */
export async function getAuthPermissionInfoApi() {
return requestClient.get<AuthPermissionInfo>(
'/system/auth/get-permission-info',
);
}
/** 获取租户列表 */
export async function getTenantSimpleList() {
return requestClient.get<AuthApi.TenantResult[]>(
`/system/tenant/simple-list`,
);
}
/** 使用租户域名,获得租户信息 */
export async function getTenantByWebsite(website: string) {
return requestClient.get<AuthApi.TenantResult>(
`/system/tenant/get-by-website?website=${website}`,
);
}
/** 获取验证码 */
export async function getCaptcha(data: any) {
return baseRequestClient.post('/system/captcha/get', data);
}
/** 校验验证码 */
export async function checkCaptcha(data: any) {
return baseRequestClient.post('/system/captcha/check', data);
}
/** 获取登录验证码 */
export async function sendSmsCode(data: AuthApi.SmsCodeParams) {
return requestClient.post('/system/auth/send-sms-code', data);
}
/** 短信验证码登录 */
export async function smsLogin(data: AuthApi.SmsLoginParams) {
return requestClient.post('/system/auth/sms-login', data);
}
/** 注册 */
export async function register(data: AuthApi.RegisterParams) {
return requestClient.post('/system/auth/register', data);
}
/** 通过短信重置密码 */
export async function smsResetPassword(data: AuthApi.ResetPasswordParams) {
return requestClient.post('/system/auth/reset-password', data);
}
/** 社交授权的跳转 */
export async function socialAuthRedirect(type: number, redirectUri: string) {
return requestClient.get('/system/auth/social-auth-redirect', {
params: {
type,
redirectUri,
},
});
}
/** 社交快捷登录 */
export async function socialLogin(data: AuthApi.SocialLoginParams) {
return requestClient.post<AuthApi.LoginResult>(
'/system/auth/social-login',
data,
);
}

View File

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

View File

@@ -0,0 +1,118 @@
import type { PageParam, PageResult } from '@vben/request';
import type { CrmPermissionApi } from '#/api/crm/permission';
import { requestClient } from '#/api/request';
export namespace CrmBusinessApi {
/** 商机产品信息 */
export interface BusinessProduct {
id: number;
productId: number;
productName: string;
productNo: string;
productUnit: number;
productPrice: number;
businessPrice: number;
count: number;
totalPrice: number;
}
/** 商机信息 */
export interface Business {
id: number;
name: string;
customerId: number;
customerName?: string;
followUpStatus: boolean;
contactLastTime: Date;
contactNextTime: Date;
ownerUserId: number;
ownerUserName?: string; // 负责人的用户名称
ownerUserDept?: string; // 负责人的部门名称
statusTypeId: number;
statusTypeName?: string;
statusId: number;
statusName?: string;
endStatus: number;
endRemark: string;
dealTime: Date;
totalProductPrice: number;
totalPrice: number;
discountPercent: number;
remark: string;
creator: string; // 创建人
creatorName?: string; // 创建人名称
createTime: Date; // 创建时间
updateTime: Date; // 更新时间
products?: BusinessProduct[];
}
}
/** 查询商机列表 */
export function getBusinessPage(params: PageParam) {
return requestClient.get<PageResult<CrmBusinessApi.Business>>(
'/crm/business/page',
{ params },
);
}
/** 查询商机列表,基于指定客户 */
export function getBusinessPageByCustomer(params: PageParam) {
return requestClient.get<PageResult<CrmBusinessApi.Business>>(
'/crm/business/page-by-customer',
{ params },
);
}
/** 查询商机详情 */
export function getBusiness(id: number) {
return requestClient.get<CrmBusinessApi.Business>(
`/crm/business/get?id=${id}`,
);
}
/** 获得商机列表(精简) */
export function getSimpleBusinessList() {
return requestClient.get<CrmBusinessApi.Business[]>(
'/crm/business/simple-all-list',
);
}
/** 新增商机 */
export function createBusiness(data: CrmBusinessApi.Business) {
return requestClient.post('/crm/business/create', data);
}
/** 修改商机 */
export function updateBusiness(data: CrmBusinessApi.Business) {
return requestClient.put('/crm/business/update', data);
}
/** 修改商机状态 */
export function updateBusinessStatus(data: CrmBusinessApi.Business) {
return requestClient.put('/crm/business/update-status', data);
}
/** 删除商机 */
export function deleteBusiness(id: number) {
return requestClient.delete(`/crm/business/delete?id=${id}`);
}
/** 导出商机 */
export function exportBusiness(params: any) {
return requestClient.download('/crm/business/export-excel', params);
}
/** 联系人关联商机列表 */
export function getBusinessPageByContact(params: PageParam) {
return requestClient.get<PageResult<CrmBusinessApi.Business>>(
'/crm/business/page-by-contact',
{ params },
);
}
/** 商机转移 */
export function transferBusiness(data: CrmPermissionApi.TransferReq) {
return requestClient.put('/crm/business/transfer', data);
}

View File

@@ -0,0 +1,91 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace CrmBusinessStatusApi {
/** 商机状态信息 */
export interface BusinessStatus {
id: number;
name: string;
percent: number;
}
/** 商机状态组信息 */
export interface BusinessStatusType {
id: number;
name: string;
deptIds: number[];
statuses?: BusinessStatus[];
}
/** 默认商机状态 */
export const DEFAULT_STATUSES = [
{
endStatus: 1,
key: '结束',
name: '赢单',
percent: 100,
},
{
endStatus: 2,
key: '结束',
name: '输单',
percent: 0,
},
{
endStatus: 3,
key: '结束',
name: '无效',
percent: 0,
},
] as const;
}
/** 查询商机状态组列表 */
export function getBusinessStatusPage(params: PageParam) {
return requestClient.get<PageResult<CrmBusinessStatusApi.BusinessStatusType>>(
'/crm/business-status/page',
{ params },
);
}
/** 新增商机状态组 */
export function createBusinessStatus(
data: CrmBusinessStatusApi.BusinessStatusType,
) {
return requestClient.post('/crm/business-status/create', data);
}
/** 修改商机状态组 */
export function updateBusinessStatus(
data: CrmBusinessStatusApi.BusinessStatusType,
) {
return requestClient.put('/crm/business-status/update', data);
}
/** 查询商机状态类型详情 */
export function getBusinessStatus(id: number) {
return requestClient.get<CrmBusinessStatusApi.BusinessStatusType>(
`/crm/business-status/get?id=${id}`,
);
}
/** 删除商机状态 */
export function deleteBusinessStatus(id: number) {
return requestClient.delete(`/crm/business-status/delete?id=${id}`);
}
/** 获得商机状态组列表 */
export function getBusinessStatusTypeSimpleList() {
return requestClient.get<CrmBusinessStatusApi.BusinessStatusType[]>(
'/crm/business-status/type-simple-list',
);
}
/** 获得商机阶段列表 */
export function getBusinessStatusSimpleList(typeId: number) {
return requestClient.get<CrmBusinessStatusApi.BusinessStatus[]>(
'/crm/business-status/status-simple-list',
{ params: { typeId } },
);
}

View File

@@ -0,0 +1,86 @@
import type { PageParam, PageResult } from '@vben/request';
import type { CrmPermissionApi } from '#/api/crm/permission';
import { requestClient } from '#/api/request';
export namespace CrmClueApi {
/** 线索信息 */
export interface Clue {
id: number; // 编号
name: string; // 线索名称
followUpStatus: boolean; // 跟进状态
contactLastTime: Date; // 最后跟进时间
contactLastContent: string; // 最后跟进内容
contactNextTime: Date; // 下次联系时间
ownerUserId: number; // 负责人的用户编号
ownerUserName?: string; // 负责人的用户名称
ownerUserDept?: string; // 负责人的部门名称
transformStatus: boolean; // 转化状态
customerId: number; // 客户编号
customerName?: string; // 客户名称
mobile: string; // 手机号
telephone: string; // 电话
qq: string; // QQ
wechat: string; // wechat
email: string; // email
areaId: number; // 所在地
areaName?: string; // 所在地名称
detailAddress: string; // 详细地址
industryId: number; // 所属行业
level: number; // 客户等级
source: number; // 客户来源
remark: string; // 备注
creator: string; // 创建人
creatorName?: string; // 创建人名称
createTime: Date; // 创建时间
updateTime: Date; // 更新时间
}
}
/** 查询线索列表 */
export function getCluePage(params: PageParam) {
return requestClient.get<PageResult<CrmClueApi.Clue>>('/crm/clue/page', {
params,
});
}
/** 查询线索详情 */
export function getClue(id: number) {
return requestClient.get<CrmClueApi.Clue>(`/crm/clue/get?id=${id}`);
}
/** 新增线索 */
export function createClue(data: CrmClueApi.Clue) {
return requestClient.post('/crm/clue/create', data);
}
/** 修改线索 */
export function updateClue(data: CrmClueApi.Clue) {
return requestClient.put('/crm/clue/update', data);
}
/** 删除线索 */
export function deleteClue(id: number) {
return requestClient.delete(`/crm/clue/delete?id=${id}`);
}
/** 导出线索 */
export function exportClue(params: any) {
return requestClient.download('/crm/clue/export-excel', params);
}
/** 线索转移 */
export function transferClue(data: CrmPermissionApi.TransferReq) {
return requestClient.put('/crm/clue/transfer', data);
}
/** 线索转化为客户 */
export function transformClue(id: number) {
return requestClient.put('/crm/clue/transform', { id });
}
/** 获得分配给我的、待跟进的线索数量 */
export function getFollowClueCount() {
return requestClient.get<number>('/crm/clue/follow-count');
}

View File

@@ -0,0 +1,140 @@
import type { PageParam, PageResult } from '@vben/request';
import type { CrmPermissionApi } from '#/api/crm/permission';
import { requestClient } from '#/api/request';
export namespace CrmContactApi {
/** 联系人信息 */
export interface Contact {
id: number; // 编号
name: string; // 联系人名称
customerId: number; // 客户编号
customerName?: string; // 客户名称
contactLastTime: Date; // 最后跟进时间
contactLastContent: string; // 最后跟进内容
contactNextTime: Date; // 下次联系时间
ownerUserId: number; // 负责人的用户编号
ownerUserName?: string; // 负责人的用户名称
ownerUserDept?: string; // 负责人的部门名称
mobile: string; // 手机号
telephone: string; // 电话
qq: string; // QQ
wechat: string; // wechat
email: string; // email
areaId: number; // 所在地
areaName?: string; // 所在地名称
detailAddress: string; // 详细地址
sex: number; // 性别
master: boolean; // 是否主联系人
post: string; // 职务
parentId: number; // 上级联系人编号
parentName?: string; // 上级联系人名称
remark: string; // 备注
creator: string; // 创建人
creatorName?: string; // 创建人名称
createTime: Date; // 创建时间
updateTime: Date; // 更新时间
}
/** 联系人商机关联请求 */
export interface ContactBusinessReq {
contactId: number;
businessIds: number[];
}
/** 商机联系人关联请求 */
export interface BusinessContactReq {
businessId: number;
contactIds: number[];
}
}
/** 查询联系人列表 */
export function getContactPage(params: PageParam) {
return requestClient.get<PageResult<CrmContactApi.Contact>>(
'/crm/contact/page',
{ params },
);
}
/** 查询联系人列表,基于指定客户 */
export function getContactPageByCustomer(params: PageParam) {
return requestClient.get<PageResult<CrmContactApi.Contact>>(
'/crm/contact/page-by-customer',
{ params },
);
}
/** 查询联系人列表,基于指定商机 */
export function getContactPageByBusiness(params: PageParam) {
return requestClient.get<PageResult<CrmContactApi.Contact>>(
'/crm/contact/page-by-business',
{ params },
);
}
/** 查询联系人详情 */
export function getContact(id: number) {
return requestClient.get<CrmContactApi.Contact>(`/crm/contact/get?id=${id}`);
}
/** 新增联系人 */
export function createContact(data: CrmContactApi.Contact) {
return requestClient.post('/crm/contact/create', data);
}
/** 修改联系人 */
export function updateContact(data: CrmContactApi.Contact) {
return requestClient.put('/crm/contact/update', data);
}
/** 删除联系人 */
export function deleteContact(id: number) {
return requestClient.delete(`/crm/contact/delete?id=${id}`);
}
/** 导出联系人 */
export function exportContact(params: any) {
return requestClient.download('/crm/contact/export-excel', params);
}
/** 获得联系人列表(精简) */
export function getSimpleContactList() {
return requestClient.get<CrmContactApi.Contact[]>(
'/crm/contact/simple-all-list',
);
}
/** 批量新增联系人商机关联 */
export function createContactBusinessList(
data: CrmContactApi.ContactBusinessReq,
) {
return requestClient.post('/crm/contact/create-business-list', data);
}
/** 批量新增商机联系人关联 */
export function createBusinessContactList(
data: CrmContactApi.BusinessContactReq,
) {
return requestClient.post('/crm/contact/create-business-list2', data);
}
/** 解除联系人商机关联 */
export function deleteContactBusinessList(
data: CrmContactApi.ContactBusinessReq,
) {
return requestClient.delete('/crm/contact/delete-business-list', { data });
}
/** 解除商机联系人关联 */
export function deleteBusinessContactList(
data: CrmContactApi.BusinessContactReq,
) {
return requestClient.delete('/crm/contact/delete-business-list2', { data });
}
/** 联系人转移 */
export function transferContact(data: CrmPermissionApi.TransferReq) {
return requestClient.put('/crm/contact/transfer', data);
}

View File

@@ -0,0 +1,21 @@
import { requestClient } from '#/api/request';
export namespace CrmContractConfigApi {
/** 合同配置信息 */
export interface Config {
notifyEnabled?: boolean;
notifyDays?: number;
}
}
/** 获取合同配置 */
export function getContractConfig() {
return requestClient.get<CrmContractConfigApi.Config>(
'/crm/contract-config/get',
);
}
/** 更新合同配置 */
export function saveContractConfig(data: CrmContractConfigApi.Config) {
return requestClient.put('/crm/contract-config/save', data);
}

View File

@@ -0,0 +1,132 @@
import type { PageParam, PageResult } from '@vben/request';
import type { CrmPermissionApi } from '#/api/crm/permission';
import { requestClient } from '#/api/request';
export namespace CrmContractApi {
/** 合同产品信息 */
export interface ContractProduct {
id: number;
productId: number;
productName: string;
productNo: string;
productUnit: number;
productPrice: number;
contractPrice: number;
count: number;
totalPrice: number;
}
/** 合同信息 */
export interface Contract {
id: number;
name: string;
no: string;
customerId: number;
customerName?: string;
businessId: number;
businessName: string;
contactLastTime: Date;
ownerUserId: number;
ownerUserName?: string;
ownerUserDeptName?: string;
processInstanceId: number;
auditStatus: number;
orderDate: Date;
startTime: Date;
endTime: Date;
totalProductPrice: number;
discountPercent: number;
totalPrice: number;
totalReceivablePrice: number;
signContactId: number;
signContactName?: string;
signUserId: number;
signUserName: string;
remark: string;
createTime?: Date;
creator: string;
creatorName: string;
updateTime?: Date;
products?: ContractProduct[];
}
}
/** 查询合同列表 */
export function getContractPage(params: PageParam) {
return requestClient.get<PageResult<CrmContractApi.Contract>>(
'/crm/contract/page',
{ params },
);
}
/** 查询合同列表,基于指定客户 */
export function getContractPageByCustomer(params: PageParam) {
return requestClient.get<PageResult<CrmContractApi.Contract>>(
'/crm/contract/page-by-customer',
{ params },
);
}
/** 查询合同列表,基于指定商机 */
export function getContractPageByBusiness(params: PageParam) {
return requestClient.get<PageResult<CrmContractApi.Contract>>(
'/crm/contract/page-by-business',
{ params },
);
}
/** 查询合同详情 */
export function getContract(id: number) {
return requestClient.get<CrmContractApi.Contract>(
`/crm/contract/get?id=${id}`,
);
}
/** 查询合同下拉列表 */
export function getContractSimpleList(customerId: number) {
return requestClient.get<CrmContractApi.Contract[]>(
`/crm/contract/simple-list?customerId=${customerId}`,
);
}
/** 新增合同 */
export function createContract(data: CrmContractApi.Contract) {
return requestClient.post('/crm/contract/create', data);
}
/** 修改合同 */
export function updateContract(data: CrmContractApi.Contract) {
return requestClient.put('/crm/contract/update', data);
}
/** 删除合同 */
export function deleteContract(id: number) {
return requestClient.delete(`/crm/contract/delete?id=${id}`);
}
/** 导出合同 */
export function exportContract(params: any) {
return requestClient.download('/crm/contract/export-excel', params);
}
/** 提交审核 */
export function submitContract(id: number) {
return requestClient.put(`/crm/contract/submit?id=${id}`);
}
/** 合同转移 */
export function transferContract(data: CrmPermissionApi.TransferReq) {
return requestClient.put('/crm/contract/transfer', data);
}
/** 获得待审核合同数量 */
export function getAuditContractCount() {
return requestClient.get<number>('/crm/contract/audit-count');
}
/** 获得即将到期(提醒)的合同数量 */
export function getRemindContractCount() {
return requestClient.get<number>('/crm/contract/remind-count');
}

View File

@@ -0,0 +1,146 @@
import type { PageParam, PageResult } from '@vben/request';
import type { CrmPermissionApi } from '#/api/crm/permission';
import { requestClient } from '#/api/request';
export namespace CrmCustomerApi {
/** 客户信息 */
export interface Customer {
id: number; // 编号
name: string; // 客户名称
followUpStatus: boolean; // 跟进状态
contactLastTime: Date; // 最后跟进时间
contactLastContent: string; // 最后跟进内容
contactNextTime: Date; // 下次联系时间
ownerUserId: number; // 负责人的用户编号
ownerUserName?: string; // 负责人的用户名称
ownerUserDept?: string; // 负责人的部门名称
lockStatus?: boolean;
dealStatus?: boolean;
mobile: string; // 手机号
telephone: string; // 电话
qq: string; // QQ
wechat: string; // wechat
email: string; // email
areaId: number; // 所在地
areaName?: string; // 所在地名称
detailAddress: string; // 详细地址
industryId: number; // 所属行业
level: number; // 客户等级
source: number; // 客户来源
remark: string; // 备注
creator: string; // 创建人
creatorName?: string; // 创建人名称
createTime: Date; // 创建时间
updateTime: Date; // 更新时间
}
}
/** 查询客户列表 */
export function getCustomerPage(params: PageParam) {
return requestClient.get<PageResult<CrmCustomerApi.Customer>>(
'/crm/customer/page',
{ params },
);
}
/** 查询客户详情 */
export function getCustomer(id: number) {
return requestClient.get<CrmCustomerApi.Customer>(
`/crm/customer/get?id=${id}`,
);
}
/** 新增客户 */
export function createCustomer(data: CrmCustomerApi.Customer) {
return requestClient.post('/crm/customer/create', data);
}
/** 修改客户 */
export function updateCustomer(data: CrmCustomerApi.Customer) {
return requestClient.put('/crm/customer/update', data);
}
/** 删除客户 */
export function deleteCustomer(id: number) {
return requestClient.delete(`/crm/customer/delete?id=${id}`);
}
/** 导出客户 */
export function exportCustomer(params: any) {
return requestClient.download('/crm/customer/export-excel', params);
}
/** 下载客户导入模板 */
export function importCustomerTemplate() {
return requestClient.download('/crm/customer/get-import-template');
}
/** 导入客户 */
export function importCustomer(file: File) {
return requestClient.upload('/crm/customer/import', { file });
}
/** 获取客户精简信息列表 */
export function getCustomerSimpleList() {
return requestClient.get<CrmCustomerApi.Customer[]>(
'/crm/customer/simple-list',
);
}
/** 客户转移 */
export function transferCustomer(data: CrmPermissionApi.TransferReq) {
return requestClient.put('/crm/customer/transfer', data);
}
/** 锁定/解锁客户 */
export function lockCustomer(id: number, lockStatus: boolean) {
return requestClient.put('/crm/customer/lock', { id, lockStatus });
}
/** 领取公海客户 */
export function receiveCustomer(ids: number[]) {
return requestClient.put('/crm/customer/receive', { ids: ids.join(',') });
}
/** 分配公海给对应负责人 */
export function distributeCustomer(ids: number[], ownerUserId: number) {
return requestClient.put('/crm/customer/distribute', { ids, ownerUserId });
}
/** 客户放入公海 */
export function putCustomerPool(id: number) {
return requestClient.put(`/crm/customer/put-pool?id=${id}`);
}
/** 更新客户的成交状态 */
export function updateCustomerDealStatus(id: number, dealStatus: boolean) {
return requestClient.put('/crm/customer/update-deal-status', {
id,
dealStatus,
});
}
/** 进入公海客户提醒的客户列表 */
export function getPutPoolRemindCustomerPage(params: PageParam) {
return requestClient.get<PageResult<CrmCustomerApi.Customer>>(
'/crm/customer/put-pool-remind-page',
{ params },
);
}
/** 获得待进入公海客户数量 */
export function getPutPoolRemindCustomerCount() {
return requestClient.get<number>('/crm/customer/put-pool-remind-count');
}
/** 获得今日需联系客户数量 */
export function getTodayContactCustomerCount() {
return requestClient.get<number>('/crm/customer/today-contact-count');
}
/** 获得分配给我、待跟进的线索数量的客户数量 */
export function getFollowCustomerCount() {
return requestClient.get<number>('/crm/customer/follow-count');
}

View File

@@ -0,0 +1,58 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace CrmCustomerLimitConfigApi {
/** 客户限制配置 */
export interface CustomerLimitConfig {
id?: number;
type?: number;
userIds?: string;
deptIds?: string;
maxCount?: number;
dealCountEnabled?: boolean;
}
/**
* 客户限制配置类型
*/
export enum LimitConfType {
/** 锁定客户数限制 */
CUSTOMER_LOCK_LIMIT = 2,
/** 拥有客户数限制 */
CUSTOMER_QUANTITY_LIMIT = 1,
}
}
/** 查询客户限制配置列表 */
export function getCustomerLimitConfigPage(params: PageParam) {
return requestClient.get<
PageResult<CrmCustomerLimitConfigApi.CustomerLimitConfig>
>('/crm/customer-limit-config/page', { params });
}
/** 查询客户限制配置详情 */
export function getCustomerLimitConfig(id: number) {
return requestClient.get<CrmCustomerLimitConfigApi.CustomerLimitConfig>(
`/crm/customer-limit-config/get?id=${id}`,
);
}
/** 新增客户限制配置 */
export function createCustomerLimitConfig(
data: CrmCustomerLimitConfigApi.CustomerLimitConfig,
) {
return requestClient.post('/crm/customer-limit-config/create', data);
}
/** 修改客户限制配置 */
export function updateCustomerLimitConfig(
data: CrmCustomerLimitConfigApi.CustomerLimitConfig,
) {
return requestClient.put('/crm/customer-limit-config/update', data);
}
/** 删除客户限制配置 */
export function deleteCustomerLimitConfig(id: number) {
return requestClient.delete(`/crm/customer-limit-config/delete?id=${id}`);
}

View File

@@ -0,0 +1,26 @@
import { requestClient } from '#/api/request';
export namespace CrmCustomerPoolConfigApi {
/** 客户公海规则设置 */
export interface CustomerPoolConfig {
enabled?: boolean;
contactExpireDays?: number;
dealExpireDays?: number;
notifyEnabled?: boolean;
notifyDays?: number;
}
}
/** 获取客户公海规则设置 */
export function getCustomerPoolConfig() {
return requestClient.get<CrmCustomerPoolConfigApi.CustomerPoolConfig>(
'/crm/customer-pool-config/get',
);
}
/** 更新客户公海规则设置 */
export function saveCustomerPoolConfig(
data: CrmCustomerPoolConfigApi.CustomerPoolConfig,
) {
return requestClient.put('/crm/customer-pool-config/save', data);
}

View File

@@ -0,0 +1,53 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace CrmFollowUpApi {
/** 关联商机信息 */
export interface Business {
id: number;
name: string;
}
/** 关联联系人信息 */
export interface Contact {
id: number;
name: string;
}
/** 跟进记录信息 */
export interface FollowUpRecord {
id: number; // 编号
bizType: number; // 数据类型
bizId: number; // 数据编号
type: number; // 跟进类型
content: string; // 跟进内容
picUrls: string[]; // 图片
fileUrls: string[]; // 附件
nextTime: Date; // 下次联系时间
businessIds: number[]; // 关联的商机编号数组
businesses: Business[]; // 关联的商机数组
contactIds: number[]; // 关联的联系人编号数组
contacts: Contact[]; // 关联的联系人数组
creator: string;
creatorName?: string;
}
}
/** 查询跟进记录分页 */
export function getFollowUpRecordPage(params: PageParam) {
return requestClient.get<PageResult<CrmFollowUpApi.FollowUpRecord>>(
'/crm/follow-up-record/page',
{ params },
);
}
/** 新增跟进记录 */
export function createFollowUpRecord(data: CrmFollowUpApi.FollowUpRecord) {
return requestClient.post('/crm/follow-up-record/create', data);
}
/** 删除跟进记录 */
export function deleteFollowUpRecord(id: number) {
return requestClient.delete(`/crm/follow-up-record/delete?id=${id}`);
}

View File

@@ -0,0 +1,31 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace CrmOperateLogApi {
/** 操作日志查询参数 */
export interface OperateLogQuery extends PageParam {
bizType: number;
bizId: number;
}
/** 操作日志信息 */
export interface OperateLog {
id: number;
bizType: number;
bizId: number;
type: number;
content: string;
creator: string;
creatorName?: string;
createTime: Date;
}
}
/** 获得操作日志 */
export function getOperateLogPage(params: CrmOperateLogApi.OperateLogQuery) {
return requestClient.get<PageResult<CrmOperateLogApi.OperateLog>>(
'/crm/operate-log/page',
{ params },
);
}

View File

@@ -0,0 +1,79 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace CrmPermissionApi {
/** 数据权限信息 */
export interface Permission {
id?: number; // 数据权限编号
userId: number; // 用户编号
bizType: number; // Crm 类型
bizId: number; // Crm 类型数据编号
level: number; // 权限级别
toBizTypes?: number[]; // 同时添加至
deptName?: string; // 部门名称
nickname?: string; // 用户昵称
postNames?: string[]; // 岗位名称数组
createTime?: Date;
ids?: number[];
}
/** 数据权限转移请求 */
export interface TransferReq {
id: number; // 模块编号
newOwnerUserId: number; // 新负责人的用户编号
oldOwnerPermissionLevel?: number; // 老负责人加入团队后的权限级别
toBizTypes?: number[]; // 转移客户时,需要额外有【联系人】【商机】【合同】的 checkbox 选择
}
/**
* CRM 业务类型枚举
*/
export enum BizType {
CRM_BUSINESS = 4, // 商机
CRM_CLUE = 1, // 线索
CRM_CONTACT = 3, // 联系人
CRM_CONTRACT = 5, // 合同
CRM_CUSTOMER = 2, // 客户
CRM_PRODUCT = 6, // 产品
CRM_RECEIVABLE = 7, // 回款
CRM_RECEIVABLE_PLAN = 8, // 回款计划
}
/**
* CRM 数据权限级别枚举
*/
export enum PermissionLevel {
OWNER = 1, // 负责人
READ = 2, // 只读
WRITE = 3, // 读写
}
}
/** 获得数据权限列表(查询团队成员列表) */
export function getPermissionList(params: PageParam) {
return requestClient.get<PageResult<CrmPermissionApi.Permission>>(
'/crm/permission/list',
{ params },
);
}
/** 创建数据权限(新增团队成员) */
export function createPermission(data: CrmPermissionApi.Permission) {
return requestClient.post('/crm/permission/create', data);
}
/** 编辑数据权限(修改团队成员权限级别) */
export function updatePermission(data: CrmPermissionApi.Permission) {
return requestClient.put('/crm/permission/update', data);
}
/** 删除数据权限(删除团队成员) */
export function deletePermissionBatch(ids: number[]) {
return requestClient.delete(`/crm/permission/delete?ids=${ids.join(',')}`);
}
/** 删除自己的数据权限(退出团队) */
export function deleteSelfPermission(id: number) {
return requestClient.delete(`/crm/permission/delete-self?id=${id}`);
}

View File

@@ -0,0 +1,46 @@
import type { PageParam } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace CrmProductCategoryApi {
/** 产品分类信息 */
export interface ProductCategory {
id: number;
name: string;
parentId: number;
}
}
/** 查询产品分类详情 */
export function getProductCategory(id: number) {
return requestClient.get<CrmProductCategoryApi.ProductCategory>(
`/crm/product-category/get?id=${id}`,
);
}
/** 新增产品分类 */
export function createProductCategory(
data: CrmProductCategoryApi.ProductCategory,
) {
return requestClient.post('/crm/product-category/create', data);
}
/** 修改产品分类 */
export function updateProductCategory(
data: CrmProductCategoryApi.ProductCategory,
) {
return requestClient.put('/crm/product-category/update', data);
}
/** 删除产品分类 */
export function deleteProductCategory(id: number) {
return requestClient.delete(`/crm/product-category/delete?id=${id}`);
}
/** 产品分类列表 */
export function getProductCategoryList(params?: PageParam) {
return requestClient.get<CrmProductCategoryApi.ProductCategory[]>(
'/crm/product-category/list',
{ params },
);
}

View File

@@ -0,0 +1,57 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace CrmProductApi {
/** 产品信息 */
export interface Product {
id: number;
name: string;
no: string;
unit: number;
price: number;
status: number;
categoryId: number;
categoryName?: string;
description: string;
ownerUserId: number;
}
}
/** 查询产品列表 */
export function getProductPage(params: PageParam) {
return requestClient.get<PageResult<CrmProductApi.Product>>(
'/crm/product/page',
{ params },
);
}
/** 获得产品精简列表 */
export function getProductSimpleList() {
return requestClient.get<CrmProductApi.Product[]>('/crm/product/simple-list');
}
/** 查询产品详情 */
export function getProduct(id: number) {
return requestClient.get<CrmProductApi.Product>(`/crm/product/get?id=${id}`);
}
/** 新增产品 */
export function createProduct(data: CrmProductApi.Product) {
return requestClient.post('/crm/product/create', data);
}
/** 修改产品 */
export function updateProduct(data: CrmProductApi.Product) {
return requestClient.put('/crm/product/update', data);
}
/** 删除产品 */
export function deleteProduct(id: number) {
return requestClient.delete(`/crm/product/delete?id=${id}`);
}
/** 导出产品 */
export function exportProduct(params: any) {
return requestClient.download('/crm/product/export-excel', params);
}

View File

@@ -0,0 +1,90 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace CrmReceivableApi {
/** 合同信息 */
export interface Contract {
id?: number;
name?: string;
no: string;
totalPrice: number;
}
/** 回款信息 */
export interface Receivable {
id: number;
no: string;
planId?: number;
period?: number;
customerId?: number;
customerName?: string;
contractId?: number;
contract?: Contract;
auditStatus: number;
processInstanceId: number;
returnTime: Date;
returnType: number;
price: number;
ownerUserId: number;
ownerUserName?: string;
remark: string;
creator: string; // 创建人
creatorName?: string; // 创建人名称
createTime: Date; // 创建时间
updateTime: Date; // 更新时间
}
}
/** 查询回款列表 */
export function getReceivablePage(params: PageParam) {
return requestClient.get<PageResult<CrmReceivableApi.Receivable>>(
'/crm/receivable/page',
{ params },
);
}
/** 查询回款列表,基于指定客户 */
export function getReceivablePageByCustomer(params: PageParam) {
return requestClient.get<PageResult<CrmReceivableApi.Receivable>>(
'/crm/receivable/page-by-customer',
{ params },
);
}
/** 查询回款详情 */
export function getReceivable(id: number) {
return requestClient.get<CrmReceivableApi.Receivable>(
`/crm/receivable/get?id=${id}`,
);
}
/** 新增回款 */
export function createReceivable(data: CrmReceivableApi.Receivable) {
return requestClient.post('/crm/receivable/create', data);
}
/** 修改回款 */
export function updateReceivable(data: CrmReceivableApi.Receivable) {
return requestClient.put('/crm/receivable/update', data);
}
/** 删除回款 */
export function deleteReceivable(id: number) {
return requestClient.delete(`/crm/receivable/delete?id=${id}`);
}
/** 导出回款 */
export function exportReceivable(params: any) {
return requestClient.download('/crm/receivable/export-excel', params);
}
/** 提交审核 */
export function submitReceivable(id: number) {
return requestClient.put(`/crm/receivable/submit?id=${id}`);
}
/** 获得待审核回款数量 */
export function getAuditReceivableCount() {
return requestClient.get<number>('/crm/receivable/audit-count');
}

View File

@@ -0,0 +1,98 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace CrmReceivablePlanApi {
/** 回款计划信息 */
export interface Plan {
id: number;
period: number;
receivableId: number;
price: number;
returnTime: Date;
remindDays: number;
returnType: number;
remindTime: Date;
customerId: number;
customerName?: string;
contractId?: number;
contractNo?: string;
ownerUserId: number;
ownerUserName?: string;
remark: string;
creator: string;
creatorName?: string;
createTime: Date;
updateTime: Date;
receivable?: {
price: number;
returnTime: Date;
};
}
}
/** 查询回款计划列表 */
export function getReceivablePlanPage(params: PageParam) {
return requestClient.get<PageResult<CrmReceivablePlanApi.Plan>>(
'/crm/receivable-plan/page',
{ params },
);
}
/** 查询回款计划列表(按客户) */
export function getReceivablePlanPageByCustomer(params: PageParam) {
return requestClient.get<PageResult<CrmReceivablePlanApi.Plan>>(
'/crm/receivable-plan/page-by-customer',
{ params },
);
}
/** 查询回款计划详情 */
export function getReceivablePlan(id: number) {
return requestClient.get<CrmReceivablePlanApi.Plan>(
'/crm/receivable-plan/get',
{ params: { id } },
);
}
/** 查询回款计划下拉数据 */
export function getReceivablePlanSimpleList(
customerId: number,
contractId: number,
) {
return requestClient.get<CrmReceivablePlanApi.Plan[]>(
'/crm/receivable-plan/simple-list',
{
params: { customerId, contractId },
},
);
}
/** 新增回款计划 */
export function createReceivablePlan(data: CrmReceivablePlanApi.Plan) {
return requestClient.post('/crm/receivable-plan/create', data);
}
/** 修改回款计划 */
export function updateReceivablePlan(data: CrmReceivablePlanApi.Plan) {
return requestClient.put('/crm/receivable-plan/update', data);
}
/** 删除回款计划 */
export function deleteReceivablePlan(id: number) {
return requestClient.delete('/crm/receivable-plan/delete', {
params: { id },
});
}
/** 导出回款计划 Excel */
export function exportReceivablePlan(params: PageParam) {
return requestClient.download('/crm/receivable-plan/export-excel', {
params,
});
}
/** 获得待回款提醒数量 */
export function getReceivablePlanRemindCount() {
return requestClient.get<number>('/crm/receivable-plan/remind-count');
}

View File

@@ -0,0 +1,191 @@
import type { PageParam } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace CrmStatisticsCustomerApi {
/** 客户总量分析(按日期) */
export interface CustomerSummaryByDate {
time: string;
customerCreateCount: number;
customerDealCount: number;
}
/** 客户总量分析(按用户) */
export interface CustomerSummaryByUser {
ownerUserName: string;
customerCreateCount: number;
customerDealCount: number;
contractPrice: number;
receivablePrice: number;
}
/** 客户跟进次数分析(按日期) */
export interface FollowUpSummaryByDate {
time: string;
followUpRecordCount: number;
followUpCustomerCount: number;
}
/** 客户跟进次数分析(按用户) */
export interface FollowUpSummaryByUser {
ownerUserName: string;
followupRecordCount: number;
followupCustomerCount: number;
}
/** 客户跟进方式统计 */
export interface FollowUpSummaryByType {
followUpType: string;
followUpRecordCount: number;
}
/** 合同摘要信息 */
export interface CustomerContractSummary {
customerName: string;
contractName: string;
totalPrice: number;
receivablePrice: number;
customerType: string;
customerSource: string;
ownerUserName: string;
creatorUserName: string;
createTime: Date;
orderDate: Date;
}
/** 客户公海分析(按日期) */
export interface PoolSummaryByDate {
time: string;
customerPutCount: number;
customerTakeCount: number;
}
/** 客户公海分析(按用户) */
export interface PoolSummaryByUser {
ownerUserName: string;
customerPutCount: number;
customerTakeCount: number;
}
/** 客户成交周期(按日期) */
export interface CustomerDealCycleByDate {
time: string;
customerDealCycle: number;
}
/** 客户成交周期(按用户) */
export interface CustomerDealCycleByUser {
ownerUserName: string;
customerDealCycle: number;
customerDealCount: number;
}
/** 客户成交周期(按地区) */
export interface CustomerDealCycleByArea {
areaName: string;
customerDealCycle: number;
customerDealCount: number;
}
/** 客户成交周期(按产品) */
export interface CustomerDealCycleByProduct {
productName: string;
customerDealCycle: number;
customerDealCount: number;
}
}
/** 客户总量分析(按日期) */
export function getCustomerSummaryByDate(params: PageParam) {
return requestClient.get<CrmStatisticsCustomerApi.CustomerSummaryByDate[]>(
'/crm/statistics-customer/get-customer-summary-by-date',
{ params },
);
}
/** 客户总量分析(按用户) */
export function getCustomerSummaryByUser(params: PageParam) {
return requestClient.get<CrmStatisticsCustomerApi.CustomerSummaryByUser[]>(
'/crm/statistics-customer/get-customer-summary-by-user',
{ params },
);
}
/** 客户跟进次数分析(按日期) */
export function getFollowUpSummaryByDate(params: PageParam) {
return requestClient.get<CrmStatisticsCustomerApi.FollowUpSummaryByDate[]>(
'/crm/statistics-customer/get-follow-up-summary-by-date',
{ params },
);
}
/** 客户跟进次数分析(按用户) */
export function getFollowUpSummaryByUser(params: PageParam) {
return requestClient.get<CrmStatisticsCustomerApi.FollowUpSummaryByUser[]>(
'/crm/statistics-customer/get-follow-up-summary-by-user',
{ params },
);
}
/** 获取客户跟进方式统计数 */
export function getFollowUpSummaryByType(params: PageParam) {
return requestClient.get<CrmStatisticsCustomerApi.FollowUpSummaryByType[]>(
'/crm/statistics-customer/get-follow-up-summary-by-type',
{ params },
);
}
/** 合同摘要信息(客户转化率页面) */
export function getContractSummary(params: PageParam) {
return requestClient.get<CrmStatisticsCustomerApi.CustomerContractSummary[]>(
'/crm/statistics-customer/get-contract-summary',
{ params },
);
}
/** 获取客户公海分析(按日期) */
export function getPoolSummaryByDate(params: PageParam) {
return requestClient.get<CrmStatisticsCustomerApi.PoolSummaryByDate[]>(
'/crm/statistics-customer/get-pool-summary-by-date',
{ params },
);
}
/** 获取客户公海分析(按用户) */
export function getPoolSummaryByUser(params: PageParam) {
return requestClient.get<CrmStatisticsCustomerApi.PoolSummaryByUser[]>(
'/crm/statistics-customer/get-pool-summary-by-user',
{ params },
);
}
/** 获取客户成交周期(按日期) */
export function getCustomerDealCycleByDate(params: PageParam) {
return requestClient.get<CrmStatisticsCustomerApi.CustomerDealCycleByDate[]>(
'/crm/statistics-customer/get-customer-deal-cycle-by-date',
{ params },
);
}
/** 获取客户成交周期(按用户) */
export function getCustomerDealCycleByUser(params: PageParam) {
return requestClient.get<CrmStatisticsCustomerApi.CustomerDealCycleByUser[]>(
'/crm/statistics-customer/get-customer-deal-cycle-by-user',
{ params },
);
}
/** 获取客户成交周期(按地区) */
export function getCustomerDealCycleByArea(params: PageParam) {
return requestClient.get<CrmStatisticsCustomerApi.CustomerDealCycleByArea[]>(
'/crm/statistics-customer/get-customer-deal-cycle-by-area',
{ params },
);
}
/** 获取客户成交周期(按产品) */
export function getCustomerDealCycleByProduct(params: PageParam) {
return requestClient.get<
CrmStatisticsCustomerApi.CustomerDealCycleByProduct[]
>('/crm/statistics-customer/get-customer-deal-cycle-by-product', { params });
}

View File

@@ -0,0 +1,67 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace CrmStatisticsFunnelApi {
/** 销售漏斗统计数据 */
export interface FunnelSummary {
customerCount: number; // 客户数
businessCount: number; // 商机数
businessWinCount: number; // 赢单数
}
/** 商机分析(按日期) */
export interface BusinessSummaryByDate {
time: string; // 时间
businessCreateCount: number; // 商机数
totalPrice: number | string; // 商机金额
}
/** 商机转化率分析(按日期) */
export interface BusinessInversionRateSummaryByDate {
time: string; // 时间
businessCount: number; // 商机数量
businessWinCount: number; // 赢单商机数
}
}
/** 获取销售漏斗统计数据 */
export function getFunnelSummary(params: PageParam) {
return requestClient.get<CrmStatisticsFunnelApi.FunnelSummary>(
'/crm/statistics-funnel/get-funnel-summary',
{ params },
);
}
/** 获取商机结束状态统计 */
export function getBusinessSummaryByEndStatus(params: PageParam) {
return requestClient.get<Record<string, number>>(
'/crm/statistics-funnel/get-business-summary-by-end-status',
{ params },
);
}
/** 获取新增商机分析(按日期) */
export function getBusinessSummaryByDate(params: PageParam) {
return requestClient.get<CrmStatisticsFunnelApi.BusinessSummaryByDate[]>(
'/crm/statistics-funnel/get-business-summary-by-date',
{ params },
);
}
/** 获取商机转化率分析(按日期) */
export function getBusinessInversionRateSummaryByDate(params: PageParam) {
return requestClient.get<
CrmStatisticsFunnelApi.BusinessInversionRateSummaryByDate[]
>('/crm/statistics-funnel/get-business-inversion-rate-summary-by-date', {
params,
});
}
/** 获取商机列表(按日期) */
export function getBusinessPageByDate(params: PageParam) {
return requestClient.get<PageResult<any>>(
'/crm/statistics-funnel/get-business-page-by-date',
{ params },
);
}

View File

@@ -0,0 +1,37 @@
import type { PageParam } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace CrmStatisticsPerformanceApi {
/** 员工业绩统计 */
export interface Performance {
time: string;
currentMonthCount: number;
lastMonthCount: number;
lastYearCount: number;
}
}
/** 员工获得合同金额统计 */
export function getContractPricePerformance(params: PageParam) {
return requestClient.get<CrmStatisticsPerformanceApi.Performance[]>(
'/crm/statistics-performance/get-contract-price-performance',
{ params },
);
}
/** 员工获得回款统计 */
export function getReceivablePricePerformance(params: PageParam) {
return requestClient.get<CrmStatisticsPerformanceApi.Performance[]>(
'/crm/statistics-performance/get-receivable-price-performance',
{ params },
);
}
/** 员工获得签约合同数量统计 */
export function getContractCountPerformance(params: PageParam) {
return requestClient.get<CrmStatisticsPerformanceApi.Performance[]>(
'/crm/statistics-performance/get-contract-count-performance',
{ params },
);
}

View File

@@ -0,0 +1,69 @@
import type { PageParam } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace CrmStatisticsPortraitApi {
/** 客户基础统计信息 */
export interface CustomerBase {
customerCount: number;
dealCount: number;
dealPortion: number | string;
}
/** 客户行业统计信息 */
export interface CustomerIndustry extends CustomerBase {
industryId: number;
industryPortion: number | string;
}
/** 客户来源统计信息 */
export interface CustomerSource extends CustomerBase {
source: number;
sourcePortion: number | string;
}
/** 客户级别统计信息 */
export interface CustomerLevel extends CustomerBase {
level: number;
levelPortion: number | string;
}
/** 客户地区统计信息 */
export interface CustomerArea extends CustomerBase {
areaId: number;
areaName: string;
areaPortion: number | string;
}
}
/** 获取客户行业统计数据 */
export function getCustomerIndustry(params: PageParam) {
return requestClient.get<CrmStatisticsPortraitApi.CustomerIndustry[]>(
'/crm/statistics-portrait/get-customer-industry-summary',
{ params },
);
}
/** 获取客户来源统计数据 */
export function getCustomerSource(params: PageParam) {
return requestClient.get<CrmStatisticsPortraitApi.CustomerSource[]>(
'/crm/statistics-portrait/get-customer-source-summary',
{ params },
);
}
/** 获取客户级别统计数据 */
export function getCustomerLevel(params: PageParam) {
return requestClient.get<CrmStatisticsPortraitApi.CustomerLevel[]>(
'/crm/statistics-portrait/get-customer-level-summary',
{ params },
);
}
/** 获取客户地区统计数据 */
export function getCustomerArea(params: PageParam) {
return requestClient.get<CrmStatisticsPortraitApi.CustomerArea[]>(
'/crm/statistics-portrait/get-customer-area-summary',
{ params },
);
}

View File

@@ -0,0 +1,76 @@
import type { PageParam } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace CrmStatisticsRankApi {
/** 排行统计数据 */
export interface Rank {
count: number;
nickname: string;
deptName: string;
}
}
/** 获得合同排行榜 */
export function getContractPriceRank(params: PageParam) {
return requestClient.get<CrmStatisticsRankApi.Rank[]>(
'/crm/statistics-rank/get-contract-price-rank',
{ params },
);
}
/** 获得回款排行榜 */
export function getReceivablePriceRank(params: PageParam) {
return requestClient.get<CrmStatisticsRankApi.Rank[]>(
'/crm/statistics-rank/get-receivable-price-rank',
{ params },
);
}
/** 签约合同排行 */
export function getContractCountRank(params: PageParam) {
return requestClient.get<CrmStatisticsRankApi.Rank[]>(
'/crm/statistics-rank/get-contract-count-rank',
{ params },
);
}
/** 产品销量排行 */
export function getProductSalesRank(params: PageParam) {
return requestClient.get<CrmStatisticsRankApi.Rank[]>(
'/crm/statistics-rank/get-product-sales-rank',
{ params },
);
}
/** 新增客户数排行 */
export function getCustomerCountRank(params: PageParam) {
return requestClient.get<CrmStatisticsRankApi.Rank[]>(
'/crm/statistics-rank/get-customer-count-rank',
{ params },
);
}
/** 新增联系人数排行 */
export function getContactsCountRank(params: PageParam) {
return requestClient.get<CrmStatisticsRankApi.Rank[]>(
'/crm/statistics-rank/get-contacts-count-rank',
{ params },
);
}
/** 跟进次数排行 */
export function getFollowCountRank(params: PageParam) {
return requestClient.get<CrmStatisticsRankApi.Rank[]>(
'/crm/statistics-rank/get-follow-count-rank',
{ params },
);
}
/** 跟进客户数排行 */
export function getFollowCustomerCountRank(params: PageParam) {
return requestClient.get<CrmStatisticsRankApi.Rank[]>(
'/crm/statistics-rank/get-follow-customer-count-rank',
{ params },
);
}

View File

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

View File

@@ -0,0 +1,44 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace InfraApiAccessLogApi {
/** API 访问日志信息 */
export interface ApiAccessLog {
id: number;
traceId: string;
userId: number;
userType: number;
applicationName: string;
requestMethod: string;
requestParams: string;
responseBody: string;
requestUrl: string;
userIp: string;
userAgent: string;
operateModule: string;
operateName: string;
operateType: number;
beginTime: string;
endTime: string;
duration: number;
resultCode: number;
resultMsg: string;
createTime: string;
}
}
/** 查询 API 访问日志列表 */
export function getApiAccessLogPage(params: PageParam) {
return requestClient.get<PageResult<InfraApiAccessLogApi.ApiAccessLog>>(
'/infra/api-access-log/page',
{ params },
);
}
/** 导出 API 访问日志 */
export function exportApiAccessLog(params: any) {
return requestClient.download('/infra/api-access-log/export-excel', {
params,
});
}

View File

@@ -0,0 +1,55 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace InfraApiErrorLogApi {
/** API 错误日志信息 */
export interface ApiErrorLog {
id: number;
traceId: string;
userId: number;
userType: number;
applicationName: string;
requestMethod: string;
requestParams: string;
requestUrl: string;
userIp: string;
userAgent: string;
exceptionTime: string;
exceptionName: string;
exceptionMessage: string;
exceptionRootCauseMessage: string;
exceptionStackTrace: string;
exceptionClassName: string;
exceptionFileName: string;
exceptionMethodName: string;
exceptionLineNumber: number;
processUserId: number;
processStatus: number;
processTime: string;
resultCode: number;
createTime: string;
}
}
/** 查询 API 错误日志列表 */
export function getApiErrorLogPage(params: PageParam) {
return requestClient.get<PageResult<InfraApiErrorLogApi.ApiErrorLog>>(
'/infra/api-error-log/page',
{ params },
);
}
/** 更新 API 错误日志的处理状态 */
export function updateApiErrorLogStatus(id: number, processStatus: number) {
return requestClient.put(
`/infra/api-error-log/update-status?id=${id}&processStatus=${processStatus}`,
);
}
/** 导出 API 错误日志 */
export function exportApiErrorLog(params: any) {
return requestClient.download('/infra/api-error-log/export-excel', {
params,
});
}

View File

@@ -0,0 +1,157 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace InfraCodegenApi {
/** 代码生成表定义 */
export interface CodegenTable {
id: number;
tableId: number;
isParentMenuIdValid: boolean;
dataSourceConfigId: number;
scene: number;
tableName: string;
tableComment: string;
remark: string;
moduleName: string;
businessName: string;
className: string;
classComment: string;
author: string;
createTime: Date;
updateTime: Date;
templateType: number;
parentMenuId: number;
}
/** 代码生成字段定义 */
export interface CodegenColumn {
id: number;
tableId: number;
columnName: string;
dataType: string;
columnComment: string;
nullable: number;
primaryKey: number;
ordinalPosition: number;
javaType: string;
javaField: string;
dictType: string;
example: string;
createOperation: number;
updateOperation: number;
listOperation: number;
listOperationCondition: string;
listOperationResult: number;
htmlType: string;
}
/** 数据库表定义 */
export interface DatabaseTable {
name: string;
comment: string;
}
/** 代码生成详情 */
export interface CodegenDetail {
table: CodegenTable;
columns: CodegenColumn[];
}
/** 代码预览 */
export interface CodegenPreview {
filePath: string;
code: string;
}
/** 更新代码生成请求 */
export interface CodegenUpdateReqVO {
table: any | CodegenTable;
columns: CodegenColumn[];
}
/** 创建代码生成请求 */
export interface CodegenCreateListReqVO {
dataSourceConfigId?: number;
tableNames: string[];
}
}
/** 查询列表代码生成表定义 */
export function getCodegenTableList(dataSourceConfigId: number) {
return requestClient.get<InfraCodegenApi.CodegenTable[]>(
'/infra/codegen/table/list?',
{
params: { dataSourceConfigId },
},
);
}
/** 查询列表代码生成表定义 */
export function getCodegenTablePage(params: PageParam) {
return requestClient.get<PageResult<InfraCodegenApi.CodegenTable>>(
'/infra/codegen/table/page',
{ params },
);
}
/** 查询详情代码生成表定义 */
export function getCodegenTable(tableId: number) {
return requestClient.get<InfraCodegenApi.CodegenDetail>(
'/infra/codegen/detail',
{
params: { tableId },
},
);
}
/** 修改代码生成表定义 */
export function updateCodegenTable(data: InfraCodegenApi.CodegenUpdateReqVO) {
return requestClient.put('/infra/codegen/update', data);
}
/** 基于数据库的表结构,同步数据库的表和字段定义 */
export function syncCodegenFromDB(tableId: number) {
return requestClient.put('/infra/codegen/sync-from-db', {
params: { tableId },
});
}
/** 预览生成代码 */
export function previewCodegen(tableId: number) {
return requestClient.get<InfraCodegenApi.CodegenPreview[]>(
'/infra/codegen/preview',
{
params: { tableId },
},
);
}
/** 下载生成代码 */
export function downloadCodegen(tableId: number) {
return requestClient.download('/infra/codegen/download', {
params: { tableId },
});
}
/** 获得表定义 */
export function getSchemaTableList(params: any) {
return requestClient.get<InfraCodegenApi.DatabaseTable[]>(
'/infra/codegen/db/table/list',
{ params },
);
}
/** 基于数据库的表结构,创建代码生成器的表定义 */
export function createCodegenList(
data: InfraCodegenApi.CodegenCreateListReqVO,
) {
return requestClient.post('/infra/codegen/create-list', data);
}
/** 删除代码生成表定义 */
export function deleteCodegenTable(tableId: number) {
return requestClient.delete('/infra/codegen/delete', {
params: { tableId },
});
}

View File

@@ -0,0 +1,62 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace InfraConfigApi {
/** 参数配置信息 */
export interface Config {
id?: number;
category: string;
name: string;
key: string;
value: string;
type: number;
visible: boolean;
remark: string;
createTime?: Date;
}
}
/** 查询参数列表 */
export function getConfigPage(params: PageParam) {
return requestClient.get<PageResult<InfraConfigApi.Config>>(
'/infra/config/page',
{
params,
},
);
}
/** 查询参数详情 */
export function getConfig(id: number) {
return requestClient.get<InfraConfigApi.Config>(`/infra/config/get?id=${id}`);
}
/** 根据参数键名查询参数值 */
export function getConfigKey(configKey: string) {
return requestClient.get<string>(
`/infra/config/get-value-by-key?key=${configKey}`,
);
}
/** 新增参数 */
export function createConfig(data: InfraConfigApi.Config) {
return requestClient.post('/infra/config/create', data);
}
/** 修改参数 */
export function updateConfig(data: InfraConfigApi.Config) {
return requestClient.put('/infra/config/update', data);
}
/** 删除参数 */
export function deleteConfig(id: number) {
return requestClient.delete(`/infra/config/delete?id=${id}`);
}
/** 导出参数 */
export function exportConfig(params: any) {
return requestClient.download('/infra/config/export', {
params,
});
}

View File

@@ -0,0 +1,46 @@
import { requestClient } from '#/api/request';
export namespace InfraDataSourceConfigApi {
/** 数据源配置信息 */
export interface DataSourceConfig {
id?: number;
name: string;
url: string;
username: string;
password: string;
createTime?: Date;
}
}
/** 查询数据源配置列表 */
export function getDataSourceConfigList() {
return requestClient.get<InfraDataSourceConfigApi.DataSourceConfig[]>(
'/infra/data-source-config/list',
);
}
/** 查询数据源配置详情 */
export function getDataSourceConfig(id: number) {
return requestClient.get<InfraDataSourceConfigApi.DataSourceConfig>(
`/infra/data-source-config/get?id=${id}`,
);
}
/** 新增数据源配置 */
export function createDataSourceConfig(
data: InfraDataSourceConfigApi.DataSourceConfig,
) {
return requestClient.post('/infra/data-source-config/create', data);
}
/** 修改数据源配置 */
export function updateDataSourceConfig(
data: InfraDataSourceConfigApi.DataSourceConfig,
) {
return requestClient.put('/infra/data-source-config/update', data);
}
/** 删除数据源配置 */
export function deleteDataSourceConfig(id: number) {
return requestClient.delete(`/infra/data-source-config/delete?id=${id}`);
}

View File

@@ -0,0 +1,52 @@
import type { Dayjs } from 'dayjs';
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace Demo01ContactApi {
/** 示例联系人信息 */
export interface Demo01Contact {
id: number; // 编号
name?: string; // 名字
sex?: boolean; // 性别
birthday?: Dayjs | string; // 出生年
description?: string; // 简介
avatar: string; // 头像
}
}
/** 查询示例联系人分页 */
export function getDemo01ContactPage(params: PageParam) {
return requestClient.get<PageResult<Demo01ContactApi.Demo01Contact>>(
'/infra/demo01-contact/page',
{ params },
);
}
/** 查询示例联系人详情 */
export function getDemo01Contact(id: number) {
return requestClient.get<Demo01ContactApi.Demo01Contact>(
`/infra/demo01-contact/get?id=${id}`,
);
}
/** 新增示例联系人 */
export function createDemo01Contact(data: Demo01ContactApi.Demo01Contact) {
return requestClient.post('/infra/demo01-contact/create', data);
}
/** 修改示例联系人 */
export function updateDemo01Contact(data: Demo01ContactApi.Demo01Contact) {
return requestClient.put('/infra/demo01-contact/update', data);
}
/** 删除示例联系人 */
export function deleteDemo01Contact(id: number) {
return requestClient.delete(`/infra/demo01-contact/delete?id=${id}`);
}
/** 导出示例联系人 */
export function exportDemo01Contact(params: any) {
return requestClient.download('/infra/demo01-contact/export-excel', params);
}

View File

@@ -0,0 +1,46 @@
import { requestClient } from '#/api/request';
export namespace Demo02CategoryApi {
/** 示例分类信息 */
export interface Demo02Category {
id: number; // 编号
name?: string; // 名字
parentId?: number; // 父级编号
children?: Demo02Category[];
}
}
/** 查询示例分类列表 */
export function getDemo02CategoryList(params: any) {
return requestClient.get<Demo02CategoryApi.Demo02Category[]>(
'/infra/demo02-category/list',
{ params },
);
}
/** 查询示例分类详情 */
export function getDemo02Category(id: number) {
return requestClient.get<Demo02CategoryApi.Demo02Category>(
`/infra/demo02-category/get?id=${id}`,
);
}
/** 新增示例分类 */
export function createDemo02Category(data: Demo02CategoryApi.Demo02Category) {
return requestClient.post('/infra/demo02-category/create', data);
}
/** 修改示例分类 */
export function updateDemo02Category(data: Demo02CategoryApi.Demo02Category) {
return requestClient.put('/infra/demo02-category/update', data);
}
/** 删除示例分类 */
export function deleteDemo02Category(id: number) {
return requestClient.delete(`/infra/demo02-category/delete?id=${id}`);
}
/** 导出示例分类 */
export function exportDemo02Category(params: any) {
return requestClient.download('/infra/demo02-category/export-excel', params);
}

View File

@@ -0,0 +1,137 @@
import type { Dayjs } from 'dayjs';
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace Demo03StudentApi {
/** 学生课程信息 */
export interface Demo03Course {
id: number; // 编号
studentId?: number; // 学生编号
name?: string; // 名字
score?: number; // 分数
}
/** 学生班级信息 */
export interface Demo03Grade {
id: number; // 编号
studentId?: number; // 学生编号
name?: string; // 名字
teacher?: string; // 班主任
}
/** 学生信息 */
export interface Demo03Student {
id: number; // 编号
name?: string; // 名字
sex?: number; // 性别
birthday?: Dayjs | string; // 出生日期
description?: string; // 简介
}
}
/** 查询学生分页 */
export function getDemo03StudentPage(params: PageParam) {
return requestClient.get<PageResult<Demo03StudentApi.Demo03Student>>(
'/infra/demo03-student/page',
{ params },
);
}
/** 查询学生详情 */
export function getDemo03Student(id: number) {
return requestClient.get<Demo03StudentApi.Demo03Student>(
`/infra/demo03-student/get?id=${id}`,
);
}
/** 新增学生 */
export function createDemo03Student(data: Demo03StudentApi.Demo03Student) {
return requestClient.post('/infra/demo03-student/create', data);
}
/** 修改学生 */
export function updateDemo03Student(data: Demo03StudentApi.Demo03Student) {
return requestClient.put('/infra/demo03-student/update', data);
}
/** 删除学生 */
export function deleteDemo03Student(id: number) {
return requestClient.delete(`/infra/demo03-student/delete?id=${id}`);
}
/** 导出学生 */
export function exportDemo03Student(params: any) {
return requestClient.download('/infra/demo03-student/export-excel', params);
}
// ==================== 子表(学生课程) ====================
/** 获得学生课程分页 */
export function getDemo03CoursePage(params: PageParam) {
return requestClient.get<PageResult<Demo03StudentApi.Demo03Course>>(
`/infra/demo03-student/demo03-course/page`,
{
params,
},
);
}
/** 新增学生课程 */
export function createDemo03Course(data: Demo03StudentApi.Demo03Course) {
return requestClient.post(`/infra/demo03-student/demo03-course/create`, data);
}
/** 修改学生课程 */
export function updateDemo03Course(data: Demo03StudentApi.Demo03Course) {
return requestClient.put(`/infra/demo03-student/demo03-course/update`, data);
}
/** 删除学生课程 */
export function deleteDemo03Course(id: number) {
return requestClient.delete(
`/infra/demo03-student/demo03-course/delete?id=${id}`,
);
}
/** 获得学生课程 */
export function getDemo03Course(id: number) {
return requestClient.get<Demo03StudentApi.Demo03Course>(
`/infra/demo03-student/demo03-course/get?id=${id}`,
);
}
// ==================== 子表(学生班级) ====================
/** 获得学生班级分页 */
export function getDemo03GradePage(params: PageParam) {
return requestClient.get<PageResult<Demo03StudentApi.Demo03Grade>>(
`/infra/demo03-student/demo03-grade/page`,
{
params,
},
);
}
/** 新增学生班级 */
export function createDemo03Grade(data: Demo03StudentApi.Demo03Grade) {
return requestClient.post(`/infra/demo03-student/demo03-grade/create`, data);
}
/** 修改学生班级 */
export function updateDemo03Grade(data: Demo03StudentApi.Demo03Grade) {
return requestClient.put(`/infra/demo03-student/demo03-grade/update`, data);
}
/** 删除学生班级 */
export function deleteDemo03Grade(id: number) {
return requestClient.delete(
`/infra/demo03-student/demo03-grade/delete?id=${id}`,
);
}
/** 获得学生班级 */
export function getDemo03Grade(id: number) {
return requestClient.get<Demo03StudentApi.Demo03Grade>(
`/infra/demo03-student/demo03-grade/get?id=${id}`,
);
}

View File

@@ -0,0 +1,85 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace Demo03StudentApi {
/** 学生课程信息 */
export interface Demo03Course {
id: number; // 编号
studentId?: number; // 学生编号
name?: string; // 名字
score?: number; // 分数
}
/** 学生班级信息 */
export interface Demo03Grade {
id: number; // 编号
studentId?: number; // 学生编号
name?: string; // 名字
teacher?: string; // 班主任
}
/** 学生信息 */
export interface Demo03Student {
id: number; // 编号
name?: string; // 名字
sex?: number; // 性别
birthday?: Date; // 出生日期
description?: string; // 简介
demo03courses?: Demo03Course[];
demo03grade?: Demo03Grade;
}
}
/** 查询学生分页 */
export function getDemo03StudentPage(params: PageParam) {
return requestClient.get<PageResult<Demo03StudentApi.Demo03Student>>(
'/infra/demo03-student/page',
{ params },
);
}
/** 查询学生详情 */
export function getDemo03Student(id: number) {
return requestClient.get<Demo03StudentApi.Demo03Student>(
`/infra/demo03-student/get?id=${id}`,
);
}
/** 新增学生 */
export function createDemo03Student(data: Demo03StudentApi.Demo03Student) {
return requestClient.post('/infra/demo03-student/create', data);
}
/** 修改学生 */
export function updateDemo03Student(data: Demo03StudentApi.Demo03Student) {
return requestClient.put('/infra/demo03-student/update', data);
}
/** 删除学生 */
export function deleteDemo03Student(id: number) {
return requestClient.delete(`/infra/demo03-student/delete?id=${id}`);
}
/** 导出学生 */
export function exportDemo03Student(params: any) {
return requestClient.download('/infra/demo03-student/export-excel', params);
}
// ==================== 子表(学生课程) ====================
/** 获得学生课程列表 */
export function getDemo03CourseListByStudentId(studentId: number) {
return requestClient.get<Demo03StudentApi.Demo03Course[]>(
`/infra/demo03-student/demo03-course/list-by-student-id?studentId=${studentId}`,
);
}
// ==================== 子表(学生班级) ====================
/** 获得学生班级 */
export function getDemo03GradeByStudentId(studentId: number) {
return requestClient.get<Demo03StudentApi.Demo03Grade>(
`/infra/demo03-student/demo03-grade/get-by-student-id?studentId=${studentId}`,
);
}

View File

@@ -0,0 +1,87 @@
import type { Dayjs } from 'dayjs';
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace Demo03StudentApi {
/** 学生课程信息 */
export interface Demo03Course {
id: number; // 编号
studentId?: number; // 学生编号
name?: string; // 名字
score?: number; // 分数
}
/** 学生班级信息 */
export interface Demo03Grade {
id: number; // 编号
studentId?: number; // 学生编号
name?: string; // 名字
teacher?: string; // 班主任
}
/** 学生信息 */
export interface Demo03Student {
id: number; // 编号
name?: string; // 名字
sex?: number; // 性别
birthday?: Dayjs | string; // 出生日期
description?: string; // 简介
demo03courses?: Demo03Course[];
demo03grade?: Demo03Grade;
}
}
/** 查询学生分页 */
export function getDemo03StudentPage(params: PageParam) {
return requestClient.get<PageResult<Demo03StudentApi.Demo03Student>>(
'/infra/demo03-student/page',
{ params },
);
}
/** 查询学生详情 */
export function getDemo03Student(id: number) {
return requestClient.get<Demo03StudentApi.Demo03Student>(
`/infra/demo03-student/get?id=${id}`,
);
}
/** 新增学生 */
export function createDemo03Student(data: Demo03StudentApi.Demo03Student) {
return requestClient.post('/infra/demo03-student/create', data);
}
/** 修改学生 */
export function updateDemo03Student(data: Demo03StudentApi.Demo03Student) {
return requestClient.put('/infra/demo03-student/update', data);
}
/** 删除学生 */
export function deleteDemo03Student(id: number) {
return requestClient.delete(`/infra/demo03-student/delete?id=${id}`);
}
/** 导出学生 */
export function exportDemo03Student(params: any) {
return requestClient.download('/infra/demo03-student/export-excel', params);
}
// ==================== 子表(学生课程) ====================
/** 获得学生课程列表 */
export function getDemo03CourseListByStudentId(studentId: number) {
return requestClient.get<Demo03StudentApi.Demo03Course[]>(
`/infra/demo03-student/demo03-course/list-by-student-id?studentId=${studentId}`,
);
}
// ==================== 子表(学生班级) ====================
/** 获得学生班级 */
export function getDemo03GradeByStudentId(studentId: number) {
return requestClient.get<Demo03StudentApi.Demo03Grade>(
`/infra/demo03-student/demo03-grade/get-by-student-id?studentId=${studentId}`,
);
}

View File

@@ -0,0 +1,75 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace InfraFileConfigApi {
/** 文件客户端配置 */
export interface FileClientConfig {
basePath: string;
host?: string;
port?: number;
username?: string;
password?: string;
mode?: string;
endpoint?: string;
bucket?: string;
accessKey?: string;
accessSecret?: string;
pathStyle?: boolean;
domain: string;
}
/** 文件配置信息 */
export interface FileConfig {
id?: number;
name: string;
storage?: number;
master: boolean;
visible: boolean;
config: FileClientConfig;
remark: string;
createTime?: Date;
}
}
/** 查询文件配置列表 */
export function getFileConfigPage(params: PageParam) {
return requestClient.get<PageResult<InfraFileConfigApi.FileConfig>>(
'/infra/file-config/page',
{
params,
},
);
}
/** 查询文件配置详情 */
export function getFileConfig(id: number) {
return requestClient.get<InfraFileConfigApi.FileConfig>(
`/infra/file-config/get?id=${id}`,
);
}
/** 更新文件配置为主配置 */
export function updateFileConfigMaster(id: number) {
return requestClient.put(`/infra/file-config/update-master?id=${id}`);
}
/** 新增文件配置 */
export function createFileConfig(data: InfraFileConfigApi.FileConfig) {
return requestClient.post('/infra/file-config/create', data);
}
/** 修改文件配置 */
export function updateFileConfig(data: InfraFileConfigApi.FileConfig) {
return requestClient.put('/infra/file-config/update', data);
}
/** 删除文件配置 */
export function deleteFileConfig(id: number) {
return requestClient.delete(`/infra/file-config/delete?id=${id}`);
}
/** 测试文件配置 */
export function testFileConfig(id: number) {
return requestClient.get(`/infra/file-config/test?id=${id}`);
}

View File

@@ -0,0 +1,73 @@
import type { AxiosRequestConfig, PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
/** Axios 上传进度事件 */
export type AxiosProgressEvent = AxiosRequestConfig['onUploadProgress'];
export namespace InfraFileApi {
/** 文件信息 */
export interface File {
id?: number;
configId?: number;
path: string;
name?: string;
url?: string;
size?: number;
type?: string;
createTime?: Date;
}
/** 文件预签名地址 */
export interface FilePresignedUrlRespVO {
configId: number; // 文件配置编号
uploadUrl: string; // 文件上传 URL
url: string; // 文件 URL
path: string; // 文件路径
}
/** 上传文件 */
export interface FileUploadReqVO {
file: globalThis.File;
directory?: string;
}
}
/** 查询文件列表 */
export function getFilePage(params: PageParam) {
return requestClient.get<PageResult<InfraFileApi.File>>('/infra/file/page', {
params,
});
}
/** 删除文件 */
export function deleteFile(id: number) {
return requestClient.delete(`/infra/file/delete?id=${id}`);
}
/** 获取文件预签名地址 */
export function getFilePresignedUrl(name: string, directory?: string) {
return requestClient.get<InfraFileApi.FilePresignedUrlRespVO>(
'/infra/file/presigned-url',
{
params: { name, directory },
},
);
}
/** 创建文件 */
export function createFile(data: InfraFileApi.File) {
return requestClient.post('/infra/file/create', data);
}
/** 上传文件 */
export function uploadFile(
data: InfraFileApi.FileUploadReqVO,
onUploadProgress?: AxiosProgressEvent,
) {
// 特殊:由于 upload 内部封装,即使 directory 为 undefined也会传递给后端
if (!data.directory) {
delete data.directory;
}
return requestClient.upload('/infra/file/upload', data, { onUploadProgress });
}

View File

@@ -0,0 +1,41 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace InfraJobLogApi {
/** 任务日志信息 */
export interface JobLog {
id?: number;
jobId: number;
handlerName: string;
handlerParam: string;
cronExpression: string;
executeIndex: string;
beginTime: Date;
endTime: Date;
duration: string;
status: number;
createTime?: string;
result: string;
}
}
/** 查询任务日志列表 */
export function getJobLogPage(params: PageParam) {
return requestClient.get<PageResult<InfraJobLogApi.JobLog>>(
'/infra/job-log/page',
{ params },
);
}
/** 查询任务日志详情 */
export function getJobLog(id: number) {
return requestClient.get<InfraJobLogApi.JobLog>(
`/infra/job-log/get?id=${id}`,
);
}
/** 导出定时任务日志 */
export function exportJobLog(params: any) {
return requestClient.download('/infra/job-log/export-excel', { params });
}

View File

@@ -0,0 +1,70 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace InfraJobApi {
/** 任务信息 */
export interface Job {
id?: number;
name: string;
status: number;
handlerName: string;
handlerParam: string;
cronExpression: string;
retryCount: number;
retryInterval: number;
monitorTimeout: number;
createTime?: Date;
}
}
/** 查询任务列表 */
export function getJobPage(params: PageParam) {
return requestClient.get<PageResult<InfraJobApi.Job>>('/infra/job/page', {
params,
});
}
/** 查询任务详情 */
export function getJob(id: number) {
return requestClient.get<InfraJobApi.Job>(`/infra/job/get?id=${id}`);
}
/** 新增任务 */
export function createJob(data: InfraJobApi.Job) {
return requestClient.post('/infra/job/create', data);
}
/** 修改定时任务调度 */
export function updateJob(data: InfraJobApi.Job) {
return requestClient.put('/infra/job/update', data);
}
/** 删除定时任务调度 */
export function deleteJob(id: number) {
return requestClient.delete(`/infra/job/delete?id=${id}`);
}
/** 导出定时任务调度 */
export function exportJob(params: any) {
return requestClient.download('/infra/job/export-excel', { params });
}
/** 任务状态修改 */
export function updateJobStatus(id: number, status: number) {
const params = {
id,
status,
};
return requestClient.put('/infra/job/update-status', { params });
}
/** 定时任务立即执行一次 */
export function runJob(id: number) {
return requestClient.put(`/infra/job/trigger?id=${id}`);
}
/** 获得定时任务的下 n 次执行时间 */
export function getJobNextTimes(id: number) {
return requestClient.get(`/infra/job/get_next_times?id=${id}`);
}

View File

@@ -0,0 +1,190 @@
import { requestClient } from '#/api/request';
export namespace InfraRedisApi {
/** Redis 信息 */
export interface RedisInfo {
io_threaded_reads_processed: string;
tracking_clients: string;
uptime_in_seconds: string;
cluster_connections: string;
current_cow_size: string;
maxmemory_human: string;
aof_last_cow_size: string;
master_replid2: string;
mem_replication_backlog: string;
aof_rewrite_scheduled: string;
total_net_input_bytes: string;
rss_overhead_ratio: string;
hz: string;
current_cow_size_age: string;
redis_build_id: string;
errorstat_BUSYGROUP: string;
aof_last_bgrewrite_status: string;
multiplexing_api: string;
client_recent_max_output_buffer: string;
allocator_resident: string;
mem_fragmentation_bytes: string;
aof_current_size: string;
repl_backlog_first_byte_offset: string;
tracking_total_prefixes: string;
redis_mode: string;
redis_git_dirty: string;
aof_delayed_fsync: string;
allocator_rss_bytes: string;
repl_backlog_histlen: string;
io_threads_active: string;
rss_overhead_bytes: string;
total_system_memory: string;
loading: string;
evicted_keys: string;
maxclients: string;
cluster_enabled: string;
redis_version: string;
repl_backlog_active: string;
mem_aof_buffer: string;
allocator_frag_bytes: string;
io_threaded_writes_processed: string;
instantaneous_ops_per_sec: string;
used_memory_human: string;
total_error_replies: string;
role: string;
maxmemory: string;
used_memory_lua: string;
rdb_current_bgsave_time_sec: string;
used_memory_startup: string;
used_cpu_sys_main_thread: string;
lazyfree_pending_objects: string;
aof_pending_bio_fsync: string;
used_memory_dataset_perc: string;
allocator_frag_ratio: string;
arch_bits: string;
used_cpu_user_main_thread: string;
mem_clients_normal: string;
expired_time_cap_reached_count: string;
unexpected_error_replies: string;
mem_fragmentation_ratio: string;
aof_last_rewrite_time_sec: string;
master_replid: string;
aof_rewrite_in_progress: string;
lru_clock: string;
maxmemory_policy: string;
run_id: string;
latest_fork_usec: string;
tracking_total_items: string;
total_commands_processed: string;
expired_keys: string;
errorstat_ERR: string;
used_memory: string;
module_fork_in_progress: string;
errorstat_WRONGPASS: string;
aof_buffer_length: string;
dump_payload_sanitizations: string;
mem_clients_slaves: string;
keyspace_misses: string;
server_time_usec: string;
executable: string;
lazyfreed_objects: string;
db0: string;
used_memory_peak_human: string;
keyspace_hits: string;
rdb_last_cow_size: string;
aof_pending_rewrite: string;
used_memory_overhead: string;
active_defrag_hits: string;
tcp_port: string;
uptime_in_days: string;
used_memory_peak_perc: string;
current_save_keys_processed: string;
blocked_clients: string;
total_reads_processed: string;
expire_cycle_cpu_milliseconds: string;
sync_partial_err: string;
used_memory_scripts_human: string;
aof_current_rewrite_time_sec: string;
aof_enabled: string;
process_supervised: string;
master_repl_offset: string;
used_memory_dataset: string;
used_cpu_user: string;
rdb_last_bgsave_status: string;
tracking_total_keys: string;
atomicvar_api: string;
allocator_rss_ratio: string;
client_recent_max_input_buffer: string;
clients_in_timeout_table: string;
aof_last_write_status: string;
mem_allocator: string;
used_memory_scripts: string;
used_memory_peak: string;
process_id: string;
master_failover_state: string;
errorstat_NOAUTH: string;
used_cpu_sys: string;
repl_backlog_size: string;
connected_slaves: string;
current_save_keys_total: string;
gcc_version: string;
total_system_memory_human: string;
sync_full: string;
connected_clients: string;
module_fork_last_cow_size: string;
total_writes_processed: string;
allocator_active: string;
total_net_output_bytes: string;
pubsub_channels: string;
current_fork_perc: string;
active_defrag_key_hits: string;
rdb_changes_since_last_save: string;
instantaneous_input_kbps: string;
used_memory_rss_human: string;
configured_hz: string;
expired_stale_perc: string;
active_defrag_misses: string;
used_cpu_sys_children: string;
number_of_cached_scripts: string;
sync_partial_ok: string;
used_memory_lua_human: string;
rdb_last_save_time: string;
pubsub_patterns: string;
slave_expires_tracked_keys: string;
redis_git_sha1: string;
used_memory_rss: string;
rdb_last_bgsave_time_sec: string;
os: string;
mem_not_counted_for_evict: string;
active_defrag_running: string;
rejected_connections: string;
aof_rewrite_buffer_length: string;
total_forks: string;
active_defrag_key_misses: string;
allocator_allocated: string;
aof_base_size: string;
instantaneous_output_kbps: string;
second_repl_offset: string;
rdb_bgsave_in_progress: string;
used_cpu_user_children: string;
total_connections_received: string;
migrate_cached_sockets: string;
}
/** Redis 命令统计 */
export interface RedisCommandStats {
command: string;
calls: number;
usec: number;
}
/** Redis 监控信息 */
export interface RedisMonitorInfo {
info: RedisInfo;
dbSize: number;
commandStats: RedisCommandStats[];
}
}
/** 获取 Redis 监控信息 */
export function getRedisMonitorInfo() {
return requestClient.get<InfraRedisApi.RedisMonitorInfo>(
'/infra/redis/get-monitor-info',
);
}

View File

@@ -0,0 +1,149 @@
/**
* 该文件可自行根据业务逻辑进行调整
*/
import type { RequestClientOptions } from '@vben/request';
import { isTenantEnable, 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);
const tenantEnable = isTenantEnable();
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 refreshToken = accessStore.refreshToken as string;
if (!refreshToken) {
throw new Error('Refresh token is null!');
}
const resp = await refreshTokenApi(refreshToken);
const newToken = resp?.data?.data?.accessToken;
// add by 芋艿:这里一定要抛出 resp.data从而触发 authenticateResponseInterceptor 中,刷新令牌失败!!!
if (!newToken) {
throw 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;
// 添加租户编号
config.headers['tenant-id'] = tenantEnable
? accessStore.tenantId
: undefined;
// 只有登录时,才设置 visit-tenant-id 访问租户
config.headers['visit-tenant-id'] = tenantEnable
? accessStore.visitTenantId
: undefined;
return config;
},
});
// 处理返回的响应数据格式
client.addResponseInterceptor(
defaultResponseInterceptor({
codeField: 'code',
dataField: 'data',
successCode: 0,
}),
);
// 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?.message ?? responseData.msg ?? '';
// add by 芋艿:特殊:避免 401 “账号未登录”,重复提示。因为,此时会跳转到登录界面,只需提示一次!!!
if (error?.data?.code === 401) {
return;
}
// 如果没有错误信息,则会根据状态码进行提示
message.error(errorMessage || msg);
}),
);
return client;
}
export const requestClient = createRequestClient(apiURL, {
responseReturn: 'data',
});
export const baseRequestClient = new RequestClient({ baseURL: apiURL });
baseRequestClient.addRequestInterceptor({
fulfilled: (config) => {
const accessStore = useAccessStore();
// 添加租户编号
config.headers['tenant-id'] = tenantEnable
? accessStore.tenantId
: undefined;
// 只有登录时,才设置 visit-tenant-id 访问租户
config.headers['visit-tenant-id'] = tenantEnable
? accessStore.visitTenantId
: undefined;
return config;
},
});

View File

@@ -0,0 +1,24 @@
import { requestClient } from '#/api/request';
export namespace SystemAreaApi {
/** 地区信息 */
export interface Area {
id?: number;
name: string;
code: string;
parentId?: number;
sort?: number;
status?: number;
createTime?: Date;
}
}
/** 获得地区树 */
export function getAreaTree() {
return requestClient.get<SystemAreaApi.Area[]>('/system/area/tree');
}
/** 获得 IP 对应的地区名 */
export function getAreaByIp(ip: string) {
return requestClient.get<string>(`/system/area/get-by-ip?ip=${ip}`);
}

View File

@@ -0,0 +1,47 @@
import { requestClient } from '#/api/request';
export namespace SystemDeptApi {
/** 部门信息 */
export interface Dept {
id?: number;
name: string;
parentId?: number;
status: number;
sort: number;
leaderUserId: number;
phone: string;
email: string;
createTime: Date;
children?: Dept[];
}
}
/** 查询部门(精简)列表 */
export async function getSimpleDeptList() {
return requestClient.get<SystemDeptApi.Dept[]>('/system/dept/simple-list');
}
/** 查询部门列表 */
export async function getDeptList() {
return requestClient.get('/system/dept/list');
}
/** 查询部门详情 */
export async function getDept(id: number) {
return requestClient.get<SystemDeptApi.Dept>(`/system/dept/get?id=${id}`);
}
/** 新增部门 */
export async function createDept(data: SystemDeptApi.Dept) {
return requestClient.post('/system/dept/create', data);
}
/** 修改部门 */
export async function updateDept(data: SystemDeptApi.Dept) {
return requestClient.put('/system/dept/update', data);
}
/** 删除部门 */
export async function deleteDept(id: number) {
return requestClient.delete(`/system/dept/delete?id=${id}`);
}

View File

@@ -0,0 +1,54 @@
import type { PageParam } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace SystemDictDataApi {
/** 字典数据 */
export type DictData = {
colorType: string;
createTime: Date;
cssClass: string;
dictType: string;
id?: number;
label: string;
remark: string;
sort?: number;
status: number;
value: string;
};
}
// 查询字典数据(精简)列表
export function getSimpleDictDataList() {
return requestClient.get('/system/dict-data/simple-list');
}
// 查询字典数据列表
export function getDictDataPage(params: PageParam) {
return requestClient.get('/system/dict-data/page', { params });
}
// 查询字典数据详情
export function getDictData(id: number) {
return requestClient.get(`/system/dict-data/get?id=${id}`);
}
// 新增字典数据
export function createDictData(data: SystemDictDataApi.DictData) {
return requestClient.post('/system/dict-data/create', data);
}
// 修改字典数据
export function updateDictData(data: SystemDictDataApi.DictData) {
return requestClient.put('/system/dict-data/update', data);
}
// 删除字典数据
export function deleteDictData(id: number) {
return requestClient.delete(`/system/dict-data/delete?id=${id}`);
}
// 导出字典类型数据
export function exportDictData(params: any) {
return requestClient.download('/system/dict-data/export', { params });
}

View File

@@ -0,0 +1,48 @@
import { requestClient } from '#/api/request';
export namespace SystemDictTypeApi {
/** 字典类型 */
export type DictType = {
createTime: Date;
id?: number;
name: string;
remark: string;
status: number;
type: string;
};
}
// 查询字典(精简)列表
export function getSimpleDictTypeList() {
return requestClient.get('/system/dict-type/list-all-simple');
}
// 查询字典列表
export function getDictTypePage(params: any) {
return requestClient.get('/system/dict-type/page', { params });
}
// 查询字典详情
export function getDictType(id: number) {
return requestClient.get(`/system/dict-type/get?id=${id}`);
}
// 新增字典
export function createDictType(data: SystemDictTypeApi.DictType) {
return requestClient.post('/system/dict-type/create', data);
}
// 修改字典
export function updateDictType(data: SystemDictTypeApi.DictType) {
return requestClient.put('/system/dict-type/update', data);
}
// 删除字典
export function deleteDictType(id: number) {
return requestClient.delete(`/system/dict-type/delete?id=${id}`);
}
// 导出字典类型
export function exportDictType(params: any) {
return requestClient.download('/system/dict-type/export', { params });
}

View File

@@ -0,0 +1,33 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace SystemLoginLogApi {
/** 登录日志信息 */
export interface LoginLog {
id: number;
logType: number;
traceId: number;
userId: number;
userType: number;
username: string;
result: number;
status: number;
userIp: string;
userAgent: string;
createTime: string;
}
}
/** 查询登录日志列表 */
export function getLoginLogPage(params: PageParam) {
return requestClient.get<PageResult<SystemLoginLogApi.LoginLog>>(
'/system/login-log/page',
{ params },
);
}
/** 导出登录日志 */
export function exportLoginLog(params: any) {
return requestClient.download('/system/login-log/export-excel', { params });
}

View File

@@ -0,0 +1,57 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace SystemMailAccountApi {
/** 邮箱账号 */
export interface MailAccount {
id: number;
mail: string;
username: string;
password: string;
host: string;
port: number;
sslEnable: boolean;
starttlsEnable: boolean;
status: number;
createTime: Date;
remark: string;
}
}
/** 查询邮箱账号列表 */
export function getMailAccountPage(params: PageParam) {
return requestClient.get<PageResult<SystemMailAccountApi.MailAccount>>(
'/system/mail-account/page',
{ params },
);
}
/** 查询邮箱账号详情 */
export function getMailAccount(id: number) {
return requestClient.get<SystemMailAccountApi.MailAccount>(
`/system/mail-account/get?id=${id}`,
);
}
/** 新增邮箱账号 */
export function createMailAccount(data: SystemMailAccountApi.MailAccount) {
return requestClient.post('/system/mail-account/create', data);
}
/** 修改邮箱账号 */
export function updateMailAccount(data: SystemMailAccountApi.MailAccount) {
return requestClient.put('/system/mail-account/update', data);
}
/** 删除邮箱账号 */
export function deleteMailAccount(id: number) {
return requestClient.delete(`/system/mail-account/delete?id=${id}`);
}
/** 获得邮箱账号精简列表 */
export function getSimpleMailAccountList() {
return requestClient.get<SystemMailAccountApi.MailAccount[]>(
'/system/mail-account/simple-list',
);
}

View File

@@ -0,0 +1,46 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace SystemMailLogApi {
/** 邮件日志 */
export interface MailLog {
id: number;
userId: number;
userType: number;
toMail: string;
accountId: number;
fromMail: string;
templateId: number;
templateCode: string;
templateNickname: string;
templateTitle: string;
templateContent: string;
templateParams: string;
sendStatus: number;
sendTime: string;
sendMessageId: string;
sendException: string;
createTime: string;
}
}
/** 查询邮件日志列表 */
export function getMailLogPage(params: PageParam) {
return requestClient.get<PageResult<SystemMailLogApi.MailLog>>(
'/system/mail-log/page',
{ params },
);
}
/** 查询邮件日志详情 */
export function getMailLog(id: number) {
return requestClient.get<SystemMailLogApi.MailLog>(
`/system/mail-log/get?id=${id}`,
);
}
/** 重新发送邮件 */
export function resendMail(id: number) {
return requestClient.put(`/system/mail-log/resend?id=${id}`);
}

View File

@@ -0,0 +1,62 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace SystemMailTemplateApi {
/** 邮件模版信息 */
export interface MailTemplate {
id: number;
name: string;
code: string;
accountId: number;
nickname: string;
title: string;
content: string;
params: string[];
status: number;
remark: string;
createTime: Date;
}
/** 邮件发送信息 */
export interface MailSendReqVO {
mail: string;
templateCode: string;
templateParams: Record<string, any>;
}
}
/** 查询邮件模版列表 */
export function getMailTemplatePage(params: PageParam) {
return requestClient.get<PageResult<SystemMailTemplateApi.MailTemplate>>(
'/system/mail-template/page',
{ params },
);
}
/** 查询邮件模版详情 */
export function getMailTemplate(id: number) {
return requestClient.get<SystemMailTemplateApi.MailTemplate>(
`/system/mail-template/get?id=${id}`,
);
}
/** 新增邮件模版 */
export function createMailTemplate(data: SystemMailTemplateApi.MailTemplate) {
return requestClient.post('/system/mail-template/create', data);
}
/** 修改邮件模版 */
export function updateMailTemplate(data: SystemMailTemplateApi.MailTemplate) {
return requestClient.put('/system/mail-template/update', data);
}
/** 删除邮件模版 */
export function deleteMailTemplate(id: number) {
return requestClient.delete(`/system/mail-template/delete?id=${id}`);
}
/** 发送邮件 */
export function sendMail(data: SystemMailTemplateApi.MailSendReqVO) {
return requestClient.post('/system/mail-template/send-mail', data);
}

View File

@@ -0,0 +1,54 @@
import { requestClient } from '#/api/request';
export namespace SystemMenuApi {
/** 菜单信息 */
export interface Menu {
id: number;
name: string;
permission: string;
type: number;
sort: number;
parentId: number;
path: string;
icon: string;
component: string;
componentName?: string;
status: number;
visible: boolean;
keepAlive: boolean;
alwaysShow?: boolean;
createTime: Date;
}
}
/** 查询菜单(精简)列表 */
export async function getSimpleMenusList() {
return requestClient.get<SystemMenuApi.Menu[]>('/system/menu/simple-list');
}
/** 查询菜单列表 */
export async function getMenuList(params?: Record<string, any>) {
return requestClient.get<SystemMenuApi.Menu[]>('/system/menu/list', {
params,
});
}
/** 获取菜单详情 */
export async function getMenu(id: number) {
return requestClient.get<SystemMenuApi.Menu>(`/system/menu/get?id=${id}`);
}
/** 新增菜单 */
export async function createMenu(data: SystemMenuApi.Menu) {
return requestClient.post('/system/menu/create', data);
}
/** 修改菜单 */
export async function updateMenu(data: SystemMenuApi.Menu) {
return requestClient.put('/system/menu/update', data);
}
/** 删除菜单 */
export async function deleteMenu(id: number) {
return requestClient.delete(`/system/menu/delete?id=${id}`);
}

View File

@@ -0,0 +1,52 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace SystemNoticeApi {
/** 公告信息 */
export interface Notice {
id?: number;
title: string;
type: number;
content: string;
status: number;
remark: string;
creator?: string;
createTime?: Date;
}
}
/** 查询公告列表 */
export function getNoticePage(params: PageParam) {
return requestClient.get<PageResult<SystemNoticeApi.Notice>>(
'/system/notice/page',
{ params },
);
}
/** 查询公告详情 */
export function getNotice(id: number) {
return requestClient.get<SystemNoticeApi.Notice>(
`/system/notice/get?id=${id}`,
);
}
/** 新增公告 */
export function createNotice(data: SystemNoticeApi.Notice) {
return requestClient.post('/system/notice/create', data);
}
/** 修改公告 */
export function updateNotice(data: SystemNoticeApi.Notice) {
return requestClient.put('/system/notice/update', data);
}
/** 删除公告 */
export function deleteNotice(id: number) {
return requestClient.delete(`/system/notice/delete?id=${id}`);
}
/** 推送公告 */
export function pushNotice(id: number) {
return requestClient.post(`/system/notice/push?id=${id}`);
}

View File

@@ -0,0 +1,65 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace SystemNotifyMessageApi {
/** 站内信消息信息 */
export interface NotifyMessage {
id: number;
userId: number;
userType: number;
templateId: number;
templateCode: string;
templateNickname: string;
templateContent: string;
templateType: number;
templateParams: string;
readStatus: boolean;
readTime: Date;
createTime: Date;
}
}
/** 查询站内信消息列表 */
export function getNotifyMessagePage(params: PageParam) {
return requestClient.get<PageResult<SystemNotifyMessageApi.NotifyMessage>>(
'/system/notify-message/page',
{ params },
);
}
/** 获得我的站内信分页 */
export function getMyNotifyMessagePage(params: PageParam) {
return requestClient.get<PageResult<SystemNotifyMessageApi.NotifyMessage>>(
'/system/notify-message/my-page',
{ params },
);
}
/** 批量标记已读 */
export function updateNotifyMessageRead(ids: number[]) {
return requestClient.put(
'/system/notify-message/update-read',
{},
{
params: { ids },
},
);
}
/** 标记所有站内信为已读 */
export function updateAllNotifyMessageRead() {
return requestClient.put('/system/notify-message/update-all-read');
}
/** 获取当前用户的最新站内信列表 */
export function getUnreadNotifyMessageList() {
return requestClient.get<SystemNotifyMessageApi.NotifyMessage[]>(
'/system/notify-message/get-unread-list',
);
}
/** 获得当前用户的未读站内信数量 */
export function getUnreadNotifyMessageCount() {
return requestClient.get<number>('/system/notify-message/get-unread-count');
}

View File

@@ -0,0 +1,72 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace SystemNotifyTemplateApi {
/** 站内信模板信息 */
export interface NotifyTemplate {
id?: number;
name: string;
nickname: string;
code: string;
content: string;
type?: number;
params: string[];
status: number;
remark: string;
}
/** 发送站内信请求 */
export interface NotifySendReqVO {
userId: number;
userType: number;
templateCode: string;
templateParams: Record<string, any>;
}
}
/** 查询站内信模板列表 */
export function getNotifyTemplatePage(params: PageParam) {
return requestClient.get<PageResult<SystemNotifyTemplateApi.NotifyTemplate>>(
'/system/notify-template/page',
{ params },
);
}
/** 查询站内信模板详情 */
export function getNotifyTemplate(id: number) {
return requestClient.get<SystemNotifyTemplateApi.NotifyTemplate>(
`/system/notify-template/get?id=${id}`,
);
}
/** 新增站内信模板 */
export function createNotifyTemplate(
data: SystemNotifyTemplateApi.NotifyTemplate,
) {
return requestClient.post('/system/notify-template/create', data);
}
/** 修改站内信模板 */
export function updateNotifyTemplate(
data: SystemNotifyTemplateApi.NotifyTemplate,
) {
return requestClient.put('/system/notify-template/update', data);
}
/** 删除站内信模板 */
export function deleteNotifyTemplate(id: number) {
return requestClient.delete(`/system/notify-template/delete?id=${id}`);
}
/** 导出站内信模板 */
export function exportNotifyTemplate(params: any) {
return requestClient.download('/system/notify-template/export-excel', {
params,
});
}
/** 发送站内信 */
export function sendNotify(data: SystemNotifyTemplateApi.NotifySendReqVO) {
return requestClient.post('/system/notify-template/send-notify', data);
}

View File

@@ -0,0 +1,57 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace SystemOAuth2ClientApi {
/** OAuth2.0 客户端信息 */
export interface OAuth2Client {
id?: number;
clientId: string;
secret: string;
name: string;
logo: string;
description: string;
status: number;
accessTokenValiditySeconds: number;
refreshTokenValiditySeconds: number;
redirectUris: string[];
autoApprove: boolean;
authorizedGrantTypes: string[];
scopes: string[];
authorities: string[];
resourceIds: string[];
additionalInformation: string;
isAdditionalInformationJson: boolean;
createTime?: Date;
}
}
/** 查询 OAuth2.0 客户端列表 */
export function getOAuth2ClientPage(params: PageParam) {
return requestClient.get<PageResult<SystemOAuth2ClientApi.OAuth2Client>>(
'/system/oauth2-client/page',
{ params },
);
}
/** 查询 OAuth2.0 客户端详情 */
export function getOAuth2Client(id: number) {
return requestClient.get<SystemOAuth2ClientApi.OAuth2Client>(
`/system/oauth2-client/get?id=${id}`,
);
}
/** 新增 OAuth2.0 客户端 */
export function createOAuth2Client(data: SystemOAuth2ClientApi.OAuth2Client) {
return requestClient.post('/system/oauth2-client/create', data);
}
/** 修改 OAuth2.0 客户端 */
export function updateOAuth2Client(data: SystemOAuth2ClientApi.OAuth2Client) {
return requestClient.put('/system/oauth2-client/update', data);
}
/** 删除 OAuth2.0 客户端 */
export function deleteOAuth2Client(id: number) {
return requestClient.delete(`/system/oauth2-client/delete?id=${id}`);
}

View File

@@ -0,0 +1,58 @@
import { requestClient } from '#/api/request';
/** OAuth2.0 授权信息响应 */
export namespace SystemOAuth2ClientApi {
/** 授权信息 */
export interface AuthorizeInfoRespVO {
client: {
logo: string;
name: string;
};
scopes: {
key: string;
value: boolean;
}[];
}
}
/** 获得授权信息 */
export function getAuthorize(clientId: string) {
return requestClient.get<SystemOAuth2ClientApi.AuthorizeInfoRespVO>(
`/system/oauth2/authorize?clientId=${clientId}`,
);
}
/** 发起授权 */
export function authorize(
responseType: string,
clientId: string,
redirectUri: string,
state: string,
autoApprove: boolean,
checkedScopes: string[],
uncheckedScopes: string[],
) {
// 构建 scopes
const scopes: Record<string, boolean> = {};
for (const scope of checkedScopes) {
scopes[scope] = true;
}
for (const scope of uncheckedScopes) {
scopes[scope] = false;
}
// 发起请求
return requestClient.post<string>('/system/oauth2/authorize', null, {
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
params: {
response_type: responseType,
client_id: clientId,
redirect_uri: redirectUri,
state,
auto_approve: autoApprove,
scope: JSON.stringify(scopes),
},
});
}

View File

@@ -0,0 +1,34 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace SystemOAuth2TokenApi {
/** OAuth2.0 令牌信息 */
export interface OAuth2Token {
id?: number;
accessToken: string;
refreshToken: string;
userId: number;
userType: number;
clientId: string;
createTime?: Date;
expiresTime?: Date;
}
}
/** 查询 OAuth2.0 令牌列表 */
export function getOAuth2TokenPage(params: PageParam) {
return requestClient.get<PageResult<SystemOAuth2TokenApi.OAuth2Token>>(
'/system/oauth2-token/page',
{
params,
},
);
}
/** 删除 OAuth2.0 令牌 */
export function deleteOAuth2Token(accessToken: string) {
return requestClient.delete(
`/system/oauth2-token/delete?accessToken=${accessToken}`,
);
}

View File

@@ -0,0 +1,39 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace SystemOperateLogApi {
/** 操作日志信息 */
export interface OperateLog {
id: number;
traceId: string;
userType: number;
userId: number;
userName: string;
type: string;
subType: string;
bizId: number;
action: string;
extra: string;
requestMethod: string;
requestUrl: string;
userIp: string;
userAgent: string;
creator: string;
creatorName: string;
createTime: string;
}
}
/** 查询操作日志列表 */
export function getOperateLogPage(params: PageParam) {
return requestClient.get<PageResult<SystemOperateLogApi.OperateLog>>(
'/system/operate-log/page',
{ params },
);
}
/** 导出操作日志 */
export function exportOperateLog(params: any) {
return requestClient.download('/system/operate-log/export-excel', { params });
}

View File

@@ -0,0 +1,57 @@
import { requestClient } from '#/api/request';
export namespace SystemPermissionApi {
/** 分配用户角色请求 */
export interface AssignUserRoleReqVO {
userId: number;
roleIds: number[];
}
/** 分配角色菜单请求 */
export interface AssignRoleMenuReqVO {
roleId: number;
menuIds: number[];
}
/** 分配角色数据权限请求 */
export interface AssignRoleDataScopeReqVO {
roleId: number;
dataScope: number;
dataScopeDeptIds: number[];
}
}
/** 查询角色拥有的菜单权限 */
export async function getRoleMenuList(roleId: number) {
return requestClient.get(
`/system/permission/list-role-menus?roleId=${roleId}`,
);
}
/** 赋予角色菜单权限 */
export async function assignRoleMenu(
data: SystemPermissionApi.AssignRoleMenuReqVO,
) {
return requestClient.post('/system/permission/assign-role-menu', data);
}
/** 赋予角色数据权限 */
export async function assignRoleDataScope(
data: SystemPermissionApi.AssignRoleDataScopeReqVO,
) {
return requestClient.post('/system/permission/assign-role-data-scope', data);
}
/** 查询用户拥有的角色数组 */
export async function getUserRoleList(userId: number) {
return requestClient.get(
`/system/permission/list-user-roles?userId=${userId}`,
);
}
/** 赋予用户角色 */
export async function assignUserRole(
data: SystemPermissionApi.AssignUserRoleReqVO,
) {
return requestClient.post('/system/permission/assign-user-role', data);
}

View File

@@ -0,0 +1,58 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace SystemPostApi {
/** 岗位信息 */
export interface Post {
id?: number;
name: string;
code: string;
sort: number;
status: number;
remark: string;
createTime?: Date;
}
}
/** 查询岗位列表 */
export function getPostPage(params: PageParam) {
return requestClient.get<PageResult<SystemPostApi.Post>>(
'/system/post/page',
{
params,
},
);
}
/** 获取岗位精简信息列表 */
export function getSimplePostList() {
return requestClient.get<SystemPostApi.Post[]>('/system/post/simple-list');
}
/** 查询岗位详情 */
export function getPost(id: number) {
return requestClient.get<SystemPostApi.Post>(`/system/post/get?id=${id}`);
}
/** 新增岗位 */
export function createPost(data: SystemPostApi.Post) {
return requestClient.post('/system/post/create', data);
}
/** 修改岗位 */
export function updatePost(data: SystemPostApi.Post) {
return requestClient.put('/system/post/update', data);
}
/** 删除岗位 */
export function deletePost(id: number) {
return requestClient.delete(`/system/post/delete?id=${id}`);
}
/** 导出岗位 */
export function exportPost(params: any) {
return requestClient.download('/system/post/export', {
params,
});
}

View File

@@ -0,0 +1,58 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace SystemRoleApi {
/** 角色信息 */
export interface Role {
id?: number;
name: string;
code: string;
sort: number;
status: number;
type: number;
dataScope: number;
dataScopeDeptIds: number[];
createTime?: Date;
}
}
/** 查询角色列表 */
export function getRolePage(params: PageParam) {
return requestClient.get<PageResult<SystemRoleApi.Role>>(
'/system/role/page',
{ params },
);
}
/** 查询角色(精简)列表 */
export function getSimpleRoleList() {
return requestClient.get<SystemRoleApi.Role[]>('/system/role/simple-list');
}
/** 查询角色详情 */
export function getRole(id: number) {
return requestClient.get<SystemRoleApi.Role>(`/system/role/get?id=${id}`);
}
/** 新增角色 */
export function createRole(data: SystemRoleApi.Role) {
return requestClient.post('/system/role/create', data);
}
/** 修改角色 */
export function updateRole(data: SystemRoleApi.Role) {
return requestClient.put('/system/role/update', data);
}
/** 删除角色 */
export function deleteRole(id: number) {
return requestClient.delete(`/system/role/delete?id=${id}`);
}
/** 导出角色 */
export function exportRole(params: any) {
return requestClient.download('/system/role/export-excel', {
params,
});
}

View File

@@ -0,0 +1,60 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace SystemSmsChannelApi {
/** 短信渠道信息 */
export interface SmsChannel {
id?: number;
code: string;
status: number;
signature: string;
remark: string;
apiKey: string;
apiSecret: string;
callbackUrl: string;
createTime?: Date;
}
}
/** 查询短信渠道列表 */
export function getSmsChannelPage(params: PageParam) {
return requestClient.get<PageResult<SystemSmsChannelApi.SmsChannel>>(
'/system/sms-channel/page',
{ params },
);
}
/** 获得短信渠道精简列表 */
export function getSimpleSmsChannelList() {
return requestClient.get<SystemSmsChannelApi.SmsChannel[]>(
'/system/sms-channel/simple-list',
);
}
/** 查询短信渠道详情 */
export function getSmsChannel(id: number) {
return requestClient.get<SystemSmsChannelApi.SmsChannel>(
`/system/sms-channel/get?id=${id}`,
);
}
/** 新增短信渠道 */
export function createSmsChannel(data: SystemSmsChannelApi.SmsChannel) {
return requestClient.post('/system/sms-channel/create', data);
}
/** 修改短信渠道 */
export function updateSmsChannel(data: SystemSmsChannelApi.SmsChannel) {
return requestClient.put('/system/sms-channel/update', data);
}
/** 删除短信渠道 */
export function deleteSmsChannel(id: number) {
return requestClient.delete(`/system/sms-channel/delete?id=${id}`);
}
/** 导出短信渠道 */
export function exportSmsChannel(params: any) {
return requestClient.download('/system/sms-channel/export', { params });
}

View File

@@ -0,0 +1,45 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace SystemSmsLogApi {
/** 短信日志信息 */
export interface SmsLog {
id?: number;
channelId?: number;
channelCode: string;
templateId?: number;
templateCode: string;
templateType?: number;
templateContent: string;
templateParams?: Record<string, any>;
apiTemplateId: string;
mobile: string;
userId?: number;
userType?: number;
sendStatus?: number;
sendTime?: string;
apiSendCode: string;
apiSendMsg: string;
apiRequestId: string;
apiSerialNo: string;
receiveStatus?: number;
receiveTime?: string;
apiReceiveCode: string;
apiReceiveMsg: string;
createTime: string;
}
}
/** 查询短信日志列表 */
export function getSmsLogPage(params: PageParam) {
return requestClient.get<PageResult<SystemSmsLogApi.SmsLog>>(
'/system/sms-log/page',
{ params },
);
}
/** 导出短信日志 */
export function exportSmsLog(params: any) {
return requestClient.download('/system/sms-log/export-excel', { params });
}

View File

@@ -0,0 +1,70 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace SystemSmsTemplateApi {
/** 短信模板信息 */
export interface SmsTemplate {
id?: number;
type?: number;
status: number;
code: string;
name: string;
content: string;
remark: string;
apiTemplateId: string;
channelId?: number;
channelCode?: string;
params?: string[];
createTime?: Date;
}
/** 发送短信请求 */
export interface SmsSendReqVO {
mobile: string;
templateCode: string;
templateParams: Record<string, any>;
}
}
/** 查询短信模板列表 */
export function getSmsTemplatePage(params: PageParam) {
return requestClient.get<PageResult<SystemSmsTemplateApi.SmsTemplate>>(
'/system/sms-template/page',
{ params },
);
}
/** 查询短信模板详情 */
export function getSmsTemplate(id: number) {
return requestClient.get<SystemSmsTemplateApi.SmsTemplate>(
`/system/sms-template/get?id=${id}`,
);
}
/** 新增短信模板 */
export function createSmsTemplate(data: SystemSmsTemplateApi.SmsTemplate) {
return requestClient.post('/system/sms-template/create', data);
}
/** 修改短信模板 */
export function updateSmsTemplate(data: SystemSmsTemplateApi.SmsTemplate) {
return requestClient.put('/system/sms-template/update', data);
}
/** 删除短信模板 */
export function deleteSmsTemplate(id: number) {
return requestClient.delete(`/system/sms-template/delete?id=${id}`);
}
/** 导出短信模板 */
export function exportSmsTemplate(params: any) {
return requestClient.download('/system/sms-template/export-excel', {
params,
});
}
/** 发送短信 */
export function sendSms(data: SystemSmsTemplateApi.SmsSendReqVO) {
return requestClient.post('/system/sms-template/send-sms', data);
}

View File

@@ -0,0 +1,48 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace SystemSocialClientApi {
/** 社交客户端信息 */
export interface SocialClient {
id?: number;
name: string;
socialType: number;
userType: number;
clientId: string;
clientSecret: string;
agentId?: string;
status: number;
createTime?: Date;
}
}
/** 查询社交客户端列表 */
export function getSocialClientPage(params: PageParam) {
return requestClient.get<PageResult<SystemSocialClientApi.SocialClient>>(
'/system/social-client/page',
{ params },
);
}
/** 查询社交客户端详情 */
export function getSocialClient(id: number) {
return requestClient.get<SystemSocialClientApi.SocialClient>(
`/system/social-client/get?id=${id}`,
);
}
/** 新增社交客户端 */
export function createSocialClient(data: SystemSocialClientApi.SocialClient) {
return requestClient.post('/system/social-client/create', data);
}
/** 修改社交客户端 */
export function updateSocialClient(data: SystemSocialClientApi.SocialClient) {
return requestClient.put('/system/social-client/update', data);
}
/** 删除社交客户端 */
export function deleteSocialClient(id: number) {
return requestClient.delete(`/system/social-client/delete?id=${id}`);
}

View File

@@ -0,0 +1,66 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace SystemSocialUserApi {
/** 社交用户信息 */
export interface SocialUser {
id?: number;
type: number;
openid: string;
token: string;
rawTokenInfo: string;
nickname: string;
avatar: string;
rawUserInfo: string;
code: string;
state: string;
createTime?: Date;
updateTime?: Date;
}
/** 社交绑定请求 */
export interface SocialUserBindReqVO {
type: number;
code: string;
state: string;
}
/** 取消社交绑定请求 */
export interface SocialUserUnbindReqVO {
type: number;
openid: string;
}
}
/** 查询社交用户列表 */
export function getSocialUserPage(params: PageParam) {
return requestClient.get<PageResult<SystemSocialUserApi.SocialUser>>(
'/system/social-user/page',
{ params },
);
}
/** 查询社交用户详情 */
export function getSocialUser(id: number) {
return requestClient.get<SystemSocialUserApi.SocialUser>(
`/system/social-user/get?id=${id}`,
);
}
/** 社交绑定,使用 code 授权码 */
export function socialBind(data: SystemSocialUserApi.SocialUserBindReqVO) {
return requestClient.post<boolean>('/system/social-user/bind', data);
}
/** 取消社交绑定 */
export function socialUnbind(data: SystemSocialUserApi.SocialUserUnbindReqVO) {
return requestClient.delete<boolean>('/system/social-user/unbind', { data });
}
/** 获得绑定社交用户列表 */
export function getBindSocialUserList() {
return requestClient.get<SystemSocialUserApi.SocialUser[]>(
'/system/social-user/get-bind-list',
);
}

View File

@@ -0,0 +1,57 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace SystemTenantPackageApi {
/** 租户套餐信息 */
export interface TenantPackage {
id: number;
name: string;
status: number;
remark: string;
creator: string;
updater: string;
updateTime: string;
menuIds: number[];
createTime: Date;
}
}
/** 租户套餐列表 */
export function getTenantPackagePage(params: PageParam) {
return requestClient.get<PageResult<SystemTenantPackageApi.TenantPackage>>(
'/system/tenant-package/page',
{ params },
);
}
/** 查询租户套餐详情 */
export function getTenantPackage(id: number) {
return requestClient.get(`/system/tenant-package/get?id=${id}`);
}
/** 新增租户套餐 */
export function createTenantPackage(
data: SystemTenantPackageApi.TenantPackage,
) {
return requestClient.post('/system/tenant-package/create', data);
}
/** 修改租户套餐 */
export function updateTenantPackage(
data: SystemTenantPackageApi.TenantPackage,
) {
return requestClient.put('/system/tenant-package/update', data);
}
/** 删除租户套餐 */
export function deleteTenantPackage(id: number) {
return requestClient.delete(`/system/tenant-package/delete?id=${id}`);
}
/** 获取租户套餐精简信息列表 */
export function getTenantPackageList() {
return requestClient.get<SystemTenantPackageApi.TenantPackage[]>(
'/system/tenant-package/get-simple-list',
);
}

View File

@@ -0,0 +1,69 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace SystemTenantApi {
/** 租户信息 */
export interface Tenant {
id?: number;
name: string;
packageId: number;
contactName: string;
contactMobile: string;
accountCount: number;
expireTime: Date;
website: string;
status: number;
}
}
/** 租户列表 */
export function getTenantPage(params: PageParam) {
return requestClient.get<PageResult<SystemTenantApi.Tenant>>(
'/system/tenant/page',
{ params },
);
}
/** 获取租户精简信息列表 */
export function getSimpleTenantList() {
return requestClient.get<SystemTenantApi.Tenant[]>(
'/system/tenant/simple-list',
);
}
/** 查询租户详情 */
export function getTenant(id: number) {
return requestClient.get<SystemTenantApi.Tenant>(
`/system/tenant/get?id=${id}`,
);
}
/** 获取租户精简信息列表 */
export function getTenantList() {
return requestClient.get<SystemTenantApi.Tenant[]>(
'/system/tenant/simple-list',
);
}
/** 新增租户 */
export function createTenant(data: SystemTenantApi.Tenant) {
return requestClient.post('/system/tenant/create', data);
}
/** 修改租户 */
export function updateTenant(data: SystemTenantApi.Tenant) {
return requestClient.put('/system/tenant/update', data);
}
/** 删除租户 */
export function deleteTenant(id: number) {
return requestClient.delete(`/system/tenant/delete?id=${id}`);
}
/** 导出租户 */
export function exportTenant(params: any) {
return requestClient.download('/system/tenant/export-excel', {
params,
});
}

View File

@@ -0,0 +1,83 @@
import type { PageParam, PageResult } from '@vben/request';
import { requestClient } from '#/api/request';
export namespace SystemUserApi {
/** 用户信息 */
export interface User {
id?: number;
username: string;
nickname: string;
deptId: number;
postIds: string[];
email: string;
mobile: string;
sex: number;
avatar: string;
loginIp: string;
status: number;
remark: string;
createTime?: Date;
}
}
/** 查询用户管理列表 */
export function getUserPage(params: PageParam) {
return requestClient.get<PageResult<SystemUserApi.User>>(
'/system/user/page',
{ params },
);
}
/** 查询用户详情 */
export function getUser(id: number) {
return requestClient.get<SystemUserApi.User>(`/system/user/get?id=${id}`);
}
/** 新增用户 */
export function createUser(data: SystemUserApi.User) {
return requestClient.post('/system/user/create', data);
}
/** 修改用户 */
export function updateUser(data: SystemUserApi.User) {
return requestClient.put('/system/user/update', data);
}
/** 删除用户 */
export function deleteUser(id: number) {
return requestClient.delete(`/system/user/delete?id=${id}`);
}
/** 导出用户 */
export function exportUser(params: any) {
return requestClient.download('/system/user/export', params);
}
/** 下载用户导入模板 */
export function importUserTemplate() {
return requestClient.download('/system/user/get-import-template');
}
/** 导入用户 */
export function importUser(file: File, updateSupport: boolean) {
return requestClient.upload('/system/user/import', {
file,
updateSupport,
});
}
/** 用户密码重置 */
export function resetUserPassword(id: number, password: string) {
return requestClient.put('/system/user/update-password', { id, password });
}
/** 用户状态修改 */
export function updateUserStatus(id: number, status: number) {
return requestClient.put('/system/user/update-status', { id, status });
}
/** 获取用户精简信息列表 */
export function getSimpleUserList() {
return requestClient.get<SystemUserApi.User[]>('/system/user/simple-list');
}

View File

@@ -0,0 +1,56 @@
import { requestClient } from '#/api/request';
export namespace SystemUserProfileApi {
/** 用户个人中心信息 */
export interface UserProfileRespVO {
id: number;
username: string;
nickname: string;
email?: string;
mobile?: string;
sex?: number;
avatar?: string;
loginIp: string;
loginDate: string;
createTime: string;
roles: any[];
dept: any;
posts: any[];
}
/** 更新密码请求 */
export interface UpdatePasswordReqVO {
oldPassword: string;
newPassword: string;
}
/** 更新个人信息请求 */
export interface UpdateProfileReqVO {
nickname?: string;
email?: string;
mobile?: string;
sex?: number;
avatar?: string;
}
}
/** 获取登录用户信息 */
export function getUserProfile() {
return requestClient.get<SystemUserProfileApi.UserProfileRespVO>(
'/system/user/profile/get',
);
}
/** 修改用户个人信息 */
export function updateUserProfile(
data: SystemUserProfileApi.UpdateProfileReqVO,
) {
return requestClient.put('/system/user/profile/update', data);
}
/** 修改用户个人密码 */
export function updateUserPassword(
data: SystemUserProfileApi.UpdatePasswordReqVO,
) {
return requestClient.put('/system/user/profile/update-password', data);
}