@tmagic/form 1.7.7 → 1.7.8-beta.1
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/LICENSE +235 -164
- package/dist/es/Form.js +5 -0
- package/dist/es/Form.vue_vue_type_script_setup_true_lang.js +234 -0
- package/dist/es/FormBox.js +5 -0
- package/dist/es/FormBox.vue_vue_type_script_setup_true_lang.js +117 -0
- package/dist/es/FormDialog.js +5 -0
- package/dist/es/FormDialog.vue_vue_type_script_setup_true_lang.js +222 -0
- package/dist/es/FormDrawer.js +5 -0
- package/dist/es/FormDrawer.vue_vue_type_script_setup_true_lang.js +176 -0
- package/dist/es/_virtual/_rolldown/runtime.js +27 -0
- package/dist/es/containers/Col.js +5 -0
- package/dist/es/containers/Col.vue_vue_type_script_setup_true_lang.js +60 -0
- package/dist/es/containers/Container.js +5 -0
- package/dist/es/containers/Container.vue_vue_type_script_setup_true_lang.js +439 -0
- package/dist/es/containers/Fieldset.js +5 -0
- package/dist/es/containers/Fieldset.vue_vue_type_script_setup_true_lang.js +153 -0
- package/dist/es/containers/FlexLayout.js +5 -0
- package/dist/es/containers/FlexLayout.vue_vue_type_script_setup_true_lang.js +64 -0
- package/dist/es/containers/FormLabel.js +5 -0
- package/dist/es/containers/FormLabel.vue_vue_type_script_setup_true_lang.js +51 -0
- package/dist/es/containers/GroupList.js +5 -0
- package/dist/es/containers/GroupList.vue_vue_type_script_setup_true_lang.js +164 -0
- package/dist/es/containers/GroupListItem.js +5 -0
- package/dist/es/containers/GroupListItem.vue_vue_type_script_setup_true_lang.js +221 -0
- package/dist/es/containers/Panel.js +5 -0
- package/dist/es/containers/Panel.vue_vue_type_script_setup_true_lang.js +130 -0
- package/dist/es/containers/Row.js +5 -0
- package/dist/es/containers/Row.vue_vue_type_script_setup_true_lang.js +65 -0
- package/dist/es/containers/Step.js +5 -0
- package/dist/es/containers/Step.vue_vue_type_script_setup_true_lang.js +85 -0
- package/dist/es/containers/Tabs.js +5 -0
- package/dist/es/containers/Tabs.vue_vue_type_script_setup_true_lang.js +194 -0
- package/dist/es/fields/Cascader.js +5 -0
- package/dist/es/fields/Cascader.vue_vue_type_script_setup_true_lang.js +123 -0
- package/dist/es/fields/Checkbox.js +5 -0
- package/dist/es/fields/Checkbox.vue_vue_type_script_setup_true_lang.js +61 -0
- package/dist/es/fields/CheckboxGroup.js +5 -0
- package/dist/es/fields/CheckboxGroup.vue_vue_type_script_setup_true_lang.js +63 -0
- package/dist/es/fields/ColorPicker.js +5 -0
- package/dist/es/fields/ColorPicker.vue_vue_type_script_setup_true_lang.js +42 -0
- package/dist/es/fields/Date.js +5 -0
- package/dist/es/fields/Date.vue_vue_type_script_setup_true_lang.js +52 -0
- package/dist/es/fields/DateTime.js +5 -0
- package/dist/es/fields/DateTime.vue_vue_type_script_setup_true_lang.js +57 -0
- package/dist/es/fields/Daterange.js +5 -0
- package/dist/es/fields/Daterange.vue_vue_type_script_setup_true_lang.js +99 -0
- package/dist/es/fields/Display.js +5 -0
- package/dist/es/fields/Display.vue_vue_type_script_setup_true_lang.js +36 -0
- package/dist/es/fields/DynamicField.js +5 -0
- package/dist/es/fields/DynamicField.vue_vue_type_script_setup_true_lang.js +91 -0
- package/dist/es/fields/Hidden.js +5 -0
- package/dist/es/fields/Hidden.vue_vue_type_script_setup_true_lang.js +24 -0
- package/dist/es/fields/Link.js +5 -0
- package/dist/es/fields/Link.vue_vue_type_script_setup_true_lang.js +104 -0
- package/dist/es/fields/Number.js +5 -0
- package/dist/es/fields/Number.vue_vue_type_script_setup_true_lang.js +65 -0
- package/dist/es/fields/NumberRange.js +5 -0
- package/dist/es/fields/NumberRange.vue_vue_type_script_setup_true_lang.js +76 -0
- package/dist/es/fields/RadioGroup.js +5 -0
- package/dist/es/fields/RadioGroup.vue_vue_type_script_setup_true_lang.js +74 -0
- package/dist/es/fields/Select.js +5 -0
- package/dist/es/fields/Select.vue_vue_type_script_setup_true_lang.js +337 -0
- package/dist/es/fields/Switch.js +5 -0
- package/dist/es/fields/Switch.vue_vue_type_script_setup_true_lang.js +59 -0
- package/dist/es/fields/Text.js +5 -0
- package/dist/es/fields/Text.vue_vue_type_script_setup_true_lang.js +215 -0
- package/dist/es/fields/Textarea.js +5 -0
- package/dist/es/fields/Textarea.vue_vue_type_script_setup_true_lang.js +60 -0
- package/dist/es/fields/Time.js +5 -0
- package/dist/es/fields/Time.vue_vue_type_script_setup_true_lang.js +49 -0
- package/dist/es/fields/Timerange.js +5 -0
- package/dist/es/fields/Timerange.vue_vue_type_script_setup_true_lang.js +100 -0
- package/dist/es/index.js +41 -0
- package/dist/es/plugin.js +74 -0
- package/dist/es/schema.js +2 -0
- package/dist/es/style.css +325 -0
- package/dist/es/table/ActionsColumn.js +5 -0
- package/dist/es/table/ActionsColumn.vue_vue_type_script_setup_true_lang.js +107 -0
- package/dist/es/table/SortColumn.js +5 -0
- package/dist/es/table/SortColumn.vue_vue_type_script_setup_true_lang.js +88 -0
- package/dist/es/table/Table.js +5 -0
- package/dist/es/table/Table.vue_vue_type_script_setup_true_lang.js +232 -0
- package/dist/es/table/useAdd.js +71 -0
- package/dist/es/table/useFullscreen.js +15 -0
- package/dist/es/table/useImport.js +46 -0
- package/dist/es/table/usePagination.js +26 -0
- package/dist/es/table/useSelection.js +26 -0
- package/dist/es/table/useSortable.js +39 -0
- package/dist/es/table/useTableColumns.js +160 -0
- package/dist/es/utils/config.js +15 -0
- package/dist/es/utils/form.js +173 -0
- package/dist/es/utils/useAddField.js +13 -0
- package/dist/style.css +1 -1
- package/dist/tmagic-form.umd.cjs +7693 -8924
- package/package.json +7 -6
- package/src/containers/Container.vue +16 -10
- package/src/fields/Hidden.vue +6 -2
- package/src/index.ts +8 -82
- package/src/plugin.ts +102 -0
- package/src/table/useSortable.ts +8 -4
- package/src/utils/config.ts +16 -1
- package/types/index.d.ts +1264 -1226
- package/dist/tmagic-form.js +0 -5940
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { readonly } from "vue";
|
|
2
|
+
import dayjs from "dayjs";
|
|
3
|
+
import utc from "dayjs/plugin/utc";
|
|
4
|
+
import { cloneDeep } from "lodash-es";
|
|
5
|
+
import { getValueByKeyPath } from "@tmagic/utils";
|
|
6
|
+
//#region packages/form/src/utils/form.ts
|
|
7
|
+
var TABLE_SELECT_TYPES = new Set(["table-select", "tableSelect"]);
|
|
8
|
+
var isTableSelect = (type) => typeof type === "string" && TABLE_SELECT_TYPES.has(type);
|
|
9
|
+
var asyncLoadConfig = (value, initValue, { asyncLoad, name, type }) => {
|
|
10
|
+
if (type === "html" && typeof asyncLoad === "object" && typeof name !== "undefined") {
|
|
11
|
+
asyncLoad.name = name;
|
|
12
|
+
value.asyncLoad = typeof initValue.asyncLoad === "object" ? initValue.asyncLoad : asyncLoad;
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
var MULTIPLE_VALUE_TYPES = new Set([
|
|
16
|
+
"checkbox-group",
|
|
17
|
+
"checkboxGroup",
|
|
18
|
+
"table",
|
|
19
|
+
"cascader",
|
|
20
|
+
"group-list",
|
|
21
|
+
"groupList"
|
|
22
|
+
]);
|
|
23
|
+
var isMultipleValue = (type) => typeof type === "string" && MULTIPLE_VALUE_TYPES.has(type);
|
|
24
|
+
var initItemsValue = (mForm, value, initValue, { items, name, extensible }) => {
|
|
25
|
+
if (Array.isArray(initValue[name])) value[name] = initValue[name].map((v, index) => createValues(mForm, items, v, value[name]?.[index]));
|
|
26
|
+
else {
|
|
27
|
+
value[name] = createValues(mForm, items, initValue[name], value[name]);
|
|
28
|
+
if (extensible) value[name] = Object.assign({}, initValue[name], value[name]);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
var setValue = (mForm, value, initValue, item) => {
|
|
32
|
+
const { items, name, type, checkbox } = item;
|
|
33
|
+
if (isMultipleValue(type) || type === "tab" && item.dynamic) value[name] = initValue[name] || [];
|
|
34
|
+
if (items) initItemsValue(mForm, value, initValue, item);
|
|
35
|
+
else value[name] = getDefaultValue(mForm, item);
|
|
36
|
+
if (type === "fieldset" && checkbox) {
|
|
37
|
+
const checkboxName = typeof checkbox === "object" && typeof checkbox.name === "string" ? checkbox.name : "value";
|
|
38
|
+
const checkboxFalseValue = typeof checkbox === "object" && typeof checkbox.falseValue !== "undefined" ? checkbox.falseValue : 0;
|
|
39
|
+
if (name && typeof value[name] === "object") value[name][checkboxName] = typeof initValue[name] === "object" ? initValue[name][checkboxName] || checkboxFalseValue : checkboxFalseValue;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
var initValueItem = function(mForm, item, initValue, value) {
|
|
43
|
+
const { items } = item;
|
|
44
|
+
const { names } = item;
|
|
45
|
+
const { type, name } = item;
|
|
46
|
+
if (isTableSelect(type) && name) {
|
|
47
|
+
value[name] = initValue[name] ?? "";
|
|
48
|
+
return value;
|
|
49
|
+
}
|
|
50
|
+
asyncLoadConfig(value, initValue, item);
|
|
51
|
+
if (name && !items && typeof initValue?.[name] !== "undefined") {
|
|
52
|
+
if (typeof value[name] === "undefined") value[name] = type === "number" ? Number(initValue[name]) : initValue[name];
|
|
53
|
+
return value;
|
|
54
|
+
}
|
|
55
|
+
if (names) return names.forEach((n) => value[n] = initValue[n] ?? "");
|
|
56
|
+
if (!name) return createValues(mForm, items, initValue, value);
|
|
57
|
+
setValue(mForm, value, initValue, item);
|
|
58
|
+
if (type === "table") {
|
|
59
|
+
if (item.defautSort) sortChange(value[name], item.defautSort);
|
|
60
|
+
else if (item.defaultSort) sortChange(value[name], item.defaultSort);
|
|
61
|
+
if (item.sort && item.sortKey) value[name].sort((a, b) => b[item.sortKey] - a[item.sortKey]);
|
|
62
|
+
}
|
|
63
|
+
return value;
|
|
64
|
+
};
|
|
65
|
+
var createValues = function(mForm, config = [], initValue = {}, value = {}) {
|
|
66
|
+
if (Array.isArray(config)) config.forEach((item) => {
|
|
67
|
+
initValueItem(mForm, item, initValue, value);
|
|
68
|
+
});
|
|
69
|
+
return value;
|
|
70
|
+
};
|
|
71
|
+
var getDefaultValue = function(mForm, { defaultValue, type, filter, multiple, names }) {
|
|
72
|
+
if (typeof defaultValue === "function") return defaultValue(mForm);
|
|
73
|
+
if (defaultValue === "undefined") return;
|
|
74
|
+
if (typeof defaultValue !== "undefined") return defaultValue;
|
|
75
|
+
if (type === "number" || filter === "number") return 0;
|
|
76
|
+
if (["switch", "checkbox"].includes(type)) return false;
|
|
77
|
+
if (multiple || type === "number-range") return [];
|
|
78
|
+
if (type === "daterange" && !names) return [];
|
|
79
|
+
return "";
|
|
80
|
+
};
|
|
81
|
+
var filterFunction = (mForm, config, props) => {
|
|
82
|
+
if (typeof config === "function") return config(mForm, {
|
|
83
|
+
values: readonly(mForm?.initValues || {}),
|
|
84
|
+
model: readonly(props.model),
|
|
85
|
+
parent: readonly(mForm?.parentValues || {}),
|
|
86
|
+
formValue: readonly(mForm?.values || props.model),
|
|
87
|
+
prop: props.prop,
|
|
88
|
+
config: props.config,
|
|
89
|
+
index: props.index,
|
|
90
|
+
getFormValue: (prop) => getValueByKeyPath(prop, mForm?.values || props.model)
|
|
91
|
+
});
|
|
92
|
+
return config;
|
|
93
|
+
};
|
|
94
|
+
var display = function(mForm, config, props) {
|
|
95
|
+
if (config === "expand") return config;
|
|
96
|
+
if (typeof config === "function") return filterFunction(mForm, config, props);
|
|
97
|
+
if (config === false) return false;
|
|
98
|
+
return true;
|
|
99
|
+
};
|
|
100
|
+
var getRules = function(mForm, rules = [], props) {
|
|
101
|
+
rules = cloneDeep(rules);
|
|
102
|
+
if (typeof rules === "object" && !Array.isArray(rules)) rules = [rules];
|
|
103
|
+
return rules.map((item) => {
|
|
104
|
+
if (typeof item.validator === "function") {
|
|
105
|
+
const fnc = item.validator;
|
|
106
|
+
item.validator = (rule, value, callback, source, options) => fnc({
|
|
107
|
+
rule,
|
|
108
|
+
value: props.config.names ? props.model : value,
|
|
109
|
+
callback,
|
|
110
|
+
source,
|
|
111
|
+
options
|
|
112
|
+
}, {
|
|
113
|
+
values: mForm?.initValues || {},
|
|
114
|
+
model: props.model,
|
|
115
|
+
parent: mForm?.parentValues || {},
|
|
116
|
+
formValue: mForm?.values || props.model,
|
|
117
|
+
prop: props.prop,
|
|
118
|
+
config: props.config
|
|
119
|
+
}, mForm);
|
|
120
|
+
}
|
|
121
|
+
return item;
|
|
122
|
+
});
|
|
123
|
+
};
|
|
124
|
+
var initValue = async (mForm, { initValues, config }) => {
|
|
125
|
+
if (!Array.isArray(config)) throw new Error("config应该为数组");
|
|
126
|
+
const initValuesCopy = cloneDeep(initValues);
|
|
127
|
+
let valuesTmp = createValues(mForm, config, initValuesCopy, {});
|
|
128
|
+
const [firstForm] = config;
|
|
129
|
+
if (firstForm && typeof firstForm.onInitValue === "function") valuesTmp = await firstForm.onInitValue(mForm, {
|
|
130
|
+
formValue: valuesTmp,
|
|
131
|
+
initValue: initValuesCopy
|
|
132
|
+
});
|
|
133
|
+
return valuesTmp || {};
|
|
134
|
+
};
|
|
135
|
+
var datetimeFormatter = (v, defaultValue = "-", format = "YYYY-MM-DD HH:mm:ss") => {
|
|
136
|
+
if (v) {
|
|
137
|
+
let time;
|
|
138
|
+
if (["x", "timestamp"].includes(format)) time = dayjs(Number.isNaN(Number(v)) ? v : Number(v)).valueOf();
|
|
139
|
+
else if (typeof v === "string" && v.includes("Z") || v instanceof Date) {
|
|
140
|
+
dayjs.extend(utc);
|
|
141
|
+
time = dayjs(v).utcOffset(8).format(format);
|
|
142
|
+
} else time = dayjs(v).format(format);
|
|
143
|
+
if (time !== "Invalid Date") return time;
|
|
144
|
+
return defaultValue;
|
|
145
|
+
}
|
|
146
|
+
return defaultValue;
|
|
147
|
+
};
|
|
148
|
+
var getDataByPage = (data = [], pagecontext, pagesize) => {
|
|
149
|
+
const start = pagecontext * pagesize;
|
|
150
|
+
return data.slice(start, start + pagesize);
|
|
151
|
+
};
|
|
152
|
+
var sortArray = (data, newIndex, oldIndex, sortKey) => {
|
|
153
|
+
if (newIndex === oldIndex) return data;
|
|
154
|
+
if (newIndex < 0 || newIndex >= data.length || oldIndex < 0 || oldIndex >= data.length) return data;
|
|
155
|
+
const item = data[oldIndex];
|
|
156
|
+
const newData = data.toSpliced(oldIndex, 1).toSpliced(newIndex, 0, item);
|
|
157
|
+
if (sortKey) for (let i = newData.length - 1, v = 0; i >= 0; i--, v++) newData[v][sortKey] = i;
|
|
158
|
+
return cloneDeep(newData);
|
|
159
|
+
};
|
|
160
|
+
var sortChange = (data, { prop, order }) => {
|
|
161
|
+
if (order === "ascending") data.sort((a, b) => a[prop] - b[prop]);
|
|
162
|
+
else if (order === "descending") data.sort((a, b) => b[prop] - a[prop]);
|
|
163
|
+
};
|
|
164
|
+
var createObjectProp = (prop, key, name) => {
|
|
165
|
+
if (prop === "") return key;
|
|
166
|
+
const itemPath = `${prop}`.split(".");
|
|
167
|
+
if (name) {
|
|
168
|
+
if (`${itemPath[itemPath.length - 1]}` === `${name}`) return `${[...itemPath.slice(0, -1), key].join(".")}`;
|
|
169
|
+
}
|
|
170
|
+
return `${[...itemPath, key].join(".")}`;
|
|
171
|
+
};
|
|
172
|
+
//#endregion
|
|
173
|
+
export { createObjectProp, createValues, datetimeFormatter, display, filterFunction, getDataByPage, getRules, initValue, sortArray, sortChange };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { getCurrentInstance, inject, watch } from "vue";
|
|
2
|
+
//#region packages/form/src/utils/useAddField.ts
|
|
3
|
+
var useAddField = (prop) => {
|
|
4
|
+
if (!prop) return;
|
|
5
|
+
const mForm = inject("mForm");
|
|
6
|
+
const instance = getCurrentInstance();
|
|
7
|
+
watch(() => instance?.proxy, (vm) => {
|
|
8
|
+
if (vm) mForm?.setField(prop, vm);
|
|
9
|
+
else mForm?.deleteField(prop);
|
|
10
|
+
}, { immediate: true });
|
|
11
|
+
};
|
|
12
|
+
//#endregion
|
|
13
|
+
export { useAddField };
|
package/dist/style.css
CHANGED