@done-coding/admin-core 0.24.1-alpha.0 → 0.25.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 (69) hide show
  1. package/es/components/app-layout/AppPage.vue.mjs +1 -1
  2. package/es/components/app-layout/AppPage.vue2.mjs +42 -23
  3. package/es/components/app-layout/use-content-box.mjs +17 -0
  4. package/es/components/data-view/DataGridView.vue.mjs +1 -1
  5. package/es/components/data-view/DataGridView.vue2.mjs +34 -14
  6. package/es/components/data-view/DataListView.vue.mjs +1 -1
  7. package/es/components/data-view/DataListView.vue2.mjs +27 -7
  8. package/es/components/data-view/DataListViewItem.vue.mjs +1 -1
  9. package/es/components/data-view/DataListViewItem.vue2.mjs +3 -2
  10. package/es/components/list-layout/ListLayout.vue.mjs +1 -1
  11. package/es/components/list-layout/ListLayout.vue2.mjs +34 -11
  12. package/es/components/modal/ModalConfirm.vue.mjs +1 -1
  13. package/es/components/modal/ModalConfirm.vue2.mjs +67 -49
  14. package/es/components/page-layout/AppPageDetail.vue.mjs +7 -0
  15. package/es/components/page-layout/AppPageDetail.vue2.mjs +89 -0
  16. package/es/components/page-layout/AppPageListDetailLayout.vue.mjs +153 -0
  17. package/es/components/page-layout/AppPageListDetailLayout.vue2.mjs +4 -0
  18. package/es/components/page-layout/AppPageListDetailSheet.vue.mjs +96 -0
  19. package/es/components/page-layout/AppPageListDetailSheet.vue2.mjs +4 -0
  20. package/es/components/page-layout/AppPageListDetailSplit.vue.mjs +7 -0
  21. package/es/components/page-layout/AppPageListDetailSplit.vue2.mjs +83 -0
  22. package/es/components/page-layout/use-list-detail.mjs +110 -0
  23. package/es/components/panel/PanelEditSwitch.vue.mjs +1 -1
  24. package/es/components/table/TableMain.vue.mjs +1 -1
  25. package/es/components/table/TableMain.vue2.mjs +55 -5
  26. package/es/components/view-layout/ViewLayout.vue.mjs +1 -1
  27. package/es/components/view-layout/ViewLayout.vue2.mjs +34 -4
  28. package/es/components/view-layout/ViewLayoutNavigation.vue.mjs +7 -0
  29. package/es/components/view-layout/ViewLayoutNavigation.vue2.mjs +34 -0
  30. package/es/hooks/use-active-record.mjs +100 -0
  31. package/es/index.mjs +146 -141
  32. package/es/inject/key.mjs +4 -0
  33. package/es/style.css +129 -96
  34. package/package.json +2 -2
  35. package/src/components/app-layout/README.md +8 -1
  36. package/src/components/app-layout/docs/README-AppPage.md +48 -2
  37. package/src/components/data-view/docs/README-DataGridView.md +2 -1
  38. package/src/components/data-view/docs/README-DataListView.md +13 -4
  39. package/src/components/list-layout/docs/README-ListLayout.md +1 -1
  40. package/src/components/modal/docs/README-ModalConfirm.md +2 -0
  41. package/src/components/page-layout/README.md +47 -0
  42. package/src/components/page-layout/docs/README-AppPageDetail.md +57 -0
  43. package/src/components/page-layout/docs/README-AppPageListDetailLayout.md +142 -0
  44. package/src/components/table/docs/README-TableMain.md +1 -1
  45. package/src/components/view-layout/docs/README-ViewLayout.md +14 -0
  46. package/types/components/app-layout/AppPage.vue.d.ts +14 -0
  47. package/types/components/app-layout/use-content-box.d.ts +31 -0
  48. package/types/components/data-view/DataGridView.vue.d.ts +9 -2
  49. package/types/components/data-view/DataListView.vue.d.ts +10 -2
  50. package/types/components/data-view/DataListViewItem.vue.d.ts +4 -2
  51. package/types/components/data-view/types.d.ts +5 -1
  52. package/types/components/list-layout/ListLayout.vue.d.ts +7 -2
  53. package/types/components/modal/ModalConfirm.vue.d.ts +18 -0
  54. package/types/components/page-layout/AppPageDetail.vue.d.ts +40 -0
  55. package/types/components/page-layout/AppPageListDetailLayout.vue.d.ts +39 -0
  56. package/types/components/page-layout/AppPageListDetailSheet.vue.d.ts +44 -0
  57. package/types/components/page-layout/AppPageListDetailSplit.vue.d.ts +47 -0
  58. package/types/components/page-layout/index.d.ts +4 -0
  59. package/types/components/page-layout/types.d.ts +102 -0
  60. package/types/components/page-layout/use-list-detail.d.ts +58 -0
  61. package/types/components/panel/PanelEditSwitch.vue.d.ts +30 -0
  62. package/types/components/table/TableMain.vue.d.ts +9 -2
  63. package/types/components/view-layout/ViewLayoutNavigation.vue.d.ts +13 -0
  64. package/types/components/view-layout/types.d.ts +46 -0
  65. package/types/hooks/use-active-record.d.ts +64 -0
  66. package/types/index.d.ts +1 -0
  67. package/types/inject/key.d.ts +29 -0
  68. package/types/injectInfo.json.d.ts +1 -1
  69. package/types/types/utility-types.d.ts +17 -0
@@ -1,7 +1,7 @@
1
1
  import _sfc_main from "./ViewLayout.vue2.mjs";
2
2
  /* empty css */
3
3
  import _export_sfc from "../../_virtual/_plugin-vue_export-helper.mjs";
4
- const ViewLayout = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-c8a1cb2d"]]);
4
+ const ViewLayout = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-8eb550ba"]]);
5
5
  export {
6
6
  ViewLayout as default
7
7
  };
@@ -1,12 +1,13 @@
1
- import { defineComponent, shallowRef, ref, useModel, computed, provide, watch, withDirectives, openBlock, createElementBlock, unref, createBlock, withCtx, createElementVNode, normalizeStyle, renderSlot, createVNode, vShow, Fragment, mergeModels } from "vue";
1
+ import { defineComponent, shallowRef, ref, useModel, computed, inject, watch, provide, withDirectives, openBlock, createElementBlock, unref, createBlock, withCtx, createElementVNode, normalizeStyle, renderSlot, createVNode, createCommentVNode, vShow, Fragment, mergeModels } from "vue";
2
2
  import { vLoading } from "element-plus";
3
3
  import AutoRefreshGroup from "../misc/AutoRefreshGroup.vue.mjs";
4
4
  import _sfc_main$1 from "../display/HeightProvider.vue.mjs";
5
5
  import _sfc_main$2 from "../display/ActionBtnGroup.vue.mjs";
6
6
  import { useContextDefaults } from "../../hooks/use-context-defaults.mjs";
7
+ import ViewLayoutNavigation from "./ViewLayoutNavigation.vue.mjs";
7
8
  import { useChannelViewportHeight } from "../../hooks/use-channel-viewport-height.mjs";
9
+ import { APP_PAGE_LIST_DETAIL_CONTEXT, SCOPE_VIEWPORT_MAX_HEIGHT } from "../../inject/key.mjs";
8
10
  import { useActivated } from "../../hooks/activated.mjs";
9
- import { SCOPE_VIEWPORT_MAX_HEIGHT } from "../../inject/key.mjs";
10
11
  import { SlotRegion } from "../../config/slot-region.mjs";
11
12
  const _hoisted_1 = { class: "dc-view-layout view-layout" };
12
13
  const _hoisted_2 = { class: "view-layout-toolbar" };
@@ -21,6 +22,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
21
22
  props: /* @__PURE__ */ mergeModels({
22
23
  api: {},
23
24
  params: {},
25
+ refreshToken: {},
24
26
  refine: { type: Boolean, default: void 0 },
25
27
  viewportHeight: {},
26
28
  channel: {},
@@ -28,6 +30,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
28
30
  minHeight: { default: 100 },
29
31
  showAutoRefresh: { type: Boolean, default: true },
30
32
  showRefresh: { type: Boolean, default: true },
33
+ showNavigation: { type: Boolean, default: true },
31
34
  leftExtraButtons: { default: () => [] },
32
35
  rightExtraButtons: { default: () => [] }
33
36
  }, {
@@ -57,19 +60,38 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
57
60
  };
58
61
  const refresh = fetch;
59
62
  const showLoadingMask = computed(() => !isAutoRefresh.value && loading.value);
63
+ const listDetailCtx = inject(APP_PAGE_LIST_DETAIL_CONTEXT, void 0);
64
+ const showNavigationFinal = computed(
65
+ () => props.showNavigation && !!listDetailCtx
66
+ );
60
67
  const toolbarCtx = computed(() => ({
61
68
  loading: loading.value,
62
- refresh
69
+ refresh,
70
+ // 导航句柄下发给业务自定义按钮(如「保存并下一条」);无上下文时全为 undefined
71
+ hasPrev: listDetailCtx == null ? void 0 : listDetailCtx.hasPrev.value,
72
+ hasNext: listDetailCtx == null ? void 0 : listDetailCtx.hasNext.value,
73
+ index: listDetailCtx == null ? void 0 : listDetailCtx.index.value,
74
+ total: listDetailCtx == null ? void 0 : listDetailCtx.total.value,
75
+ goPrev: listDetailCtx == null ? void 0 : listDetailCtx.goPrev,
76
+ goNext: listDetailCtx == null ? void 0 : listDetailCtx.goNext,
77
+ refreshList: listDetailCtx == null ? void 0 : listDetailCtx.refreshList
63
78
  }));
64
79
  const hasToolbarContent = computed(
65
80
  () => {
66
81
  var _a, _b;
67
- return ((_a = props.leftExtraButtons) == null ? void 0 : _a.length) || ((_b = props.rightExtraButtons) == null ? void 0 : _b.length) || props.showAutoRefresh || props.showRefresh;
82
+ return ((_a = props.leftExtraButtons) == null ? void 0 : _a.length) || ((_b = props.rightExtraButtons) == null ? void 0 : _b.length) || props.showAutoRefresh || props.showRefresh || // [MUST] 纳入内置导航:否则「只有上下条、其余全关」的页面 toolbar 会被 v-show 整个隐藏
83
+ showNavigationFinal.value;
68
84
  }
69
85
  );
70
86
  useActivated((info) => {
71
87
  if (info.isActivated) fetch();
72
88
  });
89
+ watch(
90
+ () => props.refreshToken,
91
+ (token) => {
92
+ if (token !== void 0) fetch();
93
+ }
94
+ );
73
95
  const heightProviderViewportHeight = computed(() => viewportHeightFinal.value);
74
96
  const contentStyle = (available) => ({
75
97
  maxHeight: `${available}px`
@@ -108,6 +130,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
108
130
  }, null, 8, ["configs", "ctx"])
109
131
  ]),
110
132
  createElementVNode("div", _hoisted_4, [
133
+ showNavigationFinal.value ? (openBlock(), createBlock(ViewLayoutNavigation, {
134
+ key: 0,
135
+ ctx: unref(listDetailCtx)
136
+ }, null, 8, ["ctx"])) : createCommentVNode("", true),
111
137
  createVNode(unref(_sfc_main$2), {
112
138
  configs: __props.rightExtraButtons,
113
139
  ctx: toolbarCtx.value,
@@ -150,6 +176,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
150
176
  }, null, 8, ["configs", "ctx"])
151
177
  ]),
152
178
  createElementVNode("div", _hoisted_7, [
179
+ showNavigationFinal.value ? (openBlock(), createBlock(ViewLayoutNavigation, {
180
+ key: 0,
181
+ ctx: unref(listDetailCtx)
182
+ }, null, 8, ["ctx"])) : createCommentVNode("", true),
153
183
  createVNode(unref(_sfc_main$2), {
154
184
  configs: __props.rightExtraButtons,
155
185
  ctx: toolbarCtx.value,
@@ -0,0 +1,7 @@
1
+ import _sfc_main from "./ViewLayoutNavigation.vue2.mjs";
2
+ /* empty css */
3
+ import _export_sfc from "../../_virtual/_plugin-vue_export-helper.mjs";
4
+ const ViewLayoutNavigation = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-2fcd4cb2"]]);
5
+ export {
6
+ ViewLayoutNavigation as default
7
+ };
@@ -0,0 +1,34 @@
1
+ import { defineComponent, openBlock, createElementBlock, createVNode, unref, createElementVNode, toDisplayString } from "vue";
2
+ import { ArrowLeft, ArrowRight } from "@element-plus/icons-vue";
3
+ import _sfc_main$1 from "../display/ActionBtn.vue.mjs";
4
+ const _hoisted_1 = { class: "dc-view-layout-navigation view-layout-navigation" };
5
+ const _hoisted_2 = { class: "view-layout-navigation__index" };
6
+ const _sfc_main = /* @__PURE__ */ defineComponent({
7
+ ...{ name: "ViewLayoutNavigation" },
8
+ __name: "ViewLayoutNavigation",
9
+ props: {
10
+ ctx: {}
11
+ },
12
+ setup(__props) {
13
+ return (_ctx, _cache) => {
14
+ return openBlock(), createElementBlock("div", _hoisted_1, [
15
+ createVNode(unref(_sfc_main$1), {
16
+ size: "small",
17
+ icon: unref(ArrowLeft),
18
+ disabled: !__props.ctx.hasPrev.value,
19
+ onClick: __props.ctx.goPrev
20
+ }, null, 8, ["icon", "disabled", "onClick"]),
21
+ createElementVNode("span", _hoisted_2, toDisplayString(__props.ctx.index.value) + " / " + toDisplayString(__props.ctx.total.value), 1),
22
+ createVNode(unref(_sfc_main$1), {
23
+ size: "small",
24
+ icon: unref(ArrowRight),
25
+ disabled: !__props.ctx.hasNext.value,
26
+ onClick: __props.ctx.goNext
27
+ }, null, 8, ["icon", "disabled", "onClick"])
28
+ ]);
29
+ };
30
+ }
31
+ });
32
+ export {
33
+ _sfc_main as default
34
+ };
@@ -0,0 +1,100 @@
1
+ import { watch } from "vue";
2
+ import { useActivated } from "./activated.mjs";
3
+ const activeRecordValueOf = (row, rowKey) => typeof rowKey === "function" ? rowKey(row) : row[rowKey];
4
+ const normalizeActiveKey = (v) => String(v);
5
+ function useActiveRecord(options) {
6
+ const { data, keyOf, activeId, activeData, name } = options;
7
+ const enabled = () => {
8
+ var _a;
9
+ return ((_a = options.enabled) == null ? void 0 : _a.call(options)) ?? true;
10
+ };
11
+ let lastValidId;
12
+ let lastValidData;
13
+ const findRow = (id) => data().find(
14
+ (row) => normalizeActiveKey(keyOf(row)) === normalizeActiveKey(id)
15
+ );
16
+ const setActive = (row) => {
17
+ const id = row ? keyOf(row) : void 0;
18
+ lastValidId = id;
19
+ lastValidData = row;
20
+ activeId.value = id;
21
+ activeData.value = row;
22
+ };
23
+ const warnMissing = (what, shown) => {
24
+ console.warn(
25
+ `[${name}] ${what} ${shown} 不在当前列表数据内,已忽略。当前项 [MUST] 由列表内选择产生(不变式:先有列表,才有详情);深链请把 id 带进搜索条件筛出该条后再激活。`
26
+ );
27
+ };
28
+ const applyId = (id) => {
29
+ if (id === lastValidId) return;
30
+ if (id === void 0) {
31
+ lastValidData = void 0;
32
+ activeData.value = void 0;
33
+ return;
34
+ }
35
+ const row = findRow(id);
36
+ if (!row) {
37
+ warnMissing("activeId", `"${String(id)}"`);
38
+ activeId.value = lastValidId;
39
+ return;
40
+ }
41
+ lastValidId = id;
42
+ lastValidData = row;
43
+ activeData.value = row;
44
+ };
45
+ const applyData = (row) => {
46
+ if (row === lastValidData) return;
47
+ if (row === void 0) {
48
+ lastValidData = void 0;
49
+ lastValidId = void 0;
50
+ activeId.value = void 0;
51
+ return;
52
+ }
53
+ const id = keyOf(row);
54
+ if (!findRow(id)) {
55
+ warnMissing("activeData 对应的键", `"${String(id)}"`);
56
+ activeData.value = lastValidData;
57
+ return;
58
+ }
59
+ lastValidData = row;
60
+ lastValidId = id;
61
+ activeId.value = id;
62
+ };
63
+ watch(activeId, (id) => {
64
+ if (!enabled()) return;
65
+ applyId(id);
66
+ });
67
+ watch(activeData, (row) => {
68
+ if (!enabled()) return;
69
+ applyData(row);
70
+ });
71
+ useActivated((info) => {
72
+ if (!info.isActivated || !enabled()) return;
73
+ if (activeId.value !== void 0) applyId(activeId.value);
74
+ else if (activeData.value !== void 0) applyData(activeData.value);
75
+ });
76
+ watch(
77
+ () => data(),
78
+ () => {
79
+ if (!enabled()) return;
80
+ const id = activeId.value;
81
+ if (id === void 0) return;
82
+ const row = findRow(id);
83
+ if (row) {
84
+ lastValidData = row;
85
+ activeData.value = row;
86
+ return;
87
+ }
88
+ lastValidData = void 0;
89
+ lastValidId = void 0;
90
+ activeId.value = void 0;
91
+ activeData.value = void 0;
92
+ }
93
+ );
94
+ const isActive = (row) => activeId.value !== void 0 && normalizeActiveKey(keyOf(row)) === normalizeActiveKey(activeId.value);
95
+ return { isActive, setActive };
96
+ }
97
+ export {
98
+ activeRecordValueOf,
99
+ useActiveRecord
100
+ };
package/es/index.mjs CHANGED
@@ -1,85 +1,87 @@
1
1
  import { createCoreBridge } from "./bridge/index.mjs";
2
2
  import { default as default2 } from "./components/display/ActionBtn.vue.mjs";
3
3
  import { default as default3 } from "./components/display/ActionBtnGroup.vue.mjs";
4
- import { default as default4 } from "./components/display/BooleanTag.vue.mjs";
5
- import { default as default5, default as default6 } from "./components/modal/ModalDetail.vue.mjs";
6
- import { default as default7 } from "./components/form/FormInput.vue.mjs";
7
- import { default as default8 } from "./components/form/FormInputShadowClone.vue.mjs";
8
- import { default as default9, default as default10 } from "./components/modal/ModalForm.vue.mjs";
9
- import { default as default11 } from "./components/form/FormRadioGroup.vue.mjs";
10
- import { default as default12 } from "./components/form/FormSelect.vue.mjs";
11
- import { default as default13 } from "./components/form/FormSelectShadowClone.vue.mjs";
12
- import { default as default14 } from "./components/form/FormSubmitBtn.vue.mjs";
13
- import { default as default15 } from "./components/form/FormTree.vue.mjs";
14
- import { default as default16 } from "./components/form/FormVerifyCode.vue.mjs";
15
- import { default as default17 } from "./components/display/HeightProvider.vue.mjs";
16
- import { default as default18 } from "./components/modal/ImagePreviewTrigger.vue.mjs";
17
- import { default as default19 } from "./components/menu/MenuItemSub.vue.mjs";
18
- import { default as default20 } from "./components/menu/MenuTree.vue.mjs";
19
- import { default as default21 } from "./components/modal/ModalImagePreview.vue.mjs";
20
- import { default as default22 } from "./components/modal/ModalPorter.vue.mjs";
21
- import { default as default23 } from "./components/modal/ModalShelf.vue.mjs";
22
- import { default as default24 } from "./components/panel/PanelItemNestPanel.vue.mjs";
23
- import { default as default25 } from "./components/misc/SelectModule.vue.mjs";
24
- import { default as default26 } from "./components/display/ShadowClone.vue.mjs";
25
- import { default as default27 } from "./components/slot-layout/SlotLayoutTemplate.vue.mjs";
26
- import { default as default28 } from "./components/table/TableEmpty.vue.mjs";
27
- import { default as default29 } from "./components/display/TabsMain.vue.mjs";
28
- import { default as default30 } from "./components/misc/TriggerAutoImport.vue.mjs";
29
- import { default as default31 } from "./components/display/WatchSize.vue.mjs";
4
+ import { default as default4 } from "./components/page-layout/AppPageListDetailLayout.vue.mjs";
5
+ import { default as default5 } from "./components/display/BooleanTag.vue.mjs";
6
+ import { default as default6, default as default7 } from "./components/modal/ModalDetail.vue.mjs";
7
+ import { default as default8 } from "./components/form/FormInput.vue.mjs";
8
+ import { default as default9 } from "./components/form/FormInputShadowClone.vue.mjs";
9
+ import { default as default10, default as default11 } from "./components/modal/ModalForm.vue.mjs";
10
+ import { default as default12 } from "./components/form/FormRadioGroup.vue.mjs";
11
+ import { default as default13 } from "./components/form/FormSelect.vue.mjs";
12
+ import { default as default14 } from "./components/form/FormSelectShadowClone.vue.mjs";
13
+ import { default as default15 } from "./components/form/FormSubmitBtn.vue.mjs";
14
+ import { default as default16 } from "./components/form/FormTree.vue.mjs";
15
+ import { default as default17 } from "./components/form/FormVerifyCode.vue.mjs";
16
+ import { default as default18 } from "./components/display/HeightProvider.vue.mjs";
17
+ import { default as default19 } from "./components/modal/ImagePreviewTrigger.vue.mjs";
18
+ import { default as default20 } from "./components/menu/MenuItemSub.vue.mjs";
19
+ import { default as default21 } from "./components/menu/MenuTree.vue.mjs";
20
+ import { default as default22 } from "./components/modal/ModalImagePreview.vue.mjs";
21
+ import { default as default23 } from "./components/modal/ModalPorter.vue.mjs";
22
+ import { default as default24 } from "./components/modal/ModalShelf.vue.mjs";
23
+ import { default as default25 } from "./components/panel/PanelItemNestPanel.vue.mjs";
24
+ import { default as default26 } from "./components/misc/SelectModule.vue.mjs";
25
+ import { default as default27 } from "./components/display/ShadowClone.vue.mjs";
26
+ import { default as default28 } from "./components/slot-layout/SlotLayoutTemplate.vue.mjs";
27
+ import { default as default29 } from "./components/table/TableEmpty.vue.mjs";
28
+ import { default as default30 } from "./components/display/TabsMain.vue.mjs";
29
+ import { default as default31 } from "./components/misc/TriggerAutoImport.vue.mjs";
30
+ import { default as default32 } from "./components/display/WatchSize.vue.mjs";
30
31
  import { APP_API_LIST_MODEL_KEY_CONFIG } from "./config/list-model.mjs";
31
32
  import { APP_GLOBAL_IMAGE_PREVIEW_KEY, APP_GLOBAL_VIDEO_PREVIEW_KEY, GLOBAL_MODAL_REMOTE_KEY } from "./components/modal/modal-global-keys.mjs";
32
- import { APP_LAYOUT_APP_STORE_KEY, APP_LAYOUT_BRIDGE_KEY, APP_LAYOUT_USER_STORE_KEY, APP_PAGE_CONTENT_INSET, 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";
33
+ 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";
33
34
  import { APP_PAGE_SLOT_Z_INDEX, computeAppPageContentInset, computeAppPageReducedViewportHeight, computeAppPageReducedViewportWidth, computeAppPageSlotShimStyles, computeAppPageSlotStyles } from "./components/app-layout/app-page-geometry.mjs";
34
- import { default as default32 } from "./components/display/ActionConfirm.vue.mjs";
35
- import { default as default33 } from "./components/app-layout/AppAside.vue.mjs";
36
- import { default as default34 } from "./components/app-layout/AppBody.vue.mjs";
37
- import { default as default35 } from "./components/app-layout/AppBreadcrumb.vue.mjs";
38
- import { default as default36 } from "./components/app-layout/AppFooter.vue.mjs";
39
- import { default as default37 } from "./components/app-layout/AppHeader.vue.mjs";
40
- import { default as default38 } from "./components/app-layout/AppLayout.vue.mjs";
41
- import { default as default39 } from "./components/app-layout/AppPage.vue.mjs";
42
- import { default as default40 } from "./components/app-layout/AppSidebar.vue.mjs";
43
- import { default as default41 } from "./components/app-layout/AppTheme.vue.mjs";
44
- import { default as default42 } from "./components/misc/AutoRefresh.vue.mjs";
45
- import { default as default43 } from "./components/misc/AutoRefreshGroup.vue.mjs";
46
- import { default as default44 } from "./components/display/BadgeMark.vue.mjs";
35
+ import { default as default33 } from "./components/display/ActionConfirm.vue.mjs";
36
+ import { default as default34 } from "./components/app-layout/AppAside.vue.mjs";
37
+ import { default as default35 } from "./components/app-layout/AppBody.vue.mjs";
38
+ import { default as default36 } from "./components/app-layout/AppBreadcrumb.vue.mjs";
39
+ import { default as default37 } from "./components/app-layout/AppFooter.vue.mjs";
40
+ import { default as default38 } from "./components/app-layout/AppHeader.vue.mjs";
41
+ import { default as default39 } from "./components/app-layout/AppLayout.vue.mjs";
42
+ import { default as default40 } from "./components/app-layout/AppPage.vue.mjs";
43
+ import { default as default41 } from "./components/page-layout/AppPageDetail.vue.mjs";
44
+ import { default as default42 } from "./components/app-layout/AppSidebar.vue.mjs";
45
+ import { default as default43 } from "./components/app-layout/AppTheme.vue.mjs";
46
+ import { default as default44 } from "./components/misc/AutoRefresh.vue.mjs";
47
+ import { default as default45 } from "./components/misc/AutoRefreshGroup.vue.mjs";
48
+ import { default as default46 } from "./components/display/BadgeMark.vue.mjs";
47
49
  import { CORE_VIEWPORT_DECOR_ZINDEX_ABOVE, CORE_VIEWPORT_DECOR_ZINDEX_BELOW } from "./components/app-layout/viewport.mjs";
48
- import { default as default45, default as default46 } from "./components/modal/ModalConfirm.vue.mjs";
50
+ import { default as default47, default as default48 } from "./components/modal/ModalConfirm.vue.mjs";
49
51
  import { DC_SLOT_ATTR, SlotRegion, parseSlotRegion } from "./config/slot-region.mjs";
50
- import { default as default47 } from "./components/data-view/DataGridView.vue.mjs";
52
+ import { default as default49 } from "./components/data-view/DataGridView.vue.mjs";
51
53
  import { EXPORT_MAX_LIMIT, OPERATE_COLUMN_PROP, exportCSV, pickExportColumns } from "./utils/export.mjs";
52
54
  import { FORM_CONFIG_SELECT_ALL_VALUE, getConfirmPasswordRule, passwordRule, setFormComponentType } from "./helpers/form.mjs";
53
55
  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";
54
- import { default as default48 } from "./components/form/FormActiveFilter.vue.mjs";
55
- import { default as default49 } from "./components/form/FormItemNestForm.vue.mjs";
56
- import { default as default50 } from "./components/form/FormItemNestFormList.vue.mjs";
57
- import { default as default51 } from "./components/form/FormMain.vue.mjs";
58
- import { default as default52 } from "./components/form/FormSearch.vue.mjs";
59
- import { default as default53 } from "./components/form/FormShadowCloneDispatch.vue.mjs";
60
- import { default as default54 } from "./components/form/FormSortSwitch.vue.mjs";
61
- import { default as default55 } from "./components/form/FormSortSwitchGroup.vue.mjs";
62
- import { default as default56 } from "./components/form/FormSubmitPanel.vue.mjs";
63
- import { default as default57 } from "./components/form/FormUpload.vue.mjs";
64
- import { default as default58 } from "./components/form/FormUploadAudio.vue.mjs";
65
- import { default as default59 } from "./components/form/FormUploadImage.vue.mjs";
66
- import { default as default60 } from "./components/form/FormUploadVideo.vue.mjs";
67
- import { default as default61 } from "./components/form/FormVerifyImage.vue.mjs";
68
- import { default as default62 } from "./components/data-view/InfiniteListView.vue.mjs";
69
- import { default as default63, default as default64 } from "./components/list-layout/ListLayout.vue.mjs";
70
- import { default as default65 } from "./components/modal/ModalVideoPreview.vue.mjs";
71
- import { default as default66 } from "./components/panel/PanelEditSwitch.vue.mjs";
72
- import { default as default67 } from "./components/panel/PanelItem.vue.mjs";
73
- import { default as default68 } from "./components/panel/PanelItemNestForm.vue.mjs";
74
- import { default as default69 } from "./components/panel/PanelMain.vue.mjs";
56
+ import { default as default50 } from "./components/form/FormActiveFilter.vue.mjs";
57
+ import { default as default51 } from "./components/form/FormItemNestForm.vue.mjs";
58
+ import { default as default52 } from "./components/form/FormItemNestFormList.vue.mjs";
59
+ import { default as default53 } from "./components/form/FormMain.vue.mjs";
60
+ import { default as default54 } from "./components/form/FormSearch.vue.mjs";
61
+ import { default as default55 } from "./components/form/FormShadowCloneDispatch.vue.mjs";
62
+ import { default as default56 } from "./components/form/FormSortSwitch.vue.mjs";
63
+ import { default as default57 } from "./components/form/FormSortSwitchGroup.vue.mjs";
64
+ import { default as default58 } from "./components/form/FormSubmitPanel.vue.mjs";
65
+ import { default as default59 } from "./components/form/FormUpload.vue.mjs";
66
+ import { default as default60 } from "./components/form/FormUploadAudio.vue.mjs";
67
+ import { default as default61 } from "./components/form/FormUploadImage.vue.mjs";
68
+ import { default as default62 } from "./components/form/FormUploadVideo.vue.mjs";
69
+ import { default as default63 } from "./components/form/FormVerifyImage.vue.mjs";
70
+ import { default as default64 } from "./components/data-view/InfiniteListView.vue.mjs";
71
+ import { default as default65, default as default66 } from "./components/list-layout/ListLayout.vue.mjs";
72
+ import { default as default67 } from "./components/modal/ModalVideoPreview.vue.mjs";
73
+ import { default as default68 } from "./components/panel/PanelEditSwitch.vue.mjs";
74
+ import { default as default69 } from "./components/panel/PanelItem.vue.mjs";
75
+ import { default as default70 } from "./components/panel/PanelItemNestForm.vue.mjs";
76
+ import { default as default71 } from "./components/panel/PanelMain.vue.mjs";
75
77
  import { ROUTE_MODULE_LEVEL, TabsMainReplaceQueryKey } from "./config/route.mjs";
76
- import { default as default70 } from "./components/slot-layout/SlotLayoutFlowAside.vue.mjs";
78
+ import { default as default72 } from "./components/slot-layout/SlotLayoutFlowAside.vue.mjs";
77
79
  import { TABLE_COLUMN_KEY_OPERATE, TABLE_COLUMN_KEY_SELECTION } from "./components/table/constants.mjs";
78
- import { default as default71 } from "./components/table/TableMain.vue.mjs";
79
- import { default as default72 } from "./components/table/TableSkeleton.vue.mjs";
80
- import { default as default73 } from "./components/table/TableToolbar.vue.mjs";
81
- import { default as default74 } from "./components/modal/VideoPreviewTrigger.vue.mjs";
82
- import { default as default75 } from "./components/view-layout/ViewLayout.vue.mjs";
80
+ import { default as default73 } from "./components/table/TableMain.vue.mjs";
81
+ import { default as default74 } from "./components/table/TableSkeleton.vue.mjs";
82
+ import { default as default75 } from "./components/table/TableToolbar.vue.mjs";
83
+ import { default as default76 } from "./components/modal/VideoPreviewTrigger.vue.mjs";
84
+ import { default as default77 } from "./components/view-layout/ViewLayout.vue.mjs";
83
85
  import { buildRhythmCss, useCoreThemeApply } from "./hooks/use-theme-apply.mjs";
84
86
  import { checkLogin } from "./router/guard/login.mjs";
85
87
  import { checkPermission } from "./router/guard/permission.mjs";
@@ -122,103 +124,106 @@ export {
122
124
  APP_LAYOUT_BRIDGE_KEY,
123
125
  APP_LAYOUT_USER_STORE_KEY,
124
126
  APP_PAGE_CONTENT_INSET,
127
+ APP_PAGE_LIST_DETAIL_CONTEXT,
125
128
  APP_PAGE_SLOT_Z_INDEX,
126
129
  default2 as ActionBtn,
127
130
  default3 as ActionBtnGroup,
128
- default32 as ActionConfirm,
129
- default33 as AppAside,
130
- default34 as AppBody,
131
- default35 as AppBreadcrumb,
132
- default36 as AppFooter,
133
- default37 as AppHeader,
134
- default38 as AppLayout,
135
- default39 as AppPage,
136
- default40 as AppSidebar,
137
- default41 as AppTheme,
138
- default42 as AutoRefresh,
139
- default43 as AutoRefreshGroup,
131
+ default33 as ActionConfirm,
132
+ default34 as AppAside,
133
+ default35 as AppBody,
134
+ default36 as AppBreadcrumb,
135
+ default37 as AppFooter,
136
+ default38 as AppHeader,
137
+ default39 as AppLayout,
138
+ default40 as AppPage,
139
+ default41 as AppPageDetail,
140
+ default4 as AppPageListDetailLayout,
141
+ default42 as AppSidebar,
142
+ default43 as AppTheme,
143
+ default44 as AutoRefresh,
144
+ default45 as AutoRefreshGroup,
140
145
  BODY_CONTENT_VIEWPORT_HEIGHT,
141
146
  BODY_CONTENT_VIEWPORT_INSET,
142
147
  BODY_CONTENT_VIEWPORT_RECT,
143
- default44 as BadgeMark,
144
- default4 as BooleanTag,
148
+ default46 as BadgeMark,
149
+ default5 as BooleanTag,
145
150
  CORE_BRIDGE_KEY,
146
151
  CORE_VIEWPORT_DECOR_ZINDEX_ABOVE,
147
152
  CORE_VIEWPORT_DECOR_ZINDEX_BELOW,
148
- default45 as ConfirmModal,
153
+ default47 as ConfirmModal,
149
154
  DC_SLOT_ATTR,
150
- default47 as DataGridView,
151
- default5 as DetailModal,
155
+ default49 as DataGridView,
156
+ default6 as DetailModal,
152
157
  EXPORT_MAX_LIMIT,
153
158
  FORM_CONFIG_SELECT_ALL_VALUE,
154
159
  FORM_ITEM_CHANGE_LOADING,
155
160
  FORM_NEST_REGISTRY_KEY,
156
- default48 as FormActiveFilter,
157
- default7 as FormInput,
158
- default8 as FormInputShadowClone,
159
- default49 as FormItemNestForm,
160
- default50 as FormItemNestFormList,
161
- default51 as FormMain,
162
- default9 as FormModal,
163
- default11 as FormRadioGroup,
164
- default52 as FormSearch,
165
- default12 as FormSelect,
166
- default13 as FormSelectShadowClone,
167
- default53 as FormShadowCloneDispatch,
168
- default54 as FormSortSwitch,
169
- default55 as FormSortSwitchGroup,
170
- default14 as FormSubmitBtn,
171
- default56 as FormSubmitPanel,
172
- default15 as FormTree,
173
- default57 as FormUpload,
174
- default58 as FormUploadAudio,
175
- default59 as FormUploadImage,
176
- default60 as FormUploadVideo,
177
- default16 as FormVerifyCode,
178
- default61 as FormVerifyImage,
161
+ default50 as FormActiveFilter,
162
+ default8 as FormInput,
163
+ default9 as FormInputShadowClone,
164
+ default51 as FormItemNestForm,
165
+ default52 as FormItemNestFormList,
166
+ default53 as FormMain,
167
+ default10 as FormModal,
168
+ default12 as FormRadioGroup,
169
+ default54 as FormSearch,
170
+ default13 as FormSelect,
171
+ default14 as FormSelectShadowClone,
172
+ default55 as FormShadowCloneDispatch,
173
+ default56 as FormSortSwitch,
174
+ default57 as FormSortSwitchGroup,
175
+ default15 as FormSubmitBtn,
176
+ default58 as FormSubmitPanel,
177
+ default16 as FormTree,
178
+ default59 as FormUpload,
179
+ default60 as FormUploadAudio,
180
+ default61 as FormUploadImage,
181
+ default62 as FormUploadVideo,
182
+ default17 as FormVerifyCode,
183
+ default63 as FormVerifyImage,
179
184
  GLOBAL_MODAL_REMOTE_KEY,
180
- default17 as HeightProvider,
181
- default18 as ImagePreviewTrigger,
182
- default62 as InfiniteListView,
183
- default63 as ListLayout,
184
- default64 as ListPage,
185
- default19 as MenuItemSub,
186
- default20 as MenuTree,
187
- default46 as ModalConfirm,
188
- default6 as ModalDetail,
189
- default10 as ModalForm,
190
- default21 as ModalImagePreview,
191
- default22 as ModalPorter,
192
- default23 as ModalShelf,
193
- default65 as ModalVideoPreview,
185
+ default18 as HeightProvider,
186
+ default19 as ImagePreviewTrigger,
187
+ default64 as InfiniteListView,
188
+ default65 as ListLayout,
189
+ default66 as ListPage,
190
+ default20 as MenuItemSub,
191
+ default21 as MenuTree,
192
+ default48 as ModalConfirm,
193
+ default7 as ModalDetail,
194
+ default11 as ModalForm,
195
+ default22 as ModalImagePreview,
196
+ default23 as ModalPorter,
197
+ default24 as ModalShelf,
198
+ default67 as ModalVideoPreview,
194
199
  NEST_LAYOUT_SCALE_KEY,
195
200
  NEST_LAYOUT_TIERS,
196
201
  OPERATE_COLUMN_PROP,
197
- default66 as PanelEditSwitch,
198
- default67 as PanelItem,
199
- default68 as PanelItemNestForm,
200
- default24 as PanelItemNestPanel,
201
- default69 as PanelMain,
202
+ default68 as PanelEditSwitch,
203
+ default69 as PanelItem,
204
+ default70 as PanelItemNestForm,
205
+ default25 as PanelItemNestPanel,
206
+ default71 as PanelMain,
202
207
  ROUTE_MODULE_LEVEL,
203
208
  SCOPE_VIEWPORT_MAX_HEIGHT,
204
- default25 as SelectModule,
205
- default26 as ShadowClone,
206
- default70 as SlotLayoutFlowAside,
207
- default27 as SlotLayoutTemplate,
209
+ default26 as SelectModule,
210
+ default27 as ShadowClone,
211
+ default72 as SlotLayoutFlowAside,
212
+ default28 as SlotLayoutTemplate,
208
213
  SlotRegion,
209
214
  TABLE_COLUMN_KEY_OPERATE,
210
215
  TABLE_COLUMN_KEY_SELECTION,
211
216
  TABS_MAIN_VISUAL_LEVEL,
212
- default28 as TableEmpty,
213
- default71 as TableMain,
214
- default72 as TableSkeleton,
215
- default73 as TableToolbar,
216
- default29 as TabsMain,
217
+ default29 as TableEmpty,
218
+ default73 as TableMain,
219
+ default74 as TableSkeleton,
220
+ default75 as TableToolbar,
221
+ default30 as TabsMain,
217
222
  TabsMainReplaceQueryKey,
218
- default30 as TriggerAutoImport,
219
- default74 as VideoPreviewTrigger,
220
- default75 as ViewLayout,
221
- default31 as WatchSize,
223
+ default31 as TriggerAutoImport,
224
+ default76 as VideoPreviewTrigger,
225
+ default77 as ViewLayout,
226
+ default32 as WatchSize,
222
227
  buildRhythmCss,
223
228
  ceilToTier,
224
229
  checkLogin,
package/es/inject/key.mjs CHANGED
@@ -41,11 +41,15 @@ const FORM_NEST_REGISTRY_KEY = Symbol.for(
41
41
  const NEST_LAYOUT_SCALE_KEY = Symbol.for(
42
42
  nsKey("NEST_LAYOUT_SCALE")
43
43
  );
44
+ const APP_PAGE_LIST_DETAIL_CONTEXT = Symbol.for(
45
+ nsKey("APP_PAGE_LIST_DETAIL_CONTEXT")
46
+ );
44
47
  export {
45
48
  APP_LAYOUT_APP_STORE_KEY,
46
49
  APP_LAYOUT_BRIDGE_KEY,
47
50
  APP_LAYOUT_USER_STORE_KEY,
48
51
  APP_PAGE_CONTENT_INSET,
52
+ APP_PAGE_LIST_DETAIL_CONTEXT,
49
53
  BODY_CONTENT_VIEWPORT_HEIGHT,
50
54
  BODY_CONTENT_VIEWPORT_INSET,
51
55
  BODY_CONTENT_VIEWPORT_RECT,