提交 0a485467 authored 作者: 刘宇琪's avatar 刘宇琪

Merge branch 'pre' into liuyuqi

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