前台项目创建

master
zhang chengzhi 2024-07-24 13:44:45 +08:00
parent 7f7b6b2d67
commit 7e5c8e7d05
5 changed files with 347 additions and 6 deletions

View File

@ -8,6 +8,17 @@ export function listNotice(query) {
params: query params: query
}) })
} }
//用户消息列表展示
export function listNoticeByNotice(data) {
return request({
url: '/system/notice/userList',
method: 'post',
params: data
})
}
// 查询公告详细 // 查询公告详细
export function getNotice(noticeId) { export function getNotice(noticeId) {
@ -16,6 +27,21 @@ export function getNotice(noticeId) {
method: 'get' method: 'get'
}) })
} }
// 查询公告详细和阅读量
export function getNoticeAndCount(noticeId) {
return request({
url: '/system/notice/' + noticeId,
method: 'post'
})
}
// 阅读文件
export function readNotice(noticeId) {
return request({
url: '/system/notice/'+noticeId,
method: 'put',
})
}
// 新增公告 // 新增公告
export function addNotice(data) { export function addNotice(data) {
@ -41,4 +67,4 @@ export function delNotice(noticeId) {
url: '/system/notice/' + noticeId, url: '/system/notice/' + noticeId,
method: 'delete' method: 'delete'
}) })
} }

View File

@ -1,6 +1,15 @@
import request from '@/utils/request' import request from '@/utils/request'
import {parseStrEmpty} from "@/utils/muyu"; import {parseStrEmpty} from "@/utils/muyu";
//查询所有用户
export function getUserList() {
return request({
url: '/system/user/userList',
method: 'get'
})
}
// 查询用户列表 // 查询用户列表
export function listUser(query) { export function listUser(query) {
return request({ return request({

View File

@ -8,6 +8,9 @@
<div class="right-menu"> <div class="right-menu">
<template v-if="device!=='mobile'"> <template v-if="device!=='mobile'">
<el-button @click="getNoticeList(),drawer = true,this.direction = 'rtl'" style="margin-left: 16px;"
icon="el-icon-chat-dot-round" class="right-menu-item">
</el-button>
<search id="header-search" class="right-menu-item"/> <search id="header-search" class="right-menu-item"/>
<screenfull id="screenfull" class="right-menu-item hover-effect"/> <screenfull id="screenfull" class="right-menu-item hover-effect"/>
@ -15,8 +18,122 @@
<size-select id="size-select" class="right-menu-item hover-effect"/> <size-select id="size-select" class="right-menu-item hover-effect"/>
</el-tooltip> </el-tooltip>
<el-drawer
title="消息通知"
:visible.sync="drawer"
:direction="direction"
>
<div>
<el-radio-group v-model="notice.noticeType" @change="getNoticeList">
<el-radio-button label="null">全部</el-radio-button>
<el-radio-button label="1">通知</el-radio-button>
<el-radio-button label="2">公告</el-radio-button>
</el-radio-group>
</div>
<div>
<el-radio-group v-model="notice.readStatus" @change="getNoticeList">
<el-radio-button label="null">全部</el-radio-button>
<el-radio-button label="1">已读</el-radio-button>
<el-radio-button label="0">未读</el-radio-button>
</el-radio-group>
</div>
<div v-for=" no in noticeList">
<el-descriptions class="margin-top" :title="no.noticeTitle" :column="3" border>
<template slot="extra">
<el-button type="primary" size="small" @click="readNoticeChilk(no)"></el-button>
</template>
<el-descriptions-item>
<template slot="label">
<i class="el-icon-user"></i>
消息发布时间
</template>
{{ no.createTime }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
<i class="el-icon-mobile-phone"></i>
消息发布人
</template>
{{no.createBy}} ({{ no.remark }})
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
<i class="el-icon-location-outline"></i>
消息类型
</template>
<span v-show="no.noticeType==1">
通知
</span>
<span v-show="no.noticeType==2">
公告
</span>
</el-descriptions-item>
<el-descriptions-item >
<template slot="label">
<i class="el-icon-mobile-phone"></i>
有效时间
</template>
{{no.startTime}}---{{ no.endTime}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
<i class="el-icon-location-outline"></i>
当前状态
</template>
<span v-show="no.readStatus==0">
未读
</span>
<span v-show="no.readStatus==1">
已读
</span>
</el-descriptions-item>
</el-descriptions>
</div>
<!-- &lt;!&ndash; 消息对话框 &ndash;&gt;-->
<!-- <el-dialog :title="title" :visible.sync="open" append-to-body width="780px">-->
<!-- <el-form ref="form" :model="form" : label-width="80px">-->
<!-- <el-row>-->
<!-- <el-col :span="12">-->
<!-- <el-form-item label="公告标题" prop="noticeTitle">-->
<!-- <el-input v-model="form.noticeTitle" placeholder="请输入公告标题"/>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="12">-->
<!-- <el-form-item label="公告类型" prop="noticeType">-->
<!-- <el-form-item label="公告标题" prop="noticeTitle">-->
<!-- <el-input v-model="form.noticeType" placeholder="请输入公告标题"/>-->
<!-- </el-form-item>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="12">-->
<!-- </el-col>-->
<!-- <el-col :span="24">-->
<!-- <el-form-item label="内容">-->
<!-- <editor v-model="form.noticeContent" :min-height="192"/>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- </el-form>-->
<!-- <div slot="footer" class="dialog-footer">-->
<!-- <el-button type="primary" @click="cancel"> </el-button>-->
<!-- <el-button @click="cancel"> </el-button>-->
<!-- </div>-->
<!-- </el-dialog>-->
</el-drawer>
</template> </template>
<!-- el-icon-chat-dot-round-->
<el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click"> <el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click">
<div class="avatar-wrapper"> <div class="avatar-wrapper">
<img :src="avatar" class="user-avatar"> <img :src="avatar" class="user-avatar">
@ -46,9 +163,32 @@ import Hamburger from '@/components/Hamburger'
import Screenfull from '@/components/Screenfull' import Screenfull from '@/components/Screenfull'
import SizeSelect from '@/components/SizeSelect' import SizeSelect from '@/components/SizeSelect'
import Search from '@/components/HeaderSearch' import Search from '@/components/HeaderSearch'
import Notice from "@/views/system/notice/index.vue";
import notice from "../../views/system/notice/index.vue";
import {listNoticeByNotice, readNotice} from "@/api/system/notice";
import ComponentA from '@/views/system/notice/index.vue'
export default { export default {
data() {
return {
open: false,
noticeList: [],
notice: {
readStatus: null,
noticeType: null,
},
drawer: false,
direction: 'rtl',
title: undefined,
form: {}
};
},
components: { components: {
Notice,
Breadcrumb, Breadcrumb,
TopNav, TopNav,
Hamburger, Hamburger,
@ -56,7 +196,11 @@ export default {
SizeSelect, SizeSelect,
Search Search
}, },
computed: { computed: {
notice() {
return notice
},
...mapGetters([ ...mapGetters([
'sidebar', 'sidebar',
'avatar', 'avatar',
@ -80,6 +224,37 @@ export default {
} }
}, },
methods: { methods: {
cancel() {
this.open = false;
this.reset();
},
reset() {
this.form = {
noticeId: undefined,
noticeTitle: undefined,
noticeType: undefined,
noticeContent: undefined,
status: "0"
};
this.resetForm("form");
},
//
readNoticeChilk(no) {
let noticeId = no.noticeId;
readNotice(noticeId).then(res => {
this.getNoticeList();
this.$modal.msgSuccess("阅读成功");
})
},
getNoticeList() {
listNoticeByNotice(this.notice).then(res => {
this.noticeList = res.data;
console.log(res);
})
},
toggleSideBar() { toggleSideBar() {
this.$store.dispatch('app/toggleSideBar') this.$store.dispatch('app/toggleSideBar')
}, },

View File

@ -73,7 +73,7 @@ service.interceptors.request.use(config => {
// 响应拦截器 // 响应拦截器
service.interceptors.response.use(res => { service.interceptors.response.use(res => {
debugger //debugger
// 未设置状态码则默认成功状态 // 未设置状态码则默认成功状态
const code = res.data.code || 200; const code = res.data.code || 200;
// 获取错误信息 // 获取错误信息

View File

@ -99,6 +99,12 @@
</el-table-column> </el-table-column>
<el-table-column align="center" class-name="small-padding fixed-width" label="操作"> <el-table-column align="center" class-name="small-padding fixed-width" label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button
size="mini"
type="text"
@click="handleLook(scope.row)"
>查看详情
</el-button>
<el-button <el-button
v-hasPermi="['system:notice:edit']" v-hasPermi="['system:notice:edit']"
icon="el-icon-edit" icon="el-icon-edit"
@ -138,17 +144,17 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="公告类型" prop="noticeType"> <el-form-item label="公告类型" prop="noticeType">
<el-select v-model="form.noticeType" placeholder="请选择公告类型"> <el-select v-model="form.noticeType" placeholder="请选择公告类型" @change="zzzzzz">
<el-option <el-option
v-for="dict in dict.type.sys_notice_type" v-for="dict in dict.type.sys_notice_type"
:key="dict.value" :key="dict.value"
:label="dict.label" :label="dict.label"
:value="dict.value" :value="dict.value"
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="12">
<el-form-item label="状态"> <el-form-item label="状态">
<el-radio-group v-model="form.status"> <el-radio-group v-model="form.status">
<el-radio <el-radio
@ -160,12 +166,59 @@
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<div class="block" v-show="timeShow">
<span class="demonstration">开始时间</span>
<el-date-picker
v-model="form.startTime"
type="datetime"
placeholder="选择开始日期时间" value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker>
</div>
<div class="block" v-show="timeShow">
<span class="demonstration">截止时间</span>
<el-date-picker
v-model="form.endTime"
type="datetime"
placeholder="选择截止日期时间" value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker>
</div>
</el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="内容"> <el-form-item label="内容">
<editor v-model="form.noticeContent" :min-height="192"/> <editor v-model="form.noticeContent" :min-height="192"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<div v-show="ssss">
<span>总计数数量:{{form.totalCount}}</span> --
<span>未读数量:{{form.unreadCount}}</span> --
<span>已读数量:{{form.readCount}}</span>
</div>
<el-col :span="12" v-show="empShow">
<el-input v-model="form.deptIds" />
<el-form-item label="归属部门" >
<el-cascader v-model="form.deptIds" :show-all-levels="false" :options="deptOptions" :props="props" clearable style="width: 60%;"/>
</el-form-item>
</el-col>
<el-col :span="12" v-show="empShow">
<el-input v-model="form.userIds" />
<el-form-item label="特定人员" >
<el-select v-model="form.userIds" multiple placeholder="请选择">
<el-option
v-for="item in userList"
:key="item.userId"
:label="item.userName"
:value="item.userId">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button> <el-button type="primary" @click="submitForm"> </el-button>
@ -176,13 +229,40 @@
</template> </template>
<script> <script>
import {addNotice, delNotice, getNotice, listNotice, updateNotice} from "@/api/system/notice"; import {
addNotice,
delNotice,
getNotice,
getNoticeAndCount,
listNotice,
listNoticeByNotice,
updateNotice
} from "@/api/system/notice";
import {deptTreeSelect, getUserList} from "@/api/system/user";
import Treeselect from "@riophae/vue-treeselect";
import {listDept} from "@/api/system/dept";
export default { export default {
name: "Notice", name: "Notice",
components: {Treeselect},
dicts: ['sys_notice_status', 'sys_notice_type'], dicts: ['sys_notice_status', 'sys_notice_type'],
data() { data() {
return { return {
userList:[],
//
props: {
multiple: true,
value: 'deptId',
label: 'deptName'
},
//
ssss:false,
//
deptOptions: [],
//
timeShow:false,
//
empShow:false,
// //
loading: true, loading: true,
// //
@ -209,6 +289,8 @@ export default {
createBy: undefined, createBy: undefined,
status: undefined status: undefined
}, },
//
// //
form: {}, form: {},
// //
@ -224,8 +306,42 @@ export default {
}, },
created() { created() {
this.getList(); this.getList();
}, },
methods: { methods: {
/**
* 部门级联下拉列表
*/
getDeptTree() {
listDept().then(response => {
this.deptOptions = this.handleTree(response.data,"deptId","parentId","children");
});
},
/**
* 展示所有用户
*/
getSelUserAll(){
getUserList().then(res=>{
this.userList = res;
})
},
zzzzzz(){
//1 tab
//2
console.log(this.form.noticeType);
let noticeType = this.form.noticeType;
if (noticeType == 2){
this.timeShow = true;
this.empShow = false;
}else {
this.timeShow = false;
this.empShow=true;
}
},
/** 查询公告列表 */ /** 查询公告列表 */
getList() { getList() {
this.loading = true; this.loading = true;
@ -240,6 +356,7 @@ export default {
this.open = false; this.open = false;
this.reset(); this.reset();
}, },
// //
reset() { reset() {
this.form = { this.form = {
@ -272,7 +389,21 @@ export default {
this.reset(); this.reset();
this.open = true; this.open = true;
this.title = "添加公告"; this.title = "添加公告";
this.getDeptTree();
this.getSelUserAll();
}, },
/** 查看按钮操作 */
handleLook(row){
this.reset();
const noticeId = row.noticeId || this.ids
getNoticeAndCount(noticeId).then(response => {
this.form = response.data;
this.open = true;
this.title = "通知详情";
this.ssss =true;
});
},
/** 修改按钮操作 */ /** 修改按钮操作 */
handleUpdate(row) { handleUpdate(row) {
this.reset(); this.reset();