新增模板相关功能
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
package com.zyplayer.doc.data.repository.manage.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
@TableName("wiki_page_template")
|
||||
public class WikiPageTemplate implements Serializable {
|
||||
@TableId(value = "id" , type = IdType.AUTO)
|
||||
private Long id;
|
||||
private Long spaceId;
|
||||
private Long pageId;
|
||||
private String tagName;
|
||||
private Boolean shareStatus;
|
||||
private Date created;
|
||||
private Long createUserId;
|
||||
private String createUser;
|
||||
private Integer yn;
|
||||
}
|
||||
@@ -2,10 +2,14 @@ package com.zyplayer.doc.data.repository.manage.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPage;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPageTemplate;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.WikiPageTemplateInfoVo;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
import org.apache.ibatis.annotations.Update;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Mapper 接口
|
||||
@@ -24,6 +28,9 @@ public interface WikiPageMapper extends BaseMapper<WikiPage> {
|
||||
|
||||
@Select("select max(seq_no) from wiki_page where space_id = #{spaceId} and parent_id=#{parentId} and del_flag=0")
|
||||
Integer getLastSeq(@Param("spaceId") Long spaceId, @Param("parentId") Long parentId);
|
||||
|
||||
|
||||
@Select("SELECT a.*,b.tag_name AS tags,b.share_status as shareStatus from wiki_page a left join wiki_page_template b on a.space_id =b.space_id and a.id = b.page_id where a.del_flag = 0 and a.space_id =#{spaceId}")
|
||||
List<WikiPageTemplateInfoVo> getWikiPageTemplateInfos(@Param("spaceId") Long spaceId);
|
||||
|
||||
void updateChildrenSeq(@Param("spaceId") Long spaceId, @Param("parentId") Long parentId);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.zyplayer.doc.data.repository.manage.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPage;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPageTemplate;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.WikiPageTemplateInfoVo;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.WikiTemplateTagVo;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
import org.apache.ibatis.annotations.Update;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author 暮光:城中城
|
||||
* @since 2019-03-09
|
||||
*/
|
||||
public interface WikiPageTemplateMapper extends BaseMapper<WikiPageTemplate> {
|
||||
|
||||
List<WikiPageTemplateInfoVo> getAllTemplate(@Param("user") Long user, @Param("name") String name, @Param("share") boolean share, @Param("tags") List tags, @Param("pageNum") Long pageNum);
|
||||
|
||||
List<WikiTemplateTagVo> getAllTags(@Param("user") Long user,@Param("open") boolean open);
|
||||
|
||||
Long getAllTemplateCount(@Param("user") Long user, @Param("name") String name, @Param("share") boolean share, @Param("tags") List tags);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,123 @@
|
||||
package com.zyplayer.doc.data.repository.manage.vo;
|
||||
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPage;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class WikiPageTemplateInfoVo{
|
||||
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 空间ID
|
||||
*/
|
||||
private Long spaceId;
|
||||
|
||||
/**
|
||||
* 名字
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 父ID
|
||||
*/
|
||||
private Long parentId;
|
||||
|
||||
/**
|
||||
* 节点类型 0=有子节点 1=终节点
|
||||
*/
|
||||
private Integer nodeType;
|
||||
|
||||
/**
|
||||
* 赞的数量
|
||||
*/
|
||||
private Integer zanNum;
|
||||
|
||||
/**
|
||||
* 编辑类型 0=可编辑 1=不允许编辑
|
||||
*/
|
||||
private Integer editType;
|
||||
|
||||
/**
|
||||
* 是否收藏 0=否 1=是
|
||||
*/
|
||||
private Integer favorite;
|
||||
|
||||
/**
|
||||
* 创建人ID
|
||||
*/
|
||||
private Long createUserId;
|
||||
|
||||
/**
|
||||
* 创建人名字
|
||||
*/
|
||||
private String createUserName;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* 修改人ID
|
||||
*/
|
||||
private Long updateUserId;
|
||||
|
||||
/**
|
||||
* 修改人名字
|
||||
*/
|
||||
private String updateUserName;
|
||||
|
||||
/**
|
||||
* 修改时间
|
||||
*/
|
||||
private Date updateTime;
|
||||
|
||||
/**
|
||||
* 0=有效 1=删除
|
||||
*/
|
||||
private Integer delFlag;
|
||||
|
||||
/**
|
||||
* 阅读数
|
||||
*/
|
||||
private Integer viewNum;
|
||||
|
||||
/**
|
||||
* 顺序
|
||||
*/
|
||||
private Integer seqNo;
|
||||
|
||||
/**
|
||||
* 编辑框类型 1=HTML 2=Markdown
|
||||
*/
|
||||
private Integer editorType;
|
||||
|
||||
/**
|
||||
* 模板分享状态 0=个人模板 1=共享模板
|
||||
*/
|
||||
private Integer shareStatus;
|
||||
|
||||
/**
|
||||
* 模板ID
|
||||
*/
|
||||
private Integer templateId;
|
||||
|
||||
/**
|
||||
* 标签
|
||||
*/
|
||||
private String tags;
|
||||
|
||||
/**
|
||||
* 标题
|
||||
*/
|
||||
private String title;
|
||||
|
||||
/**
|
||||
* 模板的内容
|
||||
*/
|
||||
private String content;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.zyplayer.doc.data.repository.manage.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
public class WikiTemplateTagVo {
|
||||
|
||||
/**
|
||||
* 是否展示
|
||||
*/
|
||||
private boolean show = true;
|
||||
|
||||
/**
|
||||
* 标签名
|
||||
*/
|
||||
private String tagName;
|
||||
}
|
||||
@@ -2,6 +2,9 @@ package com.zyplayer.doc.data.service.manage;
|
||||
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPage;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.WikiPageTemplateInfoVo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -16,4 +19,6 @@ public interface WikiPageService extends IService<WikiPage> {
|
||||
void changeParent(WikiPage wikiPage, Integer beforeSeq, Integer afterSeq);
|
||||
|
||||
void deletePage(WikiPage wikiPage);
|
||||
|
||||
public List<WikiPageTemplateInfoVo> wikiPageTemplateInfos(Long spaceId);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.zyplayer.doc.data.service.manage;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPage;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPageTemplate;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.WikiPageTemplateInfoVo;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.WikiTemplateTagVo;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author 暮光:城中城
|
||||
* @since 2019-03-09
|
||||
*/
|
||||
public interface WikiPageTemplateService extends IService<WikiPageTemplate> {
|
||||
public List<WikiTemplateTagVo> getAllTags( Long user, boolean open);
|
||||
|
||||
WikiPageTemplate getWikiPageTemplateBySpaceAndPage(Long spaceId, Long pageId);
|
||||
|
||||
List<WikiPageTemplateInfoVo> filterAll(Long user, String name, boolean open, List<String> tags, Long pageNum);
|
||||
|
||||
Long total(Long user, String name, boolean open, List<String> tags);
|
||||
}
|
||||
@@ -8,6 +8,7 @@ import com.zyplayer.doc.data.config.security.DocUserUtil;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.UserMessage;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPage;
|
||||
import com.zyplayer.doc.data.repository.manage.mapper.WikiPageMapper;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.WikiPageTemplateInfoVo;
|
||||
import com.zyplayer.doc.data.repository.support.consts.DocSysType;
|
||||
import com.zyplayer.doc.data.repository.support.consts.UserMsgType;
|
||||
import com.zyplayer.doc.data.service.manage.UserMessageService;
|
||||
@@ -91,4 +92,8 @@ public class WikiPageServiceImpl extends ServiceImpl<WikiPageMapper, WikiPage> i
|
||||
this.deletePageAndSon(wikiPage);
|
||||
}
|
||||
}
|
||||
|
||||
public List<WikiPageTemplateInfoVo> wikiPageTemplateInfos(Long spaceId){
|
||||
return wikiPageMapper.getWikiPageTemplateInfos(spaceId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
package com.zyplayer.doc.data.service.manage.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPageTemplate;
|
||||
import com.zyplayer.doc.data.repository.manage.mapper.WikiPageTemplateMapper;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.WikiPageTemplateInfoVo;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.WikiTemplateTagVo;
|
||||
import com.zyplayer.doc.data.service.manage.WikiPageTemplateService;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class WikiPageTemplateServiceImpl extends ServiceImpl<WikiPageTemplateMapper, WikiPageTemplate> implements WikiPageTemplateService {
|
||||
@Override
|
||||
public List<WikiTemplateTagVo> getAllTags(Long user, boolean open) {
|
||||
List<WikiTemplateTagVo> all = getBaseMapper().getAllTags(user,open);
|
||||
return all;
|
||||
}
|
||||
|
||||
@Override
|
||||
public WikiPageTemplate getWikiPageTemplateBySpaceAndPage(Long spaceId, Long pageId) {
|
||||
QueryWrapper queryWrapper = new QueryWrapper();
|
||||
queryWrapper.eq("space_id", spaceId);
|
||||
queryWrapper.eq("page_id", pageId);
|
||||
WikiPageTemplate template = getBaseMapper().selectOne(queryWrapper);
|
||||
return template;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<WikiPageTemplateInfoVo> filterAll(Long user, String name, boolean open, List<String> tags, Long pageNum) {
|
||||
Long offset = 0L;
|
||||
if (null != pageNum && pageNum != 0L) {
|
||||
offset = (pageNum - 1) * 8;
|
||||
}
|
||||
List<WikiPageTemplateInfoVo> all = getBaseMapper().getAllTemplate(user, StringUtils.isBlank(name) ? null : "%" + name + "%", open, tags, offset);
|
||||
return all;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long total(Long user, String name, boolean open, List<String> tags) {
|
||||
Long num = getBaseMapper().getAllTemplateCount(user, name, open, tags);
|
||||
return num;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.zyplayer.doc.data.repository.manage.mapper.WikiPageTemplateMapper">
|
||||
<select id="getAllTemplate" resultType="com.zyplayer.doc.data.repository.manage.vo.WikiPageTemplateInfoVo">
|
||||
SELECT a.*,b.tag_name As tags,b.share_status as shareStatus,c.content,b.id as templateId from wiki_page a
|
||||
left join wiki_page_template b on a.space_id = b.space_id and a.id = b.page_id
|
||||
left join wiki_page_content c on a.id = c.page_id
|
||||
<include refid="queryTemplateByCondition"></include>
|
||||
order by b.id
|
||||
limit 8 offset #{pageNum}
|
||||
</select>
|
||||
<select id="getAllTemplateCount" resultType="java.lang.Long">
|
||||
SELECT count(*) from wiki_page a
|
||||
LEFT JOIN wiki_page_template b on a.space_id = b.space_id and a.id = b.page_id
|
||||
left join wiki_page_content c on a.id = c.page_id
|
||||
<include refid="queryTemplateByCondition"></include>
|
||||
</select>
|
||||
<select id="getAllTags" resultType="com.zyplayer.doc.data.repository.manage.vo.WikiTemplateTagVo">
|
||||
select DISTINCT tag_name
|
||||
from wiki_page_template
|
||||
where tag_name is not null
|
||||
and tag_name != ''
|
||||
and share_status = #{open}
|
||||
<if test="!open">
|
||||
and create_user_id = #{user}
|
||||
</if>
|
||||
</select>
|
||||
<sql id="queryTemplateByCondition">
|
||||
where del_flag = 0 and b.id is not null
|
||||
and b.share_status = #{share}
|
||||
<if test="!share">
|
||||
and b.create_user_id = #{user}
|
||||
</if>
|
||||
<if test="name != null and name != ''">
|
||||
and a.name like #{name}
|
||||
</if>
|
||||
<if test="tags != null and tags.size >0 ">
|
||||
and b.tag_name in
|
||||
<foreach collection="tags" open="(" close=")" item="item" separator=",">#{item}</foreach>
|
||||
</if>
|
||||
</sql>
|
||||
</mapper>
|
||||
@@ -441,6 +441,18 @@ CREATE TABLE `backup_task` (
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '备份任务信息';
|
||||
|
||||
CREATE TABLE `wiki_page_template` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '模板信息逐渐',
|
||||
`space_id` bigint(20) NULL DEFAULT NULL COMMENT '空间id',
|
||||
`page_id` bigint(20) NULL DEFAULT NULL COMMENT '模板挂载文档id',
|
||||
`tag_name` varchar(200) CHARACTER SET utf8mb4 NULL DEFAULT NULL COMMENT '标签信息',
|
||||
`share_status` tinyint(1) NULL DEFAULT NULL COMMENT '模板公开状态(0-个人模板1-公共模板)',
|
||||
`created` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`create_user_id` bigint(20) NULL DEFAULT NULL COMMENT '创建人id',
|
||||
`create_user` varchar(200) CHARACTER SET utf8mb4 NULL DEFAULT NULL COMMENT '创建人名称',
|
||||
`yn` tinyint(1) NOT NULL default '1',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '模板信息表';
|
||||
-- -------------------插入必要的数据-------------------
|
||||
-- 用户信息
|
||||
INSERT INTO `user_info` (id, user_no, password, user_name, email, del_flag, creation_time, update_time, sex)
|
||||
|
||||
@@ -36,5 +36,9 @@ export default {
|
||||
openPageList: (data) => request({url: '/zyplayer-doc-wiki/open-api/page/list', method: 'post', data: Qs.stringify(data)}),
|
||||
openSpaceInfo: (data) => request({url: '/zyplayer-doc-wiki/open-api/space/info', method: 'post', data: Qs.stringify(data)}),
|
||||
openPageNews: (data) => request({url: '/zyplayer-doc-wiki/open-api/page/news', method: 'post', data: Qs.stringify(data)}),
|
||||
addTemplate: (data) => request({url: '/zyplayer-doc-wiki/template/add', method: 'post', data: Qs.stringify(data)}),
|
||||
getTemplate: (data) => request({url: '/zyplayer-doc-wiki/template/filterAll', method: 'post', data: Qs.stringify(data,{arrayFormat:"indices",allowDots:true})}),
|
||||
useTemplate: (data) => request({url: '/zyplayer-doc-wiki/template/use', method: 'post', data: Qs.stringify(data)}),
|
||||
getTags: (data) => request({url: '/zyplayer-doc-wiki/template/allTags', method: 'post', data: Qs.stringify(data)}),
|
||||
xxxxxxxxxxxx: (data) => request({url: 'update', method: 'post', data: Qs.stringify(data)}),
|
||||
}
|
||||
|
||||
@@ -21,6 +21,10 @@
|
||||
</el-icon>
|
||||
创建文件夹
|
||||
</a-menu-item>
|
||||
<a-menu-item key="4" @click="createWikiByTemplate(props.funcId)">
|
||||
<BuildOutlined/>
|
||||
从模板创建
|
||||
</a-menu-item>
|
||||
<a-menu-item key="3">
|
||||
<el-tooltip content="支持MD,ZIP格式(图片和MD文件请放到同级目录并配置同级相对路径)" placement="right-start" :show-after="300">
|
||||
<a-upload
|
||||
@@ -55,11 +59,13 @@
|
||||
import {ElMessage} from 'element-plus'
|
||||
import pageApi from '../../assets/api/page'
|
||||
import axios from "axios";
|
||||
import { BuildOutlined } from '@ant-design/icons-vue';
|
||||
|
||||
|
||||
let router = useRouter();
|
||||
let uploadFileUrl = ref(import.meta.env.VITE_APP_BASE_API + '/zyplayer-doc-wiki/page/file/upload');
|
||||
let fileList = ref([]);
|
||||
let emit = defineEmits(['choosePageIdFunc', 'doGetPageList'])
|
||||
let emit = defineEmits(['choosePageIdFunc', 'doGetPageList','createWikiByTemplate'])
|
||||
let props = defineProps({
|
||||
choiceSpace: Number,
|
||||
choosePageId: Number,
|
||||
@@ -105,6 +111,10 @@
|
||||
emit('choosePageIdFunc', id)
|
||||
}
|
||||
|
||||
const createWikiByTemplate = (id) => {
|
||||
emit('createWikiByTemplate', id)
|
||||
}
|
||||
|
||||
const createWiki = (editorType, parentId) => {
|
||||
if (props.choiceSpace > 0) {
|
||||
let name = "新建文档"
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
:choosePageId="choosePageId"
|
||||
:nowPageId = "nowPageId"
|
||||
:funcId = "0"
|
||||
@createWikiByTemplate="createWikiByTemplate"
|
||||
@choosePageIdFunc="choosePageIdFunc"
|
||||
@doGetPageList="doGetPageList"
|
||||
/>
|
||||
@@ -36,10 +37,13 @@
|
||||
<el-icon-document/>
|
||||
</el-icon>
|
||||
<!--标题-->
|
||||
<el-tooltip :content="data.tags" placement="top-start" :show-after="500">
|
||||
<a-tag color="#f50" v-if="data.shareStatus !== undefined">{{filterShareStatus(data.shareStatus)}}</a-tag>
|
||||
</el-tooltip>
|
||||
<a-input v-if="data.renaming" v-model:value="data.name" class="rename-input" placeholder="请输入文档名称" @blur="doRename(node,data)" @click.stop/>
|
||||
<span v-else style="vertical-align: middle;">
|
||||
<el-tooltip :content="node.label" placement="top-start" :show-after="1000">{{ node.label }}</el-tooltip>
|
||||
</span>
|
||||
<span v-else style="vertical-align: middle;margin-right: 5px">
|
||||
<el-tooltip :content="node.label" placement="top-start" :show-after="700">{{ node.label }}</el-tooltip>
|
||||
</span>
|
||||
<!--操作-->
|
||||
<div class="page-action-box" :class="data.renaming?'renaming':''" @click.stop>
|
||||
<AddMenu
|
||||
@@ -47,6 +51,7 @@
|
||||
:choosePageId="choosePageId"
|
||||
:nowPageId = "nowPageId"
|
||||
:funcId = "data.id"
|
||||
@createWikiByTemplate="createWikiByTemplate"
|
||||
@choosePageIdFunc="choosePageIdFunc"
|
||||
@doGetPageList="doGetPageList"
|
||||
/>
|
||||
@@ -60,13 +65,17 @@
|
||||
</el-icon>
|
||||
重命名
|
||||
</a-menu-item>
|
||||
<a-menu-item key="1" @click="deleteWikiPage">
|
||||
<a-menu-item key="1" @click="deleteWikiPage(data.shareStatus)">
|
||||
<el-icon class="clickAddIcon" style="margin-right: 5px">
|
||||
<svg width="1em" height="1em" viewBox="0 0 48 48" fill="none"><path d="M9 10V44H39V10H9Z" fill="none" stroke="currentColor" stroke-width="4" stroke-linejoin="round"></path><path d="M20 20V33" stroke="currentColor" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"></path><path d="M28 20V33" stroke="currentColor" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"></path><path d="M4 10H44" stroke="currentColor" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"></path><path d="M16 10L19.289 4H28.7771L32 10H16Z" fill="none" stroke="currentColor" stroke-width="4" stroke-linejoin="round"></path></svg>
|
||||
</el-icon>
|
||||
删除
|
||||
</a-menu-item>
|
||||
|
||||
<a-sub-menu key="2" title="移动文档" >
|
||||
<template #icon>
|
||||
<BlockOutlined />
|
||||
</template>
|
||||
<a-menu-item key="3" @click="openMoveMenu(false)">
|
||||
<el-icon class="clickAddIcon" style="margin-right: 5px">
|
||||
<DocumentCopy/>
|
||||
@@ -80,6 +89,10 @@
|
||||
迁移文档
|
||||
</a-menu-item>
|
||||
</a-sub-menu>
|
||||
<a-menu-item key="5" @click="openTemplateCreate(data.shareStatus !== undefined)" v-if="data.editorType !== 0">
|
||||
<BuildOutlined />
|
||||
设为模板
|
||||
</a-menu-item>
|
||||
</a-menu>
|
||||
</template>
|
||||
</a-dropdown>
|
||||
@@ -164,6 +177,7 @@
|
||||
</el-main>
|
||||
</el-container>
|
||||
</el-container>
|
||||
<templateManage ref="templateManageRef" :pageId="choosePageId" :spaceId="choiceSpace" @doGetPageList="doGetPageList" />
|
||||
<create-space ref="createSpaceRef" @success="loadSpaceList"></create-space>
|
||||
<a-modal
|
||||
v-model:open="visibleMoveMenu"
|
||||
@@ -211,6 +225,7 @@
|
||||
import userApi from '../../assets/api/user'
|
||||
import pageApi from '../../assets/api/page'
|
||||
import CreateSpace from '../space/CreateSpace'
|
||||
import TemplateManage from '../template/TemplateManage'
|
||||
import RightResize from './RightResize.vue'
|
||||
import AddMenu from './AddMenu.vue'
|
||||
import LeftSidebar from './LeftSidebar.vue'
|
||||
@@ -219,7 +234,7 @@
|
||||
import {useStoreUserData} from "@/store/userData";
|
||||
import {useStorePageData} from "@/store/pageData";
|
||||
import { defineComponent } from 'vue';
|
||||
import { DownOutlined } from '@ant-design/icons-vue';
|
||||
import { DownOutlined,BuildOutlined,BlockOutlined } from '@ant-design/icons-vue';
|
||||
|
||||
let route = useRoute();
|
||||
let router = useRouter();
|
||||
@@ -257,6 +272,7 @@
|
||||
let visibleMoveMenu = ref(false);
|
||||
let onlyMoveMode = ref(false);
|
||||
let aModalWaiting = ref(false);
|
||||
let templateManageRef=ref(null)
|
||||
|
||||
watch(()=>nowPageId ,()=>{
|
||||
leftSideBarDir.value.assisSetCurrentKey();
|
||||
@@ -287,6 +303,22 @@
|
||||
getSelfUserInfo()
|
||||
});
|
||||
|
||||
const openTemplateCreate = (exsit) =>{
|
||||
templateManageRef.value.showTemplateCreate(exsit)
|
||||
}
|
||||
|
||||
const createWikiByTemplate = () =>{
|
||||
templateManageRef.value.showTemplateManage()
|
||||
|
||||
}
|
||||
|
||||
const filterShareStatus = (data) =>{
|
||||
if (data === 1){
|
||||
return '公共模板'
|
||||
}
|
||||
return '个人模板'
|
||||
}
|
||||
|
||||
const openMoveMenu = (onlyMove) =>{
|
||||
onlyMoveMode.value = onlyMove
|
||||
visibleMoveMenu.value =true
|
||||
@@ -326,8 +358,13 @@
|
||||
moveToWikiPageList.value = []
|
||||
}
|
||||
|
||||
const deleteWikiPage = () => {
|
||||
ElMessageBox.confirm('确定要删除此页面及其所有子页面吗?', '提示', {
|
||||
|
||||
const deleteWikiPage = (share) => {
|
||||
let msg = '确定要删除此页面及其所有子页面吗?'
|
||||
if (share !== undefined){
|
||||
msg='选中的页面是:' +filterShareStatus(share)+'删除后无法使用此模板! 确定要删除此页面及其所有子页面吗?'
|
||||
}
|
||||
ElMessageBox.confirm(msg, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
|
||||
@@ -0,0 +1,324 @@
|
||||
<template>
|
||||
<div class="template-manage">
|
||||
<el-dialog title="设置为模板" v-model="newTemplateDialogVisible" width="600px" :close-on-click-modal="false">
|
||||
<el-form label-width="100px" :model="templateNewForm">
|
||||
<el-form-item label="模板标签">
|
||||
<el-input v-model="templateNewForm.tagName"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否公开">
|
||||
<el-switch v-model="templateNewForm.shareStatus" inactive-text="个人模板" :inactive-value="0"
|
||||
active-text="公共模板" :active-value="1"></el-switch>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" v-if="exsit" @click="onNewTemplateSubmit">保存修改</el-button>
|
||||
<el-button type="primary" v-else @click="onNewTemplateSubmit">立即创建</el-button>
|
||||
<el-button @click="onNewTemplateCancel">取消</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-dialog>
|
||||
<a-modal
|
||||
v-model:open="templateChooseDialogVisible"
|
||||
title="模板库"
|
||||
width="100%"
|
||||
wrapClassName="full-modal"
|
||||
:confirm-loading="aModalWaiting"
|
||||
:destroyOnClose=true
|
||||
:closable=true>
|
||||
<div>
|
||||
<el-switch v-model="open" inactive-text="个人模板" :inactive-value="0" active-text="公共模板" :active-value="1"
|
||||
@change="filterByOpen"></el-switch>
|
||||
<a-divider type="vertical"/>
|
||||
<el-input v-model="name" style="width: 30%" @change="filterByName"></el-input>
|
||||
</div>
|
||||
<a-divider>模板标签</a-divider>
|
||||
<a-checkable-tag v-for="tag in tags" @click="filterByTags(tag.tagName,tag.show)" v-model:checked="tag.show"
|
||||
style="margin: 5px" size="big">{{tag.tagName}}
|
||||
</a-checkable-tag>
|
||||
<a-divider/>
|
||||
<a-list :grid="{gutter:1,column:4,xs:1,sm:1,md:2,lg:2,xl:4,xxl:4}" :data-source="templateList">
|
||||
<template #renderItem="{item}">
|
||||
<a-list-item>
|
||||
<a-card :title="item.name">
|
||||
<a-tag color="#f50">{{filterShareStatus(item.shareStatus)}}</a-tag>
|
||||
<a-tag color="#87d068">{{item.tags}}</a-tag>
|
||||
<br/>
|
||||
{{item.createUserName}}
|
||||
<br/>
|
||||
{{item.createTime}}
|
||||
<template #actions>
|
||||
<el-tooltip effect="dark" content="转到原文档" placement="top">
|
||||
<AimOutlined @click="turnToSource(item)"/>
|
||||
</el-tooltip>
|
||||
<el-tooltip effect="dark" content="预览模板" placement="top">
|
||||
<BorderOutlined @click="showPreview(item)"/>
|
||||
</el-tooltip>`
|
||||
<el-tooltip effect="dark" content="使用模板" placement="top">
|
||||
<AlertOutlined @click="chooseTemplate(item)"/>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</a-card>
|
||||
</a-list-item>
|
||||
</template>
|
||||
</a-list>
|
||||
<a-pagination simple v-model:current="nowTemplateNum" :total="totalTemplate" style="float: right"
|
||||
:page-size="8" :hide-on-single-page=true @change="pageUpDown"></a-pagination>
|
||||
<template #footer/>
|
||||
</a-modal>
|
||||
<a-modal
|
||||
v-model:open="previewVisible"
|
||||
title="模板预览"
|
||||
width="100%"
|
||||
wrapClassName="full-modal"
|
||||
:destroyOnClose=true
|
||||
:closable=true>
|
||||
<el-row>
|
||||
<div ref="pageContentRef" class="wiki-page-content">
|
||||
<div v-html="pageShowDetail" class="markdown-body" v-if="editorType.value === 2" v-highlight></div>
|
||||
<div v-html="pageShowDetail" class="wang-editor-body" v-else></div>
|
||||
</div>
|
||||
</el-row>
|
||||
|
||||
<template #footer/>
|
||||
</a-modal>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import {
|
||||
onBeforeUnmount,
|
||||
ref,
|
||||
onMounted,
|
||||
watch,
|
||||
defineProps,
|
||||
nextTick,
|
||||
defineEmits,
|
||||
defineExpose,
|
||||
computed
|
||||
} from 'vue';
|
||||
import {AlertOutlined, AimOutlined, BorderOutlined} from '@ant-design/icons-vue';
|
||||
import {onBeforeRouteUpdate, useRouter, useRoute} from "vue-router";
|
||||
import {ElMessageBox, ElMessage} from 'element-plus'
|
||||
import pageApi from '../../assets/api/page'
|
||||
import {mavonEditor} from 'mavon-editor'
|
||||
import 'mavon-editor/dist/markdown/github-markdown.min.css'
|
||||
import 'mavon-editor/dist/css/index.css'
|
||||
|
||||
let emit = defineEmits('doGetPageList');
|
||||
let router = useRouter()
|
||||
let nowTemplateNum = ref(1)
|
||||
let totalTemplate = ref(0)
|
||||
let exsit = ref(false)
|
||||
|
||||
let props = defineProps({
|
||||
pageId: Number,
|
||||
spaceId: Number
|
||||
})
|
||||
let templateNewForm = ref({
|
||||
pageId: 0,
|
||||
spaceId: 0,
|
||||
tagName: '',
|
||||
shareStatus: false
|
||||
})
|
||||
let newTemplateDialogVisible = ref(false);
|
||||
const showTemplateCreate = (exsited) => {
|
||||
exsit.value = exsited
|
||||
templateNewForm.value = {
|
||||
pageId: props.pageId,
|
||||
spaceId: props.spaceId,
|
||||
tagName: '',
|
||||
shareStatus: false
|
||||
}
|
||||
newTemplateDialogVisible.value = true
|
||||
}
|
||||
const filterShareStatus = (data) => {
|
||||
if (data === 1) {
|
||||
return '公共模板'
|
||||
}
|
||||
return '个人模板'
|
||||
}
|
||||
const onNewTemplateSubmit = () => {
|
||||
pageApi.addTemplate(templateNewForm.value).then((json) => {
|
||||
ElMessage.success('模板记录成功')
|
||||
emit('doGetPageList', null)
|
||||
})
|
||||
newTemplateDialogVisible.value = false
|
||||
}
|
||||
const onNewTemplateCancel = () => {
|
||||
newTemplateDialogVisible.value = false
|
||||
}
|
||||
|
||||
let templateChooseDialogVisible = ref(false)
|
||||
let previewVisible = ref(false)
|
||||
let aModalWaiting = ref(false)
|
||||
let tags = ref([])
|
||||
let filterTags = ref([])
|
||||
let open = ref(false)
|
||||
let name = ref('')
|
||||
let templateList = ref()
|
||||
let editorType = ref(1)
|
||||
|
||||
|
||||
const showTemplateManage = () => {
|
||||
templateChooseDialogVisible.value = true
|
||||
filterTags.value = [{show: true, tagName: ''}]
|
||||
totalTemplate.value = 0
|
||||
nowTemplateNum.value = 1
|
||||
templateList.value = []
|
||||
filterByOpen()
|
||||
}
|
||||
const chooseTemplate = (item) => {
|
||||
pageApi.useTemplate({
|
||||
spaceId: props.spaceId,
|
||||
parentId: props.pageId,
|
||||
templateId: item.templateId
|
||||
}).then((json) => {
|
||||
templateChooseDialogVisible.value = false
|
||||
emit('doGetPageList', null)
|
||||
ElMessage.success('创建成功')
|
||||
router.push({
|
||||
path: '/page/edit',
|
||||
query: {parentId: props.pageId, pageId: json.data.id}
|
||||
})
|
||||
})
|
||||
}
|
||||
const turnToSource = (item) => {
|
||||
templateChooseDialogVisible.value = false
|
||||
router.push({
|
||||
path: '/page/show',
|
||||
query: {spaceId: item.spaceId, pageId: item.id}
|
||||
})
|
||||
}
|
||||
const pageUpDown = () => {
|
||||
templateList.value = []
|
||||
pageApi.getTemplate({
|
||||
name: name.value,
|
||||
open: open.value,
|
||||
tags: filterTags.value,
|
||||
pageNum: nowTemplateNum.value
|
||||
}).then((json) => {
|
||||
totalTemplate.value = json.total || 0
|
||||
templateList.value = json.data || []
|
||||
})
|
||||
}
|
||||
const simpleQryTemplate = () => {
|
||||
templateList.value = []
|
||||
pageApi.getTemplate({
|
||||
name: name.value,
|
||||
open: open.value,
|
||||
tags: filterTags.value,
|
||||
}).then((json) => {
|
||||
totalTemplate.value = json.total || 0
|
||||
templateList.value = json.data || []
|
||||
nowTemplateNum.value = 1
|
||||
})
|
||||
}
|
||||
const filterByOpen = () => {
|
||||
pageApi.getTags({open: open.value}).then((json) => {
|
||||
tags.value = json.data || []
|
||||
filterTags.value = json.data || []
|
||||
simpleQryTemplate()
|
||||
})
|
||||
}
|
||||
const filterByTags = () => {
|
||||
filterTags.value = tags.value.filter((item) => {
|
||||
return item.show
|
||||
})
|
||||
if (filterTags.value.length === 0) {
|
||||
filterTags.value = ['']
|
||||
}
|
||||
setTimeout(simpleQryTemplate(), 200)
|
||||
}
|
||||
const filterByName = () => {
|
||||
simpleQryTemplate()
|
||||
}
|
||||
|
||||
let pageShowDetail = ref('')
|
||||
let pageContentRef = ref(null)
|
||||
const showPreview = (item) => {
|
||||
editorType.value = item.editorType
|
||||
if (item.editorType === 1) {
|
||||
pageShowDetail.value = item.content
|
||||
}
|
||||
if (item.editorType === 2) {
|
||||
pageShowDetail.value = mavonEditor.getMarkdownIt().render(item.content)
|
||||
}
|
||||
setTimeout(previewPageImage(), 500);
|
||||
previewVisible.value = true
|
||||
}
|
||||
const previewPageImage = () => {
|
||||
const imgArr = []
|
||||
if (pageContentRef.value !== undefined || pageContentRef.value !== '') {
|
||||
return
|
||||
}
|
||||
const imgSelector = pageContentRef.value.querySelectorAll('img')
|
||||
imgSelector.forEach((item, index) => {
|
||||
imgArr.push(item.src)
|
||||
item.onclick = () => {
|
||||
previewInitialIndex.value = index
|
||||
showImagePreviewList.value = imgArr
|
||||
showImagePreview.value = true
|
||||
}
|
||||
})
|
||||
}
|
||||
defineExpose({showTemplateCreate, showTemplateManage});
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.template-manage .wiki-page-content {
|
||||
margin-top: 5px;
|
||||
height: calc(100vh);
|
||||
overflow: hidden;
|
||||
position: relative
|
||||
}
|
||||
|
||||
.template-manage .markdown-body table {
|
||||
display: table;
|
||||
}
|
||||
|
||||
.template-manage .wiki-page-content img {
|
||||
cursor: pointer;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.template-manage .wiki-page-content img:hover {
|
||||
box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
</style>
|
||||
<style lang="less">
|
||||
.full-modal {
|
||||
.ant-modal {
|
||||
max-width: 100%;
|
||||
top: 0;
|
||||
padding-bottom: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.ant-modal-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: calc(100vh);
|
||||
overflow: auto;
|
||||
position: relative
|
||||
}
|
||||
|
||||
.ant-modal-body {
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<style lang="scss">
|
||||
.template-manage {
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
|
||||
.wiki-page-content {
|
||||
ol {
|
||||
list-style: decimal;
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style: disc;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -14,6 +14,7 @@ import com.zyplayer.doc.data.repository.manage.mapper.WikiPageContentMapper;
|
||||
import com.zyplayer.doc.data.repository.manage.mapper.WikiPageMapper;
|
||||
import com.zyplayer.doc.data.repository.manage.param.SearchByEsParam;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.SpaceNewsVo;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.WikiPageTemplateInfoVo;
|
||||
import com.zyplayer.doc.data.repository.support.consts.DocSysType;
|
||||
import com.zyplayer.doc.data.repository.support.consts.UserMsgType;
|
||||
import com.zyplayer.doc.data.service.manage.*;
|
||||
@@ -57,477 +58,484 @@ import java.util.stream.Collectors;
|
||||
@RequiredArgsConstructor
|
||||
public class WikiPageController {
|
||||
|
||||
private final WikiPageService wikiPageService;
|
||||
private final WikiPageContentService wikiPageContentService;
|
||||
private final WikiPageContentMapper wikiPageContentMapper;
|
||||
private final WikiPageFileService wikiPageFileService;
|
||||
private final WikiPageZanService wikiPageZanService;
|
||||
private final WikiSpaceService wikiSpaceService;
|
||||
private final WikiPageAuthService wikiPageAuthService;
|
||||
private final WikiPageUploadService wikipageUploadService;
|
||||
private final UserMessageService userMessageService;
|
||||
private final WikiPageHistoryService wikiPageHistoryService;
|
||||
private final WikiPageMapper wikiPageMapper;
|
||||
private final WikiPageCommentService wikiPageCommentService;
|
||||
private final WikiPageService wikiPageService;
|
||||
private final WikiPageContentService wikiPageContentService;
|
||||
private final WikiPageContentMapper wikiPageContentMapper;
|
||||
private final WikiPageFileService wikiPageFileService;
|
||||
private final WikiPageZanService wikiPageZanService;
|
||||
private final WikiSpaceService wikiSpaceService;
|
||||
private final WikiPageAuthService wikiPageAuthService;
|
||||
private final WikiPageUploadService wikipageUploadService;
|
||||
private final UserMessageService userMessageService;
|
||||
private final WikiPageHistoryService wikiPageHistoryService;
|
||||
private final WikiPageMapper wikiPageMapper;
|
||||
private final WikiPageCommentService wikiPageCommentService;
|
||||
private final WikiPageTemplateService wikiPageTemplateService;
|
||||
|
||||
|
||||
@PostMapping("/list")
|
||||
public ResponseJson<List<WikiPageVo>> list(WikiPage wikiPage) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPage.getSpaceId());
|
||||
// 私人空间
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有权限查看该空间的文章列表!");
|
||||
}
|
||||
|
||||
@PostMapping("/list")
|
||||
public ResponseJson<List<WikiPageVo>> list(WikiPage wikiPage) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPage.getSpaceId());
|
||||
// 私人空间
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有权限查看该空间的文章列表!");
|
||||
}
|
||||
UpdateWrapper<WikiPage> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("del_flag", 0);
|
||||
wrapper.eq("space_id", wikiPage.getSpaceId());
|
||||
List<WikiPage> wikiPageList = wikiPageService.list(wrapper);
|
||||
Map<Long, List<WikiPageVo>> listMap = wikiPageList.stream().map(WikiPageVo::new).collect(Collectors.groupingBy(WikiPageVo::getParentId));
|
||||
List<WikiPageVo> nodePageList = listMap.get(0L);
|
||||
if (CollectionUtils.isNotEmpty(nodePageList)) {
|
||||
nodePageList = nodePageList.stream().sorted(Comparator.comparingInt(WikiPageVo::getSeqNo)).collect(Collectors.toList());
|
||||
this.setChildren(listMap, nodePageList, "");
|
||||
}
|
||||
return DocResponseJson.ok(nodePageList);
|
||||
}
|
||||
List<WikiPageTemplateInfoVo> wikiPageList = wikiPageService.wikiPageTemplateInfos(wikiPage.getSpaceId());
|
||||
Map<Long, List<WikiPageVo>> listMap = wikiPageList.stream().map(WikiPageVo::new).collect(Collectors.groupingBy(WikiPageVo::getParentId));
|
||||
List<WikiPageVo> nodePageList = listMap.get(0L);
|
||||
if (CollectionUtils.isNotEmpty(nodePageList)) {
|
||||
nodePageList = nodePageList.stream().sorted(Comparator.comparingInt(WikiPageVo::getSeqNo)).collect(Collectors.toList());
|
||||
this.setChildren(listMap, nodePageList, "");
|
||||
}
|
||||
return DocResponseJson.ok(nodePageList);
|
||||
}
|
||||
|
||||
@PostMapping("/detail")
|
||||
public ResponseJson<WikiPageContentVo> detail(WikiPage wikiPage) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPage wikiPageSel = wikiPageService.getById(wikiPage.getId());
|
||||
// 页面已删除
|
||||
if (wikiPageSel == null || Objects.equals(wikiPageSel.getDelFlag(), 1)) {
|
||||
return DocResponseJson.warn("该页面不存在或已删除!");
|
||||
}
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
// 空间已删除
|
||||
if (wikiSpaceSel == null || Objects.equals(wikiSpaceSel.getDelFlag(), 1)) {
|
||||
return DocResponseJson.warn("该页面不存在或已删除!");
|
||||
}
|
||||
// 私人空间
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有权限查看该空间的文章详情!");
|
||||
}
|
||||
UpdateWrapper<WikiPageContent> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("page_id", wikiPage.getId());
|
||||
WikiPageContent pageContent = wikiPageContentService.getOne(wrapper);
|
||||
@PostMapping("/detail")
|
||||
public ResponseJson<WikiPageContentVo> detail(WikiPage wikiPage) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPage wikiPageSel = wikiPageService.getById(wikiPage.getId());
|
||||
// 页面已删除
|
||||
if (wikiPageSel == null || Objects.equals(wikiPageSel.getDelFlag(), 1)) {
|
||||
return DocResponseJson.warn("该页面不存在或已删除!");
|
||||
}
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
// 空间已删除
|
||||
if (wikiSpaceSel == null || Objects.equals(wikiSpaceSel.getDelFlag(), 1)) {
|
||||
return DocResponseJson.warn("该页面不存在或已删除!");
|
||||
}
|
||||
// 私人空间
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有权限查看该空间的文章详情!");
|
||||
}
|
||||
UpdateWrapper<WikiPageContent> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("page_id", wikiPage.getId());
|
||||
WikiPageContent pageContent = wikiPageContentService.getOne(wrapper);
|
||||
|
||||
UpdateWrapper<WikiPageFile> wrapperFile = new UpdateWrapper<>();
|
||||
wrapperFile.eq("page_id", wikiPage.getId());
|
||||
wrapperFile.eq("del_flag", 0);
|
||||
List<WikiPageFile> pageFiles = wikiPageFileService.list(wrapperFile);
|
||||
for (WikiPageFile pageFile : pageFiles) {
|
||||
pageFile.setFileUrl("zyplayer-doc-wiki/common/file?uuid=" + pageFile.getUuid());
|
||||
}
|
||||
UpdateWrapper<WikiPageZan> wrapperZan = new UpdateWrapper<>();
|
||||
wrapperZan.eq("page_id", wikiPage.getId());
|
||||
wrapperZan.eq("create_user_id", currentUser.getUserId());
|
||||
wrapperZan.eq("yn", 1);
|
||||
WikiPageZan pageZan = wikiPageZanService.getOne(wrapperZan);
|
||||
WikiPageContentVo vo = new WikiPageContentVo();
|
||||
vo.setWikiPage(wikiPageSel);
|
||||
vo.setPageContent(pageContent);
|
||||
vo.setFileList(pageFiles);
|
||||
vo.setSelfZan((pageZan != null) ? 1 : 0);
|
||||
vo.setSelfUserId(currentUser.getUserId());
|
||||
// 上传附件、编辑、权限设置、删除 的权限
|
||||
String canEdit = wikiPageAuthService.canEdit(wikiSpaceSel, wikiPageSel.getEditType(), wikiPageSel.getId(), currentUser.getUserId());
|
||||
String canDelete = wikiPageAuthService.canDelete(wikiSpaceSel, wikiPageSel.getEditType(), wikiPageSel.getId(), currentUser.getUserId());
|
||||
String canUploadFile = wikiPageAuthService.canUploadFile(wikiSpaceSel, wikiPageSel.getId(), currentUser.getUserId());
|
||||
String canDeleteFile = wikiPageAuthService.canDeleteFile(wikiSpaceSel, wikiPageSel.getId(), currentUser.getUserId());
|
||||
String canConfigAuth = wikiPageAuthService.canConfigAuth(wikiSpaceSel, wikiPageSel.getId(), currentUser.getUserId());
|
||||
vo.setCanEdit((canEdit == null) ? 1 : 0);
|
||||
vo.setCanDelete((canDelete == null) ? 1 : 0);
|
||||
vo.setCanDeleteFile((canDeleteFile == null) ? 1 : 0);
|
||||
vo.setCanUploadFile((canUploadFile == null) ? 1 : 0);
|
||||
vo.setCanConfigAuth((canConfigAuth == null) ? 1 : 0);
|
||||
// 高并发下会有覆盖问题,但不重要~
|
||||
Integer viewNum = Optional.ofNullable(wikiPageSel.getViewNum()).orElse(0);
|
||||
WikiPage wikiPageUp = new WikiPage();
|
||||
wikiPageUp.setId(wikiPageSel.getId());
|
||||
wikiPageUp.setViewNum(viewNum + 1);
|
||||
wikiPageService.updateById(wikiPageUp);
|
||||
// 修改返回值里的查看数+1
|
||||
wikiPageSel.setViewNum(viewNum + 1);
|
||||
return DocResponseJson.ok(vo);
|
||||
}
|
||||
UpdateWrapper<WikiPageFile> wrapperFile = new UpdateWrapper<>();
|
||||
wrapperFile.eq("page_id", wikiPage.getId());
|
||||
wrapperFile.eq("del_flag", 0);
|
||||
List<WikiPageFile> pageFiles = wikiPageFileService.list(wrapperFile);
|
||||
for (WikiPageFile pageFile : pageFiles) {
|
||||
pageFile.setFileUrl("zyplayer-doc-wiki/common/file?uuid=" + pageFile.getUuid());
|
||||
}
|
||||
UpdateWrapper<WikiPageZan> wrapperZan = new UpdateWrapper<>();
|
||||
wrapperZan.eq("page_id", wikiPage.getId());
|
||||
wrapperZan.eq("create_user_id", currentUser.getUserId());
|
||||
wrapperZan.eq("yn", 1);
|
||||
WikiPageZan pageZan = wikiPageZanService.getOne(wrapperZan);
|
||||
WikiPageContentVo vo = new WikiPageContentVo();
|
||||
vo.setWikiPage(wikiPageSel);
|
||||
vo.setPageContent(pageContent);
|
||||
vo.setFileList(pageFiles);
|
||||
vo.setSelfZan((pageZan != null) ? 1 : 0);
|
||||
vo.setSelfUserId(currentUser.getUserId());
|
||||
// 上传附件、编辑、权限设置、删除 的权限
|
||||
String canEdit = wikiPageAuthService.canEdit(wikiSpaceSel, wikiPageSel.getEditType(), wikiPageSel.getId(), currentUser.getUserId());
|
||||
String canDelete = wikiPageAuthService.canDelete(wikiSpaceSel, wikiPageSel.getEditType(), wikiPageSel.getId(), currentUser.getUserId());
|
||||
String canUploadFile = wikiPageAuthService.canUploadFile(wikiSpaceSel, wikiPageSel.getId(), currentUser.getUserId());
|
||||
String canDeleteFile = wikiPageAuthService.canDeleteFile(wikiSpaceSel, wikiPageSel.getId(), currentUser.getUserId());
|
||||
String canConfigAuth = wikiPageAuthService.canConfigAuth(wikiSpaceSel, wikiPageSel.getId(), currentUser.getUserId());
|
||||
vo.setCanEdit((canEdit == null) ? 1 : 0);
|
||||
vo.setCanDelete((canDelete == null) ? 1 : 0);
|
||||
vo.setCanDeleteFile((canDeleteFile == null) ? 1 : 0);
|
||||
vo.setCanUploadFile((canUploadFile == null) ? 1 : 0);
|
||||
vo.setCanConfigAuth((canConfigAuth == null) ? 1 : 0);
|
||||
// 高并发下会有覆盖问题,但不重要~
|
||||
Integer viewNum = Optional.ofNullable(wikiPageSel.getViewNum()).orElse(0);
|
||||
WikiPage wikiPageUp = new WikiPage();
|
||||
wikiPageUp.setId(wikiPageSel.getId());
|
||||
wikiPageUp.setViewNum(viewNum + 1);
|
||||
wikiPageService.updateById(wikiPageUp);
|
||||
// 修改返回值里的查看数+1
|
||||
wikiPageSel.setViewNum(viewNum + 1);
|
||||
return DocResponseJson.ok(vo);
|
||||
}
|
||||
|
||||
@PostMapping("/changeParent")
|
||||
public ResponseJson<Object> changeParent(WikiPage wikiPage, Integer beforeSeq, Integer afterSeq) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPage wikiPageSel = wikiPageService.getById(wikiPage.getId());
|
||||
// 编辑权限判断
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
String canEdit = wikiPageAuthService.canEdit(wikiSpaceSel, wikiPageSel.getEditType(), wikiPageSel.getId(), currentUser.getUserId());
|
||||
if (canEdit != null) {
|
||||
return DocResponseJson.warn(canEdit);
|
||||
}
|
||||
WikiPage wikiPageUp = new WikiPage();
|
||||
wikiPageUp.setId(wikiPage.getId());
|
||||
wikiPageUp.setParentId(wikiPage.getParentId());
|
||||
wikiPageUp.setUpdateTime(new Date());
|
||||
wikiPageUp.setUpdateUserId(currentUser.getUserId());
|
||||
wikiPageUp.setUpdateUserName(currentUser.getUsername());
|
||||
wikiPageService.changeParent(wikiPageUp, beforeSeq, afterSeq);
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
@PostMapping("/changeParent")
|
||||
public ResponseJson<Object> changeParent(WikiPage wikiPage, Integer beforeSeq, Integer afterSeq) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPage wikiPageSel = wikiPageService.getById(wikiPage.getId());
|
||||
// 编辑权限判断
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
String canEdit = wikiPageAuthService.canEdit(wikiSpaceSel, wikiPageSel.getEditType(), wikiPageSel.getId(), currentUser.getUserId());
|
||||
if (canEdit != null) {
|
||||
return DocResponseJson.warn(canEdit);
|
||||
}
|
||||
WikiPage wikiPageUp = new WikiPage();
|
||||
wikiPageUp.setId(wikiPage.getId());
|
||||
wikiPageUp.setParentId(wikiPage.getParentId());
|
||||
wikiPageUp.setUpdateTime(new Date());
|
||||
wikiPageUp.setUpdateUserId(currentUser.getUserId());
|
||||
wikiPageUp.setUpdateUserName(currentUser.getUsername());
|
||||
wikiPageService.changeParent(wikiPageUp, beforeSeq, afterSeq);
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/delete")
|
||||
public ResponseJson<Object> delete(Long pageId) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPage wikiPageSel = wikiPageService.getById(pageId);
|
||||
// 删除权限判断
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
String canDelete = wikiPageAuthService.canDelete(wikiSpaceSel, wikiPageSel.getEditType(), wikiPageSel.getId(), currentUser.getUserId());
|
||||
if (canDelete != null) {
|
||||
return DocResponseJson.warn(canDelete);
|
||||
}
|
||||
// 执行删除
|
||||
WikiPage wikiPage = new WikiPage();
|
||||
wikiPage.setId(pageId);
|
||||
wikiPage.setDelFlag(1);
|
||||
wikiPage.setName(wikiPageSel.getName());
|
||||
wikiPage.setUpdateTime(new Date());
|
||||
wikiPage.setUpdateUserId(currentUser.getUserId());
|
||||
wikiPage.setUpdateUserName(currentUser.getUsername());
|
||||
wikiPageService.deletePage(wikiPage);
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
@PostMapping("/delete")
|
||||
public ResponseJson<Object> delete(Long pageId) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPage wikiPageSel = wikiPageService.getById(pageId);
|
||||
// 删除权限判断
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
String canDelete = wikiPageAuthService.canDelete(wikiSpaceSel, wikiPageSel.getEditType(), wikiPageSel.getId(), currentUser.getUserId());
|
||||
if (canDelete != null) {
|
||||
return DocResponseJson.warn(canDelete);
|
||||
}
|
||||
// 执行删除
|
||||
WikiPage wikiPage = new WikiPage();
|
||||
wikiPage.setId(pageId);
|
||||
wikiPage.setDelFlag(1);
|
||||
wikiPage.setName(wikiPageSel.getName());
|
||||
wikiPage.setUpdateTime(new Date());
|
||||
wikiPage.setUpdateUserId(currentUser.getUserId());
|
||||
wikiPage.setUpdateUserName(currentUser.getUsername());
|
||||
wikiPageService.deletePage(wikiPage);
|
||||
QueryWrapper queryWrapper = new QueryWrapper();
|
||||
queryWrapper.eq("space_id", wikiPageSel.getSpaceId());
|
||||
queryWrapper.eq("page_id", wikiPageSel.getId());
|
||||
wikiPageTemplateService.remove(queryWrapper);
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/update")
|
||||
public ResponseJson<Object> update(WikiPage wikiPage, String content, String preview) {
|
||||
Object info = wikipageUploadService.update(wikiPage, content, preview);
|
||||
if (null != info){
|
||||
if (info instanceof WikiPage){
|
||||
return DocResponseJson.ok(info);
|
||||
}
|
||||
return DocResponseJson.warn((String) info);
|
||||
}
|
||||
return DocResponseJson.warn("状态异常");
|
||||
}
|
||||
@PostMapping("/update")
|
||||
public ResponseJson<Object> update(WikiPage wikiPage, String content, String preview) {
|
||||
Object info = wikipageUploadService.update(wikiPage, content, preview);
|
||||
if (null != info) {
|
||||
if (info instanceof WikiPage) {
|
||||
return DocResponseJson.ok(info);
|
||||
}
|
||||
return DocResponseJson.warn((String) info);
|
||||
}
|
||||
return DocResponseJson.warn("状态异常");
|
||||
}
|
||||
|
||||
public boolean isLassoDoll(WikiPage wikiPage, String moveToPageId){
|
||||
if (!"".equals(moveToPageId)){
|
||||
long tatrgetId = Long.parseLong(moveToPageId);
|
||||
if (wikiPage.getId().equals(tatrgetId)){
|
||||
return true;
|
||||
}
|
||||
UpdateWrapper<WikiPage> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("parent_id", wikiPage.getId());
|
||||
wrapper.eq("space_id", wikiPage.getSpaceId());
|
||||
//处理子节点也需要进行移动
|
||||
List<WikiPage> wikiPageList = wikiPageService.list(wrapper);
|
||||
for (WikiPage page : wikiPageList) {
|
||||
if(isLassoDoll(page,moveToPageId)){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public boolean isLassoDoll(WikiPage wikiPage, Long moveToPageId) {
|
||||
if (0L != moveToPageId) {
|
||||
if (wikiPage.getId() == moveToPageId) {
|
||||
return true;
|
||||
}
|
||||
UpdateWrapper<WikiPage> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("parent_id", wikiPage.getId());
|
||||
wrapper.eq("space_id", wikiPage.getSpaceId());
|
||||
//处理子节点也需要进行移动
|
||||
List<WikiPage> wikiPageList = wikiPageService.list(wrapper);
|
||||
for (WikiPage page : wikiPageList) {
|
||||
if (isLassoDoll(page, moveToPageId)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@PostMapping("/move")
|
||||
public ResponseJson<Object> move(WikiPage wikiPage, String moveToPageId, String moveToSpaceId) {
|
||||
if (isLassoDoll(wikiPage,moveToPageId)){
|
||||
return DocResponseJson.warn("不能移动自己到自己或自己的子节点下");
|
||||
}
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
//获取原page信息
|
||||
WikiPage wikiPageSel = wikiPageService.getById(wikiPage.getId());
|
||||
wikiPageSel.setSpaceId(Long.parseLong(moveToSpaceId));
|
||||
wikiPageSel.setParentId(Long.parseLong(moveToPageId));
|
||||
wikiPageSel.setUpdateTime(new Date());
|
||||
wikiPageSel.setUpdateUserId(currentUser.getUserId());
|
||||
wikiPageSel.setUpdateUserName(currentUser.getUsername());
|
||||
wikiPageService.updateById(wikiPageSel);
|
||||
UpdateWrapper<WikiPage> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("parent_id", wikiPage.getId());
|
||||
wrapper.eq("space_id", wikiPage.getSpaceId());
|
||||
//处理子节点也需要进行移动
|
||||
List<WikiPage> wikiPageList = wikiPageService.list(wrapper);
|
||||
for (WikiPage page : wikiPageList) {
|
||||
move(page,wikiPageSel.getId()+"",moveToSpaceId);
|
||||
}
|
||||
// 给相关人发送消息
|
||||
UserMessage userMessage = userMessageService.createUserMessage(currentUser, wikiPageSel.getId(), wikiPageSel.getName(), DocSysType.WIKI, UserMsgType.WIKI_PAGE_MOVE);
|
||||
userMessageService.addWikiMessage(userMessage);
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
@PostMapping("/move")
|
||||
public ResponseJson<Object> move(WikiPage wikiPage, Long moveToPageId, Long moveToSpaceId) {
|
||||
if (isLassoDoll(wikiPage, moveToPageId)) {
|
||||
return DocResponseJson.warn("不能移动自己到自己或自己的子节点下");
|
||||
}
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
//获取原page信息
|
||||
WikiPage wikiPageSel = wikiPageService.getById(wikiPage.getId());
|
||||
wikiPageSel.setSpaceId(moveToSpaceId);
|
||||
wikiPageSel.setParentId(moveToPageId);
|
||||
wikiPageSel.setUpdateTime(new Date());
|
||||
wikiPageSel.setUpdateUserId(currentUser.getUserId());
|
||||
wikiPageSel.setUpdateUserName(currentUser.getUsername());
|
||||
wikiPageService.updateById(wikiPageSel);
|
||||
QueryWrapper queryWrapper = new QueryWrapper();
|
||||
queryWrapper.eq("page_id",wikiPage.getId());
|
||||
queryWrapper.eq("space_id",wikiPage.getSpaceId());
|
||||
WikiPageTemplate bindTemplate = wikiPageTemplateService.getOne(queryWrapper);
|
||||
bindTemplate.setSpaceId(moveToSpaceId);
|
||||
wikiPageTemplateService.updateById(bindTemplate);
|
||||
UpdateWrapper<WikiPage> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("parent_id", wikiPage.getId());
|
||||
wrapper.eq("space_id", wikiPage.getSpaceId());
|
||||
//处理子节点也需要进行移动
|
||||
List<WikiPage> wikiPageList = wikiPageService.list(wrapper);
|
||||
for (WikiPage page : wikiPageList) {
|
||||
move(page, wikiPageSel.getId() , moveToSpaceId);
|
||||
}
|
||||
// 给相关人发送消息
|
||||
UserMessage userMessage = userMessageService.createUserMessage(currentUser, wikiPageSel.getId(), wikiPageSel.getName(), DocSysType.WIKI, UserMsgType.WIKI_PAGE_MOVE);
|
||||
userMessageService.addWikiMessage(userMessage);
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/copy")
|
||||
public ResponseJson<Object> copy(WikiPage wikiPage, String moveToPageId, String moveToSpaceId) {
|
||||
if (isLassoDoll(wikiPage,moveToPageId)){
|
||||
return DocResponseJson.warn("不能移动自己到自己或自己的子节点下");
|
||||
}
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
//获取原page信息
|
||||
WikiPage wikiPageSel = wikiPageService.getById(wikiPage.getId());
|
||||
Integer lastSeq = wikiPageMapper.getLastSeq(wikiPage.getSpaceId(), Long.parseLong(moveToPageId));
|
||||
lastSeq = Optional.ofNullable(lastSeq).orElse(99999);
|
||||
wikiPageSel.setSeqNo(lastSeq + 1);
|
||||
wikiPageSel.setId(null);
|
||||
wikiPageSel.setSpaceId(Long.parseLong(moveToSpaceId));
|
||||
wikiPageSel.setParentId(Long.parseLong(moveToPageId));
|
||||
wikiPageSel.setCreateTime(new Date());
|
||||
wikiPageSel.setUpdateTime(new Date());
|
||||
wikiPageSel.setCreateUserId(currentUser.getUserId());
|
||||
wikiPageSel.setCreateUserName(currentUser.getUsername());
|
||||
wikiPageService.save(wikiPageSel);
|
||||
// 重置当前分支的所有节点seq值
|
||||
wikiPageMapper.updateChildrenSeq(wikiPage.getSpaceId(), Long.parseLong(moveToPageId));
|
||||
// 详情处理
|
||||
UpdateWrapper<WikiPageContent> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("page_id", wikiPage.getId());
|
||||
WikiPageContent pageContent = wikiPageContentService.getOne(wrapper);
|
||||
pageContent.setId(null);
|
||||
pageContent.setPageId(wikiPageSel.getId());
|
||||
pageContent.setCreateTime(new Date());
|
||||
pageContent.setCreateUserId(currentUser.getUserId());
|
||||
pageContent.setCreateUserName(currentUser.getUsername());
|
||||
wikiPageContentService.save(pageContent);
|
||||
//文件
|
||||
UpdateWrapper<WikiPageFile> wrapperFile = new UpdateWrapper<>();
|
||||
wrapperFile.eq("page_id", wikiPageSel.getId());
|
||||
List<WikiPageFile> pageFiles = wikiPageFileService.list(wrapperFile);
|
||||
for (WikiPageFile pageFile : pageFiles) {
|
||||
pageFile.setId(null);
|
||||
pageFile.setUuid(IdUtil.simpleUUID());
|
||||
pageFile.setPageId(wikiPageSel.getId());
|
||||
wikiPageFileService.save(pageFile);
|
||||
}
|
||||
//点赞
|
||||
UpdateWrapper<WikiPageZan> wrapperZan = new UpdateWrapper<>();
|
||||
wrapperZan.eq("page_id", wikiPage.getId());
|
||||
List<WikiPageZan> list = wikiPageZanService.list(wrapperZan);
|
||||
for (WikiPageZan wikiPageZan : list) {
|
||||
wikiPageZan.setId(null);
|
||||
wikiPageZan.setPageId(wikiPageSel.getId());
|
||||
wikiPageZanService.save(wikiPageZan);
|
||||
}
|
||||
//评论
|
||||
UpdateWrapper<WikiPageComment> commentWrapper = new UpdateWrapper<>();
|
||||
commentWrapper.eq("page_id", wikiPageSel.getId());
|
||||
List<WikiPageComment> pageCommentList = wikiPageCommentService.list(commentWrapper);
|
||||
for (WikiPageComment wikiPageComment : pageCommentList) {
|
||||
wikiPageComment.setId(null);
|
||||
wikiPageComment.setPageId(wikiPageSel.getId());
|
||||
wikiPageCommentService.save(wikiPageComment);
|
||||
}
|
||||
//处理子节点也需要进行复制
|
||||
UpdateWrapper<WikiPage> childWrapper = new UpdateWrapper<>();
|
||||
childWrapper.eq("parent_id", wikiPage.getId());
|
||||
childWrapper.eq("space_id", wikiPage.getSpaceId());
|
||||
List<WikiPage> wikiPageList = wikiPageService.list(childWrapper);
|
||||
for (WikiPage page : wikiPageList) {
|
||||
copy(page,wikiPageSel.getId()+"",moveToSpaceId);
|
||||
}
|
||||
// 给相关人发送消息
|
||||
UserMessage userMessage = userMessageService.createUserMessage(currentUser, wikiPageSel.getId(), wikiPageSel.getName(), DocSysType.WIKI, UserMsgType.WIKI_PAGE_COPY);
|
||||
userMessageService.addWikiMessage(userMessage);
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
@PostMapping("/copy")
|
||||
public ResponseJson<Object> copy(WikiPage wikiPage, Long moveToPageId, Long moveToSpaceId) {
|
||||
if (isLassoDoll(wikiPage, moveToPageId)) {
|
||||
return DocResponseJson.warn("不能移动自己到自己或自己的子节点下");
|
||||
}
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
//获取原page信息
|
||||
WikiPage wikiPageSel = wikiPageService.getById(wikiPage.getId());
|
||||
Integer lastSeq = wikiPageMapper.getLastSeq(wikiPage.getSpaceId(), moveToPageId);
|
||||
lastSeq = Optional.ofNullable(lastSeq).orElse(99999);
|
||||
wikiPageSel.setSeqNo(lastSeq + 1);
|
||||
wikiPageSel.setId(null);
|
||||
wikiPageSel.setSpaceId(moveToSpaceId);
|
||||
wikiPageSel.setParentId(moveToPageId);
|
||||
wikiPageSel.setCreateTime(new Date());
|
||||
wikiPageSel.setUpdateTime(new Date());
|
||||
wikiPageSel.setCreateUserId(currentUser.getUserId());
|
||||
wikiPageSel.setCreateUserName(currentUser.getUsername());
|
||||
wikiPageService.save(wikiPageSel);
|
||||
// 重置当前分支的所有节点seq值
|
||||
wikiPageMapper.updateChildrenSeq(wikiPage.getSpaceId(), moveToPageId);
|
||||
// 详情处理
|
||||
UpdateWrapper<WikiPageContent> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("page_id", wikiPage.getId());
|
||||
WikiPageContent pageContent = wikiPageContentService.getOne(wrapper);
|
||||
pageContent.setId(null);
|
||||
pageContent.setPageId(wikiPageSel.getId());
|
||||
pageContent.setCreateTime(new Date());
|
||||
pageContent.setCreateUserId(currentUser.getUserId());
|
||||
pageContent.setCreateUserName(currentUser.getUsername());
|
||||
wikiPageContentService.save(pageContent);
|
||||
//文件
|
||||
UpdateWrapper<WikiPageFile> wrapperFile = new UpdateWrapper<>();
|
||||
wrapperFile.eq("page_id", wikiPageSel.getId());
|
||||
List<WikiPageFile> pageFiles = wikiPageFileService.list(wrapperFile);
|
||||
for (WikiPageFile pageFile : pageFiles) {
|
||||
pageFile.setId(null);
|
||||
pageFile.setUuid(IdUtil.simpleUUID());
|
||||
pageFile.setPageId(wikiPageSel.getId());
|
||||
wikiPageFileService.save(pageFile);
|
||||
}
|
||||
//点赞
|
||||
UpdateWrapper<WikiPageZan> wrapperZan = new UpdateWrapper<>();
|
||||
wrapperZan.eq("page_id", wikiPage.getId());
|
||||
List<WikiPageZan> list = wikiPageZanService.list(wrapperZan);
|
||||
for (WikiPageZan wikiPageZan : list) {
|
||||
wikiPageZan.setId(null);
|
||||
wikiPageZan.setPageId(wikiPageSel.getId());
|
||||
wikiPageZanService.save(wikiPageZan);
|
||||
}
|
||||
//评论
|
||||
UpdateWrapper<WikiPageComment> commentWrapper = new UpdateWrapper<>();
|
||||
commentWrapper.eq("page_id", wikiPageSel.getId());
|
||||
List<WikiPageComment> pageCommentList = wikiPageCommentService.list(commentWrapper);
|
||||
for (WikiPageComment wikiPageComment : pageCommentList) {
|
||||
wikiPageComment.setId(null);
|
||||
wikiPageComment.setPageId(wikiPageSel.getId());
|
||||
wikiPageCommentService.save(wikiPageComment);
|
||||
}
|
||||
//处理子节点也需要进行复制
|
||||
UpdateWrapper<WikiPage> childWrapper = new UpdateWrapper<>();
|
||||
childWrapper.eq("parent_id", wikiPage.getId());
|
||||
childWrapper.eq("space_id", wikiPage.getSpaceId());
|
||||
List<WikiPage> wikiPageList = wikiPageService.list(childWrapper);
|
||||
for (WikiPage page : wikiPageList) {
|
||||
copy(page, wikiPageSel.getId(), moveToSpaceId);
|
||||
}
|
||||
// 给相关人发送消息
|
||||
UserMessage userMessage = userMessageService.createUserMessage(currentUser, wikiPageSel.getId(), wikiPageSel.getName(), DocSysType.WIKI, UserMsgType.WIKI_PAGE_COPY);
|
||||
userMessageService.addWikiMessage(userMessage);
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/rename")
|
||||
public ResponseJson<Object> rename(WikiPage wikiPage) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
if (StringUtils.isBlank(wikiPage.getName())) {
|
||||
return DocResponseJson.warn("标题不能为空!");
|
||||
}
|
||||
if (StringUtils.isBlank(wikiPage.getId()+"")) {
|
||||
return DocResponseJson.warn("不能为新建的文档改名!");
|
||||
}
|
||||
Long pageId = wikiPage.getId();
|
||||
Long spaceId = wikiPage.getSpaceId();
|
||||
WikiPage wikiPageSel = wikiPageService.getById(pageId);
|
||||
// 编辑权限判断
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
String canEdit = wikiPageAuthService.canEdit(wikiSpaceSel, wikiPageSel.getEditType(), wikiPageSel.getId(), currentUser.getUserId());
|
||||
if (canEdit != null) {
|
||||
return DocResponseJson.warn(canEdit);
|
||||
}
|
||||
spaceId = wikiPageSel.getSpaceId();
|
||||
WikiPage oldWikiPage = wikiPageService.getById(pageId);
|
||||
oldWikiPage.setName(wikiPage.getName());
|
||||
wikiPage.setUpdateTime(new Date());
|
||||
wikiPage.setUpdateUserId(currentUser.getUserId());
|
||||
wikiPage.setUpdateUserName(currentUser.getUsername());
|
||||
wikiPageService.updateById(oldWikiPage);
|
||||
UpdateWrapper<WikiPageContent> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("page_id", wikiPage.getId());
|
||||
WikiPageContent pageContent = wikiPageContentService.getOne(wrapper);
|
||||
// 给相关人发送消息
|
||||
UserMessage userMessage = userMessageService.createUserMessage(currentUser, wikiPageSel.getId(), wikiPageSel.getName(), DocSysType.WIKI, UserMsgType.WIKI_PAGE_UPDATE);
|
||||
userMessageService.addWikiMessage(userMessage);
|
||||
try {
|
||||
// 创建历史记录
|
||||
wikiPageHistoryService.saveRecord(spaceId, wikiPage.getId(), pageContent.getContent());
|
||||
} catch (ConfirmException e) {
|
||||
return DocResponseJson.warn(e.getMessage());
|
||||
}
|
||||
return DocResponseJson.ok(wikiPage);
|
||||
}
|
||||
@PostMapping("/rename")
|
||||
public ResponseJson<Object> rename(WikiPage wikiPage) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
if (StringUtils.isBlank(wikiPage.getName())) {
|
||||
return DocResponseJson.warn("标题不能为空!");
|
||||
}
|
||||
if (StringUtils.isBlank(wikiPage.getId() + "")) {
|
||||
return DocResponseJson.warn("不能为新建的文档改名!");
|
||||
}
|
||||
Long pageId = wikiPage.getId();
|
||||
Long spaceId = wikiPage.getSpaceId();
|
||||
WikiPage wikiPageSel = wikiPageService.getById(pageId);
|
||||
// 编辑权限判断
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
String canEdit = wikiPageAuthService.canEdit(wikiSpaceSel, wikiPageSel.getEditType(), wikiPageSel.getId(), currentUser.getUserId());
|
||||
if (canEdit != null) {
|
||||
return DocResponseJson.warn(canEdit);
|
||||
}
|
||||
spaceId = wikiPageSel.getSpaceId();
|
||||
WikiPage oldWikiPage = wikiPageService.getById(pageId);
|
||||
oldWikiPage.setName(wikiPage.getName());
|
||||
wikiPage.setUpdateTime(new Date());
|
||||
wikiPage.setUpdateUserId(currentUser.getUserId());
|
||||
wikiPage.setUpdateUserName(currentUser.getUsername());
|
||||
wikiPageService.updateById(oldWikiPage);
|
||||
UpdateWrapper<WikiPageContent> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("page_id", wikiPage.getId());
|
||||
WikiPageContent pageContent = wikiPageContentService.getOne(wrapper);
|
||||
// 给相关人发送消息
|
||||
UserMessage userMessage = userMessageService.createUserMessage(currentUser, wikiPageSel.getId(), wikiPageSel.getName(), DocSysType.WIKI, UserMsgType.WIKI_PAGE_UPDATE);
|
||||
userMessageService.addWikiMessage(userMessage);
|
||||
try {
|
||||
// 创建历史记录
|
||||
wikiPageHistoryService.saveRecord(spaceId, wikiPage.getId(), pageContent.getContent());
|
||||
} catch (ConfirmException e) {
|
||||
return DocResponseJson.warn(e.getMessage());
|
||||
}
|
||||
return DocResponseJson.ok(wikiPage);
|
||||
}
|
||||
|
||||
@PostMapping("/unlock")
|
||||
public ResponseJson<Object> unlock(Long pageId) {
|
||||
String lockKey = CachePrefix.WIKI_LOCK_PAGE + pageId;
|
||||
DocUserDetails pageLockUser = CacheUtil.get(lockKey);
|
||||
if (pageLockUser != null) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
if (Objects.equals(pageLockUser.getUserId(), currentUser.getUserId())) {
|
||||
CacheUtil.remove(lockKey);
|
||||
}
|
||||
}
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
@PostMapping("/unlock")
|
||||
public ResponseJson<Object> unlock(Long pageId) {
|
||||
String lockKey = CachePrefix.WIKI_LOCK_PAGE + pageId;
|
||||
DocUserDetails pageLockUser = CacheUtil.get(lockKey);
|
||||
if (pageLockUser != null) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
if (Objects.equals(pageLockUser.getUserId(), currentUser.getUserId())) {
|
||||
CacheUtil.remove(lockKey);
|
||||
}
|
||||
}
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/lock")
|
||||
public ResponseJson<Object> editLock(Long pageId) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
String lockKey = CachePrefix.WIKI_LOCK_PAGE + pageId;
|
||||
DocUserDetails pageLockUser = CacheUtil.get(lockKey);
|
||||
if (pageLockUser != null) {
|
||||
if (!Objects.equals(pageLockUser.getUserId(), currentUser.getUserId())) {
|
||||
return DocResponseJson.warn("当前页面正在被:" + pageLockUser.getUsername() + " 编辑");
|
||||
}
|
||||
}
|
||||
CacheUtil.put(lockKey, new DocUserDetails(currentUser.getUserId(), currentUser.getUsername()));
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
@PostMapping("/lock")
|
||||
public ResponseJson<Object> editLock(Long pageId) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
String lockKey = CachePrefix.WIKI_LOCK_PAGE + pageId;
|
||||
DocUserDetails pageLockUser = CacheUtil.get(lockKey);
|
||||
if (pageLockUser != null) {
|
||||
if (!Objects.equals(pageLockUser.getUserId(), currentUser.getUserId())) {
|
||||
return DocResponseJson.warn("当前页面正在被:" + pageLockUser.getUsername() + " 编辑");
|
||||
}
|
||||
}
|
||||
CacheUtil.put(lockKey, new DocUserDetails(currentUser.getUserId(), currentUser.getUsername()));
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/searchByEs")
|
||||
public ResponseJson<Object> searchByEs(SearchByEsParam param) {
|
||||
param.setNewsType(1);
|
||||
return this.news(param);
|
||||
}
|
||||
@PostMapping("/searchByEs")
|
||||
public ResponseJson<Object> searchByEs(SearchByEsParam param) {
|
||||
param.setNewsType(1);
|
||||
return this.news(param);
|
||||
}
|
||||
|
||||
@PostMapping("/download")
|
||||
public ResponseJson<Object> download(Long pageId, HttpServletResponse response) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPage wikiPageSel = wikiPageService.getById(pageId);
|
||||
// 页面已删除
|
||||
if (wikiPageSel == null || Objects.equals(wikiPageSel.getDelFlag(), 1)) {
|
||||
return DocResponseJson.warn("该页面不存在或已删除!");
|
||||
}
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
// 空间已删除
|
||||
if (wikiSpaceSel == null || Objects.equals(wikiSpaceSel.getDelFlag(), 1)) {
|
||||
return DocResponseJson.warn("该页面不存在或已删除!");
|
||||
}
|
||||
// 私人空间
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有权限查看该空间的文章详情!");
|
||||
}
|
||||
UpdateWrapper<WikiPageContent> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("page_id", pageId);
|
||||
WikiPageContent pageContent = wikiPageContentService.getOne(wrapper);
|
||||
if (pageContent == null || StringUtils.isBlank(pageContent.getContent())) {
|
||||
return DocResponseJson.warn("文档内容为空,不能导出!");
|
||||
}
|
||||
try {
|
||||
String content = pageContent.getContent();
|
||||
String fileName = URLEncoder.encode(wikiPageSel.getName(), "UTF-8");
|
||||
content = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Strict//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n" +
|
||||
"<html lang=\"zh\">\n" +
|
||||
"<head>\n" +
|
||||
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n" +
|
||||
"<title>" + fileName + "</title>\n" +
|
||||
"</head>\n" +
|
||||
"<body>" +
|
||||
content +
|
||||
"</body>\n" +
|
||||
"</html>";
|
||||
// 写入流
|
||||
response.setCharacterEncoding("utf-8");
|
||||
response.setContentType("application/vnd.ms-excel");
|
||||
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".docx");
|
||||
ServletOutputStream outputStream = response.getOutputStream();
|
||||
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
|
||||
MainDocumentPart mdp = wordMLPackage.getMainDocumentPart();
|
||||
mdp.addAltChunk(AltChunkType.Xhtml, content.getBytes(StandardCharsets.UTF_8));
|
||||
mdp.convertAltChunks();
|
||||
XmlUtils.marshaltoString(wordMLPackage.getMainDocumentPart().getJaxbElement(), true, true);
|
||||
wordMLPackage.save(outputStream);
|
||||
outputStream.close();
|
||||
return DocResponseJson.ok();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return DocResponseJson.warn("导出失败");
|
||||
}
|
||||
@PostMapping("/download")
|
||||
public ResponseJson<Object> download(Long pageId, HttpServletResponse response) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
WikiPage wikiPageSel = wikiPageService.getById(pageId);
|
||||
// 页面已删除
|
||||
if (wikiPageSel == null || Objects.equals(wikiPageSel.getDelFlag(), 1)) {
|
||||
return DocResponseJson.warn("该页面不存在或已删除!");
|
||||
}
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
|
||||
// 空间已删除
|
||||
if (wikiSpaceSel == null || Objects.equals(wikiSpaceSel.getDelFlag(), 1)) {
|
||||
return DocResponseJson.warn("该页面不存在或已删除!");
|
||||
}
|
||||
// 私人空间
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return DocResponseJson.warn("您没有权限查看该空间的文章详情!");
|
||||
}
|
||||
UpdateWrapper<WikiPageContent> wrapper = new UpdateWrapper<>();
|
||||
wrapper.eq("page_id", pageId);
|
||||
WikiPageContent pageContent = wikiPageContentService.getOne(wrapper);
|
||||
if (pageContent == null || StringUtils.isBlank(pageContent.getContent())) {
|
||||
return DocResponseJson.warn("文档内容为空,不能导出!");
|
||||
}
|
||||
try {
|
||||
String content = pageContent.getContent();
|
||||
String fileName = URLEncoder.encode(wikiPageSel.getName(), "UTF-8");
|
||||
content = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Strict//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n" +
|
||||
"<html lang=\"zh\">\n" +
|
||||
"<head>\n" +
|
||||
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n" +
|
||||
"<title>" + fileName + "</title>\n" +
|
||||
"</head>\n" +
|
||||
"<body>" +
|
||||
content +
|
||||
"</body>\n" +
|
||||
"</html>";
|
||||
// 写入流
|
||||
response.setCharacterEncoding("utf-8");
|
||||
response.setContentType("application/vnd.ms-excel");
|
||||
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".docx");
|
||||
ServletOutputStream outputStream = response.getOutputStream();
|
||||
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
|
||||
MainDocumentPart mdp = wordMLPackage.getMainDocumentPart();
|
||||
mdp.addAltChunk(AltChunkType.Xhtml, content.getBytes(StandardCharsets.UTF_8));
|
||||
mdp.convertAltChunks();
|
||||
XmlUtils.marshaltoString(wordMLPackage.getMainDocumentPart().getJaxbElement(), true, true);
|
||||
wordMLPackage.save(outputStream);
|
||||
outputStream.close();
|
||||
return DocResponseJson.ok();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return DocResponseJson.warn("导出失败");
|
||||
}
|
||||
|
||||
@PostMapping("/news")
|
||||
public ResponseJson<Object> news(SearchByEsParam param) {
|
||||
// 空间不是自己的
|
||||
Map<Long, WikiSpace> wikiSpaceMap = this.getCanVisitWikiSpace(param.getSpaceId());
|
||||
if (wikiSpaceMap.isEmpty()) {
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
param.setSpaceIds(new ArrayList<>(wikiSpaceMap.keySet()));
|
||||
String keywords = param.getKeywords();
|
||||
if (StringUtils.isNotBlank(keywords)) {
|
||||
param.setKeywords("%" + keywords + "%");
|
||||
}
|
||||
// 分页查询
|
||||
List<SpaceNewsVo> spaceNewsVoList = wikiPageContentMapper.getNewsList(param);
|
||||
if (spaceNewsVoList == null || spaceNewsVoList.isEmpty()) {
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
spaceNewsVoList.forEach(val -> {
|
||||
val.setSpaceName(wikiSpaceMap.get(val.getSpaceId()).getName());
|
||||
String preview = val.getPreviewContent();
|
||||
if (preview != null) {
|
||||
if (preview.length() > 200) {
|
||||
preview = preview.substring(0, 200);
|
||||
}
|
||||
if (keywords != null) {
|
||||
preview = StringUtils.replaceIgnoreCase(preview, keywords, "<span style=\"color:red\">" + keywords + "</span>");
|
||||
}
|
||||
}
|
||||
val.setPreviewContent(preview);
|
||||
String pageTitle = val.getPageTitle();
|
||||
if (pageTitle != null && keywords != null) {
|
||||
pageTitle = StringUtils.replaceIgnoreCase(pageTitle, keywords, "<span style=\"color:red\">" + keywords + "</span>");
|
||||
}
|
||||
val.setPageTitle(pageTitle);
|
||||
});
|
||||
return DocResponseJson.ok(spaceNewsVoList);
|
||||
}
|
||||
@PostMapping("/news")
|
||||
public ResponseJson<Object> news(SearchByEsParam param) {
|
||||
// 空间不是自己的
|
||||
Map<Long, WikiSpace> wikiSpaceMap = this.getCanVisitWikiSpace(param.getSpaceId());
|
||||
if (wikiSpaceMap.isEmpty()) {
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
param.setSpaceIds(new ArrayList<>(wikiSpaceMap.keySet()));
|
||||
String keywords = param.getKeywords();
|
||||
if (StringUtils.isNotBlank(keywords)) {
|
||||
param.setKeywords("%" + keywords + "%");
|
||||
}
|
||||
// 分页查询
|
||||
List<SpaceNewsVo> spaceNewsVoList = wikiPageContentMapper.getNewsList(param);
|
||||
if (spaceNewsVoList == null || spaceNewsVoList.isEmpty()) {
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
spaceNewsVoList.forEach(val -> {
|
||||
val.setSpaceName(wikiSpaceMap.get(val.getSpaceId()).getName());
|
||||
String preview = val.getPreviewContent();
|
||||
if (preview != null) {
|
||||
if (preview.length() > 200) {
|
||||
preview = preview.substring(0, 200);
|
||||
}
|
||||
if (keywords != null) {
|
||||
preview = StringUtils.replaceIgnoreCase(preview, keywords, "<span style=\"color:red\">" + keywords + "</span>");
|
||||
}
|
||||
}
|
||||
val.setPreviewContent(preview);
|
||||
String pageTitle = val.getPageTitle();
|
||||
if (pageTitle != null && keywords != null) {
|
||||
pageTitle = StringUtils.replaceIgnoreCase(pageTitle, keywords, "<span style=\"color:red\">" + keywords + "</span>");
|
||||
}
|
||||
val.setPageTitle(pageTitle);
|
||||
});
|
||||
return DocResponseJson.ok(spaceNewsVoList);
|
||||
}
|
||||
|
||||
private Map<Long, WikiSpace> getCanVisitWikiSpace(Long spaceId) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
List<WikiSpace> spaceList;
|
||||
// 空间不是自己的
|
||||
if (spaceId == null || spaceId <= 0) {
|
||||
QueryWrapper<WikiSpace> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("del_flag", 0);
|
||||
queryWrapper.ne("type", SpaceType.privateSpace);
|
||||
spaceList = wikiSpaceService.list(queryWrapper);
|
||||
} else {
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(spaceId);
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
spaceList = Collections.singletonList(wikiSpaceSel);
|
||||
}
|
||||
return spaceList.stream().collect(Collectors.toMap(WikiSpace::getId, val -> val));
|
||||
}
|
||||
private Map<Long, WikiSpace> getCanVisitWikiSpace(Long spaceId) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
List<WikiSpace> spaceList;
|
||||
// 空间不是自己的
|
||||
if (spaceId == null || spaceId <= 0) {
|
||||
QueryWrapper<WikiSpace> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("del_flag", 0);
|
||||
queryWrapper.ne("type", SpaceType.privateSpace);
|
||||
spaceList = wikiSpaceService.list(queryWrapper);
|
||||
} else {
|
||||
WikiSpace wikiSpaceSel = wikiSpaceService.getById(spaceId);
|
||||
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
spaceList = Collections.singletonList(wikiSpaceSel);
|
||||
}
|
||||
return spaceList.stream().collect(Collectors.toMap(WikiSpace::getId, val -> val));
|
||||
}
|
||||
|
||||
private void setChildren(Map<Long, List<WikiPageVo>> listMap, List<WikiPageVo> nodePageList, String path) {
|
||||
if (nodePageList == null || listMap == null) {
|
||||
return;
|
||||
}
|
||||
for (WikiPageVo page : nodePageList) {
|
||||
String nowPath = path + "/" + page.getName();
|
||||
page.setPath(nowPath);
|
||||
List<WikiPageVo> wikiPageVos = listMap.get(page.getId());
|
||||
if (CollectionUtils.isNotEmpty(wikiPageVos)) {
|
||||
wikiPageVos = wikiPageVos.stream().sorted(Comparator.comparingInt(WikiPageVo::getSeqNo)).collect(Collectors.toList());
|
||||
page.setChildren(wikiPageVos);
|
||||
this.setChildren(listMap, wikiPageVos, nowPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
private void setChildren(Map<Long, List<WikiPageVo>> listMap, List<WikiPageVo> nodePageList, String path) {
|
||||
if (nodePageList == null || listMap == null) {
|
||||
return;
|
||||
}
|
||||
for (WikiPageVo page : nodePageList) {
|
||||
String nowPath = path + "/" + page.getName();
|
||||
page.setPath(nowPath);
|
||||
List<WikiPageVo> wikiPageVos = listMap.get(page.getId());
|
||||
if (CollectionUtils.isNotEmpty(wikiPageVos)) {
|
||||
wikiPageVos = wikiPageVos.stream().sorted(Comparator.comparingInt(WikiPageVo::getSeqNo)).collect(Collectors.toList());
|
||||
page.setChildren(wikiPageVos);
|
||||
this.setChildren(listMap, wikiPageVos, nowPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,156 @@
|
||||
package com.zyplayer.doc.wiki.controller;
|
||||
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.zyplayer.doc.core.annotation.AuthMan;
|
||||
import com.zyplayer.doc.core.exception.ConfirmException;
|
||||
import com.zyplayer.doc.core.json.DocResponseJson;
|
||||
import com.zyplayer.doc.core.json.ResponseJson;
|
||||
import com.zyplayer.doc.data.config.security.DocUserDetails;
|
||||
import com.zyplayer.doc.data.config.security.DocUserUtil;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.*;
|
||||
import com.zyplayer.doc.data.repository.manage.mapper.WikiPageContentMapper;
|
||||
import com.zyplayer.doc.data.repository.manage.mapper.WikiPageMapper;
|
||||
import com.zyplayer.doc.data.repository.manage.param.SearchByEsParam;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.SpaceNewsVo;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.WikiPageTemplateInfoVo;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.WikiTemplateTagVo;
|
||||
import com.zyplayer.doc.data.repository.support.consts.DocSysType;
|
||||
import com.zyplayer.doc.data.repository.support.consts.UserMsgType;
|
||||
import com.zyplayer.doc.data.service.manage.*;
|
||||
import com.zyplayer.doc.data.utils.CachePrefix;
|
||||
import com.zyplayer.doc.data.utils.CacheUtil;
|
||||
import com.zyplayer.doc.wiki.controller.vo.WikiPageContentVo;
|
||||
import com.zyplayer.doc.wiki.controller.vo.WikiPageVo;
|
||||
import com.zyplayer.doc.wiki.framework.consts.SpaceType;
|
||||
import com.zyplayer.doc.wiki.service.WikiPageUploadService;
|
||||
import com.zyplayer.doc.wiki.service.common.WikiPageAuthService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.docx4j.XmlUtils;
|
||||
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
|
||||
import org.docx4j.openpackaging.parts.WordprocessingML.AltChunkType;
|
||||
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.servlet.ServletOutputStream;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.File;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 文档控制器
|
||||
*
|
||||
* @author 暮光:城中城
|
||||
* @author Sh1yu
|
||||
* @since 2019年2月17日
|
||||
*/
|
||||
@Slf4j
|
||||
@AuthMan
|
||||
@RestController
|
||||
@RequestMapping("/zyplayer-doc-wiki/template")
|
||||
@RequiredArgsConstructor
|
||||
public class WikiPageTemplateController {
|
||||
|
||||
private final WikiPageService wikiPageService;
|
||||
private final WikiPageContentService wikiPageContentService;
|
||||
private final WikiPageUploadService wikipageUploadService;
|
||||
private final WikiPageTemplateService wikiPageTemplateService;
|
||||
private final WikiPageFileService wikiPageFileService;
|
||||
|
||||
|
||||
@PostMapping("/add")
|
||||
public ResponseJson<Object> addTemplate(WikiPageTemplate wikiPageTemplate) {
|
||||
WikiPageTemplate exist = wikiPageTemplateService.getWikiPageTemplateBySpaceAndPage(wikiPageTemplate.getSpaceId(), wikiPageTemplate.getPageId());
|
||||
if (null == exist) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
if (wikiPageTemplate.getTagName().equals("")) {
|
||||
wikiPageTemplate.setTagName("无标签");
|
||||
}
|
||||
wikiPageTemplate.setCreated(new Date());
|
||||
wikiPageTemplate.setCreateUser(currentUser.getUsername());
|
||||
wikiPageTemplate.setCreateUserId(currentUser.getUserId());
|
||||
wikiPageTemplateService.save(wikiPageTemplate);
|
||||
} else {
|
||||
exist.setTagName(wikiPageTemplate.getTagName());
|
||||
exist.setShareStatus(wikiPageTemplate.getShareStatus());
|
||||
wikiPageTemplateService.updateById(exist);
|
||||
}
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/allTags")
|
||||
public ResponseJson<Object> allTags(boolean open) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
|
||||
List<WikiTemplateTagVo> allTags = wikiPageTemplateService.getAllTags(currentUser.getUserId(),open);
|
||||
return DocResponseJson.ok(allTags);
|
||||
}
|
||||
|
||||
@PostMapping("/filterAll")
|
||||
public ResponseJson<Object> filterAll(String name, boolean open, HttpServletRequest request, Long pageNum) {
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
List tagList = new ArrayList();
|
||||
Set<Map.Entry<String, String[]>> entries = request.getParameterMap().entrySet();
|
||||
entries.forEach(param -> {
|
||||
if (param.getKey().contains("].tagName") && !"".equals(param.getValue()[0])) {
|
||||
tagList.add(param.getValue()[0]);
|
||||
}
|
||||
});
|
||||
if (tagList.size() < 1) {
|
||||
tagList.add("");
|
||||
}
|
||||
List<WikiPageTemplateInfoVo> wikiPageTemplateInfoVos = wikiPageTemplateService.filterAll(currentUser.getUserId(), name, open, tagList, pageNum);
|
||||
Long total = wikiPageTemplateService.total(currentUser.getUserId(), name, open, tagList);
|
||||
DocResponseJson<Object> ok = DocResponseJson.ok(wikiPageTemplateInfoVos);
|
||||
ok.setTotal(total);
|
||||
return ok;
|
||||
}
|
||||
|
||||
@PostMapping("/use")
|
||||
public ResponseJson<Object> use(Long spaceId, Long parentId, String templateId) {
|
||||
WikiPageTemplate template = wikiPageTemplateService.getById(templateId);
|
||||
WikiPage wikiTemplatePage = wikiPageService.getById(template.getPageId());
|
||||
WikiPage wikiPage = new WikiPage();
|
||||
wikiPage.setParentId(parentId);
|
||||
wikiPage.setSpaceId(spaceId);
|
||||
wikiPage.setEditorType(wikiTemplatePage.getEditorType());
|
||||
wikiPage.setName(wikiTemplatePage.getName() + "副本");
|
||||
QueryWrapper queryWrapper = new QueryWrapper();
|
||||
queryWrapper.eq("page_id", wikiTemplatePage.getId());
|
||||
WikiPageContent pageContent = wikiPageContentService.getOne(queryWrapper);
|
||||
UpdateWrapper<WikiPageFile> wrapperFile = new UpdateWrapper<>();
|
||||
wrapperFile.eq("page_id", wikiTemplatePage.getId());
|
||||
List<WikiPageFile> pageFiles = wikiPageFileService.list(wrapperFile);
|
||||
String content = pageContent.getContent();
|
||||
for (WikiPageFile pageFile : pageFiles) {
|
||||
pageFile.setId(null);
|
||||
String uuid = IdUtil.simpleUUID();
|
||||
content.replace(pageFile.getUuid(),uuid);
|
||||
pageFile.setUuid(uuid);
|
||||
}
|
||||
Object info = wikipageUploadService.update(wikiPage, content, content);
|
||||
if (null != info) {
|
||||
if (info instanceof WikiPage) {
|
||||
for (WikiPageFile pageFile : pageFiles) {
|
||||
pageFile.setPageId(((WikiPage)info).getId());
|
||||
wikiPageFileService.save(pageFile);
|
||||
}
|
||||
return DocResponseJson.ok(info);
|
||||
}
|
||||
DocResponseJson.warn((String) info);
|
||||
}
|
||||
return DocResponseJson.ok("状态异常");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.zyplayer.doc.wiki.controller.vo;
|
||||
|
||||
import com.zyplayer.doc.data.repository.manage.entity.WikiPage;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.WikiPageTemplateInfoVo;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
@@ -102,9 +103,27 @@ public class WikiPageVo {
|
||||
*/
|
||||
private Integer editorType;
|
||||
|
||||
/**
|
||||
* 路径
|
||||
*/
|
||||
private String path;
|
||||
|
||||
/**
|
||||
* 子节点
|
||||
*/
|
||||
private List<WikiPageVo> children;
|
||||
|
||||
/**
|
||||
* 模板类型 0:个人模板 1:共享模板
|
||||
*/
|
||||
private Integer shareStatus;
|
||||
|
||||
/**
|
||||
* 模板标签
|
||||
*/
|
||||
private String tags;
|
||||
|
||||
|
||||
public WikiPageVo(WikiPage wikiPage) {
|
||||
this.id = wikiPage.getId();
|
||||
this.spaceId = wikiPage.getSpaceId();
|
||||
@@ -125,4 +144,27 @@ public class WikiPageVo {
|
||||
this.editorType = wikiPage.getEditorType();
|
||||
}
|
||||
|
||||
public WikiPageVo(WikiPageTemplateInfoVo wikiPageTemplate) {
|
||||
this.id = wikiPageTemplate.getId();
|
||||
this.spaceId = wikiPageTemplate.getSpaceId();
|
||||
this.name = wikiPageTemplate.getName();
|
||||
this.parentId = wikiPageTemplate.getParentId();
|
||||
this.nodeType = wikiPageTemplate.getNodeType();
|
||||
this.zanNum = wikiPageTemplate.getZanNum();
|
||||
this.editType = wikiPageTemplate.getEditType();
|
||||
this.createUserId = wikiPageTemplate.getCreateUserId();
|
||||
this.createUserName = wikiPageTemplate.getCreateUserName();
|
||||
this.createTime = wikiPageTemplate.getCreateTime();
|
||||
this.updateUserId = wikiPageTemplate.getUpdateUserId();
|
||||
this.updateUserName = wikiPageTemplate.getUpdateUserName();
|
||||
this.updateTime = wikiPageTemplate.getUpdateTime();
|
||||
this.delFlag = wikiPageTemplate.getDelFlag();
|
||||
this.viewNum = wikiPageTemplate.getViewNum();
|
||||
this.seqNo = wikiPageTemplate.getSeqNo();
|
||||
this.editorType = wikiPageTemplate.getEditorType();
|
||||
this.tags = wikiPageTemplate.getTags();
|
||||
this.shareStatus = wikiPageTemplate.getShareStatus();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
25
zyplayer-doc-wiki/src/main/resources/dist/assets/main-6c7d4034.js
vendored
Normal file
25
zyplayer-doc-wiki/src/main/resources/dist/assets/main-6c7d4034.js
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
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" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>WIKI文档管理系统</title>
|
||||
<script type="module" crossorigin src="./assets/main-38b62da0.js"></script>
|
||||
<script type="module" crossorigin src="./assets/main-6c7d4034.js"></script>
|
||||
<link rel="modulepreload" crossorigin href="./assets/highlight.js-1b0b64aa.js">
|
||||
<link rel="modulepreload" crossorigin href="./assets/vue-650a4d10.js">
|
||||
<link rel="modulepreload" crossorigin href="./assets/vendor-312b3cf5.js">
|
||||
<link rel="modulepreload" crossorigin href="./assets/vant-6dbc81d6.js">
|
||||
<link rel="modulepreload" crossorigin href="./assets/vendor-01cc9007.js">
|
||||
<link rel="modulepreload" crossorigin href="./assets/vant-9a21188e.js">
|
||||
<link rel="modulepreload" crossorigin href="./assets/wangeditor-564d5916.js">
|
||||
<link rel="stylesheet" href="./assets/style.13e54fdd.css">
|
||||
<link rel="stylesheet" href="./assets/style.355d9310.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
|
||||
Reference in New Issue
Block a user