@gadmin2n/schematics 0.0.142 → 0.0.143
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.
- package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/workflow.prisma +5 -23
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/lib/page-helpers.ts +4 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/page-manage.ts +36 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/agenda.seed.ts +14 -14
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/bootstrap.ts +18 -13
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/canvas.seed.ts +14 -14
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/index.ts +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/workflow-node-types.ts +67 -404
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/workflow.seed.ts +16 -40
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/workflows.ts +12 -124
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/app.module.ts +3 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/config/index.ts +0 -21
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-runtime.controller.ts +3 -10
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/codeRuntime.module.ts +1 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-callback.controller.spec.ts +48 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-callback.controller.ts +96 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-runtime.controller.spec.ts +1 -59
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-runtime.controller.ts +8 -43
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-runtime.dto.ts +0 -23
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction.service.ts +2 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-wait.handler.ts +2 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/externalInteraction.module.ts +7 -3
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/workflow-callback-url.controller.ts +2 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/workflow-callback-url.service.spec.ts +18 -123
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/workflow-callback-url.service.ts +4 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.controller.ts +3 -10
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/httpRequest.module.ts +1 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.controller.ts +0 -10
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.dto.ts +12 -4
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.errors.ts +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.external-decision.spec.ts +42 -209
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.service.ts +108 -225
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/humanApproval.module.ts +0 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/runtime/human-approval-runtime.controller.ts +27 -22
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/runtime/human-approval-runtime.dto.ts +9 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/runtime/runtime-token.guard.spec.ts +30 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/runtime/runtime-token.guard.ts +8 -15
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/index.ts +0 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/temporalTenantConfig/runtime-connectivity-probe.service.spec.ts +14 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/temporalTenantConfig/runtime-connectivity-probe.service.ts +37 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/temporalTenantConfig/temporalTenantConfig.controller.spec.ts +41 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/temporalTenantConfig/temporalTenantConfig.controller.ts +53 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/temporalTenantConfig/temporalTenantConfig.module.ts +7 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/temporalTenantConfig/workflow-runtime-health.controller.ts +21 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/dsl-validate.util.spec.ts +2 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-callable.spec.ts +16 -88
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-callable.ts +23 -59
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-compiler.service.spec.ts +125 -39
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-compiler.service.ts +95 -28
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-handle-validator.ts +0 -20
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-http-response.spec.ts +23 -26
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-http-response.ts +6 -52
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.controller.ts +2 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.service.spec.ts +24 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.service.ts +26 -21
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/widget-catalog.service.spec.ts +0 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/widget-catalog.service.ts +0 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowRuntimeConfig/workflow-runtime-config.service.spec.ts +32 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowRuntimeConfig/workflow-runtime-config.service.ts +41 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowRuntimeConfig/workflowRuntimeConfig.module.ts +10 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/tsconfig.build.json +10 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/README.md +16 -12
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/PageHeader.tsx +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/inspectorActions.ts +19 -19
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/contexts/color-mode/index.tsx +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/header.tsx +15 -11
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/config/routeRegistry.tsx +0 -6
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/AddDataModal.tsx +3 -3
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/AddPageModal.tsx +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/DeleteDataConfirm.tsx +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/EditDataModal.tsx +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useDynamicResources.tsx +1 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/en/workflow.json +85 -95
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/zh_CN/workflow.json +85 -95
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agenda/index.tsx +2 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/list.tsx +21 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/list.tsx +21 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/human-approval/inbox.tsx +14 -66
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/list.tsx +4 -4
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/list.tsx +3 -3
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/list.tsx +3 -3
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/CustomNode.test.tsx +29 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/CustomNode.tsx +4 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/EnhancedFlowRenderer.tsx +4 -6
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ExecutionStatusNode.test.tsx +3 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ExecutionStatusNode.tsx +3 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/FlowRenderer.tsx +4 -6
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NewNodeDefaults.test.tsx +23 -92
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodeOutputSummary.tsx +200 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodePropertyPanel.test.tsx +61 -136
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodePropertyPanel.tsx +96 -195
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodeTypeBadge.tsx +36 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/components/CreateNodeInstanceModal.tsx +5 -10
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/components/NodeInstanceForm.tsx +47 -22
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/create.tsx +7 -5
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/edit.tsx +8 -6
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/node-config.css +35 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/default-widgets.tsx +1 -6
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApproverSourceEditor.tsx +1 -4
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/CodeConfigEditor.tsx +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ExternalRequestConfigEditor.tsx +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ExternalWaitConfigEditor.tsx +82 -259
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HttpRequestConfigEditor.tsx +1 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HumanApprovalConfigEditor.test.tsx +7 -6
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HumanApprovalConfigEditor.tsx +77 -71
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ReturnResultConfigEditor.test.tsx +10 -57
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ReturnResultConfigEditor.tsx +8 -273
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/temporal-tenant/index.test.tsx +54 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/temporal-tenant/index.tsx +110 -20
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/newNodeConfig.ts +4 -34
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveOutputs.test.ts +3 -10
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveOutputs.ts +2 -37
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/list.tsx +26 -2
- package/package.json +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.controller.ts +0 -89
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.dto.ts +0 -68
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.service.spec.ts +0 -177
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.service.ts +0 -283
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approvalChannel.module.ts +0 -10
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/ApprovalChannelModal.test.tsx +0 -84
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/ApprovalChannelModal.tsx +0 -141
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/approval-channel.types.ts +0 -16
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/index.tsx +0 -210
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApprovalRequestTriggerConfigEditor.tsx +0 -39
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubmitApprovalResultConfigEditor.tsx +0 -104
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubmitExternalResultConfigEditor.tsx +0 -98
- /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/{Components → components}/AssignRolesModal.tsx +0 -0
- /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/{Components → components}/CreatePageModal.tsx +0 -0
- /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/{Components → components}/EditPageModal.tsx +0 -0
- /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/{Components → components}/PageDetailDrawer.tsx +0 -0
- /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/{Components → components}/PageFormModal.tsx +0 -0
- /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/{Components → components}/CreateModal.tsx +0 -0
- /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/{Components → components}/EditModal.tsx +0 -0
- /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/{Components → components}/ResourceDetailDrawer.tsx +0 -0
- /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/{Components → components}/modal.tsx +0 -0
- /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/{Components → components}/CreateModal.tsx +0 -0
- /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/{Components → components}/EditModal.tsx +0 -0
- /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/{Components → components}/RoleDetailDrawer.tsx +0 -0
- /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/{Components → components}/modal.tsx +0 -0
|
@@ -76,7 +76,6 @@ model Workflow {
|
|
|
76
76
|
|
|
77
77
|
versions WorkflowVersion[]
|
|
78
78
|
instances WorkflowInstance[]
|
|
79
|
-
approvalChannelsAsDispatch ApprovalChannel[] @relation("ApprovalChannelDispatch")
|
|
80
79
|
|
|
81
80
|
@@map("t_workflow")
|
|
82
81
|
}
|
|
@@ -293,7 +292,9 @@ model WorkflowNodeInstance {
|
|
|
293
292
|
/// never copied into Node Templates or WorkflowVersion DSL snapshots.
|
|
294
293
|
/// @IgnoreNestCode
|
|
295
294
|
/// @IgnoreReactCode
|
|
295
|
+
/// @IgnoreAutoField
|
|
296
296
|
model IntegrationConnection {
|
|
297
|
+
id BigInt @id @default(autoincrement())
|
|
297
298
|
code String @unique @default(nanoid()) @db.VarChar(64)
|
|
298
299
|
name String @db.VarChar(128)
|
|
299
300
|
description String? @db.VarChar(512)
|
|
@@ -304,32 +305,13 @@ model IntegrationConnection {
|
|
|
304
305
|
encryptedSecrets String? @db.Text @map("encrypted_secrets")
|
|
305
306
|
isEnabled Boolean @default(true) @map("is_enabled")
|
|
306
307
|
revision Int @default(1)
|
|
308
|
+
creator String? @map("creator") @db.VarChar(128)
|
|
309
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
310
|
+
updatedAt DateTime @updatedAt @default(now()) @map("updated_at")
|
|
307
311
|
|
|
308
312
|
@@map("t_integration_connection")
|
|
309
313
|
}
|
|
310
314
|
|
|
311
|
-
/// Reusable dispatch bridge between Human Approval and provider-specific workflows.
|
|
312
|
-
/// @IgnoreNestCode
|
|
313
|
-
/// @IgnoreReactCode
|
|
314
|
-
/// @IgnoreAutoField
|
|
315
|
-
model ApprovalChannel {
|
|
316
|
-
id BigInt @id @default(autoincrement())
|
|
317
|
-
code String @unique @db.VarChar(64)
|
|
318
|
-
name String @db.VarChar(128)
|
|
319
|
-
description String? @db.VarChar(512)
|
|
320
|
-
dispatchWorkflowId BigInt @map("dispatch_workflow_id")
|
|
321
|
-
isEnabled Boolean @default(true) @map("is_enabled")
|
|
322
|
-
revision Int @default(1)
|
|
323
|
-
creator String @default("") @db.VarChar(128)
|
|
324
|
-
createdAt DateTime @default(now()) @map("created_at")
|
|
325
|
-
updatedAt DateTime @updatedAt @map("updated_at")
|
|
326
|
-
|
|
327
|
-
dispatchWorkflow Workflow @relation("ApprovalChannelDispatch", fields: [dispatchWorkflowId], references: [id], onDelete: Restrict)
|
|
328
|
-
|
|
329
|
-
@@index([dispatchWorkflowId], map: "idx_ac_dispatch_workflow_id")
|
|
330
|
-
@@map("t_approval_channel")
|
|
331
|
-
}
|
|
332
|
-
|
|
333
315
|
// Outbox Pattern:业务表触发器将事件写入此表,outbox-poller 定时扫描并触发 workflow
|
|
334
316
|
/// @IgnoreAutoField
|
|
335
317
|
model WorkflowEventOutbox {
|
package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/lib/page-helpers.ts
CHANGED
|
@@ -98,7 +98,8 @@ export async function bindResourceToPage(
|
|
|
98
98
|
);
|
|
99
99
|
await prisma.pageResource.upsert({
|
|
100
100
|
where: { pageId_resourceId: { pageId, resourceId: resource.id } },
|
|
101
|
-
update: {
|
|
101
|
+
// update: {} — 保留 DB 里手工调整的 actions
|
|
102
|
+
update: {},
|
|
102
103
|
create: { pageId, resourceId: resource.id, actions: FULL_ACTIONS },
|
|
103
104
|
});
|
|
104
105
|
return resource;
|
|
@@ -125,7 +126,8 @@ export async function grantRoleAccess(
|
|
|
125
126
|
for (const resourceId of resourceIds) {
|
|
126
127
|
await prisma.roleResource.upsert({
|
|
127
128
|
where: { roleId_resourceId: { roleId, resourceId } },
|
|
128
|
-
update: {
|
|
129
|
+
// update: {} — 与 RolePages 一致:保留 DB 里手工收窄的 actions
|
|
130
|
+
update: {},
|
|
129
131
|
create: { roleId, resourceId, actions: FULL_ACTIONS },
|
|
130
132
|
});
|
|
131
133
|
}
|
|
@@ -25,6 +25,9 @@
|
|
|
25
25
|
* ── 删除页面 ──────────────────────────────────────────────────────────────────
|
|
26
26
|
* ts-node scripts/page-manage.ts delete \
|
|
27
27
|
* --pageCode myModule (required)
|
|
28
|
+
* --withResources (optional — also delete Resource rows that are
|
|
29
|
+
* bound ONLY to this page, plus their RoleResource
|
|
30
|
+
* rows; shared or isCommonResource resources are kept)
|
|
28
31
|
*
|
|
29
32
|
* ── 绑定资源 ──────────────────────────────────────────────────────────────────
|
|
30
33
|
* ts-node scripts/page-manage.ts bind \
|
|
@@ -174,7 +177,7 @@ async function actionUpdate(flags: Record<string, string>) {
|
|
|
174
177
|
}
|
|
175
178
|
|
|
176
179
|
async function actionDelete(flags: Record<string, string>) {
|
|
177
|
-
const { pageCode } = flags;
|
|
180
|
+
const { pageCode, withResources } = flags;
|
|
178
181
|
if (!pageCode) {
|
|
179
182
|
console.error('[page-manage] --pageCode is required.');
|
|
180
183
|
process.exit(1);
|
|
@@ -182,6 +185,11 @@ async function actionDelete(flags: Record<string, string>) {
|
|
|
182
185
|
|
|
183
186
|
const page = await requirePage(pageCode);
|
|
184
187
|
|
|
188
|
+
const pageResources = await prisma.pageResource.findMany({
|
|
189
|
+
where: { pageId: page.id },
|
|
190
|
+
include: { resource: true },
|
|
191
|
+
});
|
|
192
|
+
|
|
185
193
|
await prisma.pageResource.deleteMany({ where: { pageId: page.id } });
|
|
186
194
|
await prisma.rolePages.deleteMany({ where: { pageId: page.id } });
|
|
187
195
|
await prisma.page.delete({ where: { id: page.id } });
|
|
@@ -189,6 +197,33 @@ async function actionDelete(flags: Record<string, string>) {
|
|
|
189
197
|
console.log(
|
|
190
198
|
`[page-manage] ✖ Deleted page: ${pageCode} (id=${page.id}) + its PageResource + RolePages rows`,
|
|
191
199
|
);
|
|
200
|
+
|
|
201
|
+
if (withResources === 'true') {
|
|
202
|
+
for (const pr of pageResources) {
|
|
203
|
+
if (pr.resource.isCommonResource) {
|
|
204
|
+
console.warn(
|
|
205
|
+
`[page-manage] ⚠ Resource "${pr.resource.code}" is a common resource — kept`,
|
|
206
|
+
);
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
const otherBindings = await prisma.pageResource.count({
|
|
210
|
+
where: { resourceId: pr.resourceId },
|
|
211
|
+
});
|
|
212
|
+
if (otherBindings > 0) {
|
|
213
|
+
console.warn(
|
|
214
|
+
`[page-manage] ⚠ Resource "${pr.resource.code}" still bound to ${otherBindings} other page(s) — kept`,
|
|
215
|
+
);
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
await prisma.roleResource.deleteMany({
|
|
219
|
+
where: { resourceId: pr.resourceId },
|
|
220
|
+
});
|
|
221
|
+
await prisma.resource.delete({ where: { id: pr.resourceId } });
|
|
222
|
+
console.log(
|
|
223
|
+
`[page-manage] ✖ Deleted resource: ${pr.resource.code} (+ its RoleResource rows)`,
|
|
224
|
+
);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
192
227
|
}
|
|
193
228
|
|
|
194
229
|
async function actionBind(flags: Record<string, string>) {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { PrismaClient } from '@prisma/client';
|
|
2
|
-
import { ADMIN_PAGE_CODE } from '../scripts/lib/admin-code';
|
|
3
2
|
import {
|
|
4
3
|
bindResourceToPage,
|
|
5
4
|
getPageResourceIds,
|
|
@@ -10,25 +9,26 @@ import {
|
|
|
10
9
|
/**
|
|
11
10
|
* Agenda 模块 seed
|
|
12
11
|
*
|
|
13
|
-
* 职责:agenda page (
|
|
14
|
-
* 前置:seedBootstrap 已建好
|
|
12
|
+
* 职责:agenda page (与 admin 平级的顶级菜单) + agenda resource + 自家 SYSTEM_ADMIN 授权。
|
|
13
|
+
* 前置:seedBootstrap 已建好 SYSTEM_ADMIN。
|
|
15
14
|
*/
|
|
16
15
|
export async function seedAgendaModule(prisma: PrismaClient): Promise<void> {
|
|
17
16
|
const role = await prisma.role.findUniqueOrThrow({
|
|
18
17
|
where: { name: 'SYSTEM_ADMIN' },
|
|
19
18
|
});
|
|
20
|
-
const admin = await prisma.page.findUniqueOrThrow({
|
|
21
|
-
where: { code: ADMIN_PAGE_CODE },
|
|
22
|
-
});
|
|
23
19
|
|
|
24
|
-
const page = await upsertPage(
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
20
|
+
const page = await upsertPage(
|
|
21
|
+
prisma,
|
|
22
|
+
{
|
|
23
|
+
code: 'agenda',
|
|
24
|
+
name: 'agenda',
|
|
25
|
+
zhName: 'Cron Jobs',
|
|
26
|
+
enName: 'Cron Jobs',
|
|
27
|
+
sortOrder: 1040,
|
|
28
|
+
},
|
|
29
|
+
// 从「系统管理」子菜单提升为顶级菜单:同步 parentId/排序到已有 DB
|
|
30
|
+
{ parentId: null, sortOrder: 1040 },
|
|
31
|
+
);
|
|
32
32
|
console.log(`[agenda] Page: ${page.code} (id=${page.id})`);
|
|
33
33
|
|
|
34
34
|
await bindResourceToPage(prisma, page.id, 'agenda', 'Agenda job management');
|
|
@@ -7,9 +7,9 @@ import { grantRoleAccess, upsertPage } from '../scripts/lib/page-helpers';
|
|
|
7
7
|
*
|
|
8
8
|
* 任何模块 seed 都假设以下 3 个对象已存在:
|
|
9
9
|
* 1. SYSTEM_ADMIN 角色 —— 各模块 grant SYSTEM_ADMIN 时通过 name 查找
|
|
10
|
-
* 2. ADMIN_PAGE_CODE 顶级 page ——
|
|
10
|
+
* 2. ADMIN_PAGE_CODE 顶级 page —— 系统内置模块(permission/audit/game)page 的 parentId
|
|
11
11
|
* (默认 'admin';ERP 通过环境变量 ADMIN_PAGE_CODE=administration 覆盖)
|
|
12
|
-
* 3. dataMngt
|
|
12
|
+
* 3. dataMngt 顶级分组 page —— 自动生成 CRUD 页面(data-mngt.seed.ts)的 parentId
|
|
13
13
|
*
|
|
14
14
|
* 同时把 SYSTEM_ADMIN 对 顶级 / dataMngt 这两个分组节点的 RolePages 也建好,
|
|
15
15
|
* 否则它们的子菜单父节点不会展开。
|
|
@@ -39,21 +39,26 @@ export async function seedBootstrap(prisma: PrismaClient): Promise<void> {
|
|
|
39
39
|
name: ADMIN_PAGE_CODE,
|
|
40
40
|
zhName: '系统管理',
|
|
41
41
|
enName: 'System Mgnt',
|
|
42
|
-
|
|
42
|
+
// 排顶级菜单最下面:业务菜单用 10xx
|
|
43
|
+
sortOrder: 1050,
|
|
43
44
|
},
|
|
44
|
-
{ zhName: '系统管理', enName: 'System Mgnt', sortOrder:
|
|
45
|
+
{ zhName: '系统管理', enName: 'System Mgnt', sortOrder: 1050 },
|
|
45
46
|
);
|
|
46
47
|
console.log(`[bootstrap] Page: ${adminPage.code} (id=${adminPage.id})`);
|
|
47
48
|
|
|
48
|
-
// ── dataMngt 分组 page(自动 CRUD
|
|
49
|
-
const dataMngtPage = await upsertPage(
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
49
|
+
// ── dataMngt 分组 page(自动 CRUD 菜单容器,与 admin 平级的顶级菜单) ──────
|
|
50
|
+
const dataMngtPage = await upsertPage(
|
|
51
|
+
prisma,
|
|
52
|
+
{
|
|
53
|
+
code: 'dataMngt',
|
|
54
|
+
name: '数据管理',
|
|
55
|
+
zhName: '数据管理',
|
|
56
|
+
enName: 'Data Management',
|
|
57
|
+
sortOrder: 1010,
|
|
58
|
+
},
|
|
59
|
+
// 从「系统管理」子菜单提升为顶级菜单:同步 parentId/排序到已有 DB
|
|
60
|
+
{ parentId: null, sortOrder: 1010 },
|
|
61
|
+
);
|
|
57
62
|
console.log(`[bootstrap] Page: ${dataMngtPage.code} (id=${dataMngtPage.id})`);
|
|
58
63
|
|
|
59
64
|
// ── 分组 page 的 SYSTEM_ADMIN RolePages(无 resource) ──────────────────────
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { PrismaClient } from '@prisma/client';
|
|
2
|
-
import { ADMIN_PAGE_CODE } from '../scripts/lib/admin-code';
|
|
3
2
|
import {
|
|
4
3
|
bindResourceToPage,
|
|
5
4
|
getPageResourceIds,
|
|
@@ -10,25 +9,26 @@ import {
|
|
|
10
9
|
/**
|
|
11
10
|
* Canvas 模块 seed
|
|
12
11
|
*
|
|
13
|
-
* 职责:canvas page (
|
|
14
|
-
* 前置:seedBootstrap 已建好
|
|
12
|
+
* 职责:canvas page (与 admin 平级的顶级菜单) + canvas resource + 自家 SYSTEM_ADMIN 授权。
|
|
13
|
+
* 前置:seedBootstrap 已建好 SYSTEM_ADMIN。
|
|
15
14
|
*/
|
|
16
15
|
export async function seedCanvasModule(prisma: PrismaClient): Promise<void> {
|
|
17
16
|
const role = await prisma.role.findUniqueOrThrow({
|
|
18
17
|
where: { name: 'SYSTEM_ADMIN' },
|
|
19
18
|
});
|
|
20
|
-
const admin = await prisma.page.findUniqueOrThrow({
|
|
21
|
-
where: { code: ADMIN_PAGE_CODE },
|
|
22
|
-
});
|
|
23
19
|
|
|
24
|
-
const page = await upsertPage(
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
20
|
+
const page = await upsertPage(
|
|
21
|
+
prisma,
|
|
22
|
+
{
|
|
23
|
+
code: 'canvas',
|
|
24
|
+
name: 'canvas',
|
|
25
|
+
zhName: 'Canvas',
|
|
26
|
+
enName: 'Canvas',
|
|
27
|
+
sortOrder: 1020,
|
|
28
|
+
},
|
|
29
|
+
// 从「系统管理」子菜单提升为顶级菜单:同步 parentId/排序到已有 DB
|
|
30
|
+
{ parentId: null, sortOrder: 1020 },
|
|
31
|
+
);
|
|
32
32
|
console.log(`[canvas] Page: ${page.code} (id=${page.id})`);
|
|
33
33
|
|
|
34
34
|
await bindResourceToPage(prisma, page.id, 'canvas', 'Canvas management');
|