Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
risk-monitor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
1
合并请求
1
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蔡建
risk-monitor
Commits
419454dc
提交
419454dc
authored
3月 28, 2026
作者:
yanpeng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修复一些合并时出现的问题
上级
816965e6
隐藏空白字符变更
内嵌
并排
正在显示
9 个修改的文件
包含
77 行增加
和
70 行删除
+77
-70
index.vue
src/views/exportControl/index.vue
+3
-3
index.vue
...omponents/sanctionsOverview/components/listPage/index.vue
+50
-10
index.vue
src/views/exportControl/v2.0CommercialControlList/index.vue
+1
-1
index.vue
...ontrol/v2.0EntityList/components/dataStatistics/index.vue
+4
-4
index.vue
...ol/v2.0SingleSanction/components/dataStatistics/index.vue
+4
-12
index.vue
...ents/impactAnalysis/components/industrialImpact/index.vue
+4
-4
index.vue
...onents/impactAnalysis/components/researchImpact/index.vue
+4
-26
index.vue
...v2.0SingleSanction/components/sanctionsOverview/index.vue
+6
-4
index.vue
src/views/exportControl/v2.0SingleSanction/index.vue
+1
-6
没有找到文件。
src/views/exportControl/index.vue
浏览文件 @
419454dc
...
...
@@ -384,7 +384,7 @@
</div>
<div
class=
"ai-pane"
>
<AiButton
/>
<AiPane
:aiContent=
"radarChart.
loading ? '解读生成中...' : radarChart.
interpretation"
/>
<AiPane
:aiContent=
"radarChart.interpretation"
/>
</div>
</
template
>
</custom-container>
...
...
@@ -409,7 +409,7 @@
</div>
<div
class=
"ai-pane"
>
<AiButton
/>
<AiPane
:aiContent=
"trendChart.
loading ? '解读生成中...' : trendChart.
interpretation"
/>
<AiPane
:aiContent=
"trendChart.interpretation"
/>
</div>
</
template
>
</custom-container>
...
...
@@ -1663,7 +1663,7 @@ const handlePerClick = item => {
const
route
=
router
.
resolve
({
path
:
"/characterPage"
,
query
:
{
type
:
item
.
t
ype
||
[
1
,
2
,
3
][
Math
.
floor
(
Math
.
random
()
*
3
)],
type
:
item
.
personT
ype
||
[
1
,
2
,
3
][
Math
.
floor
(
Math
.
random
()
*
3
)],
personId
:
item
.
personId
}
});
...
...
src/views/exportControl/v2.0CommercialControlList/components/sanctionsOverview/components/listPage/index.vue
浏览文件 @
419454dc
...
...
@@ -60,7 +60,7 @@
<div
class=
"list-content"
v-for=
"(ele, j) in element.cclChildren"
:key=
"j"
>
<div
class=
"content-title"
@
click=
"ele.isExpand = !ele.isExpand"
>
<div
class=
"code-zone"
>
<
!--
<div
class=
"dot"
v-if=
"ele.isDot"
></div>
--
>
<
div
class=
"dot"
v-if=
"ele.changeFlag"
></div
>
<span
class=
"code"
>
{{
ele
.
cclCode
}}
</span>
</div>
<span
class=
"name"
>
{{
ele
.
cclTitleZh
}}
</span>
...
...
@@ -121,9 +121,9 @@ const getTechFields = async () => {
const
res
=
await
getAreaType
();
if
(
res
&&
res
.
code
===
200
)
{
console
.
log
(
"-----getTechFields"
,
res
.
data
);
techFields
.
value
=
res
.
data
;
techFields
.
value
=
[{
id
:
"all"
,
name
:
"全部领域"
,
checked
:
true
}].
concat
(
res
.
data
)
;
// 默认选中第一个
techFields
.
value
[
0
].
checked
=
true
;
//
techFields.value[0].checked = true;
}
}
catch
(
error
)
{
console
.
error
(
"获取科技领域字典失败:"
,
error
);
...
...
@@ -136,9 +136,9 @@ const getControlReasonList = async () => {
const
res
=
await
getControlReason
();
if
(
res
&&
res
.
code
===
200
)
{
console
.
log
(
"-----getControlReasonList"
,
res
.
data
);
controlReason
.
value
=
res
.
data
;
controlReason
.
value
=
[{
id
:
"all"
,
name
:
"全部"
,
checked
:
true
}].
concat
(
res
.
data
)
;
// 默认选中第一个
controlReason
.
value
[
0
].
checked
=
true
;
//
controlReason.value[0].checked = true;
}
}
catch
(
error
)
{
console
.
error
(
"获取管控原因字典失败:"
,
error
);
...
...
@@ -151,8 +151,19 @@ const viewNew = ref(true);
// 获取ccl清单列表
const
getCclList
=
async
()
=>
{
let
techDomains
=
techFields
.
value
.
filter
(
item
=>
item
.
checked
).
map
(
item
=>
+
item
.
id
);
let
controls
=
controlReason
.
value
.
filter
(
item
=>
item
.
checked
).
map
(
item
=>
+
item
.
id
);
let
techDomains
=
[];
const
allTech
=
techFields
.
value
.
find
(
item
=>
item
.
id
===
"all"
);
// ✅ 修正点1
if
(
!
allTech
||
!
allTech
.
checked
)
{
techDomains
=
techFields
.
value
.
filter
(
item
=>
item
.
checked
&&
item
.
id
!==
"all"
).
map
(
item
=>
item
.
id
);
// 注意:这里 map 的是 value,假设后端需要的是 value 字段
}
let
controls
=
[];
const
allReason
=
controlReason
.
value
.
find
(
item
=>
item
.
id
===
"all"
);
// ✅ 修正点2
if
(
!
allReason
||
!
allReason
.
checked
)
{
controls
=
controlReason
.
value
.
filter
(
item
=>
item
.
checked
&&
item
.
id
!==
"all"
).
map
(
item
=>
item
.
id
);
}
// let techDomains = techFields.value.filter(item => item.checked).map(item => +item.id);
// let controls = controlReason.value.filter(item => item.checked).map(item => +item.id);
const
params
=
{
categoryCode
:
currentCCLType
.
value
,
techDomainIds
:
techDomains
,
...
...
@@ -161,7 +172,7 @@ const getCclList = async () => {
isLatest
:
viewNew
.
value
,
recordId
:
currentCCLVersion
.
value
||
""
};
console
.
log
(
JSON
.
stringify
(
params
)
);
console
.
log
(
"cclList参数:"
,
params
);
try
{
// const res = await getCclQuery(null);
const
res
=
await
getCclQuery
(
params
);
...
...
@@ -272,8 +283,34 @@ const getCCLVersionListApi = async () => {
};
// 筛选逻辑处理
const
handleFilterChange
=
(
item
,
list
,
type
)
=>
{
console
.
log
(
item
,
list
,
type
);
const
handleFilterChange
=
(
item
,
listRef
,
type
)
=>
{
const
list
=
listRef
;
const
allItem
=
list
.
find
(
i
=>
i
.
id
===
"all"
);
// ✅ 关键修正
if
(
!
allItem
)
return
;
if
(
item
.
id
===
"all"
)
{
if
(
item
.
checked
)
{
list
.
forEach
(
i
=>
{
if
(
i
.
id
!==
"all"
)
i
.
checked
=
false
;
});
}
else
{
const
hasOtherChecked
=
list
.
some
(
i
=>
i
.
id
!==
"all"
&&
i
.
checked
);
if
(
!
hasOtherChecked
&&
list
.
length
>
1
)
{
const
firstNonAll
=
list
.
find
(
i
=>
i
.
id
!==
"all"
);
if
(
firstNonAll
)
firstNonAll
.
checked
=
true
;
}
}
}
else
{
if
(
item
.
checked
)
{
allItem
.
checked
=
false
;
}
else
{
const
hasAnyChecked
=
list
.
some
(
i
=>
i
.
id
!==
"all"
&&
i
.
checked
);
if
(
!
hasAnyChecked
)
{
allItem
.
checked
=
true
;
}
}
}
getCclList
();
};
...
...
@@ -373,6 +410,9 @@ onMounted(async () => {
:deep
(
.el-input__wrapper
)
{
padding
:
0
11px
;
border
:
1px
solid
rgba
(
0
,
0
,
0
,
0
.1
);
background-color
:
#fff
;
border-radius
:
3px
;
}
:deep
(
.el-input__inner
)
{
...
...
src/views/exportControl/v2.0CommercialControlList/index.vue
浏览文件 @
419454dc
...
...
@@ -10,7 +10,7 @@
</div>
<div
class=
"department"
>
{{
headerTitle
.
department
}}
</div>
</div>
<
div
class=
"btn"
><img
:src=
"icon01"
alt
/>
切换
</div
>
<
!--
<div
class=
"btn"
><img
:src=
"icon01"
alt
/>
切换
</div>
--
>
</div>
<div
class=
"header-nav"
>
<div
...
...
src/views/exportControl/v2.0EntityList/components/dataStatistics/index.vue
浏览文件 @
419454dc
...
...
@@ -125,7 +125,7 @@
</div>
<div
class=
"ai-pane"
>
<AiButton
/>
<AiPane
:aiContent=
"sanctionCountChart.
loading ? '解读生成中...' : sanctionCountChart.
interpretation"
/>
<AiPane
:aiContent=
"sanctionCountChart.interpretation"
/>
</div>
</AnalysisBox>
</div>
...
...
@@ -174,7 +174,7 @@
</div>
<div
class=
"ai-pane"
>
<AiButton
/>
<AiPane
:aiContent=
"rankChart.
loading ? '解读生成中...' : rankChart.
interpretation"
/>
<AiPane
:aiContent=
"rankChart.interpretation"
/>
</div>
</AnalysisBox>
</div>
...
...
@@ -206,7 +206,7 @@
</div>
<div
class=
"ai-pane"
>
<AiButton
/>
<AiPane
:aiContent=
"domainChart.
loading ? '解读生成中...' : domainChart.
interpretation"
/>
<AiPane
:aiContent=
"domainChart.interpretation"
/>
</div>
</AnalysisBox>
</div>
...
...
@@ -238,7 +238,7 @@
</div>
<div
class=
"ai-pane"
>
<AiButton
/>
<AiPane
:aiContent=
"typeChart.
loading ? '解读生成中...' : typeChart.
interpretation"
/>
<AiPane
:aiContent=
"typeChart.interpretation"
/>
</div>
</AnalysisBox>
</div>
...
...
src/views/exportControl/v2.0SingleSanction/components/dataStatistics/index.vue
浏览文件 @
419454dc
...
...
@@ -63,7 +63,7 @@
</div>
<div
class=
"ai-pane"
>
<AiButton
/>
<AiPane
:aiContent=
"domainChart.
loading ? '解读生成中...' : domainChart.
interpretation"
/>
<AiPane
:aiContent=
"domainChart.interpretation"
/>
</div>
</AnalysisBox>
</div>
...
...
@@ -113,7 +113,7 @@
</div>
<div
class=
"ai-pane"
>
<AiButton
/>
<AiPane
:aiContent=
"typeChart.
loading ? '解读生成中...' : typeChart.
interpretation"
/>
<AiPane
:aiContent=
"typeChart.interpretation"
/>
</div>
</AnalysisBox>
</div>
...
...
@@ -154,11 +154,7 @@
</div>
<div
class=
"ai-pane"
>
<AiButton
/>
<AiPane
:aiContent=
"
countryDistributionChart.loading ? '解读生成中...' : countryDistributionChart.interpretation
"
/>
<AiPane
:aiContent=
"countryDistributionChart.interpretation"
/>
</div>
</AnalysisBox>
</div>
...
...
@@ -202,11 +198,7 @@
</div>
<div
class=
"ai-pane"
>
<AiButton
/>
<AiPane
:aiContent=
"
regionDistributionChart.loading ? '解读生成中...' : regionDistributionChart.interpretation
"
/>
<AiPane
:aiContent=
"regionDistributionChart.interpretation"
/>
</div>
</AnalysisBox>
</div>
...
...
src/views/exportControl/v2.0SingleSanction/components/impactAnalysis/components/industrialImpact/index.vue
浏览文件 @
419454dc
...
...
@@ -146,7 +146,7 @@
</div>
<div
class=
"ai-pane"
>
<AiButton
/>
<AiPane
:aiContent=
"revenueChart.
loading ? '解读生成中...' : revenueChart.
interpretation"
/>
<AiPane
:aiContent=
"revenueChart.interpretation"
/>
</div>
</div>
</AnalysisBox>
...
...
@@ -188,7 +188,7 @@
</div>
<div
class=
"ai-pane"
>
<AiButton
/>
<AiPane
:aiContent=
"marketChart.
loading ? '解读生成中...' : marketChart.
interpretation"
/>
<AiPane
:aiContent=
"marketChart.interpretation"
/>
</div>
</div>
</AnalysisBox>
...
...
@@ -249,7 +249,7 @@
</div>
<div
class=
"ai-pane"
>
<AiButton
/>
<AiPane
:aiContent=
"rdChart.
loading ? '解读生成中...' : rdChart.
interpretation"
/>
<AiPane
:aiContent=
"rdChart.interpretation"
/>
</div>
</div>
</AnalysisBox>
...
...
@@ -310,7 +310,7 @@
</div>
<div
class=
"ai-pane"
>
<AiButton
/>
<AiPane
:aiContent=
"shareChart.
loading ? '解读生成中...' : shareChart.
interpretation"
/>
<AiPane
:aiContent=
"shareChart.interpretation"
/>
</div>
</div>
</AnalysisBox>
...
...
src/views/exportControl/v2.0SingleSanction/components/impactAnalysis/components/researchImpact/index.vue
浏览文件 @
419454dc
...
...
@@ -60,13 +60,7 @@
</div>
<div
class=
"ai-pane"
>
<AiButton
/>
<AiPane
:aiContent=
"
rdInstrumentDependencyChart.loading
? '解读生成中...'
: rdInstrumentDependencyChart.interpretation
"
/>
<AiPane
:aiContent=
"rdInstrumentDependencyChart.interpretation"
/>
</div>
</div>
</AnalysisBox>
...
...
@@ -102,13 +96,7 @@
</div>
<div
class=
"ai-pane"
>
<AiButton
/>
<AiPane
:aiContent=
"
rdInstrumentImportCountryChart.loading
? '解读生成中...'
: rdInstrumentImportCountryChart.interpretation
"
/>
<AiPane
:aiContent=
"rdInstrumentImportCountryChart.interpretation"
/>
</div>
</div>
</AnalysisBox>
...
...
@@ -177,13 +165,7 @@
</div>
<div
class=
"ai-pane"
>
<AiButton
/>
<AiPane
:aiContent=
"
internationalCooperationChart.loading
? '解读生成中...'
: internationalCooperationChart.interpretation
"
/>
<AiPane
:aiContent=
"internationalCooperationChart.interpretation"
/>
</div>
</div>
</AnalysisBox>
...
...
@@ -252,11 +234,7 @@
</div>
<div
class=
"ai-pane"
>
<AiButton
/>
<AiPane
:aiContent=
"
internationalPaperChart.loading ? '解读生成中...' : internationalPaperChart.interpretation
"
/>
<AiPane
:aiContent=
"internationalPaperChart.interpretation"
/>
</div>
</div>
</AnalysisBox>
...
...
src/views/exportControl/v2.0SingleSanction/components/sanctionsOverview/index.vue
浏览文件 @
419454dc
...
...
@@ -31,7 +31,7 @@
<div
class=
"info-row"
>
<div
class=
"label"
>
发布人:
</div>
<div
class=
"value link"
>
<img
:src=
"defaultTitle"
alt=
""
class=
"icon avatar"
/>
<img
:src=
"
formattedData.avartar ||
defaultTitle"
alt=
""
class=
"icon avatar"
/>
<span
@
click=
"handleClick"
>
{{
formattedData
.
postPersonName
}}
>
</span>
</div>
</div>
...
...
@@ -46,7 +46,7 @@
<div
class=
"content-title"
>
制裁实体分布:
</div>
<div
class=
"distribution-list"
>
<div
class=
"list-item"
v-for=
"(item, index) in entityDistribution"
:key=
"index"
>
<img
:src=
"flag"
alt=
""
class=
"flag"
/>
<img
:src=
"
item.imageUrl ||
flag"
alt=
""
class=
"flag"
/>
<div
class=
"country-name"
>
{{
item
.
name
}}
</div>
<div
class=
"progress-bar-container"
>
<div
...
...
@@ -152,6 +152,7 @@
</div>
<div
class=
"right-content"
>
<div
class=
"sanction-group-list"
>
<el-empty
v-if=
"sanctionList.length === 0"
description=
"暂无制裁清单"
/>
<div
class=
"sanction-group"
v-for=
"(group, index) in sanctionList"
:key=
"index"
>
<el-table
:data=
"group.entities"
style=
"width: 100%"
>
<el-table-column
label=
"实体名称"
min-width=
"280"
>
...
...
@@ -302,7 +303,7 @@ const getSanctionOverviewList = async () => {
removeCount
.
value
=
data
.
removeCount
||
0
;
removeRuleCount
.
value
=
data
.
removeRuleCount
||
0
;
const
list
=
data
.
san
List
||
[];
const
list
=
activeTab
.
value
===
"add"
?
data
.
sanList
:
data
.
remove
List
||
[];
sanctionList
.
value
=
list
.
map
(
item
=>
({
reason
:
item
.
sanReason
,
entities
:
(
item
.
orgList
||
[]).
map
(
org
=>
({
...
...
@@ -448,7 +449,8 @@ const formattedData = computed(() => {
fileCode
:
info
.
fileCode
?
`
${
info
.
fileCode
}
`
:
""
,
administrativeOrderId
:
info
.
administrativeOrderId
?
`No.
${
info
.
administrativeOrderId
}
`
:
""
,
postPersonName
:
info
.
postPersonName
,
domains
:
info
.
domainNames
domains
:
info
.
domainNames
,
avartar
:
info
.
postPersonAvatarUrl
};
});
...
...
src/views/exportControl/v2.0SingleSanction/index.vue
浏览文件 @
419454dc
...
...
@@ -239,8 +239,6 @@ const handlePageChange = async newPage => {
// ========== 选择某项 ==========
const
selectSanction
=
item
=>
{
selectedSanctionId
.
value
=
item
.
id
;
// 可在此处触发其他逻辑,如查看详情
// 替换当前路由参数,并重新加载数据
router
.
replace
({
path
:
window
.
location
.
pathname
,
query
:
{
...
...
@@ -248,11 +246,8 @@ const selectSanction = item => {
sanTypeId
:
item
.
sanTypeId
}
});
// 3. 立即重新加载数据(关键!)
getSingleSanctionOverviewData
();
// 4. 可选:关闭弹窗
sanctionModalVisible
.
value
=
false
;
window
.
location
.
reload
();
};
// ========== 关闭弹窗时重置 ==========
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论