This commit is contained in:
2026-06-10 11:21:17 +08:00
parent fdbde938f9
commit c39c0b547f
43 changed files with 1144 additions and 1243 deletions
@@ -175,139 +175,139 @@ onMounted(() => { loadMaterials() })
<template>
<div>
<div style="margin-bottom: 12px; display: flex; gap: 8px;">
<el-button type="primary" @click="openCreateMaterial">新增物料</el-button>
<el-button type="success" @click="openRestockModal">物料补货</el-button>
<t-button type="primary" @click="openCreateMaterial">新增物料</t-button>
<t-button type="success" @click="openRestockModal">物料补货</t-button>
</div>
<el-table :data="state.materials" v-loading="state.loading" stripe>
<el-table-column prop="sku" label="SKU" />
<el-table-column prop="name" label="名称" />
<el-table-column prop="category" label="分类">
<t-table :data="state.materials" :loading="state.loading" stripe>
<t-table-column prop="sku" label="SKU" />
<t-table-column prop="name" label="名称" />
<t-table-column prop="category" label="分类">
<template #default="{ row }">{{ row.category || '-' }}</template>
</el-table-column>
<el-table-column prop="unit" label="单位" />
<el-table-column label="成本价">
</t-table-column>
<t-table-column prop="unit" label="单位" />
<t-table-column label="成本价">
<template #default="{ row }">{{ formatCurrency(row.cost_price) }}</template>
</el-table-column>
<el-table-column prop="min_stock" label="最低库存">
</t-table-column>
<t-table-column prop="min_stock" label="最低库存">
<template #default="{ row }">{{ row.min_stock ?? '-' }}</template>
</el-table-column>
<el-table-column label="操作" width="180">
</t-table-column>
<t-table-column label="操作" width="180">
<template #default="{ row }">
<el-button type="primary" size="small" @click="editMaterial(row)">编辑</el-button>
<el-button type="danger" size="small" @click="deleteMaterial(row.id)">删除</el-button>
<t-button type="primary" size="small" @click="editMaterial(row)">编辑</t-button>
<t-button type="danger" size="small" @click="deleteMaterial(row.id)">删除</t-button>
</template>
</el-table-column>
</el-table>
<el-empty v-if="!state.loading && state.materials.length === 0" description="暂无物料数据" />
</t-table-column>
</t-table>
<t-empty v-if="!state.loading && state.materials.length === 0" description="暂无物料数据" />
<el-dialog
v-model="showModal"
<t-dialog
v-model:visible="showModal"
:title="(editingItem ? '编辑' : '新增') + '物料'"
width="560px"
@closed="closeModal"
>
<el-form label-width="100px">
<el-form-item label="类型">
<el-input model-value="物料(纳入库存)" disabled />
</el-form-item>
<el-form-item label="SKU" required>
<el-input v-model="form.sku" placeholder="产品编码" />
</el-form-item>
<el-form-item label="名称" required>
<el-input v-model="form.name" placeholder="产品名称" />
</el-form-item>
<el-form-item label="分类">
<el-input v-model="form.category" placeholder="产品分类" />
</el-form-item>
<el-form-item label="单位">
<el-input v-model="form.unit" placeholder="kg" />
</el-form-item>
<el-form-item label="成本价">
<el-input-number v-model="form.cost_price" :precision="2" :min="0" :step="0.01" style="width:100%" />
</el-form-item>
<el-form-item label="最低库存">
<el-input-number v-model="form.min_stock" :min="0" style="width:100%" />
</el-form-item>
<el-form-item label="最高库存">
<el-input-number v-model="form.max_stock" :min="0" style="width:100%" />
</el-form-item>
</el-form>
<t-form label-width="100px">
<t-form-item label="类型">
<t-input model-value="物料(纳入库存)" disabled />
</t-form-item>
<t-form-item label="SKU" required>
<t-input v-model="form.sku" placeholder="产品编码" />
</t-form-item>
<t-form-item label="名称" required>
<t-input v-model="form.name" placeholder="产品名称" />
</t-form-item>
<t-form-item label="分类">
<t-input v-model="form.category" placeholder="产品分类" />
</t-form-item>
<t-form-item label="单位">
<t-input v-model="form.unit" placeholder="kg" />
</t-form-item>
<t-form-item label="成本价">
<t-input-number v-model="form.cost_price" :precision="2" :min="0" :step="0.01" style="width:100%" />
</t-form-item>
<t-form-item label="最低库存">
<t-input-number v-model="form.min_stock" :min="0" style="width:100%" />
</t-form-item>
<t-form-item label="最高库存">
<t-input-number v-model="form.max_stock" :min="0" style="width:100%" />
</t-form-item>
</t-form>
<template #footer>
<el-button @click="showModal = false">取消</el-button>
<el-button type="primary" @click="saveProduct">保存</el-button>
<t-button @click="showModal = false">取消</t-button>
<t-button type="primary" @click="saveProduct">保存</t-button>
</template>
</el-dialog>
</t-dialog>
<el-dialog
v-model="showRestockModal"
<t-dialog
v-model:visible="showRestockModal"
title="物料补货"
width="900px"
@closed="closeRestockModal"
>
<el-form label-width="100px" style="margin-bottom: 16px;">
<el-form-item label="供应商">
<el-select v-model="restockSupplierId" placeholder="请选择供应商" style="width:100%">
<el-option
<t-form label-width="100px" style="margin-bottom: 16px;">
<t-form-item label="供应商">
<t-select v-model="restockSupplierId" placeholder="请选择供应商" style="width:100%">
<t-option
v-for="supplier in state.suppliers"
:key="supplier.id"
:label="supplier.name"
:value="supplier.id"
/>
</el-select>
</el-form-item>
</el-form>
</t-select>
</t-form-item>
</t-form>
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px;">
<span style="font-weight: 600;">补货物料明细</span>
<el-button type="primary" size="small" @click="addRestockItem">+ 添加物料</el-button>
<t-button type="primary" size="small" @click="addRestockItem">+ 添加物料</t-button>
</div>
<el-table :data="restockItems" border size="small">
<el-table-column label="物料" min-width="200">
<t-table :data="restockItems" border size="small">
<t-table-column label="物料" min-width="200">
<template #default="{ row: line }">
<el-select v-model="line.material_id" placeholder="请选择物料" style="width:100%">
<el-option
<t-select v-model="line.material_id" placeholder="请选择物料" style="width:100%">
<t-option
v-for="material in state.materials"
:key="material.id"
:label="`${material.sku} - ${material.name}`"
:value="material.id"
/>
</el-select>
</t-select>
</template>
</el-table-column>
<el-table-column label="数量" width="120">
</t-table-column>
<t-table-column label="数量" width="120">
<template #default="{ row: line }">
<el-input-number v-model="line.quantity" :min="1" size="small" style="width:100%" />
<t-input-number v-model="line.quantity" :min="1" size="small" style="width:100%" />
</template>
</el-table-column>
<el-table-column label="单价" width="120">
</t-table-column>
<t-table-column label="单价" width="120">
<template #default="{ row: line }">
<el-input-number v-model="line.unit_price" :min="0" :precision="2" :step="0.01" size="small" style="width:100%" />
<t-input-number v-model="line.unit_price" :min="0" :precision="2" :step="0.01" size="small" style="width:100%" />
</template>
</el-table-column>
<el-table-column label="总价" width="120">
</t-table-column>
<t-table-column label="总价" width="120">
<template #default="{ row: line }">
{{ formatCurrency((line.unit_price || 0) * (line.quantity || 0)) }}
</template>
</el-table-column>
<el-table-column label="备注" width="150">
</t-table-column>
<t-table-column label="备注" width="150">
<template #default="{ row: line }">
<el-input v-model="line.remark" size="small" placeholder="备注" />
<t-input v-model="line.remark" size="small" placeholder="备注" />
</template>
</el-table-column>
<el-table-column label="操作" width="80">
</t-table-column>
<t-table-column label="操作" width="80">
<template #default="{ $index }">
<el-button type="danger" size="small" @click="removeRestockItem($index)">删除</el-button>
<t-button type="danger" size="small" @click="removeRestockItem($index)">删除</t-button>
</template>
</el-table-column>
</el-table>
</t-table-column>
</t-table>
<div style="text-align: right; margin-top: 8px; font-weight: 600;">
补货总金额:{{ formatCurrency(restockTotalAmount) }}
</div>
<template #footer>
<el-button @click="showRestockModal = false">取消</el-button>
<el-button type="primary" @click="saveRestock">创建采购订单</el-button>
<t-button @click="showRestockModal = false">取消</t-button>
<t-button type="primary" @click="saveRestock">创建采购订单</t-button>
</template>
</el-dialog>
</t-dialog>
</div>
</template>