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

更新系统头部标题部分

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