wiki 工程重构
This commit is contained in:
+5
-5
@@ -29,7 +29,7 @@ export default [
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: '/auth/api/v1/author/blog/0001',
|
url: '/auth/api/v1/author/wiki/0001',
|
||||||
method: 'delete',
|
method: 'delete',
|
||||||
response: () => {
|
response: () => {
|
||||||
return {
|
return {
|
||||||
@@ -49,8 +49,8 @@ export default [
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: '/auth/api/v1/author/blog/content',
|
url: '/auth/api/v1/author/wiki',
|
||||||
method: 'PUT',
|
method: 'POST',
|
||||||
response: () => {
|
response: () => {
|
||||||
return {
|
return {
|
||||||
bid: "0003",
|
bid: "0003",
|
||||||
@@ -62,8 +62,8 @@ export default [
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: '/auth/api/v1/author/blog/content',
|
url: '/auth/api/v1/author/wiki',
|
||||||
method: 'POST',
|
method: 'PUT',
|
||||||
response: () => {
|
response: () => {
|
||||||
return {
|
return {
|
||||||
bid: "0003",
|
bid: "0003",
|
||||||
|
|||||||
+36
-35
@@ -2,13 +2,13 @@ import { MockMethod } from 'vite-plugin-mock'
|
|||||||
|
|
||||||
export default [
|
export default [
|
||||||
{
|
{
|
||||||
url: '/wiki/api/v1/author/blog/list',
|
url: '/wiki/api/v1/author/wiki/list',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
response: ({ body, query }) => {
|
response: ({ }) => {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
btId: "001",
|
btId: "001",
|
||||||
btName: "your world---",
|
btName: "1",
|
||||||
blog_list: [
|
blog_list: [
|
||||||
{
|
{
|
||||||
bid: "0001",
|
bid: "0001",
|
||||||
@@ -43,7 +43,7 @@ export default [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
btId: "002",
|
btId: "002",
|
||||||
btName: "my world",
|
btName: "2",
|
||||||
blog_list: [
|
blog_list: [
|
||||||
{
|
{
|
||||||
bid: "0003",
|
bid: "0003",
|
||||||
@@ -64,7 +64,7 @@ export default [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
btId: "003",
|
btId: "003",
|
||||||
btName: "my world",
|
btName: "3",
|
||||||
blog_list: [
|
blog_list: [
|
||||||
{
|
{
|
||||||
bid: "0003",
|
bid: "0003",
|
||||||
@@ -87,8 +87,28 @@ export default [
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: '/wiki/api/v1/author/blog_types',
|
url: '/wiki/api/v1/author/wiki/type', // create wikiType
|
||||||
method: 'post',
|
method: 'post',
|
||||||
|
response: () => {
|
||||||
|
return {
|
||||||
|
btId: "001",
|
||||||
|
btName: "your world---",
|
||||||
|
blog_list: [
|
||||||
|
{
|
||||||
|
bid: "0001",
|
||||||
|
title: "one",
|
||||||
|
content: "nothing",
|
||||||
|
btId: "001",
|
||||||
|
order: 0,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
order: 2,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
url: '/wiki/api/v1/author/wiki/type', // update wikiType
|
||||||
|
method: 'put',
|
||||||
response: () => {
|
response: () => {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
@@ -137,35 +157,7 @@ export default [
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
url: '/wiki/api/v1/author/blog_type',
|
url: '/wiki/api/v1/author/wiki/type', // delete wikiType
|
||||||
method: 'put',
|
|
||||||
response: () => {
|
|
||||||
return {
|
|
||||||
btId: "001",
|
|
||||||
btName: "your world---",
|
|
||||||
blog_list: [
|
|
||||||
{
|
|
||||||
bid: "0001",
|
|
||||||
title: "one",
|
|
||||||
content: "nothing",
|
|
||||||
btId: "001",
|
|
||||||
order: 0,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
order: 2,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
url: '/wiki/api/v1/author/blog_type',
|
|
||||||
method: 'post',
|
|
||||||
response: () => {
|
|
||||||
return {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
url: '/wiki/api/v1/author/blog_type',
|
|
||||||
method: 'delete',
|
method: 'delete',
|
||||||
response: ({ body, query }) => {
|
response: ({ body, query }) => {
|
||||||
return [
|
return [
|
||||||
@@ -214,4 +206,13 @@ export default [
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
url: '/wiki/api/v1/author/wiki/type/sort',
|
||||||
|
method: 'post',
|
||||||
|
response: () => {
|
||||||
|
return {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
] as MockMethod[]
|
] as MockMethod[]
|
||||||
|
|||||||
+108
-99
@@ -4,112 +4,121 @@ const headers = {
|
|||||||
'Content-Type': 'application/json;charsetset=UTF-8'
|
'Content-Type': 'application/json;charsetset=UTF-8'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const createWikiType = (data: Object) => {
|
||||||
|
return service({
|
||||||
|
url: '/wiki/api/v1/author/wiki/type',
|
||||||
|
method: 'POST',
|
||||||
|
headers: headers,
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const removeWikiType = (data: Object) => {
|
||||||
|
return service({
|
||||||
|
url: '/wiki/api/v1/author/wiki/type',
|
||||||
|
method: 'DELETE',
|
||||||
|
headers: headers,
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const updateWikiType = (data: Object) => {
|
||||||
|
return service({
|
||||||
|
url: '/wiki/api/v1/author/wiki/type',
|
||||||
|
method: 'PUT',
|
||||||
|
headers: headers,
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const getWikiType = (btId: string) => {
|
||||||
|
return service({
|
||||||
|
url: '/wiki/api/v1/author/wiki/type/' + btId,
|
||||||
|
method: 'GET',
|
||||||
|
headers: headers,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const sortWikiType = (data: Object) => {
|
||||||
|
return service({
|
||||||
|
url: '/wiki/api/v1/author/wiki/type/sort',
|
||||||
|
method: 'POST',
|
||||||
|
headers: headers,
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const createWiki = (data: Object) => {
|
||||||
|
return service({
|
||||||
|
url: '/wiki/api/v1/author/wiki',
|
||||||
|
method: 'POST',
|
||||||
|
headers: headers,
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const deleteWiki = (data: Object) => {
|
||||||
|
return service({
|
||||||
|
url: '/wiki/api/v1/author/wiki',
|
||||||
|
method: 'DELETE',
|
||||||
|
headers: headers,
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const updateWiki = (data: Object) => {
|
||||||
|
return service({
|
||||||
|
url: '/wiki/api/v1/author/wiki',
|
||||||
|
method: 'PUT',
|
||||||
|
headers: headers,
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const getWiki = (id: string) => {
|
||||||
|
return service({
|
||||||
|
url: '/wiki/api/v1/author/wiki/' + id,
|
||||||
|
method: 'GET',
|
||||||
|
headers: headers,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const sortWiki = (data: Object, btId: string) => {
|
||||||
|
return service({
|
||||||
|
url: '/wiki/api/v1/author/wiki/sort' + btId,
|
||||||
|
method: 'POST',
|
||||||
|
headers: headers,
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const countWiki = () => {
|
||||||
|
return service({
|
||||||
|
url: '/wiki/api/v1/reader/wiki/count',
|
||||||
|
method: 'GET',
|
||||||
|
headers: headers,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
const listAll = () => {
|
const listAll = () => {
|
||||||
return service({
|
return service({
|
||||||
url: '/wiki/api/v1/author/blog/list',
|
url: '/wiki/api/v1/author/wiki/list',
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
headers: headers
|
headers: headers
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const updateBtName = (data: Object) => {
|
|
||||||
return service({
|
|
||||||
url: '/wiki/api/v1/author/blog_type',
|
|
||||||
method: 'POST',
|
|
||||||
headers: headers,
|
|
||||||
data: data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const putBlogType = (data: Object) => {
|
|
||||||
return service({
|
|
||||||
url: '/wiki/api/v1/author/blog_type',
|
|
||||||
method: 'PUT',
|
|
||||||
headers: headers,
|
|
||||||
data: data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const removeBlogType = (data: Object) => {
|
|
||||||
return service({
|
|
||||||
url: '/wiki/api/v1/author/blog_type',
|
|
||||||
method: 'DELETE',
|
|
||||||
headers: headers,
|
|
||||||
data: data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const sortBlogTypes = (data: Object) => {
|
|
||||||
return service({
|
|
||||||
url: '/wiki/api/v1/author/blog_types',
|
|
||||||
method: 'POST',
|
|
||||||
headers: headers,
|
|
||||||
data: data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const getContent = (id: string) => {
|
|
||||||
return service({
|
|
||||||
url: '/wiki/api/v1/author/blog/content/' + id,
|
|
||||||
method: 'GET',
|
|
||||||
headers: headers,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const putBlog = (postData: Object) => {
|
|
||||||
return service({
|
|
||||||
url: '/wiki/api/v1/author/blog/content',
|
|
||||||
method: 'PUT',
|
|
||||||
headers: headers,
|
|
||||||
data: postData
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const updateContent = (post_data: Object) => {
|
|
||||||
return service({
|
|
||||||
url: '/wiki/api/v1/author/blog/content',
|
|
||||||
method: 'POST',
|
|
||||||
headers: headers,
|
|
||||||
data: post_data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const deleteContent = (bid: string, delete_data: Object) => {
|
|
||||||
return service({
|
|
||||||
url: '/wiki/api/v1/author/blog/' + bid,
|
|
||||||
method: 'DELETE',
|
|
||||||
headers: headers,
|
|
||||||
data: delete_data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const sortBlogs = (data: Object, btId: string) => {
|
|
||||||
return service({
|
|
||||||
url: '/wiki/api/v1/author/blogs/' + btId,
|
|
||||||
method: 'POST',
|
|
||||||
headers: headers,
|
|
||||||
data: data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const countBlogs = () => {
|
|
||||||
return service({
|
|
||||||
url: '/wiki/api/v1/reader/blogs/count',
|
|
||||||
method: 'GET',
|
|
||||||
headers: headers,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
export {
|
export {
|
||||||
|
createWikiType,
|
||||||
|
removeWikiType,
|
||||||
|
updateWikiType,
|
||||||
|
getWikiType,
|
||||||
|
sortWikiType,
|
||||||
|
createWiki,
|
||||||
|
deleteWiki,
|
||||||
|
updateWiki,
|
||||||
|
getWiki,
|
||||||
|
sortWiki,
|
||||||
|
countWiki,
|
||||||
listAll,
|
listAll,
|
||||||
updateBtName,
|
|
||||||
putBlogType,
|
|
||||||
removeBlogType,
|
|
||||||
sortBlogTypes,
|
|
||||||
getContent,
|
|
||||||
putBlog,
|
|
||||||
updateContent,
|
|
||||||
deleteContent,
|
|
||||||
sortBlogs,
|
|
||||||
countBlogs
|
|
||||||
}
|
}
|
||||||
+42
-3
@@ -20,9 +20,48 @@ type DataTimeline = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type Event = {
|
type Event = {
|
||||||
event_date: string,
|
reminder_date: string,
|
||||||
title: string,
|
title: string,
|
||||||
event_info: string,
|
info: string,
|
||||||
|
type: string[],
|
||||||
}
|
}
|
||||||
|
|
||||||
export { Tenant, Theme, DataTimeline, Event }
|
interface Wiki {
|
||||||
|
bid: string
|
||||||
|
btId: string
|
||||||
|
title: string
|
||||||
|
blog_prex: string
|
||||||
|
autosave_control: string
|
||||||
|
content: string
|
||||||
|
order: number
|
||||||
|
}
|
||||||
|
|
||||||
|
const wiki = (data: any) => {
|
||||||
|
const { bid, btId, content, title, order } = data
|
||||||
|
return {
|
||||||
|
bid: bid,
|
||||||
|
btId: btId,
|
||||||
|
content: content,
|
||||||
|
title: title,
|
||||||
|
order: order
|
||||||
|
} as Wiki
|
||||||
|
}
|
||||||
|
|
||||||
|
interface WikiType {
|
||||||
|
btId: string
|
||||||
|
btName: string
|
||||||
|
blogs: Wiki[]
|
||||||
|
order: number
|
||||||
|
}
|
||||||
|
|
||||||
|
const wikiType = (data: any) => {
|
||||||
|
const { btId, btName, order } = data
|
||||||
|
return {
|
||||||
|
btId: btId,
|
||||||
|
btName: btName,
|
||||||
|
blogs: [],
|
||||||
|
order: order,
|
||||||
|
} as WikiType
|
||||||
|
}
|
||||||
|
|
||||||
|
export { Tenant, Theme, DataTimeline, Event, Wiki, wiki, WikiType, wikiType }
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
import { h } from 'vue'
|
||||||
|
import { ElMessage } from 'element-plus'
|
||||||
|
|
||||||
|
const setErrorMessage = (msg: string) => {
|
||||||
|
ElMessage({
|
||||||
|
message: h('p', null, [
|
||||||
|
h('i', { style: 'color: teal' }, msg),
|
||||||
|
]),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export { setErrorMessage }
|
||||||
+299
-379
@@ -15,14 +15,14 @@
|
|||||||
|
|
||||||
<draggable :list="blogTypes" ghost-class="ghost" handle=".move" animation="300" :force-fallback="true" itemKey=""
|
<draggable :list="blogTypes" ghost-class="ghost" handle=".move" animation="300" :force-fallback="true" itemKey=""
|
||||||
filter=".forbid" chosen-class="chosenClass" :fallback-class="true" :fallback-on-body="true"
|
filter=".forbid" chosen-class="chosenClass" :fallback-class="true" :fallback-on-body="true"
|
||||||
:touch-start-threshold="50" :fallback-tolerance="50" @start="onStartBlogType" @end="sortBlogType" group="group1"
|
:touch-start-threshold="50" :fallback-tolerance="50" @start="onStartBlogType" @end="onSortWikiType" group="group1"
|
||||||
:move="onMove">
|
:move="onMove">
|
||||||
<template #item="{ element }">
|
<template #item="{ element }">
|
||||||
<div class="item">
|
<div class="item">
|
||||||
<label class="move"></label>
|
<label class="move"></label>
|
||||||
<p class="bt-input" @click="onclickTypeTab(element.order)">{{ element.btName }}</p>
|
<p class="bt-input" @click="onclickTypeTab(element)">{{ element.btName }}</p>
|
||||||
<div>
|
<div>
|
||||||
<el-button class="operate_button" :icon="Setting" size="small" v-show="checkedBlogIndex == element.order"
|
<el-button class="operate_button" :icon="Setting" size="small" v-show="showWikiTypeIcon(element)"
|
||||||
@click="handleCreateBlogType()" />
|
@click="handleCreateBlogType()" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -39,18 +39,18 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="b_section" :style="bWholeStyle" v-show="collapsible[1] == 0">
|
<div class="b_section" :style="bWholeStyle" v-show="collapsible[1] == 0">
|
||||||
<div class="item_header">
|
<div class="item_header">
|
||||||
<el-button class="item_header_button" :disabled="isclicked" @click="insertBlog">增加一个博客</el-button>
|
<el-button class="item_header_button" :disabled="isclicked" @click="onCreateWiki">增加一个博客</el-button>
|
||||||
</div>
|
</div>
|
||||||
<draggable :list="blogTypes[checkedBlogIndex].blogs" ghost-class="ghost" handle=".move" animation="300"
|
<draggable :list="checkedWikiType.blogs" ghost-class="ghost" handle=".move" animation="300" :force-fallback="true"
|
||||||
:force-fallback="true" itemKey="" filter=".forbid" chosen-class="chosenClass" :fallback-class="true"
|
itemKey="" filter=".forbid" chosen-class="chosenClass" :fallback-class="true" :fallback-on-body="true"
|
||||||
:fallback-on-body="true" :touch-start-threshold="50" :fallback-tolerance="50" @start="onStartBlog" @end="sortBlog"
|
:touch-start-threshold="50" :fallback-tolerance="50" @start="onStartBlog" @end="onSortWiki" group="group2"
|
||||||
group="group2" :move="onMove">
|
:move="onMove">
|
||||||
<template #item="{ element }">
|
<template #item="{ element }">
|
||||||
<div class="item">
|
<div class="item">
|
||||||
<label class="move"></label>
|
<label class="move"></label>
|
||||||
<p class="bt-input" @click="onclickBlogTab(element)">{{ element.title }}</p>
|
<p class="bt-input" @click="onclickBlogTab(element)">{{ element.title }}</p>
|
||||||
<div>
|
<div>
|
||||||
<el-button class="operate_button" v-show="checkedIndex == element.order" :icon="Delete" size="small"
|
<el-button class="operate_button" v-show="showWikiIcon(element)" :icon="Delete" size="small"
|
||||||
@click="deleteDialogVisible = true" />
|
@click="deleteDialogVisible = true" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -61,12 +61,11 @@
|
|||||||
|
|
||||||
<div class="c_section">
|
<div class="c_section">
|
||||||
<div class="title_style">
|
<div class="title_style">
|
||||||
<el-input v-model="blogTypes[checkedBlogIndex].blogs[checkedIndex].title" @keyup.enter.native="saveTitle"
|
<el-input v-model="checkedWiki.title" @keyup.enter.native="onUpdateTitle" @blur="onUpdateTitle">
|
||||||
@blur="saveTitle">
|
|
||||||
</el-input>
|
</el-input>
|
||||||
</div>
|
</div>
|
||||||
<div :style="cWholeStyle">
|
<div :style="cWholeStyle">
|
||||||
<md-editor theme="light" v-model="current_blog.content" @save="saveContent" @upload-img="onUploadImg"
|
<md-editor theme="light" v-model="checkedWiki.content" @save="onUpdateContent" @upload-img="onUploadImg"
|
||||||
:style="{ height: innerHeight }" />
|
:style="{ height: innerHeight }" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -78,35 +77,35 @@
|
|||||||
<template #footer>
|
<template #footer>
|
||||||
<span class="dialog-footer">
|
<span class="dialog-footer">
|
||||||
<el-button @click="blogTypeCreateDialogVisible = false">取消</el-button>
|
<el-button @click="blogTypeCreateDialogVisible = false">取消</el-button>
|
||||||
<el-button type="primary" @click="insertBlogType">确认</el-button>
|
<el-button type="primary" @click="onCreateWikiType">确认</el-button>
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
<!-- edit and delete blogtype dialog -->
|
<!-- edit and delete blogtype dialog -->
|
||||||
<el-dialog v-model="blogTypeEditDialogVisible" title="博客分类 Setting" width="30%">
|
<el-dialog v-model="blogTypeEditDialogVisible" title="博客分类 Setting" width="30%">
|
||||||
你正在对「 {{ blogTypes[checkedBlogIndex].btName }}」进行操作
|
你正在对「 {{ checkedWikiType.btName }}」进行操作
|
||||||
<div style="display: flex; margin: 10px">
|
<div style="display: flex; margin: 10px">
|
||||||
<el-button type="primary" @click="saveBlogType()">修改</el-button>
|
<el-button type="primary" @click="onUpdateWikiType()">修改</el-button>
|
||||||
<el-input v-model="btName">
|
<el-input v-model="btName">
|
||||||
</el-input>
|
</el-input>
|
||||||
</div>
|
</div>
|
||||||
<div style="display: flex; margin: 10px">
|
<div style="display: flex; margin: 10px">
|
||||||
<el-button type="danger" @click="deleteBlogType()">删除</el-button>
|
<el-button type="danger" @click="deleteWikiType()">删除</el-button>
|
||||||
<el-input v-model="deleteBtName" :placeholder="'请输入 ' + blogTypes[checkedBlogIndex].btName + ' 进行删除'">
|
<el-input v-model="deleteBtName" :placeholder="'请输入 ' + checkedWikiType.btName + ' 进行删除'">
|
||||||
</el-input>
|
</el-input>
|
||||||
</div>
|
</div>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
<!-- delete blog dialog -->
|
<!-- delete blog dialog -->
|
||||||
<el-dialog v-model="deleteDialogVisible" title="删除博客" width="30%">
|
<el-dialog v-model="deleteDialogVisible" title="删除博客" width="30%">
|
||||||
你正在对 {{ blogTypes[checkedBlogIndex].blogs[checkedIndex].title }}
|
你正在对 {{ checkedWiki.title }}
|
||||||
<el-input v-model="btName" :placeholder="'请输入<删除>'">
|
<el-input v-model="btName" :placeholder="'请输入<删除>'">
|
||||||
</el-input>
|
</el-input>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<span class="dialog-footer">
|
<span class="dialog-footer">
|
||||||
<el-button @click="deleteDialogVisible = false">取消</el-button>
|
<el-button @click="deleteDialogVisible = false">取消</el-button>
|
||||||
<el-button type="primary" @click="deleteBlog">确认</el-button>
|
<el-button type="primary" @click="onDeleteWiki">确认</el-button>
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
@@ -119,89 +118,302 @@ import $moment from "moment"
|
|||||||
import MdEditor from 'md-editor-v3'
|
import MdEditor from 'md-editor-v3'
|
||||||
import { CaretRight, CaretLeft, Setting, Delete } from "@element-plus/icons-vue"
|
import { CaretRight, CaretLeft, Setting, Delete } from "@element-plus/icons-vue"
|
||||||
import 'md-editor-v3/lib/style.css'
|
import 'md-editor-v3/lib/style.css'
|
||||||
import { h } from 'vue'
|
import { Wiki, WikiType, wiki, wikiType } from "../../entity"
|
||||||
import { ElMessage } from 'element-plus'
|
import { setErrorMessage } from "../../utils/common"
|
||||||
import {
|
import {
|
||||||
updateBtName,
|
createWikiType,
|
||||||
updateContent,
|
removeWikiType,
|
||||||
|
updateWikiType,
|
||||||
|
getWikiType,
|
||||||
|
sortWikiType,
|
||||||
|
createWiki,
|
||||||
|
deleteWiki,
|
||||||
|
updateWiki,
|
||||||
|
getWiki,
|
||||||
|
sortWiki,
|
||||||
listAll,
|
listAll,
|
||||||
putBlogType,
|
|
||||||
removeBlogType,
|
|
||||||
getContent,
|
|
||||||
putBlog,
|
|
||||||
deleteContent,
|
|
||||||
sortBlogTypes,
|
|
||||||
sortBlogs
|
|
||||||
} from '../../api/blog'
|
} from '../../api/blog'
|
||||||
import { copy } from '../../utils/copyutil'
|
import { copy } from '../../utils/copyutil'
|
||||||
import draggable from "vuedraggable"
|
import draggable from "vuedraggable"
|
||||||
|
|
||||||
interface Blog {
|
|
||||||
bid: string
|
|
||||||
btId: string
|
|
||||||
title: string
|
|
||||||
blog_prex: string
|
|
||||||
autosave_control: string
|
|
||||||
content: string
|
|
||||||
order: number
|
|
||||||
}
|
|
||||||
|
|
||||||
interface BlogType {
|
|
||||||
btId: string
|
|
||||||
btName: string
|
|
||||||
blogs: Blog[]
|
|
||||||
order: number
|
|
||||||
}
|
|
||||||
const blogTypes = reactive<BlogType[]>([])
|
|
||||||
const blogTypeCreateDialogVisible = ref(false)
|
const blogTypeCreateDialogVisible = ref(false)
|
||||||
const blogTypeEditDialogVisible = ref(false)
|
const blogTypeEditDialogVisible = ref(false)
|
||||||
const deleteDialogVisible = ref(false)
|
const deleteDialogVisible = ref(false)
|
||||||
|
|
||||||
let checkedIndex = ref<number>(0)
|
|
||||||
let checkedBlogIndex = ref<number>(0)
|
|
||||||
let isclicked = ref(false)
|
let isclicked = ref(false)
|
||||||
let isReady = ref(false)
|
let isReady = ref(false)
|
||||||
// tmp btName for create, edit, delete
|
// tmp btName for create, edit, delete
|
||||||
let btName = ref("")
|
let btName = ref("")
|
||||||
let deleteBtName = ref("")
|
let deleteBtName = ref("")
|
||||||
let current_blog = reactive({
|
const blogTypes = reactive<WikiType[]>([])
|
||||||
bid: "",
|
const checkedWikiType = reactive<WikiType>(wikiType({
|
||||||
content: "",
|
btId: "",
|
||||||
})
|
btName: "",
|
||||||
|
blogs: [],
|
||||||
|
order: 0
|
||||||
|
}))
|
||||||
|
const checkedWiki = reactive<Wiki>({} as Wiki)
|
||||||
|
|
||||||
// FUNCTION DEFINITION
|
// FUNCTION DEFINITION
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FUNCTION DEFINITION LIST
|
||||||
|
* {@link onCreateWikiType 创建 wiki Type}
|
||||||
|
* {@link deleteWikiType 删除 wiki Type}
|
||||||
|
* {@link onUpdateWikiType 更新 wiki Type}
|
||||||
|
* {@link onCreateWiki 创建wiki}
|
||||||
|
* {@link onDeleteWiki 删除wiki}
|
||||||
|
* {@link onUpdateContent 修改Wiki文本内容}
|
||||||
|
* {@link onUpdateTitle 修改Wikititle}
|
||||||
|
* {@link onclickTypeTab 点击type Tag触发}
|
||||||
|
* {@link onclickBlogTab 点击wiki Tag触发}
|
||||||
|
* {@link handleCreateBlogType }
|
||||||
|
* {@link getTestData 初始数据加载}
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
const showWikiTypeIcon = (data: any) => {
|
||||||
|
return checkedWikiType.btId == data.btId
|
||||||
|
}
|
||||||
|
const showWikiIcon = (data: any) => {
|
||||||
|
return checkedWiki.bid == data.bid
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* create blogType
|
||||||
|
*/
|
||||||
|
const onCreateWikiType = () => {
|
||||||
|
if (btName.value == "") {
|
||||||
|
blogTypeCreateDialogVisible.value = false
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const data = {
|
||||||
|
btName: btName.value,
|
||||||
|
}
|
||||||
|
createWikiType(data).then(response => {
|
||||||
|
const blog_type = wikiType(response.data)
|
||||||
|
blogTypes.push(blog_type)
|
||||||
|
response.data.blog_list.forEach((item: any) => {
|
||||||
|
const blog = wiki(item)
|
||||||
|
blog_type.blogs.push(blog as Wiki)
|
||||||
|
})
|
||||||
|
copy(checkedWikiType, blog_type)
|
||||||
|
copy(checkedWiki, blog_type.blogs[0])
|
||||||
|
|
||||||
|
}).catch(() => {
|
||||||
|
setErrorMessage("创建博客分类失败")
|
||||||
|
}).finally(() => {
|
||||||
|
btName.value = ""
|
||||||
|
blogTypeCreateDialogVisible.value = false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const deleteWikiType = () => {
|
||||||
|
if (deleteBtName.value == checkedWikiType.btName) {
|
||||||
|
const data = {
|
||||||
|
btId: checkedWikiType.btId
|
||||||
|
}
|
||||||
|
removeWikiType(data).then((response) => {
|
||||||
|
blogTypes.length = 0
|
||||||
|
response.data.forEach((element: any) => {
|
||||||
|
const wiki_Type = wikiType(element)
|
||||||
|
element.blog_list.forEach((item: any) => {
|
||||||
|
const blog = wiki(item)
|
||||||
|
wiki_Type.blogs.push(blog)
|
||||||
|
})
|
||||||
|
blogTypes.push(wiki_Type)
|
||||||
|
})
|
||||||
|
copy(checkedWikiType, blogTypes[0])
|
||||||
|
copy(checkedWiki, blogTypes[0].blogs[0])
|
||||||
|
blogTypeEditDialogVisible.value = false
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
blogTypeEditDialogVisible.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* edit blogType
|
||||||
|
*/
|
||||||
|
const onUpdateWikiType = () => {
|
||||||
|
if (checkedWikiType.btName == "") {
|
||||||
|
blogTypeEditDialogVisible.value = false
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const query = {
|
||||||
|
btId: checkedWikiType.btId,
|
||||||
|
btName: checkedWikiType.btName,
|
||||||
|
}
|
||||||
|
updateWikiType(query).catch(() => {
|
||||||
|
setErrorMessage("文章保存失败")
|
||||||
|
}).finally(() => {
|
||||||
|
blogTypeEditDialogVisible.value = false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ブログ新規作成
|
||||||
|
*/
|
||||||
|
const onCreateWiki = () => {
|
||||||
|
isclicked.value = true
|
||||||
|
const data = {
|
||||||
|
btId: checkedWikiType.btId,
|
||||||
|
title: $moment().format("YYYY-MM-DD"),
|
||||||
|
}
|
||||||
|
createWiki(data).then(response => {
|
||||||
|
const blog = wiki(response.data)
|
||||||
|
checkedWikiType.blogs.push(blog)
|
||||||
|
copy(checkedWiki, blog)
|
||||||
|
isclicked.value = false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ブログ削除
|
||||||
|
*/
|
||||||
|
const onDeleteWiki = async () => {
|
||||||
|
if (btName.value == "删除") {
|
||||||
|
let delete_data = {
|
||||||
|
bid: checkedWiki.bid,
|
||||||
|
btId: checkedWiki.btId
|
||||||
|
}
|
||||||
|
await deleteWiki(delete_data).then(response => {
|
||||||
|
checkedWikiType.blogs.length = 0
|
||||||
|
response.data.blog_list.forEach((item: any) => {
|
||||||
|
const blog = wiki(item)
|
||||||
|
checkedWikiType.blogs.push(blog)
|
||||||
|
})
|
||||||
|
copy(checkedWiki, checkedWikiType.blogs[0])
|
||||||
|
}).finally(() => {
|
||||||
|
deleteDialogVisible.value = false
|
||||||
|
btName.value = ""
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Blog内容修正
|
||||||
|
*/
|
||||||
|
const onUpdateContent = async () => {
|
||||||
|
const query = {
|
||||||
|
bid: checkedWiki.bid,
|
||||||
|
content: checkedWiki.content
|
||||||
|
}
|
||||||
|
updateWiki(query).catch(() => {
|
||||||
|
setErrorMessage("文章保存失败")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Blogタイトル修正
|
||||||
|
*/
|
||||||
|
const onUpdateTitle = () => {
|
||||||
|
const query = {
|
||||||
|
bid: checkedWiki.bid,
|
||||||
|
title: checkedWiki.title
|
||||||
|
}
|
||||||
|
updateWiki(query).then(() => {
|
||||||
|
}).catch(() => {
|
||||||
|
setErrorMessage("文章标题保存失败")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 点击 【博客分类】
|
||||||
|
* @param wikiType BlogType
|
||||||
|
*/
|
||||||
|
const onclickTypeTab = async (wikiType: WikiType) => {
|
||||||
|
|
||||||
|
if (wikiType.btId == checkedWikiType.btId) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
deleteBtName.value = ""
|
||||||
|
await getWikiType(wikiType.btId).then(response => {
|
||||||
|
wikiType.blogs.length = 0
|
||||||
|
response.data.blog_list.forEach((item: any) => {
|
||||||
|
const blog = wiki(item)
|
||||||
|
wikiType.blogs.push(blog)
|
||||||
|
})
|
||||||
|
copy(checkedWikiType, wikiType)
|
||||||
|
copy(checkedWiki, wikiType.blogs[0])
|
||||||
|
}).catch(err => {
|
||||||
|
console.log(err)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 点击 【博客】
|
||||||
|
* @param w Blog
|
||||||
|
*/
|
||||||
|
const onclickBlogTab = (w: Wiki) => {
|
||||||
|
deleteBtName.value = ""
|
||||||
|
if (w.bid == checkedWiki.bid) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
getWiki(w.bid).then(response => {
|
||||||
|
copy(checkedWiki, wiki(response.data))
|
||||||
|
}).catch((err) => {
|
||||||
|
setErrorMessage(err)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc wiki 分类排序
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
const onSortWikiType = async () => {
|
||||||
|
|
||||||
|
const sortData: string[] = []
|
||||||
|
blogTypes.forEach((blogType: WikiType) => {
|
||||||
|
sortData.push(blogType.btId)
|
||||||
|
})
|
||||||
|
|
||||||
|
sortWikiType({ btIds: sortData }).catch(() => {
|
||||||
|
setErrorMessage("分类排序失败")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @desc wikiソート機能
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
const onSortWiki = async () => {
|
||||||
|
|
||||||
|
const sortData: string[] = []
|
||||||
|
|
||||||
|
checkedWikiType.blogs.forEach((blog: Wiki) => {
|
||||||
|
sortData.push(blog.bid)
|
||||||
|
})
|
||||||
|
|
||||||
|
sortWiki({ bIds: sortData }, checkedWikiType.btId).catch(() => {
|
||||||
|
setErrorMessage("blog排序失败")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const handleCreateBlogType = () => {
|
||||||
|
blogTypeEditDialogVisible.value = true
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Blog一覧取得
|
* Blog一覧取得
|
||||||
*/
|
*/
|
||||||
const getTestData = async () => {
|
const getTestData = async () => {
|
||||||
await listAll().then(response => {
|
await listAll().then(response => {
|
||||||
response.data.sort((x: any, y: any) => { x.order - y.order })
|
|
||||||
response.data.forEach((element: any) => {
|
response.data.forEach((element: any) => {
|
||||||
const blog_type: BlogType = {
|
const blog_type = wikiType(element)
|
||||||
btId: element.btId,
|
|
||||||
btName: element.btName,
|
|
||||||
blogs: [],
|
|
||||||
order: element.order
|
|
||||||
}
|
|
||||||
element.blog_list.forEach((item: any) => {
|
element.blog_list.forEach((item: any) => {
|
||||||
const blog: Blog = {
|
const blog = wiki(item)
|
||||||
bid: item.bid,
|
|
||||||
btId: item.btId,
|
|
||||||
title: item.title,
|
|
||||||
blog_prex: item.blog_prex,
|
|
||||||
autosave_control: item.autosave_control,
|
|
||||||
content: item.content,
|
|
||||||
order: item.order
|
|
||||||
}
|
|
||||||
blog_type.blogs.push(blog)
|
blog_type.blogs.push(blog)
|
||||||
})
|
})
|
||||||
blogTypes.push(blog_type)
|
blogTypes.push(blog_type)
|
||||||
})
|
})
|
||||||
isReady.value = true
|
isReady.value = true
|
||||||
checkedBlogIndex.value = blogTypes[0].order
|
copy(checkedWikiType, blogTypes[0])
|
||||||
checkedIndex.value = 0
|
copy(checkedWiki, blogTypes[0].blogs[0])
|
||||||
console.log(blogTypes[0].blogs[0])
|
|
||||||
copy(current_blog, blogTypes[0].blogs[0])
|
|
||||||
})
|
})
|
||||||
|
|
||||||
// TODO 需要优化部分
|
// TODO 需要优化部分
|
||||||
@@ -212,319 +424,27 @@ const getTestData = async () => {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
let old_blog = {
|
let old_blog = {
|
||||||
bid: current_blog.bid,
|
bid: checkedWiki.bid,
|
||||||
content: current_blog.content,
|
content: checkedWiki.content,
|
||||||
}
|
}
|
||||||
setInterval(async () => {
|
setInterval(async () => {
|
||||||
if (current_blog.bid == old_blog.bid) {
|
if (checkedWiki.bid == old_blog.bid) {
|
||||||
if (old_blog.content == current_blog.content) {
|
if (old_blog.content == checkedWiki.content) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
await saveContent().then(() => {
|
await updateWiki({
|
||||||
old_blog.content = current_blog.content
|
bid: checkedWiki.bid,
|
||||||
|
content: checkedWiki.content
|
||||||
|
}).then(() => {
|
||||||
|
old_blog.content = checkedWiki.content
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
old_blog.bid = current_blog.bid
|
old_blog.bid = checkedWiki.bid
|
||||||
old_blog.content = current_blog.content
|
old_blog.content = checkedWiki.content
|
||||||
}
|
}
|
||||||
}, 5000)
|
}, 5000)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* BlogTypeを選べる
|
|
||||||
* @param order
|
|
||||||
*/
|
|
||||||
const onclickTypeTab = (order: number) => {
|
|
||||||
const bid = blogTypes[order].blogs[0].bid
|
|
||||||
deleteBtName.value = ""
|
|
||||||
getContent(bid).then(response => {
|
|
||||||
blogTypes[order].blogs[0].content = response.data.content
|
|
||||||
checkedBlogIndex.value = order
|
|
||||||
checkedIndex.value = 0
|
|
||||||
copy(current_blog, blogTypes[checkedBlogIndex.value].blogs[0])
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const onclickBlogTab = (blog: Blog) => {
|
|
||||||
deleteBtName.value = ""
|
|
||||||
if (blog.order == checkedIndex.value) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
getContent(blog.bid).then(response => {
|
|
||||||
checkedIndex.value = blog.order
|
|
||||||
blogTypes[checkedBlogIndex.value].blogs[checkedIndex.value].content = response.data.content
|
|
||||||
copy(current_blog, blog)
|
|
||||||
}).catch(() => {
|
|
||||||
checkedIndex.value = blog.order
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Blog内容修正
|
|
||||||
*/
|
|
||||||
const saveContent = async () => {
|
|
||||||
const query = {
|
|
||||||
bid: current_blog.bid,
|
|
||||||
content: current_blog.content
|
|
||||||
}
|
|
||||||
updateContent(query).then(() => {
|
|
||||||
|
|
||||||
}).catch(() => {
|
|
||||||
ElMessage({
|
|
||||||
message: h('p', null, [
|
|
||||||
h('i', { style: 'color: teal' }, "文章保存失败"),
|
|
||||||
]),
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Blogタイトル修正
|
|
||||||
*/
|
|
||||||
const saveTitle = () => {
|
|
||||||
const query = {
|
|
||||||
bid: current_blog.bid,
|
|
||||||
title: blogTypes[checkedBlogIndex.value].blogs[checkedIndex.value].title
|
|
||||||
}
|
|
||||||
updateContent(query).then(() => {
|
|
||||||
}).catch(() => {
|
|
||||||
ElMessage({
|
|
||||||
message: h('p', null, [
|
|
||||||
h('i', { style: 'color: teal' }, "文章标题保存失败"),
|
|
||||||
]),
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ブログ新規作成
|
|
||||||
*/
|
|
||||||
const insertBlog = () => {
|
|
||||||
isclicked.value = true
|
|
||||||
const data = {
|
|
||||||
btId: blogTypes[checkedBlogIndex.value].btId,
|
|
||||||
title: $moment().format("YYYY-MM-DD"),
|
|
||||||
order: blogTypes[checkedBlogIndex.value].blogs.length
|
|
||||||
}
|
|
||||||
putBlog(data).then(response => {
|
|
||||||
const { bid, btid, title, content, order, autosave_control } = response.data
|
|
||||||
const blog = {
|
|
||||||
bid: bid,
|
|
||||||
btId: btid,
|
|
||||||
title: title,
|
|
||||||
blog_prex: "",
|
|
||||||
content: content,
|
|
||||||
autosave_control: autosave_control,
|
|
||||||
order: order
|
|
||||||
} as Blog
|
|
||||||
|
|
||||||
blogTypes[checkedBlogIndex.value].blogs.push(blog)
|
|
||||||
checkedIndex.value = order
|
|
||||||
isclicked.value = false
|
|
||||||
copy(current_blog, blog)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ブログ削除
|
|
||||||
*/
|
|
||||||
const deleteBlog = () => {
|
|
||||||
if (btName.value == "删除") {
|
|
||||||
let delete_data = {
|
|
||||||
btId: blogTypes[checkedBlogIndex.value].btId
|
|
||||||
}
|
|
||||||
deleteContent(blogTypes[checkedBlogIndex.value].blogs[checkedIndex.value].bid, delete_data).then(response => {
|
|
||||||
blogTypes[checkedBlogIndex.value].blogs.length = 0
|
|
||||||
response.data.blog_list.forEach((item: any) => {
|
|
||||||
const blog: Blog = {
|
|
||||||
bid: item.bid,
|
|
||||||
btId: item.btId,
|
|
||||||
title: item.title,
|
|
||||||
blog_prex: item.blog_prex,
|
|
||||||
autosave_control: item.autosave_control,
|
|
||||||
content: item.content,
|
|
||||||
order: item.order
|
|
||||||
}
|
|
||||||
blogTypes[checkedBlogIndex.value].blogs.push(blog)
|
|
||||||
})
|
|
||||||
checkedIndex.value = 0
|
|
||||||
copy(current_blog, blogTypes[checkedBlogIndex.value].blogs[0])
|
|
||||||
deleteDialogVisible.value = false
|
|
||||||
btName.value = ""
|
|
||||||
}).catch(() => {
|
|
||||||
deleteDialogVisible.value = false
|
|
||||||
btName.value = ""
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const handleCreateBlogType = () => {
|
|
||||||
btName.value = blogTypes[checkedBlogIndex.value].btName
|
|
||||||
blogTypeEditDialogVisible.value = true
|
|
||||||
deleteBtName.value = ""
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* create blogType
|
|
||||||
*/
|
|
||||||
const insertBlogType = () => {
|
|
||||||
if (btName.value == "") {
|
|
||||||
blogTypeCreateDialogVisible.value = false
|
|
||||||
return
|
|
||||||
}
|
|
||||||
const data = {
|
|
||||||
btName: btName.value,
|
|
||||||
order: blogTypes.length
|
|
||||||
}
|
|
||||||
putBlogType(data).then(response => {
|
|
||||||
const blog_type: BlogType = {
|
|
||||||
btId: response.data.btId,
|
|
||||||
btName: response.data.btName,
|
|
||||||
blogs: [],
|
|
||||||
order: response.data.order
|
|
||||||
}
|
|
||||||
response.data.blog_list.forEach((item: any) => {
|
|
||||||
const blog: Blog = {
|
|
||||||
bid: item.bid,
|
|
||||||
btId: item.btId,
|
|
||||||
title: item.title,
|
|
||||||
blog_prex: item.blog_prex,
|
|
||||||
autosave_control: item.autosave_control,
|
|
||||||
content: item.content,
|
|
||||||
order: item.order
|
|
||||||
}
|
|
||||||
blog_type.blogs.push(blog)
|
|
||||||
})
|
|
||||||
blogTypes.push(blog_type)
|
|
||||||
checkedBlogIndex.value = response.data.order
|
|
||||||
checkedIndex.value = blog_type.blogs[0].order
|
|
||||||
copy(current_blog, blogTypes[checkedBlogIndex.value].blogs[0])
|
|
||||||
blogTypeCreateDialogVisible.value = false
|
|
||||||
btName.value = ""
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* edit blogType
|
|
||||||
*/
|
|
||||||
const saveBlogType = () => {
|
|
||||||
if (btName.value == "") {
|
|
||||||
blogTypeEditDialogVisible.value = false
|
|
||||||
return
|
|
||||||
}
|
|
||||||
const query = {
|
|
||||||
btId: blogTypes[checkedBlogIndex.value].btId,
|
|
||||||
btName: btName.value,
|
|
||||||
}
|
|
||||||
updateBtName(query).then(() => {
|
|
||||||
blogTypes[checkedBlogIndex.value].btName = btName.value
|
|
||||||
blogTypeEditDialogVisible.value = false
|
|
||||||
btName.value = ""
|
|
||||||
}).catch(() => {
|
|
||||||
btName.value = ""
|
|
||||||
blogTypeEditDialogVisible.value = false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const deleteBlogType = () => {
|
|
||||||
if (deleteBtName.value == blogTypes[checkedBlogIndex.value].btName) {
|
|
||||||
const data = {
|
|
||||||
btId: blogTypes[checkedBlogIndex.value].btId
|
|
||||||
}
|
|
||||||
removeBlogType(data).then((response) => {
|
|
||||||
blogTypes.length = 0
|
|
||||||
response.data.forEach((element: any) => {
|
|
||||||
const blog_type: BlogType = {
|
|
||||||
btId: element.btId,
|
|
||||||
btName: element.btName,
|
|
||||||
blogs: [],
|
|
||||||
order: element.order
|
|
||||||
}
|
|
||||||
element.blog_list.forEach((item: any) => {
|
|
||||||
const blog: Blog = {
|
|
||||||
bid: item.bid,
|
|
||||||
btId: item.btId,
|
|
||||||
title: item.title,
|
|
||||||
blog_prex: item.blog_prex,
|
|
||||||
autosave_control: item.autosave_control,
|
|
||||||
content: item.content,
|
|
||||||
order: item.order
|
|
||||||
}
|
|
||||||
blog_type.blogs.push(blog)
|
|
||||||
})
|
|
||||||
blogTypes.push(blog_type)
|
|
||||||
})
|
|
||||||
checkedBlogIndex.value = 0
|
|
||||||
checkedIndex.value = 0
|
|
||||||
copy(current_blog, blogTypes[0].blogs[0])
|
|
||||||
blogTypeEditDialogVisible.value = false
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
blogTypeEditDialogVisible.value = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const sortBlogType = () => {
|
|
||||||
|
|
||||||
const sortData: BlogType[] = []
|
|
||||||
blogTypes.forEach((blogType: BlogType, index) => {
|
|
||||||
|
|
||||||
if (blogType.btId == id.value) {
|
|
||||||
checkedBlogIndex.value = index
|
|
||||||
}
|
|
||||||
if (blogType.order != index) {
|
|
||||||
sortData.push({
|
|
||||||
btId: blogType.btId,
|
|
||||||
btName: blogType.btName,
|
|
||||||
blogs: [],
|
|
||||||
order: index
|
|
||||||
})
|
|
||||||
blogType.order = index
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
sortBlogTypes(sortData).then(() => {
|
|
||||||
|
|
||||||
}).catch(() => {
|
|
||||||
ElMessage({
|
|
||||||
message: h('p', null, [
|
|
||||||
h('i', { style: 'color: teal' }, "分类排序失败"),
|
|
||||||
]),
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @desc wikiソート機能
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
const sortBlog = () => {
|
|
||||||
const sortData: any[] = []
|
|
||||||
|
|
||||||
blogTypes[checkedBlogIndex.value].blogs.forEach((blog: Blog, index) => {
|
|
||||||
if (blog.bid == id.value) {
|
|
||||||
checkedIndex.value = index
|
|
||||||
}
|
|
||||||
if (index != blog.order) {
|
|
||||||
sortData.push({
|
|
||||||
bid: blog.bid,
|
|
||||||
order: index
|
|
||||||
})
|
|
||||||
blog.order = index
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
sortBlogs(sortData, blogTypes[checkedBlogIndex.value].btId).then(() => {
|
|
||||||
|
|
||||||
}).catch(() => {
|
|
||||||
ElMessage({
|
|
||||||
message: h('p', null, [
|
|
||||||
h('i', { style: 'color: teal' }, "blog排序失败"),
|
|
||||||
]),
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Created 段階の関数呼び出す処理
|
// Created 段階の関数呼び出す処理
|
||||||
getTestData()
|
getTestData()
|
||||||
@@ -532,7 +452,7 @@ getTestData()
|
|||||||
window.addEventListener('keydown', async function (event) {
|
window.addEventListener('keydown', async function (event) {
|
||||||
if (event.ctrlKey && event.key == "s") {
|
if (event.ctrlKey && event.key == "s") {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
saveContent()
|
onUpdateContent()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -560,11 +480,11 @@ const onUploadProcess = (e: number) => {
|
|||||||
const id = ref("")
|
const id = ref("")
|
||||||
const onStartBlogType = () => {
|
const onStartBlogType = () => {
|
||||||
console.log("开始拖拽");
|
console.log("开始拖拽");
|
||||||
id.value = blogTypes[checkedBlogIndex.value].btId
|
// id.value = blogTypes[checkedWikiTypeIndex.value].btId
|
||||||
};
|
};
|
||||||
|
|
||||||
const onStartBlog = () => {
|
const onStartBlog = () => {
|
||||||
id.value = blogTypes[checkedBlogIndex.value].blogs[checkedIndex.value].bid
|
// id.value = blogTypes[checkedWikiTypeIndex.value].blogs[checkedWikiIndex.value].bid
|
||||||
}
|
}
|
||||||
|
|
||||||
const onMove = (e: any) => {
|
const onMove = (e: any) => {
|
||||||
|
|||||||
@@ -20,21 +20,21 @@
|
|||||||
</el-calendar>
|
</el-calendar>
|
||||||
<span>待办事项</span>
|
<span>待办事项</span>
|
||||||
<el-table :data="eventDataList">
|
<el-table :data="eventDataList">
|
||||||
<el-table-column property="event_date" label="Date" width="150" />
|
<el-table-column property="reminder_date" label="Date" width="150" />
|
||||||
<el-table-column property="title" label="title" width="200" />
|
<el-table-column property="title" label="title" width="200" />
|
||||||
<el-table-column property="event_info" label="eventInfo" />
|
<el-table-column property="reminder_info" label="eventInfo" />
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
<el-dialog v-model="dialogFormVisible" title="待办事项">
|
<el-dialog v-model="dialogFormVisible" title="待办事项">
|
||||||
<el-form :model="form">
|
<el-form :model="form">
|
||||||
<el-form-item label="日期" :label-width="formLabelWidth">
|
<el-form-item label="日期" :label-width="formLabelWidth">
|
||||||
<span>{{ form.event_date }}</span>
|
<span>{{ form.reminder_date }}</span>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="title" :label-width="formLabelWidth">
|
<el-form-item label="title" :label-width="formLabelWidth">
|
||||||
<el-input v-model="form.title" autocomplete="off" />
|
<el-input v-model="form.title" autocomplete="off" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="eventInfo" :label-width="formLabelWidth">
|
<el-form-item label="eventInfo" :label-width="formLabelWidth">
|
||||||
<el-input v-model="form.event_info" autocomplete="off" type="textarea" />
|
<el-input v-model="form.reminder_info" autocomplete="off" type="textarea" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="alert" :label-width="formLabelWidth">
|
<el-form-item label="alert" :label-width="formLabelWidth">
|
||||||
<el-checkbox-group v-model="checkedalerts" :min="0" :max="2">
|
<el-checkbox-group v-model="checkedalerts" :min="0" :max="2">
|
||||||
@@ -73,9 +73,10 @@ const holidays = reactive<any>({})
|
|||||||
const eventDataList = reactive<Event[]>([])
|
const eventDataList = reactive<Event[]>([])
|
||||||
const eventDataObject = reactive<any>({})
|
const eventDataObject = reactive<any>({})
|
||||||
const form = reactive({
|
const form = reactive({
|
||||||
event_date: '',
|
reminder_date: '',
|
||||||
title: '',
|
title: '',
|
||||||
event_info: '',
|
reminder_info: '',
|
||||||
|
|
||||||
})
|
})
|
||||||
// -- REF OBJECT --
|
// -- REF OBJECT --
|
||||||
const value = ref(new Date())
|
const value = ref(new Date())
|
||||||
@@ -89,7 +90,7 @@ const alerts = ['email', 'messageBox', '手机短信', '微信通知']
|
|||||||
|
|
||||||
// -- EVENT DEFINITION
|
// -- EVENT DEFINITION
|
||||||
const onclick = (date: Date) => {
|
const onclick = (date: Date) => {
|
||||||
form.event_date = toLocalDate(date)
|
form.reminder_date = toLocalDate(date)
|
||||||
dialogFormVisible.value = true
|
dialogFormVisible.value = true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,7 +130,7 @@ onMounted(async () => {
|
|||||||
eventDataList.length = 0
|
eventDataList.length = 0
|
||||||
response.data.forEach((record: Event) => {
|
response.data.forEach((record: Event) => {
|
||||||
eventDataList.push(record)
|
eventDataList.push(record)
|
||||||
eventDataObject[record.event_date] = record.title
|
eventDataObject[record.reminder_date] = record.title
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
isComponentActive.value = true
|
isComponentActive.value = true
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ import EchartsLine from '@/view/dashboard/dashboardCharts/index.vue'
|
|||||||
import DashboardTable from '@/view/dashboard/dashboardTable/index.vue'
|
import DashboardTable from '@/view/dashboard/dashboardTable/index.vue'
|
||||||
import { useRouter } from 'vue-router'
|
import { useRouter } from 'vue-router'
|
||||||
import { useWeatherInfo } from '@/service/weather'
|
import { useWeatherInfo } from '@/service/weather'
|
||||||
import { countBlogs } from "@/api/blog"
|
import { countWiki } from "@/api/blog"
|
||||||
import { bookmarks_count } from "@/api/bookmark"
|
import { bookmarks_count } from "@/api/bookmark"
|
||||||
|
|
||||||
// -- IMPORT --
|
// -- IMPORT --
|
||||||
@@ -146,9 +146,9 @@ const toolCards = ref([
|
|||||||
bg: 'rgba(185, 192, 255,.3)'
|
bg: 'rgba(185, 192, 255,.3)'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '代码生成器',
|
label: 'scrum',
|
||||||
icon: 'cpu',
|
icon: 'cpu',
|
||||||
name: 'autoCode',
|
name: 'scrum',
|
||||||
color: '#ffd666',
|
color: '#ffd666',
|
||||||
bg: 'rgba(255, 214, 102,.3)'
|
bg: 'rgba(255, 214, 102,.3)'
|
||||||
},
|
},
|
||||||
@@ -182,6 +182,9 @@ const toTarget = (name: string) => {
|
|||||||
case 'wiki':
|
case 'wiki':
|
||||||
window.open('https://www.violin-home.cn/docs#/guan/', '_blank')
|
window.open('https://www.violin-home.cn/docs#/guan/', '_blank')
|
||||||
break;
|
break;
|
||||||
|
case 'scrum':
|
||||||
|
window.open('https://www.leangoo.com/kanban/board_list?#/home/list', '_blank')
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -192,7 +195,7 @@ setInterval(() => {
|
|||||||
time.value = $moment().format("YYYY年MM月DD日 HH:mm:ss")
|
time.value = $moment().format("YYYY年MM月DD日 HH:mm:ss")
|
||||||
}, 1000)
|
}, 1000)
|
||||||
|
|
||||||
countBlogs().then((resp) => {
|
countWiki().then((resp) => {
|
||||||
const data = resp.data
|
const data = resp.data
|
||||||
statistics.value.wiki_count = data.count
|
statistics.value.wiki_count = data.count
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user