diff --git a/.babelrc b/.babelrc deleted file mode 100644 index 26c173e..0000000 --- a/.babelrc +++ /dev/null @@ -1,17 +0,0 @@ -{ - "presets": [ - ["env", { - "modules": false, - "targets": { - "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] - } - }], - "stage-2" - ], - "plugins":["transform-vue-jsx", "transform-runtime"], - "env": { - "development":{ - "plugins": ["dynamic-import-node"] - } - } -} diff --git a/.editorconfig b/.editorconfig index ea6e20f..3454886 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,4 +1,4 @@ -# http://editorconfig.org +# https://editorconfig.org root = true [*] diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..d9a2132 --- /dev/null +++ b/.env.development @@ -0,0 +1,8 @@ +ENV = 'development' + +# 接口地址 +VUE_APP_BASE_API = 'http://localhost:8000' +VUE_APP_WS_API = 'ws://localhost:8000' + +# 是否启用 babel-plugin-dynamic-import-node插件 +VUE_CLI_BABEL_TRANSPILE_MODULES = true diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..c841017 --- /dev/null +++ b/.env.production @@ -0,0 +1,5 @@ +ENV = 'production' + +# 接口地址 +VUE_APP_BASE_API = 'https://api.auauz.net' +VUE_APP_WS_API = 'ws://api.auauz.net' diff --git a/.eslintignore b/.eslintignore index e3a4037..e6529fc 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,3 +1,4 @@ build/*.js -config/*.js src/assets +public +dist diff --git a/.eslintrc.js b/.eslintrc.js index 0e5c28a..c977505 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -21,7 +21,10 @@ module.exports = { "allowFirstLine": false } }], + "vue/singleline-html-element-content-newline": "off", + "vue/multiline-html-element-content-newline":"off", "vue/name-property-casing": ["error", "PascalCase"], + "vue/no-v-html": "off", 'accessor-pairs': 2, 'arrow-spacing': [2, { 'before': true, @@ -44,7 +47,7 @@ module.exports = { 'curly': [2, 'multi-line'], 'dot-location': [2, 'property'], 'eol-last': 2, - 'eqeqeq': [2, 'allow-null'], + 'eqeqeq': ["error", "always", {"null": "ignore"}], 'generator-star-spacing': [2, { 'before': true, 'after': true @@ -73,7 +76,7 @@ module.exports = { 'no-class-assign': 2, 'no-cond-assign': 2, 'no-const-assign': 2, - 'no-control-regex': 2, + 'no-control-regex': 0, 'no-delete-var': 2, 'no-dupe-args': 2, 'no-dupe-class-members': 2, @@ -193,4 +196,3 @@ module.exports = { 'array-bracket-spacing': [2, 'never'] } } - diff --git a/.gitignore b/.gitignore index 571f0a6..78a752d 100644 --- a/.gitignore +++ b/.gitignore @@ -4,8 +4,11 @@ dist/ npm-debug.log* yarn-debug.log* yarn-error.log* -package-lock.json -yarn.lock +**/*.log + +tests/**/coverage/ +tests/e2e/reports +selenium-debug.log # Editor directories and files .idea @@ -14,3 +17,7 @@ yarn.lock *.ntvs* *.njsproj *.sln +*.local + +package-lock.json +yarn.lock diff --git a/.postcssrc.js b/.postcssrc.js deleted file mode 100644 index eee3e92..0000000 --- a/.postcssrc.js +++ /dev/null @@ -1,10 +0,0 @@ -// https://github.com/michael-ciniawsky/postcss-load-config - -module.exports = { - "plugins": { - "postcss-import": {}, - "postcss-url": {}, - // to edit target browsers: use "browserslist" field in package.json - "autoprefixer": {} - } -} diff --git a/.travis.yml b/.travis.yml index 16574d9..f4be7a0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ language: node_js -node_js: stable +node_js: 10 script: npm run test notifications: email: false diff --git a/LICENSE b/LICENSE index 91e3c25..78a36cb 100644 --- a/LICENSE +++ b/LICENSE @@ -176,7 +176,7 @@ recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018 Elune + Copyright 2019 Zheng Jie Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -188,4 +188,4 @@ third-party archives. distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file + limitations under the License. diff --git a/README.md b/README.md index a746da3..8224bbb 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# eladmin-qt +# ELADMIN-WEB -eladmin 前端源码 +ELADMIN 前端源码 #### 项目源码 @@ -14,7 +14,7 @@ eladmin 前端源码 #### 前端模板 -初始模板基于: [https://github.com/PanJiaChen/vue-admin-template](https://github.com/PanJiaChen/vue-admin-template) +初始模板基于: [https://github.com/PanJiaChen/vue-element-admin](https://github.com/PanJiaChen/vue-element-admin) 模板文档: [https://panjiachen.github.io/vue-element-admin-site/zh/guide/](https://panjiachen.github.io/vue-element-admin-site/zh/guide/) diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..804632a --- /dev/null +++ b/babel.config.js @@ -0,0 +1,11 @@ +const plugins = ['@vue/babel-plugin-transform-vue-jsx'] +// 生产环境移除console +if (process.env.NODE_ENV === 'production') { + plugins.push('transform-remove-console') +} +module.exports = { + plugins: plugins, + presets: [ + '@vue/app' + ] +} diff --git a/build/build.js b/build/build.js deleted file mode 100644 index 34c71a5..0000000 --- a/build/build.js +++ /dev/null @@ -1,67 +0,0 @@ -'use strict' -require('./check-versions')() - -const ora = require('ora') -const rm = require('rimraf') -const path = require('path') -const chalk = require('chalk') -const webpack = require('webpack') -const config = require('../config') -const webpackConfig = require('./webpack.prod.conf') -var connect = require('connect') -var serveStatic = require('serve-static') - -const spinner = ora( - 'building for ' + process.env.env_config + ' environment...' -) -spinner.start() - -rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { - if (err) throw err - webpack(webpackConfig, (err, stats) => { - spinner.stop() - if (err) throw err - process.stdout.write( - stats.toString({ - colors: true, - modules: false, - children: false, - chunks: false, - chunkModules: false - }) + '\n\n' - ) - - if (stats.hasErrors()) { - console.log(chalk.red(' Build failed with errors.\n')) - process.exit(1) - } - - console.log(chalk.cyan(' Build complete.\n')) - console.log( - chalk.yellow( - ' Tip: built files are meant to be served over an HTTP server.\n' + - " Opening index.html over file:// won't work.\n" - ) - ) - - if (process.env.npm_config_preview) { - const port = 9526 - const host = 'http://localhost:' + port - const basePath = config.build.assetsPublicPath - const app = connect() - - app.use( - basePath, - serveStatic('./dist', { - index: ['index.html', '/'] - }) - ) - - app.listen(port, function() { - console.log( - chalk.green(`> Listening at http://localhost:${port}${basePath}`) - ) - }) - } - }) -}) diff --git a/build/check-versions.js b/build/check-versions.js deleted file mode 100644 index c29c7e7..0000000 --- a/build/check-versions.js +++ /dev/null @@ -1,62 +0,0 @@ -'use strict' -const chalk = require('chalk') -const semver = require('semver') -const packageConfig = require('../package.json') -const shell = require('shelljs') - -function exec(cmd) { - return require('child_process') - .execSync(cmd) - .toString() - .trim() -} - -const versionRequirements = [ - { - name: 'node', - currentVersion: semver.clean(process.version), - versionRequirement: packageConfig.engines.node - } -] - -if (shell.which('npm')) { - versionRequirements.push({ - name: 'npm', - currentVersion: exec('npm --version'), - versionRequirement: packageConfig.engines.npm - }) -} - -module.exports = function() { - const warnings = [] - - for (let i = 0; i < versionRequirements.length; i++) { - const mod = versionRequirements[i] - - if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { - warnings.push( - mod.name + - ': ' + - chalk.red(mod.currentVersion) + - ' should be ' + - chalk.green(mod.versionRequirement) - ) - } - } - - if (warnings.length) { - console.log('') - console.log( - chalk.yellow( - 'To use this template, you must update following to modules:' - ) - ) - - for (let i = 0; i < warnings.length; i++) { - const warning = warnings[i] - console.log(' ' + warning) - } - - process.exit(1) - } -} diff --git a/build/utils.js b/build/utils.js deleted file mode 100644 index c96d093..0000000 --- a/build/utils.js +++ /dev/null @@ -1,108 +0,0 @@ -'use strict' -const path = require('path') -const config = require('../config') -const MiniCssExtractPlugin = require('mini-css-extract-plugin') -const packageConfig = require('../package.json') - -exports.assetsPath = function(_path) { - const assetsSubDirectory = - process.env.NODE_ENV === 'production' - ? config.build.assetsSubDirectory - : config.dev.assetsSubDirectory - - return path.posix.join(assetsSubDirectory, _path) -} - -exports.cssLoaders = function(options) { - options = options || {} - - const cssLoader = { - loader: 'css-loader', - options: { - sourceMap: options.sourceMap - } - } - - const postcssLoader = { - loader: 'postcss-loader', - options: { - sourceMap: options.sourceMap - } - } - - // generate loader string to be used with extract text plugin - function generateLoaders(loader, loaderOptions) { - const loaders = [] - - // Extract CSS when that option is specified - // (which is the case during production build) - if (options.extract) { - loaders.push(MiniCssExtractPlugin.loader) - } else { - loaders.push('vue-style-loader') - } - - loaders.push(cssLoader) - - if (options.usePostCSS) { - loaders.push(postcssLoader) - } - - if (loader) { - loaders.push({ - loader: loader + '-loader', - options: Object.assign({}, loaderOptions, { - sourceMap: options.sourceMap - }) - }) - } - - return loaders - } - // https://vue-loader.vuejs.org/en/configurations/extract-css.html - return { - css: generateLoaders(), - postcss: generateLoaders(), - less: generateLoaders('less'), - sass: generateLoaders('sass', { - indentedSyntax: true - }), - scss: generateLoaders('sass'), - stylus: generateLoaders('stylus'), - styl: generateLoaders('stylus') - } -} - -// Generate loaders for standalone style files (outside of .vue) -exports.styleLoaders = function(options) { - const output = [] - const loaders = exports.cssLoaders(options) - - for (const extension in loaders) { - const loader = loaders[extension] - output.push({ - test: new RegExp('\\.' + extension + '$'), - use: loader - }) - } - - return output -} - -exports.createNotifierCallback = () => { - const notifier = require('node-notifier') - - return (severity, errors) => { - if (severity !== 'error') return - - const error = errors[0] - const filename = error.file && error.file.split('!').pop() - - notifier.notify({ - title: packageConfig.name, - message: severity + ': ' + error.name, - subtitle: filename || '', - icon: path.join(__dirname, 'logo.png') - }) - } -} diff --git a/build/vue-loader.conf.js b/build/vue-loader.conf.js deleted file mode 100644 index 5496c93..0000000 --- a/build/vue-loader.conf.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict' - -module.exports = { - //You can set the vue-loader configuration by yourself. -} diff --git a/build/webpack.base.conf.js b/build/webpack.base.conf.js deleted file mode 100644 index 7e8c4fc..0000000 --- a/build/webpack.base.conf.js +++ /dev/null @@ -1,122 +0,0 @@ -'use strict' -const path = require('path') -const utils = require('./utils') -const config = require('../config') -const { VueLoaderPlugin } = require('vue-loader') - -const os = require('os'); -const HappyPack = require('happypack'); -const happThreadPool = HappyPack.ThreadPool({size: os.cpus().length}); - -function resolve(dir) { - return path.join(__dirname, '..', dir) -} - -const createLintingRule = () => ({ - test: /\.(js|vue)$/, - loader: 'eslint-loader', - enforce: 'pre', - include: [resolve('src'), resolve('test')], - options: { - formatter: require('eslint-friendly-formatter'), - emitWarning: !config.dev.showEslintErrorsInOverlay - } -}) - -module.exports = { - cache: true, - context: path.resolve(__dirname, '../'), - entry:["babel-polyfill","./src/main.js"], - output: { - path: config.build.assetsRoot, - filename: '[name].js', - publicPath: - process.env.NODE_ENV === 'production' - ? config.build.assetsPublicPath - : config.dev.assetsPublicPath - }, - resolve: { - modules: [path.resolve(__dirname, '../node_modules')], - extensions: ['.js', '.vue', '.json'], - alias: { - '@': resolve('src'), - api: path.resolve(__dirname, '../src/api') - } - }, - module: { - rules: [ - ...(config.dev.useEslint ? [createLintingRule()] : []), - { - test: /\.vue$/, - loader: 'vue-loader', - options: { - loaders: { - js: 'happypack/loader?id=js' // 将loader换成happypack - } - } - }, - { - test: /\.js$/, - loader: ['happypack/loader?id=js'], // 将loader换成happypack - include: [ - resolve('src') - ], // src是项目开发的目录 - exclude: [path.resolve('../node_modules')] // 不需要编译node_modules下的js - }, - { - test: /\.svg$/, - loader: 'svg-sprite-loader', - include: [resolve('src/icons')], - options: { - symbolId: 'icon-[name]' - } - }, - { - test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, - loader: 'url-loader', - exclude: [resolve('src/icons')], - options: { - limit: 10000, - name: utils.assetsPath('img/[name].[hash:7].[ext]') - } - }, - { - test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, - loader: 'url-loader', - options: { - limit: 10000, - name: utils.assetsPath('media/[name].[hash:7].[ext]') - } - }, - { - test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, - loader: 'url-loader', - options: { - limit: 10000, - name: utils.assetsPath('fonts/[name].[hash:7].[ext]') - } - } - ] - }, - plugins: [ - new VueLoaderPlugin(), - new HappyPack({ - id: 'js', - cache: true, - loaders: ['babel-loader?cacheDirectory=true'], - threadPool: happThreadPool - }) - ], - node: { - // prevent webpack from injecting useless setImmediate polyfill because Vue - // source contains it (although only uses it if it's native). - setImmediate: false, - // prevent webpack from injecting mocks to Node native modules - // that does not make sense for the client - dgram: 'empty', - fs: 'empty', - net: 'empty', - tls: 'empty', - child_process: 'empty' - } -} diff --git a/build/webpack.dev.conf.js b/build/webpack.dev.conf.js deleted file mode 100644 index 26a5584..0000000 --- a/build/webpack.dev.conf.js +++ /dev/null @@ -1,98 +0,0 @@ -'use strict' -const path = require('path') -const utils = require('./utils') -const webpack = require('webpack') -const config = require('../config') -const merge = require('webpack-merge') -const baseWebpackConfig = require('./webpack.base.conf') -const HtmlWebpackPlugin = require('html-webpack-plugin') -const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') -const portfinder = require('portfinder') - -function resolve(dir) { - return path.join(__dirname, '..', dir) -} - -const HOST = process.env.HOST -const PORT = process.env.PORT && Number(process.env.PORT) - -const devWebpackConfig = merge(baseWebpackConfig, { - mode: 'development', - module: { - rules: utils.styleLoaders({ - sourceMap: config.dev.cssSourceMap, - usePostCSS: true - }) - }, - // cheap-module-eval-source-map is faster for development - devtool: config.dev.devtool, - - // these devServer options should be customized in /config/index.js - devServer: { - clientLogLevel: 'warning', - historyApiFallback: true, - hot: true, - compress: true, - host: HOST || config.dev.host, - port: PORT || config.dev.port, - open: config.dev.autoOpenBrowser, - overlay: config.dev.errorOverlay - ? { warnings: false, errors: true } - : false, - publicPath: config.dev.assetsPublicPath, - proxy: config.dev.proxyTable, - quiet: true, // necessary for FriendlyErrorsPlugin - watchOptions: { - poll: config.dev.poll - } - }, - plugins: [ - new webpack.DefinePlugin({ - 'process.env': require('../config/dev.env') - }), - new webpack.HotModuleReplacementPlugin(), - // https://github.com/ampedandwired/html-webpack-plugin - new HtmlWebpackPlugin({ - filename: 'index.html', - template: 'index.html', - inject: true, - favicon: resolve('favicon.ico'), - title: 'vue-element-admin', - templateParameters: { - BASE_URL: config.dev.assetsPublicPath + config.dev.assetsSubDirectory, - }, - }), - ] -}) - -module.exports = new Promise((resolve, reject) => { - portfinder.basePort = process.env.PORT || config.dev.port - portfinder.getPort((err, port) => { - if (err) { - reject(err) - } else { - // publish the new Port, necessary for e2e tests - process.env.PORT = port - // add port to devServer config - devWebpackConfig.devServer.port = port - - // Add FriendlyErrorsPlugin - devWebpackConfig.plugins.push( - new FriendlyErrorsPlugin({ - compilationSuccessInfo: { - messages: [ - `Your application is running here: http://${ - devWebpackConfig.devServer.host - }:${port}` - ] - }, - onErrors: config.dev.notifyOnErrors - ? utils.createNotifierCallback() - : undefined - }) - ) - - resolve(devWebpackConfig) - } - }) -}) diff --git a/build/webpack.prod.conf.js b/build/webpack.prod.conf.js deleted file mode 100644 index 946a134..0000000 --- a/build/webpack.prod.conf.js +++ /dev/null @@ -1,188 +0,0 @@ -'use strict' -const path = require('path') -const utils = require('./utils') -const webpack = require('webpack') -const config = require('../config') -const merge = require('webpack-merge') -const baseWebpackConfig = require('./webpack.base.conf') -const CopyWebpackPlugin = require('copy-webpack-plugin') -const HtmlWebpackPlugin = require('html-webpack-plugin') -const ScriptExtHtmlWebpackPlugin = require('script-ext-html-webpack-plugin') -const MiniCssExtractPlugin = require('mini-css-extract-plugin') -const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin') -const UglifyJsPlugin = require('uglifyjs-webpack-plugin') - -function resolve(dir) { - return path.join(__dirname, '..', dir) -} - -const env = require('../config/' + process.env.env_config + '.env') - -// For NamedChunksPlugin -const seen = new Set() -const nameLength = 4 - -const webpackConfig = merge(baseWebpackConfig, { - mode: 'production', - module: { - rules: utils.styleLoaders({ - sourceMap: config.build.productionSourceMap, - extract: true, - usePostCSS: true - }) - }, - devtool: config.build.productionSourceMap ? config.build.devtool : false, - output: { - path: config.build.assetsRoot, - filename: utils.assetsPath('js/[name].[chunkhash:8].js'), - chunkFilename: utils.assetsPath('js/[name].[chunkhash:8].js') - }, - plugins: [ - // http://vuejs.github.io/vue-loader/en/workflow/production.html - new webpack.DefinePlugin({ - 'process.env': env - }), - // extract css into its own file - new MiniCssExtractPlugin({ - filename: utils.assetsPath('css/[name].[contenthash:8].css'), - chunkFilename: utils.assetsPath('css/[name].[contenthash:8].css') - }), - // generate dist index.html with correct asset hash for caching. - // you can customize output by editing /index.html - // see https://github.com/ampedandwired/html-webpack-plugin - new HtmlWebpackPlugin({ - filename: config.build.index, - template: 'index.html', - inject: true, - favicon: resolve('favicon.ico'), - title: 'vue-element-admin', - templateParameters: { - BASE_URL: config.build.assetsPublicPath + config.build.assetsSubDirectory, - }, - minify: { - removeComments: true, - collapseWhitespace: true, - removeAttributeQuotes: true - // more options: - // https://github.com/kangax/html-minifier#options-quick-reference - } - // default sort mode uses toposort which cannot handle cyclic deps - // in certain cases, and in webpack 4, chunk order in HTML doesn't - // matter anyway - }), - new ScriptExtHtmlWebpackPlugin({ - //`runtime` must same as runtimeChunk name. default is `runtime` - inline: /runtime\..*\.js$/ - }), - // keep chunk.id stable when chunk has no name - new webpack.NamedChunksPlugin(chunk => { - if (chunk.name) { - return chunk.name - } - const modules = Array.from(chunk.modulesIterable) - if (modules.length > 1) { - const hash = require('hash-sum') - const joinedHash = hash(modules.map(m => m.id).join('_')) - let len = nameLength - while (seen.has(joinedHash.substr(0, len))) len++ - seen.add(joinedHash.substr(0, len)) - return `chunk-${joinedHash.substr(0, len)}` - } else { - return modules[0].id - } - }), - // keep module.id stable when vender modules does not change - new webpack.HashedModuleIdsPlugin(), - // copy custom static assets - new CopyWebpackPlugin([ - { - from: path.resolve(__dirname, '../static'), - to: config.build.assetsSubDirectory, - ignore: ['.*'] - } - ]) - ], - optimization: { - splitChunks: { - chunks: 'all', - cacheGroups: { - libs: { - name: 'chunk-libs', - test: /[\\/]node_modules[\\/]/, - priority: 10, - chunks: 'initial' // 只打包初始时依赖的第三方 - }, - elementUI: { - name: 'chunk-elementUI', // 单独将 elementUI 拆包 - priority: 20, // 权重要大于 libs 和 app 不然会被打包进 libs 或者 app - test: /[\\/]node_modules[\\/]element-ui[\\/]/ - }, - commons: { - name: 'chunk-commons', - test: resolve('src/components'), // 可自定义拓展你的规则 - minChunks: 3, // 最小公用次数 - priority: 5, - reuseExistingChunk: true - } - } - }, - runtimeChunk: 'single', - minimizer: [ - new UglifyJsPlugin({ - uglifyOptions: { - mangle: { - safari10: true - } - }, - sourceMap: config.build.productionSourceMap, - cache: true, - parallel: true - }), - // Compress extracted CSS. We are using this plugin so that possible - // duplicated CSS from different components can be deduped. - new OptimizeCSSAssetsPlugin() - ] - } -}) - -if (config.build.productionGzip) { - const CompressionWebpackPlugin = require('compression-webpack-plugin') - - webpackConfig.plugins.push( - new CompressionWebpackPlugin({ - asset: '[path].gz[query]', - algorithm: 'gzip', - test: new RegExp( - '\\.(' + config.build.productionGzipExtensions.join('|') + ')$' - ), - threshold: 10240, - minRatio: 0.8 - }) - ) -} - -if (config.build.generateAnalyzerReport || config.build.bundleAnalyzerReport) { - const BundleAnalyzerPlugin = require('webpack-bundle-analyzer') - .BundleAnalyzerPlugin - - if (config.build.bundleAnalyzerReport) { - webpackConfig.plugins.push( - new BundleAnalyzerPlugin({ - analyzerPort: 8080, - generateStatsFile: false - }) - ) - } - - if (config.build.generateAnalyzerReport) { - webpackConfig.plugins.push( - new BundleAnalyzerPlugin({ - analyzerMode: 'static', - reportFilename: 'bundle-report.html', - openAnalyzer: false - }) - ) - } -} - -module.exports = webpackConfig diff --git a/config/dev.env.js b/config/dev.env.js deleted file mode 100644 index 0115503..0000000 --- a/config/dev.env.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict' -const merge = require('webpack-merge') -const prodEnv = require('./prod.env') - -module.exports = merge(prodEnv, { - NODE_ENV: '"development"', - BASE_API: '"http://localhost:8000"' - // BASE_API: '"https://api.auauz.net"' -}) diff --git a/config/index.js b/config/index.js deleted file mode 100644 index 48350f5..0000000 --- a/config/index.js +++ /dev/null @@ -1,106 +0,0 @@ -'use strict' -// Template version: 1.2.6 -const devEnv = require('./dev.env') -// 获取接口地址 -const base_url = devEnv.BASE_API.replace(/"/g,'') -const path = require('path') -module.exports = { - dev: { - // Paths - assetsSubDirectory: 'static', - assetsPublicPath: '/', - // 配置代理 - proxyTable: { - '/auth': { - // 测试环境 - target: base_url, - secure: true, - changeOrigin: true, - pathRewrite: { - '^/auth': 'auth' - } - }, - '/api': { - // 测试环境 - target: base_url, - secure: true, - changeOrigin: true, - pathRewrite: { - '^/api': 'api' - } - } - }, - - // Various Dev Server settings - host: 'localhost', // can be overwritten by process.env.HOST - port: 8013, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined - autoOpenBrowser: true, - errorOverlay: true, - notifyOnErrors: false, - poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions- - - // Use Eslint Loader? - // If true, your code will be linted during bundling and - // linting errors and warnings will be shown in the console. - useEslint: true, - // If true, eslint errors and warnings will also be shown in the error overlay - // in the browser. - showEslintErrorsInOverlay: false, - - /** - * Source Maps - */ - - // https://webpack.js.org/configuration/devtool/#development - devtool: 'cheap-source-map', - - // CSS Sourcemaps off by default because relative paths are "buggy" - // with this option, according to the CSS-Loader README - // (https://github.com/webpack/css-loader#sourcemaps) - // In our experience, they generally work as expected, - // just be aware of this issue when enabling this option. - cssSourceMap: false - }, - - build: { - // Template for index.html - index: path.resolve(__dirname, '../dist/index.html'), - - // Paths - assetsRoot: path.resolve(__dirname, '../dist'), - assetsSubDirectory: 'static', - - /** - * You can set by youself according to actual condition - * You will need to set this if you plan to deploy your site under a sub path, - * for example GitHub pages. If you plan to deploy your site to https://foo.github.io/bar/, - * then assetsPublicPath should be set to "/bar/". - * In most cases please use '/' !!! - */ - assetsPublicPath: '/', - - /** - * Source Maps - */ - - productionSourceMap: false, - // https://webpack.js.org/configuration/devtool/#production - devtool: 'source-map', - - // Gzip off by default as many popular static hosts such as - // Surge or Netlify already gzip all static assets for you. - // Before setting to `true`, make sure to: - // npm install --save-dev compression-webpack-plugin - productionGzip: false, - productionGzipExtensions: ['js', 'css'], - - // Run the build command with an extra argument to - // View the bundle analyzer report after build finishes: - // `npm run build --report` - // Set to `true` or `false` to always turn it on or off - bundleAnalyzerReport: process.env.npm_config_report || false, - - // `npm run build:prod --generate_report` - generateAnalyzerReport: process.env.npm_config_generate_report || false - } -} diff --git a/config/prod.env.js b/config/prod.env.js deleted file mode 100644 index 73e8fe1..0000000 --- a/config/prod.env.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict' -module.exports = { - NODE_ENV: '"production"', - BASE_API: '"https://api.auauz.net"' -} diff --git a/favicon.ico b/favicon.ico deleted file mode 100644 index 34b63ac..0000000 Binary files a/favicon.ico and /dev/null differ diff --git a/index.html b/index.html deleted file mode 100644 index c6b6210..0000000 --- a/index.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - -
-
-
- - - - -
-
-
- - diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..143cdc8 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,24 @@ +module.exports = { + moduleFileExtensions: ['js', 'jsx', 'json', 'vue'], + transform: { + '^.+\\.vue$': 'vue-jest', + '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': + 'jest-transform-stub', + '^.+\\.jsx?$': 'babel-jest' + }, + moduleNameMapper: { + '^@/(.*)$': '/src/$1' + }, + snapshotSerializers: ['jest-serializer-vue'], + testMatch: [ + '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)' + ], + collectCoverageFrom: ['src/utils/**/*.{js,vue}', '!src/utils/auth.js', '!src/utils/request.js', 'src/components/**/*.{js,vue}'], + coverageDirectory: '/tests/unit/coverage', + // 'collectCoverage': true, + 'coverageReporters': [ + 'lcov', + 'text-summary' + ], + testURL: 'http://localhost/' +} diff --git a/package.json b/package.json index ec37f34..5f1baa7 100644 --- a/package.json +++ b/package.json @@ -1,30 +1,49 @@ { "name": "eladmin-web", - "version": "2.3.0", + "version": "2.4.0", + "description": "EL-ADMIN 前端源码", + "author": "Zheng Jie", "license": "Apache-2.0", - "description": "eladmin 前端代码", - "author": "jie ", "scripts": { - "dev": "cross-env BABEL_ENV=development webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", - "build": "cross-env NODE_ENV=production env_config=prod node build/build.js", + "dev": "vue-cli-service serve", + "build:prod": "vue-cli-service build", + "build:stage": "vue-cli-service build --mode staging", + "preview": "node build/index.js --preview", "lint": "eslint --ext .js,.vue src", - "test": "npm run lint", - "precommit": "lint-staged", - "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml" + "test:unit": "jest --clearCache && vue-cli-service test:unit", + "svgo": "svgo -f src/assets/icons/svg --config=src/assets/icons/svgo.yml", + "new": "plop" + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "src/**/*.{js,vue}": [ + "eslint --fix", + "git add" + ] }, "repository": { "type": "git", - "url": "https://github.com/elunez/eladmin-qd" + "url": "https://github.com/elunez/eladmin-web.git" + }, + "bugs": { + "url": "https://github.com/elunez/eladmin/issues" }, "dependencies": { - "@riophae/vue-treeselect": "0.0.38", - "axios": "^0.19.0", - "clipboard": "1.7.1", - "codemirror": "^5.38.0", + "@riophae/vue-treeselect": "0.1.0", + "axios": "0.18.1", + "clipboard": "2.0.4", + "codemirror": "^5.49.2", "connect": "3.6.6", - "echarts": "^4.1.0", + "echarts": "4.2.1", + "echarts-gl": "^1.1.1", + "echarts-wordcloud": "^1.1.3", "element-ui": "^2.12.0", "file-saver": "1.3.8", + "fuse.js": "3.4.4", "js-cookie": "2.2.0", "jsencrypt": "^3.0.0-rc.1", "jszip": "3.1.5", @@ -32,75 +51,56 @@ "normalize.css": "7.0.0", "nprogress": "0.2.0", "path-to-regexp": "2.4.0", - "screenfull": "3.3.3", - "vue": "2.5.17", + "qs": "^6.9.1", + "screenfull": "4.2.0", + "vue": "2.6.10", "vue-count-to": "1.0.13", - "vue-router": "3.1.3", - "vuex": "3.0.1", + "vue-cropper": "0.4.9", + "vue-highlightjs": "^1.3.3", + "vue-router": "3.0.2", + "vue-splitpane": "1.0.4", + "vuex": "3.1.0", "wangeditor": ">=3.0.0", "xlsx": "^0.11.16" }, "devDependencies": { - "autoprefixer": "8.5.0", - "babel-core": "6.26.3", + "@babel/core": "7.0.0", + "@babel/register": "7.0.0", + "@vue/cli-plugin-babel": "3.5.3", + "@vue/cli-plugin-eslint": "3.5.1", + "@vue/cli-plugin-unit-jest": "3.5.3", + "@vue/cli-service": "3.5.3", + "@vue/test-utils": "1.0.0-beta.29", + "autoprefixer": "^9.5.1", + "babel-core": "7.0.0-bridge.0", "babel-eslint": "8.2.6", - "babel-helper-vue-jsx-merge-props": "2.0.3", - "babel-loader": "7.1.5", - "babel-plugin-dynamic-import-node": "2.0.0", - "babel-plugin-syntax-jsx": "6.18.0", - "babel-plugin-transform-runtime": "6.23.0", - "babel-plugin-transform-vue-jsx": "3.7.0", - "babel-polyfill": "^6.26.0", - "babel-preset-env": "1.7.0", - "babel-preset-stage-2": "6.24.1", - "chalk": "2.4.1", - "copy-webpack-plugin": "4.5.2", - "cross-env": "5.2.0", - "css-loader": "1.0.0", - "eslint": "4.19.1", - "eslint-friendly-formatter": "4.0.1", - "eslint-loader": "2.0.0", - "eslint-plugin-vue": "4.7.1", - "eventsource-polyfill": "0.9.6", - "file-loader": "1.1.11", - "friendly-errors-webpack-plugin": "1.7.0", - "happypack": "^5.0.1", - "html-webpack-plugin": "^3.0.0", - "mini-css-extract-plugin": "0.4.1", - "node-notifier": "5.2.1", - "node-sass": "^4.7.2", - "optimize-css-assets-webpack-plugin": "5.0.0", - "ora": "3.0.0", - "portfinder": "1.0.16", - "postcss-import": "12.0.0", - "postcss-loader": "2.1.6", - "postcss-url": "7.3.2", - "rimraf": "2.6.2", - "sass-loader": "7.0.3", - "script-ext-html-webpack-plugin": "2.0.1", + "babel-jest": "23.6.0", + "babel-plugin-transform-remove-console": "^6.9.4", + "chalk": "2.4.2", + "chokidar": "2.1.5", + "connect": "3.6.6", + "eslint": "5.15.3", + "eslint-plugin-vue": "5.2.2", + "html-webpack-plugin": "3.2.0", + "husky": "1.3.1", + "lint-staged": "8.1.5", + "node-sass": "^4.13.0", + "plop": "2.3.0", + "runjs": "^4.3.2", + "sass-loader": "^7.1.0", + "script-ext-html-webpack-plugin": "2.1.3", "script-loader": "0.7.2", - "semver": "5.5.0", - "shelljs": "^0.8.3", - "svg-sprite-loader": "3.8.0", - "svgo": "1.2.2", - "uglifyjs-webpack-plugin": "1.2.7", - "url-loader": "1.0.1", - "vue-loader": "15.3.0", - "vue-style-loader": "4.1.2", - "vue-template-compiler": "2.5.17", - "webpack": "^4.41.2", - "webpack-bundle-analyzer": "^3.6.0", - "webpack-cli": "^3.3.9", - "webpack-dev-server": "^3.9.0", - "webpack-merge": "^4.2.2" + "serve-static": "^1.13.2", + "svg-sprite-loader": "4.1.3", + "svgo": "1.2.0", + "vue-template-compiler": "2.6.10" }, "engines": { - "node": ">= 6.0.0", + "node": ">=8.9", "npm": ">= 3.0.0" }, "browserslist": [ "> 1%", - "last 2 versions", - "not ie <= 8" + "last 2 versions" ] } diff --git a/plopfile.js b/plopfile.js new file mode 100644 index 0000000..9f3147e --- /dev/null +++ b/plopfile.js @@ -0,0 +1,7 @@ +const viewGenerator = require('./plop-templates/view/prompt') +const componentGenerator = require('./plop-templates/component/prompt') + +module.exports = function(plop) { + plop.setGenerator('view', viewGenerator) + plop.setGenerator('component', componentGenerator) +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..961986e --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,5 @@ +module.exports = { + plugins: { + autoprefixer: {} + } +} diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..fcb6999 Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..e918500 --- /dev/null +++ b/public/index.html @@ -0,0 +1,15 @@ + + + + + + + + + <%= webpackConfig.name %> + + +
+ + + diff --git a/src/App.vue b/src/App.vue index 721d3a3..ec9032c 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,6 +1,6 @@ diff --git a/src/api/data.js b/src/api/data.js index 7a91ac6..d975d75 100644 --- a/src/api/data.js +++ b/src/api/data.js @@ -1,9 +1,17 @@ import request from '@/utils/request' +import qs from 'qs' export function initData(url, params) { return request({ - url: url, - method: 'get', - params + url: url + '?' + qs.stringify(params, { indices: false }), + method: 'get' + }) +} + +export function download(url, params) { + return request({ + url: url + '?' + qs.stringify(params, { indices: false }), + method: 'get', + responseType: 'blob' }) } diff --git a/src/api/generator.js b/src/api/generator.js deleted file mode 100644 index c9302d6..0000000 --- a/src/api/generator.js +++ /dev/null @@ -1,9 +0,0 @@ -import request from '@/utils/request' - -export function generator(data, tableName) { - return request({ - url: 'api/generator?tableName=' + tableName, - data, - method: 'post' - }) -} diff --git a/src/api/genConfig.js b/src/api/generator/genConfig.js similarity index 73% rename from src/api/genConfig.js rename to src/api/generator/genConfig.js index 5535d37..e15b200 100644 --- a/src/api/genConfig.js +++ b/src/api/generator/genConfig.js @@ -1,8 +1,8 @@ import request from '@/utils/request' -export function get() { +export function get(tableName) { return request({ - url: 'api/genConfig', + url: 'api/genConfig/' + tableName, method: 'get' }) } diff --git a/src/api/generator/generator.js b/src/api/generator/generator.js new file mode 100644 index 0000000..0c49718 --- /dev/null +++ b/src/api/generator/generator.js @@ -0,0 +1,33 @@ +import request from '@/utils/request' + +export function getAllTable() { + return request({ + url: 'api/generator/tables/all', + method: 'get' + }) +} + +export function generator(tableName, type) { + return request({ + url: 'api/generator/' + tableName + '/' + type, + method: 'post', + responseType: type === 2 ? 'blob' : '' + }) +} + +export function save(data) { + return request({ + url: 'api/generator', + data, + method: 'put' + }) +} + +export function sync(tables) { + return request({ + url: 'api/generator/sync', + method: 'post', + data: tables + }) +} + diff --git a/src/api/log.js b/src/api/log.js deleted file mode 100644 index 446c030..0000000 --- a/src/api/log.js +++ /dev/null @@ -1,17 +0,0 @@ -import request from '@/utils/request' - -export function getErrDetail(id) { - return request({ - url: 'api/logs/error/' + id, - method: 'get' - }) -} - -export function downloadLog(params) { - return request({ - url: 'api/logs/download', - method: 'get', - params, - responseType: 'blob' - }) -} diff --git a/src/api/mnt/app.js b/src/api/mnt/app.js new file mode 100644 index 0000000..2a27054 --- /dev/null +++ b/src/api/mnt/app.js @@ -0,0 +1,27 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/app', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/app', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/app', + method: 'put', + data + }) +} + +export default { add, edit, del } diff --git a/src/api/mnt/connect.js b/src/api/mnt/connect.js new file mode 100644 index 0000000..1bbe90b --- /dev/null +++ b/src/api/mnt/connect.js @@ -0,0 +1,17 @@ +import request from '@/utils/request' + +export function testDbConnect(data) { + return request({ + url: 'api/database/testConnect', + method: 'post', + data + }) +} + +export function testServerConnect(data) { + return request({ + url: 'api/serverDeploy/testConnect', + method: 'post', + data + }) +} diff --git a/src/api/mnt/database.js b/src/api/mnt/database.js new file mode 100644 index 0000000..91797fb --- /dev/null +++ b/src/api/mnt/database.js @@ -0,0 +1,35 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/database', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/database', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/database', + method: 'put', + data + }) +} + +export function testDbConnection(data) { + return request({ + url: 'api/database/testConnect', + method: 'post', + data + }) +} + +export default { add, edit, del, testDbConnection } diff --git a/src/api/mnt/deploy.js b/src/api/mnt/deploy.js new file mode 100644 index 0000000..c1475ea --- /dev/null +++ b/src/api/mnt/deploy.js @@ -0,0 +1,77 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/deploy', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/deploy', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/deploy', + method: 'put', + data + }) +} + +export function getApps() { + return request({ + url: 'api/app', + method: 'get' + }) +} + +export function getServers() { + return request({ + url: 'api/serverDeploy', + method: 'get' + }) +} + +/** + * 启动服务 + * @param data 选中行 + */ +export function startServer(data) { + return request({ + url: 'api/deploy/startServer', + method: 'post', + data + }) +} + +/** + * 停止服务 + * @param data 选中行 + */ +export function stopServer(data) { + return request({ + url: 'api/deploy/stopServer', + method: 'post', + data + }) +} + +/** + * 停止服务 + * @param data 选中行 + */ +export function serverStatus(data) { + return request({ + url: 'api/deploy/serverStatus', + method: 'post', + data + }) +} + +export default { add, edit, del, stopServer, serverStatus, startServer, getServers, getApps } diff --git a/src/api/mnt/deployHistory.js b/src/api/mnt/deployHistory.js new file mode 100644 index 0000000..30335e4 --- /dev/null +++ b/src/api/mnt/deployHistory.js @@ -0,0 +1,21 @@ +import request from '@/utils/request' + +export function del(ids) { + return request({ + url: 'api/deployHistory', + method: 'delete', + data: ids + }) +} + +/** + * 版本回退 + * @param data 选中行 + */ +export function reducte(data) { + return request({ + url: 'api/deploy/serverReduction', + method: 'post', + data + }) +} diff --git a/src/api/mnt/serverDeploy.js b/src/api/mnt/serverDeploy.js new file mode 100644 index 0000000..e796114 --- /dev/null +++ b/src/api/mnt/serverDeploy.js @@ -0,0 +1,27 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/serverDeploy', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/serverDeploy', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/serverDeploy', + method: 'put', + data + }) +} + +export default { add, edit, del } diff --git a/src/api/monitor/log.js b/src/api/monitor/log.js new file mode 100644 index 0000000..13f0d39 --- /dev/null +++ b/src/api/monitor/log.js @@ -0,0 +1,22 @@ +import request from '@/utils/request' + +export function getErrDetail(id) { + return request({ + url: 'api/logs/error/' + id, + method: 'get' + }) +} + +export function delAllError() { + return request({ + url: 'api/logs/del/error', + method: 'delete' + }) +} + +export function delAllInfo() { + return request({ + url: 'api/logs/del/info', + method: 'delete' + }) +} diff --git a/src/api/monitor/online.js b/src/api/monitor/online.js new file mode 100644 index 0000000..057275b --- /dev/null +++ b/src/api/monitor/online.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +export function del(keys) { + return request({ + url: 'auth/online', + method: 'delete', + data: keys + }) +} diff --git a/src/api/monitor/server.js b/src/api/monitor/server.js new file mode 100644 index 0000000..2ade356 --- /dev/null +++ b/src/api/monitor/server.js @@ -0,0 +1,27 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/server', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/server', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/server', + method: 'put', + data + }) +} + +export default { add, edit, del } diff --git a/src/api/visits.js b/src/api/monitor/visits.js similarity index 100% rename from src/api/visits.js rename to src/api/monitor/visits.js diff --git a/src/api/online.js b/src/api/online.js deleted file mode 100644 index cdfe120..0000000 --- a/src/api/online.js +++ /dev/null @@ -1,17 +0,0 @@ -import request from '@/utils/request' - -export function del(key) { - return request({ - url: 'auth/online/' + key, - method: 'delete' - }) -} - -export function downloadOnline(params) { - return request({ - url: 'auth/online/download', - method: 'get', - params, - responseType: 'blob' - }) -} diff --git a/src/api/picture.js b/src/api/picture.js deleted file mode 100644 index df9d720..0000000 --- a/src/api/picture.js +++ /dev/null @@ -1,25 +0,0 @@ -import request from '@/utils/request' - -export function del(id) { - return request({ - url: 'api/pictures/' + id, - method: 'delete' - }) -} - -export function delAll(ids) { - return request({ - url: 'api/pictures/', - method: 'delete', - data: ids - }) -} - -export function downloadPicture(params) { - return request({ - url: 'api/pictures/download', - method: 'get', - params, - responseType: 'blob' - }) -} diff --git a/src/api/redis.js b/src/api/redis.js deleted file mode 100644 index fdd3cbc..0000000 --- a/src/api/redis.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -export function add(data) { - return request({ - url: 'api/redis', - method: 'post', - data - }) -} - -export function del(key) { - const data = { - key - } - return request({ - url: 'api/redis/', - method: 'delete', - data - }) -} - -export function delAll() { - return request({ - url: 'api/redis/all', - method: 'delete' - }) -} - -export function edit(data) { - return request({ - url: 'api/redis', - method: 'put', - data - }) -} - -export function downloadRedis(params) { - return request({ - url: 'api/redis/download', - method: 'get', - params, - responseType: 'blob' - }) -} diff --git a/src/api/code.js b/src/api/system/code.js similarity index 100% rename from src/api/code.js rename to src/api/system/code.js diff --git a/src/api/dept.js b/src/api/system/dept.js similarity index 63% rename from src/api/dept.js rename to src/api/system/dept.js index 1c3624e..59998ba 100644 --- a/src/api/dept.js +++ b/src/api/system/dept.js @@ -16,10 +16,11 @@ export function add(data) { }) } -export function del(id) { +export function del(ids) { return request({ - url: 'api/dept/' + id, - method: 'delete' + url: 'api/dept', + method: 'delete', + data: ids }) } @@ -31,11 +32,4 @@ export function edit(data) { }) } -export function downloadDept(params) { - return request({ - url: 'api/dept/download', - method: 'get', - params, - responseType: 'blob' - }) -} +export default { add, edit, del, getDepts } diff --git a/src/api/dict.js b/src/api/system/dict.js similarity index 75% rename from src/api/dict.js rename to src/api/system/dict.js index e318b3b..11911cf 100644 --- a/src/api/dict.js +++ b/src/api/system/dict.js @@ -1,5 +1,12 @@ import request from '@/utils/request' +export function getDicts() { + return request({ + url: 'api/dict/all', + method: 'get' + }) +} + export function add(data) { return request({ url: 'api/dict', @@ -23,11 +30,4 @@ export function edit(data) { }) } -export function downloadDict(params) { - return request({ - url: 'api/dict/download', - method: 'get', - params, - responseType: 'blob' - }) -} +export default { add, edit, del } diff --git a/src/api/dictDetail.js b/src/api/system/dictDetail.js similarity index 95% rename from src/api/dictDetail.js rename to src/api/system/dictDetail.js index b03d1cc..e8dc512 100644 --- a/src/api/dictDetail.js +++ b/src/api/system/dictDetail.js @@ -48,3 +48,5 @@ export function edit(data) { data }) } + +export default { add, edit, del } diff --git a/src/api/job.js b/src/api/system/job.js similarity index 66% rename from src/api/job.js rename to src/api/system/job.js index 49ba283..2888c05 100644 --- a/src/api/job.js +++ b/src/api/system/job.js @@ -21,10 +21,11 @@ export function add(data) { }) } -export function del(id) { +export function del(ids) { return request({ - url: 'api/job/' + id, - method: 'delete' + url: 'api/job', + method: 'delete', + data: ids }) } @@ -36,11 +37,4 @@ export function edit(data) { }) } -export function downloadJob(params) { - return request({ - url: 'api/job/download', - method: 'get', - params, - responseType: 'blob' - }) -} +export default { add, edit, del } diff --git a/src/api/menu.js b/src/api/system/menu.js similarity index 65% rename from src/api/menu.js rename to src/api/system/menu.js index 10e8bd1..4e8ac90 100644 --- a/src/api/menu.js +++ b/src/api/system/menu.js @@ -1,6 +1,5 @@ import request from '@/utils/request' -// 获取所有的菜单树 export function getMenusTree() { return request({ url: 'api/menus/tree', @@ -23,10 +22,11 @@ export function add(data) { }) } -export function del(id) { +export function del(ids) { return request({ - url: 'api/menus/' + id, - method: 'delete' + url: 'api/menus', + method: 'delete', + data: ids }) } @@ -38,11 +38,4 @@ export function edit(data) { }) } -export function downloadMenu(params) { - return request({ - url: 'api/menus/download', - method: 'get', - params, - responseType: 'blob' - }) -} +export default { add, edit, del, getMenusTree } diff --git a/src/api/role.js b/src/api/system/role.js similarity index 66% rename from src/api/role.js rename to src/api/system/role.js index e8792d4..1f7bc1e 100644 --- a/src/api/role.js +++ b/src/api/system/role.js @@ -30,10 +30,11 @@ export function getLevel() { }) } -export function del(id) { +export function del(ids) { return request({ - url: 'api/roles/' + id, - method: 'delete' + url: 'api/roles', + method: 'delete', + data: ids }) } @@ -45,14 +46,6 @@ export function edit(data) { }) } -export function editPermission(data) { - return request({ - url: 'api/roles/permission', - method: 'put', - data - }) -} - export function editMenu(data) { return request({ url: 'api/roles/menu', @@ -61,11 +54,4 @@ export function editMenu(data) { }) } -export function downloadRole(params) { - return request({ - url: 'api/roles/download', - method: 'get', - params, - responseType: 'blob' - }) -} +export default { add, edit, del, get, editMenu, getLevel } diff --git a/src/api/timing.js b/src/api/system/timing.js similarity index 56% rename from src/api/timing.js rename to src/api/system/timing.js index fb95575..613e15f 100644 --- a/src/api/timing.js +++ b/src/api/system/timing.js @@ -8,10 +8,11 @@ export function add(data) { }) } -export function del(id) { +export function del(ids) { return request({ - url: 'api/jobs/' + id, - method: 'delete' + url: 'api/jobs', + method: 'delete', + data: ids }) } @@ -37,20 +38,4 @@ export function execution(id) { }) } -export function downloadJobs(params) { - return request({ - url: 'api/jobs/download', - method: 'get', - params, - responseType: 'blob' - }) -} - -export function downloadLogs(params) { - return request({ - url: 'api/jobs/download/log', - method: 'get', - params, - responseType: 'blob' - }) -} +export default { del, updateIsPause, execution, add, edit } diff --git a/src/api/user.js b/src/api/system/user.js similarity index 50% rename from src/api/user.js rename to src/api/system/user.js index 334635f..6cd91a5 100644 --- a/src/api/user.js +++ b/src/api/system/user.js @@ -1,4 +1,5 @@ import request from '@/utils/request' +import { encrypt } from '@/utils/rsaEncrypt' export function add(data) { return request({ @@ -8,19 +9,11 @@ export function add(data) { }) } -export function downloadUser(params) { +export function del(ids) { return request({ - url: 'api/users/download', - method: 'get', - params, - responseType: 'blob' - }) -} - -export function del(id) { - return request({ - url: 'api/users/' + id, - method: 'delete' + url: 'api/users', + method: 'delete', + data: ids }) } @@ -32,10 +25,18 @@ export function edit(data) { }) } +export function editUser(data) { + return request({ + url: 'api/users/center', + method: 'put', + data + }) +} + export function updatePass(user) { const data = { - oldPass: user.oldPass, - newPass: user.newPass + oldPass: encrypt(user.oldPass), + newPass: encrypt(user.newPass) } return request({ url: 'api/users/updatePass/', @@ -44,10 +45,17 @@ export function updatePass(user) { }) } -export function updateEmail(code, data) { +export function updateEmail(form) { + const data = { + password: encrypt(form.pass), + email: form.email + } return request({ - url: 'api/users/updateEmail/' + code, + url: 'api/users/updateEmail/' + form.code, method: 'post', data }) } + +export default { add, edit, del } + diff --git a/src/api/alipay.js b/src/api/tools/alipay.js similarity index 100% rename from src/api/alipay.js rename to src/api/tools/alipay.js diff --git a/src/api/email.js b/src/api/tools/email.js similarity index 100% rename from src/api/email.js rename to src/api/tools/email.js diff --git a/src/api/localStorage.js b/src/api/tools/localStorage.js similarity index 54% rename from src/api/localStorage.js rename to src/api/tools/localStorage.js index 2e68c14..63ebe2b 100644 --- a/src/api/localStorage.js +++ b/src/api/tools/localStorage.js @@ -8,14 +8,7 @@ export function add(data) { }) } -export function del(id) { - return request({ - url: 'api/localStorage/' + id, - method: 'delete' - }) -} - -export function delAll(ids) { +export function del(ids) { return request({ url: 'api/localStorage/', method: 'delete', @@ -31,11 +24,4 @@ export function edit(data) { }) } -export function downloadStorage(params) { - return request({ - url: 'api/localStorage/download', - method: 'get', - params, - responseType: 'blob' - }) -} +export default { add, edit, del } diff --git a/src/api/tools/picture.js b/src/api/tools/picture.js new file mode 100644 index 0000000..237d5f5 --- /dev/null +++ b/src/api/tools/picture.js @@ -0,0 +1,18 @@ +import request from '@/utils/request' + +export function del(ids) { + return request({ + url: 'api/pictures', + method: 'delete', + data: ids + }) +} + +export function sync() { + return request({ + url: 'api/pictures/synchronize', + method: 'post' + }) +} + +export default { del, sync } diff --git a/src/api/qiniu.js b/src/api/tools/qiniu.js similarity index 62% rename from src/api/qiniu.js rename to src/api/tools/qiniu.js index ce75cba..6d56771 100644 --- a/src/api/qiniu.js +++ b/src/api/tools/qiniu.js @@ -15,13 +15,6 @@ export function update(data) { }) } -export function del(id) { - return request({ - url: 'api/qiNiuContent/' + id, - method: 'delete' - }) -} - export function download(id) { return request({ url: 'api/qiNiuContent/download/' + id, @@ -36,19 +29,12 @@ export function sync() { }) } -export function delAll(ids) { +export function del(ids) { return request({ - url: 'api/qiNiuContent/', + url: 'api/qiNiuContent', method: 'delete', data: ids }) } -export function downloadQiNiu(params) { - return request({ - url: 'api/qiNiuContent/download/list', - method: 'get', - params, - responseType: 'blob' - }) -} +export default { del, download, sync } diff --git a/src/assets/404_images/404.png b/src/assets/404_images/404.png index 9ec0e39..3d8e230 100644 Binary files a/src/assets/404_images/404.png and b/src/assets/404_images/404.png differ diff --git a/src/assets/404_images/404_cloud.png b/src/assets/404_images/404_cloud.png index 9ccec13..c6281d0 100644 Binary files a/src/assets/404_images/404_cloud.png and b/src/assets/404_images/404_cloud.png differ diff --git a/src/icons/index.js b/src/assets/icons/index.js similarity index 79% rename from src/icons/index.js rename to src/assets/icons/index.js index d9fe4d8..2c6b309 100644 --- a/src/icons/index.js +++ b/src/assets/icons/index.js @@ -1,9 +1,9 @@ import Vue from 'vue' -import SvgIcon from '@/components/SvgIcon' // svg组件 +import SvgIcon from '@/components/SvgIcon'// svg component // register globally Vue.component('svg-icon', SvgIcon) -const requireAll = requireContext => requireContext.keys().map(requireContext) const req = require.context('./svg', false, /\.svg$/) +const requireAll = requireContext => requireContext.keys().map(requireContext) requireAll(req) diff --git a/src/icons/svg/Steve-Jobs.svg b/src/assets/icons/svg/Steve-Jobs.svg similarity index 100% rename from src/icons/svg/Steve-Jobs.svg rename to src/assets/icons/svg/Steve-Jobs.svg diff --git a/src/icons/svg/alipay.svg b/src/assets/icons/svg/alipay.svg similarity index 100% rename from src/icons/svg/alipay.svg rename to src/assets/icons/svg/alipay.svg diff --git a/src/icons/svg/anq.svg b/src/assets/icons/svg/anq.svg similarity index 100% rename from src/icons/svg/anq.svg rename to src/assets/icons/svg/anq.svg diff --git a/src/assets/icons/svg/app.svg b/src/assets/icons/svg/app.svg new file mode 100644 index 0000000..0796da3 --- /dev/null +++ b/src/assets/icons/svg/app.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/backup.svg b/src/assets/icons/svg/backup.svg new file mode 100644 index 0000000..a3272a4 --- /dev/null +++ b/src/assets/icons/svg/backup.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/chain.svg b/src/assets/icons/svg/chain.svg similarity index 100% rename from src/icons/svg/chain.svg rename to src/assets/icons/svg/chain.svg diff --git a/src/assets/icons/svg/chart.svg b/src/assets/icons/svg/chart.svg new file mode 100644 index 0000000..27728fb --- /dev/null +++ b/src/assets/icons/svg/chart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/codeConsole.svg b/src/assets/icons/svg/codeConsole.svg similarity index 100% rename from src/icons/svg/codeConsole.svg rename to src/assets/icons/svg/codeConsole.svg diff --git a/src/assets/icons/svg/dashboard.svg b/src/assets/icons/svg/dashboard.svg new file mode 100644 index 0000000..5317d37 --- /dev/null +++ b/src/assets/icons/svg/dashboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/database.svg b/src/assets/icons/svg/database.svg new file mode 100644 index 0000000..7fbad9b --- /dev/null +++ b/src/assets/icons/svg/database.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/date.svg b/src/assets/icons/svg/date.svg similarity index 100% rename from src/icons/svg/date.svg rename to src/assets/icons/svg/date.svg diff --git a/src/assets/icons/svg/deploy.svg b/src/assets/icons/svg/deploy.svg new file mode 100644 index 0000000..f4a1c56 --- /dev/null +++ b/src/assets/icons/svg/deploy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/dept.svg b/src/assets/icons/svg/dept.svg similarity index 100% rename from src/icons/svg/dept.svg rename to src/assets/icons/svg/dept.svg diff --git a/src/icons/svg/dev.svg b/src/assets/icons/svg/dev.svg similarity index 100% rename from src/icons/svg/dev.svg rename to src/assets/icons/svg/dev.svg diff --git a/src/icons/svg/develop.svg b/src/assets/icons/svg/develop.svg similarity index 100% rename from src/icons/svg/develop.svg rename to src/assets/icons/svg/develop.svg diff --git a/src/icons/svg/dictionary.svg b/src/assets/icons/svg/dictionary.svg similarity index 100% rename from src/icons/svg/dictionary.svg rename to src/assets/icons/svg/dictionary.svg diff --git a/src/assets/icons/svg/edit.svg b/src/assets/icons/svg/edit.svg new file mode 100644 index 0000000..d26101f --- /dev/null +++ b/src/assets/icons/svg/edit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/education.svg b/src/assets/icons/svg/education.svg new file mode 100644 index 0000000..7bfb01d --- /dev/null +++ b/src/assets/icons/svg/education.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/email.svg b/src/assets/icons/svg/email.svg similarity index 100% rename from src/icons/svg/email.svg rename to src/assets/icons/svg/email.svg diff --git a/src/icons/svg/error.svg b/src/assets/icons/svg/error.svg similarity index 100% rename from src/icons/svg/error.svg rename to src/assets/icons/svg/error.svg diff --git a/src/assets/icons/svg/exit-fullscreen.svg b/src/assets/icons/svg/exit-fullscreen.svg new file mode 100644 index 0000000..485c128 --- /dev/null +++ b/src/assets/icons/svg/exit-fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/fullscreen.svg b/src/assets/icons/svg/fullscreen.svg new file mode 100644 index 0000000..0e86b6f --- /dev/null +++ b/src/assets/icons/svg/fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/fwb.svg b/src/assets/icons/svg/fwb.svg similarity index 100% rename from src/icons/svg/fwb.svg rename to src/assets/icons/svg/fwb.svg diff --git a/src/assets/icons/svg/github.svg b/src/assets/icons/svg/github.svg new file mode 100644 index 0000000..40b3131 --- /dev/null +++ b/src/assets/icons/svg/github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/gonggao.svg b/src/assets/icons/svg/gonggao.svg similarity index 100% rename from src/icons/svg/gonggao.svg rename to src/assets/icons/svg/gonggao.svg diff --git a/src/icons/svg/icon.svg b/src/assets/icons/svg/icon.svg similarity index 100% rename from src/icons/svg/icon.svg rename to src/assets/icons/svg/icon.svg diff --git a/src/icons/svg/image.svg b/src/assets/icons/svg/image.svg similarity index 100% rename from src/icons/svg/image.svg rename to src/assets/icons/svg/image.svg diff --git a/src/icons/svg/index.svg b/src/assets/icons/svg/index.svg similarity index 100% rename from src/icons/svg/index.svg rename to src/assets/icons/svg/index.svg diff --git a/src/assets/icons/svg/international.svg b/src/assets/icons/svg/international.svg new file mode 100644 index 0000000..e9b56ee --- /dev/null +++ b/src/assets/icons/svg/international.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/ipvisits.svg b/src/assets/icons/svg/ipvisits.svg similarity index 100% rename from src/icons/svg/ipvisits.svg rename to src/assets/icons/svg/ipvisits.svg diff --git a/src/icons/svg/java.svg b/src/assets/icons/svg/java.svg similarity index 100% rename from src/icons/svg/java.svg rename to src/assets/icons/svg/java.svg diff --git a/src/assets/icons/svg/link.svg b/src/assets/icons/svg/link.svg new file mode 100644 index 0000000..48197ba --- /dev/null +++ b/src/assets/icons/svg/link.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/list.svg b/src/assets/icons/svg/list.svg new file mode 100644 index 0000000..20259ed --- /dev/null +++ b/src/assets/icons/svg/list.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/lock.svg b/src/assets/icons/svg/lock.svg similarity index 100% rename from src/icons/svg/lock.svg rename to src/assets/icons/svg/lock.svg diff --git a/src/icons/svg/log.svg b/src/assets/icons/svg/log.svg similarity index 100% rename from src/icons/svg/log.svg rename to src/assets/icons/svg/log.svg diff --git a/src/assets/icons/svg/login.svg b/src/assets/icons/svg/login.svg new file mode 100644 index 0000000..cc5a854 --- /dev/null +++ b/src/assets/icons/svg/login.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/markdown.svg b/src/assets/icons/svg/markdown.svg similarity index 100% rename from src/icons/svg/markdown.svg rename to src/assets/icons/svg/markdown.svg diff --git a/src/icons/svg/menu.svg b/src/assets/icons/svg/menu.svg similarity index 100% rename from src/icons/svg/menu.svg rename to src/assets/icons/svg/menu.svg diff --git a/src/assets/icons/svg/message.svg b/src/assets/icons/svg/message.svg new file mode 100644 index 0000000..14ca817 --- /dev/null +++ b/src/assets/icons/svg/message.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/mnt.svg b/src/assets/icons/svg/mnt.svg new file mode 100644 index 0000000..502a7c0 --- /dev/null +++ b/src/assets/icons/svg/mnt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/monitor.svg b/src/assets/icons/svg/monitor.svg new file mode 100644 index 0000000..fbf0a2f --- /dev/null +++ b/src/assets/icons/svg/monitor.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/svg/nested.svg b/src/assets/icons/svg/nested.svg new file mode 100644 index 0000000..06713a8 --- /dev/null +++ b/src/assets/icons/svg/nested.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/password.svg b/src/assets/icons/svg/password.svg similarity index 100% rename from src/icons/svg/password.svg rename to src/assets/icons/svg/password.svg diff --git a/src/assets/icons/svg/people.svg b/src/assets/icons/svg/people.svg new file mode 100644 index 0000000..2bd54ae --- /dev/null +++ b/src/assets/icons/svg/people.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/peoples.svg b/src/assets/icons/svg/peoples.svg similarity index 100% rename from src/icons/svg/peoples.svg rename to src/assets/icons/svg/peoples.svg diff --git a/src/icons/svg/permission.svg b/src/assets/icons/svg/permission.svg similarity index 100% rename from src/icons/svg/permission.svg rename to src/assets/icons/svg/permission.svg diff --git a/src/icons/svg/phone.svg b/src/assets/icons/svg/phone.svg similarity index 100% rename from src/icons/svg/phone.svg rename to src/assets/icons/svg/phone.svg diff --git a/src/icons/svg/qiniu.svg b/src/assets/icons/svg/qiniu.svg similarity index 100% rename from src/icons/svg/qiniu.svg rename to src/assets/icons/svg/qiniu.svg diff --git a/src/icons/svg/redis.svg b/src/assets/icons/svg/redis.svg similarity index 100% rename from src/icons/svg/redis.svg rename to src/assets/icons/svg/redis.svg diff --git a/src/icons/svg/role.svg b/src/assets/icons/svg/role.svg similarity index 100% rename from src/icons/svg/role.svg rename to src/assets/icons/svg/role.svg diff --git a/src/icons/svg/search.svg b/src/assets/icons/svg/search.svg similarity index 100% rename from src/icons/svg/search.svg rename to src/assets/icons/svg/search.svg diff --git a/src/assets/icons/svg/server.svg b/src/assets/icons/svg/server.svg new file mode 100644 index 0000000..db6dcdf --- /dev/null +++ b/src/assets/icons/svg/server.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/size.svg b/src/assets/icons/svg/size.svg new file mode 100644 index 0000000..ddb25b8 --- /dev/null +++ b/src/assets/icons/svg/size.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/skill.svg b/src/assets/icons/svg/skill.svg new file mode 100644 index 0000000..a3b7312 --- /dev/null +++ b/src/assets/icons/svg/skill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/source.svg b/src/assets/icons/svg/source.svg new file mode 100644 index 0000000..1c3a038 --- /dev/null +++ b/src/assets/icons/svg/source.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/sqlMonitor.svg b/src/assets/icons/svg/sqlMonitor.svg similarity index 100% rename from src/icons/svg/sqlMonitor.svg rename to src/assets/icons/svg/sqlMonitor.svg diff --git a/src/icons/svg/swagger.svg b/src/assets/icons/svg/swagger.svg similarity index 100% rename from src/icons/svg/swagger.svg rename to src/assets/icons/svg/swagger.svg diff --git a/src/assets/icons/svg/sys-tools.svg b/src/assets/icons/svg/sys-tools.svg new file mode 100644 index 0000000..324aa04 --- /dev/null +++ b/src/assets/icons/svg/sys-tools.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/system.svg b/src/assets/icons/svg/system.svg similarity index 68% rename from src/icons/svg/system.svg rename to src/assets/icons/svg/system.svg index 54fedb9..9333c60 100644 --- a/src/icons/svg/system.svg +++ b/src/assets/icons/svg/system.svg @@ -1,5 +1 @@ -<<<<<<< HEAD -======= - ->>>>>>> 2.3dev diff --git a/src/assets/icons/svg/tab.svg b/src/assets/icons/svg/tab.svg new file mode 100644 index 0000000..b4b48e4 --- /dev/null +++ b/src/assets/icons/svg/tab.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/theme.svg b/src/assets/icons/svg/theme.svg new file mode 100644 index 0000000..5982a2f --- /dev/null +++ b/src/assets/icons/svg/theme.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/timing.svg b/src/assets/icons/svg/timing.svg similarity index 100% rename from src/icons/svg/timing.svg rename to src/assets/icons/svg/timing.svg diff --git a/src/icons/svg/tools.svg b/src/assets/icons/svg/tools.svg similarity index 100% rename from src/icons/svg/tools.svg rename to src/assets/icons/svg/tools.svg diff --git a/src/assets/icons/svg/tree-table.svg b/src/assets/icons/svg/tree-table.svg new file mode 100644 index 0000000..8aafdb8 --- /dev/null +++ b/src/assets/icons/svg/tree-table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/tree.svg b/src/assets/icons/svg/tree.svg new file mode 100644 index 0000000..dd4b7dd --- /dev/null +++ b/src/assets/icons/svg/tree.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/unlock.svg b/src/assets/icons/svg/unlock.svg similarity index 100% rename from src/icons/svg/unlock.svg rename to src/assets/icons/svg/unlock.svg diff --git a/src/icons/svg/user.svg b/src/assets/icons/svg/user.svg similarity index 100% rename from src/icons/svg/user.svg rename to src/assets/icons/svg/user.svg diff --git a/src/icons/svg/user1.svg b/src/assets/icons/svg/user1.svg similarity index 100% rename from src/icons/svg/user1.svg rename to src/assets/icons/svg/user1.svg diff --git a/src/icons/svg/validCode.svg b/src/assets/icons/svg/validCode.svg similarity index 100% rename from src/icons/svg/validCode.svg rename to src/assets/icons/svg/validCode.svg diff --git a/src/icons/svg/visits.svg b/src/assets/icons/svg/visits.svg similarity index 100% rename from src/icons/svg/visits.svg rename to src/assets/icons/svg/visits.svg diff --git a/src/icons/svg/web.svg b/src/assets/icons/svg/web.svg similarity index 100% rename from src/icons/svg/web.svg rename to src/assets/icons/svg/web.svg diff --git a/src/assets/icons/svg/wechat.svg b/src/assets/icons/svg/wechat.svg new file mode 100644 index 0000000..c586e55 --- /dev/null +++ b/src/assets/icons/svg/wechat.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/weixin.svg b/src/assets/icons/svg/weixin.svg similarity index 100% rename from src/icons/svg/weixin.svg rename to src/assets/icons/svg/weixin.svg diff --git a/src/assets/icons/svg/zujian.svg b/src/assets/icons/svg/zujian.svg new file mode 100644 index 0000000..2aba32f --- /dev/null +++ b/src/assets/icons/svg/zujian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svgo.yml b/src/assets/icons/svgo.yml similarity index 100% rename from src/icons/svgo.yml rename to src/assets/icons/svgo.yml diff --git a/src/assets/avatar/avatar.png b/src/assets/images/avatar.png similarity index 100% rename from src/assets/avatar/avatar.png rename to src/assets/images/avatar.png diff --git a/src/assets/images/logo.png b/src/assets/images/logo.png new file mode 100644 index 0000000..f757710 Binary files /dev/null and b/src/assets/images/logo.png differ diff --git a/src/assets/logo/logo.png b/src/assets/logo/logo.png deleted file mode 100644 index 1670e67..0000000 Binary files a/src/assets/logo/logo.png and /dev/null differ diff --git a/src/assets/styles/btn.scss b/src/assets/styles/btn.scss new file mode 100644 index 0000000..8f47f2c --- /dev/null +++ b/src/assets/styles/btn.scss @@ -0,0 +1,99 @@ +@import 'variables'; + +@mixin colorBtn($color) { + background: $color; + + &:hover { + color: $color; + + &:before, + &:after { + background: $color; + } + } +} + +.blue-btn { + @include colorBtn($blue) +} + +.light-blue-btn { + @include colorBtn($light-blue) +} + +.red-btn { + @include colorBtn($red) +} + +.pink-btn { + @include colorBtn($pink) +} + +.green-btn { + @include colorBtn($green) +} + +.tiffany-btn { + @include colorBtn($tiffany) +} + +.yellow-btn { + @include colorBtn($yellow) +} + +.pan-btn { + font-size: 14px; + color: #fff; + padding: 14px 36px; + border-radius: 8px; + border: none; + outline: none; + transition: 600ms ease all; + position: relative; + display: inline-block; + + &:hover { + background: #fff; + + &:before, + &:after { + width: 100%; + transition: 600ms ease all; + } + } + + &:before, + &:after { + content: ''; + position: absolute; + top: 0; + right: 0; + height: 2px; + width: 0; + transition: 400ms ease all; + } + + &::after { + right: inherit; + top: inherit; + left: 0; + bottom: 0; + } +} + +.custom-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #fff; + color: #fff; + -webkit-appearance: none; + text-align: center; + box-sizing: border-box; + outline: 0; + margin: 0; + padding: 10px 15px; + font-size: 14px; + border-radius: 4px; +} diff --git a/src/assets/styles/eladmin.scss b/src/assets/styles/eladmin.scss new file mode 100644 index 0000000..338cbba --- /dev/null +++ b/src/assets/styles/eladmin.scss @@ -0,0 +1,100 @@ +.head-container { + padding-bottom: 10px; + .filter-item { + display: inline-block; + vertical-align: middle; + margin: 0 2px 10px 0; + input { + height: 30.5px; + line-height: 30.5px; + } + } + .el-select__caret.el-input__icon.el-icon-arrow-up{ + line-height: 30.5px; + } + .date-item { + display: inline-block; + vertical-align: middle; + margin-bottom: 10px; + height: 30.5px; + width: 223px; + } +} +.el-avatar { + display: inline-block; + text-align: center; + background: #ccc; + color: #fff; + white-space: nowrap; + position: relative; + overflow: hidden; + vertical-align: middle; + width: 32px; + height: 32px; + line-height: 32px; + border-radius: 16px; +} + +.logo-con{ + height: 60px; + padding: 13px 0 0; + img{ + height: 32px; + width: 135px; + display: block; + //margin: 0 auto; + } +} + +#el-login-footer { + height: 40px; + line-height: 40px; + position: fixed; + bottom: 0; + width: 100%; + text-align: center; + color: #fff; + font-family: Arial, serif; + font-size: 12px; + letter-spacing: 1px; +} + +#el-main-footer { + background: none repeat scroll 0 0 white; + border-top: 1px solid #e7eaec; + overflow: hidden; + padding: 10px 6px 0 6px; + height: 33px; + font-size: 0.7rem !important; + color: #7a8b9a; + letter-spacing: 0.8px; + font-family: Arial, sans-serif !important; + position: fixed; + bottom: 0; + z-index: 99; + width: 100%; +} +.eladmin-upload { + border: 1px dashed #c0ccda; + border-radius: 5px; + height: 45px; + line-height: 45px; + width: 368px; +} +.my-blockquote{ + margin: 0 0 10px; + padding: 15px; + line-height: 22px; + border-left: 5px solid #00437B; + border-radius: 0 2px 2px 0; + background-color: #f2f2f2; +} +.my-code{ + position: relative; + padding: 15px; + line-height: 20px; + border-left: 5px solid #ddd; + color: #333; + font-family: Courier New, serif; + font-size: 12px +} diff --git a/src/assets/styles/element-ui.scss b/src/assets/styles/element-ui.scss new file mode 100644 index 0000000..8f7881c --- /dev/null +++ b/src/assets/styles/element-ui.scss @@ -0,0 +1,79 @@ +// cover some element-ui styles + +.el-breadcrumb__inner, +.el-breadcrumb__inner a { + font-weight: 400 !important; +} + +.el-upload { + input[type="file"] { + display: none !important; + } +} + +.el-upload__input { + display: none; +} + +.cell { + .el-tag { + margin-right: 0; + } +} + +.small-padding { + .cell { + padding-left: 5px; + padding-right: 5px; + } +} + +.fixed-width { + .el-button--mini { + padding: 7px 10px; + width: 60px; + } +} + +.status-col { + .cell { + padding: 0 10px; + text-align: center; + + .el-tag { + margin-right: 0; + } + } +} + +// to fixed https://github.com/ElemeFE/element/issues/2461 +.el-dialog { + transform: none; + left: 0; + position: relative; + margin: 0 auto; +} + +// refine element ui upload +.upload-container { + .el-upload { + width: 100%; + + .el-upload-dragger { + width: 100%; + height: 200px; + } + } +} + +// dropdown +.el-dropdown-menu { + a { + display: block + } +} + +// fix date-picker ui bug in filter-item +.el-range-editor.el-input__inner { + display: inline-flex !important; +} diff --git a/src/styles/element-variables.scss b/src/assets/styles/element-variables.scss similarity index 90% rename from src/styles/element-variables.scss rename to src/assets/styles/element-variables.scss index 30a0e6b..a4f8c4a 100644 --- a/src/styles/element-variables.scss +++ b/src/assets/styles/element-variables.scss @@ -22,7 +22,7 @@ $--table-border:1px solid#dfe6ec; /* icon font path, required */ $--font-path: '~element-ui/lib/theme-chalk/fonts'; -@import "~element-ui/packages/theme-chalk/src/index"; +@import "../../../node_modules/element-ui/packages/theme-chalk/src/index"; // the :export directive is the magic sauce for webpack // https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass diff --git a/src/assets/styles/index.scss b/src/assets/styles/index.scss new file mode 100644 index 0000000..21fbda1 --- /dev/null +++ b/src/assets/styles/index.scss @@ -0,0 +1,182 @@ +@import 'variables'; +@import 'mixin'; +@import 'transition'; +@import 'element-ui'; +@import 'sidebar'; +@import 'btn'; +@import 'eladmin'; + +body { + height: 100%; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif; +} + +label { + font-weight: 700; +} + +html { + height: 100%; + box-sizing: border-box; +} + +#app { + height: 100%; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +.no-padding { + padding: 0 !important; +} + +.padding-content { + padding: 4px 0; +} + +a:focus, +a:active { + outline: none; +} + +a, +a:focus, +a:hover { + cursor: pointer; + color: inherit; + text-decoration: none; +} + +div:focus { + outline: none; +} + +.fr { + float: right; +} + +.fl { + float: left; +} + +.pr-5 { + padding-right: 5px; +} + +.pl-5 { + padding-left: 5px; +} + +.block { + display: block; +} + +.pointer { + cursor: pointer; +} + +.inlineBlock { + display: block; +} + +.clearfix { + &:after { + visibility: hidden; + display: block; + font-size: 0; + content: " "; + clear: both; + height: 0; + } +} + +aside { + background: #eef1f6; + padding: 8px 24px; + margin-bottom: 20px; + border-radius: 2px; + display: block; + line-height: 32px; + font-size: 16px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + color: #2c3e50; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + a { + color: #337ab7; + cursor: pointer; + + &:hover { + color: rgb(32, 160, 255); + } + } +} + +//main-container全局样式 +.app-container { + padding: 20px 20px 45px 20px; +} + +.components-container { + margin: 30px 50px; + position: relative; +} + +.pagination-container { + margin-top: 30px; +} + +.text-center { + text-align: center +} + +.sub-navbar { + height: 50px; + line-height: 50px; + position: relative; + width: 100%; + text-align: right; + padding-right: 20px; + transition: 600ms ease position; + background: linear-gradient(90deg, rgba(32, 182, 249, 1) 0%, rgba(32, 182, 249, 1) 0%, rgba(33, 120, 241, 1) 100%, rgba(33, 120, 241, 1) 100%); + + .subtitle { + font-size: 20px; + color: #fff; + } + + &.draft { + background: #d0d0d0; + } + + &.deleted { + background: #d0d0d0; + } +} + +.link-type, +.link-type:focus { + color: #337ab7; + cursor: pointer; + + &:hover { + color: rgb(32, 160, 255); + } +} + +//refine vue-multiselect plugin +.multiselect { + line-height: 16px; +} + +.multiselect--active { + z-index: 1000 !important; +} diff --git a/src/assets/styles/mixin.scss b/src/assets/styles/mixin.scss new file mode 100644 index 0000000..06fa061 --- /dev/null +++ b/src/assets/styles/mixin.scss @@ -0,0 +1,66 @@ +@mixin clearfix { + &:after { + content: ""; + display: table; + clear: both; + } +} + +@mixin scrollBar { + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } +} + +@mixin relative { + position: relative; + width: 100%; + height: 100%; +} + +@mixin pct($pct) { + width: #{$pct}; + position: relative; + margin: 0 auto; +} + +@mixin triangle($width, $height, $color, $direction) { + $width: $width/2; + $color-border-style: $height solid $color; + $transparent-border-style: $width solid transparent; + height: 0; + width: 0; + + @if $direction==up { + border-bottom: $color-border-style; + border-left: $transparent-border-style; + border-right: $transparent-border-style; + } + + @else if $direction==right { + border-left: $color-border-style; + border-top: $transparent-border-style; + border-bottom: $transparent-border-style; + } + + @else if $direction==down { + border-top: $color-border-style; + border-left: $transparent-border-style; + border-right: $transparent-border-style; + } + + @else if $direction==left { + border-right: $color-border-style; + border-top: $transparent-border-style; + border-bottom: $transparent-border-style; + } +} diff --git a/src/assets/styles/sidebar.scss b/src/assets/styles/sidebar.scss new file mode 100644 index 0000000..17381fc --- /dev/null +++ b/src/assets/styles/sidebar.scss @@ -0,0 +1,209 @@ +#app { + + .main-container { + min-height: 100%; + transition: margin-left .28s; + margin-left: $sideBarWidth; + position: relative; + } + + .sidebar-container { + transition: width 0.28s; + width: $sideBarWidth !important; + background-color: $menuBg; + height: 100%; + position: fixed; + font-size: 0; + top: 0; + bottom: 0; + left: 0; + z-index: 1001; + overflow: hidden; + + // reset element-ui css + .horizontal-collapse-transition { + transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out; + } + + .scrollbar-wrapper { + overflow-x: hidden !important; + } + + .el-scrollbar__bar.is-vertical { + right: 0; + } + + .el-scrollbar { + height: 100%; + } + + &.has-logo { + .el-scrollbar { + height: calc(100% - 50px); + } + } + + .is-horizontal { + display: none; + } + + a { + display: inline-block; + width: 100%; + overflow: hidden; + } + + .svg-icon { + margin-right: 16px; + } + + .el-menu { + border: none; + height: 100%; + width: 100% !important; + } + + // menu hover + .submenu-title-noDropdown, + .el-submenu__title { + &:hover { + background-color: $menuHover !important; + } + } + + .is-active>.el-submenu__title { + color: $subMenuActiveText !important; + } + + & .nest-menu .el-submenu>.el-submenu__title, + & .el-submenu .el-menu-item { + min-width: $sideBarWidth !important; + background-color: $subMenuBg !important; + + &:hover { + background-color: $subMenuHover !important; + } + } + } + + .hideSidebar { + .sidebar-container { + width: 54px !important; + } + + .main-container { + margin-left: 54px; + } + + .submenu-title-noDropdown { + padding: 0 !important; + position: relative; + + .el-tooltip { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + } + } + + .el-submenu { + overflow: hidden; + + &>.el-submenu__title { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + + .el-submenu__icon-arrow { + display: none; + } + } + } + + .el-menu--collapse { + .el-submenu { + &>.el-submenu__title { + &>span { + height: 0; + width: 0; + overflow: hidden; + visibility: hidden; + display: inline-block; + } + } + } + } + } + + .el-menu--collapse .el-menu .el-submenu { + min-width: $sideBarWidth !important; + } + + // mobile responsive + .mobile { + .main-container { + margin-left: 0; + } + + .sidebar-container { + transition: transform .28s; + width: $sideBarWidth !important; + } + + &.hideSidebar { + .sidebar-container { + pointer-events: none; + transition-duration: 0.3s; + transform: translate3d(-$sideBarWidth, 0, 0); + } + } + } + + .withoutAnimation { + + .main-container, + .sidebar-container { + transition: none; + } + } +} + +// when menu collapsed +.el-menu--vertical { + &>.el-menu { + .svg-icon { + margin-right: 16px; + } + } + + .nest-menu .el-submenu>.el-submenu__title, + .el-menu-item { + &:hover { + // you can use $subMenuHover + background-color: $menuHover !important; + } + } + + // the scroll bar appears when the subMenu is too long + >.el-menu--popup { + max-height: 100vh; + overflow-y: auto; + + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } + } +} diff --git a/src/styles/transition.scss b/src/assets/styles/transition.scss similarity index 87% rename from src/styles/transition.scss rename to src/assets/styles/transition.scss index 8dd9b04..4cb27cc 100644 --- a/src/styles/transition.scss +++ b/src/assets/styles/transition.scss @@ -1,6 +1,6 @@ -//globl transition css +// global transition css -/*fade*/ +/* fade */ .fade-enter-active, .fade-leave-active { transition: opacity 0.28s; @@ -11,21 +11,23 @@ opacity: 0; } -/*fade-transform*/ +/* fade-transform */ .fade-transform-leave-active, .fade-transform-enter-active { transition: all .5s; } + .fade-transform-enter { opacity: 0; transform: translateX(-30px); } + .fade-transform-leave-to { opacity: 0; transform: translateX(30px); } -/*fade*/ +/* breadcrumb transition */ .breadcrumb-enter-active, .breadcrumb-leave-active { transition: all .5s; diff --git a/src/styles/variables.scss b/src/assets/styles/variables.scss similarity index 75% rename from src/styles/variables.scss rename to src/assets/styles/variables.scss index 61e9628..41de79c 100644 --- a/src/styles/variables.scss +++ b/src/assets/styles/variables.scss @@ -1,4 +1,14 @@ -//sidebar +// base color +$blue:#324157; +$light-blue:#3A71A8; +$red:#C03639; +$pink: #E65D6E; +$green: #30B08F; +$tiffany: #4AB7BD; +$yellow:#FEC171; +$panGreen: #30B08F; + +// sidebar $menuText:#bfcbd9; $menuActiveText:#409EFF; $subMenuActiveText:#f4f4f5; // https://github.com/ElemeFE/element/issues/12951 @@ -9,9 +19,7 @@ $menuHover:#263445; $subMenuBg:#1f2d3d; $subMenuHover:#001528; -$sideBarWidth: 193px; - -$hideSidebarWidth: 38px; +$sideBarWidth: 205px; // the :export directive is the magic sauce for webpack // https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass diff --git a/src/components/Breadcrumb/index.vue b/src/components/Breadcrumb/index.vue index 96b78dc..204ea59 100644 --- a/src/components/Breadcrumb/index.vue +++ b/src/components/Breadcrumb/index.vue @@ -1,7 +1,7 @@