Commit 7f823fcdd794c74834b986bffe9aff1b42a00216
1 parent
15975ee0
feat(plugin): support form checkbox
Showing
1 changed file
with
56 additions
and
8 deletions
front-end/h5/src/components/plugins/lbp-form-radio-group.js
| @@ -25,12 +25,23 @@ export default { | @@ -25,12 +25,23 @@ export default { | ||
| 25 | items: { | 25 | items: { |
| 26 | type: Array, | 26 | type: Array, |
| 27 | default: () => defaultItems | 27 | default: () => defaultItems |
| 28 | + }, | ||
| 29 | + type: { | ||
| 30 | + type: String, | ||
| 31 | + default: 'radio' | ||
| 32 | + } | ||
| 33 | + }, | ||
| 34 | + data () { | ||
| 35 | + return { | ||
| 36 | + value: this.type === 'radio' ? '' : [], | ||
| 37 | + uuid: undefined | ||
| 38 | + } | ||
| 39 | + }, | ||
| 40 | + computed: { | ||
| 41 | + value_ () { | ||
| 42 | + return this.type === 'radio' ? this.value : this.value.join(',') | ||
| 28 | } | 43 | } |
| 29 | }, | 44 | }, |
| 30 | - data: () => ({ | ||
| 31 | - value: undefined, | ||
| 32 | - uuid: undefined | ||
| 33 | - }), | ||
| 34 | editorConfig: { | 45 | editorConfig: { |
| 35 | propsConfig: { | 46 | propsConfig: { |
| 36 | items: { | 47 | items: { |
| @@ -44,6 +55,19 @@ export default { | @@ -44,6 +55,19 @@ export default { | ||
| 44 | label: '填写标题', | 55 | label: '填写标题', |
| 45 | require: true, | 56 | require: true, |
| 46 | defaultPropValue: '标题演示' | 57 | defaultPropValue: '标题演示' |
| 58 | + }, | ||
| 59 | + type: { | ||
| 60 | + type: 'a-radio-group', | ||
| 61 | + label: '选择模式', | ||
| 62 | + require: true, | ||
| 63 | + prop: { | ||
| 64 | + options: [ | ||
| 65 | + { label: '单选', value: 'radio' }, | ||
| 66 | + { label: '多选', value: 'checkbox' } | ||
| 67 | + ], | ||
| 68 | + name: 'mode' | ||
| 69 | + }, | ||
| 70 | + defaultPropValue: 'radio' | ||
| 47 | } | 71 | } |
| 48 | }, | 72 | }, |
| 49 | components: { | 73 | components: { |
| @@ -100,11 +124,36 @@ export default { | @@ -100,11 +124,36 @@ export default { | ||
| 100 | mounted () { | 124 | mounted () { |
| 101 | this.uuid = this.$el.dataset.uuid | 125 | this.uuid = this.$el.dataset.uuid |
| 102 | }, | 126 | }, |
| 127 | + methods: { | ||
| 128 | + onChange (val) { | ||
| 129 | + switch (this.type) { | ||
| 130 | + case 'radio': | ||
| 131 | + this.toggleRadio(val) | ||
| 132 | + break | ||
| 133 | + case 'checkbox': | ||
| 134 | + this.toggleCheckbox(val) | ||
| 135 | + break | ||
| 136 | + default: | ||
| 137 | + break | ||
| 138 | + } | ||
| 139 | + }, | ||
| 140 | + toggleCheckbox (val) { | ||
| 141 | + const index = this.value.indexOf(val) | ||
| 142 | + if (index === -1) { | ||
| 143 | + this.value.push(val) | ||
| 144 | + } else { | ||
| 145 | + this.value.splice(index, 1) | ||
| 146 | + } | ||
| 147 | + }, | ||
| 148 | + toggleRadio (val) { | ||
| 149 | + this.value = val | ||
| 150 | + } | ||
| 151 | + }, | ||
| 103 | render () { | 152 | render () { |
| 104 | return ( | 153 | return ( |
| 105 | <div> | 154 | <div> |
| 106 | <h3>{this.aliasName}</h3> | 155 | <h3>{this.aliasName}</h3> |
| 107 | - <input type="text" hidden value={this.value} data-type="lbp-form-input" data-uuid={this.uuid} /> | 156 | + <input type="text" hidden value={this.value_} data-type="lbp-form-input" data-uuid={this.uuid} /> |
| 108 | { | 157 | { |
| 109 | this.items.map(item => ( | 158 | this.items.map(item => ( |
| 110 | <lbp-form-radio | 159 | <lbp-form-radio |
| @@ -112,9 +161,8 @@ export default { | @@ -112,9 +161,8 @@ export default { | ||
| 112 | value={item.value} | 161 | value={item.value} |
| 113 | checked={this.value === item.value} | 162 | checked={this.value === item.value} |
| 114 | aliasName={this.aliasName} | 163 | aliasName={this.aliasName} |
| 115 | - onChange={e => { | ||
| 116 | - this.value = e | ||
| 117 | - }} | 164 | + type={this.type} |
| 165 | + onChange={this.onChange} | ||
| 118 | >{item.value}</lbp-form-radio> | 166 | >{item.value}</lbp-form-radio> |
| 119 | )) | 167 | )) |
| 120 | } | 168 | } |