feat: add material spec to BOM responses and UI

Co-authored-by: aider (openai/DeepSeek-V3.2-Thinking) <aider@aider.chat>
This commit is contained in:
dxc
2026-02-12 10:10:37 +08:00
parent 6e5df70ee6
commit b93a565c82
2 changed files with 20 additions and 7 deletions

View File

@ -34,7 +34,8 @@ class BomService:
subq.c.parent_id, subq.c.parent_id,
subq.c.version, subq.c.version,
subq.c.child_count, subq.c.child_count,
MaterialBase.name.label('parent_name') MaterialBase.name.label('parent_name'),
MaterialBase.spec_model.label('parent_spec')
).join(MaterialBase, subq.c.parent_id == MaterialBase.id) ).join(MaterialBase, subq.c.parent_id == MaterialBase.id)
results = query.all() results = query.all()
@ -42,6 +43,7 @@ class BomService:
'bom_no': row.bom_no, 'bom_no': row.bom_no,
'parent_id': row.parent_id, 'parent_id': row.parent_id,
'parent_name': row.parent_name, 'parent_name': row.parent_name,
'parent_spec': row.parent_spec or '',
'version': row.version, 'version': row.version,
'child_count': row.child_count 'child_count': row.child_count
} for row in results] } for row in results]
@ -54,7 +56,8 @@ class BomService:
""" """
rows = db.session.query( rows = db.session.query(
BomTable, BomTable,
MaterialBase.name.label('child_name') MaterialBase.name.label('child_name'),
MaterialBase.spec_model.label('child_spec')
).join( ).join(
MaterialBase, BomTable.child_id == MaterialBase.id MaterialBase, BomTable.child_id == MaterialBase.id
).filter( ).filter(
@ -66,14 +69,21 @@ class BomService:
first = rows[0] first = rows[0]
parent_id = first.BomTable.parent_id parent_id = first.BomTable.parent_id
parent_name = db.session.query(MaterialBase.name)\ # 获取父件的名称和规格
.filter(MaterialBase.id == parent_id).scalar() or '' parent_material = MaterialBase.query.filter(MaterialBase.id == parent_id).first()
if parent_material:
parent_name = parent_material.name
parent_spec = parent_material.spec_model or ''
else:
parent_name = ''
parent_spec = ''
children = [] children = []
for bom, child_name in rows: for bom, child_name, child_spec in rows:
children.append({ children.append({
'child_id': bom.child_id, 'child_id': bom.child_id,
'child_name': child_name, 'child_name': child_name,
'child_spec': child_spec or '',
'dosage': float(bom.dosage) if bom.dosage else 0.0, 'dosage': float(bom.dosage) if bom.dosage else 0.0,
'remark': bom.remark or '' 'remark': bom.remark or ''
}) })
@ -82,6 +92,7 @@ class BomService:
'bom_no': bom_no, 'bom_no': bom_no,
'parent_id': parent_id, 'parent_id': parent_id,
'parent_name': parent_name, 'parent_name': parent_name,
'parent_spec': parent_spec,
'version': first.BomTable.version, 'version': first.BomTable.version,
'children': children 'children': children
} }

View File

@ -13,6 +13,7 @@
<el-table v-loading="loading" :data="bomList" border style="width: 100%"> <el-table v-loading="loading" :data="bomList" border style="width: 100%">
<el-table-column prop="bom_no" label="BOM编号" min-width="180" /> <el-table-column prop="bom_no" label="BOM编号" min-width="180" />
<el-table-column prop="parent_name" label="父件名称" min-width="180" /> <el-table-column prop="parent_name" label="父件名称" min-width="180" />
<el-table-column prop="parent_spec" label="父件规格" min-width="180" />
<el-table-column prop="version" label="版本" width="100" /> <el-table-column prop="version" label="版本" width="100" />
<el-table-column prop="child_count" label="子件数量" width="100" /> <el-table-column prop="child_count" label="子件数量" width="100" />
<el-table-column label="操作" width="280" align="center" fixed="right"> <el-table-column label="操作" width="280" align="center" fixed="right">
@ -39,7 +40,7 @@
<el-option <el-option
v-for="item in materialOptions" v-for="item in materialOptions"
:key="item.id" :key="item.id"
:label="item.name" :label="`${item.name} (${item.spec})`"
:value="item.id" :value="item.id"
/> />
</el-select> </el-select>
@ -61,7 +62,7 @@
<el-option <el-option
v-for="item in materialOptions" v-for="item in materialOptions"
:key="item.id" :key="item.id"
:label="item.name" :label="`${item.name} (${item.spec})`"
:value="item.id" :value="item.id"
/> />
</el-select> </el-select>
@ -120,6 +121,7 @@ interface BomItem {
interface MaterialBase { interface MaterialBase {
id: number id: number
name: string name: string
spec: string
} }
interface ChildRow { interface ChildRow {