diff --git a/src/views/modules/quote/detail/quoteDetail.vue b/src/views/modules/quote/detail/quoteDetail.vue index 6b79767..3947dbd 100644 --- a/src/views/modules/quote/detail/quoteDetail.vue +++ b/src/views/modules/quote/detail/quoteDetail.vue @@ -7,6 +7,7 @@ import { updateQuoteDetail, updateQuoteDetailShowFlag } from "../../../../api/quote/quoteDetail"; +import {queryQuoteGroupDetail} from "../../../../api/quote/quoteGroupDetail"; import {getProjectPartList} from "../../../../api/project/project"; import QuoteDetailCost from "./primary/quoteDetailCost.vue"; import QuoteDetailTool from "./primary/quoteDetailTool.vue"; @@ -763,6 +764,8 @@ export default { againVisible:false, againRow:{}, + // 平铺视图(不传 quoteGroupDetail 时)内部维护的 quoteGroupDetailId → currentQuoteDetailItemNo 映射 + internalDefaultItemNoMap: {}, } }, methods:{ @@ -889,6 +892,9 @@ export default { } if (this.quoteGroupDetail){ params.quoteGroupDetailId=this.quoteGroupDetail.id; + } else { + // 平铺模式:同步加载各报价明细组的默认条目映射,用于删除保护 + this.loadGroupDetailMap(); } this.queryLoading = true; queryQuoteDetail(params).then(({data})=>{ @@ -903,6 +909,28 @@ export default { this.queryLoading = false; }) }, + // 平铺模式下加载 quoteGroupDetail 映射,用于判断哪些条目行是默认报价行(不允许删除) + loadGroupDetailMap() { + if (!this.quote.id) { + this.internalDefaultItemNoMap = {} + return + } + queryQuoteGroupDetail({ quoteId: this.quote.id }).then(({ data }) => { + if (data && data.code === 0 && data.rows) { + const map = {} + data.rows.forEach(group => { + if (group.currentQuoteDetailItemNo) { + map[group.id] = group.currentQuoteDetailItemNo + } + }) + this.internalDefaultItemNoMap = map + } else { + this.internalDefaultItemNoMap = {} + } + }).catch(() => { + this.internalDefaultItemNoMap = {} + }) + }, handleSaveQuoteDetailClick(){ this.$refs.saveQuoteDetailForm.validate((valid,obj) => { if (valid){ @@ -1107,7 +1135,17 @@ export default { this.quoteGroupDetail.currentQuoteDetailItemNo = row.itemNo; // 直接触发emit事件 this.$emit('currentQuoteDetailItemNo', oldVal); - } + }, + // 判断某行是否为默认报价行(不允许删除) + // 单组视图(quoteGroupDetail 已传入):对比 quoteGroupDetail.currentQuoteDetailItemNo + // 平铺视图(quoteGroupDetail 未传):对比内部加载的 internalDefaultItemNoMap + isDefaultQuoteRow(row) { + if (this.quoteGroupDetail) { + return this.quoteGroupDetail.currentQuoteDetailItemNo === row.itemNo; + } + const defaultItemNo = this.internalDefaultItemNoMap[row.quoteGroupDetailId] + return defaultItemNo != null && defaultItemNo === row.itemNo; + }, }, watch:{ quote(newVal,oldVal){ @@ -1225,7 +1263,7 @@ export default { 编辑