mirror of
https://github.com/Ssl1S/json-schema-editor-vue.git
synced 2025-12-30 09:47:54 +08:00
feat: (2.0.1) 对数字和字符串增加枚举属性
This commit is contained in:
@@ -62,11 +62,11 @@
|
|||||||
<a-col :span="8" v-for="(item,key) in advancedValue" :key="key">
|
<a-col :span="8" v-for="(item,key) in advancedValue" :key="key">
|
||||||
<a-form-item>
|
<a-form-item>
|
||||||
<span>{{ local[key] }}</span>
|
<span>{{ local[key] }}</span>
|
||||||
<a-input-number v-model="advancedValue[key]" v-if="advancedAttr[key].type === 'integer'" style="width:100%" :placeholder="key"/>
|
<a-input-number v-model="advancedValue[key]" v-if="advancedAttr[key].type === 'integer' || advancedAttr[key].type === 'number'" style="width:100%" :placeholder="key"/>
|
||||||
<a-input-number v-model="advancedValue[key]" v-else-if="advancedAttr[key].type === 'number'" style="width:100%" :placeholder="key"/>
|
|
||||||
<span v-else-if="advancedAttr[key].type === 'boolean'" style="display:inline-block;width:100%">
|
<span v-else-if="advancedAttr[key].type === 'boolean'" style="display:inline-block;width:100%">
|
||||||
<a-switch v-model="advancedValue[key]"/>
|
<a-switch v-model="advancedValue[key]"/>
|
||||||
</span>
|
</span>
|
||||||
|
<a-textarea @blur="changeEnumValue" :value="advancedValue['enum'] && advancedValue['enum'].length && advancedValue['enum'].join('\n')" :rows="2" v-else-if="key === 'enum'" ></a-textarea>
|
||||||
<a-select v-else-if="advancedAttr[key].type === 'array'" v-model="advancedValue[key]" style="width:100%" :getPopupContainer="
|
<a-select v-else-if="advancedAttr[key].type === 'array'" v-model="advancedValue[key]" style="width:100%" :getPopupContainer="
|
||||||
triggerNode => {
|
triggerNode => {
|
||||||
return triggerNode.parentNode || document.body;
|
return triggerNode.parentNode || document.body;
|
||||||
@@ -78,7 +78,6 @@
|
|||||||
{{t}}
|
{{t}}
|
||||||
</a-select-option>
|
</a-select-option>
|
||||||
</a-select>
|
</a-select>
|
||||||
|
|
||||||
<a-input v-model="advancedValue[key]" v-else style="width:100%" :placeholder="key"/>
|
<a-input v-model="advancedValue[key]" v-else style="width:100%" :placeholder="key"/>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
@@ -128,7 +127,7 @@ export default {
|
|||||||
AButton: Button,
|
AButton: Button,
|
||||||
// eslint-disable-next-line vue/no-unused-components
|
// eslint-disable-next-line vue/no-unused-components
|
||||||
AIcon: Icon,
|
AIcon: Icon,
|
||||||
AInput: Input,AInputNumber:InputNumber,
|
AInput: Input,AInputNumber:InputNumber,ATextarea: Input.TextArea,
|
||||||
ACheckbox: Checkbox,
|
ACheckbox: Checkbox,
|
||||||
ASelect: Select,
|
ASelect: Select,
|
||||||
ASelectOption:Select.Option,
|
ASelectOption:Select.Option,
|
||||||
@@ -254,10 +253,19 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
onChangeType() {
|
onChangeType() {
|
||||||
|
this.parseCustomProps()
|
||||||
|
// 删除自定义属性
|
||||||
|
this.customProps.forEach(item => {
|
||||||
|
this.$delete(this.pickValue, item.key)
|
||||||
|
});
|
||||||
|
this.customProps = [];
|
||||||
|
|
||||||
this.$delete(this.pickValue,'properties')
|
this.$delete(this.pickValue,'properties')
|
||||||
this.$delete(this.pickValue,'items')
|
this.$delete(this.pickValue,'items')
|
||||||
this.$delete(this.pickValue,'required')
|
this.$delete(this.pickValue,'required')
|
||||||
this.$delete(this.pickValue,'format')
|
this.$delete(this.pickValue,'format')
|
||||||
|
this.$delete(this.pickValue,'enum')
|
||||||
|
|
||||||
if(this.isArray){
|
if(this.isArray){
|
||||||
this.$set(this.pickValue,'items',{type:'string'})
|
this.$set(this.pickValue,'items',{type:'string'})
|
||||||
}
|
}
|
||||||
@@ -268,6 +276,16 @@ export default {
|
|||||||
onRootCheck(e){
|
onRootCheck(e){
|
||||||
this._deepCheck( e.target.checked,this.pickValue)
|
this._deepCheck( e.target.checked,this.pickValue)
|
||||||
},
|
},
|
||||||
|
changeEnumValue (e) {
|
||||||
|
const pickType = this.pickValue.type
|
||||||
|
const value = e.target.value
|
||||||
|
var arr = value.split('\n')
|
||||||
|
if (arr.length === 0 || (arr.length == 1 && !arr[0])) {
|
||||||
|
this.$delete(this.advancedValue, 'enum')
|
||||||
|
} else {
|
||||||
|
this.advancedValue.enum = arr.map(item => pickType === 'string' ? item : +item)
|
||||||
|
}
|
||||||
|
},
|
||||||
_deepCheck(checked,node){
|
_deepCheck(checked,node){
|
||||||
if(node.type === 'object' && node.properties){
|
if(node.type === 'object' && node.properties){
|
||||||
checked ? this.$set(node,'required',Object.keys(node.properties)) : this.$delete(node,'required')
|
checked ? this.$set(node,'required',Object.keys(node.properties)) : this.$delete(node,'required')
|
||||||
@@ -323,7 +341,8 @@ export default {
|
|||||||
},
|
},
|
||||||
onSetting(){
|
onSetting(){
|
||||||
this.modalVisible = true
|
this.modalVisible = true
|
||||||
this.advancedValue = this.advanced.value
|
console.info('t7', this.advanced.value, this.pickValue)
|
||||||
|
this.advancedValue = { ...this.advanced.value }
|
||||||
for(const k in this.advancedValue) {
|
for(const k in this.advancedValue) {
|
||||||
if(this.pickValue[k]) this.advancedValue[k] = this.pickValue[k]
|
if(this.pickValue[k]) this.advancedValue[k] = this.pickValue[k]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,8 @@ const value = {
|
|||||||
maximum: null,
|
maximum: null,
|
||||||
minimum: null,
|
minimum: null,
|
||||||
exclusiveMaximum:null,
|
exclusiveMaximum:null,
|
||||||
exclusiveMinimum:null
|
exclusiveMinimum:null,
|
||||||
|
enum:[]
|
||||||
}
|
}
|
||||||
const attr = {
|
const attr = {
|
||||||
description: {
|
description: {
|
||||||
@@ -25,6 +26,10 @@ const attr = {
|
|||||||
exclusiveMinimum:{
|
exclusiveMinimum:{
|
||||||
name:'不包含最小值',
|
name:'不包含最小值',
|
||||||
type:'boolean'
|
type:'boolean'
|
||||||
|
},
|
||||||
|
enum:{
|
||||||
|
name:'枚举',
|
||||||
|
type:'array'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const wrapper = {value, attr}
|
const wrapper = {value, attr}
|
||||||
|
|||||||
@@ -3,7 +3,8 @@ const value = {
|
|||||||
maximum: null,
|
maximum: null,
|
||||||
minimum: null,
|
minimum: null,
|
||||||
exclusiveMaximum:null,
|
exclusiveMaximum:null,
|
||||||
exclusiveMinimum:null
|
exclusiveMinimum:null,
|
||||||
|
enum:[]
|
||||||
}
|
}
|
||||||
const attr = {
|
const attr = {
|
||||||
description: {
|
description: {
|
||||||
@@ -25,6 +26,10 @@ const attr = {
|
|||||||
exclusiveMinimum:{
|
exclusiveMinimum:{
|
||||||
name:'不包含最小值',
|
name:'不包含最小值',
|
||||||
type:'boolean'
|
type:'boolean'
|
||||||
|
},
|
||||||
|
enum:{
|
||||||
|
name:'枚举',
|
||||||
|
type:'array'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const wrapper = {value, attr}
|
const wrapper = {value, attr}
|
||||||
|
|||||||
@@ -3,7 +3,8 @@ const value = {
|
|||||||
maxLength: null,
|
maxLength: null,
|
||||||
minLength: null,
|
minLength: null,
|
||||||
pattern: null,
|
pattern: null,
|
||||||
format:null
|
format:undefined,
|
||||||
|
enum:[]
|
||||||
}
|
}
|
||||||
const attr = {
|
const attr = {
|
||||||
description: {
|
description: {
|
||||||
@@ -26,6 +27,10 @@ const attr = {
|
|||||||
name:'格式',
|
name:'格式',
|
||||||
type:'array',
|
type:'array',
|
||||||
enums:['date','date-time','email','hostname','ipv4','ipv6','uri']
|
enums:['date','date-time','email','hostname','ipv4','ipv6','uri']
|
||||||
|
},
|
||||||
|
enum:{
|
||||||
|
name:'枚举',
|
||||||
|
type:'array'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const wrapper = {value, attr}
|
const wrapper = {value, attr}
|
||||||
|
|||||||
Reference in New Issue
Block a user