vueのステータスマネージャ
30850 ワード
store.js
index.vue
import axios from '@/utils/request'
export default {
state: {
bannerlist: [],
prolist: []
},
getters: {},
actions: {
getBannerlist (context) {
axios.get('/banner').then(res => {
context.commit({
type: 'changeBannerlist',
data: res.data.data
})
})
},
getProlist ({ commit }) {
axios.get('/pro').then(res => {
commit({
type: 'changeProlist',
data: res.data.data
})
})
},
loadMoreProlist (context, params) {
console.log(context)
return new Promise((resolve, reject) => { // action promise
axios.get('/pro?limitNum=10&pageCode=' + params.pageCode).then(res => {
console.log(res.data.data)
if (res.data.data.length === 0) {
resolve(0)
} else {
context.commit({
type: 'changeProlist',
data: [...context.state.prolist, ...res.data.data]
})
resolve(1)
}
})
})
},
pullrefresh (context) {
return new Promise(resolve => {
axios.get('/pro').then(res => {
context.commit({
type: 'changeProlist',
data: res.data.data
})
resolve()
})
})
}
},
mutations: {
changeBannerlist (state, data) {
state.bannerlist = data.data
},
changeProlist (state, data) {
state.prolist = data.data
}
}
}
import axios from '@/utils/request'
export default {
state: { //
bannerlist: [],
prolist: []
},
getters: { // state a
},
actions: { //
getBannerlist (context) { // ,context
axios.get('/banner').then(res => {
context.commit({ // mutation
type: 'changeBannerlist',
data: res.data.data
})
})
},
getProlist ({ commit }) { //
axios.get('/pro').then(res => {
commit({
type: 'changeProlist',
data: res.data.data
})
})
}
},
mutations: {
changeBannerlist (state, data) {
state.bannerlist = data.data
},
changeProlist (state, data) {
state.prolist = data.data
}
}
}
index.vue
<template>
<div class="box">
<header class="header">
<router-link to="/search"> router-link>
header>
<div class="content" id="content">
<van-pull-refresh v-model="isLoading" @refresh="onRefresh">
<van-swipe :autoplay="4000" indicator-color="white">
<van-swipe-item v-for="item of bannerlist" :key="item.bannerid">
<img :src="item.img" alt="">
van-swipe-item>
van-swipe>
<van-list
v-if="flag"
v-model="loading"
:finished="finished"
finished-text=" "
@load="onLoad"
>
<Prolist :prolist="prolist"/>
van-list>
<div v-else>
<router-link to="/login"> router-link>
div>
van-pull-refresh>
<span @click="backtop" v-show="topflag" class="backtop iconfont icon-fanhuidingbu">span>
div>
div>
template>
<script>
import axios from '@/utils/request'
import { mapState } from 'vuex' //
import Vue from 'vue'
import { Swipe, SwipeItem, List, PullRefresh } from 'vant'
// ---- es6
import Prolist from '@/components/Prolist.vue'
Vue.use(Swipe).use(SwipeItem)
Vue.use(List)
Vue.use(PullRefresh)
export default {
//
components: {
// Prolist: Prolist
Prolist
},
data () {
return {
bannerlist: [],
prolist: [],
flag: false,
loading: false, // , , , false
finished: false, // true
pageCode: 1,
isLoading: false, // , , , false
topflag: false //
}
},
created () {
axios.get('/banner').then(res => {
console.log(res.data)
this.bannerlist = res.data.data
})
axios.get('/pro').then(res => {
console.log(res.data)
if (res.data.code === '10119') {
this.flag = false
} else {
this.flag = true
this.prolist = res.data.data
}
})
},
watch: {
pageCode (newval, oldval) {
if (newval > 2) {
this.topflag = true
} else {
this.topflag = false
}
}
},
methods: {
onLoad () { // ,
this.loading = true //
axios.get('/pro?limitNum=10&pageCode=' + this.pageCode).then(res => {
console.log(res.data)
this.loading = false //
this.pageCode++ // 1
if (res.data.code === '10119') { //
this.flag = false
} else { //
this.flag = true
// , , , ,
if (res.data.data.length === 0) {
this.finished = true //
} else {
// -----
// arr.concat(arr1)
// [...arr, ...arr1] es6
this.prolist = [...this.prolist, ...res.data.data]
}
}
})
},
onRefresh () { //
this.isLoading = true // ( )
axios.get('/pro').then(res => {
console.log(res.data)
this.isLoading = false //
if (res.data.code === '10119') {
this.flag = false
} else {
this.flag = true
this.finished = false //
this.pageCode = 1 // ,
this.prolist = res.data.data //
}
})
},
backtop () {
document.getElementById('content').scrollTop = 0
this.topflag = false
}
}
}
script>
<style lang="scss">
.van-swipe {
// height: 180px;
img {
width: 100%;
}
}
.backtop {
position: fixed;
bottom: 60px;
right: 10px;
font-size: 30px;
}
style>