@done-coding/admin-core 0.8.2-alpha.0 → 0.8.3-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.
@@ -1,9 +1,10 @@
1
- import { ElButton as m } from "element-plus/es";
1
+ import { ElButton as l } from "element-plus/es";
2
2
  import "element-plus/es/components/base/style/css";
3
3
  import "element-plus/es/components/button/style/css";
4
- import { defineComponent as p, ref as u, computed as f, openBlock as y, createBlock as d, mergeProps as B, unref as b, withCtx as g, createTextVNode as x, toDisplayString as _ } from "vue";
5
- import k from "lodash/omit";
6
- const w = /* @__PURE__ */ p({
4
+ import { defineComponent as p, computed as u, openBlock as f, createBlock as d, mergeProps as B, unref as e, withCtx as y, createTextVNode as b, toDisplayString as g } from "vue";
5
+ import { useFormSubmit as x } from "./use-form-submit.mjs";
6
+ import F from "lodash/omit";
7
+ const h = /* @__PURE__ */ p({
7
8
  __name: "FormSubmitBtn",
8
9
  props: {
9
10
  size: {},
@@ -29,36 +30,29 @@ const w = /* @__PURE__ */ p({
29
30
  submitFn: {}
30
31
  },
31
32
  emits: ["success", "fail"],
32
- setup(a, { emit: s }) {
33
- const e = a, i = s, o = u(!1), r = f(
34
- () => k(e, ["formMainInstance", "submitText", "submitFn"])
35
- ), l = async () => {
36
- o.value = !0;
37
- const { formMainInstance: n } = e;
38
- try {
39
- await n.validate();
40
- const t = n.stringify();
41
- await e.submitFn(t), i("success", t);
42
- } catch (t) {
43
- i("fail", t);
44
- } finally {
45
- o.value = !1;
46
- }
47
- };
48
- return (n, t) => {
49
- const c = m;
50
- return y(), d(c, B(b(r), {
51
- loading: o.value,
52
- onClick: l
33
+ setup(n, { emit: a }) {
34
+ const o = n, i = a, s = u(
35
+ () => F(o, ["formMainInstance", "submitText", "submitFn"])
36
+ ), { submitting: m, submit: r } = x({
37
+ getFormMainInstance: () => o.formMainInstance,
38
+ submitFn: (t) => o.submitFn(t),
39
+ onSuccess: (t) => i("success", t),
40
+ onFail: (t) => i("fail", t)
41
+ });
42
+ return (t, _) => {
43
+ const c = l;
44
+ return f(), d(c, B(e(s), {
45
+ loading: e(m),
46
+ onClick: e(r)
53
47
  }), {
54
- default: g(() => [
55
- x(_(a.submitText), 1)
48
+ default: y(() => [
49
+ b(g(n.submitText), 1)
56
50
  ]),
57
51
  _: 1
58
- }, 16, ["loading"]);
52
+ }, 16, ["loading", "onClick"]);
59
53
  };
60
54
  }
61
55
  });
62
56
  export {
63
- w as default
57
+ h as default
64
58
  };
@@ -1,7 +1,7 @@
1
1
  import o from "./FormSubmitPanel.vue2.mjs";
2
2
  /* empty css */
3
3
  import t from "../../_virtual/_plugin-vue_export-helper.mjs";
4
- const a = /* @__PURE__ */ t(o, [["__scopeId", "data-v-d71ece49"]]);
4
+ const c = /* @__PURE__ */ t(o, [["__scopeId", "data-v-450cc756"]]);
5
5
  export {
6
- a as default
6
+ c as default
7
7
  };
@@ -1,10 +1,11 @@
1
- import { defineComponent as V, useAttrs as W, shallowRef as E, ref as R, computed as l, watch as B, openBlock as o, createElementBlock as T, normalizeClass as j, createVNode as g, mergeProps as m, unref as r, createSlots as z, renderList as G, withCtx as s, renderSlot as c, normalizeProps as H, guardReactiveProps as M, createBlock as u, resolveDynamicComponent as I, createElementVNode as L, createTextVNode as P, toDisplayString as h, createCommentVNode as x } from "vue";
2
- import { ElAffix as O } from "element-plus";
3
- import q from "./FormMain.vue.mjs";
4
- import J from "./FormSubmitBtn.vue.mjs";
5
- import D from "../display/ActionBtn.vue.mjs";
6
- import { parseFormData as K, generateFormData as Q } from "./utils.mjs";
7
- const U = { class: "form-submit-panel-operation-inner" }, nt = /* @__PURE__ */ V({
1
+ import { defineComponent as E, useAttrs as M, shallowRef as R, ref as T, computed as r, watch as P, openBlock as i, createElementBlock as j, normalizeClass as z, createVNode as G, mergeProps as c, unref as n, createSlots as H, renderList as I, withCtx as l, renderSlot as m, normalizeProps as L, guardReactiveProps as O, createBlock as u, resolveDynamicComponent as q, createElementVNode as J, createTextVNode as h, toDisplayString as C, createCommentVNode as D } from "vue";
2
+ import { ElAffix as K } from "element-plus";
3
+ import Q from "./FormMain.vue.mjs";
4
+ import U from "./FormSubmitBtn.vue.mjs";
5
+ import { useFormSubmit as X } from "./use-form-submit.mjs";
6
+ import F from "../display/ActionBtn.vue.mjs";
7
+ import { parseFormData as Y, generateFormData as Z } from "./utils.mjs";
8
+ const _ = { class: "form-submit-panel-operation-inner" }, lt = /* @__PURE__ */ E({
8
9
  name: "FormSubmitPanel",
9
10
  inheritAttrs: !1,
10
11
  __name: "FormSubmitPanel",
@@ -23,78 +24,97 @@ const U = { class: "form-submit-panel-operation-inner" }, nt = /* @__PURE__ */ V
23
24
  cancelBtn: {},
24
25
  resetBtn: {},
25
26
  operationPosition: { default: "bottom-center" },
26
- operationAffix: { type: [Boolean, Object], default: !1 }
27
+ operationAffix: { type: [Boolean, Object], default: !1 },
28
+ divider: { type: Boolean, default: !0 },
29
+ bare: { type: Boolean, default: !1 },
30
+ rootClass: {}
27
31
  },
28
32
  emits: ["cancel", "fail", "success", "parseDataChange"],
29
- setup(t, { emit: v }) {
30
- const a = t, n = v, k = W(), f = E(), i = R({}), C = (e) => e, S = l(() => f.value), w = l(() => a.operationAffix ? O : "div"), A = l(() => a.operationAffix ? typeof a.operationAffix == "object" ? a.operationAffix : { position: "bottom" } : {}), d = () => a.stringifyData ? K(a.stringifyData, a.list) : Q(a.list), b = () => n("cancel"), p = () => {
31
- i.value = d();
32
- }, F = (e) => n("success", e), $ = (e) => n("fail", e);
33
- return B(i, (e) => {
34
- n("parseDataChange", e);
35
- }), B(
36
- [() => a.stringifyData, () => a.list],
33
+ setup(a, { emit: S }) {
34
+ const t = a, o = S, k = M(), f = R(), s = T({}), x = (e) => e, b = r(() => f.value), $ = r(() => t.operationAffix ? K : "div"), w = r(() => t.operationAffix ? typeof t.operationAffix == "object" ? t.operationAffix : { position: "bottom" } : {}), A = r(() => [
35
+ `form-submit-panel_${t.operationPosition}`,
36
+ {
37
+ "form-submit-panel_no-divider": !t.divider,
38
+ "form-submit-panel_bare": t.bare
39
+ },
40
+ t.rootClass
41
+ ]), d = () => t.stringifyData ? Y(t.stringifyData, t.list) : Z(t.list), p = () => o("cancel"), y = () => {
42
+ s.value = d();
43
+ }, B = (e) => o("success", e), g = (e) => o("fail", e), { submitting: N, submit: V } = X({
44
+ getFormMainInstance: () => b.value,
45
+ submitFn: (e) => t.submitFn(e),
46
+ onSuccess: B,
47
+ onFail: g
48
+ });
49
+ return P(s, (e) => {
50
+ o("parseDataChange", e);
51
+ }), P(
52
+ [() => t.stringifyData, () => t.list],
37
53
  () => {
38
- i.value = d();
54
+ s.value = d();
39
55
  },
40
56
  {
41
57
  immediate: !0
42
58
  }
43
- ), (e, X) => (o(), T("div", {
44
- class: j(["form-submit-panel", `form-submit-panel_${t.operationPosition}`])
59
+ ), (e, tt) => (i(), j("div", {
60
+ class: z(["form-submit-panel", A.value])
45
61
  }, [
46
- g(q, m({
62
+ G(Q, c({
47
63
  ref_key: "formMain",
48
64
  ref: f,
49
65
  class: "form-submit-panel-form",
50
- list: t.list,
51
- data: C(r(i)),
52
- "row-gutter": t.rowGutter
53
- }, r(k), {
54
- layout: t.layout,
55
- labelPosition: t.labelPosition,
56
- labelWidth: t.labelWidth
57
- }), z({ _: 2 }, [
58
- G(t.list, (y) => ({
59
- name: y.key,
60
- fn: s((N) => [
61
- c(e.$slots, y.key, H(M(N)), void 0, !0)
66
+ list: a.list,
67
+ data: x(n(s)),
68
+ "row-gutter": a.rowGutter
69
+ }, n(k), {
70
+ layout: a.layout,
71
+ labelPosition: a.labelPosition,
72
+ labelWidth: a.labelWidth
73
+ }), H({ _: 2 }, [
74
+ I(a.list, (v) => ({
75
+ name: v.key,
76
+ fn: l((W) => [
77
+ m(e.$slots, v.key, L(O(W)), void 0, !0)
62
78
  ])
63
79
  }))
64
80
  ]), 1040, ["list", "data", "row-gutter", "layout", "labelPosition", "labelWidth"]),
65
- (o(), u(I(w.value), m(A.value, { class: "form-submit-panel-operation" }), {
66
- default: s(() => [
67
- L("div", U, [
68
- c(e.$slots, "cancelBtn", { cancel: b }, () => [
69
- t.cancelBtn ? (o(), u(r(D), {
81
+ (i(), u(q($.value), c(w.value, { class: "form-submit-panel-operation" }), {
82
+ default: l(() => [
83
+ J("div", _, [
84
+ m(e.$slots, "cancelBtn", { cancel: p }, () => [
85
+ a.cancelBtn ? (i(), u(n(F), {
70
86
  key: 0,
71
- onClick: b
87
+ onClick: p
72
88
  }, {
73
- default: s(() => [
74
- P(h(t.cancelBtn), 1)
89
+ default: l(() => [
90
+ h(C(a.cancelBtn), 1)
75
91
  ]),
76
92
  _: 1
77
- })) : x("", !0)
93
+ })) : D("", !0)
78
94
  ], !0),
79
- c(e.$slots, "resetBtn", { reset: p }, () => [
80
- t.resetBtn ? (o(), u(r(D), {
95
+ m(e.$slots, "resetBtn", { reset: y }, () => [
96
+ a.resetBtn ? (i(), u(n(F), {
81
97
  key: 0,
82
98
  type: "warning",
83
- onClick: p
99
+ onClick: y
84
100
  }, {
85
- default: s(() => [
86
- P(h(t.resetBtn), 1)
101
+ default: l(() => [
102
+ h(C(a.resetBtn), 1)
87
103
  ]),
88
104
  _: 1
89
- })) : x("", !0)
105
+ })) : D("", !0)
90
106
  ], !0),
91
- g(J, m(t.submitBtnProps, {
92
- "submit-fn": t.submitFn,
93
- "submit-text": t.submitText,
94
- "form-main-instance": S.value,
95
- onSuccess: F,
96
- onFail: $
97
- }), null, 16, ["submit-fn", "submit-text", "form-main-instance"])
107
+ e.$slots.submitBtn ? m(e.$slots, "submitBtn", {
108
+ key: 0,
109
+ submit: n(V),
110
+ submitting: n(N)
111
+ }, void 0, !0) : (i(), u(U, c({ key: 1 }, a.submitBtnProps, {
112
+ "submit-fn": a.submitFn,
113
+ "submit-text": a.submitText,
114
+ "form-main-instance": b.value,
115
+ onSuccess: B,
116
+ onFail: g
117
+ }), null, 16, ["submit-fn", "submit-text", "form-main-instance"]))
98
118
  ])
99
119
  ]),
100
120
  _: 3
@@ -103,5 +123,5 @@ const U = { class: "form-submit-panel-operation-inner" }, nt = /* @__PURE__ */ V
103
123
  }
104
124
  });
105
125
  export {
106
- nt as default
126
+ lt as default
107
127
  };
@@ -0,0 +1,21 @@
1
+ import { ref as m } from "vue";
2
+ function i(a) {
3
+ const e = m(!1);
4
+ return { submitting: e, submit: async () => {
5
+ var t, c;
6
+ e.value = !0;
7
+ try {
8
+ const r = a.getFormMainInstance();
9
+ await r.validate();
10
+ const u = r.stringify();
11
+ await a.submitFn(u), (t = a.onSuccess) == null || t.call(a, u);
12
+ } catch (r) {
13
+ (c = a.onFail) == null || c.call(a, r);
14
+ } finally {
15
+ e.value = !1;
16
+ }
17
+ } };
18
+ }
19
+ export {
20
+ i as useFormSubmit
21
+ };
package/es/style.css CHANGED
@@ -1 +1 @@
1
- .confirm-dialog .content[data-v-8a29e4c8]{overflow-x:hidden;overflow-y:auto;max-height:calc(100vh - 200px)}.confirm-dialog .btn[data-v-8a29e4c8]{width:150px;height:40px;border-radius:4px}.confirm-dialog .main[data-v-8a29e4c8]{position:relative;text-align:center}.confirm-dialog .main .close-box[data-v-8a29e4c8]{position:absolute;top:0;right:0;cursor:pointer;z-index:2}.confirm-dialog .main .shim[data-v-8a29e4c8]{position:relative;z-index:1}.confirm-dialog .main .shim .title[data-v-8a29e4c8]{font-size:18px;font-weight:500}.confirm-dialog .main .shim .content[data-v-8a29e4c8]{font-size:16px;margin-top:15px}.confirm-dialog .main .shim .footer[data-v-8a29e4c8]{display:flex;justify-content:center;align-items:center;padding-top:5px}.confirm-dialog .main .shim .footer>.btn[data-v-8a29e4c8]:not(:last-child){margin-right:30px}.confirm-dialog .main .shim .footer[reverse=true][data-v-8a29e4c8]{flex-direction:row-reverse}.confirm-dialog .main .shim .footer[reverse=true]>.btn[data-v-8a29e4c8]:not(:last-child){margin-right:0;margin-left:30px}.confirm-dialog .el-dialog__header,.confirm-dialog .el-dialog__body{padding:0;background-color:transparent}.action-confirm__title[data-v-88119b35]{font-weight:600;margin-bottom:6px}.action-confirm__content[data-v-88119b35]{margin-bottom:12px;color:var(--el-text-color-regular)}.action-confirm__actions[data-v-88119b35]{display:flex;justify-content:flex-end;gap:8px}.form-item-tip[data-v-0dd66b41]{text-align:left;line-height:1.5;font-size:12px}.form-item-label-hide[data-v-0dd66b41] .el-form-item__label-wrap{display:none}.form-submit-panel[data-v-d71ece49]{display:flex;flex-direction:column}.form-submit-panel .form-submit-panel-form[data-v-d71ece49]{order:1}.form-submit-panel .form-submit-panel-operation[data-v-d71ece49]{order:2}.form-submit-panel .form-submit-panel-operation-inner[data-v-d71ece49]{display:flex;align-items:center;gap:8px;padding:10px 12px}.form-submit-panel .el-affix--fixed .form-submit-panel-operation-inner[data-v-d71ece49]{background-color:var(--el-bg-color)}.form-submit-panel_bottom-center .form-submit-panel-operation-inner[data-v-d71ece49],.form-submit-panel_bottom-right .form-submit-panel-operation-inner[data-v-d71ece49]{border-top:1px solid var(--el-border-color-light);border-bottom-left-radius:var(--el-border-radius-base);border-bottom-right-radius:var(--el-border-radius-base)}.form-submit-panel_bottom-center .form-submit-panel-operation-inner[data-v-d71ece49]{justify-content:center}.form-submit-panel_bottom-right .form-submit-panel-operation-inner[data-v-d71ece49]{justify-content:flex-end}.form-submit-panel_top-right .form-submit-panel-operation[data-v-d71ece49]{order:0}.form-submit-panel_top-right .form-submit-panel-operation-inner[data-v-d71ece49]{justify-content:flex-end;border-bottom:1px solid var(--el-border-color-light);border-top-left-radius:var(--el-border-radius-base);border-top-right-radius:var(--el-border-radius-base)}.panel-edit-switch[data-v-7bb14fd1]{position:relative}.panel-edit-switch:hover .panel-edit-switch-edit-btn[data-v-7bb14fd1]{display:block}.panel-edit-switch-edit-btn[data-v-7bb14fd1]{position:absolute;top:0;right:0;z-index:1;display:none}.panel-edit-switch-actions[data-v-7bb14fd1]{display:flex;justify-content:flex-end;gap:8px;margin-top:8px}.form-search_show[data-v-d240f220]{margin-bottom:10px}.form-search .btn-box[data-v-d240f220]{display:flex;align-items:center;gap:8px;justify-content:flex-end}.form-search .btn-box-expand-icon[data-v-d240f220]{margin-right:2px}.form-search[data-v-d240f220] .el-col{padding-left:14px}.form-verify-image[data-v-a4baf877] .el-input__suffix-inner *{margin:0}.form-verify-image-suffix[data-v-a4baf877]{position:absolute;height:100%;border-radius:var(--el-input-border-radius, var(--el-border-radius-base));top:50%;transform:translateY(-50%);overflow:hidden;cursor:pointer}.form-verify-image-suffix-main[data-v-a4baf877]{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#f4f4f4}.tabs-main-bar[data-v-d6937179]{position:relative;display:flex;align-items:center}.tabs-main-bar-item[data-v-d6937179]{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-d6937179]{position:absolute;left:0;background:var(--el-color-primary);transition:transform .2s,width .2s}.tabs-main-bar--l1 .tabs-main-bar-item[data-v-d6937179]{font-size:16px}.tabs-main-bar--l2 .tabs-main-bar-item[data-v-d6937179]{font-size:14px}.tabs-main-bar--l3 .tabs-main-bar-item[data-v-d6937179],.tabs-main-bar--l4 .tabs-main-bar-item[data-v-d6937179]{font-size:12px}.tabs-main-bar--variant-card[data-v-d6937179]{position:relative;overflow:hidden;gap:2px}.tabs-main-bar--variant-card .tabs-main-bar-item[data-v-d6937179]{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-d6937179]:hover:not(.tabs-main-bar-item_active){color:var(--el-color-primary)}.tabs-main-bar--variant-card .tabs-main-bar-item_active[data-v-d6937179]{color:var(--el-color-primary);border-color:var(--el-border-color-light)}.tabs-main-bar--variant-card .tabs-main-bar-item_active[data-v-d6937179]:before,.tabs-main-bar--variant-card .tabs-main-bar-item_active[data-v-d6937179]: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-d6937179]:before{right:100%}.tabs-main-bar--variant-card .tabs-main-bar-item_active[data-v-d6937179]:after{left:100%}.tabs-main-bar--variant-indicator .tabs-main-bar-item[data-v-d6937179]{padding:8px 16px}.tabs-main-bar--variant-indicator .tabs-main-bar-item_active[data-v-d6937179]{color:var(--el-color-primary)}.tabs-main-bar--variant-indicator .tabs-main-bar-indicator[data-v-d6937179]{bottom:0;height:2px}.tabs-main-bar--variant-indicator-compact .tabs-main-bar-item[data-v-d6937179]{padding:6px 10px}.tabs-main-bar--variant-indicator-compact .tabs-main-bar-item_active[data-v-d6937179]{color:var(--el-color-primary)}.tabs-main-bar--variant-indicator-compact .tabs-main-bar-indicator[data-v-d6937179]{bottom:0;height:1px}.tabs-main-bar--variant-plain .tabs-main-bar-item[data-v-d6937179]{padding:4px 8px}.tabs-main-bar--variant-plain .tabs-main-bar-item_active[data-v-d6937179]{color:var(--el-color-primary);font-weight:600}.app-breadcrumb[data-v-2f677890]{display:flex;align-items:center;justify-content:flex-start}.app-body[data-v-265945fd]{transition-duration:.3s;transition-property:padding;transition-timing-function:linear;min-height:100vh}.app-body-shim[data-v-265945fd]{width:100%;--app-viewport-max-height: var(--ba2eb370)}.app-footer[data-v-393d9768]{transition-duration:.3s;transition-property:height;transition-timing-function:linear;overflow:hidden;width:100%;box-shadow:-5px 0 5px #0000001a}.app-footer-shim[data-v-393d9768]{width:100%;height:100%;padding:0 20px}.app-header[data-v-ef3cc8a6]{transition-duration:.3s;transition-property:height;transition-timing-function:linear;overflow:hidden;position:fixed;left:0;top:0;width:100%;box-shadow:5px 0 5px #0000001a;z-index:1}.app-header-module[data-v-ef3cc8a6]{display:flex;flex:1;height:100%;overflow-x:auto}.app-header-module-item[data-v-ef3cc8a6]{display:flex;justify-content:center;align-items:center;padding:0 20px;white-space:nowrap;height:100%;color:var(--v3dfae5bc)}.app-header-module-item[data-v-ef3cc8a6]:hover,.app-header-module-item_active[data-v-ef3cc8a6]{color:var(--v158cd0d2)}.app-header-module-item_active[data-v-ef3cc8a6]{position:relative}.app-header-module-item_active[data-v-ef3cc8a6]:before{content:"";position:absolute;left:50%;top:0;width:100%;height:3px;background-color:var(--v158cd0d2);transform:translate(-50%)}.app-header-shim[data-v-ef3cc8a6]{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-ef3cc8a6]{margin-right:8px}.app-header-userInfo[data-v-ef3cc8a6]{padding-left:80px}.app-header-userInfo__theme-switch[data-v-ef3cc8a6]{margin-right:12px}.app-sidebar[data-v-37ff5e0c]{transition-duration:.3s;transition-property:width;transition-timing-function:linear;position:fixed;left:0;top:0;height:100%;box-shadow:0 5px 5px #0000001a;overflow:visible;z-index:var(--ce9ef212)}.app-sidebar-top[data-v-37ff5e0c]{position:absolute;left:0;right:0;top:0;overflow:hidden}.app-sidebar-bottom[data-v-37ff5e0c]{position:absolute;left:0;right:0;bottom:0;overflow:hidden}.app-sidebar-shim[data-v-37ff5e0c]{position:absolute;left:0;right:0;top:var(--v309db2c2);bottom:var(--v2189b8a1);overflow-x:hidden;overflow-y:auto;--el-menu-border-color: transparent;-webkit-user-select:none;user-select:none}.app-sidebar-toggle[data-v-37ff5e0c]{position:absolute;left:100%;top:50%;transform:translate(-50%,-50%);cursor:pointer;width:22px;height:22px;border-radius:50%;background-color:var(--v65908f82);color:var(--v42a24063);border:1px solid var(--v42a24063);box-shadow:0 1px 2px #0000000f;display:flex;align-items:center;justify-content:center;font-size:12px;z-index:1;isolation:isolate;transition:color .3s,border-color .3s,box-shadow .3s}.app-sidebar-toggle[data-v-37ff5e0c]:before{content:"";position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:50%;background-color:var(--v42a24063);opacity:.18;z-index:-1;pointer-events:none;transition:opacity .3s,inset .3s}.app-sidebar-toggle[data-v-37ff5e0c]:active,.app-sidebar-toggle[data-v-37ff5e0c]:focus,.app-sidebar-toggle[data-v-37ff5e0c]:hover{box-shadow:0 2px 6px #0000001f}.app-sidebar-toggle[data-v-37ff5e0c]:active:before,.app-sidebar-toggle[data-v-37ff5e0c]:focus:before,.app-sidebar-toggle[data-v-37ff5e0c]:hover:before{opacity:.32;top:-5px;right:-5px;bottom:-5px;left:-5px}.app-sidebar-toggle-icon[data-v-37ff5e0c]{transition:transform .3s}.app-layout[data-v-6924f8b7]{position:relative}.app-layout_noLogin[data-v-6924f8b7] .app-body,.app-layout_noLogin[data-v-6924f8b7] .app-sidebar,.app-layout_noLogin[data-v-6924f8b7] .app-header,.app-layout_noLogin[data-v-6924f8b7] .app-footer{transition:none!important}.app-page-shim[data-v-fda19616]{--app-viewport-max-height: var(--v54888f0e)}[data-v-1f8a1089] .auto-refresh-label{display:flex;font-size:13px;color:var(--el-text-color-regular);margin-bottom:8px}.auto-refresh-group-icon--rotating[data-v-9cac8b09]{animation:auto-refresh-rotating-9cac8b09 1s linear infinite}@keyframes auto-refresh-rotating-9cac8b09{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.table-toolbar[data-v-22ae8fa7]{display:flex;justify-content:space-between;align-items:center;padding-bottom:8px;gap:20px}.table-toolbar-left[data-v-22ae8fa7],.table-toolbar-right[data-v-22ae8fa7]{display:flex;align-items:center;gap:10px}.table-toolbar-switch-view[data-v-22ae8fa7]{--el-switch-off-color: var(--el-color-primary);--el-switch-on-color: var(--el-color-warning)}.data-list-view[data-v-da38bea6]{width:100%}.data-list-view-empty[data-v-da38bea6]{display:flex;justify-content:center;align-items:center;width:100%;min-height:60px}.table-main-pagination[data-v-05684b89]{margin-top:10px;display:flex;justify-content:flex-end}.list-page[data-v-d70424b6]{min-height:var(--v9299b0d4)}.list-page-header[data-v-d70424b6],.list-page-operation[data-v-d70424b6]{margin-bottom:10px}.list-page[data-v-d70424b6] .el-loading-mask{left:-10px;top:-10px;right:-10px;bottom:-10px}.panel-main-item-col:not(:last-of-type) .panel-main-item-col-wrap_card[data-v-25951dc8]{margin-bottom:var(--v39ccf6bc)}
1
+ .confirm-dialog .content[data-v-8a29e4c8]{overflow-x:hidden;overflow-y:auto;max-height:calc(100vh - 200px)}.confirm-dialog .btn[data-v-8a29e4c8]{width:150px;height:40px;border-radius:4px}.confirm-dialog .main[data-v-8a29e4c8]{position:relative;text-align:center}.confirm-dialog .main .close-box[data-v-8a29e4c8]{position:absolute;top:0;right:0;cursor:pointer;z-index:2}.confirm-dialog .main .shim[data-v-8a29e4c8]{position:relative;z-index:1}.confirm-dialog .main .shim .title[data-v-8a29e4c8]{font-size:18px;font-weight:500}.confirm-dialog .main .shim .content[data-v-8a29e4c8]{font-size:16px;margin-top:15px}.confirm-dialog .main .shim .footer[data-v-8a29e4c8]{display:flex;justify-content:center;align-items:center;padding-top:5px}.confirm-dialog .main .shim .footer>.btn[data-v-8a29e4c8]:not(:last-child){margin-right:30px}.confirm-dialog .main .shim .footer[reverse=true][data-v-8a29e4c8]{flex-direction:row-reverse}.confirm-dialog .main .shim .footer[reverse=true]>.btn[data-v-8a29e4c8]:not(:last-child){margin-right:0;margin-left:30px}.confirm-dialog .el-dialog__header,.confirm-dialog .el-dialog__body{padding:0;background-color:transparent}.action-confirm__title[data-v-88119b35]{font-weight:600;margin-bottom:6px}.action-confirm__content[data-v-88119b35]{margin-bottom:12px;color:var(--el-text-color-regular)}.action-confirm__actions[data-v-88119b35]{display:flex;justify-content:flex-end;gap:8px}.form-item-tip[data-v-0dd66b41]{text-align:left;line-height:1.5;font-size:12px}.form-item-label-hide[data-v-0dd66b41] .el-form-item__label-wrap{display:none}.form-submit-panel[data-v-450cc756]{display:flex;flex-direction:column}.form-submit-panel .form-submit-panel-form[data-v-450cc756]{order:1}.form-submit-panel .form-submit-panel-operation[data-v-450cc756]{order:2}.form-submit-panel .form-submit-panel-operation-inner[data-v-450cc756]{display:flex;align-items:center;gap:8px;padding:10px 12px}.form-submit-panel .el-affix--fixed .form-submit-panel-operation-inner[data-v-450cc756]{background-color:var(--el-bg-color)}.form-submit-panel_bottom-center .form-submit-panel-operation-inner[data-v-450cc756],.form-submit-panel_bottom-right .form-submit-panel-operation-inner[data-v-450cc756]{border-top:1px solid var(--el-border-color-light);border-bottom-left-radius:var(--el-border-radius-base);border-bottom-right-radius:var(--el-border-radius-base)}.form-submit-panel_bottom-center .form-submit-panel-operation-inner[data-v-450cc756]{justify-content:center}.form-submit-panel_bottom-right .form-submit-panel-operation-inner[data-v-450cc756]{justify-content:flex-end}.form-submit-panel_top-right .form-submit-panel-operation[data-v-450cc756]{order:0}.form-submit-panel_top-right .form-submit-panel-operation-inner[data-v-450cc756]{justify-content:flex-end;border-bottom:1px solid var(--el-border-color-light);border-top-left-radius:var(--el-border-radius-base);border-top-right-radius:var(--el-border-radius-base)}.form-submit-panel_no-divider .form-submit-panel-operation-inner[data-v-450cc756]{border:none;border-radius:0}.form-submit-panel_bare .form-submit-panel-operation-inner[data-v-450cc756]{padding:0}.panel-edit-switch[data-v-7bb14fd1]{position:relative}.panel-edit-switch:hover .panel-edit-switch-edit-btn[data-v-7bb14fd1]{display:block}.panel-edit-switch-edit-btn[data-v-7bb14fd1]{position:absolute;top:0;right:0;z-index:1;display:none}.panel-edit-switch-actions[data-v-7bb14fd1]{display:flex;justify-content:flex-end;gap:8px;margin-top:8px}.form-search_show[data-v-d240f220]{margin-bottom:10px}.form-search .btn-box[data-v-d240f220]{display:flex;align-items:center;gap:8px;justify-content:flex-end}.form-search .btn-box-expand-icon[data-v-d240f220]{margin-right:2px}.form-search[data-v-d240f220] .el-col{padding-left:14px}.form-verify-image[data-v-a4baf877] .el-input__suffix-inner *{margin:0}.form-verify-image-suffix[data-v-a4baf877]{position:absolute;height:100%;border-radius:var(--el-input-border-radius, var(--el-border-radius-base));top:50%;transform:translateY(-50%);overflow:hidden;cursor:pointer}.form-verify-image-suffix-main[data-v-a4baf877]{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#f4f4f4}.tabs-main-bar[data-v-d6937179]{position:relative;display:flex;align-items:center}.tabs-main-bar-item[data-v-d6937179]{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-d6937179]{position:absolute;left:0;background:var(--el-color-primary);transition:transform .2s,width .2s}.tabs-main-bar--l1 .tabs-main-bar-item[data-v-d6937179]{font-size:16px}.tabs-main-bar--l2 .tabs-main-bar-item[data-v-d6937179]{font-size:14px}.tabs-main-bar--l3 .tabs-main-bar-item[data-v-d6937179],.tabs-main-bar--l4 .tabs-main-bar-item[data-v-d6937179]{font-size:12px}.tabs-main-bar--variant-card[data-v-d6937179]{position:relative;overflow:hidden;gap:2px}.tabs-main-bar--variant-card .tabs-main-bar-item[data-v-d6937179]{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-d6937179]:hover:not(.tabs-main-bar-item_active){color:var(--el-color-primary)}.tabs-main-bar--variant-card .tabs-main-bar-item_active[data-v-d6937179]{color:var(--el-color-primary);border-color:var(--el-border-color-light)}.tabs-main-bar--variant-card .tabs-main-bar-item_active[data-v-d6937179]:before,.tabs-main-bar--variant-card .tabs-main-bar-item_active[data-v-d6937179]: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-d6937179]:before{right:100%}.tabs-main-bar--variant-card .tabs-main-bar-item_active[data-v-d6937179]:after{left:100%}.tabs-main-bar--variant-indicator .tabs-main-bar-item[data-v-d6937179]{padding:8px 16px}.tabs-main-bar--variant-indicator .tabs-main-bar-item_active[data-v-d6937179]{color:var(--el-color-primary)}.tabs-main-bar--variant-indicator .tabs-main-bar-indicator[data-v-d6937179]{bottom:0;height:2px}.tabs-main-bar--variant-indicator-compact .tabs-main-bar-item[data-v-d6937179]{padding:6px 10px}.tabs-main-bar--variant-indicator-compact .tabs-main-bar-item_active[data-v-d6937179]{color:var(--el-color-primary)}.tabs-main-bar--variant-indicator-compact .tabs-main-bar-indicator[data-v-d6937179]{bottom:0;height:1px}.tabs-main-bar--variant-plain .tabs-main-bar-item[data-v-d6937179]{padding:4px 8px}.tabs-main-bar--variant-plain .tabs-main-bar-item_active[data-v-d6937179]{color:var(--el-color-primary);font-weight:600}.app-breadcrumb[data-v-2f677890]{display:flex;align-items:center;justify-content:flex-start}.app-body[data-v-265945fd]{transition-duration:.3s;transition-property:padding;transition-timing-function:linear;min-height:100vh}.app-body-shim[data-v-265945fd]{width:100%;--app-viewport-max-height: var(--ba2eb370)}.app-footer[data-v-393d9768]{transition-duration:.3s;transition-property:height;transition-timing-function:linear;overflow:hidden;width:100%;box-shadow:-5px 0 5px #0000001a}.app-footer-shim[data-v-393d9768]{width:100%;height:100%;padding:0 20px}.app-header[data-v-ef3cc8a6]{transition-duration:.3s;transition-property:height;transition-timing-function:linear;overflow:hidden;position:fixed;left:0;top:0;width:100%;box-shadow:5px 0 5px #0000001a;z-index:1}.app-header-module[data-v-ef3cc8a6]{display:flex;flex:1;height:100%;overflow-x:auto}.app-header-module-item[data-v-ef3cc8a6]{display:flex;justify-content:center;align-items:center;padding:0 20px;white-space:nowrap;height:100%;color:var(--v3dfae5bc)}.app-header-module-item[data-v-ef3cc8a6]:hover,.app-header-module-item_active[data-v-ef3cc8a6]{color:var(--v158cd0d2)}.app-header-module-item_active[data-v-ef3cc8a6]{position:relative}.app-header-module-item_active[data-v-ef3cc8a6]:before{content:"";position:absolute;left:50%;top:0;width:100%;height:3px;background-color:var(--v158cd0d2);transform:translate(-50%)}.app-header-shim[data-v-ef3cc8a6]{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-ef3cc8a6]{margin-right:8px}.app-header-userInfo[data-v-ef3cc8a6]{padding-left:80px}.app-header-userInfo__theme-switch[data-v-ef3cc8a6]{margin-right:12px}.app-sidebar[data-v-37ff5e0c]{transition-duration:.3s;transition-property:width;transition-timing-function:linear;position:fixed;left:0;top:0;height:100%;box-shadow:0 5px 5px #0000001a;overflow:visible;z-index:var(--ce9ef212)}.app-sidebar-top[data-v-37ff5e0c]{position:absolute;left:0;right:0;top:0;overflow:hidden}.app-sidebar-bottom[data-v-37ff5e0c]{position:absolute;left:0;right:0;bottom:0;overflow:hidden}.app-sidebar-shim[data-v-37ff5e0c]{position:absolute;left:0;right:0;top:var(--v309db2c2);bottom:var(--v2189b8a1);overflow-x:hidden;overflow-y:auto;--el-menu-border-color: transparent;-webkit-user-select:none;user-select:none}.app-sidebar-toggle[data-v-37ff5e0c]{position:absolute;left:100%;top:50%;transform:translate(-50%,-50%);cursor:pointer;width:22px;height:22px;border-radius:50%;background-color:var(--v65908f82);color:var(--v42a24063);border:1px solid var(--v42a24063);box-shadow:0 1px 2px #0000000f;display:flex;align-items:center;justify-content:center;font-size:12px;z-index:1;isolation:isolate;transition:color .3s,border-color .3s,box-shadow .3s}.app-sidebar-toggle[data-v-37ff5e0c]:before{content:"";position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:50%;background-color:var(--v42a24063);opacity:.18;z-index:-1;pointer-events:none;transition:opacity .3s,inset .3s}.app-sidebar-toggle[data-v-37ff5e0c]:active,.app-sidebar-toggle[data-v-37ff5e0c]:focus,.app-sidebar-toggle[data-v-37ff5e0c]:hover{box-shadow:0 2px 6px #0000001f}.app-sidebar-toggle[data-v-37ff5e0c]:active:before,.app-sidebar-toggle[data-v-37ff5e0c]:focus:before,.app-sidebar-toggle[data-v-37ff5e0c]:hover:before{opacity:.32;top:-5px;right:-5px;bottom:-5px;left:-5px}.app-sidebar-toggle-icon[data-v-37ff5e0c]{transition:transform .3s}.app-layout[data-v-6924f8b7]{position:relative}.app-layout_noLogin[data-v-6924f8b7] .app-body,.app-layout_noLogin[data-v-6924f8b7] .app-sidebar,.app-layout_noLogin[data-v-6924f8b7] .app-header,.app-layout_noLogin[data-v-6924f8b7] .app-footer{transition:none!important}.app-page-shim[data-v-fda19616]{--app-viewport-max-height: var(--v54888f0e)}[data-v-1f8a1089] .auto-refresh-label{display:flex;font-size:13px;color:var(--el-text-color-regular);margin-bottom:8px}.auto-refresh-group-icon--rotating[data-v-9cac8b09]{animation:auto-refresh-rotating-9cac8b09 1s linear infinite}@keyframes auto-refresh-rotating-9cac8b09{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.table-toolbar[data-v-22ae8fa7]{display:flex;justify-content:space-between;align-items:center;padding-bottom:8px;gap:20px}.table-toolbar-left[data-v-22ae8fa7],.table-toolbar-right[data-v-22ae8fa7]{display:flex;align-items:center;gap:10px}.table-toolbar-switch-view[data-v-22ae8fa7]{--el-switch-off-color: var(--el-color-primary);--el-switch-on-color: var(--el-color-warning)}.data-list-view[data-v-da38bea6]{width:100%}.data-list-view-empty[data-v-da38bea6]{display:flex;justify-content:center;align-items:center;width:100%;min-height:60px}.table-main-pagination[data-v-05684b89]{margin-top:10px;display:flex;justify-content:flex-end}.list-page[data-v-d70424b6]{min-height:var(--v9299b0d4)}.list-page-header[data-v-d70424b6],.list-page-operation[data-v-d70424b6]{margin-bottom:10px}.list-page[data-v-d70424b6] .el-loading-mask{left:-10px;top:-10px;right:-10px;bottom:-10px}.panel-main-item-col:not(:last-of-type) .panel-main-item-col-wrap_card[data-v-25951dc8]{margin-bottom:var(--v39ccf6bc)}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@done-coding/admin-core",
3
- "version": "0.8.2-alpha.0",
3
+ "version": "0.8.3-alpha.0",
4
4
  "description": "后台管理核心",
5
5
  "private": false,
6
6
  "main": "lib/index.cjs",
@@ -81,5 +81,5 @@
81
81
  "node": ">=18.0.0",
82
82
  "pnpm": ">=9.0.0"
83
83
  },
84
- "gitHead": "ab62c1951866382399a7a524aefc1f8aad7b056b"
84
+ "gitHead": "2db8c4bfcf63a1cd077ef7c7426e25f33c243e2b"
85
85
  }
@@ -246,8 +246,8 @@ export type AppCacheConfig = AppConfig["APP_CACHE_CONFIG"];
246
246
  * `set` [MUST] 产新对象([MUST NOT] 原地 mutate,破响应式 + 破不可变)。
247
247
  */
248
248
  export interface UserInfoFieldAccessor<UserInfo = unknown> {
249
- /** 从用户信息读取字段值(未命中返回 undefined */
250
- get: (info: Partial<UserInfo>) => string | undefined;
249
+ /** 读字段值;[MUST] 返回 string——业务经 getUserInfoInitFn 把该字段初值置 `""`,保证空态为 `""` 而非 undefined(类型恒定,免下游满屏 `token!`) */
250
+ get: (info: Partial<UserInfo>) => string;
251
251
  /**
252
252
  * 写入字段值,返回**保留 info 其余全部字段**的新对象。
253
253
  *
@@ -15,6 +15,10 @@ declare const _default: <PO extends Record<string, any>, SO extends Record<strin
15
15
  resetBtn?(_: {
16
16
  reset: () => void;
17
17
  }): any;
18
+ submitBtn?(_: {
19
+ submit: () => Promise<void>;
20
+ submitting: boolean;
21
+ }): any;
18
22
  };
19
23
  emit: {
20
24
  (e: "cancel"): void;
@@ -311,5 +311,22 @@ export type FormSubmitPanelProps<PO extends Record<string, any>, SO extends Reco
311
311
  * 默认值 false
312
312
  */
313
313
  operationAffix?: boolean | AffixProps;
314
+ /** 操作区分隔线(含外侧圆角)
315
+ * ----
316
+ * 默认值 true;置 false 去掉分隔线 + 圆角(极简 / 单按钮场景)
317
+ */
318
+ divider?: boolean;
319
+ /** 操作区无内边距(bare)
320
+ * ----
321
+ * 默认 false;置 true 去掉操作区 padding(嵌入 / 极简场景)。
322
+ * 与 divider 正交:divider 管边框+圆角,bare 管 padding,可叠加全 flush。
323
+ */
324
+ bare?: boolean;
325
+ /** 根面板自定义 class(显式根出口)
326
+ * ----
327
+ * inheritAttrs:false 下消费方 `class` 经 v-bind 转发内层 FormMain(对标 FormSearch),
328
+ * 根面板 `.form-submit-panel` 拿不到。需给根面板加类时用本 prop。
329
+ */
330
+ rootClass?: string | string[] | Record<string, boolean>;
314
331
  };
315
332
  export {};
@@ -0,0 +1,25 @@
1
+ import { Ref } from 'vue';
2
+ import { FormMainInstance, FormSubmitBtnProps, FormDataInfo } from './types';
3
+ /** useFormSubmit 入参——提交管线的 4 个外部接线点 */
4
+ export interface UseFormSubmitOptions<PO extends Record<string, any>, SO extends Record<string, any>> {
5
+ /** 惰性取 FormMain 实例(首渲染 undefined 容忍,click 时才用) */
6
+ getFormMainInstance: () => FormMainInstance<PO, SO>;
7
+ /** 提交方法(每次调用时读取,保留响应式) */
8
+ submitFn: FormSubmitBtnProps<PO, SO>["submitFn"];
9
+ /** 成功回调(载荷 = stringifyData) */
10
+ onSuccess?: (data: FormDataInfo<PO, SO>["stringifyData"]) => void;
11
+ /** 失败回调(校验未过 / submitFn reject) */
12
+ onFail?: (error: unknown) => void;
13
+ }
14
+ /** useFormSubmit 返回——loading 态 + 提交触发器 */
15
+ export interface UseFormSubmitReturn {
16
+ /** 提交中 loading 态 */
17
+ submitting: Ref<boolean>;
18
+ /** 触发提交:validate → stringify → submitFn → onSuccess / onFail */
19
+ submit: () => Promise<void>;
20
+ }
21
+ /**
22
+ * 表单提交管线 composable——validate→stringify→submitFn 全程接管 loading。
23
+ * FormSubmitBtn 与 FormSubmitPanel(#submitBtn slot) 共用,单一事实源。
24
+ */
25
+ export declare function useFormSubmit<PO extends Record<string, any>, SO extends Record<string, any>>(options: UseFormSubmitOptions<PO, SO>): UseFormSubmitReturn;
@@ -30,7 +30,7 @@ export interface CreateUserStoreDeps<UserInfo, LoginParams = unknown> {
30
30
  */
31
31
  export declare function createUserStore<UserInfo, LoginParams = unknown>(deps: CreateUserStoreDeps<UserInfo, LoginParams>): import('pinia').StoreDefinition<"USER", Pick<{
32
32
  userInfo: ComputedRef<UserInfo>;
33
- token: ComputedRef<string | undefined>;
33
+ token: ComputedRef<string>;
34
34
  isLogin: ComputedRef<boolean>;
35
35
  login: (params: LoginParams) => Promise<void>;
36
36
  logout: () => Promise<void>;
@@ -40,7 +40,7 @@ export declare function createUserStore<UserInfo, LoginParams = unknown>(deps: C
40
40
  havePermissionByKey: (key?: RoutePermission["key"]) => boolean;
41
41
  }, never>, Pick<{
42
42
  userInfo: ComputedRef<UserInfo>;
43
- token: ComputedRef<string | undefined>;
43
+ token: ComputedRef<string>;
44
44
  isLogin: ComputedRef<boolean>;
45
45
  login: (params: LoginParams) => Promise<void>;
46
46
  logout: () => Promise<void>;
@@ -50,7 +50,7 @@ export declare function createUserStore<UserInfo, LoginParams = unknown>(deps: C
50
50
  havePermissionByKey: (key?: RoutePermission["key"]) => boolean;
51
51
  }, "userInfo" | "token" | "isLogin">, Pick<{
52
52
  userInfo: ComputedRef<UserInfo>;
53
- token: ComputedRef<string | undefined>;
53
+ token: ComputedRef<string>;
54
54
  isLogin: ComputedRef<boolean>;
55
55
  login: (params: LoginParams) => Promise<void>;
56
56
  logout: () => Promise<void>;