From fbfceedb9a7f93fbd0281a5dfe77077b59e4c44c Mon Sep 17 00:00:00 2001 From: XingQue Date: Sat, 8 Aug 2026 05:54:06 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=BB=84=E9=98=9F=E5=A4=A7=E5=8E=85?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=85=A8=E9=83=A8=E7=B1=BB=E5=9E=8B=E4=B8=8E?= =?UTF-8?q?=E9=98=9F=E9=95=BF=E7=BB=9F=E8=AE=A1/=E5=A4=87=E6=B3=A8?= =?UTF-8?q?=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jituan/services/deal_stats.py | 2 ++ orders/services/team_recruit.py | 17 +++++++++++++++++ orders/views/zudui.py | 9 +++++++-- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/jituan/services/deal_stats.py b/jituan/services/deal_stats.py index 70b903e..9599a21 100644 --- a/jituan/services/deal_stats.py +++ b/jituan/services/deal_stats.py @@ -409,6 +409,8 @@ def miniapp_dashou_deal_payload(row) -> dict | None: return { 'role': 'dashou', 'order_count': full['order_count'], + # 组队卡片「完成单」:已结算单量 + 'completed_count': full.get('completed_count', 0), 'deal_rate': full['deal_rate'], 'fined_rate': full['fined_rate'], 'deal_rate_text': f"{round(full['deal_rate'] * 100, 1)}%", diff --git a/orders/services/team_recruit.py b/orders/services/team_recruit.py index 054eff4..2fe53dd 100644 --- a/orders/services/team_recruit.py +++ b/orders/services/team_recruit.py @@ -889,7 +889,12 @@ def serialize_recruit_public(rec, order=None, *, include_game_ids=False) -> dict 'share_mode': rec.share_mode, 'display_share_amount': float(_d(rec.display_share_amount)), 'per_person_amount': float(_d(rec.per_person_amount)), + # remark / team_remark:队长开启组队时填的打手备注(组队说明) 'remark': rec.remark or '', + 'team_remark': rec.remark or '', + # beizhu / order_remark:订单备注(老板说明) + 'beizhu': '', + 'order_remark': '', 'leader_uid': rec.leader_uid, 'leader_nicheng': '', 'min_deal_rate': float(rec.min_deal_rate) if rec.min_deal_rate is not None else None, @@ -908,8 +913,15 @@ def serialize_recruit_public(rec, order=None, *, include_game_ids=False) -> dict 'leader_avatar': '', 'leader_deal_stat': None, 'shangjia_deal_stat': None, + # 组队卡片队长三项(前端可直接用) + 'leader_finish_num': 0, + 'leader_finish_rate': '0%', + 'leader_fine_rate': '0%', } if order: + order_beizhu = (getattr(order, 'Remark', None) or '').strip() + data['beizhu'] = order_beizhu + data['order_remark'] = order_beizhu data['fadanpingtai_text'] = '平台单' if order.Platform == 1 else ('商家单' if order.Platform == 2 else '') if order.Platform == 2: try: @@ -965,6 +977,11 @@ def serialize_recruit_public(rec, order=None, *, include_game_ids=False) -> dict break dashou_row = None data['leader_deal_stat'] = miniapp_dashou_deal_payload(dashou_row) + st = data['leader_deal_stat'] or {} + if st: + data['leader_finish_num'] = int(st.get('completed_count') or 0) + data['leader_finish_rate'] = st.get('deal_rate_text') or '0%' + data['leader_fine_rate'] = st.get('fined_rate_text') or '0%' # 商家单:附带商家成交率/罚款率/均时(有样本才有;前端有哪个展示哪个) try: diff --git a/orders/views/zudui.py b/orders/views/zudui.py index f550635..4ab101d 100644 --- a/orders/views/zudui.py +++ b/orders/views/zudui.py @@ -183,14 +183,19 @@ class ZuduiDatingView(APIView): page_size = min(50, max(1, int(request.data.get('page_size') or 10))) leixing = request.data.get('leixing_id') pingtai = request.data.get('fadanpingtai') + all_types = request.data.get('all_types') + # 全部类型:all_types=1,或 leixing_id 为空/0/all(不按商品类型过滤) + is_all_types = ( + str(all_types).lower() in ('1', 'true', 'yes') + or leixing in (None, '', 0, '0', 'all', 'ALL') + ) qs = TeamRecruit.query.filter( club_id=club, status=TeamRecruit.STATUS_RECRUITING, ).order_by('-opened_at') - # 商品类型必选过滤(与前端大厅一致) - if leixing not in (None, ''): + if not is_all_types: try: lid = int(leixing) except (TypeError, ValueError):