| | |
| | | <link rel='stylesheet' href='/iconfont/saber/iconfont.css'> |
| | | <link rel='stylesheet' href='/css/loading.css'> |
| | | <link rel='stylesheet' href='/css/saber.css'> |
| | | <title>Saber企业级开发平台</title> |
| | | <title>无人机后台管理系统</title> |
| | | </head> |
| | | |
| | | <body> |
| | | <div id='app'> |
| | | <div id='loader-wrapper'> |
| | | <div class='loader-box'> |
| | | <span>Saber</span> |
| | | <span>企</span> |
| | | <span>业</span> |
| | | <span>级</span> |
| | | <span>开</span> |
| | | <span>发</span> |
| | | <span>平</span> |
| | | <span>无</span> |
| | | <span>人</span> |
| | | <span>机</span> |
| | | <span>后</span> |
| | | <span>台</span> |
| | | <span>管</span> |
| | | <span>理</span> |
| | | <span>系</span> |
| | | <span>统</span> |
| | | </div> |
| | | <div class='loader-title'>系统加载中</div> |
| | | </div> |
| | |
| | | tenantId, |
| | | username, |
| | | password, |
| | | grant_type: website.captchaMode ? 'captcha' : 'password', |
| | | grant_type: 'password', |
| | | scope: 'all', |
| | | type, |
| | | }, |
| | |
| | | : 'bearer ' + token; |
| | | } |
| | | // 开启报文加密 |
| | | if (cryptoData) { |
| | | if (config.params) { |
| | | const data = crypto.encryptAES(JSON.stringify(config.params), crypto.aesKey); |
| | | config.params = { data }; |
| | | } |
| | | if (config.data) { |
| | | config.text = true; |
| | | config.data = crypto.encryptAES(JSON.stringify(config.data), crypto.aesKey); |
| | | } |
| | | } |
| | | // if (cryptoData) { |
| | | // if (config.params) { |
| | | // const data = crypto.encryptAES(JSON.stringify(config.params), crypto.aesKey); |
| | | // config.params = { data }; |
| | | // } |
| | | // if (config.data) { |
| | | // config.text = true; |
| | | // config.data = crypto.encryptAES(JSON.stringify(config.data), crypto.aesKey); |
| | | // } |
| | | // } |
| | | //headers中配置text请求 |
| | | if (config.text === true) { |
| | | config.headers['Content-Type'] = 'text/plain'; |
| | |
| | | logo: 'S', |
| | | key: 'saber', //配置主键,目前用于存储 |
| | | indexTitle: 'Saber Admin', |
| | | clientId: 'saber3', // 客户端id |
| | | clientSecret: 'saber3_secret', // 客户端密钥 |
| | | clientId: 'drone', // 客户端id |
| | | clientSecret: 'drone_secret', // 客户端密钥 |
| | | tenantMode: true, // 是否开启租户模式 |
| | | tenantId: '000000', // 管理组租户编号 |
| | | captchaMode: true, // 是否开启验证码模式 |
| | |
| | | export default { |
| | | title: 'Saber企业级开发平台', |
| | | title: '无人机后台管理系统', |
| | | logoutTip: '退出系统, 是否继续?', |
| | | submitText: '确定', |
| | | cancelText: '取消', |
| | |
| | | }, |
| | | login: { |
| | | title: '登录 ', |
| | | info: 'BladeX 企业级开发平台', |
| | | info: '无人机后台管理系统', |
| | | tenantId: '请输入租户ID', |
| | | username: '请输入账号', |
| | | password: '请输入密码', |
| | |
| | | {{ time }} |
| | | </div> |
| | | <p class="title">{{ $t('login.info') }}</p> |
| | | <div style="font-size: 15px"> |
| | | <span>----------------------------------------------</span> |
| | | <br /> |
| | | <span>管理租户编号:000000</span> |
| | | <br /> |
| | | <span>超级管理员账号: admin / admin</span> |
| | | <br /> |
| | | <span>人事账号: hr / hr</span> |
| | | <br /> |
| | | <span>经理账号: manager / manager</span> |
| | | <br /> |
| | | <span>老板账号: boss / boss</span> |
| | | <br /> |
| | | <span>----------------------------------------------</span> |
| | | <br /> |
| | | <span>普通租户编号:详见租户管理模块</span> |
| | | <br /> |
| | | <span>租户管理员账号: admin / admin</span> |
| | | <br /> |
| | | <span>----------------------------------------------</span> |
| | | </div> |
| | | <!--<img class="img" src="/img/logo.png" alt="">--> |
| | | </div> |
| | | <div class="login-border"> |
| | | <div class="login-main"> |
| | | <h4 class="login-title"> |
| | | {{ $t('login.title') }}{{ website.title }} |
| | | <top-lang></top-lang> |
| | | {{ $t('login.title') }} |
| | | <!-- <top-lang></top-lang> --> |
| | | </h4> |
| | | <userLogin v-if="activeName === 'user'"></userLogin> |
| | | <codeLogin v-else-if="activeName === 'code'"></codeLogin> |
| | | <thirdLogin v-else-if="activeName === 'third'"></thirdLogin> |
| | | <div class="login-menu"> |
| | | <!-- <codeLogin v-else-if="activeName === 'code'"></codeLogin> --> |
| | | <!-- <thirdLogin v-else-if="activeName === 'third'"></thirdLogin> --> |
| | | <!-- <div class="login-menu"> |
| | | <a href="#" @click.stop="activeName = 'user'">{{ $t('login.userLogin') }}</a> |
| | | <a href="#" @click.stop="activeName = 'code'">{{ $t('login.phoneLogin') }}</a> |
| | | <a href="#" @click.stop="activeName = 'third'">{{ $t('login.thirdLogin') }}</a> |
| | | <a :href="website.oauth2.ssoUrl + website.oauth2.redirectUri">{{ |
| | | $t('login.ssoLogin') |
| | | }}</a> |
| | | </div> |
| | | </div> --> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | :model="loginForm" |
| | | label-width="0" |
| | | > |
| | | <el-form-item v-if="tenantMode" prop="tenantId"> |
| | | <!-- <el-form-item v-if="tenantMode" prop="tenantId"> |
| | | <el-input |
| | | @keyup.enter="handleLogin" |
| | | v-model="loginForm.tenantId" |
| | |
| | | <i class="icon-quanxian" /> |
| | | </template> |
| | | </el-input> |
| | | </el-form-item> |
| | | </el-form-item> --> |
| | | <el-form-item prop="username"> |
| | | <el-input |
| | | @keyup.enter="handleLogin" |
| | |
| | | </template> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item v-if="this.website.captchaMode" prop="code"> |
| | | <!-- <el-form-item v-if="this.website.captchaMode" prop="code"> |
| | | <el-row :span="24"> |
| | | <el-col :span="16"> |
| | | <el-input |
| | |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form-item> |
| | | </el-form-item> --> |
| | | <el-form-item> |
| | | <el-button |
| | | type="primary" |
| | |
| | | :class="this.registerMode ? 'login-submit' : 'btn-submit'" |
| | | >{{ $t('login.submit') }} |
| | | </el-button> |
| | | <el-button |
| | | <!-- <el-button |
| | | v-if="this.registerMode" |
| | | type="danger" |
| | | @click.prevent="handleRegister" |
| | | class="register-submit" |
| | | >{{ $t('login.register') }} |
| | | </el-button> |
| | | </el-button> --> |
| | | </el-form-item> |
| | | <el-dialog title="用户信息选择" append-to-body v-model="userBox" width="350px"> |
| | | <!-- <el-dialog title="用户信息选择" append-to-body v-model="userBox" width="350px"> |
| | | <avue-form :option="userOption" v-model="userForm" @submit="submitLogin" /> |
| | | </el-dialog> |
| | | <el-dialog title="用户信息注册" append-to-body v-model="registerBox" width="350px"> |
| | | <avue-form :option="registerOption" v-model="registerForm" @submit="submitRegister" /> |
| | | </el-dialog> |
| | | </el-dialog> --> |
| | | </el-form> |
| | | </template> |
| | | |
| | |
| | | //角色ID |
| | | roleId: '', |
| | | //用户名 |
| | | username: 'admin', |
| | | username: '', |
| | | //密码 |
| | | password: 'admin', |
| | | password: '', |
| | | //账号类型 |
| | | type: 'account', |
| | | //验证码的值 |
| | |
| | | props: [], |
| | | methods: { |
| | | refreshCode() { |
| | | if (this.website.captchaMode) { |
| | | getCaptcha().then(res => { |
| | | const data = res.data; |
| | | this.loginForm.key = data.key; |
| | | this.loginForm.image = data.image; |
| | | }); |
| | | } |
| | | // if (this.website.captchaMode) { |
| | | // getCaptcha().then(res => { |
| | | // const data = res.data; |
| | | // this.loginForm.key = data.key; |
| | | // this.loginForm.image = data.image; |
| | | // }); |
| | | // } |
| | | }, |
| | | showPassword() { |
| | | this.passwordType === '' ? (this.passwordType = 'password') : (this.passwordType = ''); |
| | |
| | | import { formatPath } from '@/router/avue-router'; |
| | | import { ElMessage } from 'element-plus'; |
| | | import { encrypt } from '@/utils/sm2'; |
| | | import md5 from 'js-md5'; |
| | | |
| | | const user = { |
| | | state: { |
| | |
| | | userInfo.deptId, |
| | | userInfo.roleId, |
| | | userInfo.username, |
| | | encrypt(userInfo.password), |
| | | md5(userInfo.password), |
| | | userInfo.type, |
| | | userInfo.key, |
| | | userInfo.code |