This commit is contained in:
2025-07-30 16:01:57 +08:00
parent bf5bd44fad
commit dba9080e8c

View File

@@ -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>