提交 c80bc520 authored 作者: 张伊明's avatar 张伊明

撤销 "合并分支 'fk-dev' 到 'pre'"

这将还原合并请求 !259
上级 198a5ca5
流水线 #147 已通过 于阶段
in 1 分 35 秒
......@@ -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({
......
......@@ -273,7 +273,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";
......@@ -860,8 +860,7 @@ const handleBox5 = async () => {
})[0]?.name
const selectParam = {
moduleType: '国会法案',
domains: domain,
isInvolveCn: true
domains: domain
}
setChart(box5Chart, "box5Chart", true, selectParam);
}
......@@ -913,7 +912,6 @@ const handleBox7Data = async () => {
moduleType: '国会法案',
key: '议院委员会',
selectedDate: box7selectetedTime.value,
isInvolveCn: true
}
const box7Chart = getDoublePieChart(data1, data2);
......@@ -958,10 +956,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 +1041,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 +1223,7 @@ const handleBox8Data = async () => {
moduleType: '国会法案',
key: '所处阶段',
selectedDate: box8selectetedTime.value,
isInvolveCn: true
isInvolveCn: 1
}
await nextTick();
......
......@@ -30,7 +30,7 @@
</div>
<div class="header-footer">
<div class="header-footer-left">
<ActiveTag v-for="tag, index in activeTagList" :key="index" :tagName="tag.name"
<ActiveTag v-for="tag, index in activeTagList" :key="index" :tagName="tag"
@close="handleCloseCurTag(tag, index)" />
</div>
<div class="header-footer-right">
......@@ -52,8 +52,8 @@
<div class="content-header">
<ChartHeader :list="staticsDemensionList" @clickItem="handleClickDemensionItem">
<template #chart-header-right>
<el-select v-model="selectedTime" placeholder="选择时间" style="width: 150px" v-show="curDemension === '提案时间'"
@change="handleChangeTime">
<el-select v-model="selectedTime" placeholder="选择时间" style="width: 150px"
v-show="curDemension === '提案时间'">
<el-option v-for="item in timeList" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
......@@ -62,7 +62,7 @@
</div>
<div class="content-main">
<ChartContainer :chartTitle="curChartTitle" :chartTypeList="curChartTypeList"
@clickChartItem="handleSwitchActiveChart" @download="handleDownloadCurChartData">
@clickChartItem="handleSwitchActiveChart">
<template #chart-box>
<LineChart v-if="activeChart === '折线图'" :lineChartData="curChartData" />
<BarChart v-if="activeChart === '柱状图'" :barChartData="curChartData" />
......@@ -91,8 +91,6 @@
</div>
<div class="header-left-item2 text-tip-1">{{ `已选择${selectedCount}项` }}</div>
<div class="header-left-item2 text-tip-1 cancel" @click="handleClearAll" v-show="selectedCount">{{ '取消' }}
<div class="header-left-item3 text-tip-1" v-if="isShowAllDataMaxLengthTip">{{ `(当前最大选择不能超过1万条!)` }}</div>
</div>
</div>
<div class="header-right">
......@@ -119,7 +117,7 @@
</div>
</div>
</div>
<div class="data-main-box-main-content" v-loading="loading" element-loading-text="全部数据加载中,请稍候...">
<div class="data-main-box-main-content">
<el-table ref="tableRef" :data="tableData" row-key="id" @selection-change="handleSelectionChange"
@select="handleSelect" @select-all="handleSelectAll" style="width: 100%" :row-style="{ height: '52px' }">
<el-table-column type="selection" width="40" />
......@@ -129,10 +127,10 @@
}}</span>
</template>
</el-table-column>
<el-table-column label="提案时间" width="120" class-name="date-column">
<el-table-column label="日期" width="120" class-name="date-column">
<template #default="scope">{{ scope.row.date }}</template>
</el-table-column>
<el-table-column label="提人" width="480">
<el-table-column label="提人" width="480">
<template #default="scope">
<span class="person-item text-compact" @click="handlePerClick(scope.row)">{{ scope.row.sponsorPersonName
}}</span>
......@@ -184,17 +182,7 @@ const handleSwitchChartData = () => {
})[0]
setTimeout(() => {
activeChart.value = curDemensionItem.chartTypeList[0]
if (curDemension.value === '提案时间') {
if (selectedTime.value === '按月度统计') {
curChartData.value = curDemensionItem.data
} else if (selectedTime.value === '按季度统计') {
curChartData.value = curDemensionItem.quatarData
} else {
curChartData.value = curDemensionItem.yearData
}
} else {
curChartData.value = curDemensionItem.data
}
curChartData.value = curDemensionItem.data
})
}
}
......@@ -214,12 +202,10 @@ const staticsDemensionList = ref([
dataY: []
},
quatarData: {
dataX: [],
dataY: []
},
yearData: {
dataX: [],
dataY: []
}
},
{
......@@ -265,7 +251,6 @@ const curChartTypeList = computed(() => {
return arr[0].chartTypeList
})
// 当前图表标题
const curChartTitle = computed(() => {
let arr = staticsDemensionList.value.filter(item => item.active)
return arr[0].chartTitle
......@@ -284,19 +269,11 @@ const handleClickDemensionItem = (val) => {
curDemension.value = val.name
setTimeout(() => {
activeChart.value = val.chartTypeList[0]
if (curDemension.value === '提案时间' && selectedTime.value === '按年度统计') {
curChartData.value = val.yearData
} else if (curDemension.value === '提案时间' && selectedTime.value === '按季度统计') {
curChartData.value = val.quatarData
} else {
curChartData.value = val.data
}
curChartData.value = val.data
})
}
// 时间图表 当前选择时间
const selectedTime = ref('按月统计')
// 时间图表-时间列表
const timeList = ref([
{
label: '按年度统计',
......@@ -311,140 +288,51 @@ const timeList = ref([
value: '按月度统计'
},
])
const handleChangeTime = value => {
let curChart = activeChart.value
activeChart.value = ''
if (value === '按月度统计') {
setTimeout(() => {
activeChart.value = curChart
curChartData.value = staticsDemensionList.value[0].data
})
} else if (value === '按季度统计') {
setTimeout(() => {
activeChart.value = curChart
curChartData.value = staticsDemensionList.value[0].quatarData
})
} else {
setTimeout(() => {
activeChart.value = curChart
curChartData.value = staticsDemensionList.value[0].yearData
})
}
}
// 激活的标签列表
const activeTagList = computed(() => {
const arr = []
if (selectedArea.value && selectedArea.value !== '全部领域') {
arr.push(
{
tag: '科技领域',
name: selectedArea.value
}
)
arr.push(selectedArea.value)
}
if (selectedDate.value === '自定义') {
arr.push(
{
tag: '提出时间',
name: customTime.value.join('至')
}
)
arr.push(customTime.value.join('至'))
}
if (selectedParty.value && selectedParty.value !== '全部党派') {
arr.push(
{
tag: '所属党派',
name: selectedParty.value
}
)
arr.push(selectedParty.value)
}
if (selectedCongress.value && selectedCongress.value !== '全部议院') {
arr.push(
{
tag: '提出议院',
name: selectedCongress.value
}
)
arr.push(selectedCongress.value)
}
if (selectedOrg.value && selectedOrg.value !== '全部委员会') {
arr.push(
{
tag: '委员会',
name: selectedOrg.value
}
)
arr.push(selectedOrg.value)
}
if (selectedmember.value && selectedmember.value !== '全部议员') {
arr.push(
{
tag: '提出议员',
name: selectedmember.value
}
)
arr.push(selectedmember.value)
}
if (selectedStatus.value && selectedStatus.value !== '全部阶段') {
arr.push(
{
tag: '所处阶段',
name: selectedStatus.value
}
)
arr.push(selectedStatus.value)
}
if (isInvolveCn.value) {
const involveStr = '涉华'
arr.push(
{
tag: '是否涉华',
name: involveStr
}
)
arr.push(involveStr)
}
return arr
})
// 关闭当前标签
const handleCloseCurTag = (tag, index) => {
switch (tag.tag) {
case '科技领域':
selectedArea.value = '全部领域'
break
case '提出时间':
selectedDate.value = ''
break
case '所属党派':
selectedParty.value = '全部党派'
break
case '提出议院':
selectedCongress.value = '全部议院'
break
case '委员会':
selectedOrg.value = '全部委员会'
break
case '提出议员':
selectedmember.value = '全部议员'
break
case '所处阶段':
selectedStatus.value = '全部阶段'
break
case '是否涉华':
isInvolveCn.value = false
break
}
// alert(tag.name)
// activeTagList.value.splice(index, 1)
activeTagList.value.splice(index, 1)
}
const activeChart = ref('') // 当前激活的图表
// 切换当前图表
const handleSwitchActiveChart = val => {
activeChart.value = val.name
}
// 雷达图数据
const radarChartData = ref({
title: [
{
......@@ -494,7 +382,7 @@ const radarChartData = ref({
// 数据- 是否全选
const isSelectedAll = ref(false)
// 批量操作-当前操作
const curOperation = ref('')
const operationList = ref([
{
......@@ -611,8 +499,10 @@ const dateList = ref([
])
const customTime = ref([]) // 自定义时间
const handleCustomDate = value => {
// console.log('value', value);
customTime.value = value
}
const handleSelectDate = (value) => {
selectedDate.value = value
if (selectedDate.value !== '自定义') {
......@@ -641,6 +531,7 @@ const partyList = ref([
])
const selectedParty = ref('全部党派')
const partyPlaceHolder = ref('请选择党派')
const handleSelectParty = value => {
selectedParty.value = value
}
......@@ -670,9 +561,12 @@ const handleSelectCongress = value => {
const orgList = ref([])
const selectedOrg = ref('全部委员会')
const orgPlaceHolder = ref('请选择委员会')
const handleSelectOrg = value => {
selectedOrg.value = value
}
// 获取委员会
const handleGetOrgList = async () => {
try {
const res = await getPostOrgList()
......@@ -700,6 +594,8 @@ const memberPlaceHolder = ref('请选择议员')
const handleSelectMember = value => {
selectedmember.value = value
}
// 获取议员
const handleGetMemberList = async () => {
try {
const res = await getPostMemberList()
......@@ -714,6 +610,7 @@ const handleGetMemberList = async () => {
})
memberList.value = [{ name: '全部议员', id: '全部议员' }, ...memberList.value]
}
} catch (error) {
console.error('获取议员列表报错:', error);
......@@ -735,6 +632,7 @@ const statusList = ref([
id: '1'
}
])
const selectedStatus = ref('全部阶段')
const statusPlaceHolder = ref('请选择立法阶段')
const handleSelectStauts = value => {
......@@ -770,6 +668,8 @@ const handleSwitchFolderAll = () => {
isFolderAll.value = !isFolderAll.value
}
const tableRef = ref(null)
// 表格数据
......@@ -786,7 +686,11 @@ const releaseTimeList = ref([
value: false
}
]);
const isSort = ref(true); // true 倒序 false 升序
// const handleSwithSort = () => {
// isSort.value = !isSort.value;
// };
const handlePxChange = val => {
fetchTableData()
};
......@@ -800,10 +704,10 @@ const selectedMap = ref(new Map()) // 使用 Map 存储,key 为唯一 id
// 计算已选中的条数
const selectedCount = computed(() => selectedMap.value.size)
// 获取当前页表格数据(示例)
// 获取表格数据(示例)
const fetchTableData = async () => {
// isSelectedAll.value = false
// selectedMap.value.clear()
isSelectedAll.value = false
selectedMap.value.clear()
// 调用接口获取数据...
const params = {
page: currentPage.value,
......@@ -831,14 +735,6 @@ const fetchTableData = async () => {
dataX: Object.keys(res.data.aggregationsDate),
dataY: Object.values(res.data.aggregationsDate).map(value => Number(value))
}
staticsDemensionList.value[0].quatarData = {
dataX: Object.keys(res.data.aggregationsQuarter),
dataY: Object.values(res.data.aggregationsQuarter).map(value => Number(value))
}
staticsDemensionList.value[0].yearData = {
dataX: Object.keys(res.data.aggregationsYear),
dataY: Object.values(res.data.aggregationsYear).map(value => Number(value))
}
staticsDemensionList.value[1].data = Object.entries(res.data.aggregationsDomain).map(([key, value]) => ({
name: key,
value: Number(value)
......@@ -861,6 +757,9 @@ const fetchTableData = async () => {
}))
}
const curDemensionItem = staticsDemensionList.value.filter(item => {
return item.name === curDemension.value
})[0]
......@@ -869,6 +768,10 @@ const fetchTableData = async () => {
activeChart.value = curDemensionItem.chartTypeList[0]
curChartData.value = curDemensionItem.data
})
} catch (error) {
}
......@@ -884,37 +787,6 @@ const fetchTableData = async () => {
})
})
}
const allData = ref([])
// 获取筛选条件下全部表格数据
const fetchAllData = async () => {
const params = {
page: 1,
size: 9999,
keyword: '',
type: 1, // type 1= 法案 2= 政令 3 =智库 4=智库报告 5=实体清单【制裁记录】 6= 人物 7= 机构 8=新闻 9= 社媒
domains: selectedArea.value === '全部领域' ? null : [selectedArea.value],
proposedDateStart: customTime.value[0],
proposedDateEnd: customTime.value[1],
affiliation: selectedParty.value === '全部党派' ? null : selectedParty.value,
originChamber: selectedCongress.value === '全部议院' ? null : selectedCongress.value,
originDepart: selectedOrg.value === '全部委员会' ? null : selectedOrg.value,
sponsorPersonName: selectedmember.value === '全部议员' ? null : selectedmember.value,
status: selectedStatus.value === '通过' ? 1 : 0,
sleStatus: isInvolveCn ? 'Y' : 'N',
sort: isSort.value ? 0 : 1 // 0 先按分数降序 后按时间降序 1 先按分数降序,再按时间升序
}
try {
const res = await search(params)
console.log('搜索结果', res);
if (res.code === 200 && res.data) {
allData.value = res.data.records
}
} catch (error) {
ElMessage.error('加载全部数据出错!')
}
}
// 单选事件
const handleSelect = (selection, row) => {
......@@ -927,7 +799,7 @@ const handleSelect = (selection, row) => {
}
}
// 表格自带 当前页 全选/全不选事件
// 全选/全不选事件
const handleSelectAll = (selection) => {
if (selection.length > 0) {
// 全选:将当前页所有数据添加到 Map
......@@ -960,10 +832,10 @@ const handleSelectAllPage = () => {
)
if (currentPageSelected) {
// 已全选,则不动当前页的全选
// 已全选,则取消当前页的全选
tableData.value.forEach(row => {
tableRef.value.toggleRowSelection(row, false)
// selectedMap.value.delete(row.id)
selectedMap.value.delete(row.id)
})
} else {
// 未全选,则全选当前页
......@@ -976,47 +848,39 @@ const handleSelectAllPage = () => {
}
}
// 全选最大1万条提示
const isShowAllDataMaxLengthTip = ref(false)
const loading = ref(false) // 加载数据loading
// 处理 全选(全部数据)
const handleSelectAllChange = async () => {
// 处理全选
const handleSelectAllChange = () => {
if (isSelectedAll.value) {
if (totalNum.value > 10000) {
isShowAllDataMaxLengthTip.value = true
}
loading.value = true
await fetchAllData()
handleSelectAllPage()
allData.value.forEach(row => {
if (!selectedMap.value.has(row.id)) {
selectedMap.value.set(row.id, row)
}
})
loading.value = false
} else {
handleClearAll()
}
// if (isSelectedAll.value) {
// // 全选:将当前页所有数据添加到 Map
// tableData.value.forEach(row => {
// if (!selectedMap.value.has(row.id)) {
// selectedMap.value.set(row.id, row)
// }
// })
// } else {
// // 全不选:从 Map 中移除当前页的所有数据
// tableData.value.forEach(row => {
// selectedMap.value.delete(row.id)
// })
// }
}
// 清空所有选择
const handleClearAll = () => {
isSelectedAll.value = false
selectedMap.value.clear()
tableRef.value?.clearSelection()
}
// 翻页
const handleCurrentChange = async (val) => {
const handleCurrentChange = (val) => {
currentPage.value = val
await fetchTableData()
if (isSelectedAll.value) {
handleSelectAllPage()
}
fetchTableData()
}
......@@ -1034,20 +898,6 @@ watch(tableData, () => {
// 当前图表数据
const curChartData = ref(null)
// 下载当前图表数据
const handleDownloadCurChartData = () => {
const jsonStr = JSON.stringify(curChartData.value, null, 2);
const blob = new Blob([jsonStr], { type: 'application/json' });
const url = URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = 'chartData.json';
link.click();
URL.revokeObjectURL(url);
}
// 跳转到当前页 初始化筛选条件
const initParam = () => {
const hasQuery = Object.keys(route.query).length > 0;
......@@ -1143,6 +993,7 @@ onMounted(async () => {
initParam()
// 初始化
await fetchTableData()
......@@ -1321,10 +1172,6 @@ onMounted(async () => {
}
.header-left-item3 {
color: var(--color-orange-100);
}
.cancel {
cursor: pointer;
}
......@@ -1418,21 +1265,4 @@ onMounted(async () => {
text-decoration: underline;
}
}
:deep(.el-table__header-wrapper) {
// background-color: #f5f7fa;
height: 48px;
}
:deep(.el-table__header th) {
// background-color: #f5f7fa;
color: var(--text-primary-50-color);
font-weight: bold;
}
/* 针对特定列 */
// :deep(.el-table__header th:first-child) {
// background-color: #e6f7ff;
// color: #1890ff;
// }</style>
\ No newline at end of file
</style>
\ No newline at end of file
......@@ -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;
}
......
......@@ -125,23 +125,24 @@
<el-table ref="tableRef" :data="tableData" row-key="id" @selection-change="handleSelectionChange"
@select="handleSelect" @select-all="handleSelectAll" style="width: 100%" :row-style="{ height: '52px' }">
<el-table-column type="selection" width="40" />
<el-table-column label="政令名称" width="455">
<el-table-column label="法案名称" width="455">
<template #default="scope">
<span class="title-item text-compact-bold" @click="handleClickToDetail(scope.row)">{{ scope.row.title
}}</span>
</template>
</el-table-column>
<el-table-column label="发布时间" width="180" class-name="date-column">
<el-table-column label="日期" width="120" class-name="date-column">
<template #default="scope">{{ scope.row.date }}</template>
</el-table-column>
<el-table-column label="发布机构" width="480">
<el-table-column label="提出人" width="480">
<template #default="scope">
<span class="person-item text-compact" @click="handlePerClick(scope.row)">{{ scope.row.sponsorPersonName
}}</span>
</template>
</el-table-column>
<el-table-column property="affiliation" label="涉及领域" width="120" />
<el-table-column property="originDepart" label="政令类型" width="180" />
<el-table-column property="affiliation" label="所属党派" width="120" />
<el-table-column property="originDepart" label="提出委员会" width="180" />
<el-table-column property="status" label="所处阶段" width="120" />
</el-table>
</div>
</div>
......@@ -208,7 +209,7 @@ const staticsDemensionList = ref([
},
yearData: {
}
},
{
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论