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 }}
-
+
{{ scope.row.action }}
@@ -63,10 +63,10 @@
-
- 详情
+
+ 查看详情
- -
+ 无变更明细