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

feat:更新数据资源库

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