python-flask和Vue两种模式初模板
This commit is contained in:
@ -1,11 +1,34 @@
|
||||
from app.extensions import db
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
class MaterialBase(db.Model):
|
||||
__tablename__ = 'material_base'
|
||||
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
sku_code = db.Column(db.String(100), unique=True, nullable=False)
|
||||
name = db.Column(db.String(255), nullable=False)
|
||||
spec_model = db.Column(db.String(255))
|
||||
unit = db.Column(db.String(50))
|
||||
# 其他字段按需添加,入库时主要是为了外键关联
|
||||
# 核心字段
|
||||
sku_code = db.Column(db.String(100), unique=True, nullable=False) # 唯一编码
|
||||
name = db.Column(db.String(255), nullable=False) # 名称
|
||||
spec_model = db.Column(db.String(255)) # 规格型号
|
||||
unit = db.Column(db.String(50)) # 单位
|
||||
category = db.Column(db.String(100)) # 分类
|
||||
|
||||
# 审计字段 (自动记录时间)
|
||||
created_at = db.Column(db.DateTime, default=datetime.utcnow)
|
||||
updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
|
||||
# 关联关系 (让 StockBuy 可以反向找到 Material)
|
||||
# 这里的 dynamic 允许在 material.stock_buys 时进行进一步过滤
|
||||
stock_buys = db.relationship('StockBuy', back_populates='material', lazy='dynamic')
|
||||
|
||||
def to_dict(self):
|
||||
"""将对象转换为字典,方便接口返回"""
|
||||
return {
|
||||
'id': self.id,
|
||||
'sku_code': self.sku_code,
|
||||
'name': self.name,
|
||||
'spec_model': self.spec_model,
|
||||
'unit': self.unit,
|
||||
'category': self.category,
|
||||
'created_at': self.created_at.strftime('%Y-%m-%d %H:%M:%S') if self.created_at else None
|
||||
}
|
||||
@ -6,20 +6,51 @@ class StockBuy(db.Model):
|
||||
__tablename__ = 'stock_buy'
|
||||
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
|
||||
# 外键:必须关联一个 MaterialBase 的 ID
|
||||
material_id = db.Column(db.Integer, db.ForeignKey('material_base.id'), nullable=False)
|
||||
inbound_date = db.Column(db.DateTime, default=datetime.now)
|
||||
barcode = db.Column(db.String(100))
|
||||
batch_no = db.Column(db.String(100))
|
||||
|
||||
# 数量相关 (使用 Numeric 对应数据库的 NUMERIC)
|
||||
qty_inbound = db.Column(db.Numeric(19, 4), default=0)
|
||||
qty_current = db.Column(db.Numeric(19, 4), default=0)
|
||||
qty_available = db.Column(db.Numeric(19, 4), default=0)
|
||||
# 业务数据
|
||||
inbound_date = db.Column(db.DateTime, default=datetime.utcnow) # 入库时间
|
||||
batch_no = db.Column(db.String(100)) # 批次号
|
||||
warehouse_loc = db.Column(db.String(100)) # 库位
|
||||
supplier_name = db.Column(db.String(255)) # 供应商
|
||||
|
||||
price_unit = db.Column(db.Numeric(19, 4), default=0)
|
||||
price_total = db.Column(db.Numeric(19, 4), default=0)
|
||||
supplier_name = db.Column(db.String(255))
|
||||
warehouse_loc = db.Column(db.String(100))
|
||||
# 数量与状态
|
||||
qty_inbound = db.Column(db.Numeric(19, 4), default=0) # 初始入库量
|
||||
qty_current = db.Column(db.Numeric(19, 4), default=0) # 当前剩余量
|
||||
qty_available = db.Column(db.Numeric(19, 4), default=0) # 当前可用量
|
||||
status = db.Column(db.String(50), default='NORMAL')
|
||||
|
||||
# 建立关联,方便查询物料详情
|
||||
material = db.relationship('MaterialBase', backref='buy_stocks')
|
||||
# 财务数据
|
||||
price_unit = db.Column(db.Numeric(19, 4), default=0) # 单价
|
||||
price_total = db.Column(db.Numeric(19, 4), default=0) # 总价
|
||||
|
||||
# 建立与 MaterialBase 的双向关系
|
||||
material = db.relationship('MaterialBase', back_populates='stock_buys')
|
||||
|
||||
def to_dict(self):
|
||||
"""
|
||||
序列化方法:
|
||||
这里做了一个扁平化处理,把关联的 material 里的 name/sku 直接拿出来,
|
||||
方便前端表格直接显示,不用前端再去拼凑。
|
||||
"""
|
||||
return {
|
||||
'id': self.id,
|
||||
'material_id': self.material_id,
|
||||
# 从关联对象获取基础信息
|
||||
'sku_code': self.material.sku_code if self.material else None,
|
||||
'material_name': self.material.name if self.material else None,
|
||||
'spec_model': self.material.spec_model if self.material else None,
|
||||
'unit': self.material.unit if self.material else None,
|
||||
'category': self.material.category if self.material else None,
|
||||
|
||||
# 本表信息
|
||||
'inbound_date': self.inbound_date.strftime('%Y-%m-%d %H:%M:%S') if self.inbound_date else None,
|
||||
'batch_no': self.batch_no,
|
||||
'warehouse_loc': self.warehouse_loc,
|
||||
'supplier_name': self.supplier_name,
|
||||
'qty_inbound': float(self.qty_inbound) if self.qty_inbound else 0,
|
||||
'price_unit': float(self.price_unit) if self.price_unit else 0,
|
||||
'price_total': float(self.price_total) if self.price_total else 0,
|
||||
}
|
||||
Reference in New Issue
Block a user