项目登陆路径调整(变成 design/login?project=xxx)
This commit is contained in:
parent
92da104ad0
commit
c345a60997
@ -51,9 +51,9 @@ function getRouteInfo(to) {
|
|||||||
const whitePage = PermissionParam[current_session] ? PermissionParam[current_session].whitePage : '';
|
const whitePage = PermissionParam[current_session] ? PermissionParam[current_session].whitePage : '';
|
||||||
loginPath = whitePage || loginPage;
|
loginPath = whitePage || loginPage;
|
||||||
if (to.query.projectDevice && to.query.ibpDevice) {
|
if (to.query.projectDevice && to.query.ibpDevice) {
|
||||||
loginPath = `${loginPath}?projectDevice=${to.query.projectDevice}&ibpDevice=${to.query.ibpDevice}`;
|
loginPath = `${loginPath}&projectDevice=${to.query.projectDevice}&ibpDevice=${to.query.ibpDevice}`;
|
||||||
} else if (to.query.projectDevice) {
|
} else if (to.query.projectDevice) {
|
||||||
loginPath = `${loginPath}?projectDevice=${to.query.projectDevice}`;
|
loginPath = `${loginPath}&projectDevice=${to.query.projectDevice}`;
|
||||||
}
|
}
|
||||||
if (current_session && current_session.startsWith('jsxt') || current_session && current_session.startsWith('refereeJsxt')) {
|
if (current_session && current_session.startsWith('jsxt') || current_session && current_session.startsWith('refereeJsxt')) {
|
||||||
const raceId = getSessionStorage('raceId'); // 登陆时候保存 竞赛id
|
const raceId = getSessionStorage('raceId'); // 登陆时候保存 竞赛id
|
||||||
|
@ -6,7 +6,8 @@ Vue.use(VueRouter);
|
|||||||
|
|
||||||
/* Layout */
|
/* Layout */
|
||||||
const Layout = () => import('@/layout');
|
const Layout = () => import('@/layout');
|
||||||
const Login = () => import('@/views/login/hydLogin');
|
// const Login = () => import('@/views/login/hydLogin');
|
||||||
|
const Login = () => import('@/views/login/index');
|
||||||
|
|
||||||
const Jlmap3dedit = () => import('@/views/jlmap3d/edit/jlmap3dedit');
|
const Jlmap3dedit = () => import('@/views/jlmap3d/edit/jlmap3dedit');
|
||||||
const Jlmap3d = () => import('@/views/jlmap3d/drive/jl3ddrive');
|
const Jlmap3d = () => import('@/views/jlmap3d/drive/jl3ddrive');
|
||||||
|
@ -15,7 +15,8 @@ import { LoginParams } from '@/utils/login';
|
|||||||
export const loginInfo = {
|
export const loginInfo = {
|
||||||
xty: {
|
xty: {
|
||||||
title: '西安铁路职业技术学院城市轨道交通实训平台',
|
title: '西安铁路职业技术学院城市轨道交通实训平台',
|
||||||
loginPath: '/xty/login',
|
// loginPath: '/xty/login',
|
||||||
|
loginPath:'/login?pro=xty',
|
||||||
loginParam: 'XTY',
|
loginParam: 'XTY',
|
||||||
navigationLogoWidth: '40px',
|
navigationLogoWidth: '40px',
|
||||||
navigationMarginLeft: '60px'
|
navigationMarginLeft: '60px'
|
||||||
@ -36,28 +37,33 @@ export const loginInfo = {
|
|||||||
},
|
},
|
||||||
designxty: {
|
designxty: {
|
||||||
title: '西安铁路职业技术学院城市轨道交通设计平台',
|
title: '西安铁路职业技术学院城市轨道交通设计平台',
|
||||||
loginPath: '/designxty/login',
|
// loginPath: '/designxty/login',
|
||||||
|
loginPath:'/design/login?project=xty',
|
||||||
loginParam: 'XTY',
|
loginParam: 'XTY',
|
||||||
navigationLogoWidth: '40px',
|
navigationLogoWidth: '40px',
|
||||||
navigationMarginLeft: '60px'
|
navigationMarginLeft: '60px'
|
||||||
},
|
},
|
||||||
gzb: {
|
gzb: {
|
||||||
title: '贵州装备制造职业学院城市轨道交通实训平台',
|
title: '贵州装备制造职业学院城市轨道交通实训平台',
|
||||||
loginPath: '/gzb/login',
|
// loginPath: '/gzb/login',
|
||||||
|
loginPath:'/login?project=gzb',
|
||||||
loginParam: 'GZB',
|
loginParam: 'GZB',
|
||||||
navigationLogoWidth: '40px',
|
navigationLogoWidth: '40px',
|
||||||
navigationMarginLeft: '60px'
|
navigationMarginLeft: '60px'
|
||||||
},
|
},
|
||||||
designgzb: {
|
designgzb: {
|
||||||
title: '贵州装备制造职业学院城市轨道交通设计平台',
|
title: '贵州装备制造职业学院城市轨道交通设计平台',
|
||||||
loginPath: '/designgzb/login',
|
// loginPath: '/designgzb/login',
|
||||||
|
loginPath:'/design/login?project=gzb',
|
||||||
loginParam: 'GZB',
|
loginParam: 'GZB',
|
||||||
navigationLogoWidth: '40px',
|
navigationLogoWidth: '40px',
|
||||||
navigationMarginLeft: '60px'
|
navigationMarginLeft: '60px'
|
||||||
},
|
},
|
||||||
hyd: {
|
hyd: {
|
||||||
title: '城市轨道交通综合行车模拟仿真系统V1.0',
|
title: '城市轨道交通综合行车模拟仿真系统V1.0',
|
||||||
loginPath: '/login',
|
loginTitle: '城市轨道交通综合行车模拟仿真系统V1.0',
|
||||||
|
logoWidth: '140px',
|
||||||
|
loginPath: '/login?project=hyd',
|
||||||
bottomColumn: '哈尔滨盈达科技有限公司 联系电话:0451-87001273',
|
bottomColumn: '哈尔滨盈达科技有限公司 联系电话:0451-87001273',
|
||||||
loginParam: 'DEFAULT',
|
loginParam: 'DEFAULT',
|
||||||
navigationLogoWidth: '120px',
|
navigationLogoWidth: '120px',
|
||||||
@ -65,7 +71,9 @@ export const loginInfo = {
|
|||||||
},
|
},
|
||||||
designhyd: {
|
designhyd: {
|
||||||
title: '城市轨道交通设计平台V1.0',
|
title: '城市轨道交通设计平台V1.0',
|
||||||
loginPath: '/design/login',
|
loginTitle: '城市轨道交通设计平台V1.0',
|
||||||
|
logoWidth: '140px',
|
||||||
|
loginPath: '/design/login?project=hyd',
|
||||||
bottomColumn: '哈尔滨盈达科技有限公司 联系电话:0451-87001273',
|
bottomColumn: '哈尔滨盈达科技有限公司 联系电话:0451-87001273',
|
||||||
loginParam: 'DEFAULT',
|
loginParam: 'DEFAULT',
|
||||||
navigationLogoWidth: '120px',
|
navigationLogoWidth: '120px',
|
||||||
@ -77,7 +85,8 @@ export const loginInfo = {
|
|||||||
loginTitle: '调度一部',
|
loginTitle: '调度一部',
|
||||||
homeTitle: '调度一部',
|
homeTitle: '调度一部',
|
||||||
browserTitle: '西安地铁调度一部城市轨道交通实训平台',
|
browserTitle: '西安地铁调度一部城市轨道交通实训平台',
|
||||||
loginPath: '/xadt/login',
|
loginPath:'/login?project=xadt',
|
||||||
|
// loginPath: '/xadt/login',
|
||||||
loginParam: 'DEFAULT',
|
loginParam: 'DEFAULT',
|
||||||
navigationLogoWidth: '40px',
|
navigationLogoWidth: '40px',
|
||||||
navigationMarginLeft: '60px'
|
navigationMarginLeft: '60px'
|
||||||
@ -88,7 +97,8 @@ export const loginInfo = {
|
|||||||
loginTitle: '调度一部',
|
loginTitle: '调度一部',
|
||||||
homeTitle: '调度一部',
|
homeTitle: '调度一部',
|
||||||
browserTitle: '西安地铁调度一部城市轨道交通设计平台',
|
browserTitle: '西安地铁调度一部城市轨道交通设计平台',
|
||||||
loginPath: '/designxadt/login',
|
// loginPath: '/designxadt/login',
|
||||||
|
loginPath:'/design/login?project=xadt',
|
||||||
loginParam: 'DEFAULT',
|
loginParam: 'DEFAULT',
|
||||||
navigationLogoWidth: '40px',
|
navigationLogoWidth: '40px',
|
||||||
navigationMarginLeft: '60px'
|
navigationMarginLeft: '60px'
|
||||||
@ -109,7 +119,8 @@ export const loginInfo = {
|
|||||||
},
|
},
|
||||||
jyd: {
|
jyd: {
|
||||||
title: '城市轨道交通实训平台',
|
title: '城市轨道交通实训平台',
|
||||||
loginPath: '/jyd/login',
|
// loginPath: '/jyd/login',
|
||||||
|
loginPath:'/login?project=jyd',
|
||||||
logoWidth: '300px',
|
logoWidth: '300px',
|
||||||
navigationLogoWidth: '120px',
|
navigationLogoWidth: '120px',
|
||||||
navigationMarginLeft: '140px',
|
navigationMarginLeft: '140px',
|
||||||
@ -125,7 +136,8 @@ export const loginInfo = {
|
|||||||
logoWidth: '300px',
|
logoWidth: '300px',
|
||||||
navigationLogoWidth: '120px',
|
navigationLogoWidth: '120px',
|
||||||
navigationMarginLeft: '140px',
|
navigationMarginLeft: '140px',
|
||||||
loginPath: '/designjyd/login',
|
// loginPath: '/designjyd/login',
|
||||||
|
loginPath:'/design/login?project=jyd',
|
||||||
bottomColumn: '',
|
bottomColumn: '',
|
||||||
bottomIcon: Bottom_Jyd,
|
bottomIcon: Bottom_Jyd,
|
||||||
linkIcon: Link_Jyd,
|
linkIcon: Link_Jyd,
|
||||||
@ -133,19 +145,25 @@ export const loginInfo = {
|
|||||||
},
|
},
|
||||||
tky: {
|
tky: {
|
||||||
title: '城市轨道交通实训平台',
|
title: '城市轨道交通实训平台',
|
||||||
loginPath: '/tky/login',
|
// loginPath: '/tky/login',
|
||||||
loginTitle: 'jyd',
|
loginPath:'/login?project=tky',
|
||||||
|
loginTitle: '空串',
|
||||||
bottomColumn: '',
|
bottomColumn: '',
|
||||||
bottomIcon: FaviconTky,
|
bottomIcon: FaviconTky,
|
||||||
loginParam: 'DEFAULT'
|
loginParam: 'DEFAULT',
|
||||||
|
navigationLogoWidth: '75px',
|
||||||
|
navigationMarginLeft: '90px'
|
||||||
},
|
},
|
||||||
designtky: {
|
designtky: {
|
||||||
title: '城市轨道交通设计平台',
|
title: '城市轨道交通设计平台',
|
||||||
loginPath: '/designtky/login',
|
// loginPath: '/designtky/login',
|
||||||
loginTitle: 'jyd',
|
loginPath:'/design/login?project=tky',
|
||||||
|
loginTitle: '空串',
|
||||||
bottomIcon: FaviconTky,
|
bottomIcon: FaviconTky,
|
||||||
bottomColumn: '',
|
bottomColumn: '',
|
||||||
loginParam: 'DEFAULT'
|
loginParam: 'DEFAULT',
|
||||||
|
navigationLogoWidth: '75px',
|
||||||
|
navigationMarginLeft: '90px'
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -191,25 +209,33 @@ export const GenerateRouteProjectList = ['xty', 'designxty', 'gzb', 'designgzb',
|
|||||||
export const goOtherPlatformMenu = { // 导航栏快速切换平台
|
export const goOtherPlatformMenu = { // 导航栏快速切换平台
|
||||||
login: '/design/login',
|
login: '/design/login',
|
||||||
design: '/login',
|
design: '/login',
|
||||||
xty: '/designxty/login',
|
xty: '/design/login?project=xty',
|
||||||
designxty: '/xty/login',
|
designxty: '/login?project=xty',
|
||||||
gzb: '/designgzb/login',
|
gzb: '/design/login?project=gzb',
|
||||||
designgzb: '/gzb/login',
|
designgzb: '/login?project=gzb',
|
||||||
hyd: '/design/login',
|
hyd: '/design/login?project=hyd',
|
||||||
designhyd: '/login',
|
designhyd: '/login?project=hyd',
|
||||||
xadt: '/designxadt/login',
|
xadt: '/design/login?project=xadt',
|
||||||
designxadt: '/xadt/login',
|
designxadt: '/login?project=xadt',
|
||||||
jyd: '/designjyd/login',
|
jyd: '/design/login?project=jyd',
|
||||||
designjyd: '/jyd/login',
|
designjyd: '/login?project=jyd',
|
||||||
tky: '/designtky/login',
|
tky: '/design/login?project=tky',
|
||||||
designtky: '/tky/login'
|
designtky: '/login?project=tky'
|
||||||
};
|
};
|
||||||
export const PermissionParam = { // 路径权限处理所需参数配置(跳转白名单&路径正则匹配&clientId)
|
export const PermissionParam = { // 路径权限处理所需参数配置(跳转白名单&路径正则匹配&clientId)
|
||||||
hyd: {
|
hyd: {
|
||||||
systemType: '011'
|
// systemType: '011'
|
||||||
|
whitePage: '/login?project=hyd',
|
||||||
|
reg: /^\/hyd/,
|
||||||
|
systemType: '011',
|
||||||
|
clientId: null
|
||||||
},
|
},
|
||||||
designhyd: {
|
designhyd: {
|
||||||
systemType: '011'
|
// systemType: '011'
|
||||||
|
whitePage: '/design/login?project=hyd',
|
||||||
|
reg: /^\/designhyd/,
|
||||||
|
systemType: '011',
|
||||||
|
clientId: LoginParams.Design.clientId
|
||||||
},
|
},
|
||||||
login: {
|
login: {
|
||||||
systemType: '011'
|
systemType: '011'
|
||||||
@ -218,61 +244,61 @@ export const PermissionParam = { // 路径权限处理所需参数配置(跳
|
|||||||
systemType: '011'
|
systemType: '011'
|
||||||
},
|
},
|
||||||
designxty: {
|
designxty: {
|
||||||
whitePage: '/designxty/login',
|
whitePage: '/design/login?project=xty',
|
||||||
reg: /^\/designxty/,
|
reg: /^\/designxty/,
|
||||||
systemType: '013',
|
systemType: '013',
|
||||||
clientId: LoginParams.Design.clientId
|
clientId: LoginParams.Design.clientId
|
||||||
},
|
},
|
||||||
designgzb: {
|
designgzb: {
|
||||||
whitePage: '/designgzb/login',
|
whitePage: '/design/login?project=gzb',
|
||||||
reg: /^\/designgzb/,
|
reg: /^\/designgzb/,
|
||||||
systemType: '014',
|
systemType: '014',
|
||||||
clientId: LoginParams.Design.clientId
|
clientId: LoginParams.Design.clientId
|
||||||
},
|
},
|
||||||
designxadt: {
|
designxadt: {
|
||||||
whitePage: '/designxadt/login',
|
whitePage: '/design/login?project=xadt',
|
||||||
reg: /^\/designxadt/,
|
reg: /^\/designxadt/,
|
||||||
systemType: '012',
|
systemType: '012',
|
||||||
clientId: LoginParams.Design.clientId
|
clientId: LoginParams.Design.clientId
|
||||||
},
|
},
|
||||||
designjyd: {
|
designjyd: {
|
||||||
whitePage: '/designjyd/login',
|
whitePage: '/design/login?project=jyd',
|
||||||
reg: /^\/designjyd/,
|
reg: /^\/designjyd/,
|
||||||
systemType: '017',
|
systemType: '017',
|
||||||
clientId: LoginParams.Design.clientId
|
clientId: LoginParams.Design.clientId
|
||||||
},
|
},
|
||||||
designtky: {
|
designtky: {
|
||||||
whitePage: '/designtky/login',
|
whitePage: '/design/login?project=tky',
|
||||||
reg: /^\/designtky/,
|
reg: /^\/designtky/,
|
||||||
systemType: '018',
|
systemType: '018',
|
||||||
clientId: LoginParams.Design.clientId
|
clientId: LoginParams.Design.clientId
|
||||||
},
|
},
|
||||||
xty: {
|
xty: {
|
||||||
whitePage: '/xty/login',
|
whitePage: '/login?project=xty',
|
||||||
reg: /^\/xty/,
|
reg: /^\/xty/,
|
||||||
systemType: '013',
|
systemType: '013',
|
||||||
clientId: null
|
clientId: null
|
||||||
},
|
},
|
||||||
gzb: {
|
gzb: {
|
||||||
whitePage: '/gzb/login',
|
whitePage: '/login?project=gzb',
|
||||||
reg: /^\/gzb/,
|
reg: /^\/gzb/,
|
||||||
systemType: '014',
|
systemType: '014',
|
||||||
clientId: null
|
clientId: null
|
||||||
},
|
},
|
||||||
xadt: {
|
xadt: {
|
||||||
whitePage: '/xadt/login',
|
whitePage: '/login?project=xadt',
|
||||||
reg: /^\/xadt/,
|
reg: /^\/xadt/,
|
||||||
systemType: '012',
|
systemType: '012',
|
||||||
clientId: null
|
clientId: null
|
||||||
},
|
},
|
||||||
jyd: {
|
jyd: {
|
||||||
whitePage: '/jyd/login',
|
whitePage: '/login?project=jyd',
|
||||||
reg: /^\/jyd/,
|
reg: /^\/jyd/,
|
||||||
systemType: '017',
|
systemType: '017',
|
||||||
clientId: null
|
clientId: null
|
||||||
},
|
},
|
||||||
tky: {
|
tky: {
|
||||||
whitePage: '/tky/login',
|
whitePage: '/login?project=tky',
|
||||||
reg: /^\/tky/,
|
reg: /^\/tky/,
|
||||||
systemType: '018',
|
systemType: '018',
|
||||||
clientId: null
|
clientId: null
|
||||||
|
@ -1,499 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div
|
|
||||||
v-loading="ibpDevice && !loadingCode"
|
|
||||||
class="login-container"
|
|
||||||
:style="{'background-image': 'url('+bgImg+')'}"
|
|
||||||
element-loading-spinner="el-icon-loading"
|
|
||||||
element-loading-text="检测主工作站登录中"
|
|
||||||
element-loading-background="rgba(0, 0, 0, 0)"
|
|
||||||
>
|
|
||||||
<el-button v-if="ibpDevice && loadingCode" type="text" style="font-size: 24px;font-weight: bold;" @click="loginRefresh">主工作站未登录,点击重新检测</el-button>
|
|
||||||
<div v-if="!ibpDevice" class="text-box">
|
|
||||||
<img class="logo" :src="logoImg" style="width: 140px">
|
|
||||||
<span>{{ title }}</span>
|
|
||||||
</div>
|
|
||||||
<div v-if="!ibpDevice" class="language_box">
|
|
||||||
<el-tooltip effect="dark" :content="this.$t('login.clickSwitchLanguage')" placement="bottom-end">
|
|
||||||
<el-button class="language_btn" type="text" @click="handleLanguage">{{ language }}</el-button>
|
|
||||||
</el-tooltip>
|
|
||||||
</div>
|
|
||||||
<div v-if="!ibpDevice" class="content-box">
|
|
||||||
<el-form ref="loginForm" class="login-form" :model="loginForm" :rules="loginRules" label-position="left">
|
|
||||||
<el-form-item prop="username" class="item_form_box">
|
|
||||||
<span class="svg-container svg-container_login">
|
|
||||||
<svg-icon icon-class="user" />
|
|
||||||
</span>
|
|
||||||
<el-input v-model="loginForm.username" name="username" type="text" :placeholder="this.$t('login.accountName')" @keyup.enter.native="goToNext" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item prop="password" class="item_form_box item_form_password">
|
|
||||||
<span class="svg-container">
|
|
||||||
<svg-icon icon-class="password" />
|
|
||||||
</span>
|
|
||||||
<el-input
|
|
||||||
ref="password"
|
|
||||||
v-model="loginForm.password"
|
|
||||||
name="password"
|
|
||||||
:type="pwdType"
|
|
||||||
:placeholder="this.$t('login.password')"
|
|
||||||
@keyup.enter.native="handleLogin"
|
|
||||||
/>
|
|
||||||
<span class="show-pwd" @click="showPwd">
|
|
||||||
<svg-icon v-if="pwdDisplay" icon-class="eye" />
|
|
||||||
<svg-icon v-else icon-class="eye-open" />
|
|
||||||
</span>
|
|
||||||
</el-form-item>
|
|
||||||
<div class="tip-message">{{ tipsMsg }}</div>
|
|
||||||
<div style="display: inline-block;width: 100%;margin-bottom: 10px;">
|
|
||||||
<div style="display:inline-block">
|
|
||||||
<el-checkbox v-model="isAutoLogin">{{ $t('login.autoLogin') }}</el-checkbox>
|
|
||||||
</div>
|
|
||||||
<el-popover
|
|
||||||
placement="right"
|
|
||||||
title=""
|
|
||||||
width="200"
|
|
||||||
trigger="hover"
|
|
||||||
class="popover_box"
|
|
||||||
>
|
|
||||||
<div>
|
|
||||||
<img :src="QCode" alt="" style="width: 100px; height: 100px; display: block; margin:0 auto;">
|
|
||||||
<div style="margin-top: 10px; word-break: break-word;text-align: center;">{{ $t('login.perfectInformation') }}</div>
|
|
||||||
</div>
|
|
||||||
<!--<div slot="reference">{{ $t('login.unableToLogin') }}</div>-->
|
|
||||||
</el-popover>
|
|
||||||
</div>
|
|
||||||
<el-form-item>
|
|
||||||
<el-button type="primary" style="width:100%;" :loading="loading" @click.native.prevent="handleLogin">
|
|
||||||
{{ $t('login.login') }}
|
|
||||||
</el-button>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import QCode from '@/assets/erCode.jpg';
|
|
||||||
import { setSessionStorage, removeSessionStorage, getLoginInfo } from '@/utils/auth';
|
|
||||||
import Cookies from 'js-cookie';
|
|
||||||
import bgIbpImg from '@/assets/bg_ibp.png';
|
|
||||||
import md5 from 'js-md5';
|
|
||||||
import { UrlConfig } from '@/scripts/ConstDic';
|
|
||||||
import { loginInfo, ProjectIcon, LoginParams } from '@/scripts/ProjectConfig';
|
|
||||||
import { removeToken } from '@/utils/auth';
|
|
||||||
import LangStorage from '@/utils/lang';
|
|
||||||
import logoImgHyd from '@/assets/project_icon/logo_hyd.png';
|
|
||||||
import { getSimulationInfoNew } from '@/api/simulation';
|
|
||||||
import { getLoginWmurl, checkLoginStatus, getLoginInfo } from '@/api/login';
|
|
||||||
import { getToken } from '@/utils/auth';
|
|
||||||
export default {
|
|
||||||
name: 'Login',
|
|
||||||
data() {
|
|
||||||
const validateUsername = (rule, value, callback) => {
|
|
||||||
if (value.length < 5) {
|
|
||||||
callback(new Error(this.$t('login.enterTheCorrectUserName')));
|
|
||||||
} else {
|
|
||||||
callback();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const validatePass = (rule, value, callback) => {
|
|
||||||
if (value.length < 5) {
|
|
||||||
callback(new Error(this.$t('login.passwordHint')));
|
|
||||||
} else {
|
|
||||||
callback();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
return {
|
|
||||||
QCode: QCode,
|
|
||||||
isAutoLogin: false,
|
|
||||||
loginForm: {
|
|
||||||
username: '',
|
|
||||||
password: ''
|
|
||||||
},
|
|
||||||
loginRules: {
|
|
||||||
username: [{ required: true, trigger: 'blur', validator: validateUsername }],
|
|
||||||
password: [{ required: true, trigger: 'blur', validator: validatePass }]
|
|
||||||
},
|
|
||||||
loading: false,
|
|
||||||
pwdType: 'password',
|
|
||||||
tipsMsg: '',
|
|
||||||
qrcodeClassName: 'login-qrcode',
|
|
||||||
sessionId: '',
|
|
||||||
loginUrl: '',
|
|
||||||
loadingCode: false,
|
|
||||||
checkLogin: null,
|
|
||||||
checkTimeout: null,
|
|
||||||
scanSuccess: false,
|
|
||||||
pwdDisplay: true,
|
|
||||||
cookiesName: 'UserName',
|
|
||||||
cookiesToken: 'UserToken',
|
|
||||||
modelType: 'class',
|
|
||||||
loginClient: 'LianKeTang',
|
|
||||||
path: '/trainingPlatform',
|
|
||||||
lang: 'zh',
|
|
||||||
language: '中文',
|
|
||||||
logoImg: logoImgHyd,
|
|
||||||
title: ''
|
|
||||||
};
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
project() {
|
|
||||||
return this.$route.path.split('/')[1];
|
|
||||||
},
|
|
||||||
bgImg() {
|
|
||||||
return this.$route.query.ibpDevice ? bgIbpImg : '';
|
|
||||||
},
|
|
||||||
ibpDevice() {
|
|
||||||
return this.$route.query.ibpDevice;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
created() {
|
|
||||||
document.querySelector("link[rel*='icon']").href = ProjectIcon['hyd'];
|
|
||||||
this.computedAttribute();
|
|
||||||
if (Cookies.get(this.cookiesName) && Cookies.get(this.cookiesToken)) {
|
|
||||||
const model = {'username': Cookies.get(this.cookiesName), 'password': Cookies.get(this.cookiesToken)};
|
|
||||||
model.type = this.modelType;
|
|
||||||
this.$store.dispatch('Login', model).then(() => {
|
|
||||||
this.$store.dispatch('SetAccount', model.username);
|
|
||||||
this.handleLoginSucessRoute();
|
|
||||||
}).catch(error => {
|
|
||||||
if (error.code === '30001') {
|
|
||||||
this.tipsMsg = this.$t('login.accountOrPasswordIsIncorrect');
|
|
||||||
} else if (error.code == '10001') {
|
|
||||||
this.tipsMsg = '教研机尚未登录,请稍后重试!';
|
|
||||||
} else {
|
|
||||||
this.tipsMsg = error.message;
|
|
||||||
}
|
|
||||||
this.loading = false;
|
|
||||||
setTimeout(() => { this.tipsMsg = ''; }, 5000);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
if (this.project.startsWith('design')) {
|
|
||||||
this.title = loginInfo['designhyd'].title;
|
|
||||||
} else {
|
|
||||||
this.title = loginInfo['hyd'].title;
|
|
||||||
}
|
|
||||||
if (this.ibpDevice) {
|
|
||||||
this.loginRefresh();
|
|
||||||
}
|
|
||||||
document.title = this.title;
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
computedAttribute() {
|
|
||||||
let sessionVal = 'hyd';
|
|
||||||
if (this.project.startsWith('design')) {
|
|
||||||
this.cookiesName = 'UserDesignName';
|
|
||||||
this.cookiesToken = 'UserDesignToken';
|
|
||||||
this.modelType = 'design';
|
|
||||||
this.loginClient = 'Design';
|
|
||||||
this.path = UrlConfig.design.prefix;
|
|
||||||
sessionVal = 'designhyd';
|
|
||||||
}
|
|
||||||
const nowLang = LangStorage.getLang('zh');
|
|
||||||
if (nowLang === 'zh') {
|
|
||||||
this.lang = 'en';
|
|
||||||
this.language = 'English';
|
|
||||||
}
|
|
||||||
|
|
||||||
removeToken();
|
|
||||||
|
|
||||||
setSessionStorage('project', sessionVal);
|
|
||||||
},
|
|
||||||
clearTimer(timer) {
|
|
||||||
if (timer) {
|
|
||||||
clearTimeout(timer);
|
|
||||||
timer = null;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
loginRefresh() {
|
|
||||||
this.loadingCode = true;
|
|
||||||
const params = LoginParams[this.loginClient];
|
|
||||||
params.project = loginInfo[this.project].loginParam;
|
|
||||||
if (this.$route.query.projectDevice) {
|
|
||||||
params.deviceCode = this.$route.query.projectDevice;
|
|
||||||
}
|
|
||||||
getLoginWmurl(params).then(response => {
|
|
||||||
this.sessionId = response.data.sessionId;
|
|
||||||
this.loginUrl = response.data.url;
|
|
||||||
this.loadingCode = false;
|
|
||||||
this.checkLoginStatus();
|
|
||||||
}).catch(() => {
|
|
||||||
this.loadingCode = false;
|
|
||||||
this.$messageBox(this.$t('login.getLoginQrCode'));
|
|
||||||
});
|
|
||||||
},
|
|
||||||
checkLoginStatus() {
|
|
||||||
const self = this;
|
|
||||||
// 销毁则不再定时
|
|
||||||
if (this && this._isDestroyed) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// 清空已存在的定时器
|
|
||||||
// 设置定时器检测
|
|
||||||
this.clearTimer(this.checkLogin);
|
|
||||||
this.checkLogin = setTimeout(() => {
|
|
||||||
checkLoginStatus(self.sessionId).then(response => {
|
|
||||||
// 设置扫码登录
|
|
||||||
self.$store.dispatch('QrLoginSetting', { key: 'SET_TOKEN', value: response.data.token, type: this.modelType }).then(() => {
|
|
||||||
// 清除定时器,设置路由
|
|
||||||
self.clearTimer(self.checkLogin);
|
|
||||||
this.handleLoginSucessRoute();
|
|
||||||
});
|
|
||||||
}).catch(error => {
|
|
||||||
if (error.data && error.data.status === 'EXPIRE') {
|
|
||||||
this.loadingCode = true;
|
|
||||||
this.loginUrl = '';
|
|
||||||
} else {
|
|
||||||
self.checkLoginStatus();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}, 3000);
|
|
||||||
},
|
|
||||||
showPwd() {
|
|
||||||
if (this.pwdType === 'password') {
|
|
||||||
this.pwdDisplay = false;
|
|
||||||
this.pwdType = '';
|
|
||||||
} else {
|
|
||||||
this.pwdType = 'password';
|
|
||||||
this.pwdDisplay = true;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
goToNext() {
|
|
||||||
if (this.loginForm.username.length < 5) {
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
this.$refs['password'].focus();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
handleLogin() {
|
|
||||||
this.$refs.loginForm.validate(valid => {
|
|
||||||
if (valid) {
|
|
||||||
const model = Object.assign({}, this.loginForm);
|
|
||||||
model.password = md5(model.password);
|
|
||||||
model.project = loginInfo[this.project].loginParam;
|
|
||||||
model.deviceCode = this.$route.query.projectDevice;
|
|
||||||
model.type = this.modelType;
|
|
||||||
this.loading = true;
|
|
||||||
if (this.isAutoLogin) {
|
|
||||||
Cookies.set(this.cookiesName, model.username, { expires: 2});
|
|
||||||
Cookies.set(this.cookiesToken, model.password, { expires: 2});
|
|
||||||
}
|
|
||||||
this.$store.dispatch('Login', model).then(() => {
|
|
||||||
this.$store.dispatch('SetAccount', model.username);
|
|
||||||
this.handleLoginSucessRoute();
|
|
||||||
}).catch(error => {
|
|
||||||
if (error.code === '30001') {
|
|
||||||
this.tipsMsg = this.$t('login.accountOrPasswordIsIncorrect');
|
|
||||||
} else if (error.code == '10001') {
|
|
||||||
this.tipsMsg = '教研机尚未登录,请稍后重试!';
|
|
||||||
} else {
|
|
||||||
this.tipsMsg = error.message;
|
|
||||||
}
|
|
||||||
this.loading = false;
|
|
||||||
setTimeout(() => { this.tipsMsg = ''; }, 5000);
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
console.log('error submit!!');
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
handleLoginSucessRoute() {
|
|
||||||
// 设置路由
|
|
||||||
this.loading = false;
|
|
||||||
this.tipsMsg = '';
|
|
||||||
removeSessionStorage('againEnter');
|
|
||||||
if (this.$route.query.projectDevice) {
|
|
||||||
getLoginInfo(getToken()).then(res => {
|
|
||||||
getSimulationInfoNew(res.data.group).then(resp => {
|
|
||||||
const query = { group: res.data.group, drawWay: true, mapId: resp.data.map.id, lineCode:resp.data.map.lineCode, projectDevice: this.$route.query.projectDevice };
|
|
||||||
if (this.$route.query.ibpDevice) {
|
|
||||||
query.ibpDevice = true;
|
|
||||||
}
|
|
||||||
this.$router.push({ path: `/jointTrainingNew`, query: query });
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
this.$router.push({ path: this.path });
|
|
||||||
},
|
|
||||||
handleLanguage() {
|
|
||||||
this.$i18n.locale = this.lang;
|
|
||||||
LangStorage.setLang(this.lang);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style rel="stylesheet/scss" lang="scss">
|
|
||||||
$bg:#fff;
|
|
||||||
$light_gray:#eee;
|
|
||||||
|
|
||||||
.login-container {
|
|
||||||
background: #E4EAEA;
|
|
||||||
.el-form-item{
|
|
||||||
background: #fff !important;
|
|
||||||
border: 1px solid rgba(0, 0, 0, 0.1) !important;
|
|
||||||
.el-input {
|
|
||||||
height: 40px;
|
|
||||||
width: 85%;
|
|
||||||
background: #fff;
|
|
||||||
input {
|
|
||||||
background: #fff !important;
|
|
||||||
border: 0px;
|
|
||||||
-webkit-appearance: none;
|
|
||||||
border-radius: 0px;
|
|
||||||
padding: 8px 9px 7px 5px;
|
|
||||||
color: #000;
|
|
||||||
height: 100%;
|
|
||||||
|
|
||||||
&:-webkit-autofill {
|
|
||||||
box-shadow: 0 0 0px 1000px $bg inset !important;
|
|
||||||
-webkit-text-fill-color: #000 !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.item_form_box {
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
border-radius: 5px;
|
|
||||||
color: #454545;
|
|
||||||
}
|
|
||||||
|
|
||||||
.item_form_password{
|
|
||||||
margin-bottom: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tip-message {
|
|
||||||
color: #F56C61;
|
|
||||||
padding: 5px;
|
|
||||||
font-size: 12px;
|
|
||||||
height: 23px;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style rel="stylesheet/scss" lang="scss" scoped>
|
|
||||||
$bg:#f0f0f0;
|
|
||||||
$qrbg:#fff;
|
|
||||||
$dark_gray:#889aa4;
|
|
||||||
$light_gray:#eee;
|
|
||||||
$qrcodeSize: 270px;
|
|
||||||
.popover_box {
|
|
||||||
position: absolute;
|
|
||||||
right: 80px;
|
|
||||||
bottom: 106px;
|
|
||||||
cursor: pointer;
|
|
||||||
color: #225592;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
.login-container {
|
|
||||||
position: fixed;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
background-origin: border-box;
|
|
||||||
background-size: 100% 100%;
|
|
||||||
.content-box{
|
|
||||||
width: 450px;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
background: #fff;
|
|
||||||
padding: 30px 30px 30px;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
.text-box{
|
|
||||||
position: absolute;
|
|
||||||
top: 10%;
|
|
||||||
font-size: 40px;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
.logo{
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
|
||||||
.language_box{
|
|
||||||
position: absolute;
|
|
||||||
top: 20px;
|
|
||||||
right: 40px;
|
|
||||||
.language_btn{
|
|
||||||
/*font-weight: bold;*/
|
|
||||||
cursor: pointer;
|
|
||||||
font-size: 18px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.login-form {
|
|
||||||
width: 440px;
|
|
||||||
padding: 0 50px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.svg-container {
|
|
||||||
padding-left: 14px;
|
|
||||||
color: $dark_gray;
|
|
||||||
vertical-align: middle;
|
|
||||||
width: 30px;
|
|
||||||
display: inline-block;
|
|
||||||
|
|
||||||
&_login {
|
|
||||||
font-size: 16px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.title_box {
|
|
||||||
font-size: 20px;
|
|
||||||
color: #000;
|
|
||||||
margin: 0px auto 30px auto;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.show-pwd {
|
|
||||||
position: absolute;
|
|
||||||
right: 10px;
|
|
||||||
top: 3px;
|
|
||||||
font-size: 16px;
|
|
||||||
color: $dark_gray;
|
|
||||||
cursor: pointer;
|
|
||||||
user-select: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.qrcode-main{
|
|
||||||
width: 300px;
|
|
||||||
background-color: $qrbg;
|
|
||||||
text-align: center;
|
|
||||||
border-right: 1px solid #ececec;
|
|
||||||
.tip-info {
|
|
||||||
text-align: left;
|
|
||||||
display: inline-block;
|
|
||||||
color: green;
|
|
||||||
margin: 0 auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.login-code-box{
|
|
||||||
width: 150px;
|
|
||||||
margin: 0 auto;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.system-type {
|
|
||||||
margin: 5px 0;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sub-title {
|
|
||||||
font-size: 16px;
|
|
||||||
text-align: center;
|
|
||||||
color: #353535;
|
|
||||||
line-height: 30px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
|||||||
element-loading-background="rgba(0, 0, 0, 0)"
|
element-loading-background="rgba(0, 0, 0, 0)"
|
||||||
>
|
>
|
||||||
<el-button v-if="ibpDevice && loadingCode" type="text" style="font-size: 24px;font-weight: bold;" @click="loginRefresh">主工作站未登录,点击重新检测</el-button>
|
<el-button v-if="ibpDevice && loadingCode" type="text" style="font-size: 24px;font-weight: bold;" @click="loginRefresh">主工作站未登录,点击重新检测</el-button>
|
||||||
<div v-if="loginTitle && !ibpDevice" class="left-logo-box">
|
<div v-if="loginTitle && !ibpDevice" :class="$route.query.project=='hyd'?'text-box':'left-logo-box'">
|
||||||
<img class="logo" :src="logoImg" :style="{width: logoWidth}">
|
<img class="logo" :src="logoImg" :style="{width: logoWidth}">
|
||||||
<span>{{ loginTitle==='空串'?'':loginTitle }}</span>
|
<span>{{ loginTitle==='空串'?'':loginTitle }}</span>
|
||||||
</div>
|
</div>
|
||||||
@ -21,8 +21,8 @@
|
|||||||
<el-button class="language_btn" type="text" @click="handleLanguage">{{ language }}</el-button>
|
<el-button class="language_btn" type="text" @click="handleLanguage">{{ language }}</el-button>
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="!ibpDevice" class="content-box">
|
<div v-if="!ibpDevice" class="content-box" :style="$route.query.project=='hyd'?'width: 450px;':''">
|
||||||
<div class="qrcode-main">
|
<div v-if="$route.query.project!='hyd'" class="qrcode-main">
|
||||||
<div class="login-code-box" @click="loginRefresh">
|
<div class="login-code-box" @click="loginRefresh">
|
||||||
<qrcode-vue
|
<qrcode-vue
|
||||||
v-loading="loadingCode"
|
v-loading="loadingCode"
|
||||||
@ -49,7 +49,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<el-form ref="loginForm" class="login-form" :model="loginForm" :rules="loginRules" label-position="left">
|
<el-form ref="loginForm" class="login-form" :model="loginForm" :rules="loginRules" label-position="left">
|
||||||
<div v-if="!isProject" class="title_box">{{ $t('login.welcomeTo') + title }}</div>
|
<div v-if="!isProject&&$route.query.project!='hyd'" class="title_box">{{ $t('login.welcomeTo') + title }}</div>
|
||||||
<el-form-item prop="username" class="item_form_box">
|
<el-form-item prop="username" class="item_form_box">
|
||||||
<span class="svg-container svg-container_login">
|
<span class="svg-container svg-container_login">
|
||||||
<svg-icon icon-class="user" />
|
<svg-icon icon-class="user" />
|
||||||
@ -180,27 +180,37 @@ export default {
|
|||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
project() {
|
project() {
|
||||||
return this.$route.path.split('/')[1];
|
const project = this.$route.query.project;
|
||||||
|
const split = this.$route.path.split('/')[1];
|
||||||
|
if (split == 'design') {
|
||||||
|
return project ? split + project : split;
|
||||||
|
} else if (split == 'login') {
|
||||||
|
return project || 'login';
|
||||||
|
} else {
|
||||||
|
return split;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
loginTitle () {
|
loginTitle () {
|
||||||
return loginInfo[this.$route.path.split('/')[1]].loginTitle;
|
// this.$route.path.split('/')[1]
|
||||||
|
return loginInfo[this.project].loginTitle;
|
||||||
},
|
},
|
||||||
title() {
|
title() {
|
||||||
return loginInfo[this.$route.path.split('/')[1]].title;
|
return loginInfo[this.project].title;
|
||||||
},
|
},
|
||||||
logoWidth() {
|
logoWidth() {
|
||||||
return loginInfo[this.$route.path.split('/')[1]].logoWidth;
|
return loginInfo[this.project].logoWidth;
|
||||||
},
|
},
|
||||||
isProject() {
|
isProject() {
|
||||||
const projectName = this.$route.path.split('/')[1];
|
const projectName = this.project;
|
||||||
return GenerateRouteProjectList.includes(projectName);
|
return GenerateRouteProjectList.includes(projectName);
|
||||||
},
|
},
|
||||||
logoImg() {
|
logoImg() {
|
||||||
const projectName = this.$route.path.split('/')[1];
|
const projectName = this.project;
|
||||||
return ProjectIcon[projectName];
|
return ProjectIcon[projectName];
|
||||||
},
|
},
|
||||||
bgImg() {
|
bgImg() {
|
||||||
return this.$route.query.ibpDevice ? bgIbpImg : bgImg;
|
const bgImgAll = this.$route.query.project == 'hyd' ? '' : bgImg;
|
||||||
|
return this.$route.query.ibpDevice ? bgIbpImg : bgImgAll;
|
||||||
},
|
},
|
||||||
ibpDevice() {
|
ibpDevice() {
|
||||||
return this.$route.query.ibpDevice;
|
return this.$route.query.ibpDevice;
|
||||||
@ -230,7 +240,9 @@ export default {
|
|||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
document.title = loginInfo[this.project].browserTitle || loginInfo[this.project].title;
|
document.title = loginInfo[this.project].browserTitle || loginInfo[this.project].title;
|
||||||
this.loginRefresh();
|
if (this.ibpDevice || this.$route.query.project != 'hyd') {
|
||||||
|
this.loginRefresh();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
computedAttribute() {
|
computedAttribute() {
|
||||||
@ -331,6 +343,7 @@ export default {
|
|||||||
const model = Object.assign({}, this.loginForm);
|
const model = Object.assign({}, this.loginForm);
|
||||||
model.password = md5(model.password);
|
model.password = md5(model.password);
|
||||||
model.type = this.modelType;
|
model.type = this.modelType;
|
||||||
|
model.project = loginInfo[this.project].loginParam;
|
||||||
model.deviceCode = this.$route.query.projectDevice;
|
model.deviceCode = this.$route.query.projectDevice;
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
if (this.isAutoLogin) {
|
if (this.isAutoLogin) {
|
||||||
|
@ -39,10 +39,11 @@ export default {
|
|||||||
{label: '行调工作站', value: 'CW'},
|
{label: '行调工作站', value: 'CW'},
|
||||||
{label: '综合监控', value: 'ISCS'}
|
{label: '综合监控', value: 'ISCS'}
|
||||||
],
|
],
|
||||||
projectList: [{label:'西铁院', value: 'XTY'}, {label: '贵州装备', value:'GZB'}],
|
projectList: [{label:'西铁院', value: 'XTY'}, {label: '贵州装备', value:'GZB'}, {label: '盈达科技', value:'HYD'}],
|
||||||
projectMap: {
|
projectMap: {
|
||||||
designxty: 'XTY',
|
designxty: 'XTY',
|
||||||
designgzb: 'GZB'
|
designgzb: 'GZB',
|
||||||
|
designhyd: 'HYD'
|
||||||
},
|
},
|
||||||
queryForm: {
|
queryForm: {
|
||||||
labelWidth: '120px',
|
labelWidth: '120px',
|
||||||
@ -199,9 +200,9 @@ export default {
|
|||||||
getPath(index, row) {
|
getPath(index, row) {
|
||||||
let url = '';
|
let url = '';
|
||||||
if (row.type === 'IBP') {
|
if (row.type === 'IBP') {
|
||||||
url = `${window.location.protocol}//${window.location.host}/${this.projectCode.toLowerCase()}/login?projectDevice=${row.code}&ibpDevice=true`;
|
url = `${window.location.protocol}//${window.location.host}/login?project=${this.projectCode.toLowerCase()}&projectDevice=${row.code}&ibpDevice=true`;
|
||||||
} else {
|
} else {
|
||||||
url = `${window.location.protocol}//${window.location.host}/${this.projectCode.toLowerCase()}/login?projectDevice=${row.code}`;
|
url = `${window.location.protocol}//${window.location.host}/login?project=${this.projectCode.toLowerCase()}&projectDevice=${row.code}`;
|
||||||
}
|
}
|
||||||
this.url = url;
|
this.url = url;
|
||||||
this.$messageBox();
|
this.$messageBox();
|
||||||
|
Loading…
Reference in New Issue
Block a user