feat: 商品/专区/店铺按俱乐部分离,工单统计与点单手机号认证
商品与专区、店铺增加 club_id(历史默认 xq);列表按俱乐部过滤;工单列表返回待办统计;新增 hqshouji/rzwlsjh 手机号查询与认证接口。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -27,6 +27,8 @@ from .user_info import (
|
||||
ShangJiaXinXiView,
|
||||
ShangjiaNichengGengxinView,
|
||||
UserInfoUpdateView,
|
||||
GetUserPhoneView,
|
||||
BindUserPhoneView,
|
||||
YaoqingmaView,
|
||||
ZaixianZhuangtaiAPIView,
|
||||
huoquKehuduanIP,
|
||||
|
||||
@@ -1175,4 +1175,107 @@ class LaobanJianquanView(APIView):
|
||||
'code': 0,
|
||||
'allow': 0,
|
||||
'msg': '您暂无订单记录,消息功能暂不可用'
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
def _mask_phone(phone):
|
||||
p = (phone or '').strip()
|
||||
if len(p) < 7:
|
||||
return p
|
||||
return p[:3] + '****' + p[-4:]
|
||||
|
||||
|
||||
def _phone_auth_completed(user):
|
||||
if bool(getattr(user, 'PhoneVerified', False)):
|
||||
return True
|
||||
phone = (getattr(user, 'Phone', None) or '').strip()
|
||||
return len(phone) >= 11
|
||||
|
||||
|
||||
class GetUserPhoneView(APIView):
|
||||
"""
|
||||
点单提交页:查询当前用户手机号认证状态。
|
||||
POST /yonghu/hqshouji
|
||||
返回:phone / phone_masked / phone_verified / need_auth
|
||||
"""
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def post(self, request):
|
||||
user = request.user
|
||||
uid = getattr(user, 'UserUID', None)
|
||||
if uid:
|
||||
try:
|
||||
user = User.query.get(UserUID=uid)
|
||||
except User.DoesNotExist:
|
||||
pass
|
||||
verified = _phone_auth_completed(user)
|
||||
phone = (getattr(user, 'Phone', None) or '').strip()
|
||||
return Response({
|
||||
'code': 0,
|
||||
'msg': 'ok',
|
||||
'data': {
|
||||
'phone': phone if verified else '',
|
||||
'phone_masked': _mask_phone(phone) if verified else '',
|
||||
'phone_verified': verified,
|
||||
'need_auth': not verified,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
class BindUserPhoneView(APIView):
|
||||
"""
|
||||
点单提交页:一键获取手机号并完成认证(无需头像)。
|
||||
POST /yonghu/rzwlsjh
|
||||
参数:shoujihao_code(微信 getPhoneNumber 返回的 code)
|
||||
"""
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def post(self, request):
|
||||
code = (
|
||||
request.data.get('shoujihao_code')
|
||||
or request.data.get('code')
|
||||
or ''
|
||||
)
|
||||
if isinstance(code, str):
|
||||
code = code.strip()
|
||||
else:
|
||||
code = str(code or '').strip()
|
||||
if not code:
|
||||
return Response({
|
||||
'code': 6,
|
||||
'msg': '未收到手机号授权,请重新点击获取手机号',
|
||||
'data': None,
|
||||
})
|
||||
|
||||
user = request.user
|
||||
uid = getattr(user, 'UserUID', None)
|
||||
if uid:
|
||||
try:
|
||||
user = User.query.get(UserUID=uid)
|
||||
except User.DoesNotExist:
|
||||
pass
|
||||
|
||||
# 复用资料页的微信换号逻辑
|
||||
binder = UserInfoUpdateView()
|
||||
phone = binder._get_phone_safe(code, request)
|
||||
if not phone:
|
||||
return Response({
|
||||
'code': 6,
|
||||
'msg': '手机号获取失败,请重新授权',
|
||||
'data': None,
|
||||
})
|
||||
|
||||
user.Phone = phone
|
||||
user.PhoneVerified = True
|
||||
user.save(update_fields=['Phone', 'PhoneVerified'])
|
||||
|
||||
return Response({
|
||||
'code': 0,
|
||||
'msg': '认证成功',
|
||||
'data': {
|
||||
'phone': phone,
|
||||
'phone_masked': _mask_phone(phone),
|
||||
'phone_verified': True,
|
||||
'need_auth': False,
|
||||
},
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user