更新
This commit is contained in:
		@@ -151,6 +151,7 @@ import { Search, Refresh } from "@element-plus/icons-vue";
 | 
			
		||||
import { checkAndUpdateStatus } from "@/api/fire/facility";
 | 
			
		||||
import { getReportData, getDetailData, getAllData } from "@/api/fire/report";
 | 
			
		||||
import DictTag from "@/components/DictTag/index.vue";
 | 
			
		||||
import { getCurrentInstance } from "vue"; // 补充导入
 | 
			
		||||
 | 
			
		||||
// 获取当前实例
 | 
			
		||||
const { proxy } = getCurrentInstance();
 | 
			
		||||
@@ -161,11 +162,15 @@ const { fire_facility_type, fire_facility_status } = proxy.useDict(
 | 
			
		||||
  "fire_facility_status"
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
// 计算属性
 | 
			
		||||
// 计算属性 - 优化字典加载判断逻辑
 | 
			
		||||
const facilityTypes = computed(() => fire_facility_type.value || []);
 | 
			
		||||
const facilityStatuses = computed(() => fire_facility_status.value || []);
 | 
			
		||||
const isDictLoaded = computed(() => {
 | 
			
		||||
  return facilityTypes.value.length > 0 && facilityStatuses.value.length > 0;
 | 
			
		||||
  // 不仅判断长度,还要验证是否包含有效数据(避免空数组误判)
 | 
			
		||||
  return facilityTypes.value.length > 0 && 
 | 
			
		||||
         facilityStatuses.value.length > 0 &&
 | 
			
		||||
         facilityTypes.value.some(item => item.value !== undefined) &&
 | 
			
		||||
         facilityStatuses.value.some(item => item.value !== undefined);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
// 2. 响应式数据
 | 
			
		||||
@@ -188,7 +193,7 @@ const pagination = reactive({
 | 
			
		||||
  total: 0
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
// 查询参数
 | 
			
		||||
// 查询参数 - 确保初始值为null(符合后端预期)
 | 
			
		||||
const queryParams = reactive({
 | 
			
		||||
  facilityType: null,
 | 
			
		||||
});
 | 
			
		||||
@@ -196,8 +201,11 @@ const queryParams = reactive({
 | 
			
		||||
// 3. 核心方法:查询报表数据
 | 
			
		||||
const handleQuery = () => {
 | 
			
		||||
  loading.value = true;
 | 
			
		||||
  // 打印查询参数,便于调试
 | 
			
		||||
  console.log("查询参数:", queryParams);
 | 
			
		||||
  getReportData(queryParams)
 | 
			
		||||
    .then((res) => {
 | 
			
		||||
      console.log("报表数据返回:", res);
 | 
			
		||||
      reportData.value = Array.isArray(res.data) ? res.data : [];
 | 
			
		||||
      totalCount.value = reportData.value.reduce(
 | 
			
		||||
        (sum, item) => sum + (item.total || 0),
 | 
			
		||||
@@ -241,7 +249,7 @@ const showStatusDetail = async (statusValue) => {
 | 
			
		||||
  detailDialog.value = true;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// 加载指定页的状态详情数据(保留状态更新)
 | 
			
		||||
// 加载指定页的状态详情数据
 | 
			
		||||
const loadStatusDetailPage = async () => {
 | 
			
		||||
  detailLoading.value = true;
 | 
			
		||||
  try {
 | 
			
		||||
@@ -266,7 +274,7 @@ const loadStatusDetailPage = async () => {
 | 
			
		||||
    pagination.total = Number(responseData.total) || 0;
 | 
			
		||||
    const currentPageList = Array.isArray(responseData.list) ? responseData.list : [];
 | 
			
		||||
 | 
			
		||||
    // 状态详情弹窗仍调用状态更新
 | 
			
		||||
    // 状态详情弹窗调用状态更新
 | 
			
		||||
    for (const item of currentPageList) {
 | 
			
		||||
      await checkAndUpdateStatus(item.id);
 | 
			
		||||
    }
 | 
			
		||||
@@ -302,7 +310,7 @@ const showTotalDetail = async () => {
 | 
			
		||||
  detailDialog.value = true;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// 加载指定页的总数详情数据(不调用状态更新)
 | 
			
		||||
// 加载指定页的总数详情数据
 | 
			
		||||
const loadTotalDetailPage = async () => {
 | 
			
		||||
  detailLoading.value = true;
 | 
			
		||||
  try {
 | 
			
		||||
@@ -321,10 +329,10 @@ const loadTotalDetailPage = async () => {
 | 
			
		||||
    const allData = Array.isArray(allDataRes.data) ? allDataRes.data : [];
 | 
			
		||||
    pagination.total = allData.length; // 总条数
 | 
			
		||||
    
 | 
			
		||||
    // 执行前端分页(不调用状态更新接口)
 | 
			
		||||
    // 执行前端分页
 | 
			
		||||
    const start = (pagination.currentPage - 1) * pagination.pageSize;
 | 
			
		||||
    const end = start + pagination.pageSize;
 | 
			
		||||
    detailList.value = allData.slice(start, end); // 直接使用原始数据
 | 
			
		||||
    detailList.value = allData.slice(start, end);
 | 
			
		||||
    
 | 
			
		||||
    // 空数据提示
 | 
			
		||||
    if (detailList.value.length === 0 && pagination.total > 0) {
 | 
			
		||||
@@ -394,20 +402,35 @@ const getExpiryTagType = (expiryDate) => {
 | 
			
		||||
  return diffDays < 0 ? "danger" : diffDays <= 30 ? "warning" : "success";
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// 10. 初始化与监听
 | 
			
		||||
watch(isDictLoaded, (loaded) => {
 | 
			
		||||
  if (loaded) {
 | 
			
		||||
    handleQuery();
 | 
			
		||||
  }
 | 
			
		||||
// 10. 初始化与监听 - 核心优化点
 | 
			
		||||
onMounted(() => {
 | 
			
		||||
  // 检查状态配置错误
 | 
			
		||||
  const invalidStatus = facilityStatuses.value.filter(item => !item.tagType);
 | 
			
		||||
  // if (invalidStatus.length) {
 | 
			
		||||
  //   console.error("以下状态缺少tagType配置:", invalidStatus);
 | 
			
		||||
  //   proxy.$message.warning(`检测到${invalidStatus.length}个状态样式配置错误`);
 | 
			
		||||
  // }
 | 
			
		||||
 | 
			
		||||
  // 初始化查询逻辑(确保字典加载后执行)
 | 
			
		||||
  const initQuery = () => {
 | 
			
		||||
    if (isDictLoaded.value) {
 | 
			
		||||
      handleQuery();
 | 
			
		||||
    } else {
 | 
			
		||||
      // 等待字典加载完成后执行查询
 | 
			
		||||
      const unwatch = watch(isDictLoaded, (loaded) => {
 | 
			
		||||
        if (loaded) {
 | 
			
		||||
          handleQuery();
 | 
			
		||||
          unwatch(); // 执行后销毁监听,避免重复调用
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  // 立即执行初始化查询
 | 
			
		||||
  initQuery();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
onMounted(() => {
 | 
			
		||||
  const invalidStatus = facilityStatuses.value.filter(item => !item.tagType);
 | 
			
		||||
  if (invalidStatus.length) {
 | 
			
		||||
    console.error("以下状态缺少tagType配置:", invalidStatus);
 | 
			
		||||
    proxy.$message.warning(`检测到${invalidStatus.length}个状态样式配置错误`);
 | 
			
		||||
  }
 | 
			
		||||
});
 | 
			
		||||
// 移除原有的watch(isDictLoaded),改用onMounted中的逻辑
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user