types.ts 11 KB

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