明树Git Lab
Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
J
jt_front
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
jt_front
Commits
778dd172
Commit
778dd172
authored
Dec 09, 2025
by
yangyajing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
资源库对接
parent
7e4f239c
Pipeline
#104379
passed with stage
in 13 seconds
Changes
13
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
621 additions
and
431 deletions
+621
-431
https.js
src/data/https.js
+3
-1
MainLayout.vue
src/layouts/MainLayout.vue
+25
-6
index.js
src/router/index.js
+15
-9
project.js
src/stores/project.js
+0
-11
user.js
src/stores/user.js
+19
-0
index.vue
src/views/homePage/index.vue
+0
-4
index.vue
src/views/login/index.vue
+43
-31
addProject.vue
src/views/managePage/addProject.vue
+516
-359
projectAllPage.vue
src/views/managePage/projectAllPage.vue
+0
-2
projectArgument.vue
src/views/managePage/projectArgument.vue
+0
-2
projectDecision.vue
src/views/managePage/projectDecision.vue
+0
-2
projectDraft.vue
src/views/managePage/projectDraft.vue
+0
-2
projectSetUp.vue
src/views/managePage/projectSetUp.vue
+0
-2
No files found.
src/data/https.js
View file @
778dd172
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
;
}
}
...
...
src/layouts/MainLayout.vue
View file @
778dd172
...
@@ -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
>
...
...
src/router/index.js
View file @
778dd172
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
:
fals
e
}
meta
:
{
nopermission
:
tru
e
}
},
},
{
{
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
();
}
}
}
})
})
...
...
src/stores/project.js
deleted
100644 → 0
View file @
7e4f239c
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
src/stores/user.js
0 → 100644
View file @
778dd172
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
src/views/homePage/index.vue
View file @
778dd172
...
@@ -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
(()
=>
{
...
...
src/views/login/index.vue
View file @
778dd172
...
@@ -12,10 +12,10 @@
...
@@ -12,10 +12,10 @@
labelPosition=
"top"
labelPosition=
"top"
@
keydown
.
enter=
"handleLogin"
@
keydown
.
enter=
"handleLogin"
>
>
<el-form-item
label=
"用户名"
prop=
"
usernam
e"
>
<el-form-item
label=
"用户名"
prop=
"
mobil
e"
>
<el-input
<el-input
:prefix-icon=
"User"
:prefix-icon=
"User"
v-model=
"loginForm.
usernam
e"
v-model=
"loginForm.
mobil
e"
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:
24
px;
font-size:
42
px;
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: 3
50
px;
width: 3
75
px;
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:
30
px;
height:
45
px;
display: flex;
display: flex;
flex-direction: column;
flex-direction: column;
align-items: center;
align-items: center;
...
...
src/views/managePage/addProject.vue
View file @
778dd172
This source diff could not be displayed because it is too large. You can
view the blob
instead.
src/views/managePage/projectAllPage.vue
View file @
778dd172
...
@@ -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
();
...
...
src/views/managePage/projectArgument.vue
View file @
778dd172
...
@@ -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
();
...
...
src/views/managePage/projectDecision.vue
View file @
778dd172
...
@@ -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
();
...
...
src/views/managePage/projectDraft.vue
View file @
778dd172
...
@@ -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
();
...
...
src/views/managePage/projectSetUp.vue
View file @
778dd172
...
@@ -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
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment