1
0
mirror of https://github.com/FatttSnake/Pinnacle-OA.git synced 2026-04-04 22:41:24 +08:00

add the function of addNoticeType

This commit is contained in:
cccccyb
2023-05-23 03:26:40 +08:00
parent f65e339d5c
commit 0b72c3bf0b
20 changed files with 339 additions and 137 deletions

View File

@@ -27,6 +27,7 @@ public class DepartmentController {
@Autowired @Autowired
IDepartmentService departmentService; IDepartmentService departmentService;
//获取所有部门及其各部门所属成员
@GetMapping @GetMapping
public ResponseResult getDepartAndUser(){ public ResponseResult getDepartAndUser(){
List<Department> getDepartAndUser = departmentService.getDepartAndUser(); List<Department> getDepartAndUser = departmentService.getDepartAndUser();

View File

@@ -58,7 +58,7 @@ public class NoticeController {
} }
//根据登录用户id查询所接收的公告 //根据登录用户id查询所接收的公告
@GetMapping("/ByUserId") @GetMapping("/self")
public ResponseResult selectByUserId(Integer readStatus) { public ResponseResult selectByUserId(Integer readStatus) {
List<Notice> noticesByUserId = noticeReceiveService.selectByUserId(readStatus); List<Notice> noticesByUserId = noticeReceiveService.selectByUserId(readStatus);
Integer code = noticesByUserId != null ? ResponseCode.DATABASE_SELECT_OK : ResponseCode.DATABASE_SELECT_ERROR; Integer code = noticesByUserId != null ? ResponseCode.DATABASE_SELECT_OK : ResponseCode.DATABASE_SELECT_ERROR;
@@ -67,7 +67,7 @@ public class NoticeController {
} }
//修改登录用户所接收公告的阅读状态 //修改登录用户所接收公告的阅读状态
@PutMapping("/modifyNoticeIsRead") @PutMapping("/modify_notice_read")
public ResponseResult modifyNoticeIsRead(@RequestBody Notice notice) { public ResponseResult modifyNoticeIsRead(@RequestBody Notice notice) {
boolean updateById = false; boolean updateById = false;
if (null != notice) { if (null != notice) {
@@ -86,8 +86,8 @@ public class NoticeController {
return ResponseResult.build(updateById ? ResponseCode.DATABASE_UPDATE_OK : ResponseCode.DATABASE_UPDATE_ERROR, msg, updateById); return ResponseResult.build(updateById ? ResponseCode.DATABASE_UPDATE_OK : ResponseCode.DATABASE_UPDATE_ERROR, msg, updateById);
} }
//更新公告置顶 //修改公告置顶状态
@PutMapping("/updateNoticeTop") @PutMapping("/update_notice_top")
public ResponseResult updateNoticeTop(@RequestBody Notice notice) { public ResponseResult updateNoticeTop(@RequestBody Notice notice) {
String operationMessage = notice.getTop() == 1 ? "取消置顶" : "置顶"; String operationMessage = notice.getTop() == 1 ? "取消置顶" : "置顶";
boolean updateResult = noticeService.updateNoticeTop(notice); boolean updateResult = noticeService.updateNoticeTop(notice);

View File

@@ -21,7 +21,7 @@ import java.util.List;
* @since 2023-04-30 * @since 2023-04-30
*/ */
@RestController @RestController
@RequestMapping("/noticeType") @RequestMapping("/notice_type")
@CrossOrigin @CrossOrigin
public class NoticeTypeController { public class NoticeTypeController {
private final Logger LOGGER = LoggerFactory.getLogger(getClass()); private final Logger LOGGER = LoggerFactory.getLogger(getClass());
@@ -29,6 +29,7 @@ public class NoticeTypeController {
@Autowired @Autowired
INoticeTypeService noticeTypeService; INoticeTypeService noticeTypeService;
//查询已启用的公告类型
@GetMapping("/enable") @GetMapping("/enable")
public ResponseResult selectEnableTypeList(){ public ResponseResult selectEnableTypeList(){
List<NoticeType> selectTypeName = noticeTypeService.selectEnableTypeList(); List<NoticeType> selectTypeName = noticeTypeService.selectEnableTypeList();
@@ -37,6 +38,7 @@ public class NoticeTypeController {
return ResponseResult.build(code, msg, selectTypeName); return ResponseResult.build(code, msg, selectTypeName);
} }
//查询所有公告类型
@GetMapping @GetMapping
public ResponseResult selectTypeList(){ public ResponseResult selectTypeList(){
List<NoticeType> selectTypeList = noticeTypeService.selectTypeList(); List<NoticeType> selectTypeList = noticeTypeService.selectTypeList();
@@ -45,6 +47,7 @@ public class NoticeTypeController {
return ResponseResult.build(code, msg, selectTypeList); return ResponseResult.build(code, msg, selectTypeList);
} }
//修改公告类型启用或禁用
@GetMapping("/update") @GetMapping("/update")
public ResponseResult updateTypeEnableById(String typeId,Boolean enable){ public ResponseResult updateTypeEnableById(String typeId,Boolean enable){
Long tid=null; Long tid=null;
@@ -57,4 +60,12 @@ public class NoticeTypeController {
String msg = updateEnableById ? "" : "修改失败,请重试!"; String msg = updateEnableById ? "" : "修改失败,请重试!";
return ResponseResult.build(updateEnableById ? ResponseCode.DATABASE_UPDATE_OK : ResponseCode.DATABASE_UPDATE_ERROR, msg, updateEnableById); return ResponseResult.build(updateEnableById ? ResponseCode.DATABASE_UPDATE_OK : ResponseCode.DATABASE_UPDATE_ERROR, msg, updateEnableById);
} }
//添加公告类型
@PostMapping
public ResponseResult addNoticeType(NoticeType noticeType){
Boolean insertNotice = noticeTypeService.addNoticeType(noticeType);
String msg = insertNotice ? "" : "数据添加失败,请重试!";
return ResponseResult.build(insertNotice ? ResponseCode.DATABASE_SAVE_OK : ResponseCode.DATABASE_SAVE_ERROR, msg, insertNotice);
}
} }

View File

@@ -19,4 +19,6 @@ public interface INoticeTypeService extends IService<NoticeType> {
Boolean updateTypeEnableById(Long typeId, Integer enable); Boolean updateTypeEnableById(Long typeId, Integer enable);
Boolean addNoticeType(NoticeType noticeType);
} }

View File

@@ -47,4 +47,9 @@ public class NoticeTypeServiceImpl extends ServiceImpl<NoticeTypeMapper, NoticeT
luw.eq(null!=typeId,NoticeType::getId, typeId).set(null!=enable,NoticeType::getEnable,enable); luw.eq(null!=typeId,NoticeType::getId, typeId).set(null!=enable,NoticeType::getEnable,enable);
return noticeTypeMapper.update(null, luw)>0; return noticeTypeMapper.update(null, luw)>0;
} }
@Override
public Boolean addNoticeType(NoticeType noticeType) {
return noticeTypeMapper.insert(noticeType)>0;
}
} }

View File

@@ -6,7 +6,7 @@
<el-form-item label="公告类型" prop="typeId"> <el-form-item label="公告类型" prop="typeId">
<el-select v-model="addData.typeId" filterable placeholder="请选择公告类型"> <el-select v-model="addData.typeId" filterable placeholder="请选择公告类型">
<el-option <el-option
v-for="item in EnableNoticeTypeList" v-for="item in enableNoticeTypeList"
:key="item.id" :key="item.id"
:label="item.name" :label="item.name"
:value="item.id" :value="item.id"
@@ -44,7 +44,14 @@
</el-form-item> </el-form-item>
</el-row> </el-row>
<el-form-item label="是否置顶" prop="top"> <el-form-item label="是否置顶" prop="top">
<el-switch v-model="addData.top" inline-prompt active-text="是" inactive-text="否" /> <el-switch
v-model="addData.top"
inline-prompt
active-text="是"
inactive-text="否"
:active-value="1"
:inactive-value="0"
/>
</el-form-item> </el-form-item>
<el-form-item label="公告优先级" prop="priority"> <el-form-item label="公告优先级" prop="priority">
<el-slider v-model="addData.priority" show-input show-stops :max="15" size="large" /> <el-slider v-model="addData.priority" show-input show-stops :max="15" size="large" />
@@ -89,12 +96,13 @@
</template> </template>
<script lang="js"> <script lang="js">
import { useNoticeStore } from '@/store/notice' import { useNoticeStore, useNoticeTypeStore } from '@/store/notice'
import { mapState } from 'pinia' import { mapState } from 'pinia'
const noticeStore = useNoticeStore() const noticeStore = useNoticeStore()
export default { export default {
computed:{ computed:{
...mapState(useNoticeStore,['EnableNoticeTypeList','departmentList','noticeShowData']) ...mapState(useNoticeStore,['departmentList','noticeShowData']),
...mapState(useNoticeTypeStore,['enableNoticeTypeList'])
}, },
data() { data() {
return { return {
@@ -105,7 +113,7 @@ export default {
typeId: '', typeId: '',
sendTime: '', sendTime: '',
endTime: '', endTime: '',
top: false, top: 0,
priority: 1, priority: 1,
content: '', content: '',
receivers:[] receivers:[]
@@ -136,7 +144,6 @@ export default {
}, },
methods: { methods: {
submitForm() { submitForm() {
this.addData.top=this.addData.top?1:0;
const receiveId=[] const receiveId=[]
if (this.addData.receivers.length!=null){ if (this.addData.receivers.length!=null){
for (let i = 0; i < this.addData.receivers.length; i++) { for (let i = 0; i < this.addData.receivers.length; i++) {

View File

@@ -17,7 +17,7 @@
<el-form-item label="公告类型:" prop="type"> <el-form-item label="公告类型:" prop="type">
<el-select v-model="search_info.type" placeholder="请选择公告类型"> <el-select v-model="search_info.type" placeholder="请选择公告类型">
<el-option <el-option
v-for="item in EnableNoticeTypeList" v-for="item in enableNoticeTypeList"
:key="item.id" :key="item.id"
:label="item.name" :label="item.name"
:value="item.name" :value="item.name"
@@ -59,10 +59,8 @@
<script lang="ts"> <script lang="ts">
import { COLOR_PRODUCTION, SIZE_ICON_MD, SIZE_ICON_SM } from '@/constants/Common.constants' import { COLOR_PRODUCTION, SIZE_ICON_MD, SIZE_ICON_SM } from '@/constants/Common.constants'
import _ from 'lodash' import _ from 'lodash'
import { useNoticeStore } from '@/store/notice' import { useNoticeTypeStore } from '@/store/notice'
import { mapState } from 'pinia' import { mapState } from 'pinia'
// const noticeStore = useNoticeStore()
export default { export default {
name: 'NoticeHead', name: 'NoticeHead',
data() { data() {
@@ -111,7 +109,7 @@ export default {
} }
}, },
computed: { computed: {
...mapState(useNoticeStore, ['EnableNoticeTypeList']) ...mapState(useNoticeTypeStore, ['enableNoticeTypeList'])
} }
} }
</script> </script>

View File

@@ -17,13 +17,14 @@
}" }"
> >
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column <el-table-column type="index" label="序号" width="75" align="center">
type="index" <template #default="scope">
label="序号" <el-icon :size="SIZE_ICON_SM()" :color="COLOR_TOP()" v-if="scope.row.top === 1">
width="70" <icon-pinnacle-top />
align="center" </el-icon>
:index="computeIndex" {{ (this.currentPage - 1) * this.pageSize + scope.$index + 1 }}
/> </template>
</el-table-column>
<el-table-column <el-table-column
prop="title" prop="title"
label="公告标题" label="公告标题"
@@ -36,7 +37,13 @@
<template #default="scope"> <template #default="scope">
<el-tag <el-tag
size="default" size="default"
:type="scope.row.noticeType.name === '通知公告' ? 'warning' : 'success'" :type="
scope.row.noticeType.name === '通知公告'
? 'warning'
: scope.row.noticeType.name === '紧急公告'
? 'danger'
: 'success'
"
disable-transitions disable-transitions
> >
{{ scope.row.noticeType.name }} {{ scope.row.noticeType.name }}
@@ -88,10 +95,10 @@
</el-table-column> </el-table-column>
<el-table-column label="操作" min-width="200px" align="center"> <el-table-column label="操作" min-width="200px" align="center">
<template #default="scope"> <template #default="scope">
<el-button size="small" color="#626aef" @click="handleShow(scope.$index, scope.row)" <el-button size="small" color="#626aef" @click="handleShow(scope.row)"
>查看 >查看
</el-button> </el-button>
<el-button size="small" type="primary" @click="handleEdit(scope.$index, scope.row)" <el-button size="small" type="primary" @click="handleEdit(scope.row)"
>编辑 >编辑
</el-button> </el-button>
<el-button size="small" type="danger" @click="handleDeleteById(scope.row.id)" <el-button size="small" type="danger" @click="handleDeleteById(scope.row.id)"
@@ -126,7 +133,7 @@
<template #header> <template #header>
<h2 style="color: red">编辑公告</h2> <h2 style="color: red">编辑公告</h2>
</template> </template>
<commitForm /> <notice-commit-form />
</el-dialog> </el-dialog>
<!-- 查看会话框--> <!-- 查看会话框-->
<el-dialog <el-dialog
@@ -146,6 +153,7 @@
import _ from 'lodash' import _ from 'lodash'
import { mapState } from 'pinia' import { mapState } from 'pinia'
import { useNoticeStore } from '@/store/notice' import { useNoticeStore } from '@/store/notice'
import { COLOR_TOP, SIZE_ICON_MD, SIZE_ICON_SM } from '@/constants/Common.constants'
const noticeStore = useNoticeStore() const noticeStore = useNoticeStore()
@@ -172,8 +180,14 @@ export default {
}, },
props: [], props: [],
methods: { methods: {
computeIndex(index) { SIZE_ICON_SM() {
return (this.currentPage - 1) * this.pageSize + index + 1 return SIZE_ICON_SM
},
COLOR_TOP() {
return COLOR_TOP
},
SIZE_ICON_MD() {
return SIZE_ICON_MD
}, },
handleSelectionChange(val) { handleSelectionChange(val) {
// val的值为所勾选行的数组对象 // val的值为所勾选行的数组对象
@@ -195,7 +209,8 @@ export default {
if (data == null) return '暂无数据' if (data == null) return '暂无数据'
return new Date(data).toLocaleString() return new Date(data).toLocaleString()
}, },
handleEdit(index, row) { handleEdit(row) {
console.log(row)
noticeStore.$patch((state) => { noticeStore.$patch((state) => {
state.hackReset = true state.hackReset = true
state.noticeShowData = row state.noticeShowData = row
@@ -212,7 +227,8 @@ export default {
state.hackReset = false state.hackReset = false
}) })
}, },
handleShow(index, row) { handleShow(row) {
console.log(row)
noticeStore.$patch((state) => { noticeStore.$patch((state) => {
state.dialogShowVisible = true state.dialogShowVisible = true
state.noticeShowData = row state.noticeShowData = row

View File

@@ -3,35 +3,29 @@
<template #title <template #title
><h2>{{ noticeShowData.title }}</h2></template ><h2>{{ noticeShowData.title }}</h2></template
> >
<el-descriptions-item label="发布者" width="120" <el-descriptions-item label="发布者" width="120">
><el-tag size="large" type="success">{{ <el-tag size="large" type="success">{{ noticeShowData.sender.username }} </el-tag>
noticeShowData.sender.username </el-descriptions-item>
}}</el-tag></el-descriptions-item <el-descriptions-item label="生效时间" width="180"
> >{{ formatDate(noticeShowData.sendTime) }}
<el-descriptions-item label="生效时间" width="180">{{ </el-descriptions-item>
formatDate(noticeShowData.sendTime) <el-descriptions-item label="公告类型">
}}</el-descriptions-item> <el-tag size="large">{{ noticeShowData.noticeType.name }} </el-tag>
<el-descriptions-item label="公告类型" </el-descriptions-item>
><el-tag size="large">{{
noticeShowData.noticeType.name
}}</el-tag></el-descriptions-item
>
<el-descriptions-item label="优先级">{{ noticeShowData.priority }}</el-descriptions-item> <el-descriptions-item label="优先级">{{ noticeShowData.priority }}</el-descriptions-item>
<el-descriptions-item label="失效时间">{{ <el-descriptions-item label="失效时间"
formatDate(noticeShowData.endTime) >{{ formatDate(noticeShowData.endTime) }}
}}</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="公告内容">{{ noticeShowData.content }}</el-descriptions-item> <el-descriptions-item label="公告内容">{{ noticeShowData.content }}</el-descriptions-item>
</el-descriptions> </el-descriptions>
<el-button <el-button type="primary" @click="handleShowDialog(noticeShowData)" style="margin: 50px 400px"
type="primary" >
@click="handleShowDialog(noticeShowData.id, noticeShowData.isRead)" </el-button>
style="margin: 50px 400px"
> </el-button
>
</template> </template>
<script lang="ts"> <script lang="ts">
import { mapState } from 'pinia' import { mapState } from 'pinia'
import { useNoticeStore } from '@/store/notice' import { useNoticeStore } from '@/store/notice'
const noticeStore = useNoticeStore() const noticeStore = useNoticeStore()
export default { export default {
@@ -43,12 +37,12 @@ export default {
return {} return {}
}, },
methods: { methods: {
handleShowDialog(nid, isRead) { async handleShowDialog(notice) {
noticeStore.$patch((state) => { noticeStore.$patch((state) => {
state.dialogShowVisible = false state.dialogShowVisible = false
}) })
if (isRead === 0) { if (notice.isRead === 0) {
noticeStore.modifyNoticeIsRead(nid, 1) await noticeStore.modifyNoticeIsRead(notice)
let flag = 0 let flag = 0
if (this.currentViewPage === 'All') { if (this.currentViewPage === 'All') {
flag = -1 flag = -1
@@ -57,9 +51,7 @@ export default {
} else if (this.currentViewPage === 'AlRead') { } else if (this.currentViewPage === 'AlRead') {
flag = 1 flag = 1
} }
setTimeout(() => { await noticeStore.selectAllNoticeSelf(flag)
noticeStore.selectAllNoticeByUserId(flag)
}, 100)
} }
}, },
formatDate(date) { formatDate(date) {

View File

@@ -0,0 +1,39 @@
<template>
<el-form :model="addTypeData" :rules="typeRule" ref="addTypeData" label-width="150px">
<el-form-item label="类型名称" prop="name">
<el-input v-model="addTypeData.name" autocomplete="off" clearable />
</el-form-item>
<el-form-item label="是否启用" prop="enable">
<el-switch
v-model="addTypeData.enable"
style="--el-switch-on-color: #13ce66; --el-switch-off-color: #afb2b8"
active-text="启用"
:active-value="1"
inactive-text="禁用"
:inactive-value="0"
/>
</el-form-item>
</el-form>
</template>
<script lang="ts">
export default {
name: 'NoticeTypeCommitForm',
data() {
return {
addTypeData: {
name: '',
enable: 1
},
typeRule: {
name: [
{ required: true, message: '请输入类型名称', trigger: 'blur' },
{ min: 2, max: 10, message: '长度在 2 到 10 个字符', trigger: 'blur' }
]
}
}
},
methods: {}
}
</script>
<style scoped></style>

View File

@@ -1,10 +1,10 @@
<template> <template>
<el-table <el-table
v-loading="loading" v-loading="dataLoading"
element-loading-text="加载中..." element-loading-text="加载中..."
ref="tableRef" ref="tableRef"
:data="noticeTypeList.filter((data) => !search || data.name.includes(search))" :data="noticeTypeList.filter((data) => !search || data.name.includes(search))"
style="font-size: 20px" style="font-size: 18px"
stripe stripe
border border
highlight-current-row highlight-current-row
@@ -17,7 +17,7 @@
}" }"
><el-table-column type="selection" width="65" align="center" /> ><el-table-column type="selection" width="65" align="center" />
<el-table-column type="index" label="序号" width="80" align="center" /> <el-table-column type="index" label="序号" width="80" align="center" />
<el-table-column label="类型名" prop="name" width="500" align="center" /> <el-table-column label="类型名" prop="name" width="500" align="center" />
<el-table-column label="是否启用" prop="enable" width="350" align="center"> <el-table-column label="是否启用" prop="enable" width="350" align="center">
<template #default="scope"> <template #default="scope">
<el-switch <el-switch
@@ -77,12 +77,14 @@
<script lang="ts"> <script lang="ts">
import { mapState } from 'pinia' import { mapState } from 'pinia'
import { useNoticeStore } from '@/store/notice' import { useNoticeStore, useNoticeTypeStore } from '@/store/notice'
const noticeStore = useNoticeStore() const noticeStore = useNoticeStore()
const noticeTypeStore = useNoticeTypeStore()
export default { export default {
computed: { computed: {
...mapState(useNoticeStore, ['total', 'noticeTypeList', 'loading', 'dialogEditVisible']) ...mapState(useNoticeStore, ['total', 'dialogEditVisible']),
...mapState(useNoticeTypeStore, ['noticeTypeList', 'dataLoading'])
}, },
data() { data() {
return { return {
@@ -100,9 +102,9 @@ export default {
this.multipleSelection = val this.multipleSelection = val
}, },
switchChang(id, value) { switchChang(id, value) {
noticeStore.updateNoticeTypeEnable(id, value) noticeTypeStore.updateNoticeTypeEnable(id, value)
setTimeout(() => { setTimeout(() => {
noticeStore.selectNoticeType() noticeTypeStore.selectNoticeType()
}, 800) }, 800)
}, },
handleEdit(index, row) {}, handleEdit(index, row) {},
@@ -126,7 +128,8 @@ export default {
} }
}, },
mounted() { mounted() {
noticeStore.selectNoticeType() noticeTypeStore.dataLoading = true
noticeTypeStore.selectNoticeType()
}, },
updated() {} updated() {}
} }

View File

@@ -17,7 +17,14 @@
> >
<template #header> <template #header>
<div class="top"> <div class="top">
<el-icon :size="SIZE_ICON_MD()"> <el-icon
:size="SIZE_ICON_MD()"
:color="COLOR_TOP()"
v-if="notice.top === 1"
>
<icon-pinnacle-top />
</el-icon>
<el-icon :size="SIZE_ICON_MD()" v-if="notice.top === 0">
<icon-pinnacle-noticeItem /> <icon-pinnacle-noticeItem />
</el-icon> </el-icon>
<el-tag <el-tag
@@ -109,7 +116,7 @@
<script lang="ts"> <script lang="ts">
import { mapState } from 'pinia' import { mapState } from 'pinia'
import { useNoticeStore } from '@/store/notice' import { useNoticeStore } from '@/store/notice'
import { SIZE_ICON_LG, SIZE_ICON_MD, SIZE_ICON_SM } from '@/constants/Common.constants' import { COLOR_TOP, SIZE_ICON_LG, SIZE_ICON_MD, SIZE_ICON_SM } from '@/constants/Common.constants'
const noticeStore = useNoticeStore() const noticeStore = useNoticeStore()
@@ -128,6 +135,9 @@ export default {
}, },
props: [], props: [],
methods: { methods: {
COLOR_TOP() {
return COLOR_TOP
},
SIZE_ICON_LG() { SIZE_ICON_LG() {
return SIZE_ICON_LG return SIZE_ICON_LG
}, },
@@ -165,7 +175,7 @@ export default {
} else if (this.currentViewPage === 'AlRead') { } else if (this.currentViewPage === 'AlRead') {
flag = 1 flag = 1
} }
await noticeStore.selectAllNoticeByUserId(flag) await noticeStore.selectAllNoticeSelf(flag)
}, },
handleDialogClose() { handleDialogClose() {
noticeStore.$patch((state) => { noticeStore.$patch((state) => {
@@ -198,7 +208,7 @@ export default {
} else if (this.currentViewPage === 'AlRead') { } else if (this.currentViewPage === 'AlRead') {
flag = 1 flag = 1
} }
await noticeStore.selectAllNoticeByUserId(flag) await noticeStore.selectAllNoticeSelf(flag)
} }
}, },
mounted() {}, mounted() {},
@@ -251,7 +261,7 @@ export default {
} }
.noticeCard { .noticeCard {
--el-card-padding: 10px; --el-card-padding: 15px;
height: 120px; height: 120px;
} }
@@ -269,8 +279,7 @@ export default {
} }
.content { .content {
margin-top: 10px; margin-left: 15px;
margin-left: 20px;
height: fit-content; height: fit-content;
} }

View File

@@ -2,6 +2,7 @@ const PRODUCTION_NAME = 'Pinnacle OA'
const TOKEN_NAME = 'JWT_TOKEN' const TOKEN_NAME = 'JWT_TOKEN'
const COLOR_PRODUCTION = '#00D4FF' const COLOR_PRODUCTION = '#00D4FF'
const COLOR_BACKGROUND = '#D8D8D8' const COLOR_BACKGROUND = '#D8D8D8'
const COLOR_TOP = 'rgba(234,46,13,0.85)'
const COLOR_FONT_MAIN = '#4D4D4D' const COLOR_FONT_MAIN = '#4D4D4D'
const COLOR_FONT_SECONDARY = '#9E9E9E' const COLOR_FONT_SECONDARY = '#9E9E9E'
const SIZE_ICON_XS = '16px' const SIZE_ICON_XS = '16px'
@@ -43,6 +44,7 @@ export {
COLOR_BACKGROUND, COLOR_BACKGROUND,
COLOR_FONT_MAIN, COLOR_FONT_MAIN,
COLOR_FONT_SECONDARY, COLOR_FONT_SECONDARY,
COLOR_TOP,
SIZE_ICON_XS, SIZE_ICON_XS,
SIZE_ICON_SM, SIZE_ICON_SM,
SIZE_ICON_MD, SIZE_ICON_MD,

View File

@@ -10,7 +10,7 @@ export default {
}, },
methods: {}, methods: {},
mounted() { mounted() {
noticeStore.selectAllNoticeByUserId(1) noticeStore.selectAllNoticeSelf(1)
noticeStore.$patch((state) => { noticeStore.$patch((state) => {
state.currentViewPage = 'AlRead' state.currentViewPage = 'AlRead'
}) })

View File

@@ -10,7 +10,7 @@ export default {
}, },
methods: {}, methods: {},
mounted() { mounted() {
noticeStore.selectAllNoticeByUserId(-1) noticeStore.selectAllNoticeSelf(-1)
noticeStore.$patch((state) => { noticeStore.$patch((state) => {
state.currentViewPage = 'All' state.currentViewPage = 'All'
}) })

View File

@@ -23,7 +23,7 @@
<template #header> <template #header>
<h2 style="color: red">发布公告</h2> <h2 style="color: red">发布公告</h2>
</template> </template>
<commitForm /> <notice-commit-form />
</el-dialog> </el-dialog>
<notice-manage-table <notice-manage-table
@handleDeleteById="handleDeleteById" @handleDeleteById="handleDeleteById"
@@ -38,10 +38,11 @@ import { ElMessage, ElMessageBox } from 'element-plus'
import 'element-plus/theme-chalk/el-message.css' import 'element-plus/theme-chalk/el-message.css'
import 'element-plus/theme-chalk/el-message-box.css' import 'element-plus/theme-chalk/el-message-box.css'
import request from '@/services' import request from '@/services'
import { useNoticeStore } from '@/store/notice' import { useNoticeStore, useNoticeTypeStore } from '@/store/notice'
import { mapState } from 'pinia' import { mapState } from 'pinia'
import { SIZE_ICON_MD } from '@/constants/Common.constants' import { SIZE_ICON_MD } from '@/constants/Common.constants'
const noticeStore = useNoticeStore() const noticeStore = useNoticeStore()
const noticeTypeStore = useNoticeTypeStore()
export default { export default {
name: 'NoticeHome', name: 'NoticeHome',
@@ -124,7 +125,7 @@ export default {
} }
}, },
mounted() { mounted() {
noticeStore.selectEnableNoticeType() noticeTypeStore.selectEnableNoticeType()
}, },
computed: { computed: {
...mapState(useNoticeStore, ['dialogAddVisible']) ...mapState(useNoticeStore, ['dialogAddVisible'])

View File

@@ -1,7 +1,7 @@
<template> <template>
<el-container> <el-container>
<el-header> <el-header>
<el-button type="primary" :size="'large'" <el-button type="primary" :size="'large'" @click="handleOpenAddDialog"
><el-icon :size="SIZE_ICON_MD()" style="color: white; margin-right: 3px"> ><el-icon :size="SIZE_ICON_MD()" style="color: white; margin-right: 3px">
<icon-pinnacle-add /> </el-icon <icon-pinnacle-add /> </el-icon
>添加类型</el-button >添加类型</el-button
@@ -11,11 +11,29 @@
<icon-pinnacle-delete /> </el-icon <icon-pinnacle-delete /> </el-icon
>批量删除</el-button >批量删除</el-button
> >
<el-button type="primary" :size="'large'" <el-button type="primary" :size="'large'" @click="getLoadData"
><el-icon :size="SIZE_ICON_MD()" style="color: white; margin-right: 3px"> ><el-icon :size="SIZE_ICON_MD()" style="color: white; margin-right: 3px">
<icon-pinnacle-reset /> </el-icon <icon-pinnacle-reset /> </el-icon
>刷新页面</el-button >刷新数据</el-button
> >
<!-- 添加公告类型对话框-->
<el-dialog
v-model="dialogAddTypeVisible"
center
:close-on-click-modal="false"
destroy-on-close
>
<template #header>
<h2 style="color: red">添加公告类型</h2>
</template>
<notice-type-commit-form />
<template #footer>
<span class="dialog-footer">
<el-button>取消</el-button>
<el-button type="primary" @click="submitForm"> 确定 </el-button>
</span>
</template>
</el-dialog>
</el-header> </el-header>
<el-main> <el-main>
<notice-type-table /> <notice-type-table />
@@ -23,10 +41,17 @@
</el-container> </el-container>
</template> </template>
<script lang="ts"> <script lang="ts">
import { SIZE_ICON_LG, SIZE_ICON_MD, SIZE_ICON_SM } from '@/constants/Common.constants' import { SIZE_ICON_MD } from '@/constants/Common.constants'
import { useNoticeTypeStore } from '@/store/notice'
import { mapState } from 'pinia'
const noticeTypeStore = useNoticeTypeStore()
export default { export default {
name: 'NoticeTypeManage', name: 'NoticeTypeManage',
computed: {
...mapState(useNoticeTypeStore, ['dialogAddTypeVisible', 'editFlag'])
},
data() { data() {
return {} return {}
}, },
@@ -34,11 +59,27 @@ export default {
SIZE_ICON_MD() { SIZE_ICON_MD() {
return SIZE_ICON_MD return SIZE_ICON_MD
}, },
SIZE_ICON_LG() { getLoadData() {
return SIZE_ICON_LG noticeTypeStore.dataLoading = true
noticeTypeStore.selectNoticeType()
}, },
SIZE_ICON_SM() { handleOpenAddDialog() {
return SIZE_ICON_SM noticeTypeStore.dialogAddTypeVisible = true
},
submitForm() {
this.$refs.addTypeData.validate((valid) => {
if (valid) {
if (this.editFlag) {
// 编辑操作
// noticeTypeStore.handleUpdateNoticeType(this.addTypeData)
} else {
// 添加操作
// noticeTypeStore.handleAddNoticeType(this.addTypeData)
}
} else {
return false
}
})
} }
}, },
mounted() {} mounted() {}

View File

@@ -15,8 +15,8 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import { useNoticeStore } from '@/store/notice' import { useNoticeTypeStore } from '@/store/notice'
const noticeStore = useNoticeStore() const noticeTypeStore = useNoticeTypeStore()
export default { export default {
name: 'NoticeView', name: 'NoticeView',
data() { data() {
@@ -24,7 +24,7 @@ export default {
}, },
methods: {}, methods: {},
mounted() { mounted() {
noticeStore.selectEnableNoticeType() noticeTypeStore.selectEnableNoticeType()
} }
} }
</script> </script>

View File

@@ -10,7 +10,7 @@ export default {
}, },
methods: {}, methods: {},
mounted() { mounted() {
noticeStore.selectAllNoticeByUserId(0) noticeStore.selectAllNoticeSelf(0)
noticeStore.$patch((state) => { noticeStore.$patch((state) => {
state.currentViewPage = 'ToRead' state.currentViewPage = 'ToRead'
}) })

View File

@@ -2,16 +2,20 @@ import { defineStore } from 'pinia'
import request from '@/services' import request from '@/services'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
export interface IAddFormData { export interface IAddNoticeData {
title: string title: string
typeId: string typeId: string
sendTime: string sendTime: string
endTime: string endTime: string
top: boolean top: number
priority: number priority: number
content: string content: string
receivers: [] receivers: []
} }
export interface IAddNoticeTypeData {
name: string
enable: number
}
export interface INotice { export interface INotice {
content: string content: string
createTime: string createTime: string
@@ -75,14 +79,6 @@ export const useNoticeStore = defineStore('notice', {
editFlag: false, editFlag: false,
currentViewPage: 'All', currentViewPage: 'All',
hackReset: true, hackReset: true,
EnableNoticeTypeList: [],
noticeTypeList: [
{
id: '',
name: '',
enable: true
}
],
departmentList: [], departmentList: [],
noticeShowData: { noticeShowData: {
content: '', content: '',
@@ -113,45 +109,45 @@ export const useNoticeStore = defineStore('notice', {
}, },
getters: {}, getters: {},
actions: { actions: {
selectAllNotice(currentPage: number, pageSize: number) { async selectAllNotice(currentPage: number, pageSize: number) {
void request void request
.get('/notice/page', { .get('/notice/page', {
currentPage, currentPage,
pageSize pageSize
}) })
.then((response) => { .then((response) => {
if (response.data.code === 20021) {
this.selectData = response.data.data this.selectData = response.data.data
this.total = parseInt(response.data.msg) this.total = parseInt(response.data.msg)
if (this.selectData.length !== 0) { if (this.selectData.length !== 0) {
this.loading = false this.loading = false
} }
} else {
this.loading = false
ElMessage({
message: response.data.msg,
type: 'error'
})
}
}) })
}, },
async selectAllNoticeByUserId(readStatus: number) { async selectAllNoticeSelf(readStatus: number) {
await request await request
.get('/notice/ByUserId', { .get('/notice/self', {
readStatus readStatus
}) })
.then((response) => { .then((response) => {
if (response.data.code === 20021) {
this.selectData = response.data.data this.selectData = response.data.data
if (this.selectData.length !== 0) { if (this.selectData.length !== 0) {
this.loading = false this.loading = false
} }
}) } else {
},
async selectEnableNoticeType() {
await request.get('/noticeType/enable').then((response) => {
this.EnableNoticeTypeList = response.data.data
})
},
async selectNoticeType() {
await request.get('/noticeType').then((response) => {
this.noticeTypeList = response.data.data
if (response.data.data.length >= 0) {
for (let i = 0; i < this.noticeTypeList.length; i++) {
this.noticeTypeList[i].enable = response.data.data[i].enable === 1
}
this.loading = false this.loading = false
ElMessage({
message: response.data.msg,
type: 'error'
})
} }
}) })
}, },
@@ -160,7 +156,7 @@ export const useNoticeStore = defineStore('notice', {
this.departmentList = response.data.data this.departmentList = response.data.data
}) })
}, },
async handleAddNotice(addFormData: IAddFormData) { async handleAddNotice(addFormData: IAddNoticeData) {
await request.post('/notice', addFormData).then((response) => { await request.post('/notice', addFormData).then((response) => {
if (response.data.code === 20022) { if (response.data.code === 20022) {
this.dialogAddVisible = false this.dialogAddVisible = false
@@ -175,9 +171,9 @@ export const useNoticeStore = defineStore('notice', {
}) })
} }
}) })
this.selectAllNotice(1, 5) await this.selectAllNotice(1, 5)
}, },
async handleUpdateNotice(updateNotice: IAddFormData) { async handleUpdateNotice(updateNotice: IAddNoticeData) {
await request.put('/notice', updateNotice).then((response) => { await request.put('/notice', updateNotice).then((response) => {
if (response.data.code === 20023) { if (response.data.code === 20023) {
this.dialogEditVisible = false this.dialogEditVisible = false
@@ -192,12 +188,82 @@ export const useNoticeStore = defineStore('notice', {
}) })
} }
}) })
this.selectAllNotice(1, 5) await this.selectAllNotice(1, 5)
this.hackReset = false this.hackReset = false
}, },
async modifyNoticeIsRead(notice: INotice) {
await request.put('/notice/modify_notice_read', notice).then((response) => {
if (response.data.code === 20033) {
ElMessage({
message: response.data.msg,
type: 'error'
})
}
})
},
async modifyTop(notice: INotice) {
await request.put('/notice/update_notice_top', notice).then((response) => {
if (response.data.code === 20023) {
ElMessage({
message: response.data.msg,
type: 'success'
})
} else if (response.data.code === 20033) {
ElMessage({
message: response.data.msg,
type: 'error'
})
}
})
}
}
})
export const useNoticeTypeStore = defineStore('notice_type', {
state: () => {
return {
dataLoading: true,
dialogAddTypeVisible: false,
dialogEditTypeVisible: false,
editFlag: false,
enableNoticeTypeList: [],
noticeTypeList: [
{
id: '',
name: '',
enable: true
}
]
}
},
actions: {
async selectEnableNoticeType() {
await request.get('/notice_type/enable').then((response) => {
this.enableNoticeTypeList = response.data.data
})
},
async selectNoticeType() {
await request.get('/notice_type').then((response) => {
if (response.data.code === 20021) {
this.noticeTypeList = response.data.data
if (response.data.data.length >= 0) {
for (let i = 0; i < this.noticeTypeList.length; i++) {
this.noticeTypeList[i].enable = response.data.data[i].enable === 1
}
this.dataLoading = false
}
} else {
this.dataLoading = false
ElMessage({
message: response.data.msg,
type: 'error'
})
}
})
},
async updateNoticeTypeEnable(typeId: string, enable: boolean) { async updateNoticeTypeEnable(typeId: string, enable: boolean) {
await request await request
.get('/noticeType/update', { .get('/notice_type/update', {
typeId, typeId,
enable enable
}) })
@@ -215,21 +281,29 @@ export const useNoticeStore = defineStore('notice', {
} }
}) })
}, },
async modifyNoticeIsRead(notice: INotice) { async handleAddNoticeType(addFormData: IAddNoticeTypeData) {
await request.put('/notice/modifyNoticeIsRead', notice).then((response) => { await request.post('/notice_type', addFormData).then((response) => {
if (response.data.code === 20033) { if (response.data.code === 20022) {
this.dialogAddTypeVisible = false
ElMessage({
message: '添加成功.',
type: 'success'
})
} else if (response.data.code === 20032) {
ElMessage({ ElMessage({
message: response.data.msg, message: response.data.msg,
type: 'error' type: 'error'
}) })
} }
}) })
await this.selectNoticeType()
}, },
async modifyTop(notice: INotice) { async handleUpdateNoticeType(updateNotice: IAddNoticeTypeData) {
await request.put('/notice/updateNoticeTop', notice).then((response) => { await request.put('/notice_type', updateNotice).then((response) => {
if (response.data.code === 20023) { if (response.data.code === 20023) {
this.dialogEditTypeVisible = false
ElMessage({ ElMessage({
message: response.data.msg, message: '修改成功.',
type: 'success' type: 'success'
}) })
} else if (response.data.code === 20033) { } else if (response.data.code === 20033) {
@@ -239,6 +313,7 @@ export const useNoticeStore = defineStore('notice', {
}) })
} }
}) })
await this.selectNoticeType()
} }
} }
}) })