|
|
|
@ -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 { |
|
|
|
<a type="text" v-if="row.status === '草稿' || row.status === '审批中'" @click="handleSaveQuoteDetail(row)">编辑</a> |
|
|
|
</template> |
|
|
|
<template v-if="isAuth('5011:detail:remove')"> |
|
|
|
<a type="text" v-if="row.status === '草稿' && !(quoteGroupDetail && quoteGroupDetail.currentQuoteDetailItemNo === row.itemNo)" @click="handleDeleteQuoteDetail(row)">删除</a> |
|
|
|
<a type="text" v-if="(row.status === '草稿' || row.status === '审批中') && !isDefaultQuoteRow(row)" @click="handleDeleteQuoteDetail(row)">删除</a> |
|
|
|
</template> |
|
|
|
<template v-if="isAuth('5011:detail:again')"> |
|
|
|
<!-- <a type="text" v-if="row.status !== '已完成'" @click="againQuoteDetail(row)">复制明细</a>--> |
|
|
|
|