types.ts 11 KB

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