🎉 新增vue3版本架构
@ -1,3 +0,0 @@
|
||||
> 1%
|
||||
last 2 versions
|
||||
not ie <= 8
|
@ -1,16 +0,0 @@
|
||||
# http://editorconfig.org
|
||||
root = true
|
||||
|
||||
[*]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[Makefile]
|
||||
indent_style = tab
|
9
.env.development
Normal file
@ -0,0 +1,9 @@
|
||||
|
||||
# 开发环境配置
|
||||
VITE_APP_ENV = 'development'
|
||||
|
||||
#接口地址
|
||||
VITE_APP_API=/api
|
||||
|
||||
#页面基础路径
|
||||
VITE_APP_BASE=/
|
11
.env.production
Normal file
@ -0,0 +1,11 @@
|
||||
# 生产环境配置
|
||||
VITE_APP_ENV = 'production'
|
||||
|
||||
#接口地址
|
||||
VITE_APP_API=
|
||||
|
||||
#页面基础路径
|
||||
VITE_APP_BASE=/
|
||||
|
||||
# 是否在打包时开启压缩,支持 gzip 和 brotli
|
||||
VITE_BUILD_COMPRESS = gzip
|
17
.eslintrc.js
@ -1,17 +0,0 @@
|
||||
module.exports = {
|
||||
root: true,
|
||||
env: {
|
||||
node: true
|
||||
},
|
||||
'extends': [
|
||||
'plugin:vue/essential',
|
||||
'eslint:recommended'
|
||||
],
|
||||
rules: {
|
||||
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
|
||||
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
|
||||
},
|
||||
parserOptions: {
|
||||
parser: 'babel-eslint'
|
||||
}
|
||||
}
|
4
.gitignore
vendored
Normal file → Executable file
@ -9,12 +9,12 @@ node_modules
|
||||
.env.local
|
||||
.env.*.local
|
||||
|
||||
# Log files
|
||||
# log files
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# Editor directories and files
|
||||
# editor directories and files
|
||||
.idea
|
||||
.vscode
|
||||
*.suo
|
||||
|
@ -1,5 +0,0 @@
|
||||
module.exports = {
|
||||
plugins: {
|
||||
autoprefixer: {}
|
||||
}
|
||||
}
|
9
.prettierrc.json
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
"printWidth": 100,
|
||||
"tabWidth": 2,
|
||||
"semi": true,
|
||||
"singleAttributePerLine": false,
|
||||
"bracketSpacing": true,
|
||||
"singleQuote": true,
|
||||
"arrowParens": "avoid"
|
||||
}
|
11
Dockerfile
@ -1,11 +0,0 @@
|
||||
FROM nginx:stable-alpine-perl
|
||||
|
||||
RUN rm -f /etc/nginx/nginx.conf \
|
||||
&& rm -f /etc/nginx/conf.d/default.conf
|
||||
COPY docker/nginx.k8s.conf /etc/nginx/nginx.conf
|
||||
|
||||
EXPOSE 80
|
||||
|
||||
COPY ./dist /usr/share/nginx/html
|
||||
|
||||
ENTRYPOINT ["nginx", "-g", "daemon off;"]
|
204
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) 2020 smallwei
|
||||
|
||||
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 2023 BladeX (https://bladex.cn)
|
||||
|
||||
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.
|
||||
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.
|
||||
|
@ -1,5 +0,0 @@
|
||||
module.exports = {
|
||||
presets: [
|
||||
'@vue/app'
|
||||
]
|
||||
}
|
7
build.sh
@ -1,7 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "打包文件"
|
||||
yarn build
|
||||
echo "传输文件"
|
||||
scp -r ./dist/** pig@139.224.200.249:/data/avue/sword
|
||||
echo "部署成功"
|
@ -1,58 +0,0 @@
|
||||
|
||||
user root;
|
||||
worker_processes 1;
|
||||
|
||||
error_log /var/log/nginx/error.log warn;
|
||||
pid /var/run/nginx.pid;
|
||||
|
||||
|
||||
events {
|
||||
worker_connections 1024;
|
||||
}
|
||||
|
||||
|
||||
http {
|
||||
include /etc/nginx/mime.types;
|
||||
default_type application/octet-stream;
|
||||
|
||||
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
|
||||
'$status $body_bytes_sent "$http_referer" '
|
||||
'"$http_user_agent" "$http_x_forwarded_for"';
|
||||
|
||||
access_log /var/log/nginx/access.log main;
|
||||
|
||||
sendfile on;
|
||||
#tcp_nopush on;
|
||||
|
||||
keepalive_timeout 65;
|
||||
|
||||
#gzip on;
|
||||
|
||||
#include /etc/nginx/conf.d/*.conf;
|
||||
|
||||
upstream gateway {
|
||||
server blade-gateway;
|
||||
}
|
||||
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
server_name web;
|
||||
root /usr/share/nginx/html;
|
||||
|
||||
location / {
|
||||
|
||||
}
|
||||
|
||||
location ^~/api {
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_buffering off;
|
||||
rewrite ^/api/(.*)$ /$1 break;
|
||||
proxy_pass http://gateway;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
34
index.html
Executable file
@ -0,0 +1,34 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<link rel="stylesheet" type="text/css" href="//at.alicdn.com/t/font_567566_82imxaft0by.css" />
|
||||
<link rel="stylesheet" type="text/css" href="//at.alicdn.com/t/font_1066523_6bvkeuqao36.css">
|
||||
<link rel="stylesheet" href="/css/loading.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="app">
|
||||
<div class="loading">
|
||||
<div class="loading-wrap">
|
||||
<div class="loading-dots">
|
||||
<span class="dot dot-spin">
|
||||
<i></i>
|
||||
<i></i>
|
||||
<i></i>
|
||||
<i></i>
|
||||
</span>
|
||||
</div>
|
||||
<div class="loading-title">
|
||||
系统加载中
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="module" src="/src/main.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
14
jsconfig.json
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"baseUrl": "./",
|
||||
"paths": {
|
||||
"@/*": [
|
||||
"src/*"
|
||||
]
|
||||
}
|
||||
},
|
||||
"exclude": [
|
||||
"node_modules",
|
||||
"dist"
|
||||
]
|
||||
}
|
3213
package-lock.json
generated
Normal file
69
package.json
Normal file → Executable file
@ -1,52 +1,41 @@
|
||||
{
|
||||
"name": "saber-admin",
|
||||
"version": "4.1.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"serve": "vue-cli-service serve",
|
||||
"build": "vue-cli-service build",
|
||||
"lint": "vue-cli-service lint",
|
||||
"analyz": "npm_config_report=true npm run build",
|
||||
"test:unit": "vue-cli-service test:unit",
|
||||
"test:e2e": "vue-cli-service test:e2e"
|
||||
"dev": "vite --host",
|
||||
"prod": "vite --mode production",
|
||||
"build": "vite build",
|
||||
"build:prod": "vite build --mode production",
|
||||
"serve": "vite preview --host"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "^0.18.0",
|
||||
"babel-polyfill": "^6.26.0",
|
||||
"classlist-polyfill": "^1.2.0",
|
||||
"element-ui": "^2.15.6",
|
||||
"js-base64": "^2.5.1",
|
||||
"js-cookie": "^2.2.0",
|
||||
"crypto-js": "^4.0.0",
|
||||
"@element-plus/icons-vue": "^2.3.1",
|
||||
"@smallwei/avue": "^3.4.4",
|
||||
"animate.css": "^4.1.1",
|
||||
"avue-plugin-ueditor": "^1.0.3",
|
||||
"axios": "^0.21.1",
|
||||
"crypto-js": "^4.1.1",
|
||||
"sm-crypto": "^0.3.13",
|
||||
"mockjs": "^1.0.1-beta3",
|
||||
"node-gyp": "^5.0.6",
|
||||
"dayjs": "^1.10.6",
|
||||
"element-plus": "^2.7.3",
|
||||
"js-base64": "^3.7.4",
|
||||
"js-cookie": "^3.0.0",
|
||||
"mockjs": "^1.1.0",
|
||||
"nprogress": "^0.2.0",
|
||||
"script-loader": "^0.7.2",
|
||||
"vue": "^2.6.10",
|
||||
"vue-axios": "^2.1.2",
|
||||
"vue-i18n": "^8.7.0",
|
||||
"vue-router": "^3.0.1",
|
||||
"vuex": "^3.1.1"
|
||||
"vite-plugin-mock": "^2.9.4",
|
||||
"vue": "^3.4.27",
|
||||
"vue-i18n": "^9.1.9",
|
||||
"vue-router": "^4.3.2",
|
||||
"vuex": "^4.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vue/cli-plugin-babel": "^3.1.1",
|
||||
"@vue/cli-plugin-eslint": "^3.1.5",
|
||||
"@vue/cli-service": "^3.1.4",
|
||||
"chai": "^4.1.2",
|
||||
"sass": "^1.77.6",
|
||||
"sass-loader": "^10.0.5",
|
||||
"vue-template-compiler": "^2.5.17",
|
||||
"webpack-bundle-analyzer": "^3.0.3"
|
||||
},
|
||||
"lint-staged": {
|
||||
"*.js": [
|
||||
"vue-cli-service lint",
|
||||
"git add"
|
||||
],
|
||||
"*.vue": [
|
||||
"vue-cli-service lint",
|
||||
"git add"
|
||||
]
|
||||
"@vitejs/plugin-vue": "^5.0.4",
|
||||
"@vue/compiler-sfc": "^3.4.27",
|
||||
"prettier": "^2.8.7",
|
||||
"sass": "^1.77.2",
|
||||
"unplugin-auto-import": "^0.11.2",
|
||||
"vite": "^5.2.12",
|
||||
"vite-plugin-compression": "^0.5.1",
|
||||
"vite-plugin-vue-setup-extend": "^0.4.0"
|
||||
}
|
||||
}
|
||||
|
11
public/cdn/animate/3.5.2/animate.css
vendored
9
public/cdn/avue/2.10.16/avue.min.js
vendored
9
public/cdn/axios/1.0.0/axios.min.js
vendored
6
public/cdn/vue/2.6.10/vue.min.js
vendored
6
public/cdn/vuex/3.1.1/vuex.min.js
vendored
116
public/css/loading.css
Normal file
@ -0,0 +1,116 @@
|
||||
.loading {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
background-color: #f4f7f9
|
||||
}
|
||||
|
||||
.loading .loading-wrap {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
display: flex;
|
||||
-webkit-transform: translate3d(-50%, -50%, 0);
|
||||
transform: translate3d(-50%, -50%, 0);
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
flex-direction: column
|
||||
}
|
||||
|
||||
.loading .dots {
|
||||
display: flex;
|
||||
padding: 98px;
|
||||
justify-content: center;
|
||||
align-items: center
|
||||
}
|
||||
|
||||
.loading .loading-title {
|
||||
display: flex;
|
||||
font-weight: bold;
|
||||
margin-top: 30px;
|
||||
font-size: 36px;
|
||||
color: rgba(0, 0, 0, .85);
|
||||
justify-content: center;
|
||||
align-items: center
|
||||
}
|
||||
|
||||
|
||||
.dot {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
margin-top: 30px;
|
||||
font-size: 32px;
|
||||
transform: rotate(45deg);
|
||||
box-sizing: border-box;
|
||||
animation: antRotate 1.2s infinite linear
|
||||
}
|
||||
|
||||
.dot i {
|
||||
position: absolute;
|
||||
display: block;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background-color: #0065cc;
|
||||
border-radius: 100%;
|
||||
opacity: .3;
|
||||
transform: scale(.75);
|
||||
animation: antSpinMove 1s infinite linear alternate;
|
||||
transform-origin: 50% 50%
|
||||
}
|
||||
|
||||
.dot i:nth-child(1) {
|
||||
top: 0;
|
||||
left: 0
|
||||
}
|
||||
|
||||
.dot i:nth-child(2) {
|
||||
top: 0;
|
||||
right: 0;
|
||||
-webkit-animation-delay: .4s;
|
||||
animation-delay: .4s
|
||||
}
|
||||
|
||||
.dot i:nth-child(3) {
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
-webkit-animation-delay: .8s;
|
||||
animation-delay: .8s
|
||||
}
|
||||
|
||||
.dot i:nth-child(4) {
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
-webkit-animation-delay: 1.2s;
|
||||
animation-delay: 1.2s
|
||||
}
|
||||
|
||||
@keyframes antRotate {
|
||||
to {
|
||||
-webkit-transform: rotate(405deg);
|
||||
transform: rotate(405deg)
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes antRotate {
|
||||
to {
|
||||
-webkit-transform: rotate(405deg);
|
||||
transform: rotate(405deg)
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes antSpinMove {
|
||||
to {
|
||||
opacity: 1
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes antSpinMove {
|
||||
to {
|
||||
opacity: 1
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 87 KiB |
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 87 KiB |
BIN
public/img/bg.jpg
Normal file
After Width: | Height: | Size: 81 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 239 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 3.7 KiB |
BIN
public/img/bg1.jpg
Normal file
After Width: | Height: | Size: 254 KiB |
BIN
public/img/bg2.jpg
Normal file
After Width: | Height: | Size: 310 KiB |
BIN
public/img/bg3.jpg
Normal file
After Width: | Height: | Size: 190 KiB |
BIN
public/img/bg4.jpg
Normal file
After Width: | Height: | Size: 136 KiB |
Before Width: | Height: | Size: 104 KiB |
Before Width: | Height: | Size: 206 KiB |
1
public/img/login-bg.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="6395" height="1079"><defs><linearGradient id="b" x1=".747" y1=".222" x2=".973" y2=".807" gradientUnits="objectBoundingBox"><stop offset="0" stop-color="#409eff"/><stop offset="1" stop-color="#1b4fab"/></linearGradient><clipPath id="a"><path transform="translate(-5391)" fill="#fff" d="M0 0h6395v1079H0z"/></clipPath></defs><g data-name="Mask Group 1" transform="translate(5391)" clip-path="url(#a)"><g data-name="Group 118"><path data-name="Path 142" d="M976.018-7.302S753.54 180.507 920.669 575.952c44.957 106.375 81.514 205.964 84.521 277 8.164 192.764-156.046 268.564-156.046 268.564l-653.53-26.8L179.349-22.751z" fill="#f1f5f8"/><path data-name="Union 6" d="M-2631.1 1081.8v-1.6h-5599.8V.022h5599.8V0h759.7s-187.845 197.448-91.626 488.844c49.167 148.9 96.309 256.289 104.683 362.118 7.979 100.852-57.98 201.711-168.644 254.286-65.858 31.29-144.552 42.382-223.028 42.383-191.185.001-381.085-65.831-381.085-65.831z" transform="translate(2840.191 -.323)" fill="url(#b)"/></g></g></svg>
|
After Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 52 KiB |
Before Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 141 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 211 KiB |
Before Width: | Height: | Size: 240 KiB |
Before Width: | Height: | Size: 407 KiB |
Before Width: | Height: | Size: 267 KiB |
Before Width: | Height: | Size: 359 KiB After Width: | Height: | Size: 359 KiB |
@ -1,109 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||
<meta name="format-detection" content="telephone=no">
|
||||
<meta http-equiv="X-UA-Compatible" content="chrome=1"/>
|
||||
<link rel="stylesheet" href="<%= BASE_URL %>cdn/element-ui/2.15.6/theme-chalk/index.css">
|
||||
<link rel="stylesheet" href="<%= BASE_URL %>cdn/animate/3.5.2/animate.css">
|
||||
<link rel="stylesheet" href="<%= BASE_URL %>cdn/iconfont/1.0.0/index.css">
|
||||
<link rel="stylesheet" href="<%= BASE_URL %>cdn/avue/2.10.16/index.css">
|
||||
<link rel="icon" href="<%= BASE_URL %>favicon.png">
|
||||
<title>Saber企业级开发平台</title>
|
||||
<style>
|
||||
html,
|
||||
body,
|
||||
#app {
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.avue-home {
|
||||
background-color: #303133;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.avue-home__main {
|
||||
user-select: none;
|
||||
width: 100%;
|
||||
flex-grow: 1;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.avue-home__footer {
|
||||
width: 100%;
|
||||
flex-grow: 0;
|
||||
text-align: center;
|
||||
padding: 1em 0;
|
||||
}
|
||||
|
||||
.avue-home__footer > a {
|
||||
font-size: 12px;
|
||||
color: #ABABAB;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.avue-home__loading {
|
||||
height: 32px;
|
||||
width: 32px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.avue-home__title {
|
||||
color: #FFF;
|
||||
font-size: 14px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.avue-home__sub-title {
|
||||
color: #ABABAB;
|
||||
font-size: 12px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<noscript>
|
||||
<strong>
|
||||
很抱歉,如果没有 JavaScript 支持,Saber 将不能正常工作。请启用浏览器的 JavaScript 然后继续。
|
||||
</strong>
|
||||
</noscript>
|
||||
<div id="app">
|
||||
<div class="avue-home">
|
||||
<div class="avue-home__main">
|
||||
<img class="avue-home__loading" src="<%= BASE_URL %>svg/loading-spin.svg" alt="loading">
|
||||
<div class="avue-home__title">
|
||||
正在加载资源
|
||||
</div>
|
||||
<div class="avue-home__sub-title d">
|
||||
初次加载资源可能需要较多时间 请耐心等待
|
||||
</div>
|
||||
</div>
|
||||
<div class="avue-home__footer">
|
||||
<a href="https://bladex.cn" target="_blank">
|
||||
https://bladex.cn </a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- built files will be auto injected -->
|
||||
<script src="<%= BASE_URL %>util/aes.js" charset="utf-8"></script>
|
||||
<script src="<%= BASE_URL %>cdn/vue/2.6.10/vue.min.js" charset="utf-8"></script>
|
||||
<script src="<%= BASE_URL %>cdn/vuex/3.1.1/vuex.min.js" charset="utf-8"></script>
|
||||
<script src="<%= BASE_URL %>cdn/vue-router/3.0.1/vue-router.min.js" charset="utf-8"></script>
|
||||
<script src="<%= BASE_URL %>cdn/axios/1.0.0/axios.min.js" charset="utf-8"></script>
|
||||
<script src="<%= BASE_URL %>cdn/element-ui/2.15.6/index.js" charset="utf-8"></script>
|
||||
<script src="<%= BASE_URL %>cdn/avue/2.10.16/avue.min.js" charset="utf-8"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
@ -1,6 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="white">
|
||||
<path opacity=".25" d="M16 0 A16 16 0 0 0 16 32 A16 16 0 0 0 16 0 M16 4 A12 12 0 0 1 16 28 A12 12 0 0 1 16 4"/>
|
||||
<path d="M16 0 A16 16 0 0 1 32 16 L28 16 A12 12 0 0 0 16 4z">
|
||||
<animateTransform attributeName="transform" type="rotate" from="0 16 16" to="360 16 16" dur="0.8s" repeatCount="indefinite" />
|
||||
</path>
|
||||
</svg>
|
Before Width: | Height: | Size: 422 B |
@ -1,105 +0,0 @@
|
||||
/*
|
||||
CryptoJS v3.1.2
|
||||
code.google.com/p/crypto-js
|
||||
(c) 2009-2013 by Jeff Mott. All rights reserved.
|
||||
code.google.com/p/crypto-js/wiki/License
|
||||
*/
|
||||
var CryptoJS = CryptoJS || function (u, p) {
|
||||
var d = {}, l = d.lib = {}, s = function () { }, t = l.Base = { extend: function (a) { s.prototype = this; var c = new s; a && c.mixIn(a); c.hasOwnProperty("init") || (c.init = function () { c.$super.init.apply(this, arguments) }); c.init.prototype = c; c.$super = this; return c }, create: function () { var a = this.extend(); a.init.apply(a, arguments); return a }, init: function () { }, mixIn: function (a) { for (var c in a) a.hasOwnProperty(c) && (this[c] = a[c]); a.hasOwnProperty("toString") && (this.toString = a.toString) }, clone: function () { return this.init.prototype.extend(this) } },
|
||||
r = l.WordArray = t.extend({
|
||||
init: function (a, c) { a = this.words = a || []; this.sigBytes = c != p ? c : 4 * a.length }, toString: function (a) { return (a || v).stringify(this) }, concat: function (a) { var c = this.words, e = a.words, j = this.sigBytes; a = a.sigBytes; this.clamp(); if (j % 4) for (var k = 0; k < a; k++)c[j + k >>> 2] |= (e[k >>> 2] >>> 24 - 8 * (k % 4) & 255) << 24 - 8 * ((j + k) % 4); else if (65535 < e.length) for (k = 0; k < a; k += 4)c[j + k >>> 2] = e[k >>> 2]; else c.push.apply(c, e); this.sigBytes += a; return this }, clamp: function () {
|
||||
var a = this.words, c = this.sigBytes; a[c >>> 2] &= 4294967295 <<
|
||||
32 - 8 * (c % 4); a.length = u.ceil(c / 4)
|
||||
}, clone: function () { var a = t.clone.call(this); a.words = this.words.slice(0); return a }, random: function (a) { for (var c = [], e = 0; e < a; e += 4)c.push(4294967296 * u.random() | 0); return new r.init(c, a) }
|
||||
}), w = d.enc = {}, v = w.Hex = {
|
||||
stringify: function (a) { var c = a.words; a = a.sigBytes; for (var e = [], j = 0; j < a; j++) { var k = c[j >>> 2] >>> 24 - 8 * (j % 4) & 255; e.push((k >>> 4).toString(16)); e.push((k & 15).toString(16)) } return e.join("") }, parse: function (a) {
|
||||
for (var c = a.length, e = [], j = 0; j < c; j += 2)e[j >>> 3] |= parseInt(a.substr(j,
|
||||
2), 16) << 24 - 4 * (j % 8); return new r.init(e, c / 2)
|
||||
}
|
||||
}, b = w.Latin1 = { stringify: function (a) { var c = a.words; a = a.sigBytes; for (var e = [], j = 0; j < a; j++)e.push(String.fromCharCode(c[j >>> 2] >>> 24 - 8 * (j % 4) & 255)); return e.join("") }, parse: function (a) { for (var c = a.length, e = [], j = 0; j < c; j++)e[j >>> 2] |= (a.charCodeAt(j) & 255) << 24 - 8 * (j % 4); return new r.init(e, c) } }, x = w.Utf8 = { stringify: function (a) { try { return decodeURIComponent(escape(b.stringify(a))) } catch (c) { throw Error("Malformed UTF-8 data"); } }, parse: function (a) { return b.parse(unescape(encodeURIComponent(a))) } },
|
||||
q = l.BufferedBlockAlgorithm = t.extend({
|
||||
reset: function () { this._data = new r.init; this._nDataBytes = 0 }, _append: function (a) { "string" == typeof a && (a = x.parse(a)); this._data.concat(a); this._nDataBytes += a.sigBytes }, _process: function (a) { var c = this._data, e = c.words, j = c.sigBytes, k = this.blockSize, b = j / (4 * k), b = a ? u.ceil(b) : u.max((b | 0) - this._minBufferSize, 0); a = b * k; j = u.min(4 * a, j); if (a) { for (var q = 0; q < a; q += k)this._doProcessBlock(e, q); q = e.splice(0, a); c.sigBytes -= j } return new r.init(q, j) }, clone: function () {
|
||||
var a = t.clone.call(this);
|
||||
a._data = this._data.clone(); return a
|
||||
}, _minBufferSize: 0
|
||||
}); l.Hasher = q.extend({
|
||||
cfg: t.extend(), init: function (a) { this.cfg = this.cfg.extend(a); this.reset() }, reset: function () { q.reset.call(this); this._doReset() }, update: function (a) { this._append(a); this._process(); return this }, finalize: function (a) { a && this._append(a); return this._doFinalize() }, blockSize: 16, _createHelper: function (a) { return function (b, e) { return (new a.init(e)).finalize(b) } }, _createHmacHelper: function (a) {
|
||||
return function (b, e) {
|
||||
return (new n.HMAC.init(a,
|
||||
e)).finalize(b)
|
||||
}
|
||||
}
|
||||
}); var n = d.algo = {}; return d
|
||||
}(Math);
|
||||
(function () {
|
||||
var u = CryptoJS, p = u.lib.WordArray; u.enc.Base64 = {
|
||||
stringify: function (d) { var l = d.words, p = d.sigBytes, t = this._map; d.clamp(); d = []; for (var r = 0; r < p; r += 3)for (var w = (l[r >>> 2] >>> 24 - 8 * (r % 4) & 255) << 16 | (l[r + 1 >>> 2] >>> 24 - 8 * ((r + 1) % 4) & 255) << 8 | l[r + 2 >>> 2] >>> 24 - 8 * ((r + 2) % 4) & 255, v = 0; 4 > v && r + 0.75 * v < p; v++)d.push(t.charAt(w >>> 6 * (3 - v) & 63)); if (l = t.charAt(64)) for (; d.length % 4;)d.push(l); return d.join("") }, parse: function (d) {
|
||||
var l = d.length, s = this._map, t = s.charAt(64); t && (t = d.indexOf(t), -1 != t && (l = t)); for (var t = [], r = 0, w = 0; w <
|
||||
l; w++)if (w % 4) { var v = s.indexOf(d.charAt(w - 1)) << 2 * (w % 4), b = s.indexOf(d.charAt(w)) >>> 6 - 2 * (w % 4); t[r >>> 2] |= (v | b) << 24 - 8 * (r % 4); r++ } return p.create(t, r)
|
||||
}, _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
|
||||
}
|
||||
})();
|
||||
(function (u) {
|
||||
function p(b, n, a, c, e, j, k) { b = b + (n & a | ~n & c) + e + k; return (b << j | b >>> 32 - j) + n } function d(b, n, a, c, e, j, k) { b = b + (n & c | a & ~c) + e + k; return (b << j | b >>> 32 - j) + n } function l(b, n, a, c, e, j, k) { b = b + (n ^ a ^ c) + e + k; return (b << j | b >>> 32 - j) + n } function s(b, n, a, c, e, j, k) { b = b + (a ^ (n | ~c)) + e + k; return (b << j | b >>> 32 - j) + n } for (var t = CryptoJS, r = t.lib, w = r.WordArray, v = r.Hasher, r = t.algo, b = [], x = 0; 64 > x; x++)b[x] = 4294967296 * u.abs(u.sin(x + 1)) | 0; r = r.MD5 = v.extend({
|
||||
_doReset: function () { this._hash = new w.init([1732584193, 4023233417, 2562383102, 271733878]) },
|
||||
_doProcessBlock: function (q, n) {
|
||||
for (var a = 0; 16 > a; a++) { var c = n + a, e = q[c]; q[c] = (e << 8 | e >>> 24) & 16711935 | (e << 24 | e >>> 8) & 4278255360 } var a = this._hash.words, c = q[n + 0], e = q[n + 1], j = q[n + 2], k = q[n + 3], z = q[n + 4], r = q[n + 5], t = q[n + 6], w = q[n + 7], v = q[n + 8], A = q[n + 9], B = q[n + 10], C = q[n + 11], u = q[n + 12], D = q[n + 13], E = q[n + 14], x = q[n + 15], f = a[0], m = a[1], g = a[2], h = a[3], f = p(f, m, g, h, c, 7, b[0]), h = p(h, f, m, g, e, 12, b[1]), g = p(g, h, f, m, j, 17, b[2]), m = p(m, g, h, f, k, 22, b[3]), f = p(f, m, g, h, z, 7, b[4]), h = p(h, f, m, g, r, 12, b[5]), g = p(g, h, f, m, t, 17, b[6]), m = p(m, g, h, f, w, 22, b[7]),
|
||||
f = p(f, m, g, h, v, 7, b[8]), h = p(h, f, m, g, A, 12, b[9]), g = p(g, h, f, m, B, 17, b[10]), m = p(m, g, h, f, C, 22, b[11]), f = p(f, m, g, h, u, 7, b[12]), h = p(h, f, m, g, D, 12, b[13]), g = p(g, h, f, m, E, 17, b[14]), m = p(m, g, h, f, x, 22, b[15]), f = d(f, m, g, h, e, 5, b[16]), h = d(h, f, m, g, t, 9, b[17]), g = d(g, h, f, m, C, 14, b[18]), m = d(m, g, h, f, c, 20, b[19]), f = d(f, m, g, h, r, 5, b[20]), h = d(h, f, m, g, B, 9, b[21]), g = d(g, h, f, m, x, 14, b[22]), m = d(m, g, h, f, z, 20, b[23]), f = d(f, m, g, h, A, 5, b[24]), h = d(h, f, m, g, E, 9, b[25]), g = d(g, h, f, m, k, 14, b[26]), m = d(m, g, h, f, v, 20, b[27]), f = d(f, m, g, h, D, 5, b[28]), h = d(h, f,
|
||||
m, g, j, 9, b[29]), g = d(g, h, f, m, w, 14, b[30]), m = d(m, g, h, f, u, 20, b[31]), f = l(f, m, g, h, r, 4, b[32]), h = l(h, f, m, g, v, 11, b[33]), g = l(g, h, f, m, C, 16, b[34]), m = l(m, g, h, f, E, 23, b[35]), f = l(f, m, g, h, e, 4, b[36]), h = l(h, f, m, g, z, 11, b[37]), g = l(g, h, f, m, w, 16, b[38]), m = l(m, g, h, f, B, 23, b[39]), f = l(f, m, g, h, D, 4, b[40]), h = l(h, f, m, g, c, 11, b[41]), g = l(g, h, f, m, k, 16, b[42]), m = l(m, g, h, f, t, 23, b[43]), f = l(f, m, g, h, A, 4, b[44]), h = l(h, f, m, g, u, 11, b[45]), g = l(g, h, f, m, x, 16, b[46]), m = l(m, g, h, f, j, 23, b[47]), f = s(f, m, g, h, c, 6, b[48]), h = s(h, f, m, g, w, 10, b[49]), g = s(g, h, f, m,
|
||||
E, 15, b[50]), m = s(m, g, h, f, r, 21, b[51]), f = s(f, m, g, h, u, 6, b[52]), h = s(h, f, m, g, k, 10, b[53]), g = s(g, h, f, m, B, 15, b[54]), m = s(m, g, h, f, e, 21, b[55]), f = s(f, m, g, h, v, 6, b[56]), h = s(h, f, m, g, x, 10, b[57]), g = s(g, h, f, m, t, 15, b[58]), m = s(m, g, h, f, D, 21, b[59]), f = s(f, m, g, h, z, 6, b[60]), h = s(h, f, m, g, C, 10, b[61]), g = s(g, h, f, m, j, 15, b[62]), m = s(m, g, h, f, A, 21, b[63]); a[0] = a[0] + f | 0; a[1] = a[1] + m | 0; a[2] = a[2] + g | 0; a[3] = a[3] + h | 0
|
||||
}, _doFinalize: function () {
|
||||
var b = this._data, n = b.words, a = 8 * this._nDataBytes, c = 8 * b.sigBytes; n[c >>> 5] |= 128 << 24 - c % 32; var e = u.floor(a /
|
||||
4294967296); n[(c + 64 >>> 9 << 4) + 15] = (e << 8 | e >>> 24) & 16711935 | (e << 24 | e >>> 8) & 4278255360; n[(c + 64 >>> 9 << 4) + 14] = (a << 8 | a >>> 24) & 16711935 | (a << 24 | a >>> 8) & 4278255360; b.sigBytes = 4 * (n.length + 1); this._process(); b = this._hash; n = b.words; for (a = 0; 4 > a; a++)c = n[a], n[a] = (c << 8 | c >>> 24) & 16711935 | (c << 24 | c >>> 8) & 4278255360; return b
|
||||
}, clone: function () { var b = v.clone.call(this); b._hash = this._hash.clone(); return b }
|
||||
}); t.MD5 = v._createHelper(r); t.HmacMD5 = v._createHmacHelper(r)
|
||||
})(Math);
|
||||
(function () {
|
||||
var u = CryptoJS, p = u.lib, d = p.Base, l = p.WordArray, p = u.algo, s = p.EvpKDF = d.extend({ cfg: d.extend({ keySize: 4, hasher: p.MD5, iterations: 1 }), init: function (d) { this.cfg = this.cfg.extend(d) }, compute: function (d, r) { for (var p = this.cfg, s = p.hasher.create(), b = l.create(), u = b.words, q = p.keySize, p = p.iterations; u.length < q;) { n && s.update(n); var n = s.update(d).finalize(r); s.reset(); for (var a = 1; a < p; a++)n = s.finalize(n), s.reset(); b.concat(n) } b.sigBytes = 4 * q; return b } }); u.EvpKDF = function (d, l, p) {
|
||||
return s.create(p).compute(d,
|
||||
l)
|
||||
}
|
||||
})();
|
||||
CryptoJS.lib.Cipher || function (u) {
|
||||
var p = CryptoJS, d = p.lib, l = d.Base, s = d.WordArray, t = d.BufferedBlockAlgorithm, r = p.enc.Base64, w = p.algo.EvpKDF, v = d.Cipher = t.extend({
|
||||
cfg: l.extend(), createEncryptor: function (e, a) { return this.create(this._ENC_XFORM_MODE, e, a) }, createDecryptor: function (e, a) { return this.create(this._DEC_XFORM_MODE, e, a) }, init: function (e, a, b) { this.cfg = this.cfg.extend(b); this._xformMode = e; this._key = a; this.reset() }, reset: function () { t.reset.call(this); this._doReset() }, process: function (e) { this._append(e); return this._process() },
|
||||
finalize: function (e) { e && this._append(e); return this._doFinalize() }, keySize: 4, ivSize: 4, _ENC_XFORM_MODE: 1, _DEC_XFORM_MODE: 2, _createHelper: function (e) { return { encrypt: function (b, k, d) { return ("string" == typeof k ? c : a).encrypt(e, b, k, d) }, decrypt: function (b, k, d) { return ("string" == typeof k ? c : a).decrypt(e, b, k, d) } } }
|
||||
}); d.StreamCipher = v.extend({ _doFinalize: function () { return this._process(!0) }, blockSize: 1 }); var b = p.mode = {}, x = function (e, a, b) {
|
||||
var c = this._iv; c ? this._iv = u : c = this._prevBlock; for (var d = 0; d < b; d++)e[a + d] ^=
|
||||
c[d]
|
||||
}, q = (d.BlockCipherMode = l.extend({ createEncryptor: function (e, a) { return this.Encryptor.create(e, a) }, createDecryptor: function (e, a) { return this.Decryptor.create(e, a) }, init: function (e, a) { this._cipher = e; this._iv = a } })).extend(); q.Encryptor = q.extend({ processBlock: function (e, a) { var b = this._cipher, c = b.blockSize; x.call(this, e, a, c); b.encryptBlock(e, a); this._prevBlock = e.slice(a, a + c) } }); q.Decryptor = q.extend({
|
||||
processBlock: function (e, a) {
|
||||
var b = this._cipher, c = b.blockSize, d = e.slice(a, a + c); b.decryptBlock(e, a); x.call(this,
|
||||
e, a, c); this._prevBlock = d
|
||||
}
|
||||
}); b = b.CBC = q; q = (p.pad = {}).Pkcs7 = { pad: function (a, b) { for (var c = 4 * b, c = c - a.sigBytes % c, d = c << 24 | c << 16 | c << 8 | c, l = [], n = 0; n < c; n += 4)l.push(d); c = s.create(l, c); a.concat(c) }, unpad: function (a) { a.sigBytes -= a.words[a.sigBytes - 1 >>> 2] & 255 } }; d.BlockCipher = v.extend({
|
||||
cfg: v.cfg.extend({ mode: b, padding: q }), reset: function () {
|
||||
v.reset.call(this); var a = this.cfg, b = a.iv, a = a.mode; if (this._xformMode == this._ENC_XFORM_MODE) var c = a.createEncryptor; else c = a.createDecryptor, this._minBufferSize = 1; this._mode = c.call(a,
|
||||
this, b && b.words)
|
||||
}, _doProcessBlock: function (a, b) { this._mode.processBlock(a, b) }, _doFinalize: function () { var a = this.cfg.padding; if (this._xformMode == this._ENC_XFORM_MODE) { a.pad(this._data, this.blockSize); var b = this._process(!0) } else b = this._process(!0), a.unpad(b); return b }, blockSize: 4
|
||||
}); var n = d.CipherParams = l.extend({ init: function (a) { this.mixIn(a) }, toString: function (a) { return (a || this.formatter).stringify(this) } }), b = (p.format = {}).OpenSSL = {
|
||||
stringify: function (a) {
|
||||
var b = a.ciphertext; a = a.salt; return (a ? s.create([1398893684,
|
||||
1701076831]).concat(a).concat(b) : b).toString(r)
|
||||
}, parse: function (a) { a = r.parse(a); var b = a.words; if (1398893684 == b[0] && 1701076831 == b[1]) { var c = s.create(b.slice(2, 4)); b.splice(0, 4); a.sigBytes -= 16 } return n.create({ ciphertext: a, salt: c }) }
|
||||
}, a = d.SerializableCipher = l.extend({
|
||||
cfg: l.extend({ format: b }), encrypt: function (a, b, c, d) { d = this.cfg.extend(d); var l = a.createEncryptor(c, d); b = l.finalize(b); l = l.cfg; return n.create({ ciphertext: b, key: c, iv: l.iv, algorithm: a, mode: l.mode, padding: l.padding, blockSize: a.blockSize, formatter: d.format }) },
|
||||
decrypt: function (a, b, c, d) { d = this.cfg.extend(d); b = this._parse(b, d.format); return a.createDecryptor(c, d).finalize(b.ciphertext) }, _parse: function (a, b) { return "string" == typeof a ? b.parse(a, this) : a }
|
||||
}), p = (p.kdf = {}).OpenSSL = { execute: function (a, b, c, d) { d || (d = s.random(8)); a = w.create({ keySize: b + c }).compute(a, d); c = s.create(a.words.slice(b), 4 * c); a.sigBytes = 4 * b; return n.create({ key: a, iv: c, salt: d }) } }, c = d.PasswordBasedCipher = a.extend({
|
||||
cfg: a.cfg.extend({ kdf: p }), encrypt: function (b, c, d, l) {
|
||||
l = this.cfg.extend(l); d = l.kdf.execute(d,
|
||||
b.keySize, b.ivSize); l.iv = d.iv; b = a.encrypt.call(this, b, c, d.key, l); b.mixIn(d); return b
|
||||
}, decrypt: function (b, c, d, l) { l = this.cfg.extend(l); c = this._parse(c, l.format); d = l.kdf.execute(d, b.keySize, b.ivSize, c.salt); l.iv = d.iv; return a.decrypt.call(this, b, c, d.key, l) }
|
||||
})
|
||||
}();
|
||||
(function () {
|
||||
for (var u = CryptoJS, p = u.lib.BlockCipher, d = u.algo, l = [], s = [], t = [], r = [], w = [], v = [], b = [], x = [], q = [], n = [], a = [], c = 0; 256 > c; c++)a[c] = 128 > c ? c << 1 : c << 1 ^ 283; for (var e = 0, j = 0, c = 0; 256 > c; c++) { var k = j ^ j << 1 ^ j << 2 ^ j << 3 ^ j << 4, k = k >>> 8 ^ k & 255 ^ 99; l[e] = k; s[k] = e; var z = a[e], F = a[z], G = a[F], y = 257 * a[k] ^ 16843008 * k; t[e] = y << 24 | y >>> 8; r[e] = y << 16 | y >>> 16; w[e] = y << 8 | y >>> 24; v[e] = y; y = 16843009 * G ^ 65537 * F ^ 257 * z ^ 16843008 * e; b[k] = y << 24 | y >>> 8; x[k] = y << 16 | y >>> 16; q[k] = y << 8 | y >>> 24; n[k] = y; e ? (e = z ^ a[a[a[G ^ z]]], j ^= a[a[j]]) : e = j = 1 } var H = [0, 1, 2, 4, 8,
|
||||
16, 32, 64, 128, 27, 54], d = d.AES = p.extend({
|
||||
_doReset: function () {
|
||||
for (var a = this._key, c = a.words, d = a.sigBytes / 4, a = 4 * ((this._nRounds = d + 6) + 1), e = this._keySchedule = [], j = 0; j < a; j++)if (j < d) e[j] = c[j]; else { var k = e[j - 1]; j % d ? 6 < d && 4 == j % d && (k = l[k >>> 24] << 24 | l[k >>> 16 & 255] << 16 | l[k >>> 8 & 255] << 8 | l[k & 255]) : (k = k << 8 | k >>> 24, k = l[k >>> 24] << 24 | l[k >>> 16 & 255] << 16 | l[k >>> 8 & 255] << 8 | l[k & 255], k ^= H[j / d | 0] << 24); e[j] = e[j - d] ^ k } c = this._invKeySchedule = []; for (d = 0; d < a; d++)j = a - d, k = d % 4 ? e[j] : e[j - 4], c[d] = 4 > d || 4 >= j ? k : b[l[k >>> 24]] ^ x[l[k >>> 16 & 255]] ^ q[l[k >>>
|
||||
8 & 255]] ^ n[l[k & 255]]
|
||||
}, encryptBlock: function (a, b) { this._doCryptBlock(a, b, this._keySchedule, t, r, w, v, l) }, decryptBlock: function (a, c) { var d = a[c + 1]; a[c + 1] = a[c + 3]; a[c + 3] = d; this._doCryptBlock(a, c, this._invKeySchedule, b, x, q, n, s); d = a[c + 1]; a[c + 1] = a[c + 3]; a[c + 3] = d }, _doCryptBlock: function (a, b, c, d, e, j, l, f) {
|
||||
for (var m = this._nRounds, g = a[b] ^ c[0], h = a[b + 1] ^ c[1], k = a[b + 2] ^ c[2], n = a[b + 3] ^ c[3], p = 4, r = 1; r < m; r++)var q = d[g >>> 24] ^ e[h >>> 16 & 255] ^ j[k >>> 8 & 255] ^ l[n & 255] ^ c[p++], s = d[h >>> 24] ^ e[k >>> 16 & 255] ^ j[n >>> 8 & 255] ^ l[g & 255] ^ c[p++], t =
|
||||
d[k >>> 24] ^ e[n >>> 16 & 255] ^ j[g >>> 8 & 255] ^ l[h & 255] ^ c[p++], n = d[n >>> 24] ^ e[g >>> 16 & 255] ^ j[h >>> 8 & 255] ^ l[k & 255] ^ c[p++], g = q, h = s, k = t; q = (f[g >>> 24] << 24 | f[h >>> 16 & 255] << 16 | f[k >>> 8 & 255] << 8 | f[n & 255]) ^ c[p++]; s = (f[h >>> 24] << 24 | f[k >>> 16 & 255] << 16 | f[n >>> 8 & 255] << 8 | f[g & 255]) ^ c[p++]; t = (f[k >>> 24] << 24 | f[n >>> 16 & 255] << 16 | f[g >>> 8 & 255] << 8 | f[h & 255]) ^ c[p++]; n = (f[n >>> 24] << 24 | f[g >>> 16 & 255] << 16 | f[h >>> 8 & 255] << 8 | f[k & 255]) ^ c[p++]; a[b] = q; a[b + 1] = s; a[b + 2] = t; a[b + 3] = n
|
||||
}, keySize: 8
|
||||
}); u.AES = p._createHelper(d)
|
||||
})();
|
Before Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 421 KiB |
@ -1,32 +0,0 @@
|
||||
.el-tip {
|
||||
position: fixed;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
width: 500px;
|
||||
padding: 8px 16px;
|
||||
margin: 0;
|
||||
margin-left: -250px;
|
||||
margin-top: -60px;
|
||||
box-sizing: border-box;
|
||||
border-radius: 4px;
|
||||
position: relative;
|
||||
background-color: #fff;
|
||||
overflow: hidden;
|
||||
opacity: 1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
transition: opacity .2s;
|
||||
}
|
||||
|
||||
.el-tip--warning {
|
||||
background-color: #fdf6ec;
|
||||
color: #e6a23c;
|
||||
}
|
||||
|
||||
.el-tip__title {
|
||||
line-height: 18px;
|
||||
}
|
||||
.el-tip_img img{
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
function util() {
|
||||
this.flag = true;
|
||||
var body = document.body;
|
||||
var safe = this;
|
||||
var validVersion = function() {
|
||||
var browser = navigator.appName
|
||||
var b_version = navigator.appVersion
|
||||
var version = b_version.split(";");
|
||||
var trim_Version = version[1].replace(/[ ]/g, "");
|
||||
if (trim_Version == 'WOW64') {
|
||||
safe.flag = false
|
||||
} else if (browser == "Microsoft Internet Explorer" && trim_Version == "MSIE6.0") {
|
||||
safe.flag = false
|
||||
} else if (browser == "Microsoft Internet Explorer" && trim_Version == "MSIE7.0") {
|
||||
safe.flag = false
|
||||
} else if (browser == "Microsoft Internet Explorer" && trim_Version == "MSIE8.0") {
|
||||
safe.flag = false
|
||||
} else if (browser == "Microsoft Internet Explorer" && trim_Version == "MSIE9.0") {
|
||||
safe.flag = false
|
||||
}
|
||||
}
|
||||
this.setBody = function() {
|
||||
var str = '<div class="el-tip el-tip--warning" id="tip">' +
|
||||
'<div class="el-tip_content">' +
|
||||
'<span class="el-tip__title">' +
|
||||
'您乘坐的浏览器版本太低了,你可以把浏览器从兼容模式调到极速模式' +
|
||||
'<br /> 实在不行就换浏览器吧;' +
|
||||
'</span>' +
|
||||
'<div class="el-tip_img">' +
|
||||
'<img src="/util/screen/huohu.png" alt="">' +
|
||||
'<img src="/util/screen/guge.png" alt="">' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'</div>';
|
||||
body.innerHTML = str + body.innerHTML
|
||||
}
|
||||
this.init = function() {
|
||||
validVersion(); //检测浏览器的版本
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
var creen = new util().init();
|
||||
var flag = creen.flag;
|
||||
if (!flag) {
|
||||
creen.setBody();
|
||||
}
|
25
src/App.vue
Normal file → Executable file
@ -1,29 +1,18 @@
|
||||
<template>
|
||||
<div id="app">
|
||||
<router-view />
|
||||
</div>
|
||||
<router-view />
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "app",
|
||||
data() {
|
||||
return {};
|
||||
},
|
||||
watch: {},
|
||||
created() {
|
||||
},
|
||||
methods: {},
|
||||
computed: {}
|
||||
};
|
||||
}
|
||||
</script>
|
||||
<style lang="scss">
|
||||
|
||||
<style>
|
||||
html,
|
||||
body,
|
||||
#app {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
.avue--detail .el-col{
|
||||
margin-bottom: 0;
|
||||
}
|
||||
</style>
|
||||
|
@ -1,8 +1,8 @@
|
||||
import request from '@/router/axios';
|
||||
import request from '@/axios';
|
||||
|
||||
export const getList = (current, size, params) => {
|
||||
return request({
|
||||
url: '/api/blade-system/region/list',
|
||||
url: '/blade-system/region/list',
|
||||
method: 'get',
|
||||
params: {
|
||||
...params,
|
||||
@ -14,7 +14,7 @@ export const getList = (current, size, params) => {
|
||||
|
||||
export const getLazyTree = (parentCode, params) => {
|
||||
return request({
|
||||
url: '/api/blade-system/region/lazy-tree',
|
||||
url: '/blade-system/region/lazy-tree',
|
||||
method: 'get',
|
||||
params: {
|
||||
...params,
|
||||
@ -25,7 +25,7 @@ export const getLazyTree = (parentCode, params) => {
|
||||
|
||||
export const getDetail = (code) => {
|
||||
return request({
|
||||
url: '/api/blade-system/region/detail',
|
||||
url: '/blade-system/region/detail',
|
||||
method: 'get',
|
||||
params: {
|
||||
code
|
||||
@ -35,7 +35,7 @@ export const getDetail = (code) => {
|
||||
|
||||
export const remove = (id) => {
|
||||
return request({
|
||||
url: '/api/blade-system/region/remove',
|
||||
url: '/blade-system/region/remove',
|
||||
method: 'post',
|
||||
params: {
|
||||
id,
|
||||
@ -45,7 +45,7 @@ export const remove = (id) => {
|
||||
|
||||
export const submit = (row) => {
|
||||
return request({
|
||||
url: '/api/blade-system/region/submit',
|
||||
url: '/blade-system/region/submit',
|
||||
method: 'post',
|
||||
data: row
|
||||
})
|
||||
|
@ -1,8 +1,8 @@
|
||||
import request from '@/router/axios';
|
||||
import request from '@/axios';
|
||||
|
||||
export const getList = (current, size, params) => {
|
||||
return request({
|
||||
url: '/api/blade-desk/notice/list',
|
||||
url: '/blade-desk/notice/list',
|
||||
method: 'get',
|
||||
params: {
|
||||
...params,
|
||||
@ -15,7 +15,7 @@ export const getList = (current, size, params) => {
|
||||
|
||||
export const remove = (ids) => {
|
||||
return request({
|
||||
url: '/api/blade-desk/notice/remove',
|
||||
url: '/blade-desk/notice/remove',
|
||||
method: 'post',
|
||||
params: {
|
||||
ids,
|
||||
@ -26,7 +26,7 @@ export const remove = (ids) => {
|
||||
|
||||
export const add = (row) => {
|
||||
return request({
|
||||
url: '/api/blade-desk/notice/submit',
|
||||
url: '/blade-desk/notice/submit',
|
||||
method: 'post',
|
||||
data: row,
|
||||
cryptoToken: false,
|
||||
@ -35,7 +35,7 @@ export const add = (row) => {
|
||||
|
||||
export const update = (row) => {
|
||||
return request({
|
||||
url: '/api/blade-desk/notice/submit',
|
||||
url: '/blade-desk/notice/submit',
|
||||
method: 'post',
|
||||
data: row,
|
||||
cryptoToken: false,
|
||||
@ -44,7 +44,7 @@ export const update = (row) => {
|
||||
|
||||
export const getNotice = (id) => {
|
||||
return request({
|
||||
url: '/api/blade-desk/notice/detail',
|
||||
url: '/blade-desk/notice/detail',
|
||||
method: 'get',
|
||||
params: {
|
||||
id
|
||||
|
@ -1,8 +1,8 @@
|
||||
import request from '@/router/axios';
|
||||
import request from '@/axios';
|
||||
|
||||
export const getUsualList = (current, size) => {
|
||||
return request({
|
||||
url: '/api/blade-log/usual/list',
|
||||
url: '/blade-log/usual/list',
|
||||
method: 'get',
|
||||
params: {
|
||||
current,
|
||||
@ -13,7 +13,7 @@ export const getUsualList = (current, size) => {
|
||||
|
||||
export const getApiList = (current, size) => {
|
||||
return request({
|
||||
url: '/api/blade-log/api/list',
|
||||
url: '/blade-log/api/list',
|
||||
method: 'get',
|
||||
params: {
|
||||
current,
|
||||
@ -24,7 +24,7 @@ export const getApiList = (current, size) => {
|
||||
|
||||
export const getErrorList = (current, size) => {
|
||||
return request({
|
||||
url: '/api/blade-log/error/list',
|
||||
url: '/blade-log/error/list',
|
||||
method: 'get',
|
||||
params: {
|
||||
current,
|
||||
@ -36,7 +36,7 @@ export const getErrorList = (current, size) => {
|
||||
|
||||
export const getUsualLogs = (id) => {
|
||||
return request({
|
||||
url: '/api/blade-log/usual/detail',
|
||||
url: '/blade-log/usual/detail',
|
||||
method: 'get',
|
||||
params: {
|
||||
id,
|
||||
@ -45,7 +45,7 @@ export const getUsualLogs = (id) => {
|
||||
}
|
||||
export const getApiLogs = (id) => {
|
||||
return request({
|
||||
url: '/api/blade-log/api/detail',
|
||||
url: '/blade-log/api/detail',
|
||||
method: 'get',
|
||||
params: {
|
||||
id,
|
||||
@ -54,7 +54,7 @@ export const getApiLogs = (id) => {
|
||||
}
|
||||
export const getErrorLogs = (id) => {
|
||||
return request({
|
||||
url: '/api/blade-log/error/detail',
|
||||
url: '/blade-log/error/detail',
|
||||
method: 'get',
|
||||
params: {
|
||||
id,
|
||||
|
@ -1,8 +1,8 @@
|
||||
import request from '@/router/axios';
|
||||
import request from '@/axios';
|
||||
|
||||
export const getList = (current, size, params) => {
|
||||
return request({
|
||||
url: '/api/blade-report/report/rest/list',
|
||||
url: '/blade-report/report/rest/list',
|
||||
method: 'get',
|
||||
params: {
|
||||
...params,
|
||||
@ -13,7 +13,7 @@ export const getList = (current, size, params) => {
|
||||
}
|
||||
export const remove = (ids) => {
|
||||
return request({
|
||||
url: '/api/blade-report/report/rest/remove',
|
||||
url: '/blade-report/report/rest/remove',
|
||||
method: 'post',
|
||||
params: {
|
||||
ids,
|
||||
|
@ -1,8 +1,8 @@
|
||||
import request from '@/router/axios';
|
||||
import request from '@/axios';
|
||||
|
||||
export const getList = (current, size, params) => {
|
||||
return request({
|
||||
url: '/api/blade-system/client/list',
|
||||
url: '/blade-system/client/list',
|
||||
method: 'get',
|
||||
params: {
|
||||
...params,
|
||||
@ -14,7 +14,7 @@ export const getList = (current, size, params) => {
|
||||
|
||||
export const getDetail = (id) => {
|
||||
return request({
|
||||
url: '/api/blade-system/client/detail',
|
||||
url: '/blade-system/client/detail',
|
||||
method: 'get',
|
||||
params: {
|
||||
id
|
||||
@ -24,7 +24,7 @@ export const getDetail = (id) => {
|
||||
|
||||
export const remove = (ids) => {
|
||||
return request({
|
||||
url: '/api/blade-system/client/remove',
|
||||
url: '/blade-system/client/remove',
|
||||
method: 'post',
|
||||
params: {
|
||||
ids,
|
||||
@ -34,7 +34,7 @@ export const remove = (ids) => {
|
||||
|
||||
export const add = (row) => {
|
||||
return request({
|
||||
url: '/api/blade-system/client/submit',
|
||||
url: '/blade-system/client/submit',
|
||||
method: 'post',
|
||||
data: row
|
||||
})
|
||||
@ -42,7 +42,7 @@ export const add = (row) => {
|
||||
|
||||
export const update = (row) => {
|
||||
return request({
|
||||
url: '/api/blade-system/client/submit',
|
||||
url: '/blade-system/client/submit',
|
||||
method: 'post',
|
||||
data: row
|
||||
})
|
||||
|
@ -1,8 +1,8 @@
|
||||
import request from '@/router/axios';
|
||||
import request from '@/axios';
|
||||
|
||||
export const getList = (current, size, params) => {
|
||||
return request({
|
||||
url: '/api/blade-system/dept/list',
|
||||
url: '/blade-system/dept/list',
|
||||
method: 'get',
|
||||
params: {
|
||||
...params,
|
||||
@ -13,7 +13,7 @@ export const getList = (current, size, params) => {
|
||||
}
|
||||
export const remove = (ids) => {
|
||||
return request({
|
||||
url: '/api/blade-system/dept/remove',
|
||||
url: '/blade-system/dept/remove',
|
||||
method: 'post',
|
||||
params: {
|
||||
ids,
|
||||
@ -23,7 +23,7 @@ export const remove = (ids) => {
|
||||
|
||||
export const add = (row) => {
|
||||
return request({
|
||||
url: '/api/blade-system/dept/submit',
|
||||
url: '/blade-system/dept/submit',
|
||||
method: 'post',
|
||||
data: row
|
||||
})
|
||||
@ -31,7 +31,7 @@ export const add = (row) => {
|
||||
|
||||
export const update = (row) => {
|
||||
return request({
|
||||
url: '/api/blade-system/dept/submit',
|
||||
url: '/blade-system/dept/submit',
|
||||
method: 'post',
|
||||
data: row
|
||||
})
|
||||
@ -39,7 +39,7 @@ export const update = (row) => {
|
||||
|
||||
export const getDept = (id) => {
|
||||
return request({
|
||||
url: '/api/blade-system/dept/detail',
|
||||
url: '/blade-system/dept/detail',
|
||||
method: 'get',
|
||||
params: {
|
||||
id,
|
||||
@ -48,7 +48,7 @@ export const getDept = (id) => {
|
||||
}
|
||||
export const getDeptTree = (tenantId) => {
|
||||
return request({
|
||||
url: '/api/blade-system/dept/tree',
|
||||
url: '/blade-system/dept/tree',
|
||||
method: 'get',
|
||||
params: {
|
||||
tenantId,
|
||||
|
@ -1,8 +1,8 @@
|
||||
import request from '@/router/axios';
|
||||
import request from '@/axios';
|
||||
|
||||
export const getList = (current, size, params) => {
|
||||
return request({
|
||||
url: '/api/blade-system/dict/list',
|
||||
url: '/blade-system/dict/list',
|
||||
method: 'get',
|
||||
params: {
|
||||
...params,
|
||||
@ -13,7 +13,7 @@ export const getList = (current, size, params) => {
|
||||
}
|
||||
export const remove = (ids) => {
|
||||
return request({
|
||||
url: '/api/blade-system/dict/remove',
|
||||
url: '/blade-system/dict/remove',
|
||||
method: 'post',
|
||||
params: {
|
||||
ids,
|
||||
@ -23,7 +23,7 @@ export const remove = (ids) => {
|
||||
|
||||
export const add = (row) => {
|
||||
return request({
|
||||
url: '/api/blade-system/dict/submit',
|
||||
url: '/blade-system/dict/submit',
|
||||
method: 'post',
|
||||
data: row
|
||||
})
|
||||
@ -31,7 +31,7 @@ export const add = (row) => {
|
||||
|
||||
export const update = (row) => {
|
||||
return request({
|
||||
url: '/api/blade-system/dict/submit',
|
||||
url: '/blade-system/dict/submit',
|
||||
method: 'post',
|
||||
data: row
|
||||
})
|
||||
@ -40,7 +40,7 @@ export const update = (row) => {
|
||||
|
||||
export const getDict = (id) => {
|
||||
return request({
|
||||
url: '/api/blade-system/dict/detail',
|
||||
url: '/blade-system/dict/detail',
|
||||
method: 'get',
|
||||
params: {
|
||||
id,
|
||||
@ -49,7 +49,7 @@ export const getDict = (id) => {
|
||||
}
|
||||
export const getDictTree = () => {
|
||||
return request({
|
||||
url: '/api/blade-system/dict/tree?code=DICT',
|
||||
url: '/blade-system/dict/tree?code=DICT',
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
@ -1,8 +1,8 @@
|
||||
import request from '@/router/axios';
|
||||
import request from '@/axios';
|
||||
|
||||
export const getList = (current, size, params) => {
|
||||
return request({
|
||||
url: '/api/blade-system/menu/list',
|
||||
url: '/blade-system/menu/list',
|
||||
method: 'get',
|
||||
params: {
|
||||
...params,
|
||||
@ -13,7 +13,7 @@ export const getList = (current, size, params) => {
|
||||
}
|
||||
export const remove = (ids) => {
|
||||
return request({
|
||||
url: '/api/blade-system/menu/remove',
|
||||
url: '/blade-system/menu/remove',
|
||||
method: 'post',
|
||||
params: {
|
||||
ids,
|
||||
@ -23,7 +23,7 @@ export const remove = (ids) => {
|
||||
|
||||
export const add = (row) => {
|
||||
return request({
|
||||
url: '/api/blade-system/menu/submit',
|
||||
url: '/blade-system/menu/submit',
|
||||
method: 'post',
|
||||
data: row
|
||||
})
|
||||
@ -31,7 +31,7 @@ export const add = (row) => {
|
||||
|
||||
export const update = (row) => {
|
||||
return request({
|
||||
url: '/api/blade-system/menu/submit',
|
||||
url: '/blade-system/menu/submit',
|
||||
method: 'post',
|
||||
data: row
|
||||
})
|
||||
@ -39,7 +39,7 @@ export const update = (row) => {
|
||||
|
||||
export const getMenu = (id) => {
|
||||
return request({
|
||||
url: '/api/blade-system/menu/detail',
|
||||
url: '/blade-system/menu/detail',
|
||||
method: 'get',
|
||||
params: {
|
||||
id,
|
||||
@ -49,7 +49,7 @@ export const getMenu = (id) => {
|
||||
|
||||
export const getLazyMenuList = (parentId, params) => {
|
||||
return request({
|
||||
url: '/api/blade-system/menu/lazy-menu-list',
|
||||
url: '/blade-system/menu/lazy-menu-list',
|
||||
method: 'get',
|
||||
params: {
|
||||
...params,
|
||||
|
@ -1,8 +1,8 @@
|
||||
import request from '@/router/axios';
|
||||
import request from '@/axios';
|
||||
|
||||
export const getList = (current, size, params) => {
|
||||
return request({
|
||||
url: '/api/blade-system/param/list',
|
||||
url: '/blade-system/param/list',
|
||||
method: 'get',
|
||||
params: {
|
||||
...params,
|
||||
@ -13,7 +13,7 @@ export const getList = (current, size, params) => {
|
||||
}
|
||||
export const remove = (ids) => {
|
||||
return request({
|
||||
url: '/api/blade-system/param/remove',
|
||||
url: '/blade-system/param/remove',
|
||||
method: 'post',
|
||||
params: {
|
||||
ids,
|
||||
@ -23,7 +23,7 @@ export const remove = (ids) => {
|
||||
|
||||
export const add = (row) => {
|
||||
return request({
|
||||
url: '/api/blade-system/param/submit',
|
||||
url: '/blade-system/param/submit',
|
||||
method: 'post',
|
||||
data: row
|
||||
})
|
||||
@ -31,7 +31,7 @@ export const add = (row) => {
|
||||
|
||||
export const update = (row) => {
|
||||
return request({
|
||||
url: '/api/blade-system/param/submit',
|
||||
url: '/blade-system/param/submit',
|
||||
method: 'post',
|
||||
data: row
|
||||
})
|
||||
|
@ -1,8 +1,8 @@
|
||||
import request from '@/router/axios';
|
||||
import request from '@/axios';
|
||||
|
||||
export const getList = (current, size, params) => {
|
||||
return request({
|
||||
url: '/api/blade-system/post/list',
|
||||
url: '/blade-system/post/list',
|
||||
method: 'get',
|
||||
params: {
|
||||
...params,
|
||||
@ -14,7 +14,7 @@ export const getList = (current, size, params) => {
|
||||
|
||||
export const getPostList = (tenantId) => {
|
||||
return request({
|
||||
url: '/api/blade-system/post/select',
|
||||
url: '/blade-system/post/select',
|
||||
method: 'get',
|
||||
params: {
|
||||
tenantId
|
||||
@ -24,7 +24,7 @@ export const getPostList = (tenantId) => {
|
||||
|
||||
export const getDetail = (id) => {
|
||||
return request({
|
||||
url: '/api/blade-system/post/detail',
|
||||
url: '/blade-system/post/detail',
|
||||
method: 'get',
|
||||
params: {
|
||||
id
|
||||
@ -34,7 +34,7 @@ export const getDetail = (id) => {
|
||||
|
||||
export const remove = (ids) => {
|
||||
return request({
|
||||
url: '/api/blade-system/post/remove',
|
||||
url: '/blade-system/post/remove',
|
||||
method: 'post',
|
||||
params: {
|
||||
ids,
|
||||
@ -44,7 +44,7 @@ export const remove = (ids) => {
|
||||
|
||||
export const add = (row) => {
|
||||
return request({
|
||||
url: '/api/blade-system/post/submit',
|
||||
url: '/blade-system/post/submit',
|
||||
method: 'post',
|
||||
data: row
|
||||
})
|
||||
@ -52,7 +52,7 @@ export const add = (row) => {
|
||||
|
||||
export const update = (row) => {
|
||||
return request({
|
||||
url: '/api/blade-system/post/submit',
|
||||
url: '/blade-system/post/submit',
|
||||
method: 'post',
|
||||
data: row
|
||||
})
|
||||
|
@ -1,8 +1,8 @@
|
||||
import request from '@/router/axios';
|
||||
import request from '@/axios';
|
||||
|
||||
export const getList = (current, size, params) => {
|
||||
return request({
|
||||
url: '/api/blade-system/role/list',
|
||||
url: '/blade-system/role/list',
|
||||
method: 'get',
|
||||
params: {
|
||||
...params,
|
||||
@ -13,14 +13,14 @@ export const getList = (current, size, params) => {
|
||||
}
|
||||
export const grantTree = () => {
|
||||
return request({
|
||||
url: '/api/blade-system/menu/grant-tree',
|
||||
url: '/blade-system/menu/grant-tree',
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
export const grant = (roleIds, menuIds, dataScopeIds) => {
|
||||
return request({
|
||||
url: '/api/blade-system/role/grant',
|
||||
url: '/blade-system/role/grant',
|
||||
method: 'post',
|
||||
data: {
|
||||
roleIds,
|
||||
@ -32,7 +32,7 @@ export const grant = (roleIds, menuIds, dataScopeIds) => {
|
||||
|
||||
export const remove = (ids) => {
|
||||
return request({
|
||||
url: '/api/blade-system/role/remove',
|
||||
url: '/blade-system/role/remove',
|
||||
method: 'post',
|
||||
params: {
|
||||
ids,
|
||||
@ -42,7 +42,7 @@ export const remove = (ids) => {
|
||||
|
||||
export const add = (row) => {
|
||||
return request({
|
||||
url: '/api/blade-system/role/submit',
|
||||
url: '/blade-system/role/submit',
|
||||
method: 'post',
|
||||
data: row
|
||||
})
|
||||
@ -50,7 +50,7 @@ export const add = (row) => {
|
||||
|
||||
export const update = (row) => {
|
||||
return request({
|
||||
url: '/api/blade-system/role/submit',
|
||||
url: '/blade-system/role/submit',
|
||||
method: 'post',
|
||||
data: row
|
||||
})
|
||||
@ -59,7 +59,7 @@ export const update = (row) => {
|
||||
|
||||
export const getRole = (roleIds) => {
|
||||
return request({
|
||||
url: '/api/blade-system/menu/role-tree-keys',
|
||||
url: '/blade-system/menu/role-tree-keys',
|
||||
method: 'get',
|
||||
params: {
|
||||
roleIds,
|
||||
@ -69,7 +69,7 @@ export const getRole = (roleIds) => {
|
||||
|
||||
export const getRoleTree = (tenantId) => {
|
||||
return request({
|
||||
url: '/api/blade-system/role/tree',
|
||||
url: '/blade-system/role/tree',
|
||||
method: 'get',
|
||||
params: {
|
||||
tenantId,
|
||||
|
@ -1,8 +1,8 @@
|
||||
import request from '@/router/axios';
|
||||
import request from '@/axios';
|
||||
|
||||
export const getListDataScope = (current, size, params) => {
|
||||
return request({
|
||||
url: '/api/blade-system/data-scope/list',
|
||||
url: '/blade-system/data-scope/list',
|
||||
method: 'get',
|
||||
params: {
|
||||
...params,
|
||||
@ -14,7 +14,7 @@ export const getListDataScope = (current, size, params) => {
|
||||
|
||||
export const removeDataScope = (ids) => {
|
||||
return request({
|
||||
url: '/api/blade-system/data-scope/remove',
|
||||
url: '/blade-system/data-scope/remove',
|
||||
method: 'post',
|
||||
params: {
|
||||
ids,
|
||||
@ -24,7 +24,7 @@ export const removeDataScope = (ids) => {
|
||||
|
||||
export const addDataScope = (row) => {
|
||||
return request({
|
||||
url: '/api/blade-system/data-scope/submit',
|
||||
url: '/blade-system/data-scope/submit',
|
||||
method: 'post',
|
||||
data: row
|
||||
})
|
||||
@ -32,7 +32,7 @@ export const addDataScope = (row) => {
|
||||
|
||||
export const updateDataScope = (row) => {
|
||||
return request({
|
||||
url: '/api/blade-system/data-scope/submit',
|
||||
url: '/blade-system/data-scope/submit',
|
||||
method: 'post',
|
||||
data: row
|
||||
})
|
||||
@ -40,7 +40,7 @@ export const updateDataScope = (row) => {
|
||||
|
||||
export const getMenuDataScope = (id) => {
|
||||
return request({
|
||||
url: '/api/blade-system/data-scope/detail',
|
||||
url: '/blade-system/data-scope/detail',
|
||||
method: 'get',
|
||||
params: {
|
||||
id,
|
||||
|
@ -1,8 +1,8 @@
|
||||
import request from '@/router/axios';
|
||||
import request from '@/axios';
|
||||
|
||||
export const getList = (current, size, params) => {
|
||||
return request({
|
||||
url: '/api/blade-system/tenant/list',
|
||||
url: '/blade-system/tenant/list',
|
||||
method: 'get',
|
||||
params: {
|
||||
...params,
|
||||
@ -13,7 +13,7 @@ export const getList = (current, size, params) => {
|
||||
}
|
||||
export const remove = (ids) => {
|
||||
return request({
|
||||
url: '/api/blade-system/tenant/remove',
|
||||
url: '/blade-system/tenant/remove',
|
||||
method: 'post',
|
||||
params: {
|
||||
ids,
|
||||
@ -23,7 +23,7 @@ export const remove = (ids) => {
|
||||
|
||||
export const add = (row) => {
|
||||
return request({
|
||||
url: '/api/blade-system/tenant/submit',
|
||||
url: '/blade-system/tenant/submit',
|
||||
method: 'post',
|
||||
data: row
|
||||
})
|
||||
@ -31,7 +31,7 @@ export const add = (row) => {
|
||||
|
||||
export const update = (row) => {
|
||||
return request({
|
||||
url: '/api/blade-system/tenant/submit',
|
||||
url: '/blade-system/tenant/submit',
|
||||
method: 'post',
|
||||
data: row
|
||||
})
|
||||
@ -39,7 +39,7 @@ export const update = (row) => {
|
||||
|
||||
export const info = (domain) => {
|
||||
return request({
|
||||
url: '/api/blade-system/tenant/info',
|
||||
url: '/blade-system/tenant/info',
|
||||
method: 'get',
|
||||
params: {
|
||||
domain
|
||||
|
@ -1,8 +1,8 @@
|
||||
import request from '@/router/axios';
|
||||
import request from '@/axios';
|
||||
|
||||
export const getList = (current, size, params) => {
|
||||
return request({
|
||||
url: '/api/blade-user/list',
|
||||
url: '/blade-user/list',
|
||||
method: 'get',
|
||||
params: {
|
||||
...params,
|
||||
@ -13,7 +13,7 @@ export const getList = (current, size, params) => {
|
||||
}
|
||||
export const remove = (ids) => {
|
||||
return request({
|
||||
url: '/api/blade-user/remove',
|
||||
url: '/blade-user/remove',
|
||||
method: 'post',
|
||||
params: {
|
||||
ids,
|
||||
@ -23,7 +23,7 @@ export const remove = (ids) => {
|
||||
|
||||
export const add = (row) => {
|
||||
return request({
|
||||
url: '/api/blade-user/submit',
|
||||
url: '/blade-user/submit',
|
||||
method: 'post',
|
||||
data: row
|
||||
})
|
||||
@ -31,7 +31,7 @@ export const add = (row) => {
|
||||
|
||||
export const update = (row) => {
|
||||
return request({
|
||||
url: '/api/blade-user/update',
|
||||
url: '/blade-user/update',
|
||||
method: 'post',
|
||||
data: row
|
||||
})
|
||||
@ -39,7 +39,7 @@ export const update = (row) => {
|
||||
|
||||
export const grant = (userIds, roleIds) => {
|
||||
return request({
|
||||
url: '/api/blade-user/grant',
|
||||
url: '/blade-user/grant',
|
||||
method: 'post',
|
||||
params: {
|
||||
userIds,
|
||||
@ -50,7 +50,7 @@ export const grant = (userIds, roleIds) => {
|
||||
|
||||
export const getUser = (id) => {
|
||||
return request({
|
||||
url: '/api/blade-user/detail',
|
||||
url: '/blade-user/detail',
|
||||
method: 'get',
|
||||
params: {
|
||||
id,
|
||||
@ -60,14 +60,14 @@ export const getUser = (id) => {
|
||||
|
||||
export const getUserInfo = () => {
|
||||
return request({
|
||||
url: '/api/blade-user/info',
|
||||
url: '/blade-user/info',
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
export const resetPassword = (userIds) => {
|
||||
return request({
|
||||
url: '/api/blade-user/reset-password',
|
||||
url: '/blade-user/reset-password',
|
||||
method: 'post',
|
||||
params: {
|
||||
userIds,
|
||||
@ -77,7 +77,7 @@ export const resetPassword = (userIds) => {
|
||||
|
||||
export const updatePassword = (oldPassword, newPassword, newPassword1) => {
|
||||
return request({
|
||||
url: '/api/blade-user/update-password',
|
||||
url: '/blade-user/update-password',
|
||||
method: 'post',
|
||||
params: {
|
||||
oldPassword,
|
||||
|
@ -1,8 +1,8 @@
|
||||
import request from '@/router/axios';
|
||||
import request from '@/axios';
|
||||
|
||||
export const getList = (current, size, params) => {
|
||||
return request({
|
||||
url: '/api/blade-develop/code/list',
|
||||
url: '/blade-develop/code/list',
|
||||
method: 'get',
|
||||
params: {
|
||||
...params,
|
||||
@ -14,7 +14,7 @@ export const getList = (current, size, params) => {
|
||||
|
||||
export const build = (ids) => {
|
||||
return request({
|
||||
url: '/api/blade-develop/code/gen-code',
|
||||
url: '/blade-develop/code/gen-code',
|
||||
method: 'post',
|
||||
params: {
|
||||
ids,
|
||||
@ -24,7 +24,7 @@ export const build = (ids) => {
|
||||
}
|
||||
export const remove = (ids) => {
|
||||
return request({
|
||||
url: '/api/blade-develop/code/remove',
|
||||
url: '/blade-develop/code/remove',
|
||||
method: 'post',
|
||||
params: {
|
||||
ids,
|
||||
@ -34,7 +34,7 @@ export const remove = (ids) => {
|
||||
|
||||
export const add = (row) => {
|
||||
return request({
|
||||
url: '/api/blade-develop/code/submit',
|
||||
url: '/blade-develop/code/submit',
|
||||
method: 'post',
|
||||
data: row
|
||||
})
|
||||
@ -42,7 +42,7 @@ export const add = (row) => {
|
||||
|
||||
export const update = (row) => {
|
||||
return request({
|
||||
url: '/api/blade-develop/code/submit',
|
||||
url: '/blade-develop/code/submit',
|
||||
method: 'post',
|
||||
data: row
|
||||
})
|
||||
@ -50,7 +50,7 @@ export const update = (row) => {
|
||||
|
||||
export const copy = (id) => {
|
||||
return request({
|
||||
url: '/api/blade-develop/code/copy',
|
||||
url: '/blade-develop/code/copy',
|
||||
method: 'post',
|
||||
params: {
|
||||
id,
|
||||
@ -60,7 +60,7 @@ export const copy = (id) => {
|
||||
|
||||
export const getCode = (id) => {
|
||||
return request({
|
||||
url: '/api/blade-develop/code/detail',
|
||||
url: '/blade-develop/code/detail',
|
||||
method: 'get',
|
||||
params: {
|
||||
id,
|
||||
|
@ -1,8 +1,8 @@
|
||||
import request from '@/router/axios';
|
||||
import request from '@/axios';
|
||||
|
||||
export const getList = (current, size, params) => {
|
||||
return request({
|
||||
url: '/api/blade-develop/datasource/list',
|
||||
url: '/blade-develop/datasource/list',
|
||||
method: 'get',
|
||||
params: {
|
||||
...params,
|
||||
@ -14,7 +14,7 @@ export const getList = (current, size, params) => {
|
||||
|
||||
export const getDetail = (id) => {
|
||||
return request({
|
||||
url: '/api/blade-develop/datasource/detail',
|
||||
url: '/blade-develop/datasource/detail',
|
||||
method: 'get',
|
||||
params: {
|
||||
id
|
||||
@ -24,7 +24,7 @@ export const getDetail = (id) => {
|
||||
|
||||
export const remove = (ids) => {
|
||||
return request({
|
||||
url: '/api/blade-develop/datasource/remove',
|
||||
url: '/blade-develop/datasource/remove',
|
||||
method: 'post',
|
||||
params: {
|
||||
ids,
|
||||
@ -34,7 +34,7 @@ export const remove = (ids) => {
|
||||
|
||||
export const add = (row) => {
|
||||
return request({
|
||||
url: '/api/blade-develop/datasource/submit',
|
||||
url: '/blade-develop/datasource/submit',
|
||||
method: 'post',
|
||||
data: row
|
||||
})
|
||||
@ -42,7 +42,7 @@ export const add = (row) => {
|
||||
|
||||
export const update = (row) => {
|
||||
return request({
|
||||
url: '/api/blade-develop/datasource/submit',
|
||||
url: '/blade-develop/datasource/submit',
|
||||
method: 'post',
|
||||
data: row
|
||||
})
|
||||
|
@ -1,8 +1,8 @@
|
||||
import request from '@/router/axios';
|
||||
import request from '@/axios';
|
||||
import website from "@/config/website";
|
||||
|
||||
export const loginByUsername = (tenantId, account, password, type, key, code) => request({
|
||||
url: '/api/blade-auth/token',
|
||||
url: '/blade-auth/token',
|
||||
method: 'post',
|
||||
headers: {
|
||||
'Captcha-Key': key,
|
||||
@ -18,7 +18,7 @@ export const loginByUsername = (tenantId, account, password, type, key, code) =>
|
||||
});
|
||||
|
||||
export const loginBySocial = (tenantId, source, code, state) => request({
|
||||
url: '/api/blade-auth/token',
|
||||
url: '/blade-auth/token',
|
||||
method: 'post',
|
||||
headers: {
|
||||
'Tenant-Id': tenantId
|
||||
@ -34,7 +34,7 @@ export const loginBySocial = (tenantId, source, code, state) => request({
|
||||
});
|
||||
|
||||
export const getButtons = () => request({
|
||||
url: '/api/blade-system/menu/buttons',
|
||||
url: '/blade-system/menu/buttons',
|
||||
method: 'get'
|
||||
});
|
||||
|
||||
@ -44,7 +44,7 @@ export const getUserInfo = () => request({
|
||||
});
|
||||
|
||||
export const refreshToken = (refreshToken) => request({
|
||||
url: '/api/blade-auth/token',
|
||||
url: '/blade-auth/token',
|
||||
method: 'post',
|
||||
params: {
|
||||
refreshToken,
|
||||
@ -54,7 +54,7 @@ export const refreshToken = (refreshToken) => request({
|
||||
})
|
||||
|
||||
export const registerGuest = (form, oauthId) => request({
|
||||
url: '/api/blade-user/register-guest',
|
||||
url: '/blade-user/register-guest',
|
||||
method: 'post',
|
||||
params: {
|
||||
tenantId: form.tenantId,
|
||||
@ -66,12 +66,12 @@ export const registerGuest = (form, oauthId) => request({
|
||||
});
|
||||
|
||||
export const getMenu = () => request({
|
||||
url: '/api/blade-system/menu/routes',
|
||||
url: '/blade-system/menu/routes',
|
||||
method: 'get'
|
||||
});
|
||||
|
||||
export const getCaptcha = () => request({
|
||||
url: '/api/blade-auth/captcha',
|
||||
url: '/blade-auth/captcha',
|
||||
method: 'get'
|
||||
});
|
||||
|
||||
|
26
src/router/axios.js → src/axios.js
Normal file → Executable file
@ -7,15 +7,17 @@
|
||||
*/
|
||||
import axios from 'axios'
|
||||
import store from '@/store/';
|
||||
import router from '@/router/router'
|
||||
import {serialize} from '@/util/util'
|
||||
import {getToken} from '@/util/auth'
|
||||
import {Message} from 'element-ui'
|
||||
import router from '@/router/'
|
||||
import { serialize } from 'utils/util'
|
||||
import { getToken } from 'utils/auth'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import website from '@/config/website';
|
||||
import NProgress from 'nprogress' // progress bar
|
||||
import 'nprogress/nprogress.css' // progress bar style
|
||||
import {Base64} from 'js-base64';
|
||||
import crypto from "@/util/crypto";
|
||||
import { Base64 } from 'js-base64';
|
||||
import { isURL } from 'utils/validate';
|
||||
import { baseUrl } from '@/config/env';
|
||||
import crypto from '@/utils/crypto';
|
||||
|
||||
axios.defaults.timeout = 10000;
|
||||
//返回其他状态吗
|
||||
@ -31,14 +33,18 @@ NProgress.configure({
|
||||
//HTTPrequest拦截
|
||||
axios.interceptors.request.use(config => {
|
||||
NProgress.start() // start progress bar
|
||||
//地址为已经配置状态则不添加前缀
|
||||
if (!isURL(config.url) && !config.url.startsWith(baseUrl)) {
|
||||
config.url = baseUrl + config.url;
|
||||
}
|
||||
const meta = (config.meta || {});
|
||||
const isToken = meta.isToken === false;
|
||||
config.headers['Authorization'] = `Basic ${Base64.encode(`${website.clientId}:${website.clientSecret}`)}`;
|
||||
//headers传递token是否加密
|
||||
const isToken = meta.isToken === false;
|
||||
const cryptoToken = config.cryptoToken === true;
|
||||
const token = getToken();
|
||||
if (token && !isToken) {
|
||||
config.headers['Blade-Auth'] = cryptoToken
|
||||
config.headers[website.Authorization] = cryptoToken
|
||||
? 'crypto ' + crypto.encrypt(token)
|
||||
: 'bearer ' + token;
|
||||
}
|
||||
@ -59,10 +65,10 @@ axios.interceptors.response.use(res => {
|
||||
//如果在白名单里则自行catch逻辑处理
|
||||
if (statusWhiteList.includes(status)) return Promise.reject(res);
|
||||
//如果是401则跳转到登录页面
|
||||
if (status === 401) store.dispatch('FedLogOut').then(() => router.push({path: '/login'}));
|
||||
if (status === 401) store.dispatch('FedLogOut').then(() => router.push({ path: '/login' }));
|
||||
// 如果请求为非200否者默认统一处理
|
||||
if (status !== 200) {
|
||||
Message({
|
||||
ElMessage({
|
||||
message: message,
|
||||
type: 'error'
|
||||
})
|
126
src/components/basic-block/main.vue
Executable file
@ -0,0 +1,126 @@
|
||||
<template>
|
||||
<div class="basic-block"
|
||||
:style="styleName">
|
||||
<div class="box"
|
||||
:style="boxStyleName">
|
||||
<router-link :to="to">
|
||||
<span v-text="text"></span>
|
||||
<p v-text="dept"></p>
|
||||
<i :class="icon"></i>
|
||||
</router-link>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'basicBlock',
|
||||
props: {
|
||||
icon: {
|
||||
type: String,
|
||||
},
|
||||
background: {
|
||||
type: String,
|
||||
},
|
||||
to: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {}
|
||||
}
|
||||
},
|
||||
text: {
|
||||
type: String,
|
||||
},
|
||||
dept: {
|
||||
type: String,
|
||||
},
|
||||
time: {
|
||||
type: [Number, String]
|
||||
},
|
||||
gutter: {
|
||||
type: [Number, String],
|
||||
default: 5,
|
||||
},
|
||||
color: {
|
||||
type: String,
|
||||
},
|
||||
width: {
|
||||
type: [Number, String]
|
||||
},
|
||||
height: {
|
||||
type: [Number, String]
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
styleName () {
|
||||
return {
|
||||
animationDelay: `${this.time / 25}s`,
|
||||
width: `${this.width}px`,
|
||||
height: `${this.height}px`,
|
||||
margin: `${this.gutter}px`,
|
||||
}
|
||||
},
|
||||
boxStyleName () {
|
||||
return {
|
||||
backgroundColor: this.color,
|
||||
backgroundImage: `url('${this.background}')`,
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.basic-block {
|
||||
opacity: 0;
|
||||
|
||||
box-sizing: border-box;
|
||||
color: #fff;
|
||||
animation: mymove 1s;
|
||||
animation-fill-mode: forwards;
|
||||
.box {
|
||||
position: relative;
|
||||
box-sizing: border-box;
|
||||
padding: 15px;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
transition: all 1s;
|
||||
background-size: cover;
|
||||
&:hover {
|
||||
transform: rotateY(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
color: #fff;
|
||||
}
|
||||
span {
|
||||
display: block;
|
||||
font-size: 16px;
|
||||
}
|
||||
p {
|
||||
width: 80%;
|
||||
font-size: 10px;
|
||||
color: #eee;
|
||||
line-height: 22px;
|
||||
}
|
||||
i {
|
||||
position: absolute;
|
||||
bottom: 15px;
|
||||
right: 15px;
|
||||
font-size: 50px !important ;
|
||||
}
|
||||
@keyframes mymove {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: scale(0);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
38
src/components/basic-container/main.vue
Normal file → Executable file
@ -1,6 +1,8 @@
|
||||
<template>
|
||||
<div class="basic-container">
|
||||
<el-card>
|
||||
<div class="basic-container"
|
||||
:style="styleName"
|
||||
:class="{'basic-container--block':block}">
|
||||
<el-card class="basic-container__card">
|
||||
<slot></slot>
|
||||
</el-card>
|
||||
</div>
|
||||
@ -8,16 +10,42 @@
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "basicContainer"
|
||||
name: "basicContainer",
|
||||
props: {
|
||||
radius: {
|
||||
type: [String, Number],
|
||||
default: 10
|
||||
},
|
||||
background: {
|
||||
type: String
|
||||
},
|
||||
block: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
styleName () {
|
||||
return {
|
||||
borderRadius: `${this.radius}px`,
|
||||
background: this.background,
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.basic-container {
|
||||
padding: 10px 6px;
|
||||
border-radius: 10px;
|
||||
box-sizing: border-box;
|
||||
.el-card {
|
||||
&--block {
|
||||
height: 100%;
|
||||
.basic-container__card {
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
&__card {
|
||||
width: 100%;
|
||||
}
|
||||
&:first-child {
|
||||
|
139
src/components/basic-video/main.vue
Normal file
@ -0,0 +1,139 @@
|
||||
<template>
|
||||
<div :style="styleName"
|
||||
class="basic-video">
|
||||
<div class="basic-video__border">
|
||||
<span :style="borderStyleName"></span>
|
||||
<span :style="borderStyleName"></span>
|
||||
<span :style="borderStyleName"></span>
|
||||
<span :style="borderStyleName"></span>
|
||||
</div>
|
||||
<img :style="imgStyleName"
|
||||
class="basic-video__img"
|
||||
:src="background" />
|
||||
<video class="basic-video__main"
|
||||
ref="main"
|
||||
autoplay
|
||||
muted></video>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import RecordVideo from './plugin'
|
||||
export default {
|
||||
name: 'basic-video',
|
||||
props: {
|
||||
background: {
|
||||
type: String
|
||||
},
|
||||
width: {
|
||||
type: [String, Number],
|
||||
default: 500
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
styleName () {
|
||||
return {
|
||||
width: `${this.width}px`
|
||||
}
|
||||
},
|
||||
imgStyleName () {
|
||||
return {
|
||||
width: `${this.width / 2}px`
|
||||
}
|
||||
},
|
||||
borderStyleName () {
|
||||
return {
|
||||
width: `${this.width / 15}px`,
|
||||
height: `${this.width / 15}px`,
|
||||
borderWidth: `${5}px`
|
||||
}
|
||||
},
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
videoObj: null
|
||||
}
|
||||
},
|
||||
mounted () {
|
||||
this.init();
|
||||
},
|
||||
methods: {
|
||||
init () {
|
||||
this.videoObj = new RecordVideo(this.$refs.main);
|
||||
const videoPromise = this.videoObj.init();
|
||||
videoPromise
|
||||
.then(() => {
|
||||
this.videoObj.mediaRecorder.addEventListener('stop', this.getData, false);
|
||||
})
|
||||
},
|
||||
startRecord () {
|
||||
this.videoObj.startRecord()
|
||||
},
|
||||
stopRecord () {
|
||||
this.videoObj.stopRecord();
|
||||
},
|
||||
getData () {
|
||||
const blob = new Blob(this.videoObj.chunks, {
|
||||
type: 'video/mp4'
|
||||
});
|
||||
const reader = new FileReader();
|
||||
reader.readAsDataURL(blob);
|
||||
reader.addEventListener('loadend', () => {
|
||||
var video_base64 = reader.result;
|
||||
this.$emit('data-change', video_base64)
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.basic-video {
|
||||
margin: 0 auto;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
&__border {
|
||||
span {
|
||||
position: absolute;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
border-width: 4px;
|
||||
color: #0073eb;
|
||||
border-style: solid;
|
||||
&:nth-child(1) {
|
||||
left: 15px;
|
||||
top: 15px;
|
||||
border-right: 0;
|
||||
border-bottom: 0;
|
||||
}
|
||||
&:nth-child(2) {
|
||||
right: 15px;
|
||||
top: 15px;
|
||||
border-left: 0;
|
||||
border-bottom: 0;
|
||||
}
|
||||
&:nth-child(3) {
|
||||
bottom: 15px;
|
||||
left: 15px;
|
||||
border-right: 0;
|
||||
border-top: 0;
|
||||
}
|
||||
&:nth-child(4) {
|
||||
bottom: 15px;
|
||||
right: 15px;
|
||||
border-left: 0;
|
||||
border-top: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
&__img {
|
||||
width: 100px;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
&__main {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
90
src/components/basic-video/plugin.js
Normal file
@ -0,0 +1,90 @@
|
||||
export default class RecordVideo {
|
||||
|
||||
/**
|
||||
* 构造函数
|
||||
*
|
||||
* @param {Object} videoObj 视频对象
|
||||
*/
|
||||
constructor(videoObj) {
|
||||
this.video = videoObj;
|
||||
this.mediaRecorder = null;
|
||||
this.chunks = [];
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化
|
||||
*
|
||||
* @return {Object} promise
|
||||
*/
|
||||
init () {
|
||||
// 返回Promise对象
|
||||
// resolve 正常处理
|
||||
// reject 处理异常情况
|
||||
return new Promise((resovle, reject) => {
|
||||
navigator
|
||||
.mediaDevices
|
||||
.getUserMedia({
|
||||
audio: true,
|
||||
video: true
|
||||
// video: {
|
||||
// width: this.videoWidth,
|
||||
// height: this.videoHeight
|
||||
// }
|
||||
})
|
||||
// 返回一个媒体内容的流
|
||||
.then(stream => {
|
||||
// 检测是否支持 srcObject,该属性在新的浏览器支持
|
||||
if ('srcObject' in this.video) {
|
||||
this.video.srcObject = stream;
|
||||
} else {
|
||||
// 兼容旧的浏览器
|
||||
this.video.src = window.URL.createObjectURL(stream);
|
||||
}
|
||||
|
||||
// 当视频的元数据已经加载时触发
|
||||
this.video.addEventListener('loadmetadata', () => {
|
||||
this.video.play();
|
||||
});
|
||||
this.mediaRecorder = new MediaRecorder(stream);
|
||||
this.mediaRecorder.addEventListener('dataavailable', e => {
|
||||
this.chunks.push(e.data);
|
||||
});
|
||||
resovle();
|
||||
})
|
||||
// 异常抓取,包括用于禁用麦克风、摄像头
|
||||
.catch(error => {
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 视频开始录制
|
||||
*/
|
||||
startRecord () {
|
||||
if (this.mediaRecorder.state === 'inactive') {
|
||||
this.mediaRecorder.start();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 视频结束录制
|
||||
*/
|
||||
stopRecord () {
|
||||
if (this.mediaRecorder.state === 'recording') {
|
||||
this.mediaRecorder.stop();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测当前浏览器对否支持
|
||||
*
|
||||
* @return {boolean} 当前浏览器是否支持
|
||||
*/
|
||||
isSupport () {
|
||||
const flag = navigator.mediaDevices && navigator.mediaDevices.getUserMedia;
|
||||
if (flag) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
2
src/components/error-page/403.vue
Normal file → Executable file
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="error-page">
|
||||
<div class="img"
|
||||
style=" background-image: url('/img/bg/403.svg');"></div>
|
||||
style=" background-image: url('/img/403.svg');"></div>
|
||||
<div class="content">
|
||||
<h1>403</h1>
|
||||
<div class="desc">抱歉,你无权访问该页面</div>
|
||||
|
2
src/components/error-page/404.vue
Normal file → Executable file
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="error-page">
|
||||
<div class="img"
|
||||
style=" background-image: url('/img/bg/404.svg');"></div>
|
||||
style=" background-image: url('/img/404.svg');"></div>
|
||||
<div class="content">
|
||||
<h1>404</h1>
|
||||
<div class="desc">抱歉,你访问的页面不存在</div>
|
||||
|
2
src/components/error-page/500.vue
Normal file → Executable file
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="error-page">
|
||||
<div class="img"
|
||||
style=" background-image: url('/img/bg/500.svg');"></div>
|
||||
style=" background-image: url('/img/500.svg');"></div>
|
||||
<div class="content">
|
||||
<h1>500</h1>
|
||||
<div class="desc">抱歉,服务器出错了</div>
|
||||
|
0
src/components/error-page/style.scss
Normal file → Executable file
71
src/components/iframe/main.vue
Normal file → Executable file
@ -2,84 +2,46 @@
|
||||
<basic-container>
|
||||
<iframe :src="src"
|
||||
class="iframe"
|
||||
ref="iframe"></iframe>
|
||||
ref="iframe" />
|
||||
</basic-container>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapGetters } from "vuex";
|
||||
import NProgress from "nprogress"; // progress bar
|
||||
import "nprogress/nprogress.css"; // progress bar style
|
||||
export default {
|
||||
name: "AvueIframe",
|
||||
data() {
|
||||
return {
|
||||
urlPath: this.getUrlPath() //iframe src 路径
|
||||
};
|
||||
data () {
|
||||
return {};
|
||||
},
|
||||
created() {
|
||||
created () {
|
||||
NProgress.configure({ showSpinner: false });
|
||||
},
|
||||
mounted() {
|
||||
mounted () {
|
||||
this.load();
|
||||
this.resize();
|
||||
},
|
||||
props: ["routerPath"],
|
||||
watch: {
|
||||
$route: function() {
|
||||
$route: function () {
|
||||
this.load();
|
||||
},
|
||||
routerPath: function() {
|
||||
// 监听routerPath变化,改变src路径
|
||||
this.urlPath = this.getUrlPath();
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(["screen"]),
|
||||
src() {
|
||||
return this.$route.query.src
|
||||
? this.$route.query.src.replace("$", "#")
|
||||
: this.urlPath;
|
||||
src () {
|
||||
return this.$route.query.url.replace(/#/g, "&")
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 显示等待框
|
||||
show() {
|
||||
show () {
|
||||
NProgress.start();
|
||||
},
|
||||
// 隐藏等待狂
|
||||
hide() {
|
||||
hide () {
|
||||
NProgress.done();
|
||||
},
|
||||
// 加载浏览器窗口变化自适应
|
||||
resize() {
|
||||
window.onresize = () => {
|
||||
this.iframeInit();
|
||||
};
|
||||
},
|
||||
// 加载组件
|
||||
load() {
|
||||
load () {
|
||||
this.show();
|
||||
var flag = true; //URL是否包含问号
|
||||
if (this.$route.query.src.indexOf("?") == -1) {
|
||||
flag = false;
|
||||
}
|
||||
var list = [];
|
||||
for (var key in this.$route.query) {
|
||||
if (key != "src" && key != "name" && key != "i18n") {
|
||||
list.push(`${key}= this.$route.query[key]`);
|
||||
}
|
||||
}
|
||||
list = list.join("&").toString();
|
||||
if (flag) {
|
||||
this.$route.query.src = `${this.$route.query.src}${
|
||||
list.length > 0 ? `&list` : ""
|
||||
}`;
|
||||
} else {
|
||||
this.$route.query.src = `${this.$route.query.src}${
|
||||
list.length > 0 ? `?list` : ""
|
||||
}`;
|
||||
}
|
||||
//超时3s自动隐藏等待狂,加强用户体验
|
||||
let time = 3;
|
||||
const timeFunc = setInterval(() => {
|
||||
@ -92,10 +54,9 @@ export default {
|
||||
this.iframeInit();
|
||||
},
|
||||
//iframe窗口初始化
|
||||
iframeInit() {
|
||||
iframeInit () {
|
||||
const iframe = this.$refs.iframe;
|
||||
const clientHeight =
|
||||
document.documentElement.clientHeight - (screen > 1 ? 200 : 130);
|
||||
const clientHeight = document.documentElement.clientHeight - 150;
|
||||
if (!iframe) return;
|
||||
iframe.style.height = `${clientHeight}px`;
|
||||
if (iframe.attachEvent) {
|
||||
@ -107,12 +68,6 @@ export default {
|
||||
this.hide();
|
||||
};
|
||||
}
|
||||
},
|
||||
getUrlPath: function() {
|
||||
//获取 iframe src 路径
|
||||
let url = window.location.href;
|
||||
url = url.replace("/myiframe", "");
|
||||
return url;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -1,106 +1,117 @@
|
||||
<template>
|
||||
<el-dialog title="账号注册"
|
||||
append-to-body
|
||||
:visible.sync="accountBox"
|
||||
v-model="accountBox"
|
||||
:close-on-click-modal="false"
|
||||
:close-on-press-escape="false"
|
||||
:show-close="false"
|
||||
width="20%">
|
||||
<el-form :model="form" ref="form" label-width="80px">
|
||||
<el-form :model="form"
|
||||
ref="form"
|
||||
label-width="80px">
|
||||
<el-form-item label="租户编号">
|
||||
<el-input v-model="form.tenantId" placeholder="请输入租户编号"></el-input>
|
||||
<el-input v-model="form.tenantId"
|
||||
placeholder="请输入租户编号"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="用户姓名">
|
||||
<el-input v-model="form.name" placeholder="请输入用户姓名"></el-input>
|
||||
<el-input v-model="form.name"
|
||||
placeholder="请输入用户姓名"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="账号名称">
|
||||
<el-input v-model="form.account" placeholder="请输入账号名称"></el-input>
|
||||
<el-input v-model="form.account"
|
||||
placeholder="请输入账号名称"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="账号密码">
|
||||
<el-input v-model="form.password" placeholder="请输入账号密码"></el-input>
|
||||
<el-input v-model="form.password"
|
||||
placeholder="请输入账号密码"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="确认密码">
|
||||
<el-input v-model="form.password2" placeholder="请输入确认密码"></el-input>
|
||||
<el-input v-model="form.password2"
|
||||
placeholder="请输入确认密码"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" :loading="loading" @click="handleRegister">确 定</el-button>
|
||||
</span>
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button type="primary"
|
||||
:loading="loading"
|
||||
@click="handleRegister">确 定</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {mapGetters} from "vuex";
|
||||
import {validatenull} from "@/util/validate";
|
||||
import {registerGuest} from "@/api/user";
|
||||
import { mapGetters } from "vuex";
|
||||
import { validatenull } from "@/utils/validate";
|
||||
import { registerGuest } from "@/api/user";
|
||||
|
||||
export default {
|
||||
name: "thirdRegister",
|
||||
data() {
|
||||
return {
|
||||
form: {
|
||||
tenantId: '',
|
||||
name: '',
|
||||
account: '',
|
||||
password: '',
|
||||
password2: '',
|
||||
},
|
||||
loading: false,
|
||||
accountBox: false,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(["userInfo"]),
|
||||
},
|
||||
created() {
|
||||
|
||||
},
|
||||
mounted() {
|
||||
console.log(this.userInfo)
|
||||
// 若未登录则弹出框进行绑定
|
||||
if (validatenull(this.userInfo.userId) || this.userInfo.userId < 0) {
|
||||
this.form.name = this.userInfo.account;
|
||||
this.form.account = this.userInfo.account;
|
||||
this.accountBox = true;
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleRegister() {
|
||||
if (this.form.tenantId === '') {
|
||||
this.$message.warning("请先输入租户编号");
|
||||
return;
|
||||
}
|
||||
if (this.form.account === '') {
|
||||
this.$message.warning("请先输入账号名称");
|
||||
return;
|
||||
}
|
||||
if (this.form.password === '' || this.form.password2 === '') {
|
||||
this.$message.warning("请先输入密码");
|
||||
return;
|
||||
}
|
||||
if (this.form.password !== this.form.password2) {
|
||||
this.$message.warning("两次密码输入不一致");
|
||||
return;
|
||||
}
|
||||
this.loading = true;
|
||||
registerGuest(this.form, this.userInfo.oauthId).then(res => {
|
||||
this.loading = false;
|
||||
const data = res.data;
|
||||
if (data.success) {
|
||||
this.accountBox = false;
|
||||
this.$alert("注册申请已提交,请耐心等待管理员通过!", '注册提示').then(() => {
|
||||
this.$store.dispatch("LogOut").then(() => {
|
||||
this.$router.push({path: "/login"});
|
||||
});
|
||||
})
|
||||
} else {
|
||||
this.$message.error(data.msg || '提交失败');
|
||||
}
|
||||
}, error => {
|
||||
window.console.log(error);
|
||||
this.loading = false;
|
||||
});
|
||||
export default {
|
||||
name: "thirdRegister",
|
||||
data () {
|
||||
return {
|
||||
form: {
|
||||
tenantId: '',
|
||||
name: '',
|
||||
account: '',
|
||||
password: '',
|
||||
password2: '',
|
||||
},
|
||||
loading: false,
|
||||
accountBox: false,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(["userInfo"]),
|
||||
},
|
||||
created () {
|
||||
|
||||
},
|
||||
mounted () {
|
||||
console.log(this.userInfo)
|
||||
// 若未登录则弹出框进行绑定
|
||||
if (validatenull(this.userInfo.userId) || this.userInfo.userId < 0) {
|
||||
this.form.name = this.userInfo.account;
|
||||
this.form.account = this.userInfo.account;
|
||||
this.accountBox = true;
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleRegister () {
|
||||
if (this.form.tenantId === '') {
|
||||
this.$message.warning("请先输入租户编号");
|
||||
return;
|
||||
}
|
||||
if (this.form.account === '') {
|
||||
this.$message.warning("请先输入账号名称");
|
||||
return;
|
||||
}
|
||||
if (this.form.password === '' || this.form.password2 === '') {
|
||||
this.$message.warning("请先输入密码");
|
||||
return;
|
||||
}
|
||||
if (this.form.password !== this.form.password2) {
|
||||
this.$message.warning("两次密码输入不一致");
|
||||
return;
|
||||
}
|
||||
this.loading = true;
|
||||
registerGuest(this.form, this.userInfo.oauthId).then(res => {
|
||||
this.loading = false;
|
||||
const data = res.data;
|
||||
if (data.success) {
|
||||
this.accountBox = false;
|
||||
this.$alert("注册申请已提交,请耐心等待管理员通过!", '注册提示').then(() => {
|
||||
this.$store.dispatch("LogOut").then(() => {
|
||||
this.$router.push({ path: "/login" });
|
||||
});
|
||||
})
|
||||
} else {
|
||||
this.$message.error(data.msg || '提交失败');
|
||||
}
|
||||
}, error => {
|
||||
window.console.log(error);
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
};
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
23
src/config/env.js
Normal file → Executable file
@ -1,21 +1,2 @@
|
||||
// 配置编译环境和线上环境之间的切换
|
||||
|
||||
let baseUrl = '';
|
||||
let iconfontVersion = ['567566_pwc3oottzol', '1066523_6bvkeuqao36'];
|
||||
let iconfontUrl = `//at.alicdn.com/t/font_$key.css`;
|
||||
let codeUrl = `${baseUrl}/code`
|
||||
const env = process.env
|
||||
if (env.NODE_ENV == 'development') {
|
||||
baseUrl = ``; // 开发环境地址
|
||||
} else if (env.NODE_ENV == 'production') {
|
||||
baseUrl = ``; //生产环境地址
|
||||
} else if (env.NODE_ENV == 'test') {
|
||||
baseUrl = ``; //测试环境地址
|
||||
}
|
||||
export {
|
||||
baseUrl,
|
||||
iconfontUrl,
|
||||
iconfontVersion,
|
||||
codeUrl,
|
||||
env
|
||||
}
|
||||
let baseUrl = import.meta.env.VITE_APP_API
|
||||
export { baseUrl }
|
47
src/config/website.js
Normal file → Executable file
@ -3,39 +3,44 @@
|
||||
*/
|
||||
export default {
|
||||
title: "saber",
|
||||
logo: "A",
|
||||
key: 'saber',//配置主键,目前用于存储
|
||||
indexTitle: 'Saber Admin',
|
||||
clientId: 'saber', // 客户端id
|
||||
clientSecret: 'saber_secret', // 客户端密钥
|
||||
tenantMode: true, // 是否开启租户模式
|
||||
captchaMode: true, // 是否开启验证码模式
|
||||
logo: "S",
|
||||
key: 'saber',//配置主键,目前用于存储
|
||||
lockPage: '/lock',
|
||||
tokenTime: 100,
|
||||
tokenTime: 3000,//token过期时间
|
||||
Authorization: 'Blade-Auth',
|
||||
//http的status默认放行不才用统一处理的,
|
||||
statusWhiteList: [],
|
||||
//配置首页不可关闭
|
||||
isFirstPage: false,
|
||||
setting: {
|
||||
sidebar: 'vertical',
|
||||
tag: true,
|
||||
debug: true,
|
||||
collapse: true,
|
||||
search: true,
|
||||
lock: true,
|
||||
screenshot: true,
|
||||
fullscren: true,
|
||||
theme: true,
|
||||
menu: true
|
||||
},
|
||||
fistPage: {
|
||||
label: "首页",
|
||||
value: "/wel/index",
|
||||
params: {},
|
||||
query: {},
|
||||
meta: {
|
||||
i18n: 'dashboard'
|
||||
},
|
||||
group: [],
|
||||
close: false
|
||||
name: "首页",
|
||||
path: "/wel/index"
|
||||
},
|
||||
//配置菜单的属性
|
||||
menu: {
|
||||
iconDefault: 'iconfont icon-caidan',
|
||||
props: {
|
||||
label: 'name',
|
||||
path: 'path',
|
||||
icon: 'source',
|
||||
children: 'children'
|
||||
}
|
||||
iconDefault: 'icon-caidan',
|
||||
label: 'name',
|
||||
path: 'path',
|
||||
icon: 'source',
|
||||
children: 'children',
|
||||
query: 'query',
|
||||
href: 'path',
|
||||
meta: 'meta'
|
||||
},
|
||||
//auth配置
|
||||
auth: {
|
||||
|
0
src/docker/Dockerfile
Normal file → Executable file
44
src/error.js
Normal file → Executable file
@ -1,24 +1,24 @@
|
||||
import Vue from 'vue';
|
||||
import store from './store'
|
||||
Vue.config.errorHandler = function(err, vm, info) {
|
||||
|
||||
Vue.nextTick(() => {
|
||||
store.commit('ADD_LOGS', {
|
||||
type: 'error',
|
||||
message: err.message,
|
||||
stack: err.stack,
|
||||
info
|
||||
})
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
console.group('>>>>>> 错误信息 >>>>>>')
|
||||
console.log(info)
|
||||
console.groupEnd();
|
||||
console.group('>>>>>> Vue 实例 >>>>>>')
|
||||
console.log(vm)
|
||||
console.groupEnd();
|
||||
console.group('>>>>>> Error >>>>>>')
|
||||
console.log(err)
|
||||
console.groupEnd();
|
||||
}
|
||||
})
|
||||
export default {
|
||||
install: (app) => {
|
||||
app.config.errorHandler = (err, vm, info) => {
|
||||
store.commit('ADD_LOGS', {
|
||||
type: 'error',
|
||||
message: err.message,
|
||||
stack: err.stack,
|
||||
info
|
||||
})
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
console.group('>>>>>> 错误信息 >>>>>>')
|
||||
console.log(info)
|
||||
console.groupEnd();
|
||||
console.group('>>>>>> Vue 实例 >>>>>>')
|
||||
console.log(vm)
|
||||
console.groupEnd();
|
||||
console.group('>>>>>> Error >>>>>>')
|
||||
console.log(err)
|
||||
console.groupEnd();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
148
src/lang/en.js
Normal file → Executable file
@ -1,106 +1,101 @@
|
||||
export default {
|
||||
title: 'Saber Admin',
|
||||
title: 'Avue is a framework',
|
||||
tip: 'tip',
|
||||
logoutTip: 'Exit the system, do you want to continue?',
|
||||
submitText: 'submit',
|
||||
cancelText: 'cancel',
|
||||
search: 'Please input search content',
|
||||
menuTip: 'none menu list',
|
||||
common: {
|
||||
condition: 'condition',
|
||||
display: 'display',
|
||||
hide: 'hide'
|
||||
},
|
||||
tip: {
|
||||
select: 'Please select',
|
||||
input: 'Please input'
|
||||
},
|
||||
upload: {
|
||||
upload: 'upload',
|
||||
tip: 'Drag files here,/'
|
||||
},
|
||||
date: {
|
||||
start: 'Start date',
|
||||
end: 'End date',
|
||||
t: 'today',
|
||||
y: 'yesterday',
|
||||
n: 'nearly 7',
|
||||
a: 'whole'
|
||||
},
|
||||
form: {
|
||||
printBtn: 'print',
|
||||
mockBtn: 'mock',
|
||||
submitBtn: 'submit',
|
||||
emptyBtn: 'empty'
|
||||
},
|
||||
crud: {
|
||||
filter: {
|
||||
addBtn: 'add',
|
||||
clearBtn: 'clear',
|
||||
resetBtn: 'reset',
|
||||
cancelBtn: 'cancel',
|
||||
submitBtn: 'submit'
|
||||
feedback: 'feedback',
|
||||
submit: 'submit',
|
||||
wel: {
|
||||
info: 'Good morning, Smallwei, Avue is a framework',
|
||||
dept: 'a certain technology department',
|
||||
team: 'Team ranking',
|
||||
project: 'Project access',
|
||||
count: 'Item number',
|
||||
data: {
|
||||
subtitle: 'real time',
|
||||
column1: 'Classified statistics',
|
||||
column2: 'Annex statistics',
|
||||
column3: 'Article statistics',
|
||||
key1: 'C',
|
||||
key2: 'A',
|
||||
key3: 'A',
|
||||
text1: 'Total Record Number of Classifications',
|
||||
text2: 'Number of attachments Uploaded',
|
||||
text3: 'Comment frequency'
|
||||
},
|
||||
column: {
|
||||
name: 'name',
|
||||
hide: 'hide',
|
||||
fixed: 'fixed',
|
||||
filters: 'filters',
|
||||
sortable: 'sortable',
|
||||
index: 'index',
|
||||
width: 'width'
|
||||
data2: {
|
||||
column1: 'Registration today',
|
||||
column2: 'Login today',
|
||||
column3: 'Subscription today',
|
||||
column4: 'Todays review'
|
||||
},
|
||||
tipStartTitle: 'Currently selected',
|
||||
tipEndTitle: 'items',
|
||||
editTitle: 'edit',
|
||||
copyTitle: 'copy',
|
||||
addTitle: 'add',
|
||||
viewTitle: 'view',
|
||||
filterTitle: 'filter',
|
||||
showTitle: 'showTitle',
|
||||
menu: 'menu',
|
||||
addBtn: 'add',
|
||||
show: 'show',
|
||||
hide: 'hide',
|
||||
open: 'open',
|
||||
shrink: 'shrink',
|
||||
printBtn: 'print',
|
||||
excelBtn: 'excel',
|
||||
updateBtn: 'update',
|
||||
cancelBtn: 'cancel',
|
||||
searchBtn: 'search',
|
||||
emptyBtn: 'empty',
|
||||
menuBtn: 'menu',
|
||||
saveBtn: 'save',
|
||||
viewBtn: 'view',
|
||||
editBtn: 'edit',
|
||||
copyBtn: 'copy',
|
||||
delBtn: 'delete'
|
||||
data3: {
|
||||
column1: 'Conversion rate(Day 28%)',
|
||||
column2: 'Attendance rate(Day 11%)',
|
||||
column3: 'Attendance rate(Day 33%)'
|
||||
},
|
||||
data4: {
|
||||
column1: 'Error log',
|
||||
column2: 'Data display',
|
||||
column3: 'Privilege management',
|
||||
column4: 'user management'
|
||||
},
|
||||
table: {
|
||||
rw: 'Work Tasks',
|
||||
nr: 'Work content',
|
||||
sj: 'Working hours',
|
||||
}
|
||||
},
|
||||
route: {
|
||||
setting: 'setting',
|
||||
detail: 'detail',
|
||||
info: 'info',
|
||||
website: 'website',
|
||||
dashboard: 'dashboard',
|
||||
more: 'more',
|
||||
tags: 'tags',
|
||||
store: 'store',
|
||||
permission: 'permission',
|
||||
api: 'api',
|
||||
logs: 'logs',
|
||||
table: 'table',
|
||||
crud: 'crud',
|
||||
params: 'params',
|
||||
form: 'form',
|
||||
top: 'backtop',
|
||||
affix: 'affix',
|
||||
data: 'data',
|
||||
cache: 'cache',
|
||||
error: 'error',
|
||||
test: 'test',
|
||||
out: 'out',
|
||||
about: 'about'
|
||||
},
|
||||
login: {
|
||||
title: 'Login ',
|
||||
info: 'BladeX Development Platform',
|
||||
tenantId: 'Please input tenantId',
|
||||
info: 'Rapid Development Framework of General Management System',
|
||||
username: 'Please input username',
|
||||
password: 'Please input a password',
|
||||
wechat: 'Wechat',
|
||||
qq: 'QQ',
|
||||
github: 'github',
|
||||
gitee: 'gitee',
|
||||
phone: 'Please input a phone',
|
||||
code: 'Please input a code',
|
||||
submit: 'Login',
|
||||
userLogin: 'userLogin',
|
||||
phoneLogin: 'phoneLogin',
|
||||
thirdLogin: 'thirdLogin',
|
||||
ssoLogin: 'ssoLogin',
|
||||
faceLogin: 'faceLogin',
|
||||
msgText: 'send code',
|
||||
msgSuccess: 'reissued code',
|
||||
},
|
||||
navbar: {
|
||||
setting: 'setting',
|
||||
info: 'info',
|
||||
logOut: 'logout',
|
||||
userinfo: 'userinfo',
|
||||
switchDept : 'switch dept',
|
||||
dashboard: 'dashboard',
|
||||
lock: 'lock',
|
||||
bug: 'none bug',
|
||||
@ -115,8 +110,7 @@ export default {
|
||||
tagsView: {
|
||||
search: 'Search',
|
||||
menu: 'menu',
|
||||
clearCache: 'Clear Cache',
|
||||
closeOthers: 'Close Others',
|
||||
closeAll: 'Close All'
|
||||
}
|
||||
};
|
||||
}
|
41
src/lang/index.js
Normal file → Executable file
@ -1,28 +1,31 @@
|
||||
import Vue from 'vue'
|
||||
import VueI18n from 'vue-i18n'
|
||||
import elementEnLocale from 'element-ui/lib/locale/lang/en' // element-ui lang
|
||||
import elementZhLocale from 'element-ui/lib/locale/lang/zh-CN'// element-ui lang
|
||||
import { createI18n } from 'vue-i18n'
|
||||
import Store from '@/store'
|
||||
import elementEnLocale from 'element-plus/es/locale/lang/en'
|
||||
import elementZhLocale from 'element-plus/es/locale/lang/zh-cn'
|
||||
import elementJaLocale from 'element-plus/es/locale/lang/ja'
|
||||
import enLocale from './en'
|
||||
import zhLocale from './zh'
|
||||
import { getStore } from '@/util/store'
|
||||
Vue.use(VueI18n)
|
||||
const Avue = window.AVUE;
|
||||
const messages = {
|
||||
import jaLocale from './ja'
|
||||
import AvueEnLocale from '@smallwei/avue/lib/locale/lang/en'
|
||||
import AvueZhLocale from '@smallwei/avue/lib/locale/lang/zh'
|
||||
export const messages = {
|
||||
en: {
|
||||
...enLocale,
|
||||
...elementEnLocale,
|
||||
...Avue.locale.en,
|
||||
...AvueEnLocale,
|
||||
...elementEnLocale
|
||||
},
|
||||
zh: {
|
||||
'zh-cn': {
|
||||
...zhLocale,
|
||||
...AvueZhLocale,
|
||||
...elementZhLocale,
|
||||
...Avue.locale.zh,
|
||||
},
|
||||
ja: {
|
||||
...jaLocale,
|
||||
...elementJaLocale
|
||||
}
|
||||
}
|
||||
|
||||
const i18n = new VueI18n({
|
||||
locale: getStore({ name: 'language' }) || 'zh',
|
||||
messages
|
||||
})
|
||||
|
||||
export default i18n
|
||||
export const language = Store.getters.language
|
||||
export default createI18n({
|
||||
locale: language,
|
||||
messages,
|
||||
});
|
113
src/lang/ja.js
Executable file
@ -0,0 +1,113 @@
|
||||
export default {
|
||||
tip: 'ヒント',
|
||||
title: 'Avue汎用管理システムの快速開発フレームワーク',
|
||||
logoutTip: 'システムを終了します。続けますか?',
|
||||
submitText: 'を選択します',
|
||||
cancelText: 'キャンセル',
|
||||
search: '検索内容を入力してください。',
|
||||
menuTip: 'メニューが見つかりませんでした',
|
||||
feedback: '意見のフィードバック',
|
||||
submit: '送信',
|
||||
wel: {
|
||||
info: 'おはようございます。Smallweiさん、Avueさんの想像を超えるフレームワークです。',
|
||||
dept: '私はavueチームの下の部門です。ハーピ部門です。',
|
||||
team: 'チーム内ランキング',
|
||||
project: 'プロジェクトアクセス',
|
||||
count: '項目数',
|
||||
data: {
|
||||
subtitle: 'リアルタイム',
|
||||
column1: '分類統計',
|
||||
column2: '添付統計',
|
||||
column3: '文章統計',
|
||||
key1: '分',
|
||||
key2: '附',
|
||||
key3: 'コメントは、',
|
||||
text1: '現在分類総記録数',
|
||||
text2: '現在アップロードされている添付ファイルの数',
|
||||
text3: 'コメント回数'
|
||||
},
|
||||
data2: {
|
||||
column1: '今日登録します。',
|
||||
column2: '今日ログイン',
|
||||
column3: '今日は購読します。',
|
||||
column4: '今日のコメント'
|
||||
},
|
||||
data3: {
|
||||
column1: '転化率(日同28%)',
|
||||
column2: '署名率(日同11%)',
|
||||
column3: 'ビザ率(日同11%)'
|
||||
},
|
||||
data4: {
|
||||
column1: 'エラーログ',
|
||||
column2: 'データ展示',
|
||||
column3: '権限管理',
|
||||
column4: 'ユーザー管理'
|
||||
},
|
||||
table: {
|
||||
rw: '作業任務',
|
||||
nr: '仕事内容',
|
||||
sj: '勤務時間'
|
||||
}
|
||||
},
|
||||
route: {
|
||||
setting: '個人設定',
|
||||
detail: '詳細ページ',
|
||||
info: '個人情報',
|
||||
website: '公式サイト',
|
||||
dashboard: 'トップページ',
|
||||
メモリ: 'より多く',
|
||||
tags: 'ラベル',
|
||||
store: 'ローカルストア',
|
||||
api: 'グローバル関数',
|
||||
logs: 'ログ',
|
||||
table: 'テーブル',
|
||||
crud: 'テンプレート',
|
||||
params: 'パラメータ',
|
||||
more: '詳細',
|
||||
data: 'データ展示',
|
||||
permission: '権限',
|
||||
top: 'はトップに戻る',
|
||||
affix: '画鋲',
|
||||
cache: 'ページバッファ',
|
||||
error: '異常ページ',
|
||||
test: 'テストページ'
|
||||
},
|
||||
login: {
|
||||
title: 'ログイン ',
|
||||
info: '汎用管理システムの高速開発フレーム',
|
||||
username: 'アカウントを入力してください',
|
||||
password: 'アウンを入れてくださいませんか?',
|
||||
wechat: 'WeChat',
|
||||
qq: 'QQ',
|
||||
phone: '携帯の番号を入力してください',
|
||||
code: '認証コードを入力してください',
|
||||
submit: 'ログイン',
|
||||
faceLogin: 'ログーン',
|
||||
userLogin: 'アカウントのパスワード',
|
||||
phoneLogin: '携帯番号の登録',
|
||||
thirdLogin: '第三者登録',
|
||||
msgText: '認証コードを送信',
|
||||
msgSuccess: '秒後に再送信',
|
||||
},
|
||||
navbar: {
|
||||
setting: '個人設定',
|
||||
logOut: 'ログアウト',
|
||||
userinfo: '個人情報',
|
||||
dashboard: '最初のページ',
|
||||
lock: 'スクリーンをロックする',
|
||||
bug: 'エラーログがありません',
|
||||
bugs: 'バーのエラーログ',
|
||||
screenfullF: 'フルスクリーンを終了',
|
||||
screenfull: 'フルスクリーン',
|
||||
language: '英語で話します',
|
||||
notice: 'メッセージ',
|
||||
theme: 'メッセージング',
|
||||
color: '色を変える'
|
||||
},
|
||||
tagsView: {
|
||||
search: '検索',
|
||||
menu: 'より多く',
|
||||
closeOthers: 'は他の',
|
||||
closeAll: 'すべてを閉じる。'
|
||||
}
|
||||
}
|
137
src/lang/zh.js
Normal file → Executable file
@ -1,84 +1,70 @@
|
||||
export default {
|
||||
title: 'Saber企业管理平台',
|
||||
tip: '提示',
|
||||
title: 'Saber企业级开发平台',
|
||||
logoutTip: '退出系统, 是否继续?',
|
||||
submitText: '确定',
|
||||
cancelText: '取消',
|
||||
search: '请输入搜索内容',
|
||||
menuTip: '没有发现菜单',
|
||||
common: {
|
||||
condition: '条件',
|
||||
display: '显示',
|
||||
hide: '隐藏'
|
||||
},
|
||||
tip: {
|
||||
select: '请选择',
|
||||
input: '请输入'
|
||||
},
|
||||
upload: {
|
||||
upload: '点击上传',
|
||||
tip: '将文件拖到此处,或'
|
||||
},
|
||||
date: {
|
||||
start: '开始日期',
|
||||
end: '结束日期',
|
||||
t: '今日',
|
||||
y: '昨日',
|
||||
n: '近7天',
|
||||
a: '全部'
|
||||
},
|
||||
form: {
|
||||
printBtn: '打 印',
|
||||
mockBtn: '模 拟',
|
||||
submitBtn: '提 交',
|
||||
emptyBtn: '清 空'
|
||||
},
|
||||
crud: {
|
||||
filter: {
|
||||
addBtn: '新增条件',
|
||||
clearBtn: '清空数据',
|
||||
resetBtn: '清空条件',
|
||||
cancelBtn: '取 消',
|
||||
submitBtn: '确 定'
|
||||
wel: {
|
||||
info: '早安,Smallwei,Avuex一款超乎你想象的框架!',
|
||||
dept: '我是avue团队下的一个部门-哈皮部门-哈皮职位',
|
||||
team: '团队内排名',
|
||||
project: '项目访问',
|
||||
count: '项目数',
|
||||
data: {
|
||||
subtitle: '实时',
|
||||
column1: '分类统计',
|
||||
column2: '附件统计',
|
||||
column3: '文章统计',
|
||||
key1: '分',
|
||||
key2: '附',
|
||||
key3: '评',
|
||||
text1: '当前分类总记录数',
|
||||
text2: '当前上传的附件数',
|
||||
text3: '评论次数'
|
||||
},
|
||||
column: {
|
||||
name: '列名',
|
||||
hide: '隐藏',
|
||||
fixed: '冻结',
|
||||
filters: '过滤',
|
||||
sortable: '排序',
|
||||
index: '顺序',
|
||||
width: '宽度'
|
||||
data2: {
|
||||
column1: '今日注册',
|
||||
column2: '今日登录',
|
||||
column3: '今日订阅',
|
||||
column4: '今日评论'
|
||||
},
|
||||
tipStartTitle: '当前表格已选择',
|
||||
tipEndTitle: '项',
|
||||
editTitle: '编 辑',
|
||||
copyTitle: '复 制',
|
||||
addTitle: '新 增',
|
||||
viewTitle: '查 看',
|
||||
filterTitle: '过滤条件',
|
||||
showTitle: '列显隐',
|
||||
menu: '操作',
|
||||
addBtn: '新 增',
|
||||
show: '显 示',
|
||||
hide: '隐 藏',
|
||||
open: '展 开',
|
||||
shrink: '收 缩',
|
||||
printBtn: '打 印',
|
||||
excelBtn: '导 出',
|
||||
updateBtn: '修 改',
|
||||
cancelBtn: '取 消',
|
||||
searchBtn: '搜 索',
|
||||
emptyBtn: '清 空',
|
||||
menuBtn: '功 能',
|
||||
saveBtn: '保 存',
|
||||
viewBtn: '查 看',
|
||||
editBtn: '编 辑',
|
||||
copyBtn: '复 制',
|
||||
delBtn: '删 除'
|
||||
data3: {
|
||||
column1: '转化率(日同比 28%)',
|
||||
column2: '签到率(日同比 11%)',
|
||||
column3: '签到率(日同比 11%)'
|
||||
},
|
||||
data4: {
|
||||
column1: '错误日志',
|
||||
column2: '数据展示',
|
||||
column3: '权限管理',
|
||||
column4: '用户管理'
|
||||
},
|
||||
table: {
|
||||
rw: '工作任务',
|
||||
nr: '工作内容',
|
||||
sj: '工作时间'
|
||||
}
|
||||
},
|
||||
route: {
|
||||
info: '个人信息',
|
||||
website: 'bladex官网',
|
||||
dashboard: '首页',
|
||||
tags: '标签',
|
||||
store: '本地存储',
|
||||
api: '全局函数',
|
||||
logs: '日志监控',
|
||||
table: '表格',
|
||||
form: '表单',
|
||||
data: '数据展示',
|
||||
permission: '权限',
|
||||
error: '异常页面',
|
||||
test: '测试页面'
|
||||
},
|
||||
login: {
|
||||
title: '登录 ',
|
||||
info: 'BladeX 企业级开发平台',
|
||||
info: '企业级开发平台',
|
||||
tenantId: '请输入租户ID',
|
||||
username: '请输入账号',
|
||||
password: '请输入密码',
|
||||
@ -89,17 +75,16 @@ export default {
|
||||
phone: '请输入手机号',
|
||||
code: '请输入验证码',
|
||||
submit: '登录',
|
||||
userLogin: '账号密码登录',
|
||||
userLogin: '账号密码',
|
||||
phoneLogin: '手机号登录',
|
||||
thirdLogin: '第三方系统登录',
|
||||
ssoLogin: '单点系统登录',
|
||||
thirdLogin: '第三方登录',
|
||||
faceLogin: '刷脸登录',
|
||||
msgText: '发送验证码',
|
||||
msgSuccess: '秒后重发',
|
||||
},
|
||||
navbar: {
|
||||
logOut: '退出登录',
|
||||
userinfo: '个人信息',
|
||||
switchDept : '部门切换',
|
||||
dashboard: '首页',
|
||||
lock: '锁屏',
|
||||
bug: '没有错误日志',
|
||||
@ -107,15 +92,13 @@ export default {
|
||||
screenfullF: '退出全屏',
|
||||
screenfull: '全屏',
|
||||
language: '中英文',
|
||||
notice: '消息通知',
|
||||
theme: '主题',
|
||||
color: '换色'
|
||||
},
|
||||
tagsView: {
|
||||
search: '搜索',
|
||||
menu: '更多',
|
||||
clearCache: '清除缓存',
|
||||
closeOthers: '关闭其它',
|
||||
closeAll: '关闭所有'
|
||||
}
|
||||
};
|
||||
}
|
||||
|