smart-cloud-service/src/views/system/notice/index.vue

548 lines
16 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div class="app-container">
<el-form v-show="showSearch" ref="queryForm" :inline="true" :model="queryParams" label-width="68px" size="small">
<el-form-item label="公告标题" prop="noticeTitle">
<el-input
v-model="queryParams.noticeTitle"
clearable
placeholder="请输入公告标题"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="操作人员" prop="createBy">
<el-input
v-model="queryParams.createBy"
clearable
placeholder="请输入操作人员"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="类型" prop="noticeType">
<el-select v-model="queryParams.noticeType" clearable placeholder="公告类型">
<el-option
v-for="dict in dict.type.sys_notice_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button icon="el-icon-search" size="mini" type="primary" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
v-hasPermi="['system:notice:add']"
icon="el-icon-plus"
plain
size="mini"
type="primary"
@click="handleAdd"
>新增
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['system:notice:edit']"
:disabled="single"
icon="el-icon-edit"
plain
size="mini"
type="success"
@click="handleUpdate"
>修改
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['system:notice:remove']"
:disabled="multiple"
icon="el-icon-delete"
plain
size="mini"
type="danger"
@click="handleDelete"
>删除
</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="noticeList" @selection-change="handleSelectionChange">
<el-table-column align="center" type="selection" width="55"/>
<el-table-column align="center" label="序号" prop="noticeId" width="100"/>
<el-table-column
:show-overflow-tooltip="true"
align="center"
label="公告标题"
prop="noticeTitle"
/>
<el-table-column align="center" label="公告类型" prop="noticeType" width="100">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_notice_type" :value="scope.row.noticeType"/>
</template>
</el-table-column>
<el-table-column align="center" label="状态" prop="status" width="100">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_notice_status" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column align="center" label="创建者" prop="createBy" width="100"/>
<el-table-column align="center" label="创建时间" prop="createTime" width="100">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column align="center" class-name="small-padding fixed-width" label="操作">
<template slot-scope="scope">
<el-button
v-hasPermi="['system:notice:edit']"
icon="el-icon-edit"
size="mini"
type="text"
@click="noticeDetails(scope.row.noticeId)"
>通知详情
</el-button>
<el-button
v-hasPermi="['system:notice:edit']"
icon="el-icon-edit"
size="mini"
type="text"
@click="handleUpdate(scope.row)"
>修改
</el-button>
<el-button
v-hasPermi="['system:notice:remove']"
icon="el-icon-delete"
size="mini"
type="text"
@click="handleDelete(scope.row)"
>删除
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:limit.sync="queryParams.pageSize"
:page.sync="queryParams.pageNum"
:total="total"
@pagination="getList"
/>
<!-- 添加或修改公告对话框 -->
<el-dialog :title="title" :visible.sync="open" append-to-body width="780px">
<el-form ref="form" :model="form" :rules="rules" 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-select v-model="form.noticeType" placeholder="请选择公告类型">
<el-option
v-for="dict in dict.type.sys_notice_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col v-show="form.noticeType == 2">
<span style="margin-right: 15px;margin-left: 10px"><b>公告时间</b></span>
<el-date-picker
v-model="form.time"
type="datetimerange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
</el-col>
<el-col :span="12">
<el-form-item label="状态">
<el-radio-group v-model="form.status">
<el-radio
v-for="dict in dict.type.sys_notice_status"
:key="dict.value"
:label="dict.value"
>{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<div v-if="form.noticeType==2">
<el-form-item label="创建时间">
<el-date-picker
v-model="form.dateRange"
end-placeholder="结束日期"
range-separator="-"
start-placeholder="开始日期"
style="width: 240px"
type="daterange"
value-format="yyyy-MM-dd"
></el-date-picker>
</el-form-item>
</div>
</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>
<template>
<div v-if="form.noticeType==1">
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="部门" name="first" @click="handleClick1">
{{form.checkedDept}}
<el-tree
:data="partDate"
show-checkbox
node-key="id"
:default-expanded-keys="[2, 3]"
:default-checked-keys="[5]"
@check-change="handleCheckChange"
>
</el-tree>
</el-tab-pane>
<el-tab-pane label="特定人员" name="second">
{{form.ids}}
<el-select v-model="form.ids" multiple placeholder="请选择">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-tab-pane>
</el-tabs>
</div>
</template>
</el-dialog>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
<el-dialog title="通知详细" :visible.sync="dialogTableVisible " width="40%">
<el-row :gutter="20">
<el-col :span="6">
<div>
<el-statistic
:value="asUserDeptNum.num"
title="总共通知数量"
></el-statistic>
</div>
</el-col>
<el-col :span="6">
<div>
<el-statistic
:value="asUserDeptNum.readNum"
title="已阅读通知数量"
></el-statistic>
</div>
</el-col>
<el-col :span="6">
<div>
<el-statistic
:value="asUserDeptNum.noReadNum"
title="未阅读通知数量"
></el-statistic>
</div>
</el-col>
</el-row>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogTableVisible = false"> </el-button>
<el-button type="primary" @click="dialogTableVisible = false"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { addNotice, delNotice, getNotice, getNum, listNotice, updateNotice } from '@/api/system/notice'
import { listDept } from '@/api/system/dept'
import { listUser } from '@/api/system/user'
export default {
name: "Notice",
dicts: ['sys_notice_status', 'sys_notice_type'],
data() {
return {
asUserDeptNum: {},
dialogTableVisible : false,
options: [],
value:'',
partDate:[],
// partDate: [{
// id: 1,
// label: '一级 2',
// children: [{
// id: 3,
// label: '二级 2-1',
// children: [{
// id: 4,
// label: '三级 3-1-1'
// }, {
// id: 5,
// label: '三级 3-1-2',
// // disabled: true
// }]
// }, {
// id: 2,
// label: '二级 2-2',
// disabled: true,
// children: [{
// id: 6,
// label: '三级 3-2-1'
// }, {
// id: 7,
// label: '三级 3-2-2',
// // disabled: true
// }]
// }]
// }],
defaultProps: {
children: 'children',
label: 'label'
},
activeName: 'second',
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 公告表格数据
noticeList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
noticeTitle: undefined,
createBy: undefined,
status: undefined
},
// 表单参数
form: {
dateRange:[],
checkedDept:[],
ids:[],
},
// 表单校验
rules: {
noticeTitle: [
{required: true, message: "公告标题不能为空", trigger: "blur"}
],
noticeType: [
{required: true, message: "公告类型不能为空", trigger: "change"}
]
}
};
},
created() {
this.getList();
this.listDeptTree();
},
methods: {
noticeDetails(noticeId){
this.dialogTableVisible= true
getNum(noticeId).then(response=>{
this.asUserDeptNum= response.data
})
},
handleCheckChange(data,checked,node){
// console.log(data,checked,node)
if(checked && data.children==null){
console.log(data)
this.form.checkedDept.push(data.id)
}
},
handleClick1(val){
console.log(val)
},
listDeptTree(){
listUser().then(response=>{
console.log(response)
response.data.rows.forEach(
item =>{
if (item.userName){
this.options.push({"value":item.userId,"label":item.userName})
}
}
)
})
listDept().then(response => {
console.log(response)
const treeData = this.handleTree(response.data, "deptId");
// 转换deptId和deptName为id和label并递归处理children
const convertedTreeData = this.convertDeptTree(treeData);
this.partDate = convertedTreeData;
console.log(this.partDate);
}).catch(error => {
// 处理错误
console.error('Error fetching department list:', error);
});
},
convertDeptTree(deptList) {
console.log(deptList)
return deptList.map(item => {
const { deptId, deptName, children } = item;
return {
id: deptId,
label: deptName,
// leader:leader,
// 如果children存在递归转换它们
children: children ? this.convertDeptTree(children) : undefined
};
});
},
handleClick(tab, event) {
console.log(tab, event);
},
/** 查询公告列表 */
getList() {
this.loading = true;
listNotice(this.queryParams).then(response => {
this.noticeList = response.data.rows;
this.total = response.data.total;
this.loading = false;
});
this.form.checkedDept=[]
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
noticeId: undefined,
noticeTitle: undefined,
noticeType: undefined,
noticeContent: undefined,
status: "0",
dateRange:[],
checkedDept:[],
ids:[],
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.noticeId)
this.single = selection.length != 1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加公告";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const noticeId = row.noticeId || this.ids
getNotice(noticeId).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改公告";
});
},
/** 提交按钮 */
submitForm: function () {
this.$refs["form"].validate(valid => {
console.log(this.form)
if (valid) {
if (this.form.noticeId != undefined) {
updateNotice(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addNotice(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const noticeIds = row.noticeId || this.ids
this.$modal.confirm('是否确认删除公告编号为"' + noticeIds + '"的数据项?').then(function () {
return delNotice(noticeIds);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
});
}
}
};
</script>