2 コミット 15ab854a19 ... 2c7869d2bd

作者 SHA1 メッセージ 日付
  gongtianxiao 2c7869d2bd 完善图表 1 ヶ月 前
  gongtianxiao 77db133cd4 删除部分无用代码 1 ヶ月 前

+ 1 - 5
src/api/enterpriseList.js

@@ -4,7 +4,6 @@ import { COLUMN_ID, MODEL_ID } from '@/config';
 
 export const getEnterprise = (FormData) => {
   return service({
-    // url: '/proxy_dms/content/selectContentList',
     url: '/content/selectContentList',
     method: 'POST',
     data: FormData
@@ -13,7 +12,6 @@ export const getEnterprise = (FormData) => {
 
 export const updateAudit = (data) => {
   return service({
-    // url: '/proxy_dms/content/updateAudit',
     url: '/content/updateAudit',
     method: 'POST',
     data,
@@ -26,7 +24,6 @@ export const updateContent = (data) => {
     payload.content = JSON.stringify(payload.content);
   }
   return service({
-    // url: '/proxy_dms/content/updateContent',
     url: '/content/updateContent',
     method: 'POST',
     data: payload,
@@ -39,7 +36,6 @@ const addContent = (data) => {
     payload.content = JSON.stringify(payload.content);
   }
   return service({
-    // url: '/proxy_dms/content/addContent',
     url: '/content/addContent',
     method: 'POST',
     data: payload,
@@ -85,4 +81,4 @@ export async function submitAssetEdit(item, patch, { auditorComment = '修改送
   });
 
   return contentBody;
-}
+}

+ 1 - 1
src/components/chart/GroupAreaCompareBarChart.vue

@@ -45,7 +45,7 @@ const chartRef = ref(null);
 let chartInstance = null;
 
 const filteredList = computed(() =>
-  enterpriseStore.filteredByGroup(filterStore.selectGroup, filterStore.selectDate)
+  enterpriseStore.filteredByGroup('全部', filterStore.selectDate)
 );
 
 const getUsedAreaSqm = (item) =>

+ 2 - 2
src/components/layout/NotificationModal.vue

@@ -169,7 +169,7 @@ watch(unreadCount, (count) => {
 /** 打开弹窗:优先展示缓存,后台轻量同步(不强制拉全量资产) */
 const syncOnOpen = async () => {
   try {
-    await notificationStore.refresh({ forceAssets: false });
+    await notificationStore.refresh();
   } catch (e) {
     showError(e?.message || e?.msg || '通知加载失败,请稍后重试');
   }
@@ -178,7 +178,7 @@ const syncOnOpen = async () => {
 /** 手动刷新:强制拉全量资产并同步 */
 const refreshFull = async () => {
   try {
-    await notificationStore.refresh({ forceAssets: true });
+    await notificationStore.refresh();
   } catch (e) {
     showError(e?.message || e?.msg || '通知加载失败,请稍后重试');
   }

+ 1 - 1
src/components/layout/PageHeader.vue

@@ -91,7 +91,7 @@ const goManage = () => {
 };
 
 onMounted(() => {
-  notificationStore.refresh({ forceAssets: false }).catch(() => {});
+  notificationStore.refresh().catch(() => {});
 });
 </script>
 

+ 1 - 6
src/components/manage/asset/PickAssetModal.vue

@@ -86,11 +86,6 @@ const props = defineProps({
     type: Array,
     default: () => [],
   },
-  /** 顶栏当前企业,用于限定可选资产范围 */
-  currentEnterprise: {
-    type: String,
-    default: '',
-  },
 });
 
 const emit = defineEmits(['update:visible', 'confirm']);
@@ -136,7 +131,7 @@ const matchKeyword = (item, kw) => {
 
 const scopedList = computed(() =>
   pickableList.value.filter((item) =>
-    assetBelongsToManageScope(item, props.currentEnterprise)
+    assetBelongsToManageScope(item)
   )
 );
 

+ 2 - 3
src/components/manage/pages/ManageBasicArchive.vue

@@ -187,7 +187,6 @@
     <PickAssetModal
       v-model:visible="showPickModal"
       :exclude-ids="queueIds"
-      :current-enterprise="currentEnterprise"
       @confirm="handlePickConfirm"
     />
     <MonthlyEditModal
@@ -702,7 +701,7 @@ const handlePickConfirm = (pickedItems) => {
   pickedItems.forEach((item) => {
     const id = String(item.id);
     if (!id || !belongsToMonthlyQueue(item)) return;
-    if (!assetBelongsToManageScope(item, currentEnterprise.value)) return;
+    if (!assetBelongsToManageScope(item)) return;
     if (monthlyQueue.value.some((r) => String(r.id) === id)) return;
     monthlyQueue.value.push(item);
     added++;
@@ -966,7 +965,7 @@ onMounted(() => {
 
 const loadReportingState = async ({ resetQueue = false } = {}) => {
   await enterpriseStore.fetchReportProgress({ force: true });
-  await enterpriseStore.fetchList({ force: true });
+  await enterpriseStore.fetchList(true);
 
   if (resetQueue) {
     monthlyQueue.value = [];

+ 0 - 1
src/components/stats/ChartSpecial.vue

@@ -265,7 +265,6 @@ const topicCardList = ref([
 
 onMounted(() => {
   mq.addEventListener('change', onBreakpointChange);
-  enterpriseStore.fetchStatisticsList();
 });
 
 onUnmounted(() => {

+ 6 - 1
src/components/stats/FullDataList.vue

@@ -54,7 +54,12 @@
           :max-options-height="240"
           @selected="patchFilters({ landUsage: $event })"
         />
-        <BaseButton text="清除筛选" variant="outline" size="sm" @click="$emit('reset')" />
+        <BaseButton
+          class="filter-bar__reset"
+          text="重置"
+          variant="outline"
+          @click="$emit('reset')"
+        />
       </div>
     </template>
 

+ 7 - 0
src/components/stats/TopicFullDataListSection.vue

@@ -154,6 +154,13 @@ defineExpose({
   min-width: 240px;
 }
 
+.topic-full-list .filter-bar__reset {
+  height: 36px;
+  padding: 0 16px;
+  flex-shrink: 0;
+  align-self: center;
+}
+
 .topic-full-list .filter-hint {
   margin: 0;
   font-family: var(--font-regular);

+ 0 - 2
src/main.js

@@ -4,13 +4,11 @@ import router from './router'
 import { createPinia } from 'pinia'
 import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
 import '@/assets/common.css'
-import * as echarts from 'echarts'
 
 const pinia = createPinia()
 pinia.use(piniaPluginPersistedstate)
 
 const app = createApp(App)
-app.config.globalProperties.$echarts = echarts
 app.use(pinia)
 app.use(router)
 app.mount('#app')

+ 1 - 4
src/pages/HomePage.vue

@@ -26,7 +26,7 @@ import QueryFilter from '@/components/stats/QueryFilter.vue';
 import ChartSpecial from '@/components/stats/ChartSpecial.vue';
 import MonthlyReport from '@/components/stats/MonthlyReport.vue';
 import MetricCard from '@/components/stats/MetricCard.vue';
-import { computed, onMounted } from 'vue';
+import { computed } from 'vue';
 import { useEnterpriseStore } from '@/store/enterprise';
 import { useFilterStore } from '@/store/filter';
 import { sumFieldToWan, sumFieldsToWan } from '@/utils/areaMath';
@@ -149,9 +149,6 @@ const metricCardList = computed(() => [
   },
 ]);
 
-onMounted(async () => {
-  await enterpriseStore.fetchStatisticsList();
-});
 </script>
 
 <style scoped>

+ 8 - 8
src/pages/Topic1Page.vue

@@ -74,7 +74,7 @@
 
 <script setup>
 import { showWarning } from '@/utils/message';
-import { ref, onMounted, computed, watch } from 'vue';
+import { ref, computed, watch } from 'vue';
 import { useRouter } from 'vue-router';
 import PageHeader from '@/components/layout/PageHeader.vue';
 import TopicPageHeader from '@/components/stats/TopicPageHeader.vue';
@@ -116,10 +116,10 @@ const USAGE_PIE_CONFIG = [
   { name: '闲置', field: 'c_xzmj', color: 'rgba(255, 232, 119, 1)' },
 ];
 
-const createDefaultFilters = () => ({
+const createDefaultFilters = (group = filterStore.selectGroup) => ({
   keyword: '',
   purpose: '全部',
-  group: filterStore.selectGroup,
+  group,
   age: '全部',
   util: '全部',
   fwUsage: '',
@@ -267,10 +267,13 @@ const applyListFilters = (patch) => {
 };
 
 const resetListFilters = () => {
-  listFilters.value = createDefaultFilters();
+  filterStore.setGroup('全部');
+  listFilters.value = createDefaultFilters('全部');
 };
 
-watch(() => filterStore.selectGroup, resetListFilters);
+watch(() => filterStore.selectGroup, (group) => {
+  listFilters.value = createDefaultFilters(group);
+});
 
 watch(
   () => listFilters.value.group,
@@ -379,9 +382,6 @@ const topPieChartsList = computed(() => [
   },
 ]);
 
-onMounted(() => {
-  enterpriseStore.fetchStatisticsList();
-});
 </script>
 
 <style scoped>

+ 19 - 8
src/pages/Topic2Page.vue

@@ -79,7 +79,12 @@
               :options="CERT_UI_OPTIONS"
               @selected="filterCert = $event"
             />
-            <BaseButton text="清除筛选" variant="outline" size="sm" @click="resetLocalFilters" />
+            <BaseButton
+              class="filter-bar__reset"
+              text="重置"
+              variant="outline"
+              @click="resetLocalFilters"
+            />
           </div>
         </template>
       </TopicFullDataListSection>
@@ -90,7 +95,7 @@
 <script setup>
 import { showSuccess, showWarning } from '@/utils/message';
 import { exportTableExcel } from '@/utils/exportExcel';
-import { computed, onMounted, ref, watch } from 'vue';
+import { computed, ref, watch } from 'vue';
 import { useRouter } from 'vue-router';
 import PageHeader from '@/components/layout/PageHeader.vue';
 import TopicPageHeader from '@/components/stats/TopicPageHeader.vue';
@@ -141,6 +146,11 @@ const filteredList = computed(() =>
   enterpriseStore.filteredByGroup(filterStore.selectGroup, filterStore.selectDate)
 );
 
+/** 各集团办证率对比:仅受统计周期影响,不受所属集团筛选影响 */
+const periodAllGroupsList = computed(() =>
+  enterpriseStore.filteredByGroup('全部', filterStore.selectDate)
+);
+
 const previousMonth = computed(() => getPreviousMonthPeriod(filterStore.selectDate));
 
 const momSnapshots = computed(() =>
@@ -223,7 +233,7 @@ const ownershipPieData = computed(() => {
 
 const certRateChartData = computed(() =>
   GROUP_ORDER.map((group) => {
-    const items = filteredList.value.filter(
+    const items = periodAllGroupsList.value.filter(
       (item) => normalizeGroupName(item.c_ssqpjt) === group
     );
     const total = items.length;
@@ -320,8 +330,9 @@ const onGroupBarClick = (shortName) => {
 };
 
 const resetLocalFilters = () => {
+  filterStore.setGroup('全部');
   filterKeyword.value = '';
-  filterGroup.value = filterStore.selectGroup;
+  filterGroup.value = '全部';
   filterCert.value = '全部';
 };
 
@@ -350,10 +361,10 @@ const handleExport = () => {
   showSuccess(`已导出 ${result.count} 条记录(${result.filename})`);
 };
 
-watch(() => filterStore.selectGroup, resetLocalFilters);
-
-onMounted(() => {
-  enterpriseStore.fetchStatisticsList();
+watch(() => filterStore.selectGroup, (group) => {
+  filterKeyword.value = '';
+  filterGroup.value = group;
+  filterCert.value = '全部';
 });
 </script>
 

+ 27 - 8
src/pages/Topic3Page.vue

@@ -166,7 +166,12 @@
               :options="SCOPE_OPTIONS"
               @selected="filterScope = $event"
             />
-            <BaseButton text="清除筛选" variant="outline" size="sm" @click="resetLocalFilters" />
+            <BaseButton
+              class="filter-bar__reset"
+              text="重置"
+              variant="outline"
+              @click="resetLocalFilters"
+            />
           </div>
         </template>
       </TopicFullDataListSection>
@@ -177,7 +182,7 @@
 <script setup>
 import { showSuccess, showWarning } from '@/utils/message';
 import { exportTableExcel } from '@/utils/exportExcel';
-import { computed, onMounted, ref, watch } from 'vue';
+import { computed, ref, watch } from 'vue';
 import { useRouter } from 'vue-router';
 import PageHeader from '@/components/layout/PageHeader.vue';
 import TopicPageHeader from '@/components/stats/TopicPageHeader.vue';
@@ -251,6 +256,15 @@ const filteredList = computed(() =>
   enterpriseStore.filteredByGroup(filterStore.selectGroup, filterStore.selectDate)
 );
 
+/** 闲置面积 TOP5(集团):仅受统计周期影响,不受所属集团筛选影响 */
+const periodAllGroupsList = computed(() =>
+  enterpriseStore.filteredByGroup('全部', filterStore.selectDate)
+);
+
+const periodIdleAssetList = computed(() =>
+  periodAllGroupsList.value.filter((item) => getIdleArea(item) > 0)
+);
+
 const previousMonth = computed(() => getPreviousMonthPeriod(filterStore.selectDate));
 
 const momSnapshots = computed(() =>
@@ -376,7 +390,7 @@ const durationPieData = computed(() =>
 );
 
 const idleTop5GroupChartData = computed(() => {
-  const groupMap = idleAssetList.value.reduce((acc, item) => {
+  const groupMap = periodIdleAssetList.value.reduce((acc, item) => {
     const group = (item.c_ssqpjt ?? '其他').trim() || '其他';
     acc[group] = (acc[group] ?? 0) + getIdleArea(item);
     return acc;
@@ -574,8 +588,9 @@ const onIdleBucketSelect = (value) => {
 };
 
 const resetLocalFilters = () => {
+  filterStore.setGroup('全部');
   filterKeyword.value = '';
-  filterGroup.value = filterStore.selectGroup;
+  filterGroup.value = '全部';
   filterPurpose.value = '全部';
   filterIdleMonths.value = '全部';
   filterIdleBucket.value = '全部';
@@ -608,10 +623,14 @@ const handleExport = () => {
   showSuccess(`已导出 ${result.count} 条记录(${result.filename})`);
 };
 
-watch(() => filterStore.selectGroup, resetLocalFilters);
-
-onMounted(() => {
-  enterpriseStore.fetchStatisticsList();
+watch(() => filterStore.selectGroup, (group) => {
+  filterKeyword.value = '';
+  filterGroup.value = group;
+  filterPurpose.value = '全部';
+  filterIdleMonths.value = '全部';
+  filterIdleBucket.value = '全部';
+  filterScope.value = 'idle';
+  filterEnterprise.value = '';
 });
 </script>
 

+ 0 - 13
src/store/enterprise.js

@@ -191,19 +191,6 @@ export const useEnterpriseStore = defineStore('enterprise', {
       await useNotificationStore().syncAfterReportChange();
     },
 
-    updateApprovedItem(id, patch) {
-      const list = this.listsByState[REPORT_STATE.APPROVED];
-      const index = list.findIndex(
-        (item) => String(item.id) === String(id) || String(item.c_bh || '') === String(id)
-      );
-      if (index < 0) return false;
-      this.listsByState[REPORT_STATE.APPROVED][index] = {
-        ...list[index],
-        ...patch,
-      };
-      return true;
-    },
-
     getAssetEditDraft(assetId) {
       return this.assetEditDrafts[String(assetId)] || null;
     },

+ 2 - 21
src/utils/manageContext.js

@@ -11,28 +11,9 @@ export const resolveManageEnterprise = (userInfo) =>
   || userInfo?.orgName
   || DEFAULT_MANAGE_ENTERPRISE;
 
-/** 资产是否属于当前企业/集团管辖范围(新增上报资产弹窗用) */
+/** 资产是否属于当前管理集团管辖范围 */
 export const assetBelongsToManageScope = (item) => {
-  // 优先以所属青浦集团(c_ssqpjt)匹配当前管理集团
   const filterStore = useFilterStore();
   const qpGroup = String(item?.c_ssqpjt ?? '').trim();
-  if (qpGroup && qpGroup === filterStore.selectManageGroup) {
-    return true;
-  }
-
-  // // 原逻辑(注释保留)
-  // const target = String(enterprise ?? '').trim();
-  // if (!target) return true;
-  //
-  // const qymc = String(item.c_qymc ?? '').trim();
-  // const ssjt = String(item.c_ssjt ?? '').trim();
-  //
-  // if (qymc === target || ssjt === target) return true;
-  // if (qymc.includes(target) || target.includes(qymc)) return true;
-  //
-  // if (target === DEFAULT_MANAGE_ENTERPRISE && qpGroup === DEFAULT_MANAGE_GROUP) {
-  //   return true;
-  // }
-
-  return false;
+  return Boolean(qpGroup && qpGroup === filterStore.selectManageGroup);
 };

+ 0 - 7
src/utils/statsComparison.js

@@ -88,13 +88,6 @@ const sumSnapshotSqm = (snapshots, field) =>
 export const sumSnapshotsToWan = (snapshots, field) =>
   toWanSquareMeters(sumSnapshotSqm(snapshots, field));
 
-export const sumSnapshotFieldsToWan = (snapshots, fields) => {
-  const sumSqm = (snapshots || []).reduce((total, item) => {
-    return total + fields.reduce((sum, field) => sum + Number(item?.[field] || 0), 0);
-  }, 0);
-  return toWanSquareMeters(sumSqm);
-};
-
 export const countCertifiedSnapshots = (snapshots) =>
   (snapshots || []).filter((item) => String(item?.c_sfblcz ?? '').trim() === '是').length;