feat(core): 初始化项目基础架构和CMS功能模块

- 添加Docker相关配置文件(.dockerignore, .env.example, .gitignore)
- 实现服务端API代理功能,支持文件、模块和服务器API转发
- 创建文章详情页、栏目文章列表页和单页内容展示页面
- 集成Ant Design Vue组件库并实现SSR样式提取功能
- 定义API响应数据结构类型和应用布局组件
- 开发开发者应用中心和文章管理页面
- 实现CMS导航菜单获取和多租户切换功能
This commit is contained in:
2026-01-27 00:14:08 +08:00
commit 775841eed3
315 changed files with 47072 additions and 0 deletions

View File

@@ -0,0 +1,298 @@
import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api';
import type { User, UserParam } from './model';
import { SERVER_API_URL } from '@/config/setting';
/**
* 分页查询用户
*/
export async function pageUsers(params: UserParam) {
const res = await request.get<ApiResult<PageResult<User>>>(
SERVER_API_URL + '/system/user/page',
{ params }
);
if (res.data.code === 0) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 查询用户列表
*/
export async function listUsers(params?: UserParam) {
const res = await request.get<ApiResult<User[]>>(
SERVER_API_URL + '/system/user',
{
params
}
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 查询用户列表
*/
export async function getStaffs(params?: UserParam) {
const res = await request.get<ApiResult<User[]>>(
SERVER_API_URL + '/system/user',
{
params
}
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 查询用户列表
*/
export async function getCompanyList(params?: UserParam) {
const res = await request.get<ApiResult<User[]>>(
SERVER_API_URL + '/system/user',
{
params
}
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 根据id查询用户
*/
export async function getUser(id: number) {
const res = await request.get<ApiResult<User>>(
SERVER_API_URL + '/system/user/' + id
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 添加用户
*/
export async function addUser(data: User) {
const res = await request.post<ApiResult<unknown>>(
SERVER_API_URL + '/system/user',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 添加管理员用户
* @param data
*/
export async function addAdminUser(data: User) {
const res = await request.post<ApiResult<unknown>>(
SERVER_API_URL + '/system/user/addAdminUser',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 修改用户
*/
export async function updateUser(data: User) {
const res = await request.put<ApiResult<unknown>>(
SERVER_API_URL + '/system/user',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 删除用户
*/
export async function removeUser(id?: number) {
const res = await request.delete<ApiResult<unknown>>(
SERVER_API_URL + '/system/user/' + id
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 批量删除用户
*/
export async function removeUsers(data: (number | undefined)[]) {
const res = await request.delete<ApiResult<unknown>>(
SERVER_API_URL + '/system/user/batch',
{
data
}
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 修改用户状态
*/
export async function updateUserStatus(userId?: number, status?: number) {
const res = await request.put<ApiResult<unknown>>(
SERVER_API_URL + '/system/user/status',
{
userId,
status
}
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 修改推荐状态
*/
export async function updateUserRecommend(form: any) {
const res = await request.put<ApiResult<unknown>>(
SERVER_API_URL + '/system/user/recommend',
form
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 重置用户密码
*/
export async function updateUserPassword(userId?: number, password = '123456') {
const res = await request.put<ApiResult<unknown>>(
SERVER_API_URL + '/system/user/password',
{
userId,
password
}
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 导入用户
*/
export async function importUsers(file: File) {
const formData = new FormData();
formData.append('file', file);
const res = await request.post<ApiResult<unknown>>(
SERVER_API_URL + '/system/user/import',
formData
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 导入经销商
*/
export async function importShopAdmins(file: File) {
const formData = new FormData();
formData.append('file', file);
const res = await request.post<ApiResult<unknown>>(
SERVER_API_URL + '/shop/admin/import',
formData
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 检查用户是否存在
*/
export async function checkExistence(
field: string,
value: string,
id?: number
) {
const res = await request.get<ApiResult<unknown>>(
SERVER_API_URL + '/system/user/existence',
{
params: { field, value, id }
}
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 统计用户余额
*/
export async function countUserBalance(params?: UserParam) {
const res = await request.get<ApiResult<unknown>>(
SERVER_API_URL + '/system/user/countUserBalance',
{
params
}
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 选择管理员账号登录
* @param params
*/
export async function listAdminsByPhoneAll(params?: UserParam){
const res = await request.get<ApiResult<User[]>>(
SERVER_API_URL + '/system/user/listAdminsByPhoneAll',
{
params
}
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 导出用户列表
*/
export async function exportUsers(params?: UserParam) {
const res = await request.get<Blob>(
SERVER_API_URL + '/system/user/export',
{
params,
responseType: 'blob'
}
);
return res.data;
}

View File

@@ -0,0 +1,15 @@
import type { PageParam } from '@/api';
/**
* 用户
*/
export interface Count {
balance?: string;
}
/**
* 用户搜索条件
*/
export interface UserParam extends PageParam {
organizationId?: number;
}

View File

@@ -0,0 +1,161 @@
import type { PageParam } from '@/api';
import type { Role } from '../../role/model';
import type { Menu } from '../../menu/model';
import type { Company } from '@/api/system/company/model';
/**
* 用户
*/
export interface User {
// 账号类型
type?: number;
// 用户id
userId?: number;
// 账号
username?: string;
// 密码
password?: string;
password2?: string;
// 昵称
nickname?: string;
openId?: string;
officeOpenid?: string;
sessionKey?: string;
// 别名
alias?: string;
// 头像
avatar?: string;
// 性别(字典)
sex?: string;
// 手机号
phone?: string;
// 脱敏手机号
mobile?: string;
// 邮箱
email?: string;
// 出生日期
birthday?: string;
age?: number;
// 详细地址
address?: string;
longitude?: string;
latitude?: string;
// 会员等级ID
gradeId?: number;
// 个人简介
introduction?: string;
// 机构id
organizationId?: number;
// 状态, 0正常, 1冻结
status?: number;
// 性别名称
sexName?: string;
province?: string;
city?: string;
region?: string;
// 机构名称
organizationName?: string;
// 角色列表
roles?: Role[];
roleCode?: string;
roleId?: number;
roleName?: string;
// 权限列表
authorities?: Menu[];
payTime?: string;
deliveryTime?: string;
receiptTime?: string;
merchantId?: number;
// 可管理的商户
merchants?: string;
// 创建时间
createTime?: string;
// 租户ID
tenantId?: number;
// 租户名称
tenantName?: string;
logo?: string;
companyId?: number;
companyInfo?: Company;
planId?: number;
code?: string;
smsCode?: string;
//
remember?: boolean;
balance?: number;
points?: number;
payMoney?: number;
setting?: string;
realName?: string;
companyName?: string;
merchantName?: string;
merchantAvatar?: string;
gradeName?: string;
idCard?: string;
comments?: string;
recommend?: number;
system?: any;
// 头像地址
avatarUrl?: string;
// 1男2女
gender?: string;
// 国家
country?: string;
// 邮箱是否验证, 0否, 1是
emailVerified?: number;
// 注册时间
addTime?: number;
//
idcard?: string;
//
truename?: string;
// 是否管理员1是2否
isAdmin?: boolean;
// 客户端ID
clientId?: string;
// 注册来源客户端 (APP、H5、小程序等)
platform?: string;
// 排序
sortNumber?: number;
isSuperAdmin?: boolean;
deleted?: number;
// 克隆的模板ID
templateId?: number;
// 是否安装
installed?: boolean;
label?: string;
value?: number;
// 关注数量
followers?: number;
// 推荐人ID
dealerId?: number;
}
/**
* 用户搜索条件
*/
export interface UserParam extends PageParam {
keywords?: any;
type?: any;
userId?: number;
username?: string;
nickname?: string;
realName?: string;
gradeId?: unknown;
gradeName?: string;
companyName?: string;
city?: string;
cityMate?: string;
sex?: string;
phone?: string;
status?: number;
organizationId?: number;
parentId?: number;
sexName?: string;
roleId?: string;
isAdmin?: number;
isSuperAdmin?: boolean;
showProfile?: boolean;
isStaff?: boolean;
templateId?: number;
}