提交 8aa2bdf8 authored 作者: yanpeng's avatar yanpeng

Merge branch 'pre' of http://8.140.26.4:10003/caijian/risk-monitor into yp-dev

流水线 #350 已通过 于阶段
in 1 分 37 秒
...@@ -72,7 +72,9 @@ router.beforeEach((to, from, next) => { ...@@ -72,7 +72,9 @@ router.beforeEach((to, from, next) => {
const storageKey = to.meta.titleStorageKey || "curTabName"; const storageKey = to.meta.titleStorageKey || "curTabName";
// 新开页签时 sessionStorage 不共享,优先用 query 带过来的 title/name // 新开页签时 sessionStorage 不共享,优先用 query 带过来的 title/name
const queryTitle = (to.query && (to.query.title || to.query.name)) ? String(to.query.title || to.query.name) : ""; const queryTitle = (to.query && (to.query.title || to.query.name)) ? String(to.query.title || to.query.name) : "";
document.title = queryTitle || window.sessionStorage.getItem(storageKey) || to.meta.title; if (!to.path.startsWith('/decreeLayout/')) {
document.title = queryTitle || window.sessionStorage.getItem(storageKey) || to.meta.title;
}
} else { } else {
document.title = to.meta.title document.title = to.meta.title
......
...@@ -15,8 +15,8 @@ ...@@ -15,8 +15,8 @@
<div class="main-content" ref="homeMainRef" :class="{ 'scroll-main': isShow }"> <div class="main-content" ref="homeMainRef" :class="{ 'scroll-main': isShow }">
<div class="home-top-bg"></div> <div class="home-top-bg"></div>
<!-- 搜索栏部分 --> <!-- 搜索栏部分 -->
<SearchContainer v-if="homeMainRef" :countInfo="cooperationCountInfo" placeholder="搜索合作限制" <SearchContainer v-if="homeMainRef" placeholder="搜索合作限制" :containerRef="homeMainRef" areaName=""
:containerRef="homeMainRef" areaName="" /> style="height: fit-content" />
<!-- 最新动态 --> <!-- 最新动态 -->
<div class="newdata" id="position1"> <div class="newdata" id="position1">
...@@ -164,7 +164,7 @@ const handleToPosi = id => { ...@@ -164,7 +164,7 @@ const handleToPosi = id => {
background-size: 100% 100%; background-size: 100% 100%;
position: absolute; position: absolute;
width: 100%; width: 100%;
height: 100%;
z-index: -100; z-index: -100;
top: -64px; top: -64px;
} }
...@@ -177,7 +177,7 @@ const handleToPosi = id => { ...@@ -177,7 +177,7 @@ const handleToPosi = id => {
.search { .search {
width: 960px; width: 960px;
height: 168px;
margin: 0 auto 68px auto; margin: 0 auto 68px auto;
.search-main { .search-main {
...@@ -368,12 +368,12 @@ const handleToPosi = id => { ...@@ -368,12 +368,12 @@ const handleToPosi = id => {
.reslib { .reslib {
width: 1600px; width: 1600px;
height: 1633px;
margin: 0 auto 0px auto; margin: 0 auto 0px auto;
.reslib-main { .reslib-main {
width: 1600px; width: 1600px;
height: 1565px;
margin-top: 26px; margin-top: 26px;
} }
} }
......
...@@ -408,17 +408,12 @@ ...@@ -408,17 +408,12 @@
<div class="title">{{ "科技领域" }}</div> <div class="title">{{ "科技领域" }}</div>
</div> </div>
<div class="select-main"> <div class="select-main">
<div class="checkbox-group"> <el-checkbox-group class="checkbox-group" v-model="activeAreaList" @change="handleAreaChange">
<el-checkbox v-model="activeAreaList" label="all" style="width: 100px" class="filter-checkbox" <el-checkbox label="" class="filter-checkbox">{{ "全部领域" }}</el-checkbox>
@change="checked => handleAreaChange('all', checked)"> <el-checkbox v-for="area in areaList" :key="area.id" :label="area.id" class="filter-checkbox">
{{ "全部领域" }}
</el-checkbox>
<el-checkbox v-for="area in areaList" :key="area.id" v-model="activeAreaList" :label="area.id"
style="width: 100px" class="filter-checkbox"
@change="checked => handleAreaChange(area.id, checked)">
{{ area.name }} {{ area.name }}
</el-checkbox> </el-checkbox>
</div> </el-checkbox-group>
</div> </div>
</div> </div>
<div class="select-box"> <div class="select-box">
...@@ -427,13 +422,11 @@ ...@@ -427,13 +422,11 @@
<div class="title">{{ "发布时间" }}</div> <div class="title">{{ "发布时间" }}</div>
</div> </div>
<div class="select-main"> <div class="select-main">
<div class="checkbox-group"> <el-checkbox-group class="checkbox-group" v-model="activePubTime" @change="handlePubTimeChange">
<el-checkbox v-for="time in pubTime" :key="time.id" v-model="activePubTime" :label="time.id" <el-checkbox v-for="time in pubTime" :key="time.id" :label="time.id" class="filter-checkbox">
style="width: 100px" class="filter-checkbox"
@change="checked => handlePubTimeChange(time.id, checked)">
{{ time.name }} {{ time.name }}
</el-checkbox> </el-checkbox>
</div> </el-checkbox-group>
</div> </div>
</div> </div>
</div> </div>
...@@ -623,7 +616,6 @@ const handleClickOrder = () => { ...@@ -623,7 +616,6 @@ const handleClickOrder = () => {
// 跳转政令详情 // 跳转政令详情
const onNavigateToDetail = (item) => { const onNavigateToDetail = (item) => {
window.sessionStorage.setItem("curTabName", item.name || item.title || item.signalTitle);
const route = router.resolve({ const route = router.resolve({
path: "/decreeLayout", path: "/decreeLayout",
query: { id: item.orderId || item.id } query: { id: item.orderId || item.id }
...@@ -1117,7 +1109,7 @@ const handleChangeCheckedDecreeType = () => { ...@@ -1117,7 +1109,7 @@ const handleChangeCheckedDecreeType = () => {
}; };
const pubTime = ref([ const pubTime = ref([
{ id: "all", name: "全部时间" }, { id: "", name: "全部时间" },
{ id: "2026", name: "2026年" }, { id: "2026", name: "2026年" },
{ id: "2025", name: "2025年" }, { id: "2025", name: "2025年" },
{ id: "2024", name: "2024年" }, { id: "2024", name: "2024年" },
...@@ -1128,41 +1120,26 @@ const pubTime = ref([ ...@@ -1128,41 +1120,26 @@ const pubTime = ref([
]); ]);
const activePubTime = ref(["2026"]); const activePubTime = ref(["2026"]);
// 处理发布时间全选逻辑 // 处理发布时间全选逻辑
const handlePubTimeChange = (id, checked) => { const handlePubTimeChange = (event) => {
const allIds = pubTime.value.filter(item => item.id !== "all").map(item => item.id); if (event.length && event[event.length-1] !== "") {
activePubTime.value = event.filter(item => item !== "");
if (id === "all") {
// 点击全选:选中所有或清空所有
activePubTime.value = checked ? ["all", ...allIds] : [];
} else { } else {
const selectedIds = activePubTime.value.filter(itemId => itemId !== "all"); activePubTime.value = [""];
const isAllSelected = selectedIds.length === allIds.length;
if (isAllSelected && !activePubTime.value.includes("all")) {
// 手动选中了所有年份,自动勾选全选
activePubTime.value = ["all", ...allIds];
} else if (!isAllSelected && activePubTime.value.includes("all")) {
// 取消某个选项,取消全选状态
activePubTime.value = selectedIds;
}
} }
currentPage.value = 1;
handleGetDecreeOrderList();
}; };
const handleAreaChange = (id, checked) => { const activeAreaList = ref([""]);
const allIds = areaList.value.map(item => item.id); const handleAreaChange = (event) => {
if (event.length && event[event.length-1] !== "") {
if (id === "all") { activeAreaList.value = event.filter(item => item !== "");
activeAreaList.value = checked ? ["all", ...allIds] : [];
} else { } else {
const selectedIds = activeAreaList.value.filter(itemId => itemId !== "all"); activeAreaList.value = [""];
const isAllSelected = selectedIds.length === allIds.length;
if (isAllSelected && !activeAreaList.value.includes("all")) {
activeAreaList.value = ["all", ...allIds];
} else if (!isAllSelected && activeAreaList.value.includes("all")) {
activeAreaList.value = selectedIds;
}
} }
currentPage.value = 1;
handleGetDecreeOrderList();
}; };
const areaList = ref([ const areaList = ref([
...@@ -1171,7 +1148,7 @@ const areaList = ref([ ...@@ -1171,7 +1148,7 @@ const areaList = ref([
// { id: "通信网络", name: "通信网络" }, // { id: "通信网络", name: "通信网络" },
// { id: "量子科技", name: "量子科技" } // { id: "量子科技", name: "量子科技" }
]); ]);
const activeAreaList = ref(["1"]);
// 修改获取科技领域列表,添加全选选项 // 修改获取科技领域列表,添加全选选项
const handleGetAreaList = async () => { const handleGetAreaList = async () => {
try { try {
...@@ -1179,8 +1156,6 @@ const handleGetAreaList = async () => { ...@@ -1179,8 +1156,6 @@ const handleGetAreaList = async () => {
console.log("行业领域列表", res); console.log("行业领域列表", res);
if (res.code === 200 && res.data) { if (res.code === 200 && res.data) {
areaList.value = res.data; areaList.value = res.data;
// 设置默认全选
activeAreaList.value = ["all", ...res.data.map(item => item.id)];
// 获取列表后重新查询 // 获取列表后重新查询
handleGetDecreeOrderList(); handleGetDecreeOrderList();
} }
...@@ -1193,37 +1168,14 @@ const decreeList = ref([]); ...@@ -1193,37 +1168,14 @@ const decreeList = ref([]);
// 修改请求方法,处理全选时不传参数的情况 // 修改请求方法,处理全选时不传参数的情况
const handleGetDecreeOrderList = async () => { const handleGetDecreeOrderList = async () => {
// 处理科技领域:如果包含 all 或全选,则 researchTypeIds 为空(不传)
let p1 = "";
const allAreaIds = areaList.value.map(item => item.id);
const selectedAreaIds = activeAreaList.value.filter(id => id !== "all");
if (!activeAreaList.value.includes("all") && selectedAreaIds.length > 0 && selectedAreaIds.length < allAreaIds.length) {
p1 = selectedAreaIds.join(",");
}
// 其他情况(包含all、长度为0、全部选中)p1保持为空,即不传researchTypeIds
// 处理发布时间:如果包含 all 或全选,则 years 为空(不传)
let p2 = "";
const allPubTimeIds = pubTime.value.filter(item => item.id !== "all").map(item => item.id);
const selectedPubTimeIds = activePubTime.value.filter(id => id !== "all");
if (
!activePubTime.value.includes("all") &&
selectedPubTimeIds.length > 0 &&
selectedPubTimeIds.length < allPubTimeIds.length
) {
p2 = selectedPubTimeIds.join(",");
}
// 其他情况(包含all、长度为0、全部选中)p2保持为空,即不传years
const params = { const params = {
currentPage: currentPage.value, currentPage: currentPage.value,
pageSize: pageSize.value, pageSize: pageSize.value,
researchTypeIds: p1, // 全选时不传(为空) researchTypeIds: activeAreaList.value.join(',') || null,
sortFun: isSort.value, sortFun: isSort.value,
isCN: isChina.value ? 1 : 0, isCN: isChina.value ? 1 : 0,
proposeName: searchType.value, proposeName: searchType.value,
years: p2, // 全选时不传(为空) years: activePubTime.value.join(',') || null,
typeIds: checkedDecreeType.value.toString() typeIds: checkedDecreeType.value.toString()
}; };
...@@ -1253,7 +1205,7 @@ const handleGetDecreeOrderList = async () => { ...@@ -1253,7 +1205,7 @@ const handleGetDecreeOrderList = async () => {
} }
}; };
watch([activePubTime, activeAreaList, checkedGovIns, isSort, isChina, searchType], val => { watch([checkedGovIns, isSort, isChina, searchType], val => {
// 切换页码到第一页 // 切换页码到第一页
currentPage.value = 1; currentPage.value = 1;
handleGetDecreeOrderList(); handleGetDecreeOrderList();
...@@ -1268,21 +1220,6 @@ const handleSwithCurDecree = name => { ...@@ -1268,21 +1220,6 @@ const handleSwithCurDecree = name => {
} }
}; };
// 搜索
const searchDecreeText = ref("");
const handleSearch = () => {
window.sessionStorage.setItem("curTabName", `搜索-${searchDecreeText.value}`);
const curRoute = router.resolve({
path: "/searchResults",
query: {
searchText: searchDecreeText.value,
areaName: "政令"
}
});
window.open(curRoute.href, "_blank");
};
// 关键机构 // 关键机构
const keyOrganizationList = ref([]); const keyOrganizationList = ref([]);
const onKeyOrganization = async (event) => { const onKeyOrganization = async (event) => {
...@@ -2477,7 +2414,7 @@ onMounted(async () => { ...@@ -2477,7 +2414,7 @@ onMounted(async () => {
gap: 8px 4px; gap: 8px 4px;
.filter-checkbox { .filter-checkbox {
width: 160px; width: 100px;
height: 24px; height: 24px;
margin-right: 0 !important; margin-right: 0 !important;
} }
......
...@@ -213,14 +213,18 @@ const handleClickMainHeaderBtn = item => { ...@@ -213,14 +213,18 @@ const handleClickMainHeaderBtn = item => {
// 获取全局信息 // 获取全局信息
const summaryInfo = ref({}); const summaryInfo = ref({});
let pageTitle = "科技政令主页"
const handleGetSummary = async () => { const handleGetSummary = async () => {
try { try {
const res = await getDecreeSummary({ id: route.query.id }); const res = await getDecreeSummary({ id: route.query.id });
console.log("全局信息", res); console.log("全局信息", res);
if (res.code === 200 && res.data) { if (res.code === 200 && res.data) {
summaryInfo.value = res.data; summaryInfo.value = res.data;
pageTitle = res.data.name || '科技政令主页';
} }
} catch (error) { } } catch (error) {}
document.title = pageTitle;
window.sessionStorage.setItem("curTabName", pageTitle);
}; };
// 获取报告原文 // 获取报告原文
...@@ -280,7 +284,6 @@ const handleAnalysisClick = () => { ...@@ -280,7 +284,6 @@ const handleAnalysisClick = () => {
onMounted(() => { onMounted(() => {
handleGetSummary(); handleGetSummary();
console.log(route.path);
if (route.path === "/decreeLayout/overview/introduction" || route.path === "/decreeLayout/overview/background" || route.path === "/decreeLayout/overview/measures") { if (route.path === "/decreeLayout/overview/introduction" || route.path === "/decreeLayout/overview/background" || route.path === "/decreeLayout/overview/measures") {
activeTitle.value = "政令概况"; activeTitle.value = "政令概况";
} else if (route.path === "/decreeLayout/deepDig") { } else if (route.path === "/decreeLayout/deepDig") {
......
...@@ -78,9 +78,7 @@ ...@@ -78,9 +78,7 @@
<div class="time-line-icon"> <div class="time-line-icon">
<img style="width: 100%; height: 100%;" :src="item.orgImage || DefaultIcon1" alt=""> <img style="width: 100%; height: 100%;" :src="item.orgImage || DefaultIcon1" alt="">
</div> </div>
<div class="time-line-name text-click-hover" @click="handleToInstitution(item)">{{ <div class="time-line-name text-click-hover" @click="handleToInstitution(item)">{{ item.proposeOrgName }}</div>
item.proposeOrgName
}}</div>
</div> </div>
<div class="timeline-content" @click="handleClickDecree(item)">{{ item.describe }}</div> <div class="timeline-content" @click="handleClickDecree(item)">{{ item.describe }}</div>
</div> </div>
...@@ -174,6 +172,7 @@ const handleGetPrev = async () => { ...@@ -174,6 +172,7 @@ const handleGetPrev = async () => {
}; };
// 跳转行政机构主页 // 跳转行政机构主页
const handleToInstitution = item => { const handleToInstitution = item => {
window.sessionStorage.setItem("curTabName", item.proposeOrgName);
const curRoute = router.resolve({ const curRoute = router.resolve({
path: "/institution", path: "/institution",
query: { query: {
...@@ -225,7 +224,6 @@ const handleGetLaws = async () => { ...@@ -225,7 +224,6 @@ const handleGetLaws = async () => {
}; };
// 跳转科技法案详情页 // 跳转科技法案详情页
const handleClickBull = decree => { const handleClickBull = decree => {
window.sessionStorage.setItem("billId", decree.billId);
window.sessionStorage.setItem("curTabName", decree.title); window.sessionStorage.setItem("curTabName", decree.title);
const route = router.resolve({ const route = router.resolve({
path: "/billLayout", path: "/billLayout",
...@@ -233,8 +231,6 @@ const handleClickBull = decree => { ...@@ -233,8 +231,6 @@ const handleClickBull = decree => {
billId: decree.billId billId: decree.billId
} }
}); });
console.log(route);
window.open(route.href, "_blank"); window.open(route.href, "_blank");
}; };
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
<div class="select-box"> <div class="select-box">
<el-select v-model="sortModel" class="resource-library-sort-select" placeholder="发布时间" style="width: 120px" <el-select v-model="sortModel" class="resource-library-sort-select" placeholder="发布时间" style="width: 120px"
:teleported="true" placement="bottom-start" :popper-options="resourceLibrarySortPopperOptions" :teleported="true" placement="bottom-start" :popper-options="resourceLibrarySortPopperOptions"
@change="handleResourceLibrarySortChange"> @change="handleResourceLibrarySortChange" popper-class="datasub-select-popper">
<template #prefix> <template #prefix>
<img v-if="sortModel !== true" src="@/views/thinkTank/ThinkTankDetail/thinkDynamics/images/image down.png" <img v-if="sortModel !== true" src="@/views/thinkTank/ThinkTankDetail/thinkDynamics/images/image down.png"
class="resource-library-sort-prefix-img" alt="" @click.stop="toggleResourceLibrarySortPrefix" /> class="resource-library-sort-prefix-img" alt="" @click.stop="toggleResourceLibrarySortPrefix" />
...@@ -322,7 +322,9 @@ onMounted(async () => { ...@@ -322,7 +322,9 @@ onMounted(async () => {
margin: 0; margin: 0;
padding: 0; padding: 0;
} }
:global(.datasub-select-popper .el-select-dropdown__item) {
padding-left: 20px;
}
.reslib-page { .reslib-page {
width: 1600px; width: 1600px;
...@@ -459,6 +461,10 @@ onMounted(async () => { ...@@ -459,6 +461,10 @@ onMounted(async () => {
height: 24px; height: 24px;
margin-right: 0 !important; margin-right: 0 !important;
} }
:deep(.el-checkbox__label) {
font-size: 16px;
}
} }
} }
} }
......
...@@ -14,8 +14,8 @@ ...@@ -14,8 +14,8 @@
<div class="main-content" ref="containerRef"> <div class="main-content" ref="containerRef">
<div class="home-top-bg"></div> <div class="home-top-bg"></div>
<!-- 搜索栏部分 --> <!-- 搜索栏部分 -->
<SearchContainer style="margin-bottom: 48px; height: fit-content" v-if="containerRef" :countInfo="countInfo" <SearchContainer style="margin-bottom: 52px; height: fit-content" v-if="containerRef" placeholder="搜索科研资助实体、资助记录"
placeholder="搜索科研资助实体、资助记录" :containerRef="containerRef" areaName="" /> :containerRef="containerRef" areaName="" />
<!-- <div class="search"> --> <!-- <div class="search"> -->
<!-- <div class="search-main"> <!-- <div class="search-main">
......
...@@ -1611,9 +1611,9 @@ onMounted(() => { ...@@ -1611,9 +1611,9 @@ onMounted(() => {
.page-box { .page-box {
/* 最大 300px:允许变小,但绝不变大 */ /* 最大 300px:允许变小,但绝不变大 */
flex: 0 1 300px; flex: 0 1 600px;
width: 100%; width: 100%;
max-width: 300px; max-width: 600px;
min-width: 0; min-width: 0;
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
...@@ -1621,7 +1621,7 @@ onMounted(() => { ...@@ -1621,7 +1621,7 @@ onMounted(() => {
} }
.page-box :deep(.el-pagination) { .page-box :deep(.el-pagination) {
max-width: 100%;
min-width: 0; min-width: 0;
overflow: hidden; overflow: hidden;
} }
......
...@@ -105,6 +105,11 @@ const handleGetThinkTankReportSummary = async () => { ...@@ -105,6 +105,11 @@ const handleGetThinkTankReportSummary = async () => {
if (res.code === 200 && res.data) { if (res.code === 200 && res.data) {
reportUrl.value = res.data.reportUrl; reportUrl.value = res.data.reportUrl;
thinkInfo.value = res.data; thinkInfo.value = res.data;
const title = String(res.data.name || "").trim();
if (title) {
document.title = title;
window.sessionStorage.setItem("curTabName", title);
}
console.log(reportUrl.value, "reportUrl.value"); console.log(reportUrl.value, "reportUrl.value");
} }
} catch (error) { } catch (error) {
......
...@@ -459,7 +459,7 @@ const handleGetThinkTankReportIndustryCloud = async () => { ...@@ -459,7 +459,7 @@ const handleGetThinkTankReportIndustryCloud = async () => {
})); }));
// 该接口数据用于「报告关键词云」 // 该接口数据用于「报告关键词云」
box5Data.value = data; box5Data.value = data;
console.log("box5Data", box5Data.value); console.log("box5Data", box5Data.value);
if (data.length) { if (data.length) {
box5WordCloudKey.value += 1; box5WordCloudKey.value += 1;
} }
...@@ -1377,9 +1377,9 @@ onMounted(() => { ...@@ -1377,9 +1377,9 @@ onMounted(() => {
.page-box { .page-box {
/* 最大 300px:允许变小,但绝不变大 */ /* 最大 300px:允许变小,但绝不变大 */
flex: 0 1 300px; flex: 0 1 600px;
width: 100%; width: 100%;
max-width: 300px; max-width: 600px;
min-width: 0; min-width: 0;
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
...@@ -1387,7 +1387,7 @@ onMounted(() => { ...@@ -1387,7 +1387,7 @@ onMounted(() => {
} }
.page-box :deep(.el-pagination) { .page-box :deep(.el-pagination) {
max-width: 100%;
min-width: 0; min-width: 0;
overflow: hidden; overflow: hidden;
} }
......
...@@ -72,8 +72,8 @@ ...@@ -72,8 +72,8 @@
</div> --> </div> -->
<AnalysisBox title="项目报告" :showAllBtn="true"> <AnalysisBox title="项目报告" :showAllBtn="true">
<div class="box2-main"> <div class="box2-main">
<div class="box2-item" v-for="(report, idx) in reportList" :key="idx"> <div class="box2-item" v-for="(report, idx) in reportList" :key="report.id || idx">
<div class="box2-item-content"> <div class="box2-item-content" @click="handleClickProjectReport(report)">
<div class="left"><img :src="report.imgUrl" alt="" /></div> <div class="left"><img :src="report.imgUrl" alt="" /></div>
<div class="right-content"> <div class="right-content">
<div class="report-title">{{ report.nameZh }}</div> <div class="report-title">{{ report.nameZh }}</div>
...@@ -222,7 +222,7 @@ const getOpinionExpandKey = (item, index) => { ...@@ -222,7 +222,7 @@ const getOpinionExpandKey = (item, index) => {
} }
return `idx-${index}`; return `idx-${index}`;
}; };
const reportList = ref({}); const reportList = ref([]);
const formatDate = (dateStr) => { const formatDate = (dateStr) => {
if (!dateStr) return ""; if (!dateStr) return "";
const date = new Date(dateStr) const date = new Date(dateStr)
...@@ -237,12 +237,29 @@ const handleGetThinkTankReport = async () => { ...@@ -237,12 +237,29 @@ const handleGetThinkTankReport = async () => {
const res = await getThinkTankProjectRelated(router.currentRoute._value.params.id); const res = await getThinkTankProjectRelated(router.currentRoute._value.params.id);
console.log("报告全局信息", res); console.log("报告全局信息", res);
if (res.code === 200 && res.data) { if (res.code === 200 && res.data) {
reportList.value = res.data; reportList.value = Array.isArray(res.data) ? res.data : [];
} }
} catch (error) { } catch (error) {
console.error("获取相关报告error", error); console.error("获取相关报告error", error);
} }
}; };
/** 新标签页打开智库报告详情 /thinkTank/reportDetail/:id */
const handleClickProjectReport = (report) => {
const id = report?.id;
if (!id) {
ElMessage.warning("报告 id 为空,无法跳转");
return;
}
const reportTitle = String(report?.nameZh || report?.name || "").trim();
const route = router.resolve({
name: "ReportDetail",
params: { id: String(id) },
query: reportTitle ? { name: reportTitle } : {}
});
window.open(route.href, "_blank");
};
const handleClickReportAuthor = async (author) => { const handleClickReportAuthor = async (author) => {
const personId = author?.personId; const personId = author?.personId;
if (!personId) return; if (!personId) return;
...@@ -807,6 +824,7 @@ onMounted(() => { ...@@ -807,6 +824,7 @@ onMounted(() => {
height: 90px; height: 90px;
margin-top: 7px; margin-top: 7px;
display: flex; display: flex;
cursor: pointer;
.left { .left {
width: 56px; width: 56px;
......
...@@ -100,7 +100,7 @@ ...@@ -100,7 +100,7 @@
</div> </div>
<div class="right-footer"> <div class="right-footer">
<div class="info"> <div class="info">
{{ total }}智库报告 {{ total }}国会听证会
</div> </div>
<div class="page-box"> <div class="page-box">
<el-pagination :page-size="10" background layout="prev, pager, next" :total="total" <el-pagination :page-size="10" background layout="prev, pager, next" :total="total"
...@@ -290,7 +290,7 @@ const handleToReportDetail = item => { ...@@ -290,7 +290,7 @@ const handleToReportDetail = item => {
gap: 16px; gap: 16px;
height: 100%; height: 100%;
margin-bottom: 100px; margin-bottom: 80px;
...@@ -489,14 +489,9 @@ const handleToReportDetail = item => { ...@@ -489,14 +489,9 @@ const handleToReportDetail = item => {
.right { .right {
width: 1224px; width: 1224px;
.card-box { .card-box {
height: 100%;
display: flex; display: flex;
......
...@@ -70,7 +70,7 @@ ...@@ -70,7 +70,7 @@
</div> </div>
<div class="right-footer"> <div class="right-footer">
<div class="info"> <div class="info">
{{ total }}智库报告 {{ total }}调查项目
</div> </div>
<div class="page-box"> <div class="page-box">
<el-pagination :page-size="12" background layout="prev, pager, next" :total="total" <el-pagination :page-size="12" background layout="prev, pager, next" :total="total"
...@@ -218,6 +218,7 @@ const handleToReportDetail = item => { ...@@ -218,6 +218,7 @@ const handleToReportDetail = item => {
.main-content { .main-content {
display: flex; display: flex;
gap: 16px; gap: 16px;
margin-bottom: 80px;
.left { .left {
width: 360px; width: 360px;
...@@ -359,11 +360,10 @@ const handleToReportDetail = item => { ...@@ -359,11 +360,10 @@ const handleToReportDetail = item => {
.right { .right {
width: 1284px; width: 1284px;
height: 1377px;
.card-box { .card-box {
width: 1226px;
height: 1248px;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
......
...@@ -219,6 +219,7 @@ const handleToReportDetail = item => { ...@@ -219,6 +219,7 @@ const handleToReportDetail = item => {
.main-content { .main-content {
display: flex; display: flex;
gap: 16px; gap: 16px;
margin-bottom: 80px;
.left { .left {
width: 360px; width: 360px;
...@@ -359,12 +360,10 @@ const handleToReportDetail = item => { ...@@ -359,12 +360,10 @@ const handleToReportDetail = item => {
} }
.right { .right {
width: 1284px;
height: 1377px;
.card-box { .card-box {
width: 1226px;
height: 1248px;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
......
...@@ -734,7 +734,7 @@ const handleClickPerson = async item => { ...@@ -734,7 +734,7 @@ const handleClickPerson = async item => {
} }
}); });
window.open(route.href, "_blank"); window.open(route.href, "_blank");
} else { } else {
ElMessage.warning("找不到当前人员的类型值!"); ElMessage.warning("找不到当前人员的类型值!");
...@@ -819,7 +819,7 @@ onMounted(() => { ...@@ -819,7 +819,7 @@ onMounted(() => {
display: flex; display: flex;
margin-top: 12px; margin-top: 12px;
width: 332px; width: 332px;
height: 24px;
margin-left: 34px; margin-left: 34px;
.item-left { .item-left {
...@@ -836,7 +836,7 @@ onMounted(() => { ...@@ -836,7 +836,7 @@ onMounted(() => {
.item-right { .item-right {
width: 240px; width: 240px;
height: 24px;
color: rgba(59, 65, 75, 1); color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-size: 16px; font-size: 16px;
......
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
</div> </div>
</div> </div>
<div class="right-footer"> <div class="right-footer">
<div class="info">{{ total }}政府报告</div> <div class="info">{{ total }}智库报告</div>
<div class="page-box"> <div class="page-box">
<el-pagination :page-size="12" background layout="prev, pager, next" :total="total" <el-pagination :page-size="12" background layout="prev, pager, next" :total="total"
@current-change="emit('page-change', $event)" :current-page="currentPage" /> @current-change="emit('page-change', $event)" :current-page="currentPage" />
...@@ -198,8 +198,7 @@ const formatDate = (str) => { ...@@ -198,8 +198,7 @@ const formatDate = (str) => {
.card-box { .card-box {
width: 1226px; width: 1226px;
max-height: 1248px;
min-height: 616px;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
gap: 16px 16px; gap: 16px 16px;
......
...@@ -54,7 +54,7 @@ ...@@ -54,7 +54,7 @@
</div> </div>
</div> </div>
<div class="right-footer"> <div class="right-footer">
<div class="info">{{ total }}智库报告</div> <div class="info">{{ total }}调查项目</div>
<div class="page-box"> <div class="page-box">
<el-pagination :page-size="12" background layout="prev, pager, next" :total="total" <el-pagination :page-size="12" background layout="prev, pager, next" :total="total"
@current-change="emit('page-change', $event)" :current-page="currentPage" /> @current-change="emit('page-change', $event)" :current-page="currentPage" />
...@@ -174,8 +174,7 @@ const handleTimeGroupChange = (val) => { ...@@ -174,8 +174,7 @@ const handleTimeGroupChange = (val) => {
.card-box { .card-box {
width: 1226px; width: 1226px;
max-height: 1248px;
min-height: 616px;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
gap: 16px 16px; gap: 16px 16px;
......
...@@ -87,7 +87,7 @@ ...@@ -87,7 +87,7 @@
</div> </div>
<div class="right-footer"> <div class="right-footer">
<div class="info"> <div class="info">
{{ hearingData.length }}智库报告 {{ hearingData.length }}国会听证会
</div> </div>
<div class="page-box"> <div class="page-box">
<el-pagination :page-size="pageSize" background layout="prev, pager, next" :total="total" <el-pagination :page-size="pageSize" background layout="prev, pager, next" :total="total"
...@@ -193,193 +193,193 @@ const handlePageChange = page => { ...@@ -193,193 +193,193 @@ const handlePageChange = page => {
width: 1600px; width: 1600px;
display: flex; display: flex;
gap: 16px; gap: 16px;
}
.left {
width: 360px;
height: 100%;
padding-bottom: 24px;
box-sizing: border-box;
border: 1px solid rgba(234, 236, 238, 1);
border-radius: 10px;
box-shadow: 0px 0px 20px 0px rgba(94, 95, 95, 0.1);
background: rgba(255, 255, 255, 1);
position: relative;
}
.select-box-header {
display: flex;
gap: 17px;
.icon { .left {
margin-top: 4px; width: 360px;
width: 8px; height: 100%;
height: 16px; padding-bottom: 24px;
background: var(--color-main-active); box-sizing: border-box;
border-radius: 0 4px 4px 0; border: 1px solid rgba(234, 236, 238, 1);
} border-radius: 10px;
box-shadow: 0px 0px 20px 0px rgba(94, 95, 95, 0.1);
.title { background: rgba(255, 255, 255, 1);
height: 24px; position: relative;
color: var(--color-main-active);
font-family: "Source Han Sans CN";
font-size: 16px;
font-weight: 700;
line-height: 24px;
letter-spacing: 1px;
text-align: left;
} }
}
.select-research-box { .select-box-header {
width: 360px; display: flex;
height: 284px; gap: 17px;
margin-top: 16px;
}
.select-time-box {
margin-top: 16px;
width: 360px;
}
.select-hearing-box {
margin-top: 16px;
width: 360px;
}
.select-main {
margin-left: 24px;
margin-top: 12px;
.checkbox-group { .icon {
display: grid; margin-top: 4px;
grid-template-columns: repeat(2, 160px); width: 8px;
gap: 8px 4px; height: 16px;
background: var(--color-main-active);
border-radius: 0 4px 4px 0;
}
.filter-checkbox { .title {
width: 160px;
height: 24px; height: 24px;
margin-right: 0 !important; color: var(--color-main-active);
font-family: "Source Han Sans CN";
font-size: 16px;
font-weight: 700;
line-height: 24px;
letter-spacing: 1px;
text-align: left;
} }
} }
.hearing-grid { .select-research-box {
grid-template-columns: 160px; width: 360px;
width: 259px; height: 284px;
gap: 4px; margin-top: 16px;
} }
}
.right { .select-time-box {
width: 1224px; margin-top: 16px;
width: 360px;
}
.card-box { .select-hearing-box {
width: 100%; margin-top: 16px;
width: 360px;
}
display: flex; .select-main {
background: rgba(255, 255, 255, 1); margin-left: 24px;
box-sizing: border-box; margin-top: 12px;
border: 1px solid rgba(234, 236, 238, 1);
border-radius: 10px;
box-shadow: 0px 0px 20px 0px rgba(94, 95, 95, 0.1);
padding-right: 36px;
height: 100%;
.card-content { .checkbox-group {
width: 1211px; display: grid;
grid-template-columns: repeat(2, 160px);
gap: 8px 4px;
margin-top: 33px; .filter-checkbox {
margin-left: 37px; width: 160px;
padding-bottom: 27px; height: 24px;
margin-right: 0 !important;
}
}
.hearing-grid {
grid-template-columns: 160px;
width: 259px;
gap: 4px;
} }
} }
.right {
width: 1224px;
}
.right-footer { .card-box {
margin-top: 43px; width: 100%;
display: flex;
justify-content: space-between;
.info {
height: 19px;
color: rgba(132, 136, 142, 1);
font-family: Microsoft YaHei;
font-size: 14px;
font-weight: 400;
line-height: 18px;
letter-spacing: 0px;
text-align: left;
}
}
.card-item { display: flex;
width: 100%; background: rgba(255, 255, 255, 1);
height: 77px; box-sizing: border-box;
display: flex; border: 1px solid rgba(234, 236, 238, 1);
border-radius: 10px;
box-shadow: 0px 0px 20px 0px rgba(94, 95, 95, 0.1);
padding-right: 36px;
.card-content {
width: 1211px;
.card-item-img { margin-top: 33px;
width: 56px; margin-left: 37px;
height: 77px; padding-bottom: 27px;
margin-right: 22px;
flex-shrink: 0; }
}
.right-footer {
margin-top: 43px;
display: flex;
justify-content: space-between;
.info {
height: 19px;
color: rgba(132, 136, 142, 1);
font-family: Microsoft YaHei;
font-size: 14px;
font-weight: 400;
line-height: 18px;
letter-spacing: 0px;
text-align: left;
}
}
} }
.card-item-text {
.card-item {
width: 100%;
height: 77px;
display: flex; display: flex;
flex-direction: column;
.card-item-title {
color: rgb(59, 65, 75); .card-item-img {
font-family: "Source Han Sans CN"; width: 56px;
font-size: 18px; height: 77px;
font-weight: 700; margin-right: 22px;
line-height: 22px; flex-shrink: 0;
margin-bottom: 2px;
display: inline-flex;
cursor: pointer;
} }
.card-item-time { .card-item-text {
color: rgb(95, 101, 108);
font-family: "Source Han Sans CN";
font-size: 14px;
font-weight: 400;
line-height: 22px;
margin-bottom: 7px;
text-align: left;
display: inline-flex;
.card-open-image {
width: 16px; display: flex;
height: 16px; flex-direction: column;
margin-left: 9px;
margin-top: 3px; .card-item-title {
color: rgb(59, 65, 75);
font-family: "Source Han Sans CN";
font-size: 18px;
font-weight: 700;
line-height: 22px;
margin-bottom: 2px;
display: inline-flex;
cursor: pointer; cursor: pointer;
} }
}
.card-item-category { .card-item-time {
gap: 8px; color: rgb(95, 101, 108);
height: 24px; font-family: "Source Han Sans CN";
display: flex; font-size: 14px;
font-weight: 400;
line-height: 22px;
margin-bottom: 7px;
text-align: left;
display: inline-flex;
.card-open-image {
width: 16px;
height: 16px;
margin-left: 9px;
margin-top: 3px;
cursor: pointer;
}
}
.card-item-category {
gap: 8px;
height: 24px;
display: flex;
}
} }
} }
}
.divider { .divider {
height: 1px; height: 1px;
background: rgb(234, 236, 238); background: rgb(234, 236, 238);
margin: 16px 0; margin: 16px 0;
}
} }
</style> </style>
...@@ -81,7 +81,7 @@ ...@@ -81,7 +81,7 @@
</div> </div>
</div> </div>
<div class="right-footer"> <div class="right-footer">
<div class="info">{{ total }}智库报告</div> <div class="info">{{ total }}政策建议</div>
<div class="page-box"> <div class="page-box">
<el-pagination :page-size="pageSize" background layout="prev, pager, next" :total="total" <el-pagination :page-size="pageSize" background layout="prev, pager, next" :total="total"
@current-change="p => emit('page-change', p)" :current-page="currentPage" /> @current-change="p => emit('page-change', p)" :current-page="currentPage" />
...@@ -298,7 +298,7 @@ const handleYearGroupChange = (val) => { ...@@ -298,7 +298,7 @@ const handleYearGroupChange = (val) => {
.right { .right {
width: 1224px; width: 1224px;
height: 1377px;
.card-box { .card-box {
width: 100%; width: 100%;
...@@ -316,61 +316,26 @@ const handleYearGroupChange = (val) => { ...@@ -316,61 +316,26 @@ const handleYearGroupChange = (val) => {
height: 1067px; height: 1067px;
margin-top: 33px; margin-top: 33px;
margin-left: 37px; margin-left: 37px;
}
}
.card-item {
width: 100%;
height: 100%;
display: flex;
.divider {
height: 1px;
background: rgb(234, 236, 238);
margin: 16px 0;
}
.card-item-img { .card-item {
width: 56px;
height: 77px;
margin-right: 22px;
flex-shrink: 0;
img {
width: 100%; width: 100%;
height: 100%; height: 100%;
} display: flex;
}
.card-item-text {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
gap: 7px;
.card-item-title {
color: rgb(59, 65, 75);
font-family: "Source Han Sans CN";
font-size: 18px;
font-weight: 700;
line-height: 22px;
display: inline-flex;
}
.card-item-time {
color: rgb(95, 101, 108);
font-family: "Source Han Sans CN";
font-size: 14px;
font-weight: 400;
line-height: 22px;
text-align: left;
display: inline-flex;
.card-open-image { .card-item-img {
width: 16px; width: 56px;
height: 16px; height: 77px;
margin-left: 9px; margin-right: 22px;
margin-top: 3px; flex-shrink: 0;
cursor: pointer;
img { img {
width: 100%; width: 100%;
...@@ -378,97 +343,141 @@ const handleYearGroupChange = (val) => { ...@@ -378,97 +343,141 @@ const handleYearGroupChange = (val) => {
} }
} }
.card-item-text {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
gap: 7px;
} .card-item-title {
color: rgb(59, 65, 75);
font-family: "Source Han Sans CN";
font-size: 18px;
font-weight: 700;
line-height: 22px;
display: inline-flex;
}
} .card-item-time {
color: rgb(95, 101, 108);
font-family: "Source Han Sans CN";
font-size: 14px;
font-weight: 400;
line-height: 22px;
.card-item-category { text-align: left;
gap: 8px; display: inline-flex;
height: 24px;
display: flex;
overflow: hidden;
white-space: nowrap;
}
.tag-box { .card-open-image {
width: 16px;
height: 16px;
margin-left: 9px;
margin-top: 3px;
cursor: pointer;
display: flex; img {
gap: 8px; width: 100%;
height: 100%;
.tag { }
height: 22px; }
padding: 0 8px;
box-sizing: border-box;
border: 1px solid rgba(230, 231, 232, 1);
border-radius: 4px;
background: rgba(247, 248, 249, 1);
color: rgba(95, 101, 108, 1);
font-family: Microsoft YaHei;
font-size: 14px;
font-weight: 400;
line-height: 20px;
}
}
.file-box {
display: flex; }
gap: 8px;
.file {
height: 32px;
display: flex; }
justify-content: center;
align-items: center;
gap: 12px;
border-radius: 4px;
background: rgba(246, 250, 255, 1);
padding-left: 8px;
padding-right: 8px;
.type {
height: 22px;
padding: 0 4px;
border-radius: 4px;
background: rgba(231, 243, 255, 1);
color: rgba(5, 95, 194, 1);
font-family: "Source Han Sans CN";
font-size: 14px;
font-weight: 400;
line-height: 22px;
.card-item-category {
gap: 8px;
height: 24px;
display: flex;
overflow: hidden;
white-space: nowrap;
} }
.title { .tag-box {
color: rgba(5, 95, 194, 1);
font-family: "Source Han Sans CN";
font-size: 16px;
font-weight: 400;
line-height: 24px;
display: flex;
gap: 8px;
.tag {
height: 22px;
padding: 0 8px;
box-sizing: border-box;
border: 1px solid rgba(230, 231, 232, 1);
border-radius: 4px;
background: rgba(247, 248, 249, 1);
color: rgba(95, 101, 108, 1);
font-family: Microsoft YaHei;
font-size: 14px;
font-weight: 400;
line-height: 20px;
}
} }
.more { .file-box {
width: 20px;
height: 20px;
display: flex;
margin-top: 2px;
cursor: pointer;
.img { display: flex;
width: 100%; gap: 8px;
height: 100%;
.file {
height: 32px;
display: flex;
justify-content: center;
align-items: center;
gap: 12px;
border-radius: 4px;
background: rgba(246, 250, 255, 1);
padding-left: 8px;
padding-right: 8px;
.type {
height: 22px;
padding: 0 4px;
border-radius: 4px;
background: rgba(231, 243, 255, 1);
color: rgba(5, 95, 194, 1);
font-family: "Source Han Sans CN";
font-size: 14px;
font-weight: 400;
line-height: 22px;
}
.title {
color: rgba(5, 95, 194, 1);
font-family: "Source Han Sans CN";
font-size: 16px;
font-weight: 400;
line-height: 24px;
}
.more {
width: 20px;
height: 20px;
display: flex;
margin-top: 2px;
cursor: pointer;
.img {
width: 100%;
height: 100%;
}
}
} }
} }
} }
} }
} }
.right-footer { .right-footer {
margin-top: 43px; margin-top: 43px;
display: flex; display: flex;
...@@ -487,11 +496,4 @@ const handleYearGroupChange = (val) => { ...@@ -487,11 +496,4 @@ const handleYearGroupChange = (val) => {
} }
} }
} }
.divider {
height: 1px;
background: rgb(234, 236, 238);
margin: 16px 0;
}
</style> </style>
...@@ -4243,7 +4243,7 @@ onBeforeUnmount(() => { ...@@ -4243,7 +4243,7 @@ onBeforeUnmount(() => {
.home-main-footer { .home-main-footer {
overflow: hidden; overflow: hidden;
background: rgba(247, 248, 249, 1); background: rgba(247, 248, 249, 1);
height: 1700px;
.home-main-footer-header { .home-main-footer-header {
width: 1600px; width: 1600px;
...@@ -4332,6 +4332,7 @@ onBeforeUnmount(() => { ...@@ -4332,6 +4332,7 @@ onBeforeUnmount(() => {
width: 1600px; width: 1600px;
display: flex; display: flex;
gap: 16px; gap: 16px;
margin-bottom: 140px;
.left { .left {
width: 360px; width: 360px;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论