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 | 25 | items: { |
| 26 | 26 | type: Array, |
| 27 | 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 | 45 | editorConfig: { |
| 35 | 46 | propsConfig: { |
| 36 | 47 | items: { |
| ... | ... | @@ -44,6 +55,19 @@ export default { |
| 44 | 55 | label: '填写标题', |
| 45 | 56 | require: true, |
| 46 | 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 | 73 | components: { |
| ... | ... | @@ -100,11 +124,36 @@ export default { |
| 100 | 124 | mounted () { |
| 101 | 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 | 152 | render () { |
| 104 | 153 | return ( |
| 105 | 154 | <div> |
| 106 | 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 | 158 | this.items.map(item => ( |
| 110 | 159 | <lbp-form-radio |
| ... | ... | @@ -112,9 +161,8 @@ export default { |
| 112 | 161 | value={item.value} |
| 113 | 162 | checked={this.value === item.value} |
| 114 | 163 | aliasName={this.aliasName} |
| 115 | - onChange={e => { | |
| 116 | - this.value = e | |
| 117 | - }} | |
| 164 | + type={this.type} | |
| 165 | + onChange={this.onChange} | |
| 118 | 166 | >{item.value}</lbp-form-radio> |
| 119 | 167 | )) |
| 120 | 168 | } | ... | ... |