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 CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "af-mobile-client-vue3",
3
3
  "type": "module",
4
- "version": "1.2.30",
4
+ "version": "1.2.32",
5
5
  "packageManager": "pnpm@10.12.3",
6
6
  "description": "Vue + Vite component lib",
7
7
  "engines": {
@@ -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 = reactive({})
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
- Object.assign(form, props.formData || {})
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
- Object.assign(form, {})
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
- form,
294
- (val) => {
295
- if (typeof formDataChange === 'function') {
296
- formDataChange(val)
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
- Object.assign(form, formData || props.formData || {})
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
- setForm(data)
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
+ }