formCircleTrait.php 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <?php
  2. namespace App\Admin\Controllers\Traits\WxSettingTraits;
  3. use App\Admin\Renderable\BannerRender;
  4. use App\Admin\Renderable\IconRender;
  5. use App\Models\WxIcon;
  6. use App\Models\WxSlideshow;
  7. use App\Wen\Utils\AdminUtils;
  8. use App\Wen\Utils\FieldUtils;
  9. use App\Wen\Utils\GatewayUtils;
  10. use App\Wen\Utils\Settings;
  11. use App\Wen\Utils\SiteUtils;
  12. use Dcat\Admin\Form\NestedForm;
  13. use Dcat\Admin\Layout\Content;
  14. use Dcat\Admin\Widgets\Form;
  15. use Illuminate\Http\Request;
  16. use Illuminate\Support\Facades\Cache;
  17. trait formCircleTrait{
  18. public function index_circle(Content $content)
  19. {
  20. return $content->title(env('circle_call', '圈子').'相关')
  21. // ->body($this->buildPreviewButton())
  22. // ->body($this->newline())
  23. ->body(
  24. <<<HTML
  25. <div class="card">{$this->form_circle()->render()}</div>
  26. HTML
  27. );
  28. }
  29. protected function form_circle(){
  30. $form = new Form();
  31. $form->confirm('您确定要提交表单吗?', 'content');
  32. $form->disableResetButton();
  33. global $__MINI_GLOBAL_TENANT_ID__;
  34. if($__MINI_GLOBAL_TENANT_ID__ === 0){
  35. $form->tab('新建'.env('circle_call', '圈子'), function (Form $form) {
  36. $form->html(function () {
  37. return '<div style="background-color: powderblue;color: #414750;padding: 10px;border-radius: 5px;">小提示: 圈子和圈主名称自定义后,前端需要重新下载更新才起作用</div>';
  38. }, '');
  39. $form->text('app_circle_call_name', '圈子')->help('名称自定义:如社团')->default(Settings::get('app_circle_call_name', '圈子'));
  40. $form->text('app_circle_user_call_name', '圈主')->help('名称自定义:如社长')->default(Settings::get('app_circle_user_call_name', '圈主'));
  41. });
  42. }
  43. $form->tab('新建'.env('circle_call', '圈子'), function (Form $form) {
  44. $form->html(function () {
  45. return '<div style="background-color: powderblue;color: #414750;padding: 10px;border-radius: 5px;">小提示: 在用户点击提交之后才会检测用户的权限</div>';
  46. }, '');
  47. $form->radio('app_create_circle_permissions', '建圈权限')->options(FieldUtils::userPermissions())->default(Settings::get('app_create_circle_permissions', 0, true));
  48. });
  49. $form->tab(env('circle_call', '圈子').'页', function (Form $form) {
  50. $form->html(function () {
  51. return '<div style="background-color: powderblue;color: #414750;padding: 10px;border-radius: 5px;">格子菜单说明:<br>1、'.env('circle_call', '圈子').'页的小方格,分为全局和'.env('circle_call', '圈子').'页独立的,两者合并起作用,<a href="https://img.mini.minisns.cn/hbx/circle_square.png" target="_blank">查看效果</a><br>2、圈子页独立的格子菜单在圈子管理页配置</div>';
  52. }, '');
  53. $form->multipleSelectTable('app_circle_square_list', '全局-格子菜单')
  54. ->title('图标库')
  55. ->max(10)
  56. ->from(IconRender::make())
  57. ->model(WxIcon::class, 'id', 'name', 'selectTable:formCircleTrait:app_circle_square_list')
  58. ->help(env('circle_call', '圈子').'页面的格子菜单, <a href="'.admin_url('settings/icons').'" target="_blank">管理图标库>></a><a href="https://doc.minisns.cn/doc/70/" target="_blank" style="color: red;">(ps:如何控制顺序?)&nbsp;</a>')
  59. ->default(Settings::get('app_circle_square_list', '', true));
  60. $form->radio('app_circle_list_publish_icon', '底部发布图标')->options([0=>'居中式', 1 => '贴右侧'])->help(env('circle_call', '圈子').'页的底部发布图标')->default(Settings::get('app_circle_list_publish_icon', 0, true));
  61. $form->html(function () {
  62. return '<div style="background-color: powderblue;color: #414750;padding: 10px;border-radius: 5px;">计算热度说明:<br>1、每次发布新内容时,都给这个笔记一个热度值,这个热度值是跟当前时间成正比,也就是越新发布的,热度值越大<br>2、如果有评论,喜欢等互动,就给这个热度值增加相应的热度<br>3、评论,喜欢等互动越来越多的时候,后面增加的热度值越来越小,但不会小到0。<br>4、效果是新发表的内容有稳定的曝光,同时增加互动量高的笔记曝光时间</div>';
  63. }, '');
  64. $form->listbox('app_circle_list_sort', '内容列表排序')->options([
  65. 'weight' => '计算热度',
  66. 'created_at'=>'发表时间',
  67. 'last_reply_at' => '最后回复时间',
  68. 'id' => '文章ID'
  69. ])->help('右边代表选中')->customFormat(function ($value){
  70. return Settings::get('app_circle_list_sort', ['id'], true);
  71. });
  72. $form->radio('app_circle_list_style', '全局-内容列表样式')->options([0=>'默认',1=>'瀑布流'])->default(Settings::get('app_circle_list_style', 0, true));
  73. });
  74. $form->tab('全部'.env('circle_call', '圈子'), function (Form $form) {
  75. $form->html(function () {
  76. return '<a href="https://img.mini.minisns.cn/images/circle_all_banner.jpg" target="_blank">轮播图效果</a>';
  77. }, '');
  78. $form->multipleSelectTable('app_circles_banner', '轮播图')
  79. ->title('轮播图库')
  80. ->max(10)
  81. ->from(BannerRender::make())
  82. ->model(WxSlideshow::class, 'id', 'id', 'selectTable:formCircleTrait:app_circles_banner')
  83. ->help('<a href="'.admin_url('slideshow').'" target="_blank">运营管理-轮播图中心</a><a href="https://doc.minisns.cn/doc/70/" target="_blank" style="color: red;">(ps:如何控制顺序?)&nbsp;</a>')
  84. ->default(Settings::get('app_circles_banner', '', true));
  85. });
  86. if($__MINI_GLOBAL_TENANT_ID__ === 0){
  87. $form->tab('付费'.env('circle_call', '圈子'), function (Form $form) {
  88. $form->html(function () {
  89. return '<div style="background-color: powderblue;color: #414750;padding: 10px;border-radius: 5px;">用户付费加入'.env('circle_call', '圈子').',可设置平台的分成比例,余下的为'.env('circle_user_call', '圈主').'所有</div>';
  90. }, '');
  91. $form->rate('app_circle_follow_pay_division', '平台分成')->default(Settings::get('app_circle_follow_pay_division', 20));
  92. });
  93. }
  94. $form->action('settings/action/circle');
  95. return $form;
  96. }
  97. public function circle(Request $request){
  98. global $__MINI_GLOBAL_TENANT_ID__;
  99. SiteUtils::forget_config_data();
  100. Settings::set('app_circle_square_list', AdminUtils::_multipleSelectTable_order_process('selectTable:formCircleTrait:app_circle_square_list', $request->input('app_circle_square_list')), true, true);
  101. Settings::set('app_circle_list_publish_icon', $request->input('app_circle_list_publish_icon'), true, true);
  102. Settings::set('app_circle_list_sort', $request->input('app_circle_list_sort'), true, true);
  103. Settings::set('app_circles_banner', AdminUtils::_multipleSelectTable_order_process('selectTable:formCircleTrait:app_circles_banner', $request->input('app_circles_banner')) , true, true);
  104. Settings::set('app_create_circle_permissions', $request->input('app_create_circle_permissions'), true, true);
  105. if($__MINI_GLOBAL_TENANT_ID__ === 0){
  106. Settings::set('app_circle_call_name', trim_all_space($request->input('app_circle_call_name', '圈子')), true);
  107. Settings::set('app_circle_user_call_name', trim_all_space($request->input('app_circle_user_call_name', '圈主')), true);
  108. _update_env([
  109. 'circle_call' => trim_all_space($request->input('app_circle_call_name', '圈子')),
  110. 'circle_user_call' => trim_all_space($request->input('app_circle_user_call_name', '圈主'))
  111. ], [], 1);
  112. }
  113. Settings::set('app_circle_list_style', $request->input('app_circle_list_style'), true, true);
  114. if($__MINI_GLOBAL_TENANT_ID__ === 0){
  115. Settings::set('app_circle_follow_pay_division', _between_($request->input('app_circle_follow_pay_division'), 0, 100), true);
  116. }
  117. $__global_config_version__ = Settings::get('__global_config_version__', 1) + 1;
  118. Settings::set('__global_config_version__', $__global_config_version__);
  119. GatewayUtils::success('all', 13, [ 'version' => $__global_config_version__, 'file' => basename(__FILE__) ]);
  120. return $this->response()->success('成功!');
  121. }
  122. }