Commit 7f823fcdd794c74834b986bffe9aff1b42a00216

Authored by ly525
1 parent 15975ee0

feat(plugin): support form checkbox

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 }
... ...