feat: 平台卡片「关联N个资产」点击跳转资产页并按平台筛选(后端/api/assets新增provider参数,资产页可清除筛选标签)
This commit is contained in:
@@ -7,6 +7,7 @@ from datetime import date, datetime, timedelta, timezone
|
||||
from typing import List, Optional
|
||||
|
||||
from fastapi import HTTPException, status
|
||||
from sqlalchemy import or_
|
||||
from sqlmodel import Session, select
|
||||
|
||||
from app.core import crypto
|
||||
@@ -358,6 +359,7 @@ def list_assets(
|
||||
asset_status: Optional[AssetStatus] = None,
|
||||
is_archived: Optional[bool] = None,
|
||||
q: Optional[str] = None,
|
||||
provider: Optional[str] = None,
|
||||
sort: str = "expiry_date",
|
||||
order: str = "asc",
|
||||
) -> List[AssetRead]:
|
||||
@@ -369,6 +371,12 @@ def list_assets(
|
||||
stmt = stmt.where(Asset.status == asset_status)
|
||||
if is_archived is not None:
|
||||
stmt = stmt.where(Asset.is_archived == is_archived)
|
||||
if provider:
|
||||
# 兼容两种关联方式:provider slug 文本或 provider_id 外键
|
||||
conds = [Asset.provider == provider]
|
||||
if provider.isdigit():
|
||||
conds.append(Asset.provider_id == int(provider))
|
||||
stmt = stmt.where(or_(*conds))
|
||||
if q:
|
||||
pattern = f"%{q}%"
|
||||
stmt = stmt.where(Asset.name.like(pattern) | Asset.provider.like(pattern))
|
||||
|
||||
Reference in New Issue
Block a user