@ -1,21 +1,20 @@ |
||||
MIT License |
||||
The MIT License (MIT) |
||||
|
||||
Copyright (c) 2019 若依 |
||||
Copyright (c) 2018 RuoYi |
||||
|
||||
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: |
||||
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. |
||||
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. |
@ -1,36 +0,0 @@ |
||||
# RuoYi-Vue |
||||
|
||||
#### Description |
||||
{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**} |
||||
|
||||
#### Software Architecture |
||||
Software architecture description |
||||
|
||||
#### Installation |
||||
|
||||
1. xxxx |
||||
2. xxxx |
||||
3. xxxx |
||||
|
||||
#### Instructions |
||||
|
||||
1. xxxx |
||||
2. xxxx |
||||
3. xxxx |
||||
|
||||
#### Contribution |
||||
|
||||
1. Fork the repository |
||||
2. Create Feat_xxx branch |
||||
3. Commit your code |
||||
4. Create Pull Request |
||||
|
||||
|
||||
#### Gitee Feature |
||||
|
||||
1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md |
||||
2. Gitee blog [blog.gitee.com](https://blog.gitee.com) |
||||
3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore) |
||||
4. The most valuable open source project [GVP](https://gitee.com/gvp) |
||||
5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help) |
||||
6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) |
@ -1,39 +1,78 @@ |
||||
# RuoYi-Vue |
||||
## 平台简介 |
||||
|
||||
#### 介绍 |
||||
{**以下是码云平台说明,您可以替换此简介** |
||||
码云是 OSCHINA 推出的基于 Git 的代码托管平台(同时支持 SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台 |
||||
无论是个人、团队、或是企业,都能够用码云实现代码托管、项目管理、协作开发。企业项目请看 [https://gitee.com/enterprises](https://gitee.com/enterprises)} |
||||
一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适的。于是利用空闲休息时间开始自己写了一套后台系统。如此有了若依。她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。 |
||||
|
||||
#### 软件架构 |
||||
软件架构说明 |
||||
性别男,若依是给还没有出生女儿取的名字(寓意:你若不离不弃,我必生死相依) |
||||
|
||||
参考后台模板[vue-element-admin](https://github.com/PanJiaChen/vue-element-admin) |
||||
|
||||
#### 安装教程 |
||||
> 如需不分离应用,请移步 [RuoYi](https://gitee.com/y_project/RuoYi) `(保持同步更新)`,如需其他版本,请移步 [项目扩展](http://doc.ruoyi.vip/ruoyi/document/xmkz.html) `(不定时更新)` |
||||
|
||||
1. xxxx |
||||
2. xxxx |
||||
3. xxxx |
||||
> 阿里云通用云产品1888优惠券 :[点我领取](https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=brki8iof) 腾讯云通用云产品2860优惠券 :[点我领取](https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console) `(仅限新用户)` |
||||
|
||||
#### 使用说明 |
||||
> 阿里云Hi拼购 限量爆款 低至199元/年 [点我进入](https://www.aliyun.com/acts/hi-group-buying?userCode=brki8iof) `(仅限新用户)` |
||||
|
||||
1. xxxx |
||||
2. xxxx |
||||
3. xxxx |
||||
## 内置功能 |
||||
|
||||
#### 参与贡献 |
||||
1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。 |
||||
2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。 |
||||
3. 岗位管理:配置系统用户所属担任职务。 |
||||
4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。 |
||||
5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。 |
||||
6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。 |
||||
7. 参数管理:对系统动态配置常用参数。 |
||||
8. 通知公告:系统通知公告信息发布维护。 |
||||
9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 |
||||
10. 登录日志:系统登录日志记录查询包含登录异常。 |
||||
11. 在线用户:当前系统中活跃用户状态监控。 |
||||
12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 |
||||
13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。 |
||||
14. 系统接口:根据业务代码自动生成相关的api接口文档。 |
||||
15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。 |
||||
16. 在线构建器:拖动表单元素生成相应的HTML代码。 |
||||
17. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 |
||||
## 在线体验 |
||||
> admin/admin123 |
||||
> 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。 |
||||
|
||||
1. Fork 本仓库 |
||||
2. 新建 Feat_xxx 分支 |
||||
3. 提交代码 |
||||
4. 新建 Pull Request |
||||
演示地址:http://vue.ruoyi.vip |
||||
|
||||
文档地址:http://doc.ruoyi.vip |
||||
|
||||
#### 码云特技 |
||||
## 演示图 |
||||
|
||||
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md |
||||
2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) |
||||
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 |
||||
4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 |
||||
5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) |
||||
6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) |
||||
<table> |
||||
<tr> |
||||
<td><img src="https://oscimg.oschina.net/oscnet/cd1f90be5f2684f4560c9519c0f2a232ee8.jpg"/></td> |
||||
<td><img src="https://oscimg.oschina.net/oscnet/1cbcf0e6f257c7d3a063c0e3f2ff989e4b3.jpg"/></td> |
||||
</tr> |
||||
<tr> |
||||
<td><img src="https://oscimg.oschina.net/oscnet/97fcdc766fa04c03722aef4b3d77f71e8d2.jpg"/></td> |
||||
<td><img src="https://oscimg.oschina.net/oscnet/642858372da91853c39e2d4746f036ea171.jpg"/></td> |
||||
</tr> |
||||
<tr> |
||||
<td><img src="https://oscimg.oschina.net/oscnet/8678d5204148e2610c9d02822274a961dcf.jpg"/></td> |
||||
<td><img src="https://oscimg.oschina.net/oscnet/feb2b25a08bf9dd121b8f51274ae935ead6.jpg"/></td> |
||||
</tr> |
||||
<tr> |
||||
<td><img src="https://oscimg.oschina.net/oscnet/71c2d48905221a09a728df4aff4160b8607.jpg"/></td> |
||||
<td><img src="https://oscimg.oschina.net/oscnet/c14c1ee9a64a6a9c2c22f67d43198767dbe.jpg"/></td> |
||||
</tr> |
||||
<tr> |
||||
<td><img src="https://oscimg.oschina.net/oscnet/5e8c387724954459291aafd5eb52b456f53.jpg"/></td> |
||||
<td><img src="https://oscimg.oschina.net/oscnet/644e78da53c2e92a95dfda4f76e6d117c4b.jpg"/></td> |
||||
</tr> |
||||
<tr> |
||||
<td><img src="https://oscimg.oschina.net/oscnet/c162686bf3a39e3cd6b4fd6b5919f515ebf.jpg"/></td> |
||||
<td><img src="https://oscimg.oschina.net/oscnet/412fb931faa8b3e3de6f9cbbc5b7979cf36.jpg"/></td> |
||||
</tr> |
||||
<tr> |
||||
<td><img src="https://oscimg.oschina.net/oscnet/b6115bc8c31de52951982e509930b20684a.jpg"/></td> |
||||
<td><img src="https://oscimg.oschina.net/oscnet/5f3d39a141f21f81b90536f391b8408f1fa.jpg"/></td> |
||||
</tr> |
||||
</table> |
||||
|
||||
|
||||
## 若依交流群 |
||||
|
||||
QQ群: [![加入QQ群](https://img.shields.io/badge/12633588-blue.svg)](https://jq.qq.com/?_wv=1027&k=5PjgQ8e) 点击按钮入群。 |
@ -0,0 +1,22 @@ |
||||
# 告诉EditorConfig插件,这是根文件,不用继续往上查找 |
||||
root = true |
||||
|
||||
# 匹配全部文件 |
||||
[*] |
||||
# 设置字符集 |
||||
charset = utf-8 |
||||
# 缩进风格,可选space、tab |
||||
indent_style = space |
||||
# 缩进的空格数 |
||||
indent_size = 2 |
||||
# 结尾换行符,可选lf、cr、crlf |
||||
end_of_line = lf |
||||
# 在文件结尾插入新行 |
||||
insert_final_newline = true |
||||
# 删除一行中的前后空格 |
||||
trim_trailing_whitespace = true |
||||
|
||||
# 匹配md结尾的文件 |
||||
[*.md] |
||||
insert_final_newline = false |
||||
trim_trailing_whitespace = false |
@ -0,0 +1,8 @@ |
||||
# 开发环境配置 |
||||
ENV = 'development' |
||||
|
||||
# 若依管理系统/开发环境 |
||||
VUE_APP_BASE_API = '/dev-api' |
||||
|
||||
# 路由懒加载 |
||||
VUE_CLI_BABEL_TRANSPILE_MODULES = true |
@ -0,0 +1,5 @@ |
||||
# 生产环境配置 |
||||
ENV = 'production' |
||||
|
||||
# 若依管理系统/生产环境 |
||||
VUE_APP_BASE_API = '/prod-api' |
@ -0,0 +1,7 @@ |
||||
NODE_ENV = production |
||||
|
||||
# 测试环境配置 |
||||
ENV = 'staging' |
||||
|
||||
# 若依管理系统/测试环境 |
||||
VUE_APP_BASE_API = '/stage-api' |
@ -0,0 +1,10 @@ |
||||
# 忽略build目录下类型为js的文件的语法检查 |
||||
build/*.js |
||||
# 忽略src/assets目录下文件的语法检查 |
||||
src/assets |
||||
# 忽略public目录下文件的语法检查 |
||||
public |
||||
# 忽略当前目录下为js的文件的语法检查 |
||||
*.js |
||||
# 忽略当前目录下为vue的文件的语法检查 |
||||
*.vue |
@ -0,0 +1,199 @@ |
||||
// ESlint 检查配置
|
||||
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'] |
||||
} |
||||
} |
@ -0,0 +1,23 @@ |
||||
.DS_Store |
||||
node_modules/ |
||||
dist/ |
||||
npm-debug.log* |
||||
yarn-debug.log* |
||||
yarn-error.log* |
||||
**/*.log |
||||
|
||||
tests/**/coverage/ |
||||
tests/e2e/reports |
||||
selenium-debug.log |
||||
|
||||
# Editor directories and files |
||||
.idea |
||||
.vscode |
||||
*.suo |
||||
*.ntvs* |
||||
*.njsproj |
||||
*.sln |
||||
*.local |
||||
|
||||
package-lock.json |
||||
yarn.lock |
@ -0,0 +1,30 @@ |
||||
## 开发 |
||||
|
||||
```bash |
||||
# 克隆项目 |
||||
git clone https://gitee.com/y_project/RuoYi-Vue |
||||
|
||||
# 进入项目目录 |
||||
cd ruoyi-ui |
||||
|
||||
# 安装依赖 |
||||
npm install |
||||
|
||||
# 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题 |
||||
npm install --registry=https://registry.npm.taobao.org |
||||
|
||||
# 启动服务 |
||||
npm run dev |
||||
``` |
||||
|
||||
浏览器访问 http://localhost:80 |
||||
|
||||
## 发布 |
||||
|
||||
```bash |
||||
# 构建测试环境 |
||||
npm run build:stage |
||||
|
||||
# 构建生产环境 |
||||
npm run build:prod |
||||
``` |
@ -0,0 +1,5 @@ |
||||
module.exports = { |
||||
presets: [ |
||||
'@vue/app' |
||||
] |
||||
} |
@ -0,0 +1,12 @@ |
||||
@echo off |
||||
echo. |
||||
echo [信息] 打包Web工程,生成node_modules包文件。 |
||||
echo. |
||||
|
||||
%~d0 |
||||
cd %~dp0 |
||||
|
||||
cd .. |
||||
npm install --registry=https://registry.npm.taobao.org |
||||
|
||||
pause |
@ -0,0 +1,12 @@ |
||||
@echo off |
||||
echo. |
||||
echo [信息] 使用 Vue 运行 Web 工程。 |
||||
echo. |
||||
|
||||
%~d0 |
||||
cd %~dp0 |
||||
|
||||
cd .. |
||||
npm run dev |
||||
|
||||
pause |
@ -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}`) |
||||
} |
@ -0,0 +1,102 @@ |
||||
{ |
||||
"name": "ruoyi", |
||||
"version": "1.0.0", |
||||
"description": "若依管理系统", |
||||
"author": "若依", |
||||
"license": "MIT", |
||||
"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", |
||||
"lint": "eslint --ext .js,.vue src", |
||||
"test:unit": "jest --clearCache && vue-cli-service test:unit", |
||||
"test:ci": "npm run lint && npm run test:unit", |
||||
"svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml", |
||||
"new": "plop" |
||||
}, |
||||
"husky": { |
||||
"hooks": { |
||||
"pre-commit": "lint-staged" |
||||
} |
||||
}, |
||||
"lint-staged": { |
||||
"src/**/*.{js,vue}": [ |
||||
"eslint --fix", |
||||
"git add" |
||||
] |
||||
}, |
||||
"keywords": [ |
||||
"vue", |
||||
"admin", |
||||
"dashboard", |
||||
"element-ui", |
||||
"boilerplate", |
||||
"admin-template", |
||||
"management-system" |
||||
], |
||||
"repository": { |
||||
"type": "git", |
||||
"url": "https://gitee.com/y_project/RuoYi-Vue.git" |
||||
}, |
||||
"dependencies": { |
||||
"@riophae/vue-treeselect": "0.1.0", |
||||
"vue-quill-editor": "3.0.6", |
||||
"vue-cropper": "0.4.9", |
||||
"axios": "0.18.1", |
||||
"echarts": "4.2.1", |
||||
"element-ui": "2.11.1", |
||||
"fuse.js": "3.4.4", |
||||
"js-cookie": "2.2.0", |
||||
"normalize.css": "7.0.0", |
||||
"nprogress": "0.2.0", |
||||
"path-to-regexp": "2.4.0", |
||||
"screenfull": "4.2.0", |
||||
"vue": "2.6.10", |
||||
"vue-count-to": "1.0.13", |
||||
"vue-router": "3.0.2", |
||||
"vue-splitpane": "1.0.4", |
||||
"vuex": "3.1.0" |
||||
}, |
||||
"devDependencies": { |
||||
"@babel/core": "7.0.0", |
||||
"@babel/register": "7.0.0", |
||||
"@vue/cli-plugin-babel": "3.5.3", |
||||
"@vue/cli-plugin-eslint": "^3.9.1", |
||||
"@vue/cli-plugin-unit-jest": "3.5.3", |
||||
"@vue/cli-service": "3.5.3", |
||||
"@vue/test-utils": "1.0.0-beta.29", |
||||
"autoprefixer": "^9.5.1", |
||||
"babel-core": "7.0.0-bridge.0", |
||||
"babel-eslint": "10.0.1", |
||||
"babel-jest": "23.6.0", |
||||
"chalk": "2.4.2", |
||||
"chokidar": "2.1.5", |
||||
"connect": "3.6.6", |
||||
"eslint": "5.15.3", |
||||
"eslint-plugin-vue": "5.2.2", |
||||
"html-webpack-plugin": "3.2.0", |
||||
"http-proxy-middleware": "^0.19.1", |
||||
"husky": "1.3.1", |
||||
"lint-staged": "8.1.5", |
||||
"mockjs": "1.0.1-beta3", |
||||
"node-sass": "^4.9.0", |
||||
"plop": "2.3.0", |
||||
"runjs": "^4.3.2", |
||||
"sass-loader": "^7.1.0", |
||||
"script-ext-html-webpack-plugin": "2.1.3", |
||||
"script-loader": "0.7.2", |
||||
"serve-static": "^1.13.2", |
||||
"svg-sprite-loader": "4.1.3", |
||||
"svgo": "1.2.0", |
||||
"vue-template-compiler": "2.6.10" |
||||
}, |
||||
"engines": { |
||||
"node": ">=8.9", |
||||
"npm": ">= 3.0.0" |
||||
}, |
||||
"browserslist": [ |
||||
"> 1%", |
||||
"last 2 versions" |
||||
] |
||||
} |
After Width: | Height: | Size: 5.5 KiB |
@ -0,0 +1,207 @@ |
||||
<!DOCTYPE html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> |
||||
<meta name="renderer" content="webkit"> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> |
||||
<link rel="icon" href="<%= BASE_URL %>favicon.ico"> |
||||
<title><%= webpackConfig.name %></title> |
||||
<style> |
||||
html, |
||||
body, |
||||
#app { |
||||
height: 100%; |
||||
margin: 0px; |
||||
padding: 0px; |
||||
} |
||||
.chromeframe { |
||||
margin: 0.2em 0; |
||||
background: #ccc; |
||||
color: #000; |
||||
padding: 0.2em 0; |
||||
} |
||||
|
||||
#loader-wrapper { |
||||
position: fixed; |
||||
top: 0; |
||||
left: 0; |
||||
width: 100%; |
||||
height: 100%; |
||||
z-index: 999999; |
||||
} |
||||
|
||||
#loader { |
||||
display: block; |
||||
position: relative; |
||||
left: 50%; |
||||
top: 50%; |
||||
width: 150px; |
||||
height: 150px; |
||||
margin: -75px 0 0 -75px; |
||||
border-radius: 50%; |
||||
border: 3px solid transparent; |
||||
border-top-color: #FFF; |
||||
-webkit-animation: spin 2s linear infinite; |
||||
-ms-animation: spin 2s linear infinite; |
||||
-moz-animation: spin 2s linear infinite; |
||||
-o-animation: spin 2s linear infinite; |
||||
animation: spin 2s linear infinite; |
||||
z-index: 1001; |
||||
} |
||||
|
||||
#loader:before { |
||||
content: ""; |
||||
position: absolute; |
||||
top: 5px; |
||||
left: 5px; |
||||
right: 5px; |
||||
bottom: 5px; |
||||
border-radius: 50%; |
||||
border: 3px solid transparent; |
||||
border-top-color: #FFF; |
||||
-webkit-animation: spin 3s linear infinite; |
||||
-moz-animation: spin 3s linear infinite; |
||||
-o-animation: spin 3s linear infinite; |
||||
-ms-animation: spin 3s linear infinite; |
||||
animation: spin 3s linear infinite; |
||||
} |
||||
|
||||
#loader:after { |
||||
content: ""; |
||||
position: absolute; |
||||
top: 15px; |
||||
left: 15px; |
||||
right: 15px; |
||||
bottom: 15px; |
||||
border-radius: 50%; |
||||
border: 3px solid transparent; |
||||
border-top-color: #FFF; |
||||
-moz-animation: spin 1.5s linear infinite; |
||||
-o-animation: spin 1.5s linear infinite; |
||||
-ms-animation: spin 1.5s linear infinite; |
||||
-webkit-animation: spin 1.5s linear infinite; |
||||
animation: spin 1.5s linear infinite; |
||||
} |
||||
|
||||
|
||||
@-webkit-keyframes spin { |
||||
0% { |
||||
-webkit-transform: rotate(0deg); |
||||
-ms-transform: rotate(0deg); |
||||
transform: rotate(0deg); |
||||
} |
||||
100% { |
||||
-webkit-transform: rotate(360deg); |
||||
-ms-transform: rotate(360deg); |
||||
transform: rotate(360deg); |
||||
} |
||||
} |
||||
|
||||
@keyframes spin { |
||||
0% { |
||||
-webkit-transform: rotate(0deg); |
||||
-ms-transform: rotate(0deg); |
||||
transform: rotate(0deg); |
||||
} |
||||
100% { |
||||
-webkit-transform: rotate(360deg); |
||||
-ms-transform: rotate(360deg); |
||||
transform: rotate(360deg); |
||||
} |
||||
} |
||||
|
||||
|
||||
#loader-wrapper .loader-section { |
||||
position: fixed; |
||||
top: 0; |
||||
width: 51%; |
||||
height: 100%; |
||||
background: #7171C6; |
||||
z-index: 1000; |
||||
-webkit-transform: translateX(0); |
||||
-ms-transform: translateX(0); |
||||
transform: translateX(0); |
||||
} |
||||
|
||||
#loader-wrapper .loader-section.section-left { |
||||
left: 0; |
||||
} |
||||
|
||||
#loader-wrapper .loader-section.section-right { |
||||
right: 0; |
||||
} |
||||
|
||||
|
||||
.loaded #loader-wrapper .loader-section.section-left { |
||||
-webkit-transform: translateX(-100%); |
||||
-ms-transform: translateX(-100%); |
||||
transform: translateX(-100%); |
||||
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000); |
||||
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000); |
||||
} |
||||
|
||||
.loaded #loader-wrapper .loader-section.section-right { |
||||
-webkit-transform: translateX(100%); |
||||
-ms-transform: translateX(100%); |
||||
transform: translateX(100%); |
||||
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000); |
||||
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000); |
||||
} |
||||
|
||||
.loaded #loader { |
||||
opacity: 0; |
||||
-webkit-transition: all 0.3s ease-out; |
||||
transition: all 0.3s ease-out; |
||||
} |
||||
|
||||
.loaded #loader-wrapper { |
||||
visibility: hidden; |
||||
-webkit-transform: translateY(-100%); |
||||
-ms-transform: translateY(-100%); |
||||
transform: translateY(-100%); |
||||
-webkit-transition: all 0.3s 1s ease-out; |
||||
transition: all 0.3s 1s ease-out; |
||||
} |
||||
|
||||
.no-js #loader-wrapper { |
||||
display: none; |
||||
} |
||||
|
||||
.no-js h1 { |
||||
color: #222222; |
||||
} |
||||
|
||||
#loader-wrapper .load_title { |
||||
font-family: 'Open Sans'; |
||||
color: #FFF; |
||||
font-size: 19px; |
||||
width: 100%; |
||||
text-align: center; |
||||
z-index: 9999999999999; |
||||
position: absolute; |
||||
top: 60%; |
||||
opacity: 1; |
||||
line-height: 30px; |
||||
} |
||||
|
||||
#loader-wrapper .load_title span { |
||||
font-weight: normal; |
||||
font-style: italic; |
||||
font-size: 13px; |
||||
color: #FFF; |
||||
opacity: 0.5; |
||||
} |
||||
</style> |
||||
</head> |
||||
<body> |
||||
<div id="app"> |
||||
<div id="loader-wrapper"> |
||||
<div id="loader"></div> |
||||
<div class="loader-section section-left"></div> |
||||
<div class="loader-section section-right"></div> |
||||
<div class="load_title">正在加载系统资源,请耐心等待</div> |
||||
</div> |
||||
</div> |
||||
</body> |
||||
</html> |
@ -0,0 +1,11 @@ |
||||
<template> |
||||
<div id="app"> |
||||
<router-view /> |
||||
</div> |
||||
</template> |
||||
|
||||
<script> |
||||
export default { |
||||
name: 'App' |
||||
} |
||||
</script> |
@ -0,0 +1,40 @@ |
||||
import request from '@/utils/request' |
||||
|
||||
// 登录方法
|
||||
export function login(username, password, code, uuid) { |
||||
const data = { |
||||
username, |
||||
password, |
||||
code, |
||||
uuid |
||||
} |
||||
return request({ |
||||
url: '/login', |
||||
method: 'post', |
||||
params: data |
||||
}) |
||||
} |
||||
|
||||
// 获取用户详细信息
|
||||
export function getInfo() { |
||||
return request({ |
||||
url: '/getInfo', |
||||
method: 'get' |
||||
}) |
||||
} |
||||
|
||||
// 退出方法
|
||||
export function logout() { |
||||
return request({ |
||||
url: '/logout', |
||||
method: 'post' |
||||
}) |
||||
} |
||||
|
||||
// 获取验证码
|
||||
export function getCodeImg() { |
||||
return request({ |
||||
url: '/captchaImage', |
||||
method: 'get' |
||||
}) |
||||
} |
@ -0,0 +1,9 @@ |
||||
import request from '@/utils/request' |
||||
|
||||
// 获取路由
|
||||
export const getRouters = () => { |
||||
return request({ |
||||
url: '/getRouters', |
||||
method: 'get' |
||||
}) |
||||
} |
@ -0,0 +1,10 @@ |
||||
import request from '@/utils/request' |
||||
|
||||
// 查询登录日志列表
|
||||
export function list(query) { |
||||
return request({ |
||||
url: '/monitor/logininfor/list', |
||||
method: 'get', |
||||
params: query |
||||
}) |
||||
} |
@ -0,0 +1,10 @@ |
||||
import request from '@/utils/request' |
||||
|
||||
// 查询操作日志列表
|
||||
export function list(query) { |
||||
return request({ |
||||
url: '/monitor/operlog/list', |
||||
method: 'get', |
||||
params: query |
||||
}) |
||||
} |
@ -0,0 +1,9 @@ |
||||
import request from '@/utils/request' |
||||
|
||||
// 查询服务器详细
|
||||
export function getServer() { |
||||
return request({ |
||||
url: '/monitor/server', |
||||
method: 'get' |
||||
}) |
||||
} |
@ -0,0 +1,52 @@ |
||||
import request from '@/utils/request' |
||||
|
||||
// 查询参数列表
|
||||
export function listConfig(query) { |
||||
return request({ |
||||
url: '/system/config/list', |
||||
method: 'get', |
||||
params: query |
||||
}) |
||||
} |
||||
|
||||
// 查询参数详细
|
||||
export function getConfig(configId) { |
||||
return request({ |
||||
url: '/system/config/' + configId, |
||||
method: 'get' |
||||
}) |
||||
} |
||||
|
||||
// 根据参数键名查询参数值
|
||||
export function getConfigKey(configKey) { |
||||
return request({ |
||||
url: '/system/config/configKey/' + configKey, |
||||
method: 'get' |
||||
}) |
||||
} |
||||
|
||||
// 新增参数配置
|
||||
export function addConfig(data) { |
||||
return request({ |
||||
url: '/system/config', |
||||
method: 'post', |
||||
data: data |
||||
}) |
||||
} |
||||
|
||||
// 修改参数配置
|
||||
export function updateConfig(data) { |
||||
return request({ |
||||
url: '/system/config', |
||||
method: 'put', |
||||
data: data |
||||
}) |
||||
} |
||||
|
||||
// 删除参数配置
|
||||
export function delConfig(configId) { |
||||
return request({ |
||||
url: '/system/config/' + configId, |
||||
method: 'delete' |
||||
}) |
||||
} |
@ -0,0 +1,60 @@ |
||||
import request from '@/utils/request' |
||||
|
||||
// 查询部门列表
|
||||
export function listDept(query) { |
||||
return request({ |
||||
url: '/system/dept/list', |
||||
method: 'get', |
||||
params: query |
||||
}) |
||||
} |
||||
|
||||
// 查询部门详细
|
||||
export function getDept(deptId) { |
||||
return request({ |
||||
url: '/system/dept/' + deptId, |
||||
method: 'get' |
||||
}) |
||||
} |
||||
|
||||
// 查询部门下拉树结构
|
||||
export function treeselect() { |
||||
return request({ |
||||
url: '/system/dept/treeselect', |
||||
method: 'get' |
||||
}) |
||||
} |
||||
|
||||
// 根据角色ID查询部门树结构
|
||||
export function roleDeptTreeselect(roleId) { |
||||
return request({ |
||||
url: '/system/dept/roleDeptTreeselect/' + roleId, |
||||
method: 'get' |
||||
}) |
||||
} |
||||
|
||||
// 新增部门
|
||||
export function addDept(data) { |
||||
return request({ |
||||
url: '/system/dept', |
||||
method: 'post', |
||||
data: data |
||||
}) |
||||
} |
||||
|
||||
// 修改部门
|
||||
export function updateDept(data) { |
||||
return request({ |
||||
url: '/system/dept', |
||||
method: 'put', |
||||
data: data |
||||
}) |
||||
} |
||||
|
||||
// 删除部门
|
||||
export function delDept(deptId) { |
||||
return request({ |
||||
url: '/system/dept/' + deptId, |
||||
method: 'delete' |
||||
}) |
||||
} |
@ -0,0 +1,52 @@ |
||||
import request from '@/utils/request' |
||||
|
||||
// 查询字典数据列表
|
||||
export function listData(query) { |
||||
return request({ |
||||
url: '/system/dict/data/list', |
||||
method: 'get', |
||||
params: query |
||||
}) |
||||
} |
||||
|
||||
// 查询字典数据详细
|
||||
export function getData(dictCode) { |
||||
return request({ |
||||
url: '/system/dict/data/' + dictCode, |
||||
method: 'get' |
||||
}) |
||||
} |
||||
|
||||
// 根据字典类型查询字典数据信息
|
||||
export function getDicts(dictType) { |
||||
return request({ |
||||
url: '/system/dict/data/dictType/' + dictType, |
||||
method: 'get' |
||||
}) |
||||
} |
||||
|
||||
// 新增字典数据
|
||||
export function addData(data) { |
||||
return request({ |
||||
url: '/system/dict/data', |
||||
method: 'post', |
||||
data: data |
||||
}) |
||||
} |
||||
|
||||
// 修改字典数据
|
||||
export function updateData(data) { |
||||
return request({ |
||||
url: '/system/dict/data', |
||||
method: 'put', |
||||
data: data |
||||
}) |
||||
} |
||||
|
||||
// 删除字典数据
|
||||
export function delData(dictCode) { |
||||
return request({ |
||||
url: '/system/dict/data/' + dictCode, |
||||
method: 'delete' |
||||
}) |
||||
} |
@ -0,0 +1,44 @@ |
||||
import request from '@/utils/request' |
||||
|
||||
// 查询字典类型列表
|
||||
export function listType(query) { |
||||
return request({ |
||||
url: '/system/dict/type/list', |
||||
method: 'get', |
||||
params: query |
||||
}) |
||||
} |
||||
|
||||
// 查询字典类型详细
|
||||
export function getType(dictId) { |
||||
return request({ |
||||
url: '/system/dict/type/' + dictId, |
||||
method: 'get' |
||||
}) |
||||
} |
||||
|
||||
// 新增字典类型
|
||||
export function addType(data) { |
||||
return request({ |
||||
url: '/system/dict/type', |
||||
method: 'post', |
||||
data: data |
||||
}) |
||||
} |
||||
|
||||
// 修改字典类型
|
||||
export function updateType(data) { |
||||
return request({ |
||||
url: '/system/dict/type', |
||||
method: 'put', |
||||
data: data |
||||
}) |
||||
} |
||||
|
||||
// 删除字典类型
|
||||
export function delType(dictId) { |
||||
return request({ |
||||
url: '/system/dict/type/' + dictId, |
||||
method: 'delete' |
||||
}) |
||||
} |
@ -0,0 +1,60 @@ |
||||
import request from '@/utils/request' |
||||
|
||||
// 查询菜单列表
|
||||
export function listMenu(query) { |
||||
return request({ |
||||
url: '/system/menu/list', |
||||
method: 'get', |
||||
params: query |
||||
}) |
||||
} |
||||
|
||||
// 查询菜单详细
|
||||
export function getMenu(menuId) { |
||||
return request({ |
||||
url: '/system/menu/' + menuId, |
||||
method: 'get' |
||||
}) |
||||
} |
||||
|
||||
// 查询菜单下拉树结构
|
||||
export function treeselect() { |
||||
return request({ |
||||
url: '/system/menu/treeselect', |
||||
method: 'get' |
||||
}) |
||||
} |
||||
|
||||
// 根据角色ID查询菜单下拉树结构
|
||||
export function roleMenuTreeselect(roleId) { |
||||
return request({ |
||||
url: '/system/menu/roleMenuTreeselect/' + roleId, |
||||
method: 'get' |
||||
}) |
||||
} |
||||
|
||||
// 新增菜单
|
||||
export function addMenu(data) { |
||||
return request({ |
||||
url: '/system/menu', |
||||
method: 'post', |
||||
data: data |
||||
}) |
||||
} |
||||
|
||||
// 修改菜单
|
||||
export function updateMenu(data) { |
||||
return request({ |
||||
url: '/system/menu', |
||||
method: 'put', |
||||
data: data |
||||
}) |
||||
} |
||||
|
||||
// 删除菜单
|
||||
export function delMenu(menuId) { |
||||
return request({ |
||||
url: '/system/menu/' + menuId, |
||||
method: 'delete' |
||||
}) |
||||
} |
@ -0,0 +1,44 @@ |
||||
import request from '@/utils/request' |
||||
|
||||
// 查询公告列表
|
||||
export function listNotice(query) { |
||||
return request({ |
||||
url: '/system/notice/list', |
||||
method: 'get', |
||||
params: query |
||||
}) |
||||
} |
||||
|
||||
// 查询公告详细
|
||||
export function getNotice(noticeId) { |
||||
return request({ |
||||
url: '/system/notice/' + noticeId, |
||||
method: 'get' |
||||
}) |
||||
} |
||||
|
||||
// 新增公告
|
||||
export function addNotice(data) { |
||||
return request({ |
||||
url: '/system/notice', |
||||
method: 'post', |
||||
data: data |
||||
}) |
||||
} |
||||
|
||||
// 修改公告
|
||||
export function updateNotice(data) { |
||||
return request({ |
||||
url: '/system/notice', |
||||
method: 'put', |
||||
data: data |
||||
}) |
||||
} |
||||
|
||||
// 删除公告
|
||||
export function delNotice(noticeId) { |
||||
return request({ |
||||
url: '/system/notice/' + noticeId, |
||||
method: 'delete' |
||||
}) |
||||
} |
@ -0,0 +1,44 @@ |
||||
import request from '@/utils/request' |
||||
|
||||
// 查询岗位列表
|
||||
export function listPost(query) { |
||||
return request({ |
||||
url: '/system/post/list', |
||||
method: 'get', |
||||
params: query |
||||
}) |
||||
} |
||||
|
||||
// 查询岗位详细
|
||||
export function getPost(postId) { |
||||
return request({ |
||||
url: '/system/post/' + postId, |
||||
method: 'get' |
||||
}) |
||||
} |
||||
|
||||
// 新增岗位
|
||||
export function addPost(data) { |
||||
return request({ |
||||
url: '/system/post', |
||||
method: 'post', |
||||
data: data |
||||
}) |
||||
} |
||||
|
||||
// 修改岗位
|
||||
export function updatePost(data) { |
||||
return request({ |
||||
url: '/system/post', |
||||
method: 'put', |
||||
data: data |
||||
}) |
||||
} |
||||
|
||||
// 删除岗位
|
||||
export function delPost(postId) { |
||||
return request({ |
||||
url: '/system/post/' + postId, |
||||
method: 'delete' |
||||
}) |
||||
} |
@ -0,0 +1,66 @@ |
||||
import request from '@/utils/request' |
||||
|
||||
// 查询角色列表
|
||||
export function listRole(query) { |
||||
return request({ |
||||
url: '/system/role/list', |
||||
method: 'get', |
||||
params: query |
||||
}) |
||||
} |
||||
|
||||
// 查询角色详细
|
||||
export function getRole(roleId) { |
||||
return request({ |
||||
url: '/system/role/' + roleId, |
||||
method: 'get' |
||||
}) |
||||
} |
||||
|
||||
// 新增角色
|
||||
export function addRole(data) { |
||||
return request({ |
||||
url: '/system/role', |
||||
method: 'post', |
||||
data: data |
||||
}) |
||||
} |
||||
|
||||
// 修改角色
|
||||
export function updateRole(data) { |
||||
return request({ |
||||
url: '/system/role', |
||||
method: 'put', |
||||
data: data |
||||
}) |
||||
} |
||||
|
||||
// 角色数据权限
|
||||
export function dataScope(data) { |
||||
return request({ |
||||
url: '/system/role/dataScope', |
||||
method: 'put', |
||||
data: data |
||||
}) |
||||
} |
||||
|
||||
// 角色状态修改
|
||||
export function changeRoleStatus(roleId, status) { |
||||
const data = { |
||||
roleId, |
||||
status |
||||
} |
||||
return request({ |
||||
url: '/system/role/changeStatus', |
||||
method: 'put', |
||||
data: data |
||||
}) |
||||
} |
||||
|
||||
// 删除角色
|
||||
export function delRole(roleId) { |
||||
return request({ |
||||
url: '/system/role/' + roleId, |
||||
method: 'delete' |
||||
}) |
||||
} |
@ -0,0 +1,109 @@ |
||||
import request from '@/utils/request' |
||||
|
||||
// 查询用户列表
|
||||
export function listUser(query) { |
||||
return request({ |
||||
url: '/system/user/list', |
||||
method: 'get', |
||||
params: query |
||||
}) |
||||
} |
||||
|
||||
// 查询用户详细
|
||||
export function getUser(userId) { |
||||
return request({ |
||||
url: '/system/user/' + userId, |
||||
method: 'get' |
||||
}) |
||||
} |
||||
|
||||
// 新增用户
|
||||
export function addUser(data) { |
||||
return request({ |
||||
url: '/system/user', |
||||
method: 'post', |
||||
data: data |
||||
}) |
||||
} |
||||
|
||||
// 修改用户
|
||||
export function updateUser(data) { |
||||
return request({ |
||||
url: '/system/user', |
||||
method: 'put', |
||||
data: data |
||||
}) |
||||
} |
||||
|
||||
// 删除用户
|
||||
export function delUser(userId) { |
||||
return request({ |
||||
url: '/system/user/' + userId, |
||||
method: 'delete' |
||||
}) |
||||
} |
||||
|
||||
// 用户密码重置
|
||||
export function resetUserPwd(userId, password) { |
||||
const data = { |
||||
userId, |
||||
password |
||||
} |
||||
return request({ |
||||
url: '/system/user/resetPwd', |
||||
method: 'put', |
||||
data: data |
||||
}) |
||||
} |
||||
|
||||
// 用户状态修改
|
||||
export function changeUserStatus(userId, status) { |
||||
const data = { |
||||
userId, |
||||
status |
||||
} |
||||
return request({ |
||||
url: '/system/user/changeStatus', |
||||
method: 'put', |
||||
data: data |
||||
}) |
||||
} |
||||
|
||||
// 查询用户个人信息
|
||||
export function getUserProfile() { |
||||
return request({ |
||||
url: '/system/user/profile', |
||||
method: 'get' |
||||
}) |
||||
} |
||||
|
||||
// 修改用户个人信息
|
||||
export function updateUserProfile(data) { |
||||
return request({ |
||||
url: '/system/user/profile', |
||||
method: 'put', |
||||
data: data |
||||
}) |
||||
} |
||||
|
||||
// 用户密码重置
|
||||
export function updateUserPwd(oldPassword, newPassword) { |
||||
const data = { |
||||
oldPassword, |
||||
newPassword |
||||
} |
||||
return request({ |
||||
url: '/system/user/profile/updatePwd', |
||||
method: 'put', |
||||
params: data |
||||
}) |
||||
} |
||||
|
||||
// 用户头像上传
|
||||
export function uploadAvatar(data) { |
||||
return request({ |
||||
url: '/system/user/profile/avatar', |
||||
method: 'post', |
||||
data: data |
||||
}) |
||||
} |
After Width: | Height: | Size: 160 KiB |
After Width: | Height: | Size: 96 KiB |
After Width: | Height: | Size: 4.7 KiB |
@ -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) |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 954 B |
After Width: | Height: | Size: 179 B |
After Width: | Height: | Size: 971 B |
After Width: | Height: | Size: 732 B |
After Width: | Height: | Size: 319 B |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 418 B |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 356 B |
After Width: | Height: | Size: 724 B |
After Width: | Height: | Size: 818 B |
After Width: | Height: | Size: 627 B |
After Width: | Height: | Size: 347 B |
After Width: | Height: | Size: 497 B |
After Width: | Height: | Size: 459 B |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 944 B |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 421 B |
After Width: | Height: | Size: 320 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 285 B |
After Width: | Height: | Size: 1017 B |
After Width: | Height: | Size: 444 B |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 669 B |
After Width: | Height: | Size: 335 B |
After Width: | Height: | Size: 884 B |
After Width: | Height: | Size: 821 B |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 623 B |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 731 B |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 600 B |
After Width: | Height: | Size: 757 B |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 211 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 563 B |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 655 B |
After Width: | Height: | Size: 597 B |
After Width: | Height: | Size: 689 B |
After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 906 B |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 440 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.1 KiB |