first commit
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user