合并闭源版功能,创建文档时上传文件也能绑定到page上
This commit is contained in:
@@ -6,7 +6,6 @@ export default {
|
|||||||
pageChangeParent: (data) => request({url: '/zyplayer-doc-wiki/page/changeParent', method: 'post', data: Qs.stringify(data)}),
|
pageChangeParent: (data) => request({url: '/zyplayer-doc-wiki/page/changeParent', method: 'post', data: Qs.stringify(data)}),
|
||||||
pageList: (data) => request({url: '/zyplayer-doc-wiki/page/list', method: 'post', data: Qs.stringify(data)}),
|
pageList: (data) => request({url: '/zyplayer-doc-wiki/page/list', method: 'post', data: Qs.stringify(data)}),
|
||||||
updatePage: (data) => request({url: '/zyplayer-doc-wiki/page/update', method: 'post', data: Qs.stringify(data)}),
|
updatePage: (data) => request({url: '/zyplayer-doc-wiki/page/update', method: 'post', data: Qs.stringify(data)}),
|
||||||
createEmptyPage: (data) => request({url: '/zyplayer-doc-wiki/page/empty', method: 'post', data: Qs.stringify(data)}),
|
|
||||||
pageDetail: (data) => request({url: '/zyplayer-doc-wiki/page/detail', method: 'post', data: Qs.stringify(data)}),
|
pageDetail: (data) => request({url: '/zyplayer-doc-wiki/page/detail', method: 'post', data: Qs.stringify(data)}),
|
||||||
pageDelete: (data) => request({url: '/zyplayer-doc-wiki/page/delete', method: 'post', data: Qs.stringify(data)}),
|
pageDelete: (data) => request({url: '/zyplayer-doc-wiki/page/delete', method: 'post', data: Qs.stringify(data)}),
|
||||||
pageHistoryList: (data) => request({url: '/zyplayer-doc-wiki/page/history/list', method: 'post', data: Qs.stringify(data)}),
|
pageHistoryList: (data) => request({url: '/zyplayer-doc-wiki/page/history/list', method: 'post', data: Qs.stringify(data)}),
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<el-container>
|
<el-container>
|
||||||
<el-aside v-show="leftCollapse" :style="{ width: rightAsideWidth + 'px' }">
|
<el-aside v-show="leftCollapse" :style="{ width: rightAsideWidth + 'px' }">
|
||||||
<div style="padding: 10px;height: 100%;box-sizing: border-box;background: #fafafa;">
|
<div style="padding: 10px;height: 100%;box-sizing: border-box;background: #fafafa;">
|
||||||
<div style="margin-bottom: 10px">
|
<div style="margin-bottom: 5px">
|
||||||
<el-select :model-value="choiceSpace" filterable placeholder="选择空间" style="width: 100%" @change="spaceChangeEvents">
|
<el-select :model-value="choiceSpace" filterable placeholder="选择空间" style="width: 100%" @change="spaceChangeEvents">
|
||||||
<el-option-group label="">
|
<el-option-group label="">
|
||||||
<el-option key="0" label="创建空间" value="0"></el-option>
|
<el-option key="0" label="创建空间" value="0"></el-option>
|
||||||
@@ -13,9 +13,6 @@
|
|||||||
<el-option v-for="item in spaceOptions" :key="item.value" :label="item.label" :value="item.value"></el-option>
|
<el-option v-for="item in spaceOptions" :key="item.value" :label="item.label" :value="item.value"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</div>
|
</div>
|
||||||
<div align="center">
|
|
||||||
<el-button :icon="ElIconPlus" style="width: 100%" v-on:click="createWiki">创建文档</el-button>
|
|
||||||
</div>
|
|
||||||
<el-autocomplete v-model="searchKeywords" :fetch-suggestions="doSearchByKeywords" placeholder="在当前空间搜索" popper-class="search-autocomplete" style="width: 100%; margin: 10px 0" @select="handleSearchKeywordsSelect">
|
<el-autocomplete v-model="searchKeywords" :fetch-suggestions="doSearchByKeywords" placeholder="在当前空间搜索" popper-class="search-autocomplete" style="width: 100%; margin: 10px 0" @select="handleSearchKeywordsSelect">
|
||||||
<template v-slot="{ item }">
|
<template v-slot="{ item }">
|
||||||
<div class="search-option-item">
|
<div class="search-option-item">
|
||||||
@@ -26,6 +23,21 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-autocomplete>
|
</el-autocomplete>
|
||||||
|
<div style="margin-left: 10px;margin-bottom: 10px">
|
||||||
|
<span style="color:#898989;font-size:small;">空间目录
|
||||||
|
<el-dropdown style="float:right">
|
||||||
|
<el-icon >
|
||||||
|
<el-icon-plus/>
|
||||||
|
</el-icon>
|
||||||
|
<template v-slot:dropdown>
|
||||||
|
<el-dropdown-menu>
|
||||||
|
<el-dropdown-item v-on:click="createWiki(1,true)">创建Html</el-dropdown-item>
|
||||||
|
<el-dropdown-item v-on:click="createWiki(2,true)">创建Markdown</el-dropdown-item>
|
||||||
|
</el-dropdown-menu>
|
||||||
|
</template>
|
||||||
|
</el-dropdown>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
<div class="wiki-page-tree-box">
|
<div class="wiki-page-tree-box">
|
||||||
<el-tree
|
<el-tree
|
||||||
ref="wikiPageTreeRef"
|
ref="wikiPageTreeRef"
|
||||||
@@ -45,10 +57,22 @@
|
|||||||
<template v-slot="{ node, data }">
|
<template v-slot="{ node, data }">
|
||||||
<div class="page-tree-node">
|
<div class="page-tree-node">
|
||||||
<el-tooltip :content="node.label" placement="top-start" :show-after="1000">
|
<el-tooltip :content="node.label" placement="top-start" :show-after="1000">
|
||||||
<span class="label">
|
<span class="label">
|
||||||
<el-icon><el-icon-document/></el-icon>
|
<el-icon><el-icon-document/></el-icon>
|
||||||
<span class="text">{{ node.label }}</span>
|
<span class="el-dropdown-link">{{ node.label }}
|
||||||
</span>
|
<el-dropdown style="float:right">
|
||||||
|
<el-icon >
|
||||||
|
<el-icon-plus/>
|
||||||
|
</el-icon>
|
||||||
|
<template v-slot:dropdown>
|
||||||
|
<el-dropdown-menu>
|
||||||
|
<el-dropdown-item v-on:click="createWiki(2)">创建Markdown</el-dropdown-item>
|
||||||
|
<el-dropdown-item v-on:click="createWiki(1)">创建Html</el-dropdown-item>
|
||||||
|
</el-dropdown-menu>
|
||||||
|
</template>
|
||||||
|
</el-dropdown>
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -206,13 +230,16 @@ const turnLeftCollapse = () => {
|
|||||||
}
|
}
|
||||||
}, 100)
|
}, 100)
|
||||||
}
|
}
|
||||||
const createWiki = () => {
|
const createWiki = (editorType,clearParentId) => {
|
||||||
if (choiceSpace.value > 0) {
|
if (clearParentId){
|
||||||
pageApi.createEmptyPage({spaceId: choiceSpace.value,parentId: nowPageId.value})
|
nowPageId.value = 0
|
||||||
|
}
|
||||||
|
if (choiceSpace.value > 0) {
|
||||||
|
pageApi.updatePage({spaceId: choiceSpace.value,parentId: nowPageId.value,editorType:editorType,name:'未命名',content:'',preview:''})
|
||||||
.then((json) => {
|
.then((json) => {
|
||||||
router.push({
|
router.push({
|
||||||
path: '/page/edit',
|
path: '/page/edit',
|
||||||
query: {parentId: nowPageId.value, pageIdHid: json.data}
|
query: {parentId: nowPageId.value, pageId: json.data.id}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -79,8 +79,6 @@ let isUnlock = ref(false);
|
|||||||
let pageId = ref('');
|
let pageId = ref('');
|
||||||
// 父级,有值代表在此父级新建文档
|
// 父级,有值代表在此父级新建文档
|
||||||
let parentId = ref('');
|
let parentId = ref('');
|
||||||
// 从新建文档传递过来的
|
|
||||||
let pageIdHid = ref('');
|
|
||||||
let markdownContent = ref('');
|
let markdownContent = ref('');
|
||||||
let fileUploadUrl = ref(import.meta.env.VITE_APP_BASE_API + '/zyplayer-doc-wiki/page/file/wangEditor/upload');
|
let fileUploadUrl = ref(import.meta.env.VITE_APP_BASE_API + '/zyplayer-doc-wiki/page/file/wangEditor/upload');
|
||||||
let toolbars = {
|
let toolbars = {
|
||||||
@@ -181,8 +179,8 @@ const createWikiSave = (saveAfter) => {
|
|||||||
}
|
}
|
||||||
// 修改内容时强制不能修改父路径,只能在目录上拖动修改
|
// 修改内容时强制不能修改父路径,只能在目录上拖动修改
|
||||||
let parentIdVal = pageId.value > 0 ? '' : parentId.value
|
let parentIdVal = pageId.value > 0 ? '' : parentId.value
|
||||||
if (!!pageIdHid.value){
|
if (!!pageId.value){
|
||||||
wikiPage.value.id = pageIdHid.value
|
wikiPage.value.id = pageId.value
|
||||||
}
|
}
|
||||||
let param = {
|
let param = {
|
||||||
spaceId: props.spaceId,
|
spaceId: props.spaceId,
|
||||||
@@ -244,13 +242,9 @@ const cleanPage = () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
const initQueryParam = (to) => {
|
const initQueryParam = (to) => {
|
||||||
pageIdHid.value = to.query.pageIdHid
|
|
||||||
// pageId和parentId二选一,传了pageId代表编辑页面,否则代表新建页面
|
// pageId和parentId二选一,传了pageId代表编辑页面,否则代表新建页面
|
||||||
pageId.value = to.query.pageId
|
pageId.value = to.query.pageId
|
||||||
parentId.value = to.query.parentId
|
parentId.value = to.query.parentId
|
||||||
if (!!pageIdHid.value){
|
|
||||||
wangEditorRef.value.setPageId(pageIdHid.value)
|
|
||||||
}
|
|
||||||
if (!!pageId.value){
|
if (!!pageId.value){
|
||||||
wangEditorRef.value.setPageId(pageId.value)
|
wangEditorRef.value.setPageId(pageId.value)
|
||||||
}
|
}
|
||||||
@@ -273,9 +267,6 @@ let mavonEditorRef = ref();
|
|||||||
const addMarkdownImage = (pos, file) => {
|
const addMarkdownImage = (pos, file) => {
|
||||||
let formData = new FormData()
|
let formData = new FormData()
|
||||||
formData.append('files', file)
|
formData.append('files', file)
|
||||||
if (!!pageIdHid.value){
|
|
||||||
formData.append('pageId', pageIdHid.value)
|
|
||||||
}
|
|
||||||
if (!!pageId.value){
|
if (!!pageId.value){
|
||||||
formData.append('pageId', pageId.value)
|
formData.append('pageId', pageId.value)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -190,53 +190,6 @@ public class WikiPageController {
|
|||||||
wikiPageService.deletePage(wikiPage);
|
wikiPageService.deletePage(wikiPage);
|
||||||
return DocResponseJson.ok();
|
return DocResponseJson.ok();
|
||||||
}
|
}
|
||||||
//创建空白page
|
|
||||||
@PostMapping("/empty")
|
|
||||||
public ResponseJson<Object> empty(WikiPage wikiPage) {
|
|
||||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
|
||||||
Long parentId = Optional.ofNullable(wikiPage.getParentId()).orElse(0L);
|
|
||||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPage.getSpaceId());
|
|
||||||
if (wikiSpaceSel == null) {
|
|
||||||
return DocResponseJson.warn("未找到指定的空间!");
|
|
||||||
}
|
|
||||||
// 空间不是自己的
|
|
||||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
|
||||||
return DocResponseJson.warn("您没有权限新增该空间的文章!");
|
|
||||||
}
|
|
||||||
// 空间不是自己的
|
|
||||||
if (SpaceType.isOthersPersonal(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
|
||||||
return DocResponseJson.warn("您没有权限新增该空间的文章!");
|
|
||||||
}
|
|
||||||
if (parentId > 0) {
|
|
||||||
WikiPage wikiPageParent = wikiPageService.getById(parentId);
|
|
||||||
if (!Objects.equals(wikiPage.getSpaceId(), wikiPageParent.getSpaceId())) {
|
|
||||||
return DocResponseJson.warn("当前空间和父页面的空间不一致,请重新选择父页面!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Integer lastSeq = wikiPageMapper.getLastSeq(wikiPage.getSpaceId(), parentId);
|
|
||||||
lastSeq = Optional.ofNullable(lastSeq).orElse(99999);
|
|
||||||
wikiPage.setSeqNo(lastSeq + 1);
|
|
||||||
wikiPage.setCreateTime(new Date());
|
|
||||||
wikiPage.setUpdateTime(new Date());
|
|
||||||
wikiPage.setCreateUserId(currentUser.getUserId());
|
|
||||||
wikiPage.setCreateUserName(currentUser.getUsername());
|
|
||||||
wikiPage.setName("未命名");
|
|
||||||
wikiPageService.save(wikiPage);
|
|
||||||
// 重置当前分支的所有节点seq值
|
|
||||||
wikiPageMapper.updateChildrenSeq(wikiPage.getSpaceId(), parentId);
|
|
||||||
WikiPageContent pageContent = new WikiPageContent();
|
|
||||||
pageContent.setContent("");
|
|
||||||
pageContent.setPreview("");
|
|
||||||
pageContent.setPageId(wikiPage.getId());
|
|
||||||
pageContent.setCreateTime(new Date());
|
|
||||||
pageContent.setCreateUserId(currentUser.getUserId());
|
|
||||||
pageContent.setCreateUserName(currentUser.getUsername());
|
|
||||||
wikiPageContentService.save(pageContent);
|
|
||||||
// 给相关人发送消息
|
|
||||||
UserMessage userMessage = userMessageService.createUserMessage(currentUser, wikiPage.getId(), wikiPage.getName(), DocSysType.WIKI, UserMsgType.WIKI_PAGE_CREATE);
|
|
||||||
userMessageService.addWikiMessage(userMessage);
|
|
||||||
return DocResponseJson.ok(wikiPage.getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostMapping("/update")
|
@PostMapping("/update")
|
||||||
public ResponseJson<Object> update(WikiPage wikiPage, String content, String preview) {
|
public ResponseJson<Object> update(WikiPage wikiPage, String content, String preview) {
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -5,13 +5,13 @@
|
|||||||
<link rel="icon" href="wiki-logo.png" />
|
<link rel="icon" href="wiki-logo.png" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>WIKI文档管理系统</title>
|
<title>WIKI文档管理系统</title>
|
||||||
<script type="module" crossorigin src="assets/main.94982ebd.js"></script>
|
<script type="module" crossorigin src="assets/main.476c8bf9.js"></script>
|
||||||
<link rel="modulepreload" href="assets/highlight.js.b879387e.js">
|
<link rel="modulepreload" href="assets/highlight.js.b879387e.js">
|
||||||
<link rel="modulepreload" href="assets/vue.9fe1449e.js">
|
<link rel="modulepreload" href="assets/vue.9fe1449e.js">
|
||||||
<link rel="modulepreload" href="assets/vendor.1b8bf7cc.js">
|
<link rel="modulepreload" href="assets/vendor.1b8bf7cc.js">
|
||||||
<link rel="modulepreload" href="assets/vant.af525f67.js">
|
<link rel="modulepreload" href="assets/vant.af525f67.js">
|
||||||
<link rel="modulepreload" href="assets/wangeditor.cbd30c7d.js">
|
<link rel="modulepreload" href="assets/wangeditor.cbd30c7d.js">
|
||||||
<link rel="stylesheet" href="assets/style.9c39e1d4.css">
|
<link rel="stylesheet" href="assets/style.9f11ad58.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="app"></div>
|
<div id="app"></div>
|
||||||
|
|||||||
Reference in New Issue
Block a user