UrsUserReferralController.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. <?php
  2. namespace App\Module\UrsPromotion\AdminControllers;
  3. use UCore\DcatAdmin\AdminController;
  4. use Spatie\RouteAttributes\Attributes\Resource;
  5. use App\Module\UrsPromotion\Models\UrsUserReferral;
  6. use App\Module\UrsPromotion\Models\UrsUserMapping;
  7. use App\Module\UrsPromotion\Repositorys\UrsUserReferralRepository;
  8. use Dcat\Admin\Grid;
  9. use Dcat\Admin\Show;
  10. use Dcat\Admin\Form;
  11. /**
  12. * URS用户推荐关系管理控制器
  13. *
  14. * @route /admin/urs-promotion/user-referrals
  15. */
  16. #[Resource('urs-promotion/user-referrals', names: 'dcat.admin.urs-promotion.user-referrals')]
  17. class UrsUserReferralController extends AdminController
  18. {
  19. /**
  20. * 页面标题
  21. */
  22. protected $title = 'URS用户推荐关系';
  23. /**
  24. * 模型类
  25. */
  26. protected $model = UrsUserReferral::class;
  27. /**
  28. * 仓库类
  29. */
  30. protected $repository = UrsUserReferralRepository::class;
  31. /**
  32. * 列表页面
  33. */
  34. protected function grid(): Grid
  35. {
  36. return Grid::make(new UrsUserReferralRepository(), function (Grid $grid) {
  37. $grid->column('id', 'ID')->sortable();
  38. $grid->column('urs_user_id', 'URS用户ID')->sortable()->display(function ($value) {
  39. // 添加到用户绑定和达人等级的链接
  40. $mappingUrl = admin_url('urs-promotion/user-mappings?urs_user_id=' . $value);
  41. $talentUrl = admin_url('urs-promotion/user-talents?urs_user_id=' . $value);
  42. return $value . '<br><small>
  43. <a href="' . $mappingUrl . '" class="text-primary">查看绑定关系</a> |
  44. <a href="' . $talentUrl . '" class="text-success">查看达人等级</a>
  45. </small>';
  46. });
  47. $grid->column('urs_referrer_id', 'URS推荐人ID')->sortable()->display(function ($value) {
  48. // 添加到推荐人信息的链接
  49. $mappingUrl = admin_url('urs-promotion/user-mappings?urs_user_id=' . $value);
  50. $talentUrl = admin_url('urs-promotion/user-talents?urs_user_id=' . $value);
  51. return $value . '<br><small>
  52. <a href="' . $mappingUrl . '" class="text-primary">推荐人绑定</a> |
  53. <a href="' . $talentUrl . '" class="text-success">推荐人等级</a>
  54. </small>';
  55. });
  56. // 农场用户信息列
  57. $grid->column('userMapping.user.username', '农场用户名')->display(function ($value) {
  58. return $value ?: '<span class="label label-warning">未进入农场</span>';
  59. });
  60. $grid->column('userMapping.user.info.nickname', '农场用户昵称')->display(function ($value) {
  61. return $value ?: '<span class="text-muted">无昵称</span>';
  62. });
  63. // 推荐人农场用户信息列
  64. $grid->column('referrerMapping.user.username', '推荐人农场用户名')->display(function ($value) {
  65. return $value ?: '<span class="label label-warning">未进入农场</span>';
  66. });
  67. $grid->column('referrerMapping.user.info.nickname', '推荐人农场昵称')->display(function ($value) {
  68. return $value ?: '<span class="text-muted">无昵称</span>';
  69. });
  70. $grid->column('referral_time', '推荐时间')->sortable();
  71. $grid->column('status', '状态')->using([
  72. UrsUserReferral::STATUS_INVALID => '无效',
  73. UrsUserReferral::STATUS_VALID => '有效',
  74. ])->label([
  75. UrsUserReferral::STATUS_INVALID => 'danger',
  76. UrsUserReferral::STATUS_VALID => 'success',
  77. ]);
  78. $grid->column('created_at', '创建时间')->sortable();
  79. // 禁用创建按钮(推荐关系由系统自动创建)
  80. $grid->disableCreateButton();
  81. // 只允许查看详情
  82. $grid->actions(function (Grid\Displayers\Actions $actions) {
  83. $actions->disableEdit();
  84. $actions->disableDelete();
  85. // 添加自定义操作
  86. $actions->append(new \App\Module\UrsPromotion\AdminControllers\Actions\ViewReferralTreeAction());
  87. $actions->append(new \App\Module\UrsPromotion\AdminControllers\Actions\ValidateReferralAction());
  88. });
  89. $grid->filter(function (Grid\Filter $filter) {
  90. $filter->equal('urs_user_id', 'URS用户ID');
  91. $filter->equal('urs_referrer_id', 'URS推荐人ID');
  92. $filter->equal('status', '状态')->select([
  93. UrsUserReferral::STATUS_INVALID => '无效',
  94. UrsUserReferral::STATUS_VALID => '有效',
  95. ]);
  96. $filter->between('created_at', '创建时间')->datetime();
  97. });
  98. });
  99. }
  100. /**
  101. * 详情页面
  102. */
  103. protected function detail($id): Show
  104. {
  105. return Show::make($id, new UrsUserReferralRepository(), function (Show $show) {
  106. $show->field('id', 'ID');
  107. $show->field('urs_user_id', 'URS用户ID');
  108. $show->field('urs_referrer_id', 'URS推荐人ID');
  109. // 农场用户信息
  110. $show->divider('农场用户信息');
  111. $show->field('farm_username', '农场用户名')->as(function ($value) {
  112. // 获取当前记录的ID,然后查询关联数据
  113. $referral = UrsUserReferral::find($this->getKey());
  114. if (!$referral) {
  115. return '未进入农场';
  116. }
  117. $userMapping = UrsUserMapping::where('urs_user_id', $referral->urs_user_id)
  118. ->where('status', UrsUserMapping::STATUS_VALID)
  119. ->with('user')
  120. ->first();
  121. if ($userMapping && $userMapping->user) {
  122. return $userMapping->user->username;
  123. }
  124. return '未进入农场';
  125. });
  126. $show->field('farm_nickname', '农场用户昵称')->as(function ($value) {
  127. // 获取当前记录的ID,然后查询关联数据
  128. $referral = UrsUserReferral::find($this->getKey());
  129. if (!$referral) {
  130. return '无昵称';
  131. }
  132. $userMapping = UrsUserMapping::where('urs_user_id', $referral->urs_user_id)
  133. ->where('status', UrsUserMapping::STATUS_VALID)
  134. ->with('user.info')
  135. ->first();
  136. if ($userMapping && $userMapping->user && $userMapping->user->info) {
  137. return $userMapping->user->info->nickname ?: '无昵称';
  138. }
  139. return '无昵称';
  140. });
  141. // 推荐人农场用户信息
  142. $show->divider('推荐人农场用户信息');
  143. $show->field('referrer_farm_username', '推荐人农场用户名')->as(function ($value) {
  144. // 获取当前记录的ID,然后查询关联数据
  145. $referral = UrsUserReferral::find($this->getKey());
  146. if (!$referral) {
  147. return '未进入农场';
  148. }
  149. $referrerMapping = UrsUserMapping::where('urs_user_id', $referral->urs_referrer_id)
  150. ->where('status', UrsUserMapping::STATUS_VALID)
  151. ->with('user')
  152. ->first();
  153. if ($referrerMapping && $referrerMapping->user) {
  154. return $referrerMapping->user->username;
  155. }
  156. return '未进入农场';
  157. });
  158. $show->field('referrer_farm_nickname', '推荐人农场用户昵称')->as(function ($value) {
  159. // 获取当前记录的ID,然后查询关联数据
  160. $referral = UrsUserReferral::find($this->getKey());
  161. if (!$referral) {
  162. return '无昵称';
  163. }
  164. $referrerMapping = UrsUserMapping::where('urs_user_id', $referral->urs_referrer_id)
  165. ->where('status', UrsUserMapping::STATUS_VALID)
  166. ->with('user.info')
  167. ->first();
  168. if ($referrerMapping && $referrerMapping->user && $referrerMapping->user->info) {
  169. return $referrerMapping->user->info->nickname ?: '无昵称';
  170. }
  171. return '无昵称';
  172. });
  173. $show->divider('基本信息');
  174. $show->field('referral_time', '推荐时间');
  175. $show->field('status', '状态')->using([
  176. UrsUserReferral::STATUS_INVALID => '无效',
  177. UrsUserReferral::STATUS_VALID => '有效',
  178. ]);
  179. $show->field('created_at', '创建时间');
  180. $show->field('updated_at', '更新时间');
  181. // 添加相关链接区域
  182. $show->divider('相关信息');
  183. $show->field('related_links', '相关链接')->unescape()->as(function ($value, $model) {
  184. $links = [];
  185. // 用户绑定关系链接
  186. $userMappingUrl = admin_url('urs-promotion/user-mappings?urs_user_id=' . $model->urs_user_id);
  187. $links[] = '<a href="' . $userMappingUrl . '" class="btn btn-primary btn-sm" target="_blank">
  188. <i class="fa fa-link"></i> 用户绑定关系
  189. </a>';
  190. // 推荐人绑定关系链接
  191. $referrerMappingUrl = admin_url('urs-promotion/user-mappings?urs_user_id=' . $model->urs_referrer_id);
  192. $links[] = '<a href="' . $referrerMappingUrl . '" class="btn btn-primary btn-sm" target="_blank">
  193. <i class="fa fa-link"></i> 推荐人绑定关系
  194. </a>';
  195. // 用户达人等级链接
  196. $userTalentUrl = admin_url('urs-promotion/user-talents?urs_user_id=' . $model->urs_user_id);
  197. $links[] = '<a href="' . $userTalentUrl . '" class="btn btn-success btn-sm" target="_blank">
  198. <i class="fa fa-star"></i> 用户达人等级
  199. </a>';
  200. // 推荐人达人等级链接
  201. $referrerTalentUrl = admin_url('urs-promotion/user-talents?urs_user_id=' . $model->urs_referrer_id);
  202. $links[] = '<a href="' . $referrerTalentUrl . '" class="btn btn-success btn-sm" target="_blank">
  203. <i class="fa fa-star"></i> 推荐人达人等级
  204. </a>';
  205. return implode(' ', $links);
  206. });
  207. });
  208. }
  209. /**
  210. * 表单页面(禁用)
  211. */
  212. protected function form(): Form
  213. {
  214. return Form::make(new UrsUserReferralRepository(), function (Form $form) {
  215. // 推荐关系由系统自动创建,不提供手动创建表单
  216. $form->display('message', '提示')->default('推荐关系由系统自动创建,不支持手动添加或编辑');
  217. });
  218. }
  219. }