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 @@
@@ -19,25 +27,6 @@ import { RouterLink, RouterView } from 'vue-router'
-->
-
-
@@ -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 @@
+
+
+
+
+
+ SN系统登陆
+
+
+
+
+
+
+
+
+
+ 登录
+
+
+
+
+
+
+
+
\ No newline at end of file