提交 7aff6a62 authored 作者: coderBryanFu's avatar coderBryanFu

更新系统头部标题部分

流水线 #160 已失败 于阶段
in 32 秒
......@@ -10,7 +10,7 @@
</div>
<!-- <div class="more" @click="handleToMoreNews">{{ "更多 +" }}</div> -->
</div>
<div class="msg-bubble-main" ref="scrollContainer" @mouseenter="stopScroll" @mouseleave="startScroll">
<div class="msg-bubble-main" ref="scrollContainer">
<div class="message-bubble" v-for="(item, index) in displayList" :key="index" @click="handleClickPerson(item)">
<div class="avatar-container">
<img :src="item[props.imageUrl] || avatarUser" :alt="item[props.name]" class="avatar" />
......@@ -110,9 +110,9 @@ const currentIndex = ref(0)
// 计算当前显示的消息列表(只显示固定数量的消息)
const displayList = computed(() => {
// if(props.messageList.length < 4) {
// return props.messageList
// }
if(props.messageList.length < 4) {
return props.messageList
}
// 确保 messageList 存在且有数据
if (!props.messageList || !Array.isArray(props.messageList) || props.messageList.length === 0) {
return []
......@@ -140,7 +140,7 @@ const startScroll = () => {
if (timer) clearInterval(timer)
timer = setInterval(() => {
currentIndex.value = (currentIndex.value + 1) % props.messageList.length
}, 2400) // 每2.4秒滚动一条
}, 2000) // 每秒滚动一条
}
// 停止滚动
......@@ -152,10 +152,9 @@ const stopScroll = () => {
}
onMounted(() => {
startScroll()
// if (props.messageList.length > 3) {
// startScroll()
// }
if (props.messageList.length > 3) {
startScroll()
}
})
......@@ -224,13 +223,12 @@ onBeforeUnmount(() => {
}
.msg-bubble-main {
height: 395px;
height: 402px;
overflow: hidden;
box-sizing: border-box;
padding-bottom: 8px;
padding-left: 21px;
padding-top: 23px;
// background: orange;
.message-bubble {
display: flex;
......
......@@ -11,7 +11,7 @@
`}}
</pre>
<div class="chart-box">
<GraphChart :nodes="nodes" :links="links" layoutType="none">
<GraphChart :nodes="nodes" :links="links" layoutType="force">
</GraphChart>
</div>
</el-col>
......
......@@ -66,7 +66,7 @@ const setChart = (option, chartId, allowClick, selectParam) => {
if (params.seriesName === '通过法案') {
selectParam.selectedStatus = 1
} else {
selectParam.selectedStatus = 0
selectParam.selectedStatus = null
}
const route = router.resolve({
......
......@@ -125,9 +125,11 @@ import defaultNew from "../assets/images/default-icon-news.png";
import defaultA from "../assets/images/default-icon1.png";
import { getBillBackground, getBillPersonAnalyze, getBillInfoEvent, getBillPersonAnalyzeDy } from "@/api/bill";
import { useGotoNewsDetail } from "@/router/modules/news";
const route = useRoute();
const router = useRouter();
const gotoNewsDetail = useGotoNewsDetail();
const handleNewsImgError = e => {
e.target.src = defaultNew;
......@@ -135,13 +137,9 @@ const handleNewsImgError = e => {
// 跳转到相关新闻
const handleClickEvent = item => {
const routeData = router.resolve({
path: "/newsAnalysis",
query: {
newsId: item.id
}
});
window.open(routeData.href, "_blank");
const newsId = item?.id || item?.newsId;
if (!newsId) return;
gotoNewsDetail(newsId);
};
......@@ -281,7 +279,7 @@ const handleGetBillPersonAnalyze = async isOppose => {
const { members, industryCounts } = res.data;
// 更新人员列表
personList.value = members || [];
personList.value.forEach((item, index) => {
personList.value.forEach(item => {
// 优先使用接口返回的图片,没有则使用默认头像 defaultA
item.image = item.imageUrl || defaultA;
item.icon = userIcon;
......
......@@ -123,8 +123,9 @@
<DivideHeader id="position2" class="divide2" :titleText="'资讯要闻'"></DivideHeader>
<div class="center-center">
<NewsList :newsList="newsList" img="newsImage" title="newsTitle" from="from" content="newsContent" />
<MessageBubble :messageList="messageList" imageUrl="personImage" @more-click="handleToSocialDetail"
<NewsList :newsList="newsList" img="newsImage" title="newsTitle" from="from" content="newsContent"
@item-click="handleClickNewsDetail" />
<MessageBubble :messageList="messageList" imageUrl="personImage" @more-click="handleToSocialDetail"
@person-click="handleClickToCharacter" name="personName" content="remarks" source="orgName" />
</div>
......@@ -273,7 +274,7 @@ import {
import { getPersonSummaryInfo } from "@/api/common/index";
import { getChartAnalysis } from "@/api/aiAnalysis/index";
import DivideHeader from "@/components/DivideHeader.vue";
import OverviewMainBox from "@/components/base/BoxBackground/OverviewMainBox.vue";
import overviewMainBox from "@/components/base/boxBackground/overviewMainBox.vue";
import OverviewCard from "./OverviewCard.vue";
import ResourceLibrarySection from "./ResourceLibrarySection.vue";
import { useContainerScroll } from "@/hooks/useScrollShow";
......@@ -293,6 +294,7 @@ import iconCommit from "./assets/icons/icon-commit.png";
import { ElMessage } from "element-plus";
import { Calendar } from "@element-plus/icons-vue";
import { useGotoNewsDetail } from "@/router/modules/news";
// 跳转人物主页
const handleClickToCharacter = async (id, name) => {
......@@ -500,6 +502,13 @@ const aiPaneLoading = ref({
box9: false
});
const gotoNewsDetail = useGotoNewsDetail();
const handleClickNewsDetail = news => {
const newsId = news?.newsId || news?.id;
if (!newsId) return;
gotoNewsDetail(newsId);
};
const buildAiChartPayload = key => {
if (key === "box5") {
const title = Array.isArray(box5Data.value.title) ? box5Data.value.title : [];
......@@ -860,8 +869,7 @@ const handleBox5 = async () => {
})[0]?.name
const selectParam = {
moduleType: '国会法案',
domains: domain,
isInvolveCn: true
domains: domain
}
setChart(box5Chart, "box5Chart", true, selectParam);
}
......@@ -913,7 +921,6 @@ const handleBox7Data = async () => {
moduleType: '国会法案',
key: '议院委员会',
selectedDate: box7selectetedTime.value,
isInvolveCn: true
}
const box7Chart = getDoublePieChart(data1, data2);
......@@ -958,10 +965,10 @@ const handleGetKeyTK = async () => {
.sort((a, b) => (b.count ?? 0) - (a.count ?? 0))
.slice(0, 20)
.map(item => {
return {
name: item.clause,
value: item.count
};
return {
name: item.clause,
value: item.count
};
});
}
} catch (error) {
......@@ -1043,7 +1050,7 @@ const handleBox9Data = async () => {
key: '领域',
selectedDate: box9selectetedTime.value,
selectedStatus: box9LegislativeStatus.value === '提出法案' ? 0 : 1,
isInvolveCn: true
isInvolveCn: 1
}
box9ChartInstance = setChart(box9Chart, "box9Chart", true, selectParam);
}
......@@ -1225,7 +1232,7 @@ const handleBox8Data = async () => {
moduleType: '国会法案',
key: '所处阶段',
selectedDate: box8selectetedTime.value,
isInvolveCn: true
isInvolveCn: 1
}
await nextTick();
......
......@@ -285,10 +285,22 @@ const onFormatNode = (item) => {
const onDecreeRelatedEntitie = async (id) => {
try {
const res = await getDecreeRelatedEntitie({ id });
const res = await getDecreeRelatedEntitie({
orgId: id,
rule: false,
withSanInfo: false,
});
if (res.code === 200) {
graphInfo.links = (res.data || []).map(onFormatLink);
graphInfo.nodes = (res.data || []).map(onFormatNode);
const data = res.data || {};
const parentList = Array.isArray(data.parentOrgList) ? data.parentOrgList : [];
const childrenList = Array.isArray(data.childrenOrgList) ? data.childrenOrgList : [];
const relationList = [...parentList, ...childrenList].map((item) => ({
...item,
relation: item.description || "",
companyName: item.companyName || item.name || "",
}));
graphInfo.links = relationList.map(onFormatLink);
graphInfo.nodes = relationList.map(onFormatNode);
if (entityInfo.node?.id) graphInfo.nodes.unshift(onFormatNode(entityInfo.node));
}
} catch (error) {
......
......@@ -8,7 +8,7 @@
</div>
</div>
<div class="header-center text-title-3-bold">{{ chartTitle }}</div>
<div class="header-right" @click="handleDownload">
<div class="header-right">
<img src="./assets/icons/download.svg" alt="">
</div>
</div>
......@@ -17,7 +17,7 @@
<slot name="chart-box"></slot>
</div>
<div class="tip-box">
<TipTab text="数据来源:美国各政府机构官网" data-time="" />
<TipTab />
</div>
</div>
</div>
......@@ -63,7 +63,7 @@ const defaultChartTypeList = [
]
const emit = defineEmits('clickChartItem', 'download')
const emit = defineEmits('clickChartItem')
const handleClickChartItem = (item) => {
chartItemList.value.forEach(chart => {
......@@ -104,10 +104,6 @@ const chartItemList = computed(() => {
return arr
})
const handleDownload = () => {
emit('download')
}
</script>
<style lang="scss" scoped>
......@@ -180,8 +176,6 @@ const handleDownload = () => {
.tip-box {
height: 54px;
box-sizing: border-box;
padding: 0 500px;
padding-top: 10px;
// background: orange;
}
......
......@@ -77,7 +77,7 @@ import { useRoute } from "vue-router";
import AiBox from "@/components/AiBox.vue";
import { getPersonType } from "@/api/common/index";
// import { useDraggable } from "@vueuse/core";
import ModuleHeader from '@/components/base/ModuleHeader/index.vue'
import ModuleHeader from '@/components/base/moduleHeader/index.vue'
import Menu1 from "@/assets/icons/overview/menu1.png";
import Menu2 from "@/assets/icons/overview/menu2.png";
......
......@@ -13,10 +13,10 @@
<script>
import { ref, shallowRef, nextTick, watch } from 'vue';
import * as pdfjsLib from 'pdfjs-dist/legacy/build/pdf';
import pdfWorkerUrl from 'pdfjs-dist/legacy/build/pdf.worker.min?url';
import PdfWorker from 'pdfjs-dist/legacy/build/pdf.worker.min?worker';
// 通过 Vite 的 ?url 产出静态资源地址,确保线上/线下都能正确加载 worker
pdfjsLib.GlobalWorkerOptions.workerSrc = pdfWorkerUrl;
// 使用 Vite 的 ?worker 直接注入 Worker,避免线上 mjs MIME 类型问题
pdfjsLib.GlobalWorkerOptions.workerPort = new PdfWorker();
export default {
name: 'PdfViewer',
props: {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论