提交 2dc2aedd authored 作者: coderBryanFu's avatar coderBryanFu

feat:更新数据资源库

上级 6d19a446
......@@ -31,7 +31,7 @@ const getMultiLineChart = (data) => {
return {
color: series.map(item => item.color),
tooltip: {
trigger: 'axis',
trigger: 'item',
backgroundColor: 'rgba(255, 255, 255, 0.9)',
textStyle: {
color: '#666'
......
......@@ -873,7 +873,7 @@ const handleCooperationToDataLibrary = (item) => {
let param
if (areaList.length > 2) {
if (areaList.length > 1) {
param = {
selectedOrg: postOrgStr,
selectedmember: JSON.stringify(memberList),
......@@ -887,15 +887,11 @@ const handleCooperationToDataLibrary = (item) => {
}
}
const route = router.resolve({
path: "/dataLibrary/countryBill",
query: param
});
window.open(route.href, "_blank");
}
// 委员会跳转至数据资源库
......@@ -910,9 +906,16 @@ const handleToDataLibrary = (item) => {
congressStr = '众议院'
}
}
const param = {
selectedOrg: item.name,
selectedCongress: congressStr
let param
if (congressStr === '全部议院') {
param = {
selectedOrg: item.name,
}
} else {
param = {
selectedOrg: item.name,
selectedCongress: congressStr
}
}
const route = router.resolve({
......
......@@ -9,22 +9,11 @@
:containerRef="containerRef" areaName="法案" :enableBillTypeSwitch="true" defaultBillSearchType="federal" />
</div>
<SummaryCardsPanel
descriptionText="近期美国国会各委员会涉华提案数量汇总"
:cards="committeeCards"
:totalCount="committeeTotalCount"
:tipIcon="box7HeaderIcon"
:defaultAvatar="iconCommit"
:loading="committeeLoading"
activeTime="近一年"
emptyText="暂无数据"
moreText="查看全部委员会"
:moreCardMinCount="7"
@time-click="handleCommitteeTimeClick"
@name-click="handleToInstitution"
@count-click="handleToDataLibrary"
@more-click="handleToCommitteeMore"
/>
<SummaryCardsPanel descriptionText="近期美国国会各委员会涉华提案数量汇总" :cards="committeeCards"
:totalCount="committeeTotalCount" :tipIcon="box7HeaderIcon" :defaultAvatar="iconCommit"
:loading="committeeLoading" activeTime="近一年" emptyText="暂无数据" moreText="查看全部委员会" :moreCardMinCount="7"
@time-click="handleCommitteeTimeClick" @name-click="handleToInstitution" @count-click="handleToDataLibrary"
@more-click="handleToCommitteeMore" />
<DivideHeader id="position1" class="divide1" :titleText="'最新动态'"></DivideHeader>
<div class="home-content-center">
......@@ -106,8 +95,9 @@
</el-carousel>
</div>
</OverviewMainBox>
<RiskSignal :list="warningList" @more-click="handleToMoreRiskSignal" @item-click="handleRiskSignalItemToManage"
riskLevel="signalLevel" postDate="signalTime" name="signalTitle" />
<RiskSignal :list="warningList" @more-click="handleToMoreRiskSignal"
@item-click="handleRiskSignalItemToManage" riskLevel="signalLevel" postDate="signalTime"
name="signalTitle" />
</div>
<DivideHeader id="position2" class="divide2" :titleText="'资讯要闻'"></DivideHeader>
......@@ -1435,19 +1425,17 @@ const handleToInstitution = item => {
// 下钻至资源库
const handleToDataLibrary = (item) => {
// window.sessionStorage.setItem("curTabName", item.id);
// const curRoute = router.resolve({
// path: "/institution",
// query: {
// id: item.id
// }
// });
// window.open(curRoute.href, "_blank");
// console.log('item', item);
const selectParam = {
selectedOrg: item.name,
selectedCongress: item.chamber
let selectParam
if (item.subText === '众议院' || item.subText === '参议院') {
selectParam = {
selectedOrg: item.name,
selectedCongress: item.subText
}
} else {
selectParam = {
selectedOrg: item.name
}
}
const route = router.resolve({
path: "/dataLibrary/countryBill",
......@@ -1870,7 +1858,8 @@ onUnmounted(() => {
background: var(--bg-white-100);
box-sizing: border-box;
cursor: pointer;
&:hover{
&:hover {
background: var(--color-primary-2);
}
......
......@@ -12,7 +12,7 @@
<SelectBox v-if="isFolderAll" :placeholder-name="congressPlaceHolder" select-title="提出议院"
:select-list="congressList" :select-name="selectedCongress" @update:select-text="handleSelectCongress" />
<SelectBox v-if="isFolderAll" :placeholder-name="orgPlaceHolder" select-title="委员会" :select-list="orgList"
:select-name="selectedOrg" @update:select-text="handleSelectOrg" />
:select-name="selectedOrg" @update:select-text="handleSelectOrg" :is-multiple="true" />
<SelectBox v-if="isFolderAll" :placeholder-name="memberPlaceHolder" select-title="提案议员"
:select-list="memberList" :select-name="selectedPostMan" @update:select-text="handleSelectPostMan" />
<SelectBox v-if="isFolderAll" :placeholder-name="memberPlaceHolder" select-title="提出议员"
......@@ -372,11 +372,11 @@ const activeTagList = computed(() => {
}
)
}
if (selectedOrg.value && selectedOrg.value !== '全部委员会') {
if (selectedOrg.value && selectedOrg.value[0] !== '全部委员会') {
arr.push(
{
tag: '委员会',
name: selectedOrg.value
name: selectedOrg.value.join('、')
}
)
}
......@@ -426,7 +426,7 @@ const handleCloseCurTag = (tag, index) => {
selectedCongress.value = '全部议院'
break
case '委员会':
selectedOrg.value = '全部委员会'
selectedOrg.value = ['全部委员会']
break
case '提出议员':
selectedmember.value = ['全部议员']
......@@ -582,8 +582,11 @@ const areaList = ref([
},
])
const handleSelectArea = (value) => {
// selectedArea.value = value
selectedArea.value = value.length > 1 && value.includes('全部领域') ? value.filter(item => item !== '全部议员') : value;
if (value[value.length - 1] === '全部领域') {
selectedArea.value = ['全部领域']
return
}
selectedArea.value = value.length > 1 && value.includes('全部领域') ? value.filter(item => item !== '全部领域') : value;
}
// 提案时间
......@@ -673,15 +676,21 @@ const handleSelectCongress = value => {
// 委员会
const orgList = ref([])
const selectedOrg = ref('全部委员会')
const selectedOrg = ref(['全部委员会'])
const orgPlaceHolder = ref('请选择委员会')
const handleSelectOrg = value => {
selectedOrg.value = value
// selectedOrg.value = value
if (value[value.length - 1] === '全部委员会') {
selectedOrg.value = ['全部委员会']
return
}
selectedOrg.value = value.length > 1 && value.includes('全部委员会') ? value.filter(item => item !== '全部委员会') : value;
}
// 获取委员会
const handleGetOrgList = async () => {
loading.value = true
try {
const res = await getPostOrgList()
console.log('委员会列表', res);
......@@ -698,6 +707,8 @@ const handleGetOrgList = async () => {
} catch (error) {
console.error('获取委员会列表报错:', error);
} finally {
loading.value = false
}
}
......@@ -712,11 +723,16 @@ const memberList = ref([])
const selectedmember = ref(['全部议员'])
const memberPlaceHolder = ref('请选择议员')
const handleSelectMember = value => {
if (value[value.length - 1] === '全部议员') {
selectedmember.value = ['全部议员']
return
}
selectedmember.value = value.length > 1 && value.includes('全部议员') ? value.filter(item => item !== '全部议员') : value;
}
// 获取议员
const handleGetMemberList = async () => {
loading.value = true
try {
const res = await getPostMemberList()
console.log('议员列表', res);
......@@ -734,6 +750,8 @@ const handleGetMemberList = async () => {
} catch (error) {
console.error('获取议员列表报错:', error);
} finally {
loading.value = false
}
}
......@@ -766,6 +784,7 @@ const statusList = ref([
])
const handleGetStatusList = async () => {
loading.value = true
try {
const res = await getStatusList()
console.log('获取立法阶段列表', res);
......@@ -786,7 +805,9 @@ const handleGetStatusList = async () => {
}
} catch (error) {
} finally {
loading.value = false
}
}
......@@ -807,7 +828,7 @@ const handleClear = () => {
selectedDate.value = ''
selectedParty.value = '全部党派'
selectedCongress.value = '全部议院'
selectedOrg.value = '全部委员会'
selectedOrg.value = ['全部委员会']
selectedmember.value = ['全部议员']
selectedStatus.value = '全部阶段'
isInvolveCn.value = false
......@@ -877,11 +898,11 @@ const fetchTableData = async () => {
proposedDateEnd: customTime.value[1],
affiliation: selectedParty.value === '全部党派' ? null : selectedParty.value,
originChamber: selectedCongress.value === '全部议院' ? null : selectedCongress.value,
originDepart: selectedOrg.value === '全部委员会' ? null : selectedOrg.value,
proposer: handleSelectPostMan.value === '全部议员' ? null :selectedPostMan.value,
originDepart: selectedOrg.value[0] === '全部委员会' ? null : selectedOrg.value,
proposer: selectedPostMan.value === '全部议员' ? null : selectedPostMan.value,
sponsorPersonName: selectedmember.value[0] === '全部议员' ? null : selectedmember.value,
status: selectedStatus.value === '全部阶段' ? null : selectedStatus.value,
isInvolveCn: isInvolveCn.value ? 'Y' : 'N',
isInvolveCn: isInvolveCn.value ? 'Y' : null,
sort: isSort.value ? 0 : 1 // 0 先按分数降序 后按时间降序 1 先按分数降序,再按时间升序
}
try {
......@@ -977,11 +998,11 @@ const fetchAllData = async () => {
proposedDateEnd: customTime.value[1],
affiliation: selectedParty.value === '全部党派' ? null : selectedParty.value,
originChamber: selectedCongress.value === '全部议院' ? null : selectedCongress.value,
originDepart: selectedOrg.value === '全部委员会' ? null : selectedOrg.value,
proposer: handleSelectPostMan.value === '全部议员' ? null :selectedPostMan.value,
originDepart: selectedOrg.value[0] === '全部委员会' ? null : selectedOrg.value,
proposer: selectedPostMan.value === '全部议员' ? null : selectedPostMan.value,
sponsorPersonName: selectedmember.value[0] === '全部议员' ? null : selectedmember.value,
status: selectedStatus.value === '全部阶段' ? null : selectedStatus.value,
isInvolveCn: isInvolveCn.value ? 'Y' : 'N',
isInvolveCn: isInvolveCn.value ? 'Y' : null,
sort: isSort.value ? 0 : 1 // 0 先按分数降序 后按时间降序 1 先按分数降序,再按时间升序
}
try {
......@@ -1153,15 +1174,15 @@ const initParam = () => {
}
selectedCongress.value = route.query.selectedCongress ? route.query.selectedCongress : '全部议院'
selectedOrg.value = route.query.selectedOrg ? route.query.selectedOrg : '全部委员会'
selectedOrg.value = route.query.selectedOrg ? [route.query.selectedOrg] : ['全部委员会']
selectedmember.value = route.query.selectedmember ? JSON.parse(route.query.selectedmember) : ['全部议员']
const query = route.query;
if (Object.keys(query).length > 0) {
sessionStorage.setItem('countryRouteQuery', JSON.stringify(query));
sessionStorage.setItem('countryBillRouteQuery', JSON.stringify(query));
}
} else {
const savedQuery = JSON.parse(sessionStorage.getItem('countryRouteQuery') || '{}');
const savedQuery = JSON.parse(sessionStorage.getItem('countryBillRouteQuery') || '{}');
if (savedQuery.selectedAreaList) {
selectedArea.value = JSON.parse(savedQuery.selectedAreaList)
......@@ -1180,7 +1201,7 @@ const initParam = () => {
}
selectedCongress.value = savedQuery.selectedCongress ? savedQuery.selectedCongress : '全部议院'
selectedOrg.value = savedQuery.selectedOrg ? savedQuery.selectedOrg : '全部委员会'
selectedOrg.value = savedQuery.selectedOrg ? [savedQuery.selectedOrg] : ['全部委员会']
selectedmember.value = savedQuery.selectedmember ? savedQuery.selectedmember : ['全部议员']
}
......@@ -1236,10 +1257,9 @@ const handleExport = () => {
};
onMounted(async () => {
handleGetOrgList()
handleGetMemberList()
await handleGetOrgList()
await handleGetMemberList()
await handleGetStatusList()
// 初始化
initParam()
fetchTableData()
......
......@@ -614,6 +614,7 @@ const handleSelectCountry = value => {
}
const handleGetCountryList = async () => {
loading.value = true
try {
const res = await getCountryList();
......@@ -629,6 +630,8 @@ const handleGetCountryList = async () => {
}
} catch (error) {
} finally {
loading.value = false
}
}
......@@ -648,6 +651,7 @@ const handleSelectCompanyType = value => {
}
// 获取企业类型
const handleGetCompanyType = async () => {
loading.value = true
try {
const res = await getBusinessType()
console.log('企业类型', res);
......@@ -664,6 +668,8 @@ const handleGetCompanyType = async () => {
} catch (error) {
console.error('获取企业类型error', error);
} finally {
loading.value = false
}
}
......@@ -1017,10 +1023,10 @@ const initParam = () => {
const query = route.query;
if (Object.keys(query).length > 0) {
sessionStorage.setItem('decreeRouteQuery', JSON.stringify(query));
sessionStorage.setItem('dataCompanyRouteQuery', JSON.stringify(query));
}
} else {
const savedQuery = JSON.parse(sessionStorage.getItem('decreeRouteQuery') || '{}');
const savedQuery = JSON.parse(sessionStorage.getItem('dataCompanyRouteQuery') || '{}');
selectedArea.value = savedQuery.domains ? savedQuery.domains : '全部领域'
if (savedQuery.selectedDate && Array.isArray(JSON.parse(savedQuery.selectedDate)) && JSON.parse(savedQuery.selectedDate).length) {
selectedDate.value = '自定义'
......
......@@ -614,6 +614,7 @@ const handleSelectIns = value => {
}
const handleGetDeparmentList = async () => {
loading.value = true
try {
// let { keyWord, pageNum, pageSize, day } = organizationInfo
const params = {
......@@ -633,6 +634,8 @@ const handleGetDeparmentList = async () => {
}
} catch (error) {
} finally {
loading.value = false
}
}
......@@ -1055,7 +1058,7 @@ const handleExport = () => {
};
onMounted(async () => {
handleGetDeparmentList()
await handleGetDeparmentList()
initParam()
// 初始化
......
......@@ -521,6 +521,7 @@ const handleSelectType = value => {
}
// 获取国家地区列表
const handleGetMaterialCategory = async () => {
loading.value = true
try {
const res = await getMaterialCategory()
console.log('获取物项类别', res);
......@@ -534,6 +535,8 @@ const handleGetMaterialCategory = async () => {
}
} catch (error) {
} finally {
loading.value = false
}
}
......@@ -552,6 +555,7 @@ const handleSelectControlReason = value => {
}
// 获取管控原因列表
const handleGetControlReason = async () => {
loading.value = true
try {
const res = await getControlReason()
console.log('获取管控原因', res);
......@@ -565,6 +569,8 @@ const handleGetControlReason = async () => {
}
} catch (error) {
} finally {
loading.value = false
}
}
......@@ -636,7 +642,7 @@ const fetchTableData = async () => {
const params = {
page: currentPage.value,
size: pageSize.value,
type: 13, // 商业管制清单
type: 11, // 商业管制清单
domains: selectedArea.value === '全部领域' ? null : [selectedArea.value], // 科技领域
proposedDateStart: customTime.value[0] ? customTime.value[0] : null,
proposedDateEnd: customTime.value[1] ? customTime.value[1] : null,
......@@ -718,7 +724,7 @@ const fetchAllData = async () => {
const params = {
page: 1,
size: 9999,
type: 13, // 商业管制清单
type: 11, // 商业管制清单
domains: selectedArea.value === '全部领域' ? null : [selectedArea.value], // 科技领域
proposedDateStart: customTime.value[0] ? customTime.value[0] : null,
proposedDateEnd: customTime.value[1] ? customTime.value[1] : null,
......@@ -904,17 +910,7 @@ const initParam = () => {
// 跳转政令详情
const handleClickToDetail = (curDecree) => {
console.log('curDecree', curDecree);
window.sessionStorage.setItem("decreeId", curDecree.id);
window.sessionStorage.setItem("curTabName", curDecree.title);
const route = router.resolve({
path: "/decreeLayout",
query: {
id: curDecree.id
}
});
window.open(route.href, "_blank");
};
// 跳转机构详情
......@@ -953,8 +949,8 @@ const handleExport = () => {
onMounted(async () => {
handleGetMaterialCategory() // 获取物项类别列表
handleGetControlReason() // 获取管控原因
await handleGetMaterialCategory() // 获取物项类别列表
await handleGetControlReason() // 获取管控原因
initParam()
// 初始化
await fetchTableData()
......
......@@ -832,17 +832,7 @@ const initParam = () => {
// 跳转政令详情
const handleClickToDetail = (curDecree) => {
console.log('curDecree', curDecree);
window.sessionStorage.setItem("decreeId", curDecree.id);
window.sessionStorage.setItem("curTabName", curDecree.title);
const route = router.resolve({
path: "/decreeLayout",
query: {
id: curDecree.id
}
});
window.open(route.href, "_blank");
};
// 跳转机构详情
......
......@@ -654,6 +654,7 @@ const handleSelectCountry = value => {
}
// 获取国家地区列表
const handleGetCountryList = async () => {
loading.value = true
try {
const res = await getCountryList()
console.log('获取国家列表', res);
......@@ -667,6 +668,8 @@ const handleGetCountryList = async () => {
}
} catch (error) {
} finally {
loading.value = false
}
}
......@@ -685,6 +688,7 @@ const handleSelectProvince = value => {
}
// 获取全部省份列表
const handleGetProvinceList = async () => {
loading.value = true
try {
const res = await getProvinceList()
console.log('获取省份列表', res);
......@@ -701,7 +705,7 @@ const handleGetProvinceList = async () => {
console.error(error);
} finally {
loading.value = false
}
}
......@@ -719,6 +723,7 @@ const handleSelectEntityType = value => {
}
// 获取实体类型列表
const handleGetEntityTypes = async () => {
loading.value = true
try {
const res = await getEntityTypes()
console.log('获取实体类型列表', res);
......@@ -733,6 +738,8 @@ const handleGetEntityTypes = async () => {
} catch (error) {
} finally {
loading.value = false
}
}
......@@ -1086,7 +1093,7 @@ const initParam = () => {
selectedDate.value = '自定义'
customTime.value = JSON.parse(savedQuery.selectedDate)
}
isHalfRule.value = savedQuery.isHalfRule === 'true' ? true : false
isHalfRule.value = savedQuery.isHalfRule === 'true' ? true : false
selectedProvince.value = savedQuery.selectedProvince ? provinceList.value.filter(item => item.name.indexOf(savedQuery.selectedProvince) > -1)[0].name : '全部省份'
isCnEntityOnly.value = savedQuery.isCnEntityOnly ? true : false
......@@ -1121,7 +1128,7 @@ const handleClickToDetail = (curEntity) => {
const route = router.resolve({
name: "companyPages",
params: {
id: curEntity.id
id: curEntity.organizationId
}
});
window.open(route.href, "_blank");
......@@ -1162,8 +1169,9 @@ const handleExport = () => {
};
onMounted(async () => {
await handleGetProvinceList() // 获取省份列表
await handleGetCountryList() // 获取国家列表
await handleGetProvinceList() // 获取省份列表
await handleGetEntityTypes() // 获取实体类型列表
initParam()
// 初始化
......
......@@ -832,34 +832,19 @@ const initParam = () => {
}
// 跳转单次清单事件详情
const handleClickToDetail = (curEntityEvent) => {
console.log('curEntityEvent', curEntityEvent);
// window.sessionStorage.setItem("decreeId", curEntityEvent.id);
// window.sessionStorage.setItem("curTabName", curEntityEvent.title);
// let id = item?.id;
// let sanTypeId = item?.sanTypeId || 1;
// if (!id) {
// const currentItem = entitiesDataInfoList.value[currentCarouselIndex.value];
// id = currentItem?.id;
// sanTypeId = currentItem?.sanTypeId || 1;
// }
// window.sessionStorage.setItem(
// "curTabName",
// entitiesDataInfoList.value[currentCarouselIndex.value].postDate + " 《实体清单新增条目》"
// );
// let date = entitiesDataInfoList.value[currentCarouselIndex.value].postDate
// const routeData = router.resolve({
// path: "/exportControl/singleSanction",
// query: {
// id,
// sanTypeId,
// date
// }
// });
// // 打开一个新页面
// window.open(routeData.href, "_blank");
const handleClickToDetail = (item) => {
console.log('curEntityEvent', item);
window.sessionStorage.setItem("curTabName", `${item.date}《${item.originalTitle}》`);
const route = router.resolve({
path: "/exportControl/singleSanction",
query: {
id: item.id,
sanTypeId: 1,
date: item.date
}
});
window.open(route.href, "_blank");
};
// 跳转机构详情
......
......@@ -521,6 +521,7 @@ const handleSelectType = value => {
}
// 获取国家地区列表
const handleGetMaterialCategory = async () => {
loading.value = true
try {
const res = await getMaterialCategory()
console.log('获取物项类别', res);
......@@ -534,6 +535,8 @@ const handleGetMaterialCategory = async () => {
}
} catch (error) {
} finally {
loading.value = false
}
}
......@@ -552,6 +555,7 @@ const handleSelectControlReason = value => {
}
// 获取管控原因列表
const handleGetControlReason = async () => {
loading.value = true
try {
const res = await getControlReason()
console.log('获取管控原因', res);
......@@ -565,6 +569,8 @@ const handleGetControlReason = async () => {
}
} catch (error) {
} finally {
loading.value = false
}
}
......@@ -636,7 +642,7 @@ const fetchTableData = async () => {
const params = {
page: currentPage.value,
size: pageSize.value,
type: 13, // 商业管制清单
type: 15, // 涉军企业清单
domains: selectedArea.value === '全部领域' ? null : [selectedArea.value], // 科技领域
proposedDateStart: customTime.value[0] ? customTime.value[0] : null,
proposedDateEnd: customTime.value[1] ? customTime.value[1] : null,
......@@ -718,7 +724,7 @@ const fetchAllData = async () => {
const params = {
page: 1,
size: 9999,
type: 13, // 商业管制清单
type: 15, // 涉军企业清单
domains: selectedArea.value === '全部领域' ? null : [selectedArea.value], // 科技领域
proposedDateStart: customTime.value[0] ? customTime.value[0] : null,
proposedDateEnd: customTime.value[1] ? customTime.value[1] : null,
......@@ -887,10 +893,10 @@ const initParam = () => {
const query = route.query;
if (Object.keys(query).length > 0) {
sessionStorage.setItem('commerceRouteQuery', JSON.stringify(query));
sessionStorage.setItem('mRListRouteQuery', JSON.stringify(query));
}
} else {
const savedQuery = JSON.parse(sessionStorage.getItem('commerceRouteQuery') || '{}');
const savedQuery = JSON.parse(sessionStorage.getItem('mRListRouteQuery') || '{}');
selectedArea.value = savedQuery.domains ? savedQuery.domains : '全部领域'
if (savedQuery.selectedDate && Array.isArray(JSON.parse(savedQuery.selectedDate)) && JSON.parse(savedQuery.selectedDate).length) {
selectedDate.value = '自定义'
......@@ -903,15 +909,12 @@ const initParam = () => {
}
// 跳转政令详情
const handleClickToDetail = (curDecree) => {
console.log('curDecree', curDecree);
window.sessionStorage.setItem("decreeId", curDecree.id);
window.sessionStorage.setItem("curTabName", curDecree.title);
const handleClickToDetail = (curEntity) => {
window.sessionStorage.setItem("curTabName", curEntity.title);
const route = router.resolve({
path: "/decreeLayout",
query: {
id: curDecree.id
name: "companyPages",
params: {
id: curEntity.id
}
});
window.open(route.href, "_blank");
......@@ -953,8 +956,8 @@ const handleExport = () => {
onMounted(async () => {
handleGetMaterialCategory() // 获取物项类别列表
handleGetControlReason() // 获取管控原因
await handleGetMaterialCategory() // 获取物项类别列表
await handleGetControlReason() // 获取管控原因
initParam()
// 初始化
await fetchTableData()
......
......@@ -142,7 +142,7 @@
</el-table-column>
<el-table-column label="上市地点">
<template #default="scope">
<span class="person-item text-compact" @click="handleOrgClick(scope.row)">{{ scope.row.organizationName
<span class="person-item text-compact" >{{ scope.row.organizationName
}}</span>
</template>
</el-table-column>
......@@ -654,6 +654,7 @@ const handleSelectCountry = value => {
}
// 获取国家地区列表
const handleGetCountryList = async () => {
loading.value = true
try {
const res = await getCountryList()
console.log('获取国家列表', res);
......@@ -667,6 +668,8 @@ const handleGetCountryList = async () => {
}
} catch (error) {
} finally {
loading.value = false
}
}
......@@ -685,6 +688,7 @@ const handleSelectProvince = value => {
}
// 获取全部省份列表
const handleGetProvinceList = async () => {
loading.value = true
try {
const res = await getProvinceList()
console.log('获取省份列表', res);
......@@ -701,7 +705,7 @@ const handleGetProvinceList = async () => {
console.error(error);
} finally {
loading.value = false
}
}
......@@ -719,20 +723,23 @@ const handleSelectEntityType = value => {
}
// 获取实体类型列表
const handleGetEntityTypes = async () => {
loading.value = true
try {
const res = await getEntityTypes()
console.log('获取实体类型列表');
console.log('获取实体类型列表', res);
if (res.code === 200 && res.data) {
entityTypeList.value = res.data.map(item => {
return {
name: item.name,
id: item.code
id: item.id
}
})
}
} catch (error) {
} finally {
loading.value = false
}
}
......@@ -806,7 +813,7 @@ const fetchTableData = async () => {
page: currentPage.value,
size: pageSize.value,
// keyword: '',
type: 10, // 实体清单
type: 14, // SDN清单
domains: selectedArea.value === '全部领域' ? null : [selectedArea.value], // 科技领域
proposedDateStart: customTime.value[0] ? customTime.value[0] : null,
proposedDateEnd: customTime.value[1] ? customTime.value[1] : null,
......@@ -814,7 +821,6 @@ const fetchTableData = async () => {
provinceName: selectedProvince.value === '全部省份' ? null : selectedProvince.value, // 实体省份
entityTypeCode: selectedEntityType.value === '全部实体类型' ? null : selectedEntityType.value, // 实体类别
ratio: isHalfRule.value ? 'Y' : null, // 50%规则
// isInvolveCn: isCnEntityOnly.value ? 'Y' : null, // 是否只看中国实体
sort: isSort.value ? 0 : 1 // 0 先按分数降序 后按时间降序 1 先按分数降序,再按时间升序
}
try {
......@@ -897,7 +903,7 @@ const fetchAllData = async () => {
const params = {
page: 1,
size: 9999,
type: 10, // 实体清单
type: 14, // SDN清单
domains: selectedArea.value === '全部领域' ? null : [selectedArea.value], // 科技领域
proposedDateStart: customTime.value[0] ? customTime.value[0] : null,
proposedDateEnd: customTime.value[1] ? customTime.value[1] : null,
......@@ -905,7 +911,6 @@ const fetchAllData = async () => {
provinceName: selectedProvince.value === '全部省份' ? null : selectedProvince.value, // 实体省份
entityTypeCode: selectedEntityType.value === '全部实体类型' ? null : selectedEntityType.value, // 实体类别
ratio: isHalfRule.value ? 'Y' : null, // 50%规则
// isInvolveCn: isCnEntityOnly.value ? 'Y' : null, // 是否只看中国实体
sort: isSort.value ? 0 : 1 // 0 先按分数降序 后按时间降序 1 先按分数降序,再按时间升序
}
try {
......@@ -1079,10 +1084,10 @@ const initParam = () => {
const query = route.query;
if (Object.keys(query).length > 0) {
sessionStorage.setItem('entityRouteQuery', JSON.stringify(query));
sessionStorage.setItem('sDNListRouteQuery', JSON.stringify(query));
}
} else {
const savedQuery = JSON.parse(sessionStorage.getItem('entityRouteQuery') || '{}');
const savedQuery = JSON.parse(sessionStorage.getItem('sDNListRouteQuery') || '{}');
selectedArea.value = savedQuery.domains ? savedQuery.domains : '全部领域'
if (savedQuery.selectedDate && Array.isArray(JSON.parse(savedQuery.selectedDate)) && JSON.parse(savedQuery.selectedDate).length) {
selectedDate.value = '自定义'
......@@ -1116,32 +1121,30 @@ watch(
// 跳转机构详情
const handleClickToDetail = (curEntity) => {
console.log('curEntity', curEntity);
window.sessionStorage.setItem("decreeId", curEntity.id);
// console.log('curEntity', curEntity);
window.sessionStorage.setItem("curTabName", curEntity.title);
const route = router.resolve({
name: "companyPages",
params: {
id: curEntity.id
id: curEntity.organizationId
}
});
window.open(route.href, "_blank");
};
// 跳转机构详情
const handleOrgClick = item => {
console.log('item', item);
window.sessionStorage.setItem("curTabName", item.organizationName);
const route = router.resolve({
path: "/institution",
query: {
id: item.organizationId
}
});
window.open(route.href, "_blank");
};
// // 跳转机构详情
// const handleOrgClick = item => {
// console.log('item', item);
// window.sessionStorage.setItem("curTabName", item.organizationName);
// const route = router.resolve({
// path: "/institution",
// query: {
// id: item.organizationId
// }
// });
// window.open(route.href, "_blank");
// };
// 导出
const handleExport = () => {
......
......@@ -111,13 +111,13 @@
</template>
</el-table-column>
<el-table-column label="所属国家地区" width="240">
<template #default="scope">{{ scope.row.date }}</template>
<template #default="scope">{{ scope.row.countryName }}</template>
</el-table-column>
<el-table-column label="主官名称" width="180">
<template #default="scope">{{ scope.row.date }}</template>
<template #default="scope">{{ scope.row.sponsorPersonName }}</template>
</el-table-column>
<el-table-column label="最新动态">
<template #default="scope">{{ scope.row.typeStr }}</template>
<template #default="scope">{{ scope.row.dynamics }}</template>
</el-table-column>
</el-table>
</div>
......@@ -441,6 +441,7 @@ const handleSelectCountry = value => {
}
// 获取国家地区列表
const handleGetCountryList = async () => {
loading.value = true
try {
const res = await getCountryList()
console.log('获取国家列表', res);
......@@ -454,6 +455,8 @@ const handleGetCountryList = async () => {
}
} catch (error) {
} finally {
loading.value = false
}
}
......@@ -772,10 +775,10 @@ const initParam = () => {
const query = route.query;
if (Object.keys(query).length > 0) {
sessionStorage.setItem('entityRouteQuery', JSON.stringify(query));
sessionStorage.setItem('dataInstitutionRouteQuery', JSON.stringify(query));
}
} else {
const savedQuery = JSON.parse(sessionStorage.getItem('entityRouteQuery') || '{}');
const savedQuery = JSON.parse(sessionStorage.getItem('dataInstitutionRouteQuery') || '{}');
if (savedQuery.selectedDate && Array.isArray(JSON.parse(savedQuery.selectedDate)) && JSON.parse(savedQuery.selectedDate).length) {
selectedDate.value = '自定义'
customTime.value = JSON.parse(savedQuery.selectedDate)
......
......@@ -115,7 +115,7 @@
<el-table-column label="发布时间" width="100" class-name="date-column">
<template #default="scope">{{ scope.row.date }}</template>
</el-table-column>
<el-table-column label="发布时间" class-name="date-column">
<el-table-column label="简介" class-name="date-column">
<template #default="scope">{{ scope.row.originalDescription }}</template>
</el-table-column>
<el-table-column label="来源媒体" width="90">
......@@ -789,10 +789,10 @@ const initParam = () => {
const query = route.query;
if (Object.keys(query).length > 0) {
sessionStorage.setItem('decreeRouteQuery', JSON.stringify(query));
sessionStorage.setItem('dataNewsRouteQuery', JSON.stringify(query));
}
} else {
const savedQuery = JSON.parse(sessionStorage.getItem('decreeRouteQuery') || '{}');
const savedQuery = JSON.parse(sessionStorage.getItem('dataNewsRouteQuery') || '{}');
selectedArea.value = savedQuery.domains ? savedQuery.domains : '全部领域'
if (savedQuery.selectedDate && Array.isArray(JSON.parse(savedQuery.selectedDate)) && JSON.parse(savedQuery.selectedDate).length) {
selectedDate.value = '自定义'
......
......@@ -410,6 +410,7 @@ const handlePersonType = (value) => {
}
// 获取人物类别
const handleGetPersonType = async () => {
loading.value = true
try {
const res = await getPersonType()
console.log('人物类别', res);
......@@ -432,6 +433,8 @@ const handleGetPersonType = async () => {
} catch (error) {
console.error(error);
} finally {
loading.value = false
}
}
......@@ -451,6 +454,7 @@ const handleSelectNationality = (value) => {
}
// 获取国籍列表
const handleGetCountryList = async () => {
loading.value = true
try {
const res = await getCountryList()
console.log('国籍列表', res);
......@@ -474,6 +478,8 @@ const handleGetCountryList = async () => {
} catch (error) {
console.error(error);
} finally {
loading.value = false
}
}
......@@ -492,6 +498,7 @@ const handleSelectIns = value => {
}
// 获取所属机构列表
const handleGetInsList = async () => {
loading.value = true
const params = {
type: 6
}
......@@ -518,6 +525,8 @@ const handleGetInsList = async () => {
} catch (error) {
console.error(error);
} finally {
loading.value = false
}
}
......@@ -849,10 +858,10 @@ const initParam = () => {
const query = route.query;
if (Object.keys(query).length > 0) {
sessionStorage.setItem('decreeRouteQuery', JSON.stringify(query));
sessionStorage.setItem('technologyFiguresRouteQuery', JSON.stringify(query));
}
} else {
const savedQuery = JSON.parse(sessionStorage.getItem('decreeRouteQuery') || '{}');
const savedQuery = JSON.parse(sessionStorage.getItem('technologyFiguresRouteQuery') || '{}');
selectedPersonType.value = savedQuery.domains ? savedQuery.domains : '全部人物类别'
......
......@@ -571,6 +571,7 @@ const handleSelectThinkTank = value => {
};
const handleGetThinkTankList = async () => {
loading.value = true
const params = {
type: 4
}
......@@ -584,7 +585,11 @@ const handleGetThinkTankList = async () => {
};
});
thinkTankList.value = [...thinkTankList.value, ...arr];
} catch (error) { }
} catch (error) {
} finally {
loading.value = false
}
};
// 作者
......
......@@ -1137,7 +1137,6 @@ const keyOrganizationCards = computed(() => {
const handleToDataLibrary = (item) => {
const selectParam = {
orgnizationName: item.orgName,
isInvolveCn: true
}
const route = router.resolve({
path: "/dataLibrary/dataDecree",
......
......@@ -547,7 +547,7 @@ export const getLineChart = (object, isPercent) => {
text: ""
},
tooltip: {
trigger: "axis",
trigger: "item",
formatter: function (params) {
let result = params[0].name + "<br/>";
params.forEach(function (item, index) {
......@@ -827,7 +827,7 @@ export const getMultipleLineChart = obj => {
text: ""
},
tooltip: {
trigger: "axis",
trigger: "item",
formatter: function (params) {
let result = params[0].name + "<br/>";
params.forEach(function (item, index) {
......
......@@ -109,7 +109,7 @@
:option="sanctionCountChartOption"
autoresize
:style="{ height: '300px', padding: '0 20px' }"
@chart-click="handleBarChartClick"
@chart-click="handleToDataLibrary4"
/>
<!-- <div class="bottom">
<div class="ai">
......@@ -148,7 +148,7 @@
class="rank-item"
v-for="(item, index) in rankData"
:key="index"
@click="handleClickRankChart(item)"
@click="handleToDataLibrary5(item)"
>
<div class="rank-index" :class="'rank-' + (index + 1)">{{ index + 1 }}</div>
<div class="rank-name">{{ item.name }}</div>
......@@ -200,7 +200,7 @@
:option="domainChartOption"
autoresize
:style="{ height: '300px', padding: '0 20px' }"
@chart-click="handlePieChartClick"
@chart-click="handleToDataLibrary6"
/>
<!-- <div class="bottom">
<div class="ai">
......@@ -237,7 +237,7 @@
:option="typeChartOption"
autoresize
:style="{ height: '300px', padding: '0 20px' }"
@chart-click="handlePieChartClick1"
@chart-click="handleToDataLibrary7"
/>
<!-- <div class="bottom">
<div class="ai">
......@@ -1138,7 +1138,7 @@ const initTypeChart = () => {
const sanTypeId = ref("");
// 点击制裁实体数量变化情况
const handleBarChartClick = val => {
const handleToDataLibrary4 = val => {
console.log("value", val);
const params = {
selectedDate:
......@@ -1154,7 +1154,7 @@ const handleBarChartClick = val => {
};
// 制裁实体各省分布情况
const handleClickRankChart = item => {
const handleToDataLibrary5 = item => {
// console.log('item', item);
const params = {
selectedProvince: item.name,
......@@ -1169,7 +1169,7 @@ const handleClickRankChart = item => {
};
// 制裁实体领域分布情况
const handlePieChartClick = val => {
const handleToDataLibrary6 = val => {
console.log("val", val);
const params = {
domains: val.name,
......@@ -1184,7 +1184,7 @@ const handlePieChartClick = val => {
};
// 制裁实体类型分布情况
const handlePieChartClick1 = val => {
const handleToDataLibrary7 = val => {
console.log("val", val);
const params = {
selectedEntityType: val.name,
......
......@@ -99,7 +99,7 @@
<div v-for="tag in item.techDomainList" :key="tag" class="tag-item">{{ tag }}</div>
</div>
<div :class="{ 'count-tag': item.cnEntityCount }" @click="handleToDataLibrary">
<div :class="{ 'count-tag': item.cnEntityCount }" @click="handleToDataLibrary(item)">
{{ item.cnEntityCount ? `${item.cnEntityCount}家中国实体` : "" }}
</div>
</div>
......@@ -401,18 +401,22 @@ const getEntityInfoFn = async id => {
const sanTypeId = ref("");
// 跳转到数据资源库
const handleToDataLibrary = () => {
const handleToDataLibrary = (item) => {
console.log('item', item);
let domainStr = domainOptions.filter(item => item.value === selectedDomain.value)[0].label
let params
if (domainStr === '全部领域') {
params = {
isCnEntityOnly: true,
selectedDate: JSON.stringify([item.postDate, item.postDate])
}
} else {
params = {
isCnEntityOnly: true,
domains: domainStr
domains: domainStr,
selectedDate: JSON.stringify([item.postDate, item.postDate])
};
}
const route = router.resolve({
......@@ -611,6 +615,10 @@ onMounted(() => {
color: rgb(206, 79, 81);
border-radius: 20px;
background-color: rgba(206, 79, 81, 0.1);
cursor: pointer;
&:hover{
text-decoration: underline;
}
}
}
}
......
......@@ -55,7 +55,7 @@
</div>
</div> -->
<EChart :option="domainChartOption" autoresize :style="{ height: '300px', padding: '0 20px' }"
@chart-click="handlePieChartClick" />
@chart-click="handleToDataLibrary3" />
<div class="data-origin-box">
<div class="data-origin-icon">
<img :src="tipsIcon" alt="" />
......@@ -106,7 +106,7 @@
</div>
</div> -->
<EChart :option="typeChartOption" autoresize :style="{ height: '300px', padding: '0 20px' }"
@chart-click="handlePieChartClick1" />
@chart-click="handleToDataLibrary4" />
<div class="data-origin-box">
<div class="data-origin-icon">
<img :src="tipsIcon" alt="" />
......@@ -123,7 +123,7 @@
<AnalysisBox title="制裁实体国家地区分布情况">
<div class="country-list">
<div class="list-item" v-for="(item, index) in countryDistribution" :key="index"
@click="handleClickRankChart(item)">
@click="handleToDataLibrary5(item)">
<img :src="flag" alt="" class="flag" />
<div class="country-name">{{ item.name }}</div>
<div class="progress-bar-container">
......@@ -164,7 +164,7 @@
<div class="map-chart" ref="mapChartRef"></div>
<div class="rank-list">
<div class="rank-item" v-for="(item, index) in regionDistribution" :key="index"
@click="handleRankChartClick(item)">
@click="handleToDataLibrary6(item)">
<div class="rank-index" :class="'rank-' + (index + 1)">{{ index + 1 }}</div>
<div class="rank-name">{{ item.name }}</div>
<div class="rank-bar-bg">
......@@ -855,10 +855,11 @@ const initTypeChart = () => {
const sanTypeId = ref("");
// 制裁实体领域分布情况
const handlePieChartClick = (val) => {
const handleToDataLibrary3 = (val) => {
// console.log('val', val);
const params = {
domains: val.name,
isCnEntityOnly: true,
selectedDate: JSON.stringify([route.query.date, route.query.date])
}
const curRoute = router.resolve({
......@@ -869,10 +870,11 @@ const handlePieChartClick = (val) => {
}
// 制裁实体类型分布情况
const handlePieChartClick1 = (val) => {
const handleToDataLibrary4 = (val) => {
// console.log('val', val);
const params = {
selectedEntityType: val.name,
isCnEntityOnly: true,
selectedDate: JSON.stringify([route.query.date, route.query.date])
}
const curRoute = router.resolve({
......@@ -883,9 +885,10 @@ const handlePieChartClick1 = (val) => {
}
// 制裁实体国家地区分布情况
const handleClickRankChart = (item) => {
const handleToDataLibrary5 = (item) => {
const params = {
selectedCountryId: item.id,
isCnEntityOnly: true,
selectedDate: JSON.stringify([route.query.date, route.query.date])
}
const curRoute = router.resolve({
......@@ -896,10 +899,11 @@ const handleClickRankChart = (item) => {
}
// 制裁实体各省分布情况
const handleRankChartClick = (item) => {
const handleToDataLibrary6 = (item) => {
console.log('item', item);
const params = {
selectedProvince: item.name,
isCnEntityOnly: true,
selectedDate: JSON.stringify([route.query.date, route.query.date])
}
const curRoute = router.resolve({
......@@ -940,6 +944,7 @@ const handleToDataLibrary2 = () => {
const curRoute = router.resolve({
path: "/dataLibrary/dataEntityList",
query: {
isCnEntityOnly: true,
selectedDate: JSON.stringify([dateStr, dateStr])
}
});
......
<template>
<div class="data-statistics">
<div class="nav">
<div class="nav-item">
<div class="nav-item" @click="handleToDataLibrary">
<div class="item-position"></div>
<div class="content">
<div class="info">
......@@ -13,7 +13,7 @@
</div>
</div>
</div>
<div class="nav-item">
<div class="nav-item" @click="handleToDataLibrary1">
<div class="item-position"></div>
<div class="content">
<div class="info">
......@@ -26,7 +26,7 @@
</div>
</div>
</div>
<div class="nav-item">
<div class="nav-item" @click="handleToDataLibrary2">
<div class="item-position"></div>
<div class="content">
<div class="info">
......@@ -38,7 +38,7 @@
</div>
</div>
</div>
<div class="nav-item">
<div class="nav-item" @click="handleToDataLibrary3(totalCount.latestTime)">
<div class="item-position"></div>
<div class="content">
<div class="info">
......@@ -104,7 +104,7 @@
</div>
</div>
</template>
<EChart :option="sanctionCountChartOption" autoresize :style="{ height: '300px', padding: '0 20px' }" />
<EChart :option="sanctionCountChartOption" autoresize :style="{ height: '300px', padding: '0 20px' }" @chart-click="handleToDataLibrary4" />
<div class="data-origin-box">
<div class="data-origin-icon">
......@@ -165,7 +165,7 @@
<el-option v-for="item in timeOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</template>
<EChart :option="domainChartOption" autoresize :style="{ height: '300px', padding: '0 20px' }" />
<EChart :option="domainChartOption" autoresize :style="{ height: '300px', padding: '0 20px' }" @chart-click="handleToDataLibrary6" />
<div class="data-origin-box">
<div class="data-origin-icon">
......@@ -190,23 +190,16 @@
</template> -->
<template #header-btn>
<div class="toggle-btns">
<div
class="t-btn"
:class="{ active: activeDomainTab === 'year' }"
@click="handleDomainTabChange('year')"
>
<div class="t-btn" :class="{ active: activeDomainTab === 'year' }" @click="handleDomainTabChange('year')">
按年度
</div>
<div
class="t-btn"
:class="{ active: activeDomainTab === 'sanction' }"
@click="handleDomainTabChange('sanction')"
>
<div class="t-btn" :class="{ active: activeDomainTab === 'sanction' }"
@click="handleDomainTabChange('sanction')">
按制裁
</div>
</div>
</template>
<EChart :option="domainNumChartOption" autoresize :style="{ height: '300px', padding: '0 20px' }" />
<EChart :option="domainNumChartOption" autoresize :style="{ height: '300px', padding: '0 20px' }" @chart-click="handleToDataLibrary5" />
<div class="data-origin-box">
<div class="data-origin-icon">
......@@ -230,7 +223,7 @@
</el-select>
</template>
<!-- <div class="echarts" ref="typeChartRef"></div> -->
<EChart :option="typeChartOption" autoresize :style="{ height: '300px', padding: '0 20px' }" />
<EChart :option="typeChartOption" autoresize :style="{ height: '300px', padding: '0 20px' }" @chart-click="handleToDataLibrary7" />
<!-- <div class="bottom">
<div class="ai">
<div class="left">
......@@ -277,6 +270,7 @@ import { getDomainNum } from "@/api/finance";
import getMultiLineChart from "@/views/ZMOverView/components/fourSuppress/components/addDomain/multiLineChart";
import EChart from "@/components/Chart/index.vue";
import { useRoute } from "vue-router";
import { useRouter } from "vue-router";
import tipsIcon from "../../../assets/icons/info-icon.png";
import AiButton from "@/components/base/Ai/AiButton/index.vue";
import AiPane from "@/components/base/Ai/AiPane/index.vue";
......@@ -287,6 +281,7 @@ const domainNumChart = useChartInterpretation();
const typeChart = useChartInterpretation();
const rankChart = useChartInterpretation();
const router = useRouter()
const route = useRoute();
// 实体清单-数据统计-制裁实体类型分布情况
const typeData = ref([]);
......@@ -387,7 +382,8 @@ const getRegionCountData = async () => {
const domainNumChartOption = ref({
color: [],
tooltip: {
trigger: "axis",
show: true,
trigger: "item",
backgroundColor: "rgba(255, 255, 255, 0.9)",
textStyle: {
color: "#666"
......@@ -1145,10 +1141,10 @@ const updateTypeChart = () => {
let data = typeData.value.length
? [...typeData.value]
: [
{ value: 50, name: "企业" },
{ value: 32, name: "高校" },
{ value: 32, name: "科研院所" }
];
{ value: 50, name: "企业" },
{ value: 32, name: "高校" },
{ value: 32, name: "科研院所" }
];
// 2. 聚合逻辑:保留前5项,其余合并为“其他”
data.sort((a, b) => b.value - a.value);
......@@ -1269,6 +1265,115 @@ const initTypeChart = () => {
};
const sanTypeId = ref("");
// 跳转到数据资源库
const handleToDataLibrary = () => {
const route = router.resolve({
path: "/dataLibrary/sDNList",
query: {
isCnEntityOnly: true
}
});
window.open(route.href, "_blank");
}
const handleToDataLibrary1 = () => {
const route = router.resolve({
path: "/dataLibrary/sDNList",
query: {
isCnEntityOnly: true,
isHalfRule: true
}
});
window.open(route.href, "_blank");
}
const handleToDataLibrary2 = () => {
const route = router.resolve({
path: "/dataLibrary/sDNList",
query: {
selectedDate: JSON.stringify([currentYear + '01-01', currentYear + '12-31'])
}
});
window.open(route.href, "_blank");
}
const handleToDataLibrary3 = (time) => {
const route = router.resolve({
path: "/dataLibrary/sDNList",
query: {
selectedDate: JSON.stringify([time, time])
}
});
window.open(route.href, "_blank");
}
// 点击制裁实体数量变化情况
const handleToDataLibrary4 = val => {
console.log("value", val);
const params = {
isCnEntityOnly: true,
selectedDate:
activeTab.value === "year"
? JSON.stringify([val.name + "-01-01", val.name + "-12-31"])
: JSON.stringify([val.name, val.name])
};
const route = router.resolve({
path: "/dataLibrary/sDNList",
query: params,
});
window.open(route.href, "_blank");
};
// 制裁实体各省分布情况
const handleToDataLibrary5 = item => {
console.log('item', item);
const params = {
domains: item.seriesName,
isCnEntityOnly: true,
selectedDate:
JSON.stringify([item.name + "-01-01", item.name + "-12-31"])
};
const route = router.resolve({
path: "/dataLibrary/sDNList",
query: params
});
window.open(route.href, "_blank");
};
// 制裁实体领域分布情况
const handleToDataLibrary6 = val => {
console.log("val", val);
const params = {
domains: val.name,
isCnEntityOnly: true,
selectedDate:
domainTime.value === "all" ? null : JSON.stringify([domainTime.value + "-01-01", domainTime.value + "-12-31"])
};
const route = router.resolve({
path: "/dataLibrary/dataEntityList",
query: params
});
window.open(route.href, "_blank");
};
// 制裁实体类型分布情况
const handleToDataLibrary7 = val => {
console.log("val", val);
const params = {
isCnEntityOnly: true,
selectedEntityType: val.name,
selectedDate: typeTime.value === "all" ? null : JSON.stringify([typeTime.value + "-01-01", typeTime.value + "-12-31"])
};
const route = router.resolve({
path: "/dataLibrary/dataEntityList",
query: params
});
window.open(route.href, "_blank");
}
onMounted(() => {
sanTypeId.value = route.query.sanTypeId || "";
console.log("数据统计页面接收到的 sanTypeId:", sanTypeId.value);
......@@ -1311,6 +1416,11 @@ onMounted(() => {
background-color: #fff;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
position: relative;
cursor: pointer;
&:hover {
background: var(--color-primary-2);
}
.item-position {
position: absolute;
......@@ -1702,16 +1812,19 @@ onMounted(() => {
align-items: center;
justify-content: flex-start;
padding: 22px;
.data-origin-icon {
width: 16px;
height: 16px;
font-size: 0px;
margin-right: 8px;
img {
width: 100%;
height: 100%;
}
}
.data-origin-text {
font-family: Source Han Sans CN;
font-size: 14px;
......@@ -1724,18 +1837,23 @@ onMounted(() => {
right: 0px;
bottom: 15px;
z-index: 2;
:deep(.ai-pane-wrapper) {
display: none;
}
:deep(.ai-button-wrapper) {
display: flex;
}
&:hover {
width: 100%;
bottom: 0px;
:deep(.ai-pane-wrapper) {
display: block;
}
:deep(.ai-button-wrapper) {
display: none;
}
......
......@@ -706,7 +706,8 @@ const handleClickSan = item => {
path: "/finance/singleSanction",
query: {
id: item.id,
sanTypeId: item.sanTypeId
sanTypeId: item.sanTypeId,
date: item.postDate
}
});
window.open(route.href, "_blank");
......
......@@ -75,17 +75,9 @@
<AnalysisBox title="实体清单更新历史" :showAllBtn="false">
<template #header-btn>
<div class="filters">
<el-select
v-model="selectedDomain"
placeholder="Select"
style="width: 150px; height: 32px; margin-right: 16px"
>
<el-option
v-for="item in domainOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
<el-select v-model="selectedDomain" placeholder="Select"
style="width: 150px; height: 32px; margin-right: 16px">
<el-option v-for="item in domainOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
<el-checkbox v-model="onlyChina">只看涉华动态</el-checkbox>
</div>
......@@ -99,20 +91,15 @@
<img :src="item.icon || title" alt="" />
<div class="main">
<div class="main-title" @click="handleClick(item)">{{ item.name }}</div>
<el-tooltip
effect="dark"
:content="item.summary"
popper-class="common-prompt-popper"
placement="top"
:show-after="500"
>
<el-tooltip effect="dark" :content="item.summary" popper-class="common-prompt-popper" placement="top"
:show-after="500">
<div class="main-desc">{{ item.summary }}</div>
</el-tooltip>
<div class="tag-box">
<div v-for="tag in item.techDomainList" :key="tag" class="tag-item">{{ tag }}</div>
</div>
<div :class="{ 'count-tag': item.cnEntityCount }">
<div :class="{ 'count-tag': item.cnEntityCount }" @click="handleToDataLibrary(item)">
{{ item.cnEntityCount ? `${item.cnEntityCount}家中国实体` : "" }}
</div>
</div>
......@@ -120,14 +107,8 @@
</div>
<div class="left-footer">
<div class="total-count"> {{ totalAll }} </div>
<el-pagination
v-model:current-page="currentPageAll"
:page-size="pageSizeAll"
:total="totalAll"
layout="prev, pager, next"
background
@current-change="handlePageChangeAll"
/>
<el-pagination v-model:current-page="currentPageAll" :page-size="pageSizeAll" :total="totalAll"
layout="prev, pager, next" background @current-change="handlePageChangeAll" />
</div>
</AnalysisBox>
</div>
......@@ -149,12 +130,8 @@
<span>关键人物</span>
</div>
<div class="key-person-list">
<div
class="person-item"
v-for="(item, index) in publishInfo.personList"
:key="index"
@click="handlePerClick(item)"
>
<div class="person-item" v-for="(item, index) in publishInfo.personList" :key="index"
@click="handlePerClick(item)">
<img :src="item.imageUrl" alt="" />
<div class="person-info">
<CommonPrompt :content="item.name">
......@@ -242,7 +219,8 @@ const handleClick = item => {
path: "/finance/singleSanction",
query: {
id: item.id,
sanTypeId: item.sanTypeId || 1
sanTypeId: item.sanTypeId || 1,
date: `${item.year}-${item.date}`
}
});
window.open(route.href, "_blank");
......@@ -421,6 +399,34 @@ const getEntityInfoFn = async id => {
};
const sanTypeId = ref("");
// 跳转到数据资源库
const handleToDataLibrary = (item) => {
// console.log('item', item);
let domainStr = domainOptions.filter(item => item.value === selectedDomain.value)[0].label
let params
if (domainStr === '全部领域') {
params = {
isCnEntityOnly: true,
selectedDate: JSON.stringify([item.postDate, item.postDate])
}
} else {
params = {
isCnEntityOnly: true,
domains: domainStr,
selectedDate: JSON.stringify([item.postDate, item.postDate])
};
}
const route = router.resolve({
path: "/dataLibrary/sDNList",
query: params
});
window.open(route.href, "_blank");
}
onMounted(() => {
sanTypeId.value = route.query.sanTypeId;
// 获取实体清单基本信息
......@@ -609,6 +615,11 @@ onMounted(() => {
color: rgb(206, 79, 81);
border-radius: 20px;
background-color: rgba(206, 79, 81, 0.1);
cursor: pointer;
&:hover {
text-decoration: underline;
}
}
}
}
......
......@@ -131,10 +131,10 @@
<div class="stats">
<div class="dot"></div>
<div class="count-text">
<span class="highlight">{{ ruleCount.totalCount }}</span>
<span class="highlight" @click="handlToDataLibrary">{{ ruleCount.totalCount }}</span>
</div>
<div class="rule-text">
(50%规则涉及<span class="highlight">{{ ruleCount.ruleCount }}</span
(50%规则涉及<span class="highlight" @click="handlToDataLibrary1">{{ ruleCount.ruleCount }}</span
>家)
</div>
</div>
......@@ -526,6 +526,30 @@ watch(customDateRange, () => {
getExportControlListApi();
}
});
// 跳转到数据资源库
const handlToDataLibrary = () => {
const params = {
isCnEntityOnly: true,
};
const route = router.resolve({
path: "/dataLibrary/sDNList",
query: params
});
window.open(route.href, "_blank");
}
const handlToDataLibrary1 = () => {
const params = {
isCnEntityOnly: true,
isHalfRule: true,
};
const route = router.resolve({
path: "/dataLibrary/sDNList",
query: params
});
window.open(route.href, "_blank");
}
</script>
<style scoped lang="scss">
......@@ -996,6 +1020,11 @@ watch(customDateRange, () => {
.highlight {
color: #cd4246;
margin: 0 4px;
cursor: pointer;
&:hover {
text-decoration: underline;
}
}
}
......@@ -1006,6 +1035,11 @@ watch(customDateRange, () => {
.highlight {
color: #cd4246;
cursor: pointer;
&:hover {
text-decoration: underline;
}
}
}
}
......
......@@ -744,7 +744,8 @@ const handleTitleClick = item => {
path: "/finance/singleSanction",
query: {
id: item.id,
sanTypeId: item.sanTypeId
sanTypeId: item.sanTypeId,
date: `${item.year}-${item.dateStr}`
}
});
window.open(route.href, "_blank");
......@@ -934,6 +935,7 @@ const handleToEntityList = item => {
console.log("这是什么数据1 =>", item);
let id = item?.id;
let sanTypeId = item?.sanTypeId || 1;
let date = entitiesDataInfoList.value[currentCarouselIndex.value].postDate
if (!id) {
const currentItem = entitiesDataInfoList.value[currentCarouselIndex.value];
id = currentItem?.id;
......@@ -947,7 +949,8 @@ const handleToEntityList = item => {
path: "/finance/singleSanction",
query: {
id,
sanTypeId
sanTypeId,
date
}
});
// 打开一个新页面
......@@ -1541,7 +1544,8 @@ const handleSanc = item => {
path: "/finance/singleSanction",
query: {
id: item.id,
sanTypeId: activeResourceTabItem.value.id.join(",")
sanTypeId: activeResourceTabItem.value.id.join(","),
date: item.postDate
}
});
window.open(route.href, "_blank");
......@@ -1865,6 +1869,7 @@ const handleMediaClick = item => {
padding-right: 50px;
box-sizing: border-box;
background: linear-gradient(to right, rgba(206, 79, 81, 0), rgba(206, 79, 81, 0.3));
cursor: pointer;
&-des {
display: flex;
......
<template>
<div class="data-statistics">
<div class="nav">
<div class="nav-item">
<div class="nav-item" @click="handleToDataLibrary">
<div class="item-position"></div>
<div class="content">
<div class="info">
......@@ -13,7 +13,7 @@
</div>
</div>
</div>
<div class="nav-item">
<div class="nav-item" @click="handleToDataLibrary1">
<div class="item-position"></div>
<div class="content">
<div class="info">
......@@ -26,7 +26,7 @@
</div>
</div>
</div>
<div class="nav-item">
<div class="nav-item" @click="handleToDataLibrary2">
<div class="item-position"></div>
<div class="content">
<div class="info">
......@@ -54,7 +54,7 @@
</div>
</div>
</div> -->
<EChart :option="domainChartOption" autoresize :style="{ height: '300px', padding: '0 20px' }" />
<EChart :option="domainChartOption" autoresize :style="{ height: '300px', padding: '0 20px' }" @chart-click="handleToDataLibrary3" />
<div class="data-origin-box">
<div class="data-origin-icon">
<img :src="tipsIcon" alt="" />
......@@ -106,7 +106,7 @@
</div>
</div>
</div> -->
<EChart :option="typeChartOption" autoresize :style="{ height: '300px', padding: '0 20px' }" />
<EChart :option="typeChartOption" autoresize :style="{ height: '300px', padding: '0 20px' }" @chart-click="handleToDataLibrary4" />
<div class="data-origin-box">
<div class="data-origin-icon">
<img :src="tipsIcon" alt="" />
......@@ -124,17 +124,14 @@
<div class="main-item">
<AnalysisBox title="制裁实体国家地区分布情况">
<div class="country-list">
<div class="list-item" v-for="(item, index) in countryDistribution" :key="index">
<div class="list-item" v-for="(item, index) in countryDistribution" :key="index" @click="handleToDataLibrary5(item)">
<img :src="flag" alt="" class="flag" />
<div class="country-name">{{ item.name }}</div>
<div class="progress-bar-container">
<div
class="progress-bar"
:style="{
width: item.width,
background: item.gradient
}"
></div>
<div class="progress-bar" :style="{
width: item.width,
background: item.gradient
}"></div>
</div>
<div class="count" :class="{ highlight: index === 0 }">{{ item.count }}</div>
</div>
......@@ -169,17 +166,14 @@
<div class="map-wrapper">
<div class="map-chart" ref="mapChartRef"></div>
<div class="rank-list">
<div class="rank-item" v-for="(item, index) in regionDistribution" :key="index">
<div class="rank-item" v-for="(item, index) in regionDistribution" :key="index" @click="handleToDataLibrary6(item)">
<div class="rank-index" :class="'rank-' + (index + 1)">{{ index + 1 }}</div>
<div class="rank-name">{{ item.name }}</div>
<div class="rank-bar-bg">
<div
class="rank-bar-fill"
:style="{
width: (maxRegionCount > 0 ? (item.count / maxRegionCount) * 100 : 0) + '%',
background: getBarColor(index)
}"
></div>
<div class="rank-bar-fill" :style="{
width: (maxRegionCount > 0 ? (item.count / maxRegionCount) * 100 : 0) + '%',
background: getBarColor(index)
}"></div>
</div>
<div class="rank-value">{{ item.count }}</div>
</div>
......@@ -829,6 +823,104 @@ const initTypeChart = () => {
// });
};
const sanTypeId = ref("");
// 跳转到数据资源库
const handleToDataLibrary = () => {
const dateStr = route.query.date ? route.query.date : ''
const curRoute = router.resolve({
path: "/dataLibrary/sDNList",
query: {
isCnEntityOnly: true,
selectedDate: JSON.stringify([dateStr, dateStr])
}
});
window.open(curRoute.href, "_blank");
}
const handleToDataLibrary1 = () => {
const dateStr = route.query.date ? route.query.date : ''
const curRoute = router.resolve({
path: "/dataLibrary/sDNList",
query: {
isCnEntityOnly: true,
isHalfRule: true,
selectedDate: JSON.stringify([dateStr, dateStr])
}
});
window.open(curRoute.href, "_blank");
}
const handleToDataLibrary2 = () => {
const dateStr = route.query.date ? route.query.date : ''
const curRoute = router.resolve({
path: "/dataLibrary/sDNList",
query: {
selectedDate: JSON.stringify([dateStr, dateStr]),
isCnEntityOnly: true,
}
});
window.open(curRoute.href, "_blank");
}
// 制裁实体领域分布情况
const handleToDataLibrary3 = (val) => {
// console.log('val', val);
const params = {
domains: val.name,
isCnEntityOnly: true,
selectedDate: JSON.stringify([route.query.date, route.query.date])
}
const curRoute = router.resolve({
path: '/dataLibrary/sDNList',
query: params
});
window.open(curRoute.href, "_blank");
}
// 制裁实体类型分布情况
const handleToDataLibrary4 = (val) => {
// console.log('val', val);
const params = {
selectedEntityType: val.name,
isCnEntityOnly: true,
selectedDate: JSON.stringify([route.query.date, route.query.date])
}
const curRoute = router.resolve({
path: '/dataLibrary/sDNList',
query: params
});
window.open(curRoute.href, "_blank");
}
// 制裁实体国家地区分布情况
const handleToDataLibrary5 = (item) => {
const params = {
selectedCountryId: item.id,
isCnEntityOnly: true,
selectedDate: JSON.stringify([route.query.date, route.query.date])
}
const curRoute = router.resolve({
path: '/dataLibrary/sDNList',
query: params
});
window.open(curRoute.href, "_blank");
}
// 制裁实体各省分布情况
const handleToDataLibrary6 = (item) => {
console.log('item', item);
const params = {
selectedProvince: item.name,
isCnEntityOnly: true,
selectedDate: JSON.stringify([route.query.date, route.query.date])
}
const curRoute = router.resolve({
path: '/dataLibrary/sDNList',
query: params
});
window.open(curRoute.href, "_blank");
}
onMounted(() => {
// 获取路由参数id
sanTypeId.value = route.query.sanTypeId;
......@@ -872,6 +964,11 @@ onMounted(() => {
background-color: #fff;
box-shadow: 0px 0px 20px 0px rgba(25, 69, 130, 0.1);
position: relative;
cursor: pointer;
&:hover {
background: var(--color-primary-2);
}
.item-position {
position: absolute;
......@@ -1267,22 +1364,26 @@ onMounted(() => {
}
}
}
.data-origin-box {
width: 100%;
display: flex;
align-items: center;
justify-content: flex-start;
padding: 22px;
.data-origin-icon {
width: 16px;
height: 16px;
font-size: 0px;
margin-right: 8px;
img {
width: 100%;
height: 100%;
}
}
.data-origin-text {
font-family: Source Han Sans CN;
font-size: 14px;
......@@ -1295,18 +1396,23 @@ onMounted(() => {
right: 0px;
bottom: 15px;
z-index: 2;
:deep(.ai-pane-wrapper) {
display: none;
}
:deep(.ai-button-wrapper) {
display: flex;
}
&:hover {
width: 100%;
bottom: 0px;
:deep(.ai-pane-wrapper) {
display: block;
}
:deep(.ai-button-wrapper) {
display: none;
}
......
......@@ -46,17 +46,15 @@
<div class="left-top-content">
<div class="content-title">制裁实体分布:</div>
<div class="distribution-list">
<div class="list-item" v-for="(item, index) in entityDistribution" :key="index">
<div class="list-item" v-for="(item, index) in entityDistribution" :key="index"
@click="handleToDataLibrary(item)">
<img :src="item.imageUrl || flag" alt="" class="flag" />
<div class="country-name">{{ item.name }}</div>
<div class="progress-bar-container">
<div
class="progress-bar"
:style="{
width: item.width,
background: item.gradient
}"
></div>
<div class="progress-bar" :style="{
width: item.width,
background: item.gradient
}"></div>
</div>
<div class="count" :class="{ highlight: index === 0 }">{{ item.count }}</div>
</div>
......@@ -99,25 +97,13 @@
</div>
<div class="filter-right">
<el-checkbox v-model="onlyChina" label="只看中国实体" />
<el-select
v-model="filterField"
placeholder="全部领域"
style="width: 150px; margin: 0 12px 0 16px"
>
<el-select v-model="filterField" placeholder="全部领域" style="width: 150px; margin: 0 12px 0 16px">
<el-option label="全部领域" value="" />
<el-option
v-for="item in domainOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
<el-option v-for="item in domainOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
<el-input
v-model="searchKeyword"
placeholder="搜索实体"
<el-input v-model="searchKeyword" placeholder="搜索实体"
style="width: 150px; border: 1px solid rgba(170, 173, 177, 0.4); border-radius: 5px"
:suffix-icon="Search"
/>
:suffix-icon="Search" />
</div>
</div>
<div class="stats-row">
......@@ -132,21 +118,14 @@
<div class="stats-info">
<div class="stat-item">
<span class="dot red"></span>
<span class="text"
>新增 <span class="num red">{{ addCount }}</span> 家 (50%规则涉及<span class="num red">{{
addRuleCount
}}</span
>家)</span
>
<span class="text">新增 <span class="num red">{{ addCount }}</span> 家 (50%规则涉及<span class="num red">{{
addRuleCount
}}</span>家)</span>
</div>
<div class="stat-item">
<span class="dot green"></span>
<span class="text"
>移除 <span class="num green">{{ removeCount }}</span> 家 (50%规则涉及<span
class="num green"
>{{ removeRuleCount }}</span
>家)</span
>
<span class="text">移除 <span class="num green">{{ removeCount }}</span> 家 (50%规则涉及<span
class="num green">{{ removeRuleCount }}</span>家)</span>
</div>
</div>
</div>
......@@ -178,11 +157,7 @@
>{{ item }}</span
> -->
<div class="domain-box">
<AreaTag
v-for="(domain, index) in scope.row.fields"
:key="index"
:tagName="domain"
/>
<AreaTag v-for="(domain, index) in scope.row.fields" :key="index" :tagName="domain" />
</div>
</template>
</el-table-column>
......@@ -191,26 +166,20 @@
<el-table-column prop="entityTypeId" label="类型" width="120" align="center">
<template #default="scope">
<div style="display: flex; gap: 4px; justify-content: center">
<AreaTag
:tagName="
scope.row.entityType === 1
? '个人'
: scope.row.entityType === 2
? '实体'
: '公司'
"
/>
<AreaTag :tagName="scope.row.entityType === 1
? '个人'
: scope.row.entityType === 2
? '实体'
: '公司'
" />
</div>
</template>
</el-table-column>
<!-- <el-table-column prop="revenue" label="营收(亿元)" width="110" align="center" /> -->
<el-table-column label="50%规则子企业" width="180" align="center">
<template #default="scope">
<span
v-if="scope.row.subsidiaryCount"
class="subsidiary-link"
@click="handleSubsidiaryClick(scope.row)"
>
<span v-if="scope.row.subsidiaryCount" class="subsidiary-link"
@click="handleSubsidiaryClick(scope.row)">
{{ scope.row.subsidiaryText }}
<span class="blue-text">{{ scope.row.subsidiaryCount }}家 ></span>
</span>
......@@ -254,12 +223,8 @@
</div>
</div>
<!-- 50%规则子企业弹框 -->
<RuleSubsidiaryDialog
v-model="subsidiaryDialogVisible"
:company-name="currentSubsidiaryCompanyName"
:total-count="currentSubsidiaryCount"
:data-list="currentSubsidiaryList"
/>
<RuleSubsidiaryDialog v-model="subsidiaryDialogVisible" :company-name="currentSubsidiaryCompanyName"
:total-count="currentSubsidiaryCount" :data-list="currentSubsidiaryList" />
</div>
</template>
......@@ -368,8 +333,8 @@ const getSanctionOverviewList = async () => {
subsidiaryText:
org.ruleOrgList && org.ruleOrgList.length > 0
? (org.ruleOrgList[0].orgName.length > 10
? org.ruleOrgList[0].orgName.slice(0, 10) + "..."
: org.ruleOrgList[0].orgName) + "...等"
? org.ruleOrgList[0].orgName.slice(0, 10) + "..."
: org.ruleOrgList[0].orgName) + "...等"
: ""
}))
}));
......@@ -623,6 +588,24 @@ const getReasonHistoryList = async () => {
};
const sanTypeId = ref("");
// 跳转到数据资源库
const handleToDataLibrary = (item) => {
console.log('item', item);
const dateStr = formattedData.value.postDate.replace(/(\d{4})(\d{1,2})(\d{1,2})日/, (_, y, m, d) =>
`${y}-${m.padStart(2, '0')}-${d.padStart(2, '0')}`
);
const route = router.resolve({
path: "/dataLibrary/sDNList",
query: {
selectedDate: JSON.stringify([dateStr, dateStr]),
selectedCountryId: item.id
}
});
window.open(route.href, "_blank");
}
onMounted(() => {
// 获取路由参数中的sanTypeId
console.log("route.query.sanTypeId --:", route.query.sanTypeId);
......@@ -768,6 +751,11 @@ onMounted(() => {
display: flex;
align-items: center;
height: 24px;
cursor: pointer;
&:hover {
background: var(--color-primary-2);
}
.flag {
width: 24px;
......@@ -831,6 +819,7 @@ onMounted(() => {
font-size: 14px;
height: 36px;
cursor: pointer;
.item-title {
font-size: 14px;
font-weight: 400;
......@@ -842,6 +831,7 @@ onMounted(() => {
text-overflow: ellipsis;
max-width: 90%;
}
.flag {
width: 16px;
height: 16px;
......@@ -1222,6 +1212,7 @@ onMounted(() => {
min-height: 500px;
max-height: 1000px;
margin-bottom: 15px;
.reason-history-item {
.item-header {
border-top: 1px solid #ddd;
......@@ -1230,10 +1221,12 @@ onMounted(() => {
display: flex;
justify-content: space-between;
align-items: center;
.item-header-title {
display: flex;
align-items: center;
width: 85%;
.item-header-title-idx {
width: 24px;
height: 24px;
......@@ -1243,6 +1236,7 @@ onMounted(() => {
line-height: 24px;
text-align: center;
}
.item-header-title-text {
margin-left: 13px;
font-size: 16px;
......@@ -1255,10 +1249,12 @@ onMounted(() => {
text-overflow: ellipsis;
}
}
.item-header-domain {
// min-width: 100px;
}
}
.item-content {
padding: 10px 20px;
border-radius: 4px;
......@@ -1270,6 +1266,7 @@ onMounted(() => {
background-color: rgb(247, 248, 249);
padding: 10px 0;
border-radius: 4px;
&::before {
content: "";
position: absolute;
......@@ -1279,6 +1276,7 @@ onMounted(() => {
width: 4px;
background-color: rgb(5, 95, 194);
}
.item-content-record-header {
padding: 0px 15px;
font-size: 16px;
......@@ -1291,6 +1289,7 @@ onMounted(() => {
overflow: hidden;
text-overflow: ellipsis;
}
.item-content-record-content {
padding: 5px 15px;
font-size: 16px;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论