ソースを参照

Merge branch 'master' into master

Bruskyii Panda 8 年 前
コミット
0d78a61d2a
67 ファイル変更1159 行追加612 行削除
  1. 44 0
      app/Console/Commands/AutoCloseOrderJob.php
  2. 2 0
      app/Console/Kernel.php
  3. 29 6
      app/Http/Controllers/AdminController.php
  4. 202 0
      app/Http/Controllers/Api/YzyController.php
  5. 0 7
      app/Http/Controllers/CouponController.php
  6. 0 7
      app/Http/Controllers/EmailLogController.php
  7. 145 152
      app/Http/Controllers/PaymentController.php
  8. 0 7
      app/Http/Controllers/ShopController.php
  9. 1 1
      app/Http/Controllers/SubscribeController.php
  10. 0 7
      app/Http/Controllers/TicketController.php
  11. 75 50
      app/Http/Controllers/UserController.php
  12. 4 0
      app/Http/Models/Order.php
  13. 5 0
      app/Http/Models/Payment.php
  14. 2 1
      composer.json
  15. 44 1
      composer.lock
  16. 5 1
      database/seeds/ConfigTableSeeder.php
  17. 7 7
      resources/lang/zh-CN/home.php
  18. 2 2
      resources/views/admin/addArticle.blade.php
  19. 1 1
      resources/views/admin/addGroup.blade.php
  20. 10 21
      resources/views/admin/addLabel.blade.php
  21. 2 2
      resources/views/admin/addNode.blade.php
  22. 1 1
      resources/views/admin/addUser.blade.php
  23. 2 2
      resources/views/admin/applyList.blade.php
  24. 4 4
      resources/views/admin/articleList.blade.php
  25. 7 3
      resources/views/admin/config.blade.php
  26. 2 2
      resources/views/admin/editArticle.blade.php
  27. 1 1
      resources/views/admin/editGroup.blade.php
  28. 1 1
      resources/views/admin/editLabel.blade.php
  29. 2 2
      resources/views/admin/editNode.blade.php
  30. 1 1
      resources/views/admin/editUser.blade.php
  31. 4 4
      resources/views/admin/groupList.blade.php
  32. 2 2
      resources/views/admin/inviteList.blade.php
  33. 3 3
      resources/views/admin/labelList.blade.php
  34. 6 0
      resources/views/admin/layouts.blade.php
  35. 5 5
      resources/views/admin/nodeList.blade.php
  36. 111 0
      resources/views/admin/orderList.blade.php
  37. 1 1
      resources/views/admin/profile.blade.php
  38. 3 3
      resources/views/admin/subscribeLog.blade.php
  39. 59 33
      resources/views/admin/system.blade.php
  40. 3 3
      resources/views/admin/trafficLog.blade.php
  41. 2 2
      resources/views/admin/userBalanceLogList.blade.php
  42. 2 2
      resources/views/admin/userBanLogList.blade.php
  43. 2 2
      resources/views/admin/userList.blade.php
  44. 2 2
      resources/views/admin/userOrderList.blade.php
  45. 19 19
      resources/views/coupon/addCoupon.blade.php
  46. 5 5
      resources/views/coupon/couponList.blade.php
  47. 3 3
      resources/views/emailLog/logList.blade.php
  48. 73 0
      resources/views/payment/detail.blade.php
  49. 19 19
      resources/views/shop/addGoods.blade.php
  50. 19 19
      resources/views/shop/editGoods.blade.php
  51. 4 6
      resources/views/shop/goodsList.blade.php
  52. 3 3
      resources/views/ticket/ticketList.blade.php
  53. 32 16
      resources/views/user/addOrder.blade.php
  54. 5 20
      resources/views/user/article.blade.php
  55. 7 15
      resources/views/user/goodsList.blade.php
  56. 48 51
      resources/views/user/index.blade.php
  57. 2 2
      resources/views/user/invite.blade.php
  58. 13 13
      resources/views/user/layouts.blade.php
  59. 14 17
      resources/views/user/orderList.blade.php
  60. 22 12
      resources/views/user/profile.blade.php
  61. 2 2
      resources/views/user/referral.blade.php
  62. 13 9
      resources/views/user/subscribe.blade.php
  63. 2 3
      resources/views/user/ticketList.blade.php
  64. 3 14
      routes/api.php
  65. 6 7
      routes/web.php
  66. 15 5
      sql/db.sql
  67. 24 0
      sql/update/20180313.sql

+ 44 - 0
app/Console/Commands/AutoCloseOrderJob.php

@@ -0,0 +1,44 @@
+<?php
+
+namespace App\Console\Commands;
+
+use App\Http\Models\Order;
+use App\Http\Models\Payment;
+use Illuminate\Console\Command;
+use Log;
+use DB;
+
+class AutoCloseOrderJob extends Command
+{
+    protected $signature = 'autoCloseOrderJob';
+    protected $description = '自动关闭超时未支付订单';
+
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    public function handle()
+    {
+        // 超过15分钟未支付则关闭
+        $paymentList = Payment::query()->where('status', 0)->where('created_at', '<=', date("Y-m-d H:i:s", strtotime("-15 minutes")))->get();
+        if (!$paymentList->isEmpty()) {
+            DB::beginTransaction();
+            try {
+                foreach ($paymentList as $payment) {
+                    Payment::query()->where('id', $payment->id)->update(['status' => -1]); // 关闭支付单
+                    Order::query()->where('oid', $payment->oid)->update(['status' => -1]); // 关闭订单
+                    //TODO:记录订单ID,去有赞关闭订单
+                }
+
+                DB::commit();
+            } catch (\Exception $e) {
+                Log::info('【异常】自动关闭超时未支付订单:' . $e->getMessage());
+
+                DB::rollBack();
+            }
+        }
+
+        Log::info('定时任务:' . $this->description);
+    }
+}

+ 2 - 0
app/Console/Kernel.php

@@ -17,6 +17,7 @@ class Kernel extends ConsoleKernel
         \App\Console\Commands\AutoBanUserJob::class,
         \App\Console\Commands\AutoCheckNodeStatusJob::class,
         \App\Console\Commands\AutoClearLogJob::class,
+        \App\Console\Commands\AutoCloseOrderJob::class,
         \App\Console\Commands\AutoDecGoodsTrafficJob::class,
         \App\Console\Commands\AutoDisableExpireUserJob::class,
         \App\Console\Commands\AutoDisableUserJob::class,
@@ -45,6 +46,7 @@ class Kernel extends ConsoleKernel
         $schedule->command('autoBanUserJob')->everyTenMinutes();
         $schedule->command('autoCheckNodeStatusJob')->everyMinute();
         $schedule->command('autoClearLogJob')->everyThirtyMinutes();
+        $schedule->command('autoCloseOrderJob')->everyMinute();
         $schedule->command('autoDecGoodsTrafficJob')->everyTenMinutes();
         $schedule->command('autoDisableExpireUserJob')->everyMinute();
         $schedule->command('autoDisableUserJob')->everyMinute();

+ 29 - 6
app/Http/Controllers/AdminController.php

@@ -149,7 +149,7 @@ class AdminController extends Controller
             }
 
             $user = new User();
-            $user->username = $request->get('username');
+            $user->username = trim($request->get('username'));
             $user->password = $password;
             $user->port = $request->get('port');
             $user->passwd = empty($request->get('passwd')) ? makeRandStr() : $request->get('passwd'); // SS密码为空时生成默认密码
@@ -169,7 +169,7 @@ class AdminController extends Controller
             $user->score = 0;
             $user->enable_time = empty($request->get('enable_time')) ? date('Y-m-d') : $request->get('enable_time');
             $user->expire_time = empty($request->get('expire_time')) ? date('Y-m-d', strtotime("+365 days")) : $request->get('expire_time');
-            $user->remark = $request->get('remark', '');
+            $user->remark = clean($request->get('remark', ''));
             $user->level = $request->get('level', 1);
             $user->is_admin = $request->get('is_admin', 0);
             $user->reg_ip = $request->getClientIp();
@@ -246,7 +246,7 @@ class AdminController extends Controller
         $id = $request->get('id');
 
         if ($request->method() == 'POST') {
-            $username = $request->get('username');
+            $username = trim($request->get('username'));
             $password = $request->get('password');
             $port = $request->get('port');
             $passwd = $request->get('passwd');
@@ -268,10 +268,16 @@ class AdminController extends Controller
             $labels = $request->get('labels');
             $enable_time = $request->get('enable_time');
             $expire_time = $request->get('expire_time');
-            $remark = $request->get('remark');
+            $remark = clean($request->get('remark'));
             $level = $request->get('level');
             $is_admin = $request->get('is_admin');
 
+            // 校验username是否已存在
+            $exists = User::query()->where('id', '<>', $id)->where('username', $username)->first();
+            if ($exists) {
+                return Response::json(['status' => 'fail', 'data' => '', 'message' => '用户名已存在,请重新输入']);
+            }
+
             DB::beginTransaction();
             try {
                 $data = [
@@ -1102,7 +1108,7 @@ class AdminController extends Controller
             $protocol_param = $node->single ? $user->port . ':' . $user->passwd : $user->protocol_param;
 
             $ssr_str = '';
-            $ssr_str .= $node->server . ':' . ($node->single ? $node->single_port : $user->port);
+            $ssr_str .= ($node->server ? $node->server : $node->ip) . ':' . ($node->single ? $node->single_port : $user->port);
             $ssr_str .= ':' . ($node->single ? $node->single_protocol : $user->protocol) . ':' . ($node->single ? $node->single_method : $user->method);
             $ssr_str .= ':' . ($node->single ? $node->single_obfs : $user->obfs) . ':' . ($node->single ? base64url_encode($node->single_passwd) : base64url_encode($user->passwd));
             $ssr_str .= '/?obfsparam=' . ($node->single ? '' : base64url_encode($obfs_param));
@@ -1122,7 +1128,7 @@ class AdminController extends Controller
             $ss_scheme = 'ss://' . $ss_str;
 
             // 生成文本配置信息
-            $txt = "服务器:" . $node->server . "\r\n";
+            $txt = "服务器:" . ($node->server ? $node->server : $node->ip) . "\r\n";
             $txt .= "远程端口:" . ($node->single ? $node->single_port : $user->port) . "\r\n";
             $txt .= "密码:" . ($node->single ? $node->single_passwd : $user->passwd) . "\r\n";
             $txt .= "加密方法:" . ($node->single ? $node->single_method : $user->method) . "\r\n";
@@ -1764,6 +1770,23 @@ class AdminController extends Controller
         return Response::view('admin/applyDetail', $view);
     }
 
+    // 订单列表
+    public function orderList(Request $request)
+    {
+        $username = $request->get('username');
+        $status = $request->get('status');
+
+        $orderList = Order::query()->with(['user', 'goods', 'coupon'])->orderBy('oid', 'desc')->paginate(10);
+        foreach ($orderList as $order) {
+            $order->totalOriginalPrice = $order->totalOriginalPrice / 100;
+            $order->totalPrice = $order->totalPrice / 100;
+        }
+
+        $view['orderList'] = $orderList;
+
+        return Response::view('admin/orderList', $view);
+    }
+
     // 设置提现申请状态
     public function setApplyStatus(Request $request)
     {

+ 202 - 0
app/Http/Controllers/Api/YzyController.php

@@ -0,0 +1,202 @@
+<?php
+
+namespace App\Http\Controllers\Api;
+
+use App\Http\Controllers\Controller;
+use App\Http\Models\Coupon;
+use App\Http\Models\CouponLog;
+use App\Http\Models\Goods;
+use App\Http\Models\Order;
+use App\Http\Models\Payment;
+use App\Http\Models\ReferralLog;
+use App\Http\Models\User;
+use Illuminate\Http\Request;
+use Response;
+use Redirect;
+use Cache;
+use DB;
+use Log;
+
+/**
+ * 有赞云支付
+ * Class YzyController
+ *
+ * @package App\Http\Controllers
+ */
+class YzyController extends Controller
+{
+    protected static $config;
+    private $accessToken;
+
+    function __construct()
+    {
+        self::$config = $this->systemConfig();
+        $this->accessToken = $this->getAccessToken();
+    }
+
+    // 获取accessToken
+    private function getAccessToken()
+    {
+        if (Cache::has('YZY_TOKEN')) {
+            return Cache::get('YZY_TOKEN')['access_token'];
+        }
+
+        $clientId = self::$config['youzan_client_id']; // f531e5282e4689712a
+        $clientSecret = self::$config['youzan_client_secret']; // 4020b1743633ef334fd06a32190ee677
+
+        $type = 'self';
+        $keys['kdt_id'] = self::$config['kdt_id']; // 40503761
+
+        $token = (new \Youzan\Open\Token($clientId, $clientSecret))->getToken($type, $keys);
+
+        Cache::put('YZY_TOKEN', $token, 10000);
+
+        return $token['access_token'];
+    }
+
+    // 接收GET请求
+    public function index(Request $request)
+    {
+        \Log::info("YZY-GET:" . var_export($request->all()));
+    }
+
+    // 接收POST请求
+    public function store(Request $request)
+    {
+        \Log::info("YZY-POST:" . var_export($request->all()));
+
+        $json = file_get_contents('php://input');
+        $data = json_decode($json, true);
+
+        // 判断消息是否合法
+        $msg = $data['msg'];
+        $sign_string = self::$config['youzan_client_id'] . "" . $msg . "" . self::$config['youzan_client_secret'];
+        $sign = md5($sign_string);
+        if ($sign != $data['sign']) {
+            exit();
+        } else {
+            // msg内容经过 urlencode 编码,需进行解码
+            $msg = json_decode(urldecode($msg), true);
+
+            if ($data['type'] == 'TRADE_ORDER_STATE' && $data['status'] == 'TRADE_SUCCESS') {
+                $client = new \Youzan\Open\Client($this->accessToken);
+
+                $method = 'youzan.trade.get';
+                $apiVersion = '3.0.0';
+                $params = [
+                    'tid' => $msg['tid'], // 有赞订单号
+                ];
+
+                $result = $client->post($method, $apiVersion, $params);
+                if (isset($result['error_response'])) {
+                    Log::info('【有赞云】回调订单信息错误:' . $result['error_response']['msg']);
+
+                    return Response::json(['code' => 0, 'msg' => 'success']);
+                }
+
+                // 处理订单&支付单
+                $payment = Payment::query()->where('qr_id', $result['response']['trade']['qr_id'])->first();
+                if (!$payment) {
+                    Log::info('【有赞云】回调订单不存在');
+
+                    return Response::json(['code' => 0, 'msg' => 'success']);
+                }
+
+                if ($payment->status != '0') {
+                    Log::info('【有赞云】回调订单状态不正确');
+
+                    return Response::json(['code' => 0, 'msg' => 'success']);
+                }
+
+                DB::beginTransaction();
+                try {
+                    // 更新支付单
+                    $payment->status = 1;
+                    $payment->save();
+
+                    // 更新订单
+
+                    $order = Order::query()->with(['user'])->where('oid', $payment->oid)->first();
+                    $order->status = 2;
+                    $order->save();
+
+                    // 优惠券置为已使用
+                    $coupon = Coupon::query()->where('id', $order->coupon_id)->first();
+                    if ($coupon) {
+                        if ($coupon->usage == 1) {
+                            $coupon->status = 1;
+                            $coupon->save();
+                        }
+
+                        // 写入日志
+                        $couponLog = new CouponLog();
+                        $couponLog->coupon_id = $coupon->id;
+                        $couponLog->goods_id = $order->goods_id;
+                        $couponLog->order_id = $order->oid;
+                        $couponLog->save();
+                    }
+
+                    // 如果买的是套餐,则先将之前购买的所有套餐置都无效,并扣掉之前所有套餐的流量
+                    $goods = Goods::query()->where('id', $order->goods_id)->first();
+                    if ($goods->type == 2) {
+                        $existOrderList = Order::query()
+                            ->with(['goods'])
+                            ->whereHas('goods', function ($q) {
+                                $q->where('type', 2);
+                            })
+                            ->where('user_id', $order->user_id)
+                            ->where('oid', '<>', $order->oid)
+                            ->where('is_expire', 0)
+                            ->get();
+
+                        foreach ($existOrderList as $vo) {
+                            Order::query()->where('oid', $vo->oid)->update(['is_expire' => 1]);
+                            User::query()->where('id', $order->user_id)->decrement('transfer_enable', $vo->goods->traffic * 1048576);
+                        }
+                    }
+
+                    // 把商品的流量加到账号上
+                    User::query()->where('id', $order->user_id)->increment('transfer_enable', $goods->traffic * 1048576);
+
+                    // 套餐就改流量重置日,加油包不改
+                    if ($goods->type == 2) {
+                        // 将商品的有效期和流量自动重置日期加到账号上
+                        $traffic_reset_day = in_array(date('d'), [29, 30, 31]) ? 28 : abs(date('d'));
+                        User::query()->where('id', $order->user_id)->update(['traffic_reset_day' => $traffic_reset_day, 'expire_time' => date('Y-m-d', strtotime("+" . $goods->days . " days", strtotime($order->user->expire_time))), 'enable' => 1]);
+                    } else {
+                        // 将商品的有效期和流量自动重置日期加到账号上
+                        User::query()->where('id', $order->user_id)->update(['expire_time' => date('Y-m-d', strtotime("+" . $goods->days . " days")), 'enable' => 1]);
+                    }
+
+                    // 写入返利日志
+                    if ($order->user->referral_uid) {
+                        $referralLog = new ReferralLog();
+                        $referralLog->user_id = $order->user_id;
+                        $referralLog->ref_user_id = $order->user->referral_uid;
+                        $referralLog->order_id = $order->oid;
+                        $referralLog->amount = $order->totalPrice;
+                        $referralLog->ref_amount = $order->totalPrice * self::$config['referral_percent'];
+                        $referralLog->status = 0;
+                        $referralLog->save();
+                    }
+
+                    DB::commit();
+
+                    return Response::json(['code' => 0, 'msg' => 'success']);
+                } catch (\Exception $e) {
+                    DB::rollBack();
+                    Log::info('【有赞云】更新支付单和订单异常');
+
+                    return Response::json(['code' => 0, 'msg' => 'success']);
+                }
+            }
+
+            return Response::json(['code' => 0, 'msg' => 'success']);
+        }
+    }
+
+    public function show(Request $request)
+    {
+        exit('show');
+    }
+}

+ 0 - 7
app/Http/Controllers/CouponController.php

@@ -17,13 +17,6 @@ use Log;
  */
 class CouponController extends Controller
 {
-    protected static $config;
-
-    function __construct()
-    {
-        self::$config = $this->systemConfig();
-    }
-
     // 优惠券列表
     public function couponList(Request $request)
     {

+ 0 - 7
app/Http/Controllers/EmailLogController.php

@@ -13,13 +13,6 @@ use Response;
  */
 class EmailLogController extends Controller
 {
-    protected static $config;
-
-    function __construct()
-    {
-        self::$config = $this->systemConfig();
-    }
-
     // 邮件发送日志列表
     public function logList(Request $request)
     {

+ 145 - 152
app/Http/Controllers/PaymentController.php

@@ -1,205 +1,198 @@
 <?php
 namespace App\Http\Controllers;
 
+use App\Http\Models\Coupon;
+use App\Http\Models\CouponLog;
 use App\Http\Models\Goods;
-use App\Http\Models\Paypal;
+use App\Http\Models\Order;
+use App\Http\Models\Payment;
+use App\Http\Models\User;
 use Illuminate\Http\Request;
 use Response;
 use Redirect;
 use Cache;
 use Log;
-
-use PayPal\Api\Amount;
-use PayPal\Api\Details;
-use PayPal\Api\Item;
-use PayPal\Api\ItemList;
-use PayPal\Api\Payer;
-use PayPal\Api\Payment;
-use PayPal\Api\PaymentExecution;
-use PayPal\Api\RedirectUrls;
-use PayPal\Api\Transaction;
-use PayPal\Api\ShippingAddress;
-use PayPal\Rest\ApiContext;
-use PayPal\Auth\OAuthTokenCredential;
+use DB;
 
 class PaymentController extends Controller
 {
     protected static $config;
-    private $apiContext;
+    private $accessToken;
 
     function __construct()
     {
         self::$config = $this->systemConfig();
-
-        $this->apiContext = new ApiContext(
-            new OAuthTokenCredential(self::$config['paypal_client_id'], self::$config['paypal_client_secret'])
-        );
-        $this->apiContext->setConfig([
-            'mode'           => 'sandbox',
-            'log.LogEnabled' => true,
-            'log.FileName'   => storage_path('logs/paypal.log'),
-            'log.LogLevel'   => 'DEBUG', // 测试DEBUG,生产环境INFO
-            'cache.enabled'  => true,
-            // 'http.CURLOPT_CONNECTTIMEOUT' => 30
-            // 'http.headers.PayPal-Partner-Attribution-Id' => '123123123'
-            //'log.AdapterFactory' => '\PayPal\Log\DefaultLogFactory' // Factory class implementing \PayPal\Log\PayPalLogFactory
-        ]);
+        $this->accessToken = $this->getAccessToken();
     }
 
-    // 创建支付
-    public function create(Request $request)
+    // 获取accessToken
+    private function getAccessToken()
     {
-        $oid = $request->get('oid');
-        $goods_id = $request->get('goods_id');
-        $user = $request->session()->get('user');
-
-        // 商品信息
-        $goods = Goods::query()->where('id', $goods_id)->first();
-        if (!$goods) {
-            //TODO:购买商品页需要做判断,出现异常时挂掉
-            $request->session()->flash('paypalErrorMsg', '创建支付订单失败:所购服务不存在');
-
-            return Redirect::back();
+        if (Cache::has('YZY_TOKEN')) {
+            return Cache::get('YZY_TOKEN')['access_token'];
         }
 
-        // 设置支付信息
-        $payer = new Payer();
-        $payer->setPaymentMethod("paypal");
-
-        // 设置所购商品信息,包含名称、数量、SKU、价格
-        $item1 = new Item();
-        $item1->setName($goods->name)->setCurrency('USD')->setQuantity(1)->setSku($goods->sku)->setPrice($goods->price / 100);
-
-        $itemList = new ItemList();
-        $itemList->setItems([$item1]);
-
-        /*
-        // 设定收货地址信息,防止用户自付款时可改
-        $address = new ShippingAddress();
-        $address->setRecipientName($user['username'])
-            ->setLine1('余杭区')
-            ->setLine2('文一西路969号西溪园区')
-            ->setCity('杭州市')
-            ->setState('浙江省')
-            ->setPhone('+8613800000000')
-            ->setPostalCode('311100')
-            ->setCountryCode('CN');
-
-        // 商品列表写入设定好的地址信息
-        $itemList->setShippingAddress($address);
-        */
-
-        // 设置单据运费、税费、小计算
-        $details = new Details();
-        $details->setShipping(0)->setTax(0)->setSubtotal($goods->price / 100);
-
-        // 设定单据金额
-        $amount = new Amount();
-        $amount->setCurrency("USD")->setTotal($goods->price / 100)->setDetails($details);
-
-        // 跳转页
-        $redirectUrls = new RedirectUrls();
-        $redirectUrls->setReturnUrl(url("payment/execute?subtotal=" . $goods->price / 100))->setCancelUrl(url("payment/cancel"));
-
-        // 设定交易描述
-        $transaction = new Transaction();
-        $transaction->setAmount($amount)->setItemList($itemList)->setDescription("购买虚拟服务")->setInvoiceNumber(uniqid());
-
-        // 创建支付
-        $payment = new Payment();
-        $payment->setIntent("sale")->setPayer($payer)->setRedirectUrls($redirectUrls)->setTransactions([$transaction]);
-        try {
-            $payment->create($this->apiContext);
-        } catch (\Exception $ex) {
-            Log::error($ex->getMessage());
-            Log::error('PayPal授权失败,可能是接口配置错误');
+        $clientId = self::$config['youzan_client_id'];
+        $clientSecret = self::$config['youzan_client_secret'];
 
-            $request->session()->flash('paypalErrorMsg', 'PayPal授权失败,可能是接口配置错误');
+        $type = 'self';
+        $keys['kdt_id'] = self::$config['kdt_id'];
 
-            return Redirect::back();
-        }
+        $token = (new \Youzan\Open\Token($clientId, $clientSecret))->getToken($type, $keys);
 
-        // 得到支付授权跳转页(给用户点确认付款用)
-        $approvalUrl = $payment->getApprovalLink();
+        Cache::put('YZY_TOKEN', $token, 10000);
 
-        return Redirect::to($approvalUrl);
+        return $token['access_token'];
     }
 
-    // 执行支付
-    public function execute(Request $request)
+    // 创建支付单
+    public function create(Request $request)
     {
-        \Log::info('execute_params:' . var_export($request->all(), true));
+        $goods_id = intval($request->get('goods_id'));
+        $coupon_sn = $request->get('coupon_sn');
 
-        $subtotal = $request->get('subtotal');
-        $paymentId = $request->get('paymentId');
-        $token = $request->get('token');
-        $PayerID = $request->get('PayerID');
+        $goods = Goods::query()->where('id', $goods_id)->where('status', 1)->first();
+        if (!$goods) {
+            return Response::json(['status' => 'fail', 'data' => '', 'message' => '创建支付单失败:商品或服务已下架']);
+        }
 
-        if (empty($paymentId) || empty($token) || empty($PayerID)) {
-            $request->session()->flash('paypalErrorMsg', '支付回调地址错误');
+        // 判断是否开启有赞云支付
+        if (!self::$config['is_youzan']) {
+            return Response::json(['status' => 'fail', 'data' => '', 'message' => '创建支付单失败:系统并未开启在线支付功能']);
+        }
 
-            return Redirect::to('user/goodsList');
+        // 判断是否存在同个商品的未支付订单
+        $existsOrder = Order::query()->where('goods_id', $goods_id)->where('status', 0)->first();
+        if ($existsOrder) {
+            return Response::json(['status' => 'fail', 'data' => '', 'message' => '创建支付单失败:尚有未支付的订单,请先去支付']);
+        }
+
+        // 使用优惠券
+        if ($coupon_sn) {
+            $coupon = Coupon::query()->where('sn', $coupon_sn)->where('is_del', 0)->where('status', 0)->first();
+            if (!$coupon) {
+                return Response::json(['status' => 'fail', 'data' => '', 'message' => '创建支付单失败:优惠券不存在']);
+            }
+
+            // 计算实际应支付总价
+            $totalPrice = $coupon->type == 2 ? $goods->price * $coupon->discount : $goods->price - $coupon->amount;
+            $totalPrice = $totalPrice > 0 ? $totalPrice : 0;
         } else {
-            // 根据支付单据获取支付信息
-            $payment = Payment::get($paymentId, $this->apiContext);
+            $totalPrice = $goods->price;
+        }
 
-            $details = new Details();
-            $details->setShipping(0)->setTax(0)->setSubtotal($subtotal);
+        DB::beginTransaction();
+        try {
+            $user = $request->session()->get('user');
+            $orderId = date('ymdHis') . mt_rand(100000, 999999);
+            $sn = makeRandStr(12);
+
+            // 生成订单
+            $order = new Order();
+            $order->orderId = $orderId;
+            $order->user_id = $user['id'];
+            $order->goods_id = $goods_id;
+            $order->coupon_id = !empty($coupon) ? $coupon->id : 0;
+            $order->totalOriginalPrice = $goods->price;
+            $order->totalPrice = $totalPrice;
+            $order->expire_at = date("Y-m-d H:i:s", strtotime("+" . $goods->days . " days"));
+            $order->is_expire = 0;
+            $order->pay_way = 2;
+            $order->status = 0;
+            $order->save();
+
+            // 生成支付单
+            $client = new \Youzan\Open\Client($this->accessToken);
+
+            $method = 'youzan.pay.qrcode.create';
+            $apiVersion = '3.0.0';
+
+            $params = [
+                'qr_name'   => $goods->name, // 商品名
+                'qr_price'  => $totalPrice, // 单位分
+                'qr_source' => $orderId, // 本地订单号
+                'qr_type'   => 'QR_TYPE_DYNAMIC'
+            ];
+
+            $result = $client->get($method, $apiVersion, $params);
+            if (isset($result['error_response'])) {
+                Log::error('【有赞云】创建二维码失败:' . $result['error_response']['msg']);
+
+                throw new \Exception($result['error_response']['msg']);
+            }
 
-            $amount = new Amount();
-            $amount->setCurrency('USD')->setTotal($subtotal)->setDetails($details);
+            $payment = new Payment();
+            $payment->sn = $sn;
+            $payment->user_id = $user['id'];
+            $payment->oid = $order->oid;
+            $payment->orderId = $orderId;
+            $payment->pay_way = 1;
+            $payment->amount = $order->totalPrice;
+            $payment->qr_id = $result['response']['qr_id'];
+            $payment->qr_url = $result['response']['qr_url'];
+            $payment->qr_code = $result['response']['qr_code'];
+            $payment->status = 0;
+            $payment->save();
 
-            $transaction = new Transaction();
-            $transaction->setAmount($amount);
+            DB::commit();
 
-            // 执行支付
-            $execution = new PaymentExecution();
-            $execution->setPayerId($PayerID)->addTransaction($transaction);
+            return Response::json(['status' => 'success', 'data' => $sn, 'message' => '创建支付单成功']);
+        } catch (\Exception $e) {
+            DB::rollBack();
 
-            try {
-                $result = $payment->execute($execution, $this->apiContext);
-                \Log::info(var_export($result, true));
+            Log::error('创建支付订单失败:' . $e->getMessage());
 
-                // 支付成功,写入支付单据信息
+            return Response::json(['status' => 'fail', 'data' => '', 'message' => '创建支付单失败:' . $e->getMessage()]);
+        }
+    }
+
+    // 支付单详情
+    public function detail(Request $request, $sn)
+    {
+        if (empty($sn)) {
+            return Redirect::to('user/goodsList');
+        }
 
+        $user = $request->session()->get('user');
 
-            } catch (\Exception $ex) {
-                var_dump($ex);
-                echo "支付失败";
-                exit(1);
-            }
+        $payment = Payment::query()->with(['order', 'order.goods'])->where('sn', $sn)->where('user_id', $user['id'])->first();
+        if (!$payment) {
+            return Redirect::to('user/goodsList');
+        }
 
-            \Log::info(var_export($payment, true));
+        $order = Order::query()->where('oid', $payment->oid)->first();
+        if (!$order) {
+            $request->session()->flash('errorMsg', '订单不存在');
 
-            return $payment;
+            return Response::view('payment/' . $sn);
         }
-    }
 
-    // 取消支付
-    public function cancel(Request $request)
-    {
-        var_dump($request->all());
+        $view['payment'] = $payment;
 
-        echo '取消支付';
+        return Response::view('payment/detail', $view);
     }
 
-    // 查询支付状态
-    public function query()
+    // 获取订单支付状态
+    public function getStatus(Request $request)
     {
+        $sn = $request->get('sn');
 
-    }
+        if (empty($sn)) {
+            return Response::json(['status' => 'fail', 'data' => '', 'message' => '请求失败']);
+        }
 
-    // 写入日志
-    private function log($oid, $invoice_number = '', $items = '', $response_data = '', $error = '')
-    {
-        $paypal = new Paypal();
-        $paypal->oid = $oid;
-        $paypal->invoice_number = $invoice_number;
-        $paypal->items = $items;
-        $paypal->response_data = $response_data;
-        $paypal->error = $error;
-        $paypal->save();
-
-        return $paypal->id;
+        $user = $request->session()->get('user');
+        $payment = Payment::query()->where('sn', $sn)->where('user_id', $user['id'])->first();
+        if (!$payment) {
+            return Response::json(['status' => 'fail', 'data' => '', 'message' => '支付失败']);
+        }
+
+        if ($payment->status) {
+            return Response::json(['status' => 'success', 'data' => '', 'message' => '支付成功']);
+        } else if ($payment->status < 0) {
+            return Response::json(['status' => 'fail', 'data' => '', 'message' => '支付失败']);
+        } else {
+            return Response::json(['status' => 'fail', 'data' => '', 'message' => '等待支付']);
+        }
     }
 }

+ 0 - 7
app/Http/Controllers/ShopController.php

@@ -14,13 +14,6 @@ use Redirect;
  */
 class ShopController extends Controller
 {
-    protected static $config;
-
-    function __construct()
-    {
-        self::$config = $this->systemConfig();
-    }
-
     // 商品列表
     public function goodsList(Request $request)
     {

+ 1 - 1
app/Http/Controllers/SubscribeController.php

@@ -82,7 +82,7 @@ class SubscribeController extends Controller
 
             // 生成ssr scheme
             $ssr_str = '';
-            $ssr_str .= $node->server . ':' . ($node->single ? $node->single_port : $user->port);
+            $ssr_str .= ($node->server ? $node->server : $node->ip) . ':' . ($node->single ? $node->single_port : $user->port);
             $ssr_str .= ':' . ($node->single ? $node->single_protocol : $user->protocol) . ':' . ($node->single ? $node->single_method : $user->method);
             $ssr_str .= ':' . ($node->single ? $node->single_obfs : $user->obfs) . ':' . ($node->single ? base64url_encode($node->single_passwd) : base64url_encode($user->passwd));
             $ssr_str .= '/?obfsparam=' . ($node->single ? '' : base64url_encode($obfs_param));

+ 0 - 7
app/Http/Controllers/TicketController.php

@@ -14,13 +14,6 @@ use Response;
  */
 class TicketController extends Controller
 {
-    protected static $config;
-
-    function __construct()
-    {
-        self::$config = $this->systemConfig();
-    }
-
     // 工单列表
     public function ticketList(Request $request)
     {

+ 75 - 50
app/Http/Controllers/UserController.php

@@ -57,6 +57,7 @@ class UserController extends Controller
         $view['articleList'] = Article::query()->where('type', 1)->where('is_del', 0)->orderBy('sort', 'desc')->orderBy('id', 'desc')->paginate(5);
         $view['wechat_qrcode'] = self::$config['wechat_qrcode'];
         $view['alipay_qrcode'] = self::$config['alipay_qrcode'];
+        $view['login_add_score'] = self::$config['login_add_score'];
 
         // 推广返利是否可见
         if (!$request->session()->has('referral_status')) {
@@ -84,7 +85,7 @@ class UserController extends Controller
             $protocol_param = $node->single ? $user->port . ':' . $user->passwd : $user->protocol_param;
 
             $ssr_str = '';
-            $ssr_str .= $node->server . ':' . ($node->single ? $node->single_port : $user->port);
+            $ssr_str .= ($node->server ? $node->server : $node->ip) . ':' . ($node->single ? $node->single_port : $user->port);
             $ssr_str .= ':' . ($node->single ? $node->single_protocol : $user->protocol) . ':' . ($node->single ? $node->single_method : $user->method);
             $ssr_str .= ':' . ($node->single ? $node->single_obfs : $user->obfs) . ':' . ($node->single ? base64url_encode($node->single_passwd) : base64url_encode($user->passwd));
             $ssr_str .= '/?obfsparam=' . ($node->single ? '' : base64url_encode($obfs_param));
@@ -104,7 +105,7 @@ class UserController extends Controller
             $ss_scheme = 'ss://' . $ss_str;
 
             // 生成文本配置信息
-            $txt = "服务器:" . $node->server . "\r\n";
+            $txt = "服务器:" . ($node->server ? $node->server : $node->ip) . "\r\n";
             $txt .= "远程端口:" . ($node->single ? $node->single_port : $user->port) . "\r\n";
             $txt .= "密码:" . ($node->single ? $node->single_passwd : $user->passwd) . "\r\n";
             $txt .= "加密方法:" . ($node->single ? $node->single_method : $user->method) . "\r\n";
@@ -180,46 +181,60 @@ class UserController extends Controller
                 }
             }
 
-            // 修改SS信息
-            if (empty($passwd)) {
-                $request->session()->flash('errorMsg', '密码不能为空');
+            // 修改联系方式
+            if ($wechat || $qq) {
+                $ret = User::query()->where('id', $user['id'])->update(['wechat' => $wechat, 'qq' => $qq]);
+                if (!$ret) {
+                    $request->session()->flash('errorMsg', '修改失败');
+
+                    return Redirect::to('user/profile#tab_2');
+                } else {
+                    $request->session()->flash('successMsg', '修改成功');
 
-                return Redirect::to('user/profile#tab_3');
+                    return Redirect::to('user/profile#tab_2');
+                }
             }
 
-            // 加密方式、协议、混淆必须存在
-            $existMethod = SsConfig::query()->where('type', 1)->where('name', $method)->first();
-            $existProtocol = SsConfig::query()->where('type', 2)->where('name', $protocol)->first();
-            $existObfs = SsConfig::query()->where('type', 3)->where('name', $obfs)->first();
-            if (!$existMethod || !$existProtocol || !$existObfs) {
-                $request->session()->flash('errorMsg', '非法请求');
+            // 修改SSR(R)设置
+            if ($method || $protocol || $obfs) {
+                if (empty($passwd)) {
+                    $request->session()->flash('errorMsg', '密码不能为空');
 
-                return Redirect::to('user/profile#tab_2');
-            }
+                    return Redirect::to('user/profile#tab_3');
+                }
 
-            $data = [
-                'passwd'   => $passwd,
-                'method'   => $method,
-                'protocol' => $protocol,
-                'obfs'     => $obfs,
-                'wechat'   => $wechat,
-                'qq'       => $qq
-            ];
+                // 加密方式、协议、混淆必须存在
+                $existMethod = SsConfig::query()->where('type', 1)->where('name', $method)->first();
+                $existProtocol = SsConfig::query()->where('type', 2)->where('name', $protocol)->first();
+                $existObfs = SsConfig::query()->where('type', 3)->where('name', $obfs)->first();
+                if (!$existMethod || !$existProtocol || !$existObfs) {
+                    $request->session()->flash('errorMsg', '非法请求');
 
-            $ret = User::query()->where('id', $user['id'])->update($data);
-            if (!$ret) {
-                $request->session()->flash('errorMsg', '修改失败');
+                    return Redirect::to('user/profile#tab_3');
+                }
 
-                return Redirect::to('user/profile#tab_2');
-            } else {
-                // 更新session
-                $user = User::query()->where('id', $user['id'])->first()->toArray();
-                $request->session()->remove('user');
-                $request->session()->put('user', $user);
+                $data = [
+                    'passwd'   => $passwd,
+                    'method'   => $method,
+                    'protocol' => $protocol,
+                    'obfs'     => $obfs
+                ];
 
-                $request->session()->flash('successMsg', '修改成功');
+                $ret = User::query()->where('id', $user['id'])->update($data);
+                if (!$ret) {
+                    $request->session()->flash('errorMsg', '修改失败');
+
+                    return Redirect::to('user/profile#tab_3');
+                } else {
+                    // 更新session
+                    $user = User::query()->where('id', $user['id'])->first()->toArray();
+                    $request->session()->remove('user');
+                    $request->session()->put('user', $user);
+
+                    $request->session()->flash('successMsg', '修改成功');
 
-                return Redirect::to('user/profile#tab_2');
+                    return Redirect::to('user/profile#tab_3');
+                }
             }
         } else {
             // 加密方式、协议、混淆
@@ -288,7 +303,7 @@ class UserController extends Controller
     {
         $user = $request->session()->get('user');
 
-        $orderList = Order::query()->with(['user', 'goods', 'coupon'])->where('user_id', $user['id'])->orderBy('oid', 'desc')->paginate(10)->appends($request->except('page'));
+        $orderList = Order::query()->with(['user', 'goods', 'coupon', 'payment'])->where('user_id', $user['id'])->orderBy('oid', 'desc')->paginate(10)->appends($request->except('page'));
         if (!$orderList->isEmpty()) {
             foreach ($orderList as &$order) {
                 $order->totalOriginalPrice = $order->totalOriginalPrice / 100;
@@ -536,6 +551,16 @@ class UserController extends Controller
         $verify->status = 1;
         $verify->save();
 
+        // 账号激活后给邀请人送流量
+        if ($verify->user->referral_uid) {
+            $transfer_enable = self::$config['referral_traffic'] * 1048576;
+
+            User::query()->where('id', $verify->user->referral_uid)->increment('transfer_enable', $transfer_enable);
+
+            // TODO:写入流量增加日志
+
+        }
+
         $request->session()->flash('successMsg', '账号激活成功');
 
         return Response::view('user/active');
@@ -727,7 +752,7 @@ class UserController extends Controller
         if ($request->method() == 'POST') {
             $goods = Goods::query()->where('id', $goods_id)->where('status', 1)->first();
             if (empty($goods)) {
-                return Response::json(['status' => 'fail', 'data' => '', 'message' => '支付失败:服务不存在']);
+                return Response::json(['status' => 'fail', 'data' => '', 'message' => '支付失败:商品或服务已下架']);
             }
 
             // 使用优惠券
@@ -770,15 +795,15 @@ class UserController extends Controller
                 User::query()->where('id', $user->id)->decrement('balance', $totalPrice);
 
                 // 记录余额操作日志
-                $userBalanceLogObj = new UserBalanceLog();
-                $userBalanceLogObj->user_id = $user->id;
-                $userBalanceLogObj->order_id = $order->oid;
-                $userBalanceLogObj->before = $user->balance;
-                $userBalanceLogObj->after = $user->balance - $totalPrice;
-                $userBalanceLogObj->amount = -1 * $totalPrice;
-                $userBalanceLogObj->desc = '购买服务:' . $goods->name;
-                $userBalanceLogObj->created_at = date('Y-m-d H:i:s');
-                $userBalanceLogObj->save();
+                $userBalanceLog = new UserBalanceLog();
+                $userBalanceLog->user_id = $user->id;
+                $userBalanceLog->order_id = $order->oid;
+                $userBalanceLog->before = $user->balance;
+                $userBalanceLog->after = $user->balance - $totalPrice;
+                $userBalanceLog->amount = -1 * $totalPrice;
+                $userBalanceLog->desc = '购买服务:' . $goods->name;
+                $userBalanceLog->created_at = date('Y-m-d H:i:s');
+                $userBalanceLog->save();
 
                 // 优惠券置为已使用
                 if (!empty($coupon)) {
@@ -788,11 +813,11 @@ class UserController extends Controller
                     }
 
                     // 写入日志
-                    $couponLogObj = new CouponLog();
-                    $couponLogObj->coupon_id = $coupon->id;
-                    $couponLogObj->goods_id = $goods_id;
-                    $couponLogObj->order_id = $order->oid;
-                    $couponLogObj->save();
+                    $couponLog = new CouponLog();
+                    $couponLog->coupon_id = $coupon->id;
+                    $couponLog->goods_id = $goods_id;
+                    $couponLog->order_id = $order->oid;
+                    $couponLog->save();
                 }
 
                 // 如果买的是套餐,则先将之前购买的所有套餐置都无效,并扣掉之前所有套餐的流量
@@ -850,7 +875,7 @@ class UserController extends Controller
             $goods->price = $goods->price / 100;
             $goods->traffic = flowAutoShow($goods->traffic * 1048576);
             $view['goods'] = $goods;
-            $view['paypal_status'] = self::$config['paypal_status'];
+            $view['is_youzan'] = self::$config['is_youzan'];
 
             return Response::view('user/addOrder', $view);
         }

+ 4 - 0
app/Http/Models/Order.php

@@ -28,4 +28,8 @@ class Order extends Model
     {
         return $this->hasOne(Coupon::class, 'id', 'coupon_id');
     }
+
+    function payment() {
+        return $this->hasOne(Payment::class, 'oid', 'oid');
+    }
 }

+ 5 - 0
app/Http/Models/Payment.php

@@ -12,4 +12,9 @@ class Payment extends Model
     {
         return $this->belongsTo(User::class, 'user_id', 'id');
     }
+
+    public function order()
+    {
+        return $this->belongsTo(Order::class, 'oid', 'oid');
+    }
 }

+ 2 - 1
composer.json

@@ -15,7 +15,8 @@
         "mews/captcha": "^2.1",
         "mews/purifier": "^2.0",
         "overtrue/laravel-lang": "~3.0",
-        "paypal/rest-api-sdk-php": "*"
+        "paypal/rest-api-sdk-php": "*",
+        "youzan/open-sdk": "^1.0"
     },
     "require-dev": {
         "fzaninotto/faker": "~1.4",

+ 44 - 1
composer.lock

@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "content-hash": "65390c337cfc8249876cc6d926531cf5",
+    "content-hash": "ae800cd483f8bd48860981b10cf83432",
     "packages": [
         {
             "name": "barryvdh/laravel-ide-helper",
@@ -3164,6 +3164,49 @@
                 "environment"
             ],
             "time": "2016-09-01T10:05:43+00:00"
+        },
+        {
+            "name": "youzan/open-sdk",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/youzan/open-sdk-php.git",
+                "reference": "adb2d9bb4f315627e3ea66a2455bda08a34dce27"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://files.phpcomposer.com/files/youzan/open-sdk-php/adb2d9bb4f315627e3ea66a2455bda08a34dce27.zip",
+                "reference": "adb2d9bb4f315627e3ea66a2455bda08a34dce27",
+                "shasum": ""
+            },
+            "require": {
+                "ext-curl": "*"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Youzan\\Open\\": "src/Open"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "xu42",
+                    "homepage": "https://github.com/xu42",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Youzan Open SDK",
+            "homepage": "https://github.com/youzan/open-sdk-php",
+            "keywords": [
+                "open-sdk",
+                "youzan",
+                "youzanyun"
+            ],
+            "time": "2017-10-30T07:57:36+00:00"
         }
     ],
     "packages-dev": [

+ 5 - 1
database/seeds/ConfigTableSeeder.php

@@ -60,6 +60,10 @@ class ConfigTableSeeder extends Seeder
         DB::insert("INSERT INTO `config` VALUES ('47', 'is_forbid_robot', 0);");
         DB::insert("INSERT INTO `config` VALUES ('48', 'subscribe_domain', '');");
         DB::insert("INSERT INTO `config` VALUES ('49', 'auto_release_port', 1);");
-        DB::insert("INSERT INTO `config` VALUES ('50', 'initial_labels_for_user', '');");
+        DB::insert("INSERT INTO `config` VALUES ('50', 'is_youzan', 0);");
+        DB::insert("INSERT INTO `config` VALUES ('51', 'youzan_client_id', '');");
+        DB::insert("INSERT INTO `config` VALUES ('52', 'youzan_client_secret', '');");
+        DB::insert("INSERT INTO `config` VALUES ('53', 'kdt_id', '');");
+        DB::insert("INSERT INTO `config` VALUES ('54', 'initial_labels_for_user', '');");
     }
 }

+ 7 - 7
resources/lang/zh-CN/home.php

@@ -5,7 +5,7 @@ return [
     'subscribe_address' => '我的订阅地址',
     'copy_subscribe_address' => '复制地址',
     'exchange_subscribe' => '更换地址',
-    'subscribe_warning' => '警告:该订阅地址仅限个人使用,请勿传播该地址,否则会导致您的账号流量异常。',
+    'subscribe_warning' => '警告:该订阅地址仅限个人使用,请勿传播该地址,否则会导致您的账号流量异常;更换订阅地址之后请修改SSR(R)密码即可。',
 
     // 菜单
     'home' => '首页',
@@ -19,14 +19,14 @@ return [
     'no_need_invite_codes' => '系统开放注册中,无需邀请码',
 
     // 首页
-    'ratio_tips' => '结算比例: 1表示用100M就结算100M,0.1表示用100M结算10M,5表示用100M结算500M。',
+    'ratio_tips' => '结算比例:0.1表示用100M结算10M,5表示用100M结算500M。',
     'subscribe_button' => '订阅节点',
     'account_info' => '账号信息',
     'account_level' => '等级',
-    'account_balance' => '余额',
+    'account_balance' => '账户余额',
     'account_score' => '积分',
-    'account_status' => '账号状态',
-    'account_expire' => '账号到期',
+    'account_status' => '状态',
+    'account_expire' => '有效期至',
     'account_last_usage' => '最后使用',
     'account_last_login' => '最后登录',
     'account_bandwidth_usage' => '已用流量',
@@ -38,7 +38,7 @@ return [
     'service_title' => '购买服务',
     'service_name' => '服务',
     'service_desc' => '描述',
-    'service_price' => '价',
+    'service_price' => '价',
     'service_quantity' => '数量',
     'service_subtotal_price' => '小计',
     'service_total_price' => '合计',
@@ -76,7 +76,7 @@ return [
     'invoice_title' => '消费记录',
     'invoice_table_name' => '服务',
     'invoice_table_price' => '金额',
-    'invoice_table_create_date' => '日期',
+    'invoice_table_create_date' => '购买日期',
     'invoice_table_status' => '状态',
     'invoice_table_none' => '暂无数据',
     'invoice_table_closed' => '关闭',

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

@@ -17,7 +17,7 @@
                     </div>
                 @endif
                 <!-- BEGIN PORTLET-->
-                <div class="portlet light form-fit bordered">
+                <div class="portlet light bordered">
                     <div class="portlet-title">
                         <div class="caption">
                             <span class="caption-subject font-dark sbold uppercase">添加文章</span>
@@ -66,7 +66,7 @@
                             </div>
                             <div class="form-actions">
                                 <div class="row">
-                                    <div class="col-md-offset-6">
+                                    <div class="col-md-12">
                                         <button type="submit" class="btn green">提 交</button>
                                     </div>
                                 </div>

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

@@ -51,7 +51,7 @@
                             </div>
                             <div class="form-actions">
                                 <div class="row">
-                                    <div class="col-md-offset-3">
+                                    <div class="col-md-12">
                                         <button type="submit" class="btn green"> 提 交</button>
                                     </div>
                                 </div>

+ 10 - 21
resources/views/admin/addLabel.blade.php

@@ -17,41 +17,30 @@
                     </div>
                 @endif
                 <!-- BEGIN PORTLET-->
-                <div class="portlet light form-fit bordered">
+                <div class="portlet light bordered">
                     <div class="portlet-title">
                         <div class="caption">
-                            <span class="caption-subject font-dark sbold uppercase">添加标签</span>
+                            <span class="caption-subject font-dark bold uppercase">添加标签</span>
                         </div>
-                        <div class="actions"></div>
                     </div>
                     <div class="portlet-body form">
-                        <!-- BEGIN FORM-->
-                        <form action="{{url('admin/addLabel')}}" method="post" enctype="multipart/form-data" class="form-horizontal" onsubmit="return doSubmit();">
+                        <form role="form" action="{{url('admin/addLabel')}}" method="post" enctype="multipart/form-data" onsubmit="return doSubmit();">
                             <div class="form-body">
                                 <div class="form-group">
-                                    <label class="control-label col-md-1">名称</label>
-                                    <div class="col-md-6">
-                                        <input type="text" class="form-control" name="name" id="name" placeholder="" autofocus required>
-                                        <input type="hidden" name="_token" value="{{csrf_token()}}">
-                                    </div>
+                                    <label>名称</label>
+                                    <input type="text" class="form-control" name="name" id="name" placeholder="" autofocus required>
+                                    <input type="hidden" name="_token" value="{{csrf_token()}}">
                                 </div>
                                 <div class="form-group">
-                                    <label class="control-label col-md-1">排序</label>
-                                    <div class="col-md-6">
-                                        <input type="text" class="form-control" name="sort" id="sort" value="0" required />
-                                        <span class="help-block"> 值越高显示时越靠前 </span>
-                                    </div>
+                                    <label>排序</label>
+                                    <input type="text" class="form-control" name="sort" id="sort" value="0" required />
+                                    <span class="help-block"> 值越高显示时越靠前 </span>
                                 </div>
                             </div>
                             <div class="form-actions">
-                                <div class="row">
-                                    <div class="col-md-offset-6">
-                                        <button type="submit" class="btn green">提 交</button>
-                                    </div>
-                                </div>
+                                <button type="submit" class="btn green">提交</button>
                             </div>
                         </form>
-                        <!-- END FORM-->
                     </div>
                 </div>
                 <!-- END PORTLET-->

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

@@ -71,7 +71,7 @@
                                                                     @endforeach
                                                                 @endif
                                                             </select>
-                                                            <span class="help-block">没有关联任何分组时则节点对于用户不可见</span>
+                                                            <span class="help-block">订阅时分组展示</span>
                                                         </div>
                                                     </div>
                                                     <div class="form-group">
@@ -286,7 +286,7 @@
                                 </div>
                                 <div class="form-actions">
                                     <div class="row">
-                                        <div class="col-md-offset-6">
+                                        <div class="col-md-12">
                                             <button type="submit" class="btn green">提 交</button>
                                         </div>
                                     </div>

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

@@ -283,7 +283,7 @@
                         </div>
                         <div class="form-actions">
                             <div class="row">
-                                <div class="col-md-offset-6">
+                                <div class="col-md-12">
                                     <button type="submit" class="btn green">提 交</button>
                                 </div>
                             </div>

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

@@ -34,8 +34,8 @@
                                 <button type="button" class="btn btn-sm grey" onclick="do_reset();">重置</button>
                             </div>
                         </div>
-                        <div class="table-scrollable">
-                            <table class="table table-striped table-bordered table-hover table-checkable order-column">
+                        <div class="table-scrollable table-scrollable-borderless">
+                            <table class="table table-hover table-light">
                                 <thead>
                                     <tr class="uppercase">
                                         <th> # </th>

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

@@ -24,8 +24,8 @@
                         </div>
                     </div>
                     <div class="portlet-body">
-                        <div class="table-scrollable">
-                            <table class="table table-striped table-bordered table-hover table-checkable order-column">
+                        <div class="table-scrollable table-scrollable-borderless">
+                            <table class="table table-hover table-light">
                                 <thead>
                                 <tr>
                                     <th> # </th>
@@ -39,13 +39,13 @@
                                 <tbody>
                                 @if($articleList->isEmpty())
                                     <tr>
-                                        <td colspan="6">暂无数据</td>
+                                        <td colspan="6" style="text-align: center;">暂无数据</td>
                                     </tr>
                                 @else
                                     @foreach($articleList as $article)
                                         <tr class="odd gradeX">
                                             <td> {{$article->id}} </td>
-                                            <td> <a href="{{url('user/article?id=' . $article->id)}}" target="_blank"> {{$article->title}} </a> </td>
+                                            <td> <a href="{{url('user/article?id=' . $article->id)}}" target="_blank"> {{str_limit($article->title, 80)}} </a> </td>
                                             <td> {{$article->type == '1' ? '文章' : '公告'}} </td>
                                             <td> {{$article->sort}} </td>
                                             <td> {{$article->created_at}} </td>

+ 7 - 3
resources/views/admin/config.blade.php

@@ -194,19 +194,23 @@
                                     <table class="table table-striped table-bordered table-hover table-checkable order-column">
                                         <thead>
                                             <tr>
-                                                <th style="width: 35%;"> 国家/地区名称 </th>
-                                                <th style="width: 35%;"> 代码 </th>
+                                                <th style="width: 20%;"> 图标 </th>
+                                                <th style="width: 25%;"> 国家/地区名称 </th>
+                                                <th style="width: 25%;"> 代码 </th>
                                                 <th style="width: 30%;"> 操作 </th>
                                             </tr>
                                         </thead>
                                         <tbody>
                                         @if($country_list->isEmpty())
                                             <tr>
-                                                <td colspan="3">暂无数据</td>
+                                                <td colspan="4">暂无数据</td>
                                             </tr>
                                         @else
                                             @foreach($country_list as $country)
                                                 <tr class="odd gradeX" >
+                                                    <td>
+                                                        <img src="{{asset('assets/images/country/' . $country->country_code . '.png')}}" />
+                                                    </td>
                                                     <td> <input id="country_name_{{$country->id}}" name="country_name" value="{{$country->country_name}}" type="text" class="form-control"> </td>
                                                     <td> <input id="country_code_{{$country->id}}" name="country_code" value="{{$country->country_code}}" type="text" class="form-control"></td>
                                                     <td>

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

@@ -17,7 +17,7 @@
                     </div>
                 @endif
                 <!-- BEGIN PORTLET-->
-                <div class="portlet light form-fit bordered">
+                <div class="portlet light bordered">
                     <div class="portlet-title">
                         <div class="caption">
                             <span class="caption-subject font-darm sbold uppercase">编辑文章</span>
@@ -66,7 +66,7 @@
                             </div>
                             <div class="form-actions">
                                 <div class="row">
-                                    <div class="col-md-offset-6">
+                                    <div class="col-md-12">
                                         <button type="submit" class="btn green">提 交</button>
                                     </div>
                                 </div>

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

@@ -51,7 +51,7 @@
                             </div>
                             <div class="form-actions">
                                 <div class="row">
-                                    <div class="col-md-offset-3">
+                                    <div class="col-md-12">
                                         <button type="submit" class="btn green"> 提 交</button>
                                     </div>
                                 </div>

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

@@ -45,7 +45,7 @@
                             </div>
                             <div class="form-actions">
                                 <div class="row">
-                                    <div class="col-md-offset-6">
+                                    <div class="col-md-12">
                                         <button type="submit" class="btn green">提 交</button>
                                     </div>
                                 </div>

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

@@ -69,7 +69,7 @@
                                                                     @endforeach
                                                                 @endif
                                                             </select>
-                                                            <span class="help-block">没有关联任何分组时则节点不可见</span>
+                                                            <span class="help-block">订阅时分组展示</span>
                                                         </div>
                                                     </div>
                                                     <div class="form-group">
@@ -284,7 +284,7 @@
                                 </div>
                                 <div class="form-actions">
                                     <div class="row">
-                                        <div class="col-md-offset-6">
+                                        <div class="col-md-12">
                                             <button type="submit" class="btn green">提 交</button>
                                         </div>
                                     </div>

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

@@ -319,7 +319,7 @@
                         </div>
                         <div class="form-actions">
                             <div class="row">
-                                <div class="col-md-offset-6">
+                                <div class="col-md-12">
                                     <button type="submit" class="btn green">提 交</button>
                                 </div>
                             </div>

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

@@ -24,11 +24,11 @@
                         </div>
                     </div>
                     <div class="portlet-body">
-                        <div class="table-scrollable">
-                            <table class="table table-striped table-bordered table-hover table-checkable order-column">
+                        <div class="table-scrollable table-scrollable-borderless">
+                            <table class="table table-hover table-light">
                                 <thead>
                                 <tr>
-                                    <th> ID </th>
+                                    <th> # </th>
                                     <th> 分组名称 </th>
                                     <th> 可见级别 </th>
                                     <th> 操作 </th>
@@ -37,7 +37,7 @@
                                 <tbody>
                                     @if($groupList->isEmpty())
                                         <tr>
-                                            <td colspan="4">暂无数据</td>
+                                            <td colspan="4" style="text-align: center;">暂无数据</td>
                                         </tr>
                                     @else
                                         @foreach($groupList as $group)

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

@@ -50,8 +50,8 @@
                                             <th> 邀请码 </th>
                                             <th> 有效期 </th>
                                             <th> 生成者 </th>
-                                            <th> 使用者 </th>
                                             <th> 状态 </th>
+                                            <th> 使用者 </th>
                                         </tr>
                                     </thead>
                                     <tbody>
@@ -66,7 +66,6 @@
                                                     <td> <a href="{{url('register?aff='.Session::get('user')['id'].'&code='.$invite->code)}}" target="_blank">{{$invite->code}}</a> </td>
                                                     <td> {{$invite->dateline}} </td>
                                                     <td> {{empty($invite->generator) ? '【账号已删除】' : $invite->generator->username}} </td>
-                                                    <td> {{empty($invite->user) ? '' : $invite->user->username}} </td>
                                                     <td>
                                                         @if($invite->status == '0')
                                                             <span class="label label-sm label-success"> 未使用 </span>
@@ -76,6 +75,7 @@
                                                             <span class="label label-sm label-default"> 已过期 </span>
                                                         @endif
                                                     </td>
+                                                    <td> {{empty($invite->user) ? '' : $invite->user->username}} </td>
                                                 </tr>
                                             @endforeach
                                         @endif

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

@@ -24,8 +24,8 @@
                         </div>
                     </div>
                     <div class="portlet-body">
-                        <div class="table-scrollable">
-                            <table class="table table-striped table-bordered table-hover table-checkable order-column">
+                        <div class="table-scrollable table-scrollable-borderless">
+                            <table class="table table-hover table-light">
                                 <thead>
                                 <tr>
                                     <th> # </th>
@@ -39,7 +39,7 @@
                                 <tbody>
                                 @if($labelList->isEmpty())
                                     <tr>
-                                        <td colspan="6">暂无数据</td>
+                                        <td colspan="6" style="text-align: center;">暂无数据</td>
                                     </tr>
                                 @else
                                     @foreach($labelList as $label)

+ 6 - 0
resources/views/admin/layouts.blade.php

@@ -147,6 +147,12 @@
                         <span class="title">标签管理</span>
                     </a>
                 </li>
+                <li class="nav-item {{in_array(Request::path(), ['admin/orderList']) ? 'active open' : ''}}">
+                    <a href="{{url('admin/orderList')}}" class="nav-link nav-toggle">
+                        <i class="fa fa-reorder"></i>
+                        <span class="title">订单管理</span>
+                    </a>
+                </li>
                 <li class="nav-item {{in_array(Request::path(), ['admin/articleList', 'admin/addArticle', 'admin/editArticle', 'admin/articleLogList']) ? 'active open' : ''}}">
                     <a href="javascript:;" class="nav-link nav-toggle">
                         <i class="icon-docs"></i>

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

@@ -33,8 +33,8 @@
                         </div>
                     </div>
                     <div class="portlet-body">
-                        <div class="table-scrollable">
-                            <table class="table table-striped table-bordered table-hover table-checkable order-column">
+                        <div class="table-scrollable table-scrollable-borderless">
+                            <table class="table table-hover table-light">
                                 <thead>
                                 <tr>
                                     <th> <span class="node-id"><a href="javascript:showIdTips();">ID</a></span> </th>
@@ -43,7 +43,7 @@
                                     <th> IP </th>
                                     <th> 负载 </th>
                                     <th> 在线 </th>
-                                    <th> 产生流量/可用流量 </th>
+                                    <th> 产生流量 </th>
                                     <th> 流量比例 </th>
                                     <th> 扩展 </th>
                                     <th> 操作 </th>
@@ -69,7 +69,7 @@
                                                 <td> <span class="label label-danger">{{$node->ip}}</span> </td>
                                                 <td> <span class="label label-danger">{{$node->load}}</span> </td>
                                                 <td> <span class="label label-danger">{{$node->online_users}}</span> </td>
-                                                <td> {{$node->transfer}} / {{$node->traffic}}G </td>
+                                                <td> {{$node->transfer}}G </td>
                                                 <td> <span class="label label-danger">{{$node->traffic_rate}}</span> </td>
                                                 <td>
                                                     @if($node->compatible) <span class="label label-info">兼</span> @endif
@@ -147,7 +147,7 @@
 
         // 显示提示
         function showIdTips() {
-            layer.tips('对应SSR后端usermysql.json中的nodeid', '.node-id', {
+            layer.tips('对应SSR(R)后端usermysql.json中的nodeid', '.node-id', {
                 tips: [3, '#3595CC'],
                 time: 1200
             });

+ 111 - 0
resources/views/admin/orderList.blade.php

@@ -0,0 +1,111 @@
+@extends('admin.layouts')
+
+@section('css')
+@endsection
+@section('title', '控制面板')
+@section('content')
+    <!-- BEGIN CONTENT BODY -->
+    <div class="page-content" style="padding-top:0;">
+        <!-- BEGIN PAGE BASE CONTENT -->
+        <div class="row">
+            <div class="col-md-12">
+                <div class="portlet light bordered">
+                    <div class="portlet-title">
+                        <div class="caption">
+                            <span class="caption-subject font-dark bold uppercase">订单列表</span>
+                        </div>
+                    </div>
+                    <div class="portlet-body">
+                        <div class="table-scrollable table-scrollable-borderless">
+                            <table class="table table-hover table-light">
+                                <thead>
+                                    <tr class="uppercase">
+                                        <th> # </th>
+                                        <th> 订单编号 </th>
+                                        <th> 操作人 </th>
+                                        <th> 商品 </th>
+                                        <th> 优惠券 </th>
+                                        <th> 原价 </th>
+                                        <th> 实价 </th>
+                                        <th> 过期时间 </th>
+                                        <th> 支付方式 </th>
+                                        <th> 订单状态 </th>
+                                        <th> 操作 </th>
+                                    </tr>
+                                </thead>
+                                <tbody>
+                                    @if($orderList->isEmpty())
+                                        <tr>
+                                            <td colspan="11" style="text-align: center;">暂无数据</td>
+                                        </tr>
+                                    @else
+                                        @foreach($orderList as $order)
+                                            <tr>
+                                                <td> {{$order->oid}} </td>
+                                                <td> {{$order->orderId}} </td>
+                                                <td> {{$order->user->username}} </td>
+                                                <td> {{$order->goods->name}} </td>
+                                                <td> {{$order->coupon ? $order->coupon->name : ''}} </td>
+                                                <td> ¥{{$order->totalOriginalPrice}} </td>
+                                                <td> ¥{{$order->totalPrice}} </td>
+                                                <td> {{$order->is_expire ? '已过期' : $order->expire_at}} </td>
+                                                <td> {{$order->pay_way == '1' ? '余额支付' : '有赞云支付'}} </td>
+                                                <td>
+                                                    @if($order->status == '-1')
+                                                        已关闭
+                                                    @elseif ($order->status == '0')
+                                                        待支付
+                                                    @elseif ($order->status == '1')
+                                                        已支付待确认
+                                                    @else
+                                                        已完成
+                                                    @endif
+                                                </td>
+                                                <td> {{$order->created_at}} </td>
+                                            </tr>
+                                        @endforeach
+                                    @endif
+                                </tbody>
+                            </table>
+                        </div>
+                        <div class="row">
+                            <div class="col-md-4 col-sm-4">
+                                <div class="dataTables_info" role="status" aria-live="polite">共 {{$orderList->total()}} 个订单</div>
+                            </div>
+                            <div class="col-md-8 col-sm-8">
+                                <div class="dataTables_paginate paging_bootstrap_full_number pull-right">
+                                    {{ $orderList->links() }}
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <!-- END PAGE BASE CONTENT -->
+    </div>
+    <!-- END CONTENT BODY -->
+@endsection
+@section('script')
+    <script src="/js/layer/layer.js" type="text/javascript"></script>
+
+    <script type="text/javascript">
+        // 审核
+        function doAudit(id) {
+            window.open('{{url('admin/applyDetail?id=')}}' + id);
+        }
+
+        // 搜索
+        function do_search() {
+            var username = $("#username").val();
+            var status = $("#status option:checked").val();
+
+            window.location.href = '{{url('admin/applyList')}}' + '?username=' + username + '&status=' + status;
+        }
+
+        // 重置
+        function do_reset() {
+            window.location.href = '{{url('admin/applyList')}}';
+        }
+    </script>
+@endsection

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

@@ -80,7 +80,7 @@
                                                 </div>
                                                 <div class="form-actions">
                                                     <div class="row">
-                                                        <div class=" col-md-4">
+                                                        <div class="col-md-12">
                                                             <button type="submit" class="btn green"> 提 交 </button>
                                                         </div>
                                                     </div>

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

@@ -31,11 +31,11 @@
                                 <button type="button" class="btn btn-sm grey" onclick="doReset();">重置</button>
                             </div>
                         </div>
-                        <div class="table-scrollable">
-                            <table class="table table-striped table-bordered table-hover table-checkable order-column">
+                        <div class="table-scrollable table-scrollable-borderless">
+                            <table class="table table-hover table-light">
                                 <thead>
                                 <tr>
-                                    <th> ID </th>
+                                    <th> # </th>
                                     <th> 用户 </th>
                                     <th> 唯一识别码 </th>
                                     <th> 请求次数 </th>

+ 59 - 33
resources/views/admin/system.blade.php

@@ -40,13 +40,8 @@
                                         <li>
                                             <a href="#tab_6" data-toggle="tab"> 自动化任务 </a>
                                         </li>
-                                        <!--
                                         <li>
-                                            <a href="#tab_7" data-toggle="tab"> 充值二维码设置 </a>
-                                        </li>
-                                        -->
-                                        <li>
-                                            <a href="#tab_8" data-toggle="tab"> PayPal接口设置 </a>
+                                            <a href="#tab_7" data-toggle="tab"> 有赞云设置 </a>
                                         </li>
                                     </ul>
                                 </div>
@@ -77,7 +72,7 @@
                                                                     <button class="btn btn-success" type="button" onclick="setWebsiteUrl()">修改</button>
                                                                 </span>
                                                                 </div>
-                                                                <span class="help-block"> 生成重置密码必备,示例:https://github.com </span>
+                                                                <span class="help-block"> 生成重置密码必备,示例:https://www.ssrpanel.com </span>
                                                             </div>
                                                         </div>
                                                     </div>
@@ -249,7 +244,7 @@
                                                                         <button class="btn btn-success" type="button" onclick="setSubscribeDomain()">修改</button>
                                                                     </span>
                                                                 </div>
-                                                                <span class="help-block"> (推荐)防止网站域名被投毒后用户无法正常订阅,需带http://或https:// </span>
+                                                                <span class="help-block"> (推荐)防止面板域名被投毒后无法正常订阅,需带http://或https:// </span>
                                                             </div>
                                                         </div>
                                                         <div class="col-md-6">
@@ -553,10 +548,10 @@
                                                             </div>
                                                         </div>
                                                         <div class="col-md-6">
-                                                            <label for="auto_release_port" class="col-md-3 control-label">端口释放</label>
+                                                            <label for="auto_release_port" class="col-md-3 control-label">端口自动释放</label>
                                                             <div class="col-md-9">
                                                                 <input type="checkbox" class="make-switch" @if($auto_release_port) checked @endif id="auto_release_port" data-on-color="success" data-off-color="danger" data-on-text="启用" data-off-text="关闭">
-                                                                <span class="help-block"> (推荐)被禁用的用户端口自动释放,重新启用则需要手动分配端口 </span>
+                                                                <span class="help-block"> 被禁用的用户端口自动释放,重新启用用户则需要手动分配端口并手动重启一次SSR(R) </span>
                                                             </div>
                                                         </div>
                                                     </div>
@@ -564,38 +559,56 @@
                                                 </div>
                                             </form>
                                         </div>
-                                        <div class="tab-pane" id="tab_8">
+                                        <div class="tab-pane" id="tab_7">
                                             <form action="#" method="post" class="form-horizontal">
                                                 <div class="portlet-body">
+                                                    <div class="form-group">
+                                                        <div class="col-md-12">
+                                                            <div class="alert alert-info" style="text-align: center;">
+                                                                请在<a href="https://console.youzanyun.com/login" target="_blank">有赞云</a>后台设置应用的推送网址为:{{$website_url . '/api/yzy'}}
+                                                            </div>
+                                                        </div>
+                                                    </div>
                                                     <div class="form-group">
                                                         <div class="col-md-6">
-                                                            <label for="paypal_status" class="col-md-3 control-label">本功能</label>
+                                                            <label for="is_youzan" class="col-md-3 control-label">本功能</label>
                                                             <div class="col-md-9">
-                                                                <input type="checkbox" class="make-switch" @if($paypal_status) checked @endif id="paypal_status" data-on-color="success" data-off-color="danger" data-on-text="启用" data-off-text="关闭">
-                                                                <span class="help-block"> 启用前请先去PayPal申请ClientID和ClientSecret </span>
+                                                                <input type="checkbox" class="make-switch" @if($is_youzan) checked @endif id="is_youzan" data-on-color="success" data-off-color="danger" data-on-text="启用" data-off-text="关闭">
+                                                                <span class="help-block"> 启用前请先到<a href="https://console.youzanyun.com/dashboard">有赞云</a>申请client_id和client_secret并绑定店铺 </span>
+                                                            </div>
+                                                        </div>
+                                                        <div class="col-md-6">
+                                                            <label for="kdt_id" class="col-md-3 control-label">kdt_id</label>
+                                                            <div class="col-md-9">
+                                                                <div class="input-group">
+                                                                    <input class="form-control" type="text" name="kdt_id" value="{{$kdt_id}}" id="kdt_id" />
+                                                                    <span class="input-group-btn">
+                                                                        <button class="btn btn-success" type="button" onclick="setKdtId()">修改</button>
+                                                                    </span>
+                                                                </div>
+                                                                <span class="help-block"> 即:授权店铺id </span>
                                                             </div>
                                                         </div>
-                                                        <div class="col-md-6"></div>
                                                     </div>
                                                     <div class="form-group">
                                                         <div class="col-md-6">
-                                                            <label for="paypal_client_id" class="col-md-3 control-label">ClientID</label>
+                                                            <label for="youzan_client_id" class="col-md-3 control-label">client_id</label>
                                                             <div class="col-md-9">
                                                                 <div class="input-group">
-                                                                    <input class="form-control" type="text" name="paypal_client_id" value="{{$paypal_client_id}}" id="paypal_client_id" />
+                                                                    <input class="form-control" type="text" name="youzan_client_id" value="{{$youzan_client_id}}" id="youzan_client_id" />
                                                                     <span class="input-group-btn">
-                                                                        <button class="btn btn-success" type="button" onclick="setPaypalClientID()">修改</button>
+                                                                        <button class="btn btn-success" type="button" onclick="setYouzanClientId()">修改</button>
                                                                     </span>
                                                                 </div>
                                                             </div>
                                                         </div>
                                                         <div class="col-md-6">
-                                                            <label for="paypal_client_secret" class="col-md-3 control-label">ClientSecret</label>
+                                                            <label for="youzan_client_secret" class="col-md-3 control-label">client_secret</label>
                                                             <div class="col-md-9">
                                                                 <div class="input-group">
-                                                                    <input class="form-control" type="text" name="paypal_client_secret" value="{{$paypal_client_secret}}" id="paypal_client_secret" />
+                                                                    <input class="form-control" type="text" name="youzan_client_secret" value="{{$youzan_client_secret}}" id="youzan_client_secret" />
                                                                     <span class="input-group-btn">
-                                                                    <button class="btn btn-success" type="button" onclick="setPaypalClientSecret()">修改</button>
+                                                                    <button class="btn btn-success" type="button" onclick="setYouzanClientSecret()">修改</button>
                                                                 </span>
                                                                 </div>
                                                             </div>
@@ -938,12 +951,12 @@
             }
         });
 
-        // 启用、禁用PayPal支付接口
-        $('#paypal_status').on({
+        // 启用、禁用有赞云
+        $('#is_youzan').on({
             'switchChange.bootstrapSwitch': function(event, state) {
-                var paypal_status = state ? 1 : 0;
+                var is_youzan = state ? 1 : 0;
 
-                $.post("{{url('admin/setConfig')}}", {_token:'{{csrf_token()}}', name:'paypal_status', value:paypal_status}, function (ret) {
+                $.post("{{url('admin/setConfig')}}", {_token:'{{csrf_token()}}', name:'is_youzan', value:is_youzan}, function (ret) {
                     layer.msg(ret.message, {time:1000}, function() {
                         if (ret.status == 'fail') {
                             window.location.reload();
@@ -1018,11 +1031,24 @@
             });
         }
 
-        // 设置PayPal的ClientID
-        function setPaypalClientID() {
-            var paypal_client_id = $("#paypal_client_id").val();
+        // 设置有赞云的kdt_id
+        function setKdtId() {
+            var kdt_id = $("#kdt_id").val();
+
+            $.post("{{url('admin/setConfig')}}", {_token:'{{csrf_token()}}', name:'kdt_id', value:kdt_id}, function (ret) {
+                layer.msg(ret.message, {time:1000}, function() {
+                    if (ret.status == 'fail') {
+                        window.location.reload();
+                    }
+                });
+            });
+        }
+
+        // 设置有赞云的client_id
+        function setYouzanClientId() {
+            var youzan_client_id = $("#youzan_client_id").val();
 
-            $.post("{{url('admin/setConfig')}}", {_token:'{{csrf_token()}}', name:'paypal_client_id', value:paypal_client_id}, function (ret) {
+            $.post("{{url('admin/setConfig')}}", {_token:'{{csrf_token()}}', name:'youzan_client_id', value:youzan_client_id}, function (ret) {
                 layer.msg(ret.message, {time:1000}, function() {
                     if (ret.status == 'fail') {
                         window.location.reload();
@@ -1031,11 +1057,11 @@
             });
         }
 
-        // 设置PayPal的ClientSecret
-        function setPaypalClientSecret() {
-            var paypal_client_secret = $("#paypal_client_secret").val();
+        // 设置有赞云的client_secret
+        function setYouzanClientSecret() {
+            var youzan_client_secret = $("#youzan_client_secret").val();
 
-            $.post("{{url('admin/setConfig')}}", {_token:'{{csrf_token()}}', name:'paypal_client_secret', value:paypal_client_secret}, function (ret) {
+            $.post("{{url('admin/setConfig')}}", {_token:'{{csrf_token()}}', name:'youzan_client_secret', value:youzan_client_secret}, function (ret) {
                 layer.msg(ret.message, {time:1000}, function() {
                     if (ret.status == 'fail') {
                         window.location.reload();

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

@@ -34,11 +34,11 @@
                                 <button type="button" class="btn btn-sm grey" onclick="do_reset();">重置</button>
                             </div>
                         </div>
-                        <div class="table-scrollable">
-                            <table class="table table-striped table-bordered table-hover table-checkable order-column">
+                        <div class="table-scrollable table-scrollable-borderless">
+                            <table class="table table-hover table-light">
                                 <thead>
                                 <tr>
-                                    <th> ID </th>
+                                    <th> # </th>
                                     <th> 用户 </th>
                                     <th> 节点 </th>
                                     <th> 流量比例 </th>

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

@@ -28,8 +28,8 @@
                                 <button type="button" class="btn btn-sm grey" onclick="do_reset();">重置</button>
                             </div>
                         </div>
-                        <div class="table-scrollable">
-                            <table class="table table-striped table-bordered table-hover table-checkable order-column">
+                        <div class="table-scrollable table-scrollable-borderless">
+                            <table class="table table-hover table-light">
                                 <thead>
                                 <tr>
                                     <th> # </th>

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

@@ -28,8 +28,8 @@
                                 <button type="button" class="btn btn-sm grey" onclick="doReset();">重置</button>
                             </div>
                         </div>
-                        <div class="table-scrollable">
-                            <table class="table table-striped table-bordered table-hover table-checkable order-column">
+                        <div class="table-scrollable table-scrollable-borderless">
+                            <table class="table table-hover table-light">
                                 <thead>
                                 <tr>
                                     <th> # </th>

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

@@ -69,8 +69,8 @@
                                 <button type="button" class="btn btn-sm grey" onclick="doReset();">重置</button>
                             </div>
                         </div>
-                        <div class="table-scrollable">
-                            <table class="table table-striped table-bordered table-hover table-checkable order-column">
+                        <div class="table-scrollable table-scrollable-borderless">
+                            <table class="table table-hover table-light">
                                 <thead>
                                 <tr>
                                     <th> # </th>

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

@@ -42,8 +42,8 @@
                                 <button type="button" class="btn btn-sm grey" onclick="doReset();">重置</button>
                             </div>
                         </div>
-                        <div class="table-scrollable">
-                            <table class="table table-striped table-bordered table-hover table-checkable order-column">
+                        <div class="table-scrollable table-scrollable-borderless">
+                            <table class="table table-hover table-light">
                                 <thead>
                                 <tr>
                                     <th> # </th>

+ 19 - 19
resources/views/coupon/addCoupon.blade.php

@@ -24,7 +24,7 @@
                     </div>
                 @endif
                 <!-- BEGIN PORTLET-->
-                <div class="portlet light form-fit bordered">
+                <div class="portlet light bordered">
                     <div class="portlet-title">
                         <div class="caption">
                             <span class="caption-subject font-dark sbold uppercase">生成卡券</span>
@@ -36,15 +36,15 @@
                         <form action="{{url('coupon/addCoupon')}}" method="post" enctype="multipart/form-data" class="form-horizontal" role="form">
                             <div class="form-body">
                                 <div class="form-group">
-                                    <label class="control-label col-md-2">卡券名称</label>
-                                    <div class="col-md-6">
+                                    <label class="control-label col-md-3">卡券名称</label>
+                                    <div class="col-md-4">
                                         <input type="text" class="form-control" name="name" value="" id="name" placeholder="" required>
                                         <input type="hidden" name="_token" value="{{csrf_token()}}" />
                                     </div>
                                 </div>
                                 <div class="form-group">
-                                    <label class="control-label col-md-2">LOGO</label>
-                                    <div class="col-md-9">
+                                    <label class="control-label col-md-3">LOGO</label>
+                                    <div class="col-md-4">
                                         <div class="fileinput fileinput-new" data-provides="fileinput">
                                             <div class="fileinput-new thumbnail" style="width: 200px; height: 150px;">
                                                 <img src="/assets/images/noimage.png" alt="" />
@@ -62,8 +62,8 @@
                                     </div>
                                 </div>
                                 <div class="form-group">
-                                    <label class="control-label col-md-2">类型</label>
-                                    <div class="col-md-6">
+                                    <label class="control-label col-md-3">类型</label>
+                                    <div class="col-md-4">
                                         <div class="mt-radio-inline">
                                             <label class="mt-radio">
                                                 <input type="radio" name="type" value="1" checked> 抵用券
@@ -81,8 +81,8 @@
                                     </div>
                                 </div>
                                 <div class="form-group">
-                                    <label class="control-label col-md-2">用途</label>
-                                    <div class="col-md-6">
+                                    <label class="control-label col-md-3">用途</label>
+                                    <div class="col-md-4">
                                         <div class="mt-radio-inline">
                                             <label class="mt-radio">
                                                 <input type="radio" name="usage" value="1" id="usage1" checked> 仅限一次性使用
@@ -96,8 +96,8 @@
                                     </div>
                                 </div>
                                 <div class="form-group">
-                                    <label class="control-label col-md-2">数量</label>
-                                    <div class="col-md-3">
+                                    <label class="control-label col-md-3">数量</label>
+                                    <div class="col-md-4">
                                         <div class="input-group">
                                             <input type="text" class="form-control" name="num" value="{{Request::old('num')}}" id="num" placeholder="" required>
                                             <span class="input-group-addon">张</span>
@@ -105,8 +105,8 @@
                                     </div>
                                 </div>
                                 <div class="form-group">
-                                    <label class="control-label col-md-2">金额</label>
-                                    <div class="col-md-3">
+                                    <label class="control-label col-md-3">金额</label>
+                                    <div class="col-md-4">
                                         <div class="input-group">
                                             <input type="text" class="form-control" name="amount" value="{{Request::old('amount')}}" id="amount" placeholder="" required>
                                             <span class="input-group-addon">元</span>
@@ -114,8 +114,8 @@
                                     </div>
                                 </div>
                                 <div class="form-group hide">
-                                    <label class="control-label col-md-2">折扣</label>
-                                    <div class="col-md-3">
+                                    <label class="control-label col-md-3">折扣</label>
+                                    <div class="col-md-4">
                                         <div class="input-group">
                                             <input type="text" class="form-control" name="discount" value="{{Request::old('discount')}}" id="discount" placeholder="">
                                             <span class="input-group-addon">折</span>
@@ -123,8 +123,8 @@
                                     </div>
                                 </div>
                                 <div class="form-group">
-                                    <label class="control-label col-md-2">有效期</label>
-                                    <div class="col-md-6">
+                                    <label class="control-label col-md-3">有效期</label>
+                                    <div class="col-md-4">
                                         <div class="input-group input-large input-daterange">
                                             <input type="text" class="form-control" name="available_start" value="{{Request::old('available_start')}}" id="available_start" required>
                                             <span class="input-group-addon"> 至 </span>
@@ -135,8 +135,8 @@
                             </div>
                             <div class="form-actions">
                                 <div class="row">
-                                    <div class="col-md-offset-2 col-md-9">
-                                        <button type="submit" class="btn green"> <i class="fa fa-check"></i>  交</button>
+                                    <div class="col-md-offset-3 col-md-4">
+                                        <button type="submit" class="btn green">提交</button>
                                     </div>
                                 </div>
                             </div>

+ 5 - 5
resources/views/coupon/couponList.blade.php

@@ -30,11 +30,11 @@
                         </div>
                     </div>
                     <div class="portlet-body">
-                        <div class="table-scrollable">
-                            <table class="table table-striped table-bordered table-hover table-checkable order-column">
+                        <div class="table-scrollable table-scrollable-borderless">
+                            <table class="table table-hover table-light">
                                 <thead>
                                 <tr>
-                                    <th> ID </th>
+                                    <th> # </th>
                                     <th> 名称 </th>
                                     <th> 券码 </th>
                                     <th> LOGO </th>
@@ -49,7 +49,7 @@
                                 <tbody>
                                 @if($couponList->isEmpty())
                                     <tr>
-                                        <td colspan="10">暂无数据</td>
+                                        <td colspan="10" style="text-align: center;">暂无数据</td>
                                     </tr>
                                 @else
                                     @foreach($couponList as $coupon)
@@ -89,7 +89,7 @@
                                             </td>
                                             <td>
                                                 @if($coupon->status != '1')
-                                                    <button type="button" class="btn btn-sm red btn-outline" onclick="delCoupon('{{$coupon->id}}')">删除</button>
+                                                    <button type="button" class="btn btn-sm red btn-outline" onclick="delCoupon('{{$coupon->id}}')"><i class="fa fa-trash"></i></button>
                                                 @endif
                                             </td>
                                         </tr>

+ 3 - 3
resources/views/emailLog/logList.blade.php

@@ -24,8 +24,8 @@
                         </div>
                     </div>
                     <div class="portlet-body">
-                        <div class="table-scrollable">
-                            <table class="table table-striped table-bordered table-hover table-checkable order-column">
+                        <div class="table-scrollable table-scrollable-borderless">
+                            <table class="table table-hover table-light">
                                 <thead>
                                 <tr>
                                     <th> # </th>
@@ -39,7 +39,7 @@
                                 <tbody>
                                 @if($list->isEmpty())
                                     <tr>
-                                        <td colspan="6">暂无数据</td>
+                                        <td colspan="6" style="text-align: center;">暂无数据</td>
                                     </tr>
                                 @else
                                     @foreach($list as $vo)

+ 73 - 0
resources/views/payment/detail.blade.php

@@ -0,0 +1,73 @@
+@extends('user.layouts')
+
+@section('css')
+
+@endsection
+@section('title', trans('home.panel'))
+@section('content')
+    <!-- BEGIN CONTENT BODY -->
+    <div class="page-content" style="padding-top:0;">
+        <!-- BEGIN PAGE BASE CONTENT -->
+        <div class="portlet light bordered">
+            <div class="portlet-body">
+                <div class="alert alert-info" style="text-align: center;">
+                    请使用<strong>支付宝</strong>或<strong>微信</strong>扫描如下二维码
+                </div>
+                <div class="row" style="text-align: center; font-size: 1.05em;">
+                    <div class="col-md-12">
+                        <div class="table-scrollable">
+                            <table class="table table-hover table-light">
+                                <tr>
+                                    <td align="right" width="50%">服务名称:</td>
+                                    <td align="left" width="50%">{{$payment->order->goods->name}}</td>
+                                </tr>
+                                <tr>
+                                    <td align="right">应付金额:</td>
+                                    <td align="left">{{$payment->amount / 100}} 元</td>
+                                </tr>
+                                <tr>
+                                    <td align="right">有效期:</td>
+                                    <td align="left">{{$payment->order->goods->days}} 天</td>
+                                </tr>
+                                <tr>
+                                    <td colspan="2">
+                                        请于15分钟内支付,到期未支付订单将自动关闭
+                                    </td>
+                                </tr>
+                                <tr>
+                                    <td colspan="2" align="center">
+                                        <img src="{{$payment->qr_code}}"/>
+                                    </td>
+                                </tr>
+                            </table>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <!-- END PAGE BASE CONTENT -->
+    </div>
+    <!-- END CONTENT BODY -->
+@endsection
+@section('script')
+    <script src="/js/layer/layer.js" type="text/javascript"></script>
+    <script type="text/javascript">
+        $(document).ready(function(){
+            setInterval("getStatus()", 3000);
+        });
+
+        // 检查支付单状态
+        function getStatus () {
+            var sn = '{{$payment->sn}}';
+
+            $.get("{{url('payment/getStatus')}}", {sn:sn}, function (ret) {
+                console.log(ret);
+                if (ret.status == 'success') {
+                    layer.msg(ret.message, {time:1500}, function() {
+                        window.location.href = '{{url('user/orderList')}}';
+                    });
+                }
+            });
+        }
+    </script>
+@endsection

+ 19 - 19
resources/views/shop/addGoods.blade.php

@@ -39,15 +39,15 @@
                         <form action="{{url('shop/addGoods')}}" method="post" enctype="multipart/form-data" class="form-horizontal" role="form">
                             <div class="form-body">
                                 <div class="form-group">
-                                    <label class="control-label col-md-2">名称</label>
-                                    <div class="col-md-6">
+                                    <label class="control-label col-md-3">名称</label>
+                                    <div class="col-md-4">
                                         <input type="text" class="form-control" name="name" value="" id="name" placeholder="" required>
                                         <input type="hidden" name="_token" value="{{csrf_token()}}" />
                                     </div>
                                 </div>
                                 <div class="form-group">
-                                    <label class="control-label col-md-2">LOGO</label>
-                                    <div class="col-md-9">
+                                    <label class="control-label col-md-3">LOGO</label>
+                                    <div class="col-md-4">
                                         <div class="fileinput fileinput-new" data-provides="fileinput">
                                             <div class="fileinput-new thumbnail" style="width: 200px; height: 150px;">
                                                 <img src="/assets/images/noimage.png" alt="" /> </div>
@@ -64,14 +64,14 @@
                                     </div>
                                 </div>
                                 <div class="form-group">
-                                    <label class="control-label col-md-2">描述</label>
-                                    <div class="col-md-6">
+                                    <label class="control-label col-md-3">描述</label>
+                                    <div class="col-md-4">
                                         <textarea class="form-control" rows="3" name="desc" id="desc" placeholder="商品的简单描述"></textarea>
                                     </div>
                                 </div>
                                 <div class="form-group">
-                                    <label class="control-label col-md-2">内含流量</label>
-                                    <div class="col-md-3">
+                                    <label class="control-label col-md-3">内含流量</label>
+                                    <div class="col-md-4">
                                         <div class="input-group">
                                             <input type="text" class="form-control" name="traffic" value="1024" id="traffic" placeholder="" required="">
                                             <span class="input-group-addon">MiB</span>
@@ -79,8 +79,8 @@
                                     </div>
                                 </div>
                                 <div class="form-group">
-                                    <label class="control-label col-md-2">售价</label>
-                                    <div class="col-md-3">
+                                    <label class="control-label col-md-3">售价</label>
+                                    <div class="col-md-4">
                                         <div class="input-group">
                                             <input type="text" class="form-control" name="price" value="" id="price" placeholder="" required>
                                             <span class="input-group-addon">元</span>
@@ -88,15 +88,15 @@
                                     </div>
                                 </div>
                                 <div class="form-group">
-                                    <label class="control-label col-md-2">所需积分</label>
-                                    <div class="col-md-3">
+                                    <label class="control-label col-md-3">所需积分</label>
+                                    <div class="col-md-4">
                                         <input type="text" class="form-control" name="score" value="0" id="score" placeholder="" required>
                                         <span class="help-block">换购该商品需要的积分值</span>
                                     </div>
                                 </div>
                                 <div class="form-group">
-                                    <label for="type" class="control-label col-md-2">类型</label>
-                                    <div class="col-md-6">
+                                    <label for="type" class="control-label col-md-3">类型</label>
+                                    <div class="col-md-4">
                                         <div class="mt-radio-inline">
                                             <label class="mt-radio">
                                                 <input type="radio" name="type" value="1" checked> 流量包
@@ -111,8 +111,8 @@
                                     </div>
                                 </div>
                                 <div class="form-group">
-                                    <label class="control-label col-md-2">有效期</label>
-                                    <div class="col-md-3">
+                                    <label class="control-label col-md-3">有效期</label>
+                                    <div class="col-md-4">
                                         <div class="input-group">
                                             <input type="text" class="form-control" name="days" value="30" id="days" placeholder="" required="">
                                             <span class="input-group-addon">天</span>
@@ -121,8 +121,8 @@
                                     </div>
                                 </div>
                                 <div class="form-group last">
-                                    <label class="control-label col-md-2">状态</label>
-                                    <div class="col-md-6">
+                                    <label class="control-label col-md-3">状态</label>
+                                    <div class="col-md-4">
                                         <div class="mt-radio-inline">
                                             <label class="mt-radio">
                                                 <input type="radio" name="status" value="1" checked> 上架
@@ -138,7 +138,7 @@
                             </div>
                             <div class="form-actions">
                                 <div class="row">
-                                    <div class="col-md-offset-2 col-md-9">
+                                    <div class="col-md-offset-3 col-md-4">
                                         <button type="submit" class="btn green"> <i class="fa fa-check"></i> 提 交</button>
                                     </div>
                                 </div>

+ 19 - 19
resources/views/shop/editGoods.blade.php

@@ -38,16 +38,16 @@
                         <form action="{{url('shop/editGoods')}}" method="post" enctype="multipart/form-data" class="form-horizontal" role="form">
                             <div class="form-body">
                                 <div class="form-group">
-                                    <label class="control-label col-md-2">商品名称</label>
-                                    <div class="col-md-6">
+                                    <label class="control-label col-md-3">商品名称</label>
+                                    <div class="col-md-4">
                                         <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()}}" />
                                     </div>
                                 </div>
                                 <div class="form-group">
-                                    <label class="control-label col-md-2">商品图片</label>
-                                    <div class="col-md-9">
+                                    <label class="control-label col-md-3">商品图片</label>
+                                    <div class="col-md-4">
                                         <div class="fileinput fileinput-new" data-provides="fileinput">
                                             <div class="fileinput-new thumbnail" style="width: 200px; height: 150px;">
                                                 @if ($goods->logo)
@@ -69,14 +69,14 @@
                                     </div>
                                 </div>
                                 <div class="form-group">
-                                    <label class="control-label col-md-2">描述</label>
-                                    <div class="col-md-6">
+                                    <label class="control-label col-md-3">描述</label>
+                                    <div class="col-md-4">
                                         <textarea class="form-control" rows="3" name="desc" id="desc" placeholder="商品的简单描述">{{$goods->desc}}</textarea>
                                     </div>
                                 </div>
                                 <div class="form-group">
-                                    <label class="control-label col-md-2">内含流量</label>
-                                    <div class="col-md-3">
+                                    <label class="control-label col-md-3">内含流量</label>
+                                    <div class="col-md-4">
                                         <div class="input-group">
                                             <input type="text" class="form-control" name="traffic" value="{{$goods->traffic}}" id="traffic" placeholder="" required="">
                                             <span class="input-group-addon">MiB</span>
@@ -84,8 +84,8 @@
                                     </div>
                                 </div>
                                 <div class="form-group">
-                                    <label class="control-label col-md-2">售价</label>
-                                    <div class="col-md-3">
+                                    <label class="control-label col-md-3">售价</label>
+                                    <div class="col-md-4">
                                         <div class="input-group">
                                             <input type="text" class="form-control" name="price" value="{{$goods->price}}" id="price" placeholder="" required>
                                             <span class="input-group-addon">元</span>
@@ -93,15 +93,15 @@
                                     </div>
                                 </div>
                                 <div class="form-group">
-                                    <label class="control-label col-md-2">所需积分</label>
-                                    <div class="col-md-3">
+                                    <label class="control-label col-md-3">所需积分</label>
+                                    <div class="col-md-4">
                                         <input type="text" class="form-control" name="score" value="{{$goods->score}}" id="score" placeholder="" required>
                                         <span class="help-block">换购该商品需要的积分值</span>
                                     </div>
                                 </div>
                                 <div class="form-group">
-                                    <label for="type" class="control-label col-md-2">类型</label>
-                                    <div class="col-md-6">
+                                    <label for="type" class="control-label col-md-3">类型</label>
+                                    <div class="col-md-4">
                                         <div class="mt-radio-inline">
                                             <label class="mt-radio">
                                                 <input type="radio" name="type" value="1" @if($goods->type == 1) checked @endif> 流量包
@@ -116,8 +116,8 @@
                                     </div>
                                 </div>
                                 <div class="form-group">
-                                    <label class="control-label col-md-2">有效期</label>
-                                    <div class="col-md-3">
+                                    <label class="control-label col-md-3">有效期</label>
+                                    <div class="col-md-4">
                                         <div class="input-group">
                                             <input type="text" class="form-control" name="days" value="{{$goods->days}}" id="days" placeholder="" required="">
                                             <span class="input-group-addon">天</span>
@@ -126,8 +126,8 @@
                                     </div>
                                 </div>
                                 <div class="form-group last">
-                                    <label class="control-label col-md-2">状态</label>
-                                    <div class="col-md-6">
+                                    <label class="control-label col-md-3">状态</label>
+                                    <div class="col-md-4">
                                         <div class="mt-radio-inline">
                                             <label class="mt-radio">
                                                 <input type="radio" name="status" value="1" {{$goods->status == 1 ? 'checked' : ''}} /> 上架
@@ -144,7 +144,7 @@
                             </div>
                             <div class="form-actions">
                                 <div class="row">
-                                    <div class="col-md-offset-2 col-md-9">
+                                    <div class="col-md-offset-3 col-md-4">
                                         <button type="submit" class="btn green"> <i class="fa fa-check"></i> 提 交</button>
                                     </div>
                                 </div>

+ 4 - 6
resources/views/shop/goodsList.blade.php

@@ -29,12 +29,11 @@
                         </div>
                     </div>
                     <div class="portlet-body">
-                        <div class="table-scrollable">
-                            <table class="table table-striped table-bordered table-hover table-checkable order-column">
+                        <div class="table-scrollable table-scrollable-borderless">
+                            <table class="table table-hover table-light">
                                 <thead>
                                 <tr>
                                     <th> # </th>
-                                    <th> SKU </th>
                                     <th> 名称 </th>
                                     <th> 类型 </th>
                                     <th> 图片 </th>
@@ -54,7 +53,6 @@
                                     @foreach($goodsList as $goods)
                                         <tr class="odd gradeX">
                                             <td> {{$goods->id}} </td>
-                                            <td> {{$goods->sku}} </td>
                                             <td> {{$goods->name}} </td>
                                             <td> {{$goods->type == 1 ? '流量包' : '套餐'}} </td>
                                             <td> @if($goods->logo) <a href="{{$goods->logo}}" class="fancybox"><img src="{{$goods->logo}}"/></a> @endif </td>
@@ -69,8 +67,8 @@
                                                 @endif
                                             </td>
                                             <td>
-                                                <button type="button" class="btn btn-sm blue btn-outline" onclick="editGoods('{{$goods->id}}')">编辑</button>
-                                                <button type="button" class="btn btn-sm red btn-outline" onclick="delGoods('{{$goods->id}}')">删除</button>
+                                                <button type="button" class="btn btn-sm blue btn-outline" onclick="editGoods('{{$goods->id}}')"><i class="fa fa-pencil"></i></button>
+                                                <button type="button" class="btn btn-sm red btn-outline" onclick="delGoods('{{$goods->id}}')"><i class="fa fa-trash"></i></button>
                                             </td>
                                         </tr>
                                     @endforeach

+ 3 - 3
resources/views/ticket/ticketList.blade.php

@@ -19,8 +19,8 @@
                         </div>
                     </div>
                     <div class="portlet-body">
-                        <div class="table-scrollable">
-                            <table class="table table-striped table-bordered table-hover table-checkable order-column" id="sample_1">
+                        <div class="table-scrollable table-scrollable-borderless">
+                            <table class="table table-hover table-light">
                                 <thead>
                                 <tr>
                                     <th> # </th>
@@ -32,7 +32,7 @@
                                 <tbody>
                                 @if($ticketList->isEmpty())
                                     <tr>
-                                        <td colspan="4">暂无数据</td>
+                                        <td colspan="4" style="text-align: center;">暂无数据</td>
                                     </tr>
                                 @else
                                     @foreach($ticketList as $key => $ticket)

+ 32 - 16
resources/views/user/addOrder.blade.php

@@ -23,7 +23,9 @@
                         <tr>
                             <td style="padding: 10px;">
                                 <h2>{{$goods->name}}</h2>
-                                <p> {{trans('home.service_traffic')}} {{$goods->traffic}}({{trans('home.service_days')}} {{$goods->days}} {{trans('home.day')}}) </p>
+                                {{trans('home.service_traffic')}} {{$goods->traffic}}
+                                <br/>
+                                {{trans('home.service_days')}} {{$goods->days}} {{trans('home.day')}}
                             </td>
                             <td class="text-center"> ¥{{$goods->price}} </td>
                             <td class="text-center"> x 1 </td>
@@ -38,25 +40,25 @@
                     <p class="invoice-desc"> ¥{{$goods->price}} </p>
                 </div>
                 <div class="col-xs-3">
+                    <h2 class="invoice-title"> {{trans('home.service_total_price')}} </h2>
+                    <p class="invoice-desc grand-total"> ¥{{$goods->price}} </p>
+                </div>
+                <div class="col-xs-6">
                     <h2 class="invoice-title"> {{trans('home.coupon')}} </h2>
                     <p class="invoice-desc">
-                        <div class="input-group">
-                            <input class="form-control" type="text" name="coupon_sn" id="coupon_sn" placeholder="{{trans('home.coupon')}}" />
-                            <span class="input-group-btn">
-                                <button class="btn btn-default" type="button" onclick="redeemCoupon()"><i class="fa fa-refresh"></i> {{trans('home.redeem_coupon')}} </button>
-                            </span>
-                        </div>
+                    <div class="input-group">
+                        <input class="form-control" type="text" name="coupon_sn" id="coupon_sn" placeholder="{{trans('home.coupon')}}" />
+                        <span class="input-group-btn">
+                            <button class="btn btn-default" type="button" onclick="redeemCoupon()"><i class="fa fa-refresh"></i> {{trans('home.redeem_coupon')}} </button>
+                        </span>
+                    </div>
                     </p>
                 </div>
-                <div class="col-xs-6">
-                    <h2 class="invoice-title"> {{trans('home.service_total_price')}} </h2>
-                    <p class="invoice-desc grand-total"> ¥{{$goods->price}} </p>
-                </div>
             </div>
             <div class="row">
                 <div class="col-xs-12" style="text-align: right;">
-                    @if($paypal_status)
-                        <a class="btn btn red hidden-print" onclick="paypalPay()"> PayPal支付 </a>
+                    @if($is_youzan)
+                        <a class="btn btn red hidden-print" onclick="onlinePay()"> 在线支付 </a>
                     @endif
                     <a class="btn btn blue hidden-print uppercase" onclick="pay()"> {{trans('home.service_pay_button')}} </a>
                 </div>
@@ -109,11 +111,25 @@
             });
         }
 
-        // PayPal在线支付
-        function paypalPay() {
+        // 在线支付
+        function onlinePay() {
             var goods_id = '{{$goods->id}}';
             var coupon_sn = $('#coupon_sn').val();
-            window.location.href="{{url('payment/create?goods_id=')}}" + goods_id + '&coupon_sn=' + coupon_sn;
+
+            $.ajax({
+                type: "POST",
+                url: "{{url('payment/create')}}",
+                async: false,
+                data: {_token:'{{csrf_token()}}', goods_id:goods_id, coupon_sn:coupon_sn},
+                dataType: 'json',
+                success: function (ret) {
+                    layer.msg(ret.message, {time:1300}, function() {
+                        if (ret.status == 'success') {
+                            window.location.href = '{{url('payment')}}' + "/" + ret.data;
+                        }
+                    });
+                }
+            });
         }
 
         // 余额支付

+ 5 - 20
resources/views/user/article.blade.php

@@ -3,37 +3,22 @@
 @section('title', trans('home.panel'))
 @section('content')
     <!-- BEGIN CONTENT BODY -->
-    <div class="page-content">
-        <!-- BEGIN PAGE BREADCRUMB -->
-        <ul class="page-breadcrumb breadcrumb">
-            <li>
-                <a href="{{url('user')}}">用户中心</a>
-                <i class="fa fa-circle"></i>
-            </li>
-            <li>
-                <a href="javascript:;">系统公告</a>
-            </li>
-        </ul>
-        <!-- END PAGE BREADCRUMB -->
+    <div class="page-content" style="padding-top:0;">
         <div class="row">
             <div class="col-md-12">
                 <!-- BEGIN PORTLET -->
                 <div class="portlet light bordered">
                     <div class="portlet-title tabbable-line">
-                        <div class="caption caption-md">
-                            <i class="icon-globe theme-font hide"></i>
-                            <span class="caption-subject font-blue-madison bold uppercase">{{$info->title}}</span>
-                        </div>
-                        <div class="tools">
-                            <small>发布于:{{$info->created_at}}</small>
+                        <div class="caption">
+                            <i class="icon-directions font-green hide"></i>
+                            <span class="caption-subject bold font-dark uppercase"> {{$info->title}} </span>
+                            <span class="caption-helper">发布于:{{$info->created_at}}</span></span>
                         </div>
                     </div>
                     <div class="portlet-body">
-                        <!--BEGIN TABS-->
                         <div class="tab-content">
                             {!! $info->content !!}
                         </div>
-                        <!--END TABS-->
                     </div>
                 </div>
             </div>

+ 7 - 15
resources/views/user/goodsList.blade.php

@@ -18,17 +18,12 @@
         <div class="row">
             <div class="col-md-12">
                 <div class="portlet light bordered">
-                    <div class="portlet-title">
-                        <div class="caption font-dark">
-                            <span class="caption-subject bold"> {{trans('home.service_title')}} </span>
-                        </div>
-                    </div>
                     <div class="portlet-body">
-                        <div class="table-scrollable">
-                            <table class="table table-striped table-bordered table-hover">
+                        <div class="table-scrollable table-scrollable-borderless">
+                            <table class="table table-hover table-light table-checkable order-column">
                                 <thead>
                                 <tr>
-                                    <th> {{trans('home.service_name')}} </th>
+                                    <th style="width:35%;"> {{trans('home.service_name')}} </th>
                                     <th style="text-align: center;"> {{trans('home.service_price')}} </th>
                                     <th> </th>
                                 </tr>
@@ -36,7 +31,7 @@
                                 <tbody>
                                 @if($goodsList->isEmpty())
                                     <tr>
-                                        <td colspan="3">{{trans('home.services_none')}}</td>
+                                        <td colspan="3" style="text-align: center;">{{trans('home.services_none')}}</td>
                                     </tr>
                                 @else
                                     @foreach($goodsList as $key => $goods)
@@ -49,9 +44,9 @@
                                                 <br>
                                                 {{trans('home.service_days')}}:{{$goods->days}} {{trans('home.day')}}
                                             </td>
-                                            <td style="text-align: center;"> $ {{$goods->price}} </td>
+                                            <td style="text-align: center;"> {{$goods->price}} </td>
                                             <td style="text-align: center;">
-                                                <button type="button" class="btn btn-sm blue" onclick="buy('{{$goods->id}}')">{{trans('home.service_buy_button')}}</button>
+                                                <a href="javascript:buy('{{$goods->id}}');" class="btn btn-sm blue"> {{trans('home.service_buy_button')}} </a>
                                                 <!--<button type="button" class="btn btn-sm blue btn-outline" onclick="exchange('{{$goods->id}}')">兑换</button>-->
                                             </td>
                                         </tr>
@@ -61,10 +56,7 @@
                             </table>
                         </div>
                         <div class="row">
-                            <div class="col-md-4 col-sm-4">
-                                <div class="dataTables_info" role="status" aria-live="polite">共 {{$goodsList->total()}} 个流量包</div>
-                            </div>
-                            <div class="col-md-8 col-sm-8">
+                            <div class="col-md-12">
                                 <div class="dataTables_paginate paging_bootstrap_full_number pull-right">
                                     {{ $goodsList->links() }}
                                 </div>

+ 48 - 51
resources/views/user/index.blade.php

@@ -29,18 +29,11 @@
                 {{Session::get('successMsg')}}
             </div>
         @endif
-        @if($notice)
-            <div class="alert alert-success">
-                <i class="fa fa-bell-o"></i>
-                <button class="close" data-close="alert"></button>
-                <a href="{{url('user/article?id=') . $notice->id}}" class="alert-link" target="_blank"> {{$notice->title}} </a>
-            </div>
-        @endif
         <div class="row">
             <div class="col-md-8">
-                <div class="alert alert-danger">
+                <div class="well">
                     {{trans('home.ratio_tips')}}
-                    <button class="btn btn-sm red" onclick="subscribe()"> {{trans('home.subscribe_button')}} </button>
+                    <button class="btn btn-sm blue" onclick="subscribe()"> {{trans('home.subscribe_button')}} </button>
                 </div>
                 <div class="row widget-row">
                     @if(!$nodeList->isEmpty())
@@ -72,51 +65,55 @@
                 </div>
             </div>
             <div class="col-md-4">
-                <div class="portlet box red">
-                    <div class="portlet-title">
-                        <div class="caption">{{trans('home.account_info')}}</div>
-                        <div class="tools">
-                            <a href="javascript:;" class="collapse" data-original-title="" title="折叠"> </a>
-                        </div>
-                    </div>
-                    <div class="portlet-body">
-                        <p class="text-muted"> {{trans('home.account_level')}}:{{$info['levelName']}} </p>
-                        <p class="text-muted">
-                            {{trans('home.account_balance')}}:{{$info['balance']}}
-                            <span class="badge badge-danger">
-                                <a href="javascript:;" data-toggle="modal" data-target="#charge_modal" style="color:#FFF;">充值</a>
-                            </span>
-                            &ensp;&ensp;{{trans('home.account_score')}}:{{$info['score']}}
-                            <span class="badge badge-danger">
-                                <a href="javascript:;" data-toggle="modal" data-target="#exchange_modal" style="color:#FFF;">兑换</a>
-                            </span>
-                        </p>
-                        <p class="text-muted"> {{trans('home.account_status')}}:{{$info['enable'] ? '正常' : '禁用'}} </p>
-                        <p class="text-muted"> {{trans('home.account_expire')}}:{{date('Y-m-d 0:0:0') > $info['expire_time'] ? '已过期' : $info['expire_time']}} </p>
-                        <p class="text-muted"> {{trans('home.account_last_usage')}}:{{empty($info['t']) ? '从未使用' : date('Y-m-d H:i:s', $info['t'])}} </p>
-                        <p class="text-muted"> {{trans('home.account_last_login')}}:{{empty($info['last_login']) ? '未登录' : date('Y-m-d H:i:s', $info['last_login'])}} </p>
-                        <p class="text-muted">
-                            {{trans('home.account_bandwidth_usage')}}:{{$info['usedTransfer']}} ({{$info['totalTransfer']}})@if($info['traffic_reset_day']) &ensp;&ensp;每月{{$info['traffic_reset_day']}}日自动重置流量 @endif
-                            <div class="progress progress-striped active" style="margin-bottom:0;" title="{{trans('home.account_total_traffic')}} {{$info['totalTransfer']}},{{trans('home.account_usage_traffic')}} {{$info['usedTransfer']}}">
-                                <div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="{{$info['usedPercent'] * 100}}" aria-valuemin="0" aria-valuemax="100" style="width: {{$info['usedPercent'] * 100}}%">
-                                    <span class="sr-only"> {{$info['usedTransfer']}} / {{$info['totalTransfer']}} </span>
-                                </div>
+                <ul class="list-group">
+                    <li class="list-group-item">
+                        {{trans('home.account_status')}}:{{$info['enable'] ? '正常' : '禁用'}}
+                    </li>
+                    <li class="list-group-item">
+                        {{trans('home.account_balance')}}:¥{{$info['balance']}}
+                        <span class="badge badge-danger">
+                            <a href="javascript:;" data-toggle="modal" data-target="#charge_modal" style="color:#FFF;">充值</a>
+                        </span>
+                    </li>
+                    @if($login_add_score)
+                    <li class="list-group-item">
+                        {{trans('home.account_score')}}:{{$info['score']}}
+                        <span class="badge badge-info">
+                            <a href="javascript:;" data-toggle="modal" data-target="#exchange_modal" style="color:#FFF;">兑换</a>
+                        </span>
+                    </li>
+                    @endif
+                    <li class="list-group-item">
+                        {{trans('home.account_expire')}}:{{date('Y-m-d 0:0:0') > $info['expire_time'] ? '已过期' : $info['expire_time']}}
+                    </li>
+                    <li class="list-group-item">
+                        {{trans('home.account_last_usage')}}:{{empty($info['t']) ? '从未使用' : date('Y-m-d H:i:s', $info['t'])}}
+                    </li>
+                    <li class="list-group-item">
+                        {{trans('home.account_last_login')}}:{{empty($info['last_login']) ? '未登录' : date('Y-m-d H:i:s', $info['last_login'])}}
+                    </li>
+                    <li class="list-group-item">
+                        {{trans('home.account_bandwidth_usage')}}:{{$info['usedTransfer']}}({{$info['totalTransfer']}})@if($info['traffic_reset_day']) &ensp;每月{{$info['traffic_reset_day']}}日自动重置流量 @endif
+                        <div class="progress progress-striped active" style="margin-bottom:0;" title="{{trans('home.account_total_traffic')}} {{$info['totalTransfer']}},{{trans('home.account_usage_traffic')}} {{$info['usedTransfer']}}">
+                            <div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="{{$info['usedPercent'] * 100}}" aria-valuemin="0" aria-valuemax="100" style="width: {{$info['usedPercent'] * 100}}%">
+                                <span class="sr-only"> {{$info['usedTransfer']}} / {{$info['totalTransfer']}} </span>
                             </div>
-                        </p>
-                    </div>
-                </div>
-                <div class="portlet box blue">
-                    <div class="portlet-title">
-                        <div class="caption">{{trans('home.article_title')}}</div>
-                        <div class="tools">
-                            <a href="javascript:;" class="collapse" data-original-title="" title="折叠"> </a>
                         </div>
+                    </li>
+                </ul>
+
+                <div class="panel panel-default">
+                    <div class="panel-heading">
+                        <h3 class="panel-title">{{trans('home.article_title')}}</h3>
                     </div>
-                    <div class="portlet-body">
+                    <div class="panel-body" style="font-size:1.0em; color: #333;">
+                        @if($notice)
+                            <span style="font-size:1.15em">[公告]<a href="{{url('user/article?id=') . $notice->id}}" class="alert-link" target="_blank"> {{$notice->title}} </a></span>
+                            <br>
+                        @endif
                         @foreach($articleList as $k => $article)
-                            <p class="text-muted">
-                                [{{date('m/d', strtotime($article->created_at))}}] <a href="{{url('user/article?id=') . $article->id}}" target="_blank"> {{$article->title}} </a>
-                            </p>
+                            <span>[{{date('m/d', strtotime($article->created_at))}}] <a href="{{url('user/article?id=') . $article->id}}" target="_blank"> {{str_limit($article->title, 50)}} </a></span>
+                            <br>
                         @endforeach
                     </div>
                 </div>
@@ -130,7 +127,7 @@
                         <h4 class="modal-title">余额充值</h4>
                     </div>
                     <div class="modal-body">
-                        <div class="alert alert-danger" style="display: none;" id="charge_msg"></div>
+                        <div class="alert alert-danger" style="display: none; text-align: center;" id="charge_msg"></div>
                         <form action="#" method="post" class="form-horizontal">
                             <div class="form-body">
                                 <div class="form-group">

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

@@ -42,8 +42,8 @@
                                             <th> # </th>
                                             <th> {{trans('home.invite_code_table_name')}} </th>
                                             <th> {{trans('home.invite_code_table_date')}} </th>
-                                            <th> {{trans('home.invite_code_table_user')}} </th>
                                             <th> {{trans('home.invite_code_table_status')}} </th>
+                                            <th> {{trans('home.invite_code_table_user')}} </th>
                                         </tr>
                                     </thead>
                                     <tbody>
@@ -57,7 +57,6 @@
                                                     <td> {{$key + 1}} </td>
                                                     <td> <a href="{{url('register?aff='.Session::get('user')['id'].'&code='.$invite->code)}}" target="_blank">{{$invite->code}}</a> </td>
                                                     <td> {{$invite->dateline}} </td>
-                                                    <td> {{empty($invite->user) ? '' : $invite->user->username}} </td>
                                                     <td>
                                                         @if($invite->status == '0')
                                                             <span class="label label-sm label-success"> {{trans('home.invite_code_table_status_un')}} </span>
@@ -67,6 +66,7 @@
                                                             <span class="label label-sm label-default"> {{trans('home.invite_code_table_status_expire')}} </span>
                                                         @endif
                                                     </td>
+                                                    <td> {{empty($invite->user) ? '' : $invite->user->username}} </td>
                                                 </tr>
                                             @endforeach
                                         @endif

+ 13 - 13
resources/views/user/layouts.blade.php

@@ -107,31 +107,25 @@
             <!-- DOC: Set data-keep-expand="true" to keep the submenues expanded -->
             <!-- DOC: Set data-auto-speed="200" to adjust the sub menu slide up/down speed -->
             <ul class="page-sidebar-menu" data-keep-expanded="false" data-auto-scroll="true" data-slide-speed="200">
-                <li class="nav-item start {{in_array(Request::path(), ['/', 'user', 'user/subscribe']) ? 'active open' : ''}}">
+                <li class="nav-item start {{in_array(Request::path(), ['/', 'user', 'user/subscribe', 'user/profile', 'user/article']) ? 'active open' : ''}}">
                     <a href="{{url('user')}}" class="nav-link nav-toggle">
                         <i class="icon-home"></i>
                         <span class="title">{{trans('home.home')}}</span>
                         <span class="selected"></span>
                     </a>
                 </li>
-                <li class="nav-item {{in_array(Request::path(), ['user/goodsList', 'user/addOrder']) ? 'active open' : ''}}">
-                    <a href="{{url('user/goodsList')}}" class="nav-link nav-toggle">
-                        <i class="icon-basket"></i>
-                        <span class="title">{{trans('home.services')}}</span>
-                    </a>
-                </li>
-                <li class="nav-item {{in_array(Request::path(), ['user/trafficLog']) ? 'active open' : ''}}">
-                    <a href="{{url('user/trafficLog')}}" class="nav-link nav-toggle">
-                        <i class="icon-speedometer"></i>
-                        <span class="title">{{trans('home.traffic_log')}}</span>
-                    </a>
-                </li>
                 <li class="nav-item {{in_array(Request::path(), ['user/invite']) ? 'active open' : ''}}">
                     <a href="{{url('user/invite')}}" class="nav-link nav-toggle">
                         <i class="icon-user-follow"></i>
                         <span class="title">{{trans('home.invite_code')}}</span>
                     </a>
                 </li>
+                <li class="nav-item {{in_array(Request::path(), ['user/goodsList', 'user/addOrder']) ? 'active open' : ''}}">
+                    <a href="{{url('user/goodsList')}}" class="nav-link nav-toggle">
+                        <i class="icon-basket"></i>
+                        <span class="title">{{trans('home.services')}}</span>
+                    </a>
+                </li>
                 <li class="nav-item {{in_array(Request::path(), ['user/orderList']) ? 'active open' : ''}}">
                     <a href="{{url('user/orderList')}}" class="nav-link nav-toggle">
                         <i class="icon-wallet"></i>
@@ -144,6 +138,12 @@
                         <span class="title">{{trans('home.tickets')}}</span>
                     </a>
                 </li>
+                <li class="nav-item {{in_array(Request::path(), ['user/trafficLog']) ? 'active open' : ''}}">
+                    <a href="{{url('user/trafficLog')}}" class="nav-link nav-toggle">
+                        <i class="icon-speedometer"></i>
+                        <span class="title">{{trans('home.traffic_log')}}</span>
+                    </a>
+                </li>
                 @if(Session::get('referral_status'))
                 <li class="nav-item {{in_array(Request::path(), ['user/referral']) ? 'active open' : ''}}">
                     <a href="{{url('user/referral')}}" class="nav-link nav-toggle">

+ 14 - 17
resources/views/user/orderList.blade.php

@@ -18,18 +18,12 @@
             <div class="col-md-12">
                 <!-- BEGIN EXAMPLE TABLE PORTLET-->
                 <div class="portlet light bordered">
-                    <div class="portlet-title">
-                        <div class="caption font-dark">
-                            <i class="icon-wallet font-dark"></i>
-                            <span class="caption-subject bold"> {{trans('home.invoice_title')}} </span>
-                        </div>
-                    </div>
                     <div class="portlet-body">
-                        <div class="table-scrollable">
-                            <table class="table table-striped table-bordered table-hover">
+                        <div class="table-scrollable table-scrollable-borderless">
+                            <table class="table table-hover table-light table-checkable order-column">
                                 <thead>
                                     <tr>
-                                        <th> # </th>
+                                        <th style="width:20%;"> 编号 </th>
                                         <th> {{trans('home.invoice_table_name')}} </th>
                                         <th> {{trans('home.invoice_table_price')}} </th>
                                         <th> {{trans('home.invoice_table_create_date')}} </th>
@@ -46,23 +40,26 @@
                                         <tr class="odd gradeX">
                                             <td>{{$order->orderId}}</td>
                                             <td>{{empty($order->goods) ? '【商品已删除】' : $order->goods->name}}</td>
-                                            <td>${{$order->totalPrice}}</td>
-                                            <td>{{date('Y-m-d', strtotime($order->created_at))}}</td>
+                                            <td>{{$order->totalPrice}}</td>
+                                            <td>{{$order->created_at}}</td>
                                             <td>
                                                 @if(!$order->is_expire)
                                                     @if($order->status == -1)
-                                                        <span class="label label-default"> {{trans('home.invoice_table_closed')}} </span>
+                                                        <a href="javascript:;" class="btn btn-sm default disabled"> {{trans('home.invoice_table_closed')}} </a>
                                                     @elseif($order->status == 0)
-                                                        <span class="label label-default"> {{trans('home.invoice_table_wait_payment')}} </span>
+                                                        <a href="javascript:;" class="btn btn-sm dark disabled"> {{trans('home.invoice_table_wait_payment')}} </a>
+                                                        @if(!empty($order->payment))
+                                                            <a href="{{url('payment/' . $order->payment->sn)}}" target="_self" class="btn btn-sm red">支付</a>
+                                                        @endif
                                                     @elseif($order->status == 1)
-                                                        <span class="label label-danger"> {{trans('home.invoice_table_wait_confirm')}} </span>
+                                                        <a href="javascript:;" class="btn btn-sm dark disabled"> {{trans('home.invoice_table_wait_confirm')}} </a>
                                                     @elseif($order->status == 2)
-                                                        <span class="label label-success"> {{trans('home.invoice_table_wait_active')}} </span>
+                                                        <a href="javascript:;" class="btn btn-sm green disabled"> {{trans('home.invoice_table_wait_active')}} </a>
                                                     @else
-                                                        <span class="label label-default"> {{trans('home.invoice_table_expired')}} </span>
+                                                        <a href="javascript:;" class="btn btn-sm default disabled"> {{trans('home.invoice_table_expired')}} </a>
                                                     @endif
                                                 @else
-                                                    <span class="label label-default"> {{trans('home.invoice_table_expired')}} </span>
+                                                    <a href="javascript:;" class="btn btn-sm default disabled"> {{trans('home.invoice_table_expired')}} </a>
                                                 @endif
                                             </td>
                                         </tr>

+ 22 - 12
resources/views/user/profile.blade.php

@@ -6,15 +6,7 @@
 @section('title', trans('home.panel'))
 @section('content')
     <!-- BEGIN CONTENT BODY -->
-    <div class="page-content">
-        <!-- BEGIN PAGE BREADCRUMB -->
-        <ul class="page-breadcrumb breadcrumb">
-            <li>
-                <a href="{{url('user/profile')}}">个人资料</a>
-                <i class="fa fa-circle"></i>
-            </li>
-        </ul>
-        <!-- END PAGE BREADCRUMB -->
+    <div class="page-content" style="padding-top: 0px; min-height: 354px;">
         <!-- BEGIN PAGE BASE CONTENT -->
         <div class="row">
             <div class="col-md-12">
@@ -36,12 +28,19 @@
                         <div class="col-md-12">
                             <div class="portlet light bordered">
                                 <div class="portlet-title tabbable-line">
+                                    <div class="caption caption-md">
+                                        <i class="icon-globe theme-font hide"></i>
+                                        <span class="caption-subject font-blue-madison bold uppercase">个人资料</span>
+                                    </div>
                                     <ul class="nav nav-tabs">
                                         <li class="active">
                                             <a href="#tab_1" data-toggle="tab">登录密码</a>
                                         </li>
                                         <li>
-                                            <a href="#tab_2" data-toggle="tab">通信配置</a>
+                                            <a href="#tab_2" data-toggle="tab">联系方式</a>
+                                        </li>
+                                        <li>
+                                            <a href="#tab_3" data-toggle="tab">SSR(R)设置</a>
                                         </li>
                                     </ul>
                                 </div>
@@ -72,12 +71,23 @@
                                                 <div class="form-group">
                                                     <label class="control-label"> 微信 </label>
                                                     <input type="text" class="form-control" name="wechat" value="{{$info->wechat}}" id="wechat" required />
+                                                    <input type="hidden" name="_token" value="{{csrf_token()}}" />
                                                 </div>
                                                 <div class="form-group">
                                                     <label class="control-label"> QQ </label>
                                                     <input type="text" class="form-control" name="qq" value="{{$info->qq}}" id="qq" required />
                                                 </div>
-                                                <hr />
+                                                <div class="form-actions">
+                                                    <div class="row">
+                                                        <div class="col-md-12">
+                                                            <button type="submit" class="btn green"> 提 交 </button>
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                            </form>
+                                        </div>
+                                        <div class="tab-pane" id="tab_3">
+                                            <form action="{{url('user/profile')}}" method="post" enctype="multipart/form-data" class="form-bordered">
                                                 <div class="form-group">
                                                     <label class="control-label"> 连接密码 </label>
                                                     <input type="text" class="form-control" name="passwd" value="{{$info->passwd}}" id="passwd" required />
@@ -109,7 +119,7 @@
                                                 </div>
                                                 <div class="form-actions">
                                                     <div class="row">
-                                                        <div class=" col-md-4">
+                                                        <div class="col-md-12">
                                                             <button type="submit" class="btn green"> 提 交 </button>
                                                         </div>
                                                     </div>

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

@@ -17,7 +17,7 @@
         <div class="row">
             <div class="col-md-12">
                 <div class="note note-info">
-                    <p> 通过您的推广链接注册的用户可获得 {{$referral_traffic}} 流量奖励;当他们消费时,您可以获得他们每笔消费金额的 {{$referral_percent * 100}}% 作为奖励。 </p>
+                    <p> 通过您的推广链接注册并激活的用户可获得 {{$referral_traffic}} 流量奖励,同时您也可以获得 {{$referral_traffic}} 流量奖励;当他们消费时,您可以获得他们每笔消费金额的 {{$referral_percent * 100}}% 作为奖励。 </p>
                 </div>
             </div>
         </div>
@@ -47,7 +47,7 @@
                             <span class="caption-subject bold"> {{trans('home.referral_title')}} </span>
                         </div>
                         <div class="actions">
-                            <button type="submit" class="btn red" onclick="extractMoney()"><i class="fa fa-money"></i> {{trans('home.referral_table_apply')}} </button>
+                            <button type="submit" class="btn red" onclick="extractMoney()"> {{trans('home.referral_table_apply')}} </button>
                         </div>
                     </div>
                     <div class="portlet-body">

+ 13 - 9
resources/views/user/subscribe.blade.php

@@ -33,11 +33,11 @@
                     <div class="portlet-body form">
                         <div class="mt-clipboard-container">
                             <input type="text" id="mt-target-1" class="form-control" value="{{$link}}" />
-                            <a href="javascript:;" class="btn blue mt-clipboard" data-clipboard-action="copy" data-clipboard-target="#mt-target-1">
-                                <i class="icon-note"></i> {{trans('home.copy_subscribe_address')}}
+                            <a href="javascript:exchangeSubscribe();" class="btn green">
+                                {{trans('home.exchange_subscribe')}}
                             </a>
-                            <a href="javascript:exchangeSubscribe();" class="btn red">
-                                <i class="fa fa-exchange"></i> {{trans('home.exchange_subscribe')}}
+                            <a href="javascript:;" class="btn blue mt-clipboard" data-clipboard-action="copy" data-clipboard-target="#mt-target-1">
+                                {{trans('home.copy_subscribe_address')}}
                             </a>
                         </div>
                     </div>
@@ -56,12 +56,16 @@
     <script type="text/javascript">
         // 更换订阅地址
         function exchangeSubscribe() {
-            $.post("{{url('user/exchangeSubscribe')}}", {_token:'{{csrf_token()}}'}, function (ret) {
-                layer.msg(ret.message, {time:1000}, function () {
-                    if (ret.status == 'success') {
-                        window.location.reload();
-                    }
+            layer.confirm('确定更换订阅地址吗?', {icon: 7, title:'警告'}, function(index) {
+                $.post("{{url('user/exchangeSubscribe')}}", {_token:'{{csrf_token()}}'}, function (ret) {
+                    layer.msg(ret.message, {time:1000}, function () {
+                        if (ret.status == 'success') {
+                            window.location.reload();
+                        }
+                    });
                 });
+
+                layer.close(index);
             });
         }
     </script>

+ 2 - 3
resources/views/user/ticketList.blade.php

@@ -15,7 +15,6 @@
                 <div class="portlet light bordered">
                     <div class="portlet-title">
                         <div class="caption font-dark">
-                            <i class="icon-question font-dark"></i>
                             <span class="caption-subject bold"> {{trans('home.ticket_title')}} </span>
                         </div>
                         <div class="actions">
@@ -25,8 +24,8 @@
                         </div>
                     </div>
                     <div class="portlet-body">
-                        <div class="table-scrollable">
-                            <table class="table table-striped table-bordered table-hover table-checkable order-column">
+                        <div class="table-scrollable table-scrollable-borderless">
+                            <table class="table table-hover table-light table-checkable order-column">
                                 <thead>
                                     <tr>
                                         <th> # </th>

+ 3 - 14
routes/api.php

@@ -1,18 +1,7 @@
 <?php
 
-use Illuminate\Http\Request;
+Route::group(['namespace' => 'Api'], function () {
+    Route::any('yzy/create', 'YzyController@create');
 
-/*
-|--------------------------------------------------------------------------
-| API Routes
-|--------------------------------------------------------------------------
-|
-| Here is where you can register API routes for your application. These
-| routes are loaded by the RouteServiceProvider within a group which
-| is assigned the "api" middleware group. Enjoy building your API!
-|
-*/
-
-Route::middleware('auth:api')->get('/user', function (Request $request) {
-    return $request->user();
+    Route::resource('yzy', 'YzyController');
 });

+ 6 - 7
routes/web.php

@@ -1,7 +1,6 @@
 <?php
 
 Route::get('s/{code}', 'SubscribeController@index'); // 节点订阅地址
-Route::post('locate', 'LocateController@locate'); // 上报文章打开时的定位
 
 Route::group(['middleware' => ['forbidden']], function () {
     Route::any('login', 'LoginController@index'); // 登录
@@ -40,6 +39,7 @@ Route::group(['middleware' => ['forbidden', 'user', 'admin']], function () {
     Route::post('admin/delLabel', 'AdminController@delLabel'); // 删除标签
     Route::get('ticket/ticketList', 'TicketController@ticketList'); // 工单列表
     Route::any('ticket/replyTicket', 'TicketController@replyTicket'); // 回复工单
+    Route::get('admin/orderList', 'AdminController@orderList'); // 订单列表
     Route::post('ticket/closeTicket', 'TicketController@closeTicket'); // 关闭工单
     Route::get('admin/inviteList', 'AdminController@inviteList'); // 邀请码列表
     Route::post('admin/makeInvite', 'AdminController@makeInvite'); // 生成邀请码
@@ -114,10 +114,9 @@ Route::group(['middleware' => ['forbidden', 'user']], function () {
     Route::post('user/extractMoney', 'UserController@extractMoney'); // 申请提现
     Route::post("user/switchToAdmin", "UserController@switchToAdmin"); // 转换成管理员的身份
     Route::post("user/charge", "UserController@charge"); // 卡券余额充值
-});
 
-//Route::group(['middleware' => ['user']], function() {
-Route::any('payment/create', 'PaymentController@create'); // 创建支付
-Route::any('payment/execute', 'PaymentController@execute'); // 用户确认执行支付
-Route::any('payment/cancel', 'PaymentController@cancel'); // 用户取消支付
-//});
+    Route::post('payment/create', 'PaymentController@create'); // 创建支付
+    Route::get('payment/getStatus', 'PaymentController@getStatus'); // 获取支付单状态
+    Route::get('payment/{sn}', 'PaymentController@detail'); // 支付单详情
+
+});

+ 15 - 5
sql/db.sql

@@ -318,6 +318,10 @@ INSERT INTO `config` VALUES ('46', 'is_free_code', 0);
 INSERT INTO `config` VALUES ('47', 'is_forbid_robot', 0);
 INSERT INTO `config` VALUES ('48', 'subscribe_domain', '');
 INSERT INTO `config` VALUES ('49', 'auto_release_port', 1);
+INSERT INTO `config` VALUES ('50', 'is_youzan', 0);
+INSERT INTO `config` VALUES ('51', 'youzan_client_id', '');
+INSERT INTO `config` VALUES ('52', 'youzan_client_secret', '');
+INSERT INTO `config` VALUES ('53', 'kdt_id', '');
 
 
 -- ----------------------------
@@ -485,7 +489,7 @@ CREATE TABLE `order` (
   `totalPrice` int(11) NOT NULL DEFAULT '0' COMMENT '订单总价,单位分',
   `expire_at` datetime DEFAULT NULL COMMENT '过期时间',
   `is_expire` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否已过期:0-未过期、1-已过期',
-  `pay_way` tinyint(4) NOT NULL DEFAULT '1' COMMENT '支付方式:1-余额支付、2-PayPal',
+  `pay_way` tinyint(4) NOT NULL DEFAULT '1' COMMENT '支付方式:1-余额支付、2-有赞云支付',
   `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '订单状态:-1-已关闭、0-待支付、1-已支付待确认、2-已完成',
   `created_at` datetime DEFAULT NULL COMMENT '创建时间',
   `updated_at` datetime DEFAULT NULL COMMENT '最后一次更新时间',
@@ -826,10 +830,16 @@ INSERT INTO `country` VALUES ('58', '阿根廷', 'ar');
 
 CREATE TABLE `payment` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
-  `user_id` int(11) NOT NULL,
-  `pay_way` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '支付类型',
-  `money` int(11) NOT NULL DEFAULT '0' COMMENT '充值金额,单位分',
-  `status` int(11) NOT NULL DEFAULT '1' COMMENT '充值状态:1-成功',
+  `sn` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+  `user_id` int(11) NOT NULL COMMENT '用户ID',
+  `oid` int(11) DEFAULT NULL COMMENT '本地订单ID',
+  `orderId` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本地订单长ID',
+  `pay_way` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '1' COMMENT '支付类型:1-扫码支付',
+  `amount` int(11) NOT NULL DEFAULT '0' COMMENT '金额,单位分',
+  `qr_id` int(11) NOT NULL DEFAULT '0' COMMENT '有赞生成的支付单ID',
+  `qr_url` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '有赞生成的支付二维码URL',
+  `qr_code` text COLLATE utf8mb4_unicode_ci COMMENT '有赞生成的支付二维码图片base64',
+  `status` int(11) NOT NULL DEFAULT '0' COMMENT '状态:-1-支付失败、0-等待支付、1-支付成功',
   `created_at` datetime NOT NULL,
   `updated_at` datetime NOT NULL,
   PRIMARY KEY (`id`)

+ 24 - 0
sql/update/20180313.sql

@@ -0,0 +1,24 @@
+-- 加入有赞云支付
+INSERT INTO `config` VALUES ('50', 'is_youzan', 0);
+INSERT INTO `config` VALUES ('51', 'youzan_client_id', '');
+INSERT INTO `config` VALUES ('52', 'youzan_client_secret', '');
+INSERT INTO `config` VALUES ('53', 'kdt_id', '');
+
+-- 更新payment表
+DROP TABLE `payment`;
+CREATE TABLE `payment` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `sn` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+  `user_id` int(11) NOT NULL COMMENT '用户ID',
+  `oid` int(11) DEFAULT NULL COMMENT '本地订单ID',
+  `orderId` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本地订单长ID',
+  `pay_way` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '1' COMMENT '支付类型:1-扫码支付',
+  `amount` int(11) NOT NULL DEFAULT '0' COMMENT '金额,单位分',
+  `qr_id` int(11) NOT NULL DEFAULT '0' COMMENT '有赞生成的支付单ID',
+  `qr_url` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '有赞生成的支付二维码URL',
+  `qr_code` text COLLATE utf8mb4_unicode_ci COMMENT '有赞生成的支付二维码图片base64',
+  `status` int(11) NOT NULL DEFAULT '0' COMMENT '状态:-1-支付失败、0-等待支付、1-支付成功',
+  `created_at` datetime NOT NULL,
+  `updated_at` datetime NOT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;