From 0ec38cbef3c2641681a6bb72806f7a945a0f7c2e Mon Sep 17 00:00:00 2001 From: xuzhenjing Date: Thu, 10 Jul 2025 11:53:06 +0800 Subject: [PATCH] 1、新增前端登陆、新增条件查询 --- public/config.js | 2 +- src/App.vue | 28 +++++++++------------------- src/api/api.js | 14 ++++++++++++++ src/main.js | 2 +- src/router/index.js | 38 +++++++++++++++++++++++++++++++++----- src/views/HomeView.vue | 184 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------- src/views/Login.vue | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 329 insertions(+), 51 deletions(-) create mode 100644 src/views/Login.vue diff --git a/public/config.js b/public/config.js index ea58f87..8e98b24 100644 --- a/public/config.js +++ b/public/config.js @@ -1,4 +1,4 @@ const BaseUrl = { - URL: "http://127.0.0.1:8080/" + URL: "http://127.0.0.1:8085/" } export default BaseUrl; diff --git a/src/App.vue b/src/App.vue index ef94181..7ccf66e 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,6 +1,14 @@ @@ -45,3 +34,4 @@ import { RouterLink, RouterView } from 'vue-router' + diff --git a/src/api/api.js b/src/api/api.js index f9c7947..7953bcb 100644 --- a/src/api/api.js +++ b/src/api/api.js @@ -16,3 +16,17 @@ export const deleteSNsApi = { url: baseUrl + '/sn/delete_sn' } +export const getSNsByConditionApi = { + method: 'post', + url: baseUrl + '/sn/get_by_condition_sn' +} + +export const listProjectSelectApi = { + method: 'post', + url: baseUrl + '/sn/list_product_select' +} + +export const loginApi = { + method: 'post', + url: baseUrl + '/auth/login' +} diff --git a/src/main.js b/src/main.js index af2583b..2df03cf 100644 --- a/src/main.js +++ b/src/main.js @@ -1,6 +1,6 @@ // import './assets/main.css' -import { createApp } from 'vue' +import {createApp} from 'vue' import App from './App.vue' import router from './router' import ElementPlus from 'element-plus' diff --git a/src/router/index.js b/src/router/index.js index 385df97..cc48dbe 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -1,5 +1,6 @@ import { createRouter, createWebHistory } from 'vue-router' import HomeView from '../views/HomeView.vue' +import Login from "../views/Login.vue"; const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), @@ -9,17 +10,44 @@ const router = createRouter({ name: 'home', component: HomeView, meta: { - title: 'SN管理' + title: 'SN管理', + requiresAuth: true // 添加这行,标记该路由需要认证 + } + + }, + { + path: '/login', + name: 'Login', + component: Login, + meta: { + requiresAuth: false // 明确表示登录页不需要认证 } } ] }) -router.beforeEach((to,from,next)=>{//beforeEach是router的钩子函数,在进入路由前执行 - if(to.meta.title){//判断是否有标题 - document.title = to.meta.title +// 路由守卫 +router.beforeEach((to, from, next) => { + const isAuthenticated = sessionStorage.getItem('isAuthenticated') + + if (to.path === '/login' && !isAuthenticated) { + return next('/login') + } + + // 需要认证但未登录 → 跳转登录页 + if (to.meta.requiresAuth && !isAuthenticated) { + return next('/login') } - next() //执行进入路由,如果不写就不会进入目标页 + + // 已登录但访问登录页 → 跳转首页 + if (to.path === '/login' && isAuthenticated) { + return next('/') + } + + + + next() }) + export default router diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue index d724c77..6b69182 100644 --- a/src/views/HomeView.vue +++ b/src/views/HomeView.vue @@ -3,39 +3,108 @@ // import { FormInstance } from 'element-plus' import axios from 'axios'; import { ElMessage } from 'element-plus' - import { addSNsApi, getSNsApi, deleteSNsApi } from '../api/api'; + import {addSNsApi, getSNsApi, deleteSNsApi, getSNsByConditionApi , listProjectSelectApi} from '../api/api'; const addFormRef = ref() const deleteFormRef = ref() + const conditionFormRef = ref() //获取的SN内容 - const SNsContent = ref('...') + const SNsContent = ref('') //当前显示的表单 1-添加SN 2-获取SN 3-删除SN const currForm = ref('1'); + + // 条件查询表单 + const conditionForm = reactive({ + projectName: '', + sns: '' + }) + const changeForm = (tab, event) => { currForm.value = tab.props.name; - //把SN数据查出来 - if (currForm.value == 3) { - axios({ - method: getSNsApi.method, - url: getSNsApi.url - }).then(response => { - if (response.data.code == 200) { - SNsContent.value = response.data.data; + if (currForm.value === '3') { + fetchProjectOptions() + } + // //把SN数据查出来 + // if (currForm.value == 3) { + // axios({ + // method: getSNsApi.method, + // url: getSNsApi.url + // }).then(response => { + // if (response.data.code == 200) { + // SNsContent.value = response.data.data; + // + // } else { + // ElMessage({ + // message: response.data.message, + // type: 'error', + // }) + // } + // + // }).catch(err => { + // ElMessage.error(err) + // }) + // } + // + } - } else { - ElMessage({ - message: response.data.message, - type: 'error', - }) - } + // 项目名称下拉选项 + const projectOptions = ref([]) + const loadingProjects = ref(false) - }).catch(err => { - ElMessage.error(err) + // 获取项目名称下拉列表 + const fetchProjectOptions = async () => { + try { + loadingProjects.value = true + const response = await axios({ + method: listProjectSelectApi.method, + url: listProjectSelectApi.url }) + if (response.data.code === 200) { + projectOptions.value = response.data.data || [] + } + } catch (err) { + ElMessage.error('获取项目列表失败') + } finally { + loadingProjects.value = false } - + } + + + // 提交条件查询 + const submitConditionForm = async (formInstance) => { + if (!formInstance) return + + try { + await formInstance.validate() + const response = await axios({ + method: getSNsByConditionApi.method, + url: getSNsByConditionApi.url, + data: { + projectName: conditionForm.projectName, + sns: conditionForm.sns + } + }) + + if (response.data.code === 200) { + SNsContent.value = response.data.data + ElMessage.success('查询成功') + } else { + ElMessage.error(response.data.message || '查询失败') + } + } catch (err) { + if (err.name !== 'Error') { // 不是表单验证错误 + ElMessage.error(err.message || '查询异常') + } + } + } + + // 重置条件表单 + const resetConditionForm = (formInstance) => { + if (!formInstance) return + formInstance.resetFields() + SNsContent.value = '...' } @@ -272,14 +341,70 @@ - - {{ SNsContent }} - - - + + + + + + + + + + + + + + + + + + 查询 + 重置 + + + + +
+ + + +
{{ SNsContent }}
+
+
+
+ - + @@ -291,6 +416,15 @@ margin: 0px auto; } + .card-header { + font-weight: bold; + } + + pre { + white-space: pre-wrap; + word-wrap: break-word; + } + diff --git a/src/views/Login.vue b/src/views/Login.vue new file mode 100644 index 0000000..fe7b6c2 --- /dev/null +++ b/src/views/Login.vue @@ -0,0 +1,112 @@ + + + + + \ No newline at end of file -- libgit2 0.21.4