types.ts 11 KB

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