feat: new channel
This commit is contained in:
@@ -65,7 +65,7 @@ class ChannelController extends Controller
|
||||
$paginator = $q->paginate($limit, ['*'], 'page', $page);
|
||||
|
||||
$data = collect($paginator->items())->map(function (Channel $c) {
|
||||
$row = [
|
||||
return [
|
||||
'id' => $c->id,
|
||||
'channel_id' => $c->channel_id,
|
||||
'builder_type' => $c->builderType(),
|
||||
@@ -74,15 +74,10 @@ class ChannelController extends Controller
|
||||
'remark' => $c->remark ?: '',
|
||||
'status' => (int) $c->status,
|
||||
'links' => $c->supportLinks(),
|
||||
'download_url' => null,
|
||||
'landing_path' => $c->landingPath(),
|
||||
'created_at' => optional($c->created_at)->format('Y-m-d H:i:s'),
|
||||
'updated_at' => optional($c->updated_at)->format('Y-m-d H:i:s'),
|
||||
];
|
||||
if ($c->isNewBuilder()) {
|
||||
$row['download_url'] = route($this->portal().'.channels.download', $c);
|
||||
}
|
||||
|
||||
return $row;
|
||||
})->values();
|
||||
|
||||
return response()->json([
|
||||
@@ -117,7 +112,7 @@ class ChannelController extends Controller
|
||||
}
|
||||
|
||||
$channelIdRule = $builderType === Channel::BUILDER_NEW
|
||||
? ['required', 'string', 'size:'.Channel::NEW_CHANNEL_ID_LENGTH, 'regex:/^[A-Za-z0-9]+$/']
|
||||
? ['required', 'string', 'regex:'.Channel::NEW_CHANNEL_ID_PATTERN]
|
||||
: ['required', 'string', 'size:32', 'regex:/^[a-z0-9]+$/', Rule::unique('channels', 'channel_id')];
|
||||
|
||||
$data = $request->validate([
|
||||
@@ -134,10 +129,10 @@ class ChannelController extends Controller
|
||||
if ($builderType === Channel::BUILDER_NEW) {
|
||||
$normalized = Channel::normalizeNewChannelId((string) $data['channel_id']);
|
||||
if ($normalized === null) {
|
||||
throw ValidationException::withMessages(['channel_id' => '新版渠道 ID 必须是 8 位字母或数字']);
|
||||
throw ValidationException::withMessages(['channel_id' => '新版渠道 ID 必须是 X.Y.ZZ 格式(6 位,字母或数字,例如 A.B.C1)']);
|
||||
}
|
||||
$data['channel_id'] = $normalized;
|
||||
if (Channel::query()->whereRaw('upper(channel_id) = ?', [$normalized])->exists()) {
|
||||
if (Channel::query()->where('channel_id', $normalized)->exists()) {
|
||||
throw ValidationException::withMessages(['channel_id' => '渠道 ID 已存在']);
|
||||
}
|
||||
}
|
||||
@@ -209,10 +204,8 @@ class ChannelController extends Controller
|
||||
'support_path' => $build['support_path'] ?? $channel->landingPath(),
|
||||
'weifile_path' => $build['weifile_path'] ?? null,
|
||||
'daily_path' => $build['daily_path'] ?? '',
|
||||
'zip_path' => $build['zip_path'] ?? null,
|
||||
'download_url' => $channel->isNewBuilder()
|
||||
? route('admin.channels.download', $channel)
|
||||
: null,
|
||||
'channel_dir' => $build['channel_dir'] ?? null,
|
||||
'show_alias' => $build['show_alias'] ?? null,
|
||||
],
|
||||
]);
|
||||
}
|
||||
@@ -265,19 +258,6 @@ class ChannelController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
public function download(Channel $channel, ChannelProjectService $projects)
|
||||
{
|
||||
$this->authorizeChannel($channel);
|
||||
abort_unless($channel->isNewBuilder(), 404);
|
||||
|
||||
$path = $projects->newChannelZipPath($channel->channel_id);
|
||||
abort_unless(is_file($path), 404, '安装包不存在,请重新创建渠道');
|
||||
|
||||
return response()->download($path, $channel->channel_id.'.zip', [
|
||||
'Content-Type' => 'application/zip',
|
||||
]);
|
||||
}
|
||||
|
||||
public function destroy(Channel $channel, ChannelProjectService $projects)
|
||||
{
|
||||
abort_if($this->isAgentPortal(), 403);
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Controllers\Concerns\PortalAware;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\FilterOptionsService;
|
||||
|
||||
class FilterOptionsController extends Controller
|
||||
{
|
||||
use PortalAware;
|
||||
|
||||
public function __construct(
|
||||
private readonly FilterOptionsService $options,
|
||||
) {}
|
||||
|
||||
public function channels()
|
||||
{
|
||||
return response()->json([
|
||||
'code' => 0,
|
||||
'msg' => '',
|
||||
'data' => $this->options->channelOptions($this->agent()),
|
||||
]);
|
||||
}
|
||||
|
||||
public function agents()
|
||||
{
|
||||
if ($this->isAgentPortal()) {
|
||||
return response()->json(['code' => 1, 'msg' => '无权访问', 'data' => []], 403);
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'code' => 0,
|
||||
'msg' => '',
|
||||
'data' => $this->options->agentOptions(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user