Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
risk-monitor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蔡建
risk-monitor
Commits
0ff5ffb8
提交
0ff5ffb8
authored
4月 23, 2026
作者:
coderBryanFu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat:update
上级
3e25cd1c
显示空白字符变更
内嵌
并排
正在显示
29 个修改的文件
包含
522 行增加
和
1596 行删除
+522
-1596
SearchContainer.vue
src/components/SearchContainer.vue
+3
-3
SearchBar.vue
src/components/layout/SearchBar.vue
+2
-2
goToPage.js
src/utils/goToPage.js
+0
-693
getDecode.js
src/utils/goToPage/methods/getDecode.js
+1
-0
ResourceLibrarySection.vue
src/views/bill/billHome/ResourceLibrarySection.vue
+1
-1
index.vue
src/views/bill/billHome/index.vue
+1
-1
index.vue
src/views/comprehensiveSearch/searchResults/index.vue
+2
-3
index.vue
src/views/dataLibrary/bill/countryBill/index.vue
+0
-1
index.vue
src/views/dataLibrary/decree/index.vue
+1
-1
index.vue
...s/dataLibrary/exportControl/commerceControlList/index.vue
+14
-12
index.vue
...aLibrary/exportControl/commerceControlListEvent/index.vue
+10
-9
index.vue
src/views/dataLibrary/exportControl/entityList/index.vue
+15
-14
index.vue
...views/dataLibrary/exportControl/entityListEvent/index.vue
+12
-8
index.vue
src/views/dataLibrary/thinkTank/index.vue
+2
-2
info.vue
src/views/exportControl/components/info.vue
+17
-10
index-back.vue
src/views/exportControl/index-back.vue
+85
-228
index.vue
src/views/exportControl/index.vue
+122
-253
index.vue
...ontrol/v2.0EntityList/components/dataStatistics/index.vue
+86
-94
index.vue
...s/sanctionsOverview/components/introductionPage/index.vue
+7
-6
index.vue
...omponents/sanctionsOverview/components/listPage/index.vue
+13
-10
index.vue
...ol/v2.0SingleSanction/components/dataStatistics/index.vue
+85
-95
index.vue
...v2.0SingleSanction/components/sanctionsOverview/index.vue
+11
-6
index.vue
...ws/finance/entityList/components/dataStatistics/index.vue
+22
-14
index.vue
src/views/home/index.vue
+1
-121
index.vue
src/views/thinkTank/ThinkTankDetail/PolicyTracking/index.vue
+2
-2
index.vue
src/views/thinkTank/ThinkTankDetail/index.vue
+2
-2
index.vue
src/views/thinkTank/ThinkTankDetail/thinkDynamics/index.vue
+2
-2
index.vue
src/views/thinkTank/ThinkTankDetail/thinkInfo/index.vue
+2
-2
index.vue
src/views/thinkTank/index.vue
+1
-1
没有找到文件。
src/components/SearchContainer.vue
浏览文件 @
0ff5ffb8
...
...
@@ -62,7 +62,7 @@ import { ref, nextTick, watchEffect } from "vue";
import
{
useContainerScroll
}
from
"@/hooks/useScrollShow"
;
import
{
useRouter
}
from
"vue-router"
;
import
{
useWrittingAsstaintStore
}
from
"@/stores/writtingAsstaintStore"
;
import
{
goToSearch
}
from
"@/utils/goToPage"
;
import
goToPage
from
"@/utils/goToPage"
;
const
store
=
useWrittingAsstaintStore
();
const
router
=
useRouter
();
...
...
@@ -129,9 +129,9 @@ const handleSearch = () => {
// window.open(curRoute.href, "_blank");
if
(
enableBillTypeSwitch
)
{
goToSearch
(
store
.
searchBillText
,
areaName
,
billSearchType
.
value
)
goTo
Page
.
goTo
Search
(
store
.
searchBillText
,
areaName
,
billSearchType
.
value
)
}
else
{
goToSearch
(
store
.
searchBillText
,
areaName
)
goTo
Page
.
goTo
Search
(
store
.
searchBillText
,
areaName
)
}
};
...
...
src/components/layout/SearchBar.vue
浏览文件 @
0ff5ffb8
...
...
@@ -49,7 +49,7 @@
import
{
onMounted
,
ref
,
computed
,
onUnmounted
,
nextTick
,
watch
,
watchEffect
}
from
"vue"
;
import
router
from
"@/router/index"
;
import
{
useWrittingAsstaintStore
}
from
"@/stores/writtingAsstaintStore"
;
import
{
goToSearch
}
from
"@/utils/goToPage"
;
import
goToPage
from
"@/utils/goToPage"
;
const
store
=
useWrittingAsstaintStore
();
const
handleSearch
=
()
=>
{
...
...
@@ -63,7 +63,7 @@ const handleSearch = () => {
// }
// });
// window.open(curRoute.href, "_blank");
goToSearch
(
store
.
searchBillText
,
store
.
searchData
.
areaName
)
goTo
Page
.
goTo
Search
(
store
.
searchBillText
,
store
.
searchData
.
areaName
)
};
let
containerRef
=
computed
(()
=>
store
.
searchData
.
containerRef
);
...
...
src/utils/goToPage.js
deleted
100644 → 0
浏览文件 @
3e25cd1c
import
{
getPersonSummaryInfo
}
from
"@/api/common/index"
;
import
router
from
"@/router/index"
;
// 跳转法案详情
export
const
goToBill
=
(
id
,
tabName
)
=>
{
window
.
sessionStorage
.
setItem
(
"billId"
,
id
);
window
.
sessionStorage
.
setItem
(
"curTabName"
,
tabName
);
const
param
=
{
billId
:
id
}
const
jsonStr
=
JSON
.
stringify
(
param
);
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
path
:
"/billLayout"
,
query
:
{
data
:
base64
}
});
window
.
open
(
route
.
href
,
"_blank"
);
};
// 跳转政令详情
export
const
goToDecree
=
(
id
,
tabName
)
=>
{
window
.
sessionStorage
.
setItem
(
"decreeId"
,
id
);
window
.
sessionStorage
.
setItem
(
"curTabName"
,
tabName
);
const
param
=
{
id
:
id
}
const
jsonStr
=
JSON
.
stringify
(
param
);
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
path
:
"/decreeLayout"
,
query
:
{
data
:
base64
}
});
window
.
open
(
route
.
href
,
"_blank"
);
};
// 跳转智库详情
export
const
goToThinkTank
=
(
id
,
tabName
)
=>
{
window
.
sessionStorage
.
setItem
(
"curTabName"
,
tabName
);
const
base64
=
btoa
(
encodeURIComponent
(
id
));
const
curRoute
=
router
.
resolve
({
name
:
"ThinkTankDetail"
,
params
:
{
id
:
base64
}
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
}
// 跳转智库报告详情
export
const
goToThinkTankReport
=
(
id
,
tabName
)
=>
{
window
.
sessionStorage
.
setItem
(
"curTabName"
,
tabName
);
const
route
=
router
.
resolve
({
name
:
"ReportDetail"
,
params
:
{
id
:
id
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 跳转实体清单
export
const
goToEntityList
=
()
=>
{
const
param
=
{
sanTypeId
:
1
}
const
jsonStr
=
JSON
.
stringify
(
param
);
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
path
:
'/exportControl/entityList'
,
query
:
{
data
:
base64
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 跳转实体清单事件
export
const
goToSingleEntityEvent
=
(
id
,
tabName
,
date
)
=>
{
window
.
sessionStorage
.
setItem
(
"curTabName"
,
tabName
);
const
param
=
{
id
:
id
,
sanTypeId
:
1
,
date
:
date
}
const
jsonStr
=
JSON
.
stringify
(
param
);
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
path
:
"/exportControl/singleSanction"
,
query
:
{
data
:
base64
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 跳转商业管制清单
export
const
goToCCLList
=
()
=>
{
const
param
=
{
sanTypeId
:
13
,
}
const
jsonStr
=
JSON
.
stringify
(
param
);
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
path
:
"/exportControl/commercialControlList"
,
query
:
{
data
:
base64
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 跳转SDN清单
export
const
goToSDNList
=
()
=>
{
const
param
=
{
sanTypeId
:
2
,
}
const
jsonStr
=
JSON
.
stringify
(
param
);
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
path
:
"/finance/sdnlistoverview"
,
query
:
{
data
:
base64
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 跳转SDN清单事件
export
const
goToSingleSDNEvent
=
(
id
,
tabName
,
date
)
=>
{
window
.
sessionStorage
.
setItem
(
"curTabName"
,
tabName
);
const
param
=
{
id
:
id
,
sanTypeId
:
2
,
date
:
date
}
const
jsonStr
=
JSON
.
stringify
(
param
);
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
path
:
"/finance/singleSanction"
,
query
:
{
data
:
base64
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 跳转232调查概览页
export
const
goToCase232
=
()
=>
{
window
.
sessionStorage
.
setItem
(
"curTabName"
,
'232调查'
);
const
param
=
{
id
:
232
,
}
const
jsonStr
=
JSON
.
stringify
(
param
);
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
path
:
"/marketAccessLayout/case"
,
query
:
{
data
:
base64
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 跳转232调查详情页
export
const
goToCaseDetail232
=
(
searchId
,
tabName
)
=>
{
window
.
sessionStorage
.
setItem
(
"curTabName"
,
tabName
);
const
param
=
{
id
:
232
,
searchId
:
searchId
}
const
jsonStr
=
JSON
.
stringify
(
param
);
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
path
:
"/marketSingleCaseLayout/overview"
,
query
:
{
data
:
base64
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 跳转301调查概览页
export
const
goToCase301
=
()
=>
{
window
.
sessionStorage
.
setItem
(
"curTabName"
,
'301调查'
);
const
param
=
{
id
:
301
,
}
const
jsonStr
=
JSON
.
stringify
(
param
);
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
path
:
"/marketAccessLayout/case"
,
query
:
{
data
:
base64
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 跳转301调查详情页
export
const
goToCaseDetail301
=
(
searchId
,
tabName
)
=>
{
window
.
sessionStorage
.
setItem
(
"curTabName"
,
tabName
);
const
param
=
{
id
:
301
,
searchId
:
searchId
}
const
jsonStr
=
JSON
.
stringify
(
param
);
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
path
:
"/marketSingleCaseLayout/overview"
,
query
:
{
data
:
base64
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 跳转337调查概览页
export
const
goToCase337
=
()
=>
{
window
.
sessionStorage
.
setItem
(
"curTabName"
,
'337调查'
);
const
param
=
{
id
:
337
,
}
const
jsonStr
=
JSON
.
stringify
(
param
);
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
path
:
"/marketAccessLayout/case"
,
query
:
{
data
:
base64
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 跳转337调查详情页
export
const
goToCaseDetail337
=
(
searchId
,
tabName
)
=>
{
window
.
sessionStorage
.
setItem
(
"curTabName"
,
tabName
);
const
param
=
{
id
:
337
,
searchId
:
searchId
}
const
jsonStr
=
JSON
.
stringify
(
param
);
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
path
:
"/marketSingleCaseLayout/overview"
,
query
:
{
data
:
base64
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 跳转机构详情
export
const
goToInstitution
=
(
id
,
tabName
)
=>
{
window
.
sessionStorage
.
setItem
(
'curTabName'
,
tabName
)
const
param
=
{
id
:
id
}
const
jsonStr
=
JSON
.
stringify
(
param
);
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
curRoute
=
router
.
resolve
({
path
:
"/institution"
,
query
:
{
data
:
base64
}
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
}
// 跳转人物详情
export
const
goToCharacterPage
=
async
(
id
,
tabName
)
=>
{
window
.
sessionStorage
.
setItem
(
'curTabName'
,
tabName
)
const
personTypeList
=
JSON
.
parse
(
window
.
sessionStorage
.
getItem
(
"personTypeList"
));
let
type
let
personTypeName
const
params
=
{
personId
:
id
}
const
param1
=
{
personId
:
item
.
id
}
const
jsonStr1
=
JSON
.
stringify
(
param1
);
const
base64_1
=
btoa
(
encodeURIComponent
(
jsonStr1
));
const
param2
=
{
personId
:
item
.
id
}
const
jsonStr2
=
JSON
.
stringify
(
param2
);
const
base64_2
=
btoa
(
encodeURIComponent
(
jsonStr2
));
// 先获取人物全局信息
try
{
const
res
=
await
getPersonSummaryInfo
(
params
)
if
(
res
.
code
===
200
&&
res
.
data
)
{
const
arr
=
personTypeList
.
filter
(
item
=>
{
return
item
.
typeId
===
res
.
data
.
personType
;
})
if
(
arr
&&
arr
.
length
)
{
personTypeName
=
arr
[
0
].
typeName
;
if
(
personTypeName
===
"科技企业领袖"
)
{
type
=
1
;
}
else
if
(
personTypeName
===
"国会议员"
)
{
type
=
2
;
}
else
if
(
personTypeName
===
"智库研究人员"
)
{
type
=
3
;
}
else
{
personTypeName
=
"其他类型"
;
const
route
=
router
.
resolve
({
path
:
"/characterPage"
,
query
:
{
data
:
base64_1
}
});
window
.
open
(
route
.
href
,
"_blank"
);
return
;
}
const
route
=
router
.
resolve
({
path
:
"/characterPage"
,
query
:
{
data
:
base64_2
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
else
{
personTypeName
=
""
;
const
route
=
router
.
resolve
({
path
:
"/characterPage"
,
query
:
{
data
:
base64_1
}
});
window
.
open
(
route
.
href
,
"_blank"
);
return
;
}
}
else
{
const
route
=
router
.
resolve
({
path
:
"/characterPage"
,
query
:
{
data
:
base64_1
}
});
window
.
open
(
route
.
href
,
"_blank"
);
return
;
}
}
catch
(
error
)
{
const
route
=
router
.
resolve
({
path
:
"/characterPage"
,
query
:
{
data
:
base64_1
}
});
window
.
open
(
route
.
href
,
"_blank"
);
return
;
}
}
// 跳转企业
export
const
goToCompanyPage
=
(
id
,
tabName
)
=>
{
window
.
sessionStorage
.
setItem
(
'curTabName'
,
tabName
)
const
param
=
{
id
:
id
}
const
jsonStr
=
JSON
.
stringify
(
param
);
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
name
:
"companyPages"
,
params
:
base64
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 跳转新闻详情
export
const
goToNewsPage
=
(
id
,
tabName
)
=>
{
window
.
sessionStorage
.
setItem
(
"curTabName"
,
tabName
);
const
param
=
{
newsId
:
id
}
const
jsonStr
=
JSON
.
stringify
(
param
);
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
path
:
"/newsAnalysis"
,
query
:
{
data
:
base64
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 跳转搜索详情页
export
const
goToSearch
=
(
tabName
,
areaName
,
billSearchType
)
=>
{
window
.
sessionStorage
.
setItem
(
"curTabName"
,
`搜索-
${
tabName
}
`
);
let
selectParam
if
(
billSearchType
)
{
selectParam
=
{
searchText
:
tabName
,
areaName
:
areaName
,
billSearchType
:
billSearchType
}
}
else
{
selectParam
=
{
searchText
:
tabName
,
areaName
:
areaName
,
}
}
// const codeParam = new URLSearchParams(selectParam)
const
jsonStr
=
JSON
.
stringify
(
selectParam
);
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
curRoute
=
router
.
resolve
({
path
:
"/searchResults"
,
query
:
{
data
:
base64
}
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
// const codeParam = new URLSearchParams(selectParam)
}
// 跳转数据资源库-国家法案
export
const
goToDataCountryBill
=
(
selectParam
)
=>
{
// const codeParam = new URLSearchParams(selectParam)
// JSON -> Base64
const
jsonStr
=
JSON
.
stringify
(
selectParam
);
// 处理中文:先 encodeURIComponent
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
path
:
"/dataLibrary/countryBill"
,
query
:
{
data
:
base64
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 跳转数据资源库-政令
export
const
goToDataDecree
=
(
selectParam
)
=>
{
// JSON -> Base64
const
jsonStr
=
JSON
.
stringify
(
selectParam
);
// 处理中文:先 encodeURIComponent
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
path
:
"/dataLibrary/dataDecree"
,
query
:
{
data
:
base64
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 跳转数据资源库-智库
export
const
goToDataThinkTank
=
(
selectParam
)
=>
{
// JSON -> Base64
const
jsonStr
=
JSON
.
stringify
(
selectParam
);
// 处理中文:先 encodeURIComponent
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
path
:
"/dataLibrary/dataThinkTank"
,
query
:
{
data
:
base64
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 跳转数据资源库-出口管制-实体清单
export
const
goToDataEntityList
=
(
selectParam
)
=>
{
// JSON -> Base64
const
jsonStr
=
JSON
.
stringify
(
selectParam
);
// 处理中文:先 encodeURIComponent
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
path
:
"/dataLibrary/dataEntityList"
,
query
:
{
data
:
base64
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 跳转数据资源库-出口管制-商业管制清单
export
const
goToDataCCLList
=
(
selectParam
)
=>
{
// JSON -> Base64
const
jsonStr
=
JSON
.
stringify
(
selectParam
);
// 处理中文:先 encodeURIComponent
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
path
:
"/dataLibrary/dataCommerceControlList"
,
query
:
{
data
:
base64
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 跳转数据资源库-出口管制-实体清单事件
export
const
goToDataSingleEntityEvent
=
(
selectParam
)
=>
{
// JSON -> Base64
const
jsonStr
=
JSON
.
stringify
(
selectParam
);
// 处理中文:先 encodeURIComponent
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
path
:
"/dataLibrary/dataEntityListEvent"
,
query
:
{
data
:
base64
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 跳转数据资源库-出口管制-商业管制清单事件
export
const
goToDataSingleCCLEvent
=
(
selectParam
)
=>
{
// JSON -> Base64
const
jsonStr
=
JSON
.
stringify
(
selectParam
);
// 处理中文:先 encodeURIComponent
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
path
:
"/dataLibrary/dataCommerceControlListEvent"
,
query
:
{
data
:
base64
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 跳转数据资源库-投融资限制-SDN清单
export
const
goToDataSDNList
=
(
selectParam
)
=>
{
// JSON -> Base64
const
jsonStr
=
JSON
.
stringify
(
selectParam
);
// 处理中文:先 encodeURIComponent
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
path
:
"/dataLibrary/sDNList"
,
query
:
{
data
:
base64
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 跳转数据资源库-投融资限制-涉军企业清单
export
const
goToDataMREList
=
(
selectParam
)
=>
{
// JSON -> Base64
const
jsonStr
=
JSON
.
stringify
(
selectParam
);
// 处理中文:先 encodeURIComponent
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
path
:
"/dataLibrary/mREList"
,
query
:
{
data
:
base64
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 跳转数据资源库-投融资限制-SDN清单事件
export
const
goToDataSingleSDNEvent
=
(
selectParam
)
=>
{
// JSON -> Base64
const
jsonStr
=
JSON
.
stringify
(
selectParam
);
// 处理中文:先 encodeURIComponent
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
path
:
"/dataLibrary/sDNListEvent"
,
query
:
{
data
:
base64
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 跳转数据资源库-投融资限制-涉军企业清单事件
export
const
goToDataSingleMREEvent
=
(
selectParam
)
=>
{
// JSON -> Base64
const
jsonStr
=
JSON
.
stringify
(
selectParam
);
// 处理中文:先 encodeURIComponent
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
path
:
"/dataLibrary/mREListEvent"
,
query
:
{
data
:
base64
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 跳转数据资源库-科技人物
export
const
goToDataTechnologyFigures
=
(
selectParam
)
=>
{
// JSON -> Base64
const
jsonStr
=
JSON
.
stringify
(
selectParam
);
// 处理中文:先 encodeURIComponent
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
path
:
"/dataLibrary/dataTechnologyFigures"
,
query
:
{
data
:
base64
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 跳转数据资源库-重要实体-科技企业
export
const
goToDataCompany
=
(
selectParam
)
=>
{
// JSON -> Base64
const
jsonStr
=
JSON
.
stringify
(
selectParam
);
// 处理中文:先 encodeURIComponent
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
path
:
"/dataLibrary/dataCompany"
,
query
:
{
data
:
base64
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 跳转数据资源库-重要实体-机构
export
const
goToDataInstitution
=
(
selectParam
)
=>
{
// JSON -> Base64
const
jsonStr
=
JSON
.
stringify
(
selectParam
);
// 处理中文:先 encodeURIComponent
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
path
:
"/dataLibrary/dataInstitution"
,
query
:
{
data
:
base64
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 跳转数据资源库-新闻
export
const
goToDataNews
=
(
selectParam
)
=>
{
// JSON -> Base64
const
jsonStr
=
JSON
.
stringify
(
selectParam
);
// 处理中文:先 encodeURIComponent
const
base64
=
btoa
(
encodeURIComponent
(
jsonStr
));
const
route
=
router
.
resolve
({
path
:
"/dataLibrary/dataNews"
,
query
:
{
data
:
base64
}
});
window
.
open
(
route
.
href
,
"_blank"
);
}
// 解码-------------------------------------------!!!!!
export
const
getDecodedParams
=
()
=>
{
if
(
window
.
location
.
search
)
{
const
urlParams
=
new
URLSearchParams
(
window
.
location
.
search
)
const
encoded
=
urlParams
.
get
(
'data'
)
if
(
!
encoded
)
return
null
;
try
{
// Base64 解码
const
decoded
=
atob
(
encoded
);
const
jsonStr
=
decodeURIComponent
(
decoded
);
return
JSON
.
parse
(
jsonStr
);
}
catch
(
e
)
{
console
.
error
(
'解码失败'
,
e
);
return
null
;
}
}
else
{
const
obj
=
router
.
currentRoute
.
value
.
params
const
encoded
=
Object
.
values
(
obj
)[
0
]
if
(
!
encoded
)
return
null
;
try
{
// Base64 解码
const
decoded
=
atob
(
encoded
);
const
jsonStr
=
decodeURIComponent
(
decoded
);
return
jsonStr
;
}
catch
(
e
)
{
console
.
error
(
'解码失败'
,
e
);
return
null
;
}
}
}
src/utils/goToPage/methods/getDecode.js
浏览文件 @
0ff5ffb8
// 解码
import
router
from
"@/router"
;
export
const
getDecodedParams
=
()
=>
{
if
(
window
.
location
.
search
)
{
const
urlParams
=
new
URLSearchParams
(
window
.
location
.
search
)
...
...
src/views/bill/billHome/ResourceLibrarySection.vue
浏览文件 @
0ff5ffb8
...
...
@@ -283,7 +283,7 @@ import cyyIcon from "@/assets/icons/cyy.png";
import
ghdIcon
from
"@/assets/icons/ghd.png"
;
import
mzdIcon
from
"@/assets/icons/mzd.png"
;
import
{
ElMessage
}
from
"element-plus"
;
import
{
goToDataCountryBill
}
from
"@/utils/goToPage"
;
import
{
goToDataCountryBill
}
from
"@/utils/goToPage
1
"
;
const
router
=
useRouter
();
...
...
src/views/bill/billHome/index.vue
浏览文件 @
0ff5ffb8
...
...
@@ -322,7 +322,7 @@ import iconILetter from "./assets/icons/icon-iLetter.png";
import
{
ElMessage
}
from
"element-plus"
;
import
{
useGotoNewsDetail
}
from
"@/router/modules/news"
;
import
{
goToBill
}
from
"@/utils/goToPage"
;
import
{
goToBill
}
from
"@/utils/goToPage
1
"
;
// 跳转人物主页(MessageBubble 的 person-click 传入整条列表项,需取 personId)
const
handleClickToCharacter
=
async
item
=>
{
...
...
src/views/comprehensiveSearch/searchResults/index.vue
浏览文件 @
0ff5ffb8
...
...
@@ -132,8 +132,7 @@ import { getPersonSummaryInfo } from "@/api/common/index";
import
{
ElMessage
}
from
"element-plus"
;
import
TimeSortSelectBox
from
'@/components/base/TimeSortSelectBox/index.vue'
import
AreaTag
from
'@/components/base/AreaTag/index.vue'
import
{
getDecodedParams
}
from
"@/utils/goToPage"
;
import
goToPage
from
"@/utils/goToPage"
;
const
route
=
useRoute
();
const
container
=
ref
(
null
)
const
isLoading
=
ref
(
false
)
...
...
@@ -598,7 +597,7 @@ const handleToPage = async item => {
};
onMounted
(()
=>
{
const
routeQuery
=
getDecodedParams
()
const
routeQuery
=
g
oToPage
.
g
etDecodedParams
()
console
.
log
(
'routeQuery'
,
routeQuery
);
...
...
src/views/dataLibrary/bill/countryBill/index.vue
浏览文件 @
0ff5ffb8
...
...
@@ -173,7 +173,6 @@ import { getPostOrgList, getPostMemberList } from '@/api/bill/billHome'
import
{
search
,
getStatusList
}
from
'@/api/comprehensiveSearch'
import
{
ElMessage
}
from
'element-plus'
import
getDateRange
from
'@/utils/getDateRange'
import
{
getDecodedParams
}
from
'@/utils/goToPage'
import
goToPage
from
'@/utils/goToPage/index'
const
route
=
useRoute
();
...
...
src/views/dataLibrary/decree/index.vue
浏览文件 @
0ff5ffb8
...
...
@@ -186,7 +186,7 @@ import { ElMessage } from 'element-plus'
import
getDateRange
from
'@/utils/getDateRange'
import
{
getDepartmentList
}
from
"@/api/decree/home"
;
import
{
getDecodedParams
}
from
'@/utils/goToPage'
import
goToPage
from
'@/utils/goToPage/index'
const
route
=
useRoute
();
...
...
src/views/dataLibrary/exportControl/commerceControlList/index.vue
浏览文件 @
0ff5ffb8
...
...
@@ -9,8 +9,9 @@
@
update:custom-time=
"handleCustomDate"
/>
<SelectBox
v-if=
"isFolderAll"
:placeholder-name=
"typePlaceHolder"
select-title=
"物项类别"
:select-list=
"typeList"
:select-name=
"selectedType"
@
update:select-text=
"handleSelectType"
/>
<SelectBox
v-if=
"isFolderAll"
:placeholder-name=
"updateFlagPlaceHolder"
select-title=
"变动标识"
:select-list=
"updateFlagList"
:select-name=
"selectedUpdateFlag"
@
update:select-text=
"handleSelectUpdateFlag"
/>
<SelectBox
v-if=
"isFolderAll"
:placeholder-name=
"updateFlagPlaceHolder"
select-title=
"变动标识"
:select-list=
"updateFlagList"
:select-name=
"selectedUpdateFlag"
@
update:select-text=
"handleSelectUpdateFlag"
/>
<SelectBox
v-if=
"isFolderAll"
:placeholder-name=
"controlReasonPlaceHolder"
select-title=
"管控原因"
:select-list=
"controlReasonList"
:select-name=
"selectedControlReason"
@
update:select-text=
"handleSelectControlReason"
/>
...
...
@@ -163,7 +164,7 @@ import { search } from '@/api/comprehensiveSearch'
import
{
ElMessage
}
from
'element-plus'
import
getDateRange
from
'@/utils/getDateRange'
import
{
getMaterialCategory
,
getControlReason
}
from
'@/api/comprehensiveSearch/index'
import
goToPage
from
'@/utils/goToPage/index'
const
route
=
useRoute
();
// 图表/数据
...
...
@@ -920,24 +921,25 @@ const handleDownloadCurChartData = () => {
// 跳转到当前页 初始化筛选条件
const
initParam
=
()
=>
{
const
hasQuery
=
Object
.
keys
(
route
.
query
).
length
>
0
;
const
routeQuery
=
goToPage
.
getDecodedParams
()
const
hasQuery
=
Object
.
keys
(
routeQuery
).
length
>
0
;
if
(
hasQuery
)
{
if
(
route
.
q
uery
.
selectedAreaList
)
{
selectedArea
.
value
=
JSON
.
parse
(
route
.
q
uery
.
selectedAreaList
)
if
(
route
Q
uery
.
selectedAreaList
)
{
selectedArea
.
value
=
JSON
.
parse
(
route
Q
uery
.
selectedAreaList
)
}
else
{
selectedArea
.
value
=
route
.
query
.
domains
?
[
route
.
q
uery
.
domains
]
:
[
'全部领域'
]
selectedArea
.
value
=
route
Query
.
domains
?
[
routeQ
uery
.
domains
]
:
[
'全部领域'
]
}
if
(
route
.
query
.
selectedDate
&&
Array
.
isArray
(
JSON
.
parse
(
route
.
query
.
selectedDate
))
&&
JSON
.
parse
(
route
.
q
uery
.
selectedDate
).
length
)
{
if
(
route
Query
.
selectedDate
&&
Array
.
isArray
(
JSON
.
parse
(
routeQuery
.
selectedDate
))
&&
JSON
.
parse
(
routeQ
uery
.
selectedDate
).
length
)
{
selectedDate
.
value
=
'自定义'
customTime
.
value
=
JSON
.
parse
(
route
.
q
uery
.
selectedDate
)
customTime
.
value
=
JSON
.
parse
(
route
Q
uery
.
selectedDate
)
}
selectedType
.
value
=
route
.
query
.
orgnizationName
?
route
.
q
uery
.
orgnizationName
:
'全部类别'
selectedType
.
value
=
route
Query
.
orgnizationName
?
routeQ
uery
.
orgnizationName
:
'全部类别'
selectedUpdateFlag
.
value
=
route
.
query
.
updateFlag
?
route
.
q
uery
.
updateFlag
:
'全部标识'
selectedUpdateFlag
.
value
=
route
Query
.
updateFlag
?
routeQ
uery
.
updateFlag
:
'全部标识'
const
query
=
route
.
q
uery
;
const
query
=
route
Q
uery
;
if
(
Object
.
keys
(
query
).
length
>
0
)
{
sessionStorage
.
setItem
(
'commerceRouteQuery'
,
JSON
.
stringify
(
query
));
}
...
...
src/views/dataLibrary/exportControl/commerceControlListEvent/index.vue
浏览文件 @
0ff5ffb8
...
...
@@ -151,7 +151,7 @@ import router from '@/router'
import
{
search
}
from
'@/api/comprehensiveSearch'
import
{
ElMessage
}
from
'element-plus'
import
getDateRange
from
'@/utils/getDateRange'
import
goToPage
from
'@/utils/goToPage/index'
const
route
=
useRoute
();
// 图表/数据
...
...
@@ -804,23 +804,24 @@ const handleDownloadCurChartData = () => {
// 跳转到当前页 初始化筛选条件
const
initParam
=
()
=>
{
const
hasQuery
=
Object
.
keys
(
route
.
query
).
length
>
0
;
const
routeQuery
=
goToPage
.
getDecodedParams
()
const
hasQuery
=
Object
.
keys
(
routeQuery
).
length
>
0
;
if
(
hasQuery
)
{
if
(
route
.
q
uery
.
selectedAreaList
)
{
selectedArea
.
value
=
JSON
.
parse
(
route
.
q
uery
.
selectedAreaList
)
if
(
route
Q
uery
.
selectedAreaList
)
{
selectedArea
.
value
=
JSON
.
parse
(
route
Q
uery
.
selectedAreaList
)
}
else
{
selectedArea
.
value
=
route
.
query
.
domains
?
[
route
.
q
uery
.
domains
]
:
[
'全部领域'
]
selectedArea
.
value
=
route
Query
.
domains
?
[
routeQ
uery
.
domains
]
:
[
'全部领域'
]
}
if
(
route
.
query
.
selectedDate
&&
Array
.
isArray
(
JSON
.
parse
(
route
.
query
.
selectedDate
))
&&
JSON
.
parse
(
route
.
q
uery
.
selectedDate
).
length
)
{
if
(
route
Query
.
selectedDate
&&
Array
.
isArray
(
JSON
.
parse
(
routeQuery
.
selectedDate
))
&&
JSON
.
parse
(
routeQ
uery
.
selectedDate
).
length
)
{
selectedDate
.
value
=
'自定义'
customTime
.
value
=
JSON
.
parse
(
route
.
q
uery
.
selectedDate
)
customTime
.
value
=
JSON
.
parse
(
route
Q
uery
.
selectedDate
)
}
isInvolveCnOnly
.
value
=
route
.
q
uery
.
isInvolveCnOnly
?
true
:
false
isInvolveCnOnly
.
value
=
route
Q
uery
.
isInvolveCnOnly
?
true
:
false
const
query
=
route
.
q
uery
;
const
query
=
route
Q
uery
;
if
(
Object
.
keys
(
query
).
length
>
0
)
{
sessionStorage
.
setItem
(
'commerceEventRouteQuery'
,
JSON
.
stringify
(
query
));
}
...
...
src/views/dataLibrary/exportControl/entityList/index.vue
浏览文件 @
0ff5ffb8
...
...
@@ -188,7 +188,7 @@ import { search } from '@/api/comprehensiveSearch'
import
{
ElMessage
}
from
'element-plus'
import
getDateRange
from
'@/utils/getDateRange'
import
{
getProvinceList
,
getCountryList
,
getEntityTypes
}
from
'@/api/comprehensiveSearch/index'
import
goToPage
from
'@/utils/goToPage/index'
const
route
=
useRoute
();
const
isShowProvinceBox
=
computed
(()
=>
{
...
...
@@ -1063,34 +1063,35 @@ const handleDownloadCurChartData = () => {
// 跳转到当前页 初始化筛选条件
const
initParam
=
()
=>
{
const
hasQuery
=
Object
.
keys
(
route
.
query
).
length
>
0
;
const
routeQuery
=
goToPage
.
getDecodedParams
()
const
hasQuery
=
Object
.
keys
(
routeQuery
).
length
>
0
;
if
(
hasQuery
)
{
if
(
route
.
q
uery
.
selectedAreaList
)
{
selectedArea
.
value
=
JSON
.
parse
(
route
.
q
uery
.
selectedAreaList
)
if
(
route
Q
uery
.
selectedAreaList
)
{
selectedArea
.
value
=
JSON
.
parse
(
route
Q
uery
.
selectedAreaList
)
}
else
{
selectedArea
.
value
=
route
.
query
.
domains
?
[
route
.
q
uery
.
domains
]
:
[
'全部领域'
]
selectedArea
.
value
=
route
Query
.
domains
?
[
routeQ
uery
.
domains
]
:
[
'全部领域'
]
}
if
(
route
.
query
.
selectedDate
&&
Array
.
isArray
(
JSON
.
parse
(
route
.
query
.
selectedDate
))
&&
JSON
.
parse
(
route
.
q
uery
.
selectedDate
).
length
)
{
if
(
route
Query
.
selectedDate
&&
Array
.
isArray
(
JSON
.
parse
(
routeQuery
.
selectedDate
))
&&
JSON
.
parse
(
routeQ
uery
.
selectedDate
).
length
)
{
selectedDate
.
value
=
'自定义'
customTime
.
value
=
JSON
.
parse
(
route
.
q
uery
.
selectedDate
)
customTime
.
value
=
JSON
.
parse
(
route
Q
uery
.
selectedDate
)
}
selectedProvince
.
value
=
route
.
query
.
selectedProvince
?
provinceList
.
value
.
filter
(
item
=>
item
.
name
.
indexOf
(
route
.
q
uery
.
selectedProvince
)
>
-
1
)[
0
].
name
:
'全部省份'
selectedProvince
.
value
=
route
Query
.
selectedProvince
?
provinceList
.
value
.
filter
(
item
=>
item
.
name
.
indexOf
(
routeQ
uery
.
selectedProvince
)
>
-
1
)[
0
].
name
:
'全部省份'
isHalfRule
.
value
=
route
.
q
uery
.
isHalfRule
===
'true'
?
true
:
false
isHalfRule
.
value
=
route
Q
uery
.
isHalfRule
===
'true'
?
true
:
false
isCnEntityOnly
.
value
=
route
.
q
uery
.
isCnEntityOnly
?
true
:
false
isCnEntityOnly
.
value
=
route
Q
uery
.
isCnEntityOnly
?
true
:
false
if
(
isCnEntityOnly
.
value
)
{
selectedCountry
.
value
=
'0101'
}
else
{
selectedCountry
.
value
=
route
.
query
.
selectedCountryId
?
route
.
q
uery
.
selectedCountryId
:
'全部国家'
selectedCountry
.
value
=
route
Query
.
selectedCountryId
?
routeQ
uery
.
selectedCountryId
:
'全部国家'
}
selectedEntityType
.
value
=
route
.
query
.
selectedEntityType
?
entityTypeList
.
value
.
filter
(
item
=>
item
.
name
===
route
.
q
uery
.
selectedEntityType
)[
0
].
id
:
'全部实体类型'
selectedEntityType
.
value
=
route
Query
.
selectedEntityType
?
entityTypeList
.
value
.
filter
(
item
=>
item
.
name
===
routeQ
uery
.
selectedEntityType
)[
0
].
id
:
'全部实体类型'
const
query
=
route
.
q
uery
;
const
query
=
route
Q
uery
;
if
(
Object
.
keys
(
query
).
length
>
0
)
{
sessionStorage
.
setItem
(
'entityRouteQuery'
,
JSON
.
stringify
(
query
));
}
...
...
@@ -1112,7 +1113,7 @@ const initParam = () => {
if
(
isCnEntityOnly
.
value
)
{
selectedCountry
.
value
=
'0101'
}
else
{
selectedCountry
.
value
=
route
.
query
.
selectedCountryId
?
route
.
q
uery
.
selectedCountryId
:
'全部国家'
selectedCountry
.
value
=
route
Query
.
selectedCountryId
?
routeQ
uery
.
selectedCountryId
:
'全部国家'
}
selectedEntityType
.
value
=
savedQuery
.
selectedEntityType
?
entityTypeList
.
value
.
filter
(
item
=>
item
.
name
===
savedQuery
.
selectedEntityType
)[
0
].
id
:
'全部实体类型'
...
...
src/views/dataLibrary/exportControl/entityListEvent/index.vue
浏览文件 @
0ff5ffb8
...
...
@@ -152,6 +152,7 @@ import router from '@/router'
import
{
search
}
from
'@/api/comprehensiveSearch'
import
{
ElMessage
}
from
'element-plus'
import
getDateRange
from
'@/utils/getDateRange'
import
goToPage
from
'@/utils/goToPage/index'
const
route
=
useRoute
();
...
...
@@ -805,23 +806,26 @@ const handleDownloadCurChartData = () => {
// 跳转到当前页 初始化筛选条件
const
initParam
=
()
=>
{
const
hasQuery
=
Object
.
keys
(
route
.
query
).
length
>
0
;
const
routeQuery
=
goToPage
.
getDecodedParams
()
console
.
log
(
'routequery'
,
routeQuery
);
const
hasQuery
=
Object
.
keys
(
routeQuery
).
length
>
0
;
if
(
hasQuery
)
{
if
(
route
.
q
uery
.
selectedAreaList
)
{
selectedArea
.
value
=
JSON
.
parse
(
route
.
q
uery
.
selectedAreaList
)
if
(
route
Q
uery
.
selectedAreaList
)
{
selectedArea
.
value
=
JSON
.
parse
(
route
Q
uery
.
selectedAreaList
)
}
else
{
selectedArea
.
value
=
route
.
query
.
domains
?
[
route
.
q
uery
.
domains
]
:
[
'全部领域'
]
selectedArea
.
value
=
route
Query
.
domains
?
[
routeQ
uery
.
domains
]
:
[
'全部领域'
]
}
if
(
route
.
query
.
selectedDate
&&
Array
.
isArray
(
JSON
.
parse
(
route
.
query
.
selectedDate
))
&&
JSON
.
parse
(
route
.
q
uery
.
selectedDate
).
length
)
{
if
(
route
Query
.
selectedDate
&&
Array
.
isArray
(
JSON
.
parse
(
routeQuery
.
selectedDate
))
&&
JSON
.
parse
(
routeQ
uery
.
selectedDate
).
length
)
{
selectedDate
.
value
=
'自定义'
customTime
.
value
=
JSON
.
parse
(
route
.
q
uery
.
selectedDate
)
customTime
.
value
=
JSON
.
parse
(
route
Q
uery
.
selectedDate
)
}
isInvolveCnOnly
.
value
=
route
.
q
uery
.
isInvolveCnOnly
?
true
:
false
isInvolveCnOnly
.
value
=
route
Q
uery
.
isInvolveCnOnly
?
true
:
false
const
query
=
route
.
q
uery
;
const
query
=
route
Q
uery
;
if
(
Object
.
keys
(
query
).
length
>
0
)
{
sessionStorage
.
setItem
(
'entityEventRouteQuery'
,
JSON
.
stringify
(
query
));
}
...
...
src/views/dataLibrary/thinkTank/index.vue
浏览文件 @
0ff5ffb8
...
...
@@ -172,13 +172,13 @@ import InputBox from "../components/InputBox/index.vue";
import
DataChartSwitchBox
from
'../components/dataChartSwitchBox/index.vue'
import
{
useRoute
}
from
"vue-router"
;
import
router
from
"@/router"
;
import
{
getDecodedParams
}
from
"@/utils/goToPage"
;
import
{
search
,
getThinkTankList
}
from
"@/api/comprehensiveSearch"
;
import
{
ElMessage
}
from
"element-plus"
;
import
getDateRange
from
"@/utils/getDateRange"
;
import
{
getDepartmentList
}
from
"@/api/decree/home"
;
import
goToPage
from
"@/utils/goToPage"
;
const
route
=
useRoute
();
...
...
@@ -913,7 +913,7 @@ const handleDownloadCurChartData = () => {
const
initParam
=
()
=>
{
const
hasQuery
=
Object
.
keys
(
route
.
query
).
length
>
0
;
if
(
hasQuery
)
{
const
decodedQuery
=
route
.
query
.
data
?
(
getDecodedParams
()
||
{
}
)
:
null
;
const
decodedQuery
=
route
.
query
.
data
?
(
g
oToPage
.
g
etDecodedParams
()
||
{
}
)
:
null
;
const
query
=
decodedQuery
&&
typeof
decodedQuery
===
"object"
?
decodedQuery
:
route
.
query
;
if
(
query
.
selectedAreaList
)
{
...
...
src/views/exportControl/components/info.vue
浏览文件 @
0ff5ffb8
...
...
@@ -21,23 +21,29 @@
<
script
setup
>
import
infoIcon
from
"../assets/icons/info-icon.png"
;
import
{
useRouter
}
from
"vue-router"
;
import
goToPage
from
"@/utils/goToPage/index"
;
const
router
=
useRouter
()
const
emits
=
defineEmits
([
'num-click'
])
const
handleClickNum
=
(
item
)
=>
{
if
(
item
===
'实体清单'
)
{
const
route
=
router
.
resolve
({
path
:
"/dataLibrary/dataEntityList"
,
query
:
{
// const route = router.resolve({
// path: "/dataLibrary/dataEntityList",
// query: {
// isCnEntityOnly: true
// }
// });
// window.open(route.href, "_blank");
const
params
=
{
isCnEntityOnly
:
true
}
});
window
.
open
(
route
.
href
,
"_blank"
);
goToPage
.
goToDataEntityList
(
params
)
}
else
if
(
item
===
'商业管制清单'
)
{
const
route
=
router
.
resolve
({
path
:
"/dataLibrary/dataCommerceControlList"
,
});
window
.
open
(
route
.
href
,
"_blank"
);
// const route = router.resolve({
// path: "/dataLibrary/dataCommerceControlList",
// });
// window.open(route.href, "_blank");
goToPage
.
goToDataCCLList
()
}
}
...
...
@@ -157,7 +163,8 @@ const desMap = {
display
:
flex
;
flex-direction
:
column
;
align-items
:
flex-end
;
&
:hover
{
&
:hover
{
text-decoration
:
underline
;
background
:
var
(
--
color-primary-2
);
}
...
...
src/views/exportControl/index-back.vue
浏览文件 @
0ff5ffb8
...
...
@@ -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=
"false"
:interval=
"3000"
arrow=
"never"
indicator-position=
"none"
@
change=
"handleCarouselChange"
>
<el-carousel
ref=
"carouselRef"
height=
"370px"
:autoplay=
"false"
: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"
>
...
...
@@ -72,11 +52,7 @@
<div
class=
"box1-top-content-item"
>
<span
class=
"box1-top-content-item-title"
>
· 涉及领域:
</span>
<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>
...
...
@@ -84,18 +60,10 @@
<div
class=
"box1-bottom-sanTypeId"
v-if=
"item.sanEntities?.length"
>
<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
(
...
...
@@ -112,12 +80,8 @@
<div
class=
"box1-bottom-sanTypeId"
v-if=
"item.sanItems?.length > 0"
>
<div
class=
"box1-bottom-title"
>
· 涉及管制物项:
</div>
<div
class=
"box1-bottom-content__wx"
>
<div
class=
"box1-bottom-content__wx-item"
v-for=
"(ett, index) in item.sanItems"
:key=
"index"
@
click=
"handleWxClick(item)"
>
<div
class=
"box1-bottom-content__wx-item"
v-for=
"(ett, index) in item.sanItems"
:key=
"index"
@
click=
"handleWxClick(item)"
>
<div
class=
"box1-bottom-content__wx-item-id"
>
{{
ett
.
id
}}
</div>
...
...
@@ -149,14 +113,8 @@
</custom-container>
</el-col>
<el-col
:span=
"8"
style=
"padding-right: 0px"
>
<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>
...
...
@@ -165,19 +123,11 @@
</el-row>
<div
class=
"center-center"
>
<NewsList
:newsList=
"newsList"
@
item-click=
"handleNewsInfoClick"
@
more-click=
"handleToMoreNews"
content=
"newsContent"
/>
<NewsList
:newsList=
"newsList"
@
item-click=
"handleNewsInfoClick"
@
more-click=
"handleToMoreNews"
content=
"newsContent"
/>
<MessageBubble
:messageList=
"socialMediaList"
@
person-click=
"handlePerClick"
imageUrl=
"avatar"
@
more-click=
"handleToSocialDetail"
/>
<MessageBubble
:messageList=
"socialMediaList"
@
person-click=
"handlePerClick"
imageUrl=
"avatar"
@
more-click=
"handleToSocialDetail"
/>
</div>
<el-row
:gutter=
"16"
style=
"width: 1600px; margin: 0 auto; height: 510px; margin-top: 64px"
>
...
...
@@ -188,30 +138,20 @@
<div
class=
"box3"
>
<div
class=
"box3-content"
>
<div
class=
"box3-content-title"
>
实体清单发布频次统计
</div>
<el-table
:data=
"entityListReleaseFreq"
stripe
style=
"width: 100%"
@
row-click=
"handleEntityRowClick"
>
<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; cursor: pointer"
>
<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"
/>
</div>
</
template
>
...
...
@@ -225,39 +165,28 @@
</div>
<div
class=
"ai-pane"
>
<AiButton
@
mouseenter=
"handleShowAiPane('entityListReleaseFreqChart')"
/>
<AiPane
v-if=
"aiPaneVisible?.entityListReleaseFreqChart"
<AiPane
v-if=
"aiPaneVisible?.entityListReleaseFreqChart"
:aiContent=
"overviewAiContent.entityListReleaseFreqChart"
@
mouseleave=
"handleHideAiPane('entityListReleaseFreqChart')"
/>
@
mouseleave=
"handleHideAiPane('entityListReleaseFreqChart')"
/>
</div>
</div>
<div
class=
"box3-content"
>
<div
class=
"box3-content-title"
>
商业管制清单发布频次统计
</div>
<el-table
:data=
"commerceControlListReleaseFreq"
stripe
style=
"width: 100%"
@
row-click=
"handleCommercialRowClick"
>
<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; cursor: pointer"
>
<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"
/>
</div>
</
template
>
...
...
@@ -271,11 +200,9 @@
</div>
<div
class=
"ai-pane"
>
<AiButton
@
mouseenter=
"handleShowAiPane('commerceControlListReleaseFreqChart')"
/>
<AiPane
v-if=
"aiPaneVisible?.commerceControlListReleaseFreqChart"
<AiPane
v-if=
"aiPaneVisible?.commerceControlListReleaseFreqChart"
:aiContent=
"overviewAiContent.commerceControlListReleaseFreqChart"
@
mouseleave=
"handleHideAiPane('commerceControlListReleaseFreqChart')"
/>
@
mouseleave=
"handleHideAiPane('commerceControlListReleaseFreqChart')"
/>
</div>
</div>
<div
class=
"box3-content"
style=
"display: none"
>
...
...
@@ -286,11 +213,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>
...
...
@@ -318,12 +242,8 @@
<el-checkbox
v-model=
"domainChecked"
label=
"50%规则"
size=
"large"
/>
</
template
>
<
template
#
default
>
<EChart
:option=
"radarOption"
autoresize
:style=
"
{ height: '420px' }"
@chart-click="handleRadarChartClick"
/>
<EChart
:option=
"radarOption"
autoresize
:style=
"
{ height: '420px' }"
@chart-click="handleRadarChartClick" />
<div
class=
"data-origin-box"
>
<div
class=
"data-origin-icon"
>
<img
:src=
"tipsIcon"
alt=
""
/>
...
...
@@ -341,24 +261,15 @@
<custom-container
title=
"制裁清单数量增长趋势"
:titleIcon=
"qushiIcon"
height=
"540px"
>
<
template
#
header-right
>
<div
style=
"display: flex; align-items: center; gap: 16px"
>
<el-checkbox
v-if=
"selectedEntityId != '13'"
v-model=
"trendChecked"
label=
"50%规则"
size=
"large"
/>
<el-checkbox
v-if=
"selectedEntityId != '13'"
v-model=
"trendChecked"
label=
"50%规则"
size=
"large"
/>
<el-select
v-model=
"selectedEntityId"
placeholder=
"请选择清单类型"
style=
"width: 160px"
>
<el-option
v-for=
"item in infoList"
:key=
"item.id"
:label=
"item.nameZh"
:value=
"item.id"
/>
</el-select>
</div>
</
template
>
<
template
#
default
>
<EChart
:option=
"trendOption"
autoresize
:style=
"
{ height: '420px' }"
@chart-click="handleMultiBarChartClick"
/>
<EChart
:option=
"trendOption"
autoresize
:style=
"
{ height: '420px' }"
@chart-click="handleMultiBarChartClick" />
<div
class=
"data-origin-box"
>
<div
class=
"data-origin-icon"
>
<img
:src=
"tipsIcon"
alt=
""
/>
...
...
@@ -367,11 +278,8 @@
</div>
<div
class=
"ai-pane"
>
<AiButton
@
mouseenter=
"handleShowAiPane('trendChart')"
/>
<AiPane
v-if=
"aiPaneVisible?.trendChart"
:aiContent=
"overviewAiContent.trendChart"
@
mouseleave=
"handleHideAiPane('trendChart')"
/>
<AiPane
v-if=
"aiPaneVisible?.trendChart"
:aiContent=
"overviewAiContent.trendChart"
@
mouseleave=
"handleHideAiPane('trendChart')"
/>
</div>
</
template
>
</custom-container>
...
...
@@ -381,13 +289,9 @@
<el-row
:gutter=
"16"
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>
...
...
@@ -400,25 +304,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>
...
...
@@ -426,12 +320,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>
...
...
@@ -448,24 +338,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
(
...
...
@@ -500,19 +379,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=
"[
<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>
...
...
@@ -524,15 +397,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>
...
...
@@ -571,17 +437,9 @@
}}
</el-checkbox>
</div>
</el-checkbox-group>
<div
v-if=
"timeOptions.find(i => i.value === 'custom' && i.checked)"
class=
"custom-date-picker"
>
<el-date-picker
v-model=
"customDateRange"
type=
"daterange"
range-separator=
"-"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
/>
<div
v-if=
"timeOptions.find(i => i.value === 'custom' && i.checked)"
class=
"custom-date-picker"
>
<el-date-picker
v-model=
"customDateRange"
type=
"daterange"
range-separator=
"-"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
/>
</div>
</div>
</div>
...
...
@@ -610,14 +468,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>
...
...
@@ -630,12 +482,8 @@
</
template
>
</el-row>
</div>
<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"
>
...
...
@@ -648,13 +496,8 @@
</div>
</
template
>
</el-dialog>
<RiskSignalOverviewDetailDialog
v-model=
"isRiskOverviewDetailOpen"
:row=
"riskOverviewDetailRow"
name-field=
"signalTitle"
post-date-field=
"signalTime"
risk-level-field=
"signalLevel"
/>
<RiskSignalOverviewDetailDialog
v-model=
"isRiskOverviewDetailOpen"
:row=
"riskOverviewDetailRow"
name-field=
"signalTitle"
post-date-field=
"signalTime"
risk-level-field=
"signalLevel"
/>
</template>
<
script
setup
>
...
...
@@ -1499,7 +1342,7 @@ const fetchSanctionList = async () => {
});
totalAll
.
value
=
res
.
totalElements
;
}
}
catch
(
error
)
{}
}
catch
(
error
)
{
}
};
const
handlePageChangeAll
=
val
=>
{
...
...
@@ -1793,7 +1636,7 @@ const handleGetHylyList = async () => {
hylymc
:
"全部分类"
};
categoryList
.
value
=
[
obj
,
...
categoryList
.
value
];
}
catch
(
error
)
{}
}
catch
(
error
)
{
}
};
const
chart1Data
=
ref
({
...
...
@@ -1927,12 +1770,24 @@ const handleRadarChartClick = value => {
// 点击制裁清单数量增长趋势
const
handleMultiBarChartClick
=
val
=>
{
const
params
=
{
let
params
if
(
selectedEntityId
.
value
===
1
)
{
params
=
{
isHalfRule
:
trendChecked
.
value
,
domains
:
val
.
seriesName
,
isCnEntityOnly
:
true
,
selectedDate
:
JSON
.
stringify
([
val
.
name
+
"-01-01"
,
val
.
name
+
"-12-31"
])
};
}
else
{
params
=
{
isHalfRule
:
trendChecked
.
value
,
domains
:
val
.
seriesName
,
isCnEntityOnly
:
true
,
selectedDate
:
JSON
.
stringify
([
val
.
name
+
"-01-01"
,
val
.
name
+
"-12-31"
]),
updateFlag
:
'1'
}
}
const
route
=
router
.
resolve
({
path
:
selectedEntityId
.
value
===
1
?
"/dataLibrary/dataEntityList"
:
"/dataLibrary/dataCommerceControlList"
,
query
:
params
...
...
@@ -2128,6 +1983,7 @@ const handleMediaClick = item => {
padding-top
:
16px
;
box-sizing
:
border-box
;
padding-right
:
24px
;
&
-title
{
font-size
:
16px
;
font-weight
:
700
;
...
...
@@ -2399,6 +2255,7 @@ const handleMediaClick = item => {
}
.box3-content
{
// flex: 1;
.el-progress--line
{
width
:
82px
;
...
...
src/views/exportControl/index.vue
浏览文件 @
0ff5ffb8
...
...
@@ -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=
"false"
:interval=
"3000"
arrow=
"never"
indicator-position=
"none"
@
change=
"handleCarouselChange"
>
<el-carousel
ref=
"carouselRef"
height=
"370px"
:autoplay=
"false"
: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"
>
...
...
@@ -72,11 +52,7 @@
<div
class=
"box1-top-content-item"
>
<span
class=
"box1-top-content-item-title"
>
· 涉及领域:
</span>
<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>
...
...
@@ -84,18 +60,10 @@
<div
class=
"box1-bottom-sanTypeId"
v-if=
"item.sanEntities?.length"
>
<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
(
...
...
@@ -112,12 +80,8 @@
<div
class=
"box1-bottom-sanTypeId"
v-if=
"item.sanItems?.length > 0"
>
<div
class=
"box1-bottom-title"
>
· 涉及管制物项:
</div>
<div
class=
"box1-bottom-content__wx"
>
<div
class=
"box1-bottom-content__wx-item"
v-for=
"(ett, index) in item.sanItems"
:key=
"index"
@
click=
"handleWxClick(item)"
>
<div
class=
"box1-bottom-content__wx-item"
v-for=
"(ett, index) in item.sanItems"
:key=
"index"
@
click=
"handleWxClick(item)"
>
<div
class=
"box1-bottom-content__wx-item-id"
>
{{
ett
.
id
}}
</div>
...
...
@@ -149,14 +113,8 @@
</custom-container>
</el-col>
<el-col
:span=
"8"
style=
"padding-right: 0px"
>
<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>
...
...
@@ -165,19 +123,11 @@
</el-row>
<div
class=
"center-center"
>
<NewsList
:newsList=
"newsList"
@
item-click=
"handleNewsInfoClick"
@
more-click=
"handleToMoreNews"
content=
"newsContent"
/>
<NewsList
:newsList=
"newsList"
@
item-click=
"handleNewsInfoClick"
@
more-click=
"handleToMoreNews"
content=
"newsContent"
/>
<MessageBubble
:messageList=
"socialMediaList"
@
person-click=
"handlePerClick"
imageUrl=
"avatar"
@
more-click=
"handleToSocialDetail"
/>
<MessageBubble
:messageList=
"socialMediaList"
@
person-click=
"handlePerClick"
imageUrl=
"avatar"
@
more-click=
"handleToSocialDetail"
/>
</div>
<el-row
:gutter=
"16"
style=
"width: 1600px; margin: 0 auto; height: 510px; margin-top: 64px"
>
...
...
@@ -188,30 +138,20 @@
<div
class=
"box3"
>
<div
class=
"box3-content"
>
<div
class=
"box3-content-title"
>
实体清单发布频次统计
</div>
<el-table
:data=
"entityListReleaseFreq"
stripe
style=
"width: 100%"
@
row-click=
"handleEntityRowClick"
>
<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; cursor: pointer"
>
<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"
/>
</div>
</
template
>
...
...
@@ -225,39 +165,28 @@
</div>
<div
class=
"ai-pane"
>
<AiButton
@
mouseenter=
"handleShowAiPane('entityListReleaseFreqChart')"
/>
<AiPane
v-if=
"aiPaneVisible?.entityListReleaseFreqChart"
<AiPane
v-if=
"aiPaneVisible?.entityListReleaseFreqChart"
:aiContent=
"overviewAiContent.entityListReleaseFreqChart"
@
mouseleave=
"handleHideAiPane('entityListReleaseFreqChart')"
/>
@
mouseleave=
"handleHideAiPane('entityListReleaseFreqChart')"
/>
</div>
</div>
<div
class=
"box3-content"
>
<div
class=
"box3-content-title"
>
商业管制清单发布频次统计
</div>
<el-table
:data=
"commerceControlListReleaseFreq"
stripe
style=
"width: 100%"
@
row-click=
"handleCommercialRowClick"
>
<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; cursor: pointer"
>
<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"
/>
</div>
</
template
>
...
...
@@ -271,11 +200,9 @@
</div>
<div
class=
"ai-pane"
>
<AiButton
@
mouseenter=
"handleShowAiPane('commerceControlListReleaseFreqChart')"
/>
<AiPane
v-if=
"aiPaneVisible?.commerceControlListReleaseFreqChart"
<AiPane
v-if=
"aiPaneVisible?.commerceControlListReleaseFreqChart"
:aiContent=
"overviewAiContent.commerceControlListReleaseFreqChart"
@
mouseleave=
"handleHideAiPane('commerceControlListReleaseFreqChart')"
/>
@
mouseleave=
"handleHideAiPane('commerceControlListReleaseFreqChart')"
/>
</div>
</div>
<div
class=
"box3-content"
style=
"display: none"
>
...
...
@@ -286,11 +213,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>
...
...
@@ -318,12 +242,8 @@
<el-checkbox
v-model=
"domainChecked"
label=
"50%规则"
size=
"large"
/>
</
template
>
<
template
#
default
>
<EChart
:option=
"radarOption"
autoresize
:style=
"
{ height: '420px' }"
@chart-click="handleRadarChartClick"
/>
<EChart
:option=
"radarOption"
autoresize
:style=
"
{ height: '420px' }"
@chart-click="handleRadarChartClick" />
<div
class=
"data-origin-box"
>
<div
class=
"data-origin-icon"
>
<img
:src=
"tipsIcon"
alt=
""
/>
...
...
@@ -341,24 +261,15 @@
<custom-container
title=
"制裁清单数量增长趋势"
:titleIcon=
"qushiIcon"
height=
"540px"
>
<
template
#
header-right
>
<div
style=
"display: flex; align-items: center; gap: 16px"
>
<el-checkbox
v-if=
"selectedEntityId != '13'"
v-model=
"trendChecked"
label=
"50%规则"
size=
"large"
/>
<el-checkbox
v-if=
"selectedEntityId != '13'"
v-model=
"trendChecked"
label=
"50%规则"
size=
"large"
/>
<el-select
v-model=
"selectedEntityId"
placeholder=
"请选择清单类型"
style=
"width: 160px"
>
<el-option
v-for=
"item in infoList"
:key=
"item.id"
:label=
"item.nameZh"
:value=
"item.id"
/>
</el-select>
</div>
</
template
>
<
template
#
default
>
<EChart
:option=
"trendOption"
autoresize
:style=
"
{ height: '420px' }"
@chart-click="handleMultiBarChartClick"
/>
<EChart
:option=
"trendOption"
autoresize
:style=
"
{ height: '420px' }"
@chart-click="handleMultiBarChartClick" />
<div
class=
"data-origin-box"
>
<div
class=
"data-origin-icon"
>
<img
:src=
"tipsIcon"
alt=
""
/>
...
...
@@ -367,11 +278,8 @@
</div>
<div
class=
"ai-pane"
>
<AiButton
@
mouseenter=
"handleShowAiPane('trendChart')"
/>
<AiPane
v-if=
"aiPaneVisible?.trendChart"
:aiContent=
"overviewAiContent.trendChart"
@
mouseleave=
"handleHideAiPane('trendChart')"
/>
<AiPane
v-if=
"aiPaneVisible?.trendChart"
:aiContent=
"overviewAiContent.trendChart"
@
mouseleave=
"handleHideAiPane('trendChart')"
/>
</div>
</
template
>
</custom-container>
...
...
@@ -381,13 +289,9 @@
<el-row
:gutter=
"16"
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>
...
...
@@ -400,10 +304,7 @@
<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)"
>
...
...
@@ -432,22 +333,15 @@
</div>
</div>
</div>
<div
class=
"box4-footer"
:style=
"
{ marginTop: sanctionProcessList.length > 0 ? '0px' : 'auto' }"
>
<div
class=
"box4-footer"
:style=
"
{ marginTop: sanctionProcessList.length > 0 ? '0px' : 'auto' }">
<!--
<el-button
type=
"primary"
link
@
click=
"handleGetMore"
>
查看更多
<el-icon>
<DArrowRight
/>
</el-icon>
</el-button>
-->
<simple-pagination
v-model:current-page=
"sanctionPage"
:page-size=
"listPageSize"
:total=
"totalNum"
@
page-change=
"handleListPageChange"
/>
<simple-pagination
v-model:current-page=
"sanctionPage"
:page-size=
"listPageSize"
:total=
"totalNum"
@
page-change=
"handleListPageChange"
/>
</div>
</div>
</
template
>
...
...
@@ -460,24 +354,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
(
...
...
@@ -512,19 +395,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=
"[
<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>
...
...
@@ -536,15 +413,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>
...
...
@@ -584,24 +454,11 @@
</div>
</el-checkbox-group>
-->
<div
class=
"checkbox-grid"
>
<el-checkbox
v-for=
"(item, index) in timeOptions"
:key=
"index"
v-model=
"item.checked"
:label=
"item.label"
@
change=
"handleFilterChange(item, timeOptions, 'time')"
/>
<div
v-if=
"timeOptions.find(i => i.value === 'custom' && i.checked)"
class=
"custom-date-picker"
>
<el-date-picker
v-model=
"customDateRange"
type=
"daterange"
range-separator=
"-"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
/>
<el-checkbox
v-for=
"(item, index) in timeOptions"
:key=
"index"
v-model=
"item.checked"
:label=
"item.label"
@
change=
"handleFilterChange(item, timeOptions, 'time')"
/>
<div
v-if=
"timeOptions.find(i => i.value === 'custom' && i.checked)"
class=
"custom-date-picker"
>
<el-date-picker
v-model=
"customDateRange"
type=
"daterange"
range-separator=
"-"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
/>
</div>
</div>
</div>
...
...
@@ -633,14 +490,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>
<el-empty
v-else
/>
...
...
@@ -656,12 +507,8 @@
</
template
>
</el-row>
</div>
<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"
>
...
...
@@ -674,13 +521,8 @@
</div>
</
template
>
</el-dialog>
<RiskSignalOverviewDetailDialog
v-model=
"isRiskOverviewDetailOpen"
:row=
"riskOverviewDetailRow"
name-field=
"signalTitle"
post-date-field=
"signalTime"
risk-level-field=
"signalLevel"
/>
<RiskSignalOverviewDetailDialog
v-model=
"isRiskOverviewDetailOpen"
:row=
"riskOverviewDetailRow"
name-field=
"signalTitle"
post-date-field=
"signalTime"
risk-level-field=
"signalLevel"
/>
</template>
<
script
setup
>
...
...
@@ -758,6 +600,7 @@ import {
import
{
getMultipleBarChart_m
}
from
"./utils/charts"
;
import
{
formatAnyDateToChinese
}
from
"./utils"
;
import
_
from
"lodash"
;
import
goToPage
from
"@/utils/goToPage/index"
;
const
currentRuleCompany
=
ref
(
""
);
const
currentRuleCount
=
ref
(
0
);
...
...
@@ -1897,7 +1740,7 @@ const handleGetHylyList = async () => {
hylymc
:
"全部分类"
};
categoryList
.
value
=
[
obj
,
...
categoryList
.
value
];
}
catch
(
error
)
{}
}
catch
(
error
)
{
}
};
const
chart1Data
=
ref
({
...
...
@@ -1994,11 +1837,12 @@ const handleEntityRowClick = row => {
// 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 route = router.resolve({
// path: "/dataLibrary/dataEntityListEvent",
// query: params
// });
// window.open(route.href, "_blank");
goToPage
.
goToDataSingleEntityEvent
(
params
)
};
// 点击商业管制清单发布频次统计
...
...
@@ -2008,11 +1852,12 @@ const handleCommercialRowClick = row => {
// 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 route = router.resolve({
// path: "/dataLibrary/dataCommerceControlListEvent",
// query: params
// });
// window.open(route.href, "_blank");
goToPage
.
goToDataSingleCCLEvent
(
params
)
};
// 点击实体清单领域分布情况
...
...
@@ -2022,38 +1867,57 @@ const handleRadarChartClick = value => {
const
params
=
{
isHalfRule
:
domainChecked
.
value
};
const
route
=
router
.
resolve
({
path
:
"/dataLibrary/dataEntityList"
,
query
:
params
});
window
.
open
(
route
.
href
,
"_blank"
);
// const route = router.resolve({
// path: "/dataLibrary/dataEntityList",
// query: params
// });
// window.open(route.href, "_blank");
goToPage
.
goToDataEntityList
(
params
)
};
// 点击制裁清单数量增长趋势
const
handleMultiBarChartClick
=
val
=>
{
const
params
=
{
let
params
if
(
selectedEntityId
.
value
===
1
)
{
params
=
{
isHalfRule
:
trendChecked
.
value
,
domains
:
val
.
seriesName
,
isCnEntityOnly
:
true
,
selectedDate
:
JSON
.
stringify
([
val
.
name
+
"-01-01"
,
val
.
name
+
"-12-31"
])
};
const
route
=
router
.
resolve
({
path
:
selectedEntityId
.
value
===
1
?
"/dataLibrary/dataEntityList"
:
"/dataLibrary/dataCommerceControlList"
,
query
:
params
});
window
.
open
(
route
.
href
,
"_blank"
);
goToPage
.
goToDataEntityList
(
params
)
}
else
{
params
=
{
isHalfRule
:
trendChecked
.
value
,
domains
:
val
.
seriesName
,
isCnEntityOnly
:
true
,
selectedDate
:
JSON
.
stringify
([
val
.
name
+
"-01-01"
,
val
.
name
+
"-12-31"
]),
updateFlag
:
'1'
}
goToPage
.
goToDataCCLList
(
params
)
}
// const route = router.resolve({
// path: selectedEntityId.value === 1 ? "/dataLibrary/dataEntityList" : "/dataLibrary/dataCommerceControlList",
// query: params
// });
// window.open(route.href, "_blank");
};
// 跳转到数据资源库
const
handleToDataLibrary
=
item
=>
{
const
route
=
router
.
resolve
({
path
:
"/dataLibrary/dataEntityList"
,
query
:
{
// const route = router.resolve({
// path: "/dataLibrary/dataEntityList",
// query: {
// isCnEntityOnly: true,
// selectedDate: JSON.stringify([item.postDate, item.postDate])
// }
// });
// window.open(route.href, "_blank");
const
params
=
{
isCnEntityOnly
:
true
,
selectedDate
:
JSON
.
stringify
([
item
.
postDate
,
item
.
postDate
])
}
});
window
.
open
(
route
.
href
,
"_blank"
);
goToPage
.
goToDataEntityList
(
params
)
};
onMounted
(
async
()
=>
{
...
...
@@ -2232,6 +2096,7 @@ const handleMediaClick = item => {
padding-top
:
16px
;
box-sizing
:
border-box
;
padding-right
:
24px
;
&
-title
{
font-size
:
16px
;
font-weight
:
700
;
...
...
@@ -2503,6 +2368,7 @@ const handleMediaClick = item => {
}
.box3-content
{
// flex: 1;
.el-progress--line
{
width
:
82px
;
...
...
@@ -2559,15 +2425,18 @@ const handleMediaClick = item => {
top
:
-7
.5px
;
padding-bottom
:
8px
;
cursor
:
pointer
;
&
-top
{
display
:
flex
;
justify-content
:
space-between
;
margin-bottom
:
5px
;
}
&
-title
{
font-size
:
18px
;
color
:
$base-color
;
font-weight
:
700
;
&
:hover
{
text-decoration
:
underline
;
background
:
var
(
--
color-primary-2
);
...
...
src/views/exportControl/v2.0EntityList/components/dataStatistics/index.vue
浏览文件 @
0ff5ffb8
...
...
@@ -105,12 +105,8 @@
</div>
</
template
>
<!-- <div class="echarts" ref="sanctionCountChartRef"></div> -->
<EChart
:option=
"sanctionCountChartOption"
autoresize
:style=
"{ height: '300px', padding: '0 20px' }"
@
chart-click=
"handleToDataLibrary4"
/>
<EChart
:option=
"sanctionCountChartOption"
autoresize
:style=
"{ height: '300px', padding: '0 20px' }"
@
chart-click=
"handleToDataLibrary4"
/>
<!-- <div class="bottom">
<div class="ai">
<div class="left">
...
...
@@ -132,11 +128,8 @@
<!-- <AiButton />
<AiPane :aiContent="sanctionCountChart.interpretation" /> -->
<AiButton
@
mouseenter=
"handleShowAiPane('sanctionCountChart')"
/>
<AiPane
v-if=
"aiPaneVisible?.sanctionCountChart"
:aiContent=
"overviewAiContent.sanctionCountChart"
@
mouseleave=
"handleHideAiPane('sanctionCountChart')"
/>
<AiPane
v-if=
"aiPaneVisible?.sanctionCountChart"
:aiContent=
"overviewAiContent.sanctionCountChart"
@
mouseleave=
"handleHideAiPane('sanctionCountChart')"
/>
</div>
</AnalysisBox>
</div>
...
...
@@ -150,22 +143,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"
@
click=
"handleToDataLibrary5(item)"
>
<div
class=
"rank-item"
v-for=
"(item, index) in rankData"
:key=
"index"
@
click=
"handleToDataLibrary5(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=
"{
<div
class=
"rank-bar-fill"
:style=
"{
width: (item.value / maxRankValue) * 100 + '%',
background: getBarColor(index)
}"
></div>
}"
></div>
</div>
<div
class=
"rank-value"
>
{{ item.value }}家
</div>
</div>
...
...
@@ -181,11 +166,8 @@
<!-- <AiButton />
<AiPane :aiContent="rankChart.interpretation" /> -->
<AiButton
@
mouseenter=
"handleShowAiPane('rankChart')"
/>
<AiPane
v-if=
"aiPaneVisible?.rankChart"
:aiContent=
"overviewAiContent.rankChart"
@
mouseleave=
"handleHideAiPane('rankChart')"
/>
<AiPane
v-if=
"aiPaneVisible?.rankChart"
:aiContent=
"overviewAiContent.rankChart"
@
mouseleave=
"handleHideAiPane('rankChart')"
/>
</div>
</AnalysisBox>
</div>
...
...
@@ -197,12 +179,8 @@
</el-select>
</
template
>
<!-- <div class="echarts" ref="domainChartRef"></div> -->
<EChart
:option=
"domainChartOption"
autoresize
:style=
"{ height: '300px', padding: '0 20px' }"
@
chart-click=
"handleToDataLibrary6"
/>
<EChart
:option=
"domainChartOption"
autoresize
:style=
"{ height: '300px', padding: '0 20px' }"
@
chart-click=
"handleToDataLibrary6"
/>
<div
class=
"data-origin-box"
>
<div
class=
"data-origin-icon"
>
<img
:src=
"tipsIcon"
alt=
""
/>
...
...
@@ -213,11 +191,8 @@
<!-- <AiButton />
<AiPane :aiContent="domainChart.interpretation" /> -->
<AiButton
@
mouseenter=
"handleShowAiPane('domainChart')"
/>
<AiPane
v-if=
"aiPaneVisible?.domainChart"
:aiContent=
"overviewAiContent.domainChart"
@
mouseleave=
"handleHideAiPane('domainChart')"
/>
<AiPane
v-if=
"aiPaneVisible?.domainChart"
:aiContent=
"overviewAiContent.domainChart"
@
mouseleave=
"handleHideAiPane('domainChart')"
/>
</div>
</AnalysisBox>
</div>
...
...
@@ -229,12 +204,8 @@
</el-select>
</
template
>
<!-- <div class="echarts" ref="typeChartRef"></div> -->
<EChart
:option=
"typeChartOption"
autoresize
:style=
"{ height: '300px', padding: '0 20px' }"
@
chart-click=
"handleToDataLibrary7"
/>
<EChart
:option=
"typeChartOption"
autoresize
:style=
"{ height: '300px', padding: '0 20px' }"
@
chart-click=
"handleToDataLibrary7"
/>
<div
class=
"data-origin-box"
>
<div
class=
"data-origin-icon"
>
<img
:src=
"tipsIcon"
alt=
""
/>
...
...
@@ -245,11 +216,8 @@
<!-- <AiButton />
<AiPane :aiContent="typeChart.interpretation" /> -->
<AiButton
@
mouseenter=
"handleShowAiPane('typeChart')"
/>
<AiPane
v-if=
"aiPaneVisible?.typeChart"
:aiContent=
"overviewAiContent.typeChart"
@
mouseleave=
"handleHideAiPane('typeChart')"
/>
<AiPane
v-if=
"aiPaneVisible?.typeChart"
:aiContent=
"overviewAiContent.typeChart"
@
mouseleave=
"handleHideAiPane('typeChart')"
/>
</div>
</AnalysisBox>
</div>
...
...
@@ -277,6 +245,7 @@ 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"
;
import
{
useChartInterpretation
}
from
"@/views/exportControl/utils/common"
;
import
goToPage
from
"@/utils/goToPage/index"
;
// const sanctionCountChart = useChartInterpretation();
const
domainChart
=
useChartInterpretation
();
const
typeChart
=
useChartInterpretation
();
...
...
@@ -658,11 +627,12 @@ const updateMapChart = () => {
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 route = router.resolve({
// path: "/dataLibrary/dataEntityList",
// query: param
// });
// window.open(route.href, "_blank");
goToPage
.
goToDataEntityList
(
param
)
});
};
...
...
@@ -1047,11 +1017,12 @@ const handleToDataLibrary4 = val => {
?
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 route = router.resolve({
// path: "/dataLibrary/dataEntityList",
// query: params
// });
// window.open(route.href, "_blank");
goToPage
.
goToDataEntityList
(
params
)
};
// 制裁实体各省分布情况
...
...
@@ -1062,11 +1033,12 @@ const handleToDataLibrary5 = item => {
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 route = router.resolve({
// path: "/dataLibrary/dataEntityList",
// query: params
// });
// window.open(route.href, "_blank");
goToPage
.
goToDataEntityList
(
params
)
};
// 制裁实体领域分布情况
...
...
@@ -1077,11 +1049,12 @@ const handleToDataLibrary6 = val => {
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 route = router.resolve({
// path: "/dataLibrary/dataEntityList",
// query: params
// });
// window.open(route.href, "_blank");
goToPage
.
goToDataEntityList
(
params
)
};
// 制裁实体类型分布情况
...
...
@@ -1091,53 +1064,71 @@ const handleToDataLibrary7 = val => {
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"
);
// const route = router.resolve({
// path: "/dataLibrary/dataEntityList",
// query: params
// });
// window.open(route.href, "_blank");
goToPage
.
goToDataEntityList
(
params
)
};
// 跳转到数据资源库
const
handleToDataLibrary
=
()
=>
{
const
route
=
router
.
resolve
({
path
:
"/dataLibrary/dataEntityList"
,
query
:
{
// const route = router.resolve({
// path: "/dataLibrary/dataEntityList",
// query: {
// isCnEntityOnly: true
// }
// });
// window.open(route.href, "_blank");
const
params
=
{
isCnEntityOnly
:
true
}
});
window
.
open
(
route
.
href
,
"_blank"
);
goToPage
.
goToDataEntityList
(
params
)
};
const
handleToDataLibrary1
=
()
=>
{
const
route
=
router
.
resolve
({
path
:
"/dataLibrary/dataEntityList"
,
query
:
{
// const route = router.resolve({
// path: "/dataLibrary/dataEntityList",
// query: {
// isCnEntityOnly: true,
// isHalfRule: true
// }
// });
// window.open(route.href, "_blank");
const
params
=
{
isCnEntityOnly
:
true
,
isHalfRule
:
true
}
});
window
.
open
(
route
.
href
,
"_blank"
);
goToPage
.
goToDataEntityList
(
params
)
};
const
handleToDataLibrary2
=
()
=>
{
const
route
=
router
.
resolve
({
path
:
"/dataLibrary/dataEntityList"
,
query
:
{
// const route = router.resolve({
// path: "/dataLibrary/dataEntityList",
// query: {
// selectedDate: JSON.stringify([currentYear + "01-01", currentYear + "12-31"])
// }
// });
// window.open(route.href, "_blank");
const
params
=
{
selectedDate
:
JSON
.
stringify
([
currentYear
+
"01-01"
,
currentYear
+
"12-31"
])
}
});
window
.
open
(
route
.
href
,
"_blank"
);
goToPage
.
goToDataEntityList
(
params
)
};
const
handleToDataLibrary3
=
time
=>
{
const
route
=
router
.
resolve
({
path
:
"/dataLibrary/dataEntityList"
,
query
:
{
// const route = router.resolve({
// path: "/dataLibrary/dataEntityList",
// query: {
// selectedDate: JSON.stringify([time, time])
// }
// });
// window.open(route.href, "_blank");
const
params
=
{
selectedDate
:
JSON
.
stringify
([
time
,
time
])
}
});
window
.
open
(
route
.
href
,
"_blank"
);
goToPage
.
goToDataEntityList
(
params
)
};
const
requestAiPaneContent
=
async
key
=>
{
...
...
@@ -1308,6 +1299,7 @@ onMounted(() => {
box-shadow
:
0px
0px
20px
0px
rgba
(
25
,
69
,
130
,
0
.1
);
position
:
relative
;
cursor
:
pointer
;
&
:hover
{
background
:
var
(
--
color-primary-2
);
}
...
...
src/views/exportControl/v2.0EntityList/components/sanctionsOverview/components/introductionPage/index.vue
浏览文件 @
0ff5ffb8
...
...
@@ -173,7 +173,7 @@ import { ArrowDown } from "@element-plus/icons-vue";
import
CommonPrompt
from
"../../../../../commonPrompt/index.vue"
;
import
{
getEntityInfo
,
getPublishInfo
,
getPublishOrgInfo
,
getEntityUpdateInfo
}
from
"@/api/exportControlV2.0.js"
;
import
{
useRoute
}
from
"vue-router"
;
import
goToPage
from
"@/utils/goToPage/index"
;
const
route
=
useRoute
();
// 处理点击发布机构的方法
const
handleClickOrg
=
item
=>
{
...
...
@@ -410,11 +410,12 @@ const handleToDataLibrary = item => {
selectedDate
:
JSON
.
stringify
([
item
.
postDate
,
item
.
postDate
])
};
}
const
route
=
router
.
resolve
({
path
:
"/dataLibrary/dataEntityList"
,
query
:
params
});
window
.
open
(
route
.
href
,
"_blank"
);
// const route = router.resolve({
// path: "/dataLibrary/dataEntityList",
// query: params
// });
// window.open(route.href, "_blank");
goToPage
.
goToDataEntityList
(
params
)
};
onMounted
(()
=>
{
...
...
src/views/exportControl/v2.0EntityList/components/sanctionsOverview/components/listPage/index.vue
浏览文件 @
0ff5ffb8
...
...
@@ -192,6 +192,7 @@ import { getExportControlList, get50PercentEntityCount } from "@/api/exportContr
import
CommonPrompt
from
"@/views/exportControl/commonPrompt/index.vue"
;
import
{
useGotoCompanyPages
}
from
"@/router/modules/company"
;
import
TimeSortSelectBox
from
"@/components/base/TimeSortSelectBox/index.vue"
;
import
goToPage
from
"@/utils/goToPage/index"
;
const
gotoCompanyPages
=
useGotoCompanyPages
();
const
router
=
useRouter
();
...
...
@@ -531,22 +532,24 @@ const handlToDataLibrary = () => {
const
params
=
{
isCnEntityOnly
:
true
};
const
route
=
router
.
resolve
({
path
:
"/dataLibrary/dataEntityList"
,
query
:
params
});
window
.
open
(
route
.
href
,
"_blank"
);
// const route = router.resolve({
// path: "/dataLibrary/dataEntityList",
// query: params
// });
// window.open(route.href, "_blank");
goToPage
.
goToDataEntityList
(
params
)
};
const
handlToDataLibrary1
=
()
=>
{
const
params
=
{
isCnEntityOnly
:
true
,
isHalfRule
:
true
};
const
route
=
router
.
resolve
({
path
:
"/dataLibrary/dataEntityList"
,
query
:
params
});
window
.
open
(
route
.
href
,
"_blank"
);
// const route = router.resolve({
// path: "/dataLibrary/dataEntityList",
// query: params
// });
// window.open(route.href, "_blank");
goToPage
.
goToDataEntityList
(
params
)
};
</
script
>
...
...
src/views/exportControl/v2.0SingleSanction/components/dataStatistics/index.vue
浏览文件 @
0ff5ffb8
...
...
@@ -54,12 +54,8 @@
</div>
</div>
</div>
-->
<EChart
:option=
"domainChartOption"
autoresize
:style=
"
{ height: '300px', padding: '0 20px' }"
@chart-click="handleToDataLibrary3"
/>
<EChart
:option=
"domainChartOption"
autoresize
:style=
"
{ height: '300px', padding: '0 20px' }"
@chart-click="handleToDataLibrary3" />
<div
class=
"data-origin-box"
>
<div
class=
"data-origin-icon"
>
<img
:src=
"tipsIcon"
alt=
""
/>
...
...
@@ -70,22 +66,15 @@
<!--
<AiButton
/>
<AiPane
:aiContent=
"domainChart.interpretation"
/>
-->
<AiButton
@
mouseenter=
"handleShowAiPane('domainChart')"
/>
<AiPane
v-if=
"aiPaneVisible?.domainChart"
:aiContent=
"overviewAiContent.domainChart"
@
mouseleave=
"handleHideAiPane('domainChart')"
/>
<AiPane
v-if=
"aiPaneVisible?.domainChart"
:aiContent=
"overviewAiContent.domainChart"
@
mouseleave=
"handleHideAiPane('domainChart')"
/>
</div>
</AnalysisBox>
</div>
<div
class=
"main-item"
>
<AnalysisBox
title=
"制裁实体类型分布情况"
>
<EChart
:option=
"typeChartOption"
autoresize
:style=
"
{ height: '300px', padding: '0 20px' }"
@chart-click="handleToDataLibrary4"
/>
<EChart
:option=
"typeChartOption"
autoresize
:style=
"
{ height: '300px', padding: '0 20px' }"
@chart-click="handleToDataLibrary4" />
<div
class=
"data-origin-box"
>
<div
class=
"data-origin-icon"
>
<img
:src=
"tipsIcon"
alt=
""
/>
...
...
@@ -96,33 +85,23 @@
<!--
<AiButton
/>
<AiPane
:aiContent=
"typeChart.interpretation"
/>
-->
<AiButton
@
mouseenter=
"handleShowAiPane('typeChart')"
/>
<AiPane
v-if=
"aiPaneVisible?.typeChart"
:aiContent=
"overviewAiContent.typeChart"
@
mouseleave=
"handleHideAiPane('typeChart')"
/>
<AiPane
v-if=
"aiPaneVisible?.typeChart"
:aiContent=
"overviewAiContent.typeChart"
@
mouseleave=
"handleHideAiPane('typeChart')"
/>
</div>
</AnalysisBox>
</div>
<div
class=
"main-item"
>
<AnalysisBox
title=
"制裁实体国家地区分布情况"
>
<div
class=
"country-list"
>
<div
class=
"list-item"
v-for=
"(item, index) in countryDistribution"
:key=
"index"
@
click=
"handleToDataLibrary5(item)"
>
<div
class=
"list-item"
v-for=
"(item, index) in countryDistribution"
:key=
"index"
@
click=
"handleToDataLibrary5(item)"
>
<img
:src=
"flag"
alt=
""
class=
"flag"
/>
<div
class=
"country-name"
>
{{
item
.
name
}}
</div>
<div
class=
"progress-bar-container"
>
<div
class=
"progress-bar"
:style=
"
{
<div
class=
"progress-bar"
:style=
"
{
width: item.width,
background: item.gradient
}"
>
</div>
}">
</div>
</div>
<div
class=
"count"
:class=
"
{ highlight: index === 0 }">
{{
item
.
count
}}
家
</div>
</div>
...
...
@@ -137,11 +116,9 @@
<!--
<AiButton
/>
<AiPane
:aiContent=
"countryDistributionChart.interpretation"
/>
-->
<AiButton
@
mouseenter=
"handleShowAiPane('countryDistributionChart')"
/>
<AiPane
v-if=
"aiPaneVisible?.countryDistributionChart"
<AiPane
v-if=
"aiPaneVisible?.countryDistributionChart"
:aiContent=
"overviewAiContent.countryDistributionChart"
@
mouseleave=
"handleHideAiPane('countryDistributionChart')"
/>
@
mouseleave=
"handleHideAiPane('countryDistributionChart')"
/>
</div>
</AnalysisBox>
</div>
...
...
@@ -150,22 +127,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"
@
click=
"handleToDataLibrary6(item)"
>
<div
class=
"rank-item"
v-for=
"(item, index) in regionDistribution"
:key=
"index"
@
click=
"handleToDataLibrary6(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=
"
{
<div
class=
"rank-bar-fill"
:style=
"
{
width: (maxRegionCount > 0 ? (item.count / maxRegionCount) * 100 : 0) + '%',
background: getBarColor(index)
}"
>
</div>
}">
</div>
</div>
<div
class=
"rank-value"
>
{{
item
.
count
}}
家
</div>
</div>
...
...
@@ -181,11 +151,8 @@
<!--
<AiButton
/>
<AiPane
:aiContent=
"regionDistributionChart.interpretation"
/>
-->
<AiButton
@
mouseenter=
"handleShowAiPane('regionDistributionChart')"
/>
<AiPane
v-if=
"aiPaneVisible?.regionDistributionChart"
:aiContent=
"overviewAiContent.regionDistributionChart"
@
mouseleave=
"handleHideAiPane('regionDistributionChart')"
/>
<AiPane
v-if=
"aiPaneVisible?.regionDistributionChart"
:aiContent=
"overviewAiContent.regionDistributionChart"
@
mouseleave=
"handleHideAiPane('regionDistributionChart')"
/>
</div>
</AnalysisBox>
</div>
...
...
@@ -213,7 +180,7 @@ import {
getSingleSanctionEntityRegionCount
}
from
"@/api/exportControlV2.0"
;
import
{
getChartAnalysis
}
from
"@/api/aiAnalysis/index"
;
import
goToPage
from
"@/utils/goToPage/index"
;
import
{
useChartInterpretation
}
from
"@/views/exportControl/utils/common"
;
const
domainChart
=
useChartInterpretation
();
const
typeChart
=
useChartInterpretation
();
...
...
@@ -462,11 +429,12 @@ const initMapChart = () => {
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"
);
// const curRoute = router.resolve({
// path: "/dataLibrary/dataEntityList",
// query: param
// });
// window.open(curRoute.href, "_blank");
goToPage
.
goToDataEntityList
(
param
)
});
window
.
addEventListener
(
"resize"
,
()
=>
{
...
...
@@ -845,11 +813,12 @@ const handleToDataLibrary3 = val => {
isCnEntityOnly
:
true
,
selectedDate
:
JSON
.
stringify
([
route
.
query
.
date
,
route
.
query
.
date
])
};
const
curRoute
=
router
.
resolve
({
path
:
"/dataLibrary/dataEntityList"
,
query
:
params
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
// const curRoute = router.resolve({
// path: "/dataLibrary/dataEntityList",
// query: params
// });
// window.open(curRoute.href, "_blank");
goToPage
.
goToDataEntityList
(
params
)
};
// 制裁实体类型分布情况
...
...
@@ -860,25 +829,28 @@ const handleToDataLibrary4 = val => {
isCnEntityOnly
:
true
,
selectedDate
:
JSON
.
stringify
([
route
.
query
.
date
,
route
.
query
.
date
])
};
const
curRoute
=
router
.
resolve
({
path
:
"/dataLibrary/dataEntityList"
,
query
:
params
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
// const curRoute = router.resolve({
// path: "/dataLibrary/dataEntityList",
// query: params
// });
// window.open(curRoute.href, "_blank");
goToPage
.
goToDataEntityList
(
params
)
};
// 制裁实体国家地区分布情况
const
handleToDataLibrary5
=
item
=>
{
alert
(
item
.
id
)
const
params
=
{
selectedCountryId
:
item
.
id
,
isCnEntityOnly
:
true
,
//
isCnEntityOnly: true,
selectedDate
:
JSON
.
stringify
([
route
.
query
.
date
,
route
.
query
.
date
])
};
const
curRoute
=
router
.
resolve
({
path
:
"/dataLibrary/dataEntityList"
,
query
:
params
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
// const curRoute = router.resolve({
// path: "/dataLibrary/dataEntityList",
// query: params
// });
// window.open(curRoute.href, "_blank");
goToPage
.
goToDataEntityList
(
params
)
};
// 制裁实体各省分布情况
...
...
@@ -889,49 +861,66 @@ const handleToDataLibrary6 = item => {
isCnEntityOnly
:
true
,
selectedDate
:
JSON
.
stringify
([
route
.
query
.
date
,
route
.
query
.
date
])
};
const
curRoute
=
router
.
resolve
({
path
:
"/dataLibrary/dataEntityList"
,
query
:
params
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
// const curRoute = router.resolve({
// path: "/dataLibrary/dataEntityList",
// query: params
// });
// window.open(curRoute.href, "_blank");
goToPage
.
goToDataEntityList
(
params
)
};
// 跳转到数据资源库
const
handleToDataLibrary
=
()
=>
{
const
dateStr
=
route
.
query
.
date
?
route
.
query
.
date
:
""
;
const
curRoute
=
router
.
resolve
({
path
:
"/dataLibrary/dataEntityList"
,
query
:
{
// const curRoute = router.resolve({
// path: "/dataLibrary/dataEntityList",
// query: {
// isCnEntityOnly: true,
// selectedDate: JSON.stringify([dateStr, dateStr])
// }
// });
// window.open(curRoute.href, "_blank");
const
params
=
{
isCnEntityOnly
:
true
,
selectedDate
:
JSON
.
stringify
([
dateStr
,
dateStr
])
}
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
goToPage
.
goToDataEntityList
(
params
)
};
const
handleToDataLibrary1
=
()
=>
{
const
dateStr
=
route
.
query
.
date
?
route
.
query
.
date
:
""
;
const
curRoute
=
router
.
resolve
({
path
:
"/dataLibrary/dataEntityList"
,
query
:
{
// const curRoute = router.resolve({
// path: "/dataLibrary/dataEntityList",
// query: {
// isCnEntityOnly: true,
// isHalfRule: true,
// selectedDate: JSON.stringify([dateStr, dateStr])
// }
// });
// window.open(curRoute.href, "_blank");
const
params
=
{
isCnEntityOnly
:
true
,
isHalfRule
:
true
,
selectedDate
:
JSON
.
stringify
([
dateStr
,
dateStr
])
}
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
goToPage
.
goToDataEntityList
(
params
)
};
const
handleToDataLibrary2
=
()
=>
{
const
dateStr
=
route
.
query
.
date
?
route
.
query
.
date
:
""
;
const
curRoute
=
router
.
resolve
({
path
:
"/dataLibrary/dataEntityList"
,
query
:
{
// const curRoute = router.resolve({
// path: "/dataLibrary/dataEntityList",
// query: {
// isCnEntityOnly: true,
// selectedDate: JSON.stringify([dateStr, dateStr])
// }
// });
// window.open(curRoute.href, "_blank");
const
params
=
{
isCnEntityOnly
:
true
,
selectedDate
:
JSON
.
stringify
([
dateStr
,
dateStr
])
}
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
goToPage
.
goToDataEntityList
(
params
)
};
const
requestAiPaneContent
=
async
key
=>
{
...
...
@@ -1151,6 +1140,7 @@ onMounted(() => {
.number
{
display
:
flex
;
align-items
:
baseline
;
&
:hover
{
text-decoration
:
underline
;
text-decoration-color
:
#cd4246
;
...
...
src/views/exportControl/v2.0SingleSanction/components/sanctionsOverview/index.vue
浏览文件 @
0ff5ffb8
...
...
@@ -243,7 +243,7 @@ import {
}
from
"@/api/exportControlV2.0"
;
import
RuleSubsidiaryDialog
from
"../../../v2.0EntityList/components/sanctionsOverview/components/listPage/RuleSubsidiaryDialog.vue"
;
import
{
useRoute
}
from
"vue-router"
;
import
goToPage
from
"@/utils/goToPage/index"
;
import
{
useGotoCompanyPages
}
from
"@/router/modules/company"
;
const
gotoCompanyPages
=
useGotoCompanyPages
();
...
...
@@ -570,14 +570,19 @@ const handleToDataLibrary = item => {
(
_
,
y
,
m
,
d
)
=>
`
${
y
}
-
${
m
.
padStart
(
2
,
"0"
)}
-
${
d
.
padStart
(
2
,
"0"
)}
`
);
const
route
=
router
.
resolve
({
path
:
"/dataLibrary/dataEntityList"
,
query
:
{
// const route = router.resolve({
// path: "/dataLibrary/dataEntityList",
// query: {
// selectedDate: JSON.stringify([dateStr, dateStr]),
// selectedCountryId: item.id
// }
// });
// window.open(route.href, "_blank");
const
params
=
{
selectedDate
:
JSON
.
stringify
([
dateStr
,
dateStr
]),
selectedCountryId
:
item
.
id
}
});
window
.
open
(
route
.
href
,
"_blank"
);
goToPage
.
goToDataEntityList
(
params
)
};
onMounted
(()
=>
{
...
...
src/views/finance/entityList/components/dataStatistics/index.vue
浏览文件 @
0ff5ffb8
...
...
@@ -104,7 +104,8 @@
</div>
</div>
</
template
>
<EChart
:option=
"sanctionCountChartOption"
autoresize
:style=
"{ height: '300px', padding: '0 20px' }"
@
chart-click=
"handleToDataLibrary4"
/>
<EChart
:option=
"sanctionCountChartOption"
autoresize
:style=
"{ height: '300px', padding: '0 20px' }"
@
chart-click=
"handleToDataLibrary4"
/>
<div
class=
"data-origin-box"
>
<div
class=
"data-origin-icon"
>
...
...
@@ -165,7 +166,8 @@
<el-option
v-for=
"item in timeOptions"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
/>
</el-select>
</
template
>
<EChart
:option=
"domainChartOption"
autoresize
:style=
"{ height: '300px', padding: '0 20px' }"
@
chart-click=
"handleToDataLibrary6"
/>
<EChart
:option=
"domainChartOption"
autoresize
:style=
"{ height: '300px', padding: '0 20px' }"
@
chart-click=
"handleToDataLibrary6"
/>
<div
class=
"data-origin-box"
>
<div
class=
"data-origin-icon"
>
...
...
@@ -199,7 +201,8 @@
</div>
</div>
</
template
>
<EChart
:option=
"domainNumChartOption"
autoresize
:style=
"{ height: '300px', padding: '0 20px' }"
@
chart-click=
"handleToDataLibrary5"
/>
<EChart
:option=
"domainNumChartOption"
autoresize
:style=
"{ height: '300px', padding: '0 20px' }"
@
chart-click=
"handleToDataLibrary5"
/>
<div
class=
"data-origin-box"
>
<div
class=
"data-origin-icon"
>
...
...
@@ -223,7 +226,8 @@
</el-select>
</
template
>
<!-- <div class="echarts" ref="typeChartRef"></div> -->
<EChart
:option=
"typeChartOption"
autoresize
:style=
"{ height: '300px', padding: '0 20px' }"
@
chart-click=
"handleToDataLibrary7"
/>
<EChart
:option=
"typeChartOption"
autoresize
:style=
"{ height: '300px', padding: '0 20px' }"
@
chart-click=
"handleToDataLibrary7"
/>
<!-- <div class="bottom">
<div class="ai">
<div class="left">
...
...
@@ -275,6 +279,7 @@ 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"
;
import
{
useChartInterpretation
}
from
"@/views/exportControl/utils/common"
;
import
goToPage
from
"@/utils/goToPage/index"
;
const
sanctionCountChart
=
useChartInterpretation
();
const
domainChart
=
useChartInterpretation
();
const
domainNumChart
=
useChartInterpretation
();
...
...
@@ -1352,11 +1357,12 @@ const handleToDataLibrary6 = val => {
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 route = router.resolve({
// path: "/dataLibrary/dataEntityList",
// query: params
// });
// window.open(route.href, "_blank");
goToPage
.
goToDataEntityList
(
params
)
};
// 制裁实体类型分布情况
...
...
@@ -1367,11 +1373,12 @@ const handleToDataLibrary7 = val => {
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"
);
// const route = router.resolve({
// path: "/dataLibrary/dataEntityList",
// query: params
// });
// window.open(route.href, "_blank");
goToPage
.
goToDataEntityList
(
params
)
}
onMounted
(()
=>
{
...
...
@@ -1837,6 +1844,7 @@ onMounted(() => {
right
:
0px
;
bottom
:
15px
;
z-index
:
999
;
:deep
(
.ai-pane-wrapper
)
{
display
:
none
;
}
...
...
src/views/home/index.vue
浏览文件 @
0ff5ffb8
...
...
@@ -66,18 +66,7 @@ import { getPersonType } from "@/api/common/index";
// import { useDraggable } from "@vueuse/core";
import
ModuleHeader
from
'@/components/base/moduleHeader/index.vue'
import
Menu1
from
"@/assets/icons/overview/menu1.png"
;
import
Menu2
from
"@/assets/icons/overview/menu2.png"
;
import
Menu3
from
"@/assets/icons/overview/menu3.png"
;
import
Menu4
from
"@/assets/icons/overview/menu4.png"
;
import
Menu5
from
"@/assets/icons/overview/menu5.png"
;
import
Menu6
from
"@/assets/icons/overview/menu6.png"
;
import
Menu7
from
"@/assets/icons/overview/menu7.png"
;
import
Menu8
from
"@/assets/icons/overview/menu8.png"
;
import
Menu9
from
"@/assets/icons/overview/menu9.png"
;
import
Menu10
from
"@/assets/icons/overview/menu10.png"
;
import
Menu11
from
"@/assets/icons/overview/menu11.png"
;
import
Menu12
from
"@/assets/icons/overview/menu12.png"
;
import
{
ElMessage
}
from
"element-plus"
;
const
router
=
useRouter
();
...
...
@@ -117,115 +106,6 @@ const handleGetPersonType = async () => {
}
catch
(
error
)
{
}
};
const
isCurrentOverview
=
computed
(()
=>
{
if
(
route
.
path
===
"/ZMOverView"
)
{
return
true
;
}
else
{
return
false
;
}
});
const
isShowMenu
=
ref
(
false
);
const
handleShowMenu
=
(
index
,
isShow
)
=>
{
if
(
index
===
0
)
{
isShowMenu
.
value
=
isShow
;
}
};
const
handleHoverMenu
=
isShow
=>
{
isShowMenu
.
value
=
isShow
;
};
const
menuList
=
ref
([
{
title
:
"中美科技博弈概览"
,
icon
:
Menu1
,
path
:
"/ZMOverView"
},
{
title
:
"科技法案"
,
icon
:
Menu2
,
path
:
"/billHome"
},
{
title
:
"科技政令"
,
icon
:
Menu3
,
path
:
"/decree"
},
{
title
:
"美国科技智库"
,
icon
:
Menu4
,
path
:
"/thinkTank"
},
{
title
:
"出口管制"
,
icon
:
Menu5
,
path
:
"/exportControl"
},
{
title
:
"科研合作限制"
,
icon
:
Menu6
,
path
:
"/cooperationRestrictions"
},
{
title
:
"投融资限制"
,
icon
:
Menu7
,
path
:
"/finance"
},
{
title
:
"市场准入限制"
,
icon
:
Menu8
,
path
:
"/marketAccessRestrictions"
},
{
title
:
"规则限制"
,
icon
:
Menu9
,
path
:
"/ruleRestrictions"
},
{
title
:
"美国科技人物观点"
,
icon
:
Menu10
,
path
:
"/technologyFigures"
},
{
title
:
"美国主要创新主体动向"
,
icon
:
Menu11
,
path
:
"/innovationSubject"
},
{
title
:
"美国科研资助体系"
,
icon
:
Menu12
,
path
:
"/scientificFunding"
}
]);
const
handleToModule
=
item
=>
{
const
curRoute
=
router
.
resolve
({
path
:
item
.
path
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
};
const
searchText
=
ref
(
""
);
const
handleSearch
=
()
=>
{
const
curRoute
=
router
.
resolve
({
path
:
"/searchResults"
,
query
:
{
searchText
:
searchText
.
value
}
});
window
.
open
(
curRoute
.
href
,
"_blank"
);
};
const
handleClickTitle
=
item
=>
{
if
(
item
.
name
===
"主要国家科技动向感知"
||
item
.
name
===
"主要国家竞争科技安全"
)
{
ElMessage
.
warning
(
"当前功能正在开发中,敬请期待!"
);
}
};
const
handleOpenPage
=
page
=>
{
const
pageObj
=
{
znwd
:
"/chat"
,
...
...
src/views/thinkTank/ThinkTankDetail/PolicyTracking/index.vue
浏览文件 @
0ff5ffb8
...
...
@@ -293,10 +293,10 @@ import defaultNewsIcon from "@/assets/icons/default-icon-news.png";
import
AreaTag
from
"@/components/base/AreaTag/index.vue"
;
import
{
useRouter
}
from
"vue-router"
;
import
{
getDecodedParams
}
from
"@/utils/goToPage"
;
import
goToPage
from
"@/utils/goToPage"
;
const
router
=
useRouter
();
const
thinkTankId
=
computed
(()
=>
getDecodedParams
());
const
thinkTankId
=
computed
(()
=>
g
oToPage
.
g
etDecodedParams
());
const
loading
=
ref
(
false
);
const
pageScrollRef
=
ref
(
null
);
...
...
src/views/thinkTank/ThinkTankDetail/index.vue
浏览文件 @
0ff5ffb8
...
...
@@ -64,7 +64,7 @@ import PolicyTracking from "./PolicyTracking/index.vue";
import
ThinkInfo
from
"./thinkInfo/index.vue"
;
import
{
getThinkTankSummary
}
from
"@/api/thinkTank/overview"
;
import
{
useRouter
}
from
"vue-router"
;
import
{
getDecodedParams
}
from
"@/utils/goToPage"
;
import
goToPage
from
"@/utils/goToPage"
;
const
router
=
useRouter
();
const
tabActiveName
=
ref
(
"智库动态"
);
...
...
@@ -75,7 +75,7 @@ const switchTab = name => {
const
thinkTank
=
ref
({});
// 获取智库基本信息
const
handleGetThinkTankSummary
=
async
()
=>
{
const
id
=
getDecodedParams
()
const
id
=
g
oToPage
.
g
etDecodedParams
()
try
{
const
parmas
=
{
...
...
src/views/thinkTank/ThinkTankDetail/thinkDynamics/index.vue
浏览文件 @
0ff5ffb8
...
...
@@ -78,11 +78,11 @@ import {
getResourceLibraryReportDateRangeFromTimeSelection
}
from
"../../utils/resourceLibraryFilters"
;
import
{
useRouter
}
from
"vue-router"
;
import
{
getDecodedParams
}
from
"@/utils/goToPage"
;
import
ThinkTankReport
from
"./ThinkTankReport/index.vue"
;
import
CongressHearing
from
"./CongressHearing/index.vue"
;
import
goToPage
from
"@/utils/goToPage"
;
const
router
=
useRouter
();
const
thinkTankId
=
computed
(()
=>
getDecodedParams
());
const
thinkTankId
=
computed
(()
=>
g
oToPage
.
g
etDecodedParams
());
const
isThinkTankReport
=
ref
(
true
);
const
isSurveyForm
=
ref
(
false
);
const
isCongressHearing
=
ref
(
false
);
...
...
src/views/thinkTank/ThinkTankDetail/thinkInfo/index.vue
浏览文件 @
0ff5ffb8
...
...
@@ -259,7 +259,6 @@ import { ref, onMounted, nextTick, computed } from "vue";
import
setChart
from
"@/utils/setChart"
;
import
getPieChart
from
"./utils/piechart"
;
import
getTreeMapChart
from
"./utils/treeMapChart"
;
import
{
getDecodedParams
}
from
"@/utils/goToPage"
;
import
{
getThinkTankInfoBasic
,
getThinkTankInfoBranch
,
...
...
@@ -273,9 +272,10 @@ import { useRouter } from "vue-router";
import
DefaultIcon1
from
'@/assets/icons/default-icon1.png'
import
{
getPersonSummaryInfo
}
from
"@/api/common/index"
;
import
goToPage
from
"@/utils/goToPage"
;
const
totalPersonNumber
=
ref
(
0
)
const
router
=
useRouter
();
const
thinkTankId
=
getDecodedParams
();
const
thinkTankId
=
g
oToPage
.
g
etDecodedParams
();
import
InfoImg
from
"./images/img.png"
;
import
Icon1
from
"./images/icon1.png"
;
import
Icon2
from
"./images/icon2.png"
;
...
...
src/views/thinkTank/index.vue
浏览文件 @
0ff5ffb8
...
...
@@ -504,7 +504,7 @@ import { setCanvasCreator } from "echarts/core";
import
{
ElMessage
}
from
"element-plus"
;
import
{
useRouter
}
from
'vue-router'
;
import
{
useGotoNewsDetail
}
from
'@/router/modules/news'
;
import
{
goToThinkTank
}
from
"@/utils/goToPage"
;
import
{
goToThinkTank
}
from
"@/utils/goToPage
1
"
;
const
gotoNewsDetail
=
useGotoNewsDetail
()
const
containerRef
=
ref
(
null
);
const
isRiskDetailVisible
=
ref
(
false
);
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论