You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
aquaculture/app/Admin/Controllers/SettingController.php

116 lines
4.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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