Skip to content

Commit b3926c7

Browse files
authored
Merge pull request #106 from zhengxkq/master
发布版本
2 parents 06c2b05 + 87dedeb commit b3926c7

File tree

4 files changed

+125
-62
lines changed

4 files changed

+125
-62
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "form-generator-iview",
3-
"version": "0.0.69-beta",
3+
"version": "0.1.1-beta",
44
"title": "formGeneratorIView",
55
"description": "A form generator with json schema based on iview ui",
66
"keywords": [

src/fieldGenerator.vue

Lines changed: 73 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
:label="field.label"
1818
:prop="field.model"
1919
:required="field.required"
20-
:rules="getRules(field)"
20+
:rules="getRules"
2121
:label-width="field.labelWidth"
2222
:class="itemClasses"
2323
:style="itemStyle"
@@ -161,6 +161,77 @@ export default {
161161
contentShow() {
162162
let content = this.field.labelTip && this.field.labelTip.content || {};
163163
return content.ifShow;
164+
},
165+
getRules() {
166+
const field = this.field;
167+
const type = field.type.toLowerCase();
168+
const subtype = field.subtype;
169+
170+
let rules = [];
171+
if (field.required) {
172+
if (type === 'datepicker' && ['daterange', 'datetimerange'].includes(subtype)) {
173+
rules.push({
174+
validator(rule, value, callback) {
175+
if (value.length === 2 && value[0] && value[1]) {
176+
callback();
177+
}
178+
else {
179+
callback(new Error(field.label + '不可为空'));
180+
}
181+
},
182+
trigger: 'change'
183+
});
184+
}
185+
if (type === 'timepicker' && ['timerange'].includes(subtype)) {
186+
rules.push({
187+
validator(rule, value, callback) {
188+
if (value.length === 2 && value[0] && value[1]) {
189+
callback();
190+
}
191+
else {
192+
callback(new Error(field.label + '不可为空'));
193+
}
194+
},
195+
trigger: 'change'
196+
});
197+
}
198+
if (['logicinput', 'logicselect'].includes(type)) {
199+
rules.push({
200+
validator(rule, value, callback) {
201+
if (value.logic && value.value) {
202+
callback();
203+
}
204+
else {
205+
callback(new Error(field.label + '不可为空'));
206+
}
207+
},
208+
trigger: 'change'
209+
});
210+
}
211+
rules.push({
212+
required: true,
213+
type: getValidType(field),
214+
message: (field.label || field.model) + '不可为空',
215+
trigger: 'change'
216+
});
217+
}
218+
if (field.rules) {
219+
const model = this.form.model;
220+
const validateValue = Object.assign({}, model || {}, this.paramsContainer || {});
221+
if (Object.prototype.toString.call(field.rules) === '[object Array]') {
222+
rules = rules.concat(field.rules);
223+
} else {
224+
Object.keys(field.rules).map(model => {
225+
field.rules[model].map(field => {
226+
if (validateValue[model] === field.value) {
227+
rules = rules.concat(field.rules);
228+
229+
}
230+
});
231+
});
232+
}
233+
}
234+
return rules;
164235
}
165236
},
166237
created() {
@@ -228,62 +299,7 @@ export default {
228299
handelListItemClick(value) {
229300
this.$emit('on-list-item-click', value);
230301
},
231-
getRules(field) {
232-
const type = field.type.toLowerCase();
233-
const subtype = field.subtype;
234-
let rules = [];
235-
if (field.required) {
236-
if (type === 'datepicker' && ['daterange', 'datetimerange'].includes(subtype)) {
237-
rules.push({
238-
validator(rule, value, callback) {
239-
if (value.length === 2 && value[0] && value[1]) {
240-
callback();
241-
}
242-
else {
243-
callback(new Error(field.label + '不可为空'));
244-
}
245-
},
246-
trigger: 'change'
247-
});
248-
}
249-
if (type === 'timepicker' && ['timerange'].includes(subtype)) {
250-
rules.push({
251-
validator(rule, value, callback) {
252-
if (value.length === 2 && value[0] && value[1]) {
253-
callback();
254-
}
255-
else {
256-
callback(new Error(field.label + '不可为空'));
257-
}
258-
},
259-
trigger: 'change'
260-
});
261-
}
262-
if (['logicinput', 'logicselect'].includes(type)) {
263-
rules.push({
264-
validator(rule, value, callback) {
265-
if (value.logic && value.value) {
266-
callback();
267-
}
268-
else {
269-
callback(new Error(field.label + '不可为空'));
270-
}
271-
},
272-
trigger: 'change'
273-
});
274-
}
275-
rules.push({
276-
required: true,
277-
type: getValidType(field),
278-
message: (field.label || field.model) + '不可为空',
279-
trigger: 'change'
280-
});
281-
}
282-
if (field.rules) {
283-
rules = rules.concat(field.rules);
284-
}
285-
return rules;
286-
},
302+
287303
288304
submit(component) {
289305
let field = component.field;

website/page/examples/group-form/config.js

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -762,6 +762,53 @@ export const fields = [
762762
apiParams: ['province'],
763763
model: 'city',
764764
},
765+
{
766+
type: 'Input',
767+
label: '根据model值变换规则',
768+
model: 'inputRule',
769+
rules: {
770+
// input: [{
771+
// value: 'wang',
772+
// rules: [
773+
// {
774+
// type: 'enum',
775+
// enum: ['haha'],
776+
// message: '请填入正确的值'
777+
// }
778+
// ]
779+
// },
780+
// {
781+
// value: 'xxx-1',
782+
// rules: [
783+
// {
784+
// type: 'string',
785+
// // required: true,
786+
// message: '请填写表单信息'
787+
// }
788+
// ]
789+
// }],
790+
paramsContainerTest: [{
791+
value: 'xxx',
792+
rules: [
793+
{
794+
type: 'string',
795+
required: true,
796+
message: '请填写表单信息'
797+
}
798+
]
799+
},
800+
{
801+
value: 'xxx-1',
802+
rules: [
803+
{
804+
type: 'string',
805+
// required: true,
806+
message: '请填写表单信息'
807+
}
808+
]
809+
}]
810+
}
811+
},
765812
{
766813
type: 'Select',
767814
label: '县',
@@ -788,7 +835,7 @@ export const fields = [
788835

789836

790837
export const model = {
791-
input: 'wangbing',
838+
input: 'wang',
792839
'inputForbidden': 'wangbing',
793840
'textarea': '啊啊啊啊啊',
794841
inputMultiple: ['成员1', '成员2'],

website/page/examples/group-form/index.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@ export default {
4040
setTimeout(() => {
4141
this.$set(this.paramsContainer, 'paramsContainerTest', 'xxx-1');
4242
this.model = model;
43-
setTimeout(() => {
44-
this.$set(this.paramsContainer, 'paramsContainerTest', 'xxx-2');
45-
}, 5000);
43+
// setTimeout(() => {
44+
// this.$set(this.paramsContainer, 'paramsContainerTest', 'xxx-2');
45+
// }, 5000);
4646
}, 5000);
4747
},
4848
beforeDestroy() {

0 commit comments

Comments
 (0)