1、优化

This commit is contained in:
2026-05-08 10:32:34 +08:00
parent 4afa6a92ef
commit 3ac2fe48dd
3 changed files with 36 additions and 29 deletions

View File

@@ -78,7 +78,7 @@ function otherLightModels(data) {
engine.engine?.setModelColor(
i.codeData,
i.color,
0.6
0.2
);
})
}

View File

@@ -122,12 +122,12 @@
<thead>
<tr>
<!-- <th>序号</th><th>全名称</th><th>清单编号</th><th>清单名称</th><th>单位</th><th>合同数量</th><th>合同金额</th><th>填报日期</th><th>完成数量</th><th>完成金额</th><th>累计完成数量</th>-->
<th>序号</th><th>全名称</th><th>清单编号</th><th>清单名称</th><th>单位</th><th>合同数量</th><th>合同金额</th><th>合同金额不含税</th><th>累计完成数量</th><th>进度</th>
<th>序号</th><th>全名称</th><th>清单编号</th><th>清单名称</th><th>单位</th><th>合同数量</th><th>合同金额</th><th>合同金额不含税</th><th>累计完成数量</th><th>累计完成金额</th><th>累计完成金额不含税</th><th>进度</th>
</tr>
</thead>
<tbody>
<tr v-for="r in progressRows" :key="r.no">
<td>{{ r.no }}</td><td>{{ r.fullName }}</td><td>{{ r.workCode }}</td><td>{{ r.name }}</td><td>{{ r.workUnit }}</td><td>{{ formatNumber(r.meteringNum,2) }}</td><td>{{ formatMoney(r.meteringAmt) }}</td><td>{{ formatMoney(r.meteringNotaxAmt) }}</td><td>{{ r.totalNum }}</td><td>{{ proportion(r.meteringNum,r.totalNum) }}</td>
<td>{{ r.no }}</td><td>{{ r.fullName }}</td><td>{{ r.workCode }}</td><td>{{ r.name }}</td><td>{{ r.workUnit }}</td><td>{{ formatNumber(r.meteringNum,2) }}</td><td>{{ formatMoney(r.meteringAmt) }}</td><td>{{ formatMoney(r.meteringNotaxAmt) }}</td><td>{{ r.totalNum }}</td><td>{{formatMoney(r.totalAmt) }}</td><td>{{ formatMoney(r.totalNotaxAmt) }}</td><td>{{ proportion(r.meteringAmt,r.totalAmt) }}</td>
</tr>
</tbody>
</table>
@@ -240,12 +240,13 @@ const baselineDate = ref(todayISODate());
const baselineOverallPercent = ref(0);
const cutoffDate = ref(todayISODate());
const cutoffDateDraft = ref(cutoffDate.value);
const selectedPeriod = computed(() => cutoffDateDraft.value || cutoffDate.value || todayISODate());
const percentFilters = reactive({ all: false, p0: false, p0_50: false, p50_100: false, p100: false });
const filteredProgressCodeData = ref([]);
const filteredProgressColorParams = ref([]);
const percentColorMap = {
p0: "#6E7D96",
p0: "#B0B8C4",
p0_50: "#D9363E",
p50_100: "#156CFF",
p100: "#2F8F2F",
@@ -256,7 +257,7 @@ const visibleTreeRows = computed(() => {
const walk = (node, level) => {
const leaf = node.isLeaf === true;
const open = expanded.value.has(node.id);
rows.push({ id: node.id, name: node.name, level, leaf, open, createDate: node.createDate, projectId: node.projectId });
rows.push({ id: node.id, name: node.name, level, leaf, open, createDate: selectedPeriod.value, projectId: node.projectId });
if (!leaf && open && node.children) {
node.children.forEach((c) => walk(c, level + 1));
}
@@ -299,9 +300,10 @@ const progressRows = computed(() => {
meteringNotaxAmt: item.meteringNotaxAmt || 0,
meteringNum: item.meteringNum || 0,
totalNum: item.totalNum || '',
doneQty: item.doneQty || 0,
doneAmt: item.doneAmt || 0,
cumDoneQty: item.cumDoneQty || 0,
totalAmt: item.totalAmt ?? item.actAmt ?? 0,
totalNotaxAmt: item.totalNotaxAmt ?? item.actNotaxAmt ?? 0,
thisNum: item.thisNum || 0,
thisAmt: item.thisAmt || 0,
}));
});
@@ -368,8 +370,9 @@ function findNode(nodes, id) {
onMounted(async() => {
await loadWbsTree();
window.addEventListener("click", closeContextMenu);
const result = await progressApi.calculateProgress();
taskId.value = result.taskId
const result = await progressApi.calculateProgress(selectedPeriod.value);
console.log(888888,result)
// taskId.value = result.taskId
});
function todayISODate() {
@@ -461,14 +464,16 @@ function buildModelCodeData(list) {
}
async function refreshFilteredProgressCodeData() {
if (!taskId.value) {
filteredProgressCodeData.value = [];
filteredProgressColorParams.value = [];
modelRef.value?.cancelLightModels();
return;
}
// if (!taskId.value) {
// filteredProgressCodeData.value = [];
// filteredProgressColorParams.value = [];
// modelRef.value?.cancelLightModels();
// return;
// }
try {
const response = await progressApi.getProgress(taskId.value);
// const response = await progressApi.getProgress(taskId.value);
const response = await progressApi.getProgress(selectedPeriod.value);
console.log(77777,response)
const items = extractProgressItems(response);
const enabledKeys = ["p0", "p0_50", "p50_100", "p100"].filter((k) => percentFilters[k]);
const activeKeys = percentFilters.all ? ["p0", "p0_50", "p50_100", "p100"] : enabledKeys;
@@ -512,19 +517,22 @@ async function refreshFilteredProgressCodeData() {
function applyCutoffDate() {
cutoffDate.value = cutoffDateDraft.value || cutoffDate.value || todayISODate();
const result = progressApi.calculateProgress(selectedPeriod.value);
console.log(2121,result)
}
// 计算比例count / allCount并显示百分比
function proportion(count, allCount) {
function proportion(allCount, count) {
if (count==="" || allCount==="")
return ""
// 防止除以 0 报错
if (!allCount || allCount === 0) return `0 / 0 (0%)`
if (!allCount || allCount === 0) return `0%`
// 计算百分比保留2位小数
let percent = ((count / allCount) * 100).toFixed(2)
// 返回格式5 / 10 (50.00%)
return `${count} / ${allCount} (${percent}%)`
// return `${count} / ${allCount} (${percent}%)`
return `${percent}%`
}
async function applyAllExclusive(key, checked) {
@@ -605,11 +613,11 @@ async function onTreeRowClick(row) {
}
if (row.leaf) {
selectedStructureId.value = row.id;
await loadProgressData(row.id, row.createDate);
await loadProgressData(row.id, selectedPeriod.value);
} else {
toggleTreeExpand(row);
progressData.value = []
progressData.value = await progressApi.findActAmtByPositionId(row.projectId, row.id, row.createDate);
progressData.value = await progressApi.findActAmtByPositionId(row.projectId, row.id, selectedPeriod.value);
}
}
@@ -636,7 +644,7 @@ function addPartToBindingList(row) {
if (!row?.id) return;
const exists = partList.value.some((item) => item.id === row.id);
if (exists) return;
partList.value.push({ id: row.id, createDate: row.createDate });
partList.value.push({ id: row.id, createDate: selectedPeriod.value });
}
function onAddComponent() {
@@ -664,7 +672,7 @@ async function onViewComponent() {
function applyViewModalData(row, data) {
const partId = row?.id;
if (!partId) return;
viewPartList.value = [{ id: partId, createDate: row?.createDate }];
viewPartList.value = [{ id: partId, createDate: selectedPeriod.value }];
const mapped = (data || [])
.map((item) => toBindingCodeItem(item))
.filter(Boolean);

View File

@@ -56,12 +56,12 @@ export const progressApi = {
});
},
calculateProgress() {
return get("/api/bim/progressData", {}).then((res) => res);
calculateProgress(date) {
return get("/api/bim/progressData", { date }).then((res) => res);
},
getProgress(taskId) {
return get(`/api/bim/progressData/${taskId}`).then((res) => res);
getProgress(date) {
return get("/api/bim/progressData/result",{ date }).then((res) => res);
},
getCodeWbsMappings() {
@@ -71,4 +71,3 @@ export const progressApi = {
});
},
};