Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
risk-monitor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蔡建
risk-monitor
Commits
68717834
提交
68717834
authored
4月 09, 2026
作者:
coderBryanFu
浏览文件
操作
浏览文件
下载
差异文件
feat更新出口管制跳转资源库,更新数据资源库
上级
35023e6a
6f3ae4a0
流水线
#388
已通过 于阶段
in 1 分 28 秒
变更
23
流水线
1
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
23 个修改的文件
包含
555 行增加
和
533 行删除
+555
-533
config.js
public/js/config.js
+4
-2
exportControl.js
src/api/exportControl.js
+1
-1
index.js
src/api/marketAccessRestrictions/index.js
+2
-2
overviewNormalBox.vue
src/components/base/boxBackground/overviewNormalBox.vue
+33
-42
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
+1
-4
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
+24
-37
index.vue
...omponents/sanctionsOverview/components/listPage/index.vue
+8
-32
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
+0
-0
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
没有找到文件。
public/js/config.js
浏览文件 @
68717834
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://172.19.21.9:8003/out/img`
// 写报图片URL
\ No newline at end of file
src/api/exportControl.js
浏览文件 @
68717834
...
...
@@ -123,7 +123,7 @@ export function getSanctionsInfoCount() {
* sanReason: string
* }[]>}
*/
export
function
getSanctionProcess
(
sanTypeIds
=
"1"
,
pageNum
=
1
,
pageSize
=
10
,
isCn
=
false
)
{
export
function
getSanctionProcess
(
sanTypeIds
=
[
"1"
]
,
pageNum
=
1
,
pageSize
=
10
,
isCn
=
false
)
{
return
request200
(
request
({
method
:
"POST"
,
...
...
src/api/marketAccessRestrictions/index.js
浏览文件 @
68717834
...
...
@@ -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
浏览文件 @
68717834
<
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/router/index.js
浏览文件 @
68717834
...
...
@@ -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
浏览文件 @
68717834
...
...
@@ -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
浏览文件 @
68717834
...
...
@@ -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
浏览文件 @
68717834
...
...
@@ -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,7 @@ 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
);
}
};
...
...
@@ -571,7 +570,6 @@ export const useWrittingAsstaintStore = defineStore('writtingAsstaint', {
streamBuffer
+=
str
;
updateFlushIndexByBoundary
();
flushToReport
(
false
);
console
.
log
(
streamBuffer
,
456
)
console
.
log
(
msgData
,
'data'
)
}
else
{
// 结束时把剩余内容强制 flush
...
...
@@ -663,7 +661,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/decree/decreeHome/index.vue
浏览文件 @
68717834
...
...
@@ -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
浏览文件 @
68717834
...
...
@@ -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
浏览文件 @
68717834
...
...
@@ -545,37 +545,17 @@
</div>
</el-col>
</
template
>
<
template
v-if=
"activeResourceTab === 'commerce'"
>
<listPage
/>
</
template
>
</el-row>
</div>
<!-- <el-dialog v-model="dialogVisible" width="800" :before-close="handleClose">
<template #title>
<div class="dialog-title">50%规则子企业</div>
</template>
<div class="dialog-ett-wrpper">
<div
class="box1-bottom-content-item"
v-for="(ett, index) in currentOrgList"
: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.enName)?.match(/[\u4e00-\u9fa5a-zA-Z0-9]/)?.[0] }}
</div>
<div class="box1-bottom-content-item-txt">
{{ ett.orgName || ett.orgNameZh }}
</div>
</div>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="dialogVisible = false"> 确定 </el-button>
</div>
</template>
</el-dialog> -->
<RuleSubsidiaryDialog
v-model=
"dialogVisible"
:company-name=
"currentRuleCompany"
:total-count=
"currentRuleCount"
:data-list=
"currentOrgList"
/>
<RuleSubsidiaryDialog
v-model=
"dialogVisible"
:company-name=
"currentRuleCompany"
:total-count=
"currentRuleCount"
:data-list=
"currentOrgList"
/>
</div>
<el-dialog
v-model=
"mediaVisible"
title=
"社交媒体信息"
width=
"500"
:before-close=
"handleMediaClose"
>
<div
class=
"dialog-content"
>
...
...
@@ -601,6 +581,7 @@ const { isShow } = useContainerScroll(homeMainRef);
import
*
as
echarts
from
"echarts"
;
import
setChart
from
"@/utils/setChart"
;
import
{
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
listPage
from
"./v2.0CommercialControlList/components/sanctionsOverview/components/listPage/index.vue"
;
import
{
DArrowRight
,
Warning
,
Search
}
from
"@element-plus/icons-vue"
;
import
EChart
from
"@/components/Chart/index.vue"
;
...
...
@@ -855,11 +836,11 @@ onMounted(async () => {
resourceTabs
.
value
=
infoList
.
value
.
map
(
item
=>
({
label
:
item
.
nameZh
,
value
:
tabMap
[
item
.
id
],
id
:
[
item
.
id
]
,
id
:
item
.
id
,
disabled
:
false
}));
resourceTabs
.
value
.
unshift
({
label
:
"全部制裁"
,
value
:
"all"
,
id
:
""
,
disabled
:
false
});
console
.
log
(
"返回的数据结构 infoList =》"
,
infoList
.
value
);
console
.
log
(
"返回的数据结构 infoList =》"
,
resourceTabs
.
value
);
const
entityList
=
_
.
map
(
entitiesDataInfo
?.
sanEntities
??
[],
({
entityNameZh
,
entityName
})
=>
{
return
{
name
:
entityNameZh
,
enName
:
entityName
};
});
...
...
@@ -1394,7 +1375,8 @@ watch(
const
fetchEntitiesList
=
async
(
page
=
1
,
size
=
10
)
=>
{
try
{
console
.
log
(
"activeResourceTabItem.value.id"
,
activeResourceTabItem
.
value
.
id
);
const
res
=
await
getEntitiesList
(
activeResourceTabItem
.
value
.
id
.
join
(
","
),
page
,
size
);
if
(
!
activeResourceTabItem
.
value
.
id
)
return
;
const
res
=
await
getEntitiesList
(
activeResourceTabItem
.
value
.
id
,
page
,
size
);
if
(
res
)
{
entitiesList
.
value
=
res
.
content
.
map
(
item
=>
({
...
item
,
...
...
@@ -1414,7 +1396,7 @@ const fetchEntitiesList = async (page = 1, size = 10) => {
const
handleGetMore
=
async
()
=>
{
sanctionPage
.
value
++
;
try
{
const
sanTypeid
=
activeResourceTabItem
.
value
.
id
?
activeResourceTabItem
.
value
.
id
:
allSanTypeIds
.
value
;
const
sanTypeid
=
activeResourceTabItem
.
value
.
id
?
[
activeResourceTabItem
.
value
.
id
]
:
allSanTypeIds
.
value
;
const
res
=
await
getSanctionProcess
(
sanTypeid
,
sanctionPage
.
value
,
10
);
if
(
res
&&
res
.
content
)
{
// 将新数据合并到现有列表中
...
...
@@ -1441,7 +1423,7 @@ const handleGetMore = async () => {
const
fetchSanctionProcess
=
async
(
page
=
1
,
size
=
10
)
=>
{
try
{
const
res
=
await
getSanctionProcess
(
activeResourceTabItem
.
value
.
id
?
activeResourceTabItem
.
value
.
id
:
allSanTypeIds
.
value
,
activeResourceTabItem
.
value
.
id
?
[
activeResourceTabItem
.
value
.
id
]
:
allSanTypeIds
.
value
,
page
,
size
);
...
...
@@ -1486,12 +1468,13 @@ const tabMap = {
};
const
handleResourceTabClick
=
tab
=>
{
if
(
tab
.
disabled
)
return
;
// if (tab.disabled) return;
console
.
log
(
"选项点击"
,
tab
);
activeResourceTab
.
value
=
tab
.
value
;
activeResourceTabItem
.
value
=
tab
;
fetchSanctionProcess
();
console
.
log
(
"tabMap[tab.id]"
,
tabMap
[
tab
.
id
]);
if
(
tab
Map
[
tab
.
id
]
===
"entity"
)
{
if
(
tab
.
value
===
"entity"
)
{
fetchEntitiesList
();
}
};
...
...
@@ -1658,7 +1641,7 @@ const handleSanc = item => {
path
:
"/exportControl/singleSanction"
,
query
:
{
id
:
item
.
id
,
sanTypeId
:
activeResourceTabItem
.
value
.
id
.
join
(
","
)
sanTypeId
:
activeResourceTabItem
.
value
.
id
}
});
window
.
open
(
route
.
href
,
"_blank"
);
...
...
@@ -1811,6 +1794,10 @@ const handleMediaClick = item => {
// box-shadow: none;
}
.list-page
{
padding-top
:
0
;
}
.home-header
{
height
:
64px
;
background
:
url("@/assets/images/nav-bg.png")
;
...
...
src/views/exportControl/v2.0CommercialControlList/components/sanctionsOverview/components/listPage/index.vue
浏览文件 @
68717834
...
...
@@ -43,7 +43,7 @@
/>
</div>
</div>
<div
class=
"right"
>
<div
class=
"right"
v-loading=
"loading"
>
<AnalysisBox
title=
"CCL清单列表"
:showAllBtn=
"false"
>
<div
class=
"right-table"
>
<div
class=
"list"
v-for=
"(item, i) in cclList"
:key=
"i"
>
...
...
@@ -212,7 +212,7 @@ const getCclList = async () => {
if
(
!
allReason
||
!
allReason
.
checked
)
{
controls
=
controlReason
.
value
.
filter
(
item
=>
item
.
checked
&&
item
.
id
!==
"all"
).
map
(
item
=>
item
.
id
);
}
loading
.
value
=
true
;
const
params
=
{
categoryCode
:
currentCCLType
.
value
,
techDomainIds
:
techDomains
,
...
...
@@ -252,8 +252,10 @@ const getCclList = async () => {
});
console
.
log
(
"----getCclList 11"
,
cclList
.
value
);
loading
.
value
=
false
;
}
}
catch
(
error
)
{
loading
.
value
=
false
;
console
.
error
(
"获取 ccl 清单列表失败:"
,
error
);
}
};
...
...
@@ -342,35 +344,9 @@ watch(searchKeyword, newValue => {
console
.
log
(
"-----searchKey"
,
newValue
);
getCclList
();
});
const
loading
=
ref
(
false
);
// 模拟清单列表
const
cclList
=
ref
([
{
name
:
"类别 0-核材料、设施和设备、枪支、弹药[以及其他物品]"
,
desc
:
'A."最终产品"、"设备"、"附件"、"附加装置"、"零件"、"组件"和"系统"'
,
isExpand
:
true
,
list
:
[
{
code
:
"0A002"
,
name
:
'发电或推进设备,"专门设计"用于与太空、海洋或移动"核反应堆"一起使用。(这些项目"受 ITAR 管辖。"参见 22 CFR 第 120 至 130 部分。)'
,
isExpand
:
false
,
isDot
:
false
},
{
code
:
"0A501"
,
name
:
"枪支(不包括 0A502 霰弹枪、0A506 半自动步枪、0A507 半自动手枪和 0A508 半自动霰弹枪)及相关商品(不包括在 Eccn 0A509 中列举或以其他方式描述的与半自动相关的商品,用于 Eccn 0A506、0A507 或 0A508)如下(参见受控物品清单)"
,
isExpand
:
true
,
isDot
:
true
},
{
code
:
"0A501"
,
name
:
"枪支(不包括 0A502 霰弹枪、0A506 半自动步枪、0A507 半自动手枪和 0A508 半自动霰弹枪)及相关商品(不包括在 Eccn 0A509 中列举或以其他方式描述的与半自动相关的商品,用于 Eccn 0A506、0A507 或 0A508)如下(参见受控物品清单)"
,
isExpand
:
false
,
isDot
:
true
}
]
}
]);
const
cclList
=
ref
([]);
onMounted
(
async
()
=>
{
// 获取类别字段
...
...
@@ -410,9 +386,9 @@ onMounted(async () => {
:deep
(
.el-input__wrapper
)
{
padding
:
0
11px
;
// border: 1px solid rgba(0, 0, 0, 0.2)
;
border
:
1
.5px
solid
#dcdfe6
;
background-color
:
#fff
;
border-radius
:
3
px
;
border-radius
:
4
px
;
}
:deep
(
.el-input__inner
)
{
...
...
src/views/marketAccessRestrictions/com/SurveyHistory.vue
浏览文件 @
68717834
...
...
@@ -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
浏览文件 @
68717834
1.0 KB
src/views/marketAccessRestrictions/marketAccessHome/com/CarouselItem232.vue
0 → 100644
浏览文件 @
68717834
<
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
浏览文件 @
68717834
<
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
浏览文件 @
68717834
<
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
浏览文件 @
68717834
差异被折叠。
点击展开。
src/views/marketAccessRestrictions/marketAccessHome/utils/barChart1.js
浏览文件 @
68717834
...
...
@@ -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
浏览文件 @
68717834
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
浏览文件 @
68717834
...
...
@@ -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
浏览文件 @
68717834
...
...
@@ -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
浏览文件 @
68717834
...
...
@@ -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
);
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论