Kaynağa Gözat

合并胖虎修复的添加商品时错误的bug

izhangxm 8 yıl önce
ebeveyn
işleme
5fe44f4be6

+ 2 - 0
.gitignore

@@ -11,3 +11,5 @@
 Homestead.json
 Homestead.yaml
 npm-debug.log
+.DS_Store
+public/upload/image/qrcode/

+ 52 - 0
app/Console/Commands/AutoGetLocationInfoJob.php

@@ -0,0 +1,52 @@
+<?php
+
+namespace App\Console\Commands;
+
+use Illuminate\Console\Command;
+use App\Http\Models\ArticleLog;
+use Log;
+
+class AutoGetLocationInfoJob extends Command
+{
+    protected $signature = 'command:autoGetLocationInfoJob';
+    protected $description = '自动获取经纬度对应的地址信息';
+
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    public function handle()
+    {
+        $articleLogList = ArticleLog::where('is_pull', 0)->get();
+        foreach ($articleLogList as $articleLog) {
+            $url = "http://apis.map.qq.com/ws/geocoder/v1/?location=" . $articleLog->lat . ',' . $articleLog->lng . '&key=XXXXX';
+            $ret = file_get_contents($url);
+            $result = json_decode($ret, true);
+            //Log::info(var_export($result, true));
+
+            if ($result['status']) {
+                continue;
+                Log::error('文章日志通过API获取坐标对应的地址信息失败.');
+            }
+
+            // 更新日志信息
+            $data = [
+                'nation' => $result['result']['address_component']['nation'],
+                'province' => $result['result']['address_component']['province'],
+                'city' => $result['result']['address_component']['city'],
+                'district' => $result['result']['address_component']['district'],
+                'street' => $result['result']['address_component']['street'],
+                'street_number' => $result['result']['address_component']['street_number'],
+                'address' => $result['result']['address'],
+                'full' => $ret,
+                'is_pull' => 1
+            ];
+
+            ArticleLog::where('id', $articleLog->id)->update($data);
+
+            // 暂停一秒,防止QPS超限导致返回错误
+            sleep(1);
+        }
+    }
+}

+ 3 - 1
app/Console/Kernel.php

@@ -15,8 +15,9 @@ class Kernel extends ConsoleKernel
     protected $commands = [
         \App\Console\Commands\AutoDecGoodsTrafficJob::class,
         \App\Console\Commands\AutoDisableExpireUserJob::class,
-        \App\Console\Commands\AutoExpireInviteJob::class,
         \App\Console\Commands\AutoExpireCouponJob::class,
+        \App\Console\Commands\AutoExpireInviteJob::class,
+        //\App\Console\Commands\AutoGetLocationInfoJob::class,
         \App\Console\Commands\AutoResetUserTrafficJob::class,
         \App\Console\Commands\UserExpireWarningJob::class,
         \App\Console\Commands\UserTrafficWarningJob::class,
@@ -34,6 +35,7 @@ class Kernel extends ConsoleKernel
         $schedule->command('command:autoDisableExpireUserJob')->everyMinute();
         $schedule->command('command:autoExpireCouponJob')->everyThirtyMinutes();
         $schedule->command('command:autoExpireInviteJob')->everyThirtyMinutes();
+        //$schedule->command('command:autoGetLocationInfoJob')->everyMinute();
         $schedule->command('command:autoResetUserTrafficJob')->monthly();
         $schedule->command('command:userExpireWarningJob')->daily();
         $schedule->command('command:userTrafficWarningJob')->daily();

+ 11 - 2
app/Http/Controllers/AdminController.php

@@ -3,6 +3,7 @@
 namespace App\Http\Controllers;
 
 use App\Http\Models\Article;
+use App\Http\Models\ArticleLog;
 use App\Http\Models\Config;
 use App\Http\Models\Invite;
 use App\Http\Models\Level;
@@ -37,7 +38,7 @@ class AdminController extends BaseController
     public function index(Request $request)
     {
         $past = strtotime(date('Y-m-d', strtotime("-" . self::$config['expire_days'] . " days")));
-        $online = time() - 3600;
+        $online = time() - 1800;
 
         $view['userCount'] = User::count();
         $view['activeUserCount'] = User::where('t', '>=', $past)->count();
@@ -321,7 +322,7 @@ class AdminController extends BaseController
         $nodeList = SsNode::paginate(10)->appends($request->except('page'));
         foreach ($nodeList as &$node) {
             // 在线人数
-            $last_log_time = time() - 3600; // 一小时之
+            $last_log_time = time() - 1800; // 10分钟
             $online_log = SsNodeOnlineLog::where('node_id', $node->id)->where('log_time', '>=', $last_log_time)->orderBy('id', 'desc')->first();
             $node->online_users = empty($online_log) ? 0 : $online_log->online_user;
 
@@ -491,6 +492,14 @@ class AdminController extends BaseController
         return Response::view('admin/articleList', $view);
     }
 
+    // 文章访问日志列表
+    public function articleLogList(Request $request)
+    {
+        $view['articleLogList'] = ArticleLog::paginate(10)->appends($request->except('page'));
+
+        return Response::view('admin/articleLogList', $view);
+    }
+
     // 添加文章
     public function addArticle(Request $request)
     {

+ 29 - 0
app/Http/Controllers/ArticleController.php

@@ -0,0 +1,29 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Http\Models\Article;
+use Illuminate\Http\Request;
+use Response;
+
+/**
+ * 文章控制器
+ * Class SubscribeController
+ * @package App\Http\Controllers
+ */
+class ArticleController extends BaseController
+{
+    // 文章详情页
+    public function index(Request $request)
+    {
+        $id = $request->get('id');
+
+        $view['info'] = Article::where('is_del', 0)->where('id', $id)->first();
+        if (empty($view['info'])) {
+            exit('文章已删除');
+        }
+
+        return Response::view('article/detail', $view);
+    }
+
+}

+ 24 - 0
app/Http/Controllers/BaseController.php

@@ -110,6 +110,20 @@ class BaseController extends Controller
         return $data;
     }
 
+    // 账号等级对应名称
+    public function userLevelConfig()
+    {
+        return [
+            1 => '倔强青铜',
+            2 => '秩序白银',
+            3 => '荣耀黄金',
+            4 => '尊贵铂金',
+            5 => '永恒钻石',
+            6 => '至尊黑曜',
+            7 => '最强王者'
+        ];
+    }
+
     // 获取一个随机端口
     public function getRandPort()
     {
@@ -167,6 +181,16 @@ class BaseController extends Controller
         return round($bytes, $precision) . ' ' . $units[$pow];
     }
 
+    // 浏览器类型
+    public function browsers($tag)
+    {
+        $data = [
+            'MicroMessenger' => '微信',
+            'iPhone' => 'iPhone',
+            'Linux' => '安卓'
+        ];
+    }
+
     /**
      * 写入邮件发送日志
      * @param int $user_id 用户ID

+ 40 - 0
app/Http/Controllers/LocateController.php

@@ -0,0 +1,40 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Http\Models\ArticleLog;
+use Illuminate\Http\Request;
+use Response;
+
+/**
+ * 定位控制器
+ * Class LocateController
+ * @package App\Http\Controllers
+ */
+class LocateController extends BaseController
+{
+    // 接收打开文章时上报的定位坐标信息
+    public function locate(Request $request)
+    {
+        $aid = $request->get('aid');
+        $lat = $request->get('lat');
+        $lng = $request->get('lng');
+
+        if (empty($lat) || empty($lng)) {
+            return Response::json(['status' => 'fail', 'data' => '', 'message' => '经纬度不能为空']);
+        }
+
+        // 将坐标写入文章打开记录中
+        $articleLog = new ArticleLog();
+        $articleLog->aid = $aid;
+        $articleLog->lat = $lat;
+        $articleLog->lng = $lng;
+        $articleLog->ip = $request->getClientIp();
+        $articleLog->headers = $request->header('User-Agent');
+        $articleLog->created_at = date('Y-m-d H:i:s');
+        $articleLog->save();
+
+        return Response::json(['status' => 'success', 'data' => '', 'message' => '坐标上报成功']);
+    }
+
+}

+ 2 - 2
app/Http/Controllers/ShopController.php

@@ -52,8 +52,8 @@ class ShopController extends BaseController
             $logo = '';
             if ($request->hasFile('logo')) {
                 $file = $request->file('logo');
-                $type = $file->getClientOriginalExtension();
-                $logoName = date('YmdHis') . mt_rand(1000, 2000) . '.' . $type;
+                $fileType = $file->getClientOriginalExtension();
+                $logoName = date('YmdHis') . mt_rand(1000, 2000) . '.' . $fileType;
                 $move = $file->move(base_path() . '/public/upload/image/goods/', $logoName);
                 $logo = $move ? '/upload/image/goods/' . $logoName : '';
             }

+ 5 - 1
app/Http/Controllers/UserController.php

@@ -35,10 +35,12 @@ use Log;
 class UserController extends BaseController
 {
     protected static $config;
+    protected static $userLevel;
 
     function __construct()
     {
         self::$config = $this->systemConfig();
+        self::$userLevel = $this->userLevelConfig();
     }
 
     public function index(Request $request)
@@ -53,6 +55,7 @@ class UserController extends BaseController
         $view['articleList'] = Article::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['user_level'] = self::$userLevel;
 
         // 推广返利是否可见
         if (!$request->session()->has('referral_status')) {
@@ -179,7 +182,8 @@ class UserController extends BaseController
 
         foreach ($nodeList as &$node) {
             // 在线人数
-            $online_log = SsNodeOnlineLog::where('node_id', $node->id)->orderBy('id', 'desc')->first();
+            $last_log_time = time() - 1800; // 10分钟内
+            $online_log = SsNodeOnlineLog::where('node_id', $node->id)->where('log_time', '>=', $last_log_time)->orderBy('id', 'desc')->first();
             $node->online_users = empty($online_log) ? 0 : $online_log->online_user;
 
             // 已产生流量

+ 34 - 0
app/Http/Models/ArticleLog.php

@@ -0,0 +1,34 @@
+<?php
+
+namespace App\Http\Models;
+
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * 文章日志
+ * Class ArticleLog
+ * @package App\Http\Models
+ */
+class ArticleLog extends Model
+{
+    protected $table = 'article_log';
+    protected $primaryKey = 'id';
+    protected $fillable = [
+        'aid',
+        'lat',
+        'lng',
+        'ip',
+        'headers',
+        'nation',
+        'province',
+        'city',
+        'district',
+        'street',
+        'street_number',
+        'address',
+        'full',
+        'is_pull',
+        'status'
+    ];
+
+}

+ 1 - 1
config/app.php

@@ -77,7 +77,7 @@ return [
     |
     */
 
-    'locale' => 'en',
+    'locale' => 'zh-CN',
 
     /*
     |--------------------------------------------------------------------------

+ 3 - 3
resources/views/404.blade.php

@@ -1,8 +1,8 @@
 <!DOCTYPE html>
-<!--[if IE 8]> <html lang="en" class="ie8 no-js"> <![endif]-->
-<!--[if IE 9]> <html lang="en" class="ie9 no-js"> <![endif]-->
+<!--[if IE 8]> <html lang="{{app()->getLocale()}}" class="ie8 no-js"> <![endif]-->
+<!--[if IE 9]> <html lang="{{app()->getLocale()}}" class="ie9 no-js"> <![endif]-->
 <!--[if !IE]><!-->
-<html lang="en">
+<html lang="{{app()->getLocale()}}">
 <!--<![endif]-->
 <!-- BEGIN HEAD -->
 

+ 106 - 0
resources/views/admin/articleLogList.blade.php

@@ -0,0 +1,106 @@
+@extends('admin.layouts')
+
+@section('css')
+    <link href="/assets/global/plugins/datatables/datatables.min.css" rel="stylesheet" type="text/css" />
+    <link href="/assets/global/plugins/datatables/plugins/bootstrap/datatables.bootstrap.css" rel="stylesheet" type="text/css" />
+@endsection
+@section('title', '控制面板')
+@section('content')
+    <!-- BEGIN CONTENT BODY -->
+    <div class="page-content">
+        <!-- BEGIN PAGE BREADCRUMB -->
+        <ul class="page-breadcrumb breadcrumb">
+            <li>
+                <a href="{{url('admin/articleList')}}">文章管理</a>
+                <i class="fa fa-circle"></i>
+            </li>
+            <li>
+                <a href="{{url('admin/articleLogList')}}">文章访问日志</a>
+                <i class="fa fa-circle"></i>
+            </li>
+        </ul>
+        <!-- END PAGE BREADCRUMB -->
+        <!-- BEGIN PAGE BASE CONTENT -->
+        <div class="row">
+            <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-docs font-dark"></i>
+                            <span class="caption-subject bold uppercase"> 文章访问日志 </span>
+                        </div>
+                        <div class="actions">
+                            <div class="btn-group">
+
+                            </div>
+                        </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">
+                                <thead>
+                                <tr>
+                                    <th> ID </th>
+                                    <th> 文章ID </th>
+                                    <th> 坐标 </th>
+                                    <th> IP </th>
+                                    <th> 头部信息 </th>
+                                    <th> 状态 </th>
+                                    <th> 访问时间 </th>
+                                </tr>
+                                </thead>
+                                <tbody>
+                                @if($articleLogList->isEmpty())
+                                    <tr>
+                                        <td colspan="7">暂无数据</td>
+                                    </tr>
+                                @else
+                                    @foreach($articleLogList as $articleLog)
+                                        <tr class="odd gradeX">
+                                            <td> {{$articleLog->id}} </td>
+                                            <td> <a href="{{url('article?id=' . $articleLog->aid)}}" target="_blank"> {{$articleLog->aid}} </a> </td>
+                                            <td> {{$articleLog->lat}},{{$articleLog->lng}} </td>
+                                            <td> {{$articleLog->ip}} </td>
+                                            <td> {{$articleLog->headers}} </td>
+                                            <td>
+                                                @if ($articleLog->status)
+                                                    <span class="label label-default">已查看</span>
+                                                @else
+                                                    <span class="label label-info">未查看</span>
+                                                @endif
+                                            </td>
+                                            <td> {{$articleLog->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">共 {{$articleLogList->total()}} 条日志</div>
+                            </div>
+                            <div class="col-md-8 col-sm-8">
+                                <div class="dataTables_paginate paging_bootstrap_full_number pull-right">
+                                    {{ $articleLogList->links() }}
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <!-- END EXAMPLE TABLE PORTLET-->
+            </div>
+        </div>
+        <!-- END PAGE BASE CONTENT -->
+    </div>
+    <!-- END CONTENT BODY -->
+@endsection
+@section('script')
+    <script src="/assets/global/plugins/bootbox/bootbox.min.js" type="text/javascript"></script>
+    <script src="/js/layer/layer.js" type="text/javascript"></script>
+
+    <script type="text/javascript">
+        //
+    </script>
+@endsection

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

@@ -77,7 +77,7 @@
                                                 <div class="col-md-8">
                                                     <div class="mt-radio-inline">
                                                         <label class="mt-radio">
-                                                            <input type="radio" name="pay_way" value="0" {{$user->pay_way == 0 ? 'checked' : ''}}> 月付
+                                                            <input type="radio" name="pay_way" value="0" {{$user->pay_way == 0 ? 'checked' : ''}}> 免费
                                                             <span></span>
                                                         </label>
                                                         <label class="mt-radio">

+ 23 - 8
resources/views/admin/layouts.blade.php

@@ -1,6 +1,6 @@
 <!DOCTYPE html>
-<!--[if IE 8]> <html lang="en" class="ie8 no-js"> <![endif]-->
-<!--[if IE 9]> <html lang="en" class="ie9 no-js"> <![endif]-->
+<!--[if IE 8]> <html lang="{{app()->getLocale()}}" class="ie8 no-js"> <![endif]-->
+<!--[if IE 9]> <html lang="{{app()->getLocale()}}" class="ie9 no-js"> <![endif]-->
 <!--[if !IE]><!-->
 <html lang="{{app()->getLocale()}}">
 <!--<![endif]-->
@@ -129,12 +129,6 @@
                         <span class="title">提现管理</span>
                     </a>
                 </li>
-                <li class="nav-item {{Request::getRequestUri() == '/admin/articleList' ? 'active open' : ''}}">
-                    <a href="{{url('admin/articleList')}}" class="nav-link nav-toggle">
-                        <i class="icon-docs"></i>
-                        <span class="title">文章管理</span>
-                    </a>
-                </li>
                 <li class="nav-item {{in_array(Request::getRequestUri(), ['/shop/goodsList', '/shop/addGoods', '/shop/editGoods']) ? 'active open' : ''}}">
                     <a href="{{url('shop/goodsList')}}" class="nav-link nav-toggle">
                         <i class="icon-basket"></i>
@@ -153,6 +147,27 @@
                         <span class="title">工单管理</span>
                     </a>
                 </li>
+                <li class="nav-item {{in_array(Request::getRequestUri(), ['/admin/articleList', '/admin/addArticle', '/admin/editArticle', '/admin/articleLogList']) ? 'active open' : ''}}">
+                    <a href="javascript:;" class="nav-link nav-toggle">
+                        <i class="icon-docs"></i>
+                        <span class="title">文章管理</span>
+                        <span class="arrow"></span>
+                    </a>
+                    <ul class="sub-menu">
+                        <li class="nav-item {{Request::getRequestUri() == '/admin/articleList' ? 'active open' : ''}}">
+                            <a href="{{url('admin/articleList')}}" class="nav-link ">
+                                <i class="icon-list"></i>
+                                <span class="title">文章列表</span>
+                            </a>
+                        </li>
+                        <li class="nav-item {{Request::getRequestUri() == '/admin/articleLogList' ? 'active open' : ''}}">
+                            <a href="{{url('admin/articleLogList')}}" class="nav-link ">
+                                <i class="icon-list"></i>
+                                <span class="title">文章访问日志</span>
+                            </a>
+                        </li>
+                    </ul>
+                </li>
                 <li class="nav-item {{in_array(Request::getRequestUri(), ['/admin/nodeList', '/admin/addNode', '/admin/editNode', '/admin/groupList', '/admin/addGroup', '/admin/editGroup']) ? 'active open' : ''}}">
                     <a href="javascript:;" class="nav-link nav-toggle">
                         <i class="icon-layers"></i>

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

@@ -133,10 +133,10 @@
                                             </td>
                                             <td>
                                                 <button type="button" class="btn btn-sm blue btn-outline" onclick="editUser('{{$user->id}}')">编辑</button>
-                                                <!--<button type="button" class="btn btn-sm red btn-outline" onclick="delUser('{{$user->id}}')">删除</button>-->
                                                 <button type="button" class="btn btn-sm green btn-outline" onclick="do_export('{{$user->id}}')">配置信息</button>
                                                 <button type="button" class="btn btn-sm purple btn-outline" onclick="do_monitor('{{$user->id}}')">流量监控</button>
                                                 <button type="button" class="btn btn-sm green-meadow btn-outline" onclick="resetTraffic('{{$user->id}}')">重置流量</button>
+                                                <button type="button" class="btn btn-sm red btn-outline" onclick="delUser('{{$user->id}}')">删除</button>
                                             </td>
                                         </tr>
                                         @endforeach

+ 143 - 0
resources/views/article/detail.blade.php

@@ -0,0 +1,143 @@
+<!DOCTYPE html>
+<!--[if IE 8]> <html lang="{{app()->getLocale()}}" class="ie8 no-js"> <![endif]-->
+<!--[if IE 9]> <html lang="{{app()->getLocale()}}" class="ie9 no-js"> <![endif]-->
+<!--[if !IE]><!-->
+<html lang="{{app()->getLocale()}}">
+<!--<![endif]-->
+
+<head>
+    <meta charset="utf-8" />
+    <title>{{$info->title}}</title>
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta content="width=device-width, initial-scale=1" name="viewport" />
+    <meta content="" name="description" />
+    <meta content="" name="author" />
+    <!-- BEGIN GLOBAL MANDATORY STYLES -->
+    <link href="/assets/global/plugins/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
+    <link href="/assets/global/plugins/simple-line-icons/simple-line-icons.min.css" rel="stylesheet" type="text/css" />
+    <link href="/assets/global/plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
+    <link href="/assets/global/plugins/bootstrap-switch/css/bootstrap-switch.min.css" rel="stylesheet" type="text/css" />
+    <!-- END GLOBAL MANDATORY STYLES -->
+    <!-- BEGIN PAGE LEVEL PLUGINS -->
+    <!-- END PAGE LEVEL PLUGINS -->
+    <!-- BEGIN THEME GLOBAL STYLES -->
+    <link href="/assets/global/css/components-rounded.min.css" rel="stylesheet" id="style_components" type="text/css" />
+    <link href="/assets/global/css/plugins.min.css" rel="stylesheet" type="text/css" />
+    <!-- END THEME GLOBAL STYLES -->
+    <!-- BEGIN THEME LAYOUT STYLES -->
+    <link href="/assets/layouts/layout4/css/layout.min.css" rel="stylesheet" type="text/css" />
+    <link href="/assets/layouts/layout4/css/themes/default.min.css" rel="stylesheet" type="text/css" id="style_color" />
+    <link href="/assets/layouts/layout4/css/custom.min.css" rel="stylesheet" type="text/css" />
+    <!-- END THEME LAYOUT STYLES -->
+    <link rel="shortcut icon" href="favicon.ico" />
+</head>
+
+<body class="page-container-bg-solid page-header-fixed page-sidebar-closed-hide-logo"info>
+<!-- BEGIN HEADER -->
+<div class="page-header navbar navbar-fixed-top">
+    <!-- BEGIN HEADER INNER -->
+    <div class="page-header-inner ">
+        <!-- BEGIN LOGO -->
+        <div class="page-logo">
+            <a href="http://ssrpanel.dev/user"> <img src="/assets/images/logo.png" alt="logo" class="logo-default" /> </a>
+        </div>
+        <!-- END LOGO -->
+    </div>
+    <!-- END HEADER INNER -->
+</div>
+<!-- END HEADER -->
+<!-- BEGIN HEADER & CONTENT DIVIDER -->
+<div class="clearfix"> </div>
+<!-- END HEADER & CONTENT DIVIDER -->
+<!-- BEGIN CONTAINER -->
+<div class="page-container">
+    <!-- BEGIN CONTENT -->
+        <!-- BEGIN CONTENT BODY -->
+        <div class="page-content">
+            <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">10月下旬猎户座流星雨将登场 可登山远眺观测流星</span>
+                            </div>
+                            <div class="tools">
+                                <small>发布于:{{$info->created_at}}</small>
+                            </div>
+                        </div>
+                        <div class="portlet-body">
+                            <!--BEGIN TABS-->
+                            <div class="tab-content">
+                                {!! $info->content !!}
+                            </div>
+                            <!--END TABS-->
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <!-- END CONTENT BODY -->
+    <!-- END CONTENT -->
+</div>
+<!-- END CONTAINER -->
+<!-- BEGIN FOOTER -->
+<div class="page-footer">
+    <div class="page-footer-inner"> 2017 &copy; <a href="https://github.com/ssrpanel/ssrpanel" target="_blank">SSRPanel</a> </div>
+    <div class="scroll-to-top">
+        <i class="icon-arrow-up"></i>
+    </div>
+</div>
+<!-- END FOOTER -->
+<!--[if lt IE 9]>
+<script src="/assets/global/plugins/respond.min.js"></script>
+<script src="/assets/global/plugins/excanvas.min.js"></script>
+<script src="/assets/global/plugins/ie8.fix.min.js"></script>
+<![endif]-->
+<!-- BEGIN CORE PLUGINS -->
+<script src="/assets/global/plugins/jquery.min.js" type="text/javascript"></script>
+<script src="/assets/global/plugins/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
+<script src="/assets/global/plugins/js.cookie.min.js" type="text/javascript"></script>
+<script src="/assets/global/plugins/jquery-slimscroll/jquery.slimscroll.min.js" type="text/javascript"></script>
+<script src="/assets/global/plugins/jquery.blockui.min.js" type="text/javascript"></script>
+<script src="/assets/global/plugins/bootstrap-switch/js/bootstrap-switch.min.js" type="text/javascript"></script>
+<!-- END CORE PLUGINS -->
+<!-- BEGIN PAGE LEVEL PLUGINS -->
+<script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak=SGlgj67Vik3mfeErm1sGobfO8zMy0WMt"></script>
+<script type="text/javascript">
+    // 获取当前定位坐标
+    function getLocation() {
+        var geolocation = new BMap.Geolocation();
+        geolocation.getCurrentPosition(function(position){
+            if(this.getStatus() == BMAP_STATUS_SUCCESS){
+                var lng = position.point.lng;
+                var lat = position.point.lat;
+
+                // 上报当前坐标
+                var _token = '{{csrf_token()}}';
+                var title = '';
+                $.post('/locate', {_token: _token, aid:'{{$info->id}}', lat: lat, lng: lng, title:title}, function (ret) {
+                    console.log(ret);
+                }, "json");
+
+                console.log('lng:' + lng + '  lat:' + lat);
+            } else {
+                alert('failed'+this.getStatus());
+            }
+        },{enableHighAccuracy: true})
+    }
+
+    // 执行定位
+    getLocation();
+</script>
+<!-- END PAGE LEVEL PLUGINS -->
+<!-- BEGIN THEME GLOBAL SCRIPTS -->
+<script src="/assets/global/scripts/app.min.js" type="text/javascript"></script>
+<!-- END THEME GLOBAL SCRIPTS -->
+<!-- BEGIN THEME LAYOUT SCRIPTS -->
+<script src="/assets/layouts/layout4/scripts/layout.min.js" type="text/javascript"></script>
+<!-- END THEME LAYOUT SCRIPTS -->
+</body>
+
+</html>

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

@@ -1,6 +1,6 @@
 <!DOCTYPE html>
-<!--[if IE 8]> <html lang="en" class="ie8 no-js"> <![endif]-->
-<!--[if IE 9]> <html lang="en" class="ie9 no-js"> <![endif]-->
+<!--[if IE 8]> <html lang="{{app()->getLocale()}}" class="ie8 no-js"> <![endif]-->
+<!--[if IE 9]> <html lang="{{app()->getLocale()}}" class="ie9 no-js"> <![endif]-->
 <!--[if !IE]><!-->
 <html lang="{{app()->getLocale()}}">
 <!--<![endif]-->

+ 2 - 2
resources/views/register.blade.php

@@ -1,6 +1,6 @@
 <!DOCTYPE html>
-<!--[if IE 8]> <html lang="en" class="ie8 no-js"> <![endif]-->
-<!--[if IE 9]> <html lang="en" class="ie9 no-js"> <![endif]-->
+<!--[if IE 8]> <html lang="{{app()->getLocale()}}" class="ie8 no-js"> <![endif]-->
+<!--[if IE 9]> <html lang="{{app()->getLocale()}}" class="ie9 no-js"> <![endif]-->
 <!--[if !IE]><!-->
 <html lang="{{app()->getLocale()}}">
 <!--<![endif]-->

+ 2 - 13
resources/views/user/article.blade.php

@@ -42,18 +42,7 @@
     <!-- END CONTENT BODY -->
 @endsection
 @section('script')
-    <script src="/assets/global/plugins/counterup/jquery.waypoints.min.js" type="text/javascript"></script>
-    <script src="/assets/global/plugins/counterup/jquery.counterup.min.js" type="text/javascript"></script>
-    <script src="/assets/global/plugins/jquery-knob/js/jquery.knob.js" type="text/javascript"></script>
-
-    <script>
-        $(function() {
-            $(".knob").knob({
-                'readOnly':true,
-                'angleoffset':0,
-                'width':150,
-                'height':150,
-            });
-        });
+    <script type="text/javascript">
+        //
     </script>
 @endsection

+ 1 - 0
resources/views/user/index.blade.php

@@ -69,6 +69,7 @@
                                 <ul class="list-group">
                                     <li class="list-group-item">
                                         等级:{{$info['level_name']}}
+                                        {{--等级:{{$user_level[$info['level']]}}--}}
                                     </li>
                                     <li class="list-group-item">
                                         余额:{{$info['balance']}}

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

@@ -1,6 +1,6 @@
 <!DOCTYPE html>
-<!--[if IE 8]> <html lang="en" class="ie8 no-js"> <![endif]-->
-<!--[if IE 9]> <html lang="en" class="ie9 no-js"> <![endif]-->
+<!--[if IE 8]> <html lang="{{app()->getLocale()}}" class="ie8 no-js"> <![endif]-->
+<!--[if IE 9]> <html lang="{{app()->getLocale()}}" class="ie9 no-js"> <![endif]-->
 <!--[if !IE]><!-->
 <html lang="{{app()->getLocale()}}">
 <!--<![endif]-->

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

@@ -41,7 +41,7 @@
                                             <a href="#tab_1" data-toggle="tab">登录密码</a>
                                         </li>
                                         <li>
-                                            <a href="#tab_2" data-toggle="tab">SS信息</a>
+                                            <a href="#tab_2" data-toggle="tab">SS(R)信息</a>
                                         </li>
                                     </ul>
                                 </div>

+ 3 - 0
routes/web.php

@@ -8,6 +8,8 @@ Route::any('reset/{token}', 'UserController@reset'); // 重设密码
 Route::any('activeUser', 'UserController@activeUser'); // 激活账号
 Route::get('active/{token}', 'UserController@active'); // 激活账号
 Route::get('subscribe/{code}', 'SubscribeController@index'); // 节点订阅地址
+Route::get('article', 'ArticleController@index'); // 定位文章详情
+Route::post('locate', 'LocateController@locate'); // 上报文章打开时的定位
 
 Route::group(['middleware' => ['user', 'admin']], function() {
     Route::get('admin', 'AdminController@index'); // 后台首页
@@ -20,6 +22,7 @@ Route::group(['middleware' => ['user', 'admin']], function() {
     Route::any('admin/editNode', 'AdminController@editNode'); // 编辑节点
     Route::post('admin/delNode', 'AdminController@delNode'); // 删除节点
     Route::get('admin/articleList', 'AdminController@articleList'); // 文章列表
+    Route::get('admin/articleLogList', 'AdminController@articleLogList'); // 文章访问日志列表
     Route::any('admin/addArticle', 'AdminController@addArticle'); // 添加文章
     Route::any('admin/editArticle', 'AdminController@editArticle'); // 编辑文章
     Route::post('admin/delArticle', 'AdminController@delArticle'); // 删除文章

+ 26 - 0
sql/db.sql

@@ -287,6 +287,32 @@ CREATE TABLE `article` (
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='文章表';
 
 
+-- ----------------------------
+-- Table structure for `article_log`
+-- ----------------------------
+CREATE TABLE `article_log` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `aid` int(11) NOT NULL DEFAULT '0' COMMENT '文章ID',
+  `lat` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '纬度',
+  `lng` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '经度',
+  `ip` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT 'IP地址',
+  `headers` text COLLATE utf8mb4_unicode_ci COMMENT '浏览器头部信息',
+  `nation` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '国家',
+  `province` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '省',
+  `city` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '市',
+  `district` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '区',
+  `street` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '街道',
+  `street_number` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '门牌',
+  `address` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '地址',
+  `full` text COLLATE utf8mb4_unicode_ci COMMENT '地图完整请求数据',
+  `is_pull` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否获取拉取地址信息',
+  `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '状态:0-未查看、1-已查看',
+  `created_at` datetime DEFAULT NULL COMMENT '创建时间',
+  `updated_at` datetime DEFAULT NULL COMMENT '最后更新时间',
+  PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+
+
 -- ----------------------------
 -- Table structure for `invite`
 -- ----------------------------