├── .babelrc ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .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 └── test.env.js ├── index.html ├── package-lock.json ├── package.json ├── src ├── App.less ├── App.vue ├── assets │ └── logo.png ├── components │ ├── examiner │ │ ├── examiner.js │ │ ├── examiner.less │ │ └── examiner.vue │ ├── header │ │ ├── header.js │ │ ├── header.less │ │ └── header.vue │ ├── nav-menu │ │ ├── NavMenu.js │ │ ├── nav-menu.less │ │ └── nav-menu.vue │ ├── nav-tabs │ │ ├── NavTabs.js │ │ ├── nav-tabs.less │ │ └── nav-tabs.vue │ └── search-bar │ │ └── search-bar.vue ├── core │ └── http.js ├── filters │ ├── filterJson.js │ └── filterString.js ├── main.js ├── pages │ ├── dashboard │ │ └── dashboard.vue │ ├── filialeJudgeManage │ │ ├── filialeJudgeManage.js │ │ └── filialeJudgeManage.vue │ ├── filialeJudgeManageAdd │ │ ├── filialeJudgeManageAdd.js │ │ └── filialeJudgeManageAdd.vue │ ├── filialeJudgeManageDetail │ │ ├── filialeJudgeManageDetail.js │ │ └── filialeJudgeManageDetail.vue │ ├── filialeTask │ │ ├── filialeTask.js │ │ └── filialeTask.vue │ ├── filialeTaskDetail │ │ ├── filialeTaskDetail.js │ │ └── filialeTaskDetail.vue │ ├── filialeVerified │ │ └── filialeVerified.vue │ ├── filialeVerifiedDetail │ │ └── filialeVerifiedDetail.vue │ ├── filialeVerifyManage │ │ └── filialeVerifyManage.vue │ ├── filialeVerifyManageDetail │ │ ├── filialeVerifyManageDetail.js │ │ └── filialeVerifyManageDetail.vue │ ├── indexDefinition │ │ ├── indexDefinition.js │ │ └── indexDefinition.vue │ ├── indexExpression │ │ └── indexExpression.vue │ ├── judgeDetail │ │ └── judgeDetail.vue │ ├── judgeDetailFiliale │ │ ├── judgeDetailFiliale.js │ │ └── judgeDetailFiliale.vue │ ├── judgeDimension │ │ ├── judgeDimension.js │ │ └── judgeDimension.vue │ ├── judgeFiliale │ │ └── judgeFiliale.vue │ ├── judgeManageFiliale │ │ ├── judgeManageFiliale.js │ │ └── judgeManageFiliale.vue │ ├── judgeManagePerson │ │ └── judgeManagePerson.vue │ ├── judgeMethod │ │ ├── judgeMethod.js │ │ └── judgeMethod.vue │ ├── judgePerson │ │ ├── judgePerson.js │ │ └── judgePerson.vue │ ├── judgePersonDetail │ │ └── judgePersonDetail.vue │ ├── launchJudgeFiliale │ │ └── launchJudgeFiliale.vue │ ├── launchJudgePerson │ │ └── launchJudgePerson.vue │ ├── login │ │ └── login.vue │ ├── notfind │ │ └── notfind.vue │ ├── page1 │ │ ├── page1.js │ │ └── page1.vue │ ├── page3 │ │ ├── page3.js │ │ └── page3.vue │ ├── page4 │ │ ├── page4.js │ │ └── page4.vue │ ├── pages.vue │ ├── personJudgeAdd │ │ └── personJudgeAdd.vue │ ├── personJudgeDetail │ │ └── personJudgeDetail.vue │ ├── personJudgeManage │ │ └── personJudgeManage.vue │ ├── personTask │ │ └── personTask.vue │ ├── personTaskDetail │ │ └── personTaskDetail.vue │ ├── personToVerifyDetail │ │ └── personToVerifyDetail.vue │ ├── personVerified │ │ └── personVerified.vue │ ├── personVerifiedDetail │ │ └── personVerifiedDetail.vue │ ├── personVerifyManage │ │ └── personVerifyManage.vue │ └── selfJudgePerson │ │ └── selfJudgePerson.vue ├── router │ └── index.js ├── theme │ ├── alert.css │ ├── aside.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-button.css │ ├── checkbox-group.css │ ├── checkbox.css │ ├── col.css │ ├── collapse-item.css │ ├── collapse.css │ ├── color-picker.css │ ├── container.css │ ├── date-picker.css │ ├── dialog.css │ ├── display.css │ ├── dropdown-item.css │ ├── dropdown-menu.css │ ├── dropdown.css │ ├── fonts │ │ ├── element-icons.ttf │ │ └── element-icons.woff │ ├── footer.css │ ├── form-item.css │ ├── form.css │ ├── header.css │ ├── icon.css │ ├── index.css │ ├── input-number.css │ ├── input.css │ ├── loading.css │ ├── main.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 │ ├── popper.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 │ ├── transfer.css │ ├── tree.css │ └── upload.css └── vuex │ └── store.js ├── static ├── .gitkeep └── iconfont │ ├── demo.css │ ├── demo_fontclass.html │ ├── demo_symbol.html │ ├── demo_unicode.html │ ├── iconfont.css │ ├── iconfont.eot │ ├── iconfont.js │ ├── iconfont.svg │ ├── iconfont.ttf │ └── iconfont.woff ├── test ├── e2e │ ├── custom-assertions │ │ └── elementCount.js │ ├── nightwatch.conf.js │ ├── runner.js │ └── specs │ │ └── test.js └── unit │ ├── .eslintrc │ ├── jest.conf.js │ ├── setup.js │ └── specs │ └── HelloWorld.spec.js └── 需求点.md /.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 | "env": { 13 | "test": { 14 | "presets": ["env", "stage-2"], 15 | "plugins": ["transform-vue-jsx", "transform-es2015-modules-commonjs", "dynamic-import-node"] 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /.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 | /test/unit/coverage/ 6 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | /dist/ 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | /test/unit/coverage/ 8 | /test/e2e/reports/ 9 | selenium-debug.log 10 | 11 | # Editor directories and files 12 | .idea 13 | .vscode 14 | *.suo 15 | *.ntvs* 16 | *.njsproj 17 | *.sln 18 | -------------------------------------------------------------------------------- /.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 | # my-project 2 | 3 | > A Vue.js project 4 | 5 | ## Build Setup 6 | 7 | ``` bash 8 | # install dependencies 9 | npm install 10 | 11 | # serve with hot reload at localhost:8080 12 | npm run dev 13 | 14 | # build for production with minification 15 | npm run build 16 | 17 | # build for production and view the bundle analyzer report 18 | npm run build --report 19 | 20 | # run unit tests 21 | npm run unit 22 | 23 | # run e2e tests 24 | npm run e2e 25 | 26 | # run all tests 27 | npm test 28 | ``` 29 | 30 | For a detailed explanation on how things work, check out the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader). 31 | 32 | > 该系统为某公司个人绩效考评系统 33 | 34 | > 两个人完成所有前端开发,采用vue—axios,从零开始 35 | 36 | ### 规范 37 | 1. 每个页面的大表格用getData()请求。其他需要子啊初始化就要请求的东西,都用get+名字 来请求(大部分post请求不在此列),以上这些请求,写在created里面 38 | 2. 翻页组件里面,当前页用currentPage,总条数用total 39 | 3. 表格渲染 40 | - 表格的表头用以下这种形式 41 | 42 | ``` 43 | // 在 js 文件里面,初始化表格头 44 | tableThead:[ 45 | {name:'指标名称',value:'Indicator_name'}, 46 | {name:'指标定义',value:'Indicator_define'}, 47 | {name:'统计方式',value:'Indicator_count_method'}, 48 | {name:'启用状态',value:'statue'}, 49 | ] 50 | ``` 51 | - 在 vue 文件里面循环表头 52 | 53 | ``` 54 | 59 | 60 | ``` 61 | 4. 请求错误提示统一采用可关闭的 [this.$message](http://element-cn.eleme.io/?#/zh-CN/component/message#ke-guan-bi "this.$message") (在core模块封装,不需要再各个页面处理错误数据) 62 | 63 | 5. 搜索栏的搜索表单对象都为 tableSearch 64 | 65 | 6. 分页规范 66 | 67 | ``` 68 | 76 | 77 | ``` 78 | ``` 79 | page:{ 80 | start_index:1, 81 | total:100 82 | }, 83 | currentPage:1, 84 | total:1000, 85 | timeOut:null, 86 | pageNumber:[10,25,50,100] 87 | // page -> 需要传给后台的 88 | // currentPage -> 当前页码 89 | // total -> 总数据条数,需从后台取 90 | // timeOut -> 定时器,用来清除翻页导致的重复请求 91 | // pageNumber -> 可选的 每页展示多少条数据 92 | ``` 93 | ``` 94 | sizeChange(total){ 95 | this.page.total = total 96 | this.getData() 97 | }, 98 | currentChange(currentPage){ 99 | this.page.start_index = currentPage 100 | this.getData() 101 | } 102 | ``` -------------------------------------------------------------------------------- /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/iProgramme/achievements-vue/cc60303745970776b509a049211b9bcb1a466c22/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 | // devtool: 'cheap-module-eval-source-map', 24 | context: path.resolve(__dirname, '../'), 25 | entry: { 26 | app: './src/main.js' 27 | }, 28 | output: { 29 | path: config.build.assetsRoot, 30 | filename: '[name].js', 31 | publicPath: process.env.NODE_ENV === 'production' 32 | ? config.build.assetsPublicPath 33 | : config.dev.assetsPublicPath 34 | }, 35 | resolve: { 36 | extensions: ['.js', '.vue', '.json','.less'], 37 | alias: { 38 | 'vue$': 'vue/dist/vue.esm.js', 39 | '@': resolve('src'), 40 | } 41 | }, 42 | module: { 43 | rules: [ 44 | // ...(config.dev.useEslint ? [createLintingRule()] : []), 45 | { 46 | test: /\.vue$/, 47 | loader: 'vue-loader', 48 | options: vueLoaderConfig 49 | }, 50 | { 51 | test: /\.js$/, 52 | loader: 'babel-loader', 53 | include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')] 54 | }, 55 | { 56 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 57 | loader: 'url-loader', 58 | options: { 59 | limit: 10000, 60 | name: utils.assetsPath('img/[name].[hash:7].[ext]') 61 | } 62 | }, 63 | { 64 | test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, 65 | loader: 'url-loader', 66 | options: { 67 | limit: 10000, 68 | name: utils.assetsPath('media/[name].[hash:7].[ext]') 69 | } 70 | }, 71 | { 72 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 73 | loader: 'url-loader', 74 | options: { 75 | limit: 10000, 76 | name: utils.assetsPath('fonts/[name].[hash:7].[ext]') 77 | } 78 | }, 79 | { 80 | test:/\.less$/, 81 | loader:"less-loader" 82 | } 83 | ] 84 | }, 85 | node: { 86 | // prevent webpack from injecting useless setImmediate polyfill because Vue 87 | // source contains it (although only uses it if it's native). 88 | setImmediate: false, 89 | // prevent webpack from injecting mocks to Node native modules 90 | // that does not make sense for the client 91 | dgram: 'empty', 92 | fs: 'empty', 93 | net: 'empty', 94 | tls: 'empty', 95 | child_process: 'empty' 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /build/webpack.dev.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const utils = require('./utils') 3 | const webpack = require('webpack') 4 | const config = require('../config') 5 | const merge = require('webpack-merge') 6 | const path = require('path') 7 | const baseWebpackConfig = require('./webpack.base.conf') 8 | const CopyWebpackPlugin = require('copy-webpack-plugin') 9 | const HtmlWebpackPlugin = require('html-webpack-plugin') 10 | const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') 11 | const portfinder = require('portfinder') 12 | 13 | const HOST = process.env.HOST 14 | const PORT = process.env.PORT && Number(process.env.PORT) 15 | 16 | const devWebpackConfig = merge(baseWebpackConfig, { 17 | module: { 18 | rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true }) 19 | }, 20 | // cheap-module-eval-source-map is faster for development 21 | devtool: config.dev.devtool, 22 | 23 | // these devServer options should be customized in /config/index.js 24 | devServer: { 25 | clientLogLevel: 'warning', 26 | historyApiFallback: { 27 | rewrites: [ 28 | { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') }, 29 | ], 30 | }, 31 | hot: true, 32 | contentBase: false, // since we use CopyWebpackPlugin. 33 | compress: true, 34 | host: HOST || config.dev.host, 35 | port: PORT || config.dev.port, 36 | open: config.dev.autoOpenBrowser, 37 | overlay: config.dev.errorOverlay 38 | ? { warnings: false, errors: true } 39 | : false, 40 | publicPath: config.dev.assetsPublicPath, 41 | proxy: config.dev.proxyTable, 42 | quiet: true, // necessary for FriendlyErrorsPlugin 43 | watchOptions: { 44 | poll: config.dev.poll, 45 | } 46 | }, 47 | plugins: [ 48 | new webpack.DefinePlugin({ 49 | 'process.env': require('../config/dev.env') 50 | }), 51 | new webpack.HotModuleReplacementPlugin(), 52 | new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update. 53 | new webpack.NoEmitOnErrorsPlugin(), 54 | // https://github.com/ampedandwired/html-webpack-plugin 55 | new HtmlWebpackPlugin({ 56 | filename: 'index.html', 57 | template: 'index.html', 58 | inject: true 59 | }), 60 | // copy custom static assets 61 | new CopyWebpackPlugin([ 62 | { 63 | from: path.resolve(__dirname, '../static'), 64 | to: config.dev.assetsSubDirectory, 65 | ignore: ['.*'] 66 | } 67 | ]) 68 | ] 69 | }) 70 | 71 | module.exports = new Promise((resolve, reject) => { 72 | portfinder.basePort = process.env.PORT || config.dev.port 73 | portfinder.getPort((err, port) => { 74 | if (err) { 75 | reject(err) 76 | } else { 77 | // publish the new Port, necessary for e2e tests 78 | process.env.PORT = port 79 | // add port to devServer config 80 | devWebpackConfig.devServer.port = port 81 | 82 | // Add FriendlyErrorsPlugin 83 | devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({ 84 | compilationSuccessInfo: { 85 | messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`], 86 | }, 87 | onErrors: config.dev.notifyOnErrors 88 | ? utils.createNotifierCallback() 89 | : undefined 90 | })) 91 | 92 | resolve(devWebpackConfig) 93 | } 94 | }) 95 | }) 96 | -------------------------------------------------------------------------------- /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 | dev: { 9 | 10 | // Paths 11 | assetsSubDirectory: 'static', 12 | assetsPublicPath: '/', 13 | proxyTable: { 14 | '/api/': { 15 | target: 'http://10.10.16.110:3400/api/', 16 | changeOrigin: true, 17 | pathRewrite:{ 18 | '^/api/':'' 19 | } 20 | }, 21 | }, 22 | 23 | // Various Dev Server settings 24 | host: 'localhost', // can be overwritten by process.env.HOST 25 | port: 8080, // 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: true, 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 | -------------------------------------------------------------------------------- /config/test.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const merge = require('webpack-merge') 3 | const devEnv = require('./dev.env') 4 | 5 | module.exports = merge(devEnv, { 6 | NODE_ENV: '"testing"' 7 | }) 8 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | my-project 7 | 8 | 9 |
10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "my-project", 3 | "version": "1.0.0", 4 | "description": "A Vue.js project", 5 | "author": "喻博文 <747137830@qq.com>", 6 | "private": true, 7 | "scripts": { 8 | "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", 9 | "start": "npm run dev", 10 | "unit": "jest --config test/unit/jest.conf.js --coverage", 11 | "e2e": "node test/e2e/runner.js", 12 | "test": "npm run unit && npm run e2e", 13 | "lint": "eslint --ext .js,.vue src test/unit test/e2e/specs", 14 | "build": "node build/build.js" 15 | }, 16 | "dependencies": { 17 | "axios": "^0.18.0", 18 | "less": "^3.0.2", 19 | "less-loader": "^4.1.0", 20 | "vue": "^2.5.2", 21 | "vue-router": "^3.0.1" 22 | }, 23 | "devDependencies": { 24 | "autoprefixer": "^7.1.2", 25 | "babel-core": "^6.22.1", 26 | "babel-eslint": "^8.2.1", 27 | "babel-helper-vue-jsx-merge-props": "^2.0.3", 28 | "babel-jest": "^21.0.2", 29 | "babel-loader": "^7.1.1", 30 | "babel-plugin-dynamic-import-node": "^1.2.0", 31 | "babel-plugin-syntax-jsx": "^6.18.0", 32 | "babel-plugin-transform-es2015-modules-commonjs": "^6.26.0", 33 | "babel-plugin-transform-runtime": "^6.22.0", 34 | "babel-plugin-transform-vue-jsx": "^3.5.0", 35 | "babel-preset-env": "^1.3.2", 36 | "babel-preset-stage-2": "^6.22.0", 37 | "babel-register": "^6.22.0", 38 | "chalk": "^2.0.1", 39 | "chromedriver": "^2.27.2", 40 | "copy-webpack-plugin": "^4.0.1", 41 | "cross-spawn": "^5.0.1", 42 | "css-loader": "^0.28.0", 43 | "element-ui": "^2.0.0-rc.1", 44 | "eslint": "^4.15.0", 45 | "eslint-config-standard": "^10.2.1", 46 | "eslint-friendly-formatter": "^3.0.0", 47 | "eslint-loader": "^1.7.1", 48 | "eslint-plugin-import": "^2.7.0", 49 | "eslint-plugin-node": "^5.2.0", 50 | "eslint-plugin-promise": "^3.4.0", 51 | "eslint-plugin-standard": "^3.0.1", 52 | "eslint-plugin-vue": "^4.0.0", 53 | "extract-text-webpack-plugin": "^3.0.0", 54 | "file-loader": "^1.1.4", 55 | "friendly-errors-webpack-plugin": "^1.6.1", 56 | "html-webpack-plugin": "^2.30.1", 57 | "jest": "^22.0.4", 58 | "jest-serializer-vue": "^0.3.0", 59 | "nightwatch": "^0.9.12", 60 | "node-notifier": "^5.1.2", 61 | "optimize-css-assets-webpack-plugin": "^3.2.0", 62 | "ora": "^1.2.0", 63 | "portfinder": "^1.0.13", 64 | "postcss-import": "^11.0.0", 65 | "postcss-loader": "^2.0.8", 66 | "postcss-url": "^7.2.1", 67 | "rimraf": "^2.6.0", 68 | "selenium-server": "^3.0.1", 69 | "semver": "^5.3.0", 70 | "shelljs": "^0.7.6", 71 | "uglifyjs-webpack-plugin": "^1.1.1", 72 | "url-loader": "^0.5.8", 73 | "vue-jest": "^1.0.2", 74 | "vue-loader": "^13.3.0", 75 | "vue-style-loader": "^3.0.1", 76 | "vue-template-compiler": "^2.5.2", 77 | "vuex": "^3.0.1", 78 | "webpack": "^3.6.0", 79 | "webpack-bundle-analyzer": "^2.9.0", 80 | "webpack-dev-server": "^2.9.1", 81 | "webpack-merge": "^4.1.0" 82 | }, 83 | "engines": { 84 | "node": ">= 6.0.0", 85 | "npm": ">= 3.0.0" 86 | }, 87 | "browserslist": [ 88 | "> 1%", 89 | "last 2 versions", 90 | "not ie <= 8" 91 | ] 92 | } 93 | -------------------------------------------------------------------------------- /src/App.less: -------------------------------------------------------------------------------- 1 | html,body{ 2 | margin:0px; 3 | padding:0px; 4 | height: 100%; 5 | overflow: hidden; 6 | } 7 | html,body,div,ul,li,ol{ 8 | box-sizing: border-box 9 | } 10 | 11 | #app { 12 | font-family: 'Avenir', Helvetica, Arial, sans-serif; 13 | -webkit-font-smoothing: antialiased; 14 | -moz-osx-font-smoothing: grayscale; 15 | color: #2c3e50; 16 | height: 100%; 17 | overflow: hidden; 18 | } 19 | 20 | .fl{float: left;} 21 | .fr{float: right;} 22 | .clear:before, .clear:after {content: ""; display: table;} 23 | .clear:after {clear: both;} 24 | .clear{*zoom: 1;overflow: hidden;} 25 | .child-float li{float: left;padding-right: 30px;} 26 | .disN{display: none!important;} 27 | .over-hidden{overflow: hidden;} 28 | .border-right{border-right: solid 1px #e6e6e6} 29 | ul,ol,li{list-style: none;} 30 | a{text-decoration: none;color:#000} 31 | 32 | // 变量 33 | .text-center{ 34 | text-align: center; 35 | } 36 | @borderColor:#d8dce5; 37 | @buttonColor:#b09573; 38 | @buttonFocusColor:#a2835c; 39 | 40 | // 按钮样式 41 | button.el-button--primary{ 42 | border-color:@buttonColor; 43 | background:@buttonColor; 44 | &:focus,&:hover{ 45 | background:@buttonFocusColor; 46 | border-color:@buttonFocusColor; 47 | } 48 | } 49 | // 首个tab不可关闭 50 | .el-tabs__nav > div:first-child > span{ 51 | display: none; 52 | } 53 | 54 | // 横条,透明 55 | .main-space{ 56 | height: 20px; 57 | background: transparent; 58 | } 59 | // 通用搜索表单域 60 | form.el-form{ 61 | position: relative; 62 | .el-form-item{ 63 | width: 20%; 64 | } 65 | .open-dialog{ 66 | width: 20%; 67 | position: absolute; 68 | right: 0; 69 | top: 0; 70 | text-align: right; 71 | } 72 | .el-form-item.is-success .el-input__inner{ 73 | border-color:@borderColor; 74 | } 75 | } 76 | // 通用表格样式 77 | table[class^='el-table']{ 78 | th,td{ 79 | .text-center 80 | } 81 | } 82 | // 通用分页样式 83 | .el-pagination{ 84 | .text-center; 85 | } 86 | // 通用弹窗样式 87 | .performance-dialog{ 88 | form.demo-ruleForm{ 89 | width: 420px; 90 | .el-form-item{ 91 | width: auto; 92 | } 93 | } 94 | .el-dialog{ 95 | margin-top: 0!important; 96 | top: 50%; 97 | transform: translateY(-50%) 98 | } 99 | } 100 | // 通用返回样式 101 | .back-page{ 102 | padding:40px 103 | } 104 | // 通用表格下的表单 105 | .follow-table{ 106 | border:1px solid #bebebe; 107 | border-top: 0; 108 | padding:10px 20px; 109 | form.el-form{ 110 | .el-form-item{ 111 | width: 100% 112 | } 113 | .el-form-item.is-success{ 114 | .el-input__inner,.el-textarea__inner{ 115 | border-color:@borderColor; 116 | } 117 | } 118 | } 119 | } 120 | .el-form-item.is-success .el-input__validateIcon{ 121 | display: none; 122 | } -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 17 | -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iProgramme/achievements-vue/cc60303745970776b509a049211b9bcb1a466c22/src/assets/logo.png -------------------------------------------------------------------------------- /src/components/examiner/examiner.js: -------------------------------------------------------------------------------- 1 | export default { 2 | data() { 3 | return { 4 | examinerList: [ 5 | {name: 'qq'} 6 | ], 7 | plusShow: true, // 添加考评人+是否显示 8 | tableObject:{}, // 下载 9 | // outerVisible: this.item, 10 | innerVisible: false,// 二级弹框 11 | valuedate: '', 12 | fileList: [], // 上传文件列表 13 | gridData: [ // 考评人列表 14 | { 15 | index: '2016-05-02', 16 | name2: '王小虎', 17 | name3: '上海市普陀区金沙江路 1518 弄', 18 | name4: '2016-05-04' 19 | }, 20 | { 21 | index: '2016-05-02', 22 | name2: '王小虎', 23 | name3: '上海市普陀区金沙江路 1518 弄', 24 | name4: '2016-05-04' 25 | }, 26 | { 27 | index: '2016-05-02', 28 | name2: '王小虎', 29 | name3: '上海市普陀区金沙江路 1518 弄', 30 | name4: '2016-05-04' 31 | }, 32 | { 33 | index: '2016-05-02', 34 | name2: '王小虎', 35 | name3: '上海市普陀区金沙江路 1518 弄', 36 | name4: '2016-05-04' 37 | }, 38 | ], 39 | }; 40 | }, 41 | props:['obj'], // 组件传值 42 | methods: { 43 | // 删除考评人 44 | deleteExaminer(index) { 45 | this.examinerList.splice(index,1); 46 | this.plusShow = true 47 | }, 48 | // 下载 49 | download() { 50 | 51 | }, 52 | // 导入excel 53 | importData() { 54 | 55 | }, 56 | // 当前选中第几行 57 | setCurrent(row) { 58 | this.$refs.singleTable.setCurrentRow(row); 59 | }, 60 | // 考评人单选 61 | handleCurrentChange(val) { 62 | this.currentRow = val; 63 | this.innerVisible = false; 64 | // 添加考评人 65 | this.dialogVisible2 = true 66 | if(this.examinerList.length < 4) { 67 | this.examinerList.push({name:this.currentRow.name2}); 68 | } 69 | if(this.examinerList.length == 4) { 70 | this.plusShow = false 71 | console.log(this.plusShow) 72 | } 73 | }, 74 | }, 75 | created(){ 76 | 77 | console.log(this.item) 78 | }, 79 | 80 | } -------------------------------------------------------------------------------- /src/components/examiner/examiner.less: -------------------------------------------------------------------------------- 1 | .item-examiner { 2 | float: left; 3 | } 4 | .examiner { 5 | float: left; 6 | width: 35px; 7 | height: 35px; 8 | border-radius: 50%; 9 | border: 1px solid #ddd; 10 | position: relative; 11 | } 12 | .el-icon-error { 13 | position: absolute; 14 | top: -4px; 15 | right: -4px; 16 | cursor: pointer; 17 | } 18 | .el-icon-back { 19 | margin: 0 5px; 20 | transform:rotate(180deg); 21 | -ms-transform:rotate(180deg); /* IE 9 */ 22 | -moz-transform:rotate(180deg); /* Firefox */ 23 | -webkit-transform:rotate(180deg); /* Safari 和 Chrome */ 24 | -o-transform:rotate(180deg); 25 | } 26 | .el-icon-plus { 27 | margin-left: 9px; 28 | } 29 | .plus-examiner { 30 | cursor: pointer; 31 | border: 1px dotted #ddd; 32 | } 33 | .examiner-name { 34 | text-align: center; 35 | } -------------------------------------------------------------------------------- /src/components/examiner/examiner.vue: -------------------------------------------------------------------------------- 1 | 57 | 63 | 66 | -------------------------------------------------------------------------------- /src/components/header/header.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: 'my-header', 3 | data() { 4 | return { 5 | msg:'lkjhgfhj' 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /src/components/header/header.less: -------------------------------------------------------------------------------- 1 | .headers{ 2 | text-align: left; 3 | background: yellow; 4 | height: 80px; 5 | span{ 6 | font-size: 20px; 7 | } 8 | } -------------------------------------------------------------------------------- /src/components/header/header.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 14 | 15 | 16 | 19 | -------------------------------------------------------------------------------- /src/components/nav-menu/NavMenu.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: 'navMenu', 3 | data:function() { 4 | return { 5 | routerNavslist:[], 6 | routerName: {}, 7 | isCollapse:false, 8 | defaultActiveNow:'' 9 | } 10 | }, 11 | methods: { 12 | handleOpen(key, keyPath) { 13 | console.log(key, keyPath); 14 | }, 15 | handleClose(key, keyPath) { 16 | console.log(key, keyPath); 17 | }, 18 | add(routerName){ 19 | this.routerName = routerName 20 | this.$router.push({path:routerName.url}) 21 | this.$store.commit('setRouterName',routerName) 22 | }, 23 | getData(){ 24 | let url = this.$route.path.replace('Detail','').replace('Add','').replace('Check','') 25 | console.log(url); 26 | 27 | setTimeout(()=>{ 28 | this.routerNavslist = [ 29 | { 30 | name:'一级菜单1', 31 | children:[ 32 | {name:'/dashboard',url:'/dashboard',title:'首页'}, 33 | {name:'/page1',url:'/page1',title:'页面1'}, 34 | {name:'/page3',url:'/page3',title:'页面3'}, 35 | ] 36 | }, 37 | { 38 | name:'考核任务管理', 39 | children:[ 40 | {name:'/filialeTask',url:'/filialeTask',title:'分公司任务管理'}, 41 | {name:'/personTask',url:'/personTask',title:'客户经理任务管理'}, 42 | ] 43 | }, 44 | { 45 | name:'考核管理', 46 | children:[ 47 | {name:'/judgeManageFiliale',url:'/judgeManageFiliale',title:'考核管理-分公司'}, 48 | {name:'/judgeManagePerson',url:'/judgeManagePerson',title:'考核管理-个人'} 49 | ] 50 | }, 51 | { 52 | name:'考核方案配置', 53 | children:[ 54 | {name:'/page4',url:'/page4',title:'页面4'}, 55 | {name:'/indexDefinition',url:'/indexDefinition',title:'指标定义维护'}, 56 | {name:'/judgeMethod',url:'/judgeMethod',title:'考核办法维护'}, 57 | {name:'/judgeDimension',url:'/judgeDimension',title:'考核维度维护'}, 58 | {name:'/judgeDetail',url:'/judgeDetail',title:'考核细项维护'}, 59 | {name:'/filialeJudgeManage',url:'/filialeJudgeManage',title:'分公司考核方案管理'}, 60 | ] 61 | }, 62 | { 63 | name:'考核方案审核', 64 | children:[ 65 | {name:'/filialeVerifyManage',url:'/filialeVerifyManage',title:'分公司考核方案管理'}, 66 | // {name:'/filialeVerifyManageDetail',url:'/filialeVerifyManageDetail',title:'分公司考核方案-审核'}, 67 | ] 68 | }, 69 | 70 | 71 | ] 72 | let activePage = {} 73 | this.routerNavslist.find((item)=>{ 74 | activePage = item.children.find(list=>list.url == url) 75 | if(activePage){ 76 | return true 77 | } 78 | }) 79 | setTimeout(() => { 80 | this.defaultActiveNow = activePage.url 81 | }, 0); 82 | console.log(activePage); 83 | this.$store.commit('setRouterName',activePage) 84 | // this.$store.commit('sendRouters',this.routerNavslist) 85 | },100) 86 | } 87 | }, 88 | created(){ 89 | this.getData() 90 | } 91 | } -------------------------------------------------------------------------------- /src/components/nav-menu/nav-menu.less: -------------------------------------------------------------------------------- 1 | 2 | .el-menu-vertical-demo:not(.el-menu--collapse) { 3 | // width: 200px; 4 | min-height: 400px; 5 | } 6 | -------------------------------------------------------------------------------- /src/components/nav-menu/nav-menu.vue: -------------------------------------------------------------------------------- 1 | 27 | 28 | 34 | 35 | 36 | 39 | -------------------------------------------------------------------------------- /src/components/nav-tabs/NavTabs.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: 'navTabs', 3 | data() { 4 | return { 5 | activeTab: '', 6 | editableTabs2: [{title:'首页',name:'/dashboard',url:'/dashboard'}], 7 | tabIndex: 0, 8 | } 9 | }, 10 | methods: { 11 | // 点自己,跳转到对应的路由的页面 12 | jumpToTab() { 13 | this.$router.push({path:this.activeTab}) 14 | }, 15 | // 移除tab 16 | removeTab(targetName) { 17 | console.log(this.$store.state); 18 | let obj; 19 | let arr = this.$store.state.navTabs; 20 | // 判断是否为当前页 21 | if (targetName == this.activeTab) { 22 | let index = arr.findIndex(item=>item.url == targetName) 23 | obj = arr[index+1] || arr[index-1]; 24 | setTimeout(() => { 25 | this.activeTab = obj.url 26 | this.$router.push({path:obj.url}) 27 | }, 0); 28 | }else{ 29 | this.$router.push({path:targetName}) 30 | } 31 | this.$store.commit('deleteRouterName',targetName) 32 | 33 | } 34 | 35 | }, 36 | watch:{ 37 | 38 | }, 39 | computed:{ 40 | editableTabs(){ 41 | this.activeTab = this.$store.state.routerName.url 42 | return this.$store.state.navTabs 43 | } 44 | } 45 | } -------------------------------------------------------------------------------- /src/components/nav-tabs/nav-tabs.less: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iProgramme/achievements-vue/cc60303745970776b509a049211b9bcb1a466c22/src/components/nav-tabs/nav-tabs.less -------------------------------------------------------------------------------- /src/components/nav-tabs/nav-tabs.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 25 | 26 | 27 | 30 | -------------------------------------------------------------------------------- /src/components/search-bar/search-bar.vue: -------------------------------------------------------------------------------- 1 | 14 | 32 | 33 | -------------------------------------------------------------------------------- /src/core/http.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios' 2 | import message from 'element-ui' 3 | let params = {appppp:1111} 4 | axios.defaults.params = Object.assign({}, params) 5 | // console.log(axios.defaults); 6 | // axios.defaults.baseURL = 'http://192.168.2.1:3000/' 7 | // axios.defaults.baseURL = 'http://10.10.16.110:3400/api/' 8 | axios.interceptors.response.use((response) => { 9 | if(response){ 10 | if (response.status == 200) { 11 | return response.data 12 | } 13 | if (response.status == 304) { 14 | console.log('没权限'); 15 | return response 16 | } 17 | if(response.state == '0'){ 18 | message.Message({ 19 | showClose: true, 20 | message: '请求失败', 21 | type: 'error' 22 | }); 23 | } 24 | } 25 | return response; 26 | }, function (error) { 27 | message.Message({ 28 | showClose: true, 29 | message: '网络原因,请求失败,请检查网络设置', 30 | type: 'error' 31 | }); 32 | if (error.response) { 33 | // console.error(error); 34 | }else{ 35 | // console.error(error.message); 36 | } 37 | return {} 38 | }); 39 | export default axios -------------------------------------------------------------------------------- /src/filters/filterJson.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | Vue.filter('filterJson', function (value) { 3 | return JSON.stringify(value) 4 | }) -------------------------------------------------------------------------------- /src/filters/filterString.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | Vue.filter('filterString', function (value) { 3 | return value ? 'flag为true' : 'flag为false' 4 | }) -------------------------------------------------------------------------------- /src/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 | import 'element-ui/lib/theme-chalk/index.css' 7 | // import './theme/index.css' 8 | import ElementUI from 'element-ui' 9 | import http from './core/http'; 10 | // 自定义过滤器 11 | import filterString from './filters/filterString' 12 | import filterJson from './filters/filterJson' 13 | // 状态管理 14 | import Vuex from 'vuex' 15 | import store from './vuex/store' 16 | // 阻止 vue 在启动时生成生产提示 17 | Vue.config.productionTip = false 18 | 19 | Vue.use(ElementUI,{ size: 'small' }) 20 | Vue.use(Vuex) 21 | 22 | console.log('Vue.version:'+Vue.version); 23 | // 需对http进行一些处理 24 | Vue.prototype.$http = http 25 | new Vue({ 26 | el: '#app', 27 | router, 28 | store, 29 | components: { 30 | 'App': App, 31 | }, 32 | template: '', 33 | render: h => h(App) 34 | }) 35 | 36 | 37 | -------------------------------------------------------------------------------- /src/pages/dashboard/dashboard.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 24 | 25 | 26 | 51 | -------------------------------------------------------------------------------- /src/pages/filialeJudgeManage/filialeJudgeManage.js: -------------------------------------------------------------------------------- 1 | export default { 2 | data() { 3 | return { 4 | // 搜索参数 5 | tableSearch:{ 6 | templete_name:'', 7 | templete_check_statue:0, 8 | statue:0 9 | }, 10 | // 表格数据 11 | tableData:[ 12 | {templete_name:'1',creator_user_id:'1',create_time:'1',templete_name:'111',templete_check_statue:1,statue:1}, 13 | {templete_name:'1',creator_user_id:'1',create_time:'1',templete_name:'111',templete_check_statue:1,statue:1}, 14 | {templete_name:'1',creator_user_id:'1',create_time:'1',templete_name:'111',templete_check_statue:1,statue:0}, 15 | {templete_name:'1',creator_user_id:'1',create_time:'1',templete_name:'111',templete_check_statue:0,statue:1}, 16 | {templete_name:'1',creator_user_id:'1',create_time:'1',templete_name:'111',templete_check_statue:1,statue:1}, 17 | {templete_name:'1',creator_user_id:'1',create_time:'1',templete_name:'111',templete_check_statue:1,statue:0}, 18 | {templete_name:'1',creator_user_id:'1',create_time:'1',templete_name:'111',templete_check_statue:0,statue:1}, 19 | {templete_name:'1',creator_user_id:'1',create_time:'1',templete_name:'111',templete_check_statue:1,statue:1}, 20 | ], 21 | tableThead:[ 22 | {name:'考核方案名称',value:'templete_name'}, 23 | {name:'创建人',value:'creator_user_id'}, 24 | {name:'创建时间',value:'create_time'}, 25 | {name:'审核状态',value:'templete_check_statue'}, 26 | {name:'启用状态',value:'statue'}, 27 | ], 28 | // 审核状态 29 | templeteCheckStatueList:[ 30 | {name:'未审核',id:0}, 31 | {name:'通过',id:2}, 32 | {name:'退回',id:1}, 33 | ], 34 | // 使用状态 35 | statueList:[ 36 | {name:'启用',id:1}, 37 | {name:'停用',id:0}, 38 | ], 39 | // 翻页 40 | page:{ 41 | start_index:1, 42 | total:100 43 | }, 44 | currentPage:1, 45 | total:1000, 46 | timeOut:null, 47 | pageNumber:[10,25,50,100] 48 | }; 49 | }, 50 | methods: { 51 | // 请求表格 52 | getData(type){ 53 | let defaultParams = { 54 | start_index: this.page.start_index, 55 | total:this.page.total 56 | } 57 | let params = Object.assign(defaultParams,this.tableSearch) 58 | clearTimeout(this.timeOut) 59 | this.timeOut = setTimeout(() => { 60 | this.$http.get('/api/templeteapi/gettemplete',{params:params}).then((result) => { 61 | console.log(result); 62 | this.arr = result 63 | }).catch((err)=>{ 64 | 65 | }) 66 | }, 0); 67 | }, 68 | // 翻页 69 | sizeChange(total){ 70 | this.page.total = total 71 | this.getData() 72 | }, 73 | currentChange(currentPage){ 74 | this.page.start_index = currentPage 75 | this.getData() 76 | }, 77 | // 启用/停用 78 | changeStatue(item){ 79 | let params = { 80 | id:item.id, 81 | statue:!item.statue 82 | } 83 | this.$http.post('/api/templeteapi/changetempletestatue',{params:params}).then((result) => { 84 | console.log(result); 85 | this.getData() 86 | }).catch((err)=>{ 87 | 88 | }) 89 | }, 90 | // 去新增页 91 | routerToAdd(){ 92 | this.$router.push({path:'/filialeJudgeManageAdd'}) 93 | }, 94 | // 去详情页 95 | routerToDetail(item){ 96 | console.log(item); 97 | this.$router.push({path:'/filialeJudgeManageDetail'}) 98 | }, 99 | // 清除搜索条件 100 | resetForm(formName){ 101 | this.$refs[formName].resetFields() 102 | } 103 | }, 104 | created(){ 105 | this.getData() 106 | } 107 | } -------------------------------------------------------------------------------- /src/pages/filialeJudgeManage/filialeJudgeManage.vue: -------------------------------------------------------------------------------- 1 | 64 | 65 | 71 | 72 | 73 | 76 | -------------------------------------------------------------------------------- /src/pages/filialeJudgeManageAdd/filialeJudgeManageAdd.vue: -------------------------------------------------------------------------------- 1 | 91 | 92 | 98 | 99 | 100 | 103 | -------------------------------------------------------------------------------- /src/pages/filialeJudgeManageDetail/filialeJudgeManageDetail.js: -------------------------------------------------------------------------------- 1 | export default { 2 | data() { 3 | return { 4 | tableData3: [{ 5 | name1: '2016-05-03', 6 | name2: '王小虎1', 7 | name3: '上海', 8 | name4: '普陀区', 9 | name5: '上海市普陀区金沙江路 1518 弄', 10 | span:2 11 | }, 12 | { 13 | name1: '2016-05-03', 14 | name2: '王小虎1', 15 | name3: '上海', 16 | name4: '普陀区', 17 | name5: '上海市普陀区金沙江路 1518 弄', 18 | span:0 19 | }, 20 | { 21 | name1: '2016-05-04', 22 | name2: '王小虎1', 23 | name3: '上海', 24 | name4: '普陀区', 25 | name5: '上海市普陀区金沙江路 1518 弄', 26 | span:2 27 | }, 28 | { 29 | name1: '2016-05-04', 30 | name2: '王小虎1', 31 | name3: '上海', 32 | name4: '普陀区', 33 | name5: '上海市普陀区金沙江路 1518 弄', 34 | span:0 35 | }, 36 | { 37 | name1: '2016-05-05', 38 | name2: '王小虎1', 39 | name3: '上海', 40 | name4: '普陀区', 41 | name5: '上海市普陀区金沙江路 1518 弄', 42 | span:1 43 | }, 44 | { 45 | name1: '2016-05-06', 46 | name2: '王小虎1', 47 | name3: '上海', 48 | name4: '普陀区', 49 | name5: '上海市普陀区金沙江路 1518 弄', 50 | span:1 51 | }], 52 | 53 | } 54 | 55 | }, 56 | methods: { 57 | getData(){ 58 | 59 | }, 60 | objectSpanMethod({ row, column, rowIndex, columnIndex }) { 61 | if (columnIndex === 0) { 62 | if(row.span != 0) { 63 | return { 64 | rowspan: row.span, 65 | colspan: 1 66 | }; 67 | }else if(row.span == 0){ 68 | return { 69 | rowspan: 0, 70 | colspan: 0 71 | }; 72 | } 73 | } 74 | }, 75 | // 返回 76 | backPage(){ 77 | this.$router.push({path:'/filialeJudgeManage'}) 78 | } 79 | 80 | } 81 | } -------------------------------------------------------------------------------- /src/pages/filialeJudgeManageDetail/filialeJudgeManageDetail.vue: -------------------------------------------------------------------------------- 1 | 38 | 39 | 45 | 46 | 47 | 50 | -------------------------------------------------------------------------------- /src/pages/filialeTask/filialeTask.vue: -------------------------------------------------------------------------------- 1 | 105 | 106 | 112 | 113 | 114 | 117 | -------------------------------------------------------------------------------- /src/pages/filialeTaskDetail/filialeTaskDetail.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: 'filialeTaskDetail', 3 | data() { 4 | return { 5 | tableData3:[ 6 | { 7 | name1: '2016-05-03', 8 | name2: '王小虎1', 9 | name3: '上海', 10 | name4: '普陀区', 11 | name5: '普陀区', 12 | name6: '普陀区', 13 | name7: '普陀区', 14 | name8: '普陀区', 15 | name9: '普陀区', 16 | name10: '普陀区', 17 | name11: '普陀区', 18 | name12: '普陀区', 19 | name13: '普陀区', 20 | name14: '普陀区', 21 | name15: '上海市普陀区金沙江路 1518 弄', 22 | }, 23 | 24 | ], 25 | activeName: 'first2', 26 | yearTask:[ 27 | {name:'序号',value:'name1'}, 28 | {name:'分公司',value:'name2'}, 29 | {name:'全年任务指标',value:'name3'}, 30 | {name:'1月任务分解数',value:'name4'}, 31 | {name:'2月任务分解数',value:'name5'}, 32 | {name:'3月任务分解数',value:'name6'}, 33 | {name:'4月任务分解数',value:'name7'}, 34 | {name:'5月任务分解数',value:'name8'}, 35 | {name:'6月任务分解数',value:'name9'}, 36 | {name:'7月任务分解数',value:'name10'}, 37 | {name:'8月任务分解数',value:'name11'}, 38 | {name:'9月任务分解数',value:'name12'}, 39 | {name:'10月任务分解数',value:'name13'}, 40 | {name:'11月任务分解数',value:'name14'}, 41 | {name:'12月任务分解数',value:'name15'}, 42 | ], 43 | financeProduct:[ 44 | {name:'序号',value:'name1'}, 45 | {name:'分公司',value:'name2'}, 46 | {name:'业务量(万)',value:'name3'}, 47 | {name:'传统新车(万)',value:'name4'}, 48 | {name:'易融贷(万)',value:'name5'}, 49 | {name:'公牌私贷(万)',value:'name6'}, 50 | {name:'车主贷(万)',value:'name7'}, 51 | {name:'融资租赁(万)',value:'name8'}, 52 | {name:'二手车(万)',value:'name9'}, 53 | ], 54 | bankType:[ 55 | {name:'序号',value:'name1'}, 56 | {name:'分公司',value:'name2'}, 57 | {name:'业务量(万)',value:'name3'}, 58 | {name:'宁波工行(万)',value:'name4'}, 59 | {name:'安徽工行(万)',value:'name5'}, 60 | {name:'建设银行(万)',value:'name6'}, 61 | {name:'广东工行(万)',value:'name7'}, 62 | {name:'广东工行(万)',value:'name8'}, 63 | {name:'其他银行(万)',value:'name9'}, 64 | {name:'其他银行(万)',value:'name10'}, 65 | ] 66 | } 67 | }, 68 | methods: { 69 | backPage(){ 70 | this.$router.push({path:'/filialeTask'}) 71 | } 72 | }, 73 | activated:function(){ 74 | console.log(this.$route.query.id); 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /src/pages/filialeTaskDetail/filialeTaskDetail.vue: -------------------------------------------------------------------------------- 1 | 54 | 55 | 61 | 62 | 63 | 66 | -------------------------------------------------------------------------------- /src/pages/filialeVerified/filialeVerified.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 15 | 16 | 17 | 20 | -------------------------------------------------------------------------------- /src/pages/filialeVerifiedDetail/filialeVerifiedDetail.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 15 | 16 | 17 | 20 | -------------------------------------------------------------------------------- /src/pages/filialeVerifyManage/filialeVerifyManage.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 23 | 24 | 25 | 28 | -------------------------------------------------------------------------------- /src/pages/filialeVerifyManageDetail/filialeVerifyManageDetail.js: -------------------------------------------------------------------------------- 1 | export default { 2 | data() { 3 | return { 4 | // 搜索参数 5 | tableSearch:{ 6 | 7 | }, 8 | // 表格数据 9 | tableData:[ 10 | {name1:'111',name2:'222',name3:'333',name4:'444',status:1}, 11 | {name1:'222',name2:'222',name3:'333',name4:'444',status:1}, 12 | {name1:'333',name2:'222',name3:'333',name4:'444',status:0}, 13 | {name1:'444',name2:'222',name3:'333',name4:'444',status:1}, 14 | {name1:'555',name2:'222',name3:'333',name4:'444',status:0}, 15 | {name1:'666',name2:'222',name3:'333',name4:'444',status:1}, 16 | {name1:'777',name2:'222',name3:'333',name4:'444',status:0}, 17 | ], 18 | // 翻页 19 | currentPage4:1, 20 | radio:'1', 21 | textarea3:'', 22 | // flag为 true 时,为详情。false时为考核 23 | flag:true, 24 | dataapp:[ 25 | {name:'考核维度',model:'name1'}, 26 | {name:'细项指标',model:'name2'}, 27 | {name:'基础分值',model:'name3'}, 28 | {name:'指标公式',model:'name4'}, 29 | {name:'考核办法',model:'status'}, 30 | ] 31 | 32 | 33 | }; 34 | }, 35 | methods: { 36 | backPage(){ 37 | this.$router.push({path:'/filialeVerifyManage'}) 38 | }, 39 | submitTable(){ 40 | this.$confirm('提交后将无法修改, 是否继续?', '提示', { 41 | confirmButtonText: '确定', 42 | cancelButtonText: '取消', 43 | type: 'warning' 44 | }).then(() => { 45 | this.$message({ 46 | type: 'success', 47 | message: '删除成功!' 48 | }); 49 | }).catch(() => { 50 | this.$message({ 51 | type: 'info', 52 | message: '已取消删除' 53 | }); 54 | }); 55 | } 56 | } 57 | } -------------------------------------------------------------------------------- /src/pages/filialeVerifyManageDetail/filialeVerifyManageDetail.vue: -------------------------------------------------------------------------------- 1 | 49 | 50 | 56 | 57 | 58 | 61 | -------------------------------------------------------------------------------- /src/pages/indexDefinition/indexDefinition.vue: -------------------------------------------------------------------------------- 1 | 80 | 81 | 87 | 88 | 89 | 92 | -------------------------------------------------------------------------------- /src/pages/indexExpression/indexExpression.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 15 | 16 | 17 | 20 | -------------------------------------------------------------------------------- /src/pages/judgeDetail/judgeDetail.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 15 | 16 | 17 | 20 | -------------------------------------------------------------------------------- /src/pages/judgeDetailFiliale/judgeDetailFiliale.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iProgramme/achievements-vue/cc60303745970776b509a049211b9bcb1a466c22/src/pages/judgeDetailFiliale/judgeDetailFiliale.js -------------------------------------------------------------------------------- /src/pages/judgeDetailFiliale/judgeDetailFiliale.vue: -------------------------------------------------------------------------------- 1 | 45 | 46 | 89 | 90 | 91 | 94 | -------------------------------------------------------------------------------- /src/pages/judgeDimension/judgeDimension.js: -------------------------------------------------------------------------------- 1 | export default { 2 | data() { 3 | return { 4 | // 搜索参数 5 | tableSearch:{ 6 | dimension_name:'', 7 | count_method:'' 8 | }, 9 | // 表格数据 10 | tableData:[ 11 | {dimension_name:'111',statue:1}, 12 | {dimension_name:'111',statue:1}, 13 | {dimension_name:'111',statue:0}, 14 | {dimension_name:'111',statue:1}, 15 | {dimension_name:'111',statue:1}, 16 | {dimension_name:'111',statue:0}, 17 | {dimension_name:'111',statue:1}, 18 | {dimension_name:'111',statue:1}, 19 | ], 20 | tableThead:[ 21 | {name:'维度名称',value:'dimension_name'}, 22 | {name:'启用状态',value:'statue'}, 23 | ], 24 | // 弹窗 25 | tableObject:{ 26 | dimension_name:'', 27 | check_method_define:'', 28 | count_method:'' 29 | }, 30 | dialogVisible:false, 31 | // 弹窗 - 必填项校验 32 | rules:{ 33 | dimension_name:[{required:true,message:'请输入维度名称',trigger:'blur'}], 34 | }, 35 | // 翻页 36 | page:{ 37 | start_index:1, 38 | total:100 39 | }, 40 | currentPage:1, 41 | total:1000, 42 | timeOut:null, 43 | pageNumber:[10,25,50,100] 44 | }; 45 | }, 46 | methods: { 47 | // 请求表格 48 | getData(type){ 49 | let defaultParams = { 50 | start_index: this.page.start_index, 51 | total:this.page.total 52 | } 53 | let params = Object.assign(defaultParams,this.tableSearch) 54 | clearTimeout(this.timeOut) 55 | this.timeOut = setTimeout(() => { 56 | this.$http.get('/api/dimensionapi/getdimension',{params:params}).then((result) => { 57 | console.log(result); 58 | this.arr = result 59 | }).catch((err)=>{ 60 | 61 | }) 62 | }, 0); 63 | }, 64 | // 翻页 65 | sizeChange(total){ 66 | this.page.total = total 67 | this.getData() 68 | }, 69 | currentChange(currentPage){ 70 | this.page.start_index = currentPage 71 | this.getData() 72 | }, 73 | // 启用/停用 74 | changeStatue(item){ 75 | let params = { 76 | id:item.id, 77 | statue:!item.statue 78 | } 79 | this.$http.post('/api/dimensionapi/changedimensionstatue',{params:params}).then((result) => { 80 | console.log(result); 81 | this.getData() 82 | }).catch((err)=>{ 83 | 84 | }) 85 | }, 86 | // 新增校验 87 | submitForm(formName){ 88 | this.$refs[formName].validate((valid) => { 89 | if (valid) { 90 | console.log('已全部填完'); 91 | this.addForm() 92 | } else { 93 | console.log('error submit!!'); 94 | return false; 95 | } 96 | }); 97 | }, 98 | // 确认新增 99 | addForm(){ 100 | let params = this.tableObject 101 | this.$http.post('/api/dimensionapi/adddimension',params).then((result) => { 102 | console.log(result); 103 | this.getData() 104 | this.dialogVisible = false 105 | }).catch((err)=>{ 106 | 107 | }) 108 | }, 109 | // 清除搜索条件 110 | resetForm(formName){ 111 | this.$refs[formName].resetFields() 112 | } 113 | }, 114 | created(){ 115 | this.getData() 116 | } 117 | } -------------------------------------------------------------------------------- /src/pages/judgeDimension/judgeDimension.vue: -------------------------------------------------------------------------------- 1 | 64 | 65 | 71 | 72 | 73 | 76 | -------------------------------------------------------------------------------- /src/pages/judgeFiliale/judgeFiliale.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 15 | 16 | 17 | 20 | -------------------------------------------------------------------------------- /src/pages/judgeManageFiliale/judgeManageFiliale.js: -------------------------------------------------------------------------------- 1 | import examiner from '@/components/examiner/examiner.vue'; 2 | export default { 3 | name: "pages", 4 | data:function(){ 5 | return { 6 | // type 0 集团考核分公司,1 分公司考核个人 7 | type:'1', 8 | // 搜索参数 9 | tableSearch:{ 10 | task_name:'', 11 | create_time:'', 12 | task_statue:'', 13 | }, 14 | // 表格数据 15 | tableData:[ 16 | { 17 | judgeName: '考核方案名称', 18 | beginTime: '2016-05-02', 19 | endTime: '2016-05-05', 20 | judgePerson: '考核方', 21 | judgeNum: '123', 22 | judgeStatus: '1', 23 | judgeCaseName: '考核方案名称' 24 | }, 25 | { 26 | judgeName: '考核方案名称', 27 | beginTime: '2016-05-06', 28 | endTime: '2016-05-07', 29 | judgePerson: '考核方', 30 | judgeNum: '123', 31 | judgeStatus: '1', 32 | judgeCaseName: '考核方案名称' 33 | }, 34 | { 35 | judgeName: '考核方案名称', 36 | beginTime: '2016-05-08', 37 | endTime: '2016-05-09', 38 | judgePerson: '考核方', 39 | judgeNum: '123', 40 | judgeStatus: '1', 41 | judgeCaseName: '考核方案名称' 42 | }, 43 | ], 44 | // 表头数据 45 | tableThead:[ 46 | {name:'考核方案名称',value:'judgeName'}, 47 | {name:'考核起止时间',value:'beginTime'}, 48 | {name:'考核发起人',value:'judgePerson'}, 49 | {name:'考核数量',value:'judgeNum'}, 50 | {name:'考核状态',value:'judgeStatus'}, 51 | {name:'考核方案名称',value:'judgeCaseName'}, 52 | ], 53 | // 分页条 54 | currentPage: 1, 55 | total: 1000, 56 | timeOut: null, 57 | pageNumber: [10,20,50], 58 | page:{ 59 | start_index: 1, 60 | total: 1000 61 | }, 62 | // 弹窗 63 | outerVisible: {flag: false}, 64 | } 65 | }, 66 | components: { 67 | examiner 68 | }, 69 | methods:{ 70 | resetForm() { 71 | this.tableSearch.task_name = ''; 72 | this.tableSearch.create_time = ''; 73 | this.tableSearch.task_statue = ''; 74 | }, 75 | searchForm() { 76 | this.getData() 77 | }, 78 | // 翻页 79 | sizeChange(){ 80 | console.log(1); 81 | this.getData() 82 | }, 83 | currentChange(){ 84 | console.log(2); 85 | this.getData() 86 | }, 87 | // 归档弹框 88 | open4() { 89 | const h = this.$createElement; 90 | this.$msgbox({ 91 | title: '归档', 92 | message: h('p', null, [ 93 | h('span', null, '是否确认归档?'), 94 | ]), 95 | showCancelButton: true, 96 | confirmButtonText: '确定', 97 | cancelButtonText: '取消', 98 | beforeClose: (action, instance, done) => { 99 | if (action === 'confirm') { 100 | instance.confirmButtonLoading = true; 101 | instance.confirmButtonText = '执行中...'; 102 | setTimeout(() => { 103 | done(); 104 | setTimeout(() => { 105 | instance.confirmButtonLoading = false; 106 | }, 300); 107 | }, 3000); 108 | } else { 109 | done(); 110 | } 111 | } 112 | }).then(action => { 113 | this.$message({ 114 | type: 'info', 115 | message: 'action: ' + action 116 | }); 117 | }); 118 | }, 119 | // 请求表格 120 | getData(currentPage){ 121 | let defaultParams = { 122 | start_index: this.page.start_index, 123 | total: this.page.total 124 | } 125 | let params = Object.assign(defaultParams,this.tableSearch) 126 | console.log(params) 127 | this.$http.get('api/launchassessmentapi/getassessment',{params: params}).then((result) => { 128 | console.log(result); 129 | // this.tableData = result 130 | // this.total = result.total 131 | }).catch((err)=>{ 132 | console.log(err); 133 | }) 134 | this.tableData.forEach(item=>item.beginTime = item.beginTime + '-' +item.endTime) 135 | }, 136 | 137 | }, 138 | created() { 139 | this.getData() 140 | }, 141 | updated() { 142 | console.log(this.outerVisible) 143 | }, 144 | }; -------------------------------------------------------------------------------- /src/pages/judgeManageFiliale/judgeManageFiliale.vue: -------------------------------------------------------------------------------- 1 | 55 | 56 | 60 | 61 | 62 | 64 | -------------------------------------------------------------------------------- /src/pages/judgeManagePerson/judgeManagePerson.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 15 | 16 | 17 | 20 | -------------------------------------------------------------------------------- /src/pages/judgeMethod/judgeMethod.js: -------------------------------------------------------------------------------- 1 | export default { 2 | data() { 3 | return { 4 | // 搜索参数 5 | tableSearch:{ 6 | check_method_name:'', 7 | check_method_define:'', 8 | count_method:'' 9 | }, 10 | // 表格数据 11 | tableData:[ 12 | {check_method_name:'111',check_method_define:'222',statue:1}, 13 | {check_method_name:'111',check_method_define:'222',statue:1}, 14 | {check_method_name:'111',check_method_define:'222',statue:0}, 15 | {check_method_name:'111',check_method_define:'222',statue:1}, 16 | {check_method_name:'111',check_method_define:'222',statue:1}, 17 | {check_method_name:'111',check_method_define:'222',statue:0}, 18 | {check_method_name:'111',check_method_define:'222',statue:1}, 19 | {check_method_name:'111',check_method_define:'222',statue:1}, 20 | ], 21 | tableThead:[ 22 | {name:'考核办法名称',value:'check_method_name'}, 23 | {name:'考核办法',value:'check_method_define'}, 24 | {name:'启用状态',value:'statue'}, 25 | ], 26 | // 弹窗 27 | tableObject:{ 28 | check_method_name:'', 29 | check_method_define:'', 30 | count_method:'' 31 | }, 32 | dialogVisible:false, 33 | // 弹窗 - 必填项校验 34 | rules:{ 35 | check_method_name:[{required:true,message:'请输入考核办法名称',trigger:'blur'}], 36 | check_method_define:[{required:true,message:'请输入考核办法',trigger:'blur'}], 37 | }, 38 | // 翻页 39 | page:{ 40 | start_index:1, 41 | total:100 42 | }, 43 | currentPage:1, 44 | total:1000, 45 | timeOut:null, 46 | pageNumber:[10,25,50,100] 47 | }; 48 | }, 49 | methods: { 50 | // 请求表格 51 | getData(type){ 52 | let defaultParams = { 53 | start_index: this.page.start_index, 54 | total:this.page.total 55 | } 56 | let params = Object.assign(defaultParams,this.tableSearch) 57 | clearTimeout(this.timeOut) 58 | this.timeOut = setTimeout(() => { 59 | this.$http.get('/api/checkmethodapi/getcheckmethod',{params:params}).then((result) => { 60 | console.log(result); 61 | this.arr = result 62 | }).catch((err)=>{ 63 | 64 | }) 65 | }, 0); 66 | }, 67 | // 翻页 68 | sizeChange(total){ 69 | this.page.total = total 70 | this.getData() 71 | }, 72 | currentChange(currentPage){ 73 | this.page.start_index = currentPage 74 | this.getData() 75 | }, 76 | // 启用/停用 77 | changeStatue(item){ 78 | let params = { 79 | id:item.id, 80 | statue:!item.statue 81 | } 82 | this.$http.post('/api/checkmethodapi/changecheckmethodstatue',{params:params}).then((result) => { 83 | console.log(result); 84 | this.getData() 85 | }).catch((err)=>{ 86 | 87 | }) 88 | }, 89 | // 新增校验 90 | submitForm(formName){ 91 | this.$refs[formName].validate((valid) => { 92 | if (valid) { 93 | console.log('已全部填完'); 94 | this.addForm() 95 | } else { 96 | console.log('error submit!!'); 97 | return false; 98 | } 99 | }); 100 | }, 101 | // 确认新增 102 | addForm(){ 103 | let params = this.tableObject 104 | this.$http.post('/api/checkmethodapi/addcheckmethod',params).then((result) => { 105 | console.log(result); 106 | this.getData() 107 | this.dialogVisible = false 108 | }).catch((err)=>{ 109 | 110 | }) 111 | }, 112 | // 清除搜索条件 113 | resetForm(formName){ 114 | this.$refs[formName].resetFields() 115 | } 116 | }, 117 | created(){ 118 | this.getData() 119 | } 120 | } -------------------------------------------------------------------------------- /src/pages/judgeMethod/judgeMethod.vue: -------------------------------------------------------------------------------- 1 | 69 | 70 | 76 | 77 | 78 | 81 | -------------------------------------------------------------------------------- /src/pages/judgePerson/judgePerson.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: "judgePerson", 3 | data() { 4 | return { 5 | tableShow: false, 6 | tableSearch: {}, 7 | activeName: 'first', 8 | tableData: [ 9 | { 10 | name0:'1', 11 | name1:'1', 12 | name2:'1', 13 | name3:'1', 14 | name4:'1', 15 | name5:'1', 16 | name6:'1', 17 | } 18 | ] 19 | } 20 | }, 21 | methods: { 22 | backPage() { 23 | this.$router.push({path:'/judgeManageFiliale'}) 24 | }, 25 | submit() { 26 | 27 | } 28 | }, 29 | } -------------------------------------------------------------------------------- /src/pages/judgePerson/judgePerson.vue: -------------------------------------------------------------------------------- 1 | 43 | 44 | 50 | 51 | 52 | 54 | -------------------------------------------------------------------------------- /src/pages/judgePersonDetail/judgePersonDetail.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 15 | 16 | 17 | 20 | -------------------------------------------------------------------------------- /src/pages/launchJudgeFiliale/launchJudgeFiliale.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 15 | 16 | 17 | 20 | -------------------------------------------------------------------------------- /src/pages/launchJudgePerson/launchJudgePerson.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 15 | 16 | 17 | 20 | -------------------------------------------------------------------------------- /src/pages/login/login.vue: -------------------------------------------------------------------------------- 1 | 54 | 55 | 91 | 92 | 93 | 102 | -------------------------------------------------------------------------------- /src/pages/notfind/notfind.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 19 | 20 | 21 | 37 | -------------------------------------------------------------------------------- /src/pages/page1/page1.vue: -------------------------------------------------------------------------------- 1 | 90 | 91 | 97 | 98 | 99 | 115 | -------------------------------------------------------------------------------- /src/pages/page3/page3.js: -------------------------------------------------------------------------------- 1 | export default { 2 | data() { 3 | var checkAge = (rule, value, callback) => { 4 | if (!value) { 5 | return callback(new Error('年龄不能为空')); 6 | } 7 | setTimeout(() => { 8 | if (!Number.isInteger(value)) { 9 | callback(new Error('请输入数字值')); 10 | } else { 11 | if (value < 18) { 12 | callback(new Error('必须年满18岁')); 13 | } else { 14 | callback(); 15 | } 16 | } 17 | }, 1000); 18 | }; 19 | var validatePass = (rule, value, callback) => { 20 | if (value === '') { 21 | callback(new Error('请输入密码')); 22 | } else { 23 | if (this.ruleForm2.checkPass !== '') { 24 | this.$refs.ruleForm2.validateField('checkPass'); 25 | } 26 | callback(); 27 | } 28 | }; 29 | var validatePass2 = (rule, value, callback) => { 30 | if (value === '') { 31 | callback(new Error('请再次输入密码')); 32 | } else if (value !== this.ruleForm2.pass) { 33 | callback(new Error('两次输入密码不一致!')); 34 | } else { 35 | callback(); 36 | } 37 | }; 38 | return { 39 | ruleForm2: { 40 | pass: '', 41 | checkPass: '', 42 | age: '' 43 | }, 44 | rules2: { 45 | pass: [ 46 | { validator: validatePass, trigger: 'blur' } 47 | ], 48 | checkPass: [ 49 | { validator: validatePass2, trigger: 'blur' } 50 | ], 51 | age: [ 52 | { validator: checkAge, trigger: 'blur' } 53 | ] 54 | } 55 | }; 56 | }, 57 | methods: { 58 | submitForm(formName) { 59 | console.log(this.$refs[formName].model); 60 | 61 | this.$refs[formName].validate((valid) => { 62 | console.log(this.$refs[formName].model); 63 | 64 | if (valid) { 65 | alert('submit!'); 66 | } else { 67 | console.log('error submit!!'); 68 | return false; 69 | } 70 | }); 71 | }, 72 | resetForm(formName) { 73 | this.$refs[formName].resetFields(); 74 | } 75 | } 76 | } -------------------------------------------------------------------------------- /src/pages/page3/page3.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 27 | 28 | 29 | 45 | -------------------------------------------------------------------------------- /src/pages/page4/page4.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: 'page4', 3 | data() { 4 | return { 5 | arr:[{app:1,flag:true,number:200}, 6 | {app:2,flag:false,number:201}], 7 | msg:'离开交互稿', 8 | count:0, 9 | value:new Date()-21111111111, 10 | fileList:[], 11 | tableData5: [{ 12 | id: '12987122', 13 | name: '好滋好味鸡蛋仔', 14 | category: '江浙小吃、小吃零食', 15 | desc: '荷兰优质淡奶,奶香浓而不腻', 16 | address: '上海市普陀区真北路', 17 | shop: '王小虎夫妻店', 18 | shopId: '10333' 19 | }, { 20 | id: '12987123', 21 | name: '好滋好味鸡蛋仔', 22 | category: '江浙小吃、小吃零食', 23 | desc: '荷兰优质淡奶,奶香浓而不腻', 24 | address: '上海市普陀区真北路', 25 | shop: '王小虎夫妻店', 26 | shopId: '10333' 27 | }, { 28 | id: '12987125', 29 | name: '好滋好味鸡蛋仔', 30 | category: '江浙小吃、小吃零食', 31 | desc: '荷兰优质淡奶,奶香浓而不腻', 32 | address: '上海市普陀区真北路', 33 | shop: '王小虎夫妻店', 34 | shopId: '10333' 35 | }, { 36 | id: '12987126', 37 | name: '好滋好味鸡蛋仔', 38 | category: '江浙小吃、小吃零食', 39 | desc: '荷兰优质淡奶,奶香浓而不腻', 40 | address: '上海市普陀区真北路', 41 | shop: '王小虎夫妻店', 42 | shopId: '10333' 43 | }], 44 | data: [{ 45 | label: '一级 1', 46 | children: [{ 47 | label: '二级 1-1', 48 | children: [{ 49 | label: '三级 1-1-1' 50 | }] 51 | }] 52 | }, { 53 | label: '一级 2', 54 | children: [{ 55 | label: '二级 2-1', 56 | children: [{ 57 | label: '三级 2-1-1' 58 | }] 59 | }, { 60 | label: '二级 2-2', 61 | children: [{ 62 | label: '三级 2-2-1' 63 | }] 64 | }] 65 | }, { 66 | label: '一级 3', 67 | children: [{ 68 | label: '二级 3-1', 69 | children: [{ 70 | label: '三级 3-1-1' 71 | }] 72 | }, { 73 | label: '二级 3-2', 74 | children: [{ 75 | label: '三级 3-2-1' 76 | }] 77 | }] 78 | }], 79 | defaultProps: { 80 | children: 'children', 81 | label: 'label' 82 | } 83 | } 84 | }, 85 | methods: { 86 | add:function(){ 87 | console.log(this.value.getTime()); 88 | this.$http.get('/demo1',{params:{asad:12324}}).then((result) => { 89 | console.log(result); 90 | if (result) { 91 | this.arr = result 92 | } 93 | }).catch((err)=>{ 94 | console.log(err); 95 | 96 | }) 97 | }, 98 | filterIT:function(arr){ 99 | return arr.filter(function(item){ 100 | return item.flag 101 | }) 102 | }, 103 | handleNodeClick(data) { 104 | console.log(data); 105 | } 106 | 107 | }, 108 | computed:{ 109 | filters:function(){ 110 | return this.filterIT(this.arr) 111 | } 112 | }, 113 | created:function(){ 114 | console.log('1'); 115 | 116 | }, 117 | activated:function(){ 118 | console.log(`切换到所在路由的时候,触发${this.count++}次`); 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /src/pages/page4/page4.vue: -------------------------------------------------------------------------------- 1 | 117 | 118 | 124 | 125 | 126 | 142 | -------------------------------------------------------------------------------- /src/pages/pages.vue: -------------------------------------------------------------------------------- 1 | 35 | 36 | 53 | 54 | 55 | 68 | -------------------------------------------------------------------------------- /src/pages/personJudgeAdd/personJudgeAdd.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 15 | 16 | 17 | 20 | -------------------------------------------------------------------------------- /src/pages/personJudgeDetail/personJudgeDetail.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 15 | 16 | 17 | 20 | -------------------------------------------------------------------------------- /src/pages/personJudgeManage/personJudgeManage.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 15 | 16 | 17 | 20 | -------------------------------------------------------------------------------- /src/pages/personTask/personTask.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 15 | 16 | 17 | 20 | -------------------------------------------------------------------------------- /src/pages/personTaskDetail/personTaskDetail.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 15 | 16 | 17 | 20 | -------------------------------------------------------------------------------- /src/pages/personToVerifyDetail/personToVerifyDetail.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 15 | 16 | 17 | 20 | -------------------------------------------------------------------------------- /src/pages/personVerified/personVerified.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 15 | 16 | 17 | 20 | -------------------------------------------------------------------------------- /src/pages/personVerifiedDetail/personVerifiedDetail.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 15 | 16 | 17 | 20 | -------------------------------------------------------------------------------- /src/pages/personVerifyManage/personVerifyManage.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 15 | 16 | 17 | 20 | -------------------------------------------------------------------------------- /src/pages/selfJudgePerson/selfJudgePerson.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 15 | 16 | 17 | 20 | -------------------------------------------------------------------------------- /src/theme/alert.css: -------------------------------------------------------------------------------- 1 | .el-alert{width:100%;padding:8px 16px;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;position:relative;background-color:#fff;overflow:hidden;opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:opacity .2s;transition:opacity .2s}.el-alert.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success{background-color:#f0f9eb;color:#67c23a}.el-alert--success .el-alert__description{color:#67c23a}.el-alert--info{background-color:#f4f4f5;color:#909399}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning{background-color:#fdf6ec;color:#e6a23c}.el-alert--warning .el-alert__description{color:#e6a23c}.el-alert--error{background-color:#fef0f0;color:#f56c6c}.el-alert--error .el-alert__description{color:#f56c6c}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px}.el-alert__icon.is-big{font-size:28px;width:28px}.el-alert__title{font-size:13px;line-height:18px}.el-alert__title.is-bold{font-weight:700}.el-alert .el-alert__description{font-size:12px;margin:5px 0 0}.el-alert__closebtn{font-size:12px;color:#c0c4cc;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.el-alert-fade-enter,.el-alert-fade-leave-active{opacity:0} -------------------------------------------------------------------------------- /src/theme/aside.css: -------------------------------------------------------------------------------- 1 | .el-aside{overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0} -------------------------------------------------------------------------------- /src/theme/badge.css: -------------------------------------------------------------------------------- 1 | .el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{background-color:#f56c6c;border-radius:10px;color:#fff;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #fff}.el-badge__content.is-fixed{position:absolute;top:0;right:10px;-webkit-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%} -------------------------------------------------------------------------------- /src/theme/breadcrumb-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iProgramme/achievements-vue/cc60303745970776b509a049211b9bcb1a466c22/src/theme/breadcrumb-item.css -------------------------------------------------------------------------------- /src/theme/breadcrumb.css: -------------------------------------------------------------------------------- 1 | .el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb::after,.el-breadcrumb::before{display:table;content:""}.el-breadcrumb::after{clear:both}.el-breadcrumb__separator{margin:0 9px;font-weight:700;color:#c0c4cc}.el-breadcrumb__separator[class*=icon]{margin:0 6px;font-weight:400}.el-breadcrumb__item{float:left}.el-breadcrumb__inner{color:#606266}.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{font-weight:700;text-decoration:none;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1);color:#303133}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:#B0EF00;cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{font-weight:400;color:#606266;cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none} -------------------------------------------------------------------------------- /src/theme/button-group.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iProgramme/achievements-vue/cc60303745970776b509a049211b9bcb1a466c22/src/theme/button-group.css -------------------------------------------------------------------------------- /src/theme/card.css: -------------------------------------------------------------------------------- 1 | .el-card{border-radius:4px;border:1px solid #ebeef5;background-color:#fff;overflow:hidden;color:#303133;-webkit-transition:.3s;transition:.3s}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-card__header{padding:18px 20px;border-bottom:1px solid #ebeef5;-webkit-box-sizing:border-box;box-sizing:border-box}.el-card__body{padding:20px} -------------------------------------------------------------------------------- /src/theme/carousel-item.css: -------------------------------------------------------------------------------- 1 | .el-carousel__item,.el-carousel__mask{position:absolute;height:100%;top:0;left:0}.el-carousel__item{width:100%;display:inline-block;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item.is-animating{-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card{width:50%;-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:2}.el-carousel__mask{width:100%;background-color:#fff;opacity:.24;-webkit-transition:.2s;transition:.2s} -------------------------------------------------------------------------------- /src/theme/carousel.css: -------------------------------------------------------------------------------- 1 | .el-carousel{overflow-x:hidden;position:relative}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;outline:0;padding:0;margin:0;height:36px;width:36px;cursor:pointer;-webkit-transition:.3s;transition:.3s;border-radius:50%;background-color:rgba(31,45,61,.11);color:#fff;position:absolute;top:50%;z-index:10;-webkit-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:12px}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{position:absolute;list-style:none;bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);margin:0;padding:0;z-index:2}.el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;-webkit-transform:none;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:#c0c4cc;opacity:.24}.el-carousel__indicators--labels{left:0;right:0;-webkit-transform:none;transform:none;text-align:center}.el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.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;outline:0;padding:0;margin:0;cursor:pointer;-webkit-transition:.3s;transition:.3s}.carousel-arrow-left-enter,.carousel-arrow-left-leave-active{-webkit-transform:translateY(-50%) translateX(-10px);transform:translateY(-50%) translateX(-10px);opacity:0}.carousel-arrow-right-enter,.carousel-arrow-right-leave-active{-webkit-transform:translateY(-50%) translateX(10px);transform:translateY(-50%) translateX(10px);opacity:0} -------------------------------------------------------------------------------- /src/theme/checkbox-button.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iProgramme/achievements-vue/cc60303745970776b509a049211b9bcb1a466c22/src/theme/checkbox-button.css -------------------------------------------------------------------------------- /src/theme/checkbox-group.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iProgramme/achievements-vue/cc60303745970776b509a049211b9bcb1a466c22/src/theme/checkbox-group.css -------------------------------------------------------------------------------- /src/theme/collapse-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iProgramme/achievements-vue/cc60303745970776b509a049211b9bcb1a466c22/src/theme/collapse-item.css -------------------------------------------------------------------------------- /src/theme/collapse.css: -------------------------------------------------------------------------------- 1 | .el-collapse{border-top:1px solid #ebeef5;border-bottom:1px solid #ebeef5}.el-collapse-item__header{height:48px;line-height:48px;background-color:#fff;color:#303133;cursor:pointer;border-bottom:1px solid #ebeef5;font-size:13px;font-weight:500;-webkit-transition:border-bottom-color .3s;transition:border-bottom-color .3s;outline:0}.el-collapse-item__arrow{margin-right:8px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:right;line-height:48px;font-weight:300}.el-collapse-item__arrow.is-active{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-collapse-item__header.focusing:focus:not(:hover){color:#B0EF00}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;background-color:#fff;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;border-bottom:1px solid #ebeef5}.el-collapse-item__content{padding-bottom:25px;font-size:13px;color:#303133;line-height:1.769230769230769}.el-collapse-item:last-child{margin-bottom:-1px} -------------------------------------------------------------------------------- /src/theme/container.css: -------------------------------------------------------------------------------- 1 | .el-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;-webkit-box-sizing:border-box;box-sizing:border-box;min-width:0}.el-container.is-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column} -------------------------------------------------------------------------------- /src/theme/dialog.css: -------------------------------------------------------------------------------- 1 | .v-modal-enter{-webkit-animation:v-modal-in .2s ease;animation:v-modal-in .2s ease}.v-modal-leave{-webkit-animation:v-modal-out .2s ease forwards;animation:v-modal-out .2s ease forwards}@-webkit-keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{100%{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:relative;margin:0 auto 50px;background:#fff;border-radius:2px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3);-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.el-dialog.is-fullscreen{width:100%;margin-top:0;margin-bottom:0;height:100%;overflow:auto}.el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.el-dialog__header{padding:20px 20px 10px}.el-dialog__headerbtn{position:absolute;top:20px;right:20px;padding:0;background:0 0;border:none;outline:0;cursor:pointer;font-size:16px}.el-dialog__headerbtn .el-dialog__close{color:#909399}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:#B0EF00}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;line-height:24px;font-size:14px}.el-dialog__footer{padding:10px 20px 20px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial;padding:25px 25px 30px}.el-dialog--center .el-dialog__footer{text-align:inherit}.dialog-fade-enter-active{-webkit-animation:dialog-fade-in .3s;animation:dialog-fade-in .3s}.dialog-fade-leave-active{-webkit-animation:dialog-fade-out .3s;animation:dialog-fade-out .3s}@-webkit-keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes dialog-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes dialog-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}} -------------------------------------------------------------------------------- /src/theme/display.css: -------------------------------------------------------------------------------- 1 | @media only screen and (max-width:767px){.hidden-xs-only{display:none!important}}@media only screen and (min-width:768px){.hidden-sm-and-up{display:none!important}}@media only screen and (min-width:768px) and (max-width:991px){.hidden-sm-only{display:none!important}}@media only screen and (max-width:991px){.hidden-sm-and-down{display:none!important}}@media only screen and (min-width:992px){.hidden-md-and-up{display:none!important}}@media only screen and (min-width:992px) and (max-width:1199px){.hidden-md-only{display:none!important}}@media only screen and (max-width:1199px){.hidden-md-and-down{display:none!important}}@media only screen and (min-width:1200px){.hidden-lg-and-up{display:none!important}}@media only screen and (min-width:1200px) and (max-width:1919px){.hidden-lg-only{display:none!important}}@media only screen and (max-width:1919px){.hidden-lg-and-down{display:none!important}}@media only screen and (min-width:1920px){.hidden-xl-only{display:none!important}} -------------------------------------------------------------------------------- /src/theme/dropdown-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iProgramme/achievements-vue/cc60303745970776b509a049211b9bcb1a466c22/src/theme/dropdown-item.css -------------------------------------------------------------------------------- /src/theme/dropdown-menu.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iProgramme/achievements-vue/cc60303745970776b509a049211b9bcb1a466c22/src/theme/dropdown-menu.css -------------------------------------------------------------------------------- /src/theme/fonts/element-icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iProgramme/achievements-vue/cc60303745970776b509a049211b9bcb1a466c22/src/theme/fonts/element-icons.ttf -------------------------------------------------------------------------------- /src/theme/fonts/element-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iProgramme/achievements-vue/cc60303745970776b509a049211b9bcb1a466c22/src/theme/fonts/element-icons.woff -------------------------------------------------------------------------------- /src/theme/footer.css: -------------------------------------------------------------------------------- 1 | .el-footer{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0} -------------------------------------------------------------------------------- /src/theme/form-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iProgramme/achievements-vue/cc60303745970776b509a049211b9bcb1a466c22/src/theme/form-item.css -------------------------------------------------------------------------------- /src/theme/form.css: -------------------------------------------------------------------------------- 1 | .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;text-align:left;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-item__content .el-input-group,.el-form-item__label{vertical-align:middle}.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--mini.el-form-item,.el-form-item--small.el-form-item{margin-bottom:18px}.el-form-item .el-input__validateIcon{display:none}.el-form-item--medium .el-form-item__content,.el-form-item--medium .el-form-item__label{line-height:36px}.el-form-item--small .el-form-item__content,.el-form-item--small .el-form-item__label{line-height:32px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--mini .el-form-item__content,.el-form-item--mini .el-form-item__label{line-height:28px}.el-form-item--mini .el-form-item__error{padding-top:1px}.el-form-item__label{text-align:right;float:left;font-size:14px;color:#606266;line-height:40px;padding:0 12px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-form-item__content{line-height:40px;position:relative;font-size:14px}.el-form-item__content::after,.el-form-item__content::before{display:table;content:""}.el-form-item__error{color:#f56c6c;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}.el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.el-form-item.is-required .el-form-item__label:before{content:'*';color:#f56c6c;margin-right:4px}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-input__inner:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus{border-color:#f56c6c}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__validateIcon{color:#f56c6c}.el-form-item.is-success .el-input__inner,.el-form-item.is-success .el-input__inner:focus,.el-form-item.is-success .el-textarea__inner,.el-form-item.is-success .el-textarea__inner:focus{border-color:#67c23a}.el-form-item.is-success .el-input-group__append .el-input__inner,.el-form-item.is-success .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-success .el-input__validateIcon{color:#67c23a}.el-form-item--feedback .el-input__validateIcon{display:inline-block} -------------------------------------------------------------------------------- /src/theme/header.css: -------------------------------------------------------------------------------- 1 | .el-header{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0} -------------------------------------------------------------------------------- /src/theme/icon.css: -------------------------------------------------------------------------------- 1 | @font-face{font-family:element-icons;src:url(fonts/element-icons.woff) format("woff"),url(fonts/element-icons.ttf) 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-info:before{content:"\e61a"}.el-icon-error:before{content:"\e62c"}.el-icon-success:before{content:"\e62d"}.el-icon-warning:before{content:"\e62e"}.el-icon-question:before{content:"\e634"}.el-icon-back:before{content:"\e606"}.el-icon-arrow-left:before{content:"\e600"}.el-icon-arrow-down:before{content:"\e603"}.el-icon-arrow-right:before{content:"\e604"}.el-icon-arrow-up:before{content:"\e605"}.el-icon-caret-left:before{content:"\e60a"}.el-icon-caret-bottom:before{content:"\e60b"}.el-icon-caret-top:before{content:"\e60c"}.el-icon-caret-right:before{content:"\e60e"}.el-icon-d-arrow-left:before{content:"\e610"}.el-icon-d-arrow-right:before{content:"\e613"}.el-icon-minus:before{content:"\e621"}.el-icon-plus:before{content:"\e62b"}.el-icon-remove:before{content:"\e635"}.el-icon-circle-plus:before{content:"\e601"}.el-icon-remove-outline:before{content:"\e63c"}.el-icon-circle-plus-outline:before{content:"\e602"}.el-icon-close:before{content:"\e60f"}.el-icon-check:before{content:"\e611"}.el-icon-circle-close:before{content:"\e607"}.el-icon-circle-check:before{content:"\e639"}.el-icon-circle-close-outline:before{content:"\e609"}.el-icon-circle-check-outline:before{content:"\e63e"}.el-icon-zoom-out:before{content:"\e645"}.el-icon-zoom-in:before{content:"\e641"}.el-icon-d-caret:before{content:"\e615"}.el-icon-sort:before{content:"\e640"}.el-icon-sort-down:before{content:"\e630"}.el-icon-sort-up:before{content:"\e631"}.el-icon-tickets:before{content:"\e63f"}.el-icon-document:before{content:"\e614"}.el-icon-goods:before{content:"\e618"}.el-icon-sold-out:before{content:"\e63b"}.el-icon-news:before{content:"\e625"}.el-icon-message:before{content:"\e61b"}.el-icon-date:before{content:"\e608"}.el-icon-printer:before{content:"\e62f"}.el-icon-time:before{content:"\e642"}.el-icon-bell:before{content:"\e622"}.el-icon-mobile-phone:before{content:"\e624"}.el-icon-service:before{content:"\e63a"}.el-icon-view:before{content:"\e643"}.el-icon-menu:before{content:"\e620"}.el-icon-more:before{content:"\e646"}.el-icon-more-outline:before{content:"\e626"}.el-icon-star-on:before{content:"\e637"}.el-icon-star-off:before{content:"\e63d"}.el-icon-location:before{content:"\e61d"}.el-icon-location-outline:before{content:"\e61f"}.el-icon-phone:before{content:"\e627"}.el-icon-phone-outline:before{content:"\e628"}.el-icon-picture:before{content:"\e629"}.el-icon-picture-outline:before{content:"\e62a"}.el-icon-delete:before{content:"\e612"}.el-icon-search:before{content:"\e619"}.el-icon-edit:before{content:"\e61c"}.el-icon-edit-outline:before{content:"\e616"}.el-icon-rank:before{content:"\e632"}.el-icon-refresh:before{content:"\e633"}.el-icon-share:before{content:"\e636"}.el-icon-setting:before{content:"\e638"}.el-icon-upload:before{content:"\e60d"}.el-icon-upload2:before{content:"\e644"}.el-icon-download:before{content:"\e617"}.el-icon-loading:before{content:"\e61e"}.el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@-webkit-keyframes rotating{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}100%{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}@keyframes rotating{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}100%{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}} -------------------------------------------------------------------------------- /src/theme/loading.css: -------------------------------------------------------------------------------- 1 | .el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{position:absolute;z-index:2000;background-color:rgba(255,255,255,.9);margin:0;top:0;right:0;bottom:0;left:0;-webkit-transition:opacity .3s;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:50px;width:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-loading-spinner .el-loading-text{color:#B0EF00;margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:42px;width:42px;-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#B0EF00;stroke-linecap:round}.el-loading-spinner i{color:#B0EF00}.el-loading-fade-enter,.el-loading-fade-leave-active{opacity:0}@-webkit-keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}} -------------------------------------------------------------------------------- /src/theme/main.css: -------------------------------------------------------------------------------- 1 | .el-main{-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;padding:20px} -------------------------------------------------------------------------------- /src/theme/menu-item-group.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iProgramme/achievements-vue/cc60303745970776b509a049211b9bcb1a466c22/src/theme/menu-item-group.css -------------------------------------------------------------------------------- /src/theme/menu-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iProgramme/achievements-vue/cc60303745970776b509a049211b9bcb1a466c22/src/theme/menu-item.css -------------------------------------------------------------------------------- /src/theme/message.css: -------------------------------------------------------------------------------- 1 | .el-message__closeBtn:focus,.el-message__content:focus{outline-width:0}.el-message{min-width:380px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;border-width:1px;border-style:solid;border-color:#ebeef5;position:fixed;left:50%;top:20px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:#edf2fc;-webkit-transition:opacity .3s,-webkit-transform .4s;transition:opacity .3s,-webkit-transform .4s;transition:opacity .3s,transform .4s;transition:opacity .3s,transform .4s,-webkit-transform .4s;overflow:hidden;padding:15px 15px 15px 20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-message.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message.is-closable .el-message__content{padding-right:16px}.el-message p{margin:0}.el-message--info .el-message__content{color:#909399}.el-message--success{background-color:#f0f9eb;border-color:#e1f3d8}.el-message--success .el-message__content{color:#67c23a}.el-message--warning{background-color:#fdf6ec;border-color:#faecd8}.el-message--warning .el-message__content{color:#e6a23c}.el-message--error{background-color:#fef0f0;border-color:#fde2e2}.el-message--error .el-message__content{color:#f56c6c}.el-message__icon{margin-right:10px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__closeBtn{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:#c0c4cc;font-size:16px}.el-message__closeBtn:hover{color:#909399}.el-message .el-icon-success{color:#67c23a}.el-message .el-icon-error{color:#f56c6c}.el-message .el-icon-info{color:#909399}.el-message .el-icon-warning{color:#e6a23c}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)} -------------------------------------------------------------------------------- /src/theme/notification.css: -------------------------------------------------------------------------------- 1 | .el-notification{display:-webkit-box;display:-ms-flexbox;display:flex;width:330px;padding:14px 26px 14px 13px;border-radius:8px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #ebeef5;position:fixed;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;overflow:hidden}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{margin-left:13px}.el-notification__title{font-weight:700;font-size:16px;color:#303133;margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:6px 0 0;color:#606266;text-align:justify}.el-notification__content p{margin:0}.el-notification__icon{height:24px;width:24px;font-size:24px}.el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:#909399;font-size:16px}.el-notification__closeBtn:hover{color:#606266}.el-notification .el-icon-success{color:#67c23a}.el-notification .el-icon-error{color:#f56c6c}.el-notification .el-icon-info{color:#909399}.el-notification .el-icon-warning{color:#e6a23c}.el-notification-fade-enter.right{right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.el-notification-fade-enter.left{left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.el-notification-fade-leave-active{opacity:0} -------------------------------------------------------------------------------- /src/theme/option-group.css: -------------------------------------------------------------------------------- 1 | .el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type)::after{content:'';position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#e4e7ed}.el-select-group__title{padding-left:20px;font-size:12px;color:#909399;line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px} -------------------------------------------------------------------------------- /src/theme/option.css: -------------------------------------------------------------------------------- 1 | .el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:34px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#fff}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:#f5f7fa}.el-select-dropdown__item.selected{color:#B0EF00;font-weight:700}.el-select-dropdown__item span{line-height:34px!important} -------------------------------------------------------------------------------- /src/theme/popover.css: -------------------------------------------------------------------------------- 1 | .el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-popover{position:absolute;background:#fff;min-width:150px;border-radius:4px;border:1px solid #ebeef5;padding:12px;z-index:2000;color:#606266;line-height:1.4;text-align:justify;font-size:14px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-popover--plain{padding:18px 20px}.el-popover__title{color:#303133;font-size:16px;line-height:1;margin-bottom:12px}.el-popover:focus,.el-popover:focus:active,.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing){outline-width:0} -------------------------------------------------------------------------------- /src/theme/popper.css: -------------------------------------------------------------------------------- 1 | .el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff} -------------------------------------------------------------------------------- /src/theme/progress.css: -------------------------------------------------------------------------------- 1 | .el-progress{position:relative;line-height:1}.el-progress__text{font-size:14px;color:#606266;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle{display:inline-block}.el-progress--circle .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.el-progress--circle .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress-bar,.el-progress-bar__inner::after,.el-progress-bar__innerText{display:inline-block;vertical-align:middle}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:#67c23a}.el-progress.is-success .el-progress__text{color:#67c23a}.el-progress.is-exception .el-progress-bar__inner{background-color:#f56c6c}.el-progress.is-exception .el-progress__text{color:#f56c6c}.el-progress-bar{padding-right:50px;width:100%;margin-right:-55px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:#ebeef5;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#B0EF00;text-align:right;border-radius:100px;line-height:1;white-space:nowrap}.el-progress-bar__inner::after{content:"";height:100%}.el-progress-bar__innerText{color:#fff;font-size:12px;margin:0 5px}@-webkit-keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}@keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}} -------------------------------------------------------------------------------- /src/theme/radio-button.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-radio-button,.el-radio-button__inner{display:inline-block;position:relative;outline:0}.el-radio-button__inner{line-height:1;white-space:nowrap;vertical-align:middle;background:#fff;border:1px solid #dcdfe6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;cursor:pointer;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-radio-button__inner.is-round{padding:12px 20px}.el-radio-button__inner:hover{color:#B0EF00}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-radio-button__orig-radio{opacity:0;outline:0;position:absolute;z-index:-1}.el-radio-button__orig-radio:checked+.el-radio-button__inner{color:#fff;background-color:#B0EF00;border-color:#B0EF00;-webkit-box-shadow:-1px 0 0 0 #B0EF00;box-shadow:-1px 0 0 0 #B0EF00}.el-radio-button__orig-radio:disabled+.el-radio-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner{background-color:#f2f6fc}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px}.el-radio-button--medium .el-radio-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-radio-button--medium .el-radio-button__inner.is-round{padding:10px 20px}.el-radio-button--small .el-radio-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-radio-button--small .el-radio-button__inner.is-round{padding:9px 15px}.el-radio-button--mini .el-radio-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-radio-button--mini .el-radio-button__inner.is-round{padding:7px 15px}.el-radio-button:focus:not(.is-focus):not(:active){-webkit-box-shadow:0 0 2px 2px #B0EF00;box-shadow:0 0 2px 2px #B0EF00} -------------------------------------------------------------------------------- /src/theme/radio-group.css: -------------------------------------------------------------------------------- 1 | .el-radio-group{display:inline-block;line-height:1;vertical-align:middle;font-size:0} -------------------------------------------------------------------------------- /src/theme/radio.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-radio,.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.el-radio,.el-radio__input{white-space:nowrap;line-height:1;outline:0}.el-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-radio{color:#606266;font-weight:500;cursor:pointer;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px}.el-radio.is-bordered.is-checked{border-color:#B0EF00}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#ebeef5}.el-radio__input.is-disabled .el-radio__inner,.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#f5f7fa;border-color:#e4e7ed}.el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.el-radio--mini.is-bordered .el-radio__label,.el-radio--small.is-bordered .el-radio__label{font-size:12px}.el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio+.el-radio{margin-left:30px}.el-radio__input{cursor:pointer;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner::after{cursor:not-allowed;background-color:#f5f7fa}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner::after{background-color:#c0c4cc}.el-radio__input.is-disabled+span.el-radio__label{color:#c0c4cc;cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:#B0EF00;background:#B0EF00}.el-radio__input.is-checked .el-radio__inner::after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:#B0EF00}.el-radio__input.is-focus .el-radio__inner{border-color:#B0EF00}.el-radio__inner{border:1px solid #dcdfe6;border-radius:100%;width:14px;height:14px;background-color:#fff;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box}.el-radio__inner:hover{border-color:#B0EF00}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#fff;content:"";position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);transition:-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6);transition:transform .15s cubic-bezier(.71,-.46,.88,.6),-webkit-transform .15s cubic-bezier(.71,-.46,.88,.6)}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio:focus:not(.is-focus):not(:active) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #B0EF00;box-shadow:0 0 2px 2px #B0EF00}.el-radio__label{font-size:14px;padding-left:10px} -------------------------------------------------------------------------------- /src/theme/rate.css: -------------------------------------------------------------------------------- 1 | .el-rate__icon,.el-rate__item{position:relative;display:inline-block}.el-rate{height:20px;line-height:1}.el-rate:active,.el-rate:focus{outline-width:0}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon{font-size:18px;margin-right:6px;color:#c0c4cc;-webkit-transition:.3s;transition:.3s}.el-rate__decimal,.el-rate__icon .path2{position:absolute;top:0;left:0}.el-rate__icon.hover{-webkit-transform:scale(1.15);transform:scale(1.15)}.el-rate__decimal{display:inline-block;overflow:hidden}.el-rate__text{font-size:14px;vertical-align:middle} -------------------------------------------------------------------------------- /src/theme/reset.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";body{font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;font-weight:400;font-size:14px;color:#000;-webkit-font-smoothing:antialiased}a{color:#B0EF00;text-decoration:none}a:focus,a:hover{color:rgb(192, 242, 51)}a:active{color:rgb(158, 215, 0)}h1,h2,h3,h4,h5,h6{color:#606266;font-weight:inherit}h1:first-child,h2:first-child,h3:first-child,h4:first-child,h5:first-child,h6:first-child,p:first-child{margin-top:0}h1:last-child,h2:last-child,h3:last-child,h4:last-child,h5:last-child,h6:last-child,p:last-child{margin-bottom:0}h1{font-size:20px}h2{font-size:18px}h3{font-size:16px}h4,h5,h6,p{font-size:inherit}p{line-height:1.8}sub,sup{font-size:13px}small{font-size:12px}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee} -------------------------------------------------------------------------------- /src/theme/row.css: -------------------------------------------------------------------------------- 1 | .el-row{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box}.el-row::after,.el-row::before{display:table;content:""}.el-row::after{clear:both}.el-row--flex{display:-webkit-box;display:-ms-flexbox;display:flex}.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-row--flex.is-justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.el-row--flex.is-justify-space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.el-row--flex.is-align-middle{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-row--flex.is-align-bottom{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end} -------------------------------------------------------------------------------- /src/theme/scrollbar.css: -------------------------------------------------------------------------------- 1 | .el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;-webkit-transition:opacity 120ms ease-out;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%} -------------------------------------------------------------------------------- /src/theme/select-dropdown.css: -------------------------------------------------------------------------------- 1 | .el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-select-dropdown{position:absolute;z-index:1001;border:1px solid #e4e7ed;border-radius:4px;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:5px 0}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#B0EF00;background-color:#fff}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#f5f7fa}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:20px;font-family:element-icons;content:"\E611";font-size:12px;font-weight:700;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.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;-webkit-box-sizing:border-box;box-sizing:border-box} -------------------------------------------------------------------------------- /src/theme/spinner.css: -------------------------------------------------------------------------------- 1 | .el-time-spinner{width:100%;white-space:nowrap}.el-spinner{display:inline-block;vertical-align:middle}.el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}@-webkit-keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}} -------------------------------------------------------------------------------- /src/theme/step.css: -------------------------------------------------------------------------------- 1 | .el-step{position:relative;-ms-flex-negative:1;flex-shrink:1}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{-ms-flex-preferred-size:auto!important;flex-basis:auto!important;-ms-flex-negative:0;flex-shrink:0;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.el-step:last-of-type .el-step__description,.el-step:last-of-type .el-step__main{padding-right:0}.el-step__head{position:relative;width:100%}.el-step__head.is-process{color:#303133;border-color:#303133}.el-step__head.is-wait{color:#c0c4cc;border-color:#c0c4cc}.el-step__head.is-success{color:#67c23a;border-color:#67c23a}.el-step__head.is-error{color:#f56c6c;border-color:#f56c6c}.el-step__head.is-finish{color:#B0EF00;border-color:#B0EF00}.el-step__icon{position:relative;z-index:1;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:24px;height:24px;font-size:14px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#fff;-webkit-transition:.15s ease-out;transition:.15s ease-out}.el-step__icon.is-text{border-radius:50%;border:2px solid;border-color:inherit}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{-webkit-transform:translateY(1px);transform:translateY(1px)}.el-step__line{position:absolute;border-color:inherit;background-color:#c0c4cc}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;-webkit-transition:.15s ease-out;transition:.15s ease-out;-webkit-box-sizing:border-box;box-sizing:border-box;width:0;height:0}.el-step__main{white-space:normal;text-align:left}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{font-weight:700;color:#303133}.el-step__title.is-wait{color:#c0c4cc}.el-step__title.is-success{color:#67c23a}.el-step__title.is-error{color:#f56c6c}.el-step__title.is-finish{color:#B0EF00}.el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.el-step__description.is-process{color:#303133}.el-step__description.is-wait{color:#c0c4cc}.el-step__description.is-success{color:#67c23a}.el-step__description.is-error{color:#f56c6c}.el-step__description.is-finish{color:#B0EF00}.el-step.is-horizontal{display:inline-block}.el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.el-step.is-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.el-step.is-vertical .el-step__head{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{padding-left:10px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-center .el-step__head,.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-step.is-simple .el-step__head{width:auto;font-size:0;padding-right:10px}.el-step.is-simple .el-step__icon{background:0 0;width:16px;height:16px;font-size:12px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{-webkit-transform:scale(.8) translateY(1px);transform:scale(.8) translateY(1px)}.el-step.is-simple .el-step__main{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;word-break:break-all}.el-step.is-simple .el-step__arrow{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-step.is-simple .el-step__arrow::after,.el-step.is-simple .el-step__arrow::before{content:'';display:inline-block;position:absolute;height:15px;width:1px;background:#c0c4cc}.el-step.is-simple .el-step__arrow::before{-webkit-transform:rotate(-45deg) translateY(-4px);transform:rotate(-45deg) translateY(-4px);-webkit-transform-origin:0 0;transform-origin:0 0}.el-step.is-simple .el-step__arrow::after{-webkit-transform:rotate(45deg) translateY(4px);transform:rotate(45deg) translateY(4px);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.el-step.is-simple:last-of-type .el-step__arrow{display:none} -------------------------------------------------------------------------------- /src/theme/steps.css: -------------------------------------------------------------------------------- 1 | .el-steps{display:-webkit-box;display:-ms-flexbox;display:flex}.el-steps--simple{padding:13px 8%;border-radius:4px;background:#f5f7fa}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{height:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column} -------------------------------------------------------------------------------- /src/theme/submenu.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iProgramme/achievements-vue/cc60303745970776b509a049211b9bcb1a466c22/src/theme/submenu.css -------------------------------------------------------------------------------- /src/theme/switch.css: -------------------------------------------------------------------------------- 1 | .el-switch{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;font-size:14px;line-height:20px;height:20px;vertical-align:middle}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__core,.el-switch__label{display:inline-block;cursor:pointer;vertical-align:middle}.el-switch__label{-webkit-transition:.2s;transition:.2s;height:20px;font-size:14px;font-weight:500;color:#303133}.el-switch__label.is-active{color:#B0EF00}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{line-height:1;font-size:14px;display:inline-block}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.el-switch__input:focus~.el-switch__core{outline:#B0EF00 solid 1px}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #dcdfe6;outline:0;border-radius:10px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#dcdfe6;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s}.el-switch__core:after{content:"";position:absolute;top:1px;left:1px;border-radius:100%;-webkit-transition:all .3s;transition:all .3s;width:16px;height:16px;background-color:#fff}.el-switch.is-checked .el-switch__core{border-color:#B0EF00;background-color:#B0EF00}.el-switch.is-checked .el-switch__core::after{left:100%;margin-left:-17px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0} -------------------------------------------------------------------------------- /src/theme/tab-pane.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iProgramme/achievements-vue/cc60303745970776b509a049211b9bcb1a466c22/src/theme/tab-pane.css -------------------------------------------------------------------------------- /src/theme/tag.css: -------------------------------------------------------------------------------- 1 | .el-tag{background-color:rgba(64,158,255,.1);display:inline-block;padding:0 10px;height:32px;line-height:30px;font-size:12px;color:#B0EF00;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid rgba(64,158,255,.2);white-space:nowrap}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px;color:#B0EF00}.el-tag .el-icon-close::before{display:block}.el-tag .el-icon-close:hover{background-color:#B0EF00;color:#fff}.el-tag--info,.el-tag--info .el-tag__close{color:#909399}.el-tag--info{background-color:rgba(144,147,153,.1);border-color:rgba(144,147,153,.2)}.el-tag--info.is-hit{border-color:#909399}.el-tag--info .el-tag__close:hover{background-color:#909399;color:#fff}.el-tag--success{background-color:rgba(103,194,58,.1);border-color:rgba(103,194,58,.2);color:#67c23a}.el-tag--success.is-hit{border-color:#67c23a}.el-tag--success .el-tag__close{color:#67c23a}.el-tag--success .el-tag__close:hover{background-color:#67c23a;color:#fff}.el-tag--warning{background-color:rgba(230,162,60,.1);border-color:rgba(230,162,60,.2);color:#e6a23c}.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--warning .el-tag__close:hover{background-color:#e6a23c;color:#fff}.el-tag--danger{background-color:rgba(245,108,108,.1);border-color:rgba(245,108,108,.2);color:#f56c6c}.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--danger .el-tag__close:hover{background-color:#f56c6c;color:#fff}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)} -------------------------------------------------------------------------------- /src/theme/tooltip.css: -------------------------------------------------------------------------------- 1 | .el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing){outline-width:0}.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:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:#303133;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:#303133}.el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:#303133;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:#303133}.el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper.is-dark{background:#303133;color:#fff}.el-tooltip__popper.is-light{background:#fff;border:1px solid #303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#303133}.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:#303133}.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:#303133}.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:#303133}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#fff} -------------------------------------------------------------------------------- /src/theme/tree.css: -------------------------------------------------------------------------------- 1 | .el-tree{position:relative;cursor:default;background:#fff;color:#606266}.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%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#6f7180}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#B0EF00}.el-tree-node{white-space:nowrap;outline:0}.el-tree-node:focus>.el-tree-node__content{background-color:#f5f7fa}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:#B0EF00;color:#fff}.el-tree-node__content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:26px;cursor:pointer}.el-tree-node__content>.el-tree-node__expand-icon{padding:6px}.el-tree-node__content>.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:#f5f7fa}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{cursor:pointer;color:#c0c4cc;font-size:12px;-webkit-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}.el-tree-node__expand-icon.expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default}.el-tree-node__label{font-size:14px}.el-tree-node__loading-icon{margin-right:8px;font-size:14px;color:#c0c4cc}.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--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#f0f7ff} -------------------------------------------------------------------------------- /src/vuex/store.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | 4 | Vue.use(Vuex) 5 | 6 | const store = new Vuex.Store({ 7 | // 定义状态 8 | state: { 9 | routerArray:[], 10 | // 当前nav 11 | routerName:{}, 12 | // 已有的tab nav 13 | navTabs:[{title:'首页',name:'/dashboard',url:'/dashboard'}], 14 | 15 | // filialeJudgeManageAdd数据 16 | // tree:[], 17 | // arr:[] 18 | }, 19 | mutations:{ 20 | setRouterName(state,obj){ 21 | obj = obj || {} 22 | for (const key in obj) { 23 | if(typeof obj[key] == 'string'){ 24 | obj[key].replace('Detail','') 25 | } 26 | } 27 | state.routerName = obj; 28 | 29 | console.log(obj); 30 | 31 | let flag = state.navTabs.find(item=>item.url == obj.url) 32 | if(!flag){ 33 | state.navTabs.push(obj) 34 | } 35 | }, 36 | deleteRouterName(state,str){ 37 | state.navTabs = state.navTabs.filter(item=>item.url!=str) 38 | }, 39 | 40 | 41 | changeToArray(state,arr){ 42 | console.log(arr); 43 | let objT = {}; 44 | let arrT = []; 45 | let count = 1 46 | arr.forEach((item) => { 47 | if(objT[item.name1]){ 48 | objT[item.name1]++ 49 | }else{ 50 | objT[item.name1] = 1 51 | } 52 | // arrT.push(item) 53 | }); 54 | for (const key in objT) { 55 | arr.find((item)=>{ 56 | if(item.name1 == key){ 57 | item.span = objT[key] 58 | return true 59 | } 60 | }) 61 | } 62 | 63 | // console.log(arrT); 64 | console.log(objT); 65 | 66 | 67 | } 68 | // // 将filialeJudgeManageAdd数据转为树的形式 69 | // toTree(state,arr){ 70 | // let arr1 = []; 71 | // let obj = {} 72 | // arr.forEach((item)=>{ 73 | // if(item.span!=0){ 74 | // obj = { 75 | // name1:'123', 76 | // children:[item] 77 | // } 78 | // arr1.push(obj) 79 | // }else{ 80 | // arr1[arr1.length-1].children.push(item) 81 | // } 82 | // }) 83 | // state.tree = arr1 84 | // console.log(arr1); 85 | // }, 86 | // // 将filialeJudgeManageAdd数据转为数组的形式 87 | // toArray(state,tree){ 88 | // var arr = [] 89 | // for(let i = 0;i has count: ' + count 12 | this.expected = count 13 | this.pass = function (val) { 14 | return val === this.expected 15 | } 16 | this.value = function (res) { 17 | return res.value 18 | } 19 | this.command = function (cb) { 20 | var self = this 21 | return this.api.execute(function (selector) { 22 | return document.querySelectorAll(selector).length 23 | }, [selector], function (res) { 24 | cb.call(self, res) 25 | }) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /test/e2e/nightwatch.conf.js: -------------------------------------------------------------------------------- 1 | require('babel-register') 2 | var config = require('../../config') 3 | 4 | // http://nightwatchjs.org/gettingstarted#settings-file 5 | module.exports = { 6 | src_folders: ['test/e2e/specs'], 7 | output_folder: 'test/e2e/reports', 8 | custom_assertions_path: ['test/e2e/custom-assertions'], 9 | 10 | selenium: { 11 | start_process: true, 12 | server_path: require('selenium-server').path, 13 | host: '127.0.0.1', 14 | port: 4444, 15 | cli_args: { 16 | 'webdriver.chrome.driver': require('chromedriver').path 17 | } 18 | }, 19 | 20 | test_settings: { 21 | default: { 22 | selenium_port: 4444, 23 | selenium_host: 'localhost', 24 | silent: true, 25 | globals: { 26 | devServerURL: 'http://localhost:' + (process.env.PORT || config.dev.port) 27 | } 28 | }, 29 | 30 | chrome: { 31 | desiredCapabilities: { 32 | browserName: 'chrome', 33 | javascriptEnabled: true, 34 | acceptSslCerts: true 35 | } 36 | }, 37 | 38 | firefox: { 39 | desiredCapabilities: { 40 | browserName: 'firefox', 41 | javascriptEnabled: true, 42 | acceptSslCerts: true 43 | } 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /test/e2e/runner.js: -------------------------------------------------------------------------------- 1 | // 1. start the dev server using production config 2 | process.env.NODE_ENV = 'testing' 3 | 4 | const webpack = require('webpack') 5 | const DevServer = require('webpack-dev-server') 6 | 7 | const webpackConfig = require('../../build/webpack.prod.conf') 8 | const devConfigPromise = require('../../build/webpack.dev.conf') 9 | 10 | let server 11 | 12 | devConfigPromise.then(devConfig => { 13 | const devServerOptions = devConfig.devServer 14 | const compiler = webpack(webpackConfig) 15 | server = new DevServer(compiler, devServerOptions) 16 | const port = devServerOptions.port 17 | const host = devServerOptions.host 18 | return server.listen(port, host) 19 | }) 20 | .then(() => { 21 | // 2. run the nightwatch test suite against it 22 | // to run in additional browsers: 23 | // 1. add an entry in test/e2e/nightwatch.conf.js under "test_settings" 24 | // 2. add it to the --env flag below 25 | // or override the environment flag, for example: `npm run e2e -- --env chrome,firefox` 26 | // For more information on Nightwatch's config file, see 27 | // http://nightwatchjs.org/guide#settings-file 28 | let opts = process.argv.slice(2) 29 | if (opts.indexOf('--config') === -1) { 30 | opts = opts.concat(['--config', 'test/e2e/nightwatch.conf.js']) 31 | } 32 | if (opts.indexOf('--env') === -1) { 33 | opts = opts.concat(['--env', 'chrome']) 34 | } 35 | 36 | const spawn = require('cross-spawn') 37 | const runner = spawn('./node_modules/.bin/nightwatch', opts, { stdio: 'inherit' }) 38 | 39 | runner.on('exit', function (code) { 40 | server.close() 41 | process.exit(code) 42 | }) 43 | 44 | runner.on('error', function (err) { 45 | server.close() 46 | throw err 47 | }) 48 | }) 49 | -------------------------------------------------------------------------------- /test/e2e/specs/test.js: -------------------------------------------------------------------------------- 1 | // For authoring Nightwatch tests, see 2 | // http://nightwatchjs.org/guide#usage 3 | 4 | module.exports = { 5 | 'default e2e tests': function (browser) { 6 | // automatically uses dev Server port from /config.index.js 7 | // default: http://localhost:8080 8 | // see nightwatch.conf.js 9 | const devServer = browser.globals.devServerURL 10 | 11 | browser 12 | .url(devServer) 13 | .waitForElementVisible('#app', 5000) 14 | .assert.elementPresent('.hello') 15 | .assert.containsText('h1', 'Welcome to Your Vue.js App') 16 | .assert.elementCount('img', 1) 17 | .end() 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /test/unit/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "jest": true 4 | }, 5 | "globals": { 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /test/unit/jest.conf.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | 3 | module.exports = { 4 | rootDir: path.resolve(__dirname, '../../'), 5 | moduleFileExtensions: [ 6 | 'js', 7 | 'json', 8 | 'vue' 9 | ], 10 | moduleNameMapper: { 11 | '^@/(.*)$': '/src/$1' 12 | }, 13 | transform: { 14 | '^.+\\.js$': '/node_modules/babel-jest', 15 | '.*\\.(vue)$': '/node_modules/vue-jest' 16 | }, 17 | testPathIgnorePatterns: [ 18 | '/test/e2e' 19 | ], 20 | snapshotSerializers: ['/node_modules/jest-serializer-vue'], 21 | setupFiles: ['/test/unit/setup'], 22 | mapCoverage: true, 23 | coverageDirectory: '/test/unit/coverage', 24 | collectCoverageFrom: [ 25 | 'src/**/*.{js,vue}', 26 | '!src/main.js', 27 | '!src/router/index.js', 28 | '!**/node_modules/**' 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /test/unit/setup.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | 3 | Vue.config.productionTip = false 4 | -------------------------------------------------------------------------------- /test/unit/specs/HelloWorld.spec.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import HelloWorld from '@/components/HelloWorld' 3 | 4 | describe('HelloWorld.vue', () => { 5 | it('should render correct contents', () => { 6 | const Constructor = Vue.extend(HelloWorld) 7 | const vm = new Constructor().$mount() 8 | expect(vm.$el.querySelector('.hello h1').textContent) 9 | .toEqual('Welcome to Your Vue.js App') 10 | }) 11 | }) 12 | -------------------------------------------------------------------------------- /需求点.md: -------------------------------------------------------------------------------- 1 | # 分公司考核模板管理_新增 2 | 3 | - 新增弹窗,使用的是可搜索的 [input](http://element-cn.eleme.io/?#/zh-CN/component/input#dai-shu-ru-jian-yi) 4 | - 表格内的四列都用可搜索的 [select](http://element-cn.eleme.io/?#/zh-CN/component/select#ke-sou-suo) --------------------------------------------------------------------------------