@jzg223/design-runtime 0.0.0-stage → 0.0.1

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 (229) hide show
  1. package/CHANGELOG.md +176 -0
  2. package/README.md +275 -2
  3. package/dist/_virtual/_plugin-vue_export-helper.js +10 -0
  4. package/dist/api.js +149 -0
  5. package/dist/comb/design-comb.vue.js +7 -0
  6. package/dist/comb/design-comb2.vue.js +591 -0
  7. package/dist/compat.js +74 -0
  8. package/dist/components/ApiSwitch.vue.js +7 -0
  9. package/dist/components/ApiSwitch2.vue.js +98 -0
  10. package/dist/components/design-debug/dev-mode-toggle.vue.js +7 -0
  11. package/dist/components/design-debug/dev-mode-toggle2.vue.js +41 -0
  12. package/dist/components/design-debug/dev-mode.js +45 -0
  13. package/dist/components/design-debug/dev-state-button.vue.js +7 -0
  14. package/dist/components/design-debug/dev-state-button2.vue.js +447 -0
  15. package/dist/components/design-debug/expr-eval.js +81 -0
  16. package/dist/components/design-shared/host-api.js +47 -0
  17. package/dist/components/design-shared/popup-host.js +11 -0
  18. package/dist/components/design-table/design-table-inner.vue.js +7 -0
  19. package/dist/components/design-table/design-table-inner2.vue.js +39 -0
  20. package/dist/components/design-table/design-table.vue.js +7 -0
  21. package/dist/components/design-table/design-table2.vue.js +937 -0
  22. package/dist/components/design-table/row-actions/delete-action.vue.js +4 -0
  23. package/dist/components/design-table/row-actions/delete-action2.vue.js +42 -0
  24. package/dist/components/design-table/row-actions/edit-action.vue.js +4 -0
  25. package/dist/components/design-table/row-actions/edit-action2.vue.js +145 -0
  26. package/dist/components/design-table/row-actions/index.js +36 -0
  27. package/dist/components/design-table/row-actions/modal-comb-action.vue.js +4 -0
  28. package/dist/components/design-table/row-actions/modal-comb-action2.vue.js +66 -0
  29. package/dist/components/design-table/row-actions/modal-custom-action.vue.js +7 -0
  30. package/dist/components/design-table/row-actions/modal-custom-action2.vue.js +105 -0
  31. package/dist/components/design-table/row-actions/modal-form-action.vue.js +4 -0
  32. package/dist/components/design-table/row-actions/modal-form-action2.vue.js +82 -0
  33. package/dist/components/design-table/row-actions/modal-table-action.vue.js +4 -0
  34. package/dist/components/design-table/row-actions/modal-table-action2.vue.js +67 -0
  35. package/dist/components/design-table/row-actions/modal-tree-action.vue.js +4 -0
  36. package/dist/components/design-table/row-actions/modal-tree-action2.vue.js +70 -0
  37. package/dist/components/design-table/row-actions/navigate-comb-action.vue.js +4 -0
  38. package/dist/components/design-table/row-actions/navigate-comb-action2.vue.js +47 -0
  39. package/dist/components/design-table/row-actions/navigate-form-action.vue.js +4 -0
  40. package/dist/components/design-table/row-actions/navigate-form-action2.vue.js +47 -0
  41. package/dist/components/design-table/row-actions/navigate-table-action.vue.js +4 -0
  42. package/dist/components/design-table/row-actions/navigate-table-action2.vue.js +47 -0
  43. package/dist/components/design-table/row-actions/navigate-tree-action.vue.js +4 -0
  44. package/dist/components/design-table/row-actions/navigate-tree-action2.vue.js +47 -0
  45. package/dist/components/design-table/row-actions/other-action.vue.js +4 -0
  46. package/dist/components/design-table/row-actions/other-action2.vue.js +44 -0
  47. package/dist/components/design-tools/add-tool.vue.js +4 -0
  48. package/dist/components/design-tools/add-tool2.vue.js +136 -0
  49. package/dist/components/design-tools/command-executor.js +135 -0
  50. package/dist/components/design-tools/export-tool.vue.js +4 -0
  51. package/dist/components/design-tools/export-tool2.vue.js +46 -0
  52. package/dist/components/design-tools/import-tool.vue.js +4 -0
  53. package/dist/components/design-tools/import-tool2.vue.js +101 -0
  54. package/dist/components/design-tools/index.js +36 -0
  55. package/dist/components/design-tools/modal-comb-tool.vue.js +4 -0
  56. package/dist/components/design-tools/modal-comb-tool2.vue.js +56 -0
  57. package/dist/components/design-tools/modal-form-tool.vue.js +4 -0
  58. package/dist/components/design-tools/modal-form-tool2.vue.js +66 -0
  59. package/dist/components/design-tools/modal-hcm-tool.vue.js +7 -0
  60. package/dist/components/design-tools/modal-hcm-tool2.vue.js +85 -0
  61. package/dist/components/design-tools/modal-table-tool.vue.js +4 -0
  62. package/dist/components/design-tools/modal-table-tool2.vue.js +54 -0
  63. package/dist/components/design-tools/modal-tree-tool.vue.js +4 -0
  64. package/dist/components/design-tools/modal-tree-tool2.vue.js +57 -0
  65. package/dist/components/design-tools/navigate-comb-tool.vue.js +4 -0
  66. package/dist/components/design-tools/navigate-comb-tool2.vue.js +34 -0
  67. package/dist/components/design-tools/navigate-form-tool.vue.js +4 -0
  68. package/dist/components/design-tools/navigate-form-tool2.vue.js +34 -0
  69. package/dist/components/design-tools/navigate-table-tool.vue.js +4 -0
  70. package/dist/components/design-tools/navigate-table-tool2.vue.js +33 -0
  71. package/dist/components/design-tools/other-tool.vue.js +4 -0
  72. package/dist/components/design-tools/other-tool2.vue.js +34 -0
  73. package/dist/components/flow-status-cell/flow-status-cell.vue.js +7 -0
  74. package/dist/components/flow-status-cell/flow-status-cell2.vue.js +124 -0
  75. package/dist/flow.js +22 -0
  76. package/dist/form/cell-condition.js +122 -0
  77. package/dist/form/derived-express.js +34 -0
  78. package/dist/form/design-form-inner.vue.js +7 -0
  79. package/dist/form/design-form-inner2.vue.js +449 -0
  80. package/dist/form/design-form.vue.js +7 -0
  81. package/dist/form/design-form2.vue.js +681 -0
  82. package/dist/form/fields/checkbox-field.vue.js +88 -0
  83. package/dist/form/fields/checkbox-field2.vue.js +4 -0
  84. package/dist/form/fields/custom-field.vue.js +36 -0
  85. package/dist/form/fields/custom-field2.vue.js +4 -0
  86. package/dist/form/fields/date-field.vue.js +64 -0
  87. package/dist/form/fields/date-field2.vue.js +4 -0
  88. package/dist/form/fields/embedded-list-field.vue.js +7 -0
  89. package/dist/form/fields/embedded-list-field2.vue.js +437 -0
  90. package/dist/form/fields/file-field.vue.js +88 -0
  91. package/dist/form/fields/file-field2.vue.js +4 -0
  92. package/dist/form/fields/image-field.vue.js +90 -0
  93. package/dist/form/fields/image-field2.vue.js +4 -0
  94. package/dist/form/fields/index.js +106 -0
  95. package/dist/form/fields/month-field.vue.js +51 -0
  96. package/dist/form/fields/month-field2.vue.js +4 -0
  97. package/dist/form/fields/org-select-field.vue.js +7 -0
  98. package/dist/form/fields/org-select-field2.vue.js +187 -0
  99. package/dist/form/fields/orgs-select-field.vue.js +182 -0
  100. package/dist/form/fields/orgs-select-field2.vue.js +4 -0
  101. package/dist/form/fields/radio-field.vue.js +91 -0
  102. package/dist/form/fields/radio-field2.vue.js +4 -0
  103. package/dist/form/fields/select-field.vue.js +7 -0
  104. package/dist/form/fields/select-field2.vue.js +317 -0
  105. package/dist/form/fields/splitline-field.vue.js +7 -0
  106. package/dist/form/fields/splitline-field2.vue.js +50 -0
  107. package/dist/form/fields/switch-field.vue.js +32 -0
  108. package/dist/form/fields/switch-field2.vue.js +4 -0
  109. package/dist/form/fields/text-field.vue.js +78 -0
  110. package/dist/form/fields/text-field2.vue.js +4 -0
  111. package/dist/form/fields/time-field.vue.js +50 -0
  112. package/dist/form/fields/time-field2.vue.js +4 -0
  113. package/dist/form/fields/tree-field.vue.js +157 -0
  114. package/dist/form/fields/tree-field2.vue.js +4 -0
  115. package/dist/form/number-precision.js +18 -0
  116. package/dist/form/transformer.js +162 -0
  117. package/dist/host.js +76 -0
  118. package/dist/http.js +19 -0
  119. package/dist/index.js +166 -0
  120. package/dist/mapping.js +44 -0
  121. package/dist/org/dept-api.js +30 -0
  122. package/dist/org/dept-tree-source.js +53 -0
  123. package/dist/org/dept-tree.js +122 -0
  124. package/dist/registry.js +77 -0
  125. package/dist/search/design-search.vue.js +7 -0
  126. package/dist/search/design-search2.vue.js +232 -0
  127. package/dist/search/transformer.js +115 -0
  128. package/dist/style.css +1220 -0
  129. package/dist/table/data.js +18 -0
  130. package/dist/table/load-gate.js +19 -0
  131. package/dist/table/query-body.js +59 -0
  132. package/dist/table/query-dedupe.js +54 -0
  133. package/dist/table/query-search.js +9 -0
  134. package/dist/table/row-action-mapping.js +34 -0
  135. package/dist/table/transformer.js +328 -0
  136. package/dist/tree/design-tree.vue.js +7 -0
  137. package/dist/tree/design-tree2.vue.js +783 -0
  138. package/dist/types/api.d.ts +83 -0
  139. package/dist/types/comb/design-comb.vue.d.ts +38 -0
  140. package/dist/types/compat.d.ts +46 -0
  141. package/dist/types/components/ApiSwitch.vue.d.ts +31 -0
  142. package/dist/types/components/design-debug/dev-mode-toggle.vue.d.ts +2 -0
  143. package/dist/types/components/design-debug/dev-mode.d.ts +8 -0
  144. package/dist/types/components/design-debug/dev-state-button.vue.d.ts +55 -0
  145. package/dist/types/components/design-debug/expr-eval.d.ts +55 -0
  146. package/dist/types/components/design-shared/host-api.d.ts +60 -0
  147. package/dist/types/components/design-shared/popup-host.d.ts +13 -0
  148. package/dist/types/components/design-table/design-table-inner.vue.d.ts +19 -0
  149. package/dist/types/components/design-table/design-table.vue.d.ts +70 -0
  150. package/dist/types/components/design-table/row-actions/delete-action.vue.d.ts +12 -0
  151. package/dist/types/components/design-table/row-actions/edit-action.vue.d.ts +14 -0
  152. package/dist/types/components/design-table/row-actions/index.d.ts +25 -0
  153. package/dist/types/components/design-table/row-actions/modal-comb-action.vue.d.ts +10 -0
  154. package/dist/types/components/design-table/row-actions/modal-custom-action.vue.d.ts +15 -0
  155. package/dist/types/components/design-table/row-actions/modal-form-action.vue.d.ts +10 -0
  156. package/dist/types/components/design-table/row-actions/modal-table-action.vue.d.ts +10 -0
  157. package/dist/types/components/design-table/row-actions/modal-tree-action.vue.d.ts +10 -0
  158. package/dist/types/components/design-table/row-actions/navigate-comb-action.vue.d.ts +10 -0
  159. package/dist/types/components/design-table/row-actions/navigate-form-action.vue.d.ts +10 -0
  160. package/dist/types/components/design-table/row-actions/navigate-table-action.vue.d.ts +10 -0
  161. package/dist/types/components/design-table/row-actions/navigate-tree-action.vue.d.ts +10 -0
  162. package/dist/types/components/design-table/row-actions/other-action.vue.d.ts +14 -0
  163. package/dist/types/components/design-tools/add-tool.vue.d.ts +23 -0
  164. package/dist/types/components/design-tools/command-executor.d.ts +80 -0
  165. package/dist/types/components/design-tools/export-tool.vue.d.ts +9 -0
  166. package/dist/types/components/design-tools/import-tool.vue.d.ts +14 -0
  167. package/dist/types/components/design-tools/index.d.ts +23 -0
  168. package/dist/types/components/design-tools/modal-comb-tool.vue.d.ts +12 -0
  169. package/dist/types/components/design-tools/modal-form-tool.vue.d.ts +12 -0
  170. package/dist/types/components/design-tools/modal-hcm-tool.vue.d.ts +23 -0
  171. package/dist/types/components/design-tools/modal-table-tool.vue.d.ts +12 -0
  172. package/dist/types/components/design-tools/modal-tree-tool.vue.d.ts +12 -0
  173. package/dist/types/components/design-tools/navigate-comb-tool.vue.d.ts +12 -0
  174. package/dist/types/components/design-tools/navigate-form-tool.vue.d.ts +11 -0
  175. package/dist/types/components/design-tools/navigate-table-tool.vue.d.ts +12 -0
  176. package/dist/types/components/design-tools/other-tool.vue.d.ts +16 -0
  177. package/dist/types/components/flow-status-cell/flow-status-cell.vue.d.ts +14 -0
  178. package/dist/types/components/index.d.ts +33 -0
  179. package/dist/types/flow.d.ts +50 -0
  180. package/dist/types/form/cell-condition.d.ts +35 -0
  181. package/dist/types/form/derived-express.d.ts +28 -0
  182. package/dist/types/form/design-form-inner.vue.d.ts +55 -0
  183. package/dist/types/form/design-form.vue.d.ts +96 -0
  184. package/dist/types/form/fields/checkbox-field.vue.d.ts +14 -0
  185. package/dist/types/form/fields/custom-field.vue.d.ts +22 -0
  186. package/dist/types/form/fields/date-field.vue.d.ts +12 -0
  187. package/dist/types/form/fields/embedded-list-field.vue.d.ts +26 -0
  188. package/dist/types/form/fields/file-field.vue.d.ts +12 -0
  189. package/dist/types/form/fields/image-field.vue.d.ts +12 -0
  190. package/dist/types/form/fields/index.d.ts +34 -0
  191. package/dist/types/form/fields/month-field.vue.d.ts +12 -0
  192. package/dist/types/form/fields/org-select-field.vue.d.ts +14 -0
  193. package/dist/types/form/fields/orgs-select-field.vue.d.ts +12 -0
  194. package/dist/types/form/fields/radio-field.vue.d.ts +14 -0
  195. package/dist/types/form/fields/select-field.vue.d.ts +14 -0
  196. package/dist/types/form/fields/splitline-field.vue.d.ts +7 -0
  197. package/dist/types/form/fields/switch-field.vue.d.ts +12 -0
  198. package/dist/types/form/fields/text-field.vue.d.ts +12 -0
  199. package/dist/types/form/fields/time-field.vue.d.ts +12 -0
  200. package/dist/types/form/fields/tree-field.vue.d.ts +12 -0
  201. package/dist/types/form/number-precision.d.ts +15 -0
  202. package/dist/types/form/transformer.d.ts +27 -0
  203. package/dist/types/host.d.ts +182 -0
  204. package/dist/types/http.d.ts +59 -0
  205. package/dist/types/index.d.ts +41 -0
  206. package/dist/types/mapping.d.ts +39 -0
  207. package/dist/types/org/dept-api.d.ts +12 -0
  208. package/dist/types/org/dept-tree-source.d.ts +15 -0
  209. package/dist/types/org/dept-tree.d.ts +62 -0
  210. package/dist/types/registry.d.ts +79 -0
  211. package/dist/types/search/design-search.vue.d.ts +46 -0
  212. package/dist/types/search/transformer.d.ts +36 -0
  213. package/dist/types/table/data.d.ts +30 -0
  214. package/dist/types/table/index.d.ts +20 -0
  215. package/dist/types/table/load-gate.d.ts +24 -0
  216. package/dist/types/table/query-body.d.ts +46 -0
  217. package/dist/types/table/query-dedupe.d.ts +42 -0
  218. package/dist/types/table/query-search.d.ts +21 -0
  219. package/dist/types/table/row-action-mapping.d.ts +36 -0
  220. package/dist/types/table/transformer.d.ts +59 -0
  221. package/dist/types/tree/design-tree.vue.d.ts +33 -0
  222. package/dist/types/types.d.ts +525 -0
  223. package/dist/types/utils/default-value.d.ts +16 -0
  224. package/dist/types/utils/download.d.ts +9 -0
  225. package/dist/types/utils/popup-width.d.ts +21 -0
  226. package/dist/utils/default-value.js +38 -0
  227. package/dist/utils/download.js +19 -0
  228. package/dist/utils/popup-width.js +19 -0
  229. package/package.json +73 -4
package/dist/style.css ADDED
@@ -0,0 +1,1220 @@
1
+ /**
2
+ * 库自带样式入口(构建时抽成 dist/style.css,宿主 `import '@hcm/design-platform/style.css'` 引一次)
3
+ *
4
+ * 只放「不依赖宿主主题」的最小底座:设计令牌 + 少数公共类。
5
+ * 具体组件的样式走各自 SFC 的 scoped,避免和宿主的 antd/Tailwind 打架。
6
+ */
7
+
8
+ :root {
9
+ --design-platform-radius: 6px;
10
+ --design-platform-gap: 8px;
11
+ --design-platform-muted: rgb(0 0 0 / 45%);
12
+ }
13
+
14
+ .design-platform-muted {
15
+ color: var(--design-platform-muted);
16
+ }
17
+
18
+ .design-platform-empty {
19
+ display: flex;
20
+ align-items: center;
21
+ justify-content: center;
22
+ padding: 32px 0;
23
+ color: var(--design-platform-muted);
24
+ }
25
+
26
+ .embed-list[data-v-0524a510] {
27
+ width: 100%;
28
+ box-sizing: border-box;
29
+ display: flex;
30
+ flex-direction: column;
31
+ }
32
+
33
+ /* 标题行:无边框无内边距。行高向列表页工具条看齐:常规尺寸按钮(32px) + 上下留白,
34
+ 标题与工具条垂直居中,与下方列表区保持 8px 间距 */
35
+ .embed-list__head[data-v-0524a510] {
36
+ display: flex;
37
+ align-items: center;
38
+ gap: 8px;
39
+ min-height: 46px;
40
+ margin-bottom: 8px;
41
+ padding: 0 5px;
42
+ }
43
+ .embed-list__title[data-v-0524a510] {
44
+ flex: 1;
45
+ min-width: 0;
46
+ font-size: 14px;
47
+ font-weight: 600;
48
+ line-height: 1.5;
49
+ color: hsl(var(--foreground, 240 10% 3.9%));
50
+ white-space: nowrap;
51
+ overflow: hidden;
52
+ text-overflow: ellipsis;
53
+ }
54
+ .embed-list__tools[data-v-0524a510] {
55
+ margin-left: auto;
56
+ flex-shrink: 0;
57
+ }
58
+
59
+ /* 工具按钮内 lucide 图标:默认 24px 偏大,缩为 14px 并与文字对齐(同列表页工具条) */
60
+ .embed-list__tools .ant-btn svg[data-v-0524a510] {
61
+ width: 14px;
62
+ height: 14px;
63
+ margin-right: 4px;
64
+ vertical-align: -2px;
65
+ }
66
+ .embed-list__tip[data-v-0524a510] {
67
+ margin-left: auto;
68
+ flex-shrink: 0;
69
+ font-size: 12px;
70
+ color: hsl(var(--foreground, 240 10% 3.9%) / 55%);
71
+ }
72
+
73
+ /* 数据区:固定高度、内部滚动(无边框、无内边距) */
74
+ .embed-list__body[data-v-0524a510] {
75
+ width: 100%;
76
+ min-height: 0;
77
+ overflow: hidden;
78
+ }
79
+ .embed-list__loading[data-v-0524a510],
80
+ .embed-list__error[data-v-0524a510] {
81
+ padding: 12px 0;
82
+ text-align: center;
83
+ }
84
+ .embed-list__error .ant-alert[data-v-0524a510] {
85
+ text-align: left;
86
+ }
87
+
88
+ /* vxe 在固定高度数据区内滚动:让 grid 撑满 body(设计端高度经 v-bind 注入) */
89
+ .embed-list__body[data-v-0524a510] {
90
+ height: var(--v09d39f07);
91
+ }
92
+
93
+ /* 表单单元格外框规则 .form-table td{border:1px solid #d9d9d9} 会级联到内嵌列表的 vxe 表格 td,
94
+ 导致内容行被画上 1px 全框线。内嵌列表区内一律去掉 td 边框(与列表页 design-table 无外框一致) */
95
+ .embed-list[data-v-0524a510] .vxe-table--render-default td {
96
+ border: none !important;
97
+ }
98
+ .embed-list[data-v-0524a510] .vxe-grid {
99
+ height: 100% !important;
100
+ min-height: 0;
101
+ padding: 0 !important;
102
+ }
103
+ .embed-list[data-v-0524a510] .bg-card {
104
+ height: 100% !important;
105
+ display: flex;
106
+ flex-direction: column;
107
+ min-height: 0;
108
+ padding: 0 !important;
109
+ }
110
+ .embed-list[data-v-0524a510] .vxe-grid--layout-body-wrapper,
111
+ .embed-list[data-v-0524a510] .vxe-grid--layout-body-content-wrapper,
112
+ .embed-list[data-v-0524a510] .vxe-grid--table-container,
113
+ .embed-list[data-v-0524a510] .vxe-grid--table-wrapper {
114
+ min-height: 0;
115
+ }
116
+
117
+ /* ========== 横向滚动条可见性 ==========
118
+ 嵌入列表是固定高度布局(listHeight px,数字 height 进 vxe 固定布局),正文滚动容器
119
+ .vxe-table--body-inner-wrapper 的原生滚动条会落在可视区内 → 直接启用原生条即可
120
+ (自定义 ::-webkit-scrollbar 样式可绕过系统「自动隐藏滚动条」强制常显),
121
+ 并隐藏 vxe 浮层 handle(.vxe-table--scroll-x-virtual / -y-virtual)防双条。 */
122
+ .embed-list[data-v-0524a510] .vxe-table--body-inner-wrapper {
123
+ scrollbar-width: auto !important;
124
+ -ms-overflow-style: auto !important;
125
+ }
126
+ .embed-list[data-v-0524a510] .vxe-table--body-inner-wrapper::-webkit-scrollbar {
127
+ display: block !important;
128
+ width: 12px;
129
+ height: 12px;
130
+ }
131
+ .embed-list[data-v-0524a510] .vxe-table--body-inner-wrapper::-webkit-scrollbar-track {
132
+ background: hsl(var(--background-deep, 240 5% 96%));
133
+ border-radius: 6px;
134
+ }
135
+ .embed-list[data-v-0524a510] .vxe-table--body-inner-wrapper::-webkit-scrollbar-thumb {
136
+ background: hsl(var(--foreground, 240 10% 3.9%) / 45%);
137
+ border-radius: 6px;
138
+ }
139
+ .embed-list[data-v-0524a510] .vxe-table--body-inner-wrapper::-webkit-scrollbar-thumb:hover {
140
+ background: hsl(var(--foreground, 240 10% 3.9%) / 65%);
141
+ }
142
+ .embed-list[data-v-0524a510] .vxe-table--scroll-x-virtual,
143
+ .embed-list[data-v-0524a510] .vxe-table--scroll-y-virtual {
144
+ visibility: hidden !important;
145
+ }
146
+
147
+ .org-select[data-v-227d414b] {
148
+ position: relative;
149
+ display: flex;
150
+ align-items: center;
151
+ width: 100%;
152
+ border: 1px solid #d9d9d9;
153
+ border-radius: 6px;
154
+ background: #fff;
155
+ transition: border-color 0.2s;
156
+ cursor: pointer;
157
+ box-sizing: border-box;
158
+ }
159
+ .org-select[data-v-227d414b]:hover {
160
+ border-color: #40a9ff;
161
+ }
162
+ .org-select--disabled[data-v-227d414b] {
163
+ background: #f5f5f5;
164
+ cursor: not-allowed;
165
+ }
166
+ .org-select__input[data-v-227d414b] {
167
+ flex: 1;
168
+ min-width: 0;
169
+ border: none;
170
+ outline: none;
171
+ padding: 4px 11px;
172
+ height: 30px;
173
+ font-size: 14px;
174
+ line-height: 22px;
175
+ color: rgba(0, 0, 0, 0.88);
176
+ background: transparent;
177
+ cursor: pointer;
178
+ }
179
+ .org-select__input[data-v-227d414b]:disabled {
180
+ cursor: not-allowed;
181
+ color: rgba(0, 0, 0, 0.25);
182
+ }
183
+ .org-select__suffix[data-v-227d414b] {
184
+ flex: none;
185
+ color: #bfbfbf;
186
+ margin-right: 10px;
187
+ font-size: 14px;
188
+ }
189
+ .org-select__clear[data-v-227d414b] {
190
+ flex: none;
191
+ color: #bfbfbf;
192
+ cursor: pointer;
193
+ margin-right: 4px;
194
+ padding: 0 4px;
195
+ }
196
+ .org-select__clear[data-v-227d414b]:hover {
197
+ color: #888;
198
+ }
199
+
200
+ /* 选中项长文字省略,避免撑开单元格/列宽 */
201
+ .select-field[data-v-3f1bb602] .ant-select-selection-item {
202
+ overflow: hidden;
203
+ text-overflow: ellipsis;
204
+ white-space: nowrap;
205
+ }
206
+
207
+ .splitline-title[data-v-0127fd50] {
208
+ display: inline-flex;
209
+ align-items: center;
210
+ gap: 6px;
211
+ font-size: 14px;
212
+ }
213
+ .splitline-title .anticon[data-v-0127fd50] {
214
+ color: rgba(0, 0, 0, 0.45);
215
+ }
216
+
217
+ /**
218
+ * 只用自有 class(`dr-` 前缀)做布局微调。
219
+ * ⚠ 不要写 `:deep(.ant-*)` 去改宿主的组件内部样式 —— 那会和宿主的主题定制打架,
220
+ * 而且 antd 内部类名在版本之间可能变。这条已写进 README「设计约束」。
221
+ */
222
+ .dr-api-switch[data-v-c33a122a] {
223
+ vertical-align: middle;
224
+ }
225
+
226
+ .dev-state-button[data-v-d72f4e96] {
227
+ position: absolute;
228
+ left: 10px;
229
+ /* top 由 props.top 控制(默认 10,嵌套时下移避免与父组件按钮重叠) */
230
+ z-index: 60;
231
+ }
232
+
233
+ /* 弹窗内设计器快捷入口:目标配置 + 编辑/设计 */
234
+ .dev-state-button__designer[data-v-d72f4e96] {
235
+ display: flex;
236
+ align-items: center;
237
+ justify-content: space-between;
238
+ gap: 12px;
239
+ padding: 8px 12px;
240
+ margin-bottom: 12px;
241
+ border: 1px solid #f0f0f0;
242
+ border-radius: 6px;
243
+ background: #fafafa;
244
+ }
245
+ .dev-state-button__designer-label[data-v-d72f4e96] {
246
+ font-size: 12px;
247
+ color: var(--ant-color-text-secondary, #666);
248
+ }
249
+ .dev-state-button__designer-label code[data-v-d72f4e96] {
250
+ color: #1890ff;
251
+ }
252
+ .dev-state-button__fab[data-v-d72f4e96] {
253
+ box-shadow: 0 2px 8px rgb(0 0 0 / 20%);
254
+ }
255
+ .dev-state-button__toolbar[data-v-d72f4e96] {
256
+ display: flex;
257
+ align-items: center;
258
+ justify-content: space-between;
259
+ gap: 12px;
260
+ margin-bottom: 12px;
261
+ }
262
+ .dev-state-button__tip[data-v-d72f4e96] {
263
+ font-size: 12px;
264
+ color: var(--ant-color-text-quaternary, #999);
265
+ }
266
+ .dev-state-button__head[data-v-d72f4e96] {
267
+ display: flex;
268
+ align-items: center;
269
+ justify-content: space-between;
270
+ margin-bottom: 4px;
271
+ }
272
+ .dev-state-button__tabs[data-v-d72f4e96] {
273
+ display: flex;
274
+ flex-wrap: wrap;
275
+ gap: 6px;
276
+ margin-bottom: 12px;
277
+ }
278
+ .dev-state-button__content[data-v-d72f4e96] {
279
+ border: 1px solid #f0f0f0;
280
+ border-radius: 6px;
281
+ padding: 8px 12px;
282
+ }
283
+ .dev-state-button__label[data-v-d72f4e96] {
284
+ font-size: 12px;
285
+ color: var(--ant-color-text-secondary, #666);
286
+ }
287
+ .dev-state-button__pre[data-v-d72f4e96] {
288
+ max-height: 60vh;
289
+ overflow: auto;
290
+ margin: 0;
291
+ padding: 12px;
292
+ border-radius: 6px;
293
+ background: #f6f8fa;
294
+ font-size: 12px;
295
+ line-height: 1.6;
296
+ font-family: ui-monospace, SFMono-Regular, Consolas, 'Courier New', monospace;
297
+ white-space: pre-wrap;
298
+ word-break: break-all;
299
+ }
300
+ .dev-state-button__empty[data-v-d72f4e96] {
301
+ padding: 24px 0;
302
+ text-align: center;
303
+ color: var(--ant-color-text-quaternary, #999);
304
+ }
305
+
306
+ /* ===== 表达式计算 ===== */
307
+ .dev-state-button__expr-input[data-v-d72f4e96] {
308
+ display: flex;
309
+ align-items: flex-start;
310
+ gap: 8px;
311
+ margin-bottom: 8px;
312
+ }
313
+ .dev-state-button__expr-textarea[data-v-d72f4e96] {
314
+ flex: 1;
315
+ font-family: ui-monospace, SFMono-Regular, Consolas, 'Courier New', monospace;
316
+ font-size: 12px;
317
+ }
318
+ .dev-state-button__expr-hint[data-v-d72f4e96] {
319
+ margin-bottom: 8px;
320
+ font-size: 12px;
321
+ line-height: 1.6;
322
+ color: var(--ant-color-text-quaternary, #999);
323
+ }
324
+ .dev-state-button__expr-hint code[data-v-d72f4e96] {
325
+ color: #1890ff;
326
+ }
327
+
328
+ /* 作用域切换(组件提供第二个作用域时出现):并排两枚小按钮 + 前缀说明 */
329
+ .dev-state-button__scope-switch[data-v-d72f4e96] {
330
+ display: flex;
331
+ flex-wrap: wrap;
332
+ align-items: center;
333
+ gap: 6px;
334
+ margin-bottom: 8px;
335
+ }
336
+ .dev-state-button__scope-switch-label[data-v-d72f4e96] {
337
+ font-size: 12px;
338
+ color: var(--ant-color-text-secondary, #666);
339
+ }
340
+ .dev-state-button__scope[data-v-d72f4e96] {
341
+ display: flex;
342
+ flex-wrap: wrap;
343
+ align-items: center;
344
+ gap: 2px 8px;
345
+ padding: 6px 12px;
346
+ margin-bottom: 12px;
347
+ border: 1px solid #f0f0f0;
348
+ border-radius: 6px;
349
+ background: #fafafa;
350
+ }
351
+ .dev-state-button__scope-label[data-v-d72f4e96] {
352
+ font-size: 12px;
353
+ color: var(--ant-color-text-secondary, #666);
354
+ }
355
+
356
+ /* 作用域变量 chip:link 按钮去内边距,视觉上像 tag 且可点击插入 */
357
+ .dev-state-button__scope-chip[data-v-d72f4e96] {
358
+ height: auto;
359
+ padding: 0;
360
+ font-size: 12px;
361
+ font-family: ui-monospace, SFMono-Regular, Consolas, 'Courier New', monospace;
362
+ }
363
+ .dev-state-button__scope-empty[data-v-d72f4e96] {
364
+ font-size: 12px;
365
+ color: var(--ant-color-text-quaternary, #999);
366
+ }
367
+ .dev-state-button__expr-empty[data-v-d72f4e96] {
368
+ padding: 24px 0;
369
+ text-align: center;
370
+ color: var(--ant-color-text-quaternary, #999);
371
+ }
372
+ .dev-state-button__expr-error[data-v-d72f4e96] {
373
+ border: 1px solid #ffccc7;
374
+ border-radius: 6px;
375
+ padding: 8px 12px;
376
+ background: #fff2f0;
377
+ }
378
+ .dev-state-button__expr-error .dev-state-button__head[data-v-d72f4e96] {
379
+ font-size: 12px;
380
+ color: #cf1322;
381
+ }
382
+ .dev-state-button__type[data-v-d72f4e96] {
383
+ margin-left: 6px;
384
+ padding: 0 6px;
385
+ border-radius: 4px;
386
+ background: #f0f0f0;
387
+ color: #666;
388
+ font-size: 11px;
389
+ }
390
+ .dev-state-button__warn[data-v-d72f4e96] {
391
+ margin-left: 6px;
392
+ color: #d46b08;
393
+ font-size: 11px;
394
+ }
395
+
396
+ /* 只用自有 class(design-platform- 前缀)—— 不改宿主 antd 内部样式,见 README「设计约束」 */
397
+ .dr-flow-status[data-v-ddccf2b2] {
398
+ vertical-align: middle;
399
+ }
400
+
401
+ .design-table[data-v-cd209f75] {
402
+ height: 100%;
403
+ width: 100%;
404
+ /* 开发模式悬浮按钮的定位锚点 */
405
+ position: relative;
406
+ display: flex;
407
+ flex-direction: column;
408
+ overflow: hidden;
409
+ }
410
+ /* 工具条:与标题同一行——标题靠左(插件默认按钮区),本区整体靠右对齐 */
411
+ .design-table__toolbar[data-v-cd209f75] {
412
+ display: inline-flex;
413
+ align-items: center;
414
+ justify-content: flex-end;
415
+ gap: 10px;
416
+ margin-left: auto;
417
+ }
418
+ .design-table__sys-btns[data-v-cd209f75] {
419
+ flex-shrink: 0;
420
+ }
421
+ /* 工具栏与表格之间加细分隔,行高协调 */
422
+ .design-table[data-v-cd209f75] .vxe-toolbar {
423
+ border-bottom: 1px solid hsl(var(--border, 240 5% 84%));
424
+ margin-bottom: 10px;
425
+ padding-bottom: 4px;
426
+ }
427
+ /* 标题:自定义 #table-title —— 小图标 + 14px/600 文字 */
428
+ .design-table__title[data-v-cd209f75] {
429
+ display: inline-flex;
430
+ align-items: center;
431
+ gap: 6px;
432
+ font-size: 14px;
433
+ font-weight: 600;
434
+ line-height: 1.4;
435
+ color: hsl(var(--foreground, 240 10% 3.9%));
436
+ }
437
+ .design-table__title svg[data-v-cd209f75] {
438
+ width: 14px;
439
+ height: 14px;
440
+ flex-shrink: 0;
441
+ }
442
+ /* 系统/工具按钮内的图标:lucide svg 默认 24px 偏大,统一缩为 14px 并对齐 */
443
+ .design-table__toolbar .ant-btn svg[data-v-cd209f75] {
444
+ width: 14px;
445
+ height: 14px;
446
+ margin-right: 4px;
447
+ vertical-align: -2px;
448
+ }
449
+ /* vxe 字体图标:inline 元素用 font-size 控制大小 */
450
+ .design-table .ant-btn i.vxe-icon[data-v-cd209f75] {
451
+ display: inline-block;
452
+ font-size: 14px;
453
+ line-height: 1;
454
+ margin-right: 4px;
455
+ vertical-align: -2px;
456
+ }
457
+ /* vxe 原生操作按钮已由自渲染按钮替代(仅剩 custom 的默认图标,一并隐藏,列设置走 toggleCustom 面板) */
458
+ .design-table[data-v-cd209f75] .vxe-tools--operate {
459
+ display: none !important;
460
+ }
461
+ /* 方案B:灰底画布 + 两块白卡 —— 上=查询表单,下=标题工具栏+列表(表格/分页)同卡;
462
+ 卡间灰缝 t2=8px;body 卡不加 overflow,保证分页可见 */
463
+ .design-table[data-v-cd209f75] .bg-card {
464
+ background: hsl(var(--background-deep, 240 5% 96%));
465
+ }
466
+ .design-table[data-v-cd209f75] .vxe-grid {
467
+ padding: 0 !important;
468
+ }
469
+ /* 上卡=查询表单区:vxe-grid 无论是否配置查询表单都会渲染 .vxe-grid--layout-header-wrapper
470
+ (默认布局 headKeys=['Form'] 恒渲染),未配置表单时内容为空,若不处理会露出一块空白白卡。
471
+ 故仅在 searchFormOptions 就绪(has-search-form)时给白卡样式并显示;否则整块隐藏,
472
+ 只保留下方「工具栏+列表」白卡。 */
473
+ .design-table[data-v-cd209f75] .vxe-grid--layout-header-wrapper {
474
+ display: none;
475
+ }
476
+ .design-table.has-search-form[data-v-cd209f75] .vxe-grid--layout-header-wrapper {
477
+ display: block;
478
+ background: hsl(var(--background, 0 0% 100%));
479
+ border-radius: 6px;
480
+ margin-bottom: 8px;
481
+ padding: 8px;
482
+ }
483
+ .design-table[data-v-cd209f75] .vxe-grid--layout-body-wrapper {
484
+ background: hsl(var(--background, 0 0% 100%));
485
+ border-radius: 6px;
486
+ padding: 8px;
487
+ min-height: 0;
488
+ }
489
+ /* 允许向下收缩:内部各层都放开最小高度(只放 min-height,不改结构) */
490
+ .design-table[data-v-cd209f75] .vxe-grid--layout-body-content-wrapper,
491
+ .design-table[data-v-cd209f75] .vxe-grid--table-container,
492
+ .design-table[data-v-cd209f75] .vxe-grid--table-wrapper {
493
+ min-height: 0;
494
+ }
495
+ /* 全屏态:铺满视口(类 vxe zoom 的整体放大效果) */
496
+ .design-table.is-fullscreen[data-v-cd209f75] {
497
+ position: fixed;
498
+ inset: 0;
499
+ z-index: 1000;
500
+ background: var(--ant-color-bg-container, #fff);
501
+ padding: 8px;
502
+ }
503
+ /* 内容超高时允许整块滚动,避免底部 pager 被外层 overflow:hidden 裁掉 */
504
+ /* 自适应高度链:design-table(flex column) → 灰底画布.bg-card(flex:1) → vxe-grid(100%),
505
+ 使列表卡占满剩余高度、表格内部滚动、分页固定在卡底部 */
506
+ .design-table[data-v-cd209f75] .bg-card {
507
+ flex: 1;
508
+ min-height: 0;
509
+ display: flex;
510
+ flex-direction: column;
511
+ }
512
+ .design-table[data-v-cd209f75] .vxe-grid {
513
+ flex: 1;
514
+ min-height: 0;
515
+ height: 100% !important;
516
+ }
517
+
518
+ /* ========== 横向滚动条可见性(原生条方案) ==========
519
+ vxe 默认把横向条画在表格底缘浮层(.vxe-table--scroll-x-virtual)上,受布局裁剪会落进分页区。
520
+ 配合上方「数字高度固定布局」修正后,正文底与裁剪框对齐,正文滚动容器
521
+ .vxe-table--body-inner-wrapper 的原生滚动条会落在可视区底缘:直接启用原生条
522
+ (自定义 ::-webkit-scrollbar 可绕过系统「自动隐藏滚动条」强制常显),并隐藏 vxe 浮层防双条。
523
+ 条样式:12px、thumb 前景色 45%(hover 65%),与嵌入列表(embedded-list)同款。 */
524
+ .design-table[data-v-cd209f75] .vxe-table--body-inner-wrapper {
525
+ scrollbar-width: auto !important;
526
+ -ms-overflow-style: auto !important;
527
+ }
528
+ .design-table[data-v-cd209f75] .vxe-table--body-inner-wrapper::-webkit-scrollbar {
529
+ display: block !important;
530
+ width: 12px;
531
+ height: 12px;
532
+ }
533
+ .design-table[data-v-cd209f75] .vxe-table--body-inner-wrapper::-webkit-scrollbar-track {
534
+ background: hsl(var(--background-deep, 240 5% 96%));
535
+ border-radius: 6px;
536
+ }
537
+ .design-table[data-v-cd209f75] .vxe-table--body-inner-wrapper::-webkit-scrollbar-thumb {
538
+ background: hsl(var(--foreground, 240 10% 3.9%) / 45%);
539
+ border-radius: 6px;
540
+ }
541
+ .design-table[data-v-cd209f75] .vxe-table--body-inner-wrapper::-webkit-scrollbar-thumb:hover {
542
+ background: hsl(var(--foreground, 240 10% 3.9%) / 65%);
543
+ }
544
+ .design-table[data-v-cd209f75] .vxe-table--scroll-x-virtual,
545
+ .design-table[data-v-cd209f75] .vxe-table--scroll-y-virtual {
546
+ visibility: hidden !important;
547
+ }
548
+ .flex-center[data-v-cd209f75] {
549
+ display: flex;
550
+ align-items: center;
551
+ justify-content: center;
552
+ }
553
+
554
+ .design-form-table-wrapper[data-v-52abdc9f] {
555
+ width: 100%;
556
+ overflow-x: auto;
557
+ }
558
+ .form-table[data-v-52abdc9f] {
559
+ width: 100%;
560
+ border-collapse: collapse;
561
+ table-layout: fixed;
562
+ }
563
+ .form-table[data-v-52abdc9f] td {
564
+ padding: 6px 10px;
565
+ vertical-align: middle;
566
+ word-break: break-all;
567
+ overflow: hidden;
568
+ border: 1px solid #d9d9d9;
569
+ }
570
+ .form-table[data-v-52abdc9f] .form-td-label {
571
+ /* 柔和淡蓝底(很浅的蓝灰,避免整列色块太重) */
572
+ background-color: #f7f9fc;
573
+ font-weight: 500;
574
+ font-size: 14px;
575
+ color: #333;
576
+ }
577
+ .form-table[data-v-52abdc9f] .form-td-field {
578
+ background-color: #fff;
579
+ }
580
+ .form-table[data-v-52abdc9f] .form-td-splitline {
581
+ background-color: #fff;
582
+ border: none !important;
583
+ padding: 8px 0 4px;
584
+ }
585
+ .form-table[data-v-52abdc9f] .form-td-splitline .ant-divider {
586
+ /* 分割线上下留白(适中),便于与其他字段区分 */
587
+ margin: 8px 0;
588
+ }
589
+
590
+ /* antd divider 默认线色 rgba(5,5,5,0.06) 几乎看不见,加深到明确可见;
591
+ 带文字的 divider 线条在 .ant-divider-rail-start/-end 元素上(非 ::before/::after),
592
+ 无文字的线条在根元素 .ant-divider.ant-divider-rail 上 */
593
+ .form-table[data-v-52abdc9f] .form-td-splitline .ant-divider-rail-start,
594
+ .form-table[data-v-52abdc9f] .form-td-splitline .ant-divider-rail-end {
595
+ border-color: rgba(0, 0, 0, 0.2);
596
+ }
597
+ .form-table[data-v-52abdc9f] .form-td-splitline .ant-divider.ant-divider-rail {
598
+ border-color: rgba(0, 0, 0, 0.2);
599
+ }
600
+ .form-table-empty[data-v-52abdc9f] {
601
+ display: flex;
602
+ align-items: center;
603
+ justify-content: center;
604
+ padding: 40px 0;
605
+ color: #999;
606
+ }
607
+ .form-table[data-v-52abdc9f] td.form-td-required {
608
+ /* 必填字段:浅红底区分(替代红色 *)——恢复原方式 */
609
+ background-color: #fff1f0;
610
+ }
611
+
612
+ /* 必填的 label 格:保持淡蓝底不铺红底(避免红蓝冲突刺眼),改用红色文字区分 */
613
+ .form-table[data-v-52abdc9f] td.form-td-label.form-td-required {
614
+ background-color: #f7f9fc;
615
+ color: #cf1322;
616
+ }
617
+ .field-cell[data-v-52abdc9f] {
618
+ display: flex;
619
+ align-items: center;
620
+ gap: 0;
621
+ }
622
+
623
+ /* 条件门内容容器:只为挂 v-show(显示条件)而存在,本身不加任何视觉样式,
624
+ 避免改动字段格/标签格/分割线原有的盒子关系 */
625
+ .cell-cond-body[data-v-52abdc9f] {
626
+ min-width: 0;
627
+ }
628
+
629
+ /* 条件隐藏格的占位提示(渲染条件/显示条件不满足):小灰标签 + 鼠标移入 Tooltip 说明原因。
630
+ 样式与 .cell-remark 同族(浅灰、细边框、圆角),保证「隐藏」不会看起来像「坏了」 */
631
+ .cell-cond-hidden[data-v-52abdc9f] {
632
+ display: inline-flex;
633
+ align-items: center;
634
+ box-sizing: border-box;
635
+ height: 18px;
636
+ padding: 0 6px;
637
+ font-size: 11px;
638
+ line-height: 1;
639
+ color: #bfbfbf;
640
+ white-space: nowrap;
641
+ cursor: help;
642
+ user-select: none;
643
+ border: 1px dashed #d9d9d9;
644
+ border-radius: 9px;
645
+ background-color: #fafafa;
646
+ }
647
+ .cell-cond-hidden[data-v-52abdc9f]:hover {
648
+ color: #8c8c8c;
649
+ border-color: #bfbfbf;
650
+ }
651
+
652
+ /* 标签格(无 name)也要能带备注图标:整块作为一行渲染,图标跟在文字后面 */
653
+ .cell-text[data-v-52abdc9f] {
654
+ display: inline-flex;
655
+ align-items: center;
656
+ gap: 4px;
657
+ }
658
+
659
+ /* 备注说明图标(cell.remark 有值才渲染):单元格最右侧的小问号,鼠标移入由 Tooltip 显示说明 */
660
+ .cell-remark[data-v-52abdc9f] {
661
+ flex: 0 0 auto;
662
+ display: inline-flex;
663
+ align-items: center;
664
+ justify-content: center;
665
+ box-sizing: border-box;
666
+ width: 14px;
667
+ height: 14px;
668
+ margin-left: 4px;
669
+ font-size: 10px;
670
+ font-weight: 600;
671
+ line-height: 1;
672
+ color: #8c8c8c;
673
+ cursor: help;
674
+ user-select: none;
675
+ border: 1px solid currentcolor;
676
+ border-radius: 50%;
677
+ }
678
+ .cell-remark[data-v-52abdc9f]:hover {
679
+ color: #1890ff;
680
+ }
681
+
682
+ /* 内嵌列表单元格:通栏、内容不被固定行高/溢出裁剪约束;无边框内边距(与单元格齐平) */
683
+ /* 未迁入的内嵌列表:明确提示,不占位成输入框 */
684
+ .cell-embedded-missing[data-v-52abdc9f] {
685
+ padding: 8px;
686
+ color: var(--design-platform-muted, rgb(0 0 0 / 45%));
687
+ font-size: 12px;
688
+ border: 1px dashed var(--design-platform-danger, #ff4d4f);
689
+ border-radius: 6px;
690
+ }.form-table[data-v-52abdc9f] td.form-td-embedded-list {
691
+ background-color: #fff;
692
+ overflow: visible;
693
+ padding: 0;
694
+ vertical-align: top;
695
+ }
696
+
697
+ .design-form[data-v-b3ade916] {
698
+ /* width: 100%; 加上不适合,就是要表单自己的宽度 */
699
+ /* 开发模式悬浮按钮的定位锚点 */
700
+ position: relative;
701
+ }
702
+ .form-title[data-v-b3ade916] {
703
+ font-size: 16px;
704
+ font-weight: 600;
705
+ color: #333;
706
+ margin-bottom: 16px;
707
+ padding-bottom: 12px;
708
+ border-bottom: 1px solid #e8e8e8;
709
+ }
710
+
711
+ /* 工具条:表单下方白底区域,按钮靠右 */
712
+ .design-form-toolbar[data-v-b3ade916] {
713
+ margin-top: 12px;
714
+ padding: 10px 16px;
715
+ border-radius: 8px;
716
+ background: var(--ant-color-bg-elevated, #fff);
717
+ display: flex;
718
+ align-items: center;
719
+ justify-content: flex-end;
720
+ }
721
+ .flex-center[data-v-b3ade916] {
722
+ display: flex;
723
+ align-items: center;
724
+ justify-content: center;
725
+ }
726
+
727
+ .design-comb[data-v-902e3400] {
728
+ /* width: 100%; */
729
+ height: 100%;
730
+ /* 开发模式悬浮按钮的定位锚点 */
731
+ position: relative;
732
+ }
733
+
734
+ /* 工具条:组合视图顶部白底区域,按钮靠右;固定自身高度不参与伸缩(否则内容 100% + 工具条叠加超出卡片产生双滚动条) */
735
+ .design-comb-toolbar[data-v-902e3400] {
736
+ flex: none;
737
+ margin-bottom: 12px;
738
+ padding: 10px 16px;
739
+ border-radius: 8px;
740
+ background: var(--ant-color-bg-elevated, #fff);
741
+ display: flex;
742
+ align-items: center;
743
+ justify-content: flex-end;
744
+ }
745
+
746
+ /* 卡片 + 内容区高度撑满:body 改 flex 列——工具条占自身高度,内容区(flat/tabs)flex:1 占剩余高度,
747
+ 避免「内容 100% + 工具条高度」叠加超出卡片,产生内外双滚动条 */
748
+ .design-comb__card[data-v-902e3400] {
749
+ height: 100%;
750
+ }
751
+ .design-comb__card[data-v-902e3400] .ant-card-body {
752
+ height: 100%;
753
+ display: flex;
754
+ flex-direction: column;
755
+ overflow: hidden;
756
+ }
757
+
758
+ /* 平铺模式:占满剩余高度,内部滚动(唯一滚动条) */
759
+ .design-comb__flat[data-v-902e3400] {
760
+ flex: 1;
761
+ min-height: 0;
762
+ overflow-y: auto;
763
+ display: flex;
764
+ flex-direction: column;
765
+ gap: 12px;
766
+ }
767
+
768
+ /* 组合项:不包盒子(无边框/圆角/底色/固定高度),标题与内容随内容自然排布 */
769
+ .design-comb__flat-item[data-v-902e3400] {
770
+ flex: none;
771
+ display: flex;
772
+ flex-direction: column;
773
+ }
774
+
775
+ /* 平铺模式每个目标的标题行:中性浅灰底 + 主题蓝左侧强调条 + 加粗,随内容滚动(不吸顶) */
776
+ .design-comb__flat-title[data-v-902e3400] {
777
+ flex: none;
778
+ display: flex;
779
+ align-items: center;
780
+ gap: 8px;
781
+ margin-bottom: 8px; /* 标题与下方内容之间的间隔 */
782
+ padding: 10px 16px;
783
+ font-size: 15px;
784
+ font-weight: 600;
785
+ color: rgba(0, 0, 0, 0.88);
786
+ background: var(--ant-color-fill-tertiary, #f5f5f5);
787
+ border-left: 4px solid var(--ant-color-primary, #1677ff);
788
+ border-top: 1px solid var(--ant-color-border-secondary, #f0f0f0);
789
+ border-bottom: 1px solid var(--ant-color-border-secondary, #f0f0f0);
790
+ }
791
+
792
+ /* 平铺模式:pane 填满卡片剩余高度(复用 Tabs 模式的高度链) */
793
+ .design-comb__flat-item .design-comb__pane[data-v-902e3400] {
794
+ flex: 1;
795
+ min-height: 0;
796
+ }
797
+
798
+ /* Tabs 模式(自绘):左侧页签列 + 右侧内容区,整体撑满卡片剩余高度 */
799
+ .design-comb__tabs[data-v-902e3400] {
800
+ flex: 1;
801
+ min-height: 0;
802
+ display: flex;
803
+ flex-direction: row;
804
+ }
805
+
806
+ /**
807
+ * 左侧页签列:普通 div + overflow-y:auto —— 原生滚动/滚轮/滚动条,
808
+ * 组合项再多也不会出现 antd Tabs 那三个问题(「···更多」折叠 / 滚轮被吃 / 切页签跳回顶部)。
809
+ */
810
+ .design-comb__tabnav[data-v-902e3400] {
811
+ flex: 0 0 auto;
812
+ /* 页签列加宽:140 → 180(长标题少折行、更好点) */
813
+ width: 180px;
814
+ min-height: 0;
815
+ padding: 8px 0;
816
+ overflow-x: hidden;
817
+ overflow-y: auto;
818
+ /* 滚到尽头不要把滚动传给页面 */
819
+ overscroll-behavior: contain;
820
+ border-right: 1px solid var(--ant-color-border-secondary, #f0f0f0);
821
+ display: flex;
822
+ flex-direction: column;
823
+ }
824
+
825
+ /* 页签列滚动条细一点,别抢视觉 */
826
+ .design-comb__tabnav[data-v-902e3400]::-webkit-scrollbar {
827
+ width: 6px;
828
+ }
829
+ .design-comb__tabnav[data-v-902e3400]::-webkit-scrollbar-thumb {
830
+ background: rgb(0 0 0 / 15%);
831
+ border-radius: 3px;
832
+ }
833
+
834
+ /* 单个页签:外观对齐 antd left 模式(灰字,激活蓝字 + 左侧指示条 + 浅蓝底) */
835
+ .design-comb__tab[data-v-902e3400] {
836
+ flex: 0 0 auto;
837
+ /* 高度调大:8px → 12px 内边距(行高 20 → 单项 44px),更好点 */
838
+ padding: 12px 14px;
839
+ border: none;
840
+ background: transparent;
841
+ text-align: left;
842
+ font-size: 14px;
843
+ line-height: 20px;
844
+ color: rgb(0 0 0 / 65%);
845
+ cursor: pointer;
846
+ word-break: break-all;
847
+ white-space: normal;
848
+ }
849
+ .design-comb__tab[data-v-902e3400]:hover {
850
+ color: #1677ff;
851
+ }
852
+ .design-comb__tab--active[data-v-902e3400] {
853
+ color: #1677ff;
854
+ font-weight: 500;
855
+ background: rgb(22 119 255 / 6%);
856
+ /* 用 inset 阴影当指示条(贴左边缘),避免 border 改变宽度导致文字位移 */
857
+ box-shadow: inset 3px 0 0 #1677ff;
858
+ }
859
+
860
+ /* 右侧内容区:占满剩余宽度,内部由 pane 自己滚动 */
861
+ .design-comb__tabbody[data-v-902e3400] {
862
+ flex: 1;
863
+ min-height: 0;
864
+ display: flex;
865
+ flex-direction: column;
866
+ overflow: hidden;
867
+ }
868
+
869
+ /* 单个目标的容器:填满内容区,子组件在内部自适应滚动 */
870
+ .design-comb__pane[data-v-902e3400] {
871
+ flex: 1;
872
+ min-height: 0;
873
+ display: flex;
874
+ flex-direction: column;
875
+ overflow: hidden;
876
+ }
877
+
878
+ /* 表单 / 视图:填满 pane,内容超出时自身滚动。
879
+ padding=16px:与树形视图右侧关联表单(.design-tree-relation .design-form)保持一致,
880
+ 否则表单项表格会紧贴左侧页签列边缘,label 第一列看起来被"切掉"(2026-10-19 用户反馈) */
881
+ .design-comb__pane[data-v-902e3400] .design-form {
882
+ flex: 1;
883
+ min-height: 0;
884
+ overflow: auto;
885
+ padding: 16px;
886
+ box-sizing: border-box;
887
+ }
888
+
889
+ /* 视图:本身只是容器(内部多半再套 DesignForm/DesignTable),不加内边距避免与子组件叠加 */
890
+ .design-comb__pane[data-v-902e3400] .design-view {
891
+ flex: 1;
892
+ min-height: 0;
893
+ overflow: auto;
894
+ }
895
+
896
+ /* 表格:填满 pane,由内部 vxe-grid 负责滚动 */
897
+ .design-comb__pane[data-v-902e3400] .design-table {
898
+ flex: 1;
899
+ min-height: 0;
900
+ display: flex;
901
+ flex-direction: column;
902
+ overflow: hidden;
903
+ }
904
+ .flex-center[data-v-902e3400] {
905
+ display: flex;
906
+ align-items: center;
907
+ justify-content: center;
908
+ }
909
+
910
+ /* 全局开发模式开关:常驻右下角(抬到 56px;各组件的 🐞 按钮在组件左上角,互不重叠) */
911
+ .dev-mode-toggle[data-v-f3f51604] {
912
+ position: fixed;
913
+ right: 12px;
914
+ bottom: 56px;
915
+ z-index: 500;
916
+ width: 28px;
917
+ height: 28px;
918
+ border-radius: 50%;
919
+ border: 1px solid rgb(0 0 0 / 12%);
920
+ background: rgb(255 255 255 / 72%);
921
+ box-shadow: 0 1px 4px rgb(0 0 0 / 10%);
922
+ display: flex;
923
+ align-items: center;
924
+ justify-content: center;
925
+ cursor: pointer;
926
+ opacity: 0.65;
927
+ transition:
928
+ opacity 0.2s,
929
+ background 0.2s,
930
+ border-color 0.2s;
931
+ }
932
+ .dev-mode-toggle[data-v-f3f51604]:hover {
933
+ opacity: 1;
934
+ }
935
+ .dev-mode-toggle--on[data-v-f3f51604] {
936
+ background: #1677ff;
937
+ border-color: #1677ff;
938
+ opacity: 1;
939
+ }
940
+ .dev-mode-toggle__label[data-v-f3f51604] {
941
+ color: #fff;
942
+ font-size: 11px;
943
+ font-weight: 600;
944
+ line-height: 1;
945
+ }
946
+ .dev-mode-toggle__dot[data-v-f3f51604] {
947
+ width: 8px;
948
+ height: 8px;
949
+ border-radius: 50%;
950
+ background: rgb(0 0 0 / 35%);
951
+ }
952
+ .dev-mode-toggle--on .dev-mode-toggle__dot[data-v-f3f51604] {
953
+ display: none;
954
+ }
955
+
956
+ .design-search[data-v-ce8cdb6c] {
957
+ width: 100%;
958
+ /* 开发模式悬浮按钮的定位锚点 */
959
+ position: relative;
960
+ }
961
+ .design-search-form[data-v-ce8cdb6c] {
962
+ display: flex;
963
+ flex-wrap: wrap;
964
+ gap: 12px 16px;
965
+ align-items: center;
966
+ }
967
+ .design-search-item[data-v-ce8cdb6c] {
968
+ display: flex;
969
+ align-items: center;
970
+ gap: 8px;
971
+ }
972
+ .design-search-label[data-v-ce8cdb6c] {
973
+ flex-shrink: 0;
974
+ font-size: 14px;
975
+ color: #333;
976
+ }
977
+ .design-search-field[data-v-ce8cdb6c] {
978
+ width: 180px;
979
+ }
980
+
981
+ /* 让各字段组件填满固定宽度 */
982
+ .design-search-field[data-v-ce8cdb6c] .ant-input,
983
+ .design-search-field[data-v-ce8cdb6c] .ant-input-affix-wrapper,
984
+ .design-search-field[data-v-ce8cdb6c] .ant-select,
985
+ .design-search-field[data-v-ce8cdb6c] .ant-picker,
986
+ .design-search-field[data-v-ce8cdb6c] .ant-input-number,
987
+ .design-search-field[data-v-ce8cdb6c] .ant-tree-select {
988
+ width: 100%;
989
+ }
990
+ .design-search-actions[data-v-ce8cdb6c] {
991
+ display: flex;
992
+ gap: 8px;
993
+ }
994
+ .flex-center[data-v-ce8cdb6c] {
995
+ display: flex;
996
+ align-items: center;
997
+ justify-content: center;
998
+ }
999
+
1000
+ /* 撑满父容器并允许内部滚动(宿主原实现用的 Tailwind 类 flex-1 min-h-0 的等价写法) */
1001
+ .dr-table-inner[data-v-e9102e0c] {
1002
+ display: flex;
1003
+ flex: 1 1 0%;
1004
+ flex-direction: column;
1005
+ min-height: 0;
1006
+ }
1007
+
1008
+ .design-tree[data-v-c106575a] {
1009
+ height: 100%;
1010
+ width: 100%;
1011
+ display: flex;
1012
+ flex-direction: column;
1013
+ /* 开发模式悬浮按钮的定位锚点 */
1014
+ position: relative;
1015
+ }
1016
+
1017
+ /* 正常渲染主区域:顶部工具条 + 下方 layout */
1018
+ .design-tree-main[data-v-c106575a] {
1019
+ flex: 1;
1020
+ min-height: 0;
1021
+ display: flex;
1022
+ flex-direction: column;
1023
+ }
1024
+
1025
+ /* 顶部工具条区域:白底横跨整行,内容靠右 */
1026
+ .design-tree-toolbar[data-v-c106575a] {
1027
+ flex-shrink: 0;
1028
+ margin-bottom: 8px;
1029
+ padding: 10px 16px;
1030
+ border-radius: 8px;
1031
+ background: var(--ant-color-bg-elevated, #fff);
1032
+ display: flex;
1033
+ align-items: center;
1034
+ justify-content: flex-end;
1035
+ }
1036
+ .design-tree-layout[data-v-c106575a] {
1037
+ flex: 1;
1038
+ min-height: 0;
1039
+ display: flex;
1040
+ /* t1=8px:间隔由分隔条宽度承担,layout 不再额外留 gap */
1041
+ gap: 0;
1042
+ }
1043
+
1044
+ /* ========== 左侧树面板(宽度由 treeWidth 动态控制,配置默认 260px、可拖拽) ========== */
1045
+ .design-tree-panel[data-v-c106575a] {
1046
+ flex-shrink: 0;
1047
+ overflow: hidden;
1048
+ border-radius: 8px;
1049
+ background: var(--ant-color-bg-elevated, #fff);
1050
+ display: flex;
1051
+ flex-direction: column;
1052
+ }
1053
+
1054
+ /* ========== 分隔条:宽=t1(8px),兼作树与右侧区域的间隔,按住拖拽调整树宽 ========== */
1055
+ .design-tree-resizer[data-v-c106575a] {
1056
+ flex-shrink: 0;
1057
+ align-self: stretch;
1058
+ width: 8px;
1059
+ margin: 0;
1060
+ cursor: col-resize;
1061
+ border-radius: 3px;
1062
+ transition: background 0.15s;
1063
+ user-select: none;
1064
+ }
1065
+ .design-tree-resizer[data-v-c106575a]:hover,
1066
+ .design-tree-resizer[data-v-c106575a]:active {
1067
+ background: var(--ant-color-primary, #1677ff);
1068
+ opacity: 0.35;
1069
+ }
1070
+ .design-tree-body[data-v-c106575a] {
1071
+ flex: 1;
1072
+ min-height: 0;
1073
+ overflow: auto;
1074
+ padding: 8px;
1075
+ }
1076
+
1077
+ /* ========== 右侧关联目标 ========== */
1078
+ .design-tree-relation[data-v-c106575a] {
1079
+ flex: 1;
1080
+ min-width: 0;
1081
+ min-height: 0;
1082
+ display: flex;
1083
+ flex-direction: column;
1084
+ overflow: hidden;
1085
+ border-radius: 8px;
1086
+ background: var(--ant-color-bg-elevated, #fff);
1087
+ }
1088
+
1089
+ /* 表单:填满右侧区域,内容超出时自身滚动(加内边距,让表单内容不贴边) */
1090
+ .design-tree-relation[data-v-c106575a] .design-form {
1091
+ flex: 1;
1092
+ min-height: 0;
1093
+ overflow: auto;
1094
+ padding: 16px;
1095
+ box-sizing: border-box;
1096
+ }
1097
+
1098
+ /* 表格:填满右侧区域,由内部 vxe-grid 负责滚动 */
1099
+ .design-tree-relation[data-v-c106575a] .design-table {
1100
+ flex: 1;
1101
+ min-height: 0;
1102
+ display: flex;
1103
+ flex-direction: column;
1104
+ overflow: hidden;
1105
+ }
1106
+
1107
+ /* 组合视图:填满右侧区域,内部自适应滚动 */
1108
+ .design-tree-relation[data-v-c106575a] .design-comb {
1109
+ flex: 1;
1110
+ min-height: 0;
1111
+ display: flex;
1112
+ flex-direction: column;
1113
+ overflow: hidden;
1114
+ }
1115
+
1116
+ /* ========== 树节点样式 ========== */
1117
+ [data-v-c106575a] .design-tree__tree {
1118
+ background: transparent;
1119
+ }
1120
+ [data-v-c106575a] .design-tree__tree .ant-tree-treenode {
1121
+ border-radius: 6px;
1122
+ margin: 1px 0;
1123
+ padding: 1px 4px;
1124
+ transition: background 0.15s;
1125
+ }
1126
+ [data-v-c106575a] .design-tree__tree .ant-tree-treenode:hover {
1127
+ background: var(--ant-color-fill-quaternary);
1128
+ }
1129
+ [data-v-c106575a] .design-tree__tree .ant-tree-node-content-wrapper {
1130
+ border-radius: 4px;
1131
+ font-size: 13px;
1132
+ }
1133
+ [data-v-c106575a] .design-tree__tree .ant-tree-switcher {
1134
+ display: flex;
1135
+ align-items: center;
1136
+ justify-content: center;
1137
+ width: 20px;
1138
+ height: 24px;
1139
+ line-height: 24px;
1140
+ }
1141
+ [data-v-c106575a] .design-tree__tree .ant-tree-indent-unit {
1142
+ width: 18px;
1143
+ }
1144
+
1145
+ /* ========== 节点标题 + 数量徽标(2026-10-23;同日调整:右对齐成列 + 提高对比度) ==========
1146
+ 右对齐原理:.ant-tree-treenode 本身是 flex 行,把 content-wrapper 和它里面那层 .ant-tree-title
1147
+ 都拉满剩余宽度后,标题文本才会占满并省略号截断,徽标靠 margin-left:auto 贴到最右,
1148
+ 所有数量落在同一列,方便纵向比较(也不依赖固定宽度,缩进层级下不会错位)。
1149
+ 注意:antd 的 .ant-tree-title 默认是 inline(宽度收缩到文字),只给 content-wrapper 设 flex 不够,
1150
+ 徽标会紧贴文字后面、每行位置各不相同——看起来像是没对齐 */
1151
+ [data-v-c106575a] .design-tree__tree .ant-tree-treenode {
1152
+ width: 100%;
1153
+ }
1154
+ [data-v-c106575a] .design-tree__tree .ant-tree-node-content-wrapper {
1155
+ display: flex;
1156
+ align-items: center;
1157
+ flex: 1;
1158
+ min-width: 0;
1159
+ }
1160
+ [data-v-c106575a] .design-tree__tree .ant-tree-title {
1161
+ display: flex;
1162
+ align-items: center;
1163
+ flex: 1;
1164
+ min-width: 0;
1165
+ }
1166
+ .tree-node-title[data-v-c106575a] {
1167
+ display: flex;
1168
+ align-items: center;
1169
+ gap: 8px;
1170
+ width: 100%;
1171
+ min-width: 0;
1172
+ }
1173
+ .tree-node-title__text[data-v-c106575a] {
1174
+ flex: 1 1 auto;
1175
+ min-width: 0;
1176
+ overflow: hidden;
1177
+ text-overflow: ellipsis;
1178
+ white-space: nowrap;
1179
+ }
1180
+
1181
+ /* 数量徽标:灰底 pill + 深色加粗数字(原先浅灰 12px 常规字重在白底上几乎看不见,评审反馈「不明显」);
1182
+ min-width 让小位数与多位数对齐成一列,等宽数字避免数量刷新时左右抖动 */
1183
+ .tree-node-title__count[data-v-c106575a] {
1184
+ flex: none;
1185
+ margin-left: auto;
1186
+ box-sizing: border-box;
1187
+ min-width: 22px;
1188
+ height: 20px;
1189
+ padding: 0 6px;
1190
+ border-radius: 10px;
1191
+ background: var(--ant-color-fill, rgba(0, 0, 0, 0.15));
1192
+ color: var(--ant-color-text, rgba(0, 0, 0, 0.88));
1193
+ font-size: 12px;
1194
+ font-weight: 600;
1195
+ line-height: 20px;
1196
+ text-align: center;
1197
+ font-variant-numeric: tabular-nums;
1198
+ }
1199
+ .flex-center[data-v-c106575a] {
1200
+ display: flex;
1201
+ align-items: center;
1202
+ justify-content: center;
1203
+ }
1204
+
1205
+ /* 弹窗内容自己滚动:组件可能很高(表格/长表单),别把按钮区顶出屏幕 */
1206
+ .dr-modal-custom-host[data-v-edb5039f] {
1207
+ max-height: 70vh;
1208
+ overflow: auto;
1209
+ padding: 4px 2px;
1210
+ }
1211
+ .dr-modal-custom-missing[data-v-edb5039f] {
1212
+ padding: 16px;
1213
+ color: var(--design-platform-muted, rgb(0 0 0 / 45%));
1214
+ }
1215
+
1216
+ .modal-hcm-body[data-v-4b3c6924] {
1217
+ max-height: 72vh;
1218
+ overflow: auto;
1219
+ padding: 4px 2px;
1220
+ }