@done-coding/admin-core 0.26.1-alpha.0 → 0.26.2-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 +5 -0
- package/es/bridge/index.mjs +2 -0
- package/es/bridge/theme/index.mjs +6 -1
- package/es/components/app-layout/AppHeader.vue.mjs +1 -1
- package/es/components/app-layout/AppHeader.vue2.mjs +2 -1
- package/es/components/display/ActionBtn.vue.mjs +6 -2
- package/es/components/display/BadgeMark.vue.mjs +1 -1
- package/es/components/display/BadgeMark.vue2.mjs +39 -6
- package/es/components/display/TabsTile.vue.mjs +1 -1
- package/es/components/display/TabsTile.vue2.mjs +1 -0
- package/es/components/display/use-badge-mask.mjs +83 -0
- package/es/components/display/use-badge.mjs +32 -5
- package/es/components/icon/IconHammer.vue.mjs +26 -0
- package/es/components/icon/IconHammer.vue2.mjs +4 -0
- package/es/components/menu/MenuItemSub.vue.mjs +4 -2
- package/es/components/menu/MenuTree.vue.mjs +4 -2
- package/es/index.mjs +120 -116
- package/es/style.css +25 -20
- package/package.json +2 -2
- package/src/bridge/docs/README.md +22 -0
- package/src/components/icon/README.md +38 -0
- package/types/bridge/badge.d.ts +29 -1
- package/types/bridge/index.d.ts +1 -0
- package/types/bridge/theme/types.d.ts +11 -0
- package/types/components/display/BadgeMark.vue.d.ts +153 -2
- package/types/components/display/TabsTile.vue.d.ts +2 -2
- package/types/components/display/use-badge-mask.d.ts +8 -0
- package/types/components/display/use-badge.d.ts +13 -1
- package/types/components/icon/IconHammer.vue.d.ts +2 -0
- package/types/components/icon/index.d.ts +7 -0
- package/types/index.d.ts +1 -0
- package/types/injectInfo.json.d.ts +1 -1
package/es/index.mjs
CHANGED
|
@@ -14,74 +14,76 @@ import { default as default15 } from "./components/form/FormSubmitBtn.vue.mjs";
|
|
|
14
14
|
import { default as default16 } from "./components/form/FormTree.vue.mjs";
|
|
15
15
|
import { default as default17 } from "./components/form/FormVerifyCode.vue.mjs";
|
|
16
16
|
import { default as default18 } from "./components/display/HeightProvider.vue.mjs";
|
|
17
|
-
import { default as default19 } from "./components/
|
|
18
|
-
import { default as default20 } from "./components/
|
|
19
|
-
import { default as default21 } from "./components/menu/
|
|
20
|
-
import { default as default22 } from "./components/
|
|
21
|
-
import { default as default23 } from "./components/modal/
|
|
22
|
-
import { default as default24 } from "./components/modal/
|
|
23
|
-
import { default as default25 } from "./components/
|
|
24
|
-
import { default as default26 } from "./components/
|
|
25
|
-
import { default as default27 } from "./components/
|
|
26
|
-
import { default as default28 } from "./components/
|
|
27
|
-
import { default as default29 } from "./components/
|
|
28
|
-
import { default as default30 } from "./components/
|
|
29
|
-
import { default as default31 } from "./components/
|
|
30
|
-
import { default as default32 } from "./components/
|
|
17
|
+
import { default as default19 } from "./components/icon/IconHammer.vue.mjs";
|
|
18
|
+
import { default as default20 } from "./components/modal/ImagePreviewTrigger.vue.mjs";
|
|
19
|
+
import { default as default21 } from "./components/menu/MenuItemSub.vue.mjs";
|
|
20
|
+
import { default as default22 } from "./components/menu/MenuTree.vue.mjs";
|
|
21
|
+
import { default as default23 } from "./components/modal/ModalImagePreview.vue.mjs";
|
|
22
|
+
import { default as default24 } from "./components/modal/ModalPorter.vue.mjs";
|
|
23
|
+
import { default as default25 } from "./components/modal/ModalShelf.vue.mjs";
|
|
24
|
+
import { default as default26 } from "./components/panel/PanelItemNestPanel.vue.mjs";
|
|
25
|
+
import { default as default27 } from "./components/misc/SelectModule.vue.mjs";
|
|
26
|
+
import { default as default28 } from "./components/display/ShadowClone.vue.mjs";
|
|
27
|
+
import { default as default29 } from "./components/slot-layout/SlotLayoutTemplate.vue.mjs";
|
|
28
|
+
import { default as default30 } from "./components/table/TableEmpty.vue.mjs";
|
|
29
|
+
import { default as default31 } from "./components/display/TabsMain.vue.mjs";
|
|
30
|
+
import { default as default32 } from "./components/misc/TriggerAutoImport.vue.mjs";
|
|
31
|
+
import { default as default33 } from "./components/display/WatchSize.vue.mjs";
|
|
31
32
|
import { APP_API_LIST_MODEL_KEY_CONFIG } from "./config/list-model.mjs";
|
|
32
33
|
import { APP_GLOBAL_IMAGE_PREVIEW_KEY, APP_GLOBAL_VIDEO_PREVIEW_KEY, GLOBAL_MODAL_REMOTE_KEY } from "./components/modal/modal-global-keys.mjs";
|
|
33
34
|
import { APP_LAYOUT_APP_STORE_KEY, APP_LAYOUT_BRIDGE_KEY, APP_LAYOUT_USER_STORE_KEY, APP_PAGE_CONTENT_INSET, APP_PAGE_LIST_DETAIL_CONTEXT, BODY_CONTENT_VIEWPORT_HEIGHT, BODY_CONTENT_VIEWPORT_INSET, BODY_CONTENT_VIEWPORT_RECT, CORE_BRIDGE_KEY, FORM_NEST_REGISTRY_KEY, NEST_LAYOUT_SCALE_KEY, SCOPE_VIEWPORT_MAX_HEIGHT, TABS_MAIN_VISUAL_LEVEL, getModalShelfInjectionKey } from "./inject/key.mjs";
|
|
34
35
|
import { APP_PAGE_SLOT_Z_INDEX, computeAppPageContentInset, computeAppPageReducedViewportHeight, computeAppPageReducedViewportWidth, computeAppPageSlotShimStyles, computeAppPageSlotStyles } from "./components/app-layout/app-page-geometry.mjs";
|
|
35
|
-
import { default as
|
|
36
|
-
import { default as
|
|
37
|
-
import { default as
|
|
38
|
-
import { default as
|
|
39
|
-
import { default as
|
|
40
|
-
import { default as
|
|
41
|
-
import { default as
|
|
42
|
-
import { default as
|
|
43
|
-
import { default as
|
|
44
|
-
import { default as
|
|
45
|
-
import { default as
|
|
46
|
-
import { default as
|
|
47
|
-
import { default as
|
|
48
|
-
import {
|
|
36
|
+
import { default as default34 } from "./components/display/ActionConfirm.vue.mjs";
|
|
37
|
+
import { default as default35 } from "./components/app-layout/AppAside.vue.mjs";
|
|
38
|
+
import { default as default36 } from "./components/app-layout/AppBody.vue.mjs";
|
|
39
|
+
import { default as default37 } from "./components/app-layout/AppBreadcrumb.vue.mjs";
|
|
40
|
+
import { default as default38 } from "./components/app-layout/AppFooter.vue.mjs";
|
|
41
|
+
import { default as default39 } from "./components/app-layout/AppHeader.vue.mjs";
|
|
42
|
+
import { default as default40 } from "./components/app-layout/AppLayout.vue.mjs";
|
|
43
|
+
import { default as default41 } from "./components/app-layout/AppPage.vue.mjs";
|
|
44
|
+
import { default as default42 } from "./components/page-layout/AppPageDetail.vue.mjs";
|
|
45
|
+
import { default as default43 } from "./components/app-layout/AppSidebar.vue.mjs";
|
|
46
|
+
import { default as default44 } from "./components/app-layout/AppTheme.vue.mjs";
|
|
47
|
+
import { default as default45 } from "./components/misc/AutoRefresh.vue.mjs";
|
|
48
|
+
import { default as default46 } from "./components/misc/AutoRefreshGroup.vue.mjs";
|
|
49
|
+
import { BADGE_MASK_KINDS } from "./bridge/badge.mjs";
|
|
50
|
+
import { default as default47 } from "./components/display/BadgeMark.vue.mjs";
|
|
49
51
|
import { CORE_VIEWPORT_DECOR_ZINDEX_ABOVE, CORE_VIEWPORT_DECOR_ZINDEX_BELOW } from "./components/app-layout/viewport.mjs";
|
|
50
|
-
import { default as
|
|
52
|
+
import { default as default48, default as default49 } from "./components/modal/ModalConfirm.vue.mjs";
|
|
51
53
|
import { DC_SLOT_ATTR, SlotRegion, parseSlotRegion } from "./config/slot-region.mjs";
|
|
52
|
-
import { default as
|
|
54
|
+
import { default as default50 } from "./components/data-view/DataGridView.vue.mjs";
|
|
53
55
|
import { EXPORT_MAX_LIMIT, OPERATE_COLUMN_PROP, exportCSV, pickExportColumns } from "./utils/export.mjs";
|
|
54
56
|
import { FORM_CONFIG_SELECT_ALL_VALUE, getConfirmPasswordRule, passwordRule, setFormComponentType } from "./helpers/form.mjs";
|
|
55
57
|
import { FORM_ITEM_CHANGE_LOADING, NEST_LAYOUT_TIERS, ceilToTier, generateFormData, getBlurSubmit, getChangeSubmit, getDatePickerShortcuts, getEnterSubmit, getPlaceholder, getVModelSugar, parseFormData, resolveFormLayout, resolveLayoutSpan, setInputComponent, setSelectComponent, stringifyFormData, swiftFormItemConfig } from "./components/form/utils.mjs";
|
|
56
|
-
import { default as
|
|
57
|
-
import { default as
|
|
58
|
-
import { default as
|
|
59
|
-
import { default as
|
|
60
|
-
import { default as
|
|
61
|
-
import { default as
|
|
62
|
-
import { default as
|
|
63
|
-
import { default as
|
|
64
|
-
import { default as
|
|
65
|
-
import { default as
|
|
66
|
-
import { default as
|
|
67
|
-
import { default as
|
|
68
|
-
import { default as
|
|
69
|
-
import { default as
|
|
70
|
-
import { default as
|
|
71
|
-
import { default as
|
|
72
|
-
import { default as
|
|
73
|
-
import { default as
|
|
74
|
-
import { default as
|
|
75
|
-
import { default as
|
|
76
|
-
import { default as
|
|
58
|
+
import { default as default51 } from "./components/form/FormActiveFilter.vue.mjs";
|
|
59
|
+
import { default as default52 } from "./components/form/FormItemNestForm.vue.mjs";
|
|
60
|
+
import { default as default53 } from "./components/form/FormItemNestFormList.vue.mjs";
|
|
61
|
+
import { default as default54 } from "./components/form/FormMain.vue.mjs";
|
|
62
|
+
import { default as default55 } from "./components/form/FormSearch.vue.mjs";
|
|
63
|
+
import { default as default56 } from "./components/form/FormShadowCloneDispatch.vue.mjs";
|
|
64
|
+
import { default as default57 } from "./components/form/FormSortSwitch.vue.mjs";
|
|
65
|
+
import { default as default58 } from "./components/form/FormSortSwitchGroup.vue.mjs";
|
|
66
|
+
import { default as default59 } from "./components/form/FormSubmitPanel.vue.mjs";
|
|
67
|
+
import { default as default60 } from "./components/form/FormUpload.vue.mjs";
|
|
68
|
+
import { default as default61 } from "./components/form/FormUploadAudio.vue.mjs";
|
|
69
|
+
import { default as default62 } from "./components/form/FormUploadImage.vue.mjs";
|
|
70
|
+
import { default as default63 } from "./components/form/FormUploadVideo.vue.mjs";
|
|
71
|
+
import { default as default64 } from "./components/form/FormVerifyImage.vue.mjs";
|
|
72
|
+
import { default as default65 } from "./components/data-view/InfiniteListView.vue.mjs";
|
|
73
|
+
import { default as default66, default as default67 } from "./components/list-layout/ListLayout.vue.mjs";
|
|
74
|
+
import { default as default68 } from "./components/modal/ModalVideoPreview.vue.mjs";
|
|
75
|
+
import { default as default69 } from "./components/panel/PanelEditSwitch.vue.mjs";
|
|
76
|
+
import { default as default70 } from "./components/panel/PanelItem.vue.mjs";
|
|
77
|
+
import { default as default71 } from "./components/panel/PanelItemNestForm.vue.mjs";
|
|
78
|
+
import { default as default72 } from "./components/panel/PanelMain.vue.mjs";
|
|
77
79
|
import { ROUTE_MODULE_LEVEL, TabsMainReplaceQueryKey } from "./config/route.mjs";
|
|
78
|
-
import { default as
|
|
80
|
+
import { default as default73 } from "./components/slot-layout/SlotLayoutFlowAside.vue.mjs";
|
|
79
81
|
import { TABLE_COLUMN_KEY_OPERATE, TABLE_COLUMN_KEY_SELECTION } from "./components/table/constants.mjs";
|
|
80
|
-
import { default as
|
|
81
|
-
import { default as
|
|
82
|
-
import { default as
|
|
83
|
-
import { default as
|
|
84
|
-
import { default as
|
|
82
|
+
import { default as default74 } from "./components/table/TableMain.vue.mjs";
|
|
83
|
+
import { default as default75 } from "./components/table/TableSkeleton.vue.mjs";
|
|
84
|
+
import { default as default76 } from "./components/table/TableToolbar.vue.mjs";
|
|
85
|
+
import { default as default77 } from "./components/modal/VideoPreviewTrigger.vue.mjs";
|
|
86
|
+
import { default as default78 } from "./components/view-layout/ViewLayout.vue.mjs";
|
|
85
87
|
import { buildRhythmCss, useCoreThemeApply } from "./hooks/use-theme-apply.mjs";
|
|
86
88
|
import { checkLogin } from "./router/guard/login.mjs";
|
|
87
89
|
import { checkPermission } from "./router/guard/permission.mjs";
|
|
@@ -128,102 +130,104 @@ export {
|
|
|
128
130
|
APP_PAGE_SLOT_Z_INDEX,
|
|
129
131
|
default2 as ActionBtn,
|
|
130
132
|
default3 as ActionBtnGroup,
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
133
|
+
default34 as ActionConfirm,
|
|
134
|
+
default35 as AppAside,
|
|
135
|
+
default36 as AppBody,
|
|
136
|
+
default37 as AppBreadcrumb,
|
|
137
|
+
default38 as AppFooter,
|
|
138
|
+
default39 as AppHeader,
|
|
139
|
+
default40 as AppLayout,
|
|
140
|
+
default41 as AppPage,
|
|
141
|
+
default42 as AppPageDetail,
|
|
140
142
|
default4 as AppPageListDetailLayout,
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
143
|
+
default43 as AppSidebar,
|
|
144
|
+
default44 as AppTheme,
|
|
145
|
+
default45 as AutoRefresh,
|
|
146
|
+
default46 as AutoRefreshGroup,
|
|
147
|
+
BADGE_MASK_KINDS,
|
|
145
148
|
BODY_CONTENT_VIEWPORT_HEIGHT,
|
|
146
149
|
BODY_CONTENT_VIEWPORT_INSET,
|
|
147
150
|
BODY_CONTENT_VIEWPORT_RECT,
|
|
148
|
-
|
|
151
|
+
default47 as BadgeMark,
|
|
149
152
|
default5 as BooleanTag,
|
|
150
153
|
CORE_BRIDGE_KEY,
|
|
151
154
|
CORE_VIEWPORT_DECOR_ZINDEX_ABOVE,
|
|
152
155
|
CORE_VIEWPORT_DECOR_ZINDEX_BELOW,
|
|
153
|
-
|
|
156
|
+
default48 as ConfirmModal,
|
|
154
157
|
DC_SLOT_ATTR,
|
|
155
|
-
|
|
158
|
+
default50 as DataGridView,
|
|
156
159
|
default6 as DetailModal,
|
|
157
160
|
EXPORT_MAX_LIMIT,
|
|
158
161
|
FORM_CONFIG_SELECT_ALL_VALUE,
|
|
159
162
|
FORM_ITEM_CHANGE_LOADING,
|
|
160
163
|
FORM_NEST_REGISTRY_KEY,
|
|
161
|
-
|
|
164
|
+
default51 as FormActiveFilter,
|
|
162
165
|
default8 as FormInput,
|
|
163
166
|
default9 as FormInputShadowClone,
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
+
default52 as FormItemNestForm,
|
|
168
|
+
default53 as FormItemNestFormList,
|
|
169
|
+
default54 as FormMain,
|
|
167
170
|
default10 as FormModal,
|
|
168
171
|
default12 as FormRadioGroup,
|
|
169
|
-
|
|
172
|
+
default55 as FormSearch,
|
|
170
173
|
default13 as FormSelect,
|
|
171
174
|
default14 as FormSelectShadowClone,
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
+
default56 as FormShadowCloneDispatch,
|
|
176
|
+
default57 as FormSortSwitch,
|
|
177
|
+
default58 as FormSortSwitchGroup,
|
|
175
178
|
default15 as FormSubmitBtn,
|
|
176
|
-
|
|
179
|
+
default59 as FormSubmitPanel,
|
|
177
180
|
default16 as FormTree,
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
181
|
+
default60 as FormUpload,
|
|
182
|
+
default61 as FormUploadAudio,
|
|
183
|
+
default62 as FormUploadImage,
|
|
184
|
+
default63 as FormUploadVideo,
|
|
182
185
|
default17 as FormVerifyCode,
|
|
183
|
-
|
|
186
|
+
default64 as FormVerifyImage,
|
|
184
187
|
GLOBAL_MODAL_REMOTE_KEY,
|
|
185
188
|
default18 as HeightProvider,
|
|
186
|
-
default19 as
|
|
187
|
-
|
|
188
|
-
default65 as
|
|
189
|
-
default66 as
|
|
190
|
-
|
|
191
|
-
default21 as
|
|
192
|
-
|
|
189
|
+
default19 as IconHammer,
|
|
190
|
+
default20 as ImagePreviewTrigger,
|
|
191
|
+
default65 as InfiniteListView,
|
|
192
|
+
default66 as ListLayout,
|
|
193
|
+
default67 as ListPage,
|
|
194
|
+
default21 as MenuItemSub,
|
|
195
|
+
default22 as MenuTree,
|
|
196
|
+
default49 as ModalConfirm,
|
|
193
197
|
default7 as ModalDetail,
|
|
194
198
|
default11 as ModalForm,
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
+
default23 as ModalImagePreview,
|
|
200
|
+
default24 as ModalPorter,
|
|
201
|
+
default25 as ModalShelf,
|
|
202
|
+
default68 as ModalVideoPreview,
|
|
199
203
|
NEST_LAYOUT_SCALE_KEY,
|
|
200
204
|
NEST_LAYOUT_TIERS,
|
|
201
205
|
OPERATE_COLUMN_PROP,
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
206
|
+
default69 as PanelEditSwitch,
|
|
207
|
+
default70 as PanelItem,
|
|
208
|
+
default71 as PanelItemNestForm,
|
|
209
|
+
default26 as PanelItemNestPanel,
|
|
210
|
+
default72 as PanelMain,
|
|
207
211
|
ROUTE_MODULE_LEVEL,
|
|
208
212
|
SCOPE_VIEWPORT_MAX_HEIGHT,
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
+
default27 as SelectModule,
|
|
214
|
+
default28 as ShadowClone,
|
|
215
|
+
default73 as SlotLayoutFlowAside,
|
|
216
|
+
default29 as SlotLayoutTemplate,
|
|
213
217
|
SlotRegion,
|
|
214
218
|
TABLE_COLUMN_KEY_OPERATE,
|
|
215
219
|
TABLE_COLUMN_KEY_SELECTION,
|
|
216
220
|
TABS_MAIN_VISUAL_LEVEL,
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
221
|
+
default30 as TableEmpty,
|
|
222
|
+
default74 as TableMain,
|
|
223
|
+
default75 as TableSkeleton,
|
|
224
|
+
default76 as TableToolbar,
|
|
225
|
+
default31 as TabsMain,
|
|
222
226
|
TabsMainReplaceQueryKey,
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
+
default32 as TriggerAutoImport,
|
|
228
|
+
default77 as VideoPreviewTrigger,
|
|
229
|
+
default78 as ViewLayout,
|
|
230
|
+
default33 as WatchSize,
|
|
227
231
|
buildRhythmCss,
|
|
228
232
|
ceilToTier,
|
|
229
233
|
checkLogin,
|
package/es/style.css
CHANGED
|
@@ -66,13 +66,18 @@
|
|
|
66
66
|
justify-content: flex-end;
|
|
67
67
|
gap: 8px;
|
|
68
68
|
}
|
|
69
|
-
.badge-mark[data-v-
|
|
69
|
+
.badge-mark[data-v-4116ac36] .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-4116ac36] .el-badge__content.is-fixed {
|
|
74
74
|
top: 50%;
|
|
75
75
|
}
|
|
76
|
+
.badge-mark[data-v-4116ac36] .badge-mark__icon {
|
|
77
|
+
display: block;
|
|
78
|
+
font-size: 1em;
|
|
79
|
+
line-height: 1;
|
|
80
|
+
}
|
|
76
81
|
.app-page[data-v-3ef165a7] {
|
|
77
82
|
--dc-page-content-viewport-top: var(--v6b53f4c2);
|
|
78
83
|
--dc-page-content-viewport-bottom: var(--v1c770cbe);
|
|
@@ -415,23 +420,23 @@ to {
|
|
|
415
420
|
color: var(--dc-core-primary-color);
|
|
416
421
|
font-weight: 600;
|
|
417
422
|
}
|
|
418
|
-
.dc-tabs-tile--nav-absolute[data-v-
|
|
419
|
-
.dc-tabs-tile--nav-fixed[data-v-
|
|
423
|
+
.dc-tabs-tile--nav-absolute[data-v-9b8e85b8],
|
|
424
|
+
.dc-tabs-tile--nav-fixed[data-v-9b8e85b8] {
|
|
420
425
|
position: relative;
|
|
421
426
|
}
|
|
422
|
-
.dc-tabs-tile--nav-sticky[data-v-
|
|
427
|
+
.dc-tabs-tile--nav-sticky[data-v-9b8e85b8] {
|
|
423
428
|
display: flex;
|
|
424
429
|
flex-direction: column;
|
|
425
430
|
}
|
|
426
|
-
.dc-tabs-tile__scroll[data-v-
|
|
431
|
+
.dc-tabs-tile__scroll[data-v-9b8e85b8] {
|
|
427
432
|
display: flex;
|
|
428
433
|
flex-direction: column;
|
|
429
434
|
gap: 12px;
|
|
430
435
|
}
|
|
431
|
-
.dc-tabs-tile__card[data-v-
|
|
436
|
+
.dc-tabs-tile__card[data-v-9b8e85b8] {
|
|
432
437
|
width: 100%;
|
|
433
438
|
}
|
|
434
|
-
.dc-tabs-tile__nav[data-v-
|
|
439
|
+
.dc-tabs-tile__nav[data-v-9b8e85b8] {
|
|
435
440
|
z-index: 2;
|
|
436
441
|
max-height: 60%;
|
|
437
442
|
overflow: auto;
|
|
@@ -536,7 +541,7 @@ to {
|
|
|
536
541
|
height: 100%;
|
|
537
542
|
padding: 0 20px;
|
|
538
543
|
}
|
|
539
|
-
.app-header[data-v-
|
|
544
|
+
.app-header[data-v-d887bc4c] {
|
|
540
545
|
transition-duration: 0.3s;
|
|
541
546
|
transition-property: height;
|
|
542
547
|
transition-timing-function: linear;
|
|
@@ -544,13 +549,13 @@ to {
|
|
|
544
549
|
box-shadow: var(--dc-core-shadow, var(--el-box-shadow));
|
|
545
550
|
z-index: 1;
|
|
546
551
|
}
|
|
547
|
-
.app-header-module[data-v-
|
|
552
|
+
.app-header-module[data-v-d887bc4c] {
|
|
548
553
|
display: flex;
|
|
549
554
|
flex: 1;
|
|
550
555
|
height: 100%;
|
|
551
556
|
overflow-x: auto;
|
|
552
557
|
}
|
|
553
|
-
.app-header-module-item[data-v-
|
|
558
|
+
.app-header-module-item[data-v-d887bc4c] {
|
|
554
559
|
display: flex;
|
|
555
560
|
justify-content: center;
|
|
556
561
|
align-items: center;
|
|
@@ -558,24 +563,24 @@ to {
|
|
|
558
563
|
white-space: nowrap;
|
|
559
564
|
height: 100%;
|
|
560
565
|
}
|
|
561
|
-
.app-header-module-item[data-v-
|
|
562
|
-
.app-header-module-item_active[data-v-
|
|
563
|
-
color: var(--
|
|
566
|
+
.app-header-module-item[data-v-d887bc4c]:hover,
|
|
567
|
+
.app-header-module-item_active[data-v-d887bc4c] {
|
|
568
|
+
color: var(--v7733782f);
|
|
564
569
|
}
|
|
565
|
-
.app-header-module-item_active[data-v-
|
|
570
|
+
.app-header-module-item_active[data-v-d887bc4c] {
|
|
566
571
|
position: relative;
|
|
567
572
|
}
|
|
568
|
-
.app-header-module-item_active[data-v-
|
|
573
|
+
.app-header-module-item_active[data-v-d887bc4c]::before {
|
|
569
574
|
content: "";
|
|
570
575
|
position: absolute;
|
|
571
576
|
left: 50%;
|
|
572
577
|
top: 0;
|
|
573
578
|
width: 100%;
|
|
574
579
|
height: 3px;
|
|
575
|
-
background-color: var(--
|
|
580
|
+
background-color: var(--v7733782f);
|
|
576
581
|
transform: translateX(-50%);
|
|
577
582
|
}
|
|
578
|
-
.app-header-shim[data-v-
|
|
583
|
+
.app-header-shim[data-v-d887bc4c] {
|
|
579
584
|
width: 100%;
|
|
580
585
|
height: 100%;
|
|
581
586
|
display: flex;
|
|
@@ -585,10 +590,10 @@ to {
|
|
|
585
590
|
font-size: 18px;
|
|
586
591
|
font-weight: bold;
|
|
587
592
|
}
|
|
588
|
-
.app-header-module-item__icon[data-v-
|
|
593
|
+
.app-header-module-item__icon[data-v-d887bc4c] {
|
|
589
594
|
margin-right: 8px;
|
|
590
595
|
}
|
|
591
|
-
.app-header-right[data-v-
|
|
596
|
+
.app-header-right[data-v-d887bc4c] {
|
|
592
597
|
padding-left: 80px;
|
|
593
598
|
display: flex;
|
|
594
599
|
align-items: center;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@done-coding/admin-core",
|
|
3
|
-
"version": "0.26.
|
|
3
|
+
"version": "0.26.2-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": "6cebc83b67916ee297a64ae9623c447fc5ce388c"
|
|
87
87
|
}
|
|
@@ -50,6 +50,28 @@ appCoreBridge.theme.setStyle("studio-stage");
|
|
|
50
50
|
appCoreBridge.theme.setDark(true);
|
|
51
51
|
```
|
|
52
52
|
|
|
53
|
+
### 明暗覆盖(`theme.setDarkOverride`)
|
|
54
|
+
|
|
55
|
+
明暗有两层:`theme.setMode` / `setDark` 改的是**用户偏好**(写缓存、下次启动恢复);
|
|
56
|
+
`theme.setDarkOverride` 改的是**当前会话的临时覆盖**——压过 mode 派生,但 [MUST NOT]
|
|
57
|
+
触达 storage、[MUST NOT] 改 `themeMode`。
|
|
58
|
+
|
|
59
|
+
```ts
|
|
60
|
+
appCoreBridge.theme.setDarkOverride(true); // 临时暗色(不写缓存)
|
|
61
|
+
appCoreBridge.theme.setDarkOverride(); // 无参清除覆盖,回落用户偏好
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
典型场景:本应用被宿主以 iframe 嵌入(如 SSO 登录页),明暗须跟随宿主临时接管,
|
|
65
|
+
而该应用**独立打开时仍按自己缓存的偏好**。
|
|
66
|
+
|
|
67
|
+
覆盖期间 `themeIsDark` / `themeColors` / `<html>.dark` 全部跟随覆盖值(无「视觉暗、
|
|
68
|
+
状态亮」的脱钩);明暗切换控件仍显示 `themeMode`,即用户自己的偏好——语义上就该如此:
|
|
69
|
+
偏好没变,只是当前被宿主接管。
|
|
70
|
+
|
|
71
|
+
[MUST NOT] 用 `setDark` 模拟临时覆盖:`persist()` 写的是 `themeStyle + themeMode` 整条
|
|
72
|
+
payload,覆盖值一旦进了 `themeMode`,后续任何一次 `setStyle`(含插件风格异步注册时
|
|
73
|
+
`add` 内自动触发的那次)都会把它顺手写进缓存、污染独立打开时的偏好。
|
|
74
|
+
|
|
53
75
|
## 徽标注册表(`bridge.badge`)
|
|
54
76
|
|
|
55
77
|
一张扁平的 `key → 标记` 表;菜单项与 `ActionBtn` 按 key 查表渲染**绝对定位角标**(跟在文案右侧,**不压字**,且[MUST] 不改变宿主尺寸)。
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# components/icon — 图标族
|
|
2
|
+
|
|
3
|
+
core 自带的图标组件族。**只收 element-plus 图标集缺失、且语义上非它不可的那几个**——
|
|
4
|
+
[MUST NOT] 把 EP 已有的图标在这里再画一遍(那是纯重复,且两套观感会打架)。
|
|
5
|
+
|
|
6
|
+
## 准入判据
|
|
7
|
+
|
|
8
|
+
新增一个图标前 [MUST] 先答这两问:
|
|
9
|
+
|
|
10
|
+
1. **EP 图标集里真的没有吗?** 全量清单见 `@element-plus/icons-vue`。有就直接用 EP 的。
|
|
11
|
+
2. **换一个近似的 EP 图标真的不行吗?** 「近似但会被读错」才算不行(如 `Tools` 被读成设置),
|
|
12
|
+
「不够好看」不算。
|
|
13
|
+
|
|
14
|
+
## 优先取开源图标集的形,[MUST NOT] 手画
|
|
15
|
+
|
|
16
|
+
小尺寸图标的辨识度高度依赖剪影,手画的几何形在 12px 下几乎必然糊(实测:手画的轴对齐
|
|
17
|
+
T 形锤被甲方判「太丑」,换成斜置羊角锤即可读)。故 [MUST] 先从成熟开源集(Bootstrap Icons /
|
|
18
|
+
Lucide / Material Symbols 等,许可证需 MIT / ISC / Apache-2.0 一类)取被大量验证过的形,
|
|
19
|
+
**只抄单条 path、[MUST NOT] 引整包依赖**(我们一次只要一个图标)。
|
|
20
|
+
|
|
21
|
+
[MUST] 在组件注释里写明**来源 + 许可证 + 版权行**。风格上优先取 **fill 实心**版本——
|
|
22
|
+
EP 图标是实心的,描边版(如 Lucide)在 12px 下偏细、与 EP 混排会打架。
|
|
23
|
+
|
|
24
|
+
## 写作约定
|
|
25
|
+
|
|
26
|
+
- **颜色 [MUST] 用 `fill="currentColor"`**:继承父级 `color`,天然随主题风格 / 亮暗 / 语义色档走。
|
|
27
|
+
[MUST NOT] 写死色值、[MUST NOT] 自造 CSS 变量(规则 14)。
|
|
28
|
+
- **尺寸 [MUST] 用 `width/height="1em"`**:外面套 `ElIcon` 调 `font-size` 即可缩放,
|
|
29
|
+
[MUST NOT] 写死 px。`viewBox` **随图标源**,不强求与 EP 的 1024 一致——渲染尺寸由 1em 决定,
|
|
30
|
+
换算坐标只会徒增手抄出错的风险。
|
|
31
|
+
- **根元素 [MUST] 带 `dc-<组件名-kebab>` 类**(规则 17),与内部裸类并存。
|
|
32
|
+
- `aria-hidden="true"` + `focusable="false"`:图标是装饰,语义由宿主(或悬浮气泡)承担。
|
|
33
|
+
|
|
34
|
+
## 清单
|
|
35
|
+
|
|
36
|
+
| 组件 | 用途 | 为什么不用 EP 的 |
|
|
37
|
+
|---|---|---|
|
|
38
|
+
| `IconHammer` | 施工 / 开发中(`bridge.badge` 的 `wip` 档) | EP 无锤子;最接近的 `Tools` 是扳手+齿轮,被读成「设置」。取自 Bootstrap Icons `hammer`(MIT) |
|
package/types/bridge/badge.d.ts
CHANGED
|
@@ -50,6 +50,28 @@ export type BadgeEntry = {
|
|
|
50
50
|
* @example "批量导出订单为 Excel。适合按月对账;单次超 10 万行会超时,内测期不建议用于生产对账。"
|
|
51
51
|
*/
|
|
52
52
|
description?: string;
|
|
53
|
+
/**
|
|
54
|
+
* 被遮挡的标被触发时的回调(点宿主 / 点角标都算触发)。
|
|
55
|
+
*
|
|
56
|
+
* **[MUST] 只有 `wip` / `locked` 两档会调用它**——只有这两档会遮挡宿主交互,
|
|
57
|
+
* 其余 kind 是纯展示、宿主照常可点,没有"被拦下的那次点击"可供回调。
|
|
58
|
+
* 字段放在共享段(而非收窄进那两个 kind)是甲方口径:所有 kind 都可配、非必传。
|
|
59
|
+
*
|
|
60
|
+
* 缺省时由 core 出默认提示(`locked` →「请联系平台开通功能」/ `wip` →
|
|
61
|
+
* 「功能正在加紧开发中」)。要改文案就自己配本回调去弹,core [MUST NOT] 再开覆盖字段。
|
|
62
|
+
*/
|
|
63
|
+
onTrigger?: (entry: BadgeEntry) => void;
|
|
64
|
+
/**
|
|
65
|
+
* 业务自定义标识——**core 不消费、纯透传**,供业务方自己按它找东西
|
|
66
|
+
* (查文档 / 查开通链接 / 埋点归因等)。
|
|
67
|
+
*
|
|
68
|
+
* 命名带 `biz` 前缀是刻意的:注册表本身的 map key 已经占了"key"这个词
|
|
69
|
+
* (菜单侧是路由 path),entry 里再来个裸 `key` 会当场混淆。
|
|
70
|
+
*
|
|
71
|
+
* [MUST NOT] 由 core 据它组装 / 注册 `key → 回调` 的映射——core 是基座层不是应用层,
|
|
72
|
+
* 聚合与数据来源全在 app(同本文件开头的分工)。
|
|
73
|
+
*/
|
|
74
|
+
bizKey?: string;
|
|
53
75
|
} & ({
|
|
54
76
|
/** 数字角标 */
|
|
55
77
|
kind: "count";
|
|
@@ -65,6 +87,10 @@ export type BadgeEntry = {
|
|
|
65
87
|
kind: "beta";
|
|
66
88
|
} | {
|
|
67
89
|
kind: "wip";
|
|
90
|
+
} | {
|
|
91
|
+
kind: "deprecated";
|
|
92
|
+
} | {
|
|
93
|
+
kind: "locked";
|
|
68
94
|
} | {
|
|
69
95
|
/** 自定义标:内置五档不够用时才用 */
|
|
70
96
|
kind: "custom";
|
|
@@ -77,7 +103,9 @@ export type BadgeEntry = {
|
|
|
77
103
|
type?: BadgeProps["type"];
|
|
78
104
|
});
|
|
79
105
|
/** 内置标(非 count / custom)的 kind 联合——文案与语义色由 core 统一定,保证跨 app 一致 */
|
|
80
|
-
export type BadgeBuiltinKind = "new" | "updated" | "beta" | "wip";
|
|
106
|
+
export type BadgeBuiltinKind = "new" | "updated" | "beta" | "wip" | "deprecated" | "locked";
|
|
107
|
+
/** 会遮挡宿主交互的 kind——[MUST] 与 `use-badge-mask` 的判据同源,[MUST NOT] 两处各写一份 */
|
|
108
|
+
export declare const BADGE_MASK_KINDS: readonly ["wip", "locked"];
|
|
81
109
|
/** bridge 徽标 hook 工厂入参 */
|
|
82
110
|
export interface BridgeBadgeInit {
|
|
83
111
|
/** 初始标记表(如随版本发布的静态 NEW 标);缺省空表 */
|
package/types/bridge/index.d.ts
CHANGED
|
@@ -13,6 +13,7 @@ export { createStorageWithNamespace } from './storage';
|
|
|
13
13
|
export type { CoreThemeEntry, CoreThemeLifecycleContext, CoreThemeLifecycleHooks, CoreConfigDescription, CoreThemeModule, CoreThemeMode, CoreThemeDensity, CoreThemeMotion, ElSize, CoreThemeComponentDefaults, CoreThemePresetLayout, BridgeThemeLayoutState, BridgeThemeLayoutBaseline, BridgeThemeHook, } from './theme';
|
|
14
14
|
export type { CoreLayoutModule, BridgeLayoutHook, BridgeLayoutInit, LayoutCollapsePersistShape, } from './layout';
|
|
15
15
|
export type { BadgeEntry, BadgeMarkMap, BadgeBuiltinKind, CoreBadgeModule, BridgeBadgeHook, BridgeBadgeInit, } from './badge';
|
|
16
|
+
export { BADGE_MASK_KINDS } from './badge';
|
|
16
17
|
/**
|
|
17
18
|
* 认证桥接无状态纯工厂。
|
|
18
19
|
*
|
|
@@ -226,6 +226,17 @@ export interface CoreThemeModule {
|
|
|
226
226
|
* 新代码 [SHOULD] 用 {@link CoreThemeModule.setMode}(支持 `system` 第三态)。
|
|
227
227
|
*/
|
|
228
228
|
setDark: (isDark: boolean) => void;
|
|
229
|
+
/**
|
|
230
|
+
* 覆盖明暗(**仅内存,不持久化**):`true`/`false` 压过 {@link CoreThemeModule.setMode}
|
|
231
|
+
* 的派生结果,**无参调用** `setDarkOverride()` 清除覆盖、回落 mode。
|
|
232
|
+
*
|
|
233
|
+
* 场景:应用被宿主以 iframe 嵌入(如 SSO 登录页),明暗须跟随宿主临时接管,但该应用
|
|
234
|
+
* 独立打开时仍按自己缓存的偏好——故覆盖 [MUST NOT] 触达 storage、[MUST NOT] 改
|
|
235
|
+
* `themeMode`(用户真实偏好原样保留,明暗切换控件仍显示它)。
|
|
236
|
+
* 覆盖期间 `themeIsDark` / `themeColors` / `<html>.dark` 全部跟随覆盖值,不存在
|
|
237
|
+
* 「视觉暗、状态亮」的脱钩。
|
|
238
|
+
*/
|
|
239
|
+
setDarkOverride: (isDark?: boolean) => void;
|
|
229
240
|
/**
|
|
230
241
|
* 直接设密度档(独立于风格切换;供 UI 偏好 / demo 切换器)。
|
|
231
242
|
* 注:`setStyle` 会按目标 preset 的 density 复位,故风格切换后手设的密度会被覆盖(同 layout 语义)。
|