├── .gitignore
├── README.md
├── app.js
├── app.json
├── app.wxss
├── config.js.example
├── images
├── cover.png
├── defalut.png
├── icon-img.png
├── logo.png
├── qrCode.jpg
├── tips.png
└── uploadImg.png
├── lib
└── fontAwesome
│ └── wxss
│ └── font-awesome.min.wxss
├── pages
├── authorizetip
│ ├── authorizetip.js
│ ├── authorizetip.json
│ ├── authorizetip.wxml
│ └── authorizetip.wxss
├── comment
│ ├── comment.js
│ ├── comment.json
│ ├── comment.wxml
│ └── comment.wxss
├── index
│ ├── index.js
│ ├── index.json
│ ├── index.wxml
│ └── index.wxss
├── vote
│ ├── vote.js
│ ├── vote.json
│ ├── vote.wxml
│ └── vote.wxss
├── voteDetail
│ ├── voteDetail.js
│ ├── voteDetail.json
│ ├── voteDetail.wxml
│ └── voteDetail.wxss
└── voterDetail
│ ├── voterDetail.js
│ ├── voterDetail.json
│ ├── voterDetail.wxml
│ └── voterDetail.wxss
├── sitemap.json
└── utils
├── numbertofix.wxs
└── util.js
/.gitignore:
--------------------------------------------------------------------------------
1 | .idea
2 | config.js
3 | project.config.json
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 阳光投票小程序
2 |
3 | ### 2019/03/27 修改日志
4 |
5 | 1.因服务器到期,升级了服务器和域名;
6 | 2.把投票选项的字数由20个,提升到了40;因为有用户反馈20字有点受限制;
7 | 3.优化了一些体验,比如tab切换闪屏;
8 | 4.增加了用户反馈入口;
9 | 5.目前用户数4021
10 |
11 | ### 2018/6/15 修改日志
12 |
13 | 1.添加用户反馈功能;
14 |
15 | ### 2018/6/12 上线一月有余,成功突破1千用户!:tada:
16 |
17 | 
18 |
19 |
20 | ### 2018/5/8 小程序正式发布上线
21 |
22 | 
23 |
24 | ### 2018/5/29 修改日志 :bulb:
25 |
26 | 1.修改用户授权逻辑;
27 | 2.优化用户体验:比如:在投票投票详情页进行投票,返回首页列表时不刷新页面即可看到结果;
28 | 3.页面跳转逻辑优化
29 |
30 |
31 | ### 2018/5/27 修改日志
32 |
33 | 1.修改用户授权逻辑;
34 | 2.添加敏感词过滤功能(https://developers.weixin.qq.com/miniprogram/dev/api/imgSecCheck.html);
35 | 3.图片改用懒加载
36 |
37 |
38 | ### 2018/5/10 修改日志
39 |
40 | 1:添加默认头像
41 |
42 | ### 2018/4/27 修改日志
43 |
44 | #### 解决以下问题:
45 |
46 | 1:首页列表查看投票统计和分享按钮不太好点(扩大点击面积)
47 | 2:首页模块,如果没有数据,需要提示信息
48 | 3:首页底部创建投票按钮太小,不方便点击
49 | 4:首页列表投票结果显示用色比较乱,花花绿绿 (改用这个色系['#9dc8c8', '#58c9b9', '#519d9e', '#d1b6e1'])
50 | 5:投票顶部,微信昵称和发布时间字体太小
51 | 6:投票结果百分比,显示整数,向上取整(使用wxs文件)
52 |
53 | ### 2018/4/28 修改日志
54 |
55 | #### 解决以下问题:
56 |
57 | 1:解决小程序启动时onLaunch和index页面onLoad执行先后顺序导致的bug;
58 | 2: 首页添加投票删除入口及功能;
59 | 3:一些样式问题的优化
60 |
--------------------------------------------------------------------------------
/app.js:
--------------------------------------------------------------------------------
1 | const config = require('./config.js');
2 | App({
3 | globalData: {
4 | userInfo: null,
5 | encryptedData: '',
6 | iv: '',
7 | userAuthorization: ''
8 | },
9 | //启动
10 | onLaunch: function() {
11 | this.getUserInfo()
12 | },
13 | //获取用户信息
14 | getUserInfo: function() {
15 | var self = this
16 | wx.getSetting({
17 | success(res) {
18 | //判断用户是否已授权获取用户信息
19 | if (res.authSetting['scope.userInfo']) {
20 | //已授权,可以直接获取用户信息不用弹框
21 | self.userAuthCb();
22 | } else {
23 | //未授权
24 | wx.authorize({
25 | scope: 'scope.userInfo',
26 | success() {
27 | // 用户已经同意小程序获取用户信息
28 | self.userAuthCb();
29 | },
30 | fail() {
31 | //拒绝授权
32 | wx.redirectTo({
33 | url: '/pages/authorizetip/authorizetip',
34 | })
35 | }
36 | })
37 | }
38 | }
39 | })
40 | },
41 | userAuthCb: function() {
42 | let that = this;
43 | let baseUrl = config.getBaseUrl;
44 | wx.showLoading({
45 | title: '加载中',
46 | })
47 | wx.getUserInfo({
48 | success: function(res) {
49 | that.globalData.userInfo = res.userInfo;
50 | that.globalData.encryptedData = res.encryptedData;
51 | that.globalData.iv = res.iv;
52 | if (res.encryptedData && res.iv) {
53 | wx.login({
54 | success: function(res) {
55 | if (res.code) {
56 | //将用户基本信息回传给服务器,并获取assess_token
57 | wx.request({
58 | url: baseUrl + '/auth/api/token',
59 | method: 'POST',
60 | data: {
61 | code: res.code,
62 | encryptedData: that.globalData.encryptedData,
63 | iv: that.globalData.iv
64 | },
65 | header: {
66 | 'accept': 'application/json'
67 | },
68 | success: function(res) {
69 | let authorizationValue = res.data.access_token;
70 | let currentPagesLen = getCurrentPages().length;
71 | if (authorizationValue) {
72 | wx.setStorageSync('access_token', authorizationValue);
73 | wx.setStorageSync('authorization', "Bearer " + authorizationValue);
74 | that.globalData.userAuthorization = "Bearer " + authorizationValue;
75 | //判断是否有页面优先生成,如果生成则重新加载一次
76 | if (currentPagesLen !== 0) {
77 | wx.hideLoading();
78 | getCurrentPages()[currentPagesLen - 1].onLoad()
79 | }
80 | } else {
81 | console.log('身份验证失败')
82 | }
83 | }
84 | })
85 | }
86 | }
87 | })
88 | }
89 | }
90 | })
91 | }
92 | })
--------------------------------------------------------------------------------
/app.json:
--------------------------------------------------------------------------------
1 | {
2 | "pages": [
3 | "pages/index/index",
4 | "pages/comment/comment",
5 | "pages/voteDetail/voteDetail",
6 | "pages/authorizetip/authorizetip",
7 | "pages/voterDetail/voterDetail",
8 | "pages/vote/vote"
9 | ],
10 | "window": {
11 | "backgroundTextStyle": "light",
12 | "navigationBarBackgroundColor": "#ffffff",
13 | "navigationBarTitleText": "WeChat",
14 | "navigationBarTextStyle": "black"
15 | },
16 | "sitemapLocation": "sitemap.json"
17 | }
--------------------------------------------------------------------------------
/config.js.example:
--------------------------------------------------------------------------------
1 | //开发环境:接口URL
2 | const getBaseDevUrl = '******';
3 | //正式环境:接口URL
4 | const getBaseUrl = '******';
5 |
6 | module.exports = {
7 | getBaseDevUrl,
8 | getBaseUrl
9 | }
--------------------------------------------------------------------------------
/images/cover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/a958330481/votingNow/ed14eea3478ef0fe797a33a5c8b868cfc7563d26/images/cover.png
--------------------------------------------------------------------------------
/images/defalut.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/a958330481/votingNow/ed14eea3478ef0fe797a33a5c8b868cfc7563d26/images/defalut.png
--------------------------------------------------------------------------------
/images/icon-img.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/a958330481/votingNow/ed14eea3478ef0fe797a33a5c8b868cfc7563d26/images/icon-img.png
--------------------------------------------------------------------------------
/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/a958330481/votingNow/ed14eea3478ef0fe797a33a5c8b868cfc7563d26/images/logo.png
--------------------------------------------------------------------------------
/images/qrCode.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/a958330481/votingNow/ed14eea3478ef0fe797a33a5c8b868cfc7563d26/images/qrCode.jpg
--------------------------------------------------------------------------------
/images/tips.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/a958330481/votingNow/ed14eea3478ef0fe797a33a5c8b868cfc7563d26/images/tips.png
--------------------------------------------------------------------------------
/images/uploadImg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/a958330481/votingNow/ed14eea3478ef0fe797a33a5c8b868cfc7563d26/images/uploadImg.png
--------------------------------------------------------------------------------
/lib/fontAwesome/wxss/font-awesome.min.wxss:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 | */
5 |
6 | @font-face {
7 | font-family: 'FontAwesome';
8 | src: url('//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts/fontawesome-webfont.eot?v=4.7.0');
9 | src: url('//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');
10 | font-weight: normal;
11 | font-style: normal
12 | }
13 |
14 | .fa {
15 | display: inline-block;
16 | font: normal normal normal 14px/1 FontAwesome;
17 | font-size: inherit;
18 | text-rendering: auto;
19 | -webkit-font-smoothing: antialiased;
20 | -moz-osx-font-smoothing: grayscale
21 | }
22 |
23 | .fa-lg {
24 | font-size: 1.33333333em;
25 | line-height: .75em;
26 | vertical-align: -15%
27 | }
28 |
29 | .fa-2x {
30 | font-size: 2em
31 | }
32 |
33 | .fa-3x {
34 | font-size: 3em
35 | }
36 |
37 | .fa-4x {
38 | font-size: 4em
39 | }
40 |
41 | .fa-5x {
42 | font-size: 5em
43 | }
44 |
45 | .fa-fw {
46 | width: 1.28571429em;
47 | text-align: center
48 | }
49 |
50 | .fa-ul {
51 | padding-left: 0;
52 | margin-left: 2.14285714em;
53 | list-style-type: none
54 | }
55 |
56 | .fa-ul>li {
57 | position: relative
58 | }
59 |
60 | .fa-li {
61 | position: absolute;
62 | left: -2.14285714em;
63 | width: 2.14285714em;
64 | top: .14285714em;
65 | text-align: center
66 | }
67 |
68 | .fa-li.fa-lg {
69 | left: -1.85714286em
70 | }
71 |
72 | .fa-border {
73 | padding: .2em .25em .15em;
74 | border: solid .08em #eee;
75 | border-radius: .1em
76 | }
77 |
78 | .fa-pull-left {
79 | float: left
80 | }
81 |
82 | .fa-pull-right {
83 | float: right
84 | }
85 |
86 | .fa.fa-pull-left {
87 | margin-right: .3em
88 | }
89 |
90 | .fa.fa-pull-right {
91 | margin-left: .3em
92 | }
93 |
94 | .pull-right {
95 | float: right
96 | }
97 |
98 | .pull-left {
99 | float: left
100 | }
101 |
102 | .fa.pull-left {
103 | margin-right: .3em
104 | }
105 |
106 | .fa.pull-right {
107 | margin-left: .3em
108 | }
109 |
110 | .fa-spin {
111 | -webkit-animation: fa-spin 2s infinite linear;
112 | animation: fa-spin 2s infinite linear
113 | }
114 |
115 | .fa-pulse {
116 | -webkit-animation: fa-spin 1s infinite steps(8);
117 | animation: fa-spin 1s infinite steps(8)
118 | }
119 |
120 | @-webkit-keyframes fa-spin {
121 | 0% {
122 | -webkit-transform: rotate(0deg);
123 | transform: rotate(0deg)
124 | }
125 | 100% {
126 | -webkit-transform: rotate(359deg);
127 | transform: rotate(359deg)
128 | }
129 | }
130 |
131 | @keyframes fa-spin {
132 | 0% {
133 | -webkit-transform: rotate(0deg);
134 | transform: rotate(0deg)
135 | }
136 | 100% {
137 | -webkit-transform: rotate(359deg);
138 | transform: rotate(359deg)
139 | }
140 | }
141 |
142 | .fa-rotate-90 {
143 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
144 | -webkit-transform: rotate(90deg);
145 | -ms-transform: rotate(90deg);
146 | transform: rotate(90deg)
147 | }
148 |
149 | .fa-rotate-180 {
150 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
151 | -webkit-transform: rotate(180deg);
152 | -ms-transform: rotate(180deg);
153 | transform: rotate(180deg)
154 | }
155 |
156 | .fa-rotate-270 {
157 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
158 | -webkit-transform: rotate(270deg);
159 | -ms-transform: rotate(270deg);
160 | transform: rotate(270deg)
161 | }
162 |
163 | .fa-flip-horizontal {
164 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
165 | -webkit-transform: scale(-1, 1);
166 | -ms-transform: scale(-1, 1);
167 | transform: scale(-1, 1)
168 | }
169 |
170 | .fa-flip-vertical {
171 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
172 | -webkit-transform: scale(1, -1);
173 | -ms-transform: scale(1, -1);
174 | transform: scale(1, -1)
175 | }
176 |
177 | :root .fa-rotate-90,
178 | :root .fa-rotate-180,
179 | :root .fa-rotate-270,
180 | :root .fa-flip-horizontal,
181 | :root .fa-flip-vertical {
182 | filter: none
183 | }
184 |
185 | .fa-stack {
186 | position: relative;
187 | display: inline-block;
188 | width: 2em;
189 | height: 2em;
190 | line-height: 2em;
191 | vertical-align: middle
192 | }
193 |
194 | .fa-stack-1x,
195 | .fa-stack-2x {
196 | position: absolute;
197 | left: 0;
198 | width: 100%;
199 | text-align: center
200 | }
201 |
202 | .fa-stack-1x {
203 | line-height: inherit
204 | }
205 |
206 | .fa-stack-2x {
207 | font-size: 2em
208 | }
209 |
210 | .fa-inverse {
211 | color: #fff
212 | }
213 |
214 | .fa-glass:before {
215 | content: "\f000"
216 | }
217 |
218 | .fa-music:before {
219 | content: "\f001"
220 | }
221 |
222 | .fa-search:before {
223 | content: "\f002"
224 | }
225 |
226 | .fa-envelope-o:before {
227 | content: "\f003"
228 | }
229 |
230 | .fa-heart:before {
231 | content: "\f004"
232 | }
233 |
234 | .fa-star:before {
235 | content: "\f005"
236 | }
237 |
238 | .fa-star-o:before {
239 | content: "\f006"
240 | }
241 |
242 | .fa-user:before {
243 | content: "\f007"
244 | }
245 |
246 | .fa-film:before {
247 | content: "\f008"
248 | }
249 |
250 | .fa-th-large:before {
251 | content: "\f009"
252 | }
253 |
254 | .fa-th:before {
255 | content: "\f00a"
256 | }
257 |
258 | .fa-th-list:before {
259 | content: "\f00b"
260 | }
261 |
262 | .fa-check:before {
263 | content: "\f00c"
264 | }
265 |
266 | .fa-remove:before,
267 | .fa-close:before,
268 | .fa-times:before {
269 | content: "\f00d"
270 | }
271 |
272 | .fa-search-plus:before {
273 | content: "\f00e"
274 | }
275 |
276 | .fa-search-minus:before {
277 | content: "\f010"
278 | }
279 |
280 | .fa-power-off:before {
281 | content: "\f011"
282 | }
283 |
284 | .fa-signal:before {
285 | content: "\f012"
286 | }
287 |
288 | .fa-gear:before,
289 | .fa-cog:before {
290 | content: "\f013"
291 | }
292 |
293 | .fa-trash-o:before {
294 | content: "\f014"
295 | }
296 |
297 | .fa-home:before {
298 | content: "\f015"
299 | }
300 |
301 | .fa-file-o:before {
302 | content: "\f016"
303 | }
304 |
305 | .fa-clock-o:before {
306 | content: "\f017"
307 | }
308 |
309 | .fa-road:before {
310 | content: "\f018"
311 | }
312 |
313 | .fa-download:before {
314 | content: "\f019"
315 | }
316 |
317 | .fa-arrow-circle-o-down:before {
318 | content: "\f01a"
319 | }
320 |
321 | .fa-arrow-circle-o-up:before {
322 | content: "\f01b"
323 | }
324 |
325 | .fa-inbox:before {
326 | content: "\f01c"
327 | }
328 |
329 | .fa-play-circle-o:before {
330 | content: "\f01d"
331 | }
332 |
333 | .fa-rotate-right:before,
334 | .fa-repeat:before {
335 | content: "\f01e"
336 | }
337 |
338 | .fa-refresh:before {
339 | content: "\f021"
340 | }
341 |
342 | .fa-list-alt:before {
343 | content: "\f022"
344 | }
345 |
346 | .fa-lock:before {
347 | content: "\f023"
348 | }
349 |
350 | .fa-flag:before {
351 | content: "\f024"
352 | }
353 |
354 | .fa-headphones:before {
355 | content: "\f025"
356 | }
357 |
358 | .fa-volume-off:before {
359 | content: "\f026"
360 | }
361 |
362 | .fa-volume-down:before {
363 | content: "\f027"
364 | }
365 |
366 | .fa-volume-up:before {
367 | content: "\f028"
368 | }
369 |
370 | .fa-qrcode:before {
371 | content: "\f029"
372 | }
373 |
374 | .fa-barcode:before {
375 | content: "\f02a"
376 | }
377 |
378 | .fa-tag:before {
379 | content: "\f02b"
380 | }
381 |
382 | .fa-tags:before {
383 | content: "\f02c"
384 | }
385 |
386 | .fa-book:before {
387 | content: "\f02d"
388 | }
389 |
390 | .fa-bookmark:before {
391 | content: "\f02e"
392 | }
393 |
394 | .fa-print:before {
395 | content: "\f02f"
396 | }
397 |
398 | .fa-camera:before {
399 | content: "\f030"
400 | }
401 |
402 | .fa-font:before {
403 | content: "\f031"
404 | }
405 |
406 | .fa-bold:before {
407 | content: "\f032"
408 | }
409 |
410 | .fa-italic:before {
411 | content: "\f033"
412 | }
413 |
414 | .fa-text-height:before {
415 | content: "\f034"
416 | }
417 |
418 | .fa-text-width:before {
419 | content: "\f035"
420 | }
421 |
422 | .fa-align-left:before {
423 | content: "\f036"
424 | }
425 |
426 | .fa-align-center:before {
427 | content: "\f037"
428 | }
429 |
430 | .fa-align-right:before {
431 | content: "\f038"
432 | }
433 |
434 | .fa-align-justify:before {
435 | content: "\f039"
436 | }
437 |
438 | .fa-list:before {
439 | content: "\f03a"
440 | }
441 |
442 | .fa-dedent:before,
443 | .fa-outdent:before {
444 | content: "\f03b"
445 | }
446 |
447 | .fa-indent:before {
448 | content: "\f03c"
449 | }
450 |
451 | .fa-video-camera:before {
452 | content: "\f03d"
453 | }
454 |
455 | .fa-photo:before,
456 | .fa-image:before,
457 | .fa-picture-o:before {
458 | content: "\f03e"
459 | }
460 |
461 | .fa-pencil:before {
462 | content: "\f040"
463 | }
464 |
465 | .fa-map-marker:before {
466 | content: "\f041"
467 | }
468 |
469 | .fa-adjust:before {
470 | content: "\f042"
471 | }
472 |
473 | .fa-tint:before {
474 | content: "\f043"
475 | }
476 |
477 | .fa-edit:before,
478 | .fa-pencil-square-o:before {
479 | content: "\f044"
480 | }
481 |
482 | .fa-share-square-o:before {
483 | content: "\f045"
484 | }
485 |
486 | .fa-check-square-o:before {
487 | content: "\f046"
488 | }
489 |
490 | .fa-arrows:before {
491 | content: "\f047"
492 | }
493 |
494 | .fa-step-backward:before {
495 | content: "\f048"
496 | }
497 |
498 | .fa-fast-backward:before {
499 | content: "\f049"
500 | }
501 |
502 | .fa-backward:before {
503 | content: "\f04a"
504 | }
505 |
506 | .fa-play:before {
507 | content: "\f04b"
508 | }
509 |
510 | .fa-pause:before {
511 | content: "\f04c"
512 | }
513 |
514 | .fa-stop:before {
515 | content: "\f04d"
516 | }
517 |
518 | .fa-forward:before {
519 | content: "\f04e"
520 | }
521 |
522 | .fa-fast-forward:before {
523 | content: "\f050"
524 | }
525 |
526 | .fa-step-forward:before {
527 | content: "\f051"
528 | }
529 |
530 | .fa-eject:before {
531 | content: "\f052"
532 | }
533 |
534 | .fa-chevron-left:before {
535 | content: "\f053"
536 | }
537 |
538 | .fa-chevron-right:before {
539 | content: "\f054"
540 | }
541 |
542 | .fa-plus-circle:before {
543 | content: "\f055"
544 | }
545 |
546 | .fa-minus-circle:before {
547 | content: "\f056"
548 | }
549 |
550 | .fa-times-circle:before {
551 | content: "\f057"
552 | }
553 |
554 | .fa-check-circle:before {
555 | content: "\f058"
556 | }
557 |
558 | .fa-question-circle:before {
559 | content: "\f059"
560 | }
561 |
562 | .fa-info-circle:before {
563 | content: "\f05a"
564 | }
565 |
566 | .fa-crosshairs:before {
567 | content: "\f05b"
568 | }
569 |
570 | .fa-times-circle-o:before {
571 | content: "\f05c"
572 | }
573 |
574 | .fa-check-circle-o:before {
575 | content: "\f05d"
576 | }
577 |
578 | .fa-ban:before {
579 | content: "\f05e"
580 | }
581 |
582 | .fa-arrow-left:before {
583 | content: "\f060"
584 | }
585 |
586 | .fa-arrow-right:before {
587 | content: "\f061"
588 | }
589 |
590 | .fa-arrow-up:before {
591 | content: "\f062"
592 | }
593 |
594 | .fa-arrow-down:before {
595 | content: "\f063"
596 | }
597 |
598 | .fa-mail-forward:before,
599 | .fa-share:before {
600 | content: "\f064"
601 | }
602 |
603 | .fa-expand:before {
604 | content: "\f065"
605 | }
606 |
607 | .fa-compress:before {
608 | content: "\f066"
609 | }
610 |
611 | .fa-plus:before {
612 | content: "\f067"
613 | }
614 |
615 | .fa-minus:before {
616 | content: "\f068"
617 | }
618 |
619 | .fa-asterisk:before {
620 | content: "\f069"
621 | }
622 |
623 | .fa-exclamation-circle:before {
624 | content: "\f06a"
625 | }
626 |
627 | .fa-gift:before {
628 | content: "\f06b"
629 | }
630 |
631 | .fa-leaf:before {
632 | content: "\f06c"
633 | }
634 |
635 | .fa-fire:before {
636 | content: "\f06d"
637 | }
638 |
639 | .fa-eye:before {
640 | content: "\f06e"
641 | }
642 |
643 | .fa-eye-slash:before {
644 | content: "\f070"
645 | }
646 |
647 | .fa-warning:before,
648 | .fa-exclamation-triangle:before {
649 | content: "\f071"
650 | }
651 |
652 | .fa-plane:before {
653 | content: "\f072"
654 | }
655 |
656 | .fa-calendar:before {
657 | content: "\f073"
658 | }
659 |
660 | .fa-random:before {
661 | content: "\f074"
662 | }
663 |
664 | .fa-comment:before {
665 | content: "\f075"
666 | }
667 |
668 | .fa-magnet:before {
669 | content: "\f076"
670 | }
671 |
672 | .fa-chevron-up:before {
673 | content: "\f077"
674 | }
675 |
676 | .fa-chevron-down:before {
677 | content: "\f078"
678 | }
679 |
680 | .fa-retweet:before {
681 | content: "\f079"
682 | }
683 |
684 | .fa-shopping-cart:before {
685 | content: "\f07a"
686 | }
687 |
688 | .fa-folder:before {
689 | content: "\f07b"
690 | }
691 |
692 | .fa-folder-open:before {
693 | content: "\f07c"
694 | }
695 |
696 | .fa-arrows-v:before {
697 | content: "\f07d"
698 | }
699 |
700 | .fa-arrows-h:before {
701 | content: "\f07e"
702 | }
703 |
704 | .fa-bar-chart-o:before,
705 | .fa-bar-chart:before {
706 | content: "\f080"
707 | }
708 |
709 | .fa-twitter-square:before {
710 | content: "\f081"
711 | }
712 |
713 | .fa-facebook-square:before {
714 | content: "\f082"
715 | }
716 |
717 | .fa-camera-retro:before {
718 | content: "\f083"
719 | }
720 |
721 | .fa-key:before {
722 | content: "\f084"
723 | }
724 |
725 | .fa-gears:before,
726 | .fa-cogs:before {
727 | content: "\f085"
728 | }
729 |
730 | .fa-comments:before {
731 | content: "\f086"
732 | }
733 |
734 | .fa-thumbs-o-up:before {
735 | content: "\f087"
736 | }
737 |
738 | .fa-thumbs-o-down:before {
739 | content: "\f088"
740 | }
741 |
742 | .fa-star-half:before {
743 | content: "\f089"
744 | }
745 |
746 | .fa-heart-o:before {
747 | content: "\f08a"
748 | }
749 |
750 | .fa-sign-out:before {
751 | content: "\f08b"
752 | }
753 |
754 | .fa-linkedin-square:before {
755 | content: "\f08c"
756 | }
757 |
758 | .fa-thumb-tack:before {
759 | content: "\f08d"
760 | }
761 |
762 | .fa-external-link:before {
763 | content: "\f08e"
764 | }
765 |
766 | .fa-sign-in:before {
767 | content: "\f090"
768 | }
769 |
770 | .fa-trophy:before {
771 | content: "\f091"
772 | }
773 |
774 | .fa-github-square:before {
775 | content: "\f092"
776 | }
777 |
778 | .fa-upload:before {
779 | content: "\f093"
780 | }
781 |
782 | .fa-lemon-o:before {
783 | content: "\f094"
784 | }
785 |
786 | .fa-phone:before {
787 | content: "\f095"
788 | }
789 |
790 | .fa-square-o:before {
791 | content: "\f096"
792 | }
793 |
794 | .fa-bookmark-o:before {
795 | content: "\f097"
796 | }
797 |
798 | .fa-phone-square:before {
799 | content: "\f098"
800 | }
801 |
802 | .fa-twitter:before {
803 | content: "\f099"
804 | }
805 |
806 | .fa-facebook-f:before,
807 | .fa-facebook:before {
808 | content: "\f09a"
809 | }
810 |
811 | .fa-github:before {
812 | content: "\f09b"
813 | }
814 |
815 | .fa-unlock:before {
816 | content: "\f09c"
817 | }
818 |
819 | .fa-credit-card:before {
820 | content: "\f09d"
821 | }
822 |
823 | .fa-feed:before,
824 | .fa-rss:before {
825 | content: "\f09e"
826 | }
827 |
828 | .fa-hdd-o:before {
829 | content: "\f0a0"
830 | }
831 |
832 | .fa-bullhorn:before {
833 | content: "\f0a1"
834 | }
835 |
836 | .fa-bell:before {
837 | content: "\f0f3"
838 | }
839 |
840 | .fa-certificate:before {
841 | content: "\f0a3"
842 | }
843 |
844 | .fa-hand-o-right:before {
845 | content: "\f0a4"
846 | }
847 |
848 | .fa-hand-o-left:before {
849 | content: "\f0a5"
850 | }
851 |
852 | .fa-hand-o-up:before {
853 | content: "\f0a6"
854 | }
855 |
856 | .fa-hand-o-down:before {
857 | content: "\f0a7"
858 | }
859 |
860 | .fa-arrow-circle-left:before {
861 | content: "\f0a8"
862 | }
863 |
864 | .fa-arrow-circle-right:before {
865 | content: "\f0a9"
866 | }
867 |
868 | .fa-arrow-circle-up:before {
869 | content: "\f0aa"
870 | }
871 |
872 | .fa-arrow-circle-down:before {
873 | content: "\f0ab"
874 | }
875 |
876 | .fa-globe:before {
877 | content: "\f0ac"
878 | }
879 |
880 | .fa-wrench:before {
881 | content: "\f0ad"
882 | }
883 |
884 | .fa-tasks:before {
885 | content: "\f0ae"
886 | }
887 |
888 | .fa-filter:before {
889 | content: "\f0b0"
890 | }
891 |
892 | .fa-briefcase:before {
893 | content: "\f0b1"
894 | }
895 |
896 | .fa-arrows-alt:before {
897 | content: "\f0b2"
898 | }
899 |
900 | .fa-group:before,
901 | .fa-users:before {
902 | content: "\f0c0"
903 | }
904 |
905 | .fa-chain:before,
906 | .fa-link:before {
907 | content: "\f0c1"
908 | }
909 |
910 | .fa-cloud:before {
911 | content: "\f0c2"
912 | }
913 |
914 | .fa-flask:before {
915 | content: "\f0c3"
916 | }
917 |
918 | .fa-cut:before,
919 | .fa-scissors:before {
920 | content: "\f0c4"
921 | }
922 |
923 | .fa-copy:before,
924 | .fa-files-o:before {
925 | content: "\f0c5"
926 | }
927 |
928 | .fa-paperclip:before {
929 | content: "\f0c6"
930 | }
931 |
932 | .fa-save:before,
933 | .fa-floppy-o:before {
934 | content: "\f0c7"
935 | }
936 |
937 | .fa-square:before {
938 | content: "\f0c8"
939 | }
940 |
941 | .fa-navicon:before,
942 | .fa-reorder:before,
943 | .fa-bars:before {
944 | content: "\f0c9"
945 | }
946 |
947 | .fa-list-ul:before {
948 | content: "\f0ca"
949 | }
950 |
951 | .fa-list-ol:before {
952 | content: "\f0cb"
953 | }
954 |
955 | .fa-strikethrough:before {
956 | content: "\f0cc"
957 | }
958 |
959 | .fa-underline:before {
960 | content: "\f0cd"
961 | }
962 |
963 | .fa-table:before {
964 | content: "\f0ce"
965 | }
966 |
967 | .fa-magic:before {
968 | content: "\f0d0"
969 | }
970 |
971 | .fa-truck:before {
972 | content: "\f0d1"
973 | }
974 |
975 | .fa-pinterest:before {
976 | content: "\f0d2"
977 | }
978 |
979 | .fa-pinterest-square:before {
980 | content: "\f0d3"
981 | }
982 |
983 | .fa-google-plus-square:before {
984 | content: "\f0d4"
985 | }
986 |
987 | .fa-google-plus:before {
988 | content: "\f0d5"
989 | }
990 |
991 | .fa-money:before {
992 | content: "\f0d6"
993 | }
994 |
995 | .fa-caret-down:before {
996 | content: "\f0d7"
997 | }
998 |
999 | .fa-caret-up:before {
1000 | content: "\f0d8"
1001 | }
1002 |
1003 | .fa-caret-left:before {
1004 | content: "\f0d9"
1005 | }
1006 |
1007 | .fa-caret-right:before {
1008 | content: "\f0da"
1009 | }
1010 |
1011 | .fa-columns:before {
1012 | content: "\f0db"
1013 | }
1014 |
1015 | .fa-unsorted:before,
1016 | .fa-sort:before {
1017 | content: "\f0dc"
1018 | }
1019 |
1020 | .fa-sort-down:before,
1021 | .fa-sort-desc:before {
1022 | content: "\f0dd"
1023 | }
1024 |
1025 | .fa-sort-up:before,
1026 | .fa-sort-asc:before {
1027 | content: "\f0de"
1028 | }
1029 |
1030 | .fa-envelope:before {
1031 | content: "\f0e0"
1032 | }
1033 |
1034 | .fa-linkedin:before {
1035 | content: "\f0e1"
1036 | }
1037 |
1038 | .fa-rotate-left:before,
1039 | .fa-undo:before {
1040 | content: "\f0e2"
1041 | }
1042 |
1043 | .fa-legal:before,
1044 | .fa-gavel:before {
1045 | content: "\f0e3"
1046 | }
1047 |
1048 | .fa-dashboard:before,
1049 | .fa-tachometer:before {
1050 | content: "\f0e4"
1051 | }
1052 |
1053 | .fa-comment-o:before {
1054 | content: "\f0e5"
1055 | }
1056 |
1057 | .fa-comments-o:before {
1058 | content: "\f0e6"
1059 | }
1060 |
1061 | .fa-flash:before,
1062 | .fa-bolt:before {
1063 | content: "\f0e7"
1064 | }
1065 |
1066 | .fa-sitemap:before {
1067 | content: "\f0e8"
1068 | }
1069 |
1070 | .fa-umbrella:before {
1071 | content: "\f0e9"
1072 | }
1073 |
1074 | .fa-paste:before,
1075 | .fa-clipboard:before {
1076 | content: "\f0ea"
1077 | }
1078 |
1079 | .fa-lightbulb-o:before {
1080 | content: "\f0eb"
1081 | }
1082 |
1083 | .fa-exchange:before {
1084 | content: "\f0ec"
1085 | }
1086 |
1087 | .fa-cloud-download:before {
1088 | content: "\f0ed"
1089 | }
1090 |
1091 | .fa-cloud-upload:before {
1092 | content: "\f0ee"
1093 | }
1094 |
1095 | .fa-user-md:before {
1096 | content: "\f0f0"
1097 | }
1098 |
1099 | .fa-stethoscope:before {
1100 | content: "\f0f1"
1101 | }
1102 |
1103 | .fa-suitcase:before {
1104 | content: "\f0f2"
1105 | }
1106 |
1107 | .fa-bell-o:before {
1108 | content: "\f0a2"
1109 | }
1110 |
1111 | .fa-coffee:before {
1112 | content: "\f0f4"
1113 | }
1114 |
1115 | .fa-cutlery:before {
1116 | content: "\f0f5"
1117 | }
1118 |
1119 | .fa-file-text-o:before {
1120 | content: "\f0f6"
1121 | }
1122 |
1123 | .fa-building-o:before {
1124 | content: "\f0f7"
1125 | }
1126 |
1127 | .fa-hospital-o:before {
1128 | content: "\f0f8"
1129 | }
1130 |
1131 | .fa-ambulance:before {
1132 | content: "\f0f9"
1133 | }
1134 |
1135 | .fa-medkit:before {
1136 | content: "\f0fa"
1137 | }
1138 |
1139 | .fa-fighter-jet:before {
1140 | content: "\f0fb"
1141 | }
1142 |
1143 | .fa-beer:before {
1144 | content: "\f0fc"
1145 | }
1146 |
1147 | .fa-h-square:before {
1148 | content: "\f0fd"
1149 | }
1150 |
1151 | .fa-plus-square:before {
1152 | content: "\f0fe"
1153 | }
1154 |
1155 | .fa-angle-double-left:before {
1156 | content: "\f100"
1157 | }
1158 |
1159 | .fa-angle-double-right:before {
1160 | content: "\f101"
1161 | }
1162 |
1163 | .fa-angle-double-up:before {
1164 | content: "\f102"
1165 | }
1166 |
1167 | .fa-angle-double-down:before {
1168 | content: "\f103"
1169 | }
1170 |
1171 | .fa-angle-left:before {
1172 | content: "\f104"
1173 | }
1174 |
1175 | .fa-angle-right:before {
1176 | content: "\f105"
1177 | }
1178 |
1179 | .fa-angle-up:before {
1180 | content: "\f106"
1181 | }
1182 |
1183 | .fa-angle-down:before {
1184 | content: "\f107"
1185 | }
1186 |
1187 | .fa-desktop:before {
1188 | content: "\f108"
1189 | }
1190 |
1191 | .fa-laptop:before {
1192 | content: "\f109"
1193 | }
1194 |
1195 | .fa-tablet:before {
1196 | content: "\f10a"
1197 | }
1198 |
1199 | .fa-mobile-phone:before,
1200 | .fa-mobile:before {
1201 | content: "\f10b"
1202 | }
1203 |
1204 | .fa-circle-o:before {
1205 | content: "\f10c"
1206 | }
1207 |
1208 | .fa-quote-left:before {
1209 | content: "\f10d"
1210 | }
1211 |
1212 | .fa-quote-right:before {
1213 | content: "\f10e"
1214 | }
1215 |
1216 | .fa-spinner:before {
1217 | content: "\f110"
1218 | }
1219 |
1220 | .fa-circle:before {
1221 | content: "\f111"
1222 | }
1223 |
1224 | .fa-mail-reply:before,
1225 | .fa-reply:before {
1226 | content: "\f112"
1227 | }
1228 |
1229 | .fa-github-alt:before {
1230 | content: "\f113"
1231 | }
1232 |
1233 | .fa-folder-o:before {
1234 | content: "\f114"
1235 | }
1236 |
1237 | .fa-folder-open-o:before {
1238 | content: "\f115"
1239 | }
1240 |
1241 | .fa-smile-o:before {
1242 | content: "\f118"
1243 | }
1244 |
1245 | .fa-frown-o:before {
1246 | content: "\f119"
1247 | }
1248 |
1249 | .fa-meh-o:before {
1250 | content: "\f11a"
1251 | }
1252 |
1253 | .fa-gamepad:before {
1254 | content: "\f11b"
1255 | }
1256 |
1257 | .fa-keyboard-o:before {
1258 | content: "\f11c"
1259 | }
1260 |
1261 | .fa-flag-o:before {
1262 | content: "\f11d"
1263 | }
1264 |
1265 | .fa-flag-checkered:before {
1266 | content: "\f11e"
1267 | }
1268 |
1269 | .fa-terminal:before {
1270 | content: "\f120"
1271 | }
1272 |
1273 | .fa-code:before {
1274 | content: "\f121"
1275 | }
1276 |
1277 | .fa-mail-reply-all:before,
1278 | .fa-reply-all:before {
1279 | content: "\f122"
1280 | }
1281 |
1282 | .fa-star-half-empty:before,
1283 | .fa-star-half-full:before,
1284 | .fa-star-half-o:before {
1285 | content: "\f123"
1286 | }
1287 |
1288 | .fa-location-arrow:before {
1289 | content: "\f124"
1290 | }
1291 |
1292 | .fa-crop:before {
1293 | content: "\f125"
1294 | }
1295 |
1296 | .fa-code-fork:before {
1297 | content: "\f126"
1298 | }
1299 |
1300 | .fa-unlink:before,
1301 | .fa-chain-broken:before {
1302 | content: "\f127"
1303 | }
1304 |
1305 | .fa-question:before {
1306 | content: "\f128"
1307 | }
1308 |
1309 | .fa-info:before {
1310 | content: "\f129"
1311 | }
1312 |
1313 | .fa-exclamation:before {
1314 | content: "\f12a"
1315 | }
1316 |
1317 | .fa-superscript:before {
1318 | content: "\f12b"
1319 | }
1320 |
1321 | .fa-subscript:before {
1322 | content: "\f12c"
1323 | }
1324 |
1325 | .fa-eraser:before {
1326 | content: "\f12d"
1327 | }
1328 |
1329 | .fa-puzzle-piece:before {
1330 | content: "\f12e"
1331 | }
1332 |
1333 | .fa-microphone:before {
1334 | content: "\f130"
1335 | }
1336 |
1337 | .fa-microphone-slash:before {
1338 | content: "\f131"
1339 | }
1340 |
1341 | .fa-shield:before {
1342 | content: "\f132"
1343 | }
1344 |
1345 | .fa-calendar-o:before {
1346 | content: "\f133"
1347 | }
1348 |
1349 | .fa-fire-extinguisher:before {
1350 | content: "\f134"
1351 | }
1352 |
1353 | .fa-rocket:before {
1354 | content: "\f135"
1355 | }
1356 |
1357 | .fa-maxcdn:before {
1358 | content: "\f136"
1359 | }
1360 |
1361 | .fa-chevron-circle-left:before {
1362 | content: "\f137"
1363 | }
1364 |
1365 | .fa-chevron-circle-right:before {
1366 | content: "\f138"
1367 | }
1368 |
1369 | .fa-chevron-circle-up:before {
1370 | content: "\f139"
1371 | }
1372 |
1373 | .fa-chevron-circle-down:before {
1374 | content: "\f13a"
1375 | }
1376 |
1377 | .fa-html5:before {
1378 | content: "\f13b"
1379 | }
1380 |
1381 | .fa-css3:before {
1382 | content: "\f13c"
1383 | }
1384 |
1385 | .fa-anchor:before {
1386 | content: "\f13d"
1387 | }
1388 |
1389 | .fa-unlock-alt:before {
1390 | content: "\f13e"
1391 | }
1392 |
1393 | .fa-bullseye:before {
1394 | content: "\f140"
1395 | }
1396 |
1397 | .fa-ellipsis-h:before {
1398 | content: "\f141"
1399 | }
1400 |
1401 | .fa-ellipsis-v:before {
1402 | content: "\f142"
1403 | }
1404 |
1405 | .fa-rss-square:before {
1406 | content: "\f143"
1407 | }
1408 |
1409 | .fa-play-circle:before {
1410 | content: "\f144"
1411 | }
1412 |
1413 | .fa-ticket:before {
1414 | content: "\f145"
1415 | }
1416 |
1417 | .fa-minus-square:before {
1418 | content: "\f146"
1419 | }
1420 |
1421 | .fa-minus-square-o:before {
1422 | content: "\f147"
1423 | }
1424 |
1425 | .fa-level-up:before {
1426 | content: "\f148"
1427 | }
1428 |
1429 | .fa-level-down:before {
1430 | content: "\f149"
1431 | }
1432 |
1433 | .fa-check-square:before {
1434 | content: "\f14a"
1435 | }
1436 |
1437 | .fa-pencil-square:before {
1438 | content: "\f14b"
1439 | }
1440 |
1441 | .fa-external-link-square:before {
1442 | content: "\f14c"
1443 | }
1444 |
1445 | .fa-share-square:before {
1446 | content: "\f14d"
1447 | }
1448 |
1449 | .fa-compass:before {
1450 | content: "\f14e"
1451 | }
1452 |
1453 | .fa-toggle-down:before,
1454 | .fa-caret-square-o-down:before {
1455 | content: "\f150"
1456 | }
1457 |
1458 | .fa-toggle-up:before,
1459 | .fa-caret-square-o-up:before {
1460 | content: "\f151"
1461 | }
1462 |
1463 | .fa-toggle-right:before,
1464 | .fa-caret-square-o-right:before {
1465 | content: "\f152"
1466 | }
1467 |
1468 | .fa-euro:before,
1469 | .fa-eur:before {
1470 | content: "\f153"
1471 | }
1472 |
1473 | .fa-gbp:before {
1474 | content: "\f154"
1475 | }
1476 |
1477 | .fa-dollar:before,
1478 | .fa-usd:before {
1479 | content: "\f155"
1480 | }
1481 |
1482 | .fa-rupee:before,
1483 | .fa-inr:before {
1484 | content: "\f156"
1485 | }
1486 |
1487 | .fa-cny:before,
1488 | .fa-rmb:before,
1489 | .fa-yen:before,
1490 | .fa-jpy:before {
1491 | content: "\f157"
1492 | }
1493 |
1494 | .fa-ruble:before,
1495 | .fa-rouble:before,
1496 | .fa-rub:before {
1497 | content: "\f158"
1498 | }
1499 |
1500 | .fa-won:before,
1501 | .fa-krw:before {
1502 | content: "\f159"
1503 | }
1504 |
1505 | .fa-bitcoin:before,
1506 | .fa-btc:before {
1507 | content: "\f15a"
1508 | }
1509 |
1510 | .fa-file:before {
1511 | content: "\f15b"
1512 | }
1513 |
1514 | .fa-file-text:before {
1515 | content: "\f15c"
1516 | }
1517 |
1518 | .fa-sort-alpha-asc:before {
1519 | content: "\f15d"
1520 | }
1521 |
1522 | .fa-sort-alpha-desc:before {
1523 | content: "\f15e"
1524 | }
1525 |
1526 | .fa-sort-amount-asc:before {
1527 | content: "\f160"
1528 | }
1529 |
1530 | .fa-sort-amount-desc:before {
1531 | content: "\f161"
1532 | }
1533 |
1534 | .fa-sort-numeric-asc:before {
1535 | content: "\f162"
1536 | }
1537 |
1538 | .fa-sort-numeric-desc:before {
1539 | content: "\f163"
1540 | }
1541 |
1542 | .fa-thumbs-up:before {
1543 | content: "\f164"
1544 | }
1545 |
1546 | .fa-thumbs-down:before {
1547 | content: "\f165"
1548 | }
1549 |
1550 | .fa-youtube-square:before {
1551 | content: "\f166"
1552 | }
1553 |
1554 | .fa-youtube:before {
1555 | content: "\f167"
1556 | }
1557 |
1558 | .fa-xing:before {
1559 | content: "\f168"
1560 | }
1561 |
1562 | .fa-xing-square:before {
1563 | content: "\f169"
1564 | }
1565 |
1566 | .fa-youtube-play:before {
1567 | content: "\f16a"
1568 | }
1569 |
1570 | .fa-dropbox:before {
1571 | content: "\f16b"
1572 | }
1573 |
1574 | .fa-stack-overflow:before {
1575 | content: "\f16c"
1576 | }
1577 |
1578 | .fa-instagram:before {
1579 | content: "\f16d"
1580 | }
1581 |
1582 | .fa-flickr:before {
1583 | content: "\f16e"
1584 | }
1585 |
1586 | .fa-adn:before {
1587 | content: "\f170"
1588 | }
1589 |
1590 | .fa-bitbucket:before {
1591 | content: "\f171"
1592 | }
1593 |
1594 | .fa-bitbucket-square:before {
1595 | content: "\f172"
1596 | }
1597 |
1598 | .fa-tumblr:before {
1599 | content: "\f173"
1600 | }
1601 |
1602 | .fa-tumblr-square:before {
1603 | content: "\f174"
1604 | }
1605 |
1606 | .fa-long-arrow-down:before {
1607 | content: "\f175"
1608 | }
1609 |
1610 | .fa-long-arrow-up:before {
1611 | content: "\f176"
1612 | }
1613 |
1614 | .fa-long-arrow-left:before {
1615 | content: "\f177"
1616 | }
1617 |
1618 | .fa-long-arrow-right:before {
1619 | content: "\f178"
1620 | }
1621 |
1622 | .fa-apple:before {
1623 | content: "\f179"
1624 | }
1625 |
1626 | .fa-windows:before {
1627 | content: "\f17a"
1628 | }
1629 |
1630 | .fa-android:before {
1631 | content: "\f17b"
1632 | }
1633 |
1634 | .fa-linux:before {
1635 | content: "\f17c"
1636 | }
1637 |
1638 | .fa-dribbble:before {
1639 | content: "\f17d"
1640 | }
1641 |
1642 | .fa-skype:before {
1643 | content: "\f17e"
1644 | }
1645 |
1646 | .fa-foursquare:before {
1647 | content: "\f180"
1648 | }
1649 |
1650 | .fa-trello:before {
1651 | content: "\f181"
1652 | }
1653 |
1654 | .fa-female:before {
1655 | content: "\f182"
1656 | }
1657 |
1658 | .fa-male:before {
1659 | content: "\f183"
1660 | }
1661 |
1662 | .fa-gittip:before,
1663 | .fa-gratipay:before {
1664 | content: "\f184"
1665 | }
1666 |
1667 | .fa-sun-o:before {
1668 | content: "\f185"
1669 | }
1670 |
1671 | .fa-moon-o:before {
1672 | content: "\f186"
1673 | }
1674 |
1675 | .fa-archive:before {
1676 | content: "\f187"
1677 | }
1678 |
1679 | .fa-bug:before {
1680 | content: "\f188"
1681 | }
1682 |
1683 | .fa-vk:before {
1684 | content: "\f189"
1685 | }
1686 |
1687 | .fa-weibo:before {
1688 | content: "\f18a"
1689 | }
1690 |
1691 | .fa-renren:before {
1692 | content: "\f18b"
1693 | }
1694 |
1695 | .fa-pagelines:before {
1696 | content: "\f18c"
1697 | }
1698 |
1699 | .fa-stack-exchange:before {
1700 | content: "\f18d"
1701 | }
1702 |
1703 | .fa-arrow-circle-o-right:before {
1704 | content: "\f18e"
1705 | }
1706 |
1707 | .fa-arrow-circle-o-left:before {
1708 | content: "\f190"
1709 | }
1710 |
1711 | .fa-toggle-left:before,
1712 | .fa-caret-square-o-left:before {
1713 | content: "\f191"
1714 | }
1715 |
1716 | .fa-dot-circle-o:before {
1717 | content: "\f192"
1718 | }
1719 |
1720 | .fa-wheelchair:before {
1721 | content: "\f193"
1722 | }
1723 |
1724 | .fa-vimeo-square:before {
1725 | content: "\f194"
1726 | }
1727 |
1728 | .fa-turkish-lira:before,
1729 | .fa-try:before {
1730 | content: "\f195"
1731 | }
1732 |
1733 | .fa-plus-square-o:before {
1734 | content: "\f196"
1735 | }
1736 |
1737 | .fa-space-shuttle:before {
1738 | content: "\f197"
1739 | }
1740 |
1741 | .fa-slack:before {
1742 | content: "\f198"
1743 | }
1744 |
1745 | .fa-envelope-square:before {
1746 | content: "\f199"
1747 | }
1748 |
1749 | .fa-wordpress:before {
1750 | content: "\f19a"
1751 | }
1752 |
1753 | .fa-openid:before {
1754 | content: "\f19b"
1755 | }
1756 |
1757 | .fa-institution:before,
1758 | .fa-bank:before,
1759 | .fa-university:before {
1760 | content: "\f19c"
1761 | }
1762 |
1763 | .fa-mortar-board:before,
1764 | .fa-graduation-cap:before {
1765 | content: "\f19d"
1766 | }
1767 |
1768 | .fa-yahoo:before {
1769 | content: "\f19e"
1770 | }
1771 |
1772 | .fa-google:before {
1773 | content: "\f1a0"
1774 | }
1775 |
1776 | .fa-reddit:before {
1777 | content: "\f1a1"
1778 | }
1779 |
1780 | .fa-reddit-square:before {
1781 | content: "\f1a2"
1782 | }
1783 |
1784 | .fa-stumbleupon-circle:before {
1785 | content: "\f1a3"
1786 | }
1787 |
1788 | .fa-stumbleupon:before {
1789 | content: "\f1a4"
1790 | }
1791 |
1792 | .fa-delicious:before {
1793 | content: "\f1a5"
1794 | }
1795 |
1796 | .fa-digg:before {
1797 | content: "\f1a6"
1798 | }
1799 |
1800 | .fa-pied-piper-pp:before {
1801 | content: "\f1a7"
1802 | }
1803 |
1804 | .fa-pied-piper-alt:before {
1805 | content: "\f1a8"
1806 | }
1807 |
1808 | .fa-drupal:before {
1809 | content: "\f1a9"
1810 | }
1811 |
1812 | .fa-joomla:before {
1813 | content: "\f1aa"
1814 | }
1815 |
1816 | .fa-language:before {
1817 | content: "\f1ab"
1818 | }
1819 |
1820 | .fa-fax:before {
1821 | content: "\f1ac"
1822 | }
1823 |
1824 | .fa-building:before {
1825 | content: "\f1ad"
1826 | }
1827 |
1828 | .fa-child:before {
1829 | content: "\f1ae"
1830 | }
1831 |
1832 | .fa-paw:before {
1833 | content: "\f1b0"
1834 | }
1835 |
1836 | .fa-spoon:before {
1837 | content: "\f1b1"
1838 | }
1839 |
1840 | .fa-cube:before {
1841 | content: "\f1b2"
1842 | }
1843 |
1844 | .fa-cubes:before {
1845 | content: "\f1b3"
1846 | }
1847 |
1848 | .fa-behance:before {
1849 | content: "\f1b4"
1850 | }
1851 |
1852 | .fa-behance-square:before {
1853 | content: "\f1b5"
1854 | }
1855 |
1856 | .fa-steam:before {
1857 | content: "\f1b6"
1858 | }
1859 |
1860 | .fa-steam-square:before {
1861 | content: "\f1b7"
1862 | }
1863 |
1864 | .fa-recycle:before {
1865 | content: "\f1b8"
1866 | }
1867 |
1868 | .fa-automobile:before,
1869 | .fa-car:before {
1870 | content: "\f1b9"
1871 | }
1872 |
1873 | .fa-cab:before,
1874 | .fa-taxi:before {
1875 | content: "\f1ba"
1876 | }
1877 |
1878 | .fa-tree:before {
1879 | content: "\f1bb"
1880 | }
1881 |
1882 | .fa-spotify:before {
1883 | content: "\f1bc"
1884 | }
1885 |
1886 | .fa-deviantart:before {
1887 | content: "\f1bd"
1888 | }
1889 |
1890 | .fa-soundcloud:before {
1891 | content: "\f1be"
1892 | }
1893 |
1894 | .fa-database:before {
1895 | content: "\f1c0"
1896 | }
1897 |
1898 | .fa-file-pdf-o:before {
1899 | content: "\f1c1"
1900 | }
1901 |
1902 | .fa-file-word-o:before {
1903 | content: "\f1c2"
1904 | }
1905 |
1906 | .fa-file-excel-o:before {
1907 | content: "\f1c3"
1908 | }
1909 |
1910 | .fa-file-powerpoint-o:before {
1911 | content: "\f1c4"
1912 | }
1913 |
1914 | .fa-file-photo-o:before,
1915 | .fa-file-picture-o:before,
1916 | .fa-file-image-o:before {
1917 | content: "\f1c5"
1918 | }
1919 |
1920 | .fa-file-zip-o:before,
1921 | .fa-file-archive-o:before {
1922 | content: "\f1c6"
1923 | }
1924 |
1925 | .fa-file-sound-o:before,
1926 | .fa-file-audio-o:before {
1927 | content: "\f1c7"
1928 | }
1929 |
1930 | .fa-file-movie-o:before,
1931 | .fa-file-video-o:before {
1932 | content: "\f1c8"
1933 | }
1934 |
1935 | .fa-file-code-o:before {
1936 | content: "\f1c9"
1937 | }
1938 |
1939 | .fa-vine:before {
1940 | content: "\f1ca"
1941 | }
1942 |
1943 | .fa-codepen:before {
1944 | content: "\f1cb"
1945 | }
1946 |
1947 | .fa-jsfiddle:before {
1948 | content: "\f1cc"
1949 | }
1950 |
1951 | .fa-life-bouy:before,
1952 | .fa-life-buoy:before,
1953 | .fa-life-saver:before,
1954 | .fa-support:before,
1955 | .fa-life-ring:before {
1956 | content: "\f1cd"
1957 | }
1958 |
1959 | .fa-circle-o-notch:before {
1960 | content: "\f1ce"
1961 | }
1962 |
1963 | .fa-ra:before,
1964 | .fa-resistance:before,
1965 | .fa-rebel:before {
1966 | content: "\f1d0"
1967 | }
1968 |
1969 | .fa-ge:before,
1970 | .fa-empire:before {
1971 | content: "\f1d1"
1972 | }
1973 |
1974 | .fa-git-square:before {
1975 | content: "\f1d2"
1976 | }
1977 |
1978 | .fa-git:before {
1979 | content: "\f1d3"
1980 | }
1981 |
1982 | .fa-y-combinator-square:before,
1983 | .fa-yc-square:before,
1984 | .fa-hacker-news:before {
1985 | content: "\f1d4"
1986 | }
1987 |
1988 | .fa-tencent-weibo:before {
1989 | content: "\f1d5"
1990 | }
1991 |
1992 | .fa-qq:before {
1993 | content: "\f1d6"
1994 | }
1995 |
1996 | .fa-wechat:before,
1997 | .fa-weixin:before {
1998 | content: "\f1d7"
1999 | }
2000 |
2001 | .fa-send:before,
2002 | .fa-paper-plane:before {
2003 | content: "\f1d8"
2004 | }
2005 |
2006 | .fa-send-o:before,
2007 | .fa-paper-plane-o:before {
2008 | content: "\f1d9"
2009 | }
2010 |
2011 | .fa-history:before {
2012 | content: "\f1da"
2013 | }
2014 |
2015 | .fa-circle-thin:before {
2016 | content: "\f1db"
2017 | }
2018 |
2019 | .fa-header:before {
2020 | content: "\f1dc"
2021 | }
2022 |
2023 | .fa-paragraph:before {
2024 | content: "\f1dd"
2025 | }
2026 |
2027 | .fa-sliders:before {
2028 | content: "\f1de"
2029 | }
2030 |
2031 | .fa-share-alt:before {
2032 | content: "\f1e0"
2033 | }
2034 |
2035 | .fa-share-alt-square:before {
2036 | content: "\f1e1"
2037 | }
2038 |
2039 | .fa-bomb:before {
2040 | content: "\f1e2"
2041 | }
2042 |
2043 | .fa-soccer-ball-o:before,
2044 | .fa-futbol-o:before {
2045 | content: "\f1e3"
2046 | }
2047 |
2048 | .fa-tty:before {
2049 | content: "\f1e4"
2050 | }
2051 |
2052 | .fa-binoculars:before {
2053 | content: "\f1e5"
2054 | }
2055 |
2056 | .fa-plug:before {
2057 | content: "\f1e6"
2058 | }
2059 |
2060 | .fa-slideshare:before {
2061 | content: "\f1e7"
2062 | }
2063 |
2064 | .fa-twitch:before {
2065 | content: "\f1e8"
2066 | }
2067 |
2068 | .fa-yelp:before {
2069 | content: "\f1e9"
2070 | }
2071 |
2072 | .fa-newspaper-o:before {
2073 | content: "\f1ea"
2074 | }
2075 |
2076 | .fa-wifi:before {
2077 | content: "\f1eb"
2078 | }
2079 |
2080 | .fa-calculator:before {
2081 | content: "\f1ec"
2082 | }
2083 |
2084 | .fa-paypal:before {
2085 | content: "\f1ed"
2086 | }
2087 |
2088 | .fa-google-wallet:before {
2089 | content: "\f1ee"
2090 | }
2091 |
2092 | .fa-cc-visa:before {
2093 | content: "\f1f0"
2094 | }
2095 |
2096 | .fa-cc-mastercard:before {
2097 | content: "\f1f1"
2098 | }
2099 |
2100 | .fa-cc-discover:before {
2101 | content: "\f1f2"
2102 | }
2103 |
2104 | .fa-cc-amex:before {
2105 | content: "\f1f3"
2106 | }
2107 |
2108 | .fa-cc-paypal:before {
2109 | content: "\f1f4"
2110 | }
2111 |
2112 | .fa-cc-stripe:before {
2113 | content: "\f1f5"
2114 | }
2115 |
2116 | .fa-bell-slash:before {
2117 | content: "\f1f6"
2118 | }
2119 |
2120 | .fa-bell-slash-o:before {
2121 | content: "\f1f7"
2122 | }
2123 |
2124 | .fa-trash:before {
2125 | content: "\f1f8"
2126 | }
2127 |
2128 | .fa-copyright:before {
2129 | content: "\f1f9"
2130 | }
2131 |
2132 | .fa-at:before {
2133 | content: "\f1fa"
2134 | }
2135 |
2136 | .fa-eyedropper:before {
2137 | content: "\f1fb"
2138 | }
2139 |
2140 | .fa-paint-brush:before {
2141 | content: "\f1fc"
2142 | }
2143 |
2144 | .fa-birthday-cake:before {
2145 | content: "\f1fd"
2146 | }
2147 |
2148 | .fa-area-chart:before {
2149 | content: "\f1fe"
2150 | }
2151 |
2152 | .fa-pie-chart:before {
2153 | content: "\f200"
2154 | }
2155 |
2156 | .fa-line-chart:before {
2157 | content: "\f201"
2158 | }
2159 |
2160 | .fa-lastfm:before {
2161 | content: "\f202"
2162 | }
2163 |
2164 | .fa-lastfm-square:before {
2165 | content: "\f203"
2166 | }
2167 |
2168 | .fa-toggle-off:before {
2169 | content: "\f204"
2170 | }
2171 |
2172 | .fa-toggle-on:before {
2173 | content: "\f205"
2174 | }
2175 |
2176 | .fa-bicycle:before {
2177 | content: "\f206"
2178 | }
2179 |
2180 | .fa-bus:before {
2181 | content: "\f207"
2182 | }
2183 |
2184 | .fa-ioxhost:before {
2185 | content: "\f208"
2186 | }
2187 |
2188 | .fa-angellist:before {
2189 | content: "\f209"
2190 | }
2191 |
2192 | .fa-cc:before {
2193 | content: "\f20a"
2194 | }
2195 |
2196 | .fa-shekel:before,
2197 | .fa-sheqel:before,
2198 | .fa-ils:before {
2199 | content: "\f20b"
2200 | }
2201 |
2202 | .fa-meanpath:before {
2203 | content: "\f20c"
2204 | }
2205 |
2206 | .fa-buysellads:before {
2207 | content: "\f20d"
2208 | }
2209 |
2210 | .fa-connectdevelop:before {
2211 | content: "\f20e"
2212 | }
2213 |
2214 | .fa-dashcube:before {
2215 | content: "\f210"
2216 | }
2217 |
2218 | .fa-forumbee:before {
2219 | content: "\f211"
2220 | }
2221 |
2222 | .fa-leanpub:before {
2223 | content: "\f212"
2224 | }
2225 |
2226 | .fa-sellsy:before {
2227 | content: "\f213"
2228 | }
2229 |
2230 | .fa-shirtsinbulk:before {
2231 | content: "\f214"
2232 | }
2233 |
2234 | .fa-simplybuilt:before {
2235 | content: "\f215"
2236 | }
2237 |
2238 | .fa-skyatlas:before {
2239 | content: "\f216"
2240 | }
2241 |
2242 | .fa-cart-plus:before {
2243 | content: "\f217"
2244 | }
2245 |
2246 | .fa-cart-arrow-down:before {
2247 | content: "\f218"
2248 | }
2249 |
2250 | .fa-diamond:before {
2251 | content: "\f219"
2252 | }
2253 |
2254 | .fa-ship:before {
2255 | content: "\f21a"
2256 | }
2257 |
2258 | .fa-user-secret:before {
2259 | content: "\f21b"
2260 | }
2261 |
2262 | .fa-motorcycle:before {
2263 | content: "\f21c"
2264 | }
2265 |
2266 | .fa-street-view:before {
2267 | content: "\f21d"
2268 | }
2269 |
2270 | .fa-heartbeat:before {
2271 | content: "\f21e"
2272 | }
2273 |
2274 | .fa-venus:before {
2275 | content: "\f221"
2276 | }
2277 |
2278 | .fa-mars:before {
2279 | content: "\f222"
2280 | }
2281 |
2282 | .fa-mercury:before {
2283 | content: "\f223"
2284 | }
2285 |
2286 | .fa-intersex:before,
2287 | .fa-transgender:before {
2288 | content: "\f224"
2289 | }
2290 |
2291 | .fa-transgender-alt:before {
2292 | content: "\f225"
2293 | }
2294 |
2295 | .fa-venus-double:before {
2296 | content: "\f226"
2297 | }
2298 |
2299 | .fa-mars-double:before {
2300 | content: "\f227"
2301 | }
2302 |
2303 | .fa-venus-mars:before {
2304 | content: "\f228"
2305 | }
2306 |
2307 | .fa-mars-stroke:before {
2308 | content: "\f229"
2309 | }
2310 |
2311 | .fa-mars-stroke-v:before {
2312 | content: "\f22a"
2313 | }
2314 |
2315 | .fa-mars-stroke-h:before {
2316 | content: "\f22b"
2317 | }
2318 |
2319 | .fa-neuter:before {
2320 | content: "\f22c"
2321 | }
2322 |
2323 | .fa-genderless:before {
2324 | content: "\f22d"
2325 | }
2326 |
2327 | .fa-facebook-official:before {
2328 | content: "\f230"
2329 | }
2330 |
2331 | .fa-pinterest-p:before {
2332 | content: "\f231"
2333 | }
2334 |
2335 | .fa-whatsapp:before {
2336 | content: "\f232"
2337 | }
2338 |
2339 | .fa-server:before {
2340 | content: "\f233"
2341 | }
2342 |
2343 | .fa-user-plus:before {
2344 | content: "\f234"
2345 | }
2346 |
2347 | .fa-user-times:before {
2348 | content: "\f235"
2349 | }
2350 |
2351 | .fa-hotel:before,
2352 | .fa-bed:before {
2353 | content: "\f236"
2354 | }
2355 |
2356 | .fa-viacoin:before {
2357 | content: "\f237"
2358 | }
2359 |
2360 | .fa-train:before {
2361 | content: "\f238"
2362 | }
2363 |
2364 | .fa-subway:before {
2365 | content: "\f239"
2366 | }
2367 |
2368 | .fa-medium:before {
2369 | content: "\f23a"
2370 | }
2371 |
2372 | .fa-yc:before,
2373 | .fa-y-combinator:before {
2374 | content: "\f23b"
2375 | }
2376 |
2377 | .fa-optin-monster:before {
2378 | content: "\f23c"
2379 | }
2380 |
2381 | .fa-opencart:before {
2382 | content: "\f23d"
2383 | }
2384 |
2385 | .fa-expeditedssl:before {
2386 | content: "\f23e"
2387 | }
2388 |
2389 | .fa-battery-4:before,
2390 | .fa-battery:before,
2391 | .fa-battery-full:before {
2392 | content: "\f240"
2393 | }
2394 |
2395 | .fa-battery-3:before,
2396 | .fa-battery-three-quarters:before {
2397 | content: "\f241"
2398 | }
2399 |
2400 | .fa-battery-2:before,
2401 | .fa-battery-half:before {
2402 | content: "\f242"
2403 | }
2404 |
2405 | .fa-battery-1:before,
2406 | .fa-battery-quarter:before {
2407 | content: "\f243"
2408 | }
2409 |
2410 | .fa-battery-0:before,
2411 | .fa-battery-empty:before {
2412 | content: "\f244"
2413 | }
2414 |
2415 | .fa-mouse-pointer:before {
2416 | content: "\f245"
2417 | }
2418 |
2419 | .fa-i-cursor:before {
2420 | content: "\f246"
2421 | }
2422 |
2423 | .fa-object-group:before {
2424 | content: "\f247"
2425 | }
2426 |
2427 | .fa-object-ungroup:before {
2428 | content: "\f248"
2429 | }
2430 |
2431 | .fa-sticky-note:before {
2432 | content: "\f249"
2433 | }
2434 |
2435 | .fa-sticky-note-o:before {
2436 | content: "\f24a"
2437 | }
2438 |
2439 | .fa-cc-jcb:before {
2440 | content: "\f24b"
2441 | }
2442 |
2443 | .fa-cc-diners-club:before {
2444 | content: "\f24c"
2445 | }
2446 |
2447 | .fa-clone:before {
2448 | content: "\f24d"
2449 | }
2450 |
2451 | .fa-balance-scale:before {
2452 | content: "\f24e"
2453 | }
2454 |
2455 | .fa-hourglass-o:before {
2456 | content: "\f250"
2457 | }
2458 |
2459 | .fa-hourglass-1:before,
2460 | .fa-hourglass-start:before {
2461 | content: "\f251"
2462 | }
2463 |
2464 | .fa-hourglass-2:before,
2465 | .fa-hourglass-half:before {
2466 | content: "\f252"
2467 | }
2468 |
2469 | .fa-hourglass-3:before,
2470 | .fa-hourglass-end:before {
2471 | content: "\f253"
2472 | }
2473 |
2474 | .fa-hourglass:before {
2475 | content: "\f254"
2476 | }
2477 |
2478 | .fa-hand-grab-o:before,
2479 | .fa-hand-rock-o:before {
2480 | content: "\f255"
2481 | }
2482 |
2483 | .fa-hand-stop-o:before,
2484 | .fa-hand-paper-o:before {
2485 | content: "\f256"
2486 | }
2487 |
2488 | .fa-hand-scissors-o:before {
2489 | content: "\f257"
2490 | }
2491 |
2492 | .fa-hand-lizard-o:before {
2493 | content: "\f258"
2494 | }
2495 |
2496 | .fa-hand-spock-o:before {
2497 | content: "\f259"
2498 | }
2499 |
2500 | .fa-hand-pointer-o:before {
2501 | content: "\f25a"
2502 | }
2503 |
2504 | .fa-hand-peace-o:before {
2505 | content: "\f25b"
2506 | }
2507 |
2508 | .fa-trademark:before {
2509 | content: "\f25c"
2510 | }
2511 |
2512 | .fa-registered:before {
2513 | content: "\f25d"
2514 | }
2515 |
2516 | .fa-creative-commons:before {
2517 | content: "\f25e"
2518 | }
2519 |
2520 | .fa-gg:before {
2521 | content: "\f260"
2522 | }
2523 |
2524 | .fa-gg-circle:before {
2525 | content: "\f261"
2526 | }
2527 |
2528 | .fa-tripadvisor:before {
2529 | content: "\f262"
2530 | }
2531 |
2532 | .fa-odnoklassniki:before {
2533 | content: "\f263"
2534 | }
2535 |
2536 | .fa-odnoklassniki-square:before {
2537 | content: "\f264"
2538 | }
2539 |
2540 | .fa-get-pocket:before {
2541 | content: "\f265"
2542 | }
2543 |
2544 | .fa-wikipedia-w:before {
2545 | content: "\f266"
2546 | }
2547 |
2548 | .fa-safari:before {
2549 | content: "\f267"
2550 | }
2551 |
2552 | .fa-chrome:before {
2553 | content: "\f268"
2554 | }
2555 |
2556 | .fa-firefox:before {
2557 | content: "\f269"
2558 | }
2559 |
2560 | .fa-opera:before {
2561 | content: "\f26a"
2562 | }
2563 |
2564 | .fa-internet-explorer:before {
2565 | content: "\f26b"
2566 | }
2567 |
2568 | .fa-tv:before,
2569 | .fa-television:before {
2570 | content: "\f26c"
2571 | }
2572 |
2573 | .fa-contao:before {
2574 | content: "\f26d"
2575 | }
2576 |
2577 | .fa-500px:before {
2578 | content: "\f26e"
2579 | }
2580 |
2581 | .fa-amazon:before {
2582 | content: "\f270"
2583 | }
2584 |
2585 | .fa-calendar-plus-o:before {
2586 | content: "\f271"
2587 | }
2588 |
2589 | .fa-calendar-minus-o:before {
2590 | content: "\f272"
2591 | }
2592 |
2593 | .fa-calendar-times-o:before {
2594 | content: "\f273"
2595 | }
2596 |
2597 | .fa-calendar-check-o:before {
2598 | content: "\f274"
2599 | }
2600 |
2601 | .fa-industry:before {
2602 | content: "\f275"
2603 | }
2604 |
2605 | .fa-map-pin:before {
2606 | content: "\f276"
2607 | }
2608 |
2609 | .fa-map-signs:before {
2610 | content: "\f277"
2611 | }
2612 |
2613 | .fa-map-o:before {
2614 | content: "\f278"
2615 | }
2616 |
2617 | .fa-map:before {
2618 | content: "\f279"
2619 | }
2620 |
2621 | .fa-commenting:before {
2622 | content: "\f27a"
2623 | }
2624 |
2625 | .fa-commenting-o:before {
2626 | content: "\f27b"
2627 | }
2628 |
2629 | .fa-houzz:before {
2630 | content: "\f27c"
2631 | }
2632 |
2633 | .fa-vimeo:before {
2634 | content: "\f27d"
2635 | }
2636 |
2637 | .fa-black-tie:before {
2638 | content: "\f27e"
2639 | }
2640 |
2641 | .fa-fonticons:before {
2642 | content: "\f280"
2643 | }
2644 |
2645 | .fa-reddit-alien:before {
2646 | content: "\f281"
2647 | }
2648 |
2649 | .fa-edge:before {
2650 | content: "\f282"
2651 | }
2652 |
2653 | .fa-credit-card-alt:before {
2654 | content: "\f283"
2655 | }
2656 |
2657 | .fa-codiepie:before {
2658 | content: "\f284"
2659 | }
2660 |
2661 | .fa-modx:before {
2662 | content: "\f285"
2663 | }
2664 |
2665 | .fa-fort-awesome:before {
2666 | content: "\f286"
2667 | }
2668 |
2669 | .fa-usb:before {
2670 | content: "\f287"
2671 | }
2672 |
2673 | .fa-product-hunt:before {
2674 | content: "\f288"
2675 | }
2676 |
2677 | .fa-mixcloud:before {
2678 | content: "\f289"
2679 | }
2680 |
2681 | .fa-scribd:before {
2682 | content: "\f28a"
2683 | }
2684 |
2685 | .fa-pause-circle:before {
2686 | content: "\f28b"
2687 | }
2688 |
2689 | .fa-pause-circle-o:before {
2690 | content: "\f28c"
2691 | }
2692 |
2693 | .fa-stop-circle:before {
2694 | content: "\f28d"
2695 | }
2696 |
2697 | .fa-stop-circle-o:before {
2698 | content: "\f28e"
2699 | }
2700 |
2701 | .fa-shopping-bag:before {
2702 | content: "\f290"
2703 | }
2704 |
2705 | .fa-shopping-basket:before {
2706 | content: "\f291"
2707 | }
2708 |
2709 | .fa-hashtag:before {
2710 | content: "\f292"
2711 | }
2712 |
2713 | .fa-bluetooth:before {
2714 | content: "\f293"
2715 | }
2716 |
2717 | .fa-bluetooth-b:before {
2718 | content: "\f294"
2719 | }
2720 |
2721 | .fa-percent:before {
2722 | content: "\f295"
2723 | }
2724 |
2725 | .fa-gitlab:before {
2726 | content: "\f296"
2727 | }
2728 |
2729 | .fa-wpbeginner:before {
2730 | content: "\f297"
2731 | }
2732 |
2733 | .fa-wpforms:before {
2734 | content: "\f298"
2735 | }
2736 |
2737 | .fa-envira:before {
2738 | content: "\f299"
2739 | }
2740 |
2741 | .fa-universal-access:before {
2742 | content: "\f29a"
2743 | }
2744 |
2745 | .fa-wheelchair-alt:before {
2746 | content: "\f29b"
2747 | }
2748 |
2749 | .fa-question-circle-o:before {
2750 | content: "\f29c"
2751 | }
2752 |
2753 | .fa-blind:before {
2754 | content: "\f29d"
2755 | }
2756 |
2757 | .fa-audio-description:before {
2758 | content: "\f29e"
2759 | }
2760 |
2761 | .fa-volume-control-phone:before {
2762 | content: "\f2a0"
2763 | }
2764 |
2765 | .fa-braille:before {
2766 | content: "\f2a1"
2767 | }
2768 |
2769 | .fa-assistive-listening-systems:before {
2770 | content: "\f2a2"
2771 | }
2772 |
2773 | .fa-asl-interpreting:before,
2774 | .fa-american-sign-language-interpreting:before {
2775 | content: "\f2a3"
2776 | }
2777 |
2778 | .fa-deafness:before,
2779 | .fa-hard-of-hearing:before,
2780 | .fa-deaf:before {
2781 | content: "\f2a4"
2782 | }
2783 |
2784 | .fa-glide:before {
2785 | content: "\f2a5"
2786 | }
2787 |
2788 | .fa-glide-g:before {
2789 | content: "\f2a6"
2790 | }
2791 |
2792 | .fa-signing:before,
2793 | .fa-sign-language:before {
2794 | content: "\f2a7"
2795 | }
2796 |
2797 | .fa-low-vision:before {
2798 | content: "\f2a8"
2799 | }
2800 |
2801 | .fa-viadeo:before {
2802 | content: "\f2a9"
2803 | }
2804 |
2805 | .fa-viadeo-square:before {
2806 | content: "\f2aa"
2807 | }
2808 |
2809 | .fa-snapchat:before {
2810 | content: "\f2ab"
2811 | }
2812 |
2813 | .fa-snapchat-ghost:before {
2814 | content: "\f2ac"
2815 | }
2816 |
2817 | .fa-snapchat-square:before {
2818 | content: "\f2ad"
2819 | }
2820 |
2821 | .fa-pied-piper:before {
2822 | content: "\f2ae"
2823 | }
2824 |
2825 | .fa-first-order:before {
2826 | content: "\f2b0"
2827 | }
2828 |
2829 | .fa-yoast:before {
2830 | content: "\f2b1"
2831 | }
2832 |
2833 | .fa-themeisle:before {
2834 | content: "\f2b2"
2835 | }
2836 |
2837 | .fa-google-plus-circle:before,
2838 | .fa-google-plus-official:before {
2839 | content: "\f2b3"
2840 | }
2841 |
2842 | .fa-fa:before,
2843 | .fa-font-awesome:before {
2844 | content: "\f2b4"
2845 | }
2846 |
2847 | .fa-handshake-o:before {
2848 | content: "\f2b5"
2849 | }
2850 |
2851 | .fa-envelope-open:before {
2852 | content: "\f2b6"
2853 | }
2854 |
2855 | .fa-envelope-open-o:before {
2856 | content: "\f2b7"
2857 | }
2858 |
2859 | .fa-linode:before {
2860 | content: "\f2b8"
2861 | }
2862 |
2863 | .fa-address-book:before {
2864 | content: "\f2b9"
2865 | }
2866 |
2867 | .fa-address-book-o:before {
2868 | content: "\f2ba"
2869 | }
2870 |
2871 | .fa-vcard:before,
2872 | .fa-address-card:before {
2873 | content: "\f2bb"
2874 | }
2875 |
2876 | .fa-vcard-o:before,
2877 | .fa-address-card-o:before {
2878 | content: "\f2bc"
2879 | }
2880 |
2881 | .fa-user-circle:before {
2882 | content: "\f2bd"
2883 | }
2884 |
2885 | .fa-user-circle-o:before {
2886 | content: "\f2be"
2887 | }
2888 |
2889 | .fa-user-o:before {
2890 | content: "\f2c0"
2891 | }
2892 |
2893 | .fa-id-badge:before {
2894 | content: "\f2c1"
2895 | }
2896 |
2897 | .fa-drivers-license:before,
2898 | .fa-id-card:before {
2899 | content: "\f2c2"
2900 | }
2901 |
2902 | .fa-drivers-license-o:before,
2903 | .fa-id-card-o:before {
2904 | content: "\f2c3"
2905 | }
2906 |
2907 | .fa-quora:before {
2908 | content: "\f2c4"
2909 | }
2910 |
2911 | .fa-free-code-camp:before {
2912 | content: "\f2c5"
2913 | }
2914 |
2915 | .fa-telegram:before {
2916 | content: "\f2c6"
2917 | }
2918 |
2919 | .fa-thermometer-4:before,
2920 | .fa-thermometer:before,
2921 | .fa-thermometer-full:before {
2922 | content: "\f2c7"
2923 | }
2924 |
2925 | .fa-thermometer-3:before,
2926 | .fa-thermometer-three-quarters:before {
2927 | content: "\f2c8"
2928 | }
2929 |
2930 | .fa-thermometer-2:before,
2931 | .fa-thermometer-half:before {
2932 | content: "\f2c9"
2933 | }
2934 |
2935 | .fa-thermometer-1:before,
2936 | .fa-thermometer-quarter:before {
2937 | content: "\f2ca"
2938 | }
2939 |
2940 | .fa-thermometer-0:before,
2941 | .fa-thermometer-empty:before {
2942 | content: "\f2cb"
2943 | }
2944 |
2945 | .fa-shower:before {
2946 | content: "\f2cc"
2947 | }
2948 |
2949 | .fa-bathtub:before,
2950 | .fa-s15:before,
2951 | .fa-bath:before {
2952 | content: "\f2cd"
2953 | }
2954 |
2955 | .fa-podcast:before {
2956 | content: "\f2ce"
2957 | }
2958 |
2959 | .fa-window-maximize:before {
2960 | content: "\f2d0"
2961 | }
2962 |
2963 | .fa-window-minimize:before {
2964 | content: "\f2d1"
2965 | }
2966 |
2967 | .fa-window-restore:before {
2968 | content: "\f2d2"
2969 | }
2970 |
2971 | .fa-times-rectangle:before,
2972 | .fa-window-close:before {
2973 | content: "\f2d3"
2974 | }
2975 |
2976 | .fa-times-rectangle-o:before,
2977 | .fa-window-close-o:before {
2978 | content: "\f2d4"
2979 | }
2980 |
2981 | .fa-bandcamp:before {
2982 | content: "\f2d5"
2983 | }
2984 |
2985 | .fa-grav:before {
2986 | content: "\f2d6"
2987 | }
2988 |
2989 | .fa-etsy:before {
2990 | content: "\f2d7"
2991 | }
2992 |
2993 | .fa-imdb:before {
2994 | content: "\f2d8"
2995 | }
2996 |
2997 | .fa-ravelry:before {
2998 | content: "\f2d9"
2999 | }
3000 |
3001 | .fa-eercast:before {
3002 | content: "\f2da"
3003 | }
3004 |
3005 | .fa-microchip:before {
3006 | content: "\f2db"
3007 | }
3008 |
3009 | .fa-snowflake-o:before {
3010 | content: "\f2dc"
3011 | }
3012 |
3013 | .fa-superpowers:before {
3014 | content: "\f2dd"
3015 | }
3016 |
3017 | .fa-wpexplorer:before {
3018 | content: "\f2de"
3019 | }
3020 |
3021 | .fa-meetup:before {
3022 | content: "\f2e0"
3023 | }
3024 |
3025 | .sr-only {
3026 | position: absolute;
3027 | width: 1px;
3028 | height: 1px;
3029 | padding: 0;
3030 | margin: -1px;
3031 | overflow: hidden;
3032 | clip: rect(0, 0, 0, 0);
3033 | border: 0
3034 | }
3035 |
3036 | .sr-only-focusable:active,
3037 | .sr-only-focusable:focus {
3038 | position: static;
3039 | width: auto;
3040 | height: auto;
3041 | margin: 0;
3042 | overflow: visible;
3043 | clip: auto
3044 | }
--------------------------------------------------------------------------------
/pages/authorizetip/authorizetip.js:
--------------------------------------------------------------------------------
1 | const util = require('../../utils/util.js')
2 | const app = getApp()
3 | Page({
4 | //跳转设置页面授权
5 | onGotUserInfo: function(e) {
6 | if (e.detail.errMsg.indexOf('ok') > -1) {
7 | wx.showToast({
8 | title: '授权成功',
9 | icon: 'success',
10 | duration: 1500,
11 | mask: true
12 | })
13 | wx.getSetting({
14 | success: function(res) {
15 | if (res.authSetting['scope.userInfo']) {
16 | wx.showToast({
17 | title: '授权成功',
18 | icon: 'success',
19 | duration: 1500,
20 | mask: true
21 | });
22 | //尝试再次登录
23 | wx.reLaunch({
24 | url: '/pages/index/index'
25 | })
26 | app.userAuthCb();
27 | } else {
28 | return;
29 | }
30 | }
31 | })
32 | } else {
33 | wx.showToast({
34 | title: '授权失败',
35 | icon: 'none',
36 | duration: 1500,
37 | mask: true
38 | })
39 | }
40 | }
41 | })
--------------------------------------------------------------------------------
/pages/authorizetip/authorizetip.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "阳光投票",
3 | "navigationBarBackgroundColor": "#7087f4",
4 | "navigationBarTextStyle": "white",
5 | "backgroundTextStyle": "light",
6 | "enablePullDownRefresh": false
7 | }
--------------------------------------------------------------------------------
/pages/authorizetip/authorizetip.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 需要您的授权才能使用哦~
4 |
5 |
--------------------------------------------------------------------------------
/pages/authorizetip/authorizetip.wxss:
--------------------------------------------------------------------------------
1 | page {
2 | background-color: #e1e8f6;
3 | }
4 |
5 | .no-vote-tip {
6 | margin-top: 80rpx;
7 | }
8 |
9 | .no-vote-tip button {
10 | position: absolute;
11 | top: 640rpx;
12 | right: 0;
13 | left: 0;
14 | margin: auto;
15 | width: 412rpx;
16 | height: 84rpx;
17 | line-height: 84rpx;
18 | background-color: #7087f4;
19 | }
20 |
21 | .no-vote-tip text {
22 | position: absolute;
23 | top: 520rpx;
24 | right: 0;
25 | left: 0;
26 | font-size: 30rpx;
27 | color: #707070;
28 | text-align: center;
29 | }
--------------------------------------------------------------------------------
/pages/comment/comment.js:
--------------------------------------------------------------------------------
1 | //logs.js
2 | const util = require('../../utils/util.js')
3 |
4 | Page({
5 | data: {
6 | newVoteTitle: '',
7 | desTextareaState: false,
8 | addNewVoteState: false,
9 | textareaFocusFlag: false,
10 | newVoteWords: 0,
11 | newVoteWordsState: false,
12 | newVoteContent: '',
13 | newVotes: [],
14 | desTextareaData: '',
15 | voteTypeChoosed: 0,
16 | voteTitleLen: 0,
17 | voteDesLen: 0,
18 | desTextareaDataLen: 0,
19 | voteImgs: [],
20 | voteImgPaths: [],
21 | saveBtnState: true,
22 | startDate: '',
23 | valiDate: '',
24 | voteTypes: [
25 | { name: 'F', value: '公开', checked: true },
26 | { name: 'T', value: '私密' }
27 | ]
28 | },
29 | radioChange: function(e) {
30 | let self = this;
31 | let choosedValue = e.detail.value;
32 | if (e.detail.value === "T") {
33 | wx.showModal({
34 | content: '私密投票只有自己和被分享的朋友才能看到哦~',
35 | success: function(res) {
36 | if (res.confirm) {
37 | self.setData({
38 | voteTypeChoosed: choosedValue
39 | })
40 | return;
41 | } else if (res.cancel) {
42 | self.setData({
43 | voteTypes: [
44 | { name: 'F', value: '公开', checked: true },
45 | { name: 'T', value: '私密' }
46 | ]
47 | })
48 | }
49 | }
50 | })
51 | } else {
52 | self.setData({
53 | voteTypeChoosed: choosedValue
54 | })
55 | }
56 | },
57 | bindTitleInput: function(e) {
58 | let self = this;
59 | self.setData({
60 | newVoteTitle: e.detail.value,
61 | voteTitleLen: e.detail.cursor
62 | })
63 | },
64 | bindDesTextAreaInput: function(e) {
65 | let self = this;
66 | let desTextLen = e.detail.cursor;
67 | self.setData({
68 | desTextareaData: e.detail.value,
69 | desTextareaDataLen: e.detail.cursor
70 | })
71 | },
72 | bindTextAreaInput: function(e) {
73 | var self = this;
74 | self.setData({
75 | newVoteWords: e.detail.cursor,
76 | newVoteContent: e.detail.value
77 | })
78 | if (self.data.newVoteWords === 40) {
79 | self.setData({
80 | newVoteWordsState: true
81 | })
82 | } else {
83 | self.setData({
84 | newVoteWordsState: false
85 | })
86 | }
87 | },
88 | onLoad: function() {
89 | let self = this;
90 | let authorization = wx.getStorageSync('authorization');
91 | const startDate = new Date().toLocaleDateString().replace(/\//g, '-');
92 | //const endDate = new Date().toLocaleDateString().replace(/\//g, '-');
93 | self.setData({
94 | userAuthorization: authorization,
95 | startDate: startDate
96 | })
97 | },
98 | addNewVote: function() {
99 | var self = this;
100 | self.setData({
101 | desTextareaState: !this.data.desTextareaState,
102 | addNewVoteState: !this.data.addNewVoteState,
103 | })
104 | },
105 | confirmAddNewVote: function() {
106 | let voteContent = this.data.newVoteContent;
107 | let voteItem = {};
108 | var self = this;
109 | if (voteContent) {
110 | voteItem.title = voteContent;
111 | } else {
112 | wx.showToast({
113 | title: '请填写选项内容',
114 | icon: 'none',
115 | duration: 1500
116 | })
117 | setTimeout(function() {
118 | wx.hideLoading()
119 | }, 2000)
120 | return;
121 | }
122 | self.data.newVotes.push(voteItem);
123 | self.setData({
124 | desTextareaState: !self.data.desTextareaState,
125 | addNewVoteState: !self.data.addNewVoteState,
126 | newVoteContent: '',
127 | newVotes: self.data.newVotes,
128 | addNewVoteState: false,
129 | newVoteWords: 0,
130 | });
131 |
132 | },
133 | closeMask: function() {
134 | var self = this;
135 | self.setData({
136 | addNewVoteState: false,
137 | newVoteContent: '',
138 | newVoteWords: 0,
139 | newVoteWordsState: false,
140 | desTextareaState: false,
141 | })
142 | },
143 | showMask: function() {
144 | var self = this;
145 | self.setData({
146 | addNewVoteState: false
147 | })
148 | },
149 | bindTextAreablur: function() {
150 | var self = this;
151 | self.setData({
152 | textareaFocusFlag: false
153 | })
154 | },
155 | bindTextAreaFocus: function() {
156 | this.setData({
157 | textareaFocusFlag: true
158 | })
159 | },
160 | uploadImg: function() {
161 | var self = this;
162 | let authorization = wx.getStorageSync('authorization');
163 |
164 | wx.chooseImage({
165 | count: 1, // 最多可以选择的图片张数
166 | sizeType: ['compressed'], // compressed 压缩
167 | sourceType: ['album', 'camera'], // album 从相册选图,camera 使用相机,默认二者都有
168 | success: function(res) {
169 | let tempFilePaths = res.tempFilePaths
170 | wx.showLoading({
171 | title: '图片正在上传',
172 | });
173 | util.request({ // 防止 token 过期
174 | url: util.baseUrl + '/api/me',
175 | method: 'GET',
176 | success: function(res) {
177 | self.data.userAuthorization = wx.getStorageSync('authorization');
178 |
179 | wx.uploadFile({
180 | url: util.baseUrl + '/api/images/store',
181 | filePath: tempFilePaths[0],
182 | name: 'image',
183 | header: {
184 | Authorization: authorization
185 | },
186 | formData: {
187 | 'image': tempFilePaths[0]
188 | },
189 | success: function(res) {
190 | let resData = JSON.parse(res.data);
191 | let pathObj = {};
192 | if (res.statusCode === 200) {
193 | let imgUrl = resData.host + resData.path;
194 | wx.hideLoading();
195 | wx.showToast({
196 | title: '成功',
197 | icon: 'success'
198 | });
199 | self.data.voteImgs.push(imgUrl);
200 | pathObj.path = resData.path;
201 | self.data.voteImgPaths.push(pathObj);
202 | self.setData({
203 | voteImgs: self.data.voteImgs,
204 | voteImgPaths: self.data.voteImgPaths
205 | })
206 | } else {
207 | wx.showModal({
208 | title: '提示',
209 | content: '上传失败,请重新上传',
210 | showCancel: false
211 | })
212 | }
213 | },
214 | complete: function() {
215 | wx.hideToast();
216 | }
217 | })
218 | }
219 | });
220 | },
221 | fail: function() {
222 | wx.showToast({
223 | title: '图片上传失败,请稍后再次上传',
224 | icon: 'none',
225 | duration: 1500
226 | })
227 | }
228 | })
229 | },
230 | bindPreviewImage: function(e) {
231 | var self = this;
232 | wx.previewImage({
233 | current: e.currentTarget.dataset.src, // 当前显示图片的http链接
234 | urls: self.data.voteImgs // 需要预览的图片http链接列表
235 | })
236 | },
237 | delImage: function(e) {
238 | let self = this;
239 | let i = e.currentTarget.dataset.index;
240 | let path = e.currentTarget.dataset.path;
241 | let voteImgs = self.data.voteImgs;
242 | wx.showModal({
243 | title: '温馨提示',
244 | content: '确认删除该张图片?',
245 | success: function(res) {
246 | if (res.confirm) {
247 | util.request({
248 | url: util.baseUrl + '/api/image?path=' + path,
249 | method: 'DELETE',
250 | success: function(res) {
251 | if (res.statusCode === 200) {
252 | wx.showToast({
253 | title: '图片删除成功',
254 | icon: 'success'
255 | });
256 | voteImgs.splice(i, 1)
257 | self.data.voteImgPaths.splice(i, 1)
258 | self.setData({
259 | voteImgs: voteImgs,
260 | voteImgPaths: self.data.voteImgPaths
261 | })
262 | }
263 | },
264 | complete: function() {
265 | wx.hideToast();
266 | }
267 | })
268 | }
269 | }
270 | })
271 | },
272 | //设置投票有效期
273 | bindvaliDateChange: function(e) {
274 | let self = this;
275 | let val = e.detail.value;
276 | console.log(val)
277 | self.setData({
278 | valiDate: val
279 | })
280 | },
281 | confirmDelItem: function(e) {
282 | let self = this;
283 | let index = e.currentTarget.dataset.index;
284 | let delData = self.data.newVotes;
285 | wx.showModal({
286 | title: '温馨提示',
287 | content: '确认删除该投票选项?',
288 | success: function(res) {
289 | if (res.confirm) {
290 | delData.splice(index, 1)
291 | self.setData({
292 | newVotes: delData
293 | })
294 | }
295 | }
296 | })
297 | },
298 | publishNewVote: function() {
299 | /**
300 | * 标题:newVoteTitle
301 | * 类型:voteTypeChoosed
302 | * 描述:desTextareaData
303 | * 选项:newVotes
304 | */
305 | let self = this;
306 | let newVoteTitle = self.data.newVoteTitle;
307 | let voteTypeChoosed = self.data.voteTypeChoosed == 0 ? 'F' : self.data.voteTypeChoosed;
308 | let desTextareaData = self.data.desTextareaData;
309 | let newVotes = self.data.newVotes;
310 | let createTime = util.formatTime(new Date());
311 | if (newVoteTitle == "") {
312 | wx.showToast({
313 | title: '请输入【投票标题】后再提交',
314 | icon: 'none',
315 | duration: 1500
316 | })
317 | return;
318 | } else if (self.data.voteTitleLen < 3) {
319 | wx.showToast({
320 | title: '【投票标题】至少三个字',
321 | icon: 'none',
322 | duration: 1500
323 | })
324 | return;
325 | }
326 | if (newVotes.length < 2) {
327 | wx.showToast({
328 | title: '【投票选项】至少两项!',
329 | icon: 'none',
330 | duration: 1500
331 | })
332 | return;
333 | }
334 | self.setData({
335 | saveBtnState: false
336 | });
337 | util.request({
338 | url: util.baseUrl + '/api/votes',
339 | data: {
340 | title: newVoteTitle,
341 | is_private: voteTypeChoosed,
342 | content: desTextareaData,
343 | options: newVotes,
344 | images: self.data.voteImgPaths
345 | },
346 | method: 'POST',
347 | success: function(res) {
348 | if (res.statusCode === 422) {
349 | self.setData({
350 | saveBtnState: true
351 | });
352 | wx.showModal({
353 | content: '投票内容包含敏感信息;请先修改再发布',
354 | showCancel: false,
355 | confirmColor: '#7087f4'
356 | });
357 | return;
358 | }
359 | if (res.statusCode === 200) {
360 | self.setData({
361 | saveBtnState: true
362 | })
363 | wx.showToast({
364 | title: '发布成功',
365 | icon: 'success',
366 | duration: 1500,
367 | mask: true
368 | })
369 | if (self.data.voteTypeChoosed === 'T') {
370 | wx.reLaunch({
371 | url: '/pages/index/index?funType=mine'
372 | })
373 | } else {
374 | wx.reLaunch({
375 | url: '/pages/index/index?funType=all'
376 | })
377 | }
378 | }
379 | }
380 | })
381 | }
382 | })
--------------------------------------------------------------------------------
/pages/comment/comment.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "阳光投票",
3 | "navigationBarBackgroundColor": "#7087f4",
4 | "navigationBarTextStyle": "white",
5 | "backgroundTextStyle": "light"
6 | }
--------------------------------------------------------------------------------
/pages/comment/comment.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | {{desTextareaData}}
20 | 补充描述(选填,不超过120字)
21 |
22 | {{desTextareaDataLen}}/120
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | {{item.title}}
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 | 选项最少两个,最多四个
50 |
51 |
52 |
53 |
54 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
74 |
75 | {{newVoteWords}}/40
76 |
77 |
78 |
79 |
80 |
81 |
82 |
--------------------------------------------------------------------------------
/pages/comment/comment.wxss:
--------------------------------------------------------------------------------
1 | .vote-add {
2 | padding-top: 28rpx;
3 | font-family: -apple-system-font, Helvetica Neue, Helvetica, sans-serif;
4 | box-sizing: border-box;
5 | }
6 |
7 | .vote-add p {
8 | display: block;
9 | margin-bottom: 40rpx;
10 | }
11 |
12 | .vote-add p label {
13 | width: 20%;
14 | padding-right: 4%;
15 | text-align: right;
16 | }
17 |
18 | .vote-add-item {
19 | padding: 32rpx 28rpx;
20 | font-size: 28rpx;
21 | }
22 |
23 | .vote-add-item label {
24 | width: 20%;
25 | float: left;
26 | color: #515151;
27 | }
28 |
29 | .vote-add-item input,
30 | .vote-add-item radio-group {
31 | height: 60rpx;
32 | line-height: 60rpx;
33 | }
34 |
35 | .vote-add-item .label-for-input {
36 | display: inline-block;
37 | height: 60rpx;
38 | line-height: 60rpx;
39 | }
40 |
41 | .vote-add-item radio-group label {
42 | width: 180rpx;
43 | color: #333333;
44 | }
45 |
46 | .vote-add-item .vote-add-item-data {
47 | width: 80%;
48 | box-sizing: border-box;
49 | }
50 |
51 | .vote-add-item textarea {
52 | min-height: 240rpx;
53 | padding: 12rpx;
54 | border: 2rpx solid #e1e8f6;
55 | border-radius: 8rpx;
56 | }
57 |
58 | .peso-des-textarea {
59 | width: 80%;
60 | min-height: 240rpx;
61 | padding: 12rpx;
62 | color: #8a8a8a;
63 | border: 2rpx solid #e1e8f6;
64 | border-radius: 8rpx;
65 | word-break: break-all;
66 | box-sizing: border-box;
67 | }
68 |
69 | .vote-add-item .vote-option image {
70 | max-width: 100%;
71 | padding: 36rpx 0;
72 | -webkit-border-radius: 8rpx;
73 | border-radius: 8rpx;
74 | }
75 |
76 | .vote-add-item .vote-option text {
77 | display: inline-block;
78 | font-size: 32rpx;
79 | line-height: 32rpx;
80 | word-break: break-all;
81 | vertical-align: text-bottom;
82 | }
83 |
84 | .vote-item-add-mask {
85 | position: fixed;
86 | top: 0;
87 | left: 0;
88 | width: 100%;
89 | height: 100%;
90 | background-color: rgba(0, 0, 0, .4);
91 | z-index: 9999999;
92 | }
93 |
94 | .vote-item-add {
95 | position: relative;
96 | width: 84%;
97 | height: 380rpx;
98 | position: absolute;
99 | top: 50%;
100 | left: 50%;
101 | -webkit-transform: translate(-50%, -50%);
102 | transform: translate(-50%, -50%);
103 | background-color: #ffffff;
104 | }
105 |
106 | .vote-item-add-active {
107 | top: 30%;
108 | }
109 |
110 | .vote-item-add .vote-add-item-data {
111 | width: 100%;
112 | }
113 |
114 | .vote-item-add textarea {
115 | position: relative;
116 | min-height: 150rpx;
117 | padding: 20rpx;
118 | box-sizing: border-box;
119 | font-size: 28rpx;
120 | z-index: 99999999;
121 | border-bottom: 1rpx solid #e1e8f6;
122 | }
123 |
124 | .vote-item-add text {
125 | display: inline-block;
126 | margin: 12rpx;
127 | font-size: 32rpx;
128 | color: #7087f4;
129 | }
130 |
131 | .vote-item-add .fa-image {
132 | margin: 12rpx;
133 | font-size: 60rpx;
134 | color: #999999;
135 | }
136 |
137 | .vote-item-add button {
138 | width: 80%;
139 | margin-top: 30rpx;
140 | }
141 |
142 | .vote-item-add .fa-times-circle {
143 | position: absolute;
144 | top: -66rpx;
145 | right: 0rpx;
146 | font-size: 60rpx;
147 | color: #ffffff;
148 | }
149 |
150 | .vote-option-container {
151 | margin-bottom: 16px;
152 | }
153 |
154 | .vote-option {
155 | position: relative;
156 | padding: 20rpx 0 20rpx 50rpx;
157 | border-radius: 6rpx;
158 | }
159 |
160 | .vote-option .fa-minus-circle {
161 | position: absolute;
162 | top: 0;
163 | left: 0;
164 | bottom: 0;
165 | margin: auto;
166 | height: 40rpx;
167 | font-size: 40rpx;
168 | color: #ec7357;
169 | }
170 |
171 | .vote-option-content {
172 | margin-top: 2rpx;
173 | color: #707070;
174 | }
175 |
176 | .vote-add-item-data .fa-plus {
177 | margin-right: 8rpx;
178 | color: #515151;
179 | }
180 |
181 | .vote-item-add image {
182 | width: 60rpx;
183 | height: 60rpx;
184 | margin: 12rpx;
185 | border-radius: 60rpx;
186 | }
187 |
188 | .vote-add-item-data view image {
189 | max-width: 100%;
190 | margin-bottom: 24rpx;
191 | -webkit-border-radius: 12rpx;
192 | border-radius: 12rpx;
193 | }
194 |
195 | .vote-option-hover-class {
196 | background-color: #e1e8f6;
197 | border-radius: 6rpx;
198 | -webkit-transition: all ease .3s;
199 | transition: all ease .3s;
200 | }
201 |
202 | .vote-add-item .publish-btn,
203 | .confirm-add-btn {
204 | background-color: #7087f4 !important;
205 | }
206 |
207 | .vote-item-tip {
208 | display: -webkit-flex;
209 | display: flex;
210 | margin-top: 16rpx;
211 | color: #707070;
212 | }
213 |
214 | .vote-item-tip icon {
215 | margin-top: 3rpx;
216 | margin-right: 8rpx;
217 | }
218 |
219 | .vote-item-tip text {
220 | display: inline-block;
221 | }
222 |
223 | .vote-add-item-data button,
224 | .vote-add-item-data .fa-plus {
225 | color: #707070;
226 | }
227 |
228 | .vote-add-item-imgs label text {
229 | display: inline-block;
230 | font-size: 22rpx;
231 | color: #707070;
232 | }
233 |
234 | .vote-add-item-imgs image {
235 | width: 100rpx;
236 | height: 100rpx;
237 | border-radius: 8rpx;
238 | }
239 |
240 | .vote-add-item-imgs-box {
241 | display: -webkit-flex;
242 | display: flex;
243 | }
244 |
245 | .vote-add-item-imgs-box view {
246 | position: relative;
247 | margin-right: 36rpx;
248 | }
249 |
250 | .vote-add-item-imgs-box view .fa-remove {
251 | position: absolute;
252 | top: -12rpx;
253 | right: -12rpx;
254 | font-size: 36rpx;
255 | color: #d81e06;
256 | }
257 |
258 | .des-textarea-tip {
259 | margin-top: 16rpx;
260 | color: #7087f4;
261 | }
--------------------------------------------------------------------------------
/pages/index/index.js:
--------------------------------------------------------------------------------
1 | //index.js
2 | const util = require('../../utils/util.js')
3 |
4 | Page({
5 | data: {
6 | votes: [],
7 | totalPageNum: 0,
8 | currentPage: 1,
9 | bottomLineState: false,
10 | votedColor: ['#9dc8c8', '#58c9b9', '#519d9e', '#d1b6e1'],
11 | filterName: 'all',
12 | delOpState: false,
13 | pullDownState: true,
14 | voteState: true,
15 | noVoteFlag: false,
16 | pullDownRefreshState: false
17 | },
18 | onLoad: function(option) {
19 | let self = this;
20 | let funType;
21 | //首页数据初始化
22 | if (option) {
23 | funType = option.funType
24 | if (funType) {
25 | self.setData({
26 | filterName: funType
27 | })
28 | self.getVotes(funType);
29 | }
30 | } else {
31 | funType = self.data.filterName
32 | self.getVotes(funType);
33 | }
34 | },
35 | onShow: function() {
36 | let self = this;
37 | let type = self.data.filterName || 'all';
38 | //同步投票结果
39 | let targetIndex = wx.getStorageSync('voteIndex');
40 | let targetResult = wx.getStorageSync('voteResult');
41 | let optionIndex = wx.getStorageSync('optionIndex') === "" ? -1 : wx.getStorageSync('optionIndex');
42 | if (targetIndex >= 0 && optionIndex >= 0) {
43 | self.data.votes[targetIndex].data.voters_count++;
44 | self.data.votes[targetIndex].result = targetResult;
45 | self.data.votes[targetIndex].data.options[optionIndex].vote_count++;
46 | self.setData({
47 | votes: self.data.votes
48 | }, function() {
49 | //清除缓存信息
50 | wx.removeStorageSync('voteIndex');
51 | wx.removeStorageSync('voteResult');
52 | wx.removeStorageSync('optionIndex');
53 | });
54 | }
55 | },
56 | onPullDownRefresh: function() {
57 | let self = this;
58 | let filterName = self.data.filterName;
59 |
60 | self.setData({
61 | pullDownRefreshState: true,
62 | bottomLineState: false,
63 | currentPage: 1
64 | })
65 | self.getVotes(filterName);
66 | },
67 | onReachBottom: function() {
68 | let self = this;
69 | let pesoPgNo = self.data.currentPage;
70 | let filterName = self.data.filterName;
71 | pesoPgNo++;
72 | self.setData({
73 | currentPage: pesoPgNo
74 | })
75 | if (self.data.currentPage <= self.data.totalPageNum) {
76 | self.getVotes(filterName);
77 | } else {
78 | self.setData({
79 | currentPage: self.data.totalPageNum,
80 | bottomLineState: true
81 | });
82 | return
83 | }
84 | },
85 | targetToAdd: function() {
86 | wx.navigateTo({
87 | url: '/pages/comment/comment',
88 | success: function(res) {
89 | console.log(res)
90 | }
91 | })
92 | },
93 | targetToVoteDetail: function(e) {
94 | let voteId = e.currentTarget.dataset.src;
95 | let curIndex = e.currentTarget.dataset.index;
96 | let nickname = e.currentTarget.dataset.nickname;
97 | wx.setStorageSync('voteIndex', curIndex)
98 | wx.navigateTo({
99 | url: '/pages/voteDetail/voteDetail?shareFrom=index&nickname=' + nickname + '&voteId=' + voteId,
100 | success: function(res) {
101 | console.log(res)
102 | }
103 | })
104 | },
105 | onShareAppMessage: function(res) {
106 | let shareTitle = res.target.dataset.title;
107 | let nickname = res.target.dataset.nickname;
108 | let voteId = res.target.dataset.voteid;
109 | let cover;
110 | if (res.target.dataset.cover.includes('undefined')) {
111 | cover = '../../images/cover.png'
112 | } else {
113 | cover = res.target.dataset.cover
114 | }
115 | return {
116 | title: shareTitle,
117 | path: '/pages/voteDetail/voteDetail?shareFrom=share&nickname=' + nickname + '&voteId=' + voteId,
118 | imageUrl: cover,
119 | success: function(res) {
120 | wx.showToast({
121 | title: '分享成功',
122 | icon: 'success',
123 | duration: 1500,
124 | mask: true
125 | })
126 | }
127 | }
128 | },
129 | bindPreviewImage: function(e) {
130 | let self = this;
131 | let imgs = e.currentTarget.dataset.images;
132 | let finalImgs = [];
133 | imgs.forEach(function(item, index) {
134 | finalImgs[index] = util.baseUrl + item.path;
135 | })
136 | wx.previewImage({
137 | current: e.currentTarget.dataset.src,
138 | urls: finalImgs
139 | })
140 | },
141 | getVotes: function(filterName) {
142 | let self = this;
143 | wx.showNavigationBarLoading();
144 | util.request({
145 | url: util.baseUrl + '/api/votes',
146 | method: 'GET',
147 | data: {
148 | page: self.data.currentPage,
149 | filter: filterName
150 | },
151 | success: function(res) {
152 | wx.stopPullDownRefresh()
153 | wx.hideNavigationBarLoading()
154 | if (res.statusCode === 200) {
155 | if (self.data.pullDownRefreshState) {
156 | //下拉刷新
157 | self.setData({
158 | totalPageNum: res.data.meta.last_page,
159 | votes: res.data.data,
160 | pullDownRefreshState: false
161 | });
162 | } else {
163 | //上拉加载
164 | self.setData({
165 | totalPageNum: res.data.meta.last_page,
166 | votes: self.data.votes.concat(res.data.data)
167 | });
168 | }
169 | //判断votes长度是否为0
170 | if (self.data.votes.length === 0) {
171 | self.setData({
172 | noVoteFlag: true
173 | })
174 | }
175 | }
176 | },
177 | fail: function() {
178 | wx.stopPullDownRefresh()
179 | wx.hideNavigationBarLoading()
180 | wx.showToast({
181 | title: '网络异常,请稍后再试',
182 | icon: 'none',
183 | duration: 1500,
184 | mask: true
185 | })
186 | }
187 | })
188 | },
189 | onVote: function(e) {
190 | let self = this;
191 | let voteId = e.currentTarget.dataset.src;
192 | let voteIndex = e.currentTarget.dataset.vindex;
193 | let index = e.currentTarget.dataset.index;
194 | if (self.data.voteState) {
195 | self.setData({
196 | voteState: false
197 | })
198 | wx.showToast({
199 | title: '处理中,请稍后...',
200 | icon: 'none',
201 | duration: 1500,
202 | mask: true
203 | })
204 | util.request({
205 | url: util.baseUrl + '/api/options/' + voteId + '/vote',
206 | method: 'POST',
207 | success: function(res) {
208 | if (res.statusCode === 200) {
209 | self.data.votes[voteIndex].result = res.data
210 | self.data.votes[voteIndex].data.voters_count++;
211 | self.data.votes[voteIndex].data.options[index].vote_count++;
212 | self.setData({
213 | votes: self.data.votes,
214 | voteState: true
215 | })
216 | wx.hideToast()
217 | }
218 | },
219 | fail: function() {
220 | wx.showToast({
221 | title: '投票失败,请稍后再试',
222 | icon: 'none',
223 | duration: 1500,
224 | mask: true
225 | })
226 | }
227 | })
228 | } else {
229 | wx.showToast({
230 | title: '您已投票,无需再投',
231 | icon: 'none',
232 | duration: 1500,
233 | mask: true
234 | })
235 | }
236 | },
237 | getVoteListByType: function(e) {
238 | let self = this;
239 | let curName = e.currentTarget.dataset.src;
240 | if (curName) {
241 | wx.pageScrollTo({
242 | scrollTop: 0,
243 | duration: 100
244 | })
245 | self.setData({
246 | filterName: curName,
247 | currentPage: 1,
248 | bottomLineState: false,
249 | votes: []
250 | })
251 | self.getVotes(curName);
252 | }
253 | },
254 | voteOP: function(e) {
255 | let voteIndex = e.currentTarget.dataset.index;
256 | let voteId = e.currentTarget.dataset.voteid;
257 | let self = this;
258 | let delData;
259 | self.setData({
260 | //操作按钮变为选中状态;让用户区分自己所选那条
261 | delOpState: true
262 | })
263 | wx.showActionSheet({
264 | itemList: ['删除该项投票内容'],
265 | itemColor: '#d81e06',
266 | success: function(res) {
267 | if (res.tapIndex === 0) {
268 | util.request({
269 | url: util.baseUrl + '/api/votes/' + voteId,
270 | method: 'DELETE',
271 | success: function(res) {
272 | if (res.statusCode === 200) {
273 | self.data.votes.splice(voteIndex, 1)
274 | if (self.data.votes.length === 0) {
275 | self.setData({
276 | bottomLineState: false
277 | })
278 | }
279 | self.setData({
280 | votes: self.data.votes,
281 | delOpState: false
282 | })
283 | wx.showToast({
284 | title: '删除成功',
285 | icon: 'success',
286 | duration: 1500,
287 | mask: true
288 | })
289 | }
290 | }
291 | })
292 | }
293 | },
294 | fail: function(res) {
295 | self.setData({
296 | delOpState: false
297 | })
298 | }
299 | })
300 | }
301 | })
--------------------------------------------------------------------------------
/pages/index/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "阳光投票",
3 | "navigationBarBackgroundColor": "#7087f4",
4 | "navigationBarTextStyle": "white",
5 | "backgroundTextStyle": "dark",
6 | "enablePullDownRefresh": true,
7 | "backgroundColor": "#e1e8f6"
8 | }
--------------------------------------------------------------------------------
/pages/index/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 全部
6 | 最热
7 | 我的
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | {{vote.data.user.nick_name}}
20 | {{vote.time_for_humans}}
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 | {{vote.data.title}}
47 | {{vote.data.content}}
48 |
49 |
50 |
51 |
52 |
53 | {{item.title}}
54 | {{filter.numberToFix(item.vote_count/vote.data.voters_count*100)}}%
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 | {{item.title}}
65 |
66 |
67 | {{item.title}}
68 |
69 |
70 |
71 |
72 |
73 |
74 | {{vote.data.voters_count}}
75 |
77 |
78 |
79 |
80 | 这是底部,已无更多内容
81 |
82 |
83 |
86 |
87 |
88 | 创建投票
89 |
90 |
--------------------------------------------------------------------------------
/pages/index/index.wxss:
--------------------------------------------------------------------------------
1 | page {
2 | background-color: #e1e8f6;
3 | }
4 |
5 | .vote-item {
6 | margin-bottom: 16rpx;
7 | background-color: #ffffff;
8 | box-shadow: 0 2rpx 2rpx rgba(0, 0, 0, 0.06), 0 -2rpx 2rpx rgba(0, 0, 0, 0.06);
9 | }
10 |
11 | .vote-item-hd {
12 | position: relative;
13 | display: -webkit-flex;
14 | display: flex;
15 | align-items: center;
16 | padding: 20rpx 0;
17 | font-size: 20rpx;
18 | }
19 |
20 | .vote-item-hd .nickname {
21 | font-size: 24rpx;
22 | font-weight: 500;
23 | color: #7087f4;
24 | }
25 |
26 | .vote-item-hd image {
27 | width: 64rpx;
28 | height: 64rpx;
29 | margin: 0 16rpx 0 28rpx;
30 | border-radius: 64rpx;
31 | }
32 |
33 | .vote-item-hd-info {
34 | color: #707070;
35 | height: 64rpx;
36 | line-height: 1;
37 | display: flex;
38 | flex-direction: column;
39 | justify-content: space-around;
40 | }
41 |
42 | .vote-item-hd-op {
43 | display: flex;
44 | display: -webkit-flex;
45 | align-items: center;
46 | position: absolute;
47 | top: 0;
48 | right: 28rpx;
49 | bottom: 0;
50 | }
51 |
52 | .vote-item-hd-op .fa-circle {
53 | margin-left: 6rpx;
54 | font-size: 10rpx;
55 | color: #8a8a8a;
56 | }
57 |
58 | .vote-item-hd-op-hover .fa-circle {
59 | color: #7087f4;
60 | }
61 |
62 | .vote-item-con {
63 | font-size: 28rpx;
64 | }
65 |
66 | .vote-item-con image {
67 | width: 100%;
68 | }
69 |
70 | .vote-item-con-hd {
71 | padding-bottom: 18rpx;
72 | font-size: 24rpx;
73 | color: #8a8a8a;
74 | }
75 |
76 | .vote-title {
77 | margin-top: 14rpx;
78 | margin-bottom: 8rpx;
79 | padding: 0 28rpx;
80 | font-size: 32rpx;
81 | color: #515151;
82 | }
83 |
84 | .vote-des-content {
85 | padding: 0 28rpx;
86 | font-size: 28rpx;
87 | }
88 |
89 | .vote-item-data {
90 | position: relative;
91 | width: 100%;
92 | padding: 16rpx 0;
93 | text-align: center;
94 | box-sizing: border-box;
95 | color: #7087f4;
96 | -webkit-transition: all ease-in-out .3s;
97 | transition: all ease-in-out .3s;
98 | }
99 |
100 | .vote-item-data .progress-state {
101 | position: absolute;
102 | top: 0;
103 | left: 0;
104 | display: inline-block;
105 | height: 100%;
106 | opacity: .6;
107 | }
108 |
109 | .vote-item-data-percent {
110 | display: table;
111 | position: absolute;
112 | top: 0;
113 | right: 28rpx;
114 | bottom: 0;
115 | margin: auto;
116 | vertical-align: center;
117 | color: #7087f4;
118 | }
119 |
120 | .vote-item-data-voted {
121 | padding-right: 100rpx;
122 | padding-left: 28rpx;
123 | text-align: left;
124 | color: #515151;
125 | -webkit-transition: 2s width ease-in-out;
126 | transition: 2s width ease-in-out;
127 | }
128 |
129 | .vote-item-data-active {
130 | background-color: #e5e5e5 !important;
131 | }
132 |
133 | .vote-item-ft {
134 | -webkit-display: flex;
135 | display: flex;
136 | justify-content: space-between;
137 | align-items: center;
138 | padding: 20rpx 28rpx;
139 | box-sizing: border-box;
140 | overflow: hidden;
141 | }
142 |
143 | .vote-item-ft button {
144 | margin: 0;
145 | padding: 0;
146 | border: 0;
147 | line-height: 0;
148 | font-size: 36rpx;
149 | color: #707070;
150 | }
151 |
152 | .vote-item-ft .fa-align-left {
153 | font-size: 36rpx;
154 | color: #707070;
155 | }
156 |
157 | .fa-align-left text {
158 | margin-left: 8rpx;
159 | font-size: 24rpx;
160 | vertical-align: 4rpx;
161 | }
162 |
163 | .view-container {
164 | position: relative;
165 | padding-bottom: 86rpx;
166 | background: #e1e8f6;
167 | }
168 |
169 | .view-container-active {
170 | padding: 104rpx 0 86rpx;
171 | }
172 |
173 | .votes-list-tab {
174 | display: -webkit-flex;
175 | display: flex;
176 | height: 84rpx;
177 | margin-bottom: 16rpx;
178 | line-height: 84rpx;
179 | z-index: 9999;
180 | background-color: #ffffff;
181 | box-shadow: 0 2rpx 2rpx rgba(0, 0, 0, 0.1);
182 | }
183 |
184 | .votes-list-tab-active {
185 | position: fixed;
186 | top: 0;
187 | left: 0;
188 | width: 100%;
189 | height: 84rpx;
190 | line-height: 84rpx;
191 | display: -webkit-flex;
192 | display: flex;
193 | z-index: 9999;
194 | background-color: #ffffff;
195 | box-shadow: 0 2rpx 2rpx rgba(0, 0, 0, 0.1);
196 | }
197 |
198 | .votes-list-tab .tab {
199 | flex: 1;
200 | margin: 0 36rpx;
201 | font-size: 28rpx;
202 | text-align: center;
203 | background-color: #ffffff;
204 | color: #7087f4;
205 | box-sizing: border-box;
206 | }
207 |
208 | .votes-list-tab .tab.active {
209 | border-bottom: 4rpx solid #7087f4;
210 | }
211 |
212 | .vote-add-btn,
213 | .feedback-btn {
214 | position: fixed;
215 | bottom: 0;
216 | right: 0;
217 | width: 76%;
218 | height: 96rpx;
219 | font-size: 32rpx;
220 | line-height: 96rpx;
221 | text-align: center;
222 | color: #7087f4;
223 | background-color: #ffffff;
224 | box-shadow: 0 -2rpx 2rpx rgba(0, 0, 0, 0.1);
225 | }
226 |
227 | .feedback-btn {
228 | left: 0;
229 | width: 24%;
230 | color: #707070;
231 | background-color: #f1f1f1;
232 | }
233 |
234 | .feedback-btn button {
235 | width: 100%;
236 | height: 100%;
237 | display: -webkit-flex;
238 | display: flex;
239 | align-items: center;
240 | font-size: 30rpx !important;
241 | color: #707070;
242 | border: 0 !important;
243 | border-radius: 0;
244 | background-color: #f4f4f4;
245 | }
246 |
247 | .feedback-btn button::after {
248 | border-radius: 0;
249 | }
250 |
251 | .vote-add-btn .fa-plus-circle,
252 | .feedback-btn button .fa-question-circle {
253 | margin-right: 10rpx;
254 | font-size: 30rpx;
255 | }
256 |
257 | .no-more-tip {
258 | padding-bottom: 20rpx;
259 | font-size: 24rpx;
260 | color: #707070;
261 | text-align: center;
262 | }
263 |
264 | .no-vote-tip button {
265 | position: absolute;
266 | top: 640rpx;
267 | right: 0;
268 | left: 0;
269 | margin: auto;
270 | width: 412rpx;
271 | height: 84rpx;
272 | line-height: 84rpx;
273 | background-color: #7087f4;
274 | }
275 |
276 | .vote-imgs {
277 | display: -webkit-flex;
278 | display: flex;
279 | justify-content: center;
280 | align-items: center;
281 | margin-bottom: 16rpx;
282 | }
283 |
284 | .vote-img-box {
285 | flex: 1;
286 | }
287 |
288 | .vote-imgs-more {
289 | display: block;
290 | }
--------------------------------------------------------------------------------
/pages/vote/vote.js:
--------------------------------------------------------------------------------
1 | //logs.js
2 | const util = require('../../utils/util.js')
3 |
4 | Page({
5 | data: {
6 | logs: []
7 | },
8 | onLoad: function () {
9 | this.setData({
10 | logs: (wx.getStorageSync('logs') || []).map(log => {
11 | return util.formatTime(new Date(log))
12 | })
13 | })
14 | }
15 | })
16 |
--------------------------------------------------------------------------------
/pages/vote/vote.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "阳光投票",
3 | "navigationBarBackgroundColor": "#7087f4",
4 | "navigationBarTextStyle": "white",
5 | "backgroundTextStyle": "light",
6 | "enablePullDownRefresh": false
7 | }
--------------------------------------------------------------------------------
/pages/vote/vote.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{index + 1}}. {{log}}
5 |
6 |
7 |
--------------------------------------------------------------------------------
/pages/vote/vote.wxss:
--------------------------------------------------------------------------------
1 | .log-list {
2 | display: flex;
3 | flex-direction: column;
4 | padding: 40rpx;
5 | }
6 | .log-item {
7 | margin: 10rpx;
8 | }
9 |
--------------------------------------------------------------------------------
/pages/voteDetail/voteDetail.js:
--------------------------------------------------------------------------------
1 | const util = require('../../utils/util.js')
2 | Page({
3 | data: {
4 | voteTitle: '',
5 | voteContent: '',
6 | voteImgs: '',
7 | voteOptions: '',
8 | voterCount: 0,
9 | votedColor: ['#9dc8c8', '#58c9b9', '#519d9e', '#d1b6e1'],
10 | createTime: '',
11 | voteResult: [],
12 | voterDetails: '',
13 | voteTitle: '',
14 | voteId: '',
15 | shareFrom: '',
16 | nickname: ''
17 | },
18 | onLoad: function(option) {
19 | let self = this;
20 | let voteId, shareFrom, nickname;
21 | if (option) {
22 | voteId = option.voteId
23 | shareFrom = option.shareFrom
24 | nickname = option.nickname
25 | } else {
26 | voteId = self.data.voteId
27 | shareFrom = self.data.shareFrom
28 | nickname = self.data.nickname
29 | }
30 | if (voteId || shareFrom || nickname) {
31 | self.setData({
32 | voteId: voteId,
33 | shareFrom: shareFrom,
34 | nickname: nickname
35 | })
36 | }
37 | util.request({
38 | url: util.baseUrl + '/api/votes/' + voteId,
39 | method: 'GET',
40 | success: function(res) {
41 | let finalVoteImgs = [];
42 | if (res.data.data.images.length > 0) {
43 | res.data.data.images.forEach(function(item, index) {
44 | finalVoteImgs[index] = util.baseUrl + item.path;
45 | })
46 | }
47 | if (res.statusCode === 200) {
48 | self.setData({
49 | voteTitle: res.data.data.title,
50 | voteContent: res.data.data.content,
51 | voteImgs: finalVoteImgs,
52 | voteOptions: res.data.data.options,
53 | voterCount: res.data.data.voters_count,
54 | createTime: res.data.time_for_humans
55 | })
56 | if (res.data.result) {
57 | self.setData({
58 | voteResult: res.data.result,
59 | });
60 | }
61 | //获取投票头像列表
62 | self.getVoterList(self.data.voteId);
63 | wx.stopPullDownRefresh()
64 | wx.hideNavigationBarLoading()
65 | }
66 | },
67 | fail: function(res) {
68 | wx.showToast({
69 | title: '数据请求失败,请稍后再试',
70 | icon: 'none',
71 | duration: 1500,
72 | mask: true
73 | })
74 | }
75 | })
76 | },
77 | onPullDownRefresh: function() {
78 | let self = this;
79 | wx.showNavigationBarLoading()
80 | self.onLoad();
81 | },
82 | bindPreviewImage: function(e) {
83 | let self = this;
84 | wx.previewImage({
85 | current: e.currentTarget.dataset.src,
86 | urls: self.data.voteImgs
87 | })
88 | },
89 | onVote: function(e) {
90 | let self = this;
91 | let voteId = e.currentTarget.dataset.id;
92 | let optionIndex = e.currentTarget.dataset.index;
93 | console.log(optionIndex);
94 | wx.showToast({
95 | title: '处理中,请稍后...',
96 | icon: 'none',
97 | duration: 1500,
98 | mask: true
99 | })
100 | util.request({
101 | url: util.baseUrl + '/api/options/' + voteId + '/vote',
102 | method: 'POST',
103 | success: function(res) {
104 | if (res.statusCode === 200) {
105 | self.data.voterCount++;
106 | self.setData({
107 | voteResult: res.data.data,
108 | voterCount: self.data.voterCount
109 | });
110 | //投票结果缓存到本地
111 | wx.setStorage({
112 | key: 'optionIndex',
113 | data: optionIndex
114 | })
115 | wx.setStorage({
116 | key: 'voteResult',
117 | data: res.data.data
118 | });
119 | //获取投票头像列表
120 | self.getVoterList(self.data.voteId);
121 | wx.hideToast()
122 | }
123 | },
124 | fail: function() {
125 | wx.showToast({
126 | title: '投票失败,请稍后再试',
127 | icon: 'none',
128 | duration: 1500,
129 | mask: true
130 | })
131 | }
132 | })
133 | },
134 | getVoterList: function(voteId) {
135 | let self = this;
136 | util.request({
137 | url: util.baseUrl + '/api/votes/' + voteId + '/voters',
138 | method: 'GET',
139 | success: function(res) {
140 | if (res.statusCode === 200) {
141 | self.setData({
142 | voterDetails: res.data.data.options,
143 | voterTitle: res.data.data.title
144 | })
145 | wx.hideLoading();
146 | wx.stopPullDownRefresh()
147 | wx.hideNavigationBarLoading()
148 | }
149 | },
150 | fail: function(res) {
151 | wx.showToast({
152 | title: '数据请求失败,请稍后再试',
153 | icon: 'none',
154 | duration: 1500,
155 | mask: true
156 | })
157 | }
158 | })
159 | },
160 | targetToIndex: function() {
161 | wx.reLaunch({
162 | url: '/pages/index/index?funType=all',
163 | success: function(res) {
164 | console.log(res)
165 | }
166 | })
167 | },
168 | onShareAppMessage: function(res) {
169 | let self = this;
170 | let title = self.data.voterTitle;
171 | let cover = self.data.voteImgs[0] ? self.data.voteImgs[0] : '../../images/cover.png'
172 | return {
173 | title: title,
174 | path: '/pages/voteDetail/voteDetail?shareFrom=share&voteId=' + self.data.voteId,
175 | imageUrl: cover,
176 | success: function(res) {
177 | wx.showToast({
178 | title: '分享成功',
179 | icon: 'success',
180 | duration: 1500,
181 | mask: true
182 | })
183 | },
184 | fail: function(res) {
185 | // 转发失败
186 | }
187 | }
188 | }
189 | })
--------------------------------------------------------------------------------
/pages/voteDetail/voteDetail.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "阳光投票",
3 | "navigationBarBackgroundColor": "#7087f4",
4 | "navigationBarTextStyle": "white",
5 | "backgroundTextStyle": "light",
6 | "enablePullDownRefresh": true,
7 | "backgroundColor": "#7087f4"
8 | }
--------------------------------------------------------------------------------
/pages/voteDetail/voteDetail.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | {{voteTitle}}
23 | {{voteContent}}
24 | {{createTime}}发布
25 |
26 |
27 |
28 |
29 |
30 |
31 | 投票选项
32 |
33 | {{item.title}}
34 | {{item.vote_count}}票
35 |
36 |
37 |
38 |
39 |
40 |
41 | 投票选项
42 |
43 | {{item.title}}
44 |
45 |
46 | {{item.title}}
47 |
48 |
49 |
50 |
51 |
52 | 投票结果
53 |
54 | 选项{{voteIndex+1}}:{{voteItem.title}}
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 | 暂无人投票
63 |
64 |
65 |
66 |
67 |
68 |
69 | 去首页逛逛
70 |
71 |
72 |
73 |
74 |
--------------------------------------------------------------------------------
/pages/voteDetail/voteDetail.wxss:
--------------------------------------------------------------------------------
1 | page {
2 | background-color: #e1e8f6;
3 | }
4 |
5 | .vote-detail {
6 | padding-bottom: 112rpx;
7 | }
8 |
9 | .vote-detail-hd-info {
10 | padding: 28rpx;
11 | font-size: 28rpx;
12 | background-color: #ffffff;
13 | box-shadow: 0 2rpx 2rpx rgba(0, 0, 0, 0.1);
14 | }
15 |
16 | .vote-title {
17 | font-size: 40rpx;
18 | margin-bottom: 12rpx;
19 | color: #2c2c2c;
20 | }
21 |
22 | .vote-content {
23 | margin-bottom: 12rpx;
24 | font-size: 32rpx;
25 | }
26 |
27 | .create-time .fa-clock-o {
28 | margin-right: 6rpx;
29 | font-size: 32rpx;
30 | vertical-align: -1rpx;
31 | }
32 |
33 | .vote-imgs image {
34 | display: block;
35 | width: 100%;
36 | }
37 |
38 | .vote-detail-con {
39 | margin-top: 16rpx;
40 | }
41 |
42 | .vote-option-percent {
43 | display: table;
44 | position: absolute;
45 | top: 0;
46 | right: 28rpx;
47 | bottom: 0;
48 | margin: auto;
49 | color: #7087f4;
50 | }
51 |
52 | .vote-option {
53 | position: relative;
54 | box-sizing: border-box;
55 | padding: 28rpx;
56 | font-size: 32rpx;
57 | text-align: center;
58 | color: #7087f4;
59 | -webkit-transition: 2s width ease-in-out;
60 | transition: 2s width ease-in-out;
61 | background-color: #ffffff;
62 | margin: 16rpx 0;
63 | box-shadow: 0 2rpx 2rpx rgba(0, 0, 0, 0.06), 0 -2rpx 2rpx rgba(0, 0, 0, 0.06);
64 | }
65 |
66 | .vote-option-voted {
67 | top: 0;
68 | left: 0;
69 | height: 100%;
70 | padding-left: 28rpx;
71 | font-size: 28rpx;
72 | text-align: left;
73 | color: #707070;
74 | }
75 |
76 | .vote-progress-state {
77 | position: absolute;
78 | top: 0;
79 | left: 0;
80 | height: 100%;
81 | opacity: .6;
82 | }
83 |
84 | .vote-option-con {
85 | display: inline-block;
86 | }
87 |
88 | .vote-option-hover {
89 | background-color: #e5e5e5;
90 | }
91 |
92 | .voter-list {
93 | margin-top: 16rpx;
94 | font-size: 28rpx;
95 | color: #707070;
96 | }
97 |
98 | .voter-title {
99 | padding: 20rpx 0;
100 | font-size: 28rpx;
101 | color: #7087f4;
102 | }
103 |
104 | .voter-item {
105 | padding: 0 28rpx;
106 | margin-bottom: 16rpx;
107 | background-color: #ffffff;
108 | box-shadow: 0 2rpx 2rpx rgba(0, 0, 0, 0.06), 0 -2rpx 2rpx rgba(0, 0, 0, 0.06);
109 | }
110 |
111 | .voter-item image {
112 | width: 60rpx;
113 | height: 60rpx;
114 | margin: 18rpx;
115 | border-radius: 60rpx;
116 | }
117 |
118 | .voter-img-list {
119 | display: -webkit-flex;
120 | display: flex;
121 | flex-wrap: wrap;
122 | }
123 |
124 | .no-data-tip {
125 | display: block;
126 | padding: 28rpx 0;
127 | text-align: center;
128 | }
129 |
130 | .vote-detail-ft {
131 | position: fixed;
132 | bottom: 0;
133 | left: 0;
134 | width: 100%;
135 | height: 96rpx;
136 | font-size: 32rpx;
137 | line-height: 96rpx;
138 | text-align: center;
139 | color: #7087f4;
140 | background-color: #ffffff;
141 | box-shadow: 0 -2rpx 2rpx rgba(0, 0, 0, 0.1);
142 | }
143 |
144 | .vote-detail-ft .fa-home,
145 | .vote-detail-ft button .fa-retweet {
146 | margin-right: 10rpx;
147 | font-size: 30rpx;
148 | }
149 |
150 | .vote-detail-ft button {
151 | font-size: 32rpx !important;
152 | color: #7087f4 !important;
153 | border: 0;
154 | line-height: 96rpx;
155 | }
156 |
157 | .view-option-box-title {
158 | margin: 36rpx 28rpx;
159 | padding-left: 14rpx;
160 | font-size: 30rpx !important;
161 | font-weight: bold;
162 | color: #707070;
163 | border-left: 8rpx solid #7087f4;
164 | }
165 |
166 | .vote-imgs {
167 | display: -webkit-flex;
168 | display: flex;
169 | }
170 |
171 | .vote-img-box {
172 | flex: 1;
173 | }
174 |
175 | .vote-imgs-more {
176 | display: block;
177 | }
--------------------------------------------------------------------------------
/pages/voterDetail/voterDetail.js:
--------------------------------------------------------------------------------
1 | const util = require('../../utils/util.js')
2 | Page({
3 | data: {
4 | voteDetails: '',
5 | voteId: '',
6 | voteTitle: ''
7 | },
8 | onLoad: function(option) {
9 | let self = this;
10 | let voteId;
11 | if (option) {
12 | voteId = option.voteId
13 | } else {
14 | voteId = self.data.voteId
15 | }
16 | if (voteId) {
17 | self.setData({
18 | voteId: voteId
19 | })
20 | }
21 | util.request({
22 | url: util.baseUrl + '/api/votes/' + voteId + '/voters',
23 | method: 'GET',
24 | success: function(res) {
25 | if (res.statusCode === 200) {
26 | self.setData({
27 | voteDetails: res.data.data,
28 | voteTitle: res.data.data.title
29 | })
30 | wx.stopPullDownRefresh()
31 | wx.hideNavigationBarLoading()
32 | }
33 | },
34 | fail: function(res) {
35 | console.log(res)
36 | wx.showToast({
37 | title: '数据请求失败,请稍后再试',
38 | icon: 'none',
39 | duration: 1500,
40 | mask: true
41 | })
42 | }
43 | })
44 | },
45 | onPullDownRefresh: function() {
46 | let self = this;
47 | wx.showNavigationBarLoading()
48 | self.onLoad();
49 | }
50 | })
51 |
--------------------------------------------------------------------------------
/pages/voterDetail/voterDetail.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "投票详情",
3 | "navigationBarBackgroundColor": "#7087f4",
4 | "navigationBarTextStyle": "white",
5 | "backgroundTextStyle": "light",
6 | "enablePullDownRefresh": true,
7 | "backgroundColor": "#7087f4"
8 | }
--------------------------------------------------------------------------------
/pages/voterDetail/voterDetail.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 选项{{index+1}}:{{voteItem.title}}
4 |
5 |
6 |
7 |
8 |
9 | 此项暂无投票
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/pages/voterDetail/voterDetail.wxss:
--------------------------------------------------------------------------------
1 | @import "./../comment/comment.wxss";
2 | page {
3 | background-color: #e1e8f6;
4 | }
5 |
6 | .vote-detail-item {
7 | margin-bottom: 20rpx;
8 | }
9 |
10 | .vote-detail-item-hd {
11 | padding: 28rpx;
12 | font-size: 28rpx;
13 | color: #515151;
14 | background-color: #ffffff;
15 | }
16 |
17 | .vote-detail-item-con {
18 | position: relative;
19 | display: -webkit-flex;
20 | display: flex;
21 | flex-wrap: wrap;
22 | padding: 28rpx 0;
23 | }
24 |
25 | .vote-detail-item-con::before {
26 | content: '';
27 | position: absolute;
28 | top: -12rpx;
29 | left: 20rpx;
30 | border-style: solid;
31 | border-width: 0 14rpx 20rpx 14rpx;
32 | border-color: transparent transparent #e1e8f6 transparent;
33 | }
34 |
35 | .vote-detail-item-con image {
36 | width: 60rpx;
37 | height: 60rpx;
38 | margin: 18rpx;
39 | border-radius: 60rpx;
40 | }
41 |
42 | .vote-option-tip {
43 | margin-right: 12rpx;
44 | color: #7087f4;
45 | }
46 |
47 | .no-votes-tip {
48 | width: 100%;
49 | height: 100rpx;
50 | line-height: 100rpx;
51 | text-align: center;
52 | font-size: 28rpx;
53 | color: #8a8a8a;
54 | }
--------------------------------------------------------------------------------
/sitemap.json:
--------------------------------------------------------------------------------
1 | {
2 | "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html",
3 | "rules": [{
4 | "action": "allow",
5 | "page": "*"
6 | }]
7 | }
--------------------------------------------------------------------------------
/utils/numbertofix.wxs:
--------------------------------------------------------------------------------
1 | var filter = {
2 | numberToFix: function (value) {
3 | return value.toFixed(1)
4 | },
5 | delWithPath:function(path){
6 | return 'https://minivote.sun309.com'+path
7 | }
8 | }
9 | module.exports = {
10 | numberToFix: filter.numberToFix,
11 | delWithPath:filter.delWithPath
12 | }
--------------------------------------------------------------------------------
/utils/util.js:
--------------------------------------------------------------------------------
1 | const config = require('../config.js') //引入配置文件
2 | const formatTime = date => {
3 | const year = date.getFullYear()
4 | const month = date.getMonth() + 1
5 | const day = date.getDate()
6 | const hour = date.getHours()
7 | const minute = date.getMinutes()
8 | const second = date.getSeconds()
9 |
10 | return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
11 | }
12 |
13 | const formatNumber = n => {
14 | n = n.toString()
15 | return n[1] ? n : '0' + n
16 | }
17 | const numberToFixed = n => {
18 | n = n.toFixed(2) * 100 + '%'
19 | return n
20 | }
21 |
22 | const baseUrl = config.getBaseUrl; //获取接口URL
23 | const app = getApp();
24 |
25 | const request = (object) => {
26 | let token,
27 | authorization,
28 | _header,
29 | _success = object.success,
30 | hasTokenOnStorage = true
31 |
32 | try {
33 | authorization = wx.getStorageSync('authorization');
34 | hasTokenOnStorage = !!authorization
35 | } catch (e) {
36 | hasTokenOnStorage = false
37 | }
38 |
39 | if (!hasTokenOnStorage) return
40 |
41 | _header = {
42 | 'accept': 'application/json',
43 | Authorization: authorization
44 | }
45 | object.header = object.header || _header
46 |
47 | object.success = res => {
48 | token = res.header.authorization || res.header.Authorization
49 | for (let i in res.header) {
50 | console.log(i + " === " + res.header[i])
51 | }
52 | console.log("token:::::" + token)
53 | token && wx.setStorageSync('authorization', token)
54 | console.log("res.statusCode:::::" + res.statusCode)
55 | if (res.statusCode == 401 || res.statusCode == 400) {
56 | wx.showModal({
57 | content: '登录信息已过期,请重新授权',
58 | showCancel: false,
59 | confirmColor: '#7087f4',
60 | success: function(res) {
61 | if (res.confirm) {
62 | app.getUserInfo()
63 | }
64 | }
65 | })
66 | }
67 |
68 | _success && _success(res)
69 | }
70 |
71 | wx.request(object)
72 | }
73 |
74 | module.exports = {
75 | formatTime,
76 | baseUrl,
77 | numberToFixed,
78 | request
79 | }
--------------------------------------------------------------------------------