af-mobile-client-vue3 1.2.30 → 1.2.32
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/src/components/data/XForm/index.vue +13 -17
- package/src/expression/ExpressionRunner.ts +28 -0
- package/src/expression/TestExpression.ts +510 -0
- package/src/expression/core/Delegate.ts +116 -0
- package/src/expression/core/Expression.ts +1359 -0
- package/src/expression/core/Program.ts +985 -0
- package/src/expression/core/Token.ts +29 -0
- package/src/expression/enums/ExpressionType.ts +81 -0
- package/src/expression/enums/TokenType.ts +11 -0
- package/src/expression/exception/BreakWayException.ts +2 -0
- package/src/expression/exception/ContinueWayException.ts +2 -0
- package/src/expression/exception/ExpressionException.ts +29 -0
- package/src/expression/exception/ReturnWayException.ts +14 -0
- package/src/expression/exception/ServiceException.ts +22 -0
- package/src/expression/instances/JSONArray.ts +52 -0
- package/src/expression/instances/JSONObject.ts +118 -0
- package/src/expression/instances/LogicConsole.ts +31 -0
- package/src/logic/LogicRunner.ts +67 -0
- package/src/logic/TestLogic.ts +13 -0
- package/src/logic/plugins/common/DateTools.ts +35 -0
- package/src/logic/plugins/common/VueTools.ts +30 -0
- package/src/logic/plugins/index.ts +7 -0
package/package.json
CHANGED
|
@@ -80,7 +80,7 @@ const formDataChange = inject('formDataChange', null)
|
|
|
80
80
|
// 核心状态
|
|
81
81
|
const xFormRef = ref<FormInstance>()
|
|
82
82
|
const loaded = ref(false)
|
|
83
|
-
const form =
|
|
83
|
+
const form = ref({})
|
|
84
84
|
const rules = reactive({})
|
|
85
85
|
const myGetDataParams = ref({})
|
|
86
86
|
|
|
@@ -123,7 +123,7 @@ const previewLonLatKey = computed(() => {
|
|
|
123
123
|
})
|
|
124
124
|
|
|
125
125
|
const previewMapPoint = computed(() => {
|
|
126
|
-
const val = form[previewLonLatKey.value]
|
|
126
|
+
const val = form.value[previewLonLatKey.value]
|
|
127
127
|
if (val && typeof val === 'string' && val.includes(',')) {
|
|
128
128
|
const [lon, lat] = val.split(',').map(Number)
|
|
129
129
|
if (!Number.isNaN(lon) && !Number.isNaN(lat)) {
|
|
@@ -208,7 +208,7 @@ function setupFormConfig(config: GroupFormItems) {
|
|
|
208
208
|
formConfig.value = config
|
|
209
209
|
myServiceName.value = props.serviceName || ''
|
|
210
210
|
formGroupName.value = config.groupName || 'default'
|
|
211
|
-
|
|
211
|
+
form.value = props.formData || {}
|
|
212
212
|
// 清理并重新设置验证规则
|
|
213
213
|
setupValidationRules()
|
|
214
214
|
}
|
|
@@ -277,7 +277,7 @@ function resetForm() {
|
|
|
277
277
|
formGroupName.value = 'default'
|
|
278
278
|
myServiceName.value = ''
|
|
279
279
|
tableName.value = ''
|
|
280
|
-
|
|
280
|
+
form.value = {}
|
|
281
281
|
Object.keys(rules).forEach(key => delete rules[key])
|
|
282
282
|
myGetDataParams.value = {}
|
|
283
283
|
}
|
|
@@ -289,15 +289,11 @@ watch(() => props.formData, (newVal) => {
|
|
|
289
289
|
}
|
|
290
290
|
})
|
|
291
291
|
|
|
292
|
-
watch(
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
}
|
|
298
|
-
},
|
|
299
|
-
{ deep: true },
|
|
300
|
-
)
|
|
292
|
+
watch(form, (newVal) => {
|
|
293
|
+
if (typeof formDataChange === 'function') {
|
|
294
|
+
formDataChange(newVal)
|
|
295
|
+
}
|
|
296
|
+
}, { deep: true })
|
|
301
297
|
|
|
302
298
|
// 组件挂载时初始化
|
|
303
299
|
onBeforeMount(() => {
|
|
@@ -323,7 +319,7 @@ function init(params: InitParams) {
|
|
|
323
319
|
else if (formItems) {
|
|
324
320
|
// 直接使用传入的配置初始化
|
|
325
321
|
setupFormConfig(formItems)
|
|
326
|
-
|
|
322
|
+
form.value = formData || props.formData || {}
|
|
327
323
|
myGetDataParams.value = getDataParams
|
|
328
324
|
|
|
329
325
|
// 设置表名
|
|
@@ -365,14 +361,14 @@ function loadParamLogicNameData(paramLogicName) {
|
|
|
365
361
|
}
|
|
366
362
|
runLogic(paramLogicName, logicParam || {}, props.serviceName).then((data: any) => {
|
|
367
363
|
if (data) {
|
|
368
|
-
|
|
364
|
+
form.value = data
|
|
369
365
|
}
|
|
370
366
|
})
|
|
371
367
|
}
|
|
372
368
|
}
|
|
373
369
|
|
|
374
370
|
function setForm(obj: object) {
|
|
375
|
-
Object.assign(form, obj)
|
|
371
|
+
Object.assign(form.value, obj)
|
|
376
372
|
}
|
|
377
373
|
|
|
378
374
|
// 获取表单字段实际值
|
|
@@ -480,7 +476,7 @@ async function appendSilenceAddFields(form: any) {
|
|
|
480
476
|
}
|
|
481
477
|
|
|
482
478
|
function prepareForm() {
|
|
483
|
-
const formObj = { ...form }
|
|
479
|
+
const formObj = { ...form.value }
|
|
484
480
|
const cleanedForm: any = {}
|
|
485
481
|
|
|
486
482
|
for (const key of Object.keys(formObj)) {
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type Delegate from './core/Delegate'
|
|
2
|
+
import type JSONObject from './instances/JSONObject'
|
|
3
|
+
import Program from './core/Program'
|
|
4
|
+
|
|
5
|
+
export default class ExpressionRunner {
|
|
6
|
+
/**
|
|
7
|
+
* Runs an expression with parameters
|
|
8
|
+
*
|
|
9
|
+
* @param source Expression source
|
|
10
|
+
* @param params Expression parameters
|
|
11
|
+
* @returns The result of the expression
|
|
12
|
+
*/
|
|
13
|
+
public static run(source: string, params: JSONObject): any {
|
|
14
|
+
const delegate: Delegate = this.getDelegate(source)
|
|
15
|
+
return delegate.invoke(params)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Gets the delegate for the expression
|
|
20
|
+
*
|
|
21
|
+
* @param source Expression source
|
|
22
|
+
* @returns A delegate to invoke
|
|
23
|
+
*/
|
|
24
|
+
public static getDelegate(source: string): Delegate {
|
|
25
|
+
// Parse the source and return a delegate
|
|
26
|
+
return new Program(source).parse()
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,510 @@
|
|
|
1
|
+
import Program from './core/Program'
|
|
2
|
+
import JSONObject from './instances/JSONObject'
|
|
3
|
+
import LogicConsole from './instances/LogicConsole'
|
|
4
|
+
|
|
5
|
+
console.info('1.========testValidate========')
|
|
6
|
+
testValidate()
|
|
7
|
+
console.info('2.========testAssert========')
|
|
8
|
+
testAssert()
|
|
9
|
+
console.info('3.========testTry========')
|
|
10
|
+
testTry()
|
|
11
|
+
console.info('4.========testPropertyType========')
|
|
12
|
+
testPropertyType()
|
|
13
|
+
console.info('5.========testJSONArrayIndex========')
|
|
14
|
+
testJSONArrayIndex()
|
|
15
|
+
console.info('6.========testArrayIndex========')
|
|
16
|
+
testArrayIndex()
|
|
17
|
+
console.info('7.========testCompare========')
|
|
18
|
+
testCompare()
|
|
19
|
+
console.info('8.========testJSONObject========')
|
|
20
|
+
testJSONObject()
|
|
21
|
+
console.info('9.========testJSONArray========')
|
|
22
|
+
testJSONArray()
|
|
23
|
+
console.info('10.========testFunctionCall========')
|
|
24
|
+
testFunctionCall()
|
|
25
|
+
console.info('11.========testMath========')
|
|
26
|
+
testMath()
|
|
27
|
+
console.info('12.========testString========')
|
|
28
|
+
testString()
|
|
29
|
+
console.info('13.========testCondition========')
|
|
30
|
+
testCondition()
|
|
31
|
+
console.info('14.========testThrow========')
|
|
32
|
+
testThrow()
|
|
33
|
+
console.info('15.========testJSONArrayLoop========')
|
|
34
|
+
testJSONArrayLoop()
|
|
35
|
+
console.info('16.========testJSONObjectLoop========')
|
|
36
|
+
testJSONObjectLoop()
|
|
37
|
+
console.info('17.========testIntLoop========')
|
|
38
|
+
testIntLoop()
|
|
39
|
+
console.info('18.========testContinueAndBreak========')
|
|
40
|
+
testContinueAndBreak()
|
|
41
|
+
console.info('19.========testComment========')
|
|
42
|
+
testComment()
|
|
43
|
+
console.info('20.========testReturn========')
|
|
44
|
+
testReturn()
|
|
45
|
+
console.info('21.========testLambda========')
|
|
46
|
+
testLambda()
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* validate
|
|
50
|
+
*/
|
|
51
|
+
function testValidate() {
|
|
52
|
+
const expression = `
|
|
53
|
+
validate {
|
|
54
|
+
model: {
|
|
55
|
+
required: true,
|
|
56
|
+
},
|
|
57
|
+
visible: {
|
|
58
|
+
default: 1 + 1,
|
|
59
|
+
},
|
|
60
|
+
isAep: {
|
|
61
|
+
default: 3
|
|
62
|
+
},
|
|
63
|
+
testJson: {
|
|
64
|
+
required: true,
|
|
65
|
+
items: {
|
|
66
|
+
userid: {
|
|
67
|
+
required: true
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
testGroup: {
|
|
72
|
+
mode: "atLeastOne",
|
|
73
|
+
fields: [
|
|
74
|
+
"test1",
|
|
75
|
+
"test2"
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
data.isAep == 3 :(
|
|
80
|
+
log.info(123)
|
|
81
|
+
),null,
|
|
82
|
+
log.info(data)
|
|
83
|
+
`
|
|
84
|
+
const data = {
|
|
85
|
+
model: 'a',
|
|
86
|
+
test1: 'b',
|
|
87
|
+
isAep: null,
|
|
88
|
+
testJson: {
|
|
89
|
+
userid: {},
|
|
90
|
+
},
|
|
91
|
+
}
|
|
92
|
+
runExpression(expression, data)
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* assert
|
|
97
|
+
*/
|
|
98
|
+
function testAssert() {
|
|
99
|
+
const expression = `
|
|
100
|
+
c = 1,
|
|
101
|
+
assert c == 1,
|
|
102
|
+
log.debug("ok"),
|
|
103
|
+
a = 1 + c,
|
|
104
|
+
assert a == 2,
|
|
105
|
+
log.debug("ok2")`
|
|
106
|
+
runExpression(expression)
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* try
|
|
111
|
+
*/
|
|
112
|
+
function testTry() {
|
|
113
|
+
const expression = `
|
|
114
|
+
a = 0,
|
|
115
|
+
log.debug(a),
|
|
116
|
+
try {
|
|
117
|
+
assert c == 2
|
|
118
|
+
} catch (WebException e) {
|
|
119
|
+
log.debug(e),
|
|
120
|
+
a = 1 + 1
|
|
121
|
+
} catch (Exception e) {
|
|
122
|
+
log.debug(e),
|
|
123
|
+
a = 1 + 2
|
|
124
|
+
},
|
|
125
|
+
log.debug(a)
|
|
126
|
+
`
|
|
127
|
+
runExpression(expression)
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* property
|
|
132
|
+
*/
|
|
133
|
+
function testPropertyType() {
|
|
134
|
+
const expression = `
|
|
135
|
+
a = 1,
|
|
136
|
+
b = 2.0,
|
|
137
|
+
c = {
|
|
138
|
+
d: 1,
|
|
139
|
+
e: {
|
|
140
|
+
str: "123",
|
|
141
|
+
你好: "中国"
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
c.a = 1,
|
|
145
|
+
log.debug(c.e.你好),
|
|
146
|
+
log.debug(c["e"].str),
|
|
147
|
+
e = c.d,
|
|
148
|
+
f = "123",
|
|
149
|
+
g = [],
|
|
150
|
+
名称 = "123=>",
|
|
151
|
+
log.debug(data.testArray[0]),
|
|
152
|
+
return 名称
|
|
153
|
+
`
|
|
154
|
+
const data = {
|
|
155
|
+
testArray: 'zhang|b|c'.split('\|'),
|
|
156
|
+
}
|
|
157
|
+
runExpression(expression, data)
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* JSONArray index
|
|
162
|
+
*/
|
|
163
|
+
function testJSONArrayIndex() {
|
|
164
|
+
const expression = `
|
|
165
|
+
a = [1,2,3,4,5],
|
|
166
|
+
return a[4]
|
|
167
|
+
`
|
|
168
|
+
runExpression(expression)
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* array index
|
|
173
|
+
*/
|
|
174
|
+
function testArrayIndex() {
|
|
175
|
+
const expression = `
|
|
176
|
+
return data.a[4]
|
|
177
|
+
`
|
|
178
|
+
const data = {
|
|
179
|
+
a: [1, 2, 3, 4, 5],
|
|
180
|
+
}
|
|
181
|
+
runExpression(expression, data)
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
function testCompare() {
|
|
185
|
+
const expression = `
|
|
186
|
+
a = 0,
|
|
187
|
+
a >= 0 :(
|
|
188
|
+
a = a + 1,
|
|
189
|
+
b = 1,
|
|
190
|
+
a == b :(
|
|
191
|
+
c = 3.0,
|
|
192
|
+
a < c :(
|
|
193
|
+
a + 2,
|
|
194
|
+
a <= c :(
|
|
195
|
+
strA = $a$,
|
|
196
|
+
strB = $b$,
|
|
197
|
+
strC = $c$,
|
|
198
|
+
strA < strB && strA != strC :(
|
|
199
|
+
return $ok$
|
|
200
|
+
),null
|
|
201
|
+
),null
|
|
202
|
+
),null
|
|
203
|
+
),null
|
|
204
|
+
),null
|
|
205
|
+
`
|
|
206
|
+
runExpression(expression)
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* JSONObject
|
|
211
|
+
*/
|
|
212
|
+
function testJSONObject() {
|
|
213
|
+
const expression = `
|
|
214
|
+
datas = {
|
|
215
|
+
name: "张三",
|
|
216
|
+
年龄: 15,
|
|
217
|
+
},
|
|
218
|
+
datas
|
|
219
|
+
`
|
|
220
|
+
runExpression(expression)
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* JSONArray
|
|
225
|
+
*/
|
|
226
|
+
function testJSONArray() {
|
|
227
|
+
const expression = `
|
|
228
|
+
datas = ["a","b","c"],
|
|
229
|
+
datas
|
|
230
|
+
`
|
|
231
|
+
runExpression(expression)
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* function call
|
|
236
|
+
*/
|
|
237
|
+
function testFunctionCall() {
|
|
238
|
+
const expression = `
|
|
239
|
+
log.debug("test is ok")
|
|
240
|
+
`
|
|
241
|
+
runExpression(expression)
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* math
|
|
246
|
+
*/
|
|
247
|
+
function testMath() {
|
|
248
|
+
const expression = `
|
|
249
|
+
a = 1,
|
|
250
|
+
b = 2,
|
|
251
|
+
c = a + b,
|
|
252
|
+
c = c - 1,
|
|
253
|
+
d = 5 * 8,
|
|
254
|
+
e = d / 10,
|
|
255
|
+
e = e % 2,
|
|
256
|
+
c
|
|
257
|
+
`
|
|
258
|
+
runExpression(expression)
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* string
|
|
263
|
+
*/
|
|
264
|
+
function testString() {
|
|
265
|
+
const expression = `
|
|
266
|
+
test1 = {}.toString(),
|
|
267
|
+
log.debug(test1),
|
|
268
|
+
a = $part1$,
|
|
269
|
+
log.debug(a),
|
|
270
|
+
b = "part2",
|
|
271
|
+
log.debug(b),
|
|
272
|
+
c = "{a}:{b}",
|
|
273
|
+
log.debug(c),
|
|
274
|
+
d = "{name}:张三",
|
|
275
|
+
log.debug(d),
|
|
276
|
+
e = "\\{name\\}:张三",
|
|
277
|
+
log.debug(e),
|
|
278
|
+
f = "\\"123\\"",
|
|
279
|
+
log.debug(f),
|
|
280
|
+
g = "\\$15.7",
|
|
281
|
+
log.debug(g),
|
|
282
|
+
h = $\\$15.7$,
|
|
283
|
+
log.debug(h),
|
|
284
|
+
i = "http:\\\\www.baidu.com",
|
|
285
|
+
log.debug(i),
|
|
286
|
+
j = $http://www.baidu.com$,
|
|
287
|
+
log.debug(j)
|
|
288
|
+
`
|
|
289
|
+
runExpression(expression)
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* condition
|
|
294
|
+
*/
|
|
295
|
+
function testCondition() {
|
|
296
|
+
const expression = `
|
|
297
|
+
1 != 1 :(
|
|
298
|
+
throw "异常"
|
|
299
|
+
),null,
|
|
300
|
+
1 + 1 != 2 :(
|
|
301
|
+
throw "异常"
|
|
302
|
+
),null,
|
|
303
|
+
!(2 > 3) && !(3 > 2):(
|
|
304
|
+
throw "异常"
|
|
305
|
+
),null,
|
|
306
|
+
2 > 3 :(
|
|
307
|
+
throw "异常"
|
|
308
|
+
),null,
|
|
309
|
+
!(3 > 2) :(
|
|
310
|
+
throw "异常"
|
|
311
|
+
),null,
|
|
312
|
+
y = 1 > 0,
|
|
313
|
+
!y && 1 > 0 :(
|
|
314
|
+
throw "异常"
|
|
315
|
+
),null
|
|
316
|
+
`
|
|
317
|
+
const data = {
|
|
318
|
+
type: '1',
|
|
319
|
+
}
|
|
320
|
+
runExpression(expression, data)
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* throw
|
|
325
|
+
*/
|
|
326
|
+
function testThrow() {
|
|
327
|
+
const expression = `
|
|
328
|
+
data.type == 2 :(
|
|
329
|
+
throw "error",
|
|
330
|
+
log.debug(result)
|
|
331
|
+
),null
|
|
332
|
+
`
|
|
333
|
+
const data = {
|
|
334
|
+
type: '1',
|
|
335
|
+
}
|
|
336
|
+
runExpression(expression, data)
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
/**
|
|
340
|
+
* JSONArray loop
|
|
341
|
+
*/
|
|
342
|
+
function testJSONArrayLoop() {
|
|
343
|
+
const expression = `
|
|
344
|
+
log.debug("test-JSONArray"),
|
|
345
|
+
datas = [1,2,3,4,5],
|
|
346
|
+
datas.each(
|
|
347
|
+
log.debug(\${row}\$)
|
|
348
|
+
),
|
|
349
|
+
log.debug("test-Set"),
|
|
350
|
+
data.testSet.each(
|
|
351
|
+
log.debug(\${row}\$)
|
|
352
|
+
),
|
|
353
|
+
log.debug("test-Array"),
|
|
354
|
+
data.testArray.each(
|
|
355
|
+
log.debug(\${row}\$)
|
|
356
|
+
)
|
|
357
|
+
`
|
|
358
|
+
const data = {
|
|
359
|
+
testSet: [1, 2, 3, 4, 5],
|
|
360
|
+
testArray: 'a|b|c'.split('\|'),
|
|
361
|
+
}
|
|
362
|
+
runExpression(expression, data)
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
/**
|
|
366
|
+
* JSONObject loop
|
|
367
|
+
*/
|
|
368
|
+
function testJSONObjectLoop() {
|
|
369
|
+
const expression = `
|
|
370
|
+
log.debug("test-JSONObject"),
|
|
371
|
+
datas = {name: 1, age: 2},
|
|
372
|
+
datas.each(
|
|
373
|
+
log.debug(\${rowKey}:{row}$)
|
|
374
|
+
),
|
|
375
|
+
log.debug("test-Map"),
|
|
376
|
+
data.testMap.each(
|
|
377
|
+
log.debug(\${rowKey}:{row}$)
|
|
378
|
+
)
|
|
379
|
+
`
|
|
380
|
+
const data = {
|
|
381
|
+
testMap: {
|
|
382
|
+
name: 'xxx',
|
|
383
|
+
age: 18,
|
|
384
|
+
gender: '男',
|
|
385
|
+
},
|
|
386
|
+
}
|
|
387
|
+
runExpression(expression, data)
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* int loop
|
|
392
|
+
*/
|
|
393
|
+
function testIntLoop() {
|
|
394
|
+
const expression = `
|
|
395
|
+
a = 5,
|
|
396
|
+
a.each(
|
|
397
|
+
log.debug(row)
|
|
398
|
+
),
|
|
399
|
+
(0,5).each(
|
|
400
|
+
log.debug(row)
|
|
401
|
+
),
|
|
402
|
+
null
|
|
403
|
+
`
|
|
404
|
+
runExpression(expression)
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* continue and break
|
|
409
|
+
*/
|
|
410
|
+
function testContinueAndBreak() {
|
|
411
|
+
const expression = `
|
|
412
|
+
datas = [1,2,3,4,5,6,7],
|
|
413
|
+
datas.each(
|
|
414
|
+
row == 3 :(
|
|
415
|
+
continue
|
|
416
|
+
),row == 5:(
|
|
417
|
+
break
|
|
418
|
+
),
|
|
419
|
+
log.debug(row)
|
|
420
|
+
)
|
|
421
|
+
`
|
|
422
|
+
runExpression(expression)
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
/**
|
|
426
|
+
* comment
|
|
427
|
+
*/
|
|
428
|
+
function testComment() {
|
|
429
|
+
const expression = `
|
|
430
|
+
$//排序单表查询
|
|
431
|
+
select {items}
|
|
432
|
+
from {tablename}
|
|
433
|
+
where {condition}
|
|
434
|
+
order by {orderitem}
|
|
435
|
+
`
|
|
436
|
+
runExpression(expression)
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
/**
|
|
440
|
+
* return
|
|
441
|
+
*/
|
|
442
|
+
function testReturn() {
|
|
443
|
+
const expression = `
|
|
444
|
+
data.type == 1 :(
|
|
445
|
+
return "123",
|
|
446
|
+
log.debug(123)
|
|
447
|
+
),(
|
|
448
|
+
return 2
|
|
449
|
+
),
|
|
450
|
+
log.debug(123)
|
|
451
|
+
`
|
|
452
|
+
const data = {
|
|
453
|
+
type: 1,
|
|
454
|
+
}
|
|
455
|
+
runExpression(expression, data)
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
/**
|
|
459
|
+
* lambda
|
|
460
|
+
*/
|
|
461
|
+
function testLambda() {
|
|
462
|
+
const expression = `
|
|
463
|
+
log.debug("进入外层逻辑,参数:{data}"),
|
|
464
|
+
age = 13,
|
|
465
|
+
// 声明一个lambda块
|
|
466
|
+
lambdaObj = (data) => {
|
|
467
|
+
index = 1,
|
|
468
|
+
log.debug("进入lambda了"),
|
|
469
|
+
log.debug("传入lambda块的参数:{data}"),
|
|
470
|
+
log.debug("外层的只读参数:{age}"),
|
|
471
|
+
return "执行lambda完成"
|
|
472
|
+
},
|
|
473
|
+
log.debug("age参数:{age}"),
|
|
474
|
+
result = lambdaObj.apply({
|
|
475
|
+
name: "江超"
|
|
476
|
+
}),
|
|
477
|
+
result = lambdaObj.apply({
|
|
478
|
+
name: "大神"
|
|
479
|
+
}),
|
|
480
|
+
log.debug("result:{result}"),
|
|
481
|
+
return {
|
|
482
|
+
func: lambdaObj
|
|
483
|
+
}
|
|
484
|
+
`
|
|
485
|
+
const data = {
|
|
486
|
+
type: 1,
|
|
487
|
+
}
|
|
488
|
+
runExpression(expression, data)
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
function runExpression(expression: string, data?: any) {
|
|
492
|
+
const program = new Program(expression)
|
|
493
|
+
const d = program.parse()
|
|
494
|
+
const params: any = {}
|
|
495
|
+
if (data == null) {
|
|
496
|
+
data = {}
|
|
497
|
+
}
|
|
498
|
+
params.data = data
|
|
499
|
+
params.log = new LogicConsole()
|
|
500
|
+
params.b = 5
|
|
501
|
+
// eslint-disable-next-line no-useless-catch
|
|
502
|
+
try {
|
|
503
|
+
const result = d.invoke(new JSONObject(params))
|
|
504
|
+
console.log(result)
|
|
505
|
+
return result
|
|
506
|
+
}
|
|
507
|
+
catch (e) {
|
|
508
|
+
throw e
|
|
509
|
+
}
|
|
510
|
+
}
|