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

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

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