first commit

This commit is contained in:
liu
2026-07-13 15:23:29 +08:00
commit 50885a98c8
473 changed files with 33772 additions and 0 deletions
@@ -0,0 +1,35 @@
<?php
namespace Modules\SystemTool\Http\Requests;
use Illuminate\Validation\Rules\Exists;
use Modules\Common\Http\Requests\BaseFormRequest;
use Modules\SystemTool\Models\SysFileModel;
class SysCarouselFormRequest extends BaseFormRequest
{
protected $stopOnFirstFailure = true;
public function rules(): array
{
return [
'title' => 'required|string|max:100',
'image_id' => ['required', 'integer', new Exists(SysFileModel::class, 'id')],
'link' => 'nullable|string|max:500',
'status' => 'nullable|integer|in:0,1',
'sort' => 'nullable|integer',
];
}
public function messages(): array
{
return [
'title.required' => '轮播图标题是必填的',
'title.max' => '轮播图标题不能超过 :max 个字符',
'image_id.required' => '轮播图图片是必填的',
'link.max' => '跳转链接不能超过 :max 个字符',
'status.in' => '状态值只能是 0(启用)或 1(禁用)',
'sort.integer' => '排序必须是整数',
];
}
}
@@ -0,0 +1,52 @@
<?php
namespace Modules\SystemTool\Http\Requests;
use Illuminate\Validation\Rule;
use Modules\Common\Http\Requests\BaseFormRequest;
class SysDictFormRequest extends BaseFormRequest
{
protected $stopOnFirstFailure = true;
public function rules(): array
{
if (!$this->isUpdate()) {
return [
'name' => 'required|max:100',
'code' => 'required|max:100|unique:sys_dict,code',
'describe' => 'nullable|max:500',
'status' => 'required|in:0,1',
'sort' => 'nullable|integer|min:0',
];
} else {
$id = $this->route('id');
return [
'name' => 'required|max:100',
'code' => [
'required',
'max:100',
Rule::unique('sys_dict', 'code')->ignore($id)
],
'describe' => 'nullable|max:500',
'status' => 'required|in:0,1',
'sort' => 'nullable|integer|min:0',
];
}
}
public function messages(): array
{
return [
'name.required' => '字典名称不能为空',
'name.max' => '字典名称不能超过100个字符',
'code.required' => '字典编码不能为空',
'code.max' => '字典编码不能超过100个字符',
'code.unique' => '字典编码已存在',
'status.required' => '状态不能为空',
'status.in' => '状态格式错误',
'sort.integer' => '排序必须为整数',
'sort.min' => '排序不能小于0',
];
}
}
@@ -0,0 +1,67 @@
<?php
namespace Modules\SystemTool\Http\Requests;
use Illuminate\Validation\Rule;
use Modules\Common\Http\Requests\BaseFormRequest;
class SysDictItemFormRequest extends BaseFormRequest
{
protected $stopOnFirstFailure = true;
public function rules(): array
{
if (!$this->isUpdate()) {
$dict_id = $this->input('dict_id');
return [
'dict_id' => 'required|exists:sys_dict,id',
'label' => 'required|max:100',
'value' => [
'required',
'max:100',
Rule::unique('sys_dict_item')->where(function ($query) use ($dict_id) {
return $query->where('dict_id', $dict_id);
})
],
'color' => 'nullable|string',
'status' => 'required|in:0,1',
'sort' => 'nullable|integer|min:0',
];
} else {
$id = $this->route('id');
$dict_id = $this->input('dict_id');
return [
'dict_id' => 'required|exists:sys_dict,id',
'label' => 'required|max:100',
'value' => [
'required',
'max:100',
Rule::unique('sys_dict_item')->where(function ($query) use ($dict_id) {
return $query->where('dict_id', $dict_id);
})->ignore($id)
],
'color' => 'nullable|string',
'status' => 'required|in:0,1',
'sort' => 'nullable|integer|min:0',
];
}
}
public function messages(): array
{
return [
'dict_id.required' => '字典ID不能为空',
'dict_id.exists' => '字典不存在',
'label.required' => '字典标签不能为空',
'label.max' => '字典标签不能超过100个字符',
'value.required' => '字典键值不能为空',
'value.max' => '字典键值不能超过100个字符',
'value.unique' => '该字典下已存在相同的键值',
'color.in' => '颜色格式错误',
'status.required' => '状态不能为空',
'status.in' => '状态格式错误',
'sort.integer' => '排序必须为整数',
'sort.min' => '排序不能小于0',
];
}
}
@@ -0,0 +1,50 @@
<?php
namespace Modules\SystemTool\Http\Requests;
use Illuminate\Support\Facades\DB;
use Modules\Common\Http\Requests\BaseFormRequest;
class SysFileGroupFormRequest extends BaseFormRequest
{
protected $stopOnFirstFailure = true;
public function rules(): array
{
if (!$this->isUpdate()) {
return [
'parent_id' => [
'required',
'integer',
function ($attribute, $value, $fail) {
if ($value != 0 && !DB::table('sys_file_group')->where('id', $value)->exists()) {
$fail('选择的上级分组不存在。');
}
},
],
'name' => 'required|string|max:255',
'describe' => 'sometimes|string|max:500',
'sort' => 'sometimes|integer|min:0',
];
} else {
return [
'name' => 'required|string|max:255',
'describe' => 'sometimes|string|max:500',
'sort' => 'sometimes|integer|min:0',
];
}
}
public function messages(): array
{
return [
'name.required' => '分组名称不能为空',
'name.string' => '分组名称必须是字符串',
'name.max' => '分组名称不能超过50个字符',
'sort.integer' => '分组排序必须是整数',
'sort.min' => '分组排序不能为负数',
'describe.string' => '分组描述必须是字符串',
'describe.max' => '分组描述不能超过500个字符',
];
}
}
@@ -0,0 +1,44 @@
<?php
namespace Modules\SystemTool\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\DB;
class SysFileMoveOrCopyRequest extends FormRequest
{
public function rules(): array
{
return [
'group_id' => [
'required',
'integer',
function ($attribute, $value, $fail) {
if ($value != 0 && !DB::table('sys_file_group')->where('id', $value)->exists()) {
$fail('选择的上级部门不存在。');
}
},
],
'ids' => [
'required',
function ($attribute, $value, $fail) {
// 检查是否为数字
if (is_numeric($value)) {
return;
}
// 检查是否为数字数组
if (is_array($value)) {
foreach ($value as $item) {
if (!is_numeric($item)) {
$fail("$attribute 中的元素必须全部是数字");
return;
}
}
return;
}
$fail("$attribute 必须是数字或数字数组");
},
]
];
}
}
@@ -0,0 +1,35 @@
<?php
namespace Modules\SystemTool\Http\Requests;
use Illuminate\Validation\Rules\Exists;
use Modules\Common\Http\Requests\BaseFormRequest;
use Modules\SystemTool\Models\SysFileModel;
class SysGridNavFormRequest extends BaseFormRequest
{
protected $stopOnFirstFailure = true;
public function rules(): array
{
return [
'title' => 'required|string|max:100',
'image_id' => ['required', 'integer', new Exists(SysFileModel::class, 'id')],
'link' => 'nullable|string|max:500',
'status' => 'nullable|integer|in:0,1',
'sort' => 'nullable|integer',
];
}
public function messages(): array
{
return [
'title.required' => '导航标题是必填的',
'title.max' => '导航标题不能超过 :max 个字符',
'image_id.required' => '导航图标是必填的',
'link.max' => '跳转链接不能超过 :max 个字符',
'status.in' => '状态值只能是 0(启用)或 1(禁用)',
'sort.integer' => '排序必须是整数',
];
}
}
@@ -0,0 +1,40 @@
<?php
namespace Modules\SystemTool\Http\Requests;
use Illuminate\Validation\Rule;
use Modules\Common\Http\Requests\BaseFormRequest;
use Modules\SystemTool\Models\SysSiteConfigGroupModel;
class SysSiteConfigGroupFormRequest extends BaseFormRequest
{
protected $stopOnFirstFailure = true;
public function rules(): array
{
if (!$this->isUpdate()) {
return [
'key' => ['required', Rule::unique(SysSiteConfigGroupModel::class, 'key')],
'title' => 'required',
'remark' => 'sometimes|required',
];
} else {
$id = $this->route('id');
return [
'key' => ['required', Rule::unique(SysSiteConfigGroupModel::class, 'key')->ignore($id)],
'title' => 'required',
'remark' => 'sometimes|required',
];
}
}
public function messages(): array
{
return [
'key.required' => '键名字段是必填的',
'key.unique' => '键名已存在',
'title.required' => '标题字段是必填的',
'remark.required' => '备注字段是必填的',
];
}
}
@@ -0,0 +1,74 @@
<?php
namespace Modules\SystemTool\Http\Requests;
use Illuminate\Validation\Rules\Exists;
use Modules\Common\Http\Requests\BaseFormRequest;
use Modules\SystemTool\Models\SysSiteConfigGroupModel;
use Modules\SystemTool\Models\SysSiteConfigItemsModel;
use Modules\SystemTool\Rules\SysSiteConfigTypeRule;
class SysSiteConfigItemsFormRequest extends BaseFormRequest
{
protected $stopOnFirstFailure = true;
public function rules(): array
{
$rules = [
'title' => 'required|string',
'key' => ['required', 'string', 'min:2', 'max:255'],
'group_id' => ['required', 'integer', new Exists(SysSiteConfigGroupModel::class, 'id')],
'type' => ['required', 'string', new SysSiteConfigTypeRule],
'describe' => 'nullable|string',
'options' => [
'sometimes',
'nullable',
'string',
'regex:/^(?:[^=\n]+=[^=\n]+)(?:\n[^=\n]+=[^=\n]+)*$/',
],
'props' => [
'sometimes',
'nullable',
'string',
'regex:/^(?:[^=\n]+=[^=\n]+)(?:\n[^=\n]+=[^=\n]+)*$/',
],
'sort' => 'nullable|integer',
'values' => 'nullable|string',
];
if (!$this->isUpdate()) {
$rules['key'][] = function ($attribute, $value, $fail) {
$groupId = $this->input('group_id');
$exists = SysSiteConfigItemsModel::query()
->where('group_id', $groupId)
->where('key', $value)
->exists();
if ($exists) {
$fail('该键名在此分组中已存在');
}
};
}
return $rules;
}
public function messages(): array
{
return [
'title.required' => '标题字段是必填的',
'title.string' => '标题字段必须是字符串',
'key.required' => '键名字段是必填的',
'key.string' => '键名字段必填是字符串',
'key.min' => '键名至少需要 :min 个字符',
'key.max' => '键名不能超过 :max 个字符',
'group_id.required' => '分组ID是必填的',
'group_id.exists' => '选择的分组不存在',
'type.required' => '类型字段是必填的',
'describe.string' => '描述必须是字符串',
'options.regex' => '选项格式不正确,应为 key=value 格式,多个用换行分隔',
'props.regex' => '属性格式不正确,应为 key=value 格式,多个用换行分隔',
'sort.integer' => '排序必须是整数',
'values.string' => '值必须是字符串',
];
}
}