first commit

This commit is contained in:
liu
2026-05-30 17:38:49 +08:00
commit 2bcb722448
413 changed files with 43656 additions and 0 deletions
+42
View File
@@ -0,0 +1,42 @@
<?php
namespace Modules\SystemTool\Enum;
/**
* 设置类型枚举
*
* 对应 应用设置 表的 type 列,决定值存储在 s / n / e 哪个字段。
*/
enum ESettingType: int
{
case String = 10;
case Bool = 15;
case Number = 20;
case Array = 30;
case Object = 40;
case EncryptedString = 50;
/**
* 是否为字符串类型
*/
public function isString(): bool
{
return $this === self::String;
}
/**
* 是否为数字/布尔类型(存储在 n 列)
*/
public function isNumeric(): bool
{
return in_array($this, [self::Bool, self::Number], true);
}
/**
* 是否为扩展类型(存储在 e 列)
*/
public function isExtended(): bool
{
return in_array($this, [self::Array, self::Object, self::EncryptedString], true);
}
}
+91
View File
@@ -0,0 +1,91 @@
<?php
namespace Modules\SystemTool\Enum;
/**
* 枚举类:文件类型
* Class FileType
*/
enum FileType: int
{
// 图片
case IMAGE = 10;
// 音频
case AUDIO = 20;
// 视频
case VIDEO = 30;
// 压缩包
case ZIP = 40;
// 文档
case DOCUMENT = 50;
// 未知文件
case ANNEX = 99;
/**
* 获取类型名称
*/
public function name(): string
{
return match ($this) {
self::IMAGE => __('system.file.image'),
self::AUDIO => __('system.file.audio'),
self::VIDEO => __('system.file.video'),
self::ZIP => __('system.file.zip'),
self::DOCUMENT => __('system.file.document'),
self::ANNEX => __('system.file.annex'),
};
}
/**
* 获取预览地址
*/
public function previewPath(): string
{
return match ($this) {
self::IMAGE => 'static/image.svg',
self::AUDIO => 'static/audio.svg',
self::VIDEO => 'static/video.svg',
self::ZIP => 'static/zip.svg',
self::DOCUMENT => 'static/document.svg',
self::ANNEX => 'static/annex.svg',
};
}
/**
* 根据扩展名推断文件类型
*/
public static function guessFromExtension(string $extension): self
{
$extension = strtolower($extension);
foreach (self::cases() as $case) {
if ($case === self::ANNEX) continue; // 跳过 OTHER
if (in_array($extension, $case->fileExt())) {
return $case;
}
}
return self::ANNEX;
}
/**
* 文件扩展名
*/
public function fileExt(): array|string
{
return match ($this) {
self::IMAGE => ['jpg', 'jpeg', 'png', 'bmp', 'gif', 'avif', 'webp', 'svg', 'ico'],
self::AUDIO => ['mp3', 'wma', 'wav', 'ape', 'flac', 'ogg', 'aac'],
self::VIDEO => ['mp4', 'mov', 'wmv', 'flv', 'avl', 'webm', 'mkv'],
self::DOCUMENT => ['pdf', 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'txt', 'md', 'csv'],
self::ZIP => ['zip', 'rar', '7z', 'tar', 'gz'],
self::ANNEX => '*',
};
}
}
@@ -0,0 +1,88 @@
<?php
namespace Modules\SystemTool\Enum;
/**
* 系统设置类型枚举
*/
enum SiteConfigType: string
{
// 前端表单组件类型(新版,与前端保持一致)
case INPUT = 'Input'; // 输入框
case TEXTAREA = 'TextArea'; // 文本域
case INPUT_NUMBER = 'InputNumber'; // 数字输入框
case SWITCH = 'Switch'; // 开关
case RADIO = 'Radio'; // 单选框
case CHECKBOX = 'Checkbox'; // 复选框
/**
* 获取类型说明
*/
public function label(): string
{
return match($this) {
self::INPUT => '输入框',
self::TEXTAREA => '文本域',
self::INPUT_NUMBER => '数字输入框',
self::SWITCH => '开关',
self::RADIO => '单选框',
self::CHECKBOX => '复选框',
};
}
/**
* 判断是否为数字类型
*/
public function isNumeric(): bool
{
return match($this) {
self::INPUT_NUMBER => true,
default => false,
};
}
/**
* 判断是否为布尔类型
*/
public function isBoolean(): bool
{
return match($this) {
self::SWITCH => true,
default => false,
};
}
/**
* 判断是否为数组类型
*/
public function isArray(): bool
{
return match($this) {
self::CHECKBOX => true,
default => false,
};
}
/**
* 获取所有前端组件类型
*/
public static function getFrontendTypes(): array
{
return [
self::INPUT->value,
self::TEXTAREA->value,
self::INPUT_NUMBER->value,
self::SWITCH->value,
self::RADIO->value,
self::CHECKBOX->value,
];
}
/**
* 从字符串创建枚举实例(宽松匹配)
*/
public static function fromString(string $type): ?self
{
return self::tryFrom($type);
}
}