Commit 9287779ac911857f66b0149df2da33126b59af0a
1 parent
00e29fae
add 官网嵌入车主平台 架构
Showing
10 changed files
with
180 additions
and
201 deletions
src/components/SvgIcon/index.vue
1 | 1 | <template> |
2 | - <div v-if="isExternal" :style="styleExternalIcon" class="svg-external-icon svg-icon" v-on="$listeners" /> | |
3 | - <svg v-else :class="svgClass" aria-hidden="true" v-on="$listeners"> | |
2 | + <svg :class="svgClass" aria-hidden="true" v-on="$listeners"> | |
4 | 3 | <use :xlink:href="iconName" /> |
5 | 4 | </svg> |
6 | 5 | </template> |
7 | 6 | |
8 | 7 | <script> |
9 | -// doc: https://panjiachen.github.io/vue-element-admin-site/feature/component/svg-icon.html#usage | |
10 | -import { isExternal } from '@/utils/validate' | |
11 | - | |
12 | -export default { | |
13 | - name: 'SvgIcon', | |
14 | - props: { | |
15 | - iconClass: { | |
16 | - type: String, | |
17 | - required: true | |
18 | - }, | |
19 | - className: { | |
20 | - type: String, | |
21 | - default: '' | |
22 | - } | |
23 | - }, | |
24 | - computed: { | |
25 | - isExternal() { | |
26 | - return isExternal(this.iconClass) | |
27 | - }, | |
28 | - iconName() { | |
29 | - return `#icon-${this.iconClass}` | |
30 | - }, | |
31 | - svgClass() { | |
32 | - if (this.className) { | |
33 | - return 'svg-icon ' + this.className | |
34 | - } else { | |
35 | - return 'svg-icon' | |
8 | + export default { | |
9 | + name: 'SvgIcon', | |
10 | + props: { | |
11 | + iconClass: { | |
12 | + type: String, | |
13 | + required: true | |
14 | + }, | |
15 | + className: { | |
16 | + type: String, | |
17 | + default: '' | |
36 | 18 | } |
37 | 19 | }, |
38 | - styleExternalIcon() { | |
39 | - return { | |
40 | - mask: `url(${this.iconClass}) no-repeat 50% 50%`, | |
41 | - '-webkit-mask': `url(${this.iconClass}) no-repeat 50% 50%` | |
20 | + computed: { | |
21 | + iconName() { | |
22 | + return `#icon-${this.iconClass}` | |
23 | + }, | |
24 | + svgClass() { | |
25 | + if (this.className) { | |
26 | + return 'svg-icon ' + this.className | |
27 | + } else { | |
28 | + return 'svg-icon' | |
29 | + } | |
42 | 30 | } |
43 | 31 | } |
44 | 32 | } |
45 | -} | |
46 | 33 | </script> |
47 | 34 | |
48 | 35 | <style scoped> |
49 | -.svg-icon { | |
50 | - width: 1em; | |
51 | - height: 1em; | |
52 | - vertical-align: -0.15em; | |
53 | - fill: currentColor; | |
54 | - overflow: hidden; | |
55 | -} | |
56 | - | |
57 | -.svg-external-icon { | |
58 | - background-color: currentColor; | |
59 | - mask-size: cover!important; | |
60 | - display: inline-block; | |
61 | -} | |
36 | + .svg-icon { | |
37 | + width: 1em; | |
38 | + height: 1em; | |
39 | + vertical-align: -0.15em; | |
40 | + fill: currentColor; | |
41 | + overflow: hidden; | |
42 | + } | |
62 | 43 | </style> | ... | ... |
src/components/VHeader.vue
src/components/config.js deleted
1 | -let config = { | |
2 | - "entity": null, | |
3 | - "childs": [ | |
4 | - { | |
5 | - "entity": { | |
6 | - "id": 1, //id标识 | |
7 | - "title": "中心首页", //菜单标题 | |
8 | - "icon": "el-icon-s-home",//菜单logo | |
9 | - "url": "/views/dashboard",//菜单路径 | |
10 | - }, | |
11 | - }, | |
12 | - { | |
13 | - "entity": { | |
14 | - "id": 2, | |
15 | - "title": "我的钱包", | |
16 | - "icon": "el-icon-bank-card", | |
17 | - "url": "example", | |
18 | - }, | |
19 | - "childs": [ | |
20 | - { | |
21 | - "entity": { | |
22 | - "id": 2-1, | |
23 | - "title": "我的账户", | |
24 | - "url": "account", | |
25 | - }, | |
26 | - "childs": null | |
27 | - }, | |
28 | - { | |
29 | - "entity": { | |
30 | - "id": 2-2, | |
31 | - "title": "我的卡券", | |
32 | - "url": "cardticket", | |
33 | - } | |
34 | - }, | |
35 | - ] | |
36 | - }, | |
37 | - { | |
38 | - "entity": { | |
39 | - "id": 3, | |
40 | - "title": "我的订单", | |
41 | - "icon": "el-icon-tickets", | |
42 | - "url": "order", | |
43 | - }, | |
44 | - | |
45 | - }, | |
46 | - { | |
47 | - "entity": { | |
48 | - "id": 4, | |
49 | - "title": "欠费补缴", | |
50 | - "icon": "el-icon-document-checked", | |
51 | - "url": "payback", | |
52 | - } | |
53 | - }, | |
54 | - { | |
55 | - "entity": { | |
56 | - "id": 5, | |
57 | - "title": "我的车辆", | |
58 | - "icon": "el-icon-truck", | |
59 | - "url": "mycar", | |
60 | - } | |
61 | - }, | |
62 | - { | |
63 | - "entity": { | |
64 | - "id": 6, | |
65 | - "title": "个人中心", | |
66 | - "icon": "el-icon-s-custom", | |
67 | - "url": "mycar", | |
68 | - }, | |
69 | - "childs": [ | |
70 | - { | |
71 | - "entity": { | |
72 | - "id": 6-1, | |
73 | - "title": "个人资料", | |
74 | - "url": "information", | |
75 | - }, | |
76 | - "childs": null | |
77 | - }, | |
78 | - { | |
79 | - "entity": { | |
80 | - "id": 6-2, | |
81 | - "title": "我的评价", | |
82 | - "url": "myevaluate", | |
83 | - } | |
84 | - }, | |
85 | - ] | |
86 | - }, | |
87 | - ] | |
88 | -} | |
89 | -export default config |
src/layout/components/Navbar.vue
... | ... | @@ -2,7 +2,7 @@ |
2 | 2 | <div class="navbar"> |
3 | 3 | <hamburger :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" /> |
4 | 4 | |
5 | - <!--<breadcrumb class="breadcrumb-container" />--> | |
5 | + <breadcrumb class="breadcrumb-container" /> | |
6 | 6 | |
7 | 7 | <div class="right-menu"> |
8 | 8 | <el-dropdown class="avatar-container" trigger="click"> |
... | ... | @@ -11,9 +11,19 @@ |
11 | 11 | <i class="el-icon-caret-bottom" /> |
12 | 12 | </div> |
13 | 13 | <el-dropdown-menu slot="dropdown" class="user-dropdown"> |
14 | - | |
14 | + <router-link to="/"> | |
15 | + <el-dropdown-item> | |
16 | + Home | |
17 | + </el-dropdown-item> | |
18 | + </router-link> | |
19 | + <a target="_blank" href="https://github.com/PanJiaChen/vue-admin-template/"> | |
20 | + <el-dropdown-item>Github</el-dropdown-item> | |
21 | + </a> | |
22 | + <a target="_blank" href="https://panjiachen.github.io/vue-element-admin-site/#/"> | |
23 | + <el-dropdown-item>Docs</el-dropdown-item> | |
24 | + </a> | |
15 | 25 | <el-dropdown-item divided> |
16 | - <span style="display:block;" @click="logout">退出</span> | |
26 | + <span style="display:block;" @click="logout">Log Out</span> | |
17 | 27 | </el-dropdown-item> |
18 | 28 | </el-dropdown-menu> |
19 | 29 | </el-dropdown> |
... | ... | @@ -23,12 +33,12 @@ |
23 | 33 | |
24 | 34 | <script> |
25 | 35 | import { mapGetters } from 'vuex' |
26 | -// import Breadcrumb from '@/components/Breadcrumb' | |
36 | +import Breadcrumb from '@/components/Breadcrumb' | |
27 | 37 | import Hamburger from '@/components/Hamburger' |
28 | 38 | |
29 | 39 | export default { |
30 | 40 | components: { |
31 | - // Breadcrumb, | |
41 | + Breadcrumb, | |
32 | 42 | Hamburger |
33 | 43 | }, |
34 | 44 | computed: { | ... | ... |
src/layout/components/Sidebar/index.vue
... | ... | @@ -12,7 +12,7 @@ |
12 | 12 | :collapse-transition="false" |
13 | 13 | mode="vertical" |
14 | 14 | > |
15 | - <sidebar-item v-for="route in routes" :key="route.path" :item="route" :base-path="route.path" /> | |
15 | + <sidebar-item v-for="route in totalList" :key="route.path" :item="route" :base-path="route.path" /> | |
16 | 16 | </el-menu> |
17 | 17 | </el-scrollbar> |
18 | 18 | </div> |
... | ... | @@ -51,6 +51,9 @@ export default { |
51 | 51 | isCollapse() { |
52 | 52 | return !this.sidebar.opened |
53 | 53 | } |
54 | - } | |
54 | + }, | |
55 | + created(){ | |
56 | + this.totalList = config.children | |
57 | + }, | |
55 | 58 | } |
56 | 59 | </script> | ... | ... |
src/main.js
... | ... | @@ -4,7 +4,7 @@ import 'normalize.css/normalize.css' // A modern alternative to CSS resets |
4 | 4 | |
5 | 5 | import ElementUI from 'element-ui' |
6 | 6 | import 'element-ui/lib/theme-chalk/index.css' |
7 | -import locale from 'element-ui/lib/locale/lang/en' // lang i18n | |
7 | +// import locale from 'element-ui/lib/locale/lang/en' // lang i18n | |
8 | 8 | |
9 | 9 | import '@/styles/index.scss' // global css |
10 | 10 | |
... | ... | @@ -34,7 +34,7 @@ Object.keys(filters).forEach(key => { |
34 | 34 | Vue.filter(key, filters[key]) |
35 | 35 | }) |
36 | 36 | // set ElementUI lang to EN |
37 | -Vue.use(ElementUI, { locale }) | |
37 | +Vue.use(ElementUI) | |
38 | 38 | |
39 | 39 | Vue.config.productionTip = false |
40 | 40 | ... | ... |
src/router/index.js
... | ... | @@ -4,7 +4,6 @@ import Router from 'vue-router' |
4 | 4 | import Layout from '@/layout' |
5 | 5 | import home from '@/views/home' |
6 | 6 | // 引用 news 子路由配置文件 |
7 | -import parkservice from './parkservice.js' | |
8 | 7 | Vue.use(Router) |
9 | 8 | |
10 | 9 | /* Layout */ |
... | ... | @@ -56,12 +55,59 @@ export const constantRoutes = [ |
56 | 55 | }, |
57 | 56 | { |
58 | 57 | path: '/service', |
59 | - component: Layout, | |
58 | + redirect:'/dashboard', | |
59 | + component: () => import('@/views/service'), | |
60 | 60 | meta: { |
61 | 61 | title: '停车服务' |
62 | 62 | |
63 | 63 | }, |
64 | - children: parkservice | |
64 | + children:[ | |
65 | + { | |
66 | + path: '/dashboard', | |
67 | + component: () => import('@/views/dashboard/index'), | |
68 | + meta: { title: '服务首页', icon: 'dashboard' } | |
69 | + }, | |
70 | + | |
71 | + { | |
72 | + path: '/account', | |
73 | + component: () => import('@/views/account/index'), | |
74 | + meta: { title: '我的账户',icon: 'money' } | |
75 | + | |
76 | + }, | |
77 | + { | |
78 | + path: '/cardticket', | |
79 | + component: () => import('@/views/cardticket/index'), | |
80 | + meta: { title: '我的卡券', icon: 'card' } | |
81 | + }, | |
82 | + | |
83 | + { | |
84 | + path: '/order', | |
85 | + component: () => import('@/views/order/index'), | |
86 | + meta: { title: '我的订单', icon: 'form' } | |
87 | + }, | |
88 | + { | |
89 | + path: '/payback', | |
90 | + component: () => import('@/views/payback/index'), | |
91 | + meta: { title: '欠费补缴', icon: 'nested' } | |
92 | + }, | |
93 | + | |
94 | + { | |
95 | + path: '/mycar', | |
96 | + component: () => import('@/views/mycar/index'), | |
97 | + meta: { title: '我的车辆', icon: 'car' } | |
98 | + | |
99 | + }, | |
100 | + { | |
101 | + path: '/information', | |
102 | + component: () => import('@/views/information/index'), | |
103 | + meta: { title: '个人资料' ,icon: 'people'} | |
104 | + }, | |
105 | + { | |
106 | + path: '/myevaluate', | |
107 | + component: () => import('@/views/myevaluate/index'), | |
108 | + meta: { title: '我的评价',icon: 'skill' } | |
109 | + } | |
110 | + ] | |
65 | 111 | }, |
66 | 112 | { |
67 | 113 | path: '/center', | ... | ... |
src/router/parkservice.js deleted
1 | - | |
2 | - | |
3 | -export default [ | |
4 | - | |
5 | - { | |
6 | - path: '/dashboard', | |
7 | - component: () => import('@/views/dashboard/index'), | |
8 | - meta: { title: '服务首页', icon: 'dashboard' } | |
9 | - }, | |
10 | - | |
11 | - { | |
12 | - path: '/account', | |
13 | - component: () => import('@/views/account/index'), | |
14 | - meta: { title: '我的账户',icon: 'money' } | |
15 | - | |
16 | - }, | |
17 | - { | |
18 | - path: 'cardticket', | |
19 | - component: () => import('@/views/cardticket/index'), | |
20 | - meta: { title: '我的卡券', icon: 'card' } | |
21 | - }, | |
22 | - | |
23 | - { | |
24 | - path: '/order', | |
25 | - component: () => import('@/views/order/index'), | |
26 | - meta: { title: '我的订单', icon: 'form' } | |
27 | - }, | |
28 | - { | |
29 | - path: '/payback', | |
30 | - component: () => import('@/views/payback/index'), | |
31 | - meta: { title: '欠费补缴', icon: 'nested' } | |
32 | - }, | |
33 | - | |
34 | - { | |
35 | - path: '/mycar', | |
36 | - component: () => import('@/views/mycar/index'), | |
37 | - meta: { title: '我的车辆', icon: 'car' } | |
38 | - | |
39 | - }, | |
40 | - { | |
41 | - path: '/information', | |
42 | - component: () => import('@/views/information/index'), | |
43 | - meta: { title: '个人资料' ,icon: 'people'} | |
44 | - }, | |
45 | - { | |
46 | - path: '/myevaluate', | |
47 | - component: () => import('@/views/myevaluate/index'), | |
48 | - meta: { title: '我的评价',icon: 'skill' } | |
49 | - } | |
50 | -] | |
51 | - |
src/styles/element-ui.scss
src/views/service.vue
1 | + | |
2 | +<template> | |
3 | + <div > | |
4 | + <el-container style="min-height: 550px"> | |
5 | + <el-aside width="210px" style="background-color: rgb(84, 92, 100);"> | |
6 | + <!--左侧菜单组件--> | |
7 | + <el-menu | |
8 | + default-active="2" | |
9 | + class="el-menu-vertical-demo" | |
10 | + @open="handleOpen" | |
11 | + @close="handleClose" | |
12 | + background-color="#545c64" | |
13 | + text-color="#fff" | |
14 | + active-text-color="#409eff" router> | |
15 | + <el-menu-item index="/dashboard" class="is-active"> | |
16 | + <i class="el-icon-menu "></i> | |
17 | + <span slot="title">服务首页</span> | |
18 | + </el-menu-item> | |
19 | + <el-submenu index="1"> | |
20 | + <template slot="title"> | |
21 | + <i class="el-icon-bank-card"></i> | |
22 | + <span>我的钱包</span> | |
23 | + </template> | |
24 | + <el-menu-item index="/account">我的账户</el-menu-item> | |
25 | + <el-menu-item index="/cardticket">我的卡券</el-menu-item> | |
26 | + </el-submenu> | |
27 | + <el-menu-item index="/order"> | |
28 | + <i class="el-icon-tickets"></i> | |
29 | + <span slot="title">我的订单</span> | |
30 | + </el-menu-item> | |
31 | + <el-menu-item index="/payback"> | |
32 | + <i class="el-icon-finished"></i> | |
33 | + <span slot="title">欠费补缴</span> | |
34 | + </el-menu-item> | |
35 | + <el-menu-item index="/mycar"> | |
36 | + <i class="el-icon-truck"></i> | |
37 | + <span slot="title">我的车辆</span> | |
38 | + </el-menu-item> | |
39 | + <el-submenu index="2"> | |
40 | + <template slot="title"> | |
41 | + <i class="el-icon-user-solid"></i> | |
42 | + <span>个人中心</span> | |
43 | + </template> | |
44 | + <el-menu-item index="/information">个人资料</el-menu-item> | |
45 | + <el-menu-item index="/myevaluate">我的评价</el-menu-item> | |
46 | + </el-submenu> | |
47 | + </el-menu> | |
48 | + </el-aside> | |
49 | + | |
50 | + <el-main class="app-container"> | |
51 | + <router-view :key="key" /> | |
52 | + </el-main> | |
53 | + </el-container> | |
54 | + | |
55 | + </div> | |
56 | + | |
57 | +</template> | |
58 | + | |
59 | +<script> | |
60 | + export default { | |
61 | + computed: { | |
62 | + key() { | |
63 | + return this.index | |
64 | + } | |
65 | + }, | |
66 | + methods: { | |
67 | + handleOpen(key, keyPath) { | |
68 | + console.log(key, keyPath); | |
69 | + }, | |
70 | + handleClose(key, keyPath) { | |
71 | + console.log(key, keyPath); | |
72 | + } | |
73 | + } | |
74 | + } | |
75 | + | |
76 | +</script> | |
77 | +<style scoped> | |
78 | + | |
79 | +</style> | ... | ... |