mvframe 1.0.11 → 1.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,11 +1,3009 @@
1
- import "./util.js";
2
- import "./directive.js";
3
- import "./store.js";
4
- import { b as e, i as m, g as n, n as p } from "./vendor.js";
5
- import "./composition.js";
1
+ import { u as Ne } from "./util.js";
2
+ import { d as Ke } from "./directive.js";
3
+ import { s as Te, p as Ae, a as Fe } from "./store.js";
4
+ import { createRouter as De, createWebHistory as Be, useRoute as Me, useRouter as Ve } from "vue-router";
5
+ import { computed as O, openBlock as b, createElementBlock as M, mergeProps as oe, unref as n, Fragment as Y, renderList as se, normalizeClass as F, createCommentVNode as K, createTextVNode as W, toDisplayString as L, reactive as H, onUnmounted as ce, watch as ne, markRaw as me, resolveComponent as E, createVNode as z, withCtx as V, createElementVNode as r, renderSlot as R, createBlock as B, resolveDynamicComponent as Oe, nextTick as ge, getCurrentInstance as ae, ref as G, onMounted as ee, normalizeStyle as Le, defineComponent as Ie, cloneVNode as _e, h as we, inject as he, withModifiers as $e, defineAsyncComponent as Pe, resolveDirective as Re, normalizeProps as de, guardReactiveProps as fe, createSlots as ie, withDirectives as He, useSlots as Ue, Transition as Ge, withKeys as Je, createStaticVNode as qe, useAttrs as ve, isRef as je, onBeforeMount as We } from "vue";
6
+ /* empty css */
7
+ import { deepEqual as xe, isInView as Ye, loadMvframeTheme as Ze, useOptions as ze, download as Qe, useRemoteSummary as Xe, useLang as et } from "./composition.js";
8
+ import Se from "vuedraggable";
9
+ const tt = {
10
+ "Theme color": "Theme color",
11
+ "Restore default": "Restore default",
12
+ Appearance: "Appearance",
13
+ "Light / dark mode": "Light / dark mode",
14
+ Dark: "Dark",
15
+ Light: "Light",
16
+ Language: "Language",
17
+ English: "English",
18
+ "Simplified Chinese": "Simplified Chinese",
19
+ "Traditional Chinese": "Traditional Chinese",
20
+ Japanese: "Japanese",
21
+ Korean: "Korean",
22
+ Vietnamese: "Vietnamese",
23
+ "Frame Config": "Frame Config",
24
+ Cancel: "Cancel",
25
+ Submit: "Submit"
26
+ }, ot = {
27
+ "Theme color": "主题色",
28
+ "Restore default": "恢复默认",
29
+ Appearance: "外观",
30
+ "Light / dark mode": "明暗模式",
31
+ Dark: "暗色",
32
+ Light: "浅色",
33
+ Language: "语言",
34
+ English: "English",
35
+ "Simplified Chinese": "中文-简体",
36
+ "Traditional Chinese": "中文-繁體",
37
+ Japanese: "日本語",
38
+ Korean: "한국어",
39
+ Vietnamese: "Tiếng Việt",
40
+ "Frame Config": "框架设置",
41
+ Cancel: "取消",
42
+ Submit: "确定"
43
+ }, nt = {
44
+ "Theme color": "主題色",
45
+ "Restore default": "還原預設",
46
+ Appearance: "外觀",
47
+ "Light / dark mode": "明暗模式",
48
+ Dark: "深色",
49
+ Light: "淺色",
50
+ Language: "語言",
51
+ English: "English",
52
+ "Simplified Chinese": "中文-简体",
53
+ "Traditional Chinese": "中文-繁體",
54
+ Japanese: "日本語",
55
+ Korean: "한국어",
56
+ Vietnamese: "Tiếng Việt",
57
+ "Frame Config": "框架設定",
58
+ Cancel: "取消",
59
+ Submit: "確定"
60
+ }, lt = {
61
+ "Theme color": "テーマカラー",
62
+ "Restore default": "既定に戻す",
63
+ Appearance: "外観",
64
+ "Light / dark mode": "ライト/ダーク",
65
+ Dark: "ダーク",
66
+ Light: "ライト",
67
+ Language: "言語",
68
+ English: "English",
69
+ "Simplified Chinese": "簡体字中国語",
70
+ "Traditional Chinese": "繁体字中国語",
71
+ Japanese: "日本語",
72
+ Korean: "韓国語",
73
+ Vietnamese: "ベトナム語",
74
+ "Frame Config": "フレーム設定",
75
+ Cancel: "キャンセル",
76
+ Submit: "確定"
77
+ }, st = {
78
+ "Theme color": "테마 색",
79
+ "Restore default": "기본값으로 복원",
80
+ Appearance: "모양",
81
+ "Light / dark mode": "라이트/다크 모드",
82
+ Dark: "다크",
83
+ Light: "라이트",
84
+ Language: "언어",
85
+ English: "English",
86
+ "Simplified Chinese": "중국어(간체)",
87
+ "Traditional Chinese": "중국어(번체)",
88
+ Japanese: "일본어",
89
+ Korean: "한국어",
90
+ Vietnamese: "베트남어",
91
+ "Frame Config": "프레임 설정",
92
+ Cancel: "취소",
93
+ Submit: "확인"
94
+ }, at = {
95
+ "Theme color": "Màu chủ đề",
96
+ "Restore default": "Khôi phục mặc định",
97
+ Appearance: "Giao diện",
98
+ "Light / dark mode": "Sáng / tối",
99
+ Dark: "Tối",
100
+ Light: "Sáng",
101
+ Language: "Ngôn ngữ",
102
+ English: "English",
103
+ "Simplified Chinese": "Tiếng Trung (Giản thể)",
104
+ "Traditional Chinese": "Tiếng Trung (Phồn thể)",
105
+ Japanese: "Tiếng Nhật",
106
+ Korean: "Tiếng Hàn",
107
+ Vietnamese: "Tiếng Việt",
108
+ "Frame Config": "Cấu hình khung",
109
+ Cancel: "Hủy",
110
+ Submit: "Gửi"
111
+ }, ye = {
112
+ en_us: tt,
113
+ zh_cn: ot,
114
+ zh_tw: nt,
115
+ ja_jp: lt,
116
+ ko_kr: st,
117
+ vi_vn: at
118
+ };
119
+ function rt(p) {
120
+ return String(p || "en_us").toLowerCase().replace(/-/g, "_");
121
+ }
122
+ const gl = ye;
123
+ function hl(p) {
124
+ const m = rt(p);
125
+ return { ...ye[m] || ye.en_us };
126
+ }
127
+ const pe = (p) => {
128
+ try {
129
+ Te.init(Ae).setPageLoading(p);
130
+ } catch {
131
+ }
132
+ }, it = ({ router: p, useAdmin: m, adminPermission: o, noaccess: e }) => {
133
+ p.beforeEach((t, s, u) => {
134
+ pe(!0), u();
135
+ }), p.beforeEach((t, s, u) => {
136
+ m ? t.meta.admin && o() ? u() : e && e(t, s, u) : u();
137
+ }), p.afterEach((t, s, u) => {
138
+ if (u) {
139
+ pe(!1);
140
+ return;
141
+ }
142
+ const C = Te.tab(Ae);
143
+ document.title = t.meta.title, C.saveTab(t), pe(!1);
144
+ }), p.onError(() => {
145
+ pe(!1);
146
+ });
147
+ }, ct = (p, { routes: m, guard: o, useAdmin: e = !1, adminPermission: t = () => !0, noaccess: s }) => {
148
+ const u = De({
149
+ history: Be(),
150
+ routes: m
151
+ });
152
+ o && o(u), it({ router: u, useAdmin: e, adminPermission: t, noaccess: s }), p.use(u), globalThis.$router = u;
153
+ }, J = (p, m) => {
154
+ const o = p.__vccOpts || p;
155
+ for (const [e, t] of m)
156
+ o[e] = t;
157
+ return o;
158
+ }, ut = ["disabled", "onClick"], dt = /* @__PURE__ */ Object.assign({
159
+ name: "MvcBtnGroup",
160
+ inheritAttrs: !1
161
+ }, {
162
+ __name: "index",
163
+ props: {
164
+ modelValue: {
165
+ type: [String, Number, Boolean],
166
+ default: void 0
167
+ },
168
+ options: {
169
+ type: Array,
170
+ default: () => []
171
+ },
172
+ valueKey: {
173
+ type: String,
174
+ default: "value"
175
+ },
176
+ labelKey: {
177
+ type: String,
178
+ default: "label"
179
+ },
180
+ iconKey: {
181
+ type: String,
182
+ default: "icon"
183
+ },
184
+ iconClass: {
185
+ type: String,
186
+ default: "imicon"
187
+ },
188
+ disabled: {
189
+ type: Boolean,
190
+ default: !1
191
+ },
192
+ size: {
193
+ type: String,
194
+ default: "default",
195
+ validator: (p) => ["default", "small", "large"].includes(p)
196
+ }
197
+ },
198
+ emits: ["update:modelValue", "change"],
199
+ setup(p, { emit: m }) {
200
+ const o = p, e = m, t = (y) => {
201
+ const g = y.value;
202
+ return g === o.modelValue && (g !== void 0 || o.modelValue !== void 0);
203
+ }, s = (y) => {
204
+ o.disabled || (e("update:modelValue", y.value), e("change", y.value));
205
+ }, u = O(() => {
206
+ const y = o.options, g = Array.isArray(y) ? y : [], w = o.valueKey, _ = o.labelKey, T = o.iconKey;
207
+ return g.filter((A) => A != null).map((A) => typeof A == "object" && !Array.isArray(A) ? {
208
+ value: A[w],
209
+ label: A[_] ?? "",
210
+ icon: A[T] || "",
211
+ raw: A
212
+ } : {
213
+ value: A,
214
+ label: String(A),
215
+ icon: "",
216
+ raw: A
217
+ });
218
+ }), C = O(() => ({ small: "g4", default: "g6", large: "g8" })[o.size] ?? "g6"), $ = O(() => o.size === "small" ? "sizeSmall" : o.size === "large" ? "sizeLarge" : "");
219
+ return (y, g) => (b(), M("div", oe({
220
+ class: ["MvcBtnGroup flexMode", [n(C), n($), y.$attrs.class]]
221
+ }, y.$attrs, { role: "group" }), [
222
+ (b(!0), M(Y, null, se(n(u), (w) => (b(), M("button", {
223
+ key: w.value,
224
+ type: "button",
225
+ class: F(["btnItem", { isActive: t(w) }]),
226
+ disabled: o.disabled || w.disabled,
227
+ onClick: (_) => s(w)
228
+ }, [
229
+ w.icon ? (b(), M("i", {
230
+ key: 0,
231
+ class: F([[w.icon, o.iconClass], "noShrink fs16"]),
232
+ "aria-hidden": "true"
233
+ }, null, 2)) : K("", !0),
234
+ W(" " + L(y.$l(w.label)), 1)
235
+ ], 10, ut))), 128))
236
+ ], 16));
237
+ }
238
+ }), pt = /* @__PURE__ */ J(dt, [["__scopeId", "data-v-61c1ddc0"]]), mt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
239
+ __proto__: null,
240
+ default: pt
241
+ }, Symbol.toStringTag, { value: "Module" })), ft = { class: "MvcDrawer" }, gt = { class: "dragArea" }, ht = {
242
+ key: 0,
243
+ class: "flexMode vc hc h56 w64 abs r t z9"
244
+ }, bt = /* @__PURE__ */ Object.assign({
245
+ name: "MvcDrawer",
246
+ inheritAttrs: !1
247
+ }, {
248
+ __name: "index",
249
+ props: {
250
+ drawer: {
251
+ type: [Array, Object],
252
+ default: () => []
253
+ },
254
+ current: {
255
+ type: [Number, String],
256
+ default: ""
257
+ },
258
+ keepalive: {
259
+ type: Boolean,
260
+ default: !1
261
+ }
262
+ },
263
+ emits: ["update:current"],
264
+ setup(p, { emit: m }) {
265
+ const o = p, e = () => ({
266
+ visible: !1,
267
+ title: "",
268
+ cpt: "",
269
+ size: 640,
270
+ params: {},
271
+ direction: "rtl"
272
+ }), t = H({
273
+ drawerInfo: e(),
274
+ cpt: null,
275
+ mounted: !1,
276
+ dragMode: !1
277
+ }), s = m, u = () => {
278
+ t.mounted = !0;
279
+ }, C = () => {
280
+ s("update:current", ""), t.mounted = !1, k.value ? t.drawerInfo = e() : ge(() => {
281
+ delete t.drawerInfo.cpt;
282
+ });
283
+ }, $ = () => {
284
+ t.drawerInfo.visible && (s("update:current", ""), t.drawerInfo.visible = !1);
285
+ }, y = () => {
286
+ t.drawerInfo.cpt = t.cpt;
287
+ }, g = (d) => {
288
+ t.dragMode = !0, document.addEventListener("mousemove", w), document.addEventListener("mouseup", _);
289
+ }, w = (d) => {
290
+ var a, l;
291
+ if (d.x > 80) {
292
+ const h = (((l = (a = globalThis.$config) == null ? void 0 : a.options) == null ? void 0 : l.innerWidth) ?? window.innerWidth) - d.x;
293
+ h > 480 && (t.drawerInfo.size = h);
294
+ }
295
+ }, _ = () => {
296
+ t.dragMode = !1, T();
297
+ }, T = () => {
298
+ document.removeEventListener("mousemove", w), document.removeEventListener("mouseup", _);
299
+ }, A = O(() => !!t.drawerInfo.title), k = O(() => !o.keepalive);
300
+ return ce(() => {
301
+ T();
302
+ }), ne(
303
+ () => o.current,
304
+ (d) => {
305
+ if (o.drawer.length)
306
+ if (window.$getType(d) === "Number") {
307
+ const a = o.drawer[d], l = {
308
+ ...a,
309
+ size: a.size || 640,
310
+ direction: a.direction || "rtl",
311
+ visible: !0
312
+ };
313
+ l.cpt ? (t.cpt = me(l.cpt), delete l.cpt) : (t.cpt = null, u()), t.drawerInfo = l;
314
+ } else
315
+ $();
316
+ }
317
+ ), (d, a) => {
318
+ const l = E("Loading"), c = E("el-drawer");
319
+ return b(), M("div", ft, [
320
+ z(c, {
321
+ modelValue: n(t).drawerInfo.visible,
322
+ "onUpdate:modelValue": a[0] || (a[0] = (h) => n(t).drawerInfo.visible = h),
323
+ title: d.$l(n(t).drawerInfo.title),
324
+ "with-header": n(A),
325
+ "append-to-body": "",
326
+ size: n(t).drawerInfo.size,
327
+ direction: n(t).drawerInfo.direction,
328
+ "destroy-on-close": n(k),
329
+ onClosed: C,
330
+ onOpened: y,
331
+ class: F(n(t).dragMode && "notransition noevent noselect")
332
+ }, {
333
+ default: V(() => [
334
+ r("div", gt, [
335
+ r("div", {
336
+ class: F(["dragHandle", n(t).dragMode && "active"]),
337
+ onMousedown: g
338
+ }, [...a[1] || (a[1] = [
339
+ r("i", { class: "imicon im-handle fs12" }, null, -1)
340
+ ])], 34)
341
+ ]),
342
+ n(A) ? K("", !0) : (b(), M("div", ht, [
343
+ r("i", {
344
+ class: "imicon im-close fs20 txt-dark7 hover-txt-primary",
345
+ onClick: $
346
+ })
347
+ ])),
348
+ z(l, {
349
+ loading: !n(t).mounted
350
+ }, null, 8, ["loading"]),
351
+ d.$slots.default ? R(d.$slots, "default", { key: 1 }, void 0, !0) : (b(), B(Oe(n(t).drawerInfo.cpt), oe({ key: 2 }, d.$attrs, {
352
+ params: n(t).drawerInfo.params,
353
+ onClose: $,
354
+ onMounted: u
355
+ }), null, 16, ["params"]))
356
+ ]),
357
+ _: 3
358
+ }, 8, ["modelValue", "title", "with-header", "size", "direction", "destroy-on-close", "class"])
359
+ ]);
360
+ };
361
+ }
362
+ }), yt = /* @__PURE__ */ J(bt, [["__scopeId", "data-v-665c2158"]]), vt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
363
+ __proto__: null,
364
+ default: yt
365
+ }, Symbol.toStringTag, { value: "Module" })), _t = {
366
+ key: 1,
367
+ class: "flexMode vc"
368
+ }, wt = { class: "pl4" }, $t = { class: "pl4" }, xt = /* @__PURE__ */ Object.assign({
369
+ name: "MvcDrawerArea",
370
+ inheritAttrs: !1
371
+ }, {
372
+ __name: "index",
373
+ props: {
374
+ noscroll: {
375
+ type: Boolean,
376
+ default: !1
377
+ },
378
+ nofooter: {
379
+ type: Boolean,
380
+ default: !1
381
+ },
382
+ loading: {
383
+ type: Boolean,
384
+ default: !1
385
+ },
386
+ loadingTxt: {
387
+ type: String,
388
+ default: "... ... ..."
389
+ },
390
+ footerClass: {
391
+ type: String,
392
+ default: "hc"
393
+ },
394
+ showCancel: {
395
+ type: Boolean,
396
+ default: !0
397
+ },
398
+ cancelTxt: {
399
+ type: String,
400
+ default: "Cancel"
401
+ },
402
+ cancelIcon: {
403
+ type: String,
404
+ default: "im-left"
405
+ },
406
+ showConfirm: {
407
+ type: Boolean,
408
+ default: !0
409
+ },
410
+ confirmTxt: {
411
+ type: String,
412
+ default: "Submit"
413
+ },
414
+ confirmIcon: {
415
+ type: String,
416
+ default: "im-check"
417
+ },
418
+ minusHeight: {
419
+ type: [String, Number],
420
+ default: 0
421
+ }
422
+ },
423
+ emits: ["close", "submit", "cancel", "mounted"],
424
+ setup(p, { expose: m, emit: o }) {
425
+ const e = p, { proxy: t } = ae(), s = G(), u = o;
426
+ ee(() => {
427
+ u("mounted");
428
+ });
429
+ const C = () => {
430
+ u("close"), u("cancel");
431
+ }, $ = () => {
432
+ u("submit");
433
+ };
434
+ m({
435
+ toClose: C,
436
+ scrollTo: (_) => {
437
+ var T;
438
+ (T = s.value) == null || T.setScrollTop(_);
439
+ }
440
+ });
441
+ const g = O(() => [e.loading && "noevent", t.$attrs.class]), w = O(() => ({
442
+ height: `calc(100vh - 56px - ${e.nofooter ? 0 : 64}px - ${e.minusHeight}px)`
443
+ }));
444
+ return (_, T) => {
445
+ const A = E("Loading"), k = E("el-scrollbar"), d = E("el-button");
446
+ return b(), M(Y, null, [
447
+ r("div", {
448
+ class: F(["MvcDrawerBody VAfter", n(g)]),
449
+ style: Le(n(w))
450
+ }, [
451
+ z(A, {
452
+ loading: e.loading,
453
+ txt: e.loadingTxt
454
+ }, null, 8, ["loading", "txt"]),
455
+ e.noscroll ? R(_.$slots, "default", { key: 0 }, void 0, !0) : (b(), B(k, {
456
+ key: 1,
457
+ ref_key: "scrollbar",
458
+ ref: s,
459
+ class: "wp100"
460
+ }, {
461
+ default: V(() => [
462
+ R(_.$slots, "default", {}, void 0, !0)
463
+ ]),
464
+ _: 3
465
+ }, 512))
466
+ ], 6),
467
+ e.nofooter ? K("", !0) : (b(), M("div", {
468
+ key: 0,
469
+ class: F(["drawerFooter relative flexMode vc hb h64", e.footerClass])
470
+ }, [
471
+ _.$slots.footer ? R(_.$slots, "footer", { key: 0 }, void 0, !0) : (b(), M("div", _t, [
472
+ _.$slots.cancel ? R(_.$slots, "cancel", { key: 0 }, void 0, !0) : e.showCancel ? (b(), B(d, {
473
+ key: 1,
474
+ plain: "",
475
+ size: "large",
476
+ onClick: C
477
+ }, {
478
+ icon: V(() => [
479
+ r("i", {
480
+ class: F(["imicon", e.cancelIcon])
481
+ }, null, 2)
482
+ ]),
483
+ default: V(() => [
484
+ r("span", wt, L(_.$l(e.cancelTxt)), 1)
485
+ ]),
486
+ _: 1
487
+ })) : K("", !0),
488
+ _.$slots.submit ? R(_.$slots, "submit", { key: 2 }, void 0, !0) : e.showConfirm ? (b(), B(d, {
489
+ key: 3,
490
+ type: "primary",
491
+ size: "large",
492
+ loading: e.loading,
493
+ onClick: $
494
+ }, {
495
+ icon: V(() => [
496
+ r("i", {
497
+ class: F(["imicon", e.confirmIcon])
498
+ }, null, 2)
499
+ ]),
500
+ default: V(() => [
501
+ r("span", $t, L(_.$l(e.confirmTxt)), 1)
502
+ ]),
503
+ _: 1
504
+ }, 8, ["loading"])) : K("", !0),
505
+ _.$slots.footerright ? R(_.$slots, "footerright", { key: 4 }, void 0, !0) : K("", !0)
506
+ ]))
507
+ ], 2))
508
+ ], 64);
509
+ };
510
+ }
511
+ }), St = /* @__PURE__ */ J(xt, [["__scopeId", "data-v-f61caca0"]]), Ct = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
512
+ __proto__: null,
513
+ default: St
514
+ }, Symbol.toStringTag, { value: "Module" }));
515
+ function kt(p) {
516
+ var o;
517
+ if (p == null) return [];
518
+ const m = Array.isArray(p) ? p : [p];
519
+ if (m.length === 1 && ((o = m[0]) == null ? void 0 : o.type) === Y) {
520
+ const e = m[0].children;
521
+ return e == null ? [] : Array.isArray(e) ? e : [e];
522
+ }
523
+ return m;
524
+ }
525
+ function Ce(p, m) {
526
+ if (p === m) return !0;
527
+ if (!Array.isArray(p) || !Array.isArray(m) || p.length !== m.length)
528
+ return !1;
529
+ for (let o = 0; o < p.length; o++)
530
+ if (p[o] !== m[o]) return !1;
531
+ return !0;
532
+ }
533
+ const Tt = Ie({
534
+ name: "MvcFormItemFilter",
535
+ setup(p, m) {
536
+ function o(t) {
537
+ if (!Array.isArray(t)) return [];
538
+ const s = t.filter((y) => y && y.children !== "v-if"), u = s.length !== t.length, C = s.map((y) => e(y));
539
+ return u || C.some((y, g) => y !== s[g]) ? C : t;
540
+ }
541
+ function e(t) {
542
+ var C, $, y, g;
543
+ if (!t) return t;
544
+ const s = t.children, u = window.$getType(s);
545
+ if (((C = t.type) == null ? void 0 : C.name) === "ElFormItem" && (($ = t.props) == null ? void 0 : $.label) != null) {
546
+ const w = ((g = (y = t.props.label).$l) == null ? void 0 : g.call(y)) || t.props.label;
547
+ if (u === "Array") {
548
+ const _ = o(s);
549
+ return Ce(_, s) ? _e(t, { label: w }) : we(t.type, { ...t.props || {}, label: w }, _);
550
+ }
551
+ return _e(t, { label: w });
552
+ }
553
+ if (u === "Array") {
554
+ const w = o(s);
555
+ return Ce(w, s) ? t : we(t.type, t.props, w);
556
+ }
557
+ return t;
558
+ }
559
+ return () => {
560
+ var u, C;
561
+ const t = (C = (u = m.slots).default) == null ? void 0 : C.call(u), s = kt(t);
562
+ return o(s);
563
+ };
564
+ }
565
+ }), At = { class: "MvcForm" }, Mt = /* @__PURE__ */ Object.assign({
566
+ name: "MvcForm"
567
+ }, {
568
+ __name: "index",
569
+ props: {
570
+ modelValue: {
571
+ type: Object,
572
+ default: /* @__PURE__ */ Object.create(null)
573
+ },
574
+ rules: {
575
+ type: Object,
576
+ default: /* @__PURE__ */ Object.create(null)
577
+ },
578
+ size: {
579
+ type: String,
580
+ default: "large"
581
+ }
582
+ },
583
+ setup(p, { expose: m, emit: o }) {
584
+ const e = p, t = H({
585
+ form: {}
586
+ }), { proxy: s } = ae(), u = o, C = async () => {
587
+ var g;
588
+ try {
589
+ return (g = s.$refs) != null && g.form ? (await s.$refs.form.validate(), $()) : !1;
590
+ } catch {
591
+ return !1;
592
+ }
593
+ }, $ = () => t.form, y = O(() => {
594
+ const g = {};
595
+ for (let w in e.rules)
596
+ g[w] = e.rules[w].map((_) => ({
597
+ ..._,
598
+ ..._.message && { message: window.$l(_.message) }
599
+ }));
600
+ return g;
601
+ });
602
+ return ne(
603
+ () => t.form,
604
+ (g) => {
605
+ g && !xe(g, e.modelValue) && u("update:modelValue", g);
606
+ },
607
+ {
608
+ deep: !0
609
+ }
610
+ ), ne(
611
+ () => e.modelValue,
612
+ (g) => {
613
+ g && !xe(g, t.form) && (t.form = g);
614
+ },
615
+ {
616
+ immediate: !0,
617
+ deep: !0
618
+ }
619
+ ), m({
620
+ validate: C
621
+ }), (g, w) => {
622
+ const _ = E("el-form");
623
+ return b(), M("div", At, [
624
+ z(_, {
625
+ ref: "form",
626
+ model: n(t).form,
627
+ rules: n(y),
628
+ size: e.size,
629
+ "validate-on-rule-change": !1,
630
+ "label-position": "top"
631
+ }, {
632
+ default: V(() => [
633
+ z(n(Tt), null, {
634
+ default: V(() => [
635
+ R(g.$slots, "default")
636
+ ]),
637
+ _: 3
638
+ })
639
+ ]),
640
+ _: 3
641
+ }, 8, ["model", "rules", "size"])
642
+ ]);
643
+ };
644
+ }
645
+ }), Vt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
646
+ __proto__: null,
647
+ default: Mt
648
+ }, Symbol.toStringTag, { value: "Module" })), Ot = { class: "FrameTab sticky h36 pl16 pt4 xscroll nobar fadeout flexGrow backdrop z9" }, Lt = { class: "relative flexMode vr g4 z2" }, It = ["id", "onContextmenu", "onClick", "onDblclick"], jt = ["onClick"], zt = /* @__PURE__ */ Object.assign({
649
+ name: "FrameTab",
650
+ inheritAttrs: !1
651
+ }, {
652
+ __name: "Tab",
653
+ setup(p) {
654
+ H({
655
+ active: 2
656
+ });
657
+ const m = he("store"), o = m.tab(), e = m.rmenu(), t = Me(), s = Ve(), { proxy: u } = ae();
658
+ ee(() => {
659
+ C();
660
+ });
661
+ const C = () => {
662
+ u.$el.addEventListener("scroll", y);
663
+ }, $ = () => {
664
+ const l = localStorage.getItem("tabsScroll");
665
+ l && (u.$el.scrollLeft = Number(l));
666
+ }, y = (l) => {
667
+ let c = null;
668
+ c !== null && clearTimeout(c), c = setTimeout(function() {
669
+ const { scrollLeft: h } = l.target;
670
+ localStorage.setItem("tabsScroll", h);
671
+ }, 100);
672
+ }, g = () => {
673
+ ge(() => {
674
+ const l = u.$el.querySelector(`#tab_${d.value}`);
675
+ Ye(u.$el, l) ? $() : u.$el.scrollLeft = (l == null ? void 0 : l.offsetLeft) - 16;
676
+ });
677
+ }, w = (l, c, h) => {
678
+ e.saveData("type", "tabManager"), e.saveData("options", [
679
+ {
680
+ label: "Close",
681
+ value: "close",
682
+ icon: "im-close",
683
+ disabled: k.value.length === 1,
684
+ cb: () => {
685
+ o.closeTab(c, h);
686
+ }
687
+ },
688
+ {
689
+ label: "Close Right",
690
+ value: "closeRight",
691
+ icon: "im-right",
692
+ disabled: h === k.value.length - 1,
693
+ cb: () => {
694
+ o.closeRightTab(c, h);
695
+ }
696
+ },
697
+ {
698
+ label: "Close Left",
699
+ value: "closeLeft",
700
+ icon: "im-left",
701
+ disabled: h === 0,
702
+ cb: () => {
703
+ o.closeLeftTab(c, h);
704
+ }
705
+ },
706
+ {
707
+ label: "Close Other",
708
+ value: "closeOther",
709
+ icon: "im-left",
710
+ disabled: k.value.length === 1,
711
+ cb: () => {
712
+ o.closeOtherTab(c, h);
713
+ }
714
+ }
715
+ ]), e.show({ el: l.target });
716
+ }, _ = (l) => {
717
+ l.name !== d.value && s.push({ name: l.name });
718
+ }, T = (l) => {
719
+ l.name === d.value ? s.replace({ name: l.name, query: { t: +/* @__PURE__ */ new Date() } }) : _(l);
720
+ }, A = (l, c) => {
721
+ o.closeTab(l, c);
722
+ }, k = O(() => o.tabs), d = O(() => t.name), a = O(() => k.value.length);
723
+ return ne(
724
+ () => a.value,
725
+ (l) => {
726
+ l && (localStorage.setItem("tabs", JSON.stringify(k.value)), g());
727
+ },
728
+ {
729
+ immediate: !0
730
+ }
731
+ ), ce(() => {
732
+ u.$el.removeEventListener("scroll", y);
733
+ }), (l, c) => (b(), M("div", Ot, [
734
+ r("div", Lt, [
735
+ (b(!0), M(Y, null, se(n(k), (h, x) => (b(), M("div", {
736
+ key: h.name,
737
+ id: `tab_${h.name}`,
738
+ class: F(["relative flexMode vc g4 noShrink tabItem h32 p0-8 fs12 radius4 point noselect", [
739
+ h.name === n(d) && "active",
740
+ n(k).length > 1 && "hoverItem"
741
+ ]]),
742
+ onContextmenu: $e((i) => w(i, h, x), ["prevent", "stop"]),
743
+ onClick: (i) => _(h),
744
+ onDblclick: (i) => T(h)
745
+ }, [
746
+ h.icon ? (b(), M("i", {
747
+ key: 0,
748
+ class: F(["imicon", h.icon])
749
+ }, null, 2)) : K("", !0),
750
+ W(" " + L(h.meta.title) + " ", 1),
751
+ r("div", {
752
+ class: "abs r flexMode hc vc w20 h20",
753
+ onClick: $e((i) => A(h, x), ["stop"])
754
+ }, [...c[0] || (c[0] = [
755
+ r("span", null, "✕", -1)
756
+ ])], 8, jt)
757
+ ], 42, It))), 128)),
758
+ c[1] || (c[1] = r("div", { class: "w16 h16 noShrink" }, null, -1))
759
+ ])
760
+ ]));
761
+ }
762
+ }), Et = /* @__PURE__ */ J(zt, [["__scopeId", "data-v-bc298ab0"]]), Nt = { class: "LogoArea flexMode vc h64 p0-16 relative" }, Kt = { class: "logo" }, Ft = { class: "logomini" }, Dt = { class: "MenuArea p4 yscroll" }, Bt = ["onClick"], Pt = { class: "itemIcon w24 txt-c txt-tip fs18" }, Rt = { key: 1 }, Ht = {
763
+ key: 0,
764
+ class: "itemChildrenArea mt2 p4"
765
+ }, Ut = ["onClick"], Gt = { class: "itemIcon w24 txt-c txt-tip fs18" }, Jt = { class: "h64 p8-4" }, qt = { class: "flexMode vc g8 p8-16 radius4 hover" }, Wt = /* @__PURE__ */ Object.assign({
766
+ name: "FrameMenu",
767
+ inheritAttrs: !1
768
+ }, {
769
+ __name: "Menu",
770
+ props: {
771
+ iconClass: {
772
+ type: String,
773
+ default: ""
774
+ },
775
+ routes: {
776
+ type: Array,
777
+ default: () => []
778
+ },
779
+ usernameKey: {
780
+ type: String,
781
+ default: "username"
782
+ }
783
+ },
784
+ setup(p, { emit: m }) {
785
+ const o = p, e = H({
786
+ collapse: !1
787
+ }), t = Me(), s = Ve(), C = he("store").launch();
788
+ ee(() => {
789
+ y();
790
+ });
791
+ const $ = m, y = () => {
792
+ const l = localStorage.getItem("collapse");
793
+ l && (e.collapse = JSON.parse(l)), document.addEventListener("keydown", w);
794
+ }, g = (l) => {
795
+ e.collapse === !0 ? e.collapse = !1 : e.collapse === !1 ? e.collapse = !0 : e.collapse = l, localStorage.setItem("collapse", e.collapse), $("on-collapse-change", e.collapse);
796
+ }, w = (l) => {
797
+ l.shiftKey && (l.metaKey || l.ctrlKey) && (l.keyCode === 37 ? g(!0) : l.keyCode === 39 && g(!1));
798
+ }, _ = (l) => {
799
+ var c;
800
+ return (c = l == null ? void 0 : l.children) != null && c.length ? _(l.children[0]) : l;
801
+ }, T = (l) => {
802
+ var c;
803
+ return ((c = l == null ? void 0 : l.children) == null ? void 0 : c.some((h) => h.name === t.name || T(h))) ?? !1;
804
+ }, A = (l) => {
805
+ const c = _(l);
806
+ c != null && c.name && s.push({ name: c.name });
807
+ }, k = () => {
808
+ const l = { ...t.query, _: Date.now() }, c = t.name ? { name: t.name, params: t.params, query: l } : { path: t.path, query: l };
809
+ s.replace(c).catch(() => {
810
+ });
811
+ }, d = () => {
812
+ window.$confirm("Log out?".$l(), "Tips", {
813
+ callback: (l) => {
814
+ l === "confirm" && s.replace({ path: "/" });
815
+ }
816
+ });
817
+ }, a = O(() => e.collapse ? "im-verticalleft" : "im-verticalright");
818
+ return ce(() => {
819
+ document.removeEventListener("keydown", w);
820
+ }), (l, c) => {
821
+ const h = E("el-popconfirm");
822
+ return b(), M("div", {
823
+ class: F(["FrameMenu sticky vh100 noselect noShrink", n(e).collapse && "collapse"])
824
+ }, [
825
+ r("div", Nt, [
826
+ r("div", Kt, [
827
+ R(l.$slots, "logo", {}, void 0, !0)
828
+ ]),
829
+ r("div", Ft, [
830
+ R(l.$slots, "logomini", {}, void 0, !0)
831
+ ]),
832
+ r("div", {
833
+ class: "collapseArea hover abs",
834
+ onClick: c[0] || (c[0] = (x) => g(n(e).collapse))
835
+ }, [
836
+ r("i", {
837
+ class: F(["imicon fs20", n(a)])
838
+ }, null, 2)
839
+ ])
840
+ ]),
841
+ r("div", Dt, [
842
+ (b(!0), M(Y, null, se(o.routes, (x, i) => {
843
+ var f, S;
844
+ return b(), M("div", {
845
+ key: i,
846
+ class: "menuItemWrap mb2"
847
+ }, [
848
+ r("div", {
849
+ class: F(["menuItem flexMode vc g8 radius4 p0-16", [
850
+ n(t).name === x.name && "active bg-primary",
851
+ n(e).collapse && "hc",
852
+ n(e).collapse && T(x) && "activeChild"
853
+ ]]),
854
+ onClick: (v) => A(x),
855
+ onDblclick: k
856
+ }, [
857
+ r("div", Pt, [
858
+ x.meta.icon ? (b(), M("i", {
859
+ key: 0,
860
+ class: F([o.iconClass, x.meta.icon])
861
+ }, null, 2)) : (b(), M("span", Rt, L(((f = x.meta.title) == null ? void 0 : f.substr(0, 1)) || "U"), 1))
862
+ ]),
863
+ n(e).collapse ? K("", !0) : (b(), M("div", {
864
+ key: 0,
865
+ class: F(["itemTitle txt-nowrap fs14", n(t).name === x.name ? "txt-white" : "txt-h1"])
866
+ }, L(x.meta.title), 3))
867
+ ], 42, Bt),
868
+ (S = x.children) != null && S.length ? (b(), M("div", Ht, [
869
+ (b(!0), M(Y, null, se(x.children, (v, N) => (b(), M("div", {
870
+ key: N,
871
+ class: F(["childrenItem flexMode vc g8 radius4 h40 p0-16", n(t).name === v.name && "active bg-primary"]),
872
+ onClick: (I) => A(v),
873
+ onDblclick: k
874
+ }, [
875
+ r("div", Gt, [
876
+ v.meta.icon ? (b(), M("i", {
877
+ key: 0,
878
+ class: F([o.iconClass, v.meta.icon])
879
+ }, null, 2)) : K("", !0)
880
+ ]),
881
+ n(e).collapse ? K("", !0) : (b(), M("div", {
882
+ key: 0,
883
+ class: F(["itemTitle txt-nowrap fs14", n(t).name === v.name ? "txt-white" : "txt-h1"])
884
+ }, L(v.meta.title), 3))
885
+ ], 42, Ut))), 128))
886
+ ])) : K("", !0)
887
+ ]);
888
+ }), 128))
889
+ ]),
890
+ r("div", Jt, [
891
+ z(h, {
892
+ placement: "top",
893
+ title: l.$l("Log out?"),
894
+ onConfirm: d
895
+ }, {
896
+ reference: V(() => [
897
+ r("div", qt, [
898
+ c[1] || (c[1] = r("i", { class: "imicon im-power fs20" }, null, -1)),
899
+ r("span", null, L(n(C).userinfo[o.usernameKey]), 1)
900
+ ])
901
+ ]),
902
+ _: 1
903
+ }, 8, ["title"])
904
+ ])
905
+ ], 2);
906
+ };
907
+ }
908
+ }), Yt = /* @__PURE__ */ J(Wt, [["__scopeId", "data-v-8db79d97"]]), Zt = { class: "FrameFooter" }, Qt = { class: "txt-tip" }, Xt = { class: "txt-primary" }, eo = /* @__PURE__ */ Object.assign({
909
+ name: "FrameFooter",
910
+ inheritAttrs: !1
911
+ }, {
912
+ __name: "Footer",
913
+ setup(p) {
914
+ H({});
915
+ const m = O(() => globalThis.$config);
916
+ return (o, e) => (b(), M("div", Zt, [
917
+ r("span", Qt, L(n(m).copyright), 1),
918
+ r("span", Xt, L(n(m).author), 1)
919
+ ]));
920
+ }
921
+ }), to = /* @__PURE__ */ J(eo, [["__scopeId", "data-v-c3ba0162"]]), oo = /* @__PURE__ */ Object.assign({
922
+ name: "FrameTool",
923
+ inheritAttrs: !1
924
+ }, {
925
+ __name: "Tool",
926
+ setup(p) {
927
+ const m = Pe(() => import("./Config.js"));
928
+ H({});
929
+ const o = H({
930
+ current: "",
931
+ list: [
932
+ {
933
+ title: "Frame Config",
934
+ cpt: me(m)
935
+ }
936
+ ]
937
+ }), e = () => {
938
+ o.current = 0;
939
+ };
940
+ return (t, s) => {
941
+ const u = E("Drawer");
942
+ return b(), M(Y, null, [
943
+ r("div", { class: "FrameTool fixed r t flexMode vc g8 p0-8 w40 h40 noShrink z9" }, [
944
+ r("div", {
945
+ class: "hover w24 h24 flexMode hc vc",
946
+ onClick: e
947
+ }, [...s[1] || (s[1] = [
948
+ r("i", { class: "imicon im-setting fs20" }, null, -1)
949
+ ])])
950
+ ]),
951
+ z(u, {
952
+ current: n(o).current,
953
+ "onUpdate:current": s[0] || (s[0] = (C) => n(o).current = C),
954
+ drawer: n(o).list
955
+ }, null, 8, ["current", "drawer"])
956
+ ], 64);
957
+ };
958
+ }
959
+ }), no = { class: "MvcFrame" }, lo = ["element-loading-text"], so = /* @__PURE__ */ Object.assign({
960
+ name: "MvcFrame",
961
+ inheritAttrs: !1
962
+ }, {
963
+ __name: "index",
964
+ props: {
965
+ /* menu包含:
966
+ @params
967
+ options: vue-router的路由表
968
+ iconClass: 菜单图标样式名,iconfont创建时的样式名或其它自定义规则
969
+ logo: 菜单logo, vue dom
970
+ logomini: 菜单logo缩小时的样子, vue dom
971
+ */
972
+ menu: {
973
+ type: Object,
974
+ default: /* @__PURE__ */ Object.create(null)
975
+ },
976
+ page: {
977
+ type: Object,
978
+ default: /* @__PURE__ */ Object.create(null)
979
+ },
980
+ /** `v-loading` 文案;空则使用 Element Plus 默认 */
981
+ pageLoadingText: {
982
+ type: String,
983
+ default: ""
984
+ }
985
+ },
986
+ setup(p) {
987
+ const m = p;
988
+ H({});
989
+ const o = he("store"), e = o.tab(), t = o.init();
990
+ ee(() => {
991
+ s();
992
+ });
993
+ const s = () => {
994
+ Ze(), u(), ze();
995
+ }, u = () => {
996
+ var $, y, g, w, _, T;
997
+ if ((y = ($ = globalThis.$config) == null ? void 0 : $.iconfont) != null && y.url) {
998
+ const A = document.createElement("script");
999
+ if (A.id = "iconfont", A.type = "text/javascript", A.src = (w = (g = globalThis.$config) == null ? void 0 : g.iconfont) == null ? void 0 : w.url, document.getElementById("iconfont"))
1000
+ return;
1001
+ document.head.appendChild(A), (T = (_ = globalThis.$config) == null ? void 0 : _.iconfont) == null || delete T.url;
1002
+ }
1003
+ }, C = O(() => t.pageLoading);
1004
+ return ($, y) => {
1005
+ const g = E("router-view"), w = Re("loading");
1006
+ return b(), M("div", no, [
1007
+ z(Yt, de(fe(m.menu)), ie({ _: 2 }, [
1008
+ $.$slots.logo ? {
1009
+ name: "logo",
1010
+ fn: V(() => [
1011
+ R($.$slots, "logo", {}, void 0, !0)
1012
+ ]),
1013
+ key: "0"
1014
+ } : void 0,
1015
+ $.$slots.logomini ? {
1016
+ name: "logomini",
1017
+ fn: V(() => [
1018
+ R($.$slots, "logomini", {}, void 0, !0)
1019
+ ]),
1020
+ key: "1"
1021
+ } : void 0
1022
+ ]), 1040),
1023
+ He((b(), M("div", {
1024
+ class: "PageArea pageAreaWithLoading",
1025
+ "element-loading-text": m.pageLoadingText || "LOADING"
1026
+ }, [
1027
+ n(e).useTab ? (b(), B(Et, { key: 0 })) : K("", !0),
1028
+ z(oo),
1029
+ z(g, de(fe(m.page)), null, 16),
1030
+ z(to)
1031
+ ], 8, lo)), [
1032
+ [w, n(C)]
1033
+ ])
1034
+ ]);
1035
+ };
1036
+ }
1037
+ }), ao = /* @__PURE__ */ J(so, [["__scopeId", "data-v-2163182e"]]), ro = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1038
+ __proto__: null,
1039
+ default: ao
1040
+ }, Symbol.toStringTag, { value: "Module" })), io = {
1041
+ class: "MvcIcon",
1042
+ "aria-hidden": "true"
1043
+ }, co = ["xlink:href"], uo = /* @__PURE__ */ Object.assign({
1044
+ name: "MvcIcon"
1045
+ }, {
1046
+ __name: "index",
1047
+ props: {
1048
+ name: {
1049
+ type: String,
1050
+ default: "cloud"
1051
+ }
1052
+ },
1053
+ setup(p) {
1054
+ const m = H({
1055
+ prefix: "imc"
1056
+ });
1057
+ return ee(() => {
1058
+ var o, e;
1059
+ (e = (o = globalThis.$config) == null ? void 0 : o.iconfont) != null && e.prefix && (m.prefix = globalThis.$config.iconfont.prefix);
1060
+ }), (o, e) => (b(), M("svg", io, [
1061
+ r("use", {
1062
+ "xlink:href": `#${n(m).prefix}-${p.name}`
1063
+ }, null, 8, co)
1064
+ ]));
1065
+ }
1066
+ }), po = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1067
+ __proto__: null,
1068
+ default: uo
1069
+ }, Symbol.toStringTag, { value: "Module" })), mo = /* @__PURE__ */ Object.assign({
1070
+ name: "MvcInput"
1071
+ }, {
1072
+ __name: "index",
1073
+ props: {
1074
+ modelValue: {
1075
+ type: [String, Number],
1076
+ default: ""
1077
+ }
1078
+ },
1079
+ emits: [
1080
+ "update:modelValue",
1081
+ "input",
1082
+ "change",
1083
+ "blur",
1084
+ "focus"
1085
+ ],
1086
+ setup(p, { emit: m }) {
1087
+ const o = p, e = Ue(), t = G(null);
1088
+ let s = null;
1089
+ const u = H({
1090
+ val: "",
1091
+ isComposing: !1
1092
+ }), C = m, { proxy: $ } = ae();
1093
+ ee(() => {
1094
+ var d, a, l;
1095
+ const k = (d = t.value) == null ? void 0 : d.$el;
1096
+ s = ((a = k == null ? void 0 : k.querySelector) == null ? void 0 : a.call(k, "input")) || ((l = k == null ? void 0 : k.querySelector) == null ? void 0 : l.call(k, "textarea")), s && (s.addEventListener("compositionstart", y), s.addEventListener("compositionend", g));
1097
+ });
1098
+ const y = () => {
1099
+ u.isComposing = !0;
1100
+ }, g = () => {
1101
+ u.isComposing = !1, ge(() => _(u.val));
1102
+ }, w = (k) => {
1103
+ u.isComposing || _(k);
1104
+ }, _ = (k) => {
1105
+ C("update:modelValue", k), C("input", k);
1106
+ }, T = O(() => !!($.$attrs.maxlength || A.value)), A = O(() => $.$attrs.max);
1107
+ return ne(
1108
+ () => o.modelValue,
1109
+ (k) => {
1110
+ const d = String(k ?? "");
1111
+ String(u.val) !== d && (u.val = d);
1112
+ },
1113
+ { immediate: !0 }
1114
+ ), ce(() => {
1115
+ s && (s.removeEventListener("compositionstart", y), s.removeEventListener("compositionend", g), s = null);
1116
+ }), (k, d) => {
1117
+ const a = E("el-input");
1118
+ return b(), B(a, oe({
1119
+ ref_key: "inputRef",
1120
+ ref: t,
1121
+ modelValue: n(u).val,
1122
+ "onUpdate:modelValue": d[0] || (d[0] = (l) => n(u).val = l),
1123
+ "show-word-limit": n(T),
1124
+ maxlength: n(A),
1125
+ class: "MvcInput"
1126
+ }, k.$attrs, { onInput: w }), ie({ _: 2 }, [
1127
+ se(n(e), (l, c) => ({
1128
+ name: c,
1129
+ fn: V((h) => [
1130
+ R(k.$slots, c, de(fe(h || {})))
1131
+ ])
1132
+ }))
1133
+ ]), 1040, ["modelValue", "show-word-limit", "maxlength"]);
1134
+ };
1135
+ }
1136
+ }), fo = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1137
+ __proto__: null,
1138
+ default: mo
1139
+ }, Symbol.toStringTag, { value: "Module" })), go = { class: "content flexMode flexV vc g12 relative z1" }, ho = /* @__PURE__ */ Object.assign({
1140
+ name: "MvcLoading",
1141
+ inheritAttrs: !1
1142
+ }, {
1143
+ __name: "index",
1144
+ props: {
1145
+ /** 是否显示遮罩与指示器 */
1146
+ loading: {
1147
+ type: Boolean,
1148
+ default: !1
1149
+ },
1150
+ txtClass: {
1151
+ type: String,
1152
+ default: "txt-h2"
1153
+ },
1154
+ showTxt: {
1155
+ type: Boolean,
1156
+ default: !1
1157
+ },
1158
+ /** 底部说明文案(空则不显示第二行) */
1159
+ txt: {
1160
+ type: String,
1161
+ default: "- LOADING -"
1162
+ },
1163
+ /** 旋转图标 class,默认图标字体 */
1164
+ icon: {
1165
+ type: String,
1166
+ default: "im-loading"
1167
+ },
1168
+ size: {
1169
+ type: String,
1170
+ default: "28"
1171
+ },
1172
+ radius: {
1173
+ type: String,
1174
+ default: "8"
1175
+ }
1176
+ },
1177
+ setup(p) {
1178
+ const m = p;
1179
+ return (o, e) => (b(), B(Ge, { name: "loadingFade" }, {
1180
+ default: V(() => [
1181
+ m.loading ? (b(), M("div", {
1182
+ key: 0,
1183
+ class: "MvcLoading absFull hp100 flexMode flexV vc hc ztop",
1184
+ role: "status",
1185
+ "aria-busy": "true",
1186
+ "aria-live": "polite",
1187
+ style: Le({ borderRadius: `${m.radius}px` })
1188
+ }, [
1189
+ r("div", go, [
1190
+ r("i", {
1191
+ class: F([m.icon, `fs${m.size}`, "imicon ani-rotate"]),
1192
+ "aria-hidden": "true"
1193
+ }, null, 2),
1194
+ m.showTxt ? (b(), M("span", {
1195
+ key: 0,
1196
+ class: F(["loaderTxt fs14 txt-c", m.txtClass])
1197
+ }, L(o.$l(m.txt)), 3)) : K("", !0)
1198
+ ])
1199
+ ], 4)) : K("", !0)
1200
+ ]),
1201
+ _: 1
1202
+ }));
1203
+ }
1204
+ }), bo = /* @__PURE__ */ J(ho, [["__scopeId", "data-v-0bb814a6"]]), yo = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1205
+ __proto__: null,
1206
+ default: bo
1207
+ }, Symbol.toStringTag, { value: "Module" })), vo = { class: "MvcLogin flexMode flexV hc vc wp100 vh100 p24-16" }, _o = { class: "panelWrap wp100 maxw400 p24 radius8 border noShrink" }, wo = { class: "flexMode vc hb mb16" }, $o = { class: "pl8 fs20 fw700 txt-h1" }, xo = { class: "contentArea minh160" }, So = {
1208
+ key: 1,
1209
+ class: "oauthAuthPanel flexMode flexV g8 wp100 vl"
1210
+ }, Co = ["disabled"], ko = ["disabled"], To = {
1211
+ key: 2,
1212
+ class: "scanArea flexMode flexV vc g12"
1213
+ }, Ao = { class: "scanTitle m0 block fs14 txt-h2" }, Mo = { class: "footerLine flexMode flexWrap hc g8 mt24 fs12 txt-tip" }, be = "mvframe_login_remember", Vo = /* @__PURE__ */ Object.assign({
1214
+ name: "MvcLogin",
1215
+ inheritAttrs: !1
1216
+ }, {
1217
+ __name: "index",
1218
+ props: {
1219
+ /** 登录表单文案与表单项展示配置(与默认合并,仅传需要覆盖的键即可) */
1220
+ formFileds: {
1221
+ type: Object,
1222
+ default: () => /* @__PURE__ */ Object.create(null)
1223
+ },
1224
+ title: {
1225
+ type: String,
1226
+ default: "Login"
1227
+ },
1228
+ rememberTxt: {
1229
+ type: String,
1230
+ default: "Remember me"
1231
+ },
1232
+ submitTxt: {
1233
+ type: String,
1234
+ default: "Login"
1235
+ },
1236
+ successTxt: {
1237
+ type: String,
1238
+ default: "Login successful"
1239
+ },
1240
+ loginMethods: {
1241
+ type: Array,
1242
+ default: () => [0, 1, 2, 3, 4]
1243
+ }
1244
+ },
1245
+ emits: ["success", "submit"],
1246
+ setup(p, { emit: m }) {
1247
+ const o = p, { proxy: e } = ae(), t = G(null), s = H({
1248
+ method: "password",
1249
+ form: {},
1250
+ remember: !1,
1251
+ submitting: !1
1252
+ });
1253
+ ee(() => {
1254
+ try {
1255
+ const c = localStorage.getItem(be);
1256
+ if (c) {
1257
+ const h = JSON.parse(c);
1258
+ h && typeof h == "object" && h.remember && (s.remember = !0, h.username != null && (s.form.username = String(h.username)), h.password != null && (s.form.password = String(h.password)));
1259
+ }
1260
+ } catch {
1261
+ }
1262
+ });
1263
+ const u = m, C = (c, h = "info") => {
1264
+ const x = e == null ? void 0 : e.$message;
1265
+ x != null && x[h] && x[h](c);
1266
+ }, $ = () => {
1267
+ try {
1268
+ s.remember ? localStorage.setItem(
1269
+ be,
1270
+ JSON.stringify({
1271
+ remember: !0,
1272
+ username: s.form.username,
1273
+ password: s.form.password
1274
+ })
1275
+ ) : localStorage.removeItem(be);
1276
+ } catch {
1277
+ }
1278
+ }, y = () => {
1279
+ C("Google 登录需按官方物料与 OAuth 配置 token,当前未发起跳转。");
1280
+ }, g = () => {
1281
+ C("Sign in with Apple 需按 Apple 人机界面指南配置服务,当前未发起跳转。");
1282
+ }, w = async () => {
1283
+ var i, f;
1284
+ if (s.submitting) return;
1285
+ const c = await ((f = (i = t.value) == null ? void 0 : i.validate) == null ? void 0 : f.call(i));
1286
+ if (!c) return;
1287
+ const h = String(c.username ?? "").trim();
1288
+ if (!h)
1289
+ return;
1290
+ const x = String(c.password ?? "").trim();
1291
+ if (x) {
1292
+ s.submitting = !0;
1293
+ try {
1294
+ const S = await globalThis.$pm(async () => ({
1295
+ method: "password",
1296
+ username: h,
1297
+ password: x
1298
+ }));
1299
+ $(), u("submit", {
1300
+ method: "password",
1301
+ [A.value.username.valueKey]: S.username,
1302
+ [A.value.password.valueKey]: S.password
1303
+ }), localStorage.removeItem("ctab"), localStorage.removeItem("tabs");
1304
+ } finally {
1305
+ s.submitting = !1;
1306
+ }
1307
+ }
1308
+ }, _ = O(() => {
1309
+ const c = globalThis.$config;
1310
+ return {
1311
+ copyright: (c == null ? void 0 : c.copyright) ?? "",
1312
+ author: (c == null ? void 0 : c.author) ?? ""
1313
+ };
1314
+ }), T = O(() => a[s.method] ?? "Login"), A = O(() => ({
1315
+ username: {
1316
+ ...l.username,
1317
+ ...o.formFileds.username || {}
1318
+ },
1319
+ password: {
1320
+ ...l.password,
1321
+ ...o.formFileds.password || {}
1322
+ }
1323
+ })), k = O(() => ({
1324
+ username: [
1325
+ {
1326
+ required: !0,
1327
+ message: A.value.username.message,
1328
+ trigger: "blur"
1329
+ }
1330
+ ],
1331
+ password: [
1332
+ {
1333
+ required: !0,
1334
+ message: A.value.password.message,
1335
+ trigger: "blur"
1336
+ }
1337
+ ]
1338
+ })), d = O(() => [
1339
+ { value: "password", label: "Account" },
1340
+ { value: "auth", label: "Google/Apple" },
1341
+ { value: "dingtalk", label: "DingTalk" },
1342
+ { value: "feishu", label: "Lark" },
1343
+ { value: "wechat", label: "Wechat" }
1344
+ ].filter((c, h) => o.loginMethods.includes(h))), a = {
1345
+ dingtalk: "DingTalk",
1346
+ feishu: "Lark",
1347
+ wechat: "Wechat"
1348
+ }, l = {
1349
+ username: {
1350
+ label: "Account",
1351
+ placeholder: "Enter your account",
1352
+ message: "Account is required",
1353
+ showPrefix: !0,
1354
+ icon: "imicon im-user",
1355
+ valueKey: "username"
1356
+ },
1357
+ password: {
1358
+ label: "Password",
1359
+ placeholder: "Enter your password",
1360
+ message: "Password is required",
1361
+ showPrefix: !0,
1362
+ icon: "imicon im-lock",
1363
+ valueKey: "password"
1364
+ }
1365
+ };
1366
+ return (c, h) => {
1367
+ const x = E("BtnGroup"), i = E("Input"), f = E("el-form-item"), S = E("el-checkbox"), v = E("el-button"), N = E("Form");
1368
+ return b(), M("div", vo, [
1369
+ r("div", _o, [
1370
+ r("div", wo, [
1371
+ r("span", $o, L(c.$l(o.title)), 1)
1372
+ ]),
1373
+ z(x, {
1374
+ modelValue: n(s).method,
1375
+ "onUpdate:modelValue": h[0] || (h[0] = (I) => n(s).method = I),
1376
+ options: n(d),
1377
+ disabled: n(s).submitting,
1378
+ size: "small",
1379
+ class: "mb32"
1380
+ }, null, 8, ["modelValue", "options", "disabled"]),
1381
+ r("div", xo, [
1382
+ n(s).method === "password" ? (b(), B(N, {
1383
+ key: 0,
1384
+ ref_key: "pwdFormRef",
1385
+ ref: t,
1386
+ modelValue: n(s).form,
1387
+ "onUpdate:modelValue": h[4] || (h[4] = (I) => n(s).form = I),
1388
+ size: "default",
1389
+ rules: n(k)
1390
+ }, {
1391
+ default: V(() => [
1392
+ z(f, { prop: "username" }, {
1393
+ default: V(() => [
1394
+ z(i, {
1395
+ modelValue: n(s).form.username,
1396
+ "onUpdate:modelValue": h[1] || (h[1] = (I) => n(s).form.username = I),
1397
+ class: "wp100",
1398
+ size: "large",
1399
+ name: "username",
1400
+ placeholder: n(A).username.placeholder,
1401
+ disabled: n(s).submitting
1402
+ }, ie({ _: 2 }, [
1403
+ n(A).username.showPrefix ? {
1404
+ name: "prefix",
1405
+ fn: V(() => [
1406
+ r("i", {
1407
+ class: F(n(A).username.icon)
1408
+ }, null, 2)
1409
+ ]),
1410
+ key: "0"
1411
+ } : void 0
1412
+ ]), 1032, ["modelValue", "placeholder", "disabled"])
1413
+ ]),
1414
+ _: 1
1415
+ }),
1416
+ z(f, { prop: "password" }, {
1417
+ default: V(() => [
1418
+ z(i, {
1419
+ modelValue: n(s).form.password,
1420
+ "onUpdate:modelValue": h[2] || (h[2] = (I) => n(s).form.password = I),
1421
+ class: "wp100",
1422
+ size: "large",
1423
+ type: "password",
1424
+ name: "password",
1425
+ placeholder: n(A).password.placeholder,
1426
+ "show-password": "",
1427
+ disabled: n(s).submitting,
1428
+ onKeyup: Je(w, ["enter"])
1429
+ }, ie({ _: 2 }, [
1430
+ n(A).password.showPrefix ? {
1431
+ name: "prefix",
1432
+ fn: V(() => [
1433
+ r("i", {
1434
+ class: F(n(A).password.icon)
1435
+ }, null, 2)
1436
+ ]),
1437
+ key: "0"
1438
+ } : void 0
1439
+ ]), 1032, ["modelValue", "placeholder", "disabled"])
1440
+ ]),
1441
+ _: 1
1442
+ }),
1443
+ z(f, null, {
1444
+ default: V(() => [
1445
+ z(S, {
1446
+ modelValue: n(s).remember,
1447
+ "onUpdate:modelValue": h[3] || (h[3] = (I) => n(s).remember = I),
1448
+ disabled: n(s).submitting
1449
+ }, {
1450
+ default: V(() => [
1451
+ W(L(c.$l(o.rememberTxt)), 1)
1452
+ ]),
1453
+ _: 1
1454
+ }, 8, ["modelValue", "disabled"])
1455
+ ]),
1456
+ _: 1
1457
+ }),
1458
+ z(v, {
1459
+ type: "primary",
1460
+ size: "large",
1461
+ class: "wp100",
1462
+ loading: n(s).submitting,
1463
+ disabled: n(s).submitting,
1464
+ onClick: w
1465
+ }, {
1466
+ default: V(() => [
1467
+ W(L(c.$l(o.submitTxt)), 1)
1468
+ ]),
1469
+ _: 1
1470
+ }, 8, ["loading", "disabled"])
1471
+ ]),
1472
+ _: 1
1473
+ }, 8, ["modelValue", "rules"])) : n(s).method === "auth" ? (b(), M("div", So, [
1474
+ h[7] || (h[7] = r("p", { class: "oauthAuthTip m0 block fs12 lh20 txt-tip mb16" }, " 需在应用中配置 OAuth Client 与 token;以下为品牌示意按钮,不发起跳转。 ", -1)),
1475
+ r("button", {
1476
+ type: "button",
1477
+ class: "oauthGoogle wp100 mb36",
1478
+ disabled: n(s).submitting,
1479
+ onClick: y
1480
+ }, [...h[5] || (h[5] = [
1481
+ qe('<svg class="oauthGoogleLogo noShrink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="18" height="18" aria-hidden="true" data-v-8e4310b6><path fill="#EA4335" d="M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z" data-v-8e4310b6></path><path fill="#4285F4" d="M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z" data-v-8e4310b6></path><path fill="#FBBC05" d="M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z" data-v-8e4310b6></path><path fill="#34A853" d="M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z" data-v-8e4310b6></path></svg><span class="oauthGoogleLabel" data-v-8e4310b6>Sign in with Google</span>', 2)
1482
+ ])], 8, Co),
1483
+ r("button", {
1484
+ type: "button",
1485
+ class: "oauthApple wp100 mb16",
1486
+ disabled: n(s).submitting,
1487
+ onClick: g
1488
+ }, [...h[6] || (h[6] = [
1489
+ r("svg", {
1490
+ class: "oauthAppleLogo noShrink",
1491
+ xmlns: "http://www.w3.org/2000/svg",
1492
+ viewBox: "0 0 24 24",
1493
+ width: "18",
1494
+ height: "22",
1495
+ "aria-hidden": "true"
1496
+ }, [
1497
+ r("path", {
1498
+ fill: "currentColor",
1499
+ d: "M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.38c.843-1.012 1.4-2.427 1.245-3.826-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701"
1500
+ })
1501
+ ], -1),
1502
+ r("span", { class: "oauthAppleLabel fs14" }, "Sign in with Apple", -1)
1503
+ ])], 8, ko)
1504
+ ])) : (b(), M("div", To, [
1505
+ r("p", Ao, L(n(T)), 1),
1506
+ r("div", {
1507
+ class: F(["qrBlock w180 h180 radius6", `qr-${n(s).method}`]),
1508
+ "aria-hidden": "true"
1509
+ }, null, 2)
1510
+ ]))
1511
+ ])
1512
+ ]),
1513
+ r("div", Mo, [
1514
+ r("span", null, L(n(_).copyright), 1),
1515
+ r("span", null, L(n(_).author), 1)
1516
+ ])
1517
+ ]);
1518
+ };
1519
+ }
1520
+ }), Oo = /* @__PURE__ */ J(Vo, [["__scopeId", "data-v-8e4310b6"]]), Lo = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1521
+ __proto__: null,
1522
+ default: Oo
1523
+ }, Symbol.toStringTag, { value: "Module" })), Io = { class: "MvcPage" }, jo = {
1524
+ key: 0,
1525
+ class: "PageHeader"
1526
+ }, zo = { class: "PageHeaderLeft" }, Eo = { class: "PageHeaderTitle" }, No = { class: "PageHeaderSubTitle" }, Ko = { class: "PageHeaderRight" }, Fo = { class: "PageBody" }, Do = /* @__PURE__ */ Object.assign({
1527
+ name: "MvcPage",
1528
+ inheritAttrs: !1
1529
+ }, {
1530
+ __name: "index",
1531
+ props: {
1532
+ title: {
1533
+ type: String,
1534
+ default: ""
1535
+ },
1536
+ subtitle: {
1537
+ type: String,
1538
+ default: ""
1539
+ },
1540
+ noheader: {
1541
+ type: Boolean,
1542
+ default: !1
1543
+ }
1544
+ },
1545
+ setup(p) {
1546
+ const m = p, { proxy: o } = ae(), t = he("store").tab(), s = O(() => m.title || m.subtitle);
1547
+ return O(() => t.useTab ? {
1548
+ minHeight: "calc(100vh - 48px - 36px)"
1549
+ } : {
1550
+ minHeight: "calc(100vh - 48px)"
1551
+ }), (u, C) => (b(), M("div", Io, [
1552
+ m.noheader ? K("", !0) : (b(), M("div", jo, [
1553
+ r("div", zo, [
1554
+ u.$slots.header ? R(u.$slots, "header", { key: 0 }, void 0, !0) : n(s) ? (b(), M(Y, { key: 1 }, [
1555
+ r("h3", Eo, L(m.title), 1),
1556
+ r("p", No, L(m.subtitle), 1)
1557
+ ], 64)) : K("", !0)
1558
+ ]),
1559
+ r("div", Ko, [
1560
+ u.$slots.right ? R(u.$slots, "right", { key: 0 }, void 0, !0) : K("", !0)
1561
+ ])
1562
+ ])),
1563
+ r("div", Fo, [
1564
+ R(u.$slots, "default", {}, void 0, !0)
1565
+ ])
1566
+ ]));
1567
+ }
1568
+ }), Bo = /* @__PURE__ */ J(Do, [["__scopeId", "data-v-7d18d3b1"]]), Po = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1569
+ __proto__: null,
1570
+ default: Bo
1571
+ }, Symbol.toStringTag, { value: "Module" })), Ro = { class: "flexMode hb vc" }, Ho = { key: 1 }, Uo = { class: "tag" }, Go = { class: "flexMode hr" }, Jo = /* @__PURE__ */ Object.assign({
1572
+ name: "MvcSelect",
1573
+ inheritAttrs: !1
1574
+ }, {
1575
+ __name: "index",
1576
+ props: {
1577
+ modelValue: {
1578
+ type: [String, Number, Array],
1579
+ default: void 0
1580
+ },
1581
+ multiple: {
1582
+ type: Boolean,
1583
+ default: !1
1584
+ },
1585
+ filterable: {
1586
+ type: Boolean,
1587
+ default: !1
1588
+ },
1589
+ options: {
1590
+ type: Array,
1591
+ default: () => []
1592
+ },
1593
+ valueKey: {
1594
+ type: String,
1595
+ default: "value"
1596
+ },
1597
+ labelKey: {
1598
+ type: String,
1599
+ default: "label"
1600
+ },
1601
+ selectAllTxt: {
1602
+ type: String,
1603
+ default: "All"
1604
+ },
1605
+ confirmTxt: {
1606
+ type: String,
1607
+ default: "Confirm"
1608
+ },
1609
+ nowrap: {
1610
+ type: Boolean,
1611
+ default: !1
1612
+ }
1613
+ },
1614
+ emits: ["update:modelValue", "change"],
1615
+ setup(p, { emit: m }) {
1616
+ const o = p, e = G(null), t = G([]), s = G(!1), u = G(!1), C = G(!1), $ = m, y = (i) => {
1617
+ o.multiple ? (t.value = Array.isArray(i) ? [...i] : [], k()) : ($("update:modelValue", i), $("change", i));
1618
+ }, g = (i) => {
1619
+ if (s.value = i, i && o.multiple) {
1620
+ const f = o.modelValue;
1621
+ t.value = Array.isArray(f) ? [...f] : f ? [f] : [], k();
1622
+ }
1623
+ }, w = () => {
1624
+ var S;
1625
+ if (!o.filterable || !s.value) return A();
1626
+ const i = e.value, f = ((S = i == null ? void 0 : i.optionsArray) == null ? void 0 : S.value) ?? (i == null ? void 0 : i.optionsArray) ?? [];
1627
+ return Array.isArray(f) ? f.filter((v) => v.visible && !v.isDisabled).map((v) => v.value) : A();
1628
+ }, _ = (i) => {
1629
+ C.value = !1;
1630
+ const f = w();
1631
+ if (i)
1632
+ t.value = [.../* @__PURE__ */ new Set([...t.value, ...f])];
1633
+ else {
1634
+ const S = new Set(f);
1635
+ t.value = t.value.filter((v) => !S.has(v));
1636
+ }
1637
+ }, T = () => {
1638
+ var i, f;
1639
+ o.multiple && ($("update:modelValue", t.value), $("change", t.value), (f = (i = e.value) == null ? void 0 : i.blur) == null || f.call(i));
1640
+ }, A = () => {
1641
+ const i = o.valueKey;
1642
+ return (o.options || []).map((f) => typeof f == "object" ? f[i] : f);
1643
+ }, k = () => {
1644
+ const i = w(), f = new Set(t.value ?? []), S = i.filter((N) => f.has(N)).length, v = i.length;
1645
+ u.value = v > 0 && S === v, C.value = S > 0 && S < v;
1646
+ }, d = O(() => o.multiple && s.value ? t.value : o.modelValue), a = O(() => {
1647
+ const {
1648
+ modelValue: i,
1649
+ valueKey: f,
1650
+ labelKey: S,
1651
+ selectAllTxt: v,
1652
+ confirmTxt: N,
1653
+ nowrap: I,
1654
+ ...P
1655
+ } = o, Z = P.props ?? {};
1656
+ return {
1657
+ ...P,
1658
+ props: {
1659
+ ...Z,
1660
+ value: f,
1661
+ label: S
1662
+ }
1663
+ };
1664
+ }), l = O(
1665
+ () => o.nowrap ? {
1666
+ collapseTags: !0,
1667
+ collapseTagsTooltip: !0,
1668
+ maxCollapseTags: 1,
1669
+ tagTooltip: { popperStyle: { maxWidth: "400px" } }
1670
+ } : {}
1671
+ ), c = O(() => ({
1672
+ ...l.value,
1673
+ ...ve(),
1674
+ ...a.value
1675
+ })), h = O(() => {
1676
+ const i = o.multiple && s.value ? t.value : o.modelValue, f = Array.isArray(i) ? i : i ? [i] : [];
1677
+ if (!o.filterable || !s.value) return f.length;
1678
+ const S = w();
1679
+ return f.filter((v) => S.includes(v)).length;
1680
+ }), x = O(() => w().length);
1681
+ return ne(t, () => k(), { deep: !0 }), ne(
1682
+ () => o.modelValue,
1683
+ (i) => {
1684
+ if (o.multiple && s.value) {
1685
+ const f = Array.isArray(i) ? [...i] : i ? [i] : [];
1686
+ JSON.stringify(f) !== JSON.stringify(t.value) && (t.value = f, k());
1687
+ }
1688
+ }
1689
+ ), (i, f) => {
1690
+ const S = E("el-checkbox"), v = E("el-button"), N = E("el-select");
1691
+ return b(), B(N, oe({
1692
+ ref_key: "selectRef",
1693
+ ref: e,
1694
+ "model-value": n(d),
1695
+ "tag-effect": "plain",
1696
+ class: "MvcSelect"
1697
+ }, n(c), {
1698
+ "onUpdate:modelValue": y,
1699
+ onVisibleChange: g
1700
+ }), ie({
1701
+ default: V(() => [
1702
+ R(i.$slots, "default")
1703
+ ]),
1704
+ _: 2
1705
+ }, [
1706
+ o.filterable ? {
1707
+ name: "header",
1708
+ fn: V(() => [
1709
+ r("div", Ro, [
1710
+ o.multiple ? (b(), B(S, {
1711
+ key: 0,
1712
+ modelValue: n(u),
1713
+ "onUpdate:modelValue": f[0] || (f[0] = (I) => je(u) ? u.value = I : null),
1714
+ indeterminate: n(C),
1715
+ class: "h24",
1716
+ onChange: _
1717
+ }, {
1718
+ default: V(() => [
1719
+ W(L(p.selectAllTxt), 1)
1720
+ ]),
1721
+ _: 1
1722
+ }, 8, ["modelValue", "indeterminate"])) : (b(), M("span", Ho)),
1723
+ r("span", Uo, L(n(h)) + "/" + L(n(x)), 1)
1724
+ ])
1725
+ ]),
1726
+ key: "0"
1727
+ } : void 0,
1728
+ o.multiple ? {
1729
+ name: "footer",
1730
+ fn: V(() => [
1731
+ r("div", Go, [
1732
+ z(v, {
1733
+ type: "primary",
1734
+ size: "small",
1735
+ onClick: T
1736
+ }, {
1737
+ default: V(() => [
1738
+ W(L(p.confirmTxt), 1)
1739
+ ]),
1740
+ _: 1
1741
+ })
1742
+ ])
1743
+ ]),
1744
+ key: "1"
1745
+ } : void 0
1746
+ ]), 1040, ["model-value"]);
1747
+ };
1748
+ }
1749
+ }), qo = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1750
+ __proto__: null,
1751
+ default: Jo
1752
+ }, Symbol.toStringTag, { value: "Module" })), Wo = { class: "flexMode hb vc" }, Yo = { key: 1 }, Zo = { class: "tag" }, Qo = { class: "flexMode hr" }, Xo = /* @__PURE__ */ Object.assign({
1753
+ name: "MvcSelectV2",
1754
+ inheritAttrs: !1
1755
+ }, {
1756
+ __name: "index",
1757
+ props: {
1758
+ modelValue: {
1759
+ type: [String, Number, Array],
1760
+ default: void 0
1761
+ },
1762
+ multiple: {
1763
+ type: Boolean,
1764
+ default: !1
1765
+ },
1766
+ filterable: {
1767
+ type: Boolean,
1768
+ default: !1
1769
+ },
1770
+ options: {
1771
+ type: Array,
1772
+ default: () => []
1773
+ },
1774
+ valueKey: {
1775
+ type: String,
1776
+ default: "value"
1777
+ },
1778
+ labelKey: {
1779
+ type: String,
1780
+ default: "label"
1781
+ },
1782
+ selectAllTxt: {
1783
+ type: String,
1784
+ default: "All"
1785
+ },
1786
+ confirmTxt: {
1787
+ type: String,
1788
+ default: "Confirm"
1789
+ },
1790
+ nowrap: {
1791
+ type: Boolean,
1792
+ default: !1
1793
+ }
1794
+ },
1795
+ emits: ["update:modelValue", "change"],
1796
+ setup(p, { emit: m }) {
1797
+ const o = p, e = G(null), t = G([]), s = G(!1), u = G(!1), C = G(!1), $ = m, y = (i) => {
1798
+ o.multiple ? (t.value = Array.isArray(i) ? [...i] : [], k()) : ($("update:modelValue", i), $("change", i));
1799
+ }, g = (i) => {
1800
+ if (s.value = i, i && o.multiple) {
1801
+ const f = o.modelValue;
1802
+ t.value = Array.isArray(f) ? [...f] : f ? [f] : [], k();
1803
+ }
1804
+ }, w = () => {
1805
+ var v;
1806
+ if (!o.filterable || !s.value) return A();
1807
+ const i = e.value, f = ((v = i == null ? void 0 : i.filteredOptions) == null ? void 0 : v.value) ?? (i == null ? void 0 : i.filteredOptions) ?? [];
1808
+ if (!Array.isArray(f)) return A();
1809
+ const S = o.valueKey;
1810
+ return f.filter((N) => N.type !== "Group" && !N.disabled).map((N) => typeof N == "object" ? N[S] : N);
1811
+ }, _ = (i) => {
1812
+ C.value = !1;
1813
+ const f = w();
1814
+ if (i)
1815
+ t.value = [.../* @__PURE__ */ new Set([...t.value, ...f])];
1816
+ else {
1817
+ const S = new Set(f);
1818
+ t.value = t.value.filter((v) => !S.has(v));
1819
+ }
1820
+ }, T = () => {
1821
+ var i, f;
1822
+ o.multiple && ($("update:modelValue", t.value), $("change", t.value), (f = (i = e.value) == null ? void 0 : i.blur) == null || f.call(i));
1823
+ }, A = () => {
1824
+ const i = o.valueKey;
1825
+ return (o.options || []).map((f) => typeof f == "object" ? f[i] : f);
1826
+ }, k = () => {
1827
+ const i = w(), f = new Set(t.value ?? []), S = i.filter((N) => f.has(N)).length, v = i.length;
1828
+ u.value = v > 0 && S === v, C.value = S > 0 && S < v;
1829
+ }, d = O(() => o.multiple && s.value ? t.value : o.modelValue), a = O(() => {
1830
+ const {
1831
+ modelValue: i,
1832
+ valueKey: f,
1833
+ labelKey: S,
1834
+ selectAllTxt: v,
1835
+ confirmTxt: N,
1836
+ nowrap: I,
1837
+ ...P
1838
+ } = o, Z = P.props ?? {};
1839
+ return {
1840
+ ...P,
1841
+ props: {
1842
+ ...Z,
1843
+ value: f,
1844
+ label: S
1845
+ }
1846
+ };
1847
+ }), l = O(
1848
+ () => o.nowrap ? {
1849
+ collapseTags: !0,
1850
+ collapseTagsTooltip: !0,
1851
+ maxCollapseTags: 1,
1852
+ tagTooltip: { popperStyle: { maxWidth: "400px" } }
1853
+ } : {}
1854
+ ), c = O(() => ({
1855
+ ...l.value,
1856
+ ...ve(),
1857
+ ...a.value
1858
+ })), h = O(() => {
1859
+ const i = o.multiple && s.value ? t.value : o.modelValue, f = Array.isArray(i) ? i : i ? [i] : [];
1860
+ if (!o.filterable || !s.value) return f.length;
1861
+ const S = w();
1862
+ return f.filter((v) => S.includes(v)).length;
1863
+ }), x = O(() => w().length);
1864
+ return ne(t, () => k(), { deep: !0 }), ne(
1865
+ () => o.modelValue,
1866
+ (i) => {
1867
+ if (o.multiple && s.value) {
1868
+ const f = Array.isArray(i) ? [...i] : i ? [i] : [];
1869
+ JSON.stringify(f) !== JSON.stringify(t.value) && (t.value = f, k());
1870
+ }
1871
+ }
1872
+ ), (i, f) => {
1873
+ const S = E("el-checkbox"), v = E("el-button"), N = E("el-select-v2");
1874
+ return b(), B(N, oe({
1875
+ ref_key: "selectRef",
1876
+ ref: e,
1877
+ "model-value": n(d),
1878
+ class: "MvcSelectV2"
1879
+ }, n(c), {
1880
+ "onUpdate:modelValue": y,
1881
+ onVisibleChange: g
1882
+ }), ie({ _: 2 }, [
1883
+ o.filterable ? {
1884
+ name: "header",
1885
+ fn: V(() => [
1886
+ r("div", Wo, [
1887
+ o.multiple ? (b(), B(S, {
1888
+ key: 0,
1889
+ modelValue: n(u),
1890
+ "onUpdate:modelValue": f[0] || (f[0] = (I) => je(u) ? u.value = I : null),
1891
+ indeterminate: n(C),
1892
+ class: "h24",
1893
+ onChange: _
1894
+ }, {
1895
+ default: V(() => [
1896
+ W(L(p.selectAllTxt), 1)
1897
+ ]),
1898
+ _: 1
1899
+ }, 8, ["modelValue", "indeterminate"])) : (b(), M("span", Yo)),
1900
+ r("span", Zo, L(n(h)) + "/" + L(n(x)), 1)
1901
+ ])
1902
+ ]),
1903
+ key: "0"
1904
+ } : void 0,
1905
+ i.$slots.default ? {
1906
+ name: "default",
1907
+ fn: V((I) => [
1908
+ R(i.$slots, "default", de(fe(I)))
1909
+ ]),
1910
+ key: "1"
1911
+ } : void 0,
1912
+ o.multiple ? {
1913
+ name: "footer",
1914
+ fn: V(() => [
1915
+ r("div", Qo, [
1916
+ z(v, {
1917
+ type: "primary",
1918
+ size: "small",
1919
+ onClick: T
1920
+ }, {
1921
+ default: V(() => [
1922
+ W(L(p.confirmTxt), 1)
1923
+ ]),
1924
+ _: 1
1925
+ })
1926
+ ])
1927
+ ]),
1928
+ key: "2"
1929
+ } : void 0
1930
+ ]), 1040, ["model-value"]);
1931
+ };
1932
+ }
1933
+ }), en = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1934
+ __proto__: null,
1935
+ default: Xo
1936
+ }, Symbol.toStringTag, { value: "Module" })), tn = Ie({
1937
+ name: "MvcTableColumnFilter",
1938
+ props: {
1939
+ tableName: {
1940
+ type: String,
1941
+ default: ""
1942
+ },
1943
+ group: {
1944
+ type: Object,
1945
+ default: /* @__PURE__ */ Object.create(null)
1946
+ },
1947
+ column: {
1948
+ type: Boolean,
1949
+ default: !1
1950
+ }
1951
+ },
1952
+ setup: (p, m) => {
1953
+ var C;
1954
+ const o = H({
1955
+ options: [],
1956
+ slots: []
1957
+ }), e = p.tableName + "_Column";
1958
+ let t = [];
1959
+ (() => {
1960
+ const $ = m.slots.default()[0].children, y = {
1961
+ normal: [],
1962
+ mmp: [],
1963
+ asa: [],
1964
+ fixed: [],
1965
+ columns: []
1966
+ }, g = p.tableName ? JSON.parse(localStorage.getItem(e)) : null, w = [void 0];
1967
+ $.forEach((T) => {
1968
+ window.$getType(T.type) === "Symbol" ? t = t.concat(T.children) : t.push(T);
1969
+ }), t.forEach((T, A) => {
1970
+ var k;
1971
+ if (window.$getType(T.type), ((k = T.type) == null ? void 0 : k.name) === "ElTableColumn") {
1972
+ let d = {
1973
+ ...T.props,
1974
+ sort: A,
1975
+ nomove: T.props.nomove || T.props.nomove === "" || T.props.type === "selection" || T.props.label === "Operation",
1976
+ resizable: !0,
1977
+ visible: T.props.visible !== !1
1978
+ };
1979
+ if (d.labelKey || (d.labelKey = d.label), d.label = window.$l(d.labelKey), p.column && (g != null && g.length) && w.indexOf(T.props.prop) === -1) {
1980
+ const { data: a } = g.filter1((l) => l.prop === T.props.prop);
1981
+ a && (d.sort = a.sort, d.fixed = a.fixed, d.visible = a.visible);
1982
+ }
1983
+ T.props.fixed && y.fixed.push(d), T.props.type === "mmp" ? y.mmp.push(d) : T.props.type === "asa" ? y.asa.push(d) : y.normal.push(d), T.props = d;
1984
+ }
1985
+ }), o.columnInfo = y;
1986
+ let _ = [...y.normal, ...y.mmp, ...y.asa];
1987
+ p.tableName && (_ = _.sort((T, A) => T.sort - A.sort), localStorage.setItem(e, JSON.stringify(_)));
1988
+ })();
1989
+ let u = [];
1990
+ if (t.forEach(($) => {
1991
+ window.$getType($) !== "String" && $.props.visible && u.push($);
1992
+ }), (C = p.group) != null && C.label) {
1993
+ const $ = {
1994
+ label: "Group By " + p.group.label,
1995
+ // prop: props.group.value,
1996
+ width: p.group.width,
1997
+ fixed: "left",
1998
+ visible: !0,
1999
+ resizable: !0
2000
+ };
2001
+ u[0].props.type === "selection" ? u.splice(1, 0, {
2002
+ ...u[1],
2003
+ props: $
2004
+ }) : u.unshift({
2005
+ ...u[0],
2006
+ props: $
2007
+ });
2008
+ }
2009
+ return u = u.sort(($, y) => $.props.sort - y.props.sort), () => u;
2010
+ }
2011
+ }), on = { class: "hp100 flexMode" }, nn = { class: "w200 hp100 border-r fs14" }, ln = { class: "flexMode vc h36 p8 bg-gray3 border-b txt-nowrap" }, sn = { class: "p4" }, an = ["onClick"], rn = {
2012
+ class: "flexMode vs hp100",
2013
+ style: { width: "calc(100% - 200px)" }
2014
+ }, cn = { class: "wp50 border-r fs14" }, un = { class: "flexMode vc g8 h36 p8 bg-gray3 border-b txt-nowrap" }, dn = { class: "tagArea blue small" }, pn = { class: "p4" }, mn = {
2015
+ key: 0,
2016
+ class: "absCenter fs12 txt-dark5 txt-nowrap"
2017
+ }, fn = { class: "flexMode vc g8" }, gn = ["txt", "onClick"], hn = { class: "wp50 border-r fs14" }, bn = { class: "flexMode vc g8 h36 p8 bg-gray3 border-b txt-nowrap" }, yn = { class: "tagArea blue small" }, vn = {
2018
+ class: "relative p4",
2019
+ style: { height: "calc(100% - 36px)" }
2020
+ }, _n = {
2021
+ class: "relative",
2022
+ style: { height: "30%" }
2023
+ }, wn = {
2024
+ key: 0,
2025
+ class: "absCenter fs12 txt-dark5 txt-nowrap"
2026
+ }, $n = { class: "columnItem flexMode vc hb h40 g8 p4-8 mb4 radius4" }, xn = { class: "flexMode vc g8 txt-nowrap" }, Sn = { class: "flexMode vc g8" }, Cn = ["txt", "onClick"], kn = {
2027
+ class: "relative",
2028
+ style: { height: "calc(70% - 10px)" }
2029
+ }, Tn = {
2030
+ key: 0,
2031
+ class: "absCenter fs12 txt-dark5 txt-nowrap"
2032
+ }, An = { class: "columnItem flexMode vc hb h40 g8 p4-8 mb4 radius4" }, Mn = { class: "flexMode vc g8 txt-nowrap" }, Vn = { class: "flexMode vc" }, On = ["txt", "onClick"], Ln = ["txt", "onClick"], In = /* @__PURE__ */ Object.assign({
2033
+ name: "MvcTableColumnConfig",
2034
+ inheritAttrs: !1
2035
+ }, {
2036
+ __name: "ColumnConfig",
2037
+ props: {
2038
+ tableName: {
2039
+ type: String,
2040
+ default: ""
2041
+ }
2042
+ },
2043
+ emits: "close",
2044
+ setup(p, { emit: m }) {
2045
+ const o = p, e = H({
2046
+ loading: !1,
2047
+ type: "normal",
2048
+ columns: {
2049
+ normal: [],
2050
+ mmp: [],
2051
+ asa: []
2052
+ },
2053
+ fixed: [],
2054
+ visible: [],
2055
+ selection: [],
2056
+ operation: [],
2057
+ columnType: {},
2058
+ mounted: !1
2059
+ });
2060
+ ee(() => {
2061
+ s();
2062
+ });
2063
+ const t = m, s = () => {
2064
+ t("mounted");
2065
+ const a = JSON.parse(localStorage.getItem(`${o.tableName}_Column`)), l = {};
2066
+ a.forEach((c) => {
2067
+ c.type && (l[c.type] = !0), c.visible ? c.type === "selection" ? e.selection.push(c) : c.type === "operation" ? e.operation.push(c) : c.label && (c.fixed ? e.fixed.push(c) : e.visible.push(c)) : c.type === "mmp" ? e.columns.mmp.push(c) : c.type === "asa" ? e.columns.asa.push(c) : e.columns.normal.push(c);
2068
+ }), e.columnType = l;
2069
+ }, u = (a) => {
2070
+ e.type = a;
2071
+ }, C = (a, l) => {
2072
+ a.visible = !0, e.visible.unshift(a), a.type ? e.columns[a.type].splice(l, 1) : e.columns.normal.splice(l, 1);
2073
+ }, $ = (a, l) => {
2074
+ e.fixed.unshift(a), e.visible.splice(l, 1);
2075
+ }, y = (a, l) => {
2076
+ e.visible.unshift(a), e.fixed.splice(l, 1);
2077
+ }, g = (a, l) => {
2078
+ e.visible.splice(l, 1), a.type ? e.columns[a.type].unshift(a) : e.columns.normal.unshift(a);
2079
+ }, w = async () => {
2080
+ e.loading = !0, window.$pm(() => {
2081
+ const { fixed: a, visible: l, columns: c, selection: h, operation: x } = e;
2082
+ let i = [];
2083
+ Object.keys(c).map((S) => {
2084
+ i = i.concat(c[S]);
2085
+ }), a.forEach((S) => S.fixed = "left"), i.forEach((S) => S.visible = !1);
2086
+ const f = h.concat(a, l, i, x);
2087
+ f.forEach((S, v) => S.sort = v), localStorage.setItem(`${o.tableName}_Column`, JSON.stringify(f)), e.loading = !1, t("close"), t("init-column");
2088
+ });
2089
+ }, _ = () => {
2090
+ e.loading = !0, localStorage.removeItem(`${o.tableName}_Column`), window.$pm(() => {
2091
+ e.loading = !1, t("close"), t("init-column");
2092
+ }, 4);
2093
+ }, T = O(() => window.config.options.drawerHeight - 36 - 64), A = O(() => (T.value * 0.3).toFixed(0)), k = O(() => (T.value * 0.7 - 10).toFixed(0)), d = O(() => [
2094
+ {
2095
+ label: "Base Info",
2096
+ value: "normal"
2097
+ },
2098
+ {
2099
+ label: "Asa Metrics",
2100
+ value: "asa",
2101
+ hide: !e.columnType.asa
2102
+ },
2103
+ {
2104
+ label: "MMP Metrics",
2105
+ value: "mmp",
2106
+ hide: !e.columnType.mmp
2107
+ }
2108
+ ]);
2109
+ return (a, l) => {
2110
+ const c = E("el-scrollbar"), h = E("DrawerArea");
2111
+ return b(), B(h, {
2112
+ loading: n(e).loading,
2113
+ noscroll: "",
2114
+ "cancel-txt": "Reset",
2115
+ "cancel-icon": "im-sync",
2116
+ class: "MvcTableColumnConfig",
2117
+ onCancel: _,
2118
+ onSubmit: w
2119
+ }, {
2120
+ default: V(() => [
2121
+ r("div", on, [
2122
+ r("div", nn, [
2123
+ r("div", ln, L(a.$l("Column Type")), 1),
2124
+ r("div", sn, [
2125
+ (b(!0), M(Y, null, se(n(d), (x) => (b(), M("div", {
2126
+ key: x.value,
2127
+ class: F(["typeItem p8-16 mb4 radius4 txt-nowrap", [n(e).type === x.value && "active", x.hide && "hide"]]),
2128
+ onClick: (i) => u(x.value)
2129
+ }, L(x.label), 11, an))), 128))
2130
+ ])
2131
+ ]),
2132
+ r("div", rn, [
2133
+ r("div", cn, [
2134
+ r("div", un, [
2135
+ r("span", null, L(a.$l("Columns")), 1),
2136
+ r("span", dn, L(n(e).columns[n(e).type].length), 1)
2137
+ ]),
2138
+ z(c, { style: { height: "calc(100% - 36px)" } }, {
2139
+ default: V(() => [
2140
+ r("div", pn, [
2141
+ n(e).columns[n(e).type].length === 0 ? (b(), M("span", mn, L(a.$l("No Columns")), 1)) : K("", !0),
2142
+ (b(!0), M(Y, null, se(n(e).columns[n(e).type], (x, i) => (b(), M("div", {
2143
+ key: x.prop,
2144
+ class: "columnItem flexMode vc hb h40 g8 p4-8 mb4 radius4 txt-nowrap"
2145
+ }, [
2146
+ r("span", null, L(a.$l(x.label)), 1),
2147
+ r("div", fn, [
2148
+ r("div", {
2149
+ class: "tipbtn left",
2150
+ txt: a.$l("Visible"),
2151
+ onClick: (f) => C(x, i)
2152
+ }, [...l[0] || (l[0] = [
2153
+ r("i", { class: "imicon im-plus fs16" }, null, -1)
2154
+ ])], 8, gn)
2155
+ ])
2156
+ ]))), 128))
2157
+ ])
2158
+ ]),
2159
+ _: 1
2160
+ })
2161
+ ]),
2162
+ r("div", hn, [
2163
+ r("div", bn, [
2164
+ r("span", null, L(a.$l("Visible Columns")), 1),
2165
+ r("span", yn, L(n(e).visible.length), 1)
2166
+ ]),
2167
+ r("div", vn, [
2168
+ r("div", _n, [
2169
+ n(e).fixed.length === 0 ? (b(), M("span", wn, L(a.$l("No Fixed Columns")), 1)) : K("", !0),
2170
+ z(c, { height: n(A) }, {
2171
+ default: V(() => [
2172
+ z(n(Se), {
2173
+ list: n(e).fixed,
2174
+ "item-key": (x) => x,
2175
+ handle: ".im-handle",
2176
+ "ghost-class": "ghost"
2177
+ }, {
2178
+ item: V(({ element: x, index: i }) => [
2179
+ r("div", $n, [
2180
+ r("div", xn, [
2181
+ l[1] || (l[1] = r("i", { class: "imicon im-handle cursor-grab" }, null, -1)),
2182
+ r("span", null, L(a.$l(x.label)), 1)
2183
+ ]),
2184
+ r("div", Sn, [
2185
+ r("div", {
2186
+ class: "tipbtn red left",
2187
+ txt: a.$l("Unfixed"),
2188
+ onClick: (f) => y(x, i)
2189
+ }, [...l[2] || (l[2] = [
2190
+ r("i", { class: "imicon im-download1 fs14" }, null, -1)
2191
+ ])], 8, Cn)
2192
+ ])
2193
+ ])
2194
+ ]),
2195
+ _: 1
2196
+ }, 8, ["list", "item-key"])
2197
+ ]),
2198
+ _: 1
2199
+ }, 8, ["height"])
2200
+ ]),
2201
+ l[6] || (l[6] = r("div", { class: "p4-0" }, [
2202
+ r("div", { class: "border-t" })
2203
+ ], -1)),
2204
+ r("div", kn, [
2205
+ n(e).visible.length === 0 ? (b(), M("span", Tn, L(a.$l("No Columns")), 1)) : K("", !0),
2206
+ z(c, { height: n(k) }, {
2207
+ default: V(() => [
2208
+ z(n(Se), {
2209
+ list: n(e).visible,
2210
+ "item-key": (x) => x,
2211
+ options: { lockAxis: "y" },
2212
+ handle: ".im-handle",
2213
+ "ghost-class": "ghost"
2214
+ }, {
2215
+ item: V(({ element: x, index: i }) => [
2216
+ r("div", An, [
2217
+ r("div", Mn, [
2218
+ l[3] || (l[3] = r("i", { class: "imicon im-handle cursor-grab" }, null, -1)),
2219
+ r("span", null, L(a.$l(x.label)), 1)
2220
+ ]),
2221
+ r("div", Vn, [
2222
+ r("div", {
2223
+ class: "tipbtn left",
2224
+ txt: a.$l("Fixed"),
2225
+ onClick: (f) => $(x, i)
2226
+ }, [...l[4] || (l[4] = [
2227
+ r("i", { class: "imicon im-download1 fs14 rotateZ180" }, null, -1)
2228
+ ])], 8, On),
2229
+ r("div", {
2230
+ class: "tipbtn red left",
2231
+ txt: a.$l("Hide"),
2232
+ onClick: (f) => g(x, i)
2233
+ }, [...l[5] || (l[5] = [
2234
+ r("i", { class: "imicon im-close fs14" }, null, -1)
2235
+ ])], 8, Ln)
2236
+ ])
2237
+ ])
2238
+ ]),
2239
+ _: 1
2240
+ }, 8, ["list", "item-key"])
2241
+ ]),
2242
+ _: 1
2243
+ }, 8, ["height"])
2244
+ ])
2245
+ ])
2246
+ ])
2247
+ ])
2248
+ ])
2249
+ ]),
2250
+ _: 1
2251
+ }, 8, ["loading"]);
2252
+ };
2253
+ }
2254
+ }), jn = /* @__PURE__ */ J(In, [["__scopeId", "data-v-01691821"]]), zn = { class: "p16 border-b" }, En = { class: "flexMode vc g8" }, Nn = {
2255
+ key: 0,
2256
+ class: "flexMode vc g8"
2257
+ }, Kn = { class: "flexMode g16 hr vc" }, Fn = { class: "TheEnd p16" }, Dn = { class: "sticky flexMode vc hb p4-8 mt16 mb8 fs14 txt-dark9 z9 backdrop border-l4-primary bg-gray3 radius4" }, Bn = { class: "fw700" }, Pn = { class: "flexMode vc g8" }, Rn = /* @__PURE__ */ Object.assign({
2258
+ name: "MvcTableColumnDownload",
2259
+ inheritAttrs: !1
2260
+ }, {
2261
+ __name: "ColumnDownload",
2262
+ props: {
2263
+ tableName: {
2264
+ type: String,
2265
+ default: ""
2266
+ },
2267
+ list: {
2268
+ type: Array,
2269
+ default: () => []
2270
+ },
2271
+ selection: {
2272
+ type: Array,
2273
+ default: () => []
2274
+ }
2275
+ },
2276
+ emits: ["mounted"],
2277
+ setup(p, { emit: m }) {
2278
+ const o = p, e = H({
2279
+ loading: !1,
2280
+ columns: [],
2281
+ checked: [],
2282
+ useHead: !1,
2283
+ onlySelection: !1,
2284
+ mounted: !1
2285
+ });
2286
+ ee(() => {
2287
+ s();
2288
+ });
2289
+ const t = m, s = () => {
2290
+ t("mounted"), u(), C();
2291
+ }, u = () => {
2292
+ const d = JSON.parse(localStorage.getItem(`${o.tableName}_Column`)), a = ["selection", "operation"];
2293
+ e.columns = d.filter((l) => !a.includes(l.type) && l.label);
2294
+ }, C = () => {
2295
+ o.selection.length && (e.onlySelection = !0);
2296
+ }, $ = (d, a) => {
2297
+ d ? a.children.forEach((l) => {
2298
+ l.visible = !0;
2299
+ }) : a.children.forEach((l) => {
2300
+ l.visible = !1;
2301
+ });
2302
+ }, y = () => {
2303
+ window.$copy(w());
2304
+ }, g = async () => {
2305
+ e.loading = !0;
2306
+ try {
2307
+ const d = w("download");
2308
+ let a = e.fileName || _.value;
2309
+ a && !a.toLowerCase().endsWith(".csv") && (a = `${a}.csv`), await Qe({ content: d, filename: a, bom: !0 });
2310
+ } finally {
2311
+ e.loading = !1;
2312
+ }
2313
+ }, w = (d) => {
2314
+ const a = e.onlySelection ? o.selection : o.list, l = {}, c = [];
2315
+ e.columns.filter((v) => v.visible).forEach((v) => {
2316
+ c.push(window.$l(v.label)), l[v.prop] = !0;
2317
+ });
2318
+ let h = "", x = [], i = d === "download" ? "," : " ";
2319
+ (e.useHead || d) && (h = c.join(i) + `
2320
+ `);
2321
+ let f = [], S;
2322
+ return Object.keys(l).forEach((v, N) => {
2323
+ v.includes("country") && (S = N);
2324
+ const I = [];
2325
+ a.forEach((P) => {
2326
+ P[v] !== void 0 && I.push(P[v]);
2327
+ }), f.push(I);
2328
+ }), f.forEach((v, N) => {
2329
+ !e.useCountryCode && S === N ? v.forEach((I, P) => {
2330
+ let Z = I;
2331
+ window.$getType(I) === "Array" ? Z = I.map((ue) => k[ue.toUpperCase()].label.$l()).join(",") : window.$getType(I) === "String" ? Z = I.split(",").map((ue) => k[ue.toUpperCase()].label.$l()).join(",") : Z = JSON.stringify(I), x[P] ? x[P] += Z + i : x[P] = Z + i;
2332
+ }) : v.forEach((I, P) => {
2333
+ x[P] ? x[P] += I + i : x[P] = I + i;
2334
+ });
2335
+ }), `${h}${x.join(`
2336
+ `)}`;
2337
+ }, _ = O(() => {
2338
+ const d = window.$m().format("YYYYMMDDHHmmss");
2339
+ return `${o.tableName}_${d}`;
2340
+ }), T = O(() => {
2341
+ const d = {};
2342
+ return e.columns.forEach((a) => {
2343
+ const l = a.type ? a.type : "normal", c = {
2344
+ label: A[l],
2345
+ type: l,
2346
+ visible: 0
2347
+ };
2348
+ d[l] ? (d[l].children.push(a), a.visible && d[l].visible++) : (c.children = [a], a.visible && c.visible++, d[l] = c);
2349
+ }), Object.keys(d).forEach((a) => {
2350
+ const l = d[a].visible === d[a].children.length, c = d[a].visible === 0;
2351
+ l ? (d[a].checkstatus = !0, d[a].indeterminate = !1) : c ? (d[a].checkstatus = !1, d[a].indeterminate = !1) : (d[a].checkstatus = !1, d[a].indeterminate = !0);
2352
+ }), d;
2353
+ }), A = {
2354
+ asa: "Asa Metrics",
2355
+ normal: "Base Info",
2356
+ mmp: "MMP Metrics"
2357
+ };
2358
+ "Check All".$l(), "Cancel All".$l();
2359
+ const k = useMap("asa.countryAll.obj");
2360
+ return (d, a) => {
2361
+ const l = E("el-checkbox"), c = E("el-button"), h = E("MvcAlert"), x = E("el-switch"), i = E("Input"), f = E("DrawerArea");
2362
+ return b(), B(f, oe(d.$attrs, { class: "MvcTableColumnDownload" }), {
2363
+ cancel: V(() => [
2364
+ z(i, {
2365
+ modelValue: n(e).fileName,
2366
+ "onUpdate:modelValue": a[3] || (a[3] = (S) => n(e).fileName = S),
2367
+ icon: "catalog",
2368
+ placeholder: n(_),
2369
+ class: "w600"
2370
+ }, {
2371
+ append: V(() => [
2372
+ z(c, {
2373
+ loading: n(e).loading,
2374
+ onClick: g
2375
+ }, {
2376
+ icon: V(() => [...a[5] || (a[5] = [
2377
+ r("i", { class: "imicon im-download1" }, null, -1)
2378
+ ])]),
2379
+ default: V(() => [
2380
+ W(" " + L(d.$l("Download")), 1)
2381
+ ]),
2382
+ _: 1
2383
+ }, 8, ["loading"])
2384
+ ]),
2385
+ _: 1
2386
+ }, 8, ["modelValue", "placeholder"])
2387
+ ]),
2388
+ submit: V(() => [...a[6] || (a[6] = [])]),
2389
+ default: V(() => [
2390
+ r("div", zn, [
2391
+ z(h, null, {
2392
+ default: V(() => [
2393
+ r("div", En, [
2394
+ r("span", null, L(d.$l("Total")), 1),
2395
+ r("span", null, L(o.list.length), 1)
2396
+ ]),
2397
+ o.selection.length ? (b(), M("div", Nn, [
2398
+ r("span", null, L(d.$l("Selection")), 1),
2399
+ r("span", null, L(o.selection.length), 1),
2400
+ z(l, {
2401
+ modelValue: n(e).onlySelection,
2402
+ "onUpdate:modelValue": a[0] || (a[0] = (S) => n(e).onlySelection = S),
2403
+ label: d.$l("Only Selection")
2404
+ }, null, 8, ["modelValue", "label"])
2405
+ ])) : K("", !0),
2406
+ r("div", Kn, [
2407
+ z(c, { onClick: y }, {
2408
+ icon: V(() => [...a[4] || (a[4] = [
2409
+ r("i", { class: "imicon im-copy" }, null, -1)
2410
+ ])]),
2411
+ default: V(() => [
2412
+ W(" " + L(d.$l("Copy to Clipboard")), 1)
2413
+ ]),
2414
+ _: 1
2415
+ }),
2416
+ z(l, {
2417
+ modelValue: n(e).useHead,
2418
+ "onUpdate:modelValue": a[1] || (a[1] = (S) => n(e).useHead = S),
2419
+ label: d.$l("With Table Head")
2420
+ }, null, 8, ["modelValue", "label"])
2421
+ ])
2422
+ ]),
2423
+ _: 1
2424
+ })
2425
+ ]),
2426
+ r("div", Fn, [
2427
+ (b(!0), M(Y, null, se(n(T), (S) => (b(), M("div", {
2428
+ key: S.type
2429
+ }, [
2430
+ r("div", Dn, [
2431
+ r("span", Bn, L(S.label), 1),
2432
+ z(l, {
2433
+ modelValue: S.checkstatus,
2434
+ "onUpdate:modelValue": (v) => S.checkstatus = v,
2435
+ indeterminate: S.indeterminate,
2436
+ label: d.$l("Check"),
2437
+ onChange: (v) => $(v, S)
2438
+ }, null, 8, ["modelValue", "onUpdate:modelValue", "indeterminate", "label", "onChange"])
2439
+ ]),
2440
+ (b(!0), M(Y, null, se(S.children, (v, N) => (b(), B(l, {
2441
+ modelValue: v.visible,
2442
+ "onUpdate:modelValue": (I) => v.visible = I,
2443
+ key: N,
2444
+ label: v.label,
2445
+ value: v.value,
2446
+ class: "fullCheckbox p8-12 mb4 radius2 hover-txt-primary hover-bg-gray3"
2447
+ }, {
2448
+ default: V(() => {
2449
+ var I;
2450
+ return [
2451
+ r("div", Pn, [
2452
+ r("span", null, L(v.label), 1),
2453
+ (I = v.prop) != null && I.includes("country") ? (b(), B(x, {
2454
+ key: 0,
2455
+ modelValue: n(e).useCountryCode,
2456
+ "onUpdate:modelValue": a[2] || (a[2] = (P) => n(e).useCountryCode = P),
2457
+ "inline-prompt": "",
2458
+ "active-text": "Use Alpha-2 Code",
2459
+ "inactive-text": "Use Country Name",
2460
+ class: "primarySwitch"
2461
+ }, null, 8, ["modelValue"])) : K("", !0)
2462
+ ])
2463
+ ];
2464
+ }),
2465
+ _: 2
2466
+ }, 1032, ["modelValue", "onUpdate:modelValue", "label", "value"]))), 128))
2467
+ ]))), 128))
2468
+ ])
2469
+ ]),
2470
+ _: 1
2471
+ }, 16);
2472
+ };
2473
+ }
2474
+ }), Hn = { class: "MvcTable" }, Un = {
2475
+ key: 0,
2476
+ class: "flexMode vc"
2477
+ }, Gn = { class: "tableArea relative radius ctx-auto" }, Jn = {
2478
+ key: 1,
2479
+ class: "flexMode vc h56 p16 xscroll nobar fadeout"
2480
+ }, qn = /* @__PURE__ */ Object.assign({
2481
+ name: "MvcTable",
2482
+ inheritAttrs: !1
2483
+ }, {
2484
+ __name: "index",
2485
+ props: {
2486
+ defaultLoading: {
2487
+ type: Boolean,
2488
+ default: !0
2489
+ },
2490
+ tableName: {
2491
+ type: String,
2492
+ default: ""
2493
+ },
2494
+ autoHeader: {
2495
+ type: Boolean,
2496
+ default: !0
2497
+ },
2498
+ headerClass: {
2499
+ type: String,
2500
+ default: ""
2501
+ },
2502
+ height: {
2503
+ type: [String, Number],
2504
+ default: 0
2505
+ },
2506
+ minusHeight: {
2507
+ type: [String, Number],
2508
+ default: 0
2509
+ },
2510
+ defer: {
2511
+ type: Boolean,
2512
+ default: !1
2513
+ },
2514
+ rowKey: {
2515
+ type: String,
2516
+ default: ""
2517
+ },
2518
+ defaultExpandAll: {
2519
+ type: Boolean,
2520
+ default: !1
2521
+ },
2522
+ tool: {
2523
+ type: [Object, Boolean],
2524
+ default: () => ({
2525
+ download: !0,
2526
+ refresh: !0,
2527
+ column: !0
2528
+ })
2529
+ },
2530
+ noheader: {
2531
+ type: Boolean,
2532
+ default: !1
2533
+ },
2534
+ nofooter: {
2535
+ type: Boolean,
2536
+ default: !1
2537
+ },
2538
+ loadData: {
2539
+ type: Function,
2540
+ default: () => ({
2541
+ list: [],
2542
+ total: 0
2543
+ })
2544
+ },
2545
+ pageSize: {
2546
+ type: Number,
2547
+ default: 0
2548
+ },
2549
+ pageSizes: {
2550
+ type: Array,
2551
+ default: () => [10, 20, 50, 100]
2552
+ },
2553
+ /**
2554
+ * 远程汇总行按列格式化:与 util `$fu` 的 metric 形态一致。
2555
+ * 未传时使用全局 `$config.table.summaryMetric`(应用入口一次配置即可)。
2556
+ * 对象:`{ spend: { unit: 'currency', precision: 2 }, rate: { unit: '%', precision: 2 } }`
2557
+ * 函数:`(prop) => ({ unit, precision, currency })`。
2558
+ */
2559
+ summaryMetric: {
2560
+ type: [Object, Function],
2561
+ default: null
2562
+ }
2563
+ },
2564
+ emits: ["selection-change", "refresh"],
2565
+ setup(p, { expose: m, emit: o }) {
2566
+ const e = p, t = H({
2567
+ loading: !0,
2568
+ selection: []
2569
+ }), s = H({
2570
+ list: [],
2571
+ total: 0,
2572
+ page: 1,
2573
+ pageSize: 50,
2574
+ summary: !1,
2575
+ summaryType: "remote",
2576
+ nopagination: !1,
2577
+ params: {}
2578
+ }), u = H({
2579
+ tabelKey: 0,
2580
+ current: "",
2581
+ list: [
2582
+ {
2583
+ title: "Table Column Customization",
2584
+ size: 1024,
2585
+ cpt: me(jn)
2586
+ },
2587
+ {
2588
+ title: "Download from Current Table",
2589
+ cpt: me(Rn)
2590
+ }
2591
+ ]
2592
+ }), C = G(null), { proxy: $ } = ae();
2593
+ We(() => {
2594
+ g();
2595
+ }), ee(() => {
2596
+ w();
2597
+ });
2598
+ const y = o, g = () => {
2599
+ t.loading = e.defaultLoading, e.pageSize && (s.pageSize = e.pageSize);
2600
+ }, w = () => {
2601
+ S(), e.defer === !1 && T();
2602
+ }, _ = (j) => {
2603
+ T(j);
2604
+ }, T = async (j = {}) => {
2605
+ if (j.refresh && t.loading)
2606
+ return;
2607
+ t.loading = !0;
2608
+ const D = {
2609
+ pageSize: j.pageSize || s.pageSize,
2610
+ pageStart: j.pageStart || s.page
2611
+ };
2612
+ j.refresh && (D.remote = !0);
2613
+ const { list: Q = [], total: U, summary: q } = await e.loadData(D) || {};
2614
+ s.list = Q.map((te, le) => (te.index = le, te)), U === void 0 ? (s.total = s.list.length, s.nopagination = !0) : (s.total = U, s.nopagination = !1), window.config.table.scrollToTop && d(), A(q), t.loading = !1;
2615
+ }, A = (j) => {
2616
+ j ? s.summary = j : s.summary = !1;
2617
+ }, k = (j) => {
2618
+ if (s.summaryType === "locale")
2619
+ return [];
2620
+ if (s.summaryType === "remote") {
2621
+ const D = (U, q) => {
2622
+ if (U != null)
2623
+ return typeof U == "function" ? U(q) : U[q];
2624
+ }, Q = (U) => {
2625
+ var te, le;
2626
+ const q = D(e.summaryMetric, U);
2627
+ return q !== void 0 ? q : D((le = (te = globalThis.$config) == null ? void 0 : te.table) == null ? void 0 : le.summaryMetric, U);
2628
+ };
2629
+ return Xe(j, s.summary, { resolveMetric: Q });
2630
+ }
2631
+ return [];
2632
+ }, d = () => {
2633
+ C.value.$refs.scrollBarRef.setScrollTop(0);
2634
+ }, a = () => {
2635
+ T({
2636
+ pageStart: 1
2637
+ });
2638
+ }, l = () => {
2639
+ T();
2640
+ }, c = (j) => {
2641
+ if (t.selection = j, y("selection-change", j), t.shiftKey) {
2642
+ const D = j[j.length - 2], Q = j[j.length - 1], U = s.list.filter1((X) => X.id === D.id).index || 0, q = s.list.filter1((X) => X.id === Q.id).index;
2643
+ let te = U, le = q;
2644
+ U > q && (te = q, le = U);
2645
+ for (let X = te; X <= le; X++)
2646
+ $.$refs.body.toggleRowSelection(s.list[X], !0);
2647
+ }
2648
+ }, h = () => {
2649
+ t.loading || (T({ refresh: !0 }), y("refresh"));
2650
+ }, x = () => {
2651
+ u.current = 0;
2652
+ }, i = () => {
2653
+ u.current = 1;
2654
+ }, f = () => {
2655
+ t.tableKey++;
2656
+ }, S = () => {
2657
+ document.addEventListener("keydown", v), document.addEventListener("keyup", N);
2658
+ }, v = (j) => {
2659
+ j.keyCode === 16 && (t.shiftKey = !0);
2660
+ }, N = (j) => {
2661
+ j.keyCode === 16 && (t.shiftKey = !1);
2662
+ }, I = () => {
2663
+ document.removeEventListener("keydown", v), document.removeEventListener("keyup", N);
2664
+ }, P = ({ i: j, row: D }) => {
2665
+ s.list[j] = D;
2666
+ }, Z = O(() => {
2667
+ let j = e.height || window.config.options.pageHeight;
2668
+ return e.noheader === !1 && (j -= 64), e.nofooter === !1 && (j -= 56), j -= e.minusHeight, j;
2669
+ }), ue = O(() => !!s.summary), Ee = O(() => s.nopagination === !0 ? "total" : "total,->,prev,pager,next,sizes"), re = O(() => {
2670
+ if (e.tool) {
2671
+ const { column: j = !0, download: D = !0, refresh: Q = !0 } = e.tool;
2672
+ return {
2673
+ column: j,
2674
+ download: D,
2675
+ refresh: Q
2676
+ };
2677
+ } else
2678
+ return !1;
2679
+ });
2680
+ return ce(() => {
2681
+ I();
2682
+ }), m({
2683
+ initTable: _,
2684
+ editRow: P
2685
+ }), (j, D) => {
2686
+ const Q = E("el-button"), U = E("Loading"), q = E("el-table"), te = E("el-pagination"), le = E("Drawer");
2687
+ return b(), M("div", Hn, [
2688
+ e.noheader === !1 ? (b(), M("div", {
2689
+ key: 0,
2690
+ class: F(["flexMode hb g12 p16 bg-white", e.autoHeader ? "minh64" : "h64"])
2691
+ }, [
2692
+ r("div", {
2693
+ class: F(["flexMode vc flexGrow maxwp100", e.headerClass])
2694
+ }, [
2695
+ R(j.$slots, "header", {}, void 0, !0)
2696
+ ], 2),
2697
+ n(re) ? (b(), M("div", Un, [
2698
+ n(re).refresh ? (b(), B(Q, {
2699
+ key: 0,
2700
+ onClick: h
2701
+ }, {
2702
+ icon: V(() => [...D[2] || (D[2] = [
2703
+ r("i", { class: "imicon im-sync" }, null, -1)
2704
+ ])]),
2705
+ default: V(() => [
2706
+ W(" " + L(j.$l("Refresh")), 1)
2707
+ ]),
2708
+ _: 1
2709
+ })) : K("", !0),
2710
+ n(re).column ? (b(), B(Q, {
2711
+ key: 1,
2712
+ onClick: x
2713
+ }, {
2714
+ icon: V(() => [...D[3] || (D[3] = [
2715
+ r("i", { class: "imicon im-column" }, null, -1)
2716
+ ])]),
2717
+ default: V(() => [
2718
+ W(" " + L(j.$l("Columns")), 1)
2719
+ ]),
2720
+ _: 1
2721
+ })) : K("", !0),
2722
+ n(re).download ? (b(), B(Q, {
2723
+ key: 2,
2724
+ onClick: i
2725
+ }, {
2726
+ icon: V(() => [...D[4] || (D[4] = [
2727
+ r("i", { class: "imicon im-download1" }, null, -1)
2728
+ ])]),
2729
+ default: V(() => [
2730
+ W(" " + L(j.$l("Download")), 1)
2731
+ ]),
2732
+ _: 1
2733
+ })) : K("", !0)
2734
+ ])) : K("", !0)
2735
+ ], 2)) : K("", !0),
2736
+ r("div", Gn, [
2737
+ z(U, {
2738
+ loading: n(t).loading
2739
+ }, null, 8, ["loading"]),
2740
+ (b(), B(q, {
2741
+ ref_key: "body",
2742
+ ref: C,
2743
+ key: n(t).tableKey,
2744
+ height: n(Z),
2745
+ data: n(s).list,
2746
+ "default-expand-all": e.defaultExpandAll,
2747
+ "row-key": e.rowKey,
2748
+ stripe: "",
2749
+ border: "",
2750
+ "show-summary": n(ue),
2751
+ "summary-method": k,
2752
+ class: "MainTable",
2753
+ onSelectionChange: c
2754
+ }, {
2755
+ default: V(() => [
2756
+ z(n(tn), oe({
2757
+ "table-name": e.tableName,
2758
+ column: n(re) ? n(re).column : !1
2759
+ }, j.$attrs), {
2760
+ default: V(() => [
2761
+ R(j.$slots, "default", {}, void 0, !0)
2762
+ ]),
2763
+ _: 3
2764
+ }, 16, ["table-name", "column"])
2765
+ ]),
2766
+ _: 3
2767
+ }, 8, ["height", "data", "default-expand-all", "row-key", "show-summary"]))
2768
+ ]),
2769
+ e.nofooter === !1 ? (b(), M("div", Jn, [
2770
+ z(te, {
2771
+ "current-page": n(s).page,
2772
+ "onUpdate:currentPage": D[0] || (D[0] = (X) => n(s).page = X),
2773
+ background: "",
2774
+ total: n(s).total,
2775
+ "default-page-size": n(s).pageSize,
2776
+ "page-sizes": e.pageSizes,
2777
+ "pager-count": 5,
2778
+ layout: n(Ee),
2779
+ class: "wp100",
2780
+ onSizeChange: a,
2781
+ onCurrentChange: l
2782
+ }, null, 8, ["current-page", "total", "default-page-size", "page-sizes", "layout"])
2783
+ ])) : K("", !0),
2784
+ z(le, {
2785
+ current: n(u).current,
2786
+ "onUpdate:current": D[1] || (D[1] = (X) => n(u).current = X),
2787
+ "table-name": e.tableName,
2788
+ drawer: n(u).list,
2789
+ list: n(s).list,
2790
+ selection: n(t).selection,
2791
+ onInitColumn: f
2792
+ }, null, 8, ["current", "table-name", "drawer", "list", "selection"])
2793
+ ]);
2794
+ };
2795
+ }
2796
+ }), Wn = /* @__PURE__ */ J(qn, [["__scopeId", "data-v-e72098dd"]]), Yn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
2797
+ __proto__: null,
2798
+ default: Wn
2799
+ }, Symbol.toStringTag, { value: "Module" })), Zn = { class: "panelWrap" }, Qn = /* @__PURE__ */ Object.assign({
2800
+ name: "MvcTabs",
2801
+ inheritAttrs: !1
2802
+ }, {
2803
+ __name: "index",
2804
+ props: {
2805
+ modelValue: {
2806
+ type: [String, Number, Boolean],
2807
+ default: void 0
2808
+ },
2809
+ /** 与 BtnGroup 一致;每项需含 `component`(或 `componentKey` 指定字段)指向要渲染的组件 */
2810
+ options: {
2811
+ type: Array,
2812
+ default: () => []
2813
+ },
2814
+ valueKey: {
2815
+ type: String,
2816
+ default: "value"
2817
+ },
2818
+ labelKey: {
2819
+ type: String,
2820
+ default: "label"
2821
+ },
2822
+ iconKey: {
2823
+ type: String,
2824
+ default: "icon"
2825
+ },
2826
+ iconClass: {
2827
+ type: String,
2828
+ default: "imicon"
2829
+ },
2830
+ componentKey: {
2831
+ type: String,
2832
+ default: "component"
2833
+ },
2834
+ /** 选项对象上用于 `v-bind` 到当前面板的字段名,如 `{ paneProps: { id: 1 } }` */
2835
+ panePropsKey: {
2836
+ type: String,
2837
+ default: "paneProps"
2838
+ },
2839
+ disabled: {
2840
+ type: Boolean,
2841
+ default: !1
2842
+ }
2843
+ },
2844
+ emits: ["update:modelValue", "change"],
2845
+ setup(p, { emit: m }) {
2846
+ const o = p, e = m, t = ve(), s = (g) => g == null ? g : ["Object", "Array"].includes(globalThis.$getType(g)) ? g[o.valueKey] : g, u = (g) => {
2847
+ e("update:modelValue", g);
2848
+ const w = o.options.find((_) => s(_) === g);
2849
+ e("change", g, w);
2850
+ }, C = O(
2851
+ () => o.options.find((g) => s(g) === o.modelValue)
2852
+ ), $ = O(() => {
2853
+ const g = C.value;
2854
+ if (!(!g || !["Object", "Array"].includes(globalThis.$getType(g))))
2855
+ return g[o.componentKey];
2856
+ }), y = O(() => {
2857
+ const g = C.value;
2858
+ return !g || !["Object", "Array"].includes(globalThis.$getType(g)) ? {} : g[o.panePropsKey] ?? {};
2859
+ });
2860
+ return (g, w) => {
2861
+ const _ = E("BtnGroup");
2862
+ return b(), M("div", oe({ class: "MvcTabs flexMode flexV g12" }, n(t)), [
2863
+ z(_, {
2864
+ "model-value": o.modelValue,
2865
+ options: o.options,
2866
+ "value-key": o.valueKey,
2867
+ "label-key": o.labelKey,
2868
+ "icon-key": o.iconKey,
2869
+ "icon-class": o.iconClass,
2870
+ disabled: o.disabled,
2871
+ "onUpdate:modelValue": u
2872
+ }, null, 8, ["model-value", "options", "value-key", "label-key", "icon-key", "icon-class", "disabled"]),
2873
+ r("div", Zn, [
2874
+ n($) ? (b(), B(Oe(n($)), de(oe({ key: 0 }, n(y))), null, 16)) : K("", !0)
2875
+ ])
2876
+ ], 16);
2877
+ };
2878
+ }
2879
+ }), Xn = /* @__PURE__ */ J(Qn, [["__scopeId", "data-v-292f6bba"]]), el = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
2880
+ __proto__: null,
2881
+ default: Xn
2882
+ }, Symbol.toStringTag, { value: "Module" })), tl = /* @__PURE__ */ Object.assign({
2883
+ name: "MvcTextarea",
2884
+ inheritAttrs: !1
2885
+ }, {
2886
+ __name: "index",
2887
+ props: {
2888
+ modelValue: {
2889
+ type: [String, Number, Array],
2890
+ default: ""
2891
+ },
2892
+ rows: {
2893
+ type: Number,
2894
+ default: 3
2895
+ },
2896
+ height: {
2897
+ type: [String, Number],
2898
+ default: ""
2899
+ },
2900
+ output: {
2901
+ type: String,
2902
+ default: "string",
2903
+ validator: (p) => ["string", "array"].includes(p)
2904
+ },
2905
+ resize: {
2906
+ type: String,
2907
+ default: "vertical",
2908
+ validator: (p) => ["none", "vertical"].includes(p)
2909
+ }
2910
+ },
2911
+ emits: [
2912
+ "update:modelValue",
2913
+ "input",
2914
+ "change",
2915
+ "blur",
2916
+ "focus"
2917
+ ],
2918
+ setup(p, { emit: m }) {
2919
+ const o = p, e = G(null);
2920
+ let t = null;
2921
+ const s = H({
2922
+ val: "",
2923
+ isComposing: !1
2924
+ }), u = m, { proxy: C } = ae();
2925
+ ee(() => {
2926
+ var l, c;
2927
+ const a = (l = e.value) == null ? void 0 : l.$el;
2928
+ t = (c = a == null ? void 0 : a.querySelector) == null ? void 0 : c.call(a, "textarea"), t && (t.addEventListener("compositionstart", $), t.addEventListener("compositionend", y));
2929
+ });
2930
+ const $ = () => {
2931
+ s.isComposing = !0;
2932
+ }, y = () => {
2933
+ s.isComposing = !1, ge(() => T(s.val));
2934
+ }, g = (a) => {
2935
+ s.isComposing || T(a);
2936
+ }, w = (a) => {
2937
+ const l = String(a ?? "").split(/\r?\n/);
2938
+ return o.output === "array" ? l : l.join(",");
2939
+ }, _ = (a) => Array.isArray(a) ? a.join(`
2940
+ `) : String(a ?? "").replace(/,/g, `
2941
+ `), T = (a) => {
2942
+ const l = w(a);
2943
+ u("update:modelValue", l), u("input", l);
2944
+ }, A = O(() => {
2945
+ if (!o.height) return C.$attrs["input-style"];
2946
+ const a = typeof o.height == "number" ? `${o.height}px` : o.height;
2947
+ return { ...C.$attrs["input-style"] && typeof C.$attrs["input-style"] == "object" ? { ...C.$attrs["input-style"] } : {}, height: a, minHeight: a };
2948
+ }), k = O(() => !!(C.$attrs.maxlength || d.value)), d = O(() => C.$attrs.max);
2949
+ return ne(
2950
+ () => o.modelValue,
2951
+ (a) => {
2952
+ const l = _(a);
2953
+ s.val !== l && (s.val = l);
2954
+ },
2955
+ { immediate: !0 }
2956
+ ), ce(() => {
2957
+ t && (t.removeEventListener("compositionstart", $), t.removeEventListener("compositionend", y), t = null);
2958
+ }), (a, l) => {
2959
+ const c = E("el-input");
2960
+ return b(), B(c, oe({
2961
+ ref_key: "inputRef",
2962
+ ref: e,
2963
+ type: "textarea",
2964
+ modelValue: n(s).val,
2965
+ "onUpdate:modelValue": l[0] || (l[0] = (h) => n(s).val = h),
2966
+ rows: o.rows,
2967
+ style: a.$attrs.style,
2968
+ "input-style": n(A),
2969
+ "show-word-limit": n(k),
2970
+ maxlength: n(d),
2971
+ class: "MvcTextarea"
2972
+ }, a.$attrs, { onInput: g }), null, 16, ["modelValue", "rows", "style", "input-style", "show-word-limit", "maxlength"]);
2973
+ };
2974
+ }
2975
+ }), ol = /* @__PURE__ */ J(tl, [["__scopeId", "data-v-4dba94bf"]]), nl = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
2976
+ __proto__: null,
2977
+ default: ol
2978
+ }, Symbol.toStringTag, { value: "Module" })), ke = /* @__PURE__ */ Object.assign({ "../component/BtnGroup/index.vue": mt, "../component/Drawer/index.vue": vt, "../component/DrawerArea/index.vue": Ct, "../component/Form/index.vue": Vt, "../component/Frame/index.vue": ro, "../component/Icon/index.vue": po, "../component/Input/index.vue": fo, "../component/Loading/index.vue": yo, "../component/Login/index.vue": Lo, "../component/Page/index.vue": Po, "../component/Select/index.vue": qo, "../component/SelectV2/index.vue": en, "../component/Table/index.vue": Yn, "../component/Tabs/index.vue": el, "../component/Textarea/index.vue": nl }), ll = (p) => {
2979
+ for (let m in ke) {
2980
+ let o = m.match(/\.\.\/component\/(.*)\/index.vue/)[1];
2981
+ p.component(o, ke[m].default);
2982
+ }
2983
+ }, sl = {
2984
+ name: "Matt Avias Frame",
2985
+ copyright: "©2026",
2986
+ version: "1.0.14",
2987
+ author: "Matt Avias",
2988
+ date: "2026-02-26",
2989
+ /** 默认语言 key,与 `$getLang`、localStorage `lang` 一致;业务在 app.use(mvframe, { config }) 里覆盖 */
2990
+ lang: "en_us",
2991
+ /** Table 等表格默认;业务在 app.use(mvframe, { config }) 里覆盖 */
2992
+ table: {
2993
+ /** 同 Table 的 summary-metric:{ [prop]: { unit, precision, currency } } 或 (prop) => metric */
2994
+ summaryMetric: null
2995
+ }
2996
+ }, al = (p, m = {}) => {
2997
+ globalThis.$config = {
2998
+ ...sl,
2999
+ ...m
3000
+ };
3001
+ }, bl = (p, m) => {
3002
+ p.use(al, m.config).use(ze).use(ll).use(Ne).use(Ke).use(Fe, m.pinia).use(ct, m.vueRouter).use(et, m.lang);
3003
+ };
6
3004
  export {
7
- e as builtinLocales,
8
- m as default,
9
- n as getBuiltinLangMaps,
10
- p as normalizeBuiltinLocale
3005
+ gl as builtinLocales,
3006
+ bl as default,
3007
+ hl as getBuiltinLangMaps,
3008
+ rt as normalizeBuiltinLocale
11
3009
  };