提交 f7d69ec4 authored 作者: 张烨's avatar 张烨

feat:科技政令-政令概况接口对接

上级 e24a2a85
...@@ -12,6 +12,18 @@ export function getDecreeBackground(params) { ...@@ -12,6 +12,18 @@ export function getDecreeBackground(params) {
}) })
} }
// 前序政令
/**
* @param {id}
*/
export function getDecreePrev(params) {
return request({
method: 'GET',
url: `/api/administrativeOrderInfo/prev/${params.id}`,
params
})
}
// 相关事件 // 相关事件
/** /**
* @param { id } * @param { id }
...@@ -34,4 +46,28 @@ export function getDecreeDepend(params) { ...@@ -34,4 +46,28 @@ export function getDecreeDepend(params) {
url: `/api/administrativeOrderInfo/depend/${params.id}`, url: `/api/administrativeOrderInfo/depend/${params.id}`,
params params
}) })
}
// 主要指令
/**
* @param { id }
*/
export function getDecreeMainContent(params) {
return request({
method: 'GET',
url: `/api/administrativeOrderInfo/mainContent/${params.id}`,
params
})
}
// 相关实体
/**
* @param { id }
*/
export function getDecreeRelatedEntity(params) {
return request({
method: 'GET',
url: `/api/administrativeOrderInfo/relatedEntity/${params.id}`,
params
})
} }
\ No newline at end of file
...@@ -60,16 +60,17 @@ export function getDecreeSummary(params) { ...@@ -60,16 +60,17 @@ export function getDecreeSummary(params) {
}) })
} }
// 获取报告原文 // 获取风险信号
/** /**
* @param {id} * @param {id}
*/ */
// export function getDecreeReport(params) { export function getDecreeRiskSignal(params) {
// return request({ return request({
// method: 'GET', method: 'GET',
// url: `/api/administrativeOrderInfo/contentUrl/${params.id}`, url: `/api/administrativeOrderInfo/riskSignal/${params.id}`,
// }) params
// } })
}
export function getDecreeReport(params) { export function getDecreeReport(params) {
return request({ return request({
......
<template> <template>
<div class="introduction-wrap"> <div class="introduction-wrap">
<div class="hover-dialog"
:style="{ position: 'absolute', zIndex: 9999, top: `${mouseY - 220}px`, left: `${mouseX - 600}px` }"
v-if="isShowBox2Dialog">
{{ box2ContentAll }}
</div>
<div class="left"> <div class="left">
<div class="box1"> <div class="box1">
<!-- <div class="box-header">
<div class="header-left"></div>
<div class="title">提出背景</div>
<div class="header-btn-box">
<div
class="btn"
:class="{ btnActive: box1ActiveBtn === item }"
v-for="(item, index) in box1BtnList"
:key="index"
@click="handleClickBox1Btn(item)"
>
{{ item }}
</div>
</div>
<div class="header-right">
<div class="icon">
<img src="../assets/icons/header-right-icon1.png" alt="" />
</div>
<div class="icon">
<img src="../assets/icons/header-right-icon2.png" alt="" />
</div>
</div>
</div>
<div class="box1-main">
<el-empty v-if="backgroundList.length === 0" style="padding-top: 60px;" description="暂无数据" :image-size="100" />
<div class="box1-item" v-for="(item, index) in backgroundList" :key="index">
<div class="id">{{ index + 1 }}</div>
<div class="title">{{ item.content }}</div>
</div>
</div>
<div class="box1-footer">
<div class="box1-footer-left">{{ `共 ${backgroundListNum} 项` }}</div>
<div class="box1-footer-right">
<el-pagination :page-size="5" background layout="prev, pager, next" :total="backgroundListNum" />
</div>
</div> -->
<AnalysisBox title="提出背景" :showAllBtn="false"> <AnalysisBox title="提出背景" :showAllBtn="false">
<template #header-btn> <template #header-btn>
<div class="header-btn-box"> <div class="header-btn-box">
...@@ -71,64 +30,12 @@ ...@@ -71,64 +30,12 @@
</AnalysisBox> </AnalysisBox>
</div> </div>
<div class="box2"> <div class="box2">
<!-- <div class="box-header">
<div class="header-left"></div>
<div class="title">相关事件</div>
<div class="header-right">
<div class="icon">
<img src="../assets/icons/header-right-icon1.png" alt="" />
</div>
<div class="icon">
<img src="../assets/icons/header-right-icon2.png" alt="" />
</div>
</div>
</div>
<div class="box2-main">
<el-empty v-if="!relatedEvents.length" description="暂无数据" :image-size="100" />
<div class="box2-item" v-for="(item, index) in relatedEvents" :key="index">
<div class="item-left">
<img :src="item.image" alt="" />
</div>
<div class="item-center">
<div class="title">{{ item.title }}</div>
<el-popover effect="dark" :width="1000" :content="item.content" placement="top-start">
<template #reference>
<div class="content">
{{ item.content }}
</div>
</template>
</el-popover>
</div>
<div class="item-right">{{ item.time }}</div>
</div>
</div> -->
<!-- <AnalysisBox title="相关事件" :showAllBtn="false">
<div class="box2-main">
<el-empty v-if="!relatedEvents.length" description="暂无数据" :image-size="100" />
<div class="box2-item" v-for="(item, index) in relatedEvents" :key="index">
<div class="item-left">
<img :src="item.image" alt="" />
</div>
<div class="item-center">
<div class="title">{{ item.title }}</div>
<el-popover effect="dark" :width="1000" :content="item.content" placement="top-start">
<template #reference>
<div class="content">
{{ item.content }}
</div>
</template>
</el-popover>
</div>
<div class="item-right">{{ item.time }}</div>
</div>
</div>
</AnalysisBox> -->
<AnalysisBox title="法律依据" :showAllBtn="false"> <AnalysisBox title="法律依据" :showAllBtn="false">
<div class="box2-main"> <div class="box2-main">
<el-empty v-if="false" description="暂无数据" :image-size="100" /> <el-empty v-if="dependList.length === 0" description="暂无数据" :image-size="100" />
<div class="custom-collapse"> <div class="custom-collapse">
<el-collapse v-model="activeNames"> <el-collapse v-model="dependActive">
<el-collapse-item v-for="index in 5" title="Consistency" :name="index"> <el-collapse-item v-for="(item, index) in dependList" :key="item.billId" title="Consistency" :name="item.billId">
<template #icon> <template #icon>
<el-icon><ArrowDownBold /></el-icon> <el-icon><ArrowDownBold /></el-icon>
<!-- <el-icon><ArrowRightBold /></el-icon> --> <!-- <el-icon><ArrowRightBold /></el-icon> -->
...@@ -136,11 +43,11 @@ ...@@ -136,11 +43,11 @@
<template #title> <template #title>
<div class="custom-collapse-title"> <div class="custom-collapse-title">
<div class="custom-collapse-index">{{ index + 1 }}</div> <div class="custom-collapse-index">{{ index + 1 }}</div>
<div class="custom-collapse-name one-line-ellipsis">US美国法典2025年人工智能指数报告美国法典2025年人工智能指数报告美国法典2025年人工智能指数报告</div> <div class="custom-collapse-name one-line-ellipsis">{{ item.title }}</div>
</div> </div>
</template> </template>
<div class="custom-collapse-content"> <div class="custom-collapse-content">
中国政府未能采取有效措施阻止持续流入美国的合成阿片类药物(包括芬太尼)的流通,构成对美国国家安全、外交政策和经济的异常且非同寻常的威胁,该威胁主要源于美国境外。 {{ item.content }}
</div> </div>
</el-collapse-item> </el-collapse-item>
</el-collapse> </el-collapse>
...@@ -151,32 +58,20 @@ ...@@ -151,32 +58,20 @@
</div> </div>
<div class="right"> <div class="right">
<div class="box3"> <div class="box3">
<!-- <AnalysisBox title="法律依据" :showAllBtn="false">
<div class="box3-main">
<el-empty v-if="!laws.length" style="padding-top: 200px;" description="暂无数据" :image-size="100" />
<div class="box3-item" v-for="(item, index) in laws" :key="index" @click="handleToBillDetail(item)">
<div class="id">{{ index + 1 }}</div>
<div class="item-header">
<div class="name">{{ item.title }}</div>
</div>
<div class="item-content">{{ item.content }}</div>
</div>
</div>
</AnalysisBox> -->
<AnalysisBox title="前序政令" :showAllBtn="false"> <AnalysisBox title="前序政令" :showAllBtn="false">
<el-empty v-if="!eventList.length" style="padding-top: 200px;" description="暂无数据" :image-size="100" /> <el-empty v-if="!prevList.length" style="padding-top: 200px;" description="暂无数据" :image-size="100" />
<div class="box3-bottom-main"> <div class="box3-bottom-main">
<el-timeline> <el-timeline>
<el-timeline-item v-for="(item, index) in eventList" :key="index"> <el-timeline-item v-for="(item, index) in prevList" :key="index">
<div> <div>
<div class="time-line-top"> <div class="time-line-top">
<div class="time-line-date">{{ item.time }}</div> <div class="time-line-date">{{ item.postDate }}</div>
<div class="time-line-icon"> <div class="time-line-icon">
<img style="width: 100%; height: 100%;" :src="DefaultIcon1" alt=""> <img style="width: 100%; height: 100%;" :src="item.orgImage || DefaultIcon1" alt="">
</div> </div>
<div class="time-line-name">{{ "总统行政办公室" }}</div> <div class="time-line-name">{{ item.proposeOrgName }}</div>
</div> </div>
<div class="timeline-content">{{ item.title }}</div> <div class="timeline-content">{{ item.describe }}</div>
</div> </div>
</el-timeline-item> </el-timeline-item>
</el-timeline> </el-timeline>
...@@ -190,26 +85,14 @@ ...@@ -190,26 +85,14 @@
<script setup> <script setup>
import { ref, onMounted } from "vue"; import { ref, onMounted } from "vue";
import { useRoute } from "vue-router"; import { useRoute } from "vue-router";
import router from "@/router"; import { getDecreeBackground, getDecreeDepend, getDecreePrev } from "@/api/decree/background";
import { getDecreeBackground, getDecreeRelatedEvent, getDecreeDepend } from "@/api/decree/background";
import Img1 from "./assets/images/box2-img1.png";
import Img2 from "./assets/images/box2-img2.png";
import Img3 from "./assets/images/box2-img3.png";
import Img4 from "./assets/images/box2-img4.png";
import Img5 from "./assets/images/box2-img5.png";
import DefaultIcon1 from "@/assets/icons/default-icon1.png"; import DefaultIcon1 from "@/assets/icons/default-icon1.png";
import { reduce } from "lodash";
import Index from "../index.vue";
const route = useRoute(); const route = useRoute();
const decreeId = ref(route.query.id); const decreeId = ref(route.query.id);
// 基本鼠标位置
const mouseX = ref(0);
const mouseY = ref(0);
// 提出背景 // 提出背景
const box1BtnList = ref(["涉华背景", "全部背景"]); const box1BtnList = ref(["涉华背景", "全部背景"]);
const box1ActiveBtn = ref("涉华背景"); const box1ActiveBtn = ref("涉华背景");
...@@ -248,102 +131,59 @@ const handleGetBackground = async () => { ...@@ -248,102 +131,59 @@ const handleGetBackground = async () => {
backgroundListNum.value = 0; backgroundListNum.value = 0;
backgroundList.value = []; backgroundList.value = [];
} }
} catch (error) { } } catch (error) {
backgroundListNum.value = 0;
backgroundList.value = [];
console.error("获取提出背景数据失败", error);
}
}; };
// 相关事件 // 前序政令
const relatedEvents = ref([ const prevList = ref([
// { // {
// image: Img1, // proposeOrgName: "白宫",
// title: "中美AI模型性能差距迅速缩小", // postDate: "2025-07-31",
// content: // describe: "美商务部发布指南,警告全球企业使用华为昇腾芯片可能违反美国出口管制。意在限制中国AI产业发展,阻碍其获得先进算力。"
// "斯坦福大学《2025年人工智能指数报告》显示,中美顶尖AI模型在MMLU(大规模多任务语言理解)等主流基准测试中的性能...", // },
// time: "2025-08-30"
// }
]); ]);
const handleGetRelateEvents = async () => { const handleGetPrev = async () => {
const params = {
id: decreeId.value
};
try { try {
const res = await getDecreeRelatedEvent(params); const res = await getDecreePrev({id: decreeId.value});
console.log("相关事件", res); console.log("前序政令", res);
if (res.code === 200 && res.data) { if (res.code === 200 && res.data) {
relatedEvents.value = res.data.map(item => { prevList.value = res.data;
return {
image: item.imageUrl,
title: item.sjbt,
content: item.sjnr,
time: item.sjsj
};
});
} else { } else {
relatedEvents.value = []; prevList.value = [];
} }
} catch (error) { } } catch (error) {
}; prevList.value = [];
console.error("获取前序政令数据失败", error);
// 前序政令
// 机构动态
const eventList = ref([
{
time: "2025-07-31",
title: "美商务部发布指南,警告全球企业使用华为昇腾芯片可能违反美国出口管制。意在限制中国AI产业发展,阻碍其获得先进算力。"
},
{
time: "2025-07-25",
title: "美商务部持续对多种中国产品发起“双反”(反倾销、反补贴)调查并作出裁决,涉及产品从工业原料到日常用品,且裁定的税率普遍较高。"
},
{
time: "2025-07-21",
title: "美商务部进一步收紧对华先进半导体出口管制,将更多中国实体列入“实体清单”。限制14纳米及以下先进芯片、DRAM等对华出口"
} }
]); };
// 法律依据 // 法律依据
const laws = ref([]); const dependList = ref([]);
const activeNames = ref([1, 2, 3, 4, 5]); const dependActive = ref([]);
const handleGetLaws = async () => { const handleGetLaws = async () => {
const params = {
id: decreeId.value
};
try { try {
const res = await getDecreeDepend(params); const res = await getDecreeDepend({id: decreeId.value});
console.log("法律依据", res); console.log("法律依据", res);
if (res.code === 200 && res.data) { if (res.code === 200 && res.data) {
laws.value = res.data; dependList.value = res.data;
dependActive.value = res.data.map(item => item.billId);
} else { } else {
laws.value = []; dependList.value = [];
} }
} catch (error) { } } catch (error) {
}; dependList.value = [];
const isShowBox2Dialog = ref(false); console.error("获取法律依据数据失败", error);
const box2ContentAll = ref(""); }
const handleChangeShowBox2Dialog = (isShow, content) => {
isShowBox2Dialog.value = isShow;
box2ContentAll.value = content;
};
const handleMouseMove = event => {
mouseX.value = event.screenX;
mouseY.value = event.screenY;
};
const handleToBillDetail = item => {
window.sessionStorage.setItem("curTabName", item.title);
const route = router.resolve({
path: "/billLayout",
query: {
billId: item.billId
}
});
window.open(route.href, "_blank");
}; };
onMounted(() => { onMounted(() => {
handleGetBackground(); handleGetBackground();
// handleGetRelateEvents();
handleGetLaws(); handleGetLaws();
handleGetPrev();
}); });
</script> </script>
...@@ -642,17 +482,6 @@ onMounted(() => { ...@@ -642,17 +482,6 @@ onMounted(() => {
} }
} }
} }
// .box2-footer {
// margin: 5px auto 0;
// width: 108px;
// height: 32px;
// cursor: pointer;
// img {
// width: 100%;
// height: 100%;
// }
// }
} }
} }
...@@ -732,85 +561,6 @@ onMounted(() => { ...@@ -732,85 +561,6 @@ onMounted(() => {
text-overflow: ellipsis; text-overflow: ellipsis;
} }
} }
// .box3-main {
// margin-top: 9px;
// width: 464px;
// height: 720px;
// // overflow: hidden;
// overflow-y: auto;
// padding-left: 20px;
// .box3-item {
// margin-bottom: 20px;
// position: relative;
// cursor: pointer;
// // border-bottom: 1px solid rgba(234, 236, 238, 1);
// .id {
// width: 24px;
// height: 24px;
// position: absolute;
// left: 18px;
// top: 1px;
// z-index: 99;
// text-align: center;
// line-height: 24px;
// margin-top: 5px;
// border-radius: 12px;
// background: #e7f3ff;
// color: #0a57a6;
// }
// .item-header {
// width: 384px;
// height: 35px;
// display: flex;
// justify-content: space-between;
// margin-left: 60px;
// overflow: hidden;
// text-overflow: ellipsis;
// white-space: nowrap;
// .name {
// max-width: 384px;
// overflow: hidden;
// text-overflow: ellipsis;
// white-space: nowrap;
// height: 24px;
// margin-top: 5px;
// color: rgba(59, 65, 75, 1);
// font-family: Microsoft YaHei;
// font-size: 18px;
// font-weight: 700;
// line-height: 24px;
// }
// .info {
// text-align: right;
// margin-left: 10px;
// height: 24px;
// margin-top: 5px;
// color: rgba(95, 101, 108, 1);
// font-family: Microsoft YaHei;
// font-size: 16px;
// font-weight: 400;
// line-height: 24px;
// }
// }
// .item-content {
// margin-left: 66px;
// border-top: 1px solid rgba(234, 236, 238, 1);
// padding-top: 3px;
// color: rgba(95, 101, 108, 1);
// font-family: Microsoft YaHei;
// font-size: 16px;
// font-weight: 400;
// line-height: 30px;
// }
// }
// }
} }
} }
} }
......
<template> <template>
<div class="risk-notice"> <div class="risk-notice" v-if="riskInfo?.riskLevel">
<div class="risk-notice-header"> <div class="risk-notice-header">
<div class="risk-notice-icon"> <div class="risk-notice-icon">
<img :src="warning1" alt=""> <img :src="warning1" alt="">
</div> </div>
<div class="risk-notice-title">特别重大风险</div> <div class="risk-notice-title">{{riskInfo.riskLevel}}</div>
<div class="risk-notice-icon"> <div class="risk-notice-icon">
<img :src="warning2" alt=""> <img :src="warning2" alt="">
</div> </div>
</div> </div>
<div class="risk-notice-content"> <div class="risk-notice-content">{{ riskInfo.content }}</div>
政令核心意图在于通过税收优惠吸引制造业回流美国,并在关键科技领域对中国进行遏制,限制中国获取先进技术、资本和市场渠道,从而延缓中国科技产业的发展速度。给半导体、新能源、人工智能等相关科技行业带来不小的短期压力。
</div>
</div> </div>
<div class="introduction-wrap"> <div class="introduction-wrap">
<div class="left"> <div class="left">
...@@ -80,35 +78,19 @@ ...@@ -80,35 +78,19 @@
</AnalysisBox> </AnalysisBox>
</div> </div>
<div class="box2"> <div class="box2">
<!-- <AnalysisBox title="主要指令" :showAllBtn="false">
<div v-if="curmajorList.length" class="box2-main">
<div class="box2-item" v-for="(item, index) in curmajorList" :key="index">
<div class="id">{{ index + 1 }}</div>
<div class="title">{{ item.content }}</div>
</div>
</div>
<div v-if="curmajorList.length" class="box2-footer">
<div class="box2-footer-left">{{ `共 ${majorListNum} 项` }}</div>
<div class="box2-footer-right">
<el-pagination @current-change="handleCurrentChange" :page-size="5" background layout="prev, pager, next"
:total="majorListNum" />
</div>
</div>
<el-empty v-else description="暂无数据" :image-size="100" />
</AnalysisBox> -->
<AnalysisBox title="相关事件" :showAllBtn="false"> <AnalysisBox title="相关事件" :showAllBtn="false">
<div class="box2-main"> <div class="box2-main">
<el-empty v-if="!relatedEvents.length" description="暂无数据" :image-size="100" /> <el-empty v-if="!relatedData.length" description="暂无数据" :image-size="100" />
<div class="box2-item" v-for="(item, index) in relatedEvents" :key="index"> <div class="box2-item" v-for="(item, index) in relatedData" :key="index">
<div class="item-left"> <div class="item-left">
<img :src="item.image || DefaultIconNews" alt="" /> <img :src="item.imageUrl || DefaultIconNews" alt="" />
</div> </div>
<div class="item-center"> <div class="item-center">
<div class="bubble-header" @click="handleClickToNewsDetail(item)"> <div class="bubble-header" @click="handleClickToNewsDetail(item)">
<span class="name">{{ item.title }}</span> <span class="name">{{ item.sjbt }}</span>
<span class="meta">{{ item.time }} · {{ "洛杉矶时报" }}</span> <span class="meta">{{ item.sjsj }} · {{ item.source }}</span>
</div> </div>
<div class="content">{{ item.content }}</div> <div class="content">{{ item.sjnr }}</div>
<!-- <el-popover effect="dark" :width="1000" :content="item.content" placement="top-start"> <!-- <el-popover effect="dark" :width="1000" :content="item.content" placement="top-start">
<template #reference> <template #reference>
<div class="content">{{ item.content }}</div> <div class="content">{{ item.content }}</div>
...@@ -126,7 +108,7 @@ ...@@ -126,7 +108,7 @@
<div class="box3-top"> <div class="box3-top">
<div class="box3-top-top" @click="handleToInstitution(box3TopTopData)"> <div class="box3-top-top" @click="handleToInstitution(box3TopTopData)">
<div class="left"> <div class="left">
<img :src="box3TopTopData.logo ? box3TopTopData.logo : DefaultIcon2" alt="" /> <img :src="box3TopTopData?.logo || DefaultIcon2" alt="" />
</div> </div>
<div class="right"> <div class="right">
<div class="name">{{ box3TopTopData.name + " >" }}</div> <div class="name">{{ box3TopTopData.name + " >" }}</div>
...@@ -175,15 +157,14 @@ ...@@ -175,15 +157,14 @@
</template> </template>
<script setup> <script setup>
import { ref, computed, onMounted } from "vue"; import { ref, onMounted } from "vue";
import { useRoute } from "vue-router"; import { useRoute } from "vue-router";
import router from "@/router"; import router from "@/router";
import warning1 from "./assets/icon/warning-icon1.png"; import warning1 from "./assets/icon/warning-icon1.png";
import warning2 from "./assets/icon/warning-icon2.png"; import warning2 from "./assets/icon/warning-icon2.png";
import { import {
getDecreeBasicInfo, getDecreeBasicInfo,
getDecreeMainContent, getDecreeRiskSignal,
getDecreeOrganization,
getDecreeIssueOrganization getDecreeIssueOrganization
} from "@/api/decree/introduction"; } from "@/api/decree/introduction";
import { getDecreeRelatedEvent } from "@/api/decree/background"; import { getDecreeRelatedEvent } from "@/api/decree/background";
...@@ -196,28 +177,24 @@ const route = useRoute(); ...@@ -196,28 +177,24 @@ const route = useRoute();
const decreeId = ref(route.query.id); const decreeId = ref(route.query.id);
// 风险警告 // 风险警告
const levelMapList = [ const riskInfo = ref({
{ // riskLevel: "特别重大风险",
name: "特别重大风险", // content: "政令核心意图在于通过税收优惠吸引制造业回流美国,并在关键科技领域对中国进行遏制,限制中国获取先进技术、资本和市场渠道,从而延缓中国科技产业的发展速度。给半导体、新能源、人工智能等相关科技行业带来不小的短期压力。"
color: ["rgba(255, 77, 79, 1)", "rgba(255, 163, 158, 1)"] })
}, const onRiskSignalData = async () => {
{ try {
name: "重大风险", const res = await getDecreeRiskSignal({id: decreeId.value});
color: ["rgba(255, 169, 64, 1)", "rgba(255, 213, 145, 1)"] console.log("风险警告", res);
}, if (res.code === 200 && res.data) {
{ riskInfo.value = res.data;
name: "较大风险", } else {
color: ["rgba(250, 219, 20, 1)", "rgba(255, 251, 143, 1)"] riskInfo.value = null;
}, }
{ } catch (error) {
name: "一般风险", riskInfo.value = null;
color: ["rgba(64, 150, 255, 1)", "rgba(145, 202, 255, 1)"] console.error("获取风险警告数据失败:", error);
},
{
name: "几乎无风险",
color: ["rgba(54, 207, 201, 1)", "rgba(135, 232, 222, 1)"]
} }
]; };
// 基本信息 // 基本信息
const basicInfo = ref({ const basicInfo = ref({
...@@ -230,13 +207,9 @@ const basicInfo = ref({ ...@@ -230,13 +207,9 @@ const basicInfo = ref({
bh: "", bh: "",
deadline: "" deadline: ""
}); });
const handleGetBasicInfo = async () => { const handleGetBasicInfo = async () => {
const params = {
id: decreeId.value
};
try { try {
const res = await getDecreeBasicInfo(params); const res = await getDecreeBasicInfo({id: decreeId.value});
console.log("基本信息", res); console.log("基本信息", res);
if (res.code === 200 && res.data) { if (res.code === 200 && res.data) {
basicInfo.value.img = res.data.picture; basicInfo.value.img = res.data.picture;
...@@ -249,34 +222,26 @@ const handleGetBasicInfo = async () => { ...@@ -249,34 +222,26 @@ const handleGetBasicInfo = async () => {
basicInfo.value.proposeOrgName = res.data.proposeOrgName; basicInfo.value.proposeOrgName = res.data.proposeOrgName;
} }
} catch (error) { } catch (error) {
console.error("基本信息error", error); console.error("获取基本信息数据失败", error);
} }
}; };
handleGetBasicInfo(); handleGetBasicInfo();
// 相关事件 // 相关事件
const relatedEvents = ref([]); const relatedData = ref([]);
const handleGetRelateEvents = async () => { const handleGetRelateEvents = async () => {
const params = {
id: decreeId.value
};
try { try {
const res = await getDecreeRelatedEvent(params); const res = await getDecreeRelatedEvent({id: decreeId.value});
console.log("相关事件", res); console.log("相关事件", res);
if (res.code === 200 && res.data) { if (res.code === 200 && res.data) {
relatedEvents.value = res.data.map(item => { relatedData.value = res.data;
return {
image: item.imageUrl,
title: item.sjbt,
content: item.sjnr,
time: item.sjsj,
id: item.id,
};
});
} else { } else {
relatedEvents.value = []; relatedData.value = [];
} }
} catch (error) { } } catch (error) {
relatedData.value = [];
console.error("获取相关事件数据失败", error);
}
}; };
const handleClickToNewsDetail = news => { const handleClickToNewsDetail = news => {
const route = router.resolve({ const route = router.resolve({
...@@ -288,69 +253,13 @@ const handleClickToNewsDetail = news => { ...@@ -288,69 +253,13 @@ const handleClickToNewsDetail = news => {
window.open(route.href, "_blank"); window.open(route.href, "_blank");
}; };
// 主要指令
const majorList = ref([
// {
// id: 1,
// content: '要求商务部在90天内建立"全栈式"美国AI出口机制。'
// }
]);
const currentPage = ref(1);
const pageSize = ref(5);
// 处理页码改变事件
const handleCurrentChange = page => {
currentPage.value = page;
};
const curmajorList = computed(() => {
const startIndex = (currentPage.value - 1) * pageSize.value;
const endIndex = startIndex + pageSize.value;
return majorList.value.slice(startIndex, endIndex);
});
const majorListNum = ref(0);
const handleMajorList = async () => {
const params = {
currentPage: 0,
pageSize: 999999,
id: decreeId.value
};
try {
const res = await getDecreeMainContent(params);
console.log("主要指令", res);
if (res.code === 200 && res.data) {
majorList.value = res.data.content;
majorListNum.value = res.data.numberOfElements;
} else {
majorList.value = [];
majorListNum.value = 0;
}
} catch (error) { }
};
// handleMajorList();
// 发布机构 // 发布机构
const box3TopTopData = ref({ const box3TopTopData = ref({
id: "", id: "",
logo: "", logo: "",
name: "", name: "",
eName: "" eName: ""
}); });
const box3TopBottomData = ref([]);
// 跳转行政机构主页
const handleToInstitution = item => {
const curRoute = router.resolve({
path: "/institution",
query: {
id: item.id
}
});
window.open(curRoute.href, "_blank");
};
// 机构动态 // 机构动态
const eventList = ref([ const eventList = ref([
// { // {
...@@ -366,38 +275,36 @@ const eventList = ref([ ...@@ -366,38 +275,36 @@ const eventList = ref([
// title: "美商务部进一步收紧对华先进半导体出口管制,将更多中国实体列入“实体清单”。限制14纳米及以下先进芯片、DRAM等对华出口" // title: "美商务部进一步收紧对华先进半导体出口管制,将更多中国实体列入“实体清单”。限制14纳米及以下先进芯片、DRAM等对华出口"
// } // }
]); ]);
const box3TopBottomData = ref([]);
const handleGetOrgnization = async () => { const handleGetOrgnization = async () => {
const params = {
id: decreeId.value
};
try { try {
const res = await getDecreeIssueOrganization(params); const res = await getDecreeIssueOrganization({id: decreeId.value});
console.log("发布机构", res); console.log("发布机构/关键人物/机构动态", res);
if (res.code === 200 && res.data) { if (res.code === 200 && res.data) {
box3TopTopData.value.id = res.data.id; let { id, image, name, ename } = res.data
box3TopTopData.value.logo = res.data.image; Object.assign(box3TopTopData.value, { id, logo: image, name, eName: ename });
box3TopTopData.value.name = res.data.name;
box3TopTopData.value.eName = res.data.ename;
// eventList.value = res.data.newsList; // eventList.value = res.data.newsList;
eventList.value = res.data.orderInfoList; eventList.value = res.data.orderInfoList;
box3TopBottomData.value = res.data.personList; box3TopBottomData.value = res.data.personList;
} }
} catch (error) { } catch (error) {
console.error("执行机构error", error); box3TopTopData.value = { id: "", logo: "", name: "", eName: "" };
box3TopTopData.value = {
id: "",
logo: "",
name: "",
eName: ""
};
eventList.value = []; eventList.value = [];
box3TopBottomData.value = [];
console.error("获取发布机构数据失败", error);
} }
}; };
// 跳转行政机构主页
const handleToInstitution = item => {
const curRoute = router.resolve({
path: "/institution",
query: { id: item.id }
});
window.open(curRoute.href, "_blank");
};
onMounted(() => { onMounted(() => {
onRiskSignalData()
handleGetRelateEvents(); handleGetRelateEvents();
handleGetOrgnization(); handleGetOrgnization();
}); });
...@@ -615,11 +522,13 @@ onMounted(() => { ...@@ -615,11 +522,13 @@ onMounted(() => {
} }
.meta { .meta {
margin-left: 10px;
color: rgb(95, 101, 108); color: rgb(95, 101, 108);
font-family: "Source Han Sans CN"; font-family: "Source Han Sans CN";
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;
letter-spacing: 0px; letter-spacing: 0px;
white-space: nowrap;
} }
} }
......
...@@ -5,44 +5,45 @@ ...@@ -5,44 +5,45 @@
<AnalysisBox title="主要指令" :showAllBtn="false"> <AnalysisBox title="主要指令" :showAllBtn="false">
<div class="analysis-box"> <div class="analysis-box">
<div class="analysis-top"> <div class="analysis-top">
<el-select v-model="areaType" :empty-values="[null, undefined]" style="width: 200px;"> <el-select v-model="areaType" :empty-values="[null, undefined]" @change="onMainContentData()" style="width: 200px;">
<el-option label="全部领域" value="" /> <el-option label="全部领域" value="" />
<el-option v-for="item in areaList" :key="item.id" :label="item.name" :value="item.id" /> <el-option v-for="item in areaList" :key="item.id" :label="item.name" :value="item.id" />
</el-select> </el-select>
<div style="flex: auto; width: 20px;"></div> <div style="flex: auto; width: 20px;"></div>
<el-switch v-model="highlightEntities" /> <el-switch v-model="isHighlight" />
<div style="margin-left: 6px;">高亮实体</div> <div style="margin-left: 6px;">高亮实体</div>
<div class="select-input"> <div class="select-input">
<el-input v-model="commandWord" @keyup.enter="handleSearch" style="width: 100%; height: 100%;" :suffix-icon="Search" placeholder="指令搜索" /> <el-input v-model="commandWord" @keyup.enter="onMainContentData()" style="width: 100%; height: 100%;" :suffix-icon="Search" placeholder="指令搜索" />
</div> </div>
</div> </div>
<div class="analysis-content"> <div class="analysis-content">
<el-scrollbar height="100%" always> <el-scrollbar height="100%" always>
<!-- 遍历文档章节 --> <!-- 遍历文档章节 -->
<div v-for="(section, index) in majorList" :key="index" class="section"> <el-empty v-if="!contentList.length" style="padding-top: 200px;" description="暂无数据" :image-size="100" />
<div v-for="(section, index) in contentList" :key="index" class="section">
<div class="section-header"> <div class="section-header">
<div class="section-title">({{ simpleNumToChinese(index+1) }}) {{ section.title }}</div> <div class="section-title one-line-ellipsis">({{ simpleNumToChinese(index+1) }}) {{ section.content }}</div>
<div class="section-icon"> <div class="section-icon">
<img src="./assets/images/open-icon.png" alt="" /> <img src="./assets/images/open-icon.png" alt="" />
</div> </div>
</div> </div>
<!-- 渲染一级列表 --> <!-- 渲染一级列表 -->
<div class="numbered-list"> <div class="numbered-list">
<div v-for="(item, itemIndex) in section.content" :key="itemIndex" class="list-item"> <div v-for="(item, itemIndex) in section.children" :key="itemIndex" class="list-item">
<div class="list-item-dot">{{itemIndex+1}}.</div> <div class="list-item-dot">{{itemIndex+1}}.</div>
<div class="list-item-word">{{ item.text }}</div> <div class="list-item-word">{{ item.content }}</div>
<!-- 渲染二级列表 --> <!-- 渲染二级列表 -->
<div v-if="item.children" class="sub-list"> <div v-if="item.children" class="sub-list">
<div v-for="(subItem, subIndex) in item.children" :key="subIndex" class="sub-item"> <div v-for="(subItem, subIndex) in item.children" :key="subIndex" class="sub-item">
<div class="sub-item-dot">({{subIndex+1}})</div> <div class="sub-item-dot">({{subIndex+1}})</div>
<div class="sub-item-word">{{ subItem.text }}</div> <div class="sub-item-word">{{ subItem.content }}</div>
<!-- 渲染三级列表 --> <!-- 渲染三级列表 -->
<div v-if="subItem.children" class="sub-sub-list"> <div v-if="subItem.children" class="sub-sub-list">
<div v-for="(subSubItem, subSubIndex) in subItem.children" :key="subSubIndex" class="sub-sub-item"> <div v-for="(subSubItem, subSubIndex) in subItem.children" :key="subSubIndex" class="sub-sub-item">
<div class="sub-sub-item-dot">{{ALPHABET[subSubIndex%26]}}.</div> <div class="sub-sub-item-dot">{{ALPHABET[subSubIndex%26]}}.</div>
<div class="sub-sub-item-word">{{ subSubItem.text }}</div> <div class="sub-sub-item-word">{{ subSubItem.content }}</div>
</div> </div>
</div> </div>
</div> </div>
...@@ -53,7 +54,6 @@ ...@@ -53,7 +54,6 @@
</el-scrollbar> </el-scrollbar>
</div> </div>
</div> </div>
</AnalysisBox> </AnalysisBox>
</div> </div>
</div> </div>
...@@ -95,12 +95,13 @@ ...@@ -95,12 +95,13 @@
<div class="box4"> <div class="box4">
<AnalysisBox title="相关实体" :showAllBtn="false"> <AnalysisBox title="相关实体" :showAllBtn="false">
<div class="left-bottom-main"> <div class="left-bottom-main">
<div v-for="item in coopRelatedData" :key="item.id" class="main-box"> <el-empty v-if="!entityList.length" style="padding-top: 200px;" description="暂无数据" :image-size="100" />
<div v-for="(item, index) in entityList" :key="index" class="main-box">
<div class="icon"> <div class="icon">
<img style="width: 100%; height: 100%;" :src="item.img || defaultCom" alt="" /> <img style="width: 100%; height: 100%;" :src="item.imgUrl || defaultCom" alt="" />
</div> </div>
<div class="name one-line-ellipsis">{{ item.ENTITYNAME }}</div> <div class="name one-line-ellipsis">{{ item.name }}</div>
<div class="type">{{ item.type }}</div> <div class="type">{{ item.entityType }}</div>
</div> </div>
</div> </div>
</AnalysisBox> </AnalysisBox>
...@@ -115,6 +116,7 @@ import { useRoute } from "vue-router"; ...@@ -115,6 +116,7 @@ import { useRoute } from "vue-router";
import router from "@/router"; import router from "@/router";
import { Search } from '@element-plus/icons-vue' import { Search } from '@element-plus/icons-vue'
import { getDecreeIssueOrganization } from "@/api/decree/introduction"; import { getDecreeIssueOrganization } from "@/api/decree/introduction";
import { getDecreeRelatedEntity, getDecreeMainContent } from "@/api/decree/background";
import { getDecreehylyList } from "@/api/decree/home"; import { getDecreehylyList } from "@/api/decree/home";
import DefaultIcon1 from "@/assets/icons/default-icon1.png"; import DefaultIcon1 from "@/assets/icons/default-icon1.png";
...@@ -122,13 +124,6 @@ import DefaultIcon2 from "@/assets/icons/default-icon2.png"; ...@@ -122,13 +124,6 @@ import DefaultIcon2 from "@/assets/icons/default-icon2.png";
import defaultCom from "@/views/coopRestriction/assets/images/default-icon2.png" import defaultCom from "@/views/coopRestriction/assets/images/default-icon2.png"
const route = useRoute(); const route = useRoute();
const decreeId = ref(route.query.id);
// 指令搜索
const commandWord = ref("");
const handleSearch = () => {
};
// 科技领域 // 科技领域
const areaType = ref(""); const areaType = ref("");
...@@ -139,82 +134,98 @@ const handleGetAreaList = async () => { ...@@ -139,82 +134,98 @@ 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;
} else {
areaList.value = []
} }
} catch (error) { } } catch (error) {
areaList.value = []
console.error("获取科技领域数据失败:", error);
}
}; };
// 主要指令 // 主要指令
const highlightEntities = ref(false); const isHighlight = ref(false);
const majorList = ref([ const commandWord = ref("");
const contentList = ref([
{ {
title: "建立美国人工智能出口计划", content: "建立美国人工智能出口计划建立美国人工智能出口计划建立美国人工智能出口计划建立美国人工智能出口计划建立美国人工智能出口计划",
content: [ children: [
{ {
text: '在本命令发布之日起 90 天内,商务部长应与国务卿及科学技术政策办公室(OSTP)主任协商,建立并实施美国人工智能出口计划(计划),以支持美国全栈人工智能出口软件包的开发和部署。' content: '在本命令发布之日起 90 天内,商务部长应与国务卿及科学技术政策办公室(OSTP)主任协商,建立并实施美国人工智能出口计划(计划),以支持美国全栈人工智能出口软件包的开发和部署。'
}, },
{ {
text: '商务部长应公开征集由行业主导的联盟提案,以纳入该计划。公开征集要求每项提案必须:', content: '商务部长应公开征集由行业主导的联盟提案,以纳入该计划。公开征集要求每项提案必须:',
children: [ children: [
{ {
text: '包含一套全栈人工智能技术包,涵盖:', content: '包含一套全栈人工智能技术包,涵盖:',
children: [ children: [
{ {
text: 'AI 优化的计算机硬件(如芯片、服务器和加速器)、数据中心存储、云服务和网络,以及这些设备是否以及在多大程度上在美国制造的描述;' content: 'AI 优化的计算机硬件(如芯片、服务器和加速器)、数据中心存储、云服务和网络,以及这些设备是否以及在多大程度上在美国制造的描述;'
}, },
{ {
text: '数据管道和标签系统;' content: '数据管道和标签系统;'
}, },
{ {
text: '人工智能模型与系统;' content: '人工智能模型与系统;'
}, },
{ {
text: '采取措施保障人工智能模型和系统的安全性和网络安全;' content: '采取措施保障人工智能模型和系统的安全性和网络安全;'
}, },
{ {
text: '针对特定用例的人工智能应用(如软件工程、教育、医疗保健、农业或交通运输);' content: '针对特定用例的人工智能应用(如软件工程、教育、医疗保健、农业或交通运输);'
} }
] ]
}, },
{ {
text: '确定出口参与者的具体目标国家或区域集团;' content: '确定出口参与者的具体目标国家或区域集团;'
}, },
{ {
text: '描述一个业务和运营模型,以在高层次上说明哪些实体将建设、拥有和运营数据中心及相关基础设施;' content: '描述一个业务和运营模型,以在高层次上说明哪些实体将建设、拥有和运营数据中心及相关基础设施;'
}, },
{ {
text: '联邦激励和支持机制请求的细节;' content: '联邦激励和支持机制请求的细节;'
}, },
{ {
text: '遵守所有相关的美国出口管制制度、出境投资法规和终端用户政策,包括美国法典第 50 编第 58 章及商务部工业与安全局的相关指导。' content: '遵守所有相关的美国出口管制制度、出境投资法规和终端用户政策,包括美国法典第 50 编第 58 章及商务部工业与安全局的相关指导。'
} }
] ]
}, },
{ {
text: '商务部要求提案须在公开征集后不超过 90 天内提交,并应滚动考虑提案纳入项目。' content: '商务部要求提案须在公开征集后不超过 90 天内提交,并应滚动考虑提案纳入项目。'
}, },
{ {
text: '商务部长应与国务卿、国防部长、能源部长及 OSTP 主任协商,评估提交的纳入计划提案。商务部长与国务卿、国防部长、能源部长及 OSTP 主任协商后选定的提案,将被指定为优先 AI 出口包,并通过优先访问本命令第 4 节指定的工具予以支持,符合适用法律。' content: '商务部长应与国务卿、国防部长、能源部长及 OSTP 主任协商,评估提交的纳入计划提案。商务部长与国务卿、国防部长、能源部长及 OSTP 主任协商后选定的提案,将被指定为优先 AI 出口包,并通过优先访问本命令第 4 节指定的工具予以支持,符合适用法律。'
} }
] ]
}, },
{ {
title: "动员联邦融资工具", content: "动员联邦融资工具",
content: [ children: [
{ {
text: '经济外交行动小组(EDAG),于 2024 年 6 月 21 日总统备忘录中成立,由国务卿主持,并与商务部长和美国贸易代表协商,并根据 2019 年《通过外交倡导美国企业法案》(公共法 116-94 J 部分第七章)第 708 条(CABDA)所述,应协调联邦融资工具的动员,以支持优先的人工智能出口方案。' content: '经济外交行动小组(EDAG),于 2024 年 6 月 21 日总统备忘录中成立,由国务卿主持,并与商务部长和美国贸易代表协商,并根据 2019 年《通过外交倡导美国企业法案》(公共法 116-94 J 部分第七章)第 708 条(CABDA)所述,应协调联邦融资工具的动员,以支持优先的人工智能出口方案。'
}, },
{ {
text: '我将根据 CABDA α 第 708 (c) (3) 条授权小企业管理局局长和 OSTP 主任任命各自执行部门和机构的高级官员担任 EDAG 。' content: '我将根据 CABDA α 第 708 (c) (3) 条授权小企业管理局局长和 OSTP 主任任命各自执行部门和机构的高级官员担任 EDAG 。'
} }
] ]
} }
]); ]);
const ALPHABET = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]; const ALPHABET = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];
/** const onMainContentData = async () => {
* 极简版数字转中文(支持 0-99 整数) try {
* @param {Number} num - 要转换的数字(0-99 之间的整数) const res = await getDecreeMainContent({id: route.query.id, keyword: commandWord.value});
* @returns {String} 中文大写结果 console.log("主要指令", res);
*/ if (res && res.code === 200) {
contentList.value = res.data;
} else {
contentList.value = []
}
} catch (error) {
contentList.value = []
console.error("获取主要指令数据失败:", error);
}
};
// 数字转中文(支持 0-99 整数)
const simpleNumToChinese = (num) => { const simpleNumToChinese = (num) => {
// 1. 基础校验:只处理 0-99 的整数 // 1. 基础校验:只处理 0-99 的整数
if (!Number.isInteger(num) || num < 0 || num > 99) { if (!Number.isInteger(num) || num < 0 || num > 99) {
...@@ -242,22 +253,23 @@ const simpleNumToChinese = (num) => { ...@@ -242,22 +253,23 @@ const simpleNumToChinese = (num) => {
} }
// 相关实体 // 相关实体
const coopRelatedData = ref( const entityList = ref(
Array.from({ length: 8 }, (_, index) => ({ id: String(index + 1), img: "", ENTITYNAME: "ENTITYNAME", type: "type" })) Array.from({ length: 8 }, () => ({ imgUrl: "", name: "ENTITYNAME", entityType: "白宫" }))
); );
// const getcoopRelatedData = async () => { const onRelatedEntityData = async () => {
// if (!route.query.id) return; try {
// try { const res = await getDecreeRelatedEntity({id: route.query.id});
// const res = await getCoopRestrictionRelated({ console.log("相关实体", res);
// limitId: route.query.id if (res && res.code === 200) {
// }); entityList.value = res.data;
// if (res && res.code === 200) { } else {
// coopRelatedData.value = res.data || {}; entityList.value = []
// } }
// } catch (error) { } catch (error) {
// console.error("获取合作限制相关实体数据失败:", error); entityList.value = []
// } console.error("获取相关实体数据失败:", error);
// }; }
};
// 发布机构 // 发布机构
const box3TopTopData = ref({ const box3TopTopData = ref({
...@@ -277,37 +289,27 @@ const handleToInstitution = item => { ...@@ -277,37 +289,27 @@ const handleToInstitution = item => {
}); });
window.open(curRoute.href, "_blank"); window.open(curRoute.href, "_blank");
}; };
const handleGetOrgnization = async () => { const handleGetOrgnization = async () => {
const params = {
id: decreeId.value
};
try { try {
const res = await getDecreeIssueOrganization(params); const res = await getDecreeIssueOrganization({id: route.query.id});
console.log("发布机构", res); console.log("发布机构", res);
if (res.code === 200 && res.data) { if (res.code === 200 && res.data) {
box3TopTopData.value.id = res.data.id; let { id, image, name, ename } = res.data
box3TopTopData.value.logo = res.data.image; Object.assign(box3TopTopData.value, { id, logo: image, name, eName: ename });
box3TopTopData.value.name = res.data.name;
box3TopTopData.value.eName = res.data.ename;
box3TopBottomData.value = res.data.personList; box3TopBottomData.value = res.data.personList;
} }
} catch (error) { } catch (error) {
box3TopTopData.value = { id: "", logo: "", name: "", eName: "" };
box3TopBottomData.value = [];
console.error("执行机构error", error); console.error("执行机构error", error);
box3TopTopData.value = {
id: "",
logo: "",
name: "",
eName: ""
};
} }
}; };
onMounted(() => { onMounted(() => {
handleGetOrgnization();
handleGetAreaList(); handleGetAreaList();
onMainContentData();
handleGetOrgnization();
onRelatedEntityData();
}); });
</script> </script>
......
...@@ -95,22 +95,24 @@ const handleGetSummary = async () => { ...@@ -95,22 +95,24 @@ const handleGetSummary = async () => {
// 获取报告原文 - 修改为获取分段数组 // 获取报告原文 - 修改为获取分段数组
const handleGetReport = async () => { const handleGetReport = async () => {
const params = {
id: route.query.id
};
try { try {
const res = await getDecreeReport(params); const res = await getDecreeReport({id: route.query.id});
console.log("报告原文", res); console.log("报告原文", res);
if (res.code === 200 && res.data) { if (res.code === 200 && res.data) {
// 假设后端返回的是数组格式,如果返回的是对象包含数组,请改为 res.data.list reportData.value = [{
reportData.value = res.data || [];
let test = {
content: "设立第二紧急委员会(以下简称“委员会”)。自2026年1月16日美国东部<span>标准时间</span>凌晨12:01起,成立一个由一名主席和两名成员组成的<span>委员会</span>,所有成员均由总统任命,负责调查并报告这些争议。任何成员均不得在任何铁路员工组织或任何铁路承运人中拥有经济或其他利益关系。委员会的运作取决于资金的可用性。", content: "设立第二紧急委员会(以下简称“委员会”)。自2026年1月16日美国东部<span>标准时间</span>凌晨12:01起,成立一个由一名主席和两名成员组成的<span>委员会</span>,所有成员均由总统任命,负责调查并报告这些争议。任何成员均不得在任何铁路员工组织或任何铁路承运人中拥有经济或其他利益关系。委员会的运作取决于资金的可用性。",
contentEn: "Establishment of a Second <span>Emergency</span> Board (Board). There is established, effective 12:01 a.m. eastern standard time on <span>January 16</span>, 2026, a Board composed of a chair and two other members, all of whom shall be appointed by the President to investigate and report on these disputes. No member shall be pecuniarily or otherwise interested in any organization of railroad employees or any carrier. The Board shall perform its functions subject to the availability of funds.", contentEn: "Establishment of a Second <span>Emergency</span> Board (Board). There is established, effective 12:01 a.m. eastern standard time on <span>January 16</span>, 2026, a Board composed of a chair and two other members, all of whom shall be appointed by the President to investigate and report on these disputes. No member shall be pecuniarily or otherwise interested in any organization of railroad employees or any carrier. The Board shall perform its functions subject to the availability of funds.",
num: 0, num: 0,
}];
let num = Math.max(res.data.content.length, res.data.contentEn.length)
for (let i = 0; i < num; i++) {
let obj = {
content: res.data.content[i] || "",
contentEn: res.data.contentEn[i] || "",
num: i + 1,
}
reportData.value.push(obj);
} }
reportData.value.unshift(test);
} }
} catch (error) { } } catch (error) { }
}; };
......
...@@ -52,8 +52,8 @@ export default defineConfig({ ...@@ -52,8 +52,8 @@ export default defineConfig({
}, },
'/api': { '/api': {
target: 'http://8.140.26.4:9085/', // target: 'http://8.140.26.4:9085/',
// target: 'http://192.168.0.4:28080/', target: 'http://192.168.0.6:28080/',
changeOrigin: true, changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, '') rewrite: (path) => path.replace(/^\/api/, '')
}, },
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论