vue2-client 1.11.4 → 1.11.6-alpha

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.
Files changed (57) hide show
  1. package/.babelrc +3 -0
  2. package/babel.config.js +18 -21
  3. package/jest.config.js +22 -21
  4. package/package.json +5 -4
  5. package/src/base-client/components/common/CitySelect/CitySelect.vue +366 -342
  6. package/src/base-client/components/common/Upload/Upload.vue +322 -322
  7. package/src/base-client/components/common/XDescriptions/XDescriptionsGroup.vue +314 -304
  8. package/src/base-client/components/common/XDescriptions/demo.vue +51 -50
  9. package/src/base-client/components/common/XFormGroup/demo.vue +39 -46
  10. package/src/base-client/components/common/XFormTable/demo.vue +60 -60
  11. package/src/components/STable/index.js +426 -426
  12. package/src/expression/ExpressionRunner.js +26 -0
  13. package/src/expression/TestExpression.js +508 -0
  14. package/src/expression/core/Delegate.js +113 -0
  15. package/src/expression/core/Expression.js +1323 -0
  16. package/src/expression/core/Program.js +933 -0
  17. package/src/expression/core/Token.js +27 -0
  18. package/src/expression/enums/ExpressionType.js +81 -0
  19. package/src/expression/enums/TokenType.js +11 -0
  20. package/src/expression/exception/BreakWayException.js +2 -0
  21. package/src/expression/exception/ContinueWayException.js +2 -0
  22. package/src/expression/exception/ExpressionException.js +28 -0
  23. package/src/expression/exception/ReturnWayException.js +14 -0
  24. package/src/expression/exception/ServiceException.js +22 -0
  25. package/src/expression/instances/JSONArray.js +48 -0
  26. package/src/expression/instances/JSONObject.js +122 -0
  27. package/src/expression/instances/LogicConsole.js +45 -0
  28. package/src/expression/ts/ExpressionRunner.ts +28 -0
  29. package/src/expression/ts/TestExpression.ts +509 -0
  30. package/src/expression/ts/core/Delegate.ts +114 -0
  31. package/src/expression/ts/core/Expression.ts +1309 -0
  32. package/src/expression/ts/core/Program.ts +950 -0
  33. package/src/expression/ts/core/Token.ts +29 -0
  34. package/src/expression/ts/enums/ExpressionType.ts +81 -0
  35. package/src/expression/ts/enums/TokenType.ts +13 -0
  36. package/src/expression/ts/exception/BreakWayException.ts +2 -0
  37. package/src/expression/ts/exception/ContinueWayException.ts +2 -0
  38. package/src/expression/ts/exception/ExpressionException.ts +28 -0
  39. package/src/expression/ts/exception/ReturnWayException.ts +14 -0
  40. package/src/expression/ts/exception/ServiceException.ts +22 -0
  41. package/src/expression/ts/instances/JSONArray.ts +48 -0
  42. package/src/expression/ts/instances/JSONObject.ts +109 -0
  43. package/src/expression/ts/instances/LogicConsole.ts +32 -0
  44. package/src/logic/LogicRunner.js +67 -0
  45. package/src/logic/TestLogic.js +13 -0
  46. package/src/logic/plugins/common/DateTools.js +32 -0
  47. package/src/logic/plugins/index.js +5 -0
  48. package/src/logic/ts/LogicRunner.ts +67 -0
  49. package/src/logic/ts/TestLogic.ts +13 -0
  50. package/src/pages/LogicCallExample/index.vue +30 -0
  51. package/src/router/async/router.map.js +4 -2
  52. package/src/services/user.js +2 -0
  53. package/src/store/mutation-types.js +1 -0
  54. package/src/utils/EncryptUtil.js +23 -0
  55. package/src/utils/indexedDB.js +234 -234
  56. package/src/utils/request.js +382 -362
  57. package/test/request.test.js +17 -0
@@ -0,0 +1,26 @@
1
+ import Program from './core/Program'
2
+
3
+ export default class ExpressionRunner {
4
+ /**
5
+ * Runs an expression with parameters
6
+ *
7
+ * @param source Expression source
8
+ * @param params Expression parameters
9
+ * @returns The result of the expression
10
+ */
11
+ static async run (source, params) {
12
+ const delegate = this.getDelegate(source)
13
+ return await delegate.invoke(params)
14
+ }
15
+
16
+ /**
17
+ * Gets the delegate for the expression
18
+ *
19
+ * @param source Expression source
20
+ * @returns A delegate to invoke
21
+ */
22
+ static getDelegate (source) {
23
+ // Parse the source and return a delegate
24
+ return new Program(source).parse()
25
+ }
26
+ }
@@ -0,0 +1,508 @@
1
+ import Program from './core/Program'
2
+ import JSONObject from './instances/JSONObject'
3
+ import LogicConsole from './instances/LogicConsole'
4
+
5
+ runTest()
6
+
7
+ async function runTest () {
8
+ console.debug('1.========testValidate========')
9
+ await testValidate()
10
+ console.debug('2.========testAssert========')
11
+ await testAssert()
12
+ console.debug('3.========testTry========')
13
+ await testTry()
14
+ console.debug('4.========testPropertyType========')
15
+ await testPropertyType()
16
+ console.debug('5.========testJSONArrayIndex========')
17
+ await testJSONArrayIndex()
18
+ console.debug('6.========testArrayIndex========')
19
+ await testArrayIndex()
20
+ console.debug('7.========testCompare========')
21
+ await testCompare()
22
+ console.debug('8.========testJSONObject========')
23
+ await testJSONObject()
24
+ console.debug('9.========testJSONArray========')
25
+ await testJSONArray()
26
+ console.debug('10.========testFunctionCall========')
27
+ await testFunctionCall()
28
+ console.debug('11.========testMath========')
29
+ await testMath()
30
+ console.debug('12.========testString========')
31
+ await testString()
32
+ console.debug('13.========testCondition========')
33
+ await testCondition()
34
+ console.debug('14.========testThrow========')
35
+ await testThrow()
36
+ console.debug('15.========testJSONArrayLoop========')
37
+ await testJSONArrayLoop()
38
+ console.debug('16.========testJSONObjectLoop========')
39
+ await testJSONObjectLoop()
40
+ console.debug('17.========testIntLoop========')
41
+ await testIntLoop()
42
+ console.debug('18.========testContinueAndBreak========')
43
+ await testContinueAndBreak()
44
+ console.debug('19.========testComment========')
45
+ await testComment()
46
+ console.debug('20.========testReturn========')
47
+ await testReturn()
48
+ console.debug('21.========testLambda========')
49
+ await testLambda()
50
+ }
51
+
52
+ /**
53
+ * validate
54
+ */
55
+ async function testValidate () {
56
+ const expression = `
57
+ validate {
58
+ model: {
59
+ required: true,
60
+ },
61
+ visible: {
62
+ default: 1 + 1,
63
+ },
64
+ isAep: {
65
+ default: 3
66
+ },
67
+ testJson: {
68
+ required: true,
69
+ items: {
70
+ userid: {
71
+ required: true
72
+ }
73
+ }
74
+ },
75
+ testGroup: {
76
+ mode: "atLeastOne",
77
+ fields: [
78
+ "test1",
79
+ "test2"
80
+ ]
81
+ }
82
+ },
83
+ data.isAep == 3 :(
84
+ log.info(123)
85
+ ),null,
86
+ log.info(data)
87
+ `
88
+ const data = {
89
+ model: 'a',
90
+ test1: 'b',
91
+ isAep: null,
92
+ testJson: {
93
+ userid: {}
94
+ }
95
+ }
96
+ await runExpression(expression, data)
97
+ }
98
+
99
+ /**
100
+ * assert
101
+ */
102
+ async function testAssert () {
103
+ const expression = `
104
+ c = 1,
105
+ assert c == 1,
106
+ log.debug("ok"),
107
+ a = 1 + c,
108
+ assert a == 2,
109
+ log.debug("ok2")`
110
+ await runExpression(expression)
111
+ }
112
+
113
+ /**
114
+ * try
115
+ */
116
+ async function testTry () {
117
+ const expression = `
118
+ a = 0,
119
+ log.debug(a),
120
+ try {
121
+ assert c == 2
122
+ } catch (WebException e) {
123
+ log.debug(e),
124
+ a = 1 + 1
125
+ } catch (Exception e) {
126
+ log.debug(e),
127
+ a = 1 + 2
128
+ },
129
+ log.debug(a)
130
+ `
131
+ await runExpression(expression)
132
+ }
133
+
134
+ /**
135
+ * property
136
+ */
137
+ async function testPropertyType () {
138
+ const expression = `
139
+ a = 1,
140
+ b = 2.0,
141
+ c = {
142
+ d: 1,
143
+ e: {
144
+ str: "123",
145
+ 你好: "中国"
146
+ }
147
+ },
148
+ c.a = 1,
149
+ log.debug(c.e.你好),
150
+ log.debug(c["e"].str),
151
+ e = c.d,
152
+ f = "123",
153
+ g = [],
154
+ 名称 = "123=>",
155
+ log.debug(data.testArray[0]),
156
+ return 名称
157
+ `
158
+ const data = {
159
+ testArray: 'zhang|b|c'.split('\|')
160
+ }
161
+ await runExpression(expression, data)
162
+ }
163
+
164
+ /**
165
+ * JSONArray index
166
+ */
167
+ async function testJSONArrayIndex () {
168
+ const expression = `
169
+ a = [1,2,3,4,5],
170
+ return a[4]
171
+ `
172
+ await runExpression(expression)
173
+ }
174
+
175
+ /**
176
+ * array index
177
+ */
178
+ async function testArrayIndex () {
179
+ const expression = `
180
+ return data.a[4]
181
+ `
182
+ const data = {
183
+ a: [1, 2, 3, 4, 5]
184
+ }
185
+ await runExpression(expression, data)
186
+ }
187
+
188
+ async function testCompare () {
189
+ const expression = `
190
+ a = 0,
191
+ a >= 0 :(
192
+ a = a + 1,
193
+ b = 1,
194
+ a == b :(
195
+ c = 3.0,
196
+ a < c :(
197
+ a + 2,
198
+ a <= c :(
199
+ strA = $a$,
200
+ strB = $b$,
201
+ strC = $c$,
202
+ strA < strB && strA != strC :(
203
+ return $ok$
204
+ ),null
205
+ ),null
206
+ ),null
207
+ ),null
208
+ ),null
209
+ `
210
+ await runExpression(expression)
211
+ }
212
+
213
+ /**
214
+ * JSONObject
215
+ */
216
+ async function testJSONObject () {
217
+ const expression = `
218
+ datas = {
219
+ name: "张三",
220
+ 年龄: 15,
221
+ },
222
+ datas
223
+ `
224
+ await runExpression(expression)
225
+ }
226
+
227
+ /**
228
+ * JSONArray
229
+ */
230
+ async function testJSONArray () {
231
+ const expression = `
232
+ datas = ["a","b","c"],
233
+ datas
234
+ `
235
+ await runExpression(expression)
236
+ }
237
+
238
+ /**
239
+ * function call
240
+ */
241
+ async function testFunctionCall () {
242
+ const expression = `
243
+ log.debug("test is ok")
244
+ `
245
+ await runExpression(expression)
246
+ }
247
+
248
+ /**
249
+ * math
250
+ */
251
+ async function testMath () {
252
+ const expression = `
253
+ a = 1,
254
+ b = 2,
255
+ c = a + b,
256
+ c = c - 1,
257
+ d = 5 * 8,
258
+ e = d / 10,
259
+ e = e % 2,
260
+ c
261
+ `
262
+ await runExpression(expression)
263
+ }
264
+
265
+ /**
266
+ * string
267
+ */
268
+ async function testString () {
269
+ const expression = `
270
+ test1 = {}.toString(),
271
+ log.debug(test1),
272
+ a = $part1$,
273
+ log.debug(a),
274
+ b = "part2",
275
+ log.debug(b),
276
+ c = "{a}:{b}",
277
+ log.debug(c),
278
+ d = "{name}:张三",
279
+ log.debug(d),
280
+ e = "\\{name\\}:张三",
281
+ log.debug(e),
282
+ f = "\\"123\\"",
283
+ log.debug(f),
284
+ g = "\\$15.7",
285
+ log.debug(g),
286
+ h = $\\$15.7$,
287
+ log.debug(h),
288
+ i = "http:\\\\www.baidu.com",
289
+ log.debug(i),
290
+ j = $http://www.baidu.com$,
291
+ log.debug(j)
292
+ `
293
+ await runExpression(expression)
294
+ }
295
+
296
+ /**
297
+ * condition
298
+ */
299
+ async function testCondition () {
300
+ const expression = `
301
+ 1 != 1 :(
302
+ throw "异常"
303
+ ),null,
304
+ 1 + 1 != 2 :(
305
+ throw "异常"
306
+ ),null,
307
+ !(2 > 3) && !(3 > 2):(
308
+ throw "异常"
309
+ ),null,
310
+ 2 > 3 :(
311
+ throw "异常"
312
+ ),null,
313
+ !(3 > 2) :(
314
+ throw "异常"
315
+ ),null,
316
+ y = 1 > 0,
317
+ !y && 1 > 0 :(
318
+ throw "异常"
319
+ ),null
320
+ `
321
+ const data = {
322
+ type: '1'
323
+ }
324
+ await runExpression(expression, data)
325
+ }
326
+
327
+ /**
328
+ * throw
329
+ */
330
+ async function testThrow () {
331
+ const expression = `
332
+ data.type == 2 :(
333
+ throw "error",
334
+ log.debug(result)
335
+ ),null
336
+ `
337
+ const data = {
338
+ type: '1'
339
+ }
340
+ await runExpression(expression, data)
341
+ }
342
+
343
+ /**
344
+ * JSONArray loop
345
+ */
346
+ async function testJSONArrayLoop () {
347
+ const expression = `
348
+ log.debug("test-JSONArray"),
349
+ datas = [1,2,3,4,5],
350
+ datas.each(
351
+ log.debug(\${row}\$)
352
+ ),
353
+ log.debug("test-Set"),
354
+ data.testSet.each(
355
+ log.debug(\${row}\$)
356
+ ),
357
+ log.debug("test-Array"),
358
+ data.testArray.each(
359
+ log.debug(\${row}\$)
360
+ )
361
+ `
362
+ const data = {
363
+ testSet: [1, 2, 3, 4, 5],
364
+ testArray: 'a|b|c'.split('\|')
365
+ }
366
+ await runExpression(expression, data)
367
+ }
368
+
369
+ /**
370
+ * JSONObject loop
371
+ */
372
+ async function testJSONObjectLoop () {
373
+ const expression = `
374
+ log.debug("test-JSONObject"),
375
+ datas = {name: 1, age: 2},
376
+ datas.each(
377
+ log.debug(\${rowKey}:{row}$)
378
+ ),
379
+ log.debug("test-Map"),
380
+ data.testMap.each(
381
+ log.debug(\${rowKey}:{row}$)
382
+ )
383
+ `
384
+ const data = {
385
+ testMap: {
386
+ name: 'xxx',
387
+ age: 18,
388
+ gender: '男'
389
+ }
390
+ }
391
+ await runExpression(expression, data)
392
+ }
393
+
394
+ /**
395
+ * int loop
396
+ */
397
+ async function testIntLoop () {
398
+ const expression = `
399
+ a = 5,
400
+ a.each(
401
+ log.debug(row)
402
+ ),
403
+ (0,5).each(
404
+ log.debug(row)
405
+ ),
406
+ null
407
+ `
408
+ await runExpression(expression)
409
+ }
410
+
411
+ /**
412
+ * continue and break
413
+ */
414
+ async function testContinueAndBreak () {
415
+ const expression = `
416
+ datas = [1,2,3,4,5,6,7],
417
+ datas.each(
418
+ row == 3 :(
419
+ continue
420
+ ),row == 5:(
421
+ break
422
+ ),
423
+ log.debug(row)
424
+ )
425
+ `
426
+ await runExpression(expression)
427
+ }
428
+
429
+ /**
430
+ * comment
431
+ */
432
+ async function testComment () {
433
+ const expression = `
434
+ $//排序单表查询
435
+ select {items}
436
+ from {tablename}
437
+ where {condition}
438
+ order by {orderitem}
439
+ `
440
+ await runExpression(expression)
441
+ }
442
+
443
+ /**
444
+ * return
445
+ */
446
+ async function testReturn () {
447
+ const expression = `
448
+ data.type == 1 :(
449
+ return "123",
450
+ log.debug(123)
451
+ ),(
452
+ return 2
453
+ ),
454
+ log.debug(123)
455
+ `
456
+ const data = {
457
+ type: 1
458
+ }
459
+ await runExpression(expression, data)
460
+ }
461
+
462
+ /**
463
+ * lambda
464
+ */
465
+ async function testLambda () {
466
+ const expression = `
467
+ log.debug("进入外层逻辑,参数:{data}"),
468
+ age = 13,
469
+ // 声明一个lambda块
470
+ lambdaObj = (data) => {
471
+ index = 1,
472
+ log.debug("进入lambda了"),
473
+ log.debug("传入lambda块的参数:{data}"),
474
+ log.debug("外层的只读参数:{age}"),
475
+ return "执行lambda完成"
476
+ },
477
+ log.debug("age参数:{age}"),
478
+ result = lambdaObj.apply({
479
+ name: "江超"
480
+ }),
481
+ result = lambdaObj.apply({
482
+ name: "大神"
483
+ }),
484
+ log.debug("result:{result}"),
485
+ return {
486
+ func: lambdaObj
487
+ }
488
+ `
489
+ const data = {
490
+ type: 1
491
+ }
492
+ await runExpression(expression, data)
493
+ }
494
+
495
+ async function runExpression (expression, data) {
496
+ const program = new Program(expression)
497
+ const d = program.parse()
498
+ const params = {}
499
+ if (data == null) {
500
+ data = {}
501
+ }
502
+ params.data = data
503
+ params.log = new LogicConsole()
504
+ params.b = 5
505
+ const result = await d.invoke(new JSONObject(params))
506
+ console.log(result)
507
+ return result
508
+ }
@@ -0,0 +1,113 @@
1
+ import ExpressionType from '../enums/ExpressionType'
2
+ import ReturnWayException from '../exception/ReturnWayException'
3
+ import JSONObject from '../instances/JSONObject'
4
+
5
+ export default class Delegate {
6
+ exp
7
+ source
8
+ lambdaOutProps = []
9
+ objectNames
10
+
11
+ constructor (exp, source, objectNames) {
12
+ this.exp = exp
13
+ this.source = source
14
+ if (objectNames) {
15
+ this.objectNames = objectNames
16
+ } else {
17
+ this.objectNames = new JSONObject()
18
+ }
19
+ }
20
+
21
+ // 执行程序,执行前,参数必须实例化
22
+ async invoke (params) {
23
+ if (params == null) {
24
+ params = new JSONObject()
25
+ }
26
+ // 把初始参数给参数表
27
+ this.objectNames = params
28
+ // 沿根Expression节点遍历,把delegate传递下去
29
+ this.putDelegate(this.exp)
30
+ // 调用exp的执行过程
31
+ try {
32
+ return await this.exp.invoke()
33
+ } catch (returnWay) {
34
+ if (returnWay instanceof ReturnWayException) {
35
+ return returnWay.getReturnObject()
36
+ }
37
+ throw returnWay
38
+ }
39
+ }
40
+
41
+ // 沿根节点递归,传递delegate的过程
42
+ putDelegate (parent) {
43
+ for (const child of parent.children) {
44
+ // 有些节点会放空的子节点
45
+ if (child == null) {
46
+ continue
47
+ }
48
+ // try特殊处理
49
+ if (child.type === ExpressionType.Try) {
50
+ const exps = child.value
51
+ if (exps[0] != null) {
52
+ exps[0].setDelegate(this)
53
+ this.putDelegate(exps[0])
54
+ }
55
+ if (exps[1] != null) {
56
+ exps[1].setDelegate(this)
57
+ this.putDelegate(exps[1])
58
+ }
59
+ }
60
+ child.setDelegate(this)
61
+ this.putDelegate(child)
62
+ }
63
+ }
64
+
65
+ // 获取表达式
66
+ getExp () {
67
+ return this.exp
68
+ }
69
+
70
+ // 获取对象值存储
71
+ getObjectNames () {
72
+ return this.objectNames
73
+ }
74
+
75
+ // 获取lambda外层参数名
76
+ getLambdaOutProps () {
77
+ return this.lambdaOutProps
78
+ }
79
+
80
+ // 存储对象值
81
+ put (key, value) {
82
+ this.objectNames.put(key, value)
83
+ }
84
+
85
+ // 获取对象值
86
+ get (key) {
87
+ return this.objectNames.get(key)
88
+ }
89
+
90
+ // 检查是否包含某个键
91
+ containsKey (key) {
92
+ return this.objectNames.has(key)
93
+ }
94
+
95
+ // 获取源代码
96
+ getSource () {
97
+ return this.source
98
+ }
99
+
100
+ // 使用参数调用
101
+ async apply (params) {
102
+ if (params === null) {
103
+ params = new JSONObject()
104
+ }
105
+ const map = this.objectNames
106
+ if (this.lambdaOutProps.length === 0) {
107
+ this.lambdaOutProps.push(...map.keySet())
108
+ }
109
+ const lambdaMap = new JSONObject(map)
110
+ lambdaMap.put('data', params)
111
+ return await this.invoke(lambdaMap)
112
+ }
113
+ }