yq1 5 months ago
commit
5cec0d29ec
100 changed files with 17664 additions and 0 deletions
  1. 4 0
      .env.development
  2. 2 0
      .env.production
  3. 21 0
      .gitignore
  4. 86 0
      README.md
  5. 5 0
      babel.config.js
  6. 37 0
      config/index.js
  7. 13153 0
      package-lock.json
  8. 51 0
      package.json
  9. BIN
      public/favicon.ico
  10. 82 0
      public/index.html
  11. 28 0
      src/App.vue
  12. 8 0
      src/api/employee.js
  13. 396 0
      src/api/index.js
  14. BIN
      src/assets/font/webfont.eot
  15. 66 0
      src/assets/font/webfont.svg
  16. BIN
      src/assets/font/webfont.ttf
  17. BIN
      src/assets/font/webfont.woff
  18. BIN
      src/assets/font/webfont.woff2
  19. 16 0
      src/assets/font/wenfont.css
  20. 1 0
      src/assets/icon/analysis.svg
  21. 1 0
      src/assets/icon/app.svg
  22. 1 0
      src/assets/icon/approval.svg
  23. 1 0
      src/assets/icon/circle.svg
  24. 1 0
      src/assets/icon/clear.svg
  25. 1 0
      src/assets/icon/count.svg
  26. 1 0
      src/assets/icon/crying.svg
  27. 1 0
      src/assets/icon/daiban.svg
  28. 1 0
      src/assets/icon/deal.svg
  29. 1 0
      src/assets/icon/dynamic.svg
  30. 1 0
      src/assets/icon/email.svg
  31. 1 0
      src/assets/icon/favorite.svg
  32. 1 0
      src/assets/icon/feedback.svg
  33. 1 0
      src/assets/icon/finance.svg
  34. 1 0
      src/assets/icon/flag.svg
  35. 1 0
      src/assets/icon/friend.svg
  36. 1 0
      src/assets/icon/github.svg
  37. 1 0
      src/assets/icon/github2.svg
  38. 1 0
      src/assets/icon/group.svg
  39. 1 0
      src/assets/icon/herd.svg
  40. 1 0
      src/assets/icon/horn.svg
  41. 1 0
      src/assets/icon/laugh.svg
  42. 1 0
      src/assets/icon/money.svg
  43. 1 0
      src/assets/icon/news.svg
  44. 1 0
      src/assets/icon/nodejs.svg
  45. 1 0
      src/assets/icon/operating.svg
  46. 1 0
      src/assets/icon/order.svg
  47. 1 0
      src/assets/icon/react.svg
  48. 1 0
      src/assets/icon/reduction.svg
  49. 1 0
      src/assets/icon/refund.svg
  50. 1 0
      src/assets/icon/refuse.svg
  51. 1 0
      src/assets/icon/registration.svg
  52. 1 0
      src/assets/icon/sales.svg
  53. 1 0
      src/assets/icon/screen.svg
  54. 1 0
      src/assets/icon/shelves.svg
  55. 1 0
      src/assets/icon/ship.svg
  56. 1 0
      src/assets/icon/sort.svg
  57. 1 0
      src/assets/icon/u.svg
  58. 1 0
      src/assets/icon/views.svg
  59. 1 0
      src/assets/icon/visitors.svg
  60. 1 0
      src/assets/icon/vue.svg
  61. 1 0
      src/assets/icon/zhuye.svg
  62. 1 0
      src/assets/icon/拒绝.svg
  63. BIN
      src/assets/image/app.jpg
  64. BIN
      src/assets/image/login.jpg
  65. BIN
      src/assets/image/pdf.png
  66. BIN
      src/assets/image/react.jpg
  67. BIN
      src/assets/image/uni.png
  68. BIN
      src/assets/image/vue.png
  69. BIN
      src/assets/image/word.png
  70. BIN
      src/assets/logo.png
  71. 97 0
      src/components/Breadcrumb/Breadcrumb.vue
  72. 80 0
      src/components/Breadcrumb/Breadcrumb2.vue
  73. 156 0
      src/components/Dropdown/drop.vue
  74. 66 0
      src/components/Dropdown/empy.vue
  75. 175 0
      src/components/Dropdown/index.vue
  76. 141 0
      src/components/Dropdown/matter.vue
  77. 115 0
      src/components/Dropdown/newsBox.vue
  78. 268 0
      src/components/Editor/index.vue
  79. 387 0
      src/components/Headers/Headers.vue
  80. 97 0
      src/components/Home/InformationList.vue
  81. 145 0
      src/components/Index/colleague.vue
  82. 150 0
      src/components/Index/dynamicBox.vue
  83. 135 0
      src/components/Index/fast.vue
  84. 120 0
      src/components/Index/maps.vue
  85. 145 0
      src/components/Index/project.vue
  86. 31 0
      src/components/Sidebar/Item.vue
  87. 113 0
      src/components/Sidebar/SidebarItem.vue
  88. 91 0
      src/components/Sidebar/index.vue
  89. 72 0
      src/components/TageView/ScrollPane.vue
  90. 206 0
      src/components/TageView/TagsView.vue
  91. 104 0
      src/components/Tinymce/components/editorImage.vue
  92. 194 0
      src/components/Tinymce/index.vue
  93. 7 0
      src/components/Tinymce/plugins.js
  94. 6 0
      src/components/Tinymce/toolbar.js
  95. 81 0
      src/components/analyze/cards.vue
  96. 81 0
      src/components/analyze/client.vue
  97. 180 0
      src/components/analyze/map.vue
  98. 125 0
      src/components/analyze/maps.vue
  99. 98 0
      src/components/analyze/monitorcar.vue
  100. 0 0
      src/components/analyze/pay.vue

+ 4 - 0
.env.development View File

@@ -0,0 +1,4 @@
1
+## base API 开发环境
2
+VUE_APP_BASE_API = 'http://127.0.0.1:9788'
3
+# NODE_ENV = 'development'
4
+# BASE_URL = "http://localhost:8080/admin-vue/"

+ 2 - 0
.env.production View File

@@ -0,0 +1,2 @@
1
+# 上线环境
2
+VUE_APP_BASE_API = 'http://localhost:8080/admin-vue/'

+ 21 - 0
.gitignore View File

@@ -0,0 +1,21 @@
1
+.DS_Store
2
+node_modules
3
+/dist
4
+
5
+# local env files
6
+.env.local
7
+.env.*.local
8
+
9
+# Log files
10
+npm-debug.log*
11
+yarn-debug.log*
12
+yarn-error.log*
13
+
14
+# Editor directories and files
15
+.idea
16
+.vscode
17
+*.suo
18
+*.ntvs*
19
+*.njsproj
20
+*.sln
21
+*.sw?

+ 86 - 0
README.md View File

@@ -0,0 +1,86 @@
1
+# power
2
+vue后台管理系统模板
3
+见文章: https://juejin.im/post/5e670edde51d4527110a9b40
4
+## 预览地址: 
5
+http://cgq666.gitee.io/admin-vue
6
+## Project setup
7
+```
8
+yarn install
9
+```
10
+
11
+### Compiles and hot-reloads for development
12
+```
13
+yarn run serve
14
+```
15
+
16
+### Compiles and minifies for production
17
+```
18
+yarn run build
19
+```
20
+
21
+### Run your tests
22
+```
23
+yarn run test
24
+```
25
+
26
+### Lints and fixes files
27
+```
28
+yarn run lint
29
+```
30
+## Excel 导出
31
+```javascript
32
+      import('@/vendor/Export2Excel').then(excel => {
33
+        const tHeader = [  // Excel表头
34
+           '姓名',
35
+           '电话'
36
+        ]
37
+        const dataVal = [  // 对应的数据数组的字段名
38
+          'username',
39
+          'phone'
40
+        ]
41
+        excel.export_json_to_excel2(tHeader, '这里是需要导入的数据', dataVal, '导出后的文件名称')
42
+```
43
+## SVG
44
+### 安装
45
+```bash
46
+npm i -D vue-svg-loader vue-template-compiler
47
+```
48
+### 修改配置
49
+```javascript
50
+// vue.config.js
51
+module.exports = {
52
+  chainWebpack: (config) => {
53
+    const svgRule = config.module.rule('svg');
54
+ 
55
+    svgRule.uses.clear();
56
+ 
57
+    svgRule
58
+      .use('babel-loader')
59
+      .loader('babel-loader')
60
+      .end()
61
+      .use('vue-svg-loader')
62
+      .loader('vue-svg-loader');
63
+  },
64
+}
65
+```
66
+### 使用
67
+```javascript
68
+<script>
69
+import daiban from '@/assets/icon/daiban.svg'
70
+export default {
71
+    components:{
72
+        daiban
73
+    }
74
+}
75
+</script>
76
+```
77
+### 修该颜色
78
+```css
79
+// 删除SVG文件中的 fill 
80
+.index-head-centent-right-list-icon-is{
81
+    color: #F515EA !important;
82
+    width: 20px;
83
+    height: 22px;
84
+    fill: currentColor;   //重点
85
+}
86
+```

+ 5 - 0
babel.config.js View File

@@ -0,0 +1,5 @@
1
+module.exports = {
2
+  presets: [
3
+    '@vue/cli-plugin-babel/preset'
4
+  ]
5
+}

+ 37 - 0
config/index.js View File

@@ -0,0 +1,37 @@
1
+
2
+const path = require('path')
3
+
4
+module.exports ={
5
+  // transpileDependencies: true,
6
+  // lintOnSave:false,
7
+  // devServer:{
8
+  //   proxy:{
9
+  //    "/api":{
10
+  //      target:"http://xx.com/admin",//代理到的服务器地址
11
+  //      ws:false,//是否对websocket启动代理
12
+  //      changeOrigin:true,//用于控制请求头中的值
13
+  //      changeOrigin: true,//设置true 代表跨域访问
14
+  //      secure: false,  // 如果是https接口,需要配置这个参数
15
+  //      pathRewrite:{
16
+  //       '^/api': '/'
17
+  //      }
18
+  //    }
19
+  //   }
20
+  // }
21
+  dev: {
22
+    // Paths
23
+    assetsSubDirectory: 'static',
24
+    assetsPublicPath: '/',
25
+    proxyTable: {
26
+      '/api': {
27
+        target: 'http://localhost:9788',//设置你调用的接口域名和端口号 别忘了加http 正式
28
+        // target: 'http://hf.szjkhd.com',//设置你调用的接口域名和端口号 别忘了加http 测试
29
+        changeOrigin: true,//设置true 代表跨域访问
30
+        secure: false,  // 如果是https接口,需要配置这个参数
31
+        pathRewrite: {
32
+          '^/api': '/'//这里理解成用‘/api’代替target里面的地址,后面组件中我们掉接口时直接用api代替 比如我要调用'http://40.00.100.100:3002/user/add',直接写‘/api/user/add’即可
33
+        }
34
+      }
35
+    }
36
+  }
37
+}

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


+ 51 - 0
package.json View File

@@ -0,0 +1,51 @@
1
+{
2
+  "name": "power",
3
+  "version": "0.1.0",
4
+  "private": true,
5
+  "scripts": {
6
+    "serve": "vue-cli-service serve",
7
+    "build": "vue-cli-service build"
8
+  },
9
+  "dependencies": {
10
+    "@jiaminghi/data-view": "^2.10.0",
11
+    "@vue-office/docx": "^1.6.1",
12
+    "@vue-office/pdf": "^2.0.2",
13
+    "axios": "^0.19.2",
14
+    "core-js": "^3.6.4",
15
+    "echarts": "^4.8.0",
16
+    "element-ui": "^2.13.0",
17
+    "file-saver": "^2.0.5",
18
+    "js-cookie": "^2.2.1",
19
+    "moment": "^2.30.1",
20
+    "nprogress": "^0.2.0",
21
+    "qiniu-js": "^3.4.2",
22
+    "qs": "^6.12.1",
23
+    "screenfull": "^5.0.2",
24
+    "v-charts": "^1.19.0",
25
+    "vue": "^2.6.11",
26
+    "vue-count-to": "^1.0.13",
27
+    "vue-demi": "^0.14.7",
28
+    "vue-grid-layout": "^2.3.7",
29
+    "vue-particles": "^1.0.9",
30
+    "vue-quill-editor": "^3.0.6",
31
+    "vue-router": "^3.1.5",
32
+    "vue-seamless-scroll": "^1.1.17",
33
+    "vue-svg-loader": "^0.16.0",
34
+    "vue-template-compiler": "^2.6.11",
35
+    "vue-ueditor-wrap": "^2.5.6",
36
+    "vuex": "^3.1.2",
37
+    "wangeditor": "^3.1.1",
38
+    "xlsx": "^0.15.6"
39
+  },
40
+  "devDependencies": {
41
+    "@vue/cli-plugin-babel": "^4.2.0",
42
+    "@vue/cli-service": "^4.2.0",
43
+    "sass": "^1.25.0",
44
+    "sass-loader": "^8.0.2",
45
+    "vue-happy-scroll": "^2.1.1"
46
+  },
47
+  "browserslist": [
48
+    "> 1%",
49
+    "last 2 versions"
50
+  ]
51
+}

BIN
public/favicon.ico View File


+ 82 - 0
public/index.html View File

@@ -0,0 +1,82 @@
1
+<!DOCTYPE html>
2
+<html lang="ZH">
3
+  <head>
4
+    <meta charset="utf-8">
5
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
6
+    <meta name="viewport" content="width=device-width,initial-scale=1.0">
7
+    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
8
+    <!-- <title><%= htmlWebpackPlugin.options.title %></title> -->
9
+    <title>后台收费管理系统</title>
10
+    <style>
11
+      /*
12
+ * CSS样式表重置初始化样式,PC端
13
+ */   html,body,#app{
14
+        width: 100%;
15
+        height: 100%;
16
+      }
17
+      body,p,div,ul,li,form,input,td,tr,th,div{
18
+        margin: 0;
19
+        padding: 0;
20
+      }
21
+      body{
22
+        position: relative;
23
+      }
24
+      ul,li{
25
+        list-style: none;
26
+      }
27
+      img{
28
+        border: none;
29
+        /* vertical-align: top; */
30
+        display: block;
31
+      }
32
+      a{
33
+        text-decoration: none;
34
+        color: #002be5;
35
+      }
36
+      a:hover{
37
+        text-decoration: none;
38
+      }
39
+      a img{
40
+        border: 0;
41
+      }
42
+      em{
43
+        color: #e50000;
44
+        font-style: normal;
45
+      }
46
+      button{
47
+        cursor: pointer; /*鼠标光标的类型*/
48
+      }
49
+      input,textarea{
50
+        outline: none;
51
+        appearance: none;
52
+      }
53
+      textarea{
54
+        resize: none;
55
+        overflow: auto;
56
+      }
57
+      table{
58
+        border-collapse: collapse;
59
+      }
60
+      em{
61
+        font-style: normal;
62
+      }
63
+
64
+    </style>
65
+      <script>
66
+        var _hmt = _hmt || [];
67
+        (function() {
68
+          var hm = document.createElement("script");
69
+          hm.src = "https://hm.baidu.com/hm.js?469b8e7d98f12c75e6be0b547061efea";
70
+          var s = document.getElementsByTagName("script")[0]; 
71
+          s.parentNode.insertBefore(hm, s);
72
+        })();
73
+        </script>  
74
+  </head>
75
+  <body>
76
+    <noscript>
77
+      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
78
+    </noscript>
79
+    <div id="app"></div>
80
+    <!-- built files will be auto injected -->
81
+  </body>
82
+</html>

+ 28 - 0
src/App.vue View File

@@ -0,0 +1,28 @@
1
+<template>
2
+  <div id="app">
3
+    <router-view/>
4
+  </div>
5
+</template>
6
+
7
+<script>
8
+
9
+export default {
10
+  mounted(){
11
+    
12
+  }
13
+}
14
+</script>
15
+
16
+<style lang="scss">
17
+#app {
18
+  font-family: Avenir, Helvetica, Arial, sans-serif;
19
+  -webkit-font-smoothing: antialiased;
20
+  -moz-osx-font-smoothing: grayscale;
21
+  width: 100%;
22
+  height: 100%;
23
+}
24
+// 自定义进度条颜色
25
+ #nprogress .bar {
26
+      background: #F811B2 !important; //自定义颜色
27
+  }
28
+</style>

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

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

+ 396 - 0
src/api/index.js View File

@@ -0,0 +1,396 @@
1
+import request from '../http/index'
2
+
3
+// 登录接口
4
+export function Login(params) {
5
+  return request({
6
+    url: '/admin/api/login/pwd',
7
+    method: 'get',
8
+    params:params,
9
+  })
10
+}
11
+
12
+// 创建员工
13
+export function getCreated(data){
14
+  return request({
15
+    url:"/admin/api/user/create",
16
+    method:"post",
17
+    data:data
18
+  })
19
+}
20
+// 员工列表
21
+export function getuselist(){
22
+  return request({
23
+    url:"/admin/api/system/user",
24
+    method:"get",
25
+    // data:data
26
+  })
27
+}
28
+// 修改员工
29
+export function getuseedit(data){
30
+  return request({
31
+    url:"/admin/api/user/edit",
32
+    method:"post",
33
+    data:data
34
+  })
35
+}
36
+// 删除或恢复员工
37
+export function getusedelete(data){
38
+  return request({
39
+    url:"/admin/api/user/delete",
40
+    method:"post",
41
+    data:data
42
+  })
43
+}
44
+// 员工信息
45
+export function getMessage(params){
46
+  return request({
47
+    url:"/admin/api/user/info",
48
+    method:"get",
49
+    params:params
50
+  })
51
+}
52
+
53
+
54
+
55
+// 客户列表
56
+export function getkehulist(){
57
+  return request({
58
+    url:"/admin/api/custom/list",
59
+    method:"get",
60
+    // data:data
61
+  })
62
+}
63
+// 客户添加
64
+export function getkehucreate(data){
65
+  return request({
66
+    url:"/admin/api/custom/create",
67
+    method:"post",
68
+    data:data
69
+  })
70
+}
71
+// 客户信息 
72
+export function getcustomget(id){
73
+  return request({
74
+    url:"/admin/api/custom/get?id="+id,
75
+    method:"get",
76
+    
77
+  })
78
+}
79
+// 客户信息编辑
80
+export function getkehucustomedit(data){
81
+  return request({
82
+    url:"/admin/api/custom/edit",
83
+    method:"post",
84
+    data:data
85
+  })
86
+}
87
+// 审核
88
+export function getkehucustomcheck(id){
89
+  return request({
90
+    url:"/admin/api/custom/check?id="+id,
91
+    method:"post",
92
+    // data:data
93
+  })
94
+}
95
+// 删除
96
+export function getcustomdelete(id){
97
+  return request({
98
+    url:"/admin/api/custom/delete?id="+id,
99
+    method:"post",
100
+    // data:data
101
+  })
102
+}
103
+
104
+
105
+// 合同信息 
106
+export function getcontractget(id){
107
+  return request({
108
+    url:"/admin/api/contract/get?id="+id,
109
+    method:"get",
110
+    // params:params
111
+  })
112
+}
113
+// 合同信息编辑
114
+export function getcontractedit(data){
115
+  return request({
116
+    url:"/admin/api/contract/edit",
117
+    method:"post",
118
+    data:data
119
+  })
120
+}
121
+// 添加合同
122
+export function getcontractadd(data){
123
+  return request({
124
+    url:"/admin/api/contract/create",
125
+    method:"post",
126
+    data:data
127
+  })
128
+}
129
+// 合同列表 
130
+export function getcontractlist(){
131
+  return request({
132
+    url:"/admin/api/contract/list",
133
+    method:"get",
134
+  })
135
+}
136
+// 合同删除
137
+export function getcontractdelete(id){
138
+  return request({
139
+    url:"/admin/api/contract/delete?id="+id,
140
+    method:"post",
141
+    // data:data
142
+  })
143
+}
144
+// 合同核对
145
+export function getcontractcheck(id){
146
+  return request({
147
+    url:"/admin/api/contract/check?id="+id,
148
+    method:"post",
149
+    // data:data
150
+  })
151
+}
152
+
153
+// 联系人信息 
154
+export function getcontactget(id){
155
+  return request({
156
+    url:"/admin/api/contact/get?id="+id,
157
+    method:"get",
158
+    
159
+  })
160
+}
161
+// 联系人编辑
162
+export function getcontactedit(data){
163
+  return request({
164
+    url:"/admin/api/contact/edit",
165
+    method:"post",
166
+    data:data
167
+  })
168
+}
169
+// 添加联系人
170
+export function getcontactcreate(data){
171
+  return request({
172
+    url:"/admin/api/contact/create",
173
+    method:"post",
174
+    data:data
175
+  })
176
+}
177
+// 联系人列表 
178
+export function getcontactlist(){
179
+  return request({
180
+    url:"/admin/api/contact/list",
181
+    method:"get",
182
+  })
183
+}
184
+// 联系人删除
185
+export function getcontactdelete(id){
186
+  return request({
187
+    url:"/admin/api/contact/delete?id="+id,
188
+    method:"post",
189
+    // data:data
190
+  })
191
+}
192
+// 联系人核对
193
+export function getcontactcheck(id){
194
+  return request({
195
+    url:"/admin/api/contact/check?id="+id,
196
+    method:"post",
197
+    // data:data
198
+  })
199
+}
200
+
201
+
202
+// 跟进信息 
203
+export function getfollwget(params){
204
+  return request({
205
+    url:"/admin/api/follw/get",
206
+    method:"get",
207
+    params:params
208
+  })
209
+}
210
+// 编辑跟进
211
+export function getfollowedit(data){
212
+  return request({
213
+    url:"/admin/api/follow/edit",
214
+    method:"post",
215
+    data:data
216
+  })
217
+}
218
+// 添加跟进
219
+export function getfollowcreate(data){
220
+  return request({
221
+    url:"/admin/api/follow/create",
222
+    method:"post",
223
+    data:data
224
+  })
225
+}
226
+// 跟进列表 
227
+export function getfollowlist(){
228
+  return request({
229
+    url:"/admin/api/follow/list",
230
+    method:"get",
231
+  })
232
+}
233
+// 删除跟进
234
+export function getfollowdelete(id){
235
+  return request({
236
+    url:"/admin/api/follow/delete?id="+id,
237
+    method:"post",
238
+    // data:data
239
+  })
240
+}
241
+// 跟进核对
242
+export function getfollowcheck(id){
243
+  return request({
244
+    url:"/admin/api/follow/check?id="+id,
245
+    method:"post",
246
+    // data:data
247
+    // ?id=  +id
248
+  })
249
+}
250
+
251
+
252
+// 回款信息 
253
+export function getpaymentcollectionget(id){
254
+  return request({
255
+    url:"/admin/api/paymentcollection/get?id="+id,
256
+    method:"get",
257
+    
258
+  })
259
+}
260
+// 编辑回款
261
+export function getpaymentcollectionedit(data){
262
+  return request({
263
+    url:"/admin/api/paymentcollection/edit",
264
+    method:"post",
265
+    data:data
266
+  })
267
+}
268
+// 添加回款
269
+export function getpaymentcollectioncreate(data){
270
+  return request({
271
+    url:"/admin/api/paymentcollection/create",
272
+    method:"post",
273
+    data:data
274
+  })
275
+}
276
+// 回款列表 
277
+export function getpaymentcollectionlist(){
278
+  return request({
279
+    url:"/admin/api/paymentcollection/list",
280
+    method:"get",
281
+  })
282
+}
283
+// 删除回款
284
+export function getpaymentcollectiondelete(data){
285
+  return request({
286
+    url:"/admin/api/paymentcollection/delete",
287
+    method:"post",
288
+    data:data
289
+  })
290
+}
291
+// 回款核对
292
+export function getpaymentcollectioncheck(id){
293
+  return request({
294
+    url:"/admin/api/paymentcollection/check?id="+id,
295
+    method:"post",
296
+    // data:data
297
+  })
298
+}
299
+
300
+
301
+// 需求信息 
302
+export function getdemandget(id){
303
+  return request({
304
+    url:"/admin/api/demand/get?id="+id,
305
+    method:"get",
306
+    // params:params
307
+  })
308
+}
309
+// 编辑需求
310
+export function getdemandedit(data){
311
+  return request({
312
+    url:"/admin/api/demand/edit",
313
+    method:"post",
314
+    data:data
315
+  })
316
+}
317
+// 添加需求
318
+export function getdemandcreate(data){
319
+  return request({
320
+    url:"/admin/api/demand/create",
321
+    method:"post",
322
+    data:data
323
+  })
324
+}
325
+// 需求列表 
326
+export function getdemandlist(){
327
+  return request({
328
+    url:"/admin/api/demand/list",
329
+    method:"get",
330
+  })
331
+}
332
+// 删除需求
333
+export function getdemanddelete(id){
334
+  return request({
335
+    url:"/admin/api/demand/delete?id="+id,
336
+    method:"post",
337
+    // data:data
338
+  })
339
+}
340
+// 需求核对
341
+export function getdemandcheck(id){
342
+  return request({
343
+    url:"/admin/api/demand/check?id="+id,
344
+    method:"post",
345
+    // data:data
346
+  })
347
+}
348
+
349
+
350
+// 续约信息 
351
+export function getrenewalget(id){
352
+  return request({
353
+    url:"/admin/api/renewal/get?id="+id,
354
+    method:"get",
355
+    // params:params
356
+  })
357
+}
358
+// 编辑续约
359
+export function getrenewaledit(data){
360
+  return request({
361
+    url:"/admin/api/renewal/edit",
362
+    method:"post",
363
+    data:data
364
+  })
365
+}
366
+// 添加续约
367
+export function getrenewalcreate(data){
368
+  return request({
369
+    url:"/admin/api/renewal/create",
370
+    method:"post",
371
+    data:data
372
+  })
373
+}
374
+// 续约列表 
375
+export function getrenewallist(){
376
+  return request({
377
+    url:"/admin/api/renewal/list",
378
+    method:"get",
379
+  })
380
+}
381
+// 删除续约
382
+export function getrenewaldelete(id){
383
+  return request({
384
+    url:"/admin/api/renewal/delete?id="+id,
385
+    method:"post",
386
+    // data:data
387
+  })
388
+}
389
+// 续约核对
390
+export function getrenewalcheck(id){
391
+  return request({
392
+    url:"/admin/api/renewal/check?id="+id,
393
+    method:"post",
394
+    // data:data
395
+  })
396
+}

BIN
src/assets/font/webfont.eot View File


+ 66 - 0
src/assets/font/webfont.svg View File

@@ -0,0 +1,66 @@
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
+<svg>
5
+<metadata>
6
+Created by webfont
7
+</metadata>
8
+<defs>
9
+
10
+<font id="AlibabaPuHuiTiL" horiz-adv-x="1234" vert-adv-y="1234" >
11
+  <font-face
12
+    
13
+    font-family="AlibabaPuHuiTiL"
14
+    
15
+    font-weight="400"
16
+    
17
+    font-stretch="normal"
18
+    
19
+    units-per-em="1000"
20
+    
21
+    ascent="1097"
22
+    
23
+    descent="-279"
24
+    
25
+  />
26
+    <missing-glyph />
27
+    
28
+    <glyph glyph-name="uni4E0D" unicode="&#x4E0D;" d="M894 686L579 686Q505 536 374.50 388.50Q244 241 82 118L60 148Q215 265 341 405Q467 545 538 686L91 686L91 722L894 722L894 686M475-90L475 510L509 508L509-90L475-90M561 442L582 468Q652 414 756 318.50Q860 223 919 160L894 131Q838 193 735.50 289Q633 385 561 442Z"  horiz-adv-x="984" vert-adv-y="1000"  />
29
+
30
+    
31
+    <glyph glyph-name="uni51FA" unicode="&#x51FA;" d="M813 291L847 289L847-91L813-91L813-38L137-38L137 288L171 286L171-2L475-2L475 379L164 379L164 711L198 709L198 414L475 414L475 807L508 805L508 414L786 414L786 711L820 709L820 379L508 379L508-2L813-2L813 291Z"  horiz-adv-x="984" vert-adv-y="1000"  />
32
+
33
+    
34
+    <glyph glyph-name="uni5C81" unicode="&#x5C81;" d="M798 757L832 755L832 553L145 553L145 758L180 756L180 586L472 586L472 802L507 800L507 586L798 586L798 757M384 532L418 520Q379 451 332 393L812 393L812 360Q723 210 551.50 99.50Q380-11 93-100L77-65Q347 17 514 120Q681 223 768 360L306 360Q278 327 246 294Q310 262 485 168L468 138Q370 197 222 270Q161 209 81 151L60 180Q267 332 384 532Z"  horiz-adv-x="984" vert-adv-y="1000"  />
35
+
36
+    
37
+    <glyph glyph-name="uni6570" unicode="&#x6570;" d="M699 150Q772 41 919-72L899-100Q763 5 679 121Q603 14 440-102L420-73Q582 41 659 151Q569 293 547 487Q518 432 497 399L471 422Q519 496 563 602Q607 708 625 795L657 788Q642 717 603 613L914 613L914 577L819 577Q804 430 777 330Q750 230 699 150M47 307L32 335Q181 420 263 530L52 530L52 560L270 560L270 789L302 787L302 560L495 560L495 530L302 530L302 335L270 335L270 495Q192 393 47 307M210 620L187 604Q116 704 86 740L108 757Q196 639 210 620M464 757L488 740Q448 686 382 601L359 619Q438 719 464 757M571 538Q590 328 678 181Q764 326 786 577L588 577Q584 570 579 557Q574 544 571 538M494 352L475 327Q400 402 319 461L338 485Q349 476 382.50 448Q416 420 446 394Q476 368 494 352M452-12L436-42Q342 9 306 26Q218-37 38-96L26-66Q187-16 275 42Q259 50 112 119Q129 146 169 219L46 219L46 249L184 249Q207 297 219 330L250 320Q234 279 219 249L451 249L451 220Q408 110 334 48Q408 12 452-12M156 132Q191 118 305 63Q374 117 417 219L205 219Q179 168 156 132Z"  horiz-adv-x="984" vert-adv-y="1000"  />
38
+
39
+    
40
+    <glyph glyph-name="uni6C13" unicode="&#x6C13;" d="M176 775L211 779Q240 692 265 590L387 590L387 557L168 557L168 65L356 65L356 32L134 32L134 557L55 557L55 590L230 590Q192 727 176 775M914 109L943 95Q935 35 921-17Q900-90 852-90Q794-90 751-3Q701 98 680 261L456 261L456-37Q479-24 563.50 16Q648 56 660 61L668 28Q660 25 562.50-21Q465-67 452-74Q438-79 418-95L401-67Q422-47 422-37L422 743L866 743L866 483L698 483Q704 354 711 295L929 295L929 261L715 261Q736 106 782 13Q817-53 852-53Q879-53 894 1Q907 48 914 109M833 709L456 709L456 517L833 517L833 709M456 295L676 295Q668 356 663 483L456 483L456 295Z"  horiz-adv-x="984" vert-adv-y="1000"  />
41
+
42
+    
43
+    <glyph glyph-name="uni6D41" unicode="&#x6D41;" d="M318 426Q376 473 505 631L302 631L302 664L573 664Q571 672 555.50 728.50Q540 785 534 806L568 810Q582 765 607 664L884 664L884 631L546 631Q442 498 357 420Q390 422 556.50 426Q723 430 765 432Q760 437 645 548L669 570Q708 535 770 474Q832 413 865 376L842 352Q838 357 795 402Q764 402 558 394.50Q352 387 337 387Q306 385 285 382L279 412Q309 417 318 426M273 616L252 588Q183 654 75 734L96 761Q178 704 273 616M228 387L207 358Q175 390 118 437Q61 484 27 506L47 533Q126 482 228 387M361 237L361 324L394 322Q394 318 393.50 281Q393 244 393 231Q391 105 357 39Q323-27 218-107L195-83Q295-9 326 51.50Q357 112 361 237M886 115L915 105Q915 41 910 1Q904-41 888-55Q872-69 824-71Q802-72 780-71Q738-68 721.50-53.50Q705-39 705 0L705 324L738 322L738 5Q738-21 747.50-29Q757-37 787-39Q804-41 822-39Q858-37 869.50-28Q881-19 883 9Q883 22 884.50 66.50Q886 111 886 115M533-76L533 323L566 321L566-76L533-76M203 266L219 261Q166 67 100-84L68-74Q147 120 187 272L203 266Z"  horiz-adv-x="984" vert-adv-y="1000"  />
44
+
45
+    
46
+    <glyph glyph-name="uni770B" unicode="&#x770B;" d="M906 428L344 428Q311 375 277 333L774 333L774-101L742-101L742-44L276-44L276-102L243-102L243 293Q161 199 46 106L27 134Q203 275 304 428L49 428L49 459L323 459Q359 521 376 563L127 563L127 593L389 593Q406 637 424 703Q243 690 101 686L100 717Q465 725 832 774L836 742Q725 726 458 705Q435 623 424 593L828 593L828 563L412 563Q391 512 362 459L906 459L906 428M742 218L742 304L276 304L276 218L742 218M276 188L276 102L742 102L742 188L276 188M276-13L742-13L742 74L276 74L276-13Z"  horiz-adv-x="984" vert-adv-y="1000"  />
47
+
48
+    
49
+    <glyph glyph-name="uni82F1" unicode="&#x82F1;" d="M319 548L319 639L66 639L66 672L319 672L319 781L353 779L353 672L628 672L628 781L662 779L662 672L912 672L912 639L662 639L662 548L628 548L628 639L353 639L353 548L319 548M929 192L512 192Q550 101 653 37.50Q756-26 933-72L919-106Q743-60 639 4.50Q535 69 491 164Q427-9 64-113L50-78Q235-27 337 39Q439 105 465 192L51 192L51 226L187 226L187 465L473 465L473 585L505 583L505 465L793 465L793 226L929 226L929 192M220 226L472 226Q473 235 473 252L473 431L220 431L220 226M760 431L505 431L505 246Q505 233 504 226L760 226L760 431Z"  horiz-adv-x="984" vert-adv-y="1000"  />
50
+
51
+    
52
+    <glyph glyph-name="uni8DEF" unicode="&#x8DEF;" d="M670 455Q766 383 921 340L910 308Q743 357 644 434Q547 358 402 304L388 335Q526 387 619 456Q553 514 491 617Q453 563 412 517L391 541Q443 599 490.50 675Q538 751 561 817L592 806Q570 749 548 712L837 712L837 679Q772 544 670 455M406 74L408 55L409 40Q341 25 222.50 6Q104-13 27-22L23 10Q32 11 42.50 12.50Q53 14 67 15.50Q81 17 90 18L90 385L121 383L121 22L241 42L241 480L107 480L107 745L358 745L358 480L273 480L273 297L396 297L396 265L273 265L273 47Q298 52 343 61Q388 70 406 74M137 712L137 513L327 513L327 712L137 712M530 680L510 647Q568 541 644 476Q742 557 803 680L530 680M456-80L456 263L814 263L814-80L782-80L782-14L489-14L489-80L456-80M782 230L489 230L489 15L782 15L782 230Z"  horiz-adv-x="984" vert-adv-y="1000"  />
53
+
54
+    
55
+    <glyph glyph-name="uni95EE" unicode="&#x95EE;" d="M139 766L161 791Q219 742 311 642L286 615Q229 681 139 766M857 715L857 45Q857-22 832-44Q807-66 730-72L631-81L621-46L723-38Q784-34 803.50-17Q823 0 823 53L823 680L368 680L368 715L857 715M162-85L127-85L127 609L162 607L162-85M660 137L322 137L322 495L660 495L660 137M628 170L628 461L356 461L356 170L628 170Z"  horiz-adv-x="984" vert-adv-y="1000"  />
56
+
57
+    
58
+    <glyph glyph-name="uni96C4" unicode="&#x96C4;" d="M934 19L934-12L507-12L507-93L475-93L475 534Q430 440 382 372L362 398Q414 473 463 584Q512 695 539 804L572 797Q548 708 514 624L716 624Q693 709 664 794L693 799Q705 766 747 624L915 624L915 590L724 590L724 425L899 425L899 394L724 394L724 229L899 229L899 197L724 197L724 19L934 19M434 588L238 588Q173 370 51 183L31 209Q142 388 205 588L63 588L63 624L216 624Q239 704 253 798L285 795Q272 708 249 624L434 624L434 588M693 425L693 590L507 590L507 425L693 425M315 238L345 249Q390 129 445-46L416-56L397 7Q362 6 151-4Q135-5 113-12L103 18Q123 25 131 39Q173 113 221.50 233Q270 353 299 459L329 450Q300 344 251 223.50Q202 103 159 27Q376 38 386 39Q347 155 315 238M693 229L693 394L507 394L507 229L693 229M507 197L507 19L693 19L693 197L507 197Z"  horiz-adv-x="984" vert-adv-y="1000"  />
59
+
60
+    
61
+    <glyph glyph-name="uniFF0C" unicode="&#xFF0C;" d="M197-136L158-136Q253 1 253 105L298 105Q298-6 197-136Z"  horiz-adv-x="984" vert-adv-y="1000"  />
62
+
63
+    
64
+
65
+  </font>
66
+</defs></svg>

BIN
src/assets/font/webfont.ttf View File


BIN
src/assets/font/webfont.woff View File


BIN
src/assets/font/webfont.woff2 View File


+ 16 - 0
src/assets/font/wenfont.css View File

@@ -0,0 +1,16 @@
1
+@font-face {
2
+    font-family: 'webfont';
3
+    font-display: swap;
4
+    src: url('webfont.eot'); /* IE9 */
5
+    src: url('webfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
6
+    url('webfont.woff2') format('woff2'),
7
+    url('webfont.woff') format('woff'), /* chrome��firefox */
8
+    url('webfont.ttf') format('truetype'), /* chrome��firefox��opera��Safari, Android, iOS 4.2+*/
9
+    url('webfont.svg#webfont') format('svg'); /* iOS 4.1- */
10
+}
11
+
12
+html,body,#app{
13
+    font-family: "webfont" !important;
14
+    font-size: 16px;
15
+    font-style: normal;
16
+}

+ 1 - 0
src/assets/icon/analysis.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="1585968194325" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4166" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><defs><style type="text/css"></style></defs><path d="M138.545152 765.825024l95.52896 0c16.662528 0 30.16704-13.50656 30.16704-30.164992L264.241152 309.9648c0-16.662528-13.50656-30.16704-30.16704-30.16704L138.545152 279.79776c-16.662528 0-30.16704 13.50656-30.16704 30.16704l0 425.693184C108.376064 752.318464 121.882624 765.825024 138.545152 765.825024z" p-id="4167"></path><path d="M445.435904 765.825024l95.52896 0c16.662528 0 30.16704-19.744768 30.16704-44.10368L571.131904 99.325952c0-24.36096-13.50656-44.107776-30.16704-44.107776l-95.52896 0c-16.66048 0-30.16704 19.746816-30.16704 44.107776l0 622.395392C415.268864 746.080256 428.773376 765.825024 445.435904 765.825024z" p-id="4168"></path><path d="M752.326656 765.825024l95.52896 0c16.662528 0 30.16704-18.345984 30.16704-40.986624l0-578.3552c0-22.636544-13.50656-40.984576-30.16704-40.984576l-95.52896 0c-16.662528 0-30.16704 18.348032-30.16704 40.984576l0 578.3552C722.157568 747.476992 735.664128 765.825024 752.326656 765.825024z" p-id="4169"></path><path d="M6.144 816.103424l968.704 0 0 50.2784-968.704 0 0-50.2784Z" p-id="4170"></path></svg>

+ 1 - 0
src/assets/icon/app.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="1585919647172" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6049" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M417.798203 1016.25308c28.670112 16.894887 51.196629 5.631629 51.196629-28.670112V588.76123c0-34.301741-23.038483-68.603482-51.196629-85.49837L87.579948 297.964379c-28.670112-11.263258-51.196629 0-51.196629 28.670112v398.821738c0 34.301741 23.038483 68.603482 51.196629 85.49837l330.218255 205.298481zM138.776577 172.532639c-28.670112 16.894887-28.670112 39.93337 0 56.828258l325.098592 205.298481c28.670112 16.894887 68.603482 16.894887 96.761628 5.631629L885.73539 274.925896c28.670112-16.894887 28.670112-39.93337 0-56.828258L543.229944 12.799157c-23.038483-16.894887-68.603482-16.894887-96.761629 0L138.776577 172.532639z m421.86022 815.050329c0 34.301741 23.038483 45.565 51.196629 28.670112l325.098592-165.365111c28.670112-16.894887 51.196629-51.196629 51.196629-85.49837v-399.333704c0-34.301741-23.038483-45.565-51.196629-28.670112l-325.098592 165.365111c-28.670112 16.894887-51.196629 51.196629-51.196629 85.49837v399.333704z" p-id="6050"></path></svg>

+ 1 - 0
src/assets/icon/approval.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="1585706174483" class="icon" viewBox="0 0 1026 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6420" xmlns:xlink="http://www.w3.org/1999/xlink" width="128.25" height="128"><defs><style type="text/css"></style></defs><path d="M607.314887 635.882561c-10.094054-3.750445-20.123815-7.30801-30.089283-10.58697-6.322178-2.078818-59.021286-30.367887-21.323958-95.882801l-0.321467 0c65.000566-66.950798 114.656456-174.727866 114.656456-280.811877 0-163.112203-108.462864-248.600914-234.499241-248.600914C309.593862 0 201.709638 85.488711 201.709638 248.600914c0 106.512633 49.441578 214.739755 114.806474 281.519103 25.460163 66.843642-20.188109 91.425129-29.63923 95.175574C50.641721 719.121005 0 845.971764 0 845.971764l0 178.028258 400.740386 0 68.322389-249.286709L607.314887 635.882561 607.314887 635.882561zM859.923419 676.944574l-38.554573-38.640297 0.214311-0.235742-51.627552-51.563258L535.113466 819.247166c-3.214667 2.593165-5.957849 5.893556-7.200854 10.158348l-54.563614 194.594508 199.05218-50.148805c3.986187-1.178711 7.072267-3.643289 9.601139-6.622214l235.399348-233.32053-57.242503-57.199641L859.923419 676.944574 859.923419 676.944574zM537.020835 964.164353c0 0 23.445638-93.311067 27.067496-109.941611 49.848769 21.388251 83.474186 83.452755 83.474186 83.452755L537.020835 964.164353zM791.279563 563.059638l147.46749 147.424628 33.732572-31.632323-147.488921-147.446059L791.279563 563.059638zM1011.248509 560.937958l-70.679811-70.636949c-19.502313-19.502313-50.963187-19.695193-70.251189-0.38576l-21.666855 21.881167 141.273898 141.338192 21.709718-21.94546C1030.922271 611.944007 1030.750822 580.461702 1011.248509 560.937958L1011.248509 560.937958zM1011.248509 560.937958" p-id="6421"></path></svg>

+ 1 - 0
src/assets/icon/circle.svg View File

@@ -0,0 +1 @@
1
+<svg t="1591709199521" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6254" width="128" height="128"><path d="M62 512c0 248.528 201.472 450 450 450s450-201.472 450-450c0-248.528-201.472-450-450-450-248.528 0-450 201.472-450 450z" p-id="6255"></path></svg>

+ 1 - 0
src/assets/icon/clear.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="1585708231073" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10403" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M694.857143 146.285714 694.857143 73.142857c0-40.393143-32.749714-73.142857-73.142857-73.142857L402.285714 0c-40.393143 0-73.142857 32.749714-73.142857 73.142857l0 73.142857L36.571429 146.285714l0 73.142857 109.714286 0 0 731.428571c0 40.393143 32.749714 73.142857 73.142857 73.142857l585.142857 0c40.393143 0 73.142857-32.749714 73.142857-73.142857L877.714286 219.428571l109.714286 0L987.428571 146.285714 694.857143 146.285714zM402.285714 73.142857l219.428571 0 0 73.142857L402.285714 146.285714 402.285714 73.142857zM804.571429 950.857143 219.428571 950.857143 219.428571 219.428571l585.142857 0L804.571429 950.857143z" p-id="10404"></path><path d="M329.142857 329.142857l73.142857 0 0 512-73.142857 0 0-512Z" p-id="10405"></path><path d="M475.428571 329.142857l73.142857 0 0 512-73.142857 0 0-512Z" p-id="10406"></path><path d="M621.714286 329.142857l73.142857 0 0 512-73.142857 0 0-512Z" p-id="10407"></path></svg>

+ 1 - 0
src/assets/icon/count.svg View File

@@ -0,0 +1 @@
1
+<svg t="1591698472720" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4277" width="128" height="128"><path d="M825.6 473.6V832H896v64H128v-64h64v-121.6h64V832h128V531.2h64V832h128v-179.2h64V832h128V473.6h57.6zM896 128v268.8h-64V230.4L620.8 441.6l-51.2 44.8-108.8-108.8-275.2 275.2-44.8-44.8 320-320L576 396.8 780.8 192H640V128h256z" p-id="4278"></path></svg>

+ 1 - 0
src/assets/icon/crying.svg View File

@@ -0,0 +1 @@
1
+<svg t="1591714008692" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8643" width="128" height="128"><path d="M517.12 53.248q95.232 0 179.2 36.352t145.92 98.304 98.304 145.92 36.352 179.2-36.352 179.2-98.304 145.92-145.92 98.304-179.2 36.352-179.2-36.352T192 838.144t-98.304-145.92-36.352-179.2 36.352-179.2T192 187.904 337.92 89.6t179.2-36.352zM663.552 261.12q-15.36 0-28.16 6.656t-23.04 18.432-15.872 27.648-5.632 33.28q0 35.84 21.504 61.44t51.2 25.6 51.2-25.6 21.504-61.44q0-17.408-5.632-33.28t-15.872-27.648-23.04-18.432-28.16-6.656z m-289.792 0q-29.696 0-50.688 25.088t-20.992 60.928 20.992 61.44 50.688 25.6 50.176-25.6 20.48-61.44-20.48-60.928-50.176-25.088z m146.432 340.992q-51.2 0-97.28 9.728t-82.944 27.648-62.464 41.472-35.84 51.2q-1.024 1.024-1.024 2.048-1.024 3.072-1.024 8.704t2.56 11.776 7.168 11.264 12.8 6.144q25.6-27.648 62.464-50.176 31.744-19.456 79.36-35.328t114.176-15.872q67.584 0 116.736 15.872t81.92 35.328q37.888 22.528 63.488 50.176 17.408-5.12 19.968-18.944t0.512-18.944-3.072-7.168-1.024-3.072q-26.624-55.296-100.352-88.576t-176.128-33.28z"  p-id="8644"></path></svg>

+ 1 - 0
src/assets/icon/daiban.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="1585667908029" class="icon" viewBox="0 0 1201 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10103" xmlns:xlink="http://www.w3.org/1999/xlink" width="150.125" height="128"><defs><style type="text/css"></style></defs><path d="M197.38868 737.500742c-19.572295 0-35.813136 26.235204-35.813136 45.8075s16.240841 45.8075 35.813136 45.807499h124.929544c19.572295 0 35.813136-26.235204 35.813136-45.807499s-16.240841-45.8075-35.813136-45.8075zM760.820924 550.93929c0-19.572295-15.824409-45.8075-35.813136-45.8075H197.38868c-19.572295 0-35.813136 26.235204-35.813136 45.8075s16.240841 45.8075 35.813136 45.807499h527.619108c19.988727 0 35.813136-26.235204 35.813136-45.807499zM197.38868 349.386292h528.451971c19.572295 0 35.813136-26.235204 35.813136-45.8075s-16.240841-45.8075-35.813136-45.807499H197.38868c-19.572295 0-35.813136 26.235204-35.813136 45.807499s16.240841 45.8075 35.813136 45.8075z"  p-id="10104"></path><path d="M918.648581 534.698449V95.362885A97.028613 97.028613 0 0 0 822.452832 0H112.020158A124.929544 124.929544 0 0 0 0 111.187294v801.631242a124.929544 124.929544 0 0 0 112.020158 110.770862h550.522858a41.643181 41.643181 0 0 0 47.473226-41.643181c0-28.733795-20.405159-55.801863-41.643181-55.801863H139.088226c-27.900932 0-41.643181-12.492954-41.643182-41.643182v-749.577264c0-24.569477 9.994364-34.563841 34.563841-34.563841H782.89181c24.985909 0 35.396704 9.577932 35.396704 34.563841v400.607405c0 19.572295 27.068068 36.646 57.051159 36.645999a38.311727 38.311727 0 0 0 41.643181-36.645999z"  p-id="10105"></path><path d="M816.622787 921.980036l-182.397135-181.980703a32.481681 32.481681 0 0 1 0-45.807499 32.06525 32.06525 0 0 1 45.391068 0L816.622787 832.863628a32.06525 32.06525 0 0 0 45.391067 0l273.595702-273.595702a32.06525 32.06525 0 0 1 45.391068 0 32.481681 32.481681 0 0 1 0 45.807499l-318.98677 316.904611a31.648818 31.648818 0 0 1-45.391067 0z" p-id="10106"></path><path d="M839.110105 941.968763a41.643181 41.643181 0 0 1-29.983091-12.492955l-182.397134-182.397134a41.643181 41.643181 0 0 1 0-59.966181 41.643181 41.643181 0 0 1 60.382613 0l136.589635 136.589635a22.070886 22.070886 0 0 0 30.815954 0l273.595701-273.595702a41.643181 41.643181 0 0 1 29.983091-12.492954 41.643181 41.643181 0 0 1 30.399522 12.492954 44.141772 44.141772 0 0 1 12.492955 30.399522 41.643181 41.643181 0 0 1-12.492955 29.983091l-318.986769 318.986769a41.643181 41.643181 0 0 1-30.399522 12.492955z m-181.980703-246.527634a21.238023 21.238023 0 0 0-15.407977 6.246477 21.238023 21.238023 0 0 0 0 30.815954L823.702128 916.14999a22.070886 22.070886 0 0 0 30.815954 0l318.986769-318.986769a22.070886 22.070886 0 0 0-15.407977-37.478863 21.654454 21.654454 0 0 0-15.407977 6.662909l-273.17927 273.17927a41.643181 41.643181 0 0 1-30.399522 12.492954 41.643181 41.643181 0 0 1-29.983091-12.492954l-136.589635-136.589635a22.90375 22.90375 0 0 0-15.407977-7.495773z"  p-id="10107"></path></svg>

+ 1 - 0
src/assets/icon/deal.svg View File

@@ -0,0 +1 @@
1
+<svg t="1591669559713" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2407" width="128" height="128"><path d="M699.328 844.544 686.08 844.544l0-34.176c0-18.24-16.768-33.088-37.504-33.088l-517.12 0c-20.736 0-37.568 14.784-37.568 33.088l0 34.176L80.64 844.544c-24.832 0-44.992 19.584-44.992 43.968l0 77.44c0 24.128 20.096 43.904 44.992 43.904l618.688 0c24.896 0 44.992-19.776 44.992-43.904l0-77.44C744.32 864.128 724.16 844.544 699.328 844.544z" p-id="2408" ></path><path d="M803.52 274.944c5.952-2.176 11.328-5.76 15.36-11.072 11.456-14.72 8.384-35.904-6.784-46.976L554.368 27.264C539.2 16.192 517.632 19.072 506.176 33.984c-3.84 4.928-5.76 10.56-6.528 16.192L803.52 274.944z" p-id="2409" ></path><path d="M175.68 469.696C170.752 472 166.272 475.2 162.752 479.744 151.36 494.656 154.368 515.52 169.536 526.72l257.728 189.568c15.168 11.072 36.8 8.128 48.064-6.656 3.904-5.12 6.08-10.88 6.592-16.64L175.68 469.696z" p-id="2410" ></path><path d="M968.896 649.024l-293.568-216 93.696-121.728c4.416-5.568 7.04-11.968 8.256-18.304L498.688 86.784C492.224 89.664 486.336 94.144 481.728 100.032L388.032 221.76 377.408 214.016c-19.84-14.592-48-10.688-62.976 8.768L295.36 247.424C280.384 266.816 284.48 294.4 304.32 308.992l10.496 7.744L217.856 442.624C214.208 447.36 211.84 452.416 210.432 457.856l283.136 206.336c4.288-2.688 8.256-6.144 11.584-10.24L602.112 528l293.568 215.872c20.032 14.72 48.128 10.752 62.976-8.512l19.008-24.896C992.768 691.072 988.8 663.488 968.896 649.024z" p-id="2411"></path></svg>

+ 1 - 0
src/assets/icon/dynamic.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="1585971308413" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="38172" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><defs><style type="text/css"></style></defs><path d="M480 480H176.96c-45.056 0-61.952-30.656-38.208-67.904L394.624 49.216C441.792-24.576 480-14.144 480 72.192V480z m0 64v303.04c0 45.056-30.656 61.952-67.904 38.208L49.216 629.376C-24.576 582.208-14.144 544 72.192 544H480z m64 0h303.04c45.056 0 61.952 30.656 38.208 67.904l-255.872 362.88c-47.168 73.792-85.376 63.36-85.376-22.976V544z m0-64V176.96c0-45.056 30.656-61.952 67.904-38.208l362.88 255.872c73.792 47.168 63.36 85.376-22.976 85.376H544z" p-id="38173"></path></svg>

+ 1 - 0
src/assets/icon/email.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="1585703727879" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1428" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M959.715317 735.848231c0 19.61985-5.520963 37.818327-14.375994 53.829999L662.623029 473.359958l279.655459-244.668419c10.878191 17.269315 17.435805 37.545104 17.435805 59.459207L959.714294 735.848231zM512.000512 530.799158l389.127102-340.471368c-15.959114-8.744151-33.939341-14.100136-53.340998-14.100136l-671.572209 0c-19.429288 0-37.411561 5.355985-53.314391 14.100136L512.000512 530.799158zM620.4836 510.196934l-90.067939 78.861092c-5.27229 4.589528-11.830928 6.885827-18.416173 6.885827-6.588315 0-13.14593-2.296299-18.41822-6.886851l-90.094546-78.861092L117.188711 830.556243c17.161548 10.767228 37.273409 17.216103 59.025697 17.216103l671.572209 0c21.752288 0 41.863125-6.450922 59.024673-17.216103L620.4836 510.196934zM81.719465 228.692562c-10.876144 17.269315-17.433759 37.545104-17.433759 59.459207l0 447.696462c0 19.61985 5.492309 37.818327 14.373948 53.829999l282.69071-316.370461L81.719465 228.692562z" p-id="1429"></path></svg>

+ 1 - 0
src/assets/icon/favorite.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="1585707762746" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9884" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M542.7 798.8l192.2 122.1c13.2 8.4 30.7 4.5 39.1-8.8 4-6.3 5.4-14 3.7-21.3L718.1 622 918 439.7c11.5-10.6 12.3-28.5 1.8-40-4.8-5.2-11.3-8.5-18.4-9.1l-261.8-23.4-101-251.2c-5.8-14.5-22.3-21.6-36.9-15.7-7.2 2.9-12.9 8.6-15.7 15.7L384.9 367.1l-261.8 23.4c-15.6 1.4-27.1 15.2-25.7 30.8 0.6 7 3.9 13.6 9.1 18.3l200 182.4-59.6 268.9c-3.4 15.3 6.3 30.4 21.6 33.8 7.3 1.6 15 0.3 21.3-3.7l192.1-122.1c18.5-11.9 42.2-11.9 60.8-0.1z" p-id="9885"></path></svg>

+ 1 - 0
src/assets/icon/feedback.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="1585970363249" class="icon" viewBox="0 0 1128 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="28654" xmlns:xlink="http://www.w3.org/1999/xlink" width="70.5" height="64"><defs><style type="text/css"></style></defs><path d="M980.711066 0.015039H147.538124A145.31649 145.31649 0 0 0 0.153741 148.527364v494.414449A149.546271 149.546271 0 0 0 141.146455 798.973749h46.997571v187.990285c0 44.647693 62.600765 46.997571 92.068242 17.389101L470.129453 798.973749h516.973283a149.546271 149.546271 0 0 0 140.992713-156.031936V148.527364A145.363488 145.363488 0 0 0 980.711066 0.015039zM611.122166 610.983465H235.141597a46.997571 46.997571 0 0 1 0-93.995143h375.980569a46.997571 46.997571 0 0 1 0 93.995143z m278.6486-328.982999H238.478425a46.997571 46.997571 0 1 1 0-93.995142h651.292341a46.997571 46.997571 0 1 1 0 93.995142z m0 0" p-id="28655"></path></svg>

+ 1 - 0
src/assets/icon/finance.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="1585970013786" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="15775" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><defs><style type="text/css"></style></defs><path d="M375.41487 258.403564h257.849244c79.512983 0 140.28362-165.841364 140.28362-165.841365C773.547734 43.15056 768.436186 5.665868 681.539854 1.690219s-109.614327 56.794988-173.224713 56.794988S408.355963 13.617166 328.27503 1.690219 234.5633 43.15056 234.5633 92.562199c0 0 60.770637 165.841364 140.85157 165.841365z m271.480042 51.115489H375.41487c-301.581385 0-375.41487 567.949878-375.41487 567.949878A149.938768 149.938768 0 0 0 140.85157 1024h738.334842A149.938768 149.938768 0 0 0 1022.309781 875.197132s-73.833484-567.949878-375.414869-567.949879z m31.237243 434.481657a31.805193 31.805193 0 1 1 0 63.042436H544.663933v82.352733a32.941093 32.941093 0 0 1-65.882185 0v-82.352733H344.745576a31.805193 31.805193 0 1 1 0-63.042436h134.036172v-39.756492H344.745576a31.805193 31.805193 0 1 1 0-63.042436h90.871981L340.769927 483.311716a30.669293 30.669293 0 0 1 11.926948-42.596241 34.076993 34.076993 0 0 1 44.86804 11.358997l113.589976 189.12731h5.679498l113.589976-189.12731a34.076993 34.076993 0 0 1 44.86804-11.358997 30.101344 30.101344 0 0 1 11.926948 42.596241l-92.57583 157.890066h85.192481a31.805193 31.805193 0 1 1 0 63.042436H544.663933v39.756492z" p-id="15776"></path></svg>

+ 1 - 0
src/assets/icon/flag.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="1585714261653" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="14511" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M806.1 222.9c-59 0-145.5-19.8-262-94.7C468.6 79.7 395 63.8 331 63.8c-66.6 0-123 17.2-160.6 33V64.2h-50v896h50V662.9c44.9-24.3 116.1-53.8 196.7-53.8 56.4 0 117.3 14.5 177.1 55.2 111.9 76.4 197.6 96.8 257.2 96.8 68.3 0 102.4-26.8 102.4-26.8V198c-0.1 0-31.5 24.9-97.7 24.9z m47.6 480.5c-12 4-29.4 7.7-52.4 7.7-28.5 0-59.7-5.7-92.8-17.1-42.7-14.6-88.5-38.5-136.2-71-62.2-42.4-131.2-63.9-205.3-63.9-77.6 0-146.7 23.8-196.6 47.7V151.7c8.1-4 18.3-8.6 30.2-13.1 29.5-11.3 76.1-24.8 130.5-24.8 65.1 0 127.7 19 186.1 56.5 105.9 68.1 203.2 102.6 289 102.6 16.6 0 32.5-1.3 47.6-3.9v434.4z" fill="" p-id="14512"></path></svg>

+ 1 - 0
src/assets/icon/friend.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="1585705863204" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2990" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M463.659089 647.857426q-2.027723 11.152475-5.069307 17.235644t-14.194059 13.180198q-26.360396 16.221782-56.776238 26.360396t-58.29703 22.30495-48.665347 31.936634-25.853465 56.269307q-2.027723 11.152475-2.534653 21.79802t-1.520792 19.770297q-1.013861 2.027723-2.027723 3.548515t-2.027723 3.548515q-39.540594-3.041584-80.09505-7.09703t-74.518812-9.124752-57.283168-10.138614-29.40198-10.138614q-9.124752-7.09703-13.687129-42.582178t3.548515-92.261386q5.069307-31.429703 25.853465-48.158416t49.172277-26.360396 58.29703-17.742574 53.227723-22.30495q18.249505-12.166337 27.881188-22.30495t13.687129-20.784158 4.055446-21.79802-1.013861-24.332673q-2.027723-20.277228-13.687129-31.936634t-25.853465-23.825743q-8.110891-5.069307-13.687129-16.221782t-9.631683-22.30495q-4.055446-12.166337-8.110891-27.374257-6.083168-2.027723-12.166337-6.083168-5.069307-4.055446-10.645545-12.166337t-10.645545-22.30495-4.055446-26.867327 5.069307-21.79802q4.055446-11.152475 11.152475-18.249505-1.013861-32.443564 3.041584-65.90099 4.055446-27.374257 13.180198-58.80396t27.374257-56.776238q16.221782-24.332673 36.49901-39.540594t41.061386-23.825743 42.075248-11.659406 41.568317-3.041584q50.693069 0 91.247525 21.291089t60.831683 45.623762q13.180198 17.235644 16.728713 31.936634t9.631683 33.964356q-19.263366 11.152475-41.061386 32.950495t-38.019802 44.10297q-20.277228 28.388119-30.415842 62.859406t-15.207921 63.873267q-5.069307 35.485149-5.069307 70.970297-8.110891 9.124752-12.166337 20.277228-4.055446 10.138614-5.069307 23.825743t4.055446 29.908911q5.069307 17.235644 11.152475 26.360396t11.152475 14.194059q6.083168 6.083168 12.166337 8.110891 4.055446 16.221782 8.110891 30.415842 4.055446 12.166337 9.631683 24.839604t13.687129 18.756436q7.09703 6.083168 11.152475 10.138614t6.590099 7.60396 3.041584 9.631683 2.534653 16.221782zM1004.047208 834.407921q4.055446 14.194059 6.590099 34.471287t2.534653 41.061386-3.041584 39.033663-9.124752 27.374257q-4.055446 6.083168-23.825743 12.166337t-49.172277 11.152475-64.887129 9.631683-71.477228 7.60396-69.449505 5.069307-58.80396 2.027723-58.29703-2.027723-68.435644-5.069307-69.956436-6.590099-63.366337-8.110891-48.665347-9.124752-24.839604-8.617822q-8.110891-7.09703-13.180198-42.582178t3.041584-91.247525q5.069307-32.443564 25.853465-48.665347t49.172277-26.360396 58.29703-17.742574 53.227723-22.811881q18.249505-12.166337 27.881188-22.30495t14.194059-20.277228 4.562376-21.291089-1.013861-25.346535q-2.027723-20.277228-14.194059-31.936634t-26.360396-22.811881q-7.09703-6.083168-12.673267-17.235644t-9.631683-22.30495q-4.055446-12.166337-8.110891-27.374257-6.083168-2.027723-12.166337-6.083168-5.069307-4.055446-10.645545-12.166337t-10.645545-22.30495-4.055446-26.867327 5.069307-20.784158q4.055446-10.138614 11.152475-18.249505-1.013861-32.443564 3.041584-65.90099 4.055446-28.388119 12.673267-59.310891t26.867327-57.283168q16.221782-24.332673 36.49901-39.540594t41.568317-23.825743 42.582178-11.659406 40.554455-3.041584q51.706931 0 92.261386 21.291089t59.817822 45.623762q22.30495 27.374257 32.950495 61.338614t15.714851 63.366337q5.069307 34.471287 4.055446 68.942574 5.069307 4.055446 9.124752 11.152475 3.041584 6.083168 5.576238 15.714851t0.506931 23.825743q-2.027723 18.249505-8.110891 29.40198t-12.166337 17.235644q-7.09703 7.09703-16.221782 9.124752-4.055446 15.207921-8.110891 27.374257-4.055446 11.152475-10.138614 22.30495t-13.180198 16.221782q-8.110891 7.09703-14.70099 12.166337t-11.659406 10.645545-8.617822 12.673267-5.576238 17.235644q-2.027723 13.180198-1.520792 26.867327t6.590099 26.867327 19.770297 25.346535 38.019802 21.291089q21.291089 9.124752 47.144554 15.714851t49.679208 15.714851 42.582178 23.318812 26.867327 36.49901z" p-id="2991"></path></svg>

+ 1 - 0
src/assets/icon/github.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="1585668432533" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10844" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M682.215454 981.446137c-25.532318 0-42.553863-17.021545-42.553864-42.553864v-165.960067c4.255386-34.043091-8.510773-59.575409-29.787704-80.852341-12.766159-12.766159-17.021545-29.787704-8.510773-42.553864 4.255386-17.021545 21.276932-25.532318 34.043091-29.787704 123.406204-12.766159 238.301635-55.320023 238.301635-255.323181 0-46.80925-17.021545-93.6185-51.064636-131.916976-12.766159-12.766159-12.766159-29.787704-8.510772-42.553864 12.766159-34.043091 12.766159-68.086182 4.255386-102.129272-21.276932 4.255386-55.320023 17.021545-110.640045 55.320022-8.510773 8.510773-21.276932 8.510773-34.043091 4.255387-89.363113-25.532318-187.236999-25.532318-276.600112 0-12.766159 4.255386-25.532318 4.255386-38.298477-4.255387C307.741455 104.836549 269.442978 92.07039 248.166047 87.815004c-8.510773 34.043091-8.510773 68.086182 4.255386 102.129272 4.255386 17.021545 4.255386 34.043091-8.510773 42.553864-34.043091 38.298477-51.064636 85.107727-51.064636 131.916976 0 200.003158 114.895431 242.557022 238.301635 255.323181 17.021545 0 29.787704 12.766159 34.043091 29.787704 4.255386 17.021545 0 34.043091-8.510773 42.553864-21.276932 21.276932-29.787704 46.80925-29.787704 76.596954v165.960068c0 25.532318-17.021545 42.553863-42.553863 42.553863s-42.553863-17.021545-42.553864-42.553863v-72.341568c-127.66159 21.276932-182.981613-51.064636-221.28009-97.873886-17.021545-21.276932-29.787704-38.298477-46.80925-42.553864-21.276932-4.255386-38.298477-29.787704-29.787704-51.064636 4.255386-21.276932 29.787704-38.298477 51.064636-29.787704 42.553863 12.766159 68.086182 42.553863 93.6185 72.341568 34.043091 46.80925 63.830795 80.852341 153.193908 63.830795v-4.255386c0-25.532318 4.255386-55.320023 12.766159-76.596955-119.150818-25.532318-246.812408-102.129272-246.812408-327.664748 0-63.830795 21.276932-123.406204 59.575409-170.215454-17.021545-59.575409-12.766159-114.895431 12.766159-170.215454 4.255386-12.766159 12.766159-21.276932 25.532318-25.532318 17.021545-4.255386 72.341568-12.766159 187.236999 59.575409 93.6185-21.276932 191.492386-21.276932 280.855499 0 110.640045-72.341568 170.215454-63.830795 187.236999-59.575409 12.766159 4.255386 21.276932 12.766159 25.532319 25.532318 21.276932 55.320023 25.532318 110.640045 12.766159 165.960067 38.298477 46.80925 59.575409 106.384659 59.575408 170.215454 0 242.557022-144.683136 306.387817-246.812408 331.920135 8.510773 25.532318 12.766159 55.320023 12.766159 80.852341V938.892273c0 25.532318-17.021545 42.553863-42.553863 42.553864z" p-id="10845" fill="#1296db"></path></svg>

+ 1 - 0
src/assets/icon/github2.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="1586270279566" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1262" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M347.8 794.8c0 4-4.6 7.2-10.4 7.2-6.6 0.6-11.2-2.6-11.2-7.2 0-4 4.6-7.2 10.4-7.2 6-0.6 11.2 2.6 11.2 7.2z m-62.2-9c-1.4 4 2.6 8.6 8.6 9.8 5.2 2 11.2 0 12.4-4s-2.6-8.6-8.6-10.4c-5.2-1.4-11 0.6-12.4 4.6z m88.4-3.4c-5.8 1.4-9.8 5.2-9.2 9.8 0.6 4 5.8 6.6 11.8 5.2 5.8-1.4 9.8-5.2 9.2-9.2-0.6-3.8-6-6.4-11.8-5.8zM505.6 16C228.2 16 16 226.6 16 504c0 221.8 139.6 411.6 339 478.4 25.6 4.6 34.6-11.2 34.6-24.2 0-12.4-0.6-80.8-0.6-122.8 0 0-140 30-169.4-59.6 0 0-22.8-58.2-55.6-73.2 0 0-45.8-31.4 3.2-30.8 0 0 49.8 4 77.2 51.6 43.8 77.2 117.2 55 145.8 41.8 4.6-32 17.6-54.2 32-67.4-111.8-12.4-224.6-28.6-224.6-221 0-55 15.2-82.6 47.2-117.8-5.2-13-22.2-66.6 5.2-135.8 41.8-13 138 54 138 54 40-11.2 83-17 125.6-17s85.6 5.8 125.6 17c0 0 96.2-67.2 138-54 27.4 69.4 10.4 122.8 5.2 135.8 32 35.4 51.6 63 51.6 117.8 0 193-117.8 208.4-229.6 221 18.4 15.8 34 45.8 34 92.8 0 67.4-0.6 150.8-0.6 167.2 0 13 9.2 28.8 34.6 24.2C872.4 915.6 1008 725.8 1008 504 1008 226.6 783 16 505.6 16zM210.4 705.8c-2.6 2-2 6.6 1.4 10.4 3.2 3.2 7.8 4.6 10.4 2 2.6-2 2-6.6-1.4-10.4-3.2-3.2-7.8-4.6-10.4-2z m-21.6-16.2c-1.4 2.6 0.6 5.8 4.6 7.8 3.2 2 7.2 1.4 8.6-1.4 1.4-2.6-0.6-5.8-4.6-7.8-4-1.2-7.2-0.6-8.6 1.4z m64.8 71.2c-3.2 2.6-2 8.6 2.6 12.4 4.6 4.6 10.4 5.2 13 2 2.6-2.6 1.4-8.6-2.6-12.4-4.4-4.6-10.4-5.2-13-2z m-22.8-29.4c-3.2 2-3.2 7.2 0 11.8 3.2 4.6 8.6 6.6 11.2 4.6 3.2-2.6 3.2-7.8 0-12.4-2.8-4.6-8-6.6-11.2-4z"  p-id="1263"></path></svg>

+ 1 - 0
src/assets/icon/group.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="1585971160132" class="icon" viewBox="0 0 1389 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="36786" xmlns:xlink="http://www.w3.org/1999/xlink" width="86.8125" height="64"><defs><style type="text/css"></style></defs><path d="M334.010363 899.782828v-25.635107c0-77.093814 128.364028-148.721319 241.554335-190.001381a89.722874 89.722874 0 0 0 25.729354-102.823168A356.064095 356.064095 0 0 1 503.560207 339.674591 194.430976 194.430976 0 0 1 704.022973 129.127426 197.069884 197.069884 0 0 1 904.485739 339.674591a360.210951 360.210951 0 0 1-102.823168 241.648581c-25.635107 66.632429 10.178645 102.823168 15.267968 102.823168 113.09606 35.813752 246.737904 113.09606 251.827227 190.001381v25.635107c0 103.105908-190.001381 123.368952-364.734793 123.368952-179.728488 0-370.012609-25.729354-370.01261-123.368952z m539.845193-282.74015a450.405058 450.405058 0 0 0 107.818244-277.55658 290.46838 290.46838 0 0 0-102.728921-231.187196 166.628195 166.628195 0 0 1 164.17778-108.100984 182.83863 182.83863 0 0 1 185.289045 200.839753 333.727623 333.727623 0 0 1-87.5552 226.19212c-20.640031 61.448859 10.461386 72.004491 15.550708 72.004491 113.09606 35.813752 236.276518 102.446181 231.187196 179.822735v25.635107c0 76.999567-123.463199 107.818244-256.91655 113.09606-36.096492-102.917414-169.64409-169.832583-256.822302-200.557013z m-873.761309 87.5552V678.962771c0-77.376554 123.463199-144.008983 231.187195-179.822735 5.089323 0 35.907999-10.461386 15.550709-72.004492a332.031182 332.031182 0 0 1-87.5552-226.19212A188.493433 188.493433 0 0 1 344.565996 0.103671a166.910935 166.910935 0 0 1 164.17778 108.100984 289.33742 289.33742 0 0 0-102.728921 231.187196 450.405058 450.405058 0 0 0 107.818244 277.55658c-87.178213 30.72443-221.00855 97.639598-256.91655 200.36852C123.463199 812.510368 0 781.785938 0 704.786371z" p-id="36787"></path></svg>

+ 1 - 0
src/assets/icon/herd.svg View File

@@ -0,0 +1 @@
1
+<svg t="1591712944011" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7673" width="128" height="128"><path d="M508.9 467.1h3c69.3-0.8 125.3-56.1 125.3-124.1v-41.4c0-68.6-56.8-124.2-126.8-124.2S383.6 233 383.6 301.6V343c0 68 56 123.3 125.3 124.1z m246 18.1c45 0 81.5-34.8 81.5-77.6v-26c0-42.9-36.5-77.6-81.5-77.6s-81.5 34.8-81.5 77.6v25.9c0 42.9 36.5 77.7 81.5 77.7z m-489 0c45 0 81.5-34.8 81.5-77.6v-26c0-42.9-36.5-77.6-81.5-77.6s-81.5 34.8-81.5 77.6v25.9c-0.1 42.9 36.4 77.7 81.5 77.7z m-117.6 79c-21.4 10.9-36.3 35.3-36.3 63.9V660c0 21.1 12.2 38.7 28.9 44.5 26 6.8 52.6 11.3 79.8 13.8V662c0-50.3 18.2-94.4 45.9-122.3h-0.7c-41.4-0.2-81.1 8.6-117.6 24.5z m724.5 0.1c-36.6-16-76.3-24.8-117.9-24.8h-0.6c27.8 28 45.9 72.1 45.9 122.3v56.4c27.1-2.5 53.8-7 79.6-13.8 16.7-5.7 29.1-23.4 29.1-44.6v-31.6c0-28.6-14.9-52.9-36.1-63.9z m-182.2-3.2c-56-25.7-116.7-39.8-180.2-39.8-63.4 0-123.9 14.1-179.8 39.6C297.9 578.2 275 617.3 275 663v51c0 33.8 18.7 62.1 44.2 71.3 61.6 16.7 125.5 25.9 191.3 25.9 65.7 0 129.5-9 191-25.8 25.7-9.1 44.4-37.5 44.4-71.3v-51c0-45.6-22.8-84.6-55.3-102z" p-id="7674"></path></svg>

+ 1 - 0
src/assets/icon/horn.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="1585714555316" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="865" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M168.806 511.66A263.12 263.12 0 0 0 360.72 764.61a33.907 33.907 0 0 0 42.045-33.908 33.907 33.907 0 0 0-24.074-33.907 194.628 194.628 0 0 1 0-374.676 33.907 33.907 0 0 0 24.074-33.907 33.907 33.907 0 0 0-42.045-33.907A263.12 263.12 0 0 0 168.806 511.66zM494.994 1024a46.114 46.114 0 0 0 27.804-12.546l10.85-9.494 109.86-89.515L799.82 783.936 940.535 783.93599999a67.815 67.815 0 0 0 67.815-67.81399999l0-400.784a67.815 67.815 0 0 0-67.815-67.815l-131.899 0-160.381-131.90000001-111.216-91.20999999-14.58-11.86700001A46.114 46.114 0 0 0 494.655 0c-11.868 0-20.006 8.816-23.057 24.413a65.78 65.78 0 0 0 0 12.546L471.598 986.702a67.815 67.815 0 0 0 0 14.92C475.328 1016.201 483.804 1024 494.994 1024z m208.19-775.12l81.039 67.814L940.535 316.694 940.53500001 716.122l-164.78900001 0-78.665 64.424-158.686 130.543L538.395 113.25z" p-id="866"></path><path d="M290.194 952.456a33.907 33.907 0 0 0 48.826-30.178 33.907 33.907 0 0 0-19.327-30.516 421.128 421.128 0 0 1 0-756.133 33.907 33.907 0 0 0 19.327-30.516 33.907 33.907 0 0 0-48.826-30.856 488.943 488.943 0 0 0 0 878.538z" p-id="867"></path></svg>

+ 1 - 0
src/assets/icon/laugh.svg View File

@@ -0,0 +1 @@
1
+<svg t="1591714761085" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9647" width="128" height="128"><path d="M511.601422 63.74379c-247.565399 0-448.25621 200.694905-448.25621 448.25621 0 247.570515 200.690812 448.257234 448.25621 448.257234 247.566422 0 448.25314-200.686718 448.25314-448.257234C959.854563 264.437671 759.167844 63.74379 511.601422 63.74379zM639.593492 318.832536c8.187473-8.18338 19.071358-12.694113 30.646997-12.694113 23.899316 0 43.341111 19.443841 43.341111 43.344181 0 23.899316-19.440771 43.344181-43.341111 43.344181-23.89727 0-43.338041-19.444864-43.338041-43.344181C626.900402 337.910033 631.407042 327.022055 639.593492 318.832536zM361.954147 306.137399c23.899316 0 43.344181 19.443841 43.344181 43.344181 0 23.899316-19.444864 43.344181-43.344181 43.344181s-43.341111-19.444864-43.341111-43.344181C318.61406 325.582263 338.054831 306.137399 361.954147 306.137399zM740.697167 621.84885c-56.013735 67.348897-138.322345 105.97052-225.819119 105.97052-91.946109 0-176.823218-41.826618-232.873792-114.761744-3.466961-4.517897-4.977361-10.111289-4.245697-15.745612 0.729617-5.64865 3.621481-10.66899 8.126075-14.127765 3.755534-2.908236 8.252964-4.440126 13.008268-4.440126 6.598278 0 12.914124 3.113921 16.885576 8.324596 47.923476 62.342884 120.491235 98.106412 199.095477 98.106412 74.812893 0 145.18259-33.031301 193.07025-90.62195 4.059456-4.859681 10.035564-7.647167 16.397459-7.647167 4.966105 0 9.80225 1.74883 13.615089 4.919033 4.371564 3.629667 7.059789 8.756431 7.583722 14.426571C746.060315 611.926874 744.341161 617.461937 740.697167 621.84885z" p-id="9648"></path></svg>

+ 1 - 0
src/assets/icon/money.svg View File

@@ -0,0 +1 @@
1
+<svg t="1591670789244" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3427" width="128" height="128"><path d="M958.057333 64.612385l-164.85323 0-185.357328 249.481452c-49.432885 67.61016-79.667985 112.55149-90.7073 134.823989l-3.15566 0c-32.609691-54.160279-124.625704-182.258429-276.066827-384.305441l-174.316014 0 324.180206 406.776805L121.968801 471.38919l0 89.881061 311.559762 0 0 123.878011L121.968801 685.148261l0 91.034279 311.559762 0 0 180.341928 154.594585 0L588.123149 776.18274l300.518249 0 0-91.034279L588.125547 685.148461l0-123.878011 300.518249 0 0-89.881061L630.721467 471.38939 958.057333 64.612385z" p-id="3428"></path></svg>

+ 1 - 0
src/assets/icon/news.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="1585713715390" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="14046" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M656.695652 857.043478a133.565217 133.565217 0 1 1-267.130435 0h-244.869565l66.782609-133.565217v-333.913044h2.470956c12.889043-116.224 91.848348-212.257391 198.500174-249.87826-0.26713-2.025739-0.623304-4.029217-0.623304-6.12174a100.173913 100.173913 0 0 1 200.347826 0c0 2.092522-0.356174 4.096-0.623304 6.12174 106.651826 37.62087 185.61113 133.654261 198.500174 249.87826h2.470956v333.913044l66.782609 133.565217h-222.608696z m-133.565217 89.043479a89.043478 89.043478 0 0 0 89.043478-89.043479h-178.086956a89.043478 89.043478 0 0 0 89.043478 89.043479z m-11.130435-868.173914a55.474087 55.474087 0 0 0-55.05113 49.619479A303.059478 303.059478 0 0 1 512 122.434783c18.810435 0 37.197913 1.80313 55.05113 5.097739A55.474087 55.474087 0 0 0 512 77.913043z m256 645.565218v-311.652174h-0.556522c-5.87687-136.192-117.826783-244.869565-255.443478-244.869565-137.616696 0-249.566609 108.677565-255.443478 244.869565H256v311.652174l-44.521739 89.043478h601.043478l-44.521739-89.043478z"  p-id="14047"></path></svg>

+ 1 - 0
src/assets/icon/nodejs.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="1585919607983" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4602" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M512 78.933333c-11.52 0-23.466667 2.986667-33.28 8.533334l-317.44 183.466666c-20.48 11.946667-33.28 34.133333-33.28 58.026667v366.08c0 23.893333 12.8 46.08 33.28 58.026667l83.2 47.786666c40.533333 19.626667 54.186667 20.053333 72.96 20.053334 59.733333 0 94.293333-36.266667 94.293333-99.413334V360.106667c0-5.12-4.266667-9.386667-9.386666-9.386667H362.666667c-5.546667 0-9.813333 4.266667-9.813334 9.386667v361.386666c0 28.16-29.013333 55.893333-75.52 32.426667L189.866667 704a11.093333 11.093333 0 0 1-4.693334-8.96V328.96c0-3.84 1.706667-7.253333 4.693334-8.96l317.44-183.04c2.56-1.706667 6.826667-1.706667 9.386666 0l317.44 183.04c2.986667 1.706667 4.693333 5.12 4.693334 8.96v366.08c0 3.413333-1.706667 6.826667-4.693334 8.96l-317.44 183.04c-2.56 1.706667-6.826667 1.706667-9.813333 0L426.666667 838.4c-3.413333-1.28-6.826667-1.706667-8.96-0.426667-22.613333 12.8-26.88 15.36-47.786667 21.76-5.12 1.706667-13.226667 4.693333 2.986667 13.653334l105.813333 62.72c10.24 5.973333 21.333333 8.96 33.28 8.96s23.04-2.986667 33.28-8.96l317.44-183.04c20.48-11.946667 33.28-34.133333 33.28-58.026667V328.96c0-23.893333-12.8-46.08-33.28-58.026667l-317.44-183.466666c-9.813333-5.546667-21.333333-8.533333-33.28-8.533334M597.333333 341.333333c-90.453333 0-144.64 37.973333-144.64 101.973334 0 68.693333 53.76 88.746667 140.8 97.28 103.68 10.24 111.786667 25.6 111.786667 46.08 0 35.413333-28.586667 50.346667-95.146667 50.346666-84.48 0-102.4-20.906667-108.8-62.72a9.642667 9.642667 0 0 0-9.386666-7.68h-40.96c-5.12 0-8.96 3.84-8.96 9.386667 0 52.906667 29.013333 116.906667 168.106666 116.906667 100.266667 0 157.866667-39.68 157.866667-108.8 0-68.693333-46.08-86.613333-143.786667-99.84-98.56-12.8-108.373333-19.626667-108.373333-42.666667 0-19.2 8.533333-44.8 81.493333-44.8 64 0 89.173333 14.08 98.986667 58.026667 0.853333 4.266667 4.693333 7.253333 8.96 7.253333h41.386667c2.133333 0 4.693333-0.853333 6.4-2.986667 1.706667-1.706667 2.986667-4.266667 2.133333-6.826666C749.226667 376.32 698.88 341.333333 597.333333 341.333333z" fill="" p-id="4603"></path></svg>

+ 1 - 0
src/assets/icon/operating.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="1585967668993" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3407" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><defs><style type="text/css"></style></defs><path d="M192.124455 135.876923H84.210609A13.233231 13.233231 0 0 1 70.662302 122.407385V14.493538C70.662302 6.695385 76.491225 0.866462 84.13184 0.866462h107.992615c7.640615 0 13.548308 5.828923 13.548308 13.469538v107.913846a13.233231 13.233231 0 0 1-13.548308 13.548308z m809.826462 0H319.573071a13.233231 13.233231 0 0 1-13.548308-13.469538V14.493538c0-7.719385 5.907692-13.548308 13.548308-13.548307h682.456615c7.719385 0 13.548308 5.828923 13.548308 13.469538v107.913846a13.233231 13.233231 0 0 1-13.548308 13.548308zM192.203225 541.696H84.053071A13.233231 13.233231 0 0 1 70.662302 528.226462v-107.913847c0-7.719385 5.828923-13.548308 13.469538-13.548307h107.992615c7.640615 0 13.548308 5.828923 13.548308 13.469538v107.992616a13.548308 13.548308 0 0 1-13.548308 13.469538z m809.747692 0H319.573071a13.233231 13.233231 0 0 1-13.548308-13.469538v-107.913847c0-7.719385 5.907692-13.548308 13.548308-13.548307h682.456615c7.719385 0 13.548308 5.828923 13.548308 13.469538v107.992616a13.548308 13.548308 0 0 1-13.548308 13.469538zM192.124455 947.593846H84.210609A13.233231 13.233231 0 0 1 70.662302 933.966769v-107.913846c0-7.719385 5.828923-13.548308 13.469538-13.548308h107.992615c7.640615 0 13.548308 5.828923 13.548308 13.469539v107.992615a13.548308 13.548308 0 0 1-13.548308 13.469539z m809.826462 0H319.573071a13.233231 13.233231 0 0 1-13.548308-13.548308v-107.913846c0-7.719385 5.907692-13.548308 13.548308-13.548307h682.456615c7.719385 0 13.548308 5.828923 13.548308 13.469538v107.992615a13.548308 13.548308 0 0 1-13.548308 13.469539z"  p-id="3408"></path></svg>

+ 1 - 0
src/assets/icon/order.svg View File

@@ -0,0 +1 @@
1
+<svg t="1591696394206" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10345" width="128" height="128"><path d="M855.62878 649.542586c-80.906681 17.496489-247.244081 214.127845-301.189713 310.267463-76.420507-91.77317-166.326143-161.677263-229.261521-183.544293l148.346653-87.383186 71.925123 135.463228c0 0 116.878964-275.29188 301.187667-367.06505C842.151837 522.819416 824.169277 579.636446 855.62878 649.542586zM738.728326 224.027309c0-15.416108-12.504802-27.90249-27.921933-27.90249L599.139128 196.124819l0-55.847959 137.843438 0c30.834262 0 57.583486 24.991184 57.583486 55.847959l0 265.954211c-31.728632 12.738116-55.837726 39.34203-55.837726 39.34203L738.728326 224.027309zM654.968667 224.027309c15.427364 0 27.92398 12.507872 27.92398 27.925003 0 15.418154 0 55.846936 0 55.846936L290.282804 307.799248c0 0 0-40.428781 0-55.846936 0-15.416108 12.494569-27.925003 27.912723-27.925003l83.761706 0c0 0 0.329505-35.631522 0.329505-80.992639 0-47.108924 36.313044-86.509283 83.420945-86.509283 47.108924 0 86.450954 41.399899 86.450954 86.780459 0 48.856731-0.942465 80.721463-0.942465 80.721463L654.968667 224.027309zM485.707682 140.27686c-15.416108 0-27.913746 12.504802-27.913746 27.92398 0 15.417131 12.496615 27.92398 27.913746 27.92398 15.418154 0 27.92398-12.506848 27.92398-27.92398C513.631662 152.781662 501.125837 140.27686 485.707682 140.27686zM234.443032 224.027309l0 643.874493c0 15.419178 12.496615 27.92398 27.91477 27.92398l165.765371 0c30.273491 16.117073 49.788963 37.418214 60.712757 55.848982L234.443032 951.674765c-30.845519 0-55.835679-25.01165-55.835679-55.848982L178.607352 196.123796c0-30.856775 24.991184-55.847959 55.835679-55.847959l141.339052 0 0 55.847959-113.423259 0C246.939647 196.123796 234.443032 208.611202 234.443032 224.027309zM710.806393 895.825782c15.417131 0 27.921933-12.504802 27.921933-27.92398l0-92.50688c18.611893-18.897396 37.3517-36.06131 55.837726-51.265594L794.566052 895.825782c0 30.837332-26.750247 55.848982-57.583486 55.848982L594.829985 951.674765c12.192693-18.294668 25.429159-37.012985 39.525202-55.848982L710.806393 895.825782z" p-id="10346"></path></svg>

+ 1 - 0
src/assets/icon/react.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="1585919589047" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3736" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M836.8 356.8c-11.2-3.2-22.4-8-33.6-11.2 3.2-8 3.2-14.4 4.8-22.4 25.6-120 8-216-48-246.4-52.8-30.4-137.6 0-224 75.2-8 8-16 14.4-25.6 22.4l-16-16C401.6 76.8 312 43.2 256 75.2c-52.8 30.4-67.2 120-44.8 232 3.2 11.2 4.8 22.4 8 33.6-14.4 3.2-25.6 8-36.8 11.2C78.4 387.2 0 446.4 0 508.8s81.6 126.4 193.6 161.6c8 3.2 16 4.8 27.2 8-3.2 11.2-4.8 25.6-8 36.8-22.4 112-4.8 198.4 48 228.8 52.8 30.4 145.6 0 232-78.4 8-4.8 14.4-14.4 22.4-19.2 8 8 16 16 27.2 25.6C628.8 944 713.6 976 763.2 944c52.8-30.4 72-126.4 48-240-3.2-8-3.2-16-4.8-27.2 4.8-3.2 14.4-3.2 19.2-4.8C940.8 630.4 1024 569.6 1024 508.8c0-56-78.4-115.2-187.2-152z m-272-171.2c75.2-64 142.4-89.6 176-72 33.6 19.2 48 97.6 25.6 201.6-3.2 4.8-3.2 14.4-4.8 19.2-44.8-11.2-89.6-16-134.4-22.4-25.6-36.8-52.8-72-83.2-105.6 6.4-6.4 12.8-11.2 20.8-20.8zM336 617.6c11.2 16 19.2 33.6 30.4 52.8-30.4-3.2-60.8-8-92.8-14.4 8-27.2 19.2-59.2 33.6-89.6 9.6 14.4 17.6 33.6 28.8 51.2z m-62.4-241.6c27.2-4.8 59.2-11.2 92.8-16-11.2 16-22.4 33.6-30.4 49.6-11.2 16-19.2 33.6-27.2 52.8-14.4-30.4-25.6-57.6-35.2-86.4z m54.4 137.6c14.4-27.2 27.2-56 41.6-81.6 14.4-27.2 30.4-52.8 48-78.4 30.4-1.6 60.8-1.6 91.2-1.6s60.8 0 92.8 3.2c16 25.6 33.6 49.6 48 78.4 16 25.6 30.4 52.8 44.8 81.6-14.4 27.2-27.2 56-41.6 81.6-14.4 27.2-30.4 52.8-48 78.4-30.4 3.2-60.8 3.2-92.8 3.2s-60.8 0-92.8-3.2c-16-25.6-33.6-49.6-49.6-78.4-14.4-27.2-28.8-54.4-41.6-83.2z m363.2 104c11.2-16 19.2-36.8 27.2-52.8 14.4 27.2 25.6 59.2 33.6 89.6-30.4 8-60.8 11.2-94.4 16 11.2-19.2 22.4-36.8 33.6-52.8z m27.2-153.6c-8-16-19.2-36.8-27.2-52.8-11.2-16-19.2-33.6-30.4-49.6 33.6 3.2 64 8 92.8 16-12.8 30.4-24 57.6-35.2 86.4zM512 240c22.4 22.4 41.6 48 59.2 72-38.4-3.2-78.4-3.2-120 0 22.4-27.2 41.6-52.8 60.8-72zM280 116.8c33.6-19.2 108.8 8 187.2 78.4 4.8 4.8 11.2 8 14.4 14.4-30.4 33.6-59.2 70.4-86.4 105.6-44.8 3.2-89.6 11.2-134.4 19.2-3.2-11.2-4.8-19.2-8-30.4-14.4-97.6-3.2-171.2 27.2-187.2z m-48 524.8c-8-3.2-16-4.8-25.6-8-41.6-14.4-92.8-33.6-126.4-60.8-19.2-14.4-33.6-36.8-36.8-59.2 0-36.8 64-83.2 153.6-115.2 11.2-3.2 22.4-8 33.6-11.2 14.4 44.8 30.4 86.4 49.6 126.4-17.6 41.6-33.6 84.8-48 128zM464 838.4c-33.6 30.4-70.4 52.8-112 70.4-22.4 11.2-48 11.2-70.4 3.2-30.4-19.2-44.8-89.6-27.2-184 3.2-11.2 4.8-22.4 8-33.6 44.8 8 89.6 16 137.6 19.2 25.6 36.8 56 72 86.4 105.6-8 8-16 12.8-22.4 19.2z m51.2-48c-19.2-22.4-41.6-48-60.8-72h59.2c19.2 0 41.6 0 60.8-3.2-20.8 27.2-40 52.8-59.2 75.2z m259.2 59.2c-3.2 25.6-14.4 48-33.6 60.8-30.4 19.2-100.8-4.8-172.8-67.2-8-8-16-14.4-25.6-22.4 30.4-33.6 59.2-70.4 83.2-105.6 44.8-3.2 92.8-11.2 137.6-22.4 3.2 8 3.2 16 4.8 25.6 12.8 41.6 12.8 86.4 6.4 131.2z m36.8-216c-4.8 3.2-11.2 3.2-16 4.8-14.4-41.6-30.4-83.2-49.6-126.4 19.2-41.6 36.8-83.2 49.6-126.4 11.2 3.2 19.2 4.8 30.4 8 92.8 30.4 160 78.4 160 115.2-3.2 44.8-73.6 94.4-174.4 124.8zM512 606.4c49.6 0 92.8-41.6 92.8-92.8 0-49.6-41.6-92.8-92.8-92.8s-92.8 41.6-92.8 92.8c0 51.2 43.2 92.8 92.8 92.8z"  p-id="3737"></path></svg>

+ 1 - 0
src/assets/icon/reduction.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="1586270995099" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3639" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M879.787 101.787c11.716-11.716 30.71-11.716 42.426 0 11.716 11.716 11.716 30.71 0 42.426l-262 262c-11.716 11.716-30.71 11.716-42.426 0-11.716-11.716-11.716-30.71 0-42.426l262-262z m-517 517c11.716-11.716 30.71-11.716 42.426 0 11.716 11.716 11.716 30.71 0 42.426l-261 261c-11.716 11.716-30.71 11.716-42.426 0-11.716-11.716-11.716-30.71 0-42.426l261-261zM144.213 101.787c-11.716-11.716-30.71-11.716-42.426 0-11.716 11.716-11.716 30.71 0 42.426l261 261c11.716 11.716 30.71 11.716 42.426 0 11.716-11.716 11.716-30.71 0-42.426l-261-261z m515 515c-11.716-11.716-30.71-11.716-42.426 0-11.716 11.716-11.716 30.71 0 42.426l263 263c11.716 11.716 30.71 11.716 42.426 0 11.716-11.716 11.716-30.71 0-42.426l-263-263z"  p-id="3640"></path><path d="M851.573 366.064c16.569 0 30 13.431 30 30 0 16.568-13.431 30-30 30H658c-33.137 0-60-26.863-60-60V172c0-16.569 13.431-30 30-30 16.569 0 30 13.431 30 30v194.064h193.573zM658 851.866c0 16.569-13.431 30-30 30-16.569 0-30-13.431-30-30V657c0-33.137 26.863-60 60-60h194.573c16.569 0 30 13.431 30 30 0 16.569-13.431 30-30 30H658v194.866zM173 658c-16.569 0-30-13.431-30-30 0-16.569 13.431-30 30-30h194.504c33.137 0 60 26.863 60 60v193.866c0 16.569-13.432 30-30 30-16.569 0-30-13.431-30-30V658H173z m194.504-486c0-16.569 13.431-30 30-30 16.568 0 30 13.431 30 30v194.064c0 33.137-26.863 60-60 60H173c-16.569 0-30-13.432-30-30 0-16.569 13.431-30 30-30h194.504V172z" p-id="3641"></path></svg>

+ 1 - 0
src/assets/icon/refund.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="1585970239231" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="20420" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><defs><style type="text/css"></style></defs><path d="M1020.439 264.843H3.561V116.542c0-27.3 21.971-49.434 49.078-49.434h918.713c13.01 0 25.505 5.208 34.708 14.475 9.203 9.273 14.379 21.847 14.379 34.959v148.301z m0 98.861v543.754c0 27.304-21.981 49.434-49.087 49.434H52.639a48.911 48.911 0 0 1-34.708-14.475c-9.212-9.273-14.37-21.841-14.37-34.959V363.704h1016.878zM445.365 610.862V487.285L224.458 709.73h550.525v-98.867H445.365z m0 0" p-id="20421"></path></svg>

+ 1 - 0
src/assets/icon/refuse.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="1585707534504" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7641" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M512 62C264.5 62 62 264.5 62 512s202.5 450 450 450 450-202.5 450-450S759.5 62 512 62z m0 82.5c84.375 0 161.25 28.125 223.125 76.875l-513.75 513.75C172.625 673.25 144.5 596.375 144.5 512c0-202.5 165-367.5 367.5-367.5z m0 735c-90 0-170.625-31.875-234.375-84.375l517.5-517.5c52.5 63.75 84.375 146.25 84.375 234.375 0 202.5-165 367.5-367.5 367.5z" p-id="7642"></path></svg>

+ 1 - 0
src/assets/icon/registration.svg View File

@@ -0,0 +1 @@
1
+<svg t="1591696853585" class="icon" viewBox="0 0 1399 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1368" width="128" height="128"><path d="M885.43050227 532.27045762c-106.60161103 73.28053249-177.21710347 195.8723851-177.21710345 335.77892399 0 74.62112785 19.99587828 143.91217559 54.62524954 203.86750655H143.24100989c-25.32595838 0-45.30568471-21.32032169-45.30568472-49.29516946v-61.29592631c0-3.98948474 1.32444469-9.31956484 2.66504006-14.64964624 13.32520154-41.30004802 41.30004802-77.28616789 83.95684464-109.26665107 33.30492787-23.98536302 74.60497589-45.30568471 123.9162973-62.62037099 75.94557254-26.65040308 155.89678048-37.31056457 182.54718356-39.97560461 1.32444469 0-1.32444469-69.29104774 0-70.63164312 0 0 0-25.30980643-14.64964495-41.31619997 0 0 0-1.32444469-1.32444469-1.3244447-43.98124002-37.31056457-81.27565263-89.27077408-107.92605571-151.90729572-1.32444469-1.32444469-2.66504004-2.66504004-3.98948475-2.66504136-38.65115993-5.3300801-73.29668316-46.64628137-85.28128804-101.27153092-13.32520154-59.97148291 1.32444469-117.26177251 37.31056328-139.90653889 1.32444469-1.34059664 2.66504004-2.66504004 2.66504004-5.3300801-1.32444469-114.59673246 25.32595838-206.53254659 82.6162493-271.8341096 70.61549114-81.27565263 169.22198202-98.60649087 241.1780698-98.60649087 70.61549114 0 170.56257867 17.33083824 243.84310986 101.27153093 55.96584621 65.28541105 83.95684465 155.89678048 82.6162493 271.81795764 0 1.32444469 1.34059664 4.0056367 2.66504005 5.33008139 34.64552323 22.64476638 50.63576481 78.61061259 37.31056456 139.9065389-12.00075684 54.62524957-47.97072476 95.94145083-85.28128932 101.27153091-1.32444469 0-4.0056367 1.32444469-4.00563671 2.66504005-10.67631344 21.33647363-21.3526256 41.33235193-33.33723048 59.98763357" p-id="1369"></path><path d="M1115.94841059 1173.18841907c-169.22198202 0-305.13903747-137.24149884-305.13903617-305.13903746 0-169.22198202 137.24149884-305.13903747 305.13903617-305.13903617 167.89753861 0 305.13903747 137.24149884 305.13903746 305.13903617 1.32444469 169.22198202-135.91705414 305.13903747-305.13903746 305.13903746m127.921934-347.77968082h-83.94069268v-83.95684595c0-23.98536302-18.65528164-42.64064466-42.64064467-42.64064466-23.98536302 0-42.64064466 18.65528164-42.64064467 42.64064466v83.95684595h-85.28128933c-23.98536302 0-42.64064466 18.65528164-42.64064467 42.64064336 0 23.98536302 18.65528164 42.64064466 42.64064467 42.64064467h85.28128933V995.97131561c0 23.98536302 18.65528164 42.64064466 42.64064467 42.64064468 23.98536302 0 42.64064466-18.65528164 42.64064467-42.64064468v-85.28128933h83.94069268c23.98536302 0 42.64064466-18.65528164 42.64064468-42.64064467 0-23.98536302-18.65528164-42.64064466-42.64064468-42.64064336z" p-id="1370"></path></svg>

+ 1 - 0
src/assets/icon/sales.svg View File

@@ -0,0 +1 @@
1
+<svg t="1591696292213" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6816" width="128" height="128"><path d="M928 12.8h-832C51.2 12.8 12.8 51.2 12.8 96v832c0 44.8 38.4 83.2 83.2 83.2h832c44.8 0 83.2-38.4 83.2-83.2v-832c0-44.8-38.4-83.2-83.2-83.2z m-147.2 518.4c-19.2 128-134.4 230.4-268.8 230.4s-249.6-102.4-268.8-230.4c-25.6-6.4-44.8-32-44.8-57.6 0-32 25.6-64 64-64s64 25.6 64 64c0 25.6-12.8 51.2-38.4 57.6 19.2 108.8 115.2 192 224 192s211.2-83.2 224-192c-19.2-12.8-32-32-32-57.6 0-32 25.6-64 64-64 32 0 64 25.6 64 64-6.4 25.6-25.6 51.2-51.2 57.6z m172.8-371.2c0 25.6-19.2 44.8-44.8 44.8H115.2c-25.6 0-44.8-19.2-44.8-44.8v-44.8c0-25.6 19.2-44.8 44.8-44.8h793.6c25.6 0 44.8 19.2 44.8 44.8v44.8z"  p-id="6817"></path></svg>

+ 1 - 0
src/assets/icon/screen.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="1586270353079" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3069" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M131.413333 85.333333h142.933334a32 32 0 1 0 0-64H54.186667a32 32 0 0 0-32 32v221.013334a32 32 0 1 0 64 0V131.413333l344.32 344.32a32 32 0 0 0 45.226666-45.226666zM969.813333 717.653333a32 32 0 0 0-32 32v142.506667l-344.32-344.32a32 32 0 0 0-45.226666 45.226667l344.32 345.6h-142.933334a32 32 0 0 0 0 64h220.16a32 32 0 0 0 32-32v-221.013334a32 32 0 0 0-32-32zM999.253333 42.666667a32 32 0 0 0-29.44-19.626667h-220.16a32 32 0 1 0 0 64h142.506667l-344.32 344.32a32 32 0 1 0 45.226667 45.226667L938.666667 131.413333v142.933334a32 32 0 1 0 64 0V54.186667a32 32 0 0 0-3.413334-11.52zM430.506667 548.266667L85.333333 892.586667v-142.933334a32 32 0 1 0-64 0v220.16a32 32 0 0 0 32 32h221.013334a32 32 0 1 0 0-64H131.413333l344.32-344.32a32 32 0 0 0-45.226666-45.226666z"  p-id="3070"></path></svg>

+ 1 - 0
src/assets/icon/shelves.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="1585968434943" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11052" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><defs><style type="text/css"></style></defs><path d="M721.329 104.684c13.44-12.544 35.335-12.544 48.832 0L949.92 300.18c13.44 12.544 13.44 32.816 0 45.304l-122.304 3.304v345.968c0 16.968-14.952 30.856-33.264 30.856h-97.159c-18.313 0-33.264-13.888-33.264-30.856V348.787L541.4 345.483c-13.496-12.544-13.496-32.816 0-45.304l179.929-195.495zM98.72 474.732h411.824c-0.112-11.649-0.28-23.408-0.504-35.28a5829.023 5829.023 0 0 1-0.503-43.344c-0.056-8.624-0.113-17.135-0.113-25.592v-3.92H98.72c-19.152 0-34.72 15.512-34.72 34.665v38.752c0 19.15 15.512 34.719 34.72 34.719zM98.72 701.812h241.136c-0.056-0.056-0.056-0.056-0.056-0.112h170.744c-0.112-11.649-0.28-23.408-0.504-35.28a2858.722 2858.722 0 0 1-0.503-43.344c-0.056-8.568-0.113-17.135-0.113-25.592v-3.92H98.72c-19.152 0-34.72 15.512-34.72 34.665V667.093c0 19.207 15.512 34.719 34.72 34.719zM922.816 820.643H98.72c-19.152 0-34.72 15.513-34.72 34.665v38.752c0 19.152 15.512 34.664 34.72 34.664h824.152c19.153 0 34.665-15.512 34.665-34.664v-38.752c0-19.152-15.569-34.665-34.721-34.665zM98.72 139.627H510.6l-12.375 16.576a9207.86 9207.86 0 0 0-33.993 46.032l-33.599 45.528H98.72c-19.152 0-34.72-15.512-34.72-34.665v-38.752c0-19.15 15.512-34.719 34.72-34.719z" fill="" p-id="11053"></path></svg>

+ 1 - 0
src/assets/icon/ship.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="1585970463113" class="icon" viewBox="0 0 1025 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="32766" xmlns:xlink="http://www.w3.org/1999/xlink" width="64.0625" height="64"><defs><style type="text/css"></style></defs><path d="M1.125275 980.339341c0 23.405714 19.12967 42.535385 42.535384 42.535384h937.803956c23.405714 0 42.535385-19.12967 42.535385-42.535384v-724.676923H1.125275v724.676923z m595.720439-383.493627h256.787693V681.916484H596.845714v-85.07077z m-85.295824 170.366594h342.083517v85.295824h-342.083517v-85.295824z m-21.38022-554.085275H0l102.4-180.043956C118.378901 11.702857 142.684835 0 169.466374 0h320.703296v213.127033z m534.955605 0H534.955604V0h320.703297C882.215385 0 906.746374 12.828132 922.725275 33.083077l102.4 180.043956z m0 0" fill="" p-id="32767"></path></svg>

+ 1 - 0
src/assets/icon/sort.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="1585738866513" class="icon" viewBox="0 0 1025 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3988" xmlns:xlink="http://www.w3.org/1999/xlink" width="128.125" height="128"><defs><style type="text/css"></style></defs><path d="M360.806499 587.464526 73.613373 587.464526c-20.675212 0-37.984693 7.164202-52.216932 21.492605C7.164202 623.237451 0 640.546931 0 661.222144l0 289.020238c0 20.627131 7.164202 38.080856 21.396441 52.313096 14.232239 14.232239 31.541719 21.396441 52.216932 21.396441l287.193126 0c20.627131 0 38.225102-7.068038 52.93816-21.396441 14.520731-14.232239 21.781096-31.637883 21.781096-52.313096l0-289.020238c0-20.675212-7.212283-37.984693-21.781096-52.313096C399.031601 594.724891 381.433629 587.464526 360.806499 587.464526zM360.806499 59.910034 73.613373 59.910034c-20.675212 0-37.984693 7.212283-52.216932 21.444523C7.164202 95.586796 0 113.040522 0 133.715735l0 287.81819c0 20.627131 7.164202 38.41743 21.396441 52.93816 14.232239 14.713058 31.541719 21.973423 52.216932 21.973423l287.193126 0c20.627131 0 38.225102-7.260365 52.93816-21.973423 14.520731-14.616894 21.781096-32.31103 21.781096-52.93816L435.525755 133.715735c0-20.723294-7.212283-38.080856-21.781096-52.40926C399.031601 67.122318 381.433629 59.910034 360.806499 59.910034zM888.312908 587.464526l-287.241208 0c-20.530967 0-38.225102 7.164202-52.841997 21.492605-14.616894 14.328403-22.021505 31.637883-22.021505 52.313096l0 289.020238c0 20.627131 7.404611 38.080856 22.021505 52.313096 14.713058 14.232239 32.214866 21.396441 52.841997 21.396441l287.241208 0c20.530967 0 37.984693-7.068038 52.216932-21.396441 14.136076-14.232239 21.252195-31.637883 21.252195-52.313096l0-289.020238c0-20.675212-7.019956-38.080856-21.252195-52.313096C926.345682 594.724891 908.843875 587.464526 888.312908 587.464526zM1002.026577 224.830915l-203.049819-203.049819C784.359863 7.11612 767.002301 0 746.855989 0c-20.146312 0-37.551956 7.260365-52.16885 21.925342l-203.482556 203.482556c-14.568813 14.568813-22.069587 32.214866-22.309997 52.553505-0.336573 20.434803 6.779546 37.840447 21.396441 52.457341l203.049819 203.049819c14.568813 14.568813 32.166784 21.87726 52.986242 21.87726 20.627131-0.048082 38.225102-7.452693 52.793915-22.021505l203.482556-203.482556c14.664976-14.664976 21.829178-32.07062 21.63685-52.457341C1023.951918 256.949617 1016.595389 239.399728 1002.026577 224.830915z" p-id="3989"></path></svg>

+ 1 - 0
src/assets/icon/u.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="1585919708367" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10664" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M870.515838 62.986543l0 565.154617c0 111.332644-31.92613 194.434318-95.733365 249.309112-60.59303 51.635007-147.84728 77.449953-261.761726 77.449953-50.895157 0-96.941889-6.460132-138.14736-19.371186-56.559157-17.742083-102.605889-46.37419-138.149407-85.913718-45.249577-50.823526-67.858504-121.005958-67.858504-210.568786L168.865477 62.986543l185.411827 0 0 563.791573c0 57.271378 14.538111 100.631932 43.62252 130.062218 29.084409 29.443589 66.231447 44.155662 111.48921 44.155662 60.59303 0 105.011682-14.112416 133.299959-42.341341 28.27088-28.230971 42.412972-69.37709 42.412972-123.412774L685.101965 62.986543 870.515838 62.986543z" p-id="10665"></path></svg>

+ 1 - 0
src/assets/icon/views.svg View File

@@ -0,0 +1 @@
1
+<svg t="1591694869313" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3583" width="128" height="128"><path d="M92.161 959.999h839.68c15.553 0 28.16-12.609 28.16-28.16s-12.608-28.16-28.16-28.16h-811.52V92.159c0-15.553-12.608-28.16-28.16-28.16s-28.16 12.608-28.16 28.16v839.68c0 15.552 12.608 28.16 28.16 28.16z m135.803-219.165c32.945 0 59.647-30.339 59.647-67.757 0-9.026-1.567-17.634-4.387-25.51l117.759-153.753a53.084 53.084 0 0 0 17.855 3.092c17.38 0 33.018-8.449 43.919-21.922l111.182 63.334c0.36 37.068 26.92 67.002 59.63 67.002 32.944 0 59.647-30.34 59.647-67.758 0-1.254-0.035-2.496-0.094-3.732l154.882-151.144c7.387 3.723 15.554 5.807 24.154 5.807 32.946 0 59.648-30.333 59.648-67.758 0-37.419-26.702-67.757-59.648-67.757-32.933 0-59.647 30.338-59.647 67.757 0 7.711 1.15 15.112 3.24 22.017L670.74 484.59c-10.196-9.246-23.11-14.787-37.173-14.787-16.215 0-30.912 7.365-41.665 19.297l-113.574-64.602c-2.106-35.248-27.924-63.108-59.491-63.108-32.935 0-59.648 30.34-59.648 67.758 0 10.268 2.022 19.996 5.621 28.717L248.922 609.631c-6.52-2.78-13.581-4.312-20.958-4.312-32.935 0-59.648 30.338-59.648 67.758 0 37.418 26.713 67.757 59.648 67.757z"  p-id="3584"></path></svg>

+ 1 - 0
src/assets/icon/visitors.svg View File

@@ -0,0 +1 @@
1
+<svg t="1591702671993" class="icon" viewBox="0 0 1093 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4415" width="128" height="128"><path d="M682.666667 0 477.866667 0l0 819.2 204.8 0L682.666667 0zM341.333333 409.6 136.533333 409.6l0 409.6 204.8 0L341.333333 409.6zM1024 273.066667l-204.8 0 0 546.133333 204.8 0L1024 273.066667zM0 887.466667l0 136.533333 72.021333 0L1092.266667 1024l0-67.720533L1092.266667 887.466667 0 887.466667z" p-id="4416"></path></svg>

+ 1 - 0
src/assets/icon/vue.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="1585919576218" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3412" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M512 504L764.8 68.8h-134.4L512 275.2 393.6 70.4h-134.4L512 504zM819.2 70.4L512 600 204.8 68.8H0l512 886.4L1024 70.4H819.2z" p-id="3413"></path></svg>

+ 1 - 0
src/assets/icon/zhuye.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="1585705087269" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2224" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M950.3 489.4L533.8 73c-12-12-31.5-12-43.5 0L73.9 489.4c-19.4 19.4-5.7 52.5 21.7 52.5h66.8v353.7c0 35.3 28.7 64 64 64H384V831.8c0-35.3 28.7-64 64-64h128c35.3 0 64 28.7 64 64v127.8h156.6c35.3 0 64-28.7 64-64V541.9h67.8c27.5 0 41.2-33.2 21.9-52.5z" fill="" p-id="2225"></path></svg>

File diff suppressed because it is too large
+ 1 - 0
src/assets/icon/拒绝.svg


BIN
src/assets/image/app.jpg View File


BIN
src/assets/image/login.jpg View File


BIN
src/assets/image/pdf.png View File


BIN
src/assets/image/react.jpg View File


BIN
src/assets/image/uni.png View File


BIN
src/assets/image/vue.png View File


BIN
src/assets/image/word.png View File


BIN
src/assets/logo.png View File


+ 97 - 0
src/components/Breadcrumb/Breadcrumb.vue View File

@@ -0,0 +1,97 @@
1
+<template>
2
+<!-- 面包屑 -->
3
+    <el-breadcrumb class="app-breadcrumb" separator="/">
4
+        <transition-group name="breadcrumb">
5
+            <el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path">
6
+                <span
7
+                    v-if="item.redirect === 'noRedirect' || index === levelList.length-1"
8
+                    class="no-redirect"
9
+                    >
10
+                    {{item.meta.title}}
11
+                </span>
12
+                <a v-else @click.prevent="handleLink(item)">{{item.meta.title}}</a>
13
+            </el-breadcrumb-item>
14
+        </transition-group>
15
+    </el-breadcrumb>
16
+</template>
17
+
18
+<script>
19
+import pathToRegexp from 'path-to-regexp'
20
+export default {
21
+    data(){
22
+        return {
23
+            levelList:null
24
+        }
25
+    },
26
+    watch:{
27
+        $route: {
28
+            handler(route){
29
+                this.getBreadcrumb()
30
+            },
31
+            immediate: true
32
+        }
33
+    },
34
+    methods:{
35
+        getBreadcrumb(){
36
+             
37
+            // 面包屑仅显示包含meta.title 且 item.meta.breadcrumb不为falsed 的路由
38
+            let metched = this.$route.matched.filter(
39
+                item => item.meta && item.meta.title && item.meta.breadcrumb !== false
40
+            )
41
+
42
+            // 跟路由
43
+            const first = metched[0];
44
+            
45
+
46
+            // 根匹配只要不是home,就作为home下一级
47
+            if(!this.isHome(first)){
48
+                metched = [{ refirect: '/index', meta: { title: '首页' }}].concat(metched)
49
+            }
50
+             
51
+            // 处理完指定到levelList
52
+            this.levelList = metched
53
+        },
54
+        isHome(route){
55
+            const name = route && route.name;
56
+            if(!name){
57
+                return false
58
+            }
59
+            return name.trim().toLocaleLowerCase() === "Home".toLocaleLowerCase()
60
+        },
61
+        pathCompile(path){
62
+            const { params } = this.$route;
63
+            var toPath = pathToRegexp.compile(path);
64
+            return thPath(params);
65
+        },
66
+        handleLink(iten){
67
+            const { redirect, path } = item;
68
+            // 若存在重定向 按重定向走
69
+            if(redirect){
70
+                this.$router.push(redirect)
71
+                return;
72
+            }
73
+            // 编译path, 避免存在路径参数
74
+            this.$router.push(this.pathCompile(path))
75
+        }
76
+    }
77
+}
78
+</script>
79
+
80
+<style scoped>
81
+.breadcrumb-enter-active,
82
+.breadcrumb-leave-active{
83
+    transform: all .5s;
84
+}
85
+
86
+.breadcrumb-enter,
87
+.breadcrumb-leave-active{
88
+    opacity: 0;
89
+    transform: translateX(20px);
90
+}
91
+.breadcrumb-move{
92
+    transition: all 0.5s;
93
+}
94
+/* .breadcrumb-leave-active{
95
+    position: absolute;;
96
+} */
97
+</style>

+ 80 - 0
src/components/Breadcrumb/Breadcrumb2.vue View File

@@ -0,0 +1,80 @@
1
+<template>
2
+    <el-breadcrumb class="app-breadcrumb" separator="/">
3
+        <transition-group name="breadcrumb"  mode="out-in">
4
+        
5
+            <el-breadcrumb-item v-for="(item,index)  in levelList" :key="item.path" v-if='item.meta.title'>
6
+                <span v-if='item.redirect==="index"||index==levelList.length-1' class="no-redirect">{{item.meta.title}}</span>
7
+                <router-link v-else :to="item.redirect||item.path">{{item.meta.title}}</router-link>
8
+            </el-breadcrumb-item>
9
+       
10
+        </transition-group>
11
+    </el-breadcrumb>
12
+</template>
13
+
14
+<script>
15
+    export default {
16
+      created() {
17
+        this.getBreadcrumb()
18
+      },
19
+      data() {
20
+        return {
21
+          levelList: null
22
+        }
23
+      },
24
+      watch: {
25
+        $route() {
26
+           
27
+          this.getBreadcrumb()
28
+        }
29
+      },
30
+      methods: {
31
+        getBreadcrumb() {
32
+          let matched = this.$route.matched.filter(
33
+                item => item.meta && item.meta.title && item.meta.breadcrumb !== false
34
+            )
35
+         
36
+          const first = matched[0]
37
+          if (first && first.name !== 'index') {
38
+            matched = [{ path: '/index', meta: { title: '首页' }}].concat(matched)
39
+          }
40
+          this.levelList = matched
41
+        }
42
+      }
43
+    }
44
+</script>
45
+
46
+<style scoped>
47
+    /* .app-breadcrumb.el-breadcrumb {
48
+        display: inline-block;
49
+        font-size: 14px;
50
+        line-height: 50px;
51
+        margin-left: 10px;
52
+    }
53
+    .no-redirect {
54
+            color: #97a8be;
55
+            cursor: text;
56
+        } */
57
+    .breadcrumb-enter-active,
58
+    .breadcrumb-leave-active{
59
+        transition: all 0.5s;
60
+    }
61
+    /* .breadcrumb-enter,.breadcrumb-leave-to{
62
+        opacity: 0;
63
+        transform: translateX(20px);
64
+    }
65
+    .breadcrumb-enter-to,.breadcrumb-leave{
66
+        opacity: 1;
67
+        transform: translateX(0px);
68
+    } */
69
+    .breadcrumb-enter,
70
+    .breadcrumb-leave-active{
71
+        opacity: 0;
72
+        transform: translateX(20px);
73
+    }
74
+    .breadcrumb-move{
75
+        transition: all 0.5s;
76
+    }
77
+    .breadcrumb-leave-active{
78
+        position: absolute;;
79
+    }
80
+</style>

+ 156 - 0
src/components/Dropdown/drop.vue View File

@@ -0,0 +1,156 @@
1
+<template>
2
+    <div class="drop">
3
+        <div class="drop-left" :style="{background: iconBgColor}">
4
+            <Email v-if="type === 'Email'" class="drop-left-icon" :style="{color: iconColor}" />
5
+            <Zhuye v-if="type === 'Zhuye'" class="drop-left-icon" :style="{color: iconColor}" />
6
+            <Friend v-if="type === 'Friend'" class="drop-left-icon" :style="{color: iconColor}" />
7
+            <Approval v-if="type === 'Approval'" class="drop-left-icon" :style="{color: iconColor}" />
8
+            <Refuse v-if="type === 'Refuse'" class="drop-left-icon" :style="{color: iconColor}" />
9
+            <Favorite v-if="type === 'Favorite'" class="drop-left-icon" :style="{color: iconColor}" />
10
+        </div>
11
+        <div class="drop-right">
12
+            <p>{{text}}</p>
13
+            <p>{{time}}</p>
14
+        </div>
15
+    </div>
16
+</template>
17
+
18
+<script>
19
+import Email from '@/assets/icon/email.svg' // 邮件
20
+import Zhuye from '@/assets/icon/zhuye.svg'  // 主页
21
+import Friend from '@/assets/icon/friend.svg' // 朋友
22
+import Approval from '@/assets/icon/approval.svg' //批准
23
+import Refuse from '@/assets/icon/refuse.svg' //拒绝
24
+import Favorite from '@/assets/icon/favorite.svg' // 收藏
25
+export default {
26
+    props:{
27
+        type:{
28
+            type: String,
29
+            default: 'Zhuye',
30
+            validator: function (value) {
31
+                // 这个值必须匹配下列字符串中的一个
32
+                return ['Zhuye', 'Email','Friend','Approval','Refuse','Favorite'].indexOf(value) !== -1
33
+            }
34
+        },
35
+        text:{
36
+            type: String,
37
+            default: 'Zhuye',
38
+            required: true
39
+        },
40
+        time:{
41
+            type: String,
42
+            required: true
43
+        },
44
+        iconColor:{
45
+            type: String,
46
+            default: '#ffffff',
47
+            validator: function (value) {
48
+                let colorHtml = /^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$/
49
+                let colorRgba = /^[rR][gG][Bb][Aa]?[\(]((2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?),){2}(2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?),?(0\.\d{1,2}|1|0)?[\)]{1}$/
50
+                // 必须匹配一个颜色的正则
51
+                if(colorHtml.test(value)){
52
+                    return true
53
+                }
54
+                 if(colorRgba.test(value)){
55
+                    return true
56
+                }
57
+                return false;
58
+            }
59
+        },
60
+        iconBgColor: {
61
+            type: String,
62
+            default: '#94E273',
63
+            validator: function (value) {
64
+                let colorHtml = /^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$/
65
+                let colorRgba = /^[rR][gG][Bb][Aa]?[\(]((2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?),){2}(2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?),?(0\.\d{1,2}|1|0)?[\)]{1}$/
66
+                // 必须匹配一个颜色的正则
67
+                if(colorHtml.test(value)){
68
+                    return true
69
+                }
70
+                 if(colorRgba.test(value)){
71
+                    return true
72
+                }
73
+                return false;
74
+            }
75
+        }
76
+    },
77
+    components:{
78
+        Email,
79
+        Zhuye,
80
+        Friend,
81
+        Approval,
82
+        Refuse,
83
+        Favorite
84
+    }
85
+}
86
+</script>
87
+
88
+<style scoped>
89
+.drop{
90
+    width: 300px;
91
+    min-height: 65px !important;
92
+    max-height: 87px !important;
93
+    border-bottom: 1px solid #dcdfe6;
94
+    padding: 12px 24px;
95
+    box-sizing: border-box;
96
+    display: flex;
97
+    align-items: center;
98
+    justify-content: flex-start;
99
+
100
+}
101
+.drop:hover{
102
+    background: #E2EFFD;
103
+}
104
+.drop:hover .drop-left-icon{
105
+    transform: rotate(360deg);
106
+    opacity: 1;
107
+}
108
+.drop-left{
109
+    width: 32px;
110
+    height: 32px;
111
+    background: burlywood;
112
+    border-radius: 16px;
113
+    margin-right: 10px;
114
+    display: flex;
115
+    justify-content: center;
116
+    align-items: center;
117
+}
118
+.drop-left-icon{
119
+    width: 20px;
120
+    height: 20px;
121
+    fill: currentColor; 
122
+    opacity: 0.9;
123
+    transition: all 0.5s;
124
+}
125
+.drop-right{
126
+    flex: 1;
127
+    display: flex;
128
+    align-items: stretch;
129
+    flex-wrap: wrap;
130
+}
131
+.drop-right p{
132
+    width: 100%;
133
+    text-overflow: ellipsis;
134
+    overflow: hidden;
135
+}
136
+.drop-right p:nth-child(1){
137
+    font-size: 14px;
138
+    font-weight: 400;
139
+    line-height: 22px;
140
+    color: #515a6e;
141
+    margin-bottom: 5px;
142
+    max-height: 44px;
143
+    min-height: 22px;
144
+    text-overflow: -o-ellipsis-lastline;
145
+    overflow: hidden;
146
+    text-overflow: ellipsis;
147
+    display: -webkit-box;
148
+    -webkit-line-clamp: 2;
149
+    -webkit-box-orient: vertical;
150
+}
151
+.drop-right p:nth-child(2){
152
+    font-size: 12px;
153
+    color: #808695;
154
+}
155
+
156
+</style>

+ 66 - 0
src/components/Dropdown/empy.vue View File

@@ -0,0 +1,66 @@
1
+<template>
2
+    <div class="empy">
3
+        <div class="empy-box">
4
+             <News v-if="type == 'News'" class="empy-icon" />
5
+             <Flag v-if="type == 'Flag'" class="empy-icon" />
6
+             <Horn v-if="type == 'Horn'" class="empy-icon" />
7
+        </div>
8
+        <p>{{text}}</p>
9
+    </div>
10
+</template>
11
+
12
+<script>
13
+// 消息图标
14
+import News from '@/assets/icon/news.svg'
15
+// 代办图标
16
+import Flag from '@/assets/icon/flag.svg'
17
+// 通知 图标
18
+import Horn from '@/assets/icon/horn.svg'
19
+export default {
20
+    props:{
21
+        type:{
22
+            type: String,
23
+            default: 'News',
24
+            validator: function (value) {
25
+                // 这个值必须匹配下列字符串中的一个
26
+                return ['Flag', 'News','Horn'].indexOf(value) !== -1
27
+            }
28
+        },
29
+        text:{
30
+            type: String,
31
+            default: '你没有新的消息'
32
+        },
33
+    },
34
+    components: {
35
+        News,
36
+        Flag,
37
+        Horn
38
+    }
39
+}
40
+</script>
41
+
42
+<style scoped>
43
+.empy{
44
+    width: 100%;
45
+    height: 330px;
46
+    padding-top: 70px;
47
+    box-sizing: border-box;
48
+}
49
+.empy-box{
50
+    width: 100%;
51
+    height: auto;
52
+    display: flex;
53
+    justify-content: center;
54
+}
55
+.empy-icon{
56
+    fill: currentColor;
57
+    color: #DAE0E5;
58
+    width: 85px;
59
+}
60
+.empy p{
61
+    color: #8C8C8C;
62
+    font-size: 14px;
63
+    width: 100%;
64
+    text-align: center;
65
+}
66
+</style>

+ 175 - 0
src/components/Dropdown/index.vue View File

@@ -0,0 +1,175 @@
1
+<template>
2
+    <el-tabs class="dropdowns" v-model="activeName"  @tab-click="handleClick">
3
+        <el-tab-pane label="通知" name="first" style="padding:0; " class="dropdowns-dropBox">
4
+          
5
+            <div class="dropdowns-list-box">
6
+              <Drop type='Email' iconColor='#ffffff' iconBgColor='#3593FE' text='您有一封新邮件,注意查收' time='04-01 12:20' style="background: #AFFCDD" />
7
+              <Drop type='Friend' iconColor='#ffffff' iconBgColor='#87D068' text='您有新朋友通过了你的好友验证' time='04-01 12:20' />
8
+              <Drop type='Approval' iconColor='#ffffff' iconBgColor='#F06292' text='您提交的文件,已批复' time='04-01 12:20' />
9
+              <Drop type='Refuse' iconColor='#ffffff' iconBgColor='#FE5C57' text='您的请假申请被拒绝,请准时上班' time='04-01 12:20' />
10
+              <Drop type='Favorite' iconColor='#ffffff' iconBgColor='#FF9900' text='您有一篇文字被用户admin收藏,请注意查看' time='04-01 12:20' />
11
+              <Drop text='您有一封新邮件,注意查收' time='04-01 12:20' />
12
+              <Drop text='您有一封新邮件,注意查收' time='04-01 12:20' />
13
+              <Drop text='您有一封新邮件,注意查收' time='04-01 12:20' />
14
+              <Drop type='Favorite' iconColor='#ffffff' iconBgColor='#FF9900' text='您有一篇文字被用户admin收藏,请注意查看' time='04-01 12:20' />
15
+              <el-button class="dropdowns-more"  :loading="true" type="text" disabled>加载更多</el-button>
16
+            </div>
17
+            <div class="dropdowns-foots">
18
+                  <!-- <Clear class="dropdowns-foots-iconsClear"  /> -->
19
+                  清空通知
20
+            </div>
21
+            <!-- <Empy type='Horn' text='你还没有新的通知' /> -->
22
+        </el-tab-pane>
23
+        <el-tab-pane label="消息" name="second" style="padding:0"  class="dropdowns-dropBox">
24
+            <div class="dropdowns-list-box">
25
+              <!-- <NewsBox text='小明给你发了一条消息' time='04-10 20:20' /> -->
26
+            </div>
27
+            <div class="dropdowns-foots">
28
+                清空通知
29
+            </div>
30
+            <!-- <Empy type='News' text='你还没有新的消息' /> -->
31
+        </el-tab-pane>
32
+        <el-tab-pane label="代办" name="third" style="padding:0">
33
+            <div class="dropdowns-list-box">
34
+              <Matter type='info' text='小明给你发了一条消息' time='需要在下午五点前完成' />
35
+              <Matter type='primary' text='小明给你发了一条消息' time='需要在下午五点前完成' />
36
+              <Matter type='success' text='小明给你发了一条消息' time='需要在下午五点前完成' />
37
+              <Matter type='warning' text='小明给你发了一条消息' time='需要在下午五点前完成' />
38
+              <Matter type='danger' text='小明给你发了一条消息' time='需要在下午五点前完成' />
39
+            </div>
40
+            <div class="dropdowns-foots">
41
+                清空通知
42
+            </div>
43
+            <!-- <Empy type='Flag' text='你还没有新的代办事项' /> -->
44
+        </el-tab-pane>
45
+  </el-tabs>
46
+</template>
47
+
48
+<script>
49
+// 通知 每一栏
50
+import Drop from './drop'
51
+// 消息 每一栏
52
+import NewsBox from './newsBox'
53
+// 代办 每一栏
54
+import Matter from './matter'
55
+// 清空图标
56
+import Clear from '@/assets/icon/clear.svg'
57
+
58
+// 空
59
+import Empy from './empy'
60
+
61
+export default {
62
+    data() {
63
+      return {
64
+        activeName: 'first',
65
+        dropOff: false
66
+      };
67
+    },
68
+    components:{
69
+        Drop,
70
+        Clear,
71
+        NewsBox,
72
+        Empy,
73
+        Matter
74
+    },
75
+    methods: {
76
+      handleClick(tab, event) {
77
+        // console.log(tab, event);
78
+      }
79
+    }
80
+}
81
+</script>
82
+
83
+<style>
84
+.el-tabs__nav-scroll{
85
+    display: flex;
86
+    justify-content: center;
87
+}
88
+.el-tabs__nav{
89
+    /* width: 320px!important; */
90
+    display: flex!important;
91
+    justify-content: center !important;
92
+}
93
+.el-tabs__header{
94
+    margin-bottom: 0!important;
95
+}
96
+.dropdowns-dropBox{
97
+  width: 100%;
98
+  /* min-height: 330px;
99
+  max-height: 450px; */
100
+  max-height: 450px;
101
+  overflow: hidden;
102
+  position: relative;
103
+}
104
+.dropdowns-list-box{
105
+  max-height: 450px;
106
+  overflow-x: hidden;
107
+  overflow-y: auto;
108
+  -ms-overflow-style: none; 
109
+  overflow: '-moz-scrollbars-none';
110
+  scrollbar-width: none;  /*  火狐   */
111
+  position: relative;
112
+  padding-bottom: 40px;
113
+  box-sizing: border-box;
114
+}
115
+.dropdowns-list-box::-webkit-scrollbar {
116
+    display: none;  /*  Chrome  */
117
+    width: 0 !important ; /*  Chrome  */
118
+}
119
+.dropdowns-list-box .drop:nth-last-child(1){
120
+  border-bottom: transparent;
121
+}
122
+.dropdowns-dropBox-scroll{
123
+  width: 300px;
124
+  /* height: 328px; */
125
+  
126
+}
127
+.happy-scroll-container{
128
+  width: 300px !important;
129
+}
130
+.happy-scroll-container .happy-scroll-content{
131
+  /* padding-bottom: 38px !important; */
132
+  box-sizing: border-box !important;
133
+  width: 300px !important;
134
+}
135
+.happy-scroll-container{
136
+  height: 290px !important; 
137
+}
138
+.dropdowns-more{
139
+  width: 100%;
140
+  height: 30px;
141
+  color: #2D8CF0;
142
+  font-size: 14px;
143
+  text-align: center;
144
+  line-height: 30px;
145
+ 
146
+}
147
+.dropdowns-foots{
148
+  width: 100%;
149
+  height: 38px;
150
+  background: #f7f7f7;
151
+  font-size: 14px;
152
+  display: flex;
153
+  justify-content: center;
154
+  align-items: center;
155
+  color: #515A6E;
156
+  border-top: 1px solid #dcdfe6;
157
+  position: absolute;
158
+  bottom: -2px;
159
+  left: 0;
160
+}
161
+.dropdowns-foots-iconsClear{
162
+  width: 16px;
163
+  height: 16px;
164
+  margin-right: 5px;
165
+  color: #515A6E;
166
+  fill: currentColor;
167
+}
168
+.dropdowns-foots:hover{
169
+  /* color: #2AB4FB!important; */
170
+  background: #E8F6FD;
171
+}
172
+.disableds{
173
+  pointer-events: none;
174
+}
175
+</style>

+ 141 - 0
src/components/Dropdown/matter.vue View File

@@ -0,0 +1,141 @@
1
+<template>
2
+    <div class="drop">
3
+        <div class="drop-right">
4
+            <p>{{text}}</p>
5
+            <p>{{time}}</p>
6
+        </div>
7
+        <div class="drop-left">
8
+            <el-link v-if="type == 'primary'"  class="drop-left-btns drop-left-btns-primary" type="primary" :underline="false">进行中</el-link>
9
+            <el-link v-if="type == 'success'"  class="drop-left-btns drop-left-btns-success" type="success" :underline="false">完成</el-link>
10
+            <el-link v-if="type == 'warning'"  class="drop-left-btns drop-left-btns-warning" type="warning" :underline="false">即将到期</el-link>
11
+            <el-link v-if="type == 'danger'"  class="drop-left-btns drop-left-btns-danger" type="danger" :underline="false">未完成</el-link>
12
+            <el-link v-if="type == 'info'" class="drop-left-btns drop-left-btns-info" type="info" :underline="false">未开始</el-link>
13
+        </div>
14
+    </div>
15
+</template>
16
+
17
+<script>
18
+export default {
19
+    props:{
20
+        text:{
21
+            type: String,
22
+            default: 'Zhuye',
23
+            required: true
24
+        },
25
+        time:{
26
+            type: String,
27
+            required: true
28
+        },
29
+        type:{
30
+            type: String,
31
+            default: 'info',
32
+            validator: function (value) {
33
+                // 这个值必须匹配下列字符串中的一个
34
+                return ['info', 'danger','warning','success','primary'].indexOf(value) !== -1
35
+            }
36
+        },
37
+    }
38
+}
39
+</script>
40
+
41
+<style scoped>
42
+.drop{
43
+    width: 300px;
44
+    min-height: 65px !important;
45
+    max-height: 87px !important;
46
+    border-bottom: 1px solid #dcdfe6;
47
+    padding: 12px 24px;
48
+    box-sizing: border-box;
49
+    display: flex;
50
+    align-items: center;
51
+    justify-content: flex-start;
52
+
53
+}
54
+.drop:hover{
55
+    background: #E2EFFD;
56
+}
57
+.drop:hover img{
58
+    transform: scale(1.5) rotate(360deg);
59
+    opacity: 1;
60
+}
61
+.drop-left{
62
+    width: 80px;
63
+    height: 32px;
64
+    border-radius: 16px;
65
+    margin-right: 10px;
66
+    display: flex;
67
+    justify-content: center;
68
+    align-items: center;
69
+    overflow: hidden;
70
+}
71
+.drop-left img{
72
+    width: 32px;
73
+    height: 32px;
74
+    transition: all 0.5s;
75
+}
76
+.drop-left-icon{
77
+    width: 20px;
78
+    height: 20px;
79
+    fill: currentColor; 
80
+    opacity: 0.9;
81
+    transition: all 0.5s;
82
+}
83
+.drop-left-btns{
84
+    height: 20px;
85
+    padding: 0 10px;
86
+    font-size: 12px;
87
+    border-radius: 2px;
88
+}
89
+.drop-left-btns-primary{
90
+    background: #E8F6FD;
91
+    border: 1px solid #91D5FF;
92
+}
93
+.drop-left-btns-success{
94
+    background: #F8FDF6;
95
+    border: 1px solid #A2FC76;
96
+}
97
+.drop-left-btns-warning{
98
+    background: #FDF9F4;
99
+    border: 1px solid #FDC673;
100
+}
101
+.drop-left-btns-danger{
102
+    background: #FEF5F5;
103
+    border: 1px solid #FCBEBE;
104
+}
105
+.drop-left-btns-info{
106
+    background: #FCFCFD;
107
+    border: 1px solid #CDCDCD;
108
+}
109
+.drop-right{
110
+    flex: 1;
111
+    display: flex;
112
+    align-items: stretch;
113
+    flex-wrap: wrap;
114
+}
115
+.drop-right p{
116
+    width: 100%;
117
+    
118
+}
119
+.drop-right p:nth-child(1){
120
+    font-size: 14px;
121
+    font-weight: 400;
122
+    line-height: 22px;
123
+    color: #515a6e;
124
+    margin-bottom: 5px;
125
+    max-height: 44px;
126
+    min-height: 22px;
127
+    text-overflow: -o-ellipsis-lastline;
128
+    overflow: hidden;
129
+    text-overflow: ellipsis;
130
+    display: -webkit-box;
131
+    -webkit-line-clamp: 2;
132
+    -webkit-box-orient: vertical;
133
+}
134
+.drop-right p:nth-child(2){
135
+    font-size: 12px;
136
+    color: #808695;
137
+    text-overflow: ellipsis;
138
+    overflow: hidden;
139
+}
140
+
141
+</style>

+ 115 - 0
src/components/Dropdown/newsBox.vue View File

@@ -0,0 +1,115 @@
1
+<template>
2
+    <div class="drop">
3
+        <div class="drop-left">
4
+            <!-- <img src="http://public.nodebook.top/20200319164136.jpg" /> -->
5
+        </div>
6
+        <div class="drop-right">
7
+            <p>{{text}}</p>
8
+            <p>{{time}}</p>
9
+        </div>
10
+    </div>
11
+</template>
12
+
13
+<script>
14
+export default {
15
+    props:{
16
+        text:{
17
+            type: String,
18
+            default: 'Zhuye',
19
+            required: true
20
+        },
21
+        time:{
22
+            type: String,
23
+            required: true
24
+        },
25
+        image:{
26
+            type: String,
27
+            default: 'http://public.nodebook.top/20200319164136.jpg',
28
+            validator: function (value) {
29
+                let colorImage = /^https?:\/\/(.+\/)+.+(\.(gif|png|jpg|jpeg|webp|svg|psd|bmp|tif))$/i
30
+                // 必须匹配一个颜色的正则
31
+                if(colorImage.test(value)){
32
+                    return true
33
+                }
34
+                return false;
35
+            }
36
+        }
37
+    }
38
+}
39
+</script>
40
+
41
+<style scoped>
42
+.drop{
43
+    width: 300px;
44
+    min-height: 65px !important;
45
+    max-height: 87px !important;
46
+    border-bottom: 1px solid #dcdfe6;
47
+    padding: 12px 24px;
48
+    box-sizing: border-box;
49
+    display: flex;
50
+    align-items: center;
51
+    justify-content: flex-start;
52
+
53
+}
54
+.drop:hover{
55
+    background: #E2EFFD;
56
+}
57
+.drop:hover img{
58
+    transform: scale(1.5) rotate(360deg);
59
+    opacity: 1;
60
+}
61
+.drop-left{
62
+    width: 32px;
63
+    height: 32px;
64
+    background: burlywood;
65
+    border-radius: 16px;
66
+    margin-right: 10px;
67
+    display: flex;
68
+    justify-content: center;
69
+    align-items: center;
70
+    overflow: hidden;
71
+}
72
+.drop-left img{
73
+    width: 32px;
74
+    height: 32px;
75
+    transition: all 0.5s;
76
+}
77
+.drop-left-icon{
78
+    width: 20px;
79
+    height: 20px;
80
+    fill: currentColor; 
81
+    opacity: 0.9;
82
+    transition: all 0.5s;
83
+}
84
+.drop-right{
85
+    flex: 1;
86
+    display: flex;
87
+    align-items: stretch;
88
+    flex-wrap: wrap;
89
+}
90
+.drop-right p{
91
+    width: 100%;
92
+    text-overflow: ellipsis;
93
+    overflow: hidden;
94
+}
95
+.drop-right p:nth-child(1){
96
+    font-size: 14px;
97
+    font-weight: 400;
98
+    line-height: 22px;
99
+    color: #515a6e;
100
+    margin-bottom: 5px;
101
+    max-height: 44px;
102
+    min-height: 22px;
103
+    text-overflow: -o-ellipsis-lastline;
104
+    overflow: hidden;
105
+    text-overflow: ellipsis;
106
+    display: -webkit-box;
107
+    -webkit-line-clamp: 2;
108
+    -webkit-box-orient: vertical;
109
+}
110
+.drop-right p:nth-child(2){
111
+    font-size: 12px;
112
+    color: #808695;
113
+}
114
+
115
+</style>

+ 268 - 0
src/components/Editor/index.vue View File

@@ -0,0 +1,268 @@
1
+
2
+<template>
3
+  <div class="edit_container">
4
+    <quill-editor
5
+      class="ql-editor"
6
+      v-model="content"
7
+      :id="id"
8
+      :ref="refs"
9
+      :options="editorOption"
10
+      @focus="onEditorFocus($event)"
11
+      @blur="onEditorBlur($event)"
12
+      @change="onEditorChange($event)"
13
+      @ready="onEditorReady($event)"
14
+    ></quill-editor>
15
+  </div>
16
+</template>
17
+
18
+<script>
19
+import 'quill/dist/quill.core.css'
20
+import 'quill/dist/quill.snow.css'
21
+import 'quill/dist/quill.bubble.css'
22
+import { quillEditor } from 'vue-quill-editor'
23
+
24
+const toolbarOptions = [
25
+  ['bold', 'italic', 'underline', 'strike'],
26
+  ['blockquote', 'code-block'],
27
+  [{ header: 1 }, { header: 2 }],
28
+  [{ list: 'ordered' }, { list: 'bullet' }],
29
+  [{ header: [1, 2, 3, 4, 5, 6, false] }],
30
+  [{ script: 'sub' }, { script: 'supper' }],
31
+  [{ indent: '-1' }, { indent: '+1' }],
32
+  [{ size: ['small', false, 'large', 'huge'] }],
33
+  [{ color: [] }, { background: [] }],
34
+  [{ align: [] }],
35
+  ['link', 'image', 'video'],
36
+  ['clean']
37
+]
38
+
39
+export default {
40
+  name: 'VueQuillEditor',
41
+  components: {
42
+    quillEditor
43
+  },
44
+  props: ['id', 'refs', 'vueContnet'],
45
+  data () {
46
+    return {
47
+      content: '', // 富文本内容
48
+      editorOption: {
49
+        //  富文本编辑器配置
50
+        modules: {
51
+          // 工具栏定义的
52
+          toolbar: toolbarOptions,
53
+          
54
+        },
55
+        // 主题
56
+        theme: 'snow',
57
+        placeholder: '请输入正文',
58
+      }
59
+    }
60
+  },
61
+  created () {
62
+    this.content = this.vueContnet
63
+    console.log('this.vueContnet',this.vueContnet);
64
+  },
65
+  methods: {
66
+    // 失去焦点事件
67
+    onEditorBlur (quill) {
68
+      console.log('editor blur!', quill)
69
+    },
70
+    // 获得焦点事件
71
+    onEditorFocus (quill) {
72
+      console.log('editor focus!', quill)
73
+    },
74
+    // 准备富文本编辑器
75
+    onEditorReady (quill) {
76
+      console.log('editor ready!', quill)
77
+    },
78
+    // 内容改变事件
79
+    onEditorChange ({ quill, html, text }) {
80
+      console.log('editor change!', quill, html, text)
81
+      this.content = html
82
+    }
83
+  },
84
+  watch:{
85
+    // content(newval,oldval){
86
+    //   this.content =newval
87
+    // }
88
+  }
89
+}
90
+</script>
91
+
92
+<style scoped >
93
+  .ql-editor {
94
+    line-height: normal !important;
95
+    /* width: 335px;  我是需要展示给手机端所以设置了宽 */
96
+  }
97
+  .ql-snow .ql-tooltip[data-mode='link']::before {
98
+    content: '请输入链接地址:';
99
+  }
100
+  .ql-snow .ql-tooltip.ql-editing a.ql-action::after {
101
+    border-right: 0px;
102
+    content: '保存';
103
+    padding-right: 0px;
104
+  }
105
+
106
+  .ql-snow .ql-tooltip[data-mode='video']::before {
107
+    content: '请输入视频地址:';
108
+  }
109
+
110
+  .ql-snow .ql-picker.ql-size .ql-picker-label::before,
111
+  .ql-snow .ql-picker.ql-size .ql-picker-item::before {
112
+    content: '14px';
113
+  }
114
+  .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='small']::before,
115
+  .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='small']::before {
116
+    content: '10px';
117
+  }
118
+  .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='large']::before,
119
+  .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='large']::before {
120
+    content: '18px';
121
+  }
122
+  .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='huge']::before,
123
+  .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='huge']::before {
124
+    content: '32px';
125
+  }
126
+
127
+  .ql-snow .ql-picker.ql-header .ql-picker-label::before,
128
+  .ql-snow .ql-picker.ql-header .ql-picker-item::before {
129
+    content: '文本';
130
+  }
131
+  .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='1']::before,
132
+  .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='1']::before {
133
+    content: '标题1';
134
+  }
135
+  .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='2']::before,
136
+  .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='2']::before {
137
+    content: '标题2';
138
+  }
139
+  .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='3']::before,
140
+  .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='3']::before {
141
+    content: '标题3';
142
+  }
143
+  .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='4']::before,
144
+  .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='4']::before {
145
+    content: '标题4';
146
+  }
147
+  .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='5']::before,
148
+  .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='5']::before {
149
+    content: '标题5';
150
+  }
151
+  .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='6']::before,
152
+  .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='6']::before {
153
+    content: '标题6';
154
+  }
155
+
156
+  .ql-snow .ql-picker.ql-font .ql-picker-label::before,
157
+  .ql-snow .ql-picker.ql-font .ql-picker-item::before {
158
+    content: '标准字体';
159
+  }
160
+  .ql-snow .ql-picker.ql-font .ql-picker-label[data-value='serif']::before,
161
+  .ql-snow .ql-picker.ql-font .ql-picker-item[data-value='serif']::before {
162
+    content: '衬线字体';
163
+  }
164
+  .ql-snow .ql-picker.ql-font .ql-picker-label[data-value='monospace']::before,
165
+  .ql-snow .ql-picker.ql-font .ql-picker-item[data-value='monospace']::before {
166
+    content: '等宽字体';
167
+  }
168
+</style>
169
+
170
+<!-- <template>
171
+  <div>
172
+    <div :id="this.id"></div>
173
+  </div>
174
+</template>
175
+
176
+<script>
177
+import VueUeditorWrap from 'vue-ueditor-wrap'
178
+  export default {
179
+    name: 'Editor',
180
+    props: ['id', 'r_content'],
181
+    components: {
182
+      VueUeditorWrap
183
+    },
184
+    data() {
185
+      return {
186
+        ue: '', //ueditor实例
187
+        content: '' //编辑器内容
188
+      }
189
+    },
190
+    methods: {
191
+      //初始化编辑器
192
+      initEditor() {
193
+        this.ue = UE.getEditor(this.id, {
194
+          initialFrameWidth: '100%',
195
+          initialFrameHeight: '350',
196
+          topOffset: '110',
197
+          toolbars: [[
198
+            'bold', //加粗
199
+            'underline', //下划线
200
+            'justifyleft', //居左对齐
201
+            'justifycenter', //居中对齐
202
+            'justifyright', //居右对齐
203
+            'justifyjustify', //两端对齐
204
+            'formatmatch', //格式刷
205
+            'fontsize', //字体大小
206
+            'fontfamily', //字体
207
+            'forecolor', //字体颜色
208
+            'table',
209
+          ]]
210
+          // scaleEnabled: true,
211
+        })
212
+        //编辑器准备就绪后会触发该事件
213
+        this.ue.addListener('ready', () => {
214
+          //设置可以编辑
215
+          this.ue.setEnabled()
216
+          this.ue.setContent(this.r_content)
217
+        })
218
+        //编辑器内容修改时
219
+        this.selectionchange()
220
+      },
221
+
222
+      //编辑器内容修改时
223
+      selectionchange() {
224
+        this.ue.addListener('selectionchange', () => {
225
+          this.content = this.ue.getContent()
226
+        })
227
+      }
228
+
229
+    },
230
+
231
+    activated() {
232
+      //初始化编辑器
233
+      this.initEditor()
234
+    },
235
+    deactivated() {
236
+      //销毁编辑器实例,使用textarea代替
237
+      this.ue.destroy()
238
+      //重置编辑器,可用来做多个tab使用同一个编辑器实例
239
+      //this.ue.reset()
240
+      //如果要使用同一个实例,请注释destroy()方法
241
+    },
242
+
243
+    computed: {
244
+      // 利用计算属性返回prop里传过来的内容
245
+      revecive: function() {
246
+        return this.r_content
247
+      }
248
+    },
249
+
250
+    watch: {
251
+      // !!! 这里需要注意,需要一个watch来实时更新编辑器的内容
252
+      revecive: function() {
253
+        this.ue.setContent(this.r_content)
254
+      }
255
+    }
256
+  }
257
+</script>
258
+
259
+
260
+<style>
261
+  .edui-editor {
262
+    z-index: 60 !important;
263
+  }
264
+  #edui_fixedlayer{
265
+    z-index: 5000 !important;
266
+  }
267
+</style> -->
268
+

+ 387 - 0
src/components/Headers/Headers.vue View File

@@ -0,0 +1,387 @@
1
+<template>
2
+    <div class="headers">
3
+        <div class="headers-left">
4
+            <div class="headers-left-box" :class="asideShow === false ? 'headers-left-active' : ''" @click="targetIcon">
5
+                <i class="el-icon-s-fold "></i>
6
+            </div>
7
+            <Breadcrumb />
8
+        </div>
9
+        <div class="headers-right">
10
+            <div class="headers-right-left">
11
+                <el-tooltip class="item" effect="dark" content="源码" placement="bottom">
12
+                    <github2 class="headers-right-left-githubIcon" @click="goGithub" />
13
+                </el-tooltip>
14
+                <el-tooltip class="item" effect="dark" :content="isFullscreen ? '取消全屏' : '全屏'" placement="bottom">
15
+                    <!-- <i :class="isFullscreen ? 'el-icon-full-screen head-screen-news' : 'el-icon-rank head-screen'" @click="buttoncli"></i> -->
16
+                    <reduction v-if="isFullscreen" class="headers-right-left-screenIcon" @click="buttoncli" />
17
+                    <screen v-else class="headers-right-left-screenIcon" @click="buttoncli" />
18
+                </el-tooltip>
19
+                <el-tooltip class="item" style="margin: 0 20px 0 10px; color: #171700" effect="dark" content="主题" placement="bottom">
20
+                    <i class="el-icon-picture-outline-round" @click="theme = true"></i>
21
+                </el-tooltip>
22
+                <!-- <el-tooltip class="item" effect="dark" :disabled='dropShow' content="有5条未读消息" placement="bottom" @mouseover="dropShow = !dropShow"> -->
23
+                    <el-badge is-dot class="item">
24
+                        <i class="el-icon-bell head-news-icon" @mouseover.self="dropShowBtn" @mouseout.self="dropHideBtn"></i>
25
+                    </el-badge>
26
+                <!-- </el-tooltip> -->
27
+                <!-- 通知栏 -->
28
+                <div class="header-right-dropdown" @mouseover="dropdownBtn" @mouseout="dropShow = false">
29
+                    <el-collapse-transition>
30
+                        <Dropdowns v-show="dropShow" />
31
+                    </el-collapse-transition>
32
+                </div>
33
+            </div>
34
+            <div class="headers-right-right">
35
+                <div class="block"><el-avatar shape="square" size="large" :src="squareUrl"></el-avatar></div>
36
+                <el-dropdown size="medium" @command="handleCommand">
37
+                    <span class="el-dropdown-link">
38
+                      {{ use_name }} <i class="el-icon-arrow-down el-icon--right"></i>
39
+                        <!-- admin -->
40
+                    </span>
41
+                    <el-dropdown-menu slot="dropdown">
42
+                        <el-dropdown-item command="github">项目仓库</el-dropdown-item>
43
+                        <el-dropdown-item divided command="quit">退出登录</el-dropdown-item>
44
+                    </el-dropdown-menu>
45
+                </el-dropdown>
46
+            </div>
47
+        </div>
48
+        <el-drawer
49
+            :with-header="false"
50
+            :visible.sync="theme"
51
+            direction="rtl"
52
+            size='400px'
53
+            class="theme"
54
+            >
55
+            <div class="theme-title">配色方案</div>
56
+            <div class="theme-title-box">
57
+                <div class="theme-title-box-list" v-for="(item,index) in themeColor" :key="index" @click="targetThemeIndex(index)" :class="themeIndex === index ? 'theme-active' : ''">
58
+                    <div class="theme-title-box-list-left" :style="item.aside"></div>
59
+                    <div class="theme-title-box-list-right">
60
+                        <div class="theme-title-box-list-right-top" :style="item.header"></div>
61
+                        <div class="theme-title-box-list-right-bottom" :style="item.container"></div>
62
+                    </div>
63
+                </div>
64
+            </div>
65
+        </el-drawer>
66
+    </div>
67
+</template>
68
+
69
+
70
+<script>
71
+// 全屏组件
72
+import screenfull from 'screenfull'
73
+
74
+// 面包屑
75
+import Breadcrumb from '../Breadcrumb/Breadcrumb2'
76
+
77
+// 通知栏组件
78
+import Dropdowns from '../Dropdown/index'
79
+
80
+import github2 from '../../assets/icon/github2.svg' //github
81
+import screen from '../../assets/icon/screen.svg'  //全屏
82
+import reduction from '../../assets/icon/reduction.svg' //还原
83
+import state from '../../store'
84
+export default {
85
+    props:{
86
+        asideShow: {
87
+            type: Boolean,
88
+            default: true
89
+        },
90
+        themeColor: {
91
+            type: Array,
92
+            default: true
93
+        },
94
+        themeIndex: {
95
+            type: Number,
96
+            default: true
97
+        }
98
+    },
99
+    data(){
100
+        return {
101
+            squareUrl: "https://cube.elemecdn.com/9/c2/f0ee8a3c7c9638a54940382568c9dpng.png",
102
+            isFullscreen: false,
103
+            dropShow: false , // 是否现实通知栏
104
+            setTime: null , //定时器
105
+            theme: false, // 主题 开关
106
+            use_name:'',
107
+        }
108
+    },
109
+    components:{
110
+        Breadcrumb,
111
+        Dropdowns,
112
+        github2,
113
+        screen,
114
+        reduction
115
+    },
116
+    methods:{
117
+        // 自定义 切换 侧边栏 事件
118
+        targetIcon(){
119
+            this.$emit('targetIcon',!this.asideShow)
120
+        },
121
+        // 全屏
122
+        buttoncli(){
123
+				// if (!screenfull.enabled) { // 如果不允许进入全屏,发出不允许提示
124
+                //     this.$message({
125
+                //         message: '不支持全屏',
126
+                //         type: 'warning'
127
+                //     })
128
+                //     return false
129
+                // }
130
+                screenfull.toggle()
131
+                this.checkFull()
132
+        },
133
+        // 监控屏幕变化
134
+        checkFull() {
135
+            var isFull = document.fullscreenEnabled || window.fullScreen || document.webkitIsFullScreen || document.msFullscreenEnabled;
136
+            // to fix : false || undefined == undefined
137
+            // 是否全屏判断
138
+            this.isFullscreen = !this.isFullscreen;
139
+            if(this.isFullscreen){
140
+                this.$message({
141
+                    message: '全屏啦',
142
+                    type: 'success'
143
+                })
144
+            }else{
145
+                this.$message({
146
+                        message: '取消全屏',
147
+                        type: 'warning'
148
+                    })
149
+            }
150
+           
151
+            if (isFull === undefined) {
152
+                isFull = false;
153
+            }
154
+            return isFull;
155
+        },
156
+        // 用户名 下拉菜单
157
+        handleCommand(command){
158
+          
159
+            switch(command){
160
+                case 'github':
161
+                   
162
+                    window.open('https://github.com/cgq001/admin-menu/tree/2.0')
163
+                break;
164
+                case 'quit':
165
+                    let src = this.$store.dispatch('user/resetToken')
166
+                    this.$router.replace('/login')
167
+                    sessionStorage.removeItem('username');
168
+                    sessionStorage.removeItem('password');
169
+                    sessionStorage.removeItem('use_name');
170
+                break;
171
+
172
+            }
173
+        },
174
+        // 退出登陆
175
+        quits(){
176
+          
177
+            this.$store.dispatch('user/resetToken')
178
+        },
179
+        // 展开通知
180
+        dropShowBtn(){
181
+            clearTimeout(this.setTime)
182
+            this.dropShow = true
183
+        },
184
+        // 收起通知
185
+        dropHideBtn(){
186
+            let This = this
187
+            
188
+            this.setTime = setTimeout(function(){
189
+                This.dropShow = false;
190
+            },1000)
191
+        },
192
+        // 鼠标移入 通知栏
193
+        dropdownBtn(){
194
+            clearTimeout(this.setTime)
195
+            this.dropShow = true
196
+        },
197
+        // 选取配色方案
198
+        targetThemeIndex(index){
199
+            this.$emit('targetThemeIndex',index)
200
+        },
201
+        // 去github
202
+        goGithub(){
203
+            window.open('https://github.com/cgq001/admin-menu/tree/2.0')
204
+        }
205
+    },
206
+    mounted() {
207
+        // 浏览器窗口改变事件
208
+        this.isFullscreen = document.body.scrollHeight === window.screen.height
209
+    },
210
+    created(){
211
+      // this.use_name = this.$store.state.use.use_name
212
+      this.use_name = sessionStorage.getItem('use_name')
213
+    }
214
+}
215
+</script>
216
+
217
+<style scoped>
218
+.headers{
219
+    width: 100%;
220
+    height: 100%;
221
+    display: flex;
222
+    justify-content: space-between;
223
+}
224
+.headers-left{
225
+    display: flex;
226
+    justify-content: flex-start;
227
+}
228
+.headers-left-box{
229
+    transition: all 0.5s;
230
+    transform-origin: center center;
231
+    width: 20px;
232
+    height: 100%;
233
+    margin-right: 15px;
234
+}
235
+.headers-left-active{
236
+    transform: rotate(180deg);
237
+}
238
+.el-icon-s-fold{
239
+    width: 20px;
240
+    height: 100%;
241
+    line-height: 50px;
242
+    font-size: 20px;
243
+    cursor: pointer;
244
+    
245
+}
246
+.el-breadcrumb{
247
+    line-height: 50px;
248
+}
249
+.headers-right{
250
+    /* width: 200px; */
251
+    height: 100%;
252
+    /* background: orchid; */
253
+    display: flex;
254
+    justify-content: space-around;
255
+}
256
+.headers-right-left{
257
+    display: flex;
258
+    justify-content: space-around;
259
+    align-items: center;
260
+    margin-right: 30px;
261
+    font-size: 22px;
262
+    cursor: pointer;
263
+    position: relative;
264
+}
265
+.headers-right-left-screenIcon{
266
+    width: 18px;
267
+    height: 18px;
268
+    margin-right: 10px;
269
+    fill: currentColor; 
270
+    color: #413A3F;
271
+}
272
+.headers-right-left-githubIcon{
273
+    width: 20px;
274
+    height: 20px;
275
+    margin-right: 20px;
276
+    fill: currentColor; 
277
+    color: #413A3F;
278
+}
279
+.header-right-dropdown{
280
+    width: 300px;
281
+    height: auto;
282
+    position: absolute;
283
+    right: 0;
284
+    top: 60px;
285
+    z-index: 2;
286
+    background: #ffffff;
287
+    /* padding: 5px 0; */
288
+    box-sizing: border-box;
289
+    border-radius: 4px;
290
+    box-shadow: 0 1px 6px rgba(0,0,0,.2);
291
+    overflow: hidden;
292
+}
293
+/* .head-news-icon{
294
+    
295
+} */
296
+.head-screen{
297
+    margin-right: 15px;
298
+    transform: rotate(45deg);
299
+}
300
+.head-screen-news{
301
+    margin-right: 15px;
302
+}
303
+.headers-right-right{
304
+    display: flex;
305
+    justify-content: space-around;
306
+    align-items: center;
307
+    color: #666666;
308
+}
309
+.block{
310
+    margin-right: 15px;
311
+}
312
+.el-dropdown-link{
313
+    cursor: pointer;
314
+}
315
+.focusing{
316
+    border: none !important;
317
+}
318
+/* 主题 */
319
+.theme{
320
+    height: 100vh;
321
+    overflow: hidden;
322
+}
323
+.el-drawer__body{
324
+    height: 100vh !important;
325
+    overflow: hidden;
326
+}
327
+.theme-title{
328
+    width: 100%;
329
+    height: 50px;
330
+    line-height: 50px;
331
+    font-size: 16px;
332
+    font-weight: bold;
333
+    padding: 0 15px;
334
+    border-bottom: 1px solid #dcdfe6;
335
+}
336
+.theme-title-box{
337
+    padding: 10px;
338
+    box-sizing: border-box;
339
+    width: 100%;
340
+    display: flex;
341
+    justify-content: space-between;
342
+    flex-wrap: wrap;
343
+    height: calc(100vh - 51px);
344
+    overflow-x: hidden;
345
+    overflow-y: auto;
346
+    -ms-overflow-style: none; 
347
+    overflow: '-moz-scrollbars-none';
348
+    scrollbar-width: none;  /*  火狐   */
349
+    background: #F5F7F9;
350
+}
351
+.theme-title-box::-webkit-scrollbar {
352
+    display: none;  /*  Chrome  */
353
+    width: 0 !important ; /*  Chrome  */
354
+}
355
+.theme-title-box-list{
356
+    width: 180px;
357
+    height: 150px;
358
+    display: flex;
359
+    padding: 10px;
360
+    box-sizing: border-box;
361
+    background: #999999;
362
+    border-radius: 5px;
363
+    cursor: pointer;
364
+    margin-bottom: 10px;
365
+    border: 5px solid transparent;
366
+}
367
+.theme-title-box-list-left{
368
+    width: 30px;
369
+    height: 120px;
370
+}
371
+.theme-title-box-list-right{
372
+    flex: 1;
373
+    height: 160px;
374
+}
375
+.theme-title-box-list-right-top{
376
+    width: 100%;
377
+    height: 20px;
378
+    background: #ffffff;
379
+}
380
+.theme-title-box-list-right-bottom{
381
+    width: 100%;
382
+    height: 100px;
383
+}
384
+.theme-active{
385
+    border: 5px solid #05DA89;
386
+}
387
+</style>

+ 97 - 0
src/components/Home/InformationList.vue View File

@@ -0,0 +1,97 @@
1
+<template>
2
+    <div class="Information">
3
+        <div class="Information-title">
4
+            <el-button type="danger"  size="mini" >删除</el-button>
5
+            <el-button type="primary"  size="mini" >标为已读</el-button>
6
+        </div>
7
+        <div class="Information-table">
8
+            <el-table
9
+                ref="multipleTable"
10
+                :data="tableData"
11
+                tooltip-effect="dark"
12
+                style="width: 100%"
13
+                @selection-change="handleSelectionChange">
14
+                <el-table-column
15
+                type="selection"
16
+                width="55">
17
+                </el-table-column>
18
+                <el-table-column
19
+                prop="name"
20
+                label="姓名"
21
+                width="120">
22
+                </el-table-column>
23
+                <el-table-column
24
+                prop="address"
25
+                label="地址"
26
+                show-overflow-tooltip>
27
+                </el-table-column>
28
+                <el-table-column
29
+                label="日期"
30
+                width="120">
31
+                <template slot-scope="scope">{{ scope.row.date }}</template>
32
+                </el-table-column>
33
+            </el-table>
34
+        </div>
35
+    </div>
36
+</template>
37
+
38
+<script>
39
+export default {
40
+    data(){
41
+        return {
42
+            tableData: [{
43
+                date: '2016-05-03',
44
+                name: '王小虎',
45
+                address: '上海市普陀区金沙江路 1518 弄'
46
+                }, {
47
+                date: '2016-05-02',
48
+                name: '王小虎',
49
+                address: '上海市普陀区金沙江路 1518 弄'
50
+                }, {
51
+                date: '2016-05-04',
52
+                name: '王小虎',
53
+                address: '上海市普陀区金沙江路 1518 弄'
54
+                }, {
55
+                date: '2016-05-01',
56
+                name: '王小虎',
57
+                address: '上海市普陀区金沙江路 1518 弄'
58
+                }, {
59
+                date: '2016-05-08',
60
+                name: '王小虎',
61
+                address: '上海市普陀区金沙江路 1518 弄'
62
+                }, {
63
+                date: '2016-05-06',
64
+                name: '王小虎',
65
+                address: '上海市普陀区金沙江路 1518 弄'
66
+                }, {
67
+                date: '2016-05-07',
68
+                name: '王小虎',
69
+                address: '上海市普陀区金沙江路 1518 弄'
70
+            }],
71
+            multipleSelection: []
72
+        }
73
+    },
74
+    methods: {
75
+      toggleSelection(rows) {
76
+        if (rows) {
77
+          rows.forEach(row => {
78
+            this.$refs.multipleTable.toggleRowSelection(row);
79
+          });
80
+        } else {
81
+          this.$refs.multipleTable.clearSelection();
82
+        }
83
+      },
84
+      handleSelectionChange(val) {
85
+        this.multipleSelection = val;
86
+      }
87
+    }
88
+}
89
+</script>
90
+
91
+<style scoped>
92
+.Information-title{
93
+    width: 100%;
94
+    height: auto;
95
+    margin-bottom: 10px;
96
+}
97
+</style>

+ 145 - 0
src/components/Index/colleague.vue View File

@@ -0,0 +1,145 @@
1
+<template>
2
+    <div class="colleague" >
3
+        <div class="colleague-list" v-for="item in personList" :key="item.name">
4
+            <div class="colleague-list-left">
5
+                <img src="http://public.nodebook.top/fd123a3921e910809fba9da0101bf8f6.jpg" />
6
+            </div>
7
+            <div class="colleague-list-centent">
8
+                <p>{{item.name}}</p>
9
+                <p>{{item.position}}</p>
10
+            </div>
11
+            <div class="colleague-list-right">
12
+                <span v-if="item.onLine" class="colleague-list-right-online">在线</span>
13
+                <span v-else class="colleague-list-right-outline">;离线</span>
14
+            </div>
15
+        </div>
16
+    </div>
17
+</template>
18
+
19
+<script>
20
+export default {
21
+    data(){
22
+        return {
23
+            personList:[
24
+                {
25
+                    name: '王小明',
26
+                    position: '前端开发',
27
+                    onLine: true
28
+                },
29
+                {
30
+                    name: '李小明',
31
+                    position: 'Java',
32
+                    onLine: true
33
+                },
34
+                {
35
+                    name: '张小明',
36
+                    position: 'PHP',
37
+                    onLine: false
38
+                },
39
+                {
40
+                    name: '宋小明',
41
+                    position: 'python',
42
+                    onLine: true
43
+                },
44
+                {
45
+                    name: '曹小明',
46
+                    position: 'golang',
47
+                    onLine: false
48
+                },
49
+                {
50
+                    name: '靳小明',
51
+                    position: 'IOS',
52
+                    onLine: true
53
+                },
54
+                {
55
+                    name: '卫小明',
56
+                    position: '安卓',
57
+                    onLine: true
58
+                }
59
+            ]
60
+        }
61
+    }
62
+}
63
+</script>
64
+
65
+<style scoped>
66
+.colleague{
67
+    width: 100%;
68
+    max-height: 355px;
69
+    overflow-x: hidden;
70
+    overflow-y: auto;
71
+    -ms-overflow-style: none; 
72
+    overflow: '-moz-scrollbars-none';
73
+    scrollbar-width: none;  /*  火狐   */
74
+}
75
+.colleague::-webkit-scrollbar {
76
+    display: none;  /*  Chrome  */
77
+    width: 0 !important ; /*  Chrome  */
78
+}
79
+.colleague .colleague-list:nth-last-child(1){
80
+    border-color: transparent;
81
+}
82
+.colleague-list{
83
+    width: 100%;
84
+    height: 71px;
85
+    border-bottom: 1px solid #dcdfe6;
86
+    padding: 10px 0;
87
+    box-sizing: border-box;
88
+    display: flex;
89
+    justify-content: space-between;
90
+    cursor: pointer;
91
+}
92
+.colleague-list:hover{
93
+    background: #DBFEFB;
94
+}
95
+.colleague-list-left,.colleague-list-left img{
96
+    width: 50px;
97
+    height: 50px;
98
+    border-radius: 10px;
99
+    overflow: hidden;
100
+}
101
+.colleague-list-centent{
102
+    flex: 1;
103
+    padding-left: 15px;
104
+    box-sizing: border-box;
105
+    display: flex;
106
+    flex-direction:column;
107
+    justify-content: space-around;
108
+    
109
+}
110
+.colleague-list-centent p:nth-child(1){
111
+    font-size: 14px;
112
+    font-weight: bold;
113
+}
114
+.colleague-list-centent p:nth-child(2){
115
+    font-size: 12px;
116
+    color: #999999;
117
+}
118
+.colleague-list-right{
119
+    width: 100px;
120
+    height: 50px;
121
+    padding-top: 13px;
122
+    display: flex;
123
+    justify-content: flex-end;
124
+}
125
+.colleague-list-right span{
126
+    display: inline-block;
127
+    width: 52px;
128
+    height: 24px;
129
+    text-align: center;
130
+    line-height: 26px;
131
+    border-radius: 2px;
132
+    border: 1px solid;
133
+    font-size: 12px;
134
+}
135
+.colleague-list-right-online{
136
+    border-color: #0D9AFF;
137
+    color: #0D9AFF;
138
+    background: #DEEFFB;
139
+}
140
+.colleague-list-right-outline{
141
+    border-color: #FD41F0;
142
+    color: #FD41F0;
143
+    background: #FEEDFD;
144
+}
145
+</style>

+ 150 - 0
src/components/Index/dynamicBox.vue View File

@@ -0,0 +1,150 @@
1
+<template>
2
+    <div class="dynamic">
3
+        <vue-seamless-scroll :data='dynamicList' class="dynamic-warp">
4
+            <div class="dynamic-list" v-for="item in dynamicList" :key="item.name">
5
+                <div class="dynamic-list-left">
6
+                    <img src="http://public.nodebook.top/fd123a3921e910809fba9da0101bf8f6.jpg" />
7
+                </div>
8
+                <div class="dynamic-list-right">
9
+                    <p class="dynamic-list-right-top">
10
+                        <span>{{item.name}}</span>
11
+                        <span>{{item.type}}</span>
12
+                        <span>{{item.msg}}</span>
13
+                    </p>
14
+                    <p class="dynamic-list-right-bottom">
15
+                        {{item.time}}
16
+                    </p>
17
+                </div>
18
+            </div>
19
+        </vue-seamless-scroll>
20
+    </div>
21
+</template>
22
+
23
+<script>
24
+// 滚动样式详见: https://chenxuan1993.gitee.io/component-document/index_prod#/component/seamless-default
25
+export default {
26
+    data(){
27
+        return {
28
+            dynamicList:[
29
+                {
30
+                    name: '小张',
31
+                    type: '订购了',
32
+                    msg: '紫砂壶',
33
+                    time: '12-10 10:12'
34
+                },
35
+                {
36
+                    name: '小李',
37
+                    type: '订购了',
38
+                    msg: '绿茶',
39
+                    time: '12-10 10:12'
40
+                },
41
+                {
42
+                    name: '小王',
43
+                    type: '订购了',
44
+                    msg: '清茶',
45
+                    time: '12-10 10:12'
46
+                },
47
+                {
48
+                    name: '小林',
49
+                    type: '订购了',
50
+                    msg: '茉莉花茶',
51
+                    time: '12-10 10:12'
52
+                },
53
+                {
54
+                    name: '小时',
55
+                    type: '订购了',
56
+                    msg: '豆腐',
57
+                    time: '12-10 10:12'
58
+                },
59
+                {
60
+                    name: '小七',
61
+                    type: '订购了',
62
+                    msg: '萝卜',
63
+                    time: '12-10 10:12'
64
+                },
65
+                {
66
+                    name: '小齐',
67
+                    type: '订购了',
68
+                    msg: '青菜',
69
+                    time: '12-10 10:12'
70
+                },
71
+                {
72
+                    name: '小新',
73
+                    type: '订购了',
74
+                    msg: '新茶',
75
+                    time: '12-10 10:12'
76
+                },
77
+                {
78
+                    name: '小金',
79
+                    type: '订购了',
80
+                    msg: '毛尖',
81
+                    time: '12-10 10:12'
82
+                },
83
+                {
84
+                    name: '小毛',
85
+                    type: '订购了',
86
+                    msg: '红茶',
87
+                    time: '12-10 10:12'
88
+                }
89
+            ]
90
+        }
91
+    }
92
+}
93
+</script>
94
+
95
+<style scoped>
96
+.dynamic{
97
+    width: 100%;
98
+    height: auto;
99
+}
100
+.dynamic-warp{
101
+    height: 651px;
102
+    overflow: hidden;
103
+}
104
+.dynamic-list{
105
+    width: 100%;
106
+    height: 93px;
107
+    padding: 25px 0;
108
+    border-bottom: 1px solid #dcdfe6;
109
+    box-sizing: border-box;
110
+    display: flex;
111
+    justify-content: space-between;
112
+    cursor: pointer;
113
+}
114
+.dynamic-list:hover{
115
+    background: #DBFEFB;
116
+}
117
+.dynamic-list-left,.dynamic-list-left img{
118
+    width: 42px;
119
+    height: 42px;
120
+    border-radius: 21px;
121
+    overflow: hidden;
122
+    margin-right: 25px;
123
+}
124
+.dynamic-list-right{
125
+    flex: 1;
126
+    height: 42px;
127
+    display: flex;
128
+    justify-content: space-between;
129
+    flex-direction: column;
130
+    
131
+}
132
+.dynamic-list-right .dynamic-list-right-top{
133
+    font-size: 14px;
134
+}
135
+.dynamic-list-right-top span:nth-child(1){
136
+    color: #3B3C3C;
137
+    margin-right: 15px;
138
+}
139
+.dynamic-list-right-top span:nth-child(2){
140
+    color: #7C7E81;
141
+    margin-right: 5px;
142
+}
143
+.dynamic-list-right-top span:nth-child(3){
144
+    color: #2E93FD;
145
+}
146
+.dynamic-list-right-bottom{
147
+    color: #999999;
148
+    font-size: 12px;
149
+}
150
+</style>

+ 135 - 0
src/components/Index/fast.vue View File

@@ -0,0 +1,135 @@
1
+<template>
2
+    <div class="Fast">
3
+        <div class="Fast-list">
4
+            <div class="Fast-list-top">
5
+                <ship class="Fast-list-top-icon icon-ship" />
6
+            </div>
7
+            <div class="Fast-list-bottom">
8
+                待发货
9
+            </div>
10
+        </div>
11
+        <div class="Fast-list">
12
+            <div class="Fast-list-top">
13
+                <refund class="Fast-list-top-icon icon-refund" />
14
+            </div>
15
+            <div class="Fast-list-bottom">
16
+                待退款
17
+            </div>
18
+        </div>
19
+        <div class="Fast-list">
20
+            <div class="Fast-list-top">
21
+                <shelves class="Fast-list-top-icon icon-shelves" />
22
+            </div>
23
+            <div class="Fast-list-bottom">
24
+                商品上架
25
+            </div>
26
+        </div>
27
+        <div class="Fast-list">
28
+            <div class="Fast-list-top">
29
+                <feedback class="Fast-list-top-icon icon-feedback"  />
30
+            </div>
31
+            <div class="Fast-list-bottom">
32
+                意见反馈
33
+            </div>
34
+        </div>
35
+        <div class="Fast-list">
36
+            <div class="Fast-list-top">
37
+                <finance class="Fast-list-top-icon icon-finance" />
38
+            </div>
39
+            <div class="Fast-list-bottom">
40
+                财务
41
+            </div>
42
+        </div>
43
+        <div class="Fast-list">
44
+            <div class="Fast-list-top">
45
+                <analysis class="Fast-list-top-icon icon-analysis" />
46
+            </div>
47
+            <div class="Fast-list-bottom">
48
+                数据分析
49
+            </div>
50
+        </div>
51
+    </div>
52
+</template>
53
+
54
+<script>
55
+import ship from '@/assets/icon/ship.svg'
56
+import refund from '@/assets/icon/refund.svg'
57
+import feedback from '@/assets/icon/feedback.svg'
58
+import shelves from '@/assets/icon/shelves.svg'
59
+import finance from '@/assets/icon/finance.svg'
60
+import analysis from '@/assets/icon/analysis.svg'
61
+export default {
62
+    components:{
63
+        ship,
64
+        refund,
65
+        feedback,
66
+        shelves,
67
+        finance,
68
+        analysis
69
+    }
70
+}
71
+</script>
72
+<style scoped>
73
+.Fast{
74
+    width: 100%;
75
+    height: auto;
76
+    display: flex;
77
+    justify-content: space-between;
78
+    flex-wrap: wrap;
79
+}
80
+.Fast-list{
81
+    width: 33%;
82
+    height: 56px;
83
+    display: flex;
84
+    flex-direction: column;
85
+    justify-content: space-around;
86
+    cursor: pointer;
87
+    margin-bottom: 15px;
88
+    border-radius: 5px;
89
+}
90
+.Fast-list:hover{
91
+    background: #16B3FD;
92
+    color: #ffffff;
93
+
94
+}
95
+.Fast-list:hover .Fast-list-top-icon{
96
+    color: #ffffff !important;
97
+}
98
+.Fast-list:hover .Fast-list-bottom{
99
+    color: #ffffff !important;
100
+}
101
+.Fast-list-top{
102
+    width: 100%;
103
+    display: flex;
104
+    justify-content: center;
105
+}
106
+.Fast-list-top-icon{
107
+    width: 20px;
108
+    height: 20px;
109
+    fill: currentColor;
110
+}
111
+.Fast-list-bottom{
112
+    font-size: 12px;
113
+    color: #3F495E;
114
+    text-align: center;
115
+}
116
+.icon-ship{
117
+    color: #18FD6C;
118
+}
119
+.icon-refund{
120
+    color: #F85E1F;
121
+}
122
+.icon-feedback{
123
+    font-weight: bolder;
124
+    color: #FE4B60;
125
+}
126
+.icon-shelves{
127
+    color: #18A2FD;
128
+}
129
+.icon-finance{
130
+   color: #09F8BA;   
131
+}
132
+.icon-analysis{
133
+    color: #952BFD;
134
+}
135
+</style>

+ 120 - 0
src/components/Index/maps.vue View File

@@ -0,0 +1,120 @@
1
+<template>
2
+    <div class="map">
3
+        <div id="myChartChina" :style="{width: '100%', height: '500px'}"></div>
4
+    </div>
5
+</template>
6
+
7
+<script>
8
+export default {
9
+    mounted() {
10
+        this.drawLine();
11
+    },
12
+    methods:{
13
+        drawLine(){
14
+        // 基于准备好的dom,初始化echarts实例
15
+        var myChartContainer = document.getElementById('myChartChina');       
16
+        // var resizeMyChartContainer = function(){
17
+        //   myChartContainer.style.width=(document.body.offsetWidth/2)+'px'//页面一半的大小
18
+        // } 
19
+        //  resizeMyChartContainer();
20
+        var myChartChina = this.$echarts.init(myChartContainer); 
21
+
22
+        function randomData() {  
23
+                return Math.round(Math.random()*500);  
24
+            } 
25
+        // 绘制图表
26
+       var option = {
27
+              
28
+              tooltip: {
29
+                trigger: 'axis'
30
+              },
31
+              legend: {
32
+                data: ['合同总金额', '合同软件金额', '合同硬件金额', '合同总回款金额', '合同软件回款金额','合同硬件回款金额','续费总回款金额']
33
+              },
34
+              grid: {
35
+                left: '3%',
36
+                right: '4%',
37
+                bottom: '3%',
38
+                containLabel: true
39
+              },
40
+            
41
+              xAxis: {
42
+                type: 'category',
43
+                // boundaryGap: false,
44
+                data: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']
45
+              },
46
+              yAxis: {
47
+                min:0,  //取0为最小刻度
48
+                max: 2400,
49
+                splitNumber: 10,
50
+                type: 'value'
51
+              },
52
+              series: [
53
+                {
54
+                  name: '合同总金额',
55
+                  type: 'line',
56
+                  stack: 'Total',
57
+                  data: [120, 132, 101, 134, 90, 230, 210, 101, 134, 90, 230, 210],
58
+                  smooth: true
59
+                },
60
+                {
61
+                  name: '合同软件金额',
62
+                  type: 'line',
63
+                  stack: 'Total',
64
+                  data: [220, 182, 191, 234, 290, 330, 310, 191, 234, 290, 330, 310],
65
+                  smooth: true
66
+                },
67
+                {
68
+                  name: '合同硬件金额',
69
+                  type: 'line',
70
+                  stack: 'Total',
71
+                  data: [150, 232, 201, 154, 190, 330, 410, 201, 154, 190, 330, 410],
72
+                  smooth: true
73
+                },
74
+                {
75
+                  name: '合同总回款金额',
76
+                  type: 'line',
77
+                  stack: 'Total',
78
+                  data: [320, 332, 301, 334, 390, 330, 320, 301, 334, 390, 330, 320],
79
+                  smooth: true
80
+                },
81
+                {
82
+                  name: '合同软件回款金额',
83
+                  type: 'line',
84
+                  stack: 'Total',
85
+                  data: [220, 332, 301, 434, 290, 330, 320, 301, 434, 290, 330, 320],
86
+                  smooth: true
87
+                },{
88
+                  name: '合同硬件回款金额',
89
+                  type: 'line',
90
+                  stack: 'Total',
91
+                  data: [120, 432, 301, 334, 109, 130, 122, 301, 334, 109, 130, 122],
92
+                  smooth: true
93
+                },
94
+                {
95
+                  name: '续费总回款金额',
96
+                  type: 'line',
97
+                  stack: 'Total',
98
+                  data: [220, 132, 401, 334, 290, 330, 320, 401, 334, 290, 330, 320],
99
+                  smooth: true
100
+                }
101
+              ]
102
+          }
103
+          
104
+        myChartChina.setOption(option);
105
+        window.onresize=function(){
106
+            // resizeMyChartContainer();
107
+            myChartChina.resize();
108
+        }
109
+      }
110
+    }
111
+}
112
+</script>
113
+
114
+<style scoped>
115
+.map{
116
+    width: 100%;
117
+    height: 500px;
118
+    background: #ffffff;
119
+}
120
+</style>

+ 145 - 0
src/components/Index/project.vue View File

@@ -0,0 +1,145 @@
1
+<template>
2
+    <el-row :gutter="10" class="project">
3
+        <el-col :xs="12" :sm="12" :md="12" :lg="8" :xl="8">
4
+            <div class="project-list">
5
+                <div class="project-list-left">
6
+                    <uni class="project-list-left-icon" />
7
+                </div>
8
+                <div class="project-list-right">
9
+                    <count-to :startVal='startVal' :endVal='47' :duration='3000'></count-to>
10
+                    star
11
+                </div>
12
+            </div>
13
+        </el-col>
14
+        <el-col :xs="12" :sm="12" :md="12" :lg="8" :xl="8">
15
+            <div class="project-list">
16
+                <div class="project-list-left">
17
+                    <react class="project-list-left-icon" />
18
+                </div>
19
+                <div class="project-list-right">
20
+                    <count-to :startVal='startVal' :endVal='17' :duration='3000'></count-to>
21
+                    star
22
+                </div>
23
+            </div>
24
+        </el-col>
25
+        <el-col :xs="12" :sm="12" :md="12" :lg="8" :xl="8">
26
+            <div class="project-list">
27
+                <div class="project-list-left">
28
+                    <nodejs class="project-list-left-icon" />
29
+                </div>
30
+                <div class="project-list-right">
31
+                    <count-to :startVal='startVal' :endVal='10' :duration='3000'></count-to>
32
+                    star
33
+                </div>
34
+            </div>
35
+        </el-col>
36
+        <el-col :xs="12" :sm="12" :md="12" :lg="8" :xl="8">
37
+            <div class="project-list">
38
+                <div class="project-list-left">
39
+                    <vues class="project-list-left-icon" />
40
+                </div>
41
+                <div class="project-list-right">
42
+                    <count-to :startVal='startVal' :endVal='11' :duration='3000'></count-to>
43
+                    star
44
+                </div>
45
+            </div>
46
+        </el-col>
47
+        <el-col :xs="12" :sm="12" :md="12" :lg="8" :xl="8">
48
+            <div class="project-list">
49
+                <div class="project-list-left">
50
+                    <vues class="project-list-left-icon" />
51
+                </div>
52
+                <div class="project-list-right">
53
+                    <count-to :startVal='startVal' :endVal='7' :duration='3000'></count-to>
54
+                    star
55
+                </div>
56
+            </div>
57
+        </el-col>
58
+        <el-col :xs="12" :sm="12" :md="12" :lg="8" :xl="8">
59
+            <div class="project-list">
60
+                <div class="project-list-left">
61
+                    <apps class="project-list-left-icon" />
62
+                </div>
63
+                <div class="project-list-right">
64
+                    <count-to :startVal='startVal' :endVal='3' :duration='3000'></count-to>
65
+                    star
66
+                </div>
67
+            </div>
68
+        </el-col>
69
+    </el-row>
70
+</template>
71
+
72
+<script>
73
+import apps from '@/assets/icon/app.svg'
74
+import nodejs from '@/assets/icon/nodejs.svg'
75
+import react from '@/assets/icon/react.svg'
76
+import vues from '@/assets/icon/vue.svg'
77
+import uni from '@/assets/icon/u.svg'
78
+import countTo from 'vue-count-to';
79
+export default {
80
+    data(){
81
+        return {
82
+            startVal: 0,
83
+            endVal: 10
84
+        }
85
+    },
86
+    components:{
87
+        apps,
88
+        nodejs,
89
+        react,
90
+        vues,
91
+        uni,
92
+        countTo
93
+    }
94
+}
95
+</script>
96
+
97
+<style scoped>
98
+.project{
99
+    width: 100%;
100
+    height: auto;
101
+}
102
+.project-list{
103
+    width: 100%;
104
+    height: 108px;
105
+    /* background: #f7f7f7; */
106
+    border-radius: 5px;
107
+    cursor: pointer;
108
+    padding: 14px;
109
+    box-sizing: border-box;
110
+    background: url('../../assets/image/vue.png');
111
+    background-size: 100% 100%;
112
+    display: flex;
113
+    justify-content: space-between;
114
+    margin-bottom: 15px;
115
+}
116
+.project-list-left{
117
+    padding: 16px;
118
+    box-sizing: border-box;
119
+    width: 80px;
120
+    height: 80px;
121
+    border-radius: 5px;
122
+}
123
+.project-list-left:hover{
124
+    background: #E84D67;
125
+}
126
+.project-list-left:hover .project-list-left-icon{
127
+    color: #ffffff;
128
+}
129
+.project-list-left-icon{
130
+    width: 48px;
131
+    height: 48px;
132
+    fill: currentColor; 
133
+    color: #ffffff;
134
+    
135
+}
136
+.project-list-right{
137
+    flex: 1;
138
+    color: #EA4E68;
139
+    font-weight: bolder;
140
+    font-size: 30px;
141
+    line-height: 80px;
142
+    text-align: right;
143
+    color: #ffffff;
144
+}
145
+</style>

+ 31 - 0
src/components/Sidebar/Item.vue View File

@@ -0,0 +1,31 @@
1
+<script>
2
+export default {
3
+    name: "MenuItem",
4
+    functional: true,
5
+    props:{
6
+        icon: {
7
+            type: String,
8
+            default: ''
9
+        },
10
+        title: {
11
+            type: String,
12
+            default: ''
13
+        }
14
+    },
15
+    render(h, context){
16
+        const { icon, title } = context.props
17
+        const vnodes = []
18
+      
19
+        if(icon){
20
+            // vnodes.push(<svg-icon icon-class={icon} />)
21
+            vnodes.push(<i class={icon} style={{color: '#ffffff'}}></i>)
22
+        }
23
+        if(title){
24
+  
25
+            vnodes.push(<span slot='title'>{title}</span>)
26
+        }
27
+          
28
+        return vnodes
29
+    }
30
+}
31
+</script>

+ 113 - 0
src/components/Sidebar/SidebarItem.vue View File

@@ -0,0 +1,113 @@
1
+<template>
2
+    <div v-if="!item.hidden" class="menu-wrapper">
3
+        <!-- 仅有一个可显示的子路由,并且没有孙子路由 && (!onlyOneChild.children || onlyOneChild.noShowingChildren) && item.alwaysShow-->
4
+        <template v-if="hasOneShowingChild(item.children,item)">
5
+            <router-link v-if="onlyOneChild.meta && !onlyOneChild.meta.hidden" :to="resolvePath(onlyOneChild.path)">
6
+                <el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown' : isNest }">
7
+                    <item :icon="onlyOneChild.meta.icon || (item.meta && item.meta.icon)" :title="onlyOneChild.meta.title" />
8
+                </el-menu-item>
9
+            </router-link>
10
+        </template>
11
+        <el-submenu v-else ref="subMenu" :index="resolvePath(item.path)" popper-append-to-body>
12
+            <template v-slot:title>
13
+                <item v-if="item.meta" :icon="item.meta && item.meta.icon" :title="item.meta.title" />
14
+            </template>
15
+            <sidebar-item
16
+                v-for="child in item.children"
17
+                :key="child.path"
18
+                :is-nest='true'
19
+                :item='child'
20
+                :base-path="resolvePath(child.path)"
21
+                class="nest-menu"
22
+                />
23
+        </el-submenu>
24
+    </div>
25
+</template>
26
+
27
+<script>
28
+import path from 'path'
29
+import Item from './Item'
30
+
31
+export default {
32
+    name: "SidebarItem",
33
+    components: { Item },
34
+    props: {
35
+        item: {
36
+            type: Object,
37
+            required: true
38
+        },
39
+        isNest: {
40
+            type: Boolean,
41
+            required: false
42
+        },
43
+        basePath: {
44
+            type: String,
45
+            default: ''
46
+        }
47
+    },
48
+    data(){
49
+        this.onlyOneChild = null
50
+        return {
51
+            
52
+        }
53
+    },
54
+    mounted(){
55
+        // console.log(this.item)
56
+    },
57
+    methods:{
58
+        hasOneShowingChild(children = [],parent){
59
+           
60
+            const showingChildren = children.filter(item =>{
61
+                if(item.hidden){
62
+                    return false
63
+                } else {
64
+                    // 如果只有一个子菜单时设置
65
+                    this.onlyOneChild = item
66
+                    return true
67
+                }
68
+            })
69
+           
70
+            // 当只有一个子路由,子路由默认展示
71
+            if(showingChildren.length === 1){
72
+                return true
73
+            }
74
+            // 没有子路由则显示父路由
75
+            if(showingChildren.length === 0){
76
+                this.onlyOneChild = {...parent, path: '', noShowingChildren: true }
77
+                return true
78
+            }
79
+            //  console.log(this.onlyOneChild)
80
+            return false
81
+        },
82
+        resolvePath(routePath){
83
+            return path.resolve(this.basePath, routePath)
84
+        }
85
+    }    
86
+}
87
+</script>
88
+
89
+<style>
90
+.el-menu-item.is-active {
91
+    background: #1A86EE !important;
92
+}
93
+/* .el-submenu .el-menu-item{
94
+    height: 40px !important;
95
+    line-height: 40px !important;
96
+    margin: 2px 0 3px !important;
97
+}
98
+.el-menu-item{
99
+    height: 40px !important;
100
+    line-height: 40px !important;
101
+    margin: 2px 0 3px !important;
102
+}
103
+.el-submenu{
104
+    height: 40px !important;
105
+    line-height: 40px !important;
106
+    margin: 2px 0 3px !important;
107
+}
108
+.el-submenu__title{
109
+    height: 40px !important;
110
+    line-height: 40px !important;
111
+    margin: 2px 0 3px !important;
112
+} */
113
+</style>

+ 91 - 0
src/components/Sidebar/index.vue View File

@@ -0,0 +1,91 @@
1
+<template>
2
+  <div class="sidebar">
3
+    <div class="sidebar-title">收费管理系统</div>
4
+    <div class="sidebar-box">
5
+      <el-menu
6
+        class="el-menu-vertical-demo"
7
+        :collapse="false"
8
+        :default-active="activeMenu"
9
+        background-color="transparent"
10
+        :text-color="variables.menuText"
11
+        :unique-opened="false"
12
+        :active-text-color="variables.menuActiveText"
13
+        :collapse-transition="false"
14
+        mode="vertical"
15
+      >
16
+        <SidebarItem
17
+          v-for="route in permission_routes"
18
+          :key="route.path"
19
+          :item="route"
20
+          :base-path="route.path"
21
+        ></SidebarItem>
22
+      </el-menu>
23
+    </div>
24
+  </div>
25
+</template>
26
+
27
+<script>
28
+import { mapGetters } from "vuex";
29
+import SidebarItem from "./SidebarItem";
30
+
31
+export default {
32
+  components: { SidebarItem },
33
+  computed: {
34
+    ...mapGetters(["permission_routes"]),
35
+    activeMenu() {
36
+      const route = this.$route;
37
+      const { meta, path } = route;
38
+      // 默认激活项
39
+      if (meta.activeMenu) {
40
+        return meta.activeMenu;
41
+      }
42
+      return path;
43
+    },
44
+    variables() {
45
+      return {
46
+        menuText: "#ffffff", // "#bfcbd9"
47
+        menuActiveText: "#ffffff",
48
+        menuBg:  "#001529"
49
+       
50
+      };
51
+    }
52
+  },
53
+  mounted() {
54
+    console.log(this.permission_routes,12)
55
+  }
56
+};
57
+</script>
58
+
59
+<style scoped>
60
+.sidebar {
61
+  width: 100%;
62
+  height: 100%;
63
+}
64
+.sidebar-title {
65
+  width: 100%;
66
+  height: 50px;
67
+  border-bottom: 1px solid #dcdfe6;
68
+  color: #ffffff;
69
+  box-sizing: border-box;
70
+  text-align: center;
71
+  line-height: 50px;
72
+  font-size: 16px;
73
+}
74
+.sidebar-box {
75
+  width: 100%;
76
+  height: calc(100% - 64px);
77
+  overflow-x: hidden;
78
+  overflow-y: auto;
79
+  -ms-overflow-style: none;
80
+  overflow: "-moz-scrollbars-none";
81
+  scrollbar-width: none; /*  火狐   */
82
+}
83
+.sidebar-box::-webkit-scrollbar {
84
+  display: none; /*  Chrome  */
85
+  width: 0 !important ; /*  Chrome  */
86
+}
87
+.el-menu-vertical-demo:not(.el-menu--collapse) {
88
+    width: 200px;
89
+    min-height: 400px;
90
+  }
91
+</style>

+ 72 - 0
src/components/TageView/ScrollPane.vue View File

@@ -0,0 +1,72 @@
1
+<template>
2
+  <div class="scroll-container" ref="scrollContainer" @wheel.prevent="handleScroll">
3
+    <div class="scroll-wrapper" ref="scrollWrapper" :style="{left: left + 'px'}">
4
+      <slot></slot>
5
+    </div>
6
+  </div>
7
+</template>
8
+
9
+<script>
10
+const padding = 15 // tag's padding
11
+
12
+export default {
13
+  name: 'scrollPane',
14
+  data() {
15
+    return {
16
+      left: 0
17
+    }
18
+  },
19
+  methods: {
20
+    handleScroll(e) {
21
+      const eventDelta = e.wheelDelta || -e.deltaY * 3
22
+      const $container = this.$refs.scrollContainer
23
+      const $containerWidth = $container.offsetWidth
24
+      const $wrapper = this.$refs.scrollWrapper
25
+      const $wrapperWidth = $wrapper.offsetWidth
26
+
27
+      if (eventDelta > 0) {
28
+        this.left = Math.min(0, this.left + eventDelta)
29
+      } else {
30
+        if ($containerWidth - padding < $wrapperWidth) {
31
+          if (this.left < -($wrapperWidth - $containerWidth + padding)) {
32
+            this.left = this.left
33
+          } else {
34
+            this.left = Math.max(this.left + eventDelta, $containerWidth - $wrapperWidth - padding)
35
+          }
36
+        } else {
37
+          this.left = 0
38
+        }
39
+      }
40
+    },
41
+    moveToTarget($target) {
42
+      const $container = this.$refs.scrollContainer
43
+      const $containerWidth = $container.offsetWidth
44
+      const $targetLeft = $target.offsetLeft
45
+      const $targetWidth = $target.offsetWidth
46
+
47
+      if ($targetLeft < -this.left) {
48
+        // tag in the left
49
+        this.left = -$targetLeft + padding
50
+      } else if ($targetLeft + padding > -this.left && $targetLeft + $targetWidth < -this.left + $containerWidth - padding) {
51
+        // tag in the current view
52
+        // eslint-disable-line
53
+      } else {
54
+        // tag in the right
55
+        this.left = -($targetLeft - ($containerWidth - $targetWidth) + padding)
56
+      }
57
+    }
58
+  }
59
+}
60
+</script>
61
+
62
+<style rel="stylesheet/scss" lang="scss" scoped>
63
+.scroll-container {
64
+  white-space: nowrap;
65
+  position: relative;
66
+  overflow: hidden;
67
+  width: 100%;
68
+  .scroll-wrapper {
69
+    position: absolute;
70
+  }
71
+}
72
+</style>

+ 206 - 0
src/components/TageView/TagsView.vue View File

@@ -0,0 +1,206 @@
1
+<template>
2
+  <div class="tags-view-container">
3
+    
4
+    <scroll-pane class='tags-view-wrapper' ref='scrollPane'>
5
+      <router-link ref='tag' class="tags-view-item" :class="isActive(tag)?'active':''" v-for="tag in Array.from(visitedViews)"
6
+        :to="tag.path" :key="tag.path" @contextmenu.prevent.native="openMenu(tag,$event)">
7
+        {{tag.title}}
8
+        <span class='el-icon-close' @click.prevent.stop='closeSelectedTag(tag)'></span>
9
+      </router-link>
10
+    </scroll-pane>
11
+    <ul class='contextmenu' v-show="visible" :style="{left:left+'px',top:top+'px'}">
12
+      <li @click="closeSelectedTag(selectedTag)">关闭</li>
13
+      <li @click="closeOthersTags">关闭其它</li>
14
+      <li @click="closeAllTags">关闭所有</li>
15
+    </ul>
16
+  </div>
17
+</template>
18
+
19
+<script>
20
+import ScrollPane from './ScrollPane'
21
+
22
+export default {
23
+  components: { ScrollPane },
24
+  data() {
25
+    return {
26
+      visible: false,
27
+      top: 0,
28
+      left: 0,
29
+      selectedTag: {}
30
+    }
31
+  },
32
+  computed: {
33
+    visitedViews() {
34
+      return this.$store.state.tagsView.visitedViews
35
+    }
36
+  },
37
+  watch: {
38
+    $route() {
39
+      this.addViewTags()
40
+      this.moveToCurrentTag()
41
+    },
42
+    visible(value) {
43
+      if (value) {
44
+        document.body.addEventListener('click', this.closeMenu)
45
+      } else {
46
+        document.body.removeEventListener('click', this.closeMenu)
47
+      }
48
+    }
49
+  },
50
+  mounted() {
51
+    this.addViewTags()
52
+  },
53
+  methods: {
54
+    generateRoute() {
55
+      if (this.$route.name) {
56
+        return this.$route
57
+      }
58
+      return false
59
+    },
60
+    isActive(route) {
61
+      return route.path === this.$route.path // || route.name === this.$route.name
62
+    },
63
+    addViewTags() {
64
+      const route = this.generateRoute()
65
+      if (!route) {
66
+        return false
67
+      }
68
+      this.$store.dispatch('addVisitedViews', route)
69
+    },
70
+    moveToCurrentTag() {
71
+      const tags = this.$refs.tag
72
+      this.$nextTick(() => {
73
+        for (const tag of tags) {
74
+          if (tag.to === this.$route.path) {
75
+            this.$refs.scrollPane.moveToTarget(tag.$el)
76
+            break
77
+          }
78
+        }
79
+      })
80
+    },
81
+    closeSelectedTag(view) {
82
+      this.$store.dispatch('delVisitedViews', view).then((views) => {
83
+        if (this.isActive(view)) {
84
+          const latestView = views.slice(-1)[0]
85
+          if (latestView) {
86
+            this.$router.push(latestView.path)
87
+          } else {
88
+            this.$router.push('/')
89
+          }
90
+        }
91
+      })
92
+    },
93
+    closeOthersTags() {
94
+      this.$router.push(this.selectedTag.path)
95
+      this.$store.dispatch('delOthersViews', this.selectedTag).then(() => {
96
+        this.moveToCurrentTag()
97
+      })
98
+    },
99
+    closeAllTags() {
100
+      this.$store.dispatch('delAllViews')
101
+      this.$router.push('/')
102
+    },
103
+    openMenu(tag, e) {
104
+      this.visible = true
105
+      this.selectedTag = tag
106
+      this.left = e.clientX
107
+      this.top = e.clientY
108
+    },
109
+    closeMenu() {
110
+      this.visible = false
111
+    },
112
+   
113
+  }
114
+}
115
+</script>
116
+
117
+<style rel="stylesheet/scss" lang="scss" scoped>
118
+.tags-view-container {
119
+  .tags-view-wrapper {
120
+    background: rgba(255, 255, 255, .8);
121
+    height: 34px;
122
+    border-bottom: 1px solid #d8dce5;
123
+    box-shadow: 0 1px 3px 0 rgba(0, 0, 0, .12), 0 0 3px 0 rgba(0, 0, 0, .04);
124
+    .tags-view-item {
125
+      display: inline-block;
126
+      position: relative;
127
+      height: 26px;
128
+      line-height: 26px;
129
+      border: 1px solid #d8dce5;
130
+      color: #495060;
131
+      background: rgba(255, 255, 255, .8);
132
+      padding: 0 10px;
133
+      font-size: 12px;
134
+      margin-left: 7px;
135
+      margin-top: 4px;
136
+      border-radius: 3px;
137
+      &:first-of-type {
138
+        margin-left: 15px;
139
+      }
140
+      &.active {
141
+        background-color: #0BADF9;
142
+        color: #fff;
143
+        border-color: #0BADF9; //#42b983
144
+        &::before {
145
+          content: '';
146
+          background: #fff;
147
+          display: inline-block;
148
+          width: 8px;
149
+          height: 8px;
150
+          border-radius: 50%;
151
+          position: relative;
152
+          margin-right: 2px;
153
+        }
154
+      }
155
+    }
156
+  }
157
+  .contextmenu {
158
+    margin: 0;
159
+    background: #fff;
160
+    z-index: 2;
161
+    position: absolute;
162
+    list-style-type: none;
163
+    padding: 5px 0;
164
+    border-radius: 4px;
165
+    font-size: 12px;
166
+    font-weight: 400;
167
+    color: #333;
168
+    box-shadow: 2px 2px 3px 0 rgba(0, 0, 0, .3);
169
+    li {
170
+      margin: 0;
171
+      padding: 7px 16px;
172
+      cursor: pointer;
173
+      &:hover {
174
+        background: #eee;
175
+      }
176
+    }
177
+  }
178
+}
179
+</style>
180
+
181
+<style rel="stylesheet/scss" lang="scss">
182
+//reset element css of el-icon-close
183
+.tags-view-wrapper {
184
+  .tags-view-item {
185
+    .el-icon-close {
186
+      width: 16px;
187
+      height: 16px;
188
+      vertical-align: 2px;
189
+      border-radius: 50%;
190
+      text-align: center;
191
+      transition: all .3s cubic-bezier(.645, .045, .355, 1);
192
+      transform-origin: 100% 50%;
193
+      margin-left: 3px;
194
+      &:before {
195
+        transform: scale(.6);
196
+        display: inline-block;
197
+        vertical-align: -3px;
198
+      }
199
+      &:hover {
200
+        background-color: #F9470B; //#b4bccc
201
+        color: #fff;
202
+      }
203
+    }
204
+  }
205
+}
206
+</style>

+ 104 - 0
src/components/Tinymce/components/editorImage.vue View File

@@ -0,0 +1,104 @@
1
+<template>
2
+  <div class="upload-container">
3
+    <el-button icon='el-icon-upload' size="mini" :style="{background:color,borderColor:color}" @click=" dialogVisible=true" type="primary">上传图片
4
+    </el-button>
5
+    <el-dialog :visible.sync="dialogVisible">
6
+      <el-upload 
7
+      class="editor-slide-upload" 
8
+      action="https://httpbin.org/post" 
9
+      :multiple="true" 
10
+      :file-list="fileList" 
11
+      :show-file-list="true"
12
+      list-type="picture-card" 
13
+      :on-remove="handleRemove" 
14
+      :on-success="handleSuccess" 
15
+      :before-upload="beforeUpload">
16
+        <el-button size="small" type="primary">点击上传</el-button>
17
+      </el-upload>
18
+      <el-button @click="dialogVisible = false">取 消</el-button>
19
+      <el-button type="primary" @click="handleSubmit">保 存</el-button>
20
+    </el-dialog>
21
+  </div>
22
+</template>
23
+
24
+<script>
25
+// import { getToken } from 'api/qiniu'
26
+
27
+export default {
28
+  name: 'editorSlideUpload',
29
+  props: {
30
+    color: {
31
+      type: String,
32
+      default: '#1890ff'
33
+    }
34
+  },
35
+  data() {
36
+    return {
37
+      dialogVisible: false,
38
+      listObj: {},
39
+      fileList: []
40
+    }
41
+  },
42
+  methods: {
43
+    checkAllSuccess() {
44
+      return Object.keys(this.listObj).every(item => this.listObj[item].hasSuccess)
45
+    },
46
+    handleSubmit() {
47
+      const arr = Object.keys(this.listObj).map(v => this.listObj[v])
48
+      if (!this.checkAllSuccess()) {
49
+        this.$message('请等待所有图片上传成功 或 出现了网络问题,请刷新页面重新上传!')
50
+        return
51
+      }
52
+      console.log(arr)
53
+      this.$emit('successCBK', arr)
54
+      this.listObj = {}
55
+      this.fileList = []
56
+      this.dialogVisible = false
57
+    },
58
+    handleSuccess(response, file) {
59
+      const uid = file.uid
60
+      const objKeyArr = Object.keys(this.listObj)
61
+      for (let i = 0, len = objKeyArr.length; i < len; i++) {
62
+        if (this.listObj[objKeyArr[i]].uid === uid) {
63
+          this.listObj[objKeyArr[i]].url = response.files.file
64
+          this.listObj[objKeyArr[i]].hasSuccess = true
65
+          return
66
+        }
67
+      }
68
+    },
69
+    handleRemove(file) {
70
+      const uid = file.uid
71
+      const objKeyArr = Object.keys(this.listObj)
72
+      for (let i = 0, len = objKeyArr.length; i < len; i++) {
73
+        if (this.listObj[objKeyArr[i]].uid === uid) {
74
+          delete this.listObj[objKeyArr[i]]
75
+          return
76
+        }
77
+      }
78
+    },
79
+    beforeUpload(file) {
80
+      const _self = this
81
+      const _URL = window.URL || window.webkitURL
82
+      const fileName = file.uid
83
+      this.listObj[fileName] = {}
84
+      return new Promise((resolve, reject) => {
85
+        const img = new Image()
86
+        img.src = _URL.createObjectURL(file)
87
+        img.onload = function() {
88
+          _self.listObj[fileName] = { hasSuccess: false, uid: file.uid, width: this.width, height: this.height }
89
+        }
90
+        resolve(true)
91
+      })
92
+    }
93
+  }
94
+}
95
+</script>
96
+
97
+<style rel="stylesheet/scss" lang="scss" scoped>
98
+.editor-slide-upload {
99
+  margin-bottom: 20px;
100
+  /deep/ .el-upload--picture-card {
101
+    width: 100%;
102
+  }
103
+}
104
+</style>

+ 194 - 0
src/components/Tinymce/index.vue View File

@@ -0,0 +1,194 @@
1
+<template>
2
+  <div class="tinymce-container editor-container" :class="{fullscreen:fullscreen}">
3
+    <textarea class="tinymce-textarea" :id="tinymceId"></textarea>
4
+    <div class="editor-custom-btn-container" v-show="show_upload_img">
5
+      <editorImage color="#1890ff" class="editor-upload-btn" @successCBK="imageSuccessCBK"></editorImage>
6
+    </div>
7
+  </div>
8
+</template>
9
+
10
+<script>
11
+import editorImage from './components/editorImage'
12
+import plugins from './plugins'
13
+import toolbar from './toolbar'
14
+
15
+export default {
16
+  name: 'tinymce',
17
+  components: { editorImage },
18
+  props: {
19
+    id: {
20
+      type: String
21
+    },
22
+    value: {
23
+      type: String,
24
+      default: ''
25
+    },
26
+    toolbar: {
27
+      type: Array,
28
+      required: false,
29
+      default() {
30
+        return []
31
+      }
32
+    },
33
+    menubar: {
34
+      default: 'file edit insert view format table'
35
+    },
36
+    height: {
37
+      type: Number,
38
+      required: false,
39
+      default: 360
40
+    },
41
+    show_upload_img: {
42
+      type: Boolean,
43
+      required: false,
44
+      default: true,
45
+    }
46
+  },
47
+  data() {
48
+    return {
49
+      hasChange: false,
50
+      hasInit: false,
51
+      tinymceId: this.id || 'vue-tinymce-' + +new Date(),
52
+      fullscreen: false
53
+    }
54
+  },
55
+  watch: {
56
+    value(val) {
57
+      if (!this.hasChange && this.hasInit) {
58
+        this.$nextTick(() =>
59
+          window.tinymce.get(this.tinymceId).setContent(val || ''))
60
+      }
61
+    }
62
+  },
63
+  mounted() {
64
+    this.initTinymce()
65
+  },
66
+  activated() {
67
+    this.initTinymce()
68
+  },
69
+  deactivated() {
70
+    this.destroyTinymce()
71
+  },
72
+  methods: {
73
+    initTinymce() {
74
+      const _this = this
75
+      window.tinymce.init({
76
+        selector: `#${this.tinymceId}`,
77
+        branding: false,
78
+        height: this.height,
79
+        min_height: this.height,
80
+        body_class: 'panel-body ',
81
+        object_resizing: false,
82
+        toolbar: this.toolbar.length > 0 ? this.toolbar : toolbar,
83
+        menubar: this.menubar,
84
+        plugins: plugins,
85
+        end_container_on_empty_block: true,
86
+        powerpaste_word_import: 'clean',
87
+        code_dialog_height: 450,
88
+        code_dialog_width: 1000,
89
+        advlist_bullet_styles: 'square',
90
+        advlist_number_styles: 'default',
91
+        imagetools_cors_hosts: ['www.tinymce.com', 'codepen.io'],
92
+        default_link_target: '_blank',
93
+        link_title: false,
94
+        language: 'zh_CN',
95
+        nonbreaking_force_tab: true, // inserting nonbreaking space &nbsp; need Nonbreaking Space Plugin
96
+        init_instance_callback: editor => {
97
+          if (_this.value) {
98
+            editor.setContent(_this.value)
99
+          }
100
+          _this.hasInit = true
101
+          editor.on('NodeChange Change KeyUp SetContent', () => {
102
+            this.hasChange = true
103
+            this.$emit('input', editor.getContent())
104
+          })
105
+        },
106
+        setup(editor) {
107
+          editor.on('FullscreenStateChanged', (e) => {
108
+            _this.fullscreen = e.state
109
+          })
110
+        }
111
+        // 整合七牛上传
112
+        // images_dataimg_filter(img) {
113
+        //   setTimeout(() => {
114
+        //     const $image = $(img);
115
+        //     $image.removeAttr('width');
116
+        //     $image.removeAttr('height');
117
+        //     if ($image[0].height && $image[0].width) {
118
+        //       $image.attr('data-wscntype', 'image');
119
+        //       $image.attr('data-wscnh', $image[0].height);
120
+        //       $image.attr('data-wscnw', $image[0].width);
121
+        //       $image.addClass('wscnph');
122
+        //     }
123
+        //   }, 0);
124
+        //   return img
125
+        // },
126
+        // images_upload_handler(blobInfo, success, failure, progress) {
127
+        //   progress(0);
128
+        //   const token = _this.$store.getters.token;
129
+        //   getToken(token).then(response => {
130
+        //     const url = response.data.qiniu_url;
131
+        //     const formData = new FormData();
132
+        //     formData.append('token', response.data.qiniu_token);
133
+        //     formData.append('key', response.data.qiniu_key);
134
+        //     formData.append('file', blobInfo.blob(), url);
135
+        //     upload(formData).then(() => {
136
+        //       success(url);
137
+        //       progress(100);
138
+        //     })
139
+        //   }).catch(err => {
140
+        //     failure('出现未知问题,刷新页面,或者联系程序员')
141
+        //     console.log(err);
142
+        //   });
143
+        // },
144
+      })
145
+    },
146
+    destroyTinymce() {
147
+      if (window.tinymce.get(this.tinymceId)) {
148
+        window.tinymce.get(this.tinymceId).destroy()
149
+      }
150
+    },
151
+    setContent(value) {
152
+      window.tinymce.get(this.tinymceId).setContent(value)
153
+    },
154
+    getContent() {
155
+      window.tinymce.get(this.tinymceId).getContent()
156
+    },
157
+    imageSuccessCBK(arr) {
158
+      const _this = this
159
+      arr.forEach(v => {
160
+        window.tinymce.get(_this.tinymceId).insertContent(`<img class="wscnph" src="${v.url}" >`)
161
+      })
162
+    }
163
+  },
164
+  destroyed() {
165
+    this.destroyTinymce()
166
+  }
167
+}
168
+</script>
169
+
170
+<style scoped>
171
+.tinymce-container {
172
+  position: relative;
173
+}
174
+.tinymce-container>>>.mce-fullscreen {
175
+  z-index: 10000;
176
+}
177
+.tinymce-textarea {
178
+  visibility: hidden;
179
+  z-index: -1;
180
+}
181
+.editor-custom-btn-container {
182
+  position: absolute;
183
+  right: 4px;
184
+  top: 4px;
185
+  /*z-index: 2005;*/
186
+}
187
+.fullscreen .editor-custom-btn-container {
188
+  z-index: 10000;
189
+  position: fixed;
190
+}
191
+.editor-upload-btn {
192
+  display: inline-block;
193
+}
194
+</style>

+ 7 - 0
src/components/Tinymce/plugins.js View File

@@ -0,0 +1,7 @@
1
+// Any plugins you want to use has to be imported
2
+// Detail plugins list see https://www.tinymce.com/docs/plugins/
3
+// Custom builds see https://www.tinymce.com/download/custom-builds/
4
+
5
+const plugins = ['advlist anchor autolink autosave code codesample colorpicker colorpicker contextmenu directionality emoticons fullscreen hr image imagetools importcss insertdatetime link lists media nonbreaking noneditable pagebreak paste preview print save searchreplace spellchecker tabfocus table template textcolor textpattern visualblocks visualchars wordcount']
6
+
7
+export default plugins

+ 6 - 0
src/components/Tinymce/toolbar.js View File

@@ -0,0 +1,6 @@
1
+// Here is a list of the toolbar
2
+// Detail list see https://www.tinymce.com/docs/advanced/editor-control-identifiers/#toolbarcontrols
3
+
4
+const toolbar = ['bold italic underline strikethrough alignleft aligncenter alignright outdent indent  blockquote undo redo removeformat subscript superscript code codesample', 'hr bullist numlist link charmap preview anchor pagebreak insertdatetime media table emoticons forecolor backcolor fullscreen']
5
+
6
+export default toolbar

+ 81 - 0
src/components/analyze/cards.vue View File

@@ -0,0 +1,81 @@
1
+<template>
2
+    <el-col :xs="12" :sm="12" :md="8" :lg="4" :xl="4" style="margin-bottom: 20px;">
3
+        <div class="index-sales-list" :style="{ borderColor : colors}">
4
+            <div class="index-sales-list-name">
5
+                {{name}}
6
+            </div>
7
+             <div class="index-sales-list-main"  :style="{ background : colors}">
8
+                <div class="index-sales-list-main-icon">
9
+                    <DealSvg v-if="ionc == 'DealSvg'" class="index-sales-list-main-icon-svg" />
10
+                    <MoneySvg v-else class="index-sales-list-main-icon-svg" />
11
+                </div>
12
+                <div class="index-sales-list-main-number">
13
+                    <count-to :startVal='0' :endVal='number' :duration='3000'></count-to>
14
+                </div>
15
+            </div>
16
+        </div>
17
+    </el-col>
18
+</template>
19
+
20
+<script>
21
+import DealSvg from '../../assets/icon/deal.svg'
22
+import MoneySvg from '../../assets/icon/money.svg'
23
+import countTo from 'vue-count-to';
24
+export default {
25
+    props:['colors','name','number','ionc'],
26
+    components:{
27
+        DealSvg,
28
+        MoneySvg,
29
+        countTo
30
+    }
31
+}
32
+</script>
33
+
34
+<style scoped>
35
+.index-sales-list{
36
+    width: 100%;
37
+    height: auto;
38
+    /* border: 1px soild #FFA333; */
39
+    border: 1px solid #FFA333;
40
+    border-radius: 5px;
41
+    box-sizing: border-box;
42
+}
43
+.index-sales-list-name{
44
+    width: 100%;
45
+    height: 40px;
46
+    text-align: center;
47
+    line-height: 40px;
48
+    font-size: 16px;
49
+    color: #5C5C5C;
50
+}
51
+.index-sales-list-main{
52
+    width: 100%;
53
+    height: 60px;
54
+    background: #FFA333;
55
+    display: flex;
56
+    justify-content: space-between;
57
+}
58
+.index-sales-list-main-icon{
59
+    width: 50px;
60
+    height: 100%;
61
+    display: flex;
62
+    justify-content: center;
63
+    align-items: center;
64
+}
65
+.index-sales-list-main-icon-svg{
66
+    width: 35px;
67
+    height: 35px;
68
+    color: #ffffff;
69
+    fill: currentColor; 
70
+}
71
+.index-sales-list-main-number{
72
+    width: 70%;
73
+    /* background: chartreuse; */
74
+    text-align: left;
75
+    font-size: 30px;
76
+    padding-right: 25px;
77
+    box-sizing: border-box;
78
+    line-height: 60px;
79
+    color: #ffffff;
80
+}
81
+</style>

+ 81 - 0
src/components/analyze/client.vue View File

@@ -0,0 +1,81 @@
1
+<template>
2
+    <div class="index-client">
3
+        <div class="index-client-box">
4
+            <span class="index-client-box-name">购买来源</span>
5
+            <div class="index-client-box-select">
6
+                <el-button-group>
7
+                    <el-button type="primary" size="mini">近七天</el-button>
8
+                    <el-button size="mini">本月</el-button>
9
+                    <el-button size="mini">本年</el-button>
10
+                </el-button-group>
11
+            </div>
12
+            <div class="index-client-box-charts">
13
+                <ve-pie :data="chartData"></ve-pie>
14
+            </div>    
15
+        </div>           
16
+    </div>
17
+</template>
18
+
19
+<script>
20
+export default {
21
+    data(){
22
+        return {
23
+            chartData:{
24
+                columns: ['支付方式', '占比'],
25
+                rows: [
26
+                    { '支付方式': '小程序', '占比': 25 },
27
+                    { '支付方式': 'IOS客户端', '占比': 39 },
28
+                    { '支付方式': '安卓客户端', '占比': 50 },
29
+                    { '支付方式': 'H5移动端', '占比': 10 },
30
+                    { '支付方式': 'PC端', '占比': 5 },
31
+                ]
32
+            }
33
+        }
34
+    }
35
+}
36
+</script>
37
+<style scoped>
38
+.index-client{
39
+    width: 100%;
40
+    height: auto;
41
+    background: #ffffff;
42
+    border-radius: 5px;
43
+    padding: 15px;
44
+    box-sizing: border-box;
45
+}
46
+.index-client-box{
47
+    width: 100%;
48
+    /* height: 200px; */
49
+    border:  1px solid #E6E6E6;
50
+    position: relative;
51
+    padding: 20px 15px;
52
+    box-sizing: border-box;
53
+}
54
+.index-client-box-name{
55
+    position: absolute;
56
+    width: 100px;
57
+    height: 30px;
58
+    background: #ffffff;
59
+    display: inline-block;
60
+    text-align: center;
61
+    line-height: 30px;
62
+    font-size: 13px;
63
+    color: #000000;
64
+    left: 25px;
65
+    top: -15px;
66
+}
67
+.index-client-box-select{
68
+    width: 100%;
69
+    height: 40px;
70
+    /* background: burlywood; */
71
+    display: flex;
72
+    justify-content: flex-end;
73
+    align-items: center;
74
+    margin-bottom: 10px;
75
+}
76
+.index-client-box-charts{
77
+    width: 100%;
78
+    height: 350px;
79
+    /* background: chocolate; */
80
+}
81
+</style>

+ 180 - 0
src/components/analyze/map.vue View File

@@ -0,0 +1,180 @@
1
+<template>
2
+    <div class="index-pay">
3
+        <div class="index-pay-box">
4
+            <span class="index-pay-box-name">订单分布</span>
5
+            <div class="index-pay-box-select">
6
+                <el-button-group>
7
+                    <el-button type="primary" size="mini">近七天</el-button>
8
+                    <el-button size="mini">本月</el-button>
9
+                    <el-button size="mini">本年</el-button>
10
+                </el-button-group>
11
+            </div>
12
+            <div id="index-pay-box-charts">
13
+                <div id="myChartChina" :style="{width: '100%', height: '500px'}"></div>
14
+            </div>    
15
+        </div>           
16
+    </div>
17
+</template>
18
+
19
+<script>
20
+export default {
21
+    data(){
22
+        return {
23
+            
24
+        }
25
+    },
26
+    mounted() {
27
+        this.drawLine();
28
+    },
29
+    methods:{
30
+        drawLine(){
31
+        // 基于准备好的dom,初始化echarts实例
32
+        var myChartContainer = document.getElementById('myChartChina');       
33
+        var resizeMyChartContainer = function(){
34
+          myChartContainer.style.width=(document.body.offsetWidth/2)+'px'//页面一半的大小
35
+        } 
36
+         resizeMyChartContainer();
37
+        var myChartChina = this.$echarts.init(myChartContainer); 
38
+
39
+        function randomData() {  
40
+                return Math.round(Math.random()*500);  
41
+            } 
42
+        // 绘制图表
43
+       var optionMap = {  
44
+              tooltip: {},
45
+                 legend: {
46
+                            orient: 'vertical',
47
+                            left: 'left',
48
+                            data:['']
49
+                        },      
50
+                 visualMap: {
51
+                            min: 0,
52
+                            max: 1000,
53
+                            left: '10%',
54
+                            top: 'bottom',
55
+                            text: ['高','低'],
56
+                            calculable : true,
57
+                            color:['#158BFE','#ffffff']
58
+                        },   
59
+                 selectedMode: 'single',
60
+                 series : [                         
61
+                            {
62
+                              name: '', 
63
+                              type: 'map',
64
+                              mapType: 'china',
65
+                              itemStyle: {
66
+                                    normal:{
67
+                                        borderColor: 'rgba(0, 0, 0, 0.2)'
68
+                                    },
69
+                                    emphasis:{
70
+                                        shadowOffsetX: 0,
71
+                                        shadowOffsetY: 0,
72
+                                        shadowBlur: 20,
73
+                                        borderWidth: 0,
74
+                                        shadowColor: 'rgba(0, 0, 0, 0.5)'
75
+                                    }
76
+                                },
77
+                                showLegendSymbol: true,
78
+                                label: {
79
+                                    normal: {
80
+                                        show: true
81
+                                    },
82
+                                    emphasis: {
83
+                                        show: true
84
+                                    }
85
+                                },
86
+                                data:[               
87
+                                     {name: '北京',value: randomData() },
88
+                                      {name: '天津',value: randomData() },
89
+                                      {name: '上海',value: randomData() },
90
+                                      {name: '重庆',value: randomData() },
91
+                                      {name: '河北',value: randomData() },
92
+                                      {name: '河南',value: randomData() },
93
+                                      {name: '云南',value: randomData() },
94
+                                      {name: '辽宁',value: randomData() },
95
+                                      {name: '黑龙江',value: randomData() },
96
+                                      {name: '湖南',value: randomData() },
97
+                                      {name: '安徽',value: randomData() },
98
+                                      {name: '山东',value: randomData() },
99
+                                      {name: '新疆',value: randomData() },
100
+                                      {name: '江苏',value: randomData() },
101
+                                      {name: '浙江',value: randomData() },
102
+                                      {name: '江西',value: randomData() },
103
+                                      {name: '湖北',value: randomData() },
104
+                                      {name: '广西',value: randomData() },
105
+                                      {name: '甘肃',value: randomData() },
106
+                                      {name: '山西',value: randomData() },
107
+                                      {name: '内蒙古',value: randomData() },
108
+                                      {name: '陕西',value: randomData() },
109
+                                      {name: '吉林',value: randomData() },
110
+                                      {name: '福建',value: randomData() },
111
+                                      {name: '贵州',value: randomData() },
112
+                                      {name: '广东',value: randomData() },
113
+                                      {name: '青海',value: randomData() },
114
+                                      {name: '西藏',value: randomData() },
115
+                                      {name: '四川',value: randomData() },
116
+                                      {name: '宁夏',value: randomData() },
117
+                                      {name: '海南',value: randomData() },
118
+                                      {name: '台湾',value: randomData() },
119
+                                      {name: '香港',value: randomData() },
120
+                                      {name: '澳门',value: randomData() }
121
+                                ]
122
+                            }
123
+                        ]
124
+               }
125
+     
126
+        myChartChina.setOption(optionMap);
127
+        window.onresize=function(){
128
+            resizeMyChartContainer();
129
+            myChartChina.resize();
130
+        }
131
+      }
132
+    }
133
+}
134
+</script>
135
+
136
+<style scoped>
137
+.index-pay{
138
+    width: 100%;
139
+    height: auto;
140
+    background: #ffffff;
141
+    border-radius: 5px;
142
+    padding: 15px;
143
+    box-sizing: border-box;
144
+}
145
+.index-pay-box{
146
+    width: 100%;
147
+    /* height: 200px; */
148
+    border:  1px solid #E6E6E6;
149
+    position: relative;
150
+    padding: 20px 15px;
151
+    box-sizing: border-box;
152
+}
153
+.index-pay-box-name{
154
+    position: absolute;
155
+    width: 100px;
156
+    height: 30px;
157
+    background: #ffffff;
158
+    display: inline-block;
159
+    text-align: center;
160
+    line-height: 30px;
161
+    font-size: 13px;
162
+    color: #000000;
163
+    left: 25px;
164
+    top: -15px;
165
+}
166
+.index-pay-box-select{
167
+    width: 100%;
168
+    height: 40px;
169
+    /* background: burlywood; */
170
+    display: flex;
171
+    justify-content: flex-end;
172
+    align-items: center;
173
+    margin-bottom: 10px;
174
+}
175
+#index-pay-box-charts{
176
+    width: 100%;
177
+    height: 500px;
178
+    /* background: chocolate; */
179
+}
180
+</style>

+ 125 - 0
src/components/analyze/maps.vue View File

@@ -0,0 +1,125 @@
1
+<template>
2
+    <div class="map">
3
+        <div id="myChartChina" :style="{width: '100%', height: '500px'}"></div>
4
+    </div>
5
+</template>
6
+
7
+<script>
8
+export default {
9
+    mounted() {
10
+        this.drawLine();
11
+    },
12
+    methods:{
13
+        drawLine(){
14
+        // 基于准备好的dom,初始化echarts实例
15
+        var myChartContainer = document.getElementById('myChartChina');       
16
+        var resizeMyChartContainer = function(){
17
+          myChartContainer.style.width=(document.body.offsetWidth/2)+'px'//页面一半的大小
18
+        } 
19
+         resizeMyChartContainer();
20
+        var myChartChina = this.$echarts.init(myChartContainer); 
21
+
22
+        function randomData() {  
23
+                return Math.round(Math.random()*500);  
24
+            } 
25
+        // 绘制图表
26
+       var optionMap = {  
27
+              tooltip: {},
28
+                 legend: {
29
+                            orient: 'vertical',
30
+                            left: 'left',
31
+                            data:['']
32
+                        },      
33
+                 visualMap: {
34
+                            min: 0,
35
+                            max: 1500,
36
+                            left: '10%',
37
+                            top: 'bottom',
38
+                            text: ['高','低'],
39
+                            calculable : true,
40
+                            color:['#158BFE','#ffffff']
41
+                        },   
42
+                 selectedMode: 'single',
43
+                 series : [                         
44
+                            {
45
+                              name: '', 
46
+                              type: 'map',
47
+                              mapType: 'china',
48
+                              itemStyle: {
49
+                                    normal:{
50
+                                        borderColor: 'rgba(0, 0, 0, 0.2)'
51
+                                    },
52
+                                    emphasis:{
53
+                                        shadowOffsetX: 0,
54
+                                        shadowOffsetY: 0,
55
+                                        shadowBlur: 20,
56
+                                        borderWidth: 0,
57
+                                        shadowColor: 'rgba(0, 0, 0, 0.5)'
58
+                                    }
59
+                                },
60
+                                showLegendSymbol: true,
61
+                                label: {
62
+                                    normal: {
63
+                                        show: true
64
+                                    },
65
+                                    emphasis: {
66
+                                        show: true
67
+                                    }
68
+                                },
69
+                                data:[               
70
+                                     {name: '北京',value: randomData() },
71
+                                      {name: '天津',value: randomData() },
72
+                                      {name: '上海',value: randomData() },
73
+                                      {name: '重庆',value: randomData() },
74
+                                      {name: '河北',value: randomData() },
75
+                                      {name: '河南',value: randomData() },
76
+                                      {name: '云南',value: randomData() },
77
+                                      {name: '辽宁',value: randomData() },
78
+                                      {name: '黑龙江',value: randomData() },
79
+                                      {name: '湖南',value: randomData() },
80
+                                      {name: '安徽',value: randomData() },
81
+                                      {name: '山东',value: randomData() },
82
+                                      {name: '新疆',value: randomData() },
83
+                                      {name: '江苏',value: randomData() },
84
+                                      {name: '浙江',value: randomData() },
85
+                                      {name: '江西',value: randomData() },
86
+                                      {name: '湖北',value: randomData() },
87
+                                      {name: '广西',value: randomData() },
88
+                                      {name: '甘肃',value: randomData() },
89
+                                      {name: '山西',value: randomData() },
90
+                                      {name: '内蒙古',value: randomData() },
91
+                                      {name: '陕西',value: randomData() },
92
+                                      {name: '吉林',value: randomData() },
93
+                                      {name: '福建',value: randomData() },
94
+                                      {name: '贵州',value: randomData() },
95
+                                      {name: '广东',value: randomData() },
96
+                                      {name: '青海',value: randomData() },
97
+                                      {name: '西藏',value: randomData() },
98
+                                      {name: '四川',value: randomData() },
99
+                                      {name: '宁夏',value: randomData() },
100
+                                      {name: '海南',value: randomData() },
101
+                                      {name: '台湾',value: randomData() },
102
+                                      {name: '香港',value: randomData() },
103
+                                      {name: '澳门',value: randomData() }
104
+                                ]
105
+                            }
106
+                        ]
107
+               }
108
+     
109
+        myChartChina.setOption(optionMap);
110
+        window.onresize=function(){
111
+            resizeMyChartContainer();
112
+            myChartChina.resize();
113
+        }
114
+      }
115
+    }
116
+}
117
+</script>
118
+
119
+<style scoped>
120
+.map{
121
+    width: 100%;
122
+    height: 500px;
123
+    background: #ffffff;
124
+}
125
+</style>

+ 98 - 0
src/components/analyze/monitorcar.vue View File

@@ -0,0 +1,98 @@
1
+<template>
2
+    
3
+    <div class="monitor-cart-list" :style="{borderColor: color}">
4
+        <div class="monitor-cart-list-name">
5
+            {{name}}
6
+        </div>
7
+        <div class="monitor-cart-list-number" :style="{background: color}">
8
+            <div class="monitor-cart-list-number-left">
9
+                <ViewsSvg v-if="icon == 'ViewsSvg' " class="monitor-cart-list-number-left-icon" />
10
+                <SalesSvg v-if="icon == 'SalesSvg' " class="monitor-cart-list-number-left-icon" />
11
+                <OrderSvg v-if="icon == 'OrderSvg' " class="monitor-cart-list-number-left-icon" />
12
+                <RegistrationSvg v-if="icon == 'RegistrationSvg' " class="monitor-cart-list-number-left-icon" />
13
+            </div>
14
+            <div class="monitor-cart-list-number-right">
15
+               <count-to :startVal='0' :endVal='number' :duration='3000'></count-to>
16
+            </div>
17
+        </div>
18
+    </div>
19
+</template>
20
+
21
+<script>
22
+import ViewsSvg from '../../assets/icon/views.svg'
23
+import SalesSvg from '../../assets/icon/sales.svg'
24
+import OrderSvg from '../../assets/icon/order.svg'
25
+import RegistrationSvg from '../../assets/icon/registration.svg'
26
+
27
+import countTo from 'vue-count-to';
28
+export default {
29
+    props:['name','number','color','icon'],
30
+    components:{
31
+        ViewsSvg,
32
+        SalesSvg,
33
+        OrderSvg,
34
+        RegistrationSvg,
35
+        countTo
36
+    }
37
+}
38
+</script>
39
+
40
+<style scoped>
41
+.monitor-cart-list{
42
+    width: 100%;
43
+    height: auto;
44
+    background: #ffffff;
45
+    border-radius: 10px;
46
+    border: 1px solid #F141AF;
47
+    box-sizing: border-box;
48
+    overflow: hidden;
49
+    margin-bottom: 20px;
50
+}
51
+.monitor-cart-list-name{
52
+    width: 100%;
53
+    height: 42px;
54
+    /* border-bottom: 1px solid #E8EAEC; */
55
+    padding: 0 15px;
56
+    box-sizing: border-box;
57
+    line-height: 42px;
58
+    color: #5C5C5C;
59
+
60
+}
61
+.monitor-cart-list-number{
62
+    width: 100%;
63
+    height: 68px;
64
+    padding-left: 15px;
65
+    padding-right: 15px;
66
+    box-sizing: border-box;
67
+    color: #515a6e;
68
+    font-size: 30px;
69
+    line-height: 68px;
70
+    display: flex;
71
+    justify-content: space-between;
72
+    align-items: center;
73
+    background: #F141AF;
74
+}
75
+.monitor-cart-list-number-left{
76
+    width: 80px;
77
+    height: 50px;
78
+    /* background: burlywood; */
79
+    border-radius: 5px;
80
+    text-align: center;
81
+    line-height: 50px;
82
+}
83
+.monitor-cart-list-number-left-icon{
84
+    width: 30px;
85
+    height: 30px;
86
+    fill: currentColor;
87
+    color: #ffffff;
88
+    font-weight: bold;
89
+}
90
+.monitor-cart-list-number-right{
91
+    width: 60%;
92
+    height: 50px;
93
+    line-height: 50px;
94
+    font-size: 30px;
95
+    text-align: right;
96
+    color: #ffffff;
97
+}
98
+</style>

+ 0 - 0
src/components/analyze/pay.vue View File


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