提交 26ddfb50 authored 作者: coderBryanFu's avatar coderBryanFu

update

上级 b243f69b
......@@ -34,4 +34,16 @@ export function getDecreeOrganization(params) {
url: `/api/administrativeOrderInfo/organization/${params.id}`,
params
})
}
// 获取全局信息
/**
* @param {id}
*/
export function getDecreeSummary(params) {
return request({
method: 'GET',
url: `/api/administrativeOrderInfo/summary/${params.id}`,
params
})
}
\ No newline at end of file
......@@ -106,7 +106,7 @@
<div class="home-main-header-item-box">
<div class="item" v-for="(item, index) in govInsList" :key="index" @click="handleToInstitution(item)">
<div class="item-left">
<img :src="item.img" alt="" />
<img :src="item.img?item.img: DefaultIcon2" alt="" />
</div>
<div class="item-right">{{ item.name }}</div>
</div>
......@@ -137,7 +137,7 @@
{{ "查看详情 >" }}
</div>
</div>
<el-carousel ref="carouselRef" trigger="click" height="376px" :autoplay="true">
<el-carousel ref="carouselRef" trigger="click" height="395px" :autoplay="true">
<el-carousel-item v-for="(item, index) in box1DataList" :key="index">
<div class="box1-main">
<div class="box1-main-left">
......@@ -147,19 +147,18 @@
<div class="box1-main-right-title">
{{ item.name }}
</div>
<div class="box1-main-right-info" v-if="item.industryList">
<div class="box1-main-right-info">
<div
class="tag"
:class="{
tag1: tag.status == 1,
tag2: tag.status == 2,
tag3: tag.status == 3,
tag4: tag.status == 4
tag3: tag.status == 3
}"
v-for="(tag, index) in item.industryList"
:key="index"
>
{{ tag.name }}
{{ tag.industryName }}
</div>
</div>
<div class="box1-main-right-center">
......@@ -336,7 +335,7 @@
<DivideHeader id="position4" class="divide4" :titleText="'资源库'"></DivideHeader>
<div class="home-main-footer-header">
<div class="btn-box">
<div class="btn-wrapper">
<div
class="btn"
:class="{ btnActive: activeCate === cate.id }"
......@@ -346,7 +345,7 @@
>
{{ cate.name }}
</div>
</div>
</div>
<div class="select-box">
<div class="paixu-btn" @click="handleSwithSort">
......@@ -420,7 +419,9 @@
<div class="main-item-left">
<div class="left-left">{{ item.time }}</div>
<div class="left-right">
<div class="icon"></div>
<div class="icon">
<img :src="item.orgImage?item.orgImage:DefaultIcon2" alt="">
</div>
<div class="line" v-if="index !== 9 && index !== totalDecreesNum - 1"></div>
</div>
</div>
......@@ -496,6 +497,9 @@ import getCalendarHeatChart from "./utils/cleandarHeat";
import setChart from "@/utils/setChart";
import DefaultIcon1 from '@/assets/icons/default-icon1.png'
import DefaultIcon2 from '@/assets/icons/default-icon2.png'
import p1 from "./assets/images/iconp1.png";
import p2 from "./assets/images/iconp2.png";
import p3 from "./assets/images/iconp3.png";
......@@ -674,7 +678,7 @@ const handleClickToDetail = () => {
console.log("当前 Carousel 激活索引:", activeIndex);
const id = box1DataList.value[activeIndex].id
const id = box1DataList.value[activeIndex].id;
const route = router.resolve({
path: "/decreeLayout",
......@@ -824,7 +828,7 @@ const handleClickPerson = () => {
const route = router.resolve({
path: "/characterPage",
query: {
type: 1 // 1 2 3
type: 3 // 1 2 3
}
});
window.open(route.href, "_blank");
......@@ -1201,7 +1205,7 @@ const handleGetDecreeOrderList = async () => {
decreeList.value = [];
}
} catch (error) {
console.error('资源库列表error', error);
console.error("资源库列表error", error);
decreeList.value = [];
}
};
......@@ -1679,12 +1683,16 @@ onMounted(async () => {
margin-left: 28px;
flex: 1;
.box1-main-right-title {
height: 26px;
width: 100%;
// height: 26px;
color: var(--color-main-active);
font-family: Microsoft YaHei;
font-size: 20px;
font-weight: 700;
line-height: 26px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.box1-main-right-info {
margin-top: 14px;
......@@ -1693,18 +1701,29 @@ onMounted(async () => {
.tag {
height: 24px;
line-height: 24px;
padding: 1px 8px;
padding: 0 8px;
box-sizing: border-box;
border-radius: 4px;
margin-right: 5px;
border: 1px solid rgba(255, 163, 158, 1);
color: rgba(245, 34, 45, 1);
background: rgba(255, 241, 240, 1);
}
.tag1 {
border: 1px solid rgba(135, 232, 222, 1);
color: rgba(19, 168, 168, 1);
background: rgba(230, 255, 251, 1);
}
.tag2 {
border: 1px solid rgba(186, 224, 255, 1);
background: rgba(230, 244, 255, 1);
color: rgba(22, 119, 255, 1);
}
.tag3 {
border: 1px solid rgba(255, 229, 143, 1);
color: rgba(250, 173, 20, 1);
background: rgba(255, 251, 230, 1);
}
.tag4 {
border: 1px solid rgba(255, 163, 158, 1);
color: rgba(245, 34, 45, 1);
......@@ -2845,13 +2864,11 @@ onMounted(async () => {
width: 1450px;
overflow-x: auto;
overflow-y: hidden;
.btn-wrapper {
width: 1880px;
display: flex;
gap: 10px;
overflow-x: auto;
overflow-y: hidden;
display: flex;
gap: 8px;
white-space: nowrap;
.btn {
min-width: min-content;
height: 42px;
color: rgba(95, 101, 108, 1);
font-family: Microsoft YaHei;
......@@ -2875,7 +2892,7 @@ onMounted(async () => {
background: rgba(20, 89, 187, 1);
}
}
}
}
.select-box {
margin-top: 5px;
......@@ -3037,7 +3054,11 @@ onMounted(async () => {
width: 24px;
height: 24px;
border-radius: 12px;
background: #ccc;
overflow: hidden;
img{
width: 100%;
height: 100%;
}
}
.line {
height: 112px;
......
......@@ -6,16 +6,16 @@
<div class="layout-main-header-left-box">
<div class="left-box-top">
<div class="icon">
<img src="./assets/images/USA-logo.png" alt="" />
<img :src="summaryInfo.officialUrl" alt="" />
</div>
<div class="info">
<div class="info-box1">{{ "EO 14320-推动美国人工智能技术栈的出口" }}</div>
<div class="info-box1">{{ summaryInfo.name }}</div>
<div class="info-box2">
<div class="info-box2-item">{{ "总统行动" }}</div>
<div class="info-box2-item">{{ summaryInfo.order }}</div>
|
<div class="info-box2-item">{{ "行政命令" }}</div>
<div class="info-box2-item">{{ summaryInfo.type }}</div>
|
<div class="info-box2-item">{{ "Promoting the Export of the American AI Technology Stack" }}</div>
<div class="info-box2-item">{{ summaryInfo.ename }}</div>
</div>
</div>
</div>
......@@ -39,13 +39,14 @@
</div>
<div class="layout-main-header-right-box">
<div class="right-box-top">
<div class="time">{{ "2025年7月23日" }}</div>
<div class="time">{{ summaryInfo.postDate }}</div>
<div class="name">{{ "唐纳德·约翰·特朗普(Donald John Trump)" }}</div>
</div>
<div class="right-box-bottom">
<el-button type="plain" size="large" icon="Search" @click="handleSwitchActiveName('法案原文')"
<!-- <el-button type="plain" size="large" icon="Search" @click="handleSwitchActiveName('法案原文')"
>政令原文</el-button
>
> -->
<el-button type="plain" size="large" icon="Search">政令原文</el-button>
<el-button type="primary" size="large" icon="EditPen">分析报告</el-button>
</div>
</div>
......@@ -123,6 +124,7 @@
import { ref, onMounted, onUnmounted } from "vue";
import router from "@/router";
import { useRoute } from "vue-router";
import { getDecreeSummary } from "@/api/decree/introduction";
import search from "./assets/images/search.png";
import icon1 from "./assets/icons/icon1.png";
......@@ -132,12 +134,16 @@ import icon2Active from "./assets/icons/icon2_active.png";
import icon3 from "./assets/icons/icon3.png";
import icon3Active from "./assets/icons/icon3_active.png";
import DefaultIcon2 from '@/assets/icons/default-icon2.png'
const route = useRoute();
const decreeId = ref(route.query.id);
const activeName = ref("分析报告");
const summaryInfo = ref({});
const handleSwitchActiveName = name => {
activeName.value = name;
};
......@@ -189,7 +195,22 @@ const handleClickMainHeaderBtn = item => {
});
};
// 获取全局信息
const handleGetSummary = async () => {
const params = {
id: route.query.id
};
try {
const res = await getDecreeSummary(params);
console.log("全局信息", res);
if (res.code === 200 && res.data) {
summaryInfo.value = res.data;
}
} catch (error) {}
};
onMounted(() => {
handleGetSummary();
if (window.sessionStorage.getItem("activeTitle")) {
activeTitle.value = window.sessionStorage.getItem("activeTitle");
}
......@@ -217,7 +238,7 @@ onUnmounted(() => {
display: flex;
justify-content: space-between;
.layout-main-header-left-box {
width: 800px;
width: 1100px;
margin-left: 160px;
margin-top: 13px;
.left-box-top {
......@@ -226,6 +247,10 @@ onUnmounted(() => {
.icon {
width: 64px;
height: 64px;
img{
width: 100%;
height: 100%;
}
}
.info {
margin-left: 9px;
......@@ -334,7 +359,7 @@ onUnmounted(() => {
}
.layout-main-center {
// height: calc(100% - 137px);
overflow: hidden;
overflow: hidden;
}
}
.layout-report-box {
......
......@@ -30,7 +30,7 @@
</div>
</div>
<div class="box1-list-box">
<div class="box1-item" v-for="(item, index) in showCompanyList" :key="index">
<div class="box1-item" v-for="(item, index) in showCompanyList" :key="index" @click="handleToCompanyDetail">
<div class="id">{{ index + 1 }}</div>
<div class="title">{{ item.name }}</div>
<div class="icon">
......@@ -72,7 +72,7 @@
</div>
<div class="box2-main">
<div class="box2-line-box"></div>
<div class="box2-line-box" v-if="timeLineList.length"></div>
<div
class="box2-item"
:class="{ box2ItemFooter: index % 2 }"
......@@ -156,15 +156,21 @@
</template>
<script setup>
import { ref, computed,watch, onMounted } from "vue";
import { ref, computed, watch, onMounted } from "vue";
import { useRoute } from "vue-router";
import router from "@/router";
import setChart from "@/utils/setChart";
import * as echarts from "echarts";
import getBarChart from "./utils/barChart";
import { getDecreeIndustry, getDecreehylyList, getDecreeCompany, getDecreeAction } from "@/api/decree/influence";
const route = useRoute();
// 跳转企业详情
const handleToCompanyDetail = () => {
const route = router.resolve("/companyPages");
window.open(route.href, "_blank");
};
// 企业影响分析
const companyTotalNum = ref(0); // 企业数量
const isCRelated = ref(false); // 只看中国企业
......@@ -224,6 +230,7 @@ const handleGetHylyList = async () => {
box1BtnList.value = res.data;
box1BtnActiveName.value = box1BtnList.value[0].name;
curAreaId.value = box1BtnList.value[0].id;
handleGetCompanyListByArea();
}
} catch (error) {}
};
......@@ -312,26 +319,14 @@ const handleGetCompanyListByArea = async () => {
// 政令举措落实分析
const timeLineList = ref([
{
time: "2025年7月25日",
content: "商务部已成立AI出口计划办公室,并开始招募专业人员。"
},
{
time: "2025年7月31日",
content: "英伟达、微软、谷歌等企业已提交初步技术栈提案。"
},
{
time: "2025年8月5日",
content: "国务院开始与盟友国家进行初步磋商。"
},
{
time: "2025年8月9日",
content: "国防部、能源部安全审查流程尚未最终确定。"
},
{
time: "2025年8月12日",
content: "商务部已成立AI出口计划办公室,并开始招募专业人员。"
}
// {
// time: "2025年7月25日",
// content: "商务部已成立AI出口计划办公室,并开始招募专业人员。"
// },
// {
// time: "2025年7月31日",
// content: "英伟达、微软、谷歌等企业已提交初步技术栈提案。"
// }
]);
const handleGetAction = async () => {
......@@ -358,48 +353,48 @@ const handleGetAction = async () => {
// 历史相似举措及落实情况
const box3List = ref([
{
type: "科技法案",
title: "瓦森纳安排",
content: "落实情况:持续有效,但面临技术快速迭代挑战。",
time: "1996-至今",
tag: "人工智能"
},
{
type: "科技法案",
title: "云计算出口管制",
content: "落实情况:部分有效,但执行难度大。",
time: "1996-至今",
tag: "人工智能"
},
{
type: "科技法案",
title: "芯片与科学法案",
content: "落实情况:正在实施,效果待观察。",
time: "2022-至今",
tag: "人工智能"
},
{
type: "科技法案",
title: "AI芯片出口管制",
content: "落实情况:部分有效,但催生中国自主创新。",
time: "1996-至今",
tag: "人工智能"
},
{
type: "科技法案",
title: "瓦森纳安排",
content: "落实情况:持续有效,但面临技术快速迭代挑战。",
time: "1996-至今",
tag: "人工智能"
},
{
type: "科技法案",
title: "瓦森纳安排",
content: "落实情况:持续有效,但面临技术快速迭代挑战。",
time: "1996-至今",
tag: "人工智能"
}
// {
// type: "科技法案",
// title: "瓦森纳安排",
// content: "落实情况:持续有效,但面临技术快速迭代挑战。",
// time: "1996-至今",
// tag: "人工智能"
// },
// {
// type: "科技法案",
// title: "云计算出口管制",
// content: "落实情况:部分有效,但执行难度大。",
// time: "1996-至今",
// tag: "人工智能"
// },
// {
// type: "科技法案",
// title: "芯片与科学法案",
// content: "落实情况:正在实施,效果待观察。",
// time: "2022-至今",
// tag: "人工智能"
// },
// {
// type: "科技法案",
// title: "AI芯片出口管制",
// content: "落实情况:部分有效,但催生中国自主创新。",
// time: "1996-至今",
// tag: "人工智能"
// },
// {
// type: "科技法案",
// title: "瓦森纳安排",
// content: "落实情况:持续有效,但面临技术快速迭代挑战。",
// time: "1996-至今",
// tag: "人工智能"
// },
// {
// type: "科技法案",
// title: "瓦森纳安排",
// content: "落实情况:持续有效,但面临技术快速迭代挑战。",
// time: "1996-至今",
// tag: "人工智能"
// }
]);
watch(
......@@ -411,7 +406,6 @@ watch(
);
onMounted(() => {
handleGetCompanyListByArea();
handleGetChart1Data();
handleGetHylyList();
handleGetAction();
......@@ -529,6 +523,10 @@ onMounted(() => {
border-bottom: 1px solid rgba(234, 236, 238, 1);
border-radius: 4px;
display: flex;
cursor: pointer;
&:hover {
background: var(--color-bg-hover);
}
.id {
width: 24px;
height: 24px;
......
......@@ -127,7 +127,7 @@
<div class="box3-top">
<div class="box3-top-top">
<div class="left">
<img :src="box3TopData.logo" alt="" />
<img :src="box3TopData.logo?box3TopData.logo:DefaultIcon2" alt="" />
</div>
<div class="right">
<div class="name">{{ box3TopData.name }}</div>
......@@ -147,13 +147,6 @@
<div class="item-left">{{ "成立时间:" }}</div>
<div class="item-right">{{ box3TopData.clsj }}</div>
</div>
<div class="main-item">
<div class="item-icon"></div>
<div class="item-left">{{ "主要职责:" }}</div>
<div class="item-right">
{{ box3TopData.zyzz }}
</div>
</div>
<div class="main-item">
<div class="item-icon"></div>
<div class="item-left">{{ "总部地址:" }}</div>
......@@ -206,6 +199,9 @@ import box1Img from "./assets/images/box1-img.png";
import Box3Logo from "./assets/images/box3-img.png";
import { getDecreeBasicInfo, getDecreeMainContent, getDecreeOrganization } from "@/api/decree/introduction";
import DefaultIcon1 from '@/assets/icons/default-icon1.png'
import DefaultIcon2 from '@/assets/icons/default-icon2.png'
const route = useRoute();
const decreeId = ref(route.query.id);
......@@ -285,8 +281,8 @@ const handleMajorList = async () => {
handleMajorList();
// 执行机构
const box3BtnList = ref(["商务部", "经济外交行动组"]);
const box3ActiveBtn = ref("商务部");
const box3BtnList = ref([]);
const box3ActiveBtn = ref("");
const box3BtnActiveIndex = ref(0);
const handleClickBox3Btn = (btn, index) => {
box3ActiveBtn.value = btn;
......@@ -296,7 +292,6 @@ const handleClickBox3Btn = (btn, index) => {
box3TopData.value.name = box3Data.value[index].name;
box3TopData.value.eName = box3Data.value[index].ename;
box3TopData.value.clsj = box3Data.value[index].foundingDate;
box3TopData.value.zyzz = "暂无数据";
box3TopData.value.zbdz = box3Data.value[index].address;
box3TopData.value.bz = box3Data.value[index].leaderName;
eventList.value = box3Data.value[index].newsList.map(val => {
......@@ -356,6 +351,7 @@ const handleGetOrgnization = async () => {
box3TopData.value.clsj = res.data[0].foundingDate;
box3TopData.value.zbdz = res.data[0].address;
box3TopData.value.bz = res.data[0].leaderName;
box3ActiveBtn.value = res.data[0].name;
eventList.value = res.data[0].newsList.map(val => {
return {
time: val.newsDate,
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论