From cd192624b912d433c6ee9d6cdc12ecc6b6e7ed70 Mon Sep 17 00:00:00 2001 From: DXC Date: Tue, 10 Mar 2026 17:33:14 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=BB=9F=E4=B8=80=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E7=94=9F=E6=88=90=E6=97=B6=E9=97=B4=E4=B8=BA=E5=8C=97=E4=BA=AC?= =?UTF-8?q?=E6=97=B6=E9=97=B4(UTC+8)=E5=B9=B6=E4=BC=98=E5=8C=96=E5=AE=A1?= =?UTF-8?q?=E8=AE=A1=E6=97=A5=E5=BF=97=E8=A1=A8=E6=A0=BC=E5=88=97=E5=B1=95?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inventory-backend/app/extensions.py | 6 ++++++ inventory-backend/app/models/audit.py | 4 ++-- inventory-backend/app/models/inbound/service.py | 6 +++--- inventory-backend/app/models/inbound/stocktake.py | 4 ++-- inventory-backend/app/models/outbound.py | 4 ++-- inventory-backend/app/models/system.py | 8 ++++---- inventory-backend/app/models/transaction.py | 6 +++--- inventory-web/src/views/system/AuditLog.vue | 8 ++++---- 8 files changed, 26 insertions(+), 20 deletions(-) diff --git a/inventory-backend/app/extensions.py b/inventory-backend/app/extensions.py index 4e71948..4ee0efe 100644 --- a/inventory-backend/app/extensions.py +++ b/inventory-backend/app/extensions.py @@ -2,6 +2,7 @@ from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate from flask_cors import CORS from flask_jwt_extended import JWTManager # 确保引入了 JWTManager +from datetime import datetime, timezone, timedelta # 1. 创建扩展实例(此时未绑定具体的 App) db = SQLAlchemy() @@ -10,6 +11,11 @@ cors = CORS() jwt = JWTManager() # 必须实例化 +def beijing_time(): + """获取北京时间 (UTC+8)""" + return datetime.now(timezone(timedelta(hours=8))) + + # 2. 定义初始化函数 (供工厂函数 create_app 调用) def init_extensions(app): """ diff --git a/inventory-backend/app/models/audit.py b/inventory-backend/app/models/audit.py index 6176542..b574f37 100644 --- a/inventory-backend/app/models/audit.py +++ b/inventory-backend/app/models/audit.py @@ -1,5 +1,5 @@ # inventory-backend/app/models/audit.py -from app.extensions import db +from app.extensions import db, beijing_time from datetime import datetime @@ -25,7 +25,7 @@ class AuditLog(db.Model): url = db.Column(db.String(500)) # 请求URL status_code = db.Column(db.Integer) # 响应状态码 error_message = db.Column(db.Text) # 错误信息(如有) - created_at = db.Column(db.DateTime, default=datetime.now, index=True) # 操作时间 + created_at = db.Column(db.DateTime, default=beijing_time, index=True) # 操作时间 def to_dict(self): return { diff --git a/inventory-backend/app/models/inbound/service.py b/inventory-backend/app/models/inbound/service.py index 79b54ba..d59d2bb 100644 --- a/inventory-backend/app/models/inbound/service.py +++ b/inventory-backend/app/models/inbound/service.py @@ -1,5 +1,5 @@ # inventory-backend/app/models/inbound/service.py -from app.extensions import db +from app.extensions import db, beijing_time from datetime import datetime @@ -35,8 +35,8 @@ class StockService(db.Model): status = db.Column(db.String(20), default='active') # 时间与系统字段 - created_at = db.Column(db.DateTime, default=datetime.now, nullable=False) - updated_at = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now) + created_at = db.Column(db.DateTime, default=beijing_time, nullable=False) + updated_at = db.Column(db.DateTime, default=beijing_time, onupdate=beijing_time) is_deleted = db.Column(db.Boolean, default=False) # ========================================================================== diff --git a/inventory-backend/app/models/inbound/stocktake.py b/inventory-backend/app/models/inbound/stocktake.py index feaf879..03c1864 100644 --- a/inventory-backend/app/models/inbound/stocktake.py +++ b/inventory-backend/app/models/inbound/stocktake.py @@ -1,4 +1,4 @@ -from app.extensions import db # .material -> .base refactor checked +from app.extensions import db, beijing_time # .material -> .base refactor checked from datetime import datetime class StocktakeDraft(db.Model): @@ -9,7 +9,7 @@ class StocktakeDraft(db.Model): 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) + scan_time = db.Column(db.DateTime, default=beijing_time) def to_dict(self): return { diff --git a/inventory-backend/app/models/outbound.py b/inventory-backend/app/models/outbound.py index f9828a7..018d6ff 100644 --- a/inventory-backend/app/models/outbound.py +++ b/inventory-backend/app/models/outbound.py @@ -1,4 +1,4 @@ -from app.extensions import db +from app.extensions import db, beijing_time from datetime import datetime @@ -25,7 +25,7 @@ class TransOutbound(db.Model): # 签字与追溯 consumer_name = db.Column(db.String(100)) # 领用人/客户 signature_path = db.Column(db.Text) # 电子签名图片路径 - outbound_time = db.Column(db.DateTime, default=datetime.now) + outbound_time = db.Column(db.DateTime, default=beijing_time) operator_name = db.Column(db.String(100)) # 操作员 remark = db.Column(db.Text) diff --git a/inventory-backend/app/models/system.py b/inventory-backend/app/models/system.py index 3daa395..d1901e8 100644 --- a/inventory-backend/app/models/system.py +++ b/inventory-backend/app/models/system.py @@ -1,5 +1,5 @@ # inventory-backend/app/models/system.py -from app.extensions import db +from app.extensions import db, beijing_time from werkzeug.security import generate_password_hash, check_password_hash from datetime import datetime @@ -22,7 +22,7 @@ class SysUser(db.Model): role = db.Column(db.String(50)) status = db.Column(db.String(20), default='active') password_hash = db.Column(db.Text) - created_at = db.Column(db.DateTime, default=datetime.now) + created_at = db.Column(db.DateTime, default=beijing_time) def set_password(self, password): """生成加密密码""" @@ -76,7 +76,7 @@ class SysLog(db.Model): __tablename__ = 'sys_log' id = db.Column(db.Integer, primary_key=True) - op_time = db.Column(db.DateTime, default=datetime.now) + op_time = db.Column(db.DateTime, default=beijing_time) op_user_name = db.Column(db.String(100)) op_user_id = db.Column(db.String(50)) module_name = db.Column(db.String(100)) @@ -167,7 +167,7 @@ class SysWarehouseLocation(db.Model): full_path = db.Column(db.String(500)) # 完整路径,如 "A区/货架1/第3层" level = db.Column(db.Integer, default=0) # 层级深度,顶级为0 is_enabled = db.Column(db.Boolean, default=True) - created_at = db.Column(db.DateTime, default=datetime.now) + created_at = db.Column(db.DateTime, default=beijing_time) # 注意:数据库表中没有 updated_at 字段,不要添加! # 自关联 - 使用 backref 定义父节点的反向引用 diff --git a/inventory-backend/app/models/transaction.py b/inventory-backend/app/models/transaction.py index 32393fd..8bce544 100644 --- a/inventory-backend/app/models/transaction.py +++ b/inventory-backend/app/models/transaction.py @@ -1,4 +1,4 @@ -from app.extensions import db +from app.extensions import db, beijing_time from datetime import datetime from sqlalchemy import func @@ -14,7 +14,7 @@ class TransBorrow(db.Model): barcode = db.Column(db.String(100)) quantity = db.Column(db.Numeric(19, 4)) borrower_name = db.Column(db.String(100)) - borrow_time = db.Column(db.DateTime, default=datetime.now) + borrow_time = db.Column(db.DateTime, default=beijing_time) borrow_signature = db.Column(db.Text) expected_return_time = db.Column(db.DateTime) is_returned = db.Column(db.Boolean, default=False) @@ -110,7 +110,7 @@ class TransScrap(db.Model): quantity = db.Column(db.Numeric(19, 4)) reason = db.Column(db.Text) operator_name = db.Column(db.String(100)) - operation_time = db.Column(db.DateTime, default=datetime.now) + operation_time = db.Column(db.DateTime, default=beijing_time) approver_name = db.Column(db.String(100)) approval_status = db.Column(db.String(20), default='pending') cost_at_scrap = db.Column(db.Numeric(19, 4)) diff --git a/inventory-web/src/views/system/AuditLog.vue b/inventory-web/src/views/system/AuditLog.vue index 3b43eca..49812a5 100644 --- a/inventory-web/src/views/system/AuditLog.vue +++ b/inventory-web/src/views/system/AuditLog.vue @@ -53,7 +53,7 @@ {{ scope.row.module }} - + @@ -63,10 +63,10 @@