Skip to content

Commit 26339b2

Browse files
committed
2 parents 9d2be77 + 42326c5 commit 26339b2

File tree

18 files changed

+615
-143
lines changed

18 files changed

+615
-143
lines changed

build/webpack.website.dev.config.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@ module.exports = merge(webpackBaseConfig, {
4141

4242
devtool: 'eval-source-map',
4343

44+
resolve: {
45+
alias: {
46+
'@': path.resolve(__dirname, '../website'),
47+
}
48+
},
4449
// 入口
4550
entry: {
4651
main: path.resolve(__dirname, '../website/main'),

package-lock.json

Lines changed: 71 additions & 66 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/fieldGenerator.vue

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,24 @@
2222
:class="itemClasses"
2323
:style="itemStyle"
2424
>
25-
<Icon
26-
v-if="labelTip.icon"
27-
:type="labelTip.icon.name"
28-
:size="labelTip.icon.size"
29-
:color="labelTip.icon.color"
30-
@click="handleIconClick"
31-
@mouseenter.native="handleIconMouseEnter"
32-
@mouseleave.native="handleIconMouseLeave"
33-
/>
34-
<div v-if="contentShow" v-html="labelTip.content.body" />
25+
<div
26+
:class="[labelTipClasses, labelTip.class]"
27+
@mouseenter="handleIconMouseEnter"
28+
@mouseleave="handleIconMouseLeave"
29+
>
30+
<Icon
31+
v-if="labelTip.icon"
32+
:type="labelTip.icon.name"
33+
:size="labelTip.icon.size"
34+
:color="labelTip.icon.color"
35+
@click="handleIconClick"
36+
/>
37+
<div
38+
v-if="contentShow"
39+
:class="labelTipContentClasses"
40+
v-html="labelTip.content.body"
41+
/>
42+
</div>
3543
<component
3644
:is="getFieldCom(field.type)"
3745
:class="classes"
@@ -112,6 +120,12 @@ export default {
112120
itemClasses() {
113121
return `${classPrefix}-form-item`;
114122
},
123+
labelTipClasses() {
124+
return `${classPrefix}-labelTip-wp`;
125+
},
126+
labelTipContentClasses() {
127+
return `${classPrefix}-labelTip-content`;
128+
},
115129
notFormfield() {
116130
return notFormfields.includes(this.field.type);
117131
},
@@ -303,7 +317,7 @@ export default {
303317
handelListItemClick(value) {
304318
this.$emit('on-list-item-click', value);
305319
},
306-
320+
307321
308322
submit(component) {
309323
let field = component.field;

src/fields/fieldInputMultiple.vue

Lines changed: 53 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
<script>
5757
import {Input, Tag} from 'iview';
5858
import {getValue} from '../utils/processValue';
59+
import schema from 'async-validator';
5960
6061
export default {
6162
inject: ['form'],
@@ -97,17 +98,63 @@ export default {
9798
this.handleAdd(e);
9899
}
99100
},
101+
// 通过field.inputRules校验
102+
validator() {
103+
let formItem = this.$parent;
104+
105+
if (typeof this.field.inputRules === 'object') {
106+
let descriptor = {};
107+
descriptor[this.field.model] = this.field.inputRules;
108+
109+
let validator = new schema(descriptor);
110+
let model = {};
111+
112+
model[this.field.model] = this.value;
113+
114+
validator.validate(model, errors => {
115+
if (errors) {
116+
this.validateMessage = errors ? errors[0].message : '';
117+
118+
formItem.validateState = 'error';
119+
formItem.validateMessage = this.validateMessage;
120+
return;
121+
} else {
122+
formItem.validateState = 'success';
123+
this.validateMessage = '';
124+
}
125+
});
126+
} else {
127+
formItem.validateState = 'success';
128+
this.validateMessage = '';
129+
}
130+
},
100131
handleAdd(e) {
101132
if (!this.value) {
102133
this.$Message.warning('请输入数据后添加');
103134
return;
104135
}
105-
if (this.list.indexOf(this.value) === -1) {
106-
this.field.succMessage && this.$Message.success(this.field.succMessage);
107-
this.list.push(this.value);
108-
this.value = '';
109-
this.$emit('on-change', this.field.model, this.list, e, this.field);
136+
if (this.list.indexOf(this.value) !== -1) {
137+
this.$Message.warning(`${this.value}已存在`);
138+
return;
110139
}
140+
if (this.defaultList.indexOf(this.value) !== -1) {
141+
this.$Message.warning(`${this.value}已存在`);
142+
return;
143+
}
144+
145+
if (!this.validateMessage) {
146+
this.addMember(e);
147+
}
148+
},
149+
addMember(e) {
150+
let formItem = this.$parent;
151+
formItem.validateState = 'success';
152+
153+
this.field.succMessage && this.$Message.success(this.field.succMessage);
154+
this.list.push(this.value);
155+
this.value = '';
156+
// this.$set(this.form.model, this.field.model, this.list);
157+
this.$emit('on-change', this.field.model, this.list, e, this.field);
111158
},
112159
handelMemberDelete(i, e) {
113160
this.list.splice(i, 1);
@@ -116,6 +163,7 @@ export default {
116163
},
117164
handleChange(e) {
118165
this.value = e.target.value;
166+
this.validator();
119167
}
120168
}
121169
};

src/fields/fieldSelect.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
:disabled="field.disabled || false"
4545
:clearable="clearable"
4646
:size="size"
47+
:transfer="field.transfer || false"
4748
:placeholder="field.placeholder"
4849
:filterable="filterable || false"
4950
:loading="loading"

src/style/formGeneraoter.less

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,14 @@
2626
line-height: 30px;
2727
}
2828

29+
&-labelTip-wp {
30+
position: relative;
31+
line-height: 36px;
32+
font-size: 22px;
33+
color: #00f;
34+
z-index: 11;
35+
}
36+
2937
&-default-items-box {
3038
width: 90%;
3139
display: inline-block;

0 commit comments

Comments
 (0)