1、右上角新增消息中心提示

2、消息中心新增连接点击打开对应的详情页面
3、页面样式调整,关联附件新增前端分页
This commit is contained in:
pan 2024-09-06 19:57:10 +08:00
parent dd9940e78e
commit c567ca9176
18 changed files with 991 additions and 98 deletions

View File

@ -75,7 +75,7 @@ body #app .hideSidebar .sidebar-container {
width: 65px !important; width: 65px !important;
} }
body #app .openSidebar .sidebar-container { body #app .openSidebar .sidebar-container {
width:220px !important; width:180px !important;
} }
body #app .sidebar-container .nest-menu .el-sub-menu>.el-sub-menu__title, body #app .sidebar-container .nest-menu .el-sub-menu>.el-sub-menu__title,
body #app .sidebar-container .el-sub-menu .el-menu-item { body #app .sidebar-container .el-sub-menu .el-menu-item {
@ -344,7 +344,7 @@ body #app .hideSidebar .main-container {
margin-left: 65px; margin-left: 65px;
} }
body #app .main-container { body #app .main-container {
margin-left: 220px; margin-left: 180px;
background:#f9fafe; background:#f9fafe;
background-size:100%; background-size:100%;
} }
@ -440,6 +440,34 @@ body #app .main-container .navbar .right-menu{
float: inherit; float: inherit;
top: 8px; top: 8px;
right: 16px; right: 16px;
display: flex;
align-items: center;
}
body #app .main-container .navbar .right-menu .el-badge{
margin: 0 20px 0 0;
}
body #app .main-container .navbar .right-menu .el-badge .el-badge__content.is-fixed{
top: 5px;
right: 14px;
border: 0;
padding: 0 4px;
min-width: 18px;
text-align: center;
}
body #app .main-container .navbar .right-menu .el-badge .top-msg{
background: rgba(0 64 152 / 6%);
color: #004098;
font-size: 14px;
height: 36px;
display: block;
padding: 0 12px;
line-height: 36px;
border-radius: 2px;
cursor: pointer;
}
body #app .main-container .navbar .right-menu .top-version{
margin: 0 10px 0 0;
font-size: 14px;
} }
body #app .main-container .navbar .right-menu>.el-select{ body #app .main-container .navbar .right-menu>.el-select{
margin-right: 15px; margin-right: 15px;
@ -1752,22 +1780,26 @@ body .el-card>.el-card__body .el-tabs--border-card{
body .el-card>.el-card__body .search-btn .el-tabs--border-card{ body .el-card>.el-card__body .search-btn .el-tabs--border-card{
border: 0; border: 0;
} }
body .el-card>.el-card__body .search-btn .el-tabs--border-card>.el-tabs__header{ body .el-card>.el-card__body .search-btn .el-tabs--border-card>.el-tabs__header,
body .el-card>.el-card__body .search-btn .el-tabs--card>.el-tabs__header{
border-bottom: 1px solid #e6e6e6; border-bottom: 1px solid #e6e6e6;
background: transparent; background: transparent;
} }
body .el-card>.el-card__body .search-btn .el-tabs--border-card>.el-tabs__header .el-tabs__item{ body .el-card>.el-card__body .search-btn .el-tabs--border-card>.el-tabs__header .el-tabs__item,
body .el-card>.el-card__body .search-btn .el-tabs--card>.el-tabs__header .el-tabs__item{
margin: 0; margin: 0;
border: none; border: none;
} }
body .el-card>.el-card__body .search-btn .el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{ body .el-card>.el-card__body .search-btn .el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active,
body .el-card>.el-card__body .search-btn .el-tabs--card>.el-tabs__header .el-tabs__item.is-active{
border: 0; border: 0;
background: transparent; background: transparent;
color: #034aac; color: #034aac;
font-weight: bold; font-weight: bold;
position: relative; position: relative;
} }
body .el-card>.el-card__body .search-btn .el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active::after{ body .el-card>.el-card__body .search-btn .el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active::after,
body .el-card>.el-card__body .search-btn .el-tabs--card>.el-tabs__header .el-tabs__item.is-active::after{
position: absolute; position: absolute;
left: 0; left: 0;
bottom: 0; bottom: 0;
@ -2080,7 +2112,7 @@ body .etable1.el-table .el-table__expanded-cell tr>td:nth-child(2){
.search .el-form-item>.el-form-item__content>.el-cascader, .search .el-form-item>.el-form-item__content>.el-cascader,
.search .el-form-item>.el-form-item__content>.el-date-editor.el-range-editor, .search .el-form-item>.el-form-item__content>.el-date-editor.el-range-editor,
.search .el-form-item>.el-form-item__content>.el-date-editor.el-date-editor{ .search .el-form-item>.el-form-item__content>.el-date-editor.el-date-editor{
width: 250px; width: 230px;
} }
.grab .filtrate{ .grab .filtrate{
display: none; display: none;
@ -2109,7 +2141,7 @@ body .etable1.el-table .el-table__expanded-cell tr>td:nth-child(2){
.filtrate .el-form-item>.el-form-item__content>.el-cascader, .filtrate .el-form-item>.el-form-item__content>.el-cascader,
.filtrate .el-form-item>.el-form-item__content>.el-date-editor.el-range-editor, .filtrate .el-form-item>.el-form-item__content>.el-date-editor.el-range-editor,
.filtrate .el-form-item>.el-form-item__content>.el-date-editor.el-date-editor{ .filtrate .el-form-item>.el-form-item__content>.el-date-editor.el-date-editor{
width: 250px; width: 230px;
} }
/*operate 操作区域*/ /*operate 操作区域*/

View File

@ -52,3 +52,12 @@ export function allMarkedRead(data) {
data: data data: data
}) })
} }
// 获取用户统计
export function getUserMsgCount(id) {
return request({
url: '/system/message/user/msg/count/' + id,
method: 'get'
})
}

View File

@ -5,13 +5,22 @@
<breadcrumb id="breadcrumb-container" class="breadcrumb-container" v-if="!topNav"/> <breadcrumb id="breadcrumb-container" class="breadcrumb-container" v-if="!topNav"/>
<top-nav id="topmenu-container" class="topmenu-container" v-if="topNav"/> <top-nav id="topmenu-container" class="topmenu-container" v-if="topNav"/>
<div class="right-menu"> <div class="right-menu">
<!--<template v-if="device!=='mobile'"> <!-- <span @click="toMyCartPage">
<search id="header-search" class="right-menu-item" /> <el-badge :value="totalCartCount >= 99 ? '99+' : totalCartCount" class="item">
<span class="top-msg">消息</span>
</el-badge>
</span>-->
<span class="top-version">v1.0.0</span>
<span style="cursor: pointer;" @click="toMyCartPage">
<el-badge :value="totalCartCount >= 99 ? '99+' : totalCartCount" class="item">
<el-tooltip class="item" effect="light" content="消息通知" placement="bottom">
<i class="el-icon-bell"></i>
</el-tooltip>
</el-badge>
</span>
<screenfull id="screenfull" class="right-menu-item hover-effect" />
</template>-->
<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">
<span style="font-size: 16px"><i class="el-icon-user"/> {{nickName}}</span> <span style="font-size: 16px"><i class="el-icon-user"/> {{nickName}}</span>
@ -68,7 +77,10 @@ export default {
get() { get() {
return this.$store.state.settings.topNav return this.$store.state.settings.topNav
} }
} },
totalCartCount() {
return this.$store.state.user.unreadMsgNumber ? this.$store.state.user.unreadMsgNumber : 0
},
}, },
methods: { methods: {
toggleSideBar() { toggleSideBar() {
@ -84,7 +96,11 @@ export default {
location.href = '/index'; location.href = '/index';
}) })
}).catch(() => {}); }).catch(() => {});
} },
//
toMyCartPage() {
this.$router.push({ path: '/message' })
},
} }
} }
</script> </script>

View File

@ -11,6 +11,7 @@ const getters = {
userInfo: state => state.user.info, userInfo: state => state.user.info,
name: state => state.user.name, name: state => state.user.name,
nickName: state => state.user.nickName, nickName: state => state.user.nickName,
unreadMsgNumber: state => state.user.unreadMsgNumber,
introduction: state => state.user.introduction, introduction: state => state.user.introduction,
roles: state => state.user.roles, roles: state => state.user.roles,
permissions: state => state.user.permissions, permissions: state => state.user.permissions,

View File

@ -10,7 +10,8 @@ const user = {
info: {}, info: {},
avatar: '', avatar: '',
roles: [], roles: [],
permissions: [] permissions: [],
unreadMsgNumber: 0,
}, },
mutations: { mutations: {
@ -37,6 +38,9 @@ const user = {
}, },
SET_INFO:(state, info) => { SET_INFO:(state, info) => {
state.info = info state.info = info
},
SET_UNREAD_MSG_NUMBER:(state, info) => {
state.unreadMsgNumber = info
} }
}, },
@ -71,6 +75,7 @@ const user = {
commit('SET_ROLES', ['ROLE_DEFAULT']) commit('SET_ROLES', ['ROLE_DEFAULT'])
} }
commit('SET_ID', user.userId) commit('SET_ID', user.userId)
commit('SET_UNREAD_MSG_NUMBER', res.unMsgNumber)
commit('SET_NAME', user.userName) commit('SET_NAME', user.userName)
commit('SET_NICK_NAME', user.nickName) commit('SET_NICK_NAME', user.nickName)
commit('SET_AVATAR', avatar) commit('SET_AVATAR', avatar)

View File

@ -0,0 +1,575 @@
<template>
<div class="fbox1">
<div class="fl" v-loading="detailLoading">
<el-tabs v-model="detailActiveName">
<el-tab-pane label="基本信息" name="first">
<div class="el-form-border">
<el-form ref="form" label-width="150px">
<el-row>
<el-col :span="24"> <el-form-item label="文件分类">{{form.docCategoryName}}</el-form-item> </el-col>
<el-col :span="12"> <el-form-item label="文档编号">{{form.docCode}}</el-form-item> </el-col>
<el-col :span="12"> <el-form-item label="文档名称">{{form.docName}}</el-form-item> </el-col>
<el-col :span="12"> <el-form-item label="文档类别"><dict-tag :options="dict.type.doc_class" :value="form.docType"/></el-form-item> </el-col>
<el-col :span="12"> <el-form-item label="文档来源"><dict-tag :options="dict.type.doc_source" :value="form.docSource"/></el-form-item> </el-col>
<el-col :span="12"> <el-form-item label="负责人">{{form.docPrincipalsName}}</el-form-item> </el-col>
<el-col :span="12"> <el-form-item label="归属单位">{{form.docRespDeptName}}</el-form-item> </el-col>
<el-col :span="24"> <el-form-item label="备注">{{form.remark}}</el-form-item> </el-col>
</el-row>
</el-form><!--el-form-->
</div><!--el-form-border 表单-->
</el-tab-pane><!--el-tab-pane-->
<el-tab-pane label="关联附件" name="second">
<el-table :data="attachmentList" style="width: 100%">
<el-table-column label="序号" width="60" type="index" align="center"></el-table-column>
<el-table-column label="附件名称" prop="fileName" :show-overflow-tooltip="true" />
<!-- <el-table-column label="操作" align="center" width="180" v-if="!detailBoolean">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-view"
v-if="previewAuth(scope.row)"
@click="handlePreview(scope.row)"
>预览</el-button>
<el-button type="text" icon="el-icon-download" v-if="isShowOperation(scope.row)"
@click="handleDownload(scope.row)" v-loading="loadingDownload">下载</el-button>
</template>
</el-table-column>-->
</el-table><!--el-table-->
<!-- 分页组件 -->
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getAttachmentList"
/>
</el-tab-pane><!--el-tab-pane-->
</el-tabs><!--el-tabs-->
</div><!--fl 左侧页签-->
<div class="fr" v-if="isComment">
<div class="tboper">
<div class="tit">评论</div>
</div><!--tboper 标题与操作按钮-->
<div class="pltextarea">
<el-input v-model="discussionContent" type="textarea" placeholder="请输入您的意见" :rows="4" maxlength="1000" show-word-limit></el-input>
<div class="plbtn"><el-button @click="handleDiscussions">发布</el-button></div>
</div><!--pltextarea-->
<div class="pllist">
<template v-if="discussionsList && discussionsList.length > 0">
<div class="list" v-for="(item,index) in discussionsList" :key="item.id">
<div class="luser"><span class="xuser">{{getFirstChar(item.nickName)}}</span></div>
<div class="ltext">
<div class="nt"><span class="name">{{item.nickName}}</span><span class="time">{{ parseTime(item.createTime, '{y}-{m}-{d} {h}:{i}') }}</span></div>
<div class="te">{{item.content}}</div>
<div class="hb">
<a class="btn" @click="toggleReplyForm(index)">
<i class="el-icon-chat-line-round"></i>回复
</a>
</div>
<div class="pltextarea" v-if="showReplyForm[index]">
<el-input type="textarea" v-model="replyContent[index]" placeholder="请输入您的意见" :rows="2" maxlength="1000" show-word-limit></el-input>
<div class="plbtn">
<el-button @click="cancelReply(index)">取消</el-button>
<el-divider direction="vertical"></el-divider>
<el-button @click="submitReply(index, item)">发布</el-button>
</div>
</div>
<!--第二层级-->
<template v-if="item.repliesList && item.repliesList.length > 0">
<div class="list" v-for="(repItem,repIdex) in item.repliesList" :key="repItem.id">
<div class="luser"><span class="xuser">{{getFirstChar(repItem.nickName)}}</span></div>
<div class="ltext">
<div class="nt"><span class="name">{{repItem.nickName}}</span><span class="time">{{ parseTime(repItem.createTime, '{y}-{m}-{d} {h}:{i}') }}</span></div>
<div class="te">{{repItem.content}}</div>
<!-- <div class="hb"><a class="btn" @click="toggleReplyFormSon(index,repIdex)"><i class="el-icon-chat-line-round"></i>回复</a></div>
<div class="pltextarea" v-if="item.showReplyFormSon[repIdex]">
<el-input type="textarea" v-model="item.replyContentSon[repIdex]" placeholder="请输入您的意见" :rows="2" maxlength="1000" show-word-limit></el-input>
<div class="plbtn">
<el-button @click="cancelReplySon(index,repIdex)">取消</el-button>
<el-divider direction="vertical"></el-divider>
<el-button @click="submitReplySon(index,repIdex, item)">发布</el-button>
</div>
</div>-->
</div>
</div>
</template>
</div>
</div>
</template>
</div>
</div>
</div><!--el-form-border 表单-->
</template>
<script>
import { addDocument, updateDocument, getDocument } from "@/api/document/document";
import { deptTreeSelect } from "@/api/system/user";
import { documentTree } from "@/api/documentCategory/documentCategory.js";
import { listDiscussions, addDiscussions } from "@/api/tool/discussions.js";
import { listReplies, addReplies} from "@/api/tool/replies.js";
import { listAttachment } from "@/api/attachment/attachment";
import { addCount } from "@/api/tool/downloadCount";
export default {
name: 'editDocument',
components: {},
dicts:['doc_class','doc_source'],
props: {
tooId: {
type: String,
default: "",
required: false
},
relatedTool: {
type: Boolean,
default: true,
},
//
isDownload: {
type: Boolean,
default() {
return true
},
required: false
},
//
isComment: {
type: Boolean,
default() {
return true
},
required: false
},
},
data(){
return{
detailActiveName: 'first',
templateSelection: '',
drawer1: false,
checkList: [],
//
form: {
docId: undefined,
docCategoryId: undefined,
docCode: '',
docName: '',
docType: '',
docPrincipals: null,
docPrincipalsName: null,
docRespDept: this.$store.getters.userInfo.deptId,
docSource: '',
toolId: '',
remark: undefined,
docCategoryName: undefined,
},
fileList: [],
progress: 0,
//
rules: {
},
docCategory:[],
deptOptions:[],
uploadFileUrl: process.env.VUE_APP_BASE_API + "/common/upload", //
fileData: null,
editStatus: true,
toolDataInfo: [],
dataFile: [],
//
detailBoolean: false,
discussionContent: null, //
repliesContent: null, //
//
discussionsList: [],
//
repliesList: [],
showReplyForm: [],
replyContent: [],
detailLoading: false,
attachmentList: [],
attFileType: "zip,rar,7z",
isPreviewDisable: false,
loadingDownload: false,
userInfo: this.$store.getters.userInfo,
toolPrincipalsChoose: false,
docQueryParams: {
pageNum: 1,
pageSize: 10,
},
queryParams: {
pageNum: 1,
pageSize: 10,
},
total: 0,
}
},
computed: {
},
created(){
// this.getDeptTree();
this.getDocumentTree();
},
mounted(){
},
methods:{
chooseToolConfirm(){
this.$set(this.form, "toolId", this.templateSelection)
this.drawer1 = false;
},
getCurrentRow(row){
// row
},
showOpenHandle(){
this.reset();
this.title = "上传文档";
},
//
reset() {
this.form = {
docName: '',
docType: '',
docPrincipals: '',
docRespDept: '',
docSource: '',
toolId: ''
};
this.fileList = []
this.resetForm("form");
},
//
cancel() {
this.drawer1 = false;
this.reset();
},
generateUniqueID() {
// 使ID
const timestamp = new Date().getTime();
// IDID
const uniqueID = 'file_' + timestamp;
return uniqueID;
},
/** 查询部门下拉树结构 */
getDeptTree() {
deptTreeSelect().then(response => {
this.deptOptions = response.data;
});
},
/** 查询树形下拉树结构 */
getDocumentTree() {
documentTree().then(res => {
this.docCategory = res.data;
});
},
/**初始化 **/
resetForm() {
let self = this
self.form.docPrincipalsName = null
this.$refs.form.resetFields();
this.toolDataInfo = []
this.fileList = []
this.attachmentList = []
this.detailBoolean = false
this.setAllRequiredTrue(true)
this.$nextTick(()=>{
if(self.$refs.uploadFile){
self.$refs.uploadFile.clearFile();
}
})
},
editInit(docId, type){
let self = this
if(type == "detail"){
this.detailBoolean = true
self.setAllRequiredTrue(false)
}
self.$refs.form.resetFields();
self.toolDataInfo = []
self.$nextTick(()=>{
if(self.$refs.uploadFile){
self.$refs.uploadFile.clearFile();
}
getDocument(docId).then(res => {
self.form = res.data
self.toolDataInfo = []
let toolInfo = {toolId:self.form.toolId,toolName:self.form.toolName}
self.toolDataInfo.push(toolInfo)
self.dataFile = []
/* let fileData = res.data.attachment
self.$set(fileData, "name", fileData.fileOldName)
self.$set(fileData, "size", fileData.fileSize)
self.dataFile.push(fileData) */
self.getAttachmentList()
setTimeout(() => {
self.$set(self.form, "docCategoryName" , self.findLabelById(self.docCategory, self.form.docCategoryId) )
}, 300);
});
})
},
/** 评论 **/
handleDiscussions(){
let self = this
if (this.discussionContent == '' || this.discussionContent == null || this.discussionContent == undefined) {
self.$message({
message: '内容不能为空',//
type:'warning',  //
duration:1200,  //, 0 1200
});
return;
}
let data = {
businessId: this.form.docId,
content: this.discussionContent,
type: "doc",
}
self.$modal.confirm('是否确认发布?').then(()=> {
addDiscussions(data).then(res => {
this.discussionContent = null
self.$message({
message: '发布成功',//
type:'success',  //
duration:1200,  //, 0 1200
});
self.getAttachmentList()
}).catch(err =>{
this.discussionContent = null
console.error("handleDiscussions==err==", err)
self.$modal.msgError("发布失败");
});
})
},
getAttachmentList() {
let self = this
this.$set(this.queryParams,'del',"0")
this.$set(this.queryParams,'businessId',this.form.docId)
listAttachment(this.queryParams).then(res => {
self.attachmentList = res.rows;
self.total = res.total;
self.loading = false;
});
},
getFirstChar(value) {
if(!value){return ''}
return value.charAt(0);
},
toggleReplyForm(index) {
this.$set(this.showReplyForm, index, !this.showReplyForm[index]);
},
cancelReply(index) {
this.$set(this.showReplyForm, index, false);
this.$set(this.replyContent, index, '');
},
/** 第二级 **/
toggleReplyFormSon(parentIndex, repIndex) {
const parentItem = this.discussionsList[parentIndex];
this.$set(parentItem.showReplyFormSon, repIndex, !parentItem.showReplyFormSon[repIndex]);
// this.$set(this.showReplyFormSon, index, !this.showReplyFormSon[index]);
},
/** 第二级,取消回复 **/
cancelReplySon(parentIndex, repIndex) {
const parentItem = this.discussionsList[parentIndex];
this.$set(parentItem.showReplyFormSon, repIndex, false);
this.$set(parentItem.replyContentSon, repIndex, '');
},
/** 第二级回复 **/
submitReplySon(parentIndex, repIndex, repItem) {
let self = this
const parentItem = this.discussionsList[parentIndex];
const content = parentItem.replyContentSon[repIndex];
if (content.trim() == '' || content == null || content == undefined) {
self.$message({
message: '回复内容不能为空',//
type:'warning',  //
duration:1200,  //, 0 1200
});
return;
}
let data = {
"discussionId": repItem.id,
"content": content,
}
self.$modal.confirm('是否确认发布?').then(()=> {
addReplies(data).then(res => {
self.$message({
message: '发布成功',//
type:'success',  //
duration:1200,  //, 0 1200
});
self.cancelReplySon(parentIndex, repIndex)
self.getAttachmentList()
}).catch(err =>{
console.error("submitReplySon==err==", err)
self.$modal.msgError("发布失败");
});
})
//
this.$set(parentItem.replyContentSon, repIndex, '');
this.$set(parentItem.showReplyFormSon, repIndex, false);
},
/** 回复 **/
submitReply(index, item) {
let self = this
const content = this.replyContent[index];
if (content == '' || content == null || content == undefined) {
self.$message({
message: '回复内容不能为空',//
type:'warning',  //
duration:1200,  //, 0 1200
});
return;
}
let data = {
"discussionId": item.id,
"content": content,
}
self.$modal.confirm('是否确认发布?').then(()=> {
addReplies(data).then(res => {
self.$message({
message: '发布成功',//
type:'success',  //
duration:1200,  //, 0 1200
});
self.cancelReply(index)
self.getAttachmentList()
}).catch(err =>{
console.error("handleDiscussions==err==", err)
self.$modal.msgError("发布失败");
});
})
//
this.replyContent[index] = '';
this.showReplyForm[index] = false;
},
previewAuth(row){
if(row.fileUrl == null || row.fileUrl == '' || row.fileUrl == undefined){
return false
}
let extension = this.getExtension(row.fileUrl);
const acceptedExtensions = this.attFileType.toLowerCase().split(',');
if(acceptedExtensions.includes(extension)){
return false
}
return true
},
getExtension(filePath) {
// '.'
const parts = filePath.split('.');
//
const extension = parts.pop();
return extension;
},
handlePreview(row){
this.isPreviewDisable = true
this.$nextTick(() => {
this.$refs.previewForm.frontModulePreview(row)
})
},
/** 关闭预览 **/
previewClose(){
this.isPreviewDisable = false
},
/**
* 处理下载
* **/
handleDownload(row){
let self = this
self.loadingDownload = true
this.$download.resource(row.fileUrl);
//
if(row.businessId){
let formData = {
'businessId': row.businessId,
'businessType': 'doc',
'attId': row.id,
'attName': row.fileOldName
}
addCount(formData).then(res => {
});
}
setTimeout(()=>{
self.loadingDownload = false
},1000)
},
handleDelete(row){
const index = this.attachmentList.findIndex(item => item.fileNewName == row.fileNewName);
if (index !== -1) {
// attachmentList
this.attachmentList.splice(index, 1);
//
if (this.paginatedData.length === 0 && this.currentPage > 1) {
this.currentPage--;
}
}
// this.attachmentList.splice(row,1)
},
handleBeforeClose() {
this.viewDialogOpen = false
},
handleUploadSuccess(res) {
this.attachmentList.push(res)
//
},
handleUploadError(error) {
//
},
isShowOperation(row){
let self = this
if(row.businessId == null || row.businessId == undefined || row.businessId == ''){
return false
}
return true
},
submitPeople(peopleList){
this.$set(this.form,'docPrincipals',peopleList[0]['userId'])
this.$set(this.form,'docPrincipalsName',peopleList[0]['nickName'])
this.toolPrincipalsChoose = false;
},
setAllRequiredTrue(value) {
Object.keys(this.rules).forEach(key => {
this.rules[key].forEach(rule => {
rule.required = value;
});
});
},
handlePageChange(newPage) {
this.currentPage = newPage;
},
//
findLabelById(treeData, id) {
for (let i = 0; i < treeData.length; i++) {
let item = treeData[i];
if (item.id == id) {
return item.label;
}
if (item.children && item.children.length) {
const label = this.findLabelById(item.children, id);
if (label) {
return label;
}
}
}
return null;
}
}
}
</script>
<style scoped>
</style>

View File

@ -23,7 +23,7 @@
<el-col :span="24"> <el-col :span="24">
<el-form-item label="文档名称" prop="docName"> <el-form-item label="文档名称" prop="docName">
<template v-if="detailBoolean">{{form.docCode}}</template> <template v-if="detailBoolean">{{form.docName}}</template>
<template v-else> <template v-else>
<el-input v-model="form.docName" placeholder="请输入文档名称" maxlength="200" show-word-limit/> <el-input v-model="form.docName" placeholder="请输入文档名称" maxlength="200" show-word-limit/>
</template> </template>
@ -130,10 +130,6 @@
</div> </div>
<div class="el-form-border"> <div class="el-form-border">
<div class="operate"> <div class="operate">
<!-- <el-form-item label="文件" required>
</el-form-item>
<el-button type="primary" icon="el-icon-upload2" v-if="editStatus" @click="handleDocAdd">上传</el-button>-->
<template v-if="editStatus && !detailBoolean"> <template v-if="editStatus && !detailBoolean">
<uploadVue <uploadVue
:display="editStatus" :display="editStatus"
@ -150,12 +146,12 @@
</template> </template>
<!-- <el-button icon="el-icon-delete">删除</el-button>--> <!-- <el-button icon="el-icon-delete">删除</el-button>-->
</div><!--operate 操作按钮--> </div><!--operate 操作按钮-->
<el-table :data="attachmentList" style="width: 100%"> <el-table :data="paginatedData" style="width: 100%">
<!-- <el-table-column type="selection" width="50" align="center"> </el-table-column>--> <!-- <el-table-column type="selection" width="50" align="center"> </el-table-column>-->
<el-table-column label="序号" width="60" type="index"></el-table-column> <el-table-column label="序号" width="60" type="index" align="center"></el-table-column>
<el-table-column label="附件名称" prop="fileName" :show-overflow-tooltip="true" /> <el-table-column label="附件名称" prop="fileName" :show-overflow-tooltip="true" />
<el-table-column label="操作" align="center" width="180"> <el-table-column label="操作" align="center" width="180" v-if="!detailBoolean">
<template slot-scope="scope" v-if="scope.row.roleId !== 1"> <template slot-scope="scope">
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
@ -167,24 +163,27 @@
size="mini" size="mini"
type="text" type="text"
icon="el-icon-delete" icon="el-icon-delete"
v-if="editStatus && !detailBoolean" v-if="editStatus"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
>删除</el-button> >删除</el-button>
<el-button type="text" icon="el-icon-download" v-if="isShowOperation(scope.row)" @click="handleDownload(scope.row)" v-loading="loadingDownload">下载</el-button> <el-button type="text" icon="el-icon-download" v-if="isShowOperation(scope.row)"
@click="handleDownload(scope.row)" v-loading="loadingDownload">下载</el-button>
</template> </template>
</el-table-column> </el-table-column>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getAttachmentList"
/>
</el-table><!--el-table--> </el-table><!--el-table-->
<!-- 分页组件 -->
<el-pagination
v-show="total > 0"
:current-page.sync="currentPage"
:page-size.sync="pageSize"
:total="total"
@current-change="handlePageChange"
layout="total, prev, pager, next"
/>
</div> </div>
</div><!--fl 左侧页签--> </div><!--fl 左侧页签-->
<div class="fr" v-if="detailBoolean"> <div class="fr" v-if="detailBoolean && isComment">
<div class="tboper"> <div class="tboper">
<div class="tit">评论</div> <div class="tit">评论</div>
</div><!--tboper 标题与操作按钮--> </div><!--tboper 标题与操作按钮-->
@ -274,6 +273,22 @@
type: Boolean, type: Boolean,
default: true, default: true,
}, },
//
isDownload: {
type: Boolean,
default() {
return true
},
required: false
},
//
isComment: {
type: Boolean,
default() {
return true
},
required: false
},
}, },
data(){ data(){
return{ return{
@ -368,12 +383,25 @@
}, },
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 99999,
}, },
total: 0 currentPage: 1, //
pageSize: 10, //
} }
}, },
computed: {
//
paginatedData() {
const start = (this.currentPage - 1) * this.pageSize;
const end = this.currentPage * this.pageSize;
return this.attachmentList.slice(start, end);
},
//
total() {
return this.attachmentList.length;
},
},
created(){ created(){
this.getDeptTree(); this.getDeptTree();
this.getDocumentTree(); this.getDocumentTree();
@ -639,9 +667,9 @@
let self = this let self = this
this.$set(this.queryParams,'del',"0") this.$set(this.queryParams,'del',"0")
this.$set(this.queryParams,'businessId',this.form.docId) this.$set(this.queryParams,'businessId',this.form.docId)
listAttachment({businessId:this.form.docId}).then(res => { listAttachment(this.queryParams).then(res => {
self.attachmentList = res.rows; self.attachmentList = res.rows;
self.total = res.total; // self.total = res.total;
self.loading = false; self.loading = false;
}); });
}, },
@ -794,7 +822,16 @@
},1000) },1000)
}, },
handleDelete(row){ handleDelete(row){
this.attachmentList.splice(row,1) const index = this.attachmentList.findIndex(item => item.fileNewName == row.fileNewName);
if (index !== -1) {
// attachmentList
this.attachmentList.splice(index, 1);
//
if (this.paginatedData.length === 0 && this.currentPage > 1) {
this.currentPage--;
}
}
// this.attachmentList.splice(row,1)
}, },
handleBeforeClose() { handleBeforeClose() {
this.viewDialogOpen = false this.viewDialogOpen = false
@ -824,7 +861,10 @@
rule.required = value; rule.required = value;
}); });
}); });
} },
handlePageChange(newPage) {
this.currentPage = newPage;
},
} }
} }

View File

@ -228,6 +228,7 @@
</span> </span>
</el-dialog> </el-dialog>
<!--文档修改-->
<el-drawer :visible.sync="open" <el-drawer :visible.sync="open"
:modal-append-to-body="false" :show-close="false" :close-on-press-escape="false" :modal-append-to-body="false" :show-close="false" :close-on-press-escape="false"
size="75%"> size="75%">
@ -245,7 +246,21 @@
</el-drawer> </el-drawer>
<!-- 工具导出对话框 --> <!--文档详情-->
<el-drawer :visible.sync="detailDocOpen"
:modal-append-to-body="false" :show-close="false" :close-on-press-escape="false"
size="75%">
<template #title>
<span class="title">{{docTitle}}</span>
<div class="drawer-head-btn">
<el-button @click="docDetailCancel()"> </el-button>
</div><!--drawer-head-btn 抽屉顶部按钮区域-->
</template>
<doc-detail ref="docDetailRef" @submit="docDetailFormSubmit"/>
</el-drawer>
<!-- 文档导出对话框 -->
<el-dialog :title="exportTitle" :visible.sync="exportDrawerOpen" <el-dialog :title="exportTitle" :visible.sync="exportDrawerOpen"
:modal-append-to-body="false" :show-close="false" :close-on-press-escape="false" :modal-append-to-body="false" :show-close="false" :close-on-press-escape="false"
width="980px" append-to-body> width="980px" append-to-body>
@ -288,7 +303,7 @@
</span> </span>
</el-dialog> </el-dialog>
<!-- 工具详情对话框 --> <!-- 文档下载对话框 -->
<el-drawer :visible.sync="fileDetailDrawerOpen" <el-drawer :visible.sync="fileDetailDrawerOpen"
:modal-append-to-body="false" :show-close="false" :close-on-press-escape="false" :modal-append-to-body="false" :show-close="false" :close-on-press-escape="false"
size="80%" class="no-padding" @close="handleFileCloseDetail()"> size="80%" class="no-padding" @close="handleFileCloseDetail()">
@ -302,7 +317,8 @@
<download-file-detail ref="downloadFileDetailRef" :docDetail="docDetail"/> <download-file-detail ref="downloadFileDetailRef" :docDetail="docDetail"/>
</template> </template>
</el-drawer><!--el-drawer 详情-抽屉--> </el-drawer><!--el-drawer 详情-抽屉-->
<!-- <upload-progress/>-->
</div> </div>
</template> </template>
@ -316,10 +332,12 @@ import uploadProgress from "./uploadProgress";
import Treeselect from "@riophae/vue-treeselect"; import Treeselect from "@riophae/vue-treeselect";
import { exportDocx } from '@/utils/docUtil/docutil.js'; import { exportDocx } from '@/utils/docUtil/docutil.js';
import downloadFileDetail from "./downloadFileDetail.vue"; import downloadFileDetail from "./downloadFileDetail.vue";
import docDetail from "@/views/document/detail";
import store from "@/store";
export default { export default {
name: "Document", name: "Document",
components: { editDocument, uploadProgress, Treeselect, downloadFileDetail}, components: { editDocument, uploadProgress, Treeselect, downloadFileDetail, docDetail},
dicts:['doc_class','doc_source','doc_upload_status'], dicts:['doc_class','doc_source','doc_upload_status'],
data() { data() {
return { return {
@ -447,6 +465,8 @@ export default {
batchExportFlag: false, batchExportFlag: false,
// //
selection: undefined, selection: undefined,
docDetail: {},
detailDocOpen: false,
}; };
}, },
created() { created() {
@ -523,12 +543,12 @@ export default {
}) })
}, },
handleDetail(row){ handleDetail(row){
this.docTitle="详情" this.docTitle="文档详情"
this.docTipAddOrEdit = 'detail' this.docTipAddOrEdit = 'detail'
this.docDetailDisable=false this.docDetailDisable=false
this.open = true this.detailDocOpen = true
this.$nextTick(()=>{ this.$nextTick(()=>{
this.$refs.editDocumentRef.editInit(row.docId, "detail"); this.$refs.docDetailRef.editInit(row.docId, "detail");
}) })
}, },
handlePreview(row){ handlePreview(row){
@ -550,6 +570,10 @@ export default {
this.open = false; this.open = false;
this.getList(); this.getList();
}, },
docDetailFormSubmit: function() {
this.detailDocOpen = false;
this.getList();
},
/** 删除按钮操作 */ /** 删除按钮操作 */
handleDelete(row) { handleDelete(row) {
let self = this let self = this
@ -648,16 +672,30 @@ export default {
}, },
/** 发布操作 */ /** 发布操作 */
handlePush(row) { handlePush(row) {
let self = this
const docIds = row.docId || this.ids; const docIds = row.docId || this.ids;
if(docIds == null || docIds == undefined || docIds =='' || docIds.length < 0){ if(docIds == null || docIds == undefined || docIds =='' || docIds.length < 0){
this.$modal.msgError(`最少选择一条数据`); this.$modal.msgError(`最少选择一条数据`);
return; return;
} }
//
let delFlag = false;
for(let item of self.selection){
if(!(item.docStatus == 'ysc')){
delFlag = true;
}
}
if(delFlag){
this.$modal.msgError(`只能发布文档状态为[已上传]数据,请重新选择`);
return
}
this.$modal.confirm('是否确认发布?').then(function() { this.$modal.confirm('是否确认发布?').then(function() {
return pushDoc(docIds); return pushDoc(docIds);
}).then(() => { }).then(() => {
this.getList(); self.getList();
this.$modal.msgSuccess("发布成功"); store.commit('SET_UNREAD_MSG_NUMBER', this.$store.state.user.unreadMsgNumber+1);
self.$modal.msgSuccess("发布成功");
}).catch((err) => { }).catch((err) => {
console.error(err) console.error(err)
}); });
@ -672,6 +710,10 @@ export default {
this.$refs.editDocumentRef.resetForm(); this.$refs.editDocumentRef.resetForm();
this.open = false this.open = false
}, },
docDetailCancel(){
this.$refs.docDetailRef.resetForm();
this.detailDocOpen = false
},
previewAuth(row){ previewAuth(row){
if(row.docUrl == null || row.docUrl == '' || row.docUrl == undefined){ if(row.docUrl == null || row.docUrl == '' || row.docUrl == undefined){
return false return false

View File

@ -80,7 +80,7 @@
</div> </div>
<div class="rt"> <div class="rt">
<el-table v-loading="downLoading" :data="toolDownStatList"> <el-table v-loading="downLoading" :data="toolDownStatList">
<el-table-column type="index" label="序号" width="50" /> <el-table-column type="index" label="序号" width="50" align="center"/>
<el-table-column label="文档编号" align="center" key="docCode" prop="docCode" /> <el-table-column label="文档编号" align="center" key="docCode" prop="docCode" />
<el-table-column label="文档名称" align="center" key="docName" prop="docName" :show-overflow-tooltip="true" /> <el-table-column label="文档名称" align="center" key="docName" prop="docName" :show-overflow-tooltip="true" />
<el-table-column label="下载次数" align="center" key="docDownNum" prop="docDownNum" width="120" /> <el-table-column label="下载次数" align="center" key="docDownNum" prop="docDownNum" width="120" />

View File

@ -13,8 +13,19 @@
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="消息类型" prop="businessType">
<el-select v-model="queryParams.businessType" placeholder="请选择消息类型" clearable>
<el-option
v-for="dict in dict.type.msg_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="状态" prop="states"> <el-form-item label="状态" prop="states">
<el-select v-model="queryParams.states" placeholder="状态" clearable> <el-select v-model="queryParams.states" placeholder="请选择状态" clearable>
<el-option <el-option
v-for="dict in dict.type.msg_status" v-for="dict in dict.type.msg_status"
:key="dict.value" :key="dict.value"
@ -37,10 +48,24 @@
<el-button type="primary" v-if="tableList && tableList.length > 0" @click="setAllMarkedRead" icon="el-icon-check">全部标记已读</el-button> <el-button type="primary" v-if="tableList && tableList.length > 0" @click="setAllMarkedRead" icon="el-icon-check">全部标记已读</el-button>
</div><!--operate 操作按钮--> </div><!--operate 操作按钮-->
<el-table v-loading="loading" :data="tableList"> <el-table v-loading="loading" :data="tableList">
<el-table-column type="index" label="序号" width="50" /> <el-table-column type="index" label="序号" width="50" align="center" />
<el-table-column label="消息内容" prop="content" min-width="120" /> <el-table-column label="消息内容" prop="content" min-width="120">
<el-table-column label="接收时间" prop="createTime" :show-overflow-tooltip="true" min-width="120"/> <template v-slot="{ row }">
<el-table-column label="消息状态" prop="states" :show-overflow-tooltip="true" min-width="80" > <el-link target="_blank" @click="handleDetail(row)">
{{ row.content }}
</el-link>
</template>
</el-table-column>
<el-table-column label="消息类型" align="center" prop="businessType" width="80px">
<template v-slot="{ row }">
<template v-for="dict in dict.type.msg_type">
<!-- {{ dict }} -->
<el-tag :type="dict.raw.listClass" v-if="row.businessType == dict.value" :key="dict.value">{{ dict.label }}</el-tag>
</template>
</template>
</el-table-column>
<el-table-column label="接收时间" prop="createTime" :show-overflow-tooltip="true" width="160px"/>
<el-table-column label="消息状态" prop="states" align="center" :show-overflow-tooltip="true" width="80px" >
<template v-slot="{ row }"> <template v-slot="{ row }">
<template v-for="dict in dict.type.msg_status"> <template v-for="dict in dict.type.msg_status">
<!-- {{ dict }} --> <!-- {{ dict }} -->
@ -48,7 +73,7 @@
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" min-width="100" fixed="right"> <el-table-column label="操作" align="center" width="160px" fixed="right">
<template v-slot="{ row }"> <template v-slot="{ row }">
<el-button <el-button
size="mini" size="mini"
@ -69,16 +94,52 @@
/> />
</div> </div>
</el-card> </el-card>
<!-- 工具详情对话框 -->
<el-drawer :visible.sync="detailDrawerOpen" :modal-append-to-body="false" :show-close="false"
size="80%" class="no-padding" :close-on-press-escape="false" @close="handleCloseDetail()">
<template #title>
<span>{{toolTitle}}</span>
<div class="drawer-head-btn">
<el-button @click="detailDrawerOpen = false"> </el-button>
</div><!--drawer-head-btn 抽屉顶部按钮区域-->
</template>
<template v-if="detailOpen">
<tool-detail ref="toolDetailRef" :toolDetail="toolDetail" :isDownload="false" :isComment="false"/>
</template>
</el-drawer><!--el-drawer 详情-抽屉-->
<!--文档详情-->
<el-drawer :visible.sync="detailDocOpen"
:modal-append-to-body="false" :show-close="false" :close-on-press-escape="false"
size="75%">
<template #title>
<span class="title">{{docTitle}}</span>
<div class="drawer-head-btn">
<el-button @click="docCancel()"> </el-button>
</div><!--drawer-head-btn 抽屉顶部按钮区域-->
</template>
<doc-detail ref="editDocumentRef" @submit="editDocumentSubmit" :isDownload="false" :isComment="false"/>
</el-drawer>
</div> </div>
</template> </template>
<script> <script>
import { listMessage, getMessage, delMessage, addMessage, updateMessage,allMarkedRead } from "@/api/message/message" import { listMessage, updateMessage,allMarkedRead } from "@/api/message/message"
import { deptTreeSelect } from "@/api/system/user"; import { deptTreeSelect } from "@/api/system/user";
import docDetail from "@/views/document/detail";
import toolDetail from "@/views/tool/toolDetail";
import { getUserMsgCount } from "@/api/message/message"
export default { export default {
name: "Document", name: "Document",
dicts: ['msg_status'], dicts: ['msg_status', 'msg_type'],
components: { docDetail, toolDetail},
data() { data() {
return { return {
// //
@ -120,7 +181,18 @@ export default {
pageSize: 10, pageSize: 10,
content: '', content: '',
states: '', states: '',
businessType: '',
}, },
//
detailDrawerOpen: false,
toolTitle:'',
detailOpen: false,
toolDetail: {},
//
docTitle: '',
detailDocOpen: false,
docTipAddOrEdit: null,
docDetailDisable: true,
}; };
}, },
created() { created() {
@ -179,6 +251,9 @@ export default {
self.$set(formData, "states", 2) self.$set(formData, "states", 2)
updateMessage(formData).then(response => { updateMessage(formData).then(response => {
self.$modal.msgSuccess(response?.msg || '操作成功') self.$modal.msgSuccess(response?.msg || '操作成功')
getUserMsgCount(self.$store.getters.userId).then(res => {
self.$store.commit("SET_UNREAD_MSG_NUMBER", res.data);
});
self.getList(); self.getList();
}) })
}).catch((err) => {console.error(err)}); }).catch((err) => {console.error(err)});
@ -200,10 +275,48 @@ export default {
} }
allMarkedRead(formData).then(response => { allMarkedRead(formData).then(response => {
self.$modal.msgSuccess(response?.msg || '操作成功') self.$modal.msgSuccess(response?.msg || '操作成功')
getUserMsgCount(self .$store.getters.userId).then(res => {
self.$store.commit("SET_UNREAD_MSG_NUMBER", res.data);
});
self.getList(); self.getList();
}) })
}).catch((err) => {console.error(err)}); }).catch((err) => {console.error(err)});
}, },
/** 查看详情 **/
handleDetail(row){
if(row.businessType == 'tool'){
this.detailDrawerOpen = true
this.detailOpen = true
this.toolDetail = {toolId: row.businessId}
this.toolTitle = '工具详情'
}else if(row.businessType == 'doc'){
this.docTitle="文档详情"
this.docTipAddOrEdit = 'detail'
this.docDetailDisable=false
this.detailDocOpen = true
this.$nextTick(()=>{
this.$refs.editDocumentRef.editInit(row.businessId, "detail");
})
}
},
/** 关闭详情 **/
handleCloseDetail(){
this.detailDrawerOpen = false;
this.detailOpen = false;
this.$refs.toolDetailRef.$destroy(); //
this.$nextTick(() => {
this.$refs.toolDetailRef = null; //
});
},
docCancel(){
this.$refs.editDocumentRef.resetForm();
this.detailDocOpen = false
},
editDocumentSubmit: function() {
this.detailDocOpen = false;
},
} }
}; };
</script> </script>

View File

@ -23,6 +23,7 @@
<el-table-column <el-table-column
label="序号" label="序号"
width="60" width="60"
align="center"
type="index" type="index"
></el-table-column> ></el-table-column>
@ -81,6 +82,7 @@
<el-table-column <el-table-column
label="序号" label="序号"
width="60" width="60"
align="center"
type="index" type="index"
></el-table-column> ></el-table-column>
<el-table-column <el-table-column

View File

@ -95,7 +95,7 @@
</div> </div>
<div class="rt"> <div class="rt">
<el-table v-loading="downLoading" :data="toolDownStatList"> <el-table v-loading="downLoading" :data="toolDownStatList">
<el-table-column type="index" label="序号" width="50" /> <el-table-column type="index" label="序号" width="50" align="center"/>
<el-table-column label="工具编号" align="center" key="toolCode" prop="toolCode" /> <el-table-column label="工具编号" align="center" key="toolCode" prop="toolCode" />
<el-table-column label="工具名称" align="center" key="toolName" prop="toolName" :show-overflow-tooltip="true" /> <el-table-column label="工具名称" align="center" key="toolName" prop="toolName" :show-overflow-tooltip="true" />
<el-table-column label="下载次数" align="center" key="toolDownNum" prop="toolDownNum" width="120" /> <el-table-column label="下载次数" align="center" key="toolDownNum" prop="toolDownNum" width="120" />

View File

@ -290,16 +290,15 @@ export default {
value: "1", value: "1",
label: "全部数据权限" label: "全部数据权限"
}, },
/*
{ {
value: "2", value: "2",
label: "自定数据权限" label: "自定数据权限"
},*/ },
{ {
value: "3", value: "3",
label: "本部门数据权限" label: "本部门数据权限"
} }
/*, ,
{ {
value: "4", value: "4",
label: "本部门及以下数据权限" label: "本部门及以下数据权限"
@ -307,7 +306,7 @@ export default {
{ {
value: "5", value: "5",
label: "仅本人数据权限" label: "仅本人数据权限"
}*/ }
], ],
// //
menuOptions: [], menuOptions: [],

View File

@ -95,16 +95,16 @@
</div><!--operate 操作按钮--> </div><!--operate 操作按钮-->
<el-table v-loading="loading" :data="toolList" ref="tableRef" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="toolList" ref="tableRef" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center"/> <el-table-column type="selection" width="50" align="center"/>
<el-table-column label="工具编号" key="toolCode" prop="toolCode" v-if="columns[0].visible" /> <el-table-column label="工具编号" key="toolCode" prop="toolCode" width="150px"/>
<el-table-column label="工具名称" key="toolName" prop="toolName" v-if="columns[1].visible" :show-overflow-tooltip="true" /> <el-table-column label="工具名称" key="toolName" prop="toolName" :show-overflow-tooltip="true" width="150px"/>
<el-table-column label="工具类别" key="toolType" prop="toolType" v-if="columns[2].visible" :show-overflow-tooltip="true" > <el-table-column label="工具类别" key="toolType" prop="toolType" :show-overflow-tooltip="true" >
<template slot-scope="scope"> <template slot-scope="scope">
<dict-tag :options="dict.type.tool_type" :value="scope.row.toolType"/> <dict-tag :options="dict.type.tool_type" :value="scope.row.toolType"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="归属单位" key="toolRespDeptName" prop="toolRespDeptName" v-if="columns[3].visible" :show-overflow-tooltip="true" /> <el-table-column label="归属单位" key="toolRespDeptName" prop="toolRespDeptName" :show-overflow-tooltip="true" />
<el-table-column label="负责人" key="toolPrincipalsName" prop="toolPrincipalsName" v-if="columns[4].visible" width="120" /> <el-table-column label="负责人" key="toolPrincipalsName" prop="toolPrincipalsName" width="120" />
<el-table-column label="状态" align="center" key="status" v-if="columns[5].visible"> <el-table-column label="状态" align="center" key="status" >
<template slot-scope="scope"> <template slot-scope="scope">
<dict-tag :options="dict.type.tool_status" :value="scope.row.status"/> <dict-tag :options="dict.type.tool_status" :value="scope.row.status"/>
</template> </template>
@ -146,7 +146,7 @@
</el-table-column> </el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[6].visible" width="160"> <el-table-column label="创建时间" align="center" prop="createTime" width="160">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
</template> </template>
@ -155,12 +155,12 @@
label="操作" label="操作"
align="center" align="center"
fixed="right" fixed="right"
width="270px" width="260px"
class-name="small-padding fixed-width" class-name="small-padding fixed-width"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<!-- && !scope.row.downloadStatus--> <!-- && !scope.row.downloadStatus v-if="checkApplyUseBtn(scope.row)"-->
<el-button type="text" icon="el-icon-info" v-if="checkApplyUseBtn(scope.row)" @click="applyUse(scope.row)">申请使用</el-button> <el-button type="text" icon="el-icon-info" @click="applyUse(scope.row)">申请使用</el-button>
<el-button type="text" icon="el-icon-info" @click="handleDetail(scope.row)">详情</el-button> <el-button type="text" icon="el-icon-info" @click="handleDetail(scope.row)">详情</el-button>
<el-button type="text" icon="el-icon-download" v-if="scope.row.downloadStatus" @click="handleFileDownload(scope.row)">下载</el-button> <el-button type="text" icon="el-icon-download" v-if="scope.row.downloadStatus" @click="handleFileDownload(scope.row)">下载</el-button>
<el-dropdown size="mini" v-if="selectable(scope.row)" @command="(command) => handleCommand(command, scope.row)"> <el-dropdown size="mini" v-if="selectable(scope.row)" @command="(command) => handleCommand(command, scope.row)">

View File

@ -29,7 +29,7 @@
</el-form><!--el-form--> </el-form><!--el-form-->
</div><!--el-form-border 表单--> </div><!--el-form-border 表单-->
</el-tab-pane><!--el-tab-pane--> </el-tab-pane><!--el-tab-pane-->
<el-tab-pane label="关联件" name="second"> <el-tab-pane label="关联件" name="second">
<el-table :data="attachmentList" style="width: 100%"> <el-table :data="attachmentList" style="width: 100%">
<el-table-column label="附件名称" prop="fileName" :show-overflow-tooltip="true" /> <el-table-column label="附件名称" prop="fileName" :show-overflow-tooltip="true" />
<!-- <el-table-column label="类别" prop="docType" :show-overflow-tooltip="true" width="80" > <!-- <el-table-column label="类别" prop="docType" :show-overflow-tooltip="true" width="80" >
@ -58,21 +58,21 @@
v-if="previewAuth(scope.row)" v-if="previewAuth(scope.row)"
@click="handlePreview(scope.row)" @click="handlePreview(scope.row)"
>预览</el-button> >预览</el-button>
<el-button type="text" icon="el-icon-download" @click="handleDownload(scope.row)" v-loading="loadingDownload">下载</el-button> <el-button type="text" icon="el-icon-download" v-if="isDownload" @click="handleDownload(scope.row)" v-loading="loadingDownload">下载</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table><!--el-table--> </el-table><!--el-table-->
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getAttachmentList"
/>
</el-tab-pane><!--el-tab-pane--> </el-tab-pane><!--el-tab-pane-->
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getAttachmentList"
/>
</el-tabs><!--el-tabs--> </el-tabs><!--el-tabs-->
</div><!--fl 左侧页签--> </div><!--fl 左侧页签-->
<div class="fr"> <div class="fr" v-if="isComment">
<div class="tboper"> <div class="tboper">
<div class="tit">评论</div> <div class="tit">评论</div>
</div><!--tboper 标题与操作按钮--> </div><!--tboper 标题与操作按钮-->
@ -162,7 +162,19 @@
type: Object, type: Object,
default: {}, default: {},
required: false required: false
} },
//
isDownload: {
type: Boolean,
default: true,
required: false
},
//
isComment: {
type: Boolean,
default: true,
required: false
},
}, },
data(){ data(){
return{ return{

View File

@ -244,7 +244,7 @@
</template> </template>
<!-- <el-button icon="el-icon-delete">删除</el-button>--> <!-- <el-button icon="el-icon-delete">删除</el-button>-->
</div><!--operate 操作按钮--> </div><!--operate 操作按钮-->
<el-table :data="attachmentList" style="width: 100%"> <el-table :data="paginatedData" style="width: 100%">
<!-- <el-table-column type="selection" width="50" align="center"> </el-table-column>--> <!-- <el-table-column type="selection" width="50" align="center"> </el-table-column>-->
<el-table-column label="序号" width="60" align="center" type="index"></el-table-column> <el-table-column label="序号" width="60" align="center" type="index"></el-table-column>
<el-table-column label="附件名称" prop="fileName" :show-overflow-tooltip="true" /> <el-table-column label="附件名称" prop="fileName" :show-overflow-tooltip="true" />
@ -268,6 +268,15 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table><!--el-table--> </el-table><!--el-table-->
<!-- 分页组件 -->
<el-pagination
v-show="total > 0"
:current-page.sync="currentPage"
:page-size.sync="pageSize"
:total="total"
@current-change="handlePageChange"
layout="total, prev, pager, next"
/>
</div> </div>
<!-- 流程选择下一环节及人员 开始 --> <!-- 流程选择下一环节及人员 开始 -->
@ -330,6 +339,7 @@ import ToolSelector from '@/components/tool-selector/index.vue'
import uploadVue from '@/components/FileUpload/optimizeToolUpload.vue' import uploadVue from '@/components/FileUpload/optimizeToolUpload.vue'
import { addCount } from "@/api/tool/downloadCount"; import { addCount } from "@/api/tool/downloadCount";
import previewUtil from '@/components/PreviewUtil/previewUtil.vue' import previewUtil from '@/components/PreviewUtil/previewUtil.vue'
import store from "@/store";
// PDF // PDF
export default { export default {
@ -364,10 +374,9 @@ export default {
return { return {
toolPrincipalsChoose: false, toolPrincipalsChoose: false,
addDocShow: false, addDocShow: false,
docQueryParams: { attQueryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 99999,
toolId: ''
}, },
defaultStaff: [], defaultStaff: [],
yes: 'Y', yes: 'Y',
@ -462,10 +471,23 @@ export default {
attachmentList: [], attachmentList: [],
attFileType: "zip,rar,7z", attFileType: "zip,rar,7z",
isPreviewDisable: false, isPreviewDisable: false,
title: '工具发布' title: '工具发布',
currentPage: 1, //
pageSize: 10, //
}; };
}, },
computed: {}, computed: {
//
paginatedData() {
const start = (this.currentPage - 1) * this.pageSize;
const end = this.currentPage * this.pageSize;
return this.attachmentList.slice(start, end);
},
//
total() {
return this.attachmentList.length;
},
},
watch: { watch: {
data (val) { data (val) {
if (val) { if (val) {
@ -524,7 +546,7 @@ export default {
// _this.attachmentList = formData.attachmentList // _this.attachmentList = formData.attachmentList
formData.association = JSON.parse(res.data.association) formData.association = JSON.parse(res.data.association)
_this.form = formData _this.form = formData
_this.getDocumentList(res.data.toolId) _this.getAttachmentList(res.data.toolId)
}).finally(()=>{ }).finally(()=>{
_this.detailLoading = false _this.detailLoading = false
}); });
@ -812,6 +834,10 @@ export default {
this.$set(formData,'attachmentList',_this.attachmentList) this.$set(formData,'attachmentList',_this.attachmentList)
addTool(formData).then((res) => { addTool(formData).then((res) => {
if (res.code===200) { if (res.code===200) {
/* if(formData.recordStatus == 'done'){
console.info("2222222222222222", _this.$store.state.user.unreadMsgNumber+1)
store.commit('SET_UNREAD_MSG_NUMBER', _this.$store.state.user.unreadMsgNumber+1);
} */
_this.$message({ _this.$message({
message: '流程提交成功',// message: '流程提交成功',//
type:'success',  // type:'success',  //
@ -833,7 +859,15 @@ export default {
}); });
}, },
handleDelete(row){ handleDelete(row){
this.attachmentList.splice(row,1) const index = this.attachmentList.findIndex(item => item.fileNewName == row.fileNewName);
if (index !== -1) {
// attachmentList
this.attachmentList.splice(index, 1);
//
if (this.paginatedData.length === 0 && this.currentPage > 1) {
this.currentPage--;
}
}
}, },
/** /**
* 新增上传附件 * 新增上传附件
@ -844,13 +878,13 @@ export default {
this.$refs.addDocRef.resetForm() this.$refs.addDocRef.resetForm()
}) })
}, },
getDocumentList(toolId) { getAttachmentList(toolId) {
this.loading = true this.loading = true
this.$set(this.docQueryParams,'del',"0") this.$set(this.attQueryParams,'del',"0")
this.$set(this.docQueryParams,'businessId',toolId) this.$set(this.attQueryParams,'businessId',toolId)
listAttachment(this.docQueryParams).then(res => { listAttachment(this.attQueryParams).then(res => {
this.attachmentList = res.rows; this.attachmentList = res.rows;
this.total = res.total; // this.total = res.total;
this.loading = false; this.loading = false;
} }
); );
@ -978,6 +1012,9 @@ export default {
handleUploadError(error) { handleUploadError(error) {
// //
}, },
handlePageChange(newPage) {
this.currentPage = newPage;
},
}, },

View File

@ -185,6 +185,8 @@ import { addApply, getInfoByBpmcId, updateApply } from '@/api/tool/toolApply'
import { listItem } from '@/api/tool/userApplyItem' import { listItem } from '@/api/tool/userApplyItem'
import blUserSelector from '@/components/user-selector/src/user-selector.vue' import blUserSelector from '@/components/user-selector/src/user-selector.vue'
import { getTool } from "@/api/tool/tool"; import { getTool } from "@/api/tool/tool";
import store from "@/store";
// PDF // PDF
export default { export default {
dicts: ['sys_normal_disable','tool_type', 'tool_source', 'tool_status'], dicts: ['sys_normal_disable','tool_type', 'tool_source', 'tool_status'],
@ -619,6 +621,9 @@ export default {
formData.editStatus = _this.editStatus formData.editStatus = _this.editStatus
addApply(formData).then((res) => { addApply(formData).then((res) => {
if (res.code===200) { if (res.code===200) {
if(formData.recordStatus == 'done'){
store.commit('SET_UNREAD_MSG_NUMBER', _this.$store.state.user.unreadMsgNumber+1);
}
_this.$message({ _this.$message({
message: '流程提交成功',// message: '流程提交成功',//
type:'success',  // type:'success',  //

View File

@ -120,6 +120,8 @@
<script> <script>
import { workflowToDoList } from "@/api/my_business/workflow"; import { workflowToDoList } from "@/api/my_business/workflow";
import DealDrawer from "@/components/DealDrawer"; import DealDrawer from "@/components/DealDrawer";
import { getUserMsgCount } from "@/api/message/message"
export default { export default {
name: "Post", name: "Post",
dicts: ["sys_normal_disable", "sys_operterType"], dicts: ["sys_normal_disable", "sys_operterType"],
@ -269,6 +271,9 @@ export default {
// //
handleCloseChange() { handleCloseChange() {
this.dealDrawerShow = false this.dealDrawerShow = false
getUserMsgCount(this.$store.getters.userId).then(res => {
this.$store.commit("SET_UNREAD_MSG_NUMBER", res.data);
});
this.getListData(); this.getListData();
}, },
/** 搜索按钮操作 */ /** 搜索按钮操作 */