Explorar el Código

小版本1.1更新: 众多BUG修复与优化

1. 彻底放弃向闭源版转型,清理掉一批闭源/烂尾的代码;
2. 重新优化优惠券功能的显示与生成;
    2.1 现在用户使用优惠券后,购买页面会有优惠券优惠价格等提示;
    2.2 支持管理自己定义优惠券代码,可是用HappyNewYear 这样的码了;
3. 管理员页面各搜索功能的BUG修改;
    3.1 部分页面的搜索条件添加,以及对之前代码的烂尾进行补全;
    3.2 统一代码检查用isset而非 !isEmpty, 来减少误判;
    3.3 对搜索在不同设备下的显示进行了优化;
4. 针对html 和 js 项目的代码规范以及简写;
5. 针对 debug方便;添加了debug工具;
     提示:请各位在生产环境下关闭debug模式;
Bretton hace 5 años
padre
commit
6b19a5054b
Se han modificado 100 ficheros con 3282 adiciones y 4158 borrados
  1. 0 7
      .env.example
  2. 266 36
      _ide_helper.php
  3. 0 32
      app/Components/Curl.php
  4. 0 59
      app/Components/Sms.php
  5. 0 67
      app/Components/TelegramBot.php
  6. 9 61
      app/Exceptions/Handler.php
  7. 153 219
      app/Http/Controllers/AdminController.php
  8. 4 4
      app/Http/Controllers/Api/AlipayController.php
  9. 6 6
      app/Http/Controllers/Api/F2fpayController.php
  10. 2 2
      app/Http/Controllers/Api/LoginController.php
  11. 34 47
      app/Http/Controllers/CouponController.php
  12. 17 14
      app/Http/Controllers/MarketingController.php
  13. 22 50
      app/Http/Controllers/PaymentController.php
  14. 40 55
      app/Http/Controllers/ShopController.php
  15. 15 11
      app/Http/Controllers/SubscribeController.php
  16. 11 1
      app/Http/Controllers/TicketController.php
  17. 106 137
      app/Http/Controllers/UserController.php
  18. 0 37
      app/helpers.php
  19. 5 13
      composer.json
  20. 264 411
      composer.lock
  21. BIN
      composer.phar
  22. 4 5
      config/app.php
  23. 1 1
      config/auth.php
  24. 0 8
      config/bt.php
  25. 0 16
      config/common.php
  26. 32 0
      config/hashing.php
  27. 0 304
      config/jwt.php
  28. 12 1
      config/logging.php
  29. 1 1
      config/services.php
  30. 0 27
      config/sms.php
  31. 0 204
      config/telegram.php
  32. 2 2
      config/version.php
  33. 3 3
      public/install.php
  34. 78 47
      resources/views/admin/addArticle.blade.php
  35. 5 5
      resources/views/admin/addGroup.blade.php
  36. 4 5
      resources/views/admin/addLabel.blade.php
  37. 7 7
      resources/views/admin/addNode.blade.php
  38. 16 16
      resources/views/admin/addUser.blade.php
  39. 3 3
      resources/views/admin/analysis.blade.php
  40. 13 12
      resources/views/admin/applyDetail.blade.php
  41. 27 29
      resources/views/admin/applyList.blade.php
  42. 10 20
      resources/views/admin/articleList.blade.php
  43. 6 9
      resources/views/admin/config.blade.php
  44. 5 10
      resources/views/admin/convert.blade.php
  45. 4 9
      resources/views/admin/decompile.blade.php
  46. 60 59
      resources/views/admin/editArticle.blade.php
  47. 50 50
      resources/views/admin/editGroup.blade.php
  48. 4 4
      resources/views/admin/editLabel.blade.php
  49. 13 13
      resources/views/admin/editNode.blade.php
  50. 23 24
      resources/views/admin/editUser.blade.php
  51. 94 95
      resources/views/admin/emailLog.blade.php
  52. 11 11
      resources/views/admin/export.blade.php
  53. 12 22
      resources/views/admin/groupList.blade.php
  54. 2 2
      resources/views/admin/import.blade.php
  55. 59 62
      resources/views/admin/index.blade.php
  56. 5 6
      resources/views/admin/inviteList.blade.php
  57. 8 18
      resources/views/admin/labelList.blade.php
  58. 22 29
      resources/views/admin/layouts.blade.php
  59. 11 27
      resources/views/admin/nodeList.blade.php
  60. 1 1
      resources/views/admin/nodeMonitor.blade.php
  61. 38 29
      resources/views/admin/onlineIPMonitor.blade.php
  62. 69 64
      resources/views/admin/orderList.blade.php
  63. 28 28
      resources/views/admin/system.blade.php
  64. 33 32
      resources/views/admin/trafficLog.blade.php
  65. 20 19
      resources/views/admin/userBalanceLogList.blade.php
  66. 22 21
      resources/views/admin/userBanLogList.blade.php
  67. 75 95
      resources/views/admin/userList.blade.php
  68. 1 1
      resources/views/admin/userMonitor.blade.php
  69. 133 126
      resources/views/admin/userOnlineIPList.blade.php
  70. 114 113
      resources/views/admin/userRebateList.blade.php
  71. 91 84
      resources/views/admin/userTrafficLogList.blade.php
  72. 21 33
      resources/views/auth/error.blade.php
  73. 5 5
      resources/views/auth/free.blade.php
  74. 33 37
      resources/views/auth/layouts.blade.php
  75. 2 4
      resources/views/auth/login.blade.php
  76. 5 6
      resources/views/auth/register.blade.php
  77. 1 1
      resources/views/auth/reset.blade.php
  78. 146 140
      resources/views/coupon/addCoupon.blade.php
  79. 76 50
      resources/views/coupon/couponList.blade.php
  80. 2 2
      resources/views/emails/resetPassword.blade.php
  81. 79 83
      resources/views/marketing/emailList.blade.php
  82. 129 137
      resources/views/marketing/pushList.blade.php
  83. 39 32
      resources/views/payment/callbackList.blade.php
  84. 1 1
      resources/views/payment/detail.blade.php
  85. 5 5
      resources/views/sensitiveWords/addSensitiveWords.blade.php
  86. 8 10
      resources/views/sensitiveWords/sensitiveWordsList.blade.php
  87. 190 201
      resources/views/shop/addGoods.blade.php
  88. 144 166
      resources/views/shop/editGoods.blade.php
  89. 48 34
      resources/views/shop/goodsList.blade.php
  90. 20 27
      resources/views/subscribe/deviceList.blade.php
  91. 33 26
      resources/views/subscribe/subscribeList.blade.php
  92. 4 4
      resources/views/ticket/addTicket.blade.php
  93. 10 6
      resources/views/ticket/replyTicket.blade.php
  94. 27 32
      resources/views/ticket/ticketList.blade.php
  95. 14 5
      resources/views/user/buy.blade.php
  96. 6 4
      resources/views/user/help.blade.php
  97. 39 45
      resources/views/user/index.blade.php
  98. 4 5
      resources/views/user/invite.blade.php
  99. 3 7
      resources/views/user/invoiceDetail.blade.php
  100. 2 2
      resources/views/user/invoices.blade.php

+ 0 - 7
.env.example

@@ -52,10 +52,3 @@ GEETEST_ID=
 GEETEST_KEY=
 NOCAPTCHA_SECRET=
 NOCAPTCHA_SITEKEY=
-
-JWT_SECRET=oIJCMcUw9jEYDhKtVmBlgbEL7S4QZjQQWGUhj84JjPeifRle0NEWzwHv6E1S7WAv
-
-TELEGRAM_BOT_TOKEN=599655509:AAGBiSB-eh48PeMBSQXAzTcBnT28htoMhKI
-TELEGRAM_CERTIFICATE_PATH=
-TELEGRAM_WEBHOOK_URL=
-TELEGRAM_ASYNC_REQUESTS=

+ 266 - 36
_ide_helper.php

@@ -3,7 +3,7 @@
 
 /**
  * A helper file for Laravel 5, to provide autocomplete information to your IDE
- * Generated for Laravel 5.6.39 on 2019-06-09 16:33:20.
+ * Generated for Laravel 5.6.39 on 2019-10-07 13:07:42.
  *
  * This file should not be included in your code, only analyzed by your IDE!
  *
@@ -3299,6 +3299,20 @@ namespace Illuminate\Support\Facades {
                         return $instance->macroCall($method, $parameters);
         }
         
+        /**
+         * Get a lock instance.
+         *
+         * @param string $name
+         * @param int $seconds
+         * @return \Illuminate\Contracts\Cache\Lock 
+         * @static 
+         */ 
+        public static function lock($name, $seconds = 0)
+        {
+                        /** @var \Illuminate\Cache\RedisStore $instance */
+                        return $instance->lock($name, $seconds);
+        }
+        
         /**
          * Remove all items from the cache.
          *
@@ -3307,32 +3321,45 @@ namespace Illuminate\Support\Facades {
          */ 
         public static function flush()
         {
-                        /** @var \Illuminate\Cache\FileStore $instance */
+                        /** @var \Illuminate\Cache\RedisStore $instance */
                         return $instance->flush();
         }
         
         /**
-         * Get the Filesystem instance.
+         * Get the Redis connection instance.
          *
-         * @return \Illuminate\Filesystem\Filesystem 
+         * @return \Predis\ClientInterface 
          * @static 
          */ 
-        public static function getFilesystem()
+        public static function connection()
         {
-                        /** @var \Illuminate\Cache\FileStore $instance */
-                        return $instance->getFilesystem();
+                        /** @var \Illuminate\Cache\RedisStore $instance */
+                        return $instance->connection();
         }
         
         /**
-         * Get the working directory of the cache.
+         * Set the connection name to be used.
          *
-         * @return string 
+         * @param string $connection
+         * @return void 
          * @static 
          */ 
-        public static function getDirectory()
+        public static function setConnection($connection)
         {
-                        /** @var \Illuminate\Cache\FileStore $instance */
-                        return $instance->getDirectory();
+                        /** @var \Illuminate\Cache\RedisStore $instance */
+                        $instance->setConnection($connection);
+        }
+        
+        /**
+         * Get the Redis database instance.
+         *
+         * @return \Illuminate\Contracts\Redis\Factory 
+         * @static 
+         */ 
+        public static function getRedis()
+        {
+                        /** @var \Illuminate\Cache\RedisStore $instance */
+                        return $instance->getRedis();
         }
         
         /**
@@ -3343,9 +3370,22 @@ namespace Illuminate\Support\Facades {
          */ 
         public static function getPrefix()
         {
-                        /** @var \Illuminate\Cache\FileStore $instance */
+                        /** @var \Illuminate\Cache\RedisStore $instance */
                         return $instance->getPrefix();
         }
+        
+        /**
+         * Set the cache key prefix.
+         *
+         * @param string $prefix
+         * @return void 
+         * @static 
+         */ 
+        public static function setPrefix($prefix)
+        {
+                        /** @var \Illuminate\Cache\RedisStore $instance */
+                        $instance->setPrefix($prefix);
+        }
          
     }
 
@@ -7660,33 +7700,46 @@ namespace Illuminate\Support\Facades {
         }
         
         /**
-         * Release a reserved job back onto the queue.
+         * Migrate the delayed jobs that are ready to the regular queue.
          *
-         * @param string $queue
-         * @param \Illuminate\Queue\Jobs\DatabaseJobRecord $job
-         * @param int $delay
-         * @return mixed 
+         * @param string $from
+         * @param string $to
+         * @return array 
          * @static 
          */ 
-        public static function release($queue, $job, $delay)
+        public static function migrateExpiredJobs($from, $to)
         {
-                        /** @var \Illuminate\Queue\DatabaseQueue $instance */
-                        return $instance->release($queue, $job, $delay);
+                        /** @var \Illuminate\Queue\RedisQueue $instance */
+                        return $instance->migrateExpiredJobs($from, $to);
         }
         
         /**
          * Delete a reserved job from the queue.
          *
          * @param string $queue
-         * @param string $id
+         * @param \Illuminate\Queue\Jobs\RedisJob $job
          * @return void 
-         * @throws \Exception|\Throwable
          * @static 
          */ 
-        public static function deleteReserved($queue, $id)
+        public static function deleteReserved($queue, $job)
         {
-                        /** @var \Illuminate\Queue\DatabaseQueue $instance */
-                        $instance->deleteReserved($queue, $id);
+                        /** @var \Illuminate\Queue\RedisQueue $instance */
+                        $instance->deleteReserved($queue, $job);
+        }
+        
+        /**
+         * Delete a reserved job from the reserved queue and release it.
+         *
+         * @param string $queue
+         * @param \Illuminate\Queue\Jobs\RedisJob $job
+         * @param int $delay
+         * @return void 
+         * @static 
+         */ 
+        public static function deleteAndRelease($queue, $job, $delay)
+        {
+                        /** @var \Illuminate\Queue\RedisQueue $instance */
+                        $instance->deleteAndRelease($queue, $job, $delay);
         }
         
         /**
@@ -7698,20 +7751,20 @@ namespace Illuminate\Support\Facades {
          */ 
         public static function getQueue($queue)
         {
-                        /** @var \Illuminate\Queue\DatabaseQueue $instance */
+                        /** @var \Illuminate\Queue\RedisQueue $instance */
                         return $instance->getQueue($queue);
         }
         
         /**
-         * Get the underlying database instance.
+         * Get the underlying Redis instance.
          *
-         * @return \Illuminate\Database\Connection 
+         * @return \Illuminate\Contracts\Redis\Factory 
          * @static 
          */ 
-        public static function getDatabase()
+        public static function getRedis()
         {
-                        /** @var \Illuminate\Queue\DatabaseQueue $instance */
-                        return $instance->getDatabase();
+                        /** @var \Illuminate\Queue\RedisQueue $instance */
+                        return $instance->getRedis();
         }
         
         /**
@@ -7724,7 +7777,7 @@ namespace Illuminate\Support\Facades {
         public static function getJobExpiration($job)
         {
             //Method inherited from \Illuminate\Queue\Queue            
-                        /** @var \Illuminate\Queue\DatabaseQueue $instance */
+                        /** @var \Illuminate\Queue\RedisQueue $instance */
                         return $instance->getJobExpiration($job);
         }
         
@@ -7738,7 +7791,7 @@ namespace Illuminate\Support\Facades {
         public static function setContainer($container)
         {
             //Method inherited from \Illuminate\Queue\Queue            
-                        /** @var \Illuminate\Queue\DatabaseQueue $instance */
+                        /** @var \Illuminate\Queue\RedisQueue $instance */
                         $instance->setContainer($container);
         }
          
@@ -8857,10 +8910,14 @@ namespace Illuminate\Support\Facades {
          * header value is a comma+space separated list of IP addresses, the left-most
          * being the original client, and each successive proxy that passed the request
          * adding the IP address where it received the request from.
+         * 
+         * If your reverse proxy uses a different header name than "X-Forwarded-For",
+         * ("Client-Ip" for instance), configure it via the $trustedHeaderSet
+         * argument of the Request::setTrustedProxies() method instead.
          *
          * @return string|null The client IP address
          * @see getClientIps()
-         * @see http://en.wikipedia.org/wiki/X-Forwarded-For
+         * @see https://wikipedia.org/wiki/X-Forwarded-For
          * @static 
          */ 
         public static function getClientIp()
@@ -9554,7 +9611,7 @@ namespace Illuminate\Support\Facades {
          * It works if your JavaScript library sets an X-Requested-With HTTP header.
          * It is known to work with common JavaScript frameworks:
          *
-         * @see http://en.wikipedia.org/wiki/List_of_Ajax_frameworks#JavaScript
+         * @see https://wikipedia.org/wiki/List_of_Ajax_frameworks#JavaScript
          * @return bool true if the request is an XMLHttpRequest, false otherwise
          * @static 
          */ 
@@ -15491,6 +15548,177 @@ namespace Tymon\JWTAuth\Facades {
         }
          
     }
+
+    /**
+     * 
+     *
+     */ 
+    class JWTFactory {
+        
+        /**
+         * Create the Payload instance.
+         *
+         * @param bool $resetClaims
+         * @return \Tymon\JWTAuth\Payload 
+         * @static 
+         */ 
+        public static function make($resetClaims = false)
+        {
+                        /** @var \Tymon\JWTAuth\Factory $instance */
+                        return $instance->make($resetClaims);
+        }
+        
+        /**
+         * Empty the claims collection.
+         *
+         * @return \Tymon\JWTAuth\Factory 
+         * @static 
+         */ 
+        public static function emptyClaims()
+        {
+                        /** @var \Tymon\JWTAuth\Factory $instance */
+                        return $instance->emptyClaims();
+        }
+        
+        /**
+         * Build and get the Claims Collection.
+         *
+         * @return \Tymon\JWTAuth\Claims\Collection 
+         * @static 
+         */ 
+        public static function buildClaimsCollection()
+        {
+                        /** @var \Tymon\JWTAuth\Factory $instance */
+                        return $instance->buildClaimsCollection();
+        }
+        
+        /**
+         * Get a Payload instance with a claims collection.
+         *
+         * @param \Tymon\JWTAuth\Claims\Collection $claims
+         * @return \Tymon\JWTAuth\Payload 
+         * @static 
+         */ 
+        public static function withClaims($claims)
+        {
+                        /** @var \Tymon\JWTAuth\Factory $instance */
+                        return $instance->withClaims($claims);
+        }
+        
+        /**
+         * Set the default claims to be added to the Payload.
+         *
+         * @param array $claims
+         * @return \Tymon\JWTAuth\Factory 
+         * @static 
+         */ 
+        public static function setDefaultClaims($claims)
+        {
+                        /** @var \Tymon\JWTAuth\Factory $instance */
+                        return $instance->setDefaultClaims($claims);
+        }
+        
+        /**
+         * Helper to set the ttl.
+         *
+         * @param int $ttl
+         * @return \Tymon\JWTAuth\Factory 
+         * @static 
+         */ 
+        public static function setTTL($ttl)
+        {
+                        /** @var \Tymon\JWTAuth\Factory $instance */
+                        return $instance->setTTL($ttl);
+        }
+        
+        /**
+         * Helper to get the ttl.
+         *
+         * @return int 
+         * @static 
+         */ 
+        public static function getTTL()
+        {
+                        /** @var \Tymon\JWTAuth\Factory $instance */
+                        return $instance->getTTL();
+        }
+        
+        /**
+         * Get the default claims.
+         *
+         * @return array 
+         * @static 
+         */ 
+        public static function getDefaultClaims()
+        {
+                        /** @var \Tymon\JWTAuth\Factory $instance */
+                        return $instance->getDefaultClaims();
+        }
+        
+        /**
+         * Get the PayloadValidator instance.
+         *
+         * @return \Tymon\JWTAuth\Validators\PayloadValidator 
+         * @static 
+         */ 
+        public static function validator()
+        {
+                        /** @var \Tymon\JWTAuth\Factory $instance */
+                        return $instance->validator();
+        }
+        
+        /**
+         * Set the custom claims.
+         *
+         * @param array $customClaims
+         * @return \Tymon\JWTAuth\Factory 
+         * @static 
+         */ 
+        public static function customClaims($customClaims)
+        {
+                        /** @var \Tymon\JWTAuth\Factory $instance */
+                        return $instance->customClaims($customClaims);
+        }
+        
+        /**
+         * Alias to set the custom claims.
+         *
+         * @param array $customClaims
+         * @return \Tymon\JWTAuth\Factory 
+         * @static 
+         */ 
+        public static function claims($customClaims)
+        {
+                        /** @var \Tymon\JWTAuth\Factory $instance */
+                        return $instance->claims($customClaims);
+        }
+        
+        /**
+         * Get the custom claims.
+         *
+         * @return array 
+         * @static 
+         */ 
+        public static function getCustomClaims()
+        {
+                        /** @var \Tymon\JWTAuth\Factory $instance */
+                        return $instance->getCustomClaims();
+        }
+        
+        /**
+         * Set the refresh flow flag.
+         *
+         * @param bool $refreshFlow
+         * @return \Tymon\JWTAuth\Factory 
+         * @static 
+         */ 
+        public static function setRefreshFlow($refreshFlow = true)
+        {
+                        /** @var \Tymon\JWTAuth\Factory $instance */
+                        return $instance->setRefreshFlow($refreshFlow);
+        }
+         
+    }
  
 }
 
@@ -18239,6 +18467,8 @@ namespace  {
     class Telegram extends \Telegram\Bot\Laravel\Facades\Telegram {}
 
     class Image extends \Intervention\Image\Facades\Image {}
+
+    class JWTFactory extends \Tymon\JWTAuth\Facades\JWTFactory {}
  
 }
 

+ 0 - 32
app/Components/Curl.php

@@ -29,36 +29,4 @@ class Curl
 
         return $res;
     }
-
-    /**
-     * POST JSON数据
-     *
-     * @param string $url    请求地址
-     * @param string $data   JSON数据
-     * @param string $secret 通信密钥
-     *
-     * @return mixed
-     */
-    public static function sendJson($url, $data, $secret)
-    {
-        $header = [
-            'Content-Type: application/json; charset=utf-8',
-            'Content-Length: ' . strlen($data),
-            'Secret: ' . $secret
-        ];
-
-        $ch = curl_init();
-        curl_setopt($ch, CURLOPT_URL, $url);
-        curl_setopt($ch, CURLOPT_POST, true);
-        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-        curl_setopt($ch, CURLOPT_TIMEOUT, 3);
-        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
-        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
-        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
-        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
-        $res = curl_exec($ch);
-        curl_close($ch);
-
-        return json_decode($res);
-    }
 }

+ 0 - 59
app/Components/Sms.php

@@ -1,59 +0,0 @@
-<?php
-
-namespace App\Components;
-
-use Overtrue\EasySms\EasySms;
-
-/**
- * 发送短信
- *
- * 参考文档:\vendor\overtrue\easy-sms\README.md
- *
- * Class Sms
- *
- * @package App\Components
- */
-class Sms
-{
-    public static function send()
-    {
-
-        $config = [
-            // HTTP 请求的超时时间(秒)
-            'timeout'  => 5.0,
-
-            // 默认发送配置
-            'default'  => [
-                // 网关调用策略,默认:顺序调用
-                'strategy' => \Overtrue\EasySms\Strategies\OrderStrategy::class,
-
-                // 默认可用的发送网关
-                'gateways' => [
-                    'yunpian',
-                ],
-            ],
-
-            // 可用的网关配置
-            'gateways' => [
-                'errorlog' => [
-                    'file' => '/tmp/easy-sms.log',
-                ],
-                'yunpian'  => [
-                    'api_key' => '0c9c87c41aac355520d47d3c84e5a532',
-                ],
-            ],
-        ];
-
-        $easySms = new EasySms($config);
-
-        $result = $easySms->send(15960271718, [
-            'content'  => '您的验证码为: 6379',
-            'template' => '2189086',
-            'data'     => [
-                'code' => 6379
-            ],
-        ]);
-
-        return $result;
-    }
-}

+ 0 - 67
app/Components/TelegramBot.php

@@ -1,67 +0,0 @@
-<?php
-
-namespace App\Components;
-
-use App\Http\Models\EmailLog;
-use Log;
-use Telegram\Bot\Api;
-
-/**
- * Telegram操作类
- *
- * Class Telegram
- *
- * @package App\Components
- */
-class TelegramBot
-{
-    public static function send($title, $content)
-    {
-        if (Helpers::systemConfig()['is_telegram']) {
-            $telegram = new Api(Helpers::systemConfig()['telegram_token']);
-            try {
-                $response = $telegram->sendMessage([
-                    'chat_id'    => Helpers::systemConfig()['telegram_chatid'],
-                    'text'       => $content,
-                    'parse_mode' => 'Markdown'
-                ]);
-
-                if ($response->getMessageId()) {
-                    self::addLog($title, $content);
-                } else {
-                    self::addLog($title, $content, 0, 'Telegram消息推送失败');
-                }
-            } catch (\Exception $e) {
-                Log::error('Telegram消息推送异常:' . $e);
-            }
-        } else {
-            Log::error('消息推送失败:未启用或未正确配置Telegram');
-        }
-    }
-
-    /**
-     * 添加Telegram推送日志
-     *
-     * @param string $title   标题
-     * @param string $content 内容
-     * @param int    $status  投递状态
-     * @param string $error   投递失败时记录的异常信息
-     *
-     * @return int
-     */
-    private static function addLog($title, $content, $status = 1, $error = '')
-    {
-        $code = Helpers::makeEmailLogCode();
-
-        $log = new EmailLog();
-        $log->type = 4;
-        $log->code = $code;
-        $log->address = 'admin';
-        $log->title = $title;
-        $log->content = $content;
-        $log->status = $status;
-        $log->error = $error;
-
-        return $log->save();
-    }
-}

+ 9 - 61
app/Exceptions/Handler.php

@@ -7,14 +7,8 @@ use Exception;
 use Illuminate\Auth\AuthenticationException;
 use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
 use Illuminate\Session\TokenMismatchException;
-use InvalidArgumentException;
 use ReflectionException;
-use RuntimeException;
-use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;
 use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
-use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;
-use Tymon\JWTAuth\Exceptions\TokenExpiredException;
-use Tymon\JWTAuth\Exceptions\TokenInvalidException;
 
 class Handler extends ExceptionHandler
 {
@@ -73,56 +67,29 @@ class Handler extends ExceptionHandler
             return parent::render($request, $exception);
         }
 
-        // 捕获未生成key异常
-        if ($exception instanceof RuntimeException) {
-            if ($request->expectsJson()) {
-                return response()->json(['status' => 'fail', 'data' => '', 'message' => $exception->getMessage()]);
-            } else {
-                return response()->view('auth.error', ['message' => $exception->getMessage()]);
-            }
-        }
-
         // 捕获访问异常
         if ($exception instanceof NotFoundHttpException) {
             \Log::info("异常请求:" . $request->fullUrl() . ",IP:" . getClientIp());
 
-            if ($request->expectsJson()) {
-                return response()->json(['status' => 'fail', 'data' => '', 'message' => $exception->getMessage()]);
-            } else {
-                return response()->view('auth.error', ['message' => $exception->getMessage()]);
-            }
-        }
-
-        // 路由参数异常
-        if ($exception instanceof InvalidArgumentException) {
-            if ($request->expectsJson()) {
-                return response()->json(['status' => 'fail', 'data' => '', 'message' => $exception->getMessage()]);
-            } else {
-                return response()->view('auth.error', ['message' => $exception->getMessage()]);
-            }
-        }
-
-        // 请求方式不允许异常
-        if ($exception instanceof MethodNotAllowedHttpException) {
-            if ($request->expectsJson()) {
-                return response()->json(['status' => 'fail', 'data' => '', 'message' => $exception->getMessage()]);
+            if ($request->ajax()) {
+                return response()->json(['status' => 'fail', 'data' => '', 'message' => 'Page Not Found']);
             } else {
-                return response()->view('auth.error', ['message' => $exception->getMessage()]);
+                return response()->view('auth.error', ['message' => trans('error.MissingPage')]);
             }
         }
 
         // 捕获身份校验异常
         if ($exception instanceof AuthenticationException) {
-            if ($request->expectsJson()) {
-                return response()->json(['status' => 'fail', 'data' => '', 'message' => $exception->getMessage()]);
+            if ($request->ajax()) {
+                return response()->json(['status' => 'fail', 'data' => '', 'message' => 'Unauthorized']);
             } else {
-                return response()->view('auth.error', ['message' => $exception->getMessage()]);
+                return response()->view('auth.error', ['message' => trans('error.Unauthorized')]);
             }
         }
 
         // 捕获CSRF异常
         if ($exception instanceof TokenMismatchException) {
-            if ($request->expectsJson()) {
+            if ($request->ajax()) {
                 return response()->json(['status' => 'fail', 'data' => '', 'message' => 'System Error, Please Refresh Page, Try One More Time']);
             } else {
                 return response()->view('auth.error', ['message' => trans('error.RefreshPage')]);
@@ -131,7 +98,7 @@ class Handler extends ExceptionHandler
 
         // 捕获反射异常
         if ($exception instanceof ReflectionException) {
-            if ($request->expectsJson()) {
+            if ($request->ajax()) {
                 return response()->json(['status' => 'fail', 'data' => '', 'message' => 'System Error']);
             } else {
                 return response()->view('auth.error', ['message' => trans('error.SystemError')]);
@@ -140,32 +107,13 @@ class Handler extends ExceptionHandler
 
         // 捕获系统错误异常
         if ($exception instanceof ErrorException) {
-            if ($request->expectsJson()) {
+            if ($request->ajax()) {
                 return response()->json(['status' => 'fail', 'data' => '', 'message' => 'System Error']);
             } else {
                 return response()->view('auth.error', ['message' => trans('error.SystemError') . ', ' . trans('error.Visit') . '<a href="/logs" target="_blank">' . trans('error.log') . '</a>']);
             }
         }
 
-        // 未授权异常
-        if ($exception instanceof UnauthorizedHttpException) {
-            if ($request->expectsJson()) {
-                return response()->json(['status' => 'fail', 'data' => '', 'message' => $exception->getMessage()]);
-            } else {
-                return response()->view('auth.error', ['message' => $exception->getMessage()]);
-            }
-        }
-
-        // 客户端API:捕获认证过期异常
-        if ($exception instanceof TokenExpiredException) {
-            return response()->json(['status' => 'fail', 'data' => '', 'message' => $exception->getMessage()]);
-        }
-
-        // 客户端API:捕获认证不合法异常
-        if ($exception instanceof TokenInvalidException) {
-            return response()->json(['status' => 'fail', 'data' => '', 'message' => $exception->getMessage()]);
-        }
-
         return parent::render($request, $exception);
     }
 }

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 153 - 219
app/Http/Controllers/AdminController.php


+ 4 - 4
app/Http/Controllers/Api/AlipayController.php

@@ -58,13 +58,13 @@ class AlipayController extends Controller
             if ($_POST['trade_status'] == 'TRADE_FINISHED' || $_POST['trade_status'] == 'TRADE_SUCCESS') {
                 // 商户订单号
                 $data = [];
-                $data['out_trade_no'] = $request->get('out_trade_no');
+                $data['out_trade_no'] = $request->input('out_trade_no');
                 // 支付宝交易号
-                $data['trade_no'] = $request->get('trade_no');
+                $data['trade_no'] = $request->input('trade_no');
                 // 交易状态
-                $data['trade_status'] = $request->get('trade_status');
+                $data['trade_status'] = $request->input('trade_status');
                 // 交易金额(这里是按照结算货币汇率的金额,和rmb_fee不相等)
-                $data['total_fee'] = $request->get('total_fee');
+                $data['total_fee'] = $request->input('total_fee');
 
                 $this->tradePaid($data);
             } else {

+ 6 - 6
app/Http/Controllers/Api/F2fpayController.php

@@ -63,8 +63,8 @@ class F2fpayController extends Controller
                 'return_url'      => self::$systemConfig['website_url'],
                 'return_raw'      => false
             ], [
-                'out_trade_no' => $request->get('out_trade_no'),
-                'trade_no'     => $request->get('trade_no'),
+                'out_trade_no' => $request->input('out_trade_no'),
+                'trade_no'     => $request->input('trade_no'),
             ]);
 
             \Log::info("【支付宝当面付】回调验证查询:" . var_export($verify_result, true));
@@ -78,13 +78,13 @@ class F2fpayController extends Controller
             if ($_POST['trade_status'] == 'TRADE_FINISHED' || $_POST['trade_status'] == 'TRADE_SUCCESS') {
                 // 商户订单号
                 $data = [];
-                $data['out_trade_no'] = $request->get('out_trade_no');
+                $data['out_trade_no'] = $request->input('out_trade_no');
                 // 支付宝交易号
-                $data['trade_no'] = $request->get('trade_no');
+                $data['trade_no'] = $request->input('trade_no');
                 // 交易状态
-                $data['trade_status'] = $request->get('trade_status');
+                $data['trade_status'] = $request->input('trade_status');
                 // 交易金额(这里是按照结算货币汇率的金额,和rmb_fee不相等)
-                $data['total_amount'] = $request->get('total_amount');
+                $data['total_amount'] = $request->input('total_amount');
 
                 $this->tradePaid($data);
             } else {

+ 2 - 2
app/Http/Controllers/Api/LoginController.php

@@ -33,8 +33,8 @@ class LoginController extends Controller
     // 登录返回订阅信息
     public function login(Request $request)
     {
-        $username = trim($request->get('username'));
-        $password = trim($request->get('password'));
+        $username = trim($request->input('username'));
+        $password = trim($request->input('password'));
         $cacheKey = 'request_times_' . md5(getClientIp());
 
         if (!$username || !$password) {

+ 34 - 47
app/Http/Controllers/CouponController.php

@@ -4,13 +4,13 @@ namespace App\Http\Controllers;
 
 use App\Http\Models\Coupon;
 use DB;
+use Exception;
 use Illuminate\Http\Request;
 use Log;
 use PhpOffice\PhpSpreadsheet\Spreadsheet;
 use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
 use Redirect;
 use Response;
-use Session;
 
 /**
  * 优惠券控制器
@@ -24,7 +24,25 @@ class CouponController extends Controller
     // 优惠券列表
     public function couponList(Request $request)
     {
-        $view['couponList'] = Coupon::query()->orderBy('status', 'asc')->orderBy('id', 'desc')->paginate(10);
+        $sn = $request->input('sn');
+        $type = $request->input('type');
+        $status = $request->input('status');
+
+        $query = Coupon::query();
+
+        if (isset($sn)) {
+            $query->where('sn', 'like', '%' . $sn . '%');
+        }
+
+        if (isset($type)) {
+            $query->where('type', $type);
+        }
+
+        if (isset($status)) {
+            $query->where('status', $status);
+        }
+
+        $view['couponList'] = $query->orderBy('id', 'desc')->paginate(15)->appends($request->except('page'));
 
         return Response::view('coupon.couponList', $view);
     }
@@ -33,42 +51,9 @@ class CouponController extends Controller
     public function addCoupon(Request $request)
     {
         if ($request->isMethod('POST')) {
-            $this->validate($request, [
-                'name'            => 'required',
-                'type'            => 'required|integer|between:1,3',
-                'usage'           => 'required|integer|between:1,2',
-                'num'             => 'required|integer|min:1',
-                'amount'          => 'required_unless:type,2|numeric|min:0.01|nullable',
-                'discount'        => 'required_if:type,2|numeric|between:1,9.9|nullable',
-                'available_start' => 'required|date|before_or_equal:available_end',
-                'available_end'   => 'required|date|after_or_equal:available_start',
-            ], [
-                'name.required'                   => '请填入卡券名称',
-                'type.required'                   => '请选择卡券类型',
-                'type.integer'                    => '卡券类型不合法,请重选',
-                'type.between'                    => '卡券类型不合法,请重选',
-                'usage.required'                  => '请选择卡券用途',
-                'usage.integer'                   => '卡券用途不合法,请重选',
-                'usage.between'                   => '卡券用途不合法,请重选',
-                'num.required'                    => '请填写卡券数量',
-                'num.integer'                     => '卡券数量不合法',
-                'num.min'                         => '卡券数量不合法,最小1',
-                'amount.required_unless'          => '请填入卡券面值',
-                'amount.numeric'                  => '卡券金额不合法',
-                'amount.min'                      => '卡券金额不合法,最小0.01',
-                'discount.required_if'            => '请填入卡券折扣',
-                'discount.numeric'                => '卡券折扣不合法',
-                'discount.between'                => '卡券折扣不合法,有效范围:1 ~ 9.9',
-                'available_start.required'        => '请填入有效期',
-                'available_start.date'            => '有效期不合法',
-                'available_start.before_or_equal' => '有效期不合法',
-                'available_end.required'          => '请填入有效期',
-                'available_end.date'              => '有效期不合法',
-                'available_end.after_or_equal'    => '有效期不合法'
-            ]);
-
-            // 商品LOGO
-            $logo = '';
+            $this->validate($request, ['name' => 'required', 'type' => 'required|integer|between:1,3', 'usage' => 'required|integer|between:1,2', 'num' => 'required|integer|min:1', 'amount' => 'required_unless:type,2|numeric|min:0.01|nullable', 'discount' => 'required_if:type,2|numeric|between:1,9.9|nullable', 'available_start' => 'required|date|before_or_equal:available_end', 'available_end' => 'required|date|after_or_equal:available_start',], ['name.required' => '请填入卡券名称', 'type.required' => '请选择卡券类型', 'type.integer' => '卡券类型不合法,请重选', 'type.between' => '卡券类型不合法,请重选', 'usage.required' => '请选择卡券用途', 'usage.integer' => '卡券用途不合法,请重选', 'usage.between' => '卡券用途不合法,请重选', 'num.required' => '请填写卡券数量', 'num.integer' => '卡券数量不合法', 'num.min' => '卡券数量不合法,最小1', 'amount.required_unless' => '请填入卡券面值', 'amount.numeric' => '卡券金额不合法', 'amount.min' => '卡券金额不合法,最小0.01', 'discount.required_if' => '请填入卡券折扣', 'discount.numeric' => '卡券折扣不合法', 'discount.between' => '卡券折扣不合法,有效范围:1 ~ 9.9', 'available_start.required' => '请填入有效期', 'available_start.date' => '有效期不合法', 'available_start.before_or_equal' => '有效期不合法', 'available_end.required' => '请填入有效期', 'available_end.date' => '有效期不合法', 'available_end.after_or_equal' => '有效期不合法']);
+
+            // 优惠卷LOGO
             if ($request->hasFile('logo')) {
                 $file = $request->file('logo');
                 $fileType = $file->getClientOriginalExtension();
@@ -81,6 +66,8 @@ class CouponController extends Controller
                 $logoName = date('YmdHis') . mt_rand(1000, 2000) . '.' . $fileType;
                 $move = $file->move(base_path() . '/public/upload/image/', $logoName);
                 $logo = $move ? '/upload/image/' . $logoName : '';
+            } else {
+                $logo = '';
             }
 
             DB::beginTransaction();
@@ -88,12 +75,12 @@ class CouponController extends Controller
                 for ($i = 0; $i < $request->num; $i++) {
                     $obj = new Coupon();
                     $obj->name = $request->name;
-                    $obj->sn = strtoupper(makeRandStr(7));
+                    $obj->sn = empty($request->sn) ? strtoupper(makeRandStr(8)) : $request->sn;
                     $obj->logo = $logo;
                     $obj->type = $request->type;
                     $obj->usage = $request->usage;
-                    $obj->amount = empty($request->amount) ? 0 : $request->amount;
-                    $obj->discount = empty($request->discount) ? 0 : $request->discount;
+                    $obj->amount = $request->type == 2 ? 0 : $request->amount;
+                    $obj->discount = $request->type != 2 ? 0 : $request->discount;
                     $obj->available_start = strtotime(date('Y-m-d 00:00:00', strtotime($request->available_start)));
                     $obj->available_end = strtotime(date('Y-m-d 23:59:59', strtotime($request->available_end)));
                     $obj->status = 0;
@@ -103,7 +90,7 @@ class CouponController extends Controller
                 DB::commit();
 
                 return Redirect::back()->with('successMsg', '生成成功');
-            } catch (\Exception $e) {
+            } catch (Exception $e) {
                 DB::rollBack();
 
                 Log::error('生成优惠券失败:' . $e->getMessage());
@@ -138,9 +125,9 @@ class CouponController extends Controller
         $spreadsheet->setActiveSheetIndex(0);
         $sheet = $spreadsheet->getActiveSheet();
         $sheet->setTitle('抵用券');
-        $sheet->fromArray(['名称', '类型', '有效期', '券码', '额(元)'], null);
+        $sheet->fromArray(['名称', '类型', '有效期', '券码', '额(元)'], null);
         foreach ($cashCouponList as $k => $vo) {
-            $usage = '仅限一次性使用';
+            $usage = $vo->usage == 1 ? '一次性' : '重复使用';
             $dateRange = date('Y-m-d', $vo->available_start) . ' ~ ' . date('Y-m-d', $vo->available_end);
             $sheet->fromArray([$vo->name, $usage, $dateRange, $vo->sn, $vo->amount], null, 'A' . ($k + 2));
         }
@@ -152,7 +139,7 @@ class CouponController extends Controller
         $sheet->setTitle('折扣券');
         $sheet->fromArray(['名称', '类型', '有效期', '券码', '折扣(折)'], null);
         foreach ($discountCouponList as $k => $vo) {
-            $usage = $vo->usage == 1 ? '仅限一次性使用' : '重复使用';
+            $usage = $vo->usage == 1 ? '一次性' : '重复使用';
             $dateRange = date('Y-m-d', $vo->available_start) . ' ~ ' . date('Y-m-d', $vo->available_end);
             $sheet->fromArray([$vo->name, $usage, $dateRange, $vo->sn, $vo->discount], null, 'A' . ($k + 2));
         }
@@ -162,9 +149,9 @@ class CouponController extends Controller
         $spreadsheet->setActiveSheetIndex(2);
         $sheet = $spreadsheet->getActiveSheet();
         $sheet->setTitle('充值券');
-        $sheet->fromArray(['名称', '类型', '有效期', '券码', '额(元)'], null);
+        $sheet->fromArray(['名称', '类型', '有效期', '券码', '额(元)'], null);
         foreach ($chargeCouponList as $k => $vo) {
-            $usage = '仅限一次性使用';
+            $usage = '一次性';
             $dateRange = date('Y-m-d', $vo->available_start) . ' ~ ' . date('Y-m-d', $vo->available_end);
             $sheet->fromArray([$vo->name, $usage, $dateRange, $vo->sn, $vo->amount], null, 'A' . ($k + 2));
         }

+ 17 - 14
app/Http/Controllers/MarketingController.php

@@ -5,6 +5,7 @@ namespace App\Http\Controllers;
 use App\Components\Helpers;
 use App\Http\Models\Marketing;
 use DB;
+use Exception;
 use GuzzleHttp\Client;
 use Illuminate\Http\Request;
 use Log;
@@ -29,7 +30,15 @@ class MarketingController extends Controller
     // 邮件群发消息列表
     public function emailList(Request $request)
     {
-        $view['list'] = Marketing::query()->where('type', 1)->paginate(15);
+        $status = $request->input('status');
+
+        $query = Marketing::query()->where('type', 1);
+
+        if (isset($status)) {
+            $query->where('status', $status);
+        }
+
+        $view['list'] = $query->paginate(15)->appends($request->except('page'));
 
         return Response::view('marketing.emailList', $view);
     }
@@ -37,11 +46,11 @@ class MarketingController extends Controller
     // 消息通道群发列表
     public function pushList(Request $request)
     {
-        $status = $request->get('status');
+        $status = $request->input('status');
 
         $query = Marketing::query()->where('type', 2);
 
-        if ($status != '') {
+        if (isset($status)) {
             $query->where('status', $status);
         }
 
@@ -53,8 +62,8 @@ class MarketingController extends Controller
     // 添加推送消息
     public function addPushMarketing(Request $request)
     {
-        $title = trim($request->get('title'));
-        $content = $request->get('content');
+        $title = trim($request->input('title'));
+        $content = $request->input('content');
 
         if (!self::$systemConfig['is_push_bear']) {
             return Response::json(['status' => 'fail', 'data' => '', 'message' => '推送失败:请先启用并配置PushBear']);
@@ -63,19 +72,13 @@ class MarketingController extends Controller
         DB::beginTransaction();
         try {
             $client = new Client();
-            $response = $client->request('GET', 'https://pushbear.ftqq.com/sub', [
-                'query' => [
-                    'sendkey' => self::$systemConfig['push_bear_send_key'],
-                    'text'    => $title,
-                    'desp'    => $content
-                ]
-            ]);
+            $response = $client->request('GET', 'https://pushbear.ftqq.com/sub', ['query' => ['sendkey' => self::$systemConfig['push_bear_send_key'], 'text' => $title, 'desp' => $content]]);
 
             $result = json_decode($response->getBody());
             if ($result->code) { // 失败
                 $this->addMarketing(2, $title, $content, -1, $result->message);
 
-                throw new \Exception($result->message);
+                throw new Exception($result->message);
             }
 
             $this->addMarketing(2, $title, $content, 1);
@@ -83,7 +86,7 @@ class MarketingController extends Controller
             DB::commit();
 
             return Response::json(['status' => 'success', 'data' => '', 'message' => '推送成功']);
-        } catch (\Exception $e) {
+        } catch (Exception $e) {
             Log::info('PushBear消息推送失败:' . $e->getMessage());
 
             DB::rollBack();

+ 22 - 50
app/Http/Controllers/PaymentController.php

@@ -12,6 +12,7 @@ use App\Http\Models\Payment;
 use App\Http\Models\PaymentCallback;
 use Auth;
 use DB;
+use Exception;
 use Illuminate\Http\Request;
 use Log;
 use Payment\Client\Charge;
@@ -37,8 +38,8 @@ class PaymentController extends Controller
     // 创建支付单
     public function create(Request $request)
     {
-        $goods_id = intval($request->get('goods_id'));
-        $coupon_sn = $request->get('coupon_sn');
+        $goods_id = $request->input('goods_id');
+        $coupon_sn = $request->input('coupon_sn');
 
         $goods = Goods::query()->where('status', 1)->where('id', $goods_id)->first();
         if (!$goods) {
@@ -96,14 +97,9 @@ class PaymentController extends Controller
 
         // 验证账号是否存在有效期更长的套餐
         if ($goods->type == 2) {
-            $existOrderList = Order::uid()
-                ->with(['goods'])
-                ->whereHas('goods', function ($q) {
-                    $q->where('type', 2);
-                })
-                ->where('is_expire', 0)
-                ->where('status', 2)
-                ->get();
+            $existOrderList = Order::uid()->with(['goods'])->whereHas('goods', function ($q) {
+                $q->where('type', 2);
+            })->where('is_expire', 0)->where('status', 2)->get();
 
             foreach ($existOrderList as $vo) {
                 if ($vo->goods->days > $goods->days) {
@@ -147,23 +143,18 @@ class PaymentController extends Controller
                 if (isset($result['error_response'])) {
                     Log::error('【有赞云】创建二维码失败:' . $result['error_response']['msg']);
 
-                    throw new \Exception($result['error_response']['msg']);
+                    throw new Exception($result['error_response']['msg']);
                 }
             } elseif (self::$systemConfig['is_alipay']) {
-                $parameter = [
-                    "service"        => "create_forex_trade", // WAP:create_forex_trade_wap ,即时到帐:create_forex_trade
-                    "partner"        => self::$systemConfig['alipay_partner'],
-                    "notify_url"     => self::$systemConfig['website_url'] . "/api/alipay", // 异步回调接口
-                    "return_url"     => self::$systemConfig['website_url'],
-                    "out_trade_no"   => $orderSn,  // 订单号
-                    "subject"        => "Package", // 订单名称
+                $parameter = ["service"      => "create_forex_trade", // WAP:create_forex_trade_wap ,即时到帐:create_forex_trade
+                              "partner"      => self::$systemConfig['alipay_partner'], "notify_url" => self::$systemConfig['website_url'] . "/api/alipay", // 异步回调接口
+                              "return_url"   => self::$systemConfig['website_url'], "out_trade_no" => $orderSn,  // 订单号
+                              "subject"      => "Package", // 订单名称
                     //"total_fee"      => $amount, // 金额
-                    "rmb_fee"        => $amount,   // 使用RMB标价,不再使用总金额
-                    "body"           => "",        // 商品描述,可为空
-                    "currency"       => self::$systemConfig['alipay_currency'], // 结算币种
-                    "product_code"   => "NEW_OVERSEAS_SELLER",
-                    "_input_charset" => "utf-8"
-                ];
+                              "rmb_fee"      => $amount,   // 使用RMB标价,不再使用总金额
+                              "body"         => "",        // 商品描述,可为空
+                              "currency"     => self::$systemConfig['alipay_currency'], // 结算币种
+                              "product_code" => "NEW_OVERSEAS_SELLER", "_input_charset" => "utf-8"];
 
                 // 建立请求
                 $alipaySubmit = new AlipaySubmit(self::$systemConfig['alipay_sign_type'], self::$systemConfig['alipay_partner'], self::$systemConfig['alipay_key'], self::$systemConfig['alipay_private_key']);
@@ -171,22 +162,8 @@ class PaymentController extends Controller
             } elseif (self::$systemConfig['is_f2fpay']) {
                 // TODO:goods表里增加一个字段用于自定义商品付款时展示的商品名称,
                 // TODO:这里增加一个随机商品列表,根据goods的价格随机取值
-                $result = Charge::run("ali_qr", [
-                    'use_sandbox'     => false,
-                    "partner"         => self::$systemConfig['f2fpay_app_id'],
-                    'app_id'          => self::$systemConfig['f2fpay_app_id'],
-                    'sign_type'       => 'RSA2',
-                    'ali_public_key'  => self::$systemConfig['f2fpay_public_key'],
-                    'rsa_private_key' => self::$systemConfig['f2fpay_private_key'],
-                    'notify_url'      => self::$systemConfig['website_url'] . "/api/f2fpay", // 异步回调接口
-                    'return_url'      => self::$systemConfig['website_url'],
-                    'return_raw'      => false
-                ], [
-                    'body'     => '',
-                    'subject'  => self::$systemConfig['f2fpay_subject_name'],
-                    'order_no' => $orderSn,
-                    'amount'   => $amount,
-                ]);
+                $result = Charge::run("ali_qr", ['use_sandbox' => false, "partner" => self::$systemConfig['f2fpay_app_id'], 'app_id' => self::$systemConfig['f2fpay_app_id'], 'sign_type' => 'RSA2', 'ali_public_key' => self::$systemConfig['f2fpay_public_key'], 'rsa_private_key' => self::$systemConfig['f2fpay_private_key'], 'notify_url' => self::$systemConfig['website_url'] . "/api/f2fpay", // 异步回调接口
+                                                 'return_url'  => self::$systemConfig['website_url'], 'return_raw' => false], ['body' => '', 'subject' => self::$systemConfig['f2fpay_subject_name'], 'order_no' => $orderSn, 'amount' => $amount,]);
             }
 
             $payment = new Payment();
@@ -228,7 +205,7 @@ class PaymentController extends Controller
             } else {
                 return Response::json(['status' => 'success', 'data' => $sn, 'message' => '创建订单成功,正在转到付款页面,请稍后']);
             }
-        } catch (\Exception $e) {
+        } catch (Exception $e) {
             DB::rollBack();
 
             Log::error('创建支付订单失败:' . $e->getMessage());
@@ -248,12 +225,7 @@ class PaymentController extends Controller
     // 获取订单支付状态
     public function getStatus(Request $request)
     {
-        $validator = Validator::make($request->all(), [
-            'sn' => 'required|exists:payment,sn'
-        ], [
-            'sn.required' => '请求失败:缺少sn',
-            'sn.exists'   => '支付失败:支付单不存在'
-        ]);
+        $validator = Validator::make($request->all(), ['sn' => 'required|exists:payment,sn'], ['sn.required' => '请求失败:缺少sn', 'sn.exists' => '支付失败:支付单不存在']);
 
         if ($validator->fails()) {
             return Response::json(['status' => 'error', 'data' => '', 'message' => $validator->getMessageBag()->first()]);
@@ -272,15 +244,15 @@ class PaymentController extends Controller
     // 回调日志
     public function callbackList(Request $request)
     {
-        $status = $request->get('status', 0);
+        $status = $request->input('status', 0);
 
         $query = PaymentCallback::query();
 
-        if ($status) {
+        if (isset($status)) {
             $query->where('status', $status);
         }
 
-        $view['list'] = $query->orderBy('id', 'desc')->paginate(10);
+        $view['list'] = $query->orderBy('id', 'desc')->paginate(10)->appends($request->except('page'));
 
         return Response::view('payment.callbackList', $view);
     }

+ 40 - 55
app/Http/Controllers/ShopController.php

@@ -6,6 +6,7 @@ use App\Http\Models\Goods;
 use App\Http\Models\GoodsLabel;
 use App\Http\Models\Label;
 use DB;
+use Exception;
 use Illuminate\Http\Request;
 use Log;
 use Redirect;
@@ -24,7 +25,20 @@ class ShopController extends Controller
     // 商品列表
     public function goodsList(Request $request)
     {
-        $view['goodsList'] = Goods::query()->orderBy('id', 'desc')->paginate(10);
+        $type = $request->input('type');
+        $status = $request->input('status');
+
+        $query = Goods::query();
+
+        if (isset($type)) {
+            $query->where('type', $type);
+        }
+
+        if (isset($status)) {
+            $query->where('status', $status);
+        }
+
+        $view['goodsList'] = $query->orderBy('id', 'desc')->paginate(10)->appends($request->except('page'));
 
         return Response::view('shop.goodsList', $view);
     }
@@ -33,25 +47,7 @@ class ShopController extends Controller
     public function addGoods(Request $request)
     {
         if ($request->isMethod('POST')) {
-            $this->validate($request, [
-                'name'    => 'required',
-                'traffic' => 'required_unless:type,3|integer|min:1024|max:10240000|nullable',
-                'price'   => 'required|numeric|min:0',
-                'type'    => 'required',
-                'days'    => 'required|integer',
-            ], [
-                'name.required'           => '请填入名称',
-                'traffic.required_unless' => '请填入流量',
-                'traffic.integer'         => '内含流量必须是整数值',
-                'traffic.min'             => '内含流量不能低于1MB',
-                'traffic.max'             => '内含流量不能超过10TB',
-                'price.required'          => '请填入价格',
-                'price.numeric'           => '价格不合法',
-                'price.min'               => '价格最低0',
-                'type.required'           => '请选择类型',
-                'days.required'           => '请填入有效期',
-                'days.integer'            => '有效期不合法',
-            ]);
+            $this->validate($request, ['name' => 'required', 'traffic' => 'required_unless:type,3|integer|min:1024|max:10240000|nullable', 'price' => 'required|numeric|min:0', 'type' => 'required', 'days' => 'required|integer',], ['name.required' => '请填入名称', 'traffic.required_unless' => '请填入流量', 'traffic.integer' => '内含流量必须是整数值', 'traffic.min' => '内含流量不能低于1MB', 'traffic.max' => '内含流量不能超过10TB', 'price.required' => '请填入价格', 'price.numeric' => '价格不合法', 'price.min' => '价格最低0', 'type.required' => '请选择类型', 'days.required' => '请填入有效期', 'days.integer' => '有效期不合法',]);
 
             // 套餐必须有价格
             if ($request->type == 2 && $request->price <= 0) {
@@ -59,12 +55,11 @@ class ShopController extends Controller
             }
 
             // 套餐有效天数必须大于30天
-            if ($request->type == 2 && $request->days < 30) {
-                return Redirect::back()->withInput()->withErrors('套餐有效天数必须不能少于30天');
+            if ($request->type == 2 && $request->days < 1) {
+                return Redirect::back()->withInput()->withErrors('套餐有效天数必须不能少于1天');
             }
 
             // 商品LOGO
-            $logo = '';
             if ($request->hasFile('logo')) {
                 $file = $request->file('logo');
                 $fileType = $file->getClientOriginalExtension();
@@ -77,13 +72,15 @@ class ShopController extends Controller
                 $logoName = date('YmdHis') . mt_rand(1000, 2000) . '.' . $fileType;
                 $move = $file->move(base_path() . '/public/upload/image/', $logoName);
                 $logo = $move ? '/upload/image/' . $logoName : '';
+            } else {
+                $logo = '';
             }
 
             DB::beginTransaction();
             try {
                 $goods = new Goods();
                 $goods->name = $request->name;
-                $goods->info = $request->$info;
+                $goods->info = $request->info;
                 $goods->desc = $request->desc;
                 $goods->logo = $logo;
                 $goods->traffic = $request->traffic;
@@ -91,9 +88,9 @@ class ShopController extends Controller
                 $goods->type = $request->type;
                 $goods->days = $request->days;
                 $goods->color = $request->color;
-                $goods->sort = intval($request->sort);
-                $goods->is_hot = intval($request->is_hot);
-                $goods->is_limit = intval($request->is_limit);
+                $goods->sort = $request->sort;
+                $goods->is_hot = $request->is_hot;
+                $goods->is_limit = $request->is_limit;
                 $goods->status = $request->status;
                 $goods->save();
 
@@ -102,7 +99,7 @@ class ShopController extends Controller
                 $goods->save();
 
                 // 生成商品标签
-                $labels = $request->get('labels');
+                $labels = $request->input('labels');
                 if (!empty($labels)) {
                     foreach ($labels as $label) {
                         $goodsLabel = new GoodsLabel();
@@ -115,7 +112,7 @@ class ShopController extends Controller
                 DB::commit();
 
                 return Redirect::back()->with('successMsg', '添加成功');
-            } catch (\Exception $e) {
+            } catch (Exception $e) {
                 DB::rollBack();
                 Log::info($e);
 
@@ -129,21 +126,19 @@ class ShopController extends Controller
     }
 
     // 编辑商品
-    public function editGoods(Request $request)
+    public function editGoods(Request $request, $id)
     {
-        $id = $request->get('id');
-
         if ($request->isMethod('POST')) {
-            $name = $request->get('name');
-            $info = $request->get('info', '');
-            $desc = $request->get('desc');
-            $price = round($request->get('price'), 2);
-            $labels = $request->get('labels');
-            $color = trim($request->get('color', 0));
-            $sort = intval($request->get('sort', 0));
-            $is_hot = intval($request->get('is_hot', 0));
-            $is_limit = intval($request->get('is_limit', 0));
-            $status = $request->get('status');
+            $name = $request->input('name');
+            $info = $request->input('info');
+            $desc = $request->input('desc');
+            $price = round($request->input('price'), 2);
+            $labels = $request->input('labels');
+            $color = $request->input('color');
+            $sort = $request->input('sort');
+            $is_hot = $request->input('is_hot');
+            $is_limit = $request->input('is_limit');
+            $status = $request->input('status');
 
             $goods = Goods::query()->where('id', $id)->first();
             if (!$goods) {
@@ -185,17 +180,7 @@ class ShopController extends Controller
 
             DB::beginTransaction();
             try {
-                $data = [
-                    'name'     => $name,
-                    'info'     => $info,
-                    'desc'     => $desc,
-                    'price'    => $price * 100,
-                    'sort'     => $sort,
-                    'color'    => $color,
-                    'is_hot'   => $is_hot,
-                    'is_limit' => $is_limit,
-                    'status'   => $status
-                ];
+                $data = ['name' => $name, 'info' => $info, 'desc' => $desc, 'price' => $price * 100, 'sort' => $sort, 'color' => $color, 'is_hot' => $is_hot, 'is_limit' => $is_limit, 'status' => $status];
 
                 if ($logo) {
                     $data['logo'] = $logo;
@@ -219,13 +204,13 @@ class ShopController extends Controller
                 Session::flash('successMsg', '编辑成功');
 
                 DB::commit();
-            } catch (\Exception $e) {
+            } catch (Exception $e) {
                 Session::flash('errorMsg', '编辑失败');
 
                 DB::rollBack();
             }
 
-            return Redirect::to('shop/editGoods?id=' . $id);
+            return Redirect::to('shop/editGoods/' . $id);
         } else {
             $goods = Goods::query()->with(['label'])->where('id', $id)->first();
             if ($goods) {

+ 15 - 11
app/Http/Controllers/SubscribeController.php

@@ -39,18 +39,18 @@ class SubscribeController extends Controller
 
         $query = UserSubscribe::with(['User']);
 
-        if (!empty($user_id)) {
+        if (isset($user_id)) {
             $query->where('user_id', $user_id);
         }
 
-        if (!empty($username)) {
+        if (isset($username)) {
             $query->whereHas('user', function ($q) use ($username) {
                 $q->where('username', 'like', '%' . $username . '%');
             });
         }
 
-        if ($status != '') {
-            $query->where('status', intval($status));
+        if (isset($status)) {
+            $query->where('status', $status);
         }
 
         $view['subscribeList'] = $query->orderBy('id', 'desc')->paginate(20)->appends($request->except('page'));
@@ -63,24 +63,24 @@ class SubscribeController extends Controller
     {
         $type = $request->input('type');
         $platform = $request->input('platform');
-        $name = trim($request->input('name'));
+        $name = $request->input('name');
         $status = $request->input('status');
 
         $query = Device::query();
 
-        if (!empty($type)) {
+        if (isset($type)) {
             $query->where('type', $type);
         }
 
-        if ($platform != '') {
+        if (isset($platform)) {
             $query->where('platform', $platform);
         }
 
-        if (!empty($name)) {
+        if (isset($name)) {
             $query->where('name', 'like', '%' . $name . '%');
         }
 
-        if ($status != '') {
+        if (isset($status)) {
             $query->where('status', $status);
         }
 
@@ -92,8 +92,8 @@ class SubscribeController extends Controller
     // 设置用户的订阅的状态
     public function setSubscribeStatus(Request $request)
     {
-        $id = $request->get('id');
-        $status = $request->get('status', 0);
+        $id = $request->input('id');
+        $status = $request->input('status', 0);
 
         if (empty($id)) {
             return Response::json(['status' => 'fail', 'data' => '', 'message' => '操作异常']);
@@ -126,6 +126,10 @@ class SubscribeController extends Controller
     // 通过订阅码获取订阅信息
     public function getSubscribeByCode(Request $request, $code)
     {
+        if (empty($code)) {
+            return Redirect::to('login');
+        }
+
         // 校验合法性
         $subscribe = UserSubscribe::query()->with('user')->where('status', 1)->where('code', $code)->first();
         if (!$subscribe) {

+ 11 - 1
app/Http/Controllers/TicketController.php

@@ -32,7 +32,17 @@ class TicketController extends Controller
     // 工单列表
     public function ticketList(Request $request)
     {
-        $view['ticketList'] = Ticket::query()->orderBy('id', 'desc')->paginate(10);
+        $username = $request->input('username');
+
+        $query = Ticket::query();
+
+        if (isset($username)) {
+            $query->whereHas('user', function ($q) use ($username) {
+                $q->where('username', 'like', '%' . $username . '%');
+            });
+        }
+
+        $view['ticketList'] = $query->orderBy('id', 'desc')->paginate(10)->appends($request->except('page'));
 
         return Response::view('ticket.ticketList', $view);
     }

+ 106 - 137
app/Http/Controllers/UserController.php

@@ -32,6 +32,7 @@ use DB;
 use Exception;
 use Hash;
 use Illuminate\Http\Request;
+use Illuminate\Validation\Rule;
 use Log;
 use Mail;
 use Redirect;
@@ -57,39 +58,41 @@ class UserController extends Controller
 
     public function index(Request $request)
     {
-        $user = User::uid()->first();
-        $user->totalTransfer = flowAutoShow($user->transfer_enable);
-        $user->unusedTransfer = $user->transfer_enable - $user->u - $user->d > 0 ? $user->transfer_enable - $user->u - $user->d : 0;
-        $user->unusedPercent = $user->transfer_enable > 0 ? round($user->unusedTransfer / $user->transfer_enable, 2) : 0;
-        $user->unusedTransfer = flowAutoShow($user->unusedTransfer);
-        $user->levelName = Level::query()->where('level', $user['level'])->first()['level_name'];
-        $user->remainDays = date('Y-m-d') < $user->expire_time ? (strtotime($user->expire_time) - strtotime(date('Y-m-d'))) / 86400 : 0;
-        $user->resetDays = date('d') > $user->traffic_reset_day ? (strtotime($user->traffic_reset_day) - strtotime(date('Y-m-d'))) / 86400 : strtotime($user->traffic_reset_day);
-        $user_reset_day = $user->traffic_reset_day;
+        $totalTransfer = Auth::user()->transfer_enable;
+        $usedTransfer = Auth::user()->u + Auth::user()->d;
+        $unusedTransfer = $totalTransfer - $usedTransfer > 0 ? $totalTransfer - $usedTransfer : 0;
+        $userRestDay = Auth::user()->traffic_reset_day;
+        $expireTime = Auth::user()->expire_time;
         $last_day = date('t');
         $today = date('d');
-        if ($user_reset_day > $today) {
-            $user->resetDays = $user_reset_day > $last_day ? $last_day - $today : $user_reset_day - $today;
+        if ($userRestDay > $today) {
+            $resetDays = $userRestDay > $last_day ? $last_day - $today : $userRestDay - $today;
         } else {
             $next_last_day = date('t', strtotime('next month'));
-            $user->resetDays = $user_reset_day > $next_last_day ? $last_day - $today + $next_last_day : $last_day - $today + $user_reset_day;
+            $resetDays = $userRestDay > $next_last_day ? $last_day - $today + $next_last_day : $last_day - $today + $userRestDay;
         }
-        $view['info'] = $user->toArray();
+        $view['remainDays'] = date('Y-m-d') < $expireTime ? (strtotime($expireTime) - strtotime(date('Y-m-d'))) / 86400 : 0;
+        $view['resetDays'] = $resetDays;
+        $view['unusedTransfer'] = $unusedTransfer;
+        $view['expireTime'] = $expireTime;
+        $view['unusedPercent'] = $totalTransfer > 0 ? round($unusedTransfer / $totalTransfer, 2) : 0;
         $view['noticeList'] = Article::type(2)->orderBy('id', 'desc')->Paginate(1); // 公告
-        $view['userLoginLog'] = UserLoginLog::query()->where('user_id', Auth::user()->id)->orderBy('id', 'desc')->first(); // 近期登录日志
         //流量异常判断
-        $hourlyTraffic = UserTrafficHourly::query()->where('user_id', $user->id)->where('node_id', 0)->where('created_at', '>=', date('Y-m-d H:i:s', time() - 3900))->sum('total');
+        $hourlyTraffic = UserTrafficHourly::query()->where('user_id', Auth::user()->id)->where('node_id', 0)->where('created_at', '>=', date('Y-m-d H:i:s', time() - 3900))->sum('total');
         $view['isTrafficWarning'] = $hourlyTraffic < (self::$systemConfig['traffic_ban_value'] * 1073741824) ? 0 : 1;
         //付费用户判断
         $view['is_paying_user'] = Order::uid()->where('status', 2)->where('is_expire', 0)->where('origin_amount', '>', 0)->get()->isEmpty();
+        $view['userLoginLog'] = UserLoginLog::query()->where('user_id', Auth::user()->id)->orderBy('id', 'desc')->first(); // 近期登录日志
 
 
         $dailyData = [];
         $hourlyData = [];
+
         // 节点一个月内的流量
-        $userTrafficDaily = UserTrafficDaily::query()->where('user_id', Auth::user()->id)->where('node_id', 0)->where('created_at', '>=', date('Y-m', time()))->orderBy('created_at', 'asc')->pluck('total')->toArray();
+        // TODO:有bug
+        $userTrafficDaily = UserTrafficDaily::query()->where('user_id', Auth::user()->id)->where('node_id', 0)->where('created_at', '<=', date('Y-m-d', time()))->orderBy('created_at', 'asc')->pluck('total')->toArray();
 
-        $dailyTotal = date('d') - 1; // 今天不算,减一
+        $dailyTotal = date('d', time()) - 1; // 今天不算,减一
         $dailyCount = count($userTrafficDaily);
         for ($x = 0; $x < $dailyTotal - $dailyCount; $x++) {
             $dailyData[$x] = 0;
@@ -100,7 +103,7 @@ class UserController extends Controller
 
         // 节点一天内的流量
         $userTrafficHourly = UserTrafficHourly::query()->where('user_id', Auth::user()->id)->where('node_id', 0)->where('created_at', '>=', date('Y-m-d', time()))->orderBy('created_at', 'asc')->pluck('total')->toArray();
-        $hourlyTotal = date('H');
+        $hourlyTotal = date('H', time());
         $hourlyCount = count($userTrafficHourly);
         for ($x = 0; $x < $hourlyTotal - $hourlyCount; $x++) {
             $hourlyData[$x] = 0;
@@ -124,6 +127,7 @@ class UserController extends Controller
         $view['trafficHourly'] = "'" . implode("','", $hourlyData) . "'";
         $view['monthDays'] = "'" . implode("','", $monthDays) . "'";
         $view['dayHours'] = "'" . implode("','", $dayHours) . "'";
+
         return Response::view('user.index', $view);
     }
 
@@ -185,17 +189,24 @@ class UserController extends Controller
             $group = SsGroup::query()->where('id', $node->group_id)->first();
 
             if ($node->type == 1) {
-                // 生成ssr scheme
-                $obfs_param = Auth::user()->obfs_param ? Auth::user()->obfs_param : $node->obfs_param;
+                $server = $node->server ?: $node->ip;
+                $port = $node->single ? $node->port : Auth::user()->port;
+                $protocol = $node->single ? $node->protocol : Auth::user()->protocol;
+                $method = $node->single ? $node->method : Auth::user()->method;
+                $obfs = $node->single ? $node->obfs : Auth::user()->obfs;
+                $passwd = $node->single ? $node->passwd : Auth::user()->passwd;
+                $obfs_param = $node->single ? $node->obfs_param : Auth::user()->obfs_param;
                 $protocol_param = $node->single ? Auth::user()->port . ':' . Auth::user()->passwd : Auth::user()->protocol_param;
+                $group = empty($group) ? Helpers::systemConfig()['website_name'] : $group->name;
 
-                $ssr_str = ($node->server ? $node->server : $node->ip) . ':' . ($node->single ? $node->single_port : Auth::user()->port);
-                $ssr_str .= ':' . ($node->single ? $node->single_protocol : Auth::user()->protocol) . ':' . ($node->single ? $node->single_method : Auth::user()->method);
-                $ssr_str .= ':' . ($node->single ? $node->single_obfs : Auth::user()->obfs) . ':' . ($node->single ? base64url_encode($node->single_passwd) : base64url_encode(Auth::user()->passwd));
+                // 生成ssr scheme
+                $ssr_str = $server . ':' . $port;
+                $ssr_str .= ':' . $protocol . ':' . $method;
+                $ssr_str .= ':' . $obfs . ':' . base64url_encode($passwd);
                 $ssr_str .= '/?obfsparam=' . base64url_encode($obfs_param);
-                $ssr_str .= '&protoparam=' . ($node->single ? base64url_encode(Auth::user()->port . ':' . Auth::user()->passwd) : base64url_encode($protocol_param));
+                $ssr_str .= '&protoparam=' . base64url_encode($protocol_param);
                 $ssr_str .= '&remarks=' . base64url_encode($node->name);
-                $ssr_str .= '&group=' . base64url_encode(empty($group) ? '' : $group->name);
+                $ssr_str .= '&group=' . base64url_encode($group);
                 $ssr_str .= '&udpport=0';
                 $ssr_str .= '&uot=0';
                 $ssr_str = base64url_encode($ssr_str);
@@ -203,23 +214,23 @@ class UserController extends Controller
 
                 // 生成ss scheme
                 $ss_str = Auth::user()->method . ':' . Auth::user()->passwd . '@';
-                $ss_str .= ($node->server ? $node->server : $node->ip) . ':' . Auth::user()->port;
+                $ss_str .= ($node->server ?: $node->ip) . ':' . Auth::user()->port;
                 $ss_str = base64url_encode($ss_str) . '#' . 'VPN';
                 $ss_scheme = 'ss://' . $ss_str;
 
                 // 生成文本配置信息
-                $txt = "服务器:" . ($node->server ? $node->server : $node->ip) . PHP_EOL;
+                $txt = "服务器:" . $server . PHP_EOL;
                 if ($node->ipv6) {
                     $txt .= "IPv6:" . $node->ipv6 . PHP_EOL;
                 }
-                $txt .= "远程端口:" . ($node->single ? $node->single_port : Auth::user()->port) . PHP_EOL;
-                $txt .= "密码:" . ($node->single ? $node->single_passwd : Auth::user()->passwd) . PHP_EOL;
-                $txt .= "加密方法:" . ($node->single ? $node->single_method : Auth::user()->method) . PHP_EOL;
+                $txt .= "远程端口:" . $port . PHP_EOL;
+                $txt .= "密码:" . $passwd . PHP_EOL;
+                $txt .= "加密方法:" . $method . PHP_EOL;
                 $txt .= "路由:绕过局域网及中国大陆地址" . PHP_EOL . PHP_EOL;
-                $txt .= "协议:" . ($node->single ? $node->single_protocol : Auth::user()->protocol) . PHP_EOL;
-                $txt .= "协议参数:" . ($node->single ? Auth::user()->port . ':' . Auth::user()->passwd : Auth::user()->protocol_param) . PHP_EOL;
-                $txt .= "混淆方式:" . ($node->single ? $node->single_obfs : Auth::user()->obfs) . PHP_EOL;
-                $txt .= "混淆参数:" . (Auth::user()->obfs_param ? Auth::user()->obfs_param : $node->obfs_param) . PHP_EOL;
+                $txt .= "协议:" . $protocol . PHP_EOL;
+                $txt .= "协议参数:" . $protocol_param . PHP_EOL;
+                $txt .= "混淆方式:" . $obfs . PHP_EOL;
+                $txt .= "混淆参数:" . $obfs_param . PHP_EOL;
                 $txt .= "本地端口:1080" . PHP_EOL;
 
                 $node->txt = $txt;
@@ -229,23 +240,11 @@ class UserController extends Controller
                 $allNodes .= $ssr_scheme . '|';
             } else {
                 // 生成v2ray scheme
-                $v2_json = [
-                    "v"    => "2",
-                    "ps"   => $node->name,
-                    "add"  => $node->server ? $node->server : $node->ip,
-                    "port" => $node->v2_port,
-                    "id"   => Auth::user()->vmess_id,
-                    "aid"  => $node->v2_alter_id,
-                    "net"  => $node->v2_net,
-                    "type" => $node->v2_type,
-                    "host" => $node->v2_host,
-                    "path" => $node->v2_path,
-                    "tls"  => $node->v2_tls == 1 ? "tls" : ""
-                ];
-                $v2_scheme = 'vmess://' . base64url_encode(json_encode($v2_json, JSON_PRETTY_PRINT));
+                $v2_json = ["v" => "2", "ps" => $node->name, "add" => $node->server ?: $node->ip, "port" => $node->v2_port, "id" => Auth::user()->vmess_id, "aid" => $node->v2_alter_id, "net" => $node->v2_net, "type" => $node->v2_type, "host" => $node->v2_host, "path" => $node->v2_path, "tls" => $node->v2_tls == 1 ? "tls" : ""];
+                $v2_scheme = 'vmess://' . base64_encode(json_encode($v2_json, JSON_PRETTY_PRINT));
 
                 // 生成文本配置信息
-                $txt = "服务器:" . ($node->server ? $node->server : $node->ip) . PHP_EOL;
+                $txt = "服务器:" . $node->server ?: $node->ip . PHP_EOL;
                 if ($node->ipv6) {
                     $txt .= "IPv6:" . $node->ipv6 . PHP_EOL;
                 }
@@ -265,7 +264,7 @@ class UserController extends Controller
 
             // 节点在线状态
             $nodeInfo = SsNodeInfo::query()->where('node_id', $node->id)->where('log_time', '>=', strtotime("-10 minutes"))->orderBy('id', 'desc')->first();
-            $node->online_status = empty($nodeInfo) || empty($nodeInfo->load) ? 0 : 1;
+            $node->online_status = $nodeInfo ? 1 : 0;
 
             // 节点标签
             $node->labels = SsNodeLabel::query()->with('labelInfo')->where('node_id', $node->id)->first();
@@ -349,9 +348,6 @@ class UserController extends Controller
     // 商品列表
     public function services(Request $request)
     {
-        $user = User::uid()->first();
-        $view['user_balance'] = $user->balance;
-
         // 余额充值商品,只取10个
         $view['chargeGoodsList'] = Goods::type(3)->where('status', 1)->orderBy('price', 'asc')->orderBy('price', 'asc')->limit(10)->get();
         $view['goodsList'] = Goods::query()->where('status', 1)->where('type', '<=', '2')->orderBy('type', 'desc')->orderBy('sort', 'desc')->paginate(10)->appends($request->except('page'));
@@ -403,7 +399,7 @@ class UserController extends Controller
 
         if ($obj->id) {
             $emailTitle = "新工单提醒";
-            $content = "标题:【" . $title . "】<br>内容:" . $content;
+            $content = "标题:【" . $title . "】<br>用户:" . Auth::user()->username . "<br>内容:" . $content;
 
             // 发邮件通知管理员
             if (self::$systemConfig['crash_warning_email']) {
@@ -422,7 +418,7 @@ class UserController extends Controller
     // 回复工单
     public function replyTicket(Request $request)
     {
-        $id = intval($request->input('id'));
+        $id = $request->input('id');
 
         $ticket = Ticket::uid()->with('user')->where('id', $id)->firstOrFail();
 
@@ -435,6 +431,10 @@ class UserController extends Controller
                 return Response::json(['status' => 'fail', 'data' => '', 'message' => '回复内容不能为空']);
             }
 
+            if ($ticket->status == 2) {
+                return Response::json(['status' => 'fail', 'data' => '', 'message' => '错误:该工单已关闭']);
+            }
+
             $obj = new TicketReply();
             $obj->ticket_id = $id;
             $obj->user_id = Auth::user()->id;
@@ -490,6 +490,10 @@ class UserController extends Controller
         if (Order::uid()->where('status', 2)->where('is_expire', 0)->where('origin_amount', '>', 0)->get()->isEmpty()) {
             return Response::view('auth.error', ['message' => '本功能对非付费用户禁用!请 <a class="btn btn-sm btn-danger" href="/">返回</a>']);
         }
+        // 已生成的邀请码数量
+        $num = Invite::uid()->count();
+
+        $view['num'] = self::$systemConfig['invite_num'] - $num <= 0 ? 0 : self::$systemConfig['invite_num'] - $num; // 还可以生成的邀请码数量
         $view['inviteList'] = Invite::uid()->with(['generator', 'user'])->paginate(10); // 邀请码列表
         $view['referral_traffic'] = flowAutoShow(self::$systemConfig['referral_traffic'] * 1048576);
         $view['referral_percent'] = self::$systemConfig['referral_percent'];
@@ -500,32 +504,21 @@ class UserController extends Controller
     // 生成邀请码
     public function makeInvite(Request $request)
     {
-        if (!Auth::user()->invite_num) {
-            return Response::json(['status' => 'fail', 'data' => '', 'message' => '生成失败:邀请码数量不足']);
+        // 已生成的邀请码数量
+        $num = Invite::uid()->count();
+        if ($num >= self::$systemConfig['invite_num']) {
+            return Response::json(['status' => 'fail', 'data' => '', 'message' => '生成失败:最多只能生成' . self::$systemConfig['invite_num'] . '个邀请码']);
         }
 
-        DB::beginTransaction();
-        try {
-            // 生成邀请码
-            $obj = new Invite();
-            $obj->uid = Auth::user()->id;
-            $obj->fuid = 0;
-            $obj->code = strtoupper(mb_substr(md5(microtime() . makeRandStr()), 8, 12));
-            $obj->status = 0;
-            $obj->dateline = date('Y-m-d H:i:s', strtotime("+" . self::$systemConfig['user_invite_days'] . " days"));
-            $obj->save();
-            // 扣减邀请码数
-            User::uid()->decrement('invite_num', 1);
-
-            DB::commit();
-
-            return Response::json(['status' => 'success', 'data' => '', 'message' => '生成成功']);
-        } catch (Exception $e) {
-            Log::info("用户生成邀请码异常:" . $e);
-            DB::rollBack();
+        $obj = new Invite();
+        $obj->uid = Auth::user()->id;
+        $obj->fuid = 0;
+        $obj->code = strtoupper(mb_substr(md5(microtime() . makeRandStr()), 8, 12));
+        $obj->status = 0;
+        $obj->dateline = date('Y-m-d H:i:s', strtotime("+" . self::$systemConfig['user_invite_days'] . " days"));
+        $obj->save();
 
-            return Response::json(['status' => 'fail', 'data' => '', 'message' => '生成失败:邀请码数量不足']);
-        }
+        return Response::json(['status' => 'success', 'data' => '', 'message' => '生成成功']);
     }
 
     // 使用优惠券
@@ -553,19 +546,14 @@ class UserController extends Controller
             return Response::json(['status' => 'fail', 'data' => '', 'message' => '该优惠券尚不可用,请换一个试试']);
         }
 
-        $data = [
-            'type'     => $coupon->type,
-            'amount'   => $coupon->amount,
-            'discount' => $coupon->discount
-        ];
+        $data = ['name' => $coupon->name ,'type' => $coupon->type, 'amount' => $coupon->amount, 'discount' => $coupon->discount];
 
-        return Response::json(['status' => 'success', 'data' => $data, 'message' => '优惠券有效']);
+        return Response::json(['status' => 'success', 'data' => $data, 'message' => '优惠券有效']);
     }
 
     // 购买服务
-    public function buy(Request $request, $id)
+    public function buy(Request $request, $goods_id)
     {
-        $goods_id = intval($id);
         $coupon_sn = $request->input('coupon_sn');
         // 余额支付
         if ($request->isMethod('POST')) {
@@ -594,7 +582,7 @@ class UserController extends Controller
             // 使用优惠券
             if (!empty($coupon_sn)) {
                 $coupon = Coupon::query()->where('status', 0)->whereIn('type', [1, 2])->where('sn', $coupon_sn)->first();
-                if (empty($coupon)) {
+                if (!$coupon) {
                     return Response::json(['status' => 'fail', 'data' => '', 'message' => '优惠券不存在']);
                 }
 
@@ -611,21 +599,15 @@ class UserController extends Controller
             }
 
             // 验证账号余额是否充足
-            $user = User::uid()->first();
-            if ($user->balance < $amount) {
+            if (Auth::user()->balance < $amount) {
                 return Response::json(['status' => 'fail', 'data' => '', 'message' => '支付失败:您的余额不足,请先充值']);
             }
 
             // 验证账号是否存在有效期更长的套餐
             if ($goods->type == 2) {
-                $existOrderList = Order::uid()
-                    ->with(['goods'])
-                    ->whereHas('goods', function ($q) {
-                        $q->where('type', 2);
-                    })
-                    ->where('is_expire', 0)
-                    ->where('status', 2)
-                    ->get();
+                $existOrderList = Order::uid()->with('goods')->whereHas('goods', function ($q) {
+                    $q->where('type', 2);
+                })->where('is_expire', 0)->where('status', 2)->get();
 
                 foreach ($existOrderList as $vo) {
                     if ($vo->goods->days > $goods->days) {
@@ -639,7 +621,7 @@ class UserController extends Controller
                 // 生成订单
                 $order = new Order();
                 $order->order_sn = date('ymdHis') . mt_rand(100000, 999999);
-                $order->user_id = $user->id;
+                $order->user_id = Auth::user()->id;
                 $order->goods_id = $goods_id;
                 $order->coupon_id = !empty($coupon) ? $coupon->id : 0;
                 $order->origin_amount = $goods->price;
@@ -651,10 +633,10 @@ class UserController extends Controller
                 $order->save();
 
                 // 扣余额
-                User::query()->where('id', $user->id)->decrement('balance', $amount * 100);
+                User::query()->where('id', Auth::user()->id)->decrement('balance', $amount * 100);
 
                 // 记录余额操作日志
-                $this->addUserBalanceLog($user->id, $order->oid, $user->balance, $user->balance - $amount, -1 * $amount, '购买服务:' . $goods->name);
+                $this->addUserBalanceLog(Auth::user()->id, $order->oid, Auth::user()->balance, Auth::user()->balance - $amount, -1 * $amount, '购买商品:' . $goods->name);
 
                 // 优惠券置为已使用
                 if (!empty($coupon)) {
@@ -670,11 +652,11 @@ class UserController extends Controller
                 // 如果买的是套餐,则先将之前购买的所有套餐置都无效,并扣掉之前所有套餐的流量,重置用户已用流量为0
                 if ($goods->type == 2) {
                     $existOrderList = Order::query()
-                        ->with(['goods'])
+                        ->with('goods')
                         ->whereHas('goods', function ($q) {
                             $q->where('type', 2);
                         })
-                        ->where('user_id', $order->user_id)
+                        ->where('user_id', Auth::user()->id)
                         ->where('oid', '<>', $order->oid)
                         ->where('is_expire', 0)
                         ->where('status', 2)
@@ -686,22 +668,22 @@ class UserController extends Controller
                         // 先判断,防止手动扣减过流量的用户流量被扣成负数
                         if ($order->user->transfer_enable - $vo->goods->traffic * 1048576 <= 0) {
                             // 写入用户流量变动记录
-                            Helpers::addUserTrafficModifyLog($user->id, $order->oid, 0, 0, '[余额支付]用户购买套餐,先扣减之前套餐的流量(扣完)');
+                            Helpers::addUserTrafficModifyLog(Auth::user()->id, $order->oid, 0, 0, '[余额支付]用户购买套餐,先扣减之前套餐的流量(扣完)');
 
-                            User::query()->where('id', $order->user_id)->update(['u' => 0, 'd' => 0, 'transfer_enable' => 0]);
+                            User::query()->where('id', Auth::user()->id)->update(['u' => 0, 'd' => 0, 'transfer_enable' => 0]);
                         } else {
                             // 写入用户流量变动记录
-                            $user = User::query()->where('id', $user->id)->first(); // 重新取出user信息
-                            Helpers::addUserTrafficModifyLog($user->id, $order->oid, $user->transfer_enable, ($user->transfer_enable - $vo->goods->traffic * 1048576), '[余额支付]用户购买套餐,先扣减之前套餐的流量(未扣完)');
+                            $user = User::query()->uid()->first(); // 重新取出user信息
+                            Helpers::addUserTrafficModifyLog(Auth::user()->id, $order->oid, $user->transfer_enable, ($user->transfer_enable - $vo->goods->traffic * 1048576), '[余额支付]用户购买套餐,先扣减之前套餐的流量(未扣完)');
 
-                            User::query()->where('id', $order->user_id)->update(['u' => 0, 'd' => 0]);
-                            User::query()->where('id', $order->user_id)->decrement('transfer_enable', $vo->goods->traffic * 1048576);
+                            User::query()->uid()->update(['u' => 0, 'd' => 0]);
+                            User::query()->uid()->decrement('transfer_enable', $vo->goods->traffic * 1048576);
                         }
                     }
                 }
 
                 // 写入用户流量变动记录
-                $user = User::query()->where('id', $user->id)->first(); // 重新取出user信息
+                $user = User::query()->uid()->first(); // 重新取出user信息
                 Helpers::addUserTrafficModifyLog($user->id, $order->oid, $user->transfer_enable, ($user->transfer_enable + $goods->traffic * 1048576), '[余额支付]用户购买商品,加上流量');
 
                 // 把商品的流量加到账号上
@@ -717,9 +699,9 @@ class UserController extends Controller
                 // 套餐就改流量重置日,流量包不改
                 if ($goods->type == 2) {
                     $traffic_reset_day = date('d');
-                    User::query()->where('id', $order->user_id)->update(['traffic_reset_day' => $traffic_reset_day, 'expire_time' => $expireTime, 'enable' => 1]);
+                    User::query()->uid()->update(['traffic_reset_day' => $traffic_reset_day, 'expire_time' => $expireTime, 'enable' => 1]);
                 } else {
-                    User::query()->where('id', $order->user_id)->update(['expire_time' => $expireTime, 'enable' => 1]);
+                    User::query()->uid()->update(['expire_time' => $expireTime, 'enable' => 1]);
                 }
 
                 // 写入用户标签
@@ -731,19 +713,19 @@ class UserController extends Controller
                     }
 
                     // 取出现有的标签
-                    $userLabels = UserLabel::query()->where('user_id', $user->id)->pluck('label_id')->toArray();
+                    $userLabels = UserLabel::query()->where('user_id', Auth::user()->id)->pluck('label_id')->toArray();
                     $goodsLabels = GoodsLabel::query()->where('goods_id', $goods_id)->pluck('label_id')->toArray();
 
                     // 标签去重
                     $newUserLabels = array_values(array_unique(array_merge($userLabels, $goodsLabels, $defaultLabels)));
 
                     // 删除用户所有标签
-                    UserLabel::query()->where('user_id', $user->id)->delete();
+                    UserLabel::query()->where('user_id', Auth::user()->id)->delete();
 
                     // 生成标签
                     foreach ($newUserLabels as $vo) {
                         $obj = new UserLabel();
-                        $obj->user_id = $user->id;
+                        $obj->user_id = Auth::user()->id;
                         $obj->label_id = $vo;
                         $obj->save();
                     }
@@ -751,12 +733,7 @@ class UserController extends Controller
 
                 // 写入返利日志
                 if ($user->referral_uid) {
-                    $this->addReferralLog($user->id, $user->referral_uid, $order->oid, $amount, $amount * self::$systemConfig['referral_percent']);
-                }
-
-                // 增加用户邀请码数量
-                if ($goods->invite_num) {
-                    User::uid()->increment('invite_num', $goods->invite_num);
+ $this->addReferralLog($user->id, $user->referral_uid, $order->oid, $amount, $amount * self::$systemConfig['referral_percent']);
                 }
 
                 // 取消重复返利
@@ -765,10 +742,10 @@ class UserController extends Controller
                 DB::commit();
 
                 return Response::json(['status' => 'success', 'data' => '', 'message' => '支付成功']);
-            } catch (\Exception $e) {
-                DB::rollBack();
+            } catch (Exception $e) {
+                Log::error('支付订单失败:' . $e);
 
-                Log::error('支付订单失败:' . $e->getMessage());
+                DB::rollBack();
 
                 return Response::json(['status' => 'fail', 'data' => '', 'message' => '支付失败:' . $e->getMessage()]);
             }
@@ -796,9 +773,9 @@ class UserController extends Controller
         $view['totalAmount'] = ReferralLog::uid()->sum('ref_amount') / 100;
         $view['canAmount'] = ReferralLog::uid()->where('status', 0)->sum('ref_amount') / 100;
         $view['link'] = self::$systemConfig['website_url'] . '/register?aff=' . Auth::user()->id;
-        $view['referralLogList'] = ReferralLog::uid()->with('user')->orderBy('id', 'desc')->paginate(10);
-        $view['referralApplyList'] = ReferralApply::uid()->with('user')->orderBy('id', 'desc')->paginate(10);
-        $view['referralUserList'] = User::query()->select(['username', 'created_at'])->where('referral_uid', Auth::user()->id)->orderBy('id', 'desc')->paginate(10);
+        $view['referralLogList'] = ReferralLog::uid()->with('user')->orderBy('id', 'desc')->paginate(10, ['*'], 'log_page');
+        $view['referralApplyList'] = ReferralApply::uid()->with('user')->orderBy('id', 'desc')->paginate(10, ['*'], 'apply_page');
+        $view['referralUserList'] = User::query()->select(['username', 'created_at'])->where('referral_uid', Auth::user()->id)->orderBy('id', 'desc')->paginate(10, ['*'], 'user_page');
 
         return Response::view('user.referral', $view);
     }
@@ -907,17 +884,9 @@ class UserController extends Controller
     // 卡券余额充值
     public function charge(Request $request)
     {
-        $validator = Validator::make($request->all(), [
-            'coupon_sn' => [
-                'required',
-                Rule::exists('coupon', 'sn')->where(function ($query) {
-                    $query->where('type', 3)->where('status', 0);
-                }),
-            ]
-        ], [
-            'coupon_sn.required' => '券码不能为空',
-            'coupon_sn.exists'   => '该券不可用'
-        ]);
+        $validator = Validator::make($request->all(), ['coupon_sn' => ['required', Rule::exists('coupon', 'sn')->where(function ($query) {
+            $query->where('type', 3)->where('status', 0);
+        }),]], ['coupon_sn.required' => '券码不能为空', 'coupon_sn.exists' => '该券不可用']);
 
         if ($validator->fails()) {
             return Response::json(['status' => 'fail', 'data' => '', 'message' => $validator->getMessageBag()->first()]);

+ 0 - 37
app/helpers.php

@@ -158,15 +158,6 @@ if (!function_exists('getClientIP')) {
             $ip = '127.0.0.1';
         }
 
-        // 多IP容错判断
-        if (false !== strpos($ip, ',')) {
-            \Log::info("检测到用户通过多级代理访问,请求IP串:" . $ip);
-
-            $ipArr = explode(',', $ip);
-
-            return $ipArr[0]; // 第一个是真实IP,后面都是代理IP
-        }
-
         return $ip;
     }
 }
@@ -272,31 +263,3 @@ if (!function_exists('isMobile')) {
         return preg_match('#^13[\d]{9}$|^14[5,7]{1}\d{8}$|^15[^4]{1}\d{8}$|^17[0,6,7,8]{1}\d{8}$|^18[\d]{9}$#', $mobile) ? true : false;
     }
 }
-
-// 网速速率转换
-if (!function_exists('formatNetSpeed')) {
-    function formatNetSpeed($value)
-    {
-        if ($value < 0) {
-            return '';
-        }
-
-        if ($value == 0) {
-            return '不限速';
-        }
-
-        $kb = 1024;
-        $mb = 1024 * 1024;
-
-        if (abs($value) >= $mb) {
-            $speed = round($value / $mb, 2) * 8;
-            if (abs($speed / 1024) >= 1) {
-                return round($speed / 1024, 2) . "Gbps";
-            } else {
-                return $speed . "Mbps";
-            }
-        } else {
-            return round($value / $kb, 2) * 8 / 1024 . "Mbps";
-        }
-    }
-}

+ 5 - 13
composer.json

@@ -1,21 +1,15 @@
 {
   "name": "laravel/laravel",
   "description": "The Laravel Framework.",
-  "keywords": [
-    "framework",
-    "laravel"
-  ],
+    "keywords": ["framework", "laravel"],
   "license": "MIT",
   "type": "project",
   "require": {
     "php": "^7.1.3",
-    "barryvdh/laravel-ide-helper": "^2.5",
-    "erusev/parsedown": "^1.7",
+    "barryvdh/laravel-debugbar": "^3.2",
     "fideloper/proxy": "^4.0",
     "guzzlehttp/guzzle": "^6.3",
     "ipip/db": "^1.0",
-    "irazasyed/larasupport": "^1.6",
-    "irazasyed/telegram-bot-sdk": "^3.0",
     "itbdw/ip-database": "^2.0",
     "jenssegers/agent": "^2.6",
     "laravel/framework": "5.6.*",
@@ -25,18 +19,16 @@
     "misechow/geetest": "^1.0",
     "misechow/no-captcha": "^1.0",
     "openlss/lib-array2xml": "^0.5.1",
-    "overtrue/easy-sms": "^1.1",
     "overtrue/laravel-lang": "^3.0",
-    "phpseclib/phpseclib": "^2.0",
     "phpoffice/phpspreadsheet": "^1.6",
     "predis/predis": "^1.1",
     "rap2hpoutre/laravel-log-viewer": "^1.0",
     "riverslei/payment": "*",
     "spatie/laravel-permission": "^2.29",
-    "youzanyun/open-sdk": "^2.0",
-    "tymon/jwt-auth": "dev-develop"
+    "youzanyun/open-sdk": "^2.0"
   },
   "require-dev": {
+    "barryvdh/laravel-ide-helper": "^2.6",
     "filp/whoops": "^2.0",
     "fzaninotto/faker": "^1.4",
     "mockery/mockery": "^1.0",
@@ -87,4 +79,4 @@
   },
   "minimum-stability": "dev",
   "prefer-stable": true
-}
+}

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 264 - 411
composer.lock


BIN
composer.phar


+ 4 - 5
config/app.php

@@ -124,6 +124,8 @@ return [
         /*
          * Laravel Framework Service Providers...
          */
+        Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class,
+        Barryvdh\Debugbar\ServiceProvider::class,
         Illuminate\Auth\AuthServiceProvider::class,
         Illuminate\Broadcasting\BroadcastServiceProvider::class,
         Illuminate\Bus\BusServiceProvider::class,
@@ -154,8 +156,6 @@ return [
         Misechow\Geetest\GeetestServiceProvider::class,  // Geetest极验
         Misechow\NoCaptcha\NoCaptchaServiceProvider::class, // Google reCAPTCHA
         Overtrue\LaravelLang\TranslationServiceProvider::class, // 多国语言包功能
-        Tymon\JWTAuth\Providers\LaravelServiceProvider::class, // jwt auth
-        Telegram\Bot\Laravel\TelegramServiceProvider::class, // Telegram Bot
 
         /*
          * Application Service Providers...
@@ -185,6 +185,7 @@ return [
         'Auth'         => Illuminate\Support\Facades\Auth::class,
         'Blade'        => Illuminate\Support\Facades\Blade::class,
         'Broadcast'    => Illuminate\Support\Facades\Broadcast::class,
+        'Debugbar'     => Barryvdh\Debugbar\Facade::class,
         'Bus'          => Illuminate\Support\Facades\Bus::class,
         'Cache'        => Illuminate\Support\Facades\Cache::class,
         'Config'       => Illuminate\Support\Facades\Config::class,
@@ -217,9 +218,7 @@ return [
         'Agent'        => Jenssegers\Agent\Facades\Agent::class,
         'Purifier'     => Mews\Purifier\Facades\Purifier::class,
         'Geetest'      => Misechow\Geetest\Geetest::class,
-        'NoCaptcha'    => Misechow\NoCaptcha\Facades\NoCaptcha::class,
-        'JWTAuth'      => Tymon\JWTAuth\Facades\JWTAuth::class,
-        'Telegram'     => Telegram\Bot\Laravel\Facades\Telegram::class
+        'NoCaptcha' => Misechow\NoCaptcha\Facades\NoCaptcha::class,
     ],
 
 ];

+ 1 - 1
config/auth.php

@@ -42,7 +42,7 @@ return [
         ],
 
         'api' => [
-            'driver' => 'jwt',
+            'driver' => 'token',
             'provider' => 'users',
         ],
     ],

+ 0 - 8
config/bt.php

@@ -1,8 +0,0 @@
-<?php
-
-// 宝塔API action
-return [
-    'getSystemTotal' => '/system?action=GetSystemTotal',
-    'getDiskInfo'    => '/system?action=GetDiskInfo',
-    'getNetWork'     => '/system?action=GetNetWork',
-];

+ 0 - 16
config/common.php

@@ -1,16 +0,0 @@
-<?php
-
-return [
-    'level_map' => [ // 等级映射表
-        0 => '免费',
-        1 => 'VIP1',
-        2 => 'VIP2',
-        3 => 'VIP3',
-        4 => 'VIP4',
-        5 => 'VIP5',
-        6 => 'VIP6',
-        7 => 'VIP7',
-        8 => 'VIP8',
-        9 => 'VIP9'
-    ],
-];

+ 32 - 0
config/hashing.php

@@ -17,4 +17,36 @@ return [
 
     'driver' => 'bcrypt',
 
+    /*
+    |--------------------------------------------------------------------------
+    | Bcrypt Options
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify the configuration options that should be used when
+    | passwords are hashed using the Bcrypt algorithm. This will allow you
+    | to control the amount of time it takes to hash the given password.
+    |
+    */
+
+    'bcrypt' => [
+        'rounds' => env('BCRYPT_ROUNDS', 10),
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Argon Options
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify the configuration options that should be used when
+    | passwords are hashed using the Argon algorithm. These will allow you
+    | to control the amount of time it takes to hash the given password.
+    |
+    */
+
+    'argon' => [
+        'memory' => 1024,
+        'threads' => 2,
+        'time' => 2,
+    ],
+
 ];

+ 0 - 304
config/jwt.php

@@ -1,304 +0,0 @@
-<?php
-
-/*
- * This file is part of jwt-auth.
- *
- * (c) Sean Tymon <tymon148@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-return [
-
-    /*
-    |--------------------------------------------------------------------------
-    | JWT Authentication Secret
-    |--------------------------------------------------------------------------
-    |
-    | Don't forget to set this in your .env file, as it will be used to sign
-    | your tokens. A helper command is provided for this:
-    | `php artisan jwt:secret`
-    |
-    | Note: This will be used for Symmetric algorithms only (HMAC),
-    | since RSA and ECDSA use a private/public key combo (See below).
-    |
-    */
-
-    'secret' => env('JWT_SECRET'),
-
-    /*
-    |--------------------------------------------------------------------------
-    | JWT Authentication Keys
-    |--------------------------------------------------------------------------
-    |
-    | The algorithm you are using, will determine whether your tokens are
-    | signed with a random string (defined in `JWT_SECRET`) or using the
-    | following public & private keys.
-    |
-    | Symmetric Algorithms:
-    | HS256, HS384 & HS512 will use `JWT_SECRET`.
-    |
-    | Asymmetric Algorithms:
-    | RS256, RS384 & RS512 / ES256, ES384 & ES512 will use the keys below.
-    |
-    */
-
-    'keys' => [
-
-        /*
-        |--------------------------------------------------------------------------
-        | Public Key
-        |--------------------------------------------------------------------------
-        |
-        | A path or resource to your public key.
-        |
-        | E.g. 'file://path/to/public/key'
-        |
-        */
-
-        'public' => env('JWT_PUBLIC_KEY'),
-
-        /*
-        |--------------------------------------------------------------------------
-        | Private Key
-        |--------------------------------------------------------------------------
-        |
-        | A path or resource to your private key.
-        |
-        | E.g. 'file://path/to/private/key'
-        |
-        */
-
-        'private' => env('JWT_PRIVATE_KEY'),
-
-        /*
-        |--------------------------------------------------------------------------
-        | Passphrase
-        |--------------------------------------------------------------------------
-        |
-        | The passphrase for your private key. Can be null if none set.
-        |
-        */
-
-        'passphrase' => env('JWT_PASSPHRASE'),
-
-    ],
-
-    /*
-    |--------------------------------------------------------------------------
-    | JWT time to live
-    |--------------------------------------------------------------------------
-    |
-    | Specify the length of time (in minutes) that the token will be valid for.
-    | Defaults to 1 hour.
-    |
-    | You can also set this to null, to yield a never expiring token.
-    | Some people may want this behaviour for e.g. a mobile app.
-    | This is not particularly recommended, so make sure you have appropriate
-    | systems in place to revoke the token if necessary.
-    | Notice: If you set this to null you should remove 'exp' element from 'required_claims' list.
-    |
-    */
-
-    'ttl' => env('JWT_TTL', 60),
-
-    /*
-    |--------------------------------------------------------------------------
-    | Refresh time to live
-    |--------------------------------------------------------------------------
-    |
-    | Specify the length of time (in minutes) that the token can be refreshed
-    | within. I.E. The user can refresh their token within a 2 week window of
-    | the original token being created until they must re-authenticate.
-    | Defaults to 2 weeks.
-    |
-    | You can also set this to null, to yield an infinite refresh time.
-    | Some may want this instead of never expiring tokens for e.g. a mobile app.
-    | This is not particularly recommended, so make sure you have appropriate
-    | systems in place to revoke the token if necessary.
-    |
-    */
-
-    'refresh_ttl' => env('JWT_REFRESH_TTL', 20160),
-
-    /*
-    |--------------------------------------------------------------------------
-    | JWT hashing algorithm
-    |--------------------------------------------------------------------------
-    |
-    | Specify the hashing algorithm that will be used to sign the token.
-    |
-    | See here: https://github.com/namshi/jose/tree/master/src/Namshi/JOSE/Signer/OpenSSL
-    | for possible values.
-    |
-    */
-
-    'algo' => env('JWT_ALGO', 'HS256'),
-
-    /*
-    |--------------------------------------------------------------------------
-    | Required Claims
-    |--------------------------------------------------------------------------
-    |
-    | Specify the required claims that must exist in any token.
-    | A TokenInvalidException will be thrown if any of these claims are not
-    | present in the payload.
-    |
-    */
-
-    'required_claims' => [
-        'iss',
-        'iat',
-        'exp',
-        'nbf',
-        'sub',
-        'jti',
-    ],
-
-    /*
-    |--------------------------------------------------------------------------
-    | Persistent Claims
-    |--------------------------------------------------------------------------
-    |
-    | Specify the claim keys to be persisted when refreshing a token.
-    | `sub` and `iat` will automatically be persisted, in
-    | addition to the these claims.
-    |
-    | Note: If a claim does not exist then it will be ignored.
-    |
-    */
-
-    'persistent_claims' => [
-        // 'foo',
-        // 'bar',
-    ],
-
-    /*
-    |--------------------------------------------------------------------------
-    | Lock Subject
-    |--------------------------------------------------------------------------
-    |
-    | This will determine whether a `prv` claim is automatically added to
-    | the token. The purpose of this is to ensure that if you have multiple
-    | authentication models e.g. `App\User` & `App\OtherPerson`, then we
-    | should prevent one authentication request from impersonating another,
-    | if 2 tokens happen to have the same id across the 2 different models.
-    |
-    | Under specific circumstances, you may want to disable this behaviour
-    | e.g. if you only have one authentication model, then you would save
-    | a little on token size.
-    |
-    */
-
-    'lock_subject' => true,
-
-    /*
-    |--------------------------------------------------------------------------
-    | Leeway
-    |--------------------------------------------------------------------------
-    |
-    | This property gives the jwt timestamp claims some "leeway".
-    | Meaning that if you have any unavoidable slight clock skew on
-    | any of your servers then this will afford you some level of cushioning.
-    |
-    | This applies to the claims `iat`, `nbf` and `exp`.
-    |
-    | Specify in seconds - only if you know you need it.
-    |
-    */
-
-    'leeway' => env('JWT_LEEWAY', 0),
-
-    /*
-    |--------------------------------------------------------------------------
-    | Blacklist Enabled
-    |--------------------------------------------------------------------------
-    |
-    | In order to invalidate tokens, you must have the blacklist enabled.
-    | If you do not want or need this functionality, then set this to false.
-    |
-    */
-
-    'blacklist_enabled' => env('JWT_BLACKLIST_ENABLED', true),
-
-    /*
-    | -------------------------------------------------------------------------
-    | Blacklist Grace Period
-    | -------------------------------------------------------------------------
-    |
-    | When multiple concurrent requests are made with the same JWT,
-    | it is possible that some of them fail, due to token regeneration
-    | on every request.
-    |
-    | Set grace period in seconds to prevent parallel request failure.
-    |
-    */
-
-    'blacklist_grace_period' => env('JWT_BLACKLIST_GRACE_PERIOD', 0),
-
-    /*
-    |--------------------------------------------------------------------------
-    | Cookies encryption
-    |--------------------------------------------------------------------------
-    |
-    | By default Laravel encrypt cookies for security reason.
-    | If you decide to not decrypt cookies, you will have to configure Laravel
-    | to not encrypt your cookie token by adding its name into the $except
-    | array available in the middleware "EncryptCookies" provided by Laravel.
-    | see https://laravel.com/docs/master/responses#cookies-and-encryption
-    | for details.
-    |
-    | Set it to true if you want to decrypt cookies.
-    |
-    */
-
-    'decrypt_cookies' => false,
-
-    /*
-    |--------------------------------------------------------------------------
-    | Providers
-    |--------------------------------------------------------------------------
-    |
-    | Specify the various providers used throughout the package.
-    |
-    */
-
-    'providers' => [
-
-        /*
-        |--------------------------------------------------------------------------
-        | JWT Provider
-        |--------------------------------------------------------------------------
-        |
-        | Specify the provider that is used to create and decode the tokens.
-        |
-        */
-
-        'jwt' => Tymon\JWTAuth\Providers\JWT\Lcobucci::class,
-
-        /*
-        |--------------------------------------------------------------------------
-        | Authentication Provider
-        |--------------------------------------------------------------------------
-        |
-        | Specify the provider that is used to authenticate users.
-        |
-        */
-
-        'auth' => Tymon\JWTAuth\Providers\Auth\Illuminate::class,
-
-        /*
-        |--------------------------------------------------------------------------
-        | Storage Provider
-        |--------------------------------------------------------------------------
-        |
-        | Specify the provider that is used to store tokens in the blacklist.
-        |
-        */
-
-        'storage' => Tymon\JWTAuth\Providers\Storage\Illuminate::class,
-
-    ],
-
-];

+ 12 - 1
config/logging.php

@@ -1,5 +1,7 @@
 <?php
 
+use Monolog\Handler\StreamHandler;
+
 return [
 
     /*
@@ -25,7 +27,8 @@ return [
     | you a variety of powerful log handlers / formatters to utilize.
     |
     | Available Drivers: "single", "daily", "slack", "syslog",
-    |                    "errorlog", "custom", "stack"
+    |                    "errorlog", "monolog",
+    |                    "custom", "stack"
     |
     */
 
@@ -56,6 +59,14 @@ return [
             'level' => 'critical',
         ],
 
+        'stderr' => [
+            'driver' => 'monolog',
+            'handler' => StreamHandler::class,
+            'with' => [
+                'stream' => 'php://stderr',
+            ],
+        ],
+
         'syslog' => [
             'driver' => 'syslog',
             'level' => 'debug',

+ 1 - 1
config/services.php

@@ -22,7 +22,7 @@ return [
     'ses' => [
         'key' => env('SES_KEY'),
         'secret' => env('SES_SECRET'),
-        'region' => 'us-east-1',
+        'region' => env('SES_REGION', 'us-east-1'),
     ],
 
     'sparkpost' => [

+ 0 - 27
config/sms.php

@@ -1,27 +0,0 @@
-<?php
-
-return [
-    // HTTP 请求的超时时间(秒)
-    'timeout'  => 5.0,
-
-    // 默认发送配置
-    'default'  => [
-        // 网关调用策略,默认:顺序调用
-        'strategy' => \Overtrue\EasySms\Strategies\OrderStrategy::class,
-
-        // 默认可用的发送网关
-        'gateways' => [
-            'yunpian',
-        ],
-    ],
-
-    // 可用的网关配置
-    'gateways' => [
-        'errorlog' => [
-            'file' => '/tmp/easy-sms.log',
-        ],
-        'yunpian'  => [
-            'api_key' => '0c9c87c41aac355520d47d3c84e5a532',
-        ],
-    ],
-];

+ 0 - 204
config/telegram.php

@@ -1,204 +0,0 @@
-<?php
-
-return [
-    /*
-    |--------------------------------------------------------------------------
-    | Your Telegram Bots
-    |--------------------------------------------------------------------------
-    | You may use multiple bots at once using the manager class. Each bot
-    | that you own should be configured here.
-    |
-    | Here are each of the telegram bots config parameters.
-    |
-    | Supported Params:
-    |
-    | - name: The *personal* name you would like to refer to your bot as.
-    |
-    |       - username: Your Telegram Bot's Username.
-    |                       Example: (string) 'BotFather'.
-    |
-    |       - token:    Your Telegram Bot's Access Token.
-                        Refer for more details: https://core.telegram.org/bots#botfather
-    |                   Example: (string) '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11'.
-    |
-    |       - commands: (Optional) Commands to register for this bot,
-    |                   Supported Values: "Command Group Name", "Shared Command Name", "Full Path to Class".
-    |                   Default: Registers Global Commands.
-    |                   Example: (array) [
-    |                       'admin', // Command Group Name.
-    |                       'status', // Shared Command Name.
-    |                       Acme\Project\Commands\BotFather\HelloCommand::class,
-    |                       Acme\Project\Commands\BotFather\ByeCommand::class,
-    |             ]
-    */
-    'bots'                         => [
-        'mybot' => [
-            'username'         => 'TelegramBot',
-            'token'            => env('TELEGRAM_BOT_TOKEN', 'YOUR-BOT-TOKEN'),
-            'certificate_path' => env('TELEGRAM_CERTIFICATE_PATH', 'YOUR-CERTIFICATE-PATH'),
-            'webhook_url'      => env('TELEGRAM_WEBHOOK_URL', 'YOUR-BOT-WEBHOOK-URL'),
-            'commands'         => [
-                //Acme\Project\Commands\MyTelegramBot\BotCommand::class
-            ],
-        ],
-
-//        'mySecondBot' => [
-//            'username'  => 'AnotherTelegram_Bot',
-//            'token' => '123456:abc',
-//        ],
-    ],
-
-    /*
-    |--------------------------------------------------------------------------
-    | Default Bot Name
-    |--------------------------------------------------------------------------
-    |
-    | Here you may specify which of the bots you wish to use as
-    | your default bot for regular use.
-    |
-    */
-    'default'                      => 'mybot',
-
-    /*
-    |--------------------------------------------------------------------------
-    | Asynchronous Requests [Optional]
-    |--------------------------------------------------------------------------
-    |
-    | When set to True, All the requests would be made non-blocking (Async).
-    |
-    | Default: false
-    | Possible Values: (Boolean) "true" OR "false"
-    |
-    */
-    'async_requests'               => env('TELEGRAM_ASYNC_REQUESTS', false),
-
-    /*
-    |--------------------------------------------------------------------------
-    | HTTP Client Handler [Optional]
-    |--------------------------------------------------------------------------
-    |
-    | If you'd like to use a custom HTTP Client Handler.
-    | Should be an instance of \Telegram\Bot\HttpClients\HttpClientInterface
-    |
-    | Default: GuzzlePHP
-    |
-    */
-    'http_client_handler'          => null,
-
-    /*
-    |--------------------------------------------------------------------------
-    | Resolve Injected Dependencies in commands [Optional]
-    |--------------------------------------------------------------------------
-    |
-    | Using Laravel's IoC container, we can easily type hint dependencies in
-    | our command's constructor and have them automatically resolved for us.
-    |
-    | Default: true
-    | Possible Values: (Boolean) "true" OR "false"
-    |
-    */
-    'resolve_command_dependencies' => true,
-
-    /*
-    |--------------------------------------------------------------------------
-    | Register Telegram Global Commands [Optional]
-    |--------------------------------------------------------------------------
-    |
-    | If you'd like to use the SDK's built in command handler system,
-    | You can register all the global commands here.
-    |
-    | Global commands will apply to all the bots in system and are always active.
-    |
-    | The command class should extend the \Telegram\Bot\Commands\Command class.
-    |
-    | Default: The SDK registers, a help command which when a user sends /help
-    | will respond with a list of available commands and description.
-    |
-    */
-    'commands'                     => [
-        Telegram\Bot\Commands\HelpCommand::class,
-    ],
-
-    /*
-    |--------------------------------------------------------------------------
-    | Command Groups [Optional]
-    |--------------------------------------------------------------------------
-    |
-    | You can organize a set of commands into groups which can later,
-    | be re-used across all your bots.
-    |
-    | You can create 4 types of groups:
-    | 1. Group using full path to command classes.
-    | 2. Group using shared commands: Provide the key name of the shared command
-    | and the system will automatically resolve to the appropriate command.
-    | 3. Group using other groups of commands: You can create a group which uses other
-    | groups of commands to bundle them into one group.
-    | 4. You can create a group with a combination of 1, 2 and 3 all together in one group.
-    |
-    | Examples shown below are by the group type for you to understand each of them.
-    */
-    'command_groups'               => [
-        /* // Group Type: 1
-           'commmon' => [
-                Acme\Project\Commands\TodoCommand::class,
-                Acme\Project\Commands\TaskCommand::class,
-           ],
-        */
-
-        /* // Group Type: 2
-           'subscription' => [
-                'start', // Shared Command Name.
-                'stop', // Shared Command Name.
-           ],
-        */
-
-        /* // Group Type: 3
-            'auth' => [
-                Acme\Project\Commands\LoginCommand::class,
-                Acme\Project\Commands\SomeCommand::class,
-            ],
-
-            'stats' => [
-                Acme\Project\Commands\UserStatsCommand::class,
-                Acme\Project\Commands\SubscriberStatsCommand::class,
-                Acme\Project\Commands\ReportsCommand::class,
-            ],
-
-            'admin' => [
-                'auth', // Command Group Name.
-                'stats' // Command Group Name.
-            ],
-        */
-
-        /* // Group Type: 4
-           'myBot' => [
-                'admin', // Command Group Name.
-                'subscription', // Command Group Name.
-                'status', // Shared Command Name.
-                'Acme\Project\Commands\BotCommand' // Full Path to Command Class.
-           ],
-        */
-    ],
-
-    /*
-    |--------------------------------------------------------------------------
-    | Shared Commands [Optional]
-    |--------------------------------------------------------------------------
-    |
-    | Shared commands let you register commands that can be shared between,
-    | one or more bots across the project.
-    |
-    | This will help you prevent from having to register same set of commands,
-    | for each bot over and over again and make it easier to maintain them.
-    |
-    | Shared commands are not active by default, You need to use the key name to register them,
-    | individually in a group of commands or in bot commands.
-    | Think of this as a central storage, to register, reuse and maintain them across all bots.
-    |
-    */
-    'shared_commands'              => [
-        // 'start' => Acme\Project\Commands\StartCommand::class,
-        // 'stop' => Acme\Project\Commands\StopCommand::class,
-        // 'status' => Acme\Project\Commands\StatusCommand::class,
-    ],
-];

+ 2 - 2
config/version.php

@@ -1,6 +1,6 @@
 <?php
 
 return [
-    'number' => '500',
-    'name'   => 'OtakuMod'
+    'number' => '1.1',
+    'name'   => 'SSRPanel_OtakuMod'
 ];

+ 3 - 3
public/install.php

@@ -230,7 +230,7 @@ if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] == 'POST') {
     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1">
     <meta name="renderer" content="webkit">
 
-    <style>
+    <style type="text/css">
         body {
             background: #5c97bd;
             margin: 0;
@@ -419,9 +419,9 @@ if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] == 'POST') {
         </form>
 
         <!-- jQuery -->
-        <script src="https://cdn.staticfile.org/jquery/2.1.4/jquery.min.js"></script>
+        <script src="//cdn.staticfile.org/jquery/2.1.4/jquery.min.js" type="text/javascript"></script>
 
-        <script>
+        <script type="text/javascript">
             $(function () {
 
                 $('form').on('submit', function (e) {

+ 78 - 47
resources/views/admin/addArticle.blade.php

@@ -1,7 +1,7 @@
 @extends('admin.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/dropify/dropify.min.css">
-    <link rel="stylesheet" href="/assets/global/vendor/summernote/summernote.min.css">
+    <link href="/assets/global/vendor/dropify/dropify.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/vendor/summernote/summernote.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container">
@@ -11,7 +11,7 @@
             </div>
             @if($errors->any())
                 <div class="alert alert-danger">
-                    <button class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span><span class="sr-only">{{trans('home.close')}}</span></button>
+                    <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
                     {{$errors->first()}}
                 </div>
             @endif
@@ -19,71 +19,68 @@
                 <form action="/admin/addArticle" method="post" enctype="multipart/form-data" class="form-horizontal">
                     <div class="form-group row">
                         <label class="col-form-label col-md-2" for="type">类型</label>
-                        <ul class="col-md-9 list-unstyled list-inline">
-                            <li class="list-inline-item">
-                                <div class="radio-custom radio-primary">
-                                    <input type="radio" name="type" value="1" checked>
-                                    <label>文章</label>
-                                </div>
-                            </li>
-                            <li class="list-inline-item">
-                                <div class="radio-custom radio-primary">
-                                    <input type="radio" name="type" value="2">
-                                    <label>公告</label>
-                                </div>
-                            </li>
-                            <li class="list-inline-item">
-                                <div class="radio-custom radio-primary">
-                                    <input type="radio" name="type" value="3" disabled>
-                                    <label>购买说明</label>
-                                </div>
-                            </li>
-                            <li class="list-inline-item">
-                                <div class="radio-custom radio-primary">
-                                    <input type="radio" name="type" value="4" disabled>
-                                    <label>使用教程</label>
-                                </div>
-                            </li>
-                        </ul>
+                        <div class="col-md-10 d-flex align-items-center">
+                            <div class="radio-custom radio-primary radio-inline">
+                                <input type="radio" name="type" value="1" checked/>
+                                <label for="type">文章</label>
+                            </div>
+                            <div class="radio-custom radio-primary radio-inline">
+                                <input type="radio" name="type" value="2"/>
+                                <label for="type">公告</label>
+                            </div>
+                            <div class="radio-custom radio-primary radio-inline">
+                                <input type="radio" name="type" value="3" disabled/>
+                                <label for="type">购买说明</label>
+                            </div>
+                            <div class="radio-custom radio-primary radio-inline">
+                                <input type="radio" name="type" value="4" disabled/>
+                                <label for="type">使用教程</label>
+                            </div>
+                        </div>
                     </div>
                     <div class="form-group row">
                         <label class="col-form-label col-md-2" for="title">标题</label>
-                        <div class="col-md-6">
+                        <div class="col-md-4">
                             <input type="text" class="form-control" name="title" id="title" autofocus required/>
                             <input type="hidden" name="_token" value="{{csrf_token()}}">
                         </div>
                     </div>
                     <div class="form-group row" id="summary">
                         <label class="col-form-label col-md-2" for="summary">简介</label>
-                        <div class="col-md-6">
+                        <div class="col-md-8">
                             <input type="text" class="form-control" name="summary" id="summary"/>
                         </div>
                     </div>
                     <div class="form-group row" id="sort">
                         <label class="col-form-label col-md-2" for="sort">排序</label>
-                        <div class="col-md-6">
-                            <input type="text" class="form-control" name="sort" id="sort" value="0" required/>
-                            <span class="text-help offset-md-1"> 值越高显示时越靠前 </span>
+                        <div class="col-md-2">
+                            <input type="number" class="form-control" name="sort" id="sort" value="0" required/>
                         </div>
+                        <span class="text-help"> 值越高显示时越靠前 </span>
                     </div>
                     <div class="form-group row" id="all_logo">
                         <label class="col-form-label col-md-2" for="logo">LOGO</label>
-                        <div class="col-md-6" id="icon" style="display: none;">
-                            <input type="txt" id="logo" class="form-control" name="logo" placeholder=""/>
+                        <div class="col-md-4" id="icon" style="display: none;">
+                            <input type="text" name="logo" id="logo" class="form-control"/>
                             <span class="text-help"><a href="https://fontawesome.com/v4.7.0/icons/" target="_blank">图标列表</a> | 格式: fa-windows</span>
                         </div>
-                        <div class="col-md-6" id="logoUpload">
+
+                        <div class="col-md-4" id="logoUpload">
                             <input type="file" id="logo" name="logo" data-plugin="dropify" data-default-file="/assets/images/noimage.png"/>
-                            <button type="submit" class="btn btn-success float-right mt-10"> 提交</button>
-                            <span class="text-help offset-md-1"> 推荐尺寸:100x75 </span>
+                            <span class="text-help"> 推荐尺寸:100x75 </span>
                         </div>
                     </div>
                     <div class="form-group row">
-                        <label class="col-form-label col-md-2" for="content">内容</label>
-                        <textarea class="col-md-10" name="content" id="summernote" data-plugin="summernote" rows="15"> </textarea>
+                        <label class="col-form-label col-md-2" for="summernote">内容</label>
+                        <div class="col-md-10">
+                            <textarea class="form-control" name="content" id="summernote" data-plugin="summernote" rows="15"> </textarea>
+                        </div>
                     </div>
-                    <div class="form-actions">
-                        <button type="submit" class="btn btn-success">提交</button>
+                    <div class="form-actions text-right">
+                        <div class="btn-group">
+                            <a href="/admin/articleList" class="btn btn-danger">返回</a>
+                            <button type="submit" class="btn btn-success">提交</button>
+                        </div>
                     </div>
                 </form>
             </div>
@@ -91,8 +88,42 @@
     </div>
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/dropify/dropify.min.js"></script>
-    <script src="/assets/global/vendor/summernote/summernote.min.js"></script>
-    <script src="/assets/global/js/Plugin/dropify.js"></script>
-    <script src="/assets/global/js/Plugin/summernote.js"></script>
+    <script src="/assets/global/vendor/dropify/dropify.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/summernote/summernote.min.js" type="text/javascript"></script>
+    <script src="/assets/global/js/Plugin/dropify.js" type="text/javascript"></script>
+    <script src="/assets/global/js/Plugin/summernote.js" type="text/javascript"></script>
+    <script type="text/javascript">
+        $("input:radio[name='type']").on('change', function () {
+            const type = parseInt($(this).val());
+            switch (type) {
+                case 1:
+                    $("#summary").show();
+                    $("#sort").show();
+                    $("#all_logo").show();
+                    $("#icon").hide();
+                    $("#logoUpload").show();
+                    break;
+                case 2:
+                    $("#summary").hide();
+                    $("#sort").hide();
+                    $("#all_logo").hide();
+                    break;
+                case 3:
+                    $("#summary").hide();
+                    $("#sort").show();
+                    $("#all_logo").show();
+                    $("#icon").show();
+                    $("#logoUpload").hide();
+                    break;
+                case 4:
+                    $("#summary").hide();
+                    $("#sort").hide();
+                    $("#all_logo").show();
+                    $("#icon").show();
+                    $("#logoUpload").hide();
+                    break;
+                default:
+            }
+        });
+    </script>
 @endsection

+ 5 - 5
resources/views/admin/addGroup.blade.php

@@ -12,7 +12,7 @@
                 </div>
             @endif
             <div class="panel-body">
-                <form action="#" method="post" enctype="multipart/form-data" class="form-horizontal" role="form" onsubmit="return do_submit();">
+                <form action="#" method="post" enctype="multipart/form-data" class="form-horizontal" role="form" onsubmit="return Submit()">
                     <div class="form-group row">
                         <label class="col-form-label col-md-1" for="name">分组名称</label>
                         <input type="text" class="form-control col-md-5" name="name" value="" id="name" required/>
@@ -40,7 +40,7 @@
 @section('script')
     <script type="text/javascript">
         // ajax同步提交
-        function do_submit() {
+        function Submit() {
             const _token = '{{csrf_token()}}';
             const name = $('#name').val();
             const level = $("#level option:selected").val();
@@ -53,8 +53,8 @@
                 dataType: 'json',
                 success: function (ret) {
                     if (ret.status === 'success') {
-                        swal.fire({title: ret.message, type: 'success', timer: 1000})
-                            .then(() => window.location.href = '/admin/groupLis')
+                        swal.fire({title: ret.message, type: 'success', timer: 1000, showConfirmButton: false})
+                            .then(() => window.location.href = '/admin/groupList')
                     } else {
                         swal.fire({title: ret.message, type: "error"}).then(() => window.location.reload())
                     }
@@ -63,4 +63,4 @@
             return false;
         }
     </script>
-@endsection
+@endsection

+ 4 - 5
resources/views/admin/addLabel.blade.php

@@ -12,7 +12,7 @@
                 </div>
             @endif
             <div class="panel-body">
-                <form role="form" action="/admin/addLabel" method="post" enctype="multipart/form-data" class="form-horizontal" onsubmit="return doSubmit();">
+                <form role="form" action="/admin/addLabel" method="post" enctype="multipart/form-data" class="form-horizontal" onsubmit="return Submit()">
                     <div class="form-group row">
                         <label for="name" class="col-form-label col-md-1">标签</label>
                         <input type="text" class="form-control col-md-6" name="name" id="name" autofocus required/>
@@ -20,7 +20,7 @@
                     </div>
                     <div class="form-group row">
                         <label for="sort" class="col-form-label col-md-1">排序</label>
-                        <input type="text" class="form-control col-md-6" name="sort" id="sort" value="0" required/>
+                        <input type="number" class="form-control col-md-6" name="sort" id="sort" value="0" required/>
                         <span class="text-help offset-md-1"> 排序值越高显示时越靠前 &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;</span>
                     </div>
                     <div class="form-actions">
@@ -34,7 +34,7 @@
 @section('script')
     <script type="text/javascript">
         // ajax同步提交
-        function doSubmit() {
+        function Submit() {
             const _token = '{{csrf_token()}}';
             const name = $('#name').val();
             const sort = $('#sort').val();
@@ -54,8 +54,7 @@
                     }
                 }
             });
-
             return false;
         }
     </script>
-@endsection
+@endsection

+ 7 - 7
resources/views/admin/addNode.blade.php

@@ -1,7 +1,7 @@
 @extends('admin.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-select/bootstrap-select.min.css">
-    <style>
+    <link href="/assets/global/vendor/bootstrap-select/bootstrap-select.min.css" type="text/css" rel="stylesheet">
+    <style type="text/css">
         .hidden {
             display: none
         }
@@ -18,7 +18,7 @@
                 <strong>注意:</strong> 添加节点后自动生成的<code>ID</code>,即为该节点部署ShadowsocksR Python版后端时<code>usermysql.json</code>中的<code>node_id</code>的值,同时也是部署V2Ray后端时的<code>nodeId</code>的值;
             </div>
             <div class="panel-body">
-                <form action="/admin/addNode" method="post" class="form-horizontal" onsubmit="return do_submit();">
+                <form action="/admin/addNode" method="post" class="form-horizontal" onsubmit="return Submit()">
                     <div class="row">
                         <div class="col-lg-6">
                             <div class="example-wrap">
@@ -453,12 +453,12 @@
     </div>
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/bootstrap-select/bootstrap-select.min.js"></script>
-    <script src="/assets/global/js/Plugin/bootstrap-select.js"></script>
+    <script src="/assets/global/vendor/bootstrap-select/bootstrap-select.min.js" type="text/javascript"></script>
+    <script src="/assets/global/js/Plugin/bootstrap-select.js" type="text/javascript"></script>
 
     <script type="text/javascript">
         // ajax同步提交
-        function do_submit() {
+        function Submit() {
             var name = $('#name').val();
             var labels = $("#labels").val();
             var group_id = $("#group_id option:selected").val();
@@ -641,4 +641,4 @@
             });
         }
     </script>
-@endsection
+@endsection

+ 16 - 16
resources/views/admin/addUser.blade.php

@@ -1,7 +1,7 @@
 @extends('admin.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-select/bootstrap-select.min.css">
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-datepicker/bootstrap-datepicker.min.css">
+    <link href="/assets/global/vendor/bootstrap-select/bootstrap-select.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/vendor/bootstrap-datepicker/bootstrap-datepicker.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container-fluid">
@@ -10,7 +10,7 @@
                 <h2 class="panel-title">用户添加</h2>
             </div>
             <div class="panel-body">
-                <form action="/admin/addUser" method="post" class="form-horizontal" onsubmit="return do_submit();">
+                <form action="/admin/addUser" method="post" class="form-horizontal" onsubmit="return Submit()">
                     <div class="row">
                         <div class="col-lg-6">
                             <div class="example-wrap">
@@ -21,7 +21,7 @@
                                 </div>
                                 <div class="form-group row">
                                     <label for="password" class="col-md-3 col-form-label">密码</label>
-                                    <input type="text" class="form-control col-md-4" name="password" value="" id="password" placeholder="留空则自动生成随机密码" autocomplete="off"/>
+                                    <input type="password" class="form-control col-md-4" name="password" value="" id="password" placeholder="留空则自动生成随机密码" autocomplete="off"/>
                                 </div>
                                 <div class="form-group row">
                                     <label class="col-md-3 col-form-label">用途</label>
@@ -167,7 +167,7 @@
                                 </div>
                                 <div class="form-group row">
                                     <label for="qq" class="col-md-3 col-form-label">QQ</label>
-                                    <input type="text" class="col-md-4 form-control" name="qq" id="qq" autocomplete="off"/>
+                                    <input type="number" class="col-md-4 form-control" name="qq" id="qq" autocomplete="off"/>
                                 </div>
                                 <div class="form-group row">
                                     <label for="remark" class="col-md-3 col-form-label">备注</label>
@@ -182,11 +182,11 @@
                                     <div class="col-md-4">
                                         @if(\App\Components\Helpers::systemConfig()['is_rand_port'])
                                             <div class="input-group">
-                                                <input class="form-control" type="text" name="port" value="{{$last_port}}" id="port" autocomplete="off"/>
+                                                <input class="form-control" type="number" name="port" value="{{$last_port}}" id="port" autocomplete="off"/>
                                                 <span class="input-group-append"><button class="btn btn-success" type="button" onclick="makePort()"> <i class="icon wb-refresh"></i> </button></span>
                                             </div>
                                         @else
-                                            <input type="text" class="form-control" name="port" value="{{$last_port}}" id="port" autocomplete="off" aria-required="true" aria-invalid="true" aria-describedby="number-error" required/>
+                                            <input type="number" class="form-control" name="port" value="{{$last_port}}" id="port" autocomplete="off" aria-required="true" aria-invalid="true" aria-describedby="number-error" required/>
                                         @endif
                                     </div>
                                 </div>
@@ -208,7 +208,7 @@
                                 <div class="form-group row">
                                     <label for="transfer_enable" class="col-md-3 col-form-label">可用流量</label>
                                     <div class="input-group col-md-3">
-                                        <input type="text" class="form-control" name="transfer_enable" value="1024" id="transfer_enable" autocomplete="off" required>
+                                        <input type="number" class="form-control" name="transfer_enable" value="1024" id="transfer_enable" autocomplete="off" required>
                                         <span class="input-group-text">GB</span>
                                     </div>
                                 </div>
@@ -258,7 +258,7 @@
                                 <div class="form-group row">
                                     <label for="speed_limit_per_con" class="col-md-3 col-form-label">单连接限速</label>
                                     <div class="input-group col-md-4">
-                                        <input type="text" class="form-control" name="speed_limit_per_con" value="10737418240" id="speed_limit_per_con" autocomplete="off"/>
+                                        <input type="number" class="form-control" name="speed_limit_per_con" value="10737418240" id="speed_limit_per_con" autocomplete="off"/>
                                         <span class="input-group-text">Byte</span>
                                     </div>
                                     <span class="text-help offset-md-1"> 为 0 时不限速 </span>
@@ -266,7 +266,7 @@
                                 <div class="form-group row">
                                     <label for="speed_limit_per_user" class="col-md-3 col-form-label">单用户限速</label>
                                     <div class="input-group col-md-4">
-                                        <input type="text" class="form-control" name="speed_limit_per_user" value="10737418240" id="speed_limit_per_user" autocomplete="off"/>
+                                        <input type="number" class="form-control" name="speed_limit_per_user" value="10737418240" id="speed_limit_per_user" autocomplete="off"/>
                                         <span class="input-group-text">Byte</span>
                                     </div>
                                     <span class="text-help offset-md-1">为 0 时不限速 </span>
@@ -292,10 +292,10 @@
     </div>
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/bootstrap-select/bootstrap-select.min.js"></script>
-    <script src="/assets/global/vendor/bootstrap-datepicker/bootstrap-datepicker.min.js"></script>
-    <script src="/assets/global/js/Plugin/bootstrap-select.js"></script>
-    <script src="/assets/global/js/Plugin/bootstrap-datepicker.js"></script>
+    <script src="/assets/global/vendor/bootstrap-select/bootstrap-select.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-datepicker/bootstrap-datepicker.min.js" type="text/javascript"></script>
+    <script src="/assets/global/js/Plugin/bootstrap-select.js" type="text/javascript"></script>
+    <script src="/assets/global/js/Plugin/bootstrap-datepicker.js" type="text/javascript"></script>
 
     <script type="text/javascript">
         $('.input-daterange>input').datepicker({
@@ -304,7 +304,7 @@
         });
 
         // ajax同步提交
-        function do_submit() {
+        function Submit() {
             var _token = '{{csrf_token()}}';
             var username = $('#username').val();
             var password = $('#password').val();
@@ -407,4 +407,4 @@
             });
         }
     </script>
-@endsection
+@endsection

+ 3 - 3
resources/views/admin/analysis.blade.php

@@ -1,6 +1,6 @@
 @extends('admin.layouts')
 @section('css')
-	<link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css">
+	<link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
 	<div class="page-content container">
@@ -46,8 +46,8 @@
 
 @endsection
 @section('script')
-	<script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
-	<script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
+	<script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+	<script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
 
 	<script type="text/javascript">
         var TableDatatablesScroller = function () {

+ 13 - 12
resources/views/admin/applyDetail.blade.php

@@ -1,6 +1,6 @@
 @extends('admin.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container">
@@ -14,16 +14,17 @@
                         <span class="badge badge-lg badge-success"> 已打款 </span>
                     @else
                         <div class="btn-group" role="group">
+                            <a href="/admin/applyList" class="btn btn-danger"> 返回</a>
                             <button type="button" class="btn btn-primary dropdown-toggle" href="javascript:" data-toggle="dropdown" aria-expanded="false">
                                 <i class="icon wb-list" aria-hidden="true"></i>
                             </button>
-                            <div class="dropdown-menu" aria-labelledby="exampleIconDropdown1" role="menu">
+                            <div class="dropdown-menu" role="menu">
                                 @if($info->status == 0)
-                                    <a class="dropdown-item" href="javascript:setStatus('1');" role="menuitem"><i class="icon wb-check" aria-hidden="true"></i>审核通过</a>
-                                    <a class="dropdown-item" href="javascript:setStatus('-1');" role="menuitem"><i class="icon wb-close" aria-hidden="true"></i>驳回</a>
+                                    <a class="dropdown-item" href="javascript:setStatus(1);" role="menuitem"><i class="icon wb-check" aria-hidden="true"></i>审核通过</a>
+                                    <a class="dropdown-item" href="javascript:setStatus(-1);" role="menuitem"><i class="icon wb-close" aria-hidden="true"></i>驳回</a>
                                 @endif
                                 @if($info->status == 1)
-                                    <a class="dropdown-item" href="javascript:setStatus('2');" role="menuitem"><i class="icon wb-check-circle" aria-hidden="true"></i>已打款</a>
+                                    <a class="dropdown-item" href="javascript:setStatus(2);" role="menuitem"><i class="icon wb-check-circle" aria-hidden="true"></i>已打款</a>
                                 @endif
                             </div>
                         </div>
@@ -38,6 +39,7 @@
                             <th colspan="6">申请单ID:{{$info->id}} | 申请人:{{$info->user->username}} | 申请提现金额:¥{{$info->amount}} | 申请时间:{{$info->created_at}}</th>
                         </tr>
                         <tr>
+                            <th> # </th>
                             <th> 关联人</th>
                             <th> 关联订单</th>
                             <th> 订单金额</th>
@@ -71,12 +73,12 @@
             <div class="panel-footer">
                 <div class="row">
                     <div class="col-sm-4">
-                        本申请共涉及 {{$list->total()}} 单
+                        本申请共涉及 <code>{{$list->total()}}</code>
                     </div>
                     <div class="col-sm-8">
-                        <div class="Page navigation float-right">
-                            {{ $list->links() }}
-                        </div>
+                        <nav class="Page navigation float-right">
+                            {{$list->links()}}
+                        </nav>
                     </div>
                 </div>
             </div>
@@ -84,9 +86,8 @@
     </div>
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
-    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
-
+    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
     <script type="text/javascript">
         // 更改状态
         function setStatus(status) {

+ 27 - 29
resources/views/admin/applyList.blade.php

@@ -1,6 +1,6 @@
 @extends('admin.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container-fluid">
@@ -9,10 +9,12 @@
                 <h3 class="panel-title">提现申请列表</h3>
             </div>
             <div class="panel-body">
-                <div class="form-inline mb-20">
-                    <div class="form-group">
-                        <input type="text" class="form-control" name="username" value="{{Request::get('username')}}" id="username" placeholder="申请账号" autocomplete="off">
-                        <select class="form-control" name="status" id="status">
+                <div class="form-row">
+                    <div class="form-group col-lg-2 col-sm-4">
+                        <input type="text" class="form-control" name="username" value="{{Request::get('username')}}" id="username" placeholder="申请账号"/>
+                    </div>
+                    <div class="form-group col-lg-2 col-sm-4">
+                        <select class="form-control" name="status" id="status" onChange="Search()">
                             <option value="" @if(Request::get('status') == '') selected hidden @endif>状态</option>
                             <option value="-1" @if(Request::get('status') == '-1') selected hidden @endif>驳回</option>
                             <option value="0" @if(Request::get('status') == '0') selected hidden @endif>待审核</option>
@@ -20,12 +22,12 @@
                             <option value="2" @if(Request::get('status') == '2') selected hidden @endif>已打款</option>
                         </select>
                     </div>
-                    <div class="btn-group">
-                        <button class="btn btn-primary" onclick="doSearch()">搜索</button>
-                        <button class="btn btn-danger" onclick="doReset()">重置</button>
+                    <div class="form-group col-lg-1 col-sm-4 btn-group">
+                        <button class="btn btn-primary" onclick="Search()">搜索</button>
+                        <a href="/admin/applyList" class="btn btn-danger">重置</a>
                     </div>
                 </div>
-                <table class="text-center" data-toggle="table" data-mobile-responsive="true">
+                <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
                     <thead class="thead-default">
                     <tr>
                         <th> #</th>
@@ -69,9 +71,9 @@
                                 <td> {{$apply->created_at == $apply->updated_at ? '' : $apply->updated_at}} </td>
                                 <td>
                                     @if($apply->status > 0 && $apply->status < 2)
-                                        <button class="btn btn-sm btn-danger" onclick="doAudit('{{$apply->id}}')"> 审核</button>
+                                        <a href="/admin/applyDetail?id={{$apply->id}}" class="btn btn-sm btn-danger">审核</a>
                                     @else
-                                        <button class="btn btn-sm btn-primary" onclick="doAudit('{{$apply->id}}')"><i class="icon wb-search"></i></button>
+                                        <a href="/admin/applyDetail?id={{$apply->id}}" class="btn btn-sm btn-primary"><i class="icon wb-search"></i></a>
                                     @endif
                                 </td>
                             </tr>
@@ -83,12 +85,12 @@
             <div class="panel-footer">
                 <div class="row">
                     <div class="col-sm-4">
-                        共 {{$applyList->total()}} 个申请
+                        共 <code>{{$applyList->total()}}</code> 个申请
                     </div>
                     <div class="col-sm-8">
-                        <div class="Page navigation float-right">
-                            {{ $applyList->links() }}
-                        </div>
+                        <nav class="Page navigation float-right">
+                            {{$applyList->links()}}
+                        </nav>
                     </div>
                 </div>
             </div>
@@ -97,25 +99,21 @@
 
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
-    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
+    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
     <script type="text/javascript">
-        // 审核
-        function doAudit(id) {
-            window.open('/admin/applyDetail?id=' + id);
-        }
+        //回车检测
+        $(document).on("keypress", "input", function (e) {
+            if (e.which === 13) {
+                Search()
+            }
+        });
 
         // 搜索
-        function do_search() {
+        function Search() {
             const username = $("#username").val();
             const status = $("#status option:selected").val();
-
             window.location.href = '/admin/applyList?username=' + username + '&status=' + status;
         }
-
-        // 重置
-        function do_reset() {
-            window.location.href = '/admin/applyList';
-        }
     </script>
-@endsection
+@endsection

+ 10 - 20
resources/views/admin/articleList.blade.php

@@ -1,6 +1,6 @@
 @extends('admin.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container-fluid">
@@ -8,7 +8,7 @@
             <div class="panel-heading">
                 <h3 class="panel-title">文章列表</h3>
                 <div class="panel-actions">
-                    <button class="btn btn-primary" onclick="addArticle()"><i class="icon wb-plus"></i>添加文章</button>
+                    <a href="/admin/addArticle" class="btn btn-primary"><i class="icon wb-plus"></i>添加文章</a>
                 </div>
             </div>
             <div class="panel-body">
@@ -50,7 +50,7 @@
                                 <td> {{$vo->created_at}} </td>
                                 <td>
                                     <div class="btn-group">
-                                        <button class="btn btn-outline-primary" onclick="editArticle('{{$vo->id}}')"><i class="icon wb-edit"></i></button>
+                                        <a href="/admin/editArticle?id={{$vo->id}}&page={{Request::get('page', 1)}}" class="btn btn-outline-primary"><i class="icon wb-edit"></i></a>
                                         <button class="btn btn-outline-danger" onclick="delArticle('{{$vo->id}}')"><i class="icon wb-close"></i></button>
                                     </div>
                                 </td>
@@ -63,12 +63,12 @@
             <div class="panel-footer">
                 <div class="row">
                     <div class="col-sm-4">
-                        共 {{$list->total()}} 篇文章
+                        共 <code>{{$list->total()}}</code> 篇文章
                     </div>
                     <div class="col-sm-8">
-                        <div class="Page navigation float-right">
-                            {{ $list->links() }}
-                        </div>
+                        <nav class="Page navigation float-right">
+                            {{$list->links()}}
+                        </nav>
                     </div>
                 </div>
             </div>
@@ -76,19 +76,9 @@
     </div>
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
-    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
+    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
     <script type="text/javascript">
-        // 添加文章
-        function addArticle() {
-            window.location.href = '/admin/addArticle';
-        }
-
-        // 编辑文章
-        function editArticle(id) {
-            window.location.href = '/admin/editArticle?id=' + id + '&page=' + '{{Request::get('page', 1)}}';
-        }
-
         // 删除文章
         function delArticle(id) {
             swal.fire({
@@ -111,4 +101,4 @@
             });
         }
     </script>
-@endsection
+@endsection

+ 6 - 9
resources/views/admin/config.blade.php

@@ -1,8 +1,7 @@
 @extends('admin.layouts')
-
 @section('css')
     <script src="//at.alicdn.com/t/font_682457_e6aq10jsbq0yhkt9.js" type="text/javascript"></script>
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container">
@@ -319,10 +318,10 @@
 
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/matchheight/jquery.matchHeight-min.js"></script>
-    <script src="/assets/global/js/Plugin/tabs.js"></script>
-    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
-    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
+    <script src="/assets/global/vendor/matchheight/jquery.matchHeight-min.js" type="text/javascript"></script>
+    <script src="/assets/global/js/Plugin/tabs.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
 
     <script type="text/javascript">
         // 添加等级
@@ -354,7 +353,6 @@
                         $("#level_msg").show().html(ret.message);
                         return false;
                     }
-
                     $("#add_level_modal").modal("hide");
                     window.location.href = '/admin/config?tab=' + tabId;
                 },
@@ -440,7 +438,6 @@
                         $("#country_msg").show().html(ret.message);
                         return false;
                     }
-
                     $("#add_country_modal").modal("hide");
                     window.location.href = '/admin/config?tab=' + tabId;
                 },
@@ -575,4 +572,4 @@
             });
         }
     </script>
-@endsection
+@endsection

+ 5 - 10
resources/views/admin/convert.blade.php

@@ -20,7 +20,7 @@
                     <div class="col-md-4 form-group">
                         <label for="transfer_enable">可用流量</label>
                         <div class="input-group">
-                            <input type="text" class="form-control" name="transfer_enable" value="1000" id="transfer_enable" placeholder="" required>
+                            <input type="number" class="form-control" name="transfer_enable" value="1000" id="transfer_enable" placeholder="" required>
                             <span class="input-group-text">GB</span>
                         </div>
                     </div>
@@ -56,10 +56,10 @@
                         <textarea class="form-control" rows="22" name="result" id="result" onclick="this.focus();this.select()" readonly="readonly"></textarea>
                     </div>
                     <div class="col-md-6">
-                        <button class="btn btn-block btn-primary" onclick="doConvert()">转 换</button>
+                        <button class="btn btn-block btn-primary" onclick="Convert()">转 换</button>
                     </div>
                     <div class="col-md-6">
-                        <button class="btn btn-block btn-danger" onclick="doDownload()">下 载</button>
+                        <a href="/admin/download?type=1" class="btn btn-block btn-danger">下 载</a>
                     </div>
                 </div>
             </div>
@@ -70,7 +70,7 @@
 @section('script')
     <script type="text/javascript">
         // 转换
-        function doConvert() {
+        function Convert() {
             const _token = '{{csrf_token()}}';
 			const method = $('#method').val();
 			const transfer_enable = $('#transfer_enable').val();
@@ -120,10 +120,5 @@
             });
             return false;
         }
-
-        // 下载
-        function doDownload() {
-            window.location.href = '/admin/download?type=1';
-        }
     </script>
-@endsection
+@endsection

+ 4 - 9
resources/views/admin/decompile.blade.php

@@ -14,10 +14,10 @@
                         <textarea class="form-control" rows="25" name="result" id="result" readonly="readonly"></textarea>
                     </div>
                     <div class="col-md-6">
-                        <button class="btn btn-block btn-primary" onclick="doDecompile()">反解析</button>
+                        <button class="btn btn-block btn-primary" onclick="Decompile()">反解析</button>
                     </div>
                     <div class="col-md-6">
-                        <button class="btn btn-block btn-danger" onclick="doDownload()">下 载</button>
+                        <a href="/admin/download?type=2" class="btn btn-block btn-danger">下 载</a>
                     </div>
                 </div>
             </div>
@@ -27,7 +27,7 @@
 @section('script')
     <script type="text/javascript">
         // 转换
-        function doDecompile() {
+        function Decompile() {
             const _token = '{{csrf_token()}}';
             const content = $('#content').val();
 
@@ -62,10 +62,5 @@
             });
             return false;
         }
-
-        // 下载
-        function doDownload() {
-            window.location.href = '/admin/download?type=2';
-        }
     </script>
-@endsection
+@endsection

+ 60 - 59
resources/views/admin/editArticle.blade.php

@@ -1,7 +1,7 @@
 @extends('admin.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/dropify/dropify.min.css">
-    <link rel="stylesheet" href="/assets/global/vendor/summernote/summernote.min.css">
+    <link href="/assets/global/vendor/dropify/dropify.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/vendor/summernote/summernote.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container">
@@ -11,13 +11,13 @@
             </div>
             @if (Session::has('successMsg'))
                 <div class="alert alert-success">
-                    <button class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span><span class="sr-only">{{trans('home.close')}}</span></button>
+                    <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
                     {{Session::get('successMsg')}}
                 </div>
             @endif
             @if (Session::has('errorMsg'))
                 <div class="alert alert-danger">
-                    <button class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span><span class="sr-only">{{trans('home.close')}}</span></button>
+                    <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
                     <strong>错误:</strong> {{Session::get('errorMsg')}}
                 </div>
         @endif
@@ -26,81 +26,82 @@
                 <form action="/admin/editArticle" method="post" enctype="multipart/form-data" class="form-horizontal">
                     <div class="form-group row">
                         <label for="type" class="col-form-label col-md-2">类型</label>
-                        <ul class="col-md-9 list-unstyled list-inline">
-                            <li class="list-inline-item">
-                                <div class="radio-custom radio-primary">
-                                    <input type="radio" name="type" value="{{$article->type}}" checked>
-                                    <label>
-                                        @switch($article->type)
-                                            @case(1)
-                                            文章
-                                            @break
-                                            @case(2)
-                                            公告
-                                            @break
-                                            @case(3)
-                                            购买说明
-                                            @break
-                                            @case(4)
-                                            使用教程
-                                            @break
-                                            @default
-                                        @endswitch
-                                    </label>
-                                </div>
-                            </li>
-                        </ul>
+                        <div class="col-md-10 d-flex align-items-center">
+                            <div class="radio-custom radio-primary radio-inline">
+                                <input type="radio" name="type" value="1" {{$article->type == '1' ? 'checked' : ''}} disabled/>
+                                <label for="type">文章</label>
+                            </div>
+                            <div class="radio-custom radio-primary radio-inline">
+                                <input type="radio" name="type" value="2" {{$article->type == '2' ? 'checked' : ''}} disabled/>
+                                <label for="type">公告</label>
+                            </div>
+                            <div class="radio-custom radio-primary radio-inline">
+                                <input type="radio" name="type" value="3" {{$article->type == '3' ? 'checked' : ''}} disabled/>
+                                <label for="type">购买说明</label>
+                            </div>
+                            <div class="radio-custom radio-primary radio-inline">
+                                <input type="radio" name="type" value="4" {{$article->type == '4' ? 'checked' : ''}} disabled/>
+                                <label for="type">使用教程</label>
+                            </div>
+                        </div>
                     </div>
                     <div class="form-group row">
                         <label class="col-form-label col-md-2">标题</label>
-                        <div class="col-md-6">
-                            <input type="text" class="form-control" name="title" value="{{$article->title}}" id="title" autofocus required/>
-                            <input type="hidden" name="id" value="{{$article->id}}">
-                            <input type="hidden" name="_token" value="{{csrf_token()}}">
+                        <div class="col-md-4">
+                            <input type="text" class="form-control" name="title" id="title" value="{{$article->title}}" autofocus required/>
+                            <input type="hidden" name="id" value="{{$article->id}}"/>
+                            <input type="hidden" name="_token" value="{{csrf_token()}}"/>
                         </div>
                     </div>
-                    @if($article->type != '4' && $article->type != '2')
+                    @if($article->type == 1)
                         <div class="form-group row">
-                            <label class="col-form-label col-md-2">简介</label>
-                            <div class="col-md-6">
-                                <input type="text" class="form-control" name="summary" value="{{$article->summary}}" id="summary" required/>
+                            <label class="col-form-label col-md-2" for="summary">简介</label>
+                            <div class="col-md-8">
+                                <input type="text" class="form-control" name="summary" id="summary" value="{{$article->summary}}" required/>
                             </div>
                         </div>
+                    @endif
+                    @if($article->type == 1 || $article->type == 3)
                         <div class="form-group row">
-                            <label class="col-form-label col-md-2">排序</label>
-                            <div class="col-md-6">
-                                <input type="text" class="form-control" name="sort" id="sort" value="{{$article->sort}}" required/>
-                                <span class="text-help"> 值越高显示时越靠前 </span>
+                            <label class="col-form-label col-md-2" for="sort">排序</label>
+                            <div class="col-md-2">
+                                <input type="number" class="form-control" name="sort" id="sort" value="{{$article->sort}}" required/>
                             </div>
+                            <span class="text-help"> 值越高显示时越靠前 </span>
                         </div>
                     @endif
-                    @if($article->type != '2')
+                    @if($article->type != 2)
                         <div class="form-group row">
-                            <label class="col-form-label col-md-2">LOGO/图标</label>
-                            @if($article->type == '4')
-                                <div class="col-md-6 input-group">
+                            <label class="col-form-label col-md-2" for="logo">LOGO/图标</label>
+                            @if($article->type == 1)
+                                <div class="col-md-4">
+                                    <input type="file" name="logo" id="logo" data-plugin="dropify" data-default-file=@if($article->logo) {{$article->logo}} @else /assets/images/noimage.png @endif />
+                                    <span class="text-help"> 推荐尺寸:100x75 </span>
+                                </div>
+                            @else
+                                <div class="col-md-4 input-group">
                                     @if($article->logo)
                                         <div class="input-group-prepend">
                                             <span class="input-group-text"><i class="fa {{$article->logo}}" aria-hidden="true"></i></span>
                                         </div>
                                     @endif
-                                    <input type="txt" class="form-control" id="logo" name="logo" value="{{$article->logo}}"/>
-                                </div>
-                            @else
-                                <div class="col-md-6">
-                                    <input type="file" id="logo" name="logo" data-plugin="dropify" data-default-file=@if($article->logo) {{$article->logo}} @else /assets/images/noimage.png @endif />
-                                    <button type="submit" class="btn btn-success float-right mt-10"> 提交</button>
-                                    <span class="text-help"> 推荐尺寸:100x75 </span>
+                                    <input type="text" class="form-control" name="logo" id="logo" value="{{$article->logo}}"/>
                                 </div>
+                                <span class="text-help"> <a href="https://fontawesome.com/v4.7.0/icons/" target="_blank">图标列表</a> | 格式: fa-windows</span>
                             @endif
                         </div>
                     @endif
                     <div class="form-group row">
-                        <label class="col-form-label col-md-2">内容</label>
-                        <textarea class="col-md-10" name="content" id="summernote" data-plugin="summernote" rows="15"> </textarea>
+                        <label class="col-form-label col-md-2" for="summernote">内容</label>
+                        <div class="col-md-9">
+                            <textarea class="form-control" name="content" id="summernote" data-plugin="summernote" rows="15">{!!$article->content!!}</textarea>
+                        </div>
                     </div>
-                    <div class="form-actions">
-                        <button type="submit" class="btn btn-success">提交</button>
+                    <div class="form-actions text-right">
+                        <div class="btn-group">
+                            <a href="/admin/articleList" class="btn btn-danger">返回</a>
+                            <button type="submit" class="btn btn-success">提交</button>
+                        </div>
                     </div>
                 </form>
             </div>
@@ -109,8 +110,8 @@
 
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/dropify/dropify.min.js"></script>
-    <script src="/assets/global/vendor/summernote/summernote.min.js"></script>
-    <script src="/assets/global/js/Plugin/dropify.js"></script>
-    <script src="/assets/global/js/Plugin/summernote.js"></script>
+    <script src="/assets/global/vendor/dropify/dropify.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/summernote/summernote.min.js" type="text/javascript"></script>
+    <script src="/assets/global/js/Plugin/dropify.js" type="text/javascript"></script>
+    <script src="/assets/global/js/Plugin/summernote.js" type="text/javascript"></script>
 @endsection

+ 50 - 50
resources/views/admin/editGroup.blade.php

@@ -1,66 +1,66 @@
 @extends('admin.layouts')
 @section('content')
-	<div class="page-content container">
-		<div class="panel">
-			<div class="panel-heading">
-				<h2 class="panel-title">编辑节点分组</h2>
-			</div>
-			@if (Session::has('errorMsg'))
-				<div class="alert alert-danger">
-					<button class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span><span class="sr-only">{{trans('home.close')}}</span></button>
-					<strong>错误:</strong> {{Session::get('errorMsg')}}
-				</div>
-			@endif
-			<div class="panel-body">
-				<form action="#" method="post" enctype="multipart/form-data" class="form-horizontal" role="form" onsubmit="return do_submit();">
-					<div class="form-group row">
-						<label class="col-form-label col-md-1">分组名称</label>
-						<input type="text" class="form-control col-md-5" name="name" value="{{$group->name}}" id="name" autofocus required/>
-						<input type="hidden" name="_token" value="{{csrf_token()}}"/>
-					</div>
-					<div class="form-group row">
-						<label class="col-form-label col-md-1">分组级别</label>
-						<select data-plugin="selectpicker" data-style="btn-outline btn-primary" class="col-md-5 form-control" name="level" id="level" required>
-							@if(!$levelList->isEmpty())
-								@foreach($levelList as $level)
-									<option value="{{$level->level}}" {{$group->level == $level->level ? 'selected' : ''}}>{{$level->level_name}}</option>
-								@endforeach
-							@endif
-						</select>
-						<span class="text-help offset-md-1">暂时无用&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;</span>
-					</div>
-					<div class="form-actions">
-						<button type="submit" class="btn btn-success">提交</button>
-					</div>
-				</form>
-			</div>
-		</div>
-	</div>
+    <div class="page-content container">
+        <div class="panel">
+            <div class="panel-heading">
+                <h2 class="panel-title">编辑节点分组</h2>
+            </div>
+            @if (Session::has('errorMsg'))
+                <div class="alert alert-danger">
+                    <button class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span><span class="sr-only">{{trans('home.close')}}</span></button>
+                    <strong>错误:</strong> {{Session::get('errorMsg')}}
+                </div>
+            @endif
+            <div class="panel-body">
+                <form action="/admin/editGroup" method="post" enctype="multipart/form-data" class="form-horizontal" role="form" onsubmit="return Submit()">
+                    <div class="form-group row">
+                        <label class="col-form-label col-md-1">分组名称</label>
+                        <input type="text" class="form-control col-md-5" name="name" value="{{$group->name}}" id="name" autofocus required/>
+                        <input type="hidden" name="_token" value="{{csrf_token()}}"/>
+                    </div>
+                    <div class="form-group row">
+                        <label class="col-form-label col-md-1">分组级别</label>
+                        <select data-plugin="selectpicker" data-style="btn-outline btn-primary" class="col-md-5 form-control" name="level" id="level" required>
+                            @if(!$levelList->isEmpty())
+                                @foreach($levelList as $level)
+                                    <option value="{{$level->level}}" {{$group->level == $level->level ? 'selected' : ''}}>{{$level->level_name}}</option>
+                                @endforeach
+                            @endif
+                        </select>
+                        <span class="text-help offset-md-1">暂时无用&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;</span>
+                    </div>
+                    <div class="form-actions">
+                        <button type="submit" class="btn btn-success">提交</button>
+                    </div>
+                </form>
+            </div>
+        </div>
+    </div>
 @endsection
 @section('script')
-	<script type="text/javascript">
+    <script type="text/javascript">
         // ajax同步提交
-        function do_submit() {
+        function Submit() {
             const _token = '{{csrf_token()}}';
-			const name = $('#name').val();
-			const level = $("#level option:selected").val();
+            const name = $('#name').val();
+            const level = $("#level option:selected").val();
 
             $.ajax({
                 type: "POST",
-                url: "admin/editGroup",
+				url: "/admin/editGroup/{{$group->id}}",
                 async: false,
-                data: {_token: _token, id: '{{$group->id}}', name: name, level: level},
+                data: {_token: _token, name: name, level: level},
                 dataType: 'json',
                 success: function (ret) {
-                    layer.msg(ret.message, {time: 1000}, function () {
-                        if (ret.status === 'success') {
-                            window.location.href = 'admin/groupLis';
-                        }
-                    });
+                    if (ret.status === 'success') {
+                        swal.fire({title: ret.message, type: 'success', timer: 1000, showConfirmButton: false})
+                            .then(() => window.location.href = '/admin/groupList')
+                    } else {
+                        swal.fire({title: ret.message, type: "error"}).then(() => window.location.reload())
+                    }
                 }
             });
-
             return false;
         }
-	</script>
-@endsection
+    </script>
+@endsection

+ 4 - 4
resources/views/admin/editLabel.blade.php

@@ -12,7 +12,7 @@
                 </div>
             @endif
             <div class="panel-body">
-                <form action="/admin/editLabel" method="post" enctype="multipart/form-data" class="form-horizontal" onsubmit="return doSubmit();">
+                <form action="/admin/editLabel" method="post" enctype="multipart/form-data" class="form-horizontal" onsubmit="return Submit()">
                     <div class="form-group row">
                         <label for="name" class="col-form-label col-md-1">标签</label>
                         <input type="text" class="form-control col-md-6" name="name" id="name" value="{{$label->name}}" autofocus required>
@@ -20,7 +20,7 @@
                     </div>
                     <div class="form-group row">
                         <label for="sort" class="col-form-label col-md-1">排序</label>
-                        <input type="text" class="form-control col-md-6" name="sort" id="sort" value="{{$label->sort}}" required/>
+                        <input type="number" class="form-control col-md-6" name="sort" id="sort" value="{{$label->sort}}" required/>
                         <span class="text-help offset-md-1"> 排序值越高显示时越靠前 &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;</span>
                     </div>
                     <div class="form-actions">
@@ -34,7 +34,7 @@
 @section('script')
     <script type="text/javascript">
         // ajax同步提交
-        function doSubmit() {
+        function Submit() {
 			const _token = '{{csrf_token()}}';
 			const id = '{{$label->id}}';
 			const name = $('#name').val();
@@ -58,4 +58,4 @@
             return false;
         }
     </script>
-@endsection
+@endsection

+ 13 - 13
resources/views/admin/editNode.blade.php

@@ -1,7 +1,7 @@
 @extends('admin.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-select/bootstrap-select.min.css">
-    <style>
+    <link href="/assets/global/vendor/bootstrap-select/bootstrap-select.min.css" type="text/css" rel="stylesheet">
+    <style type="text/css">
         .hidden {
             display: none
         }
@@ -18,7 +18,7 @@
                 <strong>注意:</strong> 添加节点后自动生成的<code>ID</code>,即为该节点部署ShadowsocksR Python版后端时<code>usermysql.json</code>中的<code>node_id</code>的值,同时也是部署V2Ray后端时的<code>nodeId</code>的值;
             </div>
             <div class="panel-body">
-                <form action="{{url('admin/editNode')}}" method="post" class="form-horizontal" onsubmit="return do_submit();">
+                <form action="/admin/editNode" method="post" class="form-horizontal" onsubmit="return Submit()">
                     <div class="row">
                         <div class="col-lg-6">
                             <div class="example-wrap">
@@ -67,7 +67,7 @@
                                     </div>
                                     <div class="form-group row">
                                         <label for="server" class="col-md-3 col-form-label"> 域名 </label>
-                                        <input type="text" class="form-control col-md-4" name="server" id="server" value="{{$node->server}}" placeholder="服务器域名地址,填则优先取域名地址">
+                                        <input type="url" class="form-control col-md-4" name="server" id="server" value="{{$node->server}}" placeholder="服务器域名地址,填则优先取域名地址">
                                         <span class="text-help offset-md-3">如果开启Namesilo且域名是Namesilo上购买的,则会强制更新域名的DNS记录为本节点IP,如果其他节点绑定了该域名则会清空其域名信息</span>
                                     </div>
                                     <div class="form-group row">
@@ -80,12 +80,12 @@
                                     </div>
                                     <div class="form-group row">
                                         <label for="ssh_port" class="col-md-3 col-form-label"> SSH端口 </label>
-                                        <input type="text" class="form-control col-md-4" name="ssh_port" value="{{$node->ssh_port}}" id="ssh_port" placeholder="服务器SSH端口" required>
+                                        <input type="number" class="form-control col-md-4" name="ssh_port" value="{{$node->ssh_port}}" id="ssh_port" placeholder="服务器SSH端口" required>
                                         <span class="text-help offset-md-3">请务必正确填写此值,否则TCP阻断检测可能误报</span>
                                     </div>
                                     <div class="form-group row">
                                         <label for="traffic_rate" class="col-md-3 col-form-label"> 流量比例 </label>
-                                        <input type="text" class="form-control col-md-4" name="traffic_rate" value="{{$node->traffic_rate}}" id="traffic_rate" required>
+                                        <input type="number" class="form-control col-md-4" name="traffic_rate" value="{{$node->traffic_rate}}" id="traffic_rate" required>
                                         <span class="text-help offset-md-3"> 举例:0.1用100M结算10M,5用100M结算500M </span>
                                     </div>
                                     <div class="form-group row">
@@ -124,7 +124,7 @@
                                     </div>
                                     <div class="form-group row">
                                         <label for="sort" class="col-md-3 col-form-label">排序</label>
-                                        <input type="text" class="form-control col-md-4" name="sort" value="{{$node->sort}}" id="sort">
+                                        <input type="number" class="form-control col-md-4" name="sort" value="{{$node->sort}}" id="sort">
                                         <span class="text-help offset-md-3"> 排序值越大排越前 &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;</span>
                                     </div>
                                     <div class="form-group row">
@@ -326,7 +326,7 @@
                                             </div>
                                             <div class="form-group row">
                                                 <label for="single_port" class="col-md-3 col-form-label">[单] 端口</label>
-                                                <input type="text" class="form-control col-md-4" name="single_port" id="single_port" value="{{$node->single_port}}" placeholder="443">
+                                                <input type="number" class="form-control col-md-4" name="single_port" id="single_port" value="{{$node->single_port}}" placeholder="443">
                                                 <span class="text-help offset-md-3"> 推荐80或443,服务端需要配置 </span>
                                             </div>
                                             <div class="form-group row">
@@ -371,7 +371,7 @@
                                         </div>
                                         <div class="form-group row">
                                             <label for="v2_port" class="col-md-3 col-form-label">端口</label>
-                                            <input type="text" class="form-control col-md-4" name="v2_port" id="v2_port" value="{{$node->v2_port}}" placeholder="10087">
+                                            <input type="number" class="form-control col-md-4" name="v2_port" id="v2_port" value="{{$node->v2_port}}" placeholder="10087">
                                         </div>
                                         <div class="form-group row">
                                             <label for="v2_method" class="col-md-3 col-form-label">加密方式</label>
@@ -455,12 +455,12 @@
     </div>
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/bootstrap-select/bootstrap-select.min.js"></script>
-    <script src="/assets/global/js/Plugin/bootstrap-select.js"></script>
+    <script src="/assets/global/vendor/bootstrap-select/bootstrap-select.min.js" type="text/javascript"></script>
+    <script src="/assets/global/js/Plugin/bootstrap-select.js" type="text/javascript"></script>
 
     <script type="text/javascript">
         // ajax同步提交
-        function do_submit() {
+        function Submit() {
             var _token = '{{csrf_token()}}';
             var id = '{{Request::get('id')}}';
             var name = $('#name').val();
@@ -649,4 +649,4 @@
             });
         }
     </script>
-@endsection
+@endsection

+ 23 - 24
resources/views/admin/editUser.blade.php

@@ -1,7 +1,7 @@
 @extends('admin.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-select/bootstrap-select.min.css">
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-datepicker/bootstrap-datepicker.min.css">
+    <link href="/assets/global/vendor/bootstrap-select/bootstrap-select.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/vendor/bootstrap-datepicker/bootstrap-datepicker.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container-fluid">
@@ -13,18 +13,18 @@
                 </div>
             </div>
             <div class="panel-body">
-                <form action="/admin/editUser/{{$user->id}}" method="post" class="form-horizontal" onsubmit="return do_submit();">
+                <form action="/admin/editUser/{{$user->id}}" method="post" class="form-horizontal" onsubmit="return Submit()">
                     <div class="row">
                         <div class="col-md-12 col-lg-6">
                             <div class="example-wrap">
                                 <h4 class="example-title">账号信息</h4>
                                 <div class="form-group row">
                                     <label for="username" class="col-md-3 col-form-label">用户名</label>
-                                    <input type="text" class="form-control col-md-4" name="username" value="{{$user->username}}" id="username" autocomplete="off" autofocus required/>
+                                    <input type="email" class="form-control col-md-4" name="username" value="{{$user->username}}" id="username" autocomplete="off" autofocus required/>
                                 </div>
                                 <div class="form-group row">
                                     <label for="password" class="col-md-3 col-form-label">密码</label>
-                                    <input type="text" class="form-control col-md-4" name="password" value="" id="password" placeholder="不填则不变" autocomplete="off"/>
+                                    <input type="password" class="form-control col-md-4" name="password" value="" id="password" placeholder="不填则不变" autocomplete="off"/>
                                 </div>
                                 <div class="form-group row">
                                     <label class="col-md-3 col-form-label">用途</label>
@@ -109,7 +109,7 @@
                                 </div>
                                 <div class="form-group row">
                                     <label class="col-md-3 col-form-label">有效期</label>
-                                    <div class="input-group col-md-6 input-daterange" data-plugin="datepicker">
+                                    <div class="col-md-6 input-group input-daterange" data-plugin="datepicker">
                                         <div class="input-group-prepend">
                                             <span class="input-group-text"><i class="icon wb-calendar" aria-hidden="true"></i></span>
                                         </div>
@@ -194,7 +194,7 @@
                                 </div>
                                 <div class="form-group row">
                                     <label for="qq" class="col-md-3 col-form-label">QQ</label>
-                                    <input type="text" class="col-md-4 form-control" name="qq" value="{{$user->qq}}" id="qq" autocomplete="off"/>
+                                    <input type="number" class="col-md-4 form-control" name="qq" value="{{$user->qq}}" id="qq" autocomplete="off"/>
                                 </div>
                                 <div class="form-group row">
                                     <label for="remark" class="col-md-3 col-form-label">备注</label>
@@ -213,7 +213,7 @@
                                 <div class="form-group row">
                                     <label for="port" class="col-md-3 col-form-label">端口</label>
                                     <div class="input-group col-md-4">
-                                        <input class="form-control" type="text" name="port" value="{{$user->port}}" id="port"/>
+                                        <input class="form-control" type="number" name="port" value="{{$user->port}}" id="port"/>
                                         <span class="input-group-append"><button class="btn btn-success" type="button" onclick="makePort()"> <i class="icon wb-refresh"></i> </button></span>
                                     </div>
                                 </div>
@@ -235,7 +235,7 @@
                                 <div class="form-group row">
                                     <label for="transfer_enable" class="col-md-3 col-form-label">可用流量</label>
                                     <div class="input-group col-md-3">
-                                        <input type="text" class="form-control" name="transfer_enable" value="{{$user->transfer_enable}}" id="transfer_enable" required>
+                                        <input type="number" class="form-control" name="transfer_enable" value="{{$user->transfer_enable}}" id="transfer_enable" required>
                                         <span class="input-group-text">GB</span>
                                     </div>
                                 </div>
@@ -332,12 +332,12 @@
                     <div class="alert alert-danger" style="display: none;" id="msg"></div>
                     <div class="form-group row">
                         <label for="amount" class="col-md-3 col-form-label"> 充值金额 </label>
-                        <input type="text" class="col-md-4 form-control" name="amount" id="amount" placeholder="填入负值则会扣余额" onkeydown="if(event.keyCode==13){return false;}"/>
+                        <input type="number" class="col-md-4 form-control" name="amount" id="amount" placeholder="填入负值则会扣余额" onkeydown="if(event.keyCode==13){return false;}"/>
                     </div>
                 </form>
                 <div class="modal-footer">
                     <button data-dismiss="modal" class="btn btn-danger">关闭</button>
-                    <button class="btn btn-primary" onclick="return handleUserBalance();">充值</button>
+                    <button type="button" class="btn btn-primary" onclick="return handleUserBalance();">充值</button>
                 </div>
             </div>
         </div>
@@ -345,17 +345,16 @@
 
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/bootstrap-select/bootstrap-select.min.js"></script>
-    <script src="/assets/global/vendor/bootstrap-datepicker/bootstrap-datepicker.min.js"></script>
-    <script src="/assets/global/js/Plugin/bootstrap-select.js"></script>
-    <script src="/assets/global/js/Plugin/bootstrap-datepicker.js"></script>
+    <script src="/assets/global/vendor/bootstrap-select/bootstrap-select.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-datepicker/bootstrap-datepicker.min.js" type="text/javascript"></script>
+    <script src="/assets/global/js/Plugin/bootstrap-select.js" type="text/javascript"></script>
+    <script src="/assets/global/js/Plugin/bootstrap-datepicker.js" type="text/javascript"></script>
 
     <script type="text/javascript">
         $('.input-daterange>input').datepicker({
             format: "yyyy-mm-dd",
             startDate: "2017-01-01"
         });
-
         // 切换用户身份
         function switchToUser() {
             $.ajax({
@@ -378,9 +377,8 @@
         }
 
         // ajax同步提交
-        function do_submit() {
+        function Submit() {
             var _token = '{{csrf_token()}}';
-            var id = '{{Request::get('id')}}';
             var username = $('#username').val();
             var password = $('#password').val();
             var pay_way = $("input:radio[name='pay_way']:checked").val();
@@ -416,14 +414,12 @@
                 }
             });
             usage = usage.substring(0, usage.length - 1);
-
             $.ajax({
                 type: "POST",
                 url: "/admin/editUser/{{$user->id}}",
                 async: false,
                 data: {
                     _token: _token,
-                    id: id,
                     username: username,
                     password: password,
                     usage: usage,
@@ -439,7 +435,6 @@
                     is_admin: is_admin,
                     remark: remark,
                     level: level,
-                    invite_num: invite_num,
                     port: port,
                     passwd: passwd,
                     method: method,
@@ -465,7 +460,11 @@
                             confirmButtonText: '{{trans('home.ticket_confirm')}}',
                         }).then((result) => {
                                 if (result.value) {
-                                    window.location.href = '/admin/userList?page={{Request::get('page', 1)}}';
+                                    @if (Request::getQueryString())
+                                        window.location.href = '/admin/userList' + '?{!! Request::getQueryString() !!}';
+                                    @else
+                                        window.location.href = '/admin/userList';
+                                    @endif
                                 }
                             }
                         )
@@ -512,7 +511,7 @@
             $.ajax({
                 url: '/admin/handleUserBalance',
                 type: "POST",
-                data: {_token: '{{csrf_token()}}', user_id: '{{$user->id}}', amount: amount},
+                data: {_token: '{{csrf_token()}}', user_id: '{{Request::get('id')}}', amount: amount},
                 beforeSend: function () {
                     $("#msg").show().html("充值中...");
                 },
@@ -540,4 +539,4 @@
             });
         }
     </script>
-@endsection
+@endsection

+ 94 - 95
resources/views/admin/emailLog.blade.php

@@ -1,101 +1,100 @@
 @extends('admin.layouts')
 @section('css')
-	<link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
-	<div class="page-content container-fluid">
-		<div class="panel">
-			<div class="panel-heading">
-				<h2 class="panel-title">邮件投递记录</h2>
-			</div>
-			<div class="panel-body">
-				<div class="form-inline mb-20">
-					<div class="form-group">
-						<select class="form-control" name="type" id="type" onChange="doSearch()">
-							<option value="" @if(Request::get('type') == '') selected hidden @endif>类型</option>
-							<option value="1" @if(Request::get('type') == '1') selected hidden @endif>邮件</option>
-							<option value="2" @if(Request::get('type') == '2') selected hidden @endif>ServerChan</option>
-							<option value="3" @if(Request::get('type') == '3') selected hidden @endif>Bark</option>
-							<option value="4" @if(Request::get('type') == '4') selected hidden @endif>Telegram</option>
-						</select>
-					</div>
-					<div class="btn-group">
-						<button class="btn btn-primary" onclick="doSearch()">搜索</button>
-						<button class="btn btn-danger" onclick="doReset()">重置</button>
-					</div>
-				</div>
-				<table class="text-center" data-toggle="table" data-mobile-responsive="true">
-					<thead class="thead-default">
-					<tr>
-						<th> #</th>
-						<th> 类型</th>
-						<th> 识别码 </th>
-						<th> 收信地址</th>
-						<th> 标题</th>
-						<th> 内容</th>
-						<th> 投递时间</th>
-						<th> 投递状态</th>
-					</tr>
-					</thead>
-					<tbody>
-					@if($list->isEmpty())
-						<tr>
-							<td colspan="8">暂无数据</td>
-						</tr>
-					@else
-						@foreach($list as $vo)
-							<tr>
-								<td> {{$vo->id}} </td>
-								<td> {{$vo->type == 1 ? 'Email' : 'serverChan'}} </td>
-								<td> @if($vo->type == 3) <a href="/b/{{$vo->code}}" target="_blank">{{$vo->code}}</a> @endif </td>
-								<td> {{$vo->address}} </td>
-								<td> {{$vo->title}} </td>
-								<td> {{$vo->content}} </td>
-								<td> {{$vo->created_at}} </td>
-								<td>
-									@if($vo->status < 0)
-										<span class="badge badge-danger"> {{str_limit($vo->error)}} </span>
-									@elseif($vo->status > 0)
-										<labe class="badge badge-success">投递成功</labe>
-									@else
-										<span class="badge badge-default"> 等待投递 </span>
-									@endif
-								</td>
-							</tr>
-						@endforeach
-					@endif
-					</tbody>
-				</table>
-			</div>
-			<div class="panel-footer">
-				<div class="row">
-					<div class="col-sm-4">
-						共 {{$list->total()}} 条记录
-					</div>
-					<div class="col-sm-8">
-						<div class="Page navigation float-right">
-							{{ $list->links() }}
-						</div>
-					</div>
-				</div>
-			</div>
-		</div>
-	</div>
+    <div class="page-content container-fluid">
+        <div class="panel">
+            <div class="panel-heading">
+                <h2 class="panel-title">邮件投递记录</h2>
+            </div>
+            <div class="panel-body">
+                <div class="form-row">
+                    <div class="form-group col-lg-3 col-sm-4">
+                        <input type="text" class="form-control" name="username" id="username" value="{{Request::get('username')}}" placeholder="用户名"/>
+                    </div>
+                    <div class="form-group col-lg-2 col-sm-4">
+                        <select class="form-control" name="type" id="type" onChange="Search()">
+                            <option value="" @if(Request::get('type') == '') selected hidden @endif>类型</option>
+                            <option value="1" @if(Request::get('type') == '1') selected hidden @endif>邮件</option>
+                            <option value="2" @if(Request::get('type') == '2') selected hidden @endif>ServerChan</option>
+                            <option value="3" @if(Request::get('type') == '3') selected hidden @endif>Bark</option>
+                            <option value="4" @if(Request::get('type') == '4') selected hidden @endif>Telegram</option>
+                        </select>
+                    </div>
+                    <div class="form-group col-lg-1 col-sm-4 btn-group">
+                        <button class="btn btn-primary" onclick="Search()">搜索</button>
+                        <a href="/admin/emailLog" class="btn btn-danger">重置</a>
+                    </div>
+                </div>
+                <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
+                    <thead class="thead-default">
+                    <tr>
+                        <th> #</th>
+                        <th> 类型</th>
+                        <th> 识别码</th>
+                        <th> 收信地址</th>
+                        <th> 标题</th>
+                        <th> 内容</th>
+                        <th> 投递时间</th>
+                        <th> 投递状态</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    @if($list->isEmpty())
+                        <tr>
+                            <td colspan="8">暂无数据</td>
+                        </tr>
+                    @else
+                        @foreach($list as $vo)
+                            <tr>
+                                <td> {{$vo->id}} </td>
+                                <td> {{$vo->type == 1 ? 'Email' : 'serverChan'}} </td>
+                                <td> @if($vo->type == 3)
+                                        <a href="/b/{{$vo->code}}" target="_blank">{{$vo->code}}</a> @endif </td>
+                                <td> {{$vo->address}} </td>
+                                <td> {{$vo->title}} </td>
+                                <td> {{$vo->content}} </td>
+                                <td> {{$vo->created_at}} </td>
+                                <td>
+                                    @if($vo->status < 0)
+                                        <span class="badge badge-danger"> {{str_limit($vo->error)}} </span>
+                                    @elseif($vo->status > 0)
+                                        <labe class="badge badge-success">投递成功</labe>
+                                    @else
+                                        <span class="badge badge-default"> 等待投递 </span>
+                                    @endif
+                                </td>
+                            </tr>
+                        @endforeach
+                    @endif
+                    </tbody>
+                </table>
+            </div>
+            <div class="panel-footer">
+                <div class="row">
+                    <div class="col-sm-4">
+                        共 <code>{{$list->total()}}</code> 条记录
+                    </div>
+                    <div class="col-sm-8">
+                        <nav class="Page navigation float-right">
+                            {{$list->links()}}
+                        </nav>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
 @endsection
 @section('script')
-	<script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
-	<script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
-	<script type="text/javascript">
-		// 搜索
-		function doSearch() {
-			const type = $("#type option:selected").val();
-
-			window.location.href = '/admin/emailLog?type=' + type;
-		}
-
-		// 重置
-		function doReset() {
-			window.location.href = '/admin/emailLog';
-		}
-	</script>
-@endsection
+    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
+    <script type="text/javascript">
+        // 搜索
+        function Search() {
+            const username = $("#username").val();
+            const type = $("#type option:selected").val();
+            window.location.href = '/admin/emailLog?username=' + username + '&type=' + type;
+        }
+    </script>
+@endsection

+ 11 - 11
resources/views/admin/export.blade.php

@@ -1,7 +1,7 @@
 @extends('admin.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css">
-    <link rel="stylesheet" href="/assets/global/fonts/font-awesome/font-awesome.css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/fonts/font-awesome/font-awesome.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container-fluid">
@@ -50,12 +50,12 @@
             <div class="panel-footer">
                 <div class="row">
                     <div class="col-sm-4">
-                        共 {{$nodeList->total()}} 个账号
+                        共 <code>{{$nodeList->total()}}</code> 个账号
                     </div>
-                    <div class="col-sm-8">
-                        <div class="Page navigation float-right">
-                            {{ $nodeList->links() }}
-                        </div>
+
+                        <nav class="Page navigation float-right">
+                            {{$nodeList->links()}}
+                        </nav>
                     </div>
                 </div>
             </div>
@@ -138,10 +138,10 @@
     @endforeach
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
-    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
+    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
     <script src="/assets/custom/Plugin/jquery-qrcode/jquery.qrcode.min.js" type="text/javascript"></script>
-    <script src="/assets/global/js/Plugin/webui-popover.js"></script>
+    <script src="/assets/global/js/Plugin/webui-popover.js" type="text/javascript"></script>
 
     <script type="text/javascript">
         const UIModals = function () {
@@ -188,4 +188,4 @@
         @endif
         @endforeach
     </script>
-@endsection
+@endsection

+ 12 - 22
resources/views/admin/groupList.blade.php

@@ -1,6 +1,6 @@
 @extends('admin.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container-fluid">
@@ -8,7 +8,7 @@
             <div class="panel-heading">
                 <h3 class="panel-title">节点分组</h3>
                 <div class="panel-actions">
-                    <button class="btn btn-primary" onclick="addGroup()"><i class="icon wb-plus"></i>添加分组</button>
+                    <a href="/admin/addGroup" class="btn btn-primary"><i class="icon wb-plus"></i>添加分组</a>
                 </div>
             </div>
             <div class="panel-body">
@@ -34,7 +34,7 @@
                                 <td> {{$levelMap[$group->level]}} </td>
                                 <td>
                                     <div class="btn-group">
-                                        <button class="btn btn-primary" onclick="editGroup('{{$group->id}}')"><i class="icon wb-edit"></i></button>
+                                        <a href="/admin/editGroup/{{$group->id}}" class="btn btn-primary"><i class="icon wb-edit"></i></a>
                                         <button class="btn btn-danger" onclick="delGroup('{{$group->id}}')"><i class="icon wb-trash"></i></button>
                                     </div>
                                 </td>
@@ -46,13 +46,13 @@
             </div>
             <div class="panel-footer">
                 <div class="row">
-                    <div class="col-md-4 col-sm-4">
-                        共 {{$groupList->total()}} 个节点分组
+                    <div class="col-sm-4">
+                        共 <code>{{$groupList->total()}}</code> 个节点分组
                     </div>
-                    <div class="col-md-8 col-sm-8">
-                        <div class="Page navigation float-right">
-                            {{ $groupList->links() }}
-                        </div>
+                    <div class="col-sm-8">
+                        <nav class="Page navigation float-right">
+                            {{$groupList->links()}}
+                        </nav>
                     </div>
                 </div>
             </div>
@@ -60,19 +60,9 @@
     </div>
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
-    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
+    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
     <script type="text/javascript">
-        // 添加节点分组
-        function addGroup() {
-            window.location.href = '/admin/addGroup';
-        }
-
-        // 编辑节点分组
-        function editGroup(id) {
-            window.location.href = '/admin/editGroup/' + id;
-        }
-
         // 删除节点分组
         function delGroup(id) {
             swal.fire({
@@ -96,4 +86,4 @@
             });
         }
     </script>
-@endsection
+@endsection

+ 2 - 2
resources/views/admin/import.blade.php

@@ -1,6 +1,6 @@
 @extends('admin.layouts')
 @section('css')
-	<link rel="stylesheet" href="/assets/global/vendor/dropify/dropify.min.css">
+	<link href="/assets/global/vendor/dropify/dropify.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
 	<div class="page-content container">
@@ -31,5 +31,5 @@
 	</div>
 @endsection
 @section('script')
-	<script src="/assets/global/vendor/dropify/dropify.min.js"></script>
+	<script src="/assets/global/vendor/dropify/dropify.min.js" type="text/javascript"></script>
 @endsection

+ 59 - 62
resources/views/admin/index.blade.php

@@ -1,12 +1,12 @@
 @extends('admin.layouts')
 @section('css')
-    <link href="/assets/global/fonts/material-design/material-design.min.css" rel="stylesheet">
+    <link href="/assets/global/fonts/material-design/material-design.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container-fluid">
-        <div class="row">
-            <div class="col-xl-3 col-md-6 info-panel">
-                <div class="card card-shadow" onclick="skip('/admin/userList');">
+        <div class="row" data-plugin="matchHeight" data-by-row="true">
+            <div class="col-xl-3 col-md-6 info-panel pb-30">
+                <a href="/admin/userList" class="card card-shadow h-full">
                     <div class="card-block bg-white">
                         <button type="button" class="btn btn-floating btn-sm btn-primary">
                             <i class="icon md-account"></i>
@@ -16,10 +16,10 @@
                             <span class="font-size-40 font-weight-100">{{$totalUserCount}}</span>
                         </div>
                     </div>
-                </div>
+                </a>
             </div>
-            <div class="col-xl-3 col-md-6 info-panel">
-                <div class="card card-shadow" onclick="skip('/admin/userList?enable=1');">
+            <div class="col-xl-3 col-md-6 info-panel pb-30">
+                <a href="/admin/userList?enable=1" class="card card-shadow h-full">
                     <div class="card-block bg-white">
                         <button type="button" class="btn btn-floating btn-sm btn-info">
                             <i class="icon md-account"></i>
@@ -29,10 +29,10 @@
                             <span class="font-size-40 font-weight-100">{{$enableUserCount}}</span>
                         </div>
                     </div>
-                </div>
+                </a>
             </div>
-            <div class="col-xl-3 col-md-6 info-panel">
-                <div class="card card-shadow" onclick="skip('/admin/userList?active=1');">
+            <div class="col-xl-3 col-md-6 info-panel pb-30">
+                <a href="/admin/userList?active=1" class="card card-shadow h-full">
                     <div class="card-block bg-white">
                         <button type="button" class="btn btn-floating btn-sm btn-success">
                             <i class="icon md-account"></i>
@@ -42,10 +42,10 @@
                             <span class="font-size-40 font-weight-100">{{$activeUserCount}}</span>
                         </div>
                     </div>
-                </div>
+                </a>
             </div>
-            <div class="col-xl-3 col-md-6 info-panel">
-                <div class="card card-shadow" onclick="skip('/admin/userList?unActive=1');">
+            <div class="col-xl-3 col-md-6 info-panel pb-30">
+                <a href="/admin/userList?unActive=1" class="card card-shadow h-full">
                     <div class="card-block bg-white">
                         <button type="button" class="btn btn-floating btn-sm btn-warning">
                             <i class="icon md-account"></i>
@@ -55,10 +55,10 @@
                             <span class="font-size-40 font-weight-100">{{$unActiveUserCount}}</span>
                         </div>
                     </div>
-                </div>
+                </a>
             </div>
-            <div class="col-xl-3 col-md-6 info-panel">
-                <div class="card card-shadow" onclick="skip('/admin/userList?online=1');">
+            <div class="col-xl-3 col-md-6 info-panel pb-30">
+                <a href="/admin/userList?online=1" class="card card-shadow h-full">
                     <div class="card-block bg-white">
                         <button type="button" class="btn btn-floating btn-sm btn-success">
                             <i class="icon md-account"></i>
@@ -68,10 +68,10 @@
                             <span class="font-size-40 font-weight-100">{{$onlineUserCount}}</span>
                         </div>
                     </div>
-                </div>
+                </a>
             </div>
-            <div class="col-xl-3 col-md-6 info-panel">
-                <div class="card card-shadow" onclick="skip('/admin/userList?expireWarning=1');">
+            <div class="col-xl-3 col-md-6 info-panel pb-30">
+                <a href="/admin/userList?expireWarning=1" class="card card-shadow h-full">
                     <div class="card-block bg-white">
                         <button type="button" class="btn btn-floating btn-sm btn-danger">
                             <i class="icon md-account"></i>
@@ -81,10 +81,10 @@
                             <span class="font-size-40 font-weight-100">{{$expireWarningUserCount}}</span>
                         </div>
                     </div>
-                </div>
+                </a>
             </div>
-            <div class="col-xl-3 col-md-6 info-panel">
-                <div class="card card-shadow" onclick="skip('/admin/userList?largeTraffic=1');">
+            <div class="col-xl-3 col-md-6 info-panel pb-30">
+                <a href="/admin/userList?largeTraffic=1" class="card card-shadow h-full">
                     <div class="card-block bg-white">
                         <button type="button" class="btn btn-floating btn-sm btn-warning">
                             <i class="icon md-account"></i>
@@ -94,10 +94,10 @@
                             <span class="font-size-40 font-weight-100">{{$largeTrafficUserCount}}</span>
                         </div>
                     </div>
-                </div>
+                </a>
             </div>
-            <div class="col-xl-3 col-md-6 info-panel">
-                <div class="card card-shadow" onclick="skip('/admin/userList?flowAbnormal=1');">
+            <div class="col-xl-3 col-md-6 info-panel pb-30">
+                <a href="/admin/userList?flowAbnormal=1" class="card card-shadow h-full">
                     <div class="card-block bg-white">
                         <button type="button" class="btn btn-floating btn-sm btn-danger">
                             <i class="icon md-account"></i>
@@ -107,10 +107,10 @@
                             <span class="font-size-40 font-weight-100">{{$flowAbnormalUserCount}}</span>
                         </div>
                     </div>
-                </div>
+                </a>
             </div>
-            <div class="col-xl-3 col-md-6 info-panel">
-                <div class="card card-shadow" onclick="skip('/admin/nodeList');">
+            <div class="col-xl-3 col-md-6 info-panel pb-30">
+                <a href="/admin/nodeList" class="card card-shadow h-full">
                     <div class="card-block bg-white">
                         <button type="button" class="btn btn-floating btn-sm btn-primary">
                             <i class="icon md-cloud"></i>
@@ -120,10 +120,10 @@
                             <span class="font-size-40 font-weight-100">{{$nodeCount}}</span>
                         </div>
                     </div>
-                </div>
+                </a>
             </div>
-            <div class="col-xl-3 col-md-6 info-panel">
-                <div class="card card-shadow" onclick="skip('/admin/nodeList?status=0');">
+            <div class="col-xl-3 col-md-6 info-panel pb-30">
+                <a href="/admin/nodeList?status=0" class="card card-shadow h-full">
                     <div class="card-block bg-white">
                         <button type="button" class="btn btn-floating btn-sm btn-info">
                             <i class="icon md-cloud-off"></i>
@@ -133,10 +133,10 @@
                             <span class="font-size-40 font-weight-100">{{$unnormalNodeCount}}</span>
                         </div>
                     </div>
-                </div>
+                </a>
             </div>
-            <div class="col-xl-3 col-md-6 info-panel">
-                <div class="card card-shadow" onclick="skip('/admin/trafficLog');">
+            <div class="col-xl-3 col-md-6 info-panel pb-30">
+                <a href="/admin/trafficLog" class="card card-shadow h-full">
                     <div class="card-block bg-white">
                         <button type="button" class="btn btn-floating btn-sm btn-primary">
                             <i class="icon md-time-countdown"></i>
@@ -146,10 +146,10 @@
                             <span class="font-size-40 font-weight-100">{{$totalFlowCount}}</span>
                         </div>
                     </div>
-                </div>
+                </a>
             </div>
-            <div class="col-xl-3 col-md-6 info-panel">
-                <div class="card card-shadow" onclick="skip('/admin/trafficLog');">
+            <div class="col-xl-3 col-md-6 info-panel pb-30">
+                <a href="/admin/trafficLog" class="card card-shadow h-full">
                     <div class="card-block bg-white">
                         <button type="button" class="btn btn-floating btn-sm btn-primary">
                             <i class="icon md-time-countdown"></i>
@@ -159,10 +159,10 @@
                             <span class="font-size-40 font-weight-100">{{$flowCount}}</span>
                         </div>
                     </div>
-                </div>
+                </a>
             </div>
-            <div class="col-xl-3 col-md-6 info-panel">
-                <div class="card card-shadow" onclick="skip('/admin/orderList');">
+            <div class="col-xl-3 col-md-6 info-panel pb-30">
+                <a href="/admin/orderList" class="card card-shadow h-full">
                     <div class="card-block bg-white">
                         <button type="button" class="btn btn-floating btn-sm btn-primary">
                             <i class="icon md-ticket-star"></i>
@@ -172,10 +172,10 @@
                             <span class="font-size-40 font-weight-100">{{$totalOrder}}</span>
                         </div>
                     </div>
-                </div>
+                </a>
             </div>
-            <div class="col-xl-3 col-md-6 info-panel">
-                <div class="card card-shadow" onclick="skip('/admin/orderList');">
+            <div class="col-xl-3 col-md-6 info-panel pb-30">
+                <a href="/admin/orderList" class="card card-shadow h-full">
                     <div class="card-block bg-white">
                         <button type="button" class="btn btn-floating btn-sm btn-info">
                             <i class="icon md-ticket-star"></i>
@@ -185,10 +185,10 @@
                             <span class="font-size-40 font-weight-100">{{$totalOnlinePayOrder}}</span>
                         </div>
                     </div>
-                </div>
+                </a>
             </div>
-            <div class="col-xl-3 col-md-6 info-panel">
-                <div class="card card-shadow" onclick="skip('/admin/orderList?status=2');">
+            <div class="col-xl-3 col-md-6 info-panel pb-30">
+                <a href="/admin/orderList?status=2" class="card card-shadow h-full">
                     <div class="card-block bg-white">
                         <button type="button" class="btn btn-floating btn-sm btn-success">
                             <i class="icon md-ticket-star"></i>
@@ -198,10 +198,10 @@
                             <span class="font-size-40 font-weight-100">{{$totalSuccessOrder}}</span>
                         </div>
                     </div>
-                </div>
+                </a>
             </div>
-            <div class="col-xl-3 col-md-6 info-panel">
-                <div class="card card-shadow" onclick="skip('/admin/orderList?status=2&range_time={{date('Y-m-d 00:00:00') . ' 至 ' . date('Y-m-d 23:59:59')}}');">
+            <div class="col-xl-3 col-md-6 info-panel pb-30">
+                <a href="/admin/orderList?status=2&range_time={{date('Y-m-d 00:00:00') . ',' . date('Y-m-d 23:59:59')}}" class="card card-shadow h-full">
                     <div class="card-block bg-white">
                         <button type="button" class="btn btn-floating btn-sm btn-success">
                             <i class="icon md-ticket-star"></i>
@@ -211,10 +211,10 @@
                             <span class="font-size-40 font-weight-100">{{$todaySuccessOrder}}</span>
                         </div>
                     </div>
-                </div>
+                </a>
             </div>
-            <div class="col-xl-3 col-md-6 info-panel">
-                <div class="card card-shadow">
+            <div class="col-xl-3 col-md-6 info-panel pb-30">
+                <div class="card card-shadow h-full">
                     <div class="card-block bg-white">
                         <button type="button" class="btn btn-floating btn-sm btn-primary">
                             <i class="icon md-money"></i>
@@ -226,8 +226,8 @@
                     </div>
                 </div>
             </div>
-            <div class="col-xl-3 col-md-6 info-panel">
-                <div class="card card-shadow" onclick="skip('/admin/userRebateList');">
+            <div class="col-xl-3 col-md-6 info-panel pb-30">
+                <a href="/admin/userRebateList" class="card card-shadow h-full">
                     <div class="card-block bg-white">
                         <button type="button" class="btn btn-floating btn-sm btn-warning">
                             <i class="icon md-money"></i>
@@ -237,10 +237,10 @@
                             <span class="font-size-40 font-weight-100">{{$totalWaitRefAmount}}</span>
                         </div>
                     </div>
-                </div>
+                </a>
             </div>
-            <div class="col-xl-3 col-md-6 info-panel">
-                <div class="card card-shadow">
+            <div class="col-xl-3 col-md-6 info-panel pb-30">
+                <div class="card card-shadow h-full">
                     <div class="card-block bg-white">
                         <button type="button" class="btn btn-floating btn-sm btn-dark">
                             <i class="icon md-money"></i>
@@ -256,9 +256,6 @@
     </div>
 @endsection
 @section('script')
-    <script>
-        function skip(url) {
-            window.location.href = url;
-        }
-    </script>
+    <script src="/assets/global/vendor/matchheight/jquery.matchHeight-min.js" type="text/javascript"></script>
+    <script src="/assets/global/js/Plugin/matchheight.js" type="text/javascript"></script>
 @endsection

+ 5 - 6
resources/views/admin/inviteList.blade.php

@@ -1,6 +1,6 @@
 @extends('admin.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container-fluid">
@@ -87,7 +87,7 @@
                             </div>
                             <div class="col-md-8">
                                 <nav class="Page navigation float-right">
-                                    {{ $inviteList->links() }}
+                                    {{$inviteList->links()}}
                                 </nav>
                             </div>
                         </div>
@@ -99,8 +99,8 @@
 
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
-    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
+    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
     <script type="text/javascript">
         // 生成邀请码
         function makeInvite() {
@@ -134,10 +134,9 @@
                 confirmButtonText: '{{trans('home.ticket_confirm')}}',
             }).then((result) => {
                 if (result.value) {
-
                     window.location.href = '/admin/exportInvite';
                 }
             });
         }
     </script>
-@endsection
+@endsection

+ 8 - 18
resources/views/admin/labelList.blade.php

@@ -1,6 +1,6 @@
 @extends('admin.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container-fluid">
@@ -10,7 +10,7 @@
                     <small>标签影响用户查看/订阅节点信息(用户和节点通过标签进行关联)</small>
                 </h3>
                 <div class="panel-actions">
-                    <button class="btn btn-primary" onclick="addLabel()"><i class="icon wb-plus"></i>添加标签</button>
+                    <a href="/admin/addLabel" class="btn btn-primary"><i class="icon wb-plus"></i>添加标签</a>
                 </div>
             </div>
             <div class="panel-body">
@@ -40,7 +40,7 @@
                                 <td> {{$label->sort}} </td>
                                 <td>
                                     <div class="btn-group">
-                                        <button class="btn btn-primary" onclick="editLabel('{{$label->id}}')"><i class="icon wb-edit"></i></button>
+                                        <a href="/admin/editLabel?id={{$label->id}}&page={{Request::get('page', 1)}}" class="btn btn-primary"><i class="icon wb-edit"></i></a>
                                         <button class="btn btn-danger" onclick="delLabel('{{$label->id}}')"><i class="icon wb-trash"></i></button>
                                     </div>
                                 </td>
@@ -53,11 +53,11 @@
             <div class="panel-footer">
                 <div class="row">
                     <div class="col-sm-4">
-                        共 {{$labelList->total()}} 个标签
+                        共 <code>{{$labelList->total()}}</code> 个标签
                     </div>
                     <div class="col-sm-8">
                         <nav class="Page navigation float-right">
-                            {{ $labelList->links() }}
+                            {{$labelList->links()}}
                         </nav>
                     </div>
                 </div>
@@ -66,19 +66,9 @@
     </div>
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
-    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
+    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
     <script type="text/javascript">
-        // 添加标签
-        function addLabel() {
-            window.location.href = '/admin/addLabel';
-        }
-
-        // 编辑标签
-        function editLabel(id) {
-            window.location.href = '/admin/editLabel?id=' + id + '&page={{Request::get('page', 1)}}';
-        }
-
         // 删除标签
         function delLabel(id) {
             swal.fire({
@@ -102,4 +92,4 @@
             });
         }
     </script>
-@endsection
+@endsection

+ 22 - 29
resources/views/admin/layouts.blade.php

@@ -17,23 +17,21 @@
     <meta name="copyright" content="2017-2019©兔姬菌">
     <link rel="shortcut icon" href="{{asset('favicon.ico')}}">
     <!-- 样式表/Stylesheets -->
-    <link rel="stylesheet" href="/assets/global/css/bootstrap.min.css">
-    <link rel="stylesheet" href="/assets/global/css/bootstrap-extend.min.css">
-    <link rel="stylesheet" href="/assets/css/site.min.css">
-
+    <link href="/assets/global/css/bootstrap.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/css/bootstrap-extend.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/css/site.min.css" type="text/css" rel="stylesheet">
     <!-- 插件/Plugins -->
-    <link rel="stylesheet" href="/assets/global/vendor/animsition/animsition.min.css">
-    <link rel="stylesheet" href="/assets/global/vendor/asscrollable/asScrollable.min.css">
-    <link rel="stylesheet" href="/assets/global/vendor/intro-js/introjs.min.css">
-    <link rel="stylesheet" href="/assets/global/vendor/slidepanel/slidePanel.min.css">
-    <link rel="stylesheet" href="/assets/global/vendor/flag-icon-css/flag-icon.min.css">
+    <link href="/assets/global/vendor/animsition/animsition.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/vendor/asscrollable/asScrollable.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/vendor/intro-js/introjs.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/vendor/slidepanel/slidePanel.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/vendor/flag-icon-css/flag-icon.min.css" type="text/css" rel="stylesheet">
     @yield('css')
-    <link rel="stylesheet" href="/assets/custom/Plugin/sweetalert2/sweetalert2.min.css">
-
+    <link href="/assets/custom/Plugin/sweetalert2/sweetalert2.min.css" type="text/css" rel="stylesheet">
     <!-- 字体/Fonts -->
-    <link rel="stylesheet" href="/assets/global/fonts/web-icons/web-icons.min.css">
-    <link rel="stylesheet" href="/assets/global/fonts/brand-icons/brand-icons.min.css">
-    <link rel='stylesheet' href='https://fonts.loli.net/css?family=Roboto:300,400,500,300italic'>
+    <link href="/assets/global/fonts/web-icons/web-icons.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/fonts/brand-icons/brand-icons.min.css" type="text/css" rel="stylesheet">
+    <link href="//fonts.loli.net/css?family=Roboto:300,400,500,300italic" type="text/css" rel="stylesheet">
     <!--[if lt IE 9]>
     <script src="/assets/global/vendor/html5shiv/html5shiv.min.js" type="text/javascript"></script>
     <![endif]-->
@@ -43,7 +41,7 @@
     <![endif]-->
     <!-- Scripts -->
     <script src="/assets/global/vendor/breakpoints/breakpoints.min.js" type="text/javascript"></script>
-    <script>
+    <script type="text/javascript">
         Breakpoints();
     </script>
 </head>
@@ -59,11 +57,7 @@
             <i class="icon wb-more-horizontal" aria-hidden="true"></i>
         </button>
         <div class="navbar-brand navbar-brand-center">
-            @if(\App\Components\Helpers::systemConfig()['website_logo'])
-                <img class="navbar-brand-logo" src="{{\App\Components\Helpers::systemConfig()['website_logo']}}">
-            @else
-                <img class="navbar-brand-logo" src="/assets/images/logo64.png" alt="Otaku Logo">
-            @endif
+            <img src="{{\App\Components\Helpers::systemConfig()['website_logo']?\App\Components\Helpers::systemConfig()['website_logo']:'/assets/images/logo64.png'}}" class="navbar-brand-logo" alt="logo"/>
             <span class="navbar-brand-text hidden-xs-down"> {{\App\Components\Helpers::systemConfig()['website_name']}}</span>
         </div>
     </div>
@@ -85,10 +79,11 @@
                 </li>
             </ul>
             <ul class="nav navbar-toolbar navbar-right navbar-toolbar-right">
-                <li class="nav-item dropdown" id="toggerUsermenu">
+                <li class="nav-item dropdown">
                     <a class="nav-link navbar-avatar" data-toggle="dropdown" href="#" aria-expanded="false" data-animation="scale-up" role="button">
                 <span class="avatar avatar-online">
-                  <img src="/assets/images/avatar.png" alt="...">
+                  <img src="/assets/images/astronaut.svg" alt="..."/>
+                    <i></i>
                 </span>
                     </a>
                     <div class="dropdown-menu" role="menu">
@@ -364,16 +359,14 @@
 <script src="/assets/global/vendor/asscrollbar/jquery-asScrollbar.min.js" type="text/javascript"></script>
 <script src="/assets/global/vendor/asscrollable/jquery-asScrollable.min.js" type="text/javascript"></script>
 <script src="/assets/global/vendor/ashoverscroll/jquery-asHoverScroll.min.js" type="text/javascript"></script>
-
 <!-- 插件/Plugins -->
 <script src="/assets/global/vendor/intro-js/intro.min.js" type="text/javascript"></script>
 <script src="/assets/global/vendor/screenfull/screenfull.js" type="text/javascript"></script>
 <script src="/assets/global/vendor/slidepanel/jquery-slidePanel.min.js" type="text/javascript"></script>
 <!--[if lt IE 11]>
-<script src="/assets/custom/Plugin/sweetalert2/polyfill.min.js"></script>
+<script src="/assets/custom/Plugin/sweetalert2/polyfill.min.js" type="text/javascript"></script>
 <![endif]-->
-<script src="/assets/custom/Plugin/sweetalert2/sweetalert2.min.js"></script>
-
+<script src="/assets/custom/Plugin/sweetalert2/sweetalert2.min.js" type="text/javascript"></script>
 <!-- 脚本/Scripts -->
 <script src="/assets/global/js/Component.js" type="text/javascript"></script>
 <script src="/assets/global/js/Plugin.js" type="text/javascript"></script>
@@ -385,7 +378,7 @@
 <script src="/assets/js/Plugin/menu.js" type="text/javascript"></script>
 <!-- 设置/Config -->
 <script src="/assets/global/js/config/colors.js" type="text/javascript"></script>
-<script>
+<script type="text/javascript">
     Config.set('assets', '/assets');
 </script>
 <!-- 页面/Page -->
@@ -393,10 +386,10 @@
 <script src="/assets/global/js/Plugin/asscrollable.js" type="text/javascript"></script>
 <script src="/assets/global/js/Plugin/slidepanel.js" type="text/javascript"></script>
 <script src="/assets/custom/Plugin/js-cookie/js.cookie.min.js" type="text/javascript"></script>
-<script>
+<script type="text/javascript">
     (function (document, window, $) {
         'use strict';
-        var Site = window.Site;
+        const Site = window.Site;
         $(document).ready(function () {
             Site.run();
         });

+ 11 - 27
resources/views/admin/nodeList.blade.php

@@ -1,6 +1,6 @@
 @extends('admin.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container-fluid">
@@ -8,7 +8,7 @@
             <div class="panel-heading">
                 <h3 class="panel-title">节点列表</h3>
                 <div class="panel-actions">
-                    <button class="btn btn-primary" onclick="addNode()"><i class="icon wb-plus"></i> 添加节点</button>
+                    <a href="/admin/addNode" class="btn btn-primary"><i class="icon wb-plus"></i> 添加节点</a>
                 </div>
             </div>
             <div class="panel-body">
@@ -36,9 +36,9 @@
                         </tr>
                     @else
                         @foreach($nodeList as $node)
-                            <tr>
+                            <tr class="text-center{{$node->status ? ' table-danger' : ''}}">
                                 <td>
-                                    <span class="badge badge-lg {{$node->status ? 'badge-danger' : 'badge-default'}}"> {{$node->id}} </span>
+                                    {{$node->id}}
                                 </td>
                                 <td>
                                     @if($node->is_transit)
@@ -63,9 +63,9 @@
                                 </td>
                                 <td>
                                     <div class="btn-group">
-                                        <a href="javascript:editNode('{{$node->id}}');" class="btn btn-primary"><i class="icon wb-edit"></i></a>
-                                        <a href="javascript:delNode('{{$node->id}}');" class="btn btn-danger"><i class="icon wb-trash"></i></a>
-                                        <a href="javascript:nodeMonitor('{{$node->id}}');" class="btn btn-primary"><i class="icon wb-stats-bars"></i></a>
+                                        <a href="/admin/editNode?id={{$node->id}}&page={{Request::get('page', 1)}}" class="btn btn-primary"><i class="icon wb-edit"></i></a>
+                                        <a href="javascript:delNode({{$node->id}})" class="btn btn-danger"><i class="icon wb-trash"></i></a>
+                                        <a href="/admin/nodeMonitor/{{$node->id}})" class="btn btn-primary"><i class="icon wb-stats-bars"></i></a>
                                     </div>
                                 </td>
                             </tr>
@@ -77,11 +77,11 @@
             <div class="panel-footer">
                 <div class="row">
                     <div class="col-sm-4">
-                        共 {{$nodeList->total()}} 条线路
+                        共 <code>{{$nodeList->total()}}</code> 条线路
                     </div>
                     <div class="col-sm-8">
                         <nav class="Page navigation float-right">
-                            {{ $nodeList->links() }}
+                            {{$nodeList->links()}}
                         </nav>
                     </div>
                 </div>
@@ -90,19 +90,9 @@
     </div>
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
-    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
+    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
     <script type="text/javascript">
-        // 添加节点
-        function addNode() {
-            window.location.href = '/admin/addNode';
-        }
-
-        // 编辑节点
-        function editNode(id) {
-            window.location.href = '/admin/editNode?id=' + id + '&page={{Request::get('page', 1)}}';
-        }
-
         // 删除节点
         function delNode(id) {
             swal.fire({
@@ -125,12 +115,6 @@
                 }
             });
         }
-
-        // 节点流量监控
-        function nodeMonitor(id) {
-            window.location.href = '/admin/nodeMonitor?id=' + id;
-        }
-
         // 显示提示
         function showIdTips() {
             swal.fire({

+ 1 - 1
resources/views/admin/nodeMonitor.blade.php

@@ -26,7 +26,7 @@
 	</div>
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/chart-js/Chart.min.js"></script>
+    <script src="/assets/global/vendor/chart-js/Chart.min.js" type="text/javascript"></script>
 
 	<script type="text/javascript">
         const dailyChart = new Chart(document.getElementById('dailyChart').getContext('2d'), {

+ 38 - 29
resources/views/admin/onlineIPMonitor.blade.php

@@ -1,6 +1,6 @@
 @extends('admin.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container-fluid">
@@ -11,25 +11,33 @@
                 </h3>
             </div>
             <div class="panel-body">
-                <div class="form-inline pb-20">
-                    <div class="form-group">
-                        <input type="text" class="form-control w-60" name="id" value="{{Request::get('id')}}" id="id" placeholder="ID">
-                        <input type="text" class="form-control w-100" name="ip" value="{{Request::get('ip')}}" id="ip" placeholder="IP">
-                        <input type="text" class="form-control w-150" name="username" value="{{Request::get('username')}}" id="username" placeholder="用户名">
-                        <input type="text" class="form-control w-60" name="port" value="{{Request::get('port')}}" id="port" placeholder="端口">
-                        <select name="nodeId" id="nodeId" class="form-control">
+                <div class="form-row">
+                    <div class="form-group col-lg-2 col-sm-2">
+                        <input type="number" class="form-control" name="id" id="id" value="{{Request::get('id')}}" placeholder="ID"/>
+                    </div>
+                    <div class="form-group col-lg-2 col-sm-5">
+                        <input type="text" class="form-control" name="username" id="username" value="{{Request::get('username')}}" placeholder="用户名"/>
+                    </div>
+                    <div class="form-group col-lg-2 col-sm-5">
+                        <input type="text" class="form-control" name="ip" id="ip" value="{{Request::get('ip')}}" placeholder="IP"/>
+                    </div>
+                    <div class="form-group col-lg-2 col-sm-3">
+                        <input type="number" class="form-control" name="port" id="port" value="{{Request::get('port')}}" placeholder="端口"/>
+                    </div>
+                    <div class="form-group col-lg-2 col-sm-5">
+                        <select name="nodeId" id="nodeId" class="form-control" onChange="Search()">
                             <option value="" @if(Request::get('nodeId') == '') selected @endif>选择节点</option>
                             @foreach($nodeList as $node)
                                 <option value="{{$node->id}}" @if(Request::get('nodeId') == $node->id) selected @endif>{{$node->name}}</option>
                             @endforeach
                         </select>
                     </div>
-                    <div class="btn-group">
-                        <button class="btn btn-primary" onclick="doSearch()">搜索</button>
-                        <button class="btn btn-danger" onclick="doReset()">重置</button>
+                    <div class="form-group col-lg-2 col-sm-4 btn-group">
+                        <button class="btn btn-primary" onclick="Search()">搜索</button>
+                        <a href="/admin/onlineIPMonitor" class="btn btn-danger">重置</a>
                     </div>
                 </div>
-                <table class="text-center" data-toggle="table" data-mobile-responsive="true">
+                <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
                     <thead class="thead-default">
                     <tr>
                         <th> #</th>
@@ -66,11 +74,11 @@
             <div class="panel-footer">
                 <div class="row">
                     <div class="col-sm-4">
-                        共 {{$list->total()}} 个账号
+                        共 <code>{{$list->total()}}</code> 个账号
                     </div>
                     <div class="col-sm-8">
                         <nav class="Page navigation float-right">
-                            {{ $list->links() }}
+                            {{$list->links()}}
                         </nav>
                     </div>
                 </div>
@@ -79,24 +87,25 @@
     </div>
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
-    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
+    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
     <script src="/assets/custom/Plugin/clipboardjs/clipboard.min.js" type="text/javascript"></script>
     <script type="text/javascript">
-        // 搜索
-        function doSearch() {
-            var id = $("#id").val();
-            var ip = $("#ip").val();
-            var username = $("#username").val();
-            var port = $("#port").val();
-            var nodeId = $("#nodeId option:selected").val();
+        //回车检测
+        $(document).on("keypress", "input", function (e) {
+            if (e.which === 13) {
+                Search()
+            }
+        });
 
+        // 搜索
+        function Search() {
+            const id = $("#id").val();
+            const username = $("#username").val();
+            const ip = $("#ip").val();
+            const port = $("#port").val();
+            const nodeId = $("#nodeId option:selected").val();
             window.location.href = '/admin/onlineIPMonitor?id=' + id + '&ip=' + ip + '&username=' + username + '&port=' + port + '&nodeId=' + nodeId;
         }
-
-        // 重置
-        function doReset() {
-            window.location.href = '/admin/onlineIPMonitor';
-        }
     </script>
-@endsection
+@endsection

+ 69 - 64
resources/views/admin/orderList.blade.php

@@ -1,8 +1,7 @@
 @extends('admin.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css">
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-select/bootstrap-select.min.css">
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-datepicker/bootstrap-datepicker.min.css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/vendor/bootstrap-datepicker/bootstrap-datepicker.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container-fluid">
@@ -11,71 +10,79 @@
                 <h2 class="panel-title">订单列表</h2>
             </div>
             <div class="panel-body">
-                <div class="form-inline pb-20">
-                    <div class="form-group">
-                        <input type="text" class="form-control" name="username" value="{{Request::get('username')}}" id="username" placeholder="用户名"/>
-                        <input type="text" class="col-md-4 form-control" name="order_sn" value="{{Request::get('order_sn')}}" id="order_sn" placeholder="订单号" onkeydown="if(event.keyCode==13){do_search();}">
-                        <div class="input-group col-md-6 input-daterange" data-plugin="datepicker">
+                <div class="form-row">
+                    <div class="form-group col-lg-2 col-sm-6">
+                        <input type="text" class="form-control" name="username" id="username" value="{{Request::get('username')}}" placeholder="用户名"/>
+                    </div>
+                    <div class="form-group col-lg-2 col-sm-6">
+                        <input type="number" class="form-control" name="order_sn" id="order_sn" value="{{Request::get('order_sn')}}" placeholder="订单号"/>
+                    </div>
+                    <div class="form-group col-lg-6 col-sm-12">
+                        <div class="input-group input-daterange" data-plugin="datepicker">
                             <div class="input-group-prepend">
                                 <span class="input-group-text"><i class="icon wb-calendar" aria-hidden="true"></i></span>
                             </div>
-                            <div class="input-daterange input-group" id="datepicker">
-                                <input type="text" class="form-control" value="2019-11-05" name="start" id="start_time"/>
-                                <div class="input-group-prepend">
-                                    <span class="input-group-text">至</span>
-                                </div>
-                                <input type="text" class="form-control" value="2019-11-25" name="end" id="end_time"/>
+                            <input type="text" class="form-control" name="start" id="start" value="" placeholder="{{date("Y-m-d")}}"/>
+                            <div class="input-group-prepend">
+                                <span class="input-group-text">至</span>
                             </div>
+                            <input type="text" class="form-control" name="end" id="end" value="" placeholder="{{date("Y-m-d",strtotime("+1 month"))}}"/>
                         </div>
-                        <select class="form-control" name="is_expire" id="is_expire">
+                    </div>
+                    <div class="form-group col-lg-2 col-sm-6">
+                        <select class="form-control" name="is_expire" id="is_expire" onChange="Search()">
                             <option value="" @if(Request::get('is_expire') == '') selected hidden @endif>是否过期</option>
                             <option value="0" @if(Request::get('is_expire') == '0') selected hidden @endif>否</option>
                             <option value="1" @if(Request::get('is_expire') == '1') selected hidden @endif>是</option>
                         </select>
-                        <select class="form-control" name="is_coupon" id="is_coupon">
+                    </div>
+                    <div class="form-group col-lg-2 col-sm-6">
+                        <select class="form-control" name="is_coupon" id="is_coupon" onChange="Search()">
                             <option value="" @if(Request::get('is_coupon') == '') selected hidde @endif>是否使用优惠券</option>
                             <option value="0" @if(Request::get('is_coupon') == '0') selected hidden @endif>否</option>
                             <option value="1" @if(Request::get('is_coupon') == '1') selected hidden @endif>是</option>
                         </select>
-                        <select class="form-control" name="pay_way" id="pay_way">
+                    </div>
+                    <div class="form-group col-lg-2 col-sm-6">
+                        <select class="form-control" name="pay_way" id="pay_way" onChange="Search()">
                             <option value="" @if(Request::get('pay_way') == '') selected hidden @endif>支付方式</option>
                             <option value="1" @if(Request::get('pay_way') == '1') selected hidden @endif>余额支付</option>
                             <option value="2" @if(Request::get('pay_way') == '2') selected hidden @endif>有赞云支付</option>
                             <option value="4" @if(Request::get('pay_way') == '4') selected hidden @endif>支付宝国际</option>
                             <option value="5" @if(Request::get('pay_way') == '5') selected hidden @endif>支付宝当面付</option>
                         </select>
-                        <select class="form-control" name="status" id="status">
+                    </div>
+                    <div class="form-group col-lg-2 col-sm-6">
+                        <select class="form-control" name="status" id="status" onChange="Search()">
                             <option value="" @if(Request::get('status') == '') selected hidden @endif>订单状态</option>
                             <option value="-1" @if(Request::get('status') == '-1') selected hidden @endif>已关闭</option>
                             <option value="0" @if(Request::get('status') == '0') selected hidden @endif>待支付</option>
                             <option value="1" @if(Request::get('status') == '1') selected hidden @endif>已支付待确认</option>
                             <option value="2" @if(Request::get('status') == '2') selected hidden @endif>已完成</option>
                         </select>
-                        <ul class="list-unstyled list-inline">
-                            <li class="list-inline-item">
-                                <div class="radio-custom radio-primary">
-                                    <input type="radio" name="sort" value="1" checked/>
-                                    <label>升序</label>
-                                </div>
-                            </li>
-                            <li class="list-inline-item">
-                                <div class="radio-custom radio-primary">
-                                    <input type="radio" name="sort" value="0" @if(Request::get('sort') == '0') checked @endif />
-                                    <label>降序</label>
-                                </div>
-                            </li>
-                        </ul>
                     </div>
-                    <div class="btn-group">
-                        <button class="btn btn-primary" onclick="doSearch()">搜索</button>
-                        <button class="btn btn-danger" onclick="doReset()">重置</button>
+                    <div class="form-group col-lg-3 col-sm-6">
+                        <div class="d-flex align-items-center">
+                            <div class="radio-custom radio-primary radio-inline">
+                                <input type="radio" name="sort" value="0" checked/>
+                                <label for="type">降序</label>
+                            </div>
+                            <div class="radio-custom radio-primary radio-inline">
+                                <input type="radio" name="sort" value="1" @if(Request::get('sort') == '1') checked @endif/>
+                                <label for="type">升序</label>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="form-group col-lg-2 col-sm-6 btn-group">
+                        <button class="btn btn-primary" onclick="Search()">搜索</button>
+                        <a href="/admin/orderList" class="btn btn-danger">重置</a>
                     </div>
                 </div>
-                <table class="text-center" data-toggle="table" data-mobile-responsive="true">
+                <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
                     <thead class="thead-default">
                     <tr>
                         <th> #</th>
-                        <th> 操作人</th>
+                        <th> 用户名</th>
                         <th> 订单号</th>
                         <th> 商品</th>
                         <th> 过期时间</th>
@@ -100,11 +107,10 @@
                                     @if(empty($order->user) )
                                         【账号不存在】
                                     @else
-                                        <a href="{{url('admin/userList?id=') . $order->user->id}}" target="_blank">{{$order->user->username}} </a>
+                                        <a href="/admin/userList?id={{$order->user->id}}" target="_blank">{{$order->user->username}} </a>
                                     @endif
                                 </td>
-                                <td><a href="/admin/orderList?order_sn={{$order->order_sn}}">{{$order->order_sn}}</a>
-                                </td>
+                                <td> {{$order->order_sn}}</td>
                                 <td> {{$order->goods->name}} </td>
                                 <td> {{$order->is_expire ? '已过期' : $order->expire_at}} </td>
                                 <td> {{$order->coupon ? $order->coupon->name . ' - ' . $order->coupon->sn : ''}} </td>
@@ -144,11 +150,11 @@
             <div class="panel-footer">
                 <div class="row">
                     <div class="col-sm-4">
-                        共 {{$orderList->total()}} 个订单
+                        共 <code>{{$orderList->total()}}</code> 个订单
                     </div>
                     <div class="col-sm-8">
                         <nav class="Page navigation float-right">
-                            {{ $orderList->links() }}
+                            {{$orderList->links()}}
                         </nav>
                     </div>
                 </div>
@@ -158,36 +164,35 @@
 
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
-    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
-    <script src="/assets/global/vendor/bootstrap-select/bootstrap-select.min.js"></script>
-    <script src="/assets/global/vendor/bootstrap-datepicker/bootstrap-datepicker.min.js"></script>
-    <script src="/assets/global/js/Plugin/bootstrap-select.js"></script>
-    <script src="/assets/global/js/Plugin/bootstrap-datepicker.js"></script>
+    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-datepicker/bootstrap-datepicker.min.js" type="text/javascript"></script>
+    <script src="/assets/global/js/Plugin/bootstrap-datepicker.js" type="text/javascript"></script>
     <script type="text/javascript">
         // 有效期
         $('.input-daterange').datepicker({
             format: "yyyy-mm-dd",
         });
+        //回车检测
+        $(document).on("keypress", "input", function (e) {
+            if (e.which === 13) {
+                Search()
+            }
+        });
 
         // 搜索
-        function doSearch() {
-            var username = $("#username").val();
-            var is_expire = $("#is_expire").val();
-            var is_coupon = $("#is_coupon").val();
-            var pay_way = $("#pay_way").val();
-            var status = $("#status").val();
-            var sort = $("input:radio[name='sort']:checked").val();
-            var start= $("#start_time").val;
-            var end = $("#end_time").val;
-            var range_time = [start,end];
-            log.console(range_time);
+        function Search() {
+            const username = $("#username").val();
+            const order_sn = $("#order_sn").val();
+            const is_expire = $("#is_expire").val();
+            const is_coupon = $("#is_coupon").val();
+            const pay_way = $("#pay_way").val();
+            const status = $("#status").val();
+            const sort = $("input:radio[name='sort']:checked").val();
+            const startTime = $("#start").val();
+            const endTime = $("#end").val();
+            const range_time = [startTime, endTime];
             window.location.href = '/admin/orderList?username=' + username + '&order_sn=' + order_sn + '&is_expire=' + is_expire + '&is_coupon=' + is_coupon + '&pay_way=' + pay_way + '&status=' + status + '&sort=' + sort + '&range_time=' + range_time;
         }
-
-        // 重置
-        function doReset() {
-            window.location.href = '/admin/orderList';
-        }
     </script>
 @endsection

+ 28 - 28
resources/views/admin/system.blade.php

@@ -1,8 +1,8 @@
 @extends('admin.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-select/bootstrap-select.min.css">
-    <link href="//cdn.bootcss.com/bootstrap-switch/4.0.0-alpha.1/css/bootstrap-switch.min.css" rel="stylesheet">
-    <link rel="stylesheet" href="/assets/global/vendor/dropify/dropify.min.css">
+    <link href="/assets/global/vendor/bootstrap-select/bootstrap-select.min.css" type="text/css" rel="stylesheet">
+    <link href="//cdn.bootcss.com/bootstrap-switch/4.0.0-alpha.1/css/bootstrap-switch.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/vendor/dropify/dropify.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container-fluid">
@@ -74,7 +74,7 @@
                                             <div class="row">
                                                 <label class="col-md-3 col-form-label" for="website_url">网站地址</label>
                                                 <div class="input-group col-md-7">
-                                                    <input class="form-control" type="text" name="website_url" value="{{$website_url}}" id="website_url"/>
+                                                    <input class="form-control" type="url" name="website_url" value="{{$website_url}}" id="website_url"/>
                                                     <span class="input-group-append"><button class="btn btn-primary" type="button" onclick="setWebsiteUrl()">修改</button></span>
                                                 </div>
                                                 <span class="text-help offset-md-3"> 生成重置密码、在线支付必备 </span>
@@ -218,11 +218,11 @@
                                             <div class="row">
                                                 <label class="col-md-3 col-form-label">端口范围</label>
                                                 <div class="input-group col-md-7">
-                                                    <input type="text" class="form-control" name="min_port" value="{{$min_port}}" id="min_port"/>
+                                                    <input type="number" class="form-control" name="min_port" value="{{$min_port}}" id="min_port"/>
                                                     <div class="input-group-prepend">
                                                         <span class="input-group-text"> ~ </span>
                                                     </div>
-                                                    <input type="text" class="form-control" name="max_port" value="{{$max_port}}" id="max_port"/>
+                                                    <input type="number" class="form-control" name="max_port" value="{{$max_port}}" id="max_port"/>
                                                 </div>
                                                 <span class="text-help offset-md-3"> 端口范围:1000 - 65535 </span>
                                             </div>
@@ -255,7 +255,7 @@
                                             <div class="row">
                                                 <label class="col-md-3 col-form-label" for="default_days">初始有效期</label>
                                                 <div class="input-group col-md-7">
-                                                    <input class="form-control" type="text" name="default_days" value="{{$default_days}}" id="default_days"/>
+                                                    <input class="form-control" type="number" name="default_days" value="{{$default_days}}" id="default_days"/>
                                                     <div class="input-group-append">
                                                         <span class="input-group-text">天</span>
                                                         <button class="btn btn-primary" type="button" onclick="setDefaultDays()">修改</button>
@@ -268,7 +268,7 @@
                                             <div class="row">
                                                 <label class="col-md-3 col-form-label" for="default_traffic">初始流量</label>
                                                 <div class="input-group col-md-7">
-                                                    <input class="form-control" type="text" name="default_traffic" value="{{$default_traffic}}" id="default_traffic"/>
+                                                    <input class="form-control" type="number" name="default_traffic" value="{{$default_traffic}}" id="default_traffic"/>
                                                     <div class="input-group-append">
                                                         <span class="input-group-text">MB</span>
                                                         <button class="btn btn-primary" type="button" onclick="setDefaultTraffic()">修改</button>
@@ -281,7 +281,7 @@
                                             <div class="row">
                                                 <label class="col-md-3 col-form-label" for="invite_num">可生成邀请码数</label>
                                                 <div class="input-group col-md-7">
-                                                    <input class="form-control" type="text" name="invite_num" value="{{$invite_num}}" id="invite_num"/>
+                                                    <input class="form-control" type="number" name="invite_num" value="{{$invite_num}}" id="invite_num"/>
                                                     <span class="input-group-append"><button class="btn btn-primary" type="button" onclick="setInviteNum()">修改</button></span>
                                                 </div>
                                                 <span class="text-help offset-md-3"> 用户可以生成的邀请码数 </span>
@@ -291,7 +291,7 @@
                                             <div class="row">
                                                 <label class="col-md-3 col-form-label" for="reset_password_times">重置密码次数</label>
                                                 <div class="input-group col-md-7">
-                                                    <input class="form-control" type="text" name="reset_password_times" value="{{$reset_password_times}}" id="reset_password_times"/>
+                                                    <input class="form-control" type="number" name="reset_password_times" value="{{$reset_password_times}}" id="reset_password_times"/>
                                                     <span class="input-group-append"><button class="btn btn-primary" type="button" onclick="setResetPasswordTimes()">修改</button></span>
                                                 </div>
                                                 <span class="text-help offset-md-3"> 24小时内可以通过邮件重置密码次数 </span>
@@ -301,7 +301,7 @@
                                             <div class="row">
                                                 <label class="col-md-3 col-form-label" for="active_times">激活账号次数</label>
                                                 <div class="input-group col-md-7">
-                                                    <input class="form-control" type="text" name="active_times" value="{{$active_times}}" id="active_times"/>
+                                                    <input class="form-control" type="number" name="active_times" value="{{$active_times}}" id="active_times"/>
                                                     <span class="input-group-append"><button class="btn btn-primary" type="button" onclick="setActiveTimes()">修改</button></span>
                                                 </div>
                                                 <span class="text-help offset-md-3"> 24小时内可以通过邮件激活账号次数 </span>
@@ -311,7 +311,7 @@
                                             <div class="row">
                                                 <label class="col-md-3 col-form-label" for="register_ip_limit">同IP注册限制</label>
                                                 <div class="input-group col-md-7">
-                                                    <input class="form-control" type="text" name="register_ip_limit" value="{{$register_ip_limit}}" id="register_ip_limit"/>
+                                                    <input class="form-control" type="number" name="register_ip_limit" value="{{$register_ip_limit}}" id="register_ip_limit"/>
                                                     <span class="input-group-append"><button class="btn btn-primary" type="button" onclick="setRegisterIpLimit()">修改</button></span>
                                                 </div>
                                                 <span class="text-help offset-md-3"> 同IP在24小时内允许注册数量,为0时不限制 </span>
@@ -345,7 +345,7 @@
                                             <div class="row">
                                                 <label class="col-md-3 col-form-label" for="subscribe_domain">节点订阅地址</label>
                                                 <div class="input-group col-md-7">
-                                                    <input class="form-control" type="text" name="subscribe_domain" value="{{$subscribe_domain}}" id="subscribe_domain"/>
+                                                    <input class="form-control" type="url" name="subscribe_domain" value="{{$subscribe_domain}}" id="subscribe_domain"/>
                                                     <span class="input-group-append"><button class="btn btn-primary" type="button" onclick="setSubscribeDomain()">修改</button></span>
                                                 </div>
                                                 <span class="text-help offset-md-3"> (推荐)防止面板域名被DNS投毒后无法正常订阅,需带http://或https:// </span>
@@ -355,7 +355,7 @@
                                             <div class="row">
                                                 <label class="col-md-3 col-form-label" for="subscribe_max">订阅节点数</label>
                                                 <div class="input-group col-md-7">
-                                                    <input class="form-control" type="text" name="subscribe_max" value="{{$subscribe_max}}" id="subscribe_max"/>
+                                                    <input class="form-control" type="number" name="subscribe_max" value="{{$subscribe_max}}" id="subscribe_max"/>
                                                     <span class="input-group-append"><button class="btn btn-primary" type="button" onclick="setSubscribeMax()">修改</button></span>
                                                 </div>
                                                 <span class="text-help offset-md-3"> 客户端订阅时取得几个节点,为0时返回全部节点 </span>
@@ -365,7 +365,7 @@
                                             <div class="row">
                                                 <label class="col-md-3 col-form-label" for="user_invite_days">用户-邀请码有效期</label>
                                                 <div class="input-group col-md-7">
-                                                    <input class="form-control" type="text" name="user_invite_days" value="{{$user_invite_days}}" id="user_invite_days"/>
+                                                    <input class="form-control" type="number" name="user_invite_days" value="{{$user_invite_days}}" id="user_invite_days"/>
                                                     <div class="input-group-append">
                                                         <span class="input-group-text">天</span>
                                                         <button class="btn btn-primary" type="button" onclick="setUserInviteDays()">修改</button>
@@ -378,7 +378,7 @@
                                             <div class="row">
                                                 <label class="col-md-3 col-form-label" for="admin_invite_days">管理员-邀请码有效期</label>
                                                 <div class="input-group col-md-7">
-                                                    <input class="form-control" type="text" name="admin_invite_days" value="{{$admin_invite_days}}" id="admin_invite_days"/>
+                                                    <input class="form-control" type="number" name="admin_invite_days" value="{{$admin_invite_days}}" id="admin_invite_days"/>
                                                     <div class="input-group-append">
                                                         <span class="input-group-text">天</span>
                                                         <button class="btn btn-primary" type="button" onclick="setAdminInviteDays()">修改</button>
@@ -425,7 +425,7 @@
                                             <div class="row">
                                                 <label for="traffic_limit_time" class="col-md-3 col-form-label">时间间隔</label>
                                                 <div class="input-group col-md-7">
-                                                    <input class="form-control" type="text" name="traffic_limit_time" value="{{$traffic_limit_time}}" id="traffic_limit_time"/>
+                                                    <input class="form-control" type="number" name="traffic_limit_time" value="{{$traffic_limit_time}}" id="traffic_limit_time"/>
                                                     <div class="input-group-append">
                                                         <span class="input-group-text">分钟</span>
                                                         <button class="btn btn-primary" type="button" onclick="setTrafficLimitTime()">修改</button>
@@ -438,11 +438,11 @@
                                             <div class="row">
                                                 <label class="col-md-3 col-form-label">流量范围</label>
                                                 <div class="input-group col-md-7">
-                                                    <input type="text" class="form-control" name="min_rand_traffic" value="{{$min_rand_traffic}}" id="min_rand_traffic">
+                                                    <input type="number" class="form-control" name="min_rand_traffic" value="{{$min_rand_traffic}}" id="min_rand_traffic">
                                                     <div class="input-group-prepend">
                                                         <span class="input-group-text"> ~ </span>
                                                     </div>
-                                                    <input type="text" class="form-control" name="max_rand_traffic" value="{{$max_rand_traffic}}" id="max_rand_traffic">
+                                                    <input type="number" class="form-control" name="max_rand_traffic" value="{{$max_rand_traffic}}" id="max_rand_traffic">
                                                     <div class="input-group-prepend">
                                                         <span class="input-group-text"> MB </span>
                                                     </div>
@@ -992,14 +992,14 @@
     </div>
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/matchheight/jquery.matchHeight-min.js"></script>
-    <script src="/assets/global/js/Plugin/responsive-tabs.js"></script>
-    <script src="/assets/global/js/Plugin/tabs.js"></script>
-    <script src="/assets/global/vendor/bootstrap-select/bootstrap-select.min.js"></script>
-    <script src="/assets/global/js/Plugin/bootstrap-select.js"></script>
-    <script src="//cdn.bootcss.com/bootstrap-switch/4.0.0-alpha.1/js/bootstrap-switch.min.js"></script>
-    <script src="/assets/global/vendor/dropify/dropify.min.js"></script>
-    <script src="/assets/global/js/Plugin/dropify.js"></script>
+    <script src="/assets/global/vendor/matchheight/jquery.matchHeight-min.js" type="text/javascript"></script>
+    <script src="/assets/global/js/Plugin/responsive-tabs.js" type="text/javascript"></script>
+    <script src="/assets/global/js/Plugin/tabs.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-select/bootstrap-select.min.js" type="text/javascript"></script>
+    <script src="/assets/global/js/Plugin/bootstrap-select.js" type="text/javascript"></script>
+    <script src="//cdn.bootcss.com/bootstrap-switch/4.0.0-alpha.1/js/bootstrap-switch.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/dropify/dropify.min.js" type="text/javascript"></script>
+    <script src="/assets/global/js/Plugin/dropify.js" type="text/javascript"></script>
 
     <script type="text/javascript">
         $('input[type="checkbox"]').bootstrapSwitch();
@@ -2806,4 +2806,4 @@
             });
         }
     </script>
-@endsection
+@endsection

+ 33 - 32
resources/views/admin/trafficLog.blade.php

@@ -1,7 +1,7 @@
 @extends('admin.layouts')
 
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container-fluid">
@@ -10,30 +10,30 @@
                 <h2 class="panel-title">流量日志</h2>
             </div>
             <div class="panel-body">
-                <div class="form-inline pb-20">
-                    <div class="form-group">
-                        <input type="text" class="form-control" name="user_id" value="{{Request::get('user_id')}}" id="user_id" placeholder="用户ID">
+                <div class="form-row">
+                    <div class="form-group col-lg-2 col-sm-4">
+                        <input type="number" class="form-control" name="user_id" id="user_id" value="{{Request::get('user_id')}}" placeholder="用户ID"/>
                     </div>
-                    <div class="form-group">
-                        <input type="text" class="form-control" name="username" value="{{Request::get('username')}}" id="username" placeholder="用户名">
+                    <div class="form-group col-lg-3 col-sm-8">
+                        <input type="text" class="form-control" name="username" id="username" value="{{Request::get('username')}}" placeholder="用户名"/>
                     </div>
-                    <div class="form-group">
-                        <input type="text" class="form-control" name="port" value="{{Request::get('port')}}" id="port" placeholder="端口">
+                    <div class="form-group col-lg-2 col-sm-3">
+                        <input type="number" class="form-control" name="port" id="port" value="{{Request::get('port')}}" placeholder="端口"/>
                     </div>
-                    <div class="form-group">
-                        <select class="form-control" name="nodeId" id="nodeId">
+                    <div class="form-group col-lg-3 col-sm-5">
+                        <select class="form-control" name="nodeId" id="nodeId" onChange="Search()">
                             <option value="" @if(Request::get('nodeId') == '') selected @endif>选择节点</option>
                             @foreach($nodeList as $node)
                                 <option value="{{$node->id}}" @if(Request::get('nodeId') == $node->id) selected @endif>{{$node->name}}</option>
                             @endforeach
                         </select>
                     </div>
-                    <div class="btn-group">
-                        <button class="btn btn-primary" onclick="doSearch()">搜索</button>
-                        <button class="btn btn-danger" onclick="doReset()">重置</button>
+                    <div class="form-group col-lg-2 col-sm-4 btn-group">
+                        <button class="btn btn-primary" onclick="Search()">搜索</button>
+                        <button href="/admin/trafficLog" class="btn btn-danger">重置</button>
                     </div>
                 </div>
-                <table class="text-center" data-toggle="table" data-mobile-responsive="true">
+                <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
                     <thead class="thead-default">
                     <tr>
                         <th> #</th>
@@ -76,12 +76,12 @@
             </div>
             <div class="panel-footer">
                 <div class="row">
-                    <div class="col-sm-4">
-                        共 {{$list->total()}} 条记录,合计 {{$totalTraffic}}
+                    <div class="col-sm-6">
+                        共 <code>{{$list->total()}} 条记录</code>,合计 <code>{{$totalTraffic}}</code>
                     </div>
-                    <div class="col-sm-8">
+                    <div class="col-sm-6">
                         <nav class="Page navigation float-right">
-                            {{ $list->links() }}
+                            {{$list->links()}}
                         </nav>
                     </div>
                 </div>
@@ -91,22 +91,23 @@
 
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
-    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
+    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
     <script type="text/javascript">
-        // 搜索
-        function doSearch() {
-            var port = $("#port").val();
-            var user_id = $("#user_id").val();
-            var username = $("#username").val();
-            var nodeId = $("#nodeId option:selected").val();
+        //回车检测
+        $(document).on("keypress", "input", function (e) {
+            if (e.which === 13) {
+                Search()
+            }
+        });
 
+        // 搜索
+        function Search() {
+            const port = $("#port").val();
+            const user_id = $("#user_id").val();
+            const username = $("#username").val();
+            const nodeId = $("#nodeId option:selected").val();
             window.location.href = '/admin/trafficLog' + '?port=' + port + '&user_id=' + user_id + '&username=' + username + '&nodeId=' + nodeId;
         }
-
-        // 重置
-        function doReset() {
-            window.location.href = '/admin/trafficLog';
-        }
     </script>
-@endsection
+@endsection

+ 20 - 19
resources/views/admin/userBalanceLogList.blade.php

@@ -1,6 +1,6 @@
 @extends('admin.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container-fluid">
@@ -9,16 +9,16 @@
                 <h3 class="panel-title">余额变动记录</h3>
             </div>
             <div class="panel-body">
-                <div class="form-inline pb-20">
-                    <div class="form-group">
-                        <input type="text" class="form-control" name="username" value="{{Request::get('username')}}" id="username" placeholder="用户名">
+                <div class="form-row">
+                    <div class="form-group col-lg-3 col-sm-6">
+                        <input type="text" class="form-control" name="username" id="username" value="{{Request::get('username')}}" placeholder="用户名"/>
                     </div>
-                    <div class="btn-group">
-                        <button class="btn btn-primary" onclick="doSearch()">搜索</button>
-                        <button class="btn btn-danger" onclick="doReset()">重置</button>
+                    <div class="form-group col-lg-2 col-sm-6 btn-group">
+                        <button class="btn btn-primary" onclick="Search()">搜索</button>
+                        <a href="/admin/userBalanceLogList" class="btn btn-danger">重置</a>
                     </div>
                 </div>
-                <table class="text-center" data-toggle="table" data-mobile-responsive="true">
+                <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
                     <thead class="thead-default">
                     <tr>
                         <th> #</th>
@@ -62,11 +62,11 @@
             <div class="panel-footer">
                 <div class="row">
                     <div class="col-sm-4">
-                        共 {{$list->total()}} 条记录
+                        共 <code>{{$list->total()}}</code> 条记录
                     </div>
                     <div class="col-sm-8">
                         <nav class="Page navigation float-right">
-                            {{ $list->links() }}
+                            {{$list->links()}}
                         </nav>
                     </div>
                 </div>
@@ -75,19 +75,20 @@
     </div>
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
-    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
+    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
     <script type="text/javascript">
+        //回车检测
+        $(document).on("keypress", "input", function (e) {
+            if (e.which === 13) {
+                Search()
+            }
+        });
+
         // 搜索
-        function do_search() {
+        function Search() {
             const username = $("#username").val();
-
             window.location.href = '/admin/userBalanceLogList?username=' + username;
         }
-
-        // 重置
-        function do_reset() {
-            window.location.href = '/admin/userBalanceLogList';
-        }
     </script>
 @endsection

+ 22 - 21
resources/views/admin/userBanLogList.blade.php

@@ -1,6 +1,6 @@
 @extends('admin.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container-fluid">
@@ -9,16 +9,16 @@
                 <h3 class="panel-title">用户封禁记录</h3>
             </div>
             <div class="panel-body">
-                <div class="form-inline pb-20">
-                    <div class="form-group">
-                        <input type="text" class="form-control" name="username" value="{{Request::get('username')}}" id="username" placeholder="用户名">
+                <div class="form-row">
+                    <div class="form-group col-lg-3 col-sm-6">
+                        <input type="text" class="form-control" name="username" id="username" value="{{Request::get('username')}}" placeholder="用户名"/>
                     </div>
-                    <div class="btn-group">
-                        <button class="btn btn-primary" onclick="doSearch()">搜索</button>
-                        <button class="btn btn-danger" onclick="doReset()">重置</button>
+                    <div class="form-group col-lg-2 col-sm-6 btn-group">
+                        <button class="btn btn-primary" onclick="Search()">搜索</button>
+                        <a href="/admin/userBanLogList" class="btn btn-danger">重置</a>
                     </div>
                 </div>
-                <table class="text-center" data-toggle="table" data-mobile-responsive="true">
+                <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
                     <thead class="thead-default">
                     <tr>
                         <th> #</th>
@@ -38,7 +38,7 @@
                         @foreach($list as $vo)
                             <tr>
                                 <td>
-                                    <a href="{{url('admin/userList?username=' . $vo->id)}}" target="_blank" rel="noopener"> {{$vo->id}}</a>
+                                    <a href="/admin/userList?username={{$vo->id}}" target="_blank" rel="noopener"> {{$vo->id}}</a>
                                 </td>
                                 <td> {{empty($vo->user) ? '【账号已删除】' : $vo->user->username}} </td>
                                 <td> {{$vo->minutes}}分钟</td>
@@ -54,11 +54,11 @@
             <div class="panel-footer">
                 <div class="row">
                     <div class="col-sm-4">
-                        共 {{$list->total()}} 条记录
+                        共 <code>{{$list->total()}}</code> 条记录
                     </div>
                     <div class="col-sm-8">
                         <nav class="Page navigation float-right">
-                            {{ $list->links() }}
+                            {{$list->links()}}
                         </nav>
                     </div>
                 </div>
@@ -67,19 +67,20 @@
     </div>
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
-    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
+    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
     <script type="text/javascript">
-        // 搜索
-        function doSearch() {
-            var username = $("#username").val();
+        //回车检测
+        $(document).on("keypress", "input", function (e) {
+            if (e.which === 13) {
+                Search()
+            }
+        });
 
+        // 搜索
+        function Search() {
+            const username = $("#username").val();
             window.location.href = '/admin/userBanLogList?username=' + username;
         }
-
-        // 重置
-        function doReset() {
-            window.location.href = '/admin/userBanLogList';
-        }
     </script>
 @endsection

+ 75 - 95
resources/views/admin/userList.blade.php

@@ -1,6 +1,6 @@
 @extends('admin.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container-fluid">
@@ -14,20 +14,30 @@
                     <button class="btn btn-outline-default" onclick="batchAddUsers()">
                         <i class="icon wb-plus" aria-hidden="true"></i>批量生成
                     </button>
-                    <button class="btn btn-outline-default" onclick="addUser()">
+                    <a href="/admin/addUser" class="btn btn-outline-default">
                         <i class="icon wb-user-add" aria-hidden="true"></i>添加用户
-                    </button>
+                    </a>
                 </div>
             </div>
             <div class="panel-body">
-                <div class="form-inline mb-20">
-                    <div class="form-group">
-                        <input type="text" class="form-control w-60" name="id" value="{{Request::get('id')}}" id="id" placeholder="ID">
-                        <input type="text" class="form-control" name="username" value="{{Request::get('username')}}" id="username" placeholder="用户名">
-                        <input type="text" class="form-control w-100" name="wechat" value="{{Request::get('wechat')}}" id="wechat" placeholder="微信">
-                        <input type="text" class="form-control w-100" name="qq" value="{{Request::get('qq')}}" id="qq" placeholder="QQ">
-                        <input type="text" class="form-control w-60" name="port" value="{{Request::get('port')}}" id="port" placeholder="端口">
-                        <select name="pay_way" id="pay_way" class="form-control">
+                <div class="form-row">
+                    <div class="form-group col-xxl-1 col-lg-1 col-md-1 col-sm-4">
+                        <input type="number" class="form-control" id="id" name="id" value="{{Request::get('id')}}" placeholder="ID"/>
+                    </div>
+                    <div class="form-group col-xxl-2 col-lg-3 col-md-3 col-sm-4">
+                        <input type="text" class="form-control" id="username" name="username" value="{{Request::get('username')}}" placeholder="用户名"/>
+                    </div>
+                    <div class="form-group col-xxl-2 col-lg-3 col-md-3 col-sm-4">
+                        <input type="text" class="form-control" id="wechat" name="wechat" value="{{Request::get('wechat')}}" placeholder="微信"/>
+                    </div>
+                    <div class="form-group col-xxl-2 col-lg-3 col-md-3 col-sm-4">
+                        <input type="number" class="form-control" id="qq" name="qq" value="{{Request::get('qq')}}" placeholder="QQ"/>
+                    </div>
+                    <div class="form-group col-xxl-1 col-lg-2 col-md-2 col-sm-4">
+                        <input type="number" class="form-control" id="port" name="port" value="{{Request::get('port')}}" placeholder="端口"/>
+                    </div>
+                    <div class="form-group col-xxl-1 col-lg-3 col-md-3 col-sm-4">
+                        <select class="form-control" id="pay_way" name="pay_way" onChange="Search()">
                             <option value="" @if(Request::get('pay_way') == '') selected hidden @endif>付费方式</option>
                             <option value="0" @if(Request::get('pay_way') == '0') selected hidden @endif>免费</option>
                             <option value="1" @if(Request::get('pay_way') == '1') selected hidden @endif>月付</option>
@@ -35,33 +45,35 @@
                             <option value="3" @if(Request::get('pay_way') == '3') selected hidden @endif>半年付</option>
                             <option value="4" @if(Request::get('pay_way') == '4') selected hidden @endif>年付</option>
                         </select>
-                        <select name="status" id="status" class="form-control">
+                    </div>
+                    <div class="form-group col-xxl-1 col-lg-3 col-md-3 col-4">
+                        <select class="form-control" id="status" name="status" onChange="Search()">
                             <option value="" @if(Request::get('status') == '') selected hidden @endif>账号状态</option>
                             <option value="-1" @if(Request::get('status') == '-1') selected hidden @endif>禁用</option>
                             <option value="0" @if(Request::get('status') == '0') selected hidden @endif>未激活</option>
                             <option value="1" @if(Request::get('status') == '1') selected hidden @endif>正常</option>
                         </select>
-                        <select name="enable" id="enable" class="form-control">
+                    </div>
+                    <div class="form-group col-xxl-1 col-lg-3 col-md-3 col-4">
+                        <select class="form-control" id="enable" name="enable" onChange="Search()">
                             <option value="" @if(Request::get('enable') == '') selected hidden @endif>代理状态</option>
                             <option value="1" @if(Request::get('enable') == '1') selected hidden @endif>启用</option>
                             <option value="0" @if(Request::get('enable') == '0') selected hidden @endif>禁用</option>
                         </select>
                     </div>
-                    <div class="btn-group">
-                        <button class="btn btn-primary" onclick="doSearch()">搜索</button>
-                        <button class="btn btn-danger" onclick="doReset()">重置</button>
+                    <div class="form-group col-xxl-1 col-lg-3 col-md-3 col-4 btn-group">
+                        <button class="btn btn-primary" onclick="Search()">搜索</button>
+                        <a href="/admin/userList" class="btn btn-danger">重置</a>
                     </div>
                 </div>
-                <table class="text-center" data-toggle="table" data-mobile-responsive="true">
+                <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
                     <thead class="thead-default">
                     <tr>
                         <th> #</th>
                         <th> 用户名</th>
+                        <th> 余额</th>
                         <th> 端口</th>
                         <th> 订阅码</th>
-                        <th> 加密方式</th>
-                        <!--<th> 协议 </th>
-                        <th> 混淆 </th>-->
                         <th> 流量使用</th>
                         <th> 最后使用</th>
                         <th> 有效期</th>
@@ -73,29 +85,27 @@
                     <tbody class="table-striped">
                     @if ($userList->isEmpty())
                         <tr>
-                            <td colspan="12">暂无数据</td>
+                            <td colspan="11">暂无数据</td>
                         </tr>
                     @else
                         @foreach ($userList as $user)
-                            <tr class="{{$user->trafficWarning ? 'red-700' : ''}}">
+                            <tr class="{{$user->trafficWarning ? ' table-danger' : ''}}">
                                 <td> {{$user->id}} </td>
                                 <td> {{$user->username}} </td>
+                                <td> {{$user->balance}} </td>
                                 <td>
                                     @if ($user->port)
                                         {{$user->port}}
                                     @else
                                         <span class="badge badge-lg badge-danger"> 未分配 </span>
-                                    @endif
-                                </td>
+                                    @endif</td>
                                 <td>
                                     <a href="javascript:" class="copySubscribeLink" data-clipboard-action="copy" data-clipboard-text="{{$user->link}}">{{$user->subscribe->code}}</a>
                                 </td>
-                                <td> {{$user->method}} </td>
-                            <!--<td> {{$user->protocol}} </td>
-                                <td> {{$user->obfs}} </td>-->
-                                <td class="center"> {{$user->used_flow}} / {{$user->transfer_enable}} </td>
-                                <td class="center"> {{empty($user->t) ? '未使用' : date('Y-m-d H:i', $user->t)}} </td>
-                                <td class="center">
+                                <td> {{$user->used_flow}} / {{$user->transfer_enable}} </td>
+                                <td> {{$user->t? date('Y-m-d H:i', $user->t): '未使用'}} </td>
+
+                                <td>
                                     @if ($user->expireWarning == '-1')
                                         <span class="badge badge-lg badge-danger"> {{$user->expire_time}} </span>
                                     @elseif ($user->expireWarning == '0')
@@ -108,31 +118,25 @@
                                 </td>
                                 <td>
                                     @if ($user->status > 0)
-                                        <span class="badge badge-lg badge-primary"><i class="wb-check"></i></span>
+                                        <span class="badge badge-lg badge-primary"><i class="wb-check" aria-hidden="true"></i></span>
                                     @elseif ($user->status < 0)
-                                        <span class="badge badge-lg badge-danger"><i class="wb-close"></i></span>
+                                        <span class="badge badge-lg badge-danger"><i class="wb-close" aria-hidden="true"></i></span>
                                     @else
-                                        <span class="badge badge-lg badge-default"><i class="wb-minus"></i></span>
+                                        <span class="badge badge-lg badge-default"><i class="wb-minus" aria-hidden="true"></i></span>
                                     @endif
                                 </td>
                                 <td>
-                                    @if ($user->enable)
-                                        <span class="badge badge-lg badge-info"><i class="wb-check"></i></span>
-                                    @else
-                                        <span class="badge badge-lg badge-danger"><i class="wb-close"></i></span>
-                                    @endif
+                                    <span class="badge badge-lg badge-{{$user->enable?'info':'danger'}}"><i class="wb-{{$user->enable?'check':'close'}}" aria-hidden="true"></i></span>
                                 </td>
                                 <td>
                                     <div class="btn-group">
-                                        <a href="javascript:editUser('{{$user->id}}');" class="btn btn-primary"><i class="icon wb-edit"></i></a>
-                                        <a href="javascript:delUser('{{$user->id}}');" class="btn btn-danger"><i class="icon wb-trash"></i></a>
-                                        <a href="javascript:doExport('{{$user->id}}');" class="btn btn-primary"><i class="icon wb-code"></i></a>
-                                        <a href="javascript:doMonitor('{{$user->id}}');" class="btn btn-primary"><i class="icon wb-stats-bars"></i></a>
-                                        <a href="javascript:ipMonitor('{{$user->id}}');" class="btn btn-primary"><i class="icon wb-check"></i></a>
-                                        <a href="javascript:resetTraffic('{{$user->id}}');" class="btn btn-primary"><i class="icon wb-loop"></i>
-                                        </a>
-                                        <a href="javascript:switchToUser('{{$user->id}}');" class="btn btn-primary"><i class="icon wb-user"></i>
-                                        </a>
+                                        <a href="/admin/editUser/{{$user->id}}{{Request::getQueryString()? '?'.Request::getQueryString() : ''}}" class="btn btn-primary"><i class="icon wb-edit" aria-hidden="true"></i></a>
+                                        <a href="javascript:delUser('{{$user->id}}');" class="btn btn-danger"><i class="icon wb-trash" aria-hidden="true"></i></a>
+                                        <a href="/admin/export/{{$user->id}}" class="btn btn-primary"><i class="icon wb-code" aria-hidden="true"></i></a>
+                                        <a href="/admin/userMonitor/{{$user->id}}" class="btn btn-primary"><i class="icon wb-stats-bars" aria-hidden="true"></i></a>
+                                        <a href="/admin/onlineIPMonitor?id={{$user->id}}" class="btn btn-primary"><i class="icon wb-cloud" aria-hidden="true"></i></a>
+                                        <a href="javascript:resetTraffic('{{$user->id}}');" class="btn btn-primary"><i class="icon wb-reload" aria-hidden="true"></i></a>
+                                        <a href="javascript:switchToUser('{{$user->id}}');" class="btn btn-primary"><i class="icon wb-user" aria-hidden="true"></i></a>
                                     </div>
                                 </td>
                             </tr>
@@ -144,11 +148,11 @@
             <div class="panel-footer">
                 <div class="row">
                     <div class="col-sm-4">
-                        共 {{$userList->total()}} 个账号
+                        共 <code>{{$userList->total()}}</code> 个账号
                     </div>
                     <div class="col-sm-8">
                         <nav class="Page navigation float-right">
-                            {{ $userList->links() }}
+                            {{$userList->links()}}
                         </nav>
                     </div>
                 </div>
@@ -157,8 +161,8 @@
     </div>
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
-    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
+    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
     <script src="/assets/custom/Plugin/clipboardjs/clipboard.min.js" type="text/javascript"></script>
     <script type="text/javascript">
         // 导出原版json配置
@@ -195,14 +199,24 @@
             });
         }
 
-        // 添加账号
-        function addUser() {
-            window.location.href = '/admin/addUser';
-        }
+        //回车检测
+        $(document).on("keypress", "input", function (e) {
+            if (e.which === 13) {
+                Search()
+            }
+        });
 
-        // 编辑账号
-        function editUser(id) {
-            window.location.href = '/admin/editUser?id=' + id;
+        // 搜索
+        function Search() {
+            const id = $("#id").val();
+            const username = $("#username").val();
+            const wechat = $("#wechat").val();
+            const qq = $("#qq").val();
+            const port = $("#port").val();
+            const pay_way = $("#pay_way option:selected").val();
+            const status = $("#status option:selected").val();
+            const enable = $("#enable option:selected").val();
+            window.location.href = '/admin/userList' + '?id=' + id + '&username=' + username + '&wechat=' + wechat + '&qq=' + qq + '&port=' + port + '&pay_way=' + pay_way + '&status=' + status + '&enable=' + enable;
         }
 
         // 删除账号
@@ -228,40 +242,6 @@
             });
         }
 
-        // 重置
-        function doReset() {
-            window.location.href = '/admin/userList';
-        }
-
-        // 导出配置
-        function doExport(id) {
-            window.location.href = '/admin/export?id=' + id;
-        }
-
-        // 流量监控
-        function doMonitor(id) {
-            window.location.href = '/admin/userMonitor?id=' + id;
-        }
-
-        //在线巡查
-        function ipMonitor(id) {
-            window.location.href = '/admin/onlineIPMonitor?id=' + id;
-        }
-
-        // 搜索
-        function doSearch() {
-            var id = $("#id").val();
-            var username = $("#username").val();
-            var wechat = $("#wechat").val();
-            var qq = $("#qq").val();
-            var port = $("#port").val();
-            var pay_way = $("#pay_way option:checked").val();
-            var status = $("#status option:checked").val();
-            var enable = $("#enable option:checked").val();
-
-            window.location.href = '/admin/userList' + '?id=' + id + '&username=' + username + '&wechat=' + wechat + '&qq=' + qq + '&port=' + port + '&pay_way=' + pay_way + '&status=' + status + '&enable=' + enable;
-        }
-
         // 重置流量
         function resetTraffic(id) {
             swal.fire({
@@ -286,11 +266,11 @@
         }
 
         // 切换用户身份
-        function switchToUser(user_id) {
+        function switchToUser(id) {
             $.ajax({
                 'url': "/admin/switchToUser",
                 'data': {
-                    'user_id': user_id,
+                    'user_id': id,
                     '_token': '{{csrf_token()}}'
                 },
                 'dataType': "json",
@@ -311,7 +291,7 @@
             swal.fire({
                 title: '复制成功',
                 type: 'success',
-                timer: 1300,
+                timer: 1000,
                 showConfirmButton: false
             });
         });

+ 1 - 1
resources/views/admin/userMonitor.blade.php

@@ -24,7 +24,7 @@
     </div>
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/chart-js/Chart.min.js"></script>
+    <script src="/assets/global/vendor/chart-js/Chart.min.js" type="text/javascript"></script>
 
     <script type="text/javascript">
         const dailyChart = new Chart(document.getElementById('dailyChart').getContext('2d'), {

+ 133 - 126
resources/views/admin/userOnlineIPList.blade.php

@@ -1,134 +1,141 @@
 @extends('admin.layouts')
 @section('css')
-	<link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
-	<div class="page-content container-fluid">
-		<div class="panel">
-			<div class="panel-heading">
-				<h3 class="panel-title">用户在线IP列表
-					<small>最近10分钟</small>
-				</h3>
-			</div>
-			<div class="panel-body">
-				<div class="form-inline pb-20">
-					<div class="form-group">
-						<input type="text" class="form-control" name="username" value="{{Request::get('username')}}" id="username" placeholder="用户名">
-					</div>
-					<div class="form-group">
-						<input type="text" class="form-control w-80" name="wechat" value="{{Request::get('wechat')}}" id="wechat" placeholder="微信">
-					</div>
-					<div class="form-group">
-						<input type="text" class="form-control w-80" name="qq" value="{{Request::get('qq')}}" id="qq" placeholder="QQ">
-					</div>
-					<div class="form-group">
-						<input type="text" class="form-control w-60" name="port" value="{{Request::get('port')}}" id="port" placeholder="端口">
-					</div>
-					<div class="btn-group">
-						<button class="btn btn-primary" onclick="doSearch()">搜索</button>
-						<button class="btn btn-danger" onclick="doReset()">重置</button>
-					</div>
-				</div>
-				<table class="text-center" data-toggle="table" data-mobile-responsive="true">
-					<thead class="thead-default">
-					<tr>
-						<th> #</th>
-						<th> 用户名</th>
-						<th> 端口</th>
-						<th> 状态</th>
-						<th> 代理</th>
-						<th> 连接IP</th>
-					</tr>
-					</thead>
-					<tbody>
-					@if ($userList->isEmpty())
-						<tr>
-							<td colspan="6">暂无数据</td>
-						</tr>
-					@else
-						@foreach ($userList as $user)
-							<tr>
-								<td> {{$user->id}} </td>
-								<td> {{$user->username}} </td>
-								<td> {{$user->port}} </td>
-								<td>
-									@if ($user->status > 0)
-										<span class="badge badge-lg badge-success">正常</span>
-									@elseif ($user->status < 0)
-										<span class="badge badge-lg badge-danger">禁用</span>
-									@else
-										<span class="badge badge-lg badge-default">未激活</span>
-									@endif
-								</td>
-								<td>
-									@if ($user->enable)
-										<span class="badge badge-lg badge-success">启用</span>
-									@else
-										<span class="badge badge-lg badge-danger">禁用</span>
-									@endif
-								</td>
-								<td>
-									@if(!$user->onlineIPList->isEmpty())
-										<table class="text-center" data-toggle="table" data-mobile-responsive="true">
-											<thead>
-											<tr>
-												<th> 时间</th>
-												<th> 节点</th>
-												<th> 类型</th>
-												<th> IP</th>
-											</tr>
-											</thead>
-											<tbody>
-											@foreach($user->onlineIPList as $vo)
-												<tr>
-													<td>{{$vo->created_at}}</td>
-													<td>{{$vo->node ? $vo->node->name : '【节点已删除】'}}</td>
-													<td>{{$vo->type}}</td>
-													<td><a href="https://www.ipip.net/ip/{{$vo->ip}}.html" target="_blank">{{$vo->ip}}</a></td>
-												</tr>
-											@endforeach
-											</tbody>
-										</table>
-									@endif
-								</td>
-							</tr>
-						@endforeach
-					@endif
-					</tbody>
-				</table>
-			</div>
-			<div class="panel-footer">
-				<div class="row">
-					<div class="col-sm-4">
-						共 {{$userList->total()}} 个账号
-					</div>
-					<div class="col-sm-8">
-						<nav class="Page navigation float-right">
-							{{ $userList->links() }}
-						</nav>
-					</div>
-				</div>
-			</div>
-		</div>
-	</div>
+    <div class="page-content container-fluid">
+        <div class="panel">
+            <div class="panel-heading">
+                <h3 class="panel-title">用户在线IP列表
+                    <small>最近10分钟</small>
+                </h3>
+            </div>
+            <div class="panel-body">
+                <div class="form-row">
+                    <div class="form-group col-lg-1 col-sm-4">
+                        <input type="number" class="form-control" id="id" name="id" value="{{Request::get('id')}}" placeholder="ID"/>
+                    </div>
+                    <div class="form-group col-lg-3 col-sm-8">
+                        <input type="text" class="form-control" name="username" id="username" value="{{Request::get('username')}}" placeholder="用户名"/>
+                    </div>
+                    <div class="form-group col-lg-2 col-sm-6">
+                        <input type="text" class="form-control" name="wechat" id="wechat" value="{{Request::get('wechat')}}" placeholder="微信"/>
+                    </div>
+                    <div class="form-group col-lg-2 col-sm-6">
+                        <input type="number" class="form-control" name="qq" id="qq" value="{{Request::get('qq')}}" placeholder="QQ"/>
+                    </div>
+                    <div class="form-group col-lg-1 col-sm-6">
+                        <input type="number" class="form-control" name="port" id="port" value="{{Request::get('port')}}" placeholder="端口"/>
+                    </div>
+                    <div class="form-group col-lg-2 col-sm-6 btn-group">
+                        <button class="btn btn-primary" onclick="Search()">搜索</button>
+                        <a href="/admin/userOnlineIPList" class="btn btn-danger">重置</a>
+                    </div>
+                </div>
+                <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
+                    <thead class="thead-default">
+                    <tr>
+                        <th> #</th>
+                        <th> 用户名</th>
+                        <th> 端口</th>
+                        <th> 状态</th>
+                        <th> 代理</th>
+                        <th> 连接IP</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    @if ($userList->isEmpty())
+                        <tr>
+                            <td colspan="6">暂无数据</td>
+                        </tr>
+                    @else
+                        @foreach ($userList as $user)
+                            <tr>
+                                <td> {{$user->id}} </td>
+                                <td> {{$user->username}} </td>
+                                <td> {{$user->port}} </td>
+                                <td>
+                                    @if ($user->status > 0)
+                                        <span class="badge badge-lg badge-success">正常</span>
+                                    @elseif ($user->status < 0)
+                                        <span class="badge badge-lg badge-danger">禁用</span>
+                                    @else
+                                        <span class="badge badge-lg badge-default">未激活</span>
+                                    @endif
+                                </td>
+                                <td>
+                                    @if ($user->enable)
+                                        <span class="badge badge-lg badge-success">启用</span>
+                                    @else
+                                        <span class="badge badge-lg badge-danger">禁用</span>
+                                    @endif
+                                </td>
+                                <td>
+                                    @if(!$user->onlineIPList->isEmpty())
+                                        <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
+                                            <thead>
+                                            <tr>
+                                                <th> 时间</th>
+                                                <th> 节点</th>
+                                                <th> 类型</th>
+                                                <th> IP</th>
+                                            </tr>
+                                            </thead>
+                                            <tbody>
+                                            @foreach($user->onlineIPList as $vo)
+                                                <tr>
+                                                    <td>{{$vo->created_at}}</td>
+                                                    <td>{{$vo->node ? $vo->node->name : '【节点已删除】'}}</td>
+                                                    <td>{{$vo->type}}</td>
+                                                    <td>
+                                                        <a href="https://www.ipip.net/ip/{{$vo->ip}}.html" target="_blank">{{$vo->ip}}</a>
+                                                    </td>
+                                                </tr>
+                                            @endforeach
+                                            </tbody>
+                                        </table>
+                                    @endif
+                                </td>
+                            </tr>
+                        @endforeach
+                    @endif
+                    </tbody>
+                </table>
+            </div>
+            <div class="panel-footer">
+                <div class="row">
+                    <div class="col-sm-4">
+                        共 <code>{{$userList->total()}}</code> 个账号
+                    </div>
+                    <div class="col-sm-8">
+                        <nav class="Page navigation float-right">
+                            {{$userList->links()}}
+                        </nav>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
 @endsection
 @section('script')
-	<script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
-	<script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
-	<script type="text/javascript">
-        // 搜索
-        function doSearch() {
-            var username = $("#username").val();
-            var wechat = $("#wechat").val();
-            var qq = $("#qq").val();
-            var port = $("#port").val();
-
-            window.location.href = '/admin/userOnlineIPList' + '?username=' + username + '&wechat=' + wechat + '&qq=' + qq + '&port=' + port;
-        }
+    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
+    <script type="text/javascript">
+        //回车检测
+        $(document).on("keypress", "input", function (e) {
+            if (e.which === 13) {
+                Search()
+            }
+        });
 
-        // 重置
-        function doReset() {
-            window.location.href = '/admin/userOnlineIPList';
+        // 搜索
+        function Search() {
+            const id = $("#id").val();
+            const username = $("#username").val();
+            const wechat = $("#wechat").val();
+            const qq = $("#qq").val();
+            const port = $("#port").val();
+            window.location.href = '/admin/userOnlineIPList' + '?id' + id + '&username=' + username + '&wechat=' + wechat + '&qq=' + qq + '&port=' + port;
         }
-	</script>
-@endsection
+    </script>
+@endsection

+ 114 - 113
resources/views/admin/userRebateList.blade.php

@@ -1,123 +1,124 @@
 @extends('admin.layouts')
 @section('css')
-	<link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
-	<div class="page-content container-fluid">
-		<div class="panel">
-			<div class="panel-heading">
-				<h2 class="panel-title">返利流水记录</h2>
-			</div>
-			<div class="panel-body">
-				<div class="form-inline pb-20">
-					<div class="form-group">
-						<input type="text" class="form-control" name="username" value="{{Request::get('username')}}" id="username" placeholder="消费者">
-					</div>
-					<div class="form-group">
-						<input type="text" class="form-control" name="ref_username" value="{{Request::get('ref_username')}}" id="ref_username" placeholder="邀请人">
-					</div>
-					<div class="form-group">
-						<select  name="status" id="status" class="form-control">
-							<option value="" @if(Request::get('status') == '') selected hidden @endif>状态</option>
-							<option value="0" @if(Request::get('status') == '0') selected hidden @endif>未提现</option>
-							<option value="1" @if(Request::get('status') == '1') selected hidden @endif>申请中</option>
-							<option value="2" @if(Request::get('status') == '2') selected hidden @endif>已提现</option>
-						</select>
-					</div>
-					<div class="btn-group">
-						<button class="btn btn-primary" onclick="doSearch()">搜索</button>
-						<button class="btn btn-danger" onclick="doReset()">重置</button>
-					</div>
-				</div>
-				<table class="text-center" data-toggle="table" data-mobile-responsive="true">
-					<thead class="thead-default">
-					<tr>
-						<th> #</th>
-						<th> 消费者</th>
-						<th> 邀请者</th>
-						<th> 订单号</th>
-						<th> 消费金额</th>
-						<th> 返利金额</th>
-						<th> 生成时间</th>
-						<th> 处理时间</th>
-						<th> 状态</th>
-					</tr>
-					</thead>
-					<tbody>
-					@if($list->isEmpty())
-						<tr>
-							<td colspan="9">暂无数据</td>
-						</tr>
-					@else
-						@foreach($list as $vo)
-							<tr>
-								<td> {{$vo->id}} </td>
-								<td>
-									@if(empty($vo->user))
-										【账号已删除】
-									@else
-										<a href="/admin/userRebateList?username={{$vo->user->username}}"> {{$vo->user->username}} </a>
-									@endif
-								</td>
-								<td>
-									@if(empty($vo->ref_user))
-										【账号已删除】
-									@else
-										<a href="/admin/userRebateList?ref_username={{$vo->ref_user->username}}"> {{$vo->ref_user->username}} </a>
-									@endif
-								</td>
-								<td> {{$vo->order_id}} </td>
-								<td> {{$vo->amount}} </td>
-								<td> {{$vo->ref_amount}} </td>
-								<td> {{$vo->created_at}} </td>
-								<td> {{$vo->updated_at}} </td>
-								<td>
-									@if ($vo->status == 1)
-										<span class="badge badge-danger">申请中</span>
-									@elseif($vo->status == 2)
-										<span class="badge badge-default">已提现</span>
-									@else
-										<span class="badge badge-info">未提现</span>
-									@endif
-								</td>
-							</tr>
-						@endforeach
-					@endif
-					</tbody>
-				</table>
-			</div>
-			<div class="panel-footer">
-				<div class="row">
-					<div class="col-sm-4">
-						共 {{$list->total()}} 个申请
-					</div>
-					<div class="col-sm-8">
-						<nav class="Page navigation float-right">
-							{{ $list->links() }}
-						</nav>
-					</div>
-				</div>
-			</div>
-		</div>
-	</div>
+    <div class="page-content container-fluid">
+        <div class="panel">
+            <div class="panel-heading">
+                <h2 class="panel-title">返利流水记录</h2>
+            </div>
+            <div class="panel-body">
+				<div class="form-row">
+					<div class="form-group col-lg-4 col-sm-6">
+                        <input type="text" class="form-control" name="username" id="username" value="{{Request::get('username')}}" placeholder="消费者"/>
+                    </div>
+					<div class="form-group col-lg-4 col-sm-6">
+                        <input type="text" class="form-control" name="ref_username" id="ref_username" value="{{Request::get('ref_username')}}" placeholder="邀请人"/>
+                    </div>
+					<div class="form-group col-lg-2 col-sm-6">
+                        <select name="status" id="status" class="form-control" onChange="Search()">
+                            <option value="" @if(Request::get('status') == '') selected hidden @endif>状态</option>
+                            <option value="0" @if(Request::get('status') == '0') selected hidden @endif>未提现</option>
+                            <option value="1" @if(Request::get('status') == '1') selected hidden @endif>申请中</option>
+                            <option value="2" @if(Request::get('status') == '2') selected hidden @endif>已提现</option>
+                        </select>
+                    </div>
+					<div class="form-group col-lg-2 col-sm-6 btn-group">
+                        <button class="btn btn-primary" onclick="Search()">搜索</button>
+                        <a href="/admin/userRebateList" class="btn btn-danger">重置</a>
+                    </div>
+                </div>
+                <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
+                    <thead class="thead-default">
+                    <tr>
+                        <th> #</th>
+                        <th> 消费者</th>
+                        <th> 邀请者</th>
+                        <th> 订单号</th>
+                        <th> 消费金额</th>
+                        <th> 返利金额</th>
+                        <th> 生成时间</th>
+                        <th> 处理时间</th>
+                        <th> 状态</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    @if($list->isEmpty())
+                        <tr>
+                            <td colspan="9">暂无数据</td>
+                        </tr>
+                    @else
+                        @foreach($list as $vo)
+                            <tr>
+                                <td> {{$vo->id}} </td>
+                                <td>
+                                    @if(empty($vo->user))
+                                        【账号已删除】
+                                    @else
+                                        <a href="/admin/userRebateList?username={{$vo->user->username}}"> {{$vo->user->username}} </a>
+                                    @endif
+                                </td>
+                                <td>
+                                    @if(empty($vo->ref_user))
+                                        【账号已删除】
+                                    @else
+                                        <a href="/admin/userRebateList?ref_username={{$vo->ref_user->username}}"> {{$vo->ref_user->username}} </a>
+                                    @endif
+                                </td>
+                                <td> {{$vo->order_id}} </td>
+                                <td> {{$vo->amount}} </td>
+                                <td> {{$vo->ref_amount}} </td>
+                                <td> {{$vo->created_at}} </td>
+                                <td> {{$vo->updated_at}} </td>
+                                <td>
+                                    @if ($vo->status == 1)
+                                        <span class="badge badge-danger">申请中</span>
+                                    @elseif($vo->status == 2)
+                                        <span class="badge badge-default">已提现</span>
+                                    @else
+                                        <span class="badge badge-info">未提现</span>
+                                    @endif
+                                </td>
+                            </tr>
+                        @endforeach
+                    @endif
+                    </tbody>
+                </table>
+            </div>
+            <div class="panel-footer">
+                <div class="row">
+                    <div class="col-sm-4">
+                        共 <code>{{$list->total()}}</code> 个申请
+                    </div>
+                    <div class="col-sm-8">
+                        <nav class="Page navigation float-right">
+                            {{$list->links()}}
+                        </nav>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
 
 @endsection
 @section('script')
-	<script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
-	<script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
-	<script type="text/javascript">
-        // 搜索
-        function doSearch() {
-            var username = $("#username").val();
-            var ref_username = $("#ref_username").val();
-            var status = $("#status option:selected").val();
+    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
+    <script type="text/javascript">
+        //回车检测
+        $(document).on("keypress", "input", function (e) {
+            if (e.which === 13) {
+                Search()
+            }
+        });
 
+        // 搜索
+        function Search() {
+            const username = $("#username").val();
+            const ref_username = $("#ref_username").val();
+            const status = $("#status option:selected").val();
             window.location.href = '/admin/userRebateList' + '?username=' + username + '&ref_username=' + ref_username + '&status=' + status;
         }
-
-        // 重置
-        function doReset() {
-            window.location.href = '/admin/userRebateList';
-        }
-	</script>
-@endsection
+    </script>
+@endsection

+ 91 - 84
resources/views/admin/userTrafficLogList.blade.php

@@ -1,93 +1,100 @@
 @extends('admin.layouts')
-
 @section('css')
-	<link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
-	<div class="page-content container-fluid">
-		<div class="panel">
-			<div class="panel-heading">
-				<h3 class="panel-title">流量变动记录</h3>
-			</div>
-			<div class="panel-body">
-				<div class="form-inline pb-20">
-					<div class="form-group">
-						<input type="text" class="form-control" name="username" value="{{Request::get('username')}}" id="username" placeholder="用户名">
-					</div>
-					<div class="btn-group">
-						<button class="btn btn-primary" onclick="doSearch()">搜索</button>
-						<button class="btn btn-danger" onclick="doReset()">重置</button>
-					</div>
-				</div>
-				<table class="text-center" data-toggle="table" data-mobile-responsive="true">
-					<thead class="thead-default">
-					<tr>
-						<th> #</th>
-						<th> 用户名</th>
-						<th> 订单ID</th>
-						<th> 变动前流量</th>
-						<th> 变动后流量</th>
-						<th> 描述</th>
-						<th> 发生时间</th>
-					</tr>
-					</thead>
-					<tbody>
-					@if($list->isEmpty())
-						<tr>
-							<td colspan="7">暂无数据</td>
-						</tr>
-					@else
-						@foreach($list as $vo)
-							<tr>
-								<td> {{$vo->id}} </td>
-								<td>
-									@if(empty($vo->user))
-										【账号已删除】
-									@else
-										<a href="/admin/userTrafficLogList?username={{$vo->user->username}}"> {{$vo->user->username}} </a>
-									@endif
-								</td>
-								<td> {{$vo->order_id ? ($vo->order ? $vo->order->goods->name : '【订单已删除】') : ''}} </td>
-								<td> {{$vo->before}} </td>
-								<td> {{$vo->after}} </td>
-								<td> {{$vo->desc}} </td>
-								<td> {{$vo->desc}} </td>
-								<td> {{$vo->created_at}} </td>
-							</tr>
-						@endforeach
-					@endif
-					</tbody>
-				</table>
-			</div>
-			<div class="panel-footer">
-				<div class="row">
-					<div class="col-sm-4">
-						共 {{$list->total()}} 条记录
-					</div>
-					<div class="col-sm-8">
-						<nav class="Page navigation float-right">
-							{{ $list->links() }}
-						</nav>
-					</div>
-				</div>
-			</div>
-		</div>
-	</div>
+    <div class="page-content container-fluid">
+        <div class="panel">
+            <div class="panel-heading">
+                <h3 class="panel-title">流量变动记录</h3>
+            </div>
+            <div class="panel-body">
+                <div class="form-row">
+                    <div class="form-group col-lg-4 col-sm-6">
+                        <input type="text" class="form-control" name="username" id="username" value="{{Request::get('username')}}" placeholder="用户名"/>
+                    </div>
+                    <div class="form-group col-lg-2 col-sm-6 btn-group">
+                        <button class="btn btn-primary" onclick="Search()">搜索</button>
+                        <a href="/admin/userTrafficLogList" class="btn btn-danger">重置</a>
+                    </div>
+                </div>
+                <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
+                    <thead class="thead-default">
+                    <tr>
+                        <th> #</th>
+                        <th> 用户名</th>
+                        <th> 订单</th>
+                        <th> 变动前流量</th>
+                        <th> 变动后流量</th>
+                        <th> 描述</th>
+                        <th> 发生时间</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    @if($list->isEmpty())
+                        <tr>
+                            <td colspan="7">暂无数据</td>
+                        </tr>
+                    @else
+                        @foreach($list as $vo)
+                            <tr>
+                                <td> {{$vo->id}} </td>
+                                <td>
+                                    @if(empty($vo->user))
+                                        【账号已删除】
+                                    @else
+                                        <a href="/admin/userTrafficLogList?username={{$vo->user->username}}"> {{$vo->user->username}} </a>
+                                    @endif
+                                </td>
+                                <td>
+                                    @if ($vo->order_id)
+                                        @if($vo->order)
+                                            <a href="/admin/orderList?oid={{$vo->order_id}}">{{$vo->order->goods->name}}</a>
+                                        @else
+                                            【订单已删除】
+                                        @endif
+                                    @endif
+                                </td>
+                                <td> {{$vo->before}} </td>
+                                <td> {{$vo->after}} </td>
+                                <td> {{$vo->desc}} </td>
+                                <td> {{$vo->created_at}} </td>
+                            </tr>
+                        @endforeach
+                    @endif
+                    </tbody>
+                </table>
+            </div>
+            <div class="panel-footer">
+                <div class="row">
+                    <div class="col-sm-4">
+                        共 <code>{{$list->total()}}</code> 条记录
+                    </div>
+                    <div class="col-sm-8">
+                        <nav class="Page navigation float-right">
+                            {{$list->links()}}
+                        </nav>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
 @endsection
 @section('script')
-	<script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
-	<script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
-	<script type="text/javascript">
-        // 搜索
-        function do_search() {
-            var username = $("#username").val();
+    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
+    <script type="text/javascript">
+        //回车检测
+        $(document).on("keypress", "input", function (e) {
+            if (e.which === 13) {
+                Search()
+            }
+        });
 
+        // 搜索
+        function Search() {
+            const username = $("#username").val();
             window.location.href = '/admin/userTrafficLogList' + '?username=' + username;
         }
-
-        // 重置
-        function do_reset() {
-            window.location.href = '/admin/userTrafficLogList';
-        }
-	</script>
-@endsection
+    </script>
+@endsection

+ 21 - 33
resources/views/auth/error.blade.php

@@ -16,39 +16,32 @@
     <meta name="author" content="兔姬菌">
     <title>{{trans('error.title')}}</title>
 
-    <link rel="shortcut icon" href="{{asset('favicon.ico')}}"/>
-
+    <link href="{{asset('favicon.ico')}}" rel="shortcut icon">
     <!-- 样式表/Stylesheets -->
-    <link rel="stylesheet" href="/assets/global/css/bootstrap.min.css">
-    <link rel="stylesheet" href="/assets/global/css/bootstrap-extend.min.css">
-    <link rel="stylesheet" href="/assets/css/site.min.css">
-
+    <link href="/assets/global/css/bootstrap.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/css/bootstrap-extend.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/css/site.min.css" type="text/css" rel="stylesheet">
     <!-- 插件/Plugins -->
-    <link rel="stylesheet" href="/assets/global/vendor/animsition/animsition.min.css">
-    <link rel="stylesheet" href="/assets/global/vendor/asscrollable/asScrollable.min.css">
-    <link rel="stylesheet" href="/assets/global/vendor/intro-js/introjs.min.css">
-    <link rel="stylesheet" href="/assets/global/vendor/slidepanel/slidePanel.min.css">
-    <link rel="stylesheet" href="/assets/global/vendor/flag-icon-css/flag-icon.min.css">
-    <link rel="stylesheet" href="/assets/examples/css/pages/errors.min.css">
-
-
+    <link href="/assets/global/vendor/animsition/animsition.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/vendor/asscrollable/asScrollable.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/vendor/intro-js/introjs.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/vendor/slidepanel/slidePanel.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/vendor/flag-icon-css/flag-icon.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/examples/css/pages/errors.min.css" type="text/css" rel="stylesheet">
     <!-- 字体/Fonts -->
-    <link rel="stylesheet" href="/assets/global/fonts/web-icons/web-icons.min.css">
-    <link rel="stylesheet" href="/assets/global/fonts/brand-icons/brand-icons.min.css">
-    <link rel='stylesheet' href='https://fonts.loli.net/css?family=Roboto:300,400,500,300italic'>
-
+    <link href="/assets/global/fonts/web-icons/web-icons.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/fonts/brand-icons/brand-icons.min.css" type="text/css" rel="stylesheet">
+    <link href="//fonts.loli.net/css?family=Roboto:300,400,500,300italic" type="text/css" rel="stylesheet">
     <!--[if lt IE 9]>
-    <script src="/assets/global/vendor/html5shiv/html5shiv.min.js"></script>
+    <script src="/assets/global/vendor/html5shiv/html5shiv.min.js" type="text/javascript"></script>
     <![endif]-->
-
     <!--[if lt IE 10]>
-    <script src="/assets/global/vendor/media-match/media.match.min.js"></script>
-    <script src="/assets/global/vendor/respond/respond.min.js"></script>
+    <script src="/assets/global/vendor/media-match/media.match.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/respond/respond.min.js" type="text/javascript"></script>
     <![endif]-->
-
     <!-- Scripts -->
-    <script src="/assets/global/vendor/breakpoints/breakpoints.min.js"></script>
-    <script>
+    <script src="/assets/global/vendor/breakpoints/breakpoints.min.js" type="text/javascript"></script>
+    <script type="text/javascript">
         Breakpoints();
     </script>
 </head>
@@ -79,12 +72,10 @@
 <script src="/assets/global/vendor/asscrollbar/jquery-asScrollbar.min.js" type="text/javascript"></script>
 <script src="/assets/global/vendor/asscrollable/jquery-asScrollable.min.js" type="text/javascript"></script>
 <script src="/assets/global/vendor/ashoverscroll/jquery-asHoverScroll.min.js" type="text/javascript"></script>
-
 <!-- 插件/Plugins -->
 <script src="/assets/global/vendor/intro-js/intro.min.js" type="text/javascript"></script>
 <script src="/assets/global/vendor/screenfull/screenfull.js" type="text/javascript"></script>
 <script src="/assets/global/vendor/slidepanel/jquery-slidePanel.min.js" type="text/javascript"></script>
-
 <!-- 脚本/Scripts -->
 <script src="/assets/global/js/Component.js" type="text/javascript"></script>
 <script src="/assets/global/js/Plugin.js" type="text/javascript"></script>
@@ -94,23 +85,20 @@
 <script src="/assets/js/Section/Sidebar.js" type="text/javascript"></script>
 <script src="/assets/js/Section/PageAside.js" type="text/javascript"></script>
 <script src="/assets/js/Plugin/menu.js" type="text/javascript"></script>
-
 <!-- 设置/Config -->
 <script src="/assets/global/js/config/colors.js" type="text/javascript"></script>
-<script>
+<script type="text/javascript">
     Config.set('assets', '/assets');
 </script>
-
 <!-- 页面/Page -->
 <script src="/assets/js/Site.js" type="text/javascript"></script>
 <script src="/assets/global/js/Plugin/asscrollable.js" type="text/javascript"></script>
 <script src="/assets/global/js/Plugin/slidepanel.js" type="text/javascript"></script>
-
-<script>
+<script type="text/javascript">
     (function (document, window, $) {
         'use strict';
 
-        var Site = window.Site;
+        const Site = window.Site;
         $(document).ready(function () {
             Site.run();
         });

+ 5 - 5
resources/views/auth/free.blade.php

@@ -1,7 +1,7 @@
 @extends('auth.layouts')
 @section('title',\App\Components\Helpers::systemConfig()['website_name'])
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">>
 @endsection
 @section('content')
     <h4 class="caption-subject font-dark bold">{{trans('home.free_invite_codes_title')}}</h4>
@@ -47,12 +47,12 @@
         <div class="mt-20">
             <button class="btn btn-danger btn-lg float-left" onclick="login()">{{trans('auth.back')}}</button>
             <nav class="Page navigation float-right">
-                {{ $inviteList->links() }}
+                {{$inviteList->links()}}
             </nav>
         </div>
     @endif
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
-    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
-@endsection
+    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
+@endsection

+ 33 - 37
resources/views/auth/layouts.blade.php

@@ -15,31 +15,31 @@
     <meta name="author" content="兔姬菌">
     <meta name="copyright" content="2017-2019©兔姬菌">
     <title>@yield('title')</title>
-    <link rel="shortcut icon" href="{{asset('favicon.ico')}}">
+    <link href="{{asset('favicon.ico')}}" rel="shortcut icon">
     <!-- Stylesheets -->
-    <link rel="stylesheet" href="/assets/global/css/bootstrap.min.css">
-    <link rel="stylesheet" href="/assets/global/css/bootstrap-extend.min.css">
-    <link rel="stylesheet" href="/assets/css/site.min.css">
+    <link href="/assets/global/css/bootstrap.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/css/bootstrap-extend.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/css/site.min.css" type="text/css" rel="stylesheet">
     <!-- Plugins -->
-    <link rel="stylesheet" href="/assets/global/vendor/animsition/animsition.min.css">
-    <link rel="stylesheet" href="/assets/global/vendor/asscrollable/asScrollable.min.css">
-    <link rel="stylesheet" href="/assets/global/vendor/intro-js/introjs.min.css">
-    <link rel="stylesheet" href="/assets/global/vendor/slidepanel/slidePanel.min.css">
-    <link rel="stylesheet" href="/assets/global/vendor/flag-icon-css/flag-icon.min.css">
-    <link rel="stylesheet" href="/assets/examples/css/pages/login-v3.css">
+    <link href="/assets/global/vendor/animsition/animsition.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/vendor/asscrollable/asScrollable.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/vendor/intro-js/introjs.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/vendor/slidepanel/slidePanel.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/vendor/flag-icon-css/flag-icon.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/examples/css/pages/login-v3.css" type="text/css" rel="stylesheet">
 @yield('css')
 <!-- Fonts -->
-    <link rel="stylesheet" href="/assets/global/fonts/web-icons/web-icons.min.css">
-    <link rel="stylesheet" href="/assets/global/fonts/brand-icons/brand-icons.min.css">
-    <link rel='stylesheet' href='https://fonts.loli.net/css?family=Roboto:300,400,500,300italic'>
+    <link href="/assets/global/fonts/web-icons/web-icons.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/fonts/brand-icons/brand-icons.min.css" type="text/css" rel="stylesheet">
+    <link href="//fonts.loli.net/css?family=Roboto:300,400,500,300italic" type="text/css" rel="stylesheet">
     <!--[if lt IE 9]>
-    <script src="/assets/global/vendor/html5shiv/html5shiv.min.js"></script> <![endif]-->
+    <script src="/assets/global/vendor/html5shiv/html5shiv.min.js" type="text/javascript"></script> <![endif]-->
     <!--[if lt IE 10]>
-    <script src="/assets/global/vendor/media-match/media.match.min.js"></script>
-    <script src="/assets/global/vendor/respond/respond.min.js"></script> <![endif]-->
+    <script src="/assets/global/vendor/media-match/media.match.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/respond/respond.min.js" type="text/javascript"></script> <![endif]-->
     <!-- Scripts -->
-    <script src="/assets/global/vendor/breakpoints/breakpoints.min.js"></script>
-    <script>
+    <script src="/assets/global/vendor/breakpoints/breakpoints.min.js" type="text/javascript"></script>
+    <script type="text/javascript">
         Breakpoints();
     </script>
 </head>
@@ -49,7 +49,7 @@
     <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
 <![endif]-->
 @if(Agent::isMobile() && Agent::isiOS() && strpos(Agent::getUserAgent(), 'MicroMessenger') !== false)
-    <style>
+    <style type="text/css">
         .cover-up {
             opacity: 0.1;
             filter: alpha(opacity=10);
@@ -69,11 +69,7 @@
             <div class="panel-heading">
                 <div class="panel-title">
                     <div class="brand">
-                        @if(\App\Components\Helpers::systemConfig()['website_logo'])
-                            <img class="brand-img" src="{{\App\Components\Helpers::systemConfig()['website_logo']}}" width="70px" alt="Logo">
-                        @else
-                            <img class="brand-img" src="/assets/images/logo64.png" alt="Logo">
-                        @endif
+                        <img src="{{\App\Components\Helpers::systemConfig()['website_home_logo']?\App\Components\Helpers::systemConfig()['website_home_logo']:'/assets/images/logo64.png'}}" class="brand-img" alt="logo"/>
                         <h3 class="brand-text">{{\App\Components\Helpers::systemConfig()['website_name']}}</h3>
                     </div>
                 </div>
@@ -121,19 +117,19 @@
 <script src="/assets/global/vendor/intro-js/intro.min.js" type="text/javascript"></script>
 <script src="/assets/global/vendor/screenfull/screenfull.js" type="text/javascript"></script>
 <script src="/assets/global/vendor/slidepanel/jquery-slidePanel.min.js" type="text/javascript"></script>
-<script src="/assets/global/vendor/jquery-placeholder/jquery.placeholder.js"></script>
+<script src="/assets/global/vendor/jquery-placeholder/jquery.placeholder.js" type="text/javascript"></script>
 <!-- 脚本/Scripts -->
-<script src="/assets/global/js/Component.js"></script>
-<script src="/assets/global/js/Plugin.js"></script>
-<script src="/assets/global/js/Base.js"></script>
-<script src="/assets/global/js/Config.js"></script>
-<script src="/assets/js/Section/Menubar.js"></script>
-<script src="/assets/js/Section/Sidebar.js"></script>
-<script src="/assets/js/Section/PageAside.js"></script>
-<script src="/assets/js/Plugin/menu.js"></script>
+<script src="/assets/global/js/Component.js" type="text/javascript"></script>
+<script src="/assets/global/js/Plugin.js" type="text/javascript"></script>
+<script src="/assets/global/js/Base.js" type="text/javascript"></script>
+<script src="/assets/global/js/Config.js" type="text/javascript"></script>
+<script src="/assets/js/Section/Menubar.js" type="text/javascript"></script>
+<script src="/assets/js/Section/Sidebar.js" type="text/javascript"></script>
+<script src="/assets/js/Section/PageAside.js" type="text/javascript"></script>
+<script src="/assets/js/Plugin/menu.js" type="text/javascript"></script>
 <!-- 设置/Config -->
-<script src="/assets/global/js/config/colors.js"></script>
-<script>
+<script src="/assets/global/js/config/colors.js" type="text/javascript"></script>
+<script type="text/javascript">
     Config.set('assets', '/assets');
 </script>
 <!-- Page -->
@@ -148,10 +144,10 @@
 {!! \App\Components\Helpers::systemConfig()['website_analytics'] !!}
 <!-- 客服 -->
 {!! \App\Components\Helpers::systemConfig()['website_customer_service'] !!}
-<script>
+<script type="text/javascript">
     (function (document, window, $) {
         'use strict';
-        var Site = window.Site;
+        const Site = window.Site;
         $(document).ready(function () {
             Site.run();
         });

+ 2 - 4
resources/views/auth/login.blade.php

@@ -1,7 +1,7 @@
 @extends('auth.layouts')
 @section('title', trans('auth.login'))
 @section('css')
-    <style>
+    <style type="text/css">
         @media screen and (max-height: 575px) {
             .g-recaptcha {
                 -webkit-transform: scale(0.81);
@@ -10,15 +10,13 @@
                 transform-origin: 0 0;
             }
         }
-
         .geetest_holder.geetest_wind {
             min-width: 245px !important;
         }
     </style>
-
 @endsection
 @section('content')
-    <form method="post" id="login-form" action="/login">
+    <form action="/login" method="post" id="login-form">
         @if($errors->any())
             <div class="alert alert-danger">
                 <span> {!! $errors->first() !!} </span>

+ 5 - 6
resources/views/auth/register.blade.php

@@ -1,8 +1,8 @@
 @extends('auth.layouts')
 @section('title', trans('auth.register'))
 @section('css')
-    <link rel="stylesheet" href="/assets/custom/Plugin/sweetalert2/sweetalert2.min.css">
-    <style>
+    <link href="/assets/custom/Plugin/sweetalert2/sweetalert2.min.css" type="text/css" rel="stylesheet">
+    <style type="text/css">
         @media screen and (max-height: 575px) {
             .g-recaptcha {
                 -webkit-transform: scale(0.81);
@@ -11,14 +11,13 @@
                 transform-origin: 0 0;
             }
         }
-
         .geetest_holder.geetest_wind {
             min-width: 245px !important;
         }
     </style>
 @endsection
 @section('content')
-    <form method="post" id="register-form" action="/register">
+    <form action="/register" method="post" id="register-form">
         @if(\App\Components\Helpers::systemConfig()['is_register'])
             @if($errors->any())
                 <div class="alert alert-danger">
@@ -120,9 +119,9 @@
     @endsection
 @section('script')
 	<!--[if lt IE 11]>
-    <script src="/assets/custom/Plugin/sweetalert2/polyfill.min.js"></script>
+    <script src="/assets/custom/Plugin/sweetalert2/polyfill.min.js" type="text/javascript"></script>
     <![endif]-->
-    <script src="/assets/custom/Plugin/sweetalert2/sweetalert2.min.js"></script>
+    <script src="/assets/custom/Plugin/sweetalert2/sweetalert2.min.js" type="text/javascript"></script>
     <script type="text/javascript">
         // 发送注册验证码
         function sendVerifyCode() {

+ 1 - 1
resources/views/auth/reset.blade.php

@@ -1,7 +1,7 @@
 @extends('auth.layouts')
 @section('title', trans('auth.restPassword'))
 @section('content')
-	<form class="register-form" action="{{url(Request::getRequestUri())}}" method="post">
+	<form action="{{url(Request::getRequestUri())}}" method="post" class="register-form">
 		@if(Session::get('successMsg'))
 			<div class="alert alert-success">
 				<span> {{Session::get('successMsg')}} </span>

+ 146 - 140
resources/views/coupon/addCoupon.blade.php

@@ -1,158 +1,164 @@
 @extends('admin.layouts')
 @section('css')
-	<link rel="stylesheet" href="/assets/global/vendor/dropify/dropify.min.css">
-	<link rel="stylesheet" href="/assets/global/vendor/bootstrap-datepicker/bootstrap-datepicker.min.css">
-	<style>
-		.hidden {
-			display: none
+    <link href="/assets/global/vendor/dropify/dropify.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/vendor/bootstrap-datepicker/bootstrap-datepicker.min.css" type="text/css" rel="stylesheet">
+	<style type="text/css">
+		.text-help {
+			padding-left: 1.0715rem;
 		}
 	</style>
 @endsection
 @section('content')
-	<div class="page-content container">
-		<div class="panel">
-			<div class="panel-heading">
-				<h2 class="panel-title">生成卡券</h2>
-			</div>
-			@if (Session::has('successMsg'))
-				<div class="alert alert-success alert-dismissible">
-					<button class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span><span class="sr-only">{{trans('home.close')}}</span></button>
-					{{Session::get('successMsg')}}
-				</div>
-			@endif
-			@if($errors->any())
-				<div class="alert alert-danger alert-dismissible">
-					<button class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span><span class="sr-only">{{trans('home.close')}}</span></button>
-					<strong>错误:</strong> {{$errors->first()}}
-				</div>
-			@endif
-			<div class="panel-body">
-				<form action="{{url('coupon/addCoupon')}}" method="post" enctype="multipart/form-data" class="form-horizontal" role="form">
-					<div class="form-group row">
-						<label class="col-form-label col-md-3" for="name">卡券名称</label>
-						<div class="col-md-9">
-							<input type="text" class="form-control" name="name" id="name" value="{{Request::old('name')}}" required/>
-							<input type="hidden" name="_token" value="{{csrf_token()}}"/>
-						</div>
-					</div>
-					<div class="form-group row">
-						<label class="col-form-label col-md-3" for="logo">LOGO</label>
-						<div class="col-md-9">
-							<input type="file" id="logo" name="logo" data-plugin="dropify" data-default-file="/assets/images/noimage.png"/>
-						</div>
-					</div>
-					<div class="form-group row">
-						<label class="col-form-label col-md-3" for="type">类型</label>
-						<ul class="col-md-9 list-unstyled list-inline">
-							<li class="list-inline-item">
-								<div class="radio-custom radio-primary">
-									<input type="radio" name="type" value="1" checked>
-									<label>抵用券</label>
-								</div>
-							</li>
-							<li class="list-inline-item">
-								<div class="radio-custom radio-primary">
-									<input type="radio" name="type" value="2">
-									<label>充值券</label>
-								</div>
-							</li>
-							<li class="list-inline-item">
-								<div class="radio-custom radio-primary">
-									<input type="radio" name="type" value="3">
-									<label>折扣券</label>
-								</div>
-							</li>
-						</ul>
-					</div>
-					<div class="coupon hidden">
-						<div class="form-group row">
-							<label class="col-form-label col-md-3" for="usage">用途</label>
-							<ul class="col-md-9 list-unstyled list-inline">
-								<li class="list-inline-item">
-									<div class="radio-custom radio-primary">
-										<input type="radio" name="usage" value="1" id="usage1" checked>
-										<label>仅限一次性使用</label>
-									</div>
-								</li>
-								<li class="list-inline-item">
-									<div class="radio-custom radio-primary">
-										<input type="radio" name="usage" value="2" id="usage2">
-										<label>可重复使用</label>
-									</div>
-								</li>
-							</ul>
-						</div>
-						<div class="form-group row">
-							<label class="col-form-label col-md-3" for="discount">折扣</label>
-							<div class="input-group col-md-3">
-								<input type="text" class="form-control" name="discount" value="{{Request::old('discount')}}" id="discount">
-								<span class="input-group-text">折</span>
-							</div>
-						</div>
-					</div>
-					<div class="form-group row">
-						<label class="col-form-label col-md-3" for="amount">金额</label>
-						<div class="input-group col-md-3">
-							<input type="text" class="form-control" name="amount" value="{{Request::old('amount')}}" id="amount" required/>
-							<span class="input-group-text">元</span>
-						</div>
-					</div>
-					<div class="form-group row">
-						<label class="col-form-label col-md-3" for="num">数量</label>
-						<div class="input-group col-md-3">
-							<input type="text" class="form-control" name="num" value="{{Request::old('num')}}" id="num" required/>
-							<span class="input-group-text">张</span>
-						</div>
-					</div>
-					<div class="form-group row">
-						<label class="col-form-label col-md-3">有效期</label>
-						<div class="input-group col-md-7 input-daterange" data-plugin="datepicker">
-							<div class="input-group-prepend">
-								<span class="input-group-text"><i class="icon wb-calendar" aria-hidden="true"></i></span>
-							</div>
-							<input type="text" class="form-control" value="{{Request::old('available_start')}}" name="available_start" id="available_start" required/>
-							<div class="input-group-prepend">
-								<span class="input-group-text">至</span>
-							</div>
-							<input type="text" class="form-control" value="{{Request::old('available_end')}}" name="available_end" id="available_end" required/>
-						</div>
-					</div>
-					<div class="form-actions">
-						<button type="submit" class="btn btn-success">提交</button>
-					</div>
-				</form>
-			</div>
-		</div>
-	</div>
+    <div class="page-content container">
+        <div class="panel">
+            <div class="panel-heading">
+                <h1 class="panel-title">生成卡券</h1>
+            </div>
+            @if (Session::has('successMsg'))
+                <div class="alert alert-success alert-dismissible">
+                    <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
+                    {{Session::get('successMsg')}}
+                </div>
+            @endif
+            @if($errors->any())
+                <div class="alert alert-danger alert-dismissible">
+                    <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
+                    <span> {{$errors->first()}} </span>
+                </div>
+            @endif
+            <div class="panel-body">
+                <form action="/coupon/addCoupon" method="post" enctype="multipart/form-data" class="form-horizontal" role="form">
+                    <div class="form-group row">
+                        <label class="col-md-2 col-form-label" for="name">卡券名称</label>
+                        <div class="col-md-4">
+                            <input type="text" class="form-control" name="name" id="name" value="{{Request::old('name')}}" required/>
+                            <input name="_token" value="{{csrf_token()}}" hidden/>
+                        </div>
+						<span class="text-help"> 会用于前端显示 </span>
+                    </div>
+                    <div class="form-group row">
+                        <label class="col-md-2 col-form-label" for="sn">使用券码</label>
+                        <div class="col-md-4">
+                            <input type="text" class="form-control" name="sn" id="sn" value="{{Request::old('sn')}}"/>
+                        </div>
+						<span class="text-help"> 提供给用户使用卡券的卡券,留空则默认为8位随机码 </span>
+                    </div>
+                    <div class="form-group row">
+                        <label class="col-md-2 col-form-label" for="logo">卡券图片</label>
+                        <div class="col-md-6">
+                            <input type="file" id="logo" name="logo" data-plugin="dropify" data-default-file="/assets/images/noimage.png"/>
+                        </div>
+                    </div>
+                    <div class="form-group row">
+                        <label class="col-md-2 col-form-label" for="type">类型</label>
+                        <div class="col-md-10 d-flex align-items-center">
+                            <div class="radio-custom radio-primary radio-inline">
+                                <input type="radio" name="type" value="1" checked/>
+                                <label for="type">抵用券</label>
+                            </div>
+                            <div class="radio-custom radio-primary radio-inline">
+                                <input type="radio" name="type" value="2"/>
+                                <label for="type">折扣券</label>
+                            </div>
+                            <div class="radio-custom radio-primary radio-inline">
+                                <input type="radio" name="type" value="3"/>
+                                <label for="type">充值券</label>
+                            </div>
+                        </div>
+						<span class="offset-md-2 text-help"> 抵用:抵扣商品金额,折扣:商品百分比打折,充值:充值用户账号余额 </span>
+                    </div>
+                    <div class="form-group row usage">
+                        <label class="col-md-2 col-form-label" for="usage">用途</label>
+                        <div class="col-md-10 d-flex align-items-center">
+                            <div class="radio-custom radio-primary radio-inline">
+                                <input type="radio" name="usage" id="usage1" value="1" checked/>
+                                <label for="usage">一次性</label>
+                            </div>
+                            <div class="radio-custom radio-primary radio-inline">
+                                <input type="radio" name="usage" id="usage2" value="2"/>
+                                <label for="usage">重复使用</label>
+                            </div>
+                        </div>
+						<span class="offset-md-2 text-help"> 一次性:任一用户使用后,卡券即可失效;重复使用:任何用户都可无限次使用直到有效期为止 </span>
+                    </div>
+                    <div class="form-group row discount" style="display: none;">
+                        <label class="col-md-2 col-form-label" for="discount">折扣</label>
+                        <div class="col-md-4 input-group">
+                            <input type="number" class="form-control" name="discount" id="discount" value="{{Request::old('discount')}}"/>
+                            <span class="input-group-text">折</span>
+                        </div>
+						<span class="text-help"> 范围为 1 ~ 9.9折,即 10% ~ 99% </span>
+                    </div>
+                    <div class="form-group row amount">
+                        <label class="col-md-2 col-form-label" for="amount">金额</label>
+                        <div class="col-md-4 input-group">
+                            <input type="number" class="form-control" name="amount" id="amount" value="{{Request::old('amount')}}" required/>
+                            <span class="input-group-text">元</span>
+                        </div>
+                    </div>
+                    <div class="form-group row">
+                        <label class="col-md-2 col-form-label" for="num">数量</label>
+                        <div class="col-md-4 input-group">
+                            <input type="number" class="form-control" name="num" id="num" value="{{Request::old('num')}}" required/>
+                            <span class="input-group-text">张</span>
+                        </div>
+                    </div>
+                    <div class="form-group row">
+                        <label class="col-md-2 col-form-label">有效期</label>
+                        <div class="col-md-7 input-group input-daterange" data-plugin="datepicker">
+                            <div class="input-group-prepend">
+                                <span class="input-group-text"><i class="icon wb-calendar" aria-hidden="true"></i></span>
+                            </div>
+                            <input type="text" class="form-control" name="available_start" id="available_start" value="{{Request::old('available_start')?Request::old('available_start'):date("Y-m-d")}}" required/>
+                            <div class="input-group-prepend">
+                                <span class="input-group-text">至</span>
+                            </div>
+                            <input type="text" class="form-control" name="available_end" id="available_end" value="{{Request::old('available_end')?Request::old('available_end'):date("Y-m-d",strtotime("+1 month"))}}" required/>
+                        </div>
+                    </div>
+                    <div class="form-actions col-12 text-right">
+                        <div class="btn-group">
+                            <a href="/coupon/couponList" class="btn btn-danger">返回</a>
+                            <button type="submit" class="btn btn-success">提交</button>
+                        </div>
+                    </div>
+                </form>
+            </div>
+        </div>
+    </div>
 @endsection
 @section('script')
-	<script src="/assets/global/vendor/bootstrap-datepicker/bootstrap-datepicker.min.js"></script>
-	<script src="/assets/global/vendor/dropify/dropify.min.js"></script>
-	<script src="/assets/global/js/Plugin/bootstrap-datepicker.min.js"></script>
-	<script src="/assets/global/js/Plugin/dropify.min.js"></script>
+    <script src="/assets/global/vendor/bootstrap-datepicker/bootstrap-datepicker.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/dropify/dropify.min.js" type="text/javascript"></script>
+    <script src="/assets/global/js/Plugin/bootstrap-datepicker.js" type="text/javascript"></script>
+    <script src="/assets/global/js/Plugin/dropify.js" type="text/javascript"></script>
 
-	<script type="text/javascript">
+    <script type="text/javascript">
         $('.input-daterange>input').datepicker({
             format: "yyyy-mm-dd"
         });
 
-        // 根据类型显示
         $("input[name='type']").change(function () {
-            var type = $(this).val();
-            if (type === '3') {
-                $(".coupon").removeClass("hidden");
-                $("#amount").parent("div").parent("div").addClass("hidden");
-                $("#amount").removeAttr('required');
-                $("#amount").val('');
-                $("#discount").prop('required', 'required');
+            const type = $(this).val();
+            if (type === '2') {
+                $("#discount").attr("required", true);
+                $("#amount").attr("required", false);
+                $(".discount").show();
+                $(".usage").show();
+                $(".amount").hide();
+            } else if (type === '3') {
+                $("#discount").attr("required", false);
+                $("#amount").attr("required", true);
+                $(".discount").hide();
+                $(".usage").hide();
+                $(".amount").show();
             } else {
-                $(".coupon").addClass("hidden");
-                $("#usage1").prop('checked', 'checked');
-                $("#usage2").prop('checked', false);
-                $("#amount").parent("div").parent("div").removeClass("hidden");
-                $("#discount").removeAttr('required');
-                $("#discount").val('');
+                $("#discount").attr("required", false);
+                $("#amount").attr("required", true);
+                $(".discount").hide();
+                $(".usage").show();
+                $(".amount").show();
             }
         });
-	</script>
+    </script>
 @endsection

+ 76 - 50
resources/views/coupon/couponList.blade.php

@@ -1,40 +1,50 @@
 @extends('admin.layouts')
 @section('css')
-    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" rel="stylesheet" type="text/css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container-fluid">
         <div class="panel">
             <div class="panel-heading">
-                <h3 class="panel-title">卡券列表</h3>
+                <h1 class="panel-title">卡券列表</h1>
                 <div class="panel-actions btn-group">
                     <button class="btn btn-info" onclick="exportCoupon()"><i class="icon wb-code"></i>批量导出</button>
-                    <button class="btn btn-primary" onclick="addCoupon()"><i class="icon wb-plus"></i>生成</button>
+                    <a href="/coupon/addCoupon" class="btn btn-primary"><i class="icon wb-plus"></i>生成</a>
                 </div>
             </div>
             <div class="panel-body">
-				<div class="form-inline mb-20">
-					<div class="form-group">
-						<select class="form-control" name="type" id="type" onChange="do_search()">
-							<option value="" @if(Request::get('type') == '') selected @endif>类型</option>
-							<option value="1" @if(Request::get('type') == '1') selected @endif>现金券</option>
-							<option value="2" @if(Request::get('type') == '2') selected @endif>折扣券</option>
-							<option value="3" @if(Request::get('type') == '3') selected @endif>充值券</option>
-						</select>
-						<input type="text" class="form-control" name="sn" value="{{Request::get('sn')}}" id="sn" placeholder="券码" autocomplete="off" onkeydown="if(event.keyCode==13){do_search();}">
-					</div>
-					<div class="btn-group">
-						<button class="btn btn-primary" onclick="doSearch()">搜索</button>
-						<button class="btn btn-danger" onclick="doReset()">重置</button>
-					</div>
-				</div>
-                <table class="text-center" data-toggle="table" data-mobile-responsive="true">
+                <div class="form-row">
+                    <div class="form-group col-lg-3 col-sm-4">
+                        <input type="text" class="form-control" name="sn" id="sn" value="{{Request::get('sn')}}" placeholder="券码" autocomplete="off"/>
+                    </div>
+                    <div class="form-group col-lg-3 col-sm-4">
+                        <select class="form-control" name="type" id="type" onChange="Search()">
+                            <option value="" @if(Request::get('type') == '') selected hidden @endif>类型</option>
+                            <option value="1" @if(Request::get('type') == '1') selected hidden @endif>现金券</option>
+                            <option value="2" @if(Request::get('type') == '2') selected hidden @endif>折扣券</option>
+                            <option value="3" @if(Request::get('type') == '3') selected hidden @endif>充值券</option>
+                        </select>
+                    </div>
+                    <div class="form-group col-lg-3 col-sm-4">
+                        <select class="form-control" name="status" id="status" onChange="Search()">
+                            <option value="" @if(Request::get('status') == '') selected hidden @endif>状态</option>
+                            <option value="0" @if(Request::get('status') == '0') selected hidden @endif>未使用/生效中</option>
+                            <option value="1" @if(Request::get('status') == '1') selected hidden @endif>已使用</option>
+                            <option value="2" @if(Request::get('status') == '2') selected hidden @endif>已失效</option>
+                        </select>
+                    </div>
+                    <div class="form-group col-lg-3 col-sm-4 btn-group">
+                        <button class="btn btn-primary" onclick="Search()">搜索</button>
+                        <a href="/coupon/couponList" class="btn btn-danger">重置</a>
+                    </div>
+                </div>
+                <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
                     <thead class="thead-default">
                     <tr>
                         <th> #</th>
                         <th> 名称</th>
                         <th> 券码</th>
-                        <th> LOGO</th>
+                        <th> 图片</th>
                         <th> 类型</th>
                         <th> 用途</th>
                         <th> 优惠</th>
@@ -54,7 +64,7 @@
                                 <td> {{$coupon->id}} </td>
                                 <td> {{$coupon->name}} </td>
                                 <td> {{$coupon->sn}} </td>
-                                <td> @if($coupon->logo)<<img src="{{$coupon->logo}}" alt="优惠码logo"/> @endif </td>
+                                <td> @if($coupon->logo) <img src="{{$coupon->logo}}" alt="优惠码logo"/> @endif </td>
                                 <td>
                                     @if($coupon->type == '1')
                                         抵用券
@@ -64,17 +74,17 @@
                                         充值券
                                     @endif
                                 </td>
-                                <td> {{$coupon->usage == '1' ? '一次性' : '重复'}} </td>
+                                <td> {{$coupon->usage == '1' ? '一次性' : '重复使用'}} </td>
                                 <td>
-                                    @if($coupon->type == '1' || $coupon->type == '3')
-                                        {{$coupon->amount}}元
-                                    @else
+                                    @if($coupon->type == 2)
                                         {{$coupon->discount}}折
+                                    @else
+                                        {{$coupon->amount}}元
                                     @endif
                                 </td>
                                 <td> {{date('Y-m-d', $coupon->available_start)}} ~ {{date('Y-m-d', $coupon->available_end)}} </td>
                                 <td>
-                                    @if ($coupon->usage == 1)
+                                    @if($coupon->usage == 1)
                                         @if($coupon->status == '1')
                                             <span class="badge badge-lg badge-default"> 已使用 </span>
                                         @elseif ($coupon->status == '2')
@@ -82,11 +92,17 @@
                                         @else
                                             <span class="badge badge-lg badge-success"> 未使用 </span>
                                         @endif
+                                    @elseif ($coupon->usage == 2)
+                                        @if ($coupon->status == '2')
+                                            <span class="badge badge-lg badge-default"> 已失效 </span>
+                                        @else
+                                            <span class="badge badge-lg badge-success"> 生效中 </span>
+                                        @endif
                                     @endif
                                 </td>
                                 <td>
                                     @if($coupon->status != '1')
-                                        <button class="btn btn-danger" onclick="delCoupon('{{$coupon->id}}')"><i class="icon wb-close"></i></button>
+                                        <button class="btn btn-danger" onclick="delCoupon({{$coupon->id}})"><i class="icon wb-close"></i></button>
                                     @endif
                                 </td>
                             </tr>
@@ -97,13 +113,13 @@
             </div>
             <div class="panel-footer">
                 <div class="row">
-                    <div class="col-md-4 col-sm-4">
-                        共 {{$couponList->total()}} 张优惠券
+                    <div class="col-sm-4">
+                        共 <code>{{$couponList->total()}}</code> 张优惠券
                     </div>
-                    <div class="col-md-8 col-sm-8">
-                        <div class="Page navigation float-right">
-                            {{ $couponList->links() }}
-                        </div>
+                    <div class="col-sm-8">
+                        <nav class="Page navigation float-right">
+                            {{$couponList->links()}}
+                        </nav>
                     </div>
                 </div>
             </div>
@@ -114,25 +130,35 @@
     <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
     <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
     <script type="text/javascript">
-        // 批量导出卡券
-        function exportCoupon() {
-			swal.fire({
-				title: '卡券导出',
-				text: '确定导出所有卡券吗?',
-				type: 'question',
-				showCancelButton: true,
-				cancelButtonText: '{{trans('home.ticket_close')}}',
-				confirmButtonText: '{{trans('home.ticket_confirm')}}',
-			}).then((result) => {
-				if (result.value) {
-					window.location.href = '/coupon/exportCoupon';
-				}
-			});
+        //回车检测
+        $(document).on("keypress", "input", function (e) {
+            if (e.which === 13) {
+                Search()
+            }
+        });
+
+        // 搜索
+        function Search() {
+            const sn = $("#sn").val();
+            const type = $("#type").val();
+            const status = $("#status").val();
+            window.location.href = '/coupon/couponList' + '?sn=' + sn + '&type=' + type + '&status=' + status;
         }
 
-        // 添加卡券
-        function addCoupon() {
-            window.location.href = '/coupon/addCoupon';
+        // 批量导出卡券
+        function exportCoupon() {
+            swal.fire({
+                title: '卡券导出',
+                text: '确定导出所有卡券吗?',
+                type: 'question',
+                showCancelButton: true,
+                cancelButtonText: '{{trans('home.ticket_close')}}',
+                confirmButtonText: '{{trans('home.ticket_confirm')}}',
+            }).then((result) => {
+                if (result.value) {
+                    window.location.href = '/coupon/exportCoupon';
+                }
+            });
         }
 
         // 删除卡券

+ 2 - 2
resources/views/emails/resetPassword.blade.php

@@ -443,8 +443,8 @@
     </style>
 
     <!--[if !mso]><!--><style type="text/css">
-        @import url(https://fonts.googleapis.com/css?family=Ubuntu:400,700,400italic,700italic);
-    </style><link href="https://fonts.googleapis.com/css?family=Ubuntu:400,700,400italic,700italic" rel="stylesheet" type="text/css" /><!--<![endif]--><style type="text/css">
+        @import url(//fonts.googleapis.com/css?family=Ubuntu:400,700,400italic,700italic);
+    </style><link href="//fonts.googleapis.com/css?family=Ubuntu:400,700,400italic,700italic" rel="stylesheet" type="text/css" /><!--<![endif]--><style type="text/css">
         body{background-color:#f0f0f0}.logo a:hover,.logo a:focus{color:#859bb1 !important}.mso .layout-has-border{border-top:1px solid #bdbdbd;border-bottom:1px solid #bdbdbd}.mso .layout-has-bottom-border{border-bottom:1px solid #bdbdbd}.mso .border,.ie .border{background-color:#bdbdbd}.mso h1,.ie h1{}.mso h1,.ie h1{font-size:36px !important;line-height:43px !important}.mso h2,.ie h2{}.mso h2,.ie h2{font-size:22px !important;line-height:31px !important}.mso h3,.ie h3{}.mso h3,.ie h3{font-size:18px !important;line-height:26px !important}.mso .layout__inner,.ie .layout__inner{}.mso .footer__share-button p{}.mso .footer__share-button p{font-family:Ubuntu,sans-serif}
     </style><meta name="robots" content="noindex,nofollow" />
     <meta property="og:title" content="My First Campaign" />

+ 79 - 83
resources/views/marketing/emailList.blade.php

@@ -1,94 +1,90 @@
 @extends('admin.layouts')
 @section('css')
-	<link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
-	<div class="page-content container-fluid">
-		<div class="panel">
-			<div class="panel-heading">
-				<h3 class="panel-title">邮件群发列表</h3>
-				<div class="panel-actions">
-					<button class="btn btn-primary" onclick="send()"><i class="icon wb-envelope"></i>群发邮件</button>
-				</div>
-			</div>
-			<div class="panel-body">
-				<div class="form-inline pb-20">
-					<div class="form-group">
-						<select class="form-control" name="status" id="status">
-							<option value="" @if(Request::get('status') == '') selected hidden @endif>状态</option>
-							<option value="0" @if(Request::get('status') == '0') selected hidden @endif>待发送</option>
-							<option value="-1" @if(Request::get('status') == '-1') selected hidden @endif>失败</option>
-							<option value="1" @if(Request::get('status') == '1') selected hidden @endif>成功</option>
-						</select>
-					</div>
-					<div class="btn-group">
-						<button class="btn btn-primary" onclick="doSearch()">搜索</button>
-						<button class="btn btn-danger" onclick="doReset()">重置</button>
-					</div>
-				</div>
-				<table class="table text-center" data-toggle="table" data-mobile-responsive="true">
-					<thead class="thead-default">
-					<tr>
-						<th> #</th>
-						<th> 消息标题</th>
-						<th> 消息内容</th>
-						<th> 发送状态</th>
-						<th> 发送时间</th>
-						<th> 错误信息</th>
-					</tr>
-					</thead>
-					<tbody>
-					@if ($list->isEmpty())
-						<tr>
-							<td colspan="6">暂无数据</td>
-						</tr>
-					@else
-						@foreach($list as $vo)
-							<tr>
-								<td> {{$vo->id}} </td>
-								<td> {{$vo->title}} </td>
-								<td> {{$vo->content}} </td>
-								<td> {{$vo->status_label}} </td>
-								<td> {{$vo->created_at}} </td>
-								<td> {{$vo->error}} </td>
-							</tr>
-						@endforeach
-					@endif
-					</tbody>
-				</table>
-			</div>
-			<div class="panel-footer">
-				<div class="row">
-					<div class="col-md-4 col-sm-4">
-						共 {{$list->total()}} 条消息
-					</div>
-					<div class="col-md-8 col-sm-8">
-						<div class="Page navigation float-right">
-							{{ $list->links() }}
-						</div>
-					</div>
-				</div>
-			</div>
-		</div>
-	</div>
+    <div class="page-content container-fluid">
+        <div class="panel">
+            <div class="panel-heading">
+                <h3 class="panel-title">邮件群发列表</h3>
+                <div class="panel-actions">
+                    <button class="btn btn-primary" onclick="send()"><i class="icon wb-envelope"></i>群发邮件</button>
+                </div>
+            </div>
+            <div class="panel-body">
+                <div class="form-row">
+                    <div class="form-group col-lg-3 col-sm-6">
+                        <select class="form-control" name="status" id="status" onChange="Search()">
+                            <option value="" @if(Request::get('status') == '') selected hidden @endif>状态</option>
+                            <option value="0" @if(Request::get('status') == '0') selected hidden @endif>待发送</option>
+                            <option value="-1" @if(Request::get('status') == '-1') selected hidden @endif>失败</option>
+                            <option value="1" @if(Request::get('status') == '1') selected hidden @endif>成功</option>
+                        </select>
+                    </div>
+                    <div class="form-group col-lg-3 col-sm-6 btn-group">
+                        <button class="btn btn-primary" onclick="Search()">搜索</button>
+                        <a href="/marketing/emailList" class="btn btn-danger">重置</a>
+                    </div>
+                </div>
+                <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
+                    <thead class="thead-default">
+                    <tr>
+                        <th> #</th>
+                        <th> 消息标题</th>
+                        <th> 消息内容</th>
+                        <th> 发送状态</th>
+                        <th> 发送时间</th>
+                        <th> 错误信息</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    @if ($list->isEmpty())
+                        <tr>
+                            <td colspan="6">暂无数据</td>
+                        </tr>
+                    @else
+                        @foreach($list as $vo)
+                            <tr>
+                                <td> {{$vo->id}} </td>
+                                <td> {{$vo->title}} </td>
+                                <td> {{$vo->content}} </td>
+                                <td> {{$vo->status_label}} </td>
+                                <td> {{$vo->created_at}} </td>
+                                <td> {{$vo->error}} </td>
+                            </tr>
+                        @endforeach
+                    @endif
+                    </tbody>
+                </table>
+            </div>
+            <div class="panel-footer">
+                <div class="row">
+                    <div class="col-sm-4">
+                        共 <code>{{$list->total()}}</code> 条消息
+                    </div>
+                    <div class="col-sm-8">
+                        <nav class="Page navigation float-right">
+                            {{$list->links()}}
+                        </nav>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
 @endsection
 @section('script')
-	<script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
-	<script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
-	<script type="text/javascript">
+    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
+    <script type="text/javascript">
         // 发送邮件
         function send() {
-			swal.fire('抱歉','由于作者闭源,开发无限期延期','info');
+            swal.fire('抱歉', '由于作者闭源,开发无限期延期', 'info');
         }
 
-		function doSearch() {
-			const status = $("#status option:selected").val();
+        function Search() {
+            const status = $("#status option:selected").val();
 
-			window.location.href = "/marketing/emailList?status=" + status;
-		}
-
-		function doReset() {
-			window.location.href = "/marketing/emailList";
-		}
-	</script>
-@endsection
+            window.location.href = "/marketing/emailList?status=" + status;
+        }
+    </script>
+@endsection

+ 129 - 137
resources/views/marketing/pushList.blade.php

@@ -1,138 +1,136 @@
 @extends('admin.layouts')
 @section('css')
-	<link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css">
-	<link rel="stylesheet" href="/assets/global/vendor/bootstrap-markdown/bootstrap-markdown.min.css">
-	<link rel="stylesheet" href="/assets/global/fonts/font-awesome/font-awesome.min.css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/vendor/bootstrap-markdown/bootstrap-markdown.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/fonts/font-awesome/font-awesome.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
-	<div class="page-content container-fluid">
-		<div class="panel">
-			<div class="panel-heading">
-				<h3 class="panel-title">推送消息列表</h3>
-				<div class="panel-actions">
-					<button class="btn btn-primary" data-toggle="modal" data-target="#send_modal"><i class="icon wb-plus"></i>推送消息</button>
-				</div>
-			</div>
-			<div class="panel-body">
-				<div class="form-inline pb-20">
-					<div class="form-group">
-						<select class="form-control" name="status" id="status">
-							<option value="" @if(Request::get('status') == '') selected hidden @endif>状态</option>
-							<option value="0" @if(Request::get('status') == '0') selected hidden @endif>待发送</option>
-							<option value="-1" @if(Request::get('status') == '-1') selected hidden @endif>失败</option>
-							<option value="1" @if(Request::get('status') == '1') selected hidden @endif>成功</option>
-						</select>
-					</div>
-					<div class="btn-group">
-						<button class="btn btn-primary" onclick="doSearch()">搜索</button>
-						<button class="btn btn-danger" onclick="doReset()">重置</button>
-					</div>
-				</div>
-				<div class="alert alert-info alert-dismissible" role="alert">
-					<button type="button" class="close" data-dismiss="alert" aria-label="Close">
-						<span aria-hidden="true">×</span>
-						<span class="sr-only">Close</span>
-					</button>
-					仅会推送给关注了您的消息通道的用户 <a class="alert-link" href="{{url('admin/system')}}" target="_blank">设置PushBear</a>.
-				</div>
-				<table class="table text-center" data-toggle="table" data-mobile-responsive="true">
-					<thead class="thead-default">
-					<tr>
-						<th> #</th>
-						<th> 消息标题</th>
-						<th> 消息内容</th>
-						<th> 推送状态</th>
-						<th> 推送时间</th>
-						<th> 错误信息</th>
-					</tr>
-					</thead>
-					<tbody>
-					@if ($list->isEmpty())
-						<tr>
-							<td colspan="6">暂无数据</td>
-						</tr>
-					@else
-						@foreach($list as $vo)
-							<tr>
-								<td> {{$vo->id}} </td>
-								<td> {{$vo->title}} </td>
-								<td> {{$vo->content}} </td>
-								<td> {{$vo->status_label}} </td>
-								<td> {{$vo->created_at}} </td>
-								<td> {{$vo->error}} </td>
-							</tr>
-						@endforeach
-					@endif
-					</tbody>
-				</table>
-			</div>
-			<div class="panel-footer">
-				<div class="row">
-					<div class="col-md-4 col-sm-4">
-						共 {{$list->total()}} 条推送消息
-					</div>
-					<div class="col-md-8 col-sm-8">
-						<div class="Page navigation float-right">
-							{{ $list->links() }}
-						</div>
-					</div>
-				</div>
-			</div>
-		</div>
-	</div>
+    <div class="page-content container-fluid">
+        <div class="panel">
+            <div class="panel-heading">
+                <h3 class="panel-title">推送消息列表</h3>
+                <div class="panel-actions">
+                    <button class="btn btn-primary" data-toggle="modal" data-target="#send_modal"><i class="icon wb-plus"></i>推送消息</button>
+                </div>
+            </div>
+            <div class="panel-body">
+                <div class="form-row">
+                    <div class="form-group col-lg-3 col-sm-6">
+                        <select class="form-control" name="status" id="status" onChange="Search()">
+                            <option value="" @if(Request::get('status') == '') selected hidden @endif>状态</option>
+                            <option value="0" @if(Request::get('status') == '0') selected hidden @endif>待发送</option>
+                            <option value="-1" @if(Request::get('status') == '-1') selected hidden @endif>失败</option>
+                            <option value="1" @if(Request::get('status') == '1') selected hidden @endif>成功</option>
+                        </select>
+                    </div>
+                    <div class="form-group col-lg-2 col-sm-6 btn-group">
+                        <button class="btn btn-primary" onclick="Search()">搜索</button>
+                        <a href="/marketing/pushList" class="btn btn-danger">重置</a>
+                    </div>
+                </div>
+                <div class="alert alert-info alert-dismissible" role="alert">
+                    <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
+                    仅会推送给关注了您的消息通道的用户 <a href="/admin/system" class="alert-link" target="_blank">设置PushBear</a>.
+                </div>
+                <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
+                    <thead class="thead-default">
+                    <tr>
+                        <th> #</th>
+                        <th> 消息标题</th>
+                        <th> 消息内容</th>
+                        <th> 推送状态</th>
+                        <th> 推送时间</th>
+                        <th> 错误信息</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    @if ($list->isEmpty())
+                        <tr>
+                            <td colspan="6">暂无数据</td>
+                        </tr>
+                    @else
+                        @foreach($list as $vo)
+                            <tr>
+                                <td> {{$vo->id}} </td>
+                                <td> {{$vo->title}} </td>
+                                <td> {{$vo->content}} </td>
+                                <td> {{$vo->status_label}} </td>
+                                <td> {{$vo->created_at}} </td>
+                                <td> {{$vo->error}} </td>
+                            </tr>
+                        @endforeach
+                    @endif
+                    </tbody>
+                </table>
+            </div>
+            <div class="panel-footer">
+                <div class="row">
+                    <div class="col-sm-4">
+                        共 <code>{{$list->total()}}</code> 条推送消息
+                    </div>
+                    <div class="col-sm-8">
+                        <nav class="Page navigation float-right">
+                            {{$list->links()}}
+                        </nav>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
 
-	<!-- 推送消息 -->
-	<div id="send_modal" class="modal fade" tabindex="-1" data-focus-on="input:first" data-backdrop="static" data-keyboard="false">
-		<div class="modal-dialog">
-			<div class="modal-content">
-				<div class="modal-header">
-					<button class="close" data-dismiss="modal" aria-hidden="true"></button>
-					<h4 class="modal-title">推送消息</h4>
-				</div>
-				<div class="modal-body">
-					<div class="alert alert-danger" style="display: none;" id="msg"></div>
-					<form action="#" method="post" class="form-horizontal">
-						<div class="form-body">
-							<div class="form-group">
-								<div class="row">
-									<label for="title" class="col-md-2 control-label"> 标题 </label>
-									<div class="col-md-10">
-										<input type="text" class="form-control" name="title" id="title" placeholder="">
-									</div>
-								</div>
-							</div>
-							<div class="form-group">
-								<div class="row">
-									<label for="content" class="col-md-2 control-label"> 内容 </label>
-									<div class="col-md-10">
-										<textarea class="form-control" rows="6" name="content" id="content" data-provide="markdown" data-iconlibrary="fa"></textarea>
-										<span class="help-block"> 内容支持<a href="https://maxiang.io/" target="_blank">Markdown语法</a> </span>
-									</div>
-								</div>
-							</div>
-						</div>
-					</form>
-				</div>
-				<div class="modal-footer">
-					<button class="btn btn-danger" data-dismiss="modal">取消</button>
-					<button class="btn btn-primary" onclick="return send();">推送</button>
-				</div>
-			</div>
-		</div>
-	</div>
+    <!-- 推送消息 -->
+    <div id="send_modal" class="modal fade" tabindex="-1" data-focus-on="input:first" data-backdrop="static" data-keyboard="false">
+        <div class="modal-dialog modal-lg  modal-center">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                        <span aria-hidden="true">×</span>
+                    </button>
+                    <h4 class="modal-title">推送消息</h4>
+                </div>
+                <div class="modal-body">
+                    <div class="alert alert-danger" style="display: none;" id="msg"></div>
+                    <form action="#" method="post" class="form-horizontal">
+                        <div class="form-body">
+                            <div class="form-group">
+                                <div class="row">
+                                    <label for="title" class="col-md-2 control-label"> 标题 </label>
+                                    <div class="col-md-6">
+                                        <input type="text" class="form-control" name="title" id="title" placeholder="">
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="form-group">
+                                <div class="row">
+                                    <label for="content" class="col-md-2 control-label"> 内容 </label>
+                                    <div class="col-md-9">
+                                        <textarea class="form-control" rows="10" name="content" id="content" data-provide="markdown" data-iconlibrary="fa"></textarea>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </form>
+                </div>
+                <div class="modal-footer">
+                    <button class="btn btn-danger" data-dismiss="modal">取消</button>
+                    <button class="btn btn-primary" onclick="return send();">推送</button>
+                </div>
+            </div>
+        </div>
+    </div>
 @endsection
 @section('script')
-	<script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
-	<script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
-	<script src="/assets/global/vendor/bootstrap-markdown/bootstrap-markdown.js"></script>
-	<script src="/assets/global/vendor/marked/marked.js"></script>
-	<script src="/assets/global/vendor/to-markdown/to-markdown.js"></script>
-	<script type="text/javascript">
+    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-markdown/bootstrap-markdown.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/marked/marked.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/to-markdown/to-markdown.js" type="text/javascript"></script>
+    <script type="text/javascript">
         // 发送通道消息
         function send() {
-			const _token = '{{csrf_token()}}';
-			const title = $("#title").val();
-			const content = $("#content").val();
+            const _token = '{{csrf_token()}}';
+            const title = $("#title").val();
+            const content = $("#content").val();
 
             if (title.trim() === '') {
                 $("#msg").show().html("标题不能为空");
@@ -169,15 +167,9 @@
             window.location.reload();
         });
 
-
-        function doSearch() {
-			const status = $("#status").val();
-
-			window.location.href = "/marketing/pushList?status=" + status;
+        function Search() {
+            const status = $("#status").val();
+            window.location.href = "/marketing/pushList?status=" + status;
         }
-
-        function doReset() {
-            window.location.href = "/marketing/pushList";
-        }
-	</script>
-@endsection
+    </script>
+@endsection

+ 39 - 32
resources/views/payment/callbackList.blade.php

@@ -1,6 +1,6 @@
 @extends('admin.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container-fluid">
@@ -11,29 +11,35 @@
                 </h2>
             </div>
             <div class="panel-body">
-                <div class="form-inline mb-20">
-                    <div class="form-group">
-                        <input type="text" class="form-control" name="out_trade_no" value="{{Request::get('out_trade_no')}}" id="out_trade_no" placeholder="本地订单号" autocomplete="off" onkeydown="if(event.keyCode==13){do_search();}">
-                        <input type="text" class="form-control" name="trade_no" value="{{Request::get('trade_no')}}" id="trade_no" placeholder="外部订单号" autocomplete="off" onkeydown="if(event.keyCode==13){do_search();}">
-                        <select class="form-control" name="type" id="type" onChange="doSearch()">
-                            <option value="" @if(Request::get('type') == '') selected @endif>支付方式</option>
-                            <option value="2" @if(Request::get('type') == '2') selected @endif>码支付</option>
-                            <option value="3" @if(Request::get('type') == '3') selected @endif>易支付</option>
-                            <option value="4" @if(Request::get('type') == '4') selected @endif>支付宝国际</option>
-                            <option value="5" @if(Request::get('type') == '5') selected @endif>当面付</option>
+                <div class="form-row">
+                    <div class="form-group col-lg-3 col-sm-6">
+                        <input type="number" class="form-control" name="out_trade_no" id="out_trade_no" value="{{Request::get('out_trade_no')}}" placeholder="本地订单号" autocomplete="off"/>
+                    </div>
+                    <div class="form-group col-lg-3 col-sm-6">
+                        <input type="number" class="form-control" name="trade_no" id="trade_no" value="{{Request::get('trade_no')}}" placeholder="外部订单号" autocomplete="off"/>
+                    </div>
+                    <div class="form-group col-lg-2 col-sm-4">
+                        <select class="form-control" name="type" id="type" onChange="Search()">
+                            <option value="" @if(Request::get('type') == '') selected hidden @endif>支付方式</option>
+                            <option value="2" @if(Request::get('type') == '2') selected hidden @endif>码支付</option>
+                            <option value="3" @if(Request::get('type') == '3') selected hidden @endif>易支付</option>
+                            <option value="4" @if(Request::get('type') == '4') selected hidden @endif>支付宝国际</option>
+                            <option value="5" @if(Request::get('type') == '5') selected hidden @endif>当面付</option>
                         </select>
-                        <select class="form-control" name="trade_status" id="trade_status" onChange="doSearch()">
-                            <option value="" @if(Request::get('trade_status') == '') selected @endif>交易状态</option>
-                            <option value="1" @if(Request::get('trade_status') == '1') selected @endif>成功</option>
-                            <option value="0" @if(Request::get('trade_status') == '0') selected @endif>失败</option>
+                    </div>
+                    <div class="form-group col-lg-2 col-sm-4">
+                        <select class="form-control" name="trade_status" id="trade_status" onChange="Search()">
+                            <option value="" @if(Request::get('trade_status') == '') selected hidden @endif>交易状态</option>
+                            <option value="1" @if(Request::get('trade_status') == '1') selected hidden @endif>成功</option>
+                            <option value="0" @if(Request::get('trade_status') == '0') selected hidden @endif>失败</option>
                         </select>
                     </div>
-                    <div class="btn-group">
-                        <button class="btn btn-primary" onclick="doSearch()">搜索</button>
-                        <button class="btn btn-danger" onclick="doReset()">重置</button>
+                    <div class="form-group col-lg-2 col-sm-4 btn-group">
+                        <button class="btn btn-primary" onclick="Search()">搜索</button>
+                        <a href="/payment/callbackList" class="btn btn-danger">重置</a>
                     </div>
                 </div>
-                <table class="table text-center" data-toggle="table" data-mobile-responsive="true">
+                <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
                     <thead class="thead-default">
                     <tr>
                         <th> #</th>
@@ -69,12 +75,12 @@
             </div>
             <div class="panel-footer">
                 <div class="row">
-                    <div class="col-md-4 col-sm-4">
+                    <div class="col-sm-4">
                         共 <code>{{$list->total()}}</code> 个账号
                     </div>
-                    <div class="col-md-8 col-sm-8">
+                    <div class="col-sm-8">
                         <nav class="Page navigation float-right">
-                            {{ $list->links() }}
+                            {{$list->links()}}
                         </nav>
                     </div>
                 </div>
@@ -84,22 +90,23 @@
 
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
-    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
+    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
     <script type="text/javascript">
+        //回车检测
+        $(document).on("keypress", "input", function (e) {
+            if (e.which === 13) {
+                Search()
+            }
+        });
+
         // 搜索
-        function doSearch() {
+        function Search() {
             const trade_no = $("#trade_no").val();
             const out_trade_no = $("#out_trade_no").val();
             const type = $("#type option:selected").val();
             const trade_status = $("#trade_status option:selected").val();
-
             window.location.href = '/payment/callbackList?out_trade_no=' + out_trade_no + '&trade_no=' + trade_no + '&type=' + type + '&trade_status=' + trade_status;
         }
-
-        // 重置
-        function doReset() {
-            window.location.href = '/payment/callbackList';
-        }
     </script>
-@endsection
+@endsection

+ 1 - 1
resources/views/payment/detail.blade.php

@@ -58,7 +58,7 @@
                 if (ret.status === 'success') {
                     swal.fire({title: ret.message, type: 'success', timer: 1500, showConfirmButton: false})
                         .then(() => window.location.href = '/invoices')
-                } else {
+                } else if(ret.status === 'error') {
                     swal.fire({title: ret.message, type: "error", timer: 1500, showConfirmButton: false})
                         .then(() => window.location.href = '/invoices')
                 }

+ 5 - 5
resources/views/sensitiveWords/addSensitiveWords.blade.php

@@ -12,11 +12,11 @@
                 </div>
             @endif
             <div class="panel-body">
-                <form action="#" method="post" enctype="multipart/form-data" class="form-horizontal" role="form" onsubmit="return do_submit();">
+                <form action="#" method="post" enctype="multipart/form-data" class="form-horizontal" role="form" onsubmit="return Submit()">
                     <div class="form-group row">
                         <label class="col-form-label col-md-2">敏感词</label>
                         <div class="col-md-5">
-                            <input type="text" class="form-control" name="words" value="" id="words" required>
+                            <input type="text" class="form-control" name="words" value="" id="words" required/>
                             <input type="hidden" name="_token" value="{{csrf_token()}}"/>
                         </div>
                     </div>
@@ -36,7 +36,7 @@
                     <h4 class="modal-title"> {{trans('home.ticket_table_new_button')}} </h4>
                 </div>
                 <div class="modal-body">
-                    <input type="text" name="title" id="title" placeholder="{{trans('home.ticket_table_title')}}" class="form-control mb-20">
+                    <input type="text" name="title" id="title" placeholder="{{trans('home.ticket_table_title')}}" class="form-control mb-20"/>
                     <textarea name="content" id="content" placeholder="{{trans('home.ticket_table_new_desc')}}" class="form-control mb-20" rows="4"></textarea>
                 </div>
                 <div class="modal-footer">
@@ -50,7 +50,7 @@
 @section('script')
     <script type="text/javascript">
         // ajax同步提交
-        function do_submit() {
+        function Submit() {
             const _token = '{{csrf_token()}}';
             const words = $('#words').val();
 
@@ -71,4 +71,4 @@
             return false;
         }
     </script>
-@endsection
+@endsection

+ 8 - 10
resources/views/sensitiveWords/sensitiveWordsList.blade.php

@@ -1,6 +1,6 @@
 @extends('admin.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container">
@@ -45,15 +45,13 @@
             </div>
             <div class="panel-footer">
                 <div class="row">
-                    <div class="col-md-4 col-sm-4">
+                    <div class="col-sm-4">
                         共 <code>{{$list->total()}}</code> 条记录
                     </div>
-                    <div class="col-md-8 col-sm-8">
-                        <div class="float-right">
-                            <nav class="Page navigation">
-                                {{ $list->links() }}
+                    <div class="col-sm-8">
+                            <nav class="Page navigation float-right">
+                                {{$list->links()}}
                             </nav>
-                        </div>
                     </div>
                 </div>
             </div>
@@ -70,7 +68,7 @@
                     <h4 class="modal-title"> 添加敏感词 </h4>
                 </div>
                 <div class="modal-body">
-                    <input type="text" name="words" id="words" placeholder="请填入敏感词" class="form-control">
+                    <input type="text" name="words" id="words" placeholder="请填入敏感词" class="form-control"/>
                 </div>
                 <div class="modal-footer">
                     <button data-dismiss="modal" class="btn btn-danger"> 关 闭 </button>
@@ -82,8 +80,8 @@
 
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
-    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
+    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
 
     <script type="text/javascript">
         // 添加敏感词

+ 190 - 201
resources/views/shop/addGoods.blade.php

@@ -1,218 +1,207 @@
 @extends('admin.layouts')
 @section('css')
-	<link rel="stylesheet" href="/assets/global/vendor/bootstrap-select/bootstrap-select.min.css">
-	{{--<link rel="stylesheet" href="/theme/global/vendor/dropify/dropify.min.css">--}}
+    <link href="/assets/global/vendor/bootstrap-select/bootstrap-select.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/vendor/ascolorpicker/asColorPicker.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/vendor/dropify/dropify.min.css" type="text/css" rel="stylesheet">
+    <style type="text/css">
+        .text-help {
+            padding-left: 1.0715rem;
+        }
+    </style>
 @endsection
 @section('content')
-	<div class="page-content container">
-		<div class="panel">
-			<div class="panel-heading">
-				<h2 class="panel-title">添加商品</h2>
-			</div>
-			@if (Session::has('successMsg'))
-				<div class="alert alert-success">
-					<button class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span><span class="sr-only">{{trans('home.close')}}</span></button>
-					{{Session::get('successMsg')}}
-				</div>
-			@elseif ($errors->any())
-				<div class="alert alert-danger">
-					<button class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span><span class="sr-only">{{trans('home.close')}}</span></button>
-					<strong>错误:</strong> {{$errors->first()}}
-				</div>
-			@else
-				<div class="alert alert-info" role="alert">
-					<button class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span><span class="sr-only">{{trans('home.close')}}</span></button>
-					<strong>警告:</strong>用户购买新套餐则会覆盖所有已购但未过期的旧套餐并删除这些旧套餐对应的流量,所以设置商品时请务必注意类型和有效期,流量包则可叠加。
-				</div>
-			@endif
-			<div class="panel-body">
-				<form action="/shop/addGoods" method="post" enctype="multipart/form-data" class="form-horizontal" role="form">
-					<div class="row">
-						<div class="col-md-12 col-lg-6">
-							<div class="form-group row">
-								<label for="type" class="col-form-label col-md-2">类型</label>
-								<ul class="col-md-9 list-unstyled list-inline">
-									<li class="list-inline-item">
-										<div class="radio-custom radio-primary">
-											<input type="radio" name="type" value="1" checked>
-											<label>流量包</label>
-										</div>
-									</li>
-									<li class="list-inline-item">
-										<div class="radio-custom radio-primary">
-											<input type="radio" name="type" value="2">
-											<label>套餐</label>
-										</div>
-									</li>
-									<li class="list-inline-item">
-										<div class="radio-custom radio-primary">
-											<input type="radio" name="type" value="3">
-											<label>充值</label>
-										</div>
-									</li>
-								</ul>
-								<span class="text-help offset-md-2"> 套餐与账号有效期有关,流量包只扣可用流量,不影响有效期 </span>
-							</div>
-							<div class="form-group row">
-								<label for="name" class="col-form-label col-md-2">名称</label>
-								<div class="col-md-7">
-									<input type="text" class="form-control" name="name" value="{{Request::old('name')}}" id="name" placeholder="" required>
-									<input type="hidden" name="_token" value="{{csrf_token()}}"/>
-								</div>
-							</div>
-							<div class="form-group row">
-								<label class="col-form-label col-md-2">描述</label>
-								<div class="col-md-8">
-									<textarea class="form-control" rows="2" name="info" id="info" placeholder="商品的简单描述">{{Request::old('info')}}</textarea>
-								</div>
-							</div>
-							<div class="form-group row">
-								<label class="col-form-label col-md-2">列表</label>
-								<div class="col-md-8">
-									<textarea class="form-control" rows="4" name="desc" id="desc" placeholder="商品的列表添加">{{Request::old('desc')}}</textarea>
-								</div>
-							</div>
-							<div class="form-group row">
-								<label class="col-form-label col-md-2">售价</label>
-								<div class="input-group col-md-6">
-									<input type="text" class="form-control" name="price" value="{{Request::old('price')}}" id="price" placeholder="" required>
-									<span class="input-group-text">元</span>
-								</div>
-							</div>
-							<div class="form-group row package-money">
-								<label for="traffic" class="col-form-label col-md-2">内含流量</label>
-								<div class="input-group col-md-7">
-									<input type="text" class="form-control" name="traffic" value="1024" id="traffic" placeholder="" required="">
-									<span class="input-group-text">MB</span>
-								</div>
-								<span class="text-help offset-md-2"> 提交后不可修改 </span>
-							</div>
-							<div class="form-group row package-money">
-								<label for="labels" class="col-md-2 col-form-label">标签</label>
-								<div class="col-md-8">
-									<select data-plugin="selectpicker" data-style="btn-outline btn-primary" class="form-control show-tick" id="labels" name="labels[]" multiple>
-										@foreach($label_list as $label)
-											<option value="{{$label->id}}">{{$label->name}}</option>
-										@endforeach
-									</select>
-								</div>
-								<span class="text-help offset-md-2"> 自动给购买此商品的用户打上相应的标签 </span>
-							</div>
-						</div>
-						<div class="col-md-12 col-lg-6">
-							<div class="form-group row package-money">
-								<label for="days" class="col-form-label col-md-2">有效期</label>
-								<div class="input-group col-md-3">
-									<input type="text" class="form-control" name="days" value="30" id="days" required/>
-									<span class="input-group-text">天</span>
-								</div>
-								<span class="text-help offset-md-3"> 到期后会自动从总流量扣减对应的流量,添加后不可修改 </span>
-							</div>
-							<div class="form-group row package-money">
-								<label for="sort" class="col-form-label col-md-2">排序</label>
-								<div class="col-md-6">
-									<input type="text" class="form-control col-md-3" name="sort" value="{{Request::old('sort')}}" id="sort"/>
-								</div>
-								<span class="text-help offset-md-3"> 值越大排越前 </span>
-							</div>
-							<div class="form-group row package-money">
-								<label for="color" class="col-md-2 col-form-label">颜色</label>
-								<div class="col-md-3">
-									<select data-plugin="selectpicker" data-style="btn-outline btn-primary" class="form-control" name="color" id="color">
-										<option class="bg-red-700 text-white" value="red">红</option>
-										<option class="bg-pink-700 text-white" value="pink">粉红</option>
-										<option class="bg-purple-700 text-white" value="purple">紫</option>
-										<option class="bg-indigo-700 text-white" value="indigo">靛青</option>
-										<option class="bg-blue-700 text-white" value="blue" selected>蓝</option>
-										<option class="bg-cyan-700 text-white" value="cyan">青</option>
-										<option class="bg-teal-700 text-white" value="teal">深藍綠</option>
-										<option class="bg-green-700 text-white" value="green">绿</option>
-										<option class="bg-light-green-700 text-white" value="light-green">浅绿</option>
-										<option class="bg-yellow-700 text-white" value="yellow">黄</option>
-										<option class="bg-orange-700 text-white" value="orange">橙</option>
-										<option class="bg-brown-700 text-white" value="brown">棕</option>
-										<option class="bg-grey-700 text-white" value="grey">灰</option>
-										<option class="bg-blue-grey-700 text-white" value="blue-grey">蓝灰</option>
-									</select>
-								</div>
-							</div>
-							<div class="form-group row package-money">
-								<label for="is_hot" class="col-md-2 col-form-label">热销</label>
-								<ul class="col-md-9 list-unstyled list-inline">
-									<li class="list-inline-item">
-										<div class="radio-custom radio-primary">
-											<input type="radio" name="is_hot" value="1">
-											<label>是</label>
-										</div>
-									</li>
-									<li class="list-inline-item">
-										<div class="radio-custom radio-primary">
-											<input type="radio" name="is_hot" value="0" checked>
-											<label>否</label>
-										</div>
-									</li>
-								</ul>
-							</div>
-							<div class="form-group row">
-								<label for="is_limit" class="col-md-2 col-form-label">限购</label>
-								<ul class="col-md-9 list-unstyled list-inline">
-									<li class="list-inline-item">
-										<div class="radio-custom radio-primary">
-											<input type="radio" name="is_limit" value="1">
-											<label>是</label>
-										</div>
-									</li>
-									<li class="list-inline-item">
-										<div class="radio-custom radio-primary">
-											<input type="radio" name="is_limit" value="0" checked>
-											<label>否</label>
-										</div>
-									</li>
-								</ul>
-							</div>
-							<div class="form-group row last">
-								<label for="status" class="col-form-label col-md-2">状态</label>
-								<ul class="col-md-9 list-unstyled list-inline">
-									<li class="list-inline-item">
-										<div class="radio-custom radio-primary">
-											<input type="radio" name="status" value="1" checked>
-											<label>上架</label>
-										</div>
-									</li>
-									<li class="list-inline-item">
-										<div class="radio-custom radio-primary">
-											<input type="radio" name="status" value="0">
-											<label>下架</label>
-										</div>
-									</li>
-								</ul>
-							</div>
-						</div>
-					</div>
-					<div class="form-actions col-md-12">
-						<button type="submit" class="btn btn-success"><i class="icon wb-check"></i> 提 交</button>
-					</div>
-				</form>
-			</div>
-		</div>
-	</div>
+    <div class="page-content container">
+        <div class="panel  panel-bordered">
+            <div class="panel-heading">
+                <h1 class="panel-title"><i class="icon wb-shopping-cart" aria-hidden="true"></i>添加商品</h1>
+            </div>
+            @if (Session::has('successMsg'))
+                <div class="alert alert-success alert-dismissible">
+                    <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
+                    {{Session::get('successMsg')}}
+                </div>
+            @endif
+            @if($errors->any())
+                <div class="alert alert-danger alert-dismissible">
+                    <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
+                    <span> {{$errors->first()}} </span>
+                </div>
+            @endif
+            <div class="alert alert-info alert-dismissible" role="alert">
+                <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
+                <h4>面板关于商品的规则</h4>
+                <ul>
+                    <li>警告:用户购买新套餐则会覆盖所有已购但未过期的旧套餐并删除这些旧套餐对应的流量,所以设置商品时请务必注意类型和有效期,流量包则可叠加</li>
+                    <li>套餐:仅展示12个上架的商品;流量:仅展示12个上架的商品</li>
+                    <li>注意:添加后无法更改授予等级、商品类型;套餐有效期90天起,因为套餐每月会重置流量</li>
+                </ul>
+            </div>
+            <div class="panel-body">
+                <form action="/shop/addGoods" method="post" enctype="multipart/form-data" class="form-horizontal" role="form">
+                    <div class="form-row">
+                        <div class="col-lg-6 col-md-12">
+                            <div class="form-group row">
+                                <label class="col-md-2 col-form-label" for="type">类型</label>
+                                <div class="col-md-10 d-flex align-items-center">
+                                    <div class="radio-custom radio-primary radio-inline">
+                                        <input type="radio" name="type" value="1" checked/>
+                                        <label for="type">流量包</label>
+                                    </div>
+                                    <div class="radio-custom radio-primary radio-inline">
+                                        <input type="radio" name="type" value="2"/>
+                                        <label for="type">套餐</label>
+                                    </div>
+                                    <div class="radio-custom radio-primary radio-inline">
+                                        <input type="radio" name="type" value="3"/>
+                                        <label for="type">充值</label>
+                                    </div>
+                                </div>
+                                <span class="offset-md-2 text-help"> 套餐与账号有效期有关,流量包只扣可用流量,不影响有效期 </span>
+                            </div>
+                            <div class="form-group row">
+                                <label class="col-md-2 col-form-label" for="name">名称</label>
+                                <div class="col-md-6">
+                                    <input type="text" class="form-control" name="name" id="name" value="{{Request::old('name')}}" required/>
+                                    <input name="_token" value="{{csrf_token()}}" hidden/>
+                                </div>
+                            </div>
+                            <div class="form-group row package-money">
+                                <label class="col-md-2 col-form-label" for="logo">商品图片</label>
+                                <div class="col-md-9">
+                                    <input type="file" id="logo" name="logo" data-plugin="dropify" data-default-file="/assets/images/noimage.png"/>
+                                </div>
+                            </div>
+                            <div class="form-group row package-money">
+                                <label class="col-md-2 col-form-label" for="desc">描述</label>
+                                <div class="col-md-9">
+                                    <textarea class="form-control" rows="2" name="desc" id="desc" placeholder="商品的简单描述">{{Request::old('desc')}}</textarea>
+                                </div>
+                            </div>
+                            <div class="form-group row package-money">
+                                <label class="col-md-2 col-form-label" for="info">自定义列表</label>
+                                <div class="col-md-9">
+                                    <textarea class="form-control" rows="6" name="info" id="info" placeholder="商品的自定义列表添加">{{Request::old('info')}}</textarea>
+                                </div>
+                                <span class="offset-md-2 text-help"> 每行内容请以<code>&lt;li&gt;</code> 开头 <code>&lt;/li&gt;</code> 结尾</span>
+                            </div>
+                            <div class="form-group row">
+                                <label class="col-md-2 col-form-label" for="price">售价</label>
+                                <div class="col-md-4 input-group">
+                                    <input type="number" class="form-control" name="price" id="price" value="{{Request::old('price')}}" required/>
+                                    <span class="input-group-text">元</span>
+                                </div>
+                            </div>
+                            <div class="form-group row package-money">
+                                <label class="col-md-2 col-form-label" for="traffic">内含流量</label>
+                                <div class="col-md-4 input-group">
+                                    <input type="number" class="form-control" name="traffic" id="traffic" value="{{Request::old('traffic')?Request::old('traffic') :1024}}" required/>
+                                    <span class="input-group-text">MB</span>
+                                </div>
+                                <span class="offset-md-12 text-help"> 提交后不可修改 </span>
+                            </div>
+                            <div class="form-group row package-money">
+                                <label class="col-md-2 col-form-label" for="labels">标签</label>
+                                <div class="col-md-8">
+                                    <select class="form-control show-tick" name="labels[]" id="labels" data-plugin="selectpicker" data-style="btn-outline btn-primary" multiple>
+                                        @foreach($label_list as $label)
+                                            <option value="{{$label->id}}">{{$label->name}}</option>
+                                        @endforeach
+                                    </select>
+                                </div>
+                                <span class="offset-md-2 text-help"> 自动给购买此商品的用户打上相应的标签 </span>
+                            </div>
+                        </div>
+                        <div class="col-lg-6 col-md-12">
+                            <div class="form-group row package-money">
+                                <label class="col-md-2 col-form-label" for="days">有效期</label>
+                                <div class="col-md-3 input-group">
+                                    <input type="number" class="form-control" name="days" id="days" value="{{Request::old('days')?Request::old('days') :30}}" required/>
+                                    <span class="input-group-text">天</span>
+                                </div>
+                                <span class="offset-md-2 text-help"> 到期后会自动从总流量扣减对应的流量,添加后不可修改 </span>
+                            </div>
+                            <div class="form-group row package-money">
+                                <label class="col-md-2 col-form-label" for="sort">排序</label>
+                                <div class="col-md-3">
+                                    <input type="number" class="form-control" name="sort" id="sort" value="{{Request::old('sort')?Request::old('days') :0}}"/>
+                                </div>
+                                <span class="text-help"> 排序值越大排越前 </span>
+                            </div>
+                            <div class="form-group row package-money">
+                                <label class="col-md-2 col-form-label" for="color">颜色</label>
+                                <div class="col-md-4">
+                                    <input type="text" class="form-control" name="color" id="color" data-plugin="asColorPicker" data-mode="simple" value="{{Request::old('color')?Request::old('color') :'#667AFA'}}"/>
+                                </div>
+                            </div>
+                            <div class="form-group row package-money">
+                                <label class="col-md-2 col-form-label" for="is_hot">热销</label>
+                                <div class="col-md-10 d-flex align-items-center">
+                                    <div class="radio-custom radio-primary radio-inline">
+                                        <input type="radio" name="is_hot" value="1"/>
+                                        <label for="is_hot">是</label>
+                                    </div>
+                                    <div class="radio-custom radio-primary radio-inline">
+                                        <input type="radio" name="is_hot" value="0" checked/>
+                                        <label for="is_hot">否</label>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="form-group row">
+                                <label class="col-md-2 col-form-label" for="is_limit">限购</label>
+                                <div class="col-md-10 d-flex align-items-center">
+                                    <div class="radio-custom radio-primary radio-inline">
+                                        <input type="radio" name="is_limit" value="1"/>
+                                        <label for="is_limit">是</label>
+                                    </div>
+                                    <div class="radio-custom radio-primary radio-inline">
+                                        <input type="radio" name="is_limit" value="0" checked/>
+                                        <label for="is_limit">否</label>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="form-group row">
+                                <label class="col-md-2 col-form-label" for="status">状态</label>
+                                <div class="col-md-10 d-flex align-items-center">
+                                    <div class="radio-custom radio-primary radio-inline">
+                                        <input type="radio" name="status" value="1" checked/>
+                                        <label for="status">上架</label>
+                                    </div>
+                                    <div class="radio-custom radio-primary radio-inline">
+                                        <input type="radio" name="status" value="0"/>
+                                        <label for="status">下架</label>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="form-actions col-12 text-right">
+                            <button type="submit" class="btn btn-success"><i class="icon wb-check"></i> 提 交</button>
+                        </div>
+                    </div>
+                </form>
+            </div>
+        </div>
+    </div>
 
 @endsection
 @section('script')
-	<script src="/assets/global/vendor/bootstrap-select/bootstrap-select.min.js"></script>
-	<script src="/assets/global/js/Plugin/bootstrap-select.js"></script>
-	{{--<script src="/theme/global/vendor/dropify/dropify.min.js"></script>--}}
-	{{--<script src="/theme/global/js/Plugin/dropify.js"></script>--}}
+    <script src="/assets/global/vendor/bootstrap-select/bootstrap-select.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/ascolor/jquery-asColor.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/asgradient/jquery-asGradient.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/ascolorpicker/jquery-asColorPicker.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/dropify/dropify.min.js" type="text/javascript"></script>
+    <script src="/assets/global/js/Plugin/bootstrap-select.js" type="text/javascript"></script>
+    <script src="/assets/global/js/Plugin/ascolorpicker.js" type="text/javascript"></script>
+    <script src="/assets/global/js/Plugin/dropify.js" type="text/javascript"></script>
 
-	<script type="text/javascript">
+    <script type="text/javascript">
         // 选择商品类型
         $("input[name='type']").change(function () {
-            var type = $(this).val();
+            const type = $(this).val();
             if (type == 3) {
                 $(".package-money").hide();
             } else {
                 $(".package-money").show();
             }
         });
-	</script>
+    </script>
 @endsection

+ 144 - 166
resources/views/shop/editGoods.blade.php

@@ -1,209 +1,187 @@
 @extends('admin.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-select/bootstrap-select.min.css">
-    {{--<link rel="stylesheet" href="/theme/global/vendor/dropify/dropify.min.css">--}}
+    <link href="/assets/global/vendor/bootstrap-select/bootstrap-select.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/vendor/ascolorpicker/asColorPicker.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/vendor/dropify/dropify.min.css" type="text/css" rel="stylesheet">
+    <style type="text/css">
+        .text-help {
+            padding-left: 1.0715rem;
+        }
+    </style>
 @endsection
 @section('content')
     <div class="page-content container">
-        <div class="panel">
+        <div class="panel panel-bordered">
             <div class="panel-heading">
-                <h2 class="panel-title">编辑商品</h2>
+                <h1 class="panel-title"><i class="icon wb-shopping-cart" aria-hidden="true"></i>编辑商品</h1>
             </div>
             @if (Session::has('successMsg'))
-                <div class="alert alert-success" role="alert">
-                    <button class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span><span class="sr-only">{{trans('home.close')}}</span></button>
+                <div class="alert alert-success alert-dismissible" role="alert">
+                    <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
                     {{Session::get('successMsg')}}
                 </div>
-                @if($errors->any())
-                    <div class="alert alert-danger" role="alert">
-                        <button class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span><span class="sr-only">{{trans('home.close')}}</span></button>
-                        <strong>错误:</strong> {{$errors->first()}}
+            @endif
+            @if($errors->any())
+                <div class="alert alert-danger alert-dismissible" role="alert">
+                    <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
+                    <strong>错误:</strong> {{$errors->first()}}
+                </div>
+            @endif
+            <div class="alert alert-info alert-dismissible" role="alert">
+                <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
+                <strong>警告:</strong>购买新套餐则会覆盖所有已购但未过期的旧套餐并删除这些旧套餐对应的流量,所以设置商品时请务必注意类型和有效期,流量包则可叠加
+            </div>
+            <div class="panel-body">
+                <form action="/shop/editGoods/{{$goods->id}}" method="post" enctype="multipart/form-data" class="form-horizontal" role="form">
+                    <div class="form-group row">
+                        <label class="col-md-2 col-form-label" for="type">类型</label>
+                        <div class="col-md-10 d-flex align-items-center">
+                            <div class="radio-custom radio-primary radio-inline">
+                                <input type="radio" name="type" value="1" @if($goods->type == 1) checked @endif disabled/>
+                                <label for="type">流量包</label>
+                            </div>
+                            <div class="radio-custom radio-primary radio-inline">
+                                <input type="radio" name="type" value="2" @if($goods->type == 2) checked @endif disabled/>
+                                <label for="type">套餐</label>
+                            </div>
+                            <div class="radio-custom radio-primary radio-inline">
+                                <input type="radio" name="type" value="3" @if($goods->type == 3) checked @endif disabled/>
+                                <label for="type">充值</label>
+                            </div>
+                        </div>
+                        <span class="offset-md-2 text-help"> 套餐与账号有效期有关,流量包只扣可用流量,不影响有效期 </span>
                     </div>
-                @else
-                    <div class="alert alert-info" role="alert">
-                        <button class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span><span class="sr-only">{{trans('home.close')}}</span></button>
-                        <strong>警告:</strong>购买新套餐则会覆盖所有已购但未过期的旧套餐并删除这些旧套餐对应的流量,所以设置商品时请务必注意类型和有效期,流量包则可叠加。</p>
+                    <div class="form-group row">
+                        <label class="col-md-2 col-form-label" for="name">名称</label>
+                        <div class="col-md-4">
+                            <input type="text" class="form-control" name="name" id="name" value="{{$goods->name}}" required/>
+                            <input name="_token" value="{{csrf_token()}}" hidden/>
+                            <input name="id" value="{{$goods->id}}" hidden/>
+                        </div>
                     </div>
-                @endif
-                <div class="panel-body">
-                    <form action="{{url('shop/editGoods')}}" method="post" enctype="multipart/form-data" class="form-horizontal" role="form">
+                    @if($goods->type <= 2)
                         <div class="form-group row">
-                            <label for="type" class="col-form-label col-md-2">类型</label>
-                            <ul class="col-md-9 list-unstyled list-inline">
-                                <li class="list-inline-item">
-                                    <div class="radio-custom radio-primary">
-                                        <input type="radio" name="type" value="1" @if($goods->type == 1) checked @endif disabled>
-                                        <label>流量包</label>
-                                    </div>
-                                </li>
-                                <li class="list-inline-item">
-                                    <div class="radio-custom radio-primary">
-                                        <input type="radio" name="type" value="2" @if($goods->type == 2) checked @endif disabled>
-                                        <label>套餐</label>
-                                    </div>
-                                </li>
-                                <li class="list-inline-item">
-                                    <div class="radio-custom radio-primary">
-                                        <input type="radio" name="type" value="3" @if($goods->type == 3) checked @endif disabled>
-                                        <label>充值</label>
-                                    </div>
-                                </li>
-                            </ul>
+                            <label class="col-md-2 col-form-label" for="logo">商品图片</label>
+                            <div class="col-md-6">
+                                <input type="file" id="logo" name="logo" data-plugin="dropify" data-default-file=@if($goods->logo){{$goods->logo}}@else"/assets/images/noimage.png"@endif/>
+                            </div>
                         </div>
                         <div class="form-group row">
-                            <label class="col-form-label col-md-2">商品名称</label>
+                            <label class="col-md-2 col-form-label" for="desc">描述</label>
                             <div class="col-md-8">
-                                <input type="text" class="form-control" name="name" value="{{$goods->name}}" id="name" placeholder="" required>
-                                <input type="hidden" name="id" value="{{$goods->id}}"/>
-                                <input type="hidden" name="_token" value="{{csrf_token()}}"/>
+                                <textarea class="form-control" rows="2" name="desc" id="desc" placeholder="商品的简单描述">{{$goods->desc}}</textarea>
                             </div>
                         </div>
-                    <!--
-					<div class="form-group row">
-						<label class="col-form-label col-md-2">商品图片</label>
-						<div class="col-md-6">
-							<input type="file" id="logo" name="logo" data-plugin="dropify" data-default-file= @if ($goods->logo) {{$goods->logo}} @else /assets/images/noimage.png @endif />
-							<button type="submit" class="btn btn-success float-right mt-10">提交</button>
-						</div>
-					</div>
-					-->
                         <div class="form-group row">
-                            <label class="col-form-label col-md-2">描述</label>
+                            <label class="col-md-2 col-form-label" for="info">自定义列表</label>
                             <div class="col-md-8">
-                                <textarea class="form-control" rows="1" name="info" id="info" placeholder="商品的简单描述">{{$goods->info}}</textarea>
+                                <textarea class="form-control" rows="6" name="info" id="info" placeholder="商品的自定义列表添加">{{$goods->info}}</textarea>
                             </div>
+                            <span class="offset-md-2 text-help"> 每行内容请以<code>&lt;li&gt;</code> 开头 <code>&lt;/li&gt;</code> 结尾</span>
                         </div>
+                    @endif
+                    <div class="form-group row">
+                        <label class="col-md-2 col-form-label" for="price">售价</label>
+                        <div class="col-md-4 input-group">
+                            <input type="number" class="form-control" name="price" id="price" value="{{$goods->price}}" required/>
+                            <span class="input-group-text">元</span>
+                        </div>
+                    </div>
+                    @if($goods->type <= 2)
                         <div class="form-group row">
-                            <label class="col-form-label col-md-2">列表</label>
-                            <div class="col-md-8">
-                                <textarea class="form-control" rows="4" name="desc" id="desc" placeholder="商品的列表添加">{{$goods->desc}}</textarea>
+                            <label class="col-md-2 col-form-label" for="traffic">内含流量</label>
+                            <div class="col-md-4 input-group">
+                                <input type="number" class="form-control" name="traffic" id="traffic" value="{{$goods->traffic}}" disabled/>
+                                <span class="input-group-text">MB</span>
                             </div>
                         </div>
                         <div class="form-group row">
-                            <label class="col-form-label col-md-2">售价</label>
-                            <div class="col-md-2 input-group">
-                                <input type="text" class="form-control" name="price" value="{{$goods->price}}" id="price" placeholder="" required>
-                                <span class="input-group-text">元</span>
+                            <label class="col-md-2 col-form-label" for="labels">标签</label>
+                            <div class="col-md-7">
+                                <select class="form-control show-tick" name="labels[]" id="labels" data-plugin="selectpicker" data-style="btn-outline btn-primary" multiple>
+                                    @foreach($label_list as $label)
+                                        <option value="{{$label->id}}" @if(in_array($label->id, $goods->labels)) selected @endif>{{$label->name}}</option>
+                                    @endforeach
+                                </select>
                             </div>
+                            <span class="offset-md-2 text-help"> 自动给购买此商品的用户打上相应的标签 </span>
                         </div>
-                        @if($goods->type <= 2)
-                            <div class="form-group row">
-                                <label class="col-form-label col-md-2">内含流量</label>
-                                <div class="col-md-3 input-group">
-                                    <input type="text" class="form-control" name="traffic" value="{{$goods->traffic}}" id="traffic" placeholder="" disabled>
-                                    <span class="input-group-text">MB</span>
-                                </div>
+                        <div class="form-group row">
+                            <label class="col-md-2 col-form-label" for="days">有效期</label>
+                            <div class="col-md-4 input-group">
+                                <input type="number" class="form-control" name="days" id="days" value="{{$goods->days}}" disabled/>
+                                <span class="input-group-text">天</span>
                             </div>
-                            <div class="form-group row">
-                                <label for="labels" class="col-md-2 col-form-label">标签</label>
-                                <div class="col-md-4">
-                                    <select data-plugin="selectpicker" data-style="btn-outline btn-primary" class="form-control show-tick" id="labels" name="labels[]" multiple>
-                                        @foreach($label_list as $label)
-                                            <option value="{{$label->id}}" @if(in_array($label->id, $goods->labels)) selected @endif>{{$label->name}}</option>
-                                        @endforeach
-                                    </select>
-                                </div>
-                                <span class="text-help offset-md-2"> 自动给购买此商品的用户打上相应的标签 </span>
+                            <span class="text-help"> 到期后会自动从总流量扣减对应的流量 </span>
+                        </div>
+                        <div class="form-group row">
+                            <label class="col-md-2 col-form-label" for="sort">排序</label>
+                            <div class="col-md-4">
+                                <input type="number" class="form-control" name="sort" id="sort" value="{{$goods->sort}}"/>
                             </div>
-                            <div class="form-group row">
-                                <label class="col-form-label col-md-2">有效期</label>
-                                <div class="col-md-6 input-group">
-                                    <input type="text" class="form-control" name="days" value="{{$goods->days}}" id="days" placeholder="" disabled>
-                                    <span class="input-group-text">天</span>
-                                </div>
-                                <span class="text-help offset-md-2"> 到期后会自动从总流量扣减对应的流量 </span>
+                            <span class="text-help"> 排序值越大排越前 </span>
+                        </div>
+                        <div class="form-group row">
+                            <label class="col-md-2 col-form-label" for="color">颜色</label>
+                            <div class="col-md-4">
+                                <input type="text" class="form-control" name="color" id="color" data-plugin="asColorPicker" data-mode="simple" value="{{$goods->color}}"/>
                             </div>
-                            <div class="form-group row">
-                                <label for="sort" class="col-md-2 col-form-label">排序</label>
-                                <div class="col-md-2">
-                                    <input type="text" class="form-control" name="sort" value="{{$goods->sort}}" id="sort" placeholder="">
-                                    <span class="text-help offset-md-2"> 值越大排越前 </span>
+                        </div>
+                        <div class="form-group row">
+                            <label class="col-md-2 col-form-label" for="is_hot">热销</label>
+                            <div class="col-md-10 d-flex align-items-center">
+                                <div class="radio-custom radio-primary radio-inline">
+                                    <input type="radio" name="is_hot" value="1" @if($goods->is_hot == 1) checked @endif/>
+                                    <label for="is_hot">是</label>
+                                </div>
+                                <div class="radio-custom radio-primary radio-inline">
+                                    <input type="radio" name="is_hot" value="0" @if($goods->is_hot == 0) checked @endif/>
+                                    <label for="is_hot">否</label>
                                 </div>
                             </div>
-                            <div class="form-group row">
-                                <label for="color" class="col-md-2 col-form-label">颜色</label>
-                                <div class="col-md-4">
-                                    <select data-plugin="selectpicker" data-style="btn-outline btn-primary" class="form-control col-md-4" name="color" id="color">
-                                        <option class="bg-red-700 text-white" value="red" @if($goods->color == 'red') selected @endif>红</option>
-                                        <option class="bg-pink-700 text-white" value="pink" @if($goods->color == 'pink') selected @endif>粉红</option>
-                                        <option class="bg-purple-700 text-white" value="purple" @if($goods->color == 'purple') selected @endif>紫</option>
-                                        <option class="bg-indigo-700 text-white" value="indigo" @if($goods->color == 'indigo') selected @endif>靛青</option>
-                                        <option class="bg-blue-700 text-white" value="blue" @if($goods->color == 'blue') selected @endif>蓝</option>
-                                        <option class="bg-cyan-700 text-white" value="cyan" @if($goods->color == 'cyan') selected @endif>青</option>
-                                        <option class="bg-teal-700 text-white" value="teal" @if($goods->color == 'teal') selected @endif >深藍綠</option>
-                                        <option class="bg-green-700 text-white" value="green" @if($goods->color == 'green') selected @endif>绿</option>
-                                        <option class="bg-light-green-700 text-white" value="light-green" @if($goods->color == 'light-green') selected @endif>浅绿</option>
-                                        <option class="bg-yellow-700 text-white" value="yellow" @if($goods->color == 'yellow') selected @endif>黄</option>
-                                        <option class="bg-orange-700 text-white" value="orange" @if($goods->color == 'orange') selected @endif>橙</option>
-                                        <option class="bg-brown-700 text-white" value="brown" @if($goods->color == 'brown') selected @endif>棕</option>
-                                        <option class="bg-grey-700 text-white" value="grey" @if($goods->color == 'grey') selected @endif>灰</option>
-                                        <option class="bg-blue-grey-700 text-white" value="blue-grey" @if($goods->color == 'blue-grey') selected @endif>蓝灰</option>
-                                    </select>
+                        </div>
+                        <div class="form-group row">
+                            <label class="col-md-2 col-form-label" for="is_limit">限购</label>
+                            <div class="col-md-10 d-flex align-items-center">
+                                <div class="radio-custom radio-primary radio-inline">
+                                    <input type="radio" name="is_limit" value="1" @if($goods->is_limit == 1) checked @endif/>
+                                    <label for="is_limit">是</label>
+                                </div>
+                                <div class="radio-custom radio-primary radio-inline">
+                                    <input type="radio" name="is_limit" value="0" @if($goods->is_limit == 0) checked @endif/>
+                                    <label for="is_limit">否</label>
                                 </div>
                             </div>
-                            <div class="form-group row">
-                                <label for="is_hot" class="col-md-2 col-form-label">热销</label>
-                                <ul class="col-md-10 list-unstyled list-inline">
-                                    <li class="list-inline-item">
-                                        <div class="radio-custom radio-primary">
-                                            <input type="radio" name="is_hot" value="1" @if($goods->is_hot == 1) checked @endif>
-                                            <label>是</label>
-                                        </div>
-                                    </li>
-                                    <li class="list-inline-item">
-                                        <div class="radio-custom radio-primary">
-                                            <input type="radio" name="is_hot" value="0" @if($goods->is_hot == 0) checked @endif>
-                                            <label>否</label>
-                                        </div>
-                                    </li>
-                                </ul>
+                        </div>
+                    @endif
+                    <div class="form-group row">
+                        <label class="col-md-2 col-form-label" for="status">状态</label>
+                        <div class="col-md-10 d-flex align-items-center">
+                            <div class="radio-custom radio-primary radio-inline">
+                                <input type="radio" name="status" value="1" @if($goods->status == 1) checked @endif/>
+                                <label for="status">上架</label>
                             </div>
-                            <div class="form-group row">
-                                <label for="is_limit" class="col-md-2 col-form-label">限购</label>
-                                <ul class="col-md-10 list-unstyled list-inline">
-                                    <li class="list-inline-item">
-                                        <div class="radio-custom radio-primary">
-                                            <input type="radio" name="is_limit" value="1" @if($goods->is_limit == 1) checked @endif>
-                                            <label>是</label>
-                                        </div>
-                                    </li>
-                                    <li class="list-inline-item">
-                                        <div class="radio-custom radio-primary">
-                                            <input type="radio" name="is_limit" value="0" @if($goods->is_limit == 0) checked @endif>
-                                            <label>否</label>
-                                        </div>
-                                    </li>
-                                </ul>
+                            <div class="radio-custom radio-primary radio-inline">
+                                <input type="radio" name="status" value="0" @if($goods->status == 0) checked @endif/>
+                                <label for="status">下架</label>
                             </div>
-                        @endif
-                        <div class="form-group row last">
-                            <label class="col-form-label col-md-2">状态</label>
-                            <ul class="col-md-10 list-unstyled list-inline">
-                                <li class="list-inline-item">
-                                    <div class="radio-custom radio-primary">
-                                        <input type="radio" name="status" value="1" {{$goods->status == 1 ? 'checked' : ''}}>
-                                        <label>上架</label>
-                                    </div>
-                                </li>
-                                <li class="list-inline-item">
-                                    <div class="radio-custom radio-primary">
-                                        <input type="radio" name="status" value="0" {{$goods->status == 0 ? 'checked' : ''}}>
-                                        <label>下架</label>
-                                    </div>
-                                </li>
-                            </ul>
                         </div>
-                        <div class="form-actions">
-                            <button type="submit" class="btn btn-success"><i class="icon wb-check"></i> 提 交</button>
-                        </div>
-                    </form>
-                </div>
+                    </div>
+                    <div class="form-actions col-12 text-right">
+                        <button type="submit" class="btn btn-success"><i class="icon wb-check"></i> 提 交</button>
+                    </div>
+                </form>
+            </div>
         </div>
     </div>
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/bootstrap-select/bootstrap-select.min.js"></script>
-    <script src="/assets/global/js/Plugin/bootstrap-select.js"></script>
-    {{--<script src="/theme/global/vendor/dropify/dropify.min.js"></script>--}}
-    {{--<script src="/theme/global/js/Plugin/dropify.js"></script>--}}
+    <script src="/assets/global/vendor/bootstrap-select/bootstrap-select.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/ascolor/jquery-asColor.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/asgradient/jquery-asGradient.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/ascolorpicker/jquery-asColorPicker.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/dropify/dropify.min.js" type="text/javascript"></script>
+    <script src="/assets/global/js/Plugin/bootstrap-select.js" type="text/javascript"></script>
+    <script src="/assets/global/js/Plugin/ascolorpicker.js" type="text/javascript"></script>
+    <script src="/assets/global/js/Plugin/dropify.js" type="text/javascript"></script>
 @endsection

+ 48 - 34
resources/views/shop/goodsList.blade.php

@@ -1,25 +1,45 @@
 @extends('admin.layouts')
-
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
-    <div class="page-content container-fluid">
-        <div class="panel">
+    <div class="page-content container">
+        <div class="panel panel-bordered">
             <div class="panel-heading">
-                <h3 class="panel-title">商品列表</h3>
+                <h1 class="panel-title"><i class="icon wb-shopping-cart" aria-hidden="true"></i>商品列表</h1>
                 <div class="panel-actions">
-                    <button class="btn btn-primary" onclick="addGoods()"><i class="icon wb-plus"></i>添加商品</button>
+                    <a href="/shop/addGoods" class="btn btn-primary"><i class="icon wb-plus"></i>添加商品</a>
                 </div>
             </div>
             <div class="panel-body">
-                <table class="text-center" data-toggle="table" data-mobile-responsive="true">
+                <div class="form-row">
+                    <div class="form-group col-lg-2 col-sm-4">
+                        <select class="form-control" id="type" name="type" onChange="Search()">
+                            <option value="" @if(Request::get('type') == '') selected hidden @endif>类型</option>
+                            <option value="1" @if(Request::get('type') == '1') selected hidden @endif>流量包</option>
+                            <option value="2" @if(Request::get('type') == '2') selected hidden @endif>套餐</option>
+                            <option value="3" @if(Request::get('type') == '3') selected hidden @endif>余额充值</option>
+                        </select>
+                    </div>
+                    <div class="form-group col-lg-2 col-sm-4">
+                        <select class="form-control" id="status" name="status" onChange="Search()">
+                            <option value="" @if(Request::get('status') == '') selected hidden @endif>状态</option>
+                            <option value="1" @if(Request::get('status') == '1') selected hidden @endif>上架</option>
+                            <option value="0" @if(Request::get('status') == '0') selected hidden @endif>下架</option>
+                        </select>
+                    </div>
+                    <div class="form-group col-lg-2 col-sm-4 btn-group">
+                        <button class="btn btn-primary" onclick="Search()">搜索</button>
+                        <a href="/shop/goodsList" class="btn btn-danger">重置</a>
+                    </div>
+                </div>
+                <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
                     <thead class="thead-default">
                     <tr>
                         <th> #</th>
                         <th> 名称</th>
                         <th> 类型</th>
-                        <!-- <th> 图片 </th> -->
+                        <th> 图片</th>
                         <th> 内含流量</th>
                         <th> 售价</th>
                         <th> 排序</th>
@@ -32,7 +52,7 @@
                     <tbody>
                     @if($goodsList->isEmpty())
                         <tr>
-                            <td colspan="10">暂无数据</td>
+                            <td colspan="11">暂无数据</td>
                         </tr>
                     @else
                         @foreach($goodsList as $goods)
@@ -48,7 +68,11 @@
                                         充值
                                     @endif
                                 </td>
-                            <!-- <td> @if($goods->logo) <a href="{{$goods->logo}}" class="fancybox"><img src="{{$goods->logo}}"/></a> @endif </td> -->
+                                <td>
+                                    @if($goods->logo)
+                                        <a href="{{$goods->logo}}" target="_blank"><img src="{{$goods->logo}}" alt="logo" class="h-50"/></a>
+                                    @endif
+                                </td>
                                 <td> {{$goods->type == 3 ? '' : $goods->traffic_label}} </td>
                                 <td> {{$goods->price}}元</td>
                                 <td> {{$goods->sort}} </td>
@@ -75,8 +99,8 @@
                                 </td>
                                 <td>
                                     <div class="btn-group">
-                                        <button class="btn btn-primary" onclick="editGoods('{{$goods->id}}')"><i class="icon wb-edit"></i></button>
-                                        <button class="btn btn-danger" onclick="delGoods('{{$goods->id}}')"><i class="icon wb-trash"></i></button>
+                                        <a href="/shop/editGoods/{{$goods->id}}" class="btn btn-primary"><i class="icon wb-edit"></i></a>
+                                        <button class="btn btn-danger" onclick="delGoods({{$goods->id}})"><i class="icon wb-trash"></i></button>
                                     </div>
                                 </td>
                             </tr>
@@ -87,13 +111,13 @@
             </div>
             <div class="panel-footer">
                 <div class="row">
-                    <div class="col-md-4 col-sm-4">
+                    <div class="col-sm-4">
                         共 <code>{{$goodsList->total()}}</code> 个商品
                     </div>
-                    <div class="col-md-8 col-sm-8">
-                        <div class="Page navigation float-right">
-                            {{ $goodsList->links() }}
-                        </div>
+                    <div class="col-sm-8">
+                        <nav class="Page navigation float-right">
+                            {{$goodsList->links()}}
+                        </nav>
                     </div>
                 </div>
             </div>
@@ -101,16 +125,14 @@
     </div>
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
-    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
+    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
     <script type="text/javascript">
-        function addGoods() {
-            window.location.href = '/shop/addGoods';
-        }
-
-        // 编辑商品
-        function editGoods(id) {
-            window.location.href = '/shop/editGoods?id=' + id;
+        // 搜索
+        function Search() {
+            const type = $("#type option:selected").val();
+            const status = $("#status option:selected").val();
+            window.location.href = '/shop/goodsList?type=' + type + '&status=' + status;
         }
 
         // 删除商品
@@ -133,13 +155,5 @@
                 }
             });
         }
-
-        // 查看商品图片
-        $(document).ready(function () {
-            $('.fancybox').fancybox({
-                openEffect: 'elastic',
-                closeEffect: 'elastic'
-            })
-        });
     </script>
 @endsection

+ 20 - 27
resources/views/subscribe/deviceList.blade.php

@@ -1,6 +1,6 @@
 @extends('admin.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container-fluid">
@@ -9,21 +9,21 @@
                 <h3 class="panel-title">订阅设备列表</h3>
             </div>
             <div class="panel-body">
-                <div class="form-inline pb-20">
-                    <div class="form-group">
-                        <select name="status" id="status" class="form-control">
+                <div class="form-row">
+                    <div class="form-group col-lg-3 col-sm-6">
+                        <select name="status" id="status" class="form-control" onChange="Search()">
                             <option value="" @if(Request::get('status') == '') selected hidden @endif>账号状态</option>
                             <option value="-1" @if(Request::get('status') == '-1') selected hidden @endif>禁用</option>
                             <option value="0" @if(Request::get('status') == '0') selected hidden @endif>未激活</option>
                             <option value="1" @if(Request::get('status') == '1') selected hidden @endif>正常</option>
                         </select>
                     </div>
-                    <div class="btn-group">
-                        <button class="btn btn-primary" onclick="doSearch()">搜索</button>
-                        <button class="btn btn-danger" onclick="doReset()">重置</button>
+                    <div class="form-group col-lg-2 col-sm-6 btn-group">
+                        <button class="btn btn-primary" onclick="Search()">搜索</button>
+                        <a href="/subscribe/deviceList" class="btn btn-danger">重置</a>
                     </div>
                 </div>
-                <table class="text-center" data-toggle="table" data-mobile-responsive="true">
+                <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
                     <thead class="thead-default">
                     <tr>
                         <th> #</th>
@@ -63,14 +63,13 @@
             </div>
             <div class="panel-footer">
                 <div class="row">
-                    <div class="col-md-4 col-sm-4">
-						<p class="dataTables_info" role="status" aria-live="polite">共
-							<code>{{$deviceList->total()}}</code> 条记录</p>
+                    <div class="col-sm-4">
+                        共 <code>{{$deviceList->total()}}</code> 条记录
                     </div>
-                    <div class="col-md-8 col-sm-8">
-						<div class="float-right">
-							<nav aria-label="Page navigation">{{ $deviceList->links() }}</nav>
-						</div>
+                    <div class="col-sm-8">
+                        <nav class="Page navigation float-right">
+                            {{$deviceList->links()}}
+                        </nav>
                     </div>
                 </div>
             </div>
@@ -78,19 +77,13 @@
     </div>
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
-    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
+    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
     <script type="text/javascript">
         // 搜索
-        function doSearch() {
-			const status = $("#status option:selected").val();
-
-			window.location.href = '/subscribe/deviceList' + '?status=' + status;
-        }
-
-        // 重置
-        function doReset() {
-            window.location.href = '/subscribe/deviceList';
+        function Search() {
+            const status = $("#status option:selected").val();
+            window.location.href = '/subscribe/deviceList' + '?status=' + status;
         }
 
         // 启用禁用订阅设备
@@ -107,4 +100,4 @@
             });
         }
     </script>
-@endsection
+@endsection

+ 33 - 26
resources/views/subscribe/subscribeList.blade.php

@@ -1,6 +1,6 @@
 @extends('admin.layouts')
 @section('css')
-    <link rel="stylesheet" href="/theme/global/vendor/bootstrap-table/bootstrap-table.min.css">
+    <link href="/theme/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container-fluid">
@@ -9,23 +9,27 @@
                 <h3 class="panel-title">订阅列表</h3>
             </div>
             <div class="panel-body">
-                <div class="form-inline pb-20">
-                    <div class="form-group">
-                        <input type="text" class="form-control w-60" name="user_id" value="{{Request::get('user_id')}}" id="user_id" placeholder="ID">
-                        <input type="text" class="form-control w-150" name="username" value="{{Request::get('username')}}" id="username" placeholder="用户名">
-                        <select name="status" id="status" class="form-control">
+                <div class="form-row">
+                    <div class="form-group col-lg-2 col-sm-6">
+                        <input type="text" class="form-control" name="user_id" id="user_id" value="{{Request::get('user_id')}}" placeholder="ID"/>
+                    </div>
+                    <div class="form-group col-lg-4 col-sm-6">
+                        <input type="text" class="form-control" name="username" id="username" value="{{Request::get('username')}}" placeholder="用户名"/>
+                    </div>
+                    <div class="form-group col-lg-3 col-sm-6">
+                        <select name="status" id="status" class="form-control" onChange="Search()">
                             <option value="" @if(Request::get('status') == '') selected hidden @endif>账号状态</option>
                             <option value="-1" @if(Request::get('status') == '-1') selected hidden @endif>禁用</option>
                             <option value="0" @if(Request::get('status') == '0') selected hidden @endif>未激活</option>
                             <option value="1" @if(Request::get('status') == '1') selected hidden @endif>正常</option>
                         </select>
                     </div>
-                    <div class="btn-group">
-                        <button class="btn btn-primary" onclick="doSearch()">搜索</button>
-                        <button class="btn btn-danger" onclick="doReset()">重置</button>
+                    <div class="form-group col-lg-2 col-sm-6 btn-group">
+                        <button class="btn btn-primary" onclick="Search()">搜索</button>
+                        <a href="/subscribe/subscribeList" class="btn btn-danger">重置</a>
                     </div>
                 </div>
-                <table class="text-center" data-toggle="table" data-mobile-responsive="true">
+                <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
                     <thead class="thead-default">
                     <tr>
                         <th> #</th>
@@ -77,11 +81,13 @@
             </div>
             <div class="panel-footer">
                 <div class="row">
-                    <div class="col-md-4 col-sm-4">
+                    <div class="col-sm-4">
                         共 <code>{{$subscribeList->total()}}</code> 条记录
                     </div>
-                    <div class="col-md-8 col-sm-8">
-                            <nav class="Page navigation float-right">{{ $subscribeList->links() }}</nav>
+                    <div class="col-sm-8">
+                        <nav class="Page navigation float-right">
+                            {{$subscribeList->links()}}
+                        </nav>
                     </div>
                 </div>
             </div>
@@ -89,23 +95,24 @@
     </div>
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
-    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
+    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
     <script type="text/javascript">
-        // 搜索
-        function doSearch() {
-            var user_id = $("#user_id").val();
-            var username = $("#username").val();
-            var status = $("#status option:checked").val();
+        //回车检测
+        $(document).on("keypress", "input", function (e) {
+            if (e.which === 13) {
+                Search()
+            }
+        });
 
+        // 搜索
+        function Search() {
+            const user_id = $("#user_id").val();
+            const username = $("#username").val();
+            const status = $("#status option:selected").val();
             window.location.href = '/subscribe/subscribeList' + '?user_id=' + user_id + '&username=' + username + '&status=' + status;
         }
 
-        // 重置
-        function doReset() {
-            window.location.href = '/subscribe/subscribeList';
-        }
-
         // 启用禁用用户的订阅
         function setSubscribeStatus(id, status) {
             $.post("/subscribe/setSubscribeStatus", {
@@ -121,4 +128,4 @@
             });
         }
     </script>
-@endsection
+@endsection

+ 4 - 4
resources/views/ticket/addTicket.blade.php

@@ -12,18 +12,18 @@
                 <h1 class="panel-title cyan-600"><i class="icon wb-add"></i>发起工单</h1>
             </div>
             <div class="panel-body">
-                <form action="/ticket/addTicket" method="post" enctype="multipart/form-data" class="form-horizontal" onsubmit="return do_submit();">
+                <form action="/ticket/addTicket" method="post" enctype="multipart/form-data" class="form-horizontal" onsubmit="return Submit()">
                     <div class="form-body">
                         <div class="form-group">
                             <label class="control-label col-md-2">用户名</label>
                             <div class="col-md-8">
-                                <input type="text" class="form-control" name="username" value="{{Request::get('username')}}" id="username" autocomplete="off" autofocus required>
+                                <input type="text" class="form-control" name="username" value="{{Request::get('username')}}" id="username" autocomplete="off" autofocus required/>
                             </div>
                         </div>
                         <div class="form-group">
                             <label class="control-label col-md-2">标题</label>
                             <div class="col-md-8">
-                                <input type="text" class="form-control" name="title" id="title" autocomplete="off" required>
+                                <input type="text" class="form-control" name="title" id="title" autocomplete="off" required/>
                             </div>
                         </div>
                         <div class="form-group">
@@ -48,7 +48,7 @@
 @section('script')
     <script type="text/javascript">
         // ajax同步提交
-        function do_submit() {
+        function Submit() {
             const username = $('#username').val();
             const title = $('#title').val();
             const content = $('#content').val();

+ 10 - 6
resources/views/ticket/replyTicket.blade.php

@@ -1,6 +1,6 @@
 @extends('admin.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/examples/css/structure/chat.css">
+    <link href="/assets/examples/css/structure/chat.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content">
@@ -19,7 +19,7 @@
                         <div class="chat chat-left">
                             <div class="chat-avatar">
                                 <p class="avatar" data-toggle="tooltip" data-placement="right" title="{{trans('home.ticket_reply_me')}}">
-                                    <img src="/assets/images/astronaut.svg" alt="{{trans('home.ticket_reply_me')}}">
+                                    <img src="/assets/images/astronaut.svg" alt="{{trans('home.ticket_reply_me')}}"/>
                                 </p>
                             </div>
                             <div class="chat-body">
@@ -36,11 +36,11 @@
                                 <div class="chat-avatar">
                                     @if ($reply->user->is_admin)
                                         <p class="avatar" data-toggle="tooltip" data-placement="left" title="{{trans('home.ticket_reply_master')}}">
-                                            <img src="/assets/images/logo64.png" alt="{{trans('home.ticket_reply_master')}}">
+                                            <img src="/assets/images/logo64.png" alt="{{trans('home.ticket_reply_master')}}"/>
                                         </p>
                                     @else
                                         <p class="avatar" data-toggle="tooltip" data-placement="left" title="{{trans('home.ticket_reply_me')}}">
-                                            <img src="/assets/images/astronaut.svg" alt="{{trans('home.ticket_reply_me')}}">
+                                            <img src="/assets/images/astronaut.svg" alt="{{trans('home.ticket_reply_me')}}"/>
                                         </p>
                                     @endif
                                 </div>
@@ -59,9 +59,9 @@
             </div>
             @if($ticket->status != 2)
                 <div class="panel-footer pb-30">
-                    <form onkeydown="if (event.keyCode === 13){replyTicket()}">
+                    <form>
                         <div class="input-group">
-                            <input id="editor" type="text/plain" class="form-control" placeholder="{{trans('home.ticket_reply_placeholder')}}">
+                            <input id="editor" type="text" class="form-control" placeholder="{{trans('home.ticket_reply_placeholder')}}">
                             <span class="input-group-btn">
                                 <button type="button" class="btn btn-primary" onclick="replyTicket()"> {{trans('home.ticket_reply')}}</button>
                             </span>
@@ -74,6 +74,10 @@
 @endsection
 @section('script')
     <script type="text/javascript">
+        //回车检测
+        $(document).on("keypress", "input", function(e){
+            if(e.which === 13){replyTicket()}
+        });
         // 关闭工单
         function closeTicket() {
             $.ajax({

+ 27 - 32
resources/views/ticket/ticketList.blade.php

@@ -1,6 +1,6 @@
 @extends('admin.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container-fluid">
@@ -8,22 +8,22 @@
             <div class="panel-heading">
                 <h3 class="panel-title">工单列表</h3>
                 <div class="panel-actions">
-                    <button class="btn btn-primary btn-animate btn-animate-side" onclick="addTicket()">
+                    <a href="/ticket/addTicket" class="btn btn-primary btn-animate btn-animate-side">
                         <span><i class="icon wb-plus" aria-hidden="true"></i> {{trans('home.ticket_table_new_button')}}</span>
-                    </button>
+                    </a>
                 </div>
             </div>
             <div class="panel-body">
-                <div class="form-inline mb-20">
-                    <div class="form-group">
-                        <input type="text" class="form-control" name="username" value="{{Request::get('username')}}" id="username" placeholder="用户名" autocomplete="off" onkeydown="if(event.keyCode==13){do_search();}">
+                <div class="form-row">
+                    <div class="form-group col-lg-3 col-sm-6">
+                        <input type="text" class="form-control" name="username" id="username" value="{{Request::get('username')}}" placeholder="用户名" autocomplete="off"/>
                     </div>
-                    <div class="btn-group">
-                        <button class="btn btn-primary" onclick="doSearch()">搜索</button>
-                        <button class="btn btn-danger" onclick="doReset()">重置</button>
+                    <div class="form-group col-lg-2 col-sm-6 btn-group">
+                        <button class="btn btn-primary" onclick="Search()">搜索</button>
+                        <a href="/ticket/ticketList" class="btn btn-danger">重置</a>
                     </div>
                 </div>
-                <table class="text-center" data-toggle="table" data-mobile-responsive="true">
+                <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
                     <thead class="thead-default">
                     <tr>
                         <th> #</th>
@@ -46,12 +46,13 @@
                                         【账号已删除】
                                     @else
                                         <a href="/admin/userList?id={{$ticket->user->id}}" target="_blank">{{$ticket->user->username}}</a>
+                                    @endif
                                 </td>
-                                @endif
+
                                 <td>
                                     <a href="/ticket/replyTicket?id={{$ticket->id}}" target="_blank">{{$ticket->title}}</a>
                                 </td>
-                                <td style="text-align: center;">
+                                <td class="text-center">
                                     @if ($ticket->status == 0)
                                         <span class="badge badge-lg badge-info"> 待处理 </span>
                                     @elseif ($ticket->status == 1)
@@ -68,11 +69,13 @@
             </div>
             <div class="panel-footer">
                 <div class="row">
-                    <div class="col-md-4 col-sm-4">
+                    <div class="col-sm-4">
                         共 <code>{{$ticketList->total()}}</code> 个工单
                     </div>
-                    <div class="col-md-8 col-sm-8">
-                        <nav class="Page navigation float-right">{{ $ticketList->links() }}</nav>
+                    <div class="col-sm-8">
+                        <nav class="Page navigation float-right">
+                            {{$ticketList->links()}}
+                        </nav>
                     </div>
                 </div>
             </div>
@@ -80,28 +83,20 @@
     </div>
 @endsection
 @section('script')
-    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js"></script>
-    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js"></script>
+    <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
     <script type="text/javascript">
-        // 发起工单
-        function addTicket() {
-            window.location.href = '/ticket/addTicket';
-        }
-
-        // 回复工单
-        function reply(id) {
-            window.location.href = '/ticket/replyTicket?id=' + id;
-        }
+        //回车检测
+        $(document).on("keypress", "input", function (e) {
+            if (e.which === 13) {
+                Search()
+            }
+        });
 
         // 搜索
-        function doSearch() {
+        function Search() {
             const username = $("#username").val();
             window.location.href = '/ticket/ticketList?username=' + username;
         }
-
-        // 重置
-        function doReset() {
-            window.location.href = '/ticket/ticketList';
-        }
     </script>
 @endsection

+ 14 - 5
resources/views/user/buy.blade.php

@@ -1,7 +1,6 @@
 @extends('user.layouts')
-
 @section('css')
-    <link rel="stylesheet" href="/assets/examples/css/pages/invoice.css">
+    <link href="/assets/examples/css/pages/invoice.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content">
@@ -104,24 +103,32 @@
                 data: {_token: '{{csrf_token()}}', coupon_sn: coupon_sn},
                 dataType: 'json',
                 success: function (ret) {
+                    console.log(ret);
                     $(".input-group-prepend").remove();
                     if (ret.status === 'success') {
                         $("#coupon_sn").parent().prepend('<div class="input-group-prepend"><span class="input-group-text bg-green-700"><i class="icon wb-check white" aria-hidden="true"></i></span></div>');
                         // 根据类型计算折扣后的总金额
                         let total_price = 0;
-                        if (ret.data.type === '2') {
-                            total_price = goods_price * ret.data.discount / 10;
+                        if (ret.data.type === 2) {
+                            total_price=  goods_price * (1 - ret.data.discount/10);
+                            $(".page-invoice-amount").parent().prepend('<p>优惠码 - '+ret.data.name+' '+ret.data.discount+'折<br> 优惠 <span>¥'+total_price.toFixed(2)+'</span></p>');
+                            total_price = goods_price - total_price;
+                            console.log(total_price);
                         } else {
                             total_price = goods_price - ret.data.amount;
                             total_price = total_price > 0 ? total_price : 0;
+                            if(ret.data.type === 1){
+                                $(".page-invoice-amount").parent().prepend('优惠码-'+ret.data.name+' <span>¥0</span>');
+                            }
                         }
 
                         // 四舍五入,保留2位小数
-                        $(".grand-total").text("¥" + total_price.toFixed(2));
+                        $(".grand-total").text('¥' + total_price.toFixed(2));
                         swal.fire({
                             title: ret.message,
                             type: 'success',
                             timer: 1500,
+                            showConfirmButton: false
                         });
                     } else {
                         $(".grand-total").text("¥" + goods_price);
@@ -130,6 +137,7 @@
                             title: ret.message,
                             type: 'error',
                             timer: 1500,
+                            showConfirmButton: false
                         });
                     }
                 }
@@ -152,6 +160,7 @@
                             title: ret.message,
                             type: 'success',
                             timer: 1300,
+                            showConfirmButton: false
                         });
                         if (pay_type === 4) {
                             // 如果是Alipay支付写入Alipay的支付页面

+ 6 - 4
resources/views/user/help.blade.php

@@ -1,8 +1,8 @@
 @extends('user.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/global/fonts/font-awesome/font-awesome.min.css">
-    <link rel="stylesheet" href="/assets/global/fonts/material-design/material-design.min.css">
-    <style>
+    <link href="/assets/global/fonts/font-awesome/font-awesome.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/fonts/material-design/material-design.min.css" type="text/css" rel="stylesheet">
+    <style type="text/css">
         ol > li {
             margin-bottom: 8px;
         }
@@ -523,7 +523,9 @@
 @section('script')
     <script src="/assets/custom/tour.js" type="text/javascript"></script>
     <script src="/assets/custom/Plugin/clipboardjs/clipboard.min.js" type="text/javascript"></script>
-    <script>
+    <script src="/assets/global/js/Plugin/responsive-tabs.js" type="text/javascript"></script>
+    <script src="/assets/global/js/Plugin/tabs.js" type="text/javascript"></script>
+    <script type="text/javascript">
         // 更换订阅地址
         function exchangeSubscribe() {
             swal.fire({

+ 39 - 45
resources/views/user/index.blade.php

@@ -1,7 +1,7 @@
 @extends('user.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/global/fonts/font-awesome/font-awesome.min.css">
-    <link rel="stylesheet" href="/assets/global/vendor/aspieprogress/asPieProgress.min.css">
+    <link href="/assets/global/fonts/font-awesome/font-awesome.min.css" type="text/css" rel="stylesheet">
+    <link href="/assets/global/vendor/aspieprogress/asPieProgress.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container-fluid">
@@ -12,15 +12,7 @@
                     {{Session::get('successMsg')}}
                 </div>
             @endif
-            {{--            @if(!empty($info['t']))--}}
-            {{--                <div class="col-12 alert alert-info text-center" role="alert">--}}
-            {{--                    <button class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span><span class="sr-only">{{trans('home.close')}}</span></button>--}}
-            {{--                    <button class="site-tour-trigger btn btn-outline-info text-center">点我激活 面板介绍 功能</button>--}}
-            {{--                </div>--}}
-            {{--            @endif--}}
-
-
-            <div class="col-xl-4 col-lg-5 col-md-6">
+            <div class="col-xxl-3 col-xl-4 col-lg-5 col-md-6 col-12">
                 <div class="card card-shadow">
                     <div class="card-block p-20">
                         <button type="button" class="btn btn-floating btn-sm btn-pure">
@@ -33,15 +25,15 @@
                             </a>
                         @endif
                         <div class="content-text text-center mb-0">
-                            @if($info['enable'])
+                            @if(Auth::user()->enable)
                                 <i class="wb-check green-400 font-size-40 mr-10"></i>
                                 <span class="font-size-40 font-weight-100">{{trans('home.enabled')}}</span>
                                 <p class="font-weight-300 m-0 green-500">{{trans('home.normal')}}</p>
-                            @elseif($info['remainDays'] == 0)
+                            @elseif($remainDays == 0)
                                 <i class="wb-close red-400 font-size-40 mr-10"></i>
                                 <span class="font-size-40 font-weight-100">{{trans('home.expired')}}</span>
                                 <p class="font-weight-300 m-0 red-500">{{trans('home.reason_expired')}}</p>
-                            @elseif($info['unusedTransfer'] == 0)
+                            @elseif($unusedTransfer == 0)
                                 <i class="wb-close red-400 font-size-40 mr-10"></i>
                                 <span class="font-size-40 font-weight-100">{{trans('home.disabled')}}</span>
                                 <p class="font-weight-300 m-0 red-500">{{trans('home.reason_traffic_exhausted')}}</p>
@@ -66,19 +58,19 @@
                                 </button>
                                 <span class="font-weight-400">{{trans('home.account_bandwidth_usage')}}</span>
                                 <div class="text-center font-weight-100 font-size-40">
-                                    {{$info['unusedTransfer']}}
+                                    {{flowAutoShow($unusedTransfer)}}
                                 </div>
-                                @if( \App\Components\Helpers::systemConfig()['reset_traffic'] && $info['resetDays'] != 0 && $info['remainDays']>$info['resetDays'])
+                                @if( \App\Components\Helpers::systemConfig()['reset_traffic'] && $resetDays != 0 && $remainDays>$resetDays)
                                     <div class="text-center font-weight-300 blue-grey-500">
-                                        {{trans('home.account_reset_notice', ['reset_day' => $info['resetDays']])}}
+                                        {{trans('home.account_reset_notice', ['reset_day' => $resetDays])}}
                                     </div>
                                 @endif
                             </div>
                             <div class="col-lg-5 col-md-12 col-sm-5">
                                 <div class="w-only-xs-p50 w-only-sm-p75 w-only-md-p50" data-plugin="pieProgress" data-valuemax="100"
                                      data-barcolor="#96A3FA" data-size="100" data-barsize="10"
-                                     data-goal="{{$info['unusedPercent'] * 100}}" aria-valuenow="{{$info['unusedPercent'] * 100}}" role="progressbar">
-                                    <span class="pie-progress-number blue-grey-700 font-size-20">{{$info['unusedPercent'] * 100}}%</span>
+                                     data-goal="{{$unusedPercent * 100}}" aria-valuenow="{{$unusedPercent * 100}}" role="progressbar">
+                                    <span class="pie-progress-number blue-grey-700 font-size-20">{{$unusedPercent * 100}}%</span>
                                 </div>
                             </div>
                         </div>
@@ -91,13 +83,13 @@
                         </button>
                         <span class="font-weight-400">{{trans('home.account_expire')}}</span>
                         <div class="content-text text-center mb-0">
-                            @if($info['remainDays'] != 0)
-                                <span class="font-size-40 font-weight-100">{{$info['remainDays']}} 天</span>
-                                <p class="blue-grey-500 font-weight-300 m-0">{{$info['expire_time']}}</p>
+                            @if($remainDays != 0)
+                                <span class="font-size-40 font-weight-100">{{$remainDays}} 天</span>
+                                <p class="blue-grey-500 font-weight-300 m-0">{{$expireTime}}</p>
                             @else
                                 <span class="font-size-40 font-weight-100">{{trans('home.expired')}}</span>
                                 <br/>
-                                <a href="{{url('services')}}" class="btn btn-danger">{{trans('home.service_buy_button')}}</a>
+                                <a href="/services" class="btn btn-danger">{{trans('home.service_buy_button')}}</a>
                             @endif
                         </div>
                     </div>
@@ -124,20 +116,20 @@
                     </div>
                 @endif
             </div>
-            <div class="col-xl-8 col-lg-7 col-md-6">
-                <div class="row">
-                    <div class="col-xl-4 col-lg-6">
-                        <div class="card card-shadow">
+            <div class="col-xxl-9 col-xl-4col-xl-8 col-lg-7 col-md-6 col-12">
+                <div class="row" data-plugin="matchHeight" data-by-row="true">
+                    <div class="col-xl-4 col-lg-6 pb-30">
+                        <div class="card card-shadow h-full">
                             <div class="card-block text-center p-20">
                                 <i class="font-size-40 wb-wrench"></i>
                                 <h4 class="card-title">客户端</h4>
                                 <p class="card-text">下载 & 教程 </p>
-                                <a href="{{url('help#answer-2')}}" class="btn btn-primary mb-10">前往</a>
+                                <a href="/help#answer-2" class="btn btn-primary mb-10">前往</a>
                             </div>
                         </div>
                     </div>
-                    <div class="col-xl-4 col-lg-6">
-                        <div class="card card-shadow text-center">
+                    <div class="col-xl-4 col-lg-6 pb-30">
+                        <div class="card card-shadow text-center h-full">
                             <div class="card-block">
                                 @if(\App\Components\Helpers::systemConfig()['is_push_bear'] && \App\Components\Helpers::systemConfig()['push_bear_qrcode'])
                                     <h4 class="card-title"><i class="wb-bell mr-10 yellow-600"></i>微信公告推送</h4>
@@ -149,15 +141,17 @@
                                     <p class="card-link btn btn-outline btn-primary">
                                         <i class="wb-lock mr-5"></i>购买套餐后解锁 用户交流群信息</p>
                                 @else
-                                    <a class="card-link btn btn-pill-left btn-info" href="#" target="_blank" rel="noopener">
-                                        <i class="fa fa-qq"></i> QQ群</a>
-                                    <a class="card-link btn btn-pill-right btn-success" href="#" target="_blank" rel="noopener">TG群
-                                        <i class="fa fa-paper-plane"></i></a>
+                                    <div class="btn-group">
+                                        <a class="card-link btn btn-sm btn-pill-left btn-info" href="https://jq.qq.com/?_wv=1027&k=52AI188" target="_blank" rel="noopener">
+                                            <i class="fa fa-qq"></i> QQ群</a>
+                                        <a class="card-link btn btn-sm btn-pill-right btn-success" href="https://t.me/otakucloud" target="_blank" rel="noopener">TG群
+                                            <i class="fa fa-paper-plane"></i></a>
+                                    </div>
                                 @endif
                             </div>
                         </div>
                     </div>
-                    <div class="col-xl-4 col-lg-6">
+                    <div class="col-xl-4 col-lg-6 pb-30">
                         {{--                        <div class="card card-shadow">--}}
                         {{--                            <div class="card-block p-20">--}}
                         {{--                                <h4 class="card-title"><i class="wb-info-circle blue-600 mr-10"></i>账号信息</h4>--}}
@@ -168,8 +162,10 @@
                         {{--                            </div>--}}
                         {{--                        </div>--}}
                     </div>
-                    <div class="col-xl-6 col-lg-12">
-                        <div class="panel panel-info panel-line">
+                </div>
+                <div class="row" data-plugin="matchHeight" data-by-row="true">
+                    <div class="col-xxl-6">
+                        <div class="panel panel-info panel-line h-full">
                             <div class="panel-heading">
                                 <h2 class="panel-title"><i class="wb-volume-high mr-10"></i>{{trans('home.announcement')}}
                                 </h2>
@@ -201,7 +197,7 @@
                         </div>
                     </div>
                     <div class="col-xxl-6">
-                        <div class="panel panel-primary panel-line">
+                        <div class="panel panel-primary panel-line h-full">
                             <div class="panel-heading">
                                 <h1 class="panel-title"><i class="wb-pie-chart mr-10"></i>流量使用</h1>
                                 <div class="panel-actions">
@@ -242,13 +238,11 @@
 @endsection
 @section('script')
     <script src="/assets/custom/Plugin/jquery-qrcode/jquery.qrcode.min.js" type="text/javascript"></script>
-    <script src="/assets/global/vendor/aspieprogress/jquery-asPieProgress.js"></script>
-    <script src="/assets/global/js/Plugin/aspieprogress.js"></script>
-    <script src="/assets/global/vendor/chart-js/Chart.min.js"></script>
-
-    @if(empty($info['t']))
-        <script src="/assets/tour.js" type="text/javascript"></script>
-    @endif
+    <script src="/assets/global/vendor/aspieprogress/jquery-asPieProgress.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/matchheight/jquery.matchHeight-min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/chart-js/Chart.min.js" type="text/javascript"></script>
+    <script src="/assets/global/js/Plugin/aspieprogress.js" type="text/javascript"></script>
+    <script src="/assets/global/js/Plugin/matchheight.js" type="text/javascript"></script>
     <script type="text/javascript">
         // 签到
         function checkIn() {

+ 4 - 5
resources/views/user/invite.blade.php

@@ -14,10 +14,9 @@
                             <h4 class="card-title cyan-600"><i class="icon wb-plus"></i> {{trans('home.invite_code_make')}}
                             </h4>
                             <p class="card-text alert alert-info">
-                                <i class="icon wb-warning red-700"></i> {{trans('home.invite_code_tips1')}}
-                                <strong> {{Auth::user()->invite_num}} </strong> {{trans('home.invite_code_tips2', ['days' => \App\Components\Helpers::systemConfig()['user_invite_days']])}}
+                                <i class="icon wb-warning red-700"></i> {{trans('home.invite_code_tips1')}} <strong> {{$num}} </strong> {{trans('home.invite_code_tips2', ['days' => \App\Components\Helpers::systemConfig()['user_invite_days']])}}
                             </p>
-                            <button type="button" class="btn btn-primary btn-animate btn-animate-side" onclick="makeInvite()" @if(!Auth::user()->invite_num) disabled @endif><i class="icon wb-plus"></i> {{trans('home.invite_code_button')}}
+                            <button type="button" class="btn btn-primary btn-animate btn-animate-side" onclick="makeInvite()" @if(!$num)  disabled @endif><i class="icon wb-plus"></i> {{trans('home.invite_code_button')}}
                             </button>
                         </div>
                     </div>
@@ -77,7 +76,7 @@
                                 </div>
                                 <div class="col-md-8">
                                     <nav class="Page navigation float-right">
-                                        {{ $inviteList->links() }}
+                                        {{$inviteList->links()}}
                                     </nav>
                                 </div>
                             </div>
@@ -92,7 +91,7 @@
     <script type="text/javascript">
         // 生成邀请码
         function makeInvite() {
-            var _token = '{{csrf_token()}}';
+            const _token = '{{csrf_token()}}';
 
             $.ajax({
                 type: "POST",

+ 3 - 7
resources/views/user/invoiceDetail.blade.php

@@ -1,6 +1,6 @@
 @extends('user.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container">
@@ -9,11 +9,7 @@
                 <div class="row">
                     <div class="col-lg-3">
                         <h3>
-                            @if(\App\Components\Helpers::systemConfig()['website_logo'])
-                                <img class="navbar-brand-logo mr-10" src="{{\App\Components\Helpers::systemConfig()['website_logo']}}">
-                            @else
-                                <img class="navbar-brand-logo" src="/assets/images/logo64.png" alt="Otaku Logo">
-                            @endif
+                            <img src="{{\App\Components\Helpers::systemConfig()['website_logo']?\App\Components\Helpers::systemConfig()['website_logo']:'/assets/images/logo64.png'}}" class="navbar-brand-logo" alt="logo">
                             {{\App\Components\Helpers::systemConfig()['website_name']}}
                         </h3>
                     </div>
@@ -28,7 +24,7 @@
                             @if(!$order->is_expire)
                                 @if($order->status == -1)
                                     <button class="btn btn-dark">{{trans('home.invoice_table_closed')}}</button>
-                                    @elseif($order->status == 0)</button>
+                                @elseif($order->status == 0)
                                     <button class="btn btn-default">{{trans('home.invoice_table_wait_payment')}}</button>
                                 @elseif($order->status == 1)
                                     <button class="btn btn-info">{{trans('home.invoice_table_wait_confirm')}}</button>

+ 2 - 2
resources/views/user/invoices.blade.php

@@ -1,6 +1,6 @@
 @extends('user.layouts')
 @section('css')
-    <link rel="stylesheet" href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css">
+    <link href="/assets/global/vendor/bootstrap-table/bootstrap-table.min.css" type="text/css" rel="stylesheet">
 @endsection
 @section('content')
     <div class="page-content container">
@@ -73,7 +73,7 @@
                 </table>
                 <div class="panel-footer">
                     <nav class="Page navigation float-right">
-                        {{ $orderList->links() }}
+                        {{$orderList->links()}}
                     </nav>
                 </div>
             </div>

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio