@done-coding/admin-core 0.30.0 → 0.30.1-alpha.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.
- package/es/bridge/badge.mjs +7 -1
- package/es/components/app-layout/AppPage.vue.mjs +1 -1
- package/es/components/app-layout/AppPage.vue2.mjs +15 -8
- package/es/components/app-layout/app-page-geometry.mjs +7 -3
- package/es/components/app-layout/use-slot-misuse-warn.mjs +40 -0
- package/es/components/data-view/DataGridView.vue.mjs +1 -1
- package/es/components/data-view/DataGridView.vue2.mjs +83 -32
- package/es/components/data-view/DataGridViewCard.vue.mjs +41 -0
- package/es/components/data-view/DataGridViewCard.vue2.mjs +4 -0
- package/es/components/data-view/InfiniteListView.vue.mjs +1 -1
- package/es/components/data-view/InfiniteListView.vue2.mjs +38 -11
- package/es/components/display/BadgeMark.vue.mjs +1 -1
- package/es/components/display/BadgeMark.vue2.mjs +31 -33
- package/es/components/display/use-badge.mjs +37 -33
- package/es/components/form/FormGroupTitle.vue.mjs +1 -1
- package/es/components/form/FormItem.vue.mjs +1 -1
- package/es/components/form/FormItemNestForm.vue.mjs +1 -1
- package/es/components/form/FormItemNestFormList.vue.mjs +1 -1
- package/es/components/form/FormTree.vue.mjs +5 -30
- package/es/components/form/FormTree.vue2.mjs +30 -1
- package/es/components/form/FormUpload.vue.mjs +1 -1
- package/es/components/modal/ModalPorter.vue.mjs +2 -0
- package/es/components/modal/use-slot-misuse-warn.mjs +22 -0
- package/es/components/page-layout/AppPageListDetailSplit.vue.mjs +1 -1
- package/es/components/page-layout/AppPageListDetailSplit.vue2.mjs +7 -7
- package/es/components/view-layout/ViewLayout.vue.mjs +1 -1
- package/es/components/view-layout/ViewLayout.vue2.mjs +71 -91
- package/es/components/view-layout/ViewLayoutToolbar.vue.mjs +7 -0
- package/es/components/view-layout/ViewLayoutToolbar.vue2.mjs +189 -0
- package/es/config/slot-region.mjs +23 -1
- package/es/hooks/use-custom-breakpoint.mjs +12 -2
- package/es/hooks/use-is-dev.mjs +16 -0
- package/es/hooks/use-theme-apply.mjs +2 -2
- package/es/index.mjs +90 -88
- package/es/style.css +138 -87
- package/package.json +2 -2
- package/src/bridge/docs/README.md +34 -4
- package/src/components/app-layout/docs/README-AppPage.md +68 -0
- package/src/components/data-view/docs/README-DataGridView.md +83 -1
- package/src/components/data-view/docs/README-DataListView.md +5 -2
- package/src/components/display/docs/README-BadgeMark.md +102 -41
- package/src/components/form/README.md +14 -0
- package/src/components/form/docs/README-FormItemNestForm.md +3 -0
- package/src/components/form/docs/README-FormItemNestFormList.md +3 -0
- package/src/components/form/docs/README-FormUpload.md +3 -0
- package/src/components/modal/docs/README-ModalPorter.md +26 -0
- package/src/components/page-layout/docs/README-AppPageListDetailLayout.md +1 -1
- package/src/components/view-layout/docs/README-ViewLayout.md +152 -9
- package/src/hooks/docs/README.md +37 -1
- package/types/bridge/badge.d.ts +38 -2
- package/types/components/app-layout/AppPage.vue.d.ts +16 -0
- package/types/components/app-layout/app-page-geometry.d.ts +26 -2
- package/types/components/app-layout/use-slot-misuse-warn.d.ts +19 -0
- package/types/components/data-view/DataGridView.vue.d.ts +9 -0
- package/types/components/data-view/DataGridViewCard.vue.d.ts +25 -0
- package/types/components/data-view/types.d.ts +63 -0
- package/types/components/display/BadgeMark.vue.d.ts +9 -8
- package/types/components/display/use-badge.d.ts +22 -14
- package/types/components/modal/use-slot-misuse-warn.d.ts +21 -0
- package/types/components/view-layout/ViewLayout.vue.d.ts +16 -0
- package/types/components/view-layout/ViewLayoutToolbar.vue.d.ts +52 -0
- package/types/components/view-layout/types.d.ts +56 -0
- package/types/config/slot-region.d.ts +12 -0
- package/types/hooks/use-custom-breakpoint.d.ts +1 -12
- package/types/hooks/use-is-dev.d.ts +24 -0
- package/types/injectInfo.json.d.ts +1 -1
package/es/style.css
CHANGED
|
@@ -66,31 +66,35 @@
|
|
|
66
66
|
justify-content: flex-end;
|
|
67
67
|
gap: 8px;
|
|
68
68
|
}
|
|
69
|
-
.badge-mark[data-v-
|
|
69
|
+
.badge-mark[data-v-64f0421b] .el-badge__content.is-fixed {
|
|
70
70
|
right: 0;
|
|
71
71
|
transform: translateY(-50%) translateX(calc(100% + 2px));
|
|
72
72
|
}
|
|
73
|
-
.badge-mark_middle[data-v-
|
|
73
|
+
.badge-mark_middle[data-v-64f0421b] .el-badge__content.is-fixed {
|
|
74
74
|
top: 50%;
|
|
75
75
|
}
|
|
76
|
-
.badge-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
76
|
+
.badge-mark_hidden[data-v-64f0421b] .el-badge__content {
|
|
77
|
+
width: 0;
|
|
78
|
+
height: 0;
|
|
79
|
+
min-width: 0;
|
|
80
|
+
padding: 0;
|
|
81
|
+
border-width: 0;
|
|
82
|
+
overflow: hidden;
|
|
83
|
+
pointer-events: none;
|
|
80
84
|
}
|
|
81
|
-
.app-page[data-v-
|
|
82
|
-
--dc-page-content-viewport-top: var(--
|
|
83
|
-
--dc-page-content-viewport-bottom: var(--
|
|
84
|
-
--dc-page-content-viewport-left: var(--
|
|
85
|
-
--dc-page-content-viewport-right: var(--
|
|
86
|
-
--dc-page-content-viewport-width: var(--
|
|
87
|
-
--dc-page-content-viewport-height: var(--
|
|
85
|
+
.app-page[data-v-73e3d4a9] {
|
|
86
|
+
--dc-page-content-viewport-top: var(--v62d8191f);
|
|
87
|
+
--dc-page-content-viewport-bottom: var(--v7adfb621);
|
|
88
|
+
--dc-page-content-viewport-left: var(--v0fb17d06);
|
|
89
|
+
--dc-page-content-viewport-right: var(--v0d174f66);
|
|
90
|
+
--dc-page-content-viewport-width: var(--v0d5dbb10);
|
|
91
|
+
--dc-page-content-viewport-height: var(--f6eaa5c6);
|
|
88
92
|
}
|
|
89
|
-
.app-page-shim[data-v-
|
|
93
|
+
.app-page-shim[data-v-73e3d4a9] {
|
|
90
94
|
display: flow-root;
|
|
91
|
-
--app-viewport-max-height: var(--
|
|
95
|
+
--app-viewport-max-height: var(--v4ad30b28);
|
|
92
96
|
}
|
|
93
|
-
.app-page-slot-shim[data-v-
|
|
97
|
+
.app-page-slot-shim[data-v-73e3d4a9] {
|
|
94
98
|
box-sizing: border-box;
|
|
95
99
|
width: 100%;
|
|
96
100
|
height: 100%;
|
|
@@ -131,61 +135,91 @@ to {
|
|
|
131
135
|
text-align: center;
|
|
132
136
|
font-variant-numeric: tabular-nums;
|
|
133
137
|
}
|
|
134
|
-
.view-layout-
|
|
135
|
-
flex: 0 1 auto;
|
|
136
|
-
min-width: 0;
|
|
137
|
-
overflow: hidden;
|
|
138
|
-
color: var(--el-text-color-primary);
|
|
139
|
-
font-size: 16px;
|
|
140
|
-
font-weight: 600;
|
|
141
|
-
line-height: 1.4;
|
|
142
|
-
white-space: nowrap;
|
|
143
|
-
text-overflow: ellipsis;
|
|
144
|
-
}
|
|
145
|
-
.view-layout[data-v-3c6fd3fe] {
|
|
146
|
-
display: flex;
|
|
147
|
-
flex-direction: column;
|
|
148
|
-
}
|
|
149
|
-
.view-layout-toolbar[data-v-3c6fd3fe] {
|
|
138
|
+
.view-layout-toolbar[data-v-99d466e9] {
|
|
150
139
|
display: flex;
|
|
151
140
|
justify-content: space-between;
|
|
152
141
|
align-items: center;
|
|
153
|
-
padding: 0 var(--
|
|
142
|
+
padding: 0 var(--v507b6fb2);
|
|
154
143
|
position: relative;
|
|
155
144
|
gap: 20px;
|
|
156
145
|
background: color-mix(in srgb, var(--dc-core-surface, var(--el-bg-color)) 50%, var(--dc-core-ground, var(--el-bg-color-page)));
|
|
157
146
|
border-radius: 0;
|
|
158
147
|
}
|
|
159
|
-
.view-layout-toolbar[data-v-
|
|
148
|
+
.view-layout-toolbar[data-v-99d466e9]::before {
|
|
160
149
|
content: "";
|
|
161
150
|
position: absolute;
|
|
162
151
|
top: 0;
|
|
163
|
-
bottom: 0;
|
|
164
152
|
left: 0;
|
|
165
|
-
width:
|
|
153
|
+
width: calc(var(--v507b6fb2) * 3);
|
|
154
|
+
height: 3px;
|
|
166
155
|
border-radius: 3px;
|
|
167
156
|
background: var(--dc-core-primary-color, var(--el-color-primary));
|
|
168
157
|
}
|
|
169
|
-
.view-layout-
|
|
170
|
-
|
|
158
|
+
.view-layout-toolbar_app-bar[data-v-99d466e9] {
|
|
159
|
+
box-shadow: 0 2px 8px -4px var(--dc-core-border-color, var(--el-border-color));
|
|
160
|
+
min-height: 44px;
|
|
161
|
+
}
|
|
162
|
+
.view-layout-toolbar_app-bar[data-v-99d466e9]::before {
|
|
163
|
+
content: none;
|
|
164
|
+
}
|
|
165
|
+
.view-layout-toolbar__back[data-v-99d466e9],
|
|
166
|
+
.view-layout-toolbar__more[data-v-99d466e9] {
|
|
167
|
+
display: inline-flex;
|
|
168
|
+
align-items: center;
|
|
169
|
+
justify-content: center;
|
|
170
|
+
flex: none;
|
|
171
|
+
width: 44px;
|
|
172
|
+
height: 44px;
|
|
173
|
+
font-size: 18px;
|
|
174
|
+
color: var(--el-text-color-primary);
|
|
175
|
+
cursor: pointer;
|
|
176
|
+
user-select: none;
|
|
177
|
+
}
|
|
178
|
+
.view-layout-toolbar__back[data-v-99d466e9]:hover,
|
|
179
|
+
.view-layout-toolbar__more[data-v-99d466e9]:hover {
|
|
180
|
+
color: var(--dc-core-primary-color, var(--el-color-primary));
|
|
181
|
+
}
|
|
182
|
+
.view-layout-toolbar__back[data-v-99d466e9] {
|
|
183
|
+
margin-left: -13px;
|
|
184
|
+
}
|
|
185
|
+
.view-layout-toolbar__more[data-v-99d466e9] {
|
|
186
|
+
margin-right: 0;
|
|
187
|
+
}
|
|
188
|
+
.view-layout-toolbar__left[data-v-99d466e9],
|
|
189
|
+
.view-layout-toolbar__right[data-v-99d466e9] {
|
|
171
190
|
display: flex;
|
|
172
191
|
align-items: center;
|
|
173
192
|
gap: 10px;
|
|
174
193
|
}
|
|
175
|
-
.view-layout-toolbar__left[data-v-
|
|
176
|
-
.view-layout-toolbar__right[data-v-
|
|
194
|
+
.view-layout-toolbar__left[data-v-99d466e9] > *,
|
|
195
|
+
.view-layout-toolbar__right[data-v-99d466e9] > * {
|
|
177
196
|
flex: none;
|
|
178
197
|
}
|
|
179
|
-
.view-layout-toolbar__left .view-layout-header[data-v-
|
|
198
|
+
.view-layout-toolbar__left .view-layout-header[data-v-99d466e9] {
|
|
180
199
|
flex: 1 1 auto;
|
|
181
200
|
}
|
|
182
|
-
.view-layout-toolbar__right[data-v-
|
|
201
|
+
.view-layout-toolbar__right[data-v-99d466e9] {
|
|
183
202
|
flex: none;
|
|
184
203
|
}
|
|
185
|
-
.view-layout-
|
|
204
|
+
.view-layout-header[data-v-99d466e9] {
|
|
205
|
+
flex: 0 1 auto;
|
|
206
|
+
min-width: 0;
|
|
207
|
+
overflow: hidden;
|
|
208
|
+
color: var(--el-text-color-primary);
|
|
209
|
+
font-size: 16px;
|
|
210
|
+
font-weight: 600;
|
|
211
|
+
line-height: 1.4;
|
|
212
|
+
white-space: nowrap;
|
|
213
|
+
text-overflow: ellipsis;
|
|
214
|
+
}
|
|
215
|
+
.view-layout[data-v-f386aec7] {
|
|
216
|
+
display: flex;
|
|
217
|
+
flex-direction: column;
|
|
218
|
+
}
|
|
219
|
+
.view-layout-content[data-v-f386aec7] {
|
|
186
220
|
overflow: auto;
|
|
187
221
|
box-sizing: border-box;
|
|
188
|
-
padding: var(--
|
|
222
|
+
padding: var(--v5975c734);
|
|
189
223
|
}
|
|
190
224
|
.dc-app-page-detail__title[data-v-1b784d3a] {
|
|
191
225
|
padding-bottom: 12px;
|
|
@@ -194,17 +228,20 @@ to {
|
|
|
194
228
|
line-height: 24px;
|
|
195
229
|
color: var(--dc-core-text-color, var(--el-text-color-primary));
|
|
196
230
|
}
|
|
197
|
-
.dc-app-page-list-detail-split__list[data-v-
|
|
231
|
+
.dc-app-page-list-detail-split__list[data-v-68dc7b6b] {
|
|
198
232
|
box-sizing: border-box;
|
|
233
|
+
width: 100%;
|
|
199
234
|
height: 100%;
|
|
200
235
|
overflow: hidden;
|
|
201
236
|
}
|
|
202
|
-
.form-item-tip[data-v-
|
|
237
|
+
.form-item-tip[data-v-940abdf9] {
|
|
238
|
+
width: 100%;
|
|
239
|
+
min-width: 0;
|
|
203
240
|
text-align: left;
|
|
204
241
|
line-height: 1.5;
|
|
205
242
|
font-size: 12px;
|
|
206
243
|
}
|
|
207
|
-
.form-item-label-hide[data-v-
|
|
244
|
+
.form-item-label-hide[data-v-940abdf9] .el-form-item__label-wrap {
|
|
208
245
|
display: none;
|
|
209
246
|
}
|
|
210
247
|
.drag-float[data-v-0ab49ed7] {
|
|
@@ -825,7 +862,9 @@ to {
|
|
|
825
862
|
.app-layout_noAnimation[data-v-140fec15] .app-collapse-toggle {
|
|
826
863
|
transition: none !important;
|
|
827
864
|
}
|
|
828
|
-
.form-group-title[data-v-
|
|
865
|
+
.form-group-title[data-v-ee226102] {
|
|
866
|
+
width: 100%;
|
|
867
|
+
min-width: 0;
|
|
829
868
|
display: flex;
|
|
830
869
|
align-items: center;
|
|
831
870
|
gap: 4px;
|
|
@@ -835,16 +874,16 @@ to {
|
|
|
835
874
|
color: var(--dc-core-base-color, var(--el-text-color-primary));
|
|
836
875
|
user-select: none;
|
|
837
876
|
}
|
|
838
|
-
.form-group-title_collapsible[data-v-
|
|
877
|
+
.form-group-title_collapsible[data-v-ee226102] {
|
|
839
878
|
cursor: pointer;
|
|
840
879
|
}
|
|
841
|
-
.form-group-title-arrow[data-v-
|
|
880
|
+
.form-group-title-arrow[data-v-ee226102] {
|
|
842
881
|
font-size: 12px;
|
|
843
882
|
color: var(--el-text-color-secondary);
|
|
844
883
|
transform: rotate(90deg);
|
|
845
884
|
transition: transform var(--dc-core-motion-duration, 0.2s) var(--dc-core-motion-easing, ease);
|
|
846
885
|
}
|
|
847
|
-
.form-group-title-arrow_collapsed[data-v-
|
|
886
|
+
.form-group-title-arrow_collapsed[data-v-ee226102] {
|
|
848
887
|
transform: rotate(0deg);
|
|
849
888
|
}
|
|
850
889
|
.form-divider[data-v-66a37c1d] {
|
|
@@ -934,24 +973,24 @@ to {
|
|
|
934
973
|
animation: none;
|
|
935
974
|
}
|
|
936
975
|
}
|
|
937
|
-
.infinite-list-view_surface[data-v-
|
|
976
|
+
.infinite-list-view_surface[data-v-4f0267ce] {
|
|
938
977
|
box-sizing: border-box;
|
|
939
|
-
padding: var(--
|
|
978
|
+
padding: var(--v407ba190);
|
|
940
979
|
border-radius: var(--dc-core-radius, var(--el-border-radius-base));
|
|
941
980
|
}
|
|
942
|
-
.infinite-list-view_surface-bg[data-v-
|
|
981
|
+
.infinite-list-view_surface-bg[data-v-4f0267ce] {
|
|
943
982
|
background: var(--el-bg-color);
|
|
944
983
|
}
|
|
945
|
-
.infinite-list-view[data-v-
|
|
984
|
+
.infinite-list-view[data-v-4f0267ce] {
|
|
946
985
|
width: 100%;
|
|
947
986
|
}
|
|
948
|
-
.infinite-list-view__viewport[data-v-
|
|
987
|
+
.infinite-list-view__viewport[data-v-4f0267ce] {
|
|
949
988
|
width: 100%;
|
|
950
989
|
}
|
|
951
|
-
.infinite-list-view__sentinel[data-v-
|
|
990
|
+
.infinite-list-view__sentinel[data-v-4f0267ce] {
|
|
952
991
|
height: 1px;
|
|
953
992
|
}
|
|
954
|
-
.infinite-list-view__footer[data-v-
|
|
993
|
+
.infinite-list-view__footer[data-v-4f0267ce] {
|
|
955
994
|
display: flex;
|
|
956
995
|
justify-content: center;
|
|
957
996
|
align-items: center;
|
|
@@ -959,17 +998,17 @@ to {
|
|
|
959
998
|
color: var(--dc-core-text-color-secondary, var(--el-text-color-secondary));
|
|
960
999
|
font-size: 13px;
|
|
961
1000
|
}
|
|
962
|
-
.infinite-list-view__json[data-v-
|
|
1001
|
+
.infinite-list-view__json[data-v-4f0267ce] {
|
|
963
1002
|
margin: 0;
|
|
964
1003
|
font-size: 12px;
|
|
965
1004
|
white-space: pre-wrap;
|
|
966
1005
|
word-break: break-all;
|
|
967
1006
|
color: var(--dc-core-text-color-secondary, var(--el-text-color-secondary));
|
|
968
1007
|
}
|
|
969
|
-
.infinite-list-view__tip[data-v-
|
|
1008
|
+
.infinite-list-view__tip[data-v-4f0267ce] {
|
|
970
1009
|
color: var(--dc-core-text-color-secondary, var(--el-text-color-secondary));
|
|
971
1010
|
}
|
|
972
|
-
.infinite-list-view__retry[data-v-
|
|
1011
|
+
.infinite-list-view__retry[data-v-4f0267ce] {
|
|
973
1012
|
border: none;
|
|
974
1013
|
background: transparent;
|
|
975
1014
|
color: var(--dc-core-primary-color, var(--el-color-primary));
|
|
@@ -977,10 +1016,10 @@ to {
|
|
|
977
1016
|
cursor: pointer;
|
|
978
1017
|
padding: 0;
|
|
979
1018
|
}
|
|
980
|
-
.infinite-list-view__retry[data-v-
|
|
1019
|
+
.infinite-list-view__retry[data-v-4f0267ce]:hover {
|
|
981
1020
|
opacity: 0.8;
|
|
982
1021
|
}
|
|
983
|
-
.infinite-list-view__empty[data-v-
|
|
1022
|
+
.infinite-list-view__empty[data-v-4f0267ce] {
|
|
984
1023
|
display: flex;
|
|
985
1024
|
justify-content: center;
|
|
986
1025
|
align-items: center;
|
|
@@ -988,7 +1027,7 @@ to {
|
|
|
988
1027
|
min-height: 60px;
|
|
989
1028
|
color: var(--dc-core-text-color-secondary, var(--el-text-color-secondary));
|
|
990
1029
|
}
|
|
991
|
-
.infinite-list-view__pull-indicator[data-v-
|
|
1030
|
+
.infinite-list-view__pull-indicator[data-v-4f0267ce] {
|
|
992
1031
|
display: flex;
|
|
993
1032
|
justify-content: center;
|
|
994
1033
|
align-items: flex-end;
|
|
@@ -997,56 +1036,56 @@ to {
|
|
|
997
1036
|
color: var(--dc-core-text-color-secondary, var(--el-text-color-secondary));
|
|
998
1037
|
transition: height 0.2s;
|
|
999
1038
|
}
|
|
1000
|
-
.infinite-list-view__pull-indicator > span[data-v-
|
|
1039
|
+
.infinite-list-view__pull-indicator > span[data-v-4f0267ce] {
|
|
1001
1040
|
padding-bottom: 6px;
|
|
1002
1041
|
}
|
|
1003
|
-
.data-grid-view[data-v-
|
|
1042
|
+
.data-grid-view[data-v-b4c213bc] {
|
|
1004
1043
|
width: 100%;
|
|
1005
1044
|
}
|
|
1006
|
-
.data-grid-view_surface[data-v-
|
|
1007
|
-
padding: var(--
|
|
1045
|
+
.data-grid-view_surface[data-v-b4c213bc] {
|
|
1046
|
+
padding: var(--v081d8ea3);
|
|
1008
1047
|
border-radius: var(--dc-core-radius, var(--el-border-radius-base));
|
|
1009
1048
|
}
|
|
1010
|
-
.data-grid-view_surface-bg[data-v-
|
|
1049
|
+
.data-grid-view_surface-bg[data-v-b4c213bc] {
|
|
1011
1050
|
background: var(--el-bg-color);
|
|
1012
1051
|
}
|
|
1013
|
-
.data-grid-view__grid[data-v-
|
|
1052
|
+
.data-grid-view__grid[data-v-b4c213bc] {
|
|
1014
1053
|
display: grid;
|
|
1015
1054
|
}
|
|
1016
|
-
.data-grid-view__cell.is-active[data-v-
|
|
1055
|
+
.data-grid-view__cell.is-active[data-v-b4c213bc] {
|
|
1017
1056
|
/* stylelint-disable-next-line block-no-empty */
|
|
1018
1057
|
}
|
|
1019
|
-
.data-grid-view__cell[data-v-
|
|
1058
|
+
.data-grid-view__cell[data-v-b4c213bc] {
|
|
1020
1059
|
min-width: 0;
|
|
1021
1060
|
}
|
|
1022
|
-
.data-grid-view__cell.is-card[data-v-
|
|
1061
|
+
.data-grid-view__cell.is-card[data-v-b4c213bc] {
|
|
1023
1062
|
box-sizing: border-box;
|
|
1024
1063
|
background: var(--el-bg-color);
|
|
1025
1064
|
border: 1px solid var(--dc-core-border-color, var(--el-border-color-lighter));
|
|
1026
1065
|
border-radius: var(--dc-core-radius, var(--el-border-radius-base));
|
|
1027
1066
|
}
|
|
1028
|
-
.data-grid-view__card[data-v-
|
|
1067
|
+
.data-grid-view__card[data-v-b4c213bc] {
|
|
1029
1068
|
height: 100%;
|
|
1030
1069
|
box-sizing: border-box;
|
|
1031
1070
|
overflow: hidden;
|
|
1032
1071
|
}
|
|
1033
|
-
.data-grid-view__field[data-v-
|
|
1072
|
+
.data-grid-view__field[data-v-b4c213bc] {
|
|
1034
1073
|
display: flex;
|
|
1035
1074
|
gap: 6px;
|
|
1036
1075
|
align-items: baseline;
|
|
1037
1076
|
line-height: 1.6;
|
|
1038
1077
|
font-size: 13px;
|
|
1039
1078
|
}
|
|
1040
|
-
.data-grid-view__field-label[data-v-
|
|
1079
|
+
.data-grid-view__field-label[data-v-b4c213bc] {
|
|
1041
1080
|
flex-shrink: 0;
|
|
1042
1081
|
color: var(--dc-core-text-color-secondary, var(--el-text-color-secondary));
|
|
1043
1082
|
}
|
|
1044
|
-
.data-grid-view__field-value[data-v-
|
|
1083
|
+
.data-grid-view__field-value[data-v-b4c213bc] {
|
|
1045
1084
|
overflow: hidden;
|
|
1046
1085
|
text-overflow: ellipsis;
|
|
1047
1086
|
white-space: nowrap;
|
|
1048
1087
|
}
|
|
1049
|
-
.data-grid-view__empty-error[data-v-
|
|
1088
|
+
.data-grid-view__empty-error[data-v-b4c213bc] {
|
|
1050
1089
|
display: flex;
|
|
1051
1090
|
justify-content: center;
|
|
1052
1091
|
align-items: center;
|
|
@@ -1075,16 +1114,18 @@ to {
|
|
|
1075
1114
|
font-size: 13px;
|
|
1076
1115
|
color: var(--el-text-color-placeholder);
|
|
1077
1116
|
}
|
|
1078
|
-
.form-item-nest-form[data-v-
|
|
1117
|
+
.form-item-nest-form[data-v-358d6905] {
|
|
1079
1118
|
--dc-nest-indent: 16px;
|
|
1080
1119
|
}
|
|
1081
|
-
.form-item-nest-form[data-v-
|
|
1120
|
+
.form-item-nest-form[data-v-358d6905] {
|
|
1082
1121
|
position: relative;
|
|
1083
1122
|
background: var(--el-bg-color-page);
|
|
1084
1123
|
border-radius: 8px;
|
|
1124
|
+
width: 100%;
|
|
1125
|
+
min-width: 0;
|
|
1085
1126
|
padding: 0 0 0 var(--dc-nest-indent);
|
|
1086
1127
|
}
|
|
1087
|
-
.form-item-nest-form[data-v-
|
|
1128
|
+
.form-item-nest-form[data-v-358d6905]::before {
|
|
1088
1129
|
content: "";
|
|
1089
1130
|
position: absolute;
|
|
1090
1131
|
top: 0;
|
|
@@ -1094,25 +1135,27 @@ to {
|
|
|
1094
1135
|
background: var(--el-border-color-darker);
|
|
1095
1136
|
border-radius: 3px;
|
|
1096
1137
|
}
|
|
1097
|
-
html.dark .form-item-nest-form[data-v-
|
|
1138
|
+
html.dark .form-item-nest-form[data-v-358d6905]::before {
|
|
1098
1139
|
background: var(--dc-core-border-color, var(--el-border-color));
|
|
1099
1140
|
}
|
|
1100
|
-
.form-item-nest-form-list[data-v-
|
|
1141
|
+
.form-item-nest-form-list[data-v-b6b79293] {
|
|
1101
1142
|
padding: 12px;
|
|
1102
1143
|
background: var(--el-bg-color-page);
|
|
1103
1144
|
border-radius: 8px;
|
|
1145
|
+
width: 100%;
|
|
1146
|
+
min-width: 0;
|
|
1104
1147
|
}
|
|
1105
|
-
.form-item-nest-form-list-row[data-v-
|
|
1148
|
+
.form-item-nest-form-list-row[data-v-b6b79293] {
|
|
1106
1149
|
position: relative;
|
|
1107
1150
|
margin-bottom: 8px;
|
|
1108
1151
|
}
|
|
1109
|
-
.form-item-nest-form-list-row-body[data-v-
|
|
1152
|
+
.form-item-nest-form-list-row-body[data-v-b6b79293] {
|
|
1110
1153
|
min-width: 0;
|
|
1111
1154
|
padding: 32px 12px 8px;
|
|
1112
1155
|
background: var(--el-bg-color);
|
|
1113
1156
|
border-radius: 6px;
|
|
1114
1157
|
}
|
|
1115
|
-
.form-item-nest-form-list-row[data-v-
|
|
1158
|
+
.form-item-nest-form-list-row[data-v-b6b79293] .form-item-nest-form-list-row-remove {
|
|
1116
1159
|
position: absolute;
|
|
1117
1160
|
top: 4px;
|
|
1118
1161
|
right: 8px;
|
|
@@ -1190,6 +1233,10 @@ html.dark .form-item-nest-form[data-v-46959572]::before {
|
|
|
1190
1233
|
display: inline-flex;
|
|
1191
1234
|
vertical-align: middle;
|
|
1192
1235
|
}
|
|
1236
|
+
.dc-form-tree[data-v-e64f6895] {
|
|
1237
|
+
width: 100%;
|
|
1238
|
+
min-width: 0;
|
|
1239
|
+
}
|
|
1193
1240
|
.dc-form-upload-trigger[data-v-9fb0fb2a] {
|
|
1194
1241
|
display: flex;
|
|
1195
1242
|
align-items: center;
|
|
@@ -1209,7 +1256,11 @@ html.dark .form-item-nest-form[data-v-46959572]::before {
|
|
|
1209
1256
|
padding: 0;
|
|
1210
1257
|
color: var(--el-text-color-secondary);
|
|
1211
1258
|
}
|
|
1212
|
-
.dc-form-
|
|
1259
|
+
.dc-form-upload[data-v-1b155db4] {
|
|
1260
|
+
width: 100%;
|
|
1261
|
+
min-width: 0;
|
|
1262
|
+
}
|
|
1263
|
+
.dc-form-upload__placeholder[data-v-1b155db4] {
|
|
1213
1264
|
margin-top: 4px;
|
|
1214
1265
|
font-size: 12px;
|
|
1215
1266
|
line-height: 1.5;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@done-coding/admin-core",
|
|
3
|
-
"version": "0.30.0",
|
|
3
|
+
"version": "0.30.1-alpha.0",
|
|
4
4
|
"description": "内部前端库",
|
|
5
5
|
"private": false,
|
|
6
6
|
"main": "es/index.mjs",
|
|
@@ -83,5 +83,5 @@
|
|
|
83
83
|
"dependencies": {
|
|
84
84
|
"@tanstack/vue-virtual": "^3.13.35"
|
|
85
85
|
},
|
|
86
|
-
"gitHead": "
|
|
86
|
+
"gitHead": "ce4ef5042019885e7557f09a8e03f09836c66ec8"
|
|
87
87
|
}
|
|
@@ -88,18 +88,29 @@ type BadgeEntry = {
|
|
|
88
88
|
description?: string;
|
|
89
89
|
/** 本条标的版本号(core 不消费,纯透传);消费方据它做「版本化的已读记录」 */
|
|
90
90
|
version?: string | number;
|
|
91
|
+
/**
|
|
92
|
+
* 角标显不显示;缺省 = 跟随全局默认(`defaultVisible`,本身缺省 `true`)。
|
|
93
|
+
* 🔴 `false` **只藏角标、留 DOM 挂点**(引导插件照常定位得到)——
|
|
94
|
+
* 与「压根没配这条 key」是两回事。遮挡档(`locked`)**拒绝隐藏**,dev 下会 warn。
|
|
95
|
+
*/
|
|
96
|
+
visible?: boolean;
|
|
91
97
|
} & (
|
|
92
98
|
| { kind: "count"; value: number; max?: number } // 数字角标
|
|
93
99
|
| { kind: "new" } // 新上线
|
|
94
|
-
| { kind: "updated" } //
|
|
95
|
-
| { kind: "beta" } //
|
|
100
|
+
| { kind: "updated" } // 已更新
|
|
101
|
+
| { kind: "beta" } // 内测中:能用,不稳定
|
|
96
102
|
| { kind: "wip" } // 开发中:仅提示,**不拦点击**
|
|
103
|
+
| { kind: "planned" } // 规划中:还没开工
|
|
104
|
+
| { kind: "deprecated" } // 待下线
|
|
105
|
+
| { kind: "locked" } // 未开通:**唯一拦点击、也唯一拒绝隐藏的档**
|
|
97
106
|
| { kind: "custom"; text: string; type?: BadgeProps["type"] }
|
|
98
|
-
| { kind: "anchor" } //
|
|
107
|
+
| { kind: "anchor" } // 伪标:恒隐藏角标,只留 DOM 挂点供引导定位
|
|
99
108
|
);
|
|
100
109
|
```
|
|
101
110
|
|
|
102
|
-
|
|
111
|
+
内置七档的文案与语义色由 core 统一定,保证跨 app 一致;`custom` 只在内置档不够用时用。
|
|
112
|
+
**七档一律走文字**(甲方 2026-09-19 撤回 v0.30 的图标态),详见
|
|
113
|
+
[BadgeMark 文档](../../components/display/docs/README-BadgeMark.md)。
|
|
103
114
|
|
|
104
115
|
**`version` 的用处**:消费方(如 `forge-plugin-guide`)把已读记录的 key 取成 `key@version`
|
|
105
116
|
⇒ **功能有实质更新时改一下版本号,引导 / 提示就对所有人重新出现一次**;不改则关过的人不再被打扰。
|
|
@@ -116,6 +127,25 @@ type BadgeEntry = {
|
|
|
116
127
|
| `setAll(map)` | **整体替换** —— 轮询主路径,服务端本轮撤下的标随之消失 |
|
|
117
128
|
| `set(key, entry)` | 单点写入 / 覆盖 |
|
|
118
129
|
| `remove(key)` | 单点移除 |
|
|
130
|
+
| `defaultVisible` | **全局默认显不显示**(响应式只读,缺省 `true`);逐条 `entry.visible` 恒优先 |
|
|
131
|
+
| `setDefaultVisible(v)` | 改全局默认;也可在 `createCoreBridge({ badge: { defaultVisible } })` 初始化时给 |
|
|
132
|
+
|
|
133
|
+
### 展示开关(`visible` / `defaultVisible`)
|
|
134
|
+
|
|
135
|
+
徽标当初是拿来做新手引导的;有了 `forge-plugin-guide` 之后徽标不再必须显示 ⇒ 两层开关:
|
|
136
|
+
|
|
137
|
+
| 层 | 写法 | 缺省 |
|
|
138
|
+
| --- | --- | --- |
|
|
139
|
+
| 逐条 | `bridge.badge.set(key, { kind: "new", visible: false })` | `undefined` = 跟随全局 |
|
|
140
|
+
| 全局 | `createCoreBridge({ badge: { defaultVisible: false } })` / `bridge.badge.setDefaultVisible(false)` | **`true`** |
|
|
141
|
+
|
|
142
|
+
🔴 **「配置了但不展示」≠「没配置」**:前者照常渲染 `ElBadge` + `data-dc-badge-key` 挂点,
|
|
143
|
+
引导插件**仍能定位**;后者渲染裸插槽、连挂点都没有。
|
|
144
|
+
⇒ 隐藏走 `visible`,[MUST NOT] 用 `v-if` 把整条标掐掉。
|
|
145
|
+
|
|
146
|
+
🔴 **遮挡档(`BADGE_MASK_KINDS`,现仅 `locked`)拒绝隐藏**:逐条 `visible:false` 与全局默认
|
|
147
|
+
都不作用到它,dev 下 `console.warn` 一句。依据:遮挡是**功能**不是资讯,藏了会变成
|
|
148
|
+
「点不动又没说明的按钮」或「未开通却能点」。
|
|
119
149
|
|
|
120
150
|
⚠️ [MUST NOT] 用 `bridge.update()` 维护徽标:它是 `Object.assign` **浅合并**,轮询场景下服务端已撤下的标会永远留在表里。徽标独立走 `bridge.badge`。
|
|
121
151
|
|
|
@@ -60,6 +60,7 @@
|
|
|
60
60
|
| `nextViewportMaxHeight` | `string` | `var(--app-viewport-max-height)` | shim 内视口高变量覆写 |
|
|
61
61
|
| `background` | `string` | 无 | 根盒背景(通栏,不受限宽影响) |
|
|
62
62
|
| `contentCentered` | `boolean` | `false` | 默认 slot 内容限宽居中(超宽屏适配);同步收窄对后代公布的内容几何(见下) |
|
|
63
|
+
| `leftWidth` / `rightWidth` | `string?` | — | `#left` / `#right` 槽的**显式宽度**(CSS 长度串)。缺省不写 ⇒ 槽宽跟内容走(shrink-to-fit,老行为)。🔴 **槽内内容要用百分比宽时 [MUST] 改用本 prop**,见下 |
|
|
63
64
|
| `contentMaxWidth` | `number` | `1200` | 限宽值(px),仅 `contentCentered` 开启时生效 |
|
|
64
65
|
| `gap` | `number` | `8` | 间距基数 px(缺省读 bridge `APP_LAYOUT_GAP_CONFIG.size`)。**槽 ↔ 内容**与**槽 ↔ 槽**都取由它派生的「外圈档」(`基数 × 2`,随密度缩放),两处同式同源 |
|
|
65
66
|
| `topBg` / `bottomBg` / `leftBg` / `rightBg` | `string` | `var(--el-bg-color)`(面色) | 各槽 shim 背景;传 `"transparent"` 可关。**shim 自带圆角**(`--dc-core-radius`,随主题;无 bg 的槽透明、圆角无视觉影响) |
|
|
@@ -161,13 +162,80 @@ paddingRight = 右槽让位量 + gutter
|
|
|
161
162
|
|
|
162
163
|
无
|
|
163
164
|
|
|
165
|
+
### 方位槽空壳检测(dev-only,每槽只报一次)
|
|
166
|
+
|
|
167
|
+
四向槽是 **fixed 悬浮区**:槽一旦渲染,即使里面的东西「不占版面」,
|
|
168
|
+
**槽本身**照样铺 padding + 背景、照样从默认内容里扣掉让位高度(实测一条 16px 空白带)。
|
|
169
|
+
|
|
170
|
+
⇒ dev 下(`import.meta.env.DEV`)挂载时检查每个方位槽渲染出的内容:
|
|
171
|
+
若**全是不占版面的节点**(注释 / teleport 锚点 / 空文本)⇒ 一条 `console.error`,
|
|
172
|
+
**同一个槽只报一次**(不刷屏):
|
|
173
|
+
|
|
174
|
+
```
|
|
175
|
+
[AppPage] #top 槽里没有占版面的内容,但槽本身照样渲染(fixed + padding + 背景)
|
|
176
|
+
并从默认内容里扣掉让位高度 —— 白占一条。
|
|
177
|
+
· 若放的是 ModalPorter:移到**默认槽**(page 架子就住在默认槽里,与 AppPage 并列同样够不到,evoke() 一样恒为 null);
|
|
178
|
+
· 若放的是自己 teleport 走、不需要 page 架子的弹窗:移到默认槽或与 AppPage 并列均可;
|
|
179
|
+
· 若是 v-if 条件渲染的内容:此刻恰好为空,忽略本条。
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
| 情形 | 是否报 |
|
|
183
|
+
| --- | --- |
|
|
184
|
+
| 槽里只有 `ModalPorter` / 已 teleport 的弹窗 | ✅ 报(正是要防的) |
|
|
185
|
+
| 槽里内容被 `v-if` 暂时关掉 | ⚠️ 会报 —— **合法动态状态**,靠 dev-only + 去重 + 文案给出口兜住,忽略即可 |
|
|
186
|
+
| 槽里有正常内容 | ❌ 不报 |
|
|
187
|
+
| 生产构建 | ❌ 不报(dev-only) |
|
|
188
|
+
|
|
189
|
+
🔴 **只「报出来」,[MUST NOT] 顺手改成「空槽就不渲染」** —— 那是行为变更、会动已有页面布局,
|
|
190
|
+
与检测是两件事;真要做得单独一版、走 migrations 说清楚。
|
|
191
|
+
|
|
192
|
+
## 侧槽宽度:内容要用百分比时 [MUST] 用 `leftWidth` / `rightWidth`
|
|
193
|
+
|
|
194
|
+
### 🔴 为什么槽内的百分比宽会留下死白
|
|
195
|
+
|
|
196
|
+
`#left` / `#right` 是 **`position: fixed` 且只给了 `left` / `right`** ——
|
|
197
|
+
没有 `width`、没有对边 ⇒ 宽度**跟内容走**(shrink-to-fit)。
|
|
198
|
+
|
|
199
|
+
槽内内容若写百分比宽,浏览器两趟算下来自相矛盾:
|
|
200
|
+
|
|
201
|
+
1. 算**内在尺寸**时百分比按 `auto` 处理 ⇒ 槽被撑到内容的 **max-content**;
|
|
202
|
+
2. 之后百分比才解析,基数是**刚被内容撑出来的那个宽** ⇒ 解出来往往远小于槽;
|
|
203
|
+
3. ⇒ **槽里剩一大片死白**,且**随内容变丰富而变大**。
|
|
204
|
+
|
|
205
|
+
实测(1280 视口,列表详情 split 档,`width: clamp(280px, 28%, 420px)` 写在槽内内容上):
|
|
206
|
+
槽 **517** / 内容 **280** ⇒ 死白 **229px**。
|
|
207
|
+
|
|
208
|
+
### 处置:把宽度放到**槽这一层**
|
|
209
|
+
|
|
210
|
+
```vue
|
|
211
|
+
<AppPage :leftWidth="listWidth">
|
|
212
|
+
<template #left>
|
|
213
|
+
<div style="width: 100%">…</div> <!-- 内容只吃满槽 -->
|
|
214
|
+
</template>
|
|
215
|
+
</AppPage>
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
槽是 `fixed` ⇒ 包含块是**视口**(初始包含块)⇒ 百分比有**稳定且不循环**的基数。
|
|
219
|
+
实测 `28%` 在 1280 下精确得 **358px**,死白降到 **8px**(= shim padding),
|
|
220
|
+
且**加长内容后不再恶化**。
|
|
221
|
+
|
|
222
|
+
🔴 **[MUST NOT] 改用 `--dc-page-content-viewport-width` 当百分比基数**:
|
|
223
|
+
那个变量是**内容区**宽(已扣掉左右槽),语义本就不对,而且**它本身就在循环链上**
|
|
224
|
+
(内容区宽 ← 侧槽宽 ← 槽内内容宽)。
|
|
225
|
+
|
|
226
|
+
⚠️ 写在这里的宽度照常被 `WatchSize` 量到、回写进内容区的让位 padding(实测跟得上),
|
|
227
|
+
几何链不受影响。`#top` / `#bottom` 是**通栏**(`left` + `right` 双边定位),
|
|
228
|
+
不存在这个问题、也没有对应 prop。
|
|
229
|
+
|
|
164
230
|
## 反模式 / 注意
|
|
165
231
|
|
|
166
232
|
- **悬浮槽尺寸变化来自 CSS 过渡/异步撑开 → 必须开对应 `observeResize`**(onUpdated 只读渲染后瞬时值,过渡动画读起点漏最终)
|
|
167
233
|
- 四向槽 fixed 定位——内容滚动时悬浮不动,属设计语义,勿误当普通 inline 槽
|
|
168
234
|
- **运行时动态增减插槽(在槽模板上挂 `v-if`)不生效**——`hasTop/hasBottom/hasLeft/hasRight` 取 `!!slots.x`,`slots` 非响应式对象、computed 无依赖恒吃首次结果。插槽集 [MUST] 当静态结构写死;确需切换整套槽形态由调用方给 AppPage 换 `:key` 重挂载
|
|
235
|
+
- **[MUST NOT] 把 `ModalPorter` / 弹窗放进方位槽**:方位槽是页面内置 `ModalShelf` 的**兄弟**不是后代,`provide` 够不到(`evoke()` 恒 null),且槽本身白占版面。两条检测都会在控制台点名(见上)
|
|
169
236
|
- 槽尺寸/inset 几何由 `app-page-geometry` 纯函数计算导出,[MUST NOT] 手写自造
|
|
170
237
|
- `listLayoutRecommended` 开 `customView` 后 [MUST] 配套 ListLayout `#custom-view-item`,否则窄栏卡片渲染为空
|
|
238
|
+
- **在 `#left`/`#right` 槽内写百分比宽**:[MUST NOT]——槽是 shrink-to-fit,百分比没有稳定基数,会留下大片死白且随内容变大;宽度放 `leftWidth` / `rightWidth`
|
|
171
239
|
- **列表 / 表格页开 `contentCentered`** —— 表格列本就挤,限宽后更挤;限宽只服务表单 / 详情 / 阅读型页
|
|
172
240
|
- `contentMaxWidth` 传 CSS 字符串(`"80rem"`)—— 只收 `number`(px),字符串会让样式与公布几何脱钩
|
|
173
241
|
- [MUST NOT] 在业务侧改写 `.app-page-shim` padding 自造限宽 —— 会与槽让位量打架且不同步 `APP_PAGE_CONTENT_INSET`;限宽一律走 `contentCentered`。子级确需破框全宽(full-bleed)时用负 margin 主动逃逸,属逃生舱
|