【类 型】:feat
【原 因】:公告列表模块 发布公告模块 完善代码 【过 程】: 【影 响】: # 类型 包含: # feat:新功能(feature) # fix:修补bug # docs:文档(documentation) # style: 格式(不影响代码运行的变动) # refactor:重构(即不是新增功能,也不是修改bug的代码变动) # test:增加测试 # chore:构建过程或辅助工具的变动
This commit is contained in:
parent
0f0c18bd35
commit
755d872844
@ -421,7 +421,7 @@ const routes = [
|
|||||||
redirect: '/message/index',
|
redirect: '/message/index',
|
||||||
meta: {
|
meta: {
|
||||||
title: '公告管理',
|
title: '公告管理',
|
||||||
icon: 'iconfont icon-guanliyuan',
|
icon: 'el-icon-microphone',
|
||||||
roles: ['admin', 'editor'],
|
roles: ['admin', 'editor'],
|
||||||
tapName: 'admin'
|
tapName: 'admin'
|
||||||
},
|
},
|
||||||
@ -431,7 +431,7 @@ const routes = [
|
|||||||
component: () => import('@/views/layout/components/main/message/index'),
|
component: () => import('@/views/layout/components/main/message/index'),
|
||||||
meta: {
|
meta: {
|
||||||
title: '公告列表',
|
title: '公告列表',
|
||||||
icon: 'iconfont icon-yonghuguanli',
|
icon: 'el-icon-chat-line-square',
|
||||||
roles: ['admin', 'editor'],
|
roles: ['admin', 'editor'],
|
||||||
tapName: 'admin'
|
tapName: 'admin'
|
||||||
}
|
}
|
||||||
@ -441,7 +441,7 @@ const routes = [
|
|||||||
component: () => import('@/views/layout/components/main/message/pub'),
|
component: () => import('@/views/layout/components/main/message/pub'),
|
||||||
meta: {
|
meta: {
|
||||||
title: '发布公告',
|
title: '发布公告',
|
||||||
icon: 'iconfont icon-yonghuguanli',
|
icon: 'el-icon-microphone',
|
||||||
roles: ['admin', 'editor'],
|
roles: ['admin', 'editor'],
|
||||||
tapName: 'admin'
|
tapName: 'admin'
|
||||||
}
|
}
|
||||||
|
@ -146,19 +146,21 @@ export async function addLog (log) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @description: 向管理员用户发布公告
|
* @description: 向管理员用户发布公告
|
||||||
|
* @param {*} shop_id 商铺 ID
|
||||||
* @param {*} tit 公告标题
|
* @param {*} tit 公告标题
|
||||||
* @param {*} message 公告内容
|
* @param {*} message 公告内容
|
||||||
* @param {*} idArr 接收公告的管理员ID数组
|
* @param {*} idArr 接收公告的管理员ID数组
|
||||||
* @param {*} endTime 公告截至时间(时间戳)
|
* @param {*} endTime 公告截止时间(时间戳,秒级)
|
||||||
*/
|
*/
|
||||||
export async function pubMessage (tit, message, idArr, endTime) {
|
export async function pubMessage (shopId, tit, message, idArr, endTime) {
|
||||||
const params = new URLSearchParams()
|
const params = new URLSearchParams()
|
||||||
|
params.append('shop_id', shopId)
|
||||||
params.append('tit', tit)
|
params.append('tit', tit)
|
||||||
params.append('message', message)
|
params.append('message', message)
|
||||||
params.append('idArr', idArr.join(',')) // 后端只收字符串
|
params.append('idArr', idArr.join(',')) // 后端只收字符串
|
||||||
params.append('endTime', endTime)
|
params.append('endTime', endTime)
|
||||||
|
|
||||||
const res = await api.post('pubMessage', params, 'Admin') // 模块名根据你实际配置来
|
const res = await api.post('pubMessage', params, 'Admin') // 第三个参数为模块名
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -171,6 +173,19 @@ export async function getAllMessageList () {
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 删除指定公告
|
||||||
|
* @param {Array} delIdArr 要删除的公告 ID 数组
|
||||||
|
* @returns {Promise}
|
||||||
|
*/
|
||||||
|
export async function delMessage (delIdArr) {
|
||||||
|
const params = new URLSearchParams()
|
||||||
|
params.append('delIdArr', delIdArr.join(',')) // 后端通过 $_POST['delIdArr'] 接收
|
||||||
|
|
||||||
|
const res = await api.post('deleteMessage', params, 'Admin')
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @abstract 获取指定飞机组的飞行数据(按时间范围)
|
* @abstract 获取指定飞机组的飞行数据(按时间范围)
|
||||||
* @param {Array} idArr 飞机ID数组
|
* @param {Array} idArr 飞机ID数组
|
||||||
|
@ -2,9 +2,8 @@
|
|||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<!-- 组合按钮 -->
|
<!-- 组合按钮 -->
|
||||||
<el-button-group class="m-b-20 m-r-20">
|
<el-button-group class="m-b-20 m-r-20">
|
||||||
<el-button type="danger" icon="el-icon-delete" @click="deleteAdmin(countSelIdArr($refs.myTable.selection))">删除
|
<el-button type="danger" icon="el-icon-delete" @click="deleteMessage(countSelIdArr($refs.myTable.selection))">删除
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button type="warning" icon="el-icon-edit" @click="toEditPage()">编辑</el-button>
|
|
||||||
</el-button-group>
|
</el-button-group>
|
||||||
<!-- 用户select选项 -->
|
<!-- 用户select选项 -->
|
||||||
<el-button-group class="m-b-20">
|
<el-button-group class="m-b-20">
|
||||||
@ -45,11 +44,11 @@
|
|||||||
|
|
||||||
<!-- 操作 -->
|
<!-- 操作 -->
|
||||||
<el-table-column label="操作" width="220" fixed="right">
|
<el-table-column label="操作" width="220" fixed="right">
|
||||||
|
<template slot-scope="scope">
|
||||||
<el-button-group>
|
<el-button-group>
|
||||||
<el-button type="warning" icon="el-icon-edit"
|
<el-button type="danger" icon="el-icon-delete" @click="deleteMessage([scope.row.id])">删除</el-button>
|
||||||
@click="$router.replace(`/admin/edit/${scope.row.id}`)">编辑</el-button>
|
|
||||||
<el-button type="danger" icon="el-icon-delete" @click="deleteAdmin([scope.row.id])">删除</el-button>
|
|
||||||
</el-button-group>
|
</el-button-group>
|
||||||
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
@ -64,7 +63,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import { parseTime, countSelIdArr } from '@/utils'
|
import { parseTime, countSelIdArr } from '@/utils'
|
||||||
import SelectionShopId from '@/components/SelectionShopId'
|
import SelectionShopId from '@/components/SelectionShopId'
|
||||||
import { getAllMessageList } from '@/utils/api/table'
|
import { getAllMessageList, delMessage } from '@/utils/api/table'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Admin',
|
name: 'Admin',
|
||||||
@ -95,6 +94,7 @@ export default {
|
|||||||
this.getAllMessageList()
|
this.getAllMessageList()
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
countSelIdArr,
|
||||||
parseTime,
|
parseTime,
|
||||||
// 获取公告列表
|
// 获取公告列表
|
||||||
async getAllMessageList () {
|
async getAllMessageList () {
|
||||||
@ -104,10 +104,31 @@ export default {
|
|||||||
} else {
|
} else {
|
||||||
this.$message.error(res.msg)
|
this.$message.error(res.msg)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
},
|
},
|
||||||
filters: {
|
// 删除指定公告
|
||||||
countSelIdArr
|
deleteMessage (idArr) {
|
||||||
|
if (!idArr || idArr.length === 0) {
|
||||||
|
this.$message.error('未勾选记录')
|
||||||
|
} else {
|
||||||
|
this.$confirm('请谨慎操作,确认删除这些公告?', '提示', {
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning'
|
||||||
|
}).then(() => {
|
||||||
|
delMessage(idArr).then(res => {
|
||||||
|
if (res.data.status === 1) {
|
||||||
|
this.$message.success(res.data.msg)
|
||||||
|
this.getAllMessageList() // 刷新列表
|
||||||
|
} else {
|
||||||
|
this.$message.error(res.data.msg)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}).catch(() => {
|
||||||
|
this.$message.info('取消操作')
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,19 +11,38 @@
|
|||||||
</el-header>
|
</el-header>
|
||||||
<el-main class="border p-20">
|
<el-main class="border p-20">
|
||||||
<el-form label-width="120px">
|
<el-form label-width="120px">
|
||||||
|
<el-form-item label="所属商铺">
|
||||||
|
<SelectionShopId v-model="form.shop_id" :allSel="true" />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="公告接收者">
|
||||||
|
<el-checkbox v-model="allSelected" @change="handleCheckAll" style="margin-bottom: 10px;">
|
||||||
|
全选
|
||||||
|
</el-checkbox>
|
||||||
|
<el-checkbox-group v-model="form.idArr" @change="updateAllSelected">
|
||||||
|
<el-checkbox
|
||||||
|
v-for="admin in filteredAdminList"
|
||||||
|
:key="admin.id"
|
||||||
|
:label="admin.id">
|
||||||
|
{{ admin.name }}
|
||||||
|
</el-checkbox>
|
||||||
|
</el-checkbox-group>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="公告标题">
|
<el-form-item label="公告标题">
|
||||||
<el-input v-model="form.tit" placeholder="请输入公告标题" maxlength="50" show-word-limit />
|
<el-input v-model="form.tit" placeholder="请输入公告标题" maxlength="50" show-word-limit />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="公告信息">
|
<el-form-item label="公告信息">
|
||||||
<el-input v-model="form.message" type="textarea" placeholder="请输入公告内容" :rows="5" maxlength="80"
|
<el-input v-model="form.message" type="textarea" placeholder="请输入公告内容" :rows="5" maxlength="80" show-word-limit />
|
||||||
show-word-limit />
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="显示截止日期">
|
<el-form-item label="显示截止日期">
|
||||||
<el-date-picker v-model="form.date" type="date" placeholder="选择日期" format="yyyy 年 MM 月 dd 日"
|
<el-date-picker v-model="form.date" type="date" placeholder="选择日期" format="yyyy 年 MM 月 dd 日" value-format="timestamp" />
|
||||||
value-format="timestamp" />
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" icon="el-icon-edit" :loading="loading" @click="pubMessage()">
|
<el-button type="primary" icon="el-icon-edit" :loading="loading" @click="submitMessage">
|
||||||
发布公告
|
发布公告
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -37,33 +56,56 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { pubMessage } from '@/utils/api/table'
|
import { pubMessage } from '@/utils/api/table'
|
||||||
|
import SelectionShopId from '@/components/SelectionShopId'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'message',
|
name: 'message',
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
form: {
|
form: {
|
||||||
|
shop_id: '',
|
||||||
date: '',
|
date: '',
|
||||||
message: '',
|
message: '',
|
||||||
tit: ''
|
tit: '',
|
||||||
|
idArr: []
|
||||||
},
|
},
|
||||||
loading: false
|
loading: false,
|
||||||
|
allSelected: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
components: {
|
||||||
|
SelectionShopId
|
||||||
|
},
|
||||||
computed: {
|
computed: {
|
||||||
// 从 Vuex 中获取用户 ID 列表
|
adminList () {
|
||||||
idArr () {
|
return this.$store.state.adminList || []
|
||||||
return this.$store.state.app.toMessageIdArr
|
},
|
||||||
|
filteredAdminList () {
|
||||||
|
if (!this.form.shop_id) return this.adminList
|
||||||
|
return this.adminList.filter(admin => admin.shop_id === this.form.shop_id)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created () {
|
watch: {
|
||||||
|
'form.shop_id' () {
|
||||||
|
this.form.idArr = []
|
||||||
|
this.allSelected = false
|
||||||
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
async pubMessage () {
|
handleCheckAll (checked) {
|
||||||
// 判断 idArr 是否为空
|
this.form.idArr = checked ? this.filteredAdminList.map(admin => admin.id) : []
|
||||||
if (!this.idArr || this.idArr.length === 0) {
|
},
|
||||||
|
updateAllSelected () {
|
||||||
|
const filteredIds = this.filteredAdminList.map(admin => admin.id)
|
||||||
|
this.allSelected = this.form.idArr.length === filteredIds.length && filteredIds.length > 0
|
||||||
|
},
|
||||||
|
async submitMessage () {
|
||||||
|
if (!this.form.shop_id) {
|
||||||
|
this.$message.warning('请选择所属商铺')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (!this.form.idArr || this.form.idArr.length === 0) {
|
||||||
this.$message.warning('接收用户为空,请重新操作')
|
this.$message.warning('接收用户为空,请重新操作')
|
||||||
this.$router.push('/admin/index')
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (!this.form.tit) {
|
if (!this.form.tit) {
|
||||||
@ -79,19 +121,37 @@ export default {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const endTime = Math.floor(new Date(this.form.date).setHours(23, 59, 59, 999) / 1000)// 取日历选择的 当天最后一秒
|
const endTime = Math.floor(new Date(this.form.date).setHours(23, 59, 59, 999) / 1000)
|
||||||
|
|
||||||
const res = await pubMessage(this.form.tit, this.form.message, this.idArr, endTime)
|
this.loading = true
|
||||||
|
try {
|
||||||
|
const res = await pubMessage(
|
||||||
|
this.form.shop_id,
|
||||||
|
this.form.tit,
|
||||||
|
this.form.message,
|
||||||
|
this.form.idArr,
|
||||||
|
endTime
|
||||||
|
)
|
||||||
|
|
||||||
if (res.data.status === 1) {
|
if (res?.data?.status === 1) {
|
||||||
this.$message.success(res.data.msg)
|
this.$message.success(res.data.msg)
|
||||||
this.form.message = ''
|
this.form = {
|
||||||
this.form.date = ''
|
shop_id: '',
|
||||||
this.form.tit = ''
|
date: '',
|
||||||
// 跳转到首页
|
message: '',
|
||||||
this.$router.push('/admin/index')
|
tit: '',
|
||||||
|
idArr: []
|
||||||
|
}
|
||||||
|
this.allSelected = false
|
||||||
|
this.$router.push('/message/index')
|
||||||
} else {
|
} else {
|
||||||
this.$message.error(res.data.msg || '公告发布失败')
|
this.$message.error(res?.data?.msg || '公告发布失败')
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.error('发布公告失败:', err)
|
||||||
|
this.$message.error('网络错误')
|
||||||
|
} finally {
|
||||||
|
this.loading = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user