├── src
├── assets
│ ├── css
│ │ ├── theme-chalk
│ │ │ ├── submenu.css
│ │ │ ├── button-group.css
│ │ │ ├── form-item.css
│ │ │ ├── menu-item.css
│ │ │ ├── tab-pane.css
│ │ │ ├── breadcrumb-item.css
│ │ │ ├── checkbox-button.css
│ │ │ ├── checkbox-group.css
│ │ │ ├── collapse-item.css
│ │ │ ├── dropdown-item.css
│ │ │ ├── dropdown-menu.css
│ │ │ ├── menu-item-group.css
│ │ │ ├── radio-group.css
│ │ │ ├── aside.css
│ │ │ ├── footer.css
│ │ │ ├── header.css
│ │ │ ├── fonts
│ │ │ │ ├── element-icons.ttf
│ │ │ │ └── element-icons.woff
│ │ │ ├── main.css
│ │ │ ├── steps.css
│ │ │ ├── container.css
│ │ │ ├── card.css
│ │ │ ├── option-group.css
│ │ │ ├── option.css
│ │ │ ├── rate.css
│ │ │ ├── reset.css
│ │ │ ├── badge.css
│ │ │ ├── row.css
│ │ │ ├── spinner.css
│ │ │ ├── display.css
│ │ │ ├── breadcrumb.css
│ │ │ ├── scrollbar.css
│ │ │ ├── carousel-item.css
│ │ │ ├── alert.css
│ │ │ ├── popper.css
│ │ │ ├── notification.css
│ │ │ ├── loading.css
│ │ │ ├── switch.css
│ │ │ ├── progress.css
│ │ │ ├── message.css
│ │ │ ├── tag.css
│ │ │ ├── carousel.css
│ │ │ ├── popover.css
│ │ │ └── radio-button.css
│ │ ├── index.styl
│ │ └── global.styl
│ ├── img
│ │ ├── 404.gif
│ │ ├── echo.jpg
│ │ ├── logo.png
│ │ ├── health.gif
│ │ ├── people.png
│ │ ├── toutiao.jpg
│ │ └── uncleLian.jpg
│ ├── iconfont
│ │ ├── iconfont.eot
│ │ ├── iconfont.ttf
│ │ ├── iconfont.woff
│ │ └── iconfont.woff2
│ ├── index.js
│ └── icons
│ │ ├── index.js
│ │ └── svg
│ │ ├── issue.svg
│ │ ├── guide.svg
│ │ ├── chart.svg
│ │ ├── component.svg
│ │ ├── documentation.svg
│ │ ├── lock.svg
│ │ ├── fullscreen.svg
│ │ ├── user.svg
│ │ ├── view.svg
│ │ ├── markdown.svg
│ │ ├── github.svg
│ │ ├── backtop.svg
│ │ ├── flex-left.svg
│ │ ├── thumbtack.svg
│ │ ├── users.svg
│ │ ├── clipboard.svg
│ │ ├── number.svg
│ │ ├── excel.svg
│ │ ├── editor.svg
│ │ ├── flex-right.svg
│ │ ├── link.svg
│ │ ├── move.svg
│ │ ├── spinner.svg
│ │ ├── message.svg
│ │ ├── qq.svg
│ │ ├── progressbar.svg
│ │ ├── global.svg
│ │ └── icons.svg
├── api
│ ├── list.js
│ └── login.js
├── directive
│ ├── dragDialog
│ │ └── index.js
│ ├── index.js
│ └── permission
│ │ ├── index.js
│ │ └── permission.js
├── utils
│ ├── validate.js
│ ├── i18n.js
│ ├── errorLog.js
│ ├── Export2Zip.js
│ ├── singleMessage.js
│ ├── cache.js
│ ├── permission.js
│ └── request.js
├── components
│ ├── index.js
│ ├── Base
│ │ ├── Cola
│ │ │ └── index.vue
│ │ ├── SvgIcon
│ │ │ └── index.vue
│ │ ├── Breadcrumb
│ │ │ └── index.vue
│ │ └── ErrorLog
│ │ │ └── index.vue
│ ├── Loading
│ │ └── index.vue
│ └── GithubCorner
│ │ └── index.vue
├── pages
│ ├── index
│ │ ├── children
│ │ │ ├── icons
│ │ │ │ ├── requireIcons.js
│ │ │ │ └── icons.vue
│ │ │ ├── errorLog
│ │ │ │ └── errorLog.vue
│ │ │ ├── guide
│ │ │ │ ├── steps.js
│ │ │ │ └── guide.vue
│ │ │ ├── components-demo
│ │ │ │ ├── singleMessage.vue
│ │ │ │ ├── backTop.vue
│ │ │ │ ├── dragDialog.vue
│ │ │ │ ├── progressbar.vue
│ │ │ │ ├── editor.vue
│ │ │ │ ├── sticky.vue
│ │ │ │ └── loading.vue
│ │ │ ├── dashboard
│ │ │ │ ├── index.vue
│ │ │ │ └── components
│ │ │ │ │ └── banner.vue
│ │ │ ├── i18n-demo
│ │ │ │ └── local.js
│ │ │ ├── excel
│ │ │ │ └── importExcel.vue
│ │ │ └── permission
│ │ │ │ └── permission.vue
│ │ └── index.vue
│ └── other
│ │ ├── redirect.vue
│ │ └── page404.vue
├── layout
│ ├── Sidebar
│ │ ├── sideLink.vue
│ │ ├── sideValue.vue
│ │ └── sideItem.vue
│ ├── PageView
│ │ └── index.vue
│ ├── NavBar
│ │ ├── LanguageSelect
│ │ │ └── index.vue
│ │ ├── Screenfull
│ │ │ └── index.vue
│ │ ├── UserSelect
│ │ │ └── infoDialog.vue
│ │ └── index.vue
│ └── TagsView
│ │ └── scrollPane.vue
├── language
│ └── index.js
├── App.vue
├── main.js
├── filters
│ └── index.js
└── store
│ ├── index.js
│ └── modules
│ └── login.js
├── public
├── favicon.ico
├── static
│ └── tinymce
│ │ ├── skins
│ │ ├── ui
│ │ │ └── oxide
│ │ │ │ ├── fonts
│ │ │ │ └── tinymce-mobile.woff
│ │ │ │ └── content.mobile.min.css
│ │ └── content
│ │ │ ├── default
│ │ │ ├── content.min.css
│ │ │ └── content.css
│ │ │ ├── writer
│ │ │ ├── content.min.css
│ │ │ └── content.css
│ │ │ └── document
│ │ │ ├── content.min.css
│ │ │ └── content.css
│ │ ├── plugins
│ │ ├── hr
│ │ │ ├── index.js
│ │ │ ├── plugin.min.js
│ │ │ └── plugin.js
│ │ ├── code
│ │ │ ├── index.js
│ │ │ └── plugin.min.js
│ │ ├── help
│ │ │ └── index.js
│ │ ├── link
│ │ │ └── index.js
│ │ ├── save
│ │ │ ├── index.js
│ │ │ └── plugin.min.js
│ │ ├── toc
│ │ │ └── index.js
│ │ ├── image
│ │ │ └── index.js
│ │ ├── lists
│ │ │ └── index.js
│ │ ├── media
│ │ │ └── index.js
│ │ ├── paste
│ │ │ └── index.js
│ │ ├── print
│ │ │ ├── index.js
│ │ │ ├── plugin.min.js
│ │ │ └── plugin.js
│ │ ├── table
│ │ │ └── index.js
│ │ ├── anchor
│ │ │ ├── index.js
│ │ │ └── plugin.min.js
│ │ ├── bbcode
│ │ │ └── index.js
│ │ ├── advlist
│ │ │ └── index.js
│ │ ├── charmap
│ │ │ └── index.js
│ │ ├── preview
│ │ │ ├── index.js
│ │ │ └── plugin.min.js
│ │ ├── autolink
│ │ │ ├── index.js
│ │ │ └── plugin.min.js
│ │ ├── autosave
│ │ │ └── index.js
│ │ ├── emoticons
│ │ │ └── index.js
│ │ ├── fullpage
│ │ │ └── index.js
│ │ ├── importcss
│ │ │ └── index.js
│ │ ├── pagebreak
│ │ │ ├── index.js
│ │ │ └── plugin.min.js
│ │ ├── quickbars
│ │ │ └── index.js
│ │ ├── tabfocus
│ │ │ ├── index.js
│ │ │ └── plugin.min.js
│ │ ├── template
│ │ │ └── index.js
│ │ ├── textcolor
│ │ │ ├── index.js
│ │ │ ├── plugin.min.js
│ │ │ └── plugin.js
│ │ ├── wordcount
│ │ │ └── index.js
│ │ ├── autoresize
│ │ │ ├── index.js
│ │ │ └── plugin.min.js
│ │ ├── codesample
│ │ │ └── index.js
│ │ ├── fullscreen
│ │ │ └── index.js
│ │ ├── imagetools
│ │ │ └── index.js
│ │ ├── colorpicker
│ │ │ ├── index.js
│ │ │ ├── plugin.min.js
│ │ │ └── plugin.js
│ │ ├── contextmenu
│ │ │ ├── index.js
│ │ │ ├── plugin.min.js
│ │ │ └── plugin.js
│ │ ├── nonbreaking
│ │ │ ├── index.js
│ │ │ └── plugin.min.js
│ │ ├── noneditable
│ │ │ ├── index.js
│ │ │ └── plugin.min.js
│ │ ├── textpattern
│ │ │ └── index.js
│ │ ├── visualchars
│ │ │ └── index.js
│ │ ├── legacyoutput
│ │ │ └── index.js
│ │ ├── spellchecker
│ │ │ └── index.js
│ │ ├── visualblocks
│ │ │ ├── index.js
│ │ │ └── plugin.min.js
│ │ ├── directionality
│ │ │ ├── index.js
│ │ │ └── plugin.min.js
│ │ ├── insertdatetime
│ │ │ └── index.js
│ │ └── searchreplace
│ │ │ └── index.js
│ │ └── themes
│ │ ├── mobile
│ │ └── index.js
│ │ └── silver
│ │ └── index.js
└── index.html
├── .env.development
├── .env.production
├── .env.stage
├── .gitignore
├── babel.config.js
└── LICENSE
/src/assets/css/theme-chalk/submenu.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/button-group.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/form-item.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/menu-item.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/tab-pane.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/breadcrumb-item.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/checkbox-button.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/checkbox-group.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/collapse-item.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/dropdown-item.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/dropdown-menu.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/menu-item-group.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/uncleLian/vue-blog/HEAD/public/favicon.ico
--------------------------------------------------------------------------------
/.env.development:
--------------------------------------------------------------------------------
1 | VUE_APP_ENV_CONFIG = 'dev'
2 | VUE_APP_BASE_API = 'http://www.exapmple.com/dev'
--------------------------------------------------------------------------------
/.env.production:
--------------------------------------------------------------------------------
1 | VUE_APP_ENV_CONFIG = 'prod'
2 | VUE_APP_BASE_API = 'http://www.exapmple.com/prod'
--------------------------------------------------------------------------------
/src/assets/img/404.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/uncleLian/vue-blog/HEAD/src/assets/img/404.gif
--------------------------------------------------------------------------------
/src/assets/img/echo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/uncleLian/vue-blog/HEAD/src/assets/img/echo.jpg
--------------------------------------------------------------------------------
/src/assets/img/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/uncleLian/vue-blog/HEAD/src/assets/img/logo.png
--------------------------------------------------------------------------------
/src/assets/img/health.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/uncleLian/vue-blog/HEAD/src/assets/img/health.gif
--------------------------------------------------------------------------------
/src/assets/img/people.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/uncleLian/vue-blog/HEAD/src/assets/img/people.png
--------------------------------------------------------------------------------
/src/assets/img/toutiao.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/uncleLian/vue-blog/HEAD/src/assets/img/toutiao.jpg
--------------------------------------------------------------------------------
/src/assets/img/uncleLian.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/uncleLian/vue-blog/HEAD/src/assets/img/uncleLian.jpg
--------------------------------------------------------------------------------
/src/assets/iconfont/iconfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/uncleLian/vue-blog/HEAD/src/assets/iconfont/iconfont.eot
--------------------------------------------------------------------------------
/src/assets/iconfont/iconfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/uncleLian/vue-blog/HEAD/src/assets/iconfont/iconfont.ttf
--------------------------------------------------------------------------------
/.env.stage:
--------------------------------------------------------------------------------
1 | NODE_ENV = production
2 | VUE_APP_ENV_CONFIG = 'stage'
3 | VUE_APP_BASE_API = 'http://www.exapmple.com/stage'
--------------------------------------------------------------------------------
/src/assets/iconfont/iconfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/uncleLian/vue-blog/HEAD/src/assets/iconfont/iconfont.woff
--------------------------------------------------------------------------------
/src/assets/iconfont/iconfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/uncleLian/vue-blog/HEAD/src/assets/iconfont/iconfont.woff2
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/radio-group.css:
--------------------------------------------------------------------------------
1 | .el-radio-group{display:inline-block;line-height:1;vertical-align:middle;font-size:0}
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/aside.css:
--------------------------------------------------------------------------------
1 | .el-aside{overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/footer.css:
--------------------------------------------------------------------------------
1 | .el-footer{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/header.css:
--------------------------------------------------------------------------------
1 | .el-header{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/fonts/element-icons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/uncleLian/vue-blog/HEAD/src/assets/css/theme-chalk/fonts/element-icons.ttf
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/fonts/element-icons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/uncleLian/vue-blog/HEAD/src/assets/css/theme-chalk/fonts/element-icons.woff
--------------------------------------------------------------------------------
/public/static/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/uncleLian/vue-blog/HEAD/public/static/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff
--------------------------------------------------------------------------------
/src/api/list.js:
--------------------------------------------------------------------------------
1 | import { request } from '@/utils/request'
2 |
3 | // 列表
4 | export function getList() {
5 | let res = request('/api/list', 'GET')
6 | return res
7 | }
8 |
--------------------------------------------------------------------------------
/src/directive/dragDialog/index.js:
--------------------------------------------------------------------------------
1 | import drag from './drag'
2 |
3 | drag.install = function (Vue) {
4 | // 注册全局指令
5 | Vue.directive('drag', drag)
6 | }
7 | // 供局部注册指令使用
8 | export default drag
9 |
--------------------------------------------------------------------------------
/src/utils/validate.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @param {String} path
3 | * @returns {Boolean}
4 | */
5 | // 是否外链
6 | export function isExternal(path) {
7 | return /^(https?:|mailto:|tel:)/.test(path)
8 | }
9 |
--------------------------------------------------------------------------------
/src/utils/i18n.js:
--------------------------------------------------------------------------------
1 | export function translationRouteTitle(title) {
2 | let res = title
3 | if (this.$te('route.' + title)) {
4 | res = this.$t('route.' + title)
5 | }
6 | return res
7 | }
8 |
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/main.css:
--------------------------------------------------------------------------------
1 | .el-main{display:block;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;padding:20px}
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/hr/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "hr" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/hr')
5 | // ES2015:
6 | // import 'tinymce/plugins/hr'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/src/assets/index.js:
--------------------------------------------------------------------------------
1 | import 'normalize.css' // 重置样式
2 | import '@/assets/css/theme-chalk/index.css' // 自定义主题颜色
3 | import '@/assets/iconfont/iconfont.css' // iconfont
4 | import '@/assets/icons' // svg icon
5 | import '@/assets/css/global.styl' // 全局样式
6 |
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/code/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "code" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/code')
5 | // ES2015:
6 | // import 'tinymce/plugins/code'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/help/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "help" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/help')
5 | // ES2015:
6 | // import 'tinymce/plugins/help'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/link/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "link" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/link')
5 | // ES2015:
6 | // import 'tinymce/plugins/link'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/save/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "save" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/save')
5 | // ES2015:
6 | // import 'tinymce/plugins/save'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/toc/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "toc" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/toc')
5 | // ES2015:
6 | // import 'tinymce/plugins/toc'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/image/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "image" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/image')
5 | // ES2015:
6 | // import 'tinymce/plugins/image'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/lists/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "lists" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/lists')
5 | // ES2015:
6 | // import 'tinymce/plugins/lists'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/media/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "media" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/media')
5 | // ES2015:
6 | // import 'tinymce/plugins/media'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/paste/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "paste" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/paste')
5 | // ES2015:
6 | // import 'tinymce/plugins/paste'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/print/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "print" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/print')
5 | // ES2015:
6 | // import 'tinymce/plugins/print'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/table/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "table" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/table')
5 | // ES2015:
6 | // import 'tinymce/plugins/table'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/themes/mobile/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "mobile" theme for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/themes/mobile')
5 | // ES2015:
6 | // import 'tinymce/themes/mobile'
7 | require('./theme.js');
--------------------------------------------------------------------------------
/public/static/tinymce/themes/silver/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "silver" theme for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/themes/silver')
5 | // ES2015:
6 | // import 'tinymce/themes/silver'
7 | require('./theme.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/anchor/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "anchor" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/anchor')
5 | // ES2015:
6 | // import 'tinymce/plugins/anchor'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/bbcode/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "bbcode" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/bbcode')
5 | // ES2015:
6 | // import 'tinymce/plugins/bbcode'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/advlist/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "advlist" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/advlist')
5 | // ES2015:
6 | // import 'tinymce/plugins/advlist'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/charmap/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "charmap" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/charmap')
5 | // ES2015:
6 | // import 'tinymce/plugins/charmap'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/preview/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "preview" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/preview')
5 | // ES2015:
6 | // import 'tinymce/plugins/preview'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/autolink/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "autolink" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/autolink')
5 | // ES2015:
6 | // import 'tinymce/plugins/autolink'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/autosave/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "autosave" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/autosave')
5 | // ES2015:
6 | // import 'tinymce/plugins/autosave'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/emoticons/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "emoticons" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/emoticons')
5 | // ES2015:
6 | // import 'tinymce/plugins/emoticons'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/fullpage/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "fullpage" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/fullpage')
5 | // ES2015:
6 | // import 'tinymce/plugins/fullpage'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/importcss/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "importcss" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/importcss')
5 | // ES2015:
6 | // import 'tinymce/plugins/importcss'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/pagebreak/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "pagebreak" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/pagebreak')
5 | // ES2015:
6 | // import 'tinymce/plugins/pagebreak'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/quickbars/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "quickbars" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/quickbars')
5 | // ES2015:
6 | // import 'tinymce/plugins/quickbars'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/tabfocus/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "tabfocus" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/tabfocus')
5 | // ES2015:
6 | // import 'tinymce/plugins/tabfocus'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/template/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "template" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/template')
5 | // ES2015:
6 | // import 'tinymce/plugins/template'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/textcolor/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "textcolor" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/textcolor')
5 | // ES2015:
6 | // import 'tinymce/plugins/textcolor'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/wordcount/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "wordcount" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/wordcount')
5 | // ES2015:
6 | // import 'tinymce/plugins/wordcount'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/autoresize/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "autoresize" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/autoresize')
5 | // ES2015:
6 | // import 'tinymce/plugins/autoresize'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/codesample/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "codesample" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/codesample')
5 | // ES2015:
6 | // import 'tinymce/plugins/codesample'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/fullscreen/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "fullscreen" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/fullscreen')
5 | // ES2015:
6 | // import 'tinymce/plugins/fullscreen'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/imagetools/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "imagetools" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/imagetools')
5 | // ES2015:
6 | // import 'tinymce/plugins/imagetools'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/colorpicker/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "colorpicker" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/colorpicker')
5 | // ES2015:
6 | // import 'tinymce/plugins/colorpicker'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/contextmenu/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "contextmenu" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/contextmenu')
5 | // ES2015:
6 | // import 'tinymce/plugins/contextmenu'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/nonbreaking/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "nonbreaking" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/nonbreaking')
5 | // ES2015:
6 | // import 'tinymce/plugins/nonbreaking'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/noneditable/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "noneditable" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/noneditable')
5 | // ES2015:
6 | // import 'tinymce/plugins/noneditable'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/textpattern/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "textpattern" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/textpattern')
5 | // ES2015:
6 | // import 'tinymce/plugins/textpattern'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/visualchars/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "visualchars" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/visualchars')
5 | // ES2015:
6 | // import 'tinymce/plugins/visualchars'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/skins/ui/oxide/content.mobile.min.css:
--------------------------------------------------------------------------------
1 | .tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection{position:absolute;display:inline-block;background-color:green;opacity:.5}body{-webkit-text-size-adjust:none}body img{max-width:96vw}body table img{max-width:95%}
--------------------------------------------------------------------------------
/src/components/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import PageView from '@/layout/PageView'
3 |
4 | const components = {
5 | 'app-pageView': PageView
6 | }
7 |
8 | // 注册全局组件
9 | Object.keys(components).forEach(key => {
10 | Vue.component(key, components[key])
11 | })
12 |
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/legacyoutput/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "legacyoutput" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/legacyoutput')
5 | // ES2015:
6 | // import 'tinymce/plugins/legacyoutput'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/spellchecker/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "spellchecker" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/spellchecker')
5 | // ES2015:
6 | // import 'tinymce/plugins/spellchecker'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/visualblocks/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "visualblocks" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/visualblocks')
5 | // ES2015:
6 | // import 'tinymce/plugins/visualblocks'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/directionality/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "directionality" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/directionality')
5 | // ES2015:
6 | // import 'tinymce/plugins/directionality'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/insertdatetime/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "insertdatetime" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/insertdatetime')
5 | // ES2015:
6 | // import 'tinymce/plugins/insertdatetime'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/searchreplace/index.js:
--------------------------------------------------------------------------------
1 | // Exports the "searchreplace" plugin for usage with module loaders
2 | // Usage:
3 | // CommonJS:
4 | // require('tinymce/plugins/searchreplace')
5 | // ES2015:
6 | // import 'tinymce/plugins/searchreplace'
7 | require('./plugin.js');
--------------------------------------------------------------------------------
/src/directive/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import permission from './permission'
3 | import dragDialog from './dragDialog'
4 |
5 | const directive = [
6 | permission,
7 | dragDialog
8 | ]
9 |
10 | // 注册全局指令
11 | directive.forEach(item => {
12 | Vue.use(item)
13 | })
14 |
--------------------------------------------------------------------------------
/src/assets/icons/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import SvgIcon from '@/components/Base/SvgIcon'
3 |
4 | Vue.component('svg-icon', SvgIcon)
5 |
6 | const req = require.context('./svg', false, /\.svg$/)
7 | const requireAll = requireContext => requireContext.keys().map(requireContext)
8 | requireAll(req)
9 |
--------------------------------------------------------------------------------
/src/directive/permission/index.js:
--------------------------------------------------------------------------------
1 | import permission, { checkPermission } from './permission'
2 |
3 | export default {
4 | install: function (Vue) {
5 | Vue.directive('permission', permission) // 注册全局指令
6 | Vue.prototype.$checkPermission = checkPermission // 挂在到全局,供动态渲染dom调用
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/src/api/login.js:
--------------------------------------------------------------------------------
1 | import { request } from '@/utils/request'
2 |
3 | // 登录
4 | export function getLogin(form) {
5 | let res = request('/api/login', 'POST', form)
6 | return res
7 | }
8 | // 用户信息
9 | export function getUser(token) {
10 | let res = request('/api/user', 'POST', token)
11 | return res
12 | }
13 |
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/steps.css:
--------------------------------------------------------------------------------
1 | .el-steps{display:-webkit-box;display:-ms-flexbox;display:flex}.el-steps--simple{padding:13px 8%;border-radius:4px;background:#f5f7fa}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{height:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column}
--------------------------------------------------------------------------------
/src/pages/index/children/icons/requireIcons.js:
--------------------------------------------------------------------------------
1 | const req = require.context('../../../../assets/icons/svg', false, /\.svg$/)
2 | const requireAll = requireContext => requireContext.keys()
3 |
4 | const re = /\.\/(.*)\.svg/
5 |
6 | const icons = requireAll(req).map(i => {
7 | return i.match(re)[1]
8 | })
9 |
10 | export default icons
11 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | package-lock.json
4 | /dist
5 | /public/CNAME
6 |
7 | # local env files
8 | .env.local
9 | .env.*.local
10 |
11 | # Log files
12 | npm-debug.log*
13 | yarn-debug.log*
14 | yarn-error.log*
15 |
16 | # Editor directories and files
17 | .idea
18 | .vscode
19 | *.suo
20 | *.ntvs*
21 | *.njsproj
22 | *.sln
23 | *.sw*
24 |
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: [
3 | '@vue/app',
4 | '@vue/babel-preset-jsx'
5 | ],
6 | plugins: [
7 | [
8 | 'component',
9 | {
10 | 'libraryName': 'element-ui',
11 | 'styleLibraryName': 'theme-chalk'
12 | }
13 | ]
14 | ]
15 | }
16 |
--------------------------------------------------------------------------------
/src/pages/other/redirect.vue:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/src/assets/css/index.styl:
--------------------------------------------------------------------------------
1 | // 主色调
2 | $appColor = #42b983;
3 | $appColorRGB = 66, 185, 131;
4 |
5 | // 水平垂直居中
6 | flex-center() {
7 | display: flex;
8 | align-items: center;
9 | justify-content: center;
10 | }
11 | // 单行溢出省略号
12 | text-ellipsis() {
13 | white-space: nowrap;
14 | text-overflow: ellipsis;
15 | overflow: hidden;
16 | }
17 |
18 | :export {
19 | appColor: $appColor;
20 | appColorRGB: $appColorRGB
21 | }
22 |
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/container.css:
--------------------------------------------------------------------------------
1 | .el-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;-webkit-box-sizing:border-box;box-sizing:border-box;min-width:0}.el-container.is-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}
--------------------------------------------------------------------------------
/src/utils/errorLog.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import store from '@/store'
3 |
4 | // you can set only in production env show the error-log
5 | if (process.env.NODE_ENV === 'production') {
6 | Vue.config.errorHandler = function (error, vm, info) {
7 | store.commit('SET_LOGS', {
8 | error,
9 | vm,
10 | info,
11 | url: window.location.href,
12 | time: new Date()
13 | })
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/card.css:
--------------------------------------------------------------------------------
1 | .el-card{border-radius:4px;border:1px solid #ebeef5;background-color:#fff;overflow:hidden;color:#303133;-webkit-transition:.3s;transition:.3s}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-card__header{padding:18px 20px;border-bottom:1px solid #ebeef5;-webkit-box-sizing:border-box;box-sizing:border-box}.el-card__body{padding:20px}
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/option-group.css:
--------------------------------------------------------------------------------
1 | .el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type)::after{content:'';position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#e4e7ed}.el-select-group__title{padding-left:20px;font-size:12px;color:#909399;line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px}
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | <%= webpackConfig.name %>
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/option.css:
--------------------------------------------------------------------------------
1 | .el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:34px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#fff}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:#f5f7fa}.el-select-dropdown__item.selected{color:#42B983;font-weight:700}
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/rate.css:
--------------------------------------------------------------------------------
1 | .el-rate__icon,.el-rate__item{position:relative;display:inline-block}.el-rate{height:20px;line-height:1}.el-rate:active,.el-rate:focus{outline-width:0}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon{font-size:18px;margin-right:6px;color:#c0c4cc;-webkit-transition:.3s;transition:.3s}.el-rate__decimal,.el-rate__icon .path2{position:absolute;top:0;left:0}.el-rate__icon.hover{-webkit-transform:scale(1.15);transform:scale(1.15)}.el-rate__decimal{display:inline-block;overflow:hidden}.el-rate__text{font-size:14px;vertical-align:middle}
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/textcolor/plugin.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3 | * Licensed under the LGPL or a commercial license.
4 | * For LGPL see License.txt in the project root for license information.
5 | * For commercial licenses see https://www.tiny.cloud/
6 | *
7 | * Version: 5.0.1 (2019-02-21)
8 | */
9 | !function(){"use strict";tinymce.util.Tools.resolve("tinymce.PluginManager").add("textcolor",function(){console.warn("Text color plugin is now built in to the core editor, please remove it from your editor configuration")}),function o(){}}();
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/colorpicker/plugin.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3 | * Licensed under the LGPL or a commercial license.
4 | * For LGPL see License.txt in the project root for license information.
5 | * For commercial licenses see https://www.tiny.cloud/
6 | *
7 | * Version: 5.0.1 (2019-02-21)
8 | */
9 | !function(){"use strict";tinymce.util.Tools.resolve("tinymce.PluginManager").add("colorpicker",function(){console.warn("Color picker plugin is now built in to the core editor, please remove it from your editor configuration")}),function o(){}}();
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/contextmenu/plugin.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3 | * Licensed under the LGPL or a commercial license.
4 | * For LGPL see License.txt in the project root for license information.
5 | * For commercial licenses see https://www.tiny.cloud/
6 | *
7 | * Version: 5.0.1 (2019-02-21)
8 | */
9 | !function(){"use strict";tinymce.util.Tools.resolve("tinymce.PluginManager").add("contextmenu",function(){console.warn("Context menu plugin is now built in to the core editor, please remove it from your editor configuration")}),function n(){}}();
--------------------------------------------------------------------------------
/src/assets/icons/svg/issue.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/components/Base/Cola/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
21 |
26 |
--------------------------------------------------------------------------------
/src/layout/Sidebar/sideLink.vue:
--------------------------------------------------------------------------------
1 |
23 |
--------------------------------------------------------------------------------
/src/language/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import VueI18n from 'vue-i18n'
3 | import cache from '@/utils/cache'
4 | import elementEnLocale from 'element-ui/lib/locale/lang/en'
5 | import elementZhLocale from 'element-ui/lib/locale/lang/zh-CN'
6 | import enLocale from './en.js'
7 | import zhLocale from './zh.js'
8 |
9 | Vue.use(VueI18n)
10 |
11 | const i18n = new VueI18n({
12 | locale: cache.getCookie('language') || 'zh',
13 | messages: {
14 | zh: {
15 | ...zhLocale,
16 | ...elementZhLocale
17 | },
18 | en: {
19 | ...enLocale,
20 | ...elementEnLocale
21 | }
22 | }
23 | })
24 |
25 | export default i18n
26 |
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
26 |
27 |
33 |
--------------------------------------------------------------------------------
/src/utils/Export2Zip.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | require('script-loader!file-saver');
3 | import JSZip from 'jszip'
4 |
5 | export function export_txt_to_zip({header, data, txtName, zipName}) {
6 | const zip = new JSZip()
7 | const txt_name = txtName || 'file'
8 | const zip_name = zipName || 'file'
9 | let txtData = `${header}\r\n`
10 | data.forEach((row) => {
11 | let tempStr = ''
12 | tempStr = row.toString()
13 | txtData += `${tempStr}\r\n`
14 | })
15 | zip.file(`${txt_name}.txt`, txtData)
16 | zip.generateAsync({
17 | type: "blob"
18 | }).then((blob) => {
19 | saveAs(blob, `${zip_name}.zip`)
20 | }, (err) => {
21 | alert('导出失败')
22 | })
23 | }
24 |
--------------------------------------------------------------------------------
/src/assets/icons/svg/guide.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/layout/PageView/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
29 |
--------------------------------------------------------------------------------
/src/assets/icons/svg/chart.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/textcolor/plugin.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3 | * Licensed under the LGPL or a commercial license.
4 | * For LGPL see License.txt in the project root for license information.
5 | * For commercial licenses see https://www.tiny.cloud/
6 | *
7 | * Version: 5.0.1 (2019-02-21)
8 | */
9 | (function () {
10 | var textcolor = (function () {
11 | 'use strict';
12 |
13 | var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
14 |
15 | global.add('textcolor', function () {
16 | console.warn('Text color plugin is now built in to the core editor, please remove it from your editor configuration');
17 | });
18 | function Plugin () {
19 | }
20 |
21 | return Plugin;
22 |
23 | }());
24 | })();
25 |
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/colorpicker/plugin.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3 | * Licensed under the LGPL or a commercial license.
4 | * For LGPL see License.txt in the project root for license information.
5 | * For commercial licenses see https://www.tiny.cloud/
6 | *
7 | * Version: 5.0.1 (2019-02-21)
8 | */
9 | (function () {
10 | var colorpicker = (function () {
11 | 'use strict';
12 |
13 | var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
14 |
15 | global.add('colorpicker', function () {
16 | console.warn('Color picker plugin is now built in to the core editor, please remove it from your editor configuration');
17 | });
18 | function Plugin () {
19 | }
20 |
21 | return Plugin;
22 |
23 | }());
24 | })();
25 |
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/contextmenu/plugin.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3 | * Licensed under the LGPL or a commercial license.
4 | * For LGPL see License.txt in the project root for license information.
5 | * For commercial licenses see https://www.tiny.cloud/
6 | *
7 | * Version: 5.0.1 (2019-02-21)
8 | */
9 | (function () {
10 | var contextmenu = (function () {
11 | 'use strict';
12 |
13 | var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
14 |
15 | global.add('contextmenu', function () {
16 | console.warn('Context menu plugin is now built in to the core editor, please remove it from your editor configuration');
17 | });
18 | function Plugin () {
19 | }
20 |
21 | return Plugin;
22 |
23 | }());
24 | })();
25 |
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/reset.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";body{font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;font-weight:400;font-size:14px;color:#000;-webkit-font-smoothing:antialiased}a{color:#42B983;text-decoration:none}a:focus,a:hover{color:rgb(104, 199, 156)}a:active{color:rgb(59, 167, 118)}h1,h2,h3,h4,h5,h6{color:#606266;font-weight:inherit}h1:first-child,h2:first-child,h3:first-child,h4:first-child,h5:first-child,h6:first-child,p:first-child{margin-top:0}h1:last-child,h2:last-child,h3:last-child,h4:last-child,h5:last-child,h6:last-child,p:last-child{margin-bottom:0}h1{font-size:20px}h2{font-size:18px}h3{font-size:16px}h4,h5,h6,p{font-size:inherit}p{line-height:1.8}sub,sup{font-size:13px}small{font-size:12px}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/print/plugin.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3 | * Licensed under the LGPL or a commercial license.
4 | * For LGPL see License.txt in the project root for license information.
5 | * For commercial licenses see https://www.tiny.cloud/
6 | *
7 | * Version: 5.0.1 (2019-02-21)
8 | */
9 | !function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=function(n){n.addCommand("mcePrint",function(){n.getWin().print()})},i=function(n){n.ui.registry.addButton("print",{icon:"print",tooltip:"Print",onAction:function(){return n.execCommand("mcePrint")}}),n.ui.registry.addMenuItem("print",{text:"Print...",icon:"print",onAction:function(){return n.execCommand("mcePrint")}})};n.add("print",function(n){t(n),i(n),n.addShortcut("Meta+P","","mcePrint")}),function r(){}}();
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/badge.css:
--------------------------------------------------------------------------------
1 | .el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{background-color:#f56c6c;border-radius:10px;color:#fff;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #fff}.el-badge__content.is-fixed{position:absolute;top:0;right:10px;-webkit-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%}.el-badge__content--primary{background-color:#42B983}.el-badge__content--success{background-color:#67c23a}.el-badge__content--warning{background-color:#e6a23c}.el-badge__content--info{background-color:#909399}.el-badge__content--danger{background-color:#f56c6c}
--------------------------------------------------------------------------------
/src/components/Base/SvgIcon/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
27 |
28 |
37 |
--------------------------------------------------------------------------------
/src/pages/index/children/errorLog/errorLog.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
{{$t('errorLog.tip')}}
4 |
8 |
{{$t('errorLog.button')}}
9 |
10 |
11 |
25 |
33 |
--------------------------------------------------------------------------------
/src/pages/index/children/guide/steps.js:
--------------------------------------------------------------------------------
1 | const steps = [
2 | {
3 | element: '#cola',
4 | popover: {
5 | name: 'Cola',
6 | title: 'Cola',
7 | description: 'Open && Close sidebar',
8 | position: 'bottom'
9 | }
10 | },
11 | {
12 | element: '#app-breadcrumb',
13 | popover: {
14 | name: 'Breadcrumb',
15 | title: 'Breadcrumb',
16 | description: 'Indicate the current page location',
17 | position: 'bottom'
18 | }
19 | },
20 | {
21 | element: '#languageSelect',
22 | popover: {
23 | name: 'Language',
24 | title: 'Language',
25 | description: 'Switch the system language',
26 | position: 'left'
27 | }
28 | }
29 | ]
30 | export default steps
31 |
--------------------------------------------------------------------------------
/src/assets/icons/svg/component.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/row.css:
--------------------------------------------------------------------------------
1 | .el-row{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box}.el-row::after,.el-row::before{display:table;content:""}.el-row::after{clear:both}.el-row--flex{display:-webkit-box;display:-ms-flexbox;display:flex}.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-row--flex.is-justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.el-row--flex.is-justify-space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.el-row--flex.is-align-middle{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-row--flex.is-align-bottom{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/hr/plugin.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3 | * Licensed under the LGPL or a commercial license.
4 | * For LGPL see License.txt in the project root for license information.
5 | * For commercial licenses see https://www.tiny.cloud/
6 | *
7 | * Version: 5.0.1 (2019-02-21)
8 | */
9 | !function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),o=function(n){n.addCommand("InsertHorizontalRule",function(){n.execCommand("mceInsertContent",!1," ")})},t=function(n){n.ui.registry.addButton("hr",{icon:"horizontal-rule",tooltip:"Horizontal line",onAction:function(){return n.execCommand("InsertHorizontalRule")}}),n.ui.registry.addMenuItem("hr",{icon:"horizontal-rule",text:"Horizontal line",onAction:function(){return n.execCommand("InsertHorizontalRule")}})};n.add("hr",function(n){o(n),t(n)}),function e(){}}();
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/spinner.css:
--------------------------------------------------------------------------------
1 | .el-time-spinner{width:100%;white-space:nowrap}.el-spinner{display:inline-block;vertical-align:middle}.el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}@-webkit-keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}}
--------------------------------------------------------------------------------
/src/layout/NavBar/LanguageSelect/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | 中文
8 | English
9 |
10 |
11 |
12 |
27 |
--------------------------------------------------------------------------------
/public/static/tinymce/skins/content/default/content.min.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3 | * Licensed under the LGPL or a commercial license.
4 | * For LGPL see License.txt in the project root for license information.
5 | * For commercial licenses see https://www.tiny.cloud/
6 | */
7 | body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}table{border-collapse:collapse}table td,table th{border:1px solid #ccc;padding:.4rem}blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}
8 | /*# sourceMappingURL=content.min.css.map */
9 |
--------------------------------------------------------------------------------
/public/static/tinymce/skins/content/writer/content.min.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3 | * Licensed under the LGPL or a commercial license.
4 | * For LGPL see License.txt in the project root for license information.
5 | * For commercial licenses see https://www.tiny.cloud/
6 | */
7 | body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem auto;max-width:900px}table{border-collapse:collapse}table td,table th{border:1px solid #ccc;padding:.4rem}blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}
8 | /*# sourceMappingURL=content.min.css.map */
9 |
--------------------------------------------------------------------------------
/public/static/tinymce/skins/content/document/content.min.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3 | * Licensed under the LGPL or a commercial license.
4 | * For LGPL see License.txt in the project root for license information.
5 | * For commercial licenses see https://www.tiny.cloud/
6 | */
7 | @media screen{html{background:#f4f4f4}}body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif}@media screen{body{background-color:#fff;box-shadow:0 0 4px rgba(0,0,0,.15);box-sizing:border-box;margin:1rem auto 0;max-width:820px;min-height:calc(99vh);padding:4rem 6rem 6rem 6rem}}table{border-collapse:collapse}table td,table th{border:1px solid #ccc;padding:.4rem}blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}figure figcaption{color:#999;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}
8 | /*# sourceMappingURL=content.min.css.map */
9 |
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/display.css:
--------------------------------------------------------------------------------
1 | @media only screen and (max-width:767px){.hidden-xs-only{display:none!important}}@media only screen and (min-width:768px){.hidden-sm-and-up{display:none!important}}@media only screen and (min-width:768px) and (max-width:992px - 1){.hidden-sm-only{display:none!important}}@media only screen and (max-width:991px){.hidden-sm-and-down{display:none!important}}@media only screen and (min-width:992px){.hidden-md-and-up{display:none!important}}@media only screen and (min-width:992px) and (max-width:1200px - 1){.hidden-md-only{display:none!important}}@media only screen and (max-width:1199px){.hidden-md-and-down{display:none!important}}@media only screen and (min-width:1200px){.hidden-lg-and-up{display:none!important}}@media only screen and (min-width:1200px) and (max-width:1920px - 1){.hidden-lg-only{display:none!important}}@media only screen and (max-width:1919px){.hidden-lg-and-down{display:none!important}}@media only screen and (min-width:1920px){.hidden-xl-only{display:none!important}}
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/breadcrumb.css:
--------------------------------------------------------------------------------
1 | .el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb::after,.el-breadcrumb::before{display:table;content:""}.el-breadcrumb::after{clear:both}.el-breadcrumb__separator{margin:0 9px;font-weight:700;color:#c0c4cc}.el-breadcrumb__separator[class*=icon]{margin:0 6px;font-weight:400}.el-breadcrumb__item{float:left}.el-breadcrumb__inner{color:#606266}.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{font-weight:700;text-decoration:none;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1);color:#303133}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:#42B983;cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{font-weight:400;color:#606266;cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}
--------------------------------------------------------------------------------
/src/directive/permission/permission.js:
--------------------------------------------------------------------------------
1 | import store from '@/store'
2 |
3 | export default {
4 | inserted(el, binding, vnode) {
5 | const permissionRole = binding.value
6 | const hasPermission = checkPermission(permissionRole)
7 | if (!hasPermission) {
8 | el.parentNode && el.parentNode.removeChild(el)
9 | }
10 | }
11 | }
12 |
13 | export function checkPermission(permissionRole) {
14 | // 不能作为通用方案,判断权限的方法需自行实现
15 | // 当前采用登录角色是否包含被验证的permissionRole
16 | let currentRole = (store.state.login.user && store.state.login.user.roles) || 'visitor'
17 | if (typeof currentRole === 'string') {
18 | currentRole = [currentRole]
19 | }
20 | if (permissionRole && Array.isArray(permissionRole)) {
21 | const hasPermission = currentRole.some(role => {
22 | return permissionRole.includes(role)
23 | })
24 | return hasPermission
25 | } else {
26 | throw new Error(`Error! Please Enter Array Type"`)
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/scrollbar.css:
--------------------------------------------------------------------------------
1 | .el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;-webkit-transition:opacity 120ms ease-out;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/carousel-item.css:
--------------------------------------------------------------------------------
1 | .el-carousel__item,.el-carousel__mask{position:absolute;height:100%;top:0;left:0}.el-carousel__item{width:100%;display:inline-block;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item.is-animating{-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card{width:50%;-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:2}.el-carousel__mask{width:100%;background-color:#fff;opacity:.24;-webkit-transition:.2s;transition:.2s}
--------------------------------------------------------------------------------
/src/layout/Sidebar/sideValue.vue:
--------------------------------------------------------------------------------
1 |
30 |
41 |
--------------------------------------------------------------------------------
/src/assets/icons/svg/documentation.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/layout/NavBar/Screenfull/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
39 |
--------------------------------------------------------------------------------
/src/assets/icons/svg/lock.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 uncleLian
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/public/static/tinymce/skins/content/default/content.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3 | * Licensed under the LGPL or a commercial license.
4 | * For LGPL see License.txt in the project root for license information.
5 | * For commercial licenses see https://www.tiny.cloud/
6 | */
7 | body {
8 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
9 | line-height: 1.4;
10 | margin: 1rem;
11 | }
12 | table {
13 | border-collapse: collapse;
14 | }
15 | table th,
16 | table td {
17 | border: 1px solid #ccc;
18 | padding: .4rem;
19 | }
20 | blockquote {
21 | border-left: 2px solid #ccc;
22 | margin-left: 1.5rem;
23 | padding-left: 1rem;
24 | }
25 | figure {
26 | display: table;
27 | margin: 1rem auto;
28 | }
29 | figure figcaption {
30 | color: #999;
31 | display: block;
32 | margin-top: .25rem;
33 | text-align: center;
34 | }
35 | hr {
36 | border-color: #ccc;
37 | border-style: solid;
38 | border-width: 1px 0 0 0;
39 | }
40 | code {
41 | background-color: #e8e8e8;
42 | border-radius: 3px;
43 | padding: .1rem .2rem;
44 | }
--------------------------------------------------------------------------------
/src/assets/icons/svg/fullscreen.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/static/tinymce/skins/content/writer/content.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3 | * Licensed under the LGPL or a commercial license.
4 | * For LGPL see License.txt in the project root for license information.
5 | * For commercial licenses see https://www.tiny.cloud/
6 | */
7 | body {
8 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
9 | line-height: 1.4;
10 | margin: 1rem auto;
11 | max-width: 900px;
12 | }
13 | table {
14 | border-collapse: collapse;
15 | }
16 | table th,
17 | table td {
18 | border: 1px solid #ccc;
19 | padding: .4rem;
20 | }
21 | blockquote {
22 | border-left: 2px solid #ccc;
23 | margin-left: 1.5rem;
24 | padding-left: 1rem;
25 | }
26 | figure {
27 | display: table;
28 | margin: 1rem auto;
29 | }
30 | figure figcaption {
31 | color: #999;
32 | display: block;
33 | margin-top: .25rem;
34 | text-align: center;
35 | }
36 | hr {
37 | border-color: #ccc;
38 | border-style: solid;
39 | border-width: 1px 0 0 0;
40 | }
41 | code {
42 | background-color: #e8e8e8;
43 | border-radius: 3px;
44 | padding: .1rem .2rem;
45 | }
--------------------------------------------------------------------------------
/src/utils/singleMessage.js:
--------------------------------------------------------------------------------
1 | import { Message } from 'element-ui'
2 |
3 | /**
4 | * 只显示一条弹框,使用element-ui的message完成
5 | * single默认值true,因为项目需求,默认只弹出一个,可以根据实际需要设置
6 | * singleMessage基本用法和Message一样,但缺少close、closeAll等方法
7 | * 全局使用可以挂载到Vue.prototype.$singleMessage = Message
8 | * 也可以替换$message,但需要放到Vue.use(ElementUI)之后
9 | */
10 |
11 | const singleMessage = function (options) {
12 | options = options || {}
13 | if (typeof options === 'string') {
14 | options = {
15 | message: options
16 | }
17 | }
18 | handleMessage(options)
19 | }
20 |
21 | const MessageType = ['success', 'warning', 'info', 'error']
22 | MessageType.forEach(type => {
23 | singleMessage[type] = options => {
24 | if (typeof options === 'string') {
25 | options = {
26 | message: options
27 | }
28 | }
29 | options.type = type
30 | return handleMessage(options)
31 | }
32 | })
33 |
34 | const handleMessage = (options, single = true) => {
35 | if (single) {
36 | Message.closeAll() // 关闭之前所有Message
37 | Message(options)
38 | } else {
39 | Message(options)
40 | }
41 | }
42 |
43 | export default singleMessage
44 |
--------------------------------------------------------------------------------
/src/main.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from '@/App'
3 | import router from '@/router'
4 | import store from '@/store'
5 |
6 | // 第三方
7 | import ElementUI from 'element-ui'
8 | // import 'element-ui/lib/theme-chalk/index.css' // element-ui 默认颜色
9 | import VueProgressBar from 'vue-progressbar' // 进度条
10 | import vueSticky from 'vue-position-sticky' // 图钉
11 | import vueBacktop from 'vue-backtop-pack' // 返回顶部
12 | import vueNumTo from 'vue-num-to' // 动态数值
13 | import vueClipboard from 'vue-clipboard-pack' // 剪切板
14 |
15 | // 自定义
16 | import '@/assets' // 字体、样式等资源
17 | import '@/components' // 全局组件
18 | import '@/directive' // 全局指令
19 | import '@/filters' // 全局过滤
20 | import '@/utils/permission' // 权限验证
21 | import '@/utils/errorLog' // 错误捕捉
22 | import '@/utils/cache' // 缓存
23 | import i18n from '@/language' // 国际化
24 |
25 | import '@/mock' // 模拟数据
26 |
27 | Vue.config.productionTip = false
28 |
29 | // 第三方
30 | Vue.use(ElementUI, { size: 'small', i18n: (key, value) => i18n.t(key, value) })
31 | Vue.use(VueProgressBar)
32 | Vue.use(vueSticky)
33 | Vue.use(vueBacktop)
34 | Vue.use(vueNumTo)
35 | Vue.use(vueClipboard)
36 |
37 | new Vue({
38 | router,
39 | store,
40 | i18n,
41 | render: h => h(App)
42 | }).$mount('#app')
43 |
--------------------------------------------------------------------------------
/src/pages/index/children/components-demo/singleMessage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
Info
9 |
Success
10 |
Warning
11 |
Error
12 |
13 |
14 |
36 |
--------------------------------------------------------------------------------
/src/components/Base/Breadcrumb/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{translationRouteTitle(item.meta.title || item.name)}}
4 |
5 |
6 |
30 |
45 |
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/code/plugin.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3 | * Licensed under the LGPL or a commercial license.
4 | * For LGPL see License.txt in the project root for license information.
5 | * For commercial licenses see https://www.tiny.cloud/
6 | *
7 | * Version: 5.0.1 (2019-02-21)
8 | */
9 | !function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=function(e,n){e.focus(),e.undoManager.transact(function(){e.setContent(n)}),e.selection.setCursorLocation(),e.nodeChanged()},o=function(e){return e.getContent({source_view:!0})},n=function(n){var e=o(n);n.windowManager.open({title:"Source Code",size:"large",body:{type:"panel",items:[{type:"textarea",name:"code"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{code:e},onSubmit:function(e){t(n,e.getData().code),e.close()}})},c=function(e){e.addCommand("mceCodeEditor",function(){n(e)})},i=function(e){e.ui.registry.addButton("code",{icon:"sourcecode",tooltip:"Source code",onAction:function(){return n(e)}}),e.ui.registry.addMenuItem("code",{icon:"sourcecode",text:"Source code",onAction:function(){return n(e)}})};e.add("code",function(e){return c(e),i(e),{}}),function u(){}}();
--------------------------------------------------------------------------------
/src/assets/icons/svg/user.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/icons/svg/view.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/icons/svg/markdown.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/pages/index/children/components-demo/backTop.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
9 |
10 |
11 |
12 |
line
13 |
14 |
15 |
16 | {{$t('backTop.changeButton')}}
17 |
18 |
19 |
line
20 |
21 |
22 |
23 |
33 |
40 |
--------------------------------------------------------------------------------
/src/pages/index/children/guide/guide.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{$t('guide.description')}}
5 |
driver.js
6 |
7 |
{{$t('guide.button')}}
8 |
9 |
10 |
11 |
41 |
--------------------------------------------------------------------------------
/public/static/tinymce/skins/content/document/content.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3 | * Licensed under the LGPL or a commercial license.
4 | * For LGPL see License.txt in the project root for license information.
5 | * For commercial licenses see https://www.tiny.cloud/
6 | */
7 | @media screen {
8 | html {
9 | background: #f4f4f4;
10 | }
11 | }
12 | body {
13 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
14 | }
15 | @media screen {
16 | body {
17 | background-color: #fff;
18 | box-shadow: 0 0 4px rgba(0, 0, 0, 0.15);
19 | box-sizing: border-box;
20 | margin: 1rem auto 0;
21 | max-width: 820px;
22 | min-height: calc(99vh);
23 | padding: 4rem 6rem 6rem 6rem;
24 | }
25 | }
26 | table {
27 | border-collapse: collapse;
28 | }
29 | table th,
30 | table td {
31 | border: 1px solid #ccc;
32 | padding: .4rem;
33 | }
34 | blockquote {
35 | border-left: 2px solid #ccc;
36 | margin-left: 1.5rem;
37 | padding-left: 1rem;
38 | }
39 | figure figcaption {
40 | color: #999;
41 | margin-top: .25rem;
42 | text-align: center;
43 | }
44 | hr {
45 | border-color: #ccc;
46 | border-style: solid;
47 | border-width: 1px 0 0 0;
48 | }
--------------------------------------------------------------------------------
/src/pages/index/children/dashboard/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
39 |
47 |
--------------------------------------------------------------------------------
/src/assets/icons/svg/github.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/icons/svg/backtop.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/pages/index/children/components-demo/dragDialog.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
{{$t('dragDialog.button')}}
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
37 |
41 |
--------------------------------------------------------------------------------
/src/assets/icons/svg/flex-left.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/icons/svg/thumbtack.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/pages/index/children/i18n-demo/local.js:
--------------------------------------------------------------------------------
1 | export default {
2 | zh: {
3 | i18nDemo: {
4 | switchLang: '切换语言',
5 | note: '本项目国际化基于',
6 | button: {
7 | round: '圆形按钮',
8 | primary: '主要按钮',
9 | success: '成功按钮',
10 | info: '信息按钮',
11 | warning: '警告按钮',
12 | danger: '危险按钮'
13 | },
14 | alert: {
15 | success: '成功提示的文案',
16 | info: '消息提示的文案',
17 | warning: '警告提示的文案',
18 | error: '错误提示的文案'
19 | },
20 | datePickr: '选择日期'
21 | }
22 | },
23 | en: {
24 | i18nDemo: {
25 | switchLang: 'Switch Languange',
26 | note: 'The internationalization of the project is based on',
27 | button: {
28 | round: 'Round',
29 | primary: 'Primary',
30 | success: 'Success',
31 | info: 'Info',
32 | warning: 'Warning',
33 | danger: 'Danger'
34 | },
35 | alert: {
36 | success: 'success alert',
37 | info: 'info alert',
38 | warning: 'warning alert',
39 | error: 'error alert'
40 | },
41 | datePickr: 'Pick a day'
42 | }
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/alert.css:
--------------------------------------------------------------------------------
1 | .el-alert{width:100%;padding:8px 16px;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;position:relative;background-color:#fff;overflow:hidden;opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:opacity .2s;transition:opacity .2s}.el-alert.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success{background-color:#f0f9eb;color:#67c23a}.el-alert--success .el-alert__description{color:#67c23a}.el-alert--info{background-color:#f4f4f5;color:#909399}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning{background-color:#fdf6ec;color:#e6a23c}.el-alert--warning .el-alert__description{color:#e6a23c}.el-alert--error{background-color:#fef0f0;color:#f56c6c}.el-alert--error .el-alert__description{color:#f56c6c}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px}.el-alert__icon.is-big{font-size:28px;width:28px}.el-alert__title{font-size:13px;line-height:18px}.el-alert__title.is-bold{font-weight:700}.el-alert .el-alert__description{font-size:12px;margin:5px 0 0}.el-alert__closebtn{font-size:12px;color:#c0c4cc;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.el-alert-fade-enter,.el-alert-fade-leave-active{opacity:0}
--------------------------------------------------------------------------------
/src/assets/icons/svg/users.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/nonbreaking/plugin.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3 | * Licensed under the LGPL or a commercial license.
4 | * For LGPL see License.txt in the project root for license information.
5 | * For commercial licenses see https://www.tiny.cloud/
6 | *
7 | * Version: 5.0.1 (2019-02-21)
8 | */
9 | !function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=function(n,e){var o,t=(o=n).plugins.visualchars&&o.plugins.visualchars.isEnabled()?' ':" ";n.insertContent(function(n,e){for(var o="",t=0;t
--------------------------------------------------------------------------------
/src/filters/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 |
3 | const filters = {
4 | devide_10k: function (num) {
5 | return num >= 10000 ? (num / 10000).toFixed(1) + '万' : num
6 | },
7 | // 时间格式化
8 | formatTime: function (time, formatType) {
9 | if (arguments.length === 0) {
10 | return null
11 | }
12 | const format = formatType || '{y}-{m}-{d} {h}:{i}:{s}'
13 | let date
14 | if (typeof time === 'object') {
15 | date = time
16 | } else {
17 | if (('' + time).length === 10) time = parseInt(time) * 1000
18 | date = new Date(time)
19 | }
20 | const formatObj = {
21 | y: date.getFullYear(),
22 | m: date.getMonth() + 1,
23 | d: date.getDate(),
24 | h: date.getHours(),
25 | i: date.getMinutes(),
26 | s: date.getSeconds(),
27 | a: date.getDay()
28 | }
29 | const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
30 | let value = formatObj[key]
31 | if (key === 'a') return ['一', '二', '三', '四', '五', '六', '日'][value - 1]
32 | if (result.length > 0 && value < 10) {
33 | value = '0' + value
34 | }
35 | return value || 0
36 | })
37 | return time_str
38 | }
39 | }
40 |
41 | // 注册全局过滤
42 | Object.keys(filters).forEach(key => {
43 | Vue.filter(key, filters[key])
44 | })
45 | // 挂在到全局
46 | Vue.prototype.$filter = filters
47 |
--------------------------------------------------------------------------------
/src/assets/icons/svg/number.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/pages/other/page404.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
The page you are looking for is either stolen by aliens or never existed.
6 |
7 | Go Home
8 |
9 |
10 | Issues me
11 |
12 |
13 |
14 |
15 |
20 |
53 |
--------------------------------------------------------------------------------
/src/pages/index/children/components-demo/progressbar.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
Start
8 |
Increase({{num}})
9 |
Decrease({{num}})
10 |
Set({{num}})
11 |
Finish
12 |
Fail
13 |
14 |
15 |
45 |
49 |
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/popper.css:
--------------------------------------------------------------------------------
1 | .el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}
--------------------------------------------------------------------------------
/src/assets/icons/svg/excel.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/print/plugin.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3 | * Licensed under the LGPL or a commercial license.
4 | * For LGPL see License.txt in the project root for license information.
5 | * For commercial licenses see https://www.tiny.cloud/
6 | *
7 | * Version: 5.0.1 (2019-02-21)
8 | */
9 | (function () {
10 | var print = (function () {
11 | 'use strict';
12 |
13 | var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
14 |
15 | var register = function (editor) {
16 | editor.addCommand('mcePrint', function () {
17 | editor.getWin().print();
18 | });
19 | };
20 | var Commands = { register: register };
21 |
22 | var register$1 = function (editor) {
23 | editor.ui.registry.addButton('print', {
24 | icon: 'print',
25 | tooltip: 'Print',
26 | onAction: function () {
27 | return editor.execCommand('mcePrint');
28 | }
29 | });
30 | editor.ui.registry.addMenuItem('print', {
31 | text: 'Print...',
32 | icon: 'print',
33 | onAction: function () {
34 | return editor.execCommand('mcePrint');
35 | }
36 | });
37 | };
38 | var Buttons = { register: register$1 };
39 |
40 | global.add('print', function (editor) {
41 | Commands.register(editor);
42 | Buttons.register(editor);
43 | editor.addShortcut('Meta+P', '', 'mcePrint');
44 | });
45 | function Plugin () {
46 | }
47 |
48 | return Plugin;
49 |
50 | }());
51 | })();
52 |
--------------------------------------------------------------------------------
/src/assets/icons/svg/editor.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/hr/plugin.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3 | * Licensed under the LGPL or a commercial license.
4 | * For LGPL see License.txt in the project root for license information.
5 | * For commercial licenses see https://www.tiny.cloud/
6 | *
7 | * Version: 5.0.1 (2019-02-21)
8 | */
9 | (function () {
10 | var hr = (function () {
11 | 'use strict';
12 |
13 | var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
14 |
15 | var register = function (editor) {
16 | editor.addCommand('InsertHorizontalRule', function () {
17 | editor.execCommand('mceInsertContent', false, ' ');
18 | });
19 | };
20 | var Commands = { register: register };
21 |
22 | var register$1 = function (editor) {
23 | editor.ui.registry.addButton('hr', {
24 | icon: 'horizontal-rule',
25 | tooltip: 'Horizontal line',
26 | onAction: function () {
27 | return editor.execCommand('InsertHorizontalRule');
28 | }
29 | });
30 | editor.ui.registry.addMenuItem('hr', {
31 | icon: 'horizontal-rule',
32 | text: 'Horizontal line',
33 | onAction: function () {
34 | return editor.execCommand('InsertHorizontalRule');
35 | }
36 | });
37 | };
38 | var Buttons = { register: register$1 };
39 |
40 | global.add('hr', function (editor) {
41 | Commands.register(editor);
42 | Buttons.register(editor);
43 | });
44 | function Plugin () {
45 | }
46 |
47 | return Plugin;
48 |
49 | }());
50 | })();
51 |
--------------------------------------------------------------------------------
/src/assets/css/global.styl:
--------------------------------------------------------------------------------
1 | @import './index';
2 |
3 | * {
4 | box-sizing: border-box;
5 | }
6 | html, body {
7 | width: 100%;
8 | height: 100%;
9 | min-width: 1024px;
10 | min-height: 100%;
11 | background: #f4f5f6;
12 | }
13 | body {
14 | font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, SimSun, sans-serif;
15 | font-weight: 400;
16 | font-size: 14px;
17 | color: #333;
18 | overflow-x: hidden;
19 | overflow-y: auto;
20 | }
21 | a {
22 | color: $appColor;
23 | text-decoration: none;
24 | outline: none;
25 | }
26 | // introduce;
27 | .app-introduce {
28 | width: fit-content;
29 | font-weight: 500;
30 | text-align: justify;
31 | line-height: 1.6em;
32 | padding: 1em;
33 | margin-bottom: 1.5em;
34 | background: rgba($appColor, 0.1);
35 | border-radius: 3px;
36 | a {
37 | margin-left: 5px;
38 | }
39 | p {
40 | margin: 1em 0 0 0;
41 | }
42 | }
43 | // hover
44 | .ishover {
45 | transition: background 0.3s;
46 | &:hover {
47 | background: rgba(0, 0, 0, 0.025);
48 | }
49 | }
50 | // table
51 | .tablePage-container {
52 | display: flex;
53 | align-items: center;
54 | flex-wrap: wrap;
55 | margin-bottom: 20px;
56 | .left-item {
57 | margin-right: 10px;
58 | &:last-child {
59 | margin-right: 0;
60 | }
61 | }
62 | }
63 | // drag style
64 | .sortable-chosen {
65 | background-color: #f0f9eb !important;
66 | }
67 | .sortable-ghost {
68 | background-color: rgba($appColorRGB, 0.5) !important;
69 | }
70 |
--------------------------------------------------------------------------------
/src/store/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Vuex from 'vuex'
3 | import cache from '@/utils/cache'
4 | import i18n from '@/language'
5 | import variables from '@/assets/css/index.styl'
6 | import { getList } from '@/api/list'
7 |
8 | Vue.use(Vuex)
9 |
10 | const state = {
11 | logs: [],
12 | sidebarStatus: cache.getCookie('sidebarStatus') !== 'false',
13 | language: cache.getCookie('language') || 'zh',
14 | theme: variables.appColor
15 | }
16 | const getters = {
17 | }
18 | const mutations = {
19 | SET_LOGS(state, error) {
20 | state.logs.unshift(error)
21 | },
22 | SET_SIDEBAR_STATUS(state) {
23 | let status = !state.sidebarStatus
24 | state.sidebarStatus = status
25 | cache.setCookie('sidebarStatus', status)
26 | },
27 | SET_LANGUAGE(state, lang) {
28 | state.language = lang
29 | i18n.locale = lang
30 | cache.setCookie('language', lang)
31 | },
32 | SET_THEME(state, color) {
33 | state.theme = color
34 | }
35 | }
36 | const actions = {
37 | GET_LIST_DATA(state) {
38 | return getList()
39 | }
40 | }
41 |
42 | // 自动引入和注册modules下的文件
43 | const modulesFiles = require.context('./modules', false, /\.js$/)
44 | const modules = modulesFiles.keys().reduce((modules, modulePath) => {
45 | const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1')
46 | const value = modulesFiles(modulePath)
47 | modules[moduleName] = value.default
48 | return modules
49 | }, {})
50 |
51 | export default new Vuex.Store({
52 | state,
53 | getters,
54 | mutations,
55 | actions,
56 | modules
57 | })
58 |
--------------------------------------------------------------------------------
/src/assets/icons/svg/flex-right.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/pages/index/children/components-demo/editor.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{$t('editor.description')}}
5 |
tinymce
6 |
7 |
8 |
9 |
10 |
{{content}}
11 |
12 |
13 |
14 |
26 |
56 |
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/notification.css:
--------------------------------------------------------------------------------
1 | .el-notification{display:-webkit-box;display:-ms-flexbox;display:flex;width:330px;padding:14px 26px 14px 13px;border-radius:8px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #ebeef5;position:fixed;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;overflow:hidden}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{margin-left:13px}.el-notification__title{font-weight:700;font-size:16px;color:#303133;margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:6px 0 0;color:#606266;text-align:justify}.el-notification__content p{margin:0}.el-notification__icon{height:24px;width:24px;font-size:24px}.el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:#909399;font-size:16px}.el-notification__closeBtn:hover{color:#606266}.el-notification .el-icon-success{color:#67c23a}.el-notification .el-icon-error{color:#f56c6c}.el-notification .el-icon-info{color:#909399}.el-notification .el-icon-warning{color:#e6a23c}.el-notification-fade-enter.right{right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.el-notification-fade-enter.left{left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.el-notification-fade-leave-active{opacity:0}
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/loading.css:
--------------------------------------------------------------------------------
1 | .el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{position:absolute;z-index:2000;background-color:rgba(255,255,255,.9);margin:0;top:0;right:0;bottom:0;left:0;-webkit-transition:opacity .3s;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:50px;width:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-loading-spinner .el-loading-text{color:#42B983;margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:42px;width:42px;-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#42B983;stroke-linecap:round}.el-loading-spinner i{color:#42B983}.el-loading-fade-enter,.el-loading-fade-leave-active{opacity:0}@-webkit-keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/visualblocks/plugin.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3 | * Licensed under the LGPL or a commercial license.
4 | * For LGPL see License.txt in the project root for license information.
5 | * For commercial licenses see https://www.tiny.cloud/
6 | *
7 | * Version: 5.0.1 (2019-02-21)
8 | */
9 | !function(){"use strict";var e=function(t){var n=t,o=function(){return n};return{get:o,set:function(t){n=t},clone:function(){return e(o())}}},t=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=function(t,n){t.fire("VisualBlocks",{state:n})},u=function(t,n,o){t.dom.toggleClass(t.getBody(),"mce-visualblocks"),o.set(!o.get()),i(t,o.get())},c=function(t,n,o){t.addCommand("mceVisualBlocks",function(){u(t,n,o)})},s=function(t){return t.getParam("visualblocks_default_state",!1,"boolean")},r=function(n,t,o){n.on("PreviewFormats AfterPreviewFormats",function(t){o.get()&&n.dom.toggleClass(n.getBody(),"mce-visualblocks","afterpreviewformats"===t.type)}),n.on("init",function(){s(n)&&u(n,t,o)}),n.on("remove",function(){n.dom.removeClass(n.getBody(),"mce-visualblocks")})},o=function(o,e){return function(n){n.setActive(e.get());var t=function(t){return n.setActive(t.state)};return o.on("VisualBlocks",t),function(){return o.off("VisualBlocks",t)}}},a=function(t,n){t.ui.registry.addToggleButton("visualblocks",{icon:"paragraph",tooltip:"Show blocks",onAction:function(){return t.execCommand("mceVisualBlocks")},onSetup:o(t,n)}),t.ui.registry.addToggleMenuItem("visualblocks",{text:"Show blocks",onAction:function(){return t.execCommand("mceVisualBlocks")},onSetup:o(t,n)})};t.add("visualblocks",function(t,n){var o=e(!1);c(t,n,o),a(t,o),r(t,n,o)}),function n(){}}();
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/switch.css:
--------------------------------------------------------------------------------
1 | .el-switch{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;font-size:14px;line-height:20px;height:20px;vertical-align:middle}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__core,.el-switch__label{display:inline-block;cursor:pointer;vertical-align:middle}.el-switch__label{-webkit-transition:.2s;transition:.2s;height:20px;font-size:14px;font-weight:500;color:#303133}.el-switch__label.is-active{color:#42B983}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{line-height:1;font-size:14px;display:inline-block}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #dcdfe6;outline:0;border-radius:10px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#dcdfe6;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s}.el-switch__core:after{content:"";position:absolute;top:1px;left:1px;border-radius:100%;-webkit-transition:all .3s;transition:all .3s;width:16px;height:16px;background-color:#fff}.el-switch.is-checked .el-switch__core{border-color:#42B983;background-color:#42B983}.el-switch.is-checked .el-switch__core::after{left:100%;margin-left:-17px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0}
--------------------------------------------------------------------------------
/src/components/Loading/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | {{loadingText}}
7 |
8 |
9 |
10 | {{nothingText}}
11 |
12 |
13 |
14 |
15 | {{errorText}}
16 |
17 |
18 |
19 |
20 |
40 |
61 |
--------------------------------------------------------------------------------
/src/pages/index/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
30 |
59 |
--------------------------------------------------------------------------------
/src/pages/index/children/components-demo/sticky.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
9 | {{$t('sticky.top')}}
10 | {{$t('sticky.top')}}
11 |
12 |
13 |
16 |
17 |
18 | {{$t('sticky.fixed50')}}
19 |
20 |
21 |
24 |
25 |
26 | {{$t('sticky.bottom')}}
27 |
28 |
29 |
32 |
33 |
34 |
44 |
51 |
--------------------------------------------------------------------------------
/src/pages/index/children/components-demo/loading.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | request
5 | loading
6 | nothing
7 | error
8 |
9 |
status:{{loading}}
10 |
11 |
12 |
13 |
47 |
54 |
--------------------------------------------------------------------------------
/src/assets/icons/svg/link.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/icons/svg/move.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/noneditable/plugin.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3 | * Licensed under the LGPL or a commercial license.
4 | * For LGPL see License.txt in the project root for license information.
5 | * For commercial licenses see https://www.tiny.cloud/
6 | *
7 | * Version: 5.0.1 (2019-02-21)
8 | */
9 | !function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),c=tinymce.util.Tools.resolve("tinymce.util.Tools"),l=function(t){return t.getParam("noneditable_noneditable_class","mceNonEditable")},u=function(t){return t.getParam("noneditable_editable_class","mceEditable")},f=function(t){var n=t.getParam("noneditable_regexp",[]);return n&&n.constructor===RegExp?[n]:n},s=function(n){return function(t){return-1!==(" "+t.attr("class")+" ").indexOf(n)}},d=function(i,o,c){return function(t){var n=arguments,e=n[n.length-2],r=0"===r){var a=o.lastIndexOf("<",e);if(-1!==a&&-1!==o.substring(a,e).indexOf('contenteditable="false"'))return t}return''+i.dom.encode("string"==typeof n[1]?n[1]:n[0])+" "}},n=function(n){var t,e,r="contenteditable";t=" "+c.trim(u(n))+" ",e=" "+c.trim(l(n))+" ";var a=s(t),i=s(e),o=f(n);n.on("PreInit",function(){0 '},o=function(o){var c=a(o),n=new RegExp(c.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(e){return"\\"+e}),"gi");o.on("BeforeSetContent",function(e){e.content=e.content.replace(n,r())}),o.on("PreInit",function(){o.serializer.addNodeFilter("img",function(e){for(var n,a,t=e.length;t--;)if((a=(n=e[t]).attr("class"))&&-1!==a.indexOf("mce-pagebreak")){var r=n.parent;if(o.schema.getBlockElements()[r.name]&&i(o)){r.type=3,r.value=c,r.raw=!0,n.remove();continue}n.type=3,n.value=c,n.raw=!0}})})},c=r,u=t,g=function(e){e.addCommand("mcePageBreak",function(){e.settings.pagebreak_split_block?e.insertContent(""+c()+"
"):e.insertContent(c())})},m=function(n){n.on("ResolveName",function(e){"IMG"===e.target.nodeName&&n.dom.hasClass(e.target,u())&&(e.name="pagebreak")})},s=function(e){e.ui.registry.addButton("pagebreak",{icon:"page-break",tooltip:"Page break",onAction:function(){return e.execCommand("mcePageBreak")}}),e.ui.registry.addMenuItem("pagebreak",{text:"Page break",icon:"page-break",onAction:function(){return e.execCommand("mcePageBreak")}})};e.add("pagebreak",function(e){g(e),s(e),o(e),m(e)}),function l(){}}();
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/progress.css:
--------------------------------------------------------------------------------
1 | .el-progress{position:relative;line-height:1}.el-progress__text{font-size:14px;color:#606266;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle{display:inline-block}.el-progress--circle .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.el-progress--circle .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress-bar,.el-progress-bar__inner::after,.el-progress-bar__innerText{display:inline-block;vertical-align:middle}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:#67c23a}.el-progress.is-success .el-progress__text{color:#67c23a}.el-progress.is-exception .el-progress-bar__inner{background-color:#f56c6c}.el-progress.is-exception .el-progress__text{color:#f56c6c}.el-progress-bar{padding-right:50px;width:100%;margin-right:-55px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:#ebeef5;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#42B983;text-align:right;border-radius:100px;line-height:1;white-space:nowrap;-webkit-transition:width .6s ease;transition:width .6s ease}.el-progress-bar__inner::after{content:"";height:100%}.el-progress-bar__innerText{color:#fff;font-size:12px;margin:0 5px}@-webkit-keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}@keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/message.css:
--------------------------------------------------------------------------------
1 | .el-message__closeBtn:focus,.el-message__content:focus{outline-width:0}.el-message{min-width:380px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;border-width:1px;border-style:solid;border-color:#ebeef5;position:fixed;left:50%;top:20px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:#edf2fc;-webkit-transition:opacity .3s,-webkit-transform .4s;transition:opacity .3s,-webkit-transform .4s;transition:opacity .3s,transform .4s;transition:opacity .3s,transform .4s,-webkit-transform .4s;overflow:hidden;padding:15px 15px 15px 20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-message.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message.is-closable .el-message__content{padding-right:16px}.el-message p{margin:0}.el-message--info .el-message__content{color:#909399}.el-message--success{background-color:#f0f9eb;border-color:#e1f3d8}.el-message--success .el-message__content{color:#67c23a}.el-message--warning{background-color:#fdf6ec;border-color:#faecd8}.el-message--warning .el-message__content{color:#e6a23c}.el-message--error{background-color:#fef0f0;border-color:#fde2e2}.el-message--error .el-message__content{color:#f56c6c}.el-message__icon{margin-right:10px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__closeBtn{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:#c0c4cc;font-size:16px}.el-message__closeBtn:hover{color:#909399}.el-message .el-icon-success{color:#67c23a}.el-message .el-icon-error{color:#f56c6c}.el-message .el-icon-info{color:#909399}.el-message .el-icon-warning{color:#e6a23c}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/save/plugin.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3 | * Licensed under the LGPL or a commercial license.
4 | * For LGPL see License.txt in the project root for license information.
5 | * For commercial licenses see https://www.tiny.cloud/
6 | *
7 | * Version: 5.0.1 (2019-02-21)
8 | */
9 | !function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),o=tinymce.util.Tools.resolve("tinymce.util.Tools"),a=function(n){return n.getParam("save_enablewhendirty",!0)},i=function(n){return!!n.getParam("save_onsavecallback")},c=function(n){return!!n.getParam("save_oncancelcallback")},r=function(n,e){n.notificationManager.open({text:e,type:"error"})},e=function(n){var e;if(e=t.DOM.getParent(n.id,"form"),!a(n)||n.isDirty()){if(n.save(),i(n))return n.execCallback("save_onsavecallback",n),void n.nodeChanged();e?(n.setDirty(!1),e.onsubmit&&!e.onsubmit()||("function"==typeof e.submit?e.submit():r(n,"Error: Form submit field collision.")),n.nodeChanged()):r(n,"Error: No form element found.")}},u=function(n){var e=o.trim(n.startContent);c(n)?n.execCallback("save_oncancelcallback",n):(n.setContent(e),n.undoManager.clear(),n.nodeChanged())},l=function(n){n.addCommand("mceSave",function(){e(n)}),n.addCommand("mceCancel",function(){u(n)})},d=function(t){return function(n){var e=function(){n.setDisabled(a(t)&&!t.isDirty())};return t.on("nodeChange dirty",e),function(){return t.off("nodeChange dirty",e)}}},s=function(n){n.ui.registry.addButton("save",{icon:"save",tooltip:"Save",disabled:!0,onAction:function(){return n.execCommand("mceSave")},onSetup:d(n)}),n.ui.registry.addButton("cancel",{icon:"cancel",tooltip:"Cancel",disabled:!0,onAction:function(){return n.execCommand("mceCancel")},onSetup:d(n)}),n.addShortcut("Meta+S","","mceSave")};n.add("save",function(n){s(n),l(n)}),function m(){}}();
--------------------------------------------------------------------------------
/src/components/GithubCorner/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
35 |
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/tabfocus/plugin.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3 | * Licensed under the LGPL or a commercial license.
4 | * For LGPL see License.txt in the project root for license information.
5 | * For commercial licenses see https://www.tiny.cloud/
6 | *
7 | * Version: 5.0.1 (2019-02-21)
8 | */
9 | !function(c){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),s=tinymce.util.Tools.resolve("tinymce.EditorManager"),a=tinymce.util.Tools.resolve("tinymce.Env"),y=tinymce.util.Tools.resolve("tinymce.util.Delay"),f=tinymce.util.Tools.resolve("tinymce.util.Tools"),d=tinymce.util.Tools.resolve("tinymce.util.VK"),m=function(e){return e.getParam("tab_focus",e.getParam("tabfocus_elements",":prev,:next"))},v=t.DOM,n=function(e){e.keyCode!==d.TAB||e.ctrlKey||e.altKey||e.metaKey||e.preventDefault()},i=function(r){function e(n){var i,o,e,l;if(!(n.keyCode!==d.TAB||n.ctrlKey||n.altKey||n.metaKey||n.isDefaultPrevented())&&(1===(e=f.explode(m(r))).length&&(e[1]=e[0],e[0]=":prev"),o=n.shiftKey?":prev"===e[0]?u(-1):v.get(e[0]):":next"===e[1]?u(1):v.get(e[1]))){var t=s.get(o.id||o.name);o.id&&t?t.focus():y.setTimeout(function(){a.webkit||c.window.focus(),o.focus()},10),n.preventDefault()}function u(e){function t(e){return/INPUT|TEXTAREA|BUTTON/.test(e.tagName)&&s.get(n.id)&&-1!==e.tabIndex&&function t(e){return"BODY"===e.nodeName||"hidden"!==e.type&&"none"!==e.style.display&&"hidden"!==e.style.visibility&&t(e.parentNode)}(e)}if(o=v.select(":input:enabled,*[tabindex]:not(iframe)"),f.each(o,function(e,t){if(e.id===r.id)return i=t,!1}),0',e&&(n+='"),c.each(t.contentCSS,function(e){n+=' '});var o=t.settings.body_id||"tinymce";-1!==o.indexOf("=")&&(o=(o=t.getParam("body_id","","hash"))[t.id]||o);var r=t.settings.body_class||"";-1!==r.indexOf("=")&&(r=(r=t.getParam("body_class","","hash"))[t.id]||"");var a=t.settings.directionality?' dir="'+t.settings.directionality+'"':"";return""+n+'"+t.getContent()+'
49 |
--------------------------------------------------------------------------------
/src/layout/NavBar/UserSelect/infoDialog.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | {{form.roles}}
9 |
10 |
11 |
15 |
16 |
17 |
58 |
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/popover.css:
--------------------------------------------------------------------------------
1 | .el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-popover{position:absolute;background:#fff;min-width:150px;border-radius:4px;border:1px solid #ebeef5;padding:12px;z-index:2000;color:#606266;line-height:1.4;text-align:justify;font-size:14px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-popover--plain{padding:18px 20px}.el-popover__title{color:#303133;font-size:16px;line-height:1;margin-bottom:12px}.el-popover:focus,.el-popover:focus:active,.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing){outline-width:0}
--------------------------------------------------------------------------------
/src/assets/icons/svg/qq.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/anchor/plugin.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3 | * Licensed under the LGPL or a commercial license.
4 | * For LGPL see License.txt in the project root for license information.
5 | * For commercial licenses see https://www.tiny.cloud/
6 | *
7 | * Version: 5.0.1 (2019-02-21)
8 | */
9 | !function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),a=function(e){return/^[A-Za-z][A-Za-z0-9\-:._]*$/.test(e)},t=function(e){var t=e.selection.getNode();return"A"===t.tagName&&""===e.dom.getAttrib(t,"href")?t.getAttribute("id")||t.getAttribute("name"):""},r=function(e,t){var n=e.selection.getNode();"A"===n.tagName&&""===e.dom.getAttrib(n,"href")?(n.removeAttribute("name"),n.id=t,e.undoManager.add()):(e.focus(),e.selection.collapse(!0),e.execCommand("mceInsertContent",!1,e.dom.createHTML("a",{id:t})))},n=function(o){var e=t(o);o.windowManager.open({title:"Anchor",size:"normal",body:{type:"panel",items:[{name:"id",type:"input",label:"ID",placeholder:"example"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{id:e},onSubmit:function(e){var t,n;t=o,n=e.getData().id,(a(n)?(r(t,n),0):(t.windowManager.alert("Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores."),1))||e.close()}})},o=function(e){e.addCommand("mceAnchor",function(){n(e)})},i=function(o){return function(e){for(var t=0;t
--------------------------------------------------------------------------------
/src/assets/icons/svg/global.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/components/Base/ErrorLog/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | {{scope.$index + 1}}
14 |
15 |
16 |
17 |
18 | {{scope.row.time | formatTime('{y}-{m}-{d} {h}:{i}')}}
19 |
20 |
21 |
22 |
23 | Msg:{{scope.row.error.message}}
24 |
25 | Info:{{scope.row.info}}
26 |
27 | URL:{{scope.row.url}}
28 |
29 |
30 |
31 |
32 |
33 | {{scope.row.error.stack}}
34 |
35 |
36 |
37 |
38 |
39 |
40 |
55 |
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/autoresize/plugin.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3 | * Licensed under the LGPL or a commercial license.
4 | * For LGPL see License.txt in the project root for license information.
5 | * For commercial licenses see https://www.tiny.cloud/
6 | *
7 | * Version: 5.0.1 (2019-02-21)
8 | */
9 | !function(){"use strict";var i=function(e){var t=e,n=function(){return t};return{get:n,set:function(e){t=e},clone:function(){return i(n())}}},e=tinymce.util.Tools.resolve("tinymce.PluginManager"),m=tinymce.util.Tools.resolve("tinymce.Env"),r=tinymce.util.Tools.resolve("tinymce.util.Delay"),d=function(e){return e.getParam("min_height",e.getElement().offsetHeight,"number")},h=function(e){return e.getParam("max_height",0,"number")},o=function(e){return e.getParam("autoresize_overflow_padding",1,"number")},u=function(e){return e.getParam("autoresize_bottom_margin",50,"number")},a=function(e){return e.getParam("autoresize_on_init",!0,"boolean")},s=function(e,t,n,i,o){r.setEditorTimeout(e,function(){p(e,t),n--?s(e,t,n,i,o):o&&o()},i)},v=function(e,t){var n=e.getBody();n&&(n.style.overflowY=t?"":"hidden",t||(n.scrollTop=0))},y=function(e,t,n,i){var o=parseInt(e.getStyle(t,n,i),10);return isNaN(o)?0:o},p=function(e,t){var n,i,o,r=e.dom,u=e.getDoc();if(u)if((a=e).plugins.fullscreen&&a.plugins.fullscreen.isFullscreen())v(e,!0);else{var a,s=u.body;i=d(e);var c=y(r,s,"margin-top",!0),f=y(r,s,"margin-bottom",!0);(o=s.offsetHeight+c+f)<0&&(o=0);var g=e.getContainer().offsetHeight-e.getContentAreaContainer().offsetHeight;o+g>d(e)&&(i=o+g);var l=h(e);l&&l
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
43 |
76 |
--------------------------------------------------------------------------------
/src/assets/css/theme-chalk/radio-button.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";.el-radio-button,.el-radio-button__inner{display:inline-block;position:relative;outline:0}.el-radio-button__inner{line-height:1;white-space:nowrap;vertical-align:middle;background:#fff;border:1px solid #dcdfe6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;cursor:pointer;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-radio-button__inner.is-round{padding:12px 20px}.el-radio-button__inner:hover{color:#42B983}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-radio-button__orig-radio{opacity:0;outline:0;position:absolute;z-index:-1}.el-radio-button__orig-radio:checked+.el-radio-button__inner{color:#fff;background-color:#42B983;border-color:#42B983;-webkit-box-shadow:-1px 0 0 0 #42B983;box-shadow:-1px 0 0 0 #42B983}.el-radio-button__orig-radio:disabled+.el-radio-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner{background-color:#f2f6fc}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px}.el-radio-button--medium .el-radio-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-radio-button--medium .el-radio-button__inner.is-round{padding:10px 20px}.el-radio-button--small .el-radio-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-radio-button--small .el-radio-button__inner.is-round{padding:9px 15px}.el-radio-button--mini .el-radio-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-radio-button--mini .el-radio-button__inner.is-round{padding:7px 15px}.el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled){-webkit-box-shadow:0 0 2px 2px #42B983;box-shadow:0 0 2px 2px #42B983}
--------------------------------------------------------------------------------
/src/utils/request.js:
--------------------------------------------------------------------------------
1 | import axios from 'axios'
2 | import { Message } from 'element-ui'
3 | import cache from '@/utils/cache'
4 |
5 | export const instance = axios.create({
6 | baseURL: process.env.VUE_APP_BASE_API,
7 | timeout: 20 * 1000
8 | })
9 |
10 | // request
11 | instance.interceptors.request.use(config => {
12 | if (cache.getToken()) {
13 | config.headers['Authorization'] = `Bearer ${cache.getToken()}`
14 | }
15 | return config
16 | }, error => {
17 | Promise.reject(error)
18 | })
19 |
20 | // response
21 | instance.interceptors.response.use(response => {
22 | const res = response.data
23 | // 自定义报错规则
24 | if (res && res.errorMessage) {
25 | return Promise.reject(res.errorMessage)
26 | }
27 | return Promise.resolve(res)
28 | }, error => {
29 | // 请求直接报错
30 | Message({
31 | message: error.message,
32 | type: 'error',
33 | duration: 3 * 1000
34 | })
35 | return Promise.reject(error)
36 | })
37 |
38 | /**
39 | * @param {String} url 请求链接
40 | * @param {String} type http方法
41 | * @param {Object} data 数据
42 | * @param {Boolean} isForm 是否表单格式
43 | * @returns {Promise}
44 | */
45 | export const request = async (url = '', type = 'GET', data = {}, isForm = false) => {
46 | let result
47 | type = type.toUpperCase()
48 | let requestOptions = {
49 | method: type,
50 | url: url
51 | }
52 | if (isForm) {
53 | let form = new FormData()
54 | Object.keys(data).forEach(key => {
55 | let value = data[key]
56 | if (Array.isArray(value)) {
57 | value.forEach(item => {
58 | form.append(key, item)
59 | })
60 | } else {
61 | form.append(key, data[key])
62 | }
63 | })
64 | data = form
65 | }
66 | requestOptions['headers'] = {
67 | 'Content-type': isForm ? 'multipart/form-data' : 'application/json'
68 | }
69 | if (type === 'GET') {
70 | requestOptions['params'] = data
71 | } else {
72 | requestOptions['data'] = data
73 | }
74 | await instance(requestOptions).then(res => {
75 | result = res
76 | })
77 | return result
78 | }
79 |
--------------------------------------------------------------------------------
/src/store/modules/login.js:
--------------------------------------------------------------------------------
1 | import { getLogin, getUser } from '@/api/login'
2 | import router, { resetRouter } from '@/router'
3 | import cache from '@/utils/cache'
4 |
5 | export default {
6 | namespaced: true,
7 | state: {
8 | user: ''
9 | },
10 | mutations: {
11 | SET_USER(state, val) {
12 | state.user = val
13 | },
14 | // 只做权限测试页使用
15 | SET_ROLE(state, val) {
16 | state.user.roles = val
17 | }
18 | },
19 | actions: {
20 | // 获取登录数据
21 | async getLoginToken({ commit }, params) {
22 | return new Promise((resolve, reject) => {
23 | getLogin(params).then(res => {
24 | // console.log('login', res)
25 | if (res && res.token) {
26 | cache.setToken(res.token)
27 | resolve(res)
28 | } else {
29 | reject(new Error('nothing login data'))
30 | }
31 | }).catch(err => {
32 | reject(err)
33 | })
34 | })
35 | },
36 | // 获取用户数据
37 | async getUserData({ commit }) {
38 | return new Promise((resolve, reject) => {
39 | let token = cache.getToken()
40 | getUser(token).then(res => {
41 | // console.log('user', res)
42 | if (res.data) {
43 | commit('SET_USER', res.data)
44 | resolve(res.data)
45 | } else {
46 | reject(new Error('nothing user data'))
47 | }
48 | }).catch(err => {
49 | reject(err)
50 | })
51 | })
52 | },
53 | logout({ commit }) {
54 | return new Promise((resolve, reject) => {
55 | // 删除本地token
56 | cache.removeToken()
57 | // 重置路由
58 | resetRouter()
59 | // 删除用户信息
60 | commit('SET_USER', '')
61 | // 跳转到登录页
62 | router.push('/login')
63 | resolve()
64 | })
65 | }
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/src/pages/index/children/icons/icons.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
9 |
10 |
11 | {{item}}
12 |
13 |
14 |
15 |
16 |
17 |
36 |
76 |
--------------------------------------------------------------------------------
/src/layout/TagsView/scrollPane.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
57 |
--------------------------------------------------------------------------------
/src/pages/index/children/permission/permission.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{$t('permission.description')}}
5 |
6 |
7 |
8 |
9 |
10 | 指令权限:
11 | v-permission="['admin']"
12 |
13 |
14 | {{$t('permission.permissionMsg')}}
15 |
16 |
17 |
18 |
19 | JS方法验证权限:
20 | v-if="$checkPermission(['admin'])"
21 |
22 |
23 | {{$t('permission.permissionMsg')}}
24 |
25 |
26 |
27 |
动态渲染的dom节点,只能使用JS方法
28 |
29 |
30 | 用户管理
31 | 配置管理
32 |
33 |
34 |
35 |
36 |
37 |
59 |
66 |
--------------------------------------------------------------------------------
/src/pages/index/children/dashboard/components/banner.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
9 |
10 |
11 |
12 |
13 |
41 |
72 |
--------------------------------------------------------------------------------
/src/assets/icons/svg/icons.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/static/tinymce/plugins/autolink/plugin.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3 | * Licensed under the LGPL or a commercial license.
4 | * For LGPL see License.txt in the project root for license information.
5 | * For commercial licenses see https://www.tiny.cloud/
6 | *
7 | * Version: 5.0.1 (2019-02-21)
8 | */
9 | !function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=tinymce.util.Tools.resolve("tinymce.Env"),m=function(e){return e.getParam("autolink_pattern",/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+\-]+@)(.+)$/i)},y=function(e){return e.getParam("default_link_target","")},o=function(e,t){if(t<0&&(t=0),3===e.nodeType){var n=e.data.length;n
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
58 |
65 |
--------------------------------------------------------------------------------