|
|
@@ -74,8 +74,8 @@
|
|
|
|
|
|
<script setup>
|
|
|
import { showWarning } from '@/utils/message';
|
|
|
-import { ref, computed, watch } from 'vue';
|
|
|
-import { useRouter } from 'vue-router';
|
|
|
+import { ref, computed, watch, nextTick } from 'vue';
|
|
|
+import { useRouter, useRoute } from 'vue-router';
|
|
|
import PageHeader from '@/components/layout/PageHeader.vue';
|
|
|
import TopicPageHeader from '@/components/stats/TopicPageHeader.vue';
|
|
|
import QueryFilter from '@/components/stats/QueryFilter.vue';
|
|
|
@@ -93,21 +93,25 @@ import {
|
|
|
mapTopic1Row,
|
|
|
} from '@/utils/topic1AssetList';
|
|
|
import { GROUP_DISPLAY_NAMES } from '@/utils/aggregateReportRecords';
|
|
|
+import {
|
|
|
+ AGE_SLICE_TO_KEY,
|
|
|
+ createDefaultTopic1ListFilters,
|
|
|
+ hasTopic1ChartQuery,
|
|
|
+ parseTopic1ListFiltersFromQuery,
|
|
|
+} from '@/utils/topic1ChartNavigation';
|
|
|
|
|
|
const enterpriseStore = useEnterpriseStore();
|
|
|
const filterStore = useFilterStore();
|
|
|
const router = useRouter();
|
|
|
+const route = useRoute();
|
|
|
const fullListRef = ref(null);
|
|
|
|
|
|
const DISPLAY_TO_GROUP = Object.fromEntries(
|
|
|
Object.entries(GROUP_DISPLAY_NAMES).map(([group, short]) => [short, group])
|
|
|
);
|
|
|
|
|
|
-const AGE_SLICE_TO_KEY = {
|
|
|
- '0-10年': '0-10',
|
|
|
- '10-20年': '10-20',
|
|
|
- '20年以上': '20+',
|
|
|
-};
|
|
|
+const createDefaultFilters = (group = filterStore.selectGroup) =>
|
|
|
+ createDefaultTopic1ListFilters(group);
|
|
|
|
|
|
const USAGE_PIE_CONFIG = [
|
|
|
{ name: '出租', field: 'c_czmj', color: 'rgba(1, 118, 255, 1)' },
|
|
|
@@ -116,17 +120,6 @@ const USAGE_PIE_CONFIG = [
|
|
|
{ name: '闲置', field: 'c_xzmj', color: 'rgba(255, 232, 119, 1)' },
|
|
|
];
|
|
|
|
|
|
-const createDefaultFilters = (group = filterStore.selectGroup) => ({
|
|
|
- keyword: '',
|
|
|
- purpose: '全部',
|
|
|
- group,
|
|
|
- age: '全部',
|
|
|
- util: '全部',
|
|
|
- fwUsage: '',
|
|
|
- landType: '',
|
|
|
- landUsage: '',
|
|
|
-});
|
|
|
-
|
|
|
const listFilters = ref(createDefaultFilters());
|
|
|
|
|
|
const filteredList = computed(() =>
|
|
|
@@ -272,9 +265,23 @@ const resetListFilters = () => {
|
|
|
};
|
|
|
|
|
|
watch(() => filterStore.selectGroup, (group) => {
|
|
|
+ if (hasTopic1ChartQuery(route.query)) {
|
|
|
+ listFilters.value = parseTopic1ListFiltersFromQuery(route.query, group);
|
|
|
+ return;
|
|
|
+ }
|
|
|
listFilters.value = createDefaultFilters(group);
|
|
|
});
|
|
|
|
|
|
+watch(
|
|
|
+ () => route.fullPath,
|
|
|
+ () => {
|
|
|
+ if (!hasTopic1ChartQuery(route.query)) return;
|
|
|
+ listFilters.value = parseTopic1ListFiltersFromQuery(route.query, filterStore.selectGroup);
|
|
|
+ nextTick(() => scrollToFullList());
|
|
|
+ },
|
|
|
+ { immediate: true },
|
|
|
+);
|
|
|
+
|
|
|
watch(
|
|
|
() => listFilters.value.group,
|
|
|
(group) => {
|
|
|
@@ -389,7 +396,7 @@ const topPieChartsList = computed(() => [
|
|
|
width: 100%;
|
|
|
max-width: var(--page-max-width);
|
|
|
padding: 24px;
|
|
|
- padding-bottom: 32px;
|
|
|
+ padding-bottom: 0;
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
gap: 12px;
|