@lambo-design/shared 1.0.0-beta.247 → 1.0.0-beta.249
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/package.json +1 -1
- package/utils/platform.js +24 -3
- package/utils/vForm.js +349 -0
package/package.json
CHANGED
package/utils/platform.js
CHANGED
|
@@ -5,11 +5,32 @@ import systemLogo from '../styles/image/inspur.png';
|
|
|
5
5
|
import {changeByThemeKey, changeThemeByThemeId} from "./theme";
|
|
6
6
|
import ajax from "./ajax";
|
|
7
7
|
|
|
8
|
-
export
|
|
8
|
+
export let TOKEN_KEY = "lambo-token"
|
|
9
9
|
|
|
10
|
-
export
|
|
10
|
+
export let getTokenKey = function () {
|
|
11
|
+
if (config.tokenKey) {
|
|
12
|
+
return config.tokenKey
|
|
13
|
+
}
|
|
14
|
+
return "lambo-token"
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export let COOKIE_KEY = "lambo-sso-key"
|
|
11
18
|
|
|
12
|
-
export
|
|
19
|
+
export let getCookieKey = function () {
|
|
20
|
+
if (config.cookieKey) {
|
|
21
|
+
return config.cookieKey
|
|
22
|
+
}
|
|
23
|
+
return "lambo-sso-key"
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export let SSO_TOKEN_KEY = "lambo-sso-token"
|
|
27
|
+
|
|
28
|
+
export let getSsoTokenKey = function () {
|
|
29
|
+
if (config.ssoTokenKey) {
|
|
30
|
+
return config.ssoTokenKey
|
|
31
|
+
}
|
|
32
|
+
return "lambo-sso-token"
|
|
33
|
+
}
|
|
13
34
|
|
|
14
35
|
export function objEqual(obj1, obj2) {
|
|
15
36
|
const keysArr1 = Object.keys(obj1)
|
package/utils/vForm.js
ADDED
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
export function isNull(value) {
|
|
2
|
+
return (value === null) || (value === undefined);
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
export function isNotNull(value) {
|
|
6
|
+
return (value !== null) && (value !== undefined);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function isEmptyStr(str) {
|
|
10
|
+
//return (str === undefined) || (!str) || (!/[^\s]/.test(str));
|
|
11
|
+
return (str === undefined) || (!str && (str !== 0) && (str !== '0')) || (!/[^\s]/.test(str));
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const generateId = function() {
|
|
15
|
+
return Math.floor(Math.random() * 100000 + Math.random() * 20000 + Math.random() * 5000);
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export const deepClone = function (origin) {
|
|
19
|
+
if (origin === undefined) {
|
|
20
|
+
return undefined
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return JSON.parse(JSON.stringify(origin))
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export const overwriteObj = function(obj1, obj2) {
|
|
27
|
+
Object.keys(obj2).forEach(prop => {
|
|
28
|
+
obj1[prop] = obj2[prop]
|
|
29
|
+
})
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/* 用Function对象实现eval函数功能 */
|
|
33
|
+
export const evalFn = function (fn, DSV = null, VFR = null) {
|
|
34
|
+
let f = new Function('DSV', 'VFR', 'return ' + fn);
|
|
35
|
+
return f(DSV, VFR);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export const addWindowResizeHandler = function (handler) {
|
|
39
|
+
let oldHandler = window.onresize
|
|
40
|
+
if (typeof window.onresize != 'function') {
|
|
41
|
+
window.onresize = handler
|
|
42
|
+
} else {
|
|
43
|
+
window.onresize = function () {
|
|
44
|
+
oldHandler()
|
|
45
|
+
handler()
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const createStyleSheet = function() {
|
|
51
|
+
let head = document.head || document.getElementsByTagName('head')[0];
|
|
52
|
+
let style = document.createElement('style');
|
|
53
|
+
style.type = 'text/css';
|
|
54
|
+
head.appendChild(style);
|
|
55
|
+
return style.sheet;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export const insertCustomCssToHead = function (cssCode, formId = '') {
|
|
59
|
+
let head = document.getElementsByTagName('head')[0]
|
|
60
|
+
let oldStyle = document.getElementById('vform-custom-css')
|
|
61
|
+
if (!!oldStyle) {
|
|
62
|
+
head.removeChild(oldStyle) //先清除后插入!!
|
|
63
|
+
}
|
|
64
|
+
if (!!formId) {
|
|
65
|
+
oldStyle = document.getElementById('vform-custom-css' + '-' + formId)
|
|
66
|
+
!!oldStyle && head.removeChild(oldStyle) //先清除后插入!!
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
let newStyle = document.createElement('style')
|
|
70
|
+
newStyle.type = 'text/css'
|
|
71
|
+
newStyle.rel = 'stylesheet'
|
|
72
|
+
newStyle.id = !!formId ? 'vform-custom-css' + '-' + formId : 'vform-custom-css'
|
|
73
|
+
try {
|
|
74
|
+
newStyle.appendChild(document.createTextNode(cssCode))
|
|
75
|
+
} catch(ex) {
|
|
76
|
+
newStyle.styleSheet.cssText = cssCode
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
head.appendChild(newStyle)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export const insertGlobalFunctionsToHtml = function (functionsCode, formId = '') {
|
|
83
|
+
let bodyEle = document.getElementsByTagName('body')[0]
|
|
84
|
+
let oldScriptEle = document.getElementById('v_form_global_functions')
|
|
85
|
+
!!oldScriptEle && bodyEle.removeChild(oldScriptEle) //先清除后插入!!
|
|
86
|
+
if (!!formId) {
|
|
87
|
+
oldScriptEle = document.getElementById('v_form_global_functions' + '-' + formId)
|
|
88
|
+
!!oldScriptEle && bodyEle.removeChild(oldScriptEle) //先清除后插入!!
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
let newScriptEle = document.createElement('script')
|
|
92
|
+
newScriptEle.id = !!formId ? 'v_form_global_functions' + '-' + formId : 'v_form_global_functions'
|
|
93
|
+
newScriptEle.type = 'text/javascript'
|
|
94
|
+
newScriptEle.innerHTML = functionsCode
|
|
95
|
+
bodyEle.appendChild(newScriptEle)
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export const optionExists = function(optionsObj, optionName) {
|
|
99
|
+
if (!optionsObj) {
|
|
100
|
+
return false
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return Object.keys(optionsObj).indexOf(optionName) > -1
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export const loadRemoteScript = function(srcPath, callback) { /*加载远程js,加载成功后执行回调函数*/
|
|
107
|
+
let sid = encodeURIComponent(srcPath)
|
|
108
|
+
let oldScriptEle = document.getElementById(sid)
|
|
109
|
+
|
|
110
|
+
if (!oldScriptEle) {
|
|
111
|
+
let s = document.createElement('script')
|
|
112
|
+
s.src = srcPath
|
|
113
|
+
s.id = sid
|
|
114
|
+
document.body.appendChild(s)
|
|
115
|
+
|
|
116
|
+
s.onload = s.onreadystatechange = function (_, isAbort) { /* 借鉴自ace.js */
|
|
117
|
+
if (isAbort || !s.readyState || s.readyState === "loaded" || s.readyState === "complete") {
|
|
118
|
+
s = s.onload = s.onreadystatechange = null
|
|
119
|
+
if (!isAbort) {
|
|
120
|
+
callback()
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export function traverseFieldWidgets(widgetList, handler, parent = null) {
|
|
128
|
+
if (!widgetList) {
|
|
129
|
+
return
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
widgetList.forEach(w => {
|
|
133
|
+
if (w.formItemFlag) {
|
|
134
|
+
handler(w, parent)
|
|
135
|
+
} else if (w.type === 'grid') {
|
|
136
|
+
w.cols.forEach(col => {
|
|
137
|
+
traverseFieldWidgets(col.widgetList, handler, w)
|
|
138
|
+
})
|
|
139
|
+
} else if (w.type === 'table') {
|
|
140
|
+
w.rows.forEach(row => {
|
|
141
|
+
row.cols.forEach(cell => {
|
|
142
|
+
traverseFieldWidgets(cell.widgetList, handler, w)
|
|
143
|
+
})
|
|
144
|
+
})
|
|
145
|
+
} else if (w.type === 'tab') {
|
|
146
|
+
w.tabs.forEach(tab => {
|
|
147
|
+
traverseFieldWidgets(tab.widgetList, handler, w)
|
|
148
|
+
})
|
|
149
|
+
} else if (w.category === 'container') { //自定义容器
|
|
150
|
+
traverseFieldWidgets(w.widgetList, handler, w)
|
|
151
|
+
}
|
|
152
|
+
})
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export function traverseContainerWidgets(widgetList, handler) {
|
|
156
|
+
if (!widgetList) {
|
|
157
|
+
return
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
widgetList.forEach(w => {
|
|
161
|
+
if (w.category === 'container') {
|
|
162
|
+
handler(w)
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
if (w.type === 'grid') {
|
|
166
|
+
w.cols.forEach(col => {
|
|
167
|
+
traverseContainerWidgets(col.widgetList, handler)
|
|
168
|
+
})
|
|
169
|
+
} else if (w.type === 'table') {
|
|
170
|
+
w.rows.forEach(row => {
|
|
171
|
+
row.cols.forEach(cell => {
|
|
172
|
+
traverseContainerWidgets(cell.widgetList, handler)
|
|
173
|
+
})
|
|
174
|
+
})
|
|
175
|
+
} else if (w.type === 'tab') {
|
|
176
|
+
w.tabs.forEach(tab => {
|
|
177
|
+
traverseContainerWidgets(tab.widgetList, handler)
|
|
178
|
+
})
|
|
179
|
+
} else if (w.category === 'container') { //自定义容器
|
|
180
|
+
traverseContainerWidgets(w.widgetList, handler)
|
|
181
|
+
}
|
|
182
|
+
})
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
export function traverseAllWidgets(widgetList, handler) {
|
|
186
|
+
if (!widgetList) {
|
|
187
|
+
return
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
widgetList.forEach(w => {
|
|
191
|
+
handler(w)
|
|
192
|
+
|
|
193
|
+
if (w.type === 'grid') {
|
|
194
|
+
w.cols.forEach(col => {
|
|
195
|
+
handler(col)
|
|
196
|
+
traverseAllWidgets(col.widgetList, handler)
|
|
197
|
+
})
|
|
198
|
+
} else if (w.type === 'table') {
|
|
199
|
+
w.rows.forEach(row => {
|
|
200
|
+
row.cols.forEach(cell => {
|
|
201
|
+
handler(cell)
|
|
202
|
+
traverseAllWidgets(cell.widgetList, handler)
|
|
203
|
+
})
|
|
204
|
+
})
|
|
205
|
+
} else if (w.type === 'tab') {
|
|
206
|
+
w.tabs.forEach(tab => {
|
|
207
|
+
traverseAllWidgets(tab.widgetList, handler)
|
|
208
|
+
})
|
|
209
|
+
} else if (w.type === 'sub-form') {
|
|
210
|
+
traverseAllWidgets(w.widgetList, handler)
|
|
211
|
+
} else if (w.category === 'container') { //自定义容器
|
|
212
|
+
traverseAllWidgets(w.widgetList, handler)
|
|
213
|
+
}
|
|
214
|
+
})
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
function handleWidgetForTraverse(widget, handler) {
|
|
218
|
+
if (!!widget.category) {
|
|
219
|
+
traverseFieldWidgetsOfContainer(widget, handler)
|
|
220
|
+
} else if (widget.formItemFlag) {
|
|
221
|
+
handler(widget)
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* 遍历容器内的字段组件
|
|
227
|
+
* @param con
|
|
228
|
+
* @param handler
|
|
229
|
+
*/
|
|
230
|
+
export function traverseFieldWidgetsOfContainer(con, handler) {
|
|
231
|
+
if (con.type === 'grid') {
|
|
232
|
+
con.cols.forEach(col => {
|
|
233
|
+
col.widgetList.forEach(cw => {
|
|
234
|
+
handleWidgetForTraverse(cw, handler)
|
|
235
|
+
})
|
|
236
|
+
})
|
|
237
|
+
} else if (con.type === 'table') {
|
|
238
|
+
con.rows.forEach(row => {
|
|
239
|
+
row.cols.forEach(cell => {
|
|
240
|
+
cell.widgetList.forEach(cw => {
|
|
241
|
+
handleWidgetForTraverse(cw, handler)
|
|
242
|
+
})
|
|
243
|
+
})
|
|
244
|
+
})
|
|
245
|
+
} else if (con.type === 'tab') {
|
|
246
|
+
con.tabs.forEach(tab => {
|
|
247
|
+
tab.widgetList.forEach(cw => {
|
|
248
|
+
handleWidgetForTraverse(cw, handler)
|
|
249
|
+
})
|
|
250
|
+
})
|
|
251
|
+
} else if (con.type === 'sub-form') {
|
|
252
|
+
con.widgetList.forEach(cw => {
|
|
253
|
+
handleWidgetForTraverse(cw, handler)
|
|
254
|
+
})
|
|
255
|
+
} else if (con.category === 'container') { //自定义容器
|
|
256
|
+
con.widgetList.forEach(cw => {
|
|
257
|
+
handleWidgetForTraverse(cw, handler)
|
|
258
|
+
})
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* 获取所有字段组件
|
|
264
|
+
* @param widgetList
|
|
265
|
+
* @returns {[]}
|
|
266
|
+
*/
|
|
267
|
+
export function getAllFieldWidgets(widgetList) {
|
|
268
|
+
if (!widgetList) {
|
|
269
|
+
return []
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
let result = []
|
|
273
|
+
// TODO 表单项formKey有没有影响 需不需要修改
|
|
274
|
+
let handlerFn = (w) => {
|
|
275
|
+
result.push({
|
|
276
|
+
type: w.type,
|
|
277
|
+
name: w.options.name || w.formKey,
|
|
278
|
+
field: w
|
|
279
|
+
})
|
|
280
|
+
}
|
|
281
|
+
traverseFieldWidgets(widgetList, handlerFn)
|
|
282
|
+
|
|
283
|
+
return result
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* 获取所有容器组件
|
|
288
|
+
* @param widgetList
|
|
289
|
+
* @returns {[]}
|
|
290
|
+
*/
|
|
291
|
+
export function getAllContainerWidgets(widgetList) {
|
|
292
|
+
if (!widgetList) {
|
|
293
|
+
return []
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
let result = []
|
|
297
|
+
// TODO 表单项formKey有没有影响 需不需要修改
|
|
298
|
+
let handlerFn = (w) => {
|
|
299
|
+
result.push({
|
|
300
|
+
type: w.type,
|
|
301
|
+
name: w.options.name,
|
|
302
|
+
container: w
|
|
303
|
+
})
|
|
304
|
+
}
|
|
305
|
+
traverseContainerWidgets(widgetList, handlerFn)
|
|
306
|
+
|
|
307
|
+
return result
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
export function getQueryParam(variable) {
|
|
312
|
+
let query = window.location.search.substring(1);
|
|
313
|
+
let vars = query.split("&")
|
|
314
|
+
for (let i=0; i<vars.length; i++) {
|
|
315
|
+
let pair = vars[i].split("=")
|
|
316
|
+
if(pair[0] == variable) {
|
|
317
|
+
return pair[1]
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
return undefined;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
export function getDefaultFormConfig() {
|
|
325
|
+
return {
|
|
326
|
+
modelName: 'formData',
|
|
327
|
+
refName: 'vForm',
|
|
328
|
+
rulesName: 'rules',
|
|
329
|
+
labelWidth: 80,
|
|
330
|
+
labelPosition: 'left',
|
|
331
|
+
size: '',
|
|
332
|
+
labelAlign: 'label-left-align',
|
|
333
|
+
cssCode: '',
|
|
334
|
+
customClass: [],
|
|
335
|
+
functions: '',
|
|
336
|
+
layoutType: 'PC',
|
|
337
|
+
|
|
338
|
+
onFormCreated: '',
|
|
339
|
+
onFormMounted: '',
|
|
340
|
+
onFormDataChange: '',
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
export function buildDefaultFormJson() {
|
|
345
|
+
return {
|
|
346
|
+
widgetList: [],
|
|
347
|
+
formConfig: deepClone( getDefaultFormConfig() )
|
|
348
|
+
}
|
|
349
|
+
}
|