architecture-v1.canvas 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. {
  2. "nodes":[
  3. {"id":"api_layer","type":"text","text":"## API 接口层\n\n| 模块 | 功能 |\n|------|------|\n| advertisement | 广告 |\n| betting | 竞猜 |\n| bss | 业务支撑 |\n| chat | 聊天 |\n| expert | 专家 |\n| live | 直播 |\n| login | 登录 |\n| messageNotice | 消息 |\n| photoSys | 图库 |\n| site | 网站 |\n| system | 系统 |\n| task | 任务 |\n| user | 用户 |\n| video | 视频 |\n| webgw | 网关 |","x":2200,"y":-1750,"width":350,"height":590,"color":"1"},
  4. {"id":"bbs_module","type":"text","text":"## Bbs 论坛管理\n\n**bbsMainboard/** 论坛主版\n- index.vue\n\n**bbsForum/** 论坛管理\n- index.vue\n\n**bbsAttachmentManagement/** 附件\n- index.vue\n\n**bbsPostContentManagement/** 帖子\n- index.vue 帖子列表\n- editPostContentDialog/ 编辑\n- auditDialog/ 审核\n- bbsPostConfig/ 配置\n- comments.vue 评论\n- phoneFrame.vue 手机预览\n- **new/** 新建帖子\n - addBBSPostDialog.vue\n - BBSPostForm.vue\n - postEditor.vue\n - gamePage.vue\n - lottery/ 彩票组件\n- **components/** 评论组件\n - post-comments.vue\n - commentItemBox/Form\n - upIconToggle/downIconToggle\n- **explain-components/** 图解\n- **issue-components/** 期号\n\n**bbsInfo/** 论坛信息\n- index.vue\n\n**bbsCommentsList/** 评论列表\n- index.vue\n\n**photoExplain/** 图解管理\n- index.vue 图解列表\n- addExplain.vue\n- editExplain.vue\n- chooseIssue.vue\n- commentExplain.vue\n- explainEditPage/","x":1600,"y":-4720,"width":300,"height":1340,"color":"3"},
  5. {"id":"photo_module","type":"text","text":"## PhotosSys 图库系统\n\n**series/** 系列管理\n- index.vue\n\n**newspaper/** 报纸管理\n- index.vue\n- relatedLayout.vue\n- RecommendSortedList.vue\n\n**newsPaperIssue/** 期刊发布\n- index.vue 期刊列表\n- batchAddIssues/ 批量添加\n- IssueDialog.vue\n- IssueForm.vue\n- IssueImageUploader.vue\n- CommentTab.vue\n- chooseExplain.vue\n- clearGameTypeCacheDialog.vue\n\n**issueMappingList/** 期号映射\n- index.vue\n- editDialog.vue\n- batchMappingAdd/ 批量映射\n\n**commentsList/** 评论列表\n- index.vue\n\n**websites/** 站点管理\n- index.vue\n\n**guarantee/** 担保管理\n- index.vue\n\n**bbsEncyclopedia/** 百科\n- index.vue\n\n**advertisementList/** 广告\n- index.vue\n- addAdvertisementDailog.vue\n\n**gameResult/** 开奖结果\n- index.vue\n- history.vue 历史记录\n- calendar.vue 日历视图\n- lottoBall.vue / svgLottoBall.vue\n\n**issueVideo/** 期号视频\n- index.vue\n- VideoFormDialog.vue\n- GenericVideoUploader.vue","x":2060,"y":-4720,"width":300,"height":1520,"color":"3"},
  6. {"id":"user_module","type":"text","text":"## User 用户管理\n\n**userList/** 用户列表\n- index.vue 用户列表\n- userListComponent.vue\n- **components/**\n - persionInfo.vue 个人信息\n - accountInfo.vue 账户信息\n - achievementShow.vue 成就\n - phoneInput.vue\n - blockList.vue 黑名单\n - followerList.vue 关注\n - myFans.vue 粉丝\n - myTeams.vue 团队\n - userVisiter.vue 访客\n - anonymousVisiter.vue\n - userVote.vue 投票\n - likeList.vue 点赞\n - favoriteList/ 收藏\n - myComment/ 评论\n - browseHistory/ 浏览历史\n - points/ 积分\n - stars/ 星星\n - editPoints/ 编辑积分\n - ChangePoint/ 积分变更\n - TagMaster/ 标签大师\n - SaleLists/ 卖料\n - BuyingLists/ 买料\n - cashOutListForUser/ 提现\n - SMSCodeSend/ 短信\n\n**clientList/** 客户端列表\n- index.vue\n- basicInformation.vue\n- browsingHistory.vue\n- collectionAnonymously.vue\n- followAnonymously.vue\n- likeAnonymously.vue\n- voatAnonymously.vue","x":2520,"y":-4720,"width":300,"height":1240,"color":"5"},
  7. {"id":"user_module_2","type":"text","text":"## User 用户管理 (续)\n\n**customerTags/** 用户标签\n- index.vue\n- editCustomerTag/\n\n**memberLevel/** 会员等级\n- index.vue\n- editLevelRule/\n\n**pointsRules/** 积分规则\n- index.vue\n- baseConfigTab/\n - PointConfigTab.vue\n - StarConfigTab.vue\n - TaskRewardConfigTab.vue\n\n**pointDetail/** 积分明细\n- index.vue\n\n**starDetail/** 星星明细\n- index.vue\n\n**activityCenter/** 活动中心\n- index.vue\n- activityCenterDialog/\n\n**leaderboard/** 排行榜\n- index.vue\n- fans/ 粉丝榜\n- leaderPoints/ 积分榜\n- overall/ 综合榜\n- popularity/ 人气榜\n- query/ 查询\n- showLeaderBoard/\n- statusTagUser/\n\n**recommendList/** 推广列表\n- index.vue\n- RecommandConfigDialog.vue\n- RecommandDetailDialog.vue","x":2980,"y":-4720,"width":300,"height":1240,"color":"5"},
  8. {"id":"video_module","type":"text","text":"## VideoList 视频管理\n\n**VideoList/** 视频列表\n- index.vue\n- createVideo.vue\n- createVideoDialog.vue\n- editVideo/\n- auditVideo/\n- VideoPlayer.vue\n- VideoHlsPlayer.vue\n- DeferredVideoUploader.vue\n- FileInfo.vue\n- UploadProgress.vue\n- VideoFileInput.vue\n\n**VideoTagList/** 视频标签\n- index.vue\n- createVideoTag.vue\n- videoTagDialog.vue","x":220,"y":-4720,"width":300,"height":560,"color":"1"},
  9. {"id":"chat_module","type":"text","text":"## ChatroomSystem 聊天室\n\n**chatroomList/** 聊天室列表\n- index.vue\n- createRoomDialog.vue\n- createChatRoom.vue\n- createLiveRoom.vue\n- createVoiceRoom.vue\n- rulesConfigDialog.vue\n- whiteConfigDialog.vue\n- whiteListUserAutocomplete.vue\n- selectGameSerialNo/\n- selectIssueId/\n- selectNewspaperCode/\n\n**batchRoomCreator/** 批量创建\n- index.vue\n- addChatroomNameDialog.vue\n- addOwnerDialog.vue\n- mPopover.vue\n\n**chatroomUserManagement/** 成员\n- index.vue\n\n**chatroomMsgList/** 消息列表\n- index.vue\n\n**chatroomMsgManagement/** 消息管理\n- index.vue","x":-760,"y":-4720,"width":360,"height":840,"color":"1"},
  10. {"id":"live_module","type":"text","text":"## LiveRoomManagement 直播\n\n**liveRoomList/** 直播列表\n- index.vue\n\n**liveRoomUserManagement/** 成员\n- index.vue\n\n**liveRoomMsgList/** 消息列表\n- index.vue\n\n**liveRoomMessageManagement/** 消息管理\n- index.vue","x":-240,"y":-4720,"width":300,"height":480,"color":"1"},
  11. {"id":"system_module","type":"text","text":"## System 系统管理\n\n**account/** 账号管理\n- index.vue 账号列表\n- addUserDialog.vue 添加用户\n\n**roles.vue** 角色管理\n**resource** 资源管理 (路由内嵌)\n\n**gameTypeManage/** 彩种管理\n- index.vue 彩种列表\n- addGameType/ 添加彩种\n- editGameType/ 编辑彩种\n\n**operationLog.vue** 操作日志\n**task.vue** 任务调度\n**taskPush/** 任务推送\n**ipAddress/** IP地址管理\n**uploadLog/** 上传日志\n**dictionary.vue** 字典配置\n**SMSManage/** 短信管理\n**sensitiveWord/** 敏感词管理","x":680,"y":-4720,"width":300,"height":600,"color":"2"},
  12. {"id":"ad_module","type":"text","text":"## AdvertisementManagement 广告\n\n**index.vue** 广告管理\n- AdvertisementSortedList.vue\n- addAdvertisementDialog.vue","x":4820,"y":-4720,"width":300,"height":230,"color":"4"},
  13. {"id":"site_module","type":"text","text":"## Site 网站管理\n\n**codeManagement/** 推广码\n- index.vue 推广码列表\n\n**templateManagement/** 模板管理\n- index.vue 模板列表\n- addTemplateDailog.vue\n- templatePath.vue\n- sketchRef.vue\n- codeStaticDailog.vue\n\n**sketchManagement/** 草图管理\n- index.vue 草图列表\n- sketchInfo.vue\n- sketchPath.vue\n\n**siteManagement/** 站点管理\n- index.vue 站点列表\n- addWebsite.vue\n- domainTab.vue\n- bindTemplateDetail.vue\n- sketchTemplateDetail.vue\n\n**Domain/** 域名管理\n- index.vue 域名列表\n- DomainInformationTabs.vue\n- SketchBand/TemplateBand/WebsiteBand\n\n**Navi/** 导航站\n- navigationConfig.vue\n- naviNestedTable.vue\n\n**componentBase/** 页面组件库\n- index.vue\n- viewComponent.vue","x":1140,"y":-4720,"width":300,"height":1060,"color":"2"},
  14. {"id":"expert_module","type":"text","text":"## ExpertManagement 专家\n\n**expertList/** 专家列表\n- index.vue\n- expertRulesConfig/\n\n**competitionList/** 竞选列表\n- index.vue\n\n**pointsList/** 打赏记录\n- index.vue\n- configDialog.vue\n\n**saleList/** 卖料列表\n- index.vue\n- **XSdialog/**\n - index.vue\n - saleInfo.vue\n - gameBox.vue\n - ChooseLastSale.vue\n\n**buyingList/** 买料列表\n- index.vue\n\n**sixKingList/** 六肖王\n- index.vue\n- Sixking.vue\n- QueryForm.vue\n- Switcher.vue\n- ExpertStatistics.vue\n- HistoryChampion.vue\n- WinningStreakRank.vue\n- SixKingRankBoard/\n- GameTypeCodeItem.vue","x":3440,"y":-4720,"width":300,"height":1040,"color":"5"},
  15. {"id":"betting_module","type":"text","text":"## Betting 竞猜管理\n\n**bettingList/** 竞猜列表\n- index.vue\n- bettingInfo.vue\n- gameView.vue","x":3900,"y":-4720,"width":300,"height":220,"color":"4"},
  16. {"id":"message_module","type":"text","text":"## MessageNotice 消息公告\n\n**index.vue** 公告管理\n- NoticeSortedList.vue\n\n**maintenance.vue** 维护管理","x":4360,"y":-4720,"width":300,"height":240,"color":"4"},
  17. {"id":"task_module","type":"text","text":"## TaskManagement 任务\n\n**TaskList/** 任务列表\n- index.vue\n\n**liveTaskList/** 直播任务\n- index.vue\n- **createLiveTaskRoom/**\n - index.vue\n - LiveVideoUploader.vue\n\n**components/**\n- basicDateRangeSelecter.vue\n- createTaskRoomDialog.vue\n- createVoiceTaskRoom.vue\n- fileUploaderBtn.vue","x":5280,"y":-4720,"width":300,"height":560,"color":"4"},
  18. {"id":"order_module","type":"text","text":"## Order 订单中心\n\n**orderList/** 订单列表\n- index.vue\n\n**cashOut/** 提现列表\n- index.vue\n- **auditCashOut/**\n - index.vue 审核\n - AuditCashOutReason.vue\n- **cashOutConfig/**\n - index.vue 配置","x":5740,"y":-4720,"width":300,"height":440,"color":"4"},
  19. {"id":"other_pages","type":"text","text":"## 其他页面\n\n**Home/** 首页\n- index.vue 仪表盘\n- echarts/ 图表组件\n - index.vue\n - bar/ 柱状图\n - line/ 折线图\n\n**Login/** 登录\n- index.vue\n\n**SSO/** 单点登录\n- index.vue\n\n**Demo/** 演示\n- index.vue\n\n**404.vue** 错误页面","x":6200,"y":-4720,"width":300,"height":600,"color":"6"},
  20. {"id":"service_layer","type":"text","text":"## Service 服务层\n\n**业务服务**\n- bbs.ts BBS服务\n- website.ts 网站服务\n- kv.ts 键值存储\n\n**拦截器**\n- interceptorChain.ts 拦截器链","x":2960,"y":-1800,"width":300,"height":305,"color":"2"},
  21. {"id":"env_config","type":"text","text":"## 环境配置\n\n**开发环境**\n- .env.development.49gallery\n- .env.development.6gallery\n\n**生产环境**\n- .env.production\n- .env.production.49gallery\n- .env.production.6gallery\n\n**构建命令**\n- dev:49gallery\n- dev:6gallery\n- build\n- test / test:e2e","x":2960,"y":-1390,"width":300,"height":470,"color":"2"},
  22. {"id":"cicd_pipeline","type":"text","text":"## CI/CD 流水线\n\n**Jenkins Pipeline**\n- Jenkinsfile.dev (6gallery)\n- Jenkinsfile.49dev\n\n**构建阶段**\n1. 初始化\n2. 代码拉取\n3. 更新子模块\n4. 依赖安装 (pnpm)\n5. 生成配置文件\n6. 项目构建\n7. Cloudflare 部署\n\n**通知集成**\n- 📱 Telegram Bot\n- 🔔 飞书 Webhook\n- 🐛 禅道 Bug 追踪\n\n**部署目标**\n- Cloudflare Pages\n- tk-admin6.pwtk.cc","x":3540,"y":-1495,"width":300,"height":680,"color":"1"},
  23. {"id":"tech_stack","type":"text","text":"## 技术栈\n\n- **前端框架**: Vue 3.5\n- **构建工具**: Vite 5.3\n- **语言**: TypeScript 5.0\n- **UI组件**: Element Plus 2.7 + Vant 4.9\n- **状态管理**: Pinia 2.0\n- **路由**: Vue Router 4.2\n- **HTTP**: Axios 1.4\n- **国际化**: vue-i18n 9.2\n- **图表**: ECharts 5.4\n- **编辑器**: TinyMCE / CKEditor / WangEditor","x":-6080,"y":-4410,"width":380,"height":360,"color":"4"},
  24. {"id":"todo_list","type":"text","text":"## 待办事项\n\n### 技术优化\n- [ ] 组件库文档完善\n- [ ] 单元测试覆盖率提升\n- [ ] E2E 测试用例补充\n- [ ] 性能优化\n\n### 功能迭代\n- [ ] 国际化完善\n- [ ] 移动端适配","x":-6050,"y":-3420,"width":300,"height":380,"color":"1"},
  25. {"id":"i18n","type":"text","text":"## 国际化 (i18n)\n\n**语言支持**\n- 🇨🇳 zh-cn 简体中文 (63K)\n- 🇹🇼 zh-tw 繁体中文 (63K)\n- 🇺🇸 en 英文 (70K)\n\n**特性**\n- vue-i18n 9.2\n- 浏览器语言自动检测\n- localStorage 持久化\n- 动态切换支持","x":-6030,"y":-3860,"width":280,"height":380,"color":"5"},
  26. {"id":"testing","type":"text","text":"## 测试体系\n\n**单元测试 (Vitest)**\n```\ntests/unit/utils/\n├── dataFormat.spec.ts\n├── validators.spec.ts\n├── getCid.spec.ts\n└── ... (18个测试文件)\n```\n\n**E2E测试 (Playwright)**\n```\ntests/e2e/\n├── auth/\n├── mocks/\n└── core/\n```\n\n**命令**\n- pnpm test\n- pnpm test:coverage\n- pnpm test:e2e","x":-3295,"y":-4505,"width":370,"height":610,"color":"1"},
  27. {"id":"assets","type":"text","text":"## 静态资源\n\n**CSS样式**\n- main.less 入口\n- base.less 基础 (9K)\n- global.less 全局 (10K)\n- reset.css 重置\n- skin.css 皮肤 (68K)\n\n**字体图标**\n- iconfont/ 自定义图标\n\n**图片资源**\n- images/ (41个文件)\n\n**JSON数据**\n- json/ 静态数据","x":-2772,"y":-4495,"width":395,"height":500,"color":"3"},
  28. {"id":"directives","type":"text","text":"## 自定义指令\n\n- **v-copy** 复制到剪贴板\n- **v-permission** 权限控制","x":-2005,"y":-3910,"width":240,"height":140,"color":"3"},
  29. {"id":"http_service","type":"text","text":"## HTTP 服务层\n\n**Axios 封装**\n- 请求/响应拦截器\n- Token 自动注入\n- 错误统一处理\n- Loading 全局遮罩\n\n**多服务支持**\n- apiPath 主API\n- chatApiPath 聊天服务\n- taskApiPath 任务服务\n- videoApiPath 视频服务\n- liveApiPath 直播服务\n- audioConvertToolUrl 音频转换","x":2220,"y":-640,"width":300,"height":470,"color":"1"},
  30. {"id":"vite_config","type":"text","text":"## Vite 构建配置\n\n**插件**\n- @vitejs/plugin-vue\n- unplugin-auto-import\n- unplugin-vue-components\n- unplugin-icons\n- vite-plugin-html\n- vite-plugin-vue-devtools\n\n**代码分割**\n- element-plus 单独分块\n- wangeditor 单独分块\n- vue-vendor (vue/pinia/router)\n- vendor-lodash-utils\n\n**图标集**\n- ep / mdi / ri / ic\n- openmoji / twemoji\n\n**开发服务器**\n- 端口: 8000\n- 代理: VITE_PROXY_DOMAIN","x":2960,"y":-500,"width":300,"height":660,"color":"4"},
  31. {"id":"data_flow","type":"text","text":"## 数据流\n\n```\n用户操作\n ↓\nViews 页面\n ↓\nComposables/Hooks\n ↓\nAPI 接口调用\n ↓\nHTTP Service (Axios)\n ↓\n后端服务\n ↓\n响应数据\n ↓\nPinia Stores\n ↓\nComponents 更新\n```","x":-765,"y":-585,"width":370,"height":520,"color":"6"},
  32. {"id":"architecture","type":"text","text":"## 架构流程\n\n```\n浏览器\n ↓\nVue Router (路由守卫)\n ↓\nViews (页面组件)\n ↓\nComponents (公共组件)\n ↓\nAPI Layer (Axios)\n ↓\n后端服务\n```\n\n**认证流程**\n- Cookie: token, cid\n- SSO 单点登录支持","x":-305,"y":-2545,"width":440,"height":610,"color":"6"},
  33. {"id":"project_structure","type":"text","text":"## 项目结构\n\n```\nsrc/\n├── api/ # 接口层 (22模块)\n├── assets/ # 静态资源\n├── components/ # 组件 (95+)\n├── composables/ # 组合函数 (10)\n├── const/ # 常量\n├── directive/ # 指令 (2)\n├── hooks/ # 钩子 (5)\n├── locales/ # 国际化\n├── router/ # 路由\n├── service/ # 服务层\n├── stores/ # 状态 (13)\n├── types/ # 类型\n├── utils/ # 工具 (45+)\n└── views/ # 页面 (19模块)\n```","x":-290,"y":-1780,"width":410,"height":620,"color":"6"},
  34. {"id":"views_summary","type":"text","text":"## Views 页面统计\n\n| 模块 | 页面数 |\n|------|-------|\n| System | 15 |\n| Site | 25 |\n| Bbs | 45 |\n| PhotosSys | 30 |\n| User | 55 |\n| ChatroomSystem | 18 |\n| LiveRoomManagement | 4 |\n| VideoList | 15 |\n| ExpertManagement | 20 |\n| Order | 6 |\n| Betting | 3 |\n| TaskManagement | 8 |\n| MessageNotice | 3 |\n| AdvertisementManagement | 3 |\n| Home | 4 |\n| Login/SSO/Demo/404 | 4 |\n\n**总计: 230+ 页面**","x":-290,"y":-1030,"width":410,"height":700,"color":"6"},
  35. {"id":"router_guard","type":"text","text":"## 路由守卫\n\n**认证检查**\n- Cookie token 验证\n- accountInfo API 校验\n\n**SSO 登录**\n- /superAdmin/ssoLogin\n- JWT Token 解析\n- cid 客户ID 提取\n\n**白名单路由**\n- /login\n- /superAdmin/ssoLogin\n\n**会话管理**\n- lastVisitedPath 记录\n- 自动跳转最后访问页\n- 失效自动清理\n\n**清理数据**\n- token / cid / state\n- imgUrl / last_bbs_post_content","x":375,"y":-2580,"width":280,"height":685,"color":"5"},
  36. {"id":"hooks","type":"text","text":"## Hooks 钩子函数\n\n- **useGameTypes** 彩种类型\n- **useSearch** 搜索功能\n- **useSession** 会话管理\n- **useSystemStatus** 系统状态\n- **useTablehook** 表格钩子","x":-3250,"y":-3630,"width":280,"height":250,"color":"4"},
  37. {"id":"stores","type":"text","text":"## Pinia Stores\n\n- **userinfo** - 用户信息\n- **menulist** - 菜单列表\n- **bettingStore** - 竞猜状态\n- **modalStore** - 弹窗状态\n- **searchStore** - 搜索状态\n- **photoGroupState** - 图组\n- **commentsState** - 评论\n- **kvStore** - 键值存储\n- **manageSiteStore** - 站点管理\n- **tagview** - 标签页\n- **changeI18n** - 国际化","x":-1840,"y":-565,"width":300,"height":320,"color":"4"},
  38. {"id":"composables","type":"text","text":"## Composables 组合式函数\n\n**上传相关**\n- useChunkUpload 分片上传\n- useVideoUpload 视频上传\n- useDeferredVideoUpload 延迟上传\n- useGenericVideoUpload 通用上传\n- useFileValidation 文件验证\n\n**业务逻辑**\n- useMultiSelectLogic 多选逻辑\n- useSubmitData 提交数据\n- useRoomName 房间名\n- useWhiteList 白名单\n- useAppInfo 应用信息","x":-2585,"y":-685,"width":300,"height":560,"color":"5"},
  39. {"id":"components","type":"text","text":"## 公共组件概览 (109 组件)\n\n| 分类 | 数量 |\n|------|------|\n| 核心表格/表单 | 12 |\n| 编辑器 | 8 |\n| 选择器 (select*) | 22 |\n| 自动完成 (autoChose*) | 10 |\n| 自动完成 (*Autocomplete) | 7 |\n| 文件上传 | 5 |\n| 媒体播放 | 3 |\n| 通用UI | 9 |\n| 模态框 (modalCommon) | 10 |\n| 布局组件 (common) | 6 |\n| 其他 | 17 |\n\n**组件目录**: 95个子目录","x":-2675,"y":-2465,"width":390,"height":450,"color":"3"},
  40. {"id":"select_components","type":"text","text":"## 选择器组件 (25+)\n\n**业务选择器**\n- selectUserId 用户ID\n- selectNickname 昵称\n- selectWebSiteId 站点\n- selectForumID 论坛\n- selectMainboardID 主版\n- selectGameTypeList 彩种\n- selectPlayTypeCodeList 玩法\n- selectTemplateId 模板\n- selectSketchCode 草图\n- selectIssue 期号\n- selectVideoTagList 视频标签\n\n**自动完成**\n- autoChose* 系列 (10+)\n- userAutocomplete 用户\n- templateAutocomplete 模板","x":-2620,"y":-1750,"width":280,"height":400,"color":"5"},
  41. {"id":"comp_core","type":"text","text":"## 核心表格/表单组件 (12)\n\n**数据表格**\n- mTable 数据表格\n- mSynchronousTable 同步表格\n- checkboxTable 复选表格\n\n**表单组件**\n- mForm 通用表单\n- mSearchForm 搜索表单\n- mDialogForm 对话框表单\n- modalForm 模态表单\n\n**其他**\n- mComment 评论组件\n- mTabPane 标签页\n- mAutoSelect 自动选择\n- mAutocomplete 自动完成\n- mDatePick 日期选择\n- mEditor 编辑器封装\n- mUpload 上传封装","x":-4695,"y":-2275,"width":300,"height":645,"color":"3"},
  42. {"id":"comp_upload","type":"text","text":"## 文件上传组件 (5)\n\n**图片上传**\n- FileImageUpload 图片上传\n- FileMultipleImageUpload 多图上传\n- uploadImage 图片上传\n- cropImg 图片裁剪\n\n**通用上传**\n- mUpload 通用上传","x":-5455,"y":-1550,"width":300,"height":260,"color":"1"},
  43. {"id":"comp_media","type":"text","text":"## 媒体组件 (4)\n\n- videoViewer 视频播放器\n- audioViewer 音频播放器\n- AsyncImage 异步图片","x":-5875,"y":-1120,"width":300,"height":180,"color":"1"},
  44. {"id":"comp_selectors","type":"text","text":"## 选择器组件 (22)\n\n**用户相关**\n- selectUserId 用户ID\n- selectNickname 昵称\n- selectUserIdAndNickname 用户+昵称\n- selectExpertUserId 专家用户\n- selectWhiteUser 白名单用户\n\n**站点相关**\n- selectWebSiteId 站点ID\n- selectBindSiteId 绑定站点\n- selectDomain 域名\n- selectTemplateId 模板\n- selectSystemTemplate 系统模板\n- selectSketchCode 草图\n\n**论坛相关**\n- selectForumID 论坛ID\n- selectForumIDByMainBoardID 主版论坛\n- selectMainboardID 主版ID\n\n**彩种相关**\n- selectGameTypeList 彩种列表\n- selectPlayTypeCodeList 玩法列表\n- selectIssue 期号\n- selectIssueByYear 年度期号\n\n**其他**\n- selectVideoTagList 视频标签\n- selectTagList 标签列表\n- selectPhoneCode 手机区号\n- selectIPList IP列表","x":-4695,"y":-3135,"width":300,"height":780,"color":"5"},
  45. {"id":"comp_editors","type":"text","text":"## 编辑器组件 (8)\n\n**TinyMCE 系列**\n- TinyEditor 富文本编辑器\n- TextTinyEditor 文本编辑器\n\n**CKEditor 系列**\n- CKEditor CKEditor 4\n- CKEditor5 CKEditor 5\n\n**WangEditor**\n- WangEditor 王编辑器\n- Editor 通用编辑器\n\n**特殊编辑器**\n- TextEditor 纯文本\n- TextEditorUploadHtml HTML上传","x":-4695,"y":-1550,"width":300,"height":550,"color":"3"},
  46. {"id":"comp_ui","type":"text","text":"## 通用UI组件 (14)\n\n**状态/切换**\n- StatusToggle 状态切换\n- expandIcon 展开图标\n- countdown 倒计时\n\n**链接/复制**\n- linkWithCopy 链接复制\n- codePopover 代码弹框\n- simplePopover 简单弹框\n\n**标签/视图**\n- tagsView 标签视图\n\n**时间选择**\n- BasicTimePicker 基础时间\n- timeSelect 时间选择\n- timeSelect2 时间选择2\n\n**远程输入**\n- remoteInput 远程输入\n- uniRemoteInput 通用远程\n- sysTemplateRemoteInput 系统模板\n\n**彩种**\n- gameTypeList 彩种列表\n- gameTypeListMulti 多彩种\n- gamePlayTypeCode 玩法代码","x":-4695,"y":-920,"width":300,"height":865,"color":"4"},
  47. {"id":"comp_modal","type":"text","text":"## 模态框组件 (10)\n\n**modalCommon/**\n\n**BBS相关**\n- bbsSeriesModal BBS系列\n- forumSeriesModal 论坛系列\n- mainboardSeriesModal 主版系列\n- postSeriesModal 帖子系列\n- postScreenDetail 帖子详情\n\n**图库相关**\n- newsSeriesModal 新闻系列\n- photoSeriesModal 图片系列\n\n**站点相关**\n- domainSeriesModal 域名系列\n- siteDetailModal 站点详情","x":-4695,"y":25,"width":300,"height":550,"color":"4"},
  48. {"id":"comp_common","type":"text","text":"## 通用布局组件 (6)\n\n**common/**\n\n- header 页头\n- footer 页脚\n- menu 菜单\n- copy 复制\n- formPro 表单Pro\n- SingleSelectArray 单选数组","x":-4695,"y":655,"width":300,"height":280,"color":"4"},
  49. {"id":"comp_phone","type":"text","text":"## 手机/地区组件 (6)\n\n**手机号**\n- MobileCountry 国家手机\n- MobilePhoneWithCountryCodes 带区号手机\n- selectPhoneCode 区号选择\n\n**地区/语言**\n- AreaSelect 地区选择\n- AreaSelectByWebsiteId 站点地区\n- languageSelect 语言选择\n- languageSelectByWebsiteId 站点语言\n- switchLanguage 切换语言","x":-5155,"y":1530,"width":300,"height":340,"color":"2"},
  50. {"id":"comp_autocomplete","type":"text","text":"## 自动完成组件 (17)\n\n**autoChose* 系列 (10)**\n- autoChoseUserId 用户ID\n- autoChoseNickname 昵称\n- autoChoseLoginId 登录ID\n- autoChoseWebSiteId 站点\n- autoChoseSiteId 站点ID\n- autoChoseTemplate 模板\n- autoChoseSketchCode 草图\n- autoChoseIssue 期号\n- autoChosePromotionCode 推广码\n\n**Autocomplete 系列 (7)**\n- AutoComplete 通用自动完成\n- userAutocomplete 用户\n- userDeleteAutocomplete 删除用户\n- userTwoAutocomplete 双用户\n- templateAutocomplete 模板\n- hAutocomplete H自动完成\n- oneAutocomplete 单选\n- dualAutocomplete 双选","x":-4695,"y":-3885,"width":300,"height":620,"color":"5"},
  51. {"id":"utils_layer","type":"text","text":"## Utils 工具函数\n\n**数据处理**\n- dataFormat 数据格式化\n- dateFormat 日期格式化\n- numberFormat 数字格式化\n- JSONFormate JSON处理\n\n**认证相关**\n- clearAuth 清除认证\n- saveAuthTokens 保存令牌\n- isLoggedIn 登录状态\n- passwordEncrypt 密码加密\n\n**业务工具**\n- getCid 获取客户ID\n- getImageUrl 图片URL\n- getServiceUrl 服务URL\n- validators 验证器\n\n**存储**\n- localStorage\n- sessionStorage","x":-3970,"y":-3965,"width":400,"height":670,"color":"2"},
  52. {"id":"constants","type":"text","text":"## 常量配置\n\n**const/**\n- options.ts 选项配置 (9K)\n- options.json 选项数据\n- phone.json 手机号码 (30K)\n- medalMap.ts 勋章映射\n- commonSet.ts 通用设置\n\n**constants/**\n- countryCodeAndPhoneCode.json\n- localStorageKeys.ts\n- sessionStorageKeys.ts","x":-3910,"y":-5060,"width":280,"height":280,"color":"2"},
  53. {"id":"types_system","type":"text","text":"## 类型系统\n\n**核心类型 (types/)**\n- GameType.ts 彩种类型\n- Request.ts 请求/响应\n- Models.ts 数据模型\n- Interceptor.ts 拦截器\n\n**全局类型 (global_types/)**\n- global.d.ts 全局声明\n- video-upload.ts 视频上传","x":-3910,"y":-4510,"width":280,"height":280,"color":"4"},
  54. {"id":"df8065411e2e3be3","type":"text","text":"","x":6720,"y":-4720,"width":250,"height":540},
  55. {"id":"title","type":"text","text":"# PWTK Admin Web 架构 v1\n\n**日期**: 2025-01-02\n**版本**: 1.2.51\n**状态**: 生产环境\n\n技术栈:Vue 3 + TypeScript + Vite\nUI框架:Element Plus + Vant\n\n**Views 模块**: 19个\n**Vue 页面**: 230+\n**公共组件**: 109个","x":-5575,"y":-4890,"width":400,"height":340,"color":"6"}
  56. ],
  57. "edges":[
  58. {"id":"edge_system_api","fromNode":"system_module","fromSide":"bottom","toNode":"api_layer","toSide":"top","label":"API 调用"},
  59. {"id":"edge_site_api","fromNode":"site_module","fromSide":"bottom","toNode":"api_layer","toSide":"top"},
  60. {"id":"edge_bbs_api","fromNode":"bbs_module","fromSide":"bottom","toNode":"api_layer","toSide":"top"},
  61. {"id":"edge_photo_api","fromNode":"photo_module","fromSide":"bottom","toNode":"api_layer","toSide":"top"},
  62. {"id":"edge_user_api","fromNode":"user_module","fromSide":"bottom","toNode":"api_layer","toSide":"top"},
  63. {"id":"edge_user2_api","fromNode":"user_module_2","fromSide":"bottom","toNode":"api_layer","toSide":"top"},
  64. {"id":"edge_chat_api","fromNode":"chat_module","fromSide":"bottom","toNode":"api_layer","toSide":"top"},
  65. {"id":"edge_live_api","fromNode":"live_module","fromSide":"bottom","toNode":"api_layer","toSide":"top"},
  66. {"id":"edge_video_api","fromNode":"video_module","fromSide":"bottom","toNode":"api_layer","toSide":"top"},
  67. {"id":"edge_expert_api","fromNode":"expert_module","fromSide":"bottom","toNode":"api_layer","toSide":"top"},
  68. {"id":"edge_order_api","fromNode":"order_module","fromSide":"bottom","toNode":"api_layer","toSide":"top"},
  69. {"id":"edge_betting_api","fromNode":"betting_module","fromSide":"bottom","toNode":"api_layer","toSide":"top"},
  70. {"id":"edge_task_api","fromNode":"task_module","fromSide":"bottom","toNode":"api_layer","toSide":"top"},
  71. {"id":"edge_message_api","fromNode":"message_module","fromSide":"bottom","toNode":"api_layer","toSide":"top"},
  72. {"id":"edge_ad_api","fromNode":"ad_module","fromSide":"bottom","toNode":"api_layer","toSide":"top"},
  73. {"id":"edge_other_api","fromNode":"other_pages","fromSide":"bottom","toNode":"api_layer","toSide":"top"},
  74. {"id":"edge_api_http","fromNode":"api_layer","fromSide":"bottom","toNode":"http_service","toSide":"top","label":"HTTP封装"},
  75. {"id":"edge_api_env","fromNode":"api_layer","fromSide":"right","toNode":"env_config","toSide":"left","label":"环境配置"},
  76. {"id":"edge_service_api","fromNode":"service_layer","fromSide":"left","toNode":"api_layer","toSide":"right","label":"服务调用"},
  77. {"id":"edge_stores_arch","fromNode":"stores","fromSide":"right","toNode":"architecture","toSide":"left","label":"状态流转"},
  78. {"id":"edge_comp_arch","fromNode":"components","fromSide":"right","toNode":"architecture","toSide":"left"},
  79. {"id":"edge_utils_comp","fromNode":"utils_layer","fromSide":"right","toNode":"hooks","toSide":"left","label":"工具支持"},
  80. {"id":"edge_composables_stores","fromNode":"composables","fromSide":"right","toNode":"stores","toSide":"left","label":"状态复用"},
  81. {"id":"edge_hooks_comp","fromNode":"hooks","fromSide":"right","toNode":"components","toSide":"left"},
  82. {"id":"edge_directive_comp","fromNode":"directives","fromSide":"bottom","toNode":"components","toSide":"right"},
  83. {"id":"edge_i18n_tech","fromNode":"i18n","fromSide":"top","toNode":"tech_stack","toSide":"bottom","label":"语言支持"},
  84. {"id":"edge_types_utils","fromNode":"types_system","fromSide":"bottom","toNode":"utils_layer","toSide":"top","label":"类型定义"},
  85. {"id":"edge_const_types","fromNode":"constants","fromSide":"bottom","toNode":"types_system","toSide":"top"},
  86. {"id":"edge_test_utils","fromNode":"testing","fromSide":"bottom","toNode":"hooks","toSide":"top","label":"测试覆盖"},
  87. {"id":"edge_assets_comp","fromNode":"assets","fromSide":"bottom","toNode":"components","toSide":"top","label":"样式资源"},
  88. {"id":"edge_select_comp","fromNode":"select_components","fromSide":"top","toNode":"components","toSide":"bottom","label":"选择器"},
  89. {"id":"edge_flow_stores","fromNode":"data_flow","fromSide":"left","toNode":"stores","toSide":"right","label":"数据流向"},
  90. {"id":"edge_vite_env","fromNode":"vite_config","fromSide":"top","toNode":"env_config","toSide":"bottom","label":"构建配置"},
  91. {"id":"edge_cicd_env","fromNode":"cicd_pipeline","fromSide":"left","toNode":"env_config","toSide":"right","label":"部署流程"},
  92. {"id":"edge_guard_arch","fromNode":"router_guard","fromSide":"left","toNode":"architecture","toSide":"right","label":"认证流程"},
  93. {"id":"edge_cicd_vite","fromNode":"cicd_pipeline","fromSide":"bottom","toNode":"vite_config","toSide":"right","label":"pnpm build"},
  94. {"id":"edge_summary_struct","fromNode":"views_summary","fromSide":"top","toNode":"project_structure","toSide":"bottom","label":"页面统计"},
  95. {"id":"edge_comp_core","fromNode":"comp_core","fromSide":"right","toNode":"components","toSide":"left","label":"核心组件"},
  96. {"id":"edge_comp_editors","fromNode":"comp_editors","fromSide":"right","toNode":"components","toSide":"left"},
  97. {"id":"edge_comp_selectors","fromNode":"comp_selectors","fromSide":"right","toNode":"components","toSide":"left"},
  98. {"id":"edge_comp_autocomplete","fromNode":"comp_autocomplete","fromSide":"right","toNode":"components","toSide":"left"},
  99. {"id":"edge_comp_upload","fromNode":"comp_upload","fromSide":"right","toNode":"comp_core","toSide":"left"},
  100. {"id":"edge_comp_media","fromNode":"comp_media","fromSide":"right","toNode":"comp_upload","toSide":"bottom"},
  101. {"id":"edge_comp_ui","fromNode":"comp_ui","fromSide":"right","toNode":"components","toSide":"left"},
  102. {"id":"edge_comp_modal","fromNode":"comp_modal","fromSide":"right","toNode":"components","toSide":"left"},
  103. {"id":"edge_comp_common","fromNode":"comp_common","fromSide":"right","toNode":"components","toSide":"left"},
  104. {"id":"edge_comp_phone","fromNode":"comp_phone","fromSide":"right","toNode":"comp_common","toSide":"bottom"}
  105. ]
  106. }