Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
risk-monitor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
1
合并请求
1
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蔡建
risk-monitor
Commits
b7c76f73
提交
b7c76f73
authored
4月 23, 2026
作者:
朱政
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'pre' into zz-dev
上级
d8686493
2f4fb449
流水线
#634
已通过 于阶段
in 1 分 51 秒
变更
29
流水线
1
全部展开
显示空白字符变更
内嵌
并排
正在显示
29 个修改的文件
包含
133 行增加
和
33 行删除
+133
-33
index.js
src/api/finance/index.js
+10
-0
request.js
src/api/request.js
+26
-0
index.vue
src/components/base/moduleHeader/index.vue
+6
-4
index.js
src/router/index.js
+3
-1
getDecode.js
src/utils/goToPage/methods/getDecode.js
+31
-0
setChart.js
src/utils/setChart.js
+4
-4
index.vue
...omponents/fourSuppress/components/allGovernment/index.vue
+4
-2
index.vue
src/views/dataLibrary/bill/countryBill/index.vue
+23
-21
index.vue
src/views/dataLibrary/decree/index.vue
+2
-1
index.vue
src/views/dataLibrary/index.vue
+24
-0
index-back.vue
src/views/exportControl/index-back.vue
+0
-0
index.vue
src/views/exportControl/index.vue
+0
-0
index.vue
...ontrol/v2.0EntityList/components/dataStatistics/index.vue
+0
-0
index.vue
...ortControl/v2.0EntityList/components/deepMining/index.vue
+0
-0
index.vue
...s/sanctionsOverview/components/introductionPage/index.vue
+0
-0
index.vue
...omponents/sanctionsOverview/components/listPage/index.vue
+0
-0
index.vue
...ol/v2.0SingleSanction/components/dataStatistics/index.vue
+0
-0
index.vue
...ontrol/v2.0SingleSanction/components/deepMining/index.vue
+0
-0
index.vue
...ents/impactAnalysis/components/industrialImpact/index.vue
+0
-0
icon-pd.png
src/views/finance/assets/icons/icon-pd.png
+0
-0
icon-radar.png
src/views/finance/assets/icons/icon-radar.png
+0
-0
icon-sanction.png
src/views/finance/assets/icons/icon-sanction.png
+0
-0
icon-zc.png
src/views/finance/assets/icons/icon-zc.png
+0
-0
title.vue
src/views/finance/components/title.vue
+0
-0
index.vue
src/views/finance/entityList/components/deepMining/index.vue
+0
-0
index.vue
...s/sanctionsOverview/components/introductionPage/index.vue
+0
-0
index.vue
...omponents/sanctionsOverview/components/listPage/index.vue
+0
-0
index.vue
...finance/entityList/components/sanctionsOverview/index.vue
+0
-0
index.vue
src/views/finance/index.vue
+0
-0
没有找到文件。
src/api/finance/index.js
浏览文件 @
b7c76f73
...
...
@@ -137,6 +137,16 @@ export function getReasonAndSan(sanRecordId) {
return
http
.
get
(
`/api/sanctionList/invFin/getReasonAndSan?sanRecordId=
${
sanRecordId
}
`
);
}
/**
* 分页查询制裁实体清单
* url:/sanctionList/pageQuery
*/
export
function
getEntitiesList
(
params
)
{
return
http
.
post
(
"/api/sanctionList/pageQuery"
,
params
);
}
/**
* 制裁历程
* url:/entitiesDataCount/getSanRecord
...
...
src/api/request.js
浏览文件 @
b7c76f73
...
...
@@ -8,6 +8,28 @@ import {
// Token管理
const
TOKEN_KEY
=
'auth_token'
// 定义全局控制器,以便在取消后重新赋值
let
currentMainAbortController
=
new
AbortController
()
/**
* 获取当前有效的 AbortSignal
* 供 axios 拦截器和 fetch 请求共同使用
*/
export
const
getMainAbortSignal
=
()
=>
{
return
currentMainAbortController
.
signal
}
/**
* 取消所有正在进行的请求
* 路由守卫中调用此方法
*/
export
const
cancelAllMainRequests
=
()
=>
{
// 1. 终止当前控制器的所有请求
currentMainAbortController
.
abort
()
// 2. 创建一个新的控制器,供后续新请求使用
currentMainAbortController
=
new
AbortController
()
}
// ===== 兼容导出(勿删):历史代码仍会 import formatBearerAuthorization =====
// 说明:当前线上版本后端用 `token` 头,不用 Authorization;但为了不影响其它模块编译/运行,这里保留该方法导出。
const
formatBearerAuthorization
=
(
raw
)
=>
{
...
...
@@ -70,6 +92,10 @@ service.interceptors.request.use(config => {
config
.
headers
[
'X-API-Key'
]
=
aiApiKey
}
}
if
(
!
config
.
signal
)
{
config
.
signal
=
getMainAbortSignal
()
}
return
config
},
error
=>
{
console
.
log
(
error
)
...
...
src/components/base/moduleHeader/index.vue
浏览文件 @
b7c76f73
...
...
@@ -180,11 +180,13 @@ const homeTitleList = computed(() => {
disabled
:
false
}]
if
(
route
.
path
.
includes
(
'/dataLibrary'
))
{
return
dataLibraryTitleList
}
else
{
// if (route.path.includes('/dataLibrary')) {
// return dataLibraryTitleList
// } else {
// return mainTitleList
// }
return
mainTitleList
}
});
const
homeActiveTitleIndex
=
computed
(()
=>
{
...
...
src/router/index.js
浏览文件 @
b7c76f73
...
...
@@ -3,6 +3,7 @@ import { setToken, removeToken, getToken } from "@/api/request.js";
import
{
AUTH_LOGOUT_CHANNEL
}
from
"@/utils/authCrossTabLogout.js"
;
import
{
cancelAllRequests
}
from
"@/api/finance/service.js"
import
{
cancelAllMainRequests
}
from
"@/api/request.js"
/** localStorage:跨标签页记录当前前端的 bootId(与 vite define 的 __APP_BOOT_ID__ 对齐) */
const
VITE_BOOT_STORAGE_KEY
=
"app_vite_boot_id"
;
...
...
@@ -112,7 +113,7 @@ const routes = [
component
:
DataLibrary
,
meta
:
{
title
:
'数据资源库'
,
isShowHeader
:
tru
e
isShowHeader
:
fals
e
},
children
:
[
...
dataRoutes
...
...
@@ -149,6 +150,7 @@ const router = createRouter({
router
.
beforeEach
((
to
,
from
,
next
)
=>
{
// 在每次路由跳转开始前,取消上一个页面所有未完成的请求
// 这能防止旧页面的数据回来覆盖新页面,也能减少服务器压力
cancelAllMainRequests
();
cancelAllRequests
();
if
(
import
.
meta
.
env
.
DEV
)
{
clearTokenIfNewDevBoot
();
...
...
src/utils/goToPage/methods/getDecode.js
0 → 100644
浏览文件 @
b7c76f73
// 解码
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
;
}
}
}
\ No newline at end of file
src/utils/setChart.js
浏览文件 @
b7c76f73
...
...
@@ -4,7 +4,7 @@ import getQuarterRange from './getQuarterRange';
import
*
as
echarts
from
'echarts'
import
'echarts-wordcloud'
;
import
router
from
'@/router/index'
import
{
goToDataCountryBill
,
goToDataDecree
,
goToDataThinkTank
}
from
'./goToPage'
;
//
import { goToDataCountryBill, goToDataDecree, goToDataThinkTank } from './goToPage';
import
goToPage
from
'./goToPage/index'
;
const
setChart
=
(
option
,
chartId
,
allowClick
,
selectParam
,
otherAreaList
)
=>
{
let
chartDom
=
document
.
getElementById
(
chartId
);
...
...
@@ -97,7 +97,7 @@ const setChart = (option, chartId, allowClick, selectParam, otherAreaList) => {
// });
// window.open(route.href, "_blank");
}
goToDataDecree
(
selectParam
)
goTo
Page
.
goTo
DataDecree
(
selectParam
)
break
case
'科技智库报告'
:
...
...
@@ -106,11 +106,11 @@ const setChart = (option, chartId, allowClick, selectParam, otherAreaList) => {
const
year
=
params
.
name
.
slice
(
0
,
4
)
const
quatarNum
=
Number
(
params
.
name
[
params
.
name
.
length
-
1
])
selectParam
.
selectedDate
=
JSON
.
stringify
(
getQuarterRange
(
year
,
quatarNum
))
goToDataThinkTank
(
selectParam
);
goTo
Page
.
goTo
DataThinkTank
(
selectParam
);
return
}
else
if
(
selectParam
.
key
===
2
)
{
selectParam
.
domains
=
params
.
name
goToDataThinkTank
(
selectParam
);
goTo
Page
.
goTo
DataThinkTank
(
selectParam
);
return
}
}
...
...
src/views/ZMOverView/components/fourSuppress/components/allGovernment/index.vue
浏览文件 @
b7c76f73
...
...
@@ -117,9 +117,10 @@
</div>
</el-tooltip>
<div
class=
"dynamic-item-tags"
>
<span
v-for=
"(tag, tIndex) in item.tags"
:key=
"tIndex"
class=
"tag"
:class=
"getTagClass(tag)"
>
<
!--
<
span
v-for=
"(tag, tIndex) in item.tags"
:key=
"tIndex"
class=
"tag"
:class=
"getTagClass(tag)"
>
{{
tag
}}
</span>
</span>
-->
<AreaTag
v-for=
"(tag, tIndex) in item.tags"
:key=
"tIndex"
:tagName=
"tag"
/>
</div>
</div>
</div>
...
...
@@ -278,6 +279,7 @@ import { onMounted, ref, computed, inject, watch, onUnmounted } from "vue";
import
{
useRouter
}
from
"vue-router"
;
import
Echarts
from
"@/components/Chart/index.vue"
;
import
SimplePagination
from
"@/components/SimplePagination.vue"
;
import
AreaTag
from
"@/components/base/AreaTag/index.vue"
;
import
*
as
echarts
from
"echarts"
;
import
defaultIcon
from
"../../assets/defaultIcon.png"
;
import
leftBtn
from
"../../assets/left-btn.png"
;
...
...
src/views/dataLibrary/bill/countryBill/index.vue
浏览文件 @
b7c76f73
...
...
@@ -174,6 +174,7 @@ 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
();
...
...
@@ -1152,7 +1153,7 @@ const handleDownloadCurChartData = () => {
// 跳转到当前页 初始化筛选条件
const
initParam
=
()
=>
{
const
routeQuery
=
getDecodedParams
()
const
routeQuery
=
g
oToPage
.
g
etDecodedParams
()
console
.
log
(
'routeQuery'
,
routeQuery
);
const
hasQuery
=
Object
.
keys
(
routeQuery
).
length
>
0
;
...
...
@@ -1213,30 +1214,31 @@ const initParam = () => {
// 跳转法案详情
const
handleClickToDetail
=
(
curBill
)
=>
{
console
.
log
(
'curBill'
,
curBill
);
window
.
sessionStorage
.
setItem
(
"billId"
,
curBill
.
id
);
window
.
sessionStorage
.
setItem
(
"curTabName"
,
curBill
.
title
);
const
route
=
router
.
resolve
({
path
:
"/billLayout"
,
query
:
{
billId
:
curBill
.
id
}
}
);
window
.
open
(
route
.
href
,
"_blank"
);
//
console.log('curBill', curBill);
// window.sessionStorage.setItem("billId", curBill.id);
// window.sessionStorage.setItem("curTabName", curBill.title
);
// const route = router.resolve(
{
// path: "/billLayout",
// query:
{
// billId: curBill.id
//
}
//
}
);
// window.open(route.href, "_blank"
);
goToPage
.
goToBill
(
curBill
.
id
,
curBill
.
title
)
}
;
// 跳转人物详情
const
handlePerClick
=
item
=>
{
window
.
sessionStorage
.
setItem
(
"curTabName"
,
item
.
sponsorPersonName
);
const
route
=
router
.
resolve
({
path
:
"/characterPage"
,
query
:
{
type
:
2
,
personId
:
item
.
personId
}
}
);
window
.
open
(
route
.
href
,
"_blank"
);
// window.sessionStorage.setItem("curTabName", item.sponsorPersonName);
// const route = router.resolve(
{
// path: "/characterPage",
// query:
{
// type: 2,
// personId: item.personId
//
}
//
}
);
// window.open(route.href, "_blank");
goToPage
.
goToCharacterPage
(
item
.
personId
,
item
.
sponsorPersonName
)
}
;
// 导出
...
...
src/views/dataLibrary/decree/index.vue
浏览文件 @
b7c76f73
...
...
@@ -187,6 +187,7 @@ 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
();
...
...
@@ -976,7 +977,7 @@ const handleDownloadCurChartData = () => {
// 跳转到当前页 初始化筛选条件
const
initParam
=
()
=>
{
const
routeQuery
=
getDecodedParams
()
const
routeQuery
=
g
oToPage
.
g
etDecodedParams
()
const
hasQuery
=
Object
.
keys
(
routeQuery
).
length
>
0
;
if
(
hasQuery
)
{
if
(
routeQuery
.
selectedAreaList
)
{
...
...
src/views/dataLibrary/index.vue
浏览文件 @
b7c76f73
...
...
@@ -2,6 +2,12 @@
<div
class=
"data-library-wrapper"
>
<div
class=
"data-library-main"
>
<div
class=
"data-library-sider"
>
<div
class=
"sider-header"
>
<div
class=
"logo"
>
<img
src=
"@/assets/icons/overview/logo.png"
alt=
""
>
</div>
<div
class=
"title text-title-1-show"
>
{{
'数据资源库'
}}
</div>
</div>
<div
class=
"sider-item-box"
v-for=
"(item, index) in siderList"
:key=
"index"
>
<div
class=
"sider-item"
@
click=
"handleSiderItem(item)"
>
<div
class=
"sider-icon"
>
...
...
@@ -626,6 +632,24 @@ onBeforeUnmount(() => {
width
:
320px
;
background
:
rgb
(
255
,
255
,
255
);
border-right
:
1px
solid
rgba
(
234
,
236
,
238
,
1
);
.sider-header
{
height
:
64px
;
display
:
flex
;
gap
:
23px
;
align-items
:
center
;
.logo
{
margin-left
:
24px
;
width
:
30px
;
height
:
30px
;
img
{
width
:
100%
;
height
:
100%
;
}
}
.title
{
color
:
var
(
--
color-primary-100
);
}
}
.sider-item
{
height
:
54px
;
...
...
src/views/exportControl/index-back.vue
0 → 100644
浏览文件 @
b7c76f73
差异被折叠。
点击展开。
src/views/exportControl/index.vue
浏览文件 @
b7c76f73
差异被折叠。
点击展开。
src/views/exportControl/v2.0EntityList/components/dataStatistics/index.vue
浏览文件 @
b7c76f73
差异被折叠。
点击展开。
src/views/exportControl/v2.0EntityList/components/deepMining/index.vue
浏览文件 @
b7c76f73
差异被折叠。
点击展开。
src/views/exportControl/v2.0EntityList/components/sanctionsOverview/components/introductionPage/index.vue
浏览文件 @
b7c76f73
差异被折叠。
点击展开。
src/views/exportControl/v2.0EntityList/components/sanctionsOverview/components/listPage/index.vue
浏览文件 @
b7c76f73
差异被折叠。
点击展开。
src/views/exportControl/v2.0SingleSanction/components/dataStatistics/index.vue
浏览文件 @
b7c76f73
差异被折叠。
点击展开。
src/views/exportControl/v2.0SingleSanction/components/deepMining/index.vue
浏览文件 @
b7c76f73
差异被折叠。
点击展开。
src/views/exportControl/v2.0SingleSanction/components/impactAnalysis/components/industrialImpact/index.vue
浏览文件 @
b7c76f73
差异被折叠。
点击展开。
src/views/finance/assets/icons/icon-pd.png
0 → 100644
浏览文件 @
b7c76f73
差异被折叠。
点击展开。
src/views/finance/assets/icons/icon-radar.png
0 → 100644
浏览文件 @
b7c76f73
差异被折叠。
点击展开。
src/views/finance/assets/icons/icon-sanction.png
0 → 100644
浏览文件 @
b7c76f73
差异被折叠。
点击展开。
src/views/finance/assets/icons/icon-zc.png
0 → 100644
浏览文件 @
b7c76f73
差异被折叠。
点击展开。
src/views/finance/components/title.vue
浏览文件 @
b7c76f73
差异被折叠。
点击展开。
src/views/finance/entityList/components/deepMining/index.vue
浏览文件 @
b7c76f73
差异被折叠。
点击展开。
src/views/finance/entityList/components/sanctionsOverview/components/introductionPage/index.vue
浏览文件 @
b7c76f73
差异被折叠。
点击展开。
src/views/finance/entityList/components/sanctionsOverview/components/listPage/index.vue
浏览文件 @
b7c76f73
差异被折叠。
点击展开。
src/views/finance/entityList/components/sanctionsOverview/index.vue
浏览文件 @
b7c76f73
差异被折叠。
点击展开。
src/views/finance/index.vue
浏览文件 @
b7c76f73
差异被折叠。
点击展开。
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论