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.

83 lines
2.3 KiB

6 days ago
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class DictItem extends Model
{
use HasFactory;
protected $fillable = [
'dict_type',
'dict_name',
'remark',
'dict_sort',
'item_label',
'item_value',
'item_remark',
'sort',
'is_active',
];
protected $casts = [
'is_active' => 'boolean',
];
6 days ago
/**
* @return array<int, array{value: string, label: string}>
*/
public static function activeOptions(string $dictType): array
{
return static::query()
->where('dict_type', $dictType)
->where('is_active', true)
->orderBy('sort')
->orderBy('id')
->get(['item_value', 'item_label'])
->map(fn ($r) => [
'value' => (string) $r->item_value,
'label' => (string) $r->item_label,
])
->values()
->all();
}
3 days ago
/**
* 场馆主题venue_type附带 item_remark 解析后的主题色,供 H5 地图与筛选一致。
*
* @return array<int, array{value: string, label: string, color: string}>
*/
public static function activeVenueTypeOptionsWithColor(): array
{
return static::query()
->where('dict_type', 'venue_type')
->where('is_active', true)
->orderBy('sort')
->orderBy('id')
->get(['item_value', 'item_label', 'item_remark'])
->map(function ($r) {
$color = '#05c9ac';
$raw = $r->item_remark;
if (is_string($raw) && trim($raw) !== '') {
$t = trim($raw);
if (! str_starts_with($t, '#')) {
$t = '#'.$t;
}
if (preg_match('/^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/', $t)) {
$color = $t;
}
}
return [
'value' => (string) $r->item_value,
'label' => (string) $r->item_label,
'color' => $color,
];
})
->values()
->all();
}
6 days ago
}