提交 b243f69b authored 作者: 闫鹏's avatar 闫鹏

合并分支 'yp-dev' 到 'master'

Yp dev 查看合并请求 !47
......@@ -176,7 +176,7 @@ export function getRiskSignal(moduleId = "0103") {
/**
* 社交媒体
*/
*/
export function getSocialMediaInfo(moduleId = "0103") {
return request200(
request({
......@@ -186,6 +186,18 @@ export function getSocialMediaInfo(moduleId = "0103") {
);
}
/**
* 新闻资讯
*/
export function getNewsInfo(moduleId = "0103") {
return request200(
request({
method: "GET",
url: `/api/commonFeature/news/${moduleId}`
})
);
}
/**
* 查询重点人物
* @returns {Promise<{
......
......@@ -124,6 +124,9 @@ const fetchKeyEntityList = async (date = "2025-11-11", keyword = "") => {
};
onMounted(async () => {
// 确保默认值正确设置
domainValue.value = domainOptions[0].value;
typeValue.value = typeOptions[0].value;
try {
const [entitiesGrowthTrendData, entitiesUpdateCountData] = await Promise.all([
getEntitiesGrowthTrend(),
......@@ -163,6 +166,10 @@ onMounted(async () => {
}
});
const domainOptions = [
{
value: "",
label: "全部"
},
{
value: "1",
label: "人工智能"
......@@ -249,6 +256,10 @@ const domainOptions = [
}
];
const typeOptions = [
{
value: "",
label: "全部"
},
{
value: "1",
label: "人物"
......@@ -262,8 +273,8 @@ const typeOptions = [
label: "地址"
}
];
const domainValue = ref(domainOptions[0].value);
const typeValue = ref(typeOptions[1].value);
const domainValue = ref("");
const typeValue = ref("");
const bar1Option = shallowRef({});
const bar1DataIsEmpty = ref(false);
watch(
......
......@@ -19,7 +19,7 @@
</template>
<script setup>
const emit = defineEmits(["click"]);
const emit = defineEmits(["click", "info-click"]);
defineProps({
avatar: {
type: String,
......
......@@ -2,7 +2,7 @@
<div class="news-list">
<div v-for="(item, index) in listData" :key="index" class="news-item" @click="handleItemClick(item)">
<div class="news-image">
<img :src="item.image" :alt="item.title" />
<img :src="item.image || newsImg" :alt="item.title" />
</div>
<div class="news-content">
<div class="news-header">
......@@ -19,6 +19,7 @@
</template>
<script setup>
import newsImg from "@/assets/images/news-img.png";
const props = defineProps({
listData: {
type: Array,
......
......@@ -220,7 +220,7 @@
<template #default>
<div class="news-list">
<NewsList :list-data="customNewsData" />
<NewsList :list-data="newsList" @click="handleNewsInfoClick" />
</div>
</template>
</custom-container>
......@@ -232,7 +232,7 @@
<MessageBubble
v-for="(item, index) in socialMediaList"
@click="handlePerClick(item)"
@info-click="handleInfoClick(item)"
@info-click="handleMediaClick(item)"
:key="index"
:avatar="item.avatar"
:name="item.name"
......@@ -607,6 +607,17 @@
</template>
</el-dialog>
</div>
<el-dialog v-model="mediaVisible" title="社交媒体信息" width="500" :before-close="handleMediaClose">
<div class="dialog-content">
{{ currentMedia }}
</div>
<template #footer>
<div class="dialog-footer">
<!-- <el-button @click="mediaVisible = false">Cancel</el-button> -->
<el-button type="primary" @click="mediaVisible = false"> 确定 </el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
......@@ -664,14 +675,6 @@ import bill10 from "./assets/images/bill10.png";
import bill11 from "./assets/images/bill11.png";
import bill12 from "./assets/images/bill12.png";
import fudanIcon from "./assets/images/fudan.png";
import fukongIcon from "./assets/images/fukong.png";
import hualingIcon from "./assets/images/hualing.png";
import jimuxiIcon from "./assets/images/jimuxi.png";
import shenggongIcon from "./assets/images/shenggong.png";
import shoushiIcon from "./assets/images/shoushi.png";
import tianyiIcon from "./assets/images/tianyi.png";
import aircasIcon from "./assets/images/aircas.png";
import {
getEntitiesDataCount,
getEntitiesDataInfo,
......@@ -682,7 +685,8 @@ import {
getSanctionProcess,
getSanDomainCount,
getRiskSignal,
getSocialMediaInfo
getSocialMediaInfo,
getNewsInfo
} from "@/api/exportControl";
import { getMultipleBarChart_m } from "./utils/charts";
import { formatAnyDateToChinese } from "./utils";
......@@ -718,6 +722,9 @@ const riskSignalList = ref([]);
// 社交媒体信息
const socialMediaList = ref([]);
// 新闻资讯
const newsList = ref([]);
onMounted(async () => {
try {
const [dataCount, entitiesDataInfo, industryCountByYear, countDomainByYear] = await Promise.all([
......@@ -762,6 +769,8 @@ onMounted(async () => {
await fetchRiskSignals("0103");
// 获取社交媒体信息
await fetchSocialMediaInfo();
// 获取新闻资讯
await fetchNewsInfo();
await fetchEntitiesList(currentPage.value, pageSize.value);
await fetchSanctionProcess(sanctionPage.value, 10);
// 获取雷达图数据
......@@ -828,7 +837,7 @@ watch(
// trendOption.value = getMultipleBarChart_m(res);
// }
// 整理数据并更新趋势图
if (res && res.yearDomainCount) {
if (res && res[0].yearDomainCount) {
trendOption.value = processYearDomainCountData(res[0].yearDomainCount);
}
}
......@@ -1179,6 +1188,24 @@ const fetchSocialMediaInfo = async () => {
}
};
// 添加获取新闻资讯的方法
const fetchNewsInfo = async () => {
try {
const data = await getNewsInfo();
if (data && Array.isArray(data)) {
newsList.value = data.map(item => ({
avatar: item.newsImage,
name: item.newsTitle,
time: formatTime(item.newsDate),
source: item.newsOrg,
description: item.newsContent
}));
}
} catch (err) {
console.error("获取新闻资讯失败:", err);
}
};
const handlePerClick = item => {
console.log("点击了社交媒体消息:", item);
const route = router.resolve({
......@@ -1406,6 +1433,18 @@ const handleToMoreNews = () => {
window.open(route.href, "_blank");
};
const handleNewsInfoClick = item => {
console.log("点击了社交媒体消息的更多信息:", item);
const route = router.resolve({
path: "/newsAnalysis",
query: {
newsId: item.id
}
});
window.open(route.href, "_blank");
};
onMounted(async () => {
handleGetHylyList();
let chart1 = getMultiLineChart(chart1Data.value.title, chart1Data.value.data[0].value, chart1Data.value.data[1].value);
......@@ -1422,6 +1461,17 @@ const handleOrgClick = item => {
currentOrgList.value = item.ruleOrgList;
dialogVisible.value = true;
};
const mediaVisible = ref(false);
const currentMedia = ref("");
const handleMediaClose = () => {
mediaVisible.value = false;
};
const handleMediaClick = item => {
console.log(item, item.name);
currentMedia.value = item.content;
mediaVisible.value = true;
};
</script>
<style lang="scss" scoped>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论