[Update] 调整ui

This commit is contained in:
ibuler 2020-04-09 19:37:02 +08:00
parent 1257511cf4
commit f16554bd80
10 changed files with 153 additions and 43 deletions

View File

@ -75,23 +75,38 @@ export default {
type = '' type = ''
field.component = Select2 field.component = Select2
break break
case 'string':
type = 'input'
if (!fieldMeta.max_length) {
field.el.type = 'textarea'
}
break
default: default:
type = 'input' type = 'input'
break break
} }
if (type === 'radio-group') {
const options = fieldMeta.choices.map(v => {
return { label: v.display_name, value: v.value }
})
if (options.length > 4) {
type = 'select'
field.el.filterable = true
}
}
field.type = type field.type = type
return field return field
}, },
generateFieldByName(name, field) { generateFieldByName(name, field) {
switch (name) { switch (name) {
case 'email': case 'email':
field.el = { type: 'email' } field.el.type = 'email'
break break
case 'password': case 'password':
field.el = { type: 'password' } field.el.type = 'password'
break break
case 'comment': case 'comment':
field.el = { type: 'textarea' } field.el.type = 'textarea'
break break
} }
return field return field
@ -109,15 +124,16 @@ export default {
return field return field
}, },
generateField(name) { generateField(name) {
let field = {} let field = { id: name, prop: name, el: {}}
const fieldMeta = this.meta[name] || {} const fieldMeta = this.meta[name] || {}
field.id = name
field.prop = name
field.label = fieldMeta.label field.label = fieldMeta.label
field = this.generateFieldByType(fieldMeta.type, field, fieldMeta) field = this.generateFieldByType(fieldMeta.type, field, fieldMeta)
field = this.generateFieldByName(name, field) field = this.generateFieldByName(name, field)
field = this.generateFieldByOther(field, fieldMeta) field = this.generateFieldByOther(field, fieldMeta)
field = Object.assign(field, this.fieldsMeta[name] || {}) field = Object.assign(field, this.fieldsMeta[name] || {})
if (name === 'name') {
console.log(field)
}
return field return field
}, },
generateFieldGroup(data) { generateFieldGroup(data) {

View File

@ -4,7 +4,7 @@
<script> <script>
import DataTable from '../DataTable' import DataTable from '../DataTable'
import { DetailFormatter, DisplayFormatter, BooleanFormatter, ActionsFormatter } from '@/components/ListTable/formatters/index' import { DetailFormatter, DisplayFormatter, BooleanFormatter, ActionsFormatter } from '@/components/ListTable/formatters'
import { optionUrlMeta } from '@/api/common' import { optionUrlMeta } from '@/api/common'
export default { export default {
name: 'AutoDataTable', name: 'AutoDataTable',

View File

@ -1,6 +1,32 @@
export { default as DetailFormatter } from './DetailFormatter' import DetailFormatter from './DetailFormatter'
export { default as DisplayFormatter } from './DisplayFormatter' import DisplayFormatter from './DisplayFormatter'
export { default as BooleanFormatter } from './ChoicesFormatter' import BooleanFormatter from './ChoicesFormatter'
export { default as ActionsFormatter } from './ActionsFormatter' import ActionsFormatter from './ActionsFormatter'
export { default as ExpandPreFormatter } from './ExpandPreFormatter' import ExpandPreFormatter from './ExpandPreFormatter'
export { default as LengthFormatter } from './LengthFormatter' import LengthFormatter from './LengthFormatter'
// export { default as DetailFormatter } from './DetailFormatter'
// export { default as DisplayFormatter } from './DisplayFormatter'
// export { default as BooleanFormatter } from './ChoicesFormatter'
// export { default as ActionsFormatter } from './ActionsFormatter'
// export { default as ExpandPreFormatter } from './ExpandPreFormatter'
// export { default as LengthFormatter } from './LengthFormatter'
export const modules = {
DetailFormatter,
DisplayFormatter,
BooleanFormatter,
ActionsFormatter,
ExpandPreFormatter,
LengthFormatter
}
export default modules
export {
DetailFormatter,
DisplayFormatter,
BooleanFormatter,
ActionsFormatter,
ExpandPreFormatter,
LengthFormatter
}

View File

@ -59,7 +59,9 @@ const cn = {
'Import': '导入', 'Import': '导入',
'Export': '导出', 'Export': '导出',
'Other': '其它', 'Other': '其它',
'Create success': '创建成功' 'Create success': '创建成功',
'Deactive selected': '禁用所选',
'Active selected': '激活所选'
}, },
route: { route: {
'dashboard': '仪表盘', 'dashboard': '仪表盘',

View File

@ -1,7 +1,17 @@
<template> <template>
<Page> <Page v-loading="loadding">
<IBox> <IBox>
<AutoDataForm ref="form" :method="method" :form="form" :fields="fields" :url="totalUrl" v-bind="$attrs" v-on="$listeners" @submit="handleSubmit" /> <AutoDataForm
v-if="!loadding"
ref="form"
:method="method"
:form="form"
:fields="fields"
:url="totalUrl"
v-bind="$attrs"
v-on="$listeners"
@submit="handleSubmit"
/>
</IBox> </IBox>
</Page> </Page>
</template> </template>
@ -24,9 +34,13 @@ export default {
return [] return []
} }
}, },
form: { object: {
type: Object, type: Object,
default: () => { return {} } default: () => ({})
},
initial: {
type: Object,
default: () => ({})
}, },
onSubmit: { onSubmit: {
type: Function, type: Function,
@ -57,16 +71,27 @@ export default {
}, },
data() { data() {
return { return {
form: {},
loadding: true
} }
}, },
computed: { computed: {
method() { method() {
return this.getMethod() const method = this.getMethod(this)
return method
}, },
totalUrl() { totalUrl() {
return this.getUrl() return this.getUrl()
} }
}, },
mounted() {
if (this.method === 'put') {
this.getObjectDetail()
} else {
this.form = Object.assign(this.form, this.initial)
this.loadding = false
}
},
methods: { methods: {
handleSubmit(values, form) { handleSubmit(values, form) {
let handler = this.onSubmit || this.defaultOnSubmit let handler = this.onSubmit || this.defaultOnSubmit
@ -93,6 +118,15 @@ export default {
console.log(data) console.log(data)
} }
}) })
},
getObjectDetail() {
this.$axios.get(this.totalUrl).then(data => {
this.form = data
}).catch(error => {
console.log(error)
}).finally(() => {
this.loadding = false
})
} }
} }
} }

View File

@ -70,14 +70,14 @@ export const constantRoutes = [
component: () => import('@/views/users/UserCreateUpdate.vue'), // Parent router-view component: () => import('@/views/users/UserCreateUpdate.vue'), // Parent router-view
name: 'UserCreate', name: 'UserCreate',
hidden: true, hidden: true,
meta: { title: 'UserCreate', activeMenu: '/users/users' } meta: { title: 'UserCreate', activeMenu: '/users/users', action: 'create' }
}, },
{ {
path: 'users/:id/update', path: 'users/:id/update',
component: () => import('@/views/users/UserCreateUpdate.vue'), // Parent router-view component: () => import('@/views/users/UserCreateUpdate.vue'), // Parent router-view
name: 'UserUpdate', name: 'UserUpdate',
hidden: true, hidden: true,
meta: { title: 'UserUpdate' } meta: { title: 'UserUpdate', activeMenu: '/users/users', action: 'update' }
}, },
{ {
path: 'users/detail/:id', path: 'users/detail/:id',

View File

@ -235,3 +235,29 @@ td .el-button.el-button--mini {
.el-radio__input.is-checked+.el-radio__label { .el-radio__input.is-checked+.el-radio__label {
color: inherit; color: inherit;
} }
.el-radio__input.is-checked .el-radio__inner {
border-color: #409EFF;
background-color: #409EFF;
}
.el-checkbox__input.is-checked .el-checkbox__inner {
border-color: #409EFF;
background-color: #409EFF;
}
.el-radio__inner:hover {
border-color: #409EFF;
}
.el-textarea__inner {
border-radius: 0;
}
.el-checkbox__input.is-checked .el-checkbox__inner, .el-checkbox__input.is-indeterminate .el-checkbox__inner {
border-color: #409EFF;
background-color: #409EFF;
}
.el-checkbox__inner:hover {
border-color: #409EFF;
}

View File

@ -5,7 +5,6 @@
@import './sidebar.scss'; @import './sidebar.scss';
@import './element-index.css'; @import './element-index.css';
@import './menu.scss'; @import './menu.scss';
@import 'vue-select/src/scss/vue-select.scss';
@import "./font-awesome/font-awesome.min.css"; @import "./font-awesome/font-awesome.min.css";
body { body {

View File

@ -1,8 +1,5 @@
<template> <template>
<div> <GenericCreateUpdatePage :fields="fields" :initial="initial" :fields-meta="fieldsMeta" :url="url" />
<GenericCreateUpdatePage :fields="fields" :form="form" :fields-meta="fieldsMeta" :url="url" />
<el-button @click="debug">Debug</el-button>
</div>
</template> </template>
<script> <script>
@ -12,9 +9,9 @@ export default {
GenericCreateUpdatePage GenericCreateUpdatePage
}, },
data() { data() {
const errors = { name: [] } const errors = { name: '' }
return { return {
form: { initial: {
password_strategy: 0, password_strategy: 0,
mfa_level: 0, mfa_level: 0,
source: 'local', source: 'local',
@ -23,26 +20,35 @@ export default {
}, },
fields: [ fields: [
[this.$t('users.' + 'Account'), ['name', 'username', 'email', 'groups']], [this.$t('users.' + 'Account'), ['name', 'username', 'email', 'groups']],
[this.$t('users.' + 'Authentication'), ['password_strategy', 'password', 'mfa_level', 'source']], [this.$t('users.' + 'Authentication'), ['password_strategy', 'password', 'public_key', 'mfa_level', 'source']],
[this.$t('users.' + 'Secure'), ['role', 'date_expired']], [this.$t('users.' + 'Secure'), ['role', 'date_expired']],
[this.$tc('Other'), ['phone', 'wechat', 'comment']] [this.$tc('Other'), ['phone', 'wechat', 'comment']]
], ],
errors: errors, errors: errors,
url: '/api/v1/users/users/', url: '/api/v1/users/users/',
fieldsMeta: { fieldsMeta: {
name: {
el: {
error: '无措'
}
},
password_strategy: {
hidden: () => {
return this.$route.params.id
}
},
password: { 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.meta.action === 'update') {
return formValue.password_strategy !== 1 return false
} else {
return true
} }
return formValue.password_strategy !== 1
} }
}, },
name: { public_key: {
el: { hidden: (formValue, item) => {
error: errors.name return this.$route.meta.action !== 'update'
} }
}, },
groups: { groups: {
@ -54,20 +60,18 @@ export default {
} }
} }
}, },
mounted() {
setTimeout(() => {
this.errors.name = 'dididi'
}, 3000)
},
methods: { methods: {
debug() { debug() {
console.log(this) console.log(this)
this.errors.name.push('world')
} }
} }
} }
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.el-form /deep/ .el-select{
width:100%;
}
.el-form /deep/ .el-form-item__content > .el-date-editor{
width:100%;
}
</style> </style>

View File

@ -16,6 +16,9 @@ export default {
columns: [ columns: [
'name', 'username', 'role', 'groups_display', 'source', 'is_valid', 'actions' 'name', 'username', 'role', 'groups_display', 'source', 'is_valid', 'actions'
], ],
columnsMeta: {
},
detailRoute: 'UserDetail', detailRoute: 'UserDetail',
actions: { actions: {
updateRoute: 'UserUpdate' updateRoute: 'UserUpdate'