fly 5 年之前
父节点
当前提交
61e4d4b13d

+ 182 - 0
app/Client/SiteUser.php

@@ -0,0 +1,182 @@
+<?php
+
+namespace App\Client;
+
+use App\Modules\Channel\Models\Channel;
+use App\Modules\Subscribe\Models\BookOrder;
+use App\Modules\Subscribe\Models\YearOrder;
+use App\Modules\User\Models\User;
+use DB;
+
+class SiteUser
+{
+    private $users;
+    private $openid;
+    private $channel_id;
+    private $user;
+
+    public function  __construct($openid)
+    {
+        $this->openid = $openid;
+    }
+
+    /**
+     * 获取user
+     */
+    public function getChannelUser()
+    {
+        $funcs = [
+            'getUserFromLinkData', 'getUsersOnlyChannel',
+            'getUserFromYearOrder', 'getUserFromChapterOrderBeforeThreeDays',
+            'getUserFromChapterOrderLastThreeDays', 'getUserFromLast'
+        ];
+        foreach ($funcs as $func) {
+            if (!$this->channel_id) {
+                call_user_func($func);
+            }
+        }
+        if ($this->channel_id) {
+            return $this->user;
+        } else {
+            return [0, 0];
+        }
+    }
+
+    /**
+     * 已绑定关系
+     */
+    private function getUserFromLinkData()
+    {
+        $friend_link_uid_bind = DB::table('friend_link_uid_bind')->where('openid', $this->openid)->orderBy('id', 'desc')->first();
+        if ($friend_link_uid_bind) {
+            $user = User::where('id', $friend_link_uid_bind->uid)->select('id', 'distribution_channel_id')->first();
+            if ($user) {
+                $this->channel_id = $user->distribution_channel_id;
+            }
+        }
+    }
+
+    /**
+     * 唯一渠道
+     */
+    private function getUsersOnlyChannel()
+    {
+        $users = User::where('openid', $this->openid)->select('id', 'distribution_channel_id')->get()->all();
+        $inner_channels = Channel::join('channel_users', 'channel_users.id', '=', 'distribution_channels.channel_user_id')
+            ->select('distribution_channels.id')
+            ->whereIn('channel_users.id', explode(',', redisEnv('PROMOTION_GROUP_CHANNEL_USER_ID')))
+            ->get()
+            ->pluck('id')
+            ->toArray();
+
+        foreach ($users as $user) {
+            if (in_array($user->distribution_channel_id, $inner_channels)) {
+                $this->users[] = $user;
+            }
+        }
+        if (count($this->users) == 1) {
+            $this->setUserLink($this->users[0]->id);
+            $this->channel_id = $this->users[0]->distribution_channel_id;
+        }
+    }
+
+    /**
+     * 有包年的,按最新的包年记录渠道
+     */
+    private function getUserFromYearOrder($users)
+    {
+        $year_order = YearOrder::whereIn('uid', collect($users)->pluck('id')->all())->orderBy('end_time', 'desc')->first();
+        if ($year_order) {
+            //筛选包年结束时间最后的UID
+            foreach ($users as $item) {
+                if ($item->id == $year_order->uid) {
+                    $this->setUserLink($item->id);
+                    $this->channel_id = $item->distribution_channel_id;
+                }
+            }
+        }
+    }
+
+    /**
+     * 有订阅记录的3天的历史纪录,按最多的订阅渠道
+     */
+    private function getUserFromChapterOrderBeforeThreeDays()
+    {
+        $users_select = ['id' => 0, 'count' => 0, 'user' => null, 'create_time' => 0];
+        foreach ($this->users as $user) {
+            $table_prefix = ($user->id) % 512;
+            $chapter_count = DB::connection('chapter_order_mysql')
+                ->table('chapter_orders' . $table_prefix)
+                ->where('created_at', '>=', date('Y-m-d H:i:s', strtotime('-3 day')))
+                ->where('uid', $user->id)
+                ->count('id');
+            $book_order = BookOrder::where('uid', $user->id)
+                ->where('created_at', '>=', date('Y-m-d H:i:s', strtotime('-3 day')))
+                ->first();
+            if ($book_order) {
+                $chapter_count += 30;
+            }
+            if ($chapter_count > $users_select['count']) {
+                $users_select['id'] = $user->id;
+                $users_select['count'] = $chapter_count;
+                $users_select['user'] = $user;
+            }
+        }
+        if ($users_select['id'] > 0) {
+            $this->setUserLink($users_select['id']);
+            $this->channel_id = $users_select['user']->distribution_channel_id;
+        }
+    }
+
+    /**
+     * 有订阅记录的最近3天,按最新的订阅渠道
+     */
+    private function getUserFromChapterOrderLastThreeDays()
+    {
+        $users_select = ['id' => 0, 'count' => 0, 'user' => null, 'create_time' => 0];
+        foreach ($this->users as $user) {
+            $table_prefix = ($user->id) % 512;
+            $chapter_order = DB::connection('chapter_order_mysql')
+                ->table('chapter_orders' . $table_prefix)
+                ->where('uid', $user->id)
+                ->orderBy('created_at', 'desc')
+                ->first();
+            $book_order = BookOrder::where('uid', $user->id)
+                ->first();
+            if ($chapter_order) {
+                if (strtotime($chapter_order->created_at) > $users_select['create_time']) {
+                    $users_select['id'] = $user->id;
+                    $users_select['create_time'] = strtotime($chapter_order->created_at);
+                    $users_select['user'] = $user;
+                }
+            }
+            if ($book_order) {
+                if (strtotime($book_order->created_at) > $users_select['create_time']) {
+                    $users_select['id'] = $user->id;
+                    $users_select['create_time'] = strtotime($book_order->created_at);
+                    $users_select['user'] = $user;
+                }
+            }
+        }
+        if ($users_select['id'] > 0) {
+            $this->setUserLink($users_select['id']);
+            $this->channel_id = $users_select['user']->distribution_channel_id;
+        }
+    }
+
+    /**
+     * 最后选择默认第一个渠道
+     */
+    private function getUserFromLast()
+    {
+        $this->setUserLink($this->users[0]->id);
+        $this->channel_id = $this->users[0]->distribution_channel_id;
+    }
+
+    private function setUserLink($uid)
+    {
+        $friend_link_uid_bind = ['uid' => $uid, 'openid' => $this->openid, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s')];
+        DB::table('friend_link_uid_bind')->insert($friend_link_uid_bind);
+        $this->user = [$uid, $this->channel_id];
+    }
+}

+ 19 - 0
app/Consts/SysConsts.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Consts;
+
+class SysConsts
+{
+    /**
+     * 一小时:3600s
+     */
+    const ONE_HOUR_SECONDS = 3600;
+    /**
+     * 一天:86400s
+     */
+    const ONE_DAY_SECONDS = 86400;
+    /**
+     * 一周:86400 * 7s
+     */
+    const ONE_WEEK_SECONDS = 86400 * 7;
+}

+ 71 - 0
app/Http/Controllers/Wap/User/CrmBooklistController.php

@@ -0,0 +1,71 @@
+<?php
+
+namespace App\Http\Controllers\Wap\User;
+
+use App\Client\SiteUser;
+use Illuminate\Http\Request;
+use App\Http\Controllers\Controller;
+use App\Modules\Book\Services\CrmBookAutoRecommendService;
+use Hashids;
+
+class CrmBooklistController extends Controller
+{
+    private $channel_id;
+
+    public function __construct()
+    {
+        $user = app()->make('user');
+        $this->channel_id = $user->channel_id;
+    }
+
+
+    public function index(Request $request)
+    {
+        $month = date('n');
+        return view('crm.entrance')->with(compact('month'));
+    }
+
+    public function bookshow(Request $request)
+    {
+        $booklists = (new CrmBookAutoRecommendService)->getRecommendBooksFromRedis();
+        $book_models = collect($booklists)->groupBy('category_id')
+            ->map(function ($item, $key) {
+                $category = collect($item)->first();
+                $category_id = $category['category_id'];
+                $category_name = $category['category_name'];
+                $books = collect($item)->sortByDesc('recommend_index')->values()->transform(function ($item) {
+                    $item['star'] =  intval(($item['recommend_index'] - 50) / 10);
+                    $item['link'] = sprintf(
+                        '%s://site%s.%s.com/detail?id=%s',
+                        env('PROTOCOL'),
+                        encodeDistributionChannelId($this->channel_id),
+                        env('CUSTOM_HOST'),
+                        Hashids::encode($item['bid'])
+                    );
+                    return $item;
+                })->take(4)->all();
+                return compact('category_id', 'category_name', 'books');
+            })->all();
+        return view('crm.bookshow')->with(compact('book_models'));
+    }
+
+    public function booklist(Request $request)
+    {
+        $month = date('n');
+        $category_id = $request->get('category_id', 0);
+        if ($category_id) {
+            $booklists = (new CrmBookAutoRecommendService)->getRecommendBooksFromRedis();
+            $books =  collect($booklists)->where('category_id', $category_id)->transform(function ($item) {
+                $item['link'] = sprintf(
+                    '%s://site%s.%s.com/detail?id=%s',
+                    env('PROTOCOL'),
+                    encodeDistributionChannelId($this->channel_id),
+                    env('CUSTOM_HOST'),
+                    Hashids::encode($item['bid'])
+                );
+                return $item;
+            })->all();
+        }
+        return view('crm.booklist')->with(compact('books', 'month'));
+    }
+}

+ 4 - 3
app/Http/Kernel.php

@@ -39,7 +39,7 @@ class Kernel extends HttpKernel
             //\App\Http\Middleware\VerifyCsrfToken::class,
             //\App\Http\Middleware\EnableCrossRequest::class,
         ],
-        'jwttoken'=>[
+        'jwttoken' => [
             \App\Http\Middleware\XchengxuRefreshToken::class,
             \App\Http\Middleware\XchengxuGetUserFromToken::class,
         ],
@@ -58,7 +58,8 @@ class Kernel extends HttpKernel
     protected $routeMiddleware = [
         'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
         'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
-        'ReadOauth'=>\App\Http\Middleware\ReadOauth::class,
-        'EnableCross'=>\App\Http\Middleware\EnableCrossRequest::class,
+        'ReadOauth' => \App\Http\Middleware\ReadOauth::class,
+        'EnableCross' => \App\Http\Middleware\EnableCrossRequest::class,
+        'CrmUser' =>  \App\Http\Middleware\CrmUser::class,
     ];
 }

+ 64 - 0
app/Http/Middleware/CrmUser.php

@@ -0,0 +1,64 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use App\Client\SiteUser;
+use Closure;
+use EasyWeChat\Foundation\Application;
+use Cookie;
+
+class CrmUser
+{
+    /**
+     * Handle an incoming request.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \Closure  $next
+     * @return mixed
+     */
+    public function handle($request, Closure $next)
+    {
+        $uid = Cookie::get('crm_user_id');
+        if ($uid) {
+            $channel_id = Cookie::get('crm_channel_id');
+            $this->setUserGlobal($uid, $channel_id);
+        } else {
+            $openid = $request->get('openid');
+            $params = $request->except('_url');
+            if (empty($openid)) {
+                $url = url()->current() . '?' . http_build_query($params);
+                $params['redirect_url'] = urlencode($url);
+                $app = new Application($this->auth($params));
+                return $app->oauth->redirect();
+            } else {
+                $site_user = new SiteUser($openid);
+                $user = $site_user->getChannelUser();
+                Cookie::queue('crm_user_id', $user[0], env('U_COOKIE_EXPIRE'));
+                Cookie::queue('crm_channel_id', $user[1], env('U_COOKIE_EXPIRE'));
+                $this->setUserGlobal($user[0], $user[1]);
+            }
+        }
+        return $next($request);
+    }
+
+    private function setUserGlobal($uid, $channel_id)
+    {
+        $user = app()->make('user');
+        $user->id = $uid;
+        $user->channel_id = $channel_id;
+    }
+
+    private function auth($param)
+    {
+        $param['appid'] = 'wx9d389a73b88bbeae';
+        $options = [
+            'app_id' => 'wx9d389a73b88bbeae',
+            'secret' => '2f6594bb595dfa256b5512e43a32a3d3',
+            'oauth' => [
+                'scopes' => ['snsapi_base'],
+                'callback' => env('AUTH_CALLBACK_URL') . '?' . http_build_query($param),
+            ],
+        ];
+        return $options;
+    }
+}

+ 3 - 1
app/Http/Middleware/EncryptCookies.php

@@ -32,6 +32,8 @@ class EncryptCookies extends BaseEncrypter
         'month_pay_redirect',
         'is_force_out_guide',
         'push_transfer_custom_flag',
-        'push_transfer_template_flag'
+        'push_transfer_template_flag',
+        'crm_user_id',
+        'crm_channel_id'
     ];
 }

+ 6 - 1
app/Http/Routes/Wap/WapRoutes.php

@@ -86,7 +86,12 @@ Route::group(['domain'=>env('FRIEND_LINK_DOMAIN'),'namespace'=>'App\Http\Control
     Route::post('freecurrency','User\CoflController@freeCurrencyPost');
     Route::get('activity','User\CoflController@longActivity');
     Route::get('activity/year','User\CoflController@yearActivity');
-
+    
+    Route::group(['middleware'=>'CrmUser'], function () {
+        Route::get('crm/entrance','User\CrmBooklistController@index');
+        Route::get('crm/booklist','User\CrmBooklistController@booklist');
+        Route::get('crm/bookshow','User\CrmBooklistController@bookshow');
+    });
 });
 
 Route::group(['domain'=>env('WAP_DOMAIN'),'namespace'=>'App\Http\Controllers\Wap','middleware'=>'EnableCross'],function(){

+ 12 - 0
app/Modules/Book/Models/CrmBookAutoRecommend.php

@@ -0,0 +1,12 @@
+<?php
+
+namespace App\Modules\Book\Models;
+
+use Illuminate\Database\Eloquent\Model;
+
+class CrmBookAutoRecommend extends Model
+{
+    protected  $table = 'crm_book_auto_recommend';
+    protected  $fillable = ['week','bid','name','category_id','category_name'];
+    
+}

+ 123 - 0
app/Modules/Book/Services/CrmBookAutoRecommendService.php

@@ -0,0 +1,123 @@
+<?php
+
+namespace App\Modules\Book\Services;
+
+use App\Consts\SysConsts;
+use App\Modules\Book\Models\Book;
+use App\Modules\Book\Models\BookConfig;
+use App\Modules\Book\Models\CrmBookAutoRecommend;
+use DB;
+use Redis;
+
+use function GuzzleHttp\json_decode;
+
+class CrmBookAutoRecommendService
+{
+   private $this_week;
+
+   private $redis_key;
+
+   public function __construct()
+   {
+      $this->this_week = date('Ymd', strtotime('this week Monday'));
+      $this->redis_key =  'crm_book_auto_recommend:' . $this->this_week;
+   }
+
+   /**
+    * 生成推荐书籍
+    */
+   public function generateRecommendBooks()
+   {
+      if (CrmBookAutoRecommend::where('week', $this->this_week)->exists()) {
+         return;
+      } else {
+         $categories = BookConfig::join('books', 'books.id', 'book_configs.bid')
+            ->select('books.category_id')
+            ->where('book_configs.is_on_shelf', 2)->where('book_configs.recommend_index', '>=', 80)
+            ->groupBy('books.category_id')
+            ->havingRaw('count(1)>=10')
+            ->get();
+         $categories =  $categories->shuffle()->take(3)->all();
+         if ($categories) {
+            collect($categories)->each(function ($item) {
+               $books = BookConfig::join('books', 'books.id', 'book_configs.bid')
+                  ->where('books.category_id', $item->category_id)
+                  ->where('book_configs.is_on_shelf', 2)->where('book_configs.recommend_index', '>=', 80)
+                  ->select('book_configs.bid')
+                  ->get();
+               $books = $books->shuffle()->take(10)->all();
+               $recommends = BookConfig::join('books', 'books.id', 'book_configs.bid')
+                  ->join('book_categories', 'book_categories.id', 'books.category_id')
+                  ->whereIn('book_configs.bid', collect($books)->pluck('bid')->all())
+                  ->select('book_configs.bid', 'book_configs.book_name', 'books.category_id', 'book_categories.category_name')
+                  ->get();
+               $recommends = $recommends->transform(function ($item) {
+                  return [
+                     'week' => $this->this_week,
+                     'bid' => $item->bid,
+                     'name' => $item->book_name,
+                     'category_id' => $item->category_id,
+                     'category_name' => $item->category_name,
+                  ];
+               });
+               DB::table('crm_book_auto_recommend')->insert($recommends->all());
+            });
+         }
+      }
+   }
+
+   /**
+    * 设置redis缓存
+    */
+   public function setRecommendBooksRedis()
+   {
+      $results = $this->getRecommendBooksFromDB();
+      Redis::setex($this->redis_key, SysConsts::ONE_WEEK_SECONDS, json_encode($results));
+   }
+
+   /**
+    * 获取推荐书籍
+    */
+   public function getRecommendBooksFromRedis()
+   {
+      $value = Redis::get($this->redis_key);
+      if ($value) {
+         return json_decode($value, true);
+      } else {
+         $results = $this->getRecommendBooksFromDB();
+         Redis::setex($this->redis_key, SysConsts::ONE_WEEK_SECONDS, json_encode($results));
+         return $results;
+      }
+   }
+
+   /**
+    * 获取推荐书籍
+    */
+   private function getRecommendBooksFromDB()
+   {
+      $recommends = CrmBookAutoRecommend::where('week', $this->this_week)->get();
+      $bids = $recommends->pluck('bid')->all();
+      if ($recommends) {
+         $configs = BookConfig::whereIn('bid', $bids)->select('bid', 'cover', 'recommend_index')->get();
+         $books = Book::whereIn('id', $bids)->select('id', 'status', 'intro', 'size', 'last_cid', 'last_chapter')->get();
+         $results = $recommends->map(function ($item) use ($books, $configs) {
+            $bid = $item->bid;
+            $name = $item->name;
+            $category_id = $item->category_id;
+            $category_name = $item->category_name;
+            $config = $configs->where('bid', $bid)->first();
+            $book =  $books->where('id', $bid)->first();
+            $cover = $config->cover;
+            $recommend_index = $config->recommend_index;
+            $intro = $book->intro;
+            $status = $book->status;
+            $size = $book->size;
+            $last_cid = $book->last_cid;
+            $last_chapter = $book->last_chapter;
+            $is_vip = 1;
+            return compact('bid', 'name', 'category_id', 'category_name', 'cover', 'recommend_index', 'status', 'intro', 'size', 'last_cid', 'last_chapter', 'is_vip');
+         });
+         return $results;
+      }
+   }
+}

+ 3 - 3
app/Providers/AppServiceProvider.php

@@ -3,6 +3,7 @@
 namespace App\Providers;
 
 use Illuminate\Support\ServiceProvider;
+use stdClass;
 
 class AppServiceProvider extends ServiceProvider
 {
@@ -13,7 +14,7 @@ class AppServiceProvider extends ServiceProvider
      */
     public function boot()
     {
-        //
+        $this->app->instance('user', new stdClass);
     }
 
     /**
@@ -26,6 +27,5 @@ class AppServiceProvider extends ServiceProvider
         /*if ($this->app->environment() !== 'production') {
             $this->app->register(\Way\Generators\GeneratorsServiceProvider::class);
             $this->app->register(\Xethron\MigrationsGenerator\MigrationsGeneratorServiceProvider::class);
-        }*/
-    }
+        }*/ }
 }

+ 51 - 0
resources/views/crm/booklist.blade.php

@@ -0,0 +1,51 @@
+<!--
+ * @Author: ZhengXiaowei
+ * @Date: 2019-08-15 16:39:23
+ * @LastEditors: ZhengXiaowei
+ * @LastEditTime: 2019-09-11 16:31:10
+ * @Description: 八月
+ -->
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <meta charset="UTF-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
+    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
+    <link rel="stylesheet" href="https://cdn-novel.iycdm.com/h5/crm_booklist/css/booklist.css" />
+    <title>{{$month}}月</title>
+</head>
+
+<body>
+    <main>
+        <div class="banner-wrap">
+            <img src="https://cdn-novel.iycdm.com/h5/crm_booklist/images/banner{{$month}}.jpg" alt="" />
+        </div>
+        <div class="container">
+            <div class="list-wrap">
+                @foreach ($books as $item)
+                <div class="list-item">
+                    <img class="cover" src="{{$item['cover']}}" alt="" />
+                    <div class="item-info">
+                        <a href="{{$item['link']}}">
+                            <p class="name">{{$item['name']}}</p>
+                        </a>
+                        <p class="category">
+                            <span>{{$item['category_name']}}</span><span>{{$item['status']==1?"完结":"连载中"}}</span>
+                        </p>
+                        <p class="words">字数:{{$item['size']}}</p>
+                        <p class="update">
+                            <i>最新:</i>{{$item['last_chapter']}}
+                            @if ($item['is_vip'])
+                            <img src="https://cdn-novel.iycdm.com/h5/crm_booklist/images/is_vip.png" alt="" />
+                            @endif
+                        </p>
+                    </div>
+                </div>
+                @endforeach
+            </div>
+        </div>
+    </main>
+</body>
+
+</html>

+ 74 - 0
resources/views/crm/bookshow.blade.php

@@ -0,0 +1,74 @@
+<!--
+ * @Author: ZhengXiaowei
+ * @Date: 2019-08-15 16:39:23
+ * @LastEditors: ZhengXiaowei
+ * @LastEditTime: 2019-09-11 17:12:01
+ * @Description: 热门书单
+ -->
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta charset="UTF-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
+  <meta http-equiv="X-UA-Compatible" content="ie=edge" />
+  <link rel="stylesheet" href="https://cdn-novel.iycdm.com/h5/crm_booklist/css/bookshow.css" />
+  <title>热门书单</title>
+</head>
+
+<body>
+  <main>
+    <div class="banner-wrap">
+      <img src="https://cdn-novel.iycdm.com/h5/crm_booklist/images/bookshow_banner.jpg" alt="" />
+    </div>
+    @foreach ($book_models as $book_model)
+    <div class="box-wrap">
+      <img src="https://cdn-novel.iycdm.com/h5/crm_booklist/images/box-bg.png" alt="" class="bg" />
+      <p class="box-title">{{$book_model['category_name']}}</p>
+      <div class="book-wrap">
+        @foreach ($book_model['books'] as $book)
+        @if ($loop->index==1)
+        <div class="book-main">
+          <img class="cover" src="{{$book['cover']}}" alt="" />
+          <div class="book-info">
+            <a href="{{$book['link']}}">
+              <p class="name">《{{$book['name']}}》</p>
+            </a>
+            <p class="intro">
+              简介:{{$book['intro']}}
+            </p>
+            <div class="book-rate">
+              @for($i=0;$i
+              <$book['star'];$i++) <img src="https://cdn-novel.iycdm.com/h5/crm_booklist/images/full-star.png" alt="" />
+              @endfor
+              @for($i=0;$i
+              <5-$book['star'];$i++) <img src="https://cdn-novel.iycdm.com/h5/crm_booklist/images/no-star.png" alt="" />
+              @endfor
+              <span>{{$book['recommend_index']}}分</span>
+            </div>
+            <div class="book-read">
+              <img src="https://cdn-novel.iycdm.com/h5/crm_booklist/images/free-read-btn.png" alt="" class="to-read" />
+              <a href="#">查看更多&gt;</a>
+            </div>
+          </div>
+        </div>
+        @else
+        <div class="book-normal__list">
+          <div class="book-item">
+            <a href="{{$book['link']}}">
+              <img src="{{$book['cover']}}" alt="" />
+              <span>{{$book['name']}}</span>
+            </a>
+          </div>
+        </div>
+        @endif
+        @endforeach
+
+
+      </div>
+    </div>
+    @endforeach
+  </main>
+</body>
+
+</html>

+ 41 - 0
resources/views/crm/entrance.blade.php

@@ -0,0 +1,41 @@
+<!--
+ * @Author: ZhengXiaowei
+ * @Date: 2019-08-15 16:39:23
+ * @LastEditors: ZhengXiaowei
+ * @LastEditTime: 2019-09-03 14:15:51
+ * @Description: 弹窗页
+ -->
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <meta charset="UTF-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
+    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
+    <link rel="stylesheet" href="https://cdn-novel.iycdm.com/h5/crm_booklist/css/index.css" />
+    <title>畅销小说榜</title>
+</head>
+
+<body>
+    <main>
+        <img class="month" src="https://cdn-novel.iycdm.com/h5/crm_booklist/images/{{$month}}.png" alt="" />
+        <img class="bg" src="https://cdn-novel.iycdm.com/h5/crm_booklist/images/bg.jpg" alt="" />
+        <div class="qrcode-wrap">
+            <img src="https://cdn-novel.iycdm.com/h5/crm_booklist/images/qrcode.png" alt="" class="qr-code" />
+            <p>添加微信阅读管家 连连</p>
+        </div>
+    </main>
+</body>
+<script>
+    var doc = document;
+     doc.body.addEventListener(
+       "click",
+       function() {
+         var qrcodeTop = doc.querySelector(".qrcode-wrap");
+         window.scrollTo(0, qrcodeTop.offsetTop);
+       },
+       false
+     );
+</script>
+
+</html>