106 lines
3.6 KiB
Python
106 lines
3.6 KiB
Python
"""子客服专用:派单模板 / 链接(独立路径;读模板用 merchant_id,写模板需 template_manage)。"""
|
||
from rest_framework.permissions import IsAuthenticated
|
||
from rest_framework.response import Response
|
||
from rest_framework.views import APIView
|
||
|
||
from config.views import (
|
||
ShangjiaTianjiaMobanView,
|
||
ShangjiaGengxinMobanView,
|
||
ShangjiaShanchuMobanView,
|
||
ShangjiaGenerateLinkView,
|
||
ShangjiaLianjieListView,
|
||
)
|
||
from merchant_ops.helpers import proxy_as_merchant_user
|
||
from merchant_ops.services.authz import StaffAuthError, get_active_staff_member, member_has_perm
|
||
from merchant_ops.services.template_query import list_merchant_templates
|
||
from merchant_ops.views_manage import _err
|
||
|
||
|
||
def _require_staff(request):
|
||
member = get_active_staff_member(request.user)
|
||
if not member:
|
||
raise StaffAuthError(403, '非有效子客服')
|
||
return member
|
||
|
||
|
||
def _can_read_templates(member):
|
||
"""派单发常规单需读模板;改模板需 template_manage。"""
|
||
return member_has_perm(member, 'order_dispatch') or member_has_perm(member, 'template_manage')
|
||
|
||
|
||
class StaffTemplateListView(APIView):
|
||
"""读商家全部模板(UserID=merchant_id),有 order_dispatch 即可。"""
|
||
|
||
permission_classes = [IsAuthenticated]
|
||
|
||
def post(self, request):
|
||
try:
|
||
member = _require_staff(request)
|
||
if not _can_read_templates(member):
|
||
raise StaffAuthError(403, '无权限查看模板')
|
||
payload, http_status = list_merchant_templates(member.merchant_id, request.data)
|
||
return Response(payload, status=http_status)
|
||
except Exception as e:
|
||
return _err(e)
|
||
|
||
|
||
class StaffTemplateCreateView(APIView):
|
||
permission_classes = [IsAuthenticated]
|
||
|
||
def post(self, request):
|
||
try:
|
||
member = _require_staff(request)
|
||
if not member_has_perm(member, 'template_manage'):
|
||
raise StaffAuthError(403, '无权限添加模板')
|
||
return proxy_as_merchant_user(request, member, ShangjiaTianjiaMobanView, 'template_manage')
|
||
except Exception as e:
|
||
return _err(e)
|
||
|
||
|
||
class StaffTemplateUpdateView(APIView):
|
||
permission_classes = [IsAuthenticated]
|
||
|
||
def post(self, request):
|
||
try:
|
||
member = _require_staff(request)
|
||
if not member_has_perm(member, 'template_manage'):
|
||
raise StaffAuthError(403, '无权限修改模板')
|
||
return proxy_as_merchant_user(request, member, ShangjiaGengxinMobanView, 'template_manage')
|
||
except Exception as e:
|
||
return _err(e)
|
||
|
||
|
||
class StaffTemplateDeleteView(APIView):
|
||
permission_classes = [IsAuthenticated]
|
||
|
||
def post(self, request):
|
||
try:
|
||
member = _require_staff(request)
|
||
if not member_has_perm(member, 'template_manage'):
|
||
raise StaffAuthError(403, '无权限删除模板')
|
||
return proxy_as_merchant_user(request, member, ShangjiaShanchuMobanView, 'template_manage')
|
||
except Exception as e:
|
||
return _err(e)
|
||
|
||
|
||
class StaffLinkGenerateView(APIView):
|
||
permission_classes = [IsAuthenticated]
|
||
|
||
def post(self, request):
|
||
try:
|
||
member = _require_staff(request)
|
||
return proxy_as_merchant_user(request, member, ShangjiaGenerateLinkView, 'order_dispatch')
|
||
except Exception as e:
|
||
return _err(e)
|
||
|
||
|
||
class StaffLinkListView(APIView):
|
||
permission_classes = [IsAuthenticated]
|
||
|
||
def post(self, request):
|
||
try:
|
||
member = _require_staff(request)
|
||
return proxy_as_merchant_user(request, member, ShangjiaLianjieListView, 'order_dispatch')
|
||
except Exception as e:
|
||
return _err(e)
|