diff --git a/backend/views/kefu.py b/backend/views/kefu.py index 1b7c1b8..873ce79 100644 --- a/backend/views/kefu.py +++ b/backend/views/kefu.py @@ -317,6 +317,7 @@ class KefuGetDashouDetailView(APIView): 'zaixianzhuangtai': dashou.zaixianzhuangtai, 'zhanghaozhuangtai': dashou.zhanghaozhuangtai, 'zhuangtai': dashou.zhuangtai, + 'fengjin_yuanyin': getattr(dashou, 'fengjin_yuanyin', '') or '', 'nicheng': dashou.nicheng or '', 'chenghao': dashou.chenghao or '', 'dianhua': dashou.dianhua or '', @@ -585,20 +586,33 @@ class KefuUpdateDashouView(APIView): new_status = int(value) if new_status not in [0, 1]: return Response({'code': 400, 'msg': '状态值无效(0=封禁,1=正常)'}) + yuanyin = (request.data.get('yuanyin') or request.data.get('fengjin_yuanyin') or '').strip() dashou_profile.zhanghaozhuangtai = new_status - dashou_profile.save() + if new_status == 0: + dashou_profile.fengjin_yuanyin = yuanyin[:200] + else: + dashou_profile.fengjin_yuanyin = '' + dashou_profile.save(update_fields=['zhanghaozhuangtai', 'fengjin_yuanyin']) status_label = '正常' if new_status == 1 else '封禁' old_label = '正常' if before['zhanghaozhuangtai'] == 1 else '封禁' + reason_part = f',原因={yuanyin}' if (new_status == 0 and yuanyin) else '' write_xiugai_log( yonghuid=dashou_id, xiugaiid=kefu.user.Phone, leixing=XIUGAI_LEIXING_DASHOU, qitashuoming=( - f'【后台】修改打手账号状态:{old_label} → {status_label},' + f'【后台】修改打手账号状态:{old_label} → {status_label}{reason_part},' f'打手ID={dashou_id},操作人={kefu.user.Phone}' ), ) - return Response({'code': 0, 'msg': '修改账号状态成功', 'data': {'new_zhanghaozhuangtai': new_status}}) + return Response({ + 'code': 0, + 'msg': '修改账号状态成功', + 'data': { + 'new_zhanghaozhuangtai': new_status, + 'fengjin_yuanyin': dashou_profile.fengjin_yuanyin or '', + }, + }) elif caozuo == 'gai_zaixianzhuangtai': if '001ee' not in permissions: diff --git a/users/migrations/0008_fengjin_yuanyin.py b/users/migrations/0008_fengjin_yuanyin.py new file mode 100644 index 0000000..aea0eef --- /dev/null +++ b/users/migrations/0008_fengjin_yuanyin.py @@ -0,0 +1,33 @@ +# Generated manually for ban reason fields + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0007_role_fund_freeze_fields'), + ] + + operations = [ + migrations.AddField( + model_name='userdashou', + name='fengjin_yuanyin', + field=models.CharField(blank=True, default='', max_length=200, verbose_name='封禁原因'), + ), + migrations.AddField( + model_name='userguanshi', + name='fengjin_yuanyin', + field=models.CharField(blank=True, default='', max_length=200, verbose_name='封禁原因'), + ), + migrations.AddField( + model_name='userzuzhang', + name='fengjin_yuanyin', + field=models.CharField(blank=True, default='', max_length=200, verbose_name='封禁原因'), + ), + migrations.AddField( + model_name='usershangjia', + name='fengjin_yuanyin', + field=models.CharField(blank=True, default='', max_length=200, verbose_name='封禁原因'), + ), + ] diff --git a/users/models.py b/users/models.py index 628c8bb..0f1345d 100644 --- a/users/models.py +++ b/users/models.py @@ -143,6 +143,7 @@ class UserDashou(QModel): zhuangtai = models.IntegerField(default=1, verbose_name='打手状态') zaixianzhuangtai = models.IntegerField(default=1, verbose_name='打手在线状态') zhanghaozhuangtai = models.IntegerField(default=1, verbose_name='打手账号状态') + fengjin_yuanyin = models.CharField(max_length=200, blank=True, default='', verbose_name='封禁原因') jieshao = models.TextField(null=True, verbose_name='打手介绍') jiedanzongliang = models.IntegerField(default=0, verbose_name='接单总量') chengjiaozongliang = models.IntegerField(default=0, verbose_name='成交单总量') @@ -192,6 +193,7 @@ class UserShangjia(QModel): nicheng = models.CharField(max_length=50, unique=True, db_index=True, verbose_name='商家昵称') zhuangtai = models.IntegerField(choices=[(0, '待审核'), (1, '正常'), (2, '禁用')], default=1, verbose_name='商家状态') + fengjin_yuanyin = models.CharField(max_length=200, blank=True, default='', verbose_name='封禁原因') dianhua = models.CharField(max_length=20,null=True,verbose_name='商家电话') wechat = models.CharField(max_length=50, null=True, verbose_name='商家微信号') fabu = models.IntegerField(default=0, verbose_name='发布订单总数量') @@ -226,6 +228,7 @@ class UserGuanshi(QModel): wechat = models.CharField(max_length=50,null=True, verbose_name='管事微信号') yaogingshuliang = models.IntegerField(default=0, verbose_name='邀请打手总数') zhuangtai = models.IntegerField(choices=[(0, '禁用'), (1, '正常')], default=1, verbose_name='管事状态') + fengjin_yuanyin = models.CharField(max_length=200, blank=True, default='', verbose_name='封禁原因') jinrichongzhi = models.IntegerField(default=0, verbose_name='今日充值打手数量') jinyuechongzhi = models.IntegerField(default=0, verbose_name='今月充值打手数量') chongzhifenrun = models.DecimalField(max_digits=12, decimal_places=2, default=0.00, verbose_name='充值分佣总额') @@ -293,6 +296,7 @@ class UserZuzhang(QModel): jinyue_fenyong = models.DecimalField(max_digits=10, decimal_places=2, default=0.00, verbose_name='今月分佣(元)') # 账号状态 zhuangtai = models.IntegerField(choices=[(0, '禁用'), (1, '正常')], default=1, verbose_name='账号状态') + fengjin_yuanyin = models.CharField(max_length=200, blank=True, default='', verbose_name='封禁原因') # 推广海报相对URL haibao_url = models.CharField(max_length=500, null=True, blank=True, verbose_name='推广海报相对URL') # 今日提现 diff --git a/users/views/auth.py b/users/views/auth.py index a357564..f2b7e36 100644 --- a/users/views/auth.py +++ b/users/views/auth.py @@ -1897,6 +1897,9 @@ class ZuzhangXinxiView(APIView): 'ketixian': str(zuzhang.ketixian_jine), 'dongjie_yue': str(getattr(zuzhang, 'dongjie_yue', 0) or 0), 'guanshiCount': guanshi_count, - 'fenhongZonge': str(zuzhang.fenyong_zonge) + 'fenhongZonge': str(zuzhang.fenyong_zonge), + 'zhuangtai': zuzhang.zhuangtai, + 'zuzhangstatus': 1 if int(getattr(zuzhang, 'zhuangtai', 0) or 0) == 1 else 0, + 'fengjin_yuanyin': getattr(zuzhang, 'fengjin_yuanyin', '') or '', } return Response({'code': 200, 'msg': 'success', 'data': data}) diff --git a/users/views/user_info.py b/users/views/user_info.py index 098e7a0..b5e83bd 100644 --- a/users/views/user_info.py +++ b/users/views/user_info.py @@ -403,6 +403,7 @@ class DashouXinxiAPIView(APIView): data = { 'dashounicheng': dashou_profile.nicheng or '', 'zhanghaostatus': dashou_profile.zhanghaozhuangtai, + 'fengjin_yuanyin': getattr(dashou_profile, 'fengjin_yuanyin', '') or '', 'zaixianzhuangtai': dashou_profile.zaixianzhuangtai, 'dashouzhuangtai': dashou_profile.zhuangtai, 'yongjin': str(dashou_profile.yue) if dashou_profile.yue is not None else '0.00', @@ -416,6 +417,29 @@ class DashouXinxiAPIView(APIView): 'chenghao': dashou_profile.chenghao or '', } + # 身份状态:下拉刷新可即时更新入口(仅正常态为 1) + try: + gs = UserGuanshi.query.filter(user=current_user).first() + data['guanshistatus'] = 1 if gs and int(getattr(gs, 'zhuangtai', 0) or 0) == 1 else 0 + data['guanshi_fengjin_yuanyin'] = (getattr(gs, 'fengjin_yuanyin', '') or '') if gs else '' + except Exception: + data['guanshistatus'] = 0 + data['guanshi_fengjin_yuanyin'] = '' + try: + zz = UserZuzhang.query.filter(user=current_user).first() + data['zuzhangstatus'] = 1 if zz and int(getattr(zz, 'zhuangtai', 0) or 0) == 1 else 0 + data['zuzhang_fengjin_yuanyin'] = (getattr(zz, 'fengjin_yuanyin', '') or '') if zz else '' + except Exception: + data['zuzhangstatus'] = 0 + data['zuzhang_fengjin_yuanyin'] = '' + try: + sj = UserShangjia.query.filter(user=current_user).first() + data['shangjiastatus'] = 1 if sj and int(getattr(sj, 'zhuangtai', 0) or 0) == 1 else 0 + data['shangjia_fengjin_yuanyin'] = (getattr(sj, 'fengjin_yuanyin', '') or '') if sj else '' + except Exception: + data['shangjiastatus'] = 0 + data['shangjia_fengjin_yuanyin'] = '' + # 4. 查询会员信息(每次请求同步权益 + clumber,体验=正式) try: from jituan.services.huiyuan_bundle import refresh_grab_pool_membership_state @@ -665,6 +689,7 @@ class GuanshiXinxiView(APIView): 'msg': '获取成功', 'data': { 'gszhstatus': guanshi_profile.zhuangtai, # 管事账号状态 + 'fengjin_yuanyin': getattr(guanshi_profile, 'fengjin_yuanyin', '') or '', 'yaoqingzongshu': guanshi_profile.yaogingshuliang, # 邀请打手总数 'fenyongzonge': float(guanshi_profile.chongzhifenrun), # 充值分佣总额 'fenyongtixian': float(guanshi_profile.yue), # 可提现余额 @@ -719,6 +744,7 @@ class ShangJiaXinXiView(APIView): response_data = { 'nicheng': shangjia.nicheng or '', 'sjzhzhuangtai': shangjia.zhuangtai, # 商家账号状态 + 'fengjin_yuanyin': getattr(shangjia, 'fengjin_yuanyin', '') or '', 'fadanzong': shangjia.fabu, # 发单总量(累计) 'fabu': shangjia.fabu, 'tuikuanzong': shangjia.tuikuan, # 退款总量(累计)