@done-coding/admin-core 0.15.0 → 0.15.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.
Files changed (33) hide show
  1. package/es/components/app-layout/AppBody.vue.mjs +2 -2
  2. package/es/components/app-layout/AppBody.vue2.mjs +47 -44
  3. package/es/components/app-layout/AppPage.vue.mjs +1 -1
  4. package/es/components/app-layout/AppPage.vue2.mjs +146 -90
  5. package/es/components/app-layout/app-page-geometry.mjs +42 -15
  6. package/es/components/display/TabsMain.vue.mjs +114 -59
  7. package/es/components/display/TabsTile.vue.mjs +7 -0
  8. package/es/components/display/TabsTile.vue2.mjs +182 -0
  9. package/es/components/display/use-tabs-query-sync.mjs +26 -0
  10. package/es/components/form/FormSearch.vue.mjs +2 -2
  11. package/es/components/form/FormSearch.vue2.mjs +84 -75
  12. package/es/components/form/form-search-utils.mjs +58 -29
  13. package/es/components/panel/PanelMain.vue.mjs +1 -1
  14. package/es/components/panel/PanelMain.vue2.mjs +15 -15
  15. package/es/hooks/use-channel-viewport-height.mjs +1 -4
  16. package/es/hooks/use-theme-apply.mjs +65 -54
  17. package/es/index.mjs +203 -196
  18. package/es/inject/key.mjs +19 -13
  19. package/es/store/app.mjs +77 -68
  20. package/es/style.css +1 -1
  21. package/es/utils/dom.mjs +12 -0
  22. package/package.json +2 -2
  23. package/types/components/app-layout/app-page-geometry.d.ts +15 -0
  24. package/types/components/display/TabsTile.vue.d.ts +208 -0
  25. package/types/components/display/types.d.ts +7 -0
  26. package/types/components/display/use-tabs-query-sync.d.ts +16 -0
  27. package/types/components/form/form-search-utils.d.ts +13 -6
  28. package/types/components/modal/ConfirmModal.vue.d.ts +1 -1
  29. package/types/inject/key.d.ts +13 -1
  30. package/types/injectInfo.json.d.ts +1 -1
  31. package/types/store/app.d.ts +19 -1
  32. package/types/utils/dom.d.ts +1 -0
  33. package/types/utils/index.d.ts +1 -0
package/es/store/app.mjs CHANGED
@@ -1,39 +1,39 @@
1
- import { defineStore as x } from "pinia";
2
- import { useRoute as D } from "vue-router";
3
- import { computed as o, ref as k } from "vue";
4
- function W(C) {
5
- const { bridge: a } = C;
6
- return x("APP", () => {
7
- const p = o(() => a.APP_LAYOUT_HEADER_CONFIG.height), h = o(() => a.APP_LAYOUT_FOOTER_CONFIG.height), m = o(() => a.APP_BASE_INFO.name), _ = k(!1), I = o(() => a.layout.sidebarCollapsed.value ? a.APP_LAYOUT_SIDEBAR_CONFIG.collapseWidth : a.APP_LAYOUT_SIDEBAR_CONFIG.width), E = D(), u = o(() => a.themeColors.value), A = o(() => E.meta), s = o(() => A.value.layout), F = o(() => A.value.keepAlive), c = o(
1
+ import { defineStore as Y } from "pinia";
2
+ import { useRoute as k } from "vue-router";
3
+ import { computed as o, ref as B } from "vue";
4
+ function z(f) {
5
+ const { bridge: a } = f;
6
+ return Y("APP", () => {
7
+ const n = o(() => a.APP_LAYOUT_HEADER_CONFIG.height), i = o(() => a.APP_LAYOUT_FOOTER_CONFIG.height), E = o(() => a.APP_BASE_INFO.name), P = B(!1), $ = o(() => a.layout.sidebarCollapsed.value ? a.APP_LAYOUT_SIDEBAR_CONFIG.collapseWidth : a.APP_LAYOUT_SIDEBAR_CONFIG.width), F = k(), d = o(() => a.themeColors.value), O = o(() => F.meta), s = o(() => O.value.layout), S = o(() => O.value.keepAlive), v = o(
8
8
  () => {
9
9
  var e;
10
10
  return ((e = s.value) == null ? void 0 : e.header) ?? a.APP_ROUTER_META_DEFAULT_CONFIG.showHeader;
11
11
  }
12
- ), r = o(
12
+ ), p = o(
13
13
  () => {
14
14
  var e;
15
15
  return ((e = s.value) == null ? void 0 : e.footer) ?? a.APP_ROUTER_META_DEFAULT_CONFIG.showFooter;
16
16
  }
17
- ), g = o(
18
- () => c.value && p.value > 0
19
- ), $ = o(
20
- () => r.value && h.value > 0
21
- ), d = o(
17
+ ), h = o(
18
+ () => v.value && n.value > 0
19
+ ), _ = o(
20
+ () => p.value && i.value > 0
21
+ ), r = o(
22
22
  () => {
23
23
  var e;
24
- return (((e = s.value) == null ? void 0 : e.sidebar) ?? a.APP_ROUTER_META_DEFAULT_CONFIG.showSidebar) && _.value;
24
+ return (((e = s.value) == null ? void 0 : e.sidebar) ?? a.APP_ROUTER_META_DEFAULT_CONFIG.showSidebar) && P.value;
25
25
  }
26
- ), n = o(
26
+ ), c = o(
27
27
  () => {
28
28
  var e;
29
29
  return ((e = s.value) == null ? void 0 : e.aside) ?? a.APP_ROUTER_META_DEFAULT_CONFIG.showAside ?? !1;
30
30
  }
31
- ), f = o(
31
+ ), y = o(
32
32
  () => {
33
33
  var e;
34
34
  return ((e = s.value) == null ? void 0 : e.breadcrumb) ?? a.APP_ROUTER_META_DEFAULT_CONFIG.showBreadcrumb;
35
35
  }
36
- ), P = o(
36
+ ), T = o(
37
37
  () => {
38
38
  var e;
39
39
  return ((e = s.value) == null ? void 0 : e.bodyShimPadding) ?? a.APP_LAYOUT_BODY_CONFIG.shimPadding;
@@ -43,7 +43,7 @@ function W(C) {
43
43
  right: `${a.APP_LAYOUT_VIEWPORT_CONFIG.paddingRight}px`,
44
44
  bottom: `${a.APP_LAYOUT_VIEWPORT_CONFIG.paddingBottom}px`,
45
45
  left: `${a.APP_LAYOUT_VIEWPORT_CONFIG.paddingLeft}px`
46
- })), S = o(() => a.APP_LAYOUT_GAP_CONFIG.size), t = o(() => `${S.value}px`), v = o(() => {
46
+ })), b = o(() => a.APP_LAYOUT_GAP_CONFIG.size), t = o(() => `${b.value}px`), g = o(() => {
47
47
  const e = a.APP_LAYOUT_HEADER_CONFIG;
48
48
  return {
49
49
  ...e.style,
@@ -52,106 +52,115 @@ function W(C) {
52
52
  top: `calc(${l.value.top} + ${t.value})`,
53
53
  left: `calc(${l.value.left} + ${t.value})`,
54
54
  right: `calc(${l.value.right} + ${t.value})`,
55
- height: `${c.value ? p.value : 0}px`,
56
- background: e.background ?? u.value.bodyColor,
55
+ height: `${v.value ? n.value : 0}px`,
56
+ background: e.background ?? d.value.bodyColor,
57
57
  ...e.color ? { color: e.color } : {}
58
58
  };
59
- }), i = o(
60
- () => g.value ? `calc(${l.value.top} + ${t.value} + ${v.value.height} + ${t.value})` : `calc(${l.value.top} + ${t.value})`
61
- ), O = o(() => {
59
+ }), A = o(
60
+ () => h.value ? `calc(${l.value.top} + ${t.value} + ${g.value.height} + ${t.value})` : `calc(${l.value.top} + ${t.value})`
61
+ ), C = o(() => {
62
62
  const e = a.APP_LAYOUT_FOOTER_CONFIG;
63
63
  return {
64
64
  ...e.style,
65
- height: `${r.value ? h.value : 0}px`,
65
+ height: `${p.value ? i.value : 0}px`,
66
66
  // footer 在 body 流内:marginTop 与内容 shim 隔内缝;底边悬浮由 body paddingBottom 承担。
67
67
  // 用 hasFooter:footer 收起到 0 高时不留死内缝 gap(对称 hasHeader)。
68
- marginTop: $.value ? t.value : "0px",
69
- background: e.background ?? u.value.bodyColor,
68
+ marginTop: _.value ? t.value : "0px",
69
+ background: e.background ?? d.value.bodyColor,
70
70
  ...e.color ? { color: e.color } : {}
71
71
  };
72
- }), b = o(() => {
72
+ }), m = o(() => {
73
73
  const e = a.APP_LAYOUT_SIDEBAR_CONFIG;
74
74
  return {
75
75
  ...e.style,
76
76
  position: "fixed",
77
- width: `${d.value ? I.value : 0}px`,
77
+ width: `${r.value ? $.value : 0}px`,
78
78
  // 悬浮:左/下各让外缝 gap;顶 = 内容行顶(外缝 + header 高 + 内缝);paddingTop 归 0(让位已由 top 承担)。
79
- top: i.value,
79
+ top: A.value,
80
80
  left: `calc(${l.value.left} + ${t.value})`,
81
81
  bottom: `calc(${l.value.bottom} + ${t.value})`,
82
82
  paddingTop: "0px",
83
- background: e.background ?? u.value.bodyColor,
83
+ background: e.background ?? d.value.bodyColor,
84
84
  ...e.color ? { color: e.color } : {}
85
85
  };
86
- }), T = o(() => {
86
+ }), I = o(() => {
87
87
  const e = a.APP_LAYOUT_ASIDE_CONFIG;
88
88
  return {
89
89
  ...e.style,
90
90
  position: "fixed",
91
91
  // 折叠双表达:外层宽收 0(收回空间)+ AppAside shim 绕 Y 轴翻转(视觉)。
92
92
  // showAside=false 整列收 0。
93
- width: `${n.value && !a.layout.asideCollapsed.value ? e.width : 0}px`,
93
+ width: `${c.value && !a.layout.asideCollapsed.value ? e.width : 0}px`,
94
94
  // 对称 sidebar:右/下各让外缝 gap;顶 = 内容行顶。
95
- top: i.value,
95
+ top: A.value,
96
96
  right: `calc(${l.value.right} + ${t.value})`,
97
97
  bottom: `calc(${l.value.bottom} + ${t.value})`,
98
98
  paddingTop: "0px",
99
- background: e.background ?? u.value.bodyColor,
99
+ background: e.background ?? d.value.bodyColor,
100
100
  ...e.color ? { color: e.color } : {}
101
101
  };
102
- }), y = o(() => ({
102
+ }), R = o(() => ({
103
103
  // 内容左让位:外框左 + 外缝;有 sidebar 再加 sidebar 宽 + 内缝。
104
- paddingLeft: d.value ? `calc(${l.value.left} + ${t.value} + ${b.value.width} + ${t.value})` : `calc(${l.value.left} + ${t.value})`,
104
+ paddingLeft: r.value ? `calc(${l.value.left} + ${t.value} + ${m.value.width} + ${t.value})` : `calc(${l.value.left} + ${t.value})`,
105
105
  // 顶让位 = 内容行顶(与 sidebar/aside 同行)。
106
- paddingTop: i.value,
106
+ paddingTop: A.value,
107
107
  // 右让位(对称左):外框右 + 外缝;有 aside 再加 aside 宽 + 内缝。
108
- paddingRight: n.value ? `calc(${l.value.right} + ${t.value} + ${T.value.width} + ${t.value})` : `calc(${l.value.right} + ${t.value})`,
108
+ paddingRight: c.value ? `calc(${l.value.right} + ${t.value} + ${I.value.width} + ${t.value})` : `calc(${l.value.right} + ${t.value})`,
109
109
  // 底让位:外框下 + 外缝(footer 在流内,其底悬浮由此承担)。
110
110
  paddingBottom: `calc(${l.value.bottom} + ${t.value})`,
111
- backgroundColor: u.value.bodyColor
112
- })), R = o(() => {
113
- const e = g.value ? ` - ${v.value.height} - ${t.value}` : "", w = $.value ? ` - ${O.value.height} - ${t.value}` : "";
111
+ backgroundColor: d.value.bodyColor
112
+ })), L = o(() => {
113
+ const e = b.value, u = a.APP_LAYOUT_VIEWPORT_CONFIG, D = c.value && !a.layout.asideCollapsed.value ? a.APP_LAYOUT_ASIDE_CONFIG.width : 0;
114
+ return {
115
+ top: h.value ? u.paddingTop + e + n.value + e : u.paddingTop + e,
116
+ bottom: _.value ? u.paddingBottom + e + i.value + e : u.paddingBottom + e,
117
+ left: r.value ? u.paddingLeft + e + $.value + e : u.paddingLeft + e,
118
+ right: c.value ? u.paddingRight + e + D + e : u.paddingRight + e
119
+ };
120
+ }), U = o(() => {
121
+ const e = h.value ? ` - ${g.value.height} - ${t.value}` : "", u = _.value ? ` - ${C.value.height} - ${t.value}` : "";
114
122
  return {
115
- minHeight: `calc(100vh - ${l.value.top} - ${l.value.bottom} - ${t.value} - ${t.value}${e}${w})`,
116
- padding: `${P.value}px`
123
+ minHeight: `calc(100vh - ${l.value.top} - ${l.value.bottom} - ${t.value} - ${t.value}${e}${u})`,
124
+ padding: `${T.value}px`
117
125
  };
118
- }), U = (e) => {
126
+ }), G = (e) => {
119
127
  a.layout.setSidebarCollapse(e);
120
- }, L = (e) => {
121
- a.layout.setAsideCollapse(e);
122
- }, G = (e) => {
123
- _.value = e;
124
128
  }, N = (e) => {
129
+ a.layout.setAsideCollapse(e);
130
+ }, w = (e) => {
131
+ P.value = e;
132
+ }, x = (e) => {
125
133
  a.theme.setDark(e);
126
134
  };
127
135
  return {
128
- name: m,
136
+ name: E,
129
137
  isDarkTheme: o(() => a.themeIsDark.value),
130
- theme: u,
131
- showHeader: c,
132
- showFooter: r,
133
- showSidebar: d,
134
- showAside: n,
135
- showBreadcrumb: f,
136
- keepAlive: F,
137
- headerStyle: v,
138
- footerStyle: O,
139
- sidebarStyle: b,
140
- asideStyle: T,
141
- bodyStyle: y,
142
- bodyShimPadding: P,
143
- bodyShimStyle: R,
138
+ theme: d,
139
+ showHeader: v,
140
+ showFooter: p,
141
+ showSidebar: r,
142
+ showAside: c,
143
+ showBreadcrumb: y,
144
+ keepAlive: S,
145
+ headerStyle: g,
146
+ footerStyle: C,
147
+ sidebarStyle: m,
148
+ asideStyle: I,
149
+ bodyStyle: R,
150
+ contentViewportInset: L,
151
+ bodyShimPadding: T,
152
+ bodyShimStyle: U,
144
153
  viewportPadding: l,
145
154
  // 折叠态读 bridge 真相(架构反转,名字保留向后兼容);aside 对称新增。
146
155
  sidebarIsCollapse: o(() => a.layout.sidebarCollapsed.value),
147
156
  asideIsCollapse: o(() => a.layout.asideCollapsed.value),
148
- changeSidebarCollapseStatus: U,
149
- changeAsideCollapseStatus: L,
150
- changeSidebarHasMenusStatus: G,
151
- changeIsDarkTheme: N
157
+ changeSidebarCollapseStatus: G,
158
+ changeAsideCollapseStatus: N,
159
+ changeSidebarHasMenusStatus: w,
160
+ changeIsDarkTheme: x
152
161
  };
153
162
  });
154
163
  }
155
164
  export {
156
- W as createAppStore
165
+ z as createAppStore
157
166
  };
package/es/style.css CHANGED
@@ -1 +1 @@
1
- .confirm-modal[data-v-6ce57009] .el-dialog__header{margin-right:0;padding:16px 20px;border-bottom:1px solid var(--el-border-color-lighter)}.confirm-modal__title[data-v-6ce57009]{font-size:16px;font-weight:600;line-height:24px;color:var(--el-text-color-primary);text-align:left}.confirm-modal[data-v-6ce57009] .el-dialog__body{padding:20px}.confirm-modal__content[data-v-6ce57009]{overflow-x:hidden;overflow-y:auto;max-height:calc(100vh - 200px);font-size:14px;line-height:22px;color:var(--el-text-color-regular);text-align:left;word-break:break-word}.confirm-modal[data-v-6ce57009] .el-dialog__footer{padding:12px 20px;border-top:1px solid var(--el-border-color-lighter)}.confirm-modal[data-v-6ce57009] .el-drawer__header{margin-bottom:0;padding:16px 20px;border-bottom:1px solid var(--el-border-color-lighter);color:var(--el-text-color-primary)}.confirm-modal[data-v-6ce57009] .el-drawer__body{padding:20px}.confirm-modal[data-v-6ce57009] .el-drawer__footer{padding:12px 20px;border-top:1px solid var(--el-border-color-lighter)}.confirm-modal__footer[data-v-6ce57009]{display:flex;justify-content:flex-end;align-items:center;gap:8px}.confirm-modal__footer[data-v-6ce57009] .el-button{min-width:72px}.confirm-modal__footer[reverse=true][data-v-6ce57009]{flex-direction:row-reverse}.action-confirm__title[data-v-67d276b0]{font-weight:600;margin-bottom:6px}.action-confirm__content[data-v-67d276b0]{margin-bottom:12px;color:var(--el-text-color-regular)}.action-confirm__actions[data-v-67d276b0]{display:flex;justify-content:flex-end;gap:8px}.form-item-tip[data-v-8b508d64]{text-align:left;line-height:1.5;font-size:12px}.form-item-label-hide[data-v-8b508d64] .el-form-item__label-wrap{display:none}[data-v-83b1b718] .el-row>.el-col>.el-form-item{margin-bottom:18px}.form-submit-panel[data-v-1505775a]{display:flex;flex-direction:column}.form-submit-panel .form-submit-panel-form[data-v-1505775a]{order:1}.form-submit-panel .form-submit-panel-operation[data-v-1505775a]{order:2}.form-submit-panel .form-submit-panel-operation-inner[data-v-1505775a]{display:flex;align-items:center;gap:8px;padding:10px 12px}.form-submit-panel .el-affix--fixed .form-submit-panel-operation-inner[data-v-1505775a]{background-color:var(--dc-core-body-color)}.form-submit-panel_bottom-center .form-submit-panel-operation-inner[data-v-1505775a],.form-submit-panel_bottom-right .form-submit-panel-operation-inner[data-v-1505775a]{border-top:1px solid var(--el-border-color-light);border-bottom-left-radius:var(--dc-core-radius, var(--el-border-radius-base));border-bottom-right-radius:var(--dc-core-radius, var(--el-border-radius-base))}.form-submit-panel_bottom-center .form-submit-panel-operation-inner[data-v-1505775a]{justify-content:center}.form-submit-panel_bottom-right .form-submit-panel-operation-inner[data-v-1505775a]{justify-content:flex-end}.form-submit-panel_top-right .form-submit-panel-operation[data-v-1505775a]{order:0}.form-submit-panel_top-right .form-submit-panel-operation-inner[data-v-1505775a]{justify-content:flex-end;border-bottom:1px solid var(--el-border-color-light);border-top-left-radius:var(--dc-core-radius, var(--el-border-radius-base));border-top-right-radius:var(--dc-core-radius, var(--el-border-radius-base))}.form-submit-panel_no-divider .form-submit-panel-operation-inner[data-v-1505775a]{border:none;border-radius:0}.form-submit-panel_bare .form-submit-panel-operation-inner[data-v-1505775a]{padding:0}.panel-edit-switch[data-v-65f056ab]{position:relative}.panel-edit-switch:hover .panel-edit-switch-edit-btn[data-v-65f056ab]{display:block}.panel-edit-switch-edit-btn[data-v-65f056ab]{position:absolute;top:0;right:0;z-index:1;display:none}.panel-edit-switch-actions[data-v-65f056ab]{display:flex;justify-content:flex-end;gap:8px;margin-top:8px}.panel-main-item-col:not(:last-of-type) .panel-main-item-col-wrap_card[data-v-0835965e]{margin-bottom:var(--e1f69828)}.form-search_show[data-v-290fe11f]{margin-bottom:10px}.form-search .btn-box[data-v-290fe11f]{display:flex;align-items:center;gap:8px;justify-content:flex-end}.form-search .btn-box-expand-icon[data-v-290fe11f]{margin-right:2px}.form-verify-image[data-v-7a70397e] .el-input__suffix-inner *{margin:0}.form-verify-image-suffix[data-v-7a70397e]{position:absolute;height:100%;border-radius:var(--el-input-border-radius, var(--dc-core-radius, var(--el-border-radius-base)));top:50%;transform:translateY(-50%);overflow:hidden;cursor:pointer}.form-verify-image-suffix-main[data-v-7a70397e]{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#f4f4f4}.tabs-main-bar[data-v-6b4fc73b]{position:relative;display:flex;align-items:center}.tabs-main-bar-item[data-v-6b4fc73b]{border:none;background:transparent;cursor:pointer;color:var(--el-text-color-regular);transition:background .2s,color .2s,box-shadow .2s}.tabs-main-bar-indicator[data-v-6b4fc73b]{position:absolute;left:0;background:var(--dc-core-primary-color);transition:transform .2s,width .2s}.tabs-main-bar--l1 .tabs-main-bar-item[data-v-6b4fc73b]{font-size:16px}.tabs-main-bar--l2 .tabs-main-bar-item[data-v-6b4fc73b]{font-size:14px}.tabs-main-bar--l3 .tabs-main-bar-item[data-v-6b4fc73b],.tabs-main-bar--l4 .tabs-main-bar-item[data-v-6b4fc73b]{font-size:12px}.tabs-main-bar--variant-card[data-v-6b4fc73b]{position:relative;overflow:hidden;gap:2px}.tabs-main-bar--variant-card .tabs-main-bar-item[data-v-6b4fc73b]{position:relative;padding:8px 20px;line-height:1.4;border:1px solid transparent;border-bottom:0;border-radius:6px 6px 0 0}.tabs-main-bar--variant-card .tabs-main-bar-item[data-v-6b4fc73b]:hover:not(.tabs-main-bar-item_active){color:var(--dc-core-primary-color)}.tabs-main-bar--variant-card .tabs-main-bar-item_active[data-v-6b4fc73b]{color:var(--dc-core-primary-color);border-color:var(--el-border-color-light)}.tabs-main-bar--variant-card .tabs-main-bar-item_active[data-v-6b4fc73b]:before,.tabs-main-bar--variant-card .tabs-main-bar-item_active[data-v-6b4fc73b]:after{content:"";position:absolute;bottom:0;width:100vw;height:1px;background:var(--el-border-color-light)}.tabs-main-bar--variant-card .tabs-main-bar-item_active[data-v-6b4fc73b]:before{right:100%}.tabs-main-bar--variant-card .tabs-main-bar-item_active[data-v-6b4fc73b]:after{left:100%}.tabs-main-bar--variant-indicator .tabs-main-bar-item[data-v-6b4fc73b]{padding:8px 16px}.tabs-main-bar--variant-indicator .tabs-main-bar-item_active[data-v-6b4fc73b]{color:var(--dc-core-primary-color)}.tabs-main-bar--variant-indicator .tabs-main-bar-indicator[data-v-6b4fc73b]{bottom:0;height:2px}.tabs-main-bar--variant-indicator-compact .tabs-main-bar-item[data-v-6b4fc73b]{padding:6px 10px}.tabs-main-bar--variant-indicator-compact .tabs-main-bar-item_active[data-v-6b4fc73b]{color:var(--dc-core-primary-color)}.tabs-main-bar--variant-indicator-compact .tabs-main-bar-indicator[data-v-6b4fc73b]{bottom:0;height:1px}.tabs-main-bar--variant-plain .tabs-main-bar-item[data-v-6b4fc73b]{padding:4px 8px}.tabs-main-bar--variant-plain .tabs-main-bar-item_active[data-v-6b4fc73b]{color:var(--dc-core-primary-color);font-weight:600}.app-collapse-toggle[data-v-10c7e006]{position:absolute;top:50%;cursor:pointer;width:14px;height:44px;border-radius:7px;background-color:var(--dc-core-surface, var(--el-bg-color-overlay));border:1px solid var(--dc-core-border-color, var(--el-border-color-lighter));color:var(--el-text-color-secondary);display:flex;align-items:center;justify-content:center;font-size:12px;z-index:1;opacity:.3;box-shadow:none;transition:opacity .2s ease,color .2s ease,border-color .2s ease,box-shadow .2s ease}.app-collapse-toggle--sidebar[data-v-10c7e006]{left:100%;transform:translate(-50%,-50%)}.app-collapse-toggle--aside[data-v-10c7e006]{right:100%;transform:translate(50%,-50%)}.app-collapse-toggle[data-v-10c7e006]:hover,.app-collapse-toggle[data-v-10c7e006]:focus-visible{opacity:1;color:var(--el-text-color-primary);border-color:var(--dc-core-border-color, var(--el-border-color));box-shadow:var(--el-box-shadow-lighter)}.app-collapse-toggle[data-v-10c7e006]:active{border-color:var(--dc-core-primary-color, var(--el-color-primary))}.app-collapse-toggle__icon[data-v-10c7e006]{transition:transform .3s}.app-aside[data-v-7e17d342]{transition:width var(--dc-core-motion-duration-slow, .3s) var(--dc-core-motion-easing, ease);box-shadow:var(--dc-core-shadow, var(--el-box-shadow));overflow:visible;z-index:0}.app-aside-clip[data-v-7e17d342]{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.app-aside-shim[data-v-7e17d342]{position:absolute;right:0;top:0;bottom:0;overflow-x:hidden;overflow-y:auto;transition:opacity var(--dc-core-motion-duration, .2s) var(--dc-core-motion-easing, ease)}@media (prefers-reduced-motion: reduce){.app-aside[data-v-7e17d342],.app-aside-shim[data-v-7e17d342]{transition:none}}.app-breadcrumb[data-v-9bbe0b05]{display:flex;align-items:center;justify-content:flex-start}.app-body[data-v-dce40682]{transition-duration:.3s;transition-property:padding;transition-timing-function:linear;min-height:100vh}.app-body-shim[data-v-dce40682]{width:100%;--app-viewport-max-height: var(--v65702a61)}.app-footer[data-v-8960664d]{transition-duration:.3s;transition-property:height;transition-timing-function:linear;overflow:hidden;width:100%;box-shadow:var(--dc-core-shadow, var(--el-box-shadow))}.app-footer-shim[data-v-8960664d]{width:100%;height:100%;padding:0 20px}.app-header[data-v-c78820aa]{transition-duration:.3s;transition-property:height;transition-timing-function:linear;overflow:hidden;box-shadow:var(--dc-core-shadow, var(--el-box-shadow));z-index:1}.app-header-module[data-v-c78820aa]{display:flex;flex:1;height:100%;overflow-x:auto}.app-header-module-item[data-v-c78820aa]{display:flex;justify-content:center;align-items:center;padding:0 20px;white-space:nowrap;height:100%}.app-header-module-item[data-v-c78820aa]:hover,.app-header-module-item_active[data-v-c78820aa]{color:var(--v8834c284)}.app-header-module-item_active[data-v-c78820aa]{position:relative}.app-header-module-item_active[data-v-c78820aa]:before{content:"";position:absolute;left:50%;top:0;width:100%;height:3px;background-color:var(--v8834c284);transform:translate(-50%)}.app-header-shim[data-v-c78820aa]{width:100%;height:100%;display:flex;align-items:center;justify-content:space-between;padding:0 20px;font-size:18px;font-weight:700}.app-header-module-item__icon[data-v-c78820aa]{margin-right:8px}.app-header-right[data-v-c78820aa]{padding-left:80px;display:flex;align-items:center}.app-sidebar[data-v-8aa015fb]{transition-duration:.3s;transition-property:width;transition-timing-function:linear;box-shadow:var(--dc-core-shadow, var(--el-box-shadow));overflow:visible;z-index:var(--v3ceb1df4)}.app-sidebar-top[data-v-8aa015fb]{position:absolute;left:0;right:0;top:0;overflow:hidden}.app-sidebar-bottom[data-v-8aa015fb]{position:absolute;left:0;right:0;bottom:0;overflow:hidden}.app-sidebar-shim[data-v-8aa015fb]{position:absolute;left:0;right:0;top:var(--v2c8b87ee);bottom:var(--baa8be1c);overflow-x:hidden;overflow-y:auto;--el-menu-border-color: transparent;-webkit-user-select:none;user-select:none}.app-theme[data-v-06ca4822]{display:inline-flex;align-items:center;gap:12px;margin-right:12px}.app-theme__style-select[data-v-06ca4822]{width:120px}.app-layout[data-v-f6f87b30]{position:relative}.app-layout_noLogin[data-v-f6f87b30] .app-body,.app-layout_noLogin[data-v-f6f87b30] .app-sidebar,.app-layout_noLogin[data-v-f6f87b30] .app-header,.app-layout_noLogin[data-v-f6f87b30] .app-footer{transition:none!important}.app-page-shim[data-v-da6e4bf1]{--app-viewport-max-height: var(--v36c22f8e)}.app-page-slot-shim[data-v-da6e4bf1]{box-sizing:border-box;width:100%;height:100%}[data-v-64f355fe] .auto-refresh-label{display:flex;font-size:13px;color:var(--el-text-color-regular);margin-bottom:8px}.auto-refresh-group-icon--rotating[data-v-e608ff06]{animation:auto-refresh-rotating-e608ff06 1s linear infinite}@keyframes auto-refresh-rotating-e608ff06{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.form-item-nest-form[data-v-a413a382],.form-item-nest-form-list[data-v-68118cbf]{padding:16px;border:1px solid var(--dc-core-border-color);border-radius:8px;box-shadow:var(--dc-core-shadow, var(--el-box-shadow-lighter))}.form-item-nest-form-list-row[data-v-68118cbf]{display:flex;align-items:flex-start;gap:8px;margin-bottom:12px}.form-item-nest-form-list-row-body[data-v-68118cbf]{flex:1;min-width:0;padding:12px 16px;border:1px solid var(--el-border-color-lighter);border-radius:6px;box-shadow:var(--el-box-shadow-lighter)}.table-toolbar[data-v-0175f1a9]{display:flex;justify-content:space-between;align-items:center;padding-bottom:8px;gap:20px}.table-toolbar-left[data-v-0175f1a9],.table-toolbar-right[data-v-0175f1a9]{display:flex;align-items:center;gap:10px}.table-toolbar-switch-view[data-v-0175f1a9]{--el-switch-off-color: var(--dc-core-primary-color);--el-switch-on-color: var(--dc-core-warning-color)}.data-list-view[data-v-c66e599d]{width:100%}.data-list-view-empty[data-v-c66e599d]{display:flex;justify-content:center;align-items:center;width:100%;min-height:60px;grid-column:1 / -1}.table-main-pagination[data-v-e8584319]{margin-top:10px;display:flex;justify-content:flex-end}.dc-slot-layout-flow-aside_separate[data-v-5c6ef74b]{position:relative}.dc-slot-layout-flow-aside_separate_left[data-v-5c6ef74b]{padding-left:calc(var(--v88700944) - 1px)}.dc-slot-layout-flow-aside_separate_right[data-v-5c6ef74b]{padding-right:calc(var(--v88700944) - 1px)}.dc-slot-layout-flow-aside-aside[data-v-5c6ef74b]{width:var(--v88700944)}.dc-slot-layout-flow-aside-aside_left[data-v-5c6ef74b],.dc-slot-layout-flow-aside-aside_right[data-v-5c6ef74b]{position:absolute;top:0;max-height:min(100%,var(--v23b7c943));overflow-y:auto}.dc-slot-layout-flow-aside-aside_left[data-v-5c6ef74b]{left:0}.dc-slot-layout-flow-aside-aside_right[data-v-5c6ef74b]{right:0}.dc-slot-layout-flow-aside-main[data-v-5c6ef74b]{width:var(--v7e1d11ca)}.list-page[data-v-386c1374]{min-height:var(--v4d27171c)}.list-page-header[data-v-386c1374],.list-page-operation[data-v-386c1374]{margin-bottom:10px}.list-page[data-v-386c1374] .el-loading-mask{left:-10px;top:-10px;right:-10px;bottom:-10px}.panel-item-nest-form-actions[data-v-3af1d77a]{display:flex;justify-content:flex-end;gap:8px;margin-top:8px}
1
+ .confirm-modal[data-v-6ce57009] .el-dialog__header{margin-right:0;padding:16px 20px;border-bottom:1px solid var(--el-border-color-lighter)}.confirm-modal__title[data-v-6ce57009]{font-size:16px;font-weight:600;line-height:24px;color:var(--el-text-color-primary);text-align:left}.confirm-modal[data-v-6ce57009] .el-dialog__body{padding:20px}.confirm-modal__content[data-v-6ce57009]{overflow-x:hidden;overflow-y:auto;max-height:calc(100vh - 200px);font-size:14px;line-height:22px;color:var(--el-text-color-regular);text-align:left;word-break:break-word}.confirm-modal[data-v-6ce57009] .el-dialog__footer{padding:12px 20px;border-top:1px solid var(--el-border-color-lighter)}.confirm-modal[data-v-6ce57009] .el-drawer__header{margin-bottom:0;padding:16px 20px;border-bottom:1px solid var(--el-border-color-lighter);color:var(--el-text-color-primary)}.confirm-modal[data-v-6ce57009] .el-drawer__body{padding:20px}.confirm-modal[data-v-6ce57009] .el-drawer__footer{padding:12px 20px;border-top:1px solid var(--el-border-color-lighter)}.confirm-modal__footer[data-v-6ce57009]{display:flex;justify-content:flex-end;align-items:center;gap:8px}.confirm-modal__footer[data-v-6ce57009] .el-button{min-width:72px}.confirm-modal__footer[reverse=true][data-v-6ce57009]{flex-direction:row-reverse}.action-confirm__title[data-v-67d276b0]{font-weight:600;margin-bottom:6px}.action-confirm__content[data-v-67d276b0]{margin-bottom:12px;color:var(--el-text-color-regular)}.action-confirm__actions[data-v-67d276b0]{display:flex;justify-content:flex-end;gap:8px}.form-item-tip[data-v-8b508d64]{text-align:left;line-height:1.5;font-size:12px}.form-item-label-hide[data-v-8b508d64] .el-form-item__label-wrap{display:none}[data-v-83b1b718] .el-row>.el-col>.el-form-item{margin-bottom:18px}.form-submit-panel[data-v-1505775a]{display:flex;flex-direction:column}.form-submit-panel .form-submit-panel-form[data-v-1505775a]{order:1}.form-submit-panel .form-submit-panel-operation[data-v-1505775a]{order:2}.form-submit-panel .form-submit-panel-operation-inner[data-v-1505775a]{display:flex;align-items:center;gap:8px;padding:10px 12px}.form-submit-panel .el-affix--fixed .form-submit-panel-operation-inner[data-v-1505775a]{background-color:var(--dc-core-body-color)}.form-submit-panel_bottom-center .form-submit-panel-operation-inner[data-v-1505775a],.form-submit-panel_bottom-right .form-submit-panel-operation-inner[data-v-1505775a]{border-top:1px solid var(--el-border-color-light);border-bottom-left-radius:var(--dc-core-radius, var(--el-border-radius-base));border-bottom-right-radius:var(--dc-core-radius, var(--el-border-radius-base))}.form-submit-panel_bottom-center .form-submit-panel-operation-inner[data-v-1505775a]{justify-content:center}.form-submit-panel_bottom-right .form-submit-panel-operation-inner[data-v-1505775a]{justify-content:flex-end}.form-submit-panel_top-right .form-submit-panel-operation[data-v-1505775a]{order:0}.form-submit-panel_top-right .form-submit-panel-operation-inner[data-v-1505775a]{justify-content:flex-end;border-bottom:1px solid var(--el-border-color-light);border-top-left-radius:var(--dc-core-radius, var(--el-border-radius-base));border-top-right-radius:var(--dc-core-radius, var(--el-border-radius-base))}.form-submit-panel_no-divider .form-submit-panel-operation-inner[data-v-1505775a]{border:none;border-radius:0}.form-submit-panel_bare .form-submit-panel-operation-inner[data-v-1505775a]{padding:0}.panel-edit-switch[data-v-65f056ab]{position:relative}.panel-edit-switch:hover .panel-edit-switch-edit-btn[data-v-65f056ab]{display:block}.panel-edit-switch-edit-btn[data-v-65f056ab]{position:absolute;top:0;right:0;z-index:1;display:none}.panel-edit-switch-actions[data-v-65f056ab]{display:flex;justify-content:flex-end;gap:8px;margin-top:8px}.panel-main-item-col:not(:last-of-type) .panel-main-item-col-wrap_card[data-v-9e060e8b]{margin-bottom:var(--v6dd4af74)}.form-search_show[data-v-eb50264d]{margin-bottom:10px}.form-search .btn-box[data-v-eb50264d]{display:flex;align-items:center;gap:8px;justify-content:flex-end}.form-search .btn-box-expand-icon[data-v-eb50264d]{margin-right:2px}.form-verify-image[data-v-7a70397e] .el-input__suffix-inner *{margin:0}.form-verify-image-suffix[data-v-7a70397e]{position:absolute;height:100%;border-radius:var(--el-input-border-radius, var(--dc-core-radius, var(--el-border-radius-base)));top:50%;transform:translateY(-50%);overflow:hidden;cursor:pointer}.form-verify-image-suffix-main[data-v-7a70397e]{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#f4f4f4}.tabs-main-bar[data-v-6b4fc73b]{position:relative;display:flex;align-items:center}.tabs-main-bar-item[data-v-6b4fc73b]{border:none;background:transparent;cursor:pointer;color:var(--el-text-color-regular);transition:background .2s,color .2s,box-shadow .2s}.tabs-main-bar-indicator[data-v-6b4fc73b]{position:absolute;left:0;background:var(--dc-core-primary-color);transition:transform .2s,width .2s}.tabs-main-bar--l1 .tabs-main-bar-item[data-v-6b4fc73b]{font-size:16px}.tabs-main-bar--l2 .tabs-main-bar-item[data-v-6b4fc73b]{font-size:14px}.tabs-main-bar--l3 .tabs-main-bar-item[data-v-6b4fc73b],.tabs-main-bar--l4 .tabs-main-bar-item[data-v-6b4fc73b]{font-size:12px}.tabs-main-bar--variant-card[data-v-6b4fc73b]{position:relative;overflow:hidden;gap:2px}.tabs-main-bar--variant-card .tabs-main-bar-item[data-v-6b4fc73b]{position:relative;padding:8px 20px;line-height:1.4;border:1px solid transparent;border-bottom:0;border-radius:6px 6px 0 0}.tabs-main-bar--variant-card .tabs-main-bar-item[data-v-6b4fc73b]:hover:not(.tabs-main-bar-item_active){color:var(--dc-core-primary-color)}.tabs-main-bar--variant-card .tabs-main-bar-item_active[data-v-6b4fc73b]{color:var(--dc-core-primary-color);border-color:var(--el-border-color-light)}.tabs-main-bar--variant-card .tabs-main-bar-item_active[data-v-6b4fc73b]:before,.tabs-main-bar--variant-card .tabs-main-bar-item_active[data-v-6b4fc73b]:after{content:"";position:absolute;bottom:0;width:100vw;height:1px;background:var(--el-border-color-light)}.tabs-main-bar--variant-card .tabs-main-bar-item_active[data-v-6b4fc73b]:before{right:100%}.tabs-main-bar--variant-card .tabs-main-bar-item_active[data-v-6b4fc73b]:after{left:100%}.tabs-main-bar--variant-indicator .tabs-main-bar-item[data-v-6b4fc73b]{padding:8px 16px}.tabs-main-bar--variant-indicator .tabs-main-bar-item_active[data-v-6b4fc73b]{color:var(--dc-core-primary-color)}.tabs-main-bar--variant-indicator .tabs-main-bar-indicator[data-v-6b4fc73b]{bottom:0;height:2px}.tabs-main-bar--variant-indicator-compact .tabs-main-bar-item[data-v-6b4fc73b]{padding:6px 10px}.tabs-main-bar--variant-indicator-compact .tabs-main-bar-item_active[data-v-6b4fc73b]{color:var(--dc-core-primary-color)}.tabs-main-bar--variant-indicator-compact .tabs-main-bar-indicator[data-v-6b4fc73b]{bottom:0;height:1px}.tabs-main-bar--variant-plain .tabs-main-bar-item[data-v-6b4fc73b]{padding:4px 8px}.tabs-main-bar--variant-plain .tabs-main-bar-item_active[data-v-6b4fc73b]{color:var(--dc-core-primary-color);font-weight:600}.dc-tabs-tile--nav-absolute[data-v-39fad9e5],.dc-tabs-tile--nav-fixed[data-v-39fad9e5]{position:relative}.dc-tabs-tile--nav-sticky[data-v-39fad9e5]{display:flex;flex-direction:column}.dc-tabs-tile__scroll[data-v-39fad9e5]{display:flex;flex-direction:column;gap:12px}.dc-tabs-tile__card[data-v-39fad9e5]{width:100%}.dc-tabs-tile__nav[data-v-39fad9e5]{z-index:2;max-height:60%;overflow:auto;padding:6px 10px;width:fit-content;border-radius:var(--dc-core-radius, 6px);background:var(--dc-core-surface, var(--el-bg-color-overlay));box-shadow:var(--dc-core-shadow, var(--el-box-shadow-lighter));border:1px solid var(--dc-core-border-color, var(--el-border-color-lighter))}.app-collapse-toggle[data-v-10c7e006]{position:absolute;top:50%;cursor:pointer;width:14px;height:44px;border-radius:7px;background-color:var(--dc-core-surface, var(--el-bg-color-overlay));border:1px solid var(--dc-core-border-color, var(--el-border-color-lighter));color:var(--el-text-color-secondary);display:flex;align-items:center;justify-content:center;font-size:12px;z-index:1;opacity:.3;box-shadow:none;transition:opacity .2s ease,color .2s ease,border-color .2s ease,box-shadow .2s ease}.app-collapse-toggle--sidebar[data-v-10c7e006]{left:100%;transform:translate(-50%,-50%)}.app-collapse-toggle--aside[data-v-10c7e006]{right:100%;transform:translate(50%,-50%)}.app-collapse-toggle[data-v-10c7e006]:hover,.app-collapse-toggle[data-v-10c7e006]:focus-visible{opacity:1;color:var(--el-text-color-primary);border-color:var(--dc-core-border-color, var(--el-border-color));box-shadow:var(--el-box-shadow-lighter)}.app-collapse-toggle[data-v-10c7e006]:active{border-color:var(--dc-core-primary-color, var(--el-color-primary))}.app-collapse-toggle__icon[data-v-10c7e006]{transition:transform .3s}.app-aside[data-v-7e17d342]{transition:width var(--dc-core-motion-duration-slow, .3s) var(--dc-core-motion-easing, ease);box-shadow:var(--dc-core-shadow, var(--el-box-shadow));overflow:visible;z-index:0}.app-aside-clip[data-v-7e17d342]{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.app-aside-shim[data-v-7e17d342]{position:absolute;right:0;top:0;bottom:0;overflow-x:hidden;overflow-y:auto;transition:opacity var(--dc-core-motion-duration, .2s) var(--dc-core-motion-easing, ease)}@media (prefers-reduced-motion: reduce){.app-aside[data-v-7e17d342],.app-aside-shim[data-v-7e17d342]{transition:none}}.app-breadcrumb[data-v-9bbe0b05]{display:flex;align-items:center;justify-content:flex-start}.app-body[data-v-c593275f]{transition-duration:.3s;transition-property:padding;transition-timing-function:linear;min-height:100vh}.app-body-shim[data-v-c593275f]{width:100%;--app-viewport-max-height: var(--v513aac26)}.app-footer[data-v-8960664d]{transition-duration:.3s;transition-property:height;transition-timing-function:linear;overflow:hidden;width:100%;box-shadow:var(--dc-core-shadow, var(--el-box-shadow))}.app-footer-shim[data-v-8960664d]{width:100%;height:100%;padding:0 20px}.app-header[data-v-c78820aa]{transition-duration:.3s;transition-property:height;transition-timing-function:linear;overflow:hidden;box-shadow:var(--dc-core-shadow, var(--el-box-shadow));z-index:1}.app-header-module[data-v-c78820aa]{display:flex;flex:1;height:100%;overflow-x:auto}.app-header-module-item[data-v-c78820aa]{display:flex;justify-content:center;align-items:center;padding:0 20px;white-space:nowrap;height:100%}.app-header-module-item[data-v-c78820aa]:hover,.app-header-module-item_active[data-v-c78820aa]{color:var(--v8834c284)}.app-header-module-item_active[data-v-c78820aa]{position:relative}.app-header-module-item_active[data-v-c78820aa]:before{content:"";position:absolute;left:50%;top:0;width:100%;height:3px;background-color:var(--v8834c284);transform:translate(-50%)}.app-header-shim[data-v-c78820aa]{width:100%;height:100%;display:flex;align-items:center;justify-content:space-between;padding:0 20px;font-size:18px;font-weight:700}.app-header-module-item__icon[data-v-c78820aa]{margin-right:8px}.app-header-right[data-v-c78820aa]{padding-left:80px;display:flex;align-items:center}.app-sidebar[data-v-8aa015fb]{transition-duration:.3s;transition-property:width;transition-timing-function:linear;box-shadow:var(--dc-core-shadow, var(--el-box-shadow));overflow:visible;z-index:var(--v3ceb1df4)}.app-sidebar-top[data-v-8aa015fb]{position:absolute;left:0;right:0;top:0;overflow:hidden}.app-sidebar-bottom[data-v-8aa015fb]{position:absolute;left:0;right:0;bottom:0;overflow:hidden}.app-sidebar-shim[data-v-8aa015fb]{position:absolute;left:0;right:0;top:var(--v2c8b87ee);bottom:var(--baa8be1c);overflow-x:hidden;overflow-y:auto;--el-menu-border-color: transparent;-webkit-user-select:none;user-select:none}.app-theme[data-v-06ca4822]{display:inline-flex;align-items:center;gap:12px;margin-right:12px}.app-theme__style-select[data-v-06ca4822]{width:120px}.app-layout[data-v-f6f87b30]{position:relative}.app-layout_noLogin[data-v-f6f87b30] .app-body,.app-layout_noLogin[data-v-f6f87b30] .app-sidebar,.app-layout_noLogin[data-v-f6f87b30] .app-header,.app-layout_noLogin[data-v-f6f87b30] .app-footer{transition:none!important}.app-page[data-v-6ba4ec25]{--dc-page-content-viewport-top: var(--v0f6d6f31);--dc-page-content-viewport-bottom: var(--v314acecf);--dc-page-content-viewport-left: var(--v4386a4aa);--dc-page-content-viewport-right: var(--v2ca12e10);--dc-page-content-viewport-width: var(--v2c1456bc);--dc-page-content-viewport-height: var(--v3af5c5cb)}.app-page-shim[data-v-6ba4ec25]{--app-viewport-max-height: var(--v1911457e)}.app-page-slot-shim[data-v-6ba4ec25]{box-sizing:border-box;width:100%;height:100%}[data-v-64f355fe] .auto-refresh-label{display:flex;font-size:13px;color:var(--el-text-color-regular);margin-bottom:8px}.auto-refresh-group-icon--rotating[data-v-e608ff06]{animation:auto-refresh-rotating-e608ff06 1s linear infinite}@keyframes auto-refresh-rotating-e608ff06{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.form-item-nest-form[data-v-a413a382],.form-item-nest-form-list[data-v-68118cbf]{padding:16px;border:1px solid var(--dc-core-border-color);border-radius:8px;box-shadow:var(--dc-core-shadow, var(--el-box-shadow-lighter))}.form-item-nest-form-list-row[data-v-68118cbf]{display:flex;align-items:flex-start;gap:8px;margin-bottom:12px}.form-item-nest-form-list-row-body[data-v-68118cbf]{flex:1;min-width:0;padding:12px 16px;border:1px solid var(--el-border-color-lighter);border-radius:6px;box-shadow:var(--el-box-shadow-lighter)}.table-toolbar[data-v-0175f1a9]{display:flex;justify-content:space-between;align-items:center;padding-bottom:8px;gap:20px}.table-toolbar-left[data-v-0175f1a9],.table-toolbar-right[data-v-0175f1a9]{display:flex;align-items:center;gap:10px}.table-toolbar-switch-view[data-v-0175f1a9]{--el-switch-off-color: var(--dc-core-primary-color);--el-switch-on-color: var(--dc-core-warning-color)}.data-list-view[data-v-c66e599d]{width:100%}.data-list-view-empty[data-v-c66e599d]{display:flex;justify-content:center;align-items:center;width:100%;min-height:60px;grid-column:1 / -1}.table-main-pagination[data-v-e8584319]{margin-top:10px;display:flex;justify-content:flex-end}.dc-slot-layout-flow-aside_separate[data-v-5c6ef74b]{position:relative}.dc-slot-layout-flow-aside_separate_left[data-v-5c6ef74b]{padding-left:calc(var(--v88700944) - 1px)}.dc-slot-layout-flow-aside_separate_right[data-v-5c6ef74b]{padding-right:calc(var(--v88700944) - 1px)}.dc-slot-layout-flow-aside-aside[data-v-5c6ef74b]{width:var(--v88700944)}.dc-slot-layout-flow-aside-aside_left[data-v-5c6ef74b],.dc-slot-layout-flow-aside-aside_right[data-v-5c6ef74b]{position:absolute;top:0;max-height:min(100%,var(--v23b7c943));overflow-y:auto}.dc-slot-layout-flow-aside-aside_left[data-v-5c6ef74b]{left:0}.dc-slot-layout-flow-aside-aside_right[data-v-5c6ef74b]{right:0}.dc-slot-layout-flow-aside-main[data-v-5c6ef74b]{width:var(--v7e1d11ca)}.list-page[data-v-386c1374]{min-height:var(--v4d27171c)}.list-page-header[data-v-386c1374],.list-page-operation[data-v-386c1374]{margin-bottom:10px}.list-page[data-v-386c1374] .el-loading-mask{left:-10px;top:-10px;right:-10px;bottom:-10px}.panel-item-nest-form-actions[data-v-3af1d77a]{display:flex;justify-content:flex-end;gap:8px;margin-top:8px}
@@ -0,0 +1,12 @@
1
+ function n(e) {
2
+ let t = e == null ? void 0 : e.parentElement;
3
+ for (; t && t !== document.body && t !== document.documentElement; ) {
4
+ const { overflowY: o } = getComputedStyle(t);
5
+ if (/(auto|scroll|overlay)/.test(o) && t.scrollHeight > t.clientHeight)
6
+ return t;
7
+ t = t.parentElement;
8
+ }
9
+ }
10
+ export {
11
+ n as domClosestScrollableAncestor
12
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@done-coding/admin-core",
3
- "version": "0.15.0",
3
+ "version": "0.15.1-alpha.0",
4
4
  "description": "内部前端库",
5
5
  "private": false,
6
6
  "main": "es/index.mjs",
@@ -79,5 +79,5 @@
79
79
  "node": ">=18.0.0",
80
80
  "pnpm": ">=9.0.0"
81
81
  },
82
- "gitHead": "7d179dea7908d195d126a6ff9d0a1072cd5a3c44"
82
+ "gitHead": "84d8263af2b77d19e0c79464b83d01225fb3f853"
83
83
  }
@@ -11,6 +11,21 @@ export interface AppPageSlotStyles {
11
11
  left: CSSProperties;
12
12
  right: CSSProperties;
13
13
  }
14
+ export interface AppPageContentInset {
15
+ top: number;
16
+ bottom: number;
17
+ left: number;
18
+ right: number;
19
+ }
20
+ export interface AppPageSlotSizes {
21
+ topH: number;
22
+ bottomH: number;
23
+ leftW: number;
24
+ rightW: number;
25
+ }
26
+ export declare function computeAppPageReducedViewportHeight(bodyViewportHeight: number, slotSizes: AppPageSlotSizes, shimPadding: number): number;
27
+ export declare function computeAppPageReducedViewportWidth(pageBoxWidth: number, slotSizes: AppPageSlotSizes, shimPadding: number): number;
28
+ export declare function computeAppPageContentInset(appInset: AppPageContentInset, slotSizes: AppPageSlotSizes, gap: number): AppPageContentInset;
14
29
  export declare const APP_PAGE_SLOT_Z_INDEX = 1;
15
30
  export declare function computeAppPageSlotStyles(rect: AppPageRectInset, topH: number, bottomH: number): AppPageSlotStyles;
16
31
  export declare function computeAppPageSlotShimStyles(sp: number, gap: number): AppPageSlotStyles;
@@ -0,0 +1,208 @@
1
+ import { nextTick } from 'vue';
2
+ import { TabsMainItem, TabsMainTileNavMode, TabsMainTileNavPosition } from './types';
3
+ type __VLS_Props = {
4
+ tabs: TabsMainItem[];
5
+ refine?: boolean;
6
+ viewportHeight?: number;
7
+ minHeight?: number;
8
+ parentChannel?: string;
9
+ navPosition?: TabsMainTileNavPosition;
10
+ navMode?: TabsMainTileNavMode;
11
+ navOffset?: number;
12
+ };
13
+ type __VLS_PublicProps = {
14
+ modelValue?: string;
15
+ } & __VLS_Props;
16
+ declare function __VLS_template(): {
17
+ attrs: Partial<{}>;
18
+ slots: Partial<Record<`header-${string}`, (_: {
19
+ tab: TabsMainItem;
20
+ active: boolean;
21
+ }) => any>> & Partial<Record<string, (_: {
22
+ tab: TabsMainItem;
23
+ active: boolean;
24
+ }) => any>>;
25
+ refs: {
26
+ scrollRootRef: HTMLDivElement;
27
+ anchorRef: ({
28
+ $: import('vue').ComponentInternalInstance;
29
+ $data: {};
30
+ $props: {
31
+ readonly container?: (string | HTMLElement | Window | null) | undefined;
32
+ readonly offset?: number | undefined;
33
+ readonly bound?: number | undefined;
34
+ readonly duration?: number | undefined;
35
+ readonly marker?: boolean | undefined;
36
+ readonly type?: "default" | "underline" | undefined;
37
+ readonly direction?: "vertical" | "horizontal" | undefined;
38
+ readonly selectScrollTop?: boolean | undefined;
39
+ readonly onChange?: ((href: string) => any) | undefined | undefined;
40
+ readonly onClick?: ((e: MouseEvent, href?: string | undefined) => any) | undefined | undefined;
41
+ } & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps;
42
+ $attrs: import('vue').Attrs;
43
+ $refs: {
44
+ [x: string]: unknown;
45
+ };
46
+ $slots: Readonly<{
47
+ [name: string]: import('vue').Slot<any> | undefined;
48
+ }>;
49
+ $root: import('vue').ComponentPublicInstance | null;
50
+ $parent: import('vue').ComponentPublicInstance | null;
51
+ $host: Element | null;
52
+ $emit: ((event: "change", href: string) => void) & ((event: "click", e: MouseEvent, href?: string | undefined) => void);
53
+ $el: any;
54
+ $options: import('vue').ComponentOptionsBase<Readonly<import('element-plus').AnchorProps> & Readonly<{
55
+ onChange?: ((href: string) => any) | undefined;
56
+ onClick?: ((e: MouseEvent, href?: string | undefined) => any) | undefined;
57
+ }>, {
58
+ scrollTo: (href?: string) => void;
59
+ }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
60
+ change: (href: string) => void;
61
+ click: (e: MouseEvent, href?: string | undefined) => void;
62
+ }, string, {
63
+ offset: number;
64
+ type: "default" | "underline";
65
+ direction: "vertical" | "horizontal";
66
+ marker: boolean;
67
+ duration: number;
68
+ bound: number;
69
+ }, {}, string, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, import('vue').ComponentProvideOptions> & {
70
+ beforeCreate?: (() => void) | (() => void)[];
71
+ created?: (() => void) | (() => void)[];
72
+ beforeMount?: (() => void) | (() => void)[];
73
+ mounted?: (() => void) | (() => void)[];
74
+ beforeUpdate?: (() => void) | (() => void)[];
75
+ updated?: (() => void) | (() => void)[];
76
+ activated?: (() => void) | (() => void)[];
77
+ deactivated?: (() => void) | (() => void)[];
78
+ beforeDestroy?: (() => void) | (() => void)[];
79
+ beforeUnmount?: (() => void) | (() => void)[];
80
+ destroyed?: (() => void) | (() => void)[];
81
+ unmounted?: (() => void) | (() => void)[];
82
+ renderTracked?: ((e: import('vue').DebuggerEvent) => void) | ((e: import('vue').DebuggerEvent) => void)[];
83
+ renderTriggered?: ((e: import('vue').DebuggerEvent) => void) | ((e: import('vue').DebuggerEvent) => void)[];
84
+ errorCaptured?: ((err: unknown, instance: import('vue').ComponentPublicInstance | null, info: string) => boolean | void) | ((err: unknown, instance: import('vue').ComponentPublicInstance | null, info: string) => boolean | void)[];
85
+ };
86
+ $forceUpdate: () => void;
87
+ $nextTick: typeof nextTick;
88
+ $watch<T extends string | ((...args: any) => any)>(source: T, cb: T extends (...args: any) => infer R ? (...args: [R, R, import('@vue/reactivity').OnCleanup]) => any : (...args: [any, any, import('@vue/reactivity').OnCleanup]) => any, options?: import('vue').WatchOptions): import('vue').WatchStopHandle;
89
+ } & Readonly<{
90
+ offset: number;
91
+ type: "default" | "underline";
92
+ direction: "vertical" | "horizontal";
93
+ marker: boolean;
94
+ duration: number;
95
+ bound: number;
96
+ }> & Omit<Readonly<import('element-plus').AnchorProps> & Readonly<{
97
+ onChange?: ((href: string) => any) | undefined;
98
+ onClick?: ((e: MouseEvent, href?: string | undefined) => any) | undefined;
99
+ }>, "type" | "offset" | "marker" | "bound" | "duration" | "direction" | "scrollTo"> & {
100
+ scrollTo: (href?: string) => void;
101
+ } & {} & import('vue').ComponentCustomProperties & {} & {
102
+ $slots: {
103
+ default?: (props: {}) => any;
104
+ };
105
+ }) | null;
106
+ };
107
+ rootEl: HTMLDivElement;
108
+ };
109
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
110
+ declare const __VLS_component: import('vue').DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
111
+ "update:modelValue": (value: string) => any;
112
+ }, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
113
+ "onUpdate:modelValue"?: ((value: string) => any) | undefined;
114
+ }>, {
115
+ minHeight: number;
116
+ refine: boolean;
117
+ navPosition: TabsMainTileNavPosition;
118
+ navMode: TabsMainTileNavMode;
119
+ navOffset: number;
120
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
121
+ scrollRootRef: HTMLDivElement;
122
+ anchorRef: ({
123
+ $: import('vue').ComponentInternalInstance;
124
+ $data: {};
125
+ $props: {
126
+ readonly container?: (string | HTMLElement | Window | null) | undefined;
127
+ readonly offset?: number | undefined;
128
+ readonly bound?: number | undefined;
129
+ readonly duration?: number | undefined;
130
+ readonly marker?: boolean | undefined;
131
+ readonly type?: "default" | "underline" | undefined;
132
+ readonly direction?: "vertical" | "horizontal" | undefined;
133
+ readonly selectScrollTop?: boolean | undefined;
134
+ readonly onChange?: ((href: string) => any) | undefined | undefined;
135
+ readonly onClick?: ((e: MouseEvent, href?: string | undefined) => any) | undefined | undefined;
136
+ } & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps;
137
+ $attrs: import('vue').Attrs;
138
+ $refs: {
139
+ [x: string]: unknown;
140
+ };
141
+ $slots: Readonly<{
142
+ [name: string]: import('vue').Slot<any> | undefined;
143
+ }>;
144
+ $root: import('vue').ComponentPublicInstance | null;
145
+ $parent: import('vue').ComponentPublicInstance | null;
146
+ $host: Element | null;
147
+ $emit: ((event: "change", href: string) => void) & ((event: "click", e: MouseEvent, href?: string | undefined) => void);
148
+ $el: any;
149
+ $options: import('vue').ComponentOptionsBase<Readonly<import('element-plus').AnchorProps> & Readonly<{
150
+ onChange?: ((href: string) => any) | undefined;
151
+ onClick?: ((e: MouseEvent, href?: string | undefined) => any) | undefined;
152
+ }>, {
153
+ scrollTo: (href?: string) => void;
154
+ }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
155
+ change: (href: string) => void;
156
+ click: (e: MouseEvent, href?: string | undefined) => void;
157
+ }, string, {
158
+ offset: number;
159
+ type: "default" | "underline";
160
+ direction: "vertical" | "horizontal";
161
+ marker: boolean;
162
+ duration: number;
163
+ bound: number;
164
+ }, {}, string, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, import('vue').ComponentProvideOptions> & {
165
+ beforeCreate?: (() => void) | (() => void)[];
166
+ created?: (() => void) | (() => void)[];
167
+ beforeMount?: (() => void) | (() => void)[];
168
+ mounted?: (() => void) | (() => void)[];
169
+ beforeUpdate?: (() => void) | (() => void)[];
170
+ updated?: (() => void) | (() => void)[];
171
+ activated?: (() => void) | (() => void)[];
172
+ deactivated?: (() => void) | (() => void)[];
173
+ beforeDestroy?: (() => void) | (() => void)[];
174
+ beforeUnmount?: (() => void) | (() => void)[];
175
+ destroyed?: (() => void) | (() => void)[];
176
+ unmounted?: (() => void) | (() => void)[];
177
+ renderTracked?: ((e: import('vue').DebuggerEvent) => void) | ((e: import('vue').DebuggerEvent) => void)[];
178
+ renderTriggered?: ((e: import('vue').DebuggerEvent) => void) | ((e: import('vue').DebuggerEvent) => void)[];
179
+ errorCaptured?: ((err: unknown, instance: import('vue').ComponentPublicInstance | null, info: string) => boolean | void) | ((err: unknown, instance: import('vue').ComponentPublicInstance | null, info: string) => boolean | void)[];
180
+ };
181
+ $forceUpdate: () => void;
182
+ $nextTick: typeof nextTick;
183
+ $watch<T extends string | ((...args: any) => any)>(source: T, cb: T extends (...args: any) => infer R ? (...args: [R, R, import('@vue/reactivity').OnCleanup]) => any : (...args: [any, any, import('@vue/reactivity').OnCleanup]) => any, options?: import('vue').WatchOptions): import('vue').WatchStopHandle;
184
+ } & Readonly<{
185
+ offset: number;
186
+ type: "default" | "underline";
187
+ direction: "vertical" | "horizontal";
188
+ marker: boolean;
189
+ duration: number;
190
+ bound: number;
191
+ }> & Omit<Readonly<import('element-plus').AnchorProps> & Readonly<{
192
+ onChange?: ((href: string) => any) | undefined;
193
+ onClick?: ((e: MouseEvent, href?: string | undefined) => any) | undefined;
194
+ }>, "type" | "offset" | "marker" | "bound" | "duration" | "direction" | "scrollTo"> & {
195
+ scrollTo: (href?: string) => void;
196
+ } & {} & import('vue').ComponentCustomProperties & {} & {
197
+ $slots: {
198
+ default?: (props: {}) => any;
199
+ };
200
+ }) | null;
201
+ }, HTMLDivElement>;
202
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
203
+ export default _default;
204
+ type __VLS_WithTemplateSlots<T, S> = T & {
205
+ new (): {
206
+ $slots: S;
207
+ };
208
+ };
@@ -54,6 +54,8 @@ export interface TabsChannelPayload {
54
54
  }
55
55
  export type TabsMainPadding = [number, number, number, number];
56
56
  export type TabsHeaderVariant = "card" | "indicator" | "indicator-compact" | "plain";
57
+ export type TabsMainTileNavPosition = "bottom-right" | "bottom-left" | "top-right" | "top-left";
58
+ export type TabsMainTileNavMode = "auto" | "absolute" | "sticky" | "fixed";
57
59
  export interface TabsMainProps {
58
60
  tabs: TabsMainItem[];
59
61
  viewportHeight?: number;
@@ -64,6 +66,11 @@ export interface TabsMainProps {
64
66
  refine?: boolean;
65
67
  refineReduceHeight?: number;
66
68
  variant?: TabsHeaderVariant;
69
+ queryKey?: string;
70
+ tile?: boolean;
71
+ navPosition?: TabsMainTileNavPosition;
72
+ navMode?: TabsMainTileNavMode;
73
+ navOffset?: number;
67
74
  }
68
75
  export type BooleanTagType = NonNullable<TagProps["type"]>;
69
76
  export interface BooleanTagProps {
@@ -0,0 +1,16 @@
1
+ import { Ref } from 'vue';
2
+ import { RouteLocationNormalizedLoaded, Router } from 'vue-router';
3
+ export declare function getTabQuery(route: RouteLocationNormalizedLoaded | undefined, queryKey: string | undefined): string | undefined;
4
+ export declare function writeTabQuery(params: {
5
+ activeKey: string | undefined;
6
+ route: RouteLocationNormalizedLoaded | undefined;
7
+ router: Router | undefined;
8
+ queryKey: string | undefined;
9
+ }): void;
10
+ export declare function watchTabToQuery(params: {
11
+ model: Ref<string | undefined>;
12
+ route: RouteLocationNormalizedLoaded | undefined;
13
+ router: Router | undefined;
14
+ queryKey: () => string | undefined;
15
+ ready: () => boolean;
16
+ }): void;
@@ -1,12 +1,19 @@
1
1
  import { ColProps } from 'element-plus';
2
2
  import { Breakpoint } from '../../hooks/use-breakpoint';
3
- export declare const computeItemsPerRow: (span: number) => number;
4
- export declare const computeButtonOffset: (visibleCount: number, span: number) => number;
5
- export declare const computeButtonColProps: (layout: Partial<ColProps> | undefined, visibleCount: number) => Record<string, {
6
- span: number;
7
- offset: number;
8
- }>;
9
3
  export declare const getCurrentSpan: (layout: Partial<ColProps> | undefined, breakpoint: Breakpoint) => number;
4
+ export declare const resolveSearchItemOccupancy: (merged: Partial<ColProps>, breakpoint: Breakpoint) => number;
5
+ export interface SearchGeometryOptions {
6
+ spans: number[];
7
+ buttonMinSpan: number;
8
+ maxRows: number;
9
+ collapsed: boolean;
10
+ }
11
+ export interface SearchGeometry {
12
+ showCount: number;
13
+ needsFold: boolean;
14
+ buttonSpan: number;
15
+ }
16
+ export declare const computeSearchGeometry: ({ spans, buttonMinSpan, maxRows, collapsed, }: SearchGeometryOptions) => SearchGeometry;
10
17
  export declare const resolveSearchLayout: (compact: boolean, layout: Partial<ColProps> | undefined, breakpoint: Breakpoint) => Partial<ColProps> | undefined;
11
18
  export declare const resolveSearchLabelPosition: <T extends "right" | "left" | "top" | undefined>(compact: boolean, labelPosition: T) => T | "top";
12
19
  export declare const packSearchFormList: <T extends Record<string, any>>(list: T[], options: {
@@ -43,6 +43,7 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}
43
43
  type: "" | "success" | "default" | "text" | "info" | "primary" | "warning" | "danger";
44
44
  reverse: boolean;
45
45
  width: number | string;
46
+ direction: "rtl" | "ltr" | "ttb" | "btt";
46
47
  showClose: boolean;
47
48
  cancelText: string | (() => VNode);
48
49
  confirmText: string | (() => VNode);
@@ -50,7 +51,6 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}
50
51
  closeOnPressEscape: boolean;
51
52
  closeOnClickModal: boolean;
52
53
  layerType: "modal" | "drawer";
53
- direction: "rtl" | "ltr" | "ttb" | "btt";
54
54
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
55
55
  declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
56
56
  export default _default;