This is an automated email from the ASF dual-hosted git repository. juzhiyuan pushed a commit to branch fix-plugin-oneof in repository https://gitbox.apache.org/repos/asf/incubator-apisix-dashboard.git
commit 58d60f3802b7ab3a087fbbb4a4c2994698b4da98 Author: juzhiyuan <jjzhiy...@gmail.com> AuthorDate: Wed Oct 30 15:43:32 2019 +0800 fix oneOf prop --- src/components/PluginDialog/index.vue | 94 ++++++++++++++++++++++++++++++++++- src/lang/en.ts | 3 +- src/lang/zh.ts | 3 +- 3 files changed, 96 insertions(+), 4 deletions(-) diff --git a/src/components/PluginDialog/index.vue b/src/components/PluginDialog/index.vue index d3b4b2e..2a3f466 100644 --- a/src/components/PluginDialog/index.vue +++ b/src/components/PluginDialog/index.vue @@ -21,9 +21,68 @@ <div class="plugin-dialog"> <el-dialog :title="'Plugin ' + name + ' Edit'" - :visible.sync="show" + :visible.sync="showDialog" > <el-form + v-if="schema.oneOf" + ref="form" + :model="data" + :rules="rules" + :show-message="false" + class="oneof-plugin-wrapper" + > + <el-form-item + label="Option" + :rules="{ + required: true, trigger: 'blur' + }" + > + <el-radio-group + v-model="data['radioKey']" + @change="handleOneOfChange" + > + <el-radio + v-for="(value, key) in schema.properties" + :key="key" + :label="key" + > + {{ key }} + </el-radio> + </el-radio-group> + </el-form-item> + + <el-form-item + v-for="(value, index) in data['values']" + :key="index" + :label="'Value' + (index + 1)" + :rules="{ + required: true, trigger: 'blur' + }" + > + {{ data.values.length }} + <el-input v-model="data['values'][index]" /> + <el-button + v-if="data.values.length !== 1" + class="remove-value-btn" + type="danger" + @click.prevent="removeOneOfPropValue(index)" + > + Remove + </el-button> + </el-form-item> + + <el-form-item> + <el-button + :disabled="oneOfPropHasEmptyValue" + @click="addValueInput" + > + {{ $t('button.addValue') }} + </el-button> + </el-form-item> + </el-form> + + <el-form + v-if="!schema.oneOf" ref="form" :model="data" :rules="rules" @@ -80,7 +139,7 @@ </el-button> <el-button type="primary" - :disabled="!isDataChanged" + :disabled="!isDataChanged && oneOfPropHasEmptyValue" @click="onSave" > Confirm @@ -111,6 +170,7 @@ export default class extends Vue { private rules: any = {} private data: any = {} private isDataChanged: boolean = false + private showDialog: boolean = false @Watch('show') private onShowChange(value: boolean) { @@ -118,6 +178,7 @@ export default class extends Vue { if (value) { this.getschema(this.name) } + this.showDialog = value } private resetPlugin() { @@ -186,6 +247,13 @@ export default class extends Vue { this.isDataChanged = true } + + if (this.schema.oneOf) { + this.data = { + radioKey: Object.keys(this.schema.properties)[0], + values: [''] + } + } } private onCancel() { @@ -208,6 +276,22 @@ export default class extends Vue { this.data[key] = value this.isDataChanged = true } + + private handleOneOfChange(e: any) { + this.data.values = [] + } + + get oneOfPropHasEmptyValue() { + return this.data.values ? this.data.values.find((value: string) => value === '') : true + } + + private addValueInput() { + this.data.values = this.data.values.concat(['']) + } + + private removeOneOfPropValue(index: number) { + this.data.values = this.data.values.filter((item: any, _index: number) => index !== _index) + } } </script> @@ -222,5 +306,11 @@ export default class extends Vue { } } } + + .oneof-plugin-wrapper { + .remove-value-btn { + margin-left: 10px; + } + } } </style> diff --git a/src/lang/en.ts b/src/lang/en.ts index 4bd4f93..a0b68f4 100644 --- a/src/lang/en.ts +++ b/src/lang/en.ts @@ -156,6 +156,7 @@ export default { cancel: 'Cancel', add_plugin: 'Add Plugin', add_node: 'Add Node', - delete: 'Delete' + delete: 'Delete', + addValue: 'Add Value' } } diff --git a/src/lang/zh.ts b/src/lang/zh.ts index 1ecb0f4..35d347b 100644 --- a/src/lang/zh.ts +++ b/src/lang/zh.ts @@ -156,6 +156,7 @@ export default { cancel: '取消', add_plugin: '添加 Plugin', add_node: '添加 Node', - delete: '删除' + delete: '删除', + addValue: '添加值' } }