mirror of
https://github.com/iczer/vue-antd-admin
synced 2025-04-05 19:41:37 +08:00
优化GloablHeader、新增表单模块、新增PageHeader、根据router自动生成breadcrumb功能
This commit is contained in:
parent
417f7d5f7b
commit
670b97e616
117
src/components/form/BasicForm.vue
Normal file
117
src/components/form/BasicForm.vue
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
<template>
|
||||||
|
<a-card :body-style="{padding: '24px 32px'}" :bordered="false">
|
||||||
|
<a-form>
|
||||||
|
<a-form-item
|
||||||
|
label="标题"
|
||||||
|
:labelCol="{span: 7}"
|
||||||
|
:wrapperCol="{span: 10}"
|
||||||
|
>
|
||||||
|
<a-input placeholder="给目标起个名字" />
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item
|
||||||
|
label="起止日期"
|
||||||
|
:labelCol="{span: 7}"
|
||||||
|
:wrapperCol="{span: 10}"
|
||||||
|
>
|
||||||
|
<a-range-picker style="width: 100%" />
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item
|
||||||
|
label="目标描述"
|
||||||
|
:labelCol="{span: 7}"
|
||||||
|
:wrapperCol="{span: 10}"
|
||||||
|
>
|
||||||
|
<a-textarea rows="4" placeholder="请输入你阶段性工作目标"/>
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item
|
||||||
|
label="衡量标准"
|
||||||
|
:labelCol="{span: 7}"
|
||||||
|
:wrapperCol="{span: 10}"
|
||||||
|
>
|
||||||
|
<a-textarea rows="4" placeholder="请输入衡量标准"/>
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item
|
||||||
|
label="客户"
|
||||||
|
:labelCol="{span: 7}"
|
||||||
|
:wrapperCol="{span: 10}"
|
||||||
|
:required="false"
|
||||||
|
>
|
||||||
|
<a-input placeholder="请描述你服务的客户,内部客户直接 @姓名/工号"/>
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item
|
||||||
|
label="邀评人"
|
||||||
|
:labelCol="{span: 7}"
|
||||||
|
:wrapperCol="{span: 10}"
|
||||||
|
:required="false"
|
||||||
|
>
|
||||||
|
<a-input placeholder="请直接 @姓名/工号,最多可邀请 5 人"/>
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item
|
||||||
|
label="权重"
|
||||||
|
:labelCol="{span: 7}"
|
||||||
|
:wrapperCol="{span: 10}"
|
||||||
|
:required="false"
|
||||||
|
>
|
||||||
|
<a-input-number :min="0" :max="100"/>
|
||||||
|
<span>%</span>
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item
|
||||||
|
label="目标公开"
|
||||||
|
:labelCol="{span: 7}"
|
||||||
|
:wrapperCol="{span: 10}"
|
||||||
|
:required="false"
|
||||||
|
help="客户、邀评人默认被分享"
|
||||||
|
>
|
||||||
|
<a-radio-group v-model="value">
|
||||||
|
<a-radio :value="1">公开</a-radio>
|
||||||
|
<a-radio :value="2">部分公开</a-radio>
|
||||||
|
<a-radio :value="3">不公开</a-radio>
|
||||||
|
</a-radio-group>
|
||||||
|
<a-form-item>
|
||||||
|
<a-select mode="multiple" v-if="value === 2">
|
||||||
|
<a-select-option value="4">同事一</a-select-option>
|
||||||
|
<a-select-option value="5">同事二</a-select-option>
|
||||||
|
<a-select-option value="6">同事三</a-select-option>
|
||||||
|
</a-select>
|
||||||
|
</a-form-item>
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item :wrapperCol="{span: 10, offset: 7}">
|
||||||
|
<a-button type="primary">提交</a-button>
|
||||||
|
<a-button style="margin-left: 8px">保存</a-button>
|
||||||
|
</a-form-item>
|
||||||
|
</a-form>
|
||||||
|
</a-card>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import ACard from 'vue-antd-ui/es/card/Card'
|
||||||
|
import AForm from 'vue-antd-ui/es/form/Form'
|
||||||
|
import AFormItem from 'vue-antd-ui/es/form/FormItem'
|
||||||
|
import AInput from 'vue-antd-ui/es/input/Input'
|
||||||
|
import ADatePicker from 'vue-antd-ui/es/date-picker'
|
||||||
|
import ATextarea from 'vue-antd-ui/es/input/TextArea'
|
||||||
|
import AInputNumber from 'vue-antd-ui/es/input-number/index'
|
||||||
|
import ARadioGroup from 'vue-antd-ui/es/radio/Group'
|
||||||
|
import ARadio from 'vue-antd-ui/es/radio/Radio'
|
||||||
|
import ASelect from 'vue-antd-ui/es/select/index'
|
||||||
|
import AButton from "vue-antd-ui/es/button/button";
|
||||||
|
|
||||||
|
const ARangePicker = ADatePicker.RangePicker
|
||||||
|
const ASelectOption = ASelect.Option
|
||||||
|
export default {
|
||||||
|
name: 'BasicForm',
|
||||||
|
components: {
|
||||||
|
AButton,
|
||||||
|
ASelectOption, ASelect, ARadio, ARadioGroup, AInputNumber, ATextarea, ARangePicker, AInput, AFormItem, AForm, ACard},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
title: '基础表单',
|
||||||
|
desc: '表单页用于向用户收集或验证信息,基础表单常见于数据项较少的表单场景。',
|
||||||
|
value: 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
42
src/components/form/Form.vue
Normal file
42
src/components/form/Form.vue
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
<template>
|
||||||
|
<div style="margin: -24px -24px 0px">
|
||||||
|
<page-header :breadcrumb="breadcrumb" :title="title">
|
||||||
|
<div slot="content">{{desc}}</div>
|
||||||
|
</page-header>
|
||||||
|
<div style="margin: 24px 24px 0px">
|
||||||
|
<router-view ref="page"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import PageHeader from '../page/PageHeader'
|
||||||
|
export default {
|
||||||
|
name: 'Form',
|
||||||
|
components: {PageHeader},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
title: '',
|
||||||
|
breadcrumb: [],
|
||||||
|
desc: ''
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted () {
|
||||||
|
this.getPageHeaderInfo()
|
||||||
|
},
|
||||||
|
beforeUpdate () {
|
||||||
|
this.getPageHeaderInfo()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getPageHeaderInfo () {
|
||||||
|
this.title = this.$route.name
|
||||||
|
this.breadcrumb = this.$route.matched
|
||||||
|
this.desc = this.$refs.page.desc
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
0
src/components/form/index.js
Normal file
0
src/components/form/index.js
Normal file
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<a-layout-header style="background: #fff; padding: 0 12px 0 0;box-shadow: 0 1px 4px rgba(0,21,41,.08);">
|
<a-layout-header class="gloabl-header">
|
||||||
<a-icon class="trigger" :type="collapsed ? 'menu-unfold' : 'menu-fold'" @click="toggleCollapse"/>
|
<a-icon class="trigger" :type="collapsed ? 'menu-unfold' : 'menu-fold'" @click="toggleCollapse"/>
|
||||||
<div style="float: right">
|
<div style="float: right">
|
||||||
<header-search class="header-item"/>
|
<header-search class="header-item"/>
|
||||||
@ -73,4 +73,11 @@ export default {
|
|||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
color: rgba(0,0,0,.65);
|
color: rgba(0,0,0,.65);
|
||||||
}
|
}
|
||||||
|
.gloabl-header{
|
||||||
|
background: #fff;
|
||||||
|
padding: 0 12px 0 0;
|
||||||
|
-webkit-box-shadow: 0 1px 4px rgba(0,21,41,.08);
|
||||||
|
box-shadow: 0 1px 4px rgba(0,21,41,.08);
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
53
src/components/page/PageHeader.vue
Normal file
53
src/components/page/PageHeader.vue
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
<template>
|
||||||
|
<div class="page-header">
|
||||||
|
<div class="breadcrumb">
|
||||||
|
<a-breadcrumb>
|
||||||
|
<a-breadcrumb-item><a href="#/dashboard">首页</a></a-breadcrumb-item>
|
||||||
|
<a-breadcrumb-item :key="item.path" v-for="item in breadcrumb">{{item.name}}</a-breadcrumb-item>
|
||||||
|
</a-breadcrumb>
|
||||||
|
</div>
|
||||||
|
<div class="detail">
|
||||||
|
<h1 v-if="title" class="title">{{title}}</h1>
|
||||||
|
<div class="content"><slot name="content"></slot></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import ABreadcrumb from 'vue-antd-ui/es/breadcrumb'
|
||||||
|
|
||||||
|
const ABreadcrumbItem = ABreadcrumb.Item
|
||||||
|
export default {
|
||||||
|
name: 'PageHeader',
|
||||||
|
components: {ABreadcrumbItem, ABreadcrumb},
|
||||||
|
props: {
|
||||||
|
title: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
breadcrumb: {
|
||||||
|
type: Array,
|
||||||
|
required: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.page-header{
|
||||||
|
background: #fff;
|
||||||
|
padding: 16px 32px 0;
|
||||||
|
border-bottom: 1px solid #e8e8e8;
|
||||||
|
.breadcrumb{
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
.title{
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: rgba(0,0,0,.85);
|
||||||
|
}
|
||||||
|
.content{
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -5,6 +5,8 @@ import Exception from '@/components/exception/Exception'
|
|||||||
import NotFound from '@/components/exception/404'
|
import NotFound from '@/components/exception/404'
|
||||||
import NotPermit from '@/components/exception/403'
|
import NotPermit from '@/components/exception/403'
|
||||||
import ServerError from '@/components/exception/500'
|
import ServerError from '@/components/exception/500'
|
||||||
|
import Form from '@/components/form/Form'
|
||||||
|
import BasicForm from '@/components/form/BasicForm'
|
||||||
|
|
||||||
Vue.use(Router)
|
Vue.use(Router)
|
||||||
|
|
||||||
@ -19,13 +21,13 @@ export default new Router({
|
|||||||
{
|
{
|
||||||
path: '/form',
|
path: '/form',
|
||||||
name: '表单页',
|
name: '表单页',
|
||||||
component: Exception,
|
component: Form,
|
||||||
icon: 'form',
|
icon: 'form',
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: '/form/basic',
|
path: '/form/basic',
|
||||||
name: '基础表单',
|
name: '基础表单',
|
||||||
component: NotFound,
|
component: BasicForm,
|
||||||
icon: 'none'
|
icon: 'none'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user