yujialong 4 years ago
parent 14cea9eb25
commit 7eb2f5c121
  1. 197
      README.md
  2. 196
      README_EN.md
  3. BIN
      screenshots/wms1.png
  4. BIN
      screenshots/wms2.png
  5. BIN
      screenshots/wms3.png
  6. 6
      src/App.vue
  7. 138
      src/api/index.js
  8. 28
      src/assets/css/color-dark.css
  9. 4
      src/assets/css/icon.css
  10. 346
      src/assets/css/main.css
  11. 29
      src/assets/css/theme-green/color-green.css
  12. BIN
      src/assets/css/theme-green/fonts/element-icons.ttf
  13. BIN
      src/assets/css/theme-green/fonts/element-icons.woff
  14. 1
      src/assets/css/theme-green/index.css
  15. 71
      src/assets/icon/iconfont - 副本.css
  16. 1
      src/assets/img/edit.svg
  17. BIN
      src/assets/img/images/back_02.png
  18. BIN
      src/assets/img/login-bg.png
  19. BIN
      src/assets/img/login_bg.png
  20. BIN
      src/assets/img/logo-fill.png
  21. BIN
      src/assets/img/logo.png
  22. 1
      src/assets/svg/edit.svg
  23. 4
      src/layouts/header/index.vue
  24. 9
      src/libs/util.js
  25. 5
      src/main.js
  26. 284
      src/pages/account/login/index.vue
  27. 6
      src/pages/client/add/index.vue
  28. 14
      src/pages/client/list/index.vue
  29. 13
      src/pages/quesBank/list/globalQuesBank.vue
  30. 2
      src/pages/quesBank/list/index.vue
  31. 95
      src/pages/quesBank/list/myQuesBank.vue
  32. 12
      src/pages/quesBank/list/quesBankType.vue
  33. 7
      src/pages/quesBank/list/quesDialog.vue
  34. 2
      src/pages/setting/person/index.vue
  35. 2
      src/pages/system/list/index.vue
  36. 10
      src/pages/system/list/role.vue
  37. 13
      src/pages/system/list/staff.vue
  38. 12
      src/pages/system/list/staffside.vue
  39. 18
      src/pages/user/list/index.vue
  40. 2
      src/setting.js
  41. 145
      src/styles/common.scss
  42. 7
      src/styles/default/index.scss
  43. 0
      src/styles/font/icon/demo.css
  44. 0
      src/styles/font/icon/demo_index.html
  45. 0
      src/styles/font/icon/iconfont.css
  46. 0
      src/styles/font/icon/iconfont.eot
  47. 0
      src/styles/font/icon/iconfont.js
  48. 0
      src/styles/font/icon/iconfont.json
  49. 0
      src/styles/font/icon/iconfont.svg
  50. 0
      src/styles/font/icon/iconfont.ttf
  51. 0
      src/styles/font/icon/iconfont.woff
  52. 0
      src/styles/font/icon/iconfont.woff2
  53. 3
      src/styles/font/iconfont.css
  54. 6
      src/styles/index.scss
  55. 13
      src/styles/layout/index.scss
  56. 375
      src/styles/lib/_reset.scss
  57. 3
      src/styles/lib/_style.scss
  58. 80
      src/styles/lib/_var.scss
  59. 7
      src/styles/lib/background.scss
  60. 78
      src/styles/lib/border.scss
  61. 56
      src/styles/lib/box.scss
  62. 5
      src/styles/lib/cursor.scss
  63. 15
      src/styles/lib/display.scss
  64. 54
      src/styles/lib/flex.scss
  65. 16
      src/styles/lib/float.scss
  66. 41
      src/styles/lib/font-size.scss
  67. 17
      src/styles/lib/font-weight.scss
  68. 28
      src/styles/lib/index.scss
  69. 24
      src/styles/lib/line-height.scss
  70. 13
      src/styles/lib/link.scss
  71. 11
      src/styles/lib/overflow.scss
  72. 16
      src/styles/lib/position.scss
  73. 53
      src/styles/lib/size.scss
  74. 8
      src/styles/lib/text-align.scss
  75. 7
      src/styles/lib/text-color.scss
  76. 7
      src/styles/lib/vertical-align.scss
  77. 7
      src/styles/lib/visibility.scss
  78. 5
      src/styles/lib/white-space.scss

@ -1,197 +0,0 @@
# vue-manage-system
<a href="https://github.com/vuejs/vue">
<img src="https://img.shields.io/badge/vue-2.6.10-brightgreen.svg" alt="vue">
</a>
<a href="https://github.com/ElemeFE/element">
<img src="https://img.shields.io/badge/element--ui-2.8.2-brightgreen.svg" alt="element-ui">
</a>
<a href="https://github.com/lin-xin/vue-manage-system/blob/master/LICENSE">
<img src="https://img.shields.io/github/license/mashape/apistatus.svg" alt="license">
</a>
<a href="https://github.com/lin-xin/vue-manage-system/releases">
<img src="https://img.shields.io/github/release/lin-xin/vue-manage-system.svg" alt="GitHub release">
</a>
<a href="https://lin-xin.gitee.io/example/work/#/donate">
<img src="https://img.shields.io/badge/%24-donate-ff69b4.svg" alt="donate">
</a>
基于 Vue + Element UI 的后台管理系统解决方案。[线上地址](https://lin-xin.gitee.io/example/work/)
> React + Ant Design 的版本正在开发中,仓库地址:[react-manage-system](https://github.com/lin-xin/react-manage-system)
[English document](https://github.com/lin-xin/manage-system/blob/master/README_EN.md)
## 项目截图
### 登录
![Image text](https://github.com/lin-xin/manage-system/raw/master/screenshots/wms3.png)
### 默认皮肤
![Image text](https://github.com/lin-xin/manage-system/raw/master/screenshots/wms1.png)
### 浅绿色皮肤
![Image text](https://github.com/lin-xin/manage-system/raw/master/screenshots/wms2.png)
## 赞赏
请作者喝杯咖啡吧!(微信号:linxin_20)
![微信扫一扫](https://lin-xin.gitee.io/images/weixin.jpg)
## 特别鸣谢
- [实验楼](https://www.shiyanlou.com?source=vue-manage-system)
## 前言
该方案作为一套多功能的后台框架模板,适用于绝大部分的后台管理系统(Web Management System)开发。基于 vue.js,使用 vue-cli3 脚手架,引用 Element UI 组件库,方便开发快速简洁好看的组件。分离颜色样式,支持手动切换主题色,而且很方便使用自定义主题色。
## 功能
- [x] Element UI
- [x] 登录/注销
- [x] Dashboard
- [x] 表格
- [x] Tab 选项卡
- [x] 表单
- [x] 图表 :bar_chart:
- [x] 富文本编辑器
- [x] markdown 编辑器
- [x] 图片拖拽/裁剪上传
- [x] 支持切换主题色 :sparkles:
- [x] 列表拖拽排序
- [x] 权限测试
- [x] 404 / 403
- [x] 三级菜单
- [x] 自定义图标
- [x] 可拖拽弹窗
- [x] 国际化
## 安装步骤
```
git clone https://github.com/lin-xin/vue-manage-system.git // 把模板下载到本地
cd vue-manage-system // 进入模板目录
npm install // 安装项目依赖,等待安装完成之后,安装失败可用 cnpm 或 yarn
// 开启服务器,浏览器访问 http://localhost:8080
npm run serve
// 执行构建命令,生成的dist文件夹放在服务器下即可访问
npm run build
```
## 组件使用说明与演示
### vue-schart
vue.js 封装 sChart.js 的图表组件。访问地址:[vue-schart](https://github.com/linxin/vue-schart)
<p><a href="https://www.npmjs.com/package/vue-schart"><img src="https://img.shields.io/npm/dm/vue-schart.svg" alt="Downloads"></a></p>
```html
<template>
<div>
<schart class="wrapper" canvasId="myCanvas" :options="options"></schart>
</div>
</template>
<script>
import Schart from 'vue-schart'; // 导入Schart组件
export default {
data() {
return {
options: {
type: 'bar',
title: {
text: '最近一周各品类销售图'
},
labels: ['周一', '周二', '周三', '周四', '周五'],
datasets: [
{
label: '家电',
data: [234, 278, 270, 190, 230]
},
{
label: '百货',
data: [164, 178, 190, 135, 160]
},
{
label: '食品',
data: [144, 198, 150, 235, 120]
}
]
}
};
},
components: {
Schart
}
};
</script>
<style>
.wrapper {
width: 7rem;
height: 5rem;
}
</style>
```
## 其他注意事项
### 一、如果我不想用到上面的某些组件呢,那我怎么在模板中删除掉不影响到其他功能呢?
举个栗子,我不想用 Vue-Quill-Editor 这个组件,那我需要分四步走。
第一步:删除该组件的路由,在目录 src/router/index.js 中,找到引入改组件的路由,删除下面这段代码。
```JavaScript
{
// 富文本编辑器组件
path: '/editor',
component: resolve => require(['../components/page/VueEditor.vue'], resolve)
},
```
第二步:删除引入该组件的文件。在目录 src/components/page/ 删除 VueEditor.vue 文件。
第三步:删除该页面的入口。在目录 src/components/common/Sidebar.vue 中,找到该入口,删除下面这段代码。
```js
{
index: 'editor',
title: '富文本编辑器'
},
```
第四步:卸载该组件。执行以下命令:
npm un vue-quill-editor -S
完成。
### 二、如何切换主题色呢?
第一步:打开 src/main.js 文件,找到引入 element 样式的地方,换成浅绿色主题。
```javascript
import 'element-ui/lib/theme-default/index.css'; // 默认主题
// import './assets/css/theme-green/index.css'; // 浅绿色主题
```
第二步:打开 src/App.vue 文件,找到 style 标签引入样式的地方,切换成浅绿色主题。
```javascript
@import "./assets/css/main.css";
@import "./assets/css/color-dark.css"; /*深色主题*/
/*@import "./assets/css/theme-green/color-green.css"; !*浅绿色主题*!*/
```
第三步:打开 src/components/common/Sidebar.vue 文件,找到 el-menu 标签,把 background-color/text-color/active-text-color 属性去掉即可。
## License
[MIT](https://github.com/lin-xin/vue-manage-system/blob/master/LICENSE)

@ -1,196 +0,0 @@
# vue-manage-system
<a href="https://github.com/vuejs/vue">
<img src="https://img.shields.io/badge/vue-2.6.10-brightgreen.svg" alt="vue">
</a>
<a href="https://github.com/ElemeFE/element">
<img src="https://img.shields.io/badge/element--ui-2.8.2-brightgreen.svg" alt="element-ui">
</a>
<a href="https://github.com/lin-xin/vue-manage-system/blob/master/LICENSE">
<img src="https://img.shields.io/github/license/mashape/apistatus.svg" alt="license">
</a>
<a href="https://github.com/lin-xin/vue-manage-system/releases">
<img src="https://img.shields.io/github/release/lin-xin/vue-manage-system.svg" alt="GitHub release">
</a>
<a href="https://lin-xin.gitee.io/example/work/#/donate">
<img src="https://img.shields.io/badge/%24-donate-ff69b4.svg" alt="donate">
</a>
The web management system solution based on Vue2 and Element-UI。[live demo](https://lin-xin.gitee.io/example/work/)
## Donation
![WeChat](https://lin-xin.gitee.io/images/weixin.jpg)
## Preface
The scheme as a set of multi-function background frame templates, suitable for most of the WEB management system development. Convenient development fast simple good components based on Vue2 and Element-UI. Color separation of color style, support manual switch themes, and it is convenient to use a custom theme color.
## Function
- [x] Element-UI
- [x] Login/Logout
- [x] Dashboard
- [x] Table
- [x] Tabs
- [x] From
- [x] Chart :bar_chart:
- [x] Editor
- [x] Markdown
- [x] Upload pictures by clipping or dragging
- [x] Support manual switch themes :sparkles:
- [x] List drag sort
- [x] Permission
- [x] 404 / 403
- [x] Three level menu
- [x] Custom icon
## Installation steps
git clone https://github.com/lin-xin/vue-manage-system.git // Clone templates
cd vue-manage-system // Enter template directory
npm install // Installation dependency
## Local development
// Open server and access http://localhost:8080 in browser
npm run serve
## Constructing production
// Constructing project
npm run build
## Component description and presentation
### vue-schart
Vue.js wrapper for sChart.js. Github : [vue-schart](https://github.com/linxin/vue-schart)
```html
<template>
<div>
<schart class="wrapper" canvasId="myCanvas" :options="options"></schart>
</div>
</template>
<script>
import Schart from 'vue-schart'; // 导入Schart组件
export default {
data() {
return {
options: {
type: 'bar',
title: {
text: '最近一周各品类销售图'
},
labels: ['周一', '周二', '周三', '周四', '周五'],
datasets: [
{
label: '家电',
data: [234, 278, 270, 190, 230]
},
{
label: '百货',
data: [164, 178, 190, 135, 160]
},
{
label: '食品',
data: [144, 198, 150, 235, 120]
}
]
}
};
},
components: {
Schart
}
};
</script>
<style>
.wrapper {
width: 7rem;
height: 5rem;
}
</style>
```
### element-ui
A desktop component library based on vue.js2.0 . Github : [element](http://element.eleme.io/#/zh-CN/component/layout)
### Vue-Quill-Editor
Quill editor component for Vue2. Github : [vue-quill-editor](https://github.com/surmon-china/vue-quill-editor)
### mavonEditor
A markdown editor based on Vue that supports a variety of personalized features. Github: [mavonEditor](https://github.com/hinesboy/mavonEditor)
### vue-cropperjs
A Vue wrapper component for cropperjs. Github: [vue-cropperjs](https://github.com/Agontuk/vue-cropperjs)
## Notice
### 一、If I don't want to use some components, how can I delete it?
For example, I don't want to use the Vue-Quill-Editor component, I need to take four steps.
The first step to remove the component of the routing. Enter 'src/router/index.js' and delete the code below.
```JavaScript
{
path: '/editor',
component: resolve => require(['../components/page/VueEditor.vue'], resolve)
},
```
Second,delete the component files. Enter 'src/components/page/' and delete 'VueEditor.vue' file.
The third step is to delete the entry. Enter 'src/components/common/Sidebar.vue' and delete the code below.
```js
{
index: 'editor',
title: '富文本编辑器'
},
```
Finally, uninstall this component.
npm un vue-quill-editor -S
Complete!
### 二、How to switch themes?
The first step to enter 'src/main.js' and change into green theme.
```javascript
import 'element-ui/lib/theme-default/index.css'; // default theme
// import '../static/css/theme-green/index.css'; // green theme
```
The second step to enter 'src/App.vue' and change into green theme.
```javascript
@import "../static/css/main.css";
@import "../static/css/color-dark.css"; /*深色主题*/
/*@import "../static/css/theme-green/color-green.css"; !*浅绿色主题*!*/
```
Finally,enter 'src/components/common/Sidebar.vue' and find el-menu Tags,delete 'background-color/text-color/active-text-color'。
## Screenshot
### Default theme
![Image text](https://github.com/lin-xin/manage-system/raw/master/screenshots/wms1.png)
### Green theme
![Image text](https://github.com/lin-xin/manage-system/raw/master/screenshots/wms2.png)
## License
[MIT](https://github.com/lin-xin/vue-manage-system/blob/master/LICENSE)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

@ -22,9 +22,3 @@
}
}
</script>
<style>
@import "./assets/css/main.css";
/*深色主题*/
@import "./assets/css/theme-green/color-green.css";
</style>

@ -1,103 +1,99 @@
import Setting from '@/setting';
// let host = Setting.apiBaseURL
// let host = 'http://192.168.31.117'//宁本地
let host = 'http://192.168.31.152:8001'//刘本地
export default {
logins: `${host}/management/userInfo/login`, //登录 
logins: `management/userInfo/login`, //登录 
// 查询省份城市
queryCity: `${host}/enterprise/city/queryCity`,
queryProvince: `${host}/enterprise/province/queryProvince`,
queryCity: `enterprise/city/queryCity`,
queryProvince: `enterprise/province/queryProvince`,
// 个人中心
userinfoUpdate:`${host}/management/userInfo/update`,//个人中心信息修改
userinfo:`${host}/management/userInfo/getUserInfo`,//个人中心信息展示
getAccount:`${host}/management/userInfo/getAccount`,//账号判重
userinfoUpdate:`management/userInfo/update`,//个人中心信息修改
userinfo:`management/userInfo/getUserInfo`,//个人中心信息展示
getAccount:`management/userInfo/getAccount`,//账号判重
// 组织架构
addStaffPro: `${host}/management/staffProfessionalArchitecture/addStaffProfessionalArchitecture`,
deleteStaffPro: `${host}/management/staffProfessionalArchitecture/deleteStaffProfessionalArchitecture`,
queryStaffPAN: `${host}/management/staffProfessionalArchitecture/queryStaffPAN`,
queryStaffPro: `${host}/management/staffProfessionalArchitecture/queryStaffProfessionalArchitecture`,
updateStaffPro: `${host}/management/staffProfessionalArchitecture/updateStaffProfessionalArchitecture`,
getWorkNumber: `${host}/management/staff/getWorkNumber`,
addStaffPro: `management/staffProfessionalArchitecture/addStaffProfessionalArchitecture`,
deleteStaffPro: `management/staffProfessionalArchitecture/deleteStaffProfessionalArchitecture`,
queryStaffPAN: `management/staffProfessionalArchitecture/queryStaffPAN`,
queryStaffPro: `management/staffProfessionalArchitecture/queryStaffProfessionalArchitecture`,
updateStaffPro: `management/staffProfessionalArchitecture/updateStaffProfessionalArchitecture`,
getWorkNumber: `management/staff/getWorkNumber`,
// 年级
addStaffGrade: `${host}/management/staffGrade/addStaffGrade`,
deleteStaffGrade: `${host}/management/staffGrade/deleteStaffGrade`,
queryStaffGrade: `${host}/management/staffGrade/queryStaffGrade`,
queryStaffName: `${host}/management/staffGrade/queryStaffName`,
updateStaffGrade: `${host}/management/staffGrade/updateStaffGrade`,
addStaffGrade: `management/staffGrade/addStaffGrade`,
deleteStaffGrade: `management/staffGrade/deleteStaffGrade`,
queryStaffGrade: `management/staffGrade/queryStaffGrade`,
queryStaffName: `management/staffGrade/queryStaffName`,
updateStaffGrade: `management/staffGrade/updateStaffGrade`,
// 员工管理
addStaff: `${host}/management/staff/addStaff`,
deleteStaffs: `${host}/management/staff/deleteStaffs`,
getStaff: `${host}/management/staff/getStaff`,
queryStaff: `${host}/management/staff/enterpriseList`,
updateStaff: `${host}/management/staff/updateStaff`,
exportFailureStaff: `${host}/management/staff/exportFailure`,
uploadFileStaff: `${host}/management/staff/uploadFile`,
addStaff: `management/staff/addStaff`,
deleteStaffs: `management/staff/deleteStaffs`,
getStaff: `management/staff/getStaff`,
queryStaff: `management/staff/enterpriseList`,
updateStaff: `management/staff/updateStaff`,
exportFailureStaff: `management/staff/exportFailure`,
uploadFileStaff: `management/staff/uploadFile`,
downloadStaffTemp: `http://liuwanr.oss-cn-shenzhen.aliyuncs.com/xlsx/20201102/1604658763812.xlsx`,
// 角色管理
getRole: `${host}/management/role/get`,
queryRoles: `${host}/management/role/list`,
removeRole: `${host}/management/role/batchRemove`,
saveOrUpdate: `${host}/management/role/saveOrUpdate`,
getRole: `management/role/get`,
queryRoles: `management/role/list`,
removeRole: `management/role/batchRemove`,
saveOrUpdate: `management/role/saveOrUpdate`,
// 权限菜单管理
doAssign: `${host}/management/permission/doAssign`,
queryPermissionMenu: `${host}/management/permission/queryPermissionMenu`,
toAssign: `${host}/management/permission/toAssign`,
doAssign: `management/permission/doAssign`,
queryPermissionMenu: `management/permission/queryPermissionMenu`,
toAssign: `management/permission/toAssign`,
// 学校管理
addClient: `${host}/enterprise/client/addClient`,
deleteClient: `${host}/enterprise/client/deleteClient`,
queryClient: `${host}/enterprise/client/list`,
updateClient: `${host}/enterprise/client/updateClient`,
getClient: `${host}/enterprise/client/getClient`,
getClientName: `${host}/enterprise/client/getClientName`,
addClient: `enterprise/client/addClient`,
deleteClient: `enterprise/client/deleteClient`,
queryClient: `enterprise/client/list`,
updateClient: `enterprise/client/updateClient`,
getClient: `enterprise/client/getClient`,
getClientName: `enterprise/client/getClientName`,
// 用户管理
addUser: `${host}/enterprise/user/addUser`,
deleteUser: `${host}/enterprise/user/deleteUser`,
queryUser: `${host}/enterprise/user/list`,
updateUser: `${host}/enterprise/user/updateUser`,
uploadFileUser: `${host}/enterprise/user/uploadFile`,
exportFailureUser: `${host}/enterprise/user/exportFailure`,
addUser: `enterprise/user/addUser`,
deleteUser: `enterprise/user/deleteUser`,
queryUser: `enterprise/user/list`,
updateUser: `enterprise/user/updateUser`,
uploadFileUser: `enterprise/user/uploadFile`,
exportFailureUser: `enterprise/user/exportFailure`,
downloadUserTemp: 'http://liuwanr.oss-cn-shenzhen.aliyuncs.com/xlsx/20201102/1604658619702.xlsx',
fileupload: `${host}/oss/manage/fileupload`,
fileupload: `oss/manage/fileupload`,
fileDeletion: `${host}/oss/manage/fileDeletion`, //批量删除文件
fileDeletion: `oss/manage/fileDeletion`, //批量删除文件
// 题库分类
AddOneLevel:`${host}/enterprise/questionBank/AddOneLevel`,
AddSecondLevel:`${host}/enterprise/questionBank/AddSecondLevel`,
deleteById:`${host}/enterprise/questionBank/deleteById`,
getTypeByOneLever:`${host}/enterprise/questionBank/getTypeByOneLever`,
listByPage:`${host}/enterprise/questionBank/listByPage`,
modifyLevel:`${host}/enterprise/questionBank/modifyLevel`,
AddOneLevel:`enterprise/questionBank/AddOneLevel`,
AddSecondLevel:`enterprise/questionBank/AddSecondLevel`,
deleteById:`enterprise/questionBank/deleteById`,
getTypeByOneLever:`enterprise/questionBank/getTypeByOneLever`,
listByPage:`enterprise/questionBank/listByPage`,
modifyLevel:`enterprise/questionBank/modifyLevel`,
// 题型列表
typesList:`${host}/enterprise/questionTypes/typesList`,
typesList:`enterprise/questionTypes/typesList`,
// 题库管理
addQuestions:`${host}/enterprise/questions/addQuestions`,
deleteByOne:`${host}/enterprise/questions/deleteByOne`,
findById:`${host}/enterprise/questions/findById`,
pageByCondition:`${host}/enterprise/questions/pageByCondition`,
updateQuestions:`${host}/enterprise/questions/update`,
addQuestions:`enterprise/questions/addQuestions`,
deleteByOne:`enterprise/questions/deleteByOne`,
findById:`enterprise/questions/findById`,
pageByCondition:`enterprise/questions/pageByCondition`,
updateQuestions:`enterprise/questions/update`,
getExcel:`enterprise/questions/getExcel`,
impExcel:`enterprise/questions/impExcel`,
// 共享相关
cancelByMySharing:`${host}/enterprise/questionSharing/cancelByMySharing`,
delByMySharing:`${host}/enterprise/questionSharing/delByMySharing`,
deleteByMeSubject:`${host}/enterprise/questionSharing/deleteByMeSubject`,
detail:`${host}/enterprise/questionSharing/detail`,
getMeSharingInfo:`${host}/enterprise/questionSharing/getMeSharingInfo`,
pageByConditionSharing:`${host}/enterprise/questionSharing/pageByConditionSharing`,
saveSharing:`${host}/enterprise/questionSharing/save`,
getMeSharingInfo:`${host}/enterprise/questionSharing/getMeSharingInfo`,
batchSave:`enterprise/questionSharing/batchSave`,
cancelByMySharing:`enterprise/questionSharing/cancelByMySharing`,
delByMySharing:`enterprise/questionSharing/delByMySharing`,
deleteByMeSubject:`enterprise/questionSharing/deleteByMeSubject`,
detail:`enterprise/questionSharing/detail`,
getMeSharingInfo:`enterprise/questionSharing/getMeSharingInfo`,
pageByConditionSharing:`enterprise/questionSharing/pageByConditionSharing`,
saveSharing:`enterprise/questionSharing/save`,
}

@ -1,28 +0,0 @@
.header{
background-color: #242f42;
}
.login-wrap{
background: #324157;
}
.plugins-tips{
background: #eef1f6;
}
.plugins-tips a{
color: #20a0ff;
}
.el-upload--text em {
color: #20a0ff;
}
.pure-button{
background: #20a0ff;
}
.tags-li.active {
border: 1px solid #cb221c;
background-color: #cb221c;
}
.message-title{
color: #20a0ff;
}
.collapse-btn:hover{
background: rgb(40,52,70);
}

@ -1,4 +0,0 @@
[class*=" icon-"], [class^=icon-] {
font-family: iconfont!important;
}

@ -1,346 +0,0 @@
* {
margin: 0;
padding: 0;
}
html,
body,
#app,
.wrapper {
width: 100%;
height: 100%;
}
body {
font-family: 'PingFang SC', "Helvetica Neue", Helvetica, "microsoft yahei", arial, STHeiTi, sans-serif;
font-size: 14px;
background: #f0f0f0;
}
a {
text-decoration: none
}
i{
font-style: normal;
}
li {
list-style-type:none;
}
.content-box {
-webkit-transition: left .3s ease-in-out;
transition: left .3s ease-in-out;
}
.content {
width: auto;
height: 100%;
padding: 20px;
box-sizing: border-box;
}
.content-collapse {
left: 65px;
}
.container {
padding: 30px;
background: #fff;
border: 1px solid #ddd;
border-radius: 5px;
}
.crumbs {
margin: 10px 0;
}
.el-table th {
background-color: #f5f7fa !important;
}
.pagination {
margin: 20px 0;
text-align: right;
}
.plugins-tips {
padding: 20px 10px;
margin-bottom: 20px;
}
.el-button+.el-tooltip {
margin-left: 10px;
}
.el-table tr:hover {
background: #f6faff;
}
.orderTable td .el-input{
width: 60%;
}
.orderTable .el-select>.el-input{
display: inline-block;
}
.mgb20 {
margin-bottom: 20px;
}
.move-enter-active,
.move-leave-active {
transition: opacity .5s;
}
.move-enter,
.move-leave {
opacity: 0;
}
/*BaseForm*/
.form-box {
width: 600px;
}
.form-box .line {
text-align: center;
}
.el-time-panel__content::after,
.el-time-panel__content::before {
margin-top: -7px;
}
.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default) {
padding-bottom: 0;
}
/*Upload*/
.pure-button {
width: 150px;
height: 40px;
line-height: 40px;
text-align: center;
color: #fff;
border-radius: 3px;
}
.g-core-image-corp-container .info-aside {
height: 45px;
}
.avatar-uploader .el-upload--text {
background-color: #fff;
border: 1px dashed #d9d9d9;
border-radius: 6px;
box-sizing: border-box;
width: 360px;
height: 180px;
text-align: center;
cursor: pointer;
position: relative;
overflow: hidden;
}
.avatar-uploader .el-upload--text .el-icon-upload {
font-size: 67px;
color: #97a8be;
margin: 40px 0 16px;
line-height: 50px;
}
.avatar-uploader .el-upload--text {
color: #97a8be;
font-size: 14px;
text-align: center;
}
.avatar-uploader .el-upload--text em {
font-style: normal;
}
/* .link_upload .el-upload-list{
width: 30%;
} */
/*VueEditor*/
.ql-container {
min-height: 400px;
}
.ql-snow .ql-tooltip {
transform: translateX(117.5px) translateY(10px) !important;
}
.editor-btn {
margin-top: 20px;
}
/*markdown*/
.v-note-wrapper .v-note-panel {
min-height: 500px;
}
.ms-login .el-tabs__nav-wrap::after{
background-color: #fff;
opacity: 0;
}
.ms-login .el-tabs__item{
padding: 0 90px;
color: #999;
}
.ms-login .el-tabs__item:hover{
color: #000;
}
.ms-login .el-tabs__item.is-active{
color: #333;
font-weight: bold;
}
.ms-login .el-tabs__active-bar{
background-color: #000;
border-radius:2px;
}
.ms-login .el-tabs__nav-scroll{
display: flex;
justify-content: center;
}
.ms-login .el-input__inner{
height: 80px;
line-height: 80px;
border:1px solid rgba(220,220,220,1);
border-radius:2px;
}
.el-row {
margin-bottom: 20px;
}
.mgb20 {
margin-bottom: 20px;
}
#app .el-table thead{
color: #fff;
}
#app .el-table th{
background-color: #cb221c!important;
font-size: 16px;
font-weight: normal;
}
#app .el-select{
display: unset;
}
/*flex*/
.flex-center{
display: flex;
align-items: center;
}
.flex-between{
display: flex;
align-items: center;
justify-content: space-between;
}
.flex-around{
display: flex;
align-items: center;
justify-content: space-around;
}
.flex-start-around{
display: flex;
align-items: flex-start;
justify-content: center;
}
.flex-end-around{
display: flex;
align-items: flex-end;
justify-content: center;
}
.flex-column{
display: flex;
align-items: center;
flex-direction: column;
}
.flex-start{
display: flex;
align-items: flex-start;
}
.flex-end{
display: flex;
align-items: flex-end;
}
.hr_tag{
background-color: #cb221c;
width: 3px;
height: 15px;
margin-right: 5px;
}
.user_header{
padding: 20px 0;
border-bottom: 1px dashed #eee;
}
.addhr_tag{
background-color: #666;
width: 6px;
height: 17px;
margin-right: 5px;
}
.per_title span{
font-size: 16px;
font-weight: bold;
}
.per_back{
margin-left: 5px;
}
.per_school{
margin-left: 30px;
}
.per_title:hover{
cursor:pointer;
}
/* 溢出省略号 */
.ellipsis{
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.userRadio .el-radio{
margin-right: 10px!important;
}
.userRadio .el-radio__input{
display: none!important;
}
.tabs{
display: flex;
align-items: center;
padding: 20px 1.5% 20px;
z-index: 999;
background-color: #fff;
}
.tabs .item{
padding: 12px 20px;
margin-right: 10px;
color:#606266;
line-height: 1;
border-radius: 4px;
background-color: #fff;
border: 1px solid #dcdfe6;
cursor: pointer;
}
.tabs .active{
color: #fff;
background-color: #cb221c;
border-color: #cb221c;
}

@ -1,29 +0,0 @@
.header{
background-color: #fff;
}
.login-wrap{
background: rgba(56, 157, 170, 0.82);;
}
.plugins-tips{
background: #f2f2f2;
}
.plugins-tips a{
color: #cb221c;
}
.el-upload--text em {
color: #cb221c;
}
.pure-button{
background: #cb221c;
}
.pagination > .active > a, .pagination > .active > a:hover, .pagination > .active > a:focus, .pagination > .active > span, .pagination > .active > span:hover, .pagination > .active > span:focus {
background-color: #cb221c !important;
border-color: #cb221c !important;
}
.tags-li.active {
border: 1px solid #cb221c;
background-color: #cb221c;
}
.collapse-btn:hover{
background: #cb221c;
}

File diff suppressed because one or more lines are too long

@ -1,71 +0,0 @@
@font-face {font-family: "iconfont";
src: url('iconfont.eot?t=1589437921018'); /* IE9 */
src: url('iconfont.eot?t=1589437921018#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAdgAAsAAAAADwwAAAcTAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCESgqOeIt2ATYCJAM0CxwABCAFhG0HgTMbpQxRlHBSFNlX2JThXqSJ4cz0aLyxzNkVgYOP2N97wQhUeQbPDZA1QByDeHha+9+5M7PrD1FpdI8mCSqJLulDJPFDxCQTvUQS6Qtka3ukU0/kuK8wfBBwMr1kmeTIb8hUohVh6lTeCHDCrRPPf5v6f+sQfS+QqgmpiZLNw+ZI6zMXZGL3nXY47elJFnjALaE4zjzyjJN773yuzM/7H4oZ9NV+v/q1g1ddvP1QmE5JlPRM7uAv5klMk0vWTBWTLpoJEUIja6hWSkNhOklN/ds4n0BvhyLMuZ6hKdArLC1Q4a4iG0Gfi1JaHEMbXtfsW8S8SpsepzuAJ+HLx28hoSepMmvby3e6LdC2EN2eV0ykW36MR/MlQFiJjGNAEej7WvtLgB6aM6evXtwH1glnTloW1snRYnBhky+LxyuL9glaGNmaDbRsJYR1tl+seImrgUGtEtLc//GMeo1WR9QYfUSrp7nohWgXDRrJBqpBcoAqkGagAGkBSiADQBlkEKiAbAI/N/mCYHoWi1HDEgWoBbGjlg7M/OpbgEMgnUf0fxab8kjK0tvq8cZ6/dpKwk4bNsXFx4bHR4RHcty4LVnR4xp/2TFxDN42tgefhUpEMeeqppXCU50JyT/gkVCD+EiEgl56LOkMN+6cAfyKs3dvomHU7fvnq96Uc/duIXMMqWmhNRoax1m8jNWfPorp2jlqumvHrolfe/2TcuIPCt3K589dhUNiT5OSEh4KoM9Jp1vK2GMnFjDdyaeFMrd06ki1gn9CmEz3OErpebmp+GzyAN+lMLw6dwkKh6Ve5dOnzp4W0+Y25TTfhHB10isXpxIB5GHDKcggnof+NCpCD+okAFyTPNGuRVgahmhLjZo1rnqnMlpD0ORJSluuY6jT+gPWHtaIeDKOaoradNDPruOQzulPGcBtz0C2YdbLrSFPIMGTrcNRDGC3YnJOm1JLceYK2sCWY5lqxICXIEU0gki2nkPFUteBwoqLMyTdKE7ZlOzE3yHfdSyOU2shl8RoxPJlx1bQ6C0Li3DLg+Sdi+c5evEkhtF3rBdfXpe0IiNcfW27+x6u5U4vs8zZZdu1R7Gblyc6AV9OB4Xp65HRDqcvw0Pi1DGbddntOKzYgkbhXJq+Y4bRVqszl746KdRPFV5FxSUb6XmKomd1yCb0nJbpz+aOIZskx0phXx8sHfNKyRjPsM8LGU/xJ9Qrv2JugdVBkBg/ZpUIDvpN0jfHD550XPKNDgkKEZ46l4dwq0sOxIecJlX2pxxA8GTwkCGMFqxVFf5PRZplCky9uCIQL/s/RFabTYZNkhtkQXFR28vKXwKUP5rZbFg+s3VAFTu5dBZG4G07t5tHuM2cFirh2BisrHKYoE8lzO1h/LkwjSD+VZF0qs1hQVK+d0xHOLN80q4B/P9utxQDmGt4DaEKE6Lc5lnI6VxDf/35owQHCAuKw95VG6l1bvXPY3J1slpepPBXdCx8EM+ubbd2tV48b2UtWLtYb89PZhvg2jsq5+zkBdIVVTFHfhEwNv0CxNiT02LKVxGSus1dt9VsXDZulogOJB1AkGQVg4e833uzaWatx7bPrLKyhBeBqlC3xGqNoe3MVQHmDmBs4jm+xFjW/sjcAgOiPOFawwe3bUeTa20vGNZgbV6tCtL/qEL/fmiFLjqCCDpZdQpkdKgx6tSuzlCdqnrMFsLMhWn9sKH4ezmjmvpp9Selw9oCS0Vtcbox4f967yYpc1lNwUzPAUT3N0R32yz0bof5Wblw2jzkuw4VkWFptzoKckHRUwszvHJS8IgkAfys2IvKr/LtZBa1LzvfHBmFD6/V9enLD7LLJD2tz7n3E8BkFcwVyA/DL8P0fCpXAdLntBfy9tQCpuUP2QBAWkwyYccYGYFWWc/HS8Of6pVNf1r8p8n48bn+wPLzm5gyWoneAh3ivzATiiRKljoz8hQTN3S0itSojpnbgvjFod7uBf2Rtsa7dej63gKVRdenkDS2Q9baZyzWY1AZnIBa6yT0juo9eLCWhhOlwxFrCYRVjkKywhfIVrlrLNa3UNngB9RWBQe9mxF1zMGBUFCnRoyUWLBpCStm1SU5sRRFFSeI7HUYtawUeswQzaNk4PKSsmJBL3ERbY4dPD65glIJS5rqxD3kYsThULFbU23ETEuslLobSkuluh1LzKoTkLM0hBH1A1pgJku2CjOVizQ+hUrPP4GQeTkYaS0tarYzCI2HMnusXImyHsZe3dWrxb1U9/CRVaBMggS79TUqJ6yHSSAcdq4Kc9evZUOYUSWsI7LdGpQy7Ul99ZL1qfObT4CedX+zSJGjRBV1NNFGF30MMcYsVugeKLLqDXiNLuQnSQjRvRwtrRzlsSoBxeiSl1SvLVQoF1FcZj0Jqi46odWosl43b1H9Lp2FOAgl7OKibs6cgOICAA==') format('woff2'),
url('iconfont.woff?t=1589437921018') format('woff'),
url('iconfont.ttf?t=1589437921018') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
url('iconfont.svg?t=1589437921018#iconfont') format('svg'); /* iOS 4.1- */
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-yigouxuan:before {
content: "\e63d";
}
.icon-weigouxuan:before {
content: "\e63e";
}
.icon-weigouxuan1:before {
content: "\e64a";
}
.icon-yigouxuan1:before {
content: "\e64b";
}
.icon-shixiangyoujiantou-:before {
content: "\e626";
}
.icon-shixiangxiajiantou-:before {
content: "\e625";
}
.icon-jiahao:before {
content: "\e72d";
}
.icon-up:before {
content: "\e769";
}
.icon-down:before {
content: "\e76b";
}
.icon-delete:before {
content: "\e6e9";
}
.icon-qq:before {
content: "\e614";
font-size: 60px;
color: #22aaf8;
margin-left: 32px;
}
.icon-weixin:before {
content: "\e68a";
font-size: 60px;
color: #10b747;
margin-right: 32px;
}

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1604308585473" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4360" width="12" height="12" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M323.608576 658.725888 366.068736 701.303808 468.333568 664.004608 360.828928 556.619776ZM513.3056 63.31904c-248.041472 0-449.069056 201.05216-449.069056 449.072128 0 247.994368 201.028608 449.069056 449.069056 449.069056 247.994368 0 449.07008-201.074688 449.07008-449.069056C962.37568 264.3712 761.299968 63.31904 513.3056 63.31904zM490.842112 686.511104l-0.239616-0.279552c-1.241088 1.040384-2.60096 1.999872-4.200448 2.56l-206.849024 75.480064c-5.398528 1.918976-11.474944 0.638976-15.471616-3.519488-4.07552-3.997696-5.397504-10.075136-3.398656-15.429632l75.399168-206.773248c0.562176-1.557504 1.440768-2.878464 2.51904-4.158464l-0.161792-0.198656L524.184576 348.490752c20.150272 20.108288 36.739072 36.658176 36.739072 36.658176l-145.522688 145.28512c-2.358272 2.279424-3.398656 5.276672-3.398656 8.31488 0 2.998272 1.040384 5.998592 3.398656 8.316928 2.280448 2.23744 5.27872 3.477504 8.395776 3.477504 3.117056 0 6.07744-1.240064 8.353792-3.477504L577.596416 401.861632l45.693952 45.617152L478.487552 592.12288c-4.557824 4.595712-4.557824 12.071936 0 16.668672 2.238464 2.200576 5.27872 3.438592 8.3968 3.438592 3.15904 0 6.115328-1.238016 8.354816-3.398656 0-0.039936 144.763904-144.643072 144.763904-144.643072s21.269504 21.269504 36.54144 36.620288L490.842112 686.511104zM751.264768 426.20928l-57.969664 57.929728c-29.78304-29.744128-98.985984-98.99008-152.357888-152.260608l58.047488-58.008576c20.789248-20.769792 54.771712-20.809728 75.522048 0l76.75904 76.8C772.054016 371.438592 772.015104 405.34016 751.264768 426.20928z" p-id="4361" fill="#9076ff"></path></svg>

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

@ -0,0 +1 @@
<svg t="1604370117041" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9029" width="16" height="16"><path d="M511.979 30.125c-266.13 0-481.871 215.741-481.871 481.871s215.741 481.871 481.871 481.871S993.85 778.126 993.85 511.996 778.109 30.125 511.979 30.125zM459.644 693.015c-15.876 18.135-22.818 22.486-44.972 30.657-34.111 12.787-96.687 36.27-137.374 51.515-7.706 3.056-36.735 1.495-24.578-27.036 13.784-39.757 34.045-98.414 45.636-131.894 8.436-23.615 11.758-29.76 28.73-45.603l175.271-175.271 124.055 124.088C626.413 519.471 508.469 642.264 459.644 693.015zM653.084 492.867 528.996 368.779l26.605-26.605 124.088 124.121L653.084 492.867zM759.469 386.482l-53.176 53.209L582.205 315.569l53.209-53.176c19.596-19.596 51.316-19.596 70.912 0l53.209 53.176C779.065 335.166 779.065 366.919 759.469 386.482z" p-id="9030" fill="#cb221c"></path></svg>

After

Width:  |  Height:  |  Size: 875 B

@ -1,8 +1,8 @@
<template>
<div class="header flex-between">
<div class="header flex j-between">
<div v-if="showBack" class="goBack" v-throttle @click="back"><i class="el-icon-arrow-left"></i>返回</div>
<div v-else class="logo">
<img src="../../assets/img/logo.png">
<img src="../../assets/img/logo-fill.png">
</div>
<div class="header-right">
<div class="header-user-con">

@ -49,6 +49,15 @@ const util = {
}
return fmt;
},
// 移除数组中指定值
removeByValue(arr, val) {
for(var i=0; i<arr.length; i++) {
if(arr[i] == val) {
arr.splice(i, 1);
break;
}
}
}
};
export default util;

@ -2,13 +2,10 @@ import Vue from 'vue';
import App from '@/App.vue';
import router from '@/router';
import ElementUI from 'element-ui';
import '@/styles/index.scss'
import mixinApp from '@/mixins/app';
import VueI18n from 'vue-i18n';
import { messages } from '@/i18n';
// import 'element-ui/lib/theme-chalk/index.css'; // 默认主题
import './assets/css/theme-green/index.css'; // 浅绿色主题
import './assets/css/icon.css';
import './assets/icon/iconfont.css';
import 'babel-polyfill';
import '@/libs/resize';
import api from '@/api';

@ -1,42 +1,52 @@
<template>
<div class="login-wrap">
<div class="wrap">
<div class="header">
<div class="logo">
<img src="../../../assets/img/logo.png">
<div class="inner">
<img class="logo" src="../../../assets/img/logo.png" alt="">
</div>
</div>
<div class="ms-login">
<div class="ms-title">
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="账号登录" name="first">
<el-form :model="param" :rules="rules" ref="login" label-width="0px" style="margin-top: 40px">
<div class="main">
<div class="left">
<div class="text">
<p>欢迎进入</p>
<p>电子竞技<br>数字化考试系统<br><span>超竞企业端</span></p>
</div>
</div>
<div class="right">
<h2>密码登录</h2>
<el-form :model="loginForm" :rules="loginRules" ref="login" label-width="0px">
<el-form-item prop="username">
<el-input v-model="param.username" placeholder="username"></el-input>
<p class="label">用户名</p>
<el-input v-model="loginForm.username" placeholder="请输入账号/手机号" @keyup.enter.native="submitForm()"></el-input>
</el-form-item>
<el-form-item prop="password">
<p class="label">密码</p>
<el-input
type="password"
placeholder="password"
v-model="param.password"
placeholder="请输入密码"
v-model="loginForm.password"
@keyup.enter.native="submitForm()"
>
</el-input>
</el-form-item>
<el-button type="text" class="forget">忘记密码?</el-button>
<div class="login-btn">
<el-button type="primary" @click="submitForm()">马上登录</el-button>
<el-button class="submit" type="primary" @click="submitForm">登录</el-button>
<!-- <div class="links flex j-between">
<el-button type="text" class="ques" @click="toReg">前往注册</el-button>
<el-button type="text" class="forget">忘记密码</el-button>
</div> -->
<!-- <p class="login-tips">其他登陆方式</p>
<div class="thirdParty">
<div class="item">
<img src="../../../assets/img/icon_wechat.png" alt="">
微信扫码登录
</div>
<div class="item">
<img src="../../../assets/img/icon_qq.png" alt="">
QQ一键登录
</div>
<!-- <p class="login-tips">使用第三方账号直接登录</p>
<p class="thirdParty">
<i class="icon-weixin"></i>
<i class="icon-qq"></i>
</p> -->
</div> -->
</el-form>
</el-tab-pane>
<el-tab-pane label="扫描登录" name="second">扫描登录</el-tab-pane>
</el-tabs>
</div>
</div>
</div>
@ -47,29 +57,39 @@ import { mapActions } from 'vuex';
export default {
data: function() {
return {
param: {
loginForm: {
username: 'admin',
password: 'admin',
// username: '12312',
// password: 'huoran123',
},
rules: {
loginRules: {
username: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
password: [{ required: true, message: '请输入密码', trigger: 'blur' }],
},
activeName: 'first'
roleDialog: false,
userId: '',
schoolId: '',
schoolName: '',
roleId: '',
roleList: []
};
},
mounted(){
},
methods: {
...mapActions('user', [
'login'
]),
updateInfo(data){
this.loginForm.username = data.username
this.loginForm.password = data.password
},
submitForm() {
this.$refs.login.validate(valid => {
if (valid) {
let data = {
username: this.param.username,
password: this.param.password
username: this.loginForm.username,
password: this.loginForm.password
}
this.login(data).then(() => {
this.$router.replace('/index')
@ -79,110 +99,156 @@ export default {
})
}
});
},
handleClick(tab, event) {
console.log(tab, event);
}
},
};
</script>
<style lang="scss" scoped>
.login-wrap {
<style scoped lang="scss">
.header{
display: flex;
justify-content: center;
align-items: center;
background-color: #333;
.inner{
display: inline-flex;
justify-content: space-between;
align-items: center;
width: 65%;
padding: 5px 0;
font-size: 16px;
color: #fff;
.logo{
width: 200px;
}
.reg{
cursor: pointer;
}
}
}
.wrap {
position: relative;
width: 100%;
height: 100%;
background-image: url(../../../assets/img/login-bg.png);
background-size: 100%;
}
.ms-title {
width: 548px;
background: url(../../../assets/img/login_bg.png) 0 0/100% 100% no-repeat;
overflow: hidden;
.mask{
z-index: -1;
position: absolute;
left: 50%;
top: 50px;
transform: translate(-50%,0);
top: 0;
left: 0;
bottom: 0;
right: 0;
background-color: rgba(0,0,0,1);
}
.ms-login {
position: absolute;
left: 50%;
top: 42px;
transform: translate(-50%,0);
width: 1200px;
height: 82%;
/* height: 884px; */
margin-top: 60px;
background-image: url(../../../assets/img/login-input.png);
box-shadow:0px 0px 79px 0px rgba(11,15,65,0.36);
overflow: hidden;
.main{
height: calc(100% - 60px);
display: flex;
justify-content: center;
align-items: center;
background-color: rgba(0,0,0,.4);
}
.login-btn {
text-align: center;
.left{
margin-top: -200px;
margin-right: 10%;
img{
width: 447px;;
margin-bottom: 30px;
}
.text{
font-size: 52px;
color: #fff;
p:first-child{
margin-bottom: 30px;
}
.login-btn button {
span{
font-size: 36px;
}
}
}
.right{
width: 580px;
padding: 40px 70px 50px;
background-color: #fff;
box-sizing: border-box;
box-shadow: 0 1px 20px rgba(0,0,0,0.16);
h2{
padding-bottom: 10px;
font-size: 24px;
font-weight: 400;
color: #303d4c;
text-align: center;
border-bottom: 1px solid #E5E5E5;
}
.el-form{
margin-top: 30px;
.label{
margin-bottom: 10px;
color: #105CB2;
}
/deep/.el-input__inner{
height: 46px;
padding: 0 23px;
line-height: 46px;
border: 1px solid #AFB5BB;
border-radius: 23px !important;
}
/deep/.el-form-item__error{
top: 105%;
left: auto;
right: 0;
color: #FFA94E;
}
.submit{
width: 100%;
height: 88px;
margin-bottom: 50px;
font-weight: bold;
background:linear-gradient(90deg,rgba(94,206,253,1),rgba(91,67,231,1));
box-shadow:0px 7px 27px 0px rgba(50,129,255,0.51);
height: 48px;
margin-top: 60px;
line-height: 48px;
padding: 0;
font-size: 20px;
background-color: #cb221c;
border-radius: 23px;
border: 0;
border-radius:10px;
}
.login-tips {
text-align: center;
color: #999;
font-weight:bold;
.links{
margin: 20px 0 20px;
}
.ques{
color: #cb221c;
font-size: 14px;
}
.forget{
width: 100%;
margin-bottom: 28px;
text-align: right;
color: #999;
font-weight:bold;
color: #ffa94e;
font-size: 14px;
}
.login-tips{
margin-bottom: 20px;
font-size: 16px;
color: #105CB2;
text-align: center;
}
.thirdParty{
width: 100%;
.item{
display: flex;
justify-content: center;
margin-top: 33px;
}
/* 头部 */
.header{
width: 100%;
height: 60px;
position: absolute;
top: 0;
left: 0;
background-color: #fff;
display: flex;
justify-content: space-between;
align-items: center;
font-size: 18px;
}
.logo{
width: 171px;
height: 40px;
margin-left: 20px;
}
margin-bottom: 20px;
padding: 10px 0;
color: #AFB5BB;
font-size: 16px;
background-color: #eff0f1;
border-radius: 36px;
cursor: pointer;
img{
width: 100%;
height: 100%;
width: 40px;
margin-right: 10px;
}
}
.header_title{
width: 33%;
display: flex;
justify-content: space-between;
align-items: center;
}
.header_title a{
cursor: pointer;
}
.header_title a:hover{
color: blueviolet;
}
.nul{
width:80px;
margin-right: 30px;
}
</style>

@ -2,8 +2,8 @@
<div>
<el-row :gutter="20">
<el-col :span="24">
<el-card shadow="hover" class="mgb20">
<div class="flex-between">
<el-card shadow="hover" class="m-b-20">
<div class="flex j-between">
<div class="per_title" v-throttle @click="goback()">
<i class="el-icon-arrow-left"></i>
<span class="per_back">返回</span>
@ -15,7 +15,7 @@
<el-card shadow="hover">
<div>
<div class="flex-center mgb20">
<div class="flex a-center m-b-20">
<p class="addhr_tag"></p>
<span>基本信息</span>
</div>

@ -2,9 +2,9 @@
<div>
<el-row :gutter="20">
<el-col :span="24">
<el-card shadow="hover" class="mgb20">
<el-card shadow="hover" class="m-b-20">
<div>
<div class="flex-center mgb20">
<div class="flex a-center m-b-20">
<p class="hr_tag"></p>
<span>筛选</span>
</div>
@ -44,8 +44,8 @@
<el-col :span="24">
<el-card shadow="hover">
<div class="flex-between mgb20">
<div class="flex-center">
<div class="flex j-between m-b-20">
<div class="flex a-center">
<p class="hr_tag"></p>
<span>客户列表</span>
</div>
@ -210,7 +210,7 @@ export default {
isDisable: val
}
this.$post(this.api.updateClient,data).then((res) => {
val == 1 ? this.$message.success('禁用成功') : this.$message.success('启用成功')
}).catch((res) => {
})
},
@ -235,10 +235,6 @@ export default {
this.$message.error('请先选择数据');
}
},
onSearch(){
this.pageNo = 1
this.getData()
},
handleCurrentChange(val) {
this.pageNo = val;
this.getData();

@ -1,13 +1,13 @@
<template>
<div>
<el-card shadow="hover" class="mgb20">
<el-card shadow="hover" class="m-b-20">
<div>
<div class="flex-center mgb20">
<div class="flex a-center m-b-20">
<p class="hr_tag"></p>
<span>筛选</span>
</div>
<div>
<div class="flex-between no-mb">
<div class="flex j-between no-mb">
<div>
<el-form label-width="80px" inline>
<el-form-item class="no-mb" label="创建人">
@ -33,8 +33,8 @@
</el-card>
<el-card shadow="hover">
<div class="flex-between mgb20">
<div class="flex-center">
<div class="flex j-between m-b-20">
<div class="flex a-center">
<p class="hr_tag"></p>
<span>分类管理</span>
</div>
@ -128,8 +128,7 @@ export default {
})
.then(res => {
this.listData = res.data.list.list
this.total = res.data.list.currPage
this.$refs.table.clearSelection()
this.total = res.data.list.totalCount
})
.catch(err => {})
},

@ -1,6 +1,6 @@
<template>
<div>
<div class="tabs mgb20">
<div class="tabs m-b-20">
<a class="item" v-for="(item,index) in tabs" :key="index" :class="{active: index == active}" @click="tabChange(index)">{{item}}</a>
</div>

@ -2,12 +2,12 @@
<div>
<el-row :gutter="20">
<el-col :span="24">
<el-card shadow="hover" class="mgb20">
<div class="flex-center mgb20">
<el-card shadow="hover" class="m-b-20">
<div class="flex a-center m-b-20">
<p class="hr_tag"></p>
<span>测评题库</span>
</div>
<div class="flex-between">
<div class="flex j-between">
<el-form label-width="80px">
<el-form-item class="no-mb" label="试题类型">
<el-select v-model="typeId" clearable placeholder="请选择试题类型" @change="getData">
@ -29,9 +29,9 @@
</el-col>
<el-col :span="24">
<el-card shadow="hover" class="mgb20">
<div class="flex-between mgb20">
<div class="flex-center">
<el-card shadow="hover" class="m-b-20">
<div class="flex j-between m-b-20">
<div class="flex a-center">
<p class="hr_tag"></p>
<span>题目列表</span>
</div>
@ -46,7 +46,7 @@
type="primary"
size="small"
round
@click="showBatchUpload"
@click="showimportVisible"
>批量上传</el-button>
<el-button
type="primary"
@ -126,16 +126,9 @@
<ques-dialog ref="quesDialog" :title="topicsTitle" :visible.sync="visible" :isDetail.sync="isDetail" @getData="dialogGetData" @closeTopics="closeTopics"></ques-dialog>
<el-dialog title="批量上传" :visible.sync="BatchUpload" width="30%" @close="closeUpload" :close-on-click-modal="false">
<el-card shadow="hover" class="card_m" v-show="this.label=1">
<div class="Upload">
<div class="bt" @click="downloadTem">
<el-link :underline="false">
1.请下载模板
<i class="el-icon-download"></i>
</el-link>
</div>
<div class="bt">
<el-dialog title="批量导入" :visible.sync="importVisible" width="24%" center :close-on-click-modal="false">
<div style="text-align: center">
<div style="margin-bottom: 10px;"><el-button type="primary" @click="downLoad">模板下载<i class="el-icon-download el-icon--right"></i></el-button></div>
<el-upload
accept=".xls,.xlsx"
:on-remove="handleRemove"
@ -144,48 +137,25 @@
:before-remove="beforeRemove"
:limit="1"
:on-exceed="handleExceed"
:action="this.api.upload"
:action="this.api.impExcel"
:file-list="uploadList"
:data="{userId: this.userId}"
name="file"
>
<el-link :underline="false">
2.请点击上传模板
<i class="el-icon-upload"></i>
</el-link>
</el-upload>
</div>
<div>
<el-upload
accept=".xls,.xlsx"
:on-remove="handleDataRemove"
:on-error="uploadError"
:on-success="uploadSuccess"
:before-remove="beforeRemove"
:limit="1"
:on-exceed="handleExceed"
:action="this.api.import"
:file-list="uploadDataList"
name="file"
>
<el-link :underline="false">
3.请点击批量导入
<i class="el-icon-upload"></i>
</el-link>
<el-button type="primary" class="ml20">上传文件<i class="el-icon-upload2 el-icon--right"></i></el-button>
</el-upload>
<el-link v-if="uploadFaild" type="primary" @click="showFaild">导入失败查看原因</el-link>
</div>
</div>
</el-card>
<span slot="footer" class="dialog-footer">
<el-button @click="BatchUpload = false">取消</el-button>
<el-button type="primary" v-throttle @click="uploadSure">确定</el-button>
<el-button @click="importVisible = false"> </el-button>
<el-button type="primary" @click="uploadSure"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import quesDialog from './quesDialog';
import { mapState } from 'vuex';
import quesDialog from './quesDialog'
import { mapState } from 'vuex'
export default {
data() {
return {
@ -197,7 +167,7 @@ export default {
pageSize: 10,
total: 0,
visible: false,
BatchUpload: false,
importVisible: false,
multipleSelection: [],
isDetail: false,
topicsTitle: '',
@ -236,8 +206,8 @@ export default {
userId: this.userId
})
.then(res => {
this.total = res.data.list.currPage; //
this.listData = res.data.list.list;
this.listData = res.data.list.list
this.total = res.data.list.totalCount
})
.catch(err => {})
},
@ -339,9 +309,9 @@ export default {
.then(() => {
let data = {
userId: this.userId,
qid: shareList
ids: shareList
}
this.$post(this.api.saveSharing,data).then(res => {
this.$post(this.api.batchSave,data).then(res => {
this.multipleSelection = [];
this.$message.success('共享成功');
this.getData()
@ -400,11 +370,11 @@ export default {
this.$message.error('请先选择数据!');
}
},
downloadTem() {
location.href = this.api.download
downLoad() {
location.href = this.api.getExcel
},
showBatchUpload() {
this.BatchUpload = true
showimportVisible() {
this.importVisible = true
},
handleExceed(files, fileList) {
this.$message.warning(
@ -413,15 +383,22 @@ export default {
},
uploadSuccess(res, file, fileList) {
this.uploadFaild = false
if(res.data.token){
this.token = res.data.token
if(res.success){
if(res.data.data.token){
this.token = res.data.data.token
this.uploadFaild = true
}else{
this.$message.success('上传成功')
}
}else{
res.message ? this.$message.error(res.message) : this.$message.error('上传失败,请检查数据')
}
},
showFaild(){
location.href = `${this.api.export_failure}?token=${this.token}`
},
uploadError(err, file, fileList) {
console.log(222)
this.$message({
message: "上传出错,请重试!",
type: "error",
@ -438,7 +415,7 @@ export default {
this.uploadList = fileList
},
uploadSure(){
this.BatchUpload = false
this.importVisible = false
this.page = 1
this.keyword = ''
this.getData()

@ -1,13 +1,13 @@
<template>
<div>
<el-card shadow="hover" class="mgb20">
<el-card shadow="hover" class="m-b-20">
<div>
<div class="flex-center mgb20">
<div class="flex a-center m-b-20">
<p class="hr_tag"></p>
<span>筛选</span>
</div>
<div>
<div style="display: flex;justify-content: flex-end;">
<div class="flex">
<div>
<el-input placeholder="请输入分类名称" prefix-icon="el-icon-search" v-model="keyword" clearable></el-input>
</div>
@ -17,8 +17,8 @@
</el-card>
<el-card shadow="hover">
<div class="flex-between mgb20">
<div class="flex-center">
<div class="flex j-between m-b-20">
<div class="flex a-center">
<p class="hr_tag"></p>
<span>分类管理</span>
</div>
@ -117,7 +117,7 @@ export default {
this.$post(this.api.listByPage,data)
.then(res => {
this.listData = res.data.list.list
this.total = res.data.list.currPage
this.total = res.data.list.totalCount
})
.catch(err => {})
},

@ -14,11 +14,6 @@
<el-option v-for="(item,index) in quesBankList" :key="index" :label="item.typeName" :value="item.cid"></el-option>
</el-select>
</el-form-item>
<!-- <el-form-item label="考试题型" prop="questionStem">
<el-select v-model="topicForm.typeId" clearable placeholder="请选择考试题型">
<el-option v-for="(item,index) in typeList" :key="index" :label="item.name" :value="item.name"></el-option>
</el-select>
</el-form-item> -->
<el-form-item label="所属课程" prop="courses">
<el-input v-model="topicForm.courses"></el-input>
</el-form-item>
@ -42,7 +37,7 @@
:before-remove="beforeRemove"
:limit="1"
:on-exceed="handleExceed"
:action="this.api.uploadFileUser"
:action="this.api.fileupload"
:file-list="uploadList"
name="file"
>

@ -156,7 +156,7 @@
</div>
</div>
<div class="card mgb20">
<div class="card m-b-20">
<p class="block-title">账号信息</p>
<div class="information">
<div class="block">

@ -1,6 +1,6 @@
<template>
<div>
<div class="tabs mgb20" v-if="showTabs">
<div class="tabs m-b-20" v-if="showTabs">
<a class="item" v-for="(item,index) in tabs" :key="index" :class="{active: index == activeName}" @click="tabChange(index)">{{item}}</a>
</div>

@ -1,13 +1,13 @@
<template>
<div>
<el-card shadow="hover" class="mgb20">
<el-card shadow="hover" class="m-b-20">
<div>
<div class="flex-center mgb20">
<div class="flex a-center m-b-20">
<p class="hr_tag"></p>
<span>筛选</span>
</div>
<div>
<div style="display: flex;">
<div class="flex">
<div>
<el-input placeholder="请输入角色名称" prefix-icon="el-icon-search" v-model="keyword" clearable></el-input>
</div>
@ -17,8 +17,8 @@
</el-card>
<el-card shadow="hover">
<div class="flex-between mgb20">
<div class="flex-center">
<div class="flex j-between m-b-20">
<div class="flex a-center">
<p class="hr_tag"></p>
<span>角色列表</span>
</div>

@ -7,8 +7,8 @@
<el-main style="padding-top: 0">
<el-col :span="24">
<el-card shadow="hover" class="mgb20 teacher_tab">
<div class="flex-between mgb20">
<el-card shadow="hover" class="m-b-20 teacher_tab">
<div class="flex j-between m-b-20">
<div>
<el-input placeholder="请输入员工姓名/工号" v-model="keyword" prefix-icon="el-icon-search" clearable></el-input>
</div>
@ -136,6 +136,7 @@
import Setting from '@/setting';
import TeacherSide from './staffside.vue';
import { mapState } from 'vuex';
import util from '@/libs/util'
export default {
data() {
return {
@ -158,7 +159,6 @@ export default {
managerDepartment: '',
userAccount: '',
major: '',
schoolId: this.clientId
},
rules: {
userAccount: [
@ -267,6 +267,8 @@ export default {
}
},
mounted(){
this.manageForm.clientId = this.clientId
this.manageForm.clientName = this.clientName
this.getData()
this.getRoles()
},
@ -279,13 +281,13 @@ export default {
if(e.ischeck){
oneDepartmentIds.push(e.staffProfessionalArchitectureId)
}else{
this.removeByValue(oneDepartmentIds, e.staffProfessionalArchitectureId);
util.removeByValue(oneDepartmentIds, e.staffProfessionalArchitectureId);
}
e.children.forEach( r => {
if(r.ischeck){
twoDepartmentIds.push(r.staffGradeId)
}else{
this.removeByValue(twoDepartmentIds, r.staffGradeId);
util.removeByValue(twoDepartmentIds, r.staffGradeId);
}
})
})
@ -360,7 +362,6 @@ export default {
this.manageForm.userAccount = user.account
this.originalAccount = Number(user.account)
this.manageForm.userId = user.userId
this.manageForm.schoolId = user.schoolId
this.manageForm.roleValue = or.roleId
this.manageForm.major = or.staffProfessionalArchitectureId

@ -18,7 +18,7 @@
<i v-else class="empty"></i>
<i :class="item.ischeck ? 'icon-yigouxuan' : 'icon-weigouxuan'" @click.stop="fircheckitem(item)"></i>
<span @click.stop="fircheckitem(item)">{{item.staffProfessionalArchitectureName}}</span>
<svg t="1604370117041" class="ft edit icon" @click.stop="editMajor(item)" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9029" width="16" height="16"><path d="M511.979 30.125c-266.13 0-481.871 215.741-481.871 481.871s215.741 481.871 481.871 481.871S993.85 778.126 993.85 511.996 778.109 30.125 511.979 30.125zM459.644 693.015c-15.876 18.135-22.818 22.486-44.972 30.657-34.111 12.787-96.687 36.27-137.374 51.515-7.706 3.056-36.735 1.495-24.578-27.036 13.784-39.757 34.045-98.414 45.636-131.894 8.436-23.615 11.758-29.76 28.73-45.603l175.271-175.271 124.055 124.088C626.413 519.471 508.469 642.264 459.644 693.015zM653.084 492.867 528.996 368.779l26.605-26.605 124.088 124.121L653.084 492.867zM759.469 386.482l-53.176 53.209L582.205 315.569l53.209-53.176c19.596-19.596 51.316-19.596 70.912 0l53.209 53.176C779.065 335.166 779.065 366.919 759.469 386.482z" p-id="9030" fill="#cb221c"></path></svg>
<i class="edit ft" @click.stop="editMajor(item)"></i>
<i class="el-icon-circle-plus ft" @click.stop="addDepartment(item)"></i>
<i class="icon-delete ft" @click.stop="delMajor(item,index)"></i>
</div>
@ -28,7 +28,7 @@
<div class="item2" @click.stop="open(item1)">
<i :class="item1.ischeck ? 'icon-yigouxuan' : 'icon-weigouxuan'" @click.stop="twocheckitem(item1)"></i>
<span @click.stop="twocheckitem(item1)">{{item1.label}}</span>
<svg t="1604312541925" class="ft edit icon" @click.stop="editDepartment(item1)" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1129" width="14" height="14"><path d="M323.608576 658.725888 366.068736 701.303808 468.333568 664.004608 360.828928 556.619776ZM513.3056 63.31904c-248.041472 0-449.069056 201.05216-449.069056 449.072128 0 247.994368 201.028608 449.069056 449.069056 449.069056 247.994368 0 449.07008-201.074688 449.07008-449.069056C962.37568 264.3712 761.299968 63.31904 513.3056 63.31904zM490.842112 686.511104l-0.239616-0.279552c-1.241088 1.040384-2.60096 1.999872-4.200448 2.56l-206.849024 75.480064c-5.398528 1.918976-11.474944 0.638976-15.471616-3.519488-4.07552-3.997696-5.397504-10.075136-3.398656-15.429632l75.399168-206.773248c0.562176-1.557504 1.440768-2.878464 2.51904-4.158464l-0.161792-0.198656L524.184576 348.490752c20.150272 20.108288 36.739072 36.658176 36.739072 36.658176l-145.522688 145.28512c-2.358272 2.279424-3.398656 5.276672-3.398656 8.31488 0 2.998272 1.040384 5.998592 3.398656 8.316928 2.280448 2.23744 5.27872 3.477504 8.395776 3.477504 3.117056 0 6.07744-1.240064 8.353792-3.477504L577.596416 401.861632l45.693952 45.617152L478.487552 592.12288c-4.557824 4.595712-4.557824 12.071936 0 16.668672 2.238464 2.200576 5.27872 3.438592 8.3968 3.438592 3.15904 0 6.115328-1.238016 8.354816-3.398656 0-0.039936 144.763904-144.643072 144.763904-144.643072s21.269504 21.269504 36.54144 36.620288L490.842112 686.511104zM751.264768 426.20928l-57.969664 57.929728c-29.78304-29.744128-98.985984-98.99008-152.357888-152.260608l58.047488-58.008576c20.789248-20.769792 54.771712-20.809728 75.522048 0l76.75904 76.8C772.054016 371.438592 772.015104 405.34016 751.264768 426.20928z" p-id="1130" fill="#cb221c"></path></svg>
<i class="edit ft" @click.stop="editDepartment(item1)"></i>
<i class="icon-delete ft" @click.stop="delDepartment(item1,index1)"></i>
</div>
</div>
@ -342,12 +342,14 @@ export default {
color: #cb221c;
}
.item .empty{
width: 20px;
width: 25px;
}
.edit{
width: 17px !important;
height: 17px !important;
display: inline-block;
width: 17px;
height: 17px;
margin-left: 5px;
background: url(../../../assets/svg/edit.svg) 0 0/cover no-repeat;
}
//ul,li

@ -1,13 +1,13 @@
<template>
<div>
<el-card shadow="hover" class="mgb20">
<el-card shadow="hover" class="m-b-20">
<div>
<div class="flex-center mgb20">
<div class="flex a-center m-b-20">
<p class="hr_tag"></p>
<span>筛选</span>
</div>
<div>
<div style="display: flex;justify-content: flex-end;">
<div class="flex">
<div>
<el-input placeholder="请输入用户姓名" prefix-icon="el-icon-search" v-model="keyword" clearable></el-input>
</div>
@ -17,8 +17,8 @@
</el-card>
<el-card shadow="hover">
<div class="flex-between mgb20">
<div class="flex-center">
<div class="flex j-between m-b-20">
<div class="flex a-center">
<p class="hr_tag"></p>
<span>用户列表</span>
</div>
@ -119,9 +119,9 @@
</template>
<script>
import Setting from '@/setting';
import { mapActions } from 'vuex';
import { mapState } from 'vuex';
import Setting from '@/setting'
import { mapState,mapActions } from 'vuex'
import util from '@/libs/util'
export default {
name: 'user',
data() {
@ -281,7 +281,7 @@ export default {
account: form.account,
clientId: form.clientId,
clientName: form.clientName,
creationTime: this.formatDate(new Date().getTime()),
creationTime: util.formatDate(new Date().getTime()),
roleId: 1,
uniqueIdentificationAccount: new Date().getTime(),
userName: form.name,

@ -15,7 +15,7 @@ const Setting = {
// 页面切换时,是否显示模拟的进度条
showProgressBar: true,
// 接口请求地址
apiBaseURL: env === 'development' ? 'http://39.108.250.202:8000' : 'http://39.108.250.202:8000',
apiBaseURL: env === 'development' ? 'http://192.168.31.152:8001' : 'http://39.108.250.202:8000',
// 接口请求返回错误时,弹窗的持续时间,单位:秒
modalDuration: 3,
// 接口请求返回错误时,弹窗的类型,可选值为 Message 或 Notice

@ -0,0 +1,145 @@
@import "./default/index.scss";
.content-box {
-webkit-transition: left .3s ease-in-out;
transition: left .3s ease-in-out;
}
.content {
width: auto;
height: 100%;
padding: 20px;
box-sizing: border-box;
}
.content-collapse {
left: 65px;
}
.container {
padding: 30px;
background: #fff;
border: 1px solid #ddd;
border-radius: 5px;
}
.crumbs {
margin: 10px 0;
}
.pagination {
margin: 20px 0;
text-align: right;
}
.el-button+.el-tooltip {
margin-left: 10px;
}
.ql-snow .ql-tooltip {
transform: translateX(117.5px) translateY(10px) !important;
}
.el-row {
margin-bottom: 20px;
}
#app .el-table thead{
color: #fff;
}
#app .el-table th{
background-color: $--color-primary!important;
font-size: 16px;
font-weight: normal;
}
#app .el-select{
display: unset;
}
.required{
margin-right: 5px;
color: #F56C6C;
}
.hr_tag{
background-color: $--color-primary;
width: 3px;
height: 15px;
margin-right: 5px;
}
.per_title span{
font-size: 16px;
font-weight: bold;
}
.per_back{
margin-left: 5px;
}
.per_school{
margin-left: 30px;
}
.per_title:hover{
cursor:pointer;
}
[v-cloak] {
display: none;
}
.tabs{
display: flex;
align-items: center;
padding: 20px 1.5% 20px;
margin-bottom: 20px;
z-index: 999;
background-color: #fff;
.item{
padding: 12px 20px;
margin-right: 10px;
color:#606266;
line-height: 1;
border-radius: 4px;
background-color: #fff;
border: 1px solid #dcdfe6;
cursor: pointer;
&.active{
color: #fff;
background-color: $--color-primary;
border-color: $--color-primary;
}
}
}
.btns{
display: flex;
justify-content: center;
margin-top: 20px;
button{
height: 30px;
padding: 0 30px;
margin: 0 15px;
font-size: 14px;
color: #333;
line-height: 30px;
background-color: #fff;
border: 1px solid #ededed;
border-radius: 4px;
cursor: pointer;
&.submit{
color: #fff;
background-color: #e80909;
border-color: #e80909;
}
&:hover{
opacity: .8;
}
&:focus{
outline: none;
}
}
}
.userRadio .el-radio{
margin-right: 10px!important;
}
.userRadio .el-radio__input{
display: none!important;
}

@ -0,0 +1,7 @@
/* 改变主题色变量 */
$--color-primary: #cb221c;
/* 改变 icon 字体路径变量,必需 */
$--font-path: '~element-ui/lib/theme-chalk/fonts';
@import "~element-ui/packages/theme-chalk/src/index";

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

@ -0,0 +1,3 @@
[class*=" icon-"], [class^=icon-] {
font-family: iconfont!important;
}

@ -0,0 +1,6 @@
@import "./default/index.scss";
@import "./font/iconfont.css";
@import "./font/icon/iconfont.css";
@import "./lib/index.scss";
@import "./layout/index.scss";
@import "./common.scss";

@ -0,0 +1,13 @@
@import "lib/var";
html,
body,
#app,
.wrapper {
width: 100%;
height: 100%;
}
body {
font-size: 14px;
background: $bg-grey;
}

@ -0,0 +1,375 @@
@import "var";
// reset 初始化浏览器样式
* {
box-sizing: border-box;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
*:before,
*:after {
box-sizing: border-box;
}
html {
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
body,
div,
dl,
dt,
dd,
ul,
ol,
li,
h1,
h2,
h3,
h4,
h5,
h6,
form,
fieldset,
legend,
input,
textarea,
p,
blockquote,
th,
td,
hr,
button,
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
menu,
nav,
section {
margin: 0;
padding: 0;
}
button,
input,
select,
textarea {
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
input::-ms-clear,
input::-ms-reveal {
display: none;
}
ol,ul{
li{
list-style: none;
}
}
h1 {
font-size: 2em;
margin: 0.67em 0;
}
article,
aside,
footer,
header,
nav,
section {
display: block;
}
figcaption,
figure,
main {
display: block;
}
figure {
margin: 1em 40px;
}
li:focus {
outline-width: 0;
}
i{
font-style: normal;
}
/**
* 1. Remove the gray background on active links in IE 10.
* 2. Remove gaps in links underline in iOS 8+ and Safari 8+.
*/
a {
background-color: transparent;
-webkit-text-decoration-skip: objects;
text-decoration: none;
color: inherit;
}
a:active {
color: inherit;
}
a:active,
a:hover,
a:focus {
outline-width: 0;
}
abbr[title] {
border-bottom: none;
text-decoration: underline;
text-decoration: underline dotted;
}
/**
* Prevent the duplicate application of `bolder` by the next rule in Safari 6.
*/
b,
strong {
font-weight: inherit;
}
/**
* Add the correct font weight in Chrome, Edge, and Safari.
*/
b,
strong {
font-weight: bolder;
}
pre,
code,
kbd,
samp {
font-family: monospace, monospace;
font-size: 1em;
}
dfn {
font-style: italic;
}
mark {
background-color: #ff0;
color: #000;
}
small {
font-size: 80%;
}
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
audio,
video {
display: inline-block;
}
audio:not([controls]) {
display: none;
height: 0;
}
img {
border-style: none;
vertical-align: middle;
}
svg:not(:root) {
overflow: hidden;
}
button,
input,
optgroup,
select,
textarea {
font-size: 100%;
line-height: 1.15;
margin: 0;
}
button,
input {
overflow: visible;
}
button,
select {
text-transform: none;
}
button,
html [type="button"],
[type="reset"],
[type="submit"] {
-webkit-appearance: button;
}
button::-moz-focus-inner,
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
[type="submit"]::-moz-focus-inner {
border-style: none;
padding: 0;
}
/**
* Restore the focus styles unset by the previous rule.
*/
button:-moz-focusring,
[type="button"]:-moz-focusring,
[type="reset"]:-moz-focusring,
[type="submit"]:-moz-focusring {
outline: 1px dotted ButtonText;
}
/**
* Change the border, margin, and padding in all browsers (opinionated).
*/
fieldset {
border: 1px solid #c0c0c0;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em;
}
/**
* 1. Correct the text wrapping in Edge and IE.
* 2. Correct the color inheritance from `fieldset` elements in IE.
* 3. Remove the padding so developers are not caught out when they zero out
* `fieldset` elements in all browsers.
*/
legend {
box-sizing: border-box; /* 1 */
color: inherit; /* 2 */
display: table; /* 1 */
max-width: 100%; /* 1 */
padding: 0; /* 3 */
white-space: normal; /* 1 */
}
/**
* 1. Add the correct display in IE 9-.
* 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.
*/
progress {
display: inline-block; /* 1 */
vertical-align: baseline; /* 2 */
}
/**
* Remove the default vertical scrollbar in IE.
*/
textarea {
overflow: auto;
resize: vertical;
}
/**
* 1. Add the correct box sizing in IE 10-.
* 2. Remove the padding in IE 10-.
*/
[type="checkbox"],
[type="radio"] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
}
/**
* Correct the cursor style of increment and decrement buttons in Chrome.
*/
[type="number"]::-webkit-inner-spin-button,
[type="number"]::-webkit-outer-spin-button {
height: auto;
}
/**
* 1. Correct the odd appearance in Chrome and Safari.
* 2. Correct the outline style in Safari.
*/
[type="search"] {
-webkit-appearance: textfield; /* 1 */
outline-offset: -2px; /* 2 */
}
/**
* Remove the inner padding and cancel buttons in Chrome and Safari on macOS.
*/
[type="search"]::-webkit-search-cancel-button,
[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
* 1. Correct the inability to style clickable types in iOS and Safari.
* 2. Change font properties to `inherit` in Safari.
*/
::-webkit-file-upload-button {
-webkit-appearance: button; /* 1 */
font: inherit; /* 2 */
}
/*
* Add the correct display in IE 9-.
* 1. Add the correct display in Edge, IE, and Firefox.
*/
details, /* 1 */
menu {
display: block;
}
/*
* Add the correct display in all browsers.
*/
summary {
display: list-item;
}
/**
* Add the correct display in IE 9-.
*/
canvas {
display: inline-block;
}

@ -0,0 +1,3 @@
html {
font-family: 'PingFang SC', "Helvetica Neue", Helvetica, "microsoft yahei", arial, STHeiTi, sans-serif;
}

@ -0,0 +1,80 @@
// 颜色 size范围
$color-black: #333 !default;
$color-white: #ffffff !default;
$color-grey: #888 !default;
$color-green: #19be6b !default;
$color-blue: #61c3ff !default;
$color-yellow: #ff9900 !default;
$color-red: #f35958 !default;
$color-title: #17233d !default;
$color-content: #515a6e !default;
$color-disabled: #c5c8ce !default;
$bg-grey:#f0f0f0 !default;
$bg-white: #ffffff !default;
$bg-black: #393D49 !default;
$color-border: #dcdfe6 !default;
// 主题背景色
$bg-colors: (
'white': $bg-white,
'black': $bg-black,
'grey': $bg-grey,
'green': $color-green,
'blue': $color-blue,
'yellow': $color-yellow,
'red': $color-red,
) !default;
// 文本颜色
$text-colors: (
'white': $color-white,
'black': $color-black,
'grey': $color-grey,
'green': $color-green,
'blue': $color-blue,
'yellow': $color-yellow,
'red': $color-red,
'title': $color-title,
'content': $color-content,
'disabled': $color-disabled
) !default;
// 边框颜色
$border-colors: (
'white': $color-white,
'black': $color-black,
'grey': $color-border,
'green': $color-green,
'blue': $color-blue,
'yellow': $color-yellow,
'red': $color-red
) !default;
// border
$border-width-through: 20 !default;
$border-radius-through: 20 !default;
// margin padding left right top bottom
$box-sizes: (
-20, -15, -12, -10, -8, -6, -5, -4, -3, -2, -1,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 20, 25, 30, 35, 40, 50, 60, 80, 100) !default;
// width height
$sizes: (
40, 50, 60, 70, 80, 90, 100,
120, 150, 200, 250, 300, 400, 500, 600, 800, 1000, 1200) !default;
// font-size
$font-size-em-through: 10 !default;
$font-size-em-decimal-through: 5 !default;
$font-size-rem-through: 10 !default;
$font-size-rem-decimal-through: 5 !default;
$font-size-px-through: 80 !default;
// line-height
$line-height-through: 20 !default;
$line-height-decimal-through: 5 !default;
$line-height-px-through: 100 !default;

@ -0,0 +1,7 @@
@import "var";
@each $name, $color in $bg-colors {
.bg-#{$name} {
background-color: $color;
}
}

@ -0,0 +1,78 @@
@import "var";
.border {
border: 1px solid $color-border;
}
// vertical
.b-v {
border-top: 1px solid $color-border;
border-bottom: 1px solid $color-border;
}
// horizontal
.b-h {
border-left: 1px solid $color-border;
border-right: 1px solid $color-border;
}
// border double
.b-double {
border: double $color-border;
}
.b-w-thin {
border-width: 0.55px;
}
.b-round {
border-radius: 50%;
}
.b-none {
border: none;
}
@each $side in left, right, top, bottom {
.b-#{str-slice($side, 0, 1)} {
border-#{$side}: 1px solid $color-border;
}
}
// border-style
@each $style in dotted, dashed {
.border-#{$style} {
border: 1px $style $color-border
}
.b-v-#{$style} {
border-top: 1px $style $color-border;
border-bottom: 1px $style $color-border;
}
.b-h-#{$style} {
border-left: 1px $style $color-border;
border-right: 1px $style $color-border;
}
@each $side in left, right, top, bottom {
.b-#{str-slice($side, 0, 1)}-#{$style} {
border-#{$side}: 1px $style $color-border;
}
}
}
@for $size from 0 through $border-width-through {
.b-#{$size} {
border-width: #{$size}px;
}
}
@for $size from 0 through $border-radius-through {
.b-radius-#{$size}, .b-r-#{$size} {
border-radius: #{$size}px;
}
}
@each $name, $color in $border-colors {
.b-#{$name} {
border-color: $color;
}
}

@ -0,0 +1,56 @@
@import "var";
/**
* margin padding
* @each 循环多次保证优先级
*/
.m-auto {
margin-left: auto;
margin-right: auto;
}
@each $size in $box-sizes {
.m-#{$size}, .margin-#{$size} {
margin: #{$size}px;
}
@if $size >= 0 {
.p-#{$size}, .padding-#{$size} {
padding: #{$size}px;
}
}
}
@each $size in $box-sizes {
.m-h-#{$size} {
margin-left: #{$size}px;
margin-right: #{$size}px;
}
.m-v-#{$size} {
margin-top: #{$size}px;
margin-bottom: #{$size}px;
}
@if $size >= 0 {
.p-h-#{$size} {
padding-left: #{$size}px;
padding-right: #{$size}px;
}
.p-v-#{$size} {
padding-top: #{$size}px;
padding-bottom: #{$size}px;
}
}
}
@each $size in $box-sizes {
@each $side in top right bottom left {
.m-#{str-slice($side, 0, 1)}-#{$size} {
margin-#{$side}: #{$size}px;
}
@if $size >= 0 {
.p-#{str-slice($side, 0, 1)}-#{$size} {
padding-#{$side}: #{$size}px;
}
}
}
}

@ -0,0 +1,5 @@
@each $type in default, auto, crosshair, pointer, move, text, wait, help {
.cursor-#{$type} {
cursor: $type;
}
}

@ -0,0 +1,15 @@
@import "var";
@each $type in inherit, none, inline, inline-block, block, table, inline-table, table-cell {
.d-#{$type} {
display: #{$type};
}
}
.hide {
display: none;
}
.show {
display: block
}

@ -0,0 +1,54 @@
.flex {
display: flex;
}
.flex-column {
display: flex;
flex-direction: column;
}
.j-start {
justify-content: flex-start;
}
.j-end {
justify-content: flex-end;
}
.j-center {
justify-content: center;
}
.j-between {
justify-content: space-between;
}
.j-around {
justify-content: space-around;
}
.a-start {
align-items: flex-start;
}
.a-center {
align-items: center;
}
.a-end {
align-items: flex-end;
}
@each $type in nowrap, wrap, wrap-reverse {
.flex-#{$type} {
flex-wrap: $type;
}
}
@each $size in 1, 2, 3 {
.flex-#{$size} {
flex: $size;
}
}
@for $i from 0 through 3 {
.flex-s-#{$i} {
flex-shrink: $i;
}
}

@ -0,0 +1,16 @@
.cl {
&:before, &:after {
content: ' ';
display: table;
}
&:after {
clear: both;
}
}
.fl {
float: left;
}
.fr {
float: right;
}

@ -0,0 +1,41 @@
@import "var";
@for $size from 0 through $font-size-em-through {
.fs-em-#{$size} {
font-size: #{$size}em;
}
@if $size <= $font-size-em-decimal-through {
@for $i from 0 to 10 {
.fs-em-#{$size}_#{$i} {
font-size: #{$size}#{'.'}#{$i}em;
}
}
} @else {
.fs-em-#{$size}_5 {
font-size: #{$size}#{'.5'}em;
}
}
}
@for $size from 0 through $font-size-rem-through {
.fs-rem-#{$size} {
font-size: #{$size}rem;
}
@if $size <= $font-size-rem-decimal-through {
@for $i from 0 to 10 {
.fs-rem-#{$size}_#{$i} {
font-size: #{$size}#{'.'}#{$i}rem;
}
}
} @else {
.fs-rem-#{$size}_5 {
font-size: #{$size}#{'.5'}rem;
}
}
}
@for $size from 12 through $font-size-px-through {
.fs-#{$size} {
font-size: #{$size}px;
}
}

@ -0,0 +1,17 @@
.bold {
font-weight: bold;
}
.normal {
font-weight: normal;
}
.lighter {
font-weight: lighter;
}
@each $weight in 100, 200, 300, 400, 500, 600, 700, 800, 900 {
.fw-#{$weight} {
font-weight: $weight;
}
}

@ -0,0 +1,28 @@
/*!
* quickly-css
* Github: https://gitee.com/zj1024/quickly-css
* Author: zhangjing
*/
@import "reset";
@import "background";
@import "border";
@import "box";
@import "cursor";
@import "display";
@import "flex";
@import "float";
@import "font-size";
@import "font-weight";
@import "line-height";
@import "link";
@import "overflow";
@import "position";
@import "size";
@import "text-align";
@import "text-color";
@import "vertical-align";
@import "visibility";
@import "white-space";
@import "style";

@ -0,0 +1,24 @@
@import "var";
@for $size from 0 through $line-height-through {
.l-h-#{$size} {
line-height: #{$size}em;
}
@if $size <= $line-height-decimal-through {
@for $i from 0 to 10 {
.l-h-#{$size}_#{$i} {
line-height: #{$size}#{'.'}#{$i}em;
}
}
} @else {
.l-h-#{$size}_5 {
line-height: #{$size}#{'.5'}em;
}
}
}
@for $size from 0 through $line-height-px-through {
.lh-#{$size} {
line-height: #{$size}px;
}
}

@ -0,0 +1,13 @@
@import "var";
@each $name, $color in $text-colors {
.link-#{$name} {
color: $color;
text-decoration: none;
cursor: pointer;
&:hover, &:active, &:focus {
color: darken($color, 10%);
text-decoration: underline;
}
}
}

@ -0,0 +1,11 @@
@each $type in visible, hidden, scroll, auto, inherit {
.o-#{$type} {
overflow: $type;
}
.o-x-#{$type} {
overflow-x: $type;
}
.o-y-#{$type} {
overflow-y: $type;
}
}

@ -0,0 +1,16 @@
@import "var";
@each $type in static, relative, absolute, fixed, sticky {
.#{$type} {
position: $type;
}
}
@each $size in $box-sizes {
@each $side in top, right, bottom, left {
.#{$side}-#{$size} {
#{$side}: #{$size}px;
}
}
}

@ -0,0 +1,53 @@
@import "var";
.w-full {
width: 100%;
}
.h-full {
height: 100%;
}
@for $percent from 0 to 100 {
.w-p-#{$percent} {
width: #{$percent}#{'%'};
}
.h-p-#{$percent} {
height: #{$percent}#{'%'};
}
}
@for $i from 1 through 30 {
.h-#{$i} {
height: #{$i}px;
}
}
@for $i from 1 through 30 {
.w-#{$i} {
width: #{$i}px;
}
}
@each $i in $sizes {
.w-#{$i} {
width: #{$i}px;
}
.h-#{$i} {
height: #{$i}px;
}
.max-w-#{$i} {
max-width: #{$i}px;
}
.max-h-#{$i} {
max-height: #{$i}px;
}
.min-w-#{$i} {
min-width: #{$i}px;
}
.min-h-#{$i} {
min-height: #{$i}px;
}
}

@ -0,0 +1,8 @@
/**
* 任何的版本的 Internet Explorer 包括 IE8都不支持属性值 "inherit"
*/
@each $type in left, right, center, justify, inherit {
.text-#{$type} {
text-align: #{$type};
}
}

@ -0,0 +1,7 @@
@import "var";
@each $name, $color in $text-colors {
.text-#{$name} {
color: $color;
}
}

@ -0,0 +1,7 @@
$types: (baseline, sub, super, top, text-top, middle, bottom, text-bottom, inherit);
@each $type in $types {
.v-a-#{$type} {
vertical-align: $type;
}
}

@ -0,0 +1,7 @@
.visible {
visibility: visible;
}
.hidden {
visibility: hidden;
}

@ -0,0 +1,5 @@
@each $type in normal, nowrap, pre, pre-wrap, pre-line {
.text-#{$type} {
white-space: $type;
}
}
Loading…
Cancel
Save