提交 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) : "";
if (!to.path.startsWith('/decreeLayout/')) {
document.title = queryTitle || window.sessionStorage.getItem(storageKey) || to.meta.title; 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");
}; };
......
...@@ -5,14 +5,14 @@ ...@@ -5,14 +5,14 @@
<div class="left-title"> <div class="left-title">
<img src="./assets/icon01.png" alt="" /> <img src="./assets/icon01.png" alt="" />
<div class="tit">资助领域分布情况</div> <div class="tit">资助领域分布情况</div>
<div :class="radio1 === true ? 'btn-select' : 'btn'" style=" right:250px;" @click="setRadio1(true)"> <div :class="radio1 === true ? 'btn-select' : 'btn'" style=" right:254px;" @click="setRadio1(true)">
资助经费 资助经费
</div> </div>
<div :class="radio1 === false ? 'btn-select' : 'btn'" style=" right: 150px;" @click="setRadio1(false)"> <div :class="radio1 === false ? 'btn-select' : 'btn'" style=" right: 166px;" @click="setRadio1(false)">
资助项目 资助项目
</div> </div>
<el-select v-model="value1" placeholder="Select" class="select" style=" right: 31px;" <el-select v-model="value1" placeholder="Select" class="select" popper-class="datasub-select-popper"
@change="handleLeft1YearChange"> @change="handleLeft1YearChange">
<el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" /> <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
...@@ -39,7 +39,8 @@ ...@@ -39,7 +39,8 @@
<div class="left-title"> <div class="left-title">
<img src="./assets/icon03.png" alt="" /> <img src="./assets/icon03.png" alt="" />
<div class="tit">机构资助领域情况</div> <div class="tit">机构资助领域情况</div>
<el-select v-model="value2" placeholder="Select" class="select" @change="handleGetOrgFundsArea"> <el-select v-model="value2" placeholder="Select" class="select" popper-class="datasub-select-popper"
@change="handleGetOrgFundsArea">
<el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" /> <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
</div> </div>
...@@ -65,13 +66,14 @@ ...@@ -65,13 +66,14 @@
<div class="right-title"> <div class="right-title">
<img src="./assets/icon02.png" alt="" /> <img src="./assets/icon02.png" alt="" />
<div class="tit">资助经费变化情况</div> <div class="tit">资助经费变化情况</div>
<div :class="radio2 === true ? 'btn-select' : 'btn'" style=" right:250px;" @click="setRadio2(true)"> <div :class="radio2 === true ? 'btn-select' : 'btn'" style=" right:254px;" @click="setRadio2(true)">
资助经费 资助经费
</div> </div>
<div :class="radio2 === false ? 'btn-select' : 'btn'" style=" right: 150px;" @click="setRadio2(false)"> <div :class="radio2 === false ? 'btn-select' : 'btn'" style=" right: 166px;" @click="setRadio2(false)">
资助项目 资助项目
</div> </div>
<el-select v-model="value" placeholder="Select" class="select" @change="handleRight1RangeChange"> <el-select v-model="value" placeholder="Select" class="select" popper-class="datasub-select-popper"
@change="handleRight1RangeChange">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" /> <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
</div> </div>
...@@ -98,7 +100,8 @@ ...@@ -98,7 +100,8 @@
<div class="right-title"> <div class="right-title">
<img src="./assets/icon04.png" alt="" /> <img src="./assets/icon04.png" alt="" />
<div class="tit">项目资助强度分布</div> <div class="tit">项目资助强度分布</div>
<el-select v-model="value3" placeholder="Select" class="select" @change="handleRight2YearChange"> <el-select v-model="value3" placeholder="Select" class="select" popper-class="datasub-select-popper"
@change="handleRight2YearChange">
<el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" /> <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
</div> </div>
...@@ -243,6 +246,7 @@ const handleLeft1YearChange = () => { ...@@ -243,6 +246,7 @@ const handleLeft1YearChange = () => {
}; };
// 资助体系v2.0:资助领域分布情况:资助经费 // 资助体系v2.0:资助领域分布情况:资助经费
const handleGetFundField = async () => { const handleGetFundField = async () => {
invalidateAiContent(aiContentLeft1, isAiLoadingLeft1, left1AiSeq);
const seq = ++left1FundReqSeq; const seq = ++left1FundReqSeq;
left1FundLoading.value = true; left1FundLoading.value = true;
try { try {
...@@ -286,6 +290,7 @@ const handleGetFundField = async () => { ...@@ -286,6 +290,7 @@ const handleGetFundField = async () => {
//资助体系v2.0:资助领域分布情况:资助项目 //资助体系v2.0:资助领域分布情况:资助项目
const handleFindCountryProjectAreaList = async () => { const handleFindCountryProjectAreaList = async () => {
invalidateAiContent(aiContentLeft1, isAiLoadingLeft1, left1AiSeq);
const seq = ++left1ProjReqSeq; const seq = ++left1ProjReqSeq;
left1ProjLoading.value = true; left1ProjLoading.value = true;
try { try {
...@@ -444,6 +449,7 @@ const setRadio2 = (val) => { ...@@ -444,6 +449,7 @@ const setRadio2 = (val) => {
}; };
// 资助体系v2.0:资助经费变化情况:资助经费 // 资助体系v2.0:资助经费变化情况:资助经费
const handlegetCountryFundingChange = async () => { const handlegetCountryFundingChange = async () => {
invalidateAiContent(aiContentRight1, isAiLoadingRight1, right1AiSeq);
try { try {
right1FundLoading.value = true; right1FundLoading.value = true;
let params = { let params = {
...@@ -481,6 +487,7 @@ const handlegetCountryFundingChange = async () => { ...@@ -481,6 +487,7 @@ const handlegetCountryFundingChange = async () => {
}; };
//资助体系v2.0:资助经费变化情况:资助项目 //资助体系v2.0:资助经费变化情况:资助项目
const handlegetCountryFundProjectChange = async () => { const handlegetCountryFundProjectChange = async () => {
invalidateAiContent(aiContentRight1, isAiLoadingRight1, right1AiSeq);
try { try {
right1ProjLoading.value = true; right1ProjLoading.value = true;
let params = { let params = {
...@@ -526,6 +533,7 @@ const handleRight2YearChange = () => { ...@@ -526,6 +533,7 @@ const handleRight2YearChange = () => {
handlegetOrgFundStrength(); handlegetOrgFundStrength();
}; };
const handlegetOrgFundStrength = async () => { const handlegetOrgFundStrength = async () => {
invalidateAiContent(aiContentRight2, isAiLoadingRight2, right2AiSeq);
try { try {
let params = { let params = {
year: normalizeYearParam(value3.value) year: normalizeYearParam(value3.value)
...@@ -727,6 +735,19 @@ const isAiLoadingLeft2 = ref(false); ...@@ -727,6 +735,19 @@ const isAiLoadingLeft2 = ref(false);
const isAiLoadingRight1 = ref(false); const isAiLoadingRight1 = ref(false);
const isAiLoadingRight2 = ref(false); const isAiLoadingRight2 = ref(false);
const AI_LOADING_TEXT = "解读生成中…";
// 用于保证“切换筛选后只写入最新一次解读结果”
const left1AiSeq = ref(0);
const left2AiSeq = ref(0);
const right1AiSeq = ref(0);
const right2AiSeq = ref(0);
const invalidateAiContent = (targetRef, loadingRef, aiSeqRef) => {
aiSeqRef.value += 1;
loadingRef.value = false;
targetRef.value = AI_LOADING_TEXT;
};
const appendAiInterpretationChunk = (targetRef, chunk, loadingText = "解读生成中…") => { const appendAiInterpretationChunk = (targetRef, chunk, loadingText = "解读生成中…") => {
if (!chunk) return; if (!chunk) return;
const current = String(targetRef.value || ""); const current = String(targetRef.value || "");
...@@ -746,31 +767,39 @@ const getInterpretationTextFromChartResponse = (res) => { ...@@ -746,31 +767,39 @@ const getInterpretationTextFromChartResponse = (res) => {
); );
}; };
const fetchChartInterpretationOnce = async (payload, targetRef, loadingRef) => { const fetchChartInterpretationOnce = async (payload, targetRef, loadingRef, aiSeqRef) => {
if (loadingRef.value) return; if (loadingRef.value) return;
const hasValidContent = const hasValidContent =
targetRef.value && targetRef.value &&
targetRef.value !== "解读生成中…" && targetRef.value !== AI_LOADING_TEXT &&
targetRef.value !== "解读加载失败" && targetRef.value !== "解读加载失败" &&
targetRef.value !== "暂无图表数据"; targetRef.value !== "暂无图表数据";
if (hasValidContent) return; if (hasValidContent) return;
const localSeq = aiSeqRef.value;
loadingRef.value = true; loadingRef.value = true;
targetRef.value = "解读生成中…"; targetRef.value = AI_LOADING_TEXT;
try { try {
const res = await getChartAnalysis( const res = await getChartAnalysis(
{ text: JSON.stringify(payload) }, { text: JSON.stringify(payload) },
{ {
onChunk: (chunk) => appendAiInterpretationChunk(targetRef, chunk) onChunk: (chunk) => {
if (aiSeqRef.value !== localSeq) return;
appendAiInterpretationChunk(targetRef, chunk, AI_LOADING_TEXT);
}
} }
); );
if (aiSeqRef.value !== localSeq) return;
const text = getInterpretationTextFromChartResponse(res); const text = getInterpretationTextFromChartResponse(res);
targetRef.value = text || targetRef.value || "未返回有效解读内容"; targetRef.value = text || targetRef.value || "未返回有效解读内容";
} catch (e) { } catch (e) {
if (aiSeqRef.value !== localSeq) return;
console.error("图表解读请求失败", e); console.error("图表解读请求失败", e);
targetRef.value = "解读加载失败"; targetRef.value = "解读加载失败";
} finally { } finally {
loadingRef.value = false; if (aiSeqRef.value === localSeq) loadingRef.value = false;
} }
}; };
...@@ -819,7 +848,7 @@ const handleSwitchAiLeft1 = async (val) => { ...@@ -819,7 +848,7 @@ const handleSwitchAiLeft1 = async (val) => {
aiContentLeft1.value = "暂无图表数据"; aiContentLeft1.value = "暂无图表数据";
return; return;
} }
await fetchChartInterpretationOnce(payload, aiContentLeft1, isAiLoadingLeft1); await fetchChartInterpretationOnce(payload, aiContentLeft1, isAiLoadingLeft1, left1AiSeq);
}; };
const handleSwitchAiLeft2 = async (val) => { const handleSwitchAiLeft2 = async (val) => {
isShowAiContentLeft2.value = val; isShowAiContentLeft2.value = val;
...@@ -829,7 +858,7 @@ const handleSwitchAiLeft2 = async (val) => { ...@@ -829,7 +858,7 @@ const handleSwitchAiLeft2 = async (val) => {
aiContentLeft2.value = "暂无图表数据"; aiContentLeft2.value = "暂无图表数据";
return; return;
} }
await fetchChartInterpretationOnce(payload, aiContentLeft2, isAiLoadingLeft2); await fetchChartInterpretationOnce(payload, aiContentLeft2, isAiLoadingLeft2, left2AiSeq);
}; };
const handleSwitchAiRight1 = async (val) => { const handleSwitchAiRight1 = async (val) => {
isShowAiContentRight1.value = val; isShowAiContentRight1.value = val;
...@@ -839,7 +868,7 @@ const handleSwitchAiRight1 = async (val) => { ...@@ -839,7 +868,7 @@ const handleSwitchAiRight1 = async (val) => {
aiContentRight1.value = "暂无图表数据"; aiContentRight1.value = "暂无图表数据";
return; return;
} }
await fetchChartInterpretationOnce(payload, aiContentRight1, isAiLoadingRight1); await fetchChartInterpretationOnce(payload, aiContentRight1, isAiLoadingRight1, right1AiSeq);
}; };
const handleSwitchAiRight2 = async (val) => { const handleSwitchAiRight2 = async (val) => {
isShowAiContentRight2.value = val; isShowAiContentRight2.value = val;
...@@ -849,7 +878,7 @@ const handleSwitchAiRight2 = async (val) => { ...@@ -849,7 +878,7 @@ const handleSwitchAiRight2 = async (val) => {
aiContentRight2.value = "暂无图表数据"; aiContentRight2.value = "暂无图表数据";
return; return;
} }
await fetchChartInterpretationOnce(payload, aiContentRight2, isAiLoadingRight2); await fetchChartInterpretationOnce(payload, aiContentRight2, isAiLoadingRight2, right2AiSeq);
}; };
...@@ -970,6 +999,7 @@ const left2RawSankey = ref([]); ...@@ -970,6 +999,7 @@ const left2RawSankey = ref([]);
const hasLeft2ChartData = computed(() => isNonEmptyArray(left2RawSankey.value)); const hasLeft2ChartData = computed(() => isNonEmptyArray(left2RawSankey.value));
// 机构资助领域情况 // 机构资助领域情况
const handleGetOrgFundsArea = async () => { const handleGetOrgFundsArea = async () => {
invalidateAiContent(aiContentLeft2, isAiLoadingLeft2, left2AiSeq);
try { try {
let params = { let params = {
year: normalizeYearParam(value2.value) year: normalizeYearParam(value2.value)
...@@ -1200,10 +1230,20 @@ onMounted(() => { ...@@ -1200,10 +1230,20 @@ onMounted(() => {
.select { .select {
width: 120px; width: 120px;
height: 28px; height: 28px;
padding: 0px 12px; /* 统一四个下拉框:总宽 120px(含内边距),不影响 right/left 定位与按钮间距 */
box-sizing: border-box;
/* padding 放到 el-select__wrapper,避免内部触发器被压缩到 96px */
padding: 0;
position: absolute; position: absolute;
top: 11px; top: 11px;
right: 31px; right: 38px;
}
.select :deep(.el-select__wrapper) {
min-height: 28px;
box-sizing: border-box;
padding: 0 12px;
} }
} }
...@@ -1280,16 +1320,27 @@ onMounted(() => { ...@@ -1280,16 +1320,27 @@ onMounted(() => {
padding: 0px 12px; padding: 0px 12px;
position: absolute; position: absolute;
top: 11px; top: 11px;
right: 163px;
} }
.select { .select {
width: 120px; width: 120px;
height: 28px; height: 28px;
padding: 0px 12px; /* 统一四个下拉框:总宽 120px(含内边距),不影响 right/left 定位与按钮间距 */
box-sizing: border-box;
/* padding 放到 el-select__wrapper,避免内部触发器被压缩到 96px */
padding: 0;
position: absolute; position: absolute;
top: 11px; top: 11px;
right: 31px; right: 38px;
}
.select :deep(.el-select__wrapper) {
min-height: 28px;
box-sizing: border-box;
padding: 0 12px;
} }
} }
...@@ -1393,12 +1444,18 @@ onMounted(() => { ...@@ -1393,12 +1444,18 @@ onMounted(() => {
} }
} }
/* 参考智库概览页下拉框:不改默认 hover/selected 底色,只给选项文字做左缩进 */
:global(.datasub-select-popper .el-select-dropdown__item) {
padding-left: 20px;
}
.btn { .btn {
position: absolute; position: absolute;
top: 11px; top: 11px;
/* 切换按钮 */ /* 切换按钮 */
width: 85px;
height: 28px; height: 28px;
/* 自动布局 */ /* 自动布局 */
display: flex; display: flex;
...@@ -1413,7 +1470,7 @@ onMounted(() => { ...@@ -1413,7 +1470,7 @@ onMounted(() => {
border: 1px solid rgba(230, 231, 232, 1); border: 1px solid rgba(230, 231, 232, 1);
border-radius: 4px; border-radius: 4px;
background: rgba(255, 255, 255, 1); background: rgba(255, 255, 255, 1);
font-family: Microsoft YaHei; font-family: "Source Han Sans CN";
font-style: Regular; font-style: Regular;
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;
...@@ -1426,7 +1483,7 @@ onMounted(() => { ...@@ -1426,7 +1483,7 @@ onMounted(() => {
position: absolute; position: absolute;
top: 11px; top: 11px;
/* 切换按钮 */ /* 切换按钮 */
width: 85px;
height: 28px; height: 28px;
/* 自动布局 */ /* 自动布局 */
display: flex; display: flex;
...@@ -1440,7 +1497,7 @@ onMounted(() => { ...@@ -1440,7 +1497,7 @@ onMounted(() => {
border: 1px solid rgba(5, 95, 194, 1); border: 1px solid rgba(5, 95, 194, 1);
border-radius: 4px; border-radius: 4px;
background: rgba(231, 243, 255, 1); background: rgba(231, 243, 255, 1);
font-family: Microsoft YaHei; font-family: "Source Han Sans CN";
font-style: Regular; font-style: Regular;
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;
......
...@@ -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) {
......
...@@ -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;
......
...@@ -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,9 +193,9 @@ const handlePageChange = page => { ...@@ -193,9 +193,9 @@ const handlePageChange = page => {
width: 1600px; width: 1600px;
display: flex; display: flex;
gap: 16px; gap: 16px;
}
.left {
.left {
width: 360px; width: 360px;
height: 100%; height: 100%;
padding-bottom: 24px; padding-bottom: 24px;
...@@ -205,9 +205,9 @@ const handlePageChange = page => { ...@@ -205,9 +205,9 @@ const handlePageChange = page => {
box-shadow: 0px 0px 20px 0px rgba(94, 95, 95, 0.1); box-shadow: 0px 0px 20px 0px rgba(94, 95, 95, 0.1);
background: rgba(255, 255, 255, 1); background: rgba(255, 255, 255, 1);
position: relative; position: relative;
} }
.select-box-header { .select-box-header {
display: flex; display: flex;
gap: 17px; gap: 17px;
...@@ -230,26 +230,26 @@ const handlePageChange = page => { ...@@ -230,26 +230,26 @@ const handlePageChange = page => {
letter-spacing: 1px; letter-spacing: 1px;
text-align: left; text-align: left;
} }
} }
.select-research-box { .select-research-box {
width: 360px; width: 360px;
height: 284px; height: 284px;
margin-top: 16px; margin-top: 16px;
} }
.select-time-box { .select-time-box {
margin-top: 16px; margin-top: 16px;
width: 360px; width: 360px;
} }
.select-hearing-box { .select-hearing-box {
margin-top: 16px; margin-top: 16px;
width: 360px; width: 360px;
} }
.select-main { .select-main {
margin-left: 24px; margin-left: 24px;
margin-top: 12px; margin-top: 12px;
...@@ -270,9 +270,9 @@ const handlePageChange = page => { ...@@ -270,9 +270,9 @@ const handlePageChange = page => {
width: 259px; width: 259px;
gap: 4px; gap: 4px;
} }
} }
.right { .right {
width: 1224px; width: 1224px;
...@@ -286,7 +286,6 @@ const handlePageChange = page => { ...@@ -286,7 +286,6 @@ const handlePageChange = page => {
border-radius: 10px; border-radius: 10px;
box-shadow: 0px 0px 20px 0px rgba(94, 95, 95, 0.1); box-shadow: 0px 0px 20px 0px rgba(94, 95, 95, 0.1);
padding-right: 36px; padding-right: 36px;
height: 100%;
.card-content { .card-content {
width: 1211px; width: 1211px;
...@@ -298,10 +297,7 @@ const handlePageChange = page => { ...@@ -298,10 +297,7 @@ const handlePageChange = page => {
} }
} }
.right-footer {
}
.right-footer {
margin-top: 43px; margin-top: 43px;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
...@@ -316,9 +312,12 @@ const handlePageChange = page => { ...@@ -316,9 +312,12 @@ const handlePageChange = page => {
letter-spacing: 0px; letter-spacing: 0px;
text-align: left; text-align: left;
} }
} }
}
.card-item { .card-item {
width: 100%; width: 100%;
height: 77px; height: 77px;
display: flex; display: flex;
...@@ -375,11 +374,12 @@ const handlePageChange = page => { ...@@ -375,11 +374,12 @@ const handlePageChange = page => {
} }
} }
} }
.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,7 +316,12 @@ const handleYearGroupChange = (val) => { ...@@ -316,7 +316,12 @@ const handleYearGroupChange = (val) => {
height: 1067px; height: 1067px;
margin-top: 33px; margin-top: 33px;
margin-left: 37px; margin-left: 37px;
}
.divider {
height: 1px;
background: rgb(234, 236, 238);
margin: 16px 0;
} }
.card-item { .card-item {
...@@ -468,6 +473,10 @@ const handleYearGroupChange = (val) => { ...@@ -468,6 +473,10 @@ const handleYearGroupChange = (val) => {
} }
} }
} }
}
}
.right-footer { .right-footer {
margin-top: 43px; margin-top: 43px;
...@@ -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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论