fix: 类型专区返回未上架项;后台账号含集团与封禁

This commit is contained in:
XingQue committed 2026-08-10 09:53:37 +08:00
1 parent 727d78ef4d
commit a3e4b9c32d
3 files changed
+41 -17

No files matched your search

+2 -3
View File
@@ -254,14 +254,13 @@ class GetProductTypeZoneView(APIView):
}
if club_scoped:
# 具体俱乐部:仅本俱乐部已上架类型(与抢单端一致)
admin_payload = build_club_leixing_admin_list(request)
# 具体俱乐部:已上架+未上架全部返回,前端展示下架/上架/换图
admin_payload = build_club_leixing_admin_list(request, include_disabled=True)
type_list = []
for item in (admin_payload.get('list') or []):
type_list.append({
**item,
'product_count': zone_count_map.get(item['id'], 0),
'club_enabled': True,
})
else:
type_list = []
+23 -7
View File
@@ -57,7 +57,9 @@ def filter_kefu_users_by_admin_scope(qs, request):
"""
后台用户列表:按任职俱乐部过滤,而非仅 User.ClubID。
同一账号有多俱乐部任职时,在任一已分配俱乐部视图下均可见。
含:本店任职、本店功能角色、集团级任职、白名单超管;封禁账号也返回。
"""
from jituan.constants import SUPER_ADMIN_PHONES
from jituan.models import AdminAssignment
scope = resolve_club_scope(request)
@@ -67,14 +69,28 @@ def filter_kefu_users_by_admin_scope(qs, request):
assigned_uids = list(
AdminAssignment.query.filter(status=1, club_id=club_id).values_list('yonghuid', flat=True)
)
group_uids = list(
AdminAssignment.query.filter(status=1)
.filter(Q(club_id__isnull=True) | Q(club_id=''))
.values_list('yonghuid', flat=True)
)
role_uuids = list(
Role.objects.filter(ClubID=club_id).values_list('RoleUUID', flat=True)
)
role_user_uuids = list(
UserRole.objects.filter(RoleUUID__in=role_uuids).values_list('UserUUID', flat=True)
) if role_uuids else []
q = (
Q(UserUID__in=assigned_uids)
| Q(UserUID__in=group_uids)
| Q(UserUUID__in=role_user_uuids)
| Q(Phone__in=list(SUPER_ADMIN_PHONES))
| Q(ClubID=club_id)
)
if club_id == CLUB_ID_DEFAULT:
return qs.filter(
Q(UserUID__in=assigned_uids)
| Q(ClubID=club_id)
| Q(ClubID__isnull=True)
| Q(ClubID='')
)
return qs.filter(Q(UserUID__in=assigned_uids) | Q(ClubID=club_id))
q = q | Q(ClubID__isnull=True) | Q(ClubID='')
return qs.filter(q)
def filter_kefu_users_qs(qs, request):
+16 -7
View File
@@ -81,7 +81,12 @@ def build_club_leixing_list_for_api(club_id):
return rows
def build_club_leixing_admin_list(request):
def build_club_leixing_admin_list(request, include_disabled=False):
"""
后台类型列表。
include_disabled=False:仅已上架(小程序配置页)。
include_disabled=True:已上架+未上架全部返回并带 club_enabled(类型专区页)。
"""
if club_read_blocked(request):
return {
'club_id': resolve_club_id_from_request(request),
@@ -91,18 +96,22 @@ def build_club_leixing_admin_list(request):
}
club_id = resolve_club_id_from_request(request)
cfg_map = _config_map(club_id)
enabled = []
rows = []
for lx in ShangpinLeixing.query.exclude(shenhezhuangtai=2).order_by('-paixu', 'id'):
cfg = cfg_map.get(lx.id)
if not _is_visible(club_id, lx.id, cfg):
enabled = bool(_is_visible(club_id, lx.id, cfg))
if not include_disabled and not enabled:
continue
item = build_leixing_item(lx, cfg)
item['club_enabled'] = True
enabled.append(item)
enabled.sort(key=lambda x: (-int(x['paixu'] or 0), x['id']))
item['club_enabled'] = enabled
rows.append(item)
if include_disabled:
rows.sort(key=lambda x: (0 if x.get('club_enabled') else 1, -int(x.get('paixu') or 0), x['id']))
else:
rows.sort(key=lambda x: (-int(x.get('paixu') or 0), x['id']))
return {
'club_id': club_id,
'list': enabled,
'list': rows,
'scope': resolve_club_scope(request),
}