fix: 类型专区返回未上架项;后台账号含集团与封禁
This commit is contained in:
1 parent
727d78ef4d
commit
a3e4b9c32d
3 files changed
+41
-17
No files matched your search
@@ -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 = []
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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),
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user