SubmitVerificationDialog.vue
34.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
<template>
<el-dialog
title="表单校验"
:close-on-click-modal="false"
:visible.sync="submitVerificationDialog"
width="76%"
:append-to-body="true"
top="6vh"
>
<div v-if="submitVerificationDialog">
<el-form
:model="verification"
data-vv-scope="verificationForm"
class="form__property-content"
>
<ht-form-item label="校验名称" prop="name" label-width="120px">
<ht-input
v-model="verification.name"
:validate="{required: true}"
placeholder=""
width="620px"
></ht-input>
</ht-form-item>
<ht-form-item label="校验提示" prop="tips" label-width="120px">
<ht-input
v-model="verification.tips"
:validate="{required: true}"
placeholder=""
width="620px"
></ht-input>
</ht-form-item>
<ht-form-item label="校验描述" prop="desc" label-width="120px">
<ht-input
type="textarea"
v-model="verification.desc"
width="620px"
:maxlength="300"
:showWordLimit="true"
placeholder="请输入描述"
/>
</ht-form-item>
<ht-form-item label-width="0px">
<el-row>
<el-col :span="24">
<codemirror
ref="mycode2"
v-model="verification.formulasDiyJs"
:options="cmOptions2"
class="code"
id="singleText"
></codemirror>
</el-col>
</el-row>
<el-row :gutter="20" style="margin-top: 15px;height:280px;">
<el-col :span="8">
变量
<el-card shadow="never">
<div style="height:300px;overflow-y:auto">
<el-tree
:data="[boDefData]"
:props="defaultProps"
:default-expand-all="expandAll"
@node-click="handleNodeClick"
ref="varTree"
>
<span class="custom-tree-node" slot-scope="{node, data}">
<i
class="icon-number bo-tree__icon"
title="数字类型的字段"
v-if="data.columnType == 'number'"
/>
<i
class="icon-text bo-tree__icon"
title="字符串类型的字段"
v-if="data.columnType == 'varchar'"
/>
<i
class="icon-date bo-tree__icon"
title="日期类型的字段"
v-if="data.columnType == 'date'"
/>
<span class="bo-tree__label" :title="node.label">{{
node.label
}}</span>
</span>
</el-tree>
</div>
</el-card>
</el-col>
<el-col :span="8">
函数
<el-card shadow="never">
<div style="height:300px;overflow-y:auto">
<el-tree
:data="functionData"
:default-expand-all="false"
@node-click="functionNodeClick"
:filter-node-method="filterNode"
ref="funcTree"
>
<span
class="custom-tree-node"
slot-scope="{node, data}"
style="width:100%;"
@mouseenter="mouseenter(data)"
@mouseleave="mouseleave(data)"
>
<span>{{ node.label }}</span>
</span>
</el-tree>
</div>
</el-card>
</el-col>
<el-col :span="8">
帮助
<el-card shadow="never">
<div style="height:300px;overflow-y:auto;">
<div
v-if='helpDesc'
style="white-space:pre;font-size:12px;line-height: 20px;"
>
{{ helpDesc }}
</div>
<span style="font-size:16px;color: red;">注意事项:</span>
<div style="font-size:12px;line-height: 20px;">
1.此功能使用VUE自定义指令为底层实现,写法遵循VUE指令写法,指令会实时监听文本表达式的值改变,一但改变会把表达式式最终值赋值给对应字段
<br />2.不可字段之间互相引用,例:字段a的公式中包含了字段b,字段b的公式中就不可再包含字段a了,不然会发生页面死循环
<br />3.配置完公式后,请务必在浏览器开发者模式进行多次调试,以确保公式语法正确!
</div>
<div>
<codemirror
ref="htmlCode"
key="htmlCode"
v-model="examples"
:options="examplesOptions"
class="examples-code"
>
</codemirror>
</div>
</div>
</el-card>
</el-col>
</el-row>
</ht-form-item>
</el-form>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose('close')">取 消</el-button>
<el-button type="primary" @click="handleClose('true')">确 定</el-button>
</span>
</el-dialog>
</template>
<script>
import {codemirror} from 'vue-codemirror'
require('codemirror/mode/python/python.js')
require('codemirror/addon/fold/foldcode.js')
require('codemirror/addon/fold/foldgutter.js')
require('codemirror/addon/fold/brace-fold.js')
require('codemirror/addon/fold/xml-fold.js')
require('codemirror/addon/fold/indent-fold.js')
require('codemirror/addon/fold/markdown-fold.js')
require('codemirror/addon/fold/comment-fold.js')
import flow from '@/api/flow.js'
export default {
name: 'submit-verification-dialog',
components: {
codemirror
},
props: ['boDefData', 'linkageNoAttrFieldList'],
mounted() {
this.getAllScript()
this.$validator = this.$root.$validator
},
watch: {
checked(val) {
this.$refs.funcTree.filter(val)
}
},
methods: {
// 查询所有的常用脚本
getAllScript() {
const _this = this
flow.getAllScript().then(resp => {
for (let index = 0; index < resp.length; index++) {
const script = resp[index].script
script = script.replace('return ', '')
script = script.replace(';', '')
resp[index].script = "$CommonScripts.getValue('" + script + "')"
}
if (resp.length > 0) {
let obj = {}
obj.label = '常用脚本'
obj.children = []
for (let index = 0; index < resp.length; index++) {
const element = resp[index]
let item = {}
item.helpDesc = element.memo
item.label = element.name
item.value = element.script
obj.children.push(item)
}
_this.functionData.push(obj)
}
})
},
mouseenter(data) {
if (data.helpDesc) {
this.helpDesc = data.helpDesc
}
},
mouseleave(data) {},
handleClose(type) {
//判断是否存在常用脚本
// if(this.formulasDiyJs && this.formulasDiyJs.indexOf("$CommonScripts.")!=-1 && this.formulasDiyJs.substring(0, 1)!="'"){
// this.formulasDiyJs = "'"+this.formulasDiyJs+"'";
// }
if (type !== 'close') {
// 需先校验必填信息
this.$validator.validateAll('verificationForm').then(result => {
if (result) {
this.$emit('onConfirm', this.verification)
this.submitVerificationDialog = false
}
})
return
}
this.submitVerificationDialog = false
},
functionNodeClick(data, treeNode) {
if (this.checked) {
if (data.subValue) {
this.insert(data.subValue, 1)
return
}
}
this.insert(data.value, 1)
},
handleNodeClick(data, treeNode) {
let path = ''
//无属性字段
if (
data.options &&
data.options.noBindModel &&
data.name === 'c_' + data.key
) {
path = 'data.' + data.fieldPath
} else {
//不可自己计算自己
if (!data.nodeType || data.nodeType !== 'field') {
this.$message('选项不是字段')
return
}
if (
!(data.path && data.path.split('.').length < 2) &&
!this.checked &&
this.nodeType === 'main'
) {
this.$message('不可选子表、孙表字段')
return
}
if (
!(data.path && data.path.split('.').length !== 2) &&
this.nodeType === 'sun'
) {
this.$message('不可选子表字段')
return
}
let isMain = treeNode.parent.data.nodeType == 'main'
path = 'data.' + data.path + '.' + data.name
let dataPaths = data.path.split('.')
if (!isMain) {
if (dataPaths.length === 3) {
path = `data.${dataPaths[0]}.${dataPaths[1]}[0].${dataPaths[2]}[0].${data.name}`
} else {
path = `data.${data.path}[0].${data.name}`
}
}
}
this.insert(path)
},
//统计函数相关配置
async insert(myValue, lineIndex) {
const myField = this.$refs.mycode2
myField.codemirror.replaceSelection(myValue)
let line = myField.codemirror.doc.getCursor()
if (lineIndex) {
line.ch = line.ch - lineIndex
myField.codemirror.doc.setCursor(line)
}
myField.codemirror.display.input.focus()
},
handleOpen(item) {
this.submitVerificationDialog = true
if (item) {
this.verification = item
} else {
this.verification = {
name: '',
desc: '',
tips: '',
formulasDiyJs: ''
}
}
this.checked = false
//this.noAttrFields.children = this.linkageNoAttrFieldList
},
filterNode(value, data) {
if (this.checked) {
return data.subValue
}
return true
}
},
data() {
return {
helpDesc: '',
expandAll: true,
submitVerificationDialog: false,
formulasDiyJs: '',
verification: {
name: '',
desc: '',
tips: '',
formulasDiyJs: ''
},
cmOptions2: {
showCursorWhenSelecting: true,
value: '',
mode: 'javascript',
readOnly: false,
smartIndent: true,
tabSize: 2,
theme: 'base16-light',
lineNumbers: true,
line: true,
autofocus: true,
inputStyle: 'textarea'
},
defaultProps: {
children: 'children',
label: 'desc'
},
// noAttrFields: {
// children: [],
// desc: '无属性字段',
// id: '1',
// parentId: '-1'
// },
functionData: [
{
label: '数学函数',
children: [
{
value: '$Formulas.ABS()',
label: 'ABS(绝对值)',
helpDesc:
'ABS函数可以获取一个数的绝对值\n用法:ABS(数字)\n示例:ABS(-8)可以返回8,也就是-8的绝对值'
},
{
value: '$Formulas.AVERAGE()',
label: 'AVERAGE(取平均值)',
helpDesc:
'AVERAGE函数可以获取一组数值的算术平均值\n用法:AVERAGE(数字1,数字2,...)\n示例:AVERAGE({语文成绩},{数学成绩}, {英语成绩})返回三\n门课程的平均分',
subValue: '$Formulas.AVERAGESUB()'
},
{
value: '$Formulas.CEILING()',
label: 'CEILING(将数字增大到最接近原值的指定因数的倍数)',
helpDesc:
'CEILING函数可以将数字增大到最接近原值的指定因数的倍数\n用法:CEILING(数字,因数)\n示例:CEILING(7,6)返回12,因为12比7大的同时,也是6的\n倍数中最接近7的数字'
},
{
value: '$Formulas.COUNT()',
label: 'COUNT(取参数的数量)',
helpDesc:
'COUNT函数可以获取参数的数量\n用法:COUNT(值,值,...)\n示例:COUNT(小明,小王,小张,小李)返回4,也就是人员的数\n量',
subValue: '$Formulas.COUNTSUB()'
},
{
value: '$Formulas.COUNTIF()',
label: 'COUNTIF(取数组中满足条件的参数个数)',
helpDesc:
"COUNTIF函数可以获取数组中满足条件的参数个数\n用法:COUNTIF(数组,'条件')\n示例:COUNTIF(子表单.性别, '女'),可得到子表单中性别填\n的是'女'的数据条数;COUNTIF([1,2,3,4],'>2'),可得到1,2,3,\n4中大于2的数字数量,结果为2。",
subValue: '$Formulas.COUNTIFSUB()'
},
{
value: '$Formulas.FIXED()',
label: 'FIXED(数字舍入到指定的小数位数并输出为文本)',
helpDesc:
"FIXED函数可将数字舍入到指定的小数位数并输出为文本\n用法:FIXED(数字,小数位数)\n示例:FIXED(3.1415,2)返回'3.14'"
},
{
value: '$Formulas.FLOOR()',
label: 'FLOOR(将数字减小到最接近原值的指定因数的倍数)',
helpDesc:
'FLOOR函数可将数字减小到最接近原值的指定因数的倍数\n用法:FLOOR(数字,因数)\n示例:FLOOR(7,6)返回6,因为6比7小的同时,也是6的倍数\n中最接近7的数字'
},
{
value: '$Formulas.INT()',
label: 'INT(取一个数的整数部分)',
helpDesc:
'INT函数可以获取一个数的整数部分\n用法:INT(数字)\n示例:INT(3.1415)返回3,也就是3.1415的整数部分'
},
{
value: '$Formulas.LARGE()',
label: 'LARGE(取数据集中第k个最大值)',
helpDesc:
"LARGE函数可以获取数据集中第k个最大值\n用法:LARGE(数组,k)\n示例:LARGE({学生成绩.数学成绩},1)返回子表单'学生成绩'\n中排名第1的'数学成绩'",
subValue: '$Formulas.LARGESUB()'
},
{
value: '$Formulas.LOG()',
label: 'LOG(指定底数返回数字的对数)',
helpDesc:
'LOG函数可以根据指定底数返回数字的对数\n用法:LOG(数字,底数)\n示例:LOG(100,10)返回2,也就是以10为底数100的对数'
},
{
value: '$Formulas.MAX()',
label: 'MAX(最大值)',
helpDesc:
'MAX函数可以获取一组数值的最大值\n用法:MAX(数字1,数字2,...)\n示例:MAX({语文成绩},{数学成绩},{英语成绩})返回三门课程\n中的最高分',
subValue: '$Formulas.MAXSUB()'
},
{
value: '$Formulas.MIN()',
label: 'MIN(最小值)',
helpDesc:
'MIN函数可以获取一组数值的最小值\n用法:MIN(数字1,数字2,...)\n示例:MIN({语文成绩},{数学成绩},{英语成绩})返回三门课程\n中的最低分',
subValue: '$Formulas.MINSUB()'
},
{
value: '$Formulas.MOD()',
label: 'MOD(取余数)',
helpDesc:
'MOD函数可以获取两数相除的余数\n用法:MOD(被除数,除数)\n示例:MOD(4,3)返回1,也就是4/3的余数'
},
{
value: '$Formulas.POWER()',
label: 'POWER(乘幂)',
helpDesc:
'POWER函数可以获取数字乘幂的结果\n用法:POWER(数字,指数)\n示例:POWER(3,2)返回9,也就是3的2次方'
},
{
value: '$Formulas.PRODUCT()',
label: 'PRODUCT(乘积)',
helpDesc:
'PRODUCT函数可以获取一组数值的乘积\n用法:PRODUCT(数字1,数字2,...)\n示例:PRODUCT({单价}, {数量})获取总价,也就是单价和\n数量的乘积',
subValue: '$Formulas.PRODUCTSUB()'
},
{
value: '$Formulas.RAND()',
label: 'RAND(返回大于等于0且小于1的均匀分布随机实数)',
helpDesc:
'RAND函数可返回大于等于0且小于1的均匀分布随机实数\n用法:RAND()\n示例:RAND()返回0.424656'
},
{
value: '$Formulas.ROUND()',
label: 'ROUND(四舍五入到指定的位数)',
helpDesc:
'ROUND函数可以将数字四舍五入到指定的位数\n用法:ROUND(数字,数字位数)\n示例:ROUND(3.1485,2)返回3.15'
},
{
value: '$Formulas.SMALL()',
label: 'SMALL(返回数据集中第k个最小值)',
helpDesc:
"SMALL函数可以返回数据集中第k个最小值\n用法:SMALL(数组,k)\n示例:SMALL({学生成绩.数学成绩}, 1)返回子表单'学生成\n绩'中排名倒数第一的'数学成绩'",
subValue: '$Formulas.SMALLSUB()'
},
{
value: '$Formulas.SQRT()',
label: 'SQRT(数字的正平方根)',
helpDesc:
'SQRT函数可以获取一个数字的正平方根\n用法:SQRT(数字)\n示例:SQRT(9)返回3,也就是9的正平方根'
},
{
value: '$Formulas.SUM()',
label: 'SUM(求和)',
helpDesc:
'SUM函数可以获取一组数值的总和\n用法:SUM(数字1,数字2,...)\n示例:SUM({语文成绩},{数学成绩}, {英语成绩})返回三门课\n程的总分',
subValue: '$Formulas.SUMSUB()'
},
{
value: '$Formulas.SUMPRODUCT()',
label: 'SUMPRODUCT(加权求和)',
helpDesc:
'SUMPRODUCT函数可以将数组间对应的元素相乘,并返\n回乘积之和,适用于加权求和\n用法:SUMPRODUCT(数组,数组...)\n示例:SUMPRODUCT([1,2,3],[0.1,0.2,0.3])返回1.4,也就\n是 1×0.1 + 2×0.2 + 3×0.3的值',
subValue: '$Formulas.SUMPRODUCTSUB()'
}
]
},
{
label: '文本函数',
children: [
{
value: '$Formulas.CONCATENATE()',
label: 'CONCATENATE(多个文本合并成一个文本)',
helpDesc:
"CONCATENATE函数可以将多个文本合并成一个文本\n用法:CONCATENATE(文本1,文本2,...)\n示例:CONCATENATE('三年二班','周杰伦')会返回'三年二班周杰伦'"
},
{
value: '$Formulas.COUNTNO()',
label: 'COUNTNO(计算选择记录数)',
helpDesc:
"COUNTNO函数可以将对话框、关联查询等选择记录数自动计算\n用法:COUNTNO(文本,'分隔符')\n示例:COUNTNO('张三,李四,王五',',')会返回'3'"
},
{
value: '$Formulas.CHAR()',
label: 'CHAR(计算机字符集的数字代码转换为对应字符)',
helpDesc:
'CHAR函数可以将计算机字符集的数字代码转换为对应字符\n用法:CHAR(数字)\n示例:CHAR(10)会返回换行字符'
},
{
value: '$Formulas.EXACT()',
label: 'EXACT(文本比较)',
helpDesc:
'EXACT函数可以比较两个文本是否完全相同,完全相同则\n返回true,否则返回false\n用法:EXACT(文本1, 文本2)\n示例:EXACT(手机号,中奖手机号),如果两者相同,返\n回true,如果不相同,返回false'
},
{
value: '$Formulas.ISEMPTY()',
label: 'ISEMPTY(判断值是否为空)',
helpDesc:
'ISEMPTY函数可以用来判断值是否为空文本、空对象或者空数组\n用法:ISEMPTY(文本)\n示例:略'
},
{
value: '$Formulas.LEFT()',
label: 'LEFT(从文本开始返回指定个数的字符)',
helpDesc:
"LEFT函数可以从一个文本的第一个字符开始返回指定个数的字符\n用法:LEFT(文本,文本长度)\n示例:LEFT('三年二班周杰伦',2)返回'三年',也就是'三年二班周杰伦'的从左往右的前2个字符"
},
{
value: '$Formulas.LEN()',
label: 'LEN(取文本中的字符个数)',
helpDesc:
"LEN函数可以获取文本中的字符个数\n用法:LEN(文本)\n示例:LEN('朝辞白帝彩云间')返回7,因为这句诗中有7个字符"
},
{
value: '$Formulas.LOWER()',
label: 'LOWER(字母由大写转为小写)',
helpDesc:
"LOWER函数可以将一个文本中的所有大写字母转换为小写字母\n用法:LOWER(文本)\n示例:LOWER('JAYZ')返回'jayz'"
},
{
value: '$Formulas.MID()',
label: 'MID(指定位置开始的指定数目的字符)',
helpDesc:
"MID返回文本中从指定位置开始的指定数目的字符\n用法:MID(文本,开始位置_数字,指定数目)\n示例:MID('宏天快速开发平台',3,6)返回'快速开发平台'"
},
{
value: '$Formulas.REPLACE()',
label: 'REPLACE(替换文本内容)',
helpDesc:
"REPLACE函数可以根据指定的字符数,将部分文本替换为不同的文本\n用法:REPLACE(文本,开始位置,替换长度,新文本)\n示例:REPLACE('宏天快速开发平台',3,6,'企业数据管理平台')返回'宏天企业数据管理平台'"
},
{
value: '$Formulas.REPT()',
label: 'REPT(文本重复使用)',
helpDesc:
"REPT函数可以将文本重复一定次数\n用法:REPT(文本,重复次数)\n示例:REPT('宏天',3)返回'宏天宏天宏天'"
},
{
value: '$Formulas.RIGHT()',
label: 'RIGHT(取文本指定内容)',
helpDesc:
"RIGHT函数可以获取由给定文本右端指定数量的字符构成的文本值\n用法:RIGHT(文本,文本长度)\n示例:RIGHT('三年二班周杰伦',3)返回'周杰伦',也就是'三年二班周杰伦'从右往左的前3个字符"
},
// {
// value: "$Formulas.SEARCH()",
// label: "SEARCH",
// helpDesc:"SEARCH函数可以获取文本1在文本2中的开始位置\n用法:SEARCH(文本1,文本2)\n示例:SEARCH('2016','宏天2016')返回4"
// },{
// value: "$Formulas.SPLIT()",
// label: "SPLIT",
// helpDesc:"SPLIT函数可以将文本按指定分割符分割成数组\n用法:SPLIT(文本,分隔符_文本)\n示例:SPLIT('宏天-快速开发平台','-')返回'宏天,快速开发平台'"
// },
{
value: '$Formulas.TEXT()',
label: 'TEXT(数字转化成文本)',
helpDesc:
"TEXT函数可以将数字转化成文本\n用法:TEXT(数字)\n示例:TEXT(3.1415)返回'3.1415'"
},
{
value: '$Formulas.TRIM()',
label: 'TRIM(删除首尾空格)',
helpDesc:
"TRIM函数可以删除文本首尾的空格\n用法:TRIM(文本)\n示例:TRIM(' 宏天 ')返回'宏天'"
},
{
value: '$Formulas.UPPER()',
label: 'UPPER(小写字母转换成大写)',
helpDesc:
"UPPER函数可以将一个文本中的所有小写字母转换为大写字母\n用法:UPPER(文本)\n示例:UPPER('jayz')返回'JAYZ'"
},
{
value: '$Formulas.VALUE()',
label: 'VALUE(文本转为数字)',
helpDesc:
"VALUE函数可以将文本转化为数字\n用法:VALUE(文本)\n示例:VALUE('3.1415')返回3.1415"
}
]
},
{
label: '日期函数',
children: [
{
value: '$Formulas.DATE()',
label: 'DATE(时间戳转换为日期对象)',
helpDesc:
'DATE函数可以将时间戳转换为日期对象\n用法:DATE(时间戳)\n示例:略'
},
{
value: '$Formulas.DATEDELTA()',
label: 'DATEDELTA(指定日期加/减指定天数)',
helpDesc:
'DATEDELTA函数可以将指定日期加/减指定天数\n用法:DATEDELTA(指定日期,需要加减的天数)\n示例:略'
},
{
value: '$Formulas.HALFDAY()',
label: 'HALFDAY(半天计算)',
helpDesc:
'HALFDAY函数计算两个日期间天数,最小维度0.5,不满半天按半天计算\n用法:HALFDAY(开始日期,结束日期)\n示例:略'
},
{
value: '$Formulas.COUNTHOURS()',
label: 'COUNTHOURS(两个日期间的小时数)',
helpDesc:
'COUNTHOURS函数获取两个日期间的小时数\n用法:COUNTHQURS(开始时间,结束时间)\n示例:略'
},
{
value: '$Formulas.DAY()',
label: 'DAY(取日期在当月的第几日)',
helpDesc:
'DAY函数可以获取某日期是当月的第几日\n用法:DAY(时间戳)\n示例:略'
},
{
value: '$Formulas.DAYS()',
label: 'DAYS(取天数差值)',
helpDesc:
'DAYS函数可以返回两个日期之间相差的天数。\n用法:DAYS(开始日期,结束日期)\n示例:略'
},
{
value: '$Formulas.DAYS360()',
label: 'DAYS360(按360天取天数差)',
helpDesc:
'DAYS360按照一年 360 天的算法,返回两个日期间相差的天数\n用法:DAYS360(开始日期,结束日期)\n示例:略'
},
{
value: '$Formulas.HOUR()',
label: 'HOUR(小时数)',
helpDesc:
'HOUR函数可以返回某日期的小时数\n用法:HOUR(时间戳)\n示例:略'
},
{
value: '$Formulas.ISOWEEKNUM()',
label: 'ISOWEEKNUM(指定日期在全年中的ISO周数)',
helpDesc:
'ISOWEEKNUM函数可以返回指定日期在全年中的ISO周数\n用法:ISOWEEKNUM(指定日期)\n示例:略'
},
{
value: '$Formulas.MINUTE()',
label: 'MINUTE(分钟数)',
helpDesc:
'MINUTE函数可以返回某日期的分钟数\n用法:MINUTE(时间戳)\n示例:略'
},
{
value: '$Formulas.MONTH()',
label: 'MONTH(月份)',
helpDesc: 'MONTH返回某日期的月份\n用法:MONTH(时间戳)\n示例:略'
},
// {
// value: "$Formulas.NOW()",
// label: "NOW",
// helpDesc:"NOW函数可以获取当前时间\n用法:NOW()\n示例:略"
// },
{
value: '$Formulas.SECOND()',
label: 'SECOND(秒数)',
helpDesc:
'SECOND函数可以返回某日期的秒数\n用法:SECOND(时间戳)\n示例:略'
},
// {
// value: "$Formulas.SYSTIME()",
// label: "SYSTIME",
// helpDesc:"SYSTIME函数可以获取当前服务器时间\n用法:SYSTIME()\n示例:略"
// },
{
value: '$Formulas.TIME()',
label: 'TIME(特定时间的十进制数字)',
helpDesc:
'TIME函数可以返回特定时间的十进制数字\n用法:TIME(时_数字,分_数字,秒_数字)\n示例:略'
},
{
value: '$Formulas.TIMESTAMP()',
label: 'TIMESTAMP(将日期对象转换成时间戳)',
helpDesc:
'TIMESTAMP函数可以将日期对象转换成时间戳。\n用法:TIMESTAMP(日期)\n示例:略'
},
{
value: '$Formulas.TODAY()',
label: 'TODAY(取当天日期)',
helpDesc: 'TODAY函数可以返回今天\n用法:TODAY()\n示例:略'
},
{
value: '$Formulas.WEEKNUM()',
label: 'WEEKNUM(返回指定日期在当年是第几周)',
helpDesc:
'WEEKNUM函数可以返回指定日期在当年是第几周\n用法:WEEKNUM(指定日期)\n示例:略'
},
{
value: '$Formulas.WEEKDAY()',
label: 'WEEKDAY(返回指定日期是星期几)',
helpDesc:
"WEEKDAY函数可以返回指定日期是星期几\n用法:WEEKDAY(指定日期, 是否返回数字)\n示例:$Formulas.WEEKDAY(date) 时返回'星期一'\n$Formulas.WEEKDAY(date, true) 时返回'1'"
},
{
value: '$Formulas.YEAR()',
label: 'YEAR(年份)',
helpDesc:
"YEAR函数可以返回某日期的年份\n用法:YEAR(时间戳)\n示例:YEAR('2020-10-01') 或者是YEAR('1601481600') 得到2020"
}
]
},
{
label: '逻辑函数',
children: [
{
value: '$Formulas.AND()',
label: 'AND(与运算)',
helpDesc:
'如果所有参数都为真,AND函数返回布尔值true,否则返回布尔值 false\n用法:AND(逻辑表达式1,逻辑表达式2,...)\n示例:AND(语文成绩>90,数学成绩>90,英语成绩>90),如果三门课成绩都> 90,返回true,否则返回false'
},
{
value: '$Formulas.FALSE()',
label: 'FALSE(布尔值false)',
helpDesc: 'FALSE函数返回布尔值false\n用法:FALSE()\n示例:略'
},
{
value: '$Formulas.IF()',
label: 'IF(判断)',
helpDesc:
"IF函数判断一个条件能否满足;如果满足返回一个值,如果不满足则返回另外一个值\n用法:IF(逻辑表达式,为true时返回的值,为false时返回的值)\n示例:IF(语文成绩>60,'及格','不及格'),当语文成绩>60时返回及格,否则返回不及格。"
},
{
value: '$Formulas.NOT()',
label: 'NOT(返回与指定表达式相反的布尔值)',
helpDesc:
'NOT函数返回与指定表达式相反的布尔值。\n用法:NOT(逻辑表达式)\n示例:NOT(语文成绩>60),如果语文成绩大于60返回false,否则返回true'
},
{
value: '$Formulas.OR()',
label: 'OR(或运算)',
helpDesc:
'如果任意参数为真,OR 函数返回布尔值true;如果所有参数为假,返回布尔值false。\n用法:OR(逻辑表达式1,逻辑表达式2,...)\n示例:OR(语文成绩>90,数学成绩>90,英语成绩>90),任何一门课成绩> 90,返回true,否则返回false'
},
{
value: '$Formulas.TRUE()',
label: 'TRUE(布尔值true)',
helpDesc: 'TRUE函数返回布尔值true\n用法:TRUE()\n示例:略'
},
{
value: '$Formulas.XOR()',
label: 'XOR(异或运算)',
helpDesc:
'XOR函数可以返回所有参数的异或值\n用法:XOR(逻辑表达式1, 逻辑表达式2,...)\n示例:XOR(语文成绩>90,数学成绩>90),如果两门成绩都>90,返回false;如果两门成绩都<90,返回false;如果其中一门>90,另外一门<90,返回true'
}
]
},
{
label: '高级函数',
children: [
{
value: '$Formulas.CURRENCY()',
label: 'CURRENCY(转换指定字段为大写人民币)',
helpDesc: '指定一个字段,把此字段转换为人民币大写格式'
},
{
value: '$Formulas.THOUSAND()',
label: 'THOUSAND(转换指定字段为千分符的字符串)',
helpDesc: '指定一个字段,把此字段数字格式成带有千分符的字符串'
}
]
}
],
checked: false,
nodeType: '',
examplesOptions: {
value: ``,
mode: 'javascript',
smartIndent: true,
tabSize: 2,
theme: 'base16-light',
lineNumbers: false, // 是否显示行数
lineWrapping: true, // 是否自动换行
styleActiveLine: true, // line选择是是否加亮
matchBrackets: true, // 括号匹配
line: true,
readOnly: true,
autoRefresh: true
},
examples:`子表孙表校验使用说明:
返回结果必须是一个数组对象:[{valid:true}//返回成功,{valid:false}//返回失败] 或者
[{valid:true},{valid:false,index:index(子表下标),tableName:'子表名称',sunIndex:sunIndex(孙表下标),sunTableName:'孙表名称',fieldName:'校验字段名称'}]
子表示例:data.yzjsxyjb.sub_yzjbzst233(校验的子表)
const result = data.yzjsxyjb.sub_yzjbzst233.map((item,index)=>{
return item.zb2 == '3' ? {valid:true} : {valid:false,index:index,tableName:'验证脚本子实体',fieldName:'子表2'}
})
return result
孙表示例:data.yzjsxyjb.sub_yzjbzst233[index](index,第几行中的孙表).sub_sb1233(校验的孙表)
let result = []
data.yzjsxyjb.sub_yzjbzst233.map((item,index)=>{
result = data.yzjsxyjb.sub_yzjbzst233[index].sub_sb1233.map((sun,sunIndex)=>{
return sun.sb1 == '6' ? {valid:true} : {valid:false,index:index,sunIndex:sunIndex,tableName:'验证脚本子实体',sunTableName:'孙表1233',fieldName:'孙表2'}
})
})
return result`
}
}
}
</script>
<style lang="scss" scoped>
@import '@/assets/css/element-variables.scss';
@import '@/assets/css/form-editor.scss';
.code >>> .CodeMirror {
font-family: monospace;
height: 150px !important;
color: black;
direction: ltr;
}
</style>