fix: 统一系统生成时间为北京时间(UTC+8)并优化审计日志表格列展示
This commit is contained in:
@ -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):
|
||||
"""
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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)
|
||||
|
||||
# ==========================================================================
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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 定义父节点的反向引用
|
||||
|
||||
@ -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))
|
||||
|
||||
@ -53,7 +53,7 @@
|
||||
<el-tag>{{ scope.row.module }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="action" label="操作" width="100">
|
||||
<el-table-column prop="action" label="操作类型" width="100">
|
||||
<template #default="scope">
|
||||
<el-tag :type="getActionType(scope.row.action)">{{ scope.row.action }}</el-tag>
|
||||
</template>
|
||||
@ -63,10 +63,10 @@
|
||||
<el-table-column prop="created_at" label="操作时间" width="170" />
|
||||
<el-table-column label="操作" width="120" fixed="right">
|
||||
<template #default="scope">
|
||||
<el-button v-if="scope.row.details" link type="primary" size="small" @click="handleViewDetails(scope.row)">
|
||||
详情
|
||||
<el-button v-if="scope.row.details && Object.keys(scope.row.details).length > 0" link type="primary" size="small" @click="handleViewDetails(scope.row)">
|
||||
查看详情
|
||||
</el-button>
|
||||
<span v-else class="text-gray">-</span>
|
||||
<span v-else style="color: #909399; font-size: 12px;">无变更明细</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
Reference in New Issue
Block a user