提交 eba3a093 authored 作者: coderBryanFu's avatar coderBryanFu

政令资源库请求修改

......@@ -1646,6 +1646,7 @@
"resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz",
"integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"@types/lodash": "*"
}
......@@ -1762,6 +1763,7 @@
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.21.tgz",
"integrity": "sha512-SXlyk6I5eUGBd2v8Ie7tF6ADHE9kCR6mBEuPyH1nUZ0h6Xx6nZI29i12sJKQmzbDyr2tUHMhhTt51Z6blbkTTQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"@babel/parser": "^7.28.3",
"@vue/compiler-core": "3.5.21",
......@@ -2501,6 +2503,7 @@
"resolved": "https://registry.npmmirror.com/cytoscape/-/cytoscape-3.33.1.tgz",
"integrity": "sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ==",
"license": "MIT",
"peer": true,
"engines": {
"node": ">=0.10"
}
......@@ -2898,6 +2901,7 @@
"resolved": "https://registry.npmmirror.com/d3-selection/-/d3-selection-3.0.0.tgz",
"integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
"license": "ISC",
"peer": true,
"engines": {
"node": ">=12"
}
......@@ -3155,6 +3159,7 @@
"resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.6.0.tgz",
"integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==",
"license": "Apache-2.0",
"peer": true,
"dependencies": {
"tslib": "2.3.0",
"zrender": "5.6.1"
......@@ -4388,13 +4393,15 @@
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/lodash-es": {
"version": "4.17.21",
"resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz",
"integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/lodash-unified": {
"version": "1.0.3",
......@@ -4442,6 +4449,7 @@
"resolved": "https://registry.npmmirror.com/markdown-it/-/markdown-it-14.1.0.tgz",
"integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==",
"license": "MIT",
"peer": true,
"dependencies": {
"argparse": "^2.0.1",
"entities": "^4.4.0",
......@@ -5701,6 +5709,7 @@
"integrity": "sha512-BgLRGy7tNS9H66aIMASq1qSYbAAJV6Z6WR4QYTvj5FgF15rZ/ympT1uixHXwzbZUBDbkvqUI1KR0fH1FhMaQ9w==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@types/estree": "1.0.8"
},
......@@ -6634,6 +6643,7 @@
"integrity": "sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"esbuild": "^0.21.3",
"postcss": "^8.4.43",
......@@ -6693,6 +6703,7 @@
"resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.21.tgz",
"integrity": "sha512-xxf9rum9KtOdwdRkiApWL+9hZEMWE90FHh8yS1+KJAiWYh+iGWV1FquPjoO9VUHQ+VIhsCXNNyZ5Sf4++RVZBA==",
"license": "MIT",
"peer": true,
"dependencies": {
"@vue/compiler-dom": "3.5.21",
"@vue/compiler-sfc": "3.5.21",
......
......@@ -64,6 +64,13 @@ export function getDecreeSummary(params) {
/**
* @param {id}
*/
// export function getDecreeReport(params) {
// return request({
// method: 'GET',
// url: `/api/administrativeOrderInfo/contentUrl/${params.id}`,
// })
// }
export function getDecreeReport(params) {
return request({
method: 'GET',
......
......@@ -198,6 +198,7 @@
'card-white': event.level === 'white',
'card-default': !event.level
}"
:style="event.noData ? 'opacity:0;' : ''"
@click="handleClickEventCard(event)"
>
<div class="card-mask" v-if="activeSanctionId && activeSanctionId !== event.sanctionId"></div>
......@@ -327,13 +328,46 @@ const getUSGovernmentSanctionHistoryData = async () => {
grouped[deptName].events.push({
date: item.endDate ? item.endDate.replace(/^(\d{4})-(\d{2})-(\d{2})$/, "$1年$2月$3日") : "",
time: item.endDate,
content: item.name || item.summary,
tags: item.techDomainList ? item.techDomainList.slice(0, 2) : [],
level: level,
sanctionId: item.sanctionId
});
});
timelineList.value = Object.values(grouped);
//统计完成后生成新的数组
let fArr = []
rawList.forEach((item)=>{
fArr.push(item.endDate)
})
let timeLine = Object.values(grouped);
//重新遍历timeLine,根据日期数组额外增加数据
timeLine.forEach((item) => {
// 根据日期数组构建空数据
const data = []
for (let i = 0; i < fArr.length; i++) {
const option = {
date: fArr[i],
noData: true
}
data.push(option)
}
item.events.forEach((ele) => {
for (let m = 0; m < data.length; m++) {
if(ele.time == data[m].date && data[m].noData){
data[m] = ele
data[m].noData = false
break
}
}
})
item.events = data
})
// timelineList.value = Object.values(grouped);
timelineList.value = timeLine
console.log("timelineList", timelineList.value);
initSlider();
......@@ -2020,6 +2054,10 @@ const prev = () => {
}
}
}
.event-no-card{
width: 240px;
height: 130px;
}
}
}
}
......
......@@ -57,15 +57,19 @@
<el-table-column prop="usScore" label="美国">
<template #default="scope">
<div style="display: flex">
<div class="progress-text">
<div class="rank">{{ "No." + scope.row.usRank }}</div>
<div class="score">{{ scope.row.usScore }}</div>
<div class="progress-text" style="width:90px;">
<div class="rank" v-show="scope.row.usScore != 0">{{ "No." + scope.row.usRank }}</div>
<div class="score" v-show="scope.row.usScore != 0">{{ scope.row.usScore }}</div>
</div>
<div class="progress-wrapper left">
<el-progress
:percentage="scope.row.usScore"
:stroke-width="20"
class="left-progress"
:class="{
cLead: scope.row.usScore == 0,
leftProgress: scope.row.usScore != 0
}"
:show-text="false"
/>
</div>
......@@ -80,15 +84,15 @@
:percentage="scope.row.chinaScore"
:stroke-width="20"
class="right-progress"
:class="{ cLead: scope.row.chinaRank < scope.row.usRank }"
:class="{ cLead: scope.row.chinaRank < scope.row.usRank && scope.row.chinaScore != 0}"
:show-text="false"
/>
</div>
<div class="progress-text" style="color: rgba(206, 79, 81, 1)">
<div class="rank" :class="{ cLeadRank: scope.row.chinaRank < scope.row.usRank }">
<div class="progress-text" style="color: rgba(206, 79, 81, 1);width:90px;">
<div class="rank" :class="{ cLeadRank: scope.row.chinaRank < scope.row.usRank }" v-show="scope.row.chinaScore != 0">
{{ "No." + scope.row.chinaRank }}
</div>
<div class="score" :class="{ cLeadScore: scope.row.chinaRank < scope.row.usRank }">
<div class="score" :class="{ cLeadScore: scope.row.chinaRank < scope.row.usRank }" v-show="scope.row.chinaScore != 0">
{{ scope.row.chinaScore }}
</div>
</div>
......
......@@ -155,6 +155,10 @@ const selectRelation = ref("相关度优先");
const keyword = ref("");
const tabList = ref([
{
name: "全部",
id: 100
},
{
name: "法案",
id: 1
......@@ -296,7 +300,7 @@ const handleSearch = async () => {
size: pageSize.value,
page: currentPage.value,
keyword: keyword.value, // "出口"
type: activeTabId.value,
type: activeTabId.value == 100 ? '' : activeTabId.value,
domains: selectedDomains.value
};
} else {
......@@ -476,6 +480,9 @@ onMounted(() => {
if (route.query && route.query.areaName) {
curArea.value = route.query.areaName;
switch (curArea.value) {
case "全部":
activeTabId.value = 100;
break;
case "法案":
activeTabId.value = 1;
break;
......@@ -503,6 +510,9 @@ onMounted(() => {
default:
activeTabId.value = 5;
}
} else {
curArea.value = "全部"
activeTabId.value = 100;
}
handleSearch();
});
......
......@@ -33,14 +33,15 @@
{{ "政令原文" }}
</div>
<div class="report-main">
<div class="left">
<div v-if="!reportUrl" class="noContent">{{ "中文原文暂无数据" }}</div>
<iframe v-else :src="reportUrl" style="border: none" width="100%" height="100%"> </iframe>
</div>
<div class="right">
<div v-if="!reportUrlEn" class="noContent">{{ "英文原文暂无数据" }}</div>
<iframe v-else :src="reportUrlEn" style="border: none" width="100%" height="100%"> </iframe>
</div>
<div v-if="!reportData.length" class="noContent">{{ "暂无数据" }}</div>
<template v-else>
<div v-for="(item, index) in reportData" :key="index" class="content-row">
<!-- 左侧:英文 -->
<div class="content-en">{{ item.contentEn }}</div>
<!-- 右侧:中文 -->
<div class="content-cn">{{ item.content }}</div>
</div>
</template>
</div>
</div>
</div>
......@@ -50,14 +51,13 @@
<script setup>
import { ref, onMounted } from "vue";
import { useRoute } from "vue-router";
import { getDecreeSummary } from "@/api/decree/introduction";
import { getDecreeReport } from "@/api/decree/introduction";
const route = useRoute();
const reportUrl = ref("");
const reportUrlEn = ref("");
// 修改为数组存储分段数据
const reportData = ref([]);
const summaryInfo = ref({});
......@@ -72,10 +72,10 @@ const handleGetSummary = async () => {
if (res.code === 200 && res.data) {
summaryInfo.value = res.data;
}
} catch (error) {}
} catch (error) { }
};
// 获取报告原文
// 获取报告原文 - 修改为获取分段数组
const handleGetReport = async () => {
const params = {
id: route.query.id
......@@ -85,10 +85,10 @@ const handleGetReport = async () => {
const res = await getDecreeReport(params);
console.log("报告原文", res);
if (res.code === 200 && res.data) {
reportUrl.value = res.data.content;
reportUrlEn.value = res.data.contentEn;
// 假设后端返回的是数组格式,如果返回的是对象包含数组,请改为 res.data.list
reportData.value = res.data || [];
}
} catch (error) {}
} catch (error) { }
};
onMounted(() => {
......@@ -106,6 +106,7 @@ onMounted(() => {
.layout-main {
width: 100%;
.layout-main-header {
height: 120px;
background: rgba(255, 255, 255, 1);
......@@ -119,26 +120,32 @@ onMounted(() => {
border-top: 1px solid rgba(234, 236, 238, 1);
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
background: rgba(255, 255, 255, 1);
.layout-main-header-left-box {
width: 1100px;
margin-left: 160px;
margin-top: 13px;
.left-box-top {
height: 64px;
display: flex;
.icon {
width: 122px;
height: 64px;
border-radius: 4px;
overflow: hidden;
img {
width: 100%;
height: 100%;
}
}
.info {
width: 700px;
margin-left: 9px;
.info-box1 {
width: 700px;
color: rgba(59, 65, 75, 1);
......@@ -153,6 +160,7 @@ onMounted(() => {
text-overflow: ellipsis;
white-space: nowrap;
}
.info-box2 {
margin-top: 5px;
height: 22px;
......@@ -166,21 +174,25 @@ onMounted(() => {
text-align: left;
display: flex;
margin-left: -10px;
.info-box2-item {
padding: 0 10px;
}
.item1 {
width: 100px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.item2 {
width: 180px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.item3 {
width: 420px;
overflow: hidden;
......@@ -190,25 +202,30 @@ onMounted(() => {
}
}
}
.left-box-bottom {
display: flex;
height: 40px;
margin-top: 21px;
.left-box-bottom-item {
display: flex;
margin-right: 32px;
margin-top: 3px;
height: 35px;
cursor: pointer;
.icon {
margin-top: 4px;
width: 16px;
height: 16px;
img {
width: 100%;
height: 100%;
}
}
.name {
height: 24px;
color: rgba(59, 65, 75, 1);
......@@ -220,20 +237,24 @@ onMounted(() => {
text-align: left;
margin-left: 3px;
}
.nameActive {
color: var(--color-main-active);
font-weight: 700;
}
}
.leftBoxBottomItemActive {
border-bottom: 3px solid var(--color-main-active);
}
}
}
.layout-main-header-right-box {
width: 300px;
margin-right: 150px;
margin-top: 19px;
.right-box-top {
.time {
height: 24px;
......@@ -246,6 +267,7 @@ onMounted(() => {
letter-spacing: 0px;
text-align: right;
}
.name {
height: 24px;
line-height: 24px;
......@@ -258,12 +280,14 @@ onMounted(() => {
text-align: right;
}
}
.right-box-bottom {
margin-top: 24px;
text-align: right;
display: flex;
justify-content: flex-end;
gap: 8px;
.btn {
width: 120px;
height: 36px;
......@@ -276,14 +300,17 @@ onMounted(() => {
gap: 8px;
align-items: center;
cursor: pointer;
.icon {
width: 16px;
height: 16px;
img {
width: 100%;
height: 100%;
}
}
.text {
width: 64px;
height: 24px;
......@@ -297,6 +324,7 @@ onMounted(() => {
text-align: left;
}
}
.btn-active {
width: 120px;
height: 36px;
......@@ -307,14 +335,17 @@ onMounted(() => {
align-items: center;
gap: 8px;
cursor: pointer;
.icon-active {
width: 16px;
height: 16px;
img {
width: 100%;
height: 100%;
}
}
.text-active {
width: 64px;
height: 24px;
......@@ -331,16 +362,18 @@ onMounted(() => {
}
}
}
.layout-main-center {
.report-box {
margin: 0 auto;
width: 1600px;
height: 926px;
background: rgba(248, 249, 250, 1);
.report-header {
height: 80px;
line-height: 80px;
padding-left: 20px;
padding-left: 69px;
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
font-style: Bold;
......@@ -349,39 +382,68 @@ onMounted(() => {
letter-spacing: 0px;
text-align: left;
}
.report-main {
width: 1600px;
margin: 0 auto;
margin-top: 24px;
background: #fff;
box-sizing: border-box;
padding: 0 69px;
display: flex;
padding: 24px 69px;
height: calc(100% - 100px);
justify-content: space-between;
.left {
width: 800px;
.noContent {
height: 100px;
line-height: 100px;
text-align: center;
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
font-style: Regular;
font-size: 20px;
font-weight: 400;
}
overflow-y: auto; // 改为单一滚动容器,天然同步
// 滚动条样式
&::-webkit-scrollbar {
display: none;
}
.right {
width: 800px;
.noContent {
height: 100px;
line-height: 100px;
text-align: center;
&::-webkit-scrollbar-thumb {
background: #c1c1c1;
border-radius: 4px;
}
&::-webkit-scrollbar-track {
background: #f1f1f1;
}
.noContent {
height: 100%;
display: flex;
align-items: center;
justify-content: center;
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
font-style: Regular;
font-size: 20px;
font-weight: 400;
}
.content-row {
display: flex;
width: 100%;
min-height: 100px;
// border-bottom: 1px solid rgba(234, 236, 238, 1);
align-items: stretch; // 默认stretch,确保左右等高,头部对齐
&:last-child {
border-bottom: none;
}
.content-en,
.content-cn {
width: 800px;
padding: 24px 30px;
box-sizing: border-box;
font-size: 16px;
line-height: 1.8;
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
font-style: Regular;
font-size: 20px;
font-weight: 400;
text-align: justify;
white-space: pre-wrap; // 保留换行格式
}
.content-en {
// border-right: 1px solid rgba(234, 236, 238, 1); // 中间分隔线
}
}
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论