Skip to content

Commit cc84c0e

Browse files
author
yafully
committed
user login state
1 parent 38e5ca5 commit cc84c0e

File tree

7 files changed

+126
-26
lines changed

7 files changed

+126
-26
lines changed

package-lock.json

+12-21
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
"vue-lazyload": "^1.2.6",
2323
"vue-resource": "^1.5.1",
2424
"vue-router": "^3.0.1",
25-
"vue2-touch-events": "^1.1.2"
25+
"vue2-touch-events": "^1.1.2",
26+
"vuex": "^3.1.0"
2627
},
2728
"devDependencies": {
2829
"autoprefixer": "^7.1.2",

src/main.js

+2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import Vue from 'vue'
44
import App from './App'
55
import router from './router'
6+
import store from './store'
67
// import fastClick from 'fastclick'
78
import VueLazyLoad from 'vue-lazyload'
89
import ElementUI from 'element-ui'
@@ -24,6 +25,7 @@ Vue.use(VueLazyLoad, {
2425
new Vue({
2526
el: '#app',
2627
router,
28+
store,
2729
components: { App },
2830
template: '<App/>'
2931
})

src/store/index.js

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/**
2+
*
3+
* @authors YafullyZhao ([email protected])
4+
* @date 2019-02-10 12:24:55
5+
*/
6+
import Vue from 'vue'
7+
import Vuex from 'vuex'
8+
import state from './state'
9+
import mutations from './mutations'
10+
11+
Vue.use(Vuex)
12+
13+
export default new Vuex.Store({
14+
state,
15+
mutations
16+
})

src/store/mutations.js

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/**
2+
*
3+
* @authors YafullyZhao ([email protected])
4+
* @date 2019-02-10 12:28:36
5+
*/
6+
export default {
7+
changeUser (state, user) {
8+
state.user = user
9+
try {
10+
localStorage.user = user
11+
} catch (e) {
12+
13+
}
14+
}
15+
}

src/store/state.js

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/**
2+
*
3+
* @authors YafullyZhao ([email protected])
4+
* @date 2019-02-10 12:27:49
5+
*/
6+
let defaultUser = 'Guest'
7+
try {
8+
if (localStorage.user) {
9+
defaultUser = localStorage.user
10+
}
11+
} catch (e) {
12+
13+
}
14+
15+
export default {
16+
user: defaultUser
17+
}

src/views/public/Header.vue

+62-4
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424
<em class="menuIcon icon_search"></em>
2525
</a>
2626
</div>
27-
28-
<el-dropdown class="menuItem mhide miniAccount">
27+
28+
<el-dropdown class="menuItem mhide miniAccount" v-if="user != 'Guest'">
2929
<a href="#" class="menuLink"><em class="menuIcon icon_account"></em></a>
3030
<el-dropdown-menu slot="dropdown">
3131
<el-dropdown-item>
@@ -49,6 +49,13 @@
4949
</el-dropdown-menu>
5050
</el-dropdown>
5151

52+
<a href="#"
53+
class="menuLink"
54+
v-if="user == 'Guest'"
55+
@click="dialogLoginVisible = true">
56+
<em class="menuIcon icon_account"></em>
57+
</a>
58+
5259
<mini-cart></mini-cart>
5360

5461
</div>
@@ -145,6 +152,25 @@
145152

146153
<public-search :searchIn="searchIn" v-on:searchinit="searchToggle"></public-search>
147154

155+
<el-dialog title="SIGN IN" :visible.sync="dialogLoginVisible" center width="470px">
156+
<el-form :model="form" :rules="rules" :label-position="labelPosition" ref="loginForm">
157+
<el-form-item
158+
label="Email Address:"
159+
prop="email"
160+
>
161+
<el-input v-model="form.email" autocomplete="off"></el-input>
162+
</el-form-item>
163+
<el-form-item
164+
label="Password:"
165+
prop="password">
166+
<el-input v-model="form.password" autocomplete="off"></el-input>
167+
</el-form-item>
168+
</el-form>
169+
<div slot="footer" class="dialog-footer">
170+
<el-button type="primary" @click="submitForm('loginForm')">Sign In</el-button>
171+
</div>
172+
</el-dialog>
173+
148174
</div>
149175
</template>
150176

@@ -154,6 +180,7 @@ import axios from 'axios'
154180
import MainMenu from '../menu/MainMenu'
155181
import MiniCart from '../checkout/minicart/MiniCart'
156182
import PublicSearch from './Search'
183+
import { mapState } from 'vuex'
157184
export default {
158185
name: 'PublicHeader',
159186
components: {
@@ -165,11 +192,30 @@ export default {
165192
return {
166193
menuList: [],
167194
menuStatus: null,
168-
searchIn: false
195+
searchIn: false,
196+
dialogLoginVisible: false,
197+
labelPosition: 'top',
198+
form: {
199+
email: '',
200+
password: ''
201+
},
202+
rules: {
203+
email: [
204+
{ required: true, message: 'Please enter email address.', trigger: 'blur' },
205+
{ type: 'email', message: 'Please enter a valid email address.', trigger: ['blur', 'change'] }
206+
],
207+
password: [
208+
{required: true, message: 'This is a required filed.', trigger: 'blur'}
209+
]
210+
}
169211
}
170212
},
213+
computed: {
214+
...mapState(['user'])
215+
},
171216
mounted () {
172217
this.getMainMenuData()
218+
console.log(this.user)
173219
},
174220
methods: {
175221
getMainMenuData () {
@@ -196,7 +242,19 @@ export default {
196242
} else {
197243
this.searchIn = status
198244
}
199-
}
245+
},
246+
// login valid
247+
submitForm (formName) {
248+
this.$refs[formName].validate((valid) => {
249+
if (valid) {
250+
this.dialogFormVisible = false
251+
alert('submit!')
252+
} else {
253+
console.log('error submit!!')
254+
return false
255+
}
256+
})
257+
}
200258
}
201259
}
202260
</script>

0 commit comments

Comments
 (0)