diff --git a/.env.development b/.env.development
index de583d0940..1aadabadf8 100644
--- a/.env.development
+++ b/.env.development
@@ -3,3 +3,7 @@ ENV = 'development'
# base api
VUE_APP_BASE_API = '/dev-api'
+
+
+# 后端服务地址
+VITE_APP_SERVICE_API = 'http://192.168.123.104:8000/api/v1'
diff --git a/package.json b/package.json
index 24138249e2..fd4ed558bc 100644
--- a/package.json
+++ b/package.json
@@ -21,6 +21,8 @@
"normalize.css": "7.0.0",
"nprogress": "0.2.0",
"path-to-regexp": "2.4.0",
+ "tui-editor": "^1.3.3",
+ "vditor": "^3.10.3",
"vue": "2.6.10",
"vue-router": "3.0.6",
"vuex": "3.1.0"
@@ -40,6 +42,7 @@
"eslint": "6.7.2",
"eslint-plugin-vue": "6.2.2",
"html-webpack-plugin": "3.2.0",
+ "less-loader": "^7.3.0",
"mockjs": "1.0.1-beta3",
"runjs": "4.3.2",
"sass": "1.26.8",
diff --git a/src/api/file.js b/src/api/file.js
new file mode 100644
index 0000000000..2e2d01a555
--- /dev/null
+++ b/src/api/file.js
@@ -0,0 +1,76 @@
+import request from '@/utils/request'
+
+export function getFileList(data) {
+ return request({
+ url: '/file/list/undefined',
+ method: 'get'
+ })
+}
+
+export function getFileListById(id) {
+ return request({
+ url: `/file/${id}/list`,
+ method: 'get'
+ })
+}
+
+export function getFileContent(id) {
+ return request({
+ url: `/file/${id}/content`,
+ method: 'get'
+ })
+}
+
+export function updateFileContent(data) {
+ return request({
+ url: `/file/${data.file_id}/content`,
+ method: 'post',
+ data: data
+ })
+}
+
+export function createFile(data) {
+ return request({
+ url: `/file/${data.parent_id}/create`,
+ method: 'post',
+ data: data
+ })
+}
+
+export function createFolder(data) {
+ return request({
+ url: `/file/${data.parent_id}/folder`,
+ method: 'post',
+ data: data
+ })
+}
+
+export function deleteFile(id) {
+ return request({
+ url: `/file/${id}/delete`,
+ method: 'delete'
+ })
+}
+
+export function getFileInfo(id) {
+ return request({
+ url: `/file/${id}/info`,
+ method: 'get'
+ })
+}
+
+export function rename(data) {
+ return request({
+ url: `/file/${data.file_id}/rename`,
+ method: 'post',
+ data: data
+ })
+}
+
+export function operateFile(data) {
+ return request({
+ url: `/file/${data.parent_id}/operate`,
+ method: 'post',
+ data: data
+ })
+}
diff --git a/src/api/permission.js b/src/api/permission.js
new file mode 100644
index 0000000000..95a126de1c
--- /dev/null
+++ b/src/api/permission.js
@@ -0,0 +1,16 @@
+import request from '@/utils/request'
+
+export function listPermission(id) {
+ return request({
+ url: `/permission/list/${id}`,
+ method: 'get'
+ })
+}
+
+export function updatePermission(data) {
+ return request({
+ url: `/permission/update`,
+ method: 'post',
+ data: data
+ })
+}
diff --git a/src/api/user.js b/src/api/user.js
index 8ff4389dba..35cd5104af 100644
--- a/src/api/user.js
+++ b/src/api/user.js
@@ -2,23 +2,29 @@ import request from '@/utils/request'
export function login(data) {
return request({
- url: '/vue-admin-template/user/login',
+ url: '/user/login',
method: 'post',
data
})
}
-export function getInfo(token) {
+export function getInfo() {
return request({
- url: '/vue-admin-template/user/info',
- method: 'get',
- params: { token }
+ url: '/user/info',
+ method: 'get'
})
}
export function logout() {
return request({
- url: '/vue-admin-template/user/logout',
+ url: '/user/logout',
method: 'post'
})
}
+
+export function listUser() {
+ return request({
+ url: '/user/list',
+ method: 'get'
+ })
+}
diff --git a/src/assets/font/iconfont/demo.css b/src/assets/font/iconfont/demo.css
new file mode 100644
index 0000000000..a67054a0a0
--- /dev/null
+++ b/src/assets/font/iconfont/demo.css
@@ -0,0 +1,539 @@
+/* Logo 字体 */
+@font-face {
+ font-family: "iconfont logo";
+ src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
+ src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
+ url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
+ url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
+ url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
+}
+
+.logo {
+ font-family: "iconfont logo";
+ font-size: 160px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+/* tabs */
+.nav-tabs {
+ position: relative;
+}
+
+.nav-tabs .nav-more {
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ height: 42px;
+ line-height: 42px;
+ color: #666;
+}
+
+#tabs {
+ border-bottom: 1px solid #eee;
+}
+
+#tabs li {
+ cursor: pointer;
+ width: 100px;
+ height: 40px;
+ line-height: 40px;
+ text-align: center;
+ font-size: 16px;
+ border-bottom: 2px solid transparent;
+ position: relative;
+ z-index: 1;
+ margin-bottom: -1px;
+ color: #666;
+}
+
+
+#tabs .active {
+ border-bottom-color: #f00;
+ color: #222;
+}
+
+.tab-container .content {
+ display: none;
+}
+
+/* 页面布局 */
+.main {
+ padding: 30px 100px;
+ width: 960px;
+ margin: 0 auto;
+}
+
+.main .logo {
+ color: #333;
+ text-align: left;
+ margin-bottom: 30px;
+ line-height: 1;
+ height: 110px;
+ margin-top: -50px;
+ overflow: hidden;
+ *zoom: 1;
+}
+
+.main .logo a {
+ font-size: 160px;
+ color: #333;
+}
+
+.helps {
+ margin-top: 40px;
+}
+
+.helps pre {
+ padding: 20px;
+ margin: 10px 0;
+ border: solid 1px #e7e1cd;
+ background-color: #fffdef;
+ overflow: auto;
+}
+
+.icon_lists {
+ width: 100% !important;
+ overflow: hidden;
+ *zoom: 1;
+}
+
+.icon_lists li {
+ width: 100px;
+ margin-bottom: 10px;
+ margin-right: 20px;
+ text-align: center;
+ list-style: none !important;
+ cursor: default;
+}
+
+.icon_lists li .code-name {
+ line-height: 1.2;
+}
+
+.icon_lists .icon {
+ display: block;
+ height: 100px;
+ line-height: 100px;
+ font-size: 42px;
+ margin: 10px auto;
+ color: #333;
+ -webkit-transition: font-size 0.25s linear, width 0.25s linear;
+ -moz-transition: font-size 0.25s linear, width 0.25s linear;
+ transition: font-size 0.25s linear, width 0.25s linear;
+}
+
+.icon_lists .icon:hover {
+ font-size: 100px;
+}
+
+.icon_lists .svg-icon {
+ /* 通过设置 font-size 来改变图标大小 */
+ width: 1em;
+ /* 图标和文字相邻时,垂直对齐 */
+ vertical-align: -0.15em;
+ /* 通过设置 color 来改变 SVG 的颜色/fill */
+ fill: currentColor;
+ /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
+ normalize.css 中也包含这行 */
+ overflow: hidden;
+}
+
+.icon_lists li .name,
+.icon_lists li .code-name {
+ color: #666;
+}
+
+/* markdown 样式 */
+.markdown {
+ color: #666;
+ font-size: 14px;
+ line-height: 1.8;
+}
+
+.highlight {
+ line-height: 1.5;
+}
+
+.markdown img {
+ vertical-align: middle;
+ max-width: 100%;
+}
+
+.markdown h1 {
+ color: #404040;
+ font-weight: 500;
+ line-height: 40px;
+ margin-bottom: 24px;
+}
+
+.markdown h2,
+.markdown h3,
+.markdown h4,
+.markdown h5,
+.markdown h6 {
+ color: #404040;
+ margin: 1.6em 0 0.6em 0;
+ font-weight: 500;
+ clear: both;
+}
+
+.markdown h1 {
+ font-size: 28px;
+}
+
+.markdown h2 {
+ font-size: 22px;
+}
+
+.markdown h3 {
+ font-size: 16px;
+}
+
+.markdown h4 {
+ font-size: 14px;
+}
+
+.markdown h5 {
+ font-size: 12px;
+}
+
+.markdown h6 {
+ font-size: 12px;
+}
+
+.markdown hr {
+ height: 1px;
+ border: 0;
+ background: #e9e9e9;
+ margin: 16px 0;
+ clear: both;
+}
+
+.markdown p {
+ margin: 1em 0;
+}
+
+.markdown>p,
+.markdown>blockquote,
+.markdown>.highlight,
+.markdown>ol,
+.markdown>ul {
+ width: 80%;
+}
+
+.markdown ul>li {
+ list-style: circle;
+}
+
+.markdown>ul li,
+.markdown blockquote ul>li {
+ margin-left: 20px;
+ padding-left: 4px;
+}
+
+.markdown>ul li p,
+.markdown>ol li p {
+ margin: 0.6em 0;
+}
+
+.markdown ol>li {
+ list-style: decimal;
+}
+
+.markdown>ol li,
+.markdown blockquote ol>li {
+ margin-left: 20px;
+ padding-left: 4px;
+}
+
+.markdown code {
+ margin: 0 3px;
+ padding: 0 5px;
+ background: #eee;
+ border-radius: 3px;
+}
+
+.markdown strong,
+.markdown b {
+ font-weight: 600;
+}
+
+.markdown>table {
+ border-collapse: collapse;
+ border-spacing: 0px;
+ empty-cells: show;
+ border: 1px solid #e9e9e9;
+ width: 95%;
+ margin-bottom: 24px;
+}
+
+.markdown>table th {
+ white-space: nowrap;
+ color: #333;
+ font-weight: 600;
+}
+
+.markdown>table th,
+.markdown>table td {
+ border: 1px solid #e9e9e9;
+ padding: 8px 16px;
+ text-align: left;
+}
+
+.markdown>table th {
+ background: #F7F7F7;
+}
+
+.markdown blockquote {
+ font-size: 90%;
+ color: #999;
+ border-left: 4px solid #e9e9e9;
+ padding-left: 0.8em;
+ margin: 1em 0;
+}
+
+.markdown blockquote p {
+ margin: 0;
+}
+
+.markdown .anchor {
+ opacity: 0;
+ transition: opacity 0.3s ease;
+ margin-left: 8px;
+}
+
+.markdown .waiting {
+ color: #ccc;
+}
+
+.markdown h1:hover .anchor,
+.markdown h2:hover .anchor,
+.markdown h3:hover .anchor,
+.markdown h4:hover .anchor,
+.markdown h5:hover .anchor,
+.markdown h6:hover .anchor {
+ opacity: 1;
+ display: inline-block;
+}
+
+.markdown>br,
+.markdown>p>br {
+ clear: both;
+}
+
+
+.hljs {
+ display: block;
+ background: white;
+ padding: 0.5em;
+ color: #333333;
+ overflow-x: auto;
+}
+
+.hljs-comment,
+.hljs-meta {
+ color: #969896;
+}
+
+.hljs-string,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-strong,
+.hljs-emphasis,
+.hljs-quote {
+ color: #df5000;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-type {
+ color: #a71d5d;
+}
+
+.hljs-literal,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-attribute {
+ color: #0086b3;
+}
+
+.hljs-section,
+.hljs-name {
+ color: #63a35c;
+}
+
+.hljs-tag {
+ color: #333333;
+}
+
+.hljs-title,
+.hljs-attr,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-selector-attr,
+.hljs-selector-pseudo {
+ color: #795da3;
+}
+
+.hljs-addition {
+ color: #55a532;
+ background-color: #eaffea;
+}
+
+.hljs-deletion {
+ color: #bd2c00;
+ background-color: #ffecec;
+}
+
+.hljs-link {
+ text-decoration: underline;
+}
+
+/* 代码高亮 */
+/* PrismJS 1.15.0
+https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
+/**
+ * prism.js default theme for JavaScript, CSS and HTML
+ * Based on dabblet (http://dabblet.com)
+ * @author Lea Verou
+ */
+code[class*="language-"],
+pre[class*="language-"] {
+ color: black;
+ background: none;
+ text-shadow: 0 1px white;
+ font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+ text-align: left;
+ white-space: pre;
+ word-spacing: normal;
+ word-break: normal;
+ word-wrap: normal;
+ line-height: 1.5;
+
+ -moz-tab-size: 4;
+ -o-tab-size: 4;
+ tab-size: 4;
+
+ -webkit-hyphens: none;
+ -moz-hyphens: none;
+ -ms-hyphens: none;
+ hyphens: none;
+}
+
+pre[class*="language-"]::-moz-selection,
+pre[class*="language-"] ::-moz-selection,
+code[class*="language-"]::-moz-selection,
+code[class*="language-"] ::-moz-selection {
+ text-shadow: none;
+ background: #b3d4fc;
+}
+
+pre[class*="language-"]::selection,
+pre[class*="language-"] ::selection,
+code[class*="language-"]::selection,
+code[class*="language-"] ::selection {
+ text-shadow: none;
+ background: #b3d4fc;
+}
+
+@media print {
+
+ code[class*="language-"],
+ pre[class*="language-"] {
+ text-shadow: none;
+ }
+}
+
+/* Code blocks */
+pre[class*="language-"] {
+ padding: 1em;
+ margin: .5em 0;
+ overflow: auto;
+}
+
+:not(pre)>code[class*="language-"],
+pre[class*="language-"] {
+ background: #f5f2f0;
+}
+
+/* Inline code */
+:not(pre)>code[class*="language-"] {
+ padding: .1em;
+ border-radius: .3em;
+ white-space: normal;
+}
+
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+ color: slategray;
+}
+
+.token.punctuation {
+ color: #999;
+}
+
+.namespace {
+ opacity: .7;
+}
+
+.token.property,
+.token.tag,
+.token.boolean,
+.token.number,
+.token.constant,
+.token.symbol,
+.token.deleted {
+ color: #905;
+}
+
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+ color: #690;
+}
+
+.token.operator,
+.token.entity,
+.token.url,
+.language-css .token.string,
+.style .token.string {
+ color: #9a6e3a;
+ background: hsla(0, 0%, 100%, .5);
+}
+
+.token.atrule,
+.token.attr-value,
+.token.keyword {
+ color: #07a;
+}
+
+.token.function,
+.token.class-name {
+ color: #DD4A68;
+}
+
+.token.regex,
+.token.important,
+.token.variable {
+ color: #e90;
+}
+
+.token.important,
+.token.bold {
+ font-weight: bold;
+}
+
+.token.italic {
+ font-style: italic;
+}
+
+.token.entity {
+ cursor: help;
+}
diff --git a/src/assets/font/iconfont/demo_index.html b/src/assets/font/iconfont/demo_index.html
new file mode 100644
index 0000000000..f5c991093e
--- /dev/null
+++ b/src/assets/font/iconfont/demo_index.html
@@ -0,0 +1,556 @@
+
+
+
+
+ iconfont Demo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ - Unicode
+ - Font class
+ - Symbol
+
+
+
查看项目
+
+
+
+
+
+
+ -
+
+
markdown
+ 
+
+
+ -
+
+
文件类型-缩略图-文件夹
+ 
+
+
+ -
+
+
markdown
+ 
+
+
+ -
+
+
markdown
+ 
+
+
+ -
+
+
刷新
+ 
+
+
+ -
+
+
链接
+ 
+
+
+ -
+
+
权限
+ 
+
+
+ -
+
+
使用文档
+ 
+
+
+ -
+
+
移动文件
+ 
+
+
+ -
+
+
新建
+ 
+
+
+ -
+
+
文件
+ 
+
+
+ -
+
+
分享
+ 
+
+
+ -
+
+
添加人员
+ 
+
+
+ -
+
+
更多
+ 
+
+
+ -
+
+
删除
+ 
+
+
+ -
+
+
重命名
+ 
+
+
+
+
+
Unicode 引用
+
+
+
Unicode 是字体在网页端最原始的应用方式,特点是:
+
+ - 支持按字体的方式去动态调整图标大小,颜色等等。
+ - 默认情况下不支持多色,直接添加多色图标会自动去色。
+
+
+ 注意:新版 iconfont 支持两种方式引用多色图标:SVG symbol 引用方式和彩色字体图标模式。(使用彩色字体图标需要在「编辑项目」中开启「彩色」选项后并重新生成。)
+
+
Unicode 使用步骤如下:
+
第一步:拷贝项目下面生成的 @font-face
+
@font-face {
+ font-family: 'iconfont';
+ src: url('iconfont.woff2?t=1713881751836') format('woff2'),
+ url('iconfont.woff?t=1713881751836') format('woff'),
+ url('iconfont.ttf?t=1713881751836') format('truetype');
+}
+
+
第二步:定义使用 iconfont 的样式
+
.iconfont {
+ font-family: "iconfont" !important;
+ font-size: 16px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+
第三步:挑选相应图标并获取字体编码,应用于页面
+
+<span class="iconfont">3</span>
+
+
+ "iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。
+
+
+
+
+
+
+
font-class 引用
+
+
+
font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。
+
与 Unicode 使用方式相比,具有如下特点:
+
+ - 相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。
+ - 因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。
+
+
使用步骤如下:
+
第一步:引入项目下面生成的 fontclass 代码:
+
<link rel="stylesheet" href="./iconfont.css">
+
+
第二步:挑选相应图标并获取类名,应用于页面:
+
<span class="iconfont icon-xxx"></span>
+
+
+ "
+ iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。
+
+
+
+
+
+
+
Symbol 引用
+
+
+
这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章
+ 这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:
+
+ - 支持多色图标了,不再受单色限制。
+ - 通过一些技巧,支持像字体那样,通过
font-size
, color
来调整样式。
+ - 兼容性较差,支持 IE9+,及现代浏览器。
+ - 浏览器渲染 SVG 的性能一般,还不如 png。
+
+
使用步骤如下:
+
第一步:引入项目下面生成的 symbol 代码:
+
<script src="./iconfont.js"></script>
+
+
第二步:加入通用 CSS 代码(引入一次就行):
+
<style>
+.icon {
+ width: 1em;
+ height: 1em;
+ vertical-align: -0.15em;
+ fill: currentColor;
+ overflow: hidden;
+}
+</style>
+
+
第三步:挑选相应图标并获取类名,应用于页面:
+
<svg class="icon" aria-hidden="true">
+ <use xlink:href="#icon-xxx"></use>
+</svg>
+
+
+
+
+
+
+
+
+
diff --git a/src/assets/font/iconfont/iconfont.css b/src/assets/font/iconfont/iconfont.css
new file mode 100644
index 0000000000..25d3f52257
--- /dev/null
+++ b/src/assets/font/iconfont/iconfont.css
@@ -0,0 +1,79 @@
+@font-face {
+ font-family: "iconfont"; /* Project id 4516165 */
+ src: url('iconfont.woff2?t=1713881751836') format('woff2'),
+ url('iconfont.woff?t=1713881751836') format('woff'),
+ url('iconfont.ttf?t=1713881751836') format('truetype');
+}
+
+.iconfont {
+ font-family: "iconfont" !important;
+ font-size: 16px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-markdown:before {
+ content: "\e6c0";
+}
+
+.icon-wenjianleixing-suolvetu-wenjianjia:before {
+ content: "\e6a9";
+}
+
+.icon-markdown1:before {
+ content: "\e655";
+}
+
+.icon-markdown2:before {
+ content: "\e72f";
+}
+
+.icon-shuaxin:before {
+ content: "\e641";
+}
+
+.icon-lianjie:before {
+ content: "\e6c8";
+}
+
+.icon-quanxian:before {
+ content: "\e612";
+}
+
+.icon-shiyongwendang:before {
+ content: "\eb66";
+}
+
+.icon-yidongwenjian:before {
+ content: "\e60f";
+}
+
+.icon-xinjian:before {
+ content: "\e66c";
+}
+
+.icon-wenjian:before {
+ content: "\e686";
+}
+
+.icon-fenxiang_2:before {
+ content: "\e600";
+}
+
+.icon-tianjiarenyuan:before {
+ content: "\e62c";
+}
+
+.icon-gengduo:before {
+ content: "\e63f";
+}
+
+.icon-shanchu:before {
+ content: "\e601";
+}
+
+.icon-zhongmingming:before {
+ content: "\e626";
+}
+
diff --git a/src/assets/font/iconfont/iconfont.js b/src/assets/font/iconfont/iconfont.js
new file mode 100644
index 0000000000..a942dc7b7e
--- /dev/null
+++ b/src/assets/font/iconfont/iconfont.js
@@ -0,0 +1 @@
+window._iconfont_svg_string_4516165='',function(h){var a=(a=document.getElementsByTagName("script"))[a.length-1],c=a.getAttribute("data-injectcss"),a=a.getAttribute("data-disable-injectsvg");if(!a){var t,l,i,o,e,n=function(a,c){c.parentNode.insertBefore(a,c)};if(c&&!h.__iconfont__svg__cssinject__){h.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(a){console&&console.log(a)}}t=function(){var a,c=document.createElement("div");c.innerHTML=h._iconfont_svg_string_4516165,(c=c.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",c=c,(a=document.body).firstChild?n(c,a.firstChild):a.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(t,0):(l=function(){document.removeEventListener("DOMContentLoaded",l,!1),t()},document.addEventListener("DOMContentLoaded",l,!1)):document.attachEvent&&(i=t,o=h.document,e=!1,d(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,s())})}function s(){e||(e=!0,i())}function d(){try{o.documentElement.doScroll("left")}catch(a){return void setTimeout(d,50)}s()}}(window);
\ No newline at end of file
diff --git a/src/assets/font/iconfont/iconfont.json b/src/assets/font/iconfont/iconfont.json
new file mode 100644
index 0000000000..36afc551a4
--- /dev/null
+++ b/src/assets/font/iconfont/iconfont.json
@@ -0,0 +1,121 @@
+{
+ "id": "4516165",
+ "name": "mdfs",
+ "font_family": "iconfont",
+ "css_prefix_text": "icon-",
+ "description": "",
+ "glyphs": [
+ {
+ "icon_id": "5824876",
+ "name": "markdown",
+ "font_class": "markdown",
+ "unicode": "e6c0",
+ "unicode_decimal": 59072
+ },
+ {
+ "icon_id": "21721572",
+ "name": "文件类型-缩略图-文件夹",
+ "font_class": "wenjianleixing-suolvetu-wenjianjia",
+ "unicode": "e6a9",
+ "unicode_decimal": 59049
+ },
+ {
+ "icon_id": "26138152",
+ "name": "markdown",
+ "font_class": "markdown1",
+ "unicode": "e655",
+ "unicode_decimal": 58965
+ },
+ {
+ "icon_id": "36133548",
+ "name": "markdown",
+ "font_class": "markdown2",
+ "unicode": "e72f",
+ "unicode_decimal": 59183
+ },
+ {
+ "icon_id": "1305479",
+ "name": "刷新",
+ "font_class": "shuaxin",
+ "unicode": "e641",
+ "unicode_decimal": 58945
+ },
+ {
+ "icon_id": "673794",
+ "name": "链接",
+ "font_class": "lianjie",
+ "unicode": "e6c8",
+ "unicode_decimal": 59080
+ },
+ {
+ "icon_id": "736503",
+ "name": "权限",
+ "font_class": "quanxian",
+ "unicode": "e612",
+ "unicode_decimal": 58898
+ },
+ {
+ "icon_id": "3868276",
+ "name": "使用文档",
+ "font_class": "shiyongwendang",
+ "unicode": "eb66",
+ "unicode_decimal": 60262
+ },
+ {
+ "icon_id": "5929166",
+ "name": "移动文件",
+ "font_class": "yidongwenjian",
+ "unicode": "e60f",
+ "unicode_decimal": 58895
+ },
+ {
+ "icon_id": "6263348",
+ "name": "新建",
+ "font_class": "xinjian",
+ "unicode": "e66c",
+ "unicode_decimal": 58988
+ },
+ {
+ "icon_id": "6583375",
+ "name": "文件",
+ "font_class": "wenjian",
+ "unicode": "e686",
+ "unicode_decimal": 59014
+ },
+ {
+ "icon_id": "9810108",
+ "name": "分享",
+ "font_class": "fenxiang_2",
+ "unicode": "e600",
+ "unicode_decimal": 58880
+ },
+ {
+ "icon_id": "12974858",
+ "name": "添加人员",
+ "font_class": "tianjiarenyuan",
+ "unicode": "e62c",
+ "unicode_decimal": 58924
+ },
+ {
+ "icon_id": "14112853",
+ "name": "更多",
+ "font_class": "gengduo",
+ "unicode": "e63f",
+ "unicode_decimal": 58943
+ },
+ {
+ "icon_id": "17448863",
+ "name": "删除",
+ "font_class": "shanchu",
+ "unicode": "e601",
+ "unicode_decimal": 58881
+ },
+ {
+ "icon_id": "31162515",
+ "name": "重命名",
+ "font_class": "zhongmingming",
+ "unicode": "e626",
+ "unicode_decimal": 58918
+ }
+ ]
+}
diff --git a/src/assets/font/iconfont/iconfont.ttf b/src/assets/font/iconfont/iconfont.ttf
new file mode 100644
index 0000000000..3a7ed46356
Binary files /dev/null and b/src/assets/font/iconfont/iconfont.ttf differ
diff --git a/src/assets/font/iconfont/iconfont.woff b/src/assets/font/iconfont/iconfont.woff
new file mode 100644
index 0000000000..adde161641
Binary files /dev/null and b/src/assets/font/iconfont/iconfont.woff differ
diff --git a/src/assets/font/iconfont/iconfont.woff2 b/src/assets/font/iconfont/iconfont.woff2
new file mode 100644
index 0000000000..d7a831053f
Binary files /dev/null and b/src/assets/font/iconfont/iconfont.woff2 differ
diff --git a/src/components/Breadcrumb/index.vue b/src/components/Breadcrumb/index.vue
index 29f9a04c9d..c2528a9bc2 100644
--- a/src/components/Breadcrumb/index.vue
+++ b/src/components/Breadcrumb/index.vue
@@ -29,12 +29,12 @@ export default {
methods: {
getBreadcrumb() {
// only show routes with meta.title
- let matched = this.$route.matched.filter(item => item.meta && item.meta.title)
+ const matched = this.$route.matched.filter(item => item.meta && item.meta.title)
const first = matched[0]
- if (!this.isDashboard(first)) {
- matched = [{ path: '/dashboard', meta: { title: 'Dashboard' }}].concat(matched)
- }
+ // if (!this.isDashboard(first)) {
+ // matched = [{ path: '/dashboard', meta: { title: 'Dashboard' }}].concat(matched)
+ // }
this.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false)
},
diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
index 0ca5cf6a09..0f2a6e48bb 100644
--- a/src/layout/components/Navbar.vue
+++ b/src/layout/components/Navbar.vue
@@ -1,13 +1,17 @@
-
+
OOPS!
-
All rights reserved
-
wallstreetcn
+
{{ message }}
-
Please check that the URL you entered is correct, or click the button below to return to the homepage.
-
Back to home
+
请确认链接正确性
@@ -26,7 +25,7 @@ export default {
name: 'Page404',
computed: {
message() {
- return 'The webmaster said that you can not enter this page...'
+ return '当前文章已删除或不存在,请确认'
}
}
}
diff --git a/src/views/form/index.vue b/src/views/form/index.vue
deleted file mode 100644
index f4d66d3bdb..0000000000
--- a/src/views/form/index.vue
+++ /dev/null
@@ -1,85 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Create
- Cancel
-
-
-
-
-
-
-
-
-
diff --git a/src/views/login/index.vue b/src/views/login/index.vue
index 1db246453d..d9af30a2f7 100644
--- a/src/views/login/index.vue
+++ b/src/views/login/index.vue
@@ -74,11 +74,11 @@ export default {
}
return {
loginForm: {
- username: 'admin',
- password: '111111'
+ username: 'string',
+ password: 'string'
},
loginRules: {
- username: [{ required: true, trigger: 'blur', validator: validateUsername }],
+ username: [{ required: true, trigger: 'blur' }],
password: [{ required: true, trigger: 'blur', validator: validatePassword }]
},
loading: false,
@@ -110,7 +110,7 @@ export default {
if (valid) {
this.loading = true
this.$store.dispatch('user/login', this.loginForm).then(() => {
- this.$router.push({ path: this.redirect || '/' })
+ this.$router.push({ path: this.redirect || '/markdown' })
this.loading = false
}).catch(() => {
this.loading = false
diff --git a/src/views/markdown/MDContent.vue b/src/views/markdown/MDContent.vue
new file mode 100644
index 0000000000..3a290248a5
--- /dev/null
+++ b/src/views/markdown/MDContent.vue
@@ -0,0 +1,179 @@
+
+
+
+
+
+
+
+ {{ ruleForm.title }}
+
+
+ 分享
+ move
+ 保存
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/markdown/MoveFile.vue b/src/views/markdown/MoveFile.vue
new file mode 100644
index 0000000000..c0f4809cbf
--- /dev/null
+++ b/src/views/markdown/MoveFile.vue
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/markdown/Share.vue b/src/views/markdown/Share.vue
new file mode 100644
index 0000000000..fec6a29dc8
--- /dev/null
+++ b/src/views/markdown/Share.vue
@@ -0,0 +1,391 @@
+
+
+
+
+
+
+
+
+
+
+ 复制
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 协作者
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.user_name }}
+
+ {{ scope.row.user_name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ handleChange(value,scope.row)"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/markdown/SideBar.vue b/src/views/markdown/SideBar.vue
new file mode 100644
index 0000000000..703a98d580
--- /dev/null
+++ b/src/views/markdown/SideBar.vue
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
diff --git a/src/views/markdown/TreeItem.vue b/src/views/markdown/TreeItem.vue
new file mode 100644
index 0000000000..6c9ebc1304
--- /dev/null
+++ b/src/views/markdown/TreeItem.vue
@@ -0,0 +1,197 @@
+
+
+
+
+
+
+
+
+
+
+ {{ nodeData.name }}
+
+
+
+
+
+
+
diff --git a/src/views/markdown/index.vue b/src/views/markdown/index.vue
new file mode 100644
index 0000000000..f9d6aef9ee
--- /dev/null
+++ b/src/views/markdown/index.vue
@@ -0,0 +1,167 @@
+
+
+
+
+
+
+
diff --git a/src/views/table/index.vue b/src/views/table/index.vue
deleted file mode 100644
index a1ed847f95..0000000000
--- a/src/views/table/index.vue
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-
-
-
- {{ scope.$index }}
-
-
-
-
- {{ scope.row.title }}
-
-
-
-
- {{ scope.row.author }}
-
-
-
-
- {{ scope.row.pageviews }}
-
-
-
-
- {{ scope.row.status }}
-
-
-
-
-
- {{ scope.row.display_time }}
-
-
-
-
-
-
-
diff --git a/src/views/tree/index.vue b/src/views/tree/index.vue
deleted file mode 100644
index 89c6b01de2..0000000000
--- a/src/views/tree/index.vue
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/vue.config.js b/vue.config.js
index 4856ed02a7..cc652cbb73 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -36,7 +36,14 @@ module.exports = {
warnings: false,
errors: true
},
- before: require('./mock/mock-server.js')
+ proxy: {
+ [process.env.VUE_APP_BASE_API]: {
+ target: process.env.VITE_APP_SERVICE_API,
+ changeOrigin: true,
+ pathRewrite: (path) => path.replace(new RegExp('^' + process.env.VUE_APP_BASE_API), '')
+ }
+ }
+ // before: require('./mock/mock-server.js')
},
configureWebpack: {
// provide the app's title in webpack's name field, so that