Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
risk-monitor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
1
合并请求
1
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蔡建
risk-monitor
Commits
8f531fe8
提交
8f531fe8
authored
3月 23, 2026
作者:
刘宇琪
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix:2.23BUG部分修复
上级
f8252418
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
10 个修改的文件
包含
36 行增加
和
186 行删除
+36
-186
billHome.js
src/api/bill/billHome.js
+0
-5
InnovationAnalysis.vue
...novationSubject/InnovationAnalysis/InnovationAnalysis.vue
+0
-27
ChartSummary.vue
...ubject/innovativeInstitutions/components/ChartSummary.vue
+34
-38
index.vue
src/views/innovationSubject/innovativeInstitutions/index.vue
+0
-34
Cooperation.vue
...vationSubject/innovativeInstitutions/tabs/Cooperation.vue
+0
-0
ResearchStrength.vue
...nSubject/innovativeInstitutions/tabs/ResearchStrength.vue
+2
-6
SchoolDetail.vue
...ationSubject/innovativeInstitutions/tabs/SchoolDetail.vue
+0
-60
header-icon1.png
src/views/technologyFigures/assets/images/header-icon1.png
+0
-0
header-icon2.png
src/views/technologyFigures/assets/images/header-icon2.png
+0
-0
vite.config.js
vite.config.js
+0
-16
没有找到文件。
src/api/bill/billHome.js
浏览文件 @
8f531fe8
...
...
@@ -179,11 +179,6 @@ export function getPostMemberList() {
}
<<<<<<<
HEAD
=======
>>>>>>>
master
/**
* 获取筛选项配置 - 行业列表
* GET /api/billImpactAnalysis/industry/hylyList
...
...
src/views/innovationSubject/InnovationAnalysis/InnovationAnalysis.vue
浏览文件 @
8f531fe8
...
...
@@ -151,24 +151,12 @@ const fieldAnalysis = ref('人工智能与信息技术占据最大份额,反
const
radarAnalysis
=
ref
(
'研究型大学在基础科学领域(生物医学、材料科学)占据主导地位;科技企业高度集中于人工智能和信息技术领域;国家实验室在能源技术和国家安全相关领域有显著优势;国防承包商的研究高度集中于航空航天和国家安全领域。'
)
// 切换视图
<<<<<<<
HEAD
function
switchView
(
view
:
string
)
{
console
.
log
(
'[v0] switchView 被调用, view:'
,
view
,
', currentView:'
,
currentView
.
value
)
if
(
currentView
.
value
!==
view
)
{
currentView
.
value
=
view
if
(
view
===
'ranking'
)
{
console
.
log
(
'[v0] 切换到排名视图,调用 handleGetOverallRanking'
)
handleGetOverallRanking
()
}
else
{
console
.
log
(
'[v0] 切换到研究布局视图,调用 handleGetResearchField 和 handleGetResearchFieldSubjectType'
)
=======
function
switchView
(
view
:
string
)
{
if
(
currentView
.
value
!==
view
)
{
currentView
.
value
=
view
if
(
view
===
'ranking'
)
{
handleGetOverallRanking
()
}
else
{
>>>>>>>
master
handleGetResearchField
()
handleGetResearchFieldSubjectType
()
}
...
...
@@ -183,12 +171,7 @@ const handleGetOverallRanking = async () => {
subjectTypeId
:
props
.
activeCate1
,
year
:
releaseTime
.
value
}
<<<<<<<
HEAD
const
res
=
await
getOverallRanking
(
params
)
console
.
log
(
'[v0] 综合排名'
,
res
)
=======
const
res
=
await
getOverallRanking
(
params
)
>>>>>>>
master
if
(
res
.
code
===
200
&&
res
.
data
)
{
innoItemList
.
value
=
res
.
data
}
...
...
@@ -205,12 +188,7 @@ const handleGetResearchField = async () => {
const
params
=
{
year
:
releaseTime
.
value
}
<<<<<<<
HEAD
const
res
=
await
getResearchField
(
params
)
console
.
log
(
'[v0] 研究领域布局情况'
,
res
)
=======
const
res
=
await
getResearchField
(
params
)
>>>>>>>
master
if
(
res
.
code
===
200
&&
res
.
data
)
{
const
names
=
res
.
data
.
map
(
item
=>
item
.
areaName
)
const
values
=
res
.
data
.
map
(
item
=>
item
.
amount
)
...
...
@@ -232,12 +210,7 @@ const handleGetResearchFieldSubjectType = async () => {
const
params
=
{
year
:
releaseTime
.
value
}
<<<<<<<
HEAD
const
res
=
await
getResearchFieldSubjectType
(
params
)
console
.
log
(
'[v0] 研究领域主体类型'
,
res
)
=======
const
res
=
await
getResearchFieldSubjectType
(
params
)
>>>>>>>
master
if
(
res
.
code
===
200
&&
res
.
data
)
{
raderOptionData
.
value
=
res
.
data
}
...
...
src/views/innovationSubject/innovativeInstitutions/components/ChartSummary.vue
浏览文件 @
8f531fe8
<
template
>
<div
class=
"chart-summary"
>
<svg
class=
"summary-icon"
width=
"20"
height=
"20"
viewBox=
"0 0 20 20"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
>
<circle
cx=
"10"
cy=
"10"
r=
"9"
stroke=
"#055FC2"
stroke-width=
"2"
fill=
"none"
/>
<path
d=
"M7 10L9 12L13 8"
stroke=
"#055FC2"
stroke-width=
"2"
stroke-linecap=
"round"
stroke-linejoin=
"round"
/>
</svg>
<p
class=
"summary-text"
>
{{
text
}}
</p>
<svg
class=
"arrow-icon"
width=
"24"
height=
"24"
viewBox=
"0 0 24 24"
fill=
"none"
xmlns=
"http://www.w3.org/2000/svg"
@
click=
"$emit('more')"
>
<path
d=
"M9 18L15 12L9 6"
stroke=
"#055FC2"
stroke-width=
"2"
stroke-linecap=
"round"
stroke-linejoin=
"round"
/>
</svg>
<div
class=
"chart-summary-wrapper"
>
<div
class=
"btn-box"
@
mouseenter=
"handleSwitchAiContentShow(true)"
>
<AiButton
/>
</div>
<div
class=
"content-box"
v-if=
"isShowAiContent"
@
mouseleave=
"handleSwitchAiContentShow(false)"
>
<AiPane
:aiContent=
"text"
/>
</div>
</div>
</
template
>
<
script
setup
>
import
{
ref
}
from
'vue'
import
AiButton
from
'@/components/base/Ai/AiButton/index.vue'
import
AiPane
from
'@/components/base/Ai/AiPane/index.vue'
defineProps
({
text
:
{
type
:
String
,
...
...
@@ -21,40 +22,35 @@ defineProps({
})
defineEmits
([
'more'
])
const
isShowAiContent
=
ref
(
false
)
const
handleSwitchAiContentShow
=
(
isShow
)
=>
{
isShowAiContent
.
value
=
isShow
}
</
script
>
<
style
lang=
"scss"
scoped
>
.chart-summary
{
display
:
flex
;
align-items
:
flex-start
;
gap
:
12px
;
padding
:
12px
16px
;
margin
:
0
16px
16px
;
background
:
#F6FAFF
;
border
:
1px
solid
#E7F3FF
;
border-radius
:
4px
;
.summary-icon
{
flex-shrink
:
0
;
margin-top
:
2px
;
}
.chart-summary-wrapper
{
position
:
absolute
;
right
:
0
;
bottom
:
0
;
left
:
0
;
pointer-events
:
none
;
.summary-text
{
flex
:
1
;
font-size
:
16px
;
line-height
:
24px
;
color
:
#055FC2
;
margin
:
0
;
.btn-box
{
position
:
absolute
;
right
:
0
;
bottom
:
0
;
pointer-events
:
auto
;
}
.arrow-icon
{
flex-shrink
:
0
;
cursor
:
pointer
;
transition
:
opacity
0
.2s
;
&
:hover
{
opacity
:
0
.7
;
}
.content-box
{
position
:
absolute
;
left
:
0
;
right
:
0
;
bottom
:
0
;
pointer-events
:
auto
;
}
}
</
style
>
src/views/innovationSubject/innovativeInstitutions/index.vue
浏览文件 @
8f531fe8
...
...
@@ -61,19 +61,9 @@
<!-- 科研实力Tab -->
<ResearchStrength
v-else-if=
"activeTab === '科研实力'"
/>
<<<<<<<
HEAD
<!-- 合作情况Tab -->
<Cooperation
v-else-if=
"activeTab === '合作情况'"
/>
<!-- 其他Tab内容占位 -->
<div
class=
"placeholder-content"
v-else
>
<div
class=
"placeholder-text"
>
{{
activeTab
}}
内容开发中...
</div>
</div>
=======
<Cooperation
v-else-if=
"activeTab === '合作情况'"
/>
<OtherInfo
v-else-if=
"activeTab === '其他情况'"
/>
>>>>>>> c71276c18548779e8e676aea3b390352568ff20b
</div>
</div>
</div>
...
...
@@ -85,10 +75,7 @@ import AreaTag from '@/components/base/AreaTag/index.vue'
import
SchoolDetail
from
'./tabs/SchoolDetail.vue'
import
ResearchStrength
from
'./tabs/ResearchStrength.vue'
import
Cooperation
from
'./tabs/Cooperation.vue'
<<<<<<<
HEAD
=======
import
OtherInfo
from
'./tabs/OtherInfo.vue'
>>>>>>>
c71276c18548779e8e676aea3b390352568ff20b
// 大学基本信息
const
universityInfo
=
ref
({
...
...
@@ -235,11 +222,7 @@ const latestDynamics = ref([
date
:
'9月15日'
,
title
:
'艾伦·M·加伯接任临时校长'
,
content
:
'原教务长艾伦·加伯(Alan M. Garber)出任哈佛第30任校长(临时),并完整复学术诚信与校园团结。'
,
<<<<<<<
HEAD
tags
:
[{
name
:
'集成��路'
,
type
:
'tag6'
}],
=======
tags
:
[{
name
:
'集成电路'
,
type
:
'tag6'
}],
>>>>>>>
c71276c18548779e8e676aea3b390352568ff20b
isHighlight
:
true
},
{
...
...
@@ -356,18 +339,12 @@ const handleVisitWebsite = () => {
}
.header-section
{
<<<<<<<
HEAD
padding
:
80px
160px
30px
;
.header-content
{
=======
padding
:
80px
;
display
:
flex
;
justify-content
:
center
;
.header-content
{
width
:
1600px
;
>>>>>>>
c71276c18548779e8e676aea3b390352568ff20b
display
:
flex
;
align-items
:
flex-start
;
gap
:
24px
;
...
...
@@ -452,22 +429,15 @@ const handleVisitWebsite = () => {
.nav-tabs
{
display
:
flex
;
<<<<<<<
HEAD
margin
:
0
160px
16px
;
=======
justify-content
:
center
;
margin
:
0
auto
16px
;
>>>>>>>
c71276c18548779e8e676aea3b390352568ff20b
background
:
rgba
(
255
,
255
,
255
,
0
.65
);
border-radius
:
10px
;
padding
:
5px
;
box-shadow
:
0px
0px
20px
rgba
(
25
,
69
,
130
,
0
.1
);
<<<<<<<
HEAD
=======
width
:
1600px
;
margin-left
:
auto
;
margin-right
:
auto
;
>>>>>>>
c71276c18548779e8e676aea3b390352568ff20b
.nav-tab
{
flex
:
1
;
...
...
@@ -498,16 +468,12 @@ const handleVisitWebsite = () => {
}
.main-content
{
<<<<<<<
HEAD
padding
:
0
160px
;
=======
display
:
flex
;
justify-content
:
center
;
>
*
{
width
:
1600px
;
}
>>>>>>>
c71276c18548779e8e676aea3b390352568ff20b
}
.placeholder-content
{
...
...
src/views/innovationSubject/innovativeInstitutions/tabs/Cooperation.vue
浏览文件 @
8f531fe8
差异被折叠。
点击展开。
src/views/innovationSubject/innovativeInstitutions/tabs/ResearchStrength.vue
浏览文件 @
8f531fe8
...
...
@@ -288,11 +288,7 @@ const paperPoints = computed(() => getDataPoints(paperData))
const
fundingPoints
=
computed
(()
=>
getDataPoints
(
fundingData
))
// 雷达图数据和计算
<<<<<<<
HEAD
const
radarValues
=
[
0.7
,
0.9
,
0.85
,
0.6
,
0.75
,
0.65
]
// 各领域相对��
=======
const
radarValues
=
[
0.7
,
0.9
,
0.85
,
0.6
,
0.75
,
0.65
]
// 各领域
>>>>>>>
c71276c18548779e8e676aea3b390352568ff20b
const
getHexagonPoints
=
(
cx
,
cy
,
r
)
=>
{
const
points
=
[]
...
...
@@ -396,6 +392,7 @@ const getPatentBarGradient = () => {
.chart-box
{
flex
:
1
;
min-width
:
0
;
position
:
relative
;
}
}
...
...
@@ -647,7 +644,6 @@ const getPatentBarGradient = () => {
}
}
}
// 图表底部摘要
</
style
>
src/views/innovationSubject/innovativeInstitutions/tabs/SchoolDetail.vue
浏览文件 @
8f531fe8
...
...
@@ -203,12 +203,7 @@ const infoList = computed(() => [
<
style
lang
=
"scss"
scoped
>
.
school
-
detail
-
content
{
display
:
flex
;
<<<<<<<
HEAD
gap
:
16
px
;
// align-items 默认 stretch,使左右等高
=======
gap
:
16
px
;
>>>>>>>
c71276c18548779e8e676aea3b390352568ff20b
align
-
items
:
stretch
;
.
left
-
section
{
...
...
@@ -216,12 +211,7 @@ const infoList = computed(() => [
min
-
width
:
0
;
display
:
flex
;
flex
-
direction
:
column
;
<<<<<<<
HEAD
// 让内部 AnalysisBox 撑满整列高度
=======
>>>>>>>
c71276c18548779e8e676aea3b390352568ff20b
:
deep
(.
dynamics
-
box
),
:
deep
(.
analysis
-
box
-
wrapper
)
{
flex
:
1
;
...
...
@@ -234,12 +224,7 @@ const infoList = computed(() => [
flex
-
direction
:
column
;
}
}
<<<<<<<
HEAD
// dynamics-list 填满剩余空间,分页固定在底部
=======
>>>>>>>
c71276c18548779e8e676aea3b390352568ff20b
:
deep
(.
dynamics
-
box
)
{
height
:
100
%
;
}
...
...
@@ -252,13 +237,7 @@ const infoList = computed(() => [
flex
-
direction
:
column
;
gap
:
16
px
;
}
<<<<<<<
HEAD
}
// 节点尺寸变量
=======
}
>>>>>>>
c71276c18548779e8e676aea3b390352568ff20b
$node
-
size
:
24
px
;
$axis
-
width
:
2
px
;
...
...
@@ -271,22 +250,12 @@ $axis-width: 2px;
display
:
flex
;
align
-
items
:
stretch
;
gap
:
0
;
<<<<<<<
HEAD
// 左侧日期列
=======
>>>>>>>
c71276c18548779e8e676aea3b390352568ff20b
.
time
-
col
{
width
:
70
px
;
flex
-
shrink
:
0
;
text
-
align
:
right
;
<<<<<<<
HEAD
padding
-
right
:
16
px
;
// 日期与节点圆顶部对齐
=======
padding
-
right
:
16
px
;
>>>>>>>
c71276c18548779e8e676aea3b390352568ff20b
padding
-
top
:
calc
(
#
{
$node
-
size
}
/
2
-
12
px
);
.
year
,
.
date
{
...
...
@@ -297,12 +266,7 @@ $axis-width: 2px;
line
-
height
:
24
px
;
}
}
<<<<<<<
HEAD
// 中间轴线列:上段线 + 圆形节点 + 下段线,完全垂直居中对齐
=======
>>>>>>>
c71276c18548779e8e676aea3b390352568ff20b
.
axis
-
col
{
width
:
$node
-
size
;
flex
-
shrink
:
0
;
...
...
@@ -349,12 +313,7 @@ $axis-width: 2px;
}
}
}
<<<<<<<
HEAD
// 右侧内容列
=======
>>>>>>>
c71276c18548779e8e676aea3b390352568ff20b
.
content
-
col
{
flex
:
1
;
min
-
width
:
0
;
...
...
@@ -512,24 +471,6 @@ $axis-width: 2px;
color
:
rgb
(
59
,
65
,
75
);
margin
-
bottom
:
12
px
;
}
<<<<<<<
HEAD
// 最多展示 2 行 (每行2个),超出可滚动
.
people
-
grid
{
display
:
grid
;
grid
-
template
-
columns
:
repeat
(
2
,
1
fr
);
gap
:
16
px
;
// 每个卡片高度约 64px,2行 = 128px + 1个gap16 = 144px
max
-
height
:
144
px
;
overflow
-
y
:
auto
;
// 低于 2 行时不留白,自适应收缩
&
.
single
-
row
{
max
-
height
:
64
px
;
}
// 滚动条样式
=======
.
people
-
grid
{
display
:
grid
;
...
...
@@ -542,7 +483,6 @@ $axis-width: 2px;
max
-
height
:
64
px
;
}
>>>>>>>
c71276c18548779e8e676aea3b390352568ff20b
&
::
-
webkit
-
scrollbar
{
width
:
4
px
;
}
...
...
src/views/technologyFigures/assets/images/header-icon1.png
0 → 100644
浏览文件 @
8f531fe8
1.2 KB
src/views/technologyFigures/assets/images/header-icon2.png
0 → 100644
浏览文件 @
8f531fe8
1.5 KB
vite.config.js
浏览文件 @
8f531fe8
...
...
@@ -52,21 +52,6 @@ export default defineConfig({
changeOrigin
:
true
,
rewrite
:
(
path
)
=>
path
.
replace
(
/^
\/
reportData/
,
''
)
},
<<<<<<<
HEAD
'/api'
:
{
target
:
'http://8.140.26.4:9085/'
,
// target: 'http://192.168.0.4:28080/',
// target: 'http://172.20.10.3:28080/',
changeOrigin
:
true
,
rewrite
:
(
path
)
=>
path
.
replace
(
/^
\/
api/
,
''
)
// '/api': {
// target: 'http://10.134.117.162:28080/',
// changeOrigin: true,
// rewrite: (path) => path.replace(/^\/api/, '')
// '/api': {
=======
'/api'
:
{
target
:
'http://8.140.26.4:9085/'
,
...
...
@@ -74,7 +59,6 @@ export default defineConfig({
rewrite
:
(
path
)
=>
path
.
replace
(
/^
\/
api/
,
''
)
// '/api': {
>>>>>>>
c71276c18548779e8e676aea3b390352568ff20b
// target: 'http://10.119.133.162:28080/',
// changeOrigin: true,
// rewrite: (path) => path.replace(/^\/api/, '')
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论