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, // 是否开启秒杀 ]; } }