【类 型】: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',
|
||||
meta: {
|
||||
title: '公告管理',
|
||||
icon: 'iconfont icon-guanliyuan',
|
||||
icon: 'el-icon-microphone',
|
||||
roles: ['admin', 'editor'],
|
||||
tapName: 'admin'
|
||||
},
|
||||
@ -431,7 +431,7 @@ const routes = [
|
||||
component: () => import('@/views/layout/components/main/message/index'),
|
||||
meta: {
|
||||
title: '公告列表',
|
||||
icon: 'iconfont icon-yonghuguanli',
|
||||
icon: 'el-icon-chat-line-square',
|
||||
roles: ['admin', 'editor'],
|
||||
tapName: 'admin'
|
||||
}
|
||||
@ -441,7 +441,7 @@ const routes = [
|
||||
component: () => import('@/views/layout/components/main/message/pub'),
|
||||
meta: {
|
||||
title: '发布公告',
|
||||
icon: 'iconfont icon-yonghuguanli',
|
||||
icon: 'el-icon-microphone',
|
||||
roles: ['admin', 'editor'],
|
||||
tapName: 'admin'
|
||||
}
|
||||
|
@ -146,19 +146,21 @@ export async function addLog (log) {
|
||||
|
||||
/**
|
||||
* @description: 向管理员用户发布公告
|
||||
* @param {*} shop_id 商铺 ID
|
||||
* @param {*} tit 公告标题
|
||||
* @param {*} message 公告内容
|
||||
* @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()
|
||||
params.append('shop_id', shopId)
|
||||
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') // 模块名根据你实际配置来
|
||||
const res = await api.post('pubMessage', params, 'Admin') // 第三个参数为模块名
|
||||
return res
|
||||
}
|
||||
|
||||
@ -171,6 +173,19 @@ export async function getAllMessageList () {
|
||||
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 获取指定飞机组的飞行数据(按时间范围)
|
||||
* @param {Array} idArr 飞机ID数组
|
||||
|
@ -2,9 +2,8 @@
|
||||
<div class="app-container">
|
||||
<!-- 组合按钮 -->
|
||||
<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 type="warning" icon="el-icon-edit" @click="toEditPage()">编辑</el-button>
|
||||
</el-button-group>
|
||||
<!-- 用户select选项 -->
|
||||
<el-button-group class="m-b-20">
|
||||
@ -45,11 +44,11 @@
|
||||
|
||||
<!-- 操作 -->
|
||||
<el-table-column label="操作" width="220" fixed="right">
|
||||
<el-button-group>
|
||||
<el-button type="warning" icon="el-icon-edit"
|
||||
@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>
|
||||
<template slot-scope="scope">
|
||||
<el-button-group>
|
||||
<el-button type="danger" icon="el-icon-delete" @click="deleteMessage([scope.row.id])">删除</el-button>
|
||||
</el-button-group>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
@ -64,7 +63,7 @@
|
||||
<script>
|
||||
import { parseTime, countSelIdArr } from '@/utils'
|
||||
import SelectionShopId from '@/components/SelectionShopId'
|
||||
import { getAllMessageList } from '@/utils/api/table'
|
||||
import { getAllMessageList, delMessage } from '@/utils/api/table'
|
||||
|
||||
export default {
|
||||
name: 'Admin',
|
||||
@ -95,6 +94,7 @@ export default {
|
||||
this.getAllMessageList()
|
||||
},
|
||||
methods: {
|
||||
countSelIdArr,
|
||||
parseTime,
|
||||
// 获取公告列表
|
||||
async getAllMessageList () {
|
||||
@ -104,10 +104,31 @@ export default {
|
||||
} else {
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
},
|
||||
// 删除指定公告
|
||||
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('取消操作')
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
filters: {
|
||||
countSelIdArr
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -11,19 +11,38 @@
|
||||
</el-header>
|
||||
<el-main class="border p-20">
|
||||
<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-input v-model="form.tit" placeholder="请输入公告标题" maxlength="50" show-word-limit />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="公告信息">
|
||||
<el-input v-model="form.message" type="textarea" placeholder="请输入公告内容" :rows="5" maxlength="80"
|
||||
show-word-limit />
|
||||
<el-input v-model="form.message" type="textarea" placeholder="请输入公告内容" :rows="5" maxlength="80" show-word-limit />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="显示截止日期">
|
||||
<el-date-picker v-model="form.date" type="date" placeholder="选择日期" format="yyyy 年 MM 月 dd 日"
|
||||
value-format="timestamp" />
|
||||
<el-date-picker v-model="form.date" type="date" placeholder="选择日期" format="yyyy 年 MM 月 dd 日" value-format="timestamp" />
|
||||
</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-form-item>
|
||||
@ -37,33 +56,56 @@
|
||||
|
||||
<script>
|
||||
import { pubMessage } from '@/utils/api/table'
|
||||
import SelectionShopId from '@/components/SelectionShopId'
|
||||
|
||||
export default {
|
||||
name: 'message',
|
||||
data () {
|
||||
return {
|
||||
form: {
|
||||
shop_id: '',
|
||||
date: '',
|
||||
message: '',
|
||||
tit: ''
|
||||
tit: '',
|
||||
idArr: []
|
||||
},
|
||||
loading: false
|
||||
loading: false,
|
||||
allSelected: false
|
||||
}
|
||||
},
|
||||
components: {
|
||||
SelectionShopId
|
||||
},
|
||||
computed: {
|
||||
// 从 Vuex 中获取用户 ID 列表
|
||||
idArr () {
|
||||
return this.$store.state.app.toMessageIdArr
|
||||
adminList () {
|
||||
return this.$store.state.adminList || []
|
||||
},
|
||||
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: {
|
||||
async pubMessage () {
|
||||
// 判断 idArr 是否为空
|
||||
if (!this.idArr || this.idArr.length === 0) {
|
||||
handleCheckAll (checked) {
|
||||
this.form.idArr = checked ? this.filteredAdminList.map(admin => admin.id) : []
|
||||
},
|
||||
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.$router.push('/admin/index')
|
||||
return
|
||||
}
|
||||
if (!this.form.tit) {
|
||||
@ -79,19 +121,37 @@ export default {
|
||||
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) {
|
||||
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 || '公告发布失败')
|
||||
if (res?.data?.status === 1) {
|
||||
this.$message.success(res.data.msg)
|
||||
this.form = {
|
||||
shop_id: '',
|
||||
date: '',
|
||||
message: '',
|
||||
tit: '',
|
||||
idArr: []
|
||||
}
|
||||
this.allSelected = false
|
||||
this.$router.push('/message/index')
|
||||
} else {
|
||||
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