明树Git Lab

Commit 778dd172 authored by yangyajing's avatar yangyajing

资源库对接

parent 7e4f239c
Pipeline #104379 passed with stage
in 13 seconds
import axios from "axios"; import axios from "axios";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import windowConfig from "@/window"; import windowConfig from "@/window";
import { useUserStore } from "@/stores/user.js";
axios.interceptors.request.use(function (config) { axios.interceptors.request.use(function (config) {
let token = "8681f75e775447f7903708c55a35634e"; const userStore = useUserStore();
let token = userStore.authToken || localStorage.getItem("authToken") || "";
if (token) { if (token) {
config.headers.Authorization = token; config.headers.Authorization = token;
} }
......
...@@ -73,8 +73,11 @@ ...@@ -73,8 +73,11 @@
</template> </template>
<script setup> <script setup>
import { computed, h, resolveComponent } from "vue"; import { computed, onMounted, getCurrentInstance } from "vue";
import { useRouter, useRoute } from "vue-router"; import { useRouter, useRoute } from "vue-router";
import { useUserStore } from "@/stores/user.js";
const userStore = useUserStore();
const { proxy } = getCurrentInstance();
const router = useRouter(); const router = useRouter();
...@@ -87,14 +90,30 @@ const menuRoutes = computed(() => { ...@@ -87,14 +90,30 @@ const menuRoutes = computed(() => {
(route) => !route.meta || route.meta.showInMenu !== false (route) => !route.meta || route.meta.showInMenu !== false
); );
}); });
// 获取资源库数据
const getResourceData = () => {
proxy.$post({
url: "/api/resource/listResourceAll",
data: {},
callback: (data) => {
sessionStorage.setItem("resourceData", JSON.stringify(data));
}
});
};
onMounted(() => {
getResourceData();
});
// 处理退出登录 // 处理退出登录
const handleLogout = () => { const handleLogout = () => {
// 清除登录状态 // 清除登录状态
localStorage.removeItem("token"); proxy.$post({
url: "/api/user/logout",
// 跳转到登录页 data: {},
router.push("/login"); callback: (data) => {
userStore.clearUseInfo();
router.replace("/login");
}
})
}; };
</script> </script>
......
import { createRouter, createWebHashHistory } from 'vue-router' import { createRouter, createWebHashHistory } from 'vue-router'
import MainLayout from '@/layouts/MainLayout.vue' import MainLayout from '@/layouts/MainLayout.vue'
import { useUserStore } from "@/stores/user.js";
const routes = [ const routes = [
{ {
path: '/login', path: '/login',
name: 'login', name: 'login',
component: () => import('@/views/login/index.vue'), component: () => import('@/views/login/index.vue'),
meta: { requiresAuth: false } meta: { nopermission: true }
}, },
{ {
path: '/', path: '/',
name: '首页', name: '首页',
redirect: '/homePage', redirect: '/homePage',
component: MainLayout, component: MainLayout,
meta: { requiresAuth: true },
children: [ children: [
{ {
path: '/homePage', path: '/homePage',
...@@ -136,14 +136,20 @@ const router = createRouter({ ...@@ -136,14 +136,20 @@ const router = createRouter({
// 路由守卫 - 登录验证 // 路由守卫 - 登录验证
router.beforeEach((to, from, next) => { router.beforeEach((to, from, next) => {
const isAuthenticated = localStorage.getItem('token') // 检查登录状态 const userStore = useUserStore();
let token = userStore.authToken || localStorage.getItem("authToken") || "";
if (to.meta.requiresAuth && !isAuthenticated) { if (!token) {
if (to.path === '/login' || to.meta.nopermission) {
next();
} else {
next('/login') next('/login')
} else if (to.path === '/login' && isAuthenticated) { }
next('/')
} else { } else {
next() if (to.path === "/login") {
next("/");
} else {
next();
}
} }
}) })
......
import { defineStore } from "pinia";
export const useProjectStore = defineStore('project', {
state: () => ({
params: {}
}),
actions: {
setParams(data) {
this.params = { ...this.params, ...data }
}
}
})
\ No newline at end of file
import { defineStore } from "pinia";
export const useUserStore = defineStore('user', {
state: () => ({
userInfo: null,
authToken: ""
}),
actions: {
setUseInfo(data) {
this.userInfo = data;
this.authToken = data.token;
localStorage.setItem("authToken", data.token);
},
clearUserInfo () {
this.userInfo = null;
this.authToken = "";
localStorage.removeItem("authToken");
}
}
})
\ No newline at end of file
...@@ -1149,8 +1149,6 @@ const selectContentBtn = (item) => { ...@@ -1149,8 +1149,6 @@ const selectContentBtn = (item) => {
} }
debounceTimer = setTimeout(() => { debounceTimer = setTimeout(() => {
selectedContentBtn.value = item.key; selectedContentBtn.value = item.key;
// selectedContentName.value = item.name;
// sessionStorage.setItem("selectedContentBtn", selectedContentName.key);
if (item.key === "jianshe") { if (item.key === "jianshe") {
nextTick(()=> { nextTick(()=> {
initProgressPie(); initProgressPie();
...@@ -1257,9 +1255,7 @@ const toggleFullscreen = () => { ...@@ -1257,9 +1255,7 @@ const toggleFullscreen = () => {
isFullscreen.value = !isFullscreen.value; isFullscreen.value = !isFullscreen.value;
}; };
// 页面初始化时设置sessionStorage
onMounted(() => { onMounted(() => {
sessionStorage.setItem("selectedContentBtn", selectedContentName.key);
window.addEventListener("resize", resizeEcharts); window.addEventListener("resize", resizeEcharts);
}); });
onUnmounted(() => { onUnmounted(() => {
......
...@@ -12,10 +12,10 @@ ...@@ -12,10 +12,10 @@
labelPosition="top" labelPosition="top"
@keydown.enter="handleLogin" @keydown.enter="handleLogin"
> >
<el-form-item label="用户名" prop="username"> <el-form-item label="用户名" prop="mobile">
<el-input <el-input
:prefix-icon="User" :prefix-icon="User"
v-model="loginForm.username" v-model="loginForm.mobile"
placeholder="请输入用户名" placeholder="请输入用户名"
prefix-icon="el-icon-user" prefix-icon="el-icon-user"
></el-input> ></el-input>
...@@ -45,51 +45,62 @@ ...@@ -45,51 +45,62 @@
</template> </template>
<script setup> <script setup>
import { ref } from "vue"; import { ref, getCurrentInstance } from "vue";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { User, Lock } from "@element-plus/icons-vue"; import { User, Lock } from "@element-plus/icons-vue";
import { useUserStore } from "@/stores/user.js";
const userStore = useUserStore();
const { proxy } = getCurrentInstance();
const router = useRouter(); const router = useRouter();
const loginFormRef = ref(); const loginFormRef = ref();
const loading = ref(false); const loading = ref(false);
const captchaSrc = ref("https://picsum.photos/120/40"); // 模拟验证码图片
// 登录表单数据 // 登录表单数据
const loginForm = ref({ const loginForm = ref({
username: "admin", mobile: "",
password: "", password: ""
captcha: "",
}); });
// 表单验证规则 // 表单验证规则
const loginRules = ref({ const loginRules = ref({
username: [ mobile: [
{ required: true, message: "请输入用户名", trigger: "blur" }, { required: true, message: "请输入用户名", trigger: "blur" }
{ min: 3, max: 20, message: "长度在 3 到 20 个字符", trigger: "blur" },
], ],
password: [ password: [
{ required: true, message: "请输入密码", trigger: "blur" }, { required: true, message: "请输入密码", trigger: "blur" }
{ min: 6, max: 20, message: "长度在 6 到 20 个字符", trigger: "blur" },
], ],
}); });
// 处理登录 // 处理登录
const handleLogin = async () => { const handleLogin = async () => {
try { loginFormRef.value?.validate(valid => {
await loginFormRef.value?.validate(); if (valid) {
loading.value = true; proxy.$post({
setTimeout(() => { url: "/api/user/login",
// 登录成功后设置token data: loginForm.value,
const mockToken = "mock-jwt-token"; callback: (data) => {
localStorage.setItem("token", mockToken); userStore.setUseInfo(data);
loading.value = false; router.replace("/");
// 跳转到首页 }
router.push("/"); })
}, 1000); }
} catch (error) { })
console.error("登录失败:", error); // try {
loading.value = false; // await loginFormRef.value?.validate();
} // loading.value = true;
// setTimeout(() => {
// // 登录成功后设置token
// const mockToken = "mock-jwt-token";
// localStorage.setItem("token", mockToken);
// loading.value = false;
// // 跳转到首页
// router.push("/");
// }, 1000);
// } catch (error) {
// console.error("登录失败:", error);
// loading.value = false;
// }
}; };
</script> </script>
...@@ -106,7 +117,7 @@ const handleLogin = async () => { ...@@ -106,7 +117,7 @@ const handleLogin = async () => {
.login-header { .login-header {
color: #fff; color: #fff;
font-size: 24px; font-size: 42px;
font-weight: bold; font-weight: bold;
padding-left: 20px; padding-left: 20px;
margin: 0 20px; margin: 0 20px;
...@@ -114,7 +125,8 @@ const handleLogin = async () => { ...@@ -114,7 +125,8 @@ const handleLogin = async () => {
display: flex; display: flex;
justify-content: left; justify-content: left;
align-items: center; align-items: center;
height: 50px; height: 60px;
line-height: 60px;
background: linear-gradient( background: linear-gradient(
to right, to right,
rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0.3),
...@@ -131,7 +143,7 @@ const handleLogin = async () => { ...@@ -131,7 +143,7 @@ const handleLogin = async () => {
transform: translateY(-50%); transform: translateY(-50%);
padding: 15px; padding: 15px;
box-sizing: border-box; box-sizing: border-box;
width: 350px; width: 375px;
height: 350px; height: 350px;
box-shadow: 0 0 20px rgba(0, 0, 0, 0.5); box-shadow: 0 0 20px rgba(0, 0, 0, 0.5);
border-radius: 8px; border-radius: 8px;
...@@ -160,7 +172,7 @@ const handleLogin = async () => { ...@@ -160,7 +172,7 @@ const handleLogin = async () => {
.company-logo { .company-logo {
width: 100%; width: 100%;
height: 30px; height: 45px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -75,10 +75,8 @@ ...@@ -75,10 +75,8 @@
<script setup> <script setup>
import { reactive, ref, onMounted, computed, getCurrentInstance } from "vue"; import { reactive, ref, onMounted, computed, getCurrentInstance } from "vue";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { useProjectStore } from "@/stores/project.js";
import { ElMessage, ElMessageBox } from "element-plus"; import { ElMessage, ElMessageBox } from "element-plus";
import CommonTable from "@/components/common/commonTable.vue"; import CommonTable from "@/components/common/commonTable.vue";
const projectStore = useProjectStore();
const router = useRouter(); const router = useRouter();
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
......
...@@ -34,10 +34,8 @@ ...@@ -34,10 +34,8 @@
<script setup> <script setup>
import { reactive, ref, onMounted, computed, getCurrentInstance } from "vue"; import { reactive, ref, onMounted, computed, getCurrentInstance } from "vue";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { useProjectStore } from "@/stores/project.js";
import { ElMessage, ElMessageBox } from "element-plus"; import { ElMessage, ElMessageBox } from "element-plus";
import CommonTable from "@/components/common/commonTable.vue"; import CommonTable from "@/components/common/commonTable.vue";
const projectStore = useProjectStore();
const router = useRouter(); const router = useRouter();
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
......
...@@ -33,10 +33,8 @@ ...@@ -33,10 +33,8 @@
<script setup> <script setup>
import { reactive, ref, onMounted, computed, getCurrentInstance } from "vue"; import { reactive, ref, onMounted, computed, getCurrentInstance } from "vue";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { useProjectStore } from "@/stores/project.js";
import { ElMessage, ElMessageBox } from "element-plus"; import { ElMessage, ElMessageBox } from "element-plus";
import CommonTable from "@/components/common/commonTable.vue"; import CommonTable from "@/components/common/commonTable.vue";
const projectStore = useProjectStore();
const router = useRouter(); const router = useRouter();
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
......
...@@ -35,10 +35,8 @@ ...@@ -35,10 +35,8 @@
<script setup> <script setup>
import { reactive, ref, onMounted, computed, getCurrentInstance } from "vue"; import { reactive, ref, onMounted, computed, getCurrentInstance } from "vue";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { useProjectStore } from "@/stores/project.js";
import { ElMessage, ElMessageBox } from "element-plus"; import { ElMessage, ElMessageBox } from "element-plus";
import CommonTable from "@/components/common/commonTable.vue"; import CommonTable from "@/components/common/commonTable.vue";
const projectStore = useProjectStore();
const router = useRouter(); const router = useRouter();
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
......
...@@ -40,10 +40,8 @@ ...@@ -40,10 +40,8 @@
<script setup> <script setup>
import { reactive, ref, onMounted, computed, getCurrentInstance } from "vue"; import { reactive, ref, onMounted, computed, getCurrentInstance } from "vue";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { useProjectStore } from "@/stores/project.js";
import { ElMessage, ElMessageBox } from "element-plus"; import { ElMessage, ElMessageBox } from "element-plus";
import CommonTable from "@/components/common/commonTable.vue"; import CommonTable from "@/components/common/commonTable.vue";
const projectStore = useProjectStore();
const router = useRouter(); const router = useRouter();
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment