zjxpcyc vor 6 Jahren
Ursprung
Commit
5feca0f25e
9 geänderte Dateien mit 3334 neuen und 3453 gelöschten Zeilen
  1. 1
    1
      config/index.js
  2. 2
    0
      index.html
  3. 2857
    2857
      package-lock.json
  4. 1
    0
      src/main.js
  5. 0
    566
      src/pages/index.vue
  6. 255
    0
      src/pages/page1.vue
  7. 199
    27
      src/pages/page2.vue
  8. 2
    2
      src/router/index.js
  9. 17
    0
      src/util/polyfill.js

+ 1
- 1
config/index.js Datei anzeigen

@@ -58,7 +58,7 @@ module.exports = {
58 58
     // Paths
59 59
     assetsRoot: path.resolve(__dirname, '../dist'),
60 60
     assetsSubDirectory: 'static',
61
-    assetsPublicPath: '/',
61
+    assetsPublicPath: './',
62 62
 
63 63
     /**
64 64
      * Source Maps

+ 2
- 0
index.html Datei anzeigen

@@ -4,6 +4,8 @@
4 4
     <meta charset="utf-8">
5 5
     <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" />
6 6
     <link rel="stylesheet" href="//at.alicdn.com/t/font_948990_7dbjfb2d5yb.css">
7
+    <script src="http://wechatfe.github.io/vconsole/lib/vconsole.min.js?v=3.3.0"></script>
8
+    <script>new VConsole();</script>
7 9
     <title>迎宾系统</title>
8 10
   </head>
9 11
   <body>

+ 2857
- 2857
package-lock.json
Datei-Diff unterdrückt, da er zu groß ist
Datei anzeigen


+ 1
- 0
src/main.js Datei anzeigen

@@ -7,6 +7,7 @@ import store from './store'
7 7
 import Vant from 'vant'
8 8
 import 'vant/lib/index.css'
9 9
 import toolClass from './util/util'
10
+import './util/polyfill'
10 11
 
11 12
 Vue.use(Vant)
12 13
 

+ 0
- 566
src/pages/index.vue Datei anzeigen

@@ -1,566 +0,0 @@
1
-<template>
2
-  <div class="projectIndex">
3
-    <img src="../assets/images/bg.jpg" class="centerLabel cover bg" alt>
4
-    <div class="content flex-h">
5
-      <div class="left flex-v">
6
-        <div class="weather">
7
-          <div class="date flex-h">
8
-            <span>{{currentDate}}</span>
9
-            <span class="flex-item">{{currentWeek}}</span>
10
-            <span>农历{{currentChineseDate}}</span>
11
-          </div>
12
-          <div class="weatherDetail flex-h">
13
-            <div class="imgData" v-if="weatherDetail">
14
-              <img :src="weatherIcon(weatherDetail.dayweather)" width="100%" alt>
15
-              <span>{{tempRange}}</span>
16
-            </div>
17
-            <div class="flex-item">
18
-              <div v-if="weatherDetail">
19
-                <span>今日 {{ weatherDetail.dayweather }}</span>
20
-                <ul>
21
-                  <li>
22
-                    <span>白天</span>
23
-                    <span>{{weatherDetail.daywind}} 风 {{weatherDetail.daypower}}</span>
24
-                  </li>
25
-                  <li>
26
-                    <span>晚上</span>
27
-                    <span>{{weatherDetail.nightwind}} 风 {{weatherDetail.nightpower}}</span>
28
-                  </li>
29
-                </ul>
30
-              </div>
31
-            </div>
32
-          </div>
33
-        </div>
34
-        <div class="flex-item">
35
-          <div>
36
-            <div class="centerLabel notice">
37
-              <span v-html="(showNew.content || '').replace(/\r\n/g, '<br/>').replace(/\n/g, '<br/>').replace(/\s/g, ' ')">
38
-              </span>
39
-              <div>
40
-                <span>{{showNew.publisher}}</span>
41
-                <span>{{FormatDate(showNew.publishDate, 'yyyy年MM月dd日')}}</span>
42
-              </div>
43
-            </div>
44
-          </div>
45
-        </div>
46
-      </div>
47
-      <div class="flex-item">
48
-        <div :hidden="!showSlide">
49
-          <!-- <swiper :options="swiperOption" ref="mySwiper">
50
-            <swiper-slide class="swiper-slide" v-for="(item, index) in 1" :key="index">
51
-              <img
52
-                class="centerLabel cover"
53
-                src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1550835899076&di=3f786b46cffb6956608e66421b2ec859&imgtype=0&src=http%3A%2F%2Fimgsrc.baidu.com%2Fimgad%2Fpic%2Fitem%2Fe4dde71190ef76c66c3378239716fdfaae5167d1.jpg"
54
-                alt
55
-              >
56
-            </swiper-slide>
57
-          </swiper> -->
58
-          <img
59
-            v-if="showPage.showType === 'image'"
60
-            class="centerLabel cover"
61
-            :src="'api' + showPage.showContent"
62
-            alt
63
-          >
64
-          <video v-if="showPage.showType === 'video'" width="100%" height="100%" controls="controls" autoplay loop muted>
65
-            <source :src="'api' + showPage.showContent" type="video/mp4" />
66
-          </video>
67
-        </div>
68
-        <div :hidden="showSlide">
69
-          <ul class="centerLabel userList">
70
-            <li v-for="(item, index) in userList" :key="index" :class="{'active': item.show}">
71
-              <span>{{item.firstName}}</span>
72
-              <span>{{item.words}}</span>
73
-            </li>
74
-          </ul>
75
-        </div>
76
-      </div>
77
-    </div>
78
-    <audio :src="audioSrc" autoplay :style="{ width: '1px', height: '1px' }" ></audio>
79
-  </div>
80
-</template>
81
-
82
-<script>
83
-import { createNamespacedHelpers } from 'vuex'
84
-import 'swiper/dist/css/swiper.css'
85
-import { swiper, swiperSlide } from 'vue-awesome-swiper'
86
-import solarLunar from 'solarLunar'
87
-const { mapState: mapUserState, mapActions: mapUserActions } = createNamespacedHelpers('user')
88
-
89
-const { mapState: mapPageState, mapActions: mapPageActions } = createNamespacedHelpers('page')
90
-
91
-const { mapState: mapNewsState, mapActions: mapNewsActions } = createNamespacedHelpers('news')
92
-export default {
93
-  name: 'projectIndex',
94
-  data () {
95
-    return {
96
-      userList: [],
97
-      currentWeek: '周',
98
-      currentTime: '00:00:00',
99
-      currentDate: 'xx年xx月xx日',
100
-      currentChineseDate: 'xx月xx日',
101
-      showSlide: true,
102
-      currentTimeTamp: Date.now(),
103
-      ChineseDate: null,
104
-      activeIndex: 0,
105
-      timer: null,
106
-      timeNum: 0,
107
-      swiperOption: {
108
-        loop: true,
109
-        speed: 1000,
110
-        autoplay: {
111
-          delay: 6000,
112
-          disableOnInteraction: false
113
-        }
114
-      },
115
-      num: 1,
116
-      audioSrc: ''
117
-    }
118
-  },
119
-  computed: {
120
-    ...mapUserState({
121
-      weatherInfo: x => x.weatherInfo // 天气信息
122
-    }),
123
-    ...mapPageState({
124
-      pages: x => x.pages
125
-    }),
126
-    ...mapNewsState({
127
-      news: x => x.news
128
-    }),
129
-    showNew () {
130
-      return ((this.news.data || {}).records || []).filter(x => x.status === 1)[0] || {}
131
-    },
132
-    showPage () {
133
-      return ((this.pages.data || {}).records || []).filter(x => x.status === 1)[0] || {}
134
-    },
135
-    mySwiper () {
136
-      return this.$refs.mySwiper.swiper
137
-    },
138
-    isDay () {
139
-      return new Date(this.currentTimeTamp).getHours() <= 17 && new Date(this.currentTimeTamp).getHours() >= 6
140
-    },
141
-    weatherDetail () {
142
-      return this.weatherInfo.forecasts[0].casts[0]
143
-    },
144
-    tempRange () {
145
-      if (!this.weatherDetail) return ''
146
-      let min, max
147
-
148
-      // 这么复杂是为了避免 eslint 错误
149
-      const f = () => this.weatherDetail.daytemp > this.weatherDetail.nighttemp
150
-        ? ((min = this.weatherDetail.nighttemp) | (max = this.weatherDetail.daytemp))
151
-        : ((max = this.weatherDetail.nighttemp) | (min = this.weatherDetail.daytemp))
152
-      f()
153
-
154
-      return `${min}℃ ~ ${max}℃`
155
-    }
156
-  },
157
-  components: {
158
-    swiper,
159
-    swiperSlide
160
-  },
161
-  created () {
162
-    this.init()
163
-    window.setInterval(() => {
164
-      this.init()
165
-    }, 1000)
166
-    this.getInitData()
167
-    window.setInterval(() => {
168
-      this.getInitData()
169
-    }, 1000 * 60 * 60)
170
-    this.getPersonList()
171
-  },
172
-  mounted () {
173
-    this.$nextTick(() => {
174
-    })
175
-  },
176
-  methods: {
177
-    ...mapUserActions([
178
-      'getWeatherInfo',
179
-      'getPerson'
180
-    ]),
181
-    ...mapPageActions([
182
-      'getPagesList'
183
-    ]),
184
-    ...mapNewsActions([
185
-      'getNewsList'
186
-    ]),
187
-    returnUserList (item) { // 返回用户信息
188
-      this.showSlide = false
189
-      window.clearInterval(this.timer)
190
-      this.timeNum = 0
191
-      window.setTimeout(() => {
192
-        item.show = true
193
-        this.audioSrc = item.audio
194
-      }, 100)
195
-      if (this.userList.length > 2) {
196
-        this.userList.splice(0, 1)
197
-        this.userList.push(item)
198
-      } else {
199
-        this.userList.push(item)
200
-      }
201
-      this.timer = window.setInterval(() => {
202
-        if (this.timeNum - 0 >= 5000) {
203
-          this.timeNum = 0
204
-          window.clearInterval(this.timer)
205
-          this.showSlide = true
206
-          this.userList = []
207
-        } else {
208
-          this.timeNum += 100
209
-        }
210
-      }, 100)
211
-    },
212
-    init () { // 初始化
213
-      this.getDate()
214
-      if (!new Date().getMinutes()) { // 整点更新时间
215
-        this.currentTimeTamp = Date.now()
216
-      }
217
-    },
218
-    getInitData () {
219
-      this.getPagesList({
220
-        pageNum: 1,
221
-        pageSize: 100
222
-      })
223
-      this.getNewsList({
224
-        pageNum: 1,
225
-        pageSize: 100
226
-      })
227
-      this.getWeatherInfo()
228
-    },
229
-    getPersonList () {
230
-      this.getPerson().then(res => {
231
-        if (res && res.isShow) {
232
-          const wds = (res.words || '').replace('{{name}}', res.personName)
233
-
234
-          this.returnUserList({
235
-            firstName: (res.classId || res.classId === 1) ? '' : res.personName,
236
-            words: wds,
237
-            show: false,
238
-            audio: `http://ycapi.jcjyhn.com/welcome-api/?t=${wds}&rand=${(new Date()).valueOf()}`
239
-          })
240
-        }
241
-        this.getPersonList()
242
-      }).catch(r => {
243
-        setTimeout(() => {
244
-          this.getPersonList()
245
-        }, 1000)
246
-      })
247
-    },
248
-    FormatDate (timestamp, fmt) {
249
-      if (timestamp === '0001-01-01T00:00:00Z') {
250
-        return ''
251
-      }
252
-      if (!fmt) {
253
-        fmt = 'yyyy-MM-dd hh:mm'
254
-      }
255
-
256
-      let date = new Date(timestamp)
257
-      var o = {
258
-        'M+': date.getMonth() + 1,
259
-        'd+': date.getDate(),
260
-        'h+': date.getHours(),
261
-        'm+': date.getMinutes(),
262
-        's+': date.getSeconds(),
263
-        'q+': Math.floor((date.getMonth() + 3) / 3),
264
-        'S': date.getMilliseconds()
265
-      }
266
-      if (/(y+)/.test(fmt)) {
267
-        fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
268
-      }
269
-      for (var k in o) {
270
-        if (new RegExp('(' + k + ')').test(fmt)) {
271
-          fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
272
-        }
273
-      }
274
-      return fmt
275
-    },
276
-    getDate () { // 获取当前时间
277
-      let currentTime = Date.now()
278
-      let weekday = ['日', '一', '二', '三', '四', '五', '六']
279
-      let ChineseDate = solarLunar.lunar2solar(new Date(currentTime).getFullYear(), new Date(currentTime).getMonth(), new Date(currentTime).getDate())
280
-      this.currentWeek = `星期${weekday[new Date(currentTime).getDay()]}`
281
-      this.currentTime = `${new Date(currentTime).getHours().toString().padStart(2, '0')} : ${new Date(currentTime).getMinutes().toString().padStart(2, '0')} : ${new Date(currentTime).getSeconds().toString().padStart(2, '0')}`
282
-      this.currentDate = `${new Date(currentTime).getFullYear()}年${(new Date(currentTime).getMonth() + 1).toString().padStart(2, '0')}月${new Date(currentTime).getDate().toString().padStart(2, '0')}日`
283
-      this.currentChineseDate = `${ChineseDate.monthCn}${ChineseDate.dayCn}`
284
-    },
285
-    weatherIcon (target) { // 返回天气图标
286
-      switch (target) {
287
-        case '晴':
288
-          return require('../assets/images/icon-6.png')
289
-        case '少云':
290
-        case '晴间多云':
291
-        case '多云':
292
-          return require('../assets/images/icon-4.png')
293
-        case '阴':
294
-        case '平静':
295
-          return require('../assets/images/icon-9.png')
296
-        case '有风':
297
-        case '微风':
298
-        case '和风':
299
-        case '清风':
300
-        case '强风/劲风':
301
-        case '疾风':
302
-        case '大风':
303
-        case '烈风':
304
-        case '风暴':
305
-        case '狂爆风':
306
-        case '飓风':
307
-        case '热带风暴':
308
-        case '浮尘':
309
-        case '扬沙':
310
-          return require('../assets/images/icon-1.png')
311
-        case '阵雨':
312
-        case '大雨':
313
-        case '中雨-大雨':
314
-        case '大雨-暴雨':
315
-        case '暴雨-大暴雨':
316
-        case '大暴雨-特大暴雨':
317
-        case '暴雨':
318
-        case '大暴雨':
319
-        case '特大暴雨':
320
-        case '强阵雨':
321
-        case '极端降雨':
322
-        case '雷阵雨':
323
-        case '雷阵雨并伴有冰雹':
324
-          return require('../assets/images/icon-5.png')
325
-        case '毛毛雨/细雨':
326
-        case '小雨':
327
-        case '雨':
328
-        case '中雨':
329
-        case '小雨-中雨':
330
-          return require('../assets/images/icon-3.png')
331
-        case '雨夹雪':
332
-        case '阵雨夹雪':
333
-        case '雨雪天气':
334
-        case '冻雨':
335
-          return require('../assets/images/icon-10.png')
336
-        case '阵雪':
337
-        case '小雪':
338
-        case '中雪':
339
-        case '大雪':
340
-        case '暴雪':
341
-        case '小雪-中雪':
342
-        case '中雪-大雪':
343
-        case '大雪-暴雪':
344
-        case '雪':
345
-          return require('../assets/images/icon-2.png')
346
-        case '沙尘暴':
347
-        case '强沙尘暴':
348
-        case '龙卷风':
349
-        case '雾':
350
-        case '浓雾':
351
-        case '强浓雾':
352
-        case '轻雾':
353
-        case '大雾':
354
-        case '特强浓雾':
355
-        case '霾':
356
-        case '中度霾':
357
-        case '重度霾':
358
-        case '严重霾':
359
-        default:
360
-          return require('../assets/images/icon-1.png')
361
-      }
362
-    }
363
-  }
364
-}
365
-</script>
366
-
367
-<!-- Add "scoped" attribute to limit CSS to this component only -->
368
-<style lang="scss" scoped>
369
-.projectIndex {
370
-  width: 100%;
371
-  height: 100%;
372
-  position: relative;
373
-  overflow: hidden;
374
-  .bg {
375
-    z-index: 1;
376
-  }
377
-  > div {
378
-    width: 100%;
379
-    height: 100%;
380
-    box-sizing: border-box;
381
-    border: 20px solid transparent;
382
-    z-index: 2;
383
-    position: relative;
384
-    overflow: hidden;
385
-    .left {
386
-      width: 35.5%;
387
-      position: relative;
388
-      overflow: hidden;
389
-      > div {
390
-        background: rgba(255, 255, 255, 0.15);
391
-        border-radius: 6px;
392
-      }
393
-      .weather {
394
-        width: 100%;
395
-        position: relative;
396
-        overflow: hidden;
397
-        margin-bottom: 20px;
398
-        padding: 60px 0;
399
-        .date {
400
-          align-items: center;
401
-          span {
402
-            line-height: 1.6;
403
-            font-size: 1.7vw;
404
-            color: #fff;
405
-            text-align: center;
406
-            &:first-child {
407
-              margin-left: 2.4vw;
408
-            }
409
-            &:last-child {
410
-              margin-right: 2.4vw;
411
-            }
412
-          }
413
-        }
414
-        .weatherDetail {
415
-          padding: 0 20px;
416
-          position: relative;
417
-          overflow: hidden;
418
-          margin-top: 18px;
419
-          .imgData {
420
-            width: 12.6vw;
421
-            position: relative;
422
-            overflow: hidden;
423
-            span {
424
-              width: 100%;
425
-              color: #fff;
426
-              font-size: 2vw;
427
-              line-height: 1.5;
428
-              margin-top: 20px;
429
-              display: block;
430
-            }
431
-          }
432
-          > .flex-item {
433
-            > div {
434
-              width: 100%;
435
-              position: relative;
436
-              overflow: hidden;
437
-              > span {
438
-                width: 100%;
439
-                color: #fff;
440
-                font-size: 1.2vw;
441
-                line-height: 1.8;
442
-                white-space: nowrap;
443
-                overflow: hidden;
444
-                text-overflow: ellipsis;
445
-              }
446
-              ul {
447
-                li {
448
-                  border-bottom: 1px solid #b3bcc3;
449
-                  font-size: 0;
450
-                  white-space: nowrap;
451
-                  padding: 6px 0;
452
-                  span {
453
-                    display: inline-block;
454
-                    width: 50%;
455
-                    color: #fff;
456
-                    font-size: 1.3vw;
457
-                    white-space: nowrap;
458
-                    line-height: 1.7;
459
-                  }
460
-                }
461
-              }
462
-            }
463
-          }
464
-        }
465
-      }
466
-      > .flex-item {
467
-        > div {
468
-          width: 100%;
469
-          height: 100%;
470
-          position: relative;
471
-          > .notice {
472
-            width: 100%;
473
-            box-sizing: border-box;
474
-            border-left: 2.4vw solid transparent;
475
-            border-right: 2.4vw solid transparent;
476
-            overflow: hidden;
477
-            h1 {
478
-              text-align: center;
479
-              color: #fff;
480
-              font-size: 1.9vw;
481
-              line-height: 1.6;
482
-              white-space: nowrap;
483
-              overflow: hidden;
484
-              text-overflow: ellipsis;
485
-              font-weight: normal;
486
-            }
487
-            > span {
488
-              width: 100%;
489
-              display: block;
490
-              color: #fff;
491
-              font-size: 1.2vw;
492
-              line-height: 1.6;
493
-              text-align: justify;
494
-              margin-top: 30px;
495
-            }
496
-            div {
497
-              margin-top: 30px;
498
-              span {
499
-                width: 100%;
500
-                display: block;
501
-                text-align: right;
502
-                color: #fff;
503
-                font-size: 1.2vw;
504
-                line-height: 1.6;
505
-              }
506
-            }
507
-          }
508
-        }
509
-      }
510
-    }
511
-    > .flex-item {
512
-      margin-left: 20px;
513
-      position: relative;
514
-      > div {
515
-        width: 100%;
516
-        height: 100%;
517
-        position: relative;
518
-        overflow: hidden;
519
-        border-radius: 6px;
520
-        .swiper-container {
521
-          width: 100%;
522
-          height: 100%;
523
-          position: relative;
524
-        }
525
-        .userList {
526
-          width: 35vw;
527
-          overflow: hidden;
528
-          transition: all 0.3s linear;
529
-          -webkit-transition: all 0.3s linear;
530
-          > li {
531
-            width: 100%;
532
-            position: relative;
533
-            overflow: hidden;
534
-            background: rgba(255, 255, 255, 0.15);
535
-            margin: 1.8vh auto 0;
536
-            padding: 9vh 0;
537
-            transform: translateY(100vh);
538
-            -webkit-transform: translateY(100vh);
539
-            transition: all 0.3s linear;
540
-            -webkit-transition: all 0.3s linear;
541
-            &:first-child {
542
-              margin-top: 0;
543
-            }
544
-            &.active {
545
-              transform: translateY(0);
546
-              -webkit-transform: translateY(0);
547
-            }
548
-            span {
549
-              width: 100%;
550
-              display: block;
551
-              color: #fff;
552
-              text-align: center;
553
-              line-height: 1.45;
554
-              font-size: 2.3vw;
555
-              &:first-child {
556
-                font-size: 2.8vw;
557
-                line-height: 1.3;
558
-              }
559
-            }
560
-          }
561
-        }
562
-      }
563
-    }
564
-  }
565
-}
566
-</style>

+ 255
- 0
src/pages/page1.vue Datei anzeigen

@@ -0,0 +1,255 @@
1
+<template>
2
+  <div class="projectIndex">
3
+    <img src="../assets/images/bg.jpg" class="centerLabel cover bg" alt>
4
+    <div class="content flex-h">
5
+      <div class="flex-item">
6
+        <div :hidden="!showSlide">
7
+          <!-- <swiper :options="swiperOption" ref="mySwiper">
8
+            <swiper-slide class="swiper-slide" v-for="(item, index) in 1" :key="index">
9
+              <img
10
+                class="centerLabel cover"
11
+                src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1550835899076&di=3f786b46cffb6956608e66421b2ec859&imgtype=0&src=http%3A%2F%2Fimgsrc.baidu.com%2Fimgad%2Fpic%2Fitem%2Fe4dde71190ef76c66c3378239716fdfaae5167d1.jpg"
12
+                alt
13
+              >
14
+            </swiper-slide>
15
+          </swiper> -->
16
+          <img
17
+            v-if="showPage.showType === 'image'"
18
+            class="centerLabel cover"
19
+            :src="'api' + showPage.showContent"
20
+            alt
21
+          >
22
+          <video v-if="showPage.showType === 'video'" width="100%" height="100%" controls="controls" autoplay loop muted>
23
+            <source :src="'api' + showPage.showContent" type="video/mp4" />
24
+          </video>
25
+        </div>
26
+        <div :hidden="showSlide">
27
+          <ul class="centerLabel userList">
28
+            <li v-for="(item, index) in userList" :key="index" :class="{'active': item.show}">
29
+              <span>{{item.firstName}}</span>
30
+              <span>{{item.words}}</span>
31
+            </li>
32
+          </ul>
33
+        </div>
34
+      </div>
35
+    </div>
36
+  </div>
37
+</template>
38
+
39
+<script>
40
+import { createNamespacedHelpers } from 'vuex'
41
+import 'swiper/dist/css/swiper.css'
42
+import { swiper, swiperSlide } from 'vue-awesome-swiper'
43
+const { mapActions: mapUserActions } = createNamespacedHelpers('user')
44
+
45
+const { mapState: mapPageState, mapActions: mapPageActions } = createNamespacedHelpers('page')
46
+
47
+const { mapState: mapNewsState, mapActions: mapNewsActions } = createNamespacedHelpers('news')
48
+export default {
49
+  name: 'projectIndex',
50
+  data () {
51
+    return {
52
+      userList: [{
53
+        firstName: '111',
54
+        gender: '1',
55
+        show: false
56
+      }, {
57
+        firstName: '111',
58
+        gender: '1',
59
+        show: false
60
+      }, {
61
+        firstName: '111',
62
+        gender: '1',
63
+        show: false
64
+      }],
65
+      showSlide: true,
66
+      currentTimeTamp: Date.now(),
67
+      activeIndex: 0,
68
+      timer: null,
69
+      timeNum: 0,
70
+      swiperOption: {
71
+        loop: true,
72
+        speed: 1000,
73
+        autoplay: {
74
+          delay: 6000,
75
+          disableOnInteraction: false
76
+        }
77
+      },
78
+      num: 1
79
+    }
80
+  },
81
+  computed: {
82
+    ...mapPageState({
83
+      pages: x => x.pages
84
+    }),
85
+    ...mapNewsState({
86
+      news: x => x.news
87
+    }),
88
+    showNew () {
89
+      return ((this.news.data || {}).records || []).filter(x => x.status === 1)[0] || {}
90
+    },
91
+    showPage () {
92
+      return ((this.pages.data || {}).records || []).filter(x => x.status === 1)[0] || {}
93
+    },
94
+    mySwiper () {
95
+      return this.$refs.mySwiper.swiper
96
+    }
97
+  },
98
+  components: {
99
+    swiper,
100
+    swiperSlide
101
+  },
102
+  created () {
103
+    this.init()
104
+    window.setInterval(() => {
105
+      this.init()
106
+    }, 1000)
107
+    this.getInitData()
108
+    window.setInterval(() => {
109
+      this.getInitData()
110
+    }, 1000 * 60 * 60)
111
+    this.getPersonList()
112
+  },
113
+  mounted () {
114
+    this.$nextTick(() => {
115
+    })
116
+  },
117
+  methods: {
118
+    ...mapUserActions([
119
+      'getPersonB'
120
+    ]),
121
+    ...mapPageActions([
122
+      'getPagesList'
123
+    ]),
124
+    ...mapNewsActions([
125
+      'getNewsList'
126
+    ]),
127
+    returnUserList (item) { // 返回用户信息
128
+      this.showSlide = false
129
+      window.clearInterval(this.timer)
130
+      this.timeNum = 0
131
+      window.setTimeout(() => {
132
+        item.show = true
133
+      }, 100)
134
+      if (this.userList.length > 2) {
135
+        this.userList.splice(0, 1)
136
+        this.userList.push(item)
137
+      } else {
138
+        this.userList.push(item)
139
+      }
140
+      this.timer = window.setInterval(() => {
141
+        if (this.timeNum - 0 >= 5000) {
142
+          this.timeNum = 0
143
+          window.clearInterval(this.timer)
144
+          this.showSlide = true
145
+          this.userList = []
146
+        } else {
147
+          this.timeNum += 100
148
+        }
149
+      }, 100)
150
+    },
151
+    init () { // 初始化
152
+      if (!new Date().getMinutes()) { // 整点更新时间
153
+        this.currentTimeTamp = Date.now()
154
+      }
155
+    },
156
+    getInitData () {
157
+      this.getPagesList({
158
+        pageNum: 1,
159
+        pageSize: 100
160
+      })
161
+      this.getNewsList({
162
+        pageNum: 1,
163
+        pageSize: 100
164
+      })
165
+    },
166
+    getPersonList () {
167
+      this.getPersonB().then(res => {
168
+        if (res && res.isShow) {
169
+          const sex = res.sex === '1' ? '先生' : '女士'
170
+          const wds = (res.words || '').replace('{{name}}', res.personName).replace('{{sex}}', sex)
171
+
172
+          this.returnUserList({
173
+            firstName: (res.classId || res.classId === 1) ? '' : res.personName,
174
+            words: wds,
175
+            show: false,
176
+            audio: `http://ycapi.jcjyhn.com/welcome-api/?t=${wds}`
177
+          })
178
+        }
179
+        this.getPersonList()
180
+      }).catch(r => {
181
+        setTimeout(() => {
182
+          this.getPersonList()
183
+        }, 1000)
184
+      })
185
+    }
186
+  }
187
+}
188
+</script>
189
+
190
+<!-- Add "scoped" attribute to limit CSS to this component only -->
191
+<style lang="scss" scoped>
192
+.projectIndex {
193
+  width: 100%;
194
+  height: 100%;
195
+  position: relative;
196
+  overflow: hidden;
197
+  .bg {
198
+    z-index: 1;
199
+  }
200
+  > div {
201
+    width: 100%;
202
+    height: 100%;
203
+    z-index: 2;
204
+    position: relative;
205
+    overflow: hidden;
206
+    > .flex-item {
207
+      position: relative;
208
+      > div {
209
+        width: 100%;
210
+        height: 100%;
211
+        position: relative;
212
+        overflow: hidden;
213
+        border-radius: 6px;
214
+        .userList {
215
+          width: calc(100% - 80px);
216
+          overflow: hidden;
217
+          transition: all 0.3s linear;
218
+          -webkit-transition: all 0.3s linear;
219
+          text-align: center;
220
+          font-size: 0;
221
+          > li {
222
+            width: 0;
223
+            display: inline-block;
224
+            margin-left: 40px;
225
+            position: relative;
226
+            overflow: hidden;
227
+            background: rgba(255, 255, 255, 0.15);
228
+            padding: 9vh 0;
229
+            transition: all 0.3s linear;
230
+            -webkit-transition: all 0.3s linear;
231
+            &:first-child {
232
+              margin-left: 0;
233
+            }
234
+            &.active {
235
+              width: calc((100% - 80PX) / 3);
236
+            }
237
+            span {
238
+              width: 100%;
239
+              display: block;
240
+              color: #fff;
241
+              text-align: center;
242
+              line-height: 1.45;
243
+              font-size: 2.3vw;
244
+              &:first-child {
245
+                font-size: 2.8vw;
246
+                line-height: 1.3;
247
+              }
248
+            }
249
+          }
250
+        }
251
+      }
252
+    }
253
+  }
254
+}
255
+</style>

+ 199
- 27
src/pages/page2.vue Datei anzeigen

@@ -2,6 +2,48 @@
2 2
   <div class="projectIndex">
3 3
     <img src="../assets/images/bg.jpg" class="centerLabel cover bg" alt>
4 4
     <div class="content flex-h">
5
+      <div class="left flex-v">
6
+        <div class="weather">
7
+          <div class="date flex-h">
8
+            <span>{{currentDate}}</span>
9
+            <span class="flex-item">{{currentWeek}}</span>
10
+            <span>农历{{currentChineseDate}}</span>
11
+          </div>
12
+          <div class="weatherDetail flex-h">
13
+            <div class="imgData" v-if="weatherDetail">
14
+              <img :src="weatherIcon(weatherDetail.dayweather)" width="100%" alt>
15
+              <span>{{tempRange}}</span>
16
+            </div>
17
+            <div class="flex-item">
18
+              <div v-if="weatherDetail">
19
+                <span>今日 {{ weatherDetail.dayweather }}</span>
20
+                <ul>
21
+                  <li>
22
+                    <span>白天</span>
23
+                    <span>{{weatherDetail.daywind}} 风 {{weatherDetail.daypower}}</span>
24
+                  </li>
25
+                  <li>
26
+                    <span>晚上</span>
27
+                    <span>{{weatherDetail.nightwind}} 风 {{weatherDetail.nightpower}}</span>
28
+                  </li>
29
+                </ul>
30
+              </div>
31
+            </div>
32
+          </div>
33
+        </div>
34
+        <div class="flex-item">
35
+          <div>
36
+            <div class="centerLabel notice">
37
+              <span v-html="(showNew.content || '').replace(/\r\n/g, '<br/>').replace(/\n/g, '<br/>').replace(/\s/g, ' ')">
38
+              </span>
39
+              <div>
40
+                <span>{{showNew.publisher}}</span>
41
+                <span>{{FormatDate(showNew.publishDate, 'yyyy年MM月dd日')}}</span>
42
+              </div>
43
+            </div>
44
+          </div>
45
+        </div>
46
+      </div>
5 47
       <div class="flex-item">
6 48
         <div :hidden="!showSlide">
7 49
           <!-- <swiper :options="swiperOption" ref="mySwiper">
@@ -33,6 +75,7 @@
33 75
         </div>
34 76
       </div>
35 77
     </div>
78
+    <audio :src="audioSrc" autoplay :style="{ width: '1px', height: '1px' }" ></audio>
36 79
   </div>
37 80
 </template>
38 81
 
@@ -50,19 +93,7 @@ export default {
50 93
   name: 'projectIndex',
51 94
   data () {
52 95
     return {
53
-      userList: [{
54
-        firstName: '111',
55
-        gender: '1',
56
-        show: false
57
-      }, {
58
-        firstName: '111',
59
-        gender: '1',
60
-        show: false
61
-      }, {
62
-        firstName: '111',
63
-        gender: '1',
64
-        show: false
65
-      }],
96
+      userList: [],
66 97
       currentWeek: '周',
67 98
       currentTime: '00:00:00',
68 99
       currentDate: 'xx年xx月xx日',
@@ -81,7 +112,8 @@ export default {
81 112
           disableOnInteraction: false
82 113
         }
83 114
       },
84
-      num: 1
115
+      num: 1,
116
+      audioSrc: ''
85 117
     }
86 118
   },
87 119
   computed: {
@@ -127,6 +159,8 @@ export default {
127 159
     swiperSlide
128 160
   },
129 161
   created () {
162
+    window.console.log('---------created---------')
163
+
130 164
     this.init()
131 165
     window.setInterval(() => {
132 166
       this.init()
@@ -144,7 +178,7 @@ export default {
144 178
   methods: {
145 179
     ...mapUserActions([
146 180
       'getWeatherInfo',
147
-      'getPersonB'
181
+      'getPerson'
148 182
     ]),
149 183
     ...mapPageActions([
150 184
       'getPagesList'
@@ -158,6 +192,7 @@ export default {
158 192
       this.timeNum = 0
159 193
       window.setTimeout(() => {
160 194
         item.show = true
195
+        this.audioSrc = item.audio
161 196
       }, 100)
162 197
       if (this.userList.length > 2) {
163 198
         this.userList.splice(0, 1)
@@ -183,6 +218,7 @@ export default {
183 218
       }
184 219
     },
185 220
     getInitData () {
221
+      window.console.log('---------getInitData---------')
186 222
       this.getPagesList({
187 223
         pageNum: 1,
188 224
         pageSize: 100
@@ -194,15 +230,17 @@ export default {
194 230
       this.getWeatherInfo()
195 231
     },
196 232
     getPersonList () {
197
-      this.getPersonB().then(res => {
233
+      this.getPerson().then(res => {
198 234
         if (res && res.isShow) {
199
-          const wds = (res.words || '').replace('{{name}}', res.personName)
235
+          const sex = res.sex === '1' ? '先生' : '女士'
236
+          const voice = res.sex === '2' ? 'm' : 'f'
237
+          const wds = (res.words2 || '').replace('{{name}}', res.personName).replace('{{sex}}', sex)
200 238
 
201 239
           this.returnUserList({
202 240
             firstName: (res.classId || res.classId === 1) ? '' : res.personName,
203
-            words: (res.words || '').replace('{{name}}', res.personName),
241
+            words: wds,
204 242
             show: false,
205
-            audio: `http://ycapi.jcjyhn.com/welcome-api/?t=${wds}`
243
+            audio: `http://ycapi.jcjyhn.com/welcome-api/?t=${wds}&u=${voice}&rand=${(new Date()).valueOf()}`
206 244
           })
207 245
         }
208 246
         this.getPersonList()
@@ -344,10 +382,139 @@ export default {
344 382
   > div {
345 383
     width: 100%;
346 384
     height: 100%;
385
+    box-sizing: border-box;
386
+    border: 20px solid transparent;
347 387
     z-index: 2;
348 388
     position: relative;
349 389
     overflow: hidden;
390
+    .left {
391
+      width: 35.5%;
392
+      position: relative;
393
+      overflow: hidden;
394
+      > div {
395
+        background: rgba(255, 255, 255, 0.15);
396
+        border-radius: 6px;
397
+      }
398
+      .weather {
399
+        width: 100%;
400
+        position: relative;
401
+        overflow: hidden;
402
+        margin-bottom: 20px;
403
+        padding: 60px 0;
404
+        .date {
405
+          align-items: center;
406
+          span {
407
+            line-height: 1.6;
408
+            font-size: 1.7vw;
409
+            color: #fff;
410
+            text-align: center;
411
+            &:first-child {
412
+              margin-left: 2.4vw;
413
+            }
414
+            &:last-child {
415
+              margin-right: 2.4vw;
416
+            }
417
+          }
418
+        }
419
+        .weatherDetail {
420
+          padding: 0 20px;
421
+          position: relative;
422
+          overflow: hidden;
423
+          margin-top: 18px;
424
+          .imgData {
425
+            width: 12.6vw;
426
+            position: relative;
427
+            overflow: hidden;
428
+            span {
429
+              width: 100%;
430
+              color: #fff;
431
+              font-size: 2vw;
432
+              line-height: 1.5;
433
+              margin-top: 20px;
434
+              display: block;
435
+            }
436
+          }
437
+          > .flex-item {
438
+            > div {
439
+              width: 100%;
440
+              position: relative;
441
+              overflow: hidden;
442
+              > span {
443
+                width: 100%;
444
+                color: #fff;
445
+                font-size: 1.2vw;
446
+                line-height: 1.8;
447
+                white-space: nowrap;
448
+                overflow: hidden;
449
+                text-overflow: ellipsis;
450
+              }
451
+              ul {
452
+                li {
453
+                  border-bottom: 1px solid #b3bcc3;
454
+                  font-size: 0;
455
+                  white-space: nowrap;
456
+                  padding: 6px 0;
457
+                  span {
458
+                    display: inline-block;
459
+                    width: 50%;
460
+                    color: #fff;
461
+                    font-size: 1.3vw;
462
+                    white-space: nowrap;
463
+                    line-height: 1.7;
464
+                  }
465
+                }
466
+              }
467
+            }
468
+          }
469
+        }
470
+      }
471
+      > .flex-item {
472
+        > div {
473
+          width: 100%;
474
+          height: 100%;
475
+          position: relative;
476
+          > .notice {
477
+            width: 100%;
478
+            box-sizing: border-box;
479
+            border-left: 2.4vw solid transparent;
480
+            border-right: 2.4vw solid transparent;
481
+            overflow: hidden;
482
+            h1 {
483
+              text-align: center;
484
+              color: #fff;
485
+              font-size: 1.9vw;
486
+              line-height: 1.6;
487
+              white-space: nowrap;
488
+              overflow: hidden;
489
+              text-overflow: ellipsis;
490
+              font-weight: normal;
491
+            }
492
+            > span {
493
+              width: 100%;
494
+              display: block;
495
+              color: #fff;
496
+              font-size: 1.2vw;
497
+              line-height: 1.6;
498
+              text-align: justify;
499
+              margin-top: 30px;
500
+            }
501
+            div {
502
+              margin-top: 30px;
503
+              span {
504
+                width: 100%;
505
+                display: block;
506
+                text-align: right;
507
+                color: #fff;
508
+                font-size: 1.2vw;
509
+                line-height: 1.6;
510
+              }
511
+            }
512
+          }
513
+        }
514
+      }
515
+    }
350 516
     > .flex-item {
517
+      margin-left: 20px;
351 518
       position: relative;
352 519
       > div {
353 520
         width: 100%;
@@ -355,28 +522,33 @@ export default {
355 522
         position: relative;
356 523
         overflow: hidden;
357 524
         border-radius: 6px;
525
+        .swiper-container {
526
+          width: 100%;
527
+          height: 100%;
528
+          position: relative;
529
+        }
358 530
         .userList {
359
-          width: calc(100% - 80px);
531
+          width: 35vw;
360 532
           overflow: hidden;
361 533
           transition: all 0.3s linear;
362 534
           -webkit-transition: all 0.3s linear;
363
-          text-align: center;
364
-          font-size: 0;
365 535
           > li {
366
-            width: 0;
367
-            display: inline-block;
368
-            margin-left: 40px;
536
+            width: 100%;
369 537
             position: relative;
370 538
             overflow: hidden;
371 539
             background: rgba(255, 255, 255, 0.15);
540
+            margin: 1.8vh auto 0;
372 541
             padding: 9vh 0;
542
+            transform: translateY(100vh);
543
+            -webkit-transform: translateY(100vh);
373 544
             transition: all 0.3s linear;
374 545
             -webkit-transition: all 0.3s linear;
375 546
             &:first-child {
376
-              margin-left: 0;
547
+              margin-top: 0;
377 548
             }
378 549
             &.active {
379
-              width: calc((100% - 80PX) / 3);
550
+              transform: translateY(0);
551
+              -webkit-transform: translateY(0);
380 552
             }
381 553
             span {
382 554
               width: 100%;

+ 2
- 2
src/router/index.js Datei anzeigen

@@ -1,7 +1,7 @@
1 1
 /* eslint-disable */
2 2
 import Vue from 'vue'
3 3
 import Router from 'vue-router'
4
-import index from '../pages/index'
4
+import page1 from '../pages/page1'
5 5
 import page2 from '../pages/page2'
6 6
 
7 7
 Vue.use(Router)
@@ -10,7 +10,7 @@ let router = new Router({
10 10
   routes: [{
11 11
     path: '/',
12 12
     name: 'index',
13
-    component: index,
13
+    component: page1,
14 14
     children: []
15 15
   }, {
16 16
     path: '/page2',

+ 17
- 0
src/util/polyfill.js Datei anzeigen

@@ -0,0 +1,17 @@
1
+/* eslint-disable */
2
+
3
+if (!String.prototype.padStart) {
4
+  String.prototype.padStart = function padStart(targetLength, padString) {
5
+      targetLength = targetLength >> 0; //truncate if number, or convert non-number to 0;
6
+      padString = String(typeof padString !== 'undefined' ? padString : ' ');
7
+      if (this.length >= targetLength) {
8
+          return String(this);
9
+      } else {
10
+          targetLength = targetLength - this.length;
11
+          if (targetLength > padString.length) {
12
+              padString += padString.repeat(targetLength / padString.length); //append to original to ensure we are longer than needed
13
+          }
14
+          return padString.slice(0, targetLength) + String(this);
15
+      }
16
+  };
17
+}