jky-component-lib 0.0.64 → 0.0.67
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/es/components.d.ts +1 -0
- package/dist/es/components.js +4 -1
- package/dist/es/form/Form.vue.d.ts +10 -6
- package/dist/es/form/Form.vue.js +131 -81
- package/dist/es/form/FormItem.vue.js +55 -3
- package/dist/es/form/SelectTable.vue.d.ts +38 -0
- package/dist/es/form/SelectTable.vue.js +217 -0
- package/dist/es/form/SelectTable.vue3.js +5 -0
- package/dist/es/form/style.css +56 -0
- package/dist/es/index.js +15 -0
- package/dist/es/package.json.js +1 -1
- package/dist/es/page-header/PageHeader.vue.js +2 -2
- package/dist/es/page-header/PopoverMenu.vue.js +2 -2
- package/dist/es/page-layout/PageLayout.vue.js +1 -1
- package/dist/es/page-layout/style.css +2 -0
- package/dist/es/page-table/PageTable.vue.d.ts +44 -28
- package/dist/es/page-table/PageTable.vue.js +91 -25
- package/dist/es/page-table/style.css +9 -1
- package/dist/es/style.css +164 -26
- package/dist/es/styles.css +1 -1
- package/dist/es/tabs/TabContent.vue.d.ts +16 -0
- package/dist/es/tabs/TabContent.vue.js +65 -0
- package/dist/es/tabs/TabContent.vue3.js +5 -0
- package/dist/es/tabs/Tabs.vue.d.ts +46 -0
- package/dist/es/tabs/Tabs.vue.js +275 -0
- package/dist/es/tabs/Tabs.vue3.js +5 -0
- package/dist/es/tabs/index.d.ts +9 -0
- package/dist/es/tabs/index.js +8 -0
- package/dist/es/tabs/routeListener.d.ts +19 -0
- package/dist/es/tabs/routeListener.js +26 -0
- package/dist/es/tabs/style.css +29 -0
- package/dist/es/tabs/useTabs.d.ts +27 -0
- package/dist/es/tabs/useTabs.js +59 -0
- package/dist/es/tabs/useTabsStore.d.ts +53 -0
- package/dist/es/tabs/useTabsStore.js +208 -0
- package/dist/lib/components.d.ts +1 -0
- package/dist/lib/components.js +4 -1
- package/dist/lib/form/Form.vue.d.ts +10 -6
- package/dist/lib/form/Form.vue.js +129 -79
- package/dist/lib/form/FormItem.vue.js +54 -2
- package/dist/lib/form/SelectTable.vue.d.ts +38 -0
- package/dist/lib/form/SelectTable.vue.js +217 -0
- package/dist/lib/form/SelectTable.vue3.js +5 -0
- package/dist/lib/form/style.css +56 -0
- package/dist/lib/index.js +15 -0
- package/dist/lib/package.json.js +1 -1
- package/dist/lib/page-header/PageHeader.vue.js +3 -3
- package/dist/lib/page-header/PopoverMenu.vue.js +2 -2
- package/dist/lib/page-layout/PageLayout.vue.js +1 -1
- package/dist/lib/page-layout/style.css +2 -0
- package/dist/lib/page-table/PageTable.vue.d.ts +44 -28
- package/dist/lib/page-table/PageTable.vue.js +90 -24
- package/dist/lib/page-table/style.css +9 -1
- package/dist/lib/style.css +164 -26
- package/dist/lib/styles.css +1 -1
- package/dist/lib/tabs/TabContent.vue.d.ts +16 -0
- package/dist/lib/tabs/TabContent.vue.js +65 -0
- package/dist/lib/tabs/TabContent.vue3.js +5 -0
- package/dist/lib/tabs/Tabs.vue.d.ts +46 -0
- package/dist/lib/tabs/Tabs.vue.js +275 -0
- package/dist/lib/tabs/Tabs.vue3.js +5 -0
- package/dist/lib/tabs/index.d.ts +9 -0
- package/dist/lib/tabs/index.js +8 -0
- package/dist/lib/tabs/routeListener.d.ts +19 -0
- package/dist/lib/tabs/routeListener.js +26 -0
- package/dist/lib/tabs/style.css +29 -0
- package/dist/lib/tabs/useTabs.d.ts +27 -0
- package/dist/lib/tabs/useTabs.js +59 -0
- package/dist/lib/tabs/useTabsStore.d.ts +53 -0
- package/dist/lib/tabs/useTabsStore.js +208 -0
- package/package.json +10 -2
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
3
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
4
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
5
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
6
|
+
var __spreadValues = (a, b) => {
|
|
7
|
+
for (var prop in b || (b = {}))
|
|
8
|
+
if (__hasOwnProp.call(b, prop))
|
|
9
|
+
__defNormalProp(a, prop, b[prop]);
|
|
10
|
+
if (__getOwnPropSymbols)
|
|
11
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
12
|
+
if (__propIsEnum.call(b, prop))
|
|
13
|
+
__defNormalProp(a, prop, b[prop]);
|
|
14
|
+
}
|
|
15
|
+
return a;
|
|
16
|
+
};
|
|
17
|
+
import { defineStore } from "pinia";
|
|
18
|
+
import { ref, shallowRef, computed, inject } from "vue";
|
|
19
|
+
const PERSIST_KEY_SYMBOL = Symbol("jky-tabs-persist-key");
|
|
20
|
+
const DEFAULT_PERSIST_KEY = "jky-tabs-state";
|
|
21
|
+
function getPersistConfig(persist, persistKey) {
|
|
22
|
+
const injectedPersistKey = inject(PERSIST_KEY_SYMBOL, void 0);
|
|
23
|
+
const finalPersistKey = injectedPersistKey || persistKey || DEFAULT_PERSIST_KEY;
|
|
24
|
+
return {
|
|
25
|
+
enabled: persist !== void 0 ? persist : false,
|
|
26
|
+
key: finalPersistKey
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function loadFromStorage(key) {
|
|
30
|
+
try {
|
|
31
|
+
const stored = localStorage.getItem(key);
|
|
32
|
+
if (stored) {
|
|
33
|
+
return JSON.parse(stored);
|
|
34
|
+
}
|
|
35
|
+
} catch (error) {
|
|
36
|
+
console.warn("Failed to load tabs from storage:", error);
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
function saveToStorage(key, data) {
|
|
41
|
+
try {
|
|
42
|
+
localStorage.setItem(key, JSON.stringify(data));
|
|
43
|
+
} catch (error) {
|
|
44
|
+
console.warn("Failed to save tabs to storage:", error);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function createTabsStore(persist, persistKey) {
|
|
48
|
+
const persistConfig = getPersistConfig(persist, persistKey);
|
|
49
|
+
const initialData = persistConfig.enabled ? loadFromStorage(persistConfig.key) : null;
|
|
50
|
+
const store = defineStore("jky-tabs", () => {
|
|
51
|
+
const tabList = ref((initialData == null ? void 0 : initialData.tabList) || []);
|
|
52
|
+
const activeTab = ref((initialData == null ? void 0 : initialData.activeTab) || "");
|
|
53
|
+
const cacheTabs = shallowRef((initialData == null ? void 0 : initialData.cacheTabs) || []);
|
|
54
|
+
const closedTabs = shallowRef((initialData == null ? void 0 : initialData.closedTabs) || []);
|
|
55
|
+
const cacheSet = computed(() => new Set(cacheTabs.value));
|
|
56
|
+
const closedSet = computed(() => new Set(closedTabs.value));
|
|
57
|
+
function persistState() {
|
|
58
|
+
if (!persistConfig.enabled)
|
|
59
|
+
return;
|
|
60
|
+
saveToStorage(persistConfig.key, {
|
|
61
|
+
tabList: tabList.value,
|
|
62
|
+
activeTab: activeTab.value,
|
|
63
|
+
cacheTabs: cacheTabs.value,
|
|
64
|
+
closedTabs: closedTabs.value
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
function addTab(tab) {
|
|
68
|
+
const index = tabList.value.findIndex((t) => t.name === tab.name);
|
|
69
|
+
if (index !== -1) {
|
|
70
|
+
tabList.value[index] = __spreadValues(__spreadValues({}, tabList.value[index]), tab);
|
|
71
|
+
} else {
|
|
72
|
+
tabList.value.push(tab);
|
|
73
|
+
}
|
|
74
|
+
persistState();
|
|
75
|
+
}
|
|
76
|
+
function updateTab(name, tab) {
|
|
77
|
+
const index = tabList.value.findIndex((t) => t.name === name);
|
|
78
|
+
if (index !== -1) {
|
|
79
|
+
tabList.value[index] = __spreadValues(__spreadValues({}, tabList.value[index]), tab);
|
|
80
|
+
persistState();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function removeTab(name) {
|
|
84
|
+
const index = tabList.value.findIndex((t) => t.name === name);
|
|
85
|
+
if (index !== -1) {
|
|
86
|
+
tabList.value.splice(index, 1);
|
|
87
|
+
removeCache(name);
|
|
88
|
+
if (activeTab.value === name && tabList.value.length > 0) {
|
|
89
|
+
const nextTab = tabList.value[index] || tabList.value[index - 1];
|
|
90
|
+
if (nextTab) {
|
|
91
|
+
activeTab.value = nextTab.name;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
persistState();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function setActiveTab(name) {
|
|
98
|
+
activeTab.value = name;
|
|
99
|
+
persistState();
|
|
100
|
+
}
|
|
101
|
+
function addCache(name) {
|
|
102
|
+
if (!cacheSet.value.has(name)) {
|
|
103
|
+
cacheTabs.value = [...cacheTabs.value, name];
|
|
104
|
+
persistState();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function removeCache(name) {
|
|
108
|
+
cacheTabs.value = cacheTabs.value.filter((t) => t !== name);
|
|
109
|
+
persistState();
|
|
110
|
+
}
|
|
111
|
+
function bulkRemove(names) {
|
|
112
|
+
tabList.value = tabList.value.filter((tab) => !names.includes(tab.name));
|
|
113
|
+
names.forEach((name) => removeCache(name));
|
|
114
|
+
persistState();
|
|
115
|
+
}
|
|
116
|
+
function closeLeft(name) {
|
|
117
|
+
const index = tabList.value.findIndex((t) => t.name === name);
|
|
118
|
+
if (index > 0) {
|
|
119
|
+
const leftTabs = tabList.value.slice(0, index);
|
|
120
|
+
const removableTabs = leftTabs.filter((tab) => !tab.affix);
|
|
121
|
+
bulkRemove(removableTabs.map((tab) => tab.name));
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
function closeRight(name) {
|
|
125
|
+
const index = tabList.value.findIndex((t) => t.name === name);
|
|
126
|
+
if (index >= 0 && index < tabList.value.length - 1) {
|
|
127
|
+
const rightTabs = tabList.value.slice(index + 1);
|
|
128
|
+
const removableTabs = rightTabs.filter((tab) => !tab.affix);
|
|
129
|
+
bulkRemove(removableTabs.map((tab) => tab.name));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
function closeOther(name) {
|
|
133
|
+
const removableTabs = tabList.value.filter(
|
|
134
|
+
(tab) => tab.name !== name && !tab.affix
|
|
135
|
+
);
|
|
136
|
+
bulkRemove(removableTabs.map((tab) => tab.name));
|
|
137
|
+
}
|
|
138
|
+
function closeAll() {
|
|
139
|
+
const removableTabs = tabList.value.filter((tab) => !tab.affix);
|
|
140
|
+
bulkRemove(removableTabs.map((tab) => tab.name));
|
|
141
|
+
}
|
|
142
|
+
function refresh(name) {
|
|
143
|
+
removeCache(name);
|
|
144
|
+
setTimeout(() => {
|
|
145
|
+
addCache(name);
|
|
146
|
+
}, 0);
|
|
147
|
+
}
|
|
148
|
+
function getTabList() {
|
|
149
|
+
return [...tabList.value];
|
|
150
|
+
}
|
|
151
|
+
function getCacheTabs() {
|
|
152
|
+
return [...cacheTabs.value];
|
|
153
|
+
}
|
|
154
|
+
function isClosed(name) {
|
|
155
|
+
return closedSet.value.has(name);
|
|
156
|
+
}
|
|
157
|
+
function isCached(name) {
|
|
158
|
+
return cacheSet.value.has(name);
|
|
159
|
+
}
|
|
160
|
+
function reset() {
|
|
161
|
+
tabList.value = [];
|
|
162
|
+
activeTab.value = "";
|
|
163
|
+
cacheTabs.value = [];
|
|
164
|
+
closedTabs.value = [];
|
|
165
|
+
persistState();
|
|
166
|
+
}
|
|
167
|
+
return {
|
|
168
|
+
tabList,
|
|
169
|
+
activeTab,
|
|
170
|
+
cacheTabs,
|
|
171
|
+
closedTabs,
|
|
172
|
+
addTab,
|
|
173
|
+
updateTab,
|
|
174
|
+
removeTab,
|
|
175
|
+
setActiveTab,
|
|
176
|
+
addCache,
|
|
177
|
+
removeCache,
|
|
178
|
+
bulkRemove,
|
|
179
|
+
closeLeft,
|
|
180
|
+
closeRight,
|
|
181
|
+
closeOther,
|
|
182
|
+
closeAll,
|
|
183
|
+
refresh,
|
|
184
|
+
getTabList,
|
|
185
|
+
getCacheTabs,
|
|
186
|
+
isClosed,
|
|
187
|
+
isCached,
|
|
188
|
+
reset
|
|
189
|
+
};
|
|
190
|
+
});
|
|
191
|
+
return store();
|
|
192
|
+
}
|
|
193
|
+
const storeInstances = /* @__PURE__ */ new Map();
|
|
194
|
+
function useTabsStore(persist, persistKey) {
|
|
195
|
+
const key = persistKey || DEFAULT_PERSIST_KEY;
|
|
196
|
+
if (!storeInstances.has(key)) {
|
|
197
|
+
storeInstances.set(key, () => createTabsStore(persist, persistKey));
|
|
198
|
+
}
|
|
199
|
+
return storeInstances.get(key)();
|
|
200
|
+
}
|
|
201
|
+
function resetTabsStore() {
|
|
202
|
+
storeInstances.clear();
|
|
203
|
+
}
|
|
204
|
+
export {
|
|
205
|
+
createTabsStore,
|
|
206
|
+
resetTabsStore,
|
|
207
|
+
useTabsStore
|
|
208
|
+
};
|
package/dist/lib/components.d.ts
CHANGED
package/dist/lib/components.js
CHANGED
|
@@ -11,6 +11,7 @@ const index$7 = require("./page-layout/index.js");
|
|
|
11
11
|
const index$8 = require("./page-table/index.js");
|
|
12
12
|
const index$9 = require("./rich-editor/index.js");
|
|
13
13
|
const index$a = require("./say-hello/index.js");
|
|
14
|
+
const index$b = require("./tabs/index.js");
|
|
14
15
|
const components = [
|
|
15
16
|
index$a.JkySayHello,
|
|
16
17
|
index$1.JkyButton,
|
|
@@ -22,7 +23,8 @@ const components = [
|
|
|
22
23
|
index.JkyAddInput,
|
|
23
24
|
index$9.JkyRichEditor,
|
|
24
25
|
index$8.JkyPageTable,
|
|
25
|
-
index$7.JkyPageLayout
|
|
26
|
+
index$7.JkyPageLayout,
|
|
27
|
+
index$b.JkyTabs
|
|
26
28
|
];
|
|
27
29
|
exports.JkyAddInput = index.JkyAddInput;
|
|
28
30
|
exports.JkyButton = index$1.JkyButton;
|
|
@@ -35,4 +37,5 @@ exports.JkyPageLayout = index$7.JkyPageLayout;
|
|
|
35
37
|
exports.JkyPageTable = index$8.JkyPageTable;
|
|
36
38
|
exports.JkyRichEditor = index$9.JkyRichEditor;
|
|
37
39
|
exports.JkySayHello = index$a.JkySayHello;
|
|
40
|
+
exports.JkyTabs = index$b.JkyTabs;
|
|
38
41
|
exports.components = components;
|
|
@@ -88,7 +88,7 @@ declare function getFormInstance(): ({
|
|
|
88
88
|
validateOnRuleChange: boolean;
|
|
89
89
|
}> & Omit<Readonly<import('element-plus').FormProps> & Readonly<{
|
|
90
90
|
onValidate?: ((prop: import('element-plus').FormItemProp, isValid: boolean, message: string) => any) | undefined;
|
|
91
|
-
}>, "
|
|
91
|
+
}>, "labelPosition" | "requireAsteriskPosition" | "labelWidth" | "labelSuffix" | "showMessage" | "validateOnRuleChange" | "scrollIntoViewOptions" | "validate" | "validateField" | "resetFields" | "clearValidate" | "scrollToField" | "getField" | "fields" | "setInitialValues"> & import('vue').ShallowUnwrapRef<{
|
|
92
92
|
validate: (callback?: import('element-plus').FormValidateCallback) => import('element-plus').FormValidationResult;
|
|
93
93
|
validateField: (props?: import('element-plus/es/utils').Arrayable<import('element-plus').FormItemProp>, callback?: import('element-plus').FormValidateCallback) => import('element-plus').FormValidationResult;
|
|
94
94
|
resetFields: (props?: import('element-plus/es/utils').Arrayable<import('element-plus').FormItemProp>) => void;
|
|
@@ -195,7 +195,7 @@ declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {
|
|
|
195
195
|
validateOnRuleChange: boolean;
|
|
196
196
|
}> & Omit<Readonly<import('element-plus').FormProps> & Readonly<{
|
|
197
197
|
onValidate?: ((prop: import('element-plus').FormItemProp, isValid: boolean, message: string) => any) | undefined;
|
|
198
|
-
}>, "
|
|
198
|
+
}>, "labelPosition" | "requireAsteriskPosition" | "labelWidth" | "labelSuffix" | "showMessage" | "validateOnRuleChange" | "scrollIntoViewOptions" | "validate" | "validateField" | "resetFields" | "clearValidate" | "scrollToField" | "getField" | "fields" | "setInitialValues"> & import('vue').ShallowUnwrapRef<{
|
|
199
199
|
validate: (callback?: import('element-plus').FormValidateCallback) => import('element-plus').FormValidationResult;
|
|
200
200
|
validateField: (props?: import('element-plus/es/utils').Arrayable<import('element-plus').FormItemProp>, callback?: import('element-plus').FormValidateCallback) => import('element-plus').FormValidationResult;
|
|
201
201
|
resetFields: (props?: import('element-plus/es/utils').Arrayable<import('element-plus').FormItemProp>) => void;
|
|
@@ -293,7 +293,7 @@ declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {
|
|
|
293
293
|
validateOnRuleChange: boolean;
|
|
294
294
|
}> & Omit<Readonly<import('element-plus').FormProps> & Readonly<{
|
|
295
295
|
onValidate?: ((prop: import('element-plus').FormItemProp, isValid: boolean, message: string) => any) | undefined;
|
|
296
|
-
}>, "
|
|
296
|
+
}>, "labelPosition" | "requireAsteriskPosition" | "labelWidth" | "labelSuffix" | "showMessage" | "validateOnRuleChange" | "scrollIntoViewOptions" | "validate" | "validateField" | "resetFields" | "clearValidate" | "scrollToField" | "getField" | "fields" | "setInitialValues"> & import('vue').ShallowUnwrapRef<{
|
|
297
297
|
validate: (callback?: import('element-plus').FormValidateCallback) => import('element-plus').FormValidationResult;
|
|
298
298
|
validateField: (props?: import('element-plus/es/utils').Arrayable<import('element-plus').FormItemProp>, callback?: import('element-plus').FormValidateCallback) => import('element-plus').FormValidationResult;
|
|
299
299
|
resetFields: (props?: import('element-plus/es/utils').Arrayable<import('element-plus').FormItemProp>) => void;
|
|
@@ -327,16 +327,20 @@ declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {
|
|
|
327
327
|
}) => any) | undefined;
|
|
328
328
|
}>, {
|
|
329
329
|
size: import('element-plus').ComponentSize;
|
|
330
|
-
|
|
330
|
+
grid: import('./types').GridConfig;
|
|
331
|
+
inline: boolean;
|
|
331
332
|
labelPosition: "left" | "right" | "top";
|
|
332
|
-
|
|
333
|
+
labelWidth: string | number;
|
|
333
334
|
showTitle: boolean;
|
|
334
335
|
gutter: number;
|
|
335
336
|
defaultSpan: number;
|
|
336
337
|
responsive: boolean;
|
|
337
338
|
watchDeep: boolean;
|
|
339
|
+
showFooter: boolean;
|
|
340
|
+
footerClass: string;
|
|
338
341
|
submitText: string;
|
|
339
342
|
cancelText: string;
|
|
343
|
+
showCount: number;
|
|
340
344
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
341
345
|
formRef: ({
|
|
342
346
|
$: import('vue').ComponentInternalInstance;
|
|
@@ -423,7 +427,7 @@ declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {
|
|
|
423
427
|
validateOnRuleChange: boolean;
|
|
424
428
|
}> & Omit<Readonly<import('element-plus').FormProps> & Readonly<{
|
|
425
429
|
onValidate?: ((prop: import('element-plus').FormItemProp, isValid: boolean, message: string) => any) | undefined;
|
|
426
|
-
}>, "
|
|
430
|
+
}>, "labelPosition" | "requireAsteriskPosition" | "labelWidth" | "labelSuffix" | "showMessage" | "validateOnRuleChange" | "scrollIntoViewOptions" | "validate" | "validateField" | "resetFields" | "clearValidate" | "scrollToField" | "getField" | "fields" | "setInitialValues"> & import('vue').ShallowUnwrapRef<{
|
|
427
431
|
validate: (callback?: import('element-plus').FormValidateCallback) => import('element-plus').FormValidationResult;
|
|
428
432
|
validateField: (props?: import('element-plus/es/utils').Arrayable<import('element-plus').FormItemProp>, callback?: import('element-plus').FormValidateCallback) => import('element-plus').FormValidationResult;
|
|
429
433
|
resetFields: (props?: import('element-plus/es/utils').Arrayable<import('element-plus').FormItemProp>) => void;
|
|
@@ -59,10 +59,6 @@ const _hoisted_1 = {
|
|
|
59
59
|
key: 0,
|
|
60
60
|
class: "jky-form__title mb-4 text-xl font-semibold"
|
|
61
61
|
};
|
|
62
|
-
const _hoisted_2 = {
|
|
63
|
-
key: 1,
|
|
64
|
-
class: "jky-form__footer mt-6 flex justify-end gap-2"
|
|
65
|
-
};
|
|
66
62
|
const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValues({}, {
|
|
67
63
|
name: "JkyForm",
|
|
68
64
|
inheritAttrs: false
|
|
@@ -76,15 +72,18 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
|
|
|
76
72
|
gutter: { default: 0 },
|
|
77
73
|
defaultSpan: { default: 24 },
|
|
78
74
|
responsive: { type: Boolean, default: true },
|
|
75
|
+
grid: { type: [Boolean, Object], default: false },
|
|
79
76
|
className: {},
|
|
80
77
|
readonly: { type: Boolean },
|
|
81
78
|
disabled: { type: Boolean },
|
|
82
79
|
watchDeep: { type: Boolean, default: true },
|
|
83
|
-
showFooter: { type: Boolean, default:
|
|
80
|
+
showFooter: { type: Boolean, default: true },
|
|
81
|
+
footerClass: { default: "" },
|
|
84
82
|
submitText: { default: "提交" },
|
|
85
83
|
cancelText: { default: "取消" },
|
|
86
84
|
submitDisabled: { type: Boolean },
|
|
87
85
|
cancelDisabled: { type: Boolean },
|
|
86
|
+
showCount: { default: 999 },
|
|
88
87
|
onValidate: {},
|
|
89
88
|
onSubmit: {},
|
|
90
89
|
onReset: {},
|
|
@@ -94,7 +93,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
|
|
|
94
93
|
requireAsteriskPosition: {},
|
|
95
94
|
labelWidth: { default: "100" },
|
|
96
95
|
labelSuffix: {},
|
|
97
|
-
inline: { type: Boolean },
|
|
96
|
+
inline: { type: Boolean, default: false },
|
|
98
97
|
inlineMessage: { type: Boolean },
|
|
99
98
|
statusIcon: { type: Boolean },
|
|
100
99
|
showMessage: { type: Boolean },
|
|
@@ -112,57 +111,83 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
|
|
|
112
111
|
const props = __props;
|
|
113
112
|
const emit = __emit;
|
|
114
113
|
const modelValue = vue.useModel(__props, "modelValue");
|
|
114
|
+
vue.provide("formModel", modelValue);
|
|
115
115
|
const formRef = vue.ref();
|
|
116
|
+
const attrs = vue.useAttrs();
|
|
117
|
+
const JKY_FORM_PROPS = [
|
|
118
|
+
"modelValue",
|
|
119
|
+
"items",
|
|
120
|
+
"showTitle",
|
|
121
|
+
"title",
|
|
122
|
+
"gutter",
|
|
123
|
+
"defaultSpan",
|
|
124
|
+
"responsive",
|
|
125
|
+
"readonly",
|
|
126
|
+
"disabled",
|
|
127
|
+
"watchDeep",
|
|
128
|
+
"showFooter",
|
|
129
|
+
"footerClass",
|
|
130
|
+
"submitText",
|
|
131
|
+
"cancelText",
|
|
132
|
+
"submitDisabled",
|
|
133
|
+
"cancelDisabled",
|
|
134
|
+
"onValidate",
|
|
135
|
+
"onSubmit",
|
|
136
|
+
"onReset",
|
|
137
|
+
"className",
|
|
138
|
+
"grid",
|
|
139
|
+
"showCount"
|
|
140
|
+
];
|
|
141
|
+
const elFormProps = vue.computed(() => {
|
|
142
|
+
const formProps = Object.fromEntries(
|
|
143
|
+
Object.entries(props).filter(([key]) => !JKY_FORM_PROPS.includes(key))
|
|
144
|
+
);
|
|
145
|
+
const _a = attrs, { class: _, style } = _a, restAttrs = __objRest(_a, ["class", "style"]);
|
|
146
|
+
return __spreadValues(__spreadValues({}, formProps), restAttrs);
|
|
147
|
+
});
|
|
116
148
|
const formClass = vue.computed(() => {
|
|
117
149
|
return [
|
|
118
|
-
"jky-form"
|
|
150
|
+
"jky-form",
|
|
151
|
+
attrs.class
|
|
119
152
|
].filter(Boolean).join(" ");
|
|
120
153
|
});
|
|
121
|
-
const
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
"readonly",
|
|
152
|
-
"disabled",
|
|
153
|
-
"watchDeep",
|
|
154
|
-
"showFooter",
|
|
155
|
-
"submitText",
|
|
156
|
-
"cancelText",
|
|
157
|
-
"submitDisabled",
|
|
158
|
-
"cancelDisabled",
|
|
159
|
-
"onValidate",
|
|
160
|
-
"onSubmit",
|
|
161
|
-
"onReset"
|
|
162
|
-
]);
|
|
163
|
-
const _b = rest, { model } = _b, formProps = __objRest(_b, ["model"]);
|
|
164
|
-
return __spreadValues(__spreadValues({}, formProps), attrs);
|
|
154
|
+
const _elFormClass = vue.computed(() => {
|
|
155
|
+
const classes = [];
|
|
156
|
+
if (props.inline && props.grid) {
|
|
157
|
+
classes.push("jky-form--grid");
|
|
158
|
+
}
|
|
159
|
+
return classes;
|
|
160
|
+
});
|
|
161
|
+
const _gridStyle = vue.computed(() => {
|
|
162
|
+
if (!props.inline || !props.grid || typeof props.grid === "boolean") {
|
|
163
|
+
return {};
|
|
164
|
+
}
|
|
165
|
+
const style = {};
|
|
166
|
+
const breakpoints = ["xs", "sm", "md", "lg", "xl", "2xl", "3xl"];
|
|
167
|
+
breakpoints.forEach((breakpoint) => {
|
|
168
|
+
const columns = props.grid[breakpoint];
|
|
169
|
+
if (columns !== void 0) {
|
|
170
|
+
style[`--jky-form-grid-cols-${breakpoint}`] = columns;
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
return style;
|
|
174
|
+
});
|
|
175
|
+
const showAllItems = vue.ref(false);
|
|
176
|
+
const visibleItems = vue.computed(() => {
|
|
177
|
+
if (!props.items || props.items.length <= props.showCount) {
|
|
178
|
+
return props.items;
|
|
179
|
+
}
|
|
180
|
+
if (showAllItems.value) {
|
|
181
|
+
return props.items;
|
|
182
|
+
}
|
|
183
|
+
return props.items.slice(0, props.showCount);
|
|
165
184
|
});
|
|
185
|
+
const showMoreButton = vue.computed(() => {
|
|
186
|
+
return props.items && props.items.length > props.showCount;
|
|
187
|
+
});
|
|
188
|
+
function toggleShowMore() {
|
|
189
|
+
showAllItems.value = !showAllItems.value;
|
|
190
|
+
}
|
|
166
191
|
vue.watch(
|
|
167
192
|
() => props.modelValue,
|
|
168
193
|
(newVal, oldVal) => {
|
|
@@ -229,11 +254,14 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
|
|
|
229
254
|
__props.showTitle && __props.title ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1, vue.toDisplayString(__props.title), 1)) : vue.createCommentVNode("", true),
|
|
230
255
|
vue.createVNode(vue.unref(ElementPlus.ElForm), vue.mergeProps({
|
|
231
256
|
ref_key: "formRef",
|
|
232
|
-
ref: formRef
|
|
233
|
-
|
|
234
|
-
|
|
257
|
+
ref: formRef
|
|
258
|
+
}, elFormProps.value, {
|
|
259
|
+
model: modelValue.value,
|
|
260
|
+
class: _elFormClass.value,
|
|
261
|
+
style: _gridStyle.value
|
|
262
|
+
}), {
|
|
235
263
|
default: vue.withCtx(() => [
|
|
236
|
-
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(
|
|
264
|
+
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(visibleItems.value, (item) => {
|
|
237
265
|
return vue.openBlock(), vue.createBlock(FormItem_vue_vue_type_script_setup_true_lang.default, {
|
|
238
266
|
key: item.field,
|
|
239
267
|
field: item.field,
|
|
@@ -242,32 +270,54 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
|
|
|
242
270
|
readonly: __props.readonly,
|
|
243
271
|
disabled: __props.disabled
|
|
244
272
|
}, null, 8, ["field", "config", "model", "readonly", "disabled"]);
|
|
245
|
-
}), 128))
|
|
273
|
+
}), 128)),
|
|
274
|
+
showMoreButton.value || props.showFooter ? (vue.openBlock(), vue.createBlock(vue.unref(ElementPlus.ElFormItem), {
|
|
275
|
+
key: 0,
|
|
276
|
+
"label-width": 0
|
|
277
|
+
}, {
|
|
278
|
+
default: vue.withCtx(() => [
|
|
279
|
+
vue.createElementVNode("div", {
|
|
280
|
+
class: vue.normalizeClass(["w-full flex gap-2", [props.grid && props.inline ? "justify-center" : "justify-end", props.footerClass]])
|
|
281
|
+
}, [
|
|
282
|
+
showMoreButton.value ? (vue.openBlock(), vue.createBlock(vue.unref(ElementPlus.ElButton), {
|
|
283
|
+
key: 0,
|
|
284
|
+
type: "primary",
|
|
285
|
+
onClick: toggleShowMore
|
|
286
|
+
}, {
|
|
287
|
+
default: vue.withCtx(() => [
|
|
288
|
+
vue.createTextVNode(vue.toDisplayString(showAllItems.value ? "收起" : `展开 (${props.items.length - props.showCount})`), 1)
|
|
289
|
+
]),
|
|
290
|
+
_: 1
|
|
291
|
+
})) : vue.createCommentVNode("", true),
|
|
292
|
+
props.showFooter ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
|
|
293
|
+
vue.createVNode(vue.unref(ElementPlus.ElButton), {
|
|
294
|
+
disabled: __props.cancelDisabled || __props.disabled,
|
|
295
|
+
onClick: handleCancel
|
|
296
|
+
}, {
|
|
297
|
+
default: vue.withCtx(() => [
|
|
298
|
+
vue.createTextVNode(vue.toDisplayString(__props.cancelText), 1)
|
|
299
|
+
]),
|
|
300
|
+
_: 1
|
|
301
|
+
}, 8, ["disabled"]),
|
|
302
|
+
vue.createVNode(vue.unref(ElementPlus.ElButton), {
|
|
303
|
+
type: "primary",
|
|
304
|
+
disabled: __props.submitDisabled || __props.disabled,
|
|
305
|
+
loading: false,
|
|
306
|
+
onClick: handleSubmit
|
|
307
|
+
}, {
|
|
308
|
+
default: vue.withCtx(() => [
|
|
309
|
+
vue.createTextVNode(vue.toDisplayString(__props.submitText), 1)
|
|
310
|
+
]),
|
|
311
|
+
_: 1
|
|
312
|
+
}, 8, ["disabled"])
|
|
313
|
+
], 64)) : vue.createCommentVNode("", true)
|
|
314
|
+
], 2)
|
|
315
|
+
]),
|
|
316
|
+
_: 1
|
|
317
|
+
})) : vue.createCommentVNode("", true)
|
|
246
318
|
]),
|
|
247
319
|
_: 1
|
|
248
|
-
}, 16, ["model"])
|
|
249
|
-
props.showFooter ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2, [
|
|
250
|
-
vue.createVNode(vue.unref(ElementPlus.ElButton), {
|
|
251
|
-
disabled: __props.cancelDisabled || __props.disabled,
|
|
252
|
-
onClick: handleCancel
|
|
253
|
-
}, {
|
|
254
|
-
default: vue.withCtx(() => [
|
|
255
|
-
vue.createTextVNode(vue.toDisplayString(__props.cancelText), 1)
|
|
256
|
-
]),
|
|
257
|
-
_: 1
|
|
258
|
-
}, 8, ["disabled"]),
|
|
259
|
-
vue.createVNode(vue.unref(ElementPlus.ElButton), {
|
|
260
|
-
type: "primary",
|
|
261
|
-
disabled: __props.submitDisabled || __props.disabled,
|
|
262
|
-
loading: false,
|
|
263
|
-
onClick: handleSubmit
|
|
264
|
-
}, {
|
|
265
|
-
default: vue.withCtx(() => [
|
|
266
|
-
vue.createTextVNode(vue.toDisplayString(__props.submitText), 1)
|
|
267
|
-
]),
|
|
268
|
-
_: 1
|
|
269
|
-
}, 8, ["disabled"])
|
|
270
|
-
])) : vue.createCommentVNode("", true)
|
|
320
|
+
}, 16, ["model", "class", "style"])
|
|
271
321
|
], 2);
|
|
272
322
|
};
|
|
273
323
|
}
|
|
@@ -57,6 +57,8 @@ const ElementPlus = require("element-plus");
|
|
|
57
57
|
const index = require("../add-input/index.js");
|
|
58
58
|
const index$2 = require("../code-mirror-editor/index.js");
|
|
59
59
|
const index$1 = require("../rich-editor/index.js");
|
|
60
|
+
const SelectTable_vue_vue_type_script_setup_true_lang = require("./SelectTable.vue.js");
|
|
61
|
+
;/* empty css */
|
|
60
62
|
const _hoisted_1 = {
|
|
61
63
|
key: 0,
|
|
62
64
|
style: { "display": "none" }
|
|
@@ -211,7 +213,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
|
|
|
211
213
|
default: () => props.config.children || null
|
|
212
214
|
});
|
|
213
215
|
}
|
|
214
|
-
const commonProps = __spreadValues({
|
|
216
|
+
const commonProps = __spreadProps(__spreadValues({
|
|
215
217
|
// use `undefined` to fix placeholder issue
|
|
216
218
|
"modelValue": modelValue.value || void 0,
|
|
217
219
|
"onUpdate:modelValue": (val) => {
|
|
@@ -220,7 +222,9 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
|
|
|
220
222
|
"placeholder": props.config.placeholder || void 0,
|
|
221
223
|
"disabled": props.disabled,
|
|
222
224
|
"clearable": props.config.clearable
|
|
223
|
-
}, componentProps.value)
|
|
225
|
+
}, componentProps.value), {
|
|
226
|
+
"class": ["w-full min-w-25", componentProps.value.class]
|
|
227
|
+
});
|
|
224
228
|
switch (type) {
|
|
225
229
|
case "input":
|
|
226
230
|
return vue.h(ElementPlus.ElInput, __spreadProps(__spreadValues({}, commonProps), {
|
|
@@ -317,6 +321,54 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
|
|
|
317
321
|
}
|
|
318
322
|
case "color-picker":
|
|
319
323
|
return vue.h(ElementPlus.ElColorPicker, __spreadValues(__spreadValues({}, commonProps), componentProps.value));
|
|
324
|
+
// 颜色选择器面板
|
|
325
|
+
case "color-picker-panel":
|
|
326
|
+
return vue.h(ElementPlus.ElColorPickerPanel, __spreadValues(__spreadValues({}, commonProps), componentProps.value));
|
|
327
|
+
// 标签输入框
|
|
328
|
+
case "input-tag": {
|
|
329
|
+
const inputTagProps = __spreadValues(__spreadProps(__spreadValues({}, commonProps), {
|
|
330
|
+
"modelValue": modelValue.value || [],
|
|
331
|
+
"onUpdate:modelValue": (val) => {
|
|
332
|
+
props.model[props.field] = val;
|
|
333
|
+
}
|
|
334
|
+
}), componentProps.value);
|
|
335
|
+
return vue.h(ElementPlus.ElInputTag, inputTagProps);
|
|
336
|
+
}
|
|
337
|
+
// 提及组件
|
|
338
|
+
case "mention": {
|
|
339
|
+
const mentionProps = __spreadValues(__spreadProps(__spreadValues({}, commonProps), {
|
|
340
|
+
"modelValue": modelValue.value || "",
|
|
341
|
+
"onUpdate:modelValue": (val) => {
|
|
342
|
+
props.model[props.field] = val;
|
|
343
|
+
}
|
|
344
|
+
}), componentProps.value);
|
|
345
|
+
return vue.h(ElementPlus.ElMention, mentionProps);
|
|
346
|
+
}
|
|
347
|
+
// 虚拟化选择器
|
|
348
|
+
case "select-v2": {
|
|
349
|
+
const selectV2Props = __spreadValues(__spreadProps(__spreadValues({}, commonProps), {
|
|
350
|
+
"modelValue": modelValue.value,
|
|
351
|
+
"onUpdate:modelValue": (val) => {
|
|
352
|
+
props.model[props.field] = val;
|
|
353
|
+
},
|
|
354
|
+
"options": componentProps.value.options || []
|
|
355
|
+
}), componentProps.value);
|
|
356
|
+
return vue.h(ElementPlus.ElSelectV2, selectV2Props);
|
|
357
|
+
}
|
|
358
|
+
// 穿梭框
|
|
359
|
+
case "transfer": {
|
|
360
|
+
const transferProps = __spreadValues(__spreadProps(__spreadValues({}, commonProps), {
|
|
361
|
+
"modelValue": modelValue.value || [],
|
|
362
|
+
"onUpdate:modelValue": (val) => {
|
|
363
|
+
props.model[props.field] = val;
|
|
364
|
+
},
|
|
365
|
+
"data": componentProps.value.data || []
|
|
366
|
+
}), componentProps.value);
|
|
367
|
+
return vue.h(ElementPlus.ElTransfer, transferProps);
|
|
368
|
+
}
|
|
369
|
+
// 表格选择器
|
|
370
|
+
case "select-table":
|
|
371
|
+
return vue.h(SelectTable_vue_vue_type_script_setup_true_lang.default, __spreadValues(__spreadValues({}, commonProps), componentProps.value));
|
|
320
372
|
case "rate":
|
|
321
373
|
return vue.h(ElementPlus.ElRate, __spreadValues(__spreadValues({}, commonProps), componentProps.value));
|
|
322
374
|
case "input-number": {
|