Skip to content

Commit a6b02af

Browse files
committed
update for form-blocks
1 parent 988b023 commit a6b02af

File tree

14 files changed

+391
-176
lines changed

14 files changed

+391
-176
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import index from "./index.vue";
2+
3+
export default index;
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
<template>
2+
<Modal
3+
class="cp-block-form-modal"
4+
v-model="openStatus"
5+
:title="formTitle"
6+
footer-hide
7+
>
8+
<div slot="title"><strong>{{formTitle}}</strong></div>
9+
<FormGenerator
10+
ref="FormGenerator"
11+
:fields="formFields"
12+
:model="model"
13+
:options="formOptions"
14+
@on-submit="handleSubmit"
15+
/>
16+
</Modal>
17+
</template>
18+
19+
<script>
20+
export default {
21+
data() {
22+
return {
23+
openStatus: false,
24+
model: {}
25+
};
26+
},
27+
// computed: {
28+
// computedFormModel() {
29+
// return Object.assign({}, this.formModel);
30+
// }
31+
// },
32+
props: {
33+
defaultOpenStatus: {
34+
type: Boolean,
35+
default: false
36+
},
37+
// btnText: {
38+
// type: String,
39+
// default: ""
40+
// },
41+
formTitle: {
42+
type: String,
43+
default: ""
44+
},
45+
formFields: {
46+
type: Array,
47+
default() {
48+
return {};
49+
}
50+
},
51+
formModel: {
52+
type: Object,
53+
default() {
54+
return {};
55+
}
56+
},
57+
formOptions: {
58+
type: Object,
59+
default() {
60+
return {}
61+
}
62+
}
63+
},
64+
watch: {
65+
formModel: {
66+
immediate: true,
67+
deep: true,
68+
handler(model) {
69+
this.model = JSON.parse(JSON.stringify(model));
70+
}
71+
}
72+
},
73+
mounted() {
74+
if (this.defaultOpenStatus) {
75+
this.open();
76+
}
77+
},
78+
methods: {
79+
handleSubmit() {
80+
this.$refs.FormGenerator.submit()
81+
.then(data => {
82+
// eslint-disable-next-line no-console
83+
this.$emit("on-submit", data);
84+
this.close();
85+
})
86+
.catch(valid => {
87+
// eslint-disable-next-line no-console
88+
// TODO
89+
// this.$emit("on-valid-error", data);
90+
});
91+
},
92+
open() {
93+
this.openStatus = true;
94+
this.$emit("on-open-status-change", true);
95+
},
96+
close() {
97+
this.openStatus = false;
98+
this.$emit("on-open-status-change", false);
99+
}
100+
}
101+
}
102+
</script>
103+
104+
<style lang="less">
105+
.cp-block-form-modal {
106+
.ivu-modal-body {
107+
padding: 16px 32px;
108+
}
109+
}
110+
111+
</style>
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import index from "./index.vue";
2+
3+
export default index;
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
<template>
2+
<div id="multi-modal-container"></div>
3+
</template>
4+
5+
<script>
6+
import Vue from "vue";
7+
import modalCom from "./modal.vue";
8+
9+
export default {
10+
props: {
11+
formFields: {
12+
type: Array,
13+
default() {
14+
return [];
15+
}
16+
}
17+
},
18+
data() {
19+
return {
20+
value: true
21+
};
22+
},
23+
methods: {
24+
open(model, title = '', fields = [], options = {}) {
25+
console.log(model, fields = [], title = '');
26+
if (fields.length === 0) {
27+
fields = this.formFields;
28+
}
29+
this.modalGenerator(fields, model, title, options);
30+
},
31+
32+
close() {
33+
34+
},
35+
36+
closeAll() {
37+
38+
},
39+
40+
modalGenerator(formFields = [], formModel = {}, formTitle = "", formOptions = {}) {
41+
// const self = this;
42+
// const dynimicModal = Vue.component("dynimicModal", {
43+
// render(h) {
44+
// return h(modalCom, {
45+
// props: {
46+
// formFields,
47+
// formModel,
48+
// formTitle,
49+
// formOptions
50+
// },
51+
// on: {
52+
// 'on-submit': function(data) {
53+
// self.$emit('on-submit', data);
54+
// }
55+
// }
56+
// });
57+
// }
58+
// });
59+
// const instance = new dynimicModal().$mount();
60+
61+
const modalComponentClass = Vue.extend(modalCom);
62+
const instance = new modalComponentClass({
63+
propsData: {
64+
formFields,
65+
formModel,
66+
formTitle,
67+
formOptions
68+
},
69+
});
70+
instance.$mount();
71+
instance.$on('on-submit', data => {
72+
this.$emit('on-submit', data);
73+
});
74+
this.$el.appendChild(instance.$el);
75+
}
76+
}
77+
};
78+
</script>
79+
80+
<style></style>

src/page/form-multi-modal/modal-com.vue renamed to src/components/block/form-multiple-modal/modal.vue

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
<template>
22
<Modal
3+
class="cp-block-multiple-form-modal"
34
ref="modal"
45
:value="value"
56
:styles="styles"
6-
:title="title"
7+
:title="formTitle"
78
footer-hide
89
draggable
910
>
1011
<FormGenerator
1112
ref="FormGenerator"
12-
:fields="fields"
13+
:fields="formFields"
1314
:model="model"
15+
:options="formOptions"
1416
@on-submit="handleSave"
1517
@on-reset="handelReset"
1618
/>
@@ -25,30 +27,45 @@ function getRandomInt(min, max) {
2527
}
2628
export default {
2729
props: {
28-
title: {
30+
formTitle: {
2931
type: String,
3032
default: ""
3133
},
32-
fields: {
34+
formFields: {
3335
type: Array,
3436
default() {
3537
return [];
36-
},
37-
required: true
38+
}
3839
},
39-
model: {
40+
formModel: {
4041
type: Object,
4142
default() {
4243
return {};
4344
}
45+
},
46+
formOptions: {
47+
type: Object,
48+
default() {
49+
return {}
50+
}
4451
}
4552
},
4653
data() {
4754
return {
4855
styles: {},
49-
value: true
56+
value: true,
57+
model: {}
5058
};
5159
},
60+
watch: {
61+
formModel: {
62+
immediate: true,
63+
deep: true,
64+
handler(model) {
65+
this.model = JSON.parse(JSON.stringify(model));
66+
}
67+
}
68+
},
5269
mounted() {
5370
this.$refs.modal.dragData = {
5471
x: getRandomInt(0, 700),
@@ -66,9 +83,8 @@ export default {
6683
this.$refs.FormGenerator.submit()
6784
.then(data => {
6885
// eslint-disable-next-line no-console
69-
console.log("update model", data);
86+
this.$emit("on-submit", data);
7087
this.value = false;
71-
this.$Message.info("update success!");
7288
})
7389
.catch(valid => {
7490
// eslint-disable-next-line no-console
@@ -80,4 +96,11 @@ export default {
8096
};
8197
</script>
8298

83-
<style></style>
99+
<style lang="less">
100+
.cp-block-multiple-form-modal {
101+
.ivu-modal-body {
102+
padding: 16px 32px;
103+
}
104+
}
105+
106+
</style>
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import index from "./index.vue";
2+
3+
export default index;
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
<template>
2+
<Poptip class="cp-block-form-popover" placement="left-start">
3+
<Button type="primary" size="small">{{btnText}}</Button>
4+
<div slot="title"><strong>{{formTitle}}</strong></div>
5+
<div slot="content">
6+
<FormGenerator
7+
ref="FormGenerator"
8+
:fields="formFields"
9+
:options="formOptions"
10+
:model="formModel"
11+
@on-submit="handleSubmit"
12+
/>
13+
</div>
14+
</Poptip>
15+
</template>
16+
17+
<script>
18+
export default {
19+
data() {
20+
return {
21+
model: {}
22+
};
23+
},
24+
props: {
25+
btnText: {
26+
type: String,
27+
default: ""
28+
},
29+
formTitle: {
30+
type: String,
31+
default: ""
32+
},
33+
formFields: {
34+
type: Array,
35+
default() {
36+
return {};
37+
}
38+
},
39+
formModel: {
40+
type: Object,
41+
default() {
42+
return {};
43+
}
44+
},
45+
formOptions: {
46+
type: Object,
47+
default() {
48+
return {}
49+
}
50+
}
51+
},
52+
watch: {
53+
formModel: {
54+
immediate: true,
55+
deep: true,
56+
handler(model) {
57+
this.model = JSON.parse(JSON.stringify(model));
58+
}
59+
}
60+
},
61+
methods: {
62+
handleSubmit() {
63+
this.$refs.FormGenerator.submit()
64+
.then(data => {
65+
// eslint-disable-next-line no-console
66+
this.$emit("on-submit", data);
67+
})
68+
.catch(valid => {
69+
// eslint-disable-next-line no-console
70+
// TODO
71+
// this.$emit("on-valid-error", data);
72+
});
73+
}
74+
}
75+
}
76+
</script>
77+
78+
<style lang="less">
79+
.cp-block-form-popover {
80+
.ivu-poptip-body-content {
81+
text-align: left;
82+
width: 300px;
83+
}
84+
&-pagenation {
85+
margin-top: 20px;
86+
text-align: right;
87+
}
88+
}
89+
</style>

src/page/form-inline-table/index.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ export default {
7474
});
7575
},
7676
handleSaveEvent($event, index, row) {
77+
this.$Message.info(`update success!${JSON.stringify(row)}`);
7778
this.data.splice(
7879
index,
7980
1,

0 commit comments

Comments
 (0)