bianjunhui 2 недель назад
Родитель
Сommit
1016f49b1c

+ 9 - 2
packages/Longyi/RewardPoints/src/Console/Commands/InitializeGrowthSettings.php

@@ -176,14 +176,21 @@ class InitializeGrowthSettings extends Command
                 'key' => 'customers.growth-value',
                 'route' => 'admin.growth-value.index',
                 'icon' => 'icon-users',
-                'sort_order' => 1,
+                'sort_order' => 4,
             ],
             [
                 'name' => '等级配置',
                 'key' => 'customers.growth-levels',
                 'route' => 'admin.growth-value.levels',
                 'icon' => 'icon-list',
-                'sort_order' => 2,
+                'sort_order' => 5,
+            ],
+            [
+                'name' => '成长值设置',
+                'key' => 'customers.growth-settings',
+                'route' => 'admin.growth-value.settings',
+                'icon' => 'icon-setting',
+                'sort_order' => 6,
             ],
         ];
 

+ 79 - 1
packages/Longyi/RewardPoints/src/Http/Controllers/Admin/GrowthValueController.php

@@ -3,7 +3,9 @@
 namespace Longyi\RewardPoints\Http\Controllers\Admin;
 
 use Illuminate\Http\JsonResponse;
+use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Validator;
+use Longyi\RewardPoints\Repositories\RewardPointSettingRepository;
 use Longyi\RewardPoints\Services\GrowthValueService;
 use Longyi\RewardPoints\Models\GrowthValueCustomer;
 use Longyi\RewardPoints\Models\GrowthValueHistory;
@@ -14,9 +16,10 @@ class GrowthValueController extends Controller
 {
     protected $growthValueService;
 
-    public function __construct(GrowthValueService $growthValueService)
+    public function __construct(GrowthValueService $growthValueService,RewardPointSettingRepository $settingRepository)
     {
         $this->growthValueService = $growthValueService;
+        $this->settingRepository = $settingRepository;
     }
 
     /**
@@ -48,6 +51,81 @@ class GrowthValueController extends Controller
         return view('rewardpoints::admin.growth-value.index', compact('customers'));
     }
 
+    public function settings()
+    {
+        $groups = $this->settingRepository->getGroups();
+        $currentGroup = request('group', 'growth_value');
+        $settings = $this->settingRepository->getSettingsByGroup($currentGroup);
+
+        // 获取分组数据(包含名称和排序)
+        $groupData = $this->getGroupData($groups);
+
+        return view('rewardpoints::admin.growth-value.settings', compact('groups', 'currentGroup', 'settings', 'groupData'));
+    }
+    /**
+     * 保存配置
+     */
+    public function saveSettings(Request $request)
+    {
+        $this->validate($request, [
+            'settings' => 'required|array'
+        ]);
+
+        try {
+            $settings = $request->input('settings');
+
+            foreach ($settings as $code => $value) {
+                $this->settingRepository->setConfigValue($code, $value);
+            }
+
+            // 清除缓存
+            cache()->forget('reward_points_settings');
+
+            session()->flash('success', '配置保存成功');
+
+            $redirectRoute = isset($this->_config['redirect']) ? $this->_config['redirect'] : 'admin.growth-value.settings';
+            return redirect()->route($redirectRoute, ['group' => $request->input('group', 'general')]);
+
+        } catch (\Exception $e) {
+            session()->flash('error', '保存配置失败:' . $e->getMessage());
+            return redirect()->back()->withInput();
+        }
+    }
+    /**
+     * 获取分组数据(包含名称和排序)
+     */
+    protected function getGroupData($groups)
+    {
+        // 定义分组排序顺序
+        $groupOrder = [
+            'general' => 1,      // 通用设置
+        ];
+
+        $groupData = [];
+        foreach ($groups as $group) {
+            $groupData[$group] = [
+                'name' => $this->getGroupName($group),
+                'order' => $groupOrder[$group] ?? 99, // 如果未定义顺序,默认排在最后
+            ];
+        }
+
+        // 按照排序顺序排列
+        uasort($groupData, function($a, $b) {
+            return $a['order'] <=> $b['order'];
+        });
+
+        return $groupData;
+    }
+    /**
+     * 获取分组名称
+     */
+    protected function getGroupName($group)
+    {
+        $names = [
+            'general' => '成长值设置',
+        ];
+        return $names[$group] ?? ucfirst($group);
+    }
     /**
      * 显示某个会员的成长值详情
      */

+ 16 - 15
packages/Longyi/RewardPoints/src/Http/Controllers/Admin/SettingController.php

@@ -26,16 +26,17 @@ class SettingController extends Controller
         $groups = $this->settingRepository->getGroups();
         $currentGroup = request('group', 'general');
         $settings = $this->settingRepository->getSettingsByGroup($currentGroup);
-        
+
         // 获取分组数据(包含名称和排序)
         $groupData = $this->getGroupData($groups);
-        
+
         // 确保 _config 存在且包含必要的键
         $view = isset($this->_config['view']) ? $this->_config['view'] : 'rewardpoints::admin.settings.index';
-        
+
         return view($view, compact('groups', 'currentGroup', 'settings', 'groupData'));
     }
 
+
     /**
      * 保存配置
      */
@@ -44,28 +45,28 @@ class SettingController extends Controller
         $this->validate($request, [
             'settings' => 'required|array'
         ]);
-        
+
         try {
             $settings = $request->input('settings');
-            
+
             foreach ($settings as $code => $value) {
                 $this->settingRepository->setConfigValue($code, $value);
             }
-            
+
             // 清除缓存
             cache()->forget('reward_points_settings');
-            
+
             session()->flash('success', '配置保存成功');
-            
+
             $redirectRoute = isset($this->_config['redirect']) ? $this->_config['redirect'] : 'admin.reward-points.settings.index';
             return redirect()->route($redirectRoute, ['group' => $request->input('group', 'general')]);
-            
+
         } catch (\Exception $e) {
             session()->flash('error', '保存配置失败:' . $e->getMessage());
             return redirect()->back()->withInput();
         }
     }
-    
+
     /**
      * 获取分组数据(包含名称和排序)
      */
@@ -75,7 +76,7 @@ class SettingController extends Controller
         $groupOrder = [
             'general' => 1,      // 通用设置
         ];
-        
+
         $groupData = [];
         foreach ($groups as $group) {
             $groupData[$group] = [
@@ -83,15 +84,15 @@ class SettingController extends Controller
                 'order' => $groupOrder[$group] ?? 99, // 如果未定义顺序,默认排在最后
             ];
         }
-        
+
         // 按照排序顺序排列
         uasort($groupData, function($a, $b) {
             return $a['order'] <=> $b['order'];
         });
-        
+
         return $groupData;
     }
-    
+
     /**
      * 获取分组名称
      */
@@ -102,4 +103,4 @@ class SettingController extends Controller
         ];
         return $names[$group] ?? ucfirst($group);
     }
-}
+}

+ 109 - 0
packages/Longyi/RewardPoints/src/Resources/views/admin/growth-value/settings.blade.php

@@ -0,0 +1,109 @@
+<x-admin::layouts>
+    <x-slot:title>
+        @lang('成长值配置')
+    </x-slot>
+
+    <div class="content">
+        <div class="flex justify-between items-center gap-2.5 mb-6">
+            <p class="text-xl text-gray-800 dark:text-white font-bold">
+                @lang('成长值配置')
+            </p>
+        </div>
+
+        @if(session('success'))
+            <div class="alert alert-success mb-4">
+                {{ session('success') }}
+            </div>
+        @endif
+
+        @if(session('error'))
+            <div class="alert alert-danger mb-4">
+                {{ session('error') }}
+            </div>
+        @endif
+
+        {{-- 分组标签页 --}}
+       {{-- <div class="bg-white dark:bg-gray-900 rounded-lg shadow mb-6">
+            <div class="flex border-b border-gray-200 dark:border-gray-800 overflow-x-auto">
+                @foreach($groupData as $group => $data)
+                    <a href="{{ route('admin.reward-points.settings.index', ['group' => $group]) }}"
+                       class="px-6 py-3 text-sm font-medium whitespace-nowrap {{ $currentGroup === $group ? 'border-b-2 border-blue-600 text-blue-600' : 'text-gray-600 hover:text-gray-800 dark:text-gray-400 dark:hover:text-gray-200' }}">
+                        @lang($data['name'])
+                    </a>
+                @endforeach
+            </div>
+        </div>
+--}}
+        {{-- 配置表单 --}}
+        <div class="bg-white dark:bg-gray-900 rounded-lg shadow">
+            <form method="POST" action="{{ route('admin.growth-value.settings.save') }}">
+                @csrf
+                <input type="hidden" name="group" value="{{ $currentGroup }}">
+
+                <div class="p-6">
+                    @if($settings->isEmpty())
+                        <p class="text-gray-500">暂无配置项</p>
+                    @else
+                        @foreach($settings as $setting)
+                            <div class="mb-6">
+                                <label class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2">
+                                    {{ $setting->name }}
+                                    @if($setting->description)
+                                        <span class="text-xs text-gray-500 block mt-1">{{ $setting->description }}</span>
+                                    @endif
+                                </label>
+
+                                @switch($setting->type)
+                                    @case('boolean')
+                                        <select name="settings[{{ $setting->code }}]"
+                                                class="control w-full">
+                                            <option value="1" {{ $setting->value == '1' ? 'selected' : '' }}>启用</option>
+                                            <option value="0" {{ $setting->value == '0' ? 'selected' : '' }}>禁用</option>
+                                        </select>
+                                        @break
+
+                                    @case('number')
+                                        <input type="number"
+                                               step="any"
+                                               name="settings[{{ $setting->code }}]"
+                                               value="{{ old('settings.' . $setting->code, $setting->value) }}"
+                                               class="control w-full"
+                                               @if($setting->code === 'point_value') step="0.01" @endif
+                                               @if(in_array($setting->code, ['max_discount_percentage'])) min="0" max="100" @endif>
+                                        @break
+
+                                    @case('select')
+                                        <select name="settings[{{ $setting->code }}]"
+                                                class="control w-full">
+                                            @foreach(($setting->options ?? []) as $key => $label)
+                                                <option value="{{ $key }}" {{ $setting->value == $key ? 'selected' : '' }}>
+                                                    {{ $label }}
+                                                </option>
+                                            @endforeach
+                                        </select>
+                                        @break
+
+                                    @default
+                                        <input type="text"
+                                               name="settings[{{ $setting->code }}]"
+                                               value="{{ old('settings.' . $setting->code, $setting->value) }}"
+                                               class="control w-full">
+                                @endswitch
+
+                                @error('settings.' . $setting->code)
+                                    <span class="text-red-500 text-xs mt-1">{{ $message }}</span>
+                                @enderror
+                            </div>
+                        @endforeach
+                    @endif
+                </div>
+
+                <div class="border-t border-gray-200 dark:border-gray-800 px-6 py-4 flex justify-end">
+                    <button type="submit" class="btn-primary">
+                        @lang('保存配置')
+                    </button>
+                </div>
+            </form>
+        </div>
+    </div>
+</x-admin::layouts>

+ 9 - 9
packages/Longyi/RewardPoints/src/Resources/views/admin/settings/index.blade.php

@@ -23,7 +23,7 @@
         @endif
 
         {{-- 分组标签页 --}}
-        <div class="bg-white dark:bg-gray-900 rounded-lg shadow mb-6">
+       {{-- <div class="bg-white dark:bg-gray-900 rounded-lg shadow mb-6">
             <div class="flex border-b border-gray-200 dark:border-gray-800 overflow-x-auto">
                 @foreach($groupData as $group => $data)
                     <a href="{{ route('admin.reward-points.settings.index', ['group' => $group]) }}"
@@ -33,7 +33,7 @@
                 @endforeach
             </div>
         </div>
-
+--}}
         {{-- 配置表单 --}}
         <div class="bg-white dark:bg-gray-900 rounded-lg shadow">
             <form method="POST" action="{{ route('admin.reward-points.settings.save') }}">
@@ -55,7 +55,7 @@
 
                                 @switch($setting->type)
                                     @case('boolean')
-                                        <select name="settings[{{ $setting->code }}]" 
+                                        <select name="settings[{{ $setting->code }}]"
                                                 class="control w-full">
                                             <option value="1" {{ $setting->value == '1' ? 'selected' : '' }}>启用</option>
                                             <option value="0" {{ $setting->value == '0' ? 'selected' : '' }}>禁用</option>
@@ -63,9 +63,9 @@
                                         @break
 
                                     @case('number')
-                                        <input type="number" 
+                                        <input type="number"
                                                step="any"
-                                               name="settings[{{ $setting->code }}]" 
+                                               name="settings[{{ $setting->code }}]"
                                                value="{{ old('settings.' . $setting->code, $setting->value) }}"
                                                class="control w-full"
                                                @if($setting->code === 'point_value') step="0.01" @endif
@@ -73,7 +73,7 @@
                                         @break
 
                                     @case('select')
-                                        <select name="settings[{{ $setting->code }}]" 
+                                        <select name="settings[{{ $setting->code }}]"
                                                 class="control w-full">
                                             @foreach(($setting->options ?? []) as $key => $label)
                                                 <option value="{{ $key }}" {{ $setting->value == $key ? 'selected' : '' }}>
@@ -84,8 +84,8 @@
                                         @break
 
                                     @default
-                                        <input type="text" 
-                                               name="settings[{{ $setting->code }}]" 
+                                        <input type="text"
+                                               name="settings[{{ $setting->code }}]"
                                                value="{{ old('settings.' . $setting->code, $setting->value) }}"
                                                class="control w-full">
                                 @endswitch
@@ -106,4 +106,4 @@
             </form>
         </div>
     </div>
-</x-admin::layouts>
+</x-admin::layouts>

+ 9 - 0
packages/Longyi/RewardPoints/src/Routes/routes.php

@@ -199,4 +199,13 @@ Route::group(['middleware' => ['web', 'admin'], 'prefix' => 'admin/reward-points
         'as' => 'admin.growth-value.levels.delete',
         'uses' => 'Longyi\RewardPoints\Http\Controllers\Admin\GrowthValueController@deleteLevel'
     ]);
+    Route::get('growth-value-settings', [
+        'as' => 'admin.growth-value.settings',
+        'uses' => 'Longyi\RewardPoints\Http\Controllers\Admin\GrowthValueController@settings'
+    ]);
+
+    Route::post('growth-value-settings/save', [
+        'as' => 'admin.growth-value.settings.save',
+        'uses' => 'Longyi\RewardPoints\Http\Controllers\Admin\GrowthValueController@saveSettings'
+    ]);
 });