types.ts 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410
  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. }
  33. export interface MenuItem {
  34. id: number;
  35. name: string;
  36. path: string;
  37. icon: string;
  38. component: string;
  39. parent_id?: number;
  40. children?: MenuItem[];
  41. }
  42. // 认证上下文类型
  43. export interface AuthContextType {
  44. user: User | null;
  45. token: string | null;
  46. login: (username: string, password: string, latitude?: number, longitude?: number) => Promise<void>;
  47. logout: () => Promise<void>;
  48. isAuthenticated: boolean;
  49. isLoading: boolean;
  50. }
  51. // 主题上下文类型
  52. export interface ThemeContextType {
  53. isDark: boolean;
  54. currentTheme: ThemeSettings;
  55. updateTheme: (theme: Partial<ThemeSettings>) => void; // 实时预览
  56. saveTheme: (theme: Partial<ThemeSettings>) => Promise<ThemeSettings>; // 保存到后端
  57. resetTheme: () => Promise<ThemeSettings>;
  58. toggleTheme: () => void; // 切换主题模式
  59. }
  60. // 主题模式枚举
  61. export enum ThemeMode {
  62. LIGHT = 'light',
  63. DARK = 'dark'
  64. }
  65. // 字体大小枚举
  66. export enum FontSize {
  67. SMALL = 'small',
  68. MEDIUM = 'medium',
  69. LARGE = 'large'
  70. }
  71. // 紧凑模式枚举
  72. export enum CompactMode {
  73. NORMAL = 0, // 正常模式
  74. COMPACT = 1 // 紧凑模式
  75. }
  76. // 主题设置类型
  77. export interface ThemeSettings {
  78. /** 主键ID */
  79. id?: number;
  80. /** 用户ID */
  81. user_id: number;
  82. /** 主题模式(light/dark) */
  83. theme_mode: ThemeMode;
  84. /** 主题主色 */
  85. primary_color: string;
  86. /** 背景色 */
  87. background_color?: string;
  88. /** 文字颜色 */
  89. text_color?: string;
  90. /** 边框圆角 */
  91. border_radius?: number;
  92. /** 字体大小(small/medium/large) */
  93. font_size: FontSize;
  94. /** 是否紧凑模式(0否 1是) */
  95. is_compact: CompactMode;
  96. /** 创建时间 */
  97. created_at?: string;
  98. /** 更新时间 */
  99. updated_at?: string;
  100. }
  101. // 启用/禁用状态枚举
  102. export enum EnableStatus {
  103. DISABLED = 0, // 禁用
  104. ENABLED = 1 // 启用
  105. }
  106. // 启用/禁用状态中文映射
  107. export const EnableStatusNameMap: Record<EnableStatus, string> = {
  108. [EnableStatus.DISABLED]: '禁用',
  109. [EnableStatus.ENABLED]: '启用'
  110. };
  111. // 删除状态枚举
  112. export enum DeleteStatus {
  113. NOT_DELETED = 0, // 未删除
  114. DELETED = 1 // 已删除
  115. }
  116. // 删除状态中文映射
  117. export const DeleteStatusNameMap: Record<DeleteStatus, string> = {
  118. [DeleteStatus.NOT_DELETED]: '未删除',
  119. [DeleteStatus.DELETED]: '已删除'
  120. };
  121. // 地图类型
  122. export enum MapMode {
  123. ONLINE = 'online',
  124. OFFLINE = 'offline'
  125. }
  126. // 审核状态枚举
  127. export enum AuditStatus {
  128. PENDING = 0, // 待审核
  129. APPROVED = 1, // 已通过
  130. REJECTED = 2 // 已拒绝
  131. }
  132. // 审核状态中文映射
  133. export const AuditStatusNameMap: Record<AuditStatus, string> = {
  134. [AuditStatus.PENDING]: '待审核',
  135. [AuditStatus.APPROVED]: '已通过',
  136. [AuditStatus.REJECTED]: '已拒绝'
  137. };
  138. // 图标类型映射
  139. type IconType = 'dashboard' | 'user' | 'setting' | 'team' | 'book' | 'calendar' | 'pie-chart' | 'database';
  140. // 图标类型中文映射
  141. export const IconTypeNameMap: Record<IconType, string> = {
  142. 'dashboard': '仪表盘',
  143. 'user': '用户',
  144. 'setting': '设置',
  145. 'team': '团队',
  146. 'book': '文档',
  147. 'calendar': '日历',
  148. 'pie-chart': '图表',
  149. 'database': '数据库'
  150. };
  151. // 附件类型定义
  152. export interface Attachment {
  153. /** 附件ID */
  154. id: string;
  155. /** 附件名称 */
  156. name: string;
  157. /** 附件访问地址 */
  158. url: string;
  159. /** 附件类型(如image/jpeg, application/pdf等) */
  160. type: string;
  161. /** 附件大小(字节) */
  162. size: number;
  163. /** 上传时间 */
  164. upload_time: string;
  165. }
  166. // 操作日志表
  167. export interface OperationLog {
  168. /** 主键ID */
  169. id: number;
  170. /** 操作人ID */
  171. operator_id: number;
  172. /** 操作类型 */
  173. operation_type: string;
  174. /** 操作内容 */
  175. operation_content?: string;
  176. /** 操作结果 */
  177. operation_result?: string;
  178. /** 操作IP */
  179. ip_address?: string;
  180. /** 是否删除 (0否 1是) */
  181. is_deleted?: number;
  182. /** 创建时间 */
  183. created_at: Date;
  184. /** 更新时间 */
  185. updated_at: Date;
  186. }
  187. // 系统设置分组
  188. export enum SystemSettingGroup {
  189. BASIC = 'basic', // 基础设置
  190. FEATURE = 'feature', // 功能设置
  191. UPLOAD = 'upload', // 上传设置
  192. NOTIFICATION = 'notify' // 通知设置
  193. }
  194. // 系统设置键
  195. export enum SystemSettingKey {
  196. // 基础设置
  197. SITE_NAME = 'SITE_NAME', // 站点名称
  198. SITE_DESCRIPTION = 'SITE_DESCRIPTION', // 站点描述
  199. SITE_KEYWORDS = 'SITE_KEYWORDS', // 站点关键词
  200. SITE_LOGO = 'SITE_LOGO', // 站点LOGO
  201. SITE_FAVICON = 'SITE_FAVICON', // 站点图标
  202. // 功能设置
  203. ENABLE_REGISTER = 'ENABLE_REGISTER', // 是否开启注册
  204. ENABLE_CAPTCHA = 'ENABLE_CAPTCHA', // 是否开启验证码
  205. LOGIN_ATTEMPTS = 'LOGIN_ATTEMPTS', // 登录尝试次数
  206. SESSION_TIMEOUT = 'SESSION_TIMEOUT', // 会话超时时间(分钟)
  207. // 上传设置
  208. UPLOAD_MAX_SIZE = 'UPLOAD_MAX_SIZE', // 最大上传大小(MB)
  209. ALLOWED_FILE_TYPES = 'ALLOWED_FILE_TYPES', // 允许的文件类型
  210. IMAGE_COMPRESS = 'IMAGE_COMPRESS', // 是否压缩图片
  211. IMAGE_MAX_WIDTH = 'IMAGE_MAX_WIDTH', // 图片最大宽度
  212. // 通知设置
  213. NOTIFY_ON_LOGIN = 'NOTIFY_ON_LOGIN', // 登录通知
  214. NOTIFY_ON_UPLOAD = 'NOTIFY_ON_UPLOAD', // 上传通知
  215. NOTIFY_ON_ERROR = 'NOTIFY_ON_ERROR', // 错误通知
  216. // 主题设置
  217. ENABLE_THEME_CONFIG = 'ENABLE_THEME_CONFIG' // 是否开启主题配置
  218. }
  219. export type SystemSettingGroupType = SystemSettingGroup;
  220. export type SystemSettingKeyType = SystemSettingKey;
  221. // 系统设置值类型
  222. export type SystemSettingValue = string | number | boolean;
  223. // 系统设置项接口
  224. export interface SystemSetting {
  225. id: number;
  226. key: SystemSettingKeyType; // 设置键
  227. value: SystemSettingValue; // 设置值
  228. description?: string; // 设置描述
  229. group: SystemSettingGroupType; // 设置分组
  230. created_at?: string;
  231. updated_at?: string;
  232. }
  233. // 系统设置分组类型
  234. export interface SystemSettingGroupData {
  235. name: string;
  236. description: string;
  237. settings: SystemSetting[];
  238. }
  239. // 系统设置记录类型
  240. export type SystemSettingRecord = Record<SystemSettingKey, SystemSettingValue>;
  241. // 允许的文件类型枚举
  242. export enum AllowedFileType {
  243. JPG = 'jpg',
  244. JPEG = 'jpeg',
  245. PNG = 'png',
  246. GIF = 'gif',
  247. DOC = 'doc',
  248. DOCX = 'docx',
  249. XLS = 'xls',
  250. XLSX = 'xlsx',
  251. PDF = 'pdf'
  252. }
  253. // 允许的文件类型列表(用于系统设置)
  254. export const ALLOWED_FILE_TYPES = Object.values(AllowedFileType).join(',');
  255. // 文件库接口
  256. export interface FileLibrary {
  257. /** 主键ID */
  258. id: number;
  259. /** 文件名称 */
  260. file_name: string;
  261. /** 原始文件名 */
  262. original_filename?: string;
  263. /** 文件路径 */
  264. file_path: string;
  265. /** 文件类型 */
  266. file_type: string;
  267. /** 文件大小(字节) */
  268. file_size: number;
  269. /** 上传用户ID */
  270. uploader_id?: number;
  271. /** 上传者名称 */
  272. uploader_name?: string;
  273. /** 文件分类 */
  274. category_id?: number;
  275. /** 文件标签 */
  276. tags?: string;
  277. /** 文件描述 */
  278. description?: string;
  279. /** 下载次数 */
  280. download_count: number;
  281. /** 是否禁用 (0否 1是) */
  282. is_disabled?: EnableStatus;
  283. /** 是否被删除 (0否 1是) */
  284. is_deleted?: DeleteStatus;
  285. /** 创建时间 */
  286. created_at: string;
  287. /** 更新时间 */
  288. updated_at: string;
  289. }
  290. // 文件分类接口
  291. export interface FileCategory {
  292. id: number;
  293. name: string;
  294. code: string;
  295. description?: string;
  296. is_deleted?: DeleteStatus;
  297. created_at: string;
  298. updated_at: string;
  299. }
  300. // 知识库表
  301. export interface KnowInfo {
  302. /** 主键ID */
  303. id: number;
  304. /** 文章的标题 */
  305. title?: string;
  306. /** 文章的标签 */
  307. tags?: string;
  308. /** 文章的内容 */
  309. content?: string;
  310. /** 文章的作者 */
  311. author?: string;
  312. /** 文章的分类 */
  313. category?: string;
  314. /** 文章的封面图片URL */
  315. cover_url?: string;
  316. /** 审核状态 */
  317. audit_status?: number;
  318. /** 是否被删除 (0否 1是) */
  319. is_deleted?: number;
  320. /** 创建时间 */
  321. created_at: Date;
  322. /** 更新时间 */
  323. updated_at: Date;
  324. }