#I1KQUK 开放地址首页展示优化,优化查看编辑页展示及url参数,无权限时不展示对应按钮

This commit is contained in:
暮光:城中城
2020-06-16 23:13:27 +08:00
parent 0451b9319c
commit 1abcc4f92e
40 changed files with 737 additions and 534 deletions

View File

@@ -1,11 +1,8 @@
<template>
<div style="padding: 10px;" class="page-edit-vue">
<el-row type="border-card">
<div style="margin-bottom: 10px;padding: 10px;" v-if="wikiPage.id > 0">
编辑{{parentPath.path}}
</div>
<div style="margin-bottom: 10px;padding: 10px;" v-else>
父级{{parentPath.path || '/'}} 
<div style="margin-bottom: 10px;padding: 10px;" v-if="!pageId">
父级{{parentWikiPage.name || '/'}} 
<el-tooltip class="item" content="在根目录创建文档">
<el-button type="text" @click="changeToRootPath" style="padding: 0 10px;">根目录</el-button>
</el-tooltip>
@@ -24,14 +21,19 @@
import pageApi from '../../common/api/page'
export default {
props: ['spaceId'],
data() {
return {
editor: {},
// 编辑相关
newPageTitle: "",
parentPath: {},
wikiPage: {},
parentWikiPage: {},
isUnlock: false,
// 页面ID有值代表编辑
pageId: '',
// 父级,有值代表在此父级新建文档
parentId: '',
};
},
destroyed: function () {
@@ -54,17 +56,15 @@
},
methods: {
changeToRootPath() {
this.parentPath = {spaceId: this.parentPath.spaceId};
// 没有父级,就是在根目录创建
this.parentId = '';
this.parentWikiPage = {};
},
unlockPage() {
// 防止各种事件重复调这个接口,只需要调一次就好了
if (this.isUnlock) {
return;
}
this.isUnlock = true;
var param = {pageId: this.parentPath.pageId};
pageApi.pageUnlock(param).then(() => {
});
if (this.isUnlock) return;
this.isUnlock = true;
pageApi.pageUnlock({pageId: this.pageId});
},
createWikiCancel() {
this.$confirm('确定要取消编辑吗?您编辑的内容将不会被保存哦~', '提示', {
@@ -77,37 +77,34 @@
});
},
createWikiSave(saveAfter) {
// 修改内容时强制不能修改父路径,只能在目录上拖动修改
var parentId = (this.wikiPage.id > 0) ? '' : this.parentPath.parentId;
if (!this.newPageTitle) {
this.$message.warning("标题不能为空");
return;
}
var preview = this.editor.txt.text();
var param = {
spaceId: this.parentPath.spaceId,
// 修改内容时强制不能修改父路径,只能在目录上拖动修改
let parentId = (this.pageId > 0) ? '' : this.parentId;
let param = {
spaceId: this.spaceId,
parentId: parentId,
id: this.wikiPage.id,
name: this.newPageTitle,
content: this.editor.txt.html(),
preview: preview,
preview: this.editor.txt.text(),
};
pageApi.updatePage(param).then(json => {
this.$message.success("保存成功!");
// 重新加载左侧列表,跳转到展示页面
this.$emit('loadPageList');
this.parentPath.pageId = json.data.id;
this.pageId = json.data.id;
if (saveAfter == 1) {
this.$router.push({path: '/page/show', query: this.parentPath});
this.$router.push({path: '/page/show', query: {pageId: this.pageId}});
} else {
this.loadPageDetail(this.parentPath.pageId);
this.loadPageDetail(this.pageId);
}
});
},
loadPageDetail(pageId) {
this.rightContentType = 1;
var param = {id: pageId};
pageApi.pageDetail(param).then(json => {
pageApi.pageDetail({id: pageId}).then(json => {
this.wikiPage = json.data.wikiPage || {};
this.pageContent = json.data.pageContent || {};
this.pageFileList = json.data.fileList || [];
@@ -116,6 +113,12 @@
this.editor.txt.html(this.pageContent.content || "");
});
},
loadParentPageDetail(pageId) {
if (!pageId) return;
pageApi.pageDetail({id: pageId}).then(json => {
this.parentWikiPage = json.data.wikiPage || {};
});
},
cleanPage() {
this.wikiPage = {};
this.pageContent = {};
@@ -126,18 +129,12 @@
}
},
initQueryParam(to) {
this.parentPath = {
spaceId: to.query.spaceId, pageId: to.query.pageId,
parentId: to.query.parentId, path: to.query.path
};
if (!!this.parentPath.pageId) {
this.loadPageDetail(this.parentPath.pageId);
} else {
this.cleanPage();
}
let param = {pageId: this.parentPath.pageId};
pageApi.pageLock(param).then(json => {
if (json.errCode !== 200) {
// pageId和parentId二选一传了pageId代表编辑页面否则代表新建页面
this.pageId = to.query.pageId;
this.parentId = to.query.parentId;
if (!!this.pageId) {
this.loadPageDetail(this.pageId);
pageApi.pageLock({pageId: this.pageId}).catch(json => {
let that = this;
this.$alert(json.errMsg || '未知错误', '错误', {
confirmButtonText: '确定',
@@ -145,8 +142,11 @@
that.$router.back();
}
});
}
});
});
} else {
this.loadParentPageDetail(this.parentId);
this.cleanPage();
}
},
initEditor() {
this.editor = new WangEditor('#newPageContentDiv');

View File

@@ -1,24 +0,0 @@
<template>
<div class="page-open-view-vue">
</div>
</template>
<script>
export default {
data() {
return {};
},
beforeRouteUpdate(to, from, next) {
},
mounted: function () {
},
methods: {}
}
</script>
<style>
</style>

View File

@@ -9,16 +9,17 @@
创建{{wikiPage.createUserName}} {{wikiPage.createTime}}  
<span v-show="wikiPage.updateUserName">修改{{wikiPage.updateUserName}} {{wikiPage.updateTime}}</span>
<div style="float: right;">
<el-upload class="upload-page-file" :action="uploadFileUrl"
<el-upload v-if="wikiPageAuth.canUploadFile==1"
class="upload-page-file" :action="uploadFileUrl"
:with-credentials="true"
:on-success="uploadFileSuccess" :on-error="uploadFileError"
name="files" show-file-list multiple :data="uploadFormData" :limit="999"
style="display: inline;margin-right: 10px;">
<el-button type="text" icon="el-icon-upload">上传附件</el-button>
</el-upload>
<el-button type="text" icon="el-icon-edit" v-on:click="editWiki">编辑</el-button>
<el-button type="text" icon="el-icon-setting" v-on:click="editWikiAuth">权限设置</el-button>
<el-button type="text" icon="el-icon-delete" v-on:click="deleteWikiPage">删除</el-button>
<el-button v-if="wikiPageAuth.canEdit==1" type="text" icon="el-icon-edit" @click="editWiki">编辑</el-button>
<el-button v-if="wikiPageAuth.canConfigAuth==1" type="text" icon="el-icon-setting" @click="editWikiAuth">权限设置</el-button>
<el-button v-if="wikiPageAuth.canDelete==1" type="text" icon="el-icon-delete" @click="deleteWikiPage">删除</el-button>
</div>
</div>
</div>
@@ -32,7 +33,7 @@
<el-table-column prop="createUserName" label="创建人"></el-table-column>
<el-table-column prop="createTime" label="创建时间" width="180px"></el-table-column>
<el-table-column prop="downloadNum" label="下载次数" width="80px"></el-table-column>
<el-table-column label="操作" width="100px">
<el-table-column label="操作" width="100px" v-if="wikiPageAuth.canUploadFile==1">
<template slot-scope="scope">
<el-button size="small" v-on:click="deletePageFile(scope.row)">删除</el-button>
</template>
@@ -146,6 +147,7 @@
return {
// 页面展示相关
wikiPage: {},
wikiPageAuth: {},
pageContent: {},
pageFileList: [],
selfUserId: 0,
@@ -173,22 +175,12 @@
},
mounted: function () {
this.initQueryParam(this.$route);
if (!!this.parentPath.pageId) {
// 延迟设置展开的目录edit比app先初始化
setTimeout(() => {
if (!!this.parentPath.spaceId) {
// 调用父方法切换选择的空间
this.$emit('switchSpace', this.parentPath.spaceId);
}
this.$emit('changeExpandedKeys', this.parentPath.pageId);
}, 500);
}
},
methods: {
editWiki() {
var param = {pageId: this.parentPath.pageId};
pageApi.pageLock(param).then(() => {
this.$router.push({path: '/page/edit', query: this.parentPath});
this.$router.push({path: '/page/edit', query: {pageId: this.parentPath.pageId}});
});
},
getSearchUserList(query) {
@@ -269,23 +261,32 @@
}).catch(()=>{});
},
loadPageDetail(pageId) {
this.rightContentType = 1;
var param = {id: pageId};
pageApi.pageDetail(param).then(json => {
var wikiPage = json.data.wikiPage || {};
wikiPage.selfZan = json.data.selfZan || 0;
let result = json.data || {};
var wikiPage = result.wikiPage || {};
wikiPage.selfZan = result.selfZan || 0;
this.wikiPage = wikiPage;
this.pageContent = json.data.pageContent || {};
this.pageFileList = json.data.fileList || [];
this.selfUserId = json.data.selfUserId || 0;
this.pageContent = result.pageContent || {};
this.pageFileList = result.fileList || [];
this.selfUserId = result.selfUserId || 0;
this.uploadFormData = {pageId: this.wikiPage.id};
this.parentPath.spaceId = wikiPage.spaceId;
this.wikiPageAuth = {
canEdit: result.canEdit,
canDelete: result.canDelete,
canUploadFile: result.canUploadFile,
canConfigAuth: result.canConfigAuth,
};
// 修改标题
document.title = wikiPage.name || '页面展示';
document.title = wikiPage.name || 'WIKI-内容展示';
// 修改最后点击的项,保证刷新后点击编辑能展示编辑的项
// if (!this.lastClickNode.id) {
// this.lastClickNode = {id: wikiPage.id, nodePath: wikiPage.name};
// }
// 调用父方法切换选择的空间
this.$emit('switchSpace', this.wikiPage.spaceId);
// 调用父方法展开目录树
this.$emit('changeExpandedKeys', pageId);
});
this.loadCommentList(pageId);
},
@@ -395,10 +396,7 @@
return color;
},
initQueryParam(to) {
this.parentPath = {
spaceId: to.query.spaceId, pageId: to.query.pageId,
parentId: to.query.parentId, path: to.query.path
};
this.parentPath = {pageId: to.query.pageId};
if (!!this.parentPath.pageId) {
this.loadPageDetail(this.parentPath.pageId);
}

View File

@@ -0,0 +1,106 @@
<template>
<div style="padding: 10px;" class="page-share-home-vue">
<div style="max-width: 800px;margin: 0 auto;">
<div v-if="spacePageNews.length <= 0" class="empty-news">暂无数据</div>
<div v-else class="line-box" v-for="item in spacePageNews">
<div class="line-title">
<span class="text-link">{{item.createUserName}}</span> 发布于 <span class="text-link">{{item.spaceName}}</span>
</div>
<div class="page-preview-box">
<div class="page-preview-title" v-on:click="showPageDetail(item)" v-html="item.pageTitle"></div>
<div class="page-preview-content" v-html="item.previewContent"></div>
<div>
<span><img src="../../../assets/img/zan.png" class="zan-img"> {{item.zanNum}} </span>
<span><i class="el-icon-view view-img"></i> {{item.viewNum}} </span>
<span>{{item.updateTime||item.createTime}}</span>
</div>
</div>
</div>
<div class="page-info-box">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:page-sizes="[20, 50, 100]"
:page-size="20"
:current-page="searchParam.pageNum"
layout="prev, pager, next, jumper, sizes, total"
:total="totalCount"
>
</el-pagination>
</div>
</div>
</div>
</template>
<script>
import pageApi from '../../../common/api/page'
export default {
data() {
return {
totalCount: 0,
searchParam: {
spaceId: '',
newsType: 1,
pageNum: 1,
pageSize: 20,
},
spacePageNews: [],
};
},
beforeRouteUpdate(to, from, next) {
this.initQueryParam(to);
next();
},
mounted: function () {
this.initQueryParam(this.$route);
},
methods: {
getSpacePageNews() {
pageApi.openPageNews(this.searchParam).then(json => {
this.spacePageNews = json.data || [];
this.totalCount = json.total;
});
},
handleSizeChange(val) {
this.searchParam.pageSize = val;
this.getSpacePageNews();
},
showPageDetail(row) {
this.nowClickPath = {space: row.space, pageId: row.pageId};
this.$router.push({path: '/page/share/view', query: this.nowClickPath});
},
handleCurrentChange(val) {
this.searchParam.pageNum = val;
this.getSpacePageNews();
},
initQueryParam(to) {
this.searchParam = {
space: to.query.space,
newsType: 1,
pageNum: 1,
pageSize: 20,
};
if (!!this.searchParam.space) {
this.getSpacePageNews();
}
},
}
}
</script>
<style>
.page-share-home-vue .empty-news{text-align: center;padding: 100px;}
.page-share-home-vue .text-link {
color: #444;
}
.page-share-home-vue .line-box{color: #666;border-bottom: 1px solid #eee;padding: 20px 0;}
.page-share-home-vue .line-title{font-size: 14px;}
.page-share-home-vue .page-preview-box{}
.page-share-home-vue .page-preview-title{cursor: pointer;font-size: 20px;margin: 10px 0 5px 0;color: #3a8ee6;}
.page-share-home-vue .page-preview-content{font-size: 16px;margin-bottom: 5px;}
.page-share-home-vue .zan-img{vertical-align: middle;margin-top: -3px;}
.page-share-home-vue .view-img{font-size: 16px;color: #666;}
.page-share-home-vue .page-info-box{text-align: right;margin: 20px 0 50px 0;}
</style>

View File

@@ -0,0 +1,84 @@
<template>
<div class="page-share-view-vue">
<el-row type="border-card">
<div style="max-width: 950px;margin: 0 auto;">
<div class="wiki-title">{{wikiPage.name}}</div>
<div class="wiki-author">
<span v-show="!wikiPage.updateTime">创建时间{{wikiPage.createTime}}</span>
<span v-show="wikiPage.updateTime">最后修改{{wikiPage.updateTime}}</span>
</div>
<div class="wiki-files">
<el-table v-show="pageFileList.length > 0" :data="pageFileList" border
style="width: 100%; margin-bottom: 5px;">
<el-table-column label="文件名">
<template slot-scope="scope">
<a target="_blank" :href="scope.row.fileUrl">{{scope.row.fileName}}</a>
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建时间" width="180px"></el-table-column>
<el-table-column prop="downloadNum" label="下载次数" width="80px"></el-table-column>
</el-table>
</div>
<div class="wiki-content w-e-text">
<div v-html="pageContent.content"></div>
</div>
</div>
</el-row>
</div>
</template>
<script>
import pageApi from '../../../common/api/page'
export default {
data() {
return {
spaceUuid: '',
nowPageId: '',
// 页面展示相关
wikiPage: {},
pageContent: {},
pageFileList: [],
};
},
beforeRouteUpdate(to, from, next) {
this.initQueryParam(to);
next();
},
mounted() {
this.initQueryParam(this.$route);
},
methods: {
loadPageDetail(pageId) {
let param = {pageId: pageId, space: this.spaceUuid};
pageApi.openPageDetail(param).then(json => {
let wikiPage = json.data.wikiPage || {};
wikiPage.selfZan = json.data.selfZan || 0;
this.wikiPage = wikiPage;
this.pageContent = json.data.pageContent || {};
this.pageFileList = json.data.fileList || [];
document.title = wikiPage.name || 'WIKI-内容展示';
});
},
initQueryParam(to) {
this.spaceUuid = to.query.space;
this.nowPageId = to.query.pageId;
if (!!this.nowPageId) {
this.loadPageDetail(this.nowPageId);
}
},
}
}
</script>
<style>
.page-share-view-vue .wiki-title{font-size: 20px;text-align: center;}
.page-share-view-vue .wiki-author{font-size: 14px;color: #888;padding: 20px 0;height: 40px;line-height: 40px;}
.page-share-view-vue .wiki-content{font-size: 14px;}
.page-share-view-vue .wiki-content.w-e-text{overflow-y: auto;}
.page-share-view-vue .upload-page-file .el-upload-list{display: none;}
.page-share-view-vue .is-link{color: #1e88e5;cursor: pointer;}
</style>