From b313fe34dd4cce54e55aeba8efa6f693aad14669 Mon Sep 17 00:00:00 2001 From: zhanghouying Date: Tue, 19 Nov 2019 11:42:54 +0800 Subject: [PATCH 01/11] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=BF=90=E7=BB=B4?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/dev.env.js | 1 + config/prod.env.js | 1 + src/api/app.js | 32 +++ src/api/database.js | 24 ++ src/api/deploy.js | 74 ++++++ src/api/deployHistory.js | 40 ++++ src/api/serverAccount.js | 32 +++ src/api/serverDeploy.js | 24 ++ src/store/getters.js | 1 + src/store/modules/api.js | 2 + src/utils/validate.js | 76 +++++++ src/views/mnt/account/form.vue | 108 +++++++++ src/views/mnt/account/index.vue | 176 +++++++++++++++ src/views/mnt/app/form.vue | 180 +++++++++++++++ src/views/mnt/app/index.vue | 214 ++++++++++++++++++ src/views/mnt/database/form.vue | 134 +++++++++++ src/views/mnt/database/index.vue | 179 +++++++++++++++ src/views/mnt/deploy/deploy.vue | 217 ++++++++++++++++++ src/views/mnt/deploy/form.vue | 132 +++++++++++ src/views/mnt/deploy/index.vue | 313 ++++++++++++++++++++++++++ src/views/mnt/deploy/sysRestore.vue | 152 +++++++++++++ src/views/mnt/deployHistory/form.vue | 133 +++++++++++ src/views/mnt/deployHistory/index.vue | 163 ++++++++++++++ src/views/mnt/serverDeploy/form.vue | 137 +++++++++++ src/views/mnt/serverDeploy/index.vue | 183 +++++++++++++++ 25 files changed, 2728 insertions(+) create mode 100644 src/api/app.js create mode 100644 src/api/database.js create mode 100644 src/api/deploy.js create mode 100644 src/api/deployHistory.js create mode 100644 src/api/serverAccount.js create mode 100644 src/api/serverDeploy.js create mode 100644 src/views/mnt/account/form.vue create mode 100644 src/views/mnt/account/index.vue create mode 100644 src/views/mnt/app/form.vue create mode 100644 src/views/mnt/app/index.vue create mode 100644 src/views/mnt/database/form.vue create mode 100644 src/views/mnt/database/index.vue create mode 100644 src/views/mnt/deploy/deploy.vue create mode 100644 src/views/mnt/deploy/form.vue create mode 100644 src/views/mnt/deploy/index.vue create mode 100644 src/views/mnt/deploy/sysRestore.vue create mode 100644 src/views/mnt/deployHistory/form.vue create mode 100644 src/views/mnt/deployHistory/index.vue create mode 100644 src/views/mnt/serverDeploy/form.vue create mode 100644 src/views/mnt/serverDeploy/index.vue diff --git a/config/dev.env.js b/config/dev.env.js index 0115503..05700f8 100644 --- a/config/dev.env.js +++ b/config/dev.env.js @@ -4,6 +4,7 @@ const prodEnv = require('./prod.env') module.exports = merge(prodEnv, { NODE_ENV: '"development"', + WS_API: '"ws://localhost:8000"', BASE_API: '"http://localhost:8000"' // BASE_API: '"https://api.auauz.net"' }) diff --git a/config/prod.env.js b/config/prod.env.js index 73e8fe1..292b615 100644 --- a/config/prod.env.js +++ b/config/prod.env.js @@ -1,5 +1,6 @@ 'use strict' module.exports = { NODE_ENV: '"production"', + WS_API: '"ws://api.auauz.net"', BASE_API: '"https://api.auauz.net"' } diff --git a/src/api/app.js b/src/api/app.js new file mode 100644 index 0000000..8762fc1 --- /dev/null +++ b/src/api/app.js @@ -0,0 +1,32 @@ +import request from '@/utils/request' + +export function queryApps(data) { + return request({ + url: 'api/app', + method: 'get', + data + }) +} + +export function add(data) { + return request({ + url: 'api/app', + method: 'post', + data + }) +} + +export function del(id) { + return request({ + url: 'api/app/' + id, + method: 'delete' + }) +} + +export function edit(data) { + return request({ + url: 'api/app', + method: 'put', + data + }) +} diff --git a/src/api/database.js b/src/api/database.js new file mode 100644 index 0000000..f26f48d --- /dev/null +++ b/src/api/database.js @@ -0,0 +1,24 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/database', + method: 'post', + data + }) +} + +export function del(id) { + return request({ + url: 'api/database/' + id, + method: 'delete' + }) +} + +export function edit(data) { + return request({ + url: 'api/database', + method: 'put', + data + }) +} diff --git a/src/api/deploy.js b/src/api/deploy.js new file mode 100644 index 0000000..da3f139 --- /dev/null +++ b/src/api/deploy.js @@ -0,0 +1,74 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/deploy', + method: 'post', + data + }) +} + +export function del(id) { + return request({ + url: 'api/deploy/' + id, + method: 'delete' + }) +} + +export function edit(data) { + return request({ + url: 'api/deploy', + method: 'put', + data + }) +} + +export function getApps() { + return request({ + url: 'api/app', + method: 'get' + }) +} + +export function getServers() { + return request({ + url: 'api/serverDeploy', + method: 'get' + }) +} + +/** + * 启动服务 + * @param data 选中行 + */ +export function startServer(data) { + return request({ + url: 'api/deploy/startServer', + method: 'post', + data + }) +} + +/** + * 停止服务 + * @param data 选中行 + */ +export function stopServer(data) { + return request({ + url: 'api/deploy/stopServer', + method: 'post', + data + }) +} + +/** + * 停止服务 + * @param data 选中行 + */ +export function serverStatus(data) { + return request({ + url: 'api/deploy/serverStatus', + method: 'post', + data + }) +} diff --git a/src/api/deployHistory.js b/src/api/deployHistory.js new file mode 100644 index 0000000..a19512f --- /dev/null +++ b/src/api/deployHistory.js @@ -0,0 +1,40 @@ +import request from '@/utils/request' + +/** + * 部署管理 + * @param data + */ +export function add(data) { + return request({ + url: 'api/deployHistory', + method: 'post', + data + }) +} + +export function del(id) { + return request({ + url: 'api/deployHistory/' + id, + method: 'delete' + }) +} + +export function edit(data) { + return request({ + url: 'api/deployHistory', + method: 'put', + data + }) +} + +/** + * 版本回退 + * @param data 选中行 + */ +export function reducte(data) { + return request({ + url: 'api/deploy/serverReduction', + method: 'post', + data + }) +} diff --git a/src/api/serverAccount.js b/src/api/serverAccount.js new file mode 100644 index 0000000..0408d67 --- /dev/null +++ b/src/api/serverAccount.js @@ -0,0 +1,32 @@ +import request from '@/utils/request' + +export function queryServerAccount(data) { + return request({ + url: 'api/serverAccount', + method: 'get', + data + }) +} + +export function add(data) { + return request({ + url: 'api/serverAccount', + method: 'post', + data + }) +} + +export function del(id) { + return request({ + url: 'api/serverAccount/' + id, + method: 'delete' + }) +} + +export function edit(data) { + return request({ + url: 'api/serverAccount', + method: 'put', + data + }) +} diff --git a/src/api/serverDeploy.js b/src/api/serverDeploy.js new file mode 100644 index 0000000..0110ddc --- /dev/null +++ b/src/api/serverDeploy.js @@ -0,0 +1,24 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/serverDeploy', + method: 'post', + data + }) +} + +export function del(id) { + return request({ + url: 'api/serverDeploy/' + id, + method: 'delete' + }) +} + +export function edit(data) { + return request({ + url: 'api/serverDeploy', + method: 'put', + data + }) +} diff --git a/src/store/getters.js b/src/store/getters.js index 6273784..acb3ebd 100644 --- a/src/store/getters.js +++ b/src/store/getters.js @@ -1,4 +1,5 @@ const getters = { + deployUploadApi: state => state.api.deployUploadApi, sidebar: state => state.app.sidebar, device: state => state.app.device, token: state => state.user.token, diff --git a/src/store/modules/api.js b/src/store/modules/api.js index dbda078..9b302c1 100644 --- a/src/store/modules/api.js +++ b/src/store/modules/api.js @@ -1,6 +1,8 @@ const baseUrl = process.env.BASE_API const api = { state: { + // 部署包上传 + deployUploadApi: baseUrl + '/api/deploy/upload', // 实时控制台 socketApi: baseUrl + '/websocket?token=kl', // 图片上传 diff --git a/src/utils/validate.js b/src/utils/validate.js index 7ec38b4..092e27c 100644 --- a/src/utils/validate.js +++ b/src/utils/validate.js @@ -35,3 +35,79 @@ export function validatEmail(str) { const reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/ return reg.test(str) } + +/** + * 是否合法IP地址 + * @param rule + * @param value + * @param callback + */ +export function validateIP(rule, value, callback) { + if (value === '' || value === undefined || value == null) { + callback() + } else { + const reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/ + if ((!reg.test(value)) && value !== '') { + callback(new Error('请输入正确的IP地址')) + } else { + callback() + } + } +} + +/* 是否手机号码或者固话*/ +export function validatePhoneTwo(rule, value, callback) { + const reg = /^((0\d{2,3}-\d{7,8})|(1[34578]\d{9}))$/ + if (value === '' || value === undefined || value == null) { + callback() + } else { + if ((!reg.test(value)) && value !== '') { + callback(new Error('请输入正确的电话号码或者固话号码')) + } else { + callback() + } + } +} + +/* 是否固话*/ +export function validateTelephone(rule, value, callback) { + const reg = /0\d{2}-\d{7,8}/ + if (value === '' || value === undefined || value == null) { + callback() + } else { + if ((!reg.test(value)) && value !== '') { + callback(new Error('请输入正确的固话(格式:区号+号码,如010-1234567)')) + } else { + callback() + } + } +} + +/* 是否手机号码*/ +export function validatePhone(rule, value, callback) { + const reg = /^[1][3,4,5,7,8][0-9]{9}$/ + if (value === '' || value === undefined || value == null) { + callback() + } else { + if ((!reg.test(value)) && value !== '') { + callback(new Error('请输入正确的电话号码')) + } else { + callback() + } + } +} + +/* 是否身份证号码*/ +export function validateIdNo(rule, value, callback) { + const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/ + if (value === '' || value === undefined || value == null) { + callback() + } else { + if ((!reg.test(value)) && value !== '') { + callback(new Error('请输入正确的身份证号码')) + } else { + callback() + } + } +} + diff --git a/src/views/mnt/account/form.vue b/src/views/mnt/account/form.vue new file mode 100644 index 0000000..fda8b91 --- /dev/null +++ b/src/views/mnt/account/form.vue @@ -0,0 +1,108 @@ + + + + + diff --git a/src/views/mnt/account/index.vue b/src/views/mnt/account/index.vue new file mode 100644 index 0000000..e19c700 --- /dev/null +++ b/src/views/mnt/account/index.vue @@ -0,0 +1,176 @@ + + + + + diff --git a/src/views/mnt/app/form.vue b/src/views/mnt/app/form.vue new file mode 100644 index 0000000..efadb42 --- /dev/null +++ b/src/views/mnt/app/form.vue @@ -0,0 +1,180 @@ + + + + + diff --git a/src/views/mnt/app/index.vue b/src/views/mnt/app/index.vue new file mode 100644 index 0000000..b8632cf --- /dev/null +++ b/src/views/mnt/app/index.vue @@ -0,0 +1,214 @@ + + + + + diff --git a/src/views/mnt/database/form.vue b/src/views/mnt/database/form.vue new file mode 100644 index 0000000..db00ee0 --- /dev/null +++ b/src/views/mnt/database/form.vue @@ -0,0 +1,134 @@ + + + + + diff --git a/src/views/mnt/database/index.vue b/src/views/mnt/database/index.vue new file mode 100644 index 0000000..fdf09c8 --- /dev/null +++ b/src/views/mnt/database/index.vue @@ -0,0 +1,179 @@ + + + + + diff --git a/src/views/mnt/deploy/deploy.vue b/src/views/mnt/deploy/deploy.vue new file mode 100644 index 0000000..615c113 --- /dev/null +++ b/src/views/mnt/deploy/deploy.vue @@ -0,0 +1,217 @@ + + + + + diff --git a/src/views/mnt/deploy/form.vue b/src/views/mnt/deploy/form.vue new file mode 100644 index 0000000..2a70411 --- /dev/null +++ b/src/views/mnt/deploy/form.vue @@ -0,0 +1,132 @@ + + + + diff --git a/src/views/mnt/deploy/index.vue b/src/views/mnt/deploy/index.vue new file mode 100644 index 0000000..8857ff8 --- /dev/null +++ b/src/views/mnt/deploy/index.vue @@ -0,0 +1,313 @@ + + + + + diff --git a/src/views/mnt/deploy/sysRestore.vue b/src/views/mnt/deploy/sysRestore.vue new file mode 100644 index 0000000..fcd6b4f --- /dev/null +++ b/src/views/mnt/deploy/sysRestore.vue @@ -0,0 +1,152 @@ + + + + + diff --git a/src/views/mnt/deployHistory/form.vue b/src/views/mnt/deployHistory/form.vue new file mode 100644 index 0000000..99118d3 --- /dev/null +++ b/src/views/mnt/deployHistory/form.vue @@ -0,0 +1,133 @@ + + + + + diff --git a/src/views/mnt/deployHistory/index.vue b/src/views/mnt/deployHistory/index.vue new file mode 100644 index 0000000..99771ce --- /dev/null +++ b/src/views/mnt/deployHistory/index.vue @@ -0,0 +1,163 @@ + + + + + diff --git a/src/views/mnt/serverDeploy/form.vue b/src/views/mnt/serverDeploy/form.vue new file mode 100644 index 0000000..3baf118 --- /dev/null +++ b/src/views/mnt/serverDeploy/form.vue @@ -0,0 +1,137 @@ + + + + + diff --git a/src/views/mnt/serverDeploy/index.vue b/src/views/mnt/serverDeploy/index.vue new file mode 100644 index 0000000..de00d4d --- /dev/null +++ b/src/views/mnt/serverDeploy/index.vue @@ -0,0 +1,183 @@ + + + + + From e096447c2ec941563ae78cc114c60e915f4e635f Mon Sep 17 00:00:00 2001 From: dqjdda <201507802@qq.com> Date: Wed, 20 Nov 2019 21:12:47 +0800 Subject: [PATCH 02/11] =?UTF-8?q?vue=20cli3=20=E6=94=B9=E9=80=A0=E5=AE=8C?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .babelrc | 17 - .editorconfig | 2 +- .env.development | 7 + .env.production | 4 + .eslintignore | 3 +- .eslintrc.js | 8 +- .gitignore | 11 +- .postcssrc.js | 10 - .travis.yml | 2 +- LICENSE | 204 +----------- babel.config.js | 5 + build/build.js | 67 ---- build/check-versions.js | 62 ---- build/index.js | 27 ++ build/utils.js | 108 ------- build/vue-loader.conf.js | 5 - build/webpack.base.conf.js | 122 ------- build/webpack.dev.conf.js | 98 ------ build/webpack.prod.conf.js | 188 ----------- config/dev.env.js | 9 - config/index.js | 106 ------ config/prod.env.js | 5 - index.html | 22 -- jest.config.js | 24 ++ package.json | 148 ++++----- plopfile.js | 7 + postcss.config.js | 5 + favicon.ico => public/favicon.ico | Bin public/index.html | 15 + src/App.vue | 2 +- src/assets/404_images/404.png | Bin 63580 -> 98071 bytes src/assets/404_images/404_cloud.png | Bin 3054 -> 4766 bytes src/{ => assets}/icons/index.js | 4 +- src/assets/icons/svg/404.svg | 1 + src/{ => assets}/icons/svg/Steve-Jobs.svg | 0 src/{ => assets}/icons/svg/add.svg | 0 src/{ => assets}/icons/svg/alipay.svg | 0 src/{ => assets}/icons/svg/anq.svg | 0 src/assets/icons/svg/bug.svg | 1 + src/{ => assets}/icons/svg/chain.svg | 0 src/assets/icons/svg/chart.svg | 1 + src/assets/icons/svg/clipboard.svg | 1 + src/{ => assets}/icons/svg/codeConsole.svg | 0 src/assets/icons/svg/component.svg | 1 + src/assets/icons/svg/dashboard.svg | 1 + src/{ => assets}/icons/svg/date.svg | 0 src/{ => assets}/icons/svg/dept.svg | 0 src/{ => assets}/icons/svg/dev.svg | 0 src/{ => assets}/icons/svg/develop.svg | 0 src/{ => assets}/icons/svg/dictionary.svg | 0 src/assets/icons/svg/documentation.svg | 1 + src/assets/icons/svg/drag.svg | 1 + src/assets/icons/svg/edit.svg | 1 + src/assets/icons/svg/education.svg | 1 + src/{ => assets}/icons/svg/email.svg | 0 src/{ => assets}/icons/svg/error.svg | 0 src/assets/icons/svg/example.svg | 1 + src/assets/icons/svg/excel.svg | 1 + src/assets/icons/svg/exit-fullscreen.svg | 1 + src/assets/icons/svg/eye-open.svg | 1 + src/assets/icons/svg/eye.svg | 1 + src/assets/icons/svg/form.svg | 1 + src/assets/icons/svg/fullscreen.svg | 1 + src/{ => assets}/icons/svg/fwb.svg | 0 src/{ => assets}/icons/svg/github.svg | 0 src/{ => assets}/icons/svg/gonggao.svg | 0 src/assets/icons/svg/guide.svg | 1 + src/{ => assets}/icons/svg/icon.svg | 0 src/{ => assets}/icons/svg/image.svg | 0 src/{ => assets}/icons/svg/index.svg | 0 src/assets/icons/svg/international.svg | 1 + src/{ => assets}/icons/svg/ipvisits.svg | 0 src/{ => assets}/icons/svg/java.svg | 0 src/assets/icons/svg/language.svg | 1 + src/assets/icons/svg/link.svg | 1 + src/assets/icons/svg/list.svg | 1 + src/{ => assets}/icons/svg/lock.svg | 0 src/{ => assets}/icons/svg/log.svg | 0 src/{ => assets}/icons/svg/markdown.svg | 0 src/{ => assets}/icons/svg/menu.svg | 0 src/assets/icons/svg/message.svg | 1 + src/assets/icons/svg/money.svg | 1 + src/{ => assets}/icons/svg/monitor.svg | 0 src/assets/icons/svg/nested.svg | 1 + src/{ => assets}/icons/svg/password.svg | 0 src/assets/icons/svg/pdf.svg | 1 + src/assets/icons/svg/people.svg | 1 + src/{ => assets}/icons/svg/peoples.svg | 0 src/{ => assets}/icons/svg/permission.svg | 0 src/{ => assets}/icons/svg/phone.svg | 0 src/{ => assets}/icons/svg/qiniu.svg | 0 src/assets/icons/svg/qq.svg | 1 + src/{ => assets}/icons/svg/redis.svg | 0 src/{ => assets}/icons/svg/role.svg | 0 src/{ => assets}/icons/svg/run.svg | 0 src/{ => assets}/icons/svg/running.svg | 0 src/{ => assets}/icons/svg/search.svg | 0 src/assets/icons/svg/shopping.svg | 1 + src/assets/icons/svg/size.svg | 1 + src/assets/icons/svg/skill.svg | 1 + src/{ => assets}/icons/svg/sqlMonitor.svg | 0 src/assets/icons/svg/star.svg | 1 + src/{ => assets}/icons/svg/swagger.svg | 0 src/{ => assets}/icons/svg/sys-tools.svg | 0 src/{ => assets}/icons/svg/system.svg | 0 src/assets/icons/svg/tab.svg | 1 + src/assets/icons/svg/table.svg | 1 + src/assets/icons/svg/theme.svg | 1 + src/{ => assets}/icons/svg/timing.svg | 0 src/{ => assets}/icons/svg/tools.svg | 0 src/assets/icons/svg/tree-table.svg | 1 + src/assets/icons/svg/tree.svg | 1 + src/{ => assets}/icons/svg/unlock.svg | 0 src/{ => assets}/icons/svg/user.svg | 0 src/{ => assets}/icons/svg/user1.svg | 0 src/{ => assets}/icons/svg/validCode.svg | 0 src/{ => assets}/icons/svg/visits.svg | 0 src/{ => assets}/icons/svg/web.svg | 0 src/assets/icons/svg/wechat.svg | 1 + src/{ => assets}/icons/svg/weixin.svg | 0 src/assets/icons/svg/zip.svg | 1 + src/{ => assets}/icons/svg/zujian.svg | 0 src/{ => assets}/icons/svgo.yml | 0 src/assets/{avatar => images}/avatar.png | Bin src/assets/{logo => images}/logo.png | Bin src/assets/styles/btn.scss | 99 ++++++ src/assets/styles/eladmin.scss | 96 ++++++ src/assets/styles/element-ui.scss | 79 +++++ .../styles/element-variables.scss | 2 +- src/assets/styles/index.scss | 182 +++++++++++ src/assets/styles/mixin.scss | 66 ++++ src/{ => assets}/styles/sidebar.scss | 160 ++++++--- src/{ => assets}/styles/transition.scss | 10 +- src/{ => assets}/styles/variables.scss | 16 +- src/components/Breadcrumb/index.vue | 49 +-- .../Echarts}/BarChart.vue | 2 +- .../Echarts}/Category.vue | 2 +- .../Echarts}/Funnel.vue | 2 +- .../Echarts}/Gauge.vue | 2 +- .../Echarts}/Graph.vue | 2 +- .../Echarts}/HeatMap.vue | 2 +- .../Echarts}/Line3D.vue | 2 +- .../Echarts}/PieChart.vue | 2 +- .../Echarts}/Point.vue | 2 +- .../Echarts}/RadarChart.vue | 2 +- .../dashboard => components/Echarts}/Rich.vue | 2 +- .../Echarts}/Sankey.vue | 2 +- .../Echarts}/Scatter.vue | 2 +- .../Echarts}/Sunburst.vue | 2 +- .../Echarts}/ThemeRiver.vue | 2 +- src/components/Github/index.vue | 2 +- src/components/Hamburger/index.vue | 29 +- src/components/HeaderSearch/index.vue | 180 +++++++++++ src/components/IconSelect/index.vue | 2 +- src/components/IconSelect/requireIcons.js | 2 +- src/components/Iframe/index.vue | 2 +- src/components/Pagination/index.vue | 101 ++++++ src/components/PanThumb/index.vue | 2 +- src/components/RightPanel/index.vue | 132 ++++---- src/components/Screenfull/index.vue | 58 ++-- src/components/SizeSelect/index.vue | 57 ++++ src/components/SvgIcon/index.vue | 23 +- src/components/TextHoverEffect/Mallki.vue | 113 ------- src/components/ThemePicker/index.vue | 175 ++++++++++ src/components/YamlEdit/index.vue | 2 +- src/layout/components/AppMain.vue | 47 +-- src/layout/components/Navbar.vue | 174 +++++----- src/layout/components/Settings/index.vue | 58 ++-- src/layout/components/Sidebar/FixiOSBug.js | 10 +- src/layout/components/Sidebar/Link.vue | 11 +- src/layout/components/Sidebar/Logo.vue | 84 +++-- src/layout/components/Sidebar/SidebarItem.vue | 54 ++-- src/layout/components/Sidebar/index.vue | 57 +++- .../components/TagsView/ScrollPane.vue} | 35 +- .../{TagsView.vue => TagsView/index.vue} | 67 ++-- src/layout/components/index.js | 6 +- src/layout/{Layout.vue => index.vue} | 19 +- src/layout/mixin/ResizeHandler.js | 30 +- src/main.js | 32 +- src/router/index.js | 8 +- src/router/routers.js | 38 +-- src/{config/index.js => settings.js} | 43 +-- src/store/getters.js | 1 + src/store/index.js | 28 +- src/store/modules/api.js | 2 +- src/store/modules/app.js | 81 +++-- src/store/modules/permission.js | 2 +- src/store/modules/settings.js | 60 ++-- src/store/modules/tagsView.js | 303 +++++++++--------- src/styles/description.scss | 17 - src/styles/element-ui.scss | 29 -- src/styles/index.scss | 173 ---------- src/styles/mixin.scss | 27 -- src/utils/auth.js | 2 +- src/utils/clipboard.js | 4 +- src/utils/export2Excel.js | 206 ------------ src/utils/export2Zip.js | 24 -- src/utils/get-page-title.js | 10 + src/utils/index.js | 295 ++++++++++++++--- src/utils/open-window.js | 25 ++ src/utils/permission.js | 3 +- src/utils/request.js | 4 +- src/utils/scroll-to.js | 58 ++++ src/utils/validate.js | 84 ++++- src/views/components/Echarts.vue | 151 +++++++++ src/views/components/Editor.vue | 4 +- src/views/components/IconSelect.vue | 70 ---- src/views/components/MarkDown.vue | 2 +- src/views/components/YamlEdit.vue | 2 +- src/views/components/icons/element-icons.js | 74 +++++ src/views/components/icons/index.vue | 91 ++++++ src/views/components/icons/svg-icons.js | 10 + src/views/dashboard/LineChart.vue | 2 +- src/views/dashboard/PanelGroup.vue | 8 +- src/views/features/401.vue | 28 +- src/views/features/404.vue | 3 - src/views/features/redirect.vue | 2 +- src/views/generator/config.vue | 69 ++-- src/views/generator/index.vue | 13 +- src/views/home.vue | 102 +++--- src/views/login.vue | 18 +- src/views/monitor/log/errorLog.vue | 15 +- src/views/monitor/log/index.vue | 15 +- src/views/monitor/log/search.vue | 12 +- src/views/monitor/online/index.vue | 23 +- src/views/monitor/redis/index.vue | 17 +- src/views/monitor/server/form.vue | 16 +- src/views/monitor/server/index.vue | 49 +-- src/views/monitor/sql/index.vue | 2 +- src/views/nested/menu1/index.vue | 2 +- src/views/nested/menu1/menu1-1/index.vue | 4 +- src/views/nested/menu1/menu1-2/index.vue | 2 +- src/views/nested/menu2/index.vue | 2 +- src/views/system/dept/form.vue | 2 +- src/views/system/dept/index.vue | 35 +- src/views/system/dict/form.vue | 4 +- src/views/system/dict/index.vue | 31 +- src/views/system/dictDetail/form.vue | 6 +- src/views/system/dictDetail/index.vue | 26 +- src/views/system/job/form.vue | 4 +- src/views/system/job/index.vue | 38 ++- src/views/system/menu/form.vue | 19 +- src/views/system/menu/index.vue | 34 +- src/views/system/role/form.vue | 11 +- src/views/system/role/index.vue | 45 +-- src/views/system/timing/index.vue | 54 ++-- src/views/system/timing/log.vue | 31 +- src/views/system/user/center.vue | 22 +- src/views/system/user/center/updateEmail.vue | 6 +- src/views/system/user/center/updatePass.vue | 6 +- src/views/system/user/form.vue | 10 +- src/views/system/user/index.vue | 46 +-- src/views/tools/aliPay/config.vue | 12 +- src/views/tools/aliPay/index.vue | 5 +- src/views/tools/aliPay/toPay.vue | 6 +- src/views/tools/email/config.vue | 10 +- src/views/tools/email/index.vue | 5 +- src/views/tools/email/send.vue | 11 +- src/views/tools/picture/index.vue | 45 +-- src/views/tools/storage/index.vue | 5 +- src/views/tools/storage/local/form.vue | 9 +- src/views/tools/storage/local/index.vue | 58 ++-- src/views/tools/storage/qiniu/form.vue | 13 +- src/views/tools/storage/qiniu/index.vue | 43 +-- src/views/tools/swagger/index.vue | 2 +- static/.gitkeep | 0 vue.config.js | 130 ++++++++ 267 files changed, 3678 insertions(+), 3130 deletions(-) delete mode 100644 .babelrc create mode 100644 .env.development create mode 100644 .env.production delete mode 100644 .postcssrc.js create mode 100644 babel.config.js delete mode 100644 build/build.js delete mode 100644 build/check-versions.js create mode 100644 build/index.js delete mode 100644 build/utils.js delete mode 100644 build/vue-loader.conf.js delete mode 100644 build/webpack.base.conf.js delete mode 100644 build/webpack.dev.conf.js delete mode 100644 build/webpack.prod.conf.js delete mode 100644 config/dev.env.js delete mode 100644 config/index.js delete mode 100644 config/prod.env.js delete mode 100644 index.html create mode 100644 jest.config.js create mode 100644 plopfile.js create mode 100644 postcss.config.js rename favicon.ico => public/favicon.ico (100%) create mode 100644 public/index.html rename src/{ => assets}/icons/index.js (79%) create mode 100644 src/assets/icons/svg/404.svg rename src/{ => assets}/icons/svg/Steve-Jobs.svg (100%) rename src/{ => assets}/icons/svg/add.svg (100%) rename src/{ => assets}/icons/svg/alipay.svg (100%) rename src/{ => assets}/icons/svg/anq.svg (100%) create mode 100644 src/assets/icons/svg/bug.svg rename src/{ => assets}/icons/svg/chain.svg (100%) create mode 100644 src/assets/icons/svg/chart.svg create mode 100644 src/assets/icons/svg/clipboard.svg rename src/{ => assets}/icons/svg/codeConsole.svg (100%) create mode 100644 src/assets/icons/svg/component.svg create mode 100644 src/assets/icons/svg/dashboard.svg rename src/{ => assets}/icons/svg/date.svg (100%) rename src/{ => assets}/icons/svg/dept.svg (100%) rename src/{ => assets}/icons/svg/dev.svg (100%) rename src/{ => assets}/icons/svg/develop.svg (100%) rename src/{ => assets}/icons/svg/dictionary.svg (100%) create mode 100644 src/assets/icons/svg/documentation.svg create mode 100644 src/assets/icons/svg/drag.svg create mode 100644 src/assets/icons/svg/edit.svg create mode 100644 src/assets/icons/svg/education.svg rename src/{ => assets}/icons/svg/email.svg (100%) rename src/{ => assets}/icons/svg/error.svg (100%) create mode 100644 src/assets/icons/svg/example.svg create mode 100644 src/assets/icons/svg/excel.svg create mode 100644 src/assets/icons/svg/exit-fullscreen.svg create mode 100644 src/assets/icons/svg/eye-open.svg create mode 100644 src/assets/icons/svg/eye.svg create mode 100644 src/assets/icons/svg/form.svg create mode 100644 src/assets/icons/svg/fullscreen.svg rename src/{ => assets}/icons/svg/fwb.svg (100%) rename src/{ => assets}/icons/svg/github.svg (100%) rename src/{ => assets}/icons/svg/gonggao.svg (100%) create mode 100644 src/assets/icons/svg/guide.svg rename src/{ => assets}/icons/svg/icon.svg (100%) rename src/{ => assets}/icons/svg/image.svg (100%) rename src/{ => assets}/icons/svg/index.svg (100%) create mode 100644 src/assets/icons/svg/international.svg rename src/{ => assets}/icons/svg/ipvisits.svg (100%) rename src/{ => assets}/icons/svg/java.svg (100%) create mode 100644 src/assets/icons/svg/language.svg create mode 100644 src/assets/icons/svg/link.svg create mode 100644 src/assets/icons/svg/list.svg rename src/{ => assets}/icons/svg/lock.svg (100%) rename src/{ => assets}/icons/svg/log.svg (100%) rename src/{ => assets}/icons/svg/markdown.svg (100%) rename src/{ => assets}/icons/svg/menu.svg (100%) create mode 100644 src/assets/icons/svg/message.svg create mode 100644 src/assets/icons/svg/money.svg rename src/{ => assets}/icons/svg/monitor.svg (100%) create mode 100644 src/assets/icons/svg/nested.svg rename src/{ => assets}/icons/svg/password.svg (100%) create mode 100644 src/assets/icons/svg/pdf.svg create mode 100644 src/assets/icons/svg/people.svg rename src/{ => assets}/icons/svg/peoples.svg (100%) rename src/{ => assets}/icons/svg/permission.svg (100%) rename src/{ => assets}/icons/svg/phone.svg (100%) rename src/{ => assets}/icons/svg/qiniu.svg (100%) create mode 100644 src/assets/icons/svg/qq.svg rename src/{ => assets}/icons/svg/redis.svg (100%) rename src/{ => assets}/icons/svg/role.svg (100%) rename src/{ => assets}/icons/svg/run.svg (100%) rename src/{ => assets}/icons/svg/running.svg (100%) rename src/{ => assets}/icons/svg/search.svg (100%) create mode 100644 src/assets/icons/svg/shopping.svg create mode 100644 src/assets/icons/svg/size.svg create mode 100644 src/assets/icons/svg/skill.svg rename src/{ => assets}/icons/svg/sqlMonitor.svg (100%) create mode 100644 src/assets/icons/svg/star.svg rename src/{ => assets}/icons/svg/swagger.svg (100%) rename src/{ => assets}/icons/svg/sys-tools.svg (100%) rename src/{ => assets}/icons/svg/system.svg (100%) create mode 100644 src/assets/icons/svg/tab.svg create mode 100644 src/assets/icons/svg/table.svg create mode 100644 src/assets/icons/svg/theme.svg rename src/{ => assets}/icons/svg/timing.svg (100%) rename src/{ => assets}/icons/svg/tools.svg (100%) create mode 100644 src/assets/icons/svg/tree-table.svg create mode 100644 src/assets/icons/svg/tree.svg rename src/{ => assets}/icons/svg/unlock.svg (100%) rename src/{ => assets}/icons/svg/user.svg (100%) rename src/{ => assets}/icons/svg/user1.svg (100%) rename src/{ => assets}/icons/svg/validCode.svg (100%) rename src/{ => assets}/icons/svg/visits.svg (100%) rename src/{ => assets}/icons/svg/web.svg (100%) create mode 100644 src/assets/icons/svg/wechat.svg rename src/{ => assets}/icons/svg/weixin.svg (100%) create mode 100644 src/assets/icons/svg/zip.svg rename src/{ => assets}/icons/svg/zujian.svg (100%) rename src/{ => assets}/icons/svgo.yml (100%) rename src/assets/{avatar => images}/avatar.png (100%) rename src/assets/{logo => images}/logo.png (100%) create mode 100644 src/assets/styles/btn.scss create mode 100644 src/assets/styles/eladmin.scss create mode 100644 src/assets/styles/element-ui.scss rename src/{ => assets}/styles/element-variables.scss (90%) create mode 100644 src/assets/styles/index.scss create mode 100644 src/assets/styles/mixin.scss rename src/{ => assets}/styles/sidebar.scss (50%) rename src/{ => assets}/styles/transition.scss (87%) rename src/{ => assets}/styles/variables.scss (75%) rename src/{views/dashboard => components/Echarts}/BarChart.vue (97%) rename src/{views/dashboard => components/Echarts}/Category.vue (99%) rename src/{views/dashboard => components/Echarts}/Funnel.vue (97%) rename src/{views/dashboard => components/Echarts}/Gauge.vue (95%) rename src/{views/dashboard => components/Echarts}/Graph.vue (96%) rename src/{views/dashboard => components/Echarts}/HeatMap.vue (98%) rename src/{views/dashboard => components/Echarts}/Line3D.vue (96%) rename src/{views/dashboard => components/Echarts}/PieChart.vue (96%) rename src/{views/dashboard => components/Echarts}/Point.vue (97%) rename src/{views/dashboard => components/Echarts}/RadarChart.vue (97%) rename src/{views/dashboard => components/Echarts}/Rich.vue (98%) rename src/{views/dashboard => components/Echarts}/Sankey.vue (96%) rename src/{views/dashboard => components/Echarts}/Scatter.vue (98%) rename src/{views/dashboard => components/Echarts}/Sunburst.vue (96%) rename src/{views/dashboard => components/Echarts}/ThemeRiver.vue (98%) create mode 100644 src/components/HeaderSearch/index.vue create mode 100644 src/components/Pagination/index.vue create mode 100644 src/components/SizeSelect/index.vue delete mode 100644 src/components/TextHoverEffect/Mallki.vue create mode 100644 src/components/ThemePicker/index.vue rename src/{components/ScrollPane/index.vue => layout/components/TagsView/ScrollPane.vue} (73%) rename src/layout/components/{TagsView.vue => TagsView/index.vue} (81%) rename src/layout/{Layout.vue => index.vue} (85%) rename src/{config/index.js => settings.js} (81%) delete mode 100644 src/styles/description.scss delete mode 100644 src/styles/element-ui.scss delete mode 100644 src/styles/index.scss delete mode 100644 src/styles/mixin.scss delete mode 100644 src/utils/export2Excel.js delete mode 100644 src/utils/export2Zip.js create mode 100644 src/utils/get-page-title.js create mode 100644 src/utils/open-window.js create mode 100644 src/utils/scroll-to.js create mode 100644 src/views/components/Echarts.vue delete mode 100644 src/views/components/IconSelect.vue create mode 100644 src/views/components/icons/element-icons.js create mode 100644 src/views/components/icons/index.vue create mode 100644 src/views/components/icons/svg-icons.js delete mode 100644 static/.gitkeep create mode 100644 vue.config.js diff --git a/.babelrc b/.babelrc deleted file mode 100644 index 26c173e..0000000 --- a/.babelrc +++ /dev/null @@ -1,17 +0,0 @@ -{ - "presets": [ - ["env", { - "modules": false, - "targets": { - "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] - } - }], - "stage-2" - ], - "plugins":["transform-vue-jsx", "transform-runtime"], - "env": { - "development":{ - "plugins": ["dynamic-import-node"] - } - } -} diff --git a/.editorconfig b/.editorconfig index ea6e20f..3454886 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,4 +1,4 @@ -# http://editorconfig.org +# https://editorconfig.org root = true [*] diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..660b9bb --- /dev/null +++ b/.env.development @@ -0,0 +1,7 @@ +ENV = 'development' + +# 接口地址 +VUE_APP_BASE_API = 'http://localhost:8000' + +# 是否启用 babel-plugin-dynamic-import-node插件 +VUE_CLI_BABEL_TRANSPILE_MODULES = true diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..bc12c75 --- /dev/null +++ b/.env.production @@ -0,0 +1,4 @@ +ENV = 'production' + +# 接口地址 +VUE_APP_BASE_API = 'https://api.auauz.net' diff --git a/.eslintignore b/.eslintignore index e3a4037..e6529fc 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,3 +1,4 @@ build/*.js -config/*.js src/assets +public +dist diff --git a/.eslintrc.js b/.eslintrc.js index 0e5c28a..c977505 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -21,7 +21,10 @@ module.exports = { "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, @@ -44,7 +47,7 @@ module.exports = { 'curly': [2, 'multi-line'], 'dot-location': [2, 'property'], 'eol-last': 2, - 'eqeqeq': [2, 'allow-null'], + 'eqeqeq': ["error", "always", {"null": "ignore"}], 'generator-star-spacing': [2, { 'before': true, 'after': true @@ -73,7 +76,7 @@ module.exports = { 'no-class-assign': 2, 'no-cond-assign': 2, 'no-const-assign': 2, - 'no-control-regex': 2, + 'no-control-regex': 0, 'no-delete-var': 2, 'no-dupe-args': 2, 'no-dupe-class-members': 2, @@ -193,4 +196,3 @@ module.exports = { 'array-bracket-spacing': [2, 'never'] } } - diff --git a/.gitignore b/.gitignore index 571f0a6..78a752d 100644 --- a/.gitignore +++ b/.gitignore @@ -4,8 +4,11 @@ dist/ npm-debug.log* yarn-debug.log* yarn-error.log* -package-lock.json -yarn.lock +**/*.log + +tests/**/coverage/ +tests/e2e/reports +selenium-debug.log # Editor directories and files .idea @@ -14,3 +17,7 @@ yarn.lock *.ntvs* *.njsproj *.sln +*.local + +package-lock.json +yarn.lock diff --git a/.postcssrc.js b/.postcssrc.js deleted file mode 100644 index eee3e92..0000000 --- a/.postcssrc.js +++ /dev/null @@ -1,10 +0,0 @@ -// https://github.com/michael-ciniawsky/postcss-load-config - -module.exports = { - "plugins": { - "postcss-import": {}, - "postcss-url": {}, - // to edit target browsers: use "browserslist" field in package.json - "autoprefixer": {} - } -} diff --git a/.travis.yml b/.travis.yml index 16574d9..f4be7a0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ language: node_js -node_js: stable +node_js: 10 script: npm run test notifications: email: false diff --git a/LICENSE b/LICENSE index 91e3c25..6151575 100644 --- a/LICENSE +++ b/LICENSE @@ -1,191 +1,21 @@ -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ +MIT License -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION +Copyright (c) 2017-present PanJiaChen -1. Definitions. +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: -"License" shall mean the terms and conditions for use, reproduction, and -distribution as defined by Sections 1 through 9 of this document. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. -"Licensor" shall mean the copyright owner or entity authorized by the copyright -owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities -that control, are controlled by, or are under common control with that entity. -For the purposes of this definition, "control" means (i) the power, direct or -indirect, to cause the direction or management of such entity, whether by -contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the -outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising -permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including -but not limited to software source code, documentation source, and configuration -files. - -"Object" form shall mean any form resulting from mechanical transformation or -translation of a Source form, including but not limited to compiled object code, -generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made -available under the License, as indicated by a copyright notice that is included -in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that -is based on (or derived from) the Work and for which the editorial revisions, -annotations, elaborations, or other modifications represent, as a whole, an -original work of authorship. For the purposes of this License, Derivative Works -shall not include works that remain separable from, or merely link (or bind by -name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version -of the Work and any modifications or additions to that Work or Derivative Works -thereof, that is intentionally submitted to Licensor for inclusion in the Work -by the copyright owner or by an individual or Legal Entity authorized to submit -on behalf of the copyright owner. For the purposes of this definition, -"submitted" means any form of electronic, verbal, or written communication sent -to the Licensor or its representatives, including but not limited to -communication on electronic mailing lists, source code control systems, and -issue tracking systems that are managed by, or on behalf of, the Licensor for -the purpose of discussing and improving the Work, but excluding communication -that is conspicuously marked or otherwise designated in writing by the copyright -owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf -of whom a Contribution has been received by Licensor and subsequently -incorporated within the Work. - -2. Grant of Copyright License. - -Subject to the terms and conditions of this License, each Contributor hereby -grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, -irrevocable copyright license to reproduce, prepare Derivative Works of, -publicly display, publicly perform, sublicense, and distribute the Work and such -Derivative Works in Source or Object form. - -3. Grant of Patent License. - -Subject to the terms and conditions of this License, each Contributor hereby -grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, -irrevocable (except as stated in this section) patent license to make, have -made, use, offer to sell, sell, import, and otherwise transfer the Work, where -such license applies only to those patent claims licensable by such Contributor -that are necessarily infringed by their Contribution(s) alone or by combination -of their Contribution(s) with the Work to which such Contribution(s) was -submitted. If You institute patent litigation against any entity (including a -cross-claim or counterclaim in a lawsuit) alleging that the Work or a -Contribution incorporated within the Work constitutes direct or contributory -patent infringement, then any patent licenses granted to You under this License -for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. - -You may reproduce and distribute copies of the Work or Derivative Works thereof -in any medium, with or without modifications, and in Source or Object form, -provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of -this License; and -You must cause any modified files to carry prominent notices stating that You -changed the files; and -You must retain, in the Source form of any Derivative Works that You distribute, -all copyright, patent, trademark, and attribution notices from the Source form -of the Work, excluding those notices that do not pertain to any part of the -Derivative Works; and -If the Work includes a "NOTICE" text file as part of its distribution, then any -Derivative Works that You distribute must include a readable copy of the -attribution notices contained within such NOTICE file, excluding those notices -that do not pertain to any part of the Derivative Works, in at least one of the -following places: within a NOTICE text file distributed as part of the -Derivative Works; within the Source form or documentation, if provided along -with the Derivative Works; or, within a display generated by the Derivative -Works, if and wherever such third-party notices normally appear. The contents of -the NOTICE file are for informational purposes only and do not modify the -License. You may add Your own attribution notices within Derivative Works that -You distribute, alongside or as an addendum to the NOTICE text from the Work, -provided that such additional attribution notices cannot be construed as -modifying the License. -You may add Your own copyright statement to Your modifications and may provide -additional or different license terms and conditions for use, reproduction, or -distribution of Your modifications, or for any such Derivative Works as a whole, -provided Your use, reproduction, and distribution of the Work otherwise complies -with the conditions stated in this License. - -5. Submission of Contributions. - -Unless You explicitly state otherwise, any Contribution intentionally submitted -for inclusion in the Work by You to the Licensor shall be under the terms and -conditions of this License, without any additional terms or conditions. -Notwithstanding the above, nothing herein shall supersede or modify the terms of -any separate license agreement you may have executed with Licensor regarding -such Contributions. - -6. Trademarks. - -This License does not grant permission to use the trade names, trademarks, -service marks, or product names of the Licensor, except as required for -reasonable and customary use in describing the origin of the Work and -reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. - -Unless required by applicable law or agreed to in writing, Licensor provides the -Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, -including, without limitation, any warranties or conditions of TITLE, -NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are -solely responsible for determining the appropriateness of using or -redistributing the Work and assume any risks associated with Your exercise of -permissions under this License. - -8. Limitation of Liability. - -In no event and under no legal theory, whether in tort (including negligence), -contract, or otherwise, unless required by applicable law (such as deliberate -and grossly negligent acts) or agreed to in writing, shall any Contributor be -liable to You for damages, including any direct, indirect, special, incidental, -or consequential damages of any character arising as a result of this License or -out of the use or inability to use the Work (including but not limited to -damages for loss of goodwill, work stoppage, computer failure or malfunction, or -any and all other commercial damages or losses), even if such Contributor has -been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. - -While redistributing the Work or Derivative Works thereof, You may choose to -offer, and charge a fee for, acceptance of support, warranty, indemnity, or -other liability obligations and/or rights consistent with this License. However, -in accepting such obligations, You may act only on Your own behalf and on Your -sole responsibility, not on behalf of any other Contributor, and only if You -agree to indemnify, defend, and hold each Contributor harmless for any liability -incurred by, or claims asserted against, such Contributor by reason of your -accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work - -To apply the Apache License to your work, attach the following boilerplate -notice, with the fields enclosed by brackets "{}" replaced with your own -identifying information. (Don't include the brackets!) The text should be -enclosed in the appropriate comment syntax for the file format. We also -recommend that a file or class name and description of purpose be included on -the same "printed page" as the copyright notice for easier identification within -third-party archives. - - Copyright 2018 Elune - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..ba17966 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets: [ + '@vue/app' + ] +} diff --git a/build/build.js b/build/build.js deleted file mode 100644 index 34c71a5..0000000 --- a/build/build.js +++ /dev/null @@ -1,67 +0,0 @@ -'use strict' -require('./check-versions')() - -const ora = require('ora') -const rm = require('rimraf') -const path = require('path') -const chalk = require('chalk') -const webpack = require('webpack') -const config = require('../config') -const webpackConfig = require('./webpack.prod.conf') -var connect = require('connect') -var serveStatic = require('serve-static') - -const spinner = ora( - 'building for ' + process.env.env_config + ' environment...' -) -spinner.start() - -rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { - if (err) throw err - webpack(webpackConfig, (err, stats) => { - spinner.stop() - if (err) throw err - process.stdout.write( - stats.toString({ - colors: true, - modules: false, - children: false, - chunks: false, - chunkModules: false - }) + '\n\n' - ) - - if (stats.hasErrors()) { - console.log(chalk.red(' Build failed with errors.\n')) - process.exit(1) - } - - console.log(chalk.cyan(' Build complete.\n')) - console.log( - chalk.yellow( - ' Tip: built files are meant to be served over an HTTP server.\n' + - " Opening index.html over file:// won't work.\n" - ) - ) - - if (process.env.npm_config_preview) { - const port = 9526 - const host = 'http://localhost:' + port - const basePath = config.build.assetsPublicPath - const app = connect() - - app.use( - basePath, - serveStatic('./dist', { - index: ['index.html', '/'] - }) - ) - - app.listen(port, function() { - console.log( - chalk.green(`> Listening at http://localhost:${port}${basePath}`) - ) - }) - } - }) -}) diff --git a/build/check-versions.js b/build/check-versions.js deleted file mode 100644 index c29c7e7..0000000 --- a/build/check-versions.js +++ /dev/null @@ -1,62 +0,0 @@ -'use strict' -const chalk = require('chalk') -const semver = require('semver') -const packageConfig = require('../package.json') -const shell = require('shelljs') - -function exec(cmd) { - return require('child_process') - .execSync(cmd) - .toString() - .trim() -} - -const versionRequirements = [ - { - name: 'node', - currentVersion: semver.clean(process.version), - versionRequirement: packageConfig.engines.node - } -] - -if (shell.which('npm')) { - versionRequirements.push({ - name: 'npm', - currentVersion: exec('npm --version'), - versionRequirement: packageConfig.engines.npm - }) -} - -module.exports = function() { - const warnings = [] - - for (let i = 0; i < versionRequirements.length; i++) { - const mod = versionRequirements[i] - - if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { - warnings.push( - mod.name + - ': ' + - chalk.red(mod.currentVersion) + - ' should be ' + - chalk.green(mod.versionRequirement) - ) - } - } - - if (warnings.length) { - console.log('') - console.log( - chalk.yellow( - 'To use this template, you must update following to modules:' - ) - ) - - for (let i = 0; i < warnings.length; i++) { - const warning = warnings[i] - console.log(' ' + warning) - } - - process.exit(1) - } -} diff --git a/build/index.js b/build/index.js new file mode 100644 index 0000000..244ff4a --- /dev/null +++ b/build/index.js @@ -0,0 +1,27 @@ +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 publicPath = config.publicPath + + var connect = require('connect') + var serveStatic = require('serve-static') + const app = connect() + + app.use( + publicPath, + serveStatic('./dist', { + index: ['index.html', '/'] + }) + ) + +} else { + run(`vue-cli-service build ${args}`) +} diff --git a/build/utils.js b/build/utils.js deleted file mode 100644 index c96d093..0000000 --- a/build/utils.js +++ /dev/null @@ -1,108 +0,0 @@ -'use strict' -const path = require('path') -const config = require('../config') -const MiniCssExtractPlugin = require('mini-css-extract-plugin') -const packageConfig = require('../package.json') - -exports.assetsPath = function(_path) { - const assetsSubDirectory = - process.env.NODE_ENV === 'production' - ? config.build.assetsSubDirectory - : config.dev.assetsSubDirectory - - return path.posix.join(assetsSubDirectory, _path) -} - -exports.cssLoaders = function(options) { - options = options || {} - - const cssLoader = { - loader: 'css-loader', - options: { - sourceMap: options.sourceMap - } - } - - const postcssLoader = { - loader: 'postcss-loader', - options: { - sourceMap: options.sourceMap - } - } - - // generate loader string to be used with extract text plugin - function generateLoaders(loader, loaderOptions) { - const loaders = [] - - // Extract CSS when that option is specified - // (which is the case during production build) - if (options.extract) { - loaders.push(MiniCssExtractPlugin.loader) - } else { - loaders.push('vue-style-loader') - } - - loaders.push(cssLoader) - - if (options.usePostCSS) { - loaders.push(postcssLoader) - } - - if (loader) { - loaders.push({ - loader: loader + '-loader', - options: Object.assign({}, loaderOptions, { - sourceMap: options.sourceMap - }) - }) - } - - return loaders - } - // https://vue-loader.vuejs.org/en/configurations/extract-css.html - return { - css: generateLoaders(), - postcss: generateLoaders(), - less: generateLoaders('less'), - sass: generateLoaders('sass', { - indentedSyntax: true - }), - scss: generateLoaders('sass'), - stylus: generateLoaders('stylus'), - styl: generateLoaders('stylus') - } -} - -// Generate loaders for standalone style files (outside of .vue) -exports.styleLoaders = function(options) { - const output = [] - const loaders = exports.cssLoaders(options) - - for (const extension in loaders) { - const loader = loaders[extension] - output.push({ - test: new RegExp('\\.' + extension + '$'), - use: loader - }) - } - - return output -} - -exports.createNotifierCallback = () => { - const notifier = require('node-notifier') - - return (severity, errors) => { - if (severity !== 'error') return - - const error = errors[0] - const filename = error.file && error.file.split('!').pop() - - notifier.notify({ - title: packageConfig.name, - message: severity + ': ' + error.name, - subtitle: filename || '', - icon: path.join(__dirname, 'logo.png') - }) - } -} diff --git a/build/vue-loader.conf.js b/build/vue-loader.conf.js deleted file mode 100644 index 5496c93..0000000 --- a/build/vue-loader.conf.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict' - -module.exports = { - //You can set the vue-loader configuration by yourself. -} diff --git a/build/webpack.base.conf.js b/build/webpack.base.conf.js deleted file mode 100644 index 7e8c4fc..0000000 --- a/build/webpack.base.conf.js +++ /dev/null @@ -1,122 +0,0 @@ -'use strict' -const path = require('path') -const utils = require('./utils') -const config = require('../config') -const { VueLoaderPlugin } = require('vue-loader') - -const os = require('os'); -const HappyPack = require('happypack'); -const happThreadPool = HappyPack.ThreadPool({size: os.cpus().length}); - -function resolve(dir) { - return path.join(__dirname, '..', dir) -} - -const createLintingRule = () => ({ - test: /\.(js|vue)$/, - loader: 'eslint-loader', - enforce: 'pre', - include: [resolve('src'), resolve('test')], - options: { - formatter: require('eslint-friendly-formatter'), - emitWarning: !config.dev.showEslintErrorsInOverlay - } -}) - -module.exports = { - cache: true, - context: path.resolve(__dirname, '../'), - entry:["babel-polyfill","./src/main.js"], - output: { - path: config.build.assetsRoot, - filename: '[name].js', - publicPath: - process.env.NODE_ENV === 'production' - ? config.build.assetsPublicPath - : config.dev.assetsPublicPath - }, - resolve: { - modules: [path.resolve(__dirname, '../node_modules')], - extensions: ['.js', '.vue', '.json'], - alias: { - '@': resolve('src'), - api: path.resolve(__dirname, '../src/api') - } - }, - module: { - rules: [ - ...(config.dev.useEslint ? [createLintingRule()] : []), - { - test: /\.vue$/, - loader: 'vue-loader', - options: { - loaders: { - js: 'happypack/loader?id=js' // 将loader换成happypack - } - } - }, - { - test: /\.js$/, - loader: ['happypack/loader?id=js'], // 将loader换成happypack - include: [ - resolve('src') - ], // src是项目开发的目录 - exclude: [path.resolve('../node_modules')] // 不需要编译node_modules下的js - }, - { - test: /\.svg$/, - loader: 'svg-sprite-loader', - include: [resolve('src/icons')], - options: { - symbolId: 'icon-[name]' - } - }, - { - test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, - loader: 'url-loader', - exclude: [resolve('src/icons')], - options: { - limit: 10000, - name: utils.assetsPath('img/[name].[hash:7].[ext]') - } - }, - { - test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, - loader: 'url-loader', - options: { - limit: 10000, - name: utils.assetsPath('media/[name].[hash:7].[ext]') - } - }, - { - test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, - loader: 'url-loader', - options: { - limit: 10000, - name: utils.assetsPath('fonts/[name].[hash:7].[ext]') - } - } - ] - }, - plugins: [ - new VueLoaderPlugin(), - new HappyPack({ - id: 'js', - cache: true, - loaders: ['babel-loader?cacheDirectory=true'], - threadPool: happThreadPool - }) - ], - node: { - // prevent webpack from injecting useless setImmediate polyfill because Vue - // source contains it (although only uses it if it's native). - setImmediate: false, - // prevent webpack from injecting mocks to Node native modules - // that does not make sense for the client - dgram: 'empty', - fs: 'empty', - net: 'empty', - tls: 'empty', - child_process: 'empty' - } -} diff --git a/build/webpack.dev.conf.js b/build/webpack.dev.conf.js deleted file mode 100644 index 26a5584..0000000 --- a/build/webpack.dev.conf.js +++ /dev/null @@ -1,98 +0,0 @@ -'use strict' -const path = require('path') -const utils = require('./utils') -const webpack = require('webpack') -const config = require('../config') -const merge = require('webpack-merge') -const baseWebpackConfig = require('./webpack.base.conf') -const HtmlWebpackPlugin = require('html-webpack-plugin') -const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') -const portfinder = require('portfinder') - -function resolve(dir) { - return path.join(__dirname, '..', dir) -} - -const HOST = process.env.HOST -const PORT = process.env.PORT && Number(process.env.PORT) - -const devWebpackConfig = merge(baseWebpackConfig, { - mode: 'development', - module: { - rules: utils.styleLoaders({ - sourceMap: config.dev.cssSourceMap, - usePostCSS: true - }) - }, - // cheap-module-eval-source-map is faster for development - devtool: config.dev.devtool, - - // these devServer options should be customized in /config/index.js - devServer: { - clientLogLevel: 'warning', - historyApiFallback: true, - hot: true, - compress: true, - host: HOST || config.dev.host, - port: PORT || config.dev.port, - open: config.dev.autoOpenBrowser, - overlay: config.dev.errorOverlay - ? { warnings: false, errors: true } - : false, - publicPath: config.dev.assetsPublicPath, - proxy: config.dev.proxyTable, - quiet: true, // necessary for FriendlyErrorsPlugin - watchOptions: { - poll: config.dev.poll - } - }, - plugins: [ - new webpack.DefinePlugin({ - 'process.env': require('../config/dev.env') - }), - new webpack.HotModuleReplacementPlugin(), - // https://github.com/ampedandwired/html-webpack-plugin - new HtmlWebpackPlugin({ - filename: 'index.html', - template: 'index.html', - inject: true, - favicon: resolve('favicon.ico'), - title: 'vue-element-admin', - templateParameters: { - BASE_URL: config.dev.assetsPublicPath + config.dev.assetsSubDirectory, - }, - }), - ] -}) - -module.exports = new Promise((resolve, reject) => { - portfinder.basePort = process.env.PORT || config.dev.port - portfinder.getPort((err, port) => { - if (err) { - reject(err) - } else { - // publish the new Port, necessary for e2e tests - process.env.PORT = port - // add port to devServer config - devWebpackConfig.devServer.port = port - - // Add FriendlyErrorsPlugin - devWebpackConfig.plugins.push( - new FriendlyErrorsPlugin({ - compilationSuccessInfo: { - messages: [ - `Your application is running here: http://${ - devWebpackConfig.devServer.host - }:${port}` - ] - }, - onErrors: config.dev.notifyOnErrors - ? utils.createNotifierCallback() - : undefined - }) - ) - - resolve(devWebpackConfig) - } - }) -}) diff --git a/build/webpack.prod.conf.js b/build/webpack.prod.conf.js deleted file mode 100644 index 946a134..0000000 --- a/build/webpack.prod.conf.js +++ /dev/null @@ -1,188 +0,0 @@ -'use strict' -const path = require('path') -const utils = require('./utils') -const webpack = require('webpack') -const config = require('../config') -const merge = require('webpack-merge') -const baseWebpackConfig = require('./webpack.base.conf') -const CopyWebpackPlugin = require('copy-webpack-plugin') -const HtmlWebpackPlugin = require('html-webpack-plugin') -const ScriptExtHtmlWebpackPlugin = require('script-ext-html-webpack-plugin') -const MiniCssExtractPlugin = require('mini-css-extract-plugin') -const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin') -const UglifyJsPlugin = require('uglifyjs-webpack-plugin') - -function resolve(dir) { - return path.join(__dirname, '..', dir) -} - -const env = require('../config/' + process.env.env_config + '.env') - -// For NamedChunksPlugin -const seen = new Set() -const nameLength = 4 - -const webpackConfig = merge(baseWebpackConfig, { - mode: 'production', - module: { - rules: utils.styleLoaders({ - sourceMap: config.build.productionSourceMap, - extract: true, - usePostCSS: true - }) - }, - devtool: config.build.productionSourceMap ? config.build.devtool : false, - output: { - path: config.build.assetsRoot, - filename: utils.assetsPath('js/[name].[chunkhash:8].js'), - chunkFilename: utils.assetsPath('js/[name].[chunkhash:8].js') - }, - plugins: [ - // http://vuejs.github.io/vue-loader/en/workflow/production.html - new webpack.DefinePlugin({ - 'process.env': env - }), - // extract css into its own file - new MiniCssExtractPlugin({ - filename: utils.assetsPath('css/[name].[contenthash:8].css'), - chunkFilename: utils.assetsPath('css/[name].[contenthash:8].css') - }), - // generate dist index.html with correct asset hash for caching. - // you can customize output by editing /index.html - // see https://github.com/ampedandwired/html-webpack-plugin - new HtmlWebpackPlugin({ - filename: config.build.index, - template: 'index.html', - inject: true, - favicon: resolve('favicon.ico'), - title: 'vue-element-admin', - templateParameters: { - BASE_URL: config.build.assetsPublicPath + config.build.assetsSubDirectory, - }, - minify: { - removeComments: true, - collapseWhitespace: true, - removeAttributeQuotes: true - // more options: - // https://github.com/kangax/html-minifier#options-quick-reference - } - // default sort mode uses toposort which cannot handle cyclic deps - // in certain cases, and in webpack 4, chunk order in HTML doesn't - // matter anyway - }), - new ScriptExtHtmlWebpackPlugin({ - //`runtime` must same as runtimeChunk name. default is `runtime` - inline: /runtime\..*\.js$/ - }), - // keep chunk.id stable when chunk has no name - new webpack.NamedChunksPlugin(chunk => { - if (chunk.name) { - return chunk.name - } - const modules = Array.from(chunk.modulesIterable) - if (modules.length > 1) { - const hash = require('hash-sum') - const joinedHash = hash(modules.map(m => m.id).join('_')) - let len = nameLength - while (seen.has(joinedHash.substr(0, len))) len++ - seen.add(joinedHash.substr(0, len)) - return `chunk-${joinedHash.substr(0, len)}` - } else { - return modules[0].id - } - }), - // keep module.id stable when vender modules does not change - new webpack.HashedModuleIdsPlugin(), - // copy custom static assets - new CopyWebpackPlugin([ - { - from: path.resolve(__dirname, '../static'), - to: config.build.assetsSubDirectory, - ignore: ['.*'] - } - ]) - ], - optimization: { - splitChunks: { - chunks: 'all', - cacheGroups: { - libs: { - name: 'chunk-libs', - test: /[\\/]node_modules[\\/]/, - priority: 10, - chunks: 'initial' // 只打包初始时依赖的第三方 - }, - elementUI: { - name: 'chunk-elementUI', // 单独将 elementUI 拆包 - priority: 20, // 权重要大于 libs 和 app 不然会被打包进 libs 或者 app - test: /[\\/]node_modules[\\/]element-ui[\\/]/ - }, - commons: { - name: 'chunk-commons', - test: resolve('src/components'), // 可自定义拓展你的规则 - minChunks: 3, // 最小公用次数 - priority: 5, - reuseExistingChunk: true - } - } - }, - runtimeChunk: 'single', - minimizer: [ - new UglifyJsPlugin({ - uglifyOptions: { - mangle: { - safari10: true - } - }, - sourceMap: config.build.productionSourceMap, - cache: true, - parallel: true - }), - // Compress extracted CSS. We are using this plugin so that possible - // duplicated CSS from different components can be deduped. - new OptimizeCSSAssetsPlugin() - ] - } -}) - -if (config.build.productionGzip) { - const CompressionWebpackPlugin = require('compression-webpack-plugin') - - webpackConfig.plugins.push( - new CompressionWebpackPlugin({ - asset: '[path].gz[query]', - algorithm: 'gzip', - test: new RegExp( - '\\.(' + config.build.productionGzipExtensions.join('|') + ')$' - ), - threshold: 10240, - minRatio: 0.8 - }) - ) -} - -if (config.build.generateAnalyzerReport || config.build.bundleAnalyzerReport) { - const BundleAnalyzerPlugin = require('webpack-bundle-analyzer') - .BundleAnalyzerPlugin - - if (config.build.bundleAnalyzerReport) { - webpackConfig.plugins.push( - new BundleAnalyzerPlugin({ - analyzerPort: 8080, - generateStatsFile: false - }) - ) - } - - if (config.build.generateAnalyzerReport) { - webpackConfig.plugins.push( - new BundleAnalyzerPlugin({ - analyzerMode: 'static', - reportFilename: 'bundle-report.html', - openAnalyzer: false - }) - ) - } -} - -module.exports = webpackConfig diff --git a/config/dev.env.js b/config/dev.env.js deleted file mode 100644 index 0115503..0000000 --- a/config/dev.env.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict' -const merge = require('webpack-merge') -const prodEnv = require('./prod.env') - -module.exports = merge(prodEnv, { - NODE_ENV: '"development"', - BASE_API: '"http://localhost:8000"' - // BASE_API: '"https://api.auauz.net"' -}) diff --git a/config/index.js b/config/index.js deleted file mode 100644 index 48350f5..0000000 --- a/config/index.js +++ /dev/null @@ -1,106 +0,0 @@ -'use strict' -// Template version: 1.2.6 -const devEnv = require('./dev.env') -// 获取接口地址 -const base_url = devEnv.BASE_API.replace(/"/g,'') -const path = require('path') -module.exports = { - dev: { - // Paths - assetsSubDirectory: 'static', - assetsPublicPath: '/', - // 配置代理 - proxyTable: { - '/auth': { - // 测试环境 - target: base_url, - secure: true, - changeOrigin: true, - pathRewrite: { - '^/auth': 'auth' - } - }, - '/api': { - // 测试环境 - target: base_url, - secure: true, - changeOrigin: true, - pathRewrite: { - '^/api': 'api' - } - } - }, - - // Various Dev Server settings - host: 'localhost', // can be overwritten by process.env.HOST - port: 8013, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined - autoOpenBrowser: true, - errorOverlay: true, - notifyOnErrors: false, - poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions- - - // Use Eslint Loader? - // If true, your code will be linted during bundling and - // linting errors and warnings will be shown in the console. - useEslint: true, - // If true, eslint errors and warnings will also be shown in the error overlay - // in the browser. - showEslintErrorsInOverlay: false, - - /** - * Source Maps - */ - - // https://webpack.js.org/configuration/devtool/#development - devtool: 'cheap-source-map', - - // CSS Sourcemaps off by default because relative paths are "buggy" - // with this option, according to the CSS-Loader README - // (https://github.com/webpack/css-loader#sourcemaps) - // In our experience, they generally work as expected, - // just be aware of this issue when enabling this option. - cssSourceMap: false - }, - - build: { - // Template for index.html - index: path.resolve(__dirname, '../dist/index.html'), - - // Paths - assetsRoot: path.resolve(__dirname, '../dist'), - assetsSubDirectory: 'static', - - /** - * You can set by youself according to actual condition - * You will need to set this if you plan to deploy your site under a sub path, - * for example GitHub pages. If you plan to deploy your site to https://foo.github.io/bar/, - * then assetsPublicPath should be set to "/bar/". - * In most cases please use '/' !!! - */ - assetsPublicPath: '/', - - /** - * Source Maps - */ - - productionSourceMap: false, - // https://webpack.js.org/configuration/devtool/#production - devtool: 'source-map', - - // Gzip off by default as many popular static hosts such as - // Surge or Netlify already gzip all static assets for you. - // Before setting to `true`, make sure to: - // npm install --save-dev compression-webpack-plugin - productionGzip: false, - productionGzipExtensions: ['js', 'css'], - - // Run the build command with an extra argument to - // View the bundle analyzer report after build finishes: - // `npm run build --report` - // Set to `true` or `false` to always turn it on or off - bundleAnalyzerReport: process.env.npm_config_report || false, - - // `npm run build:prod --generate_report` - generateAnalyzerReport: process.env.npm_config_generate_report || false - } -} diff --git a/config/prod.env.js b/config/prod.env.js deleted file mode 100644 index 73e8fe1..0000000 --- a/config/prod.env.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict' -module.exports = { - NODE_ENV: '"production"', - BASE_API: '"https://api.auauz.net"' -} diff --git a/index.html b/index.html deleted file mode 100644 index c6b6210..0000000 --- a/index.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - -
-
-
- - - - -
-
-
- - diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..143cdc8 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,24 @@ +module.exports = { + moduleFileExtensions: ['js', 'jsx', 'json', 'vue'], + transform: { + '^.+\\.vue$': 'vue-jest', + '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': + 'jest-transform-stub', + '^.+\\.jsx?$': 'babel-jest' + }, + moduleNameMapper: { + '^@/(.*)$': '/src/$1' + }, + snapshotSerializers: ['jest-serializer-vue'], + testMatch: [ + '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)' + ], + collectCoverageFrom: ['src/utils/**/*.{js,vue}', '!src/utils/auth.js', '!src/utils/request.js', 'src/components/**/*.{js,vue}'], + coverageDirectory: '/tests/unit/coverage', + // 'collectCoverage': true, + 'coverageReporters': [ + 'lcov', + 'text-summary' + ], + testURL: 'http://localhost/' +} diff --git a/package.json b/package.json index 39b17ac..b21afa6 100644 --- a/package.json +++ b/package.json @@ -1,107 +1,95 @@ { "name": "eladmin-web", "version": "2.3.0", + "description": "EL-ADMIN 前端源码", + "author": "Zheng Jie", "license": "Apache-2.0", - "description": "eladmin 前端代码", - "author": "jie ", "scripts": { - "dev": "cross-env BABEL_ENV=development webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", - "build": "cross-env NODE_ENV=production env_config=prod node build/build.js", + "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": "npm run lint", - "precommit": "lint-staged", - "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml" + "test:unit": "jest --clearCache && vue-cli-service test:unit", + "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml", + "new": "plop" }, - "repository": { - "type": "git", - "url": "https://github.com/elunez/eladmin-qd" + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "src/**/*.{js,vue}": [ + "eslint --fix", + "git add" + ] }, "dependencies": { - "@riophae/vue-treeselect": "0.0.38", - "axios": "^0.19.0", - "clipboard": "1.7.1", - "codemirror": "^5.38.0", - "connect": "3.6.6", - "echarts": "^4.1.0", - "echarts-gl": "^1.1.1", - "element-ui": "^2.12.0", - "file-saver": "1.3.8", + "clipboard": "2.0.4", + "@riophae/vue-treeselect": "0.1.0", + "vue-cropper": "0.4.9", + "axios": "0.18.1", + "echarts": "4.2.1", + "fuse.js": "3.4.4", "js-cookie": "2.2.0", - "jsencrypt": "^3.0.0-rc.1", - "jszip": "3.1.5", - "mavon-editor": "^2.7.0", "normalize.css": "7.0.0", "nprogress": "0.2.0", "path-to-regexp": "2.4.0", - "screenfull": "3.3.3", - "vue": "2.5.17", + "screenfull": "4.2.0", + "vue": "2.6.10", "vue-count-to": "1.0.13", - "vue-router": "3.1.3", - "vuex": "3.0.1", + "vue-router": "3.0.2", + "vue-splitpane": "1.0.4", + "vuex": "3.1.0", + "codemirror": "^5.38.0", + "connect": "3.6.6", + "echarts-gl": "^1.1.1", + "element-ui": "^2.12.0", + "file-saver": "1.3.8", + "jsencrypt": "^3.0.0-rc.1", + "jszip": "3.1.5", + "mavon-editor": "^2.7.0", "wangeditor": ">=3.0.0", "xlsx": "^0.11.16" }, "devDependencies": { - "autoprefixer": "8.5.0", - "babel-core": "6.26.3", - "babel-eslint": "8.2.6", - "babel-helper-vue-jsx-merge-props": "2.0.3", - "babel-loader": "7.1.5", - "babel-plugin-dynamic-import-node": "2.0.0", - "babel-plugin-syntax-jsx": "6.18.0", - "babel-plugin-transform-runtime": "6.23.0", - "babel-plugin-transform-vue-jsx": "3.7.0", - "babel-polyfill": "^6.26.0", - "babel-preset-env": "1.7.0", - "babel-preset-stage-2": "6.24.1", - "chalk": "2.4.1", - "copy-webpack-plugin": "4.5.2", - "cross-env": "5.2.0", - "css-loader": "1.0.0", - "eslint": "4.19.1", - "eslint-friendly-formatter": "4.0.1", - "eslint-loader": "2.0.0", - "eslint-plugin-vue": "4.7.1", - "eventsource-polyfill": "0.9.6", - "file-loader": "1.1.11", - "friendly-errors-webpack-plugin": "1.7.0", - "happypack": "^5.0.1", - "html-webpack-plugin": "^3.0.0", - "mini-css-extract-plugin": "0.4.1", - "node-notifier": "5.2.1", - "node-sass": "^4.7.2", - "optimize-css-assets-webpack-plugin": "5.0.0", - "ora": "3.0.0", - "portfinder": "1.0.16", - "postcss-import": "12.0.0", - "postcss-loader": "2.1.6", - "postcss-url": "7.3.2", - "rimraf": "2.6.2", - "sass-loader": "7.0.3", - "script-ext-html-webpack-plugin": "2.0.1", + "@babel/core": "7.0.0", + "@babel/register": "7.0.0", + "@vue/cli-plugin-babel": "3.5.3", + "@vue/cli-plugin-eslint": "3.5.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", + "husky": "1.3.1", + "lint-staged": "8.1.5", + "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", - "semver": "5.5.0", - "shelljs": "^0.8.3", - "svg-sprite-loader": "3.8.0", - "svgo": "1.2.2", - "uglifyjs-webpack-plugin": "1.2.7", - "url-loader": "1.0.1", - "vue-loader": "15.3.0", - "vue-style-loader": "4.1.2", - "vue-template-compiler": "2.5.17", - "webpack": "^4.41.2", - "webpack-bundle-analyzer": "^3.6.0", - "webpack-cli": "^3.3.9", - "webpack-dev-server": "^3.9.0", - "webpack-merge": "^4.2.2" + "serve-static": "^1.13.2", + "svg-sprite-loader": "4.1.3", + "svgo": "1.2.0", + "vue-template-compiler": "2.6.10" }, "engines": { - "node": ">= 6.0.0", + "node": ">=8.9", "npm": ">= 3.0.0" }, "browserslist": [ "> 1%", - "last 2 versions", - "not ie <= 8" + "last 2 versions" ] } diff --git a/plopfile.js b/plopfile.js new file mode 100644 index 0000000..9f3147e --- /dev/null +++ b/plopfile.js @@ -0,0 +1,7 @@ +const viewGenerator = require('./plop-templates/view/prompt') +const componentGenerator = require('./plop-templates/component/prompt') + +module.exports = function(plop) { + plop.setGenerator('view', viewGenerator) + plop.setGenerator('component', componentGenerator) +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..961986e --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,5 @@ +module.exports = { + plugins: { + autoprefixer: {} + } +} diff --git a/favicon.ico b/public/favicon.ico similarity index 100% rename from favicon.ico rename to public/favicon.ico diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..e918500 --- /dev/null +++ b/public/index.html @@ -0,0 +1,15 @@ + + + + + + + + + <%= webpackConfig.name %> + + +
+ + + diff --git a/src/App.vue b/src/App.vue index 721d3a3..ec9032c 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,6 +1,6 @@ diff --git a/src/assets/404_images/404.png b/src/assets/404_images/404.png index 9ec0e39bbab507d41cd977b3338c6190c817e4ab..3d8e2305cc973ad2121403aee4bf08728f76c461 100644 GIT binary patch literal 98071 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 literal 63580 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 S_X0QpqN=2+_(tA5=zjp)(cIYp diff --git a/src/assets/404_images/404_cloud.png b/src/assets/404_images/404_cloud.png index 9ccec138d9a658be2df5b82c8d10e142030d66eb..c6281d09013e0a2c5f8e699a0a6038d9480291e5 100644 GIT binary patch literal 4766 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 literal 3054 zcmaJ@dpy%^8~+)j9Lpi6iHDd|teD5F=-_;qWM){5&6yl?s@OUx!t*kxm`-e+R&0of z7Mb%Qve0DZ5pqmRQuMCpzxVTb-}iIh_x1f;*L8ot*Y&yYf3B<(C^kjVTd#b0B2wT z@Cgq9Rzd;gSZb5UAz?y1$i=}H`1O0;YPm}R04cDO?NM~f#M0#X91Snk&d;M@f#q68)bK>^9#p~_^)E|dJ z2Lyt!2{rz~g{L}C=Bsll>C;sa3hd&w zzMmz|I1)YS$=x2)#QM1TTD`zP;&*xiPOk6G?q$}?)!l^esK1AyI#5wgR=M@Pa2zV{ zudNCJxV&apqw~tK**=sqXJtVC#y~rP4vv6bm_4$mySRC^Q_?W^^6nBoj2a*xM{*s7!_zyQec|0u~7`t z-DX$(CkFWATt%M*eS9G9_+sN=qac+qb7U{9LZHISPq6?Da%XMW<7rp?Afi&*y?<(# zSO-#{1yNt7io&;5>f*E`ZO3}A&xW^5j}M;s@}W>u{igNVkl+h@0#KPa?T4g4$|zUR zM>De+&nyEmjygsT1Sm3xQqOU!jvEf8M!_)t*A!Hvr*rC&pBdsoWjC9>j_qlbU$(iZ zuAv4!s{>ugrFe0=L_gjy4%b6%97Fn9-qkN`b>3#lmp+P6JN3H#%EV}_b$=z(FgE90$nMzUPl&Ci z1zuNo(;;g$iuo7$m#$x=loFf9duh*mbxg{;fbWA}4Ce}q(w6%|-#X-h;9$((c8AZI zoBD;Le3P9F7wIYG+nA-P?tw zLBNJHO)_6BlZ~2H9eo5S7RH^X%cPxC|-1nQyL*_GxkLpz_WKgYCnd`~Zudye) zWt#}n@0Bg9=T@1Tvy53RE*8P7vrp1KuZWb4(qq#vd4FzihmWK4e)jk-{?LJ*r8jF# zU=aXXsT35M_#~lyG;t;D6cSPmo#2D#9%98xlbK_%TYkd`Y>>Da1cL4D9LhFZM6R#PEg#a5vu!yXvXIMgFxv+ zA*tBs&Ts4VUrHO>h@6HzpqF1@RSUc08lw|PDjaziQro0V*=twdy zl0<6BF`^4=2Mw)*GvLKVoex@Vc5K}O8EL`z@qCZ9Uv@dKX^WD%#+nZ{yf3gcz3>Qe zah~K)sa3Fs`K6!4Wi}~+ge1R{-P?Ga?VHGr(17tz^8et-a^_x(u_Lm-X8oNMQlna9Eny78 zNyxp{AA0j?6G!$GP2Y*LRKS*44kobQ%WB^9*Fu}gbby{qnB4f>7mV9%_*|VsV^aFF zLdQ2IsyxLXXj;-k)UqXRfcKaOwB2UbXfB<;lzMi@z1>|zH#bc+MrM;c&Y2u=1N}2nQ`ks$5*5x~}pFRr11cXr0 zEb%1yCoKcDtes=xWO&%umRC6-InZoF)HOHaOb6yenb_ON>9KY9gj<^;l_6@*8XHQh zt;NeztQ*yJ3UBs}ts@7W^9`7zoq=AjU604HDQw-PF^J_GEP@Kfue62CoGIxt+`XRb zJ>@Oh9zlP9XDuLXHm)S!C8OLM2knpW=OkH$sr5c5Kb+V+n3;eJrEX{gwf=ecu4l49 z8?Jlb2@uG57EPvw}xJuFHXGdkbBOa&I`%d#CpQe2uWzTS&9__02 z);=B)HVhGKb=hmvpzQNK#v`N}T@x{X*ly+rY5eISg|@U-e??rJw(eH}s)s#DmRdVk z(0@66cxq**;k&)nG`~oDae8xSU+Vp2$H>s#OXrw(DC7#2#-gn(?f`BS4d6!`VFASXK5iapM0gf(`0}n#8;)S^ zC|fqkEz*HpZ(hlEZ+=i;$@ZO?xL$osvGhrjBK8l`*KlDnIREg(ga_Vd-_SpN)GLL; z^Yt#Iim)ZzgXEUWA_H>Aem&9>T)Q~bEDK(jU$PcpMn*jEuaaNHr@8Oai@Y%8A_0tW zQT}ET*j^+SRKsw?2=nJ-5>Y`i459P>!w zk#|Lz73%1p(MRW$i+Wn$>EWTiNbfm~dA{@u-ix6r;k5!SL8~2mlcb&~Xnyn??z zw_k;+_52bc96S}Is1R|4q< requireContext.keys().map(requireContext) const req = require.context('./svg', false, /\.svg$/) +const requireAll = requireContext => requireContext.keys().map(requireContext) requireAll(req) diff --git a/src/assets/icons/svg/404.svg b/src/assets/icons/svg/404.svg new file mode 100644 index 0000000..6df5019 --- /dev/null +++ b/src/assets/icons/svg/404.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/Steve-Jobs.svg b/src/assets/icons/svg/Steve-Jobs.svg similarity index 100% rename from src/icons/svg/Steve-Jobs.svg rename to src/assets/icons/svg/Steve-Jobs.svg diff --git a/src/icons/svg/add.svg b/src/assets/icons/svg/add.svg similarity index 100% rename from src/icons/svg/add.svg rename to src/assets/icons/svg/add.svg diff --git a/src/icons/svg/alipay.svg b/src/assets/icons/svg/alipay.svg similarity index 100% rename from src/icons/svg/alipay.svg rename to src/assets/icons/svg/alipay.svg diff --git a/src/icons/svg/anq.svg b/src/assets/icons/svg/anq.svg similarity index 100% rename from src/icons/svg/anq.svg rename to src/assets/icons/svg/anq.svg diff --git a/src/assets/icons/svg/bug.svg b/src/assets/icons/svg/bug.svg new file mode 100644 index 0000000..05a150d --- /dev/null +++ b/src/assets/icons/svg/bug.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/chain.svg b/src/assets/icons/svg/chain.svg similarity index 100% rename from src/icons/svg/chain.svg rename to src/assets/icons/svg/chain.svg diff --git a/src/assets/icons/svg/chart.svg b/src/assets/icons/svg/chart.svg new file mode 100644 index 0000000..27728fb --- /dev/null +++ b/src/assets/icons/svg/chart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/clipboard.svg b/src/assets/icons/svg/clipboard.svg new file mode 100644 index 0000000..90923ff --- /dev/null +++ b/src/assets/icons/svg/clipboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/codeConsole.svg b/src/assets/icons/svg/codeConsole.svg similarity index 100% rename from src/icons/svg/codeConsole.svg rename to src/assets/icons/svg/codeConsole.svg diff --git a/src/assets/icons/svg/component.svg b/src/assets/icons/svg/component.svg new file mode 100644 index 0000000..207ada3 --- /dev/null +++ b/src/assets/icons/svg/component.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/dashboard.svg b/src/assets/icons/svg/dashboard.svg new file mode 100644 index 0000000..5317d37 --- /dev/null +++ b/src/assets/icons/svg/dashboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/date.svg b/src/assets/icons/svg/date.svg similarity index 100% rename from src/icons/svg/date.svg rename to src/assets/icons/svg/date.svg diff --git a/src/icons/svg/dept.svg b/src/assets/icons/svg/dept.svg similarity index 100% rename from src/icons/svg/dept.svg rename to src/assets/icons/svg/dept.svg diff --git a/src/icons/svg/dev.svg b/src/assets/icons/svg/dev.svg similarity index 100% rename from src/icons/svg/dev.svg rename to src/assets/icons/svg/dev.svg diff --git a/src/icons/svg/develop.svg b/src/assets/icons/svg/develop.svg similarity index 100% rename from src/icons/svg/develop.svg rename to src/assets/icons/svg/develop.svg diff --git a/src/icons/svg/dictionary.svg b/src/assets/icons/svg/dictionary.svg similarity index 100% rename from src/icons/svg/dictionary.svg rename to src/assets/icons/svg/dictionary.svg diff --git a/src/assets/icons/svg/documentation.svg b/src/assets/icons/svg/documentation.svg new file mode 100644 index 0000000..7043122 --- /dev/null +++ b/src/assets/icons/svg/documentation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/drag.svg b/src/assets/icons/svg/drag.svg new file mode 100644 index 0000000..4185d3c --- /dev/null +++ b/src/assets/icons/svg/drag.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/edit.svg b/src/assets/icons/svg/edit.svg new file mode 100644 index 0000000..d26101f --- /dev/null +++ b/src/assets/icons/svg/edit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/education.svg b/src/assets/icons/svg/education.svg new file mode 100644 index 0000000..7bfb01d --- /dev/null +++ b/src/assets/icons/svg/education.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/email.svg b/src/assets/icons/svg/email.svg similarity index 100% rename from src/icons/svg/email.svg rename to src/assets/icons/svg/email.svg diff --git a/src/icons/svg/error.svg b/src/assets/icons/svg/error.svg similarity index 100% rename from src/icons/svg/error.svg rename to src/assets/icons/svg/error.svg diff --git a/src/assets/icons/svg/example.svg b/src/assets/icons/svg/example.svg new file mode 100644 index 0000000..46f42b5 --- /dev/null +++ b/src/assets/icons/svg/example.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/excel.svg b/src/assets/icons/svg/excel.svg new file mode 100644 index 0000000..74d97b8 --- /dev/null +++ b/src/assets/icons/svg/excel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/exit-fullscreen.svg b/src/assets/icons/svg/exit-fullscreen.svg new file mode 100644 index 0000000..485c128 --- /dev/null +++ b/src/assets/icons/svg/exit-fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/eye-open.svg b/src/assets/icons/svg/eye-open.svg new file mode 100644 index 0000000..88dcc98 --- /dev/null +++ b/src/assets/icons/svg/eye-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/eye.svg b/src/assets/icons/svg/eye.svg new file mode 100644 index 0000000..16ed2d8 --- /dev/null +++ b/src/assets/icons/svg/eye.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/form.svg b/src/assets/icons/svg/form.svg new file mode 100644 index 0000000..dcbaa18 --- /dev/null +++ b/src/assets/icons/svg/form.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/fullscreen.svg b/src/assets/icons/svg/fullscreen.svg new file mode 100644 index 0000000..0e86b6f --- /dev/null +++ b/src/assets/icons/svg/fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/fwb.svg b/src/assets/icons/svg/fwb.svg similarity index 100% rename from src/icons/svg/fwb.svg rename to src/assets/icons/svg/fwb.svg diff --git a/src/icons/svg/github.svg b/src/assets/icons/svg/github.svg similarity index 100% rename from src/icons/svg/github.svg rename to src/assets/icons/svg/github.svg diff --git a/src/icons/svg/gonggao.svg b/src/assets/icons/svg/gonggao.svg similarity index 100% rename from src/icons/svg/gonggao.svg rename to src/assets/icons/svg/gonggao.svg diff --git a/src/assets/icons/svg/guide.svg b/src/assets/icons/svg/guide.svg new file mode 100644 index 0000000..b271001 --- /dev/null +++ b/src/assets/icons/svg/guide.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/icon.svg b/src/assets/icons/svg/icon.svg similarity index 100% rename from src/icons/svg/icon.svg rename to src/assets/icons/svg/icon.svg diff --git a/src/icons/svg/image.svg b/src/assets/icons/svg/image.svg similarity index 100% rename from src/icons/svg/image.svg rename to src/assets/icons/svg/image.svg diff --git a/src/icons/svg/index.svg b/src/assets/icons/svg/index.svg similarity index 100% rename from src/icons/svg/index.svg rename to src/assets/icons/svg/index.svg diff --git a/src/assets/icons/svg/international.svg b/src/assets/icons/svg/international.svg new file mode 100644 index 0000000..e9b56ee --- /dev/null +++ b/src/assets/icons/svg/international.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/ipvisits.svg b/src/assets/icons/svg/ipvisits.svg similarity index 100% rename from src/icons/svg/ipvisits.svg rename to src/assets/icons/svg/ipvisits.svg diff --git a/src/icons/svg/java.svg b/src/assets/icons/svg/java.svg similarity index 100% rename from src/icons/svg/java.svg rename to src/assets/icons/svg/java.svg diff --git a/src/assets/icons/svg/language.svg b/src/assets/icons/svg/language.svg new file mode 100644 index 0000000..0082b57 --- /dev/null +++ b/src/assets/icons/svg/language.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/link.svg b/src/assets/icons/svg/link.svg new file mode 100644 index 0000000..48197ba --- /dev/null +++ b/src/assets/icons/svg/link.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/list.svg b/src/assets/icons/svg/list.svg new file mode 100644 index 0000000..20259ed --- /dev/null +++ b/src/assets/icons/svg/list.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/lock.svg b/src/assets/icons/svg/lock.svg similarity index 100% rename from src/icons/svg/lock.svg rename to src/assets/icons/svg/lock.svg diff --git a/src/icons/svg/log.svg b/src/assets/icons/svg/log.svg similarity index 100% rename from src/icons/svg/log.svg rename to src/assets/icons/svg/log.svg diff --git a/src/icons/svg/markdown.svg b/src/assets/icons/svg/markdown.svg similarity index 100% rename from src/icons/svg/markdown.svg rename to src/assets/icons/svg/markdown.svg diff --git a/src/icons/svg/menu.svg b/src/assets/icons/svg/menu.svg similarity index 100% rename from src/icons/svg/menu.svg rename to src/assets/icons/svg/menu.svg diff --git a/src/assets/icons/svg/message.svg b/src/assets/icons/svg/message.svg new file mode 100644 index 0000000..14ca817 --- /dev/null +++ b/src/assets/icons/svg/message.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/money.svg b/src/assets/icons/svg/money.svg new file mode 100644 index 0000000..c1580de --- /dev/null +++ b/src/assets/icons/svg/money.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/monitor.svg b/src/assets/icons/svg/monitor.svg similarity index 100% rename from src/icons/svg/monitor.svg rename to src/assets/icons/svg/monitor.svg diff --git a/src/assets/icons/svg/nested.svg b/src/assets/icons/svg/nested.svg new file mode 100644 index 0000000..06713a8 --- /dev/null +++ b/src/assets/icons/svg/nested.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/password.svg b/src/assets/icons/svg/password.svg similarity index 100% rename from src/icons/svg/password.svg rename to src/assets/icons/svg/password.svg diff --git a/src/assets/icons/svg/pdf.svg b/src/assets/icons/svg/pdf.svg new file mode 100644 index 0000000..957aa0c --- /dev/null +++ b/src/assets/icons/svg/pdf.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/people.svg b/src/assets/icons/svg/people.svg new file mode 100644 index 0000000..2bd54ae --- /dev/null +++ b/src/assets/icons/svg/people.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/peoples.svg b/src/assets/icons/svg/peoples.svg similarity index 100% rename from src/icons/svg/peoples.svg rename to src/assets/icons/svg/peoples.svg diff --git a/src/icons/svg/permission.svg b/src/assets/icons/svg/permission.svg similarity index 100% rename from src/icons/svg/permission.svg rename to src/assets/icons/svg/permission.svg diff --git a/src/icons/svg/phone.svg b/src/assets/icons/svg/phone.svg similarity index 100% rename from src/icons/svg/phone.svg rename to src/assets/icons/svg/phone.svg diff --git a/src/icons/svg/qiniu.svg b/src/assets/icons/svg/qiniu.svg similarity index 100% rename from src/icons/svg/qiniu.svg rename to src/assets/icons/svg/qiniu.svg diff --git a/src/assets/icons/svg/qq.svg b/src/assets/icons/svg/qq.svg new file mode 100644 index 0000000..ee13d4e --- /dev/null +++ b/src/assets/icons/svg/qq.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/redis.svg b/src/assets/icons/svg/redis.svg similarity index 100% rename from src/icons/svg/redis.svg rename to src/assets/icons/svg/redis.svg diff --git a/src/icons/svg/role.svg b/src/assets/icons/svg/role.svg similarity index 100% rename from src/icons/svg/role.svg rename to src/assets/icons/svg/role.svg diff --git a/src/icons/svg/run.svg b/src/assets/icons/svg/run.svg similarity index 100% rename from src/icons/svg/run.svg rename to src/assets/icons/svg/run.svg diff --git a/src/icons/svg/running.svg b/src/assets/icons/svg/running.svg similarity index 100% rename from src/icons/svg/running.svg rename to src/assets/icons/svg/running.svg diff --git a/src/icons/svg/search.svg b/src/assets/icons/svg/search.svg similarity index 100% rename from src/icons/svg/search.svg rename to src/assets/icons/svg/search.svg diff --git a/src/assets/icons/svg/shopping.svg b/src/assets/icons/svg/shopping.svg new file mode 100644 index 0000000..87513e7 --- /dev/null +++ b/src/assets/icons/svg/shopping.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/size.svg b/src/assets/icons/svg/size.svg new file mode 100644 index 0000000..ddb25b8 --- /dev/null +++ b/src/assets/icons/svg/size.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/skill.svg b/src/assets/icons/svg/skill.svg new file mode 100644 index 0000000..a3b7312 --- /dev/null +++ b/src/assets/icons/svg/skill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/sqlMonitor.svg b/src/assets/icons/svg/sqlMonitor.svg similarity index 100% rename from src/icons/svg/sqlMonitor.svg rename to src/assets/icons/svg/sqlMonitor.svg diff --git a/src/assets/icons/svg/star.svg b/src/assets/icons/svg/star.svg new file mode 100644 index 0000000..6cf86e6 --- /dev/null +++ b/src/assets/icons/svg/star.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/swagger.svg b/src/assets/icons/svg/swagger.svg similarity index 100% rename from src/icons/svg/swagger.svg rename to src/assets/icons/svg/swagger.svg diff --git a/src/icons/svg/sys-tools.svg b/src/assets/icons/svg/sys-tools.svg similarity index 100% rename from src/icons/svg/sys-tools.svg rename to src/assets/icons/svg/sys-tools.svg diff --git a/src/icons/svg/system.svg b/src/assets/icons/svg/system.svg similarity index 100% rename from src/icons/svg/system.svg rename to src/assets/icons/svg/system.svg diff --git a/src/assets/icons/svg/tab.svg b/src/assets/icons/svg/tab.svg new file mode 100644 index 0000000..b4b48e4 --- /dev/null +++ b/src/assets/icons/svg/tab.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/table.svg b/src/assets/icons/svg/table.svg new file mode 100644 index 0000000..0e3dc9d --- /dev/null +++ b/src/assets/icons/svg/table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/theme.svg b/src/assets/icons/svg/theme.svg new file mode 100644 index 0000000..5982a2f --- /dev/null +++ b/src/assets/icons/svg/theme.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/timing.svg b/src/assets/icons/svg/timing.svg similarity index 100% rename from src/icons/svg/timing.svg rename to src/assets/icons/svg/timing.svg diff --git a/src/icons/svg/tools.svg b/src/assets/icons/svg/tools.svg similarity index 100% rename from src/icons/svg/tools.svg rename to src/assets/icons/svg/tools.svg diff --git a/src/assets/icons/svg/tree-table.svg b/src/assets/icons/svg/tree-table.svg new file mode 100644 index 0000000..8aafdb8 --- /dev/null +++ b/src/assets/icons/svg/tree-table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/svg/tree.svg b/src/assets/icons/svg/tree.svg new file mode 100644 index 0000000..dd4b7dd --- /dev/null +++ b/src/assets/icons/svg/tree.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/unlock.svg b/src/assets/icons/svg/unlock.svg similarity index 100% rename from src/icons/svg/unlock.svg rename to src/assets/icons/svg/unlock.svg diff --git a/src/icons/svg/user.svg b/src/assets/icons/svg/user.svg similarity index 100% rename from src/icons/svg/user.svg rename to src/assets/icons/svg/user.svg diff --git a/src/icons/svg/user1.svg b/src/assets/icons/svg/user1.svg similarity index 100% rename from src/icons/svg/user1.svg rename to src/assets/icons/svg/user1.svg diff --git a/src/icons/svg/validCode.svg b/src/assets/icons/svg/validCode.svg similarity index 100% rename from src/icons/svg/validCode.svg rename to src/assets/icons/svg/validCode.svg diff --git a/src/icons/svg/visits.svg b/src/assets/icons/svg/visits.svg similarity index 100% rename from src/icons/svg/visits.svg rename to src/assets/icons/svg/visits.svg diff --git a/src/icons/svg/web.svg b/src/assets/icons/svg/web.svg similarity index 100% rename from src/icons/svg/web.svg rename to src/assets/icons/svg/web.svg diff --git a/src/assets/icons/svg/wechat.svg b/src/assets/icons/svg/wechat.svg new file mode 100644 index 0000000..c586e55 --- /dev/null +++ b/src/assets/icons/svg/wechat.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/weixin.svg b/src/assets/icons/svg/weixin.svg similarity index 100% rename from src/icons/svg/weixin.svg rename to src/assets/icons/svg/weixin.svg diff --git a/src/assets/icons/svg/zip.svg b/src/assets/icons/svg/zip.svg new file mode 100644 index 0000000..f806fc4 --- /dev/null +++ b/src/assets/icons/svg/zip.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/svg/zujian.svg b/src/assets/icons/svg/zujian.svg similarity index 100% rename from src/icons/svg/zujian.svg rename to src/assets/icons/svg/zujian.svg diff --git a/src/icons/svgo.yml b/src/assets/icons/svgo.yml similarity index 100% rename from src/icons/svgo.yml rename to src/assets/icons/svgo.yml diff --git a/src/assets/avatar/avatar.png b/src/assets/images/avatar.png similarity index 100% rename from src/assets/avatar/avatar.png rename to src/assets/images/avatar.png diff --git a/src/assets/logo/logo.png b/src/assets/images/logo.png similarity index 100% rename from src/assets/logo/logo.png rename to src/assets/images/logo.png diff --git a/src/assets/styles/btn.scss b/src/assets/styles/btn.scss new file mode 100644 index 0000000..8f47f2c --- /dev/null +++ b/src/assets/styles/btn.scss @@ -0,0 +1,99 @@ +@import 'variables'; + +@mixin colorBtn($color) { + background: $color; + + &:hover { + color: $color; + + &:before, + &:after { + background: $color; + } + } +} + +.blue-btn { + @include colorBtn($blue) +} + +.light-blue-btn { + @include colorBtn($light-blue) +} + +.red-btn { + @include colorBtn($red) +} + +.pink-btn { + @include colorBtn($pink) +} + +.green-btn { + @include colorBtn($green) +} + +.tiffany-btn { + @include colorBtn($tiffany) +} + +.yellow-btn { + @include colorBtn($yellow) +} + +.pan-btn { + font-size: 14px; + color: #fff; + padding: 14px 36px; + border-radius: 8px; + border: none; + outline: none; + transition: 600ms ease all; + position: relative; + display: inline-block; + + &:hover { + background: #fff; + + &:before, + &:after { + width: 100%; + transition: 600ms ease all; + } + } + + &:before, + &:after { + content: ''; + position: absolute; + top: 0; + right: 0; + height: 2px; + width: 0; + transition: 400ms ease all; + } + + &::after { + right: inherit; + top: inherit; + left: 0; + bottom: 0; + } +} + +.custom-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #fff; + color: #fff; + -webkit-appearance: none; + text-align: center; + box-sizing: border-box; + outline: 0; + margin: 0; + padding: 10px 15px; + font-size: 14px; + border-radius: 4px; +} diff --git a/src/assets/styles/eladmin.scss b/src/assets/styles/eladmin.scss new file mode 100644 index 0000000..624aaf9 --- /dev/null +++ b/src/assets/styles/eladmin.scss @@ -0,0 +1,96 @@ +.head-container { + padding-bottom: 10px; + .filter-item { + display: inline-block; + vertical-align: middle; + margin-bottom: 10px; + input { + height: 30.5px; + line-height: 30.5px; + } + } + .date-item { + display: inline-block; + vertical-align: middle; + margin-bottom: 10px; + } +} +.el-avatar { + display: inline-block; + text-align: center; + background: #ccc; + color: #fff; + white-space: nowrap; + position: relative; + overflow: hidden; + vertical-align: middle; + width: 32px; + height: 32px; + line-height: 32px; + border-radius: 16px; +} + +.logo-con{ + height: 60px; + padding: 13px 0px 0px; + img{ + height: 32px; + width: 135px; + display: block; + //margin: 0 auto; + } +} + +#el-login-footer { + height: 40px; + line-height: 40px; + position: fixed; + bottom: 0; + width: 100%; + text-align: center; + color: #fff; + font-family: Arial, serif; + font-size: 12px; + letter-spacing: 1px; +} + +#el-main-footer { + background: none repeat scroll 0 0 white; + border-top: 1px solid #e7eaec; + overflow: hidden; + padding: 10px 6px 0px 6px; + height: 33px; + font-size: 0.7rem !important; + color: #7a8b9a; + letter-spacing: 0.8px; + font-family: Arial, sans-serif !important; + position: fixed; + bottom: 0; + z-index: 99; + width: 100%; +} +.eladmin-upload { + border: 1px dashed #c0ccda; + border-radius: 5px; + height: 45px; + line-height: 45px; + width: 368px; +} +.my-blockquote{ + margin: 0px 0px 10px; + padding: 15px; + line-height: 22px; + border-left: 5px solid #00437B; + border-radius: 0 2px 2px 0; + background-color: #f2f2f2; +} +.my-code{ + position: relative; + padding: 15px; + line-height: 20px; + border-left: 5px solid #ddd; + color: #333; + font-family: Courier New, serif; + font-size: 12px +} + diff --git a/src/assets/styles/element-ui.scss b/src/assets/styles/element-ui.scss new file mode 100644 index 0000000..9581d56 --- /dev/null +++ b/src/assets/styles/element-ui.scss @@ -0,0 +1,79 @@ +// cover some element-ui styles + +.el-breadcrumb__inner, +.el-breadcrumb__inner a { + font-weight: 400 !important; +} + +.el-upload { + input[type="file"] { + display: none !important; + } +} + +.el-upload__input { + display: none; +} + +.cell { + .el-tag { + margin-right: 0px; + } +} + +.small-padding { + .cell { + padding-left: 5px; + padding-right: 5px; + } +} + +.fixed-width { + .el-button--mini { + padding: 7px 10px; + width: 60px; + } +} + +.status-col { + .cell { + padding: 0 10px; + text-align: center; + + .el-tag { + margin-right: 0px; + } + } +} + +// to fixed https://github.com/ElemeFE/element/issues/2461 +.el-dialog { + transform: none; + left: 0; + position: relative; + margin: 0 auto; +} + +// refine element ui upload +.upload-container { + .el-upload { + width: 100%; + + .el-upload-dragger { + width: 100%; + height: 200px; + } + } +} + +// dropdown +.el-dropdown-menu { + a { + display: block + } +} + +// fix date-picker ui bug in filter-item +.el-range-editor.el-input__inner { + display: inline-flex !important; +} diff --git a/src/styles/element-variables.scss b/src/assets/styles/element-variables.scss similarity index 90% rename from src/styles/element-variables.scss rename to src/assets/styles/element-variables.scss index 30a0e6b..a4f8c4a 100644 --- a/src/styles/element-variables.scss +++ b/src/assets/styles/element-variables.scss @@ -22,7 +22,7 @@ $--table-border:1px solid#dfe6ec; /* icon font path, required */ $--font-path: '~element-ui/lib/theme-chalk/fonts'; -@import "~element-ui/packages/theme-chalk/src/index"; +@import "../../../node_modules/element-ui/packages/theme-chalk/src/index"; // the :export directive is the magic sauce for webpack // https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass diff --git a/src/assets/styles/index.scss b/src/assets/styles/index.scss new file mode 100644 index 0000000..fdf9ba4 --- /dev/null +++ b/src/assets/styles/index.scss @@ -0,0 +1,182 @@ +@import 'variables'; +@import 'mixin'; +@import 'transition'; +@import 'element-ui'; +@import 'sidebar'; +@import 'btn'; +@import 'eladmin'; + +body { + height: 100%; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif; +} + +label { + font-weight: 700; +} + +html { + height: 100%; + box-sizing: border-box; +} + +#app { + height: 100%; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +.no-padding { + padding: 0px !important; +} + +.padding-content { + padding: 4px 0; +} + +a:focus, +a:active { + outline: none; +} + +a, +a:focus, +a:hover { + cursor: pointer; + color: inherit; + text-decoration: none; +} + +div:focus { + outline: none; +} + +.fr { + float: right; +} + +.fl { + float: left; +} + +.pr-5 { + padding-right: 5px; +} + +.pl-5 { + padding-left: 5px; +} + +.block { + display: block; +} + +.pointer { + cursor: pointer; +} + +.inlineBlock { + display: block; +} + +.clearfix { + &:after { + visibility: hidden; + display: block; + font-size: 0; + content: " "; + clear: both; + height: 0; + } +} + +aside { + background: #eef1f6; + padding: 8px 24px; + margin-bottom: 20px; + border-radius: 2px; + display: block; + line-height: 32px; + font-size: 16px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + color: #2c3e50; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + a { + color: #337ab7; + cursor: pointer; + + &:hover { + color: rgb(32, 160, 255); + } + } +} + +//main-container全局样式 +.app-container { + padding: 20px; +} + +.components-container { + margin: 30px 50px; + position: relative; +} + +.pagination-container { + margin-top: 30px; +} + +.text-center { + text-align: center +} + +.sub-navbar { + height: 50px; + line-height: 50px; + position: relative; + width: 100%; + text-align: right; + padding-right: 20px; + transition: 600ms ease position; + background: linear-gradient(90deg, rgba(32, 182, 249, 1) 0%, rgba(32, 182, 249, 1) 0%, rgba(33, 120, 241, 1) 100%, rgba(33, 120, 241, 1) 100%); + + .subtitle { + font-size: 20px; + color: #fff; + } + + &.draft { + background: #d0d0d0; + } + + &.deleted { + background: #d0d0d0; + } +} + +.link-type, +.link-type:focus { + color: #337ab7; + cursor: pointer; + + &:hover { + color: rgb(32, 160, 255); + } +} + +//refine vue-multiselect plugin +.multiselect { + line-height: 16px; +} + +.multiselect--active { + z-index: 1000 !important; +} diff --git a/src/assets/styles/mixin.scss b/src/assets/styles/mixin.scss new file mode 100644 index 0000000..06fa061 --- /dev/null +++ b/src/assets/styles/mixin.scss @@ -0,0 +1,66 @@ +@mixin clearfix { + &:after { + content: ""; + display: table; + clear: both; + } +} + +@mixin scrollBar { + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } +} + +@mixin relative { + position: relative; + width: 100%; + height: 100%; +} + +@mixin pct($pct) { + width: #{$pct}; + position: relative; + margin: 0 auto; +} + +@mixin triangle($width, $height, $color, $direction) { + $width: $width/2; + $color-border-style: $height solid $color; + $transparent-border-style: $width solid transparent; + height: 0; + width: 0; + + @if $direction==up { + border-bottom: $color-border-style; + border-left: $transparent-border-style; + border-right: $transparent-border-style; + } + + @else if $direction==right { + border-left: $color-border-style; + border-top: $transparent-border-style; + border-bottom: $transparent-border-style; + } + + @else if $direction==down { + border-top: $color-border-style; + border-left: $transparent-border-style; + border-right: $transparent-border-style; + } + + @else if $direction==left { + border-right: $color-border-style; + border-top: $transparent-border-style; + border-bottom: $transparent-border-style; + } +} diff --git a/src/styles/sidebar.scss b/src/assets/styles/sidebar.scss similarity index 50% rename from src/styles/sidebar.scss rename to src/assets/styles/sidebar.scss index 6457bce..3dad4c3 100644 --- a/src/styles/sidebar.scss +++ b/src/assets/styles/sidebar.scss @@ -1,15 +1,16 @@ #app { - // 主体区域 + .main-container { min-height: 100%; transition: margin-left .28s; - margin-left: 193px; + margin-left: $sideBarWidth; position: relative; } - // 侧边栏 + .sidebar-container { transition: width 0.28s; - width: 193px !important; + width: $sideBarWidth !important; + background-color: $menuBg; height: 100%; position: fixed; font-size: 0px; @@ -18,62 +19,111 @@ left: 0; z-index: 1001; overflow: hidden; - //reset element-ui css + + // reset element-ui css .horizontal-collapse-transition { transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out; } - .el-scrollbar__bar.is-vertical{ + + .scrollbar-wrapper { + overflow-x: hidden !important; + } + + .el-scrollbar__bar.is-vertical { right: 0px; } - .scrollbar-wrapper { - overflow-x: hidden!important; - .el-scrollbar__view { - height: 100%; + + .el-scrollbar { + height: 100%; + } + + &.has-logo { + .el-scrollbar { + height: calc(100% - 50px); } } + .is-horizontal { display: none; } + a { display: inline-block; width: 100%; overflow: hidden; } + .svg-icon { margin-right: 16px; } + .el-menu { border: none; height: 100%; width: 100% !important; } - .is-active > .el-submenu__title{ - color: #f4f4f5!important; - } - } - .hideSidebar { - .sidebar-container { - width: 36px !important; - } - .main-container { - margin-left: 36px; - } - .submenu-title-noDropdown { - padding-left: 10px !important; - position: relative; - .el-tooltip { - padding: 0 10px !important; + + // menu hover + .submenu-title-noDropdown, + .el-submenu__title { + &:hover { + background-color: $menuHover !important; } } + + .is-active>.el-submenu__title { + color: $subMenuActiveText !important; + } + + & .nest-menu .el-submenu>.el-submenu__title, + & .el-submenu .el-menu-item { + min-width: $sideBarWidth !important; + background-color: $subMenuBg !important; + + &:hover { + background-color: $subMenuHover !important; + } + } + } + + .hideSidebar { + .sidebar-container { + width: 54px !important; + } + + .main-container { + margin-left: 54px; + } + + .submenu-title-noDropdown { + padding: 0 !important; + position: relative; + + .el-tooltip { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + } + } + .el-submenu { overflow: hidden; + &>.el-submenu__title { - padding-left: 10px !important; + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + .el-submenu__icon-arrow { display: none; } } } + .el-menu--collapse { .el-submenu { &>.el-submenu__title { @@ -88,35 +138,33 @@ } } } - .sidebar-container .nest-menu .el-submenu>.el-submenu__title, - .sidebar-container .el-submenu .el-menu-item { - min-width: 195px !important; - background-color: $subMenuBg !important; - &:hover { - background-color: $menuHover !important; - } - } + .el-menu--collapse .el-menu .el-submenu { - min-width: 195px !important; + min-width: $sideBarWidth !important; } - //适配移动端 + // mobile responsive .mobile { .main-container { margin-left: 0px; } + .sidebar-container { transition: transform .28s; - width: 195px !important; + width: $sideBarWidth !important; } + &.hideSidebar { .sidebar-container { + pointer-events: none; transition-duration: 0.3s; - transform: translate3d(-195px, 0, 0); + transform: translate3d(-$sideBarWidth, 0, 0); } } } + .withoutAnimation { + .main-container, .sidebar-container { transition: none; @@ -124,10 +172,38 @@ } } -.el-menu--vertical{ - & >.el-menu{ - .svg-icon{ +// when menu collapsed +.el-menu--vertical { + &>.el-menu { + .svg-icon { margin-right: 16px; } } + + .nest-menu .el-submenu>.el-submenu__title, + .el-menu-item { + &:hover { + // you can use $subMenuHover + background-color: $menuHover !important; + } + } + + // the scroll bar appears when the subMenu is too long + >.el-menu--popup { + max-height: 100vh; + overflow-y: auto; + + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } + } } diff --git a/src/styles/transition.scss b/src/assets/styles/transition.scss similarity index 87% rename from src/styles/transition.scss rename to src/assets/styles/transition.scss index 8dd9b04..4cb27cc 100644 --- a/src/styles/transition.scss +++ b/src/assets/styles/transition.scss @@ -1,6 +1,6 @@ -//globl transition css +// global transition css -/*fade*/ +/* fade */ .fade-enter-active, .fade-leave-active { transition: opacity 0.28s; @@ -11,21 +11,23 @@ opacity: 0; } -/*fade-transform*/ +/* fade-transform */ .fade-transform-leave-active, .fade-transform-enter-active { transition: all .5s; } + .fade-transform-enter { opacity: 0; transform: translateX(-30px); } + .fade-transform-leave-to { opacity: 0; transform: translateX(30px); } -/*fade*/ +/* breadcrumb transition */ .breadcrumb-enter-active, .breadcrumb-leave-active { transition: all .5s; diff --git a/src/styles/variables.scss b/src/assets/styles/variables.scss similarity index 75% rename from src/styles/variables.scss rename to src/assets/styles/variables.scss index 61e9628..a19c27c 100644 --- a/src/styles/variables.scss +++ b/src/assets/styles/variables.scss @@ -1,4 +1,14 @@ -//sidebar +// base color +$blue:#324157; +$light-blue:#3A71A8; +$red:#C03639; +$pink: #E65D6E; +$green: #30B08F; +$tiffany: #4AB7BD; +$yellow:#FEC171; +$panGreen: #30B08F; + +// sidebar $menuText:#bfcbd9; $menuActiveText:#409EFF; $subMenuActiveText:#f4f4f5; // https://github.com/ElemeFE/element/issues/12951 @@ -9,9 +19,7 @@ $menuHover:#263445; $subMenuBg:#1f2d3d; $subMenuHover:#001528; -$sideBarWidth: 193px; - -$hideSidebarWidth: 38px; +$sideBarWidth: 210px; // the :export directive is the magic sauce for webpack // https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass diff --git a/src/components/Breadcrumb/index.vue b/src/components/Breadcrumb/index.vue index 96b78dc..204ea59 100644 --- a/src/components/Breadcrumb/index.vue +++ b/src/components/Breadcrumb/index.vue @@ -1,7 +1,7 @@