[Update] 修改geneate form

This commit is contained in:
ibuler
2020-04-08 14:56:34 +08:00
parent 6ca064109b
commit aa583d9741
7 changed files with 59 additions and 31 deletions

View File

@@ -56,14 +56,8 @@ export default {
this.loading = false this.loading = false
}) })
}, },
generateField(name) { generateFieldByType(type, field, fieldMeta) {
let field = {} switch (type) {
const fieldMeta = this.meta[name] || {}
field.id = name
field.label = fieldMeta.label
let type = 'input'
switch (fieldMeta.type) {
case 'choice': case 'choice':
type = 'radio-group' type = 'radio-group'
field.options = fieldMeta.choices.map(v => { field.options = fieldMeta.choices.map(v => {
@@ -85,13 +79,41 @@ export default {
break break
} }
field.type = type field.type = type
return field
},
generateFieldByName(name, field) {
switch (name) {
case 'email':
field.el = { type: 'email' }
break
case 'password':
field.el = { type: 'password' }
break
case 'comment':
field.el = { type: 'textarea' }
break
}
return field
},
generateFieldByOther(field, fieldMeta) {
if (fieldMeta.required) { if (fieldMeta.required) {
if (type === 'input') { if (field.type === 'input') {
field.rules = [rules.Required] field.rules = [rules.Required]
} else { } else {
field.rules = [rules.RequiredChange] field.rules = [rules.RequiredChange]
} }
} }
return field
},
generateField(name) {
let field = {}
const fieldMeta = this.meta[name] || {}
field.id = name
field.label = fieldMeta.label
field = this.generateFieldByType(fieldMeta.type, field, fieldMeta)
field = this.generateFieldByName(name, field)
field = this.generateFieldByOther(field, fieldMeta)
field = Object.assign(field, this.fieldsMeta[name] || {}) field = Object.assign(field, this.fieldsMeta[name] || {})
return field return field
}, },

View File

@@ -56,6 +56,7 @@ export default {
if (valid) { if (valid) {
this.$emit('submit', this.$refs[formName].getFormValue()) this.$emit('submit', this.$refs[formName].getFormValue())
} else { } else {
this.$emit('invalid', valid)
return false return false
} }
}) })

View File

@@ -19,7 +19,7 @@ export default {
props: { props: {
url: { url: {
type: String, type: String,
required: true, required: true
}, },
method: { method: {
type: String, type: String,
@@ -34,16 +34,34 @@ export default {
form: { form: {
type: Object, type: Object,
default: () => { return {} } default: () => { return {} }
} },
}, onSubmit: {
methods: { type: Function,
handleSubmit(values) { default: null
console.log('submit', values)
} }
}, },
mounted() { mounted() {
console.log('generic', this.$attrs) console.log('generic', this.$attrs)
console.log(this.fields) console.log(this.fields)
},
methods: {
handleSubmit(values) {
let handler = this.onSubmit || this.defaultOnSubmit
handler = handler.bind(this)
console.log('submit', values)
return handler(values)
},
defaultOnSubmit(validValues) {
this.$axios.post(this.url, validValues).then(
() => {
const msg = this.$tc('Create success')
this.$message.success(msg)
setTimeout(() => {
this.$router.push({ name: 'UserList' })
}, 500)
}
)
}
} }
} }
</script> </script>

View File

@@ -104,7 +104,7 @@ export const constantRoutes = [
component: () => import('@/views/users/UserCreateUpdate.vue'), // Parent router-view component: () => import('@/views/users/UserCreateUpdate.vue'), // Parent router-view
name: 'UserGroupCreate', name: 'UserGroupCreate',
hidden: true, hidden: true,
meta: { title: 'UserGroupCreate' } meta: { title: 'UserGroupCreate', activeMenu: '/users/groups' }
}, },
{ {
path: 'groups/:id', path: 'groups/:id',

0
src/utils/jumpserver.js Normal file
View File

View File

@@ -26,14 +26,11 @@ export default {
}, },
fields: [ fields: [
'name', 'username', 'email', 'groups', 'password_strategy', 'password', 'mfa_level', 'name', 'username', 'email', 'groups', 'password_strategy', 'password', 'mfa_level',
'source', 'role', 'date_expired', 'phone', 'wechat', 'comment', 'source', 'role', 'date_expired', 'phone', 'wechat', 'comment'
], ],
url: '/api/v1/users/users/', url: '/api/v1/users/users/',
fieldsMeta: { fieldsMeta: {
password: { password: {
el: {
type: 'password'
},
hidden: (formValue, item) => { hidden: (formValue, item) => {
console.log('hidden password', formValue.password_strategy) console.log('hidden password', formValue.password_strategy)
if (this.$route.params.id === undefined) { if (this.$route.params.id === undefined) {
@@ -43,21 +40,11 @@ export default {
} }
} }
}, },
email: {
el: {
type: 'email'
}
},
groups: { groups: {
el: { el: {
value: [], value: [],
url: '/api/v1/users/groups/' url: '/api/v1/users/groups/'
} }
},
comment: {
el: {
type: 'textarea'
}
} }
} }
} }

View File

@@ -14,7 +14,7 @@ export default {
tableConfig: { tableConfig: {
url: '/api/v1/users/users/', url: '/api/v1/users/users/',
columns: [ columns: [
'name', 'username', 'role', 'groups_display', 'source', 'is_valid', 'actions' 'name', 'username', 'role', 'groups_display', 'source', 'is_active', 'actions'
], ],
detailRoute: 'UserDetail' detailRoute: 'UserDetail'
}, },