@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lambo-design/shared",
3
- "version": "1.0.0-beta.247",
3
+ "version": "1.0.0-beta.249",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "author": "lambo",
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 const TOKEN_KEY = 'lambo-token'
8
+ export let TOKEN_KEY = "lambo-token"
9
9
 
10
- export const COOKIE_KEY = 'lambo-sso-key'
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 const SSO_TOKEN_KEY = 'lambo-sso-token'
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
+ }