Skip to content

Commit a72be82

Browse files
新增消息中心
1 parent e82724c commit a72be82

File tree

13 files changed

+480
-15
lines changed

13 files changed

+480
-15
lines changed

.eslintrc.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ module.exports = {
1010
// allow debugger during development
1111
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
1212
'vue/no-parsing-error': [2, { 'x-invalid-end-tag': false }],
13-
'no-undef': 'off'
13+
'no-undef': 'off',
14+
'camelcase': 'off'
1415
},
1516
parserOptions: {
1617
parser: 'babel-eslint'

src/api/user.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,50 @@ export const logout = (token) => {
2828
method: 'post'
2929
})
3030
}
31+
32+
export const getMessage = () => {
33+
return axios.request({
34+
url: 'message/init',
35+
method: 'get'
36+
})
37+
}
38+
39+
export const getContentByMsgId = msg_id => {
40+
return axios.request({
41+
url: 'message/content',
42+
method: 'get',
43+
params: {
44+
msg_id
45+
}
46+
})
47+
}
48+
49+
export const hasRead = msg_id => {
50+
return axios.request({
51+
url: 'message/has_read',
52+
method: 'post',
53+
data: {
54+
msg_id
55+
}
56+
})
57+
}
58+
59+
export const removeReaded = msg_id => {
60+
return axios.request({
61+
url: 'message/remove_readed',
62+
method: 'post',
63+
data: {
64+
msg_id
65+
}
66+
})
67+
}
68+
69+
export const restoreTrash = msg_id => {
70+
return axios.request({
71+
url: 'message/restore',
72+
method: 'post',
73+
data: {
74+
msg_id
75+
}
76+
})
77+
}

src/components/main/components/user/user.less

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,8 @@
55
// height: 64px;
66
vertical-align: middle;
77
// line-height: 64px;
8+
.ivu-badge-dot{
9+
top: 16px;
10+
}
811
}
912
}

src/components/main/components/user/user.vue

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
<template>
22
<div class="user-avator-dropdown">
33
<Dropdown @on-click="handleClick">
4-
<Avatar :src="userAvator"/>
4+
<Badge :dot="!!messageUnreadCount">
5+
<Avatar :src="userAvator"/>
6+
</Badge>
57
<Icon :size="18" type="md-arrow-dropdown"></Icon>
68
<DropdownMenu slot="list">
9+
<DropdownItem name="message">
10+
消息中心<Badge style="margin-left: 10px" :count="messageUnreadCount"></Badge>
11+
</DropdownItem>
712
<DropdownItem name="logout">退出登录</DropdownItem>
813
</DropdownMenu>
914
</Dropdown>
@@ -19,20 +24,33 @@ export default {
1924
userAvator: {
2025
type: String,
2126
default: ''
27+
},
28+
messageUnreadCount: {
29+
type: Number,
30+
default: 0
2231
}
2332
},
2433
methods: {
2534
...mapActions([
2635
'handleLogOut'
2736
]),
37+
logout () {
38+
this.handleLogOut().then(() => {
39+
this.$router.push({
40+
name: 'login'
41+
})
42+
})
43+
},
44+
message () {
45+
this.$router.push({
46+
name: 'message_page'
47+
})
48+
},
2849
handleClick (name) {
2950
switch (name) {
30-
case 'logout':
31-
this.handleLogOut().then(() => {
32-
this.$router.push({
33-
name: 'login'
34-
})
35-
})
51+
case 'logout': this.logout()
52+
break
53+
case 'message': this.message()
3654
break
3755
}
3856
}

src/components/main/main.vue

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<Layout>
1313
<Header class="header-con">
1414
<header-bar :collapsed="collapsed" @on-coll-change="handleCollapsedChange">
15-
<user :user-avator="userAvator"/>
15+
<user :message-unread-count="messageUnreadCount" :user-avator="userAvator"/>
1616
<language v-if="$config.useI18n" @on-lang-change="setLocal" style="margin-right: 10px;" :lang="local"/>
1717
<error-store v-if="$config.plugin['error-store'] && $config.plugin['error-store'].showInHeader" :has-read="hasReadErrorPage" :count="errorCount"></error-store>
1818
<fullscreen v-model="isFullscreen" style="margin-right: 10px;"/>
@@ -68,7 +68,8 @@ export default {
6868
},
6969
computed: {
7070
...mapGetters([
71-
'errorCount'
71+
'errorCount',
72+
'messageUnreadCount'
7273
]),
7374
tagNavList () {
7475
return this.$store.state.app.tagNavList

src/locale/lang/en-US.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,6 @@ export default {
3535
error_logger_page: 'Error Logger',
3636
query: 'Query',
3737
params: 'Params',
38-
cropper_page: 'Cropper'
38+
cropper_page: 'Cropper',
39+
message_page: 'Message Center'
3940
}

src/locale/lang/zh-CN.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,6 @@ export default {
3535
error_logger_page: '错误日志',
3636
query: '带参路由',
3737
params: '动态路由',
38-
cropper_page: '图片裁剪'
38+
cropper_page: '图片裁剪',
39+
message_page: '消息中心'
3940
}

src/locale/lang/zh-TW.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,6 @@ export default {
3535
error_logger_page: '錯誤日誌',
3636
query: '帶參路由',
3737
params: '動態路由',
38-
cropper_page: '圖片裁剪'
38+
cropper_page: '圖片裁剪',
39+
message_page: '消息中心'
3940
}

src/mock/index.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
import Mock from 'mockjs'
22
import { login, logout, getUserInfo } from './login'
33
import { getTableData, getDragList, uploadImage } from './data'
4+
import { getMessageInit, getContentByMsgId, hasRead, removeReaded, restoreTrash } from './user'
5+
6+
// 配置Ajax请求延时,可用来测试网络延迟大时项目中一些效果
7+
Mock.setup({
8+
timeout: 1000
9+
})
410

511
// 登录相关和获取用户信息
612
Mock.mock(/\/login/, login)
@@ -10,5 +16,10 @@ Mock.mock(/\/get_table_data/, getTableData)
1016
Mock.mock(/\/get_drag_list/, getDragList)
1117
Mock.mock(/\/save_error_logger/, 'success')
1218
Mock.mock(/\/image\/upload/, uploadImage)
19+
Mock.mock(/\/message\/init/, getMessageInit)
20+
Mock.mock(/\/message\/content/, getContentByMsgId)
21+
Mock.mock(/\/message\/has_read/, hasRead)
22+
Mock.mock(/\/message\/remove_readed/, removeReaded)
23+
Mock.mock(/\/message\/restore/, restoreTrash)
1324

1425
export default Mock

src/mock/user.js

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import Mock from 'mockjs'
2+
import { doCustomTimes } from '@/libs/util'
3+
const Random = Mock.Random
4+
5+
export const getMessageInit = () => {
6+
let unreadList = []
7+
doCustomTimes(3, () => {
8+
unreadList.push(Mock.mock({
9+
title: Random.cword(10, 15),
10+
create_time: '@date',
11+
msg_id: Random.increment(100)
12+
}))
13+
})
14+
let readedList = []
15+
doCustomTimes(4, () => {
16+
readedList.push(Mock.mock({
17+
title: Random.cword(10, 15),
18+
create_time: '@date',
19+
msg_id: Random.increment(100)
20+
}))
21+
})
22+
let trashList = []
23+
doCustomTimes(2, () => {
24+
trashList.push(Mock.mock({
25+
title: Random.cword(10, 15),
26+
create_time: '@date',
27+
msg_id: Random.increment(100)
28+
}))
29+
})
30+
return {
31+
unread: unreadList,
32+
readed: readedList,
33+
trash: trashList
34+
}
35+
}
36+
37+
export const getContentByMsgId = () => {
38+
return `<divcourier new',="" monospace;font-weight:="" normal;font-size:="" 12px;line-height:="" 18px;white-space:="" pre;"=""><div>&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: medium;">这是消息内容,这个内容是使用<span style="color: rgb(255, 255, 255); background-color: rgb(28, 72, 127);">富文本编辑器</span>编辑的,所以你可以看到一些<span style="text-decoration-line: underline; font-style: italic; color: rgb(194, 79, 74);">格式</span></span></div><ol><li>你可以查看Mock返回的数据格式,和api请求的接口,来确定你的后端接口的开发</li><li>使用你的真实接口后,前端页面基本不需要修改即可满足基本需求</li><li>快来试试吧</li></ol><p>${Random.csentence(100, 200)}</p></divcourier>`
39+
}
40+
41+
export const hasRead = () => {
42+
return true
43+
}
44+
45+
export const removeReaded = () => {
46+
return true
47+
}
48+
49+
export const restoreTrash = () => {
50+
return true
51+
}

src/router/routers.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,26 @@ export default [
7878
}
7979
]
8080
},
81+
{
82+
path: '/message',
83+
name: 'message',
84+
component: Main,
85+
meta: {
86+
hideInBread: true,
87+
hideInMenu: true
88+
},
89+
children: [
90+
{
91+
path: 'message_page',
92+
name: 'message_page',
93+
meta: {
94+
icon: 'md-notifications',
95+
title: '消息中心'
96+
},
97+
component: () => import('@/view/single-page/message/index.vue')
98+
}
99+
]
100+
},
81101
{
82102
path: '/components',
83103
name: 'components',

0 commit comments

Comments
 (0)