Browse Source

登录选房间修改

master
ctw 3 months ago
parent
commit
e01248731a
  1. 7
      ruoyi-admin/pom.xml
  2. 2
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/MissionScenarioController.java
  3. 2
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/PlatformLibController.java
  4. 2
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/RoomsController.java
  5. 2
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/RoutesController.java
  6. 2
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/UsersController.java
  7. 8
      ruoyi-admin/src/main/resources/application.yml
  8. 4
      ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
  9. 2
      ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java
  10. 3
      ruoyi-ui/src/permission.js
  11. 36
      ruoyi-ui/src/views/cesiumMap/index.vue
  12. 156
      ruoyi-ui/src/views/login.vue
  13. 989
      ruoyi-ui/src/views/selectRoom/index.vue

7
ruoyi-admin/pom.xml

@ -43,6 +43,13 @@
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- SQLite JDBC驱动,用于读取MBTiles文件 -->
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.42.0.0</version>
</dependency>
<!-- 核心模块-->
<dependency>
<groupId>com.ruoyi</groupId>

2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/MissionScenarioController.java

@ -1,4 +1,4 @@
package com.ruoyi.system.controller;
package com.ruoyi.web.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;

2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/PlatformLibController.java

@ -1,4 +1,4 @@
package com.ruoyi.system.controller;
package com.ruoyi.web.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;

2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/RoomsController.java

@ -1,4 +1,4 @@
package com.ruoyi.system.controller;
package com.ruoyi.web.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;

2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/RoutesController.java

@ -1,4 +1,4 @@
package com.ruoyi.system.controller;
package com.ruoyi.web.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;

2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/UsersController.java

@ -1,4 +1,4 @@
package com.ruoyi.system.controller;
package com.ruoyi.web.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;

8
ruoyi-admin/src/main/resources/application.yml

@ -134,3 +134,11 @@ xss:
excludes: /system/notice
# 匹配链接
urlPatterns: /system/*,/monitor/*,/tool/*
# MBTiles配置
mbtiles:
# MBTiles文件路径
# 支持绝对路径,例如:D:/ruoyi/uploadPath/mbtiles/osm-2020-02-10-v3.11_asia_china.mbtiles
# 或者相对路径(相对于profile目录),例如:mbtiles/osm-2020-02-10-v3.11_asia_china.mbtiles
# 如果不配置,默认使用:{profile}/mbtiles/osm-2020-02-10-v3.11_asia_china.mbtiles
path: D:/ruoyi/uploadPath/mbtiles/osm-2020-02-10-v3.11_asia_china.mbtiles

4
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java

@ -63,9 +63,9 @@ public class SysLoginService
public String login(String username, String password, String code, String uuid)
{
// 验证码校验
validateCaptcha(username, code, uuid);
//validateCaptcha(username, code, uuid);
// 登录前置校验
loginPreCheck(username, password);
//loginPreCheck(username, password);
// 用户验证
Authentication authentication = null;
try

2
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java

@ -34,6 +34,8 @@ public class UserDetailsServiceImpl implements UserDetailsService
@Autowired
private SysPermissionService permissionService;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException
{

3
ruoyi-ui/src/permission.js

@ -9,8 +9,7 @@ import { isRelogin } from '@/utils/request'
NProgress.configure({ showSpinner: false })
const whiteList = ['/login', '/register']
const whiteList = ['/login', '/register', '/selectRoom', '/childRoom']
const isWhiteList = (path) => {
return whiteList.some(pattern => isPathMatch(pattern, path))
}

36
ruoyi-ui/src/views/cesiumMap/index.vue

@ -341,21 +341,45 @@ export default {
this.viewer.imageryLayers.removeAll()
try {
const offlineProvider = new Cesium.UrlTemplateImageryProvider({
url: 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',
// 使MBTiles
// API使
const baseApi = process.env.VUE_APP_BASE_API || '/dev-api'
const mbtilesUrl = baseApi.replace(/\/$/, '') + '/api/mbtiles/tile/{z}/{x}/{y}'
console.log('加载MBTiles地图,服务地址:', mbtilesUrl)
const mbtilesProvider = new Cesium.UrlTemplateImageryProvider({
url: mbtilesUrl,
minimumLevel: 0,
maximumLevel: 18,
tileWidth: 256,
tileHeight: 256,
tilingScheme: new Cesium.WebMercatorTilingScheme(),
credit: '离线地图'
credit: 'MBTiles离线地图'
})
this.viewer.imageryLayers.addImageryProvider(offlineProvider)
this.viewer.imageryLayers.addImageryProvider(mbtilesProvider)
console.log('MBTiles地图加载成功')
} catch (error) {
console.error('加载离线地图失败:', error)
this.showGridLayer()
console.error('加载MBTiles地图失败:', error)
// MBTiles使线
try {
const offlineProvider = new Cesium.UrlTemplateImageryProvider({
url: 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',
minimumLevel: 0,
maximumLevel: 18,
tileWidth: 256,
tileHeight: 256,
tilingScheme: new Cesium.WebMercatorTilingScheme(),
credit: '备用在线地图'
})
this.viewer.imageryLayers.addImageryProvider(offlineProvider)
console.warn('已切换到备用在线地图')
} catch (fallbackError) {
console.error('备用地图也加载失败:', fallbackError)
this.showGridLayer()
}
}
},

156
ruoyi-ui/src/views/login.vue

@ -1,7 +1,8 @@
<template>
<div class="login">
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
<h3 class="title">{{title}}</h3>
<h3 class="title">联合任务筹划系统</h3>
<el-form-item prop="username">
<el-input
v-model="loginForm.username"
@ -12,6 +13,7 @@
<svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
</el-input>
</el-form-item>
<el-form-item prop="password">
<el-input
v-model="loginForm.password"
@ -23,21 +25,9 @@
<svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
</el-input>
</el-form-item>
<el-form-item prop="code" v-if="captchaEnabled">
<el-input
v-model="loginForm.code"
auto-complete="off"
placeholder="验证码"
style="width: 63%"
@keyup.enter.native="handleLogin"
>
<svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
</el-input>
<div class="login-code">
<img :src="codeUrl" @click="getCode" class="login-code-img"/>
</div>
</el-form-item>
<el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">记住密码</el-checkbox>
<el-form-item style="width:100%;">
<el-button
:loading="loading"
@ -49,37 +39,26 @@
<span v-if="!loading"> </span>
<span v-else> 中...</span>
</el-button>
<div style="float: right;" v-if="register">
<router-link class="link-type" :to="'/register'">立即注册</router-link>
</div>
</el-form-item>
</el-form>
<!-- 底部 -->
<div class="el-login-footer">
<span>{{ footerContent }}</span>
</div>
</div>
</template>
<script>
import { getCodeImg } from "@/api/login"
import Cookies from "js-cookie"
import { encrypt, decrypt } from '@/utils/jsencrypt'
import defaultSettings from '@/settings'
// getCodeImg
import Cookies from "js-cookie";
import { encrypt, decrypt } from "@/utils/jsencrypt";
export default {
name: "Login",
data() {
return {
title: process.env.VUE_APP_TITLE,
footerContent: defaultSettings.footerContent,
codeUrl: "",
loginForm: {
//
username: "admin",
password: "admin123",
rememberMe: false,
code: "",
uuid: ""
rememberMe: false
},
loginRules: {
username: [
@ -87,92 +66,82 @@ export default {
],
password: [
{ required: true, trigger: "blur", message: "请输入您的密码" }
],
code: [{ required: true, trigger: "change", message: "请输入验证码" }]
]
//
},
loading: false,
//
captchaEnabled: true,
//
register: false,
redirect: undefined
}
};
},
watch: {
$route: {
handler: function(route) {
this.redirect = route.query && route.query.redirect
this.redirect = route.query && route.query.redirect;
},
immediate: true
}
},
created() {
this.getCode()
this.getCookie()
// this.getCode()
this.getCookie();
},
methods: {
getCode() {
getCodeImg().then(res => {
this.captchaEnabled = res.captchaEnabled === undefined ? true : res.captchaEnabled
if (this.captchaEnabled) {
this.codeUrl = "data:image/gif;base64," + res.img
this.loginForm.uuid = res.uuid
}
})
},
// getCode()
getCookie() {
const username = Cookies.get("username")
const password = Cookies.get("password")
const rememberMe = Cookies.get('rememberMe')
const username = Cookies.get("username");
const password = Cookies.get("password");
const rememberMe = Cookies.get("rememberMe");
this.loginForm = {
username: username === undefined ? this.loginForm.username : username,
password: password === undefined ? this.loginForm.password : decrypt(password),
rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
}
};
},
handleLogin() {
this.$refs.loginForm.validate(valid => {
if (valid) {
this.loading = true
this.loading = true;
if (this.loginForm.rememberMe) {
Cookies.set("username", this.loginForm.username, { expires: 30 })
Cookies.set("password", encrypt(this.loginForm.password), { expires: 30 })
Cookies.set('rememberMe', this.loginForm.rememberMe, { expires: 30 })
Cookies.set("username", this.loginForm.username, { expires: 30 });
Cookies.set("password", encrypt(this.loginForm.password), { expires: 30 });
Cookies.set("rememberMe", this.loginForm.rememberMe, { expires: 30 });
} else {
Cookies.remove("username")
Cookies.remove("password")
Cookies.remove('rememberMe')
Cookies.remove("username");
Cookies.remove("password");
Cookies.remove("rememberMe");
}
this.$store.dispatch("Login", this.loginForm).then(() => {
// this.$router.push({ path: this.redirect || "/" }).catch(()=>{})
//
this.$router.push({ path: this.redirect || "/selectRoom" }).catch(()=>{})
//
this.$router.push({ path: this.redirect || "/" }).catch(()=>{});
}).catch(() => {
this.loading = false
if (this.captchaEnabled) {
this.getCode()
}
})
this.loading = false;
//
});
}
})
});
}
}
}
};
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
<style rel="stylesheet/scss" lang="scss">
.login {
display: flex;
justify-content: center;
align-items: center;
height: 100%;
background-image: url("../assets/images/login-background.jpg");
background-size: cover;
//
background: #eff2f5;
}
.title {
margin: 0px auto 30px auto;
text-align: center;
color: #707070;
font-size: 20px; //
font-weight: bold;
}
.login-form {
@ -180,7 +149,9 @@ export default {
background: #ffffff;
width: 400px;
padding: 25px 25px 5px 25px;
z-index: 1;
//
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
.el-input {
height: 38px;
input {
@ -193,33 +164,6 @@ export default {
margin-left: 2px;
}
}
.login-tip {
font-size: 13px;
text-align: center;
color: #bfbfbf;
}
.login-code {
width: 33%;
height: 38px;
float: right;
img {
cursor: pointer;
vertical-align: middle;
}
}
.el-login-footer {
height: 40px;
line-height: 40px;
position: fixed;
bottom: 0;
width: 100%;
text-align: center;
color: #fff;
font-family: Arial;
font-size: 12px;
letter-spacing: 1px;
}
.login-code-img {
height: 38px;
}
</style>
// .login-code .el-login-footer
</style>

989
ruoyi-ui/src/views/selectRoom/index.vue

File diff suppressed because it is too large
Loading…
Cancel
Save