formui-vue2-vistastory 0.1.26

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/FormUiForm.vue ADDED
@@ -0,0 +1,529 @@
1
+ <template>
2
+ <div class="hf-form-ui-form" >
3
+ <!-- <el-button type="primary" @click="$router.back(-1)"-->
4
+ <!-- size="mini">返回-->
5
+ <!-- </el-button>-->
6
+ <!--{{ruleForm}}-->
7
+ <!--{{ruleForm}}-->
8
+ <!--{{labelWidthCurrent}}-->
9
+ <div v-if="loadSuccess">
10
+ <el-form :model="ruleForm" ref="ruleForm" style="margin-top: 10px;"
11
+ :label-width="labelWidthCurrent"
12
+ size="" :rules="rules" >
13
+
14
+ <!--{{formuiFields}}-->
15
+ <div v-for="fieldItem in formuiFields">
16
+ <!--{{ruleForm[fieldItem.name]}}___-->
17
+ <!--{{fieldItem.name}}-->
18
+ <span v-if="fieldItem.valueType=='HIDDEN'">
19
+
20
+ <!--<el-input-number v-model="ruleForm[fieldItem.name]" controls-position="right" :min="-99999" :max="99999"></el-input-number>-->
21
+ </span>
22
+ <!--<span v-else-if="getIsHide(fieldItem,ruleForm)">-->
23
+ <!--&lt;!&ndash;隐藏&ndash;&gt;-->
24
+ <!--</span>-->
25
+
26
+ <!--:style="getIsHide(fieldItem,ruleForm)?'display: none':''"-->
27
+ <el-form-item
28
+ :style="getIsHide(fieldItem,ruleForm)?'height:0px;display:block;position:fixed;opacity:0;':''"
29
+
30
+ :label="fieldItem.title"
31
+ :prop="fieldItem.name"
32
+
33
+ v-else>
34
+ <!--{{fieldItem.name}}-->
35
+ <el-tooltip class="formui_notes" effect="dark" :content="fieldItem.notes" placement="top-start" v-if="fieldItem.notes">
36
+ <span class="el-icon-info"></span>
37
+ </el-tooltip>
38
+ <!--{{fieldItem.valueType}}-->
39
+
40
+ <span v-if="fieldItem.foreignStyleClass!='FormUiStyle'">
41
+ <!--{{fieldItem.foreignStyleClass}}-->
42
+ <!--{{fieldItem.name}}_{{ruleForm[fieldItem.name]}}-->
43
+ <!--v-bind:multiple="'DEFAULT'==fieldItem.valueType?true:false"-->
44
+ <component v-bind:is="'formUiStyleSelect'"
45
+ ref="formUiStyleSelect"
46
+ v-bind:inputType="fieldItem.valueType=='CHECKBOX'?'checkbox':'select'"
47
+ v-bind:defaultLabel="'请选择'"
48
+ v-bind:required="fieldItem.required"
49
+ v-bind:fieldName="fieldItem.name"
50
+ v-bind:beanName="fieldItem.foreignStyleClass"
51
+ v-bind:fieldValue="ruleForm[fieldItem.name]"
52
+ @setFieldValue="setFieldValue"
53
+ ></component>
54
+
55
+ </span>
56
+ <span v-else-if="fieldItem.foreignServiceClass!='FormUiForeignService'">
57
+
58
+ <component v-bind:is="'formUiForeignSelect'"
59
+ :ref="'formUiForeignSelect'+fieldItem.name"
60
+ v-bind:multiple="'DEFAULT'==fieldItem.valueType?true:false"
61
+ v-bind:defaultLabel="'无'"
62
+ v-bind:fieldName="fieldItem.name"
63
+ v-bind:beanName="fieldItem.foreignServiceClass"
64
+ v-bind:fieldValue="ruleForm[fieldItem.name]"
65
+ v-bind:fieldItem="fieldItem"
66
+ v-bind:formData="ruleForm"
67
+ @setFieldValue="setFieldValue"
68
+ ></component>
69
+
70
+ </span>
71
+ <!--formUiForeignSelect-->
72
+ <span v-else-if="fieldItem.valueType=='INTEGER'">
73
+
74
+ <el-input-number v-model="ruleForm[fieldItem.name]" controls-position="right" :min="-99999" :max="99999" :controls="false" ></el-input-number>
75
+ </span>
76
+
77
+ <span v-else-if="fieldItem.valueType=='PERCENT'">
78
+
79
+ <el-input-number v-model="ruleForm[fieldItem.name]" controls-position="right" :min="-100" :max="100" :controls="false" style="width:80px;" ></el-input-number>%
80
+ </span>
81
+ <span v-else-if="fieldItem.valueType=='MONEY'">
82
+ <el-input-number v-model="ruleFormMoney[fieldItem.name]" controls-position="right" :min="-99999" :max="99999" :controls="false"></el-input-number>
83
+ </span>
84
+ <span v-else-if="fieldItem.valueType=='STRING'">
85
+ <el-input style="width: 100%" :placeholder="'请输入'+fieldItem.title" name="title"
86
+ v-model="ruleForm[fieldItem.name]"
87
+ ></el-input>
88
+ </span>
89
+ <span v-else-if="fieldItem.valueType=='TEXT'">
90
+ <el-input style="width: 100%" :placeholder="'请输入'+fieldItem.title" name="title"
91
+ v-model="ruleForm[fieldItem.name]"
92
+ type="textarea"
93
+ ></el-input>
94
+ </span>
95
+ <span v-else-if="fieldItem.valueType=='DATETIME'">
96
+ <el-date-picker
97
+ v-model="ruleForm[fieldItem.name]"
98
+ type="datetime"
99
+ placeholder="选择日期" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd HH:mm:ss" />
100
+ </span>
101
+
102
+ <span v-else-if="fieldItem.valueType=='DATE_BEGIN'">
103
+ <el-date-picker
104
+ v-model="ruleForm[fieldItem.name]"
105
+ type="date"
106
+ placeholder="选择日期" value-format="yyyy-MM-dd" format="yyyy-MM-dd" />
107
+ </span>
108
+ <span v-else-if="fieldItem.valueType=='DATE_END'">
109
+ <el-date-picker
110
+ v-model="ruleForm[fieldItem.name]"
111
+ type="date"
112
+ placeholder="选择日期" value-format="yyyy-MM-dd" format="yyyy-MM-dd" />
113
+ </span>
114
+
115
+ <span v-else-if="fieldItem.valueType=='MONTH_BEGIN'">
116
+ <el-date-picker
117
+ v-model="ruleForm[fieldItem.name]"
118
+ type="month"
119
+ placeholder="选择日期" value-format="yyyy-MM" format="yyyy-MM" />
120
+ </span>
121
+ <span v-else-if="fieldItem.valueType=='MONTH_END'">
122
+ <el-date-picker
123
+ v-model="ruleForm[fieldItem.name]"
124
+ type="month"
125
+ placeholder="选择日期" value-format="yyyy-MM" format="yyyy-MM" />
126
+ </span>
127
+
128
+ <span v-else-if="fieldItem.valueType=='FILE'">
129
+ <!--{{ruleForm[fieldItem.name+'Url']}}-->
130
+ <span v-if="!fieldItem.fileRule">需要设置fileRule</span>
131
+ <component
132
+ v-else
133
+ v-bind:is="'FormUiFileUpload'"
134
+ v-bind:fieldName="fieldItem.name"
135
+ v-bind:imageUrl="ruleForm[fieldItem.name+'Url']"
136
+ v-bind:imagePath="ruleForm[fieldItem.name]"
137
+ v-bind:initObj="fieldItem.name"
138
+ v-bind:filesCountLimit="fieldItem.fileRule.filesCountLimit"
139
+ v-bind:accept="fieldItem.fileRule.extensionNames"
140
+ v-bind:limitSize="fieldItem.fileRule.fileSizeLimit"
141
+ v-bind:isPreviewImg="fieldItem.fileRule.isPreviewImg"
142
+ ref="ruleForm"
143
+ @setFieldValue="setFieldValue">
144
+ </component>
145
+
146
+ </span>
147
+ <span v-else-if="fieldItem.valueType=='RICH_TEXT'">
148
+ <!--富文本编辑-->
149
+
150
+ <div style="line-height:normal;font-size: unset;">
151
+ <component
152
+
153
+ v-bind:is="'FormUiRichText'"
154
+ v-bind:fieldName="fieldItem.name"
155
+ v-bind:fieldContent="ruleForm[fieldItem.name]"
156
+ ref="ruleForm"
157
+ @setFieldValue="setFieldValue">
158
+ </component>
159
+
160
+ <!--<quill-editor ref="myTextEditor" v-model="ruleForm[fieldItem.name]" :options="editorOption" style="" ></quill-editor>-->
161
+ </div>
162
+ <!--<el-date-picker-->
163
+ <!--v-model="ruleForm[fieldItem.name]"-->
164
+ <!--type="month"-->
165
+ <!--placeholder="选择日期" value-format="yyyy-MM" format="yyyy-MM" />-->
166
+ </span>
167
+ <span v-else-if="fieldItem.valueType=='TAG'">
168
+
169
+ <el-tag
170
+ :key="tag"
171
+ v-for="tag in ruleForm[fieldItem.name]"
172
+ closable
173
+ :disable-transitions="false"
174
+ @close="handleClose(ruleForm[fieldItem.name],tag)">
175
+ {{tag}}
176
+ </el-tag>
177
+
178
+ <el-input
179
+ class="input-new-tag"
180
+ v-if="inputVisible"
181
+ v-model="inputValue"
182
+ ref="saveTagInput"
183
+ size="small"
184
+ @keyup.enter.native="handleInputConfirm([fieldItem.name])"
185
+ @blur="handleInputConfirm([fieldItem.name])"
186
+ >
187
+ </el-input>
188
+ <el-button v-else class="button-new-tag" size="small" @click="showInput">+ 新标签</el-button>
189
+ </span>
190
+ <span v-else>
191
+ {{fieldItem.valueType}}
192
+ </span>
193
+
194
+
195
+
196
+ </el-form-item>
197
+ </div>
198
+
199
+
200
+ <!--<el-form-item label="账单日期" prop="returnedPlanTime">-->
201
+ <!--<el-date-picker-->
202
+ <!--v-model="queryParams.returnedPlanTime"-->
203
+ <!--ref="queryParams.returnedPlanTime"-->
204
+ <!--type="datetime"-->
205
+ <!--placeholder="选择日期" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd HH:mm:ss"/>-->
206
+ <!--</el-form-item>-->
207
+
208
+ <!--<el-form-item label="备注">-->
209
+ <!--<el-input style="width: 220px" placeholder="备注" name="remarks" v-model="queryParams.remarks"-->
210
+ <!--ref="queryParams.remarks"></el-input>-->
211
+ <!--</el-form-item>-->
212
+
213
+ <el-form-item>
214
+ <el-button type="primary" @click="submitForm('ruleForm')">{{btnTitleStr}}</el-button>
215
+ </el-form-item>
216
+
217
+ </el-form>
218
+ </div>
219
+ </div>
220
+ </template>
221
+
222
+ <script>
223
+
224
+ import mathUtil from './service/lib/math'
225
+ import formuiService from './service/formui/FormuiService'
226
+ import formUiStyleSelect from './widget/FormUiStyleSelect.vue'
227
+ import formUiForeignSelect from './widget/FormUiForeignSelect.vue'
228
+ import FormUiFileUpload from './widget/FormUiFileUpload.vue'
229
+ import FormUiRichText from './widget/FormUiRichText.vue'
230
+ import moment from 'moment'
231
+
232
+ // 组件导入
233
+
234
+ // Quill.register('modules/eeSourceBtn', eeSourceBtn);
235
+
236
+ export default {
237
+ name: 'FormUiForm',
238
+ props: ['beanName','removeFileds','ruleFormSrc','btnTitle','labelWidth'],
239
+ components:{FormUiFileUpload,formUiStyleSelect,formUiForeignSelect,FormUiRichText},
240
+ data () {
241
+ return {
242
+ labelWidthCurrent:'auto',
243
+ inputVisible:false,
244
+ inputValue:'',
245
+ btnTitleStr:'确定',
246
+ loadSuccess:false,
247
+ // removeFileds:[],
248
+ rules:{},
249
+ ruleForm:{},
250
+ ruleFormMoney:{},
251
+ // ruleFormTime:{},
252
+ formuiFields: [], // 渠道类型
253
+ isHaveChannel: false,
254
+ tt:'',
255
+ }
256
+ },
257
+
258
+ methods: {
259
+ onEditorChange({ editor, html, text }) {
260
+ this.content = html;
261
+ },
262
+ uploadImg (newimagePath, newimageUrl,name) {
263
+ this.ruleForm[name] = newimagePath
264
+ this.ruleForm[name+'Url'] = newimageUrl
265
+ // console.log('imagePath=' + imagePath)
266
+ // console.log('imageUrl=' + imageUrl)
267
+ },
268
+ // 提交
269
+ submitForm (formName) {
270
+ // console.log(this.queryParams)
271
+ let that = this
272
+
273
+ // alert(that.formuiFields.length)
274
+ // console.log(that.formuiFields)
275
+ for(let i=0;i< that.formuiFields.length;i++){
276
+ let fieldItem=that.formuiFields[i]
277
+ // alert(fieldItem.name)
278
+ if(fieldItem.valueType=='MONEY'){
279
+ // alert(mathUtil.methods.mul)
280
+ if(that.ruleFormMoney[fieldItem.name]){
281
+ that.ruleForm[fieldItem.name]=mathUtil.mul(that.ruleFormMoney[fieldItem.name],100)
282
+ }
283
+
284
+ }else if(fieldItem.valueType=='DATETIME'){
285
+ // alert(1)
286
+ // alert(that.ruleFormTime[fieldItem.name])
287
+ // that.ruleForm[fieldItem.name]=that.ruleFormTime[fieldItem.name]
288
+ }
289
+
290
+ //alert(that.removeFileds+'__'+fieldItem.name)
291
+ // if(that.removeFileds.indexOf(fieldItem.name)!=-1){
292
+ // alert(fieldItem.name)
293
+ // delete that.ruleForm[fieldItem.name]
294
+ // }
295
+ }
296
+ // alert(4444)
297
+ // alert(this.$refs[formName].validate())
298
+ try{
299
+ this.$refs[formName].validate((valid) => {
300
+ // alert(22)
301
+ if (valid) {
302
+ // alert(33)
303
+ this.$emit('submitForm', this.ruleForm)
304
+ }
305
+ })
306
+ }catch (e){
307
+ alert(e)
308
+ }
309
+
310
+ // return
311
+
312
+
313
+ },
314
+ setFieldValue:function (key,value) {
315
+ let that=this
316
+ // alert(key)
317
+ this.$set(this.ruleForm,key,value)
318
+
319
+ // 多级关联参数
320
+ this.loadSuccess=false
321
+ for(let i=0;i< that.formuiFields.length;i++) {
322
+ let fieldItem = that.formuiFields[i]
323
+ // alert(0)
324
+ if(fieldItem.joinItems){
325
+ // alert(1)
326
+ for(let j=0;j<fieldItem.joinItems.length;j++){
327
+ if(fieldItem.joinItems[j].parentFieldName===key){
328
+ // alert(1)
329
+ that.formuiFields[i].joinItems[j].value=value
330
+ // console.log('formUiForeignSelect'+that.formuiFields[i].name+'<<<<')
331
+ if(that.$refs['formUiForeignSelect'+that.formuiFields[i].name]){
332
+ that.$refs['formUiForeignSelect'+that.formuiFields[i].name][0].updateJsonList(that.formuiFields[i].joinItems)
333
+
334
+ }
335
+
336
+ // that.$set(that.formuiFields[i].joinItems[j],'value',value)
337
+ }
338
+
339
+ }
340
+
341
+ }
342
+
343
+ }
344
+ this.loadSuccess=true
345
+
346
+ //手动验证
347
+ // let kv={}
348
+ // kv['publish']=value
349
+
350
+
351
+ },
352
+ formatTime(date){
353
+ return moment(date).format("YYYY-MM-DD HH:mm:ss");
354
+
355
+ },
356
+ setRules(){
357
+ let that=this
358
+ //表单验证对象,因为创建和编辑都需要验证,所以单独写了方法
359
+ let fields=this.formuiFields
360
+ //console.log('------------------------------------1')
361
+ for(var i=0;i<fields.length;i++){
362
+ // alert(fields[i])
363
+ if(fields[i].required==true){
364
+ // alert(fields[i].name)
365
+ that.rules[fields[i].name]=[
366
+
367
+ { required: true, message: '请输入'+fields[i].title, trigger:['blur','change'] }
368
+ ]
369
+ }
370
+
371
+ }
372
+ // console.log('------------------------------------2')
373
+ // console.log(that.rules)
374
+ // return rules
375
+ },
376
+ getIsHide(fieldItem,ruleForm){
377
+ // alert(1)
378
+ // alert(fieldItem.name+'__'+11)
379
+ if(fieldItem.pre&&fieldItem.pre.length>0){
380
+ for(let i=0;i<fieldItem.pre.length;i++){
381
+ if(ruleForm[fieldItem.pre[i].key]!==parseInt(fieldItem.pre[i].value)){
382
+ // alert(ruleForm[fieldItem.pre[i].key]+'____'+fieldItem.pre[i].value)
383
+ // alert(fieldItem.name+'__hide')
384
+ return true
385
+ }
386
+ }
387
+
388
+ }
389
+ // alert(fieldItem.name+'__show')
390
+ return false
391
+ },
392
+ handleClose(dynamicTags,tag) {
393
+ dynamicTags.splice(dynamicTags.indexOf(tag), 1);
394
+ },
395
+
396
+ showInput() {
397
+ this.inputVisible = true;
398
+ // this.$nextTick(_ => {
399
+ // this.$refs.saveTagInput.$refs.input.focus();
400
+ // });
401
+ },
402
+
403
+ handleInputConfirm(dynamicTags) {
404
+ // alert(dynamicTags)
405
+ let inputValue = this.inputValue;
406
+ if (inputValue) {
407
+ if(!this.ruleForm[dynamicTags]){
408
+ this.ruleForm[dynamicTags]=[]
409
+ }
410
+ this.ruleForm[dynamicTags].push(inputValue);
411
+ }
412
+ this.inputVisible = false;
413
+ this.inputValue = '';
414
+ }
415
+ },
416
+
417
+ created () {
418
+ // console.log('-----------mounted-------------')
419
+ // let isEmpty = util.isStringEmpty(this.$route.query.channelId)
420
+
421
+ let that=this
422
+ if(!this.ruleFormSrc){
423
+ alert('未设置ruleFormSrc!')
424
+ }
425
+ if(this.btnTitle){
426
+ this.btnTitleStr=this.btnTitle
427
+ }
428
+ that.ruleForm=this.ruleFormSrc
429
+ let params={beanName:this.beanName}
430
+ let formuiFieldList=[]
431
+
432
+ if(this.labelWidth){
433
+ this.labelWidthCurrent=this.labelWidth
434
+ }
435
+ // this.ruleForm.fileImg2='formui/2021/05/31/1622449172256.jpg,formui/2021/05/31/1622449172256.jpg'
436
+ // this.ruleForm.fileImg2Url='http://ttest2.oss-cn-hangzhou.aliyuncs.com/formui/2021/05/31/1622449172256.jpg,http://ttest2.oss-cn-hangzhou.aliyuncs.com/formui/2021/05/31/1622449172256.jpg'
437
+ // this.ruleForm.dateTime =1;
438
+ // this.ruleForm.beginTime=122331112;
439
+ // this.ruleForm.beginMonth=123
440
+ // this.ruleForm.fileImgUrl='https://www.baidu.com/img/flexible/logo/pc/result.png';
441
+ formuiService.getFormuiForm(this,params,function (resp) {
442
+
443
+ for(let i=0;i<resp.formuiFields.length;i++){
444
+
445
+ // alert(resp.formuiFields[i].name+'_'+that.removeFileds)
446
+ if(that.removeFileds.indexOf(resp.formuiFields[i].name)==-1){
447
+ // alert(11111)
448
+ formuiFieldList.push(resp.formuiFields[i])
449
+
450
+ let fieldItem=resp.formuiFields[i]
451
+
452
+ //没有默认表单才设置默认值
453
+ if(!that.ruleFormSrc && fieldItem.defaultValue){
454
+ that.$set(that.ruleForm,fieldItem.name,fieldItem.defaultValue)
455
+ // fieldItem.value=fieldItem.defaultValue
456
+ }
457
+
458
+ // alert(fieldItem.valueType)
459
+ if(fieldItem.valueType=='DATETIME'){
460
+ if(that.ruleForm[fieldItem.name]){
461
+ that.$set(that.ruleForm,fieldItem.name,that.formatTime(that.ruleForm[fieldItem.name]))
462
+ }
463
+
464
+ }else if(fieldItem.valueType=='DATE_BEGIN'||fieldItem.valueType=='DATE_END'){
465
+ if(that.ruleForm[fieldItem.name]){
466
+ that.$set(that.ruleForm,fieldItem.name,that.formatTime(that.ruleForm[fieldItem.name]))
467
+ }
468
+
469
+ }else if(fieldItem.valueType=='MONTH_BEGIN'||fieldItem.valueType=='MONTH_END'){
470
+ if(that.ruleForm[fieldItem.name]){
471
+ that.$set(that.ruleForm,fieldItem.name,that.formatTime(that.ruleForm[fieldItem.name]))
472
+ }
473
+
474
+ }else if(fieldItem.valueType=='MONEY'){
475
+ // console.log('111111111111111111111111'+fieldItem.name+'_'+that.ruleForm[fieldItem.name])
476
+ // alert(fieldItem.name+' '+that.ruleForm[fieldItem.name]+' '+that.ruleForm)
477
+ if(that.ruleForm[fieldItem.name]||that.ruleForm[fieldItem.name]===0){
478
+ // that.ruleFormMoney[fieldItem.name]=mathUtil.div(that.ruleForm[fieldItem.name],100)//
479
+ that.$set(that.ruleFormMoney,fieldItem.name,mathUtil.div(that.ruleForm[fieldItem.name],100))
480
+ }else{
481
+ // that.ruleFormMoney[fieldItem.name]=0
482
+ that.$set(that.ruleForm,fieldItem.name,0)
483
+ that.$set(that.ruleFormMoney,fieldItem.name,0)
484
+ }
485
+ // alert(that.ruleForm[fieldItem.name])
486
+ // console.log('22222222222222'+fieldItem.name)
487
+ //
488
+ }
489
+
490
+ }else{
491
+ // alert(resp.formuiFields[i].name)
492
+ }
493
+ }
494
+
495
+ that.formuiFields= formuiFieldList;
496
+
497
+ that.setRules()
498
+ that.loadSuccess=true
499
+ })
500
+ },
501
+
502
+ updated () {
503
+ // console.log('-----------updated-------------')
504
+ },
505
+
506
+ destory () {
507
+
508
+ }
509
+ }
510
+ </script>
511
+
512
+ <style scoped>
513
+ .formui_notes{position: absolute;left: -15px;top:5px; color: #3a87ad;}
514
+ .el-tag + .el-tag {
515
+ margin-left: 10px;
516
+ }
517
+ .button-new-tag {
518
+ margin-left: 10px;
519
+ height: 32px;
520
+ line-height: 30px;
521
+ padding-top: 0;
522
+ padding-bottom: 0;
523
+ }
524
+ .input-new-tag {
525
+ width: 90px;
526
+ margin-left: 10px;
527
+ vertical-align: bottom;
528
+ }
529
+ </style>