Commit 227ea0fff03c7f78f8c04a05feee049a9e12605b
Merge branch 'test' of http://gitlab.renniting.cn/web_developers/lzsandtable into test
Showing
30 changed files
with
1168 additions
and
129 deletions
build/utils.js
@@ -60,7 +60,14 @@ exports.cssLoaders = function (options) { | @@ -60,7 +60,14 @@ exports.cssLoaders = function (options) { | ||
60 | postcss: generateLoaders(), | 60 | postcss: generateLoaders(), |
61 | less: generateLoaders('less'), | 61 | less: generateLoaders('less'), |
62 | sass: generateLoaders('sass', { indentedSyntax: true }), | 62 | sass: generateLoaders('sass', { indentedSyntax: true }), |
63 | - scss: generateLoaders('sass'), | 63 | + scss: generateLoaders('sass').concat( |
64 | + { | ||
65 | + loader: 'sass-resources-loader', | ||
66 | + options: { | ||
67 | + resources: path.resolve(__dirname, '../src/style/mixin.scss')//引入的scss文件位置 | ||
68 | + } | ||
69 | + } | ||
70 | + ), | ||
64 | stylus: generateLoaders('stylus'), | 71 | stylus: generateLoaders('stylus'), |
65 | styl: generateLoaders('stylus') | 72 | styl: generateLoaders('stylus') |
66 | } | 73 | } |
package-lock.json
@@ -3132,6 +3132,14 @@ | @@ -3132,6 +3132,14 @@ | ||
3132 | "safer-buffer": "^2.1.0" | 3132 | "safer-buffer": "^2.1.0" |
3133 | } | 3133 | } |
3134 | }, | 3134 | }, |
3135 | + "echarts": { | ||
3136 | + "version": "4.1.0", | ||
3137 | + "resolved": "http://registry.npm.taobao.org/echarts/download/echarts-4.1.0.tgz", | ||
3138 | + "integrity": "sha1-1YjJX3PBqZKLnHPVt2l1HDGFvNw=", | ||
3139 | + "requires": { | ||
3140 | + "zrender": "4.0.4" | ||
3141 | + } | ||
3142 | + }, | ||
3135 | "ee-first": { | 3143 | "ee-first": { |
3136 | "version": "1.1.1", | 3144 | "version": "1.1.1", |
3137 | "resolved": "http://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz", | 3145 | "resolved": "http://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz", |
@@ -10349,6 +10357,45 @@ | @@ -10349,6 +10357,45 @@ | ||
10349 | "semver": "^5.5.0" | 10357 | "semver": "^5.5.0" |
10350 | } | 10358 | } |
10351 | }, | 10359 | }, |
10360 | + "sass-resources-loader": { | ||
10361 | + "version": "2.0.0", | ||
10362 | + "resolved": "http://registry.npm.taobao.org/sass-resources-loader/download/sass-resources-loader-2.0.0.tgz", | ||
10363 | + "integrity": "sha1-iFacVC+/HxjzOmV4t3zFs2xWkR0=", | ||
10364 | + "dev": true, | ||
10365 | + "requires": { | ||
10366 | + "async": "^2.1.4", | ||
10367 | + "chalk": "^1.1.3", | ||
10368 | + "glob": "^7.1.1", | ||
10369 | + "loader-utils": "^1.0.4" | ||
10370 | + }, | ||
10371 | + "dependencies": { | ||
10372 | + "ansi-styles": { | ||
10373 | + "version": "2.2.1", | ||
10374 | + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", | ||
10375 | + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", | ||
10376 | + "dev": true | ||
10377 | + }, | ||
10378 | + "chalk": { | ||
10379 | + "version": "1.1.3", | ||
10380 | + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", | ||
10381 | + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", | ||
10382 | + "dev": true, | ||
10383 | + "requires": { | ||
10384 | + "ansi-styles": "^2.2.1", | ||
10385 | + "escape-string-regexp": "^1.0.2", | ||
10386 | + "has-ansi": "^2.0.0", | ||
10387 | + "strip-ansi": "^3.0.0", | ||
10388 | + "supports-color": "^2.0.0" | ||
10389 | + } | ||
10390 | + }, | ||
10391 | + "supports-color": { | ||
10392 | + "version": "2.0.0", | ||
10393 | + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", | ||
10394 | + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", | ||
10395 | + "dev": true | ||
10396 | + } | ||
10397 | + } | ||
10398 | + }, | ||
10352 | "sax": { | 10399 | "sax": { |
10353 | "version": "1.2.4", | 10400 | "version": "1.2.4", |
10354 | "resolved": "http://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz", | 10401 | "resolved": "http://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz", |
@@ -12660,6 +12707,11 @@ | @@ -12660,6 +12707,11 @@ | ||
12660 | "requires": { | 12707 | "requires": { |
12661 | "camelcase": "^3.0.0" | 12708 | "camelcase": "^3.0.0" |
12662 | } | 12709 | } |
12710 | + }, | ||
12711 | + "zrender": { | ||
12712 | + "version": "4.0.4", | ||
12713 | + "resolved": "http://registry.npm.taobao.org/zrender/download/zrender-4.0.4.tgz", | ||
12714 | + "integrity": "sha1-kQ5g2IjwDJWZBz8jdY3SM0X+SP0=" | ||
12663 | } | 12715 | } |
12664 | } | 12716 | } |
12665 | } | 12717 | } |
package.json
@@ -11,6 +11,7 @@ | @@ -11,6 +11,7 @@ | ||
11 | "build": "node build/build.js" | 11 | "build": "node build/build.js" |
12 | }, | 12 | }, |
13 | "dependencies": { | 13 | "dependencies": { |
14 | + "echarts": "^4.1.0", | ||
14 | "vue": "^2.5.2" | 15 | "vue": "^2.5.2" |
15 | }, | 16 | }, |
16 | "devDependencies": { | 17 | "devDependencies": { |
@@ -50,6 +51,7 @@ | @@ -50,6 +51,7 @@ | ||
50 | "postcss-url": "^7.2.1", | 51 | "postcss-url": "^7.2.1", |
51 | "rimraf": "^2.6.0", | 52 | "rimraf": "^2.6.0", |
52 | "sass-loader": "^7.1.0", | 53 | "sass-loader": "^7.1.0", |
54 | + "sass-resources-loader": "^2.0.0", | ||
53 | "semver": "^5.3.0", | 55 | "semver": "^5.3.0", |
54 | "shelljs": "^0.7.6", | 56 | "shelljs": "^0.7.6", |
55 | "style-loader": "^0.23.1", | 57 | "style-loader": "^0.23.1", |
src/components/HelloWorld.vue deleted
1 | -<template> | ||
2 | - <div class="hello"> | ||
3 | - <h1>{{ msg }}</h1> | ||
4 | - <h2>Essential Links</h2> | ||
5 | - <ul> | ||
6 | - <li> | ||
7 | - <a | ||
8 | - href="https://vuejs.org" | ||
9 | - target="_blank" | ||
10 | - > | ||
11 | - Core Docs | ||
12 | - </a> | ||
13 | - </li> | ||
14 | - <li> | ||
15 | - <a | ||
16 | - href="https://forum.vuejs.org" | ||
17 | - target="_blank" | ||
18 | - > | ||
19 | - Forum | ||
20 | - </a> | ||
21 | - </li> | ||
22 | - <li> | ||
23 | - <a | ||
24 | - href="https://chat.vuejs.org" | ||
25 | - target="_blank" | ||
26 | - > | ||
27 | - Community Chat | ||
28 | - </a> | ||
29 | - </li> | ||
30 | - <li> | ||
31 | - <a | ||
32 | - href="https://twitter.com/vuejs" | ||
33 | - target="_blank" | ||
34 | - > | ||
35 | |||
36 | - </a> | ||
37 | - </li> | ||
38 | - <br> | ||
39 | - <li> | ||
40 | - <a | ||
41 | - href="http://vuejs-templates.github.io/webpack/" | ||
42 | - target="_blank" | ||
43 | - > | ||
44 | - Docs for This Template | ||
45 | - </a> | ||
46 | - </li> | ||
47 | - </ul> | ||
48 | - <h2>Ecosystem</h2> | ||
49 | - <ul> | ||
50 | - <li> | ||
51 | - <a | ||
52 | - href="http://router.vuejs.org/" | ||
53 | - target="_blank" | ||
54 | - > | ||
55 | - vue-router | ||
56 | - </a> | ||
57 | - </li> | ||
58 | - <li> | ||
59 | - <a | ||
60 | - href="http://vuex.vuejs.org/" | ||
61 | - target="_blank" | ||
62 | - > | ||
63 | - vuex | ||
64 | - </a> | ||
65 | - </li> | ||
66 | - <li> | ||
67 | - <a | ||
68 | - href="http://vue-loader.vuejs.org/" | ||
69 | - target="_blank" | ||
70 | - > | ||
71 | - vue-loader | ||
72 | - </a> | ||
73 | - </li> | ||
74 | - <li> | ||
75 | - <a | ||
76 | - href="https://github.com/vuejs/awesome-vue" | ||
77 | - target="_blank" | ||
78 | - > | ||
79 | - awesome-vue | ||
80 | - </a> | ||
81 | - </li> | ||
82 | - </ul> | ||
83 | - </div> | ||
84 | -</template> | ||
85 | - | ||
86 | -<script> | ||
87 | -export default { | ||
88 | - name: 'HelloWorld', | ||
89 | - data () { | ||
90 | - return { | ||
91 | - msg: 'Welcome to Your Vue.js App' | ||
92 | - } | ||
93 | - } | ||
94 | -} | ||
95 | -</script> | ||
96 | - | ||
97 | -<!-- Add "scoped" attribute to limit CSS to this component only --> | ||
98 | -<style scoped> | ||
99 | -h1, h2 { | ||
100 | - font-weight: normal; | ||
101 | -} | ||
102 | -ul { | ||
103 | - list-style-type: none; | ||
104 | - padding: 0; | ||
105 | -} | ||
106 | -li { | ||
107 | - display: inline-block; | ||
108 | - margin: 0 10px; | ||
109 | -} | ||
110 | -a { | ||
111 | - color: #42b983; | ||
112 | -} | ||
113 | -</style> |
src/components/VBerth.vue
0 → 100644
1 | +<template> | ||
2 | + <div class="theme-wrap"> | ||
3 | + <card-title> <span>泊位消息</span></card-title> | ||
4 | + <div class="theme-body"> | ||
5 | + <account-num> | ||
6 | + <span>总计</span> | ||
7 | + </account-num> | ||
8 | + <ul class="income-echart"> | ||
9 | + <li> | ||
10 | + <pie-echart :chart-data="pieChartData"></pie-echart> | ||
11 | + </li> | ||
12 | + <li class="berth-inf"> | ||
13 | + <p><span class="free-berth">{{11834|filterTotal}}</span><span>空余</span></p> | ||
14 | + <p><span class="buss-berth">{{4496|filterTotal}}</span><span>占有</span></p> | ||
15 | + </li> | ||
16 | + </ul> | ||
17 | + </div> | ||
18 | + </div> | ||
19 | +</template> | ||
20 | + | ||
21 | +<script> | ||
22 | +import CardTitle from './base/CardTitle' | ||
23 | +import AccountNum from './base/AccountNum' | ||
24 | +import PieEchart from './base/PieEchart' | ||
25 | +export default { | ||
26 | + name: 'VBerth', | ||
27 | + components: { | ||
28 | + CardTitle, | ||
29 | + AccountNum, | ||
30 | + PieEchart | ||
31 | + }, | ||
32 | + data() { | ||
33 | + return { | ||
34 | + pieChartData: { | ||
35 | + yData: [1,1], | ||
36 | + legendData: ['空余','占有'] | ||
37 | + }, | ||
38 | + } | ||
39 | + }, | ||
40 | + mounted(){ | ||
41 | + //this.drawBar(); | ||
42 | + }, | ||
43 | + methods: { | ||
44 | + | ||
45 | + } | ||
46 | +} | ||
47 | +</script> | ||
48 | + | ||
49 | +<style scoped lang="scss"> | ||
50 | + .theme-wrap { | ||
51 | + height: 100%; | ||
52 | + } | ||
53 | + .theme-body { | ||
54 | + height: calc(100% - 30px); | ||
55 | + margin-left: 20px; | ||
56 | + } | ||
57 | + .income-echart{ | ||
58 | + height: 70%; | ||
59 | + display: flex; | ||
60 | + >li{ | ||
61 | + flex: 1; | ||
62 | + } | ||
63 | + .berth-inf{ | ||
64 | + p{ | ||
65 | + height: 50%; | ||
66 | + display: flex; | ||
67 | + align-items: center; | ||
68 | + justify-content: space-between; | ||
69 | + padding-right: 20px; | ||
70 | + } | ||
71 | + .free-berth{ | ||
72 | + @include fontStyle(24px); | ||
73 | + background-image: $fontBlue; | ||
74 | + } | ||
75 | + .buss-berth{ | ||
76 | + @include fontStyle(24px); | ||
77 | + background-image: $fontOrange; | ||
78 | + } | ||
79 | + } | ||
80 | + } | ||
81 | + | ||
82 | +</style> |
src/components/VEquipment.vue
0 → 100644
1 | +<template> | ||
2 | + <div class="theme-wrap"> | ||
3 | + <card-title> <span>设备监控消息</span></card-title> | ||
4 | + <div class="theme-body"> | ||
5 | + | ||
6 | + </div> | ||
7 | + </div> | ||
8 | +</template> | ||
9 | + | ||
10 | +<script> | ||
11 | +import CardTitle from './base/CardTitle' | ||
12 | +export default { | ||
13 | + name: 'VEquipment', | ||
14 | + components: { | ||
15 | + CardTitle | ||
16 | + }, | ||
17 | + data() { | ||
18 | + return { | ||
19 | + | ||
20 | + } | ||
21 | + }, | ||
22 | + mounted(){ | ||
23 | + }, | ||
24 | + methods: { | ||
25 | + | ||
26 | + } | ||
27 | +} | ||
28 | +</script> | ||
29 | + | ||
30 | +<style scoped lang="scss"> | ||
31 | + .theme-wrap { | ||
32 | + height: 100%; | ||
33 | + } | ||
34 | + .theme-body { | ||
35 | + height: calc(100% - 30px); | ||
36 | + margin-left: 20px; | ||
37 | + } | ||
38 | + | ||
39 | + | ||
40 | +</style> |
src/components/VIncome.vue
0 → 100644
1 | +<template> | ||
2 | + <div class="theme-wrap"> | ||
3 | + <card-title> <span>收入消息</span></card-title> | ||
4 | + <div class="theme-body"> | ||
5 | + <account-num> | ||
6 | + <span>总计</span> | ||
7 | + </account-num> | ||
8 | + <div class="income-echart" id="income-echart"> | ||
9 | + <bar-chart :chart-data="pieChartData"></bar-chart> | ||
10 | + </div> | ||
11 | + </div> | ||
12 | + </div> | ||
13 | +</template> | ||
14 | + | ||
15 | +<script> | ||
16 | +import CardTitle from './base/CardTitle' | ||
17 | +import AccountNum from './base/AccountNum' | ||
18 | +import barChart from './base/barChart' | ||
19 | +export default { | ||
20 | + name: 'VIncome', | ||
21 | + components: { | ||
22 | + CardTitle, | ||
23 | + AccountNum, | ||
24 | + barChart | ||
25 | + }, | ||
26 | + data() { | ||
27 | + return { | ||
28 | + pieChartData: { | ||
29 | + yData: [1,1], | ||
30 | + legendData: ['空余','占有'] | ||
31 | + }, | ||
32 | + } | ||
33 | + }, | ||
34 | + mounted(){ | ||
35 | + //this.drawBar(); | ||
36 | + }, | ||
37 | + methods: { | ||
38 | + | ||
39 | + } | ||
40 | +} | ||
41 | +</script> | ||
42 | + | ||
43 | +<style scoped lang="scss"> | ||
44 | + .theme-wrap { | ||
45 | + height: 100%; | ||
46 | + } | ||
47 | + .theme-body { | ||
48 | + height: calc(100% - 30px); | ||
49 | + margin-left: 20px; | ||
50 | + } | ||
51 | + .income-echart{ | ||
52 | + height: 70%; | ||
53 | + } | ||
54 | + | ||
55 | +</style> |
src/components/VInout.vue
0 → 100644
1 | +<template> | ||
2 | + <div class="theme-wrap"> | ||
3 | + <card-title> <span>进出场消息</span></card-title> | ||
4 | + <div class="theme-body"> | ||
5 | + <div class="access-title"> | ||
6 | + <p><span><span class="access-icon"></span>万达停车场 京A243547 进场</span> <span>07:20</span></p> | ||
7 | + </div> | ||
8 | + <div class="access-img" :style="{backgroundImage:'url('+imgUrl+')'}"></div> | ||
9 | + </div> | ||
10 | + </div> | ||
11 | +</template> | ||
12 | + | ||
13 | +<script> | ||
14 | +import CardTitle from './base/CardTitle' | ||
15 | +import AccountNum from './base/AccountNum' | ||
16 | +export default { | ||
17 | + name: 'VInout', | ||
18 | + components: { | ||
19 | + CardTitle, | ||
20 | + AccountNum | ||
21 | + }, | ||
22 | + data(){ | ||
23 | + return{ | ||
24 | + sideNum: 23454, | ||
25 | + closeNum: 23454, | ||
26 | + imgUrl: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1552297151876&di=fcc094f43d6caaf4b9526dabbefd1243&imgtype=0&src=http%3A%2F%2F5b0988e595225.cdn.sohucs.com%2Fimages%2F20190124%2F1fc9d7e14be54986b9e2e055a2b5ccc1.jpeg'} | ||
27 | + } | ||
28 | +} | ||
29 | +</script> | ||
30 | + | ||
31 | +<style scoped lang="scss"> | ||
32 | + .theme-wrap { | ||
33 | + height: 100%; | ||
34 | + } | ||
35 | + .theme-body { | ||
36 | + height: calc(100% - 30px); | ||
37 | + margin-left: 20px; | ||
38 | + } | ||
39 | + .access-title{ | ||
40 | + height: 30% ; | ||
41 | + display: flex; | ||
42 | + align-items: center; | ||
43 | + p { | ||
44 | + width: 99%; | ||
45 | + padding-right: 20px; | ||
46 | + height: 26px; | ||
47 | + line-height: 26px; | ||
48 | + display: flex; | ||
49 | + justify-content: space-between; | ||
50 | + background: linear-gradient(to right, rgba(0, 45, 140, .1) , rgba(0, 45, 140, .7)); | ||
51 | + | ||
52 | + } | ||
53 | + .access-icon{ | ||
54 | + display: inline-block; | ||
55 | + vertical-align: middle; | ||
56 | + width: 22px; | ||
57 | + height: 26px; | ||
58 | + margin-right: 10px; | ||
59 | + background: url("../images/content/access-icon.png") no-repeat 0 center; | ||
60 | + background-size: 22px 22px; | ||
61 | + } | ||
62 | + } | ||
63 | + .access-img{ | ||
64 | + width: 93%; | ||
65 | + height: 60%; | ||
66 | + background-repeat: no-repeat; | ||
67 | + background-size: 100% 100%; | ||
68 | + } | ||
69 | + | ||
70 | +</style> |
src/components/VParking.vue
0 → 100644
1 | +<template> | ||
2 | + <div class="theme-wrap"> | ||
3 | + <card-title> <span>停车场消息</span></card-title> | ||
4 | + <div class="theme-body"> | ||
5 | + <account-num> | ||
6 | + <span>总计</span> | ||
7 | + </account-num> | ||
8 | + <ul class="theme-container"> | ||
9 | + <li class="roadside"> | ||
10 | + <p>{{sideNum|filterTotal}}</p> | ||
11 | + <p>路侧</p> | ||
12 | + </li> | ||
13 | + <li class="roadclose"> | ||
14 | + <p>{{closeNum|filterTotal}}</p> | ||
15 | + <p>封闭</p> | ||
16 | + </li> | ||
17 | + </ul> | ||
18 | + </div> | ||
19 | + </div> | ||
20 | +</template> | ||
21 | + | ||
22 | +<script> | ||
23 | +import CardTitle from './base/CardTitle' | ||
24 | +import AccountNum from './base/AccountNum' | ||
25 | +export default { | ||
26 | + name: 'VParking', | ||
27 | + components: { | ||
28 | + CardTitle, | ||
29 | + AccountNum | ||
30 | + }, | ||
31 | + data(){ | ||
32 | + return{ | ||
33 | + sideNum: 23454, | ||
34 | + closeNum: 23454 | ||
35 | + } | ||
36 | + } | ||
37 | +} | ||
38 | +</script> | ||
39 | + | ||
40 | +<style scoped lang="scss"> | ||
41 | + .theme-wrap { | ||
42 | + height: 100%; | ||
43 | + } | ||
44 | + .theme-body { | ||
45 | + height: calc(100% - 30px); | ||
46 | + margin-left: 20px; | ||
47 | + } | ||
48 | + .theme-container{ | ||
49 | + height: 70%; | ||
50 | + display: flex; | ||
51 | + align-items: center; | ||
52 | + >li{ | ||
53 | + flex: 1; | ||
54 | + height: 57px; | ||
55 | + padding-left: 70px; | ||
56 | + display: flex; | ||
57 | + flex-direction: column; | ||
58 | + justify-content: space-between; | ||
59 | + &:nth-of-type(1){ | ||
60 | + p{ | ||
61 | + &:first-child{ | ||
62 | + @include fontStyle(24px); | ||
63 | + background-image: $fontBlue; | ||
64 | + } | ||
65 | + &:last-child{ | ||
66 | + font-size: 14px; | ||
67 | + } | ||
68 | + } | ||
69 | + } | ||
70 | + &:nth-of-type(2){ | ||
71 | + p{ | ||
72 | + &:first-child{ | ||
73 | + @include fontStyle(24px); | ||
74 | + background-image: $fontOrange; | ||
75 | + } | ||
76 | + &:last-child{ | ||
77 | + font-size: 14px; | ||
78 | + } | ||
79 | + } | ||
80 | + } | ||
81 | + } | ||
82 | + | ||
83 | + .roadside{ | ||
84 | + background: url("../images/content/roadside.png") no-repeat 0 center; | ||
85 | + } | ||
86 | + .roadclose{ | ||
87 | + background: url("../images/content/roadclose.png") no-repeat 0 center; | ||
88 | + } | ||
89 | + } | ||
90 | + | ||
91 | +</style> |
src/components/VToll.vue
0 → 100644
1 | +<template> | ||
2 | + <div class="theme-wrap"> | ||
3 | + <card-title> <span>收费员消息</span></card-title> | ||
4 | + <div class="theme-body"> | ||
5 | + <account-num> | ||
6 | + <span>应签到</span> | ||
7 | + </account-num> | ||
8 | + <ul class="theme-container"> | ||
9 | + <li class="roadside"> | ||
10 | + <p>{{sideNum|filterTotal}}</p> | ||
11 | + <p>已签到</p> | ||
12 | + </li> | ||
13 | + <li class="roadclose"> | ||
14 | + <p>{{closeNum|filterTotal}}</p> | ||
15 | + <p>未签到</p> | ||
16 | + </li> | ||
17 | + </ul> | ||
18 | + </div> | ||
19 | + </div> | ||
20 | +</template> | ||
21 | + | ||
22 | +<script> | ||
23 | +import CardTitle from './base/CardTitle' | ||
24 | +import AccountNum from './base/AccountNum' | ||
25 | +export default { | ||
26 | + name: 'VToll', | ||
27 | + components: { | ||
28 | + CardTitle, | ||
29 | + AccountNum | ||
30 | + }, | ||
31 | + data(){ | ||
32 | + return{ | ||
33 | + sideNum: 23454, | ||
34 | + closeNum: 23454 | ||
35 | + } | ||
36 | + } | ||
37 | +} | ||
38 | +</script> | ||
39 | + | ||
40 | +<style scoped lang="scss"> | ||
41 | + .theme-wrap { | ||
42 | + height: 100%; | ||
43 | + } | ||
44 | + .theme-body { | ||
45 | + height: calc(100% - 30px); | ||
46 | + margin-left: 20px; | ||
47 | + } | ||
48 | + .theme-container{ | ||
49 | + height: 70%; | ||
50 | + display: flex; | ||
51 | + align-items: center; | ||
52 | + >li{ | ||
53 | + flex: 1; | ||
54 | + height: 49px; | ||
55 | + padding-left: 70px; | ||
56 | + display: flex; | ||
57 | + flex-direction: column; | ||
58 | + justify-content: space-between; | ||
59 | + &:nth-of-type(1){ | ||
60 | + p{ | ||
61 | + &:first-child{ | ||
62 | + @include fontStyle(24px); | ||
63 | + background-image: $fontBlue; | ||
64 | + } | ||
65 | + &:last-child{ | ||
66 | + font-size: 14px; | ||
67 | + } | ||
68 | + } | ||
69 | + } | ||
70 | + &:nth-of-type(2){ | ||
71 | + p{ | ||
72 | + &:first-child{ | ||
73 | + @include fontStyle(24px); | ||
74 | + background-image: $fontOrange; | ||
75 | + } | ||
76 | + &:last-child{ | ||
77 | + font-size: 14px; | ||
78 | + } | ||
79 | + } | ||
80 | + } | ||
81 | + } | ||
82 | + | ||
83 | + .roadside{ | ||
84 | + background: url("../images/content/sign.png") no-repeat 0 center; | ||
85 | + } | ||
86 | + .roadclose{ | ||
87 | + background: url("../images/content/nosign.png") no-repeat 0 center; | ||
88 | + } | ||
89 | + } | ||
90 | + | ||
91 | +</style> |
src/components/base/AccountNum.vue
0 → 100644
1 | +<template> | ||
2 | + <div class="total-wrap"> | ||
3 | + <slot></slot> | ||
4 | + <div class="total-main" > | ||
5 | + <div v-for="item in total" :key="item" :class="item !==',' ? 'eleNumBg':'noeleNumBg'" > | ||
6 | + {{item}} | ||
7 | + </div> | ||
8 | + </div> | ||
9 | + </div> | ||
10 | +</template> | ||
11 | + | ||
12 | +<script> | ||
13 | +import { formaterTotal } from '../../utils/formate' | ||
14 | +export default { | ||
15 | + name: 'AccountNum', | ||
16 | + data(){ | ||
17 | + return { | ||
18 | + total: formaterTotal(219706) | ||
19 | + } | ||
20 | + } | ||
21 | +} | ||
22 | +</script> | ||
23 | + | ||
24 | +<style scoped lang="scss"> | ||
25 | + .total-wrap{ | ||
26 | + height: 30%; | ||
27 | + display: flex; | ||
28 | + align-items: center; | ||
29 | + span{ | ||
30 | + display: inline-block; | ||
31 | + width: 50px; | ||
32 | + text-align: left; | ||
33 | + } | ||
34 | + .total-main{ | ||
35 | + /*margin-left: 10px;*/ | ||
36 | + padding: 5px 5px 5px 0; | ||
37 | + background: url("../../images/content/numBorder.svg") no-repeat; | ||
38 | + background-size: 100% 100%; | ||
39 | + } | ||
40 | + .eleNumBg{ | ||
41 | + width: 20px; | ||
42 | + height: 30px; | ||
43 | + display: inline-block; | ||
44 | + margin-left: 5px; | ||
45 | + line-height: 30px; | ||
46 | + font-size: 22px; | ||
47 | + font-weight: 600; | ||
48 | + text-align: center; | ||
49 | + background: url("../../images/content/numBg.svg") no-repeat; | ||
50 | + background-size: 100% 100%; | ||
51 | + } | ||
52 | + .noeleNumBg{ | ||
53 | + width: 10px; | ||
54 | + height: 30px; | ||
55 | + display: inline-block; | ||
56 | + margin-left: 5px; | ||
57 | + line-height: 30px; | ||
58 | + font-size: 22px; | ||
59 | + font-weight: 600; | ||
60 | + text-align: center; | ||
61 | + } | ||
62 | + } | ||
63 | +</style> |
src/components/base/CardTitle.vue
0 → 100644
1 | +<template> | ||
2 | + <div class="theme-title"> | ||
3 | + <slot></slot> | ||
4 | + </div> | ||
5 | +</template> | ||
6 | + | ||
7 | +<script> | ||
8 | +export default { | ||
9 | + name: 'CardTitle' | ||
10 | +} | ||
11 | +</script> | ||
12 | + | ||
13 | +<style scoped lang="scss"> | ||
14 | + .theme-title { | ||
15 | + height: 30px; | ||
16 | + line-height: 30px; | ||
17 | + background: url("../../images/content/cardTitleBg.png") no-repeat; | ||
18 | + background-size: 100% 100%; | ||
19 | + } | ||
20 | + | ||
21 | + .theme-title span { | ||
22 | + margin-left: 60px; | ||
23 | + position: relative; | ||
24 | + font-size: 14px; | ||
25 | + } | ||
26 | + | ||
27 | + .theme-title span:before { | ||
28 | + content: ''; | ||
29 | + background: url('../../images/content/cardTitleSide.png') no-repeat; | ||
30 | + background-size: 100% 100%; | ||
31 | + position: absolute; | ||
32 | + width: 40px; | ||
33 | + height: 13px; | ||
34 | + top: 3px; | ||
35 | + left: -47px; | ||
36 | + } | ||
37 | + | ||
38 | + .theme-title span:after { | ||
39 | + content: ''; | ||
40 | + background: url('../../images/content/cardTitleSide.png') no-repeat; | ||
41 | + background-size: 100% 100%; | ||
42 | + position: absolute; | ||
43 | + width: 40px; | ||
44 | + height: 13px; | ||
45 | + top: 3px; | ||
46 | + right: -50px; | ||
47 | + } | ||
48 | +</style> |
src/components/base/PieEchart.vue
0 → 100644
1 | +<template> | ||
2 | + <div :class="className" :style="{height:height,width:width}"></div> | ||
3 | +</template> | ||
4 | + | ||
5 | +<script> | ||
6 | +import echarts from 'echarts' | ||
7 | + | ||
8 | +require('echarts/theme/macarons') // echarts theme | ||
9 | +import {debounce} from '../../utils/debounce' | ||
10 | + | ||
11 | +export default { | ||
12 | + name: 'PieEchart', | ||
13 | + props: { | ||
14 | + className: { | ||
15 | + type: String, | ||
16 | + default: 'chart' | ||
17 | + }, | ||
18 | + width: { | ||
19 | + type: String, | ||
20 | + default: '100%' | ||
21 | + }, | ||
22 | + height: { | ||
23 | + type: String, | ||
24 | + default: '100%' | ||
25 | + }, | ||
26 | + autoResize: { | ||
27 | + type: Boolean, | ||
28 | + default: true | ||
29 | + }, | ||
30 | + chartData: { | ||
31 | + type: Object, | ||
32 | + required: true | ||
33 | + } | ||
34 | + }, | ||
35 | + data() { | ||
36 | + return { | ||
37 | + chart: null | ||
38 | + } | ||
39 | + }, | ||
40 | + watch: { | ||
41 | + chartData: function () { | ||
42 | + this.$nextTick(()=>{ | ||
43 | + this.initChart() | ||
44 | + }) | ||
45 | + } | ||
46 | + }, | ||
47 | + mounted() { | ||
48 | + this.initChart() | ||
49 | + if (this.autoResize) { | ||
50 | + this.__resizeHandler = debounce(() => { | ||
51 | + if (this.chart) { | ||
52 | + this.chart.resize() | ||
53 | + } | ||
54 | + }, 100) | ||
55 | + window.addEventListener('resize', this.__resizeHandler) | ||
56 | + } | ||
57 | + }, | ||
58 | + beforeDestroy() { | ||
59 | + if (!this.chart) { | ||
60 | + return | ||
61 | + } | ||
62 | + if (this.autoResize) { | ||
63 | + window.removeEventListener('resize', this.__resizeHandler) | ||
64 | + } | ||
65 | + | ||
66 | + this.chart.dispose() | ||
67 | + this.chart = null | ||
68 | + }, | ||
69 | + methods: { | ||
70 | + setOptions({yData} = {}) { | ||
71 | + this.chart.setOption( | ||
72 | + { | ||
73 | + tooltip: { | ||
74 | + show:false | ||
75 | + }, | ||
76 | + series: [ | ||
77 | + { | ||
78 | + type: 'pie', | ||
79 | + radius: ['60%', '75%'], | ||
80 | + center: ['50%', '50%'], | ||
81 | + hoverAnimation:false, | ||
82 | + label: { | ||
83 | + show: false | ||
84 | + }, | ||
85 | + lableLine: { | ||
86 | + show: false | ||
87 | + }, | ||
88 | + data: [ | ||
89 | + { | ||
90 | + value: yData[0], | ||
91 | + name: '空余', | ||
92 | + itemStyle: { | ||
93 | + normal: { | ||
94 | + color: { | ||
95 | + colorStops: [{ | ||
96 | + offset: 0, | ||
97 | + color: '#00CAFE' // 0% 处的颜色 | ||
98 | + }, { | ||
99 | + offset: 1, | ||
100 | + color: '#2772F4' // 100% 处的颜色 | ||
101 | + }] | ||
102 | + }, | ||
103 | + } | ||
104 | + } | ||
105 | + }, | ||
106 | + { | ||
107 | + value: yData[1], | ||
108 | + name: '占有', | ||
109 | + | ||
110 | + itemStyle: { | ||
111 | + normal: { | ||
112 | + color: { | ||
113 | + colorStops: [{ | ||
114 | + offset: 0, | ||
115 | + color: '#FFBA00' // 0% 处的颜色 | ||
116 | + }, { | ||
117 | + offset: 1, | ||
118 | + color: '#FF8100' // 100% 处的颜色 | ||
119 | + }] | ||
120 | + }, | ||
121 | + } | ||
122 | + } | ||
123 | + }, | ||
124 | + | ||
125 | + ], | ||
126 | + animationType: 'scale', | ||
127 | + animationEasing: 'elasticOut' | ||
128 | + }, | ||
129 | + { | ||
130 | + name: '', type: 'pie', | ||
131 | + clockWise: true,hoverAnimation: false, | ||
132 | + radius: ['90%', '90%'], | ||
133 | + label: { normal: { position: 'center' }}, | ||
134 | + data: [{ | ||
135 | + value: 0, | ||
136 | + label: { | ||
137 | + normal: { | ||
138 | + formatter: '30.5%',//小数点后一位 | ||
139 | + textStyle: { | ||
140 | + color: '#fe8b53', | ||
141 | + fontSize: 18, | ||
142 | + fontWeight: 'normal' | ||
143 | + } | ||
144 | + } | ||
145 | + } | ||
146 | + }, { | ||
147 | + tooltip: {show: false}, | ||
148 | + label: { | ||
149 | + normal: { | ||
150 | + formatter: '\n占有', | ||
151 | + textStyle: { | ||
152 | + color: '#bbeaf9',fontSize: 12 | ||
153 | + } | ||
154 | + } | ||
155 | + } | ||
156 | + }] | ||
157 | + } | ||
158 | + | ||
159 | + ] | ||
160 | + } | ||
161 | + ) | ||
162 | + }, | ||
163 | + initChart() { | ||
164 | + this.chart = echarts.init(this.$el) | ||
165 | + this.setOptions(this.chartData) | ||
166 | + }, | ||
167 | + | ||
168 | + } | ||
169 | +} | ||
170 | +</script> |
src/components/base/barChart.vue
0 → 100644
1 | +<template> | ||
2 | + <div :class="className" :style="{height:height,width:width}"></div> | ||
3 | +</template> | ||
4 | + | ||
5 | +<script> | ||
6 | +import echarts from 'echarts' | ||
7 | + | ||
8 | +require('echarts/theme/macarons') // echarts theme | ||
9 | +import {debounce} from '../../utils/debounce' | ||
10 | + | ||
11 | +export default { | ||
12 | + name: 'barChart', | ||
13 | + props: { | ||
14 | + className: { | ||
15 | + type: String, | ||
16 | + default: 'chart' | ||
17 | + }, | ||
18 | + width: { | ||
19 | + type: String, | ||
20 | + default: '100%' | ||
21 | + }, | ||
22 | + height: { | ||
23 | + type: String, | ||
24 | + default: '100%' | ||
25 | + }, | ||
26 | + autoResize: { | ||
27 | + type: Boolean, | ||
28 | + default: true | ||
29 | + }, | ||
30 | + chartData: { | ||
31 | + type: Object, | ||
32 | + required: true | ||
33 | + } | ||
34 | + }, | ||
35 | + data() { | ||
36 | + return { | ||
37 | + chart: null | ||
38 | + } | ||
39 | + }, | ||
40 | + watch: { | ||
41 | + chartData: function () { | ||
42 | + this.$nextTick(()=>{ | ||
43 | + this.initChart() | ||
44 | + }) | ||
45 | + } | ||
46 | + }, | ||
47 | + mounted() { | ||
48 | + this.initChart() | ||
49 | + if (this.autoResize) { | ||
50 | + this.__resizeHandler = debounce(() => { | ||
51 | + if (this.chart) { | ||
52 | + this.chart.resize() | ||
53 | + } | ||
54 | + }, 100) | ||
55 | + window.addEventListener('resize', this.__resizeHandler) | ||
56 | + } | ||
57 | + }, | ||
58 | + beforeDestroy() { | ||
59 | + if (!this.chart) { | ||
60 | + return | ||
61 | + } | ||
62 | + if (this.autoResize) { | ||
63 | + window.removeEventListener('resize', this.__resizeHandler) | ||
64 | + } | ||
65 | + | ||
66 | + this.chart.dispose() | ||
67 | + this.chart = null | ||
68 | + }, | ||
69 | + methods: { | ||
70 | + setOptions({yData} = {}) { | ||
71 | + this.chart.setOption( | ||
72 | + { | ||
73 | + | ||
74 | + grid: { | ||
75 | + top: 0, | ||
76 | + left: 0, | ||
77 | + right: '20', | ||
78 | + bottom: -10, | ||
79 | + containLabel: true | ||
80 | + }, | ||
81 | + title:{show:false}, | ||
82 | + xAxis: { | ||
83 | + show: false,//尽管显示false,但仍然占用空间containLabel为true的话[echarts bug] | ||
84 | + nameGap:0 | ||
85 | + }, | ||
86 | + yAxis: [{ | ||
87 | + show: true, | ||
88 | + nameLocation:'start', | ||
89 | + //data: ['支付宝', '微信', '其它'], | ||
90 | + data: [ | ||
91 | + { | ||
92 | + value:'支付宝', | ||
93 | + textStyle:{ | ||
94 | + color:'#01AEFE' | ||
95 | + } | ||
96 | + }, | ||
97 | + { | ||
98 | + value:'微信', | ||
99 | + textStyle:{ | ||
100 | + color:'#06C406' | ||
101 | + } | ||
102 | + }, | ||
103 | + { | ||
104 | + value:'其它', | ||
105 | + textStyle:{ | ||
106 | + color:'#FFAB00' | ||
107 | + } | ||
108 | + } | ||
109 | + ],//右侧Y轴值 | ||
110 | + inverse: true, | ||
111 | + axisLine: {show: false}, | ||
112 | + splitLine: {show: false}, | ||
113 | + axisTick: {show: false }, | ||
114 | + axisLabel: { | ||
115 | + //margin:-20, | ||
116 | + // nameTextStyle:{ | ||
117 | + // align:'left' | ||
118 | + // } | ||
119 | + } | ||
120 | + }, { | ||
121 | + show: true, | ||
122 | + inverse: true, | ||
123 | + data: [ | ||
124 | + { | ||
125 | + value:1000, | ||
126 | + textStyle:{ | ||
127 | + color:'#01AEFE' | ||
128 | + } | ||
129 | + }, | ||
130 | + { | ||
131 | + value:200, | ||
132 | + textStyle:{ | ||
133 | + color:'#06C406' | ||
134 | + } | ||
135 | + }, | ||
136 | + { | ||
137 | + value:300, | ||
138 | + textStyle:{ | ||
139 | + color:'#FFAB00' | ||
140 | + } | ||
141 | + } | ||
142 | + ],//右侧Y轴值 | ||
143 | + axisLabel: { | ||
144 | + textStyle: {fontSize: 12,}, | ||
145 | + }, | ||
146 | + axisLine: { show: false }, | ||
147 | + splitLine: { show: false}, | ||
148 | + axisTick: {show: false}, | ||
149 | + }], | ||
150 | + series: [{ | ||
151 | + name: '条', | ||
152 | + type: 'bar', | ||
153 | + yAxisIndex: 0, | ||
154 | + data: [1000,200,300], | ||
155 | + data:[ | ||
156 | + { | ||
157 | + value:1000, | ||
158 | + itemStyle: { | ||
159 | + normal: { | ||
160 | + color: { | ||
161 | + type: 'linear', | ||
162 | + x: 0, | ||
163 | + x1: 1, | ||
164 | + colorStops: [{ | ||
165 | + offset: 0, | ||
166 | + color: '#2772F4' | ||
167 | + }, { | ||
168 | + offset: 1, | ||
169 | + color: '#00CAFE' | ||
170 | + }] | ||
171 | + } | ||
172 | + }, | ||
173 | + } | ||
174 | + }, | ||
175 | + { | ||
176 | + value:200, | ||
177 | + itemStyle: { | ||
178 | + normal: { | ||
179 | + color: { | ||
180 | + type: 'linear', | ||
181 | + x: 0, | ||
182 | + x1: 1, | ||
183 | + colorStops: [{ | ||
184 | + offset: 0, | ||
185 | + color: '#02C202' | ||
186 | + }, { | ||
187 | + offset: 1, | ||
188 | + color: '#51EC51' | ||
189 | + }] | ||
190 | + } | ||
191 | + }, | ||
192 | + } | ||
193 | + }, | ||
194 | + { | ||
195 | + value:300, | ||
196 | + itemStyle: { | ||
197 | + normal: { | ||
198 | + color: { | ||
199 | + type: 'linear', | ||
200 | + x: 0, | ||
201 | + x1: 1, | ||
202 | + colorStops: [{ | ||
203 | + offset: 0, | ||
204 | + color: '#FD8811' | ||
205 | + }, { | ||
206 | + offset: 1, | ||
207 | + color: '#FFAB00' | ||
208 | + }] | ||
209 | + } | ||
210 | + }, | ||
211 | + } | ||
212 | + }, | ||
213 | + | ||
214 | + | ||
215 | + ], | ||
216 | + barWidth: '40%', | ||
217 | + | ||
218 | + label: { | ||
219 | + normal: {show: false} | ||
220 | + }, | ||
221 | + }, { | ||
222 | + name: '框', | ||
223 | + type: 'bar', | ||
224 | + yAxisIndex: 1, | ||
225 | + barGap: '-100%', | ||
226 | + data: [1500,1500,1500],//百分比 | ||
227 | + barWidth: '40%', | ||
228 | + itemStyle: { | ||
229 | + normal: { | ||
230 | + color: 'none', | ||
231 | + borderColor: '#157ADB', | ||
232 | + borderWidth: 0.5, | ||
233 | + //barBorderRadius: 15, | ||
234 | + } | ||
235 | + } | ||
236 | + }, ] | ||
237 | + } | ||
238 | + ) | ||
239 | + }, | ||
240 | + initChart() { | ||
241 | + this.chart = echarts.init(this.$el) | ||
242 | + this.setOptions(this.chartData) | ||
243 | + }, | ||
244 | + | ||
245 | + } | ||
246 | +} | ||
247 | +</script> |
src/images/content/access-icon.png
0 → 100644
853 Bytes
src/images/content/cardTitleBg.png
0 → 100644
2.18 KB
src/images/content/cardTitleSide.png
0 → 100644
1.5 KB
src/images/content/nosign.png
0 → 100644
2.03 KB
src/images/content/numBg.svg
0 → 100644
1 | +<?xml version="1.0" encoding="utf-8"?> | ||
2 | +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | ||
3 | +<svg version="1.1" preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" | ||
4 | + viewBox="0 0 20 29" style="enable-background:new 0 0 20 29;" xml:space="preserve"> | ||
5 | +<style type="text/css"> | ||
6 | + .st0{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_44_);} | ||
7 | +</style> | ||
8 | +<linearGradient id="XMLID_44_" gradientUnits="userSpaceOnUse" x1="10" y1="1.028133e-05" x2="10" y2="29"> | ||
9 | + <stop offset="0" style="stop-color:#574DFE"/> | ||
10 | + <stop offset="1" style="stop-color:#4BD3FF"/> | ||
11 | +</linearGradient> | ||
12 | +<path id="XMLID_2_" class="st0" d="M18,29H2c-1.1,0-2-0.9-2-2v-9.5L2.5,15h14.9l2.5,2.5V27C20,28.1,19.1,29,18,29z M2.5,14L0,11.5V2 | ||
13 | + c0-1.1,0.9-2,2-2h16c1.1,0,2,0.9,2,2v9.5L17.5,14H2.5z"/> | ||
14 | +</svg> |
src/images/content/numBorder.svg
0 → 100644
1 | +<?xml version="1.0" encoding="utf-8"?> | ||
2 | +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | ||
3 | +<svg version="1.1" preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" | ||
4 | + viewBox="0 0 155 39" style="enable-background:new 0 0 155 39;" xml:space="preserve"> | ||
5 | +<style type="text/css"> | ||
6 | + .st0{opacity:0.1;} | ||
7 | + .st1{fill:#157ADB;} | ||
8 | + .st2{opacity:0.5;fill-rule:evenodd;clip-rule:evenodd;fill:#157ADB;} | ||
9 | +</style> | ||
10 | +<g id="XMLID_14_" class="st0"> | ||
11 | + <path id="XMLID_77_" class="st1" d="M154,1v37H1V1H154 M155,0H0v39h155V0L155,0z"/> | ||
12 | +</g> | ||
13 | +<path id="XMLID_15_" class="st2" d="M154,39h-4v-1h4v-4h1v4v1H154z M154,1h-4V0h4h1v1v4h-1V1z M0,39v-1v-4h1v4h4v1H1H0z M1,5H0V1V0 | ||
14 | + h1h4v1H1V5z"/> | ||
15 | +</svg> |
src/images/content/roadclose.png
0 → 100644
1.57 KB
src/images/content/roadside.png
0 → 100644
1.22 KB
src/images/content/sign.png
0 → 100644
2.13 KB
src/main.js
@@ -3,6 +3,12 @@ | @@ -3,6 +3,12 @@ | ||
3 | import Vue from 'vue' | 3 | import Vue from 'vue' |
4 | import App from './App' | 4 | import App from './App' |
5 | import './style/reset.css' | 5 | import './style/reset.css' |
6 | + | ||
7 | +import * as filters from './utils/filters' | ||
8 | +Object.keys(filters).forEach(key => { | ||
9 | + Vue.filter(key, filters[key]) | ||
10 | +}) | ||
11 | + | ||
6 | Vue.config.productionTip = false | 12 | Vue.config.productionTip = false |
7 | 13 | ||
8 | /* eslint-disable no-new */ | 14 | /* eslint-disable no-new */ |
src/style/mixin.scss
0 → 100644
1 | +@mixin fontStyle($size){ | ||
2 | + font-size: $size; | ||
3 | + font-weight:bold; | ||
4 | + -webkit-background-clip: text; | ||
5 | + -webkit-text-fill-color: transparent; | ||
6 | +} | ||
7 | + | ||
8 | +$fontBlue: -webkit-gradient(linear, 0 0, 0 bottom, from(rgba(0,202,254, 1)), to(rgba(39,114,244, 1))); | ||
9 | +$fontOrange: -webkit-gradient(linear, 0 0, 0 bottom, from(rgba(255,186,0, 1)), to(rgba(255,129,0, 1))); |
src/style/reset.css
@@ -61,7 +61,7 @@ body{ | @@ -61,7 +61,7 @@ body{ | ||
61 | background: url("../images/bg.jpg") no-repeat; | 61 | background: url("../images/bg.jpg") no-repeat; |
62 | background-size: 100% 100%; | 62 | background-size: 100% 100%; |
63 | overflow: hidden; | 63 | overflow: hidden; |
64 | - /*background-size:100% 100%;*/ | 64 | + font-size: 14px; |
65 | /*默认颜色*/ | 65 | /*默认颜色*/ |
66 | } | 66 | } |
67 | 67 |
src/utils/debounce.js
0 → 100644
1 | +export function debounce(func, wait, immediate) { | ||
2 | + let timeout, args, context, timestamp, result | ||
3 | + | ||
4 | + const later = function() { | ||
5 | + // 据上一次触发时间间隔 | ||
6 | + const last = +new Date() - timestamp | ||
7 | + | ||
8 | + // 上次被包装函数被调用时间间隔last小于设定时间间隔wait | ||
9 | + if (last < wait && last > 0) { | ||
10 | + timeout = setTimeout(later, wait - last) | ||
11 | + } else { | ||
12 | + timeout = null | ||
13 | + // 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用 | ||
14 | + if (!immediate) { | ||
15 | + result = func.apply(context, args) | ||
16 | + if (!timeout) context = args = null | ||
17 | + } | ||
18 | + } | ||
19 | + } | ||
20 | + | ||
21 | + return function(...args) { | ||
22 | + context = this | ||
23 | + timestamp = +new Date() | ||
24 | + const callNow = immediate && !timeout | ||
25 | + // 如果延时不存在,重新设定延时 | ||
26 | + if (!timeout) timeout = setTimeout(later, wait) | ||
27 | + if (callNow) { | ||
28 | + result = func.apply(context, args) | ||
29 | + context = args = null | ||
30 | + } | ||
31 | + | ||
32 | + return result | ||
33 | + } | ||
34 | +} |
src/utils/filters.js
0 → 100644
1 | +export function filterTotal(val) { | ||
2 | + let str = val.toString() | ||
3 | + let newStr = '' | ||
4 | + let count = 0 | ||
5 | + for(let i=str.length-1;i>=0;i--){ | ||
6 | + if(count % 3 == 0 && count!= 0){ | ||
7 | + newStr = str.charAt(i)+","+newStr | ||
8 | + }else{ | ||
9 | + newStr = str.charAt(i)+newStr | ||
10 | + } | ||
11 | + count++ | ||
12 | + } | ||
13 | + return newStr | ||
14 | +} |
src/utils/formate.js
@@ -3,7 +3,7 @@ function formateday() { | @@ -3,7 +3,7 @@ function formateday() { | ||
3 | let str = '' | 3 | let str = '' |
4 | let year = date.getFullYear() | 4 | let year = date.getFullYear() |
5 | let month = date.getMonth()+1<10? "0"+ (date.getMonth()+1) : date.getMonth()+1 | 5 | let month = date.getMonth()+1<10? "0"+ (date.getMonth()+1) : date.getMonth()+1 |
6 | - let day = date.getDate()<10 ? "0"+date.getDate() : date.getDate | 6 | + let day = date.getDate()<10 ? "0"+date.getDate() : date.getDate() |
7 | str = year +"-"+ month +"-"+ day | 7 | str = year +"-"+ month +"-"+ day |
8 | return str | 8 | return str |
9 | } | 9 | } |
@@ -19,4 +19,19 @@ function formateTime() { | @@ -19,4 +19,19 @@ function formateTime() { | ||
19 | return str | 19 | return str |
20 | } | 20 | } |
21 | 21 | ||
22 | -export { formateday, formateTime } | 22 | +function formaterTotal(val) { |
23 | + let str = val.toString() | ||
24 | + let newStr = '' | ||
25 | + let count = 0 | ||
26 | + for(let i=str.length-1;i>=0;i--){ | ||
27 | + if(count % 3 == 0 && count!= 0){ | ||
28 | + newStr = str.charAt(i)+","+newStr | ||
29 | + }else{ | ||
30 | + newStr = str.charAt(i)+newStr | ||
31 | + } | ||
32 | + count++ | ||
33 | + } | ||
34 | + return newStr.split("") | ||
35 | +} | ||
36 | + | ||
37 | +export { formateday, formateTime, formaterTotal } |
src/view/VHome.vue
@@ -3,17 +3,29 @@ | @@ -3,17 +3,29 @@ | ||
3 | <v-header></v-header> | 3 | <v-header></v-header> |
4 | <ul class="main-wrap"> | 4 | <ul class="main-wrap"> |
5 | <li class="main-left"> | 5 | <li class="main-left"> |
6 | - <div class="frame-wrap"></div> | ||
7 | - <div class="frame-wrap frame-wrap-center"></div> | ||
8 | - <div class="frame-wrap"></div> | 6 | + <div class="frame-wrap"> |
7 | + <v-parking></v-parking> | ||
8 | + </div> | ||
9 | + <div class="frame-wrap frame-wrap-center"> | ||
10 | + <v-toll></v-toll> | ||
11 | + </div> | ||
12 | + <div class="frame-wrap"> | ||
13 | + <v-inout></v-inout> | ||
14 | + </div> | ||
9 | </li> | 15 | </li> |
10 | <li class="main-center"> | 16 | <li class="main-center"> |
11 | <v-map></v-map> | 17 | <v-map></v-map> |
12 | </li> | 18 | </li> |
13 | <li class="main-right"> | 19 | <li class="main-right"> |
14 | - <div class="frame-wrap"></div> | ||
15 | - <div class="frame-wrap frame-wrap-center"></div> | ||
16 | - <div class="frame-wrap"></div> | 20 | + <div class="frame-wrap"> |
21 | + <v-income></v-income> | ||
22 | + </div> | ||
23 | + <div class="frame-wrap frame-wrap-center"> | ||
24 | + <v-berth></v-berth> | ||
25 | + </div> | ||
26 | + <div class="frame-wrap"> | ||
27 | + <v-equipment></v-equipment> | ||
28 | + </div> | ||
17 | </li> | 29 | </li> |
18 | </ul> | 30 | </ul> |
19 | </div> | 31 | </div> |
@@ -22,11 +34,23 @@ | @@ -22,11 +34,23 @@ | ||
22 | <script> | 34 | <script> |
23 | import VHeader from '../components/VHeader' | 35 | import VHeader from '../components/VHeader' |
24 | import VMap from '../components/VMap' | 36 | import VMap from '../components/VMap' |
37 | +import VParking from '../components/VParking' | ||
38 | +import VToll from '../components/VToll' | ||
39 | +import VInout from '../components/VInout' | ||
40 | +import VIncome from '../components/VIncome' | ||
41 | +import VBerth from '../components/VBerth' | ||
42 | +import VEquipment from '../components/VEquipment' | ||
25 | export default { | 43 | export default { |
26 | name: 'VHome', | 44 | name: 'VHome', |
27 | components: { | 45 | components: { |
28 | VHeader, | 46 | VHeader, |
29 | - VMap | 47 | + VMap, |
48 | + VParking, | ||
49 | + VToll, | ||
50 | + VInout, | ||
51 | + VIncome, | ||
52 | + VBerth, | ||
53 | + VEquipment | ||
30 | } | 54 | } |
31 | } | 55 | } |
32 | </script> | 56 | </script> |
@@ -57,11 +81,14 @@ export default { | @@ -57,11 +81,14 @@ export default { | ||
57 | } | 81 | } |
58 | .frame-wrap{ | 82 | .frame-wrap{ |
59 | height: calc((100% - 20px)/3); | 83 | height: calc((100% - 20px)/3); |
60 | - border-image-source: url("../images/content/frame-wrap.png"); | ||
61 | - border-image-slice: 10 16 15 10 fill; | ||
62 | - border-width: 10px 16px 15px 10px; | ||
63 | - border-style: solid; | ||
64 | - background-clip: border-box; | 84 | + background: url("../images/content/frame-wrap.png"); |
85 | + background-size: 100% 100%; | ||
86 | + overflow: hidden; | ||
87 | + /*border-image-source: url("../images/content/frame-wrap.png");*/ | ||
88 | + /*border-image-slice: 3 16 11 3 fill;*/ | ||
89 | + /*border-width: 3px 18px 11px 3px;*/ | ||
90 | + /*border-style: solid;*/ | ||
91 | + /*background-clip: border-box;*/ | ||
65 | } | 92 | } |
66 | 93 | ||
67 | </style> | 94 | </style> |