Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
risk-monitor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蔡建
risk-monitor
Commits
5c38f268
提交
5c38f268
authored
4月 09, 2026
作者:
yanpeng
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'pre' of
http://8.140.26.4:10003/caijian/risk-monitor
into yp-dev
上级
dd2b632a
79410949
流水线
#396
已通过 于阶段
in 1 分 36 秒
变更
37
流水线
1
隐藏空白字符变更
内嵌
并排
正在显示
37 个修改的文件
包含
1246 行增加
和
1161 行删除
+1246
-1161
config.js
public/js/config.js
+4
-2
billHome.js
src/api/bill/billHome.js
+1
-1
index.js
src/api/marketAccessRestrictions/index.js
+2
-2
overviewNormalBox.vue
src/components/base/boxBackground/overviewNormalBox.vue
+33
-42
IntelligentEntityText.vue
src/components/base/texts/IntelligentEntityText.vue
+58
-10
index.js
src/router/index.js
+1
-1
decree.js
src/router/modules/decree.js
+6
-12
marketAccessRestrictions.js
src/router/modules/marketAccessRestrictions.js
+4
-13
writtingAsstaintStore.js
src/stores/writtingAsstaintStore.js
+2
-4
ResourceLibrarySection.vue
src/views/bill/billHome/ResourceLibrarySection.vue
+1
-3
index.vue
src/views/bill/billHome/index.vue
+37
-20
index.vue
src/views/bill/deepDig/processAnalysis/index.vue
+7
-0
index.vue
src/views/bill/template/index.vue
+25
-1
index.vue
src/views/dataLibrary/bill/countryBill/index.vue
+2
-2
index.vue
...s/dataLibrary/exportControl/commerceControlList/index.vue
+2
-2
index.vue
...aLibrary/exportControl/commerceControlListEvent/index.vue
+2
-2
index.vue
src/views/dataLibrary/exportControl/entityList/index.vue
+23
-20
index.vue
...views/dataLibrary/exportControl/entityListEvent/index.vue
+2
-2
index.vue
src/views/dataLibrary/index.vue
+4
-3
index.vue
src/views/decree/decreeHome/index.vue
+2
-70
index.vue
src/views/decree/decreeLayout/index.vue
+1
-234
index.vue
src/views/exportControl/index.vue
+142
-164
charts.js
src/views/exportControl/utils/charts.js
+1
-1
index.vue
...ontrol/v2.0EntityList/components/dataStatistics/index.vue
+93
-15
index.vue
...ol/v2.0SingleSanction/components/dataStatistics/index.vue
+100
-18
SurveyHistory.vue
src/views/marketAccessRestrictions/com/SurveyHistory.vue
+0
-1
tips-icon.png
...sRestrictions/marketAccessHome/assets/icons/tips-icon.png
+0
-0
CarouselItem232.vue
...cessRestrictions/marketAccessHome/com/CarouselItem232.vue
+87
-0
CarouselItem301.vue
...cessRestrictions/marketAccessHome/com/CarouselItem301.vue
+124
-0
CarouselItem337.vue
...cessRestrictions/marketAccessHome/com/CarouselItem337.vue
+125
-0
index.vue
...views/marketAccessRestrictions/marketAccessHome/index.vue
+179
-388
barChart1.js
...ketAccessRestrictions/marketAccessHome/utils/barChart1.js
+6
-4
multiLineChart.js
...cessRestrictions/marketAccessHome/utils/multiLineChart.js
+53
-14
index.vue
...tAccessRestrictions/marketAccessLayout/case/337/index.vue
+2
-2
index.vue
...ews/marketAccessRestrictions/marketAccessLayout/index.vue
+35
-21
index.vue
...views/marketAccessRestrictions/singleCaseLayout/index.vue
+36
-41
出口管制接口-4.md
出口管制接口-4.md
+44
-46
没有找到文件。
public/js/config.js
浏览文件 @
5c38f268
const
baseUrl
=
`http://8.140.26.4:9085`
\ No newline at end of file
const
baseUrl
=
`http://8.140.26.4:9085`
const
outImgbaseUrl
=
`http://8.140.26.4:10017/out/img`
// 写报图片URL
\ No newline at end of file
src/api/bill/billHome.js
浏览文件 @
5c38f268
...
...
@@ -16,7 +16,7 @@ export function getBillIndustry(params) {
return
request
({
method
:
'GET'
,
url
:
`/api/BillOverview/billIndustry/
${
params
.
year
}
`
,
params
:
{
sta
tus
:
params
.
status
}
params
:
{
sta
geName
:
params
.
stageName
}
})
}
...
...
src/api/marketAccessRestrictions/index.js
浏览文件 @
5c38f268
...
...
@@ -138,7 +138,7 @@ export function getSurveyList(params) {
// 详情页---------------------------------------------------
//
获取调查列表
接口
//
调查分类详情
接口
/**
* @param { sortCode }
*/
...
...
@@ -169,7 +169,7 @@ export function getSearchAllYear(params) {
}
// 调查简介
/marketsearchDetails/searchBlurb
// 调查简介
export
function
getSearchBlurb
(
params
)
{
return
request
({
method
:
'GET'
,
...
...
src/components/base/boxBackground/overviewNormalBox.vue
浏览文件 @
5c38f268
<
template
>
<div
class=
"overview-normal-box-wrapper"
:style=
"
{ width: width ? width : '1064px', height: height ? height : '460px' }">
<div
class=
"overview-normal-box-header"
>
<div
class=
"header-left"
>
<div
class=
"header-icon"
>
<slot
name=
"header-icon"
></slot>
</div>
<div
class=
"header-title"
>
{{
title
}}
</div>
<div
class=
"box-main"
:style=
"
{ width: width || '1064px', height: height || '460px' }">
<div
class=
"box-head-box"
>
<div
class=
"box-head-left"
>
<slot
name=
"header-icon"
></slot>
</div>
<div
class=
"
header
-right"
>
<div
class=
"box-head-name one-line-ellipsis"
>
{{
title
}}
</div>
<div
class=
"
box-head
-right"
>
<slot
name=
"header-right"
></slot>
</div>
</div>
<div
class=
"
wrapper-main
"
>
<div
class=
"
box-down-box
"
>
<slot></slot>
</div>
</div>
...
...
@@ -41,49 +37,44 @@ const props = defineProps({
</
script
>
<
style
lang=
"scss"
scoped
>
.
overview-normal-box-wrapper
{
.
box-main
{
border
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
border-radius
:
10px
;
box-shadow
:
0px
0px
20px
0px
rgba
(
25
,
69
,
130
,
0
.1
);
background
:
rgba
(
255
,
255
,
255
,
1
);
position
:
relative
;
display
:
flex
;
flex-direction
:
column
;
.overview-normal-box-header
{
.box-head-box
{
padding
:
0
22px
;
height
:
48px
;
border-bottom
:
1px
solid
rgba
(
240
,
242
,
244
,
1
);
display
:
flex
;
justify-content
:
space-between
;
box-sizing
:
border-box
;
.header-left
{
display
:
flex
;
.header-icon
{
width
:
24px
;
height
:
24px
;
margin-top
:
14px
;
margin-left
:
19px
;
}
.header-title
{
margin-left
:
17px
;
height
:
48px
;
color
:
var
(
--
color-main-active
);
font-family
:
Source
Han
Sans
CN
;
font-size
:
20px
;
font-weight
:
700
;
line-height
:
48px
;
text-align
:
center
;
}
align-items
:
center
;
width
:
100%
;
.box-head-left
{
width
:
24px
;
height
:
24px
;
font-size
:
0px
;
margin-right
:
16px
;
}
.header-right
{
height
:
48px
;
margin-right
:
28px
;
.box-head-name
{
color
:
var
(
--
color-main-active
);
font-family
:
Source
Han
Sans
CN
;
font-size
:
20px
;
font-weight
:
bold
;
line-height
:
20px
;
width
:
20px
;
flex
:
auto
;
}
.box-head-right
{
margin-left
:
16px
;
}
}
.wrapper-main
{
height
:
calc
(
100%
-
48px
);
.box-down-box
{
height
:
20px
;
flex
:
auto
;
overflow
:
hidden
;
}
}
...
...
src/components/base/texts/IntelligentEntityText.vue
浏览文件 @
5c38f268
<
template
>
<p
class=
"p-regular-rereg"
>
<span
class=
"text-regular"
v-for=
"(segment, index) in processedText"
:key=
"index"
>
<span
v-if=
"segment.isEntity"
@
click=
"$emit('onEntityClick', segment.entity)"
class=
"entity-link"
>
<span
v-if=
"segment.isEntity"
@
click=
"$emit('onEntityClick', segment.entity)"
:class=
"['entity-link',
{ 'keyword-highlight': segment.isKeywordHit }]"
>
{{
segment
.
entity
?.
text_span
}}
<img
:src=
"SearchIcon"
:width=
"10"
:height=
"10"
alt=
"search"
/>
</span>
<span
v-else
>
{{
segment
.
text
}}
<span
:class=
"
{ 'keyword-highlight': segment.isKeywordHit }">
{{
segment
.
text
}}
</span>
</span>
</span>
</p>
...
...
@@ -20,6 +24,7 @@ export interface ProcessedTextSegment {
text
:
string
;
isEntity
:
boolean
;
entity
?:
TextEntity
;
isKeywordHit
?:
boolean
;
}
const
props
=
defineProps
({
text
:
{
...
...
@@ -29,15 +34,42 @@ const props = defineProps({
entities
:
{
type
:
Array
<
TextEntity
>
,
default
:
()
=>
[]
},
highlight
:
{
type
:
String
,
default
:
""
}
});
const
emit
=
defineEmits
([
"onEntityClick"
]);
// 处理后的文本段
const
processedText
=
ref
<
ProcessedTextSegment
[]
>
([]);
const
normalizeKeyword
=
(
value
:
unknown
)
=>
String
(
value
??
""
).
trim
();
const
getKeywordMatches
=
(
text
:
string
,
keyword
:
string
)
=>
{
if
(
!
keyword
)
return
[{
text
,
isKeywordHit
:
false
}];
const
lowerText
=
text
.
toLowerCase
();
const
lowerKeyword
=
keyword
.
toLowerCase
();
if
(
!
lowerKeyword
)
return
[{
text
,
isKeywordHit
:
false
}];
const
parts
:
Array
<
{
text
:
string
;
isKeywordHit
:
boolean
}
>
=
[];
let
start
=
0
;
while
(
start
<
text
.
length
)
{
const
index
=
lowerText
.
indexOf
(
lowerKeyword
,
start
);
if
(
index
===
-
1
)
{
parts
.
push
({
text
:
text
.
slice
(
start
),
isKeywordHit
:
false
});
break
;
}
if
(
index
>
start
)
{
parts
.
push
({
text
:
text
.
slice
(
start
,
index
),
isKeywordHit
:
false
});
}
parts
.
push
({
text
:
text
.
slice
(
index
,
index
+
keyword
.
length
),
isKeywordHit
:
true
});
start
=
index
+
keyword
.
length
;
}
return
parts
.
filter
(
part
=>
part
.
text
);
};
// 处理文本,识别并替换实体
const
processText
=
()
=>
{
console
.
log
(
"props.entities.length"
,
props
.
entities
.
length
);
if
(
!
props
.
text
||
!
props
.
entities
)
{
// console.log('props.text', props.entities.length)
processedText
.
value
=
[{
text
:
""
,
isEntity
:
false
}];
...
...
@@ -46,6 +78,7 @@ const processText = () => {
const
result
=
[];
let
currentPosition
=
0
;
const
keyword
=
normalizeKeyword
(
props
.
highlight
);
// 按实体文本长度排序,优先匹配长文本
const
sortedEntities
=
[...
props
.
entities
].
sort
((
a
,
b
)
=>
b
.
text_span
.
length
-
a
.
text_span
.
length
);
...
...
@@ -61,7 +94,8 @@ const processText = () => {
// 如果当前位置是实体,添加到结果
result
.
push
({
isEntity
:
true
,
entity
:
{
...
entity
}
entity
:
{
...
entity
},
isKeywordHit
:
keyword
?
entityText
.
toLowerCase
().
includes
(
keyword
.
toLowerCase
())
:
false
});
currentPosition
=
endPosition
;
matched
=
true
;
...
...
@@ -82,18 +116,26 @@ const processText = () => {
if
(
nextEntityStart
>
currentPosition
)
{
const
plainText
=
props
.
text
.
substring
(
currentPosition
,
nextEntityStart
);
result
.
push
({
text
:
plainText
,
isEntity
:
false
const
parts
=
getKeywordMatches
(
plainText
,
keyword
);
parts
.
forEach
(
part
=>
{
result
.
push
({
text
:
part
.
text
,
isEntity
:
false
,
isKeywordHit
:
part
.
isKeywordHit
});
});
currentPosition
=
nextEntityStart
;
}
else
{
// 没有更多实体,添加剩余文本
const
remainingText
=
props
.
text
.
substring
(
currentPosition
);
if
(
remainingText
)
{
result
.
push
({
text
:
remainingText
,
isEntity
:
false
const
parts
=
getKeywordMatches
(
remainingText
,
keyword
);
parts
.
forEach
(
part
=>
{
result
.
push
({
text
:
part
.
text
,
isEntity
:
false
,
isKeywordHit
:
part
.
isKeywordHit
});
});
}
currentPosition
=
props
.
text
.
length
;
...
...
@@ -106,6 +148,7 @@ const processText = () => {
// 监听文本和实体变化
watch
(()
=>
props
.
text
,
processText
);
watch
(()
=>
props
.
entities
,
processText
,
{
deep
:
true
});
watch
(()
=>
props
.
highlight
,
processText
);
// 初始化处理
onMounted
(
processText
);
...
...
@@ -113,6 +156,11 @@ onMounted(processText);
<
style
lang=
"scss"
scoped
>
@use
"@/styles/common.scss"
;
.keyword-highlight
{
background
:
rgba
(
255
,
199
,
0
,
0
.35
);
border-radius
:
2px
;
}
.entity-link
{
color
:
var
(
--
color-primary-100
);
&
:hover
{
...
...
src/router/index.js
浏览文件 @
5c38f268
...
...
@@ -94,7 +94,7 @@ router.beforeEach((to, from, next) => {
const
storageKey
=
to
.
meta
.
titleStorageKey
||
"curTabName"
;
// 新开页签时 sessionStorage 不共享,优先用 query 带过来的 title/name
const
queryTitle
=
(
to
.
query
&&
(
to
.
query
.
title
||
to
.
query
.
name
))
?
String
(
to
.
query
.
title
||
to
.
query
.
name
)
:
""
;
if
(
!
to
.
path
.
startsWith
(
'/decreeLayout/'
)
)
{
if
(
!
to
.
meta
.
noTitle
)
{
document
.
title
=
queryTitle
||
window
.
sessionStorage
.
getItem
(
storageKey
)
||
to
.
meta
.
title
;
}
}
else
{
...
...
src/router/modules/decree.js
浏览文件 @
5c38f268
...
...
@@ -28,9 +28,7 @@ const decreeRoutes = [
name
:
"DecreeLayoutContainer"
,
component
:
DecreeLayoutContainer
,
redirect
:
"/decreeLayout/overview"
,
// meta: {
// title: "政令布局"
// },
// meta: { title: "政令布局" },
children
:
[
{
path
:
"overview"
,
...
...
@@ -46,19 +44,19 @@ const decreeRoutes = [
path
:
"introduction"
,
name
:
"DecreeIntroduction"
,
component
:
DecreeIntroduction
,
// meta: { title: "政令简介"
}
meta
:
{
noTitle
:
true
}
},
{
path
:
"background"
,
name
:
"DecreeBackground"
,
component
:
DecreeBackground
,
// meta: { title: "政令背景"
}
meta
:
{
noTitle
:
true
}
},
{
path
:
"measures"
,
name
:
"DecreeMeasures"
,
component
:
DecreeMeasures
,
// meta: { title: "政令举措"
}
meta
:
{
noTitle
:
true
}
},
]
},
...
...
@@ -67,18 +65,14 @@ const decreeRoutes = [
path
:
"deepDig"
,
name
:
"DeepDig"
,
component
:
DecreeDeepDig
,
// meta: {
// title: "深度挖掘"
// }
meta
:
{
noTitle
:
true
}
},
// 影响分析路由
{
path
:
"influence"
,
name
:
"DecreeInfluence"
,
component
:
DecreeInfluence
,
// meta: {
// title: "影响分析"
// }
meta
:
{
noTitle
:
true
}
},
]
},
...
...
src/router/modules/marketAccessRestrictions.js
浏览文件 @
5c38f268
...
...
@@ -28,22 +28,17 @@ const marketAccessRestrictionsRoutes = [
dynamicTitle
:
true
},
children
:
[
{
path
:
"case"
,
name
:
"MarketAccessCase"
,
component
:
MarketAccessCase
,
// meta: {
// title: "调查案件"
// }
meta
:
{
noTitle
:
true
}
},
{
path
:
"overview"
,
name
:
"MarketAccessOverview"
,
component
:
MarketAccessOverview
,
// meta: {
// title: "数据统计"
// }
meta
:
{
noTitle
:
true
}
}
]
},
...
...
@@ -62,17 +57,13 @@ const marketAccessRestrictionsRoutes = [
path
:
"overview"
,
name
:
"MarketSingleCaseOverview"
,
component
:
MarketSingleCaseOverview
,
// meta: {
// title: "调查简介"
// }
meta
:
{
noTitle
:
true
}
},
{
path
:
"deepdig"
,
name
:
"MarketSingleCaseDeepdig"
,
component
:
MarketSingleCaseDeepdig
,
// meta: {
// title: "深度挖掘"
// }
meta
:
{
noTitle
:
true
}
}
]
},
...
...
src/stores/writtingAsstaintStore.js
浏览文件 @
5c38f268
...
...
@@ -485,7 +485,6 @@ export const useWrittingAsstaintStore = defineStore('writtingAsstaint', {
// ========== AI 生成报文 SSE(更新报文内容 + 执行步骤) ==========
async
fetchReportData
(
params
)
{
console
.
log
(
">"
)
if
(
this
.
abortController
)
this
.
abortController
.
abort
();
this
.
abortController
=
new
AbortController
();
// this.processLog = '';
...
...
@@ -511,7 +510,8 @@ export const useWrittingAsstaintStore = defineStore('writtingAsstaint', {
lastFlushedIndex
=
0
;
if
(
this
.
reportContent
.
includes
(
'./out/img'
))
{
this
.
reportContent
=
this
.
reportContent
.
replaceAll
(
'./out/img'
,
'http://172.19.21.9:8003/out/img'
);
this
.
reportContent
=
this
.
reportContent
.
replaceAll
(
'./out/img'
,
outImgbaseUrl
);
// console.log(reportContent)
}
};
...
...
@@ -571,7 +571,6 @@ export const useWrittingAsstaintStore = defineStore('writtingAsstaint', {
streamBuffer
+=
str
;
updateFlushIndexByBoundary
();
flushToReport
(
false
);
console
.
log
(
streamBuffer
,
456
)
console
.
log
(
msgData
,
'data'
)
}
else
{
// 结束时把剩余内容强制 flush
...
...
@@ -663,7 +662,6 @@ export const useWrittingAsstaintStore = defineStore('writtingAsstaint', {
};
await
this
.
fetchReportData
(
params
);
}
else
{
console
.
log
(
10101010101010
)
// 政令模板需要先解析PDF
if
(
this
.
curTempTitle
===
'政令'
)
{
if
(
this
.
uploadFileList
.
length
===
0
)
{
...
...
src/views/bill/billHome/ResourceLibrarySection.vue
浏览文件 @
5c38f268
...
...
@@ -93,7 +93,7 @@
<div
class=
"item"
>
<div
class=
"item-left"
>
法案进展:
</div>
<div
class=
"item-right2"
>
<div
class=
"tag"
v-for=
"(val, idx) in
getReversedProgress(item.progress)
"
:key=
"`$
{item.billId}-${val}-${idx}`" :style="{ zIndex: item.progress.length - idx }">
{{
val
}}
</div>
<div
class=
"tag"
v-for=
"(val, idx) in
item.progress
"
:key=
"`$
{item.billId}-${val}-${idx}`" :style="{ zIndex: item.progress.length - idx }">
{{
val
}}
</div>
</div>
</div>
</div>
...
...
@@ -458,8 +458,6 @@ const handleClickAvatar = async member => {
}
catch
(
error
)
{
}
}
;
const
getReversedProgress
=
progress
=>
(
Array
.
isArray
(
progress
)
?
[...
progress
].
reverse
()
:
[]);
const
handleClickCommitteeBill
=
bill
=>
{
if
(
!
bill
?.
billId
)
return
;
props
.
onClickToDetail
({
...
...
src/views/bill/billHome/index.vue
浏览文件 @
5c38f268
...
...
@@ -373,7 +373,8 @@ const committeeTimeRange = ref("近一月");
const
committeeTimeOptions
=
[
{
label
:
"近一周"
,
value
:
"近一周"
},
{
label
:
"近一月"
,
value
:
"近一月"
},
{
label
:
"近一年"
,
value
:
"近一年"
}
{
label
:
"近一年"
,
value
:
"近一年"
},
{
label
:
"全部时间"
,
value
:
"全部时间"
}
];
const
committeeCardList
=
ref
([]);
...
...
@@ -1029,14 +1030,15 @@ const handleBox6 = async () => {
// 涉华领域分布
const
box9ChartData
=
ref
([]);
const
box9selectetedTime
=
ref
(
"2025"
);
// 立法状态下拉:提出法案、众议院通过、参议院通过、解决分歧、完成立法
// v-model 存储的是接口需要的 status 值
const
box9LegislativeStatus
=
ref
(
"提案"
);
// 立法状态下拉:提出法案、众议院通过、参议院通过、解决分歧、
呈交总统、
完成立法
// v-model 存储的是接口需要的 status 值
(直接作为接口参数)
const
box9LegislativeStatus
=
ref
(
"提
出法
案"
);
const
box9LegislativeStatusList
=
ref
([
{
label
:
"提出法案"
,
value
:
"提案"
},
{
label
:
"提出法案"
,
value
:
"提
出法
案"
},
{
label
:
"众议院通过"
,
value
:
"众议院通过"
},
{
label
:
"参议院通过"
,
value
:
"参议院通过"
},
{
label
:
"解决分歧"
,
value
:
"分歧已解决"
},
{
label
:
"解决分歧"
,
value
:
"解决分歧"
},
{
label
:
"呈交总统"
,
value
:
"呈交总统"
},
{
label
:
"完成立法"
,
value
:
"完成立法"
}
]);
const
box9YearList
=
ref
([
...
...
@@ -1063,18 +1065,39 @@ const box9YearList = ref([
]);
const
box9HasData
=
ref
(
true
);
let
box9ChartInstance
=
null
;
const
BOX9_MAX_DOMAIN_COUNT
=
7
;
const
BOX9_OTHER_DOMAIN_NAME
=
"其他"
;
const
formatBox9DomainData
=
(
list
=
[])
=>
{
if
(
!
Array
.
isArray
(
list
)
||
list
.
length
<=
BOX9_MAX_DOMAIN_COUNT
)
{
return
list
;
}
const
topDomainList
=
list
.
slice
(
0
,
BOX9_MAX_DOMAIN_COUNT
);
const
otherDomainCount
=
list
.
slice
(
BOX9_MAX_DOMAIN_COUNT
).
reduce
((
sum
,
item
)
=>
{
return
sum
+
Number
(
item
?.
countBill
||
0
);
},
0
);
if
(
!
otherDomainCount
)
{
return
topDomainList
;
}
return
[
...
topDomainList
,
{
industryName
:
BOX9_OTHER_DOMAIN_NAME
,
countBill
:
otherDomainCount
}
];
};
const
getBox9Data
=
async
()
=>
{
chartLoading
.
value
=
{
...
chartLoading
.
value
,
box6
:
true
};
const
params
=
{
year
:
box9selectetedTime
.
value
,
sta
tus
:
box9LegislativeStatus
.
value
sta
geName
:
box9LegislativeStatus
.
value
};
try
{
const
res
=
await
getBillIndustry
(
params
);
console
.
log
(
"box9-涉华法案领域分布"
,
res
.
data
);
if
(
res
.
code
===
200
&&
res
.
data
&&
res
.
data
.
length
>
0
)
{
box9HasData
.
value
=
true
;
box9ChartData
.
value
=
res
.
data
;
box9ChartData
.
value
=
formatBox9DomainData
(
res
.
data
)
;
}
else
{
box9HasData
.
value
=
false
;
box9ChartData
.
value
=
[];
...
...
@@ -1104,16 +1127,9 @@ const handleBox9Data = async () => {
const
selectedIndex
=
box9LegislativeStatusList
.
value
.
findIndex
(
item
=>
item
.
value
===
box9LegislativeStatus
.
value
);
const
arr
=
[
{
label
:
"提出法案"
,
value
:
"提案"
},
{
label
:
"众议院通过"
,
value
:
"众议院通过"
},
{
label
:
"参议院通过"
,
value
:
"参议院通过"
},
{
label
:
"解决分歧"
,
value
:
"分歧已解决"
},
{
label
:
"完成立法"
,
value
:
"完成立法"
}
]
const
status
=
arr
.
filter
(
item
=>
{
return
item
.
value
===
box9LegislativeStatus
.
value
})[
0
].
label
// 当前选中的立法状态中文名(直接等于接口传参值)
const
statusItem
=
box9LegislativeStatusList
.
value
[
selectedIndex
];
const
status
=
statusItem
?
statusItem
.
label
:
""
;
const
selectParam
=
{
moduleType
:
'国会法案'
,
key
:
2
,
...
...
@@ -1272,13 +1288,14 @@ const getBox8ChartOption = stageList => {
const
handleBox8Data
=
async
()
=>
{
chartLoading
.
value
=
{
...
chartLoading
.
value
,
box8
:
true
};
// 进展分布显示顺序:提出法案(对应进度“提案”)、众议院通过、参议院通过、
分歧已解决(解决分歧)
、完成立法
const
stageOrder
=
[
"提案"
,
"众议院通过"
,
"参议院通过"
,
"分歧已解决"
,
"完成立法"
];
// 进展分布显示顺序:提出法案(对应进度“提案”)、众议院通过、参议院通过、
解决分歧(对应进度“分歧已解决”)、呈交总统
、完成立法
const
stageOrder
=
[
"提案"
,
"众议院通过"
,
"参议院通过"
,
"分歧已解决"
,
"
呈交总统"
,
"
完成立法"
];
const
stageNameMap
=
{
提案
:
"提出法案"
,
众议院通过
:
"众议院通过"
,
参议院通过
:
"参议院通过"
,
分歧已解决
:
"解决分歧"
,
呈交总统
:
"呈交总统"
,
完成立法
:
"完成立法"
};
...
...
src/views/bill/deepDig/processAnalysis/index.vue
浏览文件 @
5c38f268
...
...
@@ -1169,6 +1169,10 @@ onMounted(async () => {
<
style
lang
=
"scss"
scoped
>
.
wrap
{
display
:
flex
;
flex
-
direction
:
row
;
flex
-
wrap
:
nowrap
;
direction
:
ltr
;
justify
-
content
:
flex
-
start
;
margin
-
bottom
:
30
px
;
...
...
@@ -1254,6 +1258,8 @@ onMounted(async () => {
.
left
{
margin
-
top
:
16
px
;
width
:
792
px
;
flex
:
0
0
792
px
;
.
box1
{
width
:
792
px
;
...
...
@@ -1651,6 +1657,7 @@ onMounted(async () => {
margin
-
left
:
16
px
;
margin
-
top
:
16
px
;
width
:
792
px
;
flex
:
0
0
792
px
;
height
:
847
px
;
.
box3
{
...
...
src/views/bill/template/index.vue
浏览文件 @
5c38f268
...
...
@@ -131,6 +131,7 @@
<IntelligentEntityText
:text=
"term?.fynr || ''"
:entities=
"termsHighlight ? getTermEntities(term, 'cn') : []"
:highlight=
"searchKeyword"
@
on-entity-click=
"e => gotoSearchResults(e.text_span, '')"
/>
</div>
...
...
@@ -141,6 +142,7 @@
<IntelligentEntityText
:text=
"term?.ywnr || ''"
:entities=
"termsHighlight ? getTermEntities(term, 'en') : []"
:highlight=
"searchKeyword"
@
on-entity-click=
"e => gotoSearchResults(e.text_span, '')"
/>
</div>
...
...
@@ -343,6 +345,27 @@ const chart1ColorList = ref([...MUTICHARTCOLORS]);
const
chart2ColorList
=
ref
([...
MUTICHARTCOLORS
]);
const
chart2Data
=
ref
([]);
const
DOMAIN_MAX_DISPLAY_COUNT
=
7
;
const
DOMAIN_OTHER_NAME
=
"其他"
;
const
formatDomainChartData
=
(
list
=
[])
=>
{
if
(
!
Array
.
isArray
(
list
)
||
list
.
length
<=
DOMAIN_MAX_DISPLAY_COUNT
)
{
return
list
;
}
const
topDomainList
=
list
.
slice
(
0
,
DOMAIN_MAX_DISPLAY_COUNT
);
const
otherCount
=
list
.
slice
(
DOMAIN_MAX_DISPLAY_COUNT
).
reduce
((
sum
,
item
)
=>
{
return
sum
+
Number
(
item
?.
value
||
0
);
}
,
0
);
if
(
!
otherCount
)
{
return
topDomainList
;
}
return
[
...
topDomainList
,
{
name
:
DOMAIN_OTHER_NAME
,
value
:
otherCount
}
];
}
;
const
aiPaneVisible
=
ref
({
domain
:
false
,
...
...
@@ -737,12 +760,13 @@ const handleGetBillHyly = async () => {
.
map
(
name
=>
{
return
{
label
:
name
,
value
:
name
}
;
}
);
c
hart2Data
.
value
=
res
.
data
.
map
(
item
=>
{
c
onst
domainChartData
=
res
.
data
.
map
(
item
=>
{
return
{
name
:
item
.
hylymc
,
value
:
item
.
countTk
}
;
}
);
chart2Data
.
value
=
formatDomainChartData
(
domainChartData
);
aiPaneFetched
.
value
=
{
...
aiPaneFetched
.
value
,
domain
:
false
}
;
let
chart2
=
getPieChart
(
chart2Data
.
value
,
chart2ColorList
.
value
);
...
...
src/views/dataLibrary/bill/countryBill/index.vue
浏览文件 @
5c38f268
...
...
@@ -1131,10 +1131,10 @@ const initParam = () => {
const
query
=
route
.
query
;
if
(
Object
.
keys
(
query
).
length
>
0
)
{
sessionStorage
.
setItem
(
'
r
outeQuery'
,
JSON
.
stringify
(
query
));
sessionStorage
.
setItem
(
'
countryR
outeQuery'
,
JSON
.
stringify
(
query
));
}
}
else
{
const
savedQuery
=
JSON
.
parse
(
sessionStorage
.
getItem
(
'
r
outeQuery'
)
||
'{
}
'
);
const
savedQuery
=
JSON
.
parse
(
sessionStorage
.
getItem
(
'
countryR
outeQuery'
)
||
'{
}
'
);
selectedArea
.
value
=
savedQuery
.
domains
?
savedQuery
.
domains
:
'全部领域'
if
(
savedQuery
.
selectedDate
&&
Array
.
isArray
(
JSON
.
parse
(
savedQuery
.
selectedDate
))
&&
JSON
.
parse
(
savedQuery
.
selectedDate
).
length
)
{
selectedDate
.
value
=
'自定义'
...
...
src/views/dataLibrary/exportControl/commerceControlList/index.vue
浏览文件 @
5c38f268
...
...
@@ -876,10 +876,10 @@ const initParam = () => {
const
query
=
route
.
query
;
if
(
Object
.
keys
(
query
).
length
>
0
)
{
sessionStorage
.
setItem
(
'
decre
eRouteQuery'
,
JSON
.
stringify
(
query
));
sessionStorage
.
setItem
(
'
commerc
eRouteQuery'
,
JSON
.
stringify
(
query
));
}
}
else
{
const
savedQuery
=
JSON
.
parse
(
sessionStorage
.
getItem
(
'
decre
eRouteQuery'
)
||
'{
}
'
);
const
savedQuery
=
JSON
.
parse
(
sessionStorage
.
getItem
(
'
commerc
eRouteQuery'
)
||
'{
}
'
);
selectedArea
.
value
=
savedQuery
.
domains
?
savedQuery
.
domains
:
'全部领域'
if
(
savedQuery
.
selectedDate
&&
Array
.
isArray
(
JSON
.
parse
(
savedQuery
.
selectedDate
))
&&
JSON
.
parse
(
savedQuery
.
selectedDate
).
length
)
{
selectedDate
.
value
=
'自定义'
...
...
src/views/dataLibrary/exportControl/commerceControlListEvent/index.vue
浏览文件 @
5c38f268
...
...
@@ -803,10 +803,10 @@ const initParam = () => {
const
query
=
route
.
query
;
if
(
Object
.
keys
(
query
).
length
>
0
)
{
sessionStorage
.
setItem
(
'
decree
RouteQuery'
,
JSON
.
stringify
(
query
));
sessionStorage
.
setItem
(
'
commerceEvent
RouteQuery'
,
JSON
.
stringify
(
query
));
}
}
else
{
const
savedQuery
=
JSON
.
parse
(
sessionStorage
.
getItem
(
'
decree
RouteQuery'
)
||
'{
}
'
);
const
savedQuery
=
JSON
.
parse
(
sessionStorage
.
getItem
(
'
commerceEvent
RouteQuery'
)
||
'{
}
'
);
selectedArea
.
value
=
savedQuery
.
domains
?
savedQuery
.
domains
:
'全部领域'
if
(
savedQuery
.
selectedDate
&&
Array
.
isArray
(
JSON
.
parse
(
savedQuery
.
selectedDate
))
&&
JSON
.
parse
(
savedQuery
.
selectedDate
).
length
)
{
selectedDate
.
value
=
'自定义'
...
...
src/views/dataLibrary/exportControl/entityList/index.vue
浏览文件 @
5c38f268
...
...
@@ -191,7 +191,7 @@ const route = useRoute();
const
isShowProvinceBox
=
computed
(()
=>
{
let
isShow
=
false
if
(
isFolderAll
.
value
&&
(
selectedCountry
.
value
===
'0101'
||
selectedCountry
.
value
===
'全部国家'
))
{
if
(
isFolderAll
.
value
&&
(
selectedCountry
.
value
===
'0101'
||
selectedCountry
.
value
===
'全部国家'
))
{
isShow
=
true
}
return
isShow
...
...
@@ -207,18 +207,18 @@ const handleSwitchChartData = () => {
return
item
.
name
===
curDemension
.
value
}
)[
0
]
// setTimeout(() =>
{
activeChart
.
value
=
curDemensionItem
.
chartTypeList
[
0
]
if
(
curDemension
.
value
===
'制裁时间'
)
{
if
(
selectedTime
.
value
===
'按月度统计'
)
{
curChartData
.
value
=
curDemensionItem
.
data
}
else
if
(
selectedTime
.
value
===
'按季度统计'
)
{
curChartData
.
value
=
curDemensionItem
.
quatarData
}
else
{
curChartData
.
value
=
curDemensionItem
.
yearData
}
}
else
{
activeChart
.
value
=
curDemensionItem
.
chartTypeList
[
0
]
if
(
curDemension
.
value
===
'制裁时间'
)
{
if
(
selectedTime
.
value
===
'按月度统计'
)
{
curChartData
.
value
=
curDemensionItem
.
data
}
else
if
(
selectedTime
.
value
===
'按季度统计'
)
{
curChartData
.
value
=
curDemensionItem
.
quatarData
}
else
{
curChartData
.
value
=
curDemensionItem
.
yearData
}
}
else
{
curChartData
.
value
=
curDemensionItem
.
data
}
//
}
)
}
}
...
...
@@ -686,7 +686,7 @@ const handleGetProvinceList = async () => {
try
{
const
res
=
await
getProvinceList
()
console
.
log
(
'获取省份列表'
,
res
);
if
(
res
&&
res
.
length
)
{
if
(
res
&&
res
.
length
)
{
provinceList
.
value
=
res
.
map
(
item
=>
{
return
{
name
:
item
,
...
...
@@ -1051,30 +1051,33 @@ const initParam = () => {
customTime
.
value
=
JSON
.
parse
(
route
.
query
.
selectedDate
)
}
selectedCountry
.
value
=
route
.
query
.
orgnizationName
?
route
.
query
.
orgnizationName
:
'全部国家'
selectedProvince
.
value
=
route
.
query
.
selectedProvince
?
provinceList
.
value
.
filter
(
item
=>
item
.
name
.
indexOf
(
route
.
query
.
selectedProvince
)
>
-
1
)[
0
].
name
:
'全部省份'
selectedCountry
.
value
=
route
.
query
.
selectedCountryId
?
route
.
query
.
selectedCountryId
:
'全部国家'
isHalfRule
.
value
=
route
.
query
.
isHalfRule
?
true
:
false
isCnEntityOnly
.
value
=
route
.
query
.
isCnEntityOnly
?
true
:
false
selectedEntityType
.
value
=
route
.
query
.
selectedEntityType
?
route
.
query
.
selectedEntityType
:
'全部实体类型'
selectedEntityType
.
value
=
route
.
query
.
selectedEntityType
?
entityTypeList
.
value
.
filter
(
item
=>
item
.
name
===
route
.
query
.
selectedEntityType
)[
0
].
id
:
'全部实体类型'
const
query
=
route
.
query
;
if
(
Object
.
keys
(
query
).
length
>
0
)
{
sessionStorage
.
setItem
(
'
decree
RouteQuery'
,
JSON
.
stringify
(
query
));
sessionStorage
.
setItem
(
'
entity
RouteQuery'
,
JSON
.
stringify
(
query
));
}
}
else
{
const
savedQuery
=
JSON
.
parse
(
sessionStorage
.
getItem
(
'
decree
RouteQuery'
)
||
'{
}
'
);
const
savedQuery
=
JSON
.
parse
(
sessionStorage
.
getItem
(
'
entity
RouteQuery'
)
||
'{
}
'
);
selectedArea
.
value
=
savedQuery
.
domains
?
savedQuery
.
domains
:
'全部领域'
if
(
savedQuery
.
selectedDate
&&
Array
.
isArray
(
JSON
.
parse
(
savedQuery
.
selectedDate
))
&&
JSON
.
parse
(
savedQuery
.
selectedDate
).
length
)
{
selectedDate
.
value
=
'自定义'
customTime
.
value
=
JSON
.
parse
(
savedQuery
.
selectedDate
)
}
isHalfRule
.
value
=
savedQuery
.
isHalfRule
?
true
:
false
selectedProvince
.
value
=
savedQuery
.
selectedProvince
?
provinceList
.
value
.
filter
(
item
=>
item
.
name
.
indexOf
(
savedQuery
.
selectedProvince
)
>
-
1
)[
0
].
name
:
'全部省份'
selectedCountry
.
value
=
route
.
query
.
selectedCountryId
?
route
.
query
.
selectedCountryId
:
'全部国家'
isCnEntityOnly
.
value
=
savedQuery
.
isCnEntityOnly
?
true
:
false
selectedEntityType
.
value
=
savedQuery
.
selectedEntityType
?
savedQuery
.
selectedEntityType
:
'全部实体类型'
selectedEntityType
.
value
=
savedQuery
.
selectedEntityType
?
entityTypeList
.
value
.
filter
(
item
=>
item
.
name
===
savedQuery
.
selectedEntityType
)[
0
].
id
:
'全部实体类型'
}
}
...
...
@@ -1129,9 +1132,9 @@ const handleExport = () => {
}
;
onMounted
(
async
()
=>
{
handleGetProvinceList
()
// 获取省份列表
handleGetCountryList
()
// 获取国家列表
handleGetEntityTypes
()
// 获取实体类型列表
await
handleGetProvinceList
()
// 获取省份列表
await
handleGetCountryList
()
// 获取国家列表
await
handleGetEntityTypes
()
// 获取实体类型列表
initParam
()
// 初始化
await
fetchTableData
()
...
...
src/views/dataLibrary/exportControl/entityListEvent/index.vue
浏览文件 @
5c38f268
...
...
@@ -803,10 +803,10 @@ const initParam = () => {
const
query
=
route
.
query
;
if
(
Object
.
keys
(
query
).
length
>
0
)
{
sessionStorage
.
setItem
(
'
decree
RouteQuery'
,
JSON
.
stringify
(
query
));
sessionStorage
.
setItem
(
'
entityEvent
RouteQuery'
,
JSON
.
stringify
(
query
));
}
}
else
{
const
savedQuery
=
JSON
.
parse
(
sessionStorage
.
getItem
(
'
decree
RouteQuery'
)
||
'{
}
'
);
const
savedQuery
=
JSON
.
parse
(
sessionStorage
.
getItem
(
'
entityEvent
RouteQuery'
)
||
'{
}
'
);
selectedArea
.
value
=
savedQuery
.
domains
?
savedQuery
.
domains
:
'全部领域'
if
(
savedQuery
.
selectedDate
&&
Array
.
isArray
(
JSON
.
parse
(
savedQuery
.
selectedDate
))
&&
JSON
.
parse
(
savedQuery
.
selectedDate
).
length
)
{
selectedDate
.
value
=
'自定义'
...
...
src/views/dataLibrary/index.vue
浏览文件 @
5c38f268
...
...
@@ -393,7 +393,7 @@ const timer = ref(null);
// 关闭当前标签页
const
handleCloseCurTab
=
(
tab
,
index
)
=>
{
if
(
tagsViewStore
.
visitedViews
.
length
===
1
)
{
if
(
tagsViewStore
.
visitedViews
.
length
===
1
)
{
ElMessage
.
warning
(
'至少保留一个标签页'
)
return
}
...
...
@@ -494,16 +494,17 @@ onMounted(() => {
siderList
.
value
[
3
].
isExpanded
=
true
;
siderList
.
value
[
3
].
children
[
0
].
active
=
true
;
break
;
case
"/dataLibrary/data
CommerceControlLis
t"
:
case
"/dataLibrary/data
EntityListEven
t"
:
siderList
.
value
[
3
].
active
=
true
;
siderList
.
value
[
3
].
isExpanded
=
true
;
siderList
.
value
[
3
].
children
[
1
].
active
=
true
;
break
;
case
"/dataLibrary/data
EntityListEven
t"
:
case
"/dataLibrary/data
CommerceControlLis
t"
:
siderList
.
value
[
3
].
active
=
true
;
siderList
.
value
[
3
].
isExpanded
=
true
;
siderList
.
value
[
3
].
children
[
2
].
active
=
true
;
break
;
case
"/dataLibrary/dataCommerceControlListEvent"
:
siderList
.
value
[
3
].
active
=
true
;
siderList
.
value
[
3
].
isExpanded
=
true
;
...
...
src/views/decree/decreeHome/index.vue
浏览文件 @
5c38f268
...
...
@@ -63,66 +63,6 @@
<DivideHeader
id=
"position1"
class=
"divide"
:titleText=
"'最新动态'"
></DivideHeader>
<div
class=
"home-main-center"
>
<div
class=
"center-top"
>
<!-- <div class="box1">
<div class="box1-left" @click="handleSwithCurDecree('left')">
<div class="icon">
<img src="./assets/images/box1-left.svg" alt="" />
</div>
</div>
<div class="box1-right" @click="handleSwithCurDecree('right')">
<div class="icon">
<img src="./assets/images/box1-right.svg" alt="" />
</div>
</div>
<div class="box1-header">
<div class="box1-header-left">
<div class="icon">
<img src="./assets/images/box1-header-icon.png" alt="" />
</div>
<div class="title">{{ "最新科技政令" }}</div>
</div>
<div class="box1-header-right" @click="handleClickOrder">
{{ "查看详情 >" }}
</div>
</div>
<el-carousel ref="carouselRef" height="395px" :autoplay="true" :interval="3000" arrow="never"
indicator-position="none">
<el-carousel-item v-for="(item, index) in box1DataList" :key="index">
<div class="box1-main">
<div class="box1-main-left">
<img v-if="item.imageUrl" :src="item.imageUrl" alt="" />
<div v-else class="box1-main-left-img-mock">
<img class="img-mock-badge-img" src="./assets/images/badge.png" />
<p class="img-mock-badge-title">行政令</p>
<p class="img-mock-badge-title">{{ item.name }}</p>
</div>
</div>
<div class="box1-main-right">
<div class="box1-main-right-title">
{{ item.name }}
</div>
<div class="box1-main-right-info">
<AreaTag v-for="(tag, index) in item.industryList" :key="index" :tagName="tag.industryName" />
</div>
<div class="box1-main-right-center">
{{ item.describe }}
</div>
<div class="box1-main-right-footer">
<div class="footer-left">{{ item.postDate }}</div>
<div class="footer-right">
<div class="footer-right-item1">
{{ item.officialUrl }}
</div>
<div class="footer-right-item2">
<img src="./assets/images/open-icon.png" alt="" />
</div>
</div>
</div>
</div>
</div>
</el-carousel-item>
</el-carousel>
</div> -->
<OverviewMainBox
class=
"box1"
title=
"最新科技政令"
@
toDetail=
"handleClickOrder"
>
<
template
#
header-icon
>
<img
style=
"width: 100%; height: 100%"
src=
"./assets/images/box1-header-icon.png"
alt=
""
/>
...
...
@@ -610,7 +550,6 @@ const carouselRef = ref(null);
const
handleClickOrder
=
()
=>
{
let
index
=
carouselRef
.
value
?.
activeIndex
||
0
;
let
item
=
box1DataList
.
value
[
index
];
console
.
log
(
item
)
if
(
item
)
onNavigateToDetail
(
item
)
};
...
...
@@ -732,10 +671,7 @@ handleGetMessage();
// 点击人物头像,跳转到人物主页
const
handleClickPerson
=
async
item
=>
{
console
.
log
(
"person"
,
item
);
const
personTypeList
=
JSON
.
parse
(
window
.
sessionStorage
.
getItem
(
"personTypeList"
));
console
.
log
(
"personTypeList"
,
personTypeList
);
let
type
=
0
;
let
personTypeName
=
""
;
...
...
@@ -749,12 +685,9 @@ const handleClickPerson = async item => {
const
arr
=
personTypeList
.
filter
(
item
=>
{
return
item
.
typeId
===
res
.
data
.
personType
;
});
console
.
log
(
"arr"
,
arr
);
if
(
arr
&&
arr
.
length
>
0
)
{
personTypeName
=
arr
[
0
].
typeName
;
console
.
log
(
"personTypeName"
,
personTypeName
);
if
(
personTypeName
===
"科技企业领袖"
)
{
type
=
1
;
}
else
if
(
personTypeName
===
"国会议员"
)
{
...
...
@@ -1551,12 +1484,11 @@ onMounted(async () => {
position
:
absolute
;
right
:
-13px
;
top
:
-10px
;
padding
:
0
8px
;
height
:
26px
;
padding
:
4px
8px
6px
;
background-color
:
#FF4D4F
;
color
:
white
;
font-size
:
16px
;
line-height
:
2
6px
;
line-height
:
1
6px
;
font-family
:
Source
Han
Sans
CN
;
border-radius
:
14px
;
letter-spacing
:
1px
;
...
...
src/views/decree/decreeLayout/index.vue
浏览文件 @
5c38f268
...
...
@@ -69,85 +69,14 @@
<router-view
/>
</div>
</div>
<!--
<div
class=
"layout-report-box"
v-if=
"activeName === '法案原文'"
>
<div
class=
"report-close"
@
click=
"handleSwitchActiveName('分析报告')"
>
<img
src=
"./assets/images/report-close-icon.png"
alt=
""
/>
</div>
<div
class=
"report-main"
>
<div
class=
"report-header"
>
<div
class=
"report-header-left"
>
<div
class=
"text"
>
法案版本:
</div>
<div
class=
"select-box"
>
<el-select
v-model=
"curBill"
placeholder=
"选择法案"
style=
"width: 240px"
>
<el-option
v-for=
"item in billList"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
/>
</el-select>
</div>
</div>
<div
class=
"report-header-right"
>
<div
class=
"btn"
>
<div
class=
"icon"
>
<img
src=
"./assets/images/report-header-icon1.png"
alt=
""
/>
</div>
<div
class=
"text"
>
翻译
</div>
</div>
<div
class=
"btn"
>
<div
class=
"icon"
>
<img
src=
"./assets/images/report-header-icon2.png"
alt=
""
/>
</div>
<div
class=
"text"
>
下载
</div>
</div>
<div
class=
"btn"
>
<div
class=
"icon"
>
<img
src=
"./assets/images/report-header-icon3.png"
alt=
""
/>
</div>
<div
class=
"text"
>
对比
</div>
</div>
<div
class=
"btn"
>
<div
class=
"icon"
>
<img
src=
"./assets/images/report-header-icon4.png"
alt=
""
/>
</div>
<div
class=
"text"
>
查找
</div>
</div>
</div>
</div>
<div
class=
"report-content"
>
<div
class=
"content-left"
>
<img
src=
"./assets/images/report1.png"
alt=
""
/>
</div>
<div
class=
"content-right"
>
<img
src=
"./assets/images/report2.png"
alt=
""
/>
</div>
</div>
</div>
</div>
-->
<!--
<div
class=
"report"
v-if=
"isShowReport"
>
<div
class=
"report-close"
@
click=
"handleCloseReport"
>
<img
src=
"@/assets/icons/close.png"
alt=
""
/>
</div>
<div
class=
"report-header"
>
{{
"政令原文"
}}
</div>
<div
class=
"report-main"
>
<div
class=
"left"
>
<div
v-if=
"!reportUrl"
class=
"noContent"
>
{{
"中文原文暂无数据"
}}
</div>
<iframe
v-else
:src=
"reportUrl"
style=
"border: none"
width=
"100%"
height=
"100%"
>
</iframe>
</div>
<div
class=
"right"
>
<div
v-if=
"!reportUrlEn"
class=
"noContent"
>
{{
"英文原文暂无数据"
}}
</div>
<iframe
v-else
:src=
"reportUrlEn"
style=
"border: none"
width=
"100%"
height=
"100%"
>
</iframe>
</div>
</div>
</div>
-->
</div>
</
template
>
<
script
setup
>
import
{
ref
,
onMounted
,
onUnmounted
}
from
"vue"
;
import
{
ref
,
onMounted
}
from
"vue"
;
import
router
from
"@/router"
;
import
{
useRoute
}
from
"vue-router"
;
import
{
getDecreeSummary
}
from
"@/api/decree/introduction"
;
import
{
getDecreeReport
}
from
"@/api/decree/introduction"
;
import
search
from
"./assets/images/search.png"
;
import
icon1
from
"./assets/icons/icon1.svg"
;
import
icon1Active
from
"./assets/icons/icon1_active.svg"
;
...
...
@@ -156,7 +85,6 @@ import icon2Active from "./assets/icons/icon2_active.svg";
import
icon3
from
"./assets/icons/icon3.svg"
;
import
icon3Active
from
"./assets/icons/icon3_active.svg"
;
import
USALogo
from
"./assets/images/USA-logo.png"
;
import
DefaultIcon2
from
"@/assets/icons/default-icon2.png"
;
const
route
=
useRoute
();
...
...
@@ -224,28 +152,8 @@ const handleGetSummary = async () => {
}
}
catch
(
error
)
{}
document
.
title
=
pageTitle
;
window
.
sessionStorage
.
setItem
(
"curTabName"
,
pageTitle
);
};
// 获取报告原文
// const reportUrl = ref("");
// const reportUrlEn = ref("");
// const handleGetReport = async () => {
// try {
// const res = await getDecreeReport({id: route.query.id});
// console.log("报告原文", res);
// if (res.code === 200 && res.data) {
// reportUrl.value = res.data.content;
// reportUrlEn.value = res.data.contentEn;
// }
// } catch (error) {}
// };
// const isShowReport = ref(false);
// const handleCloseReport = () => {
// isShowReport.value = false;
// };
const
handleShowReport
=
()
=>
{
const
curRoute
=
router
.
resolve
({
path
:
"/decree/decreeOriginal"
,
...
...
@@ -291,7 +199,6 @@ onMounted(() => {
}
else
if
(
route
.
path
===
"/decreeLayout/influence"
)
{
activeTitle
.
value
=
"影响分析"
;
}
// handleGetReport();
});
</
script
>
...
...
@@ -312,20 +219,6 @@ onMounted(() => {
height
:
100%
;
background
:
#f7f8f9
;
.report-close
{
position
:
absolute
;
top
:
20px
;
right
:
230px
;
width
:
20px
;
height
:
20px
;
cursor
:
pointer
;
img
{
width
:
100%
;
height
:
100%
;
}
}
.report-header
{
width
:
100%
;
height
:
50px
;
...
...
@@ -639,130 +532,5 @@ onMounted(() => {
background-color
:
#f7f8f9
;
}
}
.layout-report-box
{
position
:
absolute
;
z-index
:
9999
;
top
:
154px
;
left
:
0
;
width
:
100%
;
height
:
926px
;
background
:
rgba
(
248
,
249
,
250
,
1
);
.report-close
{
position
:
absolute
;
top
:
24px
;
right
:
178px
;
width
:
32px
;
height
:
32px
;
cursor
:
pointer
;
img
{
width
:
100%
;
height
:
100%
;
}
}
.report-main
{
width
:
1600px
;
height
:
926px
;
margin
:
0
auto
;
background
:
#fff
;
box-sizing
:
border-box
;
padding
:
0
69px
;
.report-header
{
height
:
77px
;
border-bottom
:
1px
solid
rgba
(
240
,
242
,
244
,
1
);
display
:
flex
;
justify-content
:
space-between
;
.report-header-left
{
display
:
flex
;
.text
{
margin-top
:
32px
;
width
:
70px
;
height
:
14px
;
color
:
rgba
(
95
,
101
,
108
,
1
);
font-family
:
Microsoft
YaHei
;
font-size
:
14px
;
font-weight
:
400
;
line-height
:
14px
;
}
.select-box
{
margin-left
:
8px
;
margin-top
:
23px
;
}
}
.report-header-right
{
display
:
flex
;
margin-top
:
24px
;
.btn
{
display
:
flex
;
width
:
88px
;
height
:
32px
;
margin-left
:
8px
;
box-sizing
:
border-box
;
border
:
1px
solid
rgba
(
230
,
231
,
232
,
1
);
border-radius
:
4px
;
background
:
rgba
(
255
,
255
,
255
,
1
);
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
.icon
{
width
:
16px
;
height
:
16px
;
img
{
width
:
100%
;
height
:
100%
;
}
}
.text
{
margin-left
:
8px
;
height
:
32px
;
color
:
rgba
(
95
,
101
,
108
,
1
);
font-family
:
Microsoft
YaHei
;
font-size
:
16px
;
font-weight
:
400
;
line-height
:
32px
;
}
}
}
}
.report-content
{
display
:
flex
;
margin-top
:
35px
;
.content-left
{
width
:
680px
;
height
:
786px
;
img
{
width
:
100%
;
height
:
100%
;
}
}
.content-right
{
margin-left
:
89px
;
width
:
680px
;
height
:
786px
;
img
{
width
:
100%
;
height
:
100%
;
}
}
}
}
}
}
</
style
>
\ No newline at end of file
src/views/exportControl/index.vue
浏览文件 @
5c38f268
...
...
@@ -3,25 +3,12 @@
<div
class=
"home-main"
ref=
"homeMainRef"
>
<div
class=
"home-top-bg"
></div>
<div
class=
"home-main-header"
>
<SearchContainer
style=
"margin-bottom: 0; margin-top: 48px; height: fit-content"
v-if=
"homeMainRef"
placeholder=
"搜索出口管制"
:containerRef=
"homeMainRef"
areaName=
"实体清单"
/>
<SearchContainer
style=
"margin-bottom: 0; margin-top: 48px; height: fit-content"
v-if=
"homeMainRef"
placeholder=
"搜索出口管制"
:containerRef=
"homeMainRef"
areaName=
"实体清单"
/>
<div
class=
"home-main-header-footer-info"
>
<InfoCard
v-for=
"(item, index) in infoList"
:key=
"item.id"
:title=
"item.nameZh"
:subtitle=
"item.nameAbbr"
:description=
"item.description"
:quantity=
"item.postCount"
:unit=
"item.unit"
:color=
"infoListColor[index]"
@
click=
"handleToEntityListNoId(item)"
/>
<InfoCard
v-for=
"(item, index) in infoList"
:key=
"item.id"
:title=
"item.nameZh"
:subtitle=
"item.nameAbbr"
:description=
"item.description"
:quantity=
"item.postCount"
:unit=
"item.unit"
:color=
"infoListColor[index]"
@
click=
"handleToEntityListNoId(item)"
/>
</div>
</div>
...
...
@@ -47,15 +34,8 @@
<img
src=
"./assets/images/box1-right.png"
alt=
""
/>
</div>
</div>
<el-carousel
ref=
"carouselRef"
height=
"370px"
:autoplay=
"true"
:interval=
"3000"
arrow=
"never"
indicator-position=
"none"
@
change=
"handleCarouselChange"
>
<el-carousel
ref=
"carouselRef"
height=
"370px"
:autoplay=
"true"
:interval=
"3000"
arrow=
"never"
indicator-position=
"none"
@
change=
"handleCarouselChange"
>
<el-carousel-item
v-for=
"(item, index) in entitiesDataInfoList"
:key=
"item.id + index"
>
<div>
<div
class=
"box1-top"
>
...
...
@@ -80,29 +60,17 @@
>
<el-tag
:type=
"getTagType(domainItem)"
>
{{
domainItem
}}
</el-tag>
</div>
-->
<AreaTag
v-for=
"(domainItem, index) in item.domains"
:key=
"index"
:tagName=
"domainItem"
/>
<AreaTag
v-for=
"(domainItem, index) in item.domains"
:key=
"index"
:tagName=
"domainItem"
/>
</div>
</div>
</div>
<div
class=
"box1-bottom"
>
<div
class=
"box1-bottom-title"
>
· 涉及主要实体:
</div>
<div
class=
"box1-bottom-content"
>
<div
class=
"box1-bottom-content-item"
v-for=
"(ett, index) in item.sanEntities"
:key=
"index"
@
click=
"handleEntityClick(ett)"
>
<el-image
v-if=
"ett.img"
class=
"box1-bottom-content-item-img"
:src=
"ett.img"
alt=
""
></el-image>
<div
class=
"box1-bottom-content-item"
v-for=
"(ett, index) in item.sanEntities"
:key=
"index"
@
click=
"handleEntityClick(ett)"
>
<el-image
v-if=
"ett.img"
class=
"box1-bottom-content-item-img"
:src=
"ett.img"
alt=
""
></el-image>
<div
v-else
class=
"box1-bottom-content-item-imgUndefined"
>
{{
(
ett
.
orgName
||
ett
.
orgNameZh
)?.
match
(
...
...
@@ -175,14 +143,8 @@
</div>
</template>
</custom-container> -->
<RiskSignal
:list=
"warningList"
@
item-click=
"handleToRiskSignalDetail"
@
more-click=
"handleToMoreRiskSignal"
riskLevel=
"signalLevel"
postDate=
"signalTime"
name=
"signalTitle"
/>
<RiskSignal
:list=
"warningList"
@
item-click=
"handleToRiskSignalDetail"
@
more-click=
"handleToMoreRiskSignal"
riskLevel=
"signalLevel"
postDate=
"signalTime"
name=
"signalTitle"
/>
</el-col>
</el-row>
...
...
@@ -205,19 +167,11 @@
</custom-container>
</el-col> -->
<div
class=
"center-center"
>
<NewsList
:newsList=
"newsList"
@
item-click=
"handleNewsInfoClick"
@
more-click=
"handleToMoreNews"
content=
"newsContent"
/>
<MessageBubble
:messageList=
"socialMediaList"
@
person-click=
"handlePerClick"
imageUrl=
"avatar"
@
more-click=
"handleToSocialDetail"
/>
<NewsList
:newsList=
"newsList"
@
item-click=
"handleNewsInfoClick"
@
more-click=
"handleToMoreNews"
content=
"newsContent"
/>
<MessageBubble
:messageList=
"socialMediaList"
@
person-click=
"handlePerClick"
imageUrl=
"avatar"
@
more-click=
"handleToSocialDetail"
/>
<!-- <custom-container title="社交媒体" :titleIcon="dialogIcon" height="450px">
<template #default>
<div class="dialog-list">
...
...
@@ -237,25 +191,20 @@
<div
class=
"box3"
>
<div
class=
"box3-content"
>
<div
class=
"box3-content-title"
>
实体清单发布频次统计
</div>
<el-table
:data=
"entityListReleaseFreq"
stripe
style=
"width: 100%"
>
<el-table
:data=
"entityListReleaseFreq"
stripe
style=
"width: 100%"
@
row-click=
"handleEntityRowClick"
>
<el-table-column
prop=
"year"
label=
"年份"
width=
"200"
/>
<el-table-column
label=
"发布次数"
width=
"300"
>
<template
#
default=
"scope"
>
<div
style=
"display: flex; align-items: center"
>
<span
style=
"margin-right: 10px; width: 40px"
>
{{
scope
.
row
.
num
}}
次
</span>
<el-progress
:percentage=
"scope.row.percent * 100"
:show-text=
"false"
:status=
"getStatus(scope.row.percent)"
/>
<el-progress
:percentage=
"scope.row.percent * 100"
:show-text=
"false"
:status=
"getStatus(scope.row.percent)"
/>
</div>
</
template
>
</el-table-column>
<el-table-column
label=
"重点领域"
width=
"220"
align=
"center"
>
<
template
#
default=
"scope"
>
<div
style=
"display: flex; justify-content: center; align-items: center; gap: 5px"
>
<div
style=
"display: flex; justify-content: center; align-items: center; gap: 5px"
>
<AreaTag
v-for=
"tag in scope.row.tags"
:key=
"tag"
:tagName=
"tag"
/>
<!--
<el-tag
v-for=
"tag in scope.row.tags"
:key=
"tag"
:type=
"getTagType(tag)"
>
{{
tag
...
...
@@ -277,25 +226,21 @@
</div>
<div
class=
"box3-content"
>
<div
class=
"box3-content-title"
>
商业管制清单发布频次统计
</div>
<el-table
:data=
"commerceControlListReleaseFreq"
stripe
style=
"width: 100%"
>
<el-table
:data=
"commerceControlListReleaseFreq"
stripe
style=
"width: 100%"
@
row-click=
"handleCommercialRowClick"
>
<el-table-column
prop=
"year"
label=
"年份"
width=
"200"
/>
<el-table-column
label=
"发布次数"
width=
"300"
>
<
template
#
default=
"scope"
>
<div
style=
"display: flex; align-items: center"
>
<span
style=
"margin-right: 10px; width: 40px"
>
{{
scope
.
row
.
num
}}
次
</span>
<el-progress
:percentage=
"scope.row.percent * 100"
:show-text=
"false"
:status=
"getStatus(scope.row.percent)"
/>
<el-progress
:percentage=
"scope.row.percent * 100"
:show-text=
"false"
:status=
"getStatus(scope.row.percent)"
/>
</div>
</
template
>
</el-table-column>
<el-table-column
label=
"重点领域"
width=
"220"
align=
"center"
>
<
template
#
default=
"scope"
>
<div
style=
"display: flex; justify-content: center; align-items: center; gap: 5px"
>
<div
style=
"display: flex; justify-content: center; align-items: center; gap: 5px"
>
<el-tag
v-for=
"tag in scope.row.tags"
:key=
"tag"
:type=
"getTagType(tag)"
>
{{
tag
}}
</el-tag>
...
...
@@ -324,11 +269,8 @@
<
template
#
default=
"scope"
>
<div
style=
"display: flex; align-items: center"
>
<span
style=
"margin-right: 10px; width: 40px"
>
{{
scope
.
row
.
num
}}
次
</span>
<el-progress
:percentage=
"scope.row.percent * 100"
:show-text=
"false"
:status=
"getStatus(scope.row.percent)"
/>
<el-progress
:percentage=
"scope.row.percent * 100"
:show-text=
"false"
:status=
"getStatus(scope.row.percent)"
/>
</div>
</
template
>
</el-table-column>
...
...
@@ -356,7 +298,8 @@
<el-checkbox
v-model=
"domainChecked"
label=
"50%规则"
size=
"large"
/>
</
template
>
<
template
#
default
>
<EChart
:option=
"radarOption"
autoresize
:style=
"
{ height: '420px' }" />
<EChart
:option=
"radarOption"
autoresize
:style=
"
{ height: '420px' }"
@chart-click="handleRadarChartClick" />
<div
class=
"data-origin-box"
>
<div
class=
"data-origin-icon"
>
<img
:src=
"tipsIcon"
alt=
""
/>
...
...
@@ -381,7 +324,8 @@
</div>
</
template
>
<
template
#
default
>
<EChart
:option=
"trendOption"
autoresize
:style=
"
{ height: '420px' }" />
<EChart
:option=
"trendOption"
autoresize
:style=
"
{ height: '420px' }"
@chart-click="handleMultiBarChartClick" />
<div
class=
"data-origin-box"
>
<div
class=
"data-origin-icon"
>
<img
:src=
"tipsIcon"
alt=
""
/>
...
...
@@ -400,13 +344,9 @@
<el-row
:gutter=
"20"
style=
"width: 1600px; margin: 0 auto; margin-top: 39px; padding-bottom: 60px"
>
<CustomTitle
id=
"position4"
title=
"资源库"
style=
"margin-top: 0px"
/>
<div
class=
"resource-tabs"
>
<div
v-for=
"tab in resourceTabs"
:key=
"tab.value"
class=
"resource-tab-item"
<div
v-for=
"tab in resourceTabs"
:key=
"tab.value"
class=
"resource-tab-item"
:class=
"{ active: activeResourceTab == tab.value, disabled: tab.disabled }"
@
click=
"handleResourceTabClick(tab)"
>
@
click=
"handleResourceTabClick(tab)"
>
{{ tab.label }}
</div>
</div>
...
...
@@ -419,25 +359,15 @@
<div
class=
"box4-item"
v-for=
"(item, idx) in sanctionProcessList"
:key=
"item.title"
>
<div
class=
"box4-item-left"
>
<el-image
:src=
"dotIcon"
alt=
"图片"
class=
"box4-item-left-icon"
/>
<div
class=
"box4-item-left-line"
v-if=
"idx + 1 != sanctionProcessList.length"
></div>
<div
class=
"box4-item-left-line"
v-if=
"idx + 1 != sanctionProcessList.length"
></div>
</div>
<div
class=
"box4-item-right"
>
<div
class=
"box4-item-right-header"
@
click=
"handleSanc(item)"
>
<span
class=
"box4-item-right-header-title"
>
{{
item
.
postDate
}}
—
{{
item
.
title
}}
</span
>
<span
class=
"box4-item-right-header-title"
>
{{
item
.
postDate
}}
—
{{
item
.
title
}}
</span>
<span
class=
"box4-item-right-header-desc"
>
{{
item
.
desc
}}
</span>
</div>
<el-tooltip
effect=
"dark"
:content=
"item.content"
popper-class=
"common-prompt-popper"
placement=
"top"
:show-after=
"500"
>
<el-tooltip
effect=
"dark"
:content=
"item.content"
popper-class=
"common-prompt-popper"
placement=
"top"
:show-after=
"500"
>
<div
class=
"box4-item-right-content"
>
{{
item
.
content
}}
</div>
...
...
@@ -445,12 +375,8 @@
</div>
</div>
</div>
<div
class=
"box4-footer"
:style=
"
{ marginTop: sanctionProcessList.length > 0 ? '0px' : 'auto' }"
>
<el-button
type=
"primary"
link
@
click=
"handleGetMore"
>
查看更多
<div
class=
"box4-footer"
:style=
"
{ marginTop: sanctionProcessList.length > 0 ? '0px' : 'auto' }">
<el-button
type=
"primary"
link
@
click=
"handleGetMore"
>
查看更多
<el-icon>
<DArrowRight
/>
</el-icon>
...
...
@@ -467,24 +393,13 @@
</
template
>
<
template
#
default
>
<div
class=
"box5"
>
<el-table
:data=
"entitiesList"
class=
"sanction-table"
stripe
empty-text=
"暂无数据"
height=
"700px"
header-row-class-name=
"table-header"
row-class-name=
"table-row"
>
<el-table
:data=
"entitiesList"
class=
"sanction-table"
stripe
empty-text=
"暂无数据"
height=
"700px"
header-row-class-name=
"table-header"
row-class-name=
"table-row"
>
<el-table-column
prop=
"name"
label=
"实体名称"
min-width=
"200"
>
<template
#
default=
"scope"
>
<div
class=
"tableName"
@
click=
"handleCompClick(scope.row)"
>
<el-image
v-if=
"scope.row.img"
class=
"box1-bottom-content-item-img"
:src=
"scope.row.img"
alt=
""
></el-image>
<el-image
v-if=
"scope.row.img"
class=
"box1-bottom-content-item-img"
:src=
"scope.row.img"
alt=
""
></el-image>
<div
v-else
class=
"box1-bottom-content-item-imgUndefined"
>
{{
(
scope
.
row
.
name
||
scope
.
row
.
enName
)?.
match
(
...
...
@@ -538,19 +453,13 @@
<el-table-column
prop=
"revenue"
label=
"50%规则子企业"
width=
"280"
align=
"right"
>
<
template
#
default=
"scope"
>
<div
class=
"num-item"
v-if=
"scope.row.ruleOrgCount > 0"
>
<div
class=
"name-item"
:class=
"[
'revenue-cell',
scope.row.revenue === '无营收数据' ? 'no-revenue' : ''
]"
>
<div
class=
"name-item"
:class=
"[
'revenue-cell',
scope.row.revenue === '无营收数据' ? 'no-revenue' : ''
]"
>
{{
scope
.
row
.
ruleOrgList
[
0
].
orgName
}}
...等
</div>
<div
style=
"width: 50px; color: #409eff; cursor: pointer"
@
click=
"handleOrgClick(scope.row)"
>
<div
style=
"width: 50px; color: #409eff; cursor: pointer"
@
click=
"handleOrgClick(scope.row)"
>
{{
scope
.
row
.
ruleOrgCount
}}
家>
</div>
</div>
...
...
@@ -562,15 +471,8 @@
<!-- <div class="pagination-info">
第{{ currentPage }}页,共{{ totalPages }}页
</div> -->
<el-pagination
v-model:current-page=
"currentPage"
:page-size=
"pageSize"
:total=
"total"
:pager-count=
"5"
layout=
"prev, pager, next"
background
@
current-change=
"handlePageChange"
/>
<el-pagination
v-model:current-page=
"currentPage"
:page-size=
"pageSize"
:total=
"total"
:pager-count=
"5"
layout=
"prev, pager, next"
background
@
current-change=
"handlePageChange"
/>
</div>
</div>
</template>
...
...
@@ -636,14 +538,8 @@
</div>
<div
class=
"right-footer"
>
<div
class=
"total-count"
>
共
{{
totalAll
}}
项
</div>
<el-pagination
v-model:current-page=
"currentPageAll"
:page-size=
"pageSizeAll"
:total=
"totalAll"
layout=
"prev, pager, next"
background
@
current-change=
"handlePageChangeAll"
/>
<el-pagination
v-model:current-page=
"currentPageAll"
:page-size=
"pageSizeAll"
:total=
"totalAll"
layout=
"prev, pager, next"
background
@
current-change=
"handlePageChangeAll"
/>
</div>
</div>
</div>
...
...
@@ -1130,11 +1026,13 @@ const handleToEntityList = item => {
"curTabName"
,
entitiesDataInfoList
.
value
[
currentCarouselIndex
.
value
].
postDate
+
" 《实体清单新增条目》"
);
let
date
=
entitiesDataInfoList
.
value
[
currentCarouselIndex
.
value
].
postDate
const
routeData
=
router
.
resolve
({
path
:
"/exportControl/singleSanction"
,
query
:
{
id
,
sanTypeId
sanTypeId
,
date
}
});
// 打开一个新页面
...
...
@@ -1182,8 +1080,20 @@ const radarOption = ref({
text
:
""
},
tooltip
:
{
trigger
:
"item"
,
confine
:
true
// trigger: "item",
confine
:
true
,
trigger
:
'axis'
,
formatter
:
function
(
params
)
{
// params 包含所有系列的数据
if
(
!
params
||
params
.
length
===
0
)
return
''
;
const
radarData
=
params
[
0
];
const
indicator
=
radarData
.
axisValue
;
// 当前角度对应的指标名
const
value
=
radarData
.
value
;
// 只显示当前角度对应的指标
return
`
${
indicator
}
:
${
value
}
`
;
}
},
legend
:
{
show
:
false
,
...
...
@@ -1400,7 +1310,7 @@ const fetchSanctionList = async () => {
});
totalAll
.
value
=
res
.
totalElements
;
}
}
catch
(
error
)
{}
}
catch
(
error
)
{
}
};
const
handlePageChangeAll
=
val
=>
{
...
...
@@ -1694,7 +1604,7 @@ const handleGetHylyList = async () => {
hylymc
:
"全部分类"
};
categoryList
.
value
=
[
obj
,
...
categoryList
.
value
];
}
catch
(
error
)
{}
}
catch
(
error
)
{
}
};
const
chart1Data
=
ref
({
...
...
@@ -1785,6 +1695,64 @@ const handleSearch = () => {
window
.
open
(
curRoute
.
href
,
"_blank"
);
};
// 点击实体清单发布频次统计
const
handleEntityRowClick
=
(
row
)
=>
{
console
.
log
(
'row'
,
row
);
const
params
=
{
domains
:
row
.
tags
[
0
],
selectedDate
:
JSON
.
stringify
([
row
.
year
+
'-01-01'
,
row
.
year
+
'-12-31'
])
}
const
route
=
router
.
resolve
({
path
:
'/dataLibrary/dataEntityListEvent'
,
query
:
params
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 点击商业管制清单发布频次统计
const
handleCommercialRowClick
=
(
row
)
=>
{
console
.
log
(
'row'
,
row
);
const
params
=
{
domains
:
row
.
tags
[
0
],
selectedDate
:
JSON
.
stringify
([
row
.
year
+
'-01-01'
,
row
.
year
+
'-12-31'
])
}
const
route
=
router
.
resolve
({
path
:
'/dataLibrary/dataCommerceControlListEvent'
,
query
:
params
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 点击实体清单领域分布情况
const
handleRadarChartClick
=
(
value
)
=>
{
// console.log('value', value);
// alert(domainChecked.value)
const
params
=
{
isHalfRule
:
domainChecked
.
value
}
const
route
=
router
.
resolve
({
path
:
'/dataLibrary/dataEntityList'
,
query
:
params
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 点击制裁清单数量增长趋势
const
handleMultiBarChartClick
=
(
val
)
=>
{
// console.log('value', val);
const
params
=
{
domains
:
val
.
seriesName
,
selectedDate
:
JSON
.
stringify
([
val
.
name
+
'-01-01'
,
val
.
name
+
'-12-31'
])
}
const
route
=
router
.
resolve
({
path
:
'/dataLibrary/dataEntityListEvent'
,
query
:
params
});
window
.
open
(
route
.
href
,
"_blank"
);
}
onMounted
(
async
()
=>
{
handleGetHylyList
();
let
chart1
=
getMultiLineChart
(
chart1Data
.
value
.
title
,
chart1Data
.
value
.
data
[
0
].
value
,
chart1Data
.
value
.
data
[
1
].
value
);
...
...
@@ -2194,6 +2162,7 @@ const handleMediaClick = item => {
}
.box3-content
{
// flex: 1;
.el-progress--line
{
width
:
82px
;
...
...
@@ -3588,6 +3557,7 @@ const handleMediaClick = item => {
height
:
450px
;
display
:
flex
;
gap
:
20px
;
.center-center-news
{
flex-shrink
:
0
;
}
...
...
@@ -3608,16 +3578,19 @@ const handleMediaClick = item => {
align-items
:
center
;
justify-content
:
flex-start
;
padding
:
22px
0
;
.data-origin-icon
{
width
:
16px
;
height
:
16px
;
font-size
:
0px
;
margin-right
:
8px
;
img
{
width
:
100%
;
height
:
100%
;
}
}
.data-origin-text
{
font-family
:
Source
Han
Sans
CN
;
font-size
:
14px
;
...
...
@@ -3630,18 +3603,23 @@ const handleMediaClick = item => {
right
:
0px
;
bottom
:
15px
;
z-index
:
2
;
:deep
(
.ai-pane-wrapper
)
{
display
:
none
;
}
:deep
(
.ai-button-wrapper
)
{
display
:
flex
;
}
&
:hover
{
width
:
100%
;
bottom
:
0px
;
:deep
(
.ai-pane-wrapper
)
{
display
:
block
;
}
:deep
(
.ai-button-wrapper
)
{
display
:
none
;
}
...
...
src/views/exportControl/utils/charts.js
浏览文件 @
5c38f268
...
...
@@ -973,7 +973,7 @@ export const getMultipleBarChart_m = object => {
const
option
=
{
tooltip
:
{
trigger
:
"
axis
"
,
trigger
:
"
item
"
,
axisPointer
:
{
type
:
"shadow"
}
...
...
src/views/exportControl/v2.0EntityList/components/dataStatistics/index.vue
浏览文件 @
5c38f268
...
...
@@ -105,7 +105,8 @@
</div>
</
template
>
<!-- <div class="echarts" ref="sanctionCountChartRef"></div> -->
<EChart
:option=
"sanctionCountChartOption"
autoresize
:style=
"{ height: '300px', padding: '0 20px' }"
/>
<EChart
:option=
"sanctionCountChartOption"
autoresize
:style=
"{ height: '300px', padding: '0 20px' }"
@
chart-click=
"handleBarChartClick"
/>
<!-- <div class="bottom">
<div class="ai">
<div class="left">
...
...
@@ -139,17 +140,14 @@
<div
class=
"map-wrapper"
>
<div
class=
"map-chart"
ref=
"mapChartRef"
></div>
<div
class=
"rank-list"
>
<div
class=
"rank-item"
v-for=
"(item, index) in rankData"
:key=
"index"
>
<div
class=
"rank-item"
v-for=
"(item, index) in rankData"
:key=
"index"
@
click=
"handleClickRankChart(item)"
>
<div
class=
"rank-index"
:class=
"'rank-' + (index + 1)"
>
{{ index + 1 }}
</div>
<div
class=
"rank-name"
>
{{ item.name }}
</div>
<div
class=
"rank-bar-bg"
>
<div
class=
"rank-bar-fill"
:style=
"{
width: (item.value / maxRankValue) * 100 + '%',
background: getBarColor(index)
}"
></div>
<div
class=
"rank-bar-fill"
:style=
"{
width: (item.value / maxRankValue) * 100 + '%',
background: getBarColor(index)
}"
></div>
</div>
<div
class=
"rank-value"
>
{{ item.value }}家
</div>
</div>
...
...
@@ -186,7 +184,8 @@
</el-select>
</
template
>
<!-- <div class="echarts" ref="domainChartRef"></div> -->
<EChart
:option=
"domainChartOption"
autoresize
:style=
"{ height: '300px', padding: '0 20px' }"
/>
<EChart
:option=
"domainChartOption"
autoresize
:style=
"{ height: '300px', padding: '0 20px' }"
@
chart-click=
"handlePieChartClick"
/>
<!-- <div class="bottom">
<div class="ai">
<div class="left">
...
...
@@ -218,7 +217,7 @@
</el-select>
</
template
>
<!-- <div class="echarts" ref="typeChartRef"></div> -->
<EChart
:option=
"typeChartOption"
autoresize
:style=
"{ height: '300px', padding: '0 20px' }"
/>
<EChart
:option=
"typeChartOption"
autoresize
:style=
"{ height: '300px', padding: '0 20px' }"
@
chart-click=
"handlePieChartClick1"
/>
<!-- <div class="bottom">
<div class="ai">
<div class="left">
...
...
@@ -261,6 +260,7 @@ import {
}
from
"@/api/exportControlV2.0"
;
import
EChart
from
"@/components/Chart/index.vue"
;
import
{
useRoute
}
from
"vue-router"
;
import
{
useRouter
}
from
"vue-router"
;
import
tipsIcon
from
"../../../assets/icons/info-icon.png"
;
import
AiButton
from
"@/components/base/Ai/AiButton/index.vue"
;
import
AiPane
from
"@/components/base/Ai/AiPane/index.vue"
;
...
...
@@ -271,6 +271,7 @@ const typeChart = useChartInterpretation();
const
rankChart
=
useChartInterpretation
();
const
route
=
useRoute
();
const
router
=
useRouter
()
// 实体清单-数据统计-制裁实体类型分布情况
const
typeData
=
ref
([]);
const
getTypeCountData
=
async
()
=>
{
...
...
@@ -637,6 +638,17 @@ const updateMapChart = () => {
};
mapChartInstance
.
setOption
(
option
);
mapChartInstance
.
on
(
'click'
,
function
(
params
)
{
const
param
=
{
selectedProvince
:
params
.
name
,
selectedDate
:
regionTime
.
value
===
'all'
?
null
:
JSON
.
stringify
([
regionTime
.
value
+
'-01-01'
,
regionTime
.
value
+
'-12-31'
])
}
const
route
=
router
.
resolve
({
path
:
'/dataLibrary/dataEntityList'
,
query
:
param
});
window
.
open
(
route
.
href
,
"_blank"
);
});
};
const
initMapChart
=
()
=>
{
...
...
@@ -976,10 +988,10 @@ const updateTypeChart = () => {
let
data
=
typeData
.
value
.
length
?
[...
typeData
.
value
]
:
[
{
value
:
50
,
name
:
"企业"
},
{
value
:
32
,
name
:
"高校"
},
{
value
:
32
,
name
:
"科研院所"
}
];
{
value
:
50
,
name
:
"企业"
},
{
value
:
32
,
name
:
"高校"
},
{
value
:
32
,
name
:
"科研院所"
}
];
// 2. 聚合逻辑:保留前5项,其余合并为“其他”
data
.
sort
((
a
,
b
)
=>
b
.
value
-
a
.
value
);
...
...
@@ -1100,6 +1112,64 @@ const initTypeChart = () => {
};
const
sanTypeId
=
ref
(
""
);
// 点击制裁实体数量变化情况
const
handleBarChartClick
=
(
val
)
=>
{
console
.
log
(
'value'
,
val
);
const
params
=
{
selectedDate
:
activeTab
.
value
===
'year'
?
JSON
.
stringify
([
val
.
name
+
'-01-01'
,
val
.
name
+
'-12-31'
])
:
JSON
.
stringify
([
val
.
name
,
val
.
name
])
}
const
route
=
router
.
resolve
({
path
:
'/dataLibrary/dataEntityList'
,
query
:
params
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 制裁实体各省分布情况
const
handleClickRankChart
=
(
item
)
=>
{
// console.log('item', item);
const
params
=
{
selectedProvince
:
item
.
name
,
selectedDate
:
regionTime
.
value
===
'all'
?
null
:
JSON
.
stringify
([
regionTime
.
value
+
'-01-01'
,
regionTime
.
value
+
'-12-31'
])
}
const
route
=
router
.
resolve
({
path
:
'/dataLibrary/dataEntityList'
,
query
:
params
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 制裁实体领域分布情况
const
handlePieChartClick
=
(
val
)
=>
{
console
.
log
(
'val'
,
val
);
const
params
=
{
domains
:
val
.
name
,
selectedDate
:
domainTime
.
value
===
'all'
?
null
:
JSON
.
stringify
([
domainTime
.
value
+
'-01-01'
,
domainTime
.
value
+
'-12-31'
])
}
const
route
=
router
.
resolve
({
path
:
'/dataLibrary/dataEntityList'
,
query
:
params
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 制裁实体类型分布情况
const
handlePieChartClick1
=
(
val
)
=>
{
console
.
log
(
'val'
,
val
);
const
params
=
{
selectedEntityType
:
val
.
name
,
selectedDate
:
typeTime
.
value
===
'all'
?
null
:
JSON
.
stringify
([
typeTime
.
value
+
'-01-01'
,
typeTime
.
value
+
'-12-31'
])
}
const
route
=
router
.
resolve
({
path
:
'/dataLibrary/dataEntityList'
,
query
:
params
});
window
.
open
(
route
.
href
,
"_blank"
);
}
onMounted
(()
=>
{
sanTypeId
.
value
=
route
.
query
.
sanTypeId
||
""
;
console
.
log
(
"数据统计页面接收到的 sanTypeId:"
,
sanTypeId
.
value
);
...
...
@@ -1536,16 +1606,19 @@ onMounted(() => {
align-items
:
center
;
justify-content
:
flex-start
;
padding
:
22px
;
.data-origin-icon
{
width
:
16px
;
height
:
16px
;
font-size
:
0px
;
margin-right
:
8px
;
img
{
width
:
100%
;
height
:
100%
;
}
}
.data-origin-text
{
font-family
:
Source
Han
Sans
CN
;
font-size
:
14px
;
...
...
@@ -1558,18 +1631,23 @@ onMounted(() => {
right
:
0px
;
bottom
:
15px
;
z-index
:
2
;
:deep
(
.ai-pane-wrapper
)
{
display
:
none
;
}
:deep
(
.ai-button-wrapper
)
{
display
:
flex
;
}
&
:hover
{
width
:
100%
;
bottom
:
0px
;
:deep
(
.ai-pane-wrapper
)
{
display
:
block
;
}
:deep
(
.ai-button-wrapper
)
{
display
:
none
;
}
...
...
src/views/exportControl/v2.0SingleSanction/components/dataStatistics/index.vue
浏览文件 @
5c38f268
...
...
@@ -54,7 +54,8 @@
</div>
</div>
</div>
-->
<EChart
:option=
"domainChartOption"
autoresize
:style=
"
{ height: '300px', padding: '0 20px' }" />
<EChart
:option=
"domainChartOption"
autoresize
:style=
"
{ height: '300px', padding: '0 20px' }"
@chart-click="handlePieChartClick" />
<div
class=
"data-origin-box"
>
<div
class=
"data-origin-icon"
>
<img
:src=
"tipsIcon"
alt=
""
/>
...
...
@@ -104,7 +105,8 @@
</div>
</div>
</div>
-->
<EChart
:option=
"typeChartOption"
autoresize
:style=
"
{ height: '300px', padding: '0 20px' }" />
<EChart
:option=
"typeChartOption"
autoresize
:style=
"
{ height: '300px', padding: '0 20px' }"
@chart-click="handlePieChartClick1" />
<div
class=
"data-origin-box"
>
<div
class=
"data-origin-icon"
>
<img
:src=
"tipsIcon"
alt=
""
/>
...
...
@@ -120,17 +122,15 @@
<div
class=
"main-item"
>
<AnalysisBox
title=
"制裁实体国家地区分布情况"
>
<div
class=
"country-list"
>
<div
class=
"list-item"
v-for=
"(item, index) in countryDistribution"
:key=
"index"
>
<div
class=
"list-item"
v-for=
"(item, index) in countryDistribution"
:key=
"index"
@
click=
"handleClickRankChart(item)"
>
<img
:src=
"flag"
alt=
""
class=
"flag"
/>
<div
class=
"country-name"
>
{{
item
.
name
}}
</div>
<div
class=
"progress-bar-container"
>
<div
class=
"progress-bar"
:style=
"
{
width: item.width,
background: item.gradient
}"
>
</div>
<div
class=
"progress-bar"
:style=
"
{
width: item.width,
background: item.gradient
}">
</div>
</div>
<div
class=
"count"
:class=
"
{ highlight: index === 0 }">
{{
item
.
count
}}
家
</div>
</div>
...
...
@@ -163,17 +163,15 @@
<div
class=
"map-wrapper"
>
<div
class=
"map-chart"
ref=
"mapChartRef"
></div>
<div
class=
"rank-list"
>
<div
class=
"rank-item"
v-for=
"(item, index) in regionDistribution"
:key=
"index"
>
<div
class=
"rank-item"
v-for=
"(item, index) in regionDistribution"
:key=
"index"
@
click=
"handleRankChartClick(item)"
>
<div
class=
"rank-index"
:class=
"'rank-' + (index + 1)"
>
{{
index
+
1
}}
</div>
<div
class=
"rank-name"
>
{{
item
.
name
}}
</div>
<div
class=
"rank-bar-bg"
>
<div
class=
"rank-bar-fill"
:style=
"
{
width: (maxRegionCount > 0 ? (item.count / maxRegionCount) * 100 : 0) + '%',
background: getBarColor(index)
}"
>
</div>
<div
class=
"rank-bar-fill"
:style=
"
{
width: (maxRegionCount > 0 ? (item.count / maxRegionCount) * 100 : 0) + '%',
background: getBarColor(index)
}">
</div>
</div>
<div
class=
"rank-value"
>
{{
item
.
count
}}
家
</div>
</div>
...
...
@@ -474,6 +472,18 @@ const initMapChart = () => {
chart
.
setOption
(
option
);
chart
.
on
(
'click'
,
function
(
params
)
{
const
param
=
{
selectedProvince
:
params
.
name
,
selectedDate
:
JSON
.
stringify
([
route
.
query
.
date
,
route
.
query
.
date
])
}
const
curRoute
=
router
.
resolve
({
path
:
'/dataLibrary/dataEntityList'
,
query
:
param
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
});
window
.
addEventListener
(
"resize"
,
()
=>
{
chart
.
resize
();
});
...
...
@@ -841,6 +851,64 @@ const initTypeChart = () => {
// });
};
const
sanTypeId
=
ref
(
""
);
// 制裁实体领域分布情况
const
handlePieChartClick
=
(
val
)
=>
{
// console.log('val', val);
const
params
=
{
domains
:
val
.
name
,
selectedDate
:
JSON
.
stringify
([
route
.
query
.
date
,
route
.
query
.
date
])
}
const
curRoute
=
router
.
resolve
({
path
:
'/dataLibrary/dataEntityList'
,
query
:
params
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
}
// 制裁实体类型分布情况
const
handlePieChartClick1
=
(
val
)
=>
{
// console.log('val', val);
const
params
=
{
selectedEntityType
:
val
.
name
,
selectedDate
:
JSON
.
stringify
([
route
.
query
.
date
,
route
.
query
.
date
])
}
const
curRoute
=
router
.
resolve
({
path
:
'/dataLibrary/dataEntityList'
,
query
:
params
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
}
// 制裁实体国家地区分布情况
const
handleClickRankChart
=
(
item
)
=>
{
// console.log('item', item);
const
params
=
{
selectedCountryId
:
item
.
id
,
selectedDate
:
JSON
.
stringify
([
route
.
query
.
date
,
route
.
query
.
date
])
}
const
curRoute
=
router
.
resolve
({
path
:
'/dataLibrary/dataEntityList'
,
query
:
params
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
}
// 制裁实体各省分布情况
const
handleRankChartClick
=
(
item
)
=>
{
console
.
log
(
'item'
,
item
);
const
params
=
{
selectedProvince
:
item
.
name
,
selectedDate
:
JSON
.
stringify
([
route
.
query
.
date
,
route
.
query
.
date
])
}
const
curRoute
=
router
.
resolve
({
path
:
'/dataLibrary/dataEntityList'
,
query
:
params
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
}
onMounted
(()
=>
{
// 获取路由参数id
sanTypeId
.
value
=
route
.
query
.
sanTypeId
;
...
...
@@ -986,6 +1054,11 @@ onMounted(() => {
display
:
flex
;
align-items
:
center
;
margin-bottom
:
16px
;
cursor
:
pointer
;
&
:hover
{
background
:
var
(
--
color-primary-2
);
}
&
:last-child
{
margin-bottom
:
0
;
...
...
@@ -1284,22 +1357,26 @@ onMounted(() => {
}
}
}
.data-origin-box
{
width
:
100%
;
display
:
flex
;
align-items
:
center
;
justify-content
:
flex-start
;
padding
:
22px
;
.data-origin-icon
{
width
:
16px
;
height
:
16px
;
font-size
:
0px
;
margin-right
:
8px
;
img
{
width
:
100%
;
height
:
100%
;
}
}
.data-origin-text
{
font-family
:
Source
Han
Sans
CN
;
font-size
:
14px
;
...
...
@@ -1312,18 +1389,23 @@ onMounted(() => {
right
:
0px
;
bottom
:
15px
;
z-index
:
2
;
:deep
(
.ai-pane-wrapper
)
{
display
:
none
;
}
:deep
(
.ai-button-wrapper
)
{
display
:
flex
;
}
&
:hover
{
width
:
100%
;
bottom
:
0px
;
:deep
(
.ai-pane-wrapper
)
{
display
:
block
;
}
:deep
(
.ai-button-wrapper
)
{
display
:
none
;
}
...
...
src/views/marketAccessRestrictions/com/SurveyHistory.vue
浏览文件 @
5c38f268
...
...
@@ -48,7 +48,6 @@ const props = defineProps({
})
const
onNavigateToDetail
=
item
=>
{
window
.
sessionStorage
.
setItem
(
"curTabName"
,
item
.
searchname
);
const
curRoute
=
router
.
resolve
({
path
:
"/marketSingleCaseLayout/overview"
,
query
:
{
id
:
item
.
sortcode
,
searchId
:
item
.
searchid
}
...
...
src/views/marketAccessRestrictions/marketAccessHome/assets/icons/tips-icon.png
0 → 100644
浏览文件 @
5c38f268
1.0 KB
src/views/marketAccessRestrictions/marketAccessHome/com/CarouselItem232.vue
0 → 100644
浏览文件 @
5c38f268
<
template
>
<div
class=
"box-text-box"
>
<div
class=
"box-text-item"
>
<div
class=
"box-text-left"
>
{{
"启动时间:"
}}
</div>
<div
class=
"box-text-right one-line-ellipsis"
>
{{
props
.
baseInfo
.
searchnum
}}
</div>
</div>
<div
class=
"box-text-item"
>
<div
class=
"box-text-left"
>
{{
"调查概括:"
}}
</div>
<div
class=
"box-text-right two-line-ellipsis"
>
{{
props
.
baseInfo
.
product
}}
</div>
</div>
<div
class=
"box-text-item"
>
<div
class=
"box-text-left"
>
{{
"调查阶段:"
}}
</div>
<div
class=
"box-text-right one-line-ellipsis"
>
{{
props
.
baseInfo
.
plaintiff
}}
</div>
</div>
<div
class=
"box-text-item"
>
<div
class=
"box-text-left"
>
{{
"调查范围:"
}}
</div>
<div
class=
"box-text-right five-line-ellipsis"
>
{{
props
.
baseInfo
.
defendant
}}
</div>
</div>
</div>
</
template
>
<
script
setup
name=
"CarouselItem337"
>
const
props
=
defineProps
({
baseInfo
:
{
type
:
Object
,
default
:
()
=>
({})
}
})
</
script
>
<
style
scoped
lang=
"scss"
>
.box-text-box
{
width
:
100%
;
padding
:
20px
20px
0
;
height
:
185px
;
.box-text-item
{
display
:
flex
;
align-items
:
flex-start
;
line-height
:
30px
;
margin-bottom
:
8px
;
&
:
:
before
{
content
:
""
;
width
:
4px
;
height
:
4px
;
border-radius
:
2px
;
background
:
rgba
(
59
,
65
,
75
,
1
);
margin-top
:
16px
;
margin-right
:
12px
;
}
.box-text-left
{
height
:
30px
;
width
:
100px
;
color
:
rgba
(
59
,
65
,
75
,
1
);
font-family
:
Source
Han
Sans
CN
;
font-size
:
16px
;
font-weight
:
700
;
}
.box-text-right
{
min-height
:
30px
;
width
:
20px
;
flex
:
auto
;
color
:
rgba
(
59
,
65
,
75
,
1
);
font-family
:
Source
Han
Sans
CN
;
font-size
:
16px
;
}
.two-line-ellipsis
{
max-height
:
60px
;
display
:
-
webkit-box
;
-webkit-line-clamp
:
2
;
-webkit-box-orient
:
vertical
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
white-space
:
normal
;
}
.five-line-ellipsis
{
max-height
:
150px
;
display
:
-
webkit-box
;
-webkit-line-clamp
:
5
;
-webkit-box-orient
:
vertical
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
white-space
:
normal
;
}
}
}
</
style
>
\ No newline at end of file
src/views/marketAccessRestrictions/marketAccessHome/com/CarouselItem301.vue
0 → 100644
浏览文件 @
5c38f268
<
template
>
<div
class=
"box-blue-box"
>
<div
class=
"box-blue-name"
>
<div
class=
"box-blue-time"
>
{{
props
.
baseInfo
.
progressdate
}}
</div>
<div
class=
"box-blue-time"
>
{{
props
.
baseInfo
.
progressresult
}}
</div>
</div>
<div
class=
"box-blue-text one-line-ellipsis"
>
{{
props
.
baseInfo
.
progressdetails
}}
</div>
</div>
<div
class=
"box-text-box"
>
<div
class=
"box-text-item"
>
<div
class=
"box-text-left"
>
{{
"启动时间:"
}}
</div>
<div
class=
"box-text-right one-line-ellipsis"
>
{{
props
.
baseInfo
.
searchnum
}}
</div>
</div>
<div
class=
"box-text-item"
>
<div
class=
"box-text-left"
>
{{
"调查对象:"
}}
</div>
<div
class=
"box-text-right one-line-ellipsis"
>
{{
props
.
baseInfo
.
product
}}
</div>
</div>
<div
class=
"box-text-item"
>
<div
class=
"box-text-left"
>
{{
"调查状态:"
}}
</div>
<div
class=
"box-text-right one-line-ellipsis"
>
{{
props
.
baseInfo
.
plaintiff
}}
</div>
</div>
<div
class=
"box-text-item"
>
<div
class=
"box-text-left"
>
{{
"请愿方:"
}}
</div>
<div
class=
"box-text-right three-line-ellipsis"
>
{{
props
.
baseInfo
.
product
}}
</div>
</div>
</div>
</
template
>
<
script
setup
name=
"CarouselItem337"
>
const
props
=
defineProps
({
baseInfo
:
{
type
:
Object
,
default
:
()
=>
({})
}
})
</
script
>
<
style
scoped
lang=
"scss"
>
.box-blue-box
{
width
:
100%
;
padding
:
0
20px
10px
;
border
:
1px
solid
rgba
(
231
,
243
,
255
,
1
);
border-radius
:
4px
;
background
:
rgba
(
246
,
250
,
255
,
1
);
.box-blue-name
{
height
:
38px
;
display
:
flex
;
align-items
:
center
;
font-weight
:
bold
;
font-family
:
Source
Han
Sans
CN
;
font-size
:
16px
;
line-height
:
24px
;
color
:
var
(
--
text-primary-80-color
);
&
:
:
before
{
content
:
""
;
width
:
4px
;
height
:
4px
;
border-radius
:
2px
;
background
:
var
(
--
text-primary-80-color
);
margin-right
:
12px
;
}
.box-blue-time
{
height
:
24px
;
width
:
100px
;
}
}
.box-blue-text
{
padding-left
:
18px
;
height
:
30px
;
color
:
rgba
(
59
,
65
,
75
,
1
);
font-family
:
Source
Han
Sans
CN
;
font-size
:
16px
;
line-height
:
30px
;
}
}
.box-text-box
{
width
:
100%
;
padding
:
20px
20px
0
;
height
:
185px
;
.box-text-item
{
display
:
flex
;
align-items
:
flex-start
;
line-height
:
30px
;
margin-bottom
:
8px
;
&
:
:
before
{
content
:
""
;
width
:
4px
;
height
:
4px
;
border-radius
:
2px
;
background
:
rgba
(
59
,
65
,
75
,
1
);
margin-top
:
16px
;
margin-right
:
12px
;
}
.box-text-left
{
height
:
30px
;
width
:
100px
;
color
:
rgba
(
59
,
65
,
75
,
1
);
font-family
:
Source
Han
Sans
CN
;
font-size
:
16px
;
font-weight
:
700
;
}
.box-text-right
{
min-height
:
30px
;
width
:
20px
;
flex
:
auto
;
color
:
rgba
(
59
,
65
,
75
,
1
);
font-family
:
Source
Han
Sans
CN
;
font-size
:
16px
;
}
.three-line-ellipsis
{
max-height
:
90px
;
display
:
-
webkit-box
;
-webkit-line-clamp
:
3
;
-webkit-box-orient
:
vertical
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
white-space
:
normal
;
}
}
}
</
style
>
\ No newline at end of file
src/views/marketAccessRestrictions/marketAccessHome/com/CarouselItem337.vue
0 → 100644
浏览文件 @
5c38f268
<
template
>
<div
class=
"box-blue-box"
>
<div
class=
"box-blue-name"
>
<div
class=
"box-blue-time"
>
{{
props
.
baseInfo
.
progressdate
}}
</div>
<div
class=
"box-blue-time"
>
{{
props
.
baseInfo
.
progressresult
}}
</div>
</div>
<div
class=
"box-blue-text"
>
{{
props
.
baseInfo
.
progressdetails
}}
</div>
</div>
<div
class=
"box-text-box"
>
<div
class=
"box-text-item"
>
<div
class=
"box-text-left"
>
{{
"调查案号:"
}}
</div>
<div
class=
"box-text-right one-line-ellipsis"
>
{{
props
.
baseInfo
.
searchnum
}}
</div>
</div>
<div
class=
"box-text-item"
>
<div
class=
"box-text-left"
>
{{
"涉及产品:"
}}
</div>
<div
class=
"box-text-right one-line-ellipsis"
>
{{
props
.
baseInfo
.
product
}}
</div>
</div>
<div
class=
"box-text-item"
>
<div
class=
"box-text-left"
>
{{
"原告:"
}}
</div>
<div
class=
"box-text-right one-line-ellipsis"
>
{{
props
.
baseInfo
.
plaintiff
}}
</div>
</div>
<div
class=
"box-text-item"
>
<div
class=
"box-text-left"
>
{{
"被告:"
}}
</div>
<div
class=
"box-text-right one-line-ellipsis"
>
{{
props
.
baseInfo
.
defendant
}}
</div>
</div>
<div
class=
"box-text-item"
>
<div
class=
"box-text-left"
>
{{
"涉案专利:"
}}
</div>
<div
class=
"box-text-right one-line-ellipsis"
>
{{
props
.
baseInfo
.
patent
}}
</div>
</div>
</div>
</
template
>
<
script
setup
name=
"CarouselItem337"
>
const
props
=
defineProps
({
baseInfo
:
{
type
:
Object
,
default
:
()
=>
({})
}
})
</
script
>
<
style
scoped
lang=
"scss"
>
.box-blue-box
{
width
:
100%
;
padding
:
0
20px
10px
;
border
:
1px
solid
rgba
(
231
,
243
,
255
,
1
);
border-radius
:
4px
;
background
:
rgba
(
246
,
250
,
255
,
1
);
.box-blue-name
{
height
:
38px
;
display
:
flex
;
align-items
:
center
;
font-weight
:
bold
;
font-family
:
Source
Han
Sans
CN
;
font-size
:
16px
;
line-height
:
24px
;
color
:
var
(
--
text-primary-80-color
);
&
:
:
before
{
content
:
""
;
width
:
4px
;
height
:
4px
;
border-radius
:
2px
;
background
:
var
(
--
text-primary-80-color
);
margin-right
:
12px
;
}
.box-blue-time
{
height
:
24px
;
width
:
100px
;
}
}
.box-blue-text
{
padding-left
:
18px
;
height
:
60px
;
color
:
rgba
(
59
,
65
,
75
,
1
);
font-family
:
Source
Han
Sans
CN
;
font-size
:
16px
;
line-height
:
30px
;
display
:
-
webkit-box
;
-webkit-line-clamp
:
2
;
-webkit-box-orient
:
vertical
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
white-space
:
normal
;
}
}
.box-text-box
{
width
:
100%
;
padding
:
20px
20px
0
;
height
:
185px
;
.box-text-item
{
display
:
flex
;
align-items
:
flex-start
;
line-height
:
30px
;
margin-bottom
:
8px
;
&
:
:
before
{
content
:
""
;
width
:
4px
;
height
:
4px
;
border-radius
:
2px
;
background
:
rgba
(
59
,
65
,
75
,
1
);
margin-top
:
16px
;
margin-right
:
12px
;
}
.box-text-left
{
height
:
30px
;
width
:
100px
;
color
:
rgba
(
59
,
65
,
75
,
1
);
font-family
:
Source
Han
Sans
CN
;
font-size
:
16px
;
font-weight
:
700
;
}
.box-text-right
{
min-height
:
30px
;
width
:
20px
;
flex
:
auto
;
color
:
rgba
(
59
,
65
,
75
,
1
);
font-family
:
Source
Han
Sans
CN
;
font-size
:
16px
;
}
}
}
</
style
>
\ No newline at end of file
src/views/marketAccessRestrictions/marketAccessHome/index.vue
浏览文件 @
5c38f268
...
...
@@ -7,6 +7,13 @@
<SearchContainer
style=
"margin-bottom: 0;margin-top: 48px; height: fit-content"
v-if=
"containerRef"
placeholder=
"搜索市场准入限制调查"
:containerRef=
"containerRef"
areaName=
""
/>
</div>
<div
class=
"date-box"
v-if=
"sortInfo.length"
>
<div
class=
"date-icon"
>
<img
:src=
"tipsTcon"
alt=
""
>
</div>
<div
class=
"date-text"
>
近期美国各联邦政府机构市场准入调查数量汇总
</div>
<TimeTabPane
@
time-click=
"handleGetStatSort"
activeTime=
"近一年"
/>
</div>
<div
class=
"home-main-header-card-box"
>
<div
:class=
"getCardClass(item.sortCode)"
v-for=
"item in sortInfo"
:key=
"item.sortCode"
@
click=
"onNavigateToCase(item)"
>
<div
class=
"header"
>
...
...
@@ -19,6 +26,7 @@
{{
item
.
sortDescription
}}
<
/div
>
<
/div
>
<
div
class
=
"item-dot"
>+
{{
"999"
}}
<
/div
>
<
/div
>
<
/div
>
<
/div
>
...
...
@@ -28,81 +36,31 @@
<
div
class
=
"box1"
>
<
overviewMainBox
title
=
"调查进展"
@
toDetail
=
"handleClickToDetail()"
>
<
template
#
header
-
icon
>
<
img
style
=
"width:
100%; height:
100%"
src
=
"./assets/icons/icon_1599.png"
alt
=
""
/>
<
img
style
=
"width:
100%; height:
100%"
src
=
"./assets/icons/icon_1599.png"
alt
=
""
/>
<
/template
>
<
div
class
=
"box1-left"
@
click
=
"handleSwithCurSurvey('left')"
>
<
LeftBtn
/>
<
/div
>
<
div
class
=
"box1-right"
@
click
=
"handleSwithCurSurvey('right')"
>
<
RightBtn
/>
<
/div
>
<
el
-
carousel
ref
=
"carouselRef"
height
=
"395px"
:
autoplay
=
"true"
:
interval
=
"3000"
arrow
=
"never"
indicator
-
position
=
"none"
>
<
el
-
carousel
ref
=
"carouselRef"
height
=
"395px"
:
autoplay
=
"true"
:
interval
=
"3000"
arrow
=
"never"
indicator
-
position
=
"none"
>
<
el
-
carousel
-
item
v
-
for
=
"(item, index) in box1DataList"
:
key
=
"index"
>
<
div
class
=
"box1-main"
>
<
div
class
=
"box1-main-header"
>
<
div
class
=
"header-left"
>
{{
item
.
searchname
}}
<
/div
>
<
div
class
=
"header-right"
>
<
div
class
=
"tag1"
>
{{
item
.
searchsort
}}
<
/div
>
<
div
class
=
"area-tag-box"
v
-
if
=
"item.searchArea.length"
>
<
AreaTag
v
-
for
=
"(val, idx) in item.searchArea"
:
key
=
"idx"
:
tagName
=
"val"
/>
<
/div
>
<
/div
>
<
/div
>
<
div
class
=
"info-box"
>
<
div
class
=
"info-header"
>
<
div
class
=
"icon"
><
/div
>
<
div
class
=
"time"
>
{{
item
.
progressdate
}}
<
/div
>
<
div
class
=
"title"
>
{{
item
.
progressresult
}}
<
/div
>
<
/div
>
<
div
class
=
"info-content"
>
{{
item
.
progressdetails
}}
<
/div
>
<
/div
>
<
div
class
=
"list-box"
>
<
div
class
=
"list-item"
>
<
div
class
=
"icon"
><
/div
>
<
div
class
=
"list-left"
>
{{
"调查案号:"
}}
<
/div
>
<
div
class
=
"list-right"
>
{{
item
.
searchnum
}}
<
/div
>
<
/div
>
<
div
class
=
"list-item"
>
<
div
class
=
"icon"
><
/div
>
<
div
class
=
"list-left"
>
{{
"涉及产品:"
}}
<
/div
>
<
div
class
=
"list-right"
>
{{
item
.
product
}}
<
/div
>
<
/div
>
<
div
class
=
"list-item"
>
<
div
class
=
"icon"
><
/div
>
<
div
class
=
"list-left"
>
{{
"原告:"
}}
<
/div
>
<
div
class
=
"list-right"
>
{{
item
.
plaintiff
}}
<
/div
>
<
/div
>
<
div
class
=
"list-item"
>
<
div
class
=
"icon"
><
/div
>
<
div
class
=
"list-left"
>
{{
"被告:"
}}
<
/div
>
<
div
class
=
"list-right"
>
{{
item
.
defendant
}}
<
/div
>
<
/div
>
<
div
class
=
"list-item"
>
<
div
class
=
"icon"
><
/div
>
<
div
class
=
"list-left"
>
{{
"涉案专利:"
}}
<
/div
>
<
div
class
=
"list-right"
>
{{
item
.
patent
}}
<
/div
>
<
div
class
=
"box1-head-box"
>
<
div
:
class
=
"`box1-head-code box1-tags-${item.searchsort
}
`"
>
{{
item
.
searchsort
}}
调查
<
/div
>
<
div
class
=
"box1-head-name one-line-ellipsis"
>
{{
item
.
searchname
}}
<
/div
>
<
div
class
=
"box1-head-tags"
v
-
if
=
"item.searchArea.length"
>
<
AreaTag
v
-
for
=
"(val, idx) in item.searchArea.slice(0, 2)"
:
key
=
"idx"
:
tagName
=
"val"
/>
<
/div
>
<
/div
>
<
CarouselItem337
v
-
if
=
"item.searchsort==337"
:
baseInfo
=
"item"
><
/CarouselItem337
>
<
CarouselItem301
v
-
if
=
"item.searchsort==301"
:
baseInfo
=
"item"
><
/CarouselItem301
>
<
CarouselItem232
v
-
if
=
"item.searchsort==232"
:
baseInfo
=
"item"
><
/CarouselItem232
>
<
/div
>
<
/el-carousel-item
>
<
/el-carousel
>
<
div
class
=
"box1-left"
@
click
=
"handleSwithCurSurvey('left')"
>
<
LeftBtn
/>
<
/div
>
<
div
class
=
"box1-right"
@
click
=
"handleSwithCurSurvey('right')"
>
<
RightBtn
/>
<
/div
>
<
/overviewMainBox
>
<
/div
>
<
RiskSignal
:
list
=
"box2Data"
@
more
-
click
=
"handleToMoreRiskSignal"
@
item
-
click
=
"onNavigateToDetail"
postDate
=
"signalTime"
name
=
"signalTitle"
riskLevel
=
"signalLevel"
/>
<
/div
>
<
DivideHeader
id
=
"position2"
class
=
"divide-header"
:
titleText
=
"'资讯要闻'"
><
/DivideHeader
>
<
div
class
=
"center-center"
>
<
NewsList
:
newsList
=
"newsList"
@
item
-
click
=
"handleToNewsAnalysis"
@
more
-
click
=
"handleToMoreNews"
...
...
@@ -111,6 +69,7 @@
source
=
"orgName"
content
=
"remarks"
name
=
"personName"
imageUrl
=
"personImage"
>
<
/MessageBubble
>
<
/div
>
<
DivideHeader
id
=
"position3"
class
=
"divide-header"
:
titleText
=
"'数据总览'"
><
/DivideHeader
>
<
div
class
=
"center-footer"
>
<
div
class
=
"box5"
>
...
...
@@ -121,18 +80,17 @@
<
template
#
header
-
right
>
<
div
class
=
"box-header-right"
>
<
div
class
=
"box5-header-right-btn-box"
>
<
div
class
=
"right-box"
:
class
=
"{ rightBoxActive: box5BtnActive === item.value
}
"
v
-
for
=
"(item, index) in box5BtnList"
:
key
=
"index"
@
click
=
"handleChangeBox5Btn(item.value)"
>
{{
item
.
name
}}
<
/div
>
<
div
:
class
=
"['right-box', { 'box5-active': box5Active==1
}
]"
@
click
=
"hadleGetStatNum(1)"
>
按月度
<
/div
>
<
div
:
class
=
"['right-box', { 'box5-active': box5Active==12
}
]"
@
click
=
"hadleGetStatNum(12)"
>
按年度
<
/div
>
<
/div
>
<
/div
>
<
/template
>
<
div
class
=
"box
5
-main"
>
<
div
class
=
"box
5-main-chart"
id
=
"chart1"
><
/div
>
<
div
class
=
"box5-main-footer"
>
<
TipTab
/
>
<
div
class
=
"box
-echart
-main"
>
<
div
class
=
"box
-echart-content"
>
<
el
-
empty
v
-
if
=
"!box5ChartData.title.length"
description
=
"暂无数据"
style
=
"padding: 100px 0 0;"
:
image
-
size
=
"100"
/
>
<
div
v
-
if
=
"box5ChartData.title.length"
style
=
"width: 100%; height: 100%;"
id
=
"box5Chart"
><
/div
>
<
/div
>
<
TipTab
style
=
"margin-top: 6px;"
/>
<
/div
>
<
/OverviewNormalBox
>
<
/div
>
...
...
@@ -143,18 +101,17 @@
<
/template
>
<
template
#
header
-
right
>
<
div
class
=
"box-header-right"
>
<
el
-
select
v
-
model
=
"box6SelectedYear"
@
change
=
"handleChangeBox6Year"
placeholder
=
"选择时间"
style
=
"width: 120px"
>
<
el
-
select
v
-
model
=
"box6SelectedYear"
@
change
=
"handleChangeBox6Year"
placeholder
=
"选择时间"
style
=
"width: 120px"
>
<
el
-
option
v
-
for
=
"item in box7YearList"
:
key
=
"item.value"
:
label
=
"item.label"
:
value
=
"item.value"
/>
<
/el-select
>
<
/div
>
<
/template
>
<
div
class
=
"box6-main"
>
<
div
class
=
"box6-main-chart"
id
=
"chart2"
><
/div
>
<
div
class
=
"box6-main-footer"
>
<
TipTab
/>
<
div
class
=
"box-echart-main"
>
<
div
class
=
"box-echart-content"
>
<
el
-
empty
v
-
if
=
"!box6Data.title.length"
description
=
"暂无数据"
style
=
"padding: 100px 0 0;"
:
image
-
size
=
"100"
/>
<
div
v
-
if
=
"box6Data.title.length"
style
=
"width: 100%; height: 100%;"
id
=
"box6Chart"
><
/div
>
<
/div
>
<
TipTab
style
=
"margin-top: 6px;"
/>
<
/div
>
<
/OverviewNormalBox
>
<
/div
>
...
...
@@ -168,25 +125,21 @@
<
template
#
header
-
right
>
<
div
class
=
"box-header-right"
>
<
div
class
=
"box7-header-right-select-box"
>
<
el
-
select
v
-
model
=
"box7SelectedSurvey"
@
change
=
"handleBox7()"
placeholder
=
"选择调查"
style
=
"width: 120px"
>
<
el
-
option
v
-
for
=
"item in box8SurveyList"
:
key
=
"item.value"
:
label
=
"item.label"
:
value
=
"item.value"
/>
<
el
-
select
v
-
model
=
"box7SelectedSurvey"
@
change
=
"handleBox7()"
placeholder
=
"选择调查"
style
=
"width: 120px"
>
<
el
-
option
v
-
for
=
"item in box8SurveyList"
:
key
=
"item.value"
:
label
=
"item.label"
:
value
=
"item.value"
/>
<
/el-select
>
<
el
-
select
v
-
model
=
"box7SelectedYear"
@
change
=
"handleBox7()"
placeholder
=
"选择时间"
style
=
"width: 120px"
>
<
el
-
option
v
-
for
=
"item in box7YearList"
:
key
=
"item.value"
:
label
=
"item.label"
:
value
=
"item.value"
/>
<
el
-
select
v
-
model
=
"box7SelectedYear"
@
change
=
"handleBox7()"
placeholder
=
"选择时间"
style
=
"width: 120px"
>
<
el
-
option
v
-
for
=
"item in box7YearList"
:
key
=
"item.value"
:
label
=
"item.label"
:
value
=
"item.value"
/>
<
/el-select
>
<
/div
>
<
/div
>
<
/template
>
<
div
class
=
"box7-main"
>
<
el
-
empty
v
-
if
=
"box7Data.data.length === 0"
description
=
"暂无数据"
:
image
-
size
=
"100"
/>
<
div
v
-
if
=
"box7Data.data.length > 0"
class
=
"box7-main-chart-box"
id
=
"box7Chart"
><
/div
>
<
div
class
=
"box7-main-footer"
>
<
TipTab
/>
<
div
class
=
"box-echart-main"
>
<
div
class
=
"box-echart-content"
>
<
el
-
empty
v
-
if
=
"!box7Data.data.length"
description
=
"暂无数据"
style
=
"padding: 100px 0 0;"
:
image
-
size
=
"100"
/>
<
div
v
-
if
=
"box7Data.data.length"
style
=
"width: 100%; height: 100%;"
id
=
"box7Chart"
><
/div
>
<
/div
>
<
TipTab
style
=
"margin-top: 6px;"
/>
<
/div
>
<
/OverviewNormalBox
>
<
/div
>
...
...
@@ -197,22 +150,23 @@
<
/template
>
<
template
#
header
-
right
>
<
div
class
=
"box-header-right"
>
<
el
-
select
v
-
model
=
"box8SelectedSurvey"
@
change
=
"handleBox8()"
placeholder
=
"选择调查"
style
=
"width: 120px"
>
<
el
-
option
v
-
for
=
"item in box8SurveyList"
:
key
=
"item.value"
:
label
=
"item.label"
:
value
=
"item.value"
/>
<
el
-
select
v
-
model
=
"box8SelectedSurvey"
@
change
=
"handleGetBox8Data()"
placeholder
=
"选择调查"
style
=
"width: 120px"
>
<
el
-
option
v
-
for
=
"item in box8SurveyList"
:
key
=
"item.value"
:
label
=
"item.label"
:
value
=
"item.value"
/>
<
/el-select
>
<
/div
>
<
/template
>
<
el
-
empty
v
-
if
=
"box8Data.length === 0"
description
=
"暂无数据"
:
image
-
size
=
"120"
style
=
"padding-top: 100px;"
/>
<
div
v
-
if
=
"box8Data.length"
class
=
"box8-main"
id
=
"box8Chart"
><
/div
>
<
div
class
=
"box8-footer"
>
<
TipTab
/>
<
div
class
=
"box-echart-main"
>
<
div
class
=
"box-echart-content"
>
<
el
-
empty
v
-
if
=
"!box8Data.length"
description
=
"暂无数据"
style
=
"padding: 100px 0 0;"
:
image
-
size
=
"100"
/>
<
div
v
-
if
=
"box8Data.length"
style
=
"width: 100%; height: 100%;"
id
=
"box8Chart"
><
/div
>
<
/div
>
<
TipTab
style
=
"margin-top: 6px;"
/>
<
/div
>
<
/OverviewNormalBox
>
<
/div
>
<
/div
>
<
/div
>
<
div
class
=
"home-main-footer"
>
<
DivideHeader
id
=
"position4"
class
=
"divide-header"
:
titleText
=
"'资源库'"
><
/DivideHeader
>
<
div
class
=
"home-main-footer-header"
>
...
...
@@ -317,6 +271,10 @@ import MessageBubble from "@/components/base/messageBubble/index.vue"
import
NewsList
from
"@/components/base/newsList/index.vue"
;
import
DivideHeader
from
"@/components/DivideHeader.vue"
;
import
SurveyHistory
from
"@/views/marketAccessRestrictions/com/SurveyHistory.vue"
import
TimeTabPane
from
'@/components/base/TimeTabPane/index.vue'
;
import
CarouselItem337
from
'@/views/marketAccessRestrictions/marketAccessHome/com/CarouselItem337.vue'
;
import
CarouselItem301
from
'@/views/marketAccessRestrictions/marketAccessHome/com/CarouselItem301.vue'
;
import
CarouselItem232
from
'@/views/marketAccessRestrictions/marketAccessHome/com/CarouselItem232.vue'
;
import
setChart
from
"@/utils/setChart"
;
import
router
from
"@/router"
;
...
...
@@ -342,8 +300,9 @@ import {
import
{
getRiskSignal
,
getNews
,
getRemarks
}
from
"@/api/common/index"
;
import
{
ElMessage
}
from
"element-plus"
;
import
{
useGotoNewsDetail
}
from
'@/router/modules/news'
;
import
tipsTcon
from
"./assets/icons/tips-icon.png"
;
const
getCardClass
=
(
code
)
=>
[
'card'
,
`theme-${code
}
`
]
const
getCardClass
=
(
code
)
=>
[
'
theme-
card'
,
`theme-${code
}
`
]
const
handleToPosi
=
id
=>
{
const
element
=
document
.
getElementById
(
id
);
...
...
@@ -370,8 +329,9 @@ const handleToPosi = id => {
let
containerRef
=
ref
(
null
);
// 首页分类
const
sortInfo
=
ref
([{
}
]);
const
handleGetStatSort
=
async
()
=>
{
const
sortInfo
=
ref
([]);
const
handleGetStatSort
=
async
(
event
)
=>
{
console
.
log
(
'周期筛选'
,
event
)
try
{
const
res
=
await
getStatSort
();
console
.
log
(
"首页分类"
,
res
);
...
...
@@ -402,7 +362,6 @@ const handleClickToDetail = () => {
// 跳转调查案件
const
onNavigateToCase
=
(
item
)
=>
{
window
.
sessionStorage
.
setItem
(
"curTabName"
,
item
.
sortName
);
const
route
=
router
.
resolve
({
path
:
"/marketAccessLayout"
,
query
:
{
id
:
item
.
sortCode
}
...
...
@@ -550,22 +509,6 @@ const handleClickPerson = async item => {
}
catch
(
error
)
{
}
}
;
// 调查数量
const
box5BtnList
=
ref
([
{
name
:
"按月度"
,
value
:
1
}
,
{
name
:
"按年度"
,
value
:
12
}
]);
const
box5BtnActive
=
ref
(
1
);
const
handleChangeBox5Btn
=
val
=>
{
box5BtnActive
.
value
=
val
;
handleBox5
();
}
;
function
transformAllData
(
originalData
)
{
// 1. 提取所有年份并去重,排除null和undefined,然后按数字升序排序
const
allYears
=
[
...
...
@@ -658,44 +601,30 @@ function transformAllData1(originalData) {
}
const
box5ChartData
=
ref
({
title
:
[
"2014"
,
"2015"
,
"2016"
,
"2017"
,
"2018"
,
"2019"
,
"2020"
,
"2021"
,
"2022"
,
"2023"
,
"2024"
,
"2025"
],
title
:
[],
data
:
[
{
name
:
"337调查"
,
value
:
[
73
,
32
,
42
,
48
,
38
,
49
,
63
,
75
,
70
,
86
,
95
,
87
]
}
,
{
name
:
"301调查"
,
value
:
[
8
,
3
,
2
,
8
,
9
,
10
,
12
,
18
,
16
,
18
,
20
,
22
]
}
,
{
name
:
"232调查"
,
value
:
[
1
,
2
,
1
,
1
,
1
,
1
,
1
,
2
,
1
,
1
,
2
,
3
]
}
{
name
:
"337调查"
,
value
:
[]
}
,
{
name
:
"301调查"
,
value
:
[]
}
,
{
name
:
"232调查"
,
value
:
[]
}
]
}
);
const
hadleGetStatNum
=
async
()
=>
{
const
params
=
{
byYorM
:
box5BtnActive
.
value
// 月度:1 年度:12
}
;
const
box5Active
=
ref
(
1
);
const
hadleGetStatNum
=
async
(
event
)
=>
{
if
(
event
)
box5Active
.
value
=
event
;
try
{
const
res
=
await
getStatNum
(
params
);
let
byYorM
=
box5Active
.
value
const
res
=
await
getStatNum
({
byYorM
}
);
console
.
log
(
"调查数量"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
if
(
b
ox5BtnActive
.
value
===
1
)
{
if
(
b
yYorM
===
1
)
{
box5ChartData
.
value
=
transformAllData1
(
res
.
data
);
}
else
{
box5ChartData
.
value
=
transformAllData
(
res
.
data
);
}
console
.
log
(
"box5ChartData"
,
box5ChartData
.
value
);
}
}
catch
(
error
)
{
}
}
;
const
handleBox5
=
async
()
=>
{
await
hadleGetStatNum
();
let
chart1
=
getMultiLineChart
(
box5ChartData
.
value
);
setChart
(
chart1
,
"chart1"
);
}
catch
(
error
)
{
}
let
box5Chart
=
getMultiLineChart
(
box5ChartData
.
value
);
nextTick
(()
=>
{
setChart
(
box5Chart
,
"box5Chart"
)
}
)
}
;
// 制裁领域分布
...
...
@@ -706,18 +635,9 @@ const handleChangeBox6Year = () => {
const
box6Data
=
ref
({
title
:
[],
data
:
[
{
name
:
"337调查"
,
value
:
[]
}
,
{
name
:
"232调查"
,
value
:
[]
}
,
{
name
:
"301调查"
,
value
:
[]
}
{
name
:
"337调查"
,
value
:
[]
}
,
{
name
:
"232调查"
,
value
:
[]
}
,
{
name
:
"301调查"
,
value
:
[]
}
],
maxNum
:
0
}
);
...
...
@@ -789,8 +709,8 @@ const handleGetStatArea = async () => {
}
;
const
handleBox6
=
async
()
=>
{
await
handleGetStatArea
();
let
chart2
=
getRadarChart
(
box6Data
.
value
);
setChart
(
chart2
,
"chart2
"
);
let
box6Chart
=
getRadarChart
(
box6Data
.
value
);
setChart
(
box6Chart
,
"box6Chart
"
);
}
;
// 受调查国家分布
...
...
@@ -852,24 +772,16 @@ const handleGetBox8Data = async () => {
const
res
=
await
getSearchResult
({
sortCode
:
box8SelectedSurvey
.
value
}
);
console
.
log
(
"调查结果分布"
,
res
);
if
(
res
.
code
===
200
&&
res
.
data
)
{
box8Data
.
value
=
res
.
data
.
map
(
item
=>
{
return
{
name
:
item
.
RESULTNAME
,
value
:
item
.
RESULTNUM
}
}
)
box8Data
.
value
=
res
.
data
.
map
(
item
=>
({
name
:
item
.
RESULTNAME
,
value
:
item
.
RESULTNUM
}
))
}
else
{
box8Data
.
value
=
[]
}
}
catch
(
error
)
{
console
.
error
(
error
);
box8Data
.
value
=
[]
}
}
;
const
handleBox8
=
async
()
=>
{
await
handleGetBox8Data
()
const
box8Chart
=
getPieChart
(
box8Data
.
value
);
setChart
(
box8Chart
,
"box8Chart"
);
}
nextTick
(()
=>
{
setChart
(
box8Chart
,
"box8Chart"
)
}
)
}
;
// 资源库
const
pageSize
=
ref
(
10
);
...
...
@@ -1034,10 +946,10 @@ onMounted(async () => {
handleGetBox2Data
();
handleGetBox3Data
();
handleGetBox4Data
();
ha
ndleBox5
();
ha
dleGetStatNum
();
handleBox6
();
handleBox7
();
handle
Box8
();
handle
GetBox8Data
();
handleGetAllSearchCountry
()
handleGetInsList
()
handleGetSearchAllArea
();
...
...
@@ -1050,6 +962,19 @@ onMounted(async () => {
box
-
shadow
:
none
;
}
.
box
-
echart
-
main
{
width
:
100
%
;
height
:
100
%
;
display
:
flex
;
flex
-
direction
:
column
;
padding
:
8
px
22
px
20
px
;
.
box
-
echart
-
content
{
width
:
100
%
;
height
:
20
px
;
flex
:
auto
;
}
}
.
home
-
wrapper
{
width
:
100
%
;
height
:
100
%
;
...
...
@@ -1164,15 +1089,42 @@ onMounted(async () => {
}
}
.
date
-
box
{
display
:
flex
;
align
-
items
:
center
;
width
:
1600
px
;
margin
-
top
:
48
px
;
.
date
-
icon
{
width
:
16
px
;
height
:
16
px
;
font
-
size
:
0
px
;
margin
-
right
:
6
px
;
img
{
width
:
100
%
;
height
:
100
%
;
}
}
.
date
-
text
{
width
:
20
px
;
flex
:
auto
;
font
-
size
:
18
px
;
line
-
height
:
18
px
;
font
-
family
:
Source
Han
Sans
CN
;
color
:
var
(
--
text
-
primary
-
80
-
color
);
}
}
.
home
-
main
-
header
-
card
-
box
{
width
:
1600
px
;
margin
:
0
auto
;
margin
:
20
px
auto
0
;
height
:
142
px
;
margin
-
top
:
64
px
;
display
:
flex
;
justify
-
content
:
space
-
between
;
.
card
{
.
theme
-
card
{
transition
:
transform
0.3
s
ease
,
box
-
shadow
0.3
s
ease
;
width
:
520
px
;
height
:
142
px
;
...
...
@@ -1185,13 +1137,26 @@ onMounted(async () => {
&
::
before
{
content
:
""
;
position
:
absolute
;
z
-
index
:
99
;
left
:
0
;
top
:
15
px
;
width
:
4
px
;
height
:
111
px
;
}
.
item
-
dot
{
position
:
absolute
;
right
:
-
13
px
;
top
:
-
10
px
;
padding
:
4
px
8
px
6
px
;
background
-
color
:
#
FF4D4F
;
color
:
white
;
font
-
size
:
16
px
;
line
-
height
:
16
px
;
font
-
family
:
Source
Han
Sans
CN
;
border
-
radius
:
14
px
;
letter
-
spacing
:
1
px
;
}
.
header
{
height
:
56
px
;
display
:
flex
;
...
...
@@ -1291,7 +1256,6 @@ onMounted(async () => {
.
box1
-
left
{
position
:
absolute
;
left
:
0
;
z
-
index
:
9999
;
top
:
220
px
;
width
:
24
px
;
height
:
48
px
;
...
...
@@ -1307,7 +1271,6 @@ onMounted(async () => {
position
:
absolute
;
right
:
0
;
top
:
220
px
;
z
-
index
:
9999
;
width
:
24
px
;
height
:
48
px
;
cursor
:
pointer
;
...
...
@@ -1326,19 +1289,16 @@ onMounted(async () => {
.
box1
-
header
-
left
{
display
:
flex
;
.
icon
{
width
:
19
px
;
height
:
18
px
;
margin
-
top
:
15
px
;
margin
-
left
:
22
px
;
img
{
width
:
100
%
;
height
:
100
%
;
}
}
.
title
{
width
:
112
px
;
height
:
48
px
;
...
...
@@ -1367,166 +1327,53 @@ onMounted(async () => {
}
.
box1
-
main
{
width
:
10
64
px
;
width
:
10
0
%
;
height
:
354
px
;
margin
-
top
:
16
px
;
margin
-
left
:
31
px
;
.
box1
-
main
-
header
{
width
:
990
px
;
padding
:
0
40
px
;
.
box1
-
head
-
box
{
width
:
100
%
;
height
:
60
px
;
display
:
flex
;
justify
-
content
:
space
-
between
;
align
-
items
:
center
;
.
header
-
left
{
width
:
660
px
;
padding
-
left
:
22
px
;
color
:
var
(
--
color
-
main
-
active
);
font
-
family
:
Source
Han
Sans
CN
;
font
-
size
:
20
px
;
font
-
weight
:
700
;
.
box1
-
head
-
code
{
height
:
26
px
;
line
-
height
:
26
px
;
font
-
size
:
14
px
;
padding
:
0
8
px
;
font
-
family
:
Microsoft
YaHei
;
border
-
radius
:
4
px
;
font
-
weight
:
bold
;
margin
-
right
:
10
px
;
}
.
header
-
right
{
display
:
flex
;
width
:
320
px
;
justify
-
content
:
flex
-
end
;
align
-
items
:
center
;
flex
-
wrap
:
wrap
;
.
tag1
{
height
:
24
px
;
line
-
height
:
24
px
;
padding
:
0
8
px
;
box
-
sizing
:
border
-
box
;
color
:
var
(
--
color
-
main
-
active
);
border
:
1
px
solid
rgba
(
145
,
202
,
255
,
1
);
border
-
radius
:
4
px
;
background
:
rgba
(
230
,
244
,
255
,
1
);
}
.
area
-
tag
-
box
{
flex
:
1
;
margin
-
left
:
8
px
;
display
:
flex
;
flex
-
wrap
:
wrap
;
gap
:
8
px
;
}
.
box1
-
tags
-
337
{
border
:
1
px
solid
#
91
caff
;
background
:
#
e6f4ff
;
color
:
#
055
fc2
;
}
}
.
info
-
box
{
margin
-
left
:
6
px
;
width
:
989
px
;
height
:
108
px
;
box
-
sizing
:
border
-
box
;
border
:
1
px
solid
rgba
(
231
,
243
,
255
,
1
);
border
-
radius
:
4
px
;
background
:
rgba
(
246
,
250
,
255
,
1
);
.
info
-
header
{
height
:
38
px
;
display
:
flex
;
.
icon
{
width
:
4
px
;
height
:
4
px
;
border
-
radius
:
2
px
;
background
:
rgba
(
59
,
65
,
75
,
1
);
margin
-
left
:
24
px
;
margin
-
top
:
20
px
;
}
.
time
{
width
:
200
px
;
height
:
24
px
;
margin
-
top
:
10
px
;
margin
-
left
:
12
px
;
color
:
rgba
(
59
,
65
,
75
,
1
);
font
-
family
:
Source
Han
Sans
CN
;
font
-
size
:
16
px
;
font
-
weight
:
700
;
line
-
height
:
24
px
;
}
.
title
{
width
:
200
px
;
margin
-
left
:
11
px
;
margin
-
top
:
10
px
;
height
:
24
px
;
color
:
rgba
(
59
,
65
,
75
,
1
);
font
-
family
:
Source
Han
Sans
CN
;
font
-
size
:
16
px
;
font
-
weight
:
700
;
line
-
height
:
24
px
;
}
.
box1
-
tags
-
232
{
border
:
1
px
solid
#
b37feb
;
background
:
#
f9f0ff
;
color
:
#
722
ed1
;
}
.
info
-
content
{
width
:
909
px
;
height
:
60
px
;
color
:
rgba
(
59
,
65
,
75
,
1
);
.
box1
-
tags
-
301
{
border
:
1
px
solid
#
ffd591
;
background
:
#
fff7e6
;
color
:
#
fa8c16
;
}
.
box1
-
head
-
name
{
width
:
20
px
;
flex
:
auto
;
color
:
var
(
--
color
-
main
-
active
);
font
-
family
:
Source
Han
Sans
CN
;
font
-
size
:
16
px
;
font
-
weight
:
400
;
line
-
height
:
30
px
;
margin
-
left
:
41
px
;
margin
-
top
:
4
px
;
display
:
-
webkit
-
box
;
-
webkit
-
line
-
clamp
:
2
;
-
webkit
-
box
-
orient
:
vertical
;
overflow
:
hidden
;
text
-
overflow
:
ellipsis
;
white
-
space
:
normal
;
font
-
size
:
20
px
;
font
-
weight
:
bold
;
line
-
height
:
26
px
;
}
}
.
list
-
box
{
margin
-
top
:
18
px
;
margin
-
left
:
28
px
;
width
:
940
px
;
height
:
185
px
;
overflow
:
hidden
;
overflow
-
y
:
auto
;
.
list
-
item
{
height
:
37
px
;
.
box1
-
head
-
tags
{
margin
-
left
:
40
px
;
display
:
flex
;
.
icon
{
width
:
4
px
;
height
:
4
px
;
border
-
radius
:
2
px
;
background
:
rgba
(
59
,
65
,
75
,
1
);
margin
-
top
:
16
px
;
}
.
list
-
left
{
margin
-
left
:
18
px
;
line
-
height
:
37
px
;
width
:
80
px
;
color
:
rgba
(
59
,
65
,
75
,
1
);
font
-
family
:
Source
Han
Sans
CN
;
font
-
size
:
16
px
;
font
-
weight
:
700
;
text
-
align
:
right
;
}
.
list
-
right
{
line
-
height
:
37
px
;
margin
-
left
:
17
px
;
color
:
rgba
(
59
,
65
,
75
,
1
);
font
-
family
:
Source
Han
Sans
CN
;
font
-
size
:
16
px
;
font
-
weight
:
400
;
width
:
820
px
;
overflow
:
hidden
;
text
-
overflow
:
ellipsis
;
white
-
space
:
nowrap
;
}
gap
:
8
px
;
}
}
}
...
...
@@ -1535,9 +1382,6 @@ onMounted(async () => {
.
box2
{
width
:
521
px
;
height
:
450
px
;
// border-radius: 10px;
// box-shadow: 0px 0px 15px 0px rgba(22, 119, 255, 0.1);
// background: rgba(255, 255, 255, 1);
position
:
relative
;
.
box2
-
header
{
...
...
@@ -1891,7 +1735,7 @@ onMounted(async () => {
cursor
:
pointer
;
}
.
rightBoxA
ctive
{
.
box5
-
a
ctive
{
color
:
var
(
--
color
-
main
-
active
);
border
:
1
px
solid
var
(
--
color
-
main
-
active
);
border
-
radius
:
4
px
;
...
...
@@ -1899,17 +1743,6 @@ onMounted(async () => {
}
}
}
.
box5
-
main
{
height
:
410
px
;
position
:
relative
;
z
-
index
:
0
;
.
box5
-
main
-
chart
{
height
:
370
px
;
}
}
}
.
box6
{
...
...
@@ -1922,25 +1755,6 @@ onMounted(async () => {
justify
-
content
:
flex
-
end
;
align
-
items
:
center
;
gap
:
8
px
;
}
.
box6
-
main
{
height
:
360
px
;
position
:
relative
;
.
box6
-
main
-
chart
{
height
:
370
px
;
position
:
relative
;
z
-
index
:
99
;
}
.
box6
-
main
-
footer
{
width
:
100
%
;
height
:
40
px
;
}
}
}
}
...
...
@@ -1967,18 +1781,6 @@ onMounted(async () => {
gap
:
12
px
;
}
}
.
box7
-
main
{
height
:
412
px
;
.
box7
-
main
-
chart
-
box
{
height
:
372
px
;
}
.
box7
-
main
-
footer
{
height
:
40
px
;
}
}
}
.
box8
{
...
...
@@ -1991,17 +1793,6 @@ onMounted(async () => {
justify
-
content
:
flex
-
end
;
align
-
items
:
center
;
gap
:
8
px
;
}
.
box8
-
main
{
width
:
calc
(
100
%
-
40
px
);
margin
:
0
auto
;
height
:
360
px
;
}
.
box8
-
footer
{
height
:
40
px
;
}
}
}
...
...
src/views/marketAccessRestrictions/marketAccessHome/utils/barChart1.js
浏览文件 @
5c38f268
...
...
@@ -5,10 +5,12 @@ const getBarChart = (nameList, valueList) => {
const
option
=
{
tooltip
:
{},
grid
:
{
top
:
'8%'
,
right
:
24
,
bottom
:
24
,
left
:
24
,
width
:
'100%'
,
height
:
'83%'
,
top
:
'15%'
,
right
:
'5%'
,
bottom
:
'2%'
,
left
:
'1%'
,
containLabel
:
true
},
yAxis
:
{
...
...
src/views/marketAccessRestrictions/marketAccessHome/utils/multiLineChart.js
浏览文件 @
5c38f268
import
*
as
echarts
from
'echarts'
const
getMultiLineChart
=
(
data
)
=>
{
console
.
log
(
'dataaaa'
,
data
);
return
{
tooltip
:
{
trigger
:
'
axis
'
,
trigger
:
'
item
'
,
axisPointer
:
{
type
:
'cross'
,
label
:
{
...
...
@@ -14,44 +12,79 @@ const getMultiLineChart = (data) => {
}
},
grid
:
{
top
:
48
,
right
:
24
,
bottom
:
24
,
left
:
24
,
width
:
'95%'
,
height
:
'83%'
,
top
:
'15%'
,
left
:
'1%'
,
containLabel
:
true
},
legend
:
{
show
:
true
,
top
:
10
,
left
:
'10%'
icon
:
'circle'
,
textStyle
:
{
color
:
'rgba(95, 101, 108, 1)'
,
fontFamily
:
'Microsoft YaHei'
,
fontSize
:
'14px'
,
}
},
color
:
[
'#0A57A6'
,
'#FA8C16'
,
'#722ED1'
],
xAxis
:
[
{
type
:
'category'
,
boundaryGap
:
false
,
data
:
data
.
title
data
:
data
.
title
,
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#e7f3ff'
,
},
},
axisLabel
:
{
show
:
true
,
textStyle
:
{
color
:
'rgba(95, 101, 108, 1)'
,
fontFamily
:
'Microsoft YaHei'
,
fontsize
:
14
,
}
}
}
],
yAxis
:
[
{
type
:
'value'
,
position
:
'left'
,
name
:
'数量'
,
nameLocation
:
'end'
,
nameGap
:
12
,
nameTextStyle
:
{
color
:
'#666'
,
fontSize
:
14
,
fontWeight
:
400
,
padding
:
[
0
,
0
,
6
,
-
20
]
},
axisLabel
:
{
formatter
:
'{value}'
,
color
:
'#666'
,
fontSize
:
14
,
fontWeight
:
400
},
splitLine
:
{
show
:
true
,
lineStyle
:
{
type
:
'dashed'
,
// 虚线类型
color
:
'rgb(231, 243, 255)'
,
// 灰色线条
width
:
1
// 线宽为1
color
:
'#e7f3ff'
,
type
:
'dashed'
,
}
}
}
,
}
],
series
:
[
{
name
:
data
.
data
[
0
]?.
name
,
type
:
'line'
,
smooth
:
true
,
symbol
:
'emptyCircle'
,
symbolSize
:
6
,
areaStyle
:
{
color
:
new
echarts
.
graphic
.
LinearGradient
(
0
,
0
,
0
,
1
,
[{
offset
:
0
,
...
...
@@ -69,6 +102,9 @@ const getMultiLineChart = (data) => {
{
name
:
data
.
data
[
1
]?.
name
,
type
:
'line'
,
smooth
:
true
,
symbol
:
'emptyCircle'
,
symbolSize
:
6
,
areaStyle
:
{
color
:
new
echarts
.
graphic
.
LinearGradient
(
0
,
0
,
0
,
1
,
[{
offset
:
0
,
...
...
@@ -86,6 +122,9 @@ const getMultiLineChart = (data) => {
{
name
:
data
.
data
[
2
]?.
name
,
type
:
'line'
,
smooth
:
true
,
symbol
:
'emptyCircle'
,
symbolSize
:
6
,
areaStyle
:
{
color
:
new
echarts
.
graphic
.
LinearGradient
(
0
,
0
,
0
,
1
,
[{
offset
:
0
,
...
...
src/views/marketAccessRestrictions/marketAccessLayout/case/337/index.vue
浏览文件 @
5c38f268
...
...
@@ -200,8 +200,8 @@ const handleFetchSurveyList = async () => {
publishYear
:
checkedYearList
.
value
.
join
(
','
)
||
null
,
Area
:
checkedAreaList
.
value
.
join
(
','
)
||
null
,
searchCountry
:
checkedCountryList
.
value
.
join
(
','
)
||
null
,
caseStatus
:
filterStage
.
value
?
filterStage
.
value
:
null
,
keywords
:
searchText
.
value
?
searchText
.
value
:
null
,
caseStatus
:
filterStage
.
value
||
null
,
keywords
:
searchText
.
value
||
null
,
sortField
:
"date"
,
sortOrder
:
isSort
.
value
?
"asc"
:
"desc"
};
...
...
src/views/marketAccessRestrictions/marketAccessLayout/index.vue
浏览文件 @
5c38f268
...
...
@@ -3,11 +3,11 @@
<div
class=
"page-top"
>
<div
class=
"head-box"
>
<div
class=
"head-icon"
>
<img
:src=
"c
urSurvey.image
"
alt=
""
/>
<img
:src=
"c
odeInfo.sortImageUrl || Img337
"
alt=
""
/>
</div>
<div
class=
"head-info"
>
<div
class=
"head-name one-line-ellipsis"
>
{{
c
urSurvey
.
titl
e
}}
</div>
<div
class=
"head-text one-line-ellipsis"
>
{{
c
urSurvey
.
desc
}}
</div>
<div
class=
"head-name one-line-ellipsis"
>
{{
c
odeInfo
.
sortNam
e
}}
</div>
<div
class=
"head-text one-line-ellipsis"
>
{{
c
odeInfo
.
sortDescription
}}
</div>
</div>
<!--
<div
class=
"head-button"
>
<div
class=
"button-icon"
>
...
...
@@ -35,7 +35,7 @@
</
template
>
<
script
setup
>
import
{
ref
,
computed
,
onMounted
}
from
"vue"
;
import
{
ref
,
onMounted
,
reactive
}
from
"vue"
;
import
router
from
"@/router/index"
;
import
icon1
from
"./assets/icons/icon1.svg"
;
import
icon1Active
from
"./assets/icons/icon1_active.svg"
;
...
...
@@ -44,6 +44,7 @@ import icon2Active from "./assets/icons/icon2_active.svg";
import
Img337
from
"./assets/images/337.png"
;
import
Img232
from
"./assets/images/232.png"
;
import
Img301
from
"./assets/images/301.png"
;
import
{
getSurvyInfo
}
from
"@/api/marketAccessRestrictions/index.js"
import
{
useRoute
}
from
"vue-router"
;
const
route
=
useRoute
();
...
...
@@ -63,27 +64,23 @@ const tabList = ref([
}
]);
const
curSurvey
=
computed
(()
=>
{
if
(
route
.
query
.
id
===
"301"
)
{
return
{
title
:
"301调查"
,
desc
:
'由美国贸易代表办公室依据《1974年贸易法》第301条针对"不合理或不公正贸易做法"发起的调查'
,
image
:
Img301
,
};
}
else
if
(
route
.
query
.
id
===
"232"
)
{
return
{
const
curSurvey
=
[
{
title
:
"301调查"
,
desc
:
'由美国贸易代表办公室依据《1974年贸易法》第301条针对"不合理或不公正贸易做法"发起的调查'
,
image
:
Img301
,
},
{
title
:
"232调查"
,
desc
:
"依据《1962年贸易扩展法》第232条款,授权美国商务部对“特定进口产品是否威胁或损害美国国家安全”而开展的全面调查。"
,
image
:
Img232
,
};
}
else
{
return
{
title
:
"337调查"
,
desc
:
'美国国际贸易委员会根据《1930年关税法》第337节及相关修正案进行的调查,主要针对进口贸易中的知识产权侵权行为以及其他不公平竞争行为'
,
image
:
Img337
,
};
},
{
title
:
"337调查"
,
desc
:
'美国国际贸易委员会根据《1930年关税法》第337节及相关修正案进行的调查,主要针对进口贸易中的知识产权侵权行为以及其他不公平竞争行为'
,
image
:
Img337
,
}
});
]
const
activeName
=
ref
(
"调查案件"
);
const
handleClickBtn
=
item
=>
{
...
...
@@ -94,7 +91,23 @@ const handleClickBtn = item => {
});
};
const
codeInfo
=
reactive
({
sortCode
:
route
.
query
.
id
,
sortName
:
"调查主页"
,
sortImageUrl
:
""
,
sortDescription
:
""
,
})
const
onSurvyInfo
=
async
()
=>
{
const
res
=
await
getSurvyInfo
({
sortCode
:
route
.
query
.
id
})
console
.
log
(
"调查分类信息"
,
res
)
if
(
res
.
code
==
200
)
{
Object
.
assign
(
codeInfo
,
res
.
data
)
}
document
.
title
=
codeInfo
.
sortName
;
}
onMounted
(()
=>
{
onSurvyInfo
()
if
(
route
.
path
===
"/marketAccessLayout/overview"
)
{
activeName
.
value
=
"数据统计"
;
}
else
{
...
...
@@ -141,6 +154,7 @@ onMounted(() => {
line-height
:
26px
;
}
.head-text
{
margin-top
:
4px
;
width
:
100%
;
height
:
24px
;
color
:
rgba
(
95
,
101
,
108
,
1
);
...
...
src/views/marketAccessRestrictions/singleCaseLayout/index.vue
浏览文件 @
5c38f268
...
...
@@ -3,13 +3,13 @@
<div
class=
"page-top"
>
<div
class=
"head-box"
>
<div
class=
"head-icon"
>
<img
:src=
"c
urSurvey.image
"
alt=
""
/>
<img
:src=
"c
odeInfo.sortImageUrl || Img337
"
alt=
""
/>
</div>
<div
class=
"head-info"
>
<div
class=
"head-name one-line-ellipsis"
>
{{
curSurvey
.
title
}}
</div>
<div
class=
"head-text"
>
{{
curSurvey
.
time
}}
</div>
<div
class=
"head-name one-line-ellipsis"
>
{{
baseInfo
.
SEARCHNAME
}}
</div>
<div
class=
"head-text"
>
{{
baseInfo
.
SEARCHDATE
}}
</div>
</div>
<div
:class=
"`item-tag tag-$
{c
urSurvey.name}`">
{{
curSurvey
.
name
}}
调查
</div>
<div
:class=
"`item-tag tag-$
{c
odeInfo.sortCode}`">
{{
codeInfo
.
sortName
}}
</div>
</div>
<div
class=
"page-tabs"
>
<div
:class=
"['tab-item',
{'tab-active': activeName==item.name}]" v-for="(item, index) in tabList" :key="index" @click="handleClickBtn(item)">
...
...
@@ -37,15 +37,14 @@
</
template
>
<
script
setup
>
import
{
ref
,
onMounted
,
computed
}
from
"vue"
;
import
{
ref
,
onMounted
,
reactive
}
from
"vue"
;
import
router
from
"@/router"
;
import
NavIcon1
from
"./assets/images/nav-icon1.png"
;
import
NavIcon1Active
from
"./assets/images/nav-icon1-active.png"
;
import
NavIcon3
from
"./assets/images/nav-icon2.png"
;
import
NavIcon3Active
from
"./assets/images/nav-icon2-active.png"
;
import
Img337
from
"./assets/images/337.png"
;
import
Img232
from
"./assets/images/232.png"
;
import
Img301
from
"./assets/images/301.png"
;
import
{
getSurvyInfo
,
getSearchBlurb
}
from
"@/api/marketAccessRestrictions/index.js"
import
{
useRoute
}
from
"vue-router"
;
const
route
=
useRoute
();
...
...
@@ -64,39 +63,6 @@ const tabList = ref([
}
]);
const
surveyList
=
ref
([
{
title
:
"337-TA-1443:外国制造的半导体器件及其下游产品和组件"
,
time
:
"2025年7月18日"
,
image
:
Img337
,
name
:
"337"
},
{
title
:
"231-TA-1225:进口药及进口原材料的调查"
,
time
:
"2021年9月21日"
,
image
:
Img232
,
name
:
"232"
},
{
title
:
"美国贸易代表第301条关于中国针对海事、物流和造船业以争取主导地位的行动"
,
time
:
"2025年4月17日"
,
image
:
Img301
,
name
:
"301"
}
]);
const
curSurvey
=
computed
(()
=>
{
let
survey
;
if
(
route
.
query
.
id
===
"232"
)
{
survey
=
surveyList
.
value
[
1
];
}
else
if
(
route
.
query
.
id
===
"301"
)
{
survey
=
surveyList
.
value
[
2
];
}
else
{
survey
=
surveyList
.
value
[
0
];
}
return
survey
;
});
const
activeName
=
ref
(
"调查案件"
);
const
handleClickBtn
=
item
=>
{
activeName
.
value
=
item
.
name
;
...
...
@@ -106,8 +72,36 @@ const handleClickBtn = item => {
});
};
const
codeInfo
=
reactive
({
sortCode
:
route
.
query
.
id
,
sortName
:
""
,
sortImageUrl
:
""
,
})
const
onSurvyInfo
=
async
()
=>
{
const
res
=
await
getSurvyInfo
({
sortCode
:
route
.
query
.
id
})
console
.
log
(
"调查分类信息"
,
res
)
if
(
res
.
code
==
200
)
{
Object
.
assign
(
codeInfo
,
res
.
data
)
}
}
const
baseInfo
=
reactive
({
SEARCHNAME
:
"调查详情"
,
SEARCHDATE
:
""
,
})
const
onSearchBlurb
=
async
()
=>
{
const
res
=
await
getSearchBlurb
({
sortCode
:
route
.
query
.
id
,
searchId
:
route
.
query
.
searchId
})
console
.
log
(
"调查简介"
,
res
)
if
(
res
.
code
==
200
)
{
baseInfo
.
SEARCHNAME
=
res
.
data
.
SEARCHNAME
baseInfo
.
SEARCHDATE
=
res
.
data
.
SEARCHDATE
}
document
.
title
=
baseInfo
.
SEARCHNAME
;
}
onMounted
(()
=>
{
console
.
log
(
'route'
,
route
);
onSurvyInfo
()
onSearchBlurb
()
if
(
route
.
path
===
"/marketSingleCaseLayout/deepdig"
)
{
activeName
.
value
=
"影响分析"
;
}
else
{
...
...
@@ -154,6 +148,7 @@ onMounted(() => {
line-height
:
26px
;
}
.head-text
{
margin-top
:
4px
;
width
:
100%
;
height
:
24px
;
color
:
rgba
(
95
,
101
,
108
,
1
);
...
...
出口管制接口-4.md
浏览文件 @
5c38f268
...
...
@@ -730,8 +730,6 @@ public class RemarksVO {
}
```
# 字典
## 领域类别(id:name)
...
...
@@ -764,7 +762,7 @@ public class RemarksVO {
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiIsImlzcyI6ImRhdGEtY2VudGVyIiwiZXhwIjozODI1ODM1NTkxLCJpYXQiOjE2NzgzNTE5NTMsImp0aSI6IjI4YmY1NTZjMTc0MDQ3YjJiNTExNWM3NzVhYjhlNWRmIiwidXNlcm5hbWUiOiJzdXBlcl91c2VyIn0.zHyVzsleX2lEqjDBYRpwluu_wy2nZKGl0dw3IUGnKNw
```
输出结果:ApiResult
<List
<
SanctionTypeBean
>
>
输出结果:ApiResult
## 最新出口管制政策(4条)
...
...
@@ -782,7 +780,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiIsImlzcyI6ImRhdGEtY2VudGVyIiwiZXhwIjozODI1ODM1NTkxLCJpYXQiOjE2NzgzNTE5NTMsImp0aSI6IjI4YmY1NTZjMTc0MDQ3YjJiNTExNWM3NzVhYjhlNWRmIiwidXNlcm5hbWUiOiJzdXBlcl91c2VyIn0.zHyVzsleX2lEqjDBYRpwluu_wy2nZKGl0dw3IUGnKNw
```
输出结果:ApiResult
<LatestExportControlInfo>
输出结果:ApiResult
## 发布(更新)频度
...
...
@@ -802,7 +800,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiIsImlzcyI6ImRhdGEtY2VudGVyIiwiZXhwIjozODI1ODM1NTkxLCJpYXQiOjE2NzgzNTE5NTMsImp0aSI6IjI4YmY1NTZjMTc0MDQ3YjJiNTExNWM3NzVhYjhlNWRmIiwidXNlcm5hbWUiOiJzdXBlcl91c2VyIn0.zHyVzsleX2lEqjDBYRpwluu_wy2nZKGl0dw3IUGnKNw
```
输出结果:ApiResult
<List
<
AnnualCount
>
>
输出结果:ApiResult
## **制裁领域分析**(20251215)
...
...
@@ -820,7 +818,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiIsImlzcyI6ImRhdGEtY2VudGVyIiwiZXhwIjozODI1ODM1NTkxLCJpYXQiOjE2NzgzNTE5NTMsImp0aSI6IjI4YmY1NTZjMTc0MDQ3YjJiNTExNWM3NzVhYjhlNWRmIiwidXNlcm5hbWUiOiJzdXBlcl91c2VyIn0.zHyVzsleX2lEqjDBYRpwluu_wy2nZKGl0dw3IUGnKNw
```
输出结果:ApiResult
<List
<
DomainCount
>
>
输出结果:ApiResult
## **历次制裁过程**
...
...
@@ -838,7 +836,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiIsImlzcyI6ImRhdGEtY2VudGVyIiwiZXhwIjozODI1ODM1NTkxLCJpYXQiOjE2NzgzNTE5NTMsImp0aSI6IjI4YmY1NTZjMTc0MDQ3YjJiNTExNWM3NzVhYjhlNWRmIiwidXNlcm5hbWUiOiJzdXBlcl91c2VyIn0.zHyVzsleX2lEqjDBYRpwluu_wy2nZKGl0dw3IUGnKNw
```
输出结果:ApiResult
<Page
<
SanctionProcess
>
>
输出结果:ApiResult
## **制裁实体清单**列表(20251215)
...
...
@@ -860,7 +858,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiIsImlzcyI6ImRhdGEtY2VudGVyIiwiZXhwIjozODI1ODM1NTkxLCJpYXQiOjE2NzgzNTE5NTMsImp0aSI6IjI4YmY1NTZjMTc0MDQ3YjJiNTExNWM3NzVhYjhlNWRmIiwidXNlcm5hbWUiOiJzdXBlcl91c2VyIn0.zHyVzsleX2lEqjDBYRpwluu_wy2nZKGl0dw3IUGnKNw
```
输出结果:ApiResult
<Page
<
SanctionListBean
>
>
输出结果:ApiResult
## **发布机构与重点人物**
...
...
@@ -876,7 +874,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<OrgInfo>
输出结果:ApiResult
## **领域分布查询**
...
...
@@ -890,7 +888,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<List
<
BaseCount
>
>
输出结果:ApiResult
## **类型分布查询**
...
...
@@ -904,7 +902,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<List
<
BaseCount
>
>
输出结果:ApiResult
## **区域分布查询**
...
...
@@ -918,7 +916,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<List
<
RegionCount
>
>
输出结果:ApiResult
## **制裁理由查询**
...
...
@@ -932,7 +930,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<List
<
String
>
>
输出结果:ApiResult
## **深度挖掘-制裁信息变化统计**
...
...
@@ -946,7 +944,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<SanCountInfo>
输出结果:ApiResult
## **年度实体数统计**
...
...
@@ -962,7 +960,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<SanCountInfo>
输出结果:ApiResult
## **重点实体列表查询**
...
...
@@ -976,7 +974,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<List
<
OrgInfo
>
>
输出结果:ApiResult
## **上市企业制裁强度**
...
...
@@ -990,7 +988,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<List
<
BaseCount
>
>
输出结果:ApiResult
## **上市企业融资变化情况**
...
...
@@ -1004,7 +1002,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<List
<
BaseCount
>
>
输出结果:ApiResult
## **上市企业市值变化情况**
...
...
@@ -1018,7 +1016,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<List
<
BaseCount
>
>
输出结果:ApiResult
## **重点上市企业列表**
...
...
@@ -1032,7 +1030,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<List
<
OrgInfo
>
>
输出结果:ApiResult
## **历次制裁涉及领域数查询**
...
...
@@ -1046,7 +1044,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<List
<
BaseCount
>
>
输出结果:ApiResult
## **具体领域的制裁实体数统计**
...
...
@@ -1060,7 +1058,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<List
<
AnnualCount
>
>
输出结果:ApiResult
## **具体实体类型的制裁实体数统计**
...
...
@@ -1074,7 +1072,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<List
<
AnnualCount
>
>
输出结果:ApiResult
## **产业链结构查询**
...
...
@@ -1088,7 +1086,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<List
<
Chain
>
>
输出结果:ApiResult
## **根据领域获取产业链信息**
...
...
@@ -1102,7 +1100,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<List
<
Chain
>
>
输出结果:ApiResult
## **产业链鱼骨图信息查询**
...
...
@@ -1116,7 +1114,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<FishboneResp>
输出结果:ApiResult
## **产业链中国企业实体信息查询**
...
...
@@ -1130,7 +1128,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<AreasStreamResp>
输出结果:ApiResult
## **实体列表查询**
...
...
@@ -1144,7 +1142,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<List
<
OrgInfo
>
>
输出结果:ApiResult
## **历年制裁领域统计**
...
...
@@ -1158,7 +1156,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<List
<
AnnualDomainCount
>
>
输出结果:ApiResult
## **新增实体数量增长趋势**
...
...
@@ -1172,7 +1170,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<List
<
AnnualCount
>
>
输出结果:ApiResult
## **获取机构的详情信息**
...
...
@@ -1186,7 +1184,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<Organization>
输出结果:ApiResult
## **获取美国前序事件**
...
...
@@ -1200,7 +1198,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<Page
<
EventInfo
>
>
输出结果:ApiResult
## **新增科研机构列表**
...
...
@@ -1214,7 +1212,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<List
<
BaseCount
>
>
输出结果:ApiResult
## **各类别仪器对美依赖情况**
...
...
@@ -1224,11 +1222,11 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
输入参数:
参数:List
<String>
orgIds 机构公司ID列表
参数:List orgIds 机构公司ID列表
请求头:携带token
输出结果:ApiResult
<List
<
BaseCount
>
>
输出结果:ApiResult
## **仪器对美依赖度升高风险分析**
...
...
@@ -1242,7 +1240,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<List
<
BaseCount
>
>
输出结果:ApiResult
## **仪器进口国可替代性分析**
...
...
@@ -1252,11 +1250,11 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
输入参数:
参数:List
<String>
orgIds 机构公司ID列表
参数:List orgIds 机构公司ID列表
请求头:携带token
输出结果:ApiResult
<List
<
BaseCount
>
>
输出结果:ApiResult
## **仪器国产化降低风险分析**
...
...
@@ -1270,7 +1268,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<List
<
BaseCount
>
>
输出结果:ApiResult
## **制裁实体清单50%规则实体数**
...
...
@@ -1284,7 +1282,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<RuleEntityCount>
输出结果:ApiResult
## **科研院所类实体历史制裁情况**
...
...
@@ -1298,7 +1296,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<List
<
AnnualCount
>
>
输出结果:ApiResult
## **企业类实体历史制裁情况**
...
...
@@ -1312,7 +1310,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<List
<
AnnualCount
>
>
输出结果:ApiResult
## **风险信号**
...
...
@@ -1326,7 +1324,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<List
<
RiskSignalVO
>
>
输出结果:ApiResult
## **新闻资讯**
...
...
@@ -1340,7 +1338,7 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<List
<
NewsVO
>
>
输出结果:ApiResult
## **社交媒体**
...
...
@@ -1354,4 +1352,4 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiI
请求头:携带token
输出结果:ApiResult
<List
<
RemarksVO
>
>
\ No newline at end of file
输出结果:ApiResult
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论