openxiangda-cli 2.0.0-alpha.57 → 2.0.0-alpha.59

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 (39) hide show
  1. package/dist/commands/create.d.ts.map +1 -1
  2. package/dist/commands/create.js +13 -5
  3. package/dist/commands/create.js.map +1 -1
  4. package/dist/create-workspace.d.ts +6 -1
  5. package/dist/create-workspace.d.ts.map +1 -1
  6. package/dist/create-workspace.js +12 -9
  7. package/dist/create-workspace.js.map +1 -1
  8. package/package.json +4 -4
  9. package/template/README.md +3 -1
  10. package/template/apps/server/package.json +1 -1
  11. package/template/apps/web/e2e/instruments.spec.ts +1197 -9
  12. package/template/apps/web/package.json +4 -2
  13. package/template/apps/web/scripts/check.mjs +2 -2
  14. package/template/apps/web/scripts/verify-build.mjs +14 -2
  15. package/template/apps/web/src/AuthoritativeSelector.tsx +371 -0
  16. package/template/apps/web/src/CollegePage.tsx +181 -0
  17. package/template/apps/web/src/FilePreviewPage.tsx +303 -0
  18. package/template/apps/web/src/InstrumentDetailPage.tsx +94 -20
  19. package/template/apps/web/src/InstrumentForm.tsx +347 -94
  20. package/template/apps/web/src/InstrumentFormPage.tsx +49 -9
  21. package/template/apps/web/src/InstrumentListPage.tsx +30 -35
  22. package/template/apps/web/src/Shell.tsx +229 -41
  23. package/template/apps/web/src/components/platform-fields/AttachmentFileList.tsx +226 -0
  24. package/template/apps/web/src/components/platform-fields/PlatformDirectoryPicker.tsx +698 -0
  25. package/template/apps/web/src/data-provider.ts +1 -1
  26. package/template/apps/web/src/fields.ts +17 -6
  27. package/template/apps/web/src/instrument.ts +1 -1
  28. package/template/apps/web/src/main.tsx +21 -1
  29. package/template/apps/web/src/platform-client.ts +248 -2
  30. package/template/apps/web/src/runtime-meta.ts +15 -0
  31. package/template/apps/web/src/runtime.tsx +4 -2
  32. package/template/apps/web/src/styles.css +1007 -28
  33. package/template/apps/web/test/contracts.test.ts +473 -10
  34. package/template/openxiangda.config.ts +24 -5
  35. package/template/package.json +3 -3
  36. package/template/packages/contracts/src/generated.ts +22 -0
  37. package/template/platform/data/colleges.ts +21 -0
  38. package/template/platform/data/instruments.ts +1 -1
  39. package/template/scripts/verify-template-budget.mjs +2 -2
@@ -3,82 +3,1061 @@ body,
3
3
  #root {
4
4
  min-height: 100%;
5
5
  margin: 0;
6
- background: #f5f7fa;
6
+ background: #f3f7fd;
7
+ }
8
+
9
+ body {
10
+ color: #172033;
11
+ font-family:
12
+ Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC",
13
+ "Microsoft YaHei", sans-serif;
7
14
  }
15
+
8
16
  * {
9
17
  box-sizing: border-box;
10
18
  }
11
- .oxa-loading {
19
+
20
+ .oxa-loading,
21
+ .oxa-page-loading {
12
22
  display: grid;
13
- min-height: 70vh;
23
+ min-height: 60vh;
14
24
  place-items: center;
15
25
  }
16
- .oxa-shell {
26
+
27
+ .oxa-app-layout {
17
28
  min-height: 100vh;
29
+ background: #f3f7fd;
30
+ }
31
+
32
+ .oxa-sider {
33
+ position: sticky !important;
34
+ top: 0;
35
+ z-index: 20;
36
+ height: 100vh;
37
+ border-right: 1px solid #e5eaf2;
38
+ background: #fff !important;
39
+ box-shadow: none;
40
+ }
41
+
42
+ .oxa-sider .ant-layout-sider-children {
43
+ display: flex;
44
+ flex-direction: column;
45
+ min-height: 100%;
46
+ }
47
+
48
+ .oxa-brand {
49
+ display: flex;
50
+ min-height: 104px;
51
+ align-items: center;
52
+ gap: 14px;
53
+ padding: 20px 22px;
54
+ }
55
+
56
+ .oxa-brand-mark {
57
+ position: relative;
58
+ width: 38px;
59
+ min-width: 38px;
60
+ height: 44px;
61
+ }
62
+
63
+ .oxa-brand-mark::before,
64
+ .oxa-brand-mark::after {
65
+ position: absolute;
66
+ bottom: 2px;
67
+ width: 10px;
68
+ height: 42px;
69
+ border-radius: 3px 3px 1px 1px;
70
+ background: linear-gradient(180deg, #1f78ff, #315eea);
71
+ content: "";
72
+ transform-origin: bottom;
73
+ }
74
+
75
+ .oxa-brand-mark::before {
76
+ left: 6px;
77
+ transform: rotate(27deg);
78
+ }
79
+
80
+ .oxa-brand-mark::after {
81
+ right: 6px;
82
+ transform: rotate(-27deg);
83
+ }
84
+
85
+ .oxa-brand-mark span {
86
+ position: absolute;
87
+ z-index: 1;
88
+ right: 5px;
89
+ bottom: 3px;
90
+ width: 15px;
91
+ height: 9px;
92
+ background: #fff;
93
+ transform: skewX(-27deg);
94
+ }
95
+
96
+ .oxa-brand-copy {
97
+ display: grid;
98
+ min-width: 0;
99
+ gap: 5px;
100
+ }
101
+
102
+ .oxa-brand-copy strong {
103
+ overflow: hidden;
104
+ color: #101828;
105
+ font-size: 19px;
106
+ line-height: 1.2;
107
+ text-overflow: ellipsis;
108
+ white-space: nowrap;
109
+ }
110
+
111
+ .oxa-brand-copy span {
112
+ overflow: hidden;
113
+ color: #667792;
114
+ font-size: 13px;
115
+ text-overflow: ellipsis;
116
+ white-space: nowrap;
117
+ }
118
+
119
+ .oxa-menu {
120
+ flex: 1;
121
+ overflow-y: auto;
122
+ border-inline-end: 0 !important;
123
+ background: transparent !important;
124
+ padding: 6px 12px 80px;
125
+ }
126
+
127
+ .oxa-menu .ant-menu-submenu-title,
128
+ .oxa-menu .ant-menu-item {
129
+ min-height: 44px;
130
+ margin-inline: 0;
131
+ margin-block: 4px;
132
+ color: #47566f;
133
+ font-weight: 600;
134
+ }
135
+
136
+ .oxa-menu .ant-menu-submenu .ant-menu-item {
137
+ font-weight: 500;
138
+ }
139
+
140
+ .oxa-menu .ant-menu-item-selected {
141
+ color: #1677ff;
142
+ background: #eaf3ff !important;
143
+ }
144
+
145
+ .oxa-sider-footer {
146
+ position: absolute;
147
+ right: 12px;
148
+ bottom: 16px;
149
+ left: 12px;
150
+ border-top: 1px solid #edf0f5;
151
+ background: #fff;
152
+ padding-top: 12px;
18
153
  }
19
- .oxa-header {
154
+
155
+ .oxa-sider-footer .ant-btn {
156
+ min-height: 42px;
157
+ justify-content: flex-start;
158
+ color: #52627a;
159
+ font-weight: 600;
160
+ }
161
+
162
+ .oxa-workspace {
163
+ min-width: 0;
164
+ background: #f3f7fd;
165
+ }
166
+
167
+ .oxa-topbar {
20
168
  position: sticky;
21
169
  top: 0;
22
- z-index: 10;
23
- min-height: 56px;
170
+ z-index: 15;
24
171
  display: flex;
172
+ height: 92px;
25
173
  align-items: center;
26
174
  justify-content: space-between;
27
- gap: 16px;
28
- padding: 10px 24px;
29
- background: #102a43;
30
- color: white;
31
- box-shadow: 0 2px 8px #0002;
175
+ border-bottom: 1px solid #edf0f5;
176
+ background: #fff !important;
177
+ padding: 14px 28px !important;
178
+ line-height: normal;
32
179
  }
33
- .oxa-header-roles {
34
- color: #cbd5e1;
180
+
181
+ .oxa-topbar-page {
182
+ display: grid;
183
+ gap: 8px;
35
184
  }
185
+
186
+ .oxa-topbar-page .ant-breadcrumb {
187
+ color: #64748b;
188
+ font-weight: 500;
189
+ }
190
+
191
+ .oxa-topbar-page .ant-typography {
192
+ margin: 0;
193
+ color: #101828;
194
+ font-size: 22px;
195
+ }
196
+
197
+ .oxa-current-user {
198
+ min-width: 180px;
199
+ justify-content: flex-end;
200
+ }
201
+
202
+ .oxa-current-user-avatar {
203
+ background: linear-gradient(135deg, #2868f0, #2ea8f2);
204
+ }
205
+
206
+ .oxa-current-user-copy {
207
+ display: grid;
208
+ gap: 4px;
209
+ }
210
+
211
+ .oxa-current-user-copy strong {
212
+ color: #101828;
213
+ font-size: 15px;
214
+ }
215
+
216
+ .oxa-current-user-copy span {
217
+ color: #75839a;
218
+ font-size: 12px;
219
+ }
220
+
221
+ .oxa-current-user-chevron {
222
+ color: #65748a;
223
+ font-size: 12px;
224
+ }
225
+
226
+ .oxa-content {
227
+ min-width: 0;
228
+ background: #f3f7fd;
229
+ }
230
+
36
231
  .oxa-main {
232
+ width: 100%;
37
233
  max-width: 1680px;
38
- margin: auto;
39
- padding: 20px 24px 40px;
234
+ min-height: calc(100vh - 92px);
235
+ margin: 0 auto;
236
+ padding: 24px 28px 48px;
40
237
  }
238
+
41
239
  .oxa-title {
42
240
  margin: 0;
43
- font-size: 20px;
241
+ color: #172033;
242
+ font-size: 19px;
44
243
  }
244
+
45
245
  .oxa-muted {
46
- color: #667085;
246
+ color: #7b879b;
47
247
  }
248
+
48
249
  .oxa-page-heading {
49
- width: 100%;
50
250
  display: flex;
51
- justify-content: space-between;
251
+ width: 100%;
52
252
  align-items: center;
253
+ justify-content: space-between;
254
+ gap: 16px;
255
+ margin-bottom: 18px;
256
+ }
257
+
258
+ .oxa-list-card,
259
+ .oxa-section-card,
260
+ .oxa-detail-hero,
261
+ .oxa-edit-hero {
262
+ border-color: #dfe6ef;
263
+ box-shadow: 0 1px 3px rgb(28 44 72 / 5%);
264
+ }
265
+
266
+ .oxa-list-card > .ant-card-body {
267
+ padding: 22px;
268
+ }
269
+
270
+ .oxa-filter-grid {
271
+ display: grid;
272
+ grid-template-columns: repeat(4, minmax(170px, 1fr));
53
273
  gap: 12px;
54
- margin-bottom: 16px;
274
+ border: 1px solid #e5eaf1;
275
+ border-radius: 8px;
276
+ background: #fbfcfe;
277
+ padding: 16px;
278
+ }
279
+
280
+ .oxa-list-card .ant-table-wrapper {
281
+ border: 1px solid #e5eaf1;
282
+ border-radius: 8px;
283
+ overflow: hidden;
284
+ }
285
+
286
+ .oxa-list-card .ant-table-thead > tr > th {
287
+ background: #fafbfd;
288
+ color: #27364d;
289
+ font-weight: 600;
55
290
  }
291
+
56
292
  .oxa-sections {
57
293
  display: grid;
58
294
  gap: 16px;
59
295
  }
296
+
297
+ .oxa-instrument-form {
298
+ display: grid;
299
+ gap: 16px;
300
+ }
301
+
302
+ .oxa-section-card .ant-card-head {
303
+ min-height: 48px;
304
+ padding-inline: 18px;
305
+ }
306
+
307
+ .oxa-section-card .ant-card-body {
308
+ padding: 18px;
309
+ }
310
+
60
311
  .oxa-grid {
61
312
  display: grid;
62
- grid-template-columns: repeat(2, minmax(0, 1fr));
63
- gap: 0 20px;
313
+ grid-template-columns: repeat(3, minmax(0, 1fr));
314
+ column-gap: 20px;
315
+ }
316
+
317
+ .oxa-field-wide {
318
+ grid-column: 1 / -1;
64
319
  }
320
+
65
321
  .oxa-actions {
322
+ position: sticky;
323
+ z-index: 5;
324
+ bottom: 0;
66
325
  display: flex;
67
326
  justify-content: flex-end;
327
+ gap: 10px;
328
+ border-top: 1px solid #e7ebf1;
329
+ background: rgb(255 255 255 / 96%);
330
+ padding: 14px 0;
331
+ backdrop-filter: blur(8px);
332
+ }
333
+
334
+ .oxa-form-full .oxa-actions {
335
+ margin-top: 4px;
336
+ padding-inline: 18px;
337
+ box-shadow: 0 -3px 12px rgb(25 43 70 / 4%);
338
+ }
339
+
340
+ .oxa-authoritative-selector {
341
+ width: 100%;
342
+ }
343
+
344
+ .oxa-selector-option {
345
+ display: flex;
346
+ width: 100%;
347
+ min-height: 40px;
348
+ align-items: center;
349
+ }
350
+
351
+ .oxa-selector-option-copy {
352
+ display: grid;
353
+ min-width: 0;
354
+ gap: 2px;
355
+ }
356
+
357
+ .oxa-selector-option-copy strong,
358
+ .oxa-selector-option-copy small {
359
+ overflow: hidden;
360
+ text-overflow: ellipsis;
361
+ white-space: nowrap;
362
+ }
363
+
364
+ .oxa-selector-option-copy small,
365
+ .oxa-selector-tag small,
366
+ .oxa-resolved-item small {
367
+ color: #7b879b;
368
+ font-size: 11px;
369
+ }
370
+
371
+ .oxa-selector-icon {
372
+ display: grid;
373
+ width: 28px;
374
+ height: 28px;
375
+ place-items: center;
376
+ border-radius: 7px;
377
+ background: #eaf3ff;
378
+ color: #1677ff;
379
+ font-size: 14px;
380
+ }
381
+
382
+ .oxa-selector-avatar {
383
+ background: #eaf3ff;
384
+ color: #1677ff;
385
+ font-size: 12px;
386
+ }
387
+
388
+ .oxa-selector-tag {
389
+ display: inline-flex;
390
+ height: 26px;
391
+ align-items: center;
392
+ gap: 5px;
393
+ border-color: #dbe5f2;
394
+ background: #f6f9fd;
395
+ padding-inline: 4px 7px;
396
+ }
397
+
398
+ .oxa-selector-tag .ant-avatar {
399
+ width: 20px !important;
400
+ min-width: 20px;
401
+ height: 20px !important;
402
+ font-size: 10px;
403
+ line-height: 20px;
404
+ }
405
+
406
+ .oxa-resolved-values {
407
+ display: inline-flex;
408
+ flex-wrap: wrap;
68
409
  gap: 8px;
69
- margin-top: 20px;
70
410
  }
71
- .oxa-filter-grid {
411
+
412
+ .oxa-resolved-item {
413
+ display: inline-flex;
414
+ min-height: 30px;
415
+ align-items: center;
416
+ gap: 7px;
417
+ border: 1px solid #dce5f0;
418
+ border-radius: 7px;
419
+ background: #f8faff;
420
+ padding: 4px 8px;
421
+ }
422
+
423
+ .oxa-resolved-item > span:last-child {
424
+ display: grid;
425
+ gap: 1px;
426
+ }
427
+
428
+ .oxa-resolved-college .oxa-resolved-item {
429
+ border-color: #cfe1ff;
430
+ background: #eff6ff;
431
+ color: #155fc7;
432
+ }
433
+
434
+ .oxa-directory-trigger {
435
+ display: flex;
436
+ min-height: 38px;
437
+ align-items: center;
438
+ gap: 8px;
439
+ border: 1px solid #d9d9d9;
440
+ border-radius: 8px;
441
+ background: #fff;
442
+ padding: 3px 5px 3px 10px;
443
+ cursor: pointer;
444
+ transition: border-color 0.2s, box-shadow 0.2s;
445
+ }
446
+
447
+ .oxa-directory-trigger:hover,
448
+ .oxa-directory-trigger:focus-visible {
449
+ border-color: #1677ff;
450
+ box-shadow: 0 0 0 2px rgb(22 119 255 / 10%);
451
+ outline: 0;
452
+ }
453
+
454
+ .oxa-directory-trigger.is-disabled {
455
+ border-color: #d9d9d9;
456
+ background: #f5f5f5;
457
+ color: rgb(0 0 0 / 25%);
458
+ cursor: not-allowed;
459
+ }
460
+
461
+ .oxa-directory-trigger-icon {
462
+ color: #1677ff;
463
+ }
464
+
465
+ .oxa-directory-trigger-values {
466
+ display: flex;
467
+ min-width: 0;
468
+ flex: 1;
469
+ flex-wrap: wrap;
470
+ align-items: center;
471
+ gap: 4px;
472
+ }
473
+
474
+ .oxa-directory-placeholder {
475
+ color: rgb(0 0 0 / 25%);
476
+ }
477
+
478
+ .oxa-directory-panel {
479
+ display: grid;
480
+ gap: 14px;
481
+ }
482
+
483
+ .oxa-directory-main {
484
+ display: grid;
485
+ min-height: 460px;
486
+ grid-template-columns: 220px minmax(280px, 1fr) 240px;
487
+ overflow: hidden;
488
+ border: 1px solid #e5eaf1;
489
+ border-radius: 8px;
490
+ background: #fff;
491
+ }
492
+
493
+ .oxa-directory-tree-pane,
494
+ .oxa-directory-member-pane,
495
+ .oxa-directory-selected-pane {
496
+ min-width: 0;
497
+ padding: 14px;
498
+ }
499
+
500
+ .oxa-directory-tree-pane {
501
+ border-right: 1px solid #edf0f5;
502
+ background: #fafbfd;
503
+ }
504
+
505
+ .oxa-directory-member-pane {
506
+ display: grid;
507
+ min-height: 460px;
508
+ grid-template-rows: auto minmax(0, 1fr) auto;
509
+ gap: 10px;
510
+ }
511
+
512
+ .oxa-directory-members {
513
+ max-height: 364px;
514
+ overflow: auto;
515
+ }
516
+
517
+ .oxa-directory-member-row {
518
+ min-height: 58px;
519
+ border-bottom: 1px solid #edf0f5;
520
+ padding: 8px 4px;
521
+ }
522
+
523
+ .oxa-directory-results {
524
+ display: grid;
525
+ gap: 6px;
526
+ }
527
+
528
+ .oxa-directory-department-row {
529
+ display: flex;
530
+ min-height: 54px;
531
+ align-items: center;
532
+ gap: 10px;
533
+ border: 1px solid transparent;
534
+ border-radius: 7px;
535
+ padding: 8px;
536
+ cursor: pointer;
537
+ }
538
+
539
+ .oxa-directory-department-row:hover,
540
+ .oxa-directory-department-row:focus-visible {
541
+ border-color: #cfe1ff;
542
+ background: #f2f7ff;
543
+ outline: 0;
544
+ }
545
+
546
+ .oxa-directory-department-row > span:nth-child(2) {
547
+ display: grid;
548
+ min-width: 0;
549
+ flex: 1;
550
+ gap: 2px;
551
+ }
552
+
553
+ .oxa-directory-department-row small {
554
+ color: #7b879b;
555
+ font-size: 11px;
556
+ }
557
+
558
+ .oxa-directory-selected-pane {
559
+ border-left: 1px solid #edf0f5;
560
+ background: #fafbfd;
561
+ }
562
+
563
+ .oxa-directory-pane-title,
564
+ .oxa-directory-pagination,
565
+ .oxa-directory-footer {
566
+ display: flex;
567
+ align-items: center;
568
+ justify-content: space-between;
569
+ gap: 10px;
570
+ }
571
+
572
+ .oxa-directory-pane-title {
573
+ min-height: 32px;
574
+ margin-bottom: 10px;
575
+ color: #27364d;
576
+ font-weight: 600;
577
+ }
578
+
579
+ .oxa-directory-member-row {
580
+ display: flex;
581
+ width: 100%;
582
+ align-items: center;
583
+ gap: 10px;
584
+ cursor: pointer;
585
+ }
586
+
587
+ .oxa-directory-member-row > span:last-child,
588
+ .oxa-directory-selected-item > span:nth-child(2) {
589
+ display: grid;
590
+ min-width: 0;
591
+ flex: 1;
592
+ gap: 2px;
593
+ }
594
+
595
+ .oxa-directory-member-row small,
596
+ .oxa-directory-selected-item small {
597
+ overflow: hidden;
598
+ color: #7b879b;
599
+ font-size: 11px;
600
+ text-overflow: ellipsis;
601
+ white-space: nowrap;
602
+ }
603
+
604
+ .oxa-directory-selected-list {
605
+ display: grid;
606
+ gap: 8px;
607
+ }
608
+
609
+ .oxa-directory-selected-item {
610
+ display: flex;
611
+ align-items: center;
612
+ gap: 8px;
613
+ border: 1px solid #e1e7f0;
614
+ border-radius: 7px;
615
+ background: #fff;
616
+ padding: 7px;
617
+ }
618
+
619
+ .oxa-department-main {
620
+ grid-template-columns: minmax(300px, 1fr) 240px;
621
+ }
622
+
623
+ .oxa-directory-footer {
624
+ justify-content: flex-end;
625
+ border-top: 1px solid #edf0f5;
626
+ padding-top: 14px;
627
+ }
628
+
629
+ .oxa-file-field {
630
+ display: grid;
631
+ gap: 10px;
632
+ }
633
+
634
+ .oxa-file-dropzone .ant-upload-drag {
635
+ min-height: 72px;
636
+ border-color: #dbe3ee;
637
+ background: #fbfcfe;
638
+ padding: 12px;
639
+ }
640
+
641
+ .oxa-file-dropzone .ant-upload-drag-container {
642
+ display: grid;
643
+ gap: 5px;
644
+ color: #52627a;
645
+ }
646
+
647
+ .oxa-file-dropzone small {
648
+ color: #8a96a9;
649
+ }
650
+
651
+ .oxa-file-dropzone kbd {
652
+ border: 1px solid #d8dee8;
653
+ border-bottom-width: 2px;
654
+ border-radius: 4px;
655
+ background: #fff;
656
+ padding: 1px 5px;
657
+ color: #35445b;
658
+ font-family: inherit;
659
+ }
660
+
661
+ .oxa-file-list {
662
+ display: grid;
663
+ gap: 8px;
664
+ }
665
+
666
+ .oxa-file-item,
667
+ .oxa-file-error {
668
+ display: flex;
669
+ min-height: 50px;
670
+ align-items: center;
671
+ gap: 10px;
672
+ border: 1px solid #e2e8f0;
673
+ border-radius: 8px;
674
+ background: #fff;
675
+ padding: 7px 9px;
676
+ }
677
+
678
+ .oxa-file-kind {
72
679
  display: grid;
73
- grid-template-columns: repeat(4, minmax(160px, 1fr));
680
+ width: 32px;
681
+ height: 32px;
682
+ place-items: center;
683
+ border-radius: 7px;
684
+ background: #edf5ff;
685
+ color: #1677ff;
686
+ }
687
+
688
+ .oxa-file-meta {
689
+ display: grid;
690
+ min-width: 0;
691
+ flex: 1;
692
+ gap: 2px;
693
+ }
694
+
695
+ .oxa-file-name-button {
696
+ border: 0;
697
+ background: transparent;
698
+ padding: 0;
699
+ color: inherit;
700
+ font: inherit;
701
+ text-align: left;
702
+ cursor: pointer;
703
+ }
704
+
705
+ .oxa-file-name-button:hover strong {
706
+ color: #1677ff;
707
+ }
708
+
709
+ .oxa-file-name-button:disabled {
710
+ cursor: wait;
711
+ opacity: 0.65;
712
+ }
713
+
714
+ .oxa-file-meta strong {
715
+ overflow: hidden;
716
+ text-overflow: ellipsis;
717
+ white-space: nowrap;
718
+ }
719
+
720
+ .oxa-file-meta small,
721
+ .oxa-file-empty {
722
+ color: #7b879b;
723
+ font-size: 12px;
724
+ }
725
+
726
+ .oxa-file-error {
727
+ border-color: #ffccc7;
728
+ background: #fff2f0;
729
+ color: #cf1322;
730
+ }
731
+
732
+ .oxa-file-error > span {
733
+ flex: 1;
734
+ }
735
+
736
+ .oxa-file-empty {
737
+ border: 1px dashed #dbe3ee;
738
+ border-radius: 8px;
739
+ padding: 10px;
740
+ text-align: center;
741
+ }
742
+
743
+ .oxa-dictionary-drawer .ant-drawer-body {
744
+ padding: 22px;
745
+ }
746
+
747
+ .oxa-detail-hero,
748
+ .oxa-edit-hero {
749
+ margin-bottom: 16px;
750
+ }
751
+
752
+ .oxa-detail-hero .ant-card-body,
753
+ .oxa-edit-hero .ant-card-body {
754
+ padding: 18px 20px;
755
+ }
756
+
757
+ .oxa-detail-hero-top,
758
+ .oxa-detail-hero-main,
759
+ .oxa-edit-hero-title {
760
+ display: flex;
761
+ align-items: center;
762
+ justify-content: space-between;
763
+ gap: 16px;
764
+ }
765
+
766
+ .oxa-file-preview-page {
767
+ min-height: 100vh;
768
+ background: #eef2f7;
769
+ }
770
+
771
+ .oxa-file-preview-toolbar {
772
+ position: sticky;
773
+ z-index: 10;
774
+ top: 0;
775
+ display: flex;
776
+ min-height: 66px;
777
+ align-items: center;
778
+ justify-content: space-between;
779
+ gap: 20px;
780
+ border-bottom: 1px solid #dfe5ee;
781
+ background: rgb(255 255 255 / 96%);
782
+ padding: 10px 20px;
783
+ box-shadow: 0 2px 12px rgb(26 45 75 / 6%);
784
+ backdrop-filter: blur(12px);
785
+ }
786
+
787
+ .oxa-file-preview-toolbar > div:last-child {
788
+ display: flex;
789
+ gap: 8px;
790
+ }
791
+
792
+ .oxa-file-preview-title {
793
+ display: flex;
794
+ min-width: 0;
795
+ align-items: center;
74
796
  gap: 12px;
75
797
  }
76
- @media (max-width: 900px) {
798
+
799
+ .oxa-file-preview-title > .anticon {
800
+ color: #1677ff;
801
+ font-size: 26px;
802
+ }
803
+
804
+ .oxa-file-preview-title > div {
805
+ display: grid;
806
+ min-width: 0;
807
+ gap: 2px;
808
+ }
809
+
810
+ .oxa-file-preview-title strong,
811
+ .oxa-file-preview-title span {
812
+ overflow: hidden;
813
+ text-overflow: ellipsis;
814
+ white-space: nowrap;
815
+ }
816
+
817
+ .oxa-file-preview-title span {
818
+ color: #7b879b;
819
+ font-size: 12px;
820
+ }
821
+
822
+ .oxa-file-preview-body {
823
+ display: grid;
824
+ min-height: calc(100vh - 66px);
825
+ place-items: center;
826
+ padding: 20px;
827
+ }
828
+
829
+ .oxa-preview-frame {
830
+ width: 100%;
831
+ height: calc(100vh - 106px);
832
+ border: 0;
833
+ border-radius: 8px;
834
+ background: #fff;
835
+ box-shadow: 0 8px 32px rgb(24 42 72 / 10%);
836
+ }
837
+
838
+ .oxa-preview-image {
839
+ max-width: 100%;
840
+ max-height: calc(100vh - 106px);
841
+ border-radius: 8px;
842
+ object-fit: contain;
843
+ box-shadow: 0 8px 32px rgb(24 42 72 / 12%);
844
+ }
845
+
846
+ .oxa-docx-preview,
847
+ .oxa-spreadsheet-preview {
848
+ width: 100%;
849
+ height: calc(100vh - 106px);
850
+ overflow: auto;
851
+ border-radius: 8px;
852
+ background: #fff;
853
+ box-shadow: 0 8px 32px rgb(24 42 72 / 10%);
854
+ }
855
+
856
+ .oxa-docx-preview .docx-wrapper {
857
+ min-height: 100%;
858
+ background: #dfe4eb;
859
+ padding: 24px;
860
+ }
861
+
862
+ .oxa-spreadsheet-preview {
863
+ display: flex;
864
+ flex-direction: column;
865
+ }
866
+
867
+ .oxa-spreadsheet-preview > .ant-segmented {
868
+ flex: 0 0 auto;
869
+ margin: 12px;
870
+ }
871
+
872
+ .oxa-spreadsheet-scroll {
873
+ min-height: 0;
874
+ flex: 1;
875
+ overflow: auto;
876
+ border-top: 1px solid #e5eaf1;
877
+ }
878
+
879
+ .oxa-spreadsheet-scroll table {
880
+ min-width: 100%;
881
+ border-spacing: 0;
882
+ border-collapse: separate;
883
+ font-size: 13px;
884
+ }
885
+
886
+ .oxa-spreadsheet-scroll th,
887
+ .oxa-spreadsheet-scroll td {
888
+ min-width: 96px;
889
+ max-width: 360px;
890
+ border-right: 1px solid #e5eaf1;
891
+ border-bottom: 1px solid #e5eaf1;
892
+ padding: 7px 9px;
893
+ background: #fff;
894
+ text-align: left;
895
+ vertical-align: top;
896
+ white-space: pre-wrap;
897
+ word-break: break-word;
898
+ }
899
+
900
+ .oxa-spreadsheet-scroll th {
901
+ position: sticky;
902
+ z-index: 1;
903
+ left: 0;
904
+ min-width: 52px;
905
+ background: #f5f7fa;
906
+ color: #7b879b;
907
+ text-align: center;
908
+ }
909
+
910
+ .oxa-detail-hero-top {
911
+ align-items: flex-start;
912
+ }
913
+
914
+ .oxa-detail-hero-top > .ant-btn:first-child,
915
+ .oxa-edit-hero-title .ant-btn-link {
916
+ height: auto;
917
+ padding: 0;
918
+ }
919
+
920
+ .oxa-detail-hero-main {
921
+ margin-top: 14px;
922
+ align-items: flex-end;
923
+ }
924
+
925
+ .oxa-detail-hero-main .ant-typography,
926
+ .oxa-edit-hero-title .ant-typography {
927
+ margin-top: 0;
928
+ margin-bottom: 4px;
929
+ }
930
+
931
+ .oxa-detail-hero-main h2.ant-typography {
932
+ font-size: 22px;
933
+ }
934
+
935
+ .oxa-instrument-name.ant-typography {
936
+ margin-bottom: 2px;
937
+ font-size: 18px;
938
+ }
939
+
940
+ .oxa-record-meta {
941
+ color: #7b879b;
942
+ font-size: 12px;
943
+ }
944
+
945
+ .oxa-edit-hero-title {
946
+ margin-bottom: 14px;
947
+ align-items: flex-end;
948
+ }
949
+
950
+ .oxa-edit-hero-title h2.ant-typography {
951
+ margin-top: 8px;
952
+ font-size: 22px;
953
+ }
954
+
955
+ .oxa-detail-layout {
956
+ display: grid;
957
+ grid-template-columns: minmax(0, 1fr) 320px;
958
+ align-items: start;
959
+ gap: 16px;
960
+ }
961
+
962
+ .oxa-detail-main,
963
+ .oxa-detail-aside {
964
+ display: grid;
965
+ gap: 16px;
966
+ }
967
+
968
+ .oxa-detail-aside {
969
+ position: sticky;
970
+ top: 108px;
971
+ }
972
+
973
+ .oxa-detail-main .ant-descriptions-item-label,
974
+ .oxa-detail-aside .ant-descriptions-item-label {
975
+ color: #7b879b;
976
+ }
977
+
978
+ .oxa-audit-entry {
979
+ display: grid;
980
+ gap: 4px;
981
+ }
982
+
983
+ .oxa-audit-entry > span {
984
+ color: #7b879b;
985
+ font-size: 12px;
986
+ }
987
+
988
+ @media (max-width: 1280px) {
77
989
  .oxa-grid,
78
990
  .oxa-filter-grid {
991
+ grid-template-columns: repeat(2, minmax(0, 1fr));
992
+ }
993
+
994
+ .oxa-detail-layout {
79
995
  grid-template-columns: 1fr;
80
996
  }
81
- .oxa-header {
997
+
998
+ .oxa-detail-aside {
999
+ position: static;
1000
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1001
+ }
1002
+ }
1003
+
1004
+ @media (max-width: 900px) {
1005
+ .oxa-topbar {
1006
+ height: 80px;
1007
+ padding: 12px 16px !important;
1008
+ }
1009
+
1010
+ .oxa-topbar-page .ant-breadcrumb {
1011
+ display: none;
1012
+ }
1013
+
1014
+ .oxa-current-user {
1015
+ min-width: 0;
1016
+ }
1017
+
1018
+ .oxa-current-user-copy,
1019
+ .oxa-current-user-chevron {
1020
+ display: none;
1021
+ }
1022
+
1023
+ .oxa-main {
1024
+ padding: 16px;
1025
+ }
1026
+
1027
+ .oxa-grid,
1028
+ .oxa-filter-grid,
1029
+ .oxa-detail-aside {
1030
+ grid-template-columns: 1fr;
1031
+ }
1032
+
1033
+ .oxa-detail-hero-main,
1034
+ .oxa-detail-hero-top,
1035
+ .oxa-edit-hero-title,
1036
+ .oxa-page-heading {
82
1037
  align-items: flex-start;
1038
+ flex-direction: column;
1039
+ }
1040
+
1041
+ .oxa-record-meta {
1042
+ align-self: stretch;
1043
+ }
1044
+
1045
+ .oxa-directory-main,
1046
+ .oxa-department-main {
1047
+ min-height: 0;
1048
+ grid-template-columns: 1fr;
1049
+ }
1050
+
1051
+ .oxa-directory-tree-pane,
1052
+ .oxa-directory-selected-pane {
1053
+ border: 0;
1054
+ border-bottom: 1px solid #edf0f5;
1055
+ }
1056
+
1057
+ .oxa-directory-tree-pane,
1058
+ .oxa-directory-member-pane,
1059
+ .oxa-directory-selected-pane {
1060
+ max-height: 34vh;
1061
+ overflow: auto;
83
1062
  }
84
1063
  }