"""子客服专用:派单模板 / 链接(独立路径;读模板用 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)