formPageVipTrait.php 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <?php
  2. namespace App\Admin\Controllers\Traits\WxSettingTraits;
  3. use App\Admin\Renderable\UserAvatarFrameRender;
  4. use App\Models\WxClause;
  5. use App\Models\User\WxUserAvatarFrame;
  6. use App\Wen\Utils\AdminUtils;
  7. use App\Wen\Utils\FieldUtils;
  8. use App\Wen\Utils\GatewayUtils;
  9. use App\Wen\Utils\Settings;
  10. use App\Wen\Utils\SiteUtils;
  11. use Dcat\Admin\Form\NestedForm;
  12. use Dcat\Admin\Layout\Content;
  13. use Dcat\Admin\Widgets\Form;
  14. use Dcat\Admin\Widgets\Tooltip;
  15. use Illuminate\Http\Request;
  16. use Illuminate\Support\Facades\Cache;
  17. trait formPageVipTrait{
  18. public function index_pagevip(Content $content)
  19. {
  20. return $content->title('会员系统')
  21. // ->body($this->buildPreviewButton())
  22. // ->body($this->newline())
  23. ->body(
  24. <<<HTML
  25. <div class="card">{$this->form_pagevip()->render()}</div>
  26. HTML
  27. );
  28. }
  29. protected function form_pagevip(){
  30. $form = new Form();
  31. $form->confirm('您确定要提交表单吗?', 'content');
  32. $form->disableResetButton();
  33. $form->tab('会员页面', function (Form $form) {
  34. $form->html(function () {
  35. return '';
  36. }, '<b>一、会员套餐</b>');
  37. $form->html(function () {
  38. $res16 = __system__paycode__tip__(16);
  39. Tooltip::make('.mini_global_admin_open_not_support_tip')
  40. ->bottom()
  41. ->title($res16['tip']);
  42. return $res16['text']."&nbsp;&nbsp;&nbsp;&nbsp;下方选项示例";
  43. }, '');
  44. $form->html(function () {
  45. return '<img style="width: 130px;" src="https://img.mini.minisns.cn/images/vip_options2.jpg">';
  46. }, '');
  47. $form->table('app_vip_options','套餐配置', function (NestedForm $table) {
  48. $table->number('days', '会员时长/天')->default(30)->required();
  49. $table->text('sales', '促销信息');
  50. $table->number('price', '价格')->default(10)->required();
  51. $table->number('price2', '划线价')->help('只做展示作用')->default(15);
  52. $table->number('coins', '赠送金币')->default(0);
  53. $table->switch('select', '默认选中')->help('仅能开启一个')->default(false);
  54. })->default(Settings::get('app_vip_options', ''));
  55. $form->html(function () {
  56. return '';
  57. }, '<b>二、会员邀请</b>');
  58. $form->number('app_vip_5_invitees_days', '5人兑换多少天会员')->help('5人可以兑换一次,已经兑换过了的邀请不能二次兑换,可以利用邀请无限兑换会员')->default(Settings::get('app_vip_5_invitees_days', 90));
  59. $form->html(function () {
  60. return '';
  61. }, '<b>三、会员权益</b>');
  62. $form->text('app_vip_benefits_title', '标题')->default(Settings::get('app_vip_benefits_title', '会员尊享5大特权'));
  63. $form->table('app_vip_benefits','会员权益', function (NestedForm $table) {
  64. $table->text('text', '文本')->default('尊贵身份');
  65. $table->image('img', '图片')->help('<a href="https://img.mini.minisns.cn/images/vip/haoqi.png" target="_blank" style="color: steelblue">点击下载默认图</a>')->url('files/uploads')->uniqueName()->autoUpload()->default('https://img.mini.minisns.cn/images/vip/haoqi.png');
  66. $table->radio('type', '类型')->options(FieldUtils::getUrlTypes())->default(0);
  67. $table->text('target', '跳转id')->help('<a href="https://doc.minisns.cn/doc/44/" target="_blank">路径大全</a>');
  68. })->default(Settings::get('app_vip_benefits', '[{"text":"\u5c0a\u8d35\u8eab\u4efd","img":"https:\/\/img.mini.minisns.cn\/images\/vip\/haoqi.png","type":"0","target":null},{"text":"\u5934\u50cf\u6302\u4ef6","img":"https:\/\/img.mini.minisns.cn\/2023\/04\/27\/88c24e9a541a62142ec10b0df10766b0.png","type":"0","target":null},{"text":"\u533f\u540d\u8bf4\u8bf4","img":"https:\/\/img.mini.minisns.cn\/2023\/04\/27\/06a8778489badf6ea8d10b2f820747e8.png","type":"0","target":null},{"text":"\u70ed\u95e8\u63a8\u8350","img":"https:\/\/img.mini.minisns.cn\/2023\/04\/27\/d4e95d7b26fbf09407fda75a1a3de275.png","type":"0","target":null},{"text":"\u66f4\u591a\u7279\u6743","img":"https:\/\/img.mini.minisns.cn\/2023\/04\/27\/ff3c1bb2e671a8a048fe499c48692d29.png","type":"0","target":null}]'));
  69. $form->html(function () {
  70. return '';
  71. }, '<b>四、会员头像框</b>');
  72. $form->multipleSelectTable('app_vip_user_avatar_frames', '头像框')
  73. ->title('会员头像框')
  74. ->max(100)
  75. ->from(UserAvatarFrameRender::make())
  76. ->model(WxUserAvatarFrame::class, 'id', 'name', 'selectTable:formPageVipTrait:app_vip_user_avatar_frames')
  77. ->help('你应该选择会员专属的头像框,点击<a href="'.admin_url('avatar_frame/frame').'" target="_blank">管理头像框仓库</a>, <a href="https://doc.minisns.cn/doc/70/" target="_blank" style="color: red;">(ps:如何控制顺序?)</a>')
  78. ->default(Settings::get('app_vip_user_avatar_frames', ''));
  79. $form->html(function () {
  80. return '';
  81. }, '<b>五、会员弹窗及协议</b>');
  82. $form->image('members_popup_poster', '会员弹窗海报')->help('<a href="https://img.mini.minisns.cn/icons/vip.png" download="members_popup_poster.jpg" target="_blank" style="color: steelblue">点击下载默认图</a>,他人在你的个人主页点击会员标志时弹出,自己点击自己的会员标志是进入会员界面')->url('files/uploads')->uniqueName()->autoUpload()->default(Settings::get('members_popup_poster', 'https://img.mini.minisns.cn/icons/vip.png'));
  83. $form->select('app_vip_clause', '《会员协议》')->options(WxClause::pluck('title', 'id'))->help('<a href="'.admin_url('clause').'" target="_blank">进入条款管理</a>')->default(Settings::get('app_vip_clause', 0));
  84. });
  85. $form->tab('会员特权', function (Form $form) {
  86. $form->html(function () {
  87. return '';
  88. }, '<b>一、内容付费购买</b>');
  89. $form->rate('app_vip_paycontent_discount', '会员减少')->help('余额付费内容和金币付费内容都可以获得折扣,设置成100则代表会员可以免费查看所有付费内容')->value(Settings::get('app_vip_paycontent_discount', 0))->width(4);
  90. $form->html(function () {
  91. return '';
  92. }, '<b>二、会员免广告</b>');
  93. $form->radio('app_vip_ad_shut', '开关')->options([0=>'关闭', 1=>'开启'])->default(Settings::get('app_vip_ad_shut', 0));
  94. $form->html(function () {
  95. return '';
  96. }, '<b>三、会员匿名笔记</b>');
  97. $form->radio('app_vip_anonymous_only', '开关')->options([0=>'关闭', 1=>'开启'])->default(Settings::get('app_vip_anonymous_only', 0));
  98. });
  99. $form->action('settings/action/pagevip');
  100. return $form;
  101. }
  102. public function pagevip(Request $request){
  103. SiteUtils::forget_config_data();
  104. Settings::set('app_vip_options', AdminUtils::_table_data($request->input('app_vip_options')), true);
  105. Settings::set('app_vip_benefits_title', $request->input('app_vip_benefits_title'), true);
  106. Settings::set('app_vip_benefits', AdminUtils::_table_data($request->input('app_vip_benefits')), true);
  107. Settings::set('members_popup_poster', $request->input('members_popup_poster'), true);
  108. Settings::set('app_vip_clause', $request->input('app_vip_clause'), true);
  109. $avatar_frames = $request->input('app_vip_user_avatar_frames');
  110. $avatar_frames_ = [];
  111. if($avatar_frames){
  112. foreach (explode(',', $avatar_frames) as $avatar_frame_id){
  113. $avatar_frames_[] = $avatar_frame_id;
  114. }
  115. }
  116. Settings::set('app_vip_5_invitees_days', $request->input('app_vip_5_invitees_days'), true);
  117. Settings::set('app_vip_user_avatar_frames', json_encode($avatar_frames_), true);
  118. Settings::set('app_vip_paycontent_discount', _between_((int)($request->input('app_vip_paycontent_discount')), 0, 100), true);
  119. Settings::set('app_vip_ad_shut', $request->input('app_vip_ad_shut') ? 1 : 0, true);
  120. Settings::set('app_vip_anonymous_only', $request->input('app_vip_anonymous_only') ? 1 : 0, true);
  121. $__global_config_version__ = Settings::get('__global_config_version__', 1) + 1;
  122. Settings::set('__global_config_version__', $__global_config_version__);
  123. GatewayUtils::success('all', 13, [ 'version' => $__global_config_version__, 'file' => basename(__FILE__) ]);
  124. return $this->response()->success('成功!');
  125. }
  126. }