界面优化,markdown渲染优化

This commit is contained in:
sswiki
2024-12-09 22:14:51 +08:00
parent 4ad463845e
commit d6bcfc5492
68 changed files with 1885 additions and 1203 deletions

View File

@@ -9,7 +9,7 @@
</template>
<script setup>
import {onBeforeUnmount, ref, h, shallowRef, nextTick, onMounted, watch, defineProps, defineExpose} from 'vue'
import {onBeforeUnmount, ref, h, shallowRef, nextTick, onMounted, watch, defineProps, defineExpose} from 'vue';
import {showImagePreview} from 'vant';
import {useStoreDisplay} from "@/store/wikiDisplay";

View File

@@ -36,7 +36,7 @@
<a-tag color="warning" style="margin-inline-end: 4px;padding-inline: 4px;">{{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;margin-right: 5px">
<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>
<!--操作-->
@@ -119,14 +119,14 @@ import {
} from '@icon-park/vue-next'
import {ref, onMounted,} from 'vue';
import {useRouter, useRoute} from "vue-router";
import {ElMessageBox, ElMessage} from 'element-plus'
import pageApi from '../../assets/api/page'
import CreateSpace from '../space/CreateSpace.vue'
import TemplateManage from '../template/TemplateManage.vue'
import AddMenu from '../leftSideBar/AddMenu.vue'
import IconDocument from '@/components/base/IconDocument.vue'
import LeftSidebarCli from '../leftSideBar/LeftSidebarCli.vue'
import {useStoreDisplay} from '@/store/wikiDisplay.js'
import {ElMessageBox, ElMessage} from 'element-plus';
import pageApi from '../../assets/api/page';
import CreateSpace from '../space/CreateSpace.vue';
import TemplateManage from '../template/TemplateManage.vue';
import AddMenu from '../leftSideBar/AddMenu.vue';
import IconDocument from '@/components/base/IconDocument.vue';
import LeftSidebarCli from '../leftSideBar/LeftSidebarCli.vue';
import {useStoreDisplay} from '@/store/wikiDisplay.js';
import {useStorePageData} from "@/store/pageData";
import {DownOutlined, BuildOutlined, BlockOutlined} from '@ant-design/icons-vue';
import {useStoreSpaceData} from "@/store/spaceData";
@@ -151,21 +151,21 @@ let optionPageId = ref('');
let visibleMoveMenu = ref(false);
let onlyMoveMode = ref(false);
let aModalWaiting = ref(false);
let templateManageRef = ref(null)
let templateManageRef = ref(null);
onMounted(() => {
init()
})
init();
});
const init = () => {
loadSpaceList()
loadSpaceList();
}
const openTemplateCreate = (exsit) => {
templateManageRef.value.showTemplateCreate(exsit)
templateManageRef.value.showTemplateCreate(exsit);
}
const createWikiByTemplate = () => {
templateManageRef.value.showTemplateManage()
templateManageRef.value.showTemplateManage();
}
const filterShareStatus = (data) => {
@@ -176,52 +176,52 @@ const filterShareStatus = (data) => {
}
const openMoveMenu = (onlyMove) => {
onlyMoveMode.value = onlyMove
visibleMoveMenu.value = true
moveToPageId.value = storePage.choosePageId
moveToSpaceId.value = storeSpace.chooseSpaceId
moveToWikiPageList.value = storePage.wikiPageList
onlyMoveMode.value = onlyMove;
visibleMoveMenu.value = true;
moveToPageId.value = storePage.choosePageId;
moveToSpaceId.value = storeSpace.chooseSpaceId;
moveToWikiPageList.value = storePage.wikiPageList;
}
const handleOk = (onlyMove) => {
aModalWaiting.value = true
aModalWaiting.value = true;
if (onlyMoveMode.value) {
pageApi.movePage({
"id": storePage.optionPageId,
"spaceId": storeSpace.chooseSpaceId,
"moveToPageId": moveToPageId.value,
"moveToSpaceId": moveToSpaceId.value
})
});
.then((json) => {
doGetPageList(null)
ElMessage.success('迁移成功')
handleCancel()
aModalWaiting.value = false
doGetPageList(null);
ElMessage.success('迁移成功');
handleCancel();
aModalWaiting.value = false;
}).catch((e) => {
aModalWaiting.value = false
})
return
aModalWaiting.value = false;
});
return;
}
pageApi.copyPage({
"id": storePage.optionPageId,
"spaceId": storeSpace.chooseSpaceId,
"moveToPageId": moveToPageId.value,
"moveToSpaceId": moveToSpaceId.value
})
});
.then((json) => {
doGetPageList(null)
ElMessage.success('复制成功')
handleCancel()
aModalWaiting.value = false
doGetPageList(null);
ElMessage.success('复制成功');
handleCancel();
aModalWaiting.value = false;
}).catch((e) => {
aModalWaiting.value = false
})
return
aModalWaiting.value = false;
});
return;
}
const handleCancel = () => {
visibleMoveMenu.value = false
moveToPageId.value = 0
moveToSpaceId.value = 0
moveToWikiPageList.value = []
visibleMoveMenu.value = false;
moveToPageId.value = 0;
moveToSpaceId.value = 0;
moveToWikiPageList.value = [];
}
@@ -237,53 +237,53 @@ const deleteWikiPage = (share) => {
}).then(() => {
let param = {pageId: optionPageId.value};
pageApi.pageDelete(param).then(() => {
ElMessage.success('已删除')
doGetPageList(null)
ElMessage.success('已删除');
doGetPageList(null);
});
}).catch(() => {
});
}
const choosePageIdFunc = (id) => {
storePage.optionPageId = id
storePage.optionPageId = id;
}
const setNowPageId = (id, readOnly) => {
if (readOnly) {
moveToPageId.value = id
return
moveToPageId.value = id;
return;
}
storePage.choosePageId = id
storePage.choosePageId = id;
}
const rename = (node, data) => {
data.renaming = true
data.renaming = true;
}
const doRename = (node, data) => {
pageApi.renamePage({"id": data.id, "name": data.name})
pageApi.renamePage({"id": data.id, "name": data.name});
.then((json) => {
doGetPageList(null)
ElMessage.success('重命名成功')
data.renaming = false
})
doGetPageList(null);
ElMessage.success('重命名成功');
data.renaming = false;
});
}
const changeNodeOptionStatus = (param) => {
optionPageId.value = param.id
optionPageId.value = param.id;
}
let createSpaceRef = ref();
const spaceChangeEvents = (data, readonly) => {
storePage.pageInfo = {}
storePage.pageInfo = {};
if (readonly) {
moveToSpaceId.value = data
setNowPageId(0, readonly)
moveToSpaceId.value = data;
setNowPageId(0, readonly);
let param = {spaceId: moveToSpaceId.value}
pageApi.pageList(param).then((json) => {
moveToWikiPageList.value = json.data || []
})
return
moveToWikiPageList.value = json.data || [];
});
return;
}
if (data === 0) {
// 新建空间
@@ -327,16 +327,16 @@ const loadSpaceList = (spaceId) => {
console.log(e);
}
}
})
});
}
const doGetPageList = (parentId, node) => {
let param = {spaceId: storeSpace.chooseSpaceId}
pageApi.pageList(param).then((json) => {
storePage.wikiPageList = json.data || []
})
storePage.wikiPageList = json.data || [];
});
}
defineExpose({init})
defineExpose({init});
</script>
<style lang="scss">

View File

@@ -1,5 +1,5 @@
<template>
<div style="height: 100%">
<div style="height: 100%;">
<el-container>
<el-aside width="300px" style="background-color: #fafafa" :style="{ width: rightAsideWidth + 'px' }" v-show="leftCollapse">
<div class="logo">{{ nowSpaceShow.name }}</div>
@@ -57,11 +57,11 @@
<script setup>
import {onBeforeUnmount, ref, onMounted, watch, defineProps, nextTick, defineEmits, defineExpose, computed} from 'vue';
import {onBeforeRouteUpdate, useRouter, useRoute} from "vue-router";
import {ElMessageBox, ElMessage} from 'element-plus'
import {FolderClose, FolderOpen, Word as IconParkWord,} from '@icon-park/vue-next'
import {Search as ElIconSearch,} from '@element-plus/icons-vue'
import pageApi from '../../assets/api/page'
import RightResize from '../../views/page/aside/RightResize.vue'
import {ElMessageBox, ElMessage} from 'element-plus';
import {FolderClose, FolderOpen, Word as IconParkWord,} from '@icon-park/vue-next';
import {Search as ElIconSearch,} from '@element-plus/icons-vue';
import pageApi from '../../assets/api/page';
import RightResize from '../../views/page/aside/RightResize.vue';
import IconDocument from "@/components/base/IconDocument.vue";
let leftCollapse = ref(true);
@@ -81,40 +81,40 @@ let route = useRoute();
let router = useRouter();
onMounted(() => {
spaceUuid.value = route.query.space || ''
getSpaceInfo()
doGetPageList(null)
getSpaceInfo();
doGetPageList(null);
});
const filterPageNode = (value, data) => {
if (!value || !data.name) return true
if (!value || !data.name) return true;
// issues:I2CG72 忽略大小写
let name = data.name.toLowerCase()
let name = data.name.toLowerCase();
return name.indexOf(value.toLowerCase()) !== -1
}
const handleNodeClick = (data) => {
if (nowPageId.value == data.id) {
return
return;
}
// console.log('点击节点:', data)
nowPageId.value = data.id
// console.log('点击节点:', data);
nowPageId.value = data.id;
router.push({
path: '/page/share/view',
query: {pageId: data.id, space: spaceUuid.value}
})
});
}
let wikiPageTreeRef = ref();
const searchByKeywords = () => {
wikiPageTreeRef.value.filter(searchKeywords.value)
wikiPageTreeRef.value.filter(searchKeywords.value);
}
const doGetPageList = () => {
pageApi.openPageList({space: spaceUuid.value}).then((json) => {
wikiPageList.value = json.data || []
nowPageId.value = ''
})
wikiPageList.value = json.data || [];
nowPageId.value = '';
});
}
const getSpaceInfo = () => {
pageApi.openSpaceInfo({space: spaceUuid.value}).then((json) => {
nowSpaceShow.value = json.data
})
nowSpaceShow.value = json.data;
});
}
</script>

View File

@@ -16,9 +16,9 @@
<script setup>
import {onBeforeUnmount, ref, onMounted, watch, defineProps, nextTick, defineEmits, defineExpose, computed} from 'vue';
import {onBeforeRouteUpdate, useRouter, useRoute} from "vue-router";
import {ElMessageBox, ElMessage} from 'element-plus'
import pageApi from '../../assets/api/page'
import PageTree from '../shareLayout/PageTree.vue'
import {ElMessageBox, ElMessage} from 'element-plus';
import pageApi from '../../assets/api/page';
import PageTree from '../shareLayout/PageTree.vue';
import 'vant/es/icon/style/index';
import 'vant/es/popup/style/index';
import 'vant/es/cell/style/index';
@@ -42,35 +42,35 @@ let route = useRoute();
let router = useRouter();
onMounted(() => {
spaceUuid.value = route.query.space || ''
getSpaceInfo()
doGetPageList(null)
getSpaceInfo();
doGetPageList(null);
});
const filterPageNode = (value, data) => {
if (!value) return true
if (!value) return true;
return data.name.indexOf(value) !== -1
}
const pageSelectChange = (value) => {
// console.log('页面修改:' + value)
popupShow.value = false
// console.log('页面修改:' + value);
popupShow.value = false;
router.replace({
path: '/page/share/mobile/view',
query: {pageId: value, space: spaceUuid.value}
})
});
}
const popupShowChange = (value) => {
popupShow.value = value
// console.log(pageSelect.value)
popupShow.value = value;
// console.log(pageSelect.value);
}
const doGetPageList = () => {
pageApi.openPageList({space: spaceUuid.value}).then((json) => {
wikiPageList.value = json.data || []
nowPageId.value = ''
})
wikiPageList.value = json.data || [];
nowPageId.value = '';
});
}
const getSpaceInfo = () => {
pageApi.openSpaceInfo({space: spaceUuid.value}).then((json) => {
nowSpaceShow.value = json.data
})
nowSpaceShow.value = json.data;
});
}
</script>

View File

@@ -13,12 +13,12 @@
<el-link v-if="notReadMessageNum > 0" :icon="ElIconCheck" type="primary" @click="readAllUserMessage">本页标记已读</el-link>
</div>
<div class="header-user-message">
<el-table :data="userMessageList" stripe max-height="400" style="width: 100%; margin-bottom: 5px">
<el-table :data="userMessageList" stripe max-height="400" style="width: 100%; margin-bottom: 5px;">
<el-table-column label="操作时间" prop="creationTime" width="150px"></el-table-column>
<el-table-column label="内容" prop="msgContent" show-overflow-tooltip></el-table-column>
<el-table-column width="60px">
<template v-slot="scope">
<el-badge :is-dot="scope.row.msgStatus === 0" style="line-height: 10px; padding-right: 5px">
<el-badge :is-dot="scope.row.msgStatus === 0" style="line-height: 10px; padding-right: 5px;">
<el-link type="primary" @click="showUserMessage(scope.row)">查看</el-link>
</el-badge>
</template>
@@ -51,10 +51,10 @@ import {
import {BellOutlined, CheckOutlined} from '@ant-design/icons-vue';
import {onBeforeUnmount, toRefs, ref, reactive, onMounted, watch, h, defineProps, nextTick, defineEmits, defineExpose, computed} from 'vue';
import {onBeforeRouteUpdate, useRouter, useRoute} from "vue-router";
import {ElMessageBox, ElMessage} from 'element-plus'
import {ElMessageBox, ElMessage} from 'element-plus';
import pageApi from "@/assets/api/page";
import userApi from "@/assets/api/user";
import {useStoreDisplay} from '@/store/wikiDisplay.js'
import {useStoreDisplay} from '@/store/wikiDisplay.js';
let route = useRoute();
let router = useRouter();
@@ -88,28 +88,28 @@ const loadUserMessageList = () => {
const showUserMessage = (row) => {
if (row.msgStatus === 0) {
userApi.readUserMessage({ids: row.id}).then(() => {
loadUserMessageList()
})
loadUserMessageList();
});
}
if (row.msgType >= 2 && row.msgType <= 14) {
router.push({path: '/page/show', query: {pageId: row.dataId}})
userMessagePopVisible.value = false
router.push({path: '/page/show', query: {pageId: row.dataId}});
userMessagePopVisible.value = false;
}
}
const readAllUserMessage = () => {
let msgIds = []
let msgIds = [];
userMessageList.value.filter((item) => item.msgStatus === 0).forEach((item) => {
msgIds.push(item.id)
})
if (msgIds.length <= 0) return
msgIds.push(item.id);
});
if (msgIds.length <= 0) return;
userApi.readUserMessage({ids: msgIds.join(',')}).then(() => {
ElMessage.success('标记成功')
loadUserMessageList()
})
ElMessage.success('标记成功');
loadUserMessageList();
});
}
const handleCurrentChange = (val) => {
userMsgParam.value.pageNum = val
loadUserMessageList()
userMsgParam.value.pageNum = val;
loadUserMessageList();
}
</script>

View File

@@ -39,15 +39,15 @@ import {
} from '@icon-park/vue-next'
import {ref, defineProps, defineEmits} from 'vue';
import {useRouter} from "vue-router";
import {ElMessage} from 'element-plus'
import pageApi from '../../assets/api/page'
import {ElMessage} from 'element-plus';
import pageApi from '../../assets/api/page';
import axios from "axios";
import IconDocument from '@/components/base/IconDocument.vue'
import IconDocument from '@/components/base/IconDocument.vue';
let router = useRouter();
let uploadFileUrl = ref(import.meta.env.VITE_APP_BASE_API + '/zyplayer-doc-wiki/page/file/import/upload');
let fileList = ref([]);
let emit = defineEmits(['choosePageIdFunc', 'doGetPageList', 'createWikiByTemplate'])
let emit = defineEmits(['choosePageIdFunc', 'doGetPageList', 'createWikiByTemplate']);
let props = defineProps({
choiceSpace: Number,
choosePageId: Number,
@@ -86,10 +86,10 @@ const doAUpload = (data) => {
});
}
const choosePageIdFunc = (id) => {
emit('choosePageIdFunc', id)
emit('choosePageIdFunc', id);
}
const createWikiByTemplate = (id) => {
emit('createWikiByTemplate', id)
emit('createWikiByTemplate', id);
}
const createWiki = (editorType, parentId) => {
if (props.choiceSpace > 0) {
@@ -105,17 +105,17 @@ const createWiki = (editorType, parentId) => {
content: '',
preview: ''
}).then((json) => {
emit('doGetPageList', null)
ElMessage.success('创建成功')
emit('doGetPageList', null);
ElMessage.success('创建成功');
if (editorType !== 0) {
router.push({
path: '/page/edit',
query: {parentId: props.nowPageId.value, pageId: json.data.id}
})
});
}
})
});
} else {
ElMessage.warning('请先选择或创建空间')
ElMessage.warning('请先选择或创建空间');
}
}
</script>

View File

@@ -1,7 +1,7 @@
<template>
<div style="padding: 10px;height: 100%;box-sizing: border-box;background: #fafafa;">
<div style="margin-bottom: 5px">
<el-select :model-value="choiceSpace" filterable placeholder="选择空间" @change="spaceChangeEvents" style="width: 100%">
<div style="margin-bottom: 5px;">
<el-select :model-value="choiceSpace" filterable placeholder="选择空间" @change="spaceChangeEvents" style="width: 100%;">
<el-option-group label="" v-if="!props.readOnly">
<el-option :key="-1" label="空间管理" :value="-1"></el-option>
</el-option-group>
@@ -60,11 +60,11 @@
<script setup>
import {ref, defineProps, defineEmits, defineExpose} from 'vue';
import {useRouter, useRoute} from "vue-router";
import pageApi from '../../assets/api/page'
import pageApi from '../../assets/api/page';
import {useStoreDisplay} from "@/store/wikiDisplay";
import {useStorePageData} from "@/store/pageData";
let emit = defineEmits(['doGetPageList', 'spaceChangeEvents', 'setNowPageId'])
let emit = defineEmits(['doGetPageList', 'spaceChangeEvents', 'setNowPageId']);
let searchKeywords = ref('');
let descriptorForTree = ref("点击收起目录");
let explan = ref(false);
@@ -82,13 +82,13 @@ let props = defineProps({
nowPageId: Number,
choiceSpace: Number,
readOnly: Boolean
})
});
const assisSetCurrentKey = () => {
emit('setNowPageId', route.query.pageId, props.readOnly)
emit('setNowPageId', route.query.pageId, props.readOnly);
if (props.nowPageId) {
wikiPageTreeRef.value.setCurrentKey(nowPageId.value)
wikiPageTreeRef.value.setCurrentKey(nowPageId.value);
}
}
@@ -98,35 +98,35 @@ const changeWikiPageExpandedKeys = (pageId) => {
}
const spaceChangeEvents = (data) => {
emit('spaceChangeEvents', data, props.readOnly)
emit('spaceChangeEvents', data, props.readOnly);
}
const doSearchByKeywords = (queryString, callback) => {
if (!queryString || !queryString.trim()) {
callback([])
return
callback([]);
return;
}
pageApi
.pageNews({spaceId: props.choiceSpace, keywords: queryString})
.pageNews({spaceId: props.choiceSpace, keywords: queryString});
.then((json) => {
let spacePageNews = json.data || []
callback(spacePageNews)
})
let spacePageNews = json.data || [];
callback(spacePageNews);
});
}
const handleSearchKeywordsSelect = (item) => {
searchKeywords.value = ''
router.push({path: '/page/show', query: {pageId: item.pageId}})
searchKeywords.value = '';
router.push({path: '/page/show', query: {pageId: item.pageId}});
}
const changeDropWownStatus = () => {
if (explan.value) {
explanClass.value = "el-tree"
descriptorForTree.value = "点击收起目录"
explan.value = false
explan.value = false;
} else {
explanClass.value = "hidTree"
descriptorForTree.value = "点击展开目录"
explan.value = true
explan.value = true;
}
}
@@ -137,37 +137,37 @@ const filterPageNode = (value, data) => {
return name.indexOf(value.toLowerCase()) !== -1;
}
const searchByKeywords = () => {
wikiPageTreeRef.value.filter(searchKeywords.value)
wikiPageTreeRef.value.filter(searchKeywords.value);
}
let storePage = useStorePageData();
const handleNodeClick = (data) => {
//console.log('点击节点:', data, props.nowPageId)
storeDisplay.showHeader = true
emit('setNowPageId', data.id, props.readOnly)
//console.log('点击节点:', data, props.nowPageId);
storeDisplay.showHeader = true;
emit('setNowPageId', data.id, props.readOnly);
if (props.readOnly) {
return
return;
}
if (data.editorType !== 0) {
router.push({path: '/page/show', query: {pageId: data.id}})
router.push({path: '/page/show', query: {pageId: data.id}});
}
}
const handlePageDrop = (draggingNode, dropNode, dropType, ev) => {
console.log('tree drop: ', draggingNode.data, dropNode.data, dropType)
console.log('tree drop: ', draggingNode.data, dropNode.data, dropType);
// 'prev'、'inner'、'next'
// before、after、inner
var param = {id: draggingNode.data.id, parentId: dropNode.data.parentId}
if (dropType == 'inner') {
param.parentId = dropNode.data.id
param.parentId = dropNode.data.id;
} else if (dropType == 'before') {
param.beforeSeq = dropNode.data.seqNo
param.beforeSeq = dropNode.data.seqNo;
} else if (dropType == 'after') {
param.afterSeq = dropNode.data.seqNo
param.afterSeq = dropNode.data.seqNo;
}
pageApi.pageChangeParent(param).then((res) => {
emit('doGetPageList', node.id, node)
})
emit('doGetPageList', node.id, node);
});
}
defineExpose({searchByKeywords})
defineExpose({searchByKeywords});
</script>

View File

@@ -13,18 +13,18 @@
<el-switch v-model="newSpaceForm.openDoc" inactive-text="需要登录" :inactive-value="0" active-text="开放访问" :active-value="1"></el-switch>
</el-form-item>
<el-form-item label="空间类型:">
<el-select v-model="newSpaceForm.type" filterable placeholder="选择类型" style="width: 100%">
<el-select v-model="newSpaceForm.type" filterable placeholder="选择类型" style="width: 100%;">
<el-option :key="1" label="公共空间" :value="1">
<span style="float: left">公共空间</span>
<span style="float: right; color: #8492a6; font-size: 13px">属于公共登录用户可访问编辑</span>
<span style="float: right; color: #8492a6; font-size: 13px;">属于公共登录用户可访问编辑</span>
</el-option>
<el-option :key="2" label="个人空间" :value="2">
<span style="float: left">个人空间</span>
<span style="float: right; color: #8492a6; font-size: 13px">属于个人所有登录用户可访问</span>
<span style="float: right; color: #8492a6; font-size: 13px;">属于个人所有登录用户可访问</span>
</el-option>
<el-option :key="3" label="隐私空间" :value="3">
<span style="float: left">隐私空间</span>
<span style="float: right; color: #8492a6; font-size: 13px">属于个人仅创建者可访问</span>
<span style="float: right; color: #8492a6; font-size: 13px;">属于个人仅创建者可访问</span>
</el-option>
</el-select>
</el-form-item>
@@ -41,8 +41,8 @@
<script setup>
import {onBeforeUnmount, ref, onMounted, watch, defineProps, nextTick, defineEmits, defineExpose, computed} from 'vue';
import {onBeforeRouteUpdate, useRouter, useRoute} from "vue-router";
import {ElMessageBox, ElMessage} from 'element-plus'
import pageApi from '../../assets/api/page'
import {ElMessageBox, ElMessage} from 'element-plus';
import pageApi from '../../assets/api/page';
let editSpaceId = ref('');
let newSpaceFormRules = ref({
@@ -64,7 +64,7 @@ let newSpaceForm = ref({
openDoc: 0,
uuid: '',
type: 1,
})
});
let newSpaceDialogVisible = ref(false);
let manageSpaceDialogVisible = ref(false);
let emit = defineEmits(['success']);
@@ -81,13 +81,13 @@ const show = (spaceId) => {
editSpaceId.value = spaceId || ''
if (!!editSpaceId.value) {
pageApi.spaceList({id: editSpaceId.value}).then((json) => {
let spaceList = json.data || []
let spaceList = json.data || [];
if (spaceList.length > 0) {
newSpaceForm.value = spaceList[0]
newSpaceForm.value = spaceList[0];
}
})
});
}
newSpaceDialogVisible.value = true
newSpaceDialogVisible.value = true;
}
let newSpaceFormRef = ref();
const onNewSpaceSubmit = () => {
@@ -102,15 +102,15 @@ const onNewSpaceSubmit = () => {
treeLazyLoad: newSpaceForm.value.treeLazyLoad,
}
pageApi.updateSpace(param).then((json) => {
ElMessage.success('创建成功')
newSpaceDialogVisible.value = false
emit('success', json.data.id)
})
ElMessage.success('创建成功');
newSpaceDialogVisible.value = false;
emit('success', json.data.id);
});
}
})
});
}
const onNewSpaceCancel = () => {
newSpaceDialogVisible.value = false
newSpaceDialogVisible.value = false;
}
defineExpose({show});
</script>

View File

@@ -90,38 +90,38 @@ import {
} 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'
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 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
exsit.value = exsited;
templateNewForm.value = {
pageId: props.pageId,
spaceId: props.spaceId,
tagName: '',
shareStatus: false
}
newTemplateDialogVisible.value = true
newTemplateDialogVisible.value = true;
}
const filterShareStatus = (data) => {
if (data === 1) {
@@ -131,33 +131,33 @@ const filterShareStatus = (data) => {
}
const onNewTemplateSubmit = () => {
pageApi.addTemplate(templateNewForm.value).then((json) => {
ElMessage.success('模板记录成功')
emit('doGetPageList', null)
})
newTemplateDialogVisible.value = false
ElMessage.success('模板记录成功');
emit('doGetPageList', null);
});
newTemplateDialogVisible.value = false;
}
const onNewTemplateCancel = () => {
newTemplateDialogVisible.value = false
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)
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()
templateChooseDialogVisible.value = true;
filterTags.value = [{show: true, tagName: ''}];
totalTemplate.value = 0;
nowTemplateNum.value = 1;
templateList.value = [];
filterByOpen();
}
const chooseTemplate = (item) => {
pageApi.useTemplate({
@@ -165,24 +165,24 @@ const chooseTemplate = (item) => {
parentId: props.pageId,
templateId: item.templateId
}).then((json) => {
templateChooseDialogVisible.value = false
emit('doGetPageList', null)
ElMessage.success('创建成功')
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
templateChooseDialogVisible.value = false;
router.push({
path: '/page/show',
query: {spaceId: item.spaceId, pageId: item.id}
})
});
}
const pageUpDown = () => {
templateList.value = []
templateList.value = [];
pageApi.getTemplate({
name: name.value,
open: open.value,
@@ -190,68 +190,68 @@ const pageUpDown = () => {
pageNum: nowTemplateNum.value
}).then((json) => {
totalTemplate.value = json.total || 0
templateList.value = json.data || []
})
templateList.value = json.data || [];
});
}
const simpleQryTemplate = () => {
templateList.value = []
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
})
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()
})
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 = ['']
filterTags.value = [''];
}
setTimeout(simpleQryTemplate(), 200)
setTimeout(simpleQryTemplate(), 200);
}
const filterByName = () => {
simpleQryTemplate()
simpleQryTemplate();
}
let pageShowDetail = ref('')
let pageContentRef = ref(null)
let pageShowDetail = ref('');
let pageContentRef = ref(null);
const showPreview = (item) => {
editorType.value = item.editorType
editorType.value = item.editorType;
if (item.editorType === 1) {
pageShowDetail.value = item.content
pageShowDetail.value = item.content;
}
if (item.editorType === 2) {
pageShowDetail.value = mavonEditor.getMarkdownIt().render(item.content)
pageShowDetail.value = mavonEditor.getMarkdownIt().render(item.content);
}
setTimeout(previewPageImage(), 500);
previewVisible.value = true
previewVisible.value = true;
}
const previewPageImage = () => {
const imgArr = []
const imgArr = [];
if (pageContentRef.value !== undefined || pageContentRef.value !== '') {
return
return;
}
const imgSelector = pageContentRef.value.querySelectorAll('img')
const imgSelector = pageContentRef.value.querySelectorAll('img');
imgSelector.forEach((item, index) => {
imgArr.push(item.src)
imgArr.push(item.src);
item.onclick = () => {
previewInitialIndex.value = index
showImagePreviewList.value = imgArr
showImagePreview.value = true
previewInitialIndex.value = index;
showImagePreviewList.value = imgArr;
showImagePreview.value = true;
}
})
});
}
defineExpose({showTemplateCreate, showTemplateManage});
</script>