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. 34
      ruoyi-ui/src/views/cesiumMap/index.vue
  12. 154
      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> <artifactId>mysql-connector-java</artifactId>
</dependency> </dependency>
<!-- SQLite JDBC驱动,用于读取MBTiles文件 -->
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.42.0.0</version>
</dependency>
<!-- 核心模块--> <!-- 核心模块-->
<dependency> <dependency>
<groupId>com.ruoyi</groupId> <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 java.util.List;
import javax.servlet.http.HttpServletResponse; 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 java.util.List;
import javax.servlet.http.HttpServletResponse; 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 java.util.List;
import javax.servlet.http.HttpServletResponse; 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 java.util.List;
import javax.servlet.http.HttpServletResponse; 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 java.util.List;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;

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

@ -134,3 +134,11 @@ xss:
excludes: /system/notice excludes: /system/notice
# 匹配链接 # 匹配链接
urlPatterns: /system/*,/monitor/*,/tool/* 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) 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; Authentication authentication = null;
try try

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

@ -34,6 +34,8 @@ public class UserDetailsServiceImpl implements UserDetailsService
@Autowired @Autowired
private SysPermissionService permissionService; private SysPermissionService permissionService;
@Override @Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException 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 }) NProgress.configure({ showSpinner: false })
const whiteList = ['/login', '/register'] const whiteList = ['/login', '/register', '/selectRoom', '/childRoom']
const isWhiteList = (path) => { const isWhiteList = (path) => {
return whiteList.some(pattern => isPathMatch(pattern, path)) return whiteList.some(pattern => isPathMatch(pattern, path))
} }

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

@ -341,22 +341,46 @@ export default {
this.viewer.imageryLayers.removeAll() this.viewer.imageryLayers.removeAll()
try { try {
const offlineProvider = new Cesium.UrlTemplateImageryProvider({ // 使MBTiles
url: 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', // 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, minimumLevel: 0,
maximumLevel: 18, maximumLevel: 18,
tileWidth: 256, tileWidth: 256,
tileHeight: 256, tileHeight: 256,
tilingScheme: new Cesium.WebMercatorTilingScheme(), tilingScheme: new Cesium.WebMercatorTilingScheme(),
credit: '离线地图' credit: 'MBTiles离线地图'
}) })
this.viewer.imageryLayers.addImageryProvider(offlineProvider) this.viewer.imageryLayers.addImageryProvider(mbtilesProvider)
console.log('MBTiles地图加载成功')
} catch (error) { } catch (error) {
console.error('加载离线地图失败:', error) 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() this.showGridLayer()
} }
}
}, },
showGridLayer() { showGridLayer() {

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

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

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

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