diff --git a/src/router/index.js b/src/router/index.js
index adaba67..9a73165 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -310,6 +310,17 @@ const routes = [
tapName: 'admin',
hidden: true
}
+ },
+ {
+ path: '/admin/message',
+ component: () => import('@/views/layout/components/main/admin/message'),
+ meta: {
+ title: '发布公告',
+ icon: 'el-icon-microphone',
+ roles: ['admin', 'editor'],
+ tapName: 'admin',
+ hidden: true
+ }
}
]
},
diff --git a/src/store/index.js b/src/store/index.js
index ffd5060..b5c4dc1 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -5,7 +5,7 @@ import app from './modules/app'
import settings from './modules/settings'
import user from './modules/user'
import api from '@/utils/api'
-import { Message, MessageBox } from 'element-ui'
+import { Message, MessageBox, Notification } from 'element-ui'
// 把vuex作为插件引入到Vue示例中 ps:注册
Vue.use(Vuex)
@@ -23,6 +23,7 @@ const store = new Vuex.Store({
skuList: [], // 商品sku列表
paidOrderList: [], // 已付款 和已退款但是发货状态为 已发货 订单列表
logList: [], // 操作日志列表
+ messageList: [], // 管理员公告列表
crosFrequency: null// 对频macadd
},
mutations: {
@@ -102,6 +103,13 @@ const store = new Vuex.Store({
insertNewLog (state, logData) {
state.logList.push(logData)
},
+ /**
+ * @description: 向管理员公告列表最后插入新的信息
+ * @param {*} list
+ */
+ setMessageList (state, list) {
+ state.messageList = list
+ },
/**
* @description: 登记对频信息
*/
@@ -980,6 +988,34 @@ const store = new Vuex.Store({
}
return res
},
+ /**
+ * @description: 异步获取管理员消息列表 成功获取之后 弹出通知框 显示列表
+ */
+ async fetchMessageList ({ commit }) {
+ const res = await api.get('getMessageList', 'Admin')
+
+ if (res.data.status === 1) {
+ const list = res.data.messageList || []
+ commit('setMessageList', list)
+
+ // 每条通知之间延迟 800ms,显示时间为 8000ms
+ list.forEach((item, index) => {
+ setTimeout(() => {
+ Notification({
+ title: item.tit || '通知',
+ message: item.message || '',
+ duration: 8000, // 显示时间 8 秒
+ type: 'info' // 可选类型: success / warning / error / info
+ })
+ }, index * 800)
+ })
+ } else {
+ Message.error(res.data.msg || '获取消息失败')
+ commit('setMessageList', [])
+ }
+
+ return res
+ },
/**
* @description: 向操作日志插入信息 并在积攒多条之后 向服务器提交
* @param {logData} content 日志内容 logData.color 时间
diff --git a/src/store/modules/app.js b/src/store/modules/app.js
index 50c55f4..e6d0297 100644
--- a/src/store/modules/app.js
+++ b/src/store/modules/app.js
@@ -5,7 +5,10 @@ const state = {
isWideScreen: window.innerWidth < 480, // 屏幕宽度是否小于480
defaultLonLat: null, // 地图默认经纬度
defaultZoom: null, // 地图默认缩放
- orderSerch: null// 订单列表页搜索条件
+ orderSerch: null, // 订单列表页搜索条件
+
+ /* 页面临时传参 */
+ toMessageIdArr: [] // 用户管理 发布公告页面 id临时传参
}
const mutations = {
@@ -50,6 +53,11 @@ const mutations = {
// 存储到 localStorage
localStorage.setItem('orderSerch', JSON.stringify(state.orderSerch))
+ },
+
+ /* 临时传参 */
+ setToMessageIdArr (state, idArr) {
+ state.toMessageIdArr = idArr
}
}
diff --git a/src/utils/api/table.js b/src/utils/api/table.js
index e3e9aae..7c15488 100644
--- a/src/utils/api/table.js
+++ b/src/utils/api/table.js
@@ -143,3 +143,21 @@ export async function addLog (log) {
const res = await api.post('addLog', params)
return res
}
+
+/**
+ * @description: 向管理员用户发布公告
+ * @param {*} tit 公告标题
+ * @param {*} message 公告内容
+ * @param {*} idArr 接收公告的管理员ID数组
+ * @param {*} endTime 公告截至时间(时间戳)
+ */
+export async function pubMessage (tit, message, idArr, endTime) {
+ const params = new URLSearchParams()
+ params.append('tit', tit)
+ params.append('message', message)
+ params.append('idArr', idArr.join(',')) // 后端只收字符串
+ params.append('endTime', endTime)
+
+ const res = await api.post('pubMessage', params, 'Admin') // 模块名根据你实际配置来
+ return res
+}
diff --git a/src/views/layout/components/main/admin/index.vue b/src/views/layout/components/main/admin/index.vue
index 77195f8..14e29b6 100644
--- a/src/views/layout/components/main/admin/index.vue
+++ b/src/views/layout/components/main/admin/index.vue
@@ -6,6 +6,7 @@
删除
编辑
+ 发布公告
@@ -32,12 +33,13 @@
{{ scope.row.addtime | parseTime('{y}-{m}-{d}') }}
-
+
编辑
删除
+ 发布公告
@@ -101,6 +103,17 @@ export default {
this.$message.error('只能选择一条记录')
}
},
+ /**
+ * @description: 跳转到发布公告页面
+ */
+ toMessagePage (selIdArr) {
+ if (selIdArr.length === 0) {
+ this.$message.error('请选择至少一个用户')
+ } else {
+ this.$store.commit('app/setToMessageIdArr', selIdArr)// 传参
+ this.$router.push('/admin/message/')
+ }
+ },
/**
* @description: 删除用户
*/
diff --git a/src/views/layout/components/main/admin/message.vue b/src/views/layout/components/main/admin/message.vue
index 40bccbc..392215f 100644
--- a/src/views/layout/components/main/admin/message.vue
+++ b/src/views/layout/components/main/admin/message.vue
@@ -11,30 +11,19 @@
-
-
+
+
+
+
+
-
+
-
+
发布公告
@@ -55,7 +44,8 @@ export default {
return {
form: {
date: '',
- message: ''
+ message: '',
+ tit: ''
},
loading: false
}
@@ -66,37 +56,42 @@ export default {
return this.$store.state.app.toMessageIdArr
}
},
+ created () {
+ },
methods: {
async pubMessage () {
- // 校验内容
- if (!this.form.message.trim()) {
+ // 判断 idArr 是否为空
+ if (!this.idArr || this.idArr.length === 0) {
+ this.$message.warning('接收用户为空,请重新操作')
+ this.$router.push('/admin/index')
+ return
+ }
+ if (!this.form.tit) {
+ this.$message.error('请输入公告标题')
+ return
+ }
+ if (!this.form.message) {
this.$message.error('请输入公告内容')
return
}
if (!this.form.date) {
- this.$message.error('请选择显示截止日期')
- return
- }
- if (!this.ids.length) {
- this.$message.error('接收用户为空,请重新操作')
+ this.$message.error('请选择截止日期')
return
}
- this.loading = true
- try {
- const res = await pubMessage(this.form.message, this.ids, this.form.date)
- if (res.status === 1) {
- this.$message.success(res.msg || '公告发布成功')
- this.form.message = ''
- this.form.date = ''
- } else {
- this.$message.error(res.msg || '公告发布失败')
- }
- } catch (error) {
- this.$message.error('接口请求失败')
- console.error(error)
- } finally {
- this.loading = false
+ const endTime = Math.floor(new Date(this.form.date).getTime() / 1000 + 86400)
+
+ const res = await pubMessage(this.form.tit, this.form.message, this.idArr, endTime)
+
+ if (res.data.status === 1) {
+ this.$message.success(res.data.msg)
+ this.form.message = ''
+ this.form.date = ''
+ this.form.tit = ''
+ // 跳转到首页
+ this.$router.push('/admin/index')
+ } else {
+ this.$message.error(res.data.msg || '公告发布失败')
}
}
}
diff --git a/src/views/layout/index.vue b/src/views/layout/index.vue
index 4168012..8076ad6 100644
--- a/src/views/layout/index.vue
+++ b/src/views/layout/index.vue
@@ -69,6 +69,7 @@ export default {
this.$store.dispatch('fetchSpuList')// 获取商品spu列表
this.$store.dispatch('fetchSkuList')// 获取商品sku列表
this.$store.dispatch('fetchPaidOrderList')// 获取订单列表
+ this.$store.dispatch('fetchMessageList')// 获取管理员公告列表
},
watch: {
/**