befly-shared 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +442 -0
- package/dist/addonHelper.js +83 -0
- package/dist/arrayKeysToCamel.js +18 -0
- package/dist/arrayToTree.js +23 -0
- package/dist/calcPerfTime.js +13 -0
- package/dist/configTypes.js +1 -0
- package/dist/defineAddonConfig.js +40 -0
- package/dist/fieldClear.js +57 -0
- package/dist/genShortId.js +12 -0
- package/dist/index.js +25 -0
- package/dist/keysToCamel.js +21 -0
- package/dist/keysToSnake.js +21 -0
- package/dist/layouts.js +59 -0
- package/dist/pickFields.js +16 -0
- package/dist/redisKeys.js +34 -0
- package/dist/regex.js +200 -0
- package/dist/scanConfig.js +82 -0
- package/dist/scanFiles.js +39 -0
- package/dist/scanViews.js +48 -0
- package/dist/types.js +46 -0
- package/package.json +40 -0
- package/src/addonHelper.ts +88 -0
- package/src/arrayKeysToCamel.ts +18 -0
- package/src/arrayToTree.ts +31 -0
- package/src/calcPerfTime.ts +13 -0
- package/src/configTypes.ts +27 -0
- package/src/defineAddonConfig.ts +45 -0
- package/src/fieldClear.ts +75 -0
- package/src/genShortId.ts +12 -0
- package/src/index.ts +28 -0
- package/src/keysToCamel.ts +22 -0
- package/src/keysToSnake.ts +22 -0
- package/src/layouts.ts +90 -0
- package/src/pickFields.ts +19 -0
- package/src/redisKeys.ts +44 -0
- package/src/regex.ts +223 -0
- package/src/scanConfig.ts +104 -0
- package/src/scanFiles.ts +49 -0
- package/src/scanViews.ts +55 -0
- package/src/types.ts +338 -0
- package/tests/addonHelper.test.ts +55 -0
- package/tests/arrayKeysToCamel.test.ts +21 -0
- package/tests/arrayToTree.test.ts +98 -0
- package/tests/calcPerfTime.test.ts +19 -0
- package/tests/fieldClear.test.ts +39 -0
- package/tests/keysToCamel.test.ts +22 -0
- package/tests/keysToSnake.test.ts +22 -0
- package/tests/layouts.test.ts +93 -0
- package/tests/pickFields.test.ts +22 -0
- package/tests/regex.test.ts +308 -0
- package/tests/scanFiles.test.ts +58 -0
- package/tests/types.test.ts +283 -0
- package/types/addonConfigMerge.d.ts +17 -0
- package/types/addonHelper.d.ts +24 -0
- package/types/arrayKeysToCamel.d.ts +13 -0
- package/types/arrayToTree.d.ts +8 -0
- package/types/calcPerfTime.d.ts +4 -0
- package/types/configMerge.d.ts +49 -0
- package/types/configTypes.d.ts +26 -0
- package/types/defineAddonConfig.d.ts +19 -0
- package/types/fieldClear.d.ts +16 -0
- package/types/genShortId.d.ts +10 -0
- package/types/index.d.ts +22 -0
- package/types/keysToCamel.d.ts +10 -0
- package/types/keysToSnake.d.ts +10 -0
- package/types/layouts.d.ts +29 -0
- package/types/loadAndMergeConfig.d.ts +7 -0
- package/types/mergeConfig.d.ts +7 -0
- package/types/pickFields.d.ts +4 -0
- package/types/redisKeys.d.ts +34 -0
- package/types/regex.d.ts +143 -0
- package/types/scanConfig.d.ts +7 -0
- package/types/scanFiles.d.ts +12 -0
- package/types/scanViews.d.ts +11 -0
- package/types/types.d.ts +274 -0
package/types/regex.d.ts
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 内置正则表达式别名
|
|
3
|
+
* 用于表单验证和数据校验
|
|
4
|
+
* 命名规范:小驼峰格式
|
|
5
|
+
*/
|
|
6
|
+
export declare const RegexAliases: {
|
|
7
|
+
/** 正整数(不含0) */
|
|
8
|
+
readonly number: '^\\d+$';
|
|
9
|
+
/** 整数(含负数) */
|
|
10
|
+
readonly integer: '^-?\\d+$';
|
|
11
|
+
/** 浮点数 */
|
|
12
|
+
readonly float: '^-?\\d+(\\.\\d+)?$';
|
|
13
|
+
/** 正整数(不含0) */
|
|
14
|
+
readonly positive: '^[1-9]\\d*$';
|
|
15
|
+
/** 负整数 */
|
|
16
|
+
readonly negative: '^-\\d+$';
|
|
17
|
+
/** 零 */
|
|
18
|
+
readonly zero: '^0$';
|
|
19
|
+
/** 纯字母 */
|
|
20
|
+
readonly word: '^[a-zA-Z]+$';
|
|
21
|
+
/** 字母和数字 */
|
|
22
|
+
readonly alphanumeric: '^[a-zA-Z0-9]+$';
|
|
23
|
+
/** 字母、数字和下划线 */
|
|
24
|
+
readonly alphanumericUnderscore: '^[a-zA-Z0-9_]+$';
|
|
25
|
+
/** 小写字母 */
|
|
26
|
+
readonly lowercase: '^[a-z]+$';
|
|
27
|
+
/** 大写字母 */
|
|
28
|
+
readonly uppercase: '^[A-Z]+$';
|
|
29
|
+
/** 纯中文 */
|
|
30
|
+
readonly chinese: '^[\\u4e00-\\u9fa5]+$';
|
|
31
|
+
/** 中文和字母 */
|
|
32
|
+
readonly chineseWord: '^[\\u4e00-\\u9fa5a-zA-Z]+$';
|
|
33
|
+
/** 邮箱地址 */
|
|
34
|
+
readonly email: '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$';
|
|
35
|
+
/** 中国大陆手机号 */
|
|
36
|
+
readonly phone: '^1[3-9]\\d{9}$';
|
|
37
|
+
/** 固定电话(区号-号码) */
|
|
38
|
+
readonly telephone: '^0\\d{2,3}-?\\d{7,8}$';
|
|
39
|
+
/** URL 地址 */
|
|
40
|
+
readonly url: '^https?://';
|
|
41
|
+
/** IPv4 地址 */
|
|
42
|
+
readonly ip: '^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$';
|
|
43
|
+
/** IPv6 地址 */
|
|
44
|
+
readonly ipv6: '^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$';
|
|
45
|
+
/** 域名 */
|
|
46
|
+
readonly domain: '^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$';
|
|
47
|
+
/** UUID */
|
|
48
|
+
readonly uuid: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$';
|
|
49
|
+
/** 十六进制字符串 */
|
|
50
|
+
readonly hex: '^[0-9a-fA-F]+$';
|
|
51
|
+
/** Base64 编码 */
|
|
52
|
+
readonly base64: '^[A-Za-z0-9+/=]+$';
|
|
53
|
+
/** MD5 哈希 */
|
|
54
|
+
readonly md5: '^[a-f0-9]{32}$';
|
|
55
|
+
/** SHA1 哈希 */
|
|
56
|
+
readonly sha1: '^[a-f0-9]{40}$';
|
|
57
|
+
/** SHA256 哈希 */
|
|
58
|
+
readonly sha256: '^[a-f0-9]{64}$';
|
|
59
|
+
/** 日期 YYYY-MM-DD */
|
|
60
|
+
readonly date: '^\\d{4}-\\d{2}-\\d{2}$';
|
|
61
|
+
/** 时间 HH:MM:SS */
|
|
62
|
+
readonly time: '^\\d{2}:\\d{2}:\\d{2}$';
|
|
63
|
+
/** ISO 日期时间 */
|
|
64
|
+
readonly datetime: '^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}';
|
|
65
|
+
/** 年份 */
|
|
66
|
+
readonly year: '^\\d{4}$';
|
|
67
|
+
/** 月份 01-12 */
|
|
68
|
+
readonly month: '^(0[1-9]|1[0-2])$';
|
|
69
|
+
/** 日期 01-31 */
|
|
70
|
+
readonly day: '^(0[1-9]|[12]\\d|3[01])$';
|
|
71
|
+
/** 变量名 */
|
|
72
|
+
readonly variable: '^[a-zA-Z_][a-zA-Z0-9_]*$';
|
|
73
|
+
/** 常量名(全大写) */
|
|
74
|
+
readonly constant: '^[A-Z][A-Z0-9_]*$';
|
|
75
|
+
/** 包名(小写+连字符) */
|
|
76
|
+
readonly package: '^[a-z][a-z0-9-]*$';
|
|
77
|
+
/** 中国身份证号(18位) */
|
|
78
|
+
readonly idCard: '^\\d{17}[\\dXx]$';
|
|
79
|
+
/** 护照号 */
|
|
80
|
+
readonly passport: '^[a-zA-Z0-9]{5,17}$';
|
|
81
|
+
/** 银行卡号(16-19位数字) */
|
|
82
|
+
readonly bankCard: '^\\d{16,19}$';
|
|
83
|
+
/** 微信号(6-20位,字母开头,可包含字母、数字、下划线、减号) */
|
|
84
|
+
readonly wechat: '^[a-zA-Z][a-zA-Z0-9_-]{5,19}$';
|
|
85
|
+
/** QQ号(5-11位数字,首位非0) */
|
|
86
|
+
readonly qq: '^[1-9]\\d{4,10}$';
|
|
87
|
+
/** 支付宝账号(手机号或邮箱) */
|
|
88
|
+
readonly alipay: '^(1[3-9]\\d{9}|[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,})$';
|
|
89
|
+
/** 用户名(4-20位,字母开头,可包含字母、数字、下划线) */
|
|
90
|
+
readonly username: '^[a-zA-Z][a-zA-Z0-9_]{3,19}$';
|
|
91
|
+
/** 昵称(2-20位,支持中文、字母、数字) */
|
|
92
|
+
readonly nickname: '^[\\u4e00-\\u9fa5a-zA-Z0-9]{2,20}$';
|
|
93
|
+
/** 弱密码(至少6位) */
|
|
94
|
+
readonly passwordWeak: '^.{6,}$';
|
|
95
|
+
/** 中等密码(至少8位,包含字母和数字) */
|
|
96
|
+
readonly passwordMedium: '^(?=.*[a-zA-Z])(?=.*\\d).{8,}$';
|
|
97
|
+
/** 强密码(至少8位,包含大小写字母、数字和特殊字符) */
|
|
98
|
+
readonly passwordStrong: '^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*]).{8,}$';
|
|
99
|
+
/** 车牌号(新能源+普通) */
|
|
100
|
+
readonly licensePlate: '^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$';
|
|
101
|
+
/** 邮政编码 */
|
|
102
|
+
readonly postalCode: '^\\d{6}$';
|
|
103
|
+
/** 版本号(语义化版本) */
|
|
104
|
+
readonly semver: '^\\d+\\.\\d+\\.\\d+(-[a-zA-Z0-9.]+)?(\\+[a-zA-Z0-9.]+)?$';
|
|
105
|
+
/** 颜色值(十六进制) */
|
|
106
|
+
readonly colorHex: '^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$';
|
|
107
|
+
/** 空字符串 */
|
|
108
|
+
readonly empty: '^$';
|
|
109
|
+
/** 非空 */
|
|
110
|
+
readonly notempty: '.+';
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* 正则别名类型
|
|
114
|
+
*/
|
|
115
|
+
export type RegexAliasName = keyof typeof RegexAliases;
|
|
116
|
+
/**
|
|
117
|
+
* 获取正则表达式字符串
|
|
118
|
+
* @param name 正则别名(以 @ 开头)或自定义正则字符串
|
|
119
|
+
* @returns 正则表达式字符串
|
|
120
|
+
*/
|
|
121
|
+
export declare function getRegex(name: string): string;
|
|
122
|
+
/**
|
|
123
|
+
* 获取编译后的正则表达式对象(带缓存)
|
|
124
|
+
* @param pattern 正则别名或正则字符串
|
|
125
|
+
* @param flags 正则标志(如 'i', 'g')
|
|
126
|
+
* @returns 编译后的 RegExp 对象
|
|
127
|
+
*/
|
|
128
|
+
export declare function getCompiledRegex(pattern: string, flags?: string): RegExp;
|
|
129
|
+
/**
|
|
130
|
+
* 验证值是否匹配正则(使用缓存)
|
|
131
|
+
* @param value 要验证的值
|
|
132
|
+
* @param pattern 正则别名或正则字符串
|
|
133
|
+
* @returns 是否匹配
|
|
134
|
+
*/
|
|
135
|
+
export declare function matchRegex(value: string, pattern: string): boolean;
|
|
136
|
+
/**
|
|
137
|
+
* 清除正则缓存
|
|
138
|
+
*/
|
|
139
|
+
export declare function clearRegexCache(): void;
|
|
140
|
+
/**
|
|
141
|
+
* 获取缓存大小
|
|
142
|
+
*/
|
|
143
|
+
export declare function getRegexCacheSize(): number;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface ScanFileResult {
|
|
2
|
+
filePath: string;
|
|
3
|
+
relativePath: string;
|
|
4
|
+
fileName: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* 扫描指定目录下的文件
|
|
8
|
+
* @param dir 目录路径
|
|
9
|
+
* @param pattern Glob 模式
|
|
10
|
+
* @param ignoreUnderline 是否忽略下划线开头的文件/目录
|
|
11
|
+
*/
|
|
12
|
+
export declare function scanFiles(dir: string, pattern?: string, ignoreUnderline?: boolean): Promise<ScanFileResult[]>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 扫描项目和所有 @befly-addon 包的 views 目录
|
|
3
|
+
* 用于 unplugin-vue-router 的 routesFolder 配置
|
|
4
|
+
* 注意:此函数只能在 vite.config.js 中使用(Node.js 环境),不能在浏览器中使用
|
|
5
|
+
* @returns 路由文件夹配置数组
|
|
6
|
+
*/
|
|
7
|
+
export declare function scanViews(): {
|
|
8
|
+
src: string;
|
|
9
|
+
path: string;
|
|
10
|
+
exclude: string[];
|
|
11
|
+
}[];
|
package/types/types.d.ts
ADDED
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Befly 共享类型定义
|
|
3
|
+
* 这些类型可以在 core、tpl、admin 等多个包中复用
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* API 响应结果类型
|
|
7
|
+
*/
|
|
8
|
+
export interface ResponseResult<T = any> {
|
|
9
|
+
/** 状态码:0 表示成功,非 0 表示失败 */
|
|
10
|
+
code: number;
|
|
11
|
+
/** 响应消息 */
|
|
12
|
+
msg: string;
|
|
13
|
+
/** 响应数据 */
|
|
14
|
+
data?: T;
|
|
15
|
+
/** 错误信息(仅在失败时) */
|
|
16
|
+
error?: any;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 分页响应结果类型
|
|
20
|
+
*/
|
|
21
|
+
export interface PaginatedResult<T = any> {
|
|
22
|
+
/** 状态码 */
|
|
23
|
+
code: number;
|
|
24
|
+
/** 响应消息 */
|
|
25
|
+
msg: string;
|
|
26
|
+
/** 数据列表 */
|
|
27
|
+
data: T[];
|
|
28
|
+
/** 总记录数 */
|
|
29
|
+
total: number;
|
|
30
|
+
/** 当前页码 */
|
|
31
|
+
page: number;
|
|
32
|
+
/** 每页数量 */
|
|
33
|
+
limit: number;
|
|
34
|
+
/** 总页数 */
|
|
35
|
+
pages: number;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* 验证结果类型
|
|
39
|
+
*/
|
|
40
|
+
export interface ValidationResult {
|
|
41
|
+
/** 验证状态:0 成功,1 失败 */
|
|
42
|
+
code: 0 | 1;
|
|
43
|
+
/** 字段错误信息 */
|
|
44
|
+
fields: Record<string, string>;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* HTTP 方法类型
|
|
48
|
+
*/
|
|
49
|
+
export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS';
|
|
50
|
+
/**
|
|
51
|
+
* 通用键值对类型
|
|
52
|
+
*/
|
|
53
|
+
export type KeyValue<T = any> = Record<string, T>;
|
|
54
|
+
/**
|
|
55
|
+
* 字段类型
|
|
56
|
+
*/
|
|
57
|
+
export type FieldType = 'string' | 'number' | 'text' | 'array_string' | 'array_text';
|
|
58
|
+
/**
|
|
59
|
+
* 字段定义类型(对象格式)
|
|
60
|
+
*/
|
|
61
|
+
export interface FieldDefinition {
|
|
62
|
+
/** 字段标签/描述 */
|
|
63
|
+
name: string;
|
|
64
|
+
/** 字段详细说明 */
|
|
65
|
+
detail: string;
|
|
66
|
+
/** 字段类型 */
|
|
67
|
+
type: FieldType;
|
|
68
|
+
/** 最小值/最小长度 */
|
|
69
|
+
min: number | null;
|
|
70
|
+
/** 最大值/最大长度 */
|
|
71
|
+
max: number | null;
|
|
72
|
+
/** 默认值 */
|
|
73
|
+
default: any;
|
|
74
|
+
/** 是否创建索引 */
|
|
75
|
+
index: boolean;
|
|
76
|
+
/** 是否唯一 */
|
|
77
|
+
unique: boolean;
|
|
78
|
+
/** 字段注释 */
|
|
79
|
+
comment: string;
|
|
80
|
+
/** 是否允许为空 */
|
|
81
|
+
nullable: boolean;
|
|
82
|
+
/** 是否无符号(仅 number 类型) */
|
|
83
|
+
unsigned: boolean;
|
|
84
|
+
/** 正则验证 */
|
|
85
|
+
regexp: string | null;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 表定义类型(对象格式)
|
|
89
|
+
*/
|
|
90
|
+
export type TableDefinition = Record<string, FieldDefinition>;
|
|
91
|
+
/**
|
|
92
|
+
* 用户信息类型
|
|
93
|
+
*/
|
|
94
|
+
export interface UserInfo {
|
|
95
|
+
/** 用户 ID */
|
|
96
|
+
id: number;
|
|
97
|
+
/** 用户名 */
|
|
98
|
+
username?: string;
|
|
99
|
+
/** 邮箱 */
|
|
100
|
+
email?: string;
|
|
101
|
+
/** 角色代码 */
|
|
102
|
+
roleCode?: string;
|
|
103
|
+
/** 其他自定义字段 */
|
|
104
|
+
[key: string]: any;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* 请求上下文基础接口
|
|
108
|
+
* 用于跨包共享的最小上下文定义
|
|
109
|
+
*/
|
|
110
|
+
export interface BaseRequestContext {
|
|
111
|
+
/** 请求体参数 */
|
|
112
|
+
body: Record<string, any>;
|
|
113
|
+
/** 用户信息 */
|
|
114
|
+
user: Record<string, any>;
|
|
115
|
+
/** 请求开始时间(毫秒) */
|
|
116
|
+
now: number;
|
|
117
|
+
/** 客户端 IP 地址 */
|
|
118
|
+
ip: string;
|
|
119
|
+
/** API 路由路径(如 POST/api/user/login) */
|
|
120
|
+
route: string;
|
|
121
|
+
/** 请求唯一 ID */
|
|
122
|
+
requestId: string;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* API 路由基础配置
|
|
126
|
+
* 用于跨包共享的最小路由定义
|
|
127
|
+
*/
|
|
128
|
+
export interface BaseApiRoute {
|
|
129
|
+
/** 接口名称(必填) */
|
|
130
|
+
name: string;
|
|
131
|
+
/** HTTP 方法(可选,默认 POST) */
|
|
132
|
+
method?: HttpMethod;
|
|
133
|
+
/** 认证类型(可选,默认 true) */
|
|
134
|
+
auth?: boolean;
|
|
135
|
+
/** 字段定义(验证规则) */
|
|
136
|
+
fields?: TableDefinition;
|
|
137
|
+
/** 必填字段 */
|
|
138
|
+
required?: string[];
|
|
139
|
+
/** 路由路径(运行时生成) */
|
|
140
|
+
route?: string;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* SQL 值类型
|
|
144
|
+
*/
|
|
145
|
+
export type SqlValue = string | number | boolean | null | Date;
|
|
146
|
+
/**
|
|
147
|
+
* SQL 参数数组类型
|
|
148
|
+
*/
|
|
149
|
+
export type SqlParams = SqlValue[];
|
|
150
|
+
/**
|
|
151
|
+
* 排序方向
|
|
152
|
+
*/
|
|
153
|
+
export type OrderDirection = 'ASC' | 'DESC' | 'asc' | 'desc';
|
|
154
|
+
/**
|
|
155
|
+
* 数据库类型
|
|
156
|
+
*/
|
|
157
|
+
export type DatabaseType = 'mysql' | 'postgresql' | 'sqlite';
|
|
158
|
+
/**
|
|
159
|
+
* 数据库配置类型
|
|
160
|
+
*/
|
|
161
|
+
export interface DatabaseConfig {
|
|
162
|
+
/** 数据库类型 */
|
|
163
|
+
type: DatabaseType;
|
|
164
|
+
/** 主机地址 */
|
|
165
|
+
host: string;
|
|
166
|
+
/** 端口号 */
|
|
167
|
+
port: number;
|
|
168
|
+
/** 用户名 */
|
|
169
|
+
user: string;
|
|
170
|
+
/** 密码 */
|
|
171
|
+
password: string;
|
|
172
|
+
/** 数据库名 */
|
|
173
|
+
database: string;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Redis 配置类型
|
|
177
|
+
*/
|
|
178
|
+
export interface RedisConfig {
|
|
179
|
+
/** 主机地址 */
|
|
180
|
+
host: string;
|
|
181
|
+
/** 端口号 */
|
|
182
|
+
port: number;
|
|
183
|
+
/** 密码 */
|
|
184
|
+
password?: string;
|
|
185
|
+
/** 数据库索引 */
|
|
186
|
+
db?: number;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* 菜单项类型
|
|
190
|
+
*/
|
|
191
|
+
export interface MenuItem {
|
|
192
|
+
/** 菜单 ID */
|
|
193
|
+
id: number;
|
|
194
|
+
/** 父级 ID */
|
|
195
|
+
pid: number;
|
|
196
|
+
/** 菜单名称 */
|
|
197
|
+
name: string;
|
|
198
|
+
/** 菜单路径 */
|
|
199
|
+
path: string;
|
|
200
|
+
/** 菜单图标 */
|
|
201
|
+
icon?: string;
|
|
202
|
+
/** 排序 */
|
|
203
|
+
sort: number;
|
|
204
|
+
/** 是否隐藏 */
|
|
205
|
+
hidden?: boolean;
|
|
206
|
+
/** 子菜单 */
|
|
207
|
+
children?: MenuItem[];
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* 权限项类型
|
|
211
|
+
*/
|
|
212
|
+
export interface PermissionItem {
|
|
213
|
+
/** API 路由(如 POST/api/user/list) */
|
|
214
|
+
route: string;
|
|
215
|
+
/** 权限名称 */
|
|
216
|
+
name: string;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* 角色信息类型
|
|
220
|
+
*/
|
|
221
|
+
export interface RoleInfo {
|
|
222
|
+
/** 角色 ID */
|
|
223
|
+
id: number;
|
|
224
|
+
/** 角色代码 */
|
|
225
|
+
code: string;
|
|
226
|
+
/** 角色名称 */
|
|
227
|
+
name: string;
|
|
228
|
+
/** 角色描述 */
|
|
229
|
+
desc?: string;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* API 响应码
|
|
233
|
+
*/
|
|
234
|
+
export declare const ApiCode: {
|
|
235
|
+
/** 成功 */
|
|
236
|
+
readonly SUCCESS: 0;
|
|
237
|
+
/** 通用失败 */
|
|
238
|
+
readonly FAIL: 1;
|
|
239
|
+
/** 未授权 */
|
|
240
|
+
readonly UNAUTHORIZED: 401;
|
|
241
|
+
/** 禁止访问 */
|
|
242
|
+
readonly FORBIDDEN: 403;
|
|
243
|
+
/** 未找到 */
|
|
244
|
+
readonly NOT_FOUND: 404;
|
|
245
|
+
/** 服务器错误 */
|
|
246
|
+
readonly SERVER_ERROR: 500;
|
|
247
|
+
};
|
|
248
|
+
/**
|
|
249
|
+
* API 响应码类型
|
|
250
|
+
*/
|
|
251
|
+
export type ApiCodeType = (typeof ApiCode)[keyof typeof ApiCode];
|
|
252
|
+
/**
|
|
253
|
+
* 通用错误消息
|
|
254
|
+
*/
|
|
255
|
+
export declare const ErrorMessages: {
|
|
256
|
+
/** 未授权 */
|
|
257
|
+
readonly UNAUTHORIZED: '请先登录';
|
|
258
|
+
/** 禁止访问 */
|
|
259
|
+
readonly FORBIDDEN: '无访问权限';
|
|
260
|
+
/** 未找到 */
|
|
261
|
+
readonly NOT_FOUND: '资源不存在';
|
|
262
|
+
/** 服务器错误 */
|
|
263
|
+
readonly SERVER_ERROR: '服务器错误';
|
|
264
|
+
/** 参数错误 */
|
|
265
|
+
readonly INVALID_PARAMS: '参数错误';
|
|
266
|
+
/** Token 过期 */
|
|
267
|
+
readonly TOKEN_EXPIRED: 'Token 已过期';
|
|
268
|
+
/** Token 无效 */
|
|
269
|
+
readonly TOKEN_INVALID: 'Token 无效';
|
|
270
|
+
};
|
|
271
|
+
/**
|
|
272
|
+
* 错误消息类型
|
|
273
|
+
*/
|
|
274
|
+
export type ErrorMessageType = (typeof ErrorMessages)[keyof typeof ErrorMessages];
|