Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
risk-monitor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蔡建
risk-monitor
Commits
62317e7e
提交
62317e7e
authored
1月 24, 2026
作者:
张伊明
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
http://8.140.26.4:10003/caijian/risk-monitor
上级
210cd251
f76b7c09
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
20 个修改的文件
包含
297 行增加
和
149 行删除
+297
-149
App.vue
src/App.vue
+2
-0
allGovernment.js
src/api/allGovernment.js
+28
-2
index.vue
...ew/components/fourSuppress/components/addDomain/index.vue
+55
-19
index.vue
...omponents/fourSuppress/components/allGovernment/index.vue
+104
-33
index.vue
src/views/ZMOverView/components/gameProfile/index.vue
+3
-3
index.vue
src/views/bill/billLayout/index.vue
+1
-3
index.vue
src/views/bill/deepDig/poliContribution/index.vue
+29
-18
index.vue
src/views/comprehensiveSearch/chat/index.vue
+21
-12
index.vue
src/views/comprehensiveSearch/searchResults/index.vue
+1
-1
index.vue
src/views/decree/decreeLayout/deepdig/index.vue
+5
-3
index.vue
src/views/decree/decreeLayout/index.vue
+2
-2
index.vue
src/views/decree/decreeLayout/overview/background/index.vue
+4
-15
index.vue
...views/decree/decreeLayout/overview/introduction/index.vue
+18
-15
index.vue
...s/sanctionsOverview/components/introductionPage/index.vue
+6
-4
index.vue
...onents/impactAnalysis/components/researchImpact/index.vue
+0
-0
index.vue
src/views/newsAnalysis/index.vue
+3
-5
index.vue
src/views/thinkTank/ReportDetail/index.vue
+4
-4
index.vue
src/views/thinkTank/ThinkTankDetail/index.vue
+8
-7
index.vue
src/views/thinkTank/index.vue
+2
-2
piechart.js
src/views/thinkTank/utils/piechart.js
+1
-1
没有找到文件。
src/App.vue
浏览文件 @
62317e7e
...
@@ -391,6 +391,7 @@ body {
...
@@ -391,6 +391,7 @@ body {
.navbar
{
.navbar
{
width
:
100%
;
width
:
100%
;
height
:
64px
;
height
:
64px
;
border-bottom
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
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
:
linear-gradient
(
180deg
,
rgba
(
246
,
250
,
255
,
0
.8
)
0%
,
rgba
(
255
,
255
,
255
,
0
.8
)
100%
);
background
:
linear-gradient
(
180deg
,
rgba
(
246
,
250
,
255
,
0
.8
)
0%
,
rgba
(
255
,
255
,
255
,
0
.8
)
100%
);
.nav-content
{
.nav-content
{
...
@@ -680,6 +681,7 @@ body {
...
@@ -680,6 +681,7 @@ body {
position
:
absolute
;
position
:
absolute
;
top
:
132px
;
top
:
132px
;
right
:
0
;
right
:
0
;
z-index
:
10000000000000
;
.item
{
.item
{
width
:
108px
;
width
:
108px
;
height
:
40px
;
height
:
40px
;
...
...
src/api/allGovernment.js
浏览文件 @
62317e7e
...
@@ -77,9 +77,34 @@ export function getUSGovernmentSanctionHistory(params) {
...
@@ -77,9 +77,34 @@ export function getUSGovernmentSanctionHistory(params) {
/**
/**
* @header token
* @header token
*/
*/
export
function
getDepartmentList
()
{
export
function
getDepartmentList
(
params
)
{
return
request
({
return
request
({
method
:
'GET'
,
method
:
'GET'
,
url
:
`/api/organization/summaryDepartList`
url
:
`/api/organization/summaryDepartList`
,
params
})
}
// 全政府-获取制裁手段数据
/**
* @params {orgId}
*/
export
function
getSanTypeList
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/rivalryIndex/sanTypeList`
,
params
})
}
// 全政府-获取未来三个月内的打压遏制时间线
/**
* @params {field}
*/
export
function
getThreeMonthSanctionProcess
(
params
)
{
return
request
({
method
:
'GET'
,
url
:
`/api/rivalryIndex/nextThreeMonthSanctionProcess`
,
params
})
})
}
}
\ No newline at end of file
src/views/ZMOverView/components/fourSuppress/components/addDomain/index.vue
浏览文件 @
62317e7e
...
@@ -277,7 +277,7 @@ import {
...
@@ -277,7 +277,7 @@ import {
getDomainContainmentRanking
,
getDomainContainmentRanking
,
getDomainContainmentTimeline
getDomainContainmentTimeline
}
from
"@/api/zmOverview/allDomains"
;
}
from
"@/api/zmOverview/allDomains"
;
import
{
getUSGovernmentLatestDynamic
,
getDepartmentList
}
from
"@/api/allGovernment.js"
;
import
{
getUSGovernmentLatestDynamic
,
getDepartmentList
,
getSanTypeList
,
}
from
"@/api/allGovernment.js"
;
const
router
=
useRouter
();
const
router
=
useRouter
();
...
@@ -286,27 +286,48 @@ const deptValue = ref("");
...
@@ -286,27 +286,48 @@ const deptValue = ref("");
const
methodValue
=
ref
(
""
);
const
methodValue
=
ref
(
""
);
const
departmentList
=
ref
([]);
const
departmentList
=
ref
([]);
const
methodOptions
=
ref
([
const
methodOptions
=
ref
([
{
label
:
"全部制裁手段"
,
value
:
""
},
//
{ label: "全部制裁手段", value: "" },
{
label
:
"法案"
,
value
:
"-1"
},
//
{ label: "法案", value: "-1" },
{
label
:
"政令"
,
value
:
"-2"
},
//
{ label: "政令", value: "-2" },
{
label
:
"实体清单"
,
value
:
"1"
},
//
{ label: "实体清单", value: "1" },
{
label
:
"特别国民指定清单"
,
value
:
"2"
},
//
{ label: "特别国民指定清单", value: "2" },
{
label
:
"涉军企业"
,
value
:
"3"
},
//
{ label: "涉军企业", value: "3" },
{
label
:
"行业制裁识别清单"
,
value
:
"4"
},
//
{ label: "行业制裁识别清单", value: "4" },
{
label
:
"无法核实清单"
,
value
:
"5"
},
//
{ label: "无法核实清单", value: "5" },
{
label
:
"军事最终用户清单"
,
value
:
"6"
},
//
{ label: "军事最终用户清单", value: "6" },
{
label
:
"非SDN中国军工企业名单"
,
value
:
"7"
},
//
{ label: "非SDN中国军工企业名单", value: "7" },
{
label
:
"拒绝往来人员清单"
,
value
:
"8"
},
//
{ label: "拒绝往来人员清单", value: "8" },
{
label
:
"军事最终用途与最终用户规则"
,
value
:
"9"
},
//
{ label: "军事最终用途与最终用户规则", value: "9" },
{
label
:
"欧盟合并制裁清单"
,
value
:
"10"
},
//
{ label: "欧盟合并制裁清单", value: "10" },
{
label
:
"英国制裁清单"
,
value
:
"11"
},
//
{ label: "英国制裁清单", value: "11" },
{
label
:
"加拿大合并自主制裁清单"
,
value
:
"12"
},
//
{ label: "加拿大合并自主制裁清单", value: "12" },
{
label
:
"商业管制清单"
,
value
:
"13"
}
//
{ label: "商业管制清单", value: "13" }
]);
]);
const
handleGetSanList
=
async
()
=>
{
const
params
=
{
orgId
:
deptValue
.
value
};
try
{
const
res
=
await
getSanTypeList
(
params
);
console
.
log
(
"制裁手段列表"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
methodOptions
.
value
=
res
.
data
.
map
(
item
=>
{
return
{
label
:
item
.
name
,
value
:
item
.
id
};
});
}
}
catch
(
error
)
{}
};
const
getDepartmentListData
=
async
()
=>
{
const
getDepartmentListData
=
async
()
=>
{
const
params
=
{
sanTypeId
:
methodValue
.
value
};
try
{
try
{
const
res
=
await
getDepartmentList
();
const
res
=
await
getDepartmentList
(
params
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
if
(
res
.
code
===
200
&&
res
.
data
)
{
departmentList
.
value
=
res
.
data
;
departmentList
.
value
=
res
.
data
;
}
}
...
@@ -314,6 +335,21 @@ const getDepartmentListData = async () => {
...
@@ -314,6 +335,21 @@ const getDepartmentListData = async () => {
console
.
error
(
"获取部门数据失败:"
,
error
);
console
.
error
(
"获取部门数据失败:"
,
error
);
}
}
};
};
watch
(
()
=>
methodValue
.
value
,
val
=>
{
getDepartmentListData
();
}
);
watch
(
()
=>
deptValue
.
value
,
val
=>
{
handleGetSanList
();
}
);
const
rankType
=
ref
(
"institution"
);
const
rankType
=
ref
(
"institution"
);
const
rankLoading
=
ref
(
false
);
const
rankLoading
=
ref
(
false
);
const
selectedField
=
ref
(
""
);
const
selectedField
=
ref
(
""
);
...
@@ -976,7 +1012,7 @@ onMounted(() => {
...
@@ -976,7 +1012,7 @@ onMounted(() => {
// setChart(Chart, "chartRef");
// setChart(Chart, "chartRef");
handleGetDomainContainmentTrend
();
handleGetDomainContainmentTrend
();
getDepartmentListData
();
getDepartmentListData
();
handleGetSanList
();
handleGetAllDomainCount
();
handleGetAllDomainCount
();
handleGetDomainContainmentRanking
();
handleGetDomainContainmentRanking
();
handleGetDomainContainmentTimeline
();
handleGetDomainContainmentTimeline
();
...
...
src/views/ZMOverView/components/fourSuppress/components/allGovernment/index.vue
浏览文件 @
62317e7e
...
@@ -178,7 +178,7 @@
...
@@ -178,7 +178,7 @@
<div
class=
"bottom-content"
>
<div
class=
"bottom-content"
>
<div
class=
"timeline-container"
>
<div
class=
"timeline-container"
>
<div
class=
"timeline-list"
>
<div
class=
"timeline-list"
>
<div
v-for=
"(dept, index) in
filteredT
imelineList"
:key=
"index"
class=
"dept-row"
>
<div
v-for=
"(dept, index) in
t
imelineList"
:key=
"index"
class=
"dept-row"
>
<div
class=
"dept-info"
>
<div
class=
"dept-info"
>
<img
:src=
"dept.icon || defaultImg"
alt=
""
class=
"dept-icon"
/>
<img
:src=
"dept.icon || defaultImg"
alt=
""
class=
"dept-icon"
/>
<div
class=
"dept-text"
>
<div
class=
"dept-text"
>
...
@@ -191,8 +191,16 @@
...
@@ -191,8 +191,16 @@
v-for=
"(event, eIndex) in dept.events"
v-for=
"(event, eIndex) in dept.events"
:key=
"eIndex"
:key=
"eIndex"
class=
"event-card"
class=
"event-card"
:class=
"getCardColorClass(event.level)"
:class=
"
{
'card-red': event.level === 'red',
'card-yellow': event.level === 'yellow',
'card-green': event.level === 'green',
'card-white': event.level === 'white',
'card-default': !event.level
}"
@click="handleClickEventCard(event)"
>
>
<div
class=
"card-mask"
v-if=
"activeSanctionId && activeSanctionId !== event.sanctionId"
></div>
<div
class=
"card-top-line"
:class=
"getLineColorClass(event.level)"
></div>
<div
class=
"card-top-line"
:class=
"getLineColorClass(event.level)"
></div>
<div
class=
"event-header"
>
<div
class=
"event-header"
>
<div
class=
"event-date"
>
{{
event
.
date
}}
</div>
<div
class=
"event-date"
>
{{
event
.
date
}}
</div>
...
@@ -249,7 +257,9 @@ import {
...
@@ -249,7 +257,9 @@ import {
getUSGovernmentLatestDynamic
,
getUSGovernmentLatestDynamic
,
getUSGovernmentJointSanctionRank
,
getUSGovernmentJointSanctionRank
,
getUSGovernmentSanctionHistory
,
getUSGovernmentSanctionHistory
,
getDepartmentList
getDepartmentList
,
getSanTypeList
,
getThreeMonthSanctionProcess
}
from
"@/api/allGovernment.js"
;
}
from
"@/api/allGovernment.js"
;
const
router
=
useRouter
();
const
router
=
useRouter
();
...
@@ -279,16 +289,16 @@ const getUSGovernmentSanctionHistoryData = async () => {
...
@@ -279,16 +289,16 @@ const getUSGovernmentSanctionHistoryData = async () => {
const
params
=
{
const
params
=
{
// onlyHistory: measureType.value === "history",
// onlyHistory: measureType.value === "history",
// onlyFuture: measureType.value === "future",
// onlyFuture: measureType.value === "future",
onlyHistory
:
false
,
//
onlyHistory: false,
onlyFuture
:
true
,
//
onlyFuture: true,
field
:
selectedField
.
value
||
null
,
field
:
selectedField
.
value
||
null
startDate
:
new
Date
(),
//
startDate: new Date(),
endDate
:
new
Date
(
new
Date
().
setMonth
(
new
Date
().
getMonth
()
+
3
))
//
endDate: new Date(new Date().setMonth(new Date().getMonth() + 3))
};
};
const
res
=
await
get
USGovernmentSanctionHistory
(
params
);
const
res
=
await
get
ThreeMonthSanctionProcess
(
params
);
console
.
log
(
'遏制时间线'
,
res
);
console
.
log
(
"未来三个月打压遏制时间线"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
if
(
res
.
code
===
200
&&
res
.
data
)
{
// 如果返回的是 content 数组(分页结构)或直接是数组
// 如果返回的是 content 数组(分页结构)或直接是数组
const
rawList
=
res
.
data
.
content
||
res
.
data
;
const
rawList
=
res
.
data
.
content
||
res
.
data
;
...
@@ -319,10 +329,13 @@ const getUSGovernmentSanctionHistoryData = async () => {
...
@@ -319,10 +329,13 @@ const getUSGovernmentSanctionHistoryData = async () => {
date
:
item
.
postDate
?
item
.
postDate
.
replace
(
/^
(\d{4})
-
(\d{2})
-
(\d{2})
$/
,
"$1年$2月$3日"
)
:
""
,
date
:
item
.
postDate
?
item
.
postDate
.
replace
(
/^
(\d{4})
-
(\d{2})
-
(\d{2})
$/
,
"$1年$2月$3日"
)
:
""
,
content
:
item
.
name
||
item
.
summary
,
content
:
item
.
name
||
item
.
summary
,
tags
:
item
.
techDomainList
?
item
.
techDomainList
.
slice
(
0
,
2
)
:
[],
tags
:
item
.
techDomainList
?
item
.
techDomainList
.
slice
(
0
,
2
)
:
[],
level
:
level
level
:
level
,
sanctionId
:
item
.
sanctionId
});
});
});
});
timelineList
.
value
=
Object
.
values
(
grouped
);
timelineList
.
value
=
Object
.
values
(
grouped
);
console
.
log
(
"timelineList"
,
timelineList
.
value
);
initSlider
();
initSlider
();
}
}
}
catch
(
error
)
{
}
catch
(
error
)
{
...
@@ -469,18 +482,22 @@ const getUSChinaSanctionTrendData = async () => {
...
@@ -469,18 +482,22 @@ const getUSChinaSanctionTrendData = async () => {
};
};
// 全政府-获取部门数据
// 全政府-获取部门数据
const
departmentList
=
ref
([]);
const
departmentList
=
ref
([]);
const
loadingDepartment
=
ref
(
false
);
//
const loadingDepartment = ref(false);
const
getDepartmentListData
=
async
()
=>
{
const
getDepartmentListData
=
async
()
=>
{
loadingDepartment
.
value
=
true
;
// loadingDepartment.value = true;
const
params
=
{
sanTypeId
:
methodValue
.
value
};
try
{
try
{
const
res
=
await
getDepartmentList
();
const
res
=
await
getDepartmentList
(
params
);
console
.
log
(
"部门列表"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
if
(
res
.
code
===
200
&&
res
.
data
)
{
departmentList
.
value
=
res
.
data
;
departmentList
.
value
=
res
.
data
;
}
}
}
catch
(
error
)
{
}
catch
(
error
)
{
console
.
error
(
"获取部门数据失败:"
,
error
);
console
.
error
(
"获取部门数据失败:"
,
error
);
}
finally
{
}
finally
{
loadingDepartment
.
value
=
false
;
//
loadingDepartment.value = false;
}
}
};
};
...
@@ -672,22 +689,22 @@ const fieldOptions = ref([
...
@@ -672,22 +689,22 @@ const fieldOptions = ref([
]);
]);
const
methodOptions
=
ref
([
const
methodOptions
=
ref
([
{
label
:
"全部制裁手段"
,
value
:
""
},
//
{ label: "全部制裁手段", value: "" },
{
label
:
"法案"
,
value
:
"-1"
},
//
{ label: "法案", value: "-1" },
{
label
:
"政令"
,
value
:
"-2"
},
//
{ label: "政令", value: "-2" },
{
label
:
"实体清单"
,
value
:
"1"
},
//
{ label: "实体清单", value: "1" },
{
label
:
"特别国民指定清单"
,
value
:
"2"
},
//
{ label: "特别国民指定清单", value: "2" },
{
label
:
"涉军企业"
,
value
:
"3"
},
//
{ label: "涉军企业", value: "3" },
{
label
:
"行业制裁识别清单"
,
value
:
"4"
},
//
{ label: "行业制裁识别清单", value: "4" },
{
label
:
"无法核实清单"
,
value
:
"5"
},
//
{ label: "无法核实清单", value: "5" },
{
label
:
"军事最终用户清单"
,
value
:
"6"
},
//
{ label: "军事最终用户清单", value: "6" },
{
label
:
"非SDN中国军工企业名单"
,
value
:
"7"
},
//
{ label: "非SDN中国军工企业名单", value: "7" },
{
label
:
"拒绝往来人员清单"
,
value
:
"8"
},
//
{ label: "拒绝往来人员清单", value: "8" },
{
label
:
"军事最终用途与最终用户规则"
,
value
:
"9"
},
//
{ label: "军事最终用途与最终用户规则", value: "9" },
{
label
:
"欧盟合并制裁清单"
,
value
:
"10"
},
//
{ label: "欧盟合并制裁清单", value: "10" },
{
label
:
"英国制裁清单"
,
value
:
"11"
},
//
{ label: "英国制裁清单", value: "11" },
{
label
:
"加拿大合并自主制裁清单"
,
value
:
"12"
},
//
{ label: "加拿大合并自主制裁清单", value: "12" },
{
label
:
"商业管制清单"
,
value
:
"13"
}
//
{ label: "商业管制清单", value: "13" }
// { label: "232调查", value: "14" },
// { label: "232调查", value: "14" },
// { label: "Capta List (CAP) - Treasury Department", value: "15" },
// { label: "Capta List (CAP) - Treasury Department", value: "15" },
// { label: "ITAR Debarred (DTC) - State Department", value: "16" },
// { label: "ITAR Debarred (DTC) - State Department", value: "16" },
...
@@ -697,6 +714,38 @@ const methodOptions = ref([
...
@@ -697,6 +714,38 @@ const methodOptions = ref([
// { label: "经验证最终用户清单", value: "20" }
// { label: "经验证最终用户清单", value: "20" }
]);
]);
const
handleGetSanList
=
async
()
=>
{
const
params
=
{
orgId
:
deptValue
.
value
};
try
{
const
res
=
await
getSanTypeList
(
params
);
console
.
log
(
"制裁手段列表"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
methodOptions
.
value
=
res
.
data
.
map
(
item
=>
{
return
{
label
:
item
.
name
,
value
:
item
.
id
};
});
}
}
catch
(
error
)
{}
};
watch
(
()
=>
methodValue
.
value
,
val
=>
{
getDepartmentListData
();
}
);
watch
(
()
=>
deptValue
.
value
,
val
=>
{
handleGetSanList
();
}
);
const
dynamicList
=
ref
([]);
const
dynamicList
=
ref
([]);
const
getColorName
=
tag
=>
{
const
getColorName
=
tag
=>
{
...
@@ -973,6 +1022,16 @@ const initChart = (xAxisData = [], seriesData = []) => {
...
@@ -973,6 +1022,16 @@ const initChart = (xAxisData = [], seriesData = []) => {
myChart
.
setOption
(
option
);
myChart
.
setOption
(
option
);
};
};
const
activeSanctionId
=
ref
(
null
);
const
handleClickEventCard
=
item
=>
{
console
.
log
(
"item"
,
item
);
if
(
activeSanctionId
.
value
===
item
.
sanctionId
)
{
activeSanctionId
.
value
=
null
;
}
else
{
activeSanctionId
.
value
=
item
.
sanctionId
;
}
};
// 监听时间范围变化,重新获取趋势数据
// 监听时间范围变化,重新获取趋势数据
watch
(
watch
(
()
=>
activeDate
.
value
,
()
=>
activeDate
.
value
,
...
@@ -988,6 +1047,8 @@ watch([() => measureType.value, () => selectedField.value], () => {
...
@@ -988,6 +1047,8 @@ watch([() => measureType.value, () => selectedField.value], () => {
});
});
onMounted
(()
=>
{
onMounted
(()
=>
{
getDepartmentListData
();
handleGetSanList
();
initChart
();
initChart
();
initSlider
();
initSlider
();
getGovernmentList
();
getGovernmentList
();
...
@@ -995,7 +1056,7 @@ onMounted(() => {
...
@@ -995,7 +1056,7 @@ onMounted(() => {
getUSGovernmentLatestDynamicData
();
getUSGovernmentLatestDynamicData
();
getUSGovernmentJointSanctionRankData
();
getUSGovernmentJointSanctionRankData
();
getUSGovernmentSanctionHistoryData
();
getUSGovernmentSanctionHistoryData
();
getDepartmentListData
();
startAutoPlay
();
startAutoPlay
();
window
.
addEventListener
(
"resize"
,
()
=>
{
window
.
addEventListener
(
"resize"
,
()
=>
{
myChart
&&
myChart
.
resize
();
myChart
&&
myChart
.
resize
();
...
@@ -1790,6 +1851,16 @@ const prev = () => {
...
@@ -1790,6 +1851,16 @@ const prev = () => {
position
:
relative
;
position
:
relative
;
overflow
:
hidden
;
overflow
:
hidden
;
flex-shrink
:
0
;
flex-shrink
:
0
;
cursor
:
pointer
;
.card-mask
{
width
:
100%
;
height
:
100%
;
left
:
0
;
top
:
0
;
position
:
absolute
;
z-index
:
99
;
background
:
rgba
(
125
,
125
,
125
,
0
.8
)
!
important
;
}
&
.card-red
{
&
.card-red
{
background
:
linear-gradient
(
180deg
,
rgba
(
206
,
79
,
81
,
0
.08
)
0%
,
rgba
(
255
,
255
,
255
,
1
)
60%
);
background
:
linear-gradient
(
180deg
,
rgba
(
206
,
79
,
81
,
0
.08
)
0%
,
rgba
(
255
,
255
,
255
,
1
)
60%
);
...
...
src/views/ZMOverView/components/gameProfile/index.vue
浏览文件 @
62317e7e
...
@@ -49,6 +49,7 @@
...
@@ -49,6 +49,7 @@
default-expand-all
default-expand-all
:header-cell-style="{ 'border-right': 'none' }"
:header-cell-style="{ 'border-right': 'none' }"
:cell-style="{ 'border-right': 'none' }"
:cell-style="{ 'border-right': 'none' }"
height="600"
>
>
<!-- 自定义展开图标 -->
<!-- 自定义展开图标 -->
...
@@ -62,10 +63,9 @@
...
@@ -62,10 +63,9 @@
</div>
</div>
<div
<div
class=
"progress-wrapper left"
class=
"progress-wrapper left"
:style=
"
{ '--i': '40px', '--j': '-20px', marginLeft: '20px' }"
>
>
<el-progress
<el-progress
:percentage=
"scope.row.
china
Score"
:percentage=
"scope.row.
us
Score"
:stroke-width=
"20"
:stroke-width=
"20"
class=
"left-progress"
class=
"left-progress"
:show-text=
"false"
:show-text=
"false"
...
@@ -79,7 +79,7 @@
...
@@ -79,7 +79,7 @@
<div
style=
"display: flex"
>
<div
style=
"display: flex"
>
<div
class=
"progress-wrapper right"
:style=
"
{ '--i': '40px', marginRight: '20px' }">
<div
class=
"progress-wrapper right"
:style=
"
{ '--i': '40px', marginRight: '20px' }">
<el-progress
<el-progress
:percentage=
"scope.row.
us
Score"
:percentage=
"scope.row.
china
Score"
:stroke-width=
"20"
:stroke-width=
"20"
class=
"right-progress"
class=
"right-progress"
:class=
"
{ cLead: scope.row.chinaRank
<
scope
.
row
.
usRank
}"
:class=
"
{ cLead: scope.row.chinaRank
<
scope
.
row
.
usRank
}"
...
...
src/views/bill/billLayout/index.vue
浏览文件 @
62317e7e
...
@@ -269,7 +269,7 @@ onMounted(() => {
...
@@ -269,7 +269,7 @@ onMounted(() => {
overflow
:
hidden
;
overflow
:
hidden
;
}
}
.layout-main-header
{
.layout-main-header
{
width
:
1
744
px
;
width
:
1
600
px
;
background
:
#fff
;
background
:
#fff
;
display
:
flex
;
display
:
flex
;
justify-content
:
space-between
;
justify-content
:
space-between
;
...
@@ -361,8 +361,6 @@ onMounted(() => {
...
@@ -361,8 +361,6 @@ onMounted(() => {
}
}
.layout-main-header-right-box
{
.layout-main-header-right-box
{
width
:
600px
;
width
:
600px
;
// margin-right: 150px;
// margin-top: 19px;
.right-box-top
{
.right-box-top
{
.time
{
.time
{
height
:
24px
;
height
:
24px
;
...
...
src/views/bill/deepDig/poliContribution/index.vue
浏览文件 @
62317e7e
...
@@ -73,7 +73,7 @@
...
@@ -73,7 +73,7 @@
<div
class=
"title"
>
{{
"政治献金流向"
}}
</div>
<div
class=
"title"
>
{{
"政治献金流向"
}}
</div>
<div
class=
"header-right"
>
<div
class=
"header-right"
>
<div
class=
"more-btn"
v-if=
"fullSourceList.length > 5"
@
click=
"toggleSankeyData"
>
<div
class=
"more-btn"
v-if=
"fullSourceList.length > 5"
@
click=
"toggleSankeyData"
>
{{
showAllSankeyData
?
'收起'
:
'更多+'
}}
{{
showAllSankeyData
?
"收起"
:
"更多+"
}}
</div>
</div>
<div
class=
"right-icon"
>
<div
class=
"right-icon"
>
<img
src=
"@/assets/icons/box-header-icon1.png"
alt=
""
/>
<img
src=
"@/assets/icons/box-header-icon1.png"
alt=
""
/>
...
@@ -86,13 +86,18 @@
...
@@ -86,13 +86,18 @@
</div>
</div>
</div>
</div>
</div>
</div>
<div
class=
"box2-main"
id=
"chart1"
></div>
<div
class=
"box2-main"
>
<el-empty
v-if=
"!fullSourceList.length"
description=
"暂无数据"
:image-size=
"100"
/>
<div
class=
"chart-box2"
id=
"chart1"
></div>
</div>
<div
class=
"box-footer"
>
<div
class=
"box-footer"
>
<div
class=
"box-footer-left"
>
<div
class=
"box-footer-left"
>
<img
src=
"@/assets/icons/box-footer-left-icon.png"
alt=
""
/>
<img
src=
"@/assets/icons/box-footer-left-icon.png"
alt=
""
/>
</div>
</div>
<div
class=
"box-footer-center"
>
<div
class=
"box-footer-center"
>
{{
currentPersonName
}}
的政治资金主要依赖于一个由亿万富翁、特定行业利益集团及通过“超级政治行动委员会” 运作的大额捐款网络。
{{
currentPersonName
}}
的政治资金主要依赖于一个由亿万富翁、特定行业利益集团及通过“超级政治行动委员会”
运作的大额捐款网络。
</div>
</div>
<div
class=
"box-footer-right"
>
<div
class=
"box-footer-right"
>
<img
src=
"@/assets/icons/box-footer-right-icon.png"
alt=
""
/>
<img
src=
"@/assets/icons/box-footer-right-icon.png"
alt=
""
/>
...
@@ -118,6 +123,7 @@
...
@@ -118,6 +123,7 @@
<div
class=
"box3-main"
>
<div
class=
"box3-main"
>
<div
class=
"box3-main-left"
id=
"chart2"
></div>
<div
class=
"box3-main-left"
id=
"chart2"
></div>
<div
class=
"box3-main-right"
>
<div
class=
"box3-main-right"
>
<el-empty
v-if=
"!areaList.length"
description=
"暂无数据"
:image-size=
"100"
/>
<div
class=
"box3-main-right-item"
v-for=
"(item, index) in areaList"
:key=
"index"
>
<div
class=
"box3-main-right-item"
v-for=
"(item, index) in areaList"
:key=
"index"
>
<div
class=
"id"
>
{{
index
+
1
}}
</div>
<div
class=
"id"
>
{{
index
+
1
}}
</div>
<div
class=
"name"
>
{{
item
.
name
}}
</div>
<div
class=
"name"
>
{{
item
.
name
}}
</div>
...
@@ -134,7 +140,8 @@
...
@@ -134,7 +140,8 @@
<
img
src
=
"@/assets/icons/box-footer-left-icon.png"
alt
=
""
/>
<
img
src
=
"@/assets/icons/box-footer-left-icon.png"
alt
=
""
/>
<
/div
>
<
/div
>
<
div
class
=
"box-footer-center"
>
<
div
class
=
"box-footer-center"
>
{{
currentPersonName
}}
的政治资金主要依赖于一个由亿万富翁、特定行业利益集团及通过“超级政治行动委员会”
运作的大额捐款网络。
{{
currentPersonName
}}
的政治资金主要依赖于一个由亿万富翁、特定行业利益集团及通过“超级政治行动委员会”
运作的大额捐款网络。
<
/div
>
<
/div
>
<
div
class
=
"box-footer-right"
>
<
div
class
=
"box-footer-right"
>
<
img
src
=
"@/assets/icons/box-footer-right-icon.png"
alt
=
""
/>
<
img
src
=
"@/assets/icons/box-footer-right-icon.png"
alt
=
""
/>
...
@@ -426,7 +433,7 @@ const getPoliContribution = async () => {
...
@@ -426,7 +433,7 @@ const getPoliContribution = async () => {
const
res
=
await
getBillPoliContribution
(
params
);
const
res
=
await
getBillPoliContribution
(
params
);
if
(
res
.
code
===
200
)
{
if
(
res
.
code
===
200
)
{
poliContribution
.
value
=
res
.
data
;
poliContribution
.
value
=
res
.
data
;
// 重置为默认值
// 重置为默认值
partyContributionList
.
value
=
[
partyContributionList
.
value
=
[
{
name
:
"共和党"
,
img
:
Ghd
,
num
:
"$0"
}
,
{
name
:
"共和党"
,
img
:
Ghd
,
num
:
"$0"
}
,
...
@@ -520,16 +527,16 @@ const renderSankeyChart = () => {
...
@@ -520,16 +527,16 @@ const renderSankeyChart = () => {
if
(
sourceList
.
length
>
0
)
{
if
(
sourceList
.
length
>
0
)
{
const
currentPerson
=
mainPoliContribution
.
value
[
itemActiveIndex
.
value
];
const
currentPerson
=
mainPoliContribution
.
value
[
itemActiveIndex
.
value
];
const
personName
=
currentPerson
?
currentPerson
.
name
:
"Person"
;
const
personName
=
currentPerson
?
currentPerson
.
name
:
"Person"
;
const
totalAmount
=
sourceList
.
reduce
((
sum
,
item
)
=>
sum
+
(
item
.
amount
||
0
),
0
);
const
totalAmount
=
sourceList
.
reduce
((
sum
,
item
)
=>
sum
+
(
item
.
amount
||
0
),
0
);
const
nodes
=
[
const
nodes
=
[
{
{
name
:
personName
,
name
:
personName
,
value
:
totalAmount
,
value
:
totalAmount
,
label
:
{
position
:
'left'
}
,
label
:
{
position
:
"left"
}
,
itemStyle
:
{
itemStyle
:
{
color
:
'#FF1493'
color
:
"#FF1493"
}
}
}
,
}
,
...
sourceList
.
map
((
item
,
index
)
=>
({
...
sourceList
.
map
((
item
,
index
)
=>
({
...
@@ -540,13 +547,13 @@ const renderSankeyChart = () => {
...
@@ -540,13 +547,13 @@ const renderSankeyChart = () => {
}
}
}
))
}
))
];
];
const
links
=
sourceList
.
map
(
item
=>
({
const
links
=
sourceList
.
map
(
item
=>
({
source
:
item
.
orgName
,
source
:
item
.
orgName
,
target
:
personName
,
target
:
personName
,
value
:
item
.
amount
value
:
item
.
amount
}
));
}
));
let
chart1
=
getSankeyChart
(
nodes
,
links
);
let
chart1
=
getSankeyChart
(
nodes
,
links
);
setChart
(
chart1
,
"chart1"
);
setChart
(
chart1
,
"chart1"
);
}
else
{
}
else
{
...
@@ -562,7 +569,7 @@ const toggleSankeyData = () => {
...
@@ -562,7 +569,7 @@ const toggleSankeyData = () => {
// 获取人员政治献金来源及行业领域分布
// 获取人员政治献金来源及行业领域分布
const
personPoliContribution
=
ref
();
const
personPoliContribution
=
ref
();
const
getPersonPoliContribution
=
async
(
personId
)
=>
{
const
getPersonPoliContribution
=
async
personId
=>
{
if
(
!
personId
)
return
;
if
(
!
personId
)
return
;
const
params
=
{
const
params
=
{
id
:
window
.
sessionStorage
.
getItem
(
"billId"
),
id
:
window
.
sessionStorage
.
getItem
(
"billId"
),
...
@@ -574,20 +581,20 @@ const getPersonPoliContribution = async (personId) => {
...
@@ -574,20 +581,20 @@ const getPersonPoliContribution = async (personId) => {
console
.
log
(
"人员政治献金:"
,
res
);
console
.
log
(
"人员政治献金:"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
if
(
res
.
code
===
200
&&
res
.
data
)
{
personPoliContribution
.
value
=
res
.
data
;
personPoliContribution
.
value
=
res
.
data
;
fullSourceList
.
value
=
res
.
data
.
sourceList
||
[];
fullSourceList
.
value
=
res
.
data
.
sourceList
||
[];
showAllSankeyData
.
value
=
false
;
// Reset to default (top 5)
showAllSankeyData
.
value
=
false
;
// Reset to default (top 5)
renderSankeyChart
();
renderSankeyChart
();
// Update Industry List (Chart 2 and List)
// Update Industry List (Chart 2 and List)
const
industries
=
res
.
data
.
industryList
||
[];
const
industries
=
res
.
data
.
industryList
||
[];
// Update Chart 2 Data
// Update Chart 2 Data
chart2Data
.
value
=
industries
.
map
(
item
=>
({
chart2Data
.
value
=
industries
.
map
(
item
=>
({
name
:
item
.
industryName
,
name
:
item
.
industryName
,
value
:
item
.
amount
value
:
item
.
amount
}
));
}
));
// Re-render Chart 2
// Re-render Chart 2
let
chart2
=
getPieChart
(
chart2Data
.
value
,
chart2ColorList
.
value
);
let
chart2
=
getPieChart
(
chart2Data
.
value
,
chart2ColorList
.
value
);
setChart
(
chart2
,
"chart2"
);
setChart
(
chart2
,
"chart2"
);
...
@@ -595,7 +602,7 @@ const getPersonPoliContribution = async (personId) => {
...
@@ -595,7 +602,7 @@ const getPersonPoliContribution = async (personId) => {
// Update List Data
// Update List Data
// Sort by amount desc to ensure first item is max for progress bar
// Sort by amount desc to ensure first item is max for progress bar
const
sortedIndustries
=
[...
industries
].
sort
((
a
,
b
)
=>
(
b
.
amount
||
0
)
-
(
a
.
amount
||
0
));
const
sortedIndustries
=
[...
industries
].
sort
((
a
,
b
)
=>
(
b
.
amount
||
0
)
-
(
a
.
amount
||
0
));
areaList
.
value
=
sortedIndustries
.
map
(
item
=>
({
areaList
.
value
=
sortedIndustries
.
map
(
item
=>
({
name
:
item
.
industryName
,
name
:
item
.
industryName
,
num
:
item
.
amount
,
num
:
item
.
amount
,
...
@@ -606,7 +613,7 @@ const getPersonPoliContribution = async (personId) => {
...
@@ -606,7 +613,7 @@ const getPersonPoliContribution = async (personId) => {
personPoliContribution
.
value
=
[];
personPoliContribution
.
value
=
[];
fullSourceList
.
value
=
[];
fullSourceList
.
value
=
[];
renderSankeyChart
();
renderSankeyChart
();
chart2Data
.
value
=
[];
chart2Data
.
value
=
[];
areaList
.
value
=
[];
areaList
.
value
=
[];
let
chart2
=
getPieChart
([],
chart2ColorList
.
value
);
let
chart2
=
getPieChart
([],
chart2ColorList
.
value
);
...
@@ -635,7 +642,7 @@ const handlePersonClick = (item, index) => {
...
@@ -635,7 +642,7 @@ const handlePersonClick = (item, index) => {
onMounted
(()
=>
{
onMounted
(()
=>
{
getPoliContribution
();
getPoliContribution
();
getMainPoliContribution
();
getMainPoliContribution
();
let
chart1
=
getSankeyChart
();
let
chart1
=
getSankeyChart
();
setChart
(
chart1
,
"chart1"
);
setChart
(
chart1
,
"chart1"
);
...
@@ -944,6 +951,10 @@ onMounted(() => {
...
@@ -944,6 +951,10 @@ onMounted(() => {
height
:
302
px
;
height
:
302
px
;
margin
:
0
auto
;
margin
:
0
auto
;
margin
-
bottom
:
9
px
;
margin
-
bottom
:
9
px
;
.
chart
-
box2
{
width
:
1020
px
;
height
:
302
px
;
}
}
}
}
}
.
box3
{
.
box3
{
...
...
src/views/comprehensiveSearch/chat/index.vue
浏览文件 @
62317e7e
...
@@ -67,8 +67,16 @@
...
@@ -67,8 +67,16 @@
class=
"content ai-content"
class=
"content ai-content"
v-html=
"renderMarkdown(message.content)"
v-html=
"renderMarkdown(message.content)"
></div>
></div>
<div
v-if=
"message.raw_data?.length || message.raw_data?.rows?.length"
class=
"answer-title"
>
完整实体列表
</div>
<div
<div
v-if=
"message.raw_data?.length || message.raw_data?.rows?.length"
class=
"content row-content"
>
v-if=
"message.raw_data?.length || message.raw_data?.rows?.length"
class=
"answer-title"
>
完整实体列表
</div>
<div
v-if=
"message.raw_data?.length || message.raw_data?.rows?.length"
class=
"content row-content"
>
<div
class=
"row-header"
>
<div
class=
"row-header"
>
<div
class=
"row-header-item1"
>
{{
message
.
raw_data
.
columns
?.
name_zhs
}}
</div>
<div
class=
"row-header-item1"
>
{{
message
.
raw_data
.
columns
?.
name_zhs
}}
</div>
<div
class=
"row-header-item"
>
{{
message
.
raw_data
.
columns
?.
date
}}
</div>
<div
class=
"row-header-item"
>
{{
message
.
raw_data
.
columns
?.
date
}}
</div>
...
@@ -157,7 +165,7 @@
...
@@ -157,7 +165,7 @@
<img
src=
"./assets/images/attach.png"
alt=
""
/>
<img
src=
"./assets/images/attach.png"
alt=
""
/>
</el-tooltip>
</el-tooltip>
</div>
</div>
<div
class=
"select-box"
>
<
!-- <
div class="select-box">
<el-select v-model="curArea" placeholder="选择领域方向" style="width: 160px">
<el-select v-model="curArea" placeholder="选择领域方向" style="width: 160px">
<el-option
<el-option
v-for="item in areaList"
v-for="item in areaList"
...
@@ -166,7 +174,7 @@
...
@@ -166,7 +174,7 @@
:value="item.value"
:value="item.value"
/>
/>
</el-select>
</el-select>
</div>
</div>
-->
<div
class=
"submit"
@
click=
"sendMessage"
>
<div
class=
"submit"
@
click=
"sendMessage"
>
<el-tooltip
effect=
"dark"
content=
"发送"
placement=
"top"
>
<el-tooltip
effect=
"dark"
content=
"发送"
placement=
"top"
>
<img
src=
"./assets/images/submit.png"
alt=
""
/>
<img
src=
"./assets/images/submit.png"
alt=
""
/>
...
@@ -598,7 +606,7 @@ const handleBillChat = async question => {
...
@@ -598,7 +606,7 @@ const handleBillChat = async question => {
},
500
);
},
500
);
try
{
try
{
const
response
=
await
fetch
(
"/checklistChat/langgraph/
bills
/chat"
,
{
const
response
=
await
fetch
(
"/checklistChat/langgraph/
union
/chat"
,
{
method
:
"POST"
,
method
:
"POST"
,
headers
:
{
"Content-Type"
:
"application/json"
},
headers
:
{
"Content-Type"
:
"application/json"
},
body
:
JSON
.
stringify
(
params
)
body
:
JSON
.
stringify
(
params
)
...
@@ -925,13 +933,14 @@ const sendMessage = async () => {
...
@@ -925,13 +933,14 @@ const sendMessage = async () => {
userInput
.
value
=
""
;
userInput
.
value
=
""
;
aiMessage
.
value
=
""
;
aiMessage
.
value
=
""
;
if
(
curArea
.
value
===
"法案"
)
{
// if (curArea.value === "法案") {
handleBillChat
(
question
);
// handleBillChat(question);
}
else
if
(
curArea
.
value
===
"法案RAG"
)
{
// } else if (curArea.value === "法案RAG") {
await
connectSSE
(
question
);
// await connectSSE(question);
}
else
{
// } else {
handleListChat
(
question
);
// handleListChat(question);
}
// }
handleBillChat
(
question
);
};
};
const
newChatTitle
=
ref
(
""
);
// 新对话
const
newChatTitle
=
ref
(
""
);
// 新对话
...
...
src/views/comprehensiveSearch/searchResults/index.vue
浏览文件 @
62317e7e
...
@@ -152,7 +152,7 @@ const route = useRoute();
...
@@ -152,7 +152,7 @@ const route = useRoute();
const
selectTime
=
ref
(
"全部时间"
);
const
selectTime
=
ref
(
"全部时间"
);
const
selectRelation
=
ref
(
"相关度优先"
);
const
selectRelation
=
ref
(
"相关度优先"
);
const
keyword
=
ref
(
"
出口
"
);
const
keyword
=
ref
(
""
);
const
tabList
=
ref
([
const
tabList
=
ref
([
{
{
...
...
src/views/decree/decreeLayout/deepdig/index.vue
浏览文件 @
62317e7e
...
@@ -15,6 +15,7 @@
...
@@ -15,6 +15,7 @@
</div>
</div>
<div
class=
"box1-main"
>
<div
class=
"box1-main"
>
<div
class=
"left"
>
<div
class=
"left"
>
<el-empty
v-if=
"siderList.length === 0"
description=
"暂无数据"
:image-size=
"100"
/>
<div
<div
class=
"left-item"
class=
"left-item"
:class=
"
{ leftItemActive: siderActiveIndex === index }"
:class=
"
{ leftItemActive: siderActiveIndex === index }"
...
@@ -76,6 +77,7 @@
...
@@ -76,6 +77,7 @@
<div
class=
"title"
>
{{
"政令主要内容"
}}
</div>
<div
class=
"title"
>
{{
"政令主要内容"
}}
</div>
</div>
</div>
<div
class=
"list-main"
>
<div
class=
"list-main"
>
<el-empty
v-if=
"showList.length === 0"
description=
"暂无数据"
:image-size=
"200"
/>
<div
class=
"list-item"
v-for=
"(val, idx) in showList"
:key=
"idx"
>
<div
class=
"list-item"
v-for=
"(val, idx) in showList"
:key=
"idx"
>
<div
class=
"id"
>
{{
idx
+
1
}}
</div>
<div
class=
"id"
>
{{
idx
+
1
}}
</div>
<div
class=
"title"
>
{{
val
.
content
}}
</div>
<div
class=
"title"
>
{{
val
.
content
}}
</div>
...
@@ -157,7 +159,7 @@ const siderList = ref([
...
@@ -157,7 +159,7 @@ const siderList = ref([
const
siderActiveIndex
=
ref
(
0
);
const
siderActiveIndex
=
ref
(
0
);
const
handleClickSider
=
async
index
=>
{
const
handleClickSider
=
async
index
=>
{
siderActiveIndex
.
value
=
index
;
siderActiveIndex
.
value
=
index
;
decreeInfo
.
value
.
id
=
allData
.
value
[
index
].
id
decreeInfo
.
value
.
id
=
allData
.
value
[
index
].
id
;
decreeInfo
.
value
.
img
=
allData
.
value
[
index
].
imageUrl
;
decreeInfo
.
value
.
img
=
allData
.
value
[
index
].
imageUrl
;
decreeInfo
.
value
.
totalTitle
=
allData
.
value
[
index
].
name
;
decreeInfo
.
value
.
totalTitle
=
allData
.
value
[
index
].
name
;
decreeInfo
.
value
.
eTotalTitle
=
allData
.
value
[
index
].
ename
;
decreeInfo
.
value
.
eTotalTitle
=
allData
.
value
[
index
].
ename
;
...
@@ -264,8 +266,8 @@ const handleGetRelateOrder = async () => {
...
@@ -264,8 +266,8 @@ const handleGetRelateOrder = async () => {
}
;
}
;
const
handleToDecreeDetail
=
item
=>
{
const
handleToDecreeDetail
=
item
=>
{
console
.
log
(
'item'
,
item
.
id
);
console
.
log
(
"item"
,
item
.
id
);
window
.
sessionStorage
.
setItem
(
'curTabName'
,
item
.
totalTitle
)
window
.
sessionStorage
.
setItem
(
"curTabName"
,
item
.
totalTitle
);
const
route
=
router
.
resolve
({
const
route
=
router
.
resolve
({
path
:
"/decreeLayout/overview/introduction"
,
path
:
"/decreeLayout/overview/introduction"
,
query
:
{
query
:
{
...
...
src/views/decree/decreeLayout/index.vue
浏览文件 @
62317e7e
...
@@ -348,7 +348,9 @@ onMounted(() => {
...
@@ -348,7 +348,9 @@ onMounted(() => {
.layout-main
{
.layout-main
{
width
:
100%
;
width
:
100%
;
.layout-main-header
{
.layout-main-header
{
width
:
1600px
;
height
:
137px
;
height
:
137px
;
margin
:
0
auto
;
background
:
rgba
(
255
,
255
,
255
,
1
);
background
:
rgba
(
255
,
255
,
255
,
1
);
display
:
flex
;
display
:
flex
;
justify-content
:
space-between
;
justify-content
:
space-between
;
...
@@ -357,7 +359,6 @@ onMounted(() => {
...
@@ -357,7 +359,6 @@ onMounted(() => {
z-index
:
99999999
;
z-index
:
99999999
;
.layout-main-header-left-box
{
.layout-main-header-left-box
{
width
:
1100px
;
width
:
1100px
;
margin-left
:
160px
;
margin-top
:
13px
;
margin-top
:
13px
;
.left-box-top
{
.left-box-top
{
height
:
64px
;
height
:
64px
;
...
@@ -468,7 +469,6 @@ onMounted(() => {
...
@@ -468,7 +469,6 @@ onMounted(() => {
}
}
.layout-main-header-right-box
{
.layout-main-header-right-box
{
width
:
300px
;
width
:
300px
;
margin-right
:
150px
;
margin-top
:
19px
;
margin-top
:
19px
;
.right-box-top
{
.right-box-top
{
.time
{
.time
{
...
...
src/views/decree/decreeLayout/overview/background/index.vue
浏览文件 @
62317e7e
...
@@ -62,6 +62,7 @@
...
@@ -62,6 +62,7 @@
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
div
class
=
"box2-main"
>
<
div
class
=
"box2-main"
>
<
el
-
empty
v
-
if
=
"!relatedEvents.length"
description
=
"暂无数据"
:
image
-
size
=
"100"
/>
<
div
class
=
"box2-item"
v
-
for
=
"(item, index) in relatedEvents"
:
key
=
"index"
>
<
div
class
=
"box2-item"
v
-
for
=
"(item, index) in relatedEvents"
:
key
=
"index"
>
<
div
class
=
"item-left"
>
<
div
class
=
"item-left"
>
<
img
:
src
=
"item.image"
alt
=
""
/>
<
img
:
src
=
"item.image"
alt
=
""
/>
...
@@ -100,6 +101,7 @@
...
@@ -100,6 +101,7 @@
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
div
class
=
"box3-main"
>
<
div
class
=
"box3-main"
>
<
el
-
empty
v
-
if
=
"!laws.length"
description
=
"暂无数据"
:
image
-
size
=
"100"
/>
<
div
class
=
"box3-item"
v
-
for
=
"(item, index) in laws"
:
key
=
"index"
@
click
=
"handleToBillDetail(item)"
>
<
div
class
=
"box3-item"
v
-
for
=
"(item, index) in laws"
:
key
=
"index"
@
click
=
"handleToBillDetail(item)"
>
<
div
class
=
"id"
>
{{
index
+
1
}}
<
/div
>
<
div
class
=
"id"
>
{{
index
+
1
}}
<
/div
>
<
div
class
=
"item-header"
>
<
div
class
=
"item-header"
>
...
@@ -205,20 +207,7 @@ const handleGetRelateEvents = async () => {
...
@@ -205,20 +207,7 @@ const handleGetRelateEvents = async () => {
}
;
}
;
// 法律依据
// 法律依据
const
laws
=
ref
([
const
laws
=
ref
([]);
{
title
:
"《美国法典》"
,
info
:
"第3编第301条"
,
content
:
"允许总统通过行政命令(Executive Order) 或其它书面形式授权行政部门或机构的负责人(如国务卿、财政部长等)代行本属于总统的法定职能(由国会立法授予总统的职能)。"
}
,
{
title
:
"《出口管制改革法案》"
,
info
:
""
,
content
:
"该法案授权政府出于国家安全和外交政策目的对特定技术、商品和软件的出口进行管制。确保AI技术不流向“对手国家”是其题中应有之义。"
}
]);
const
handleGetLaws
=
async
()
=>
{
const
handleGetLaws
=
async
()
=>
{
const
params
=
{
const
params
=
{
id
:
decreeId
.
value
id
:
decreeId
.
value
...
@@ -246,7 +235,7 @@ const handleMouseMove = event => {
...
@@ -246,7 +235,7 @@ const handleMouseMove = event => {
}
;
}
;
const
handleToBillDetail
=
item
=>
{
const
handleToBillDetail
=
item
=>
{
window
.
sessionStorage
.
setItem
(
'curTabName'
,
item
.
title
)
window
.
sessionStorage
.
setItem
(
"curTabName"
,
item
.
title
);
const
route
=
router
.
resolve
({
const
route
=
router
.
resolve
({
path
:
"/billLayout"
,
path
:
"/billLayout"
,
query
:
{
query
:
{
...
...
src/views/decree/decreeLayout/overview/introduction/index.vue
浏览文件 @
62317e7e
...
@@ -84,6 +84,7 @@
...
@@ -84,6 +84,7 @@
</div>
</div>
</div>
</div>
<div
class=
"box2-main"
>
<div
class=
"box2-main"
>
<el-empty
v-if=
"!curmajorList.length"
description=
"暂无数据"
:image-size=
"100"
/>
<div
class=
"box2-item"
v-for=
"(item, index) in curmajorList"
:key=
"index"
>
<div
class=
"box2-item"
v-for=
"(item, index) in curmajorList"
:key=
"index"
>
<div
class=
"id"
>
{{ index + 1 }}
</div>
<div
class=
"id"
>
{{ index + 1 }}
</div>
<div
class=
"title"
>
{{ item.content }}
</div>
<div
class=
"title"
>
{{ item.content }}
</div>
...
@@ -189,7 +190,12 @@ import { useRoute } from "vue-router";
...
@@ -189,7 +190,12 @@ import { useRoute } from "vue-router";
import
router
from
"@/router"
;
import
router
from
"@/router"
;
import
box1Img
from
"./assets/images/box1-img.png"
;
import
box1Img
from
"./assets/images/box1-img.png"
;
import
Box3Logo
from
"./assets/images/box3-img.png"
;
import
Box3Logo
from
"./assets/images/box3-img.png"
;
import
{
getDecreeBasicInfo
,
getDecreeMainContent
,
getDecreeOrganization
,
getDecreeIssueOrganization
}
from
"@/api/decree/introduction"
;
import
{
getDecreeBasicInfo
,
getDecreeMainContent
,
getDecreeOrganization
,
getDecreeIssueOrganization
}
from
"@/api/decree/introduction"
;
import
DefaultIcon1
from
"@/assets/icons/default-icon1.png"
;
import
DefaultIcon1
from
"@/assets/icons/default-icon1.png"
;
import
DefaultIcon2
from
"@/assets/icons/default-icon2.png"
;
import
DefaultIcon2
from
"@/assets/icons/default-icon2.png"
;
...
@@ -278,12 +284,10 @@ const box3TopTopData = ref({
...
@@ -278,12 +284,10 @@ const box3TopTopData = ref({
id
:
""
,
id
:
""
,
logo
:
""
,
logo
:
""
,
name
:
""
,
name
:
""
,
eName
:
""
,
eName
:
""
});
});
const
box3TopBottomData
=
ref
([
const
box3TopBottomData
=
ref
([]);
]);
// 跳转行政机构主页
// 跳转行政机构主页
const
handleToInstitution
=
item
=>
{
const
handleToInstitution
=
item
=>
{
...
@@ -320,21 +324,20 @@ const handleGetOrgnization = async () => {
...
@@ -320,21 +324,20 @@ const handleGetOrgnization = async () => {
const
res
=
await
getDecreeIssueOrganization
(
params
);
const
res
=
await
getDecreeIssueOrganization
(
params
);
console
.
log
(
"发布机构"
,
res
);
console
.
log
(
"发布机构"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
if
(
res
.
code
===
200
&&
res
.
data
)
{
box3TopTopData
.
value
.
id
=
res
.
data
.
id
box3TopTopData
.
value
.
id
=
res
.
data
.
id
;
box3TopTopData
.
value
.
logo
=
res
.
data
.
image
box3TopTopData
.
value
.
logo
=
res
.
data
.
image
;
box3TopTopData
.
value
.
name
=
res
.
data
.
name
box3TopTopData
.
value
.
name
=
res
.
data
.
name
;
box3TopTopData
.
value
.
eName
=
res
.
data
.
ename
box3TopTopData
.
value
.
eName
=
res
.
data
.
ename
;
eventList
.
value
=
res
.
data
.
newsList
eventList
.
value
=
res
.
data
.
newsList
;
box3TopBottomData
.
value
=
res
.
data
.
personList
box3TopBottomData
.
value
=
res
.
data
.
personList
;
}
}
}
catch
(
error
)
{
}
catch
(
error
)
{
console
.
error
(
"执行机构error"
,
error
);
console
.
error
(
"执行机构error"
,
error
);
box3TopTopData
.
value
=
{
box3TopTopData
.
value
=
{
id
:
""
,
id
:
""
,
logo
:
""
,
logo
:
""
,
name
:
""
,
name
:
""
,
eName
:
""
,
eName
:
""
};
};
eventList
.
value
=
[];
eventList
.
value
=
[];
}
}
...
@@ -725,7 +728,7 @@ onMounted(() => {
...
@@ -725,7 +728,7 @@ onMounted(() => {
line-height
:
24px
;
line-height
:
24px
;
letter-spacing
:
0px
;
letter-spacing
:
0px
;
text-align
:
left
;
text-align
:
left
;
overflow
:
hidden
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
;
white-space
:
nowrap
;
}
}
...
...
src/views/exportControl/v2.0CommercialControlList/components/sanctionsOverview/components/introductionPage/index.vue
浏览文件 @
62317e7e
...
@@ -42,6 +42,7 @@
...
@@ -42,6 +42,7 @@
:class=
"['button',
{'click': item.isClick}]"
:class=
"['button',
{'click': item.isClick}]"
@click="changeECCN(item)"
@click="changeECCN(item)"
v-for="(item, i) in ECCNList"
v-for="(item, i) in ECCNList"
:key="i"
>
>
<span>
第
{{
item
.
ranking
}}
位
{{
item
.
name
}}
</span>
<span>
第
{{
item
.
ranking
}}
位
{{
item
.
name
}}
</span>
</div>
</div>
...
@@ -87,7 +88,7 @@
...
@@ -87,7 +88,7 @@
</div>
</div>
<div
class=
"img-zone"
>
<div
class=
"img-zone"
>
<img
:src=
"item.icon || title"
alt
/>
<img
:src=
"item.icon || title"
alt
/>
<div
:class=
"['img-line',
{'img-line-last': i === sanctionList.length - 1}]">
</div>
<div
v-if=
"i
<
sanctionList
.
length
-
1
"
:class=
"['img-line',
{'img-line-last': i === sanctionList.length - 1}]">
</div>
</div>
</div>
<div
class=
"main"
>
<div
class=
"main"
>
<div
class=
"main-title"
>
{{
item
.
name
}}
</div>
<div
class=
"main-title"
>
{{
item
.
name
}}
</div>
...
@@ -638,6 +639,7 @@ onMounted(() => {
...
@@ -638,6 +639,7 @@ onMounted(() => {
.
table
-
class
{
.
table
-
class
{
width
:
1013
px
;
width
:
1013
px
;
height
:
auto
;
height
:
auto
;
padding
-
bottom
:
10
px
;
margin
-
top
:
16
px
;
margin
-
top
:
16
px
;
margin
-
left
:
24
px
;
margin
-
left
:
24
px
;
color
:
rgb
(
59
,
65
,
75
);
color
:
rgb
(
59
,
65
,
75
);
...
@@ -651,7 +653,7 @@ onMounted(() => {
...
@@ -651,7 +653,7 @@ onMounted(() => {
}
}
.
left
-
bottom
{
.
left
-
bottom
{
width
:
100
%
;
width
:
100
%
;
min
-
height
:
1000
px
;
//
min-height: 1000px;
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
-
color
:
#
fff
;
background
-
color
:
#
fff
;
...
@@ -668,13 +670,13 @@ onMounted(() => {
...
@@ -668,13 +670,13 @@ onMounted(() => {
}
}
}
}
.
left
-
bottom
-
main
{
.
left
-
bottom
-
main
{
padding
:
16
px
42
px
0
25
px
;
padding
:
16
px
42
px
20
px
25
px
;
.
sanction
-
list
{
.
sanction
-
list
{
width
:
1169
px
;
width
:
1169
px
;
// padding: 0px 0 12px 0;
// padding: 0px 0 12px 0;
display
:
flex
;
display
:
flex
;
// justify-content: flex-start;
// justify-content: flex-start;
height
:
154
px
;
//
height: 154px;
.
time
{
.
time
{
width
:
80
px
;
width
:
80
px
;
height
:
50
px
;
height
:
50
px
;
...
...
src/views/exportControl/v2.0SingleSanction/components/impactAnalysis/components/researchImpact/index.vue
浏览文件 @
62317e7e
差异被折叠。
点击展开。
src/views/newsAnalysis/index.vue
浏览文件 @
62317e7e
...
@@ -70,7 +70,8 @@
...
@@ -70,7 +70,8 @@
<div
class=
"title"
>
{{
"相关新闻"
}}
</div>
<div
class=
"title"
>
{{
"相关新闻"
}}
</div>
</div>
</div>
<div
class=
"box2-main"
>
<div
class=
"box2-main"
>
<div
class=
"box2-item"
v-for=
"(item, index) in relevantNews"
:key=
"index"
>
<el-empty
v-if=
"!relevantNews.length"
description=
"暂无数据"
:image-size=
"200"
/>
<div
v-else
class=
"box2-item"
v-for=
"(item, index) in relevantNews"
:key=
"index"
>
<div
class=
"box2-item-left"
>
<div
class=
"box2-item-left"
>
<img
:src=
"item.newsImage"
alt=
""
/>
<img
:src=
"item.newsImage"
alt=
""
/>
</div>
</div>
...
@@ -194,8 +195,6 @@ const handleGetNewsEvent = async () => {
...
@@ -194,8 +195,6 @@ const handleGetNewsEvent = async () => {
}
}
};
};
const
handleWarning
=
()
=>
{
const
handleWarning
=
()
=>
{
ElMessage
.
warning
(
"当前功能正在开发中,敬请期待!"
);
ElMessage
.
warning
(
"当前功能正在开发中,敬请期待!"
);
return
;
return
;
...
@@ -256,7 +255,7 @@ const handleGetRelationNews = async () => {
...
@@ -256,7 +255,7 @@ const handleGetRelationNews = async () => {
const
res
=
await
getRelationNews
(
params
);
const
res
=
await
getRelationNews
(
params
);
console
.
log
(
"相关新闻"
,
res
);
console
.
log
(
"相关新闻"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
if
(
res
.
code
===
200
&&
res
.
data
)
{
relevantNews
.
value
=
res
.
data
relevantNews
.
value
=
res
.
data
;
}
else
{
}
else
{
relevantNews
.
value
=
[];
relevantNews
.
value
=
[];
}
}
...
@@ -265,7 +264,6 @@ const handleGetRelationNews = async () => {
...
@@ -265,7 +264,6 @@ const handleGetRelationNews = async () => {
}
}
};
};
onMounted
(()
=>
{
onMounted
(()
=>
{
handleGetNewsSummary
();
handleGetNewsSummary
();
handleGetNewsContent
();
handleGetNewsContent
();
...
...
src/views/thinkTank/ReportDetail/index.vue
浏览文件 @
62317e7e
...
@@ -130,18 +130,18 @@ onMounted(async () => {
...
@@ -130,18 +130,18 @@ onMounted(async () => {
height
:
188px
;
height
:
188px
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
border-bottom
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
border-bottom
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
border-top
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
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
);
position
:
sticky
;
position
:
sticky
;
top
:
0
;
top
:
0
;
z-index
:
99999999
;
z-index
:
99999
;
overflow
:
hidden
;
.header-top
{
.header-top
{
margin
:
0
auto
;
margin-top
:
20px
;
margin-top
:
20px
;
margin-left
:
16
0px
;
width
:
160
0px
;
display
:
flex
;
display
:
flex
;
justify-content
:
space-between
;
justify-content
:
space-between
;
margin-right
:
160px
;
.header-top-left
{
.header-top-left
{
display
:
flex
;
display
:
flex
;
...
...
src/views/thinkTank/ThinkTankDetail/index.vue
浏览文件 @
62317e7e
...
@@ -95,19 +95,21 @@ onMounted(async () => {
...
@@ -95,19 +95,21 @@ onMounted(async () => {
overflow
:
hidden
;
overflow
:
hidden
;
overflow-y
:
auto
;
overflow-y
:
auto
;
.header
{
.header
{
width
:
1
920px
;
width
:
1
00%
;
height
:
188px
;
height
:
188px
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
padding
:
0
160px
;
padding
:
0
160px
;
border-bottom
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
border-bottom
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
border-top
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
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
);
position
:
relative
;
position
:
relative
;
position
:
sticky
;
position
:
sticky
;
top
:
0
;
top
:
0
;
z-index
:
99999999
;
z-index
:
99999
;
overflow
:
hidden
;
.header-top
{
.header-top
{
width
:
1600px
;
margin
:
0
auto
;
margin-top
:
24px
;
margin-top
:
24px
;
display
:
flex
;
display
:
flex
;
...
@@ -187,11 +189,10 @@ onMounted(async () => {
...
@@ -187,11 +189,10 @@ onMounted(async () => {
}
}
.header-footer
{
.header-footer
{
width
:
340px
;
width
:
1600px
;
margin
:
0
auto
;
margin-top
:
25px
;
height
:
48px
;
height
:
48px
;
position
:
absolute
;
bottom
:
0
;
left
:
160px
;
display
:
flex
;
display
:
flex
;
gap
:
24px
;
gap
:
24px
;
...
...
src/views/thinkTank/index.vue
浏览文件 @
62317e7e
...
@@ -3068,8 +3068,8 @@ onMounted(async () => {
...
@@ -3068,8 +3068,8 @@ onMounted(async () => {
}
}
.box6-main
{
.box6-main
{
margin
:
15px
;
margin
:
5px
15px
;
height
:
3
60
px
;
height
:
3
95
px
;
}
}
}
}
}
}
...
...
src/views/thinkTank/utils/piechart.js
浏览文件 @
62317e7e
...
@@ -23,7 +23,7 @@ const getPieChart = (data) => {
...
@@ -23,7 +23,7 @@ const getPieChart = (data) => {
formatter
:
'{name|{b}}
\
n{time|{c} 条 {d}%}'
,
formatter
:
'{name|{b}}
\
n{time|{c} 条 {d}%}'
,
minMargin
:
5
,
minMargin
:
5
,
edgeDistance
:
10
,
edgeDistance
:
10
,
lineHeight
:
2
4
,
lineHeight
:
2
0
,
rich
:
{
rich
:
{
name
:
{
name
:
{
fontSize
:
16
,
fontSize
:
16
,
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论