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

Merge branch 'pre' into zz-dev

流水线 #634 已通过 于阶段
in 1 分 51 秒
...@@ -137,6 +137,16 @@ export function getReasonAndSan(sanRecordId) { ...@@ -137,6 +137,16 @@ export function getReasonAndSan(sanRecordId) {
return http.get(`/api/sanctionList/invFin/getReasonAndSan?sanRecordId=${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 * url:/entitiesDataCount/getSanRecord
......
...@@ -8,6 +8,28 @@ import { ...@@ -8,6 +8,28 @@ import {
// Token管理 // Token管理
const TOKEN_KEY = 'auth_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 ===== // ===== 兼容导出(勿删):历史代码仍会 import formatBearerAuthorization =====
// 说明:当前线上版本后端用 `token` 头,不用 Authorization;但为了不影响其它模块编译/运行,这里保留该方法导出。 // 说明:当前线上版本后端用 `token` 头,不用 Authorization;但为了不影响其它模块编译/运行,这里保留该方法导出。
const formatBearerAuthorization = (raw) => { const formatBearerAuthorization = (raw) => {
...@@ -70,6 +92,10 @@ service.interceptors.request.use(config => { ...@@ -70,6 +92,10 @@ service.interceptors.request.use(config => {
config.headers['X-API-Key'] = aiApiKey config.headers['X-API-Key'] = aiApiKey
} }
} }
if (!config.signal) {
config.signal = getMainAbortSignal()
}
return config return config
}, error => { }, error => {
console.log(error) console.log(error)
......
...@@ -180,11 +180,13 @@ const homeTitleList = computed(() => { ...@@ -180,11 +180,13 @@ const homeTitleList = computed(() => {
disabled: false disabled: false
}] }]
if (route.path.includes('/dataLibrary')) { // if (route.path.includes('/dataLibrary')) {
return dataLibraryTitleList // return dataLibraryTitleList
} else { // } else {
return mainTitleList // return mainTitleList
} // }
return mainTitleList
}); });
const homeActiveTitleIndex = computed(() => { const homeActiveTitleIndex = computed(() => {
......
...@@ -3,6 +3,7 @@ import { setToken, removeToken, getToken } from "@/api/request.js"; ...@@ -3,6 +3,7 @@ import { setToken, removeToken, getToken } from "@/api/request.js";
import { AUTH_LOGOUT_CHANNEL } from "@/utils/authCrossTabLogout.js"; import { AUTH_LOGOUT_CHANNEL } from "@/utils/authCrossTabLogout.js";
import { cancelAllRequests } from "@/api/finance/service.js" import { cancelAllRequests } from "@/api/finance/service.js"
import { cancelAllMainRequests } from "@/api/request.js"
/** localStorage:跨标签页记录当前前端的 bootId(与 vite define 的 __APP_BOOT_ID__ 对齐) */ /** localStorage:跨标签页记录当前前端的 bootId(与 vite define 的 __APP_BOOT_ID__ 对齐) */
const VITE_BOOT_STORAGE_KEY = "app_vite_boot_id"; const VITE_BOOT_STORAGE_KEY = "app_vite_boot_id";
...@@ -112,7 +113,7 @@ const routes = [ ...@@ -112,7 +113,7 @@ const routes = [
component: DataLibrary, component: DataLibrary,
meta: { meta: {
title: '数据资源库', title: '数据资源库',
isShowHeader: true isShowHeader: false
}, },
children: [ children: [
...dataRoutes ...dataRoutes
...@@ -149,6 +150,7 @@ const router = createRouter({ ...@@ -149,6 +150,7 @@ const router = createRouter({
router.beforeEach((to, from, next) => { router.beforeEach((to, from, next) => {
// 在每次路由跳转开始前,取消上一个页面所有未完成的请求 // 在每次路由跳转开始前,取消上一个页面所有未完成的请求
// 这能防止旧页面的数据回来覆盖新页面,也能减少服务器压力 // 这能防止旧页面的数据回来覆盖新页面,也能减少服务器压力
cancelAllMainRequests();
cancelAllRequests(); cancelAllRequests();
if (import.meta.env.DEV) { if (import.meta.env.DEV) {
clearTokenIfNewDevBoot(); 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'; ...@@ -4,7 +4,7 @@ import getQuarterRange from './getQuarterRange';
import * as echarts from 'echarts' import * as echarts from 'echarts'
import 'echarts-wordcloud'; import 'echarts-wordcloud';
import router from '@/router/index' import router from '@/router/index'
import { goToDataCountryBill, goToDataDecree, goToDataThinkTank } from './goToPage'; // import { goToDataCountryBill, goToDataDecree, goToDataThinkTank } from './goToPage';
import goToPage from './goToPage/index'; import goToPage from './goToPage/index';
const setChart = (option, chartId, allowClick, selectParam, otherAreaList) => { const setChart = (option, chartId, allowClick, selectParam, otherAreaList) => {
let chartDom = document.getElementById(chartId); let chartDom = document.getElementById(chartId);
...@@ -97,7 +97,7 @@ const setChart = (option, chartId, allowClick, selectParam, otherAreaList) => { ...@@ -97,7 +97,7 @@ const setChart = (option, chartId, allowClick, selectParam, otherAreaList) => {
// }); // });
// window.open(route.href, "_blank"); // window.open(route.href, "_blank");
} }
goToDataDecree(selectParam) goToPage.goToDataDecree(selectParam)
break break
case '科技智库报告': case '科技智库报告':
...@@ -106,11 +106,11 @@ const setChart = (option, chartId, allowClick, selectParam, otherAreaList) => { ...@@ -106,11 +106,11 @@ const setChart = (option, chartId, allowClick, selectParam, otherAreaList) => {
const year = params.name.slice(0, 4) const year = params.name.slice(0, 4)
const quatarNum = Number(params.name[params.name.length - 1]) const quatarNum = Number(params.name[params.name.length - 1])
selectParam.selectedDate = JSON.stringify(getQuarterRange(year, quatarNum)) selectParam.selectedDate = JSON.stringify(getQuarterRange(year, quatarNum))
goToDataThinkTank(selectParam); goToPage.goToDataThinkTank(selectParam);
return return
} else if (selectParam.key === 2) { } else if (selectParam.key === 2) {
selectParam.domains = params.name selectParam.domains = params.name
goToDataThinkTank(selectParam); goToPage.goToDataThinkTank(selectParam);
return return
} }
} }
......
...@@ -117,9 +117,10 @@ ...@@ -117,9 +117,10 @@
</div> </div>
</el-tooltip> </el-tooltip>
<div class="dynamic-item-tags"> <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 }} {{ tag }}
</span> </span> -->
<AreaTag v-for="(tag, tIndex) in item.tags" :key="tIndex" :tagName="tag" />
</div> </div>
</div> </div>
</div> </div>
...@@ -278,6 +279,7 @@ import { onMounted, ref, computed, inject, watch, onUnmounted } from "vue"; ...@@ -278,6 +279,7 @@ import { onMounted, ref, computed, inject, watch, onUnmounted } from "vue";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import Echarts from "@/components/Chart/index.vue"; import Echarts from "@/components/Chart/index.vue";
import SimplePagination from "@/components/SimplePagination.vue"; import SimplePagination from "@/components/SimplePagination.vue";
import AreaTag from "@/components/base/AreaTag/index.vue";
import * as echarts from "echarts"; import * as echarts from "echarts";
import defaultIcon from "../../assets/defaultIcon.png"; import defaultIcon from "../../assets/defaultIcon.png";
import leftBtn from "../../assets/left-btn.png"; import leftBtn from "../../assets/left-btn.png";
...@@ -510,8 +512,8 @@ const handleNewsClick = item => { ...@@ -510,8 +512,8 @@ const handleNewsClick = item => {
// } // }
// }); // });
// window.open(href, "_blank"); // window.open(href, "_blank");
gotoNewsDetail(item.id); gotoNewsDetail(item.id);
}; };
// 点击联合制裁项-如果是政令则跳转详情 // 点击联合制裁项-如果是政令则跳转详情
......
...@@ -174,6 +174,7 @@ import { search, getStatusList } from '@/api/comprehensiveSearch' ...@@ -174,6 +174,7 @@ import { search, getStatusList } from '@/api/comprehensiveSearch'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import getDateRange from '@/utils/getDateRange' import getDateRange from '@/utils/getDateRange'
import { getDecodedParams } from '@/utils/goToPage' import { getDecodedParams } from '@/utils/goToPage'
import goToPage from '@/utils/goToPage/index'
const route = useRoute(); const route = useRoute();
...@@ -1152,7 +1153,7 @@ const handleDownloadCurChartData = () => { ...@@ -1152,7 +1153,7 @@ const handleDownloadCurChartData = () => {
// 跳转到当前页 初始化筛选条件 // 跳转到当前页 初始化筛选条件
const initParam = () => { const initParam = () => {
const routeQuery = getDecodedParams() const routeQuery = goToPage.getDecodedParams()
console.log('routeQuery',routeQuery); console.log('routeQuery',routeQuery);
const hasQuery = Object.keys(routeQuery).length > 0; const hasQuery = Object.keys(routeQuery).length > 0;
...@@ -1213,30 +1214,31 @@ const initParam = () => { ...@@ -1213,30 +1214,31 @@ const initParam = () => {
// 跳转法案详情 // 跳转法案详情
const handleClickToDetail = (curBill) => { const handleClickToDetail = (curBill) => {
console.log('curBill', curBill); // console.log('curBill', curBill);
// window.sessionStorage.setItem("billId", curBill.id);
window.sessionStorage.setItem("billId", curBill.id); // window.sessionStorage.setItem("curTabName", curBill.title);
window.sessionStorage.setItem("curTabName", curBill.title); // const route = router.resolve({
const route = router.resolve({ // path: "/billLayout",
path: "/billLayout", // query: {
query: { // billId: curBill.id
billId: curBill.id // }
} // });
}); // window.open(route.href, "_blank");
window.open(route.href, "_blank"); goToPage.goToBill(curBill.id, curBill.title)
}; };
// 跳转人物详情 // 跳转人物详情
const handlePerClick = item => { const handlePerClick = item => {
window.sessionStorage.setItem("curTabName", item.sponsorPersonName); // window.sessionStorage.setItem("curTabName", item.sponsorPersonName);
const route = router.resolve({ // const route = router.resolve({
path: "/characterPage", // path: "/characterPage",
query: { // query: {
type: 2, // type: 2,
personId: item.personId // personId: item.personId
} // }
}); // });
window.open(route.href, "_blank"); // window.open(route.href, "_blank");
goToPage.goToCharacterPage(item.personId, item.sponsorPersonName)
}; };
// 导出 // 导出
......
...@@ -187,6 +187,7 @@ import getDateRange from '@/utils/getDateRange' ...@@ -187,6 +187,7 @@ import getDateRange from '@/utils/getDateRange'
import { getDepartmentList } from "@/api/decree/home"; import { getDepartmentList } from "@/api/decree/home";
import { getDecodedParams } from '@/utils/goToPage' import { getDecodedParams } from '@/utils/goToPage'
import goToPage from '@/utils/goToPage/index'
const route = useRoute(); const route = useRoute();
...@@ -976,7 +977,7 @@ const handleDownloadCurChartData = () => { ...@@ -976,7 +977,7 @@ const handleDownloadCurChartData = () => {
// 跳转到当前页 初始化筛选条件 // 跳转到当前页 初始化筛选条件
const initParam = () => { const initParam = () => {
const routeQuery = getDecodedParams() const routeQuery = goToPage.getDecodedParams()
const hasQuery = Object.keys(routeQuery).length > 0; const hasQuery = Object.keys(routeQuery).length > 0;
if (hasQuery) { if (hasQuery) {
if (routeQuery.selectedAreaList) { if (routeQuery.selectedAreaList) {
......
...@@ -2,6 +2,12 @@ ...@@ -2,6 +2,12 @@
<div class="data-library-wrapper"> <div class="data-library-wrapper">
<div class="data-library-main"> <div class="data-library-main">
<div class="data-library-sider"> <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-box" v-for="(item, index) in siderList" :key="index">
<div class="sider-item" @click="handleSiderItem(item)"> <div class="sider-item" @click="handleSiderItem(item)">
<div class="sider-icon"> <div class="sider-icon">
...@@ -626,6 +632,24 @@ onBeforeUnmount(() => { ...@@ -626,6 +632,24 @@ onBeforeUnmount(() => {
width: 320px; width: 320px;
background: rgb(255, 255, 255); background: rgb(255, 255, 255);
border-right: 1px solid rgba(234, 236, 238, 1); 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 { .sider-item {
height: 54px; height: 54px;
......
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论