提交 b7c76f73 authored 作者: 朱政's avatar 朱政

Merge branch 'pre' into zz-dev

流水线 #634 已通过 于阶段
in 1 分 51 秒
......@@ -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
......
......@@ -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)
......
......@@ -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(() => {
......
......@@ -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: true
isShowHeader: false
},
children: [
...dataRoutes
......@@ -149,6 +150,7 @@ const router = createRouter({
router.beforeEach((to, from, next) => {
// 在每次路由跳转开始前,取消上一个页面所有未完成的请求
// 这能防止旧页面的数据回来覆盖新页面,也能减少服务器压力
cancelAllMainRequests();
cancelAllRequests();
if (import.meta.env.DEV) {
clearTokenIfNewDevBoot();
......
// 解码
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
......@@ -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)
goToPage.goToDataDecree(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);
goToPage.goToDataThinkTank(selectParam);
return
} else if (selectParam.key === 2) {
selectParam.domains = params.name
goToDataThinkTank(selectParam);
goToPage.goToDataThinkTank(selectParam);
return
}
}
......
......@@ -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";
......
......@@ -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 = goToPage.getDecodedParams()
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)
};
// 导出
......
......@@ -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 = goToPage.getDecodedParams()
const hasQuery = Object.keys(routeQuery).length > 0;
if (hasQuery) {
if (routeQuery.selectedAreaList) {
......
......@@ -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;
......
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论