From 43ad221c677663316f4ea921bb8b2786b0406cef Mon Sep 17 00:00:00 2001 From: XingQue Date: Wed, 22 Jul 2026 20:21:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=82=B9=E5=8D=95=E6=A8=AA=E5=B9=85/?= =?UTF-8?q?=E4=B8=AA=E4=BA=BA=E4=B8=AD=E5=BF=83=E8=83=8C=E6=99=AF=20page?= =?UTF-8?q?=5Fkey=EF=BC=8C=E5=B9=B6=20seed=20=E8=BD=AC=E7=9B=98=E8=8F=9C?= =?UTF-8?q?=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增 accept_order_banner2、boss_center;菜单定义写入 product.turntable,不影响现有俱乐部数据隔离。 Co-authored-by: Cursor --- backend/views/system.py | 7 ++++++ config/views/admin_config.py | 10 +++++++-- jituan/services/display_config.py | 27 +++++++++++++++++++++--- jituan/services/kefu_menu_definitions.py | 6 ++++-- jituan/views_display.py | 6 +++--- 5 files changed, 46 insertions(+), 10 deletions(-) diff --git a/backend/views/system.py b/backend/views/system.py index c55585c..a31f023 100644 --- a/backend/views/system.py +++ b/backend/views/system.py @@ -619,6 +619,7 @@ class ModifyProductTypeZoneView(APIView): shenhezhuangtai=shenhezhuangtai, paixu=0, club_id=club_id, + tupian_url=(request.data.get('tupian_url') or '').strip(), ) return Response({'code': 0, 'msg': '添加成功', 'data': {'id': zhuanqu.id, 'club_id': club_id}}) except Exception as e: @@ -670,6 +671,12 @@ class ModifyProductTypeZoneView(APIView): except (TypeError, ValueError): return Response({'code': 400, 'msg': '审核状态无效(必须为1或2)'}) + if 'tupian_url' in request.data: + new_url = (request.data.get('tupian_url') or '').strip() + old_url = getattr(zhuanqu, 'tupian_url', None) or '' + if new_url != old_url: + changes['tupian_url'] = new_url + if not changes: return Response({'code': 400, 'msg': '未做任何修改'}) diff --git a/config/views/admin_config.py b/config/views/admin_config.py index 127dc32..fc739f0 100644 --- a/config/views/admin_config.py +++ b/config/views/admin_config.py @@ -81,11 +81,17 @@ class ShangpinGonggaoView(APIView): """ try: logger.info("收到商品公告和轮播图请求") - from jituan.services.display_config import get_gonggao_content, get_lunbo_urls, normalize_page_key + from jituan.services.display_config import ( + get_gonggao_content, + get_lunbo_urls, + lunbo_image_type_for_page, + normalize_page_key, + ) page_key = normalize_page_key(request.data.get('page_key'), image_type=1) + image_type = lunbo_image_type_for_page(page_key) gonggao_content = get_gonggao_content(request, notice_type=1, page_key=page_key) - lunbo_urls = get_lunbo_urls(request, page_key=page_key, image_type=1) + lunbo_urls = get_lunbo_urls(request, page_key=page_key, image_type=image_type) response_data = { "shangpingonggao": gonggao_content, "shangpinlunbo": lunbo_urls, diff --git a/jituan/services/display_config.py b/jituan/services/display_config.py index 45de591..076ff62 100644 --- a/jituan/services/display_config.py +++ b/jituan/services/display_config.py @@ -11,26 +11,44 @@ from rest_framework.response import Response # 定稿 B 方案 page_key LUNBO_PAGE_ORDER_POOL = 'order_pool' LUNBO_PAGE_ACCEPT_ORDER = 'accept_order' +LUNBO_PAGE_ACCEPT_BANNER2 = 'accept_order_banner2' # 点单页第二横幅轮播(如 UFO banner2) LUNBO_PAGE_MERCHANT_HOME = 'merchant_home' LUNBO_PAGE_DASHOU_CENTER = 'dashou_center' +LUNBO_PAGE_BOSS_CENTER = 'boss_center' # 点单端「我的」顶区背景 + +LUNBO_CENTER_BG_KEYS = {LUNBO_PAGE_DASHOU_CENTER, LUNBO_PAGE_BOSS_CENTER} +LUNBO_CAROUSEL_KEYS = { + LUNBO_PAGE_ORDER_POOL, + LUNBO_PAGE_ACCEPT_ORDER, + LUNBO_PAGE_ACCEPT_BANNER2, + LUNBO_PAGE_MERCHANT_HOME, +} LUNBO_PAGE_OPTIONS = [ (LUNBO_PAGE_ORDER_POOL, '抢单池'), - (LUNBO_PAGE_ACCEPT_ORDER, '点单页'), + (LUNBO_PAGE_ACCEPT_ORDER, '点单页主轮播'), + (LUNBO_PAGE_ACCEPT_BANNER2, '点单页横幅轮播'), (LUNBO_PAGE_MERCHANT_HOME, '商家首页'), (LUNBO_PAGE_DASHOU_CENTER, '打手个人中心背景'), + (LUNBO_PAGE_BOSS_CENTER, '点单个人中心背景'), ] def normalize_page_key(page_key, image_type=1): key = (page_key or '').strip() + if key in LUNBO_CENTER_BG_KEYS or key in LUNBO_CAROUSEL_KEYS: + return key if image_type == 2: return LUNBO_PAGE_DASHOU_CENTER - if key in {LUNBO_PAGE_ORDER_POOL, LUNBO_PAGE_ACCEPT_ORDER, LUNBO_PAGE_MERCHANT_HOME}: - return key return LUNBO_PAGE_ORDER_POOL +def lunbo_image_type_for_page(page_key): + """个人中心背景页用 ImageType=2,其余轮播用 1。""" + pk = normalize_page_key(page_key, image_type=1) + return 2 if pk in LUNBO_CENTER_BG_KEYS else 1 + + def forbid_display_write_in_all_scope(request): if resolve_club_scope(request) == DATA_SCOPE_ALL: return Response({'code': 403, 'msg': '请在子公司视图下修改展示配置'}) @@ -73,6 +91,9 @@ def get_lunbo_urls(request, page_key=None, image_type=1): from config.models import Lunbo club_id = _display_club_id(request) pk = normalize_page_key(page_key, image_type=image_type) + # 个人中心背景页一律 ImageType=2,避免误传 image_type=1 读不到 + if pk in LUNBO_CENTER_BG_KEYS: + image_type = 2 qs = Lunbo.query.filter(club_id=club_id, ImageType=image_type, page_key=pk) return [row.ImageURL for row in qs.order_by('id') if row.ImageURL] diff --git a/jituan/services/kefu_menu_definitions.py b/jituan/services/kefu_menu_definitions.py index 4b142ea..0932e46 100644 --- a/jituan/services/kefu_menu_definitions.py +++ b/jituan/services/kefu_menu_definitions.py @@ -69,9 +69,11 @@ KEFU_MENU_ROW_DEFS = [ 'perm_codes': ['2200a']}, {'page_id': 'product.type-zone', 'name': '商品类型专区管理', 'path': '/product/type-zone', 'parent_id': 'product', 'sort_order': 92, 'perm_codes': ['7007a']}, - {'page_id': 'product.data', 'name': '商品数据分析', 'path': '/product/data', 'parent_id': 'product', 'sort_order': 93, + {'page_id': 'product.turntable', 'name': '转盘活动', 'path': '/product/turntable', 'parent_id': 'product', 'sort_order': 93, 'perm_codes': ['2200a']}, - {'page_id': 'product.fake-orders', 'name': '假单管理', 'path': '/product/fake-orders', 'parent_id': 'product', 'sort_order': 94, + {'page_id': 'product.data', 'name': '商品数据分析', 'path': '/product/data', 'parent_id': 'product', 'sort_order': 94, + 'perm_codes': ['2200a']}, + {'page_id': 'product.fake-orders', 'name': '假单管理', 'path': '/product/fake-orders', 'parent_id': 'product', 'sort_order': 95, 'perm_codes': ['2200a']}, {'page_id': 'member', 'name': '会员管理', 'path': '', 'parent_id': '', 'sort_order': 100}, {'page_id': 'member.list', 'name': '会员管理', 'path': '/member/list', 'parent_id': 'member', 'sort_order': 101, diff --git a/jituan/views_display.py b/jituan/views_display.py index 72d4b73..c923ce4 100644 --- a/jituan/views_display.py +++ b/jituan/views_display.py @@ -16,8 +16,8 @@ from jituan.services.display_config import ( get_lunbo_urls, list_response_meta, list_tupianpeizhi_by_type, - LUNBO_PAGE_DASHOU_CENTER, LUNBO_PAGE_OPTIONS, + lunbo_image_type_for_page, normalize_page_key, TUPIAN_TYPE_LABELS, upsert_tupianpeizhi_single, @@ -44,7 +44,7 @@ class ClubLunboListView(APIView): return Response({'code': 403, 'msg': '无权限管理轮播图'}) page_key = normalize_page_key(request.data.get('page_key'), image_type=1) - image_type = 2 if page_key == LUNBO_PAGE_DASHOU_CENTER else 1 + image_type = lunbo_image_type_for_page(page_key) urls = get_lunbo_urls(request, page_key=page_key, image_type=image_type) return Response({ 'code': 0, @@ -79,7 +79,7 @@ class ClubLunboManageView(APIView): action = (request.data.get('action') or '').strip() club_id = resolve_effective_club_id(request, request.user) page_key = normalize_page_key(request.data.get('page_key'), image_type=1) - image_type = 2 if page_key == LUNBO_PAGE_DASHOU_CENTER else 1 + image_type = lunbo_image_type_for_page(page_key) if action == 'delete': tupian_url = (request.data.get('tupian_url') or '').strip()