减少冗余代码

This commit is contained in:
2026-05-14 15:41:00 +08:00
parent ae4cf4540b
commit fa0c718c8b
15 changed files with 802 additions and 439 deletions

View File

@@ -17,7 +17,7 @@
</div>
<div class="brand-text">
<h1 class="title">方舟工单</h1>
<span class="sub-text">ARK TICKET SYSTEM v3.0</span>
<span class="sub-text">ARK TICKET SYSTEM v4.0</span>
</div>
</div>
@@ -29,7 +29,7 @@
<el-form :model="loginForm" :rules="loginRules" ref="loginFormRef" class="ark-form">
<el-form-item prop="username">
<div class="input-prefix">ID</div>
<el-input v-model="loginForm.username" placeholder="工员编号" class="ark-input" />
<el-input v-model="loginForm.username" placeholder="员工编号" class="ark-input" />
</el-form-item>
<el-form-item prop="password">
@@ -64,17 +64,17 @@ import { ref, reactive } from "vue";
import { DataBoard } from "@element-plus/icons-vue";
import { ElMessage } from "element-plus";
import { userApi } from "@/api/ticket";
import { useRouter } from "vue-router";
import { useRoute, useRouter } from "vue-router";
const router = useRouter();
const route = useRoute();
const loginForm = reactive({ username: "", password: "" });
const rememberMe = ref(false);
const loading = ref(false);
const loginFormRef = ref(null);
const loginRules = reactive({
username: [{ required: true, message: "请输入工员编号", trigger: "blur" }],
username: [{ required: true, message: "请输入员工编号", trigger: "blur" }],
password: [{ required: true, message: "请输入密钥", trigger: "blur" }],
});
@@ -85,52 +85,32 @@ const handleLogin = async () => {
loading.value = true;
const res = await userApi.login(loginForm.username, loginForm.password);
// console.log(res)
// 注意:这里由于你之前的封装,可能需要判断 res.data.code 还是 res.code
// 如果用了拦截器,直接判断 res.code
if (res.code === 200) {
const token = res.data.token;
const userInfo = JSON.stringify(res.data.user_info);
const role = res.data.user_info.role;
// ThinkPHP 会自动通过 Set-Cookie 下发 session,浏览器自动接管,无需手动存 token
const userInfo = res.data;
const userInfoStr = JSON.stringify(userInfo);
// console.log(role)
// 用户信息存前端,仅用于显示用户名和角色路由判断
const storage = rememberMe.value ? localStorage : sessionStorage;
storage.setItem("user_info", userInfoStr);
// --- 核心逻辑开始 ---
if (rememberMe.value) {
// 勾选了:存入 localStorage,实现持久化
localStorage.setItem("token", token);
localStorage.setItem("user_info", userInfo);
} else {
// 没勾选:存入 sessionStorage,关闭标签页即失效
sessionStorage.setItem("token", token);
sessionStorage.setItem("user_info", userInfo);
}
// --- 核心逻辑结束 ---
ElMessage({
message: "身份验证通过,方舟系统加载中...",
type: "success",
duration: 300,
});
ElMessage.success("身份验证通过,方舟系统加载中...");
// 3. 根据角色执行路由跳转
setTimeout(() => {
switch (role) {
case "admin":
router.push("/"); // 管理员跳转至主页
break;
case "user":
router.push("/user"); // 跳转至 UserView (请确保路由配置中有此路径)
break;
case "client":
router.push("/client"); // 跳转至 ClientView (请确保路由配置中有此路径)
break;
default:
ElMessage.warning("未识别的角色权限,请联系管理员");
break;
}
}, 1000);
// 触发路由守卫,自动处理跳转
await router.push(route.query.redirect || "/");
} else {
ElMessage.error(res.message || "登录失败");
ElMessage.error(res.message || "登录失败,请检查账号和密码");
}
} catch (error) {
console.error("Login Error:", error);
if (error.name !== "ValidationError") {
ElMessage.error("登录请求异常,请稍后重试");
// console.error("登录错误:", error);
}
} finally {
loading.value = false;
}