@yongdall/server 0.1.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.
@@ -0,0 +1,1137 @@
1
+ import { Where, createField, createModel, now, uuid } from "@yongdall/model";
2
+
3
+ //#region packages/server/models/Menu.mjs
4
+ var Menu_default = createModel("menu", {
5
+ id: createField("uuid", {
6
+ nullable: false,
7
+ default: uuid,
8
+ uncreatable: true,
9
+ primary: 1
10
+ }),
11
+ groupType: createField("string", {
12
+ nullable: false,
13
+ default: "",
14
+ label: "分组类型"
15
+ }),
16
+ group: createField("text", {
17
+ nullable: false,
18
+ default: "",
19
+ label: "分组"
20
+ }),
21
+ no: createField("i32", {
22
+ nullable: false,
23
+ default: 0,
24
+ label: "顺序号"
25
+ }),
26
+ type: createField("string", {
27
+ nullable: false,
28
+ default: "",
29
+ label: "菜单类型",
30
+ layout: { colSpan: 6 },
31
+ renderer: [{
32
+ component: "select",
33
+ values: [
34
+ {
35
+ value: "",
36
+ label: "菜单"
37
+ },
38
+ {
39
+ value: "button",
40
+ label: "按钮"
41
+ },
42
+ {
43
+ value: "divider",
44
+ label: "分割线"
45
+ }
46
+ ]
47
+ }]
48
+ }),
49
+ level: createField("i16", {
50
+ nullable: false,
51
+ default: 0,
52
+ layout: { hidden: true }
53
+ }),
54
+ label: createField("string", {
55
+ nullable: false,
56
+ default: "新菜单",
57
+ label: "标签",
58
+ layout: { colSpan: 6 }
59
+ }),
60
+ icon: createField("string", {
61
+ nullable: false,
62
+ default: "",
63
+ label: "图标",
64
+ layout: { colSpan: 6 }
65
+ }),
66
+ image: createField("text", {
67
+ nullable: false,
68
+ default: "",
69
+ label: "图片",
70
+ layout: { colSpan: 6 },
71
+ renderer: [{ component: "string" }]
72
+ }),
73
+ color: createField("string", {
74
+ nullable: false,
75
+ default: "",
76
+ label: "颜色",
77
+ layout: { colSpan: 6 }
78
+ }),
79
+ title: createField("string", {
80
+ nullable: false,
81
+ default: "",
82
+ label: "标题",
83
+ layout: { colSpan: 6 }
84
+ }),
85
+ description: createField("text", {
86
+ nullable: false,
87
+ default: "",
88
+ label: "描述",
89
+ layout: { colSpan: 6 },
90
+ renderer: [{ component: "string" }]
91
+ }),
92
+ page: createField("text", {
93
+ nullable: false,
94
+ default: "",
95
+ label: "页面",
96
+ layout: { colSpan: 6 },
97
+ renderer: [{ component: "string" }]
98
+ }),
99
+ path: createField("text", {
100
+ nullable: false,
101
+ default: "",
102
+ label: "页面路径",
103
+ layout: { colSpan: 6 },
104
+ renderer: [{ component: "string" }]
105
+ }),
106
+ uri: createField("text", {
107
+ nullable: false,
108
+ default: "",
109
+ label: "URI",
110
+ layout: { colSpan: 6 },
111
+ renderer: [{ component: "uri" }]
112
+ }),
113
+ command: createField("text", {
114
+ nullable: false,
115
+ default: "",
116
+ label: "命令",
117
+ layout: { colSpan: 6 },
118
+ renderer: [{ component: "string" }]
119
+ }),
120
+ script: createField("text", {
121
+ nullable: false,
122
+ default: "",
123
+ label: "脚本"
124
+ }),
125
+ refType: createField("string", {
126
+ nullable: false,
127
+ default: "",
128
+ label: "引用类型",
129
+ layout: { colSpan: 6 }
130
+ }),
131
+ refId: createField("string", {
132
+ nullable: false,
133
+ default: "",
134
+ label: "引用ID",
135
+ layout: { colSpan: 6 }
136
+ }),
137
+ refMode: createField("string", {
138
+ nullable: false,
139
+ default: "",
140
+ label: "引用模式",
141
+ layout: { colSpan: 6 }
142
+ }),
143
+ permission: createField("text", {
144
+ nullable: false,
145
+ default: "",
146
+ label: "权限",
147
+ renderer: [{ component: "permission" }]
148
+ }),
149
+ collapsed: createField("bool", {
150
+ nullable: false,
151
+ default: true,
152
+ label: "默认折叠",
153
+ layout: { colSpan: 6 }
154
+ }),
155
+ autoLogin: createField("bool", {
156
+ nullable: false,
157
+ default: false,
158
+ label: "自动登录",
159
+ layout: { colSpan: 6 }
160
+ }),
161
+ applicationId: createField("string", {
162
+ nullable: false,
163
+ default: "",
164
+ label: "关联应用",
165
+ layout: { colSpan: 6 }
166
+ })
167
+ });
168
+
169
+ //#endregion
170
+ //#region packages/server/models/Application.mjs
171
+ const UserMenu = createModel("application.userMenu", {
172
+ applicationId: createField("uuid", {
173
+ nullable: false,
174
+ label: "应用",
175
+ primary: 1
176
+ }),
177
+ no: createField("i32", {
178
+ nullable: false,
179
+ default: 0,
180
+ label: "顺序号",
181
+ primary: 2
182
+ }),
183
+ type: createField("string", {
184
+ nullable: false,
185
+ default: "",
186
+ label: "菜单类型",
187
+ renderer: [{
188
+ component: "select",
189
+ values: [{
190
+ value: "",
191
+ label: "菜单"
192
+ }, {
193
+ value: "divider",
194
+ label: "分割线"
195
+ }]
196
+ }]
197
+ }),
198
+ level: createField("i16", {
199
+ nullable: false,
200
+ default: 0,
201
+ layout: { hidden: true }
202
+ }),
203
+ label: createField("string", {
204
+ nullable: false,
205
+ default: "新菜单",
206
+ label: "标签"
207
+ }),
208
+ page: createField("text", {
209
+ nullable: false,
210
+ default: "",
211
+ label: "页面",
212
+ renderer: [{ component: "string" }]
213
+ }),
214
+ path: createField("text", {
215
+ nullable: false,
216
+ default: "",
217
+ label: "页面路径",
218
+ renderer: [{ component: "string" }]
219
+ }),
220
+ uri: createField("text", {
221
+ nullable: false,
222
+ default: "",
223
+ label: "URI",
224
+ renderer: [{ component: "uri" }]
225
+ }),
226
+ command: createField("text", {
227
+ nullable: false,
228
+ default: "",
229
+ label: "命令",
230
+ renderer: [{ component: "string" }]
231
+ }),
232
+ logged: createField("bool", {
233
+ nullable: false,
234
+ default: false,
235
+ label: "仅登陆用户"
236
+ })
237
+ });
238
+ var Application_default = createModel("application", {
239
+ label: createField("string", {
240
+ nullable: false,
241
+ default: "",
242
+ label: "名称",
243
+ layout: { colSpan: 6 }
244
+ }),
245
+ company: createField("string", {
246
+ nullable: false,
247
+ default: "",
248
+ label: "公司",
249
+ layout: { colSpan: 6 }
250
+ }),
251
+ title: createField("string", {
252
+ nullable: false,
253
+ default: "",
254
+ label: "标题",
255
+ layout: { colSpan: 6 }
256
+ }),
257
+ id: createField("uuid", {
258
+ nullable: false,
259
+ default: uuid,
260
+ renderer: "string",
261
+ layout: { colSpan: 6 },
262
+ uncreatable: true,
263
+ primary: 1
264
+ }),
265
+ domain: createField("string", {
266
+ nullable: false,
267
+ default: "",
268
+ label: "域名",
269
+ layout: { colSpan: 4 }
270
+ }),
271
+ port: createField("i32", {
272
+ nullable: false,
273
+ default: 0,
274
+ label: "端口",
275
+ layout: { colSpan: 4 }
276
+ }),
277
+ path: createField("string", {
278
+ nullable: false,
279
+ default: "",
280
+ label: "路径",
281
+ layout: { colSpan: 10 }
282
+ }),
283
+ default: createField("bool", {
284
+ nullable: false,
285
+ default: false,
286
+ label: "默认",
287
+ layout: { colSpan: 3 }
288
+ }),
289
+ singleDefault: createField("bool", {
290
+ nullable: false,
291
+ default: false,
292
+ label: "单用户默认",
293
+ layout: { colSpan: 3 }
294
+ }),
295
+ theme: createField("string", {
296
+ nullable: false,
297
+ default: "",
298
+ label: "主题",
299
+ layout: { colSpan: 7 },
300
+ renderer: {
301
+ component: "select",
302
+ type: "enumeration",
303
+ name: "theme",
304
+ value: "{theme}"
305
+ }
306
+ }),
307
+ skin: createField("string", {
308
+ nullable: false,
309
+ default: "",
310
+ label: "皮肤",
311
+ layout: { colSpan: 7 },
312
+ renderer: {
313
+ component: "select",
314
+ type: "enumeration",
315
+ name: "skin",
316
+ value: "{skin}"
317
+ }
318
+ }),
319
+ authenticator: createField("string", {
320
+ nullable: false,
321
+ default: "",
322
+ label: "登录器",
323
+ layout: { colSpan: 7 },
324
+ renderer: {
325
+ component: "select",
326
+ type: "enumeration",
327
+ name: "authenticator",
328
+ value: "{authenticator}"
329
+ }
330
+ }),
331
+ authRequired: createField("bool", {
332
+ nullable: false,
333
+ default: true,
334
+ label: "强制登录",
335
+ layout: { colSpan: 3 }
336
+ }),
337
+ logo: createField("text", {
338
+ nullable: false,
339
+ default: "",
340
+ label: "LOGO",
341
+ renderer: "file",
342
+ layout: { colSpan: 6 }
343
+ }),
344
+ type: createField("string", {
345
+ nullable: false,
346
+ default: "",
347
+ label: "类型",
348
+ layout: { colSpan: 6 }
349
+ }),
350
+ https: createField("bool", {
351
+ nullable: false,
352
+ default: false,
353
+ label: "采用 HTTPS",
354
+ layout: { colSpan: 6 }
355
+ }),
356
+ help: createField("text", {
357
+ nullable: true,
358
+ default: "",
359
+ label: "帮助链接",
360
+ renderer: "string",
361
+ layout: { colSpan: 6 }
362
+ }),
363
+ menus: createField(Menu_default, {
364
+ array: true,
365
+ constraints: {
366
+ groupType: { value: "application" },
367
+ group: { field: "id" },
368
+ no: { noField: true }
369
+ },
370
+ label: "菜单",
371
+ layout: {
372
+ levelKey: "level",
373
+ columns: [
374
+ { actions: ["collapse", "move"] },
375
+ {
376
+ field: "label",
377
+ placeholder: 1
378
+ },
379
+ { placeholder: 1 },
380
+ { actions: ["add", "remove"] }
381
+ ]
382
+ }
383
+ }),
384
+ userMenus: createField(UserMenu, {
385
+ array: true,
386
+ constraints: {
387
+ applicationId: { field: "id" },
388
+ no: { noField: true }
389
+ },
390
+ label: "用户菜单",
391
+ layout: {
392
+ levelKey: "level",
393
+ columns: [
394
+ { actions: ["collapse", "move"] },
395
+ {
396
+ field: "label",
397
+ placeholder: 1
398
+ },
399
+ { placeholder: 1 },
400
+ { actions: ["add", "remove"] }
401
+ ]
402
+ }
403
+ }),
404
+ description: createField("text", {
405
+ nullable: false,
406
+ default: "",
407
+ label: "描述"
408
+ })
409
+ }, {
410
+ label: "应用",
411
+ labelField: "label",
412
+ permissions: [{
413
+ fields: [
414
+ "id",
415
+ "type",
416
+ "label",
417
+ "company",
418
+ "title",
419
+ "description"
420
+ ],
421
+ authorizations: ["options"]
422
+ }, {
423
+ permission: "system:application",
424
+ fields: "*",
425
+ authorizations: [
426
+ "query",
427
+ "read",
428
+ "create",
429
+ "update",
430
+ "destroy",
431
+ "add",
432
+ "remove"
433
+ ]
434
+ }],
435
+ hooks: {
436
+ async afterCreate(conn, Model, record) {
437
+ /** @type {Record<string, any>} */
438
+ let data = {};
439
+ if (record.default) data.default = false;
440
+ if (record.singleDefault) data.singleDefault = false;
441
+ if (!Object.keys(data)) return;
442
+ await conn.update(Model, data, Where.not({ id: record.id }).and({
443
+ domain: record.domain,
444
+ port: record.port
445
+ }));
446
+ },
447
+ async afterUpdate(conn, Model, record, oldRecord) {
448
+ /** @type {Record<string, any>} */
449
+ let data = {};
450
+ if (record.default && !oldRecord?.default) data.default = false;
451
+ if (record.singleDefault && !oldRecord?.singleDefault) data.singleDefault = false;
452
+ if (!Object.keys(data)) return;
453
+ await conn.update(Model, data, Where.not({ id: record.id }).and({
454
+ domain: record.domain,
455
+ port: record.port
456
+ }));
457
+ }
458
+ }
459
+ });
460
+
461
+ //#endregion
462
+ //#region packages/server/models/Page.mjs
463
+ const PageMenu = createModel("page.menu", {
464
+ pageId: createField("uuid", {
465
+ nullable: false,
466
+ renderer: "document",
467
+ primary: 1
468
+ }),
469
+ no: createField("i16", {
470
+ nullable: false,
471
+ default: 0,
472
+ label: "顺序号",
473
+ primary: 2
474
+ }),
475
+ type: createField("string", {
476
+ nullable: false,
477
+ default: "",
478
+ label: "菜单类型",
479
+ layout: { colSpan: 6 },
480
+ renderer: [{
481
+ component: "select",
482
+ values: [{
483
+ value: "",
484
+ label: "菜单"
485
+ }, {
486
+ value: "divider",
487
+ label: "分割线"
488
+ }]
489
+ }]
490
+ }),
491
+ level: createField("i16", {
492
+ nullable: false,
493
+ default: 0,
494
+ layout: { hidden: true }
495
+ }),
496
+ label: createField("string", {
497
+ nullable: false,
498
+ default: "新菜单",
499
+ label: "标签",
500
+ layout: { colSpan: 6 }
501
+ }),
502
+ icon: createField("string", {
503
+ nullable: false,
504
+ default: "",
505
+ label: "图标",
506
+ layout: { colSpan: 6 }
507
+ }),
508
+ color: createField("string", {
509
+ nullable: false,
510
+ default: "",
511
+ label: "颜色",
512
+ layout: { colSpan: 6 }
513
+ }),
514
+ title: createField("string", {
515
+ nullable: false,
516
+ default: "",
517
+ label: "标题",
518
+ layout: { colSpan: 6 }
519
+ }),
520
+ description: createField("text", {
521
+ nullable: false,
522
+ default: "",
523
+ label: "描述",
524
+ layout: { colSpan: 6 },
525
+ renderer: [{ component: "string" }]
526
+ }),
527
+ page: createField("text", {
528
+ nullable: false,
529
+ default: "",
530
+ label: "页面",
531
+ layout: { colSpan: 6 },
532
+ renderer: [{ component: "string" }]
533
+ }),
534
+ path: createField("text", {
535
+ nullable: false,
536
+ default: "",
537
+ label: "页面路径",
538
+ layout: { colSpan: 6 },
539
+ renderer: [{ component: "string" }]
540
+ }),
541
+ uri: createField("text", {
542
+ nullable: false,
543
+ default: "",
544
+ label: "URI",
545
+ layout: { colSpan: 6 },
546
+ renderer: [{ component: "uri" }]
547
+ }),
548
+ command: createField("text", {
549
+ nullable: false,
550
+ default: "",
551
+ label: "命令",
552
+ layout: { colSpan: 6 },
553
+ renderer: [{ component: "string" }]
554
+ }),
555
+ script: createField("text", {
556
+ nullable: false,
557
+ default: "",
558
+ label: "脚本"
559
+ }),
560
+ permission: createField("text", {
561
+ nullable: false,
562
+ default: "",
563
+ label: "权限",
564
+ renderer: [{ component: "permission" }]
565
+ })
566
+ });
567
+ const PageField = createModel("page.field", {
568
+ pageId: createField("uuid", {
569
+ nullable: false,
570
+ renderer: "document",
571
+ primary: 1
572
+ }),
573
+ no: createField("i16", {
574
+ nullable: false,
575
+ primary: 2
576
+ }),
577
+ field: createField("string", {
578
+ nullable: false,
579
+ default: "",
580
+ label: "字段",
581
+ layout: { head: 1 }
582
+ }),
583
+ label: createField("string", {
584
+ nullable: false,
585
+ default: "",
586
+ label: "列名",
587
+ layout: { head: 2 }
588
+ }),
589
+ width: createField("string", {
590
+ nullable: false,
591
+ default: "",
592
+ label: "宽度",
593
+ layout: { head: 3 }
594
+ })
595
+ });
596
+ const PageForm = createModel("page.form", {
597
+ pageId: createField("uuid", {
598
+ nullable: false,
599
+ renderer: "document",
600
+ primary: 1
601
+ }),
602
+ type: createField("string", {
603
+ nullable: false,
604
+ default: "",
605
+ label: "类型",
606
+ layout: { head: 1 },
607
+ primary: 2
608
+ }),
609
+ no: createField("i16", { nullable: false }),
610
+ layoutId: createField("uuid", {
611
+ nullable: false,
612
+ model: "formLayout",
613
+ label: "布局",
614
+ renderer: "document",
615
+ layout: { head: 1 }
616
+ }),
617
+ mode: createField("string", {
618
+ nullable: false,
619
+ default: "",
620
+ label: "模式",
621
+ layout: { head: 1 }
622
+ })
623
+ });
624
+ const PageFilter = createModel("page.filter", {
625
+ pageId: createField("uuid", {
626
+ nullable: false,
627
+ renderer: "document",
628
+ primary: 1
629
+ }),
630
+ no: createField("i16", {
631
+ nullable: false,
632
+ primary: 2
633
+ }),
634
+ field: createField("string", {
635
+ nullable: false,
636
+ default: "",
637
+ label: "字段",
638
+ layout: { head: 1 }
639
+ }),
640
+ operator: createField("string", {
641
+ nullable: false,
642
+ default: "",
643
+ label: "运算符",
644
+ layout: { head: 1 }
645
+ })
646
+ });
647
+ const PageSider = createModel("page.sider", {
648
+ pageId: createField("uuid", {
649
+ nullable: false,
650
+ renderer: "document",
651
+ primary: 1
652
+ }),
653
+ no: createField("i16", {
654
+ nullable: false,
655
+ primary: 2
656
+ }),
657
+ widget: createField("string", {
658
+ nullable: false,
659
+ default: "",
660
+ label: "组件",
661
+ renderer: {
662
+ component: "select",
663
+ type: "enumeration",
664
+ name: "pageSider",
665
+ value: "{widget}"
666
+ }
667
+ }),
668
+ options: createField("string", {
669
+ nullable: false,
670
+ default: "",
671
+ label: "选项"
672
+ })
673
+ });
674
+ var Page_default = createModel("page", {
675
+ model: createField("string", {
676
+ nullable: false,
677
+ default: "",
678
+ label: "模型",
679
+ layout: { colSpan: 6 }
680
+ }),
681
+ organization: createField("string", {
682
+ nullable: false,
683
+ default: "",
684
+ label: "组织",
685
+ layout: { colSpan: 6 }
686
+ }),
687
+ user: createField("string", {
688
+ nullable: false,
689
+ default: "",
690
+ label: "用户",
691
+ layout: { colSpan: 6 }
692
+ }),
693
+ workspace: createField("string", {
694
+ nullable: false,
695
+ default: "",
696
+ label: "工作区",
697
+ layout: { colSpan: 6 }
698
+ }),
699
+ page: createField("string", {
700
+ nullable: false,
701
+ default: "",
702
+ label: "页面",
703
+ layout: { colSpan: 6 },
704
+ renderer: {
705
+ component: "select",
706
+ values: [
707
+ {
708
+ label: "列表页",
709
+ value: "main"
710
+ },
711
+ {
712
+ label: "创建页",
713
+ value: "input"
714
+ },
715
+ {
716
+ label: "编辑页",
717
+ value: "edit"
718
+ },
719
+ {
720
+ label: "详情页",
721
+ value: "details"
722
+ },
723
+ {
724
+ label: "复制页",
725
+ value: "copy"
726
+ }
727
+ ]
728
+ }
729
+ }),
730
+ widget: createField("string", {
731
+ nullable: false,
732
+ default: "",
733
+ label: "组件",
734
+ layout: { colSpan: 6 },
735
+ renderer: {
736
+ component: "select",
737
+ type: "enumeration",
738
+ name: "page",
739
+ value: "{page}",
740
+ filter: "type=?page"
741
+ }
742
+ }),
743
+ label: createField("string", {
744
+ nullable: false,
745
+ default: "",
746
+ label: "名称",
747
+ layout: { colSpan: 6 }
748
+ }),
749
+ title: createField("string", {
750
+ nullable: false,
751
+ default: "",
752
+ label: "标题",
753
+ layout: { colSpan: 6 }
754
+ }),
755
+ titlePattern: createField("string", {
756
+ nullable: false,
757
+ default: "",
758
+ label: "标题模式",
759
+ layout: { colSpan: 6 }
760
+ }),
761
+ current: createField("bool", {
762
+ nullable: false,
763
+ default: false,
764
+ label: "当前",
765
+ layout: { colSpan: 6 }
766
+ }),
767
+ id: createField("uuid", {
768
+ nullable: false,
769
+ default: uuid,
770
+ uncreatable: true,
771
+ primary: 1,
772
+ renderer: "string",
773
+ layout: { colSpan: 6 }
774
+ }),
775
+ config: createField("json", {
776
+ nullable: false,
777
+ default: {},
778
+ label: "配置"
779
+ }),
780
+ defaultQuery: createField("string", {
781
+ nullable: false,
782
+ default: "",
783
+ label: "默认查询"
784
+ }),
785
+ hiddenFilter: createField("string", {
786
+ nullable: false,
787
+ default: "",
788
+ label: "隐藏过滤条件"
789
+ }),
790
+ fields: createField(PageField, {
791
+ array: true,
792
+ constraints: {
793
+ pageId: { field: "id" },
794
+ no: { noField: true }
795
+ },
796
+ label: "显示字段",
797
+ layout: { columns: [
798
+ { actions: [
799
+ "add",
800
+ "move",
801
+ "remove",
802
+ "serial"
803
+ ] },
804
+ { field: "field" },
805
+ { field: "label" },
806
+ { field: "width" }
807
+ ] }
808
+ }),
809
+ filters: createField(PageFilter, {
810
+ array: true,
811
+ constraints: {
812
+ pageId: { field: "id" },
813
+ no: { noField: true }
814
+ },
815
+ label: "快速过滤",
816
+ layout: { columns: [
817
+ { actions: [
818
+ "add",
819
+ "move",
820
+ "remove",
821
+ "serial"
822
+ ] },
823
+ { field: "field" },
824
+ { field: "operator" },
825
+ { field: "not" }
826
+ ] }
827
+ }),
828
+ forms: createField(PageForm, {
829
+ array: true,
830
+ constraints: {
831
+ pageId: { field: "id" },
832
+ no: { noField: true }
833
+ },
834
+ label: "表单配置",
835
+ layout: { columns: [
836
+ { actions: [
837
+ "add",
838
+ "move",
839
+ "remove",
840
+ "serial"
841
+ ] },
842
+ { field: "type" },
843
+ { field: "layoutId" },
844
+ { field: "mode" }
845
+ ] }
846
+ }),
847
+ menus: createField(PageMenu, {
848
+ array: true,
849
+ constraints: {
850
+ pageId: { field: "id" },
851
+ no: { noField: true }
852
+ },
853
+ label: "菜单配置",
854
+ layout: {
855
+ levelKey: "level",
856
+ columns: [
857
+ { actions: ["collapse", "move"] },
858
+ {
859
+ field: "label",
860
+ placeholder: 1
861
+ },
862
+ { placeholder: 1 },
863
+ { actions: ["add", "remove"] }
864
+ ]
865
+ }
866
+ }),
867
+ sides: createField(PageSider, {
868
+ array: true,
869
+ constraints: {
870
+ pageId: { field: "id" },
871
+ no: { noField: true }
872
+ },
873
+ label: "侧边栏",
874
+ layout: { columns: [{ actions: [
875
+ "add",
876
+ "move",
877
+ "remove",
878
+ "collapse",
879
+ "serial"
880
+ ] }, { field: "widget" }] }
881
+ }),
882
+ description: createField("text", {
883
+ nullable: false,
884
+ default: "",
885
+ label: "描述"
886
+ }),
887
+ createdAt: createField("timestamp", {
888
+ nullable: false,
889
+ creating: now,
890
+ label: "创建时间"
891
+ }),
892
+ updatedAt: createField("timestamp", {
893
+ nullable: false,
894
+ updating: now,
895
+ label: "更新时间"
896
+ })
897
+ }, {
898
+ label: "页面",
899
+ labelField: "label",
900
+ permissions: [{
901
+ permission: "system:page",
902
+ fields: "*",
903
+ authorizations: [
904
+ "query",
905
+ "read",
906
+ "create",
907
+ "update",
908
+ "destroy",
909
+ "add",
910
+ "remove"
911
+ ]
912
+ }],
913
+ indexes: [{ fields: [
914
+ "model",
915
+ "organization",
916
+ "user",
917
+ "workspace",
918
+ "page",
919
+ "current"
920
+ ] }],
921
+ hooks: {
922
+ async afterCreate(conn, Model, record) {
923
+ await conn.update(Model, { current: false }, Where.not({ id: record.id }).and({
924
+ model: record.model,
925
+ organization: record.organization,
926
+ user: record.user,
927
+ workspace: record.workspace,
928
+ page: record.page
929
+ }));
930
+ },
931
+ async afterUpdate(conn, Model, record, oldRecord) {
932
+ if (!record.current || oldRecord?.current) return;
933
+ await conn.update(Model, { current: false }, Where.not({ id: record.id }).and({
934
+ model: record.model,
935
+ organization: record.organization,
936
+ user: record.user,
937
+ workspace: record.workspace,
938
+ page: record.page
939
+ }));
940
+ }
941
+ }
942
+ });
943
+
944
+ //#endregion
945
+ //#region packages/server/models/Database.mjs
946
+ var Database_default = createModel("database", {
947
+ id: createField("uuid", {
948
+ nullable: false,
949
+ default: uuid,
950
+ renderer: "string",
951
+ uncreatable: true,
952
+ primary: 1
953
+ }),
954
+ type: createField("string", {
955
+ nullable: false,
956
+ immutable: true,
957
+ label: "类型",
958
+ renderer: {
959
+ component: "select",
960
+ values: [
961
+ {
962
+ value: "rdb",
963
+ label: "关系型数据库"
964
+ },
965
+ {
966
+ value: "fs",
967
+ label: "文件存储"
968
+ },
969
+ {
970
+ value: "mq",
971
+ label: "消息队列"
972
+ },
973
+ {
974
+ value: "tq",
975
+ label: "任务队列"
976
+ },
977
+ {
978
+ value: "cache",
979
+ label: "缓存"
980
+ }
981
+ ]
982
+ }
983
+ }),
984
+ label: createField("string", {
985
+ nullable: false,
986
+ default: "",
987
+ label: "名称"
988
+ }),
989
+ name: createField("string", {
990
+ nullable: false,
991
+ immutable: true,
992
+ label: "标识"
993
+ }),
994
+ uri: createField("string", {
995
+ nullable: false,
996
+ label: "路径"
997
+ }),
998
+ createdAt: createField("timestamp", {
999
+ nullable: false,
1000
+ creating: now,
1001
+ label: "创建时间"
1002
+ }),
1003
+ updatedAt: createField("timestamp", {
1004
+ nullable: false,
1005
+ updating: now,
1006
+ label: "更新时间"
1007
+ })
1008
+ }, {
1009
+ label: "数据库",
1010
+ labelField: "label",
1011
+ indexes: [{
1012
+ fields: ["type", "name"],
1013
+ unique: true
1014
+ }],
1015
+ permissions: [
1016
+ {
1017
+ fields: [
1018
+ "id",
1019
+ "type",
1020
+ "label",
1021
+ "name"
1022
+ ],
1023
+ authorizations: ["options"]
1024
+ },
1025
+ {
1026
+ permission: "system:database",
1027
+ fields: [
1028
+ "id",
1029
+ "type",
1030
+ "label",
1031
+ "name",
1032
+ "createdAt",
1033
+ "updatedAt"
1034
+ ],
1035
+ authorizations: ["query"]
1036
+ },
1037
+ {
1038
+ permission: "system:database",
1039
+ fields: "*",
1040
+ authorizations: [
1041
+ "read",
1042
+ "create",
1043
+ "update",
1044
+ "destroy"
1045
+ ]
1046
+ }
1047
+ ]
1048
+ });
1049
+
1050
+ //#endregion
1051
+ //#region packages/server/models/FormLayout.mjs
1052
+ var FormLayout_default = createModel("formLayout", {
1053
+ id: createField("uuid", {
1054
+ nullable: false,
1055
+ default: uuid,
1056
+ uncreatable: true,
1057
+ primary: 1
1058
+ }),
1059
+ label: createField("string", {
1060
+ nullable: false,
1061
+ default: "",
1062
+ label: "名称",
1063
+ layout: { colSpan: 6 }
1064
+ }),
1065
+ modelId: createField("string", {
1066
+ nullable: false,
1067
+ default: "",
1068
+ label: "模型",
1069
+ layout: { colSpan: 6 }
1070
+ }),
1071
+ default: createField("bool", {
1072
+ nullable: false,
1073
+ default: false,
1074
+ label: "默认布局"
1075
+ }),
1076
+ type: createField("string", {
1077
+ nullable: false,
1078
+ default: "",
1079
+ label: "类型",
1080
+ layout: { colSpan: 6 }
1081
+ }),
1082
+ layout: createField("json", {
1083
+ nullable: false,
1084
+ default: {},
1085
+ label: "布局"
1086
+ }),
1087
+ description: createField("text", {
1088
+ nullable: false,
1089
+ default: "",
1090
+ label: "描述"
1091
+ }),
1092
+ createdAt: createField("timestamp", {
1093
+ nullable: false,
1094
+ creating: now,
1095
+ label: "创建时间"
1096
+ }),
1097
+ updatedAt: createField("timestamp", {
1098
+ nullable: false,
1099
+ updating: now,
1100
+ label: "更新时间"
1101
+ })
1102
+ }, {
1103
+ label: "表单布局",
1104
+ labelField: "label",
1105
+ permissions: [{
1106
+ fields: [
1107
+ "id",
1108
+ "type",
1109
+ "label",
1110
+ "description"
1111
+ ],
1112
+ authorizations: ["options"]
1113
+ }, {
1114
+ permission: "system:formLayout",
1115
+ fields: "*",
1116
+ authorizations: [
1117
+ "query",
1118
+ "read",
1119
+ "create",
1120
+ "update",
1121
+ "destroy"
1122
+ ]
1123
+ }],
1124
+ hooks: {
1125
+ async afterCreate(conn, Model, record) {
1126
+ await conn.update(Model, { default: false }, Where.not({ id: record.id }).and({ modelId: record.modelId }));
1127
+ },
1128
+ async afterUpdate(conn, Model, record, oldRecord) {
1129
+ if (!record.default || oldRecord?.default) return;
1130
+ await conn.update(Model, { default: false }, Where.not({ id: record.id }).and({ modelId: record.modelId }));
1131
+ }
1132
+ }
1133
+ });
1134
+
1135
+ //#endregion
1136
+ export { Menu_default as a, Application_default as i, Database_default as n, Page_default as r, FormLayout_default as t };
1137
+ //# sourceMappingURL=server-D1Ye9ylc.mjs.map