| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- <?php
- namespace App\Http\Controllers\Admin;
- use App\Game\WebChannelConfig;
- use App\Game\WebRegionConfig;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Validator;
- class WebChannelConfigController
- {
- protected $groupColors = [
- 0 => '#007bff', // blue
- 1 => '#28a745', // green
- 2 => '#ffc107', // yellow/orange
- 3 => '#dc3545', // red
- 4 => '#6f42c1', // purple
- 5 => '#17a2b8', // cyan
- 6 => '#6c757d', // gray
- 7 => '#e83e8c', // pink
- ];
- protected $specialModes = [
- 1 => 'GUEST (自动游客登录模式)',
- 2 => 'ZERO_MONEY (注册不送钱)',
- 4 => 'DISABLE_PROMOTE_INSTALL (提示安装)',
- 8 => 'PWA_BONUS (安装app送钱)',
- 16 => 'SMS_BONUS (手机验证送钱)',
- 32 => 'MAIL_BONUS (MAIL验证送钱)',
- 64 => 'FIRSTPAY_OFF30 (首冲打开30%bonus)',
- 128 => 'DEBUG_EVENT (是否开启事件日志上报)',
- 256 => 'REGION_UNIQUE (是否开启区域独立模式)',
- ];
- public function index(Request $request)
- {
- $channel = $request->input('Channel');
- $packageName = $request->input('PackageName');
- $query = WebChannelConfig::query();
- if ($channel) {
- $query->where('Channel', $channel);
- }
- if ($packageName) {
- $query->where('PackageName', 'like', '%' . $packageName . '%');
- }
- $list = $query->orderBy('Channel', 'asc')->paginate(40);
- $regions = WebRegionConfig::all();
- $regionMap = [];
- foreach ($regions as $region) {
- $regionMap[$region->RegionID] = [
- 'color' => $this->groupColors[$region->GroupID] ?? '#000000',
- 'logo' => $region->DomainUrl . $region->LogoUrl,
- 'has_logo' => !empty($region->LogoUrl)
- ];
- }
- return view('admin.web_channel_config.index', [
- 'list' => $list,
- 'channel' => $channel,
- 'packageName' => $packageName,
- 'regionMap' => $regionMap,
- ]);
- }
- public function create()
- {
- $regionList = WebRegionConfig::orderBy('GroupID', 'asc')->get();
- return view('admin.web_channel_config.add', [
- 'regionList' => $regionList,
- 'groupColors' => $this->groupColors,
- 'specialModes' => $this->specialModes
- ]);
- }
- public function store(Request $request)
- {
- $data = $request->all();
- $validator = Validator::make($data, [
- 'Channel' => 'required|integer',
- 'PackageName' => 'required|string|max:200',
- ]);
- if ($validator->fails()) {
- return apiReturnFail($validator->errors()->first());
- }
- // 处理 BonusArr
- $bonusArr = [
- $request->input('BonusArr_REG', 0),
- $request->input('BonusArr_MOBILE', 0),
- $request->input('BonusArr_EMAIL', 0),
- $request->input('BonusArr_PWA', 0),
- ];
- $data['BonusArr'] = implode('|', $bonusArr);
- // 处理 LoginOpen 和 RegOpen (多选框)
- $data['LoginOpen'] = $request->has('LoginOpen') ? implode(',', $request->input('LoginOpen')) : '';
- $data['RegOpen'] = $request->has('RegOpen') ? implode(',', $request->input('RegOpen')) : '';
- // 处理 SpecialMode (多选框位运算)
- $specialMode = 0;
- if ($request->has('SpecialMode') && is_array($request->input('SpecialMode'))) {
- foreach ($request->input('SpecialMode') as $val) {
- $specialMode += (int)$val;
- }
- }
- $data['SpecialMode'] = $specialMode;
- // 防止 null 报错
- $data['ShadowChannel'] = $data['ShadowChannel'] ?? '';
- $data['LightApk'] = $data['LightApk'] ?? '';
- $data['FullApk'] = $data['FullApk'] ?? '';
- $data['PlatformID'] = $data['PlatformID'] ?? '';
- $data['RegionID'] = $data['RegionID'] ?? '';
- $config = WebChannelConfig::create($data);
- // 同步更新 WebRegionConfig 的 BindChannels
- if (!empty($config->RegionID)) {
- $region = WebRegionConfig::where('RegionID', $config->RegionID)->first();
- if ($region) {
- $bindChannels = is_array($region->BindChannels) ? $region->BindChannels : [];
- if (!in_array($config->Channel, $bindChannels)) {
- $bindChannels[] = (int)$config->Channel;
- sort($bindChannels);
- $region->BindChannels = $bindChannels;
- $region->save();
- }
- }
- }
- return apiReturnSuc();
- }
- public function edit($id)
- {
- $info = WebChannelConfig::findOrFail($id);
- $regionList = WebRegionConfig::orderBy('GroupID', 'asc')->get();
- return view('admin.web_channel_config.edit', [
- 'info' => $info,
- 'regionList' => $regionList,
- 'groupColors' => $this->groupColors,
- 'specialModes' => $this->specialModes
- ]);
- }
- public function update(Request $request, $id)
- {
- $data = $request->all();
- $info = WebChannelConfig::findOrFail($id);
-
- $validator = Validator::make($data, [
- 'PackageName' => 'required|string|max:200',
- ]);
- if ($validator->fails()) {
- return apiReturnFail($validator->errors()->first());
- }
- // 确保 Channel 不被修改
- unset($data['Channel']);
- // 处理 BonusArr
- $bonusArr = [
- $request->input('BonusArr_REG', 0),
- $request->input('BonusArr_MOBILE', 0),
- $request->input('BonusArr_EMAIL', 0),
- $request->input('BonusArr_PWA', 0),
- ];
- $data['BonusArr'] = implode('|', $bonusArr);
- // 处理 LoginOpen 和 RegOpen (多选框)
- $data['LoginOpen'] = $request->has('LoginOpen') ? implode(',', $request->input('LoginOpen')) : '';
- $data['RegOpen'] = $request->has('RegOpen') ? implode(',', $request->input('RegOpen')) : '';
- // 处理 SpecialMode (多选框位运算)
- $specialMode = 0;
- if ($request->has('SpecialMode') && is_array($request->input('SpecialMode'))) {
- foreach ($request->input('SpecialMode') as $val) {
- $specialMode += (int)$val;
- }
- }
- $data['SpecialMode'] = $specialMode;
- // 防止 null 报错
- $data['ShadowChannel'] = $data['ShadowChannel'] ?? '';
- $data['LightApk'] = $data['LightApk'] ?? '';
- $data['FullApk'] = $data['FullApk'] ?? '';
- $data['PlatformID'] = $data['PlatformID'] ?? '';
- $data['RegionID'] = $data['RegionID'] ?? '';
- $oldRegionID = $info->RegionID;
- $oldChannel = $info->Channel;
- $oldSpecialMode = $info->SpecialMode;
- // 一旦启用 REGION_UNIQUE,RegionID 不可更换同时 REGION_UNIQUE 选项不可更改
- if (($oldSpecialMode & 256) == 256) {
- $data['RegionID'] = $oldRegionID;
- if (!in_array(256, $request->input('SpecialMode', []))) {
- $specialMode += 256;
- $data['SpecialMode'] = $specialMode;
- }
- }
- $info->update($data);
- // 如果 RegionID 或 Channel 发生变化,需要同步更新 WebRegionConfig
- if ($oldRegionID != $info->RegionID || $oldChannel != $info->Channel) {
- // 1. 从旧的 RegionID 中移除旧的 Channel
- if (!empty($oldRegionID)) {
- $oldRegion = WebRegionConfig::where('RegionID', $oldRegionID)->first();
- if ($oldRegion) {
- $bindChannels = is_array($oldRegion->BindChannels) ? $oldRegion->BindChannels : [];
- $key = array_search($oldChannel, $bindChannels);
- if ($key !== false) {
- unset($bindChannels[$key]);
- $oldRegion->BindChannels = array_values($bindChannels);
- $oldRegion->save();
- }
- }
- }
- // 2. 向新的 RegionID 中添加新的 Channel
- if (!empty($info->RegionID)) {
- $newRegion = WebRegionConfig::where('RegionID', $info->RegionID)->first();
- if ($newRegion) {
- $bindChannels = is_array($newRegion->BindChannels) ? $newRegion->BindChannels : [];
- if (!in_array($info->Channel, $bindChannels)) {
- $bindChannels[] = (int)$info->Channel;
- sort($bindChannels);
- $newRegion->BindChannels = $bindChannels;
- $newRegion->save();
- }
- }
- }
- }
- return apiReturnSuc();
- }
- public function destroy($id)
- {
- $info = WebChannelConfig::findOrFail($id);
- $channel = $info->Channel;
- $regionID = $info->RegionID;
- $info->delete();
- // 删除时,从 WebRegionConfig 的 BindChannels 中移除该 Channel
- if (!empty($regionID)) {
- $region = WebRegionConfig::where('RegionID', $regionID)->first();
- if ($region) {
- $bindChannels = is_array($region->BindChannels) ? $region->BindChannels : [];
- $key = array_search($channel, $bindChannels);
- if ($key !== false) {
- unset($bindChannels[$key]);
- $region->BindChannels = array_values($bindChannels);
- $region->save();
- }
- }
- }
- return apiReturnSuc();
- }
- }
|