打印机 IP: 192.168.9.205
diff --git a/inventory-backend/app/api/v1/inbound/stock.py b/inventory-backend/app/api/v1/inbound/stock.py
index a1141ff..777b2c0 100644
--- a/inventory-backend/app/api/v1/inbound/stock.py
+++ b/inventory-backend/app/api/v1/inbound/stock.py
@@ -1,8 +1,11 @@
from flask import Blueprint, jsonify, request
from app.extensions import db
+# ★★★ 修复点:必须引入 datetime,否则下方更新时间时会报错 500 ★★★
+from datetime import datetime
+
# 导入模型
from app.models.inbound.buy import StockBuy
-from app.models.inbound.stocktake import StocktakeDraft # 新增
+from app.models.inbound.stocktake import StocktakeDraft
# 尝试导入半成品和成品
try:
@@ -23,10 +26,10 @@ bp = Blueprint('stock_ops', __name__)
@bp.route('/all', methods=['GET'])
def get_all_stock():
"""
- 获取所有库存 > 0 的物品(无论状态是 在库 还是 部分出库)
+ 获取所有库存 > 0 的物品
"""
try:
- # 1. 采购件 (核心修改:只看库存数量 > 0)
+ # 1. 采购件
materials = []
if StockBuy:
materials = StockBuy.query.filter(StockBuy.stock_quantity > 0).all()
@@ -57,7 +60,7 @@ def get_all_stock():
return jsonify({"message": f"查询库存失败: {str(e)}"}), 500
-# --- 草稿箱接口 (断点续传) ---
+# --- 草稿箱接口 ---
@bp.route('/draft/list', methods=['GET'])
def get_drafts():
@@ -69,24 +72,36 @@ def get_drafts():
@bp.route('/draft/add', methods=['POST'])
def add_draft():
- """扫码同步"""
- data = request.json
- user_id = data.get('user_id', 'admin')
- uuid = data.get('uuid')
+ """扫码同步 (支持更新数量)"""
+ try:
+ data = request.json
+ user_id = data.get('user_id', 'admin')
+ uuid = data.get('uuid')
+ quantity = data.get('quantity', 1)
+
+ # 查找是否已存在
+ draft = StocktakeDraft.query.filter_by(user_id=user_id, uuid=uuid).first()
+
+ if draft:
+ # 如果已存在,更新数量和时间
+ draft.quantity = quantity
+ # ★ 修复点:这里需要 datetime 对象
+ draft.scan_time = datetime.now()
+ else:
+ # 如果不存在,创建新的
+ draft = StocktakeDraft(user_id=user_id, uuid=uuid, quantity=quantity)
+ db.session.add(draft)
- # 避免重复插入
- exists = StocktakeDraft.query.filter_by(user_id=user_id, uuid=uuid).first()
- if not exists:
- draft = StocktakeDraft(user_id=user_id, uuid=uuid)
- db.session.add(draft)
db.session.commit()
-
- return jsonify({"message": "Saved"}), 200
+ return jsonify({"message": "Saved"}), 200
+ except Exception as e:
+ print(f"Add Draft Error: {e}")
+ return jsonify({"message": str(e)}), 500
@bp.route('/draft/clear', methods=['POST'])
def clear_draft():
- """清空进度 (开始新盘点或结束后)"""
+ """清空进度"""
data = request.json
user_id = data.get('user_id', 'admin')
@@ -95,7 +110,7 @@ def clear_draft():
return jsonify({"message": "Cleared"}), 200
-# --- 打印接口 (保持不变) ---
+# --- 打印接口 ---
@bp.route('/print/selection', methods=['POST'])
def print_selection():
diff --git a/inventory-backend/app/models/inbound/stocktake.py b/inventory-backend/app/models/inbound/stocktake.py
index 8433f5e..a81e0d4 100644
--- a/inventory-backend/app/models/inbound/stocktake.py
+++ b/inventory-backend/app/models/inbound/stocktake.py
@@ -2,12 +2,13 @@ from app.extensions import db
from datetime import datetime
class StocktakeDraft(db.Model):
- """盘点草稿表"""
__tablename__ = 'stocktake_draft'
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.String(100), default='admin')
uuid = db.Column(db.String(100))
+ # ★ 新增 quantity 字段
+ quantity = db.Column(db.Numeric(19, 4), default=1)
scan_time = db.Column(db.DateTime, default=datetime.now)
def to_dict(self):
@@ -15,5 +16,7 @@ class StocktakeDraft(db.Model):
'id': self.id,
'user_id': self.user_id,
'uuid': self.uuid,
+ # ★ 返回 quantity
+ 'quantity': float(self.quantity or 1),
'scan_time': self.scan_time.strftime('%Y-%m-%d %H:%M:%S')
}
\ No newline at end of file
diff --git a/inventory-web/package.json b/inventory-web/package.json
index 6004a42..ab74280 100644
--- a/inventory-web/package.json
+++ b/inventory-web/package.json
@@ -18,7 +18,8 @@
"pinia": "^3.0.4",
"sass": "^1.97.3",
"vue": "^3.5.24",
- "vue-router": "^4.6.4"
+ "vue-router": "^4.6.4",
+ "xlsx": "^0.18.5"
},
"devDependencies": {
"@types/node": "^24.10.1",
diff --git a/inventory-web/src/views/stock/stocktake/index.vue b/inventory-web/src/views/stock/stocktake/index.vue
index 64e29e1..6d656fb 100644
--- a/inventory-web/src/views/stock/stocktake/index.vue
+++ b/inventory-web/src/views/stock/stocktake/index.vue
@@ -3,12 +3,14 @@
请确保已连接扫描枪或摄像头 单件自动确认,多件弹窗录入库存盘点系统
- 库存盲盘系统
+
正在查看清单列表
摄像头已暂停
操作中...
点击返回扫描
打印机 IP: 192.168.9.205
单位: {{ currentItem.unit || '个' }}
+