'弹出内容公告', 'image' => '弹出图片公告', 'update' => '弹出更新公告']; public const PLATFORMS = ['PC' => 'PC', 'H5' => 'H5', 'APP' => 'App']; public const FREQUENCIES = ['daily_first_login' => '每日首次登录', 'every_login' => '每次登录']; public const CLICKS = ['none' => '无链接', 'external' => '外站链接', 'internal' => '站内相对路径']; public const STATES = ['disabled' => '关闭', 'scheduled' => '未开始', 'active' => '展示中', 'expired' => '已结束']; public static function state(array $row, string $now): string { if ((int) $row['status'] !== 1) return 'disabled'; if ($row['publish_at'] > $now) return 'scheduled'; if ($row['end_at'] !== null && $row['end_at'] <= $now) return 'expired'; return 'active'; } public static function options(array $values): array { $result = []; foreach ($values as $value => $label) $result[] = compact('value', 'label'); return $result; } }