diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/utils/DruidDataSourceUtil.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/utils/DruidDataSourceUtil.java index 441868e7..119ac075 100644 --- a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/utils/DruidDataSourceUtil.java +++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/utils/DruidDataSourceUtil.java @@ -4,7 +4,6 @@ import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.pool.DruidPooledConnection; import com.zyplayer.doc.core.exception.ConfirmException; -import java.sql.SQLException; import java.util.concurrent.atomic.AtomicLong; public class DruidDataSourceUtil { @@ -31,7 +30,8 @@ public class DruidDataSourceUtil { // 重试3次,失败退出,源码里是errorCount > connectionErrorRetryAttempts,所以写成2就是3次、、、 // CreateConnectionThread 源码在这个类里面 dataSource.setConnectionErrorRetryAttempts(2); - dataSource.setBreakAfterAcquireFailure(true); + dataSource.setBreakAfterAcquireFailure(false);// 连接出错后不退出,等待下个定时周期重试 + dataSource.setTimeBetweenConnectErrorMillis(180000);// 连接出错后重试时间间隔3分钟 dataSource.setName("zyplayer-doc-db-" + nameId.incrementAndGet()); if (url.contains("oracle")) { dataSource.setValidationQuery("select 1 from dual"); diff --git a/zyplayer-doc-ui/wiki-ui/package-lock.json b/zyplayer-doc-ui/wiki-ui/package-lock.json index 01ecad7f..5eba9c45 100644 --- a/zyplayer-doc-ui/wiki-ui/package-lock.json +++ b/zyplayer-doc-ui/wiki-ui/package-lock.json @@ -6450,6 +6450,11 @@ } } }, + "jquery": { + "version": "3.5.1", + "resolved": "https://registry.npm.taobao.org/jquery/download/jquery-3.5.1.tgz", + "integrity": "sha1-17TQjhv9uGrS8aPQOeoXMEcXq7U=" + }, "js-cookie": { "version": "2.2.1", "resolved": "https://registry.npm.taobao.org/js-cookie/download/js-cookie-2.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-cookie%2Fdownload%2Fjs-cookie-2.2.1.tgz", diff --git a/zyplayer-doc-ui/wiki-ui/package.json b/zyplayer-doc-ui/wiki-ui/package.json index e81a90e6..e1c600cf 100644 --- a/zyplayer-doc-ui/wiki-ui/package.json +++ b/zyplayer-doc-ui/wiki-ui/package.json @@ -10,15 +10,16 @@ "axios": "^0.19.0", "core-js": "^3.3.2", "echarts": "^4.5.0", + "element-ui": "^2.10.0", + "jquery": "^3.5.1", "js-cookie": "^2.2.1", "pouchdb": "^7.1.1", + "sql-formatter": "^2.3.3", "vue": "^2.6.10", "vue-axios": "^2.1.5", "vue-hljs": "^1.1.2", "vue-router": "^3.1.3", "vuex": "^3.1.2", - "element-ui": "^2.10.0", - "sql-formatter": "^2.3.3", "wangeditor": "^3.1.1" }, "devDependencies": { diff --git a/zyplayer-doc-ui/wiki-ui/src/App.vue b/zyplayer-doc-ui/wiki-ui/src/App.vue index 8b8c4ef7..d2da87c0 100644 --- a/zyplayer-doc-ui/wiki-ui/src/App.vue +++ b/zyplayer-doc-ui/wiki-ui/src/App.vue @@ -1,461 +1,28 @@ diff --git a/zyplayer-doc-ui/wiki-ui/src/common/lib/common.js b/zyplayer-doc-ui/wiki-ui/src/common/lib/common.js index 95254514..cb0685fa 100644 --- a/zyplayer-doc-ui/wiki-ui/src/common/lib/common.js +++ b/zyplayer-doc-ui/wiki-ui/src/common/lib/common.js @@ -23,7 +23,7 @@ export default { } else if (res.data.errCode == 400) { vue.$message('请先登录'); var href = encodeURIComponent(window.location.href); - window.location = apimix.apilist1.HOST + "#/user/login?redirect=" + href; + window.location = process.env.VUE_APP_BASE_API + "#/user/login?redirect=" + href; } else if (res.data.errCode == 402) { vue.$router.push("/common/noAuth"); } else if (res.data.errCode !== 200) { diff --git a/zyplayer-doc-ui/wiki-ui/src/components/editor/MgEditor.vue b/zyplayer-doc-ui/wiki-ui/src/components/editor/MgEditor.vue new file mode 100644 index 00000000..8ff70363 --- /dev/null +++ b/zyplayer-doc-ui/wiki-ui/src/components/editor/MgEditor.vue @@ -0,0 +1,199 @@ + + + + + diff --git a/zyplayer-doc-ui/wiki-ui/src/components/editor/css/MgEditor.css b/zyplayer-doc-ui/wiki-ui/src/components/editor/css/MgEditor.css new file mode 100644 index 00000000..910240fd --- /dev/null +++ b/zyplayer-doc-ui/wiki-ui/src/components/editor/css/MgEditor.css @@ -0,0 +1,147 @@ + +.mg-editor { + padding: 10px; + height: 500px; + width: 100%; + font-size: 16px; + box-sizing: border-box; +} + +.mg-editor:focus { + outline: none; +} + +.mg-editor:empty::before { + content: attr(placeholder); + font-size: 14px; + color: #ccc; + line-height: 20px; + padding-top: 10px; +} + +.mg-editor-toolbar { + position: fixed; + top: 0; + left: 0; + display: none; + z-index: 1; + padding: 5px 6px; + background-color: #fff; + border-radius: 4px; + border: 1px solid #dee0e3; + user-select: none; + box-shadow: 0 6px 24px 0 rgba(31, 35, 41, .1); +} + +.mg-editor-toolbar .iconfont { + padding: 5px; + font-size: 24px; + cursor: pointer; +} + + +.mg-editor .list-code { + font-size: 14px !important; + line-height: 1.68 !important +} + +.mg-editor .list-code code { + border: 1px solid #dee0e3; + display: block; + background-color: #f5f6f7; + line-height: 1.5; + padding: 6px 8px 3px 45px; + font-size: 14px; + word-break: break-word; + margin: 5px 0; +} + +.mg-editor .list-code code .list-code-span { + padding-top: 0 !important; + padding-bottom: 0 !important; + line-height: 1.5; +} + +.mg-editor .list-code code:before { + content: attr(start); + display: inline-block; + font-size: 14px; + text-align: right; + direction: rtl; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + overflow: visible; + white-space: nowrap; + width: 0; + margin-left: -11px; + padding-right: 11px; + font-weight: 400; + background-color: transparent; + line-height: 1.5; + color: #8f959e; + vertical-align: bottom; +} + +.mg-editor .list-code code + code { + border-top: none; + margin-top: -9px; +} + +.mg-editor .ace-editor .list-code code:before { + left: 4px; +} + +/*Hn样式-S-*/ +/*我很懒,样式都是抄的*/ +.mg-editor .head-h1, .mg-editor .head-h2, .mg-editor .head-h3, .mg-editor .head-h4, .mg-editor .head-h5, .mg-editor .head-h6, .mg-editor .head-h7, .mg-editor .head-h8, .mg-editor .head-h9 { + font-weight: 600; + letter-spacing: .02em; + line-height: 1.65 +} + +.mg-editor .head-h1 { + font-size: 26px; + margin-bottom: 10px +} + +.mg-editor .head-h1 .collapsable-section-handle { + font-size: 26px +} + +.mg-editor .head-h2 { + font-size: 22px; + margin-bottom: 8px +} + +.mg-editor .head-h2 .collapsable-section-handle { + font-size: 22px +} + +.mg-editor .head-h3 { + font-size: 20px; + margin-bottom: 8px +} + +.mg-editor .head-h3 .collapsable-section-handle { + font-size: 20px +} + +.mg-editor .head-h4 { + font-size: 18px; + margin-bottom: 8px +} + +.mg-editor .head-h4 .collapsable-section-handle { + font-size: 18px +} + +.mg-editor .head-h5,.mg-editor .head-h6,.mg-editor .head-h7,.mg-editor .head-h8,.mg-editor .head-h9 { + font-size: 16px; + margin-bottom: 6px +} + +.mg-editor .head-h5 .collapsable-section-handle,.mg-editor .head-h6 .collapsable-section-handle,.mg-editor .head-h7 .collapsable-section-handle,.mg-editor .head-h8 .collapsable-section-handle,.mg-editor .head-h9 .collapsable-section-handle { + font-size: 16px +} + +/*Hn样式-E-*/ diff --git a/zyplayer-doc-ui/wiki-ui/src/components/editor/css/MgEditorIconfont.css b/zyplayer-doc-ui/wiki-ui/src/components/editor/css/MgEditorIconfont.css new file mode 100644 index 00000000..d20e0fe5 --- /dev/null +++ b/zyplayer-doc-ui/wiki-ui/src/components/editor/css/MgEditorIconfont.css @@ -0,0 +1,117 @@ +@font-face { + font-family: "iconfont"; + src: url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'); /* iOS 4.1- */ +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-h2:before { + content: "\e503"; +} + +.icon-h1:before { + content: "\e504"; +} + +.icon-h3:before { + content: "\e505"; +} + +.icon-hn:before { + content: "\e506"; +} + +.icon-h4:before { + content: "\e507"; +} + +.icon-h5:before { + content: "\e508"; +} + +.icon-h6:before { + content: "\e509"; +} + +.icon-h7:before { + content: "\e50b"; +} + +.icon-h8:before { + content: "\e50c"; +} + +.icon-h9:before { + content: "\e50d"; +} + +.icon-border:before { + content: "\e50e"; +} + +.icon-delete:before { + content: "\e50f"; +} + +.icon-backcolor:before { + content: "\e510"; +} + +.icon-orderedlist:before { + content: "\e511"; +} + +.icon-unorderedlist:before { + content: "\e512"; +} + +.icon-checkbox:before { + content: "\e513"; +} + +.icon-link:before { + content: "\e514"; +} + +.icon-more:before { + content: "\e515"; +} + +.icon-underline:before { + content: "\e516"; +} + +.icon-aligncenter:before { + content: "\e517"; +} + +.icon-alignleft:before { + content: "\e518"; +} + +.icon-blockquote:before { + content: "\e519"; +} + +.icon-italic:before { + content: "\e51a"; +} + +.icon-alignright:before { + content: "\e51b"; +} + +.icon-inlinecode:before { + content: "\e51c"; +} + +.icon-inlinecodelist:before { + content: "\e51d"; +} + diff --git a/zyplayer-doc-ui/wiki-ui/src/components/editor/toolbar/common.js b/zyplayer-doc-ui/wiki-ui/src/components/editor/toolbar/common.js new file mode 100644 index 00000000..9f63acb3 --- /dev/null +++ b/zyplayer-doc-ui/wiki-ui/src/components/editor/toolbar/common.js @@ -0,0 +1,19 @@ +export default { + getSelectionContainer(judgeRoot) { + let container = window.getSelection().getRangeAt(0).commonAncestorContainer; + if (container.nodeType != 1) { + container = container.parentNode; + } + if (container.nodeType != 1 || (judgeRoot && this.isRootBox(container))) { + return null; + } + return container; + }, + isRootBox(container) { + return this.domHaveClass(container, "mg-editor"); + }, + domHaveClass(container, cls) { + return container && container.classList && container.classList.contains(cls); + }, +} + diff --git a/zyplayer-doc-ui/wiki-ui/src/components/editor/toolbar/hn.js b/zyplayer-doc-ui/wiki-ui/src/components/editor/toolbar/hn.js new file mode 100644 index 00000000..6ef9e619 --- /dev/null +++ b/zyplayer-doc-ui/wiki-ui/src/components/editor/toolbar/hn.js @@ -0,0 +1,20 @@ +import toolbarCommon from './common'; + +const $ = require("jquery"); + +export default { + toolbarHn(hn) { + // 找到内容,生成div把每一行包住 + let container = toolbarCommon.getSelectionContainer(true); + if (container == null) return; + let innerTextArr = container.innerText.split("\n"); + if (innerTextArr.length >= 1) { + innerTextArr.filter(item => !!item).forEach(item => { + $(container).before(`
${item}
`); + }); + } + // 最后把当前行移出掉 + container.remove(); + } +} + diff --git a/zyplayer-doc-ui/wiki-ui/src/components/editor/toolbar/inlineCodeList.js b/zyplayer-doc-ui/wiki-ui/src/components/editor/toolbar/inlineCodeList.js new file mode 100644 index 00000000..94ac036f --- /dev/null +++ b/zyplayer-doc-ui/wiki-ui/src/components/editor/toolbar/inlineCodeList.js @@ -0,0 +1,36 @@ +import toolbarCommon from './common'; +import utilBase from '../util/util'; + +const $ = require("jquery"); + +export default { + createCodeListBlock() { + let containerNow = window.getSelection().getRangeAt(0).commonAncestorContainer; + let divEle = this.findRootDomOnNotCode(containerNow); + if (divEle == null) return; + divEle.classList.add("list-code"); + let codeEle = $(``)[0]; + $(divEle).append(codeEle); + // 光标放到代码框里 + utilBase.moveSelectionRange(codeEle, 0, 0); + }, + findRootDomOnNotCode(container) { + container = container.nodeType == 3 ? container.parentNode : container; + // 如果自己是root,创建一个div放最后 + if (toolbarCommon.isRootBox(container)) { + let lastEle = document.createElement("div"); + container.appendChild(lastEle); + return lastEle; + } + // 如果父元素是root,添加一个新的div,再把自己移除 + let parentNode = container.parentNode; + if (toolbarCommon.isRootBox(parentNode)) { + let lastEle = document.createElement("div"); + parentNode.insertBefore(lastEle, container); + container.remove(); + return lastEle; + } + // 在非根结点里面输入```无效 + return null; + }, +} diff --git a/zyplayer-doc-ui/wiki-ui/src/components/editor/util/MgEditor.js.vue.old b/zyplayer-doc-ui/wiki-ui/src/components/editor/util/MgEditor.js.vue.old new file mode 100644 index 00000000..d4e076c6 --- /dev/null +++ b/zyplayer-doc-ui/wiki-ui/src/components/editor/util/MgEditor.js.vue.old @@ -0,0 +1,258 @@ + + + + diff --git a/zyplayer-doc-ui/wiki-ui/src/components/editor/util/past.js b/zyplayer-doc-ui/wiki-ui/src/components/editor/util/past.js new file mode 100644 index 00000000..37d39d2c --- /dev/null +++ b/zyplayer-doc-ui/wiki-ui/src/components/editor/util/past.js @@ -0,0 +1,87 @@ +/** + * 本文件内容拷贝自:https://github.com/wangfupeng1988/wangEditor + * zyplayer-doc在此基础上有稍作修改 + */ + +import utilBase from './util' + +export default { + // 获取粘贴的纯文本 + getPasteText(e) { + const clipboardData = e.clipboardData || (e.originalEvent && e.originalEvent.clipboardData); + let pasteText; + if (clipboardData == null) { + pasteText = window.clipboardData && window.clipboardData.getData('text'); + } else { + pasteText = clipboardData.getData('text/plain'); + } + let resultStr = ''; + let htmlStr = utilBase.replaceHtmlSymbol(pasteText); + htmlStr.split('
').forEach(item => { + if (resultStr) resultStr += '
'; + resultStr += item.trim(); + }); + return resultStr; + }, + // 获取粘贴的html + getPasteHtml(e, filterStyle, ignoreImg) { + const clipboardData = e.clipboardData || (e.originalEvent && e.originalEvent.clipboardData); + let pasteText, pasteHtml; + if (clipboardData == null) { + pasteText = window.clipboardData && window.clipboardData.getData('text'); + } else { + pasteText = clipboardData.getData('text/plain'); + pasteHtml = clipboardData.getData('text/html'); + } + if (!pasteHtml && pasteText) { + pasteHtml = utilBase.replaceHtmlSymbol(pasteText); + } + if (!pasteHtml) { + return; + } + // 过滤word中状态过来的无用字符 + const docSplitHtml = pasteHtml.split(''); + if (docSplitHtml.length === 2) { + pasteHtml = docSplitHtml[0]; + } + // 过滤无用标签 + pasteHtml = pasteHtml.replace(/<(meta|script|link).+?>/igm, ''); + // 去掉注释 + pasteHtml = pasteHtml.replace(//mg, ''); + // 过滤 data-xxx 属性 + pasteHtml = pasteHtml.replace(/\s?data-.+?=('|").+?('|")/igm, ''); + if (ignoreImg) { + // 忽略图片 + pasteHtml = pasteHtml.replace(//igm, ''); + } + if (filterStyle) { + // 过滤样式 + pasteHtml = pasteHtml.replace(/\s?(class|style)=('|").*?('|")/igm, ''); + } else { + // 保留样式 + pasteHtml = pasteHtml.replace(/\s?class=('|").*?('|")/igm, ''); + } + return pasteHtml + }, + // 获取粘贴的图片文件 + getPasteImgs(e) { + const result = []; + const txt = utilBase.getPasteText(e); + if (txt) { + // 有文字,就忽略图片 + return result; + } + const clipboardData = e.clipboardData || (e.originalEvent && e.originalEvent.clipboardData) || {}; + const items = clipboardData.items; + if (!items) { + return result; + } + utilBase.objForEach(items, (key, value) => { + const type = value.type; + if (/image/i.test(type)) { + result.push(value.getAsFile()); + } + }); + return result; + }, +} diff --git a/zyplayer-doc-ui/wiki-ui/src/components/editor/util/util.js b/zyplayer-doc-ui/wiki-ui/src/components/editor/util/util.js new file mode 100644 index 00000000..cc5d2ab5 --- /dev/null +++ b/zyplayer-doc-ui/wiki-ui/src/components/editor/util/util.js @@ -0,0 +1,72 @@ +/** + * 本文件内容拷贝自:https://github.com/wangfupeng1988/wangEditor + * zyplayer-doc在此基础上有稍作修改 + */ + +// 和 UA 相关的属性 + +export default { + _ua: navigator.userAgent, + // 是否 webkit + isWebkit: function () { + const reg = /webkit/i; + return reg.test(this._ua); + }, + // 是否 IE + isIE: function () { + return 'ActiveXObject' in window; + }, + // 遍历对象 + objForEach(obj, fn) { + let key, result; + for (key in obj) { + if (obj.hasOwnProperty(key)) { + result = fn.call(obj, key, obj[key]); + if (result === false) { + break; + } + } + } + }, + // 遍历类数组 + arrForEach(fakeArr, fn) { + let i, item, result; + const length = fakeArr.length || 0; + for (i = 0; i < length; i++) { + item = fakeArr[i]; + result = fn.call(fakeArr, item, i); + if (result === false) { + break; + } + } + }, + // 获取随机数 + getRandom(prefix) { + return prefix + Math.random().toString().slice(2); + }, + // 替换 html 特殊字符 + replaceHtmlSymbol(html) { + if (!html) return ''; + return html.replace(//gm, '>') + .replace(/"/gm, '"') + .replace(/(\r\n|\r|\n)/g, '
'); + }, + // 返回百分比的格式 + percentFormat(number) { + number = (parseInt(number * 100)); + return number + '%'; + }, + // 判断是不是 function + isFunction(fn) { + return typeof fn === 'function'; + }, + moveSelectionRange(dom, start, end) { + let rangeNew = document.createRange(); + rangeNew.setStart(dom, start); + rangeNew.setEnd(dom, end); + window.getSelection().removeAllRanges(); + window.getSelection().addRange(rangeNew); + }, +} + diff --git a/zyplayer-doc-ui/wiki-ui/src/components/layouts/GlobalLayout.vue b/zyplayer-doc-ui/wiki-ui/src/components/layouts/GlobalLayout.vue new file mode 100644 index 00000000..7fe2d1fa --- /dev/null +++ b/zyplayer-doc-ui/wiki-ui/src/components/layouts/GlobalLayout.vue @@ -0,0 +1,461 @@ + + + + + diff --git a/zyplayer-doc-ui/wiki-ui/src/components/layouts/PageView.vue b/zyplayer-doc-ui/wiki-ui/src/components/layouts/PageView.vue deleted file mode 100644 index cbc88bd8..00000000 --- a/zyplayer-doc-ui/wiki-ui/src/components/layouts/PageView.vue +++ /dev/null @@ -1,31 +0,0 @@ - - - - - diff --git a/zyplayer-doc-ui/wiki-ui/src/main.js b/zyplayer-doc-ui/wiki-ui/src/main.js index 135dfe87..35e7f4a2 100644 --- a/zyplayer-doc-ui/wiki-ui/src/main.js +++ b/zyplayer-doc-ui/wiki-ui/src/main.js @@ -19,8 +19,8 @@ Vue.prototype.$store = store; const router = new VueRouter({routes}); // 路由跳转时判断处理 router.beforeEach((to, from, next) => { - if (to.meta.title) { - document.title = to.meta.name; + if (to.name) { + document.title = to.name; } store.commit('global/setFullscreen', !!to.meta.fullscreen); next(); diff --git a/zyplayer-doc-ui/wiki-ui/src/routes.js b/zyplayer-doc-ui/wiki-ui/src/routes.js index aa497447..5a65a6b0 100644 --- a/zyplayer-doc-ui/wiki-ui/src/routes.js +++ b/zyplayer-doc-ui/wiki-ui/src/routes.js @@ -1,37 +1,20 @@ -import Home from './views/home/Home.vue' - -import UserLogin from './views/user/Login.vue' -import UserMyInfo from './views/user/MyInfo.vue' -import CommonRouterView from './components/layouts/PageView' - -import PageShow from './views/page/Show.vue' -import PageEdit from './views/page/Edit.vue' -import PageSearch from './views/page/Search.vue' - -import CommonNoAuth from './views/common/NoAuth.vue' +import GlobalLayout from './components/layouts/GlobalLayout' let routes = [ + {path: '/', redirect: '/home'}, + {path: '/user/login', name: '系统登录', component: () => import('@/views/user/Login')}, + {path: '/page/search', name: '全局搜索', component: () => import('@/views/page/Search')}, + {path: '/common/noAuth', name: '没有权限', component: () => import('@/views/common/NoAuth')}, + {path: '/page/editorTest', name: '编辑内容', component: () => import('@/views/page/EditorTest')}, { - path: '/home', - component: Home, - name: '主页', - meta: { - requireAuth: true, - } - }, { path: '/', - redirect: '/home' - }, { - path: '/', - name: '用户管理', - component: CommonRouterView, + name: '页面管理', + component: GlobalLayout, children: [ - {path: '/user/login', name: '系统登录', component: UserLogin, meta: {fullscreen: true}}, - {path: '/user/myInfo', name: '我的信息', component: UserMyInfo}, - {path: '/page/show', name: '页面内容展示', component: PageShow}, - {path: '/page/edit', name: '编辑内容', component: PageEdit}, - {path: '/page/search', name: '全局搜索', component: PageSearch, meta: {fullscreen: true}}, - {path: '/common/noAuth', name: '没有权限', component: CommonNoAuth}, + {path: '/home', name: '主页', component: () => import('@/views/home/Home')}, + {path: '/user/myInfo', name: '我的信息', component: () => import('@/views/user/MyInfo')}, + {path: '/page/show', name: '页面内容展示', component: () => import('@/views/page/Show')}, + {path: '/page/edit', name: '编辑内容', component: () => import('@/views/page/Edit')}, ] } ]; diff --git a/zyplayer-doc-ui/wiki-ui/src/views/home/Home.vue b/zyplayer-doc-ui/wiki-ui/src/views/home/Home.vue index 6f0125da..aab3a794 100644 --- a/zyplayer-doc-ui/wiki-ui/src/views/home/Home.vue +++ b/zyplayer-doc-ui/wiki-ui/src/views/home/Home.vue @@ -2,10 +2,10 @@
- + - +
暂无数据
@@ -52,8 +52,13 @@ pageNum: 1, pageSize: 20, }, - spacePageNews:[], - newsTypes:["最近更新", "最新创建", "查看最多", "点赞最多", "查看+点赞最多"], + spacePageNews: [], + // 列表类型 + newsTypesArr: [ + {key: 1, val: '最近更新'}, {key: 2, val: '最新创建'}, {key: 3, val: '查看最多'}, + {key: 4, val: '点赞最多'}, {key: 5, val: '查看+点赞最多'} + ], + newsTypesMap: {}, }; }, beforeRouteUpdate(to, from, next) { @@ -92,6 +97,8 @@ if (!!this.searchParam.spaceId) { this.getSpacePageNews(); } + this.newsTypesMap = {}; + this.newsTypesArr.forEach(item => this.newsTypesMap[item.key] = item.val); }, } } diff --git a/zyplayer-doc-ui/wiki-ui/src/views/page/EditorTest.vue b/zyplayer-doc-ui/wiki-ui/src/views/page/EditorTest.vue new file mode 100644 index 00000000..ee422205 --- /dev/null +++ b/zyplayer-doc-ui/wiki-ui/src/views/page/EditorTest.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/zyplayer-doc-ui/wiki-ui/src/views/page/Show.vue b/zyplayer-doc-ui/wiki-ui/src/views/page/Show.vue index b50d8fa9..f8ba0e01 100644 --- a/zyplayer-doc-ui/wiki-ui/src/views/page/Show.vue +++ b/zyplayer-doc-ui/wiki-ui/src/views/page/Show.vue @@ -9,7 +9,7 @@ 创建:{{wikiPage.createUserName}} {{wikiPage.createTime}}   修改:{{wikiPage.updateUserName}} {{wikiPage.updateTime}}
-