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

feat:智库/合作限制跳转加密问题

上级 4a7526c1
流水线 #621 已通过 于阶段
in 1 分 47 秒
......@@ -4,7 +4,7 @@ import getQuarterRange from './getQuarterRange';
import * as echarts from 'echarts'
import 'echarts-wordcloud';
import router from '@/router/index'
import { goToDataCountryBill, goToDataDecree } from './goToPage';
import { goToDataCountryBill, goToDataDecree,goToDataThinkTank } from './goToPage';
const setChart = (option, chartId, allowClick, selectParam, otherAreaList) => {
let chartDom = document.getElementById(chartId);
if (!chartDom) {
......@@ -105,11 +105,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))
openDataThinkTank(selectParam);
goToDataThinkTank(selectParam);
return
} else if (selectParam.key === 2) {
selectParam.domains = params.name
openDataThinkTank(selectParam);
goToDataThinkTank(selectParam);
return
}
}
......
......@@ -420,26 +420,64 @@ const reportAuthors = computed(() => {
return [];
});
// 点击报告作者头像,跳转到人物主页
// 与核心研究人员逻辑一致:核心依赖 personId,本页面依赖作者的 id(作为 personId 传入)
const encodeBase64Param = (val) => {
const s = String(val ?? "").trim();
if (!s) return "";
try {
return btoa(encodeURIComponent(s));
} catch (_) {
return s;
}
};
// 点击报告作者:与智库概览核心研究人员一致,personId 加密后传入,人物页解密
const handleClickReportAuthor = async (author) => {
const personId = author?.id;
const personId = author?.personId ?? author?.id;
if (!personId) return;
const personTypeList = JSON.parse(window.sessionStorage.getItem("personTypeList"));
let type = 0;
const params = { personId };
const res = await getPersonSummaryInfo(params);
if (res.code !== 200 || !res.data) return;
window.sessionStorage.setItem("curTabName", author?.name || "");
const route = router.resolve({
path: "/characterPage",
query: {
personId
try {
const res = await getPersonSummaryInfo(params);
if (res.code === 200 && res.data) {
const arr = Array.isArray(personTypeList)
? personTypeList.filter((t) => {
const typeIdNum = Number(t.typeId);
const personTypeNum = Number(res.data.personType);
return !Number.isNaN(typeIdNum) && !Number.isNaN(personTypeNum) && typeIdNum === personTypeNum;
})
: [];
if (!arr.length) {
ElMessage.warning("找不到当前人员的类型值!");
return;
}
const personTypeName = arr[0]?.typeName || "";
if (personTypeName === "科技企业领袖") {
type = 1;
} else if (personTypeName === "国会议员") {
type = 2;
} else if (personTypeName === "智库研究人员") {
type = 3;
} else {
ElMessage.warning("找不到当前人员的类型值!");
return;
}
window.sessionStorage.setItem("curTabName", author?.name || "人物主页");
const encodedPersonId = encodeBase64Param(personId);
if (!encodedPersonId) return;
const route = router.resolve({
path: "/characterPage",
query: {
type,
personId: encodedPersonId
}
});
window.open(route.href, "_blank");
} else {
ElMessage.warning("找不到当前人员的类型值!");
}
});
window.open(route.href, "_blank");
} catch (error) { }
};
const riskSignal = computed(() => {
const info = props.thinkInfo || {};
......
......@@ -316,40 +316,84 @@ const handleGetThinkTankReport = async () => {
}
};
/** 新标签页打开智库报告详情 /thinkTank/reportDetail/:id */
const encodeBase64Param = (val) => {
const s = String(val ?? "").trim();
if (!s) return "";
try {
return btoa(encodeURIComponent(s));
} catch (_) {
return s;
}
};
/** 新标签页打开报告详情:与智库概览「智库报告」一致,id 为 base64(encodeURIComponent(明文id)),报告详情页 decodeRouteId 解密 */
const handleClickProjectReport = (report) => {
const id = report?.id;
if (!id) {
ElMessage.warning("报告 id 为空,无法跳转");
return;
}
const reportTitle = String(report?.nameZh || report?.name || "").trim();
const name = String(report?.nameZh || report?.name || "").trim();
if (name) {
window.sessionStorage.setItem("curTabName", name);
}
const encodedId = encodeBase64Param(id);
if (!encodedId) return;
const route = router.resolve({
name: "ReportDetail",
params: { id: String(id) },
query: reportTitle ? { name: reportTitle } : {}
params: { id: encodedId }
});
window.open(route.href, "_blank");
};
// 点击项目团队成员:与智库概览-核心研究人员一致,personId 经 encodeURIComponent 后 base64,人物页会解密
const handleClickReportAuthor = async (author) => {
const personId = author?.personId;
if (!personId) return;
const personTypeList = JSON.parse(window.sessionStorage.getItem("personTypeList"));
let type = 0;
const params = { personId };
const res = await getPersonSummaryInfo(params);
if (res.code !== 200 || !res.data) return;
window.sessionStorage.setItem("curTabName", author?.name || "");
const route = router.resolve({
path: "/characterPage",
query: {
personId
try {
const res = await getPersonSummaryInfo(params);
if (res.code === 200 && res.data) {
const arr = Array.isArray(personTypeList)
? personTypeList.filter((t) => {
const typeIdNum = Number(t.typeId);
const personTypeNum = Number(res.data.personType);
return !Number.isNaN(typeIdNum) && !Number.isNaN(personTypeNum) && typeIdNum === personTypeNum;
})
: [];
if (!arr.length) {
ElMessage.warning("找不到当前人员的类型值!");
return;
}
const personTypeName = arr[0]?.typeName || "";
if (personTypeName === "科技企业领袖") {
type = 1;
} else if (personTypeName === "国会议员") {
type = 2;
} else if (personTypeName === "智库研究人员") {
type = 3;
} else {
ElMessage.warning("找不到当前人员的类型值!");
return;
}
window.sessionStorage.setItem("curTabName", author?.name || "人物主页");
const encodedPersonId = encodeBase64Param(author?.personId);
if (!encodedPersonId) return;
const route = router.resolve({
path: "/characterPage",
query: {
type,
personId: encodedPersonId
}
});
window.open(route.href, "_blank");
} else {
ElMessage.warning("找不到当前人员的类型值!");
}
});
window.open(route.href, "_blank");
} catch (error) { }
};
// 内容摘要
const box1Data =
......
......@@ -260,6 +260,7 @@ import setChart from "@/utils/setChart";
import getPieChart from "./utils/piechart";
import getTreeMapChart from "./utils/treeMapChart";
import { getDecodedParams } from "@/utils/goToPage";
import { ElMessage } from "element-plus";
import {
getThinkTankInfoBasic,
getThinkTankInfoBranch,
......@@ -705,6 +706,16 @@ const handlePersonNextPage = () => {
handleGetThinkPerson(personCurrentPage.value + 1);
};
const encodeBase64Param = (val) => {
const s = String(val ?? "").trim();
if (!s) return "";
try {
return btoa(encodeURIComponent(s));
} catch (_) {
return s;
}
};
// 点击人物头像,跳转到人物主页
const handleClickPerson = async item => {
......@@ -722,17 +733,38 @@ const handleClickPerson = async item => {
const res = await getPersonSummaryInfo(params);
console.log("人物全局信息", res);
if (res.code === 200 && res.data) {
const arr = personTypeList.filter(t => {
const typeIdNum = Number(t.typeId);
const personTypeNum = Number(res.data.personType);
return !Number.isNaN(typeIdNum) && !Number.isNaN(personTypeNum) && typeIdNum === personTypeNum;
});
const arr = Array.isArray(personTypeList)
? personTypeList.filter(t => {
const typeIdNum = Number(t.typeId);
const personTypeNum = Number(res.data.personType);
return !Number.isNaN(typeIdNum) && !Number.isNaN(personTypeNum) && typeIdNum === personTypeNum;
})
: [];
console.log("arr", arr);
if (!arr.length) {
ElMessage.warning("找不到当前人员的类型值!");
return;
}
personTypeName = arr[0]?.typeName || "";
if (personTypeName === "科技企业领袖") {
type = 1;
} else if (personTypeName === "国会议员") {
type = 2;
} else if (personTypeName === "智库研究人员") {
type = 3;
} else {
ElMessage.warning("找不到当前人员的类型值!");
return;
}
window.sessionStorage.setItem("curTabName", item.name || "人物主页");
const encodedPersonId = encodeBase64Param(item?.personId);
if (!encodedPersonId) return;
const route = router.resolve({
path: "/characterPage",
query: {
personId: item.personId
type,
personId: encodedPersonId
}
});
window.open(route.href, "_blank");
......
......@@ -67,11 +67,9 @@
{{ "No." + (index + 1) }}
</div> -->
<div class="rank">
<el-popover content="跳转至数据资源库" placement="top">
<template #reference>
<div class=" number" @click="handleToDataLibrary(item)">{{ item.reportNumber }} {{ "篇报告" }}</div>
</template>
</el-popover>
<div class=" number" @click="handleToDataLibrary(item)">{{ item.reportNumber }} {{ "篇报告" }}</div>
</div>
</div>
<div class="card-title">
......@@ -504,7 +502,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 { goToDataThinkTank, goToThinkTank } from "@/utils/goToPage";
const gotoNewsDetail = useGotoNewsDetail()
const containerRef = ref(null);
const isRiskDetailVisible = ref(false);
......@@ -2399,7 +2397,7 @@ const handleClickPerson = async item => {
const handleToReportDetail = item => {
window.sessionStorage.setItem("curTabName", item.name);
const encodedId = encodeBase64Param(item?.id);
if (!encodedId) return;
if (!encodedId) return;
const route = router.resolve({
name: "ReportDetail",
params: {
......@@ -2411,7 +2409,7 @@ const handleToReportDetail = item => {
const handleToHearingDetail = item => {
window.sessionStorage.setItem("curTabName", item.titleZh);
const encodedId = encodeBase64Param(item?.id);
if (!encodedId) return;
if (!encodedId) return;
const route = router.resolve({
name: "CongressHearingView",
params: {
......@@ -2423,7 +2421,7 @@ const handleToHearingDetail = item => {
const handleToSurveyProjectView = item => {
window.sessionStorage.setItem("curTabName", item.name);
const encodedId = encodeBase64Param(item?.id);
if (!encodedId) return;
if (!encodedId) return;
const route = router.resolve({
name: "SurveyProjectView",
params: {
......@@ -2453,11 +2451,8 @@ const handleToDataLibrary = (item) => {
const selectParam = {
orgnizationName: item.name
}
const route = router.resolve({
path: "/dataLibrary/dataThinkTank",
query: selectParam
});
window.open(route.href, "_blank");
// 使用 goToPage.js 统一的 Base64(encodeURIComponent(JSON)) 加密传参方式
goToDataThinkTank(selectParam)
}
onMounted(async () => {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论