许成详 6 anni fa
parent
commit
303601576a
2 ha cambiato i file con 379 aggiunte e 0 eliminazioni
  1. 373
    0
      src/pages/page2.vue
  2. 6
    0
      src/router/index.js

+ 373
- 0
src/pages/page2.vue Vedi File

@@ -0,0 +1,373 @@
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>
7
+          <ul class="centerLabel userList">
8
+            <li v-for="(item, index) in userList" :key="index" :class="{'active': item.show}">
9
+              <span>{{`${item.firstName}${item.gender - 0 === 1 ? '先生' : '女士'}`}}</span>
10
+              <span>欢迎光临 !</span>
11
+            </li>
12
+          </ul>
13
+        </div>
14
+      </div>
15
+    </div>
16
+  </div>
17
+</template>
18
+
19
+<script>
20
+import { createNamespacedHelpers } from 'vuex'
21
+import 'swiper/dist/css/swiper.css'
22
+import { swiper, swiperSlide } from 'vue-awesome-swiper'
23
+import solarLunar from 'solarLunar'
24
+const { mapState: mapUserState, mapActions: mapUserActions } = createNamespacedHelpers('user')
25
+
26
+const { mapState: mapPageState, mapActions: mapPageActions } = createNamespacedHelpers('page')
27
+
28
+const { mapState: mapNewsState, mapActions: mapNewsActions } = createNamespacedHelpers('news')
29
+export default {
30
+  name: 'projectIndex',
31
+  data () {
32
+    return {
33
+      userList: [{
34
+        firstName: '111',
35
+        gender: '1',
36
+        show: false
37
+      }, {
38
+        firstName: '111',
39
+        gender: '1',
40
+        show: false
41
+      }, {
42
+        firstName: '111',
43
+        gender: '1',
44
+        show: false
45
+      }],
46
+      currentWeek: '周',
47
+      currentTime: '00:00:00',
48
+      currentDate: 'xx年xx月xx日',
49
+      currentChineseDate: 'xx月xx日',
50
+      showSlide: true,
51
+      currentTimeTamp: Date.now(),
52
+      ChineseDate: null,
53
+      activeIndex: 0,
54
+      timer: null,
55
+      timeNum: 0,
56
+      swiperOption: {
57
+        loop: true,
58
+        speed: 1000,
59
+        autoplay: {
60
+          delay: 6000,
61
+          disableOnInteraction: false
62
+        }
63
+      },
64
+      num: 1
65
+    }
66
+  },
67
+  computed: {
68
+    ...mapUserState({
69
+      weatherInfo: x => x.weatherInfo // 天气信息
70
+    }),
71
+    ...mapPageState({
72
+      pages: x => x.pages
73
+    }),
74
+    ...mapNewsState({
75
+      news: x => x.news
76
+    }),
77
+    showNew () {
78
+      return ((this.news.data || {}).records || []).filter(x => x.status === 1)[0] || {}
79
+    },
80
+    showPage () {
81
+      return ((this.pages.data || {}).records || []).filter(x => x.status === 1)[0] || {}
82
+    },
83
+    mySwiper () {
84
+      return this.$refs.mySwiper.swiper
85
+    },
86
+    isDay () {
87
+      return new Date(this.currentTimeTamp).getHours() <= 17 && new Date(this.currentTimeTamp).getHours() >= 6
88
+    },
89
+    weatherDetail () {
90
+      return this.weatherInfo.forecasts[0].casts[0]
91
+    },
92
+    tempRange () {
93
+      if (!this.weatherDetail) return ''
94
+      let min, max
95
+
96
+      // 这么复杂是为了避免 eslint 错误
97
+      const f = () => this.weatherDetail.daytemp > this.weatherDetail.nighttemp
98
+        ? ((min = this.weatherDetail.nighttemp) | (max = this.weatherDetail.daytemp))
99
+        : ((max = this.weatherDetail.nighttemp) | (min = this.weatherDetail.daytemp))
100
+      f()
101
+
102
+      return `${min}℃ ~ ${max}℃`
103
+    }
104
+  },
105
+  components: {
106
+    swiper,
107
+    swiperSlide
108
+  },
109
+  created () {
110
+    this.init()
111
+    window.setInterval(() => {
112
+      this.init()
113
+    }, 1000)
114
+    this.getInitData()
115
+    window.setInterval(() => {
116
+      this.getInitData()
117
+    }, 1000 * 60 * 60)
118
+    this.getPersonList()
119
+  },
120
+  mounted () {
121
+    this.$nextTick(() => {
122
+    })
123
+  },
124
+  methods: {
125
+    ...mapUserActions([
126
+      'getWeatherInfo',
127
+      'getPerson'
128
+    ]),
129
+    ...mapPageActions([
130
+      'getPagesList'
131
+    ]),
132
+    ...mapNewsActions([
133
+      'getNewsList'
134
+    ]),
135
+    returnUserList (item) { // 返回用户信息
136
+      this.showSlide = false
137
+      window.clearInterval(this.timer)
138
+      this.timeNum = 0
139
+      window.setTimeout(() => {
140
+        item.show = true
141
+      }, 100)
142
+      if (this.userList.length > 2) {
143
+        this.userList.splice(0, 1)
144
+        this.userList.push(item)
145
+      } else {
146
+        this.userList.push(item)
147
+      }
148
+      this.timer = window.setInterval(() => {
149
+        if (this.timeNum - 0 >= 5000) {
150
+          this.timeNum = 0
151
+          window.clearInterval(this.timer)
152
+          this.showSlide = true
153
+          this.userList = []
154
+        } else {
155
+          this.timeNum += 100
156
+        }
157
+      }, 100)
158
+    },
159
+    init () { // 初始化
160
+      this.getDate()
161
+      if (!new Date().getMinutes()) { // 整点更新时间
162
+        this.currentTimeTamp = Date.now()
163
+      }
164
+    },
165
+    getInitData () {
166
+      this.getPagesList({
167
+        pageNum: 1,
168
+        pageSize: 100
169
+      })
170
+      this.getNewsList({
171
+        pageNum: 1,
172
+        pageSize: 100
173
+      })
174
+      this.getWeatherInfo()
175
+    },
176
+    getPersonList () {
177
+      this.getPerson().then(res => {
178
+        console.log(res)
179
+        if (res) {
180
+          this.returnUserList({
181
+            firstName: '111',
182
+            gender: '1',
183
+            show: false
184
+          })
185
+        }
186
+        this.getPersonList()
187
+      })
188
+    },
189
+    FormatDate (timestamp, fmt) {
190
+      if (timestamp === '0001-01-01T00:00:00Z') {
191
+        return ''
192
+      }
193
+      if (!fmt) {
194
+        fmt = 'yyyy-MM-dd hh:mm'
195
+      }
196
+
197
+      let date = new Date(timestamp)
198
+      var o = {
199
+        'M+': date.getMonth() + 1,
200
+        'd+': date.getDate(),
201
+        'h+': date.getHours(),
202
+        'm+': date.getMinutes(),
203
+        's+': date.getSeconds(),
204
+        'q+': Math.floor((date.getMonth() + 3) / 3),
205
+        'S': date.getMilliseconds()
206
+      }
207
+      if (/(y+)/.test(fmt)) {
208
+        fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
209
+      }
210
+      for (var k in o) {
211
+        if (new RegExp('(' + k + ')').test(fmt)) {
212
+          fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
213
+        }
214
+      }
215
+      return fmt
216
+    },
217
+    getDate () { // 获取当前时间
218
+      let currentTime = Date.now()
219
+      let weekday = ['日', '一', '二', '三', '四', '五', '六']
220
+      let ChineseDate = solarLunar.lunar2solar(new Date(currentTime).getFullYear(), new Date(currentTime).getMonth(), new Date(currentTime).getDate())
221
+      this.currentWeek = `星期${weekday[new Date(currentTime).getDay()]}`
222
+      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')}`
223
+      this.currentDate = `${new Date(currentTime).getFullYear()}年${(new Date(currentTime).getMonth() + 1).toString().padStart(2, '0')}月${new Date(currentTime).getDate().toString().padStart(2, '0')}日`
224
+      this.currentChineseDate = `${ChineseDate.monthCn}${ChineseDate.dayCn}`
225
+    },
226
+    weatherIcon (target) { // 返回天气图标
227
+      switch (target) {
228
+        case '晴':
229
+          return require('../assets/images/icon-6.png')
230
+        case '少云':
231
+        case '晴间多云':
232
+        case '多云':
233
+          return require('../assets/images/icon-4.png')
234
+        case '阴':
235
+        case '平静':
236
+          return require('../assets/images/icon-9.png')
237
+        case '有风':
238
+        case '微风':
239
+        case '和风':
240
+        case '清风':
241
+        case '强风/劲风':
242
+        case '疾风':
243
+        case '大风':
244
+        case '烈风':
245
+        case '风暴':
246
+        case '狂爆风':
247
+        case '飓风':
248
+        case '热带风暴':
249
+        case '浮尘':
250
+        case '扬沙':
251
+          return require('../assets/images/icon-1.png')
252
+        case '阵雨':
253
+        case '大雨':
254
+        case '中雨-大雨':
255
+        case '大雨-暴雨':
256
+        case '暴雨-大暴雨':
257
+        case '大暴雨-特大暴雨':
258
+        case '暴雨':
259
+        case '大暴雨':
260
+        case '特大暴雨':
261
+        case '强阵雨':
262
+        case '极端降雨':
263
+        case '雷阵雨':
264
+        case '雷阵雨并伴有冰雹':
265
+          return require('../assets/images/icon-5.png')
266
+        case '毛毛雨/细雨':
267
+        case '小雨':
268
+        case '雨':
269
+        case '中雨':
270
+        case '小雨-中雨':
271
+          return require('../assets/images/icon-3.png')
272
+        case '雨夹雪':
273
+        case '阵雨夹雪':
274
+        case '雨雪天气':
275
+        case '冻雨':
276
+          return require('../assets/images/icon-10.png')
277
+        case '阵雪':
278
+        case '小雪':
279
+        case '中雪':
280
+        case '大雪':
281
+        case '暴雪':
282
+        case '小雪-中雪':
283
+        case '中雪-大雪':
284
+        case '大雪-暴雪':
285
+        case '雪':
286
+          return require('../assets/images/icon-2.png')
287
+        case '沙尘暴':
288
+        case '强沙尘暴':
289
+        case '龙卷风':
290
+        case '雾':
291
+        case '浓雾':
292
+        case '强浓雾':
293
+        case '轻雾':
294
+        case '大雾':
295
+        case '特强浓雾':
296
+        case '霾':
297
+        case '中度霾':
298
+        case '重度霾':
299
+        case '严重霾':
300
+        default:
301
+          return require('../assets/images/icon-1.png')
302
+      }
303
+    }
304
+  }
305
+}
306
+</script>
307
+
308
+<!-- Add "scoped" attribute to limit CSS to this component only -->
309
+<style lang="scss" scoped>
310
+.projectIndex {
311
+  width: 100%;
312
+  height: 100%;
313
+  position: relative;
314
+  overflow: hidden;
315
+  .bg {
316
+    z-index: 1;
317
+  }
318
+  > div {
319
+    width: 100%;
320
+    height: 100%;
321
+    z-index: 2;
322
+    position: relative;
323
+    overflow: hidden;
324
+    > .flex-item {
325
+      position: relative;
326
+      > div {
327
+        width: 100%;
328
+        height: 100%;
329
+        position: relative;
330
+        overflow: hidden;
331
+        border-radius: 6px;
332
+        .userList {
333
+          width: calc(100% - 80px);
334
+          overflow: hidden;
335
+          transition: all 0.3s linear;
336
+          -webkit-transition: all 0.3s linear;
337
+          text-align: center;
338
+          font-size: 0;
339
+          > li {
340
+            width: 0;
341
+            display: inline-block;
342
+            margin-left: 40px;
343
+            position: relative;
344
+            overflow: hidden;
345
+            background: rgba(255, 255, 255, 0.15);
346
+            padding: 9vh 0;
347
+            transition: all 0.3s linear;
348
+            -webkit-transition: all 0.3s linear;
349
+            &:first-child {
350
+              margin-left: 0;
351
+            }
352
+            &.active {
353
+              width: calc((100% - 80PX) / 3);
354
+            }
355
+            span {
356
+              width: 100%;
357
+              display: block;
358
+              color: #fff;
359
+              text-align: center;
360
+              line-height: 1.45;
361
+              font-size: 2.3vw;
362
+              &:first-child {
363
+                font-size: 2.8vw;
364
+                line-height: 1.3;
365
+              }
366
+            }
367
+          }
368
+        }
369
+      }
370
+    }
371
+  }
372
+}
373
+</style>

+ 6
- 0
src/router/index.js Vedi File

@@ -2,6 +2,7 @@
2 2
 import Vue from 'vue'
3 3
 import Router from 'vue-router'
4 4
 import index from '../pages/index'
5
+import page2 from '../pages/page2'
5 6
 
6 7
 Vue.use(Router)
7 8
 
@@ -11,6 +12,11 @@ let router = new Router({
11 12
     name: 'index',
12 13
     component: index,
13 14
     children: []
15
+  }, {
16
+    path: '/page2',
17
+    name: 'page2',
18
+    component: page2,
19
+    children: []
14 20
   }]
15 21
 })
16 22