Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
client
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
f8389862
authored
Jul 29, 2025
by
lijinqi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
登录修改
parent
0ecae0aa
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
695 additions
and
768 deletions
+695
-768
.env.development
+1
-1
src/api/login.js
+4
-17
src/router/index.js
+1
-1
src/store/modules/user.js
+7
-5
src/utils/request.js
+3
-2
src/views/index.vue
+533
-138
src/views/index_old.vue
+138
-533
src/views/login.vue
+8
-39
src/views/register.vue
+0
-32
No files found.
.env.development
View file @
f8389862
...
...
@@ -5,4 +5,4 @@ VITE_APP_TITLE = 先进计算普惠算力公共服务平台
VITE_APP_ENV = 'development'
# 先进计算普惠算力公共服务平台/开发环境
VITE_APP_BASE_API = 'http://localhost:
8086
'
VITE_APP_BASE_API = 'http://localhost:
48080/app-api/
'
src/api/login.js
View file @
f8389862
import
request
from
'@/utils/request'
// 登录方法
export
function
login
(
usernam
e
,
password
,
code
,
uuid
)
{
export
function
login
(
mobil
e
,
password
,
code
,
uuid
)
{
const
data
=
{
usernam
e
,
mobil
e
,
password
,
code
,
uuid
}
return
request
({
url
:
'/login'
,
url
:
'/
member/auth/
login'
,
headers
:
{
isToken
:
false
,
repeatSubmit
:
false
...
...
@@ -42,19 +42,7 @@ export function getInfo() {
// 退出方法
export
function
logout
()
{
return
request
({
url
:
'/logout'
,
url
:
'/
member/auth/
logout'
,
method
:
'post'
})
}
// 获取验证码
export
function
getCodeImg
()
{
return
request
({
url
:
'/captchaImage'
,
headers
:
{
isToken
:
false
},
method
:
'get'
,
timeout
:
20000
})
}
\ No newline at end of file
src/router/index.js
View file @
f8389862
...
...
@@ -67,7 +67,7 @@ export const constantRoutes = [
children
:
[
{
path
:
'/index'
,
component
:
()
=>
import
(
'@/views/index
-copy
.vue'
),
component
:
()
=>
import
(
'@/views/index.vue'
),
name
:
'Index'
,
meta
:
{
title
:
'首页'
,
icon
:
'dashboard'
,
affix
:
true
}
}
...
...
src/store/modules/user.js
View file @
f8389862
...
...
@@ -16,14 +16,16 @@ const useUserStore = defineStore(
actions
:
{
// 登录
login
(
userInfo
)
{
const
username
=
userInfo
.
usernam
e
.
trim
()
const
mobile
=
userInfo
.
mobil
e
.
trim
()
const
password
=
userInfo
.
password
const
code
=
userInfo
.
code
const
uuid
=
userInfo
.
uuid
return
new
Promise
((
resolve
,
reject
)
=>
{
login
(
usernam
e
,
password
,
code
,
uuid
).
then
(
res
=>
{
setToken
(
res
.
t
oken
)
this
.
token
=
res
.
token
login
(
mobil
e
,
password
,
code
,
uuid
).
then
(
res
=>
{
setToken
(
res
.
data
.
accessT
oken
)
this
.
token
=
res
.
data
.
token
resolve
()
}).
catch
(
error
=>
{
reject
(
error
)
...
...
@@ -44,7 +46,7 @@ const useUserStore = defineStore(
this
.
roles
=
[
'ROLE_DEFAULT'
]
}
this
.
id
=
user
.
userId
this
.
name
=
user
.
userNam
e
this
.
name
=
user
.
mobil
e
this
.
avatar
=
avatar
resolve
(
res
)
}).
catch
(
error
=>
{
...
...
src/utils/request.js
View file @
f8389862
...
...
@@ -10,8 +10,9 @@ import useUserStore from '@/store/modules/user'
let
downloadLoadingInstance
;
// 是否显示重新登录
export
let
isRelogin
=
{
show
:
false
};
axios
.
defaults
.
headers
[
'Content-Type'
]
=
'application/json;charset=utf-8'
axios
.
defaults
.
headers
[
'tenant-id'
]
=
'1'
;
// 创建axios实例
const
service
=
axios
.
create
({
// axios中请求配置有baseURL选项,表示请求URL公共部分
...
...
@@ -127,7 +128,7 @@ export function download(url, params, filename, config) {
downloadLoadingInstance
=
ElLoading
.
service
({
text
:
"正在下载数据,请稍候"
,
background
:
"rgba(0, 0, 0, 0.7)"
,
})
return
service
.
post
(
url
,
params
,
{
transformRequest
:
[(
params
)
=>
{
return
tansParams
(
params
)
}],
headers
:
{
'Content-Type'
:
'application/x-www-form-urlencoded'
},
headers
:
{
'Content-Type'
:
'application/x-www-form-urlencoded'
},
responseType
:
'blob'
,
...
config
}).
then
(
async
(
data
)
=>
{
...
...
src/views/index.vue
View file @
f8389862
...
...
@@ -2,187 +2,221 @@
<div
class=
"app-container home"
>
<div
class=
"banner"
>
<el-carousel
height=
"600px"
:indicator-position=
"bannerImgList.length
<
=
1
?
'
none
'
:
''
"
>
<el-carousel-item
v-for=
"item in bannerImgList"
:key=
"item"
>
<el-carousel-item
v-for=
"item in bannerImgList"
:key=
"item"
@
click=
"handleCarousel(item.url)"
>
<img
:src=
"baseUrl + item.image"
alt=
""
>
</el-carousel-item>
</el-carousel>
</div>
<div
class=
"block"
style=
"margin-bottom: 76px"
>
<div
class=
"block-title"
>
<div
class=
"bg-text"
>
RESOURCE
</div>
计算资源
</div>
<div
class=
"block-sub-title"
>
强劲、稳定、安全的云计算能力,助力企业上云
</div>
<el-row
:gutter=
"24"
>
<el-col
:span=
"12"
>
<div
class=
"resource-item resource-item-1"
@
click=
"$router.push('/computingResource/resourceList?type=0')"
>
<div
class=
"title"
>
天河一号
</div>
<div
class=
"desc"
>
天河一号拥有2048个计算节点,128个云服务阵列,64个可视化节点,4个胖节点。基于超级计算平台可提供科学研究、工程仿真等计算服务,开展并行算法研究与大规模并行应用软件开发。
</div>
<div
class=
"link"
>
查看详情
<el-icon>
<ArrowRight/>
</el-icon>
</div>
</div>
</el-col>
<el-col
:span=
"12"
>
<div
class=
"resource-item resource-item-2"
@
click=
"$router.push('/computingResource/resourceList?type=0')"
>
<div
class=
"title"
>
天河新一代
</div>
<div
class=
"desc"
>
“天河”新一代超级计算机拥有通用算力200P Flops(FP64)人工智能算力800P
Flops(FP16)磁盘总容量超20PB。整体性能处于世界先进水平。
</div>
<div
class=
"link"
>
查看详情
<el-icon>
<ArrowRight/>
</el-icon>
<div
class=
"new-model"
>
<div
style=
"padding-top: 32px;"
>
<div
class=
"model-box"
v-for=
"(i,index) in list"
:key=
"i"
>
<div
class=
"new-block"
>
<img
v-if=
"index=== 0"
class=
"resourceLogo"
src=
"@/assets/images/indexImg/resource0-1.png"
alt=
""
>
<img
v-if=
"index=== 1"
class=
"resourceLogo"
src=
"@/assets/images/indexImg/resource0-2.png"
alt=
""
>
<img
v-if=
"index=== 2"
class=
"resourceLogo"
src=
"@/assets/images/indexImg/resource0-3.png"
alt=
""
>
<div
class=
"new-block-details"
>
<div
class=
"details-introduce"
>
<span>
{{
i
.
title
}}
</span>
<span>
{{
i
.
titleEH
}}
</span>
</div>
<div
class=
"present"
>
{{
i
.
present
}}
</div>
</div>
</div>
</el-col>
<el-col
:span=
"24"
>
<div
class=
"resource-item resource-item-3"
@
click=
"$router.push('/computingResource/resourceList?type=0')"
>
<div
class=
"title"
>
云计算
</div>
<div
class=
"desc"
>
云计算服务为您提供安全稳定及灵活扩展的云计算服务,可实现按需扩展CPU、内存、存储和网络资源,帮助企业大幅削减IT开支,优化运维流程,专注于核心业务的创新与发展。
</div>
<div
class=
"link"
>
查看详情
<el-icon>
<ArrowRight/>
</el-icon>
</div>
<div
v-if=
"index === 2"
class=
"view-more-text"
@
click=
"$router.push('/partnership/partnershipList')"
>
查看更多
</div>
</el-col>
</el-row>
</div>
<div
class=
"block"
>
<div
class=
"block-title"
>
<div
class=
"bg-text"
>
APPLICATION
</div>
行业应用
</div>
<div
class=
"block-sub-title"
>
集成机器学习、深度学习、自然语言处理、图像识别等先进技术,为金融、医疗、教育、零售、制造业等多个领域提供智能化解决方案。
</div>
<el-row
:gutter=
"24"
>
<el-col
v-for=
"item in assemblyData"
:key=
"item.id"
:span=
"8"
>
<div
class=
"application-item application-item-1"
@
click=
"openAssembly(item)"
:style=
"
{'background-image': `url(${baseUrl + item.homeImage})`}">
<div
class=
"title"
>
{{
item
.
title
}}
</div>
<div
class=
"desc"
>
{{
item
.
description
}}
</div>
<div
class=
"link"
>
查看详情
<el-icon>
<ArrowRight/>
</el-icon>
<div
class=
"particulars"
v-if=
"index !== 2"
>
<el-row
:gutter=
"24"
>
<el-col
class=
"resource-col"
:span=
"8"
v-for=
"x in i.assemblyData"
:key=
"i"
@
click=
"i.id === 1? $router.push('/computingResource/resourceList?type=' + x.category):openAssembly(x)"
>
<!-- style="background: url("@/assets/images/indexImg/resource1.png") no-repeat center center / 100%;"-->
<div
class=
"resource-box"
:style=
"
{background: `url(${index === 0 ?baseUrl+x.image:baseUrl+x.homeImage}) no-repeat center center / 100%`}">
<div
class=
"title"
>
{{
x
.
title
}}
</div>
<div
class=
"introduce"
>
{{
index
===
0
?
x
.
information
:
x
.
description
}}
</div>
</div>
</el-col>
</el-row>
<div
v-if=
"index === 1"
class=
"view-more-text"
style=
"margin-top: 40px;"
@
click=
"$router.push('/componentServices/componentServicesList')"
>
查看更多
</div>
</div>
</el-col>
</el-row>
<div
class=
"flex-justify-center"
style=
"margin-top: 28px;margin-bottom: 100px"
>
<!--
<el-button
class=
"view-more-btn"
>
更多行业-->
<!--
<el-icon>
-->
<!--
<ArrowRight/>
-->
<!--
</el-icon>
-->
<!--
</el-button>
-->
</div>
</div>
<div
class=
"partners"
>
<div
class=
"title"
>
生态合作伙伴
<img
class=
"light"
src=
"@/assets/images/indexImg/glow.png"
alt=
""
/>
</div>
</div>
<div
class=
"desc"
>
助力各类“AI+”创新应用,推进企业算力生态建设,促进科创产业集聚发展
</div>
<el-button
class=
"view-more-btn"
@
click=
"$router.push('/partnership/partnershipList')"
>
查看更多
<el-icon>
<ArrowRight/>
</el-icon>
</el-button>
</div>
<div
class=
"block"
>
<div
class=
"block-title"
style=
"margin-bottom: 50px"
>
<div
class=
"bg-text"
>
INFORMATION
</div>
活动资讯
</div>
<div
class=
"flex flex-justify-center"
>
<el-row
:gutter=
"24"
>
<el-col
:span=
"12"
>
<!--
<div
class=
"block-sub-title"
>
活动时间待定,活动内容待定,活动礼品自带
</div>
-->
<div
class=
"information"
style=
"margin-right: 182px"
>
<div
class=
"information-item"
@
click=
"$router.push('/information/informationDetail?id='+informationMainData.id)"
>
<div
class=
"flex"
>
<div
class=
"date"
>
<div
class=
"month-day"
>
{{
informationMainData
.
month
}}
/
{{
informationMainData
.
month
}}
</div>
<div
class=
"year"
>
{{
informationMainData
.
year
}}
</div>
</div>
<div
class=
"right"
>
<div
class=
"title"
>
{{
informationMainData
.
title
}}
</div>
<div
class=
"content"
v-html=
"informationMainData.description"
>
<div
class=
"block"
style=
"padding-top: 70px;position: relative;"
>
<div
style=
"width: calc(100% - 214px);margin: 0 auto;padding-bottom: 10px;"
>
<div
class=
"block-title"
style=
"margin-bottom: 50px;z-index: 3 !important;"
>
<div
class=
"bg-text"
>
INFORMATION
</div>
活动资讯
</div>
<div
class=
"flex flex-justify-center"
>
<el-row
:gutter=
"24"
style=
"z-index: 2;"
>
<el-col
:span=
"12"
>
<!--
<div
class=
"block-sub-title"
>
活动时间待定,活动内容待定,活动礼品自带
</div>
-->
<div
class=
"information"
style=
"margin-right: 182px"
>
<div
class=
"information-item"
@
click=
"$router.push('/information/informationDetail?id='+informationMainData.id)"
>
<div
class=
"flex"
>
<div
class=
"date"
>
<div
class=
"month-day"
>
{{
informationMainData
.
month
}}
/
{{
informationMainData
.
month
}}
</div>
<div
class=
"year"
>
{{
informationMainData
.
year
}}
</div>
</div>
<div
class=
"right"
>
<div
class=
"title"
>
{{
informationMainData
.
title
}}
</div>
<div
class=
"content"
v-html=
"informationMainData.remark"
></div>
</div>
</div>
<img
:src=
"baseUrl + informationMainData.image"
alt=
""
>
</div>
<img
:src=
"baseUrl + informationMainData.image"
alt=
""
>
</div>
</
div
>
</el-col
>
<el-col
:span=
"12"
>
<div>
<div
v-for=
"item in informationData"
:key=
"item.id"
class=
"information-item flex"
@
click=
"$router.push('/information/informationDetail?id='+item.id)
"
>
<div
class=
"date"
>
<div
class=
"month-day"
>
{{
item
.
month
}}
/
{{
item
.
month
}}
</div>
<
div
class=
"year"
>
{{
item
.
year
}}
<
/div>
</div
>
<div
class=
"right"
>
<div
class=
"title"
>
{{
item
.
title
}}
</div
>
<div
class=
"content"
v-html=
"item.description"
>
</
el-col
>
<el-col
:span=
"12"
>
<div
>
<div
v-for=
"item in informationData"
:key=
"item.id"
class=
"information-item flex"
@
click=
"$router.push('/information/informationDetail?id='+item.id)"
>
<div
class=
"date
"
>
<div
class=
"month-day"
>
{{
item
.
month
}}
/
{{
item
.
month
}}
</div
>
<div
class=
"year"
>
{{
item
.
year
}}
</div>
</div>
<div
class=
"right"
>
<div
class=
"title"
>
{{
item
.
title
}}
</div
>
<div
class=
"content"
v-html=
"item.remark"
>
</div
>
</div>
</div>
</div>
</div>
</el-col>
</el-row>
</el-col>
</el-row>
</div>
<div
class=
"view-more-text"
style=
"padding-top: 40px;"
@
click=
"$router.push('/information/informationList')"
>
更多资讯
</div>
</div>
<img
class=
"block-light"
src=
"@/assets/images/indexImg/glow5.png"
alt=
""
/>
</div>
<div
class=
"content-footer"
>
<div
class=
"content-detail"
>
<img
src=
"@/assets/images/indexImg/content1.png"
alt=
""
/>
<div
class=
"name"
>
服务支持
</div>
<div
class=
"more"
>
了解更多 >
</div>
</div>
<div
class=
"content-detail"
>
<img
src=
"@/assets/images/indexImg/content2.png"
alt=
""
/>
<div
class=
"name"
>
联系我们
</div>
<div
class=
"more"
>
了解更多 >
</div>
</div>
<div
class=
"flex-justify-center"
style=
"margin-top: 40px;margin-bottom: 100px"
>
<el-button
class=
"view-more-btn"
@
click=
"$router.push('/information/informationList')"
>
更多资讯
<el-icon>
<ArrowRight/>
</el-icon>
</el-button>
<div
class=
"content-detail"
>
<img
src=
"@/assets/images/indexImg/content3.png"
alt=
""
/>
<div
class=
"name"
>
如何购买
</div>
<div
class=
"more"
>
了解更多 >
</div>
</div>
</div>
<div
class=
"footer"
>
先进计算科技有限公司 沪ICP备18000749号-2
</div>
<el-dialog
v-model=
"dialogTableVisible"
style=
"width: 80% !important;"
:title=
"dialogTitle"
@
close=
"handleDialogClose"
>
<div>
<iframe
v-show=
"iframeShow"
ref=
"iframe"
:src=
"iframeSrc"
width=
"100%"
height=
"700px"
></iframe>
</div>
</el-dialog>
</div>
</
template
>
<
script
setup
name=
"Index"
>
import
{
banner
,
assemblyList
,
informationList
}
from
'@/api/home.js'
import
{
banner
,
assemblyList
,
information
ResourceList
,
information
List
}
from
'@/api/home.js'
import
{
ref
}
from
'vue'
const
baseUrl
=
import
.
meta
.
env
.
VITE_APP_BASE_API
// const baseImgUrl = window.location.origin
const
assemblyData
=
ref
([])
const
bannerImgList
=
ref
([])
const
list
=
ref
([
{
id
:
1
,
title
:
'计算资源'
,
titleEH
:
'/RESOURCE'
,
present
:
'强劲 · 稳定 · 安全的云计算能力 · 助力企业上云'
,
assemblyData
:
[
// {
// title: '天河系列超级计算机',
// description: '拥有天河一号、天河新一代超算,综合算力200PF(64位精度),人工智能算力800PF,存储超20PB。可提供科学研究、工程仿真、并行算法及大规模并行应用软件研发。',
// router: '/computingResource/resourceList?type=0'
// },
// {
// title: '天河 天马智算集群',
// description: '提供各类通用、国产CPU、GPU裸金属服务器,资源独占、性能无损、弹性扩容、安全可靠',
// router: '/computingResource/resourceList?type=1'
// },
// {
// title: '云计算服务',
// description: '提供安全稳定及灵活扩展的云计算服务,实现按需扩展CPU、内存、存储和网络资源,有效降低 IT 成本,提升运维效率,助力核心业务创新。',
// router: '/computingResource/resourceList?type=2'
// }
]
},
{
id
:
2
,
title
:
'行业应用'
,
titleEH
:
'/APPLICATION'
,
present
:
'集成机器学习、深度学习、自然语言处理、图像识别等先进技术,为金融、医疗、教育、零售、制造业等多个领域提供智能化解决方案。'
,
assemblyData
:
[]
},
{
id
:
3
,
title
:
'生态合作伙伴'
,
titleEH
:
'/PARTNER'
,
present
:
'助力各类“AI+”创新应用,推进企业算力生态建设,促进科创产业集聚发展'
,
assemblyData
:
[]
}
])
const
dialogTableVisible
=
ref
(
false
)
const
dialogTitle
=
ref
(
''
)
const
iframeSrc
=
ref
(
''
)
const
iframeShow
=
ref
(
false
)
function
getBanner
()
{
banner
().
then
(
res
=>
{
bannerImgList
.
value
=
res
.
data
bannerImgList
.
value
=
res
.
data
.
sort
(
function
(
a
,
b
)
{
return
a
.
orderNum
-
b
.
orderNum
})
})
}
getBanner
()
function
getAassemblyList
()
{
assemblyList
({
type
:
0
}).
then
(
res
=>
{
assemblyData
.
value
=
res
.
data
.
length
>
3
?
res
.
data
.
slice
(
0
,
3
)
:
res
.
data
assemblyList
({
type
:
0
}).
then
(
res
=>
{
const
data
=
res
.
data
.
sort
(
function
(
a
,
b
)
{
return
a
.
orderNum
-
b
.
orderNum
})
assemblyData
.
value
=
data
.
length
>
3
?
data
.
slice
(
0
,
3
)
:
data
list
.
value
[
1
].
assemblyData
=
data
.
length
>
3
?
data
.
slice
(
0
,
3
)
:
data
})
}
// 计算自选
function
getResource
()
{
informationResourceList
().
then
(
res
=>
{
list
.
value
[
0
].
assemblyData
=
res
.
data
.
length
>
3
?
res
.
data
.
slice
(
0
,
3
)
:
res
.
data
console
.
log
(
list
.
value
[
0
].
assemblyData
,
'list.value[0].assemblyData'
)
})
}
getAassemblyList
()
getResource
()
const
informationData
=
ref
([])
const
informationMainData
=
ref
({})
...
...
@@ -206,13 +240,176 @@ function getInformation() {
getInformation
()
function
openAssembly
(
data
)
{
window
.
open
(
data
.
url
)
dialogTitle
.
value
=
data
.
title
iframeSrc
.
value
=
data
.
url
dialogTableVisible
.
value
=
true
iframeShow
.
value
=
true
}
function
cancel
()
{
dialogTableVisible
.
value
=
false
iframeShow
.
value
=
false
}
// 关闭弹窗
function
handleDialogClose
()
{
iframeSrc
.
value
=
null
}
function
handleCarousel
(
url
)
{
if
(
url
)
{
window
.
open
(
url
)
}
}
</
script
>
<
style
scoped
lang=
"scss"
>
.new-model
{
background-image
:
url("@/assets/images/indexImg/bg-1.png")
;
background-size
:
cover
;
/* 背景图片覆盖整个元素区域 */
background-position
:
center
;
/* 背景图片居中 */
background-repeat
:
no-repeat
;
/* 背景图片不重复 */
background-color
:
#b6b8bf
;
padding-bottom
:
90px
;
margin-bottom
:
0
;
}
.view-more-text
{
position
:
sticky
;
text-align
:
center
;
font-size
:
20px
;
color
:
#000000
;
cursor
:
pointer
;
padding-bottom
:
60px
;
z-index
:
2
!important
;
}
.new-block
{
margin
:
0
auto
;
display
:
flex
;
justify-content
:
center
;
flex-direction
:
column
;
align-items
:
center
;
padding-top
:
74px
;
padding-bottom
:
41px
;
.new-block-details
{
z-index
:
2
!important
;
padding-top
:
32px
;
}
.resourceLogo
{
width
:
123px
;
height
:
123px
;
margin-bottom
:
32px
;
z-index
:
2
!important
;
}
.details-introduce
{
display
:
flex
;
justify-content
:
center
;
text-align
:
center
;
span
:
first-child
{
font-family
:
Microsoft
YaHei
;
font-weight
:
bolder
;
font-size
:
35px
;
color
:
#000000
;
}
span
:last-child
{
font-family
:
YouSheBiaoTiHei
;
font-weight
:
400
;
font-size
:
42px
;
color
:
#5E6988
;
}
}
.present
{
font-family
:
Microsoft
YaHei
;
font-weight
:
bolder
;
font-size
:
17px
;
color
:
#010101
;
line-height
:
27px
;
text-align
:
center
;
}
}
.model-box
{
position
:
relative
;
.light
{
position
:
absolute
;
z-index
:
1
;
width
:
100%
;
left
:
0
;
top
:
12%
;
}
}
.block-light
{
position
:
absolute
;
z-index
:
1
!important
;
width
:
1700px
;
height
:
900px
;
left
:
10px
;
top
:
40px
;
}
.particulars
{
width
:
calc
(
100%
-
240px
);
margin
:
0
auto
;
cursor
:
pointer
;
}
.resource-box
{
padding
:
44px
66px
0
58px
;
height
:
248px
;
.title
{
font-family
:
Microsoft
YaHei
;
font-weight
:
400
;
font-size
:
27px
;
color
:
#F0A227
;
padding-bottom
:
22px
;
z-index
:
2
!important
;
}
.introduce
{
font-family
:
Microsoft
YaHei
;
font-weight
:
400
;
font-size
:
14px
;
color
:
#FAFBFD
;
line-height
:
27px
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
display
:
-webkit-box
;
-webkit-line-clamp
:
3
;
-webkit-box-orient
:
vertical
;
}
}
.resource-col
{
z-index
:
2
!important
;
}
//
.resource-col
:first-of-type
.resource-box
{
//
background
:
url("@/assets/images/indexImg/resource1.png")
no-repeat
center
center
/
100%
;
//
}
//
//
.resource-col
:nth-of-type
(
2
)
.resource-box
{
//
background
:
url("@/assets/images/indexImg/resource2.png")
no-repeat
center
center
/
100%
;
//
}
//
//
.resource-col
:nth-of-type
(
3
)
.resource-box
{
//
background
:
url("@/assets/images/indexImg/resource3.png")
no-repeat
center
center
/
100%
;
//
}
.app-container
{
padding
:
0
;
flex-grow
:
1
;
flex-shrink
:
1
;
position
:
relative
;
}
.home
{
...
...
@@ -221,7 +418,8 @@ function openAssembly(data) {
.banner
{
position
:
relative
;
margin-bottom
:
64px
;
cursor
:
pointer
;
//
margin-bottom
:
64px
;
img
{
display
:
block
;
...
...
@@ -233,8 +431,13 @@ function openAssembly(data) {
.block
{
//
width
:
1280px
;
width
:
calc
(
100%
-
214px
);
background-image
:
url("@/assets/images/indexImg/bg-1.png")
;
background-size
:
cover
;
/* 背景图片覆盖整个元素区域 */
background-position
:
center
;
/* 背景图片居中 */
background-repeat
:
no-repeat
;
/* 背景图片不重复 */
margin
:
0
auto
;
z-index
:
4
!important
;
padding-bottom
:
60px
;
}
.block-title
{
...
...
@@ -244,6 +447,7 @@ function openAssembly(data) {
line-height
:
60px
;
text-align
:
center
;
position
:
relative
;
z-index
:
3
!important
;
.bg-text
{
position
:
absolute
;
...
...
@@ -270,6 +474,7 @@ function openAssembly(data) {
border-radius
:
2px
;
height
:
40px
;
color
:
#303233
;
z-index
:
2
!important
;
}
.resource-item
{
...
...
@@ -380,7 +585,7 @@ function openAssembly(data) {
flex-direction
:
column
;
align-items
:
center
;
justify-content
:
center
;
background
:
url("@/assets/images/
partners.png")
no-repeat
center
center
/
cover
;
background
:
url("@/assets/images/
indexImg/bg-1.png")
no-repeat
;
.title
{
font-weight
:
bold
;
...
...
@@ -398,6 +603,31 @@ function openAssembly(data) {
}
}
//
.partners
{
//
height
:
434px
;
//
margin-bottom
:
65px
;
//
display
:
flex
;
//
flex-direction
:
column
;
//
align-items
:
center
;
//
justify-content
:
center
;
//
background
:
url("@/assets/images/partners.png")
no-repeat
center
center
/
cover
;
//
//
.title
{
//
font-weight
:
bold
;
//
font-size
:
34px
;
//
color
:
#303233
;
//
margin-bottom
:
20px
;
//
}
//
//
.desc
{
//
font-weight
:
400
;
//
font-size
:
14px
;
//
color
:
#7e8080
;
//
margin-bottom
:
40px
;
//
line-height
:
1.8
;
//
}
//
}
//
.information-right
{
//
//
flex
:
1
;
//
padding-right
:
210px
;
...
...
@@ -411,6 +641,10 @@ function openAssembly(data) {
.information-item
{
width
:
570px
;
.content
{
font-size
:
16px
!important
;
}
&
:hover
{
cursor
:
pointer
;
...
...
@@ -495,5 +729,166 @@ function openAssembly(data) {
font-size
:
14px
;
background-color
:
#303233
;
}
.banner-text
{
width
:
913px
;
position
:
absolute
;
top
:
50%
;
left
:
50%
;
display
:
flex
;
transform
:
translate
(
-50%
,
-50%
);
}
.banner-text
.banner-left
div
:first-child
{
font-family
:
Microsoft
YaHei
;
font-weight
:
300
;
font-size
:
75px
;
color
:
#F8F9FD
;
//
line-height
:
56px
;
text-indent
:
20px
;
//
padding-bottom
:
16px
;
span
{
//
font-family
:
DIN
;
font-weight
:
bolder
;
}
}
.banner-text
.banner-left
div
:last-child
{
font-family
:
Microsoft
YaHei
;
font-weight
:
bold
;
font-size
:
20px
;
color
:
#ECAA1C
;
line-height
:
27px
;
text-align
:
right
;
}
.banner-right
{
display
:
flex
;
flex-direction
:
column
;
justify-content
:
flex-end
;
font-family
:
Microsoft
YaHei
;
color
:
#ECAA1C
;
padding-left
:
34px
;
}
.text-right
{
display
:
flex
;
flex-direction
:
row
;
align-items
:
center
;
font-family
:
Microsoft
YaHei
;
font-weight
:
bold
;
font-size
:
15px
;
color
:
#ECAA1C
;
//
line-height
:
20px
;
//
padding-bottom
:
8px
;
.text-right-del
{
display
:
flex
;
flex-direction
:
column
;
justify-content
:
flex-end
;
align-items
:
flex-start
;
}
.exclamation-point
{
font-family
:
Microsoft
YaHei
;
font-weight
:
bold
;
font-size
:
42px
;
font-style
:
italic
;
padding-left
:
9px
;
}
}
.text-bottom
{
font-family
:
Copperplate
Gothic
Light
;
font-weight
:
400
;
font-size
:
24px
;
color
:
#ECAA1C
;
span
{
font-weight
:
bolder
;
}
}
.content-footer
{
width
:
100%
;
height
:
218px
;
background
:
#fafafa
;
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
padding
:
0
190px
;
.content-detail
{
display
:
flex
;
flex-direction
:
column
;
align-content
:
center
;
align-items
:
center
;
width
:
100%
;
max-width
:
1520px
;
cursor
:
pointer
;
.name
{
line-height
:
32px
;
font-size
:
24px
;
color
:
#333333
;
text-align
:
center
;
}
.more
{
line-height
:
22px
;
font-size
:
16px
;
color
:
#333333
;
margin-top
:
16px
;
text-align
:
center
;
}
}
img
{
width
:
48px
;
height
:
48px
;
margin-bottom
:
20px
;
}
}
.iframe-container
{
position
:
absolute
;
top
:
10%
;
left
:
6%
;
}
.iframe-container
iframe
{
position
:
absolute
;
top
:
0
;
left
:
0
;
}
:deep
(
.el-dialog__body
)
{
padding-top
:
unset
!important
;
}
.el-tabs
{
--el-border-color-light
:
#2E77E3
;
--el-tabs-header-height
:
48px
;
:deep(.el-tabs__content)
{
overflow
:
visible
}
:deep
(
.el-tabs__active-bar
)
{
display
:
none
;
}
:deep
(
.el-tabs__item
)
{
--el-font-size-base
:
16px
;
padding-left
:
24px
!important
;
padding-right
:
24px
!important
;
&.is-active
{
color
:
#ffffff
;
background-color
:
#2E77E3
;
}
}
}
</
style
>
src/views/index
-copy
.vue
→
src/views/index
_old
.vue
View file @
f8389862
...
...
@@ -2,221 +2,187 @@
<div
class=
"app-container home"
>
<div
class=
"banner"
>
<el-carousel
height=
"600px"
:indicator-position=
"bannerImgList.length
<
=
1
?
'
none
'
:
''
"
>
<el-carousel-item
v-for=
"item in bannerImgList"
:key=
"item"
@
click=
"handleCarousel(item.url)"
>
<el-carousel-item
v-for=
"item in bannerImgList"
:key=
"item"
>
<img
:src=
"baseUrl + item.image"
alt=
""
>
</el-carousel-item>
</el-carousel>
</div>
<div
class=
"new-model"
>
<div
style=
"padding-top: 32px;"
>
<div
class=
"model-box"
v-for=
"(i,index) in list"
:key=
"i"
>
<div
class=
"new-block"
>
<img
v-if=
"index=== 0"
class=
"resourceLogo"
src=
"@/assets/images/indexImg/resource0-1.png"
alt=
""
>
<img
v-if=
"index=== 1"
class=
"resourceLogo"
src=
"@/assets/images/indexImg/resource0-2.png"
alt=
""
>
<img
v-if=
"index=== 2"
class=
"resourceLogo"
src=
"@/assets/images/indexImg/resource0-3.png"
alt=
""
>
<div
class=
"new-block-details"
>
<div
class=
"details-introduce"
>
<span>
{{
i
.
title
}}
</span>
<span>
{{
i
.
titleEH
}}
</span>
</div>
<div
class=
"present"
>
{{
i
.
present
}}
</div>
<div
class=
"block"
style=
"margin-bottom: 76px"
>
<div
class=
"block-title"
>
<div
class=
"bg-text"
>
RESOURCE
</div>
计算资源
</div>
<div
class=
"block-sub-title"
>
强劲、稳定、安全的云计算能力,助力企业上云
</div>
<el-row
:gutter=
"24"
>
<el-col
:span=
"12"
>
<div
class=
"resource-item resource-item-1"
@
click=
"$router.push('/computingResource/resourceList?type=0')"
>
<div
class=
"title"
>
天河一号
</div>
<div
class=
"desc"
>
天河一号拥有2048个计算节点,128个云服务阵列,64个可视化节点,4个胖节点。基于超级计算平台可提供科学研究、工程仿真等计算服务,开展并行算法研究与大规模并行应用软件开发。
</div>
<div
class=
"link"
>
查看详情
<el-icon>
<ArrowRight/>
</el-icon>
</div>
</div>
<div
v-if=
"index === 2"
class=
"view-more-text"
@
click=
"$router.push('/partnership/partnershipList')"
>
查看更多
</el-col>
<el-col
:span=
"12"
>
<div
class=
"resource-item resource-item-2"
@
click=
"$router.push('/computingResource/resourceList?type=0')"
>
<div
class=
"title"
>
天河新一代
</div>
<div
class=
"desc"
>
“天河”新一代超级计算机拥有通用算力200P Flops(FP64)人工智能算力800P
Flops(FP16)磁盘总容量超20PB。整体性能处于世界先进水平。
</div>
<div
class=
"link"
>
查看详情
<el-icon>
<ArrowRight/>
</el-icon>
</div>
</div>
<div
class=
"particulars"
v-if=
"index !== 2"
>
<el-row
:gutter=
"24"
>
<el-col
class=
"resource-col"
:span=
"8"
v-for=
"x in i.assemblyData"
:key=
"i"
@
click=
"i.id === 1? $router.push('/computingResource/resourceList?type=' + x.category):openAssembly(x)"
>
<!-- style="background: url("@/assets/images/indexImg/resource1.png") no-repeat center center / 100%;"-->
<div
class=
"resource-box"
:style=
"
{background: `url(${index === 0 ?baseUrl+x.image:baseUrl+x.homeImage}) no-repeat center center / 100%`}">
<div
class=
"title"
>
{{
x
.
title
}}
</div>
<div
class=
"introduce"
>
{{
index
===
0
?
x
.
information
:
x
.
description
}}
</div>
</div>
</el-col>
</el-row>
<div
v-if=
"index === 1"
class=
"view-more-text"
style=
"margin-top: 40px;"
@
click=
"$router.push('/componentServices/componentServicesList')"
>
查看更多
</el-col>
<el-col
:span=
"24"
>
<div
class=
"resource-item resource-item-3"
@
click=
"$router.push('/computingResource/resourceList?type=0')"
>
<div
class=
"title"
>
云计算
</div>
<div
class=
"desc"
>
云计算服务为您提供安全稳定及灵活扩展的云计算服务,可实现按需扩展CPU、内存、存储和网络资源,帮助企业大幅削减IT开支,优化运维流程,专注于核心业务的创新与发展。
</div>
<div
class=
"link"
>
查看详情
<el-icon>
<ArrowRight/>
</el-icon>
</div>
</div>
<img
class=
"light"
src=
"@/assets/images/indexImg/glow.png"
alt=
""
/>
</div>
</el-col>
</el-row>
</div>
<div
class=
"block"
>
<div
class=
"block-title"
>
<div
class=
"bg-text"
>
APPLICATION
</div>
行业应用
</div>
<div
class=
"block-sub-title"
>
集成机器学习、深度学习、自然语言处理、图像识别等先进技术,为金融、医疗、教育、零售、制造业等多个领域提供智能化解决方案。
</div>
<el-row
:gutter=
"24"
>
<el-col
v-for=
"item in assemblyData"
:key=
"item.id"
:span=
"8"
>
<div
class=
"application-item application-item-1"
@
click=
"openAssembly(item)"
:style=
"
{'background-image': `url(${baseUrl + item.homeImage})`}">
<div
class=
"title"
>
{{
item
.
title
}}
</div>
<div
class=
"desc"
>
{{
item
.
description
}}
</div>
<div
class=
"link"
>
查看详情
<el-icon>
<ArrowRight/>
</el-icon>
</div>
</div>
</el-col>
</el-row>
<div
class=
"flex-justify-center"
style=
"margin-top: 28px;margin-bottom: 100px"
>
<!--
<el-button
class=
"view-more-btn"
>
更多行业-->
<!--
<el-icon>
-->
<!--
<ArrowRight/>
-->
<!--
</el-icon>
-->
<!--
</el-button>
-->
</div>
</div>
<div
class=
"block"
style=
"padding-top: 70px;position: relative;"
>
<div
style=
"width: calc(100% - 214px);margin: 0 auto;padding-bottom: 10px;"
>
<div
class=
"block-title"
style=
"margin-bottom: 50px;z-index: 3 !important;"
>
<div
class=
"bg-text"
>
INFORMATION
</div>
活动资讯
</div>
<div
class=
"flex flex-justify-center"
>
<el-row
:gutter=
"24"
style=
"z-index: 2;"
>
<el-col
:span=
"12"
>
<!--
<div
class=
"block-sub-title"
>
活动时间待定,活动内容待定,活动礼品自带
</div>
-->
<div
class=
"information"
style=
"margin-right: 182px"
>
<div
class=
"information-item"
@
click=
"$router.push('/information/informationDetail?id='+informationMainData.id)"
>
<div
class=
"flex"
>
<div
class=
"date"
>
<div
class=
"month-day"
>
{{
informationMainData
.
month
}}
/
{{
informationMainData
.
month
}}
</div>
<div
class=
"year"
>
{{
informationMainData
.
year
}}
</div>
</div>
<div
class=
"right"
>
<div
class=
"title"
>
{{
informationMainData
.
title
}}
</div>
<div
class=
"content"
v-html=
"informationMainData.remark"
></div>
</div>
</div>
<img
:src=
"baseUrl + informationMainData.image"
alt=
""
>
</div>
</div>
</el-col>
<el-col
:span=
"12"
>
<div>
<div
v-for=
"item in informationData"
:key=
"item.id"
class=
"information-item flex"
@
click=
"$router.push('/information/informationDetail?id='+item.id)"
>
<div
class=
"partners"
>
<div
class=
"title"
>
生态合作伙伴
</div>
<div
class=
"desc"
>
助力各类“AI+”创新应用,推进企业算力生态建设,促进科创产业集聚发展
</div>
<el-button
class=
"view-more-btn"
@
click=
"$router.push('/partnership/partnershipList')"
>
查看更多
<el-icon>
<ArrowRight/>
</el-icon>
</el-button>
</div>
<div
class=
"block"
>
<div
class=
"block-title"
style=
"margin-bottom: 50px"
>
<div
class=
"bg-text"
>
INFORMATION
</div>
活动资讯
</div>
<div
class=
"flex flex-justify-center"
>
<el-row
:gutter=
"24"
>
<el-col
:span=
"12"
>
<!--
<div
class=
"block-sub-title"
>
活动时间待定,活动内容待定,活动礼品自带
</div>
-->
<div
class=
"information"
style=
"margin-right: 182px"
>
<div
class=
"information-item"
@
click=
"$router.push('/information/informationDetail?id='+informationMainData.id)"
>
<div
class=
"flex"
>
<div
class=
"date"
>
<div
class=
"month-day"
>
{{
i
tem
.
month
}}
/
{{
item
.
month
}}
</div>
<div
class=
"year"
>
{{
i
tem
.
year
}}
</div>
<div
class=
"month-day"
>
{{
i
nformationMainData
.
month
}}
/
{{
informationMainData
.
month
}}
</div>
<div
class=
"year"
>
{{
i
nformationMainData
.
year
}}
</div>
</div>
<div
class=
"right"
>
<div
class=
"title"
>
{{
i
tem
.
title
}}
</div>
<div
class=
"content"
v-html=
"i
tem.remark
"
>
<div
class=
"title"
>
{{
i
nformationMainData
.
title
}}
</div>
<div
class=
"content"
v-html=
"i
nformationMainData.description
"
>
</div>
</div>
</div>
<img
:src=
"baseUrl + informationMainData.image"
alt=
""
>
</div>
</el-col>
</el-row>
</div>
<div
class=
"view-more-text"
style=
"padding-top: 40px;"
@
click=
"$router.push('/information/informationList')"
>
更多资讯
</div>
</div>
<img
class=
"block-light"
src=
"@/assets/images/indexImg/glow5.png"
alt=
""
/>
</div>
<div
class=
"content-footer"
>
<div
class=
"content-detail"
>
<img
src=
"@/assets/images/indexImg/content1.png"
alt=
""
/>
<div
class=
"name"
>
服务支持
</div>
<div
class=
"more"
>
了解更多 >
</div>
</div>
<div
class=
"content-detail"
>
<img
src=
"@/assets/images/indexImg/content2.png"
alt=
""
/>
<div
class=
"name"
>
联系我们
</div>
<div
class=
"more"
>
了解更多 >
</div>
</div>
</el-col>
<el-col
:span=
"12"
>
<div>
<div
v-for=
"item in informationData"
:key=
"item.id"
class=
"information-item flex"
@
click=
"$router.push('/information/informationDetail?id='+item.id)"
>
<div
class=
"date"
>
<div
class=
"month-day"
>
{{
item
.
month
}}
/
{{
item
.
month
}}
</div>
<div
class=
"year"
>
{{
item
.
year
}}
</div>
</div>
<div
class=
"right"
>
<div
class=
"title"
>
{{
item
.
title
}}
</div>
<div
class=
"content"
v-html=
"item.description"
>
</div>
</div>
</div>
</div>
</el-col>
</el-row>
</div>
<div
class=
"content-detail"
>
<img
src=
"@/assets/images/indexImg/content3.png"
alt=
""
/>
<div
class=
"name"
>
如何购买
</div>
<div
class=
"more"
>
了解更多 >
</div>
<div
class=
"flex-justify-center"
style=
"margin-top: 40px;margin-bottom: 100px"
>
<el-button
class=
"view-more-btn"
@
click=
"$router.push('/information/informationList')"
>
更多资讯
<el-icon>
<ArrowRight/>
</el-icon>
</el-button>
</div>
</div>
<div
class=
"footer"
>
先进计算科技有限公司 沪ICP备18000749号-2
</div>
<el-dialog
v-model=
"dialogTableVisible"
style=
"width: 80% !important;"
:title=
"dialogTitle"
@
close=
"handleDialogClose"
>
<div>
<iframe
v-show=
"iframeShow"
ref=
"iframe"
:src=
"iframeSrc"
width=
"100%"
height=
"700px"
></iframe>
</div>
</el-dialog>
</div>
</
template
>
<
script
setup
name=
"Index"
>
import
{
banner
,
assemblyList
,
information
ResourceList
,
information
List
}
from
'@/api/home.js'
import
{
banner
,
assemblyList
,
informationList
}
from
'@/api/home.js'
import
{
ref
}
from
'vue'
const
baseUrl
=
import
.
meta
.
env
.
VITE_APP_BASE_API
// const baseImgUrl = window.location.origin
const
assemblyData
=
ref
([])
const
bannerImgList
=
ref
([])
const
list
=
ref
([
{
id
:
1
,
title
:
'计算资源'
,
titleEH
:
'/RESOURCE'
,
present
:
'强劲 · 稳定 · 安全的云计算能力 · 助力企业上云'
,
assemblyData
:
[
// {
// title: '天河系列超级计算机',
// description: '拥有天河一号、天河新一代超算,综合算力200PF(64位精度),人工智能算力800PF,存储超20PB。可提供科学研究、工程仿真、并行算法及大规模并行应用软件研发。',
// router: '/computingResource/resourceList?type=0'
// },
// {
// title: '天河 天马智算集群',
// description: '提供各类通用、国产CPU、GPU裸金属服务器,资源独占、性能无损、弹性扩容、安全可靠',
// router: '/computingResource/resourceList?type=1'
// },
// {
// title: '云计算服务',
// description: '提供安全稳定及灵活扩展的云计算服务,实现按需扩展CPU、内存、存储和网络资源,有效降低 IT 成本,提升运维效率,助力核心业务创新。',
// router: '/computingResource/resourceList?type=2'
// }
]
},
{
id
:
2
,
title
:
'行业应用'
,
titleEH
:
'/APPLICATION'
,
present
:
'集成机器学习、深度学习、自然语言处理、图像识别等先进技术,为金融、医疗、教育、零售、制造业等多个领域提供智能化解决方案。'
,
assemblyData
:
[]
},
{
id
:
3
,
title
:
'生态合作伙伴'
,
titleEH
:
'/PARTNER'
,
present
:
'助力各类“AI+”创新应用,推进企业算力生态建设,促进科创产业集聚发展'
,
assemblyData
:
[]
}
])
const
dialogTableVisible
=
ref
(
false
)
const
dialogTitle
=
ref
(
''
)
const
iframeSrc
=
ref
(
''
)
const
iframeShow
=
ref
(
false
)
function
getBanner
()
{
banner
().
then
(
res
=>
{
bannerImgList
.
value
=
res
.
data
.
sort
(
function
(
a
,
b
)
{
return
a
.
orderNum
-
b
.
orderNum
})
bannerImgList
.
value
=
res
.
data
})
}
getBanner
()
function
getAassemblyList
()
{
assemblyList
({
type
:
0
}).
then
(
res
=>
{
const
data
=
res
.
data
.
sort
(
function
(
a
,
b
)
{
return
a
.
orderNum
-
b
.
orderNum
})
assemblyData
.
value
=
data
.
length
>
3
?
data
.
slice
(
0
,
3
)
:
data
list
.
value
[
1
].
assemblyData
=
data
.
length
>
3
?
data
.
slice
(
0
,
3
)
:
data
})
}
// 计算自选
function
getResource
()
{
informationResourceList
().
then
(
res
=>
{
list
.
value
[
0
].
assemblyData
=
res
.
data
.
length
>
3
?
res
.
data
.
slice
(
0
,
3
)
:
res
.
data
console
.
log
(
list
.
value
[
0
].
assemblyData
,
'list.value[0].assemblyData'
)
assemblyList
({
type
:
0
}).
then
(
res
=>
{
assemblyData
.
value
=
res
.
data
.
length
>
3
?
res
.
data
.
slice
(
0
,
3
)
:
res
.
data
})
}
getAassemblyList
()
getResource
()
const
informationData
=
ref
([])
const
informationMainData
=
ref
({})
...
...
@@ -240,176 +206,13 @@ function getInformation() {
getInformation
()
function
openAssembly
(
data
)
{
dialogTitle
.
value
=
data
.
title
iframeSrc
.
value
=
data
.
url
dialogTableVisible
.
value
=
true
iframeShow
.
value
=
true
}
function
cancel
()
{
dialogTableVisible
.
value
=
false
iframeShow
.
value
=
false
}
// 关闭弹窗
function
handleDialogClose
()
{
iframeSrc
.
value
=
null
}
function
handleCarousel
(
url
)
{
if
(
url
)
{
window
.
open
(
url
)
}
window
.
open
(
data
.
url
)
}
</
script
>
<
style
scoped
lang=
"scss"
>
.new-model
{
background-image
:
url("@/assets/images/indexImg/bg-1.png")
;
background-size
:
cover
;
/* 背景图片覆盖整个元素区域 */
background-position
:
center
;
/* 背景图片居中 */
background-repeat
:
no-repeat
;
/* 背景图片不重复 */
background-color
:
#b6b8bf
;
padding-bottom
:
90px
;
margin-bottom
:
0
;
}
.view-more-text
{
position
:
sticky
;
text-align
:
center
;
font-size
:
20px
;
color
:
#000000
;
cursor
:
pointer
;
padding-bottom
:
60px
;
z-index
:
2
!important
;
}
.new-block
{
margin
:
0
auto
;
display
:
flex
;
justify-content
:
center
;
flex-direction
:
column
;
align-items
:
center
;
padding-top
:
74px
;
padding-bottom
:
41px
;
.new-block-details
{
z-index
:
2
!important
;
padding-top
:
32px
;
}
.resourceLogo
{
width
:
123px
;
height
:
123px
;
margin-bottom
:
32px
;
z-index
:
2
!important
;
}
.details-introduce
{
display
:
flex
;
justify-content
:
center
;
text-align
:
center
;
span
:
first-child
{
font-family
:
Microsoft
YaHei
;
font-weight
:
bolder
;
font-size
:
35px
;
color
:
#000000
;
}
span
:last-child
{
font-family
:
YouSheBiaoTiHei
;
font-weight
:
400
;
font-size
:
42px
;
color
:
#5E6988
;
}
}
.present
{
font-family
:
Microsoft
YaHei
;
font-weight
:
bolder
;
font-size
:
17px
;
color
:
#010101
;
line-height
:
27px
;
text-align
:
center
;
}
}
.model-box
{
position
:
relative
;
.light
{
position
:
absolute
;
z-index
:
1
;
width
:
100%
;
left
:
0
;
top
:
12%
;
}
}
.block-light
{
position
:
absolute
;
z-index
:
1
!important
;
width
:
1700px
;
height
:
900px
;
left
:
10px
;
top
:
40px
;
}
.particulars
{
width
:
calc
(
100%
-
240px
);
margin
:
0
auto
;
cursor
:
pointer
;
}
.resource-box
{
padding
:
44px
66px
0
58px
;
height
:
248px
;
.title
{
font-family
:
Microsoft
YaHei
;
font-weight
:
400
;
font-size
:
27px
;
color
:
#F0A227
;
padding-bottom
:
22px
;
z-index
:
2
!important
;
}
.introduce
{
font-family
:
Microsoft
YaHei
;
font-weight
:
400
;
font-size
:
14px
;
color
:
#FAFBFD
;
line-height
:
27px
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
display
:
-webkit-box
;
-webkit-line-clamp
:
3
;
-webkit-box-orient
:
vertical
;
}
}
.resource-col
{
z-index
:
2
!important
;
}
//
.resource-col
:first-of-type
.resource-box
{
//
background
:
url("@/assets/images/indexImg/resource1.png")
no-repeat
center
center
/
100%
;
//
}
//
//
.resource-col
:nth-of-type
(
2
)
.resource-box
{
//
background
:
url("@/assets/images/indexImg/resource2.png")
no-repeat
center
center
/
100%
;
//
}
//
//
.resource-col
:nth-of-type
(
3
)
.resource-box
{
//
background
:
url("@/assets/images/indexImg/resource3.png")
no-repeat
center
center
/
100%
;
//
}
.app-container
{
padding
:
0
;
flex-grow
:
1
;
flex-shrink
:
1
;
position
:
relative
;
}
.home
{
...
...
@@ -418,8 +221,7 @@ function handleCarousel(url) {
.banner
{
position
:
relative
;
cursor
:
pointer
;
//
margin-bottom
:
64px
;
margin-bottom
:
64px
;
img
{
display
:
block
;
...
...
@@ -431,13 +233,8 @@ function handleCarousel(url) {
.block
{
//
width
:
1280px
;
background-image
:
url("@/assets/images/indexImg/bg-1.png")
;
background-size
:
cover
;
/* 背景图片覆盖整个元素区域 */
background-position
:
center
;
/* 背景图片居中 */
background-repeat
:
no-repeat
;
/* 背景图片不重复 */
width
:
calc
(
100%
-
214px
);
margin
:
0
auto
;
z-index
:
4
!important
;
padding-bottom
:
60px
;
}
.block-title
{
...
...
@@ -447,7 +244,6 @@ function handleCarousel(url) {
line-height
:
60px
;
text-align
:
center
;
position
:
relative
;
z-index
:
3
!important
;
.bg-text
{
position
:
absolute
;
...
...
@@ -474,7 +270,6 @@ function handleCarousel(url) {
border-radius
:
2px
;
height
:
40px
;
color
:
#303233
;
z-index
:
2
!important
;
}
.resource-item
{
...
...
@@ -585,7 +380,7 @@ function handleCarousel(url) {
flex-direction
:
column
;
align-items
:
center
;
justify-content
:
center
;
background
:
url("@/assets/images/
indexImg/bg-1.png")
no-repeat
;
background
:
url("@/assets/images/
partners.png")
no-repeat
center
center
/
cover
;
.title
{
font-weight
:
bold
;
...
...
@@ -603,31 +398,6 @@ function handleCarousel(url) {
}
}
//
.partners
{
//
height
:
434px
;
//
margin-bottom
:
65px
;
//
display
:
flex
;
//
flex-direction
:
column
;
//
align-items
:
center
;
//
justify-content
:
center
;
//
background
:
url("@/assets/images/partners.png")
no-repeat
center
center
/
cover
;
//
//
.title
{
//
font-weight
:
bold
;
//
font-size
:
34px
;
//
color
:
#303233
;
//
margin-bottom
:
20px
;
//
}
//
//
.desc
{
//
font-weight
:
400
;
//
font-size
:
14px
;
//
color
:
#7e8080
;
//
margin-bottom
:
40px
;
//
line-height
:
1.8
;
//
}
//
}
//
.information-right
{
//
//
flex
:
1
;
//
padding-right
:
210px
;
...
...
@@ -641,10 +411,6 @@ function handleCarousel(url) {
.information-item
{
width
:
570px
;
.content
{
font-size
:
16px
!important
;
}
&:hover
{
cursor
:
pointer
;
...
...
@@ -729,166 +495,5 @@ function handleCarousel(url) {
font-size
:
14px
;
background-color
:
#303233
;
}
.banner-text
{
width
:
913px
;
position
:
absolute
;
top
:
50%
;
left
:
50%
;
display
:
flex
;
transform
:
translate
(
-50%
,
-50%
);
}
.banner-text
.banner-left
div
:first-child
{
font-family
:
Microsoft
YaHei
;
font-weight
:
300
;
font-size
:
75px
;
color
:
#F8F9FD
;
//
line-height
:
56px
;
text-indent
:
20px
;
//
padding-bottom
:
16px
;
span
{
//
font-family
:
DIN
;
font-weight
:
bolder
;
}
}
.banner-text
.banner-left
div
:last-child
{
font-family
:
Microsoft
YaHei
;
font-weight
:
bold
;
font-size
:
20px
;
color
:
#ECAA1C
;
line-height
:
27px
;
text-align
:
right
;
}
.banner-right
{
display
:
flex
;
flex-direction
:
column
;
justify-content
:
flex-end
;
font-family
:
Microsoft
YaHei
;
color
:
#ECAA1C
;
padding-left
:
34px
;
}
.text-right
{
display
:
flex
;
flex-direction
:
row
;
align-items
:
center
;
font-family
:
Microsoft
YaHei
;
font-weight
:
bold
;
font-size
:
15px
;
color
:
#ECAA1C
;
//
line-height
:
20px
;
//
padding-bottom
:
8px
;
.text-right-del
{
display
:
flex
;
flex-direction
:
column
;
justify-content
:
flex-end
;
align-items
:
flex-start
;
}
.exclamation-point
{
font-family
:
Microsoft
YaHei
;
font-weight
:
bold
;
font-size
:
42px
;
font-style
:
italic
;
padding-left
:
9px
;
}
}
.text-bottom
{
font-family
:
Copperplate
Gothic
Light
;
font-weight
:
400
;
font-size
:
24px
;
color
:
#ECAA1C
;
span
{
font-weight
:
bolder
;
}
}
.content-footer
{
width
:
100%
;
height
:
218px
;
background
:
#fafafa
;
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
padding
:
0
190px
;
.content-detail
{
display
:
flex
;
flex-direction
:
column
;
align-content
:
center
;
align-items
:
center
;
width
:
100%
;
max-width
:
1520px
;
cursor
:
pointer
;
.name
{
line-height
:
32px
;
font-size
:
24px
;
color
:
#333333
;
text-align
:
center
;
}
.more
{
line-height
:
22px
;
font-size
:
16px
;
color
:
#333333
;
margin-top
:
16px
;
text-align
:
center
;
}
}
img
{
width
:
48px
;
height
:
48px
;
margin-bottom
:
20px
;
}
}
.iframe-container
{
position
:
absolute
;
top
:
10%
;
left
:
6%
;
}
.iframe-container
iframe
{
position
:
absolute
;
top
:
0
;
left
:
0
;
}
:deep
(
.el-dialog__body
)
{
padding-top
:
unset
!important
;
}
.el-tabs
{
--el-border-color-light
:
#2E77E3
;
--el-tabs-header-height
:
48px
;
:deep(.el-tabs__content)
{
overflow
:
visible
}
:deep
(
.el-tabs__active-bar
)
{
display
:
none
;
}
:deep
(
.el-tabs__item
)
{
--el-font-size-base
:
16px
;
padding-left
:
24px
!important
;
padding-right
:
24px
!important
;
&.is-active
{
color
:
#ffffff
;
background-color
:
#2E77E3
;
}
}
}
</
style
>
src/views/login.vue
View file @
f8389862
...
...
@@ -2,9 +2,9 @@
<div
class=
"login"
>
<el-form
ref=
"loginRef"
:model=
"loginForm"
:rules=
"loginRules"
class=
"login-form"
>
<h3
class=
"title"
>
先进计算普惠算力公共服务平台
</h3>
<el-form-item
prop=
"
usernam
e"
>
<el-form-item
prop=
"
mobil
e"
>
<el-input
v-model=
"loginForm.
usernam
e"
v-model=
"loginForm.
mobil
e"
type=
"text"
size=
"large"
auto-complete=
"off"
...
...
@@ -27,22 +27,6 @@
</
template
>
</el-input>
</el-form-item>
<el-form-item
prop=
"code"
v-if=
"captchaEnabled"
>
<el-input
v-model=
"loginForm.code"
size=
"large"
auto-complete=
"off"
placeholder=
"验证码"
style=
"width: 64%"
@
keyup
.
enter=
"handleLogin"
>
<
template
#
prefix
>
<svg-icon
icon-class=
"validCode"
class=
"el-input__icon input-icon"
/>
</
template
>
</el-input>
<div
class=
"login-code"
>
<img
:src=
"codeUrl"
@
click=
"getCode"
class=
"login-code-img"
/>
</div>
</el-form-item>
<div
class=
"flex-align-center flex-space-between mb20"
>
<el-checkbox
v-model=
"loginForm.rememberMe"
>
记住密码
</el-checkbox>
...
...
@@ -72,7 +56,6 @@
</template>
<
script
setup
>
import
{
getCodeImg
}
from
'@/api/login'
import
Cookies
from
'js-cookie'
import
{
encrypt
,
decrypt
}
from
'@/utils/jsencrypt'
import
useUserStore
from
'@/store/modules/user'
...
...
@@ -84,7 +67,7 @@ const router = useRouter()
const
{
proxy
}
=
getCurrentInstance
()
const
loginForm
=
ref
({
usernam
e
:
''
,
mobil
e
:
''
,
password
:
''
,
rememberMe
:
false
,
code
:
''
,
...
...
@@ -92,7 +75,7 @@ const loginForm = ref({
})
const
loginRules
=
{
username
:
[{
required
:
true
,
trigger
:
'blur'
,
message
:
'请输入您的账
号'
}],
mobile
:
[{
required
:
true
,
trigger
:
'blur'
,
message
:
'请输入您的手机
号'
}],
password
:
[{
required
:
true
,
trigger
:
'blur'
,
message
:
'请输入您的密码'
}],
code
:
[{
required
:
true
,
trigger
:
'change'
,
message
:
'请输入验证码'
}]
}
...
...
@@ -115,12 +98,12 @@ function handleLogin () {
loading
.
value
=
true
// 勾选了需要记住密码设置在 cookie 中设置记住用户名和密码
if
(
loginForm
.
value
.
rememberMe
)
{
Cookies
.
set
(
'
username'
,
loginForm
.
value
.
usernam
e
,
{
expires
:
30
})
Cookies
.
set
(
'
mobile'
,
loginForm
.
value
.
mobil
e
,
{
expires
:
30
})
Cookies
.
set
(
'password'
,
encrypt
(
loginForm
.
value
.
password
),
{
expires
:
30
})
Cookies
.
set
(
'rememberMe'
,
loginForm
.
value
.
rememberMe
,
{
expires
:
30
})
}
else
{
// 否则移除
Cookies
.
remove
(
'
usernam
e'
)
Cookies
.
remove
(
'
mobil
e'
)
Cookies
.
remove
(
'password'
)
Cookies
.
remove
(
'rememberMe'
)
}
...
...
@@ -136,37 +119,23 @@ function handleLogin () {
router
.
push
({
path
:
redirect
.
value
||
'/'
,
query
:
otherQueryParams
})
}).
catch
(()
=>
{
loading
.
value
=
false
// 重新获取验证码
if
(
captchaEnabled
.
value
)
{
getCode
()
}
})
}
})
}
function
getCode
()
{
getCodeImg
().
then
(
res
=>
{
captchaEnabled
.
value
=
res
.
captchaEnabled
===
undefined
?
true
:
res
.
captchaEnabled
if
(
captchaEnabled
.
value
)
{
codeUrl
.
value
=
'data:image/gif;base64,'
+
res
.
img
loginForm
.
value
.
uuid
=
res
.
uuid
}
})
}
function
getCookie
()
{
const
username
=
Cookies
.
get
(
'usernam
e'
)
const
mobile
=
Cookies
.
get
(
'mobil
e'
)
const
password
=
Cookies
.
get
(
'password'
)
const
rememberMe
=
Cookies
.
get
(
'rememberMe'
)
loginForm
.
value
=
{
username
:
username
===
undefined
?
loginForm
.
value
.
username
:
usernam
e
,
mobile
:
mobile
===
undefined
?
loginForm
.
value
.
mobile
:
mobil
e
,
password
:
password
===
undefined
?
loginForm
.
value
.
password
:
decrypt
(
password
),
rememberMe
:
rememberMe
===
undefined
?
false
:
Boolean
(
rememberMe
)
}
}
getCode
()
getCookie
()
</
script
>
...
...
src/views/register.vue
View file @
f8389862
...
...
@@ -40,22 +40,6 @@
</
template
>
</el-input>
</el-form-item>
<el-form-item
prop=
"code"
v-if=
"captchaEnabled"
>
<el-input
size=
"large"
v-model=
"registerForm.code"
auto-complete=
"off"
placeholder=
"验证码"
style=
"width: 64%"
@
keyup
.
enter=
"handleRegister"
>
<
template
#
prefix
>
<svg-icon
icon-class=
"validCode"
class=
"el-input__icon input-icon"
/>
</
template
>
</el-input>
<div
class=
"register-code"
>
<img
:src=
"codeUrl"
@
click=
"getCode"
class=
"register-code-img"
/>
</div>
</el-form-item>
<div
class=
"flex-justify-end mb20"
>
<router-link
class=
"link-type"
:to=
"'/login'"
>
使用已有账户登录
</router-link>
</div>
...
...
@@ -82,7 +66,6 @@
<
script
setup
>
import
{
ElMessageBox
}
from
'element-plus'
import
{
getCodeImg
,
register
}
from
'@/api/login'
const
router
=
useRouter
()
const
{
proxy
}
=
getCurrentInstance
()
...
...
@@ -122,7 +105,6 @@ const registerRules = {
const
codeUrl
=
ref
(
''
)
const
loading
=
ref
(
false
)
const
captchaEnabled
=
ref
(
true
)
function
handleRegister
()
{
proxy
.
$refs
.
registerRef
.
validate
(
valid
=>
{
...
...
@@ -139,25 +121,11 @@ function handleRegister () {
})
}).
catch
(()
=>
{
loading
.
value
=
false
if
(
captchaEnabled
)
{
getCode
()
}
})
}
})
}
function
getCode
()
{
getCodeImg
().
then
(
res
=>
{
captchaEnabled
.
value
=
res
.
captchaEnabled
===
undefined
?
true
:
res
.
captchaEnabled
if
(
captchaEnabled
.
value
)
{
codeUrl
.
value
=
'data:image/gif;base64,'
+
res
.
img
registerForm
.
value
.
uuid
=
res
.
uuid
}
})
}
getCode
()
</
script
>
<
style
lang=
'scss'
scoped
>
...
...
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