feat(app): 初始化项目配置和页面结构

- 添加 .dockerignore 和 .env.example 配置文件
- 添加 .gitignore 忽略规则配置
- 创建服务端代理API路由(_file、_modules、_server)
- 集成 Ant Design Vue 组件库并配置SSR样式提取
- 定义API响应类型封装
- 创建基础布局组件(blank、console)
- 实现应用中心页面和组件(AppsCenter)
- 添加文章列表测试页面
- 配置控制台导航菜单结构
- 实现控制台头部组件
- 创建联系页面表单
This commit is contained in:
2026-01-17 18:23:37 +08:00
commit 5e26fdc7fb
439 changed files with 56219 additions and 0 deletions

View File

@@ -0,0 +1,106 @@
import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api';
import type { DormitoryApply, DormitoryApplyParam } from './model';
import { MODULES_API_URL } from '@/config/setting';
/**
* 分页查询审批管理
*/
export async function pageDormitoryApply(params: DormitoryApplyParam) {
const res = await request.get<ApiResult<PageResult<DormitoryApply>>>(
MODULES_API_URL + '/dormitory/dormitory-apply/page',
{
params
}
);
if (res.data.code === 0) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 查询审批管理列表
*/
export async function listDormitoryApply(params?: DormitoryApplyParam) {
const res = await request.get<ApiResult<DormitoryApply[]>>(
MODULES_API_URL + '/dormitory/dormitory-apply',
{
params
}
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 添加审批管理
*/
export async function addDormitoryApply(data: DormitoryApply) {
const res = await request.post<ApiResult<unknown>>(
MODULES_API_URL + '/dormitory/dormitory-apply',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 修改审批管理
*/
export async function updateDormitoryApply(data: DormitoryApply) {
const res = await request.put<ApiResult<unknown>>(
MODULES_API_URL + '/dormitory/dormitory-apply',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 删除审批管理
*/
export async function removeDormitoryApply(id?: number) {
const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/dormitory/dormitory-apply/' + id
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 批量删除审批管理
*/
export async function removeBatchDormitoryApply(data: (number | undefined)[]) {
const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/dormitory/dormitory-apply/batch',
{
data
}
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 根据id查询审批管理
*/
export async function getDormitoryApply(id: number) {
const res = await request.get<ApiResult<DormitoryApply>>(
MODULES_API_URL + '/dormitory/dormitory-apply/' + id
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}

View File

@@ -0,0 +1,57 @@
import type { PageParam } from '@/api';
/**
* 审批管理
*/
export interface DormitoryApply {
// 主键ID
id?: number;
// 类型
type?: number;
// 用户ID
userId?: number;
// 姓名
realName?: string;
// 手机号
mobile?: string;
// 客户名称
dealerName?: string;
// 客户编号
dealerCode?: string;
// 详细地址
address?: string;
// 签约价格
money?: string;
// 推荐人用户ID
refereeId?: number;
// 申请方式(10需后台审核 20无需审核)
applyType?: number;
// 审核状态 (10待审核 20审核通过 30驳回)
applyStatus?: number;
// 申请时间
applyTime?: string;
// 审核时间
auditTime?: string;
// 合同时间
contractTime?: string;
// 过期时间
expirationTime?: string;
// 驳回原因
rejectReason?: string;
// 备注
comments?: string;
// 商城ID
tenantId?: number;
// 创建时间
createTime?: string;
// 修改时间
updateTime?: string;
}
/**
* 审批管理搜索条件
*/
export interface DormitoryApplyParam extends PageParam {
id?: number;
keywords?: string;
}

View File

@@ -0,0 +1,106 @@
import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api';
import type { DormitoryBed, DormitoryBedParam } from './model';
import { MODULES_API_URL } from '@/config/setting';
/**
* 分页查询宿舍床铺
*/
export async function pageDormitoryBed(params: DormitoryBedParam) {
const res = await request.get<ApiResult<PageResult<DormitoryBed>>>(
MODULES_API_URL + '/dormitory/dormitory-bed/page',
{
params
}
);
if (res.data.code === 0) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 查询宿舍床铺列表
*/
export async function listDormitoryBed(params?: DormitoryBedParam) {
const res = await request.get<ApiResult<DormitoryBed[]>>(
MODULES_API_URL + '/dormitory/dormitory-bed',
{
params
}
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 添加宿舍床铺
*/
export async function addDormitoryBed(data: DormitoryBed) {
const res = await request.post<ApiResult<unknown>>(
MODULES_API_URL + '/dormitory/dormitory-bed',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 修改宿舍床铺
*/
export async function updateDormitoryBed(data: DormitoryBed) {
const res = await request.put<ApiResult<unknown>>(
MODULES_API_URL + '/dormitory/dormitory-bed',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 删除宿舍床铺
*/
export async function removeDormitoryBed(id?: number) {
const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/dormitory/dormitory-bed/' + id
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 批量删除宿舍床铺
*/
export async function removeBatchDormitoryBed(data: (number | undefined)[]) {
const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/dormitory/dormitory-bed/batch',
{
data
}
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 根据id查询宿舍床铺
*/
export async function getDormitoryBed(id: number) {
const res = await request.get<ApiResult<DormitoryBed>>(
MODULES_API_URL + '/dormitory/dormitory-bed/' + id
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}

View File

@@ -0,0 +1,55 @@
import type { PageParam } from '@/api';
/**
* 宿舍床铺
*/
export interface DormitoryBed {
// ID
id?: number;
// 宿舍名称
name?: string;
// 编号
code?: string;
// 楼栋ID
buildingId?: number;
// 楼栋名称
buildingName?: string;
// 楼层ID
floorId?: number;
// 楼层名称
floorName?: string;
// 房间ID
recordId?: number;
// 房间名称
recordName?: string;
// 上下铺 1下铺 2上铺 0无
bunk?: number;
// 充电口
chargingPort?: string;
// 用户ID
userId?: number;
// 真实姓名
realName?: string;
// 手机号码
phone?: string;
// 头像
avatar?: string;
// 排序(数字越小越靠前)
sortNumber?: number;
// 备注
comments?: string;
// 状态, 0正常, 1报修
status?: number;
// 租户id
tenantId?: number;
// 创建时间
createTime?: string;
}
/**
* 宿舍床铺搜索条件
*/
export interface DormitoryBedParam extends PageParam {
id?: number;
keywords?: string;
}

View File

@@ -0,0 +1,106 @@
import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api';
import type { DormitoryBuilding, DormitoryBuildingParam } from './model';
import { MODULES_API_URL } from '@/config/setting';
/**
* 分页查询宿舍楼栋
*/
export async function pageDormitoryBuilding(params: DormitoryBuildingParam) {
const res = await request.get<ApiResult<PageResult<DormitoryBuilding>>>(
MODULES_API_URL + '/dormitory/dormitory-building/page',
{
params
}
);
if (res.data.code === 0) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 查询宿舍楼栋列表
*/
export async function listDormitoryBuilding(params?: DormitoryBuildingParam) {
const res = await request.get<ApiResult<DormitoryBuilding[]>>(
MODULES_API_URL + '/dormitory/dormitory-building',
{
params
}
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 添加宿舍楼栋
*/
export async function addDormitoryBuilding(data: DormitoryBuilding) {
const res = await request.post<ApiResult<unknown>>(
MODULES_API_URL + '/dormitory/dormitory-building',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 修改宿舍楼栋
*/
export async function updateDormitoryBuilding(data: DormitoryBuilding) {
const res = await request.put<ApiResult<unknown>>(
MODULES_API_URL + '/dormitory/dormitory-building',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 删除宿舍楼栋
*/
export async function removeDormitoryBuilding(id?: number) {
const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/dormitory/dormitory-building/' + id
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 批量删除宿舍楼栋
*/
export async function removeBatchDormitoryBuilding(data: (number | undefined)[]) {
const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/dormitory/dormitory-building/batch',
{
data
}
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 根据id查询宿舍楼栋
*/
export async function getDormitoryBuilding(id: number) {
const res = await request.get<ApiResult<DormitoryBuilding>>(
MODULES_API_URL + '/dormitory/dormitory-building/' + id
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}

View File

@@ -0,0 +1,31 @@
import type { PageParam } from '@/api';
/**
* 宿舍楼栋
*/
export interface DormitoryBuilding {
// ID
id?: number;
// 楼栋名称
name?: string;
// 楼栋编号
code?: string;
// 排序(数字越小越靠前)
sortNumber?: number;
// 备注
comments?: string;
// 状态, 0正常, 1冻结
status?: number;
// 租户id
tenantId?: number;
// 创建时间
createTime?: string;
}
/**
* 宿舍楼栋搜索条件
*/
export interface DormitoryBuildingParam extends PageParam {
id?: number;
keywords?: string;
}

View File

@@ -0,0 +1,106 @@
import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api';
import type { DormitoryFloor, DormitoryFloorParam } from './model';
import { MODULES_API_URL } from '@/config/setting';
/**
* 分页查询宿舍楼层
*/
export async function pageDormitoryFloor(params: DormitoryFloorParam) {
const res = await request.get<ApiResult<PageResult<DormitoryFloor>>>(
MODULES_API_URL + '/dormitory/dormitory-floor/page',
{
params
}
);
if (res.data.code === 0) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 查询宿舍楼层列表
*/
export async function listDormitoryFloor(params?: DormitoryFloorParam) {
const res = await request.get<ApiResult<DormitoryFloor[]>>(
MODULES_API_URL + '/dormitory/dormitory-floor',
{
params
}
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 添加宿舍楼层
*/
export async function addDormitoryFloor(data: DormitoryFloor) {
const res = await request.post<ApiResult<unknown>>(
MODULES_API_URL + '/dormitory/dormitory-floor',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 修改宿舍楼层
*/
export async function updateDormitoryFloor(data: DormitoryFloor) {
const res = await request.put<ApiResult<unknown>>(
MODULES_API_URL + '/dormitory/dormitory-floor',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 删除宿舍楼层
*/
export async function removeDormitoryFloor(id?: number) {
const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/dormitory/dormitory-floor/' + id
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 批量删除宿舍楼层
*/
export async function removeBatchDormitoryFloor(data: (number | undefined)[]) {
const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/dormitory/dormitory-floor/batch',
{
data
}
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 根据id查询宿舍楼层
*/
export async function getDormitoryFloor(id: number) {
const res = await request.get<ApiResult<DormitoryFloor>>(
MODULES_API_URL + '/dormitory/dormitory-floor/' + id
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}

View File

@@ -0,0 +1,35 @@
import type { PageParam } from '@/api';
/**
* 宿舍楼层
*/
export interface DormitoryFloor {
// ID
id?: number;
// 楼层
name?: string;
// 编号
code?: string;
// 楼栋ID
buildingId?: number;
// 楼栋名称
buildingName?: string;
// 排序(数字越小越靠前)
sortNumber?: number;
// 备注
comments?: string;
// 状态, 0正常, 1冻结
status?: number;
// 租户id
tenantId?: number;
// 创建时间
createTime?: string;
}
/**
* 宿舍楼层搜索条件
*/
export interface DormitoryFloorParam extends PageParam {
id?: number;
keywords?: string;
}

View File

@@ -0,0 +1,106 @@
import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api';
import type { DormitoryRecord, DormitoryRecordParam } from './model';
import { MODULES_API_URL } from '@/config/setting';
/**
* 分页查询宿舍记录
*/
export async function pageDormitoryRecord(params: DormitoryRecordParam) {
const res = await request.get<ApiResult<PageResult<DormitoryRecord>>>(
MODULES_API_URL + '/dormitory/dormitory-record/page',
{
params
}
);
if (res.data.code === 0) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 查询宿舍记录列表
*/
export async function listDormitoryRecord(params?: DormitoryRecordParam) {
const res = await request.get<ApiResult<DormitoryRecord[]>>(
MODULES_API_URL + '/dormitory/dormitory-record',
{
params
}
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 添加宿舍记录
*/
export async function addDormitoryRecord(data: DormitoryRecord) {
const res = await request.post<ApiResult<unknown>>(
MODULES_API_URL + '/dormitory/dormitory-record',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 修改宿舍记录
*/
export async function updateDormitoryRecord(data: DormitoryRecord) {
const res = await request.put<ApiResult<unknown>>(
MODULES_API_URL + '/dormitory/dormitory-record',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 删除宿舍记录
*/
export async function removeDormitoryRecord(id?: number) {
const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/dormitory/dormitory-record/' + id
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 批量删除宿舍记录
*/
export async function removeBatchDormitoryRecord(data: (number | undefined)[]) {
const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/dormitory/dormitory-record/batch',
{
data
}
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 根据id查询宿舍记录
*/
export async function getDormitoryRecord(id: number) {
const res = await request.get<ApiResult<DormitoryRecord>>(
MODULES_API_URL + '/dormitory/dormitory-record/' + id
);
if (res.data.code === 0 && res.data.data) {
return res.data.data;
}
return Promise.reject(new Error(res.data.message));
}

View File

@@ -0,0 +1,43 @@
import type { PageParam } from '@/api';
/**
* 宿舍记录
*/
export interface DormitoryRecord {
// ID
id?: number;
// 宿舍名称
name?: string;
// 编号
code?: string;
// 楼栋ID
buildingId?: number;
// 楼栋名称
buildingName?: string;
// 楼层ID
floorId?: number;
// 楼层名称
floorName?: string;
// 床铺数
beds?: number;
// 独立卫生间
toilet?: boolean;
// 排序(数字越小越靠前)
sortNumber?: number;
// 备注
comments?: string;
// 状态, 0正常, 1冻结
status?: number;
// 租户id
tenantId?: number;
// 创建时间
createTime?: string;
}
/**
* 宿舍记录搜索条件
*/
export interface DormitoryRecordParam extends PageParam {
id?: number;
keywords?: string;
}