From 70c19073ec65fc84c77bee3a213b77bbdcc24e12 Mon Sep 17 00:00:00 2001 From: renguanyu111 <80379958+renguanyu111@users.noreply.github.com> Date: Sat, 19 Mar 2022 14:43:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .editorconfig | 14 + .env.development | 5 + .env.production | 6 + .env.staging | 8 + .eslintignore | 4 + .eslintrc.js | 198 +++++++ .gitignore | 16 + .travis.yml | 5 + LICENSE | 21 + README-zh.md | 111 ++++ README.md | 99 ++++ babel.config.js | 14 + build/index.js | 35 ++ jest.config.js | 24 + jsconfig.json | 9 + mock/index.js | 57 ++ mock/mock-server.js | 81 +++ mock/table.js | 29 + mock/user.js | 84 +++ mock/utils.js | 25 + package.json | 62 +++ postcss.config.js | 8 + public/--favicon.ico | Bin 0 -> 67646 bytes public/favicon.ico | Bin 0 -> 73507 bytes public/index.html | 19 + src/App.vue | 11 + src/api/dutys.js | 209 +++++++ src/api/group.js | 24 + src/api/login/login.js | 26 + src/api/renwu.js | 75 +++ src/api/table.js | 9 + src/api/user.js | 51 ++ src/assets/404_images/404.png | Bin 0 -> 98071 bytes src/assets/404_images/404_cloud.png | Bin 0 -> 4766 bytes src/assets/404_images/login_background.jpg | Bin 0 -> 41154 bytes src/assets/404_images/login_background.svg | 33 ++ src/assets/404_images/login_left.svg | 123 +++++ src/assets/404_images/logo.jpg | Bin 0 -> 27616 bytes src/assets/404_images/logo.png | Bin 0 -> 8060 bytes src/assets/404_images/logo_login.png | Bin 0 -> 25312 bytes src/assets/duihao.png | Bin 0 -> 7539 bytes src/components/Breadcrumb/index.vue | 78 +++ src/components/Hamburger/index.vue | 44 ++ src/components/SvgIcon/index.vue | 62 +++ src/components/upload/image.vue | 104 ++++ src/icons/index.js | 9 + src/icons/svg/dashboard.svg | 1 + src/icons/svg/example.svg | 1 + src/icons/svg/eye-open.svg | 1 + src/icons/svg/eye.svg | 1 + src/icons/svg/form.svg | 1 + src/icons/svg/link.svg | 1 + src/icons/svg/nested.svg | 1 + src/icons/svg/password.svg | 1 + src/icons/svg/table.svg | 1 + src/icons/svg/tree.svg | 1 + src/icons/svg/user.svg | 1 + src/icons/svgo.yml | 22 + src/layout/components/AppMain.vue | 41 ++ src/layout/components/Navbar.vue | 158 ++++++ src/layout/components/Sidebar/FixiOSBug.js | 26 + src/layout/components/Sidebar/Item.vue | 41 ++ src/layout/components/Sidebar/Link.vue | 43 ++ src/layout/components/Sidebar/Logo.vue | 82 +++ src/layout/components/Sidebar/SidebarItem.vue | 95 ++++ src/layout/components/Sidebar/index.vue | 56 ++ src/layout/components/index.js | 3 + src/layout/index.vue | 93 ++++ src/layout/mixin/ResizeHandler copy.js | 45 ++ src/layout/mixin/ResizeHandler.js | 45 ++ src/main.js | 43 ++ src/mixins/infoList.js | 75 +++ src/permission.js | 79 +++ src/router/index.js | 295 ++++++++++ src/settings.js | 16 + src/store/getters.js | 8 + src/store/index.js | 19 + src/store/modules/app.js | 48 ++ src/store/modules/settings.js | 32 ++ src/store/modules/user.js | 119 ++++ src/styles/element-ui.scss | 49 ++ src/styles/index.scss | 65 +++ src/styles/mixin.scss | 28 + src/styles/sidebar.scss | 226 ++++++++ src/styles/transition.scss | 48 ++ src/styles/variables.scss | 25 + src/utils/auth.js | 27 + src/utils/date.js | 30 + src/utils/get-page-title.js | 10 + src/utils/index.js | 117 ++++ src/utils/request.js | 88 +++ src/utils/validate.js | 20 + src/views/404.vue | 228 ++++++++ src/views/approval/index.vue | 67 +++ src/views/approvalData/index.vue | 446 +++++++++++++++ src/views/approvalList/index.vue | 409 ++++++++++++++ src/views/ceshi/index aaa.vue | 150 +++++ src/views/ceshi/index.vue | 490 +++++++++++++++++ src/views/dashboard/index copy 2.vue | 502 +++++++++++++++++ src/views/dashboard/index copy.vue | 87 +++ src/views/dashboard/index.vue | 517 +++++++++++++++++ src/views/form/index.vue | 85 +++ src/views/index.vue | 145 +++++ src/views/login/dingxingLogin.vue | 320 +++++++++++ src/views/login/index copy.vue | 237 ++++++++ src/views/login/index.vue | 318 +++++++++++ src/views/login/quantitativeListLogin.vue | 320 +++++++++++ src/views/login/zerenLogin.vue | 323 +++++++++++ src/views/login/zhenggaiLogin.vue | 320 +++++++++++ src/views/mete/index.vue | 397 ++++++++++++++ src/views/nested/menu1/index.vue | 7 + src/views/nested/menu1/menu1-1/index.vue | 7 + src/views/nested/menu1/menu1-2/index.vue | 7 + .../nested/menu1/menu1-2/menu1-2-1/index.vue | 5 + .../nested/menu1/menu1-2/menu1-2-2/index.vue | 5 + src/views/nested/menu1/menu1-3/index.vue | 5 + src/views/nested/menu2/index.vue | 5 + src/views/qualitative/index.vue | 518 ++++++++++++++++++ src/views/quantitativeList/index.vue | 279 ++++++++++ src/views/record/details.vue | 218 ++++++++ src/views/record/index.vue | 172 ++++++ src/views/rectification/index.vue | 132 +++++ src/views/responsible/index.vue | 321 +++++++++++ src/views/table/index.vue | 79 +++ src/views/tree/index.vue | 78 +++ tests/unit/.eslintrc.js | 5 + tests/unit/components/Breadcrumb.spec.js | 98 ++++ tests/unit/components/Hamburger.spec.js | 18 + tests/unit/components/SvgIcon.spec.js | 22 + tests/unit/utils/formatTime.spec.js | 30 + tests/unit/utils/param2Obj.spec.js | 14 + tests/unit/utils/parseTime.spec.js | 35 ++ tests/unit/utils/validate.spec.js | 17 + vue.config.js | 125 +++++ 134 files changed, 11583 insertions(+) create mode 100644 .editorconfig create mode 100644 .env.development create mode 100644 .env.production create mode 100644 .env.staging create mode 100644 .eslintignore create mode 100644 .eslintrc.js create mode 100644 .gitignore create mode 100644 .travis.yml create mode 100644 LICENSE create mode 100644 README-zh.md create mode 100644 README.md create mode 100644 babel.config.js create mode 100644 build/index.js create mode 100644 jest.config.js create mode 100644 jsconfig.json create mode 100644 mock/index.js create mode 100644 mock/mock-server.js create mode 100644 mock/table.js create mode 100644 mock/user.js create mode 100644 mock/utils.js create mode 100644 package.json create mode 100644 postcss.config.js create mode 100644 public/--favicon.ico create mode 100644 public/favicon.ico create mode 100644 public/index.html create mode 100644 src/App.vue create mode 100644 src/api/dutys.js create mode 100644 src/api/group.js create mode 100644 src/api/login/login.js create mode 100644 src/api/renwu.js create mode 100644 src/api/table.js create mode 100644 src/api/user.js create mode 100644 src/assets/404_images/404.png create mode 100644 src/assets/404_images/404_cloud.png create mode 100644 src/assets/404_images/login_background.jpg create mode 100644 src/assets/404_images/login_background.svg create mode 100644 src/assets/404_images/login_left.svg create mode 100644 src/assets/404_images/logo.jpg create mode 100644 src/assets/404_images/logo.png create mode 100644 src/assets/404_images/logo_login.png create mode 100644 src/assets/duihao.png create mode 100644 src/components/Breadcrumb/index.vue create mode 100644 src/components/Hamburger/index.vue create mode 100644 src/components/SvgIcon/index.vue create mode 100644 src/components/upload/image.vue create mode 100644 src/icons/index.js create mode 100644 src/icons/svg/dashboard.svg create mode 100644 src/icons/svg/example.svg create mode 100644 src/icons/svg/eye-open.svg create mode 100644 src/icons/svg/eye.svg create mode 100644 src/icons/svg/form.svg create mode 100644 src/icons/svg/link.svg create mode 100644 src/icons/svg/nested.svg create mode 100644 src/icons/svg/password.svg create mode 100644 src/icons/svg/table.svg create mode 100644 src/icons/svg/tree.svg create mode 100644 src/icons/svg/user.svg create mode 100644 src/icons/svgo.yml create mode 100644 src/layout/components/AppMain.vue create mode 100644 src/layout/components/Navbar.vue create mode 100644 src/layout/components/Sidebar/FixiOSBug.js create mode 100644 src/layout/components/Sidebar/Item.vue create mode 100644 src/layout/components/Sidebar/Link.vue create mode 100644 src/layout/components/Sidebar/Logo.vue create mode 100644 src/layout/components/Sidebar/SidebarItem.vue create mode 100644 src/layout/components/Sidebar/index.vue create mode 100644 src/layout/components/index.js create mode 100644 src/layout/index.vue create mode 100644 src/layout/mixin/ResizeHandler copy.js create mode 100644 src/layout/mixin/ResizeHandler.js create mode 100644 src/main.js create mode 100644 src/mixins/infoList.js create mode 100644 src/permission.js create mode 100644 src/router/index.js create mode 100644 src/settings.js create mode 100644 src/store/getters.js create mode 100644 src/store/index.js create mode 100644 src/store/modules/app.js create mode 100644 src/store/modules/settings.js create mode 100644 src/store/modules/user.js create mode 100644 src/styles/element-ui.scss create mode 100644 src/styles/index.scss create mode 100644 src/styles/mixin.scss create mode 100644 src/styles/sidebar.scss create mode 100644 src/styles/transition.scss create mode 100644 src/styles/variables.scss create mode 100644 src/utils/auth.js create mode 100644 src/utils/date.js create mode 100644 src/utils/get-page-title.js create mode 100644 src/utils/index.js create mode 100644 src/utils/request.js create mode 100644 src/utils/validate.js create mode 100644 src/views/404.vue create mode 100644 src/views/approval/index.vue create mode 100644 src/views/approvalData/index.vue create mode 100644 src/views/approvalList/index.vue create mode 100644 src/views/ceshi/index aaa.vue create mode 100644 src/views/ceshi/index.vue create mode 100644 src/views/dashboard/index copy 2.vue create mode 100644 src/views/dashboard/index copy.vue create mode 100644 src/views/dashboard/index.vue create mode 100644 src/views/form/index.vue create mode 100644 src/views/index.vue create mode 100644 src/views/login/dingxingLogin.vue create mode 100644 src/views/login/index copy.vue create mode 100644 src/views/login/index.vue create mode 100644 src/views/login/quantitativeListLogin.vue create mode 100644 src/views/login/zerenLogin.vue create mode 100644 src/views/login/zhenggaiLogin.vue create mode 100644 src/views/mete/index.vue create mode 100644 src/views/nested/menu1/index.vue create mode 100644 src/views/nested/menu1/menu1-1/index.vue create mode 100644 src/views/nested/menu1/menu1-2/index.vue create mode 100644 src/views/nested/menu1/menu1-2/menu1-2-1/index.vue create mode 100644 src/views/nested/menu1/menu1-2/menu1-2-2/index.vue create mode 100644 src/views/nested/menu1/menu1-3/index.vue create mode 100644 src/views/nested/menu2/index.vue create mode 100644 src/views/qualitative/index.vue create mode 100644 src/views/quantitativeList/index.vue create mode 100644 src/views/record/details.vue create mode 100644 src/views/record/index.vue create mode 100644 src/views/rectification/index.vue create mode 100644 src/views/responsible/index.vue create mode 100644 src/views/table/index.vue create mode 100644 src/views/tree/index.vue create mode 100644 tests/unit/.eslintrc.js create mode 100644 tests/unit/components/Breadcrumb.spec.js create mode 100644 tests/unit/components/Hamburger.spec.js create mode 100644 tests/unit/components/SvgIcon.spec.js create mode 100644 tests/unit/utils/formatTime.spec.js create mode 100644 tests/unit/utils/param2Obj.spec.js create mode 100644 tests/unit/utils/parseTime.spec.js create mode 100644 tests/unit/utils/validate.spec.js create mode 100644 vue.config.js diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..ea6e20f --- /dev/null +++ b/.editorconfig @@ -0,0 +1,14 @@ +# http://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..8f15e40 --- /dev/null +++ b/.env.development @@ -0,0 +1,5 @@ +# just a flag +ENV = 'development' + +# base api +VUE_APP_BASE_API = 'http://gin.vueadmin.net/api' diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..07d391e --- /dev/null +++ b/.env.production @@ -0,0 +1,6 @@ +# just a flag +ENV = 'production' + +# base api +VUE_APP_BASE_API = '/api' + diff --git a/.env.staging b/.env.staging new file mode 100644 index 0000000..abd748d --- /dev/null +++ b/.env.staging @@ -0,0 +1,8 @@ +NODE_ENV = production + +# just a flag +ENV = 'staging' + +# base api +VUE_APP_BASE_API = 'http://new.hxgk.group/api' + diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..e6529fc --- /dev/null +++ b/.eslintignore @@ -0,0 +1,4 @@ +build/*.js +src/assets +public +dist diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..c977505 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,198 @@ +module.exports = { + root: true, + parserOptions: { + parser: 'babel-eslint', + sourceType: 'module' + }, + env: { + browser: true, + node: true, + es6: true, + }, + extends: ['plugin:vue/recommended', 'eslint:recommended'], + + // add your custom rules here + //it is base on https://github.com/vuejs/eslint-config-vue + rules: { + "vue/max-attributes-per-line": [2, { + "singleline": 10, + "multiline": { + "max": 1, + "allowFirstLine": false + } + }], + "vue/singleline-html-element-content-newline": "off", + "vue/multiline-html-element-content-newline":"off", + "vue/name-property-casing": ["error", "PascalCase"], + "vue/no-v-html": "off", + 'accessor-pairs': 2, + 'arrow-spacing': [2, { + 'before': true, + 'after': true + }], + 'block-spacing': [2, 'always'], + 'brace-style': [2, '1tbs', { + 'allowSingleLine': true + }], + 'camelcase': [0, { + 'properties': 'always' + }], + 'comma-dangle': [2, 'never'], + 'comma-spacing': [2, { + 'before': false, + 'after': true + }], + 'comma-style': [2, 'last'], + 'constructor-super': 2, + 'curly': [2, 'multi-line'], + 'dot-location': [2, 'property'], + 'eol-last': 2, + 'eqeqeq': ["error", "always", {"null": "ignore"}], + 'generator-star-spacing': [2, { + 'before': true, + 'after': true + }], + 'handle-callback-err': [2, '^(err|error)$'], + 'indent': [2, 2, { + 'SwitchCase': 1 + }], + 'jsx-quotes': [2, 'prefer-single'], + 'key-spacing': [2, { + 'beforeColon': false, + 'afterColon': true + }], + 'keyword-spacing': [2, { + 'before': true, + 'after': true + }], + 'new-cap': [2, { + 'newIsCap': true, + 'capIsNew': false + }], + 'new-parens': 2, + 'no-array-constructor': 2, + 'no-caller': 2, + 'no-console': 'off', + 'no-class-assign': 2, + 'no-cond-assign': 2, + 'no-const-assign': 2, + 'no-control-regex': 0, + 'no-delete-var': 2, + 'no-dupe-args': 2, + 'no-dupe-class-members': 2, + 'no-dupe-keys': 2, + 'no-duplicate-case': 2, + 'no-empty-character-class': 2, + 'no-empty-pattern': 2, + 'no-eval': 2, + 'no-ex-assign': 2, + 'no-extend-native': 2, + 'no-extra-bind': 2, + 'no-extra-boolean-cast': 2, + 'no-extra-parens': [2, 'functions'], + 'no-fallthrough': 2, + 'no-floating-decimal': 2, + 'no-func-assign': 2, + 'no-implied-eval': 2, + 'no-inner-declarations': [2, 'functions'], + 'no-invalid-regexp': 2, + 'no-irregular-whitespace': 2, + 'no-iterator': 2, + 'no-label-var': 2, + 'no-labels': [2, { + 'allowLoop': false, + 'allowSwitch': false + }], + 'no-lone-blocks': 2, + 'no-mixed-spaces-and-tabs': 2, + 'no-multi-spaces': 2, + 'no-multi-str': 2, + 'no-multiple-empty-lines': [2, { + 'max': 1 + }], + 'no-native-reassign': 2, + 'no-negated-in-lhs': 2, + 'no-new-object': 2, + 'no-new-require': 2, + 'no-new-symbol': 2, + 'no-new-wrappers': 2, + 'no-obj-calls': 2, + 'no-octal': 2, + 'no-octal-escape': 2, + 'no-path-concat': 2, + 'no-proto': 2, + 'no-redeclare': 2, + 'no-regex-spaces': 2, + 'no-return-assign': [2, 'except-parens'], + 'no-self-assign': 2, + 'no-self-compare': 2, + 'no-sequences': 2, + 'no-shadow-restricted-names': 2, + 'no-spaced-func': 2, + 'no-sparse-arrays': 2, + 'no-this-before-super': 2, + 'no-throw-literal': 2, + 'no-trailing-spaces': 2, + 'no-undef': 2, + 'no-undef-init': 2, + 'no-unexpected-multiline': 2, + 'no-unmodified-loop-condition': 2, + 'no-unneeded-ternary': [2, { + 'defaultAssignment': false + }], + 'no-unreachable': 2, + 'no-unsafe-finally': 2, + 'no-unused-vars': [2, { + 'vars': 'all', + 'args': 'none' + }], + 'no-useless-call': 2, + 'no-useless-computed-key': 2, + 'no-useless-constructor': 2, + 'no-useless-escape': 0, + 'no-whitespace-before-property': 2, + 'no-with': 2, + 'one-var': [2, { + 'initialized': 'never' + }], + 'operator-linebreak': [2, 'after', { + 'overrides': { + '?': 'before', + ':': 'before' + } + }], + 'padded-blocks': [2, 'never'], + 'quotes': [2, 'single', { + 'avoidEscape': true, + 'allowTemplateLiterals': true + }], + 'semi': [2, 'never'], + 'semi-spacing': [2, { + 'before': false, + 'after': true + }], + 'space-before-blocks': [2, 'always'], + 'space-before-function-paren': [2, 'never'], + 'space-in-parens': [2, 'never'], + 'space-infix-ops': 2, + 'space-unary-ops': [2, { + 'words': true, + 'nonwords': false + }], + 'spaced-comment': [2, 'always', { + 'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ','] + }], + 'template-curly-spacing': [2, 'never'], + 'use-isnan': 2, + 'valid-typeof': 2, + 'wrap-iife': [2, 'any'], + 'yield-star-spacing': [2, 'both'], + 'yoda': [2, 'never'], + 'prefer-const': 2, + 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, + 'object-curly-spacing': [2, 'always', { + objectsInObjects: false + }], + 'array-bracket-spacing': [2, 'never'] + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9ad28d2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +.DS_Store +node_modules/ +dist/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* +package-lock.json +tests/**/coverage/ + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..f4be7a0 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: 10 +script: npm run test +notifications: + email: false diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..6151575 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-present PanJiaChen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README-zh.md b/README-zh.md new file mode 100644 index 0000000..1beec9b --- /dev/null +++ b/README-zh.md @@ -0,0 +1,111 @@ +# vue-admin-template + +> 这是一个极简的 vue admin 管理后台。它只包含了 Element UI & axios & iconfont & permission control & lint,这些搭建后台必要的东西。 + +[线上地址](http://panjiachen.github.io/vue-admin-template) + +[国内访问](https://panjiachen.gitee.io/vue-admin-template) + +目前版本为 `v4.0+` 基于 `vue-cli` 进行构建,若你想使用旧版本,可以切换分支到[tag/3.11.0](https://github.com/PanJiaChen/vue-admin-template/tree/tag/3.11.0),它不依赖 `vue-cli`。 + +

+ SPONSORED BY +

+

+ + + +

+ +## Extra + +如果你想要根据用户角色来动态生成侧边栏和 router,你可以使用该分支[permission-control](https://github.com/PanJiaChen/vue-admin-template/tree/permission-control) + +## 相关项目 + +- [vue-element-admin](https://github.com/PanJiaChen/vue-element-admin) + +- [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin) + +- [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) + +- [awesome-project](https://github.com/PanJiaChen/vue-element-admin/issues/2312) + +写了一个系列的教程配套文章,如何从零构建后一个完整的后台项目: + +- [手摸手,带你用 vue 撸后台 系列一(基础篇)](https://juejin.im/post/59097cd7a22b9d0065fb61d2) +- [手摸手,带你用 vue 撸后台 系列二(登录权限篇)](https://juejin.im/post/591aa14f570c35006961acac) +- [手摸手,带你用 vue 撸后台 系列三 (实战篇)](https://juejin.im/post/593121aa0ce4630057f70d35) +- [手摸手,带你用 vue 撸后台 系列四(vueAdmin 一个极简的后台基础模板,专门针对本项目的文章,算作是一篇文档)](https://juejin.im/post/595b4d776fb9a06bbe7dba56) +- [手摸手,带你封装一个 vue component](https://segmentfault.com/a/1190000009090836) + +## Build Setup + +```bash +# 克隆项目 +git clone https://github.com/PanJiaChen/vue-admin-template.git + +# 进入项目目录 +cd vue-admin-template + +# 安装依赖 +npm install + +# 建议不要直接使用 cnpm 安装以来,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题 +npm install --registry=https://registry.npm.taobao.org + +# 启动服务 +npm run dev +``` + +浏览器访问 [http://localhost:9528](http://localhost:9528) + +## 发布 + +```bash +# 构建测试环境 +npm run build:stage + +# 构建生产环境 +npm run build:prod +``` + +## 其它 + +```bash +# 预览发布环境效果 +npm run preview + +# 预览发布环境效果 + 静态资源分析 +npm run preview -- --report + +# 代码格式检查 +npm run lint + +# 代码格式检查并自动修复 +npm run lint -- --fix +``` + +更多信息请参考 [使用文档](https://panjiachen.github.io/vue-element-admin-site/zh/) + +## 购买贴纸 + +你也可以通过 购买[官方授权的贴纸](https://smallsticker.com/product/vue-element-admin) 的方式来支持 vue-element-admin - 每售出一张贴纸,我们将获得 2 元的捐赠。 + +## Demo + +![demo](https://github.com/PanJiaChen/PanJiaChen.github.io/blob/master/images/demo.gif) + +## Browsers support + +Modern browsers and Internet Explorer 10+. + +| [IE / Edge](http://godban.github.io/browsers-support-badges/)
IE / Edge | [Firefox](http://godban.github.io/browsers-support-badges/)
Firefox | [Chrome](http://godban.github.io/browsers-support-badges/)
Chrome | [Safari](http://godban.github.io/browsers-support-badges/)
Safari | +| --------- | --------- | --------- | --------- | +| IE10, IE11, Edge| last 2 versions| last 2 versions| last 2 versions + +## License + +[MIT](https://github.com/PanJiaChen/vue-admin-template/blob/master/LICENSE) license. + +Copyright (c) 2017-present PanJiaChen diff --git a/README.md b/README.md new file mode 100644 index 0000000..fa54b78 --- /dev/null +++ b/README.md @@ -0,0 +1,99 @@ +# vue-admin-template + +English | [简体中文](./README-zh.md) + +> A minimal vue admin template with Element UI & axios & iconfont & permission control & lint + +**Live demo:** http://panjiachen.github.io/vue-admin-template + + +**The current version is `v4.0+` build on `vue-cli`. If you want to use the old version , you can switch branch to [tag/3.11.0](https://github.com/PanJiaChen/vue-admin-template/tree/tag/3.11.0), it does not rely on `vue-cli`** + +

+ SPONSORED BY +

+

+ + + +

+ +## Build Setup + +```bash +# clone the project +git clone https://github.com/PanJiaChen/vue-admin-template.git + +# enter the project directory +cd vue-admin-template + +# install dependency +npm install + +# develop +npm run dev +``` + +This will automatically open http://localhost:9528 + +## Build + +```bash +# build for test environment +npm run build:stage + +# build for production environment +npm run build:prod +``` + +## Advanced + +```bash +# preview the release environment effect +npm run preview + +# preview the release environment effect + static resource analysis +npm run preview -- --report + +# code format check +npm run lint + +# code format check and auto fix +npm run lint -- --fix +``` + +Refer to [Documentation](https://panjiachen.github.io/vue-element-admin-site/guide/essentials/deploy.html) for more information + +## Demo + +![demo](https://github.com/PanJiaChen/PanJiaChen.github.io/blob/master/images/demo.gif) + +## Extra + +If you want router permission && generate menu by user roles , you can use this branch [permission-control](https://github.com/PanJiaChen/vue-admin-template/tree/permission-control) + +For `typescript` version, you can use [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) (Credits: [@Armour](https://github.com/Armour)) + +## Related Project + +- [vue-element-admin](https://github.com/PanJiaChen/vue-element-admin) + +- [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin) + +- [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) + +- [awesome-project](https://github.com/PanJiaChen/vue-element-admin/issues/2312) + +## Browsers support + +Modern browsers and Internet Explorer 10+. + +| [IE / Edge](http://godban.github.io/browsers-support-badges/)
IE / Edge | [Firefox](http://godban.github.io/browsers-support-badges/)
Firefox | [Chrome](http://godban.github.io/browsers-support-badges/)
Chrome | [Safari](http://godban.github.io/browsers-support-badges/)
Safari | +| --------- | --------- | --------- | --------- | +| IE10, IE11, Edge| last 2 versions| last 2 versions| last 2 versions + +## License + +[MIT](https://github.com/PanJiaChen/vue-admin-template/blob/master/LICENSE) license. + +Copyright (c) 2017-present PanJiaChen diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..fb82b27 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,14 @@ +module.exports = { + presets: [ + // https://github.com/vuejs/vue-cli/tree/master/packages/@vue/babel-preset-app + '@vue/cli-plugin-babel/preset' + ], + 'env': { + 'development': { + // babel-plugin-dynamic-import-node plugin only does one thing by converting all import() to require(). + // This plugin can significantly increase the speed of hot updates, when you have a large number of pages. + // https://panjiachen.github.io/vue-element-admin-site/guide/advanced/lazy-loading.html + 'plugins': ['dynamic-import-node'] + } + } +} diff --git a/build/index.js b/build/index.js new file mode 100644 index 0000000..0c57de2 --- /dev/null +++ b/build/index.js @@ -0,0 +1,35 @@ +const { run } = require('runjs') +const chalk = require('chalk') +const config = require('../vue.config.js') +const rawArgv = process.argv.slice(2) +const args = rawArgv.join(' ') + +if (process.env.npm_config_preview || rawArgv.includes('--preview')) { + const report = rawArgv.includes('--report') + + run(`vue-cli-service build ${args}`) + + const port = 9526 + const publicPath = config.publicPath + + var connect = require('connect') + var serveStatic = require('serve-static') + const app = connect() + + app.use( + publicPath, + serveStatic('./dist', { + index: ['index.html', '/'] + }) + ) + + app.listen(port, function () { + console.log(chalk.green(`> Preview at http://localhost:${port}${publicPath}`)) + if (report) { + console.log(chalk.green(`> Report at http://localhost:${port}${publicPath}report.html`)) + } + + }) +} else { + run(`vue-cli-service build ${args}`) +} diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..b98bfb0 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,24 @@ +module.exports = { + moduleFileExtensions: ['js', 'jsx', 'json', 'vue'], + transform: { + '^.+\\.vue$': 'vue-jest', + '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': + 'jest-transform-stub', + '^.+\\.jsx?$': 'babel-jest' + }, + moduleNameMapper: { + '^@/(.*)$': '/src/$1' + }, + snapshotSerializers: ['jest-serializer-vue'], + testMatch: [ + '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)' + ], + collectCoverageFrom: ['src/utils/**/*.{js,vue}', '!src/utils/auth.js', '!src/utils/request.js', 'src/components/**/*.{js,vue}'], + coverageDirectory: '/tests/unit/coverage', + // 'collectCoverage': true, + 'coverageReporters': [ + 'lcov', + 'text-summary' + ], + testURL: 'http://gin.vueadmin.net/' +} diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..ed079e2 --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "baseUrl": "./", + "paths": { + "@/*": ["src/*"] + } + }, + "exclude": ["node_modules", "dist"] +} diff --git a/mock/index.js b/mock/index.js new file mode 100644 index 0000000..c514c13 --- /dev/null +++ b/mock/index.js @@ -0,0 +1,57 @@ +const Mock = require('mockjs') +const { param2Obj } = require('./utils') + +const user = require('./user') +const table = require('./table') + +const mocks = [ + ...user, + ...table +] + +// for front mock +// please use it cautiously, it will redefine XMLHttpRequest, +// which will cause many of your third-party libraries to be invalidated(like progress event). +function mockXHR() { + // mock patch + // https://github.com/nuysoft/Mock/issues/300 + Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send + Mock.XHR.prototype.send = function() { + if (this.custom.xhr) { + this.custom.xhr.withCredentials = this.withCredentials || false + + if (this.responseType) { + this.custom.xhr.responseType = this.responseType + } + } + this.proxy_send(...arguments) + } + + function XHR2ExpressReqWrap(respond) { + return function(options) { + let result = null + if (respond instanceof Function) { + const { body, type, url } = options + // https://expressjs.com/en/4x/api.html#req + result = respond({ + method: type, + body: JSON.parse(body), + query: param2Obj(url) + }) + } else { + result = respond + } + return Mock.mock(result) + } + } + + for (const i of mocks) { + Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response)) + } +} + +module.exports = { + mocks, + mockXHR +} + diff --git a/mock/mock-server.js b/mock/mock-server.js new file mode 100644 index 0000000..8941ec0 --- /dev/null +++ b/mock/mock-server.js @@ -0,0 +1,81 @@ +const chokidar = require('chokidar') +const bodyParser = require('body-parser') +const chalk = require('chalk') +const path = require('path') +const Mock = require('mockjs') + +const mockDir = path.join(process.cwd(), 'mock') + +function registerRoutes(app) { + let mockLastIndex + const { mocks } = require('./index.js') + const mocksForServer = mocks.map(route => { + return responseFake(route.url, route.type, route.response) + }) + for (const mock of mocksForServer) { + app[mock.type](mock.url, mock.response) + mockLastIndex = app._router.stack.length + } + const mockRoutesLength = Object.keys(mocksForServer).length + return { + mockRoutesLength: mockRoutesLength, + mockStartIndex: mockLastIndex - mockRoutesLength + } +} + +function unregisterRoutes() { + Object.keys(require.cache).forEach(i => { + if (i.includes(mockDir)) { + delete require.cache[require.resolve(i)] + } + }) +} + +// for mock server +const responseFake = (url, type, respond) => { + return { + url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`), + type: type || 'get', + response(req, res) { + console.log('request invoke:' + req.path) + res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond)) + } + } +} + +module.exports = app => { + // parse app.body + // https://expressjs.com/en/4x/api.html#req.body + app.use(bodyParser.json()) + app.use(bodyParser.urlencoded({ + extended: true + })) + + const mockRoutes = registerRoutes(app) + var mockRoutesLength = mockRoutes.mockRoutesLength + var mockStartIndex = mockRoutes.mockStartIndex + + // watch files, hot reload mock server + chokidar.watch(mockDir, { + ignored: /mock-server/, + ignoreInitial: true + }).on('all', (event, path) => { + if (event === 'change' || event === 'add') { + try { + // remove mock routes stack + app._router.stack.splice(mockStartIndex, mockRoutesLength) + + // clear routes cache + unregisterRoutes() + + const mockRoutes = registerRoutes(app) + mockRoutesLength = mockRoutes.mockRoutesLength + mockStartIndex = mockRoutes.mockStartIndex + + console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`)) + } catch (error) { + console.log(chalk.redBright(error)) + } + } + }) +} diff --git a/mock/table.js b/mock/table.js new file mode 100644 index 0000000..bd0e013 --- /dev/null +++ b/mock/table.js @@ -0,0 +1,29 @@ +const Mock = require('mockjs') + +const data = Mock.mock({ + 'items|30': [{ + id: '@id', + title: '@sentence(10, 20)', + 'status|1': ['published', 'draft', 'deleted'], + author: 'name', + display_time: '@datetime', + pageviews: '@integer(300, 5000)' + }] +}) + +module.exports = [ + { + url: '/vue-admin-template/table/list', + type: 'get', + response: config => { + const items = data.items + return { + code: 20000, + data: { + total: items.length, + items: items + } + } + } + } +] diff --git a/mock/user.js b/mock/user.js new file mode 100644 index 0000000..7555338 --- /dev/null +++ b/mock/user.js @@ -0,0 +1,84 @@ + +const tokens = { + admin: { + token: 'admin-token' + }, + editor: { + token: 'editor-token' + } +} + +const users = { + 'admin-token': { + roles: ['admin'], + introduction: 'I am a super administrator', + avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif', + name: 'Super Admin' + }, + 'editor-token': { + roles: ['editor'], + introduction: 'I am an editor', + avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif', + name: 'Normal Editor' + } +} + +module.exports = [ + // user login + { + url: '/vue-admin-template/user/login', + type: 'post', + response: config => { + const { username } = config.body + const token = tokens[username] + + // mock error + if (!token) { + return { + code: 60204, + message: 'Account and password are incorrect.' + } + } + + return { + code: 20000, + data: token + } + } + }, + + // get user info + { + url: '/vue-admin-template/user/info\.*', + type: 'get', + response: config => { + const { token } = config.query + const info = users[token] + + // mock error + if (!info) { + return { + code: 50008, + message: 'Login failed, unable to get user details.' + } + } + + return { + code: 20000, + data: info + } + } + }, + + // user logout + { + url: '/vue-admin-template/user/logout', + type: 'post', + response: _ => { + return { + code: 20000, + data: 'success' + } + } + } +] diff --git a/mock/utils.js b/mock/utils.js new file mode 100644 index 0000000..95cc27d --- /dev/null +++ b/mock/utils.js @@ -0,0 +1,25 @@ +/** + * @param {string} url + * @returns {Object} + */ +function param2Obj(url) { + const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ') + if (!search) { + return {} + } + const obj = {} + const searchArr = search.split('&') + searchArr.forEach(v => { + const index = v.indexOf('=') + if (index !== -1) { + const name = v.substring(0, index) + const val = v.substring(index + 1, v.length) + obj[name] = val + } + }) + return obj +} + +module.exports = { + param2Obj +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..0a514b0 --- /dev/null +++ b/package.json @@ -0,0 +1,62 @@ +{ + "name": "vue-admin-template", + "version": "4.4.0", + "description": "A vue admin template with Element UI & axios & iconfont & permission control & lint", + "author": "Pan ", + "scripts": { + "dev": "vue-cli-service serve", + "build:prod": "vue-cli-service build", + "build:stage": "vue-cli-service build --mode staging", + "preview": "node build/index.js --preview", + "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml", + "lint": "eslint --ext .js,.vue src", + "test:unit": "jest --clearCache && vue-cli-service test:unit", + "test:ci": "npm run lint && npm run test:unit" + }, + "dependencies": { + "axios": "0.18.1", + "core-js": "^3.20.2", + "element-ui": "2.15.6", + "js-cookie": "2.2.0", + "normalize.css": "7.0.0", + "nprogress": "0.2.0", + "path-to-regexp": "2.4.0", + "vue": "2.6.10", + "vue-router": "3.0.6", + "vuex": "3.1.0" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "4.4.4", + "@vue/cli-plugin-eslint": "4.4.4", + "@vue/cli-plugin-unit-jest": "4.4.4", + "@vue/cli-service": "4.4.4", + "@vue/test-utils": "1.0.0-beta.29", + "autoprefixer": "9.5.1", + "babel-eslint": "10.1.0", + "babel-jest": "23.6.0", + "babel-plugin-dynamic-import-node": "2.3.3", + "chalk": "2.4.2", + "connect": "3.6.6", + "eslint": "6.7.2", + "eslint-plugin-vue": "6.2.2", + "html-webpack-plugin": "3.2.0", + "mockjs": "1.0.1-beta3", + "runjs": "4.3.2", + "sass": "1.26.8", + "sass-loader": "8.0.2", + "script-ext-html-webpack-plugin": "2.1.3", + "serve-static": "1.13.2", + "svg-sprite-loader": "4.1.3", + "svgo": "1.2.2", + "vue-template-compiler": "2.6.10" + }, + "browserslist": [ + "> 1%", + "last 2 versions" + ], + "engines": { + "node": ">=8.9", + "npm": ">= 3.0.0" + }, + "license": "MIT" +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..10473ef --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,8 @@ +// https://github.com/michael-ciniawsky/postcss-load-config + +module.exports = { + 'plugins': { + // to edit target browsers: use "browserslist" field in package.json + 'autoprefixer': {} + } +} diff --git a/public/--favicon.ico b/public/--favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..34b63ac63a87ee3ea8e7a0f3f5b5406c437e2112 GIT binary patch literal 67646 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 X;@D+E7Ad=S_FbjlW&KY_+xPzm3MBT? literal 0 HcmV?d00001 diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..4a366d34dada2f453ff8cf6c6cb158dfd7c2c337 GIT binary patch literal 73507 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 z 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 literal 0 HcmV?d00001 diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..4393c66 --- /dev/null +++ b/public/index.html @@ -0,0 +1,19 @@ + + + + + + + + <%= webpackConfig.name %> + + + + + +

+ + + diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..ec9032c --- /dev/null +++ b/src/App.vue @@ -0,0 +1,11 @@ + + + diff --git a/src/api/dutys.js b/src/api/dutys.js new file mode 100644 index 0000000..479f647 --- /dev/null +++ b/src/api/dutys.js @@ -0,0 +1,209 @@ +import request from '@/utils/request' +//个人需要填写的考核项目 +export function myassessmentlist(params) { + return request({ + url: '/dutys/myassessmentlist', + method: 'post', + params + }) +} +//根据具体考核项目获取被考核部门 +export const getDutydepartlist = (data) => { + return request({ + url: '/dutys/getDutydepartlist', + method: 'post', + data: data + }) +} +//根据具体考核项目获取被考核部门 +export const addassessmentscore = (data) => { + return request({ + url: '/dutys/addassessmentscore', + method: 'post', + data: data + }) +} +//个人考核评价记录 +export const myevaluatelist = (data) => { + return request({ + url: '/dutys/myevaluatelist', + method: 'post', + data: data + }) +} +//根据部门和时间获取考核详情 +export const getdeparttimeassess = (data) => { + return request({ + url: '/dutys/getdeparttimeassess', + method: 'post', + data: data + }) +} +//获取企业微信发起基础配置 +export const getconfig = (data) => { + return request({ + url: '/examine/getconfig', + method: 'post', + data: data + }) +} +//以部门维度考核内容列表 +export const departmentassess = (data) => { + return request({ + url: '/dutys/departmentassess', + method: 'post', + data: data + }) +} +//根据部门和时间写入全部考核项分值 +export const departmentassessdata = (data) => { + return request({ + url: '/dutys/departmentassessdata', + method: 'post', + data: data + }) +} +//查看审批详细内容 +export const lookdepartmentassessinfo = (data) => { + return request({ + url: '/noverify/lookdepartmentassessinfo', + method: 'post', + data: data + }) +} +//查看本部门提交的和个人提交的审批 +export const lookpersonalordepartment = (data) => { + return request({ + url: '/dutys/lookpersonalordepartment', + method: 'post', + data: data + }) +} +//定性考核列表 +export const qualevalulist = (data) => { + return request({ + url: '/eval/qualevalulist', + method: 'post', + data: data + }) +} +//添加加分或减分 +export const additionandsubtractionscore = (data) => { + return request({ + url: '/eval/plusorminuspoints', + method: 'post', + data: data + }) +} +//流程列表 +export const seeflowlog = (data) => { + return request({ + url: '/eval/seeflowlog', + method: 'post', + data: data + }) +} +//文档上传 +export const upordown = (data) => { + return request({ + url: '/upordown', + method: 'post', + data: data + }) +} +// @Tags Api +// @Summary 获取集团架构人员信息对照表 +// @Security ApiKeyAuth +// @accept application/json +// @Produce application/json +// @Param data body dbModel.Api true "获取集团架构" +// @Success 200 {string} json "{"success":true,"data":{},"msg":"获取成功"}" +// @Router /group/grouplist [get] +export const getgroupuser = (data) => { + return request({ + url: '/group/getgroupuser', + method: 'post', + data + }) +} +//划分责任人 +export const adddivisionresponsibility = (data) => { + return request({ + url: '/eval/rersonincharge', + method: 'post', + data: data + }) +} +//添加整改措施 +export const addcorrectivemeasures = (data) => { + return request({ + url: '/eval/rectificationmeasures', + method: 'post', + data: data + }) +} +//定量考核列表 +export const qualitativeevalration = (data) => { + return request({ + url: '/eval/qualitativeevalration', + method: 'post', + data: data + }) +} +//获取集团架构(集团+分厂) +export const getgroupdepartmap = (data) => { + return request({ + url: '/group/getgroupdepartmap', + method: 'post', + data: data + }) +} +//获取分厂 +export const departmentlist = (data) => { + return request({ + url: '/group/departmentlist', + method: 'post', + data: data + }) +} +//定量考核打分 +export const addflowrationlog = (data) => { + return request({ + url: '/eval/addflowrationlog', + method: 'post', + data: data + }) +} +//查看定性考核审批列表 +export const lookdutkscoreflow = (data) => { + return request({ + url: '/eval/lookdutkscoreflow', + method: 'post', + data: data + }) +} +//查看定量考核 +export const lookrationkscoreflow = (data) => { + return request({ + url: '/eval/lookrationkscoreflow', + method: 'post', + data: data + }) +} +//获取班组 +export const getteamlist = (data) => { + return request({ + url: '/noverify/getteamlist', + method: 'post', + data: data + }) +} +//获取人员 +export const stafflist = (data) => { + return request({ + url: '/staff/stafflist', + method: 'post', + data: data + }) +} + diff --git a/src/api/group.js b/src/api/group.js new file mode 100644 index 0000000..633ce2c --- /dev/null +++ b/src/api/group.js @@ -0,0 +1,24 @@ +import request from '@/utils/request' +// @Tags Api +// @Summary 获取集团架构(集团+分厂) +// @Security ApiKeyAuth +// @accept application/json +// @Produce application/json +// @Param data body dbModel.Api true "获取集团架构" +// @Success 200 {string} json "{"success":true,"data":{},"msg":"获取成功"}" +// @Router /group/grouplist [get] +export const getgroupdepartmap = (data) => { + return request({ + url: '/group/getgroupdepartmap', + method: 'post', + data: data + }) + } + //以部门维度考核内容列表 +export const departmentassess = (data) => { + return request({ + url: '/dutys/departmentassess', + method: 'post', + data: data + }) + } \ No newline at end of file diff --git a/src/api/login/login.js b/src/api/login/login.js new file mode 100644 index 0000000..6015f22 --- /dev/null +++ b/src/api/login/login.js @@ -0,0 +1,26 @@ +import request from '@/utils/request' +//个人需要填写的考核项目 +export const oauth2 = (data) => { + return request({ + url: '/base/oauth2', + method: 'post', + data: data + }) + } +// @Summary 用户端登录 +// @Produce application/json +// @Param data body {username:"string",password:"string"} +// @Router /base/login [post] +export const mylogin = (data) => { + return request({ + url: '/base/mylogin', + method: 'post', + data: data + }) +} +export function logout() { + return request({ + url: '/vue-admin-template/user/logout', + method: 'post' + }) +} diff --git a/src/api/renwu.js b/src/api/renwu.js new file mode 100644 index 0000000..97ea0c8 --- /dev/null +++ b/src/api/renwu.js @@ -0,0 +1,75 @@ +import request from '@/utils/request' +//注销接口 +export function logout(params) { + return request({ + url: '/logout.do', + method: 'get', + params + }) +} +//登录接口 +export const login = (data) => { + return request({ + url: '/login.do', + method: 'post', + data: data + }) +} +//注册 +export const register = (data) => { + return request({ + url: '/login/register', + method: 'post', + data: data + }) +} +//绑定提现账户 +export const accountBinding = (data) => { + return request({ + url: '/user/accountBinding', + method: 'post', + data: data + }) +} +//申请提现 +export const withdraw = (data) => { + return request({ + url: '/user/withdraw', + method: 'post', + data: data + }) +} +//激活码激活 +export const cdkActivation = (data) => { + return request({ + url: '/user/cdkActivation', + method: 'post', + data: data + }) +} +//主页 +export const index = (data) => { + return request({ + url: '/user/index', + method: 'post', + data: data + }) +} +//开始任务按钮 +export const start = (data) => { + return request({ + url: '/user/start', + method: 'post', + data: data + }) +} +//校验是否到期并且上传收益接口 +export const checkAndAdd = (data) => { + return request({ + url: '/user/checkAndAdd', + method: 'post', + data: data + }) +} + + diff --git a/src/api/table.js b/src/api/table.js new file mode 100644 index 0000000..2752f52 --- /dev/null +++ b/src/api/table.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +export function getList(params) { + return request({ + url: '/vue-admin-template/table/list', + method: 'get', + params + }) +} diff --git a/src/api/user.js b/src/api/user.js new file mode 100644 index 0000000..0cc0ea5 --- /dev/null +++ b/src/api/user.js @@ -0,0 +1,51 @@ +import request from '@/utils/request' + +export function login(data) { + return request({ + url: '/vue-admin-template/user/login', + method: 'post', + data + }) +} + +export function getInfo(token) { + return request({ + url: '/vue-admin-template/user/info', + method: 'get', + params: { token } + }) +} +// @Summary 获取验证码 +// @Produce application/json +// @Param data body {username:"string",password:"string"} +// @Router /base/captcha [post] +// export const captcha = (data) => { +// return service({ +// url: '/base/captcha', +// method: 'post', +// data: data +// }) +// } +export function captcha() { + return request({ + url: '/base/captcha', + method: 'post' + }) +} +// @Summary 用户端登录 +// @Produce application/json +// @Param data body {username:"string",password:"string"} +// @Router /base/login [post] +export const mylogin = (data) => { + return request({ + url: '/base/mylogin', + method: 'post', + data: data + }) +} +export function logout() { + return request({ + url: '/vue-admin-template/user/logout', + method: 'post' + }) +} diff --git a/src/assets/404_images/404.png b/src/assets/404_images/404.png new file mode 100644 index 0000000000000000000000000000000000000000..3d8e2305cc973ad2121403aee4bf08728f76c461 GIT binary patch literal 98071 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
Uu4Um7DAUpfcjI28Sm@@eQW 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 literal 0 HcmV?d00001 diff --git a/src/assets/404_images/404_cloud.png b/src/assets/404_images/404_cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..c6281d09013e0a2c5f8e699a0a6038d9480291e5 GIT binary patch literal 4766 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 literal 0 HcmV?d00001 diff --git a/src/assets/404_images/login_background.jpg b/src/assets/404_images/login_background.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e601f24afda4237347f22d162d1e2ff5a7753b3b GIT binary patch literal 41154 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/404_images/login_left.svg b/src/assets/404_images/login_left.svg new file mode 100644 index 0000000..9c48b0b --- /dev/null +++ b/src/assets/404_images/login_left.svg @@ -0,0 +1,123 @@ + + + 搭建网站 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/404_images/logo.jpg b/src/assets/404_images/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..09502d587c7aa3fdef6e4a5ede414abad03fb4e0 GIT binary patch literal 27616 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⩽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 literal 0 HcmV?d00001 diff --git a/src/assets/404_images/logo.png b/src/assets/404_images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b497ee073990939017bc8e7eec7f3e869416fe22 GIT binary patch literal 8060 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 literal 0 HcmV?d00001 diff --git a/src/assets/404_images/logo_login.png b/src/assets/404_images/logo_login.png new file mode 100644 index 0000000000000000000000000000000000000000..e330458eae0dfc3c0d0a8185cf9a8810ad2e6c06 GIT binary patch literal 25312 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 literal 0 HcmV?d00001 diff --git a/src/components/Breadcrumb/index.vue b/src/components/Breadcrumb/index.vue new file mode 100644 index 0000000..29f9a04 --- /dev/null +++ b/src/components/Breadcrumb/index.vue @@ -0,0 +1,78 @@ + + + + + diff --git a/src/components/Hamburger/index.vue b/src/components/Hamburger/index.vue new file mode 100644 index 0000000..368b002 --- /dev/null +++ b/src/components/Hamburger/index.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/src/components/SvgIcon/index.vue b/src/components/SvgIcon/index.vue new file mode 100644 index 0000000..b07ded2 --- /dev/null +++ b/src/components/SvgIcon/index.vue @@ -0,0 +1,62 @@ + + + + + diff --git a/src/components/upload/image.vue b/src/components/upload/image.vue new file mode 100644 index 0000000..8917029 --- /dev/null +++ b/src/components/upload/image.vue @@ -0,0 +1,104 @@ + + + + + + diff --git a/src/icons/index.js b/src/icons/index.js new file mode 100644 index 0000000..2c6b309 --- /dev/null +++ b/src/icons/index.js @@ -0,0 +1,9 @@ +import Vue from 'vue' +import SvgIcon from '@/components/SvgIcon'// svg component + +// register globally +Vue.component('svg-icon', SvgIcon) + +const req = require.context('./svg', false, /\.svg$/) +const requireAll = requireContext => requireContext.keys().map(requireContext) +requireAll(req) diff --git a/src/icons/svg/dashboard.svg b/src/icons/svg/dashboard.svg new file mode 100644 index 0000000..5317d37 --- /dev/null +++ b/src/icons/svg/dashboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/example.svg b/src/icons/svg/example.svg new file mode 100644 index 0000000..46f42b5 --- /dev/null +++ b/src/icons/svg/example.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/eye-open.svg b/src/icons/svg/eye-open.svg new file mode 100644 index 0000000..88dcc98 --- /dev/null +++ b/src/icons/svg/eye-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/eye.svg b/src/icons/svg/eye.svg new file mode 100644 index 0000000..16ed2d8 --- /dev/null +++ b/src/icons/svg/eye.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/form.svg b/src/icons/svg/form.svg new file mode 100644 index 0000000..dcbaa18 --- /dev/null +++ b/src/icons/svg/form.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/link.svg b/src/icons/svg/link.svg new file mode 100644 index 0000000..48197ba --- /dev/null +++ b/src/icons/svg/link.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/nested.svg b/src/icons/svg/nested.svg new file mode 100644 index 0000000..06713a8 --- /dev/null +++ b/src/icons/svg/nested.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/password.svg b/src/icons/svg/password.svg new file mode 100644 index 0000000..e291d85 --- /dev/null +++ b/src/icons/svg/password.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/table.svg b/src/icons/svg/table.svg new file mode 100644 index 0000000..0e3dc9d --- /dev/null +++ b/src/icons/svg/table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/tree.svg b/src/icons/svg/tree.svg new file mode 100644 index 0000000..dd4b7dd --- /dev/null +++ b/src/icons/svg/tree.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/user.svg b/src/icons/svg/user.svg new file mode 100644 index 0000000..0ba0716 --- /dev/null +++ b/src/icons/svg/user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svgo.yml b/src/icons/svgo.yml new file mode 100644 index 0000000..d11906a --- /dev/null +++ b/src/icons/svgo.yml @@ -0,0 +1,22 @@ +# replace default config + +# multipass: true +# full: true + +plugins: + + # - name + # + # or: + # - name: false + # - name: true + # + # or: + # - name: + # param1: 1 + # param2: 2 + +- removeAttrs: + attrs: + - 'fill' + - 'fill-rule' diff --git a/src/layout/components/AppMain.vue b/src/layout/components/AppMain.vue new file mode 100644 index 0000000..af0962c --- /dev/null +++ b/src/layout/components/AppMain.vue @@ -0,0 +1,41 @@ + + + + + + + diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue new file mode 100644 index 0000000..fe6f152 --- /dev/null +++ b/src/layout/components/Navbar.vue @@ -0,0 +1,158 @@ + + + + + diff --git a/src/layout/components/Sidebar/FixiOSBug.js b/src/layout/components/Sidebar/FixiOSBug.js new file mode 100644 index 0000000..bc14856 --- /dev/null +++ b/src/layout/components/Sidebar/FixiOSBug.js @@ -0,0 +1,26 @@ +export default { + computed: { + device() { + return this.$store.state.app.device + } + }, + mounted() { + // In order to fix the click on menu on the ios device will trigger the mouseleave bug + // https://github.com/PanJiaChen/vue-element-admin/issues/1135 + this.fixBugIniOS() + }, + methods: { + fixBugIniOS() { + const $subMenu = this.$refs.subMenu + if ($subMenu) { + const handleMouseleave = $subMenu.handleMouseleave + $subMenu.handleMouseleave = (e) => { + if (this.device === 'mobile') { + return + } + handleMouseleave(e) + } + } + } + } +} diff --git a/src/layout/components/Sidebar/Item.vue b/src/layout/components/Sidebar/Item.vue new file mode 100644 index 0000000..aa1f5da --- /dev/null +++ b/src/layout/components/Sidebar/Item.vue @@ -0,0 +1,41 @@ + + + diff --git a/src/layout/components/Sidebar/Link.vue b/src/layout/components/Sidebar/Link.vue new file mode 100644 index 0000000..530b3d5 --- /dev/null +++ b/src/layout/components/Sidebar/Link.vue @@ -0,0 +1,43 @@ + + + diff --git a/src/layout/components/Sidebar/Logo.vue b/src/layout/components/Sidebar/Logo.vue new file mode 100644 index 0000000..040fab6 --- /dev/null +++ b/src/layout/components/Sidebar/Logo.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/src/layout/components/Sidebar/SidebarItem.vue b/src/layout/components/Sidebar/SidebarItem.vue new file mode 100644 index 0000000..a418c3d --- /dev/null +++ b/src/layout/components/Sidebar/SidebarItem.vue @@ -0,0 +1,95 @@ + + + diff --git a/src/layout/components/Sidebar/index.vue b/src/layout/components/Sidebar/index.vue new file mode 100644 index 0000000..da39034 --- /dev/null +++ b/src/layout/components/Sidebar/index.vue @@ -0,0 +1,56 @@ + + + diff --git a/src/layout/components/index.js b/src/layout/components/index.js new file mode 100644 index 0000000..97ee3cd --- /dev/null +++ b/src/layout/components/index.js @@ -0,0 +1,3 @@ +export { default as Navbar } from './Navbar' +export { default as Sidebar } from './Sidebar' +export { default as AppMain } from './AppMain' diff --git a/src/layout/index.vue b/src/layout/index.vue new file mode 100644 index 0000000..db22a7b --- /dev/null +++ b/src/layout/index.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/src/layout/mixin/ResizeHandler copy.js b/src/layout/mixin/ResizeHandler copy.js new file mode 100644 index 0000000..e8d0df8 --- /dev/null +++ b/src/layout/mixin/ResizeHandler copy.js @@ -0,0 +1,45 @@ +import store from '@/store' + +const { body } = document +const WIDTH = 992 // refer to Bootstrap's responsive design + +export default { + watch: { + $route(route) { + if (this.device === 'mobile' && this.sidebar.opened) { + store.dispatch('app/closeSideBar', { withoutAnimation: false }) + } + } + }, + beforeMount() { + window.addEventListener('resize', this.$_resizeHandler) + }, + beforeDestroy() { + window.removeEventListener('resize', this.$_resizeHandler) + }, + mounted() { + const isMobile = this.$_isMobile() + if (isMobile) { + store.dispatch('app/toggleDevice', 'mobile') + store.dispatch('app/closeSideBar', { withoutAnimation: true }) + } + }, + methods: { + // use $_ for mixins properties + // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential + $_isMobile() { + const rect = body.getBoundingClientRect() + return rect.width - 1 < WIDTH + }, + $_resizeHandler() { + if (!document.hidden) { + const isMobile = this.$_isMobile() + store.dispatch('app/toggleDevice', isMobile ? 'mobile' : 'desktop') + + if (isMobile) { + store.dispatch('app/closeSideBar', { withoutAnimation: true }) + } + } + } + } +} diff --git a/src/layout/mixin/ResizeHandler.js b/src/layout/mixin/ResizeHandler.js new file mode 100644 index 0000000..e8d0df8 --- /dev/null +++ b/src/layout/mixin/ResizeHandler.js @@ -0,0 +1,45 @@ +import store from '@/store' + +const { body } = document +const WIDTH = 992 // refer to Bootstrap's responsive design + +export default { + watch: { + $route(route) { + if (this.device === 'mobile' && this.sidebar.opened) { + store.dispatch('app/closeSideBar', { withoutAnimation: false }) + } + } + }, + beforeMount() { + window.addEventListener('resize', this.$_resizeHandler) + }, + beforeDestroy() { + window.removeEventListener('resize', this.$_resizeHandler) + }, + mounted() { + const isMobile = this.$_isMobile() + if (isMobile) { + store.dispatch('app/toggleDevice', 'mobile') + store.dispatch('app/closeSideBar', { withoutAnimation: true }) + } + }, + methods: { + // use $_ for mixins properties + // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential + $_isMobile() { + const rect = body.getBoundingClientRect() + return rect.width - 1 < WIDTH + }, + $_resizeHandler() { + if (!document.hidden) { + const isMobile = this.$_isMobile() + store.dispatch('app/toggleDevice', isMobile ? 'mobile' : 'desktop') + + if (isMobile) { + store.dispatch('app/closeSideBar', { withoutAnimation: true }) + } + } + } + } +} diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..07446e2 --- /dev/null +++ b/src/main.js @@ -0,0 +1,43 @@ +import Vue from 'vue' +import axios from 'axios' +import 'normalize.css/normalize.css' // A modern alternative to CSS resets + +import ElementUI from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +// import locale from 'element-ui/lib/locale/lang/en' // lang i18n + +import '@/styles/index.scss' // global css + +import App from './App' +import store from './store' +import router from './router' + +import '@/icons' // icon +// import '@/permission' // permission control + +/** + * If you don't want to use mock-server + * you want to use MockJs for mock api + * you can execute: mockXHR() + * + * Currently MockJs will be used in the production environment, + * please remove it before going online ! ! ! + */ +if (process.env.NODE_ENV === 'production') { + const { mockXHR } = require('../mock') + mockXHR() +} + +// set ElementUI lang to EN +// Vue.use(ElementUI, { locale }) +// 如果想要中文版 element-ui,按如下方式声明 +Vue.use(ElementUI) +Vue.prototype.$axios = axios +Vue.config.productionTip = false + +new Vue({ + el: '#app', + router, + store, + render: h => h(App) +}) diff --git a/src/mixins/infoList.js b/src/mixins/infoList.js new file mode 100644 index 0000000..8541ed5 --- /dev/null +++ b/src/mixins/infoList.js @@ -0,0 +1,75 @@ + +import { formatTimeToStr } from '@/utils/date' + +export default { + data() { + return { + page: 1, + total: 10, + pageSize: 10, + tableData: [], + tabledata:[], + searchInfo: {} + } + }, + methods: { + formatBoolean: function(bool) { + if (bool !== null) { + return bool ? '是' : '否' + } else { + return '' + } + }, + formatDate: function(time) { + if (time !== null && time !== '') { + var date = new Date(time) + return formatTimeToStr(date, 'yyyy-MM-dd hh:mm:ss') + } else { + return '' + } + }, + filterDict(value, type) { + const rowLabel = this[type + 'Options'] && this[type + 'Options'].filter(item => item.value === value) + return rowLabel && rowLabel[0] && rowLabel[0].label + }, + async getDict(type) { + const dicts = await getDict(type) + this[type + 'Options'] = dicts + return dicts + }, + handleSizeChange(val) { + this.pageSize = val + this.getTableData() + }, + handleCurrentChange(val) { + this.page = val + this.getTableData() + }, + // @params beforeFunc function 请求发起前执行的函数 默认为空函数 + // @params afterFunc function 请求完成后执行的函数 默认为空函数 + async getTableData(beforeFunc = () => {}, afterFunc = () => {}) { + beforeFunc() + const table = await this.listApi({ page: this.page, pageSize: this.pageSize, ...this.searchInfo }) + // console.log(table.code) + // console.log("datalist") + // console.log(table.data) + if (table.code === 0) { + this.tableData = table.data.list + this.total = table.data.total + this.count = table.data.count + this.page = table.data.page + this.pageSize = table.data.pageSize + this.pagesize = table.data.pagesize + this.tabledata = table.data.data + // if (table.data.data!='') { + // this.tableData = table.data.data + // } + } + if (table.code === 200) { + this.tableData = table.data + } + + afterFunc() + } + } +} diff --git a/src/permission.js b/src/permission.js new file mode 100644 index 0000000..e1e40d8 --- /dev/null +++ b/src/permission.js @@ -0,0 +1,79 @@ +import router from './router' +import store from './store' +import { Message } from 'element-ui' +import NProgress from 'nprogress' // progress bar +import 'nprogress/nprogress.css' // progress bar style +import { getToken } from '@/utils/auth' // get token from cookie +import getPageTitle from '@/utils/get-page-title' + +NProgress.configure({ showSpinner: false }) // NProgress Configuration + +const whiteList = ['/login'] // no redirect whitelist + +router.beforeEach(async(to, from, next) => { + // start progress bar + NProgress.start() + + // set page title + document.title = getPageTitle(to.meta.title) + + // determine whether the user has logged in + const hasToken = getToken() + if (hasToken!='') { + next({path:'/index'}) + } else { + next({path:'/login'}) + } +// if (hasToken) { +// console.log("hasToken") +// console.log(hasToken) +// // if (to.path === '/login') { +// // console.log("111") +// // // if is logged in, redirect to the home page +// // next({ path: '/' }) +// // NProgress.done() +// // } else { +// // console.log("222") +// // const hasGetUserInfo = store.getters.name +// // if (hasGetUserInfo) { +// // console.log("333") +// // next() + +// // } else { +// // try { +// // console.log("444") +// // // get user info +// // await store.dispatch('user/getInfo') + +// // next() +// // } catch (error) { +// // console.log("555") +// // // remove token and go to login page to re-login +// // await store.dispatch('user/resetToken') +// // Message.error(error || 'Has Error') +// // next(`/login?redirect=${to.path}`) +// // NProgress.done() +// // } +// // } +// // } +// } else { +// console.log("666") +// /* has no token*/ + +// if (whiteList.indexOf(to.path) !== -1) { +// console.log("777") +// // in the free login whitelist, go directly +// next() +// } else { +// console.log("888") +// // other pages that do not have permission to access are redirected to the login page. +// next(`/login?redirect=${to.path}`) +// NProgress.done() +// } +// } +}) + +router.afterEach(() => { + // finish progress bar + NProgress.done() +}) diff --git a/src/router/index.js b/src/router/index.js new file mode 100644 index 0000000..036c065 --- /dev/null +++ b/src/router/index.js @@ -0,0 +1,295 @@ +import Vue from 'vue' +import Router from 'vue-router' + +Vue.use(Router) + +/* Layout */ +import Layout from '@/layout' + +/** + * Note: sub-menu only appear when route children.length >= 1 + * Detail see: https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html + * + * hidden: true if set true, item will not show in the sidebar(default is false) + * alwaysShow: true if set true, will always show the root menu + * if not set alwaysShow, when item has more than one children route, + * it will becomes nested mode, otherwise not show the root menu + * redirect: noRedirect if set noRedirect will no redirect in the breadcrumb + * name:'router-name' the name is used by (must set!!!) + * meta : { + roles: ['admin','editor'] control the page roles (you can set multiple roles) + title: 'title' the name show in sidebar and breadcrumb (recommend set) + icon: 'svg-name'/'el-icon-x' the icon show in the sidebar + breadcrumb: false if set false, the item will hidden in breadcrumb(default is true) + activeMenu: '/example/list' if set path, the sidebar will highlight the path you set + } + */ + +/** + * constantRoutes + * a base page that does not have permission requirements + * all roles can be accessed + */ +export const constantRoutes = [ + { + path: '/login', + component: () => import('@/views/login/index'), + hidden: true + }, + { + path: '/ceshi', + component: () => import('@/views/ceshi/index'), + hidden: true + }, + { + path: '/zerenLogin', + component: () => import('@/views/login/zerenLogin'), + hidden: true + }, + { + path: '/zhenggaiLogin', + component: () => import('@/views/login/zhenggaiLogin'), + hidden: true + }, + { + path: '/quantitativeListLogin', + component: () => import('@/views/login/quantitativeListLogin'), + hidden: true + }, + { + path: '/dingxingLogin', + component: () => import('@/views/login/dingxingLogin'), + hidden: true + }, + { + path: '/responsible', + component: () => import('@/views/responsible/index'), + hidden: true + }, + { + path: '/quantitativeList', + component: () => import('@/views/quantitativeList/index'), + hidden: true + }, + { + path: '/approvalList', + component: () => import('@/views/approvalList/index'), + hidden: true + }, + { + path: '/rectification', + component: () => import('@/views/rectification/index'), + hidden: true + }, + { + path: '/approval', + component: () => import('@/views/approval/index'), + hidden: true + }, + // { + // path: '/details', + // component: () => import('@/views/record/details'), + // hidden: true + // }, + { + path: '/index', + component: () => import('@/views/index'), + hidden: true + }, + { + path: '/404', + component: () => import('@/views/404'), + hidden: true + }, + { + path: '/', + component: Layout, + redirect: '/qualitative', + children: [{ + path: 'qualitative', + name: 'Qualitative', + component: () => import('@/views/qualitative/index'), + meta: { title: '定性考核'} + }] + }, + { + path: '/mete', + component: Layout, + redirect: '/mete', + children: [{ + path: 'mete', + name: 'Mete', + component: () => import('@/views/mete/index'), + meta: { title: '定量考核'} + }] + }, + { + path: '/approvalData', + component: Layout, + redirect: '/approvalData', + children: [{ + path: 'approvalData', + name: 'approvalData', + component: () => import('@/views/approvalData/index'), + meta: { title: '审批记录'} + }] + }, + // { + // path: '/', + // component: Layout, + // redirect: '/dashboard', + // children: [{ + // path: 'dashboard', + // name: 'Dashboard', + // component: () => import('@/views/dashboard/index'), + // meta: { title: '考核项目'} + // }] + // }, + // { + // path: '/record', + // component: Layout, + // redirect: '/record', + // children: [{ + // path: 'record', + // name: 'Record', + // component: () => import('@/views/record/index'), + // meta: { title: '考核记录'} + // }] + // }, + { + path: '/details', + component: Layout, + redirect: '/details', + children: [{ + path: 'details', + name: 'Details', + component: () => import('@/views/record/details'), + // meta: { title: '考核记录详情'} + }] + }, + + + // { + // path: '/example', + // component: Layout, + // redirect: '/example/table', + // name: 'Example', + // meta: { title: '表格', icon: 'el-icon-s-help' }, + // children: [ + // { + // path: 'table', + // name: 'Table', + // component: () => import('@/views/table/index'), + // meta: { title: 'Table', icon: 'table' } + // }, + // { + // path: 'tree', + // name: 'Tree', + // component: () => import('@/views/tree/index'), + // meta: { title: 'Tree', icon: 'tree' } + // } + // ] + // }, + + // { + // path: '/form', + // component: Layout, + // children: [ + // { + // path: 'index', + // name: 'Form', + // component: () => import('@/views/form/index'), + // meta: { title: 'Form', icon: 'form' } + // } + // ] + // }, + + // { + // path: '/nested', + // component: Layout, + // redirect: '/nested/menu1', + // name: 'Nested', + // meta: { + // title: 'Nested', + // icon: 'nested' + // }, + // children: [ + // { + // path: 'menu1', + // component: () => import('@/views/nested/menu1/index'), // Parent router-view + // name: 'Menu1', + // meta: { title: 'Menu1' }, + // children: [ + // { + // path: 'menu1-1', + // component: () => import('@/views/nested/menu1/menu1-1'), + // name: 'Menu1-1', + // meta: { title: 'Menu1-1' } + // }, + // { + // path: 'menu1-2', + // component: () => import('@/views/nested/menu1/menu1-2'), + // name: 'Menu1-2', + // meta: { title: 'Menu1-2' }, + // children: [ + // { + // path: 'menu1-2-1', + // component: () => import('@/views/nested/menu1/menu1-2/menu1-2-1'), + // name: 'Menu1-2-1', + // meta: { title: 'Menu1-2-1' } + // }, + // { + // path: 'menu1-2-2', + // component: () => import('@/views/nested/menu1/menu1-2/menu1-2-2'), + // name: 'Menu1-2-2', + // meta: { title: 'Menu1-2-2' } + // } + // ] + // }, + // { + // path: 'menu1-3', + // component: () => import('@/views/nested/menu1/menu1-3'), + // name: 'Menu1-3', + // meta: { title: 'Menu1-3' } + // } + // ] + // }, + // { + // path: 'menu2', + // component: () => import('@/views/nested/menu2/index'), + // name: 'Menu2', + // meta: { title: 'menu2' } + // } + // ] + // }, + + // { + // path: 'external-link', + // component: Layout, + // children: [ + // { + // path: 'https://panjiachen.github.io/vue-element-admin-site/#/', + // meta: { title: 'External Link', icon: 'link' } + // } + // ] + // }, + + // 404 page must be placed at the end !!! + { path: '*', redirect: '/404', hidden: true } +] + +const createRouter = () => new Router({ + // mode: 'history', // require service support + scrollBehavior: () => ({ y: 0 }), + routes: constantRoutes +}) + +const router = createRouter() + +// Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465 +export function resetRouter() { + const newRouter = createRouter() + router.matcher = newRouter.matcher // reset router +} + +export default router diff --git a/src/settings.js b/src/settings.js new file mode 100644 index 0000000..83299fc --- /dev/null +++ b/src/settings.js @@ -0,0 +1,16 @@ +module.exports = { + + title: '绩效考核', + + /** + * @type {boolean} true | false + * @description Whether fix the header + */ + fixedHeader: false, + + /** + * @type {boolean} true | false + * @description Whether show the logo in sidebar + */ + sidebarLogo: false +} diff --git a/src/store/getters.js b/src/store/getters.js new file mode 100644 index 0000000..5ab7b4c --- /dev/null +++ b/src/store/getters.js @@ -0,0 +1,8 @@ +const getters = { + sidebar: state => state.app.sidebar, + device: state => state.app.device, + token: state => state.user.token, + avatar: state => state.user.avatar, + name: state => state.user.name +} +export default getters diff --git a/src/store/index.js b/src/store/index.js new file mode 100644 index 0000000..6be466a --- /dev/null +++ b/src/store/index.js @@ -0,0 +1,19 @@ +import Vue from 'vue' +import Vuex from 'vuex' +import getters from './getters' +import app from './modules/app' +import settings from './modules/settings' +import user from './modules/user' + +Vue.use(Vuex) + +const store = new Vuex.Store({ + modules: { + app, + settings, + user + }, + getters +}) + +export default store diff --git a/src/store/modules/app.js b/src/store/modules/app.js new file mode 100644 index 0000000..7ea7e33 --- /dev/null +++ b/src/store/modules/app.js @@ -0,0 +1,48 @@ +import Cookies from 'js-cookie' + +const state = { + sidebar: { + opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true, + withoutAnimation: false + }, + device: 'desktop' +} + +const mutations = { + TOGGLE_SIDEBAR: state => { + state.sidebar.opened = !state.sidebar.opened + state.sidebar.withoutAnimation = false + if (state.sidebar.opened) { + Cookies.set('sidebarStatus', 1) + } else { + Cookies.set('sidebarStatus', 0) + } + }, + CLOSE_SIDEBAR: (state, withoutAnimation) => { + Cookies.set('sidebarStatus', 0) + state.sidebar.opened = false + state.sidebar.withoutAnimation = withoutAnimation + }, + TOGGLE_DEVICE: (state, device) => { + state.device = device + } +} + +const actions = { + toggleSideBar({ commit }) { + commit('TOGGLE_SIDEBAR') + }, + closeSideBar({ commit }, { withoutAnimation }) { + commit('CLOSE_SIDEBAR', withoutAnimation) + }, + toggleDevice({ commit }, device) { + commit('TOGGLE_DEVICE', device) + } +} + +export default { + namespaced: true, + state, + mutations, + actions +} diff --git a/src/store/modules/settings.js b/src/store/modules/settings.js new file mode 100644 index 0000000..b3f33f8 --- /dev/null +++ b/src/store/modules/settings.js @@ -0,0 +1,32 @@ +import defaultSettings from '@/settings' + +const { showSettings, fixedHeader, sidebarLogo } = defaultSettings + +const state = { + showSettings: showSettings, + fixedHeader: fixedHeader, + sidebarLogo: sidebarLogo +} + +const mutations = { + CHANGE_SETTING: (state, { key, value }) => { + // eslint-disable-next-line no-prototype-builtins + if (state.hasOwnProperty(key)) { + state[key] = value + } + } +} + +const actions = { + changeSetting({ commit }, data) { + commit('CHANGE_SETTING', data) + } +} + +export default { + namespaced: true, + state, + mutations, + actions +} + diff --git a/src/store/modules/user.js b/src/store/modules/user.js new file mode 100644 index 0000000..70d20a9 --- /dev/null +++ b/src/store/modules/user.js @@ -0,0 +1,119 @@ +import { login, logout, getInfo } from '@/api/user' +import { getToken, setToken, removeToken } from '@/utils/auth' +import { resetRouter } from '@/router' +import router from '@/router/index' + +const getDefaultState = () => { + return { + userInfo:{}, + key:'', + token: getToken(), + //token: getToken(), + name: '', + avatar: '' + } +} + +const state = getDefaultState() + +const mutations = { + loginOut(state) { + state.userInfo = {} + state.token = '' + state.key = '' + router.push('/login') + }, + setUserInfo(state, userInfo) { + // 这里的 `state` 对象是模块的局部状态 + state.userInfo = userInfo + }, + setKey(state, key) { + // 这里的 `state` 对象是模块的局部状态 + state.key = key + }, + setToken(state, token) { + // 这里的 `state` 对象是模块的局部状态 + state.token = token + }, + RESET_STATE: (state) => { + Object.assign(state, getDefaultState()) + }, + SET_TOKEN: (state, token) => { + state.token = token + }, + SET_NAME: (state, name) => { + state.name = name + }, + SET_AVATAR: (state, avatar) => { + state.avatar = avatar + } +} + +const actions = { + // user login + login({ commit }, userInfo) { + const { username, password } = userInfo + return new Promise((resolve, reject) => { + login({ username: username.trim(), password: password }).then(response => { + const { data } = response + commit('SET_TOKEN', data.token) + setToken(data.token) + resolve() + }).catch(error => { + reject(error) + }) + }) + }, + + // get user info + getInfo({ commit, state }) { + return new Promise((resolve, reject) => { + getInfo(state.token).then(response => { + const { data } = response + + if (!data) { + return reject('Verification failed, please Login again.') + } + + const { name, avatar } = data + + commit('SET_NAME', name) + commit('SET_AVATAR', avatar) + resolve(data) + }).catch(error => { + reject(error) + }) + }) + }, + + // user logout + logout({ commit, state }) { + return new Promise((resolve, reject) => { + logout(state.token).then(() => { + removeToken() // must remove token first + resetRouter() + commit('RESET_STATE') + resolve() + }).catch(error => { + reject(error) + }) + }) + }, + + // remove token + resetToken({ commit }) { + return new Promise(resolve => { + removeToken() // must remove token first + commit('RESET_STATE') + resolve() + }) + } +} + +export default { + namespaced: true, + state, + mutations, + actions +} + diff --git a/src/styles/element-ui.scss b/src/styles/element-ui.scss new file mode 100644 index 0000000..0062411 --- /dev/null +++ b/src/styles/element-ui.scss @@ -0,0 +1,49 @@ +// cover some element-ui styles + +.el-breadcrumb__inner, +.el-breadcrumb__inner a { + font-weight: 400 !important; +} + +.el-upload { + input[type="file"] { + display: none !important; + } +} + +.el-upload__input { + display: none; +} + + +// to fixed https://github.com/ElemeFE/element/issues/2461 +.el-dialog { + transform: none; + left: 0; + position: relative; + margin: 0 auto; +} + +// refine element ui upload +.upload-container { + .el-upload { + width: 100%; + + .el-upload-dragger { + width: 100%; + height: 200px; + } + } +} + +// dropdown +.el-dropdown-menu { + a { + display: block + } +} + +// to fix el-date-picker css style +.el-range-separator { + box-sizing: content-box; +} diff --git a/src/styles/index.scss b/src/styles/index.scss new file mode 100644 index 0000000..3b4da51 --- /dev/null +++ b/src/styles/index.scss @@ -0,0 +1,65 @@ +@import './variables.scss'; +@import './mixin.scss'; +@import './transition.scss'; +@import './element-ui.scss'; +@import './sidebar.scss'; + +body { + height: 100%; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif; +} + +label { + font-weight: 700; +} + +html { + height: 100%; + box-sizing: border-box; +} + +#app { + height: 100%; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +a:focus, +a:active { + outline: none; +} + +a, +a:focus, +a:hover { + cursor: pointer; + color: inherit; + text-decoration: none; +} + +div:focus { + outline: none; +} + +.clearfix { + &:after { + visibility: hidden; + display: block; + font-size: 0; + content: " "; + clear: both; + height: 0; + } +} + +// main-container global css +.app-container { + padding: 20px; +} diff --git a/src/styles/mixin.scss b/src/styles/mixin.scss new file mode 100644 index 0000000..36b74bb --- /dev/null +++ b/src/styles/mixin.scss @@ -0,0 +1,28 @@ +@mixin clearfix { + &:after { + content: ""; + display: table; + clear: both; + } +} + +@mixin scrollBar { + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } +} + +@mixin relative { + position: relative; + width: 100%; + height: 100%; +} diff --git a/src/styles/sidebar.scss b/src/styles/sidebar.scss new file mode 100644 index 0000000..94760cc --- /dev/null +++ b/src/styles/sidebar.scss @@ -0,0 +1,226 @@ +#app { + + .main-container { + min-height: 100%; + transition: margin-left .28s; + margin-left: $sideBarWidth; + position: relative; + } + + .sidebar-container { + transition: width 0.28s; + width: $sideBarWidth !important; + background-color: $menuBg; + height: 100%; + position: fixed; + font-size: 0px; + top: 0; + bottom: 0; + left: 0; + z-index: 1001; + overflow: hidden; + + // reset element-ui css + .horizontal-collapse-transition { + transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out; + } + + .scrollbar-wrapper { + overflow-x: hidden !important; + } + + .el-scrollbar__bar.is-vertical { + right: 0px; + } + + .el-scrollbar { + height: 100%; + } + + &.has-logo { + .el-scrollbar { + height: calc(100% - 50px); + } + } + + .is-horizontal { + display: none; + } + + a { + display: inline-block; + width: 100%; + overflow: hidden; + } + + .svg-icon { + margin-right: 16px; + } + + .sub-el-icon { + margin-right: 12px; + margin-left: -2px; + } + + .el-menu { + border: none; + height: 100%; + width: 100% !important; + } + + // menu hover + .submenu-title-noDropdown, + .el-submenu__title { + &:hover { + background-color: $menuHover !important; + } + } + + .is-active>.el-submenu__title { + color: $subMenuActiveText !important; + } + + & .nest-menu .el-submenu>.el-submenu__title, + & .el-submenu .el-menu-item { + min-width: $sideBarWidth !important; + background-color: $subMenuBg !important; + + &:hover { + background-color: $subMenuHover !important; + } + } + } + + .hideSidebar { + .sidebar-container { + width: 54px !important; + } + + .main-container { + margin-left: 54px; + } + + .submenu-title-noDropdown { + padding: 0 !important; + position: relative; + + .el-tooltip { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + + .sub-el-icon { + margin-left: 19px; + } + } + } + + .el-submenu { + overflow: hidden; + + &>.el-submenu__title { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + + .sub-el-icon { + margin-left: 19px; + } + + .el-submenu__icon-arrow { + display: none; + } + } + } + + .el-menu--collapse { + .el-submenu { + &>.el-submenu__title { + &>span { + height: 0; + width: 0; + overflow: hidden; + visibility: hidden; + display: inline-block; + } + } + } + } + } + + .el-menu--collapse .el-menu .el-submenu { + min-width: $sideBarWidth !important; + } + + // mobile responsive + .mobile { + .main-container { + margin-left: 0px; + } + + .sidebar-container { + transition: transform .28s; + width: $sideBarWidth !important; + } + + &.hideSidebar { + .sidebar-container { + pointer-events: none; + transition-duration: 0.3s; + transform: translate3d(-$sideBarWidth, 0, 0); + } + } + } + + .withoutAnimation { + + .main-container, + .sidebar-container { + transition: none; + } + } +} + +// when menu collapsed +.el-menu--vertical { + &>.el-menu { + .svg-icon { + margin-right: 16px; + } + .sub-el-icon { + margin-right: 12px; + margin-left: -2px; + } + } + + .nest-menu .el-submenu>.el-submenu__title, + .el-menu-item { + &:hover { + // you can use $subMenuHover + background-color: $menuHover !important; + } + } + + // the scroll bar appears when the subMenu is too long + >.el-menu--popup { + max-height: 100vh; + overflow-y: auto; + + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } + } +} diff --git a/src/styles/transition.scss b/src/styles/transition.scss new file mode 100644 index 0000000..4cb27cc --- /dev/null +++ b/src/styles/transition.scss @@ -0,0 +1,48 @@ +// global transition css + +/* fade */ +.fade-enter-active, +.fade-leave-active { + transition: opacity 0.28s; +} + +.fade-enter, +.fade-leave-active { + opacity: 0; +} + +/* fade-transform */ +.fade-transform-leave-active, +.fade-transform-enter-active { + transition: all .5s; +} + +.fade-transform-enter { + opacity: 0; + transform: translateX(-30px); +} + +.fade-transform-leave-to { + opacity: 0; + transform: translateX(30px); +} + +/* breadcrumb transition */ +.breadcrumb-enter-active, +.breadcrumb-leave-active { + transition: all .5s; +} + +.breadcrumb-enter, +.breadcrumb-leave-active { + opacity: 0; + transform: translateX(20px); +} + +.breadcrumb-move { + transition: all .5s; +} + +.breadcrumb-leave-active { + position: absolute; +} diff --git a/src/styles/variables.scss b/src/styles/variables.scss new file mode 100644 index 0000000..be55772 --- /dev/null +++ b/src/styles/variables.scss @@ -0,0 +1,25 @@ +// sidebar +$menuText:#bfcbd9; +$menuActiveText:#409EFF; +$subMenuActiveText:#f4f4f5; //https://github.com/ElemeFE/element/issues/12951 + +$menuBg:#304156; +$menuHover:#263445; + +$subMenuBg:#1f2d3d; +$subMenuHover:#001528; + +$sideBarWidth: 210px; + +// the :export directive is the magic sauce for webpack +// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass +:export { + menuText: $menuText; + menuActiveText: $menuActiveText; + subMenuActiveText: $subMenuActiveText; + menuBg: $menuBg; + menuHover: $menuHover; + subMenuBg: $subMenuBg; + subMenuHover: $subMenuHover; + sideBarWidth: $sideBarWidth; +} diff --git a/src/utils/auth.js b/src/utils/auth.js new file mode 100644 index 0000000..dee6fe4 --- /dev/null +++ b/src/utils/auth.js @@ -0,0 +1,27 @@ +import Cookies from 'js-cookie' + +const TokenKey = 'vue_admin_template_token' +const KeyKey = 'vue_admin_template_key' + +export function getToken() { + return Cookies.get(TokenKey) +} + +export function setToken(token) { + return Cookies.set(TokenKey, token) +} + +export function removeToken() { + return Cookies.remove(TokenKey) +} +export function getKey() { + return Cookies.get(KeyKey) +} + +export function setKey(Key) { + return Cookies.set(KeyKey, Key) +} + +export function removeKey() { + return Cookies.remove(KeyKey) +} diff --git a/src/utils/date.js b/src/utils/date.js new file mode 100644 index 0000000..6bb8570 --- /dev/null +++ b/src/utils/date.js @@ -0,0 +1,30 @@ +// 对Date的扩展,将 Date 转化为指定格式的String +// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符, +// 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字) +// (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423 +// (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18 +// eslint-disable-next-line no-extend-native +Date.prototype.Format = function(fmt) { + var o = { + 'M+': this.getMonth() + 1, // 月份 + 'd+': this.getDate(), // 日 + 'h+': this.getHours(), // 小时 + 'm+': this.getMinutes(), // 分 + 's+': this.getSeconds(), // 秒 + 'q+': Math.floor((this.getMonth() + 3) / 3), // 季度 + 'S': this.getMilliseconds() // 毫秒 + } + if (/(y+)/.test(fmt)) { fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length)) } + for (var k in o) { + if (new RegExp('(' + k + ')').test(fmt)) { fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length))) } + } + return fmt +} + +export function formatTimeToStr(times, pattern) { + var d = new Date(times).Format('yyyy-MM-dd hh:mm:ss') + if (pattern) { + d = new Date(times).Format(pattern) + } + return d.toLocaleString() +} diff --git a/src/utils/get-page-title.js b/src/utils/get-page-title.js new file mode 100644 index 0000000..de84a07 --- /dev/null +++ b/src/utils/get-page-title.js @@ -0,0 +1,10 @@ +import defaultSettings from '@/settings' + +const title = defaultSettings.title || '绩效考核' + +export default function getPageTitle(pageTitle) { + if (pageTitle) { + return `${pageTitle} - ${title}` + } + return `${title}` +} diff --git a/src/utils/index.js b/src/utils/index.js new file mode 100644 index 0000000..4830c04 --- /dev/null +++ b/src/utils/index.js @@ -0,0 +1,117 @@ +/** + * Created by PanJiaChen on 16/11/18. + */ + +/** + * Parse the time to string + * @param {(Object|string|number)} time + * @param {string} cFormat + * @returns {string | null} + */ +export function parseTime(time, cFormat) { + if (arguments.length === 0 || !time) { + return null + } + const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}' + let date + if (typeof time === 'object') { + date = time + } else { + if ((typeof time === 'string')) { + if ((/^[0-9]+$/.test(time))) { + // support "1548221490638" + time = parseInt(time) + } else { + // support safari + // https://stackoverflow.com/questions/4310953/invalid-date-in-safari + time = time.replace(new RegExp(/-/gm), '/') + } + } + + if ((typeof time === 'number') && (time.toString().length === 10)) { + time = time * 1000 + } + date = new Date(time) + } + const formatObj = { + y: date.getFullYear(), + m: date.getMonth() + 1, + d: date.getDate(), + h: date.getHours(), + i: date.getMinutes(), + s: date.getSeconds(), + a: date.getDay() + } + const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => { + const value = formatObj[key] + // Note: getDay() returns 0 on Sunday + if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value ] } + return value.toString().padStart(2, '0') + }) + return time_str +} + +/** + * @param {number} time + * @param {string} option + * @returns {string} + */ +export function formatTime(time, option) { + if (('' + time).length === 10) { + time = parseInt(time) * 1000 + } else { + time = +time + } + const d = new Date(time) + const now = Date.now() + + const diff = (now - d) / 1000 + + if (diff < 30) { + return '刚刚' + } else if (diff < 3600) { + // less 1 hour + return Math.ceil(diff / 60) + '分钟前' + } else if (diff < 3600 * 24) { + return Math.ceil(diff / 3600) + '小时前' + } else if (diff < 3600 * 24 * 2) { + return '1天前' + } + if (option) { + return parseTime(time, option) + } else { + return ( + d.getMonth() + + 1 + + '月' + + d.getDate() + + '日' + + d.getHours() + + '时' + + d.getMinutes() + + '分' + ) + } +} + +/** + * @param {string} url + * @returns {Object} + */ +export function param2Obj(url) { + const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ') + if (!search) { + return {} + } + const obj = {} + const searchArr = search.split('&') + searchArr.forEach(v => { + const index = v.indexOf('=') + if (index !== -1) { + const name = v.substring(0, index) + const val = v.substring(index + 1, v.length) + obj[name] = val + } + }) + return obj +} diff --git a/src/utils/request.js b/src/utils/request.js new file mode 100644 index 0000000..629d024 --- /dev/null +++ b/src/utils/request.js @@ -0,0 +1,88 @@ +import axios from 'axios' +import { MessageBox, Message } from 'element-ui' +import store from '@/store' +import { getToken,getKey } from '@/utils/auth' + +// create an axios instance +const service = axios.create({ + baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url + // withCredentials: true, // send cookies when cross-domain requests + timeout: 5000 // request timeout +}) + +// request interceptor +service.interceptors.request.use( + config => { + // do something before request is sent + + if (store.getters.token) { + // let each request carry token + // ['X-Token'] is a custom headers key + // please modify it according to the actual situation + config.headers['user-token'] = getToken() + config.headers['user-key'] = getKey() + } + return config + }, + error => { + // do something with request error + console.log(error) // for debug + return Promise.reject(error) + } +) + +// response interceptor +service.interceptors.response.use( + /** + * If you want to get http information such as headers or status + * Please return response => response + */ + + /** + * Determine the request status by custom code + * Here is just an example + * You can also judge the status by HTTP Status Code + */ + response => { + const res = response.data + + // if the custom code is not 20000, it is judged as an error. + if (res.code !== 0) { + Message({ + message: res.msg || 'Error', + type: 'error', + duration: 5 * 1000 + }) + if(res.data.code === 3){ + store.commit('user/loginOut') + } + // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired; + if (res.code === 50008 || res.code === 50012 || res.code === 50014) { + // to re-login + MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', { + confirmButtonText: 'Re-Login', + cancelButtonText: 'Cancel', + type: 'warning' + }).then(() => { + store.dispatch('user/resetToken').then(() => { + location.reload() + }) + }) + } + return Promise.reject(new Error(res.msg || 'Error')) + } else { + return res + } + }, + error => { + console.log('err' + error) // for debug + Message({ + message: error.msg, + type: 'error', + duration: 5 * 1000 + }) + return Promise.reject(error) + } +) + +export default service diff --git a/src/utils/validate.js b/src/utils/validate.js new file mode 100644 index 0000000..8d962ad --- /dev/null +++ b/src/utils/validate.js @@ -0,0 +1,20 @@ +/** + * Created by PanJiaChen on 16/11/18. + */ + +/** + * @param {string} path + * @returns {Boolean} + */ +export function isExternal(path) { + return /^(https?:|mailto:|tel:)/.test(path) +} + +/** + * @param {string} str + * @returns {Boolean} + */ +export function validUsername(str) { + const valid_map = ['admin', 'editor'] + return valid_map.indexOf(str.trim()) >= 0 +} diff --git a/src/views/404.vue b/src/views/404.vue new file mode 100644 index 0000000..1791f55 --- /dev/null +++ b/src/views/404.vue @@ -0,0 +1,228 @@ + + + + + diff --git a/src/views/approval/index.vue b/src/views/approval/index.vue new file mode 100644 index 0000000..43c4f2c --- /dev/null +++ b/src/views/approval/index.vue @@ -0,0 +1,67 @@ + + + + + \ No newline at end of file diff --git a/src/views/approvalData/index.vue b/src/views/approvalData/index.vue new file mode 100644 index 0000000..ecadd4f --- /dev/null +++ b/src/views/approvalData/index.vue @@ -0,0 +1,446 @@ + + + + + diff --git a/src/views/approvalList/index.vue b/src/views/approvalList/index.vue new file mode 100644 index 0000000..68a3358 --- /dev/null +++ b/src/views/approvalList/index.vue @@ -0,0 +1,409 @@ + + + + + \ No newline at end of file diff --git a/src/views/ceshi/index aaa.vue b/src/views/ceshi/index aaa.vue new file mode 100644 index 0000000..70db926 --- /dev/null +++ b/src/views/ceshi/index aaa.vue @@ -0,0 +1,150 @@ + + + + + \ No newline at end of file diff --git a/src/views/ceshi/index.vue b/src/views/ceshi/index.vue new file mode 100644 index 0000000..67ec665 --- /dev/null +++ b/src/views/ceshi/index.vue @@ -0,0 +1,490 @@ + + + + + \ No newline at end of file diff --git a/src/views/dashboard/index copy 2.vue b/src/views/dashboard/index copy 2.vue new file mode 100644 index 0000000..3836b07 --- /dev/null +++ b/src/views/dashboard/index copy 2.vue @@ -0,0 +1,502 @@ + + + + + diff --git a/src/views/dashboard/index copy.vue b/src/views/dashboard/index copy.vue new file mode 100644 index 0000000..0d0f2a4 --- /dev/null +++ b/src/views/dashboard/index copy.vue @@ -0,0 +1,87 @@ + + + + + diff --git a/src/views/dashboard/index.vue b/src/views/dashboard/index.vue new file mode 100644 index 0000000..3767107 --- /dev/null +++ b/src/views/dashboard/index.vue @@ -0,0 +1,517 @@ + + + + + diff --git a/src/views/form/index.vue b/src/views/form/index.vue new file mode 100644 index 0000000..f4d66d3 --- /dev/null +++ b/src/views/form/index.vue @@ -0,0 +1,85 @@ + + + + + + diff --git a/src/views/index.vue b/src/views/index.vue new file mode 100644 index 0000000..1f7b032 --- /dev/null +++ b/src/views/index.vue @@ -0,0 +1,145 @@ + + + + + diff --git a/src/views/login/dingxingLogin.vue b/src/views/login/dingxingLogin.vue new file mode 100644 index 0000000..2c2bab4 --- /dev/null +++ b/src/views/login/dingxingLogin.vue @@ -0,0 +1,320 @@ + + + + + + + diff --git a/src/views/login/index copy.vue b/src/views/login/index copy.vue new file mode 100644 index 0000000..1db2464 --- /dev/null +++ b/src/views/login/index copy.vue @@ -0,0 +1,237 @@ + + + + + + + diff --git a/src/views/login/index.vue b/src/views/login/index.vue new file mode 100644 index 0000000..1b58f42 --- /dev/null +++ b/src/views/login/index.vue @@ -0,0 +1,318 @@ + + + + + + + diff --git a/src/views/login/quantitativeListLogin.vue b/src/views/login/quantitativeListLogin.vue new file mode 100644 index 0000000..9f1989c --- /dev/null +++ b/src/views/login/quantitativeListLogin.vue @@ -0,0 +1,320 @@ + + + + + + + diff --git a/src/views/login/zerenLogin.vue b/src/views/login/zerenLogin.vue new file mode 100644 index 0000000..e76fcff --- /dev/null +++ b/src/views/login/zerenLogin.vue @@ -0,0 +1,323 @@ + + + + + + + diff --git a/src/views/login/zhenggaiLogin.vue b/src/views/login/zhenggaiLogin.vue new file mode 100644 index 0000000..9988d0a --- /dev/null +++ b/src/views/login/zhenggaiLogin.vue @@ -0,0 +1,320 @@ + + + + + + + diff --git a/src/views/mete/index.vue b/src/views/mete/index.vue new file mode 100644 index 0000000..049f3ca --- /dev/null +++ b/src/views/mete/index.vue @@ -0,0 +1,397 @@ + + + + + diff --git a/src/views/nested/menu1/index.vue b/src/views/nested/menu1/index.vue new file mode 100644 index 0000000..30cb670 --- /dev/null +++ b/src/views/nested/menu1/index.vue @@ -0,0 +1,7 @@ + diff --git a/src/views/nested/menu1/menu1-1/index.vue b/src/views/nested/menu1/menu1-1/index.vue new file mode 100644 index 0000000..27e173a --- /dev/null +++ b/src/views/nested/menu1/menu1-1/index.vue @@ -0,0 +1,7 @@ + diff --git a/src/views/nested/menu1/menu1-2/index.vue b/src/views/nested/menu1/menu1-2/index.vue new file mode 100644 index 0000000..0c86276 --- /dev/null +++ b/src/views/nested/menu1/menu1-2/index.vue @@ -0,0 +1,7 @@ + diff --git a/src/views/nested/menu1/menu1-2/menu1-2-1/index.vue b/src/views/nested/menu1/menu1-2/menu1-2-1/index.vue new file mode 100644 index 0000000..f87d88f --- /dev/null +++ b/src/views/nested/menu1/menu1-2/menu1-2-1/index.vue @@ -0,0 +1,5 @@ + diff --git a/src/views/nested/menu1/menu1-2/menu1-2-2/index.vue b/src/views/nested/menu1/menu1-2/menu1-2-2/index.vue new file mode 100644 index 0000000..d88789f --- /dev/null +++ b/src/views/nested/menu1/menu1-2/menu1-2-2/index.vue @@ -0,0 +1,5 @@ + diff --git a/src/views/nested/menu1/menu1-3/index.vue b/src/views/nested/menu1/menu1-3/index.vue new file mode 100644 index 0000000..f7cd073 --- /dev/null +++ b/src/views/nested/menu1/menu1-3/index.vue @@ -0,0 +1,5 @@ + diff --git a/src/views/nested/menu2/index.vue b/src/views/nested/menu2/index.vue new file mode 100644 index 0000000..19dd48f --- /dev/null +++ b/src/views/nested/menu2/index.vue @@ -0,0 +1,5 @@ + diff --git a/src/views/qualitative/index.vue b/src/views/qualitative/index.vue new file mode 100644 index 0000000..a6c20e7 --- /dev/null +++ b/src/views/qualitative/index.vue @@ -0,0 +1,518 @@ + + + + + diff --git a/src/views/quantitativeList/index.vue b/src/views/quantitativeList/index.vue new file mode 100644 index 0000000..39b471a --- /dev/null +++ b/src/views/quantitativeList/index.vue @@ -0,0 +1,279 @@ + + + + + \ No newline at end of file diff --git a/src/views/record/details.vue b/src/views/record/details.vue new file mode 100644 index 0000000..0fd1550 --- /dev/null +++ b/src/views/record/details.vue @@ -0,0 +1,218 @@ + + + + + diff --git a/src/views/record/index.vue b/src/views/record/index.vue new file mode 100644 index 0000000..c15ca71 --- /dev/null +++ b/src/views/record/index.vue @@ -0,0 +1,172 @@ + + + + + diff --git a/src/views/rectification/index.vue b/src/views/rectification/index.vue new file mode 100644 index 0000000..c5402a1 --- /dev/null +++ b/src/views/rectification/index.vue @@ -0,0 +1,132 @@ + + + + + \ No newline at end of file diff --git a/src/views/responsible/index.vue b/src/views/responsible/index.vue new file mode 100644 index 0000000..0ef9146 --- /dev/null +++ b/src/views/responsible/index.vue @@ -0,0 +1,321 @@ + + + + + \ No newline at end of file diff --git a/src/views/table/index.vue b/src/views/table/index.vue new file mode 100644 index 0000000..a1ed847 --- /dev/null +++ b/src/views/table/index.vue @@ -0,0 +1,79 @@ + + + diff --git a/src/views/tree/index.vue b/src/views/tree/index.vue new file mode 100644 index 0000000..89c6b01 --- /dev/null +++ b/src/views/tree/index.vue @@ -0,0 +1,78 @@ + + + + diff --git a/tests/unit/.eslintrc.js b/tests/unit/.eslintrc.js new file mode 100644 index 0000000..958d51b --- /dev/null +++ b/tests/unit/.eslintrc.js @@ -0,0 +1,5 @@ +module.exports = { + env: { + jest: true + } +} diff --git a/tests/unit/components/Breadcrumb.spec.js b/tests/unit/components/Breadcrumb.spec.js new file mode 100644 index 0000000..1d94c8f --- /dev/null +++ b/tests/unit/components/Breadcrumb.spec.js @@ -0,0 +1,98 @@ +import { mount, createLocalVue } from '@vue/test-utils' +import VueRouter from 'vue-router' +import ElementUI from 'element-ui' +import Breadcrumb from '@/components/Breadcrumb/index.vue' + +const localVue = createLocalVue() +localVue.use(VueRouter) +localVue.use(ElementUI) + +const routes = [ + { + path: '/', + name: 'home', + children: [{ + path: 'dashboard', + name: 'dashboard' + }] + }, + { + path: '/menu', + name: 'menu', + children: [{ + path: 'menu1', + name: 'menu1', + meta: { title: 'menu1' }, + children: [{ + path: 'menu1-1', + name: 'menu1-1', + meta: { title: 'menu1-1' } + }, + { + path: 'menu1-2', + name: 'menu1-2', + redirect: 'noredirect', + meta: { title: 'menu1-2' }, + children: [{ + path: 'menu1-2-1', + name: 'menu1-2-1', + meta: { title: 'menu1-2-1' } + }, + { + path: 'menu1-2-2', + name: 'menu1-2-2' + }] + }] + }] + }] + +const router = new VueRouter({ + routes +}) + +describe('Breadcrumb.vue', () => { + const wrapper = mount(Breadcrumb, { + localVue, + router + }) + it('dashboard', () => { + router.push('/dashboard') + const len = wrapper.findAll('.el-breadcrumb__inner').length + expect(len).toBe(1) + }) + it('normal route', () => { + router.push('/menu/menu1') + const len = wrapper.findAll('.el-breadcrumb__inner').length + expect(len).toBe(2) + }) + it('nested route', () => { + router.push('/menu/menu1/menu1-2/menu1-2-1') + const len = wrapper.findAll('.el-breadcrumb__inner').length + expect(len).toBe(4) + }) + it('no meta.title', () => { + router.push('/menu/menu1/menu1-2/menu1-2-2') + const len = wrapper.findAll('.el-breadcrumb__inner').length + expect(len).toBe(3) + }) + // it('click link', () => { + // router.push('/menu/menu1/menu1-2/menu1-2-2') + // const breadcrumbArray = wrapper.findAll('.el-breadcrumb__inner') + // const second = breadcrumbArray.at(1) + // console.log(breadcrumbArray) + // const href = second.find('a').attributes().href + // expect(href).toBe('#/menu/menu1') + // }) + // it('noRedirect', () => { + // router.push('/menu/menu1/menu1-2/menu1-2-1') + // const breadcrumbArray = wrapper.findAll('.el-breadcrumb__inner') + // const redirectBreadcrumb = breadcrumbArray.at(2) + // expect(redirectBreadcrumb.contains('a')).toBe(false) + // }) + it('last breadcrumb', () => { + router.push('/menu/menu1/menu1-2/menu1-2-1') + const breadcrumbArray = wrapper.findAll('.el-breadcrumb__inner') + const redirectBreadcrumb = breadcrumbArray.at(3) + expect(redirectBreadcrumb.contains('a')).toBe(false) + }) +}) diff --git a/tests/unit/components/Hamburger.spec.js b/tests/unit/components/Hamburger.spec.js new file mode 100644 index 0000000..01ea303 --- /dev/null +++ b/tests/unit/components/Hamburger.spec.js @@ -0,0 +1,18 @@ +import { shallowMount } from '@vue/test-utils' +import Hamburger from '@/components/Hamburger/index.vue' +describe('Hamburger.vue', () => { + it('toggle click', () => { + const wrapper = shallowMount(Hamburger) + const mockFn = jest.fn() + wrapper.vm.$on('toggleClick', mockFn) + wrapper.find('.hamburger').trigger('click') + expect(mockFn).toBeCalled() + }) + it('prop isActive', () => { + const wrapper = shallowMount(Hamburger) + wrapper.setProps({ isActive: true }) + expect(wrapper.contains('.is-active')).toBe(true) + wrapper.setProps({ isActive: false }) + expect(wrapper.contains('.is-active')).toBe(false) + }) +}) diff --git a/tests/unit/components/SvgIcon.spec.js b/tests/unit/components/SvgIcon.spec.js new file mode 100644 index 0000000..31467a9 --- /dev/null +++ b/tests/unit/components/SvgIcon.spec.js @@ -0,0 +1,22 @@ +import { shallowMount } from '@vue/test-utils' +import SvgIcon from '@/components/SvgIcon/index.vue' +describe('SvgIcon.vue', () => { + it('iconClass', () => { + const wrapper = shallowMount(SvgIcon, { + propsData: { + iconClass: 'test' + } + }) + expect(wrapper.find('use').attributes().href).toBe('#icon-test') + }) + it('className', () => { + const wrapper = shallowMount(SvgIcon, { + propsData: { + iconClass: 'test' + } + }) + expect(wrapper.classes().length).toBe(1) + wrapper.setProps({ className: 'test' }) + expect(wrapper.classes().includes('test')).toBe(true) + }) +}) diff --git a/tests/unit/utils/formatTime.spec.js b/tests/unit/utils/formatTime.spec.js new file mode 100644 index 0000000..24e165b --- /dev/null +++ b/tests/unit/utils/formatTime.spec.js @@ -0,0 +1,30 @@ +import { formatTime } from '@/utils/index.js' + +describe('Utils:formatTime', () => { + const d = new Date('2018-07-13 17:54:01') // "2018-07-13 17:54:01" + const retrofit = 5 * 1000 + + it('ten digits timestamp', () => { + expect(formatTime((d / 1000).toFixed(0))).toBe('7月13日17时54分') + }) + it('test now', () => { + expect(formatTime(+new Date() - 1)).toBe('刚刚') + }) + it('less two minute', () => { + expect(formatTime(+new Date() - 60 * 2 * 1000 + retrofit)).toBe('2分钟前') + }) + it('less two hour', () => { + expect(formatTime(+new Date() - 60 * 60 * 2 * 1000 + retrofit)).toBe('2小时前') + }) + it('less one day', () => { + expect(formatTime(+new Date() - 60 * 60 * 24 * 1 * 1000)).toBe('1天前') + }) + it('more than one day', () => { + expect(formatTime(d)).toBe('7月13日17时54分') + }) + it('format', () => { + expect(formatTime(d, '{y}-{m}-{d} {h}:{i}')).toBe('2018-07-13 17:54') + expect(formatTime(d, '{y}-{m}-{d}')).toBe('2018-07-13') + expect(formatTime(d, '{y}/{m}/{d} {h}-{i}')).toBe('2018/07/13 17-54') + }) +}) diff --git a/tests/unit/utils/param2Obj.spec.js b/tests/unit/utils/param2Obj.spec.js new file mode 100644 index 0000000..e106ed8 --- /dev/null +++ b/tests/unit/utils/param2Obj.spec.js @@ -0,0 +1,14 @@ +import { param2Obj } from '@/utils/index.js' +describe('Utils:param2Obj', () => { + const url = 'https://github.com/PanJiaChen/vue-element-admin?name=bill&age=29&sex=1&field=dGVzdA==&key=%E6%B5%8B%E8%AF%95' + + it('param2Obj test', () => { + expect(param2Obj(url)).toEqual({ + name: 'bill', + age: '29', + sex: '1', + field: window.btoa('test'), + key: '测试' + }) + }) +}) diff --git a/tests/unit/utils/parseTime.spec.js b/tests/unit/utils/parseTime.spec.js new file mode 100644 index 0000000..56045af --- /dev/null +++ b/tests/unit/utils/parseTime.spec.js @@ -0,0 +1,35 @@ +import { parseTime } from '@/utils/index.js' + +describe('Utils:parseTime', () => { + const d = new Date('2018-07-13 17:54:01') // "2018-07-13 17:54:01" + it('timestamp', () => { + expect(parseTime(d)).toBe('2018-07-13 17:54:01') + }) + it('timestamp string', () => { + expect(parseTime((d + ''))).toBe('2018-07-13 17:54:01') + }) + it('ten digits timestamp', () => { + expect(parseTime((d / 1000).toFixed(0))).toBe('2018-07-13 17:54:01') + }) + it('new Date', () => { + expect(parseTime(new Date(d))).toBe('2018-07-13 17:54:01') + }) + it('format', () => { + expect(parseTime(d, '{y}-{m}-{d} {h}:{i}')).toBe('2018-07-13 17:54') + expect(parseTime(d, '{y}-{m}-{d}')).toBe('2018-07-13') + expect(parseTime(d, '{y}/{m}/{d} {h}-{i}')).toBe('2018/07/13 17-54') + }) + it('get the day of the week', () => { + expect(parseTime(d, '{a}')).toBe('五') // 星期五 + }) + it('get the day of the week', () => { + expect(parseTime(+d + 1000 * 60 * 60 * 24 * 2, '{a}')).toBe('日') // 星期日 + }) + it('empty argument', () => { + expect(parseTime()).toBeNull() + }) + + it('null', () => { + expect(parseTime(null)).toBeNull() + }) +}) diff --git a/tests/unit/utils/validate.spec.js b/tests/unit/utils/validate.spec.js new file mode 100644 index 0000000..f774905 --- /dev/null +++ b/tests/unit/utils/validate.spec.js @@ -0,0 +1,17 @@ +import { validUsername, isExternal } from '@/utils/validate.js' + +describe('Utils:validate', () => { + it('validUsername', () => { + expect(validUsername('admin')).toBe(true) + expect(validUsername('editor')).toBe(true) + expect(validUsername('xxxx')).toBe(false) + }) + it('isExternal', () => { + expect(isExternal('https://github.com/PanJiaChen/vue-element-admin')).toBe(true) + expect(isExternal('http://github.com/PanJiaChen/vue-element-admin')).toBe(true) + expect(isExternal('github.com/PanJiaChen/vue-element-admin')).toBe(false) + expect(isExternal('/dashboard')).toBe(false) + expect(isExternal('./dashboard')).toBe(false) + expect(isExternal('dashboard')).toBe(false) + }) +}) diff --git a/vue.config.js b/vue.config.js new file mode 100644 index 0000000..fd79dc7 --- /dev/null +++ b/vue.config.js @@ -0,0 +1,125 @@ +'use strict' +const path = require('path') +const defaultSettings = require('./src/settings.js') + +function resolve(dir) { + return path.join(__dirname, dir) +} + +const name = defaultSettings.title || 'vue Admin Template' // page title + +// If your port is set to 80, +// use administrator privileges to execute the command line. +// For example, Mac: sudo npm run +// You can change the port by the following methods: +// port = 9528 npm run dev OR npm run dev --port = 9528 +const port = process.env.port || process.env.npm_config_port || 9528 // dev port + +// All configuration item explanations can be find in https://cli.vuejs.org/config/ +module.exports = { + /** + * You will need to set publicPath if you plan to deploy your site under a sub path, + * for example GitHub Pages. If you plan to deploy your site to https://foo.github.io/bar/, + * then publicPath should be set to "/bar/". + * In most cases please use '/' !!! + * Detail: https://cli.vuejs.org/config/#publicpath + */ + publicPath: '/', + outputDir: 'dist', + assetsDir: 'static', + lintOnSave: false, + // lintOnSave: process.env.NODE_ENV === 'development', + productionSourceMap: false, + devServer: { + disableHostCheck: true, + port: port, + open: true, + overlay: { + warnings: false, + errors: true + }, + before: require('./mock/mock-server.js') + }, + configureWebpack: { + // provide the app's title in webpack's name field, so that + // it can be accessed in index.html to inject the correct title. + name: name, + resolve: { + alias: { + '@': resolve('src') + } + } + }, + chainWebpack(config) { + // it can improve the speed of the first screen, it is recommended to turn on preload + config.plugin('preload').tap(() => [ + { + rel: 'preload', + // to ignore runtime.js + // https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/cli-service/lib/config/app.js#L171 + fileBlacklist: [/\.map$/, /hot-update\.js$/, /runtime\..*\.js$/], + include: 'initial' + } + ]) + + // when there are many pages, it will cause too many meaningless requests + config.plugins.delete('prefetch') + + // set svg-sprite-loader + config.module + .rule('svg') + .exclude.add(resolve('src/icons')) + .end() + config.module + .rule('icons') + .test(/\.svg$/) + .include.add(resolve('src/icons')) + .end() + .use('svg-sprite-loader') + .loader('svg-sprite-loader') + .options({ + symbolId: 'icon-[name]' + }) + .end() + + config + .when(process.env.NODE_ENV !== 'development', + config => { + config + .plugin('ScriptExtHtmlWebpackPlugin') + .after('html') + .use('script-ext-html-webpack-plugin', [{ + // `runtime` must same as runtimeChunk name. default is `runtime` + inline: /runtime\..*\.js$/ + }]) + .end() + config + .optimization.splitChunks({ + chunks: 'all', + cacheGroups: { + libs: { + name: 'chunk-libs', + test: /[\\/]node_modules[\\/]/, + priority: 10, + chunks: 'initial' // only package third parties that are initially dependent + }, + elementUI: { + name: 'chunk-elementUI', // split elementUI into a single package + priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app + test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm + }, + commons: { + name: 'chunk-commons', + test: resolve('src/components'), // can customize your rules + minChunks: 3, // minimum common number + priority: 5, + reuseExistingChunk: true + } + } + }) + // https:// webpack.js.org/configuration/optimization/#optimizationruntimechunk + config.optimization.runtimeChunk('single') + } + ) + } +}