Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
risk-monitor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蔡建
risk-monitor
Commits
9c8a5f77
提交
9c8a5f77
authored
1月 08, 2026
作者:
huhuiqing
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
创新主体合作情况与其他情况接口对接,合作情况页面v2.0开发
上级
e0cf9513
隐藏空白字符变更
内嵌
并排
正在显示
16 个修改的文件
包含
1499 行增加
和
460 行删除
+1499
-460
overview.js
src/api/innovationSubject/overview.js
+63
-0
arrow.png
...stitutions/cooperationStatus copy/assets/images/arrow.png
+0
-0
icon-ai.png
...itutions/cooperationStatus copy/assets/images/icon-ai.png
+0
-0
pic1.png
...nstitutions/cooperationStatus copy/assets/images/pic1.png
+0
-0
pic2.png
...nstitutions/cooperationStatus copy/assets/images/pic2.png
+0
-0
pic3.png
...nstitutions/cooperationStatus copy/assets/images/pic3.png
+0
-0
pic4.png
...nstitutions/cooperationStatus copy/assets/images/pic4.png
+0
-0
pic5.png
...nstitutions/cooperationStatus copy/assets/images/pic5.png
+0
-0
pic6.png
...nstitutions/cooperationStatus copy/assets/images/pic6.png
+0
-0
pic7.png
...nstitutions/cooperationStatus copy/assets/images/pic7.png
+0
-0
pic8.png
...nstitutions/cooperationStatus copy/assets/images/pic8.png
+0
-0
pic9.png
...nstitutions/cooperationStatus copy/assets/images/pic9.png
+0
-0
Timeline.vue
...ect/innovativeInstitutions/cooperationStatus/Timeline.vue
+260
-0
charts.js
...ubject/innovativeInstitutions/cooperationStatus/charts.js
+675
-0
index.vue
...ubject/innovativeInstitutions/cooperationStatus/index.vue
+287
-316
index.vue
...ationSubject/innovativeInstitutions/otherStatus/index.vue
+214
-144
没有找到文件。
src/api/innovationSubject/overview.js
浏览文件 @
9c8a5f77
...
@@ -193,3 +193,65 @@ export function getFundToList(params) {
...
@@ -193,3 +193,65 @@ export function getFundToList(params) {
})
})
}
}
//合作情况:与中国合作数量变化
export
function
getCooperateNumWithChina
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/innovateSubject/cooperateNumWithChina/
${
params
.
id
}
`
,
params
})
}
// 合作情况:与中国合作类型变化
export
function
getCooperateTypeWithChina
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/innovateSubject/cooperateTypeWithChina/
${
params
.
year
}
/
${
params
.
id
}
`
,
params
})
}
// 合作情况:与中国合作领域变化
export
function
getCooperateAreaWithChina
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/innovateSubject/cooperateAreaWithChina/
${
params
.
id
}
`
,
params
})
}
//合作情况:与中国合作经费变化
export
function
getCooperateFundWithChina
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/innovateSubject/cooperateFundWithChina/
${
params
.
id
}
`
,
params
})
}
//合作情况:与中国合作事例
export
function
getCooperateExampleWithChina
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/innovateSubject/cooperateExampleWithChina/
${
params
.
id
}
`
,
params
})
}
//创新主体其他情况:重点实验室
export
function
getLabList
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/innovateSubject/labList/
${
params
.
id
}
`
,
})
}
//创新主体其他情况:政策文件
export
function
getPolicyList
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/innovateSubject/policyList/
${
params
.
id
}
`
,
params
})
}
\ No newline at end of file
src/views/innovationSubject/innovativeInstitutions/cooperationStatus copy/assets/images/arrow.png
0 → 100644
浏览文件 @
9c8a5f77
776 Bytes
src/views/innovationSubject/innovativeInstitutions/cooperationStatus copy/assets/images/icon-ai.png
0 → 100644
浏览文件 @
9c8a5f77
974 Bytes
src/views/innovationSubject/innovativeInstitutions/cooperationStatus copy/assets/images/pic1.png
0 → 100644
浏览文件 @
9c8a5f77
45.3 KB
src/views/innovationSubject/innovativeInstitutions/cooperationStatus copy/assets/images/pic2.png
0 → 100644
浏览文件 @
9c8a5f77
35.6 KB
src/views/innovationSubject/innovativeInstitutions/cooperationStatus copy/assets/images/pic3.png
0 → 100644
浏览文件 @
9c8a5f77
48.8 KB
src/views/innovationSubject/innovativeInstitutions/cooperationStatus copy/assets/images/pic4.png
0 → 100644
浏览文件 @
9c8a5f77
42.9 KB
src/views/innovationSubject/innovativeInstitutions/cooperationStatus copy/assets/images/pic5.png
0 → 100644
浏览文件 @
9c8a5f77
43.5 KB
src/views/innovationSubject/innovativeInstitutions/cooperationStatus copy/assets/images/pic6.png
0 → 100644
浏览文件 @
9c8a5f77
44.7 KB
src/views/innovationSubject/innovativeInstitutions/cooperationStatus copy/assets/images/pic7.png
0 → 100644
浏览文件 @
9c8a5f77
36.5 KB
src/views/innovationSubject/innovativeInstitutions/cooperationStatus copy/assets/images/pic8.png
0 → 100644
浏览文件 @
9c8a5f77
38.9 KB
src/views/innovationSubject/innovativeInstitutions/cooperationStatus copy/assets/images/pic9.png
0 → 100644
浏览文件 @
9c8a5f77
40.0 KB
src/views/innovationSubject/innovativeInstitutions/cooperationStatus/Timeline.vue
0 → 100644
浏览文件 @
9c8a5f77
<
template
>
<div
class=
"timeline-wrapper"
>
<button
class=
"arrow left"
:disabled=
"index
<
=
0
"
@
click=
"index--"
>
{{
'<'
}}
</button>
<div
class=
"timeline-box"
>
<div
class=
"line"
></div>
<div
v-for=
"(item, i) in showList"
:key=
"item[idKey]"
class=
"node"
:style=
"leftOffset(i)"
>
<div
class=
"node"
:style=
"leftOffset(i)"
>
<div
class=
"time"
>
{{
item
.
cooperateDate
}}
</div>
<!-- 圆环 -->
<div
class=
"dot"
:class=
"linePos(i, flip)"
></div>
<!-- 卡片:放到线右侧 -->
<div
class=
"card"
:class=
"[cardPos(i, flip), 'right-side']"
@
click=
"$emit('click-card', item)"
>
<div
class=
"tag"
>
{{
item
.
typeName
}}
</div>
<div
class=
"title"
>
{{
'合作主体:'
+
item
.
subjectlist
.
join
(
','
)
}}
<img
class=
"item-header-icon"
src=
"@/assets/images/icon/copy.png"
style=
"cursor: pointer;"
/>
</div>
<div
class=
"content"
>
{{
item
.
cooperateName
}}
</div>
</div>
</div>
</div>
</div>
<button
class=
"arrow right"
:disabled=
"index >= total - 5"
@
click=
"index++"
>
{{
'>'
}}
</button>
</div>
</
template
>
<
script
>
export
default
{
name
:
'TimeLine'
,
props
:
{
data
:
{
// 父组件传入的数组
type
:
Array
,
required
:
true
},
textKey
:
{
// 要显示的文本字段
type
:
String
,
default
:
'text'
},
idKey
:
{
// 唯一标识字段
type
:
String
,
default
:
'id'
}
},
data
()
{
return
{
index
:
0
};
},
computed
:
{
total
()
{
return
this
.
data
.
length
;
},
showList
()
{
return
this
.
data
.
slice
(
this
.
index
,
this
.
index
+
5
);
},
flip
()
{
return
this
.
index
%
2
===
1
;
}
},
methods
:
{
leftOffset
(
i
)
{
return
{
left
:
`
${(
i
*
100
)
/
5
}
%`
};
},
/* 上下层翻转(保留上次逻辑) */
cardPos
(
i
,
flip
=
false
)
{
// return (i % 2) ^ flip ? 'down' : 'up';
return
'down'
;
},
/* 线延伸方向 = 卡片出现方向 */
linePos
(
i
,
flip
=
false
)
{
return
this
.
cardPos
(
i
,
flip
);
// up / down
}
}
};
</
script
>
<
style
scoped
>
/* 样式与之前完全一致,不再重复 */
.timeline-wrapper
{
display
:
flex
;
align-items
:
center
;
width
:
100%
;
position
:
relative
;
padding
:
0
40px
;
}
.arrow
{
position
:
absolute
;
top
:
45px
;
/* 左右切换按钮 */
width
:
24px
;
height
:
48px
;
font-size
:
24px
;
border-color
:
#E7F3FF
;
border
:
0
;
background
:
#E7F3FF
;
cursor
:
pointer
;
z-index
:
10
;
color
:
#3E84D1
;
}
.arrow
:disabled
{
color
:
#c0c4cc
;
cursor
:
not-allowed
;
}
.left
{
left
:
0
;
border-radius
:
0px
4px
4px
0px
;
}
.right
{
right
:
0
;
border-radius
:
4px
0px
0px
4px
;
}
.timeline-box
{
flex
:
1
;
height
:
100%
;
position
:
relative
;
}
.line
{
position
:
absolute
;
left
:
0
;
right
:
0
;
top
:
50%
;
height
:
6px
;
background-image
:
url("@/assets/images/bg/timeLine-bg.jpg")
;
transform
:
translateY
(
-50%
);
background-size
:
auto
100%
;
}
.node
{
position
:
absolute
;
top
:
50%
;
transform
:
translate
(
-50%
,
-50%
);
z-index
:
2
;
}
/* ===== 圆环基础 ===== */
.dot
{
top
:
-30px
;
width
:
14px
;
height
:
14px
;
border-radius
:
50%
;
border
:
3px
solid
#409eff
;
background
:
#fff
;
position
:
relative
;
margin
:
0
auto
;
z-index
:
2
;
}
/* ===== 延伸线 ===== */
.dot
::after
{
content
:
''
;
position
:
absolute
;
left
:
50%
;
transform
:
translateX
(
-1px
);
/* 居中细线 */
width
:
1px
;
background
:
#409eff
;
}
/* 向上节点:线往下伸 */
.dot.up
::after
{
bottom
:
100%
;
height
:
165px
;
/* 圆环底部 → 卡片顶 */
}
/* 向下节点:线往上伸 */
.dot.down
::after
{
top
:
100%
;
height
:
165px
;
}
.card
{
position
:
absolute
;
padding
:
8px
12px
;
text-align
:
left
;
cursor
:
pointer
;
font-size
:
14px
;
/* 容器 299 */
width
:
273px
;
height
:
210px
;
border-radius
:
4px
;
/* 业务系统/模块阴影 */
box-shadow
:
0px
0px
20px
0px
rgba
(
25
,
69
,
130
,
0.1
);
background
:
var
(
--
主色
/
白色主色
,
rgba
(
255
,
255
,
255
,
1
));
}
.time
{
width
:
125px
;
color
:
rgba
(
5
,
95
,
194
,
1
);
font-family
:
Microsoft
YaHei
;
font-size
:
20px
;
font-weight
:
700
;
line-height
:
26px
;
letter-spacing
:
0px
;
text-align
:
justify
;
margin-bottom
:
35px
;
margin-left
:
125px
;
}
.title
{
color
:
rgba
(
59
,
65
,
75
,
1
);
height
:
85px
;
font-family
:
Microsoft
YaHei
;
font-style
:
Regular
;
font-size
:
18px
;
font-weight
:
400
;
line-height
:
24px
;
letter-spacing
:
0px
;
text-align
:
left
;
}
.content
{
color
:
rgba
(
59
,
65
,
75
,
1
);
font-family
:
Microsoft
YaHei
;
font-style
:
Bold
;
font-size
:
18px
;
font-weight
:
700
;
line-height
:
24px
;
letter-spacing
:
0px
;
text-align
:
left
;
}
.card.up
{
bottom
:
20px
;
}
.card.down
{
top
:
55px
;
left
:
115px
;
}
</
style
>
\ No newline at end of file
src/views/innovationSubject/innovativeInstitutions/cooperationStatus/charts.js
0 → 100644
浏览文件 @
9c8a5f77
import
*
as
echarts
from
"echarts"
;
// 计算总和
function
getTotal
(
data
)
{
return
data
.
reduce
((
sum
,
item
)
=>
sum
+
item
.
value
,
0
);
};
export
const
pieOption
=
(
data
)
=>
{
console
.
log
(
data
,
'datadatadata'
)
// 颜色数组
const
colors
=
[
'rgba(105, 177, 255, 1)'
,
'rgba(255, 236, 61, 1)'
,
'rgba(135, 232, 222, 1)'
,
'rgba(133, 165, 255, 1)'
,
'rgba(255, 120, 117, 1)'
,
'rgba(179, 127, 235, 1)'
,
'rgba(255, 187, 120, 1)'
,
'rgba(120, 255, 180, 1)'
,
'rgba(255, 150, 150, 1)'
];
const
seriesData
=
data
.
names
.
map
((
name
,
index
)
=>
({
name
,
value
:
data
.
values
[
index
],
itemStyle
:
{
color
:
colors
[
index
%
colors
.
length
]
}
}));
const
option
=
{
tooltip
:
{
trigger
:
'item'
},
legend
:
{
orient
:
'vertical'
,
x
:
'right'
,
y
:
'center'
,
align
:
'left'
,
left
:
'50%'
,
data
:
data
.
names
,
textStyle
:
{
// 图例字体样式
color
:
"rgba(59, 65, 75, 1)"
,
fontSize
:
16
},
// formatter: function (name) {
// var total = data.total;
// var item = data.find(item => item.name === name);
// var percentage = ((item.value / total) * 100).toFixed(2);
// return `${name} ${percentage}%`;
// }
},
series
:
[
{
name
:
'频度'
,
type
:
'pie'
,
center
:
[
'25%'
,
'50%'
],
radius
:
[
'40%'
,
'70%'
],
avoidLabelOverlap
:
false
,
label
:
{
show
:
false
,
position
:
'center'
},
labelLine
:
{
show
:
false
},
data
:
seriesData
}
]
};
return
option
}
var
data1
=
[
{
name
:
"捐赠基金"
,
value
:
27
},
{
name
:
"政府拨款"
,
value
:
22
},
{
name
:
"企业合作"
,
value
:
18
},
{
name
:
"学费收入"
,
value
:
15
},
{
name
:
"其他来源"
,
value
:
12
}
];
export
const
pieOption1
=
(
data
)
=>
{
// 提取部门名称和对应的金额
const
colors
=
[
'rgba(105, 177, 255, 1)'
,
'rgba(255, 236, 61, 1)'
,
'rgba(135, 232, 222, 1)'
,
'rgba(133, 165, 255, 1)'
,
'rgba(255, 120, 117, 1)'
];
// 提取部门名称和对应的金额
const
departmentNames
=
data
.
map
(
item
=>
item
.
cooperateTypeName
);
const
amounts
=
data
.
map
(
item
=>
item
.
amount
);
// 计算总金额
const
getTotal
=
(
data
)
=>
{
return
data
.
reduce
((
total
,
item
)
=>
total
+
item
.
amount
,
0
);
};
// 饼图配置
const
option
=
{
legend
:
{
orient
:
'vertical'
,
x
:
'right'
,
y
:
'center'
,
align
:
'left'
,
left
:
'60%'
,
data
:
departmentNames
,
textStyle
:
{
// 图例字体样式
color
:
"rgba(59, 65, 75, 1)"
,
fontSize
:
16
},
formatter
:
function
(
name
)
{
var
total
=
getTotal
(
data
);
var
item
=
data
.
find
(
item
=>
item
.
cooperateTypeName
===
name
);
var
percentage
=
((
item
.
amount
/
total
)
*
100
).
toFixed
(
2
);
return
`
${
name
}
${
percentage
}
%`
;
}
},
series
:
[
{
name
:
'频度'
,
type
:
'pie'
,
center
:
[
'30%'
,
'50%'
],
radius
:
[
'40%'
,
'70%'
],
avoidLabelOverlap
:
false
,
label
:
{
show
:
false
,
position
:
'center'
},
labelLine
:
{
show
:
false
},
data
:
data
.
map
((
item
,
index
)
=>
({
name
:
item
.
cooperateTypeName
,
value
:
item
.
amount
,
itemStyle
:
{
color
:
colors
[
index
%
colors
.
length
]
}
// 使用颜色列表
}))
}
]
};
return
option
;
}
export
const
raderOption
=
(
data
)
=>
{
// 提取所有可能的 areaName
const
allAreaNames
=
new
Set
();
data
.
forEach
(
subject
=>
{
subject
.
areaVoList
.
forEach
(
area
=>
{
allAreaNames
.
add
(
area
.
areaName
);
});
});
const
indicatorNames
=
Array
.
from
(
allAreaNames
);
// 定义雷达图的指标最大值(可以根据实际数据调整)
const
indicatorMaxValues
=
{};
indicatorNames
.
forEach
(
name
=>
{
indicatorMaxValues
[
name
]
=
5
;
// 假设每个指标的最大值为 5
});
// 生成雷达图的 indicator 配置
const
radarIndicators
=
indicatorNames
.
map
(
name
=>
({
name
,
max
:
indicatorMaxValues
[
name
]
}));
// 为每个 subjectTypeName 生成雷达图数据
const
radarSeriesData
=
data
.
map
(
subject
=>
{
const
values
=
indicatorNames
.
map
(
indicator
=>
{
const
area
=
subject
.
areaVoList
.
find
(
a
=>
a
.
areaName
===
indicator
);
return
area
?
area
.
amount
:
0
;
// 如果存在该指标,取其 amount 值,否则为 0
});
return
{
value
:
values
,
name
:
subject
.
subjectTypeName
,
areaStyle
:
{
color
:
`rgba(
${
Math
.
floor
(
Math
.
random
()
*
256
)}
,
${
Math
.
floor
(
Math
.
random
()
*
256
)}
,
${
Math
.
floor
(
Math
.
random
()
*
256
)}
, 0.2)`
}
};
});
// 雷达图配置
const
option
=
{
title
:
{
text
:
''
},
legend
:
{
icon
:
'circle'
,
orient
:
'vertical'
,
right
:
50
,
top
:
'center'
,
align
:
'left'
,
textStyle
:
{
color
:
"rgba(59, 65, 75, 1)"
,
fontSize
:
"16px"
}
},
radar
:
{
radius
:
'60%'
,
indicator
:
radarIndicators
,
axisName
:
{
formatter
:
'{value}'
,
color
:
'rgba(59, 65, 75, 1)'
,
fontSize
:
16
,
fontWeight
:
700
}
},
series
:
[
{
name
:
'Budget vs spending'
,
type
:
'radar'
,
data
:
radarSeriesData
}
]
};
return
option
;
}
export
const
barOption
=
(
data
)
=>
{
// 提取年份和对应的专利数量
const
years
=
data
.
map
(
item
=>
item
.
year
.
toString
());
const
counts
=
data
.
map
(
item
=>
item
.
countNum
);
// 柱状图配置
const
option
=
{
tooltip
:
{
trigger
:
"axis"
,
axisPointer
:
{
type
:
"shadow"
}
},
grid
:
{
top
:
'3%'
,
right
:
'3%'
,
bottom
:
'1%'
,
left
:
'1%'
,
containLabel
:
true
},
xAxis
:
[{
axisLine
:
{
lineStyle
:
{
width
:
1
,
color
:
"rgba(231, 243, 255, 1)"
}
},
axisTick
:
{
show
:
false
},
type
:
"category"
,
boundaryGap
:
[
100
,
100
],
axisLabel
:
{
color
:
"rgba(95, 101, 108, 1)"
,
// fontSize: 22,
// fontWeight: 400
},
data
:
years
,
// 动态设置 xAxis 数据
}],
yAxis
:
{
type
:
"value"
,
axisLine
:
{
lineStyle
:
{
type
:
"dashed"
}
},
axisLabel
:
{
color
:
"rgba(95, 101, 108, 1)"
,
// fontSize: 22,
// fontWeight: 400
},
splitNumber
:
5
,
splitLine
:
{
lineStyle
:
{
width
:
1
,
type
:
"dashed"
,
color
:
"rgba(231, 243, 255, 1)"
},
}
},
series
:
[
{
name
:
"专利数量"
,
data
:
counts
,
// 动态设置 series 数据
type
:
"bar"
,
barWidth
:
20
,
itemStyle
:
{
color
:
new
echarts
.
graphic
.
LinearGradient
(
0
,
0
,
0
,
1
,
[
{
offset
:
0
,
color
:
"rgba(46, 165, 255, 1)"
},
{
offset
:
1
,
color
:
"rgba(46, 165, 255, 0)"
}
])
},
label
:
{
show
:
false
,
position
:
'top'
,
textStyle
:
{
fontSize
:
'20px'
,
fontWeight
:
400
,
color
:
'rgba(255, 255, 255, 1)'
}
}
}
]
};
return
option
;
}
export
const
lineChart
=
(
data
)
=>
{
// 提取年份和对应的专利数量
const
years
=
data
.
map
(
item
=>
item
.
year
.
toString
());
const
counts
=
data
.
map
(
item
=>
item
.
num
);
// 折线图配置
const
option
=
{
tooltip
:
{
trigger
:
"axis"
,
axisPointer
:
{
type
:
"shadow"
}
},
grid
:
{
left
:
'2%'
,
top
:
'8%'
,
right
:
'2%'
,
bottom
:
'3%'
,
containLabel
:
true
},
xAxis
:
{
type
:
'category'
,
boundaryGap
:
false
,
splitLine
:
{
show
:
false
},
axisLine
:
{
show
:
false
},
data
:
years
,
// 动态设置 xAxis 数据
},
yAxis
:
{
type
:
'value'
,
splitLine
:
{
show
:
true
,
lineStyle
:
{
type
:
"dashed"
,
color
:
"#E7F3FF"
}
},
axisLine
:
{
show
:
false
},
},
color
:
[
'rgba(255, 149, 77, 1)'
],
series
:
[
{
data
:
counts
,
// 动态设置 series 数据
type
:
'line'
,
emphasis
:
{
focus
:
'series'
},
areaStyle
:
{
color
:
new
echarts
.
graphic
.
LinearGradient
(
0
,
0
,
0
,
1
,
[
{
offset
:
0
,
color
:
'rgba(255, 149, 77, 0.5)'
},
// 起始颜色:深色
{
offset
:
1
,
color
:
'rgba(255, 149, 77, 0)'
}
// 结束颜色:浅色且透明度降低
])
},
}
]
};
return
option
;
}
export
const
lineChart1
=
(
data
)
=>
{
// 提取年份和对应的 fundAmount
const
years
=
data
.
map
(
item
=>
item
.
year
.
toString
());
const
fundAmounts
=
data
.
map
(
item
=>
item
.
fund
);
// 折线图配置
const
option
=
{
tooltip
:
{
trigger
:
"axis"
,
axisPointer
:
{
type
:
"shadow"
}
},
grid
:
{
left
:
'2%'
,
top
:
'8%'
,
right
:
'2%'
,
bottom
:
'3%'
,
containLabel
:
true
},
xAxis
:
{
type
:
'category'
,
boundaryGap
:
false
,
splitLine
:
{
show
:
false
},
axisLine
:
{
show
:
false
},
data
:
years
,
// 动态设置 xAxis 数据
},
yAxis
:
{
type
:
'value'
,
splitLine
:
{
show
:
true
,
lineStyle
:
{
type
:
"dashed"
,
color
:
"#E7F3FF"
}
},
axisLine
:
{
show
:
false
},
},
color
:
[
'rgba(33, 129, 57, 1)'
],
series
:
[
{
data
:
fundAmounts
,
// 动态设置 series 数据
type
:
'line'
,
emphasis
:
{
focus
:
'series'
},
areaStyle
:
{
color
:
new
echarts
.
graphic
.
LinearGradient
(
0
,
0
,
0
,
1
,
[
{
offset
:
0
,
color
:
'rgba(33, 129, 57, 0.5)'
},
// 起始颜色:深色
{
offset
:
1
,
color
:
'rgba(33, 129, 57, 0)'
}
// 结束颜色:浅色且透明度降低
])
},
}
]
};
return
option
;
}
export
const
getColumnChart
=
(
rawData
)
=>
{
// 1. 提取所有年份并排序
const
years
=
[...
new
Set
(
rawData
.
map
(
item
=>
item
.
year
))].
sort
((
a
,
b
)
=>
a
-
b
);
const
yearToIndex
=
{};
years
.
forEach
((
year
,
idx
)
=>
{
yearToIndex
[
year
]
=
idx
;
});
// 2. 收集所有 areaName(去重,保持首次出现顺序)
const
areaNames
=
[];
const
seen
=
new
Set
();
rawData
.
forEach
(
item
=>
{
item
.
areaVoList
.
forEach
(
area
=>
{
if
(
!
seen
.
has
(
area
.
areaName
))
{
seen
.
add
(
area
.
areaName
);
areaNames
.
push
(
area
.
areaName
);
}
});
});
// 3. 初始化每个 areaName 的数据数组(长度 = years.length,初始为 0)
const
seriesDataMap
=
{};
areaNames
.
forEach
(
name
=>
{
seriesDataMap
[
name
]
=
Array
(
years
.
length
).
fill
(
0
);
});
// 4. 填充数据
rawData
.
forEach
(
item
=>
{
const
idx
=
yearToIndex
[
item
.
year
];
if
(
idx
===
undefined
)
return
;
item
.
areaVoList
.
forEach
(
area
=>
{
if
(
seriesDataMap
.
hasOwnProperty
(
area
.
areaName
))
{
seriesDataMap
[
area
.
areaName
][
idx
]
=
area
.
amount
;
}
});
});
// 5. 定义颜色池
const
colorPalette
=
[
'rgba(179, 127, 235, 1)'
,
// 集成电路
'rgba(255, 120, 117, 1)'
,
// 生物科技
'rgba(133, 165, 255, 1)'
,
// 量子科技
'rgba(135, 232, 222, 1)'
,
// 能源
'rgba(255, 192, 105, 1)'
,
// 人工智能
'rgba(105, 177, 255, 1)'
// 通信网络
];
// 6. 构建 series
const
series
=
areaNames
.
map
((
name
,
index
)
=>
{
const
isLast
=
index
===
areaNames
.
length
-
1
;
// 最后一个显示标签
return
{
name
,
type
:
'bar'
,
stack
:
'total'
,
barWidth
:
20
,
itemStyle
:
{
borderRadius
:
0
,
color
:
colorPalette
[
index
%
colorPalette
.
length
]
},
data
:
seriesDataMap
[
name
],
// ...(isLast ? {
// label: {
// show: true,
// position: 'top',
// formatter: '{c}',
// fontSize: 16,
// fontWeight: 'bold',
// color: 'rgba(5, 95, 194, 1)'
// }
// } : {})
};
});
// 7. 返回 ECharts 配置
return
{
tooltip
:
{
trigger
:
'axis'
,
axisPointer
:
{
type
:
'shadow'
}
},
legend
:
{
data
:
areaNames
,
top
:
0
,
icon
:
'circle'
,
textStyle
:
{
color
:
'#757B82'
,
fontSize
:
15
}
},
grid
:
{
top
:
'20%'
,
right
:
'3%'
,
bottom
:
'0%'
,
left
:
'3%'
,
containLabel
:
true
},
xAxis
:
{
type
:
'category'
,
data
:
years
,
axisLine
:
{
show
:
false
},
axisTick
:
{
show
:
false
},
axisLabel
:
{
color
:
'#666'
,
fontSize
:
12
}
},
yAxis
:
{
type
:
'value'
,
axisLine
:
{
show
:
false
},
axisTick
:
{
show
:
false
},
axisLabel
:
{
color
:
'#666'
},
splitLine
:
{
show
:
true
,
lineStyle
:
{
type
:
"dashed"
,
color
:
"#E7F3FF"
}
}
},
// graphic: [{
// type: 'text',
// right: 20,
// top: 40,
// style: { text: '单位:项', font: '14px sans-serif', fill: '#666' }
// }],
series
};
};
const
nameList
=
[
"教育学院"
,
"文理学院"
,
"法学院"
,
"商学院"
,
"工程学院"
,
"医学院"
];
const
valueList
=
[
21
,
21
,
25
,
79
,
95
,
109
];
export
const
horizontalBaroption
=
(
data
)
=>
{
// 提取部门名称和对应的金额
const
departmentNames
=
data
.
map
(
item
=>
item
.
departmentName
);
const
amounts
=
data
.
map
(
item
=>
item
.
amount
);
// 水平柱状图配置
const
option
=
{
grid
:
{
top
:
'0'
,
right
:
'3%'
,
bottom
:
'1%'
,
left
:
'1%'
,
containLabel
:
true
},
color
:
[
'#ce4f51'
,
'#1778ff'
],
xAxis
:
{
type
:
'value'
,
splitLine
:
{
show
:
false
},
show
:
false
},
yAxis
:
{
type
:
'category'
,
data
:
departmentNames
,
// 动态设置 yAxis 数据
splitLine
:
{
show
:
false
},
axisTick
:
{
show
:
false
},
axisLine
:
{
show
:
false
},
axisLabel
:
{
show
:
true
}
},
series
:
[{
type
:
'bar'
,
data
:
amounts
.
map
((
item
,
index
)
=>
{
return
{
value
:
item
,
label
:
{
textStyle
:
{
color
:
index
<
3
?
'#1778ff'
:
'#ce4f51'
}
}
};
}),
label
:
{
show
:
true
,
position
:
[
650
,
-
2
]
},
barWidth
:
8
,
itemStyle
:
{
color
:
function
(
params
)
{
if
(
params
.
dataIndex
<
3
)
{
return
new
echarts
.
graphic
.
LinearGradient
(
0
,
0
,
1
,
0
,
[
{
offset
:
0
,
color
:
'rgba(22, 119, 255, 0)'
},
{
offset
:
1
,
color
:
'#1778ff'
}
]);
}
else
{
return
new
echarts
.
graphic
.
LinearGradient
(
0
,
0
,
1
,
0
,
[
{
offset
:
0
,
color
:
'rgba(206, 79, 81, 0)'
},
{
offset
:
1
,
color
:
'#ce4f51'
}
]);
}
},
barBorderRadius
:
4
,
}
}]
};
return
option
;
}
export
const
raderOption1
=
(
data
)
=>
{
// 提取指标名称和对应的值
const
indicatorNames
=
data
.
map
(
item
=>
item
.
areaName
);
const
indicatorValues
=
data
.
map
(
item
=>
item
.
areaValue
);
// 动态生成雷达图的 indicator 配置
const
indicators
=
indicatorNames
.
map
((
name
,
index
)
=>
({
name
,
max
:
Math
.
max
(...
indicatorValues
)
*
1.2
// 设置最大值为所有值的最大值的1.2倍
}));
let
radarData
=
{
color
:
"rgba(215, 27, 56, 0.2)"
,
name
:
''
,
value
:
indicatorValues
}
console
.
log
(
indicators
,
'indicators'
,
radarData
,
'radarDataradarData'
)
// 雷达图配置
const
option
=
{
title
:
{
text
:
''
},
legend
:
{
icon
:
'circle'
,
orient
:
'vertical'
,
right
:
50
,
top
:
'center'
,
align
:
'left'
,
textStyle
:
{
color
:
"rgba(59, 65, 75, 1)"
,
fontSize
:
"16px"
}
},
radar
:
{
radius
:
'60%'
,
indicator
:
indicators
,
axisName
:
{
formatter
:
'{value}'
,
color
:
'rgba(59, 65, 75, 1)'
,
fontSize
:
16
,
fontWeight
:
700
}
},
series
:
[
{
name
:
'Budget vs spending'
,
type
:
'radar'
,
data
:
[
radarData
]
}
]
};
return
option
;
}
src/views/innovationSubject/innovativeInstitutions/cooperationStatus/index.vue
浏览文件 @
9c8a5f77
<!--合作情况 v2.0-->
<
template
>
<
template
>
<div
class=
"detail-wrap"
>
<div
class=
"detail-wrap"
>
<div
class=
"select-box"
>
<div
class=
"row"
>
<el-select
v-model=
"value"
placeholder=
"2025"
style=
"width: 160px"
>
<div
class=
"statisticsItem box"
>
<el-option
<div
class=
"box-header"
>
v-for=
"item in timeList"
<div
class=
"header-left"
></div>
:key=
"item.value"
<div
class=
"title"
>
与中国合作数量变化
</div>
:label=
"item.label"
<div
class=
"header-right"
>
:value=
"item.value"
<div
class=
"icon"
>
/>
<img
src=
"@/assets/icons/box-header-icon2.png"
alt=
""
/>
</el-select>
</div>
<el-select
v-model=
"value"
placeholder=
"全部合作主体"
style=
"width: 160px"
>
<div
class=
"icon"
>
<el-option
<img
src=
"@/assets/icons/box-header-icon3.png"
alt=
""
/>
v-for=
"item in zhutiList"
</div>
:key=
"item.value"
</div>
:label=
"item.label"
</div>
:value=
"item.value"
<div
class=
"statisticsChart"
>
/>
<Echarts
:option=
"lineChart(cooperateNumWithChinaist)"
height=
"100%"
></Echarts>
</el-select>
</div>
<el-select
v-model=
"value"
placeholder=
"全部合作类型"
style=
"width: 160px"
>
<div
class=
"statisticsAI"
>
<el-option
<div
class=
"AIbox"
>
v-for=
"item in typeList"
<img
src=
"./assets/images/icon-ai.png"
/>
:key=
"item.value"
<div
class=
"AItext"
>
哈佛大学近十年专利数量呈现稳定增长趋势,尤其在生物技术和人工智能领域表现突出,2025年达到历史新高。
</div>
:label=
"item.label"
<img
src=
"./assets/images/arrow.png"
/>
:value=
"item.value"
</div>
/>
</div>
</el-select>
</div>
<div
class=
"statisticsItem box"
>
<div
class=
"box-header"
>
<div
class=
"header-left"
></div>
<div
class=
"title"
>
与中国合作类型变化
</div>
<div
class=
"header-right"
>
<div
class=
"icon"
>
<img
src=
"@/assets/icons/box-header-icon2.png"
alt=
""
/>
</div>
<div
class=
"icon"
>
<img
src=
"@/assets/icons/box-header-icon3.png"
alt=
""
/>
</div>
</div>
</div>
<div
class=
"statisticsChart"
>
<Echarts
:option=
"pieOption1(cooperateTypeWithChina)"
height=
"100%"
></Echarts>
</div>
<div
class=
"statisticsAI"
>
<div
class=
"AIbox"
>
<img
src=
"./assets/images/icon-ai.png"
/>
<div
class=
"AItext"
>
哈佛大学近十年论文发表数量持续增长,高质量论文占比显著提升,特别是在医学和工程领域。
</div>
<img
src=
"./assets/images/arrow.png"
/>
</div>
</div>
</div>
</div>
</div>
<div
class=
"cardList"
>
<div
class=
"row"
>
<div
class=
"card"
v-for=
"item in cooperationList"
>
<div
class=
"statisticsItem box"
>
<img
:src=
"item.pic"
alt=
""
class=
"cardpic"
/>
<div
class=
"box-header"
>
<div
class=
"cardtext"
>
<div
class=
"header-left"
></div>
<div
class=
"cardtitle"
>
{{
item
.
title
}}
</div>
<div
class=
"title"
>
与中国合作领域变化
</div>
<div
class=
"cardzhuti"
>
{{
item
.
zhuti
}}
</div>
<div
class=
"header-right"
>
<div
class=
"cardbottom"
>
<div
class=
"icon"
>
<div
class=
"cardtype"
<img
src=
"@/assets/icons/box-header-icon2.png"
alt=
""
/>
:class=
"
{cardtype1: item.type==='论文合作',
</div>
cardtype2: item.type==='专利合作'
<div
class=
"icon"
>
}"
<img
src=
"@/assets/icons/box-header-icon3.png"
alt=
""
/>
>
{{
item
.
type
}}
</div>
</div>
<div
class=
"cardtime"
>
{{
item
.
time
}}
</div>
</div>
</div>
<div
class=
"statisticsChart"
>
<Echarts
:option=
"getColumnChart(cooperateAreaWithChina)"
height=
"100%"
></Echarts>
</div>
<div
class=
"statisticsAI"
>
<div
class=
"AIbox"
>
<img
src=
"./assets/images/icon-ai.png"
/>
<div
class=
"AItext"
>
哈佛大学在生物科技和人工智能领域实力最为突出,同时在量子科技和能源领域也有显著优势,体现了其跨学科研究能力。
</div>
<img
src=
"./assets/images/arrow.png"
/>
</div>
</div>
</div>
<div
class=
"statisticsItem box"
>
<div
class=
"box-header"
>
<div
class=
"header-left"
></div>
<div
class=
"title"
>
与中国合作经费变化
</div>
<div
class=
"header-right"
>
<div
class=
"icon"
>
<img
src=
"@/assets/icons/box-header-icon2.png"
alt=
""
/>
</div>
<div
class=
"icon"
>
<img
src=
"@/assets/icons/box-header-icon3.png"
alt=
""
/>
</div>
</div>
</div>
<div
class=
"statisticsChart"
>
<Echarts
:option=
"lineChart1(cooperateFundWithChina)"
height=
"100%"
></Echarts>
</div>
<div
class=
"statisticsAI"
>
<div
class=
"AIbox"
>
<img
src=
"./assets/images/icon-ai.png"
/>
<div
class=
"AItext"
>
哈佛大学经费近十年保持稳定增长,研究经费占比逐年提高,2023年总经费突破50亿美元。
</div>
<img
src=
"./assets/images/arrow.png"
/>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div
class=
"footer"
>
<div
class=
"row"
>
<div
class=
"info"
>
<div
class=
"statisticsItem box"
style=
"width: 1600px;height: 355px;"
>
{{
`共105篇新闻动态`
}}
<div
class=
"box-header"
>
<div
class=
"header-left"
></div>
<div
class=
"title"
>
与中国合作事例
</div>
<div
class=
"header-right"
>
<div
class=
"icon"
>
<img
src=
"@/assets/icons/box-header-icon2.png"
alt=
""
/>
</div>
<div
class=
"icon"
>
<img
src=
"@/assets/icons/box-header-icon3.png"
alt=
""
/>
</div>
</div>
</div>
</div>
<div
class=
"
page-box
"
>
<div
class=
"
statisticsChart"
style=
"width: 1600px;height: 355px;
"
>
<
el-pagination
background
layout=
"prev, pager, next"
:total=
"153
"
/>
<
Timeline
:data=
"cooperateExampleWithChina"
text-key=
"title"
id-key=
"seq"
style=
" margin-top: 45px;
"
/>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</
template
>
</
template
>
<
script
setup
>
<
script
setup
>
import
{
ref
,
computed
,
onMounted
}
from
"vue"
;
import
{
ref
,
computed
,
onMounted
}
from
"vue"
;
import
Echarts
from
"@/components/Chart/index.vue"
;
import
{
barOption
,
lineChart
,
getColumnChart
,
lineChart1
,
pieOption1
,
horizontalBaroption
}
from
"./charts.js"
;
import
{
getCooperateNumWithChina
,
getCooperateTypeWithChina
,
getCooperateAreaWithChina
,
getCooperateFundWithChina
,
getCooperateExampleWithChina
,
}
from
"@/api/innovationSubject/overview.js"
;
import
Timeline
from
"./Timeline.vue"
;
import
{
useRouter
}
from
"vue-router"
;
const
router
=
useRouter
();
import
pic1
from
"./assets/images/pic1.png"
;
//合作情况:与中国合作数量变化
import
pic2
from
"./assets/images/pic2.png"
;
const
cooperateNumWithChinaist
=
ref
([])
import
pic3
from
"./assets/images/pic3.png"
;
const
handleGetCooperateNumWithChina
=
async
()
=>
{
import
pic4
from
"./assets/images/pic4.png"
;
try
{
import
pic5
from
"./assets/images/pic5.png"
;
let
params
=
{
import
pic6
from
"./assets/images/pic6.png"
;
id
:
router
.
currentRoute
.
_value
.
params
.
id
import
pic7
from
"./assets/images/pic7.png"
;
}
import
pic8
from
"./assets/images/pic8.png"
;
const
res
=
await
getCooperateNumWithChina
(
params
);
import
pic9
from
"./assets/images/pic9.png"
;
console
.
log
(
"与中国合作数量变化"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
cooperateNumWithChinaist
.
value
=
res
.
data
const
timeList
=
ref
([
}
{
}
catch
(
error
)
{
label
:
"2025"
,
console
.
error
(
"获取与中国合作数量变化error"
,
error
);
value
:
"2025"
},
{
label
:
"2024"
,
value
:
"2024"
},
{
label
:
"2023"
,
value
:
"2023"
},
{
label
:
"2022"
,
value
:
"2022"
},
{
label
:
"2021"
,
value
:
"2021"
}
}
]);
};
const
zhutiList
=
ref
([
//与中国合作类型变化
{
const
cooperateTypeWithChina
=
ref
([])
label
:
"全部合作主体"
,
const
handleetCooperateTypeWithChina
=
async
()
=>
{
value
:
"全部合作主体"
try
{
},
let
params
=
{
{
year
:
2022
,
label
:
"清华大学"
,
id
:
router
.
currentRoute
.
_value
.
params
.
id
value
:
"清华大学"
}
},
const
res
=
await
getCooperateTypeWithChina
(
params
);
{
console
.
log
(
"与中国合作类型变化"
,
res
);
label
:
"复旦大学"
,
if
(
res
.
code
===
200
&&
res
.
data
)
{
value
:
"复旦大学"
cooperateTypeWithChina
.
value
=
res
.
data
}
}
catch
(
error
)
{
console
.
error
(
"获取与与中国合作类型变化error"
,
error
);
}
}
]);
};
//合作情况:与中国合作领域变化
const
typeList
=
ref
([
const
cooperateAreaWithChina
=
ref
([])
{
const
handleetCooperateAreaWithChina
=
async
()
=>
{
label
:
"全部合作类型"
,
try
{
value
:
"全部合作类型"
let
params
=
{
},
year
:
2022
,
{
id
:
router
.
currentRoute
.
_value
.
params
.
id
label
:
"论文合作"
,
}
value
:
"论文合作"
const
res
=
await
getCooperateAreaWithChina
(
params
);
},
console
.
log
(
"与中国合作领域变化"
,
res
);
{
if
(
res
.
code
===
200
&&
res
.
data
)
{
label
:
"项目合作"
,
cooperateAreaWithChina
.
value
=
res
.
data
value
:
"项目合作"
}
},
}
catch
(
error
)
{
{
console
.
error
(
"获取与与中国合作领域变化error"
,
error
);
label
:
"专利合作"
,
value
:
"专利合作"
}
}
]);
};
const
cooperationList
=
ref
([
//合作情况:与中国合作经费变化
{
const
cooperateFundWithChina
=
ref
([])
pic
:
pic1
,
const
handleetCooperateFundWithChina
=
async
()
=>
{
title
:
`"气候变化、碳中和与能源智联"(CNEST)研讨会`
,
try
{
zhuti
:
"合作主体:清华大学"
,
let
params
=
{
type
:
"项目合作"
,
year
:
2022
,
time
:
" 2025年11月19日"
id
:
router
.
currentRoute
.
_value
.
params
.
id
},
}
{
const
res
=
await
getCooperateFundWithChina
(
params
);
pic
:
pic2
,
console
.
log
(
"与中国合作经费变化"
,
res
);
title
:
`第三届"复旦-哈佛中美青年领袖对话"`
,
if
(
res
.
code
===
200
&&
res
.
data
)
{
zhuti
:
"合作主体:复旦大学"
,
cooperateFundWithChina
.
value
=
res
.
data
type
:
"论文合作"
,
}
time
:
" 2025年11月19日"
}
catch
(
error
)
{
},
console
.
error
(
"获取与中国合作经费变化error"
,
error
);
{
pic
:
pic3
,
title
:
`阿诺德植物园中国访问之旅`
,
zhuti
:
"合作主体:北京国家植物园"
,
type
:
"专利合作"
,
time
:
" 2025年11月19日"
},
{
pic
:
pic4
,
title
:
`哈佛大学与国家应对气候变化战略研究和国际合作中心气候政策合作`
,
zhuti
:
"合作主体:国家应对气候变化战略研究和国际合作中心"
,
type
:
"论文合作"
,
time
:
" 2025年11月19日"
},
{
pic
:
pic5
,
title
:
`北航 — 哈佛 Wood 实验室联合研制䲟鱼仿生吸盘机器人`
,
zhuti
:
"合作主体:北京航空航天大学"
,
type
:
"专利合作"
,
time
:
" 2025年11月19日"
},
{
pic
:
pic6
,
title
:
`山西古建院 — 哈佛中国艺术实验室合作`
,
zhuti
:
"合作主体:山西省古建筑与彩塑壁画保护研究院"
,
type
:
"专利合作"
,
time
:
" 2025年11月19日"
},
{
pic
:
pic7
,
title
:
`川大西部中国研究中心 — 哈佛费正清中国研究中心合作研究中心`
,
zhuti
:
"合作主体:四川大学"
,
type
:
"项目合作"
,
time
:
" 2025年11月19日"
},
{
pic
:
pic8
,
title
:
`哈佛中国健康伙伴计划(HCHP)多机构合作`
,
zhuti
:
"合作主体:复旦大学、四川大学"
,
type
:
"论文合作"
,
time
:
" 2025年11月19日"
},
{
pic
:
pic9
,
title
:
`哈佛中国项目与清华共建大石窝大气监测站`
,
zhuti
:
"合作主体:清华大学"
,
type
:
"项目合作"
,
time
:
" 2025年11月19日"
}
}
};
]);
//合作情况:与中国合作事例
const
cooperateExampleWithChina
=
ref
([])
const
handleetCooperateExampleWithChina
=
async
()
=>
{
try
{
let
params
=
{
year
:
2022
,
id
:
router
.
currentRoute
.
_value
.
params
.
id
}
const
res
=
await
getCooperateExampleWithChina
(
params
);
console
.
log
(
"与中国合作事例"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
cooperateExampleWithChina
.
value
=
res
.
data
}
}
catch
(
error
)
{
console
.
error
(
"获取与中国合作事例error"
,
error
);
}
};
onMounted
(
async
()
=>
{
handleGetCooperateNumWithChina
()
handleetCooperateTypeWithChina
()
handleetCooperateAreaWithChina
()
handleetCooperateFundWithChina
()
handleetCooperateExampleWithChina
()
});
</
script
>
</
script
>
...
@@ -202,16 +247,19 @@ const cooperationList = ref([
...
@@ -202,16 +247,19 @@ const cooperationList = ref([
flex-direction
:
column
;
flex-direction
:
column
;
gap
:
16px
;
gap
:
16px
;
padding-bottom
:
30px
;
padding-bottom
:
30px
;
.box
{
.box
{
border
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
border
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
border-radius
:
10px
;
border-radius
:
10px
;
box-shadow
:
0px
0px
20px
0px
rgba
(
25
,
69
,
130
,
0
.1
);
box-shadow
:
0px
0px
20px
0px
rgba
(
25
,
69
,
130
,
0
.1
);
background
:
rgba
(
255
,
255
,
255
,
1
);
background
:
rgba
(
255
,
255
,
255
,
1
);
}
}
.box-header
{
.box-header
{
height
:
56px
;
height
:
56px
;
display
:
flex
;
display
:
flex
;
position
:
relative
;
position
:
relative
;
.header-left
{
.header-left
{
margin-top
:
18px
;
margin-top
:
18px
;
width
:
8px
;
width
:
8px
;
...
@@ -219,6 +267,7 @@ const cooperationList = ref([
...
@@ -219,6 +267,7 @@ const cooperationList = ref([
border-radius
:
0
4px
4px
0
;
border-radius
:
0
4px
4px
0
;
background
:
rgba
(
10
,
87
,
166
,
1
);
background
:
rgba
(
10
,
87
,
166
,
1
);
}
}
.title
{
.title
{
margin-left
:
14px
;
margin-left
:
14px
;
margin-top
:
14px
;
margin-top
:
14px
;
...
@@ -230,11 +279,13 @@ const cooperationList = ref([
...
@@ -230,11 +279,13 @@ const cooperationList = ref([
letter-spacing
:
0px
;
letter-spacing
:
0px
;
text-align
:
left
;
text-align
:
left
;
}
}
.header-btn-box
{
.header-btn-box
{
position
:
absolute
;
position
:
absolute
;
top
:
14px
;
top
:
14px
;
right
:
52px
;
right
:
52px
;
display
:
flex
;
display
:
flex
;
.btn
{
.btn
{
margin-left
:
8px
;
margin-left
:
8px
;
height
:
28px
;
height
:
28px
;
...
@@ -251,12 +302,14 @@ const cooperationList = ref([
...
@@ -251,12 +302,14 @@ const cooperationList = ref([
font-weight
:
400
;
font-weight
:
400
;
cursor
:
pointer
;
cursor
:
pointer
;
}
}
.btnActive
{
.btnActive
{
border
:
1px
solid
rgba
(
10
,
87
,
166
,
1
);
border
:
1px
solid
rgba
(
10
,
87
,
166
,
1
);
background
:
rgba
(
246
,
250
,
255
,
1
);
background
:
rgba
(
246
,
250
,
255
,
1
);
color
:
rgba
(
10
,
87
,
166
,
1
);
color
:
rgba
(
10
,
87
,
166
,
1
);
}
}
}
}
.header-info
{
.header-info
{
height
:
22px
;
height
:
22px
;
position
:
absolute
;
position
:
absolute
;
...
@@ -264,16 +317,19 @@ const cooperationList = ref([
...
@@ -264,16 +317,19 @@ const cooperationList = ref([
top
:
17px
;
top
:
17px
;
display
:
flex
;
display
:
flex
;
justify-content
:
flex-end
;
justify-content
:
flex-end
;
.icon
{
.icon
{
margin-top
:
3px
;
margin-top
:
3px
;
width
:
14px
;
width
:
14px
;
height
:
14px
;
height
:
14px
;
margin-right
:
8px
;
margin-right
:
8px
;
img
{
img
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
}
}
}
}
.text
{
.text
{
height
:
22px
;
height
:
22px
;
color
:
rgba
(
95
,
101
,
108
,
1
);
color
:
rgba
(
95
,
101
,
108
,
1
);
...
@@ -283,6 +339,7 @@ const cooperationList = ref([
...
@@ -283,6 +339,7 @@ const cooperationList = ref([
line-height
:
22px
;
line-height
:
22px
;
}
}
}
}
.header-right
{
.header-right
{
position
:
absolute
;
position
:
absolute
;
top
:
14px
;
top
:
14px
;
...
@@ -290,15 +347,18 @@ const cooperationList = ref([
...
@@ -290,15 +347,18 @@ const cooperationList = ref([
display
:
flex
;
display
:
flex
;
justify-content
:
flex-end
;
justify-content
:
flex-end
;
gap
:
8px
;
gap
:
8px
;
.icon
{
.icon
{
width
:
28px
;
width
:
28px
;
height
:
28px
;
height
:
28px
;
img
{
img
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
}
}
}
}
.checkboxRight
{
.checkboxRight
{
color
:
rgba
(
132
,
136
,
142
,
1
);
color
:
rgba
(
132
,
136
,
142
,
1
);
font-family
:
Microsoft
YaHei
;
font-family
:
Microsoft
YaHei
;
font-size
:
16px
;
font-size
:
16px
;
...
@@ -307,7 +367,8 @@ const cooperationList = ref([
...
@@ -307,7 +367,8 @@ const cooperationList = ref([
letter-spacing
:
0px
;
letter-spacing
:
0px
;
text-align
:
justify
;
text-align
:
justify
;
}
}
.btnRightActive
{
.btnRightActive
{
width
:
80px
;
width
:
80px
;
height
:
28px
;
height
:
28px
;
display
:
flex
;
display
:
flex
;
...
@@ -326,7 +387,8 @@ const cooperationList = ref([
...
@@ -326,7 +387,8 @@ const cooperationList = ref([
letter-spacing
:
0px
;
letter-spacing
:
0px
;
text-align
:
center
;
text-align
:
center
;
}
}
.btnRight
{
.btnRight
{
width
:
80px
;
width
:
80px
;
height
:
28px
;
height
:
28px
;
display
:
flex
;
display
:
flex
;
...
@@ -348,162 +410,70 @@ const cooperationList = ref([
...
@@ -348,162 +410,70 @@ const cooperationList = ref([
}
}
}
}
.row
{
}
.select-box
{
display
:
flex
;
justify-content
:
right
;
gap
:
8px
;
}
.cardList
{
display
:
flex
;
flex-wrap
:
wrap
;
gap
:
16px
;
width
:
1600px
;
.card
{
width
:
522px
;
height
:
180px
;
border-radius
:
4px
;
box-shadow
:
0px
0px
20px
0px
rgba
(
25
,
69
,
130
,
0
.1
);
background
:
rgba
(
255
,
255
,
255
,
1
);
display
:
flex
;
display
:
flex
;
width
:
1600px
;
height
:
500px
;
gap
:
16px
;
gap
:
16px
;
.cardpic
{
.statisticsItem
{
margin-top
:
16px
;
width
:
792px
;
width
:
117px
;
height
:
500px
;
height
:
148px
;
margin-left
:
16px
;
.statisticsChart
{
}
width
:
736px
;
.cardtext
{
height
:
321px
;
display
:
flex
;
margin
:
20px
auto
;
margin-top
:
16px
;
flex-direction
:
column
;
margin-right
:
16px
;
gap
:
12px
;
height
:
148px
;
.cardtitle
{
color
:
rgba
(
59
,
65
,
75
,
1
);
font-family
:
Microsoft
YaHei
;
font-size
:
18px
;
font-weight
:
700
;
line-height
:
24px
;
letter-spacing
:
0px
;
text-align
:
left
;
}
.cardzhuti
{
color
:
rgba
(
59
,
65
,
75
,
1
);
font-family
:
Microsoft
YaHei
;
font-size
:
14px
;
font-weight
:
400
;
line-height
:
22px
;
letter-spacing
:
0px
;
text-align
:
left
;
}
}
.cardbottom
{
.statisticsAI
{
margin
:
0
auto
;
width
:
760px
;
height
:
64px
;
/* 自动布局 */
display
:
flex
;
display
:
flex
;
justify-content
:
space-between
;
flex-direction
:
row
;
height
:
auto
;
justify-content
:
center
;
margin-top
:
auto
;
align-items
:
center
;
.cardtype
{
gap
:
10
;
/* 数据展示/Tag标签/亮色/蓝 */
padding
:
6px
12px
6px
12px
;
box-sizing
:
border-box
;
height
:
22px
;
border
:
1px
solid
rgba
(
231
,
243
,
255
,
1
);
/* 自动布局 */
border-radius
:
4px
;
display
:
flex
;
background
:
rgba
(
246
,
250
,
255
,
1
);
flex-direction
:
row
;
justify-content
:
center
;
align-items
:
center
;
padding
:
1px
8px
1px
8px
;
box-sizing
:
border-box
;
border
:
1px
solid
rgba
(
186
,
224
,
255
,
1
);
border-radius
:
4px
;
background
:
rgba
(
230
,
244
,
255
,
1
);
color
:
rgba
(
22
,
119
,
255
,
1
);
font-family
:
Microsoft
YaHei
;
font-size
:
14px
;
font-weight
:
400
;
line-height
:
20px
;
}
.AIbox
{
.cardtype1
{
height
:
22px
;
/* 自动布局 */
display
:
flex
;
flex-direction
:
row
;
justify-content
:
center
;
align-items
:
center
;
padding
:
1px
8px
1px
8px
;
box-sizing
:
border-box
;
border
:
1px
solid
rgba
(
217
,
247
,
190
,
1
);
border-radius
:
4px
;
background
:
rgba
(
246
,
255
,
237
,
1
);
color
:
rgba
(
82
,
196
,
26
,
1
);
font-family
:
Microsoft
YaHei
;
font-size
:
14px
;
font-weight
:
400
;
line-height
:
20px
;
}
width
:
736px
;
.cardtype2
{
height
:
52px
;
height
:
22px
;
/* 自动布局 */
/* 自动布局 */
display
:
flex
;
display
:
flex
;
flex-direction
:
row
;
flex-direction
:
row
;
justify-content
:
center
;
justify-content
:
flex-start
;
align-items
:
center
;
align-items
:
center
;
padding
:
1px
8px
1px
8px
;
gap
:
13px
;
box-sizing
:
border-box
;
padding
:
2px
0px
2px
0px
;
border
:
1px
solid
rgba
(
255
,
241
,
184
,
1
);
border-radius
:
4px
;
.AItext
{
background
:
rgba
(
255
,
251
,
230
,
1
);
width
:
667px
;
color
:
rgba
(
250
,
173
,
20
,
1
);
height
:
48px
;
font-family
:
Microsoft
YaHei
;
display
:
flex
;
font-size
:
14px
;
flex-direction
:
row
;
font-weight
:
400
;
align-items
:
center
;
line-height
:
20px
;
color
:
rgba
(
5
,
95
,
194
,
1
);
font-family
:
Microsoft
YaHei
;
font-size
:
16px
;
font-weight
:
400
;
line-height
:
24px
;
letter-spacing
:
0px
;
text-align
:
justify
;
}
}
.cardtime
{
color
:
rgba
(
170
,
173
,
177
,
1
);
font-family
:
Microsoft
YaHei
;
font-size
:
14px
;
font-weight
:
400
;
line-height
:
22px
;
letter-spacing
:
0px
;
text-align
:
left
;
}
}
}
}
}
}
}
}
.footer
{
width
:
1600px
;
height
:
72px
;
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
.info
{
width
:
109px
;
height
:
19px
;
color
:
rgba
(
132
,
136
,
142
,
1
);
font-family
:
Microsoft
YaHei
;
font-size
:
14px
;
font-weight
:
400
;
line-height
:
18px
;
letter-spacing
:
0px
;
text-align
:
left
;
}
}
}
}
</
style
>
</
style
>
\ No newline at end of file
src/views/innovationSubject/innovativeInstitutions/otherStatus/index.vue
浏览文件 @
9c8a5f77
<!--其他情况-->
<
template
>
<
template
>
<div
class=
"detail-wrap"
>
<div
class=
"detail-wrap"
>
<div
class=
"top box"
>
<div
class=
"top box"
>
...
@@ -15,12 +16,13 @@
...
@@ -15,12 +16,13 @@
</div>
</div>
<div
class=
"labList"
>
<div
class=
"labList"
>
<div
class=
"labCard"
v-for=
"item in labList"
>
<div
class=
"labCard"
v-for=
"item in labList"
>
<img
:src=
"item.pic"
alt=
""
class=
"labPic"
/>
<img
:src=
"item.logoUrl"
alt=
""
class=
"labPic"
/>
<div
class=
"labTitle"
>
{{
item
.
title
}}
</div>
<div
class=
"labTitle"
>
{{
item
.
labName
<div
class=
"labDes"
>
{{
item
.
des
}}
</div>
}}
</div>
<div
class=
"labDes"
>
{{
item
.
introduction
}}
</div>
<div
class=
"labTags"
>
<div
class=
"labTags"
>
<div
class=
"tag1"
v-for=
"value in item.
tags
"
<div
class=
"tag1"
v-for=
"value in item.
arealist
"
:class=
"
{tag2: value === '化学',tag3: value === '医学',tag4: value === '天体物理'
}">
{{
value
}}
</div>
:class=
"
{ tag2: value === '人工智能', tag3: value === '生物科技', tag4: value === '天体物理'
}">
{{
value
}}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -40,29 +42,38 @@
...
@@ -40,29 +42,38 @@
</div>
</div>
<div
class=
"policyList"
>
<div
class=
"policyList"
>
<div
class=
"policyBox"
v-for=
"item in policyList"
>
<div
class=
"policyBox"
v-for=
"item in policyList"
>
<img
:src=
"pic7"
alt=
""
/>
<img
:src=
"item.logoUrl"
alt=
""
style=
"/* 矩形 211 */
width: 57px;
height: 77px;"
/>
<div
class=
"polContent"
>
<div
class=
"polContent"
>
<div
class=
"polTitle"
>
{{
item
.
titl
e
}}
</div>
<div
class=
"polTitle"
>
{{
item
.
nam
e
}}
</div>
<div
class=
"polDes"
>
{{
item
.
des
}}
</div>
<div
class=
"polDes"
>
{{
item
.
introduction
}}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div
class=
"footer"
>
<div
class=
"
box1-main-
footer"
>
<div
class=
"info"
>
<div
class=
"info"
>
{{
`共
105篇合作动态
`
}}
{{
`共
有${total
}
条
`
}}
<
/div
>
<
/div
>
<
div
class
=
"page-box"
>
<
div
class
=
"page-box"
>
<el-pagination
background
layout=
"prev, pager, next"
:total=
"153"
/>
<
el
-
pagination
@
current
-
change
=
"handleCurrentChange"
:
pageSize
=
"pageSize"
:
current
-
page
=
"currentPage"
size
=
"small"
background
layout
=
"prev, pager, next"
:
total
=
"total"
/>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/template
>
<
/template
>
<
script
setup
>
<
script
setup
>
import
{
ref
,
computed
,
onMounted
}
from
"vue"
;
import
{
ref
,
computed
,
onMounted
}
from
"vue"
;
import
{
getLabList
,
getPolicyList
}
from
"@/api/innovationSubject/overview.js"
;
import
{
useRouter
}
from
"vue-router"
;
const
router
=
useRouter
();
import
pic1
from
"./assets/images/pic1.png"
;
import
pic1
from
"./assets/images/pic1.png"
;
import
pic2
from
"./assets/images/pic2.png"
;
import
pic2
from
"./assets/images/pic2.png"
;
...
@@ -72,76 +83,115 @@ import pic5 from "./assets/images/pic5.png";
...
@@ -72,76 +83,115 @@ import pic5 from "./assets/images/pic5.png";
import
pic6
from
"./assets/images/pic6.png"
;
import
pic6
from
"./assets/images/pic6.png"
;
import
pic7
from
"./assets/images/pic7.png"
;
import
pic7
from
"./assets/images/pic7.png"
;
const
labList
=
ref
([
// const labList = ref([
{
//
{
pic
:
pic1
,
// pic: pic1,
title
:
`怀斯生物启发工程研究所`
,
// title: `怀斯生物启发工程研究所`,
des
:
"成立于2009年,由汉斯约尔格·怀斯(Hansjörg Wyss)捐赠建立,聚焦仿生学与跨学科工程,推动医疗、机器人、材料等领域的突破。"
,
// des: "成立于2009年,由汉斯约尔格·怀斯(Hansjörg Wyss)捐赠建立,聚焦仿生学与跨学科工程,推动医疗、机器人、材料等领域的突破。",
tags
:[
"生物科技"
]
// tags: ["生物科技"]
},
//
}
,
{
//
{
pic
:
pic2
,
// pic: pic2,
title
:
`罗兰研究所`
,
// title: `罗兰研究所`,
des
:
"原为独立研究机构,2002年并入哈佛,支持高风险、高回报的基础科学研究,尤其鼓励青年科学家。"
,
// des: "原为独立研究机构,2002年并入哈佛,支持高风险、高回报的基础科学研究,尤其鼓励青年科学家。",
tags
:[
"物理学"
,
"化学"
]
// tags: ["物理学", "化学"]
},
//
}
,
{
//
{
pic
:
pic3
,
// pic: pic3,
title
:
`哈佛量子计划`
,
// title: `哈佛量子计划`,
des
:
"跨学院合作平台,整合物理、工程、计算机科学等资源,推动量子科学与技术发展。"
,
// des: "跨学院合作平台,整合物理、工程、计算机科学等资源,推动量子科学与技术发展。",
tags
:[
"物理"
]
// tags: ["物理"]
},
//
}
,
{
//
{
pic
:
pic4
,
// pic: pic4,
title
:
`博德研究所`
,
// title: `博德研究所`,
des
:
"全球顶尖基因组学与生物医学研究中心,推动精准医学与疾病机制研究。"
,
// des: "全球顶尖基因组学与生物医学研究中心,推动精准医学与疾病机制研究。",
tags
:[
"医学"
]
// tags: ["医学"]
},
//
}
,
{
//
{
pic
:
pic5
,
// pic: pic5,
title
:
`哈佛干细胞研究所`
,
// title: `哈佛干细胞研究所`,
des
:
"成立于2004年,联合哈佛医学院、牙医学院、文理学院等,推动干细胞基础研究与临床转化。"
,
// des: "成立于2004年,联合哈佛医学院、牙医学院、文理学院等,推动干细胞基础研究与临床转化。",
tags
:[
"医学"
]
// tags: ["医学"]
},
//
}
,
{
//
{
pic
:
pic6
,
// pic: pic6,
title
:
`哈佛大学天体物理中心`
,
// title: `哈佛大学天体物理中心`,
des
:
"由哈佛大学与史密森尼学会于1973年联合成立,是全球规模最大、最活跃的天体物理研究机构之一。"
,
// des: "由哈佛大学与史密森尼学会于1973年联合成立,是全球规模最大、最活跃的天体物理研究机构之一。",
tags
:[
"天体物理"
]
// tags: ["天体物理"]
}
//
}
]);
const
policyList
=
ref
([
{
title
:
"《哈佛大学权利与责任声明》"
,
des
:
"阐明学生在言论自由、学术自由、正当程序、尊重他人等方面的权利与义务。"
},
{
title
:
"《哈佛大学学术诚信政策》"
,
des
:
"定义抄袭、作弊、伪造等学术不端行为,并规定处理流程。"
},
{
title
:
"《哈佛大学反歧视与反骚扰政策》"
,
des
:
"禁止基于种族、性别、性取向、宗教、残疾等的歧视与骚扰,明确举报与调查机制。"
},
{
title
:
"《研究合规与人类受试者保护政策》"
,
des
:
"规范涉及人类受试者的研究(如医学、心理学、社会学实验),确保符合联邦法规(如Common Rule)。"
},
{
title
:
"《哈佛法学院学术政策手册》"
,
des
:
"详述J.D./LL.M./S.J.D.学位要求、课程规则、成绩制度、书面作业要求、出勤规定、荣誉毕业标准等。"
},
{
title
:
"《哈佛文理研究生院学生手册》"
,
des
:
"涵盖博士生资格考试、论文提交、助教职责、奖学金续期、学术进展评估等。"
}
]);
// ]);
// const policyList = ref([
//
{
// title: "《哈佛大学权利与责任声明》",
// des: "阐明学生在言论自由、学术自由、正当程序、尊重他人等方面的权利与义务。"
//
}
,
//
{
// title: "《哈佛大学学术诚信政策》",
// des: "定义抄袭、作弊、伪造等学术不端行为,并规定处理流程。"
//
}
,
//
{
// title: "《哈佛大学反歧视与反骚扰政策》",
// des: "禁止基于种族、性别、性取向、宗教、残疾等的歧视与骚扰,明确举报与调查机制。"
//
}
,
//
{
// title: "《研究合规与人类受试者保护政策》",
// des: "规范涉及人类受试者的研究(如医学、心理学、社会学实验),确保符合联邦法规(如Common Rule)。"
//
}
,
//
{
// title: "《哈佛法学院学术政策手册》",
// des: "详述J.D./LL.M./S.J.D.学位要求、课程规则、成绩制度、书面作业要求、出勤规定、荣誉毕业标准等。"
//
}
,
//
{
// title: "《哈佛文理研究生院学生手册》",
// des: "涵盖博士生资格考试、论文提交、助教职责、奖学金续期、学术进展评估等。"
//
}
// ]);
//创新主体其他情况:重点实验室
const
labList
=
ref
([])
const
handleGetLabList
=
async
()
=>
{
try
{
let
params
=
{
id
:
router
.
currentRoute
.
_value
.
params
.
id
}
const
res
=
await
getLabList
(
params
);
console
.
log
(
"重点实验室"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
labList
.
value
=
res
.
data
}
}
catch
(
error
)
{
console
.
error
(
"获取重点实验室error"
,
error
);
}
}
;
//创新主体其他情况:政策文件
const
policyList
=
ref
([])
const
total
=
ref
(
0
)
const
currentPage
=
ref
(
1
)
const
handleGetPolicyList
=
async
()
=>
{
try
{
let
params
=
{
currentPage
:
currentPage
.
value
,
pageSize
:
6
,
id
:
router
.
currentRoute
.
_value
.
params
.
id
}
const
res
=
await
getPolicyList
(
params
);
console
.
log
(
"政策文件"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
policyList
.
value
=
res
.
data
.
content
total
.
value
=
res
.
data
.
totalElements
}
}
catch
(
error
)
{
console
.
error
(
"获取政策文件error"
,
error
);
}
}
;
onMounted
(
async
()
=>
{
handleGetLabList
()
handleGetPolicyList
()
}
);
<
/script
>
<
/script
>
<
style
lang
=
"scss"
scoped
>
<
style
lang
=
"scss"
scoped
>
...
@@ -150,16 +200,19 @@ const policyList = ref([
...
@@ -150,16 +200,19 @@ const policyList = ref([
flex
-
direction
:
column
;
flex
-
direction
:
column
;
gap
:
16
px
;
gap
:
16
px
;
padding
-
bottom
:
30
px
;
padding
-
bottom
:
30
px
;
.
box
{
.
box
{
border
:
1
px
solid
rgba
(
234
,
236
,
238
,
1
);
border
:
1
px
solid
rgba
(
234
,
236
,
238
,
1
);
border
-
radius
:
10
px
;
border
-
radius
:
10
px
;
box
-
shadow
:
0
px
0
px
20
px
0
px
rgba
(
25
,
69
,
130
,
0.1
);
box
-
shadow
:
0
px
0
px
20
px
0
px
rgba
(
25
,
69
,
130
,
0.1
);
background
:
rgba
(
255
,
255
,
255
,
1
);
background
:
rgba
(
255
,
255
,
255
,
1
);
}
}
.
box
-
header
{
.
box
-
header
{
height
:
56
px
;
height
:
56
px
;
display
:
flex
;
display
:
flex
;
position
:
relative
;
position
:
relative
;
.
header
-
left
{
.
header
-
left
{
margin
-
top
:
18
px
;
margin
-
top
:
18
px
;
width
:
8
px
;
width
:
8
px
;
...
@@ -167,6 +220,7 @@ const policyList = ref([
...
@@ -167,6 +220,7 @@ const policyList = ref([
border
-
radius
:
0
4
px
4
px
0
;
border
-
radius
:
0
4
px
4
px
0
;
background
:
rgba
(
10
,
87
,
166
,
1
);
background
:
rgba
(
10
,
87
,
166
,
1
);
}
}
.
title
{
.
title
{
margin
-
left
:
14
px
;
margin
-
left
:
14
px
;
margin
-
top
:
14
px
;
margin
-
top
:
14
px
;
...
@@ -178,11 +232,13 @@ const policyList = ref([
...
@@ -178,11 +232,13 @@ const policyList = ref([
letter
-
spacing
:
0
px
;
letter
-
spacing
:
0
px
;
text
-
align
:
left
;
text
-
align
:
left
;
}
}
.
header
-
btn
-
box
{
.
header
-
btn
-
box
{
position
:
absolute
;
position
:
absolute
;
top
:
14
px
;
top
:
14
px
;
right
:
52
px
;
right
:
52
px
;
display
:
flex
;
display
:
flex
;
.
btn
{
.
btn
{
margin
-
left
:
8
px
;
margin
-
left
:
8
px
;
height
:
28
px
;
height
:
28
px
;
...
@@ -199,12 +255,14 @@ const policyList = ref([
...
@@ -199,12 +255,14 @@ const policyList = ref([
font
-
weight
:
400
;
font
-
weight
:
400
;
cursor
:
pointer
;
cursor
:
pointer
;
}
}
.
btnActive
{
.
btnActive
{
border
:
1
px
solid
rgba
(
10
,
87
,
166
,
1
);
border
:
1
px
solid
rgba
(
10
,
87
,
166
,
1
);
background
:
rgba
(
246
,
250
,
255
,
1
);
background
:
rgba
(
246
,
250
,
255
,
1
);
color
:
rgba
(
10
,
87
,
166
,
1
);
color
:
rgba
(
10
,
87
,
166
,
1
);
}
}
}
}
.
header
-
info
{
.
header
-
info
{
height
:
22
px
;
height
:
22
px
;
position
:
absolute
;
position
:
absolute
;
...
@@ -212,16 +270,19 @@ const policyList = ref([
...
@@ -212,16 +270,19 @@ const policyList = ref([
top
:
17
px
;
top
:
17
px
;
display
:
flex
;
display
:
flex
;
justify
-
content
:
flex
-
end
;
justify
-
content
:
flex
-
end
;
.
icon
{
.
icon
{
margin
-
top
:
3
px
;
margin
-
top
:
3
px
;
width
:
14
px
;
width
:
14
px
;
height
:
14
px
;
height
:
14
px
;
margin
-
right
:
8
px
;
margin
-
right
:
8
px
;
img
{
img
{
width
:
100
%
;
width
:
100
%
;
height
:
100
%
;
height
:
100
%
;
}
}
}
}
.
text
{
.
text
{
height
:
22
px
;
height
:
22
px
;
color
:
rgba
(
95
,
101
,
108
,
1
);
color
:
rgba
(
95
,
101
,
108
,
1
);
...
@@ -231,6 +292,7 @@ const policyList = ref([
...
@@ -231,6 +292,7 @@ const policyList = ref([
line
-
height
:
22
px
;
line
-
height
:
22
px
;
}
}
}
}
.
header
-
right
{
.
header
-
right
{
position
:
absolute
;
position
:
absolute
;
top
:
14
px
;
top
:
14
px
;
...
@@ -238,15 +300,18 @@ const policyList = ref([
...
@@ -238,15 +300,18 @@ const policyList = ref([
display
:
flex
;
display
:
flex
;
justify
-
content
:
flex
-
end
;
justify
-
content
:
flex
-
end
;
gap
:
8
px
;
gap
:
8
px
;
.
icon
{
.
icon
{
width
:
28
px
;
width
:
28
px
;
height
:
28
px
;
height
:
28
px
;
img
{
img
{
width
:
100
%
;
width
:
100
%
;
height
:
100
%
;
height
:
100
%
;
}
}
}
}
.checkboxRight
{
.
checkboxRight
{
color
:
rgba
(
132
,
136
,
142
,
1
);
color
:
rgba
(
132
,
136
,
142
,
1
);
font
-
family
:
Microsoft
YaHei
;
font
-
family
:
Microsoft
YaHei
;
font
-
size
:
16
px
;
font
-
size
:
16
px
;
...
@@ -255,7 +320,8 @@ const policyList = ref([
...
@@ -255,7 +320,8 @@ const policyList = ref([
letter
-
spacing
:
0
px
;
letter
-
spacing
:
0
px
;
text
-
align
:
justify
;
text
-
align
:
justify
;
}
}
.btnRightActive
{
.
btnRightActive
{
width
:
80
px
;
width
:
80
px
;
height
:
28
px
;
height
:
28
px
;
display
:
flex
;
display
:
flex
;
...
@@ -274,7 +340,8 @@ const policyList = ref([
...
@@ -274,7 +340,8 @@ const policyList = ref([
letter
-
spacing
:
0
px
;
letter
-
spacing
:
0
px
;
text
-
align
:
center
;
text
-
align
:
center
;
}
}
.btnRight
{
.
btnRight
{
width
:
80
px
;
width
:
80
px
;
height
:
28
px
;
height
:
28
px
;
display
:
flex
;
display
:
flex
;
...
@@ -297,15 +364,17 @@ const policyList = ref([
...
@@ -297,15 +364,17 @@ const policyList = ref([
}
}
}
}
.top
{
.
top
{
width
:
1600
px
;
width
:
1600
px
;
height
:
552
px
;
height
:
552
px
;
.labList
{
.
labList
{
display
:
flex
;
display
:
flex
;
gap
:
16
px
;
gap
:
16
px
;
margin
-
left
:
24
px
;
margin
-
left
:
24
px
;
flex
-
wrap
:
wrap
;
flex
-
wrap
:
wrap
;
.labCard
{
.
labCard
{
width
:
376
px
;
width
:
376
px
;
height
:
228
px
;
height
:
228
px
;
display
:
flex
;
display
:
flex
;
...
@@ -315,11 +384,13 @@ const policyList = ref([
...
@@ -315,11 +384,13 @@ const policyList = ref([
border
:
1
px
solid
rgba
(
234
,
236
,
238
,
1
);
border
:
1
px
solid
rgba
(
234
,
236
,
238
,
1
);
border
-
radius
:
10
px
;
border
-
radius
:
10
px
;
background
:
rgba
(
255
,
255
,
255
,
0.65
);
background
:
rgba
(
255
,
255
,
255
,
0.65
);
.labPic
{
.
labPic
{
width
:
32
px
;
width
:
32
px
;
height
:
32
px
;
height
:
32
px
;
}
}
.labTitle
{
.
labTitle
{
margin
-
top
:
12
px
;
margin
-
top
:
12
px
;
color
:
rgba
(
59
,
65
,
75
,
1
);
color
:
rgba
(
59
,
65
,
75
,
1
);
font
-
family
:
Microsoft
YaHei
;
font
-
family
:
Microsoft
YaHei
;
...
@@ -329,7 +400,8 @@ const policyList = ref([
...
@@ -329,7 +400,8 @@ const policyList = ref([
letter
-
spacing
:
1
px
;
letter
-
spacing
:
1
px
;
text
-
align
:
left
;
text
-
align
:
left
;
}
}
.labDes
{
.
labDes
{
margin
-
top
:
4
px
;
margin
-
top
:
4
px
;
color
:
rgba
(
95
,
101
,
108
,
1
);
color
:
rgba
(
95
,
101
,
108
,
1
);
font
-
family
:
Microsoft
YaHei
;
font
-
family
:
Microsoft
YaHei
;
...
@@ -339,13 +411,15 @@ const policyList = ref([
...
@@ -339,13 +411,15 @@ const policyList = ref([
letter
-
spacing
:
0
px
;
letter
-
spacing
:
0
px
;
text
-
align
:
justify
;
text
-
align
:
justify
;
}
}
.labTags
{
.
labTags
{
display
:
flex
;
display
:
flex
;
gap
:
8
px
;
gap
:
8
px
;
height
:
auto
;
height
:
auto
;
margin
-
top
:
auto
;
margin
-
top
:
auto
;
.tag1
{
height
:
22px
;
.
tag1
{
height
:
22
px
;
display
:
flex
;
display
:
flex
;
flex
-
direction
:
row
;
flex
-
direction
:
row
;
justify
-
content
:
center
;
justify
-
content
:
center
;
...
@@ -361,8 +435,9 @@ const policyList = ref([
...
@@ -361,8 +435,9 @@ const policyList = ref([
font
-
weight
:
400
;
font
-
weight
:
400
;
line
-
height
:
20
px
;
line
-
height
:
20
px
;
}
}
.tag2
{
height
:
22px
;
.
tag2
{
height
:
22
px
;
display
:
flex
;
display
:
flex
;
flex
-
direction
:
row
;
flex
-
direction
:
row
;
justify
-
content
:
center
;
justify
-
content
:
center
;
...
@@ -378,8 +453,9 @@ const policyList = ref([
...
@@ -378,8 +453,9 @@ const policyList = ref([
font
-
weight
:
400
;
font
-
weight
:
400
;
line
-
height
:
20
px
;
line
-
height
:
20
px
;
}
}
.tag3
{
height
:
22px
;
.
tag3
{
height
:
22
px
;
display
:
flex
;
display
:
flex
;
flex
-
direction
:
row
;
flex
-
direction
:
row
;
justify
-
content
:
center
;
justify
-
content
:
center
;
...
@@ -395,8 +471,9 @@ const policyList = ref([
...
@@ -395,8 +471,9 @@ const policyList = ref([
font
-
weight
:
400
;
font
-
weight
:
400
;
line
-
height
:
20
px
;
line
-
height
:
20
px
;
}
}
.tag4
{
height
:
22px
;
.
tag4
{
height
:
22
px
;
display
:
flex
;
display
:
flex
;
flex
-
direction
:
row
;
flex
-
direction
:
row
;
justify
-
content
:
center
;
justify
-
content
:
center
;
...
@@ -418,16 +495,18 @@ const policyList = ref([
...
@@ -418,16 +495,18 @@ const policyList = ref([
}
}
.down
{
.
down
{
width
:
1600
px
;
width
:
1600
px
;
height
:
362
px
;
height
:
362
px
;
.policyList
{
.
policyList
{
width
:
1600
px
;
width
:
1600
px
;
display
:
flex
;
display
:
flex
;
gap
:
16
px
;
gap
:
16
px
;
margin
-
left
:
24
px
;
margin
-
left
:
24
px
;
flex
-
wrap
:
wrap
;
flex
-
wrap
:
wrap
;
.policyBox
{
.
policyBox
{
width
:
506
px
;
width
:
506
px
;
height
:
109
px
;
height
:
109
px
;
box
-
sizing
:
border
-
box
;
box
-
sizing
:
border
-
box
;
...
@@ -437,67 +516,59 @@ const policyList = ref([
...
@@ -437,67 +516,59 @@ const policyList = ref([
display
:
flex
;
display
:
flex
;
gap
:
16
px
;
gap
:
16
px
;
padding
:
16
px
;
padding
:
16
px
;
.polPic
{
.
polPic
{
width
:
57
px
;
width
:
57
px
;
height
:
77
px
;
height
:
77
px
;
box
-
sizing
:
border
-
box
;
box
-
sizing
:
border
-
box
;
border
:
1
px
solid
rgba
(
234
,
236
,
238
,
1
);
border
:
1
px
solid
rgba
(
234
,
236
,
238
,
1
);
background
:
url
(
"./assets/images/pic7.png"
);
background
:
url
(
"./assets/images/pic7.png"
);
}
}
.polContent
{
.
polContent
{
display
:
flex
;
display
:
flex
;
gap
:
4
px
;
gap
:
4
px
;
flex
-
direction
:
column
;
flex
-
direction
:
column
;
.polTitle
{
.
polTitle
{
color
:
rgba
(
59
,
65
,
75
,
1
);
color
:
rgba
(
59
,
65
,
75
,
1
);
font-family
:
Microsoft
YaHei
;
font
-
family
:
Microsoft
YaHei
;
font-size
:
16px
;
font
-
size
:
16
px
;
font-weight
:
700
;
font
-
weight
:
700
;
line-height
:
24px
;
line
-
height
:
24
px
;
letter-spacing
:
1px
;
letter
-
spacing
:
1
px
;
text-align
:
left
;
text
-
align
:
left
;
}
}
.polDes
{
color
:
rgba
(
95
,
101
,
108
,
1
);
.
polDes
{
font-family
:
Microsoft
YaHei
;
color
:
rgba
(
95
,
101
,
108
,
1
);
font-size
:
14px
;
font
-
family
:
Microsoft
YaHei
;
font-weight
:
400
;
font
-
size
:
14
px
;
line-height
:
22px
;
font
-
weight
:
400
;
letter-spacing
:
0px
;
line
-
height
:
22
px
;
text-align
:
justify
;
letter
-
spacing
:
0
px
;
}
text
-
align
:
justify
;
}
}
}
}
}
}
}
.footer
{
.
box1
-
main
-
footer
{
height
:
72px
;
margin
:
30
px
22
px
0
22
px
;
height
:
22
px
;
display
:
flex
;
display
:
flex
;
justify
-
content
:
space
-
between
;
justify
-
content
:
space
-
between
;
align-items
:
center
;
margin-left
:
24px
;
.
info
{
margin-right
:
26px
;
height
:
22
px
;
.info
{
line
-
height
:
22
px
;
width
:
109px
;
color
:
rgb
(
132
,
136
,
142
);
height
:
19px
;
font
-
family
:
"Microsoft YaHei"
;
color
:
rgba
(
132
,
136
,
142
,
1
);
font-family
:
Microsoft
YaHei
;
font
-
size
:
14
px
;
font
-
size
:
14
px
;
font
-
weight
:
400
;
font
-
weight
:
400
;
line-height
:
18px
;
letter-spacing
:
0px
;
text
-
align
:
left
;
text
-
align
:
left
;
}
}
}
}
}
}
<
/style>
<
/style>
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论