types.ts 11 KB

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