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