提交 9aa0462e authored 作者: coderBryanFu's avatar coderBryanFu

update

上级 199f9d95
import request from "@/api/request.js";
// 头部信息
/**
* @param { id }
*/
export function getGovOrgBasicInfo(params) {
return request({
method: 'GET',
url: `/api/governmentOrg/info/${params.id}`,
params
})
}
// 最新动态
/**
* @param { orgId, cRelated, currentPage, pageSize }
*/
export function getGovOrgLatestDynamics(params) {
return request({
method: 'GET',
url: `/api/governmentOrg/dynamics/${params.orgId}`,
params
})
}
// 基本信息-关键人物
/**
* @param { orgId }
*/
export function getGovOrgKeyPerson(params) {
return request({
method: 'GET',
url: `/api/governmentOrg/person/${params.orgId}`,
params
})
}
// 深度挖掘--------------------------------------------------
// 资助企业情况
/**
* @param { orgId }
*/
export function getGovOrgCompanyArea(params) {
return request({
method: 'GET',
url: `/api/governmentOrg/field/${params.orgId}`,
params
})
}
// 主要科技政策观点
/**
* @param { orgId }
*/
export function getGovOrgOpinions(params) {
return request({
method: 'GET',
url: `/api/governmentOrg/keyWord/${params.orgId}`,
params
})
}
\ No newline at end of file
......@@ -540,7 +540,12 @@ import Message3 from "./assets/images/message-icon3.png";
// 跳转行政机构主页
const handleToInstitution = item => {
const curRoute = router.resolve("/institution");
const curRoute = router.resolve({
path: "/institution",
query: {
id: item.id
}
});
window.open(curRoute.href, "_blank");
};
......
......@@ -6,7 +6,7 @@ const getBarChart = (nameList, valueList) => {
tooltip: {},
grid: {
top: '3%',
right: '7%',
right: 40,
bottom: '1%',
left: '1%',
containLabel: true
......@@ -55,7 +55,7 @@ const getBarChart = (nameList, valueList) => {
barWidth: 8,
label: {
show: true,
position: [355, 0],
position: [330, 0],
formatter: function(params) {
return params.value
}
......
......@@ -115,15 +115,21 @@
<div class="box4-main-right-main">
<div class="box4-main-right-item">
<div class="icon"></div>
<div class="text">{{ '在2016年和2024年的总统竞选中,卢特尼克利用其在金融界的影响力,为特朗普筹集了数千万美元的竞选资金,并个人捐赠了1000万美元。' }}</div>
<div class="text">
{{
"在2016年和2024年的总统竞选中,卢特尼克利用其在金融界的影响力,为特朗普筹集了数千万美元的竞选资金,并个人捐赠了1000万美元。"
}}
</div>
</div>
<div class="box4-main-right-item">
<div class="box4-main-right-item">
<div class="icon"></div>
<div class="text">{{ '提名霍华德·卢特尼克担任商务部长,赋予其直接监督美国贸易代表办公室(USTR)的权力。' }}</div>
<div class="text">
{{ "提名霍华德·卢特尼克担任商务部长,赋予其直接监督美国贸易代表办公室(USTR)的权力。" }}
</div>
</div>
<div class="box4-main-right-item">
<div class="box4-main-right-item">
<div class="icon"></div>
<div class="text">{{ '在接受CBS News采访时强调,特朗普政府的政策“是美国历史上最重要的”。' }}</div>
<div class="text">{{ "在接受CBS News采访时强调,特朗普政府的政策“是美国历史上最重要的”。" }}</div>
</div>
</div>
</div>
......@@ -146,12 +152,15 @@
<script setup>
import { ref, computed, onMounted } from "vue";
import { useRoute } from "vue-router";
import setChart from "@/utils/setChart";
import getSankeyChart from "./utils/sankey";
import getPieChart from "./utils/piechart";
import getWordCloudChart from "./utils/worldCloudChart";
import getGraphChart from "./utils/graph";
import { getGovOrgCompanyArea, getGovOrgOpinions } from "@/api/institution/index";
import Img from "./assets/images/9.png";
import Img1 from "./assets/images/1.png";
import Img2 from "./assets/images/2.png";
......@@ -162,6 +171,8 @@ import Img6 from "./assets/images/6.png";
import Img7 from "./assets/images/7.png";
import Img8 from "./assets/images/8.png";
const route = useRoute()
const box1ChartData = ref({
nodes: [
{
......@@ -289,6 +300,7 @@ const box1ChartData = ref({
]
});
// 资助企业情况
const box2ChartData = ref([
{
name: "集成电路",
......@@ -323,6 +335,29 @@ const box2ChartData = ref([
value: 24
}
]);
const handleGetCompanyArea = async () => {
const params = {
orgId: route.query.id
};
try {
const res = await getGovOrgCompanyArea(params);
console.log("资助企业情况", res);
if (res.code === 200 && res.data) {
box2ChartData.value = res.data.map(item => {
return {
name: item.industry,
value: item.amount
};
});
}
} catch (error) {}
};
const handleBox2 = async () => {
await handleGetCompanyArea();
const box2Chart = getPieChart(box2ChartData.value);
setChart(box2Chart, "box2Chart");
};
const box3ChartData = ref([
{ name: "人工智能(AI)", value: 100 },
......@@ -344,6 +379,20 @@ const box3ChartData = ref([
{ name: "不得向中国机构提供援助", value: 62 },
{ name: "开展先进生物能源计划", value: 51 }
]);
const handleGetOpinions = async () => {
const params = {
orgId: '50754570da464d0a81a5563dcb61d2ec'
}
try {
const res = await getGovOrgOpinions(params)
console.log('主要科技政策观点', res);
} catch (error) {
}
}
const box4ChartData = ref({
nodes: [
......@@ -371,10 +420,10 @@ const box4ChartData = ref({
});
onMounted(() => {
handleBox2();
handleGetOpinions()
const box1Chart = getSankeyChart(box1ChartData.value.nodes, box1ChartData.value.links);
setChart(box1Chart, "box1Chart");
const box2Chart = getPieChart(box2ChartData.value);
setChart(box2Chart, "box2Chart");
const box3Chart = getWordCloudChart(box3ChartData.value);
setChart(box3Chart, "box3Chart");
......
......@@ -2,7 +2,7 @@
<div class="wrap">
<div class="header">
<div class="header-left">
<img src="@/assets/images/decree-org.png" alt="" />
<img :src="institutionInfo.logo?institutionInfo.logo: DefaultIcon2" alt="" />
</div>
<div class="header-right">
<div class="title">{{ institutionInfo.name }}</div>
......@@ -42,17 +42,45 @@
<script setup>
import { ref, computed, onMounted } from "vue";
import { useRoute } from "vue-router";
import InsDetail from "./insDetail/index.vue";
import Deepdig from "./deepdig/index.vue";
import Sanction from "./sanction/index.vue";
import {getGovOrgBasicInfo} from '@/api/institution/index'
import DefaultIcon2 from '@/assets/icons/default-icon2.png'
const route = useRoute()
const institutionInfo = ref({
name: "美国商务部",
enName: "United States Department of Commerce",
desc: "美国联邦政府的重要经济部门,主要职责为国际贸易、进出口管制、经济数据统计及专利商标管理。",
tagList: ["实体清单", "232调查", "行政令"]
name: "",
enName: "",
desc: "",
tagList: [],
logo: ''
});
const handleGetInfo = async () => {
const params = {
id: route.query.id
}
try {
const res = await getGovOrgBasicInfo(params)
console.log('机构信息', res);
if(res.code === 200 && res.data) {
institutionInfo.value.name = res.data.orgName
institutionInfo.value.enName = res.data.orgNameEn
institutionInfo.value.desc = res.data.orgIntroduction
institutionInfo.value.name = res.data.orgName
}
} catch (error) {
}
}
handleGetInfo()
const activeTabName = ref("机构详情");
const tabList = ref([
......
......@@ -4,6 +4,15 @@
<div class="box-header">
<div class="header-left"></div>
<div class="title">最新动态</div>
<div class="check-box"><el-checkbox :checked="isCrelated" label="只看涉华动态" /></div>
<div class="header-btn-box">
<div class="btn" :class="{ btnActive: dynamicsName === '机构动态' }" @click="handleClickBtn('机构动态')">
{{ "机构动态" }}
</div>
<div class="btn" :class="{ btnActive: dynamicsName === '主官动态' }" @click="handleClickBtn('主官动态')">
{{ "主官动态" }}
</div>
</div>
<div class="header-right">
<div class="icon">
<img src="@/assets/icons/box-header-icon2.png" alt="" />
......@@ -18,13 +27,14 @@
<div class="line" v-if="index !== curList.length - 1"></div>
<div class="time">{{ item.time }}</div>
<div class="icon">
<img src="@/assets/images/decree-org.png" alt="" />
<img :src="item.logoUrl ? item.logoUrl : DefaultIcon2" alt="" />
</div>
<div class="info">
<div class="header">
<div class="title">{{ item.title }}</div>
<div
class="type"
v-if="item.type"
:class="{
type1: item.type.status === 2,
type2: item.type.status === 3,
......@@ -36,17 +46,24 @@
</div>
<div class="content">{{ item.content }}</div>
<div class="tag-box">
<div class="tag" v-for="(val, idx) in item.tagList" :key="idx">{{ val }}</div>
<div class="tag" v-for="(val, idx) in item.industryList" :key="idx">{{ val }}</div>
</div>
</div>
</div>
</div>
<div class="left-footer">
<div class="info">
{{ `共有153项动态` }}
{{ `共有${totalNum}项动态` }}
</div>
<div class="page-box">
<el-pagination background layout="prev, pager, next" :total="153" />
<el-pagination
background
layout="prev, pager, next"
@current-change="handleCurrentChange"
:pageSize="pageSize"
:current-page="currentPage"
:total="totalNum"
/>
</div>
</div>
</div>
......@@ -94,9 +111,9 @@
{{ "关键人物:" }}
</div>
<div class="user-content">
<div class="user-item" v-for="(item, index) in basicInfo.keyUser" :key="index">
<div class="user-item" v-for="(item, index) in keyUser" :key="index">
<div class="user-item-left">
<img :src="item.img" alt="" />
<img :src="item.avatarUrl" alt="" />
</div>
<div class="user-item-right">
<div class="name">{{ item.name }}</div>
......@@ -112,12 +129,17 @@
<script setup>
import { ref, computed, onMounted } from "vue";
import { useRoute } from "vue-router";
import Img from "./assets/images/img.png";
import User1 from "./assets/images/user1.png";
import User2 from "./assets/images/user2.png";
import User3 from "./assets/images/user3.png";
import User4 from "./assets/images/user4.png";
import DefaultIcon2 from "@/assets/icons/default-icon2.png";
import { getGovOrgLatestDynamics, getGovOrgKeyPerson } from "@/api/institution/index";
const route = useRoute()
const basicInfo = ref({
image: Img,
......@@ -125,142 +147,190 @@ const basicInfo = ref({
dizhi: "华盛顿特区宪法大道1401号赫伯特·C·胡佛大楼 ",
zhize: "国际贸易、进出口管制、经济数据统计及专利商标管理",
xiashujigou: "工业与安全局、国际贸易管理局、专利商标局等",
zhicaishouduan: "实体清单、军事最终用户清单、​​“301条款”关税、​​“232条款”关税、特别指定国民清单",
keyUser: [
{
name: "霍华德·卢特尼克",
img: User1,
position: "部长"
},
{
name: "保罗·达巴尔",
img: User2,
position: "副部长"
},
{
name: "杰弗里·凯斯勒",
img: User3,
position: "工业与安全局局长"
},
{
name: "约翰·斯奎尔斯",
img: User4,
position: "专利商标局局长"
}
]
zhicaishouduan: "实体清单、军事最终用户清单、​​“301条款”关税、​​“232条款”关税、特别指定国民清单"
});
const curList = ref([
{
title: "美国商务部:宣布对华全面加征100%关税",
time: "2025 10月10日",
content:
"特朗普宣布自11月1日起对所有中国进口商品加征100%额外关税,叠加现有关税后总水平可达130%或更高。同时宣布将对“所有关键美国制造软件”实施严格的出口管制。",
type: {
name: "行政令",
status: 2
},
tagList: ["人工智能"]
},
{
title: "美国商务部:BIS更新“实体清单”",
time: "2025 10月4日",
content:
"美国商务部工业与安全局公布对中国半导体出口管制措施新规则,将140家中国半导体公司列入“实体清单”,分别是136家中国实体和4家海外关联企业。",
type: {
name: "实体清单",
status: 4
},
tagList: ["集成电路"]
},
{
title: "美国商务部:​出台“50%穿透规则”(关联方规则)",
time: "2025 9月29日",
content:
"规定凡被列入“实体清单”或“军事最终用户清单”的企业,其直接或间接持股超过50%的子公司将自动受到同等出口管制限制。此规则极大地扩大了制裁范围,且未设过渡期。",
type: {
name: "行政令",
status: 2
},
tagList: ["生物科技"]
},
{
title: "美国商务部:对华港口设备加征高额关税",
time: "2025 9月21日",
content:
"美国贸易代表办公室(USTR)公告,作为“301条款”行动的一部分,对特定中国制造的港口设备加征额外关税,其中船到岸起重机(STS)和集装箱底盘车及零部件均加征100%关税,于11月9日生效。",
type: {
name: "301调查",
status: 3
},
tagList: ["先进制造"]
},
{
title: "美国商务部:BIS更新“实体清单”",
time: "2025 9月15日",
content:
"美国商务部工业和安全局宣布更新《出口管理条例》(EAR),并发布两项最终规则,将25家中国企业及其相关实体列入实体清单。",
type: {
name: "实体清单",
status: 4
},
tagList: ["集成电路"]
},
{
title: "美国商务部:BIS更新“实体清单”",
time: "2025 9月15日",
content:
"美国商务部工业和安全局宣布更新《出口管理条例》(EAR),并发布两项最终规则,将25家中国企业及其相关实体列入实体清单。",
type: {
name: "实体清单",
status: 4
},
tagList: ["集成电路"]
},
{
title: "美国商务部:加强对华AI芯片出口限制",
time: "2025 9月10日",
content:
"美国政府要求英特尔、AMD、英伟达等公司对向中国出口的先进AI处理器实施严格的许可证制度。英特尔Gaudi系列芯片等因性能超标明确受限。同时,考虑对中国AI初创企业DeepSeek实施制裁。",
type: {
name: "行政令",
status: 2
},
tagList: ["人工智能", "集成电路"]
},
{
title: "美国商务部:BIS更新“实体清单”",
time: "2025 9月15日",
content:
"美国商务部工业和安全局宣布更新《出口管理条例》(EAR),并发布两项最终规则,将25家中国企业及其相关实体列入实体清单。",
type: {
name: "实体清单",
status: 4
},
tagList: ["集成电路"]
},
{
title: "美国商务部:​发布针对中国网联汽车的禁令",
time: "2025 8月25日",
content: "美国商务部工业与安全局(BIS)发布一项最终规则,禁止涉及销售或进口其认定软件与中国有关联的联网汽车的交易。",
type: {
name: "行政令",
status: 2
},
tagList: ["能源", "先进制造"]
},
{
title: "美国商务部:考虑对中国无人机实施新限制",
time: "2025 8月19日",
content:
"美国商务部表示正在考虑制定新规则,以限制或禁止中国无人机在美国境内使用,并就所谓“保护无人机供应链”的潜在规则征求公众意见。",
type: {
name: "行政令",
status: 2
},
tagList: ["先进制造"]
}
// 关键人物
const keyUser = ref([
// {
// name: "霍华德·卢特尼克",
// avatarUrl: User1,
// position: "部长"
// },
// {
// name: "保罗·达巴尔",
// avatarUrl: User2,
// position: "副部长"
// },
// {
// name: "杰弗里·凯斯勒",
// avatarUrl: User3,
// position: "工业与安全局局长"
// },
// {
// name: "约翰·斯奎尔斯",
// avatarUrl: User4,
// position: "专利商标局局长"
// }
]);
const handleGetKeyUser = async () => {
const params = {
orgId: route.query.id
};
try {
const res = await getGovOrgKeyPerson(params);
console.log("关键人物", res);
keyUser.value = res.data;
} catch (error) {}
};
handleGetKeyUser();
// const curList = ref([
// {
// title: "美国商务部:宣布对华全面加征100%关税",
// time: "2025 10月10日",
// content:
// "特朗普宣布自11月1日起对所有中国进口商品加征100%额外关税,叠加现有关税后总水平可达130%或更高。同时宣布将对“所有关键美国制造软件”实施严格的出口管制。",
// type: {
// name: "行政令",
// status: 2
// },
// tagList: ["人工智能"]
// },
// {
// title: "美国商务部:BIS更新“实体清单”",
// time: "2025 10月4日",
// content:
// "美国商务部工业与安全局公布对中国半导体出口管制措施新规则,将140家中国半导体公司列入“实体清单”,分别是136家中国实体和4家海外关联企业。",
// type: {
// name: "实体清单",
// status: 4
// },
// tagList: ["集成电路"]
// },
// {
// title: "美国商务部:​出台“50%穿透规则”(关联方规则)",
// time: "2025 9月29日",
// content:
// "规定凡被列入“实体清单”或“军事最终用户清单”的企业,其直接或间接持股超过50%的子公司将自动受到同等出口管制限制。此规则极大地扩大了制裁范围,且未设过渡期。",
// type: {
// name: "行政令",
// status: 2
// },
// tagList: ["生物科技"]
// },
// {
// title: "美国商务部:对华港口设备加征高额关税",
// time: "2025 9月21日",
// content:
// "美国贸易代表办公室(USTR)公告,作为“301条款”行动的一部分,对特定中国制造的港口设备加征额外关税,其中船到岸起重机(STS)和集装箱底盘车及零部件均加征100%关税,于11月9日生效。",
// type: {
// name: "301调查",
// status: 3
// },
// tagList: ["先进制造"]
// },
// {
// title: "美国商务部:BIS更新“实体清单”",
// time: "2025 9月15日",
// content:
// "美国商务部工业和安全局宣布更新《出口管理条例》(EAR),并发布两项最终规则,将25家中国企业及其相关实体列入实体清单。",
// type: {
// name: "实体清单",
// status: 4
// },
// tagList: ["集成电路"]
// },
// {
// title: "美国商务部:BIS更新“实体清单”",
// time: "2025 9月15日",
// content:
// "美国商务部工业和安全局宣布更新《出口管理条例》(EAR),并发布两项最终规则,将25家中国企业及其相关实体列入实体清单。",
// type: {
// name: "实体清单",
// status: 4
// },
// tagList: ["集成电路"]
// },
// {
// title: "美国商务部:加强对华AI芯片出口限制",
// time: "2025 9月10日",
// content:
// "美国政府要求英特尔、AMD、英伟达等公司对向中国出口的先进AI处理器实施严格的许可证制度。英特尔Gaudi系列芯片等因性能超标明确受限。同时,考虑对中国AI初创企业DeepSeek实施制裁。",
// type: {
// name: "行政令",
// status: 2
// },
// tagList: ["人工智能", "集成电路"]
// },
// {
// title: "美国商务部:BIS更新“实体清单”",
// time: "2025 9月15日",
// content:
// "美国商务部工业和安全局宣布更新《出口管理条例》(EAR),并发布两项最终规则,将25家中国企业及其相关实体列入实体清单。",
// type: {
// name: "实体清单",
// status: 4
// },
// tagList: ["集成电路"]
// },
// {
// title: "美国商务部:​发布针对中国网联汽车的禁令",
// time: "2025 8月25日",
// content: "美国商务部工业与安全局(BIS)发布一项最终规则,禁止涉及销售或进口其认定软件与中国有关联的联网汽车的交易。",
// type: {
// name: "行政令",
// status: 2
// },
// tagList: ["能源", "先进制造"]
// },
// {
// title: "美国商务部:考虑对中国无人机实施新限制",
// time: "2025 8月19日",
// content:
// "美国商务部表示正在考虑制定新规则,以限制或禁止中国无人机在美国境内使用,并就所谓“保护无人机供应链”的潜在规则征求公众意见。",
// type: {
// name: "行政令",
// status: 2
// },
// tagList: ["先进制造"]
// }
// ]);
const dynamicsName = ref("机构动态");
const isCrelated = ref(false);
const currentPage = ref(1);
const pageSize = ref(10);
// 处理页码改变事件
const handleCurrentChange = page => {
currentPage.value = page;
};
const latestDynamicsList = ref([]);
const totalNum = ref(0);
const curList = computed(() => {
const startIndex = (currentPage.value - 1) * pageSize.value;
const endIndex = startIndex + pageSize.value;
return latestDynamicsList.value.slice(startIndex, endIndex);
});
const handleClickBtn = name => {
dynamicsName.value = name;
};
const handleGetLatestDynamics = async () => {
const params = {
orgId: route.query.id,
cRelated: isCrelated.value ? "Y" : "N",
currentPage: 1,
pageSize: 9999999
};
try {
const res = await getGovOrgLatestDynamics(params);
console.log("最新动态", res);
if (res.code === 200 && res.data) {
latestDynamicsList.value = res.data.content;
totalNum.value = res.data.totalElements;
}
} catch (error) {}
};
handleGetLatestDynamics();
</script>
<style lang="scss" scoped>
......@@ -295,10 +365,15 @@ const curList = ref([
font-size: 18px;
font-weight: 700;
}
.check-box {
position: absolute;
top: 15px;
right: 275px;
}
.header-btn-box {
position: absolute;
top: 14px;
right: 52px;
right: 91px;
display: flex;
.btn {
margin-left: 8px;
......@@ -367,10 +442,11 @@ const curList = ref([
}
.left {
width: 1064px;
height: 1683px;
max-height: 1683px;
.left-main {
border-top: 1px solid rgba(234, 236, 238, 1);
height: 1551px;
max-height: 1551px;
min-height: 660px;
.left-main-item {
display: flex;
margin-top: 16px;
......@@ -437,12 +513,19 @@ const curList = ref([
}
}
.content {
height: 100px;
overflow: hidden;
margin-top: 8px;
color: rgba(95, 101, 108, 1);
font-family: Microsoft YaHei;
font-size: 16px;
font-weight: 400;
line-height: 24px;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 4; /* 控制显示的行数 */
overflow: hidden;
text-overflow: ellipsis;
}
.tag-box {
margin-top: 9px;
......@@ -464,7 +547,8 @@ const curList = ref([
}
}
.left-footer {
height: 75px;
margin-top: 10px;
height: 65px;
border-top: 1px solid rgba(234, 236, 238, 1);
display: flex;
justify-content: space-between;
......@@ -530,19 +614,24 @@ const curList = ref([
text-align: left;
}
.user-content {
margin-top: 19px;
height: 120px;
margin-top: 19px;
display: flex;
flex-wrap: wrap;
gap: 16px 39px;
justify-content: center;
gap: 16px 20px;
justify-content: flex-start;
overflow: hidden;
overflow-y: auto;
.user-item {
width: 185px;
width: 200px;
height: 49px;
display: flex;
gap: 8px;
.user-item-left {
width: 48px;
height: 48px;
border-radius: 24px;
overflow: hidden;
img {
width: 100%;
height: 100%;
......@@ -550,6 +639,8 @@ const curList = ref([
}
.user-item-right {
.name {
width: 142px;
height: 24px;
color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei;
......@@ -558,6 +649,9 @@ const curList = ref([
line-height: 24px;
letter-spacing: 0px;
text-align: left;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.position {
height: 24px;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论