Commit 9287779ac911857f66b0149df2da33126b59af0a
1 parent
00e29fae
add 官网嵌入车主平台 架构
Showing
10 changed files
with
180 additions
and
201 deletions
src/components/SvgIcon/index.vue
1 | <template> | 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 | <use :xlink:href="iconName" /> | 3 | <use :xlink:href="iconName" /> |
5 | </svg> | 4 | </svg> |
6 | </template> | 5 | </template> |
7 | 6 | ||
8 | <script> | 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 | </script> | 33 | </script> |
47 | 34 | ||
48 | <style scoped> | 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 | </style> | 43 | </style> |
src/components/VHeader.vue
@@ -38,7 +38,7 @@ export default { | @@ -38,7 +38,7 @@ export default { | ||
38 | } | 38 | } |
39 | </script> | 39 | </script> |
40 | 40 | ||
41 | -<style scoped lang="scss"> | 41 | +<style lang="scss"> |
42 | /* http://meyerweb.com/eric/tools/css/reset/ | 42 | /* http://meyerweb.com/eric/tools/css/reset/ |
43 | v4.0 | 20180602 | 43 | v4.0 | 20180602 |
44 | License: none (public domain) | 44 | License: none (public domain) |
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,7 +2,7 @@ | ||
2 | <div class="navbar"> | 2 | <div class="navbar"> |
3 | <hamburger :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" /> | 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 | <div class="right-menu"> | 7 | <div class="right-menu"> |
8 | <el-dropdown class="avatar-container" trigger="click"> | 8 | <el-dropdown class="avatar-container" trigger="click"> |
@@ -11,9 +11,19 @@ | @@ -11,9 +11,19 @@ | ||
11 | <i class="el-icon-caret-bottom" /> | 11 | <i class="el-icon-caret-bottom" /> |
12 | </div> | 12 | </div> |
13 | <el-dropdown-menu slot="dropdown" class="user-dropdown"> | 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 | <el-dropdown-item divided> | 25 | <el-dropdown-item divided> |
16 | - <span style="display:block;" @click="logout">退出</span> | 26 | + <span style="display:block;" @click="logout">Log Out</span> |
17 | </el-dropdown-item> | 27 | </el-dropdown-item> |
18 | </el-dropdown-menu> | 28 | </el-dropdown-menu> |
19 | </el-dropdown> | 29 | </el-dropdown> |
@@ -23,12 +33,12 @@ | @@ -23,12 +33,12 @@ | ||
23 | 33 | ||
24 | <script> | 34 | <script> |
25 | import { mapGetters } from 'vuex' | 35 | import { mapGetters } from 'vuex' |
26 | -// import Breadcrumb from '@/components/Breadcrumb' | 36 | +import Breadcrumb from '@/components/Breadcrumb' |
27 | import Hamburger from '@/components/Hamburger' | 37 | import Hamburger from '@/components/Hamburger' |
28 | 38 | ||
29 | export default { | 39 | export default { |
30 | components: { | 40 | components: { |
31 | - // Breadcrumb, | 41 | + Breadcrumb, |
32 | Hamburger | 42 | Hamburger |
33 | }, | 43 | }, |
34 | computed: { | 44 | computed: { |
src/layout/components/Sidebar/index.vue
@@ -12,7 +12,7 @@ | @@ -12,7 +12,7 @@ | ||
12 | :collapse-transition="false" | 12 | :collapse-transition="false" |
13 | mode="vertical" | 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 | </el-menu> | 16 | </el-menu> |
17 | </el-scrollbar> | 17 | </el-scrollbar> |
18 | </div> | 18 | </div> |
@@ -51,6 +51,9 @@ export default { | @@ -51,6 +51,9 @@ export default { | ||
51 | isCollapse() { | 51 | isCollapse() { |
52 | return !this.sidebar.opened | 52 | return !this.sidebar.opened |
53 | } | 53 | } |
54 | - } | 54 | + }, |
55 | + created(){ | ||
56 | + this.totalList = config.children | ||
57 | + }, | ||
55 | } | 58 | } |
56 | </script> | 59 | </script> |
src/main.js
@@ -4,7 +4,7 @@ import 'normalize.css/normalize.css' // A modern alternative to CSS resets | @@ -4,7 +4,7 @@ import 'normalize.css/normalize.css' // A modern alternative to CSS resets | ||
4 | 4 | ||
5 | import ElementUI from 'element-ui' | 5 | import ElementUI from 'element-ui' |
6 | import 'element-ui/lib/theme-chalk/index.css' | 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 | import '@/styles/index.scss' // global css | 9 | import '@/styles/index.scss' // global css |
10 | 10 | ||
@@ -34,7 +34,7 @@ Object.keys(filters).forEach(key => { | @@ -34,7 +34,7 @@ Object.keys(filters).forEach(key => { | ||
34 | Vue.filter(key, filters[key]) | 34 | Vue.filter(key, filters[key]) |
35 | }) | 35 | }) |
36 | // set ElementUI lang to EN | 36 | // set ElementUI lang to EN |
37 | -Vue.use(ElementUI, { locale }) | 37 | +Vue.use(ElementUI) |
38 | 38 | ||
39 | Vue.config.productionTip = false | 39 | Vue.config.productionTip = false |
40 | 40 |
src/router/index.js
@@ -4,7 +4,6 @@ import Router from 'vue-router' | @@ -4,7 +4,6 @@ import Router from 'vue-router' | ||
4 | import Layout from '@/layout' | 4 | import Layout from '@/layout' |
5 | import home from '@/views/home' | 5 | import home from '@/views/home' |
6 | // 引用 news 子路由配置文件 | 6 | // 引用 news 子路由配置文件 |
7 | -import parkservice from './parkservice.js' | ||
8 | Vue.use(Router) | 7 | Vue.use(Router) |
9 | 8 | ||
10 | /* Layout */ | 9 | /* Layout */ |
@@ -56,12 +55,59 @@ export const constantRoutes = [ | @@ -56,12 +55,59 @@ export const constantRoutes = [ | ||
56 | }, | 55 | }, |
57 | { | 56 | { |
58 | path: '/service', | 57 | path: '/service', |
59 | - component: Layout, | 58 | + redirect:'/dashboard', |
59 | + component: () => import('@/views/service'), | ||
60 | meta: { | 60 | meta: { |
61 | title: '停车服务' | 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 | path: '/center', | 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
1 | // cover some element-ui styles | 1 | // cover some element-ui styles |
2 | - | 2 | +@import url("//unpkg.com/element-ui@2.10.1/lib/theme-chalk/index.css"); |
3 | .el-breadcrumb__inner, | 3 | .el-breadcrumb__inner, |
4 | .el-breadcrumb__inner a { | 4 | .el-breadcrumb__inner a { |
5 | font-weight: 400 !important; | 5 | font-weight: 400 !important; |
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> |