Commit 441d4b7cb63f1ec068b4db90a308248137978178

Authored by shaofan
0 parents

初始化权限管理也没见

Too many changes to show.

To preserve performance only 36 of 278 files are displayed.

.browserslistrc 0 → 100644
  1 +++ a/.browserslistrc
  1 +> 1%
  2 +last 2 versions
... ...
.editorconfig 0 → 100644
  1 +++ a/.editorconfig
  1 +# http://editorconfig.org
  2 +
  3 +# top-most EditorConfig file
  4 +root = true
  5 +
  6 +# Unix-style newlines with a newline ending every file
  7 +[*]
  8 +charset = utf-8
  9 +end_of_line = lf
  10 +insert_final_newline = true
  11 +trim_trailing_whitespace = true
  12 +
  13 +# Indentation override for js(x), ts(x) and vue files
  14 +[*.{js,jsx,ts,tsx,vue}]
  15 +indent_size = 2
  16 +indent_style = space
  17 +
  18 +# Indentation override for css related files
  19 +[*.{css,styl,scss,less,sass}]
  20 +indent_size = 2
  21 +indent_style = space
  22 +
  23 +# Indentation override for html files
  24 +[*.html]
  25 +indent_size = 2
  26 +indent_style = space
  27 +
  28 +# Trailing space override for markdown file
  29 +[*.md]
  30 +trim_trailing_whitespace = false
  31 +
  32 +# Indentation override for config files
  33 +[*.{json,yml}]
  34 +indent_size = 2
  35 +indent_style = space
... ...
.env 0 → 100644
  1 +++ a/.env
  1 +# 后端接口地址
  2 +VUE_APP_BASE_API = 'http://10.30.110.163:8760'
... ...
.eslintignore 0 → 100644
  1 +++ a/.eslintignore
  1 +dist/*.js
  2 +src/assets
  3 +tests/unit/coverage
  4 +views/*
... ...
.eslintrc.js 0 → 100644
  1 +++ a/.eslintrc.js
  1 +module.exports = {
  2 + root: true,
  3 + env: {
  4 + browser: true,
  5 + node: true,
  6 + es6: true
  7 + },
  8 + parserOptions: {
  9 + parser: '@typescript-eslint/parser',
  10 + sourceType: 'module'
  11 + },
  12 + plugins: ['vue'],
  13 + rules: {
  14 + '@typescript-eslint/ban-types': 'off',
  15 + '@typescript-eslint/explicit-module-boundary-types': 'off',
  16 + '@typescript-eslint/member-delimiter-style': [
  17 + 'error',
  18 + {
  19 + multiline: {
  20 + delimiter: 'none'
  21 + },
  22 + singleline: {
  23 + delimiter: 'comma'
  24 + }
  25 + }
  26 + ],
  27 + '@typescript-eslint/no-explicit-any': 'off',
  28 + 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
  29 + 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
  30 + 'space-before-function-paren': ['error', 'never'],
  31 + 'vue/require-default-prop': 'off',
  32 + 'vue/require-prop-type-constructor': 'off',
  33 + 'vue/require-prop-types': 'off',
  34 + 'vue/prop-name-casing': 'off',
  35 + 'vue/array-bracket-spacing': 'error',
  36 + 'vue/arrow-spacing': 'error',
  37 + 'vue/block-spacing': 'error',
  38 + 'vue/brace-style': 'error',
  39 + 'vue/camelcase': 'off',
  40 + 'vue/comma-dangle': 'error',
  41 + 'vue/component-name-in-template-casing': 'error',
  42 + 'vue/eqeqeq': 'error',
  43 + 'vue/key-spacing': 'error',
  44 + 'vue/match-component-file-name': 'error',
  45 + 'vue/no-v-html': 'off',
  46 + // 'vue/object-curly-spacing': 'error',
  47 + 'vue/html-self-closing': [
  48 + // Require self-closing on HTML elements (<div>) vue/html-self-closing的解决方法
  49 + 'error',
  50 + {
  51 + html: {
  52 + void: 'never',
  53 + normal: 'never',
  54 + component: 'always'
  55 + },
  56 + svg: 'always',
  57 + math: 'always'
  58 + }
  59 + ],
  60 + 'vue/html-closing-bracket-spacing': [
  61 + 'error',
  62 + {
  63 + startTag: 'never',
  64 + endTag: 'never',
  65 + selfClosingTag: 'always'
  66 + }
  67 + ],
  68 + 'vue/max-attributes-per-line': [
  69 + // 解决 Attribute "mode" should be on a new line (vue/max-attributes-per-line)
  70 + 'error',
  71 + {
  72 + singleline: 100,
  73 + multiline: {
  74 + max: 3,
  75 + allowFirstLine: true
  76 + }
  77 + }
  78 + ],
  79 + indent: ['off', 2],
  80 + 'no-tabs': 'off',
  81 + 'vue/singleline-html-element-content-newline': 'off'
  82 + },
  83 + extends: [
  84 + 'eslint:recommended',
  85 + 'plugin:vue/recommended',
  86 + '@vue/standard',
  87 + '@vue/typescript'
  88 + ]
  89 +}
... ...
.gitignore 0 → 100644
  1 +++ a/.gitignore
  1 +.DS_Store
  2 +node_modules
  3 +/dist
  4 +
  5 +/tests/e2e/videos/
  6 +/tests/e2e/screenshots/
  7 +/tests/**/coverage/
  8 +
  9 +# local env files
  10 +.env.local
  11 +.env.*.local
  12 +
  13 +# Log files
  14 +npm-debug.log*
  15 +yarn-debug.log*
  16 +yarn-error.log*
  17 +
  18 +# Editor directories and files
  19 +.idea
  20 +.vscode
  21 +.history
  22 +*.suo
  23 +*.ntvs*
  24 +*.njsproj
  25 +*.sln
  26 +*.sw*
  27 +*.history
  28 +*.iml
... ...
.gitlab-ci.yml 0 → 100644
  1 +++ a/.gitlab-ci.yml
  1 +####提示
  2 +#1.以下脚本设置的是master分支被合并时执行(设置为平常用来发版本的分支即可)
  3 +#2.版本自动化部署到nginx下
  4 +#3.执行yml脚本的runner名字设置的vue-runner1,即对应tags
  5 +
  6 +stages: # Stages 表示构建阶段,这里有两个阶段 install, deploy
  7 +- install
  8 +- deploy
  9 +
  10 +cache:
  11 + key: ${CI_BUILD_REF_NAME}
  12 + paths:
  13 + - node_modules/
  14 +
  15 +install-staging:dep: # Jobs 表示构建工作,表示某个 Stage 里面执行的工作。
  16 + stage: install
  17 + tags:
  18 + - authority-vue-runner #与注册runner时填写的tags保持一致
  19 + only: # 定义了只有在被merge到了master分支上 才会执行部署脚本。
  20 + - develop2.0
  21 + script:
  22 + - echo "=====start install======"
  23 + - npm install # --registry=https://registry.npm.taobao.org #安装依赖
  24 + - echo "=====end install======"
  25 + artifacts: # 将这个job生成的依赖传递给下一个job。需要设置dependencies
  26 + expire_in: 60 mins # artifacets 的过期时间,因为这些数据都是直接保存在 Gitlab 机器上的,过于久远的资源就可以删除掉了
  27 + paths: # 需要被传递给下一个job的目录。
  28 + - node_modules/
  29 +
  30 +deploy-staging:dep:
  31 + stage: deploy
  32 + tags:
  33 + - authority-vue-runner
  34 + only:
  35 + - develop2.0
  36 + script:
  37 + - echo "=====start build======"
  38 + - npm run build # 将项目打包
  39 + - echo "=====start deploy======"
  40 + - sudo cp -rf ./dist/ /usr/share/nginx/html/authority
  41 + - echo "=====end deploy!!!!!!======"
0 42 \ No newline at end of file
... ...
.nvmdrc 0 → 100644
  1 +++ a/.nvmdrc
  1 +14.21.3
0 2 \ No newline at end of file
... ...
.prettierrc 0 → 100644
  1 +++ a/.prettierrc
  1 +{
  2 + "spaceBeforeFunctionParen": true,
  3 + "tabWidth": 2,
  4 + "useTabs": false,
  5 + "trailingComma": "none",
  6 + "eslintIntegration": true,
  7 + "singleQuote": true,
  8 + "semi": false,
  9 + "bracketSpacing": true,
  10 + "jsxBracketSameLine": false,
  11 + "arrowParens": "avoid"
  12 +}
... ...
Dockerfile 0 → 100644
  1 +++ a/Dockerfile
  1 +FROM nginx
  2 +
  3 +COPY ./dist /usr/share/nginx/html
  4 +RUN chmod -R 777 /usr/share/nginx/html
  5 +
  6 +CMD ["nginx", "-g", "daemon off;"]
... ...
LICENSE 0 → 100644
  1 +++ a/LICENSE
  1 + Apache License
  2 + Version 2.0, January 2004
  3 + http://www.apache.org/licenses/
  4 +
  5 + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
  6 +
  7 + 1. Definitions.
  8 +
  9 + "License" shall mean the terms and conditions for use, reproduction,
  10 + and distribution as defined by Sections 1 through 9 of this document.
  11 +
  12 + "Licensor" shall mean the copyright owner or entity authorized by
  13 + the copyright owner that is granting the License.
  14 +
  15 + "Legal Entity" shall mean the union of the acting entity and all
  16 + other entities that control, are controlled by, or are under common
  17 + control with that entity. For the purposes of this definition,
  18 + "control" means (i) the power, direct or indirect, to cause the
  19 + direction or management of such entity, whether by contract or
  20 + otherwise, or (ii) ownership of fifty percent (50%) or more of the
  21 + outstanding shares, or (iii) beneficial ownership of such entity.
  22 +
  23 + "You" (or "Your") shall mean an individual or Legal Entity
  24 + exercising permissions granted by this License.
  25 +
  26 + "Source" form shall mean the preferred form for making modifications,
  27 + including but not limited to software source code, documentation
  28 + source, and configuration files.
  29 +
  30 + "Object" form shall mean any form resulting from mechanical
  31 + transformation or translation of a Source form, including but
  32 + not limited to compiled object code, generated documentation,
  33 + and conversions to other media types.
  34 +
  35 + "Work" shall mean the work of authorship, whether in Source or
  36 + Object form, made available under the License, as indicated by a
  37 + copyright notice that is included in or attached to the work
  38 + (an example is provided in the Appendix below).
  39 +
  40 + "Derivative Works" shall mean any work, whether in Source or Object
  41 + form, that is based on (or derived from) the Work and for which the
  42 + editorial revisions, annotations, elaborations, or other modifications
  43 + represent, as a whole, an original work of authorship. For the purposes
  44 + of this License, Derivative Works shall not include works that remain
  45 + separable from, or merely link (or bind by name) to the interfaces of,
  46 + the Work and Derivative Works thereof.
  47 +
  48 + "Contribution" shall mean any work of authorship, including
  49 + the original version of the Work and any modifications or additions
  50 + to that Work or Derivative Works thereof, that is intentionally
  51 + submitted to Licensor for inclusion in the Work by the copyright owner
  52 + or by an individual or Legal Entity authorized to submit on behalf of
  53 + the copyright owner. For the purposes of this definition, "submitted"
  54 + means any form of electronic, verbal, or written communication sent
  55 + to the Licensor or its representatives, including but not limited to
  56 + communication on electronic mailing lists, source code control systems,
  57 + and issue tracking systems that are managed by, or on behalf of, the
  58 + Licensor for the purpose of discussing and improving the Work, but
  59 + excluding communication that is conspicuously marked or otherwise
  60 + designated in writing by the copyright owner as "Not a Contribution."
  61 +
  62 + "Contributor" shall mean Licensor and any individual or Legal Entity
  63 + on behalf of whom a Contribution has been received by Licensor and
  64 + subsequently incorporated within the Work.
  65 +
  66 + 2. Grant of Copyright License. Subject to the terms and conditions of
  67 + this License, each Contributor hereby grants to You a perpetual,
  68 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable
  69 + copyright license to reproduce, prepare Derivative Works of,
  70 + publicly display, publicly perform, sublicense, and distribute the
  71 + Work and such Derivative Works in Source or Object form.
  72 +
  73 + 3. Grant of Patent License. Subject to the terms and conditions of
  74 + this License, each Contributor hereby grants to You a perpetual,
  75 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable
  76 + (except as stated in this section) patent license to make, have made,
  77 + use, offer to sell, sell, import, and otherwise transfer the Work,
  78 + where such license applies only to those patent claims licensable
  79 + by such Contributor that are necessarily infringed by their
  80 + Contribution(s) alone or by combination of their Contribution(s)
  81 + with the Work to which such Contribution(s) was submitted. If You
  82 + institute patent litigation against any entity (including a
  83 + cross-claim or counterclaim in a lawsuit) alleging that the Work
  84 + or a Contribution incorporated within the Work constitutes direct
  85 + or contributory patent infringement, then any patent licenses
  86 + granted to You under this License for that Work shall terminate
  87 + as of the date such litigation is filed.
  88 +
  89 + 4. Redistribution. You may reproduce and distribute copies of the
  90 + Work or Derivative Works thereof in any medium, with or without
  91 + modifications, and in Source or Object form, provided that You
  92 + meet the following conditions:
  93 +
  94 + (a) You must give any other recipients of the Work or
  95 + Derivative Works a copy of this License; and
  96 +
  97 + (b) You must cause any modified files to carry prominent notices
  98 + stating that You changed the files; and
  99 +
  100 + (c) You must retain, in the Source form of any Derivative Works
  101 + that You distribute, all copyright, patent, trademark, and
  102 + attribution notices from the Source form of the Work,
  103 + excluding those notices that do not pertain to any part of
  104 + the Derivative Works; and
  105 +
  106 + (d) If the Work includes a "NOTICE" text file as part of its
  107 + distribution, then any Derivative Works that You distribute must
  108 + include a readable copy of the attribution notices contained
  109 + within such NOTICE file, excluding those notices that do not
  110 + pertain to any part of the Derivative Works, in at least one
  111 + of the following places: within a NOTICE text file distributed
  112 + as part of the Derivative Works; within the Source form or
  113 + documentation, if provided along with the Derivative Works; or,
  114 + within a display generated by the Derivative Works, if and
  115 + wherever such third-party notices normally appear. The contents
  116 + of the NOTICE file are for informational purposes only and
  117 + do not modify the License. You may add Your own attribution
  118 + notices within Derivative Works that You distribute, alongside
  119 + or as an addendum to the NOTICE text from the Work, provided
  120 + that such additional attribution notices cannot be construed
  121 + as modifying the License.
  122 +
  123 + You may add Your own copyright statement to Your modifications and
  124 + may provide additional or different license terms and conditions
  125 + for use, reproduction, or distribution of Your modifications, or
  126 + for any such Derivative Works as a whole, provided Your use,
  127 + reproduction, and distribution of the Work otherwise complies with
  128 + the conditions stated in this License.
  129 +
  130 + 5. Submission of Contributions. Unless You explicitly state otherwise,
  131 + any Contribution intentionally submitted for inclusion in the Work
  132 + by You to the Licensor shall be under the terms and conditions of
  133 + this License, without any additional terms or conditions.
  134 + Notwithstanding the above, nothing herein shall supersede or modify
  135 + the terms of any separate license agreement you may have executed
  136 + with Licensor regarding such Contributions.
  137 +
  138 + 6. Trademarks. This License does not grant permission to use the trade
  139 + names, trademarks, service marks, or product names of the Licensor,
  140 + except as required for reasonable and customary use in describing the
  141 + origin of the Work and reproducing the content of the NOTICE file.
  142 +
  143 + 7. Disclaimer of Warranty. Unless required by applicable law or
  144 + agreed to in writing, Licensor provides the Work (and each
  145 + Contributor provides its Contributions) on an "AS IS" BASIS,
  146 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
  147 + implied, including, without limitation, any warranties or conditions
  148 + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
  149 + PARTICULAR PURPOSE. You are solely responsible for determining the
  150 + appropriateness of using or redistributing the Work and assume any
  151 + risks associated with Your exercise of permissions under this License.
  152 +
  153 + 8. Limitation of Liability. In no event and under no legal theory,
  154 + whether in tort (including negligence), contract, or otherwise,
  155 + unless required by applicable law (such as deliberate and grossly
  156 + negligent acts) or agreed to in writing, shall any Contributor be
  157 + liable to You for damages, including any direct, indirect, special,
  158 + incidental, or consequential damages of any character arising as a
  159 + result of this License or out of the use or inability to use the
  160 + Work (including but not limited to damages for loss of goodwill,
  161 + work stoppage, computer failure or malfunction, or any and all
  162 + other commercial damages or losses), even if such Contributor
  163 + has been advised of the possibility of such damages.
  164 +
  165 + 9. Accepting Warranty or Additional Liability. While redistributing
  166 + the Work or Derivative Works thereof, You may choose to offer,
  167 + and charge a fee for, acceptance of support, warranty, indemnity,
  168 + or other liability obligations and/or rights consistent with this
  169 + License. However, in accepting such obligations, You may act only
  170 + on Your own behalf and on Your sole responsibility, not on behalf
  171 + of any other Contributor, and only if You agree to indemnify,
  172 + defend, and hold each Contributor harmless for any liability
  173 + incurred by, or claims asserted against, such Contributor by reason
  174 + of your accepting any such warranty or additional liability.
  175 +
  176 + END OF TERMS AND CONDITIONS
  177 +
  178 + APPENDIX: How to apply the Apache License to your work.
  179 +
  180 + To apply the Apache License to your work, attach the following
  181 + boilerplate notice, with the fields enclosed by brackets "{}"
  182 + replaced with your own identifying information. (Don't include
  183 + the brackets!) The text should be enclosed in the appropriate
  184 + comment syntax for the file format. We also recommend that a
  185 + file or class name and description of purpose be included on the
  186 + same "printed page" as the copyright notice for easier
  187 + identification within third-party archives.
  188 +
  189 + Copyright 2021 web
  190 +
  191 + Licensed under the Apache License, Version 2.0 (the "License");
  192 + you may not use this file except in compliance with the License.
  193 + You may obtain a copy of the License at
  194 +
  195 + http://www.apache.org/licenses/LICENSE-2.0
  196 +
  197 + Unless required by applicable law or agreed to in writing, software
  198 + distributed under the License is distributed on an "AS IS" BASIS,
  199 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  200 + See the License for the specific language governing permissions and
  201 + limitations under the License.
... ...
README.md 0 → 100644
  1 +++ a/README.md
  1 +![](http://www.itcast.cn/2018czgw/images/logo.png)
  2 +![](http://www.itcast.cn/2020gw/images/slogan2.jpg)
  3 +
  4 +传智权限管家
  5 +=========================
  6 +
  7 +- [后端Gitee地址](https://gitee.com/itcastopen/itcast-authority.git)
  8 +- [后端Github地址](https://github.com/itcastopen/itcast-authority.git)
  9 +- [前端Gitee地址](https://gitee.com/itcastopen/itcast-authority-web.git)
  10 +- [前端Github地址](https://github.com/itcastopen/itcast-authority-web.git)
  11 +
  12 +
  13 +**在线演示**
  14 +=========================
  15 +- [官方主页](https://pip.itcast.cn/java-qxgj)
  16 +- [演示地址](http://www-permission-admin.itheima.net)
  17 +
  18 +**项目背景**
  19 +=========================
  20 +
  21 +- 权限管理对于任何一个后台系统都非常重要,随着业务的发展,不同阶段的权限系统又面临着不同设计和重构,企业中不同业务系统权限控制方式不统一,维护和实现成本增加,开发对接效率低,实现方式多样化,用户各种权限分配需求不能满足,实现起来非常蹩脚,这样只会造成恶性循环,最终可能影响业务发展甚至推倒重做,我们极为迫切的需要一个通用权限系统,界面美观、安全性高、便于管理使用、不侵入业务、又可以支持并发量高个一个通用权限系统,那么传智品达通用权限系统应运而生,解决企业开发中遇到的痛点和难点,也是小伙伴们学习源码、设计模式、常用微服务架构等经典知识的平台和途径!
  22 +
  23 +- [了解更多项目](https://project-dev.itheima.net/java),改变命运,少走弯路,进入真项目知识海洋畅游。
  24 +
  25 +功能特性
  26 +=========================
  27 +![](docs/img/功能特色.png)
  28 +
  29 +系统架构
  30 +=========================
  31 +![](docs/img/系统架构图.png)
  32 +
  33 +功能结构
  34 +=========================
  35 +![](docs/img/权限管理功能结构图.png)
  36 +
  37 +技术架构
  38 +=========================
  39 +![](docs/img/技术架构图.png)
  40 +
  41 +用户管理流程图
  42 +=========================
  43 +![](docs/img/流程图/用户管理.png)
  44 +
  45 +组织管理流程图
  46 +=========================
  47 +![](docs/img/流程图/组织管理.png)
  48 +
  49 +角色管理流程图
  50 +=========================
  51 +![](docs/img/流程图/角色管理.png)
  52 +
  53 +菜单管理流程图
  54 +=========================
  55 +![](docs/img/流程图/菜单管理.png)
  56 +
  57 +更多流程图
  58 +=========================
  59 +[全部流程图](docs/img/流程图)
  60 +
  61 +环境要求
  62 +=========================
  63 +- Node: 11.3+(集成npm)
  64 + https://nodejs.org/en/download
  65 +
  66 +安装运行步骤
  67 +=========================
  68 +
  69 +- [安装部署手册(建议下载后查看,避免格式问题)](docs/安装手册/install.md)
  70 +
  71 +页面一览
  72 +=========================
  73 +![](docs/img/页面/菜单.png)
  74 +![](docs/img/页面/权限配置.png)
  75 +![](docs/img/页面/应用配置.png)
  76 +![](docs/img/页面/应用-流程.png)
  77 +![](docs/img/页面/应用-品优购.png)
  78 +
  79 +新的惊喜
  80 +=========================
  81 +想进步、要关注。关注老铁抖音号,成为'铁丝' :)
  82 +
  83 +<img src="docs/img/douyin.jpeg" width="300" alt="抖音号" />
  84 +<br><br>
  85 +
  86 +更多福利
  87 +=========================
  88 +
  89 +[了解更多项目](https://pip.itcast.cn/home)
... ...
babel.config.js 0 → 100644
  1 +++ a/babel.config.js
  1 +module.exports = {
  2 + presets: [
  3 + '@vue/app'
  4 + ]
  5 +}
... ...
cypress.json 0 → 100644
  1 +++ a/cypress.json
  1 +{
  2 + "pluginsFile": "tests/e2e/plugins/index.js"
  3 +}
... ...
docs/img/douyin.jpeg 0 → 100644

82.1 KB

docs/img/功能特色.png 0 → 100644

74.2 KB

docs/img/技术架构图.png 0 → 100644

210 KB

docs/img/权限管理功能结构图.png 0 → 100644

88.5 KB

docs/img/流程图/删除岗位.png 0 → 100644

124 KB

docs/img/流程图/删除状态.png 0 → 100644

193 KB

docs/img/流程图/删除组织.png 0 → 100644

124 KB

docs/img/流程图/删除角色.png 0 → 100644

126 KB

docs/img/流程图/添加岗位.png 0 → 100644

91.2 KB

docs/img/流程图/用户管理.png 0 → 100644

534 KB

docs/img/流程图/禁用状态.png 0 → 100644

228 KB

docs/img/流程图/组织管理.png 0 → 100644

367 KB

docs/img/流程图/菜单管理.png 0 → 100644

187 KB

docs/img/流程图/角色管理.png 0 → 100644

209 KB

docs/img/系统架构图.png 0 → 100644

46.6 KB

docs/img/页面/应用-品优购.png 0 → 100644

90 KB

docs/img/页面/应用-流程.png 0 → 100644

153 KB

docs/img/页面/应用配置.png 0 → 100644

225 KB

docs/img/页面/权限配置.png 0 → 100644

150 KB

docs/img/页面/菜单.png 0 → 100644

168 KB

docs/安装手册/install.md 0 → 100644
  1 +++ a/docs/安装手册/install.md
  1 +### 技术栈
  2 +
  3 +vue + typescript
  4 +
  5 +### 安装依赖
  6 +
  7 +```bash
  8 +npm install
  9 +```
  10 +
  11 +### 启动本地开发环境(自带热启动)
  12 +
  13 +```bash
  14 +npm run serve
  15 +```
  16 +
  17 +### 构建生产环境 (自带压缩)
  18 +
  19 +```bash
  20 +npm build
  21 +```
  22 +
  23 +### 代码格式检查以及自动修复
  24 +
  25 +```bash
  26 +npm lint
  27 +```
  28 +
  29 +### 自定义 Vue 配置
... ...
jest.config.js 0 → 100644
  1 +++ a/jest.config.js
  1 +module.exports = {
  2 + moduleFileExtensions: [
  3 + 'js',
  4 + 'jsx',
  5 + 'json',
  6 + 'vue',
  7 + 'ts',
  8 + 'tsx'
  9 + ],
  10 + transform: {
  11 + '^.+\\.vue$': 'vue-jest',
  12 + '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub',
  13 + '^.+\\.tsx?$': 'ts-jest'
  14 + },
  15 + transformIgnorePatterns: [
  16 + '/node_modules/'
  17 + ],
  18 + moduleNameMapper: {
  19 + '^@/(.*)$': '<rootDir>/src/$1'
  20 + },
  21 + snapshotSerializers: [
  22 + 'jest-serializer-vue'
  23 + ],
  24 + testMatch: [
  25 + '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)'
  26 + ],
  27 + collectCoverage: true,
  28 + collectCoverageFrom: [
  29 + 'src/utils/**/*.{ts,vue}',
  30 + '!src/utils/auth.ts',
  31 + '!src/utils/request.ts',
  32 + 'src/components/**/*.{ts,vue}'
  33 + ],
  34 + coverageDirectory: '<rootDir>/tests/unit/coverage',
  35 + coverageReporters: [
  36 + 'lcov',
  37 + 'text-summary'
  38 + ],
  39 + testURL: 'http://localhost/',
  40 + watchPlugins: [
  41 + 'jest-watch-typeahead/filename',
  42 + 'jest-watch-typeahead/testname'
  43 + ],
  44 + globals: {
  45 + 'ts-jest': {
  46 + babelConfig: true
  47 + }
  48 + }
  49 +}
... ...