Merge remote-tracking branch 'origin/master'

This commit is contained in:
2025-09-29 18:26:47 +08:00
6 changed files with 52 additions and 47 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 9.9 KiB

View File

@@ -17,7 +17,7 @@
</div> </div>
</el-tooltip> </el-tooltip>
</template> </template>
<div class="avatar-container"> <!-- <div class="avatar-container">
<el-dropdown @command="handleCommand" class="right-menu-item hover-effect" trigger="click"> <el-dropdown @command="handleCommand" class="right-menu-item hover-effect" trigger="click">
<div class="avatar-wrapper"> <div class="avatar-wrapper">
<img :src="userStore.avatar" class="user-avatar" /> <img :src="userStore.avatar" class="user-avatar" />
@@ -37,7 +37,7 @@
</el-dropdown-menu> </el-dropdown-menu>
</template> </template>
</el-dropdown> </el-dropdown>
</div> </div> -->
</div> </div>
</div> </div>
</template> </template>
@@ -48,10 +48,7 @@ import Breadcrumb from '@/components/Breadcrumb'
import TopNav from '@/components/TopNav' import TopNav from '@/components/TopNav'
import Hamburger from '@/components/Hamburger' import Hamburger from '@/components/Hamburger'
import Screenfull from '@/components/Screenfull' import Screenfull from '@/components/Screenfull'
import SizeSelect from '@/components/SizeSelect'
import HeaderSearch from '@/components/HeaderSearch' import HeaderSearch from '@/components/HeaderSearch'
import RuoYiGit from '@/components/RuoYi/Git'
import RuoYiDoc from '@/components/RuoYi/Doc'
import useAppStore from '@/store/modules/app' import useAppStore from '@/store/modules/app'
import useUserStore from '@/store/modules/user' import useUserStore from '@/store/modules/user'
import useSettingsStore from '@/store/modules/settings' import useSettingsStore from '@/store/modules/settings'

View File

@@ -1,5 +1,5 @@
import axios from 'axios' import axios from 'axios'
import { ElNotification , ElMessageBox, ElMessage, ElLoading } from 'element-plus' import { ElNotification, ElMessageBox, ElMessage, ElLoading } from 'element-plus'
import { getToken } from '@/utils/auth' import { getToken } from '@/utils/auth'
import errorCode from '@/utils/errorCode' import errorCode from '@/utils/errorCode'
import { tansParams, blobValidate } from '@/utils/ruoyi' import { tansParams, blobValidate } from '@/utils/ruoyi'
@@ -67,46 +67,53 @@ service.interceptors.request.use(config => {
} }
return config return config
}, error => { }, error => {
console.log(error) console.log(error)
Promise.reject(error) Promise.reject(error)
}) })
// 响应拦截器 // 响应拦截器
service.interceptors.response.use(res => { service.interceptors.response.use(res => {
// 未设置状态码则默认成功状态 // 未设置状态码则默认成功状态
const code = res.data.code || 200; const code = res.data.code || 200;
// 获取错误信息 // 获取错误信息
const msg = errorCode[code] || res.data.msg || errorCode['default'] const msg = errorCode[code] || res.data.msg || errorCode['default']
// 二进制数据则直接返回 // 二进制数据则直接返回
if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') { if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
return res.data return res.data
}
if (code === 401) {
if (!isRelogin.show) {
// isRelogin.show = true;
// ElMessageBox.confirm(
// '登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示',
// { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }
// ).then(() => {
// isRelogin.show = false;
// useUserStore().logOut().then(() => {
// location.href = '/index';
// })
// }).catch(() => {
// isRelogin.show = false;
// });
// 直接重新登录
useUserStore().login({ username: 'admin', password: 'admin123' }).then(() => {
location.href = '/index';
})
} }
if (code === 401) { return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
if (!isRelogin.show) { } else if (code === 500) {
isRelogin.show = true; ElMessage({ message: msg, type: 'error' })
ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => { return Promise.reject(new Error(msg))
isRelogin.show = false; } else if (code === 601) {
useUserStore().logOut().then(() => { ElMessage({ message: msg, type: 'warning' })
location.href = '/index'; return Promise.reject(new Error(msg))
}) } else if (code !== 200) {
}).catch(() => { ElNotification.error({ title: msg })
isRelogin.show = false; return Promise.reject('error')
}); } else {
} return Promise.resolve(res.data)
return Promise.reject('无效的会话,或者会话已过期,请重新登录。') }
} else if (code === 500) { },
ElMessage({ message: msg, type: 'error' })
return Promise.reject(new Error(msg))
} else if (code === 601) {
ElMessage({ message: msg, type: 'warning' })
return Promise.reject(new Error(msg))
} else if (code !== 200) {
ElNotification.error({ title: msg })
return Promise.reject('error')
} else {
return Promise.resolve(res.data)
}
},
error => { error => {
console.log('err' + error) console.log('err' + error)
let { message } = error; let { message } = error;

View File

@@ -18,10 +18,10 @@
<input type="password" v-model="loginForm.password" placeholder="密码" class="form-input" /> <input type="password" v-model="loginForm.password" placeholder="密码" class="form-input" />
<p class="error-tip" v-if="loginForm.password === ''">密码不能为空</p> <p class="error-tip" v-if="loginForm.password === ''">密码不能为空</p>
</div> </div>
<div class="form-group captcha-group"> <!-- <div class="form-group captcha-group">
<input type="text" v-model="loginForm.code" placeholder="验证码" class="form-input captcha-input" /> <input type="text" v-model="loginForm.code" placeholder="验证码" class="form-input captcha-input" />
<img :src="codeUrl" @click="getCode" alt="验证码" class="captcha-img" /> <img :src="codeUrl" @click="getCode" alt="验证码" class="captcha-img" />
</div> </div> -->
<div class="remember-group"> <div class="remember-group">
<input type="checkbox" id="remember" v-model="loginForm.rememberMe" class="remember-checkbox" /> <input type="checkbox" id="remember" v-model="loginForm.rememberMe" class="remember-checkbox" />
<label for="remember" class="remember-label">记住密码</label> <label for="remember" class="remember-label">记住密码</label>
@@ -49,14 +49,14 @@ const loginForm = ref({
username: "admin", username: "admin",
password: "admin123", password: "admin123",
rememberMe: false, rememberMe: false,
code: "", // code: "",
uuid: "" // uuid: ""
}); });
const loginRules = { const loginRules = {
username: [{ required: true, trigger: "blur", message: "请输入您的账号" }], username: [{ required: true, trigger: "blur", message: "请输入您的账号" }],
password: [{ required: true, trigger: "blur", message: "请输入您的密码" }], password: [{ required: true, trigger: "blur", message: "请输入您的密码" }],
code: [{ required: true, trigger: "change", message: "请输入验证码" }] // code: [{ required: true, trigger: "change", message: "请输入验证码" }]
}; };
const codeUrl = ref(""); const codeUrl = ref("");
@@ -130,6 +130,7 @@ function getCookie() {
getCode(); getCode();
getCookie(); getCookie();
handleLogin();
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>

View File

@@ -64,7 +64,7 @@ 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);
// 用户验证 // 用户验证