|
|
<?php
|
|
|
|
|
|
namespace App\Admin\Controllers;
|
|
|
|
|
|
use App\Enums\SettingKeyEnum; // 引入设置键枚举
|
|
|
use App\Models\Setting; // 引入设置模型
|
|
|
use App\Http\Controllers\Controller; // 引入控制器基类
|
|
|
use Encore\Admin\Controllers\HasResourceActions; // 引入资源操作特性
|
|
|
use Encore\Admin\Form; // 引入表单构建器
|
|
|
use Encore\Admin\Grid; // 引入网格构建器
|
|
|
use Encore\Admin\Layout\Content; // 引入内容布局
|
|
|
use Encore\Admin\Layout\Row; // 引入行布局
|
|
|
use Encore\Admin\Show; // 引入显示构建器
|
|
|
use Encore\Admin\Widgets\Box; // 引入盒子组件
|
|
|
use Illuminate\Http\Request; // 引入请求处理
|
|
|
|
|
|
class SettingController extends Controller
|
|
|
{
|
|
|
use HasResourceActions; // 使用资源操作特性,提供 CRUD 操作
|
|
|
|
|
|
/**
|
|
|
* 配置列表界面.
|
|
|
*
|
|
|
* @param Content $content
|
|
|
* @return Content
|
|
|
*/
|
|
|
public function index(Content $content)
|
|
|
{
|
|
|
return $content
|
|
|
->header('配置列表') // 设置页面标题
|
|
|
->description('') // 设置页面描述
|
|
|
->body(function (Row $row) { // 设置页面主体为行布局
|
|
|
|
|
|
// 获取所有设置键
|
|
|
$settingKeys = $this->getSettingKeys();
|
|
|
|
|
|
// 初始化设置数组
|
|
|
$settings = [];
|
|
|
foreach ($settingKeys as $key) {
|
|
|
// 获取每个设置键的值
|
|
|
$settings[$key] = setting(new SettingKeyEnum($key));
|
|
|
}
|
|
|
|
|
|
// 创建一个新的表单实例
|
|
|
$form = new \Encore\Admin\Widgets\Form($settings);
|
|
|
$form->action(admin_url('settings')); // 设置表单提交地址
|
|
|
$form->method('POST'); // 设置表单提交方法
|
|
|
$form->hidden('_token', csrf_token()); // 添加 CSRF 令牌
|
|
|
|
|
|
// 添加表单字段
|
|
|
$form->text(SettingKeyEnum::USER_INIT_PASSWORD, '会员初始密码')->required(); // 会员初始密码,必填
|
|
|
$form->decimal(SettingKeyEnum::UN_PAY_CANCEL_TIME, '订单自动取消时间')->required()->help('单位:分钟'); // 订单自动取消时间,必填,单位为分钟
|
|
|
$form->decimal(SettingKeyEnum::POST_AMOUNT, '邮费')->required()->help('设置为 0 免邮'); // 邮费,必填,设置为0时免邮
|
|
|
|
|
|
// 定义开关状态
|
|
|
$states = [
|
|
|
'on' => ['value' => 1, 'text' => '打开', 'color' => 'success'],
|
|
|
'off' => ['value' => 0, 'text' => '关闭', 'color' => 'danger'],
|
|
|
];
|
|
|
|
|
|
// 获取秒杀状态并设置提示信息
|
|
|
$seckillStatus = \setting(new SettingKeyEnum(SettingKeyEnum::IS_OPEN_SECKILL)) ? '开启' : '关闭';
|
|
|
$seckillHelp = "秒杀现在是 {$seckillStatus} 状态";
|
|
|
$form->switch(SettingKeyEnum::IS_OPEN_SECKILL, '是否开启秒杀')->states($states)->help($seckillHelp); // 是否开启秒杀开关
|
|
|
|
|
|
// 将表单放入盒子组件中并显示
|
|
|
$row->column(12, new Box('网站配置', $form));
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 存储设置.
|
|
|
*
|
|
|
* @param Request $request
|
|
|
* @return \Illuminate\Http\RedirectResponse
|
|
|
*/
|
|
|
public function store(Request $request)
|
|
|
{
|
|
|
// 对秒杀这个特殊的 key 做处理,将开关状态转换为 0 或 1
|
|
|
$val = strtolower($request->input(SettingKeyEnum::IS_OPEN_SECKILL)) == 'on' ? 1 : 0;
|
|
|
$request->offsetSet(SettingKeyEnum::IS_OPEN_SECKILL, $val); // 更新请求中的秒杀状态
|
|
|
|
|
|
// 验证输入数据
|
|
|
$this->validate($request, [
|
|
|
SettingKeyEnum::USER_INIT_PASSWORD => 'required|string', // 会员初始密码,必填且为字符串
|
|
|
SettingKeyEnum::UN_PAY_CANCEL_TIME => 'required|integer|min:0', // 订单自动取消时间,必填且为非负整数
|
|
|
SettingKeyEnum::IS_OPEN_SECKILL => 'required|int|in:0,1', // 秒杀状态,必填且为0或1
|
|
|
SettingKeyEnum::POST_AMOUNT => 'required|numeric|min:0', // 邮费,必填且为非负数字
|
|
|
]);
|
|
|
|
|
|
// 获取所有设置键并更新数据库
|
|
|
$settingKeys = $this->getSettingKeys();
|
|
|
foreach ($settingKeys as $key) {
|
|
|
Setting::query()->where('key', $key)->update(['value' => $request->input($key)]); // 更新每个设置的值
|
|
|
}
|
|
|
|
|
|
admin_success('修改成功'); // 显示成功消息
|
|
|
return back(); // 返回上一个页面
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取所有设置键.
|
|
|
*
|
|
|
* @return array
|
|
|
*/
|
|
|
private function getSettingKeys()
|
|
|
{
|
|
|
return [
|
|
|
SettingKeyEnum::USER_INIT_PASSWORD, // 会员初始密码
|
|
|
SettingKeyEnum::UN_PAY_CANCEL_TIME, // 订单自动取消时间
|
|
|
SettingKeyEnum::POST_AMOUNT, // 邮费
|
|
|
SettingKeyEnum::IS_OPEN_SECKILL, // 是否开启秒杀
|
|
|
];
|
|
|
}
|
|
|
}
|