types.ts 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506
  1. export enum OssType {
  2. ALIYUN = 'aliyun',
  3. MINIO = 'minio',
  4. }
  5. // 全局配置常量
  6. export interface GlobalConfig {
  7. OSS_BASE_URL: string;
  8. OSS_TYPE: OssType;
  9. API_BASE_URL: string;
  10. APP_NAME: string;
  11. ENV: string;
  12. DEFAULT_THEME: string;
  13. MAP_CONFIG: {
  14. KEY: string;
  15. VERSION: string;
  16. PLUGINS: string[];
  17. MAP_MODE: MapMode;
  18. };
  19. CHART_THEME: string;
  20. ENABLE_THEME_CONFIG: boolean;
  21. THEME: ThemeSettings | null;
  22. }
  23. // 定义类型
  24. export interface User {
  25. id: number;
  26. username: string;
  27. nickname?: string;
  28. email?: string;
  29. phone?: string;
  30. role: string;
  31. avatar?: string;
  32. password?: string;
  33. }
  34. export interface MenuItem {
  35. id: number;
  36. name: string;
  37. path: string;
  38. icon: string;
  39. component: string;
  40. parent_id?: number;
  41. children?: MenuItem[];
  42. }
  43. // 认证上下文类型
  44. export interface AuthContextType {
  45. user: User | null;
  46. token: string | null;
  47. login: (username: string, password: string, latitude?: number, longitude?: number) => Promise<void>;
  48. logout: () => Promise<void>;
  49. isAuthenticated: boolean;
  50. isLoading: boolean;
  51. }
  52. // 主题上下文类型
  53. export interface ThemeContextType {
  54. isDark: boolean;
  55. currentTheme: ThemeSettings;
  56. updateTheme: (theme: Partial<ThemeSettings>) => void; // 实时预览
  57. saveTheme: (theme: Partial<ThemeSettings>) => Promise<ThemeSettings>; // 保存到后端
  58. resetTheme: () => Promise<ThemeSettings>;
  59. toggleTheme: () => void; // 切换主题模式
  60. }
  61. // 主题模式枚举
  62. export enum ThemeMode {
  63. LIGHT = 'light',
  64. DARK = 'dark'
  65. }
  66. // 字体大小枚举
  67. export enum FontSize {
  68. SMALL = 'small',
  69. MEDIUM = 'medium',
  70. LARGE = 'large'
  71. }
  72. // 紧凑模式枚举
  73. export enum CompactMode {
  74. NORMAL = 0, // 正常模式
  75. COMPACT = 1 // 紧凑模式
  76. }
  77. // 主题设置类型
  78. export interface ThemeSettings {
  79. /** 主键ID */
  80. id?: number;
  81. /** 用户ID */
  82. user_id: number;
  83. /** 主题模式(light/dark) */
  84. theme_mode: ThemeMode;
  85. /** 主题主色 */
  86. primary_color: string;
  87. /** 背景色 */
  88. background_color?: string;
  89. /** 文字颜色 */
  90. text_color?: string;
  91. /** 边框圆角 */
  92. border_radius?: number;
  93. /** 字体大小(small/medium/large) */
  94. font_size: FontSize;
  95. /** 是否紧凑模式(0否 1是) */
  96. is_compact: CompactMode;
  97. /** 创建时间 */
  98. created_at?: string;
  99. /** 更新时间 */
  100. updated_at?: string;
  101. }
  102. // 启用/禁用状态枚举
  103. export enum EnableStatus {
  104. DISABLED = 0, // 禁用
  105. ENABLED = 1 // 启用
  106. }
  107. // 启用/禁用状态中文映射
  108. export const EnableStatusNameMap: Record<EnableStatus, string> = {
  109. [EnableStatus.DISABLED]: '禁用',
  110. [EnableStatus.ENABLED]: '启用'
  111. };
  112. // 删除状态枚举
  113. export enum DeleteStatus {
  114. NOT_DELETED = 0, // 未删除
  115. DELETED = 1 // 已删除
  116. }
  117. // 删除状态中文映射
  118. export const DeleteStatusNameMap: Record<DeleteStatus, string> = {
  119. [DeleteStatus.NOT_DELETED]: '未删除',
  120. [DeleteStatus.DELETED]: '已删除'
  121. };
  122. // 地图类型
  123. export enum MapMode {
  124. ONLINE = 'online',
  125. OFFLINE = 'offline'
  126. }
  127. // 审核状态枚举
  128. export enum AuditStatus {
  129. PENDING = 0, // 待审核
  130. APPROVED = 1, // 已通过
  131. REJECTED = 2 // 已拒绝
  132. }
  133. // 审核状态中文映射
  134. export const AuditStatusNameMap: Record<AuditStatus, string> = {
  135. [AuditStatus.PENDING]: '待审核',
  136. [AuditStatus.APPROVED]: '已通过',
  137. [AuditStatus.REJECTED]: '已拒绝'
  138. };
  139. // 图标类型映射
  140. type IconType = 'dashboard' | 'user' | 'setting' | 'team' | 'book' | 'calendar' | 'pie-chart' | 'database';
  141. // 图标类型中文映射
  142. export const IconTypeNameMap: Record<IconType, string> = {
  143. 'dashboard': '仪表盘',
  144. 'user': '用户',
  145. 'setting': '设置',
  146. 'team': '团队',
  147. 'book': '文档',
  148. 'calendar': '日历',
  149. 'pie-chart': '图表',
  150. 'database': '数据库'
  151. };
  152. // 附件类型定义
  153. export interface Attachment {
  154. /** 附件ID */
  155. id: string;
  156. /** 附件名称 */
  157. name: string;
  158. /** 附件访问地址 */
  159. url: string;
  160. /** 附件类型(如image/jpeg, application/pdf等) */
  161. type: string;
  162. /** 附件大小(字节) */
  163. size: number;
  164. /** 上传时间 */
  165. upload_time: string;
  166. }
  167. // 操作日志表
  168. export interface OperationLog {
  169. /** 主键ID */
  170. id: number;
  171. /** 操作人ID */
  172. operator_id: number;
  173. /** 操作类型 */
  174. operation_type: string;
  175. /** 操作内容 */
  176. operation_content?: string;
  177. /** 操作结果 */
  178. operation_result?: string;
  179. /** 操作IP */
  180. ip_address?: string;
  181. /** 是否删除 (0否 1是) */
  182. is_deleted?: number;
  183. /** 创建时间 */
  184. created_at: Date;
  185. /** 更新时间 */
  186. updated_at: Date;
  187. }
  188. // 系统设置分组
  189. export enum SystemSettingGroup {
  190. BASIC = 'basic', // 基础设置
  191. FEATURE = 'feature', // 功能设置
  192. UPLOAD = 'upload', // 上传设置
  193. NOTIFICATION = 'notify' // 通知设置
  194. }
  195. // 系统设置键
  196. export enum SystemSettingKey {
  197. // 基础设置
  198. SITE_NAME = 'SITE_NAME', // 站点名称
  199. SITE_DESCRIPTION = 'SITE_DESCRIPTION', // 站点描述
  200. SITE_KEYWORDS = 'SITE_KEYWORDS', // 站点关键词
  201. SITE_LOGO = 'SITE_LOGO', // 站点LOGO
  202. SITE_FAVICON = 'SITE_FAVICON', // 站点图标
  203. // 功能设置
  204. ENABLE_REGISTER = 'ENABLE_REGISTER', // 是否开启注册
  205. ENABLE_CAPTCHA = 'ENABLE_CAPTCHA', // 是否开启验证码
  206. LOGIN_ATTEMPTS = 'LOGIN_ATTEMPTS', // 登录尝试次数
  207. SESSION_TIMEOUT = 'SESSION_TIMEOUT', // 会话超时时间(分钟)
  208. // 上传设置
  209. UPLOAD_MAX_SIZE = 'UPLOAD_MAX_SIZE', // 最大上传大小(MB)
  210. ALLOWED_FILE_TYPES = 'ALLOWED_FILE_TYPES', // 允许的文件类型
  211. IMAGE_COMPRESS = 'IMAGE_COMPRESS', // 是否压缩图片
  212. IMAGE_MAX_WIDTH = 'IMAGE_MAX_WIDTH', // 图片最大宽度
  213. // 通知设置
  214. NOTIFY_ON_LOGIN = 'NOTIFY_ON_LOGIN', // 登录通知
  215. NOTIFY_ON_UPLOAD = 'NOTIFY_ON_UPLOAD', // 上传通知
  216. NOTIFY_ON_ERROR = 'NOTIFY_ON_ERROR', // 错误通知
  217. // 主题设置
  218. ENABLE_THEME_CONFIG = 'ENABLE_THEME_CONFIG' // 是否开启主题配置
  219. }
  220. export type SystemSettingGroupType = SystemSettingGroup;
  221. export type SystemSettingKeyType = SystemSettingKey;
  222. // 系统设置值类型
  223. export type SystemSettingValue = string | number | boolean;
  224. // 系统设置项接口
  225. export interface SystemSetting {
  226. id: number;
  227. key: SystemSettingKeyType; // 设置键
  228. value: SystemSettingValue; // 设置值
  229. description?: string; // 设置描述
  230. group: SystemSettingGroupType; // 设置分组
  231. created_at?: string;
  232. updated_at?: string;
  233. }
  234. // 系统设置分组类型
  235. export interface SystemSettingGroupData {
  236. name: string;
  237. description: string;
  238. settings: SystemSetting[];
  239. }
  240. // 系统设置记录类型
  241. export type SystemSettingRecord = Record<SystemSettingKey, SystemSettingValue>;
  242. // 允许的文件类型枚举
  243. export enum AllowedFileType {
  244. JPG = 'jpg',
  245. JPEG = 'jpeg',
  246. PNG = 'png',
  247. GIF = 'gif',
  248. DOC = 'doc',
  249. DOCX = 'docx',
  250. XLS = 'xls',
  251. XLSX = 'xlsx',
  252. PDF = 'pdf'
  253. }
  254. // 允许的文件类型列表(用于系统设置)
  255. export const ALLOWED_FILE_TYPES = Object.values(AllowedFileType).join(',');
  256. // 文件库接口
  257. export interface FileLibrary {
  258. /** 主键ID */
  259. id: number;
  260. /** 文件名称 */
  261. file_name: string;
  262. /** 原始文件名 */
  263. original_filename?: string;
  264. /** 文件路径 */
  265. file_path: string;
  266. /** 文件类型 */
  267. file_type: string;
  268. /** 文件大小(字节) */
  269. file_size: number;
  270. /** 上传用户ID */
  271. uploader_id?: number;
  272. /** 上传者名称 */
  273. uploader_name?: string;
  274. /** 文件分类 */
  275. category_id?: number;
  276. /** 文件标签 */
  277. tags?: string;
  278. /** 文件描述 */
  279. description?: string;
  280. /** 下载次数 */
  281. download_count: number;
  282. /** 是否禁用 (0否 1是) */
  283. is_disabled?: EnableStatus;
  284. /** 是否被删除 (0否 1是) */
  285. is_deleted?: DeleteStatus;
  286. /** 创建时间 */
  287. created_at: string;
  288. /** 更新时间 */
  289. updated_at: string;
  290. }
  291. // 文件分类接口
  292. export interface FileCategory {
  293. id: number;
  294. name: string;
  295. code: string;
  296. description?: string;
  297. is_deleted?: DeleteStatus;
  298. created_at: string;
  299. updated_at: string;
  300. }
  301. // 知识库表
  302. export interface KnowInfo {
  303. /** 主键ID */
  304. id: number;
  305. /** 标题 */
  306. title: string;
  307. /** 内容 */
  308. content?: string;
  309. /** 作者 */
  310. author?: string;
  311. /** 分类 */
  312. category: string;
  313. /** 标签 */
  314. tags?: string;
  315. /** 封面图片URL */
  316. cover_url?: string;
  317. /** 审核状态 */
  318. audit_status?: number;
  319. /** 排序权重 */
  320. sort_order?: number;
  321. /** 是否删除 (0否 1是) */
  322. is_deleted?: number;
  323. /** 创建时间 */
  324. created_at: string;
  325. /** 更新时间 */
  326. updated_at: string;
  327. }
  328. // 登录位置详细信息
  329. export interface LoginLocationDetail {
  330. /** 记录ID */
  331. id: number;
  332. /** 用户ID */
  333. user_id: number;
  334. /** 登录时间 */
  335. login_time: string;
  336. /** IP地址 */
  337. ip_address: string;
  338. /** 用户代理 */
  339. user_agent: string;
  340. /** 纬度 */
  341. latitude: number | null;
  342. /** 经度 */
  343. longitude: number | null;
  344. /** 位置名称 */
  345. location_name?: string;
  346. /** 关联用户信息 */
  347. user?: {
  348. id: number;
  349. username: string;
  350. nickname?: string;
  351. };
  352. }
  353. // 登录位置信息
  354. export interface LoginLocation {
  355. /** 纬度 */
  356. latitude: number | null;
  357. /** 经度 */
  358. longitude: number | null;
  359. /** IP地址 */
  360. ip_address?: string;
  361. /** 用户代理 */
  362. user_agent?: string;
  363. /** 登录时间 */
  364. login_time?: string;
  365. }
  366. // 消息类型枚举
  367. export enum MessageType {
  368. SYSTEM = 'system', // 系统通知
  369. PRIVATE = 'private', // 私信
  370. ANNOUNCE = 'announce' // 公告
  371. }
  372. // 消息状态枚举
  373. export enum MessageStatus {
  374. UNREAD = 0, // 未读
  375. READ = 1, // 已读
  376. DELETED = 2 // 已删除
  377. }
  378. // 消息状态中文映射
  379. export const MessageStatusNameMap: Record<MessageStatus, string> = {
  380. [MessageStatus.UNREAD]: '未读',
  381. [MessageStatus.READ]: '已读',
  382. [MessageStatus.DELETED]: '已删除'
  383. };
  384. // 消息实体接口
  385. export interface Message {
  386. id: number;
  387. title: string;
  388. content: string;
  389. type: MessageType;
  390. sender_id?: number; // 发送者ID(系统消息可为空)
  391. sender_name?: string; // 发送者名称
  392. created_at: string;
  393. updated_at: string;
  394. }
  395. // 用户消息关联接口
  396. export interface UserMessage {
  397. id: number;
  398. user_id: number;
  399. message_id: number;
  400. title: string;
  401. content: string;
  402. user_status: MessageStatus;
  403. user_message_id: number;
  404. is_deleted?: DeleteStatus;
  405. read_at?: string;
  406. created_at: string;
  407. updated_at: string;
  408. // 关联信息
  409. message?: Message;
  410. sender?: User;
  411. }