Przeglądaj źródła

通用游戏配置

Tree 1 dzień temu
rodzic
commit
e129716330

+ 226 - 18
app/Http/Controllers/Admin/GameSomeConfigController.php

@@ -4,33 +4,56 @@ namespace App\Http\Controllers\Admin;
 
 
 use Illuminate\Http\Request;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\DB;
-use Illuminate\Support\Facades\Redis;
 
 
 class GameSomeConfigController
 class GameSomeConfigController
 {
 {
+    const CONFIG_TABLE = 'QPPlatformDB.dbo.GameSomeConfig';
+
+    // 游戏卡片来源表(与 /admin/game_site/builder 游戏卡片编辑保持一致)
+    const GAME_TABLE = 'webgame.games';
+
+    /**
+     * 品牌厂商分组:展示名 => webgame.games.brand 中对应的取值。
+     * 取值与 webgame.games.brand 实际存储一致;如后续新增厂商在此追加即可。
+     */
+    private static $brandGroups = [
+        'PGSoft'        => ['PGSoft'],
+        'JILI'          => ['JILI'],
+        'PragmaticPlay' => ['PP'],
+        'IGT'           => ['IGT'],
+        'Hacksaw'       => ['Hacksaw'],
+    ];
+
     /**
     /**
      * 个控回报配置列表(可编辑)
      * 个控回报配置列表(可编辑)
      */
      */
     public function index(Request $request)
     public function index(Request $request)
     {
     {
         // 获取游戏ID,默认为0(通用配置)
         // 获取游戏ID,默认为0(通用配置)
-        $gameId = $request->input('game_id', 0);
+        $gameId = (int)$request->input('game_id', 0);
 
 
         // 获取库存模式,默认为1(普通模式)
         // 获取库存模式,默认为1(普通模式)
-        $stockMode = $request->input('stock_mode', 1);
+        $stockMode = (int)$request->input('stock_mode', 1);
+        if (!in_array($stockMode, [1, 2])) {
+            $stockMode = 1;
+        }
 
 
-        // 可选的游戏列表
-        $games = [
-            0 => '通用配置',
-            '921219001' => 'IGT-双砖',
-            '1519119693' => 'Jokers Jewels',
-            '9135' => 'JILI-CRAZY 777',
-            '91302' => 'JILI-MONEY COMING EXPENDS',
-        ];
+        // 按品牌分组的开放游戏列表
+        $groupedGames = $this->getOpenGamesGroupedByBrand();
+        $games = [0 => '通用配置'];
+        foreach ($groupedGames as $brandGames) {
+            foreach ($brandGames as $game) {
+                $games[$game['id']] = $game['name'];
+            }
+        }
+
+        if (!array_key_exists($gameId, $games)) {
+            $gameId = 0;
+        }
 
 
         // 查询指定GameID和StockMode的配置
         // 查询指定GameID和StockMode的配置
         $configs = DB::connection('write')
         $configs = DB::connection('write')
-            ->table('QPPlatformDB.dbo.GameSomeConfig')
+            ->table(self::CONFIG_TABLE)
             ->where('GameID', $gameId)
             ->where('GameID', $gameId)
             ->where('StockMode', $stockMode)
             ->where('StockMode', $stockMode)
             ->orderBy('ZMin', 'asc')
             ->orderBy('ZMin', 'asc')
@@ -38,7 +61,7 @@ class GameSomeConfigController
             ->orderBy('MultiMin', 'asc')
             ->orderBy('MultiMin', 'asc')
             ->get();
             ->get();
 
 
-        return view('admin.game_some_config.index', compact('configs', 'games', 'gameId', 'stockMode'));
+        return view('admin.game_some_config.index', compact('configs', 'games', 'groupedGames', 'gameId', 'stockMode'));
     }
     }
 
 
     /**
     /**
@@ -46,6 +69,8 @@ class GameSomeConfigController
      */
      */
     public function update(Request $request)
     public function update(Request $request)
     {
     {
+        $db = DB::connection('write');
+
         try {
         try {
             $configs = $request->input('configs', []);
             $configs = $request->input('configs', []);
 
 
@@ -53,7 +78,7 @@ class GameSomeConfigController
                 return apiReturnFail('没有需要更新的数据');
                 return apiReturnFail('没有需要更新的数据');
             }
             }
 
 
-            DB::beginTransaction();
+            $db->beginTransaction();
 
 
             $updatedIds = [];
             $updatedIds = [];
             $updatedCount = 0;
             $updatedCount = 0;
@@ -89,8 +114,7 @@ class GameSomeConfigController
 
 
                 // 只有有数据时才更新
                 // 只有有数据时才更新
                 if (!empty($updateData)) {
                 if (!empty($updateData)) {
-                    DB::connection('write')
-                        ->table('QPPlatformDB.dbo.GameSomeConfig')
+                    $db->table(self::CONFIG_TABLE)
                         ->where('ConfigID', $configId)
                         ->where('ConfigID', $configId)
                         ->update($updateData);
                         ->update($updateData);
 
 
@@ -99,7 +123,7 @@ class GameSomeConfigController
                 }
                 }
             }
             }
 
 
-            DB::commit();
+            $db->commit();
 
 
             \Log::info('个控回报配置更新成功', [
             \Log::info('个控回报配置更新成功', [
                 'admin_id' => $request->session()->get('admin')->id ?? 0,
                 'admin_id' => $request->session()->get('admin')->id ?? 0,
@@ -110,7 +134,10 @@ class GameSomeConfigController
             return apiReturnSuc("配置更新成功,共更新 {$updatedCount} 条数据");
             return apiReturnSuc("配置更新成功,共更新 {$updatedCount} 条数据");
 
 
         } catch (\Exception $e) {
         } catch (\Exception $e) {
-            DB::rollBack();
+            try {
+                $db->rollBack();
+            } catch (\Exception $rollbackException) {
+            }
             \Log::error('个控回报配置更新失败', [
             \Log::error('个控回报配置更新失败', [
                 'error' => $e->getMessage(),
                 'error' => $e->getMessage(),
                 'trace' => $e->getTraceAsString()
                 'trace' => $e->getTraceAsString()
@@ -118,4 +145,185 @@ class GameSomeConfigController
             return apiReturnFail('更新失败: ' . $e->getMessage());
             return apiReturnFail('更新失败: ' . $e->getMessage());
         }
         }
     }
     }
+
+    /**
+     * 将通用配置复制到选中的开放游戏。
+     */
+    public function copyCommon(Request $request)
+    {
+        $db = DB::connection('write');
+
+        try {
+            $stockMode = (int)$request->input('stock_mode', 1);
+            if (!in_array($stockMode, [1, 2])) {
+                return apiReturnFail('库存模式参数错误');
+            }
+
+            $gameIds = $request->input('game_ids', []);
+            if (!is_array($gameIds)) {
+                $gameIds = explode(',', (string)$gameIds);
+            }
+
+            $openGameIds = $this->getOpenGameIds();
+            $targetGameIds = [];
+            foreach ($gameIds as $gameId) {
+                $gameId = (int)$gameId;
+                if ($gameId > 0 && in_array($gameId, $openGameIds)) {
+                    $targetGameIds[$gameId] = $gameId;
+                }
+            }
+            $targetGameIds = array_values($targetGameIds);
+
+            if (empty($targetGameIds)) {
+                return apiReturnFail('请先选择要复制到的游戏');
+            }
+
+            $commonConfigs = $db->table(self::CONFIG_TABLE)
+                ->where('GameID', 0)
+                ->where('StockMode', $stockMode)
+                ->orderBy('ZMin', 'asc')
+                ->orderBy('ZMax', 'asc')
+                ->orderBy('MultiMin', 'asc')
+                ->get();
+
+            if ($commonConfigs->isEmpty()) {
+                return apiReturnFail('通用配置暂无数据,无法复制');
+            }
+
+            $db->beginTransaction();
+
+            $insertedCount = 0;
+            foreach ($targetGameIds as $targetGameId) {
+                $db->table(self::CONFIG_TABLE)
+                    ->where('GameID', $targetGameId)
+                    ->where('StockMode', $stockMode)
+                    ->delete();
+
+                $rows = [];
+                foreach ($commonConfigs as $config) {
+                    $row = (array)$config;
+                    unset($row['ConfigID']);
+                    $row['GameID'] = $targetGameId;
+                    $row['StockMode'] = $stockMode;
+                    $rows[] = $row;
+                }
+
+                if (!empty($rows)) {
+                    foreach (array_chunk($rows, 100) as $chunk) {
+                        $db->table(self::CONFIG_TABLE)->insert($chunk);
+                    }
+                    $insertedCount += count($rows);
+                }
+            }
+
+            $db->commit();
+
+            \Log::info('通用个控回报配置复制成功', [
+                'admin_id' => $request->session()->get('admin')->id ?? 0,
+                'stock_mode' => $stockMode,
+                'target_game_ids' => $targetGameIds,
+                'inserted_count' => $insertedCount,
+            ]);
+
+            return apiReturnSuc([
+                'affected_games' => count($targetGameIds),
+                'inserted_count' => $insertedCount,
+            ], '', '复制成功');
+
+        } catch (\Exception $e) {
+            try {
+                $db->rollBack();
+            } catch (\Exception $rollbackException) {
+            }
+
+            \Log::error('通用个控回报配置复制失败', [
+                'error' => $e->getMessage(),
+                'trace' => $e->getTraceAsString(),
+            ]);
+
+            return apiReturnFail('复制失败: ' . $e->getMessage());
+        }
+    }
+
+    /**
+     * 获取开放游戏并按品牌分类。
+     *
+     * 数据来源与 /admin/game_site/builder 游戏卡片编辑一致:直接读取 webgame.games,
+     * 以 state>0 判定为开放游戏,按真实 brand 字段归类。
+     * GameSomeConfig.GameID 对应 webgame.games.com_gameId(统一内部gameid),
+     * 因此仅纳入 com_gameId>0 的游戏。
+     */
+    private function getOpenGamesGroupedByBrand()
+    {
+        // 收集目标品牌的所有 brand 取值,并建立 brand 取值 => 展示名 的映射
+        $brandValues = [];
+        $brandLabelMap = [];
+        foreach (self::$brandGroups as $label => $values) {
+            foreach ($values as $value) {
+                $brandValues[] = $value;
+                $brandLabelMap[strtolower($value)] = $label;
+            }
+        }
+
+        $rows = DB::connection('mysql')
+            ->table(self::GAME_TABLE)
+            ->select('com_gameId', 'title', 'brand')
+            ->where('state', '>', 0)
+            ->where('com_gameId', '>', 0)
+            ->whereIn('brand', $brandValues)
+            ->orderBy('brand', 'asc')
+            ->orderBy('title', 'asc')
+            ->get();
+
+        $groups = [];
+        $seen = [];
+        foreach ($rows as $row) {
+            $gameId = (int)$row->com_gameId;
+            if ($gameId <= 0 || isset($seen[$gameId])) {
+                continue;
+            }
+            $seen[$gameId] = true;
+
+            $label = $brandLabelMap[strtolower((string)$row->brand)] ?? (string)$row->brand;
+            if (!isset($groups[$label])) {
+                $groups[$label] = [];
+            }
+            $groups[$label][] = [
+                'id' => $gameId,
+                'name' => ($row->title !== null && $row->title !== '') ? $row->title : ('Game ' . $gameId),
+            ];
+        }
+
+        // 按 $brandGroups 定义的厂商顺序输出
+        $orderedGroups = [];
+        foreach (array_keys(self::$brandGroups) as $label) {
+            if (!empty($groups[$label])) {
+                $orderedGroups[$label] = $groups[$label];
+                unset($groups[$label]);
+            }
+        }
+        foreach ($groups as $label => $games) {
+            $orderedGroups[$label] = $games;
+        }
+
+        return $orderedGroups;
+    }
+
+    /**
+     * 获取所有开放游戏的 GameID 列表(用于复制通用配置时校验目标游戏)。
+     */
+    private function getOpenGameIds()
+    {
+        $ids = [];
+        foreach ($this->getOpenGamesGroupedByBrand() as $games) {
+            foreach ($games as $game) {
+                $gameId = (int)$game['id'];
+                if ($gameId > 0) {
+                    $ids[$gameId] = $gameId;
+                }
+            }
+        }
+
+        return array_values($ids);
+    }
 }
 }

+ 383 - 94
resources/views/admin/game_some_config/index.blade.php

@@ -1,5 +1,6 @@
 @extends('base.base')
 @extends('base.base')
 @section('base')
 @section('base')
+<meta name="csrf-token" content="{{ csrf_token() }}">
 <div class="main-panel">
 <div class="main-panel">
     <div class="content-wrapper">
     <div class="content-wrapper">
         <div class="row">
         <div class="row">
@@ -9,20 +10,34 @@
                         <h4 class="card-title">个控回报配置</h4>
                         <h4 class="card-title">个控回报配置</h4>
                         <p class="card-description">配置不同个控区间和倍率的权重调节</p>
                         <p class="card-description">配置不同个控区间和倍率的权重调节</p>
 
 
+                        @php
+                            $currentBrand = '';
+                            if ($gameId > 0) {
+                                foreach ($groupedGames as $brand => $brandGames) {
+                                    foreach ($brandGames as $game) {
+                                        if ((int)$game['id'] === (int)$gameId) {
+                                            $currentBrand = $brand;
+                                            break 2;
+                                        }
+                                    }
+                                }
+                            }
+                        @endphp
+
                         <div class="row" style="margin-bottom: 20px;">
                         <div class="row" style="margin-bottom: 20px;">
-                            <!-- 游戏选择 -->
                             <div class="col-md-6 form-group">
                             <div class="col-md-6 form-group">
-                                <label for="game_select" style="font-weight: bold; margin-right: 10px;">选择游戏:</label>
-                                <select id="game_select" class="form-control" style="width: 300px; display: inline-block;" onchange="switchGame(this.value)">
-                                    @foreach($games as $id => $name)
-                                        <option value="{{ $id }}" {{ $id == $gameId ? 'selected' : '' }}>
-                                            {{ $name }} (GameID: {{ $id }})
-                                        </option>
+                                <label style="font-weight: bold; margin-right: 10px;">选择游戏:</label>
+                                <select id="brand_select" class="form-control game-select-input">
+                                    <option value="" {{ $gameId == 0 ? 'selected' : '' }}>通用配置</option>
+                                    @foreach($groupedGames as $brand => $brandGames)
+                                        <option value="{{ $brand }}" {{ $currentBrand === $brand ? 'selected' : '' }}>{{ $brand }}</option>
                                     @endforeach
                                     @endforeach
                                 </select>
                                 </select>
+                                <select id="game_select" class="form-control game-select-input" onchange="switchGame(this.value)">
+                                    <option value="0" {{ $gameId == 0 ? 'selected' : '' }}>通用配置 (GameID: 0)</option>
+                                </select>
                             </div>
                             </div>
 
 
-                            <!-- 库存模式切换 -->
                             <div class="col-md-6 form-group">
                             <div class="col-md-6 form-group">
                                 <label style="font-weight: bold; margin-right: 10px;">库存模式:</label>
                                 <label style="font-weight: bold; margin-right: 10px;">库存模式:</label>
                                 <div class="btn-group btn-group-toggle" data-toggle="buttons">
                                 <div class="btn-group btn-group-toggle" data-toggle="buttons">
@@ -39,21 +54,146 @@
                             </div>
                             </div>
                         </div>
                         </div>
 
 
+                        <div class="copy-common-panel">
+                            <div class="copy-common-toolbar">
+                                <div>
+                                    <strong>复制通用配置到选中游戏</strong>
+                                    <span class="copy-common-note">当前库存模式:{{ $stockMode == 2 ? '库存模式' : '普通模式' }}</span>
+                                </div>
+                                <div>
+                                    <button type="button" class="btn btn-sm btn-outline-primary" onclick="selectAllCopyGames()">全选</button>
+                                    <button type="button" class="btn btn-sm btn-outline-secondary" onclick="clearCopyGames()">清空</button>
+                                    <button type="button" id="copyCommonBtn" class="btn btn-sm btn-warning" onclick="copyCommonConfig()">复制通用配置</button>
+                                    <span id="copyCommonStatus" class="copy-common-status"></span>
+                                </div>
+                            </div>
+                            <div class="copy-brand-picker">
+                                <label for="copy_brand_select" style="font-weight: bold; margin-right: 8px;">选择品牌:</label>
+                                <select id="copy_brand_select" class="form-control" style="max-width: 220px; display: inline-block;">
+                                    <option value="">请选择品牌</option>
+                                    @foreach($groupedGames as $brand => $brandGames)
+                                        @php $brandKey = md5($brand); @endphp
+                                        <option value="{{ $brandKey }}">{{ $brand }} ({{ count($brandGames) }})</option>
+                                    @endforeach
+                                </select>
+                            </div>
+                            <div id="copy_game_empty" class="copy-game-empty">请先选择品牌,再勾选要复制到的游戏</div>
+                            <div class="copy-game-groups">
+                                @foreach($groupedGames as $brand => $brandGames)
+                                    @php $brandKey = md5($brand); @endphp
+                                    <div class="copy-game-brand" data-brand="{{ $brandKey }}" style="display: none;">
+                                        <label class="copy-brand-label">
+                                            <input type="checkbox" class="copy-brand-checkbox" data-brand="{{ $brandKey }}">
+                                            全选本品牌
+                                        </label>
+                                        <div class="copy-game-list">
+                                            @foreach($brandGames as $game)
+                                                <label class="copy-game-option">
+                                                    <input type="checkbox" class="copy-game-checkbox" data-brand="{{ $brandKey }}" value="{{ $game['id'] }}">
+                                                    <span>{{ $game['name'] }}</span>
+                                                    <em>{{ $game['id'] }}</em>
+                                                </label>
+                                            @endforeach
+                                        </div>
+                                    </div>
+                                @endforeach
+                            </div>
+                        </div>
+
 <style>
 <style>
+    .game-select-input {
+        width: 220px;
+        display: inline-block;
+        margin-right: 8px;
+        vertical-align: middle;
+    }
+
+    .copy-common-panel {
+        margin-bottom: 24px;
+        padding: 16px;
+        border: 1px solid #e0e0e0;
+        border-radius: 6px;
+        background: #fafafa;
+    }
+
+    .copy-common-toolbar {
+        display: flex;
+        flex-wrap: wrap;
+        justify-content: space-between;
+        align-items: center;
+        gap: 12px;
+        margin-bottom: 12px;
+    }
+
+    .copy-common-note {
+        margin-left: 10px;
+        color: #666;
+        font-size: 13px;
+    }
+
+    .copy-common-status {
+        margin-left: 10px;
+        font-size: 13px;
+        color: #333;
+    }
+
+    .copy-brand-picker {
+        margin-bottom: 12px;
+    }
+
+    .copy-game-empty {
+        color: #999;
+        font-size: 14px;
+        padding: 8px 0;
+    }
+
+    .copy-game-groups {
+        max-height: 220px;
+        overflow-y: auto;
+    }
+
+    .copy-brand-label {
+        display: block;
+        font-weight: bold;
+        margin-bottom: 8px;
+    }
+
+    .copy-game-list {
+        display: flex;
+        flex-wrap: wrap;
+        gap: 8px 16px;
+        margin-bottom: 16px;
+    }
+
+    .copy-game-option {
+        display: inline-flex;
+        align-items: center;
+        gap: 6px;
+        margin: 0;
+        font-weight: normal;
+        cursor: pointer;
+    }
+
+    .copy-game-option em {
+        color: #888;
+        font-style: normal;
+        font-size: 12px;
+    }
+
     .table-wrapper {
     .table-wrapper {
         max-height: calc(100vh - 250px);
         max-height: calc(100vh - 250px);
         overflow-y: auto;
         overflow-y: auto;
         position: relative;
         position: relative;
         border: 1px solid #ddd;
         border: 1px solid #ddd;
     }
     }
-    
+
     .config-table {
     .config-table {
         width: 100%;
         width: 100%;
         border-collapse: collapse;
         border-collapse: collapse;
         margin: 0;
         margin: 0;
         background: #fff;
         background: #fff;
     }
     }
-    
+
     .config-table th,
     .config-table th,
     .config-table td {
     .config-table td {
         border: 1px solid #ddd;
         border: 1px solid #ddd;
@@ -61,13 +201,13 @@
         text-align: center;
         text-align: center;
         font-size: 14px;
         font-size: 14px;
     }
     }
-    
+
     .config-table thead {
     .config-table thead {
         position: sticky;
         position: sticky;
         top: 0;
         top: 0;
         z-index: 100;
         z-index: 100;
     }
     }
-    
+
     .config-table th {
     .config-table th {
         background-color: #4CAF50;
         background-color: #4CAF50;
         color: white;
         color: white;
@@ -76,15 +216,15 @@
         top: 0;
         top: 0;
         box-shadow: 0 2px 2px -1px rgba(0, 0, 0, 0.4);
         box-shadow: 0 2px 2px -1px rgba(0, 0, 0, 0.4);
     }
     }
-    
+
     .config-table tbody tr:nth-child(even) {
     .config-table tbody tr:nth-child(even) {
         background-color: #f9f9f9;
         background-color: #f9f9f9;
     }
     }
-    
+
     .config-table tbody tr:hover {
     .config-table tbody tr:hover {
         background-color: #f0f0f0;
         background-color: #f0f0f0;
     }
     }
-    
+
     .config-table input[type="number"],
     .config-table input[type="number"],
     .config-table input[type="text"] {
     .config-table input[type="text"] {
         width: 95%;
         width: 95%;
@@ -95,7 +235,7 @@
         background: transparent;
         background: transparent;
         cursor: pointer;
         cursor: pointer;
     }
     }
-    
+
     .config-table input[type="number"]:focus,
     .config-table input[type="number"]:focus,
     .config-table input[type="text"]:focus {
     .config-table input[type="text"]:focus {
         border: 1px solid #4CAF50;
         border: 1px solid #4CAF50;
@@ -103,25 +243,25 @@
         outline: none;
         outline: none;
         box-shadow: 0 0 5px rgba(76, 175, 80, 0.3);
         box-shadow: 0 0 5px rgba(76, 175, 80, 0.3);
     }
     }
-    
+
     .config-table input[type="number"]:read-only,
     .config-table input[type="number"]:read-only,
     .config-table input[type="text"]:read-only {
     .config-table input[type="text"]:read-only {
         cursor: pointer;
         cursor: pointer;
     }
     }
-    
+
     .config-table input[type="checkbox"] {
     .config-table input[type="checkbox"] {
         width: 20px;
         width: 20px;
         height: 20px;
         height: 20px;
         cursor: pointer;
         cursor: pointer;
     }
     }
-    
+
     .editable-cell {
     .editable-cell {
         cursor: pointer;
         cursor: pointer;
         position: relative;
         position: relative;
     }
     }
-    
+
     .editable-cell:hover::after {
     .editable-cell:hover::after {
-        content: '';
+        content: '\270E';
         position: absolute;
         position: absolute;
         right: 5px;
         right: 5px;
         top: 50%;
         top: 50%;
@@ -129,7 +269,7 @@
         color: #4CAF50;
         color: #4CAF50;
         font-size: 14px;
         font-size: 14px;
     }
     }
-    
+
     .group-header {
     .group-header {
         background-color: #2196F3 !important;
         background-color: #2196F3 !important;
         color: white !important;
         color: white !important;
@@ -137,27 +277,26 @@
         position: sticky;
         position: sticky;
         z-index: 50;
         z-index: 50;
     }
     }
-    
+
     .field-label {
     .field-label {
         color: #ccc;
         color: #ccc;
         font-size: 11px;
         font-size: 11px;
     }
     }
-    
-    /* 滚动条美化 */
+
     .table-wrapper::-webkit-scrollbar {
     .table-wrapper::-webkit-scrollbar {
         width: 8px;
         width: 8px;
     }
     }
-    
+
     .table-wrapper::-webkit-scrollbar-track {
     .table-wrapper::-webkit-scrollbar-track {
         background: #f1f1f1;
         background: #f1f1f1;
         border-radius: 4px;
         border-radius: 4px;
     }
     }
-    
+
     .table-wrapper::-webkit-scrollbar-thumb {
     .table-wrapper::-webkit-scrollbar-thumb {
         background: #888;
         background: #888;
         border-radius: 4px;
         border-radius: 4px;
     }
     }
-    
+
     .table-wrapper::-webkit-scrollbar-thumb:hover {
     .table-wrapper::-webkit-scrollbar-thumb:hover {
         background: #555;
         background: #555;
     }
     }
@@ -195,54 +334,54 @@
                     $isNewGroup = ($groupKey !== $currentGroup);
                     $isNewGroup = ($groupKey !== $currentGroup);
                     $currentGroup = $groupKey;
                     $currentGroup = $groupKey;
                 @endphp
                 @endphp
-                
+
                 @if($isNewGroup)
                 @if($isNewGroup)
                     <tr class="group-header">
                     <tr class="group-header">
                         <td colspan="7">个控区间:{{ $config->ZMin }} - {{ $config->ZMax }}</td>
                         <td colspan="7">个控区间:{{ $config->ZMin }} - {{ $config->ZMax }}</td>
                     </tr>
                     </tr>
                 @endif
                 @endif
-                
+
                 <tr>
                 <tr>
                     <td>{{ $config->ConfigID }}</td>
                     <td>{{ $config->ConfigID }}</td>
                     <td>
                     <td>
-                        <input type="number" 
-                               name="configs[{{ $config->ConfigID }}][ZMin]" 
-                               value="{{ $config->ZMin }}" 
-                               min="0" 
+                        <input type="number"
+                               name="configs[{{ $config->ConfigID }}][ZMin]"
+                               value="{{ $config->ZMin }}"
+                               min="0"
                                step="1">
                                step="1">
                     </td>
                     </td>
                     <td>
                     <td>
-                        <input type="number" 
-                               name="configs[{{ $config->ConfigID }}][ZMax]" 
-                               value="{{ $config->ZMax }}" 
-                               min="0" 
+                        <input type="number"
+                               name="configs[{{ $config->ConfigID }}][ZMax]"
+                               value="{{ $config->ZMax }}"
+                               min="0"
                                step="1">
                                step="1">
                     </td>
                     </td>
                     <td>
                     <td>
-                        <input type="number" 
-                               name="configs[{{ $config->ConfigID }}][MultiMin]" 
-                               value="{{ number_format($config->MultiMin, 2, '.', '') }}" 
-                               min="0" 
+                        <input type="number"
+                               name="configs[{{ $config->ConfigID }}][MultiMin]"
+                               value="{{ number_format($config->MultiMin, 2, '.', '') }}"
+                               min="0"
                                step="0.01">
                                step="0.01">
                     </td>
                     </td>
                     <td>
                     <td>
-                        <input type="number" 
-                               name="configs[{{ $config->ConfigID }}][MultiMax]" 
-                               value="{{ number_format($config->MultiMax, 2, '.', '') }}" 
-                               min="0" 
+                        <input type="number"
+                               name="configs[{{ $config->ConfigID }}][MultiMax]"
+                               value="{{ number_format($config->MultiMax, 2, '.', '') }}"
+                               min="0"
                                step="0.01">
                                step="0.01">
                     </td>
                     </td>
                     <td>
                     <td>
-                        <input type="number" 
-                               name="configs[{{ $config->ConfigID }}][Weight]" 
-                               value="{{ $config->Weight }}" 
-                               min="0" 
+                        <input type="number"
+                               name="configs[{{ $config->ConfigID }}][Weight]"
+                               value="{{ $config->Weight }}"
+                               min="0"
                                step="1">
                                step="1">
                     </td>
                     </td>
                     <td>
                     <td>
-                        <input type="text" 
-                               name="configs[{{ $config->ConfigID }}][WeightAdjust]" 
-                               value="{{ $config->WeightAdjust }}" 
+                        <input type="text"
+                               name="configs[{{ $config->ConfigID }}][WeightAdjust]"
+                               value="{{ $config->WeightAdjust }}"
                                placeholder="如: 15000-300Z"
                                placeholder="如: 15000-300Z"
                                style="width: 120px;">
                                style="width: 120px;">
                     </td>
                     </td>
@@ -261,40 +400,88 @@
 </form>
 </form>
 
 
 <script>
 <script>
-// 切换游戏
+var groupedGames = @json($groupedGames);
+var pageGameId = {{ (int)$gameId }};
+var pageBrand = @json($currentBrand);
+var currentStockMode = {{ (int)$stockMode }};
+
+function populateGameSelect(brand, selectedGameId) {
+    var $select = $('#game_select');
+    $select.empty();
+
+    if (!brand) {
+        $select.append('<option value="0">通用配置 (GameID: 0)</option>');
+        $select.val('0');
+        return;
+    }
+
+    var games = groupedGames[brand] || [];
+    var wantId = null;
+    if (selectedGameId !== null && selectedGameId !== undefined && selectedGameId !== '') {
+        wantId = parseInt(selectedGameId, 10);
+        if (isNaN(wantId)) {
+            wantId = null;
+        }
+    }
+
+    var matched = false;
+    if (wantId !== null && wantId > 0) {
+        for (var i = 0; i < games.length; i++) {
+            if (parseInt(games[i].id, 10) === wantId) {
+                matched = true;
+                break;
+            }
+        }
+    }
+
+    if (!matched) {
+        $select.append('<option value="" selected>请选择游戏</option>');
+    }
+
+    for (var j = 0; j < games.length; j++) {
+        var g = games[j];
+        var isSelected = (wantId !== null && wantId > 0 && parseInt(g.id, 10) === wantId);
+        var $opt = $('<option></option>').val(g.id).text(g.name + ' (GameID: ' + g.id + ')');
+        if (isSelected) {
+            $opt.prop('selected', true);
+        }
+        $select.append($opt);
+    }
+}
+
 function switchGame(gameId) {
 function switchGame(gameId) {
-    // 检查是否有未保存的修改
+    if (gameId === '' || gameId === null || gameId === undefined) {
+        return;
+    }
+    var parsed = parseInt(gameId, 10);
+    if (isNaN(parsed)) {
+        return;
+    }
+
     if (!checkUnsavedChanges('切换游戏')) {
     if (!checkUnsavedChanges('切换游戏')) {
-        $('#game_select').val('{{ $gameId }}');
+        populateGameSelect(pageBrand || '', pageGameId);
         return;
         return;
     }
     }
 
 
-    // 切换到选择的游戏,保持当前的库存模式
-    const stockMode = {{ $stockMode }};
-    window.location.href = '/admin/game-some-config?game_id=' + gameId + '&stock_mode=' + stockMode;
+    window.location.href = '/admin/game-some-config?game_id=' + parsed + '&stock_mode=' + currentStockMode;
 }
 }
 
 
-// 切换库存模式
 function switchStockMode(mode) {
 function switchStockMode(mode) {
-    // 检查是否有未保存的修改
     if (!checkUnsavedChanges('切换库存模式')) {
     if (!checkUnsavedChanges('切换库存模式')) {
         return;
         return;
     }
     }
 
 
-    // 切换到选择的模式,保持当前的游戏选择
-    const gameId = {{ $gameId }};
-    window.location.href = '/admin/game-some-config?game_id=' + gameId + '&stock_mode=' + mode;
+    window.location.href = '/admin/game-some-config?game_id=' + pageGameId + '&stock_mode=' + mode;
 }
 }
 
 
-// 检查是否有未保存的修改
 function checkUnsavedChanges(action) {
 function checkUnsavedChanges(action) {
-    let hasUnsavedChanges = false;
+    var hasUnsavedChanges = false;
     $('input[name^="configs"]').each(function() {
     $('input[name^="configs"]').each(function() {
-        const name = $(this).attr('name');
-        const currentValue = $(this).val();
+        var name = $(this).attr('name');
+        var currentValue = $(this).val();
         if (originalData[name] && originalData[name] !== currentValue) {
         if (originalData[name] && originalData[name] !== currentValue) {
             hasUnsavedChanges = true;
             hasUnsavedChanges = true;
-            return false; // break
+            return false;
         }
         }
     });
     });
 
 
@@ -304,69 +491,171 @@ function checkUnsavedChanges(action) {
     return true;
     return true;
 }
 }
 
 
-// 保存原始数据
-const originalData = {};
+function updateCopyBrandVisibility() {
+    var key = $('#copy_brand_select').val();
+    $('.copy-game-brand').hide();
+    if (!key) {
+        $('#copy_game_empty').show();
+        return;
+    }
+    $('#copy_game_empty').hide();
+    $('.copy-game-brand[data-brand="' + key + '"]').show();
+}
+
+function selectAllCopyGames() {
+    var key = $('#copy_brand_select').val();
+    if (!key) {
+        layer.msg('请先选择品牌', {icon: 0});
+        return;
+    }
+    $('.copy-game-brand[data-brand="' + key + '"] .copy-game-checkbox').prop('checked', true);
+    $('.copy-brand-checkbox[data-brand="' + key + '"]').prop('checked', true);
+}
+
+function clearCopyGames() {
+    $('.copy-game-checkbox, .copy-brand-checkbox').prop('checked', false);
+    $('#copyCommonStatus').text('');
+}
+
+function copyCommonConfig() {
+    var gameIds = [];
+    $('.copy-game-checkbox:checked').each(function() {
+        gameIds.push($(this).val());
+    });
+
+    if (gameIds.length === 0) {
+        layer.msg('请先勾选要复制到的游戏', {icon: 0});
+        return;
+    }
+
+    if (!confirm('确定将通用配置复制到选中的 ' + gameIds.length + ' 个游戏吗?将覆盖这些游戏当前库存模式下的配置。')) {
+        return;
+    }
+
+    $('#copyCommonBtn').prop('disabled', true);
+    $('#copyCommonStatus').text('复制中...');
+
+    $.ajax({
+        url: '/admin/game-some-config/copy-common',
+        type: 'POST',
+        headers: {
+            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
+        },
+        data: {
+            stock_mode: currentStockMode,
+            game_ids: gameIds
+        },
+        dataType: 'json',
+        success: function(res) {
+            $('#copyCommonBtn').prop('disabled', false);
+            if (res.code === 200) {
+                var msg = '复制成功';
+                if (res.data && res.data.affected_games) {
+                    msg += '(' + res.data.affected_games + ' 个游戏)';
+                }
+                $('#copyCommonStatus').text(msg);
+                layer.msg(msg, {icon: 1});
+            } else {
+                $('#copyCommonStatus').text(res.msg || '复制失败');
+                layer.msg(res.msg || '复制失败', {icon: 2});
+            }
+        },
+        error: function(xhr) {
+            $('#copyCommonBtn').prop('disabled', false);
+            $('#copyCommonStatus').text('请求失败');
+            layer.msg('请求失败: ' + xhr.statusText, {icon: 2});
+        }
+    });
+}
+
+var originalData = {};
 
 
 $(document).ready(function() {
 $(document).ready(function() {
-    // 记录所有字段的原始值
+    populateGameSelect(pageBrand || '', pageGameId);
+
+    $('#brand_select').on('change', function() {
+        var brand = $(this).val();
+        if (!brand) {
+            populateGameSelect('', null);
+            if (pageGameId !== 0) {
+                switchGame(0);
+            }
+            return;
+        }
+        populateGameSelect(brand, null);
+    });
+
+    $('#copy_brand_select').on('change', updateCopyBrandVisibility);
+    updateCopyBrandVisibility();
+
+    $(document).on('change', '.copy-brand-checkbox', function() {
+        var brandKey = $(this).data('brand');
+        var checked = $(this).prop('checked');
+        $('.copy-game-checkbox[data-brand="' + brandKey + '"]').prop('checked', checked);
+    });
+
+    $(document).on('change', '.copy-game-checkbox', function() {
+        var brandKey = $(this).data('brand');
+        var $boxes = $('.copy-game-checkbox[data-brand="' + brandKey + '"]');
+        var allChecked = $boxes.length > 0 && $boxes.filter(':checked').length === $boxes.length;
+        $('.copy-brand-checkbox[data-brand="' + brandKey + '"]').prop('checked', allChecked);
+    });
+
     $('input[name^="configs"]').each(function() {
     $('input[name^="configs"]').each(function() {
-        const name = $(this).attr('name');
+        var name = $(this).attr('name');
         if ($(this).attr('type') === 'checkbox') {
         if ($(this).attr('type') === 'checkbox') {
             originalData[name] = $(this).prop('checked');
             originalData[name] = $(this).prop('checked');
         } else {
         } else {
             originalData[name] = $(this).val();
             originalData[name] = $(this).val();
-            // 设置为只读,点击后才能编辑
             $(this).attr('readonly', true);
             $(this).attr('readonly', true);
         }
         }
     });
     });
-    
-    // 点击input时移除只读,进入编辑模式
+
     $('input[type="number"], input[type="text"]').on('click', function() {
     $('input[type="number"], input[type="text"]').on('click', function() {
         $(this).attr('readonly', false);
         $(this).attr('readonly', false);
-        $(this).select();  // 选中内容,方便修改
+        $(this).select();
     });
     });
-    
-    // 失去焦点时恢复只读
+
     $('input[type="number"], input[type="text"]').on('blur', function() {
     $('input[type="number"], input[type="text"]').on('blur', function() {
         $(this).attr('readonly', true);
         $(this).attr('readonly', true);
     });
     });
 });
 });
 
 
 function saveConfig() {
 function saveConfig() {
-    // 收集有变动的数据
-    const changedData = {};
-    let hasChanges = false;
-    
+    var changedData = {};
+    var hasChanges = false;
+
     $('input[name^="configs"]').each(function() {
     $('input[name^="configs"]').each(function() {
-        const name = $(this).attr('name');
-        let currentValue;
-        
+        var name = $(this).attr('name');
+        var currentValue;
+
         if ($(this).attr('type') === 'checkbox') {
         if ($(this).attr('type') === 'checkbox') {
             currentValue = $(this).prop('checked');
             currentValue = $(this).prop('checked');
         } else {
         } else {
             currentValue = $(this).val();
             currentValue = $(this).val();
         }
         }
-        
-        // 只添加有变动的字段
+
         if (originalData[name] !== currentValue) {
         if (originalData[name] !== currentValue) {
             changedData[name] = currentValue;
             changedData[name] = currentValue;
             hasChanges = true;
             hasChanges = true;
         }
         }
     });
     });
-    
+
     if (!hasChanges) {
     if (!hasChanges) {
         layer.msg('没有数据被修改', {icon: 0});
         layer.msg('没有数据被修改', {icon: 0});
         return;
         return;
     }
     }
-    
-    // 构建只包含变动数据的表单
-    const formData = $.param(changedData);
-    
+
+    var formData = $.param(changedData);
+
     layer.msg('正在保存 ' + Object.keys(changedData).length + ' 个变动...', {icon: 16, time: 0, shade: 0.3});
     layer.msg('正在保存 ' + Object.keys(changedData).length + ' 个变动...', {icon: 16, time: 0, shade: 0.3});
-    
+
     $.ajax({
     $.ajax({
         url: '/admin/game-some-config/update',
         url: '/admin/game-some-config/update',
         type: 'POST',
         type: 'POST',
+        headers: {
+            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
+        },
         data: formData,
         data: formData,
         dataType: 'json',
         dataType: 'json',
         success: function(res) {
         success: function(res) {

+ 65 - 64
routes/web.php

@@ -15,7 +15,7 @@ use Illuminate\Support\Facades\Route;
  */
  */
 
 
 /**
 /**
- * 需要加�? rbac 控制的路由置于�?��??
+ * 需要加入 rbac 控制的路由置于此处
  */
  */
 Route::any('/sendtele', 'Api\ApiController@sendTele');
 Route::any('/sendtele', 'Api\ApiController@sendTele');
 Route::any('/repaycheck', 'Admin\TestController@repay');
 Route::any('/repaycheck', 'Admin\TestController@repay');
@@ -66,17 +66,17 @@ Route::group([
     'middleware' => ['install.check', 'session.check', 'rbac', 'test', 'check.role'],
     'middleware' => ['install.check', 'session.check', 'rbac', 'test', 'check.role'],
 //    'as' => 'rbac',
 //    'as' => 'rbac',
 ], function ($route) {
 ], function ($route) {
-    //控制�?
+    //控制
     // $route->get('console', 'Admin\IndexController@console');
     // $route->get('console', 'Admin\IndexController@console');
-//    $route->get('console', 'Admin\GameDataController@userOnlineView')->defaults('name', '控制�?');
-    $route->get('console', 'Admin\LiveDataController@gameInfo')->defaults('name', '控制�?');
+//    $route->get('console', 'Admin\GameDataController@userOnlineView')->defaults('name', '控制');
+    $route->get('console', 'Admin\LiveDataController@gameInfo')->defaults('name', '控制');
 
 
 
 
     $route->group(['prefix' => 'admin'], function (\Illuminate\Routing\Router $route) {
     $route->group(['prefix' => 'admin'], function (\Illuminate\Routing\Router $route) {
 
 
 
 
 
 
-        // 系统健康状态�?�
+        // 系统健康状态
         $route->get('/system-health', 'Admin\SystemHealthController@index')->name('admin.system_health.index');
         $route->get('/system-health', 'Admin\SystemHealthController@index')->name('admin.system_health.index');
         $route->post('/system-health/update', 'Admin\SystemHealthController@update')->name('admin.system_health.update');
         $route->post('/system-health/update', 'Admin\SystemHealthController@update')->name('admin.system_health.update');
 
 
@@ -97,8 +97,8 @@ Route::group([
         $route->get('/game/user/onlines', 'Admin\GameDataController@userOnline');
         $route->get('/game/user/onlines', 'Admin\GameDataController@userOnline');
         $route->get('/createid', 'Admin\GameDataController@makeGameid');
         $route->get('/createid', 'Admin\GameDataController@makeGameid');
         
         
-        // 客户�?日志查�??
-        $route->get('/client_log', 'Admin\ClientLogController@index')->defaults('name', '客户�?日志');
+        // 客户端日志查询
+        $route->get('/client_log', 'Admin\ClientLogController@index')->defaults('name', '客户日志');
         $route->any('/client_log/query', 'Admin\ClientLogController@query');
         $route->any('/client_log/query', 'Admin\ClientLogController@query');
         $route->get('/pwa_bonus_log', 'Admin\PwaBonusLogController@index')->defaults('name', 'PWA奖励日志');
         $route->get('/pwa_bonus_log', 'Admin\PwaBonusLogController@index')->defaults('name', 'PWA奖励日志');
 //        $route->any('/game_data/GateBuyRecord','Admin\GameDataController@GateBuyRecord');
 //        $route->any('/game_data/GateBuyRecord','Admin\GameDataController@GateBuyRecord');
@@ -125,7 +125,7 @@ Route::group([
         $route->get('permission/update/{id}', 'Admin\AdministratorController@permissionUpdateView');
         $route->get('permission/update/{id}', 'Admin\AdministratorController@permissionUpdateView');
         $route->post('permission/update/{id}', 'Admin\AdministratorController@permissionUpdate');
         $route->post('permission/update/{id}', 'Admin\AdministratorController@permissionUpdate');
         $route->post('permission/del/{id}', 'Admin\AdministratorController@permissionDel');
         $route->post('permission/del/{id}', 'Admin\AdministratorController@permissionDel');
-        //管理员�?�
+        //管理员
         $route->get('administrator/list', 'Admin\AdministratorController@administratorList');
         $route->get('administrator/list', 'Admin\AdministratorController@administratorList');
         $route->get('administrator/add', 'Admin\AdministratorController@administratorAddView');
         $route->get('administrator/add', 'Admin\AdministratorController@administratorAddView');
         $route->post('administrator/add', 'Admin\AdministratorController@administratorAdd');
         $route->post('administrator/add', 'Admin\AdministratorController@administratorAdd');
@@ -147,7 +147,7 @@ Route::group([
         $route->get('sign-in-reward/update/{dayNumber}', 'Admin\SignInRewardController@updateView');
         $route->get('sign-in-reward/update/{dayNumber}', 'Admin\SignInRewardController@updateView');
         $route->post('sign-in-reward/update/{dayNumber}', 'Admin\SignInRewardController@update');
         $route->post('sign-in-reward/update/{dayNumber}', 'Admin\SignInRewardController@update');
         
         
-        //举报与反�?
+        //举报与反
         $route->get('/complaint/opinion', 'Admin\ComplaintController@opinionList');
         $route->get('/complaint/opinion', 'Admin\ComplaintController@opinionList');
         $route->get('/opinion/email/{id}', 'Admin\ComplaintController@emailView');
         $route->get('/opinion/email/{id}', 'Admin\ComplaintController@emailView');
         $route->post('/opinion/sendemail/{id}', 'Admin\ComplaintController@sendEmail');
         $route->post('/opinion/sendemail/{id}', 'Admin\ComplaintController@sendEmail');
@@ -157,7 +157,7 @@ Route::group([
         $route->post('/accusation/del/{id}', 'Admin\ComplaintController@accusationDel');
         $route->post('/accusation/del/{id}', 'Admin\ComplaintController@accusationDel');
         $route->get('/opinion/reply/{id}', 'Admin\ComplaintController@replyAddView');
         $route->get('/opinion/reply/{id}', 'Admin\ComplaintController@replyAddView');
         $route->post('/opinion/reply/{id}', 'Admin\ComplaintController@replyAdd');
         $route->post('/opinion/reply/{id}', 'Admin\ComplaintController@replyAdd');
-        //�?告�?�
+        //公告管
         $route->get('/notice/system', 'Admin\NoticeController@systemList');
         $route->get('/notice/system', 'Admin\NoticeController@systemList');
         $route->any('/system/add', 'Admin\NoticeController@systemAddView');
         $route->any('/system/add', 'Admin\NoticeController@systemAddView');
         $route->post('/system/update_status', 'Admin\NoticeController@updateStatus');
         $route->post('/system/update_status', 'Admin\NoticeController@updateStatus');
@@ -187,7 +187,7 @@ Route::group([
         $route->post('/punish/update/{id}', 'Admin\NoticeController@punishUpdate');
         $route->post('/punish/update/{id}', 'Admin\NoticeController@punishUpdate');
         $route->post('/punish/excel', 'Admin\NoticeController@excel');
         $route->post('/punish/excel', 'Admin\NoticeController@excel');
         //兑换管理
         //兑换管理
-        $route->get('/exchange/hailefen', 'Admin\ExchangeController@hailefen');//嗨了�? 兑换
+        $route->get('/exchange/hailefen', 'Admin\ExchangeController@hailefen');//嗨了 兑换
         $route->get('/exchange/treasure', 'Admin\ExchangeController@treasureList');
         $route->get('/exchange/treasure', 'Admin\ExchangeController@treasureList');
         $route->post('/treasure/update/{id}', 'Admin\ExchangeController@treasureUpdate');
         $route->post('/treasure/update/{id}', 'Admin\ExchangeController@treasureUpdate');
         $route->get('/exchange/shop', 'Admin\ExchangeController@shopList');
         $route->get('/exchange/shop', 'Admin\ExchangeController@shopList');
@@ -206,7 +206,7 @@ Route::group([
         $route->get('/treasure_goods/update/{id}', 'Admin\ExchangeController@treasureGoodsUpdateView');
         $route->get('/treasure_goods/update/{id}', 'Admin\ExchangeController@treasureGoodsUpdateView');
         $route->post('/treasure_goods/update/{id}', 'Admin\ExchangeController@treasureGoodsUpdate');
         $route->post('/treasure_goods/update/{id}', 'Admin\ExchangeController@treasureGoodsUpdate');
 
 
-        // Superball 活跃活动后台统�??
+        // Superball 活跃活动后台统
         $route->get('/superball/daily', 'Admin\SuperballController@daily')->defaults('name', 'Superball 每日数据');
         $route->get('/superball/daily', 'Admin\SuperballController@daily')->defaults('name', 'Superball 每日数据');
         $route->get('/superball/user-tasks', 'Admin\SuperballController@userTasks')->defaults('name', 'Superball 用户任务');
         $route->get('/superball/user-tasks', 'Admin\SuperballController@userTasks')->defaults('name', 'Superball 用户任务');
         $route->get('/superball/prizes', 'Admin\SuperballController@prizes')->defaults('name', 'Superball 奖励记录');
         $route->get('/superball/prizes', 'Admin\SuperballController@prizes')->defaults('name', 'Superball 奖励记录');
@@ -230,7 +230,7 @@ Route::group([
         $route->get('/account_cookie/list', 'Admin\AccountCookieController@index')->name('admin.account_cookie.index');
         $route->get('/account_cookie/list', 'Admin\AccountCookieController@index')->name('admin.account_cookie.index');
 
 
 
 
-        //充值�?�
+        //充值
         $route->get('/recharge/config/cash', 'Admin\WithdrawalController@cashier_channel_config')->name('admin.cashier.config');
         $route->get('/recharge/config/cash', 'Admin\WithdrawalController@cashier_channel_config')->name('admin.cashier.config');
         $route->get('/recharge/list/{history?}', 'Admin\RechargeController@rechargeList');
         $route->get('/recharge/list/{history?}', 'Admin\RechargeController@rechargeList');
         $route->get('/recharge/rank', 'Admin\RechargeController@rechargeRank');
         $route->get('/recharge/rank', 'Admin\RechargeController@rechargeRank');
@@ -248,7 +248,7 @@ Route::group([
 
 
         /*补单*/
         /*补单*/
         $route->post('/recharge/supplement/{id}', 'Admin\RechargeController@supplement');
         $route->post('/recharge/supplement/{id}', 'Admin\RechargeController@supplement');
-        // 充值�?�单退�?
+        // 充值订单退款
         $route->post('/recharge/refund/{id}', 'Admin\RechargeController@refund');
         $route->post('/recharge/refund/{id}', 'Admin\RechargeController@refund');
         // 模拟上报 FB(仅管理员)
         // 模拟上报 FB(仅管理员)
         $route->post('/recharge/fb_report_mock/{id}', 'Admin\RechargeController@fbReportMock');
         $route->post('/recharge/fb_report_mock/{id}', 'Admin\RechargeController@fbReportMock');
@@ -262,11 +262,11 @@ Route::group([
         $route->any('/recharge/month_card_channel_edit/{id}', 'Admin\RechargeController@monthCardChannelEdit');
         $route->any('/recharge/month_card_channel_edit/{id}', 'Admin\RechargeController@monthCardChannelEdit');
         $route->any('/recharge/month_card_switch/{id}', 'Admin\RechargeController@monthCardSwitch');
         $route->any('/recharge/month_card_switch/{id}', 'Admin\RechargeController@monthCardSwitch');
         $route->any('/recharge/month_card_channel_switch/{CardID}/{channel}', 'Admin\RechargeController@monthCardChannelSwitch');
         $route->any('/recharge/month_card_channel_switch/{CardID}/{channel}', 'Admin\RechargeController@monthCardChannelSwitch');
-        //充�?-玩�?�充值�?�
+        //充值-玩家充值记
         $route->get('/recharge/record', 'Admin\RechargeController@record');
         $route->get('/recharge/record', 'Admin\RechargeController@record');
         $route->any('/recharge/config/{method}', 'Admin\RechargeController@config');
         $route->any('/recharge/config/{method}', 'Admin\RechargeController@config');
         $route->post('/recharge/switch/{id}', 'Admin\RechargeController@switch_control');
         $route->post('/recharge/switch/{id}', 'Admin\RechargeController@switch_control');
-        // 充值档位修�?
+        // 充值档位修
         $route->get('/recharge/gear_list', 'Admin\RechargeController@gear_list');
         $route->get('/recharge/gear_list', 'Admin\RechargeController@gear_list');
         $route->any('/recharge/add', 'Admin\RechargeController@add');
         $route->any('/recharge/add', 'Admin\RechargeController@add');
         $route->any('/recharge/update/{id}', 'Admin\RechargeController@update');
         $route->any('/recharge/update/{id}', 'Admin\RechargeController@update');
@@ -274,16 +274,16 @@ Route::group([
         $route->any('/recharge/channel_switch/{id}', 'Admin\RechargeController@channel_switch');
         $route->any('/recharge/channel_switch/{id}', 'Admin\RechargeController@channel_switch');
         $route->get('/recharge/ip_white', 'Admin\RechargeController@ip_white');
         $route->get('/recharge/ip_white', 'Admin\RechargeController@ip_white');
         $route->any('/recharge/ip_white_update/{id}', 'Admin\RechargeController@ip_white_update');
         $route->any('/recharge/ip_white_update/{id}', 'Admin\RechargeController@ip_white_update');
-        $route->any('/recharge/gift', 'Admin\RechargeController@gift');// 充值礼�?
+        $route->any('/recharge/gift', 'Admin\RechargeController@gift');// 充值礼
 
 
-        // 充值礼包配�?
+        // 充值礼包配
         $route->get('/recharge/gift_list', 'Admin\RechargeController@gift_list');
         $route->get('/recharge/gift_list', 'Admin\RechargeController@gift_list');
         $route->any('/recharge/gift_add', 'Admin\RechargeController@gift_add');
         $route->any('/recharge/gift_add', 'Admin\RechargeController@gift_add');
         $route->any('/recharge/gift_update/{id}', 'Admin\RechargeController@gift_update');
         $route->any('/recharge/gift_update/{id}', 'Admin\RechargeController@gift_update');
         $route->post('/recharge/gift_delete/{id}', 'Admin\RechargeController@gift_delete');
         $route->post('/recharge/gift_delete/{id}', 'Admin\RechargeController@gift_delete');
 
 
         $route->get('/recharge/methods', 'Admin\RechargeController@methods');
         $route->get('/recharge/methods', 'Admin\RechargeController@methods');
-        // �?付通道成功率(�?4日)
+        // 支付通道成功率(近4日)
         $route->get('/recharge/pay_channel_rate', 'Admin\RechargeController@payChannelRate');
         $route->get('/recharge/pay_channel_rate', 'Admin\RechargeController@payChannelRate');
 
 
 
 
@@ -362,7 +362,7 @@ Route::group([
 
 
         $route->any('/web_region_config/edit/{id}', 'Admin\WebRegionConfigController@edit');
         $route->any('/web_region_config/edit/{id}', 'Admin\WebRegionConfigController@edit');
 
 
-        // 主�?�配�?管理
+        // 主题配置管理
         $route->get('/web_theme_config', 'Admin\WebThemeConfigController@index');
         $route->get('/web_theme_config', 'Admin\WebThemeConfigController@index');
         $route->any('/web_theme_config/add', 'Admin\WebThemeConfigController@add');
         $route->any('/web_theme_config/add', 'Admin\WebThemeConfigController@add');
         $route->any('/web_theme_config/edit/{id}', 'Admin\WebThemeConfigController@edit');
         $route->any('/web_theme_config/edit/{id}', 'Admin\WebThemeConfigController@edit');
@@ -406,7 +406,7 @@ Route::group([
         $route->get('/card/give', 'Admin\CardController@giveCardView');
         $route->get('/card/give', 'Admin\CardController@giveCardView');
         $route->post('/card/give', 'Admin\CardController@giveCard');
         $route->post('/card/give', 'Admin\CardController@giveCard');
         $route->get('/card/give/record', 'Admin\CardController@giveCardRecordView');
         $route->get('/card/give/record', 'Admin\CardController@giveCardRecordView');
-        //金币场�?�
+        //金币场
         $route->get('/gold/recharge', 'Admin\GoldController@rechargeList');
         $route->get('/gold/recharge', 'Admin\GoldController@rechargeList');
         $route->get('/gold/gold', 'Admin\GoldController@goldList');
         $route->get('/gold/gold', 'Admin\GoldController@goldList');
         $route->get('/gold/user', 'Admin\GoldController@userList');
         $route->get('/gold/user', 'Admin\GoldController@userList');
@@ -428,7 +428,7 @@ Route::group([
         $route->any('/gold/update_stock_log', 'Admin\GoldController@update_stock_log');
         $route->any('/gold/update_stock_log', 'Admin\GoldController@update_stock_log');
 
 
 
 
-        //�?件�?�
+        //邮件管
         $route->get('/mail/list', 'Admin\MailController@mailList');
         $route->get('/mail/list', 'Admin\MailController@mailList');
         $route->get('/mail/add', 'Admin\MailController@mailAddView');
         $route->get('/mail/add', 'Admin\MailController@mailAddView');
         $route->post('/mail/add', 'Admin\MailController@mailAdd');
         $route->post('/mail/add', 'Admin\MailController@mailAdd');
@@ -473,11 +473,11 @@ Route::group([
         $route->any('/global/userlist', 'Admin\GlobalController@userlist');
         $route->any('/global/userlist', 'Admin\GlobalController@userlist');
         $route->any('/global/user_new_list', 'Admin\GlobalController@userNewList');
         $route->any('/global/user_new_list', 'Admin\GlobalController@userNewList');
         $route->any('/global/recharge_rank', 'Admin\GlobalController@rechargeRank');
         $route->any('/global/recharge_rank', 'Admin\GlobalController@rechargeRank');
-        //用户列表 �?改�?�图页面
+        //用户列表 修改视图页面
         $route->any('/global/user_update', 'Admin\GlobalController@user_update');
         $route->any('/global/user_update', 'Admin\GlobalController@user_update');
-        //用户列表 封号,解封操�?
+        //用户列表 封号,解封操
         $route->post('/global/ban', 'Admin\GlobalController@ban')->defaults('name', '用户管理-封号 / 解封');
         $route->post('/global/ban', 'Admin\GlobalController@ban')->defaults('name', '用户管理-封号 / 解封');
-        //用户列表 radio 筛�?
+        //用户列表 radio 筛
         $route->get('global/rad', 'Admin\GlobalController@rad');
         $route->get('global/rad', 'Admin\GlobalController@rad');
         //用户列表 点ID 跳转页面
         //用户列表 点ID 跳转页面
         $route->get('global/id_find', 'Admin\GlobalController@id_find');
         $route->get('global/id_find', 'Admin\GlobalController@id_find');
@@ -486,13 +486,13 @@ Route::group([
 
 
         $route->any('global/force_stock_mode/{id}', 'Admin\GlobalController@force_stock_mode');
         $route->any('global/force_stock_mode/{id}', 'Admin\GlobalController@force_stock_mode');
 
 
-        //用户列表 关联姓名 设�?? IP
+        //用户列表 关联姓名 设 IP
         $route->get('global/join', 'Admin\GlobalController@join');
         $route->get('global/join', 'Admin\GlobalController@join');
         //用户列表-用户单控系统
         //用户列表-用户单控系统
         $route->get('global/dk', 'Admin\GlobalController@dk');
         $route->get('global/dk', 'Admin\GlobalController@dk');
         //用户列表-用户单控系统-详细列表用户
         //用户列表-用户单控系统-详细列表用户
         $route->any('global/dk_userlist', 'Admin\GlobalController@dk_userlist');
         $route->any('global/dk_userlist', 'Admin\GlobalController@dk_userlist');
-        //用户列表-用户单控系统-详细列表用户�?改页�?
+        //用户列表-用户单控系统-详细列表用户修改页面
         $route->any('global/dk_userlist_edit', 'Admin\GlobalController@dk_userlist_edit');
         $route->any('global/dk_userlist_edit', 'Admin\GlobalController@dk_userlist_edit');
         // 用户列表-用户单控系统-取消单控
         // 用户列表-用户单控系统-取消单控
         $route->post('global/cancel_dk', 'Admin\GlobalController@cancel_dk');
         $route->post('global/cancel_dk', 'Admin\GlobalController@cancel_dk');
@@ -520,7 +520,7 @@ Route::group([
         $route->any('/global/winloser', 'Admin\GlobalController@winloser');
         $route->any('/global/winloser', 'Admin\GlobalController@winloser');
         // 查看战绩
         // 查看战绩
         $route->any('/global/game_record', 'Admin\GlobalController@game_record');
         $route->any('/global/game_record', 'Admin\GlobalController@game_record');
-        //推广员�?�励报表
+        //推广员励报表
         $route->any('/global/reward', 'Admin\GlobalController@reward');
         $route->any('/global/reward', 'Admin\GlobalController@reward');
         $route->any('/global/user_source', 'Admin\GlobalController@userSource');
         $route->any('/global/user_source', 'Admin\GlobalController@userSource');
 
 
@@ -554,15 +554,15 @@ Route::group([
         $route->any('/Protect/free_protect_config_update', 'Admin\ProtectController@free_protect_config_update');
         $route->any('/Protect/free_protect_config_update', 'Admin\ProtectController@free_protect_config_update');
 
 
 
 
-        /* 系统设置  IP白名单�?�理*/
+        /* 系统设置  IP白名单理*/
         // 列表
         // 列表
-        $route->get('/IpWhiteList/list', 'Admin\IpWhiteListController@index')->defaults('name', 'IP白名单列�?');
+        $route->get('/IpWhiteList/list', 'Admin\IpWhiteListController@index')->defaults('name', 'IP白名单列');
         $route->get('/login_ip/list', 'Admin\IpWhiteListController@login_ip');
         $route->get('/login_ip/list', 'Admin\IpWhiteListController@login_ip');
         $route->get('/IpWhiteList/add', 'Admin\IpWhiteListController@add_view');
         $route->get('/IpWhiteList/add', 'Admin\IpWhiteListController@add_view');
-        $route->post('/IpWhiteList/add', 'Admin\IpWhiteListController@add')->defaults('name', 'IP白名单添加提�?');
+        $route->post('/IpWhiteList/add', 'Admin\IpWhiteListController@add')->defaults('name', 'IP白名单添加提');
         $route->get('/IpWhiteList/update/{id}', 'Admin\IpWhiteListController@update_view');
         $route->get('/IpWhiteList/update/{id}', 'Admin\IpWhiteListController@update_view');
-        $route->post('/IpWhiteList/update', 'Admin\IpWhiteListController@update')->defaults('name', 'IP白名单修改提�?');
-        $route->post('/IpWhiteList/del/{id}', 'Admin\IpWhiteListController@del')->defaults('name', 'IP白名单删�?');
+        $route->post('/IpWhiteList/update', 'Admin\IpWhiteListController@update')->defaults('name', 'IP白名单修改提');
+        $route->post('/IpWhiteList/del/{id}', 'Admin\IpWhiteListController@del')->defaults('name', 'IP白名单删');
 
 
         //日志
         //日志
         $route->get('/admin_log/list', 'Admin\AdminLogController@index');
         $route->get('/admin_log/list', 'Admin\AdminLogController@index');
@@ -614,7 +614,7 @@ Route::group([
         $route->get('/withdraw/names', 'Admin\WithdrawalController@nameStatics');
         $route->get('/withdraw/names', 'Admin\WithdrawalController@nameStatics');
 
 
 
 
-        // �?人池配置
+        // 人池配置
         $route->any('/recharge_control_config/index', 'Admin\RechargeControlConfigController@index');
         $route->any('/recharge_control_config/index', 'Admin\RechargeControlConfigController@index');
         $route->any('/recharge_control_config/add', 'Admin\RechargeControlConfigController@add');
         $route->any('/recharge_control_config/add', 'Admin\RechargeControlConfigController@add');
         $route->any('/recharge_control_config/update/{id}', 'Admin\RechargeControlConfigController@update');
         $route->any('/recharge_control_config/update/{id}', 'Admin\RechargeControlConfigController@update');
@@ -630,7 +630,7 @@ Route::group([
 
 
         /*单控操作记录*/
         /*单控操作记录*/
         $route->any('/control/record', 'Admin\ControlRecordController@index');
         $route->any('/control/record', 'Admin\ControlRecordController@index');
-        //  单控池监�?
+        //  单控池监
         $route->any('/control/monitor', 'Admin\ControlRecordController@monitor');
         $route->any('/control/monitor', 'Admin\ControlRecordController@monitor');
         $route->any('/group_control/record', 'Admin\GroupControlRecordController@record');
         $route->any('/group_control/record', 'Admin\GroupControlRecordController@record');
         $route->get('/group_control/show_config/{id}', 'Admin\GroupControlRecordController@show_config');
         $route->get('/group_control/show_config/{id}', 'Admin\GroupControlRecordController@show_config');
@@ -655,7 +655,7 @@ Route::group([
         $route->any('/group_control/LuckyGemstoneMul', 'Admin\GroupControlRecordController@LuckyGemstoneMul');
         $route->any('/group_control/LuckyGemstoneMul', 'Admin\GroupControlRecordController@LuckyGemstoneMul');
         $route->any('/group_control/LuckyGemstoneMul_update', 'Admin\GroupControlRecordController@LuckyGemstoneMul_update');
         $route->any('/group_control/LuckyGemstoneMul_update', 'Admin\GroupControlRecordController@LuckyGemstoneMul_update');
 
 
-        /*用户标�??*/
+        /*用户标*/
         $route->get('/user_tags/index', 'Admin\UserTagsController@index');
         $route->get('/user_tags/index', 'Admin\UserTagsController@index');
 
 
         // 库存变化曲线
         // 库存变化曲线
@@ -663,15 +663,15 @@ Route::group([
         $route->get('/stock/room_list', 'Admin\StockController@roomList');
         $route->get('/stock/room_list', 'Admin\StockController@roomList');
 
 
 
 
-        /*数据统�?�新后台*/
+        /*数据统新后台*/
         // 用户行为 -- 埋点数据
         // 用户行为 -- 埋点数据
         $route->get('/burying_point/index', 'Admin\BuryingPointController@index');
         $route->get('/burying_point/index', 'Admin\BuryingPointController@index');
         $route->get('/burying_point/weight', 'Admin\BuryingPointController@weight');
         $route->get('/burying_point/weight', 'Admin\BuryingPointController@weight');
         $route->post('/burying_point/update/{id}', 'Admin\BuryingPointController@update');
         $route->post('/burying_point/update/{id}', 'Admin\BuryingPointController@update');
 
 
-        // 玩�?�输赢排行�??
+        // 玩家输赢排行榜
 //        $route->get('/data_analy/score', 'Admin\DataAnalysisController@data_analy');
 //        $route->get('/data_analy/score', 'Admin\DataAnalysisController@data_analy');
-        // 数据统�?��?�
+        // 数据统计管
 //        $route->get('/game/room', 'Admin\GamesController@room');
 //        $route->get('/game/room', 'Admin\GamesController@room');
 
 
 
 
@@ -693,13 +693,13 @@ Route::group([
         $route->any('/chart/dashboard', 'Admin\ChartController@dashboard');
         $route->any('/chart/dashboard', 'Admin\ChartController@dashboard');
 
 
 
 
-        // �?信通道切换开�?
+        // 短信通道切换开关
         $route->any('/sys_sms_config/index', 'Admin\SysSmsConfigController@index');
         $route->any('/sys_sms_config/index', 'Admin\SysSmsConfigController@index');
         $route->any('/sys_sms_config/update_status/{id}', 'Admin\SysSmsConfigController@updateStatus');
         $route->any('/sys_sms_config/update_status/{id}', 'Admin\SysSmsConfigController@updateStatus');
         $route->any('/sys_sms_config/remarks/{id}', 'Admin\SysSmsConfigController@Remarks');
         $route->any('/sys_sms_config/remarks/{id}', 'Admin\SysSmsConfigController@Remarks');
         $route->any('/sys_sms_config/update/{id}', 'Admin\SysSmsConfigController@Update');
         $route->any('/sys_sms_config/update/{id}', 'Admin\SysSmsConfigController@Update');
 
 
-        // 裂变需�?
+        // 裂变需
         $route->any('/extension/verify', 'Admin\ExtensionController@verify');
         $route->any('/extension/verify', 'Admin\ExtensionController@verify');
         $route->any('/extension/verify_update/{id}', 'Admin\ExtensionController@verify_update');
         $route->any('/extension/verify_update/{id}', 'Admin\ExtensionController@verify_update');
         $route->any('/extension/register_config', 'Admin\ExtensionController@register_config');
         $route->any('/extension/register_config', 'Admin\ExtensionController@register_config');
@@ -715,12 +715,12 @@ Route::group([
         $route->any('/extension/gamecount_config_add', 'Admin\ExtensionController@gameCountConfig_add');
         $route->any('/extension/gamecount_config_add', 'Admin\ExtensionController@gameCountConfig_add');
         $route->any('/extension/gamecount_config_update/{id}', 'Admin\ExtensionController@gameCountConfig_update');
         $route->any('/extension/gamecount_config_update/{id}', 'Admin\ExtensionController@gameCountConfig_update');
         $route->any('/extension/gamecount_limit', 'Admin\ExtensionController@gameCountLimit');
         $route->any('/extension/gamecount_limit', 'Admin\ExtensionController@gameCountLimit');
-        // 彩金�?动�?�核开�?
+        // 彩金自动审核开关
         $route->any('/extension/auto_verify', 'Admin\ExtensionController@autoVerify');
         $route->any('/extension/auto_verify', 'Admin\ExtensionController@autoVerify');
         $route->any('/extension/recharge_rate', 'Admin\ExtensionController@recharge_rate');
         $route->any('/extension/recharge_rate', 'Admin\ExtensionController@recharge_rate');
 
 
 
 
-        // 新代理系统�?�理�?�?
+        // 新代理系统管理路由
         $route->any('/extension_new/verify', 'Admin\ExtensionNewController@verify')->name('admin.extension_new.verify');
         $route->any('/extension_new/verify', 'Admin\ExtensionNewController@verify')->name('admin.extension_new.verify');
         $route->any('/extension_new/verify_update/{id}', 'Admin\ExtensionNewController@verify_update')->name('admin.extension_new.verify_update');
         $route->any('/extension_new/verify_update/{id}', 'Admin\ExtensionNewController@verify_update')->name('admin.extension_new.verify_update');
         $route->any('/extension_new/register_config', 'Admin\ExtensionNewController@register_config')->name('admin.extension_new.register_config');
         $route->any('/extension_new/register_config', 'Admin\ExtensionNewController@register_config')->name('admin.extension_new.register_config');
@@ -736,10 +736,10 @@ Route::group([
         $route->any('/extension_new/gamecount_config_add', 'Admin\ExtensionNewController@gameCountConfig_add')->name('admin.extension_new.gamecount_config_add');
         $route->any('/extension_new/gamecount_config_add', 'Admin\ExtensionNewController@gameCountConfig_add')->name('admin.extension_new.gamecount_config_add');
         $route->any('/extension_new/gamecount_config_update/{id}', 'Admin\ExtensionNewController@gameCountConfig_update')->name('admin.extension_new.gamecount_config_update');
         $route->any('/extension_new/gamecount_config_update/{id}', 'Admin\ExtensionNewController@gameCountConfig_update')->name('admin.extension_new.gamecount_config_update');
         $route->any('/extension_new/gamecount_limit', 'Admin\ExtensionNewController@gameCountLimit')->name('admin.extension_new.gamecount_limit');
         $route->any('/extension_new/gamecount_limit', 'Admin\ExtensionNewController@gameCountLimit')->name('admin.extension_new.gamecount_limit');
-        // 彩金�?动�?�核开�?
+        // 彩金自动审核开关
         $route->any('/extension_new/auto_verify', 'Admin\ExtensionNewController@autoVerify')->name('admin.extension_new.auto_verify');
         $route->any('/extension_new/auto_verify', 'Admin\ExtensionNewController@autoVerify')->name('admin.extension_new.auto_verify');
         $route->any('/extension_new/recharge_rate', 'Admin\ExtensionNewController@recharge_rate')->name('admin.extension_new.recharge_rate');
         $route->any('/extension_new/recharge_rate', 'Admin\ExtensionNewController@recharge_rate')->name('admin.extension_new.recharge_rate');
-        // 绑定关系查�??
+        // 绑定关系查
         $route->any('/extension_new/daily_binding', 'Admin\ExtensionNewController@dailyBinding')->name('admin.extension_new.daily_binding');
         $route->any('/extension_new/daily_binding', 'Admin\ExtensionNewController@dailyBinding')->name('admin.extension_new.daily_binding');
         $route->any('/extension_new/reward', 'Admin\ExtensionNewController@reward')->name('admin.extension_new.reward');
         $route->any('/extension_new/reward', 'Admin\ExtensionNewController@reward')->name('admin.extension_new.reward');
         $route->any('/extension_new/bind_list', 'Admin\ExtensionNewController@bind_list')->name('admin.extension_new.bind_list');
         $route->any('/extension_new/bind_list', 'Admin\ExtensionNewController@bind_list')->name('admin.extension_new.bind_list');
@@ -748,11 +748,11 @@ Route::group([
 
 
         $route->any('/version/del_version', 'Admin\VersionController@delVersion');
         $route->any('/version/del_version', 'Admin\VersionController@delVersion');
 
 
-        // 彩金池操�?
+        // 彩金池操
         $route->any('/winnings/operate', 'Admin\WinningsController@operate');
         $route->any('/winnings/operate', 'Admin\WinningsController@operate');
         $route->any('/winnings/update/{id}', 'Admin\WinningsController@update');
         $route->any('/winnings/update/{id}', 'Admin\WinningsController@update');
 
 
-        // 验证码查�?+手机号手动绑�?
+        // 验证码查看+手机号手动绑定
         $route->any('/code/query', 'Admin\CodeController@query');
         $route->any('/code/query', 'Admin\CodeController@query');
         $route->any('/code/bind_phone/{id}', 'Admin\CodeController@bind_phone');
         $route->any('/code/bind_phone/{id}', 'Admin\CodeController@bind_phone');
 
 
@@ -770,7 +770,7 @@ Route::group([
         $route->any('/clearBomb/config', 'Admin\ClearBombController@operate');
         $route->any('/clearBomb/config', 'Admin\ClearBombController@operate');
         $route->any('/clearBomb/config_update/{id}', 'Admin\ClearBombController@config_update');
         $route->any('/clearBomb/config_update/{id}', 'Admin\ClearBombController@config_update');
 
 
-        // 拉霸世界�? 控制参数配置
+        // 拉霸世界 控制参数配置
         $route->any('/slots_world_cup/config', 'Admin\SlotsWorldCupController@operate');
         $route->any('/slots_world_cup/config', 'Admin\SlotsWorldCupController@operate');
         $route->any('/slots_world_cup/config_update/{id}', 'Admin\SlotsWorldCupController@config_update');
         $route->any('/slots_world_cup/config_update/{id}', 'Admin\SlotsWorldCupController@config_update');
 
 
@@ -791,11 +791,11 @@ Route::group([
         $route->any('/athena/config', 'Admin\AthenaController@operate');
         $route->any('/athena/config', 'Admin\AthenaController@operate');
         $route->any('/athena/config_update/{id}', 'Admin\AthenaController@config_update');
         $route->any('/athena/config_update/{id}', 'Admin\AthenaController@config_update');
 
 
-        // 开关�?�
+        // 开关
         $route->any('/switches', 'Admin\SwitchesController@index');
         $route->any('/switches', 'Admin\SwitchesController@index');
         $route->any('/switches/set_status/{id}', 'Admin\SwitchesController@setStatus');
         $route->any('/switches/set_status/{id}', 'Admin\SwitchesController@setStatus');
 
 
-        // 黑名�?
+        // 黑名
         $route->any('/blacklist', 'Admin\BlacklistController@index');
         $route->any('/blacklist', 'Admin\BlacklistController@index');
         $route->any('/blacklist/config/{id}', 'Admin\BlacklistController@config');
         $route->any('/blacklist/config/{id}', 'Admin\BlacklistController@config');
         $route->any('/blacklist/add/{UserID}', 'Admin\BlacklistController@add');
         $route->any('/blacklist/add/{UserID}', 'Admin\BlacklistController@add');
@@ -811,12 +811,12 @@ Route::group([
 
 
         $route->any('/game_data/rank','Admin\GameDataController@gameRankList');
         $route->any('/game_data/rank','Admin\GameDataController@gameRankList');
 
 
-        // 游戏输赢排�?��??
-        $route->get('/game_data/winlose_rank', 'Admin\GameWinLoseRankController@index')->defaults('name', '游戏输赢排�?��??');
+        // 游戏输赢排行榜
+        $route->get('/game_data/winlose_rank', 'Admin\GameWinLoseRankController@index')->defaults('name', '游戏输赢排行榜');
 
 
         $route->get('/game_enter_log/statistics', 'Admin\GameEnterLogController@statistics')->defaults('name', '进游戏时长统计');
         $route->get('/game_enter_log/statistics', 'Admin\GameEnterLogController@statistics')->defaults('name', '进游戏时长统计');
 
 
-        $route->any('/game_data/participation_statistics', 'Admin\GameDataController@gameParticipationStatistics')->defaults('name', '游戏参与情况统�??');
+        $route->any('/game_data/participation_statistics', 'Admin\GameDataController@gameParticipationStatistics')->defaults('name', '游戏参与情况统');
 
 
 
 
         // PG游戏参数配置
         // PG游戏参数配置
@@ -824,7 +824,7 @@ Route::group([
         $route->any('/common-config', 'Admin\CommonConfigController@index')->name('admin.common-config');
         $route->any('/common-config', 'Admin\CommonConfigController@index')->name('admin.common-config');
         $route->any('/common-config/update', 'Admin\CommonConfigController@update')->name('admin.common-config.update');
         $route->any('/common-config/update', 'Admin\CommonConfigController@update')->name('admin.common-config.update');
 
 
-        // 1234 权重配置 & 点击统�??
+        // 1234 权重配置 & 点击统
         $route->any('/weight-config', 'Admin\WeightConfigController@index')->name('admin.weight-config');
         $route->any('/weight-config', 'Admin\WeightConfigController@index')->name('admin.weight-config');
         $route->post('/weight-config/update', 'Admin\WeightConfigController@update')->name('admin.weight-config.update');
         $route->post('/weight-config/update', 'Admin\WeightConfigController@update')->name('admin.weight-config.update');
         $route->post('/weight-config/reset-stats', 'Admin\WeightConfigController@resetStats')->name('admin.weight-config.reset-stats');
         $route->post('/weight-config/reset-stats', 'Admin\WeightConfigController@resetStats')->name('admin.weight-config.reset-stats');
@@ -833,9 +833,10 @@ Route::group([
         $route->any('/pg-game-config/update', 'Admin\PGGameConfigController@update')->name('admin.pg-game-config.update');
         $route->any('/pg-game-config/update', 'Admin\PGGameConfigController@update')->name('admin.pg-game-config.update');
         $route->post('/pg-game-config/copy_all', 'Admin\PGGameConfigController@copyAll')->name('admin.pg-game-config.copy_all');
         $route->post('/pg-game-config/copy_all', 'Admin\PGGameConfigController@copyAll')->name('admin.pg-game-config.copy_all');
         
         
-        // �?控回报配�?
+        // 个控回报配置
         $route->any('/game-some-config', 'Admin\GameSomeConfigController@index')->name('admin.game-some-config');
         $route->any('/game-some-config', 'Admin\GameSomeConfigController@index')->name('admin.game-some-config');
         $route->post('/game-some-config/update', 'Admin\GameSomeConfigController@update')->name('admin.game-some-config.update');
         $route->post('/game-some-config/update', 'Admin\GameSomeConfigController@update')->name('admin.game-some-config.update');
+        $route->post('/game-some-config/copy-common', 'Admin\GameSomeConfigController@copyCommon')->name('admin.game-some-config.copy-common');
 
 
 
 
         // 库存模式配置
         // 库存模式配置
@@ -857,17 +858,17 @@ Route::group([
         $route->any('/game-number-mapping/update/{id}', 'Admin\GameNumberMappingController@update')->name('admin.game-number-mapping.update');
         $route->any('/game-number-mapping/update/{id}', 'Admin\GameNumberMappingController@update')->name('admin.game-number-mapping.update');
         $route->post('/game-number-mapping/delete/{id}', 'Admin\GameNumberMappingController@delete')->name('admin.game-number-mapping.delete');
         $route->post('/game-number-mapping/delete/{id}', 'Admin\GameNumberMappingController@delete')->name('admin.game-number-mapping.delete');
         
         
-        // 节假日大�?盘配�?
+        // 节假日大转盘配置
         $route->any('/holiday-wheel', 'Admin\HolidayWheelController@index')->name('admin.holiday-wheel');
         $route->any('/holiday-wheel', 'Admin\HolidayWheelController@index')->name('admin.holiday-wheel');
         $route->post('/holiday-wheel/update', 'Admin\HolidayWheelController@update')->name('admin.holiday-wheel.update');
         $route->post('/holiday-wheel/update', 'Admin\HolidayWheelController@update')->name('admin.holiday-wheel.update');
         $route->get('/holiday-wheel/history', 'Admin\HolidayWheelController@history')->name('admin.holiday-wheel.history');
         $route->get('/holiday-wheel/history', 'Admin\HolidayWheelController@history')->name('admin.holiday-wheel.history');
         
         
-        // 圣诞大转盘配�?
+        // 圣诞大转盘配
         $route->any('/christmas-wheel', 'Admin\ChristmasWheelController@index')->name('admin.christmas-wheel');
         $route->any('/christmas-wheel', 'Admin\ChristmasWheelController@index')->name('admin.christmas-wheel');
         $route->post('/christmas-wheel/update', 'Admin\ChristmasWheelController@update')->name('admin.christmas-wheel.update');
         $route->post('/christmas-wheel/update', 'Admin\ChristmasWheelController@update')->name('admin.christmas-wheel.update');
         $route->get('/christmas-wheel/history', 'Admin\ChristmasWheelController@history')->name('admin.christmas-wheel.history');
         $route->get('/christmas-wheel/history', 'Admin\ChristmasWheelController@history')->name('admin.christmas-wheel.history');
         
         
-        // Bonus�?买回报配�?
+        // Bonus购买回报配置
         $route->any('/game-buy-bonus-config', 'Admin\GameBuyBonusConfigController@index')->name('admin.game-buy-bonus-config');
         $route->any('/game-buy-bonus-config', 'Admin\GameBuyBonusConfigController@index')->name('admin.game-buy-bonus-config');
         $route->post('/game-buy-bonus-config/update', 'Admin\GameBuyBonusConfigController@update')->name('admin.game-buy-bonus-config.update');
         $route->post('/game-buy-bonus-config/update', 'Admin\GameBuyBonusConfigController@update')->name('admin.game-buy-bonus-config.update');
         // PG游戏参数配置
         // PG游戏参数配置
@@ -897,15 +898,15 @@ Route::group([
     $route->get('admin/bx_nb', 'Admin\IndexController@index')->middleware(['check.role']);
     $route->get('admin/bx_nb', 'Admin\IndexController@index')->middleware(['check.role']);
     $route->get('admin/mex', 'Admin\IndexController@index')->middleware(['check.role']);
     $route->get('admin/mex', 'Admin\IndexController@index')->middleware(['check.role']);
 //    $route->get('/', 'Admin\IndexController@index')->middleware(['check.role']);
 //    $route->get('/', 'Admin\IndexController@index')->middleware(['check.role']);
-    //403无�?�问权限
+    //403无访问权限
     $route->get('403', 'Admin\IndexController@noPermission');
     $route->get('403', 'Admin\IndexController@noPermission');
-    //�?改个人信�?
+    //修改个人信息
     $route->get('edit/info/{id}', 'Admin\AdministratorController@editInfoView');
     $route->get('edit/info/{id}', 'Admin\AdministratorController@editInfoView');
     $route->post('edit/info/{id}', 'Admin\AdministratorController@editInfo');
     $route->post('edit/info/{id}', 'Admin\AdministratorController@editInfo');
     //图片上传
     //图片上传
     $route->post('admin/upload', 'Admin\IndexController@upload');
     $route->post('admin/upload', 'Admin\IndexController@upload');
     $route->post('admin/wangeditor/upload', 'Admin\IndexController@wangeditorUpload');
     $route->post('admin/wangeditor/upload', 'Admin\IndexController@wangeditorUpload');
-    //退出登�?
+    //退出登
     $route->get('logout', 'Admin\AdministratorController@logout');
     $route->get('logout', 'Admin\AdministratorController@logout');
 });
 });
 Route::group([
 Route::group([
@@ -922,15 +923,15 @@ Route::group([
 
 
 });
 });
 
 
-// 图标库(开发者用�?
+// 图标库(开发者用
 Route::get('icon', function () {
 Route::get('icon', function () {
     return view('admin.icon');
     return view('admin.icon');
 });
 });
-// 常用后台模板(开发者用�?
+// 常用后台模板(开发者用
 Route::get('tmp', function () {
 Route::get('tmp', function () {
     return view('admin.tmp');
     return view('admin.tmp');
 });
 });
-// 安�?�向�?
+// 安装向导
 //Route::get('install', 'InstallController@index')->name('installView');
 //Route::get('install', 'InstallController@index')->name('installView');
 //Route::post('install/1', 'InstallController@setEnviroment')->name('setEnviroment');
 //Route::post('install/1', 'InstallController@setEnviroment')->name('setEnviroment');
 //Route::post('install/2', 'InstallController@startInstall')->name('startInstall');
 //Route::post('install/2', 'InstallController@startInstall')->name('startInstall');