From df7ff7af235da135801b498d3e4b5aa10d2264d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=96=B9=E6=88=90?= Date: Wed, 26 Nov 2025 17:05:22 +0800 Subject: [PATCH] =?UTF-8?q?refactor(valuation):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E8=AF=84=E4=BC=B0=E7=8A=B6=E6=80=81=E9=80=BB=E8=BE=91=E5=B9=B6?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=88=9B=E5=BB=BA=E6=97=B6=E9=97=B4=E7=AD=9B?= =?UTF-8?q?=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 统一评估状态为 pending/completed 并兼容旧状态 添加创建时间范围筛选条件 移除发票状态中的 rejected 选项 更新前端路由配置 --- app/api/v1/app_valuations/app_valuations.py | 2 +- app/api/v1/invoice/invoice.py | 2 +- app/api/v1/valuations/valuations.py | 4 ++++ app/controllers/user_valuation.py | 2 +- app/controllers/valuation.py | 16 ++++++++++++---- app/models/invoice.py | 2 +- app/models/valuation.py | 2 +- app/schemas/invoice.py | 2 +- app/schemas/valuation.py | 4 +++- deploy/web.conf | 13 +++++-------- 10 files changed, 30 insertions(+), 19 deletions(-) diff --git a/app/api/v1/app_valuations/app_valuations.py b/app/api/v1/app_valuations/app_valuations.py index 1288593..d72fb9b 100644 --- a/app/api/v1/app_valuations/app_valuations.py +++ b/app/api/v1/app_valuations/app_valuations.py @@ -203,7 +203,7 @@ async def _perform_valuation_calculation(user_id: int, data: UserValuationCreate }, 'market_data': list(input_data.get('market_data', {}).keys()), }, - status='success' + status='pending' ) result = await valuation_controller.update(valuation_id, update_data) logger.info( diff --git a/app/api/v1/invoice/invoice.py b/app/api/v1/invoice/invoice.py index 0dc9603..5e17586 100644 --- a/app/api/v1/invoice/invoice.py +++ b/app/api/v1/invoice/invoice.py @@ -106,7 +106,7 @@ async def delete_invoice(id: int = Query(...)): @invoice_router.post("/update-status", summary="更新发票状态", response_model=BasicResponse[InvoiceOut], dependencies=[DependAuth, DependPermission]) async def update_invoice_status(data: UpdateStatus): """ - 更新发票状态(pending|invoiced|rejected|refunded) + 更新发票状态(pending|invoiced|refunded) """ out = await invoice_controller.update_status(data) return Success(data=out or {}, msg="更新成功" if out else "未找到") diff --git a/app/api/v1/valuations/valuations.py b/app/api/v1/valuations/valuations.py index 75c5422..7429bf2 100644 --- a/app/api/v1/valuations/valuations.py +++ b/app/api/v1/valuations/valuations.py @@ -92,6 +92,8 @@ async def get_valuations( submitted_end: Optional[str] = Query(None, description="提交时间结束(毫秒或ISO)"), audited_start: Optional[str] = Query(None, description="审核时间开始(证书修改时间,毫秒或ISO)"), audited_end: Optional[str] = Query(None, description="审核时间结束(证书修改时间,毫秒或ISO)"), + create_start: Optional[str] = Query(None, description="创建时间开始(毫秒或ISO)"), + create_end: Optional[str] = Query(None, description="创建时间结束(毫秒或ISO)"), page: int = Query(1, ge=1, description="页码"), size: int = Query(10, ge=1, le=100, description="每页数量") ): @@ -108,6 +110,8 @@ async def get_valuations( submitted_end=submitted_end, audited_start=audited_start, audited_end=audited_end, + create_start=create_start, + create_end=create_end, page=page, size=size ) diff --git a/app/controllers/user_valuation.py b/app/controllers/user_valuation.py index 343b88c..cca6375 100644 --- a/app/controllers/user_valuation.py +++ b/app/controllers/user_valuation.py @@ -22,7 +22,7 @@ class UserValuationController: """用户创建估值评估""" valuation_data = data.model_dump() valuation_data['user_id'] = user_id - valuation_data['status'] = "success" # 根据计算结果显示设置状态 + valuation_data['status'] = status # 添加计算结果到数据库 if calculation_result: diff --git a/app/controllers/valuation.py b/app/controllers/valuation.py index 545f77c..02dda57 100644 --- a/app/controllers/valuation.py +++ b/app/controllers/valuation.py @@ -159,9 +159,17 @@ class ValuationController: if query.is_active is not None: queryset = queryset.filter(is_active=query.is_active) - # 添加状态筛选 + # 添加状态筛选(支持 completed 聚合以及旧值兼容) if hasattr(query, 'status') and query.status: - queryset = queryset.filter(status=query.status) + s = query.status + if s == 'completed': + queryset = queryset.filter(status__in=['success']) + elif s == 'approved': + queryset = queryset.filter(status='success') + elif s == 'rejected': + queryset = queryset.filter(status='fail') + else: + queryset = queryset.filter(status=s) if getattr(query, 'phone', None): queryset = queryset.filter(user__phone__icontains=query.phone) @@ -180,8 +188,8 @@ class ValuationController: except Exception: return None - s_dt = _parse_time(getattr(query, 'submitted_start', None)) - e_dt = _parse_time(getattr(query, 'submitted_end', None)) + s_dt = _parse_time(getattr(query, 'submitted_start', None) or getattr(query, 'create_start', None)) + e_dt = _parse_time(getattr(query, 'submitted_end', None) or getattr(query, 'create_end', None)) if s_dt: queryset = queryset.filter(created_at__gte=s_dt) if e_dt: diff --git a/app/models/invoice.py b/app/models/invoice.py index 845abde..e0243c3 100644 --- a/app/models/invoice.py +++ b/app/models/invoice.py @@ -30,7 +30,7 @@ class Invoice(BaseModel, TimestampMixin): register_phone = fields.CharField(max_length=32, description="注册电话") bank_name = fields.CharField(max_length=128, description="开户银行") bank_account = fields.CharField(max_length=64, description="银行账号") - status = fields.CharField(max_length=16, description="状态: pending|invoiced|rejected|refunded", index=True, default="pending") + status = fields.CharField(max_length=16, description="状态: pending|invoiced|refunded", index=True, default="pending") app_user_id = fields.IntField(null=True, description="App用户ID", index=True) header = fields.ForeignKeyField("models.InvoiceHeader", related_name="invoices", null=True, description="抬头关联") wechat = fields.CharField(max_length=64, null=True, description="微信号", index=True) diff --git a/app/models/valuation.py b/app/models/valuation.py index f3f355e..3c4d4e7 100644 --- a/app/models/valuation.py +++ b/app/models/valuation.py @@ -82,7 +82,7 @@ class ValuationAssessment(Model): # 系统字段 user = fields.ForeignKeyField("models.AppUser", related_name="valuations", description="提交用户") - status = fields.CharField(max_length=20, default="success", description="评估状态: pending(待审核), success(已通过), fail(已拒绝)") + status = fields.CharField(max_length=20, default="pending", description="评估状态: pending(待审核), approved(已完成)") admin_notes = fields.TextField(null=True, description="管理员备注") created_at = fields.DatetimeField(auto_now_add=True, description="创建时间") updated_at = fields.DatetimeField(auto_now=True, description="更新时间") diff --git a/app/schemas/invoice.py b/app/schemas/invoice.py index 31cc2d4..9e6c3d9 100644 --- a/app/schemas/invoice.py +++ b/app/schemas/invoice.py @@ -97,7 +97,7 @@ class InvoiceList(BaseModel): class UpdateStatus(BaseModel): id: int - status: str = Field(..., pattern=r"^(pending|invoiced|rejected|refunded)$") + status: str = Field(..., pattern=r"^(pending|invoiced|refunded)$") class UpdateType(BaseModel): diff --git a/app/schemas/valuation.py b/app/schemas/valuation.py index fd3b33b..0f7148b 100644 --- a/app/schemas/valuation.py +++ b/app/schemas/valuation.py @@ -325,11 +325,13 @@ class ValuationAssessmentQuery(BaseModel): institution: Optional[str] = Field(None, description="所属机构") industry: Optional[str] = Field(None, description="所属行业") heritage_level: Optional[str] = Field(None, description="非遗等级") - status: Optional[str] = Field(None, description="评估状态: pending(待审核), approved(已通过), rejected(已拒绝)") + status: Optional[str] = Field(None, description="评估状态: pending(待审核), completed(已完成)") is_active: Optional[bool] = Field(None, description="是否激活") phone: Optional[str] = Field(None, description="手机号模糊查询") submitted_start: Optional[str] = Field(None, description="提交时间开始(毫秒时间戳或ISO字符串)") submitted_end: Optional[str] = Field(None, description="提交时间结束(毫秒时间戳或ISO字符串)") + create_start: Optional[str] = Field(None, description="创建时间开始(毫秒时间戳或ISO字符串)") + create_end: Optional[str] = Field(None, description="创建时间结束(毫秒时间戳或ISO字符串)") audited_start: Optional[str] = Field(None, description="审核时间开始(证书修改时间,毫秒时间戳或ISO字符串)") audited_end: Optional[str] = Field(None, description="审核时间结束(证书修改时间,毫秒时间戳或ISO字符串)") page: int = Field(1, ge=1, description="页码") diff --git a/deploy/web.conf b/deploy/web.conf index d0fb9e4..f488bba 100644 --- a/deploy/web.conf +++ b/deploy/web.conf @@ -21,14 +21,11 @@ server { index index.html index.htm; try_files $uri /index.html; } - # PC 前端(/pc/ 前缀) - location = /pc { - return 302 /pc/; - } + location ^~ /pc/ { - alias /opt/vue-fastapi-admin/web1/dist/; - index index.html; - try_files $uri $uri/ /index.html; + root /opt/vue-fastapi-admin/web1/dist; + index index.html index.htm; + try_files $uri /index.html; } location ^~ /api/ { proxy_pass http://127.0.0.1:9999; @@ -36,4 +33,4 @@ server { proxy_set_header X-Real-IP $remote_addr; } -} \ No newline at end of file +}