create-windy 0.6.21 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/dist/cli.js +11 -4
  2. package/package.json +1 -1
  3. package/template/.windy-template.json +2 -2
  4. package/template/apps/server/src/audit/policy.ts +6 -1
  5. package/template/apps/server/src/auth/bootstrap-admin.ts +10 -1
  6. package/template/apps/server/src/auth/composition.ts +5 -0
  7. package/template/apps/server/src/auth/credential-authorization.test.ts +257 -0
  8. package/template/apps/server/src/auth/credential-routes.test.ts +1 -0
  9. package/template/apps/server/src/auth/credential-service.ts +47 -12
  10. package/template/apps/server/src/auth/drizzle-repository.ts +13 -5
  11. package/template/apps/server/src/auth/drizzle-session-operations.ts +1 -0
  12. package/template/apps/server/src/auth/repository.ts +9 -6
  13. package/template/apps/server/src/auth/routes.test-support.ts +1 -0
  14. package/template/apps/server/src/auth/runtime.ts +4 -0
  15. package/template/apps/server/src/auth/service-options.ts +2 -0
  16. package/template/apps/server/src/auth/service.ts +2 -0
  17. package/template/apps/server/src/auth/user-credential-access.ts +37 -0
  18. package/template/apps/server/src/foundation-activation.test.ts +24 -1
  19. package/template/apps/server/src/foundation.ts +0 -2
  20. package/template/apps/server/src/index.ts +1 -0
  21. package/template/apps/server/src/runtime-development.ts +2 -0
  22. package/template/apps/server/src/runtime.test.ts +13 -4
  23. package/template/apps/server/src/system/department-organization.ts +58 -59
  24. package/template/apps/server/src/system/department-read-routes.ts +54 -0
  25. package/template/apps/server/src/system/department-routes.test.ts +27 -19
  26. package/template/apps/server/src/system/department-routes.ts +95 -33
  27. package/template/apps/server/src/system/department-transition-safety.test.ts +148 -0
  28. package/template/apps/server/src/system/department-validation.ts +79 -0
  29. package/template/apps/server/src/system/drizzle-repository.ts +14 -0
  30. package/template/apps/server/src/system/drizzle-system-configs.ts +2 -0
  31. package/template/apps/server/src/system/identity-read-model.ts +105 -0
  32. package/template/apps/server/src/system/identity-role-assignment.test.ts +199 -0
  33. package/template/apps/server/src/system/identity-role-assignment.ts +148 -0
  34. package/template/apps/server/src/system/identity-route-config.ts +29 -7
  35. package/template/apps/server/src/system/identity-write-security.test.ts +127 -0
  36. package/template/apps/server/src/system/identity-write-validation.ts +170 -0
  37. package/template/apps/server/src/system/organization-read-security.test.ts +221 -0
  38. package/template/apps/server/src/system/redis-health.test.ts +1 -1
  39. package/template/apps/server/src/system/repository.ts +29 -2
  40. package/template/apps/server/src/system/resource-routes.ts +116 -72
  41. package/template/apps/server/src/system/route-audit.test.ts +117 -0
  42. package/template/apps/server/src/system/route-helpers.ts +14 -0
  43. package/template/apps/server/src/system/route-types.ts +11 -2
  44. package/template/apps/server/src/system/routes.test.ts +0 -68
  45. package/template/apps/server/src/system/routes.ts +29 -2
  46. package/template/apps/server/src/system/user-account-policy.test.ts +3 -1
  47. package/template/apps/server/src/system/user-account-policy.ts +26 -9
  48. package/template/apps/web/src/pages/system/SystemResourceRoutePage.vue +27 -13
  49. package/template/apps/web/src/pages/system/SystemResourceRoutePage.webtest.ts +68 -0
  50. package/template/apps/web/src/pages/system/components/PagedSelectionList.vue +131 -0
  51. package/template/apps/web/src/pages/system/components/PagedSelectionList.webtest.ts +32 -0
  52. package/template/apps/web/src/pages/system/components/SystemRecordDetailDialog.vue +67 -0
  53. package/template/apps/web/src/pages/system/components/SystemResourceEditor.vue +114 -38
  54. package/template/apps/web/src/pages/system/components/SystemResourceEditor.webtest.ts +180 -0
  55. package/template/apps/web/src/pages/system/components/SystemResourceFilters.vue +8 -0
  56. package/template/apps/web/src/pages/system/components/SystemResourceForm.vue +8 -2
  57. package/template/apps/web/src/pages/system/components/SystemResourcePage.department.webtest.ts +89 -0
  58. package/template/apps/web/src/pages/system/components/SystemResourcePage.vue +42 -46
  59. package/template/apps/web/src/pages/system/components/SystemResourcePage.webtest.ts +12 -55
  60. package/template/apps/web/src/pages/system/components/SystemResourceTable.vue +14 -2
  61. package/template/apps/web/src/pages/system/components/department/DepartmentOrganizationForm.vue +121 -85
  62. package/template/apps/web/src/pages/system/components/department/DepartmentOrganizationForm.webtest.ts +57 -0
  63. package/template/apps/web/src/pages/system/components/department/DepartmentOrganizationTable.vue +227 -0
  64. package/template/apps/web/src/pages/system/components/department/DepartmentOrganizationTable.webtest.ts +62 -0
  65. package/template/apps/web/src/pages/system/components/department/DepartmentTransitionDialog.vue +72 -52
  66. package/template/apps/web/src/pages/system/components/role-policy/RolePermissionTree.vue +150 -79
  67. package/template/apps/web/src/pages/system/components/role-policy/RolePolicyForm.vue +98 -8
  68. package/template/apps/web/src/pages/system/components/role-policy/RolePolicyForm.webtest.ts +108 -0
  69. package/template/apps/web/src/pages/system/components/selection-options.ts +71 -0
  70. package/template/apps/web/src/pages/system/components/selection-options.webtest.ts +49 -0
  71. package/template/apps/web/src/pages/system/components/user-account/CreateDepartmentDialog.vue +19 -27
  72. package/template/apps/web/src/pages/system/components/user-account/CreateDepartmentDialog.webtest.ts +2 -6
  73. package/template/apps/web/src/pages/system/components/user-account/CreateRoleDialog.vue +128 -0
  74. package/template/apps/web/src/pages/system/components/user-account/CreateRoleDialog.webtest.ts +76 -0
  75. package/template/apps/web/src/pages/system/components/user-account/RolePermissionSummary.vue +61 -3
  76. package/template/apps/web/src/pages/system/components/user-account/UserAccountForm.vue +144 -90
  77. package/template/apps/web/src/pages/system/components/user-account/UserAccountForm.webtest.ts +95 -0
  78. package/template/apps/web/src/pages/system/components/user-account/UserListFilters.vue +168 -0
  79. package/template/apps/web/src/pages/system/components/user-account/UserRoleSelector.vue +33 -57
  80. package/template/apps/web/src/pages/system/components/user-account/UserRoleSelector.webtest.ts +4 -4
  81. package/template/apps/web/src/pages/system/components/user-account/save-user-account.ts +4 -1
  82. package/template/apps/web/src/pages/system/components/user-account/user-account-draft.ts +81 -0
  83. package/template/apps/web/src/pages/system/composables/useDepartmentTransitions.ts +6 -10
  84. package/template/apps/web/src/pages/system/composables/useResourceEditor.ts +72 -0
  85. package/template/apps/web/src/pages/system/composables/useResourceEditor.webtest.ts +110 -0
  86. package/template/apps/web/src/pages/system/composables/useSystemResource.ts +27 -1
  87. package/template/apps/web/src/pages/system/resource-config.ts +2 -0
  88. package/template/apps/web/src/services/system-api.ts +25 -0
  89. package/template/docs/architecture/foundation-infrastructure.md +12 -25
  90. package/template/docs/development/crud-generator.md +1 -1
  91. package/template/docs/operations/legacy-data-migration.md +73 -0
  92. package/template/docs/platform/bulk-data-jobs.md +1 -1
  93. package/template/docs/platform/module-configuration.md +2 -2
  94. package/template/docs/platform/organization-membership.md +37 -6
  95. package/template/docs/platform/scheduled-task-executor.md +1 -1
  96. package/template/package.json +2 -1
  97. package/template/packages/config/index.test.ts +1 -5
  98. package/template/packages/config/package.json +2 -2
  99. package/template/packages/config/src/platform-boundary.test.ts +39 -0
  100. package/template/packages/config/src/platform.ts +0 -28
  101. package/template/packages/database/drizzle/0063_license_project_lifecycle.sql +28 -0
  102. package/template/packages/database/drizzle/meta/0063_snapshot.json +15053 -0
  103. package/template/packages/database/drizzle/meta/_journal.json +7 -0
  104. package/template/packages/database/package.json +2 -2
  105. package/template/packages/database/src/agent-runtime-schema.test.ts +5 -1
  106. package/template/packages/database/src/schema/index.ts +1 -0
  107. package/template/packages/database/src/schema/license-issuance-requests.ts +59 -0
  108. package/template/packages/database/src/schema/license-v1.ts +5 -0
  109. package/template/packages/jobs/package.json +2 -2
  110. package/template/packages/modules/package.json +1 -1
  111. package/template/packages/modules/src/system-api-permissions.ts +14 -0
  112. package/template/packages/modules/src/system-features.ts +0 -11
  113. package/template/packages/modules/src/system-module-catalog.test.ts +4 -0
  114. package/template/packages/modules/src/system-module-catalog.ts +0 -1
  115. package/template/packages/server-sdk/index.ts +1 -49
  116. package/template/packages/server-sdk/package.json +3 -2
  117. package/template/packages/server-sdk/src/ai-runtime-readiness-exports.ts +49 -0
  118. package/template/packages/shared/index.ts +2 -1
  119. package/template/packages/shared/package.json +1 -1
  120. package/template/packages/shared/src/license-console-capabilities.ts +163 -0
  121. package/template/packages/shared/src/license-console.ts +94 -0
  122. package/template/packages/shared/src/license.ts +5 -0
  123. package/template/docs/adapters/ruoyi-vue-compatibility.md +0 -93
  124. package/template/packages/shared/src/ruoyi.ts +0 -98
@@ -1,93 +0,0 @@
1
- # RuoYi-Vue 兼容与迁移设计
2
-
3
- ## 背景
4
-
5
- Windy Platform Template 需要替代两个现有 RuoYi-Vue 项目。存量项目为 Vue2 版本,运行依赖 MySQL 和 Redis。迁移目标以一次性导入新库为主,但在客户单机服务器场景中,仍需要具备连接旧 MySQL / Redis 运行的能力。
6
-
7
- 密码不要求兼容旧 hash,迁移后可以统一重置密码。兼容重点是系统数据、权限链路、菜单路由、日志审计和后台能力闭环。
8
-
9
- ## 设计结论
10
-
11
- 采用“新平台 canonical schema + 可插拔 RuoYi-Vue Adapter”的方案。
12
-
13
- 新项目默认不启用 RuoYi-Vue 兼容能力。旧项目通过独立 Adapter 接入迁移或运行时兼容,业务模块不得直接依赖旧 `sys_*` 表,也不得把 RuoYi-Vue 字段设计扩散到平台核心模型。
14
-
15
- ## 兼容层职责
16
-
17
- RuoYi-Vue 兼容层是一个独立 Module,向平台暴露小而稳定的 Interface,内部隐藏旧库结构、字段差异、状态映射和迁移细节。
18
-
19
- 兼容层至少包含三类 Adapter:
20
-
21
- - `import adapter`:从旧 MySQL 一次性导入用户、角色、部门、菜单、权限、字典、参数、通知、日志和任务数据。
22
- - `legacy runtime adapter`:在客户单机服务器过渡期连接旧 MySQL / Redis;本轮只允许只读能力,受控写入明确延期。
23
- - `report adapter`:输出 dry-run、迁移差异、失败行、权限映射、菜单树映射和回滚建议。
24
-
25
- ## 迁移对象
26
-
27
- 第一阶段迁移 RuoYi-Vue 的系统基础表:
28
-
29
- - 用户、角色、用户角色关系。
30
- - 部门、岗位、用户岗位关系。
31
- - 菜单、按钮权限、角色菜单关系。
32
- - 角色部门关系和数据权限范围。
33
- - 字典类型、字典数据。
34
- - 参数配置、通知公告。
35
- - 登录日志、操作日志。
36
- - 定时任务定义和任务执行日志。
37
-
38
- 任务执行器、在线用户、服务监控、缓存监控不能直接迁移实现,只迁移必要配置和历史记录,运行时能力由新平台重新实现。
39
-
40
- ## 权限与菜单
41
-
42
- 权限链路是迁移验收重点。迁移后,同一个用户应尽量保持原有菜单可见性、按钮权限和部门数据范围。
43
-
44
- 兼容层必须显式处理:
45
-
46
- - 超级管理员规则。
47
- - 用户启用/停用/删除状态。
48
- - 角色启用/停用状态。
49
- - 目录、菜单、按钮三类菜单节点。
50
- - 路由路径、组件路径、权限标识、图标、排序、显示/隐藏。
51
- - 角色菜单授权和角色部门数据范围。
52
-
53
- 新平台内部可以拆分导航、权限、路由绑定、模块绑定和功能开关,但迁移报告必须能追踪到原始 RuoYi-Vue 行。
54
-
55
- ## 运行时兼容
56
-
57
- 运行时兼容只服务旧项目过渡,不作为新项目默认路径。
58
-
59
- 在客户单机服务器上允许配置旧 MySQL / Redis 连接,用于:
60
-
61
- - 读取旧系统基础数据。
62
- - 对比新旧权限和菜单差异。
63
- - 迁移前 dry-run。
64
- - 必要时短期读取旧日志或旧配置。
65
-
66
- 默认不允许新业务直接写旧库。旧库运行时受控写入、双写、补偿和 Redis 运行态兼容已明确延期;当前只保留未来 Adapter 边界,不实现写接口。
67
-
68
- ## 若依能力吸收
69
-
70
- 新底座应吸收 RuoYi-Vue 的产品闭环思路,而不是复刻其实现。
71
-
72
- 优先吸收:
73
-
74
- - 用户、部门、岗位、角色、菜单、字典、参数、通知公告。
75
- - 操作日志、登录日志、在线用户。
76
- - 服务监控、缓存监控、数据库连接状态。
77
- - 定时任务和执行日志。
78
- - 代码生成或 CRUD 生成。
79
- - 系统接口文档。
80
-
81
- 每个业务 Module 默认具备列表、查询、详情、新增、编辑、删除、导入、导出、权限、审计和错误闭环。
82
-
83
- 当前平台已提供 `/api/system/operations` 和 Web 端 `/system/operations` 运维总览入口,用于承接在线用户、服务监控、缓存监控、定时任务、代码生成和系统接口这些闭环能力的产品位置。平台 Redis 探活、任务调度执行器、canonical CRUD 代码生成器和基于已注册 Module Manifest 的接口权限明细已接入;它们属于平台 canonical 能力,不等于启用本轮明确延期的 RuoYi 旧库运行时受控写入或旧 Redis 兼容。
84
-
85
- ## 验收标准
86
-
87
- - 新项目可以完全不安装、不配置 RuoYi-Vue 兼容层。
88
- - 旧项目可以从 RuoYi-Vue MySQL 执行 dry-run,并得到迁移报告。
89
- - 用户、角色、部门、菜单、按钮权限和数据权限可以一次性导入新库。
90
- - 迁移后可对比指定用户在新旧系统中的菜单树和权限标识。
91
- - 迁移过程不要求兼容旧密码 hash,可统一重置密码。
92
- - 单机部署时可以配置旧 MySQL / Redis 连接用于过渡兼容。
93
- - 当前所有兼容读取必须经过 Adapter,并写入审计日志;受控写入重新立项后另行定义验收标准。
@@ -1,98 +0,0 @@
1
- import type { AuditEvent, AuditLogWriter } from "./audit.js";
2
- import type { LegacyTableMapping } from "./database.js";
3
- import type { EntityId, ISODateTime } from "./primitives.js";
4
- import type {
5
- MenuNode,
6
- PermissionDefinition,
7
- RoleDefinition,
8
- UserAccount,
9
- } from "./rbac.js";
10
-
11
- export type RuoYiCoreTable =
12
- | "sys_user"
13
- | "sys_role"
14
- | "sys_user_role"
15
- | "sys_dept"
16
- | "sys_post"
17
- | "sys_user_post"
18
- | "sys_menu"
19
- | "sys_role_menu"
20
- | "sys_role_dept"
21
- | "sys_dict_type"
22
- | "sys_dict_data"
23
- | "sys_config"
24
- | "sys_notice"
25
- | "sys_logininfor"
26
- | "sys_oper_log"
27
- | "sys_job"
28
- | "sys_job_log";
29
-
30
- export interface RuoYiConnectionConfig {
31
- mysqlDsn: string;
32
- redisDsn?: string;
33
- readonly: boolean;
34
- }
35
-
36
- export interface RuoYiMigrationPlan {
37
- id: EntityId;
38
- createdAt: ISODateTime;
39
- tables: RuoYiCoreTable[];
40
- dryRun: boolean;
41
- resetPasswords: boolean;
42
- }
43
-
44
- export interface RuoYiMigrationReport {
45
- planId: EntityId;
46
- startedAt: ISODateTime;
47
- finishedAt?: ISODateTime;
48
- importedRows: Record<RuoYiCoreTable, number>;
49
- failedRows: Record<RuoYiCoreTable, number>;
50
- warnings: string[];
51
- auditEvents: AuditEvent[];
52
- }
53
-
54
- export interface RuoYiPermissionSnapshot {
55
- user: UserAccount;
56
- roles: RoleDefinition[];
57
- menus: MenuNode[];
58
- permissions: PermissionDefinition[];
59
- }
60
-
61
- export interface RuoYiImportAdapter {
62
- dryRun(plan: RuoYiMigrationPlan): Promise<RuoYiMigrationReport>;
63
- import(
64
- plan: RuoYiMigrationPlan,
65
- audit: AuditLogWriter,
66
- ): Promise<RuoYiMigrationReport>;
67
- }
68
-
69
- export interface RuoYiLegacyRuntimeAdapter {
70
- connect(config: RuoYiConnectionConfig): Promise<void>;
71
- disconnect(): Promise<void>;
72
- readPermissionSnapshot(userId: EntityId): Promise<RuoYiPermissionSnapshot>;
73
- }
74
-
75
- export interface RuoYiReportAdapter {
76
- compareUserPermissions(userId: EntityId): Promise<RuoYiMigrationReport>;
77
- tableMappings(): LegacyTableMapping[];
78
- }
79
-
80
- export const ruoyiCoreTables: RuoYiCoreTable[] = [
81
- "sys_user",
82
- "sys_role",
83
- "sys_user_role",
84
- "sys_dept",
85
- "sys_post",
86
- "sys_user_post",
87
- "sys_menu",
88
- "sys_role_menu",
89
- "sys_role_dept",
90
- "sys_dict_type",
91
- "sys_dict_data",
92
- "sys_config",
93
- "sys_notice",
94
- "sys_logininfor",
95
- "sys_oper_log",
96
- "sys_job",
97
- "sys_job_log",
98
- ];