Skip to content

Commit 642e0a3

Browse files
committed
use state / getters / mutations
1 parent 5a1145c commit 642e0a3

File tree

11 files changed

+146
-14
lines changed

11 files changed

+146
-14
lines changed

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
"lodash": "^4.17.4",
1919
"normalize.css": "^5.0.0",
2020
"vue": "^2.1.0",
21-
"vue-router": "^2.1.1"
21+
"vue-router": "^2.1.1",
22+
"vuex": "^2.1.1"
2223
},
2324
"devDependencies": {
2425
"autoprefixer": "^6.4.0",

src/components/Register.vue

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<template>
2+
<div>
3+
<el-card class="box-card">
4+
<h3>未注册用户</h3>
5+
<div v-for="user in users">
6+
<h4>{{ user.name }}</h4>
7+
<el-button type="success" @click="registerUser(user)">注册</el-button>
8+
</div>
9+
</el-card>
10+
</div>
11+
</template>
12+
13+
<script>
14+
import { mapGetters } from 'vuex'
15+
export default {
16+
computed: {
17+
...mapGetters({
18+
users: 'unregisterdUsers'
19+
})
20+
},
21+
methods: {
22+
registerUser (user) {
23+
this.$store.commit('register', user.id)
24+
}
25+
}
26+
}
27+
</script>

src/components/UnRegister.vue

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<template>
2+
<div>
3+
<el-card class="box-card">
4+
<h3>已注册用户 ({{ total }})</h3>
5+
<div v-for="user in users">
6+
<h4>{{ user.name }}</h4>
7+
<el-button type="danger" @click="unregisterUser(user)">注销</el-button>
8+
</div>
9+
</el-card>
10+
</div>
11+
</template>
12+
13+
<script>
14+
import { mapGetters } from 'vuex'
15+
export default {
16+
computed: {
17+
...mapGetters({
18+
users: 'registerdUsers',
19+
total: 'totalRegistrations'
20+
})
21+
},
22+
methods: {
23+
unregisterUser (registration) {
24+
this.$store.commit({
25+
type: 'unregister',
26+
userId: registration.userId
27+
})
28+
}
29+
}
30+
}
31+
</script>

src/components/common/Container.vue

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,9 @@
22
<div id="container">
33
<TopBar></TopBar>
44
<transition>
5-
6-
<el-row type="flex" class="row-bg" justify="center">
7-
<el-col :span="20"><router-view></router-view></el-col>
8-
<!--<el-col :span="6"><router-view></router-view></div></el-col>-->
5+
<el-row :gutter="20">
6+
<el-col :span="20" :offset="2"><router-view></router-view></el-col>
97
</el-row>
10-
11-
<!--<el-row>
12-
<el-col :span="23"><router-view></router-view></div></el-col>
13-
</el-row>-->
148
</transition>
159
</div>
1610
</template>

src/components/common/NavMenu.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<el-submenu index="1">
1010
<template slot="title"><i class="el-icon-menu"></i>导航一</template>
1111
<el-menu-item index="1-1"><router-link to="/question" class="nav-link">Ajax Demo</router-link></el-menu-item>
12-
<el-menu-item index="1-2"><router-link to="/page2" class="nav-link">二级导航二</router-link></el-menu-item>
12+
<el-menu-item index="1-2"><router-link to="/user" class="nav-link">Vuex(User)</router-link></el-menu-item>
1313
</el-submenu>
1414
<el-menu-item index="2"><router-link to="/page3" class="nav-link"><i class="el-icon-message"></i>导航二</router-link></el-menu-item>
1515
</el-menu>

src/components/common/style.scss

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
display: flex;
1919
min-width: 1080px;
2020
background-color: #1A191F;
21-
color: #dbdbdb;
2221
}
2322

2423
// 顶栏样式

src/main.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import Vue from 'vue'
77
import VueRouter from 'vue-router'
88
import App from './App'
99
import routes from './routes'
10+
import { store } from './store'
1011

1112
Vue.use(Element)
1213
Vue.use(VueRouter)
@@ -17,8 +18,9 @@ const router = new VueRouter({
1718

1819
/* eslint-disable no-new */
1920
new Vue({
21+
store,
22+
router,
2023
el: '#app',
2124
template: '<App/>',
22-
components: { App },
23-
router
25+
components: { App }
2426
})
File renamed without changes.

src/pages/user/index.vue

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<template>
2+
<el-row type="flex" class="row-bg" justify="space-around">
3+
<el-col :span="10"><register></register></el-col>
4+
<el-col :span="10"><un-register></un-register></el-col>
5+
</el-row>
6+
</template>
7+
8+
<script>
9+
import Register from '../../components/Register.vue'
10+
import UnRegister from '../../components/UnRegister.vue'
11+
export default {
12+
components: {
13+
Register,
14+
UnRegister
15+
}
16+
}
17+
</script>

src/routes.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ export default [
55
},
66
{
77
path: '/question',
8-
component: resolve => require(['./pages/question'], resolve)
8+
component: resolve => require(['./pages/question/question'], resolve)
9+
},
10+
{
11+
path: '/user',
12+
component: resolve => require(['./pages/user'], resolve)
913
}
1014
]

src/store.js

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import Vue from 'vue'
2+
import Vuex from 'vuex'
3+
Vue.use(Vuex)
4+
5+
const state = {
6+
users: [
7+
{id: 1, name: 'Kevin', registered: false},
8+
{id: 2, name: 'Jim', registered: false}
9+
],
10+
registrations: []
11+
}
12+
13+
const getters = {
14+
unregisterdUsers (state) {
15+
return state.users.filter(user => {
16+
return !user.registered
17+
})
18+
},
19+
registerdUsers (state) {
20+
return state.registrations
21+
},
22+
totalRegistrations (state) {
23+
return state.registrations.length
24+
}
25+
}
26+
27+
const mutations = {
28+
register (state, userId) {
29+
const date = new Date()
30+
const user = state.users.find(user => {
31+
return user.id === userId
32+
})
33+
user.registered = true
34+
const registration = {
35+
userId: userId,
36+
name: user.name,
37+
date: date.getMonth() + '/' + date.getDay()
38+
}
39+
state.registrations.push(registration)
40+
},
41+
unregister (state, payload) {
42+
const user = state.users.find(user => {
43+
return user.id === payload.userId
44+
})
45+
user.registered = false
46+
const registration = state.registrations.find(registration => {
47+
return registration.userId === payload.userId
48+
})
49+
state.registrations.splice(state.registrations.indexOf(registration), 1)
50+
}
51+
}
52+
53+
export const store = new Vuex.Store({
54+
state,
55+
getters,
56+
mutations
57+
})

0 commit comments

Comments
 (0)