├── .babelrc ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitattributes ├── .gitignore ├── .postcssrc.js ├── README.md ├── build ├── build.js ├── check-versions.js ├── logo.png ├── utils.js ├── vue-loader.conf.js ├── webpack.base.conf.js ├── webpack.dev.conf.js └── webpack.prod.conf.js ├── config ├── dev.env.js ├── index.js └── prod.env.js ├── dist ├── blog.html ├── blogadmin.html ├── demo.html ├── index.html ├── static │ ├── css │ │ ├── blog.8028fb813a54ba52c94e1cadeb65057d.css │ │ ├── blog.8028fb813a54ba52c94e1cadeb65057d.css.map │ │ ├── blogadmin.a4cab6a08be342d9b7ca97509432ad58.css │ │ ├── blogadmin.a4cab6a08be342d9b7ca97509432ad58.css.map │ │ ├── demo.bba70e7557c822a02cc2747d85cdbae3.css │ │ ├── demo.bba70e7557c822a02cc2747d85cdbae3.css.map │ │ ├── test.ca5e6e05b6084173f88cf3e1a20ca3b5.css │ │ └── test.ca5e6e05b6084173f88cf3e1a20ca3b5.css.map │ ├── fonts │ │ ├── element-icons.6f0a763.ttf │ │ ├── fontawesome-webfont.674f50d.eot │ │ ├── fontawesome-webfont.af7ae50.woff2 │ │ ├── fontawesome-webfont.b06871f.ttf │ │ ├── fontawesome-webfont.fee66e7.woff │ │ ├── fontello.068ca2b.ttf │ │ └── fontello.e73a064.eot │ ├── img │ │ ├── dahai.8ec2694.jpg │ │ ├── dq.300298b.jpg │ │ ├── fontawesome-webfont.912ec66.svg │ │ └── fontello.9354499.svg │ └── js │ │ ├── 0.9f752bd9c93634ee848e.js │ │ ├── 0.9f752bd9c93634ee848e.js.map │ │ ├── 1.5c1d73ca1a23166c11c6.js │ │ ├── 1.5c1d73ca1a23166c11c6.js.map │ │ ├── 2.0f152ef7be38a252e8e5.js │ │ ├── 2.0f152ef7be38a252e8e5.js.map │ │ ├── 3.a95c7199f0ba9f756918.js │ │ ├── 3.a95c7199f0ba9f756918.js.map │ │ ├── 4.8050be44548abf62964d.js │ │ ├── 4.8050be44548abf62964d.js.map │ │ ├── 5.71d7f6fcdb635e463aee.js │ │ ├── 5.71d7f6fcdb635e463aee.js.map │ │ ├── 6.af307ff456dbfe28fccc.js │ │ ├── 6.af307ff456dbfe28fccc.js.map │ │ ├── 7.15ef295f11049e8c1071.js │ │ ├── 7.15ef295f11049e8c1071.js.map │ │ ├── 8.9c254b1a97383e9c1acd.js │ │ ├── 8.9c254b1a97383e9c1acd.js.map │ │ ├── 9.a6eca05e6f7b77ec8d5d.js │ │ ├── 9.a6eca05e6f7b77ec8d5d.js.map │ │ ├── blog.faaefe1c9142e1178169.js │ │ ├── blog.faaefe1c9142e1178169.js.map │ │ ├── blogadmin.16387c43da20612153c5.js │ │ ├── blogadmin.16387c43da20612153c5.js.map │ │ ├── demo.c6e17fb076eab0b4d237.js │ │ ├── demo.c6e17fb076eab0b4d237.js.map │ │ ├── manifest.0098f8ac3d0979b71c7d.js │ │ ├── manifest.0098f8ac3d0979b71c7d.js.map │ │ ├── test.84203f3b03b8cfdc623b.js │ │ ├── test.84203f3b03b8cfdc623b.js.map │ │ ├── vendor.96062eba1de96f6ecab0.js │ │ └── vendor.96062eba1de96f6ecab0.js.map └── test.html ├── index.html ├── multiSpa.iml ├── package.json ├── server ├── favicon.ico ├── init.js ├── models │ ├── blog │ │ ├── articles.js │ │ ├── messages.js │ │ ├── tags.js │ │ └── users.js │ ├── comment.js │ ├── post.js │ └── user.js ├── routes │ ├── admin.js │ ├── articles.js │ ├── index.js │ └── messages.js ├── server.js ├── static │ └── .gitkeep └── utils │ ├── auth-required.js │ ├── hbs-helper.js │ ├── locals.js │ ├── logger.js │ ├── mailer.js │ └── time.js ├── src ├── api │ ├── api.js │ └── index.js ├── assets │ ├── bg1.jpg │ ├── bingguo.jpg │ ├── card.jpg │ ├── favicon.ico │ ├── images │ │ ├── bg1.jpg │ │ ├── bg6.jpg │ │ ├── bg7.jpg │ │ ├── bingguo.jpg │ │ ├── border.png │ │ ├── border1.png │ │ ├── border2.png │ │ ├── card.jpg │ │ ├── controls.png │ │ ├── dahai.jpg │ │ ├── dahai1.jpg │ │ ├── dq.jpg │ │ ├── favicon.ico │ │ ├── icons.png │ │ ├── ie6 │ │ │ ├── borderBottomCenter.png │ │ │ ├── borderBottomLeft.png │ │ │ ├── borderBottomRight.png │ │ │ ├── borderMiddleLeft.png │ │ │ ├── borderMiddleRight.png │ │ │ ├── borderTopCenter.png │ │ │ ├── borderTopLeft.png │ │ │ └── borderTopRight.png │ │ ├── loading.gif │ │ ├── loading_background.png │ │ ├── login-bg.jpg │ │ ├── login-cloud.png │ │ ├── meteorshower1.jpg │ │ ├── meteorshower2.jpg │ │ ├── overlay.png │ │ ├── pattern.jpg │ │ ├── pattern.png │ │ ├── pattern1.jpg │ │ ├── sort_asc.png │ │ ├── sort_asc_disabled.png │ │ ├── sort_both.png │ │ ├── sort_desc.png │ │ ├── sort_desc_disabled.png │ │ ├── spritemap.png │ │ ├── spritemap@2x.png │ │ └── xiyang.gif │ ├── logo.png │ ├── logo4.png │ ├── theme │ │ ├── theme-darkblue │ │ │ ├── alert.css │ │ │ ├── autocomplete.css │ │ │ ├── badge.css │ │ │ ├── base.css │ │ │ ├── breadcrumb-item.css │ │ │ ├── breadcrumb.css │ │ │ ├── button-group.css │ │ │ ├── button.css │ │ │ ├── card.css │ │ │ ├── carousel-item.css │ │ │ ├── carousel.css │ │ │ ├── cascader.css │ │ │ ├── checkbox-group.css │ │ │ ├── checkbox.css │ │ │ ├── col.css │ │ │ ├── collapse-item.css │ │ │ ├── collapse.css │ │ │ ├── color-picker.css │ │ │ ├── date-picker.css │ │ │ ├── dialog.css │ │ │ ├── dropdown-item.css │ │ │ ├── dropdown-menu.css │ │ │ ├── dropdown.css │ │ │ ├── fonts │ │ │ │ ├── element-icons.ttf │ │ │ │ └── element-icons.woff │ │ │ ├── form-item.css │ │ │ ├── form.css │ │ │ ├── icon.css │ │ │ ├── index.css │ │ │ ├── input-number.css │ │ │ ├── input.css │ │ │ ├── loading.css │ │ │ ├── menu-item-group.css │ │ │ ├── menu-item.css │ │ │ ├── menu.css │ │ │ ├── message-box.css │ │ │ ├── message.css │ │ │ ├── notification.css │ │ │ ├── option-group.css │ │ │ ├── option.css │ │ │ ├── pagination.css │ │ │ ├── popover.css │ │ │ ├── progress.css │ │ │ ├── radio-button.css │ │ │ ├── radio-group.css │ │ │ ├── radio.css │ │ │ ├── rate.css │ │ │ ├── reset.css │ │ │ ├── row.css │ │ │ ├── scrollbar.css │ │ │ ├── select-dropdown.css │ │ │ ├── select.css │ │ │ ├── slider.css │ │ │ ├── spinner.css │ │ │ ├── step.css │ │ │ ├── steps.css │ │ │ ├── submenu.css │ │ │ ├── switch.css │ │ │ ├── tab-pane.css │ │ │ ├── table-column.css │ │ │ ├── table.css │ │ │ ├── tabs.css │ │ │ ├── tag.css │ │ │ ├── time-picker.css │ │ │ ├── time-select.css │ │ │ ├── tooltip.css │ │ │ ├── tree.css │ │ │ └── upload.css │ │ └── theme-green │ │ │ ├── alert.css │ │ │ ├── autocomplete.css │ │ │ ├── badge.css │ │ │ ├── base.css │ │ │ ├── breadcrumb-item.css │ │ │ ├── breadcrumb.css │ │ │ ├── button-group.css │ │ │ ├── button.css │ │ │ ├── card.css │ │ │ ├── carousel-item.css │ │ │ ├── carousel.css │ │ │ ├── cascader.css │ │ │ ├── checkbox-group.css │ │ │ ├── checkbox.css │ │ │ ├── col.css │ │ │ ├── collapse-item.css │ │ │ ├── collapse.css │ │ │ ├── color-picker.css │ │ │ ├── date-picker.css │ │ │ ├── dialog.css │ │ │ ├── dropdown-item.css │ │ │ ├── dropdown-menu.css │ │ │ ├── dropdown.css │ │ │ ├── fonts │ │ │ ├── element-icons.ttf │ │ │ └── element-icons.woff │ │ │ ├── form-item.css │ │ │ ├── form.css │ │ │ ├── icon.css │ │ │ ├── index.css │ │ │ ├── input-number.css │ │ │ ├── input.css │ │ │ ├── loading.css │ │ │ ├── menu-item-group.css │ │ │ ├── menu-item.css │ │ │ ├── menu.css │ │ │ ├── message-box.css │ │ │ ├── message.css │ │ │ ├── notification.css │ │ │ ├── option-group.css │ │ │ ├── option.css │ │ │ ├── pagination.css │ │ │ ├── popover.css │ │ │ ├── progress.css │ │ │ ├── radio-button.css │ │ │ ├── radio-group.css │ │ │ ├── radio.css │ │ │ ├── rate.css │ │ │ ├── reset.css │ │ │ ├── row.css │ │ │ ├── scrollbar.css │ │ │ ├── select-dropdown.css │ │ │ ├── select.css │ │ │ ├── slider.css │ │ │ ├── spinner.css │ │ │ ├── step.css │ │ │ ├── steps.css │ │ │ ├── submenu.css │ │ │ ├── switch.css │ │ │ ├── tab-pane.css │ │ │ ├── table-column.css │ │ │ ├── table.css │ │ │ ├── tabs.css │ │ │ ├── tag.css │ │ │ ├── time-picker.css │ │ │ ├── time-select.css │ │ │ ├── tooltip.css │ │ │ ├── tree.css │ │ │ └── upload.css │ ├── user.png │ └── xiyang.gif ├── images │ ├── banner.jpeg │ ├── cat.jpeg │ ├── cloud.png │ ├── default-avatar.jpeg │ ├── favicon.ico │ └── mac.png ├── javascripts │ ├── account.js │ ├── admin-post.js │ ├── common.js │ ├── home-post.js │ ├── posts.js │ ├── runTime.js │ ├── scrollIt.js │ ├── unique.js │ └── util.js ├── mock │ ├── data │ │ └── user.js │ ├── index.js │ └── mock.js ├── router │ ├── blog-routes.js │ ├── demo-routes.js │ ├── index.js │ ├── qims-routes.js │ └── test-router.js ├── styles │ ├── account.css │ ├── ace.css │ ├── admin.css │ ├── article.css │ ├── blog.css │ ├── container.css │ ├── global.css │ ├── header.css │ ├── index.css │ ├── md.bak.css │ ├── md.css │ ├── side.css │ └── vars.scss ├── views │ ├── 404.vue │ ├── blog │ │ ├── app.vue │ │ ├── components │ │ │ ├── About.vue │ │ │ ├── Article.vue │ │ │ ├── Blog.vue │ │ │ ├── Footer.vue │ │ │ ├── Header.vue │ │ │ ├── Index.vue │ │ │ ├── articleList.vue │ │ │ ├── messages.vue │ │ │ ├── runTime.vue │ │ │ ├── scrollTop.vue │ │ │ ├── sideSection.vue │ │ │ └── test.vue │ │ ├── index.js │ │ └── router │ │ │ └── index.js │ ├── blogadmin │ │ ├── app.vue │ │ ├── components │ │ │ ├── admin.vue │ │ │ ├── adminArticle.vue │ │ │ ├── adminArticleList.vue │ │ │ ├── adminChange.vue │ │ │ ├── loading.vue │ │ │ └── login.vue │ │ ├── index.js │ │ └── router │ │ │ └── index.js │ ├── demo │ │ ├── app.vue │ │ ├── components │ │ │ ├── 404.vue │ │ │ ├── Home.vue │ │ │ ├── Login.vue │ │ │ ├── charts │ │ │ │ └── echarts.vue │ │ │ ├── nav1 │ │ │ │ ├── Form.vue │ │ │ │ ├── Main.vue │ │ │ │ ├── Table.vue │ │ │ │ └── user.vue │ │ │ ├── nav2 │ │ │ │ ├── Page4.vue │ │ │ │ └── Page5.vue │ │ │ ├── nav3 │ │ │ │ └── Page6.vue │ │ │ └── sys │ │ │ │ ├── AccessMon.vue │ │ │ │ ├── Bridge.vue │ │ │ │ ├── DataMon.vue │ │ │ │ ├── Log.vue │ │ │ │ ├── Menu.vue │ │ │ │ ├── Permission.vue │ │ │ │ └── User.vue │ │ ├── index.js │ │ └── router │ │ │ └── index.js │ ├── error.html │ ├── index.html │ └── test │ │ ├── App.vue │ │ ├── components │ │ └── HelloWorld.vue │ │ ├── main.js │ │ └── router │ │ └── index.js └── vuex │ ├── actions.js │ ├── getters.js │ └── store.js └── static └── .gitkeep /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { 4 | "modules": false, 5 | "targets": { 6 | "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] 7 | } 8 | }], 9 | "stage-2" 10 | ], 11 | "plugins": ["transform-vue-jsx", "transform-runtime"] 12 | } 13 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | /build/ 2 | /config/ 3 | /dist/ 4 | /*.js 5 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | // https://eslint.org/docs/user-guide/configuring 2 | 3 | module.exports = { 4 | root: true, 5 | parserOptions: { 6 | parser: 'babel-eslint' 7 | }, 8 | env: { 9 | browser: true, 10 | }, 11 | extends: [ 12 | // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention 13 | // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules. 14 | 'plugin:vue/essential', 15 | // https://github.com/standard/standard/blob/master/docs/RULES-en.md 16 | 'standard' 17 | ], 18 | // required to lint *.vue files 19 | plugins: [ 20 | 'vue' 21 | ], 22 | // add your custom rules here 23 | rules: { 24 | // allow async-await 25 | 'generator-star-spacing': 'off', 26 | // allow debugger during development 27 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.css linguist-language=vue 2 | *.html linguist-language=vue 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | #/dist/ 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Editor directories and files 9 | .idea 10 | .vscode 11 | *.suo 12 | *.ntvs* 13 | *.njsproj 14 | *.sln 15 | -------------------------------------------------------------------------------- /.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | "postcss-import": {}, 6 | "postcss-url": {}, 7 | // to edit target browsers: use "browserslist" field in package.json 8 | "autoprefixer": {} 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # To start 2 | This is a project template for [vue-cli](https://github.com/vuejs/vue-cli) 3 | 4 | 本系统采用多页面方式(每个页面是个独立SPA) 整合多个子系统系统。 5 | 6 | * 测试环境 7 | ``` bash 8 | # run server-side 9 | npm run server 10 | 11 | # run client-side 12 | npm run dev-client 13 | 14 | 15 | ``` 16 | 17 | * 生产环境 18 | ```bash 19 | # install dependencies 20 | npm install 21 | 22 | # build for production with minification 23 | npm run build 24 | 25 | # run 26 | npm run server 27 | 28 | ``` 29 | 30 | 31 | 32 | # 文件结构 33 | ``` 34 | |--server - 服务端(提供API服务和生产环境的web服务) 35 | |--build - 构建 36 | |--dist - 构建结果目录 37 | |--config - 系统配置 38 | | |--dev.env.js 39 | | |--index.js 40 | | |--prod.env.js 41 | |--models - 数据库模型文件 42 | |--src - 客户端目录 43 | | |--api - 外部api 44 | | |--assets - 资产目录 45 | | |--images - 图片 46 | | |--js - js 47 | | |--sytels - 样式 48 | | |--uploads - 上传 49 | | |--views - 视图 50 | | |--router - 客户端路由 51 | | |--vuex - 状态 52 | |--packga.json - 项目信息 53 | |--index.html - 模板html 54 | 55 | ``` 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /build/build.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | require('./check-versions')() 3 | 4 | process.env.NODE_ENV = 'production' 5 | 6 | const ora = require('ora') 7 | const rm = require('rimraf') 8 | const path = require('path') 9 | const chalk = require('chalk') 10 | const webpack = require('webpack') 11 | const config = require('../config') 12 | const webpackConfig = require('./webpack.prod.conf') 13 | 14 | const spinner = ora('building for production...') 15 | spinner.start() 16 | 17 | rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { 18 | if (err) throw err 19 | webpack(webpackConfig, (err, stats) => { 20 | spinner.stop() 21 | if (err) throw err 22 | process.stdout.write(stats.toString({ 23 | colors: true, 24 | modules: false, 25 | children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build. 26 | chunks: false, 27 | chunkModules: false 28 | }) + '\n\n') 29 | 30 | if (stats.hasErrors()) { 31 | console.log(chalk.red(' Build failed with errors.\n')) 32 | process.exit(1) 33 | } 34 | 35 | console.log(chalk.cyan(' Build complete.\n')) 36 | console.log(chalk.yellow( 37 | ' Tip: built files are meant to be served over an HTTP server.\n' + 38 | ' Opening index.html over file:// won\'t work.\n' 39 | )) 40 | }) 41 | }) 42 | -------------------------------------------------------------------------------- /build/check-versions.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const chalk = require('chalk') 3 | const semver = require('semver') 4 | const packageConfig = require('../package.json') 5 | const shell = require('shelljs') 6 | 7 | function exec (cmd) { 8 | return require('child_process').execSync(cmd).toString().trim() 9 | } 10 | 11 | const versionRequirements = [ 12 | { 13 | name: 'node', 14 | currentVersion: semver.clean(process.version), 15 | versionRequirement: packageConfig.engines.node 16 | } 17 | ] 18 | 19 | if (shell.which('npm')) { 20 | versionRequirements.push({ 21 | name: 'npm', 22 | currentVersion: exec('npm --version'), 23 | versionRequirement: packageConfig.engines.npm 24 | }) 25 | } 26 | 27 | module.exports = function () { 28 | const warnings = [] 29 | 30 | for (let i = 0; i < versionRequirements.length; i++) { 31 | const mod = versionRequirements[i] 32 | 33 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { 34 | warnings.push(mod.name + ': ' + 35 | chalk.red(mod.currentVersion) + ' should be ' + 36 | chalk.green(mod.versionRequirement) 37 | ) 38 | } 39 | } 40 | 41 | if (warnings.length) { 42 | console.log('') 43 | console.log(chalk.yellow('To use this template, you must update following to modules:')) 44 | console.log() 45 | 46 | for (let i = 0; i < warnings.length; i++) { 47 | const warning = warnings[i] 48 | console.log(' ' + warning) 49 | } 50 | 51 | console.log() 52 | process.exit(1) 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /build/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/build/logo.png -------------------------------------------------------------------------------- /build/utils.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const config = require('../config') 4 | const ExtractTextPlugin = require('extract-text-webpack-plugin') 5 | const packageConfig = require('../package.json') 6 | 7 | exports.assetsPath = function (_path) { 8 | const assetsSubDirectory = process.env.NODE_ENV === 'production' 9 | ? config.build.assetsSubDirectory 10 | : config.dev.assetsSubDirectory 11 | 12 | return path.posix.join(assetsSubDirectory, _path) 13 | } 14 | 15 | exports.cssLoaders = function (options) { 16 | options = options || {} 17 | 18 | const cssLoader = { 19 | loader: 'css-loader', 20 | options: { 21 | sourceMap: options.sourceMap 22 | } 23 | } 24 | 25 | const postcssLoader = { 26 | loader: 'postcss-loader', 27 | options: { 28 | sourceMap: options.sourceMap 29 | } 30 | } 31 | 32 | // generate loader string to be used with extract text plugin 33 | function generateLoaders (loader, loaderOptions) { 34 | const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader] 35 | 36 | if (loader) { 37 | loaders.push({ 38 | loader: loader + '-loader', 39 | options: Object.assign({}, loaderOptions, { 40 | sourceMap: options.sourceMap 41 | }) 42 | }) 43 | } 44 | 45 | // Extract CSS when that option is specified 46 | // (which is the case during production build) 47 | if (options.extract) { 48 | return ExtractTextPlugin.extract({ 49 | use: loaders, 50 | fallback: 'vue-style-loader' 51 | }) 52 | } else { 53 | return ['vue-style-loader'].concat(loaders) 54 | } 55 | } 56 | 57 | // https://vue-loader.vuejs.org/en/configurations/extract-css.html 58 | return { 59 | css: generateLoaders(), 60 | postcss: generateLoaders(), 61 | less: generateLoaders('less'), 62 | sass: generateLoaders('sass', { indentedSyntax: true }), 63 | scss: generateLoaders('sass'), 64 | stylus: generateLoaders('stylus'), 65 | styl: generateLoaders('stylus') 66 | } 67 | } 68 | 69 | // Generate loaders for standalone style files (outside of .vue) 70 | exports.styleLoaders = function (options) { 71 | const output = [] 72 | const loaders = exports.cssLoaders(options) 73 | 74 | for (const extension in loaders) { 75 | const loader = loaders[extension] 76 | output.push({ 77 | test: new RegExp('\\.' + extension + '$'), 78 | use: loader 79 | }) 80 | } 81 | 82 | return output 83 | } 84 | 85 | exports.createNotifierCallback = () => { 86 | const notifier = require('node-notifier') 87 | 88 | return (severity, errors) => { 89 | if (severity !== 'error') return 90 | 91 | const error = errors[0] 92 | const filename = error.file && error.file.split('!').pop() 93 | 94 | notifier.notify({ 95 | title: packageConfig.name, 96 | message: severity + ': ' + error.name, 97 | subtitle: filename || '', 98 | icon: path.join(__dirname, 'logo.png') 99 | }) 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /build/vue-loader.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const utils = require('./utils') 3 | const config = require('../config') 4 | const isProduction = process.env.NODE_ENV === 'production' 5 | const sourceMapEnabled = isProduction 6 | ? config.build.productionSourceMap 7 | : config.dev.cssSourceMap 8 | 9 | module.exports = { 10 | loaders: utils.cssLoaders({ 11 | sourceMap: sourceMapEnabled, 12 | extract: isProduction 13 | }), 14 | cssSourceMap: sourceMapEnabled, 15 | cacheBusting: config.dev.cacheBusting, 16 | transformToRequire: { 17 | video: ['src', 'poster'], 18 | source: 'src', 19 | img: 'src', 20 | image: 'xlink:href' 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /build/webpack.base.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const utils = require('./utils') 4 | const config = require('../config') 5 | const vueLoaderConfig = require('./vue-loader.conf') 6 | 7 | function resolve (dir) { 8 | return path.join(__dirname, '..', dir) 9 | } 10 | 11 | const createLintingRule = () => ({ 12 | test: /\.(js|vue)$/, 13 | loader: 'eslint-loader', 14 | enforce: 'pre', 15 | include: [resolve('src'), resolve('test')], 16 | options: { 17 | formatter: require('eslint-friendly-formatter'), 18 | emitWarning: !config.dev.showEslintErrorsInOverlay 19 | } 20 | }) 21 | 22 | module.exports = { 23 | context: path.resolve(__dirname, '../'), 24 | entry: { 25 | test:'./src/views/test/main.js', 26 | demo:'./src/views/demo/index.js', 27 | blog:'./src/views/blog/index.js', 28 | blogadmin:'./src/views/blogadmin/index.js' 29 | }, 30 | output: { 31 | path: config.build.assetsRoot, 32 | filename: '[name].js', 33 | publicPath: process.env.NODE_ENV === 'production' 34 | ? config.build.assetsPublicPath 35 | : config.dev.assetsPublicPath 36 | }, 37 | resolve: { 38 | extensions: ['.js', '.vue', '.json','.css'], 39 | alias: { 40 | 'vue$': 'vue/dist/vue.esm.js', 41 | '@': resolve('src'), 42 | 'scss_vars': '@/styles/vars.scss' 43 | } 44 | }, 45 | module: { 46 | rules: [ 47 | ...(config.dev.useEslint ? [createLintingRule()] : []), 48 | { 49 | test: /\.vue$/, 50 | loader: 'vue-loader', 51 | options: vueLoaderConfig 52 | }, 53 | { 54 | test: /\.js$/, 55 | loader: 'babel-loader', 56 | include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')] 57 | }, 58 | { 59 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 60 | loader: 'url-loader', 61 | options: { 62 | limit: 10000, 63 | name: utils.assetsPath('img/[name].[hash:7].[ext]') 64 | } 65 | }, 66 | { 67 | test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, 68 | loader: 'url-loader', 69 | options: { 70 | limit: 10000, 71 | name: utils.assetsPath('media/[name].[hash:7].[ext]') 72 | } 73 | }, 74 | { 75 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 76 | loader: 'url-loader', 77 | options: { 78 | limit: 10000, 79 | name: utils.assetsPath('fonts/[name].[hash:7].[ext]') 80 | } 81 | } 82 | ] 83 | }, 84 | node: { 85 | // prevent webpack from injecting useless setImmediate polyfill because Vue 86 | // source contains it (although only uses it if it's native). 87 | setImmediate: false, 88 | // prevent webpack from injecting mocks to Node native modules 89 | // that does not make sense for the client 90 | dgram: 'empty', 91 | fs: 'empty', 92 | net: 'empty', 93 | tls: 'empty', 94 | child_process: 'empty' 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /config/dev.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const merge = require('webpack-merge') 3 | const prodEnv = require('./prod.env') 4 | 5 | module.exports = merge(prodEnv, { 6 | NODE_ENV: '"development"' 7 | }) 8 | -------------------------------------------------------------------------------- /config/index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | // Template version: 1.3.1 3 | // see http://vuejs-templates.github.io/webpack for documentation. 4 | 5 | const path = require('path') 6 | 7 | module.exports = { 8 | server:{ 9 | port:3001, 10 | mongodb: 'mongodb://192.168.1.16/tm-blog', 11 | }, 12 | dev: { 13 | 14 | // Paths 15 | assetsSubDirectory: 'static', 16 | assetsPublicPath: '/', 17 | proxyTable: { 18 | '/api/*':{ 19 | target: 'http://127.0.0.1:3001', 20 | }, 21 | }, 22 | 23 | // Various Dev Server settings 24 | host: 'localhost', // can be overwritten by process.env.HOST 25 | port: 3000, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined 26 | autoOpenBrowser: false, 27 | errorOverlay: true, 28 | notifyOnErrors: true, 29 | poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions- 30 | 31 | // Use Eslint Loader? 32 | // If true, your code will be linted during bundling and 33 | // linting errors and warnings will be shown in the console. 34 | useEslint: false, 35 | // If true, eslint errors and warnings will also be shown in the error overlay 36 | // in the browser. 37 | showEslintErrorsInOverlay: false, 38 | 39 | /** 40 | * Source Maps 41 | */ 42 | 43 | // https://webpack.js.org/configuration/devtool/#development 44 | devtool: 'cheap-module-eval-source-map', 45 | 46 | // If you have problems debugging vue-files in devtools, 47 | // set this to false - it *may* help 48 | // https://vue-loader.vuejs.org/en/options.html#cachebusting 49 | cacheBusting: true, 50 | 51 | cssSourceMap: true 52 | }, 53 | 54 | build: { 55 | // Template for index.html 56 | index: path.resolve(__dirname, '../dist/index.html'), 57 | 58 | // Paths 59 | assetsRoot: path.resolve(__dirname, '../dist'), 60 | assetsSubDirectory: 'static', 61 | assetsPublicPath: '/', 62 | 63 | /** 64 | * Source Maps 65 | */ 66 | 67 | productionSourceMap: true, 68 | // https://webpack.js.org/configuration/devtool/#production 69 | devtool: '#source-map', 70 | 71 | // Gzip off by default as many popular static hosts such as 72 | // Surge or Netlify already gzip all static assets for you. 73 | // Before setting to `true`, make sure to: 74 | // npm install --save-dev compression-webpack-plugin 75 | productionGzip: false, 76 | productionGzipExtensions: ['js', 'css'], 77 | 78 | // Run the build command with an extra argument to 79 | // View the bundle analyzer report after build finishes: 80 | // `npm run build --report` 81 | // Set to `true` or `false` to always turn it on or off 82 | bundleAnalyzerReport: process.env.npm_config_report 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /config/prod.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | module.exports = { 3 | NODE_ENV: '"production"' 4 | } 5 | -------------------------------------------------------------------------------- /dist/blog.html: -------------------------------------------------------------------------------- 1 | blog
-------------------------------------------------------------------------------- /dist/blogadmin.html: -------------------------------------------------------------------------------- 1 | blogadmin
-------------------------------------------------------------------------------- /dist/demo.html: -------------------------------------------------------------------------------- 1 | demo
-------------------------------------------------------------------------------- /dist/index.html: -------------------------------------------------------------------------------- 1 | Webpack App
-------------------------------------------------------------------------------- /dist/static/css/test.ca5e6e05b6084173f88cf3e1a20ca3b5.css: -------------------------------------------------------------------------------- 1 | #app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:#2c3e50;margin-top:60px}h1[data-v-3fccdafc],h2[data-v-3fccdafc]{font-weight:400}ul[data-v-3fccdafc]{list-style-type:none;padding:0}li[data-v-3fccdafc]{display:inline-block;margin:0 10px}a[data-v-3fccdafc]{color:#42b983} 2 | /*# sourceMappingURL=test.ca5e6e05b6084173f88cf3e1a20ca3b5.css.map */ -------------------------------------------------------------------------------- /dist/static/css/test.ca5e6e05b6084173f88cf3e1a20ca3b5.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["test.ca5e6e05b6084173f88cf3e1a20ca3b5.css"],"names":[],"mappings":"AACA,KACE,8CAAoD,AACpD,mCAAoC,AACpC,kCAAmC,AACnC,kBAAmB,AACnB,cAAe,AACf,eAAiB,CAClB,AAED,wCACE,eAAoB,CACrB,AACD,oBACE,qBAAsB,AACtB,SAAW,CACZ,AACD,oBACE,qBAAsB,AACtB,aAAe,CAChB,AACD,mBACE,aAAe,CAChB","file":"test.ca5e6e05b6084173f88cf3e1a20ca3b5.css","sourcesContent":["\n#app {\n font-family: 'Avenir', Helvetica, Arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-align: center;\n color: #2c3e50;\n margin-top: 60px;\n}\n\nh1[data-v-3fccdafc], h2[data-v-3fccdafc] {\n font-weight: normal;\n}\nul[data-v-3fccdafc] {\n list-style-type: none;\n padding: 0;\n}\nli[data-v-3fccdafc] {\n display: inline-block;\n margin: 0 10px;\n}\na[data-v-3fccdafc] {\n color: #42b983;\n}\n"]} -------------------------------------------------------------------------------- /dist/static/fonts/element-icons.6f0a763.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/dist/static/fonts/element-icons.6f0a763.ttf -------------------------------------------------------------------------------- /dist/static/fonts/fontawesome-webfont.674f50d.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/dist/static/fonts/fontawesome-webfont.674f50d.eot -------------------------------------------------------------------------------- /dist/static/fonts/fontawesome-webfont.af7ae50.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/dist/static/fonts/fontawesome-webfont.af7ae50.woff2 -------------------------------------------------------------------------------- /dist/static/fonts/fontawesome-webfont.b06871f.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/dist/static/fonts/fontawesome-webfont.b06871f.ttf -------------------------------------------------------------------------------- /dist/static/fonts/fontawesome-webfont.fee66e7.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/dist/static/fonts/fontawesome-webfont.fee66e7.woff -------------------------------------------------------------------------------- /dist/static/fonts/fontello.068ca2b.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/dist/static/fonts/fontello.068ca2b.ttf -------------------------------------------------------------------------------- /dist/static/fonts/fontello.e73a064.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/dist/static/fonts/fontello.e73a064.eot -------------------------------------------------------------------------------- /dist/static/img/dahai.8ec2694.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/dist/static/img/dahai.8ec2694.jpg -------------------------------------------------------------------------------- /dist/static/img/dq.300298b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/dist/static/img/dq.300298b.jpg -------------------------------------------------------------------------------- /dist/static/js/6.af307ff456dbfe28fccc.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([6],{aMlH:function(t,e){},yAjE:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a=i("mtWM"),n=i.n(a),s={data:function(){return{value:"",content:"",visible2:!1}},mounted:function(){this.getValue()},methods:{getContent:function(t,e){this.content=t},imgAdd:function(t,e){var i=this;(new FormData).append("image",e),n.a.post("/api/imgAdd",{image:e}).then(function(e){i.$refs.md.$img2Url(t,e.data)})},getValue:function(){var t=this,e={articleId:this.$route.query.articleId};n.a.get("/api/articleDetial",{params:e}).then(function(e){var i=e.data;"0"==i.status?t.value=i.result.content:t.value=""})},modifyArticle:function(){var t=this,e=this.$route.query.articleId;n.a.post("/api/articleModify",{articleId:e,content:this.content}).then(function(e){"0"==e.data.status?(t.$message({type:"success",message:"文章已修改"}),t.visible2=!1):t.$message.error("未修改")})}}},o={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"admin-container"},[i("mavon-editor",{ref:"md",staticClass:"set",attrs:{ishljs:!0},on:{imgAdd:t.imgAdd,change:t.getContent},model:{value:t.value,callback:function(e){t.value=e},expression:"value"}}),t._v(" "),i("div",{staticClass:"footer"},[i("el-popover",{ref:"popover5",attrs:{placement:"top",width:"160"},model:{value:t.visible2,callback:function(e){t.visible2=e},expression:"visible2"}},[i("p",[t._v("确定提交吗?")]),t._v(" "),i("div",{staticStyle:{"text-align":"right",margin:"0"}},[i("el-button",{attrs:{size:"mini",type:"text"},on:{click:function(e){t.visible2=!1}}},[t._v("取消")]),t._v(" "),i("el-button",{attrs:{type:"primary",size:"mini"},on:{click:t.modifyArticle}},[t._v("确定")])],1)]),t._v(" "),i("el-button",{directives:[{name:"popover",rawName:"v-popover:popover5",arg:"popover5"}],staticClass:"submit"},[t._v("修改")]),t._v(" "),i("div",{staticClass:"left"},[i("el-button",[t._v("修改信息")]),t._v(" "),i("el-button",[t._v("修改分类")])],1)],1)],1)},staticRenderFns:[]};var r=i("VU/8")(s,o,!1,function(t){i("aMlH")},null,null);e.default=r.exports}}); 2 | //# sourceMappingURL=6.af307ff456dbfe28fccc.js.map -------------------------------------------------------------------------------- /dist/static/js/8.9c254b1a97383e9c1acd.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([8],{"+dWO":function(t,e){},Bfhk:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var s={data:function(){return{isCollapse:!1}},watch:{$route:"checkLogin"},created:function(){this.checkLogin()},methods:{collapse:function(){this.isCollapse=!this.isCollapse},checkLogin:function(){sessionStorage.getItem("user")||this.$router.push("/login")},logout:function(){sessionStorage.removeItem("user"),this.$router.push("/login")}}},a={render:function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{attrs:{id:"app"}},[i("el-row",[i("el-menu",{staticClass:"el-menu",attrs:{theme:"dark","default-active":t.$router.path,mode:"horizontal",router:!1}},[i("el-menu-item",{attrs:{index:"1"},on:{click:t.collapse}},[t._v("管理系统")]),t._v(" "),i("el-submenu",{attrs:{index:"2"}},[i("template",{slot:"title"},[t._v("我的工作台")]),t._v(" "),i("el-menu-item",{attrs:{index:"2-1"}},[t._v("选项1")]),t._v(" "),i("el-menu-item",{attrs:{index:"2-2"}},[t._v("选项2")]),t._v(" "),i("el-menu-item",{attrs:{index:"2-3"}},[t._v("选项3")])],2),t._v(" "),i("el-menu-item",{attrs:{index:"3"}},[i("a",{attrs:{href:"https://www.baidu.com",target:"_blank"}},[t._v("baiu")])]),t._v(" "),i("el-menu-item",{attrs:{index:"4"}},[i("a",{attrs:{href:"javascript:;"},on:{click:t.logout}},[t._v("退出")])])],1)],1),t._v(" "),i("el-row",{attrs:{type:"flex"}},[i("el-menu",{attrs:{"default-active":t.$router.index,router:!0,mode:"vertical",collapse:t.isCollapse}},[i("el-menu-item",{attrs:{index:"/admin/adminArticleList"}},[i("i",{staticClass:"el-icon-menu"}),t._v(" "),i("span",{attrs:{slot:"title"},slot:"title"},[t._v("文章列表")])]),t._v(" "),i("el-menu-item",{attrs:{index:"/admin/adminArticle"}},[i("i",{staticClass:"el-icon-setting"}),t._v(" "),i("span",{attrs:{slot:"title"},slot:"title"},[t._v("新建文章")])])],1),t._v(" "),i("el-col",{staticClass:"row-bg",attrs:{span:24}},[i("transition",{attrs:{name:"fade",mode:"out-in"}},[i("router-view")],1)],1)],1)],1)},staticRenderFns:[]};var n=i("VU/8")(s,a,!1,function(t){i("+dWO")},null,null);e.default=n.exports}}); 2 | //# sourceMappingURL=8.9c254b1a97383e9c1acd.js.map -------------------------------------------------------------------------------- /dist/static/js/9.a6eca05e6f7b77ec8d5d.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([9],{"218W":function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=a("mtWM"),l=a.n(n),i={data:function(){return{pageSize:20,page:1,tableData:[]}},methods:{init:function(){var t=this,e={page:this.page,pageSize:this.pageSize};l.a.get("/api/articleList_admin",{params:e}).then(function(e){var a=e.data;"0"==a.status?t.tableData=a.result.list:t.tableData=[]})},handleDelete:function(t){var e=this,a=this.tableData[t].articleId;this.$confirm("将删除该文章, 是否继续?","警告",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(function(){l.a.post("/api/articleDelete",{articleId:a}).then(function(t){"0"==t.data.status?(e.$message({type:"success",message:"文章已删除"}),e.init()):e.$message.error("未删除成功")})})},handle:function(t){var e=this.tableData[t].articleId;this.$router.push({path:"/admin/adminChange",query:{articleId:e}})}},mounted:function(){this.init()}},r={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",[a("el-table",{staticStyle:{width:"100%"},attrs:{data:t.tableData,border:"","default-sort":{prop:"date",order:"descending"}}},[a("el-table-column",{attrs:{prop:"articleId",label:"编号",sortable:"",width:"150"}}),t._v(" "),a("el-table-column",{attrs:{prop:"title",label:"标题",width:"90"}}),t._v(" "),a("el-table-column",{attrs:{prop:"describtion",label:"描述",width:"150"}}),t._v(" "),a("el-table-column",{attrs:{prop:"tag",label:"标签",width:"70"}}),t._v(" "),a("el-table-column",{attrs:{prop:"createDate",label:"发布时间",width:"180"}}),t._v(" "),a("el-table-column",{attrs:{prop:"content",label:"摘要"}}),t._v(" "),a("el-table-column",{attrs:{label:"操作",width:"210"},scopedSlots:t._u([{key:"default",fn:function(e){return[a("el-button",{attrs:{type:"info",size:"small"},on:{click:function(a){t.handle(e.$index,e.row)}}},[t._v("查看/编辑\n ")]),t._v(" "),a("el-button",{attrs:{type:"danger",size:"small"},on:{click:function(a){t.handleDelete(e.$index,e.row)}}},[t._v("删除\n ")])]}}])})],1)],1)},staticRenderFns:[]};var s=a("VU/8")(i,r,!1,function(t){a("z/Ah")},null,null);e.default=s.exports},"z/Ah":function(t,e){}}); 2 | //# sourceMappingURL=9.a6eca05e6f7b77ec8d5d.js.map -------------------------------------------------------------------------------- /dist/static/js/blog.faaefe1c9142e1178169.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([13],{"57cR":function(t,n){},"6TR5":function(t,n){},OsYA:function(t,n){},PIDi:function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var o=e("7+uW"),u={render:function(){var t=this.$createElement,n=this._self._c||t;return n("div",{attrs:{id:"app"}},[n("router-view")],1)},staticRenderFns:[]};var c=e("VU/8")({name:"app"},u,!1,function(t){e("6TR5")},null,null).exports,i=e("zL8q"),a=e.n(i),r=(e("tvR6"),e("e0XP"),e("YtJ0")),f=(e("NYxO"),e("/ocq"));o.default.use(f.a);var s=new f.a({mode:"history",base:"/blog",routes:[{path:"/",name:"Blog",component:function(t){return e.e(1).then(function(){var n=[e("Aqrg")];t.apply(null,n)}.bind(this)).catch(e.oe)}},{path:"/about",name:"About",component:function(t){return e.e(4).then(function(){var n=[e("zfu0")];t.apply(null,n)}.bind(this)).catch(e.oe)}},{path:"/test",name:"Test",component:function(t){return e.e(2).then(function(){var n=[e("tOul")];t.apply(null,n)}.bind(this)).catch(e.oe)}},{path:"/article",name:"Article",component:function(t){return e.e(0).then(function(){var n=[e("Gj8k")];t.apply(null,n)}.bind(this)).catch(e.oe)}},{path:"/messages",name:"Messages",component:function(t){return e.e(3).then(function(){var n=[e("a2TI")];t.apply(null,n)}.bind(this)).catch(e.oe)}}]}),p=e("OS1Z"),l=e.n(p);e("pw1w"),e("ZRBX"),e("OsYA"),e("muqA"),e("TB7q"),e("57cR");function d(t){var n,e=new RegExp("(^| )"+t+"=([^;]*)(;|$)");return(n=document.cookie.match(e))?n[2]:null}o.default.use(a.a),o.default.use(l.a),o.default.prototype.setCookie=function(t,n,e){var o=new Date;o.setDate(o.getDate()+e),document.cookie=t+"="+escape(n)+(null==e?"":";expires="+o.toGMTString())},o.default.prototype.setCookie=function(t,n,e){var o=new Date;o.setDate(o.getDate()+e),document.cookie=t+"="+escape(n)+(null==e?"":";expires="+o.toGMTString())},o.default.prototype.getCookie=d,o.default.prototype.delCookie=function(t){var n=new Date;n.setTime(n.getTime()-1);var e=d(t);null!=e&&(document.cookie=t+"="+e+";expires="+n.toGMTString())},o.default.config.productionTip=!1,new o.default({router:s,store:r.a,render:function(t){return t(c)}}).$mount("#app")},TB7q:function(t,n){},YtJ0:function(t,n,e){"use strict";var o={};e.d(o,"increment",function(){return a}),e.d(o,"decrement",function(){return r});var u={};e.d(u,"getCount",function(){return f});var c=e("7+uW"),i=e("NYxO"),a=function(t){(0,t.commit)("INCREMENT")},r=function(t){(0,t.commit)("DECREMENT")},f=function(t){return t.count};c.default.use(i.a);n.a=new i.a.Store({actions:o,getters:u,state:{count:10},mutations:{INCREMENT:function(t){t.count++},DECREMENT:function(t){t.count--}}})},ZRBX:function(t,n){},e0XP:function(t,n){},muqA:function(t,n){},pw1w:function(t,n){},tvR6:function(t,n){}},["PIDi"]); 2 | //# sourceMappingURL=blog.faaefe1c9142e1178169.js.map -------------------------------------------------------------------------------- /dist/static/js/blogadmin.16387c43da20612153c5.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([12],{"57cR":function(n,t){},H4UM:function(n,t){},OsYA:function(n,t){},TB7q:function(n,t){},YtJ0:function(n,t,e){"use strict";var o={};e.d(o,"increment",function(){return c}),e.d(o,"decrement",function(){return r});var i={};e.d(i,"getCount",function(){return f});var u=e("7+uW"),a=e("NYxO"),c=function(n){(0,n.commit)("INCREMENT")},r=function(n){(0,n.commit)("DECREMENT")},f=function(n){return n.count};u.default.use(a.a);t.a=new a.a.Store({actions:o,getters:i,state:{count:10},mutations:{INCREMENT:function(n){n.count++},DECREMENT:function(n){n.count--}}})},ZRBX:function(n,t){},e0XP:function(n,t){},muqA:function(n,t){},pw1w:function(n,t){},tvR6:function(n,t){},wJBr:function(n,t,e){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=e("7+uW"),i={render:function(){var n=this.$createElement,t=this._self._c||n;return t("div",{attrs:{id:"app"}},[t("router-view")],1)},staticRenderFns:[]};var u=e("VU/8")({name:"app"},i,!1,function(n){e("H4UM")},null,null).exports,a=e("zL8q"),c=e.n(a),r=(e("tvR6"),e("e0XP"),e("YtJ0")),f=(e("NYxO"),e("/ocq"));o.default.use(f.a);var l=new f.a({mode:"history",base:"/blogadmin",routes:[{path:"/",name:"Admin",component:function(n){return e.e(8).then(function(){var t=[e("Bfhk")];n.apply(null,t)}.bind(this)).catch(e.oe)},redirect:{name:"adminArticle"},children:[{path:"/admin/adminArticle",component:function(n){return e.e(7).then(function(){var t=[e("9FpE")];n.apply(null,t)}.bind(this)).catch(e.oe)},name:"adminArticle"},{path:"/admin/adminChange",component:function(n){return e.e(6).then(function(){var t=[e("yAjE")];n.apply(null,t)}.bind(this)).catch(e.oe)},name:"adminChange"},{path:"/admin/adminArticleList",component:function(n){return e.e(9).then(function(){var t=[e("218W")];n.apply(null,t)}.bind(this)).catch(e.oe)},name:"adminArticleList"}]},{path:"/login",name:"Login",component:function(n){return e.e(5).then(function(){var t=[e("OC6a")];n.apply(null,t)}.bind(this)).catch(e.oe)}}]}),p=e("OS1Z"),d=e.n(p);e("pw1w"),e("ZRBX"),e("OsYA"),e("muqA"),e("TB7q"),e("57cR");function s(n){var t,e=new RegExp("(^| )"+n+"=([^;]*)(;|$)");return(t=document.cookie.match(e))?t[2]:null}o.default.use(c.a),o.default.use(d.a),o.default.prototype.setCookie=function(n,t,e){var o=new Date;o.setDate(o.getDate()+e),document.cookie=n+"="+escape(t)+(null==e?"":";expires="+o.toGMTString())},o.default.prototype.setCookie=function(n,t,e){var o=new Date;o.setDate(o.getDate()+e),document.cookie=n+"="+escape(t)+(null==e?"":";expires="+o.toGMTString())},o.default.prototype.getCookie=s,o.default.prototype.delCookie=function(n){var t=new Date;t.setTime(t.getTime()-1);var e=s(n);null!=e&&(document.cookie=n+"="+e+";expires="+t.toGMTString())},o.default.config.productionTip=!1,new o.default({router:l,store:r.a,render:function(n){return n(u)}}).$mount("#app")}},["wJBr"]); 2 | //# sourceMappingURL=blogadmin.16387c43da20612153c5.js.map -------------------------------------------------------------------------------- /dist/static/js/manifest.0098f8ac3d0979b71c7d.js: -------------------------------------------------------------------------------- 1 | !function(e){var n=window.webpackJsonp;window.webpackJsonp=function(r,c,a){for(var f,i,u,s=0,d=[];sWebpack App
-------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | <%= htmlWebpackPlugin.options.title %> 7 | 8 | 9 |
10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /multiSpa.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /server/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/server/favicon.ico -------------------------------------------------------------------------------- /server/init.js: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /server/models/blog/articles.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('mongoose') 2 | var schema = mongoose.Schema 3 | 4 | var articleSchema = new schema({ 5 | "articleId": String, 6 | "title": String, 7 | "tag": String, 8 | "describtion": String, 9 | "createDate": String, 10 | "content": String, 11 | "comment": [ 12 | { 13 | "name": String, 14 | "email": String, 15 | "content": String, 16 | "dateTime": String, 17 | "comment_response": [ 18 | { 19 | "response_name": String, 20 | "response_email": String, 21 | "response_content": String, 22 | "response_dateTime": String 23 | } 24 | ] 25 | } 26 | ] 27 | }) 28 | 29 | module.exports = mongoose.model('Article', articleSchema) 30 | -------------------------------------------------------------------------------- /server/models/blog/messages.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('mongoose') 2 | var schema = mongoose.Schema 3 | 4 | var messageSchema = new schema({ 5 | "messageId": String, 6 | "name": String, 7 | "email": String, 8 | "content": String, 9 | "createDate": String 10 | }) 11 | 12 | module.exports = mongoose.model('Message', messageSchema) 13 | -------------------------------------------------------------------------------- /server/models/blog/tags.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('mongoose') 2 | var schema = mongoose.Schema 3 | 4 | var tagsSchema = new schema({ 5 | "name": String, 6 | }) 7 | 8 | module.exports = mongoose.model('Tag', tagsSchema) 9 | -------------------------------------------------------------------------------- /server/models/blog/users.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('mongoose') 2 | var schema = mongoose.Schema 3 | 4 | var userSchema = new schema({ 5 | "userId": String, 6 | "account": String, 7 | "password": String 8 | }) 9 | 10 | module.exports = mongoose.model('User', userSchema) 11 | -------------------------------------------------------------------------------- /server/models/comment.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by harttle on 1/12/15. 3 | */ 4 | 5 | var mongoose = require('mongoose'); 6 | var Schema = mongoose.Schema; 7 | 8 | var CommentSchema = new Schema({ 9 | content: {type: String, required: true}, 10 | date: {type: Date, default:Date.now}, 11 | author: {type: String, ref: 'User'} 12 | }); 13 | 14 | module.exports = mongoose.model('Comment', CommentSchema); -------------------------------------------------------------------------------- /server/models/post.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by harttle on 1/5/15. 3 | */ 4 | 5 | var mongoose = require('mongoose'); 6 | var Schema = mongoose.Schema; 7 | 8 | var PostSchema = new Schema({ 9 | title: {type: String, required: true}, 10 | content: String, 11 | date: {type: Date, default:Date.now}, 12 | author: {type: String, ref: 'User'}, 13 | comments: [{type: String, ref: 'Comment'}] 14 | }); 15 | 16 | module.exports = mongoose.model('Post', PostSchema); 17 | -------------------------------------------------------------------------------- /server/models/user.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('mongoose'); 2 | var Schema = mongoose.Schema; 3 | var passportLocalMongoose = require('passport-local-mongoose'); 4 | 5 | var UserSchema = new Schema({ 6 | username: String, 7 | password: String, 8 | isAdmin:{ 9 | type:Boolean, 10 | default:false 11 | }, 12 | avatar: { 13 | type: String, 14 | default: '/images/default-avatar.jpeg' 15 | }, 16 | title: { 17 | type: String, 18 | default: '未命名博客' 19 | }, 20 | description: { 21 | type: String, 22 | default: '博主很懒,还没有添加任何描述……' 23 | }, 24 | active: { 25 | type: Boolean, 26 | default: false 27 | }, 28 | activeToken: String, 29 | activeExpires: Date, 30 | resetPasswordToken: String, 31 | resetPasswordExpires: Date 32 | }); 33 | 34 | // UserSchema.plugin(passportLocalMongoose, { 35 | // incorrectUsernameError: '用户名不正确', 36 | // incorrectPasswordError: '密码不正确', 37 | // userExistsError: '用户名已存在' 38 | // }); 39 | 40 | 41 | // UserSchema.path('username').validate(function (email) { 42 | // var emailRegex = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/; 43 | // return emailRegex.test(email); 44 | // }, '用户名不是有效的电子邮件地址'); 45 | 46 | module.exports = mongoose.model('User', UserSchema); 47 | -------------------------------------------------------------------------------- /server/routes/index.js: -------------------------------------------------------------------------------- 1 | const articles = require('./articles') 2 | const messages = require('./messages') 3 | const admin = require('./admin') 4 | const config = require('../../config') 5 | const path = require('path') 6 | 7 | module.exports = (app) => { 8 | app.use(articles) 9 | app.use(messages) 10 | app.use(admin) 11 | 12 | 13 | 14 | 15 | app.use('/demo(/*)?', function (req, res) { 16 | console.log("/demo") 17 | res.sendFile(config.build.assetsRoot + '/demo.html') 18 | }); 19 | 20 | app.use('/blog(/*)?', function (req, res) { 21 | console.log("/blog") 22 | res.sendFile(config.build.assetsRoot + '/blog.html') 23 | }); 24 | app.use('/blogadmin(/*)?', function (req, res) { 25 | console.log("/blogadmin") 26 | res.sendFile(config.build.assetsRoot + '/blogadmin.html') 27 | }); 28 | 29 | app.use('/test', function (req, res) { 30 | res.json({message: ' welcome to our api!'}); 31 | }); 32 | 33 | 34 | 35 | } 36 | -------------------------------------------------------------------------------- /server/routes/messages.js: -------------------------------------------------------------------------------- 1 | require('./../utils/time') 2 | var express = require('express'); 3 | var router = express.Router(); 4 | var md5 = require('md5') 5 | 6 | var Message = require('./../models/blog/messages') 7 | 8 | // 发布留言 9 | router.post("/api/messageSub", function (req,res) { 10 | let name = req.body.name 11 | let email = req.body.email 12 | let content = req.body.content 13 | 14 | let random = Math.floor(Math.random()*10) 15 | let sysDate = new Date().Format('yyyMMddhhmmss') 16 | let createDate = new Date().Format('yyyy-MM-dd hh:mm:ss') 17 | 18 | let messageId = sysDate +random 19 | 20 | let message = { 21 | "messageId": messageId, 22 | "name": name, 23 | "email": email, 24 | "content": content, 25 | "createDate": createDate 26 | } 27 | 28 | Message.create(message, function (err,doc) { 29 | if (err) { 30 | res.json ({ 31 | status: "1", 32 | msg: err.message, 33 | result:'' 34 | }) 35 | } else { 36 | res.json ({ 37 | status: '0', 38 | msg: '', 39 | result: 'suc' 40 | }) 41 | } 42 | }) 43 | }) 44 | 45 | // 获取留言列表 46 | router.get("/api/messageList", function (req,res) { 47 | let limit = parseInt(req.query.limit) 48 | Message.find().sort({_id:-1}).limit(limit).lean().exec( function (err,doc) { 49 | if (err) { 50 | res.json ({ 51 | status: "1", 52 | msg: err.message, 53 | result:'' 54 | }) 55 | } else { 56 | doc.forEach(function (item) { 57 | item.email = md5(item.email) 58 | }) 59 | res.json ({ 60 | status: '0', 61 | msg: '', 62 | result: doc 63 | }) 64 | } 65 | }) 66 | }) 67 | module.exports = router 68 | -------------------------------------------------------------------------------- /server/server.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var path = require('path'); 3 | var favicon = require('serve-favicon'); 4 | var logger = require('morgan'); 5 | var cookieParser = require('cookie-parser'); 6 | var bodyParser = require('body-parser'); 7 | var session = require('express-session'); 8 | var swig = require('swig'); 9 | var multipart = require('connect-multiparty'); 10 | 11 | 12 | var mongoose = require('mongoose'); 13 | var config = require('../config'); 14 | 15 | 16 | // mongoose setup 17 | mongoose.connect(config.server.mongodb); 18 | mongoose.connection.on("connected", function () { 19 | console.log("MongoDB connect " + config.server.mongodb + " success"); 20 | }); 21 | mongoose.connection.on("error", function (error) { 22 | console.log("MongoDB connect " + config.server.mongodb + " fail:" + error); 23 | }); 24 | mongoose.connection.on("disconnected", function () { 25 | console.log("MongoDB connect disconnected"); 26 | }); 27 | 28 | 29 | // passport setup 30 | //passport.use(User.createStrategy()); 31 | //passport.serializeUser(User.serializeUser()); 32 | //passport.deserializeUser(User.deserializeUser()); 33 | 34 | 35 | // 默认开发模式,生产模式待开发 36 | var app = express(); 37 | 38 | app.get('/', function (req, res) { 39 | console.log("redirect to /blog") 40 | res.redirect('/blog') 41 | }); 42 | 43 | app.set('port', config.server.port); 44 | 45 | 46 | app.use(logger('dev')); 47 | app.use(bodyParser.json({limit: '50mb'})); 48 | app.use(bodyParser.urlencoded({limit: '50mb', extended: false})); 49 | app.use(cookieParser()); 50 | //app.use(favicon(__dirname + '/favicon.ico')); 51 | 52 | app.use(express.static(config.build.assetsRoot)); 53 | 54 | // routes 55 | 56 | var route = require('./routes') 57 | route(app) 58 | 59 | 60 | console.log('> Starting multiSpa server...') 61 | 62 | 63 | app.listen(app.get('port'), function () { 64 | var uri = 'http://localhost:' + app.get('port') 65 | console.log('> Server Started at uri:' + uri); 66 | }); 67 | 68 | 69 | var _resolve 70 | var readyPromise = new Promise(resolve => { 71 | _resolve = resolve 72 | }) 73 | module.exports = { 74 | ready: readyPromise, 75 | close: () => { 76 | server.close() 77 | } 78 | } 79 | 80 | 81 | -------------------------------------------------------------------------------- /server/static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/server/static/.gitkeep -------------------------------------------------------------------------------- /server/utils/auth-required.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = function (req, res, next) { 3 | if (req.user && req.user.active) return next(); 4 | 5 | res.redirect('/account/login?next=' + req.originalUrl); 6 | }; 7 | -------------------------------------------------------------------------------- /server/utils/hbs-helper.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by harttle on 1/7/15. 3 | */ 4 | 5 | module.exports = function(hbs) { 6 | hbs.registerHelper('detailDate', function(date, block) { 7 | return dateFormat(date, 'yyyy-MM-dd hh:mm:ss'); 8 | }); 9 | 10 | hbs.registerHelper('excerpt', mdExcerpt); 11 | 12 | hbs.registerHelper('equal', function(v1, v2, opts) { 13 | return v1 == v2 ? opts.fn(this) : opts.inverse(this); 14 | }); 15 | 16 | hbs.registerHelper('unless', function(v1, opts) { 17 | return v1 ? opts.inverse(this) : opts.fn(this); 18 | }); 19 | }; 20 | 21 | function mdExcerpt(content) { 22 | var result = content.replace(/[#\(\)\[\]\n!`]+/g, ' '); 23 | if (result.length > 300) result = result.slice(0, 300) + '...'; 24 | return result; 25 | } 26 | 27 | function dateFormat(datetime, format) { 28 | var date = { 29 | "M+": datetime.getMonth() + 1, 30 | "d+": datetime.getDate(), 31 | "h+": datetime.getHours(), 32 | "m+": datetime.getMinutes(), 33 | "s+": datetime.getSeconds(), 34 | "q+": Math.floor((datetime.getMonth() + 3) / 3), 35 | "S+": datetime.getMilliseconds() 36 | }; 37 | if (/(y+)/i.test(format)) { 38 | format = format.replace(RegExp.$1, (datetime.getFullYear() + '').substr(4 - RegExp.$1.length)); 39 | } 40 | for (var k in date) { 41 | if (new RegExp("(" + k + ")").test(format)) { 42 | format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? 43 | date[k] : 44 | ("00" + date[k]).substr(("" + date[k]).length)); 45 | } 46 | } 47 | return format; 48 | } -------------------------------------------------------------------------------- /server/utils/locals.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by harttle on 1/12/15. 3 | */ 4 | 5 | var cfg = require('../config'); 6 | 7 | module.exports = function (req, res, next) { 8 | 9 | res.locals.req = req; 10 | res.locals.res = res; 11 | res.locals.config = cfg; 12 | 13 | next(); 14 | }; -------------------------------------------------------------------------------- /server/utils/logger.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by harttle on 1/5/15. 3 | */ 4 | 5 | 6 | function requestLogger(req, res, next) { 7 | console.log('------------------------------'); 8 | console.log('REQUEST'); 9 | console.log(req.ip, req.method, req.protocol + '://' + req.get('host') + req.originalUrl); 10 | console.log(req.body); 11 | next(); 12 | } 13 | 14 | function responseLogger(req, res, next) { 15 | var oldWrite = res.write, 16 | oldEnd = res.end; 17 | var chunks = []; 18 | res.write = function(chunk) { 19 | chunks.push(chunk); 20 | oldWrite.apply(res, arguments); 21 | }; 22 | res.end = function(chunk) { 23 | if (chunk) chunks.push(chunk); 24 | var body = Buffer.concat(chunks).toString('utf8'); 25 | 26 | console.log('------------------------------'); 27 | console.log('RESPONSE'); 28 | console.log(body); 29 | 30 | oldEnd.apply(res, arguments); 31 | }; 32 | next(); 33 | } 34 | 35 | function logger(){ 36 | // 这里可以对log进行处理、存储等操作 37 | console.log.apply(this, arguments); 38 | } 39 | 40 | module.exports = { 41 | log: logger, 42 | request: requestLogger, 43 | response: responseLogger 44 | }; -------------------------------------------------------------------------------- /server/utils/mailer.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by harttle on 1/5/15. 3 | */ 4 | 5 | var nodemailer = require('nodemailer'); 6 | var _ = require('lodash'); 7 | var config = require('../config'); 8 | 9 | var transporter = nodemailer.createTransport(config.smtp); 10 | 11 | var defaultMail = { 12 | from: '天马营教程 <' + config.smtp.auth.user + '>', 13 | subject: 'test', 14 | //to: 'bar@blurdybloop.com, baz@blurdybloop.com', 15 | //text: 'test text', 16 | html: 'test html' 17 | }; 18 | 19 | function sendMail(mail){ 20 | mail = _.merge({}, defaultMail, mail); 21 | 22 | transporter.sendMail(mail, function(error, info){ 23 | if(error) return console.log('mail sent error', config.smtp, mail, error); 24 | console.log('Message sent: ' + info.response); 25 | }); 26 | } 27 | 28 | module.exports = { 29 | send: sendMail 30 | }; 31 | -------------------------------------------------------------------------------- /server/utils/time.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by jacksoft on 17/4/26. 3 | */ 4 | Date.prototype.Format = function (fmt) { 5 | var o = { 6 | "M+": this.getMonth() + 1, //月份 7 | "d+": this.getDate(), //日 8 | "h+": this.getHours(), //小时 9 | "m+": this.getMinutes(), //分 10 | "s+": this.getSeconds(), //秒 11 | "q+": Math.floor((this.getMonth() + 3) / 3), //季度 12 | "S": this.getMilliseconds() //毫秒 13 | }; 14 | if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); 15 | for (var k in o) 16 | if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); 17 | return fmt; 18 | } 19 | 20 | module.exports = {}; 21 | -------------------------------------------------------------------------------- /src/api/api.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | let base = ''; 4 | 5 | export const requestLogin = params => { 6 | return axios.post(`${base}/login`, params).then(res => res.data); 7 | }; 8 | 9 | export const getUserList = params => { return axios.get(`${base}/user/list`, { params: params }); }; 10 | 11 | export const getUserListPage = params => { return axios.get(`${base}/user/listpage`, { params: params }); }; 12 | 13 | export const removeUser = params => { return axios.get(`${base}/user/remove`, { params: params }); }; 14 | 15 | export const batchRemoveUser = params => { return axios.get(`${base}/user/batchremove`, { params: params }); }; 16 | 17 | export const editUser = params => { return axios.get(`${base}/user/edit`, { params: params }); }; 18 | 19 | export const addUser = params => { return axios.get(`${base}/user/add`, { params: params }); }; -------------------------------------------------------------------------------- /src/api/index.js: -------------------------------------------------------------------------------- 1 | import * as api from './api'; 2 | 3 | export default api; -------------------------------------------------------------------------------- /src/assets/bg1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/bg1.jpg -------------------------------------------------------------------------------- /src/assets/bingguo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/bingguo.jpg -------------------------------------------------------------------------------- /src/assets/card.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/card.jpg -------------------------------------------------------------------------------- /src/assets/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/favicon.ico -------------------------------------------------------------------------------- /src/assets/images/bg1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/bg1.jpg -------------------------------------------------------------------------------- /src/assets/images/bg6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/bg6.jpg -------------------------------------------------------------------------------- /src/assets/images/bg7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/bg7.jpg -------------------------------------------------------------------------------- /src/assets/images/bingguo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/bingguo.jpg -------------------------------------------------------------------------------- /src/assets/images/border.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/border.png -------------------------------------------------------------------------------- /src/assets/images/border1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/border1.png -------------------------------------------------------------------------------- /src/assets/images/border2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/border2.png -------------------------------------------------------------------------------- /src/assets/images/card.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/card.jpg -------------------------------------------------------------------------------- /src/assets/images/controls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/controls.png -------------------------------------------------------------------------------- /src/assets/images/dahai.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/dahai.jpg -------------------------------------------------------------------------------- /src/assets/images/dahai1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/dahai1.jpg -------------------------------------------------------------------------------- /src/assets/images/dq.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/dq.jpg -------------------------------------------------------------------------------- /src/assets/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/favicon.ico -------------------------------------------------------------------------------- /src/assets/images/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/icons.png -------------------------------------------------------------------------------- /src/assets/images/ie6/borderBottomCenter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/ie6/borderBottomCenter.png -------------------------------------------------------------------------------- /src/assets/images/ie6/borderBottomLeft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/ie6/borderBottomLeft.png -------------------------------------------------------------------------------- /src/assets/images/ie6/borderBottomRight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/ie6/borderBottomRight.png -------------------------------------------------------------------------------- /src/assets/images/ie6/borderMiddleLeft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/ie6/borderMiddleLeft.png -------------------------------------------------------------------------------- /src/assets/images/ie6/borderMiddleRight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/ie6/borderMiddleRight.png -------------------------------------------------------------------------------- /src/assets/images/ie6/borderTopCenter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/ie6/borderTopCenter.png -------------------------------------------------------------------------------- /src/assets/images/ie6/borderTopLeft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/ie6/borderTopLeft.png -------------------------------------------------------------------------------- /src/assets/images/ie6/borderTopRight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/ie6/borderTopRight.png -------------------------------------------------------------------------------- /src/assets/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/loading.gif -------------------------------------------------------------------------------- /src/assets/images/loading_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/loading_background.png -------------------------------------------------------------------------------- /src/assets/images/login-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/login-bg.jpg -------------------------------------------------------------------------------- /src/assets/images/login-cloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/login-cloud.png -------------------------------------------------------------------------------- /src/assets/images/meteorshower1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/meteorshower1.jpg -------------------------------------------------------------------------------- /src/assets/images/meteorshower2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/meteorshower2.jpg -------------------------------------------------------------------------------- /src/assets/images/overlay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/overlay.png -------------------------------------------------------------------------------- /src/assets/images/pattern.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/pattern.jpg -------------------------------------------------------------------------------- /src/assets/images/pattern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/pattern.png -------------------------------------------------------------------------------- /src/assets/images/pattern1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/pattern1.jpg -------------------------------------------------------------------------------- /src/assets/images/sort_asc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/sort_asc.png -------------------------------------------------------------------------------- /src/assets/images/sort_asc_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/sort_asc_disabled.png -------------------------------------------------------------------------------- /src/assets/images/sort_both.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/sort_both.png -------------------------------------------------------------------------------- /src/assets/images/sort_desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/sort_desc.png -------------------------------------------------------------------------------- /src/assets/images/sort_desc_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/sort_desc_disabled.png -------------------------------------------------------------------------------- /src/assets/images/spritemap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/spritemap.png -------------------------------------------------------------------------------- /src/assets/images/spritemap@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/spritemap@2x.png -------------------------------------------------------------------------------- /src/assets/images/xiyang.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/images/xiyang.gif -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/logo.png -------------------------------------------------------------------------------- /src/assets/logo4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/logo4.png -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/alert.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-alert{width:100%;padding:8px 16px;margin:0;box-sizing:border-box;border-radius:4px;position:relative;background-color:#fff;overflow:hidden;color:#fff;opacity:1;display:table;transition:opacity .2s}.el-alert .el-alert__description{color:#fff;font-size:12px;margin:5px 0 0}.el-alert--success{background-color:#13ce66}.el-alert--info{background-color:#50bfff}.el-alert--warning{background-color:#f7ba2a}.el-alert--error{background-color:#ff4949}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px;display:table-cell;color:#fff;vertical-align:middle}.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__closebtn{font-size:12px;color:#fff;opacity:1;top:12px;right:15px;position:absolute;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/theme/theme-darkblue/badge.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{background-color:#ff4949;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-dot{width:8px;height:8px;padding:0;right:0;border-radius:50%}.el-badge__content.is-fixed{top:0;right:10px;position:absolute;-ms-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.el-badge__content.is-fixed.is-dot{right:5px} -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/breadcrumb-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-darkblue/breadcrumb-item.css -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/breadcrumb.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-breadcrumb{font-size:13px;line-height:1}.el-breadcrumb:after,.el-breadcrumb:before{display:table;content:""}.el-breadcrumb:after{clear:both}.el-breadcrumb__separator{margin:0 8px;color:rgb(191, 203, 217)}.el-breadcrumb__item{float:left}.el-breadcrumb__item:last-child .el-breadcrumb__item__inner,.el-breadcrumb__item:last-child .el-breadcrumb__item__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__item__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__item__inner:hover{color:rgb(151, 168, 190);cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-breadcrumb__item__inner,.el-breadcrumb__item__inner a{transition:color .15s linear;color:rgb(72, 87, 106)}.el-breadcrumb__item__inner a:hover,.el-breadcrumb__item__inner:hover{color:#1d8ce0;cursor:pointer} -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/button-group.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-darkblue/button-group.css -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/card.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-card{border:1px solid rgb(209, 219, 229);border-radius:4px;background-color:#fff;overflow:hidden;box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-card__header{padding:18px 20px;border-bottom:1px solid rgb(209, 219, 229);box-sizing:border-box}.el-card__body{padding:20px} -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/carousel-item.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-carousel__item,.el-carousel__mask{position:absolute;height:100%;top:0;left:0}.el-carousel__item{width:100%;display:inline-block;transition:.4s ease-in-out;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item--card{width:50%}.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;transition:.2s} -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/carousel.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-carousel__arrow,.el-carousel__button{outline:0;margin:0;cursor:pointer;transition:.3s}.el-carousel{overflow-x:hidden;position:relative}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;padding:0;width:36px;height:36px;border-radius:50%;background-color:rgba(31,45,61,.11);color:#fff;position:absolute;top:50%;z-index:10;-ms-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:12px}.el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.el-carousel__arrow i{cursor:pointer}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__indicators{position:absolute;list-style:none;bottom:0;left:50%;-ms-transform:translateX(-50%);transform:translateX(-50%);margin:0;padding:0;z-index:2}.el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;-ms-transform:none;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:rgb(131, 145, 165);opacity:.24}.el-carousel__indicator{display:inline-block;background-color:transparent;padding:12px 4px;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:30px;height:2px;background-color:#fff;border:none;padding:0}.carousel-arrow-left-enter,.carousel-arrow-left-leave-active{-ms-transform:translateY(-50%) translateX(-10px);transform:translateY(-50%) translateX(-10px);opacity:0}.carousel-arrow-right-enter,.carousel-arrow-right-leave-active{-ms-transform:translateY(-50%) translateX(10px);transform:translateY(-50%) translateX(10px);opacity:0} -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/checkbox-group.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-darkblue/checkbox-group.css -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/checkbox.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-checkbox,.el-checkbox__input{white-space:nowrap;cursor:pointer;display:inline-block;position:relative}.el-checkbox{color:rgb(31, 45, 61);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-checkbox+.el-checkbox{margin-left:15px}.el-checkbox__input{outline:0;line-height:1;vertical-align:middle}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#1d8ce0;border-color:rgb(1, 130, 228)}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;border:1px solid #fff;margin-top:-1px;left:3px;right:3px;top:50%}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#1d8ce0}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:#1d8ce0;border-color:rgb(1, 130, 228)}.el-checkbox__input.is-checked .el-checkbox__inner::after{-ms-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:rgb(238, 241, 246);border-color:rgb(209, 219, 229);cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:rgb(238, 241, 246)}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:rgb(209, 219, 229);border-color:rgb(209, 219, 229)}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#fff}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:rgb(209, 219, 229);border-color:rgb(209, 219, 229)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{border-color:#fff}.el-checkbox__input.is-disabled+.el-checkbox__label{color:#bbb;cursor:not-allowed}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid rgb(191, 203, 217);border-radius:4px;box-sizing:border-box;width:18px;height:18px;background-color:#fff;z-index:1;transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:#1d8ce0}.el-checkbox__inner::after{box-sizing:content-box;content:"";border:2px solid #fff;border-left:0;border-top:0;height:8px;left:5px;position:absolute;top:1px;-ms-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:4px;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) .05s;-ms-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;left:-999px}.el-checkbox__label{font-size:14px;padding-left:5px} -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/collapse-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-darkblue/collapse-item.css -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/collapse.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-collapse{border:1px solid rgb(223, 230, 236);border-radius:0}.el-collapse-item:last-child{margin-bottom:-1px}.el-collapse-item.is-active>.el-collapse-item__header .el-collapse-item__header__arrow{-ms-transform:rotate(90deg);transform:rotate(90deg)}.el-collapse-item__header{height:43px;line-height:43px;padding-left:15px;background-color:#fff;color:rgb(72, 87, 106);cursor:pointer;border-bottom:1px solid rgb(223, 230, 236);font-size:13px}.el-collapse-item__header__arrow{margin-right:8px;transition:transform .3s}.el-collapse-item__wrap{will-change:height;background-color:rgb(250, 253, 254);overflow:hidden;box-sizing:border-box;border-bottom:1px solid rgb(223, 230, 236)}.el-collapse-item__content{padding:10px 15px;font-size:13px;color:rgb(31, 45, 61);line-height:1.769230769230769} -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/dialog.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.v-modal-enter{animation:v-modal-in .2s ease}.v-modal-leave{animation:v-modal-out .2s ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{100%{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-dialog{position:absolute;left:50%;-ms-transform:translateX(-50%);transform:translateX(-50%);background:#fff;border-radius:2px;box-shadow:0 1px 3px rgba(0,0,0,.3);box-sizing:border-box}.el-dialog--tiny{width:30%}.el-dialog--small{width:50%}.el-dialog--large{width:90%}.el-dialog--full{width:100%;top:0;height:100%;overflow:auto}.el-dialog__wrapper{top:0;right:0;bottom:0;left:0;position:fixed;overflow:auto;margin:0}.el-dialog__header{padding:20px 20px 0}.el-dialog__close{cursor:pointer;color:rgb(191, 203, 217)}.el-dialog__close:hover{color:#1d8ce0}.el-dialog__title{line-height:1;font-size:16px;font-weight:700;color:rgb(31, 45, 61)}.el-dialog__body{padding:30px 20px;color:rgb(72, 87, 106);font-size:14px}.el-dialog__headerbtn{float:right}.el-dialog__footer{padding:10px 20px 15px;text-align:right;box-sizing:border-box}.dialog-fade-enter-active{animation:dialog-fade-in .3s}.dialog-fade-leave-active{animation:dialog-fade-out .3s}@keyframes dialog-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}100%{transform:translate3d(0,0,0);opacity:1}}@keyframes dialog-fade-out{0%{transform:translate3d(0,0,0);opacity:1}100%{transform:translate3d(0,-20px,0);opacity:0}} -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/dropdown-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-darkblue/dropdown-item.css -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/dropdown-menu.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-darkblue/dropdown-menu.css -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/fonts/element-icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-darkblue/fonts/element-icons.ttf -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/fonts/element-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-darkblue/fonts/element-icons.woff -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/form-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-darkblue/form-item.css -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/form.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-form--inline .el-form-item,.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form-item:after,.el-form-item__content:after{clear:both}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;padding:0 0 10px}.el-form--inline .el-form-item{margin-right:10px}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item:after,.el-form-item:before{display:table;content:""}.el-form-item .el-form-item{margin-bottom:0}.el-form-item .el-form-item .el-form-item__content{margin-left:0!important}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner,.el-form-item.is-error .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-textarea__inner{border-color:#ff4949}.el-form-item.is-required .el-form-item__label:before{content:'*';color:#ff4949;margin-right:4px}.el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:rgb(72, 87, 106);line-height:1;padding:11px 12px 11px 0;box-sizing:border-box}.el-form-item__content{line-height:36px;position:relative;font-size:14px}.el-form-item__content:after,.el-form-item__content:before{display:table;content:""}.el-form-item__error{color:#ff4949;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0} -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/icon.css: -------------------------------------------------------------------------------- 1 | @font-face{font-family:element-icons;src:url(fonts/element-icons.woff?t=1472440741) format('woff'),url(fonts/element-icons.ttf?t=1472440741) format('truetype');font-weight:400;font-style:normal}[class*=" el-icon-"],[class^=el-icon-]{font-family:element-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:baseline;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-icon-arrow-down:before{content:"\e600"}.el-icon-arrow-left:before{content:"\e601"}.el-icon-arrow-right:before{content:"\e602"}.el-icon-arrow-up:before{content:"\e603"}.el-icon-caret-bottom:before{content:"\e604"}.el-icon-caret-left:before{content:"\e605"}.el-icon-caret-right:before{content:"\e606"}.el-icon-caret-top:before{content:"\e607"}.el-icon-check:before{content:"\e608"}.el-icon-circle-check:before{content:"\e609"}.el-icon-circle-close:before{content:"\e60a"}.el-icon-circle-cross:before{content:"\e60b"}.el-icon-close:before{content:"\e60c"}.el-icon-upload:before{content:"\e60d"}.el-icon-d-arrow-left:before{content:"\e60e"}.el-icon-d-arrow-right:before{content:"\e60f"}.el-icon-d-caret:before{content:"\e610"}.el-icon-date:before{content:"\e611"}.el-icon-delete:before{content:"\e612"}.el-icon-document:before{content:"\e613"}.el-icon-edit:before{content:"\e614"}.el-icon-information:before{content:"\e615"}.el-icon-loading:before{content:"\e616"}.el-icon-menu:before{content:"\e617"}.el-icon-message:before{content:"\e618"}.el-icon-minus:before{content:"\e619"}.el-icon-more:before{content:"\e61a"}.el-icon-picture:before{content:"\e61b"}.el-icon-plus:before{content:"\e61c"}.el-icon-search:before{content:"\e61d"}.el-icon-setting:before{content:"\e61e"}.el-icon-share:before{content:"\e61f"}.el-icon-star-off:before{content:"\e620"}.el-icon-star-on:before{content:"\e621"}.el-icon-time:before{content:"\e622"}.el-icon-warning:before{content:"\e623"}.el-icon-delete2:before{content:"\e624"}.el-icon-upload2:before{content:"\e627"}.el-icon-view:before{content:"\e626"}.el-icon-loading{animation:rotating 1s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@keyframes rotating{0%{transform:rotateZ(0)}100%{transform:rotateZ(360deg)}} -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/loading.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-loading-mask{position:absolute;z-index:10000;background-color:rgba(255,255,255,.9);margin:0;top:0;right:0;bottom:0;left:0;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{width:50px;height:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-loading-spinner .el-loading-text{color:#1d8ce0;margin:3px 0;font-size:14px}.el-loading-spinner .circular{width:42px;height:42px;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#1d8ce0;stroke-linecap:round}.el-loading-fade-enter,.el-loading-fade-leave-active{opacity:0}@keyframes loading-rotate{100%{transform:rotate(360deg)}}@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}} -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/menu-item-group.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-darkblue/menu-item-group.css -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/menu-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-darkblue/menu-item.css -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/message.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-message{box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);min-width:300px;padding:10px 12px;box-sizing:border-box;border-radius:2px;position:fixed;left:50%;top:20px;-ms-transform:translateX(-50%);transform:translateX(-50%);background-color:#fff;transition:opacity .3s,transform .4s;overflow:hidden}.el-message .el-icon-circle-check{color:#13ce66}.el-message .el-icon-circle-cross{color:#ff4949}.el-message .el-icon-information{color:#50bfff}.el-message .el-icon-warning{color:#f7ba2a}.el-message__group{margin-left:38px;position:relative;height:20px;line-height:20px}.el-message__group p{font-size:14px;margin:0 34px 0 0;white-space:nowrap;color:rgb(131, 145, 165);text-align:justify}.el-message__group.is-with-icon{margin-left:0}.el-message__img{width:40px;height:40px;position:absolute;left:0;top:0}.el-message__icon{vertical-align:middle;margin-right:8px}.el-message__closeBtn{top:3px;right:0;position:absolute;cursor:pointer;color:rgb(191, 203, 217);font-size:14px}.el-message__closeBtn:hover{color:rgb(151, 168, 190)}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-ms-transform:translate(-50%,-100%);transform:translate(-50%,-100%)} -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/notification.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-notification{width:330px;padding:20px;box-sizing:border-box;border-radius:2px;position:fixed;right:16px;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);transition:opacity .3s,transform .3s,right .3s,top .4s;overflow:hidden}.el-notification .el-icon-circle-check{color:#13ce66}.el-notification .el-icon-circle-cross{color:#ff4949}.el-notification .el-icon-information{color:#50bfff}.el-notification .el-icon-warning{color:#f7ba2a}.el-notification__group{margin-left:0}.el-notification__group.is-with-icon{margin-left:55px}.el-notification__title{font-weight:400;font-size:16px;color:rgb(31, 45, 61);margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:10px 0 0;color:rgb(131, 145, 165);text-align:justify}.el-notification__icon{width:40px;height:40px;font-size:40px;float:left;position:relative;top:3px}.el-notification__closeBtn{top:20px;right:20px;position:absolute;cursor:pointer;color:rgb(191, 203, 217);font-size:14px}.el-notification__closeBtn:hover{color:rgb(151, 168, 190)}.el-notification-fade-enter{-ms-transform:translateX(100%);transform:translateX(100%);right:0}.el-notification-fade-leave-active{opacity:0} -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/option-group.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-select-group{margin:0;padding:0}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select-group__wrap{list-style:none;margin:0;padding:0}.el-select-group__title{padding-left:10px;font-size:12px;color:#999;height:30px;line-height:30px} -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/option.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-select-dropdown__item{font-size:14px;padding:8px 10px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:rgb(72, 87, 106);height:36px;line-height:1.5;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.hover{background-color:rgb(228, 232, 241)}.el-select-dropdown__item.selected{color:#fff;background-color:#1d8ce0}.el-select-dropdown__item.selected.hover{background-color:rgb(26, 123, 197)}.el-select-dropdown__item span{line-height:1.5!important}.el-select-dropdown__item.is-disabled{color:rgb(191, 203, 217);cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#fff} -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/popover.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-popover{position:absolute;background:#fff;min-width:150px;border-radius:2px;border:1px solid rgb(209, 219, 229);padding:10px;z-index:2000;font-size:12px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-popover .popper__arrow,.el-popover .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popover .popper__arrow{border-width:6px}.el-popover .popper__arrow::after{content:" ";border-width:6px}.el-popover[x-placement^=top]{margin-bottom:12px}.el-popover[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:rgb(209, 219, 229);border-bottom-width:0}.el-popover[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popover[x-placement^=bottom]{margin-top:12px}.el-popover[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:rgb(209, 219, 229)}.el-popover[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popover[x-placement^=right]{margin-left:12px}.el-popover[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:rgb(209, 219, 229);border-left-width:0}.el-popover[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popover[x-placement^=left]{margin-right:12px}.el-popover[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:rgb(209, 219, 229)}.el-popover[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-popover__title{color:rgb(31, 45, 61);font-size:13px;line-height:1;margin-bottom:9px} -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/progress.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-progress-bar__inner:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-progress{position:relative;line-height:1}.el-progress.is-exception .el-progress-bar__inner{background-color:#ff4949}.el-progress.is-exception .el-progress__text{color:#ff4949}.el-progress.is-success .el-progress-bar__inner{background-color:#13ce66}.el-progress.is-success .el-progress__text{color:#13ce66}.el-progress__text{font-size:14px;color:rgb(72, 87, 106);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;-ms-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--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress-bar{padding-right:50px;display:inline-block;vertical-align:middle;width:100%;margin-right:-55px;box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:rgb(228, 232, 241);overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#1d8ce0;text-align:right;border-radius:100px;line-height:1}.el-progress-bar__innerText{display:inline-block;vertical-align:middle;color:#fff;font-size:12px;margin:0 5px}@keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}} -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/radio-button.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-darkblue/radio-button.css -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/radio-group.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-darkblue/radio-group.css -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/rate.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-rate__icon,.el-rate__item{position:relative;display:inline-block}.el-rate{height:20px;line-height:1}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon{font-size:18px;margin-right:6px;color:rgb(191, 203, 217);transition:.3s}.el-rate__decimal,.el-rate__icon .path2{position:absolute;top:0;left:0}.el-rate__icon.hover{-ms-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} -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/row.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-row:after,.el-row:before{display:table;content:""}.el-row:after{clear:both}.el-row{position:relative;box-sizing:border-box}.el-row--flex{display:-ms-flexbox;display:flex}.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-align-bottom{-ms-flex-align:end;align-items:flex-end}.el-row--flex.is-align-middle{-ms-flex-align:center;align-items:center}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.el-row--flex.is-justify-space-between{-ms-flex-pack:justify;justify-content:space-between}.el-row--flex.is-justify-end{-ms-flex-pack:end;justify-content:flex-end}.el-row--flex.is-justify-center{-ms-flex-pack:center;justify-content:center} -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/scrollbar.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.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;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll}.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(151,168,190,.3);transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(151,168,190,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%} -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/select-dropdown.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-select-dropdown{position:absolute;z-index:1001;border:1px solid rgb(209, 219, 229);border-radius:2px;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);box-sizing:border-box;margin:5px 0}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#1d8ce0;background-color:#fff}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:rgb(228, 232, 241)}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:10px;font-family:element-icons;content:"\E608";font-size:11px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;box-sizing:border-box} -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/spinner.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-time-spinner{width:100%;white-space:nowrap}.el-spinner{display:inline-block;vertical-align:middle}.el-spinner-inner{animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;animation:dash 1.5s ease-in-out infinite}@keyframes rotate{100%{transform:rotate(360deg)}}@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/assets/theme/theme-darkblue/step.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-step.is-horizontal,.el-step.is-vertical .el-step__head,.el-step.is-vertical .el-step__main,.el-step__line{display:inline-block}.el-step{position:relative;vertical-align:top}.el-step.is-vertical .el-step__main{padding-left:10px}.el-step__line{position:absolute;border-color:inherit;background-color:rgb(191, 203, 217)}.el-step__line.is-vertical{width:2px;box-sizing:border-box;top:32px;bottom:0;left:15px}.el-step__line.is-horizontal{top:15px;height:2px;left:32px;right:0}.el-step__line.is-icon.is-horizontal{right:4px}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;transition:all 150ms;width:0;height:0}.el-step__icon{display:block;line-height:28px}.el-step__icon>*{line-height:inherit;vertical-align:middle}.el-step__head{width:28px;height:28px;border-radius:50%;background-color:transparent;text-align:center;line-height:28px;font-size:28px;vertical-align:top;transition:all 150ms}.el-step__head.is-finish{color:#1d8ce0;border-color:#1d8ce0}.el-step__head.is-error{color:#ff4949;border-color:#ff4949}.el-step__head.is-success{color:#13ce66;border-color:#13ce66}.el-step__head.is-process,.el-step__head.is-wait{color:rgb(191, 203, 217);border-color:rgb(191, 203, 217)}.el-step__head.is-text{font-size:14px;border-width:2px;border-style:solid}.el-step__head.is-text.is-finish{color:#fff;background-color:#1d8ce0;border-color:#1d8ce0}.el-step__head.is-text.is-error{color:#fff;background-color:#ff4949;border-color:#ff4949}.el-step__head.is-text.is-success{color:#fff;background-color:#13ce66;border-color:#13ce66}.el-step__head.is-text.is-wait{color:rgb(191, 203, 217);background-color:#fff;border-color:rgb(191, 203, 217)}.el-step__head.is-text.is-process{color:#fff;background-color:rgb(191, 203, 217);border-color:rgb(191, 203, 217)}.el-step__main{white-space:normal;padding-right:10px;text-align:left}.el-step__title{font-size:14px;line-height:32px;display:inline-block}.el-step__title.is-finish{font-weight:700;color:#1d8ce0}.el-step__title.is-error{font-weight:700;color:#ff4949}.el-step__title.is-success{font-weight:700;color:#13ce66}.el-step__title.is-wait{font-weight:400;color:rgb(151, 168, 190)}.el-step__title.is-process{font-weight:700;color:rgb(72, 87, 106)}.el-step__description{font-size:12px;font-weight:400;line-height:14px}.el-step__description.is-finish{color:#1d8ce0}.el-step__description.is-error{color:#ff4949}.el-step__description.is-success{color:#13ce66}.el-step__description.is-wait{color:rgb(191, 203, 217)}.el-step__description.is-process{color:rgb(131, 145, 165)} -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/steps.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-steps{font-size:0}.el-steps>:last-child .el-step__line{display:none}.el-steps.is-horizontal{white-space:nowrap}.el-steps.is-horizontal.is-center{text-align:center} -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/submenu.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-darkblue/submenu.css -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/switch.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-switch{display:inline-block;position:relative;font-size:14px;line-height:22px;height:22px;vertical-align:middle}.el-switch__label,.el-switch__label *{position:absolute;font-size:14px;display:inline-block}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0}.el-switch.is-disabled .el-switch__core{border-color:rgb(228, 232, 241)!important;background:rgb(228, 232, 241)!important}.el-switch.is-disabled .el-switch__core span{background-color:rgb(250, 253, 254)!important}.el-switch.is-disabled .el-switch__core~.el-switch__label *{color:rgb(250, 253, 254)!important}.el-switch.is-disabled .el-switch__input:checked+.el-switch__core{border-color:rgb(228, 232, 241);background-color:rgb(228, 232, 241)}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__core,.el-switch__label{width:46px;height:22px;cursor:pointer}.el-switch__label{transition:.2s;z-index:10;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-switch__label *{line-height:1;top:4px;color:#fff}.el-switch__label--left i{left:6px}.el-switch__label--right i{right:6px}.el-switch__input{display:none}.el-switch__input:checked+.el-switch__core{border-color:#1d8ce0;background-color:#1d8ce0}.el-switch__core{margin:0;display:inline-block;position:relative;border:1px solid rgb(191, 203, 217);outline:0;border-radius:12px;box-sizing:border-box;background:rgb(191, 203, 217);transition:border-color .3s,background-color .3s}.el-switch__core .el-switch__button{top:0;left:0;position:absolute;border-radius:100%;transition:transform .3s;width:16px;height:16px;z-index:20;background-color:#fff}.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} -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/tab-pane.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-darkblue/tab-pane.css -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/tag.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-tag{background-color:rgb(131, 145, 165);display:inline-block;padding:0 5px;height:24px;line-height:22px;font-size:12px;color:#fff;border-radius:4px;box-sizing:border-box;border:1px solid transparent;white-space:nowrap}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;-ms-transform:scale(.75,.75);transform:scale(.75,.75);height:18px;width:18px;line-height:18px;vertical-align:middle;top:-1px;right:-2px}.el-tag .el-icon-close:hover{background-color:#fff;color:rgb(131, 145, 165)}.el-tag--gray{background-color:rgb(228, 232, 241);border-color:rgb(228, 232, 241);color:rgb(72, 87, 106)}.el-tag--gray .el-tag__close:hover{background-color:rgb(72, 87, 106);color:#fff}.el-tag--gray.is-hit{border-color:rgb(72, 87, 106)}.el-tag--primary{background-color:rgba(32,160,255,.1);border-color:rgba(32,160,255,.2);color:#1d8ce0}.el-tag--primary .el-tag__close:hover{background-color:#1d8ce0;color:#fff}.el-tag--primary.is-hit{border-color:#1d8ce0}.el-tag--success{background-color:rgba(18,206,102,.1);border-color:rgba(18,206,102,.2);color:#13ce66}.el-tag--success .el-tag__close:hover{background-color:#13ce66;color:#fff}.el-tag--success.is-hit{border-color:#13ce66}.el-tag--warning{background-color:rgba(247,186,41,.1);border-color:rgba(247,186,41,.2);color:#f7ba2a}.el-tag--warning .el-tag__close:hover{background-color:#f7ba2a;color:#fff}.el-tag--warning.is-hit{border-color:#f7ba2a}.el-tag--danger{background-color:rgba(255,73,73,.1);border-color:rgba(255,73,73,.2);color:#ff4949}.el-tag--danger .el-tag__close:hover{background-color:#ff4949;color:#fff}.el-tag--danger.is-hit{border-color:#ff4949} -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/tooltip.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow::after{content:" ";border-width:5px}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:rgb(31, 45, 61);border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:rgb(31, 45, 61);border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:rgb(31, 45, 61)}.el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:rgb(31, 45, 61)}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:rgb(31, 45, 61);border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:rgb(31, 45, 61);border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:rgb(31, 45, 61)}.el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:rgb(31, 45, 61)}.el-tooltip__popper.is-light{background:#fff;border:1px solid rgb(31, 45, 61)}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:rgb(31, 45, 61)}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#fff}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:rgb(31, 45, 61)}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#fff}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:rgb(31, 45, 61)}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#fff}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:rgb(31, 45, 61)}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#fff}.el-tooltip__popper.is-dark{background:rgb(31, 45, 61);color:#fff} -------------------------------------------------------------------------------- /src/assets/theme/theme-darkblue/tree.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-tree{cursor:default;background:#fff;border:1px solid rgb(209, 219, 229)}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-tree__empty-text{position:absolute;left:50%;top:50%;-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#5e7382}.el-tree-node{white-space:nowrap}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree-node__expand-icon,.el-tree-node__label,.el-tree-node__loading-icon{display:inline-block;vertical-align:middle}.el-tree-node__content{line-height:36px;height:36px;cursor:pointer}.el-tree-node__content>.el-checkbox,.el-tree-node__content>.el-tree-node__expand-icon{margin-right:8px}.el-tree-node__content>.el-checkbox{vertical-align:middle}.el-tree-node__content:hover{background:rgb(228, 232, 241)}.el-tree-node__expand-icon{cursor:pointer;width:0;height:0;margin-left:10px;border:6px solid transparent;border-right-width:0;border-left-color:rgb(151, 168, 190);border-left-width:7px;-ms-transform:rotate(0);transform:rotate(0);transition:transform .3s ease-in-out}.el-tree-node__expand-icon:hover{border-left-color:#999}.el-tree-node__expand-icon.expanded{-ms-transform:rotate(90deg);transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{border-color:transparent;cursor:default}.el-tree-node__label{font-size:14px}.el-tree-node__loading-icon{margin-right:4px;font-size:14px;color:rgb(151, 168, 190)}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:rgb(237, 246, 253)} -------------------------------------------------------------------------------- /src/assets/theme/theme-green/alert.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-alert{width:100%;padding:8px 16px;margin:0;box-sizing:border-box;border-radius:4px;position:relative;background-color:#fff;overflow:hidden;color:#fff;opacity:1;display:table;transition:opacity .2s}.el-alert .el-alert__description{color:#fff;font-size:12px;margin:5px 0 0}.el-alert--success{background-color:#13ce66}.el-alert--info{background-color:#50bfff}.el-alert--warning{background-color:#f7ba2a}.el-alert--error{background-color:#ff4949}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px;display:table-cell;color:#fff;vertical-align:middle}.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__closebtn{font-size:12px;color:#fff;opacity:1;top:12px;right:15px;position:absolute;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/theme/theme-green/badge.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{background-color:#ff4949;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-dot{width:8px;height:8px;padding:0;right:0;border-radius:50%}.el-badge__content.is-fixed{top:0;right:10px;position:absolute;-ms-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.el-badge__content.is-fixed.is-dot{right:5px} -------------------------------------------------------------------------------- /src/assets/theme/theme-green/breadcrumb-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-green/breadcrumb-item.css -------------------------------------------------------------------------------- /src/assets/theme/theme-green/breadcrumb.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-breadcrumb{font-size:13px;line-height:1}.el-breadcrumb:after,.el-breadcrumb:before{display:table;content:""}.el-breadcrumb:after{clear:both}.el-breadcrumb__separator{margin:0 8px;color:rgb(191, 217, 214)}.el-breadcrumb__item{float:left}.el-breadcrumb__item:last-child .el-breadcrumb__item__inner,.el-breadcrumb__item:last-child .el-breadcrumb__item__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__item__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__item__inner:hover{color:rgb(151, 190, 187);cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-breadcrumb__item__inner,.el-breadcrumb__item__inner a{transition:color .15s linear;color:rgb(72, 106, 103)}.el-breadcrumb__item__inner a:hover,.el-breadcrumb__item__inner:hover{color:#18c79c;cursor:pointer} -------------------------------------------------------------------------------- /src/assets/theme/theme-green/button-group.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-green/button-group.css -------------------------------------------------------------------------------- /src/assets/theme/theme-green/card.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-card{border:1px solid rgb(209, 229, 227);border-radius:4px;background-color:#fff;overflow:hidden;box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-card__header{padding:18px 20px;border-bottom:1px solid rgb(209, 229, 227);box-sizing:border-box}.el-card__body{padding:20px} -------------------------------------------------------------------------------- /src/assets/theme/theme-green/carousel-item.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-carousel__item,.el-carousel__mask{position:absolute;height:100%;top:0;left:0}.el-carousel__item{width:100%;display:inline-block;transition:.4s ease-in-out;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item--card{width:50%}.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;transition:.2s} -------------------------------------------------------------------------------- /src/assets/theme/theme-green/carousel.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-carousel__arrow,.el-carousel__button{outline:0;margin:0;cursor:pointer;transition:.3s}.el-carousel{overflow-x:hidden;position:relative}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;padding:0;width:36px;height:36px;border-radius:50%;background-color:rgba(31,45,61,.11);color:#fff;position:absolute;top:50%;z-index:10;-ms-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:12px}.el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.el-carousel__arrow i{cursor:pointer}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__indicators{position:absolute;list-style:none;bottom:0;left:50%;-ms-transform:translateX(-50%);transform:translateX(-50%);margin:0;padding:0;z-index:2}.el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;-ms-transform:none;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:rgb(131, 165, 162);opacity:.24}.el-carousel__indicator{display:inline-block;background-color:transparent;padding:12px 4px;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:30px;height:2px;background-color:#fff;border:none;padding:0}.carousel-arrow-left-enter,.carousel-arrow-left-leave-active{-ms-transform:translateY(-50%) translateX(-10px);transform:translateY(-50%) translateX(-10px);opacity:0}.carousel-arrow-right-enter,.carousel-arrow-right-leave-active{-ms-transform:translateY(-50%) translateX(10px);transform:translateY(-50%) translateX(10px);opacity:0} -------------------------------------------------------------------------------- /src/assets/theme/theme-green/checkbox-group.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-green/checkbox-group.css -------------------------------------------------------------------------------- /src/assets/theme/theme-green/checkbox.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-checkbox,.el-checkbox__input{white-space:nowrap;cursor:pointer;display:inline-block;position:relative}.el-checkbox{color:rgb(31, 61, 57);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-checkbox+.el-checkbox{margin-left:15px}.el-checkbox__input{outline:0;line-height:1;vertical-align:middle}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#18c79c;border-color:rgb(1, 203, 152)}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;border:1px solid #fff;margin-top:-1px;left:3px;right:3px;top:50%}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#18c79c}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:#18c79c;border-color:rgb(1, 203, 152)}.el-checkbox__input.is-checked .el-checkbox__inner::after{-ms-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:rgb(238, 246, 246);border-color:rgb(209, 229, 227);cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:rgb(238, 246, 246)}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:rgb(209, 229, 227);border-color:rgb(209, 229, 227)}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#fff}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:rgb(209, 229, 227);border-color:rgb(209, 229, 227)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{border-color:#fff}.el-checkbox__input.is-disabled+.el-checkbox__label{color:#bbb;cursor:not-allowed}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid rgb(191, 217, 214);border-radius:4px;box-sizing:border-box;width:18px;height:18px;background-color:#fff;z-index:1;transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:#18c79c}.el-checkbox__inner::after{box-sizing:content-box;content:"";border:2px solid #fff;border-left:0;border-top:0;height:8px;left:5px;position:absolute;top:1px;-ms-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:4px;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) .05s;-ms-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;left:-999px}.el-checkbox__label{font-size:14px;padding-left:5px} -------------------------------------------------------------------------------- /src/assets/theme/theme-green/collapse-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-green/collapse-item.css -------------------------------------------------------------------------------- /src/assets/theme/theme-green/collapse.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-collapse{border:1px solid rgb(223, 236, 234);border-radius:0}.el-collapse-item:last-child{margin-bottom:-1px}.el-collapse-item.is-active>.el-collapse-item__header .el-collapse-item__header__arrow{-ms-transform:rotate(90deg);transform:rotate(90deg)}.el-collapse-item__header{height:43px;line-height:43px;padding-left:15px;background-color:#fff;color:rgb(72, 106, 103);cursor:pointer;border-bottom:1px solid rgb(223, 236, 234);font-size:13px}.el-collapse-item__header__arrow{margin-right:8px;transition:transform .3s}.el-collapse-item__wrap{will-change:height;background-color:rgb(250, 254, 253);overflow:hidden;box-sizing:border-box;border-bottom:1px solid rgb(223, 236, 234)}.el-collapse-item__content{padding:10px 15px;font-size:13px;color:rgb(31, 61, 57);line-height:1.769230769230769} -------------------------------------------------------------------------------- /src/assets/theme/theme-green/dialog.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.v-modal-enter{animation:v-modal-in .2s ease}.v-modal-leave{animation:v-modal-out .2s ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{100%{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-dialog{position:absolute;left:50%;-ms-transform:translateX(-50%);transform:translateX(-50%);background:#fff;border-radius:2px;box-shadow:0 1px 3px rgba(0,0,0,.3);box-sizing:border-box}.el-dialog--tiny{width:30%}.el-dialog--small{width:50%}.el-dialog--large{width:90%}.el-dialog--full{width:100%;top:0;height:100%;overflow:auto}.el-dialog__wrapper{top:0;right:0;bottom:0;left:0;position:fixed;overflow:auto;margin:0}.el-dialog__header{padding:20px 20px 0}.el-dialog__close{cursor:pointer;color:rgb(191, 217, 214)}.el-dialog__close:hover{color:#18c79c}.el-dialog__title{line-height:1;font-size:16px;font-weight:700;color:rgb(31, 61, 57)}.el-dialog__body{padding:30px 20px;color:rgb(72, 106, 103);font-size:14px}.el-dialog__headerbtn{float:right}.el-dialog__footer{padding:10px 20px 15px;text-align:right;box-sizing:border-box}.dialog-fade-enter-active{animation:dialog-fade-in .3s}.dialog-fade-leave-active{animation:dialog-fade-out .3s}@keyframes dialog-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}100%{transform:translate3d(0,0,0);opacity:1}}@keyframes dialog-fade-out{0%{transform:translate3d(0,0,0);opacity:1}100%{transform:translate3d(0,-20px,0);opacity:0}} -------------------------------------------------------------------------------- /src/assets/theme/theme-green/dropdown-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-green/dropdown-item.css -------------------------------------------------------------------------------- /src/assets/theme/theme-green/dropdown-menu.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-green/dropdown-menu.css -------------------------------------------------------------------------------- /src/assets/theme/theme-green/fonts/element-icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-green/fonts/element-icons.ttf -------------------------------------------------------------------------------- /src/assets/theme/theme-green/fonts/element-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-green/fonts/element-icons.woff -------------------------------------------------------------------------------- /src/assets/theme/theme-green/form-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-green/form-item.css -------------------------------------------------------------------------------- /src/assets/theme/theme-green/form.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-form--inline .el-form-item,.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form-item:after,.el-form-item__content:after{clear:both}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;padding:0 0 10px}.el-form--inline .el-form-item{margin-right:10px}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item:after,.el-form-item:before{display:table;content:""}.el-form-item .el-form-item{margin-bottom:0}.el-form-item .el-form-item .el-form-item__content{margin-left:0!important}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner,.el-form-item.is-error .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-textarea__inner{border-color:#ff4949}.el-form-item.is-required .el-form-item__label:before{content:'*';color:#ff4949;margin-right:4px}.el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:rgb(72, 106, 103);line-height:1;padding:11px 12px 11px 0;box-sizing:border-box}.el-form-item__content{line-height:36px;position:relative;font-size:14px}.el-form-item__content:after,.el-form-item__content:before{display:table;content:""}.el-form-item__error{color:#ff4949;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0} -------------------------------------------------------------------------------- /src/assets/theme/theme-green/icon.css: -------------------------------------------------------------------------------- 1 | @font-face{font-family:element-icons;src:url(fonts/element-icons.woff?t=1472440741) format('woff'),url(fonts/element-icons.ttf?t=1472440741) format('truetype');font-weight:400;font-style:normal}[class*=" el-icon-"],[class^=el-icon-]{font-family:element-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:baseline;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-icon-arrow-down:before{content:"\e600"}.el-icon-arrow-left:before{content:"\e601"}.el-icon-arrow-right:before{content:"\e602"}.el-icon-arrow-up:before{content:"\e603"}.el-icon-caret-bottom:before{content:"\e604"}.el-icon-caret-left:before{content:"\e605"}.el-icon-caret-right:before{content:"\e606"}.el-icon-caret-top:before{content:"\e607"}.el-icon-check:before{content:"\e608"}.el-icon-circle-check:before{content:"\e609"}.el-icon-circle-close:before{content:"\e60a"}.el-icon-circle-cross:before{content:"\e60b"}.el-icon-close:before{content:"\e60c"}.el-icon-upload:before{content:"\e60d"}.el-icon-d-arrow-left:before{content:"\e60e"}.el-icon-d-arrow-right:before{content:"\e60f"}.el-icon-d-caret:before{content:"\e610"}.el-icon-date:before{content:"\e611"}.el-icon-delete:before{content:"\e612"}.el-icon-document:before{content:"\e613"}.el-icon-edit:before{content:"\e614"}.el-icon-information:before{content:"\e615"}.el-icon-loading:before{content:"\e616"}.el-icon-menu:before{content:"\e617"}.el-icon-message:before{content:"\e618"}.el-icon-minus:before{content:"\e619"}.el-icon-more:before{content:"\e61a"}.el-icon-picture:before{content:"\e61b"}.el-icon-plus:before{content:"\e61c"}.el-icon-search:before{content:"\e61d"}.el-icon-setting:before{content:"\e61e"}.el-icon-share:before{content:"\e61f"}.el-icon-star-off:before{content:"\e620"}.el-icon-star-on:before{content:"\e621"}.el-icon-time:before{content:"\e622"}.el-icon-warning:before{content:"\e623"}.el-icon-delete2:before{content:"\e624"}.el-icon-upload2:before{content:"\e627"}.el-icon-view:before{content:"\e626"}.el-icon-loading{animation:rotating 1s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@keyframes rotating{0%{transform:rotateZ(0)}100%{transform:rotateZ(360deg)}} -------------------------------------------------------------------------------- /src/assets/theme/theme-green/loading.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-loading-mask{position:absolute;z-index:10000;background-color:rgba(255,255,255,.9);margin:0;top:0;right:0;bottom:0;left:0;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{width:50px;height:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-loading-spinner .el-loading-text{color:#18c79c;margin:3px 0;font-size:14px}.el-loading-spinner .circular{width:42px;height:42px;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#18c79c;stroke-linecap:round}.el-loading-fade-enter,.el-loading-fade-leave-active{opacity:0}@keyframes loading-rotate{100%{transform:rotate(360deg)}}@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}} -------------------------------------------------------------------------------- /src/assets/theme/theme-green/menu-item-group.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-green/menu-item-group.css -------------------------------------------------------------------------------- /src/assets/theme/theme-green/menu-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-green/menu-item.css -------------------------------------------------------------------------------- /src/assets/theme/theme-green/message.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-message{box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);min-width:300px;padding:10px 12px;box-sizing:border-box;border-radius:2px;position:fixed;left:50%;top:20px;-ms-transform:translateX(-50%);transform:translateX(-50%);background-color:#fff;transition:opacity .3s,transform .4s;overflow:hidden}.el-message .el-icon-circle-check{color:#13ce66}.el-message .el-icon-circle-cross{color:#ff4949}.el-message .el-icon-information{color:#50bfff}.el-message .el-icon-warning{color:#f7ba2a}.el-message__group{margin-left:38px;position:relative;height:20px;line-height:20px}.el-message__group p{font-size:14px;margin:0 34px 0 0;white-space:nowrap;color:rgb(131, 165, 162);text-align:justify}.el-message__group.is-with-icon{margin-left:0}.el-message__img{width:40px;height:40px;position:absolute;left:0;top:0}.el-message__icon{vertical-align:middle;margin-right:8px}.el-message__closeBtn{top:3px;right:0;position:absolute;cursor:pointer;color:rgb(191, 217, 214);font-size:14px}.el-message__closeBtn:hover{color:rgb(151, 190, 187)}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-ms-transform:translate(-50%,-100%);transform:translate(-50%,-100%)} -------------------------------------------------------------------------------- /src/assets/theme/theme-green/notification.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-notification{width:330px;padding:20px;box-sizing:border-box;border-radius:2px;position:fixed;right:16px;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);transition:opacity .3s,transform .3s,right .3s,top .4s;overflow:hidden}.el-notification .el-icon-circle-check{color:#13ce66}.el-notification .el-icon-circle-cross{color:#ff4949}.el-notification .el-icon-information{color:#50bfff}.el-notification .el-icon-warning{color:#f7ba2a}.el-notification__group{margin-left:0}.el-notification__group.is-with-icon{margin-left:55px}.el-notification__title{font-weight:400;font-size:16px;color:rgb(31, 61, 57);margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:10px 0 0;color:rgb(131, 165, 162);text-align:justify}.el-notification__icon{width:40px;height:40px;font-size:40px;float:left;position:relative;top:3px}.el-notification__closeBtn{top:20px;right:20px;position:absolute;cursor:pointer;color:rgb(191, 217, 214);font-size:14px}.el-notification__closeBtn:hover{color:rgb(151, 190, 187)}.el-notification-fade-enter{-ms-transform:translateX(100%);transform:translateX(100%);right:0}.el-notification-fade-leave-active{opacity:0} -------------------------------------------------------------------------------- /src/assets/theme/theme-green/option-group.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-select-group{margin:0;padding:0}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select-group__wrap{list-style:none;margin:0;padding:0}.el-select-group__title{padding-left:10px;font-size:12px;color:#999;height:30px;line-height:30px} -------------------------------------------------------------------------------- /src/assets/theme/theme-green/option.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-select-dropdown__item{font-size:14px;padding:8px 10px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:rgb(72, 106, 103);height:36px;line-height:1.5;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.hover{background-color:rgb(228, 241, 241)}.el-select-dropdown__item.selected{color:#fff;background-color:#18c79c}.el-select-dropdown__item.selected.hover{background-color:rgb(21, 175, 137)}.el-select-dropdown__item span{line-height:1.5!important}.el-select-dropdown__item.is-disabled{color:rgb(191, 217, 214);cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#fff} -------------------------------------------------------------------------------- /src/assets/theme/theme-green/popover.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-popover{position:absolute;background:#fff;min-width:150px;border-radius:2px;border:1px solid rgb(209, 229, 227);padding:10px;z-index:2000;font-size:12px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-popover .popper__arrow,.el-popover .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popover .popper__arrow{border-width:6px}.el-popover .popper__arrow::after{content:" ";border-width:6px}.el-popover[x-placement^=top]{margin-bottom:12px}.el-popover[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:rgb(209, 229, 227);border-bottom-width:0}.el-popover[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popover[x-placement^=bottom]{margin-top:12px}.el-popover[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:rgb(209, 229, 227)}.el-popover[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popover[x-placement^=right]{margin-left:12px}.el-popover[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:rgb(209, 229, 227);border-left-width:0}.el-popover[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popover[x-placement^=left]{margin-right:12px}.el-popover[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:rgb(209, 229, 227)}.el-popover[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-popover__title{color:rgb(31, 61, 57);font-size:13px;line-height:1;margin-bottom:9px} -------------------------------------------------------------------------------- /src/assets/theme/theme-green/progress.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-progress-bar__inner:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-progress{position:relative;line-height:1}.el-progress.is-exception .el-progress-bar__inner{background-color:#ff4949}.el-progress.is-exception .el-progress__text{color:#ff4949}.el-progress.is-success .el-progress-bar__inner{background-color:#13ce66}.el-progress.is-success .el-progress__text{color:#13ce66}.el-progress__text{font-size:14px;color:rgb(72, 106, 103);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;-ms-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--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress-bar{padding-right:50px;display:inline-block;vertical-align:middle;width:100%;margin-right:-55px;box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:rgb(228, 241, 241);overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#18c79c;text-align:right;border-radius:100px;line-height:1}.el-progress-bar__innerText{display:inline-block;vertical-align:middle;color:#fff;font-size:12px;margin:0 5px}@keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}} -------------------------------------------------------------------------------- /src/assets/theme/theme-green/radio-button.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-green/radio-button.css -------------------------------------------------------------------------------- /src/assets/theme/theme-green/radio-group.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-green/radio-group.css -------------------------------------------------------------------------------- /src/assets/theme/theme-green/rate.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-rate__icon,.el-rate__item{position:relative;display:inline-block}.el-rate{height:20px;line-height:1}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon{font-size:18px;margin-right:6px;color:rgb(191, 217, 214);transition:.3s}.el-rate__decimal,.el-rate__icon .path2{position:absolute;top:0;left:0}.el-rate__icon.hover{-ms-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} -------------------------------------------------------------------------------- /src/assets/theme/theme-green/row.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-row:after,.el-row:before{display:table;content:""}.el-row:after{clear:both}.el-row{position:relative;box-sizing:border-box}.el-row--flex{display:-ms-flexbox;display:flex}.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-align-bottom{-ms-flex-align:end;align-items:flex-end}.el-row--flex.is-align-middle{-ms-flex-align:center;align-items:center}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.el-row--flex.is-justify-space-between{-ms-flex-pack:justify;justify-content:space-between}.el-row--flex.is-justify-end{-ms-flex-pack:end;justify-content:flex-end}.el-row--flex.is-justify-center{-ms-flex-pack:center;justify-content:center} -------------------------------------------------------------------------------- /src/assets/theme/theme-green/scrollbar.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.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;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll}.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(151,168,190,.3);transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(151,168,190,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%} -------------------------------------------------------------------------------- /src/assets/theme/theme-green/select-dropdown.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-select-dropdown{position:absolute;z-index:1001;border:1px solid rgb(209, 229, 227);border-radius:2px;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);box-sizing:border-box;margin:5px 0}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#18c79c;background-color:#fff}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:rgb(228, 241, 241)}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:10px;font-family:element-icons;content:"\E608";font-size:11px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;box-sizing:border-box} -------------------------------------------------------------------------------- /src/assets/theme/theme-green/spinner.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-time-spinner{width:100%;white-space:nowrap}.el-spinner{display:inline-block;vertical-align:middle}.el-spinner-inner{animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;animation:dash 1.5s ease-in-out infinite}@keyframes rotate{100%{transform:rotate(360deg)}}@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/assets/theme/theme-green/step.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-step.is-horizontal,.el-step.is-vertical .el-step__head,.el-step.is-vertical .el-step__main,.el-step__line{display:inline-block}.el-step{position:relative;vertical-align:top}.el-step.is-vertical .el-step__main{padding-left:10px}.el-step__line{position:absolute;border-color:inherit;background-color:rgb(191, 217, 214)}.el-step__line.is-vertical{width:2px;box-sizing:border-box;top:32px;bottom:0;left:15px}.el-step__line.is-horizontal{top:15px;height:2px;left:32px;right:0}.el-step__line.is-icon.is-horizontal{right:4px}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;transition:all 150ms;width:0;height:0}.el-step__icon{display:block;line-height:28px}.el-step__icon>*{line-height:inherit;vertical-align:middle}.el-step__head{width:28px;height:28px;border-radius:50%;background-color:transparent;text-align:center;line-height:28px;font-size:28px;vertical-align:top;transition:all 150ms}.el-step__head.is-finish{color:#18c79c;border-color:#18c79c}.el-step__head.is-error{color:#ff4949;border-color:#ff4949}.el-step__head.is-success{color:#13ce66;border-color:#13ce66}.el-step__head.is-process,.el-step__head.is-wait{color:rgb(191, 217, 214);border-color:rgb(191, 217, 214)}.el-step__head.is-text{font-size:14px;border-width:2px;border-style:solid}.el-step__head.is-text.is-finish{color:#fff;background-color:#18c79c;border-color:#18c79c}.el-step__head.is-text.is-error{color:#fff;background-color:#ff4949;border-color:#ff4949}.el-step__head.is-text.is-success{color:#fff;background-color:#13ce66;border-color:#13ce66}.el-step__head.is-text.is-wait{color:rgb(191, 217, 214);background-color:#fff;border-color:rgb(191, 217, 214)}.el-step__head.is-text.is-process{color:#fff;background-color:rgb(191, 217, 214);border-color:rgb(191, 217, 214)}.el-step__main{white-space:normal;padding-right:10px;text-align:left}.el-step__title{font-size:14px;line-height:32px;display:inline-block}.el-step__title.is-finish{font-weight:700;color:#18c79c}.el-step__title.is-error{font-weight:700;color:#ff4949}.el-step__title.is-success{font-weight:700;color:#13ce66}.el-step__title.is-wait{font-weight:400;color:rgb(151, 190, 187)}.el-step__title.is-process{font-weight:700;color:rgb(72, 106, 103)}.el-step__description{font-size:12px;font-weight:400;line-height:14px}.el-step__description.is-finish{color:#18c79c}.el-step__description.is-error{color:#ff4949}.el-step__description.is-success{color:#13ce66}.el-step__description.is-wait{color:rgb(191, 217, 214)}.el-step__description.is-process{color:rgb(131, 165, 162)} -------------------------------------------------------------------------------- /src/assets/theme/theme-green/steps.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-steps{font-size:0}.el-steps>:last-child .el-step__line{display:none}.el-steps.is-horizontal{white-space:nowrap}.el-steps.is-horizontal.is-center{text-align:center} -------------------------------------------------------------------------------- /src/assets/theme/theme-green/submenu.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-green/submenu.css -------------------------------------------------------------------------------- /src/assets/theme/theme-green/switch.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-switch{display:inline-block;position:relative;font-size:14px;line-height:22px;height:22px;vertical-align:middle}.el-switch__label,.el-switch__label *{position:absolute;font-size:14px;display:inline-block}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0}.el-switch.is-disabled .el-switch__core{border-color:rgb(228, 241, 241)!important;background:rgb(228, 241, 241)!important}.el-switch.is-disabled .el-switch__core span{background-color:rgb(250, 254, 253)!important}.el-switch.is-disabled .el-switch__core~.el-switch__label *{color:rgb(250, 254, 253)!important}.el-switch.is-disabled .el-switch__input:checked+.el-switch__core{border-color:rgb(228, 241, 241);background-color:rgb(228, 241, 241)}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__core,.el-switch__label{width:46px;height:22px;cursor:pointer}.el-switch__label{transition:.2s;z-index:10;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-switch__label *{line-height:1;top:4px;color:#fff}.el-switch__label--left i{left:6px}.el-switch__label--right i{right:6px}.el-switch__input{display:none}.el-switch__input:checked+.el-switch__core{border-color:#18c79c;background-color:#18c79c}.el-switch__core{margin:0;display:inline-block;position:relative;border:1px solid rgb(191, 217, 214);outline:0;border-radius:12px;box-sizing:border-box;background:rgb(191, 217, 214);transition:border-color .3s,background-color .3s}.el-switch__core .el-switch__button{top:0;left:0;position:absolute;border-radius:100%;transition:transform .3s;width:16px;height:16px;z-index:20;background-color:#fff}.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} -------------------------------------------------------------------------------- /src/assets/theme/theme-green/tab-pane.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/theme/theme-green/tab-pane.css -------------------------------------------------------------------------------- /src/assets/theme/theme-green/tag.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-tag{background-color:rgb(131, 165, 162);display:inline-block;padding:0 5px;height:24px;line-height:22px;font-size:12px;color:#fff;border-radius:4px;box-sizing:border-box;border:1px solid transparent;white-space:nowrap}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;-ms-transform:scale(.75,.75);transform:scale(.75,.75);height:18px;width:18px;line-height:18px;vertical-align:middle;top:-1px;right:-2px}.el-tag .el-icon-close:hover{background-color:#fff;color:rgb(131, 165, 162)}.el-tag--gray{background-color:rgb(228, 241, 241);border-color:rgb(228, 241, 241);color:rgb(72, 106, 103)}.el-tag--gray .el-tag__close:hover{background-color:rgb(72, 106, 103);color:#fff}.el-tag--gray.is-hit{border-color:rgb(72, 106, 103)}.el-tag--primary{background-color:rgba(32,160,255,.1);border-color:rgba(32,160,255,.2);color:#18c79c}.el-tag--primary .el-tag__close:hover{background-color:#18c79c;color:#fff}.el-tag--primary.is-hit{border-color:#18c79c}.el-tag--success{background-color:rgba(18,206,102,.1);border-color:rgba(18,206,102,.2);color:#13ce66}.el-tag--success .el-tag__close:hover{background-color:#13ce66;color:#fff}.el-tag--success.is-hit{border-color:#13ce66}.el-tag--warning{background-color:rgba(247,186,41,.1);border-color:rgba(247,186,41,.2);color:#f7ba2a}.el-tag--warning .el-tag__close:hover{background-color:#f7ba2a;color:#fff}.el-tag--warning.is-hit{border-color:#f7ba2a}.el-tag--danger{background-color:rgba(255,73,73,.1);border-color:rgba(255,73,73,.2);color:#ff4949}.el-tag--danger .el-tag__close:hover{background-color:#ff4949;color:#fff}.el-tag--danger.is-hit{border-color:#ff4949} -------------------------------------------------------------------------------- /src/assets/theme/theme-green/tooltip.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow::after{content:" ";border-width:5px}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:rgb(31, 61, 57);border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:rgb(31, 61, 57);border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:rgb(31, 61, 57)}.el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:rgb(31, 61, 57)}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:rgb(31, 61, 57);border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:rgb(31, 61, 57);border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:rgb(31, 61, 57)}.el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:rgb(31, 61, 57)}.el-tooltip__popper.is-light{background:#fff;border:1px solid rgb(31, 61, 57)}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:rgb(31, 61, 57)}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#fff}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:rgb(31, 61, 57)}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#fff}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:rgb(31, 61, 57)}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#fff}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:rgb(31, 61, 57)}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#fff}.el-tooltip__popper.is-dark{background:rgb(31, 61, 57);color:#fff} -------------------------------------------------------------------------------- /src/assets/theme/theme-green/tree.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-tree{cursor:default;background:#fff;border:1px solid rgb(209, 229, 227)}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-tree__empty-text{position:absolute;left:50%;top:50%;-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#5e7382}.el-tree-node{white-space:nowrap}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree-node__expand-icon,.el-tree-node__label,.el-tree-node__loading-icon{display:inline-block;vertical-align:middle}.el-tree-node__content{line-height:36px;height:36px;cursor:pointer}.el-tree-node__content>.el-checkbox,.el-tree-node__content>.el-tree-node__expand-icon{margin-right:8px}.el-tree-node__content>.el-checkbox{vertical-align:middle}.el-tree-node__content:hover{background:rgb(228, 241, 241)}.el-tree-node__expand-icon{cursor:pointer;width:0;height:0;margin-left:10px;border:6px solid transparent;border-right-width:0;border-left-color:rgb(151, 190, 187);border-left-width:7px;-ms-transform:rotate(0);transform:rotate(0);transition:transform .3s ease-in-out}.el-tree-node__expand-icon:hover{border-left-color:#999}.el-tree-node__expand-icon.expanded{-ms-transform:rotate(90deg);transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{border-color:transparent;cursor:default}.el-tree-node__label{font-size:14px}.el-tree-node__loading-icon{margin-right:4px;font-size:14px;color:rgb(151, 190, 187)}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:rgb(237, 251, 247)} -------------------------------------------------------------------------------- /src/assets/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/user.png -------------------------------------------------------------------------------- /src/assets/xiyang.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/assets/xiyang.gif -------------------------------------------------------------------------------- /src/images/banner.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/images/banner.jpeg -------------------------------------------------------------------------------- /src/images/cat.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/images/cat.jpeg -------------------------------------------------------------------------------- /src/images/cloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/images/cloud.png -------------------------------------------------------------------------------- /src/images/default-avatar.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/images/default-avatar.jpeg -------------------------------------------------------------------------------- /src/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/images/favicon.ico -------------------------------------------------------------------------------- /src/images/mac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/src/images/mac.png -------------------------------------------------------------------------------- /src/javascripts/account.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by harttle on 1/6/15. 3 | */ 4 | 5 | var msgMap = { 6 | "Unauthorized": '用户名或密码不正确', 7 | "Unactived": '该用户尚未激活' 8 | }; 9 | 10 | function login(){ 11 | if(!simpleValidate()) return; 12 | $.post('', $('form').serialize()) 13 | .done(function(){ 14 | window.location = getQueryStringValue('next') || '/home'; 15 | }) 16 | .fail(function(e){ 17 | warn(msgMap[e.responseText] || '未知错误'); 18 | }); 19 | 20 | function getQueryStringValue (key) { 21 | return unescape(window.location.search.replace(new RegExp("^(?:.*[&\\?]" + escape(key).replace(/[\.\+\*]/g, "\\$&") + "(?:\\=([^&]*))?)?.*$", "i"), "$1")); 22 | } 23 | } 24 | 25 | function resetPassword(){ 26 | var p = $('#password').val(); 27 | var p1 = $('#password1').val(); 28 | if(p===''){ 29 | warn('密码不能为空'); 30 | return false; 31 | } 32 | if(p !== p1){ 33 | warn('两次输入的密码不一致'); 34 | return false; 35 | } 36 | return true; 37 | } 38 | 39 | function signup(){ 40 | if(!simpleValidate()) return; 41 | 42 | var password = $('[name=password]').val(); 43 | var password1 = $('#password1').val(); 44 | if(password != password1){ 45 | warn('两次输入的密码不一致'); 46 | return; 47 | } 48 | $.post('', $('form').serialize()) 49 | .done(info) 50 | .fail(function(res){ 51 | warn(res.responseText); 52 | }); 53 | } 54 | 55 | function simpleValidate(){ 56 | var username = $('[name=username]').val().trim(); 57 | var password = $('[name=password]').val(); 58 | 59 | if(username.length === 0){ 60 | warn('邮件不能为空'); 61 | return false; 62 | } 63 | if(!validateEmail(username)){ 64 | warn('邮件不合法'); 65 | return false; 66 | } 67 | if(password.length === 0){ 68 | warn('密码不能为空'); 69 | return false; 70 | } 71 | return true; 72 | } 73 | 74 | function warn(msg){ 75 | $('.alert').hide(); 76 | $('.alert-danger').html(msg).show(); 77 | } 78 | 79 | function info(msg){ 80 | $('.alert').hide(); 81 | $('.alert-success').html(msg).show(); 82 | } 83 | 84 | function validateEmail(email) { 85 | var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 86 | return re.test(email); 87 | } -------------------------------------------------------------------------------- /src/javascripts/admin-post.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by harttle on 1/7/15. 3 | */ 4 | 5 | function save(){// validation 6 | if($('#title').val().trim()==='') 7 | return $('.alert-danger').html('标题不能为空').show(); 8 | $('form').submit(); 9 | } 10 | 11 | $(function(){ 12 | if($('body#edit').length === 0) return; 13 | 14 | $('#content').bind('input propertychange', function(){ 15 | $('#preview').html(marked($('#content').val())); 16 | }); 17 | $('#content').trigger('input'); 18 | }); -------------------------------------------------------------------------------- /src/javascripts/common.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by harttle on 1/8/15. 3 | */ 4 | 5 | 6 | marked.setOptions({ 7 | highlight: function (code) { 8 | return hljs.highlightAuto(code).value; 9 | } 10 | }); -------------------------------------------------------------------------------- /src/javascripts/home-post.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by harttle on 1/8/15. 3 | */ 4 | 5 | $(function(){ 6 | if($('body#post').length === 0) return; 7 | 8 | $('.post-content').each(function(i, ele){ 9 | var $ele = $(ele); 10 | $ele.html(marked($ele.find('#content').html())); 11 | }); 12 | }); 13 | 14 | function comment(){ 15 | var content = $('#new-comment').val(); 16 | if(content.trim() === ''){ 17 | return $('.alert').html('评论不能为空').show(); 18 | } 19 | $('#new-comment').val(''); 20 | 21 | $.post('', {content: content}) 22 | .done(function(){ 23 | location.reload(); 24 | }) 25 | .fail(function(data){ 26 | return $('.alert').html('评论失败:'+data).show(); 27 | }); 28 | } -------------------------------------------------------------------------------- /src/javascripts/posts.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by harttle on 1/7/15. 3 | */ 4 | 5 | function delPost(id) { 6 | $.ajax({ 7 | url: '/admin/post/' + id, 8 | type: 'DELETE', 9 | success: function (result) { 10 | location.reload(); 11 | } 12 | }); 13 | } -------------------------------------------------------------------------------- /src/javascripts/runTime.js: -------------------------------------------------------------------------------- 1 | export function runTime() { 2 | let seconds = 1000 3 | let minutes = seconds * 60 4 | let hours = minutes * 60 5 | let days = hours * 24 6 | let years = days * 365 7 | let today = new Date() 8 | let todayYear = today.getFullYear() 9 | let todayMonth = today.getMonth() 10 | let todayDate = today.getDate() 11 | let todayHour = today.getHours() 12 | let todayMinute = today.getMinutes() 13 | let todaySecond = today.getSeconds() 14 | /* Date.UTC() -- 返回date对象距世界标准时间(UTC)1970年1月1日午夜之间的毫秒数(时间戳) 15 | year - 作为date对象的年份,为4位年份值 16 | month - 0-11之间的整数,做为date对象的月份 17 | day - 1-31之间的整数,做为date对象的天数 18 | hours - 0(午夜24点)-23之间的整数,做为date对象的小时数 19 | minutes - 0-59之间的整数,做为date对象的分钟数 20 | seconds - 0-59之间的整数,做为date对象的秒数 21 | microseconds - 0-999之间的整数,做为date对象的毫秒数 */ 22 | let t1 = Date.UTC(2014,0,14,11,19,0) 23 | let t2 = Date.UTC(todayYear,todayMonth,todayDate,todayHour,todayMinute,todaySecond) 24 | let diff = t2-t1 25 | let diffYears = Math.floor(diff/years) 26 | let diffDays = Math.floor((diff/days)-diffYears*365) 27 | let diffHours = Math.floor((diff-(diffYears*365+diffDays)*days)/hours) 28 | let diffMinutes = Math.floor((diff-(diffYears*365+diffDays)*days-diffHours*hours)/minutes) 29 | let diffSeconds = Math.floor((diff-(diffYears*365+diffDays)*days-diffHours*hours-diffMinutes*minutes)/seconds) 30 | time =" "+diffYears+" 年 "+diffDays+" 天 "+diffHours+" 小时 "+diffMinutes+" 分钟 "+diffSeconds+" 秒" 31 | return time 32 | } 33 | -------------------------------------------------------------------------------- /src/javascripts/unique.js: -------------------------------------------------------------------------------- 1 | // 数组去重 2 | // export function unique (array) { 3 | // var n = []; //一个新的临时数组 4 | // //遍历当前数组 5 | // for(var i = 0; i < array.length; i++){ 6 | // //如果当前数组的第i已经保存进了临时数组,那么跳过, 7 | // //否则把当前项push到临时数组里面 8 | // if (n.indexOf(array[i]) == -1) n.push(array[i]); 9 | // } 10 | // return n; 11 | // } 12 | 13 | // 数组中对象去重 14 | export function unique (arr) { 15 | var unique = {}; 16 | arr.forEach(function(a){ unique[ JSON.stringify(a) ] = 1 }); 17 | arr= Object.keys(unique).map(function(u){return JSON.parse(u) }); 18 | return arr 19 | } 20 | -------------------------------------------------------------------------------- /src/javascripts/util.js: -------------------------------------------------------------------------------- 1 | var SIGN_REGEXP = /([yMdhsm])(\1*)/g; 2 | var DEFAULT_PATTERN = 'yyyy-MM-dd'; 3 | function padding(s, len) { 4 | var len = len - (s + '').length; 5 | for (var i = 0; i < len; i++) { s = '0' + s; } 6 | return s; 7 | }; 8 | 9 | export default { 10 | getQueryStringByName: function (name) { 11 | var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); 12 | var r = window.location.search.substr(1).match(reg); 13 | var context = ""; 14 | if (r != null) 15 | context = r[2]; 16 | reg = null; 17 | r = null; 18 | return context == null || context == "" || context == "undefined" ? "" : context; 19 | }, 20 | formatDate: { 21 | 22 | 23 | format: function (date, pattern) { 24 | pattern = pattern || DEFAULT_PATTERN; 25 | return pattern.replace(SIGN_REGEXP, function ($0) { 26 | switch ($0.charAt(0)) { 27 | case 'y': return padding(date.getFullYear(), $0.length); 28 | case 'M': return padding(date.getMonth() + 1, $0.length); 29 | case 'd': return padding(date.getDate(), $0.length); 30 | case 'w': return date.getDay() + 1; 31 | case 'h': return padding(date.getHours(), $0.length); 32 | case 'm': return padding(date.getMinutes(), $0.length); 33 | case 's': return padding(date.getSeconds(), $0.length); 34 | } 35 | }); 36 | }, 37 | parse: function (dateString, pattern) { 38 | var matchs1 = pattern.match(SIGN_REGEXP); 39 | var matchs2 = dateString.match(/(\d)+/g); 40 | if (matchs1.length == matchs2.length) { 41 | var _date = new Date(1970, 0, 1); 42 | for (var i = 0; i < matchs1.length; i++) { 43 | var _int = parseInt(matchs2[i]); 44 | var sign = matchs1[i]; 45 | switch (sign.charAt(0)) { 46 | case 'y': _date.setFullYear(_int); break; 47 | case 'M': _date.setMonth(_int - 1); break; 48 | case 'd': _date.setDate(_int); break; 49 | case 'h': _date.setHours(_int); break; 50 | case 'm': _date.setMinutes(_int); break; 51 | case 's': _date.setSeconds(_int); break; 52 | } 53 | } 54 | return _date; 55 | } 56 | return null; 57 | } 58 | 59 | } 60 | 61 | }; 62 | -------------------------------------------------------------------------------- /src/mock/data/user.js: -------------------------------------------------------------------------------- 1 | import Mock from 'mockjs'; 2 | const LoginUsers = [ 3 | { 4 | id: 1, 5 | username: 'admin', 6 | password: '123456', 7 | avatar: 'https://raw.githubusercontent.com/taylorchen709/markdown-images/master/vueadmin/user.png', 8 | name: '张某某' 9 | } 10 | ]; 11 | 12 | const Users = []; 13 | 14 | for (let i = 0; i < 86; i++) { 15 | Users.push(Mock.mock({ 16 | id: Mock.Random.guid(), 17 | name: Mock.Random.cname(), 18 | addr: Mock.mock('@county(true)'), 19 | 'age|18-60': 1, 20 | birth: Mock.Random.date(), 21 | sex: Mock.Random.integer(0, 1) 22 | })); 23 | } 24 | 25 | export { LoginUsers, Users }; 26 | -------------------------------------------------------------------------------- /src/mock/index.js: -------------------------------------------------------------------------------- 1 | import mock from './mock'; 2 | 3 | export default mock; 4 | -------------------------------------------------------------------------------- /src/router/blog-routes.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | // import Index from '@/views/Index' 4 | // import Blog from '@/views/Blog' 5 | // import About from '@/views/About' 6 | // import Article from '@/views/Article' 7 | // import Messages from '@/views/Messages' 8 | // import admin from '@/admin/admin' 9 | // import adminArticle from '@/admin/adminArticle' 10 | // import change from '@/admin/change' 11 | // import adminArticleList from '@/admin/adminArticleList' 12 | import login from '@/views/blog/login' 13 | 14 | const Blog = resolve => require(['@/views/blog/Blog'], resolve) 15 | const About = resolve => require(['@/views/blog/About'], resolve) 16 | const Article = resolve => require(['@/views/blog/Article'], resolve) 17 | const Messages = resolve => require(['@/views/blog/messages'], resolve) 18 | const Test = resolve => require(['@/views/blog/test'], resolve) 19 | 20 | const admin = resolve => require(['@/views/blog/admin/admin'], resolve) 21 | const adminArticle = resolve => require(['@/views/blog/admin/adminArticle'], resolve) 22 | const adminChange = resolve => require(['@/views/blog/admin/adminChange'], resolve) 23 | const adminArticleList = resolve => require(['@/views/blog/admin/adminArticleList'], resolve) 24 | 25 | Vue.use(Router) 26 | 27 | export default new Router({ 28 | mode: 'history', 29 | base: '/blog', 30 | routes: [ 31 | { 32 | path: '/', 33 | name: 'Blog', 34 | component: Blog 35 | }, 36 | { 37 | path: '/about', 38 | name: 'About', 39 | component: About 40 | }, 41 | { 42 | path: '/test', 43 | name: 'Test', 44 | component: Test 45 | }, 46 | { 47 | path: '/article', 48 | name: 'Article', 49 | component: Article 50 | }, 51 | { 52 | path: '/messages', 53 | name: 'Messages', 54 | component: Messages 55 | }, 56 | { 57 | path: '/admin', 58 | name: 'Admin', 59 | component: admin, 60 | redirect: { name: 'adminArticle'}, 61 | children: [ 62 | { path: '/admin/adminArticle', component: adminArticle, name: 'adminArticle'}, 63 | { path: '/admin/adminChange', component: adminChange, name: 'adminChange'}, 64 | { path: '/admin/adminArticleList', component: adminArticleList, name: 'adminArticleList'}, 65 | ] 66 | }, 67 | { 68 | path: '/login', 69 | name: 'Login', 70 | component: login, 71 | } 72 | ] 73 | }) 74 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | import HelloWorld from '@/components/HelloWorld' 4 | 5 | Vue.use(Router) 6 | 7 | export default new Router({ 8 | routes: [ 9 | { 10 | path: '/', 11 | name: 'HelloWorld', 12 | component: HelloWorld 13 | } 14 | ] 15 | }) 16 | -------------------------------------------------------------------------------- /src/router/qims-routes.js: -------------------------------------------------------------------------------- 1 | import Login from '../views/qims/Login.vue' 2 | 3 | let routes = [ 4 | { 5 | path: '/qims/login', 6 | component: Login, 7 | name: '', 8 | hidden: true 9 | }, 10 | ]; 11 | 12 | export default routes; -------------------------------------------------------------------------------- /src/router/test-router.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | import HelloWorld from '@/components/HelloWorld' 4 | 5 | Vue.use(Router) 6 | 7 | export default new Router({ 8 | routes: [ 9 | { 10 | path: '/', 11 | name: 'HelloWorld', 12 | component: HelloWorld 13 | } 14 | ] 15 | }) 16 | -------------------------------------------------------------------------------- /src/styles/account.css: -------------------------------------------------------------------------------- 1 | 2 | .center-wrapper{ 3 | display: table; 4 | text-align: center; 5 | height: 100%; 6 | width: 100%; 7 | } 8 | 9 | .center{ 10 | display: table-cell; 11 | vertical-align: middle; 12 | } 13 | 14 | body#login, body#register{ 15 | background: #3c3c3c; 16 | } 17 | 18 | #login, #register h3{ 19 | color: #ffffff; 20 | margin-bottom: 30px; 21 | } 22 | 23 | #login form{ 24 | margin-bottom: 0; 25 | } 26 | #login .operation{ 27 | width: 450px; 28 | margin: 0 auto; 29 | text-align: right; 30 | } 31 | #login .alert{ 32 | max-width: 400px; 33 | margin-top: 10px; 34 | display: inline-block; 35 | } 36 | 37 | #register form{ 38 | max-width: 300px; 39 | margin: 0 auto; 40 | } 41 | #register input{ 42 | margin-bottom: 5px; 43 | } 44 | #forgot #username{ 45 | width: 300px; 46 | } 47 | #reset form{ 48 | width: 400px; 49 | } -------------------------------------------------------------------------------- /src/styles/admin.css: -------------------------------------------------------------------------------- 1 | 2 | #profile .container, #edit .container, #posts .container { 3 | margin-bottom: 20px; 4 | } 5 | 6 | #profile img.avatar { 7 | height: 65px; 8 | width: 65px; 9 | margin-right: 15px; 10 | } 11 | 12 | #edit #content { 13 | height: 385px; 14 | resize: vertical; 15 | } 16 | 17 | #edit #preview { 18 | border: solid 1px #ccc; 19 | height: 435px; 20 | overflow: auto; 21 | padding: 15px; 22 | } 23 | 24 | #posts .table { 25 | margin-top: 30px; 26 | } 27 | 28 | #posts .table .title { 29 | 30 | } 31 | 32 | #posts .table .date { 33 | width: 300px; 34 | vertical-align: middle; 35 | } 36 | 37 | #posts .table .operation { 38 | width: 100px; 39 | } -------------------------------------------------------------------------------- /src/styles/blog.css: -------------------------------------------------------------------------------- 1 | .headpic { 2 | height: 280px; 3 | background: url(../assets/images/dahai.jpg) center -52px no-repeat; 4 | -webkit-background-size: cover; 5 | background-size: cover; 6 | position: relative; 7 | } 8 | 9 | .headtitle { 10 | top: 100px; 11 | max-width: 1100px; 12 | margin: 0 auto; 13 | padding: 0 50px; 14 | position: relative; 15 | font-family: 'Geo', sans-serif; 16 | font-size: 34px; 17 | text-shadow: 0 3px 3px #616066; 18 | } 19 | 20 | .title { 21 | float: left; 22 | } 23 | 24 | .title h1 { 25 | color: #fff; 26 | font-weight: 300; 27 | margin: -5px 0 6px 0; 28 | font-size: 78px; 29 | font-weight: bold; 30 | line-height: 1; 31 | letter-spacing: .02em; 32 | } 33 | 34 | .blog .article { 35 | font-family: PingFang TC, Avenir Next, Helvetica, Arial, Hiragino Sans GB, Microsoft YaHei, sans-serif; 36 | font-size: 15px; 37 | color: #444!important; 38 | } 39 | 40 | .content { 41 | position: relative; 42 | } 43 | 44 | .list { 45 | margin-top: 38px; 46 | } 47 | 48 | .list .main { 49 | width: 67%; 50 | float: left; 51 | margin-top: -90px; 52 | -webkit-transition: all .5s ease-out; 53 | transition: all .5s ease-out; 54 | } 55 | 56 | .list .side { 57 | width: 30%; 58 | float: right; 59 | } 60 | 61 | @media (max-width: 1000px) { 62 | .list .main { 63 | width: 100%!important; 64 | } 65 | .list .side { 66 | display: none!important; 67 | } 68 | .headtitle { 69 | text-align: center; 70 | top: 100px; 71 | } 72 | .back-to-top { 73 | right: 20px!important; 74 | } 75 | } 76 | 77 | @media (max-width: 700px) { 78 | .headpic { 79 | height: 300px!important; 80 | } 81 | .headtitle { 82 | text-align: center; 83 | top: 100px; 84 | } 85 | .back-to-top { 86 | display: none; 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /src/styles/container.css: -------------------------------------------------------------------------------- 1 | .container { 2 | max-width: 80%; 3 | margin: 0 auto; 4 | position: relative; 5 | } 6 | .container.full { 7 | max-width: 66%; 8 | } 9 | .container:after { 10 | clear: both; 11 | content: ""; 12 | display: table; 13 | } 14 | 15 | @media (max-width: 800px) { 16 | .container { 17 | max-width: 100%!important; 18 | } 19 | .container.full { 20 | max-width: 100%!important; 21 | } 22 | .back-to-top { 23 | display: none; 24 | } 25 | .main-full { 26 | border-radius: 0px!important; 27 | } 28 | .full-content header { 29 | width: 80%!important; 30 | } 31 | .post-content { 32 | width: 80%!important; 33 | margin: 0 auto; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/styles/global.css: -------------------------------------------------------------------------------- 1 | /* GLOBAL 2 | -------------------------------------------------- */ 3 | body { 4 | color: #5a5a5a; 5 | } 6 | footer{ 7 | background: #000000; 8 | padding: 15px; 9 | } 10 | footer a{ 11 | color: white; 12 | } 13 | 14 | .banner{ 15 | position: relative; 16 | height: 280px; 17 | background-image: url('/images/banner.jpeg'); 18 | background-repeat: no-repeat; 19 | background-size: cover; 20 | background-position: 50% 30%; 21 | text-align: center; 22 | } 23 | 24 | .banner .blog-intro{ 25 | margin-top: 120px; 26 | padding: 15px; 27 | color: white; 28 | } 29 | .banner .blog-intro .avatar{ 30 | width: 50px; 31 | height: 50px; 32 | } 33 | .banner .blog-intro .title{ 34 | font-size: 28px; 35 | } 36 | .banner .blog-intro .description{ 37 | font-size: 18px; 38 | } 39 | 40 | .post .post-title a{ 41 | color: #777; 42 | } 43 | .post .post-title a:hover{ 44 | color: #333; 45 | text-decoration: none; 46 | } 47 | 48 | #home-header .navbar-nav>li>a, #home-header .navbar-brand{ 49 | color: #ccc; 50 | } 51 | #home-header .navbar-nav>li>a:hover{ 52 | color: white; 53 | } 54 | 55 | .comment img{ 56 | height: 45px; 57 | width: 45px; 58 | border-radius: 45px; 59 | margin-right: 10px; 60 | } -------------------------------------------------------------------------------- /src/styles/index.css: -------------------------------------------------------------------------------- 1 | /* NAVBAR 2 | -------------------------------------------------- */ 3 | .navbar-wrapper { 4 | position: absolute; 5 | top: 0; 6 | right: 0; 7 | left: 0; 8 | z-index: 20; 9 | } 10 | .navbar-wrapper > .container { 11 | padding-right: 0; 12 | padding-left: 0; 13 | } 14 | .navbar-wrapper .navbar { 15 | padding-right: 15px; 16 | padding-left: 15px; 17 | } 18 | .navbar-wrapper .navbar .container { 19 | width: auto; 20 | } 21 | 22 | 23 | /* CUSTOMIZE THE CAROUSEL 24 | -------------------------------------------------- */ 25 | .carousel { 26 | height: 500px; 27 | margin-bottom: 60px; 28 | } 29 | .carousel-caption { 30 | z-index: 10; 31 | } 32 | .carousel .item { 33 | height: 500px; 34 | background-color: #777; 35 | } 36 | .carousel-inner > .item > img { 37 | position: absolute; 38 | top: 0; 39 | left: 0; 40 | min-width: 100%; 41 | height: 500px; 42 | filter: blur(20px); 43 | -ms-filter: blur(20px); 44 | -o-filter: blur(20px); 45 | -moz-filter: blur(20px); 46 | -webkit-filter: blur(20px); 47 | } 48 | 49 | 50 | /* MARKETING CONTENT 51 | -------------------------------------------------- */ 52 | .marketing .col-lg-4 { 53 | margin-bottom: 20px; 54 | text-align: center; 55 | } 56 | .marketing h2 { 57 | font-weight: normal; 58 | } 59 | .marketing .col-lg-4 p { 60 | margin-right: 10px; 61 | margin-left: 10px; 62 | } 63 | 64 | /* RESPONSIVE CSS 65 | -------------------------------------------------- */ 66 | 67 | @media (min-width: 768px) { 68 | .navbar-wrapper { 69 | margin-top: 20px; 70 | } 71 | .navbar-wrapper .container { 72 | padding-right: 15px; 73 | padding-left: 15px; 74 | } 75 | .navbar-wrapper .navbar { 76 | padding-right: 0; 77 | padding-left: 0; 78 | } 79 | .navbar-wrapper .navbar { 80 | border-radius: 4px; 81 | } 82 | .carousel-caption p { 83 | margin-bottom: 20px; 84 | font-size: 18px; 85 | line-height: 1.4; 86 | } 87 | } -------------------------------------------------------------------------------- /src/styles/side.css: -------------------------------------------------------------------------------- 1 | .secondary .section { 2 | margin: 0 0 10px 0; 3 | /*padding: 0 0 25px 0;*/ 4 | /*border-bottom: 1px solid #ddd;*/ 5 | position: relative; 6 | padding: 15px; 7 | } 8 | 9 | 10 | /*.widget { 11 | margin-left: 10px; 12 | margin-right: 10px; 13 | -webkit-transition: all .2s linear; 14 | transition: all .2s linear; 15 | } 16 | .widget:hover { 17 | z-index: 2; 18 | -webkit-box-shadow: 0px 10px 30px rgba(0,0,0,0.1); 19 | box-shadow: 0px 10px 30px rgba(0,0,0,0.1); 20 | -webkit-transform: translate3d(0px,-5px,0); 21 | transform: translate3d(0px,-5px,0); 22 | }*/ 23 | -------------------------------------------------------------------------------- /src/views/404.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | -------------------------------------------------------------------------------- /src/views/blog/app.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 25 | -------------------------------------------------------------------------------- /src/views/blog/components/About.vue: -------------------------------------------------------------------------------- 1 | 29 | 30 | 40 | 41 | 51 | -------------------------------------------------------------------------------- /src/views/blog/components/Footer.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 20 | 21 | 32 | -------------------------------------------------------------------------------- /src/views/blog/components/Header.vue: -------------------------------------------------------------------------------- 1 | 24 | 25 | 71 | -------------------------------------------------------------------------------- /src/views/blog/components/articleList.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 97 | 98 | 109 | -------------------------------------------------------------------------------- /src/views/blog/components/runTime.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 82 | -------------------------------------------------------------------------------- /src/views/blog/components/sideSection.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /src/views/blog/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import App from './app.vue' 3 | 4 | import ElementUI from 'element-ui' 5 | import 'element-ui/lib/theme-chalk/index.css' 6 | import 'font-awesome/css/font-awesome.min.css' 7 | import store from '@/vuex/store' 8 | import Vuex from 'vuex' 9 | import router from './router' 10 | 11 | import mavonEditor from 'mavon-editor' 12 | import 'mavon-editor/dist/css/index.css' 13 | 14 | import '@/styles/container.css' 15 | import '@/styles/header.css' 16 | import '@/styles/article.css' 17 | import '@/styles/side.css' 18 | import '@/styles/blog.css' 19 | 20 | 21 | Vue.use(ElementUI) 22 | Vue.use(mavonEditor) 23 | //Vue.use(Vuex) 24 | 25 | 26 | 27 | 28 | 29 | 30 | Vue.prototype.setCookie = (c_name, value, expiredays) => { 31 | var exdate = new Date(); 32 | exdate.setDate(exdate.getDate() + expiredays); 33 | document.cookie = c_name + "=" + escape(value) + ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString()); 34 | } 35 | 36 | Vue.prototype.setCookie = (c_name, value, expiredays) => { 37 | var exdate = new Date(); 38 | exdate.setDate(exdate.getDate() + expiredays); 39 | document.cookie = c_name + "=" + escape(value) + ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString()); 40 | } 41 | function getCookie(name) { 42 | var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)"); 43 | if (arr = document.cookie.match(reg)) 44 | return (arr[2]); 45 | else 46 | return null; 47 | } 48 | Vue.prototype.getCookie = getCookie; 49 | Vue.prototype.delCookie =(name) => { 50 | var exp = new Date(); 51 | exp.setTime(exp.getTime() - 1); 52 | var cval = getCookie(name); 53 | if (cval != null) 54 | document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString(); 55 | } 56 | 57 | Vue.config.productionTip = false 58 | 59 | new Vue({ 60 | router, 61 | store, 62 | render: h => h(App) 63 | }).$mount('#app') 64 | -------------------------------------------------------------------------------- /src/views/blog/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | 4 | 5 | const Blog = resolve => require(['../components/Blog'], resolve) 6 | const About = resolve => require(['../components/About'], resolve) 7 | const Article = resolve => require(['../components/Article'], resolve) 8 | const Messages = resolve => require(['../components/messages'], resolve) 9 | const Test = resolve => require(['../components/test'], resolve) 10 | 11 | Vue.use(Router) 12 | 13 | export default new Router({ 14 | mode: 'history', 15 | base: '/blog', 16 | routes: [ 17 | { 18 | path: '/', 19 | name: 'Blog', 20 | component: Blog 21 | }, 22 | { 23 | path: '/about', 24 | name: 'About', 25 | component: About 26 | }, 27 | { 28 | path: '/test', 29 | name: 'Test', 30 | component: Test 31 | }, 32 | { 33 | path: '/article', 34 | name: 'Article', 35 | component: Article 36 | }, 37 | { 38 | path: '/messages', 39 | name: 'Messages', 40 | component: Messages 41 | } 42 | ] 43 | }) 44 | -------------------------------------------------------------------------------- /src/views/blogadmin/app.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 25 | -------------------------------------------------------------------------------- /src/views/blogadmin/components/admin.vue: -------------------------------------------------------------------------------- 1 | 36 | 37 | 66 | 67 | 80 | -------------------------------------------------------------------------------- /src/views/blogadmin/components/loading.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 20 | 21 | 96 | -------------------------------------------------------------------------------- /src/views/blogadmin/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import App from './app.vue' 3 | 4 | import ElementUI from 'element-ui' 5 | import 'element-ui/lib/theme-chalk/index.css' 6 | import 'font-awesome/css/font-awesome.min.css' 7 | import store from '@/vuex/store' 8 | import Vuex from 'vuex' 9 | import router from './router' 10 | 11 | import mavonEditor from 'mavon-editor' 12 | import 'mavon-editor/dist/css/index.css' 13 | 14 | import '@/styles/container.css' 15 | import '@/styles/header.css' 16 | import '@/styles/article.css' 17 | import '@/styles/side.css' 18 | import '@/styles/blog.css' 19 | 20 | 21 | Vue.use(ElementUI) 22 | Vue.use(mavonEditor) 23 | //Vue.use(Vuex) 24 | 25 | 26 | 27 | 28 | 29 | 30 | Vue.prototype.setCookie = (c_name, value, expiredays) => { 31 | var exdate = new Date(); 32 | exdate.setDate(exdate.getDate() + expiredays); 33 | document.cookie = c_name + "=" + escape(value) + ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString()); 34 | } 35 | 36 | Vue.prototype.setCookie = (c_name, value, expiredays) => { 37 | var exdate = new Date(); 38 | exdate.setDate(exdate.getDate() + expiredays); 39 | document.cookie = c_name + "=" + escape(value) + ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString()); 40 | } 41 | function getCookie(name) { 42 | var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)"); 43 | if (arr = document.cookie.match(reg)) 44 | return (arr[2]); 45 | else 46 | return null; 47 | } 48 | Vue.prototype.getCookie = getCookie; 49 | Vue.prototype.delCookie =(name) => { 50 | var exp = new Date(); 51 | exp.setTime(exp.getTime() - 1); 52 | var cval = getCookie(name); 53 | if (cval != null) 54 | document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString(); 55 | } 56 | 57 | Vue.config.productionTip = false 58 | 59 | 60 | 61 | 62 | new Vue({ 63 | router, 64 | store, 65 | render: h => h(App) 66 | }).$mount('#app') 67 | -------------------------------------------------------------------------------- /src/views/blogadmin/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | 4 | 5 | 6 | 7 | const login = resolve => require(['../components/login'], resolve) 8 | const admin = resolve => require(['../components/admin'], resolve) 9 | const adminArticle = resolve => require(['../components/adminArticle'], resolve) 10 | const adminChange = resolve => require(['../components/adminChange'], resolve) 11 | const adminArticleList = resolve => require(['../components/adminArticleList'], resolve) 12 | 13 | Vue.use(Router) 14 | 15 | export default new Router({ 16 | mode: 'history', 17 | base: '/blogadmin', 18 | routes: [ 19 | { 20 | path: '/', 21 | name: 'Admin', 22 | component: admin, 23 | redirect: { name: 'adminArticle'}, 24 | children: [ 25 | { path: '/admin/adminArticle', component: adminArticle, name: 'adminArticle'}, 26 | { path: '/admin/adminChange', component: adminChange, name: 'adminChange'}, 27 | { path: '/admin/adminArticleList', component: adminArticleList, name: 'adminArticleList'}, 28 | ] 29 | }, 30 | { 31 | path: '/login', 32 | name: 'Login', 33 | component: login, 34 | } 35 | ] 36 | }) 37 | -------------------------------------------------------------------------------- /src/views/demo/app.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 18 | 19 | -------------------------------------------------------------------------------- /src/views/demo/components/404.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | -------------------------------------------------------------------------------- /src/views/demo/components/nav1/Form.vue: -------------------------------------------------------------------------------- 1 | 47 | 48 | -------------------------------------------------------------------------------- /src/views/demo/components/nav1/Main.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 16 | 17 | -------------------------------------------------------------------------------- /src/views/demo/components/nav1/user.vue: -------------------------------------------------------------------------------- 1 | 35 | 76 | 77 | 80 | -------------------------------------------------------------------------------- /src/views/demo/components/nav2/Page4.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | -------------------------------------------------------------------------------- /src/views/demo/components/nav2/Page5.vue: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/views/demo/components/nav3/Page6.vue: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/views/demo/components/sys/AccessMon.vue: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/views/demo/components/sys/Bridge.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | -------------------------------------------------------------------------------- /src/views/demo/components/sys/DataMon.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | -------------------------------------------------------------------------------- /src/views/demo/components/sys/Log.vue: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/views/demo/components/sys/Menu.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /src/views/demo/components/sys/Permission.vue: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/views/demo/components/sys/User.vue: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/views/demo/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import App from './app' 3 | 4 | import ElementUI from 'element-ui' 5 | import 'element-ui/lib/theme-chalk/index.css' 6 | import VueRouter from 'vue-router' 7 | import store from '@/vuex/store' 8 | import Vuex from 'vuex' 9 | import router from './router' 10 | import 'font-awesome/css/font-awesome.min.css' 11 | import Mock from '@/mock' 12 | 13 | 14 | Vue.use(ElementUI) 15 | Vue.use(Vuex) 16 | //NProgress.configure({ showSpinner: false }); 17 | 18 | 19 | 20 | 21 | Mock.bootstrap(); 22 | router.beforeEach((to, from, next) => { 23 | console.log( "GOTO =>"+to.path) 24 | //该内容每次跳转链接时才会执行 25 | //NProgress.start(); 26 | //先清除已登录信息 27 | 28 | if (to.path == '/login') { 29 | sessionStorage.removeItem('user'); 30 | } 31 | let user = JSON.parse(sessionStorage.getItem('user')); 32 | //无登录信息则跳转到登录 33 | 34 | if (!user && to.path != '/login') { 35 | sessionStorage.setItem('last',to.path) 36 | console.log("save:"+to.path) 37 | next({ path: '/login' }) 38 | } else { 39 | next() 40 | } 41 | }) 42 | 43 | //router.afterEach(transition => { 44 | //NProgress.done(); 45 | //}); 46 | 47 | new Vue({ 48 | router, 49 | store, 50 | render: h => h(App) 51 | }).$mount('#app') 52 | 53 | 54 | -------------------------------------------------------------------------------- /src/views/error.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 404 7 | 8 | 9 |

{{status}} {{message}}

10 |

{{stack}}

11 | 12 | 13 | -------------------------------------------------------------------------------- /src/views/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | <%= htmlWebpackPlugin.options.title %> 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 | 14 | 15 | -------------------------------------------------------------------------------- /src/views/test/App.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 13 | 14 | 24 | -------------------------------------------------------------------------------- /src/views/test/components/HelloWorld.vue: -------------------------------------------------------------------------------- 1 | 85 | 86 | 96 | 97 | 98 | 114 | -------------------------------------------------------------------------------- /src/views/test/main.js: -------------------------------------------------------------------------------- 1 | // The Vue build version to load with the `import` command 2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias. 3 | import Vue from 'vue' 4 | import App from './App' 5 | import router from './router' 6 | 7 | Vue.config.productionTip = false 8 | 9 | /* eslint-disable no-new */ 10 | new Vue({ 11 | el: '#app', 12 | router, 13 | components: { App }, 14 | template: '' 15 | }) 16 | -------------------------------------------------------------------------------- /src/views/test/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | import HelloWorld from '../components/HelloWorld' 4 | 5 | Vue.use(Router) 6 | 7 | export default new Router({ 8 | mode: 'history', 9 | base: '/test/', 10 | routes: [ 11 | { 12 | path: '/', 13 | name: 'HelloWorld', 14 | component: HelloWorld 15 | } 16 | ] 17 | }) 18 | -------------------------------------------------------------------------------- /src/vuex/actions.js: -------------------------------------------------------------------------------- 1 | //test 2 | export const increment = ({commit}) => { 3 | commit('INCREMENT') 4 | } 5 | export const decrement = ({commit}) => { 6 | commit('DECREMENT') 7 | } 8 | -------------------------------------------------------------------------------- /src/vuex/getters.js: -------------------------------------------------------------------------------- 1 | //test 2 | export const getCount = state => { 3 | return state.count 4 | } 5 | -------------------------------------------------------------------------------- /src/vuex/store.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | import * as actions from './actions' 4 | import * as getters from './getters' 5 | 6 | Vue.use(Vuex) 7 | 8 | // 应用初始状态 9 | const state = { 10 | count: 10 11 | } 12 | 13 | // 定义所需的 mutations 14 | const mutations = { 15 | INCREMENT(state) { 16 | state.count++ 17 | }, 18 | DECREMENT(state) { 19 | state.count-- 20 | } 21 | } 22 | 23 | // 创建 store 实例 24 | export default new Vuex.Store({ 25 | actions, 26 | getters, 27 | state, 28 | mutations 29 | }) -------------------------------------------------------------------------------- /static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/csuduan/vue-mpa/0be0c2c9c4f54846b1d4f6c460a5ee7a65cc0c2b/static/.gitkeep --------------------------------------------------------------------------------