Browse Source

git 库重建

庄逸洲 4 years ago
commit
c2f10044b0
100 changed files with 21430 additions and 0 deletions
  1. 17 0
      .babelrc
  2. 14 0
      .editorconfig
  3. 3 0
      .eslintignore
  4. 199 0
      .eslintrc.js
  5. 2 0
      .gitattributes
  6. 5 0
      .gitignore
  7. 10 0
      .postcssrc.js
  8. 5 0
      .travis.yml
  9. 21 0
      LICENSE
  10. 185 0
      README.md
  11. 195 0
      README.zh-CN.md
  12. 56 0
      build/build.js
  13. 54 0
      build/check-versions.js
  14. BIN
      build/logo.png
  15. 110 0
      build/utils.js
  16. 22 0
      build/vue-loader.conf.js
  17. 105 0
      build/webpack.base.conf.js
  18. 88 0
      build/webpack.dev.conf.js
  19. 175 0
      build/webpack.prod.conf.js
  20. 6 0
      config/dev.env.js
  21. 96 0
      config/index.js
  22. 5 0
      config/prod.env.js
  23. 5 0
      config/sit.env.js
  24. BIN
      favicon.ico
  25. 30 0
      index.html
  26. 14994 0
      package-lock.json
  27. 133 0
      package.json
  28. 11 0
      src/App.vue
  29. 38 0
      src/api/login/login.js
  30. 8 0
      src/api/qiniu.js
  31. 81 0
      src/api/role/admin.js
  32. 72 0
      src/api/role/role.js
  33. 84 0
      src/api/service.js
  34. BIN
      src/assets/401_images/401.gif
  35. BIN
      src/assets/404_images/404.png
  36. BIN
      src/assets/404_images/404_cloud.png
  37. BIN
      src/assets/custom-theme/fonts/element-icons.ttf
  38. BIN
      src/assets/custom-theme/fonts/element-icons.woff
  39. 1 0
      src/assets/custom-theme/index.css
  40. 199 0
      src/assets/echarts-macarons.js
  41. 3 0
      src/assets/eventBus.js
  42. BIN
      src/assets/home/analyze.png
  43. BIN
      src/assets/home/equipment.png
  44. BIN
      src/assets/home/prescription.png
  45. BIN
      src/assets/home/record.png
  46. BIN
      src/assets/home/scheduling.png
  47. BIN
      src/assets/home/sick.png
  48. BIN
      src/assets/home/user.png
  49. BIN
      src/assets/home/userData.png
  50. 370 0
      src/assets/icon/demo.css
  51. 52 0
      src/assets/icon/demo_fontclass.html
  52. 79 0
      src/assets/icon/demo_symbol.html
  53. 90 0
      src/assets/icon/demo_unicode.html
  54. 21 0
      src/assets/icon/iconfont.css
  55. BIN
      src/assets/icon/iconfont.eot
  56. 1 0
      src/assets/icon/iconfont.js
  57. 32 0
      src/assets/icon/iconfont.svg
  58. BIN
      src/assets/icon/iconfont.ttf
  59. BIN
      src/assets/icon/iconfont.woff
  60. 370 0
      src/assets/iconfont/demo.css
  61. 544 0
      src/assets/iconfont/demo_fontclass.html
  62. 743 0
      src/assets/iconfont/demo_symbol.html
  63. 582 0
      src/assets/iconfont/demo_unicode.html
  64. 361 0
      src/assets/iconfont/iconfont.css
  65. BIN
      src/assets/iconfont/iconfont.eot
  66. 1 0
      src/assets/iconfont/iconfont.js
  67. 284 0
      src/assets/iconfont/iconfont.svg
  68. BIN
      src/assets/iconfont/iconfont.ttf
  69. BIN
      src/assets/iconfont/iconfont.woff
  70. BIN
      src/assets/img/data.jpg
  71. BIN
      src/assets/img/jin_blog.png
  72. BIN
      src/assets/logo/logo.png
  73. BIN
      src/assets/record/1.png
  74. BIN
      src/assets/record/10.png
  75. BIN
      src/assets/record/2.png
  76. BIN
      src/assets/record/3.png
  77. BIN
      src/assets/record/4.png
  78. BIN
      src/assets/record/5.png
  79. BIN
      src/assets/record/6.png
  80. BIN
      src/assets/record/7.png
  81. BIN
      src/assets/record/8.png
  82. BIN
      src/assets/record/9.png
  83. 1 0
      src/assets/service/close.svg
  84. BIN
      src/assets/service/delete.png
  85. 1 0
      src/assets/service/empty.svg
  86. BIN
      src/assets/service/ico_bank.png
  87. BIN
      src/assets/service/ico_dg.jpg
  88. BIN
      src/assets/service/ico_succes.png
  89. 13 0
      src/assets/service/icon_Pop-ups_close.svg
  90. 18 0
      src/assets/service/icon_pay_wechat.svg
  91. 6 0
      src/assets/service/red_info_prompt.svg
  92. BIN
      src/assets/service/shoplogo_init.png
  93. BIN
      src/assets/service/version_charge_fail.png
  94. 112 0
      src/components/BackToTop/index.vue
  95. 54 0
      src/components/Breadcrumb/index.vue
  96. 152 0
      src/components/Charts/keyboard.vue
  97. 227 0
      src/components/Charts/lineMarker.vue
  98. 269 0
      src/components/Charts/mixChart.vue
  99. 15 0
      src/components/Charts/mixins/resize.js
  100. 0 0
      src/components/DndList/index.vue

+ 17 - 0
.babelrc View File

@@ -0,0 +1,17 @@
1
+{
2
+  "presets": [
3
+    ["env", {
4
+      "modules": false,
5
+      "targets": {
6
+        "browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
7
+      }
8
+    }],
9
+    "stage-2"
10
+  ],
11
+  "plugins": ["transform-vue-jsx", "transform-runtime"],
12
+  "env": {
13
+    "development":{
14
+      "plugins": ["dynamic-import-node"]
15
+    }
16
+  }
17
+}

+ 14 - 0
.editorconfig View File

@@ -0,0 +1,14 @@
1
+# http://editorconfig.org
2
+root = true
3
+
4
+[*]
5
+charset = utf-8
6
+indent_style = space
7
+indent_size = 2
8
+end_of_line = lf
9
+insert_final_newline = true
10
+trim_trailing_whitespace = true
11
+
12
+[*.md]
13
+insert_final_newline = false
14
+trim_trailing_whitespace = false

+ 3 - 0
.eslintignore View File

@@ -0,0 +1,3 @@
1
+build/*.js
2
+config/*.js
3
+src/assets

+ 199 - 0
.eslintrc.js View File

@@ -0,0 +1,199 @@
1
+module.exports = {
2
+  root: true,
3
+  parser: 'babel-eslint',
4
+  parserOptions: {
5
+    sourceType: 'module'
6
+  },
7
+  env: {
8
+    browser: true,
9
+    node: true,
10
+    es6: true,
11
+  },
12
+  extends: 'eslint:recommended',
13
+  // required to lint *.vue files
14
+  plugins: [
15
+    'html'
16
+  ],
17
+  // check if imports actually resolve
18
+  'settings': {
19
+    'import/resolver': {
20
+      'webpack': {
21
+        'config': 'build/webpack.base.conf.js'
22
+      }
23
+    }
24
+  },
25
+  // add your custom rules here
26
+  //it is base on https://github.com/vuejs/eslint-config-vue
27
+  'rules': {
28
+    'accessor-pairs': 2,
29
+    'arrow-spacing': [2, {
30
+      'before': true,
31
+      'after': true
32
+    }],
33
+    'block-spacing': [2, 'always'],
34
+    'brace-style': [2, '1tbs', {
35
+      'allowSingleLine': true
36
+    }],
37
+    'camelcase': [0, {
38
+      'properties': 'always'
39
+    }],
40
+    'comma-dangle': [2, 'never'],
41
+    'comma-spacing': [2, {
42
+      'before': false,
43
+      'after': true
44
+    }],
45
+    'comma-style': [2, 'last'],
46
+    'constructor-super': 2,
47
+    'curly': [2, 'multi-line'],
48
+    'dot-location': [2, 'property'],
49
+    'eol-last': 2,
50
+    'eqeqeq': [2, 'allow-null'],
51
+    'generator-star-spacing': [2, {
52
+      'before': true,
53
+      'after': true
54
+    }],
55
+    'handle-callback-err': [2, '^(err|error)$'],
56
+    'indent': [2, 2, {
57
+      'SwitchCase': 1
58
+    }],
59
+    'jsx-quotes': [2, 'prefer-single'],
60
+    'key-spacing': [2, {
61
+      'beforeColon': false,
62
+      'afterColon': true
63
+    }],
64
+    'keyword-spacing': [2, {
65
+      'before': true,
66
+      'after': true
67
+    }],
68
+    'new-cap': [2, {
69
+      'newIsCap': true,
70
+      'capIsNew': false
71
+    }],
72
+    'new-parens': 2,
73
+    'no-array-constructor': 2,
74
+    'no-caller': 2,
75
+    'no-console': 'off',
76
+    'no-class-assign': 2,
77
+    'no-cond-assign': 2,
78
+    'no-const-assign': 2,
79
+    'no-control-regex': 0,
80
+    'no-delete-var': 2,
81
+    'no-dupe-args': 2,
82
+    'no-dupe-class-members': 2,
83
+    'no-dupe-keys': 2,
84
+    'no-duplicate-case': 2,
85
+    'no-empty-character-class': 2,
86
+    'no-empty-pattern': 2,
87
+    'no-eval': 2,
88
+    'no-ex-assign': 2,
89
+    'no-extend-native': 2,
90
+    'no-extra-bind': 2,
91
+    'no-extra-boolean-cast': 2,
92
+    'no-extra-parens': [2, 'functions'],
93
+    'no-fallthrough': 2,
94
+    'no-floating-decimal': 2,
95
+    'no-func-assign': 2,
96
+    'no-implied-eval': 2,
97
+    'no-inner-declarations': [2, 'functions'],
98
+    'no-invalid-regexp': 2,
99
+    'no-irregular-whitespace': 2,
100
+    'no-iterator': 2,
101
+    'no-label-var': 2,
102
+    'no-labels': [2, {
103
+      'allowLoop': false,
104
+      'allowSwitch': false
105
+    }],
106
+    'no-lone-blocks': 2,
107
+    'no-mixed-spaces-and-tabs': 2,
108
+    'no-multi-spaces': 2,
109
+    'no-multi-str': 2,
110
+    'no-multiple-empty-lines': [2, {
111
+      'max': 1
112
+    }],
113
+    'no-native-reassign': 2,
114
+    'no-negated-in-lhs': 2,
115
+    'no-new-object': 2,
116
+    'no-new-require': 2,
117
+    'no-new-symbol': 2,
118
+    'no-new-wrappers': 2,
119
+    'no-obj-calls': 2,
120
+    'no-octal': 2,
121
+    'no-octal-escape': 2,
122
+    'no-path-concat': 2,
123
+    'no-proto': 2,
124
+    'no-redeclare': 2,
125
+    'no-regex-spaces': 2,
126
+    'no-return-assign': [2, 'except-parens'],
127
+    'no-self-assign': 2,
128
+    'no-self-compare': 2,
129
+    'no-sequences': 2,
130
+    'no-shadow-restricted-names': 2,
131
+    'no-spaced-func': 2,
132
+    'no-sparse-arrays': 2,
133
+    'no-this-before-super': 2,
134
+    'no-throw-literal': 2,
135
+    'no-trailing-spaces': 2,
136
+    'no-undef': 2,
137
+    'no-undef-init': 2,
138
+    'no-unexpected-multiline': 2,
139
+    'no-unmodified-loop-condition': 2,
140
+    'no-unneeded-ternary': [2, {
141
+      'defaultAssignment': false
142
+    }],
143
+    'no-unreachable': 2,
144
+    'no-unsafe-finally': 2,
145
+    'no-unused-vars': [2, {
146
+      'vars': 'all',
147
+      'args': 'none'
148
+    }],
149
+    'no-useless-call': 2,
150
+    'no-useless-computed-key': 2,
151
+    'no-useless-constructor': 2,
152
+    'no-useless-escape': 0,
153
+    'no-whitespace-before-property': 2,
154
+    'no-with': 2,
155
+    'one-var': [2, {
156
+      'initialized': 'never'
157
+    }],
158
+    'operator-linebreak': [2, 'after', {
159
+      'overrides': {
160
+        '?': 'before',
161
+        ':': 'before'
162
+      }
163
+    }],
164
+    'padded-blocks': [2, 'never'],
165
+    'quotes': [2, 'single', {
166
+      'avoidEscape': true,
167
+      'allowTemplateLiterals': true
168
+    }],
169
+    'semi': [2, 'never'],
170
+    'semi-spacing': [2, {
171
+      'before': false,
172
+      'after': true
173
+    }],
174
+    'space-before-blocks': [2, 'always'],
175
+    'space-before-function-paren': [2, 'never'],
176
+    'space-in-parens': [2, 'never'],
177
+    'space-infix-ops': 2,
178
+    'space-unary-ops': [2, {
179
+      'words': true,
180
+      'nonwords': false
181
+    }],
182
+    'spaced-comment': [2, 'always', {
183
+      'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ',']
184
+    }],
185
+    'template-curly-spacing': [2, 'never'],
186
+    'use-isnan': 2,
187
+    'valid-typeof': 2,
188
+    'wrap-iife': [2, 'any'],
189
+    'yield-star-spacing': [2, 'both'],
190
+    'yoda': [2, 'never'],
191
+    'prefer-const': 2,
192
+    'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
193
+    'object-curly-spacing': [2, 'always', {
194
+      objectsInObjects: false
195
+    }],
196
+    'array-bracket-spacing': [2, 'never']
197
+  }
198
+}
199
+

+ 2 - 0
.gitattributes View File

@@ -0,0 +1,2 @@
1
+# Auto detect text files and perform LF normalization
2
+* text=auto

+ 5 - 0
.gitignore View File

@@ -0,0 +1,5 @@
1
+node_modules
2
+.svn
3
+dist
4
+.git
5
+/.idea

+ 10 - 0
.postcssrc.js View File

@@ -0,0 +1,10 @@
1
+// https://github.com/michael-ciniawsky/postcss-load-config
2
+
3
+module.exports = {
4
+  "plugins": {
5
+    "postcss-import": {},
6
+    "postcss-url": {},
7
+    // to edit target browsers: use "browserslist" field in package.json
8
+    "autoprefixer": {}
9
+  }
10
+}

+ 5 - 0
.travis.yml View File

@@ -0,0 +1,5 @@
1
+language: node_js
2
+node_js: stable
3
+script: npm run test
4
+notifications:
5
+  email: false

+ 21 - 0
LICENSE View File

@@ -0,0 +1,21 @@
1
+MIT License
2
+
3
+Copyright (c) 2017-present PanJiaChen
4
+
5
+Permission is hereby granted, free of charge, to any person obtaining a copy
6
+of this software and associated documentation files (the "Software"), to deal
7
+in the Software without restriction, including without limitation the rights
8
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+copies of the Software, and to permit persons to whom the Software is
10
+furnished to do so, subject to the following conditions:
11
+
12
+The above copyright notice and this permission notice shall be included in all
13
+copies or substantial portions of the Software.
14
+
15
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+SOFTWARE.

+ 185 - 0
README.md View File

@@ -0,0 +1,185 @@
1
+<p align="center">
2
+  <img width="320" src="https://wpimg.wallstcn.com/ecc53a42-d79b-42e2-8852-5126b810a4c8.svg">
3
+</p>
4
+
5
+<p align="center">
6
+  <a href="https://github.com/vuejs/vue">
7
+    <img src="https://img.shields.io/badge/vue-2.5.10-brightgreen.svg" alt="vue">
8
+  </a>
9
+  <a href="https://github.com/ElemeFE/element">
10
+    <img src="https://img.shields.io/badge/element--ui-2.3.2-brightgreen.svg" alt="element-ui">
11
+  </a>
12
+  <a href="https://travis-ci.org/PanJiaChen/vue-element-admin" rel="nofollow">
13
+    <img src="https://travis-ci.org/PanJiaChen/vue-element-admin.svg?branch=master" alt="Build Status">
14
+  </a>
15
+  <a href="https://github.com/PanJiaChen/vue-element-admin/blob/master/LICENSE">
16
+    <img src="https://img.shields.io/github/license/mashape/apistatus.svg" alt="license">
17
+  </a>
18
+  <a href="https://github.com/PanJiaChen/vue-element-admin/releases">
19
+    <img src="https://img.shields.io/github/release/PanJiaChen/vue-element-admin.svg" alt="GitHub release">
20
+  </a>
21
+</p>
22
+
23
+English | [简体中文](./README.zh-CN.md)
24
+
25
+## Introduction
26
+
27
+[vue-element-admin](http://panjiachen.github.io/vue-element-admin) is a front-end management background integration solution. It based on [vue](https://github.com/vuejs/vue) and use the UI Toolkit [element](https://github.com/ElemeFE/element).
28
+
29
+It is a magical vue admin based on the newest development stack of vue, built-in i18n solution, typical templates for enterprise applications, lots of awesome features. It helps you build a large complex Single-Page Applications. I believe whatever your needs are, this project will help you.
30
+
31
+- [Preview](http://panjiachen.github.io/vue-element-admin)
32
+
33
+- [Documentation](https://panjiachen.github.io/vue-element-admin-site/)
34
+
35
+- [Gitter](https://gitter.im/vue-element-admin/discuss)
36
+
37
+- [Wiki](https://github.com/PanJiaChen/vue-element-admin/wiki)
38
+
39
+- [Donate](https://panjiachen.github.io/vue-element-admin-site/donate/)
40
+
41
+- [Gitee](https://panjiachen.gitee.io/vue-element-admin/) 国内用户可访问该地址在线预览
42
+
43
+**This project is positioned as a background integration solution and is not suitable for secondary development as a basic template.**
44
+
45
+ - Base template recommends using: [vueAdmin-template](https://github.com/PanJiaChen/vueAdmin-template)  
46
+ - Desktop: [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin)
47
+
48
+## Preparation
49
+
50
+You need to install [node](http://nodejs.org/) and [git](https://git-scm.com/) locally. The project is based on [ES2015+](http://es6.ruanyifeng.com/), [vue](https://cn.vuejs.org/index.html), [vuex](https://vuex.vuejs.org/zh-cn/), [vue-router](https://router.vuejs.org/zh-cn/), [axios](https://github.com/axios/axios) and [element-ui](https://github.com/ElemeFE/element), all request data is simulated using [Mock.js](https://github.com/nuysoft/Mock).
51
+ Understanding and learning this knowledge in advance will greatly help the use of this project.
52
+
53
+ **This project does not support low version browsers (e.g. IE). Please add polyfill yourself if you need them.**
54
+
55
+ **Note: This project uses element-ui@2.3.0+ version, so the minimum compatible vue@2.5.0+**
56
+
57
+ <p align="center">
58
+  <img width="900" src="https://wpimg.wallstcn.com/a5894c1b-f6af-456e-82df-1151da0839bf.png">
59
+</p>
60
+
61
+## Features
62
+```
63
+- Login / Logout
64
+
65
+- Permission Authentication
66
+  - Page permission
67
+  - Directive permission
68
+  - Two-step login
69
+
70
+- Multi-environment build
71
+  - dev sit stage prod
72
+
73
+- Global Features
74
+  - I18n
75
+  - Multiple dynamic themes
76
+  - Dynamic sidebar (supports multi-level routing)
77
+  - Dynamic breadcrumb
78
+  - Tags-view(Tab page Support right-click operation)
79
+  - Svg Sprite
80
+  - Mock data
81
+  - Screenfull
82
+  - Responsive Sidebar
83
+
84
+- Editor
85
+  - Rich Text Editor
86
+  - Markdown Editor
87
+  - JSON Editor
88
+
89
+- Excel
90
+  - Export Excel
91
+  - Export zip
92
+  - Upload Excel
93
+  - Visualization Excel
94
+
95
+- Table
96
+  - Dynamic Table
97
+  - Drag And Drop Table
98
+  - Tree Table
99
+  - Inline Edit Table
100
+
101
+- Error Page
102
+  - 401
103
+  - 404
104
+
105
+- Components
106
+  - Avatar Upload
107
+  - Back To Top
108
+  - Drag Dialog
109
+  - Drag Kanban
110
+  - Drag List
111
+  - SplitPane
112
+  - Dropzone
113
+  - Sticky
114
+  - CountTo
115
+
116
+- Advanced Example
117
+- Error Log
118
+- Dashboard
119
+- Guide Page
120
+- Echarts
121
+- Clipboard
122
+- Markdown to html
123
+```
124
+
125
+## Getting started
126
+
127
+```bash
128
+# clone the project
129
+git clone https://github.com/PanJiaChen/vue-element-admin.git
130
+
131
+# install dependency
132
+npm install
133
+
134
+# develop
135
+npm run dev
136
+```
137
+
138
+This will automatically open http://localhost:9527.
139
+
140
+## Build
141
+```bash
142
+# build for test environment
143
+npm run build:sit
144
+
145
+# build for production environment
146
+npm run build:prod
147
+```
148
+
149
+## Advanced
150
+```bash
151
+# --report to build with bundle size analytics
152
+npm run build:prod --report
153
+
154
+# --preview to start a server in local to preview
155
+npm run build:prod --preview
156
+
157
+# lint code
158
+npm run lint
159
+
160
+# auto fix
161
+npm run lint -- --fix
162
+```
163
+
164
+Refer to [Documentation](https://panjiachen.github.io/vue-element-admin-site/guide/essentials/deploy.html) for more information
165
+
166
+## Changelog
167
+Detailed changes for each release are documented in the [release notes](https://github.com/PanJiaChen/vue-element-admin/releases).
168
+
169
+## Online Demo
170
+[Preview](http://panjiachen.github.io/vue-element-admin)
171
+
172
+## Donate
173
+If you find this project useful, you can buy author a glass of juice :tropical_drink:
174
+
175
+![donate](https://wpimg.wallstcn.com/bd273f0d-83a0-4ef2-92e1-9ac8ed3746b9.png)
176
+
177
+[Paypal Me](https://www.paypal.me/panfree23)
178
+
179
+[Buy me a coffee](https://www.buymeacoffee.com/Pan)
180
+
181
+## License
182
+
183
+[MIT](https://github.com/PanJiaChen/vue-element-admin/blob/master/LICENSE)
184
+
185
+Copyright (c) 2017-present PanJiaChen

+ 195 - 0
README.zh-CN.md View File

@@ -0,0 +1,195 @@
1
+<p align="center">
2
+  <img width="320" src="https://wpimg.wallstcn.com/ecc53a42-d79b-42e2-8852-5126b810a4c8.svg">
3
+</p>
4
+
5
+<p align="center">
6
+  <a href="https://github.com/vuejs/vue">
7
+    <img src="https://img.shields.io/badge/vue-2.5.10-brightgreen.svg" alt="vue">
8
+  </a>
9
+  <a href="https://github.com/ElemeFE/element">
10
+    <img src="https://img.shields.io/badge/element--ui-2.3.2-brightgreen.svg" alt="element-ui">
11
+  </a>
12
+  <a href="https://travis-ci.org/PanJiaChen/vue-element-admin" rel="nofollow">
13
+    <img src="https://travis-ci.org/PanJiaChen/vue-element-admin.svg?branch=master" alt="Build Status">
14
+  </a>
15
+  <a href="https://github.com/PanJiaChen/vue-element-admin/blob/master/LICENSE">
16
+    <img src="https://img.shields.io/github/license/mashape/apistatus.svg" alt="license">
17
+  </a>
18
+  <a href="https://github.com/PanJiaChen/vue-element-admin/releases">
19
+    <img src="https://img.shields.io/github/release/PanJiaChen/vue-element-admin.svg" alt="GitHub release">
20
+  </a>
21
+</p>
22
+
23
+简体中文 | [English](./README.md)
24
+
25
+## 简介
26
+
27
+[vue-element-admin](http://panjiachen.github.io/vue-element-admin) 是一个后台集成解决方案,它基于 [vue](https://github.com/vuejs/vue) 和 [element](https://github.com/ElemeFE/element)。它使用了最新的前端技术栈,内置了i18国际化解决方案,动态路由,权限验证,提炼了典型的业务模型,提供了丰富的功能组件,它可以帮助你快速搭建企业级中后台产品原型。相信不管你的需求是什么,本项目都能帮助到你。
28
+
29
+- [在线访问](http://panjiachen.github.io/vue-element-admin)
30
+
31
+- [使用文档](https://panjiachen.github.io/vue-element-admin-site/zh/)
32
+
33
+- [Gitter讨论组](https://gitter.im/vue-element-admin/discuss)
34
+
35
+- [Wiki](https://github.com/PanJiaChen/vue-element-admin/wiki)
36
+
37
+- [Donate](https://panjiachen.github.io/vue-element-admin-site/zh/donate/)
38
+
39
+- [Gitee](https://panjiachen.gitee.io/vue-element-admin/) 国内用户可访问该地址在线预览
40
+
41
+**本项目的定位是后台集成方案,不适合当基础模板来开发。**
42
+ - 模板建议使用: [vueAdmin-template](https://github.com/PanJiaChen/vueAdmin-template)  
43
+ - 桌面端: [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin)
44
+
45
+## 前序准备
46
+
47
+你需要在本地安装 [node](http://nodejs.org/) 和 [git](https://git-scm.com/)。本项目技术栈基于 [ES2015+](http://es6.ruanyifeng.com/)、[vue](https://cn.vuejs.org/index.html)、[vuex](https://vuex.vuejs.org/zh-cn/)、[vue-router](https://router.vuejs.org/zh-cn/) 、[axios](https://github.com/axios/axios) 和 [element-ui](https://github.com/ElemeFE/element),所有的请求数据都使用[Mock.js](https://github.com/nuysoft/Mock)模拟,提前了解和学习这些知识会对使用本项目有很大的帮助。
48
+
49
+同时配套一个系列的教程文章,如何从零构建后一个完整的后台项目,建议大家先看完这些文章再来实践本项目
50
+ - [手摸手,带你用 vue 撸后台 系列一(基础篇)](https://juejin.im/post/59097cd7a22b9d0065fb61d2)
51
+ - [手摸手,带你用 vue 撸后台 系列二(登录权限篇)](https://juejin.im/post/591aa14f570c35006961acac)
52
+ - [手摸手,带你用 vue 撸后台 系列三 (实战篇)](https://juejin.im/post/593121aa0ce4630057f70d35)
53
+ - [手摸手,带你用 vue 撸后台 系列四(vueAdmin 一个极简的后台基础模板)](https://juejin.im/post/595b4d776fb9a06bbe7dba56)
54
+ - [手摸手,带你封装一个 vue component](https://segmentfault.com/a/1190000009090836)
55
+ - [手摸手,带你优雅的使用 icon](https://juejin.im/post/59bb864b5188257e7a427c09)
56
+ - [手摸手,带你用合理的姿势使用webpack4(上)](https://juejin.im/post/5b56909a518825195f499806)
57
+ - [手摸手,带你用合理的姿势使用webpack4(下)](https://juejin.im/post/5b5d6d6f6fb9a04fea58aabc)
58
+
59
+ 或者加入该群主 **[圈子](https://jianshiapp.com/circles/1209)** 楼主会经常分享一些技术相关的东西
60
+
61
+ **如有问题请先看上述使用文档和文章,若不能满足,欢迎 issue 和 pr**
62
+
63
+ **本项目并不是一个脚手架,更倾向于是一个集成解决方案**
64
+
65
+ **注意:该项目使用 element-ui@2.3.0+ 版本,所以最低兼容 vue@2.5.0+**
66
+
67
+ **该项目不支持低版本浏览器(如ie),有需求请自行添加polyfill [详情](https://github.com/PanJiaChen/vue-element-admin/wiki#babel-polyfill)**
68
+
69
+ <p align="center">
70
+  <img width="900" src="https://wpimg.wallstcn.com/a5894c1b-f6af-456e-82df-1151da0839bf.png">
71
+</p>
72
+
73
+## 功能
74
+```
75
+- 登录 / 注销
76
+
77
+- 权限验证
78
+  - 页面权限
79
+  - 指令权限
80
+  - 二步登录
81
+
82
+- 多环境发布
83
+  - dev sit stage prod
84
+
85
+- 全局功能
86
+  - 国际化多语言
87
+  - 多种动态换肤
88
+  - 动态侧边栏(支持多级路由嵌套)
89
+  - 动态面包屑
90
+  - 快捷导航(标签页)
91
+  - Svg Sprite 图标
92
+  - 本地mock数据
93
+  - Screenfull全屏
94
+  - 自适应收缩侧边栏
95
+
96
+- 编辑器
97
+  - 富文本
98
+  - Markdown
99
+  - JSON 等多格式
100
+
101
+- Excel
102
+  - 导出excel
103
+  - 导出zip
104
+  - 导入excel
105
+  - 前端可视化excel
106
+
107
+- 表格
108
+  - 动态表格
109
+  - 拖拽表格
110
+  - 树形表格
111
+  - 内联编辑
112
+
113
+- 错误页面
114
+  - 401
115
+  - 404
116
+
117
+- 組件
118
+  - 头像上传
119
+  - 返回顶部
120
+  - 拖拽Dialog
121
+  - 拖拽看板
122
+  - 列表拖拽
123
+  - SplitPane
124
+  - Dropzone
125
+  - Sticky
126
+  - CountTo
127
+
128
+- 综合实例
129
+- 错误日志
130
+- Dashboard
131
+- 引导页
132
+- Echarts 图表
133
+- Clipboard(剪贴复制)
134
+- Markdown2html
135
+```
136
+
137
+## 开发
138
+```bash
139
+# 克隆项目
140
+git clone https://github.com/PanJiaChen/vue-element-admin.git
141
+
142
+# 安装依赖
143
+npm install
144
+   
145
+# 建议不要用cnpm安装 会有各种诡异的bug 可以通过如下操作解决 npm 下载速度慢的问题
146
+npm install --registry=https://registry.npm.taobao.org
147
+
148
+# 启动服务
149
+npm run dev
150
+```
151
+浏览器访问 http://localhost:9527
152
+
153
+## 发布
154
+```bash
155
+# 构建测试环境
156
+npm run build:sit
157
+
158
+# 构建生产环境
159
+npm run build:prod
160
+```
161
+
162
+## 其它
163
+```bash
164
+# --report to build with bundle size analytics
165
+npm run build:prod --report
166
+
167
+# --preview to start a server in local to preview
168
+npm run build:prod --preview
169
+
170
+# lint code
171
+npm run lint
172
+
173
+# auto fix
174
+npm run lint -- --fix
175
+```
176
+
177
+更多信息请参考 [使用文档](https://panjiachen.github.io/vue-element-admin-site/zh/)
178
+
179
+## Changelog
180
+Detailed changes for each release are documented in the [release notes](https://github.com/PanJiaChen/vue-element-admin/releases).
181
+
182
+## Online Demo
183
+[在线 Demo](http://panjiachen.github.io/vue-element-admin)
184
+
185
+## Donate
186
+如果你觉得这个项目帮助到了你,你可以帮作者买一杯果汁表示鼓励 :tropical_drink:
187
+![donate](https://panjiachen.github.io/donate/donation.png)
188
+
189
+[Paypal Me](https://www.paypal.me/panfree23)
190
+
191
+## License
192
+
193
+[MIT](https://github.com/PanJiaChen/vue-element-admin/blob/master/LICENSE)
194
+
195
+Copyright (c) 2017-present PanJiaChen

+ 56 - 0
build/build.js View File

@@ -0,0 +1,56 @@
1
+'use strict'
2
+require('./check-versions')()
3
+
4
+const ora = require('ora')
5
+const rm = require('rimraf')
6
+const path = require('path')
7
+const chalk = require('chalk')
8
+const webpack = require('webpack')
9
+const config = require('../config')
10
+const webpackConfig = require('./webpack.prod.conf')
11
+var connect = require('connect');
12
+var serveStatic = require('serve-static')
13
+
14
+const spinner = ora('building for ' + process.env.env_config + ' environment...')
15
+spinner.start()
16
+
17
+rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
18
+  if (err) throw err
19
+  webpack(webpackConfig, (err, stats) => {
20
+    spinner.stop()
21
+    if (err) throw err
22
+    process.stdout.write(stats.toString({
23
+      colors: true,
24
+      modules: false,
25
+      children: false,
26
+      chunks: false,
27
+      chunkModules: false
28
+    }) + '\n\n')
29
+
30
+    if (stats.hasErrors()) {
31
+      console.log(chalk.red(' Build failed with errors.\n'))
32
+      process.exit(1)
33
+    }
34
+
35
+    console.log(chalk.cyan(' Build complete.\n'))
36
+    console.log(chalk.yellow(
37
+      ' Tip: built files are meant to be served over an HTTP server.\n' +
38
+      ' Opening index.html over file:// won\'t work.\n'
39
+    ))
40
+
41
+    if (process.env.npm_config_preview) {
42
+      const port = 9526
43
+      const host = "http://localhost:" + port
44
+      const basePath = config.build.assetsPublicPath
45
+      const app = connect()
46
+
47
+      app.use(basePath, serveStatic('./dist', {
48
+        'index': ['index.html', '/']
49
+      }))
50
+
51
+      app.listen(port, function () {
52
+        console.log(chalk.green(`> Listening at  http://localhost:${port}${basePath}`))
53
+      });
54
+    }
55
+  })
56
+})

+ 54 - 0
build/check-versions.js View File

@@ -0,0 +1,54 @@
1
+'use strict'
2
+const chalk = require('chalk')
3
+const semver = require('semver')
4
+const packageConfig = require('../package.json')
5
+const shell = require('shelljs')
6
+
7
+function exec (cmd) {
8
+  return require('child_process').execSync(cmd).toString().trim()
9
+}
10
+
11
+const versionRequirements = [
12
+  {
13
+    name: 'node',
14
+    currentVersion: semver.clean(process.version),
15
+    versionRequirement: packageConfig.engines.node
16
+  }
17
+]
18
+
19
+// if (shell.which('npm')) {
20
+//   versionRequirements.push({
21
+//     name: 'npm',
22
+//     currentVersion: exec('npm --version'),
23
+//     versionRequirement: packageConfig.engines.npm
24
+//   })
25
+// }
26
+
27
+module.exports = function () {
28
+  const warnings = []
29
+
30
+  for (let i = 0; i < versionRequirements.length; i++) {
31
+    const mod = versionRequirements[i]
32
+
33
+    if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
34
+      warnings.push(mod.name + ': ' +
35
+        chalk.red(mod.currentVersion) + ' should be ' +
36
+        chalk.green(mod.versionRequirement)
37
+      )
38
+    }
39
+  }
40
+
41
+  if (warnings.length) {
42
+    console.log('')
43
+    console.log(chalk.yellow('To use this template, you must update following to modules:'))
44
+    console.log()
45
+
46
+    for (let i = 0; i < warnings.length; i++) {
47
+      const warning = warnings[i]
48
+      console.log('  ' + warning)
49
+    }
50
+
51
+    console.log()
52
+    process.exit(1)
53
+  }
54
+}

BIN
build/logo.png View File


+ 110 - 0
build/utils.js View File

@@ -0,0 +1,110 @@
1
+'use strict'
2
+const path = require('path')
3
+const config = require('../config')
4
+const ExtractTextPlugin = require('extract-text-webpack-plugin')
5
+const packageConfig = require('../package.json')
6
+
7
+exports.assetsPath = function (_path) {
8
+  const assetsSubDirectory = process.env.NODE_ENV === 'production'
9
+    ? config.build.assetsSubDirectory
10
+    : config.dev.assetsSubDirectory
11
+
12
+  return path.posix.join(assetsSubDirectory, _path)
13
+}
14
+
15
+exports.cssLoaders = function (options) {
16
+  options = options || {}
17
+
18
+  const cssLoader = {
19
+    loader: 'css-loader',
20
+    options: {
21
+      sourceMap: options.sourceMap
22
+    }
23
+  }
24
+
25
+  const postcssLoader = {
26
+    loader: 'postcss-loader',
27
+    options: {
28
+      sourceMap: options.sourceMap
29
+    }
30
+  }
31
+
32
+  // generate loader string to be used with extract text plugin
33
+  function generateLoaders (loader, loaderOptions) {
34
+    const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]
35
+
36
+    if (loader) {
37
+      loaders.push({
38
+        loader: loader + '-loader',
39
+        options: Object.assign({}, loaderOptions, {
40
+          sourceMap: options.sourceMap
41
+        })
42
+      })
43
+    }
44
+
45
+    // Extract CSS when that option is specified
46
+    // (which is the case during production build)
47
+    if (options.extract) {
48
+      return ExtractTextPlugin.extract({
49
+        use: loaders,
50
+        fallback: 'vue-style-loader'
51
+      })
52
+    } else {
53
+      return ['vue-style-loader'].concat(loaders)
54
+    }
55
+  }
56
+
57
+  // https://vue-loader.vuejs.org/en/configurations/extract-css.html
58
+  return {
59
+    css: generateLoaders(),
60
+    postcss: generateLoaders(),
61
+    less: generateLoaders('less'),
62
+    sass: generateLoaders('sass', { indentedSyntax: true }),
63
+    scss: generateLoaders('sass').concat(
64
+      {
65
+        loader: 'sass-resources-loader',
66
+        options: {
67
+          resources: path.resolve(__dirname, '../src/styles/variables.scss')//这里按照你的文件路径填写
68
+        }
69
+      }
70
+    ),
71
+    // scss: generateLoaders('sass'),
72
+    stylus: generateLoaders('stylus'),
73
+    styl: generateLoaders('stylus')
74
+  }
75
+}
76
+
77
+
78
+// Generate loaders for standalone style files (outside of .vue)
79
+exports.styleLoaders = function (options) {
80
+  const output = []
81
+  const loaders = exports.cssLoaders(options)
82
+
83
+  for (const extension in loaders) {
84
+    const loader = loaders[extension]
85
+    output.push({
86
+      test: new RegExp('\\.' + extension + '$'),
87
+      use: loader
88
+    })
89
+  }
90
+
91
+  return output
92
+}
93
+
94
+exports.createNotifierCallback = () => {
95
+  const notifier = require('node-notifier')
96
+
97
+  return (severity, errors) => {
98
+    if (severity !== 'error') return
99
+
100
+    const error = errors[0]
101
+    const filename = error.file && error.file.split('!').pop()
102
+
103
+    notifier.notify({
104
+      title: packageConfig.name,
105
+      message: severity + ': ' + error.name,
106
+      subtitle: filename || '',
107
+      icon: path.join(__dirname, 'logo.png')
108
+    })
109
+  }
110
+}

+ 22 - 0
build/vue-loader.conf.js View File

@@ -0,0 +1,22 @@
1
+'use strict'
2
+const utils = require('./utils')
3
+const config = require('../config')
4
+const isProduction = process.env.NODE_ENV === 'production'
5
+const sourceMapEnabled = isProduction
6
+  ? config.build.productionSourceMap
7
+  : config.dev.cssSourceMap
8
+
9
+module.exports = {
10
+  loaders: utils.cssLoaders({
11
+    sourceMap: sourceMapEnabled,
12
+    extract: isProduction
13
+  }),
14
+  cssSourceMap: sourceMapEnabled,
15
+  cacheBusting: config.dev.cacheBusting,
16
+  transformToRequire: {
17
+    video: ['src', 'poster'],
18
+    source: 'src',
19
+    img: 'src',
20
+    image: 'xlink:href'
21
+  }
22
+}

+ 105 - 0
build/webpack.base.conf.js View File

@@ -0,0 +1,105 @@
1
+'use strict'
2
+const path = require('path')
3
+const utils = require('./utils')
4
+const config = require('../config')
5
+const vueLoaderConfig = require('./vue-loader.conf')
6
+
7
+function resolve (dir) {
8
+  return path.join(__dirname, '..', dir)
9
+}
10
+
11
+// const createLintingRule = () => ({
12
+//   test: /\.(js|vue)$/,
13
+//   loader: 'eslint-loader',
14
+//   enforce: 'pre',
15
+//   include: [resolve('src'), resolve('test')],
16
+//   options: {
17
+//     formatter: require('eslint-friendly-formatter'),
18
+//     emitWarning: !config.dev.showEslintErrorsInOverlay
19
+//   }
20
+// })
21
+
22
+module.exports = {
23
+  context: path.resolve(__dirname, '../'),
24
+  entry: {
25
+    app: './src/main.js'
26
+  },
27
+  output: {
28
+    path: config.build.assetsRoot,
29
+    filename: '[name].js',
30
+    publicPath: process.env.NODE_ENV === 'production'
31
+      ? config.build.assetsPublicPath
32
+      : config.dev.assetsPublicPath
33
+  },
34
+  resolve: {
35
+    extensions: ['.js', '.vue', '.json'],
36
+    alias: {
37
+      'vue$': 'vue/dist/vue.esm.js',
38
+      '@': resolve('src'),
39
+    }
40
+  },
41
+  module: {
42
+    rules: [
43
+      ...(config.dev.useEslint ? [] : []),
44
+      {
45
+        test: /\.vue$/,
46
+        loader: 'vue-loader',
47
+        options: vueLoaderConfig
48
+      },
49
+      {
50
+        test: /\.js$/,
51
+        loader: 'babel-loader?cacheDirectory',
52
+        include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
53
+      },
54
+      {
55
+        test: /\.svg$/,
56
+        loader: 'svg-sprite-loader',
57
+        include: [resolve('src/icons')],
58
+        options: {
59
+          symbolId: 'icon-[name]'
60
+        }
61
+      },
62
+      {
63
+        test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
64
+        loader: 'url-loader',
65
+        exclude: [resolve('src/icons')],
66
+        options: {
67
+          limit: 10000,
68
+          name: utils.assetsPath('img/[name].[hash:7].[ext]')
69
+        }
70
+      },
71
+      {
72
+        test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
73
+        loader: 'url-loader',
74
+        options: {
75
+          limit: 10000,
76
+          name: utils.assetsPath('media/[name].[hash:7].[ext]')
77
+        }
78
+      },
79
+      {
80
+        test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
81
+        loader: 'url-loader',
82
+        options: {
83
+          limit: 10000,
84
+          name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
85
+        }
86
+      },
87
+      {
88
+        test: /\.sass$/,
89
+        loaders: ['style', 'css', 'sass']
90
+      }
91
+    ]
92
+  },
93
+  node: {
94
+    // prevent webpack from injecting useless setImmediate polyfill because Vue
95
+    // source contains it (although only uses it if it's native).
96
+    setImmediate: false,
97
+    // prevent webpack from injecting mocks to Node native modules
98
+    // that does not make sense for the client
99
+    dgram: 'empty',
100
+    fs: 'empty',
101
+    net: 'empty',
102
+    tls: 'empty',
103
+    child_process: 'empty'
104
+  }
105
+}

+ 88 - 0
build/webpack.dev.conf.js View File

@@ -0,0 +1,88 @@
1
+'use strict'
2
+const path = require('path')
3
+const utils = require('./utils')
4
+const webpack = require('webpack')
5
+const config = require('../config')
6
+const merge = require('webpack-merge')
7
+const baseWebpackConfig = require('./webpack.base.conf')
8
+const HtmlWebpackPlugin = require('html-webpack-plugin')
9
+const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
10
+const portfinder = require('portfinder')
11
+
12
+function resolve (dir) {
13
+  return path.join(__dirname, '..', dir)
14
+}
15
+
16
+const HOST = process.env.HOST
17
+const PORT = process.env.PORT && Number(process.env.PORT)
18
+
19
+const devWebpackConfig = merge(baseWebpackConfig, {
20
+  module: {
21
+    rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true })
22
+  },
23
+  // cheap-module-eval-source-map is faster for development
24
+  devtool: config.dev.devtool,
25
+
26
+  // these devServer options should be customized in /config/index.js
27
+  devServer: {
28
+    clientLogLevel: 'warning',
29
+    historyApiFallback: true,
30
+    hot: true,
31
+    compress: true,
32
+    host: HOST || config.dev.host,
33
+    port: PORT || config.dev.port,
34
+    open: config.dev.autoOpenBrowser,
35
+    overlay: config.dev.errorOverlay
36
+      ? { warnings: false, errors: true }
37
+      : false,
38
+    publicPath: config.dev.assetsPublicPath,
39
+    proxy: config.dev.proxyTable,
40
+    quiet: true, // necessary for FriendlyErrorsPlugin
41
+    watchOptions: {
42
+      poll: config.dev.poll,
43
+    }
44
+  },
45
+  plugins: [
46
+    new webpack.DefinePlugin({
47
+      'process.env': require('../config/dev.env')
48
+    }),
49
+    new webpack.HotModuleReplacementPlugin(),
50
+    new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update.
51
+    new webpack.NoEmitOnErrorsPlugin(),
52
+    // https://github.com/ampedandwired/html-webpack-plugin
53
+    new HtmlWebpackPlugin({
54
+      filename: 'index.html',
55
+      template: 'index.html',
56
+      inject: true,
57
+      favicon: resolve('favicon.ico'),
58
+      title: '血透系统',
59
+      path: config.dev.assetsPublicPath + config.dev.assetsSubDirectory
60
+    }),
61
+  ]
62
+})
63
+
64
+module.exports = new Promise((resolve, reject) => {
65
+  portfinder.basePort = process.env.PORT || config.dev.port
66
+  portfinder.getPort((err, port) => {
67
+    if (err) {
68
+      reject(err)
69
+    } else {
70
+      // publish the new Port, necessary for e2e tests
71
+      process.env.PORT = port
72
+      // add port to devServer config
73
+      devWebpackConfig.devServer.port = port
74
+
75
+      // Add FriendlyErrorsPlugin
76
+      devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({
77
+        compilationSuccessInfo: {
78
+          messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`],
79
+        },
80
+        onErrors: config.dev.notifyOnErrors
81
+        ? utils.createNotifierCallback()
82
+        : undefined
83
+      }))
84
+
85
+      resolve(devWebpackConfig)
86
+    }
87
+  })
88
+})

+ 175 - 0
build/webpack.prod.conf.js View File

@@ -0,0 +1,175 @@
1
+'use strict'
2
+const path = require('path')
3
+const utils = require('./utils')
4
+const webpack = require('webpack')
5
+const config = require('../config')
6
+const merge = require('webpack-merge')
7
+const baseWebpackConfig = require('./webpack.base.conf')
8
+const CopyWebpackPlugin = require('copy-webpack-plugin')
9
+const HtmlWebpackPlugin = require('html-webpack-plugin')
10
+const ExtractTextPlugin = require('extract-text-webpack-plugin')
11
+const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
12
+const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
13
+
14
+function resolve (dir) {
15
+  return path.join(__dirname, '..', dir)
16
+}
17
+
18
+const env = require('../config/'+process.env.env_config+'.env')
19
+
20
+const webpackConfig = merge(baseWebpackConfig, {
21
+  module: {
22
+    rules: utils.styleLoaders({
23
+      sourceMap: config.build.productionSourceMap,
24
+      extract: true,
25
+      usePostCSS: true
26
+    })
27
+  },
28
+  devtool: config.build.productionSourceMap ? config.build.devtool : false,
29
+  output: {
30
+    path: config.build.assetsRoot,
31
+    filename: utils.assetsPath('js/[name].[chunkhash].js'),
32
+    chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
33
+  },
34
+  plugins: [
35
+    // http://vuejs.github.io/vue-loader/en/workflow/production.html
36
+    new webpack.DefinePlugin({
37
+      'process.env': env
38
+    }),
39
+    new UglifyJsPlugin({
40
+      uglifyOptions: {
41
+        compress: {
42
+          warnings: false
43
+        }
44
+      },
45
+      sourceMap: config.build.productionSourceMap,
46
+      parallel: true
47
+    }),
48
+    // extract css into its own file
49
+    new ExtractTextPlugin({
50
+      filename: utils.assetsPath('css/[name].[contenthash].css'),
51
+      // Setting the following option to `false` will not extract CSS from codesplit chunks.
52
+      // Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack.
53
+      // increasing file size: https://github.com/vuejs-templates/webpack/issues/1110
54
+      allChunks: false,
55
+    }),
56
+    // Compress extracted CSS. We are using this plugin so that possible
57
+    // duplicated CSS from different components can be deduped.
58
+    new OptimizeCSSPlugin({
59
+      cssProcessorOptions: config.build.productionSourceMap
60
+        ? { safe: true, map: { inline: false } }
61
+        : { safe: true }
62
+    }),
63
+    // generate dist index.html with correct asset hash for caching.
64
+    // you can customize output by editing /index.html
65
+    // see https://github.com/ampedandwired/html-webpack-plugin
66
+    new HtmlWebpackPlugin({
67
+      filename: config.build.index,
68
+      template: 'index.html',
69
+      inject: true,
70
+      favicon: resolve('favicon.ico'),
71
+      title: 'vue-element-admin',
72
+      path: config.build.assetsPublicPath + config.build.assetsSubDirectory,
73
+      minify: {
74
+        removeComments: true,
75
+        collapseWhitespace: true,
76
+        removeAttributeQuotes: true
77
+        // more options:
78
+        // https://github.com/kangax/html-minifier#options-quick-reference
79
+      },
80
+      // necessary to consistently work with multiple chunks via CommonsChunkPlugin
81
+      chunksSortMode: 'dependency'
82
+    }),
83
+    // keep module.id stable when vender modules does not change
84
+    new webpack.HashedModuleIdsPlugin(),
85
+    // enable scope hoisting
86
+    new webpack.optimize.ModuleConcatenationPlugin(),
87
+    // split vendor js into its own file
88
+    new webpack.optimize.CommonsChunkPlugin({
89
+      name: 'vendor',
90
+      minChunks (module) {
91
+        // any required modules inside node_modules are extracted to vendor
92
+        return (
93
+          module.resource &&
94
+          /\.js$/.test(module.resource) &&
95
+          module.resource.indexOf(
96
+            path.join(__dirname, '../node_modules')
97
+          ) === 0
98
+        )
99
+      }
100
+    }),
101
+    // extract webpack runtime and module manifest to its own file in order to
102
+    // prevent vendor hash from being updated whenever app bundle is updated
103
+    new webpack.optimize.CommonsChunkPlugin({
104
+      name: 'manifest',
105
+      minChunks: Infinity
106
+    }),
107
+    // This instance extracts shared chunks from code splitted chunks and bundles them
108
+    // in a separate chunk, similar to the vendor chunk
109
+    // see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk
110
+    new webpack.optimize.CommonsChunkPlugin({
111
+      name: 'app',
112
+      async: 'vendor-async',
113
+      children: true,
114
+      minChunks: 3
115
+    }),
116
+    // split echarts into its own file
117
+    new webpack.optimize.CommonsChunkPlugin({
118
+      async: 'echarts',
119
+      minChunks(module) {
120
+        var context = module.context;
121
+        return context && (context.indexOf('echarts') >= 0 || context.indexOf('zrender') >= 0);
122
+      }
123
+    }),
124
+    // split xlsx into its own file
125
+    new webpack.optimize.CommonsChunkPlugin({
126
+      async: 'xlsx',
127
+      minChunks(module) {
128
+        var context = module.context;
129
+        return context && (context.indexOf('xlsx') >= 0);
130
+      }
131
+    }),
132
+     // split codemirror into its own file
133
+     new webpack.optimize.CommonsChunkPlugin({
134
+      async: 'codemirror',
135
+      minChunks(module) {
136
+        var context = module.context;
137
+        return context && (context.indexOf('codemirror') >= 0);
138
+      }
139
+    }),
140
+
141
+    // copy custom static assets
142
+    new CopyWebpackPlugin([
143
+      {
144
+        from: path.resolve(__dirname, '../static'),
145
+        to: config.build.assetsSubDirectory,
146
+        ignore: ['.*']
147
+      }
148
+    ])
149
+  ]
150
+})
151
+
152
+if (config.build.productionGzip) {
153
+  const CompressionWebpackPlugin = require('compression-webpack-plugin')
154
+
155
+  webpackConfig.plugins.push(
156
+    new CompressionWebpackPlugin({
157
+      asset: '[path].gz[query]',
158
+      algorithm: 'gzip',
159
+      test: new RegExp(
160
+        '\\.(' +
161
+        config.build.productionGzipExtensions.join('|') +
162
+        ')$'
163
+      ),
164
+      threshold: 10240,
165
+      minRatio: 0.8
166
+    })
167
+  )
168
+}
169
+
170
+if (config.build.bundleAnalyzerReport) {
171
+  const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
172
+  webpackConfig.plugins.push(new BundleAnalyzerPlugin())
173
+}
174
+
175
+module.exports = webpackConfig

+ 6 - 0
config/dev.env.js View File

@@ -0,0 +1,6 @@
1
+module.exports = {
2
+  NODE_ENV: '"development"',
3
+  ENV_CONFIG: '"dev"',
4
+  BASE_API: '"http://api.test1.sgjyun.com"', // // http://localhost:8090
5
+}
6
+

+ 96 - 0
config/index.js View File

@@ -0,0 +1,96 @@
1
+'use strict'
2
+// Template version: 1.2.6
3
+// see http://vuejs-templates.github.io/webpack for documentation.
4
+
5
+const path = require('path')
6
+
7
+module.exports = {
8
+  dev: {
9
+
10
+    // Paths
11
+    assetsSubDirectory: 'static',
12
+    assetsPublicPath: '/',
13
+    proxyTable: {},
14
+
15
+    // Various Dev Server settings
16
+
17
+    // can be overwritten by process.env.HOST
18
+    // if you want dev by ip, please set host: '0.0.0.0'
19
+
20
+    // host: 'test1.sgjyun.com',
21
+    // host: 'jk.kuyicloud.com',
22
+    host: 'test1.sgjyun.com',
23
+    port: 8090, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
24
+    autoOpenBrowser: true,
25
+    errorOverlay: true,
26
+    notifyOnErrors: false,
27
+    poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
28
+
29
+    // Use Eslint Loader?
30
+    // If true, your code will be linted during bundling and
31
+    // linting errors and warnings will be shown in the console.
32
+    useEslint: false,
33
+
34
+    // If true, eslint errors and warnings will also be shown in the error overlay
35
+    // in the browser.
36
+    showEslintErrorsInOverlay: false,
37
+
38
+    /**
39
+     * Source Maps
40
+     */
41
+
42
+    // https://webpack.js.org/configuration/devtool/#development
43
+    devtool: '#cheap-source-map',
44
+
45
+    // If you have problems debugging vue-files in devtools,
46
+    // set this to false - it *may* help
47
+    // https://vue-loader.vuejs.org/en/options.html#cachebusting
48
+    cacheBusting: true,
49
+
50
+    // CSS Sourcemaps off by default because relative paths are "buggy"
51
+    // with this option, according to the CSS-Loader README
52
+    // (https://github.com/webpack/css-loader#sourcemaps)
53
+    // In our experience, they generally work as expected,
54
+    // just be aware of this issue when enabling this option.
55
+    cssSourceMap: false,
56
+  },
57
+
58
+  build: {
59
+    // Template for index.html
60
+    index: path.resolve(__dirname, '../dist/index.html'),
61
+
62
+    // Paths
63
+    assetsRoot: path.resolve(__dirname, '../dist'),
64
+    assetsSubDirectory: 'static',
65
+
66
+    /**
67
+     * You can set by youself according to actual condition
68
+     * You will need to set this if you plan to deploy your site under a sub path,
69
+     * for example GitHub pages. If you plan to deploy your site to https://foo.github.io/bar/,
70
+     * then assetsPublicPath should be set to "/bar/".
71
+     * In most cases please use '/' !!!
72
+     */
73
+    // assetsPublicPath: '/vue-element-admin/', // If you are deployed on the root path, please use '/'
74
+    assetsPublicPath: './',
75
+
76
+    /**
77
+     * Source Maps
78
+     */
79
+    productionSourceMap: false,
80
+    // https://webpack.js.org/configuration/devtool/#production
81
+    devtool: '#source-map',
82
+
83
+    // Gzip off by default as many popular static hosts such as
84
+    // Surge or Netlify already gzip all static assets for you.
85
+    // Before setting to `true`, make sure to:
86
+    // npm install --save-dev compression-webpack-plugin
87
+    productionGzip: false,
88
+    productionGzipExtensions: ['js', 'css'],
89
+
90
+    // Run the build command with an extra argument to
91
+    // View the bundle analyzer report after build finishes:
92
+    // `npm run build --report`
93
+    // Set to `true` or `false` to always turn it on or off
94
+    bundleAnalyzerReport: process.env.npm_config_report
95
+  }
96
+}

+ 5 - 0
config/prod.env.js View File

@@ -0,0 +1,5 @@
1
+module.exports = {
2
+  NODE_ENV: '"production"',
3
+  ENV_CONFIG: '"prod"',
4
+  BASE_API: '"http://api.scrm.kuyicloud.com"'
5
+}

+ 5 - 0
config/sit.env.js View File

@@ -0,0 +1,5 @@
1
+module.exports = {
2
+  NODE_ENV: '"production"',
3
+  ENV_CONFIG: '"sit"',
4
+  BASE_API: '"http://api.test1.sgjyun.com"'
5
+}

BIN
favicon.ico View File


+ 30 - 0
index.html View File

@@ -0,0 +1,30 @@
1
+
2
+<!DOCTYPE html>
3
+<html>
4
+  <head>
5
+    <meta charset="utf-8">
6
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
7
+    <meta name="renderer" content="webkit">
8
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
9
+    <title>血透管理-酷医云</title>
10
+  </head>
11
+  <body>
12
+    <script src=<%= htmlWebpackPlugin.options.path %>/tinymce4.7.5/tinymce.min.js></script>
13
+    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
14
+    <script src="<%= htmlWebpackPlugin.options.path %>/neditor/neditor.config.js"></script>
15
+    <script src="<%= htmlWebpackPlugin.options.path %>/neditor/neditor.all.min.js"></script>
16
+    <script src="<%= htmlWebpackPlugin.options.path %>/neditor/neditor.service.js"></script>
17
+    <script src="<%= htmlWebpackPlugin.options.path %>/neditor/i18n/zh-cn/zh-cn.js"></script>
18
+    <script src="<%= htmlWebpackPlugin.options.path %>/neditor/neditor.parse.min.js"></script>
19
+    <div id="app"></div>
20
+    <!-- built files will be auto injected -->
21
+  </body>
22
+</html>
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+>>>>>>> .theirs

File diff suppressed because it is too large
+ 14994 - 0
package-lock.json


+ 133 - 0
package.json View File

@@ -0,0 +1,133 @@
1
+{
2
+  "name": "vue-element-admin",
3
+  "version": "3.7.3",
4
+  "description": "A magical vue admin. Typical templates for enterprise applications. Newest development stack of vue. Lots of awesome features",
5
+  "author": "Pan <panfree23@gmail.com>",
6
+  "license": "MIT",
7
+  "scripts": {
8
+    "dev": "cross-env BABEL_ENV=development webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
9
+    "build:prod": "cross-env NODE_ENV=production env_config=prod node build/build.js",
10
+    "build:sit": "cross-env NODE_ENV=production env_config=sit node build/build.js && npm run fixfont && npm run fiximg",
11
+    "lint": "eslint --ext .js,.vue src",
12
+    "test": "npm run lint",
13
+    "precommit": "lint-staged",
14
+    "build": "cross-env NODE_ENV=production env_config=sit node build/build.js && npm run fixfont && npm run fiximg",
15
+    "fixfont": "xcopy %cd%\\dist\\static\\fonts %cd%\\dist\\static\\css\\static\\fonts /s /y /d /e /i",
16
+    "fiximg": "xcopy %cd%\\dist\\static\\img %cd%\\dist\\static\\css\\static\\img /s /y /d /e /i"
17
+  },
18
+  "lint-staged": {
19
+    "src/**/*.{js,vue}": [
20
+      "eslint --fix",
21
+      "git add"
22
+    ]
23
+  },
24
+  "keywords": [
25
+    "vue",
26
+    "element-ui",
27
+    "admin",
28
+    "management-system",
29
+    "admin-template"
30
+  ],
31
+  "repository": {
32
+    "type": "git",
33
+    "url": "git+https://github.com/PanJiaChen/vue-element-admin.git"
34
+  },
35
+  "bugs": {
36
+    "url": "https://github.com/PanJiaChen/vue-element-admin/issues"
37
+  },
38
+  "dependencies": {
39
+    "ajv": "^6.5.3",
40
+    "axios": "0.17.1",
41
+    "clipboard": "1.7.1",
42
+    "codemirror": "5.32.0",
43
+    "connect": "3.6.6",
44
+    "driver.js": "0.5.2",
45
+    "dropzone": "5.2.0",
46
+    "echarts": "3.8.5",
47
+    "element-ui": "^2.7.2",
48
+    "file-saver": "1.3.3",
49
+    "font-awesome": "4.7.0",
50
+    "js-cookie": "2.2.0",
51
+    "jsonlint": "1.6.3",
52
+    "jszip": "3.1.5",
53
+    "mockjs": "1.0.1-beta3",
54
+    "normalize.css": "7.0.0",
55
+    "nprogress": "0.2.0",
56
+    "print-js": "^1.0.50",
57
+    "qrcodejs2": "0.0.2",
58
+    "screenfull": "4.2.0",
59
+    "serve-static": "1.13.2",
60
+    "showdown": "1.8.5",
61
+    "simplemde": "1.11.2",
62
+    "sortablejs": "1.7.0",
63
+    "vue": "2.5.16",
64
+    "vue-count-to": "1.0.13",
65
+    "vue-i18n": "7.3.2",
66
+    "vue-multiselect": "2.0.8",
67
+    "vue-router": "3.0.1",
68
+    "vue-splitpane": "1.0.2",
69
+    "vuedraggable": "^2.16.0",
70
+    "vuex": "3.0.1",
71
+    "xlsx": "^0.11.16"
72
+  },
73
+  "devDependencies": {
74
+    "autoprefixer": "7.2.3",
75
+    "babel-core": "6.26.0",
76
+    "babel-eslint": "8.0.3",
77
+    "babel-helper-vue-jsx-merge-props": "2.0.3",
78
+    "babel-loader": "7.1.2",
79
+    "babel-plugin-dynamic-import-node": "^1.2.0",
80
+    "babel-plugin-syntax-jsx": "6.18.0",
81
+    "babel-plugin-transform-runtime": "6.23.0",
82
+    "babel-plugin-transform-vue-jsx": "3.5.0",
83
+    "babel-preset-env": "1.6.1",
84
+    "babel-preset-stage-2": "6.24.1",
85
+    "chalk": "2.3.0",
86
+    "copy-webpack-plugin": "4.3.0",
87
+    "cross-env": "5.1.1",
88
+    "css-loader": "0.28.7",
89
+    "eslint": "4.13.1",
90
+    "eslint-friendly-formatter": "3.0.0",
91
+    "eslint-loader": "1.9.0",
92
+    "eslint-plugin-html": "4.0.1",
93
+    "extract-text-webpack-plugin": "3.0.2",
94
+    "file-loader": "1.1.5",
95
+    "friendly-errors-webpack-plugin": "1.6.1",
96
+    "html-webpack-plugin": "2.30.1",
97
+    "lint-staged": "7.2.0",
98
+    "node-notifier": "5.1.2",
99
+    "node-sass": "^4.7.2",
100
+    "optimize-css-assets-webpack-plugin": "3.2.0",
101
+    "ora": "1.3.0",
102
+    "portfinder": "1.0.13",
103
+    "postcss-import": "11.0.0",
104
+    "postcss-loader": "2.0.9",
105
+    "postcss-url": "7.3.0",
106
+    "rimraf": "2.6.2",
107
+    "sass-loader": "^6.0.7",
108
+    "sass-resources-loader": "^1.3.4",
109
+    "script-loader": "0.7.2",
110
+    "semver": "5.4.1",
111
+    "shelljs": "0.7.8",
112
+    "svg-sprite-loader": "3.5.2",
113
+    "uglifyjs-webpack-plugin": "1.1.3",
114
+    "url-loader": "0.6.2",
115
+    "vue-loader": "13.7.2",
116
+    "vue-quill-editor": "^3.0.6",
117
+    "vue-style-loader": "3.0.3",
118
+    "vue-template-compiler": "2.5.16",
119
+    "webpack": "3.10.0",
120
+    "webpack-bundle-analyzer": "2.9.1",
121
+    "webpack-dev-server": "2.9.7",
122
+    "webpack-merge": "4.1.1"
123
+  },
124
+  "engines": {
125
+    "node": ">= 4.0.0",
126
+    "npm": ">= 3.0.0"
127
+  },
128
+  "browserslist": [
129
+    "> 1%",
130
+    "last 2 versions",
131
+    "not ie <= 8"
132
+  ]
133
+}

+ 11 - 0
src/App.vue View File

@@ -0,0 +1,11 @@
1
+<template>
2
+  <div id="app">
3
+    <router-view></router-view>
4
+  </div>
5
+</template>
6
+
7
+<script>
8
+  export default{
9
+    name: 'App'
10
+  }
11
+</script>

+ 38 - 0
src/api/login/login.js View File

@@ -0,0 +1,38 @@
1
+import request from '@/utils/request'
2
+
3
+export function verifyToken(token) {
4
+  return request({
5
+    url: '/api/token/verify',
6
+    method: 'post',
7
+    params: {
8
+      'token': token
9
+    }
10
+  })
11
+}
12
+
13
+export function modifyAdminInfo(params) {
14
+  return request({
15
+    url: '/api/admin/edit_info',
16
+    method: 'post',
17
+    params: params,
18
+  })
19
+}
20
+
21
+export function getModifyPwdCode() {
22
+  return request({
23
+    url: '/api/password/code',
24
+    method: 'post',
25
+  })
26
+}
27
+
28
+export function modifyPassword(new_pwd, code) {
29
+  var params = {
30
+    password: new_pwd,
31
+    code: code,
32
+  }
33
+  return request({
34
+    url: '/api/password/modify',
35
+    method: 'post',
36
+    params: params,
37
+  })
38
+}

+ 8 - 0
src/api/qiniu.js View File

@@ -0,0 +1,8 @@
1
+import request from '@/utils/request'
2
+
3
+export function getToken() {
4
+  return request({
5
+    url: '/api/qiniu/uptoken', // 假地址 自行替换
6
+    method: 'get'
7
+  })
8
+}

+ 81 - 0
src/api/role/admin.js View File

@@ -0,0 +1,81 @@
1
+import request from '@/utils/request'
2
+
3
+export function adminMainView() {
4
+  return request({
5
+    url: '/api/adminmain',
6
+    method: 'get'
7
+  })
8
+}
9
+
10
+export function getAdmins(page) {
11
+  const params = {
12
+    page: page
13
+  }
14
+  return request({
15
+    url: '/api/admins',
16
+    method: 'get',
17
+    params: params
18
+  })
19
+}
20
+
21
+export function getAddAdminInitData() {
22
+  return request({
23
+    url: '/api/admin/addinit',
24
+    method: 'get'
25
+  })
26
+}
27
+
28
+export function addAdmin(mobile, name, type, title, role, intro) {
29
+  const params = {
30
+    mobile: mobile,
31
+    name: name,
32
+    type: type,
33
+    title: title,
34
+    role: role,
35
+    intro: intro
36
+  }
37
+  return request({
38
+    url: '/api/admin/add',
39
+    method: 'post',
40
+    params: params
41
+  })
42
+}
43
+
44
+export function getModifyAdminInitData(uid) {
45
+  const params = {
46
+    uid: uid
47
+  }
48
+  return request({
49
+    url: '/api/admin/editinit',
50
+    method: 'get',
51
+    params: params
52
+  })
53
+}
54
+
55
+export function modifyAdmin(uid, name, type, title, role, intro) {
56
+  const params = {
57
+    uid: uid,
58
+    name: name,
59
+    type: type,
60
+    title: title,
61
+    role: role,
62
+    intro: intro
63
+  }
64
+  return request({
65
+    url: '/api/admin/edit',
66
+    method: 'post',
67
+    params: params
68
+  })
69
+}
70
+
71
+export function setAdminStatus(uid, enable) {
72
+  const params = {
73
+    uid: uid,
74
+    enable: enable
75
+  }
76
+  return request({
77
+    url: '/api/admin/setstatus',
78
+    method: 'post',
79
+    params: params
80
+  })
81
+}

+ 72 - 0
src/api/role/role.js View File

@@ -0,0 +1,72 @@
1
+import request from '@/utils/request'
2
+
3
+export function getRoles(page) {
4
+    const params = {
5
+        page: page,
6
+    }
7
+    return request({
8
+        url: '/api/roles',
9
+        method: 'get',
10
+        params: params,
11
+    })
12
+}
13
+
14
+export function addRole(name, intro) {
15
+    const params = {
16
+        name: name,
17
+        intro: intro
18
+    }
19
+    return request({
20
+        url: '/api/role/create',
21
+        method: 'post',
22
+        params: params,
23
+    })
24
+}
25
+
26
+export function modifyRole(role_id, name, intro) {
27
+    const params = {
28
+        role_id: role_id,
29
+        name: name,
30
+        intro: intro
31
+    }
32
+    return request({
33
+        url: '/api/role/modify',
34
+        method: 'post',
35
+        params: params,
36
+    })
37
+}
38
+
39
+export function setRoleStatus(role_id, enable) {
40
+    const params = {
41
+        role_id: role_id,
42
+        enable: enable,
43
+    }
44
+    return request({
45
+        url: '/api/role/setstatus',
46
+        method: 'post',
47
+        params: params,
48
+    })
49
+}
50
+
51
+export function getEditPurviewInitData(role_id) {
52
+    const params = {
53
+        role_id: role_id,
54
+    }
55
+    return request({
56
+        url: '/role/purview/editinit',
57
+        method: 'get',
58
+        params: params,
59
+    })
60
+}
61
+
62
+export function editPurview(role_id, purview_ids) {
63
+    const params = {
64
+        role_id: role_id,
65
+        purview_ids: purview_ids,
66
+    }
67
+    return request({
68
+        url: '/role/purview/edit',
69
+        method: 'post',
70
+        params: params,
71
+    })
72
+}

+ 84 - 0
src/api/service.js View File

@@ -0,0 +1,84 @@
1
+import request from '@/utils/request'
2
+
3
+
4
+export function getServiceList(params){
5
+  return request({
6
+    url:'/api/my/service',
7
+    method:'get',
8
+    params:params
9
+  })
10
+}
11
+
12
+export function getProduct(params){
13
+  return request({
14
+    url:'/api/product',
15
+    method:'get',
16
+    params:params
17
+  })
18
+}
19
+
20
+
21
+export function postOrderInfo(params){
22
+  return request({
23
+    url:'/api/order',
24
+    method:'post',
25
+    params:params
26
+  })
27
+}
28
+
29
+
30
+export function getPayUrl(params){
31
+  return request({
32
+    url:'/api/pay',
33
+    method:'get',
34
+    params:params
35
+  })
36
+}
37
+
38
+export function getOrderInfo(params){
39
+  return request({
40
+    url:'/api/order/get',
41
+    method:'get',
42
+    params:params
43
+  })
44
+}
45
+
46
+export function postOrderPayType(params){
47
+  return request({
48
+    url:'/api/pay/transfer',
49
+    method:'post',
50
+    params:params
51
+  })
52
+}
53
+
54
+export function cancleOrder(params){
55
+  return request({
56
+    url:'/api/order/cancel',
57
+    method:'post',
58
+    params:params
59
+  })
60
+}
61
+
62
+export function getOrderList(params){
63
+  return request({
64
+    url:'/api/order/list',
65
+    method:'get',
66
+    params:params
67
+  })
68
+}
69
+
70
+
71
+export function getHetong(order_id){
72
+  return request({
73
+    url:'/api/order/hetong?order_id='+order_id,
74
+    method:'get',
75
+  })
76
+}
77
+
78
+export function createHetong(order_id, het){
79
+  return request({
80
+    url:'/api/order/hetong?order_id='+order_id,
81
+    method:'Post',
82
+    data:het,
83
+  })
84
+}

BIN
src/assets/401_images/401.gif View File


BIN
src/assets/404_images/404.png View File


BIN
src/assets/404_images/404_cloud.png View File


BIN
src/assets/custom-theme/fonts/element-icons.ttf View File


BIN
src/assets/custom-theme/fonts/element-icons.woff View File


File diff suppressed because it is too large
+ 1 - 0
src/assets/custom-theme/index.css


+ 199 - 0
src/assets/echarts-macarons.js View File

@@ -0,0 +1,199 @@
1
+/* eslint-disable */
2
+(function (root, factory) {
3
+    if (typeof define === 'function' && define.amd) {
4
+        // AMD. Register as an anonymous module.
5
+        define(['exports', 'echarts'], factory);
6
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
7
+        // CommonJS
8
+        factory(exports, require('echarts'));
9
+    } else {
10
+        // Browser globals
11
+        factory({}, root.echarts);
12
+    }
13
+}(this, function (exports, echarts) {
14
+    var log = function (msg) {
15
+        if (typeof console !== 'undefined') {
16
+            console && console.error && console.error(msg);
17
+        }
18
+    };
19
+    if (!echarts) {
20
+        log('ECharts is not Loaded');
21
+        return;
22
+    }
23
+
24
+    var colorPalette = [
25
+        '#2ec7c9','#b6a2de','#5ab1ef','#ffb980','#d87a80',
26
+        '#8d98b3','#e5cf0d','#97b552','#95706d','#dc69aa',
27
+        '#07a2a4','#9a7fd1','#588dd5','#f5994e','#c05050',
28
+        '#59678c','#c9ab00','#7eb00a','#6f5553','#c14089'
29
+    ];
30
+
31
+
32
+    var theme = {
33
+        color: colorPalette,
34
+
35
+        title: {
36
+            textStyle: {
37
+                fontWeight: 'normal',
38
+                color: '#008acd'
39
+            }
40
+        },
41
+
42
+        visualMap: {
43
+            itemWidth: 15,
44
+            color: ['#5ab1ef','#e0ffff']
45
+        },
46
+
47
+        toolbox: {
48
+            iconStyle: {
49
+                normal: {
50
+                    borderColor: colorPalette[0]
51
+                }
52
+            }
53
+        },
54
+
55
+        tooltip: {
56
+            backgroundColor: 'rgba(50,50,50,0.5)',
57
+            axisPointer : {
58
+                type : 'line',
59
+                lineStyle : {
60
+                    color: '#008acd'
61
+                },
62
+                crossStyle: {
63
+                    color: '#008acd'
64
+                },
65
+                shadowStyle : {
66
+                    color: 'rgba(200,200,200,0.2)'
67
+                }
68
+            }
69
+        },
70
+
71
+        dataZoom: {
72
+            dataBackgroundColor: '#efefff',
73
+            fillerColor: 'rgba(182,162,222,0.2)',
74
+            handleColor: '#008acd'
75
+        },
76
+
77
+        grid: {
78
+            borderColor: '#eee'
79
+        },
80
+
81
+        categoryAxis: {
82
+            axisLine: {
83
+                lineStyle: {
84
+                    color: '#008acd'
85
+                }
86
+            },
87
+            splitLine: {
88
+                lineStyle: {
89
+                    color: ['#eee']
90
+                }
91
+            }
92
+        },
93
+
94
+        valueAxis: {
95
+            axisLine: {
96
+                lineStyle: {
97
+                    color: '#008acd'
98
+                }
99
+            },
100
+            splitArea : {
101
+                show : true,
102
+                areaStyle : {
103
+                    color: ['rgba(250,250,250,0.1)','rgba(200,200,200,0.1)']
104
+                }
105
+            },
106
+            splitLine: {
107
+                lineStyle: {
108
+                    color: ['#eee']
109
+                }
110
+            }
111
+        },
112
+
113
+        timeline : {
114
+            lineStyle : {
115
+                color : '#008acd'
116
+            },
117
+            controlStyle : {
118
+                normal : { color : '#008acd'},
119
+                emphasis : { color : '#008acd'}
120
+            },
121
+            symbol : 'emptyCircle',
122
+            symbolSize : 3
123
+        },
124
+
125
+        line: {
126
+            smooth : true,
127
+            symbol: 'emptyCircle',
128
+            symbolSize: 3
129
+        },
130
+
131
+        candlestick: {
132
+            itemStyle: {
133
+                normal: {
134
+                    color: '#d87a80',
135
+                    color0: '#2ec7c9',
136
+                    lineStyle: {
137
+                        color: '#d87a80',
138
+                        color0: '#2ec7c9'
139
+                    }
140
+                }
141
+            }
142
+        },
143
+
144
+        scatter: {
145
+            symbol: 'circle',
146
+            symbolSize: 4
147
+        },
148
+
149
+        map: {
150
+            label: {
151
+                normal: {
152
+                    textStyle: {
153
+                        color: '#d87a80'
154
+                    }
155
+                }
156
+            },
157
+            itemStyle: {
158
+                normal: {
159
+                    borderColor: '#eee',
160
+                    areaColor: '#ddd'
161
+                },
162
+                emphasis: {
163
+                    areaColor: '#fe994e'
164
+                }
165
+            }
166
+        },
167
+
168
+        graph: {
169
+            color: colorPalette
170
+        },
171
+
172
+        gauge : {
173
+            axisLine: {
174
+                lineStyle: {
175
+                    color: [[0.2, '#2ec7c9'],[0.8, '#5ab1ef'],[1, '#d87a80']],
176
+                    width: 10
177
+                }
178
+            },
179
+            axisTick: {
180
+                splitNumber: 10,
181
+                length :15,
182
+                lineStyle: {
183
+                    color: 'auto'
184
+                }
185
+            },
186
+            splitLine: {
187
+                length :22,
188
+                lineStyle: {
189
+                    color: 'auto'
190
+                }
191
+            },
192
+            pointer : {
193
+                width : 5
194
+            }
195
+        }
196
+    };
197
+
198
+    echarts.registerTheme('macarons', theme);
199
+}));

+ 3 - 0
src/assets/eventBus.js View File

@@ -0,0 +1,3 @@
1
+import Vue from 'vue'
2
+
3
+export default new Vue()

BIN
src/assets/home/analyze.png View File


BIN
src/assets/home/equipment.png View File


BIN
src/assets/home/prescription.png View File


BIN
src/assets/home/record.png View File


BIN
src/assets/home/scheduling.png View File


BIN
src/assets/home/sick.png View File


BIN
src/assets/home/user.png View File


BIN
src/assets/home/userData.png View File


+ 370 - 0
src/assets/icon/demo.css View File

@@ -0,0 +1,370 @@
1
+*{margin: 0;padding: 0;list-style: none;}
2
+/*
3
+KISSY CSS Reset
4
+理念:1. reset 的目的不是清除浏览器的默认样式,这仅是部分工作。清除和重置是紧密不可分的。
5
+2. reset 的目的不是让默认样式在所有浏览器下一致,而是减少默认样式有可能带来的问题。
6
+3. reset 期望提供一套普适通用的基础样式。但没有银弹,推荐根据具体需求,裁剪和修改后再使用。
7
+特色:1. 适应中文;2. 基于最新主流浏览器。
8
+维护:玉伯<lifesinger@gmail.com>, 正淳<ragecarrier@gmail.com>
9
+ */
10
+
11
+/** 清除内外边距 **/
12
+body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, /* structural elements 结构元素 */
13
+dl, dt, dd, ul, ol, li, /* list elements 列表元素 */
14
+pre, /* text formatting elements 文本格式元素 */
15
+form, fieldset, legend, button, input, textarea, /* form elements 表单元素 */
16
+th, td /* table elements 表格元素 */ {
17
+  margin: 0;
18
+  padding: 0;
19
+}
20
+
21
+/** 设置默认字体 **/
22
+body,
23
+button, input, select, textarea /* for ie */ {
24
+  font: 12px/1.5 tahoma, arial, \5b8b\4f53, sans-serif;
25
+}
26
+h1, h2, h3, h4, h5, h6 { font-size: 100%; }
27
+address, cite, dfn, em, var { font-style: normal; } /* 将斜体扶正 */
28
+code, kbd, pre, samp { font-family: courier new, courier, monospace; } /* 统一等宽字体 */
29
+small { font-size: 12px; } /* 小于 12px 的中文很难阅读,让 small 正常化 */
30
+
31
+/** 重置列表元素 **/
32
+ul, ol { list-style: none; }
33
+
34
+/** 重置文本格式元素 **/
35
+a { text-decoration: none; }
36
+a:hover { text-decoration: underline; }
37
+
38
+
39
+/** 重置表单元素 **/
40
+legend { color: #000; } /* for ie6 */
41
+fieldset, img { border: 0; } /* img 搭车:让链接里的 img 无边框 */
42
+button, input, select, textarea { font-size: 100%; } /* 使得表单元素在 ie 下能继承字体大小 */
43
+/* 注:optgroup 无法扶正 */
44
+
45
+/** 重置表格元素 **/
46
+table { border-collapse: collapse; border-spacing: 0; }
47
+
48
+/* 清除浮动 */
49
+.ks-clear:after, .clear:after {
50
+  content: '\20';
51
+  display: block;
52
+  height: 0;
53
+  clear: both;
54
+}
55
+.ks-clear, .clear {
56
+  *zoom: 1;
57
+}
58
+
59
+.main {
60
+  padding: 30px 100px;
61
+width: 960px;
62
+margin: 0 auto;
63
+}
64
+.main h1{font-size:36px; color:#333; text-align:left;margin-bottom:30px; border-bottom: 1px solid #eee;}
65
+
66
+.helps{margin-top:40px;}
67
+.helps pre{
68
+  padding:20px;
69
+  margin:10px 0;
70
+  border:solid 1px #e7e1cd;
71
+  background-color: #fffdef;
72
+  overflow: auto;
73
+}
74
+
75
+.icon_lists{
76
+  width: 100% !important;
77
+
78
+}
79
+
80
+.icon_lists li{
81
+  float:left;
82
+  width: 100px;
83
+  height:180px;
84
+  text-align: center;
85
+  list-style: none !important;
86
+}
87
+.icon_lists .icon{
88
+  font-size: 42px;
89
+  line-height: 100px;
90
+  margin: 10px 0;
91
+  color:#333;
92
+  -webkit-transition: font-size 0.25s ease-out 0s;
93
+  -moz-transition: font-size 0.25s ease-out 0s;
94
+  transition: font-size 0.25s ease-out 0s;
95
+
96
+}
97
+.icon_lists .icon:hover{
98
+  font-size: 100px;
99
+}
100
+
101
+
102
+
103
+.markdown {
104
+  color: #666;
105
+  font-size: 14px;
106
+  line-height: 1.8;
107
+}
108
+
109
+.highlight {
110
+  line-height: 1.5;
111
+}
112
+
113
+.markdown img {
114
+  vertical-align: middle;
115
+  max-width: 100%;
116
+}
117
+
118
+.markdown h1 {
119
+  color: #404040;
120
+  font-weight: 500;
121
+  line-height: 40px;
122
+  margin-bottom: 24px;
123
+}
124
+
125
+.markdown h2,
126
+.markdown h3,
127
+.markdown h4,
128
+.markdown h5,
129
+.markdown h6 {
130
+  color: #404040;
131
+  margin: 1.6em 0 0.6em 0;
132
+  font-weight: 500;
133
+  clear: both;
134
+}
135
+
136
+.markdown h1 {
137
+  font-size: 28px;
138
+}
139
+
140
+.markdown h2 {
141
+  font-size: 22px;
142
+}
143
+
144
+.markdown h3 {
145
+  font-size: 16px;
146
+}
147
+
148
+.markdown h4 {
149
+  font-size: 14px;
150
+}
151
+
152
+.markdown h5 {
153
+  font-size: 12px;
154
+}
155
+
156
+.markdown h6 {
157
+  font-size: 12px;
158
+}
159
+
160
+.markdown hr {
161
+  height: 1px;
162
+  border: 0;
163
+  background: #e9e9e9;
164
+  margin: 16px 0;
165
+  clear: both;
166
+}
167
+
168
+.markdown p,
169
+.markdown pre {
170
+  margin: 1em 0;
171
+}
172
+
173
+.markdown > p,
174
+.markdown > blockquote,
175
+.markdown > .highlight,
176
+.markdown > ol,
177
+.markdown > ul {
178
+  width: 80%;
179
+}
180
+
181
+.markdown ul > li {
182
+  list-style: circle;
183
+}
184
+
185
+.markdown > ul li,
186
+.markdown blockquote ul > li {
187
+  margin-left: 20px;
188
+  padding-left: 4px;
189
+}
190
+
191
+.markdown > ul li p,
192
+.markdown > ol li p {
193
+  margin: 0.6em 0;
194
+}
195
+
196
+.markdown ol > li {
197
+  list-style: decimal;
198
+}
199
+
200
+.markdown > ol li,
201
+.markdown blockquote ol > li {
202
+  margin-left: 20px;
203
+  padding-left: 4px;
204
+}
205
+
206
+.markdown code {
207
+  margin: 0 3px;
208
+  padding: 0 5px;
209
+  background: #eee;
210
+  border-radius: 3px;
211
+}
212
+
213
+.markdown pre {
214
+  border-radius: 6px;
215
+  background: #f7f7f7;
216
+  padding: 20px;
217
+}
218
+
219
+.markdown pre code {
220
+  border: none;
221
+  background: #f7f7f7;
222
+  margin: 0;
223
+}
224
+
225
+.markdown strong,
226
+.markdown b {
227
+  font-weight: 600;
228
+}
229
+
230
+.markdown > table {
231
+  border-collapse: collapse;
232
+  border-spacing: 0px;
233
+  empty-cells: show;
234
+  border: 1px solid #e9e9e9;
235
+  width: 95%;
236
+  margin-bottom: 24px;
237
+}
238
+
239
+.markdown > table th {
240
+  white-space: nowrap;
241
+  color: #333;
242
+  font-weight: 600;
243
+
244
+}
245
+
246
+.markdown > table th,
247
+.markdown > table td {
248
+  border: 1px solid #e9e9e9;
249
+  padding: 8px 16px;
250
+  text-align: left;
251
+}
252
+
253
+.markdown > table th {
254
+  background: #F7F7F7;
255
+}
256
+
257
+.markdown blockquote {
258
+  font-size: 90%;
259
+  color: #999;
260
+  border-left: 4px solid #e9e9e9;
261
+  padding-left: 0.8em;
262
+  margin: 1em 0;
263
+  font-style: italic;
264
+}
265
+
266
+.markdown blockquote p {
267
+  margin: 0;
268
+}
269
+
270
+.markdown .anchor {
271
+  opacity: 0;
272
+  transition: opacity 0.3s ease;
273
+  margin-left: 8px;
274
+}
275
+
276
+.markdown .waiting {
277
+  color: #ccc;
278
+}
279
+
280
+.markdown h1:hover .anchor,
281
+.markdown h2:hover .anchor,
282
+.markdown h3:hover .anchor,
283
+.markdown h4:hover .anchor,
284
+.markdown h5:hover .anchor,
285
+.markdown h6:hover .anchor {
286
+  opacity: 1;
287
+  display: inline-block;
288
+}
289
+
290
+.markdown > br,
291
+.markdown > p > br {
292
+  clear: both;
293
+}
294
+
295
+
296
+.hljs {
297
+  display: block;
298
+  background: white;
299
+  padding: 0.5em;
300
+  color: #333333;
301
+  overflow-x: auto;
302
+}
303
+
304
+.hljs-comment,
305
+.hljs-meta {
306
+  color: #969896;
307
+}
308
+
309
+.hljs-string,
310
+.hljs-variable,
311
+.hljs-template-variable,
312
+.hljs-strong,
313
+.hljs-emphasis,
314
+.hljs-quote {
315
+  color: #df5000;
316
+}
317
+
318
+.hljs-keyword,
319
+.hljs-selector-tag,
320
+.hljs-type {
321
+  color: #a71d5d;
322
+}
323
+
324
+.hljs-literal,
325
+.hljs-symbol,
326
+.hljs-bullet,
327
+.hljs-attribute {
328
+  color: #0086b3;
329
+}
330
+
331
+.hljs-section,
332
+.hljs-name {
333
+  color: #63a35c;
334
+}
335
+
336
+.hljs-tag {
337
+  color: #333333;
338
+}
339
+
340
+.hljs-title,
341
+.hljs-attr,
342
+.hljs-selector-id,
343
+.hljs-selector-class,
344
+.hljs-selector-attr,
345
+.hljs-selector-pseudo {
346
+  color: #795da3;
347
+}
348
+
349
+.hljs-addition {
350
+  color: #55a532;
351
+  background-color: #eaffea;
352
+}
353
+
354
+.hljs-deletion {
355
+  color: #bd2c00;
356
+  background-color: #ffecec;
357
+}
358
+
359
+.hljs-link {
360
+  text-decoration: underline;
361
+}
362
+
363
+pre{
364
+  background: #fff;
365
+}
366
+
367
+
368
+
369
+
370
+

+ 52 - 0
src/assets/icon/demo_fontclass.html View File

@@ -0,0 +1,52 @@
1
+
2
+<!DOCTYPE html>
3
+<html>
4
+<head>
5
+    <meta charset="utf-8"/>
6
+    <title>IconFont</title>
7
+    <link rel="stylesheet" href="demo.css">
8
+    <link rel="stylesheet" href="iconfont.css">
9
+</head>
10
+<body>
11
+    <div class="main markdown">
12
+        <h1>IconFont 图标</h1>
13
+        <ul class="icon_lists clear">
14
+            
15
+                <li>
16
+                <i class="icon iconfont icon-activity"></i>
17
+                    <div class="name">activity</div>
18
+                    <div class="fontclass">.icon-activity</div>
19
+                </li>
20
+            
21
+                <li>
22
+                <i class="icon iconfont icon-editor"></i>
23
+                    <div class="name">editor</div>
24
+                    <div class="fontclass">.icon-editor</div>
25
+                </li>
26
+            
27
+        </ul>
28
+
29
+        <h2 id="font-class-">font-class引用</h2>
30
+        <hr>
31
+
32
+        <p>font-class是unicode使用方式的一种变种,主要是解决unicode书写不直观,语意不明确的问题。</p>
33
+        <p>与unicode使用方式相比,具有如下特点:</p>
34
+        <ul>
35
+        <li>兼容性良好,支持ie8+,及所有现代浏览器。</li>
36
+        <li>相比于unicode语意明确,书写更直观。可以很容易分辨这个icon是什么。</li>
37
+        <li>因为使用class来定义图标,所以当要替换图标时,只需要修改class里面的unicode引用。</li>
38
+        <li>不过因为本质上还是使用的字体,所以多色图标还是不支持的。</li>
39
+        </ul>
40
+        <p>使用步骤如下:</p>
41
+        <h3 id="-fontclass-">第一步:引入项目下面生成的fontclass代码:</h3>
42
+
43
+
44
+        <pre><code class="lang-js hljs javascript"><span class="hljs-comment">&lt;link rel="stylesheet" type="text/css" href="./iconfont.css"&gt;</span></code></pre>
45
+        <h3 id="-">第二步:挑选相应图标并获取类名,应用于页面:</h3>
46
+        <pre><code class="lang-css hljs">&lt;<span class="hljs-selector-tag">i</span> <span class="hljs-selector-tag">class</span>="<span class="hljs-selector-tag">iconfont</span> <span class="hljs-selector-tag">icon-xxx</span>"&gt;&lt;/<span class="hljs-selector-tag">i</span>&gt;</code></pre>
47
+        <blockquote>
48
+        <p>"iconfont"是你项目下的font-family。可以通过编辑项目查看,默认是"iconfont"。</p>
49
+        </blockquote>
50
+    </div>
51
+</body>
52
+</html>

+ 79 - 0
src/assets/icon/demo_symbol.html View File

@@ -0,0 +1,79 @@
1
+
2
+<!DOCTYPE html>
3
+<html>
4
+<head>
5
+    <meta charset="utf-8"/>
6
+    <title>IconFont</title>
7
+    <link rel="stylesheet" href="demo.css">
8
+    <script src="iconfont.js"></script>
9
+
10
+    <style type="text/css">
11
+        .icon {
12
+          /* 通过设置 font-size 来改变图标大小 */
13
+          width: 1em; height: 1em;
14
+          /* 图标和文字相邻时,垂直对齐 */
15
+          vertical-align: -0.15em;
16
+          /* 通过设置 color 来改变 SVG 的颜色/fill */
17
+          fill: currentColor;
18
+          /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
19
+             normalize.css 中也包含这行 */
20
+          overflow: hidden;
21
+        }
22
+
23
+    </style>
24
+</head>
25
+<body>
26
+    <div class="main markdown">
27
+        <h1>IconFont 图标</h1>
28
+        <ul class="icon_lists clear">
29
+            
30
+                <li>
31
+                    <svg class="icon" aria-hidden="true">
32
+                        <use xlink:href="#icon-activity"></use>
33
+                    </svg>
34
+                    <div class="name">activity</div>
35
+                    <div class="fontclass">#icon-activity</div>
36
+                </li>
37
+            
38
+                <li>
39
+                    <svg class="icon" aria-hidden="true">
40
+                        <use xlink:href="#icon-editor"></use>
41
+                    </svg>
42
+                    <div class="name">editor</div>
43
+                    <div class="fontclass">#icon-editor</div>
44
+                </li>
45
+            
46
+        </ul>
47
+
48
+
49
+        <h2 id="symbol-">symbol引用</h2>
50
+        <hr>
51
+
52
+        <p>这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇<a href="">文章</a>
53
+        这种用法其实是做了一个svg的集合,与另外两种相比具有如下特点:</p>
54
+        <ul>
55
+          <li>支持多色图标了,不再受单色限制。</li>
56
+          <li>通过一些技巧,支持像字体那样,通过<code>font-size</code>,<code>color</code>来调整样式。</li>
57
+          <li>兼容性较差,支持 ie9+,及现代浏览器。</li>
58
+          <li>浏览器渲染svg的性能一般,还不如png。</li>
59
+        </ul>
60
+        <p>使用步骤如下:</p>
61
+        <h3 id="-symbol-">第一步:引入项目下面生成的symbol代码:</h3>
62
+        <pre><code class="lang-js hljs javascript"><span class="hljs-comment">&lt;script src="./iconfont.js"&gt;&lt;/script&gt;</span></code></pre>
63
+        <h3 id="-css-">第二步:加入通用css代码(引入一次就行):</h3>
64
+        <pre><code class="lang-js hljs javascript">&lt;style type=<span class="hljs-string">"text/css"</span>&gt;
65
+.icon {
66
+   width: <span class="hljs-number">1</span>em; height: <span class="hljs-number">1</span>em;
67
+   vertical-align: <span class="hljs-number">-0.15</span>em;
68
+   fill: currentColor;
69
+   overflow: hidden;
70
+}
71
+&lt;<span class="hljs-regexp">/style&gt;</span></code></pre>
72
+        <h3 id="-">第三步:挑选相应图标并获取类名,应用于页面:</h3>
73
+        <pre><code class="lang-js hljs javascript">&lt;svg <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"icon"</span> aria-hidden=<span class="hljs-string">"true"</span>&gt;<span class="xml"><span class="hljs-tag">
74
+  &lt;<span class="hljs-name">use</span> <span class="hljs-attr">xlink:href</span>=<span class="hljs-string">"#icon-xxx"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">use</span>&gt;</span>
75
+</span>&lt;<span class="hljs-regexp">/svg&gt;
76
+        </span></code></pre>
77
+    </div>
78
+</body>
79
+</html>

+ 90 - 0
src/assets/icon/demo_unicode.html View File

@@ -0,0 +1,90 @@
1
+
2
+<!DOCTYPE html>
3
+<html>
4
+<head>
5
+    <meta charset="utf-8"/>
6
+    <title>IconFont</title>
7
+    <link rel="stylesheet" href="demo.css">
8
+
9
+    <style type="text/css">
10
+
11
+        @font-face {font-family: "iconfont";
12
+          src: url('iconfont.eot'); /* IE9*/
13
+          src: url('iconfont.eot#iefix') format('embedded-opentype'), /* IE6-IE8 */
14
+          url('iconfont.woff') format('woff'), /* chrome, firefox */
15
+          url('iconfont.ttf') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
16
+          url('iconfont.svg#iconfont') format('svg'); /* iOS 4.1- */
17
+        }
18
+
19
+        .iconfont {
20
+          font-family:"iconfont" !important;
21
+          font-size:16px;
22
+          font-style:normal;
23
+          -webkit-font-smoothing: antialiased;
24
+          -webkit-text-stroke-width: 0.2px;
25
+          -moz-osx-font-smoothing: grayscale;
26
+        }
27
+
28
+    </style>
29
+</head>
30
+<body>
31
+    <div class="main markdown">
32
+        <h1>IconFont 图标</h1>
33
+        <ul class="icon_lists clear">
34
+            
35
+                <li>
36
+                <i class="icon iconfont">&#xe6de;</i>
37
+                    <div class="name">activity</div>
38
+                    <div class="code">&amp;#xe6de;</div>
39
+                </li>
40
+            
41
+                <li>
42
+                <i class="icon iconfont">&#xe6f5;</i>
43
+                    <div class="name">editor</div>
44
+                    <div class="code">&amp;#xe6f5;</div>
45
+                </li>
46
+            
47
+        </ul>
48
+        <h2 id="unicode-">unicode引用</h2>
49
+        <hr>
50
+
51
+        <p>unicode是字体在网页端最原始的应用方式,特点是:</p>
52
+        <ul>
53
+        <li>兼容性最好,支持ie6+,及所有现代浏览器。</li>
54
+        <li>支持按字体的方式去动态调整图标大小,颜色等等。</li>
55
+        <li>但是因为是字体,所以不支持多色。只能使用平台里单色的图标,就算项目里有多色图标也会自动去色。</li>
56
+        </ul>
57
+        <blockquote>
58
+        <p>注意:新版iconfont支持多色图标,这些多色图标在unicode模式下将不能使用,如果有需求建议使用symbol的引用方式</p>
59
+        </blockquote>
60
+        <p>unicode使用步骤如下:</p>
61
+        <h3 id="-font-face">第一步:拷贝项目下面生成的font-face</h3>
62
+        <pre><code class="lang-js hljs javascript">@font-face {
63
+  font-family: <span class="hljs-string">'iconfont'</span>;
64
+  src: url(<span class="hljs-string">'iconfont.eot'</span>);
65
+  src: url(<span class="hljs-string">'iconfont.eot?#iefix'</span>) format(<span class="hljs-string">'embedded-opentype'</span>),
66
+  url(<span class="hljs-string">'iconfont.woff'</span>) format(<span class="hljs-string">'woff'</span>),
67
+  url(<span class="hljs-string">'iconfont.ttf'</span>) format(<span class="hljs-string">'truetype'</span>),
68
+  url(<span class="hljs-string">'iconfont.svg#iconfont'</span>) format(<span class="hljs-string">'svg'</span>);
69
+}
70
+</code></pre>
71
+        <h3 id="-iconfont-">第二步:定义使用iconfont的样式</h3>
72
+        <pre><code class="lang-js hljs javascript">.iconfont{
73
+  font-family:<span class="hljs-string">"iconfont"</span> !important;
74
+  font-size:<span class="hljs-number">16</span>px;font-style:normal;
75
+  -webkit-font-smoothing: antialiased;
76
+  -webkit-text-stroke-width: <span class="hljs-number">0.2</span>px;
77
+  -moz-osx-font-smoothing: grayscale;
78
+}
79
+</code></pre>
80
+        <h3 id="-">第三步:挑选相应图标并获取字体编码,应用于页面</h3>
81
+        <pre><code class="lang-js hljs javascript">&lt;i <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"iconfont"</span>&gt;&amp;#x33;<span class="xml"><span class="hljs-tag">&lt;/<span class="hljs-name">i</span>&gt;</span></span></code></pre>
82
+
83
+        <blockquote>
84
+        <p>"iconfont"是你项目下的font-family。可以通过编辑项目查看,默认是"iconfont"。</p>
85
+        </blockquote>
86
+    </div>
87
+
88
+
89
+</body>
90
+</html>

+ 21 - 0
src/assets/icon/iconfont.css View File

@@ -0,0 +1,21 @@
1
+
2
+@font-face {font-family: "iconfont";
3
+  src: url('iconfont.eot?t=1540390919997'); /* IE9*/
4
+  src: url('iconfont.eot?t=1540390919997#iefix') format('embedded-opentype'), /* IE6-IE8 */
5
+  url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAATgAAsAAAAAB5wAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFY9VEjnY21hcAAAAYAAAABWAAABhmnZ0opnbHlmAAAB2AAAARMAAAGARACD3GhlYWQAAALsAAAALwAAADYTDIYbaGhlYQAAAxwAAAAcAAAAJAfeA4RobXR4AAADOAAAAAwAAAAMDAAAAGxvY2EAAANEAAAACAAAAAgAfADAbWF4cAAAA0wAAAAfAAAAIAESAGRuYW1lAAADbAAAAUUAAAJtPlT+fXBvc3QAAAS0AAAAKgAAADvAZlSmeJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2BkYWCcwMDKwMHUyXSGgYGhH0IzvmYwYuRgYGBiYGVmwAoC0lxTGBye3Xv2lbnhfwNDDHMDQwNQmBEkBwABmQ22eJztkLERgDAMA99OSMExCAUDUTE6ZTZIHRQHtkB3b51lVwIWIIlDZLALY+hUapEn1shz/BS54fWurXf4XDLdSrhrFH5tMfd389HWZDRb2wR/AEzpFJIAAHicVU9NToNAFH7fTIRADCmU0oQWZWiHuNFUoO1KZePKA7gywaVXcGNX3sKkR8Eb9AJNunXnBaAORRt8mfd972/mfUMnRPtvXvCQdDqnO3qgRyKppSKa20Jm1+nA9ZLFDY7sBRByMs/iSAtwZAu6fYahuMXSvgJEssjiiYg01xt2Yh4C1SdYXpUrZ+yUyt9QlSz/y1ajKTAdsfzA9T3Ichxrf8BOnHKO7QfvNYVei2BP6395PK7eAwnIgL0Gsn5Wr6uzbomIkTJesB2d0gURvGQJpTPSobky0ga2sH+Fd7+WxfgyfRMzo++b9cZAYTlVibBZWe864h28GAZmpt836o3pXzZtlqvNaqAq28Hm2g+0Cz92AHicY2BkYGAA4uuNR03j+W2+MnCzMIDA9W8L2RH0/w8sDMwKQC4HAxNIFABGvAsNAHicY2BkYGBu+N/AEMPCAAJAkpEBFTADAEcJAmwEAAAABAAAAAQAAAAAAAAAAHwAwHicY2BkYGBgZohgYGUAASYg5gJCBob/YD4DABGmAXcAeJxlj01OwzAQhV/6B6QSqqhgh+QFYgEo/RGrblhUavdddN+mTpsqiSPHrdQDcB6OwAk4AtyAO/BIJ5s2lsffvHljTwDc4Acejt8t95E9XDI7cg0XuBeuU38QbpBfhJto41W4Rf1N2MczpsJtdGF5g9e4YvaEd2EPHXwI13CNT+E69S/hBvlbuIk7/Aq30PHqwj7mXle4jUcv9sdWL5xeqeVBxaHJIpM5v4KZXu+Sha3S6pxrW8QmU4OgX0lTnWlb3VPs10PnIhVZk6oJqzpJjMqt2erQBRvn8lGvF4kehCblWGP+tsYCjnEFhSUOjDFCGGSIyujoO1Vm9K+xQ8Jee1Y9zed0WxTU/3OFAQL0z1xTurLSeTpPgT1fG1J1dCtuy56UNJFezUkSskJe1rZUQuoBNmVXjhF6XNGJPyhnSP8ACVpuyAAAAHicY2BigAAuBuyAmZGJkZmRhYEjMbkksyyzpJItNSWzJL+IgQEAQDkGHgAA') format('woff'),
6
+  url('iconfont.ttf?t=1540390919997') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
7
+  url('iconfont.svg?t=1540390919997#iconfont') format('svg'); /* iOS 4.1- */
8
+}
9
+
10
+.iconfont {
11
+  font-family:"iconfont" !important;
12
+  font-size:16px;
13
+  font-style:normal;
14
+  -webkit-font-smoothing: antialiased;
15
+  -moz-osx-font-smoothing: grayscale;
16
+}
17
+
18
+.icon-activity:before { content: "\e6de"; }
19
+
20
+.icon-editor:before { content: "\e6f5"; }
21
+

BIN
src/assets/icon/iconfont.eot View File


+ 1 - 0
src/assets/icon/iconfont.js View File

@@ -0,0 +1 @@
1
+(function(window){var svgSprite='<svg><symbol id="icon-activity" viewBox="0 0 1024 1024"><path d="M800 845.088c0 1.76-0.736 2.784-0.096 2.88l-574.656 0.416C224.992 848.192 224 847.04 224 845.088v-477.12h576v477.12zM224 210.88c0-1.728 0.64-2.752 0.096-2.912H352V224a32 32 0 1 0 64 0v-16h192V224a32 32 0 1 0 64 0v-16h127.008a4.736 4.736 0 0 1 0.992 2.88V304H224V210.88zM799.84 144H672V128a32 32 0 0 0-64 0v16h-192V128a32 32 0 0 0-64 0v16H223.712C188.576 144 160 174.016 160 210.88V845.12c0 36.896 28.608 66.88 63.744 66.88h576.512c35.136 0 63.744-29.984 63.744-66.88V210.88c0-36.896-28.768-66.912-64.16-66.912z"  ></path><path d="M384 560h256a32 32 0 0 0 0-64h-256a32 32 0 0 0 0 64M384 720h256a32 32 0 0 0 0-64h-256a32 32 0 0 0 0 64"  ></path></symbol><symbol id="icon-editor" viewBox="0 0 1024 1024"><path d="M489.376 534.624a31.904 31.904 0 0 0 45.248 0l304-304a31.968 31.968 0 1 0-45.248-45.248l-304 304a31.968 31.968 0 0 0 0 45.248"  ></path><path d="M832 480a32 32 0 0 0-32 32l0.256 288L224 800.256 223.744 224H512a32 32 0 0 0 0-64H223.744A63.84 63.84 0 0 0 160 223.744v576.512C160 835.392 188.608 864 223.744 864h576.512A63.84 63.84 0 0 0 864 800.256V512a32 32 0 0 0-32-32"  ></path></symbol></svg>';var script=function(){var scripts=document.getElementsByTagName("script");return scripts[scripts.length-1]}();var shouldInjectCss=script.getAttribute("data-injectcss");var ready=function(fn){if(document.addEventListener){if(~["complete","loaded","interactive"].indexOf(document.readyState)){setTimeout(fn,0)}else{var loadFn=function(){document.removeEventListener("DOMContentLoaded",loadFn,false);fn()};document.addEventListener("DOMContentLoaded",loadFn,false)}}else if(document.attachEvent){IEContentLoaded(window,fn)}function IEContentLoaded(w,fn){var d=w.document,done=false,init=function(){if(!done){done=true;fn()}};var polling=function(){try{d.documentElement.doScroll("left")}catch(e){setTimeout(polling,50);return}init()};polling();d.onreadystatechange=function(){if(d.readyState=="complete"){d.onreadystatechange=null;init()}}}};var before=function(el,target){target.parentNode.insertBefore(el,target)};var prepend=function(el,target){if(target.firstChild){before(el,target.firstChild)}else{target.appendChild(el)}};function appendSvg(){var div,svg;div=document.createElement("div");div.innerHTML=svgSprite;svgSprite=null;svg=div.getElementsByTagName("svg")[0];if(svg){svg.setAttribute("aria-hidden","true");svg.style.position="absolute";svg.style.width=0;svg.style.height=0;svg.style.overflow="hidden";prepend(svg,document.body)}}if(shouldInjectCss&&!window.__iconfont__svg__cssinject__){window.__iconfont__svg__cssinject__=true;try{document.write("<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>")}catch(e){console&&console.log(e)}}ready(appendSvg)})(window)

+ 32 - 0
src/assets/icon/iconfont.svg View File

@@ -0,0 +1,32 @@
1
+<?xml version="1.0" standalone="no"?>
2
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
+<!--
4
+2013-9-30: Created.
5
+-->
6
+<svg>
7
+<metadata>
8
+Created by iconfont
9
+</metadata>
10
+<defs>
11
+
12
+<font id="iconfont" horiz-adv-x="1024" >
13
+  <font-face
14
+    font-family="iconfont"
15
+    font-weight="500"
16
+    font-stretch="normal"
17
+    units-per-em="1024"
18
+    ascent="896"
19
+    descent="-128"
20
+  />
21
+    <missing-glyph />
22
+    
23
+    <glyph glyph-name="activity" unicode="&#59102;" d="M800 50.912c0-1.76-0.736-2.784-0.096-2.88l-574.656-0.416C224.992 47.808 224 48.96 224 50.912v477.12h576v-477.12zM224 685.12c0 1.728 0.64 2.752 0.096 2.912H352V672a32 32 0 1 1 64 0v16h192V672a32 32 0 1 1 64 0v16h127.008a4.736 4.736 0 0 0 0.992-2.88V592H224V685.12zM799.84 752H672V768a32 32 0 0 1-64 0v-16h-192V768a32 32 0 0 1-64 0v-16H223.712C188.576 752 160 721.984 160 685.12V50.88c0-36.896 28.608-66.88 63.744-66.88h576.512c35.136 0 63.744 29.984 63.744 66.88V685.12c0 36.896-28.768 66.912-64.16 66.912zM384 336h256a32 32 0 0 1 0 64h-256a32 32 0 0 1 0-64M384 176h256a32 32 0 0 1 0 64h-256a32 32 0 0 1 0-64"  horiz-adv-x="1024" />
24
+
25
+    
26
+    <glyph glyph-name="editor" unicode="&#59125;" d="M489.376 361.376a31.904 31.904 0 0 1 45.248 0l304 304a31.968 31.968 0 1 1-45.248 45.248l-304-304a31.968 31.968 0 0 1 0-45.248M832 416a32 32 0 0 1-32-32l0.256-288L224 95.744 223.744 672H512a32 32 0 0 1 0 64H223.744A63.84 63.84 0 0 1 160 672.256v-576.512C160 60.608 188.608 32 223.744 32h576.512A63.84 63.84 0 0 1 864 95.744V384a32 32 0 0 1-32 32"  horiz-adv-x="1024" />
27
+
28
+    
29
+
30
+
31
+  </font>
32
+</defs></svg>

BIN
src/assets/icon/iconfont.ttf View File


BIN
src/assets/icon/iconfont.woff View File


+ 370 - 0
src/assets/iconfont/demo.css View File

@@ -0,0 +1,370 @@
1
+*{margin: 0;padding: 0;list-style: none;}
2
+/*
3
+KISSY CSS Reset
4
+理念:1. reset 的目的不是清除浏览器的默认样式,这仅是部分工作。清除和重置是紧密不可分的。
5
+2. reset 的目的不是让默认样式在所有浏览器下一致,而是减少默认样式有可能带来的问题。
6
+3. reset 期望提供一套普适通用的基础样式。但没有银弹,推荐根据具体需求,裁剪和修改后再使用。
7
+特色:1. 适应中文;2. 基于最新主流浏览器。
8
+维护:玉伯<lifesinger@gmail.com>, 正淳<ragecarrier@gmail.com>
9
+ */
10
+
11
+/** 清除内外边距 **/
12
+body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, /* structural elements 结构元素 */
13
+dl, dt, dd, ul, ol, li, /* list elements 列表元素 */
14
+pre, /* text formatting elements 文本格式元素 */
15
+form, fieldset, legend, button, input, textarea, /* form elements 表单元素 */
16
+th, td /* table elements 表格元素 */ {
17
+  margin: 0;
18
+  padding: 0;
19
+}
20
+
21
+/** 设置默认字体 **/
22
+body,
23
+button, input, select, textarea /* for ie */ {
24
+  font: 12px/1.5 tahoma, arial, \5b8b\4f53, sans-serif;
25
+}
26
+h1, h2, h3, h4, h5, h6 { font-size: 100%; }
27
+address, cite, dfn, em, var { font-style: normal; } /* 将斜体扶正 */
28
+code, kbd, pre, samp { font-family: courier new, courier, monospace; } /* 统一等宽字体 */
29
+small { font-size: 12px; } /* 小于 12px 的中文很难阅读,让 small 正常化 */
30
+
31
+/** 重置列表元素 **/
32
+ul, ol { list-style: none; }
33
+
34
+/** 重置文本格式元素 **/
35
+a { text-decoration: none; }
36
+a:hover { text-decoration: underline; }
37
+
38
+
39
+/** 重置表单元素 **/
40
+legend { color: #000; } /* for ie6 */
41
+fieldset, img { border: 0; } /* img 搭车:让链接里的 img 无边框 */
42
+button, input, select, textarea { font-size: 100%; } /* 使得表单元素在 ie 下能继承字体大小 */
43
+/* 注:optgroup 无法扶正 */
44
+
45
+/** 重置表格元素 **/
46
+table { border-collapse: collapse; border-spacing: 0; }
47
+
48
+/* 清除浮动 */
49
+.ks-clear:after, .clear:after {
50
+  content: '\20';
51
+  display: block;
52
+  height: 0;
53
+  clear: both;
54
+}
55
+.ks-clear, .clear {
56
+  *zoom: 1;
57
+}
58
+
59
+.main {
60
+  padding: 30px 100px;
61
+width: 960px;
62
+margin: 0 auto;
63
+}
64
+.main h1{font-size:36px; color:#333; text-align:left;margin-bottom:30px; border-bottom: 1px solid #eee;}
65
+
66
+.helps{margin-top:40px;}
67
+.helps pre{
68
+  padding:20px;
69
+  margin:10px 0;
70
+  border:solid 1px #e7e1cd;
71
+  background-color: #fffdef;
72
+  overflow: auto;
73
+}
74
+
75
+.icon_lists{
76
+  width: 100% !important;
77
+
78
+}
79
+
80
+.icon_lists li{
81
+  float:left;
82
+  width: 100px;
83
+  height:180px;
84
+  text-align: center;
85
+  list-style: none !important;
86
+}
87
+.icon_lists .icon{
88
+  font-size: 42px;
89
+  line-height: 100px;
90
+  margin: 10px 0;
91
+  color:#333;
92
+  -webkit-transition: font-size 0.25s ease-out 0s;
93
+  -moz-transition: font-size 0.25s ease-out 0s;
94
+  transition: font-size 0.25s ease-out 0s;
95
+
96
+}
97
+.icon_lists .icon:hover{
98
+  font-size: 100px;
99
+}
100
+
101
+
102
+
103
+.markdown {
104
+  color: #666;
105
+  font-size: 14px;
106
+  line-height: 1.8;
107
+}
108
+
109
+.highlight {
110
+  line-height: 1.5;
111
+}
112
+
113
+.markdown img {
114
+  vertical-align: middle;
115
+  max-width: 100%;
116
+}
117
+
118
+.markdown h1 {
119
+  color: #404040;
120
+  font-weight: 500;
121
+  line-height: 40px;
122
+  margin-bottom: 24px;
123
+}
124
+
125
+.markdown h2,
126
+.markdown h3,
127
+.markdown h4,
128
+.markdown h5,
129
+.markdown h6 {
130
+  color: #404040;
131
+  margin: 1.6em 0 0.6em 0;
132
+  font-weight: 500;
133
+  clear: both;
134
+}
135
+
136
+.markdown h1 {
137
+  font-size: 28px;
138
+}
139
+
140
+.markdown h2 {
141
+  font-size: 22px;
142
+}
143
+
144
+.markdown h3 {
145
+  font-size: 16px;
146
+}
147
+
148
+.markdown h4 {
149
+  font-size: 14px;
150
+}
151
+
152
+.markdown h5 {
153
+  font-size: 12px;
154
+}
155
+
156
+.markdown h6 {
157
+  font-size: 12px;
158
+}
159
+
160
+.markdown hr {
161
+  height: 1px;
162
+  border: 0;
163
+  background: #e9e9e9;
164
+  margin: 16px 0;
165
+  clear: both;
166
+}
167
+
168
+.markdown p,
169
+.markdown pre {
170
+  margin: 1em 0;
171
+}
172
+
173
+.markdown > p,
174
+.markdown > blockquote,
175
+.markdown > .highlight,
176
+.markdown > ol,
177
+.markdown > ul {
178
+  width: 80%;
179
+}
180
+
181
+.markdown ul > li {
182
+  list-style: circle;
183
+}
184
+
185
+.markdown > ul li,
186
+.markdown blockquote ul > li {
187
+  margin-left: 20px;
188
+  padding-left: 4px;
189
+}
190
+
191
+.markdown > ul li p,
192
+.markdown > ol li p {
193
+  margin: 0.6em 0;
194
+}
195
+
196
+.markdown ol > li {
197
+  list-style: decimal;
198
+}
199
+
200
+.markdown > ol li,
201
+.markdown blockquote ol > li {
202
+  margin-left: 20px;
203
+  padding-left: 4px;
204
+}
205
+
206
+.markdown code {
207
+  margin: 0 3px;
208
+  padding: 0 5px;
209
+  background: #eee;
210
+  border-radius: 3px;
211
+}
212
+
213
+.markdown pre {
214
+  border-radius: 6px;
215
+  background: #f7f7f7;
216
+  padding: 20px;
217
+}
218
+
219
+.markdown pre code {
220
+  border: none;
221
+  background: #f7f7f7;
222
+  margin: 0;
223
+}
224
+
225
+.markdown strong,
226
+.markdown b {
227
+  font-weight: 600;
228
+}
229
+
230
+.markdown > table {
231
+  border-collapse: collapse;
232
+  border-spacing: 0px;
233
+  empty-cells: show;
234
+  border: 1px solid #e9e9e9;
235
+  width: 95%;
236
+  margin-bottom: 24px;
237
+}
238
+
239
+.markdown > table th {
240
+  white-space: nowrap;
241
+  color: #333;
242
+  font-weight: 600;
243
+
244
+}
245
+
246
+.markdown > table th,
247
+.markdown > table td {
248
+  border: 1px solid #e9e9e9;
249
+  padding: 8px 16px;
250
+  text-align: left;
251
+}
252
+
253
+.markdown > table th {
254
+  background: #F7F7F7;
255
+}
256
+
257
+.markdown blockquote {
258
+  font-size: 90%;
259
+  color: #999;
260
+  border-left: 4px solid #e9e9e9;
261
+  padding-left: 0.8em;
262
+  margin: 1em 0;
263
+  font-style: italic;
264
+}
265
+
266
+.markdown blockquote p {
267
+  margin: 0;
268
+}
269
+
270
+.markdown .anchor {
271
+  opacity: 0;
272
+  transition: opacity 0.3s ease;
273
+  margin-left: 8px;
274
+}
275
+
276
+.markdown .waiting {
277
+  color: #ccc;
278
+}
279
+
280
+.markdown h1:hover .anchor,
281
+.markdown h2:hover .anchor,
282
+.markdown h3:hover .anchor,
283
+.markdown h4:hover .anchor,
284
+.markdown h5:hover .anchor,
285
+.markdown h6:hover .anchor {
286
+  opacity: 1;
287
+  display: inline-block;
288
+}
289
+
290
+.markdown > br,
291
+.markdown > p > br {
292
+  clear: both;
293
+}
294
+
295
+
296
+.hljs {
297
+  display: block;
298
+  background: white;
299
+  padding: 0.5em;
300
+  color: #333333;
301
+  overflow-x: auto;
302
+}
303
+
304
+.hljs-comment,
305
+.hljs-meta {
306
+  color: #969896;
307
+}
308
+
309
+.hljs-string,
310
+.hljs-variable,
311
+.hljs-template-variable,
312
+.hljs-strong,
313
+.hljs-emphasis,
314
+.hljs-quote {
315
+  color: #df5000;
316
+}
317
+
318
+.hljs-keyword,
319
+.hljs-selector-tag,
320
+.hljs-type {
321
+  color: #a71d5d;
322
+}
323
+
324
+.hljs-literal,
325
+.hljs-symbol,
326
+.hljs-bullet,
327
+.hljs-attribute {
328
+  color: #0086b3;
329
+}
330
+
331
+.hljs-section,
332
+.hljs-name {
333
+  color: #63a35c;
334
+}
335
+
336
+.hljs-tag {
337
+  color: #333333;
338
+}
339
+
340
+.hljs-title,
341
+.hljs-attr,
342
+.hljs-selector-id,
343
+.hljs-selector-class,
344
+.hljs-selector-attr,
345
+.hljs-selector-pseudo {
346
+  color: #795da3;
347
+}
348
+
349
+.hljs-addition {
350
+  color: #55a532;
351
+  background-color: #eaffea;
352
+}
353
+
354
+.hljs-deletion {
355
+  color: #bd2c00;
356
+  background-color: #ffecec;
357
+}
358
+
359
+.hljs-link {
360
+  text-decoration: underline;
361
+}
362
+
363
+pre{
364
+  background: #fff;
365
+}
366
+
367
+
368
+
369
+
370
+

+ 544 - 0
src/assets/iconfont/demo_fontclass.html View File

@@ -0,0 +1,544 @@
1
+
2
+<!DOCTYPE html>
3
+<html>
4
+<head>
5
+    <meta charset="utf-8"/>
6
+    <title>IconFont</title>
7
+    <link rel="stylesheet" href="demo.css">
8
+    <link rel="stylesheet" href="iconfont.css">
9
+</head>
10
+<body>
11
+    <div class="main markdown">
12
+        <h1>IconFont 图标</h1>
13
+        <ul class="icon_lists clear">
14
+            
15
+                <li>
16
+                <i class="icon iconfont icon-76"></i>
17
+                    <div class="name">电话</div>
18
+                    <div class="fontclass">.icon-76</div>
19
+                </li>
20
+            
21
+                <li>
22
+                <i class="icon iconfont icon-dianhua1"></i>
23
+                    <div class="name">电话</div>
24
+                    <div class="fontclass">.icon-dianhua1</div>
25
+                </li>
26
+            
27
+                <li>
28
+                <i class="icon iconfont icon-wsmp-payuser"></i>
29
+                    <div class="name">会员</div>
30
+                    <div class="fontclass">.icon-wsmp-payuser</div>
31
+                </li>
32
+            
33
+                <li>
34
+                <i class="icon iconfont icon-jiankangshuidi"></i>
35
+                    <div class="name">健康 水滴</div>
36
+                    <div class="fontclass">.icon-jiankangshuidi</div>
37
+                </li>
38
+            
39
+                <li>
40
+                <i class="icon iconfont icon-iconbaocuo"></i>
41
+                    <div class="name">报错</div>
42
+                    <div class="fontclass">.icon-iconbaocuo</div>
43
+                </li>
44
+            
45
+                <li>
46
+                <i class="icon iconfont icon-dianhua"></i>
47
+                    <div class="name">电话</div>
48
+                    <div class="fontclass">.icon-dianhua</div>
49
+                </li>
50
+            
51
+                <li>
52
+                <i class="icon iconfont icon-morentouxiang"></i>
53
+                    <div class="name">225默认头像</div>
54
+                    <div class="fontclass">.icon-morentouxiang</div>
55
+                </li>
56
+            
57
+                <li>
58
+                <i class="icon iconfont icon-accessory"></i>
59
+                    <div class="name">accessory</div>
60
+                    <div class="fontclass">.icon-accessory</div>
61
+                </li>
62
+            
63
+                <li>
64
+                <i class="icon iconfont icon-add"></i>
65
+                    <div class="name">add</div>
66
+                    <div class="fontclass">.icon-add</div>
67
+                </li>
68
+            
69
+                <li>
70
+                <i class="icon iconfont icon-addition_fill"></i>
71
+                    <div class="name">addition_fill</div>
72
+                    <div class="fontclass">.icon-addition_fill</div>
73
+                </li>
74
+            
75
+                <li>
76
+                <i class="icon iconfont icon-addition"></i>
77
+                    <div class="name">addition</div>
78
+                    <div class="fontclass">.icon-addition</div>
79
+                </li>
80
+            
81
+                <li>
82
+                <i class="icon iconfont icon-addressbook_fill"></i>
83
+                    <div class="name">addressbook_fill</div>
84
+                    <div class="fontclass">.icon-addressbook_fill</div>
85
+                </li>
86
+            
87
+                <li>
88
+                <i class="icon iconfont icon-addressbook"></i>
89
+                    <div class="name">addressbook</div>
90
+                    <div class="fontclass">.icon-addressbook</div>
91
+                </li>
92
+            
93
+                <li>
94
+                <i class="icon iconfont icon-browse_fill"></i>
95
+                    <div class="name">browse_fill</div>
96
+                    <div class="fontclass">.icon-browse_fill</div>
97
+                </li>
98
+            
99
+                <li>
100
+                <i class="icon iconfont icon-brush"></i>
101
+                    <div class="name">brush</div>
102
+                    <div class="fontclass">.icon-brush</div>
103
+                </li>
104
+            
105
+                <li>
106
+                <i class="icon iconfont icon-brush_fill"></i>
107
+                    <div class="name">brush_fill</div>
108
+                    <div class="fontclass">.icon-brush_fill</div>
109
+                </li>
110
+            
111
+                <li>
112
+                <i class="icon iconfont icon-computer_fill"></i>
113
+                    <div class="name">computer_fill</div>
114
+                    <div class="fontclass">.icon-computer_fill</div>
115
+                </li>
116
+            
117
+                <li>
118
+                <i class="icon iconfont icon-computer"></i>
119
+                    <div class="name">computer</div>
120
+                    <div class="fontclass">.icon-computer</div>
121
+                </li>
122
+            
123
+                <li>
124
+                <i class="icon iconfont icon-coordinates_fill"></i>
125
+                    <div class="name">coordinates_fill</div>
126
+                    <div class="fontclass">.icon-coordinates_fill</div>
127
+                </li>
128
+            
129
+                <li>
130
+                <i class="icon iconfont icon-coordinates"></i>
131
+                    <div class="name">coordinates</div>
132
+                    <div class="fontclass">.icon-coordinates</div>
133
+                </li>
134
+            
135
+                <li>
136
+                <i class="icon iconfont icon-coupons_fill"></i>
137
+                    <div class="name">coupons_fill</div>
138
+                    <div class="fontclass">.icon-coupons_fill</div>
139
+                </li>
140
+            
141
+                <li>
142
+                <i class="icon iconfont icon-customerservice_fill"></i>
143
+                    <div class="name">customerservice_fill</div>
144
+                    <div class="fontclass">.icon-customerservice_fill</div>
145
+                </li>
146
+            
147
+                <li>
148
+                <i class="icon iconfont icon-customerservice"></i>
149
+                    <div class="name">customerservice</div>
150
+                    <div class="fontclass">.icon-customerservice</div>
151
+                </li>
152
+            
153
+                <li>
154
+                <i class="icon iconfont icon-document"></i>
155
+                    <div class="name">document</div>
156
+                    <div class="fontclass">.icon-document</div>
157
+                </li>
158
+            
159
+                <li>
160
+                <i class="icon iconfont icon-document_fill"></i>
161
+                    <div class="name">document_fill</div>
162
+                    <div class="fontclass">.icon-document_fill</div>
163
+                </li>
164
+            
165
+                <li>
166
+                <i class="icon iconfont icon-dynamic_fill"></i>
167
+                    <div class="name">dynamic_fill</div>
168
+                    <div class="fontclass">.icon-dynamic_fill</div>
169
+                </li>
170
+            
171
+                <li>
172
+                <i class="icon iconfont icon-editor"></i>
173
+                    <div class="name">editor</div>
174
+                    <div class="fontclass">.icon-editor</div>
175
+                </li>
176
+            
177
+                <li>
178
+                <i class="icon iconfont icon-emoji"></i>
179
+                    <div class="name">emoji</div>
180
+                    <div class="fontclass">.icon-emoji</div>
181
+                </li>
182
+            
183
+                <li>
184
+                <i class="icon iconfont icon-enter"></i>
185
+                    <div class="name">enter</div>
186
+                    <div class="fontclass">.icon-enter</div>
187
+                </li>
188
+            
189
+                <li>
190
+                <i class="icon iconfont icon-flag_fill"></i>
191
+                    <div class="name">flag_fill</div>
192
+                    <div class="fontclass">.icon-flag_fill</div>
193
+                </li>
194
+            
195
+                <li>
196
+                <i class="icon iconfont icon-flag"></i>
197
+                    <div class="name">flag</div>
198
+                    <div class="fontclass">.icon-flag</div>
199
+                </li>
200
+            
201
+                <li>
202
+                <i class="icon iconfont icon-group_fill"></i>
203
+                    <div class="name">group_fill</div>
204
+                    <div class="fontclass">.icon-group_fill</div>
205
+                </li>
206
+            
207
+                <li>
208
+                <i class="icon iconfont icon-headlines_fill"></i>
209
+                    <div class="name">headlines_fill</div>
210
+                    <div class="fontclass">.icon-headlines_fill</div>
211
+                </li>
212
+            
213
+                <li>
214
+                <i class="icon iconfont icon-homepage_fill"></i>
215
+                    <div class="name">homepage_fill</div>
216
+                    <div class="fontclass">.icon-homepage_fill</div>
217
+                </li>
218
+            
219
+                <li>
220
+                <i class="icon iconfont icon-homepage"></i>
221
+                    <div class="name">homepage</div>
222
+                    <div class="fontclass">.icon-homepage</div>
223
+                </li>
224
+            
225
+                <li>
226
+                <i class="icon iconfont icon-interactive_fill"></i>
227
+                    <div class="name">interactive_fill</div>
228
+                    <div class="fontclass">.icon-interactive_fill</div>
229
+                </li>
230
+            
231
+                <li>
232
+                <i class="icon iconfont icon-interactive"></i>
233
+                    <div class="name">interactive</div>
234
+                    <div class="fontclass">.icon-interactive</div>
235
+                </li>
236
+            
237
+                <li>
238
+                <i class="icon iconfont icon-label"></i>
239
+                    <div class="name">label</div>
240
+                    <div class="fontclass">.icon-label</div>
241
+                </li>
242
+            
243
+                <li>
244
+                <i class="icon iconfont icon-like_fill"></i>
245
+                    <div class="name">like_fill</div>
246
+                    <div class="fontclass">.icon-like_fill</div>
247
+                </li>
248
+            
249
+                <li>
250
+                <i class="icon iconfont icon-like"></i>
251
+                    <div class="name">like</div>
252
+                    <div class="fontclass">.icon-like</div>
253
+                </li>
254
+            
255
+                <li>
256
+                <i class="icon iconfont icon-lock"></i>
257
+                    <div class="name">lock</div>
258
+                    <div class="fontclass">.icon-lock</div>
259
+                </li>
260
+            
261
+                <li>
262
+                <i class="icon iconfont icon-mail"></i>
263
+                    <div class="name">mail</div>
264
+                    <div class="fontclass">.icon-mail</div>
265
+                </li>
266
+            
267
+                <li>
268
+                <i class="icon iconfont icon-manage"></i>
269
+                    <div class="name">manage</div>
270
+                    <div class="fontclass">.icon-manage</div>
271
+                </li>
272
+            
273
+                <li>
274
+                <i class="icon iconfont icon-message"></i>
275
+                    <div class="name">message</div>
276
+                    <div class="fontclass">.icon-message</div>
277
+                </li>
278
+            
279
+                <li>
280
+                <i class="icon iconfont icon-mine_fill"></i>
281
+                    <div class="name">mine_fill</div>
282
+                    <div class="fontclass">.icon-mine_fill</div>
283
+                </li>
284
+            
285
+                <li>
286
+                <i class="icon iconfont icon-mobilephone_fill"></i>
287
+                    <div class="name">mobilephone_fill</div>
288
+                    <div class="fontclass">.icon-mobilephone_fill</div>
289
+                </li>
290
+            
291
+                <li>
292
+                <i class="icon iconfont icon-mobilephone"></i>
293
+                    <div class="name">mobilephone</div>
294
+                    <div class="fontclass">.icon-mobilephone</div>
295
+                </li>
296
+            
297
+                <li>
298
+                <i class="icon iconfont icon-offline_fill"></i>
299
+                    <div class="name">offline_fill</div>
300
+                    <div class="fontclass">.icon-offline_fill</div>
301
+                </li>
302
+            
303
+                <li>
304
+                <i class="icon iconfont icon-offline"></i>
305
+                    <div class="name">offline</div>
306
+                    <div class="fontclass">.icon-offline</div>
307
+                </li>
308
+            
309
+                <li>
310
+                <i class="icon iconfont icon-order_fill"></i>
311
+                    <div class="name">order_fill</div>
312
+                    <div class="fontclass">.icon-order_fill</div>
313
+                </li>
314
+            
315
+                <li>
316
+                <i class="icon iconfont icon-other"></i>
317
+                    <div class="name">other</div>
318
+                    <div class="fontclass">.icon-other</div>
319
+                </li>
320
+            
321
+                <li>
322
+                <i class="icon iconfont icon-picture_fill"></i>
323
+                    <div class="name">picture_fill</div>
324
+                    <div class="fontclass">.icon-picture_fill</div>
325
+                </li>
326
+            
327
+                <li>
328
+                <i class="icon iconfont icon-prompt_fill"></i>
329
+                    <div class="name">prompt_fill</div>
330
+                    <div class="fontclass">.icon-prompt_fill</div>
331
+                </li>
332
+            
333
+                <li>
334
+                <i class="icon iconfont icon-qrcode_fill"></i>
335
+                    <div class="name">qrcode_fill</div>
336
+                    <div class="fontclass">.icon-qrcode_fill</div>
337
+                </li>
338
+            
339
+                <li>
340
+                <i class="icon iconfont icon-remind_fill"></i>
341
+                    <div class="name">remind_fill</div>
342
+                    <div class="fontclass">.icon-remind_fill</div>
343
+                </li>
344
+            
345
+                <li>
346
+                <i class="icon iconfont icon-remind"></i>
347
+                    <div class="name">remind</div>
348
+                    <div class="fontclass">.icon-remind</div>
349
+                </li>
350
+            
351
+                <li>
352
+                <i class="icon iconfont icon-return"></i>
353
+                    <div class="name">return</div>
354
+                    <div class="fontclass">.icon-return</div>
355
+                </li>
356
+            
357
+                <li>
358
+                <i class="icon iconfont icon-service_fill"></i>
359
+                    <div class="name">service_fill</div>
360
+                    <div class="fontclass">.icon-service_fill</div>
361
+                </li>
362
+            
363
+                <li>
364
+                <i class="icon iconfont icon-service"></i>
365
+                    <div class="name">service</div>
366
+                    <div class="fontclass">.icon-service</div>
367
+                </li>
368
+            
369
+                <li>
370
+                <i class="icon iconfont icon-setup_fill"></i>
371
+                    <div class="name">setup_fill</div>
372
+                    <div class="fontclass">.icon-setup_fill</div>
373
+                </li>
374
+            
375
+                <li>
376
+                <i class="icon iconfont icon-setup"></i>
377
+                    <div class="name">setup</div>
378
+                    <div class="fontclass">.icon-setup</div>
379
+                </li>
380
+            
381
+                <li>
382
+                <i class="icon iconfont icon-smallscreen"></i>
383
+                    <div class="name">smallscreen</div>
384
+                    <div class="fontclass">.icon-smallscreen</div>
385
+                </li>
386
+            
387
+                <li>
388
+                <i class="icon iconfont icon-success_fill"></i>
389
+                    <div class="name">success_fill</div>
390
+                    <div class="fontclass">.icon-success_fill</div>
391
+                </li>
392
+            
393
+                <li>
394
+                <i class="icon iconfont icon-success"></i>
395
+                    <div class="name">success</div>
396
+                    <div class="fontclass">.icon-success</div>
397
+                </li>
398
+            
399
+                <li>
400
+                <i class="icon iconfont icon-time_fill"></i>
401
+                    <div class="name">time_fill</div>
402
+                    <div class="fontclass">.icon-time_fill</div>
403
+                </li>
404
+            
405
+                <li>
406
+                <i class="icon iconfont icon-trash"></i>
407
+                    <div class="name">trash</div>
408
+                    <div class="fontclass">.icon-trash</div>
409
+                </li>
410
+            
411
+                <li>
412
+                <i class="icon iconfont icon-trash_fill"></i>
413
+                    <div class="name">trash_fill</div>
414
+                    <div class="fontclass">.icon-trash_fill</div>
415
+                </li>
416
+            
417
+                <li>
418
+                <i class="icon iconfont icon-undo"></i>
419
+                    <div class="name">undo</div>
420
+                    <div class="fontclass">.icon-undo</div>
421
+                </li>
422
+            
423
+                <li>
424
+                <i class="icon iconfont icon-workbench_fill"></i>
425
+                    <div class="name">workbench_fill</div>
426
+                    <div class="fontclass">.icon-workbench_fill</div>
427
+                </li>
428
+            
429
+                <li>
430
+                <i class="icon iconfont icon-daoru"></i>
431
+                    <div class="name">导入</div>
432
+                    <div class="fontclass">.icon-daoru</div>
433
+                </li>
434
+            
435
+                <li>
436
+                <i class="icon iconfont icon-search"></i>
437
+                    <div class="name">search</div>
438
+                    <div class="fontclass">.icon-search</div>
439
+                </li>
440
+            
441
+                <li>
442
+                <i class="icon iconfont icon-dianhua2"></i>
443
+                    <div class="name">电话</div>
444
+                    <div class="fontclass">.icon-dianhua2</div>
445
+                </li>
446
+            
447
+                <li>
448
+                <i class="icon iconfont icon-packup"></i>
449
+                    <div class="name">packup</div>
450
+                    <div class="fontclass">.icon-packup</div>
451
+                </li>
452
+            
453
+                <li>
454
+                <i class="icon iconfont icon-unfold"></i>
455
+                    <div class="name">unfold</div>
456
+                    <div class="fontclass">.icon-unfold</div>
457
+                </li>
458
+            
459
+                <li>
460
+                <i class="icon iconfont icon-wangwang"></i>
461
+                    <div class="name">wangwang_fill</div>
462
+                    <div class="fontclass">.icon-wangwang</div>
463
+                </li>
464
+            
465
+                <li>
466
+                <i class="icon iconfont icon-yanzhengma"></i>
467
+                    <div class="name">验证码</div>
468
+                    <div class="fontclass">.icon-yanzhengma</div>
469
+                </li>
470
+            
471
+                <li>
472
+                <i class="icon iconfont icon-baocuo-chahua"></i>
473
+                    <div class="name">报错-插画</div>
474
+                    <div class="fontclass">.icon-baocuo-chahua</div>
475
+                </li>
476
+            
477
+                <li>
478
+                <i class="icon iconfont icon-pengyou"></i>
479
+                    <div class="name">朋友</div>
480
+                    <div class="fontclass">.icon-pengyou</div>
481
+                </li>
482
+            
483
+                <li>
484
+                <i class="icon iconfont icon-suoyou"></i>
485
+                    <div class="name">所有</div>
486
+                    <div class="fontclass">.icon-suoyou</div>
487
+                </li>
488
+            
489
+                <li>
490
+                <i class="icon iconfont icon-huiyuan"></i>
491
+                    <div class="name">会员</div>
492
+                    <div class="fontclass">.icon-huiyuan</div>
493
+                </li>
494
+            
495
+                <li>
496
+                <i class="icon iconfont icon-huiyuan1"></i>
497
+                    <div class="name">会员</div>
498
+                    <div class="fontclass">.icon-huiyuan1</div>
499
+                </li>
500
+            
501
+                <li>
502
+                <i class="icon iconfont icon-kongyemian"></i>
503
+                    <div class="name">空页面</div>
504
+                    <div class="fontclass">.icon-kongyemian</div>
505
+                </li>
506
+            
507
+                <li>
508
+                <i class="icon iconfont icon-logout"></i>
509
+                    <div class="name">logout</div>
510
+                    <div class="fontclass">.icon-logout</div>
511
+                </li>
512
+            
513
+                <li>
514
+                <i class="icon iconfont icon-cloudupload-o"></i>
515
+                    <div class="name">cloud upload-o</div>
516
+                    <div class="fontclass">.icon-cloudupload-o</div>
517
+                </li>
518
+            
519
+        </ul>
520
+
521
+        <h2 id="font-class-">font-class引用</h2>
522
+        <hr>
523
+
524
+        <p>font-class是unicode使用方式的一种变种,主要是解决unicode书写不直观,语意不明确的问题。</p>
525
+        <p>与unicode使用方式相比,具有如下特点:</p>
526
+        <ul>
527
+        <li>兼容性良好,支持ie8+,及所有现代浏览器。</li>
528
+        <li>相比于unicode语意明确,书写更直观。可以很容易分辨这个icon是什么。</li>
529
+        <li>因为使用class来定义图标,所以当要替换图标时,只需要修改class里面的unicode引用。</li>
530
+        <li>不过因为本质上还是使用的字体,所以多色图标还是不支持的。</li>
531
+        </ul>
532
+        <p>使用步骤如下:</p>
533
+        <h3 id="-fontclass-">第一步:引入项目下面生成的fontclass代码:</h3>
534
+
535
+
536
+        <pre><code class="lang-js hljs javascript"><span class="hljs-comment">&lt;link rel="stylesheet" type="text/css" href="./iconfont.css"&gt;</span></code></pre>
537
+        <h3 id="-">第二步:挑选相应图标并获取类名,应用于页面:</h3>
538
+        <pre><code class="lang-css hljs">&lt;<span class="hljs-selector-tag">i</span> <span class="hljs-selector-tag">class</span>="<span class="hljs-selector-tag">iconfont</span> <span class="hljs-selector-tag">icon-xxx</span>"&gt;&lt;/<span class="hljs-selector-tag">i</span>&gt;</code></pre>
539
+        <blockquote>
540
+        <p>"iconfont"是你项目下的font-family。可以通过编辑项目查看,默认是"iconfont"。</p>
541
+        </blockquote>
542
+    </div>
543
+</body>
544
+</html>

+ 743 - 0
src/assets/iconfont/demo_symbol.html View File

@@ -0,0 +1,743 @@
1
+
2
+<!DOCTYPE html>
3
+<html>
4
+<head>
5
+    <meta charset="utf-8"/>
6
+    <title>IconFont</title>
7
+    <link rel="stylesheet" href="demo.css">
8
+    <script src="iconfont.js"></script>
9
+
10
+    <style type="text/css">
11
+        .icon {
12
+          /* 通过设置 font-size 来改变图标大小 */
13
+          width: 1em; height: 1em;
14
+          /* 图标和文字相邻时,垂直对齐 */
15
+          vertical-align: -0.15em;
16
+          /* 通过设置 color 来改变 SVG 的颜色/fill */
17
+          fill: currentColor;
18
+          /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
19
+             normalize.css 中也包含这行 */
20
+          overflow: hidden;
21
+        }
22
+
23
+    </style>
24
+</head>
25
+<body>
26
+    <div class="main markdown">
27
+        <h1>IconFont 图标</h1>
28
+        <ul class="icon_lists clear">
29
+            
30
+                <li>
31
+                    <svg class="icon" aria-hidden="true">
32
+                        <use xlink:href="#icon-76"></use>
33
+                    </svg>
34
+                    <div class="name">电话</div>
35
+                    <div class="fontclass">#icon-76</div>
36
+                </li>
37
+            
38
+                <li>
39
+                    <svg class="icon" aria-hidden="true">
40
+                        <use xlink:href="#icon-dianhua1"></use>
41
+                    </svg>
42
+                    <div class="name">电话</div>
43
+                    <div class="fontclass">#icon-dianhua1</div>
44
+                </li>
45
+            
46
+                <li>
47
+                    <svg class="icon" aria-hidden="true">
48
+                        <use xlink:href="#icon-wsmp-payuser"></use>
49
+                    </svg>
50
+                    <div class="name">会员</div>
51
+                    <div class="fontclass">#icon-wsmp-payuser</div>
52
+                </li>
53
+            
54
+                <li>
55
+                    <svg class="icon" aria-hidden="true">
56
+                        <use xlink:href="#icon-jiankangshuidi"></use>
57
+                    </svg>
58
+                    <div class="name">健康 水滴</div>
59
+                    <div class="fontclass">#icon-jiankangshuidi</div>
60
+                </li>
61
+            
62
+                <li>
63
+                    <svg class="icon" aria-hidden="true">
64
+                        <use xlink:href="#icon-iconbaocuo"></use>
65
+                    </svg>
66
+                    <div class="name">报错</div>
67
+                    <div class="fontclass">#icon-iconbaocuo</div>
68
+                </li>
69
+            
70
+                <li>
71
+                    <svg class="icon" aria-hidden="true">
72
+                        <use xlink:href="#icon-dianhua"></use>
73
+                    </svg>
74
+                    <div class="name">电话</div>
75
+                    <div class="fontclass">#icon-dianhua</div>
76
+                </li>
77
+            
78
+                <li>
79
+                    <svg class="icon" aria-hidden="true">
80
+                        <use xlink:href="#icon-morentouxiang"></use>
81
+                    </svg>
82
+                    <div class="name">225默认头像</div>
83
+                    <div class="fontclass">#icon-morentouxiang</div>
84
+                </li>
85
+            
86
+                <li>
87
+                    <svg class="icon" aria-hidden="true">
88
+                        <use xlink:href="#icon-accessory"></use>
89
+                    </svg>
90
+                    <div class="name">accessory</div>
91
+                    <div class="fontclass">#icon-accessory</div>
92
+                </li>
93
+            
94
+                <li>
95
+                    <svg class="icon" aria-hidden="true">
96
+                        <use xlink:href="#icon-add"></use>
97
+                    </svg>
98
+                    <div class="name">add</div>
99
+                    <div class="fontclass">#icon-add</div>
100
+                </li>
101
+            
102
+                <li>
103
+                    <svg class="icon" aria-hidden="true">
104
+                        <use xlink:href="#icon-addition_fill"></use>
105
+                    </svg>
106
+                    <div class="name">addition_fill</div>
107
+                    <div class="fontclass">#icon-addition_fill</div>
108
+                </li>
109
+            
110
+                <li>
111
+                    <svg class="icon" aria-hidden="true">
112
+                        <use xlink:href="#icon-addition"></use>
113
+                    </svg>
114
+                    <div class="name">addition</div>
115
+                    <div class="fontclass">#icon-addition</div>
116
+                </li>
117
+            
118
+                <li>
119
+                    <svg class="icon" aria-hidden="true">
120
+                        <use xlink:href="#icon-addressbook_fill"></use>
121
+                    </svg>
122
+                    <div class="name">addressbook_fill</div>
123
+                    <div class="fontclass">#icon-addressbook_fill</div>
124
+                </li>
125
+            
126
+                <li>
127
+                    <svg class="icon" aria-hidden="true">
128
+                        <use xlink:href="#icon-addressbook"></use>
129
+                    </svg>
130
+                    <div class="name">addressbook</div>
131
+                    <div class="fontclass">#icon-addressbook</div>
132
+                </li>
133
+            
134
+                <li>
135
+                    <svg class="icon" aria-hidden="true">
136
+                        <use xlink:href="#icon-browse_fill"></use>
137
+                    </svg>
138
+                    <div class="name">browse_fill</div>
139
+                    <div class="fontclass">#icon-browse_fill</div>
140
+                </li>
141
+            
142
+                <li>
143
+                    <svg class="icon" aria-hidden="true">
144
+                        <use xlink:href="#icon-brush"></use>
145
+                    </svg>
146
+                    <div class="name">brush</div>
147
+                    <div class="fontclass">#icon-brush</div>
148
+                </li>
149
+            
150
+                <li>
151
+                    <svg class="icon" aria-hidden="true">
152
+                        <use xlink:href="#icon-brush_fill"></use>
153
+                    </svg>
154
+                    <div class="name">brush_fill</div>
155
+                    <div class="fontclass">#icon-brush_fill</div>
156
+                </li>
157
+            
158
+                <li>
159
+                    <svg class="icon" aria-hidden="true">
160
+                        <use xlink:href="#icon-computer_fill"></use>
161
+                    </svg>
162
+                    <div class="name">computer_fill</div>
163
+                    <div class="fontclass">#icon-computer_fill</div>
164
+                </li>
165
+            
166
+                <li>
167
+                    <svg class="icon" aria-hidden="true">
168
+                        <use xlink:href="#icon-computer"></use>
169
+                    </svg>
170
+                    <div class="name">computer</div>
171
+                    <div class="fontclass">#icon-computer</div>
172
+                </li>
173
+            
174
+                <li>
175
+                    <svg class="icon" aria-hidden="true">
176
+                        <use xlink:href="#icon-coordinates_fill"></use>
177
+                    </svg>
178
+                    <div class="name">coordinates_fill</div>
179
+                    <div class="fontclass">#icon-coordinates_fill</div>
180
+                </li>
181
+            
182
+                <li>
183
+                    <svg class="icon" aria-hidden="true">
184
+                        <use xlink:href="#icon-coordinates"></use>
185
+                    </svg>
186
+                    <div class="name">coordinates</div>
187
+                    <div class="fontclass">#icon-coordinates</div>
188
+                </li>
189
+            
190
+                <li>
191
+                    <svg class="icon" aria-hidden="true">
192
+                        <use xlink:href="#icon-coupons_fill"></use>
193
+                    </svg>
194
+                    <div class="name">coupons_fill</div>
195
+                    <div class="fontclass">#icon-coupons_fill</div>
196
+                </li>
197
+            
198
+                <li>
199
+                    <svg class="icon" aria-hidden="true">
200
+                        <use xlink:href="#icon-customerservice_fill"></use>
201
+                    </svg>
202
+                    <div class="name">customerservice_fill</div>
203
+                    <div class="fontclass">#icon-customerservice_fill</div>
204
+                </li>
205
+            
206
+                <li>
207
+                    <svg class="icon" aria-hidden="true">
208
+                        <use xlink:href="#icon-customerservice"></use>
209
+                    </svg>
210
+                    <div class="name">customerservice</div>
211
+                    <div class="fontclass">#icon-customerservice</div>
212
+                </li>
213
+            
214
+                <li>
215
+                    <svg class="icon" aria-hidden="true">
216
+                        <use xlink:href="#icon-document"></use>
217
+                    </svg>
218
+                    <div class="name">document</div>
219
+                    <div class="fontclass">#icon-document</div>
220
+                </li>
221
+            
222
+                <li>
223
+                    <svg class="icon" aria-hidden="true">
224
+                        <use xlink:href="#icon-document_fill"></use>
225
+                    </svg>
226
+                    <div class="name">document_fill</div>
227
+                    <div class="fontclass">#icon-document_fill</div>
228
+                </li>
229
+            
230
+                <li>
231
+                    <svg class="icon" aria-hidden="true">
232
+                        <use xlink:href="#icon-dynamic_fill"></use>
233
+                    </svg>
234
+                    <div class="name">dynamic_fill</div>
235
+                    <div class="fontclass">#icon-dynamic_fill</div>
236
+                </li>
237
+            
238
+                <li>
239
+                    <svg class="icon" aria-hidden="true">
240
+                        <use xlink:href="#icon-editor"></use>
241
+                    </svg>
242
+                    <div class="name">editor</div>
243
+                    <div class="fontclass">#icon-editor</div>
244
+                </li>
245
+            
246
+                <li>
247
+                    <svg class="icon" aria-hidden="true">
248
+                        <use xlink:href="#icon-emoji"></use>
249
+                    </svg>
250
+                    <div class="name">emoji</div>
251
+                    <div class="fontclass">#icon-emoji</div>
252
+                </li>
253
+            
254
+                <li>
255
+                    <svg class="icon" aria-hidden="true">
256
+                        <use xlink:href="#icon-enter"></use>
257
+                    </svg>
258
+                    <div class="name">enter</div>
259
+                    <div class="fontclass">#icon-enter</div>
260
+                </li>
261
+            
262
+                <li>
263
+                    <svg class="icon" aria-hidden="true">
264
+                        <use xlink:href="#icon-flag_fill"></use>
265
+                    </svg>
266
+                    <div class="name">flag_fill</div>
267
+                    <div class="fontclass">#icon-flag_fill</div>
268
+                </li>
269
+            
270
+                <li>
271
+                    <svg class="icon" aria-hidden="true">
272
+                        <use xlink:href="#icon-flag"></use>
273
+                    </svg>
274
+                    <div class="name">flag</div>
275
+                    <div class="fontclass">#icon-flag</div>
276
+                </li>
277
+            
278
+                <li>
279
+                    <svg class="icon" aria-hidden="true">
280
+                        <use xlink:href="#icon-group_fill"></use>
281
+                    </svg>
282
+                    <div class="name">group_fill</div>
283
+                    <div class="fontclass">#icon-group_fill</div>
284
+                </li>
285
+            
286
+                <li>
287
+                    <svg class="icon" aria-hidden="true">
288
+                        <use xlink:href="#icon-headlines_fill"></use>
289
+                    </svg>
290
+                    <div class="name">headlines_fill</div>
291
+                    <div class="fontclass">#icon-headlines_fill</div>
292
+                </li>
293
+            
294
+                <li>
295
+                    <svg class="icon" aria-hidden="true">
296
+                        <use xlink:href="#icon-homepage_fill"></use>
297
+                    </svg>
298
+                    <div class="name">homepage_fill</div>
299
+                    <div class="fontclass">#icon-homepage_fill</div>
300
+                </li>
301
+            
302
+                <li>
303
+                    <svg class="icon" aria-hidden="true">
304
+                        <use xlink:href="#icon-homepage"></use>
305
+                    </svg>
306
+                    <div class="name">homepage</div>
307
+                    <div class="fontclass">#icon-homepage</div>
308
+                </li>
309
+            
310
+                <li>
311
+                    <svg class="icon" aria-hidden="true">
312
+                        <use xlink:href="#icon-interactive_fill"></use>
313
+                    </svg>
314
+                    <div class="name">interactive_fill</div>
315
+                    <div class="fontclass">#icon-interactive_fill</div>
316
+                </li>
317
+            
318
+                <li>
319
+                    <svg class="icon" aria-hidden="true">
320
+                        <use xlink:href="#icon-interactive"></use>
321
+                    </svg>
322
+                    <div class="name">interactive</div>
323
+                    <div class="fontclass">#icon-interactive</div>
324
+                </li>
325
+            
326
+                <li>
327
+                    <svg class="icon" aria-hidden="true">
328
+                        <use xlink:href="#icon-label"></use>
329
+                    </svg>
330
+                    <div class="name">label</div>
331
+                    <div class="fontclass">#icon-label</div>
332
+                </li>
333
+            
334
+                <li>
335
+                    <svg class="icon" aria-hidden="true">
336
+                        <use xlink:href="#icon-like_fill"></use>
337
+                    </svg>
338
+                    <div class="name">like_fill</div>
339
+                    <div class="fontclass">#icon-like_fill</div>
340
+                </li>
341
+            
342
+                <li>
343
+                    <svg class="icon" aria-hidden="true">
344
+                        <use xlink:href="#icon-like"></use>
345
+                    </svg>
346
+                    <div class="name">like</div>
347
+                    <div class="fontclass">#icon-like</div>
348
+                </li>
349
+            
350
+                <li>
351
+                    <svg class="icon" aria-hidden="true">
352
+                        <use xlink:href="#icon-lock"></use>
353
+                    </svg>
354
+                    <div class="name">lock</div>
355
+                    <div class="fontclass">#icon-lock</div>
356
+                </li>
357
+            
358
+                <li>
359
+                    <svg class="icon" aria-hidden="true">
360
+                        <use xlink:href="#icon-mail"></use>
361
+                    </svg>
362
+                    <div class="name">mail</div>
363
+                    <div class="fontclass">#icon-mail</div>
364
+                </li>
365
+            
366
+                <li>
367
+                    <svg class="icon" aria-hidden="true">
368
+                        <use xlink:href="#icon-manage"></use>
369
+                    </svg>
370
+                    <div class="name">manage</div>
371
+                    <div class="fontclass">#icon-manage</div>
372
+                </li>
373
+            
374
+                <li>
375
+                    <svg class="icon" aria-hidden="true">
376
+                        <use xlink:href="#icon-message"></use>
377
+                    </svg>
378
+                    <div class="name">message</div>
379
+                    <div class="fontclass">#icon-message</div>
380
+                </li>
381
+            
382
+                <li>
383
+                    <svg class="icon" aria-hidden="true">
384
+                        <use xlink:href="#icon-mine_fill"></use>
385
+                    </svg>
386
+                    <div class="name">mine_fill</div>
387
+                    <div class="fontclass">#icon-mine_fill</div>
388
+                </li>
389
+            
390
+                <li>
391
+                    <svg class="icon" aria-hidden="true">
392
+                        <use xlink:href="#icon-mobilephone_fill"></use>
393
+                    </svg>
394
+                    <div class="name">mobilephone_fill</div>
395
+                    <div class="fontclass">#icon-mobilephone_fill</div>
396
+                </li>
397
+            
398
+                <li>
399
+                    <svg class="icon" aria-hidden="true">
400
+                        <use xlink:href="#icon-mobilephone"></use>
401
+                    </svg>
402
+                    <div class="name">mobilephone</div>
403
+                    <div class="fontclass">#icon-mobilephone</div>
404
+                </li>
405
+            
406
+                <li>
407
+                    <svg class="icon" aria-hidden="true">
408
+                        <use xlink:href="#icon-offline_fill"></use>
409
+                    </svg>
410
+                    <div class="name">offline_fill</div>
411
+                    <div class="fontclass">#icon-offline_fill</div>
412
+                </li>
413
+            
414
+                <li>
415
+                    <svg class="icon" aria-hidden="true">
416
+                        <use xlink:href="#icon-offline"></use>
417
+                    </svg>
418
+                    <div class="name">offline</div>
419
+                    <div class="fontclass">#icon-offline</div>
420
+                </li>
421
+            
422
+                <li>
423
+                    <svg class="icon" aria-hidden="true">
424
+                        <use xlink:href="#icon-order_fill"></use>
425
+                    </svg>
426
+                    <div class="name">order_fill</div>
427
+                    <div class="fontclass">#icon-order_fill</div>
428
+                </li>
429
+            
430
+                <li>
431
+                    <svg class="icon" aria-hidden="true">
432
+                        <use xlink:href="#icon-other"></use>
433
+                    </svg>
434
+                    <div class="name">other</div>
435
+                    <div class="fontclass">#icon-other</div>
436
+                </li>
437
+            
438
+                <li>
439
+                    <svg class="icon" aria-hidden="true">
440
+                        <use xlink:href="#icon-picture_fill"></use>
441
+                    </svg>
442
+                    <div class="name">picture_fill</div>
443
+                    <div class="fontclass">#icon-picture_fill</div>
444
+                </li>
445
+            
446
+                <li>
447
+                    <svg class="icon" aria-hidden="true">
448
+                        <use xlink:href="#icon-prompt_fill"></use>
449
+                    </svg>
450
+                    <div class="name">prompt_fill</div>
451
+                    <div class="fontclass">#icon-prompt_fill</div>
452
+                </li>
453
+            
454
+                <li>
455
+                    <svg class="icon" aria-hidden="true">
456
+                        <use xlink:href="#icon-qrcode_fill"></use>
457
+                    </svg>
458
+                    <div class="name">qrcode_fill</div>
459
+                    <div class="fontclass">#icon-qrcode_fill</div>
460
+                </li>
461
+            
462
+                <li>
463
+                    <svg class="icon" aria-hidden="true">
464
+                        <use xlink:href="#icon-remind_fill"></use>
465
+                    </svg>
466
+                    <div class="name">remind_fill</div>
467
+                    <div class="fontclass">#icon-remind_fill</div>
468
+                </li>
469
+            
470
+                <li>
471
+                    <svg class="icon" aria-hidden="true">
472
+                        <use xlink:href="#icon-remind"></use>
473
+                    </svg>
474
+                    <div class="name">remind</div>
475
+                    <div class="fontclass">#icon-remind</div>
476
+                </li>
477
+            
478
+                <li>
479
+                    <svg class="icon" aria-hidden="true">
480
+                        <use xlink:href="#icon-return"></use>
481
+                    </svg>
482
+                    <div class="name">return</div>
483
+                    <div class="fontclass">#icon-return</div>
484
+                </li>
485
+            
486
+                <li>
487
+                    <svg class="icon" aria-hidden="true">
488
+                        <use xlink:href="#icon-service_fill"></use>
489
+                    </svg>
490
+                    <div class="name">service_fill</div>
491
+                    <div class="fontclass">#icon-service_fill</div>
492
+                </li>
493
+            
494
+                <li>
495
+                    <svg class="icon" aria-hidden="true">
496
+                        <use xlink:href="#icon-service"></use>
497
+                    </svg>
498
+                    <div class="name">service</div>
499
+                    <div class="fontclass">#icon-service</div>
500
+                </li>
501
+            
502
+                <li>
503
+                    <svg class="icon" aria-hidden="true">
504
+                        <use xlink:href="#icon-setup_fill"></use>
505
+                    </svg>
506
+                    <div class="name">setup_fill</div>
507
+                    <div class="fontclass">#icon-setup_fill</div>
508
+                </li>
509
+            
510
+                <li>
511
+                    <svg class="icon" aria-hidden="true">
512
+                        <use xlink:href="#icon-setup"></use>
513
+                    </svg>
514
+                    <div class="name">setup</div>
515
+                    <div class="fontclass">#icon-setup</div>
516
+                </li>
517
+            
518
+                <li>
519
+                    <svg class="icon" aria-hidden="true">
520
+                        <use xlink:href="#icon-smallscreen"></use>
521
+                    </svg>
522
+                    <div class="name">smallscreen</div>
523
+                    <div class="fontclass">#icon-smallscreen</div>
524
+                </li>
525
+            
526
+                <li>
527
+                    <svg class="icon" aria-hidden="true">
528
+                        <use xlink:href="#icon-success_fill"></use>
529
+                    </svg>
530
+                    <div class="name">success_fill</div>
531
+                    <div class="fontclass">#icon-success_fill</div>
532
+                </li>
533
+            
534
+                <li>
535
+                    <svg class="icon" aria-hidden="true">
536
+                        <use xlink:href="#icon-success"></use>
537
+                    </svg>
538
+                    <div class="name">success</div>
539
+                    <div class="fontclass">#icon-success</div>
540
+                </li>
541
+            
542
+                <li>
543
+                    <svg class="icon" aria-hidden="true">
544
+                        <use xlink:href="#icon-time_fill"></use>
545
+                    </svg>
546
+                    <div class="name">time_fill</div>
547
+                    <div class="fontclass">#icon-time_fill</div>
548
+                </li>
549
+            
550
+                <li>
551
+                    <svg class="icon" aria-hidden="true">
552
+                        <use xlink:href="#icon-trash"></use>
553
+                    </svg>
554
+                    <div class="name">trash</div>
555
+                    <div class="fontclass">#icon-trash</div>
556
+                </li>
557
+            
558
+                <li>
559
+                    <svg class="icon" aria-hidden="true">
560
+                        <use xlink:href="#icon-trash_fill"></use>
561
+                    </svg>
562
+                    <div class="name">trash_fill</div>
563
+                    <div class="fontclass">#icon-trash_fill</div>
564
+                </li>
565
+            
566
+                <li>
567
+                    <svg class="icon" aria-hidden="true">
568
+                        <use xlink:href="#icon-undo"></use>
569
+                    </svg>
570
+                    <div class="name">undo</div>
571
+                    <div class="fontclass">#icon-undo</div>
572
+                </li>
573
+            
574
+                <li>
575
+                    <svg class="icon" aria-hidden="true">
576
+                        <use xlink:href="#icon-workbench_fill"></use>
577
+                    </svg>
578
+                    <div class="name">workbench_fill</div>
579
+                    <div class="fontclass">#icon-workbench_fill</div>
580
+                </li>
581
+            
582
+                <li>
583
+                    <svg class="icon" aria-hidden="true">
584
+                        <use xlink:href="#icon-daoru"></use>
585
+                    </svg>
586
+                    <div class="name">导入</div>
587
+                    <div class="fontclass">#icon-daoru</div>
588
+                </li>
589
+            
590
+                <li>
591
+                    <svg class="icon" aria-hidden="true">
592
+                        <use xlink:href="#icon-search"></use>
593
+                    </svg>
594
+                    <div class="name">search</div>
595
+                    <div class="fontclass">#icon-search</div>
596
+                </li>
597
+            
598
+                <li>
599
+                    <svg class="icon" aria-hidden="true">
600
+                        <use xlink:href="#icon-dianhua2"></use>
601
+                    </svg>
602
+                    <div class="name">电话</div>
603
+                    <div class="fontclass">#icon-dianhua2</div>
604
+                </li>
605
+            
606
+                <li>
607
+                    <svg class="icon" aria-hidden="true">
608
+                        <use xlink:href="#icon-packup"></use>
609
+                    </svg>
610
+                    <div class="name">packup</div>
611
+                    <div class="fontclass">#icon-packup</div>
612
+                </li>
613
+            
614
+                <li>
615
+                    <svg class="icon" aria-hidden="true">
616
+                        <use xlink:href="#icon-unfold"></use>
617
+                    </svg>
618
+                    <div class="name">unfold</div>
619
+                    <div class="fontclass">#icon-unfold</div>
620
+                </li>
621
+            
622
+                <li>
623
+                    <svg class="icon" aria-hidden="true">
624
+                        <use xlink:href="#icon-wangwang"></use>
625
+                    </svg>
626
+                    <div class="name">wangwang_fill</div>
627
+                    <div class="fontclass">#icon-wangwang</div>
628
+                </li>
629
+            
630
+                <li>
631
+                    <svg class="icon" aria-hidden="true">
632
+                        <use xlink:href="#icon-yanzhengma"></use>
633
+                    </svg>
634
+                    <div class="name">验证码</div>
635
+                    <div class="fontclass">#icon-yanzhengma</div>
636
+                </li>
637
+            
638
+                <li>
639
+                    <svg class="icon" aria-hidden="true">
640
+                        <use xlink:href="#icon-baocuo-chahua"></use>
641
+                    </svg>
642
+                    <div class="name">报错-插画</div>
643
+                    <div class="fontclass">#icon-baocuo-chahua</div>
644
+                </li>
645
+            
646
+                <li>
647
+                    <svg class="icon" aria-hidden="true">
648
+                        <use xlink:href="#icon-pengyou"></use>
649
+                    </svg>
650
+                    <div class="name">朋友</div>
651
+                    <div class="fontclass">#icon-pengyou</div>
652
+                </li>
653
+            
654
+                <li>
655
+                    <svg class="icon" aria-hidden="true">
656
+                        <use xlink:href="#icon-suoyou"></use>
657
+                    </svg>
658
+                    <div class="name">所有</div>
659
+                    <div class="fontclass">#icon-suoyou</div>
660
+                </li>
661
+            
662
+                <li>
663
+                    <svg class="icon" aria-hidden="true">
664
+                        <use xlink:href="#icon-huiyuan"></use>
665
+                    </svg>
666
+                    <div class="name">会员</div>
667
+                    <div class="fontclass">#icon-huiyuan</div>
668
+                </li>
669
+            
670
+                <li>
671
+                    <svg class="icon" aria-hidden="true">
672
+                        <use xlink:href="#icon-huiyuan1"></use>
673
+                    </svg>
674
+                    <div class="name">会员</div>
675
+                    <div class="fontclass">#icon-huiyuan1</div>
676
+                </li>
677
+            
678
+                <li>
679
+                    <svg class="icon" aria-hidden="true">
680
+                        <use xlink:href="#icon-kongyemian"></use>
681
+                    </svg>
682
+                    <div class="name">空页面</div>
683
+                    <div class="fontclass">#icon-kongyemian</div>
684
+                </li>
685
+            
686
+                <li>
687
+                    <svg class="icon" aria-hidden="true">
688
+                        <use xlink:href="#icon-logout"></use>
689
+                    </svg>
690
+                    <div class="name">logout</div>
691
+                    <div class="fontclass">#icon-logout</div>
692
+                </li>
693
+            
694
+                <li>
695
+                    <svg class="icon" aria-hidden="true">
696
+                        <use xlink:href="#icon-cloudupload-o"></use>
697
+                    </svg>
698
+                    <div class="name">cloud upload-o</div>
699
+                    <div class="fontclass">#icon-cloudupload-o</div>
700
+                </li>
701
+                <li>
702
+                    <svg class="icon" aria-hidden="true">
703
+                        <use xlink:href="#icon-manbing-xuanzhong"></use>
704
+                    </svg>
705
+                    <div class="name">慢病</div>
706
+                    <div class="fontclass">#icon-manbing-xuanzhong</div>
707
+                </li>
708
+                
709
+            
710
+        </ul>
711
+
712
+
713
+        <h2 id="symbol-">symbol引用</h2>
714
+        <hr>
715
+
716
+        <p>这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇<a href="">文章</a>
717
+        这种用法其实是做了一个svg的集合,与另外两种相比具有如下特点:</p>
718
+        <ul>
719
+          <li>支持多色图标了,不再受单色限制。</li>
720
+          <li>通过一些技巧,支持像字体那样,通过<code>font-size</code>,<code>color</code>来调整样式。</li>
721
+          <li>兼容性较差,支持 ie9+,及现代浏览器。</li>
722
+          <li>浏览器渲染svg的性能一般,还不如png。</li>
723
+        </ul>
724
+        <p>使用步骤如下:</p>
725
+        <h3 id="-symbol-">第一步:引入项目下面生成的symbol代码:</h3>
726
+        <pre><code class="lang-js hljs javascript"><span class="hljs-comment">&lt;script src="./iconfont.js"&gt;&lt;/script&gt;</span></code></pre>
727
+        <h3 id="-css-">第二步:加入通用css代码(引入一次就行):</h3>
728
+        <pre><code class="lang-js hljs javascript">&lt;style type=<span class="hljs-string">"text/css"</span>&gt;
729
+.icon {
730
+   width: <span class="hljs-number">1</span>em; height: <span class="hljs-number">1</span>em;
731
+   vertical-align: <span class="hljs-number">-0.15</span>em;
732
+   fill: currentColor;
733
+   overflow: hidden;
734
+}
735
+&lt;<span class="hljs-regexp">/style&gt;</span></code></pre>
736
+        <h3 id="-">第三步:挑选相应图标并获取类名,应用于页面:</h3>
737
+        <pre><code class="lang-js hljs javascript">&lt;svg <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"icon"</span> aria-hidden=<span class="hljs-string">"true"</span>&gt;<span class="xml"><span class="hljs-tag">
738
+  &lt;<span class="hljs-name">use</span> <span class="hljs-attr">xlink:href</span>=<span class="hljs-string">"#icon-xxx"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">use</span>&gt;</span>
739
+</span>&lt;<span class="hljs-regexp">/svg&gt;
740
+        </span></code></pre>
741
+    </div>
742
+</body>
743
+</html>

+ 582 - 0
src/assets/iconfont/demo_unicode.html View File

@@ -0,0 +1,582 @@
1
+
2
+<!DOCTYPE html>
3
+<html>
4
+<head>
5
+    <meta charset="utf-8"/>
6
+    <title>IconFont</title>
7
+    <link rel="stylesheet" href="demo.css">
8
+
9
+    <style type="text/css">
10
+
11
+        @font-face {font-family: "iconfont";
12
+          src: url('iconfont.eot'); /* IE9*/
13
+          src: url('iconfont.eot#iefix') format('embedded-opentype'), /* IE6-IE8 */
14
+          url('iconfont.woff') format('woff'), /* chrome, firefox */
15
+          url('iconfont.ttf') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
16
+          url('iconfont.svg#iconfont') format('svg'); /* iOS 4.1- */
17
+        }
18
+
19
+        .iconfont {
20
+          font-family:"iconfont" !important;
21
+          font-size:16px;
22
+          font-style:normal;
23
+          -webkit-font-smoothing: antialiased;
24
+          -webkit-text-stroke-width: 0.2px;
25
+          -moz-osx-font-smoothing: grayscale;
26
+        }
27
+
28
+    </style>
29
+</head>
30
+<body>
31
+    <div class="main markdown">
32
+        <h1>IconFont 图标</h1>
33
+        <ul class="icon_lists clear">
34
+            
35
+                <li>
36
+                <i class="icon iconfont">&#xe686;</i>
37
+                    <div class="name">电话</div>
38
+                    <div class="code">&amp;#xe686;</div>
39
+                </li>
40
+            
41
+                <li>
42
+                <i class="icon iconfont">&#xe671;</i>
43
+                    <div class="name">电话</div>
44
+                    <div class="code">&amp;#xe671;</div>
45
+                </li>
46
+            
47
+                <li>
48
+                <i class="icon iconfont">&#xe61d;</i>
49
+                    <div class="name">会员</div>
50
+                    <div class="code">&amp;#xe61d;</div>
51
+                </li>
52
+            
53
+                <li>
54
+                <i class="icon iconfont">&#xe60c;</i>
55
+                    <div class="name">健康 水滴</div>
56
+                    <div class="code">&amp;#xe60c;</div>
57
+                </li>
58
+            
59
+                <li>
60
+                <i class="icon iconfont">&#xe777;</i>
61
+                    <div class="name">报错</div>
62
+                    <div class="code">&amp;#xe777;</div>
63
+                </li>
64
+            
65
+                <li>
66
+                <i class="icon iconfont">&#xe602;</i>
67
+                    <div class="name">电话</div>
68
+                    <div class="code">&amp;#xe602;</div>
69
+                </li>
70
+            
71
+                <li>
72
+                <i class="icon iconfont">&#xe8c9;</i>
73
+                    <div class="name">225默认头像</div>
74
+                    <div class="code">&amp;#xe8c9;</div>
75
+                </li>
76
+            
77
+                <li>
78
+                <i class="icon iconfont">&#xe6dd;</i>
79
+                    <div class="name">accessory</div>
80
+                    <div class="code">&amp;#xe6dd;</div>
81
+                </li>
82
+            
83
+                <li>
84
+                <i class="icon iconfont">&#xe6df;</i>
85
+                    <div class="name">add</div>
86
+                    <div class="code">&amp;#xe6df;</div>
87
+                </li>
88
+            
89
+                <li>
90
+                <i class="icon iconfont">&#xe6e1;</i>
91
+                    <div class="name">addition_fill</div>
92
+                    <div class="code">&amp;#xe6e1;</div>
93
+                </li>
94
+            
95
+                <li>
96
+                <i class="icon iconfont">&#xe6e0;</i>
97
+                    <div class="name">addition</div>
98
+                    <div class="code">&amp;#xe6e0;</div>
99
+                </li>
100
+            
101
+                <li>
102
+                <i class="icon iconfont">&#xe6e2;</i>
103
+                    <div class="name">addressbook_fill</div>
104
+                    <div class="code">&amp;#xe6e2;</div>
105
+                </li>
106
+            
107
+                <li>
108
+                <i class="icon iconfont">&#xe6e3;</i>
109
+                    <div class="name">addressbook</div>
110
+                    <div class="code">&amp;#xe6e3;</div>
111
+                </li>
112
+            
113
+                <li>
114
+                <i class="icon iconfont">&#xe6e4;</i>
115
+                    <div class="name">browse_fill</div>
116
+                    <div class="code">&amp;#xe6e4;</div>
117
+                </li>
118
+            
119
+                <li>
120
+                <i class="icon iconfont">&#xe6e5;</i>
121
+                    <div class="name">brush</div>
122
+                    <div class="code">&amp;#xe6e5;</div>
123
+                </li>
124
+            
125
+                <li>
126
+                <i class="icon iconfont">&#xe6e6;</i>
127
+                    <div class="name">brush_fill</div>
128
+                    <div class="code">&amp;#xe6e6;</div>
129
+                </li>
130
+            
131
+                <li>
132
+                <i class="icon iconfont">&#xe6eb;</i>
133
+                    <div class="name">computer_fill</div>
134
+                    <div class="code">&amp;#xe6eb;</div>
135
+                </li>
136
+            
137
+                <li>
138
+                <i class="icon iconfont">&#xe6ec;</i>
139
+                    <div class="name">computer</div>
140
+                    <div class="code">&amp;#xe6ec;</div>
141
+                </li>
142
+            
143
+                <li>
144
+                <i class="icon iconfont">&#xe6ed;</i>
145
+                    <div class="name">coordinates_fill</div>
146
+                    <div class="code">&amp;#xe6ed;</div>
147
+                </li>
148
+            
149
+                <li>
150
+                <i class="icon iconfont">&#xe6ee;</i>
151
+                    <div class="name">coordinates</div>
152
+                    <div class="code">&amp;#xe6ee;</div>
153
+                </li>
154
+            
155
+                <li>
156
+                <i class="icon iconfont">&#xe6ef;</i>
157
+                    <div class="name">coupons_fill</div>
158
+                    <div class="code">&amp;#xe6ef;</div>
159
+                </li>
160
+            
161
+                <li>
162
+                <i class="icon iconfont">&#xe6f0;</i>
163
+                    <div class="name">customerservice_fill</div>
164
+                    <div class="code">&amp;#xe6f0;</div>
165
+                </li>
166
+            
167
+                <li>
168
+                <i class="icon iconfont">&#xe6f1;</i>
169
+                    <div class="name">customerservice</div>
170
+                    <div class="code">&amp;#xe6f1;</div>
171
+                </li>
172
+            
173
+                <li>
174
+                <i class="icon iconfont">&#xe6f3;</i>
175
+                    <div class="name">document</div>
176
+                    <div class="code">&amp;#xe6f3;</div>
177
+                </li>
178
+            
179
+                <li>
180
+                <i class="icon iconfont">&#xe6f4;</i>
181
+                    <div class="name">document_fill</div>
182
+                    <div class="code">&amp;#xe6f4;</div>
183
+                </li>
184
+            
185
+                <li>
186
+                <i class="icon iconfont">&#xe6f6;</i>
187
+                    <div class="name">dynamic_fill</div>
188
+                    <div class="code">&amp;#xe6f6;</div>
189
+                </li>
190
+            
191
+                <li>
192
+                <i class="icon iconfont">&#xe6f5;</i>
193
+                    <div class="name">editor</div>
194
+                    <div class="code">&amp;#xe6f5;</div>
195
+                </li>
196
+            
197
+                <li>
198
+                <i class="icon iconfont">&#xe6f9;</i>
199
+                    <div class="name">emoji</div>
200
+                    <div class="code">&amp;#xe6f9;</div>
201
+                </li>
202
+            
203
+                <li>
204
+                <i class="icon iconfont">&#xe6f8;</i>
205
+                    <div class="name">enter</div>
206
+                    <div class="code">&amp;#xe6f8;</div>
207
+                </li>
208
+            
209
+                <li>
210
+                <i class="icon iconfont">&#xe6fb;</i>
211
+                    <div class="name">flag_fill</div>
212
+                    <div class="code">&amp;#xe6fb;</div>
213
+                </li>
214
+            
215
+                <li>
216
+                <i class="icon iconfont">&#xe6fc;</i>
217
+                    <div class="name">flag</div>
218
+                    <div class="code">&amp;#xe6fc;</div>
219
+                </li>
220
+            
221
+                <li>
222
+                <i class="icon iconfont">&#xe6ff;</i>
223
+                    <div class="name">group_fill</div>
224
+                    <div class="code">&amp;#xe6ff;</div>
225
+                </li>
226
+            
227
+                <li>
228
+                <i class="icon iconfont">&#xe700;</i>
229
+                    <div class="name">headlines_fill</div>
230
+                    <div class="code">&amp;#xe700;</div>
231
+                </li>
232
+            
233
+                <li>
234
+                <i class="icon iconfont">&#xe702;</i>
235
+                    <div class="name">homepage_fill</div>
236
+                    <div class="code">&amp;#xe702;</div>
237
+                </li>
238
+            
239
+                <li>
240
+                <i class="icon iconfont">&#xe703;</i>
241
+                    <div class="name">homepage</div>
242
+                    <div class="code">&amp;#xe703;</div>
243
+                </li>
244
+            
245
+                <li>
246
+                <i class="icon iconfont">&#xe704;</i>
247
+                    <div class="name">interactive_fill</div>
248
+                    <div class="code">&amp;#xe704;</div>
249
+                </li>
250
+            
251
+                <li>
252
+                <i class="icon iconfont">&#xe705;</i>
253
+                    <div class="name">interactive</div>
254
+                    <div class="code">&amp;#xe705;</div>
255
+                </li>
256
+            
257
+                <li>
258
+                <i class="icon iconfont">&#xe706;</i>
259
+                    <div class="name">label</div>
260
+                    <div class="code">&amp;#xe706;</div>
261
+                </li>
262
+            
263
+                <li>
264
+                <i class="icon iconfont">&#xe707;</i>
265
+                    <div class="name">like_fill</div>
266
+                    <div class="code">&amp;#xe707;</div>
267
+                </li>
268
+            
269
+                <li>
270
+                <i class="icon iconfont">&#xe708;</i>
271
+                    <div class="name">like</div>
272
+                    <div class="code">&amp;#xe708;</div>
273
+                </li>
274
+            
275
+                <li>
276
+                <i class="icon iconfont">&#xe709;</i>
277
+                    <div class="name">lock</div>
278
+                    <div class="code">&amp;#xe709;</div>
279
+                </li>
280
+            
281
+                <li>
282
+                <i class="icon iconfont">&#xe70a;</i>
283
+                    <div class="name">mail</div>
284
+                    <div class="code">&amp;#xe70a;</div>
285
+                </li>
286
+            
287
+                <li>
288
+                <i class="icon iconfont">&#xe70b;</i>
289
+                    <div class="name">manage</div>
290
+                    <div class="code">&amp;#xe70b;</div>
291
+                </li>
292
+            
293
+                <li>
294
+                <i class="icon iconfont">&#xe70c;</i>
295
+                    <div class="name">message</div>
296
+                    <div class="code">&amp;#xe70c;</div>
297
+                </li>
298
+            
299
+                <li>
300
+                <i class="icon iconfont">&#xe70e;</i>
301
+                    <div class="name">mine_fill</div>
302
+                    <div class="code">&amp;#xe70e;</div>
303
+                </li>
304
+            
305
+                <li>
306
+                <i class="icon iconfont">&#xe710;</i>
307
+                    <div class="name">mobilephone_fill</div>
308
+                    <div class="code">&amp;#xe710;</div>
309
+                </li>
310
+            
311
+                <li>
312
+                <i class="icon iconfont">&#xe70f;</i>
313
+                    <div class="name">mobilephone</div>
314
+                    <div class="code">&amp;#xe70f;</div>
315
+                </li>
316
+            
317
+                <li>
318
+                <i class="icon iconfont">&#xe712;</i>
319
+                    <div class="name">offline_fill</div>
320
+                    <div class="code">&amp;#xe712;</div>
321
+                </li>
322
+            
323
+                <li>
324
+                <i class="icon iconfont">&#xe713;</i>
325
+                    <div class="name">offline</div>
326
+                    <div class="code">&amp;#xe713;</div>
327
+                </li>
328
+            
329
+                <li>
330
+                <i class="icon iconfont">&#xe714;</i>
331
+                    <div class="name">order_fill</div>
332
+                    <div class="code">&amp;#xe714;</div>
333
+                </li>
334
+            
335
+                <li>
336
+                <i class="icon iconfont">&#xe715;</i>
337
+                    <div class="name">other</div>
338
+                    <div class="code">&amp;#xe715;</div>
339
+                </li>
340
+            
341
+                <li>
342
+                <i class="icon iconfont">&#xe716;</i>
343
+                    <div class="name">picture_fill</div>
344
+                    <div class="code">&amp;#xe716;</div>
345
+                </li>
346
+            
347
+                <li>
348
+                <i class="icon iconfont">&#xe71b;</i>
349
+                    <div class="name">prompt_fill</div>
350
+                    <div class="code">&amp;#xe71b;</div>
351
+                </li>
352
+            
353
+                <li>
354
+                <i class="icon iconfont">&#xe71c;</i>
355
+                    <div class="name">qrcode_fill</div>
356
+                    <div class="code">&amp;#xe71c;</div>
357
+                </li>
358
+            
359
+                <li>
360
+                <i class="icon iconfont">&#xe71f;</i>
361
+                    <div class="name">remind_fill</div>
362
+                    <div class="code">&amp;#xe71f;</div>
363
+                </li>
364
+            
365
+                <li>
366
+                <i class="icon iconfont">&#xe721;</i>
367
+                    <div class="name">remind</div>
368
+                    <div class="code">&amp;#xe721;</div>
369
+                </li>
370
+            
371
+                <li>
372
+                <i class="icon iconfont">&#xe720;</i>
373
+                    <div class="name">return</div>
374
+                    <div class="code">&amp;#xe720;</div>
375
+                </li>
376
+            
377
+                <li>
378
+                <i class="icon iconfont">&#xe727;</i>
379
+                    <div class="name">service_fill</div>
380
+                    <div class="code">&amp;#xe727;</div>
381
+                </li>
382
+            
383
+                <li>
384
+                <i class="icon iconfont">&#xe728;</i>
385
+                    <div class="name">service</div>
386
+                    <div class="code">&amp;#xe728;</div>
387
+                </li>
388
+            
389
+                <li>
390
+                <i class="icon iconfont">&#xe729;</i>
391
+                    <div class="name">setup_fill</div>
392
+                    <div class="code">&amp;#xe729;</div>
393
+                </li>
394
+            
395
+                <li>
396
+                <i class="icon iconfont">&#xe72a;</i>
397
+                    <div class="name">setup</div>
398
+                    <div class="code">&amp;#xe72a;</div>
399
+                </li>
400
+            
401
+                <li>
402
+                <i class="icon iconfont">&#xe72b;</i>
403
+                    <div class="name">smallscreen</div>
404
+                    <div class="code">&amp;#xe72b;</div>
405
+                </li>
406
+            
407
+                <li>
408
+                <i class="icon iconfont">&#xe72d;</i>
409
+                    <div class="name">success_fill</div>
410
+                    <div class="code">&amp;#xe72d;</div>
411
+                </li>
412
+            
413
+                <li>
414
+                <i class="icon iconfont">&#xe72e;</i>
415
+                    <div class="name">success</div>
416
+                    <div class="code">&amp;#xe72e;</div>
417
+                </li>
418
+            
419
+                <li>
420
+                <i class="icon iconfont">&#xe735;</i>
421
+                    <div class="name">time_fill</div>
422
+                    <div class="code">&amp;#xe735;</div>
423
+                </li>
424
+            
425
+                <li>
426
+                <i class="icon iconfont">&#xe738;</i>
427
+                    <div class="name">trash</div>
428
+                    <div class="code">&amp;#xe738;</div>
429
+                </li>
430
+            
431
+                <li>
432
+                <i class="icon iconfont">&#xe739;</i>
433
+                    <div class="name">trash_fill</div>
434
+                    <div class="code">&amp;#xe739;</div>
435
+                </li>
436
+            
437
+                <li>
438
+                <i class="icon iconfont">&#xe73a;</i>
439
+                    <div class="name">undo</div>
440
+                    <div class="code">&amp;#xe73a;</div>
441
+                </li>
442
+            
443
+                <li>
444
+                <i class="icon iconfont">&#xe73e;</i>
445
+                    <div class="name">workbench_fill</div>
446
+                    <div class="code">&amp;#xe73e;</div>
447
+                </li>
448
+            
449
+                <li>
450
+                <i class="icon iconfont">&#xe639;</i>
451
+                    <div class="name">导入</div>
452
+                    <div class="code">&amp;#xe639;</div>
453
+                </li>
454
+            
455
+                <li>
456
+                <i class="icon iconfont">&#xe741;</i>
457
+                    <div class="name">search</div>
458
+                    <div class="code">&amp;#xe741;</div>
459
+                </li>
460
+            
461
+                <li>
462
+                <i class="icon iconfont">&#xe6ac;</i>
463
+                    <div class="name">电话</div>
464
+                    <div class="code">&amp;#xe6ac;</div>
465
+                </li>
466
+            
467
+                <li>
468
+                <i class="icon iconfont">&#xe749;</i>
469
+                    <div class="name">packup</div>
470
+                    <div class="code">&amp;#xe749;</div>
471
+                </li>
472
+            
473
+                <li>
474
+                <i class="icon iconfont">&#xe74a;</i>
475
+                    <div class="name">unfold</div>
476
+                    <div class="code">&amp;#xe74a;</div>
477
+                </li>
478
+            
479
+                <li>
480
+                <i class="icon iconfont">&#xe74b;</i>
481
+                    <div class="name">wangwang_fill</div>
482
+                    <div class="code">&amp;#xe74b;</div>
483
+                </li>
484
+            
485
+                <li>
486
+                <i class="icon iconfont">&#xe600;</i>
487
+                    <div class="name">验证码</div>
488
+                    <div class="code">&amp;#xe600;</div>
489
+                </li>
490
+            
491
+                <li>
492
+                <i class="icon iconfont">&#xe610;</i>
493
+                    <div class="name">报错-插画</div>
494
+                    <div class="code">&amp;#xe610;</div>
495
+                </li>
496
+            
497
+                <li>
498
+                <i class="icon iconfont">&#xe643;</i>
499
+                    <div class="name">朋友</div>
500
+                    <div class="code">&amp;#xe643;</div>
501
+                </li>
502
+            
503
+                <li>
504
+                <i class="icon iconfont">&#xe644;</i>
505
+                    <div class="name">所有</div>
506
+                    <div class="code">&amp;#xe644;</div>
507
+                </li>
508
+            
509
+                <li>
510
+                <i class="icon iconfont">&#xe645;</i>
511
+                    <div class="name">会员</div>
512
+                    <div class="code">&amp;#xe645;</div>
513
+                </li>
514
+            
515
+                <li>
516
+                <i class="icon iconfont">&#xe641;</i>
517
+                    <div class="name">会员</div>
518
+                    <div class="code">&amp;#xe641;</div>
519
+                </li>
520
+            
521
+                <li>
522
+                <i class="icon iconfont">&#xe637;</i>
523
+                    <div class="name">空页面</div>
524
+                    <div class="code">&amp;#xe637;</div>
525
+                </li>
526
+            
527
+                <li>
528
+                <i class="icon iconfont">&#xe78c;</i>
529
+                    <div class="name">logout</div>
530
+                    <div class="code">&amp;#xe78c;</div>
531
+                </li>
532
+            
533
+                <li>
534
+                <i class="icon iconfont">&#xe7d9;</i>
535
+                    <div class="name">cloud upload-o</div>
536
+                    <div class="code">&amp;#xe7d9;</div>
537
+                </li>
538
+            
539
+        </ul>
540
+        <h2 id="unicode-">unicode引用</h2>
541
+        <hr>
542
+
543
+        <p>unicode是字体在网页端最原始的应用方式,特点是:</p>
544
+        <ul>
545
+        <li>兼容性最好,支持ie6+,及所有现代浏览器。</li>
546
+        <li>支持按字体的方式去动态调整图标大小,颜色等等。</li>
547
+        <li>但是因为是字体,所以不支持多色。只能使用平台里单色的图标,就算项目里有多色图标也会自动去色。</li>
548
+        </ul>
549
+        <blockquote>
550
+        <p>注意:新版iconfont支持多色图标,这些多色图标在unicode模式下将不能使用,如果有需求建议使用symbol的引用方式</p>
551
+        </blockquote>
552
+        <p>unicode使用步骤如下:</p>
553
+        <h3 id="-font-face">第一步:拷贝项目下面生成的font-face</h3>
554
+        <pre><code class="lang-js hljs javascript">@font-face {
555
+  font-family: <span class="hljs-string">'iconfont'</span>;
556
+  src: url(<span class="hljs-string">'iconfont.eot'</span>);
557
+  src: url(<span class="hljs-string">'iconfont.eot?#iefix'</span>) format(<span class="hljs-string">'embedded-opentype'</span>),
558
+  url(<span class="hljs-string">'iconfont.woff'</span>) format(<span class="hljs-string">'woff'</span>),
559
+  url(<span class="hljs-string">'iconfont.ttf'</span>) format(<span class="hljs-string">'truetype'</span>),
560
+  url(<span class="hljs-string">'iconfont.svg#iconfont'</span>) format(<span class="hljs-string">'svg'</span>);
561
+}
562
+</code></pre>
563
+        <h3 id="-iconfont-">第二步:定义使用iconfont的样式</h3>
564
+        <pre><code class="lang-js hljs javascript">.iconfont{
565
+  font-family:<span class="hljs-string">"iconfont"</span> !important;
566
+  font-size:<span class="hljs-number">16</span>px;font-style:normal;
567
+  -webkit-font-smoothing: antialiased;
568
+  -webkit-text-stroke-width: <span class="hljs-number">0.2</span>px;
569
+  -moz-osx-font-smoothing: grayscale;
570
+}
571
+</code></pre>
572
+        <h3 id="-">第三步:挑选相应图标并获取字体编码,应用于页面</h3>
573
+        <pre><code class="lang-js hljs javascript">&lt;i <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"iconfont"</span>&gt;&amp;#x33;<span class="xml"><span class="hljs-tag">&lt;/<span class="hljs-name">i</span>&gt;</span></span></code></pre>
574
+
575
+        <blockquote>
576
+        <p>"iconfont"是你项目下的font-family。可以通过编辑项目查看,默认是"iconfont"。</p>
577
+        </blockquote>
578
+    </div>
579
+
580
+
581
+</body>
582
+</html>

File diff suppressed because it is too large
+ 361 - 0
src/assets/iconfont/iconfont.css


BIN
src/assets/iconfont/iconfont.eot View File


File diff suppressed because it is too large
+ 1 - 0
src/assets/iconfont/iconfont.js


File diff suppressed because it is too large
+ 284 - 0
src/assets/iconfont/iconfont.svg


BIN
src/assets/iconfont/iconfont.ttf View File


BIN
src/assets/iconfont/iconfont.woff View File


BIN
src/assets/img/data.jpg View File


BIN
src/assets/img/jin_blog.png View File


BIN
src/assets/logo/logo.png View File


BIN
src/assets/record/1.png View File


BIN
src/assets/record/10.png View File


BIN
src/assets/record/2.png View File


BIN
src/assets/record/3.png View File


BIN
src/assets/record/4.png View File


BIN
src/assets/record/5.png View File


BIN
src/assets/record/6.png View File


BIN
src/assets/record/7.png View File


BIN
src/assets/record/8.png View File


BIN
src/assets/record/9.png View File


+ 1 - 0
src/assets/service/close.svg View File

@@ -0,0 +1 @@
1
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1538015700218" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1650" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M551.37985422 496.46554075l345.36986548-345.3698655a38.83614815 38.83614815 0 0 0-54.91431348-54.91431347L496.46554075 441.55122725 151.09567525 96.18136178a38.83614815 38.83614815 0 0 0-54.91431347 54.91431347l345.36986547 345.3698655-345.36986547 345.36986547a38.83614815 38.83614815 0 0 0 54.91431347 54.91431348l345.3698655-345.36986548 345.36986547 345.36986548a38.7196397 38.7196397 0 0 0 54.91431348 0 38.83614815 38.83614815 0 0 0 0-54.91431348L551.37985422 496.46554075z" p-id="1651"></path></svg>

BIN
src/assets/service/delete.png View File


+ 1 - 0
src/assets/service/empty.svg View File

@@ -0,0 +1 @@
1
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1538015693219" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1519" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M606.91554608 463.15641363v255.46418252a38.83614815 38.83614815 0 1 0 77.67229629 0v-255.46418252a38.83614815 38.83614815 0 1 0-77.67229629 0M373.89865718 463.15641363v255.46418252a38.83614815 38.83614815 0 1 0 77.6722963 0v-255.46418252a38.83614815 38.83614815 0 1 0-77.6722963 0" p-id="1520"></path><path d="M348.96585008 226.99379674l-10.79644919-76.89557333 307.65996563-43.26346905 10.83528533 76.93440949-307.69880177 43.22463289z m538.38552177-75.65281659l-153.79114667 21.59289836-14.40821096-102.44975881a44.31204503 44.31204503 0 0 0-17.51510281-29.39896415c-19.922944-15.02958933-50.09863111-13.43730725-66.44864949-11.18481067L327.13993482 73.20265008c-56.5454317 7.96141037-73.01195852 37.24386608-69.51670519 61.98249243l14.36937482 102.60510341-153.79114667 21.63173452a38.83614815 38.83614815 0 1 0 10.83528533 76.89557334l55.72987259-7.80606578a38.05942518 38.05942518 0 0 0-5.0875354 18.17531733v543.62840178c0 42.87510755 34.83602489 77.71113245 77.67229629 77.71113244h543.66723793a77.78880475 77.78880475 0 0 0 77.6722963-77.71113244V346.68680533a38.83614815 38.83614815 0 1 0-77.6722963 0v543.66723792l-543.70607407-0.03883614V346.68680533a38.52545897 38.52545897 0 0 0-10.91295763-26.83577837l651.78707436-91.61447348a38.83614815 38.83614815 0 0 0 33.01072593-43.8848474 38.40895052 38.40895052 0 0 0-43.88484741-33.01072593z" p-id="1521"></path></svg>

BIN
src/assets/service/ico_bank.png View File


BIN
src/assets/service/ico_dg.jpg View File


BIN
src/assets/service/ico_succes.png View File


+ 13 - 0
src/assets/service/icon_Pop-ups_close.svg View File

@@ -0,0 +1,13 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+    <!-- Generator: Sketch 48.1 (47250) - http://www.bohemiancoding.com/sketch -->
4
+    <title>元素/基础图标/icon_close</title>
5
+    <desc>Created with Sketch.</desc>
6
+    <defs></defs>
7
+    <g id="Symbols" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
8
+        <g id="元素/基础图标/icon_close">
9
+            <rect id="Rectangle-2" x="2" y="2" width="20" height="20"></rect>
10
+            <path d="M12,11 L12,3.5 C12,3.22385763 12.2238576,3 12.5,3 C12.7761424,3 13,3.22385763 13,3.5 L13,11 L20.5,11 C20.7761424,11 21,11.2238576 21,11.5 C21,11.7761424 20.7761424,12 20.5,12 L13,12 L13,19.5 C13,19.7761424 12.7761424,20 12.5,20 C12.2238576,20 12,19.7761424 12,19.5 L12,12 L4.5,12 C4.22385763,12 4,11.7761424 4,11.5 C4,11.2238576 4.22385763,11 4.5,11 L12,11 Z" id="Combined-Shape" fill="#B2B2B2" transform="translate(12.500000, 11.500000) rotate(45.000000) translate(-12.500000, -11.500000) "></path>
11
+        </g>
12
+    </g>
13
+</svg>

+ 18 - 0
src/assets/service/icon_pay_wechat.svg View File

@@ -0,0 +1,18 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+    <!-- Generator: Sketch 50.2 (55047) - http://www.bohemiancoding.com/sketch -->
4
+    <title>图标/支付/icon_pay_wechat</title>
5
+    <desc>Created with Sketch.</desc>
6
+    <defs>
7
+        <polygon id="path-1" points="2 3 21.9487163 3 21.9487163 20.6005461 2 20.6005461"></polygon>
8
+    </defs>
9
+    <g id="图标/支付/icon_pay_wechat" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
10
+        <rect id="Rectangle" x="0" y="0" width="24" height="24"></rect>
11
+        <rect id="Combined-Shape" fill="#1AAD19" x="0" y="0" width="24" height="24" rx="2"></rect>
12
+        <mask id="mask-2" fill="white">
13
+            <use xlink:href="#path-1"></use>
14
+        </mask>
15
+        <g id="Clip-2"></g>
16
+        <path d="M9.81906093,13.9295605 C9.74687586,13.9659659 9.66553255,13.9870697 9.57906974,13.9870697 C9.37906761,13.9870697 9.20528874,13.8770003 9.11382018,13.7141999 L9.07889376,13.6376917 L7.62250735,10.4416963 C7.60680752,10.4069974 7.59708046,10.367634 7.59708046,10.3294084 C7.59708046,10.1820803 7.71642189,10.062682 7.86369309,10.062682 C7.92353445,10.062682 7.97871138,10.0825912 8.02319422,10.1156973 L9.74187011,11.3393168 C9.86746872,11.4214564 10.0174703,11.4696367 10.1787917,11.4696367 C10.2749816,11.4696367 10.3668483,11.4516046 10.4522872,11.4206032 L18.5347398,7.82335207 C17.0860326,6.11582533 14.6999435,5 11.9999147,5 C7.58155128,5 4,7.98473035 4,11.6667947 C4,13.6755192 5.07759966,15.4837296 6.7641933,16.7059838 C6.8994621,16.8025718 6.98802959,16.9612766 6.98802959,17.1403456 C6.98802959,17.1995044 6.97540147,17.2537143 6.9598723,17.3102564 C6.82522922,17.8127646 6.60964103,18.6174945 6.59951578,18.6550944 C6.58273517,18.718235 6.55651191,18.7839923 6.55651191,18.8499771 C6.55651191,18.9973051 6.67585334,19.1166466 6.82335207,19.1166466 C6.88108875,19.1166466 6.92847264,19.0951446 6.97727863,19.0669305 L8.72866249,18.0558275 C8.86040451,17.9798882 8.99988268,17.9327318 9.15352482,17.9327318 C9.2352663,17.9327318 9.31427738,17.9453599 9.38856714,17.9681133 C10.2056976,18.2030987 11.0871632,18.3336462 11.9999147,18.3336462 C16.4180505,18.3336462 20,15.3486314 20,11.6667947 C20,10.551595 19.6696779,9.50129943 19.0887275,8.57739879 L9.87742332,13.8957718 L9.81906093,13.9295605 Z" id="Fill-1" fill="#FFFFFF" mask="url(#mask-2)"></path>
17
+    </g>
18
+</svg>

+ 6 - 0
src/assets/service/red_info_prompt.svg View File

@@ -0,0 +1,6 @@
1
+<svg xmlns="http://www.w3.org/2000/svg" width="60" height="60" viewBox="0 0 60 60">
2
+    <g fill="none" fill-rule="evenodd">
3
+        <path fill="#FB6161" d="M60 30.37C60 13.431 46.569 0 29.63 0 13.43 0 0 13.431 0 30.37 0 46.57 13.431 60 29.63 60 46.569 60 60 46.569 60 30.37z"/>
4
+        <path fill="#FFF" d="M29.736 16.129h.528c1.102 0 1.961.891 1.92 1.991l-.642 17.39c-.02.552-.485.997-1.04.997h-1.005a1.042 1.042 0 0 1-1.04-.997l-.642-17.39a1.913 1.913 0 0 1 1.92-1.991zM30 43.871a2.258 2.258 0 1 1 0-4.516 2.258 2.258 0 0 1 0 4.516z"/>
5
+    </g>
6
+</svg>

BIN
src/assets/service/shoplogo_init.png View File


BIN
src/assets/service/version_charge_fail.png View File


+ 112 - 0
src/components/BackToTop/index.vue View File

@@ -0,0 +1,112 @@
1
+<template>
2
+  <transition :name="transitionName">
3
+    <div class="back-to-ceiling" @click="backToTop" v-show="visible" :style="customStyle">
4
+      <svg width="16" height="16" viewBox="0 0 17 17" xmlns="http://www.w3.org/2000/svg" class="Icon Icon--backToTopArrow" aria-hidden="true" style="height: 16px; width: 16px;">
5
+        <title>回到顶部</title>
6
+        <g>
7
+          <path d="M12.036 15.59c0 .55-.453.995-.997.995H5.032c-.55 0-.997-.445-.997-.996V8.584H1.03c-1.1 0-1.36-.633-.578-1.416L7.33.29c.39-.39 1.026-.385 1.412 0l6.878 6.88c.782.78.523 1.415-.58 1.415h-3.004v7.004z" fill-rule="evenodd"></path>
8
+        </g>
9
+      </svg>
10
+    </div>
11
+  </transition>
12
+</template>
13
+
14
+<script>
15
+export default {
16
+  name: 'BackToTop',
17
+  props: {
18
+    visibilityHeight: {
19
+      type: Number,
20
+      default: 400
21
+    },
22
+    backPosition: {
23
+      type: Number,
24
+      default: 0
25
+    },
26
+    customStyle: {
27
+      type: Object,
28
+      default: function() {
29
+        return {
30
+          right: '50px',
31
+          bottom: '50px',
32
+          width: '40px',
33
+          height: '40px',
34
+          'border-radius': '4px',
35
+          'line-height': '45px',
36
+          background: '#e7eaf1'
37
+        }
38
+      }
39
+    },
40
+    transitionName: {
41
+      type: String,
42
+      default: 'fade'
43
+    }
44
+  },
45
+  data() {
46
+    return {
47
+      visible: false,
48
+      interval: null
49
+    }
50
+  },
51
+  mounted() {
52
+    window.addEventListener('scroll', this.handleScroll)
53
+  },
54
+  beforeDestroy() {
55
+    window.removeEventListener('scroll', this.handleScroll)
56
+    if (this.interval) {
57
+      clearInterval(this.interval)
58
+    }
59
+  },
60
+  methods: {
61
+    handleScroll() {
62
+      this.visible = window.pageYOffset > this.visibilityHeight
63
+    },
64
+    backToTop() {
65
+      const start = window.pageYOffset
66
+      let i = 0
67
+      this.interval = setInterval(() => {
68
+        const next = Math.floor(this.easeInOutQuad(10 * i, start, -start, 500))
69
+        if (next <= this.backPosition) {
70
+          window.scrollTo(0, this.backPosition)
71
+          clearInterval(this.interval)
72
+        } else {
73
+          window.scrollTo(0, next)
74
+        }
75
+        i++
76
+      }, 16.7)
77
+    },
78
+    easeInOutQuad(t, b, c, d) {
79
+      if ((t /= d / 2) < 1) return c / 2 * t * t + b
80
+      return -c / 2 * (--t * (t - 2) - 1) + b
81
+    }
82
+  }
83
+}
84
+</script>
85
+
86
+<style scoped>
87
+  .back-to-ceiling {
88
+    position: fixed;
89
+    display: inline-block;
90
+    text-align: center;
91
+    cursor: pointer;
92
+  }
93
+
94
+  .back-to-ceiling:hover {
95
+    background: #d5dbe7;
96
+  }
97
+
98
+  .fade-enter-active,
99
+  .fade-leave-active {
100
+    transition: opacity .5s;
101
+  }
102
+
103
+  .fade-enter,
104
+  .fade-leave-to {
105
+    opacity: 0
106
+  }
107
+
108
+  .back-to-ceiling .Icon {
109
+    fill: #9aaabf;
110
+    background: none;
111
+  }
112
+</style>

+ 54 - 0
src/components/Breadcrumb/index.vue View File

@@ -0,0 +1,54 @@
1
+<template>
2
+  <el-breadcrumb class="app-breadcrumb" separator="/">
3
+    <transition-group name="breadcrumb">
4
+      <el-breadcrumb-item v-for="(item,index)  in levelList" :key="item.path" v-if='item.meta.title'>
5
+        <span v-if='item.redirect==="noredirect"||index==levelList.length-1' class="no-redirect">{{generateTitle(item.meta.title)}}</span>
6
+        <router-link v-else :to="item.redirect||item.path">{{generateTitle(item.meta.title)}}</router-link>
7
+      </el-breadcrumb-item>
8
+    </transition-group>
9
+  </el-breadcrumb>
10
+</template>
11
+
12
+<script>
13
+import { generateTitle } from '@/utils/i18n'
14
+
15
+export default {
16
+  created() {
17
+    this.getBreadcrumb()
18
+  },
19
+  data() {
20
+    return {
21
+      levelList: null
22
+    }
23
+  },
24
+  watch: {
25
+    $route() {
26
+      this.getBreadcrumb()
27
+    }
28
+  },
29
+  methods: {
30
+    generateTitle,
31
+    getBreadcrumb() {
32
+      let matched = this.$route.matched.filter(item => item.name)
33
+      const first = matched[0]
34
+      if (first && first.name !== 'dashboard') {
35
+        matched = [{ path: '/dashboard', meta: { title: 'dashboard' }}].concat(matched)
36
+      }
37
+      this.levelList = matched
38
+    }
39
+  }
40
+}
41
+</script>
42
+
43
+<style rel="stylesheet/scss" lang="scss" scoped>
44
+  .app-breadcrumb.el-breadcrumb {
45
+    display: inline-block;
46
+    font-size: 14px;
47
+    line-height: 50px;
48
+    margin-left: 10px;
49
+    .no-redirect {
50
+      color: #97a8be;
51
+      cursor: text;
52
+    }
53
+  }
54
+</style>

+ 152 - 0
src/components/Charts/keyboard.vue View File

@@ -0,0 +1,152 @@
1
+<template>
2
+  <div :class="className" :id="id" :style="{height:height,width:width}"></div>
3
+</template>
4
+
5
+<script>
6
+import echarts from 'echarts'
7
+import resize from './mixins/resize'
8
+
9
+export default {
10
+  mixins: [resize],
11
+  props: {
12
+    className: {
13
+      type: String,
14
+      default: 'chart'
15
+    },
16
+    id: {
17
+      type: String,
18
+      default: 'chart'
19
+    },
20
+    width: {
21
+      type: String,
22
+      default: '200px'
23
+    },
24
+    height: {
25
+      type: String,
26
+      default: '200px'
27
+    }
28
+  },
29
+  data() {
30
+    return {
31
+      chart: null
32
+    }
33
+  },
34
+  mounted() {
35
+    this.initChart()
36
+  },
37
+  beforeDestroy() {
38
+    if (!this.chart) {
39
+      return
40
+    }
41
+    this.chart.dispose()
42
+    this.chart = null
43
+  },
44
+  methods: {
45
+    initChart() {
46
+      this.chart = echarts.init(document.getElementById(this.id))
47
+
48
+      const xAxisData = []
49
+      const data = []
50
+      const data2 = []
51
+      for (let i = 0; i < 50; i++) {
52
+        xAxisData.push(i)
53
+        data.push((Math.sin(i / 5) * (i / 5 - 10) + i / 6) * 5)
54
+        data2.push((Math.sin(i / 5) * (i / 5 + 10) + i / 6) * 3)
55
+      }
56
+      this.chart.setOption(
57
+        {
58
+          backgroundColor: '#08263a',
59
+          xAxis: [{
60
+            show: false,
61
+            data: xAxisData
62
+          }, {
63
+            show: false,
64
+            data: xAxisData
65
+          }],
66
+          visualMap: {
67
+            show: false,
68
+            min: 0,
69
+            max: 50,
70
+            dimension: 0,
71
+            inRange: {
72
+              color: ['#4a657a', '#308e92', '#b1cfa5', '#f5d69f', '#f5898b', '#ef5055']
73
+            }
74
+          },
75
+          yAxis: {
76
+            axisLine: {
77
+              show: false
78
+            },
79
+            axisLabel: {
80
+              textStyle: {
81
+                color: '#4a657a'
82
+              }
83
+            },
84
+            splitLine: {
85
+              show: true,
86
+              lineStyle: {
87
+                color: '#08263f'
88
+              }
89
+            },
90
+            axisTick: {
91
+              show: false
92
+            }
93
+          },
94
+          series: [{
95
+            name: 'back',
96
+            type: 'bar',
97
+            data: data2,
98
+            z: 1,
99
+            itemStyle: {
100
+              normal: {
101
+                opacity: 0.4,
102
+                barBorderRadius: 5,
103
+                shadowBlur: 3,
104
+                shadowColor: '#111'
105
+              }
106
+            }
107
+          }, {
108
+            name: 'Simulate Shadow',
109
+            type: 'line',
110
+            data,
111
+            z: 2,
112
+            showSymbol: false,
113
+            animationDelay: 0,
114
+            animationEasing: 'linear',
115
+            animationDuration: 1200,
116
+            lineStyle: {
117
+              normal: {
118
+                color: 'transparent'
119
+              }
120
+            },
121
+            areaStyle: {
122
+              normal: {
123
+                color: '#08263a',
124
+                shadowBlur: 50,
125
+                shadowColor: '#000'
126
+              }
127
+            }
128
+          }, {
129
+            name: 'front',
130
+            type: 'bar',
131
+            data,
132
+            xAxisIndex: 1,
133
+            z: 3,
134
+            itemStyle: {
135
+              normal: {
136
+                barBorderRadius: 5
137
+              }
138
+            }
139
+          }],
140
+          animationEasing: 'elasticOut',
141
+          animationEasingUpdate: 'elasticOut',
142
+          animationDelay(idx) {
143
+            return idx * 20
144
+          },
145
+          animationDelayUpdate(idx) {
146
+            return idx * 20
147
+          }
148
+        })
149
+    }
150
+  }
151
+}
152
+</script>

+ 227 - 0
src/components/Charts/lineMarker.vue View File

@@ -0,0 +1,227 @@
1
+<template>
2
+  <div :class="className" :id="id" :style="{height:height,width:width}"></div>
3
+</template>
4
+
5
+<script>
6
+import echarts from 'echarts'
7
+import resize from './mixins/resize'
8
+
9
+export default {
10
+  mixins: [resize],
11
+  props: {
12
+    className: {
13
+      type: String,
14
+      default: 'chart'
15
+    },
16
+    id: {
17
+      type: String,
18
+      default: 'chart'
19
+    },
20
+    width: {
21
+      type: String,
22
+      default: '200px'
23
+    },
24
+    height: {
25
+      type: String,
26
+      default: '200px'
27
+    }
28
+  },
29
+  data() {
30
+    return {
31
+      chart: null
32
+    }
33
+  },
34
+  mounted() {
35
+    this.initChart()
36
+  },
37
+  beforeDestroy() {
38
+    if (!this.chart) {
39
+      return
40
+    }
41
+    this.chart.dispose()
42
+    this.chart = null
43
+  },
44
+  methods: {
45
+    initChart() {
46
+      this.chart = echarts.init(document.getElementById(this.id))
47
+
48
+      this.chart.setOption({
49
+        backgroundColor: '#394056',
50
+        title: {
51
+          top: 20,
52
+          text: 'Requests',
53
+          textStyle: {
54
+            fontWeight: 'normal',
55
+            fontSize: 16,
56
+            color: '#F1F1F3'
57
+          },
58
+          left: '1%'
59
+        },
60
+        tooltip: {
61
+          trigger: 'axis',
62
+          axisPointer: {
63
+            lineStyle: {
64
+              color: '#57617B'
65
+            }
66
+          }
67
+        },
68
+        legend: {
69
+          top: 20,
70
+          icon: 'rect',
71
+          itemWidth: 14,
72
+          itemHeight: 5,
73
+          itemGap: 13,
74
+          data: ['CMCC', 'CTCC', 'CUCC'],
75
+          right: '4%',
76
+          textStyle: {
77
+            fontSize: 12,
78
+            color: '#F1F1F3'
79
+          }
80
+        },
81
+        grid: {
82
+          top: 100,
83
+          left: '3%',
84
+          right: '4%',
85
+          bottom: '2%',
86
+          containLabel: true
87
+        },
88
+        xAxis: [{
89
+          type: 'category',
90
+          boundaryGap: false,
91
+          axisLine: {
92
+            lineStyle: {
93
+              color: '#57617B'
94
+            }
95
+          },
96
+          data: ['13:00', '13:05', '13:10', '13:15', '13:20', '13:25', '13:30', '13:35', '13:40', '13:45', '13:50', '13:55']
97
+        }],
98
+        yAxis: [{
99
+          type: 'value',
100
+          name: '(%)',
101
+          axisTick: {
102
+            show: false
103
+          },
104
+          axisLine: {
105
+            lineStyle: {
106
+              color: '#57617B'
107
+            }
108
+          },
109
+          axisLabel: {
110
+            margin: 10,
111
+            textStyle: {
112
+              fontSize: 14
113
+            }
114
+          },
115
+          splitLine: {
116
+            lineStyle: {
117
+              color: '#57617B'
118
+            }
119
+          }
120
+        }],
121
+        series: [{
122
+          name: 'CMCC',
123
+          type: 'line',
124
+          smooth: true,
125
+          symbol: 'circle',
126
+          symbolSize: 5,
127
+          showSymbol: false,
128
+          lineStyle: {
129
+            normal: {
130
+              width: 1
131
+            }
132
+          },
133
+          areaStyle: {
134
+            normal: {
135
+              color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
136
+                offset: 0,
137
+                color: 'rgba(137, 189, 27, 0.3)'
138
+              }, {
139
+                offset: 0.8,
140
+                color: 'rgba(137, 189, 27, 0)'
141
+              }], false),
142
+              shadowColor: 'rgba(0, 0, 0, 0.1)',
143
+              shadowBlur: 10
144
+            }
145
+          },
146
+          itemStyle: {
147
+            normal: {
148
+              color: 'rgb(137,189,27)',
149
+              borderColor: 'rgba(137,189,2,0.27)',
150
+              borderWidth: 12
151
+
152
+            }
153
+          },
154
+          data: [220, 182, 191, 134, 150, 120, 110, 125, 145, 122, 165, 122]
155
+        }, {
156
+          name: 'CTCC',
157
+          type: 'line',
158
+          smooth: true,
159
+          symbol: 'circle',
160
+          symbolSize: 5,
161
+          showSymbol: false,
162
+          lineStyle: {
163
+            normal: {
164
+              width: 1
165
+            }
166
+          },
167
+          areaStyle: {
168
+            normal: {
169
+              color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
170
+                offset: 0,
171
+                color: 'rgba(0, 136, 212, 0.3)'
172
+              }, {
173
+                offset: 0.8,
174
+                color: 'rgba(0, 136, 212, 0)'
175
+              }], false),
176
+              shadowColor: 'rgba(0, 0, 0, 0.1)',
177
+              shadowBlur: 10
178
+            }
179
+          },
180
+          itemStyle: {
181
+            normal: {
182
+              color: 'rgb(0,136,212)',
183
+              borderColor: 'rgba(0,136,212,0.2)',
184
+              borderWidth: 12
185
+
186
+            }
187
+          },
188
+          data: [120, 110, 125, 145, 122, 165, 122, 220, 182, 191, 134, 150]
189
+        }, {
190
+          name: 'CUCC',
191
+          type: 'line',
192
+          smooth: true,
193
+          symbol: 'circle',
194
+          symbolSize: 5,
195
+          showSymbol: false,
196
+          lineStyle: {
197
+            normal: {
198
+              width: 1
199
+            }
200
+          },
201
+          areaStyle: {
202
+            normal: {
203
+              color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
204
+                offset: 0,
205
+                color: 'rgba(219, 50, 51, 0.3)'
206
+              }, {
207
+                offset: 0.8,
208
+                color: 'rgba(219, 50, 51, 0)'
209
+              }], false),
210
+              shadowColor: 'rgba(0, 0, 0, 0.1)',
211
+              shadowBlur: 10
212
+            }
213
+          },
214
+          itemStyle: {
215
+            normal: {
216
+              color: 'rgb(219,50,51)',
217
+              borderColor: 'rgba(219,50,51,0.2)',
218
+              borderWidth: 12
219
+            }
220
+          },
221
+          data: [220, 182, 125, 145, 122, 191, 134, 150, 120, 110, 165, 122]
222
+        }]
223
+      })
224
+    }
225
+  }
226
+}
227
+</script>

+ 269 - 0
src/components/Charts/mixChart.vue View File

@@ -0,0 +1,269 @@
1
+<template>
2
+  <div :class="className" :id="id" :style="{height:height,width:width}"></div>
3
+</template>
4
+
5
+<script>
6
+import echarts from 'echarts'
7
+import resize from './mixins/resize'
8
+
9
+export default {
10
+  mixins: [resize],
11
+  props: {
12
+    className: {
13
+      type: String,
14
+      default: 'chart'
15
+    },
16
+    id: {
17
+      type: String,
18
+      default: 'chart'
19
+    },
20
+    width: {
21
+      type: String,
22
+      default: '200px'
23
+    },
24
+    height: {
25
+      type: String,
26
+      default: '200px'
27
+    }
28
+  },
29
+  data() {
30
+    return {
31
+      chart: null
32
+    }
33
+  },
34
+  mounted() {
35
+    this.initChart()
36
+  },
37
+  beforeDestroy() {
38
+    if (!this.chart) {
39
+      return
40
+    }
41
+    this.chart.dispose()
42
+    this.chart = null
43
+  },
44
+  methods: {
45
+    initChart() {
46
+      this.chart = echarts.init(document.getElementById(this.id))
47
+      const xData = (function() {
48
+        const data = []
49
+        for (let i = 1; i < 13; i++) {
50
+          data.push(i + 'month')
51
+        }
52
+        return data
53
+      }())
54
+      this.chart.setOption({
55
+        backgroundColor: '#344b58',
56
+        title: {
57
+          text: 'statistics',
58
+          x: '20',
59
+          top: '20',
60
+          textStyle: {
61
+            color: '#fff',
62
+            fontSize: '22'
63
+          },
64
+          subtextStyle: {
65
+            color: '#90979c',
66
+            fontSize: '16'
67
+          }
68
+        },
69
+        tooltip: {
70
+          trigger: 'axis',
71
+          axisPointer: {
72
+            textStyle: {
73
+              color: '#fff'
74
+            }
75
+          }
76
+        },
77
+        grid: {
78
+          borderWidth: 0,
79
+          top: 110,
80
+          bottom: 95,
81
+          textStyle: {
82
+            color: '#fff'
83
+          }
84
+        },
85
+        legend: {
86
+          x: '5%',
87
+          top: '10%',
88
+          textStyle: {
89
+            color: '#90979c'
90
+          },
91
+          data: ['female', 'male', 'average']
92
+        },
93
+        calculable: true,
94
+        xAxis: [{
95
+          type: 'category',
96
+          axisLine: {
97
+            lineStyle: {
98
+              color: '#90979c'
99
+            }
100
+          },
101
+          splitLine: {
102
+            show: false
103
+          },
104
+          axisTick: {
105
+            show: false
106
+          },
107
+          splitArea: {
108
+            show: false
109
+          },
110
+          axisLabel: {
111
+            interval: 0
112
+
113
+          },
114
+          data: xData
115
+        }],
116
+        yAxis: [{
117
+          type: 'value',
118
+          splitLine: {
119
+            show: false
120
+          },
121
+          axisLine: {
122
+            lineStyle: {
123
+              color: '#90979c'
124
+            }
125
+          },
126
+          axisTick: {
127
+            show: false
128
+          },
129
+          axisLabel: {
130
+            interval: 0
131
+          },
132
+          splitArea: {
133
+            show: false
134
+          }
135
+        }],
136
+        dataZoom: [{
137
+          show: true,
138
+          height: 30,
139
+          xAxisIndex: [
140
+            0
141
+          ],
142
+          bottom: 30,
143
+          start: 10,
144
+          end: 80,
145
+          handleIcon: 'path://M306.1,413c0,2.2-1.8,4-4,4h-59.8c-2.2,0-4-1.8-4-4V200.8c0-2.2,1.8-4,4-4h59.8c2.2,0,4,1.8,4,4V413z',
146
+          handleSize: '110%',
147
+          handleStyle: {
148
+            color: '#d3dee5'
149
+
150
+          },
151
+          textStyle: {
152
+            color: '#fff' },
153
+          borderColor: '#90979c'
154
+
155
+        }, {
156
+          type: 'inside',
157
+          show: true,
158
+          height: 15,
159
+          start: 1,
160
+          end: 35
161
+        }],
162
+        series: [{
163
+          name: 'female',
164
+          type: 'bar',
165
+          stack: 'total',
166
+          barMaxWidth: 35,
167
+          barGap: '10%',
168
+          itemStyle: {
169
+            normal: {
170
+              color: 'rgba(255,144,128,1)',
171
+              label: {
172
+                show: true,
173
+                textStyle: {
174
+                  color: '#fff'
175
+                },
176
+                position: 'insideTop',
177
+                formatter(p) {
178
+                  return p.value > 0 ? p.value : ''
179
+                }
180
+              }
181
+            }
182
+          },
183
+          data: [
184
+            709,
185
+            1917,
186
+            2455,
187
+            2610,
188
+            1719,
189
+            1433,
190
+            1544,
191
+            3285,
192
+            5208,
193
+            3372,
194
+            2484,
195
+            4078
196
+          ]
197
+        },
198
+
199
+        {
200
+          name: 'male',
201
+          type: 'bar',
202
+          stack: 'total',
203
+          itemStyle: {
204
+            normal: {
205
+              color: 'rgba(0,191,183,1)',
206
+              barBorderRadius: 0,
207
+              label: {
208
+                show: true,
209
+                position: 'top',
210
+                formatter(p) {
211
+                  return p.value > 0 ? p.value : ''
212
+                }
213
+              }
214
+            }
215
+          },
216
+          data: [
217
+            327,
218
+            1776,
219
+            507,
220
+            1200,
221
+            800,
222
+            482,
223
+            204,
224
+            1390,
225
+            1001,
226
+            951,
227
+            381,
228
+            220
229
+          ]
230
+        }, {
231
+          name: 'average',
232
+          type: 'line',
233
+          stack: 'total',
234
+          symbolSize: 10,
235
+          symbol: 'circle',
236
+          itemStyle: {
237
+            normal: {
238
+              color: 'rgba(252,230,48,1)',
239
+              barBorderRadius: 0,
240
+              label: {
241
+                show: true,
242
+                position: 'top',
243
+                formatter(p) {
244
+                  return p.value > 0 ? p.value : ''
245
+                }
246
+              }
247
+            }
248
+          },
249
+          data: [
250
+            1036,
251
+            3693,
252
+            2962,
253
+            3810,
254
+            2519,
255
+            1915,
256
+            1748,
257
+            4675,
258
+            6209,
259
+            4323,
260
+            2865,
261
+            4298
262
+          ]
263
+        }
264
+        ]
265
+      })
266
+    }
267
+  }
268
+}
269
+</script>

+ 15 - 0
src/components/Charts/mixins/resize.js View File

@@ -0,0 +1,15 @@
1
+import { debounce } from '@/utils'
2
+
3
+export default {
4
+  mounted() {
5
+    this.__resizeHanlder = debounce(() => {
6
+      if (this.chart) {
7
+        this.chart.resize()
8
+      }
9
+    }, 100)
10
+    window.addEventListener('resize', this.__resizeHanlder)
11
+  },
12
+  beforeDestroy() {
13
+    window.removeEventListener('resize', this.__resizeHanlder)
14
+  }
15
+}

+ 0 - 0
src/components/DndList/index.vue View File


Some files were not shown because too many files changed in this diff