zhaojs
2023-06-09 9df5e4341a95c35b00e651d49ff789576f28e897
Merge branch 'feature/v1.1.2api' into develop
已添加9个文件
已修改12个文件
2825 ■■■■■ 文件已修改
application/admin/lang/zh-cn/banner.php 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
application/admin/model/Banner.php 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
application/api/controller/Activity.php 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
application/api/controller/Taoke.php 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
application/api/controller/User.php 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
application/api/logic/Banner.php 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
application/api/logic/UserBrowse.php 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
application/api/logic/commission/Tb.php 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
application/api/logic/order/TbOrder.php 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
application/api/logic/taoke/device/Dataoke.php 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
application/common/model/User.php 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
application/common/model/user/CodeChangeHistory.php 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
application/common/model/user/RecommendInviter.php 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/html/bybt.html 710 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/html/fengqiangbang.html 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/html/freebuy.html 413 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/html/fxguid.html 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/html/newuse.html 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/html/tb_minishop.html 424 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/html/zsz_act.html 734 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/test111.txt 补丁 | 查看 | 原始文档 | blame | 历史
application/admin/lang/zh-cn/banner.php
@@ -11,6 +11,8 @@
    'Type 5'         => '首页底部轮播',
    'Type 6'         => '首页悬浮窗',
    'Type 7'         => '首页弹窗',
    'Type 11'        => 'app首页小轮播',
    'Type 12'        => '首页连标',
    'Image'          => '图片信息',
    'Status'         => '状态',
    'Status 0'       => '隐藏',
application/admin/model/Banner.php
@@ -44,7 +44,7 @@
    
    public function getTypeList()
    {
        return ['0' => __('Type 0'), '1' => __('Type 1'), '2' => __('Type 2'), '3' => __('Type 3'), '4' => __('Type 4'), '5' => __('Type 5'), '6' => __('Type 6'), '7' => __('Type 7'),'9' => '新人教程','10'=>'逛逛'];
        return ['0' => __('Type 0'), '1' => __('Type 1'), '2' => __('Type 2'), '3' => __('Type 3'), '4' => __('Type 4'), '5' => __('Type 5'), '6' => __('Type 6'), '7' => __('Type 7'),'9' => '新人教程','10'=>'逛逛','11'=>'app首页小轮播','12'=>'首页连标','13'=>'app首页快捷上','14'=>'app首页快捷下'];
    }
    public function getStatusList()
application/api/controller/Activity.php
@@ -26,4 +26,35 @@
        $this->success('获取成功',$list);
      
    }
    /**
     *
     * ä»Šæ—¥æŠ˜ä¸ŠæŠ˜
     */
    public function zsz_goods_list()
    {
        $cid = request()->param('cid','');
        $appkey = request()->param('app_key','');
        $LogicDataoke = new LogicDataoke();
        $list=$LogicDataoke->zszGoodsList($cid, $appkey);
        $this->success('获取成功',$list);
    }
    /**
     *
     * å°æ ·
     */
    public function xy_goods_list()
    {
        $keyword = request()->param('keyword','');
        $apikey=request()->param('apikey','');
        $back=request()->param('back',10);
        $min_id = request()->param('min_id',1);
        $LogicDataoke = new LogicDataoke();
        $list=$LogicDataoke->xyGoodsList($apikey, $keyword,$min_id,$back);
        $this->success('获取成功',$list);
    }
}
application/api/controller/Taoke.php
@@ -345,9 +345,13 @@
        if(empty($goods_id)) $this->error('商品id不能为空');
        $LogicHaodanku = new LogicHaodanku();
        // $LogicHaodanku = new LogicHaodanku();
        $list = $LogicHaodanku->getSimilarInfo($goods_id,10);
        // $list = $LogicHaodanku->getSimilarInfo($goods_id,10);
        $LogicDataoke=new LogicDataoke();
        $list=$LogicDataoke->getSimilarInfo($goods_id,10);
        if($list === false) $this->error($LogicHaodanku->getError());
@@ -1340,4 +1344,27 @@
        $this->success('获取成功',['list' => $list]);
    }
    /**
     * 0元购商品列表(调用9.9包邮精选接口,获取3.9元商品)
     *
     * @return void
     */
    public function get_first_free_goods(){
        $page = request()->param('page',1);
        $page_size = request()->param('pageSize',40);
        $LogicDataoke = new LogicDataoke();
        $list = $LogicDataoke->getOpGoodsList(1,$page,$page_size);
        if($list === false) $this->error($LogicDataoke->getError());
        foreach($list as $key => $value){
            $list[$key]['fanli'] = $value['actualPrice'];
        }
       // $list= array_slice($list, 0, 40);
        $this->success('获取成功',['list'=>$list]);
    }
}
application/api/controller/User.php
@@ -18,12 +18,14 @@
use app\api\logic\UserWithdrawal as LogicUserWithdrawal;
use app\api\logic\SettlementRecord as LogicSettlementRecord;
use app\api\logic\UserMoneyLog as LogicUserMoneyLog;
use think\log;
/**
 * ä¼šå‘˜æŽ¥å£
 */
class User extends Api
{
    protected $noNeedLogin = ['login', 'mobilelogin', 'resetpwd', 'changemobile', 'wxapplogin','bind_mobile_login','register'];
    protected $noNeedLogin = ['GetRecomInviter','login', 'mobilelogin', 'resetpwd', 'changemobile', 'wxapplogin','bind_mobile_login','register'];
    protected $noNeedRight = '*';
    public function _initialize()
@@ -431,6 +433,46 @@
    }
    /**
     * æ ‡è®°æµè§ˆ0元购商品记录
     *
     * @return void
     */
    public function update_first_free_browse()
    {
        $ids = request()->param('goodsid','');
        $new_goodsId = request()->param('new_goodsId','');
        $LogicUserBrowse = new LogicUserBrowse();
        $res = $LogicUserBrowse->updatefirstfreelog(USERID,$ids,$new_goodsId);
        if($res === false) $this->error($LogicUserBrowse->getError());
        $this->success([],'添加成功');
    }
    /**
     * æ£€æµ‹æ˜¯å¦é¦–单
     *
     * @return void
     */
    public function check_isfirst_free()
    {
        $LogicUserBrowse = new LogicUserBrowse();
        $res = $LogicUserBrowse->checkIsFirstFree(USERID);
        if($res === false) $this->error($LogicUserBrowse->getError());
        Log::write('检测是否首单:'.json_encode($res));
        if(empty($res)) $this->success(['info'=>1],'首单客户');
        $this->success(['info'=>0],'非首单客户');
    }
     /**
     * ç”¨æˆ·æ”¶è—è®°å½•
     *
@@ -743,6 +785,7 @@
        $user_jjcj_num = $ModelUser->where(['f_invitation_id'=>USERID,'level'=>1])->count(); //间接初级人数
        $user_zszj_num = $ModelUser->where(['invitation_id'=>USERID,'level'=>2])->count(); //直属中级人数
        $user_jjzj_num = $ModelUser->where(['f_invitation_id'=>USERID,'level'=>2])->count(); //间接中级人数
        $user_zong_num = $ModelUser->where(['invitation_id'=>USERID])->count(); //总邀请人数
        $user_monthly_commission = LogicUser::getUserCommission($user['id'],'month'); //获取近30佣金
        $user_total_commission = LogicUser::getUserCommission($user['id'],'total'); //获取累计佣金
        $data = [
@@ -751,6 +794,7 @@
                'user_jjcj_num' => $user_jjcj_num,
                'user_zszj_num' => $user_zszj_num,
                'user_jjzj_num' => $user_jjzj_num,
                'user_zong_num'=>$user_zong_num,
                'user_monthly_commission' => $user_monthly_commission,
                'total_commission' => $user_total_commission
            ],
@@ -934,6 +978,10 @@
        if($user->level<2){
            $this->error('当前等级不能修改邀请码');
        }
        //判断是否有修改记录
        if (\app\common\model\user\CodeChangeHistory::getByUserId($user->id)) {
            $this->error('邀请码只能修改一次哦');
        }
        $invitation_code =  request()->param('invite_code','');
        if (!$invitation_code ) {
            $this->error(__('请输入邀请码'));
@@ -950,10 +998,28 @@
        }
        $user->invitation_code = $invitation_code;
        $user->save();
        //保存修改记录
        \app\common\model\user\CodeChangeHistory::create([
                    'user_id' => $user->id,
                    'before_code' => $user->invitation_code,
                    'after_code' =>$invitation_code,
                    'create_time' => time()
                ]);
        $this->success();
    }
    /**
    *
    *获取推荐邀请人
    */
    public function getRecomInviter()
    {
        $ModelUser=new ModelUser();
        $user = $ModelUser->join('recommend_inviter', 't_user.id=t_recommend_inviter.user_id')
        ->field('t_user.id,t_user.avatar,t_user.invitation_code,t_user.nickname')
        ->order('recommend_inviter.order_inde asc')
        ->select();
        $this->success('获取成功',$user);
    }
}
application/api/logic/Banner.php
@@ -10,7 +10,7 @@
class Banner extends BasicLogic
{
    const BANNER_TYPE = ['1'=>'topBannerList','3'=>'singleLineList','4'=>'doubleLineList','5'=>'bottomBannerList','7' => 'popBannerList'];
    const BANNER_TYPE = ['1'=>'topBannerList','3'=>'singleLineList','4'=>'doubleLineList','5'=>'bottomBannerList','7' => 'popBannerList','11'=>'popBannerSList','12'=>'indexbanner','13'=>'enterTop','14'=>'enterDown'];
    public function __construct()
    {
@@ -36,7 +36,11 @@
            'singleLineList'=>[],
            'doubleLineList'=>[],
            'bottomBannerList'=>[],
            'popBannerList' => []
            'popBannerList' => [],
            'popBannerSList'=>[],
            'indexbanner'=>[],
            'enterTop'=>[],
            'enterDown'=>[]
        ];
        if(count($type_arr) > 1){
            foreach($list as $item){
application/api/logic/UserBrowse.php
@@ -4,7 +4,7 @@
use app\common\logic\Basic as BasicLogic;
use app\common\model\user\Browse as ModelUserBrowse;
use app\api\logic\taoke\device\Jd as LogicJd;
use think\Db;
class UserBrowse extends BasicLogic
{
@@ -73,6 +73,46 @@
    }
    /**
     * æ ‡è®°æµè§ˆ0元购商品记录
     *
     * * @param [type] $user_id
     * @param [type] $ids
     * @return void
     */
    public function updatefirstfreelog($user_id,$ids,$new_goodsId)
    {
        if(empty($ids)||empty($new_goodsId)){
            fault('宝贝ID不能为空');
            return true;
        }
        //查询是否已经标记过
        $res=Db::query('SELECT id FROM t_user_first_free_browse WHERE user_id=? AND goodsId=?',[$user_id,$ids]);
        if(!empty($res)){
             return true;
        }
        $res=Db::execute('INSERT INTO t_user_first_free_browse(user_id,goodsId,new_goodsId) VALUES (?,?,?)',[$user_id,$ids,$new_goodsId]);
        return true;
    }
    /**
     * æŸ¥è¯¢æ˜¯å¦é¦–è´­
     *
     * * @param [type] $user_id
     * @param [type] $ids
     * @return void
     */
    public function checkisfirstfree($user_id)
    {
        //查询是否已经标记过
        $res=Db::query('SELECT id FROM t_user_first_free_browse WHERE user_id=? AND is_order=?',[$user_id,1]);
        return $res;
    }
   
application/api/logic/commission/Tb.php
@@ -61,6 +61,61 @@
        return empty($list) ? [] : $list;
    }
     /**
     * è¿”利入库和更新(新),加上首单逻辑
     *
     * @return void
     */
    public function fanliCommissionNew($order)
    {
        $trade_id = isset($order['trade_id']) ? $order['trade_id'] : '';
        if(empty($trade_id)) return ['status'=>false,'info'=>'订单号为空'];
        //根据淘宝绑定渠道id查询用户信息
        $ModelUser = new ModelUser();
        $user = $ModelUser->where(['t_relation_id'=>$order['relation_id']])->find();
        if(!empty($user))
        {
            $browse=DB::name('user_first_free_browse')->where(['user_id'=>$user['id'],'is_order'=>1])->find();
            if(!empty($browse)){
                //查询是否是首单商品
            $first_browse=DB::name('user_first_free_browse')->where(['user_id'=>$user['id'],'tid'=>$order['trade_id']])->find();
            if(!empty('first_browse')){
                //计算首单返利
                $res=self::fanliCommissionForFree($order);
                return $res;
            }
            else{
                $res=self::fanliCommission($order);
                return $res;
            }
            }
            else{
                $itemid=explode("-",$order['item_id']);
                $first_good=DB::name('user_first_free_browse')->where(['user_id'=>$user['id'],'is_order'=>0])->where('new_goodsId','like','%' . $itemid[1] . '')->find();
                if(empty($first_good)){
                    $res=self::fanliCommission($order);
                    return $res;
                }
                else{
                    //计算首单返利
                    $res=self::fanliCommissionForFree($order);
                    return $res;
                }
            }
        }
        else{
            //标记订单为无需分销
            $ModelOrder = new ModelTaobaoOrder();
            $ModelOrder->where(['id'=>$order['id']])->update(['is_distribution'=>2,'update_time'=>time()]);
            Db::commit();
            return ['status'=>true,'info'=>'无需分销'];
        }
    }
    /**
     * è¿”利入库和更新
@@ -69,6 +124,7 @@
     */
    public function fanliCommission($order)
    {
        $trade_id = isset($order['trade_id']) ? $order['trade_id'] : '';
        if(empty($trade_id)) return ['status'=>false,'info'=>'订单号为空'];
        Db::startTrans();
@@ -247,5 +303,105 @@
        return ['status'=>true,'info'=>'拆分成功'];
    }
    /**
     * é¦–单返利入库和更新
     *
     * @return void
     */
    public function fanliCommissionForFree($order)
    {
        $trade_id = isset($order['trade_id']) ? $order['trade_id'] : '';
        if(empty($trade_id)) return ['status'=>false,'info'=>'订单号为空'];
        $itemid=explode("-",$order['item_id']);
        Db::startTrans();
        $ModelUser = new ModelUser();
        $user = $ModelUser->where(['t_relation_id'=>$order['relation_id']])->find();
        $ModelOrder = new ModelTaobaoOrder();
        if(empty($user)){
            //标记订单为无需分销
            $ModelOrder->where(['id'=>$order['id']])->update(['is_distribution'=>2,'update_time'=>time()]);
            Db::commit();
            return ['status'=>true,'info'=>'无需分销1'];
        }
        $userLevelInfo = $this->getLevelInfo($user['level']); //用户等级信息
        $find_commission = $this->model->where(['trade_id'=>$trade_id])->select();
        $push_data = [];
        if(empty($find_commission)){ //开始反佣入库
            if($order['tk_status'] == 13){ //订单失效,更新订单为无需分销
                $ModelOrder->where(['id'=>$order['id']])->update(['is_distribution'=>2,'update_time'=>time()]);
                //更新首单标记记录
                Db::name('user_first_free_browse')->where(['user_id'=>$user['id']])->where('new_goodsId','like','%' . $itemid[1] . '')->update(['tid'=>$trade_id,'is_order'=>0]);
                Db::commit();
                return ['status'=>true,'info'=>'订单失效,无需分销'];
            }
            //自购反佣
            $tmp_1 = [
                'trade_parent_id' => $order['trade_parent_id'],
                'trade_id' => $trade_id,
                'member_id' => $user['id'],
                'buy_member_id' => $user['id'],
                'is_own' => 1,
                'alipay_total_price' => $order['alipay_total_price'],
                'pub_share_pre_fee' => !empty($order['pub_share_pre_fee']) ? $order['alipay_total_price'] : "",
                'pub_share_fee' => !empty($order['pay_price']) ? $order['alipay_total_price'] : "",
                'refund_tag' => $order['refund_tag'],
                'item_img' => $order['item_img'],
                'item_title' => $order['item_title'],
                'tk_status' => $order['tk_status'],
                'item_id' => $order['item_id'],
                'member_commission_rate' => $userLevelInfo['own_commission_rate'],
                'is_settle' => 0,
                'tb_paid_time' => $order['tb_paid_time'],
                'pay_price' => $order['pay_price'],
                'tk_earning_time' => !empty($order['tk_earning_time']) ? strtotime($order['tk_earning_time']) : 0,
                'create_time' => time()
            ];
            $save_data[] = $tmp_1;
            $result = $this->model->saveAll($save_data);
            if(!$result){
                Db::rollback();
                return ['status'=>false,'info'=>'反佣入库失败'];
            }
            if($order['is_distribution'] == 0){
                $res_order = $ModelOrder->where(['id'=>$order['id']])->update(['is_distribution'=>1,'update_time'=>time()]);
                if(!$res_order){
                    Db::rollback();
                    return ['status'=>false,'info'=>'订单状态修改失败'];
                }
            }
            // if(!empty($push_data)){
            //     $this->userPush($push_data);
            // }
        }else{ //已经拆分订单,进行更新
            foreach($find_commission as $item){
                $item_data = [
                    'alipay_total_price' => $order['alipay_total_price'],
                    'pub_share_pre_fee' => !empty($order['pub_share_pre_fee']) ? $order['alipay_total_price'] : "",
                'pub_share_fee' => !empty($order['pay_price']) ? $order['alipay_total_price'] : "",
                    'refund_tag' => $order['refund_tag'],
                    'tk_status' => $order['tk_status'],
                    'pay_price' => $order['pay_price'],
                    'tk_earning_time' => !empty($order['tk_earning_time']) ? strtotime($order['tk_earning_time']) : 0,
                    'update_time' => time()
                ];
                $update_commission = $this->model->where(['id'=>$item['id']])->update($item_data);
                if(!$update_commission){
                    Db::rollback();
                    return ['status'=>false,'info'=>'更新拆分记录错误,ID为:'.$item['id']];
                }
            }
            //更新订单sign
            $update_order = $ModelOrder->where(['id'=>$order['id']])->update(['one_sign'=>$order['two_sign'],'update_time'=>time()]);
            if(!$update_order){
                Db::rollback();
                return ['status'=>false,'info'=>'更新订单sign错误,订单ID为:'.$order['id']];
            }
        }
        Db::name('user_first_free_browse')->where(['user_id'=>$user['id']])->where('new_goodsId','like','%' . $itemid[1] . '')->update(['tid'=>$trade_id,'is_order'=>1]);
        Db::commit();
        return ['status'=>true,'info'=>'首单拆分成功'];
    }
application/api/logic/order/TbOrder.php
@@ -125,7 +125,9 @@
        if(!empty($list)){
            $LogicTbCommission = new LogicTbCommission();
            foreach($list as $order){
                $result = $LogicTbCommission->fanliCommission($order);
               // $result = $LogicTbCommission->fanliCommission($order);
               //新加首单返利
                $result = $LogicTbCommission->fanliCommissionNew($order);
                if(!$result){
                    mylog('订单拆分错误',$result['info'],"errorInfo");
                }
application/api/logic/taoke/device/Dataoke.php
@@ -30,8 +30,12 @@
        'album_url' => 'https://openapi.dataoke.com/api/album/album-list',
        'album_goods_url'=>'https://openapi.dataoke.com/api/album/goods-list',
        'fqb_url'=>'https://dtkapi.ffquan.cn/dtk_go_app_api/v1/page-goods-ranking',
        'zsz_url'=>'https://dtkapi.ffquan.cn/dtk_go_app_api/v1/page-super-discount',
        'xy_url'=>'https://v2.api.haodanku.com/makeup_items',
        'friends-circle-list'=>'https://openapi.dataoke.com/api/goods/friends-circle-list',
        'parse_url'=>'https://openapi.dataoke.com/api/dels/kit/contentParse'
        'parse_url'=>'https://openapi.dataoke.com/api/dels/kit/contentParse',
        'similer_url'=>'https://openapi.dataoke.com/api/goods/list-similer-goods-by-open',
        'gift_money_url'=>'https://openapi.dataoke.com/api/goods/first-order-gift-money',
    ];
    const shop_type = ["0"=>"淘宝","1"=>"天猫","2"=>"天猫超市","3"=>"天猫国际"];
@@ -117,7 +121,44 @@
        $result['data']['data']=$list;
        return $result;
     }
     /**
      *
      *折上折单页接口
      */
     public function zszGoodsList($cid,$appkey)
     {
        $params = $this->setParams(['cId'=>$cid,'app_key'=>$appkey]);
        $result = send_get(self::request_url['zsz_url'],$params);
        if(empty($result) || $result['code'] != 1) return [];
        $list = $result['data']['data']['list'];
        if(!empty($list)){
            foreach($list as &$goods){
                $goods = self::GetGoodsFy($goods,$goods["jiage"],$goods["yongjin"]/100);
            }
        }
        $result['data']['data']['list']=$list;
        return $result;
     }
     /**
      *
      *小样单页接口
      */
      public function xyGoodsList($apikey,$keyword,$min_id,$back)
      {
         $params = $this->setParams(['apikey'=>$apikey,'keyword'=>$keyword,'min_id'=>$min_id,'back'=>$back]);
         $result = send_get(self::request_url['xy_url'],$params);
         if(empty($result) || $result['code'] != 200) return [];
         $list = $result['data'];
         if(!empty($list)){
             foreach($list as &$goods){
                 $goods = self::GetGoodsFy($goods,$goods["itemendprice"],$goods["tkrates"]);
             }
         }
         $result['data']=$list;
         return $result;
      }
    /**
     * èŽ·å–ä¸“è¾‘åˆ—è¡¨
     *
@@ -639,6 +680,70 @@
        return $goods;
    }
    /**
     * çŒœä½ å–œæ¬¢å•†å“ https://www.dataoke.com/pmc/api-d.html?id=16
     *
     * @param [type] $goodsId
     * @param [type] $page_size æ¯é¡µæ•°æ®
     * @return void
     */
    public function getSimilarInfo($goods_id,$page_size)
    {
        $params = $this->setParams(['id'=>$goods_id,'size'=>$page_size]);
        $result = send_get(self::request_url['similer_url'],$params);
        if(empty($result) || $result['code'] != 0) return [];
        $list = $result['data'];
        if(!empty($list)){
            foreach($list as &$goods){
                $goods = self::initGoods($goods);
            }
        }
        return $list;
    }
    /**
     * æ·˜ç¤¼é‡‘商品 https://www.dataoke.com/kfpt/api-d.html?id=29
     *
     * @param [type] $page
     * @param [type] $page_size
     * @return void
     */
    public function GetFirstOrderGiftMoney($pageSize,$pageId)
    {
        log::write($pageSize);
        $params = $this->setParams(['pageSize'=>$pageSize,'pageId'=>$pageId]);
        $result = send_get(self::request_url['gift_money_url'],$params);
        if(empty($result) || $result['code'] != 0) return [];
        $list = $result['data'];
        if(!empty($list)){
            foreach($list as &$goods){
                // log::write($goods);
                // if((double)$goods['firstOrderAmount']<4){
                //    //删除佣金小于4的商品
                //    $list=array_diff_key($data, ['id'=>$goods['id']]);
                // }
            }
        }
        return $list;
    }
    /**
     * æ ¼å¼åŒ–商品信息
application/common/model/User.php
@@ -192,4 +192,6 @@
    {
        return $this->hasOne(ModelThird::class,'user_id','id')->where('platform','wechat');
    }
}
application/common/model/user/CodeChangeHistory.php
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
<?php
namespace app\common\model\user;
use think\Model;
class CodeChangeHistory extends Model
{
    // è¡¨å
    protected $name = 'codechange_history';
}
application/common/model/user/RecommendInviter.php
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
<?php
namespace app\common\model\user;
use think\Model;
class RecommendInviter extends Model
{
    // è¡¨å
    protected $name = 't_recommend_inviter';
}
public/html/bybt.html
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,710 @@
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta
      name="App-Config"
      content="fullscreen=yes,useHistoryState=yes,transition=yes"
    />
    <meta content="yes" name="apple-mobile-web-app-capable" />
    <meta content="yes" name="apple-touch-fullscreen" />
    <meta content="telephone=no,email=no" name="format-detection" />
    <meta
      name="viewport"
      content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover"
    />
    <script
      type="text/javascript"
      src="https://public.ffquan.cn/lib/jquery-1.12.4.min.js"
    ></script>
    <script
      type="text/javascript"
      src="https://cdn.staticfile.org/vue/2.6.11/vue.min.js"
    ></script>
    <script
      type="text/javascript"
      src="https://public.ffquan.cn/lib/vue-lazyload.js"
    ></script>
    <script
      type="text/javascript"
      src="https://public.ffquan.cn/lib/swiper/js/swiper.min.js"
    ></script>
    <script
      type="text/javascript"
      src="https://public.ffquan.cn/lib/clipboard.min.js"
    ></script>
    <script
      type="text/javascript"
      src="https://p1static.dataoke.com/web/js/layer/layer.js?t=202104191256"
    ></script>
    <title>百亿补贴</title>
    <script>
      var _config = {
        appKey: 'kowwtb', //此处替换成用户appKey
        // éœ€è¦è‡ªè¡ŒæŽ¥å…¥ç‚¹å‡»å•†å“åŽçš„逻辑 ï¼ˆéžå¿…填)
        // jumpGoodsUrl: function (items) {   // æ›¿æ¢ä¸ºè¯¦ç»†é¡µé¢çš„地址或转链逻辑
        //      window.open('https://xxxx&gid=' + items.goodsid);
        // }
      };
    </script>
    <style>
      a,
      abbr,
      acronym,
      address,
      applet,
      article,
      aside,
      audio,
      b,
      big,
      blockquote,
      body,
      canvas,
      caption,
      center,
      cite,
      code,
      dd,
      del,
      details,
      dfn,
      div,
      dl,
      dt,
      em,
      embed,
      fieldset,
      figcaption,
      figure,
      footer,
      form,
      h1,
      h2,
      h3,
      h4,
      h5,
      h6,
      header,
      hgroup,
      html,
      i,
      iframe,
      img,
      ins,
      kbd,
      label,
      legend,
      li,
      mark,
      menu,
      nav,
      object,
      ol,
      output,
      p,
      pre,
      q,
      ruby,
      s,
      samp,
      section,
      small,
      span,
      strike,
      strong,
      sub,
      summary,
      sup,
      table,
      tbody,
      td,
      tfoot,
      th,
      thead,
      time,
      tr,
      tt,
      u,
      ul,
      var,
      video {
        margin: 0;
        padding: 0;
        border: 0;
        font-size: 100%;
        font: inherit;
        vertical-align: baseline;
        -webkit-tap-highlight-color: transparent;
        -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
        tap-highlight-color: transparent;
        box-sizing: border-box;
      }
      article,
      aside,
      details,
      figcaption,
      figure,
      footer,
      header,
      hgroup,
      menu,
      nav,
      section {
        display: block;
      }
      html {
        font-family: Arial, PingFang SC, -apple-system, BlinkMacSystemFont,
          Segoe UI, Hiragino Sans GB, Microsoft YaHei, Helvetica Neue, Helvetica,
          sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;
      }
      ol,
      ul {
        list-style: none;
      }
      blockquote,
      q {
        quotes: none;
      }
      blockquote:after,
      blockquote:before,
      q:after,
      q:before {
        content: '';
        content: none;
      }
      #appMain {
        position: relative;
        margin: auto;
        font-size: 0.28rem;
        font-family: PingFangSC-Regular;
        z-index: 1;
        overflow: hidden;
      }
      .bybt-layout {
        min-height: 100vh;
        width: 100%;
        background: #f5f5f5;
        text-align: center;
      }
      .bybt-layout .banner {
        background: url('https://sr.ffquan.cn/dtk_yunying/20210730/c41pb1v6vrk9djn36m000.png')
          no-repeat center top #f52157;
        background-size: 100% auto;
        width: 100%;
        text-align: center;
        padding-top: 2.56rem;
      }
      .goodslist {
        width: 100%;
        padding: 0.24rem 0.25rem 0.1rem;
        margin: 0;
      }
      .goodslist .list {
        width: 100%;
        background: #fff;
        border-radius: 0.08rem;
        overflow: hidden;
        display: flex;
        margin-bottom: 0.25rem;
      }
      .goodslist .list .pic {
        width: 2.72rem;
        height: 2.72rem;
      }
      .goodslist .list .pic img {
        width: 100%;
        display: block;
      }
      .goodslist .list .center {
        width: calc(100% - 2.89rem);
        position: relative;
        z-index: 0;
        margin-left: 0.17rem;
        padding-top: 0.18rem;
        text-align: left;
      }
      .goodslist .list .center h4 {
        height: 0.37rem;
        text-overflow: ellipsis;
        overflow: hidden;
        white-space: nowrap;
        font-size: 0.26rem;
        font-family: PingFangSC-Regular, PingFang SC;
        font-weight: 400;
        color: #17233d;
        line-height: 0.37rem;
        margin-bottom: 0.16rem;
      }
      .goodslist .list .center h4 img {
        width: 0.24rem;
        height: 0.24rem;
        position: relative;
        top: 0.02rem;
        margin-right: 0.1rem;
      }
      .goodslist .list .center .tag {
        height: 0.32rem;
        margin-bottom: 0.24rem;
        text-overflow: ellipsis;
        overflow: hidden;
        white-space: nowrap;
      }
      .goodslist .list .center .tag span {
        height: 0.3rem;
        display: inline-block;
        padding: 0 0.1rem;
        background: #fff2ed;
        border: 1px solid #ffccba;
        border-radius: 0.03rem;
        font-family: PingFangSC-Regular;
        font-size: 0.24rem;
        color: #ff4400;
        letter-spacing: 0;
        line-height: 0.32rem;
        text-align: center;
        margin-right: 0.1rem;
      }
      .goodslist .list .center .tag img {
        height: 0.3rem;
        display: inline-block;
        margin-right: 0.1rem;
      }
      .goodslist .list .center .coupon {
        height: 0.33rem;
        display: flex;
        justify-content: flex-start;
        align-items: center;
      }
      .goodslist .list .center .coupon span {
        /* width: 0.94rem;
        height: 0.32rem; */
        /* width: 1.45rem; */
        display: block;
        float: left;
        /* padding-left: 0.3rem; */
        font-family: PingFangSC-Regular;
        font-size: 0.24rem;
        color: #333;
        letter-spacing: 0;
        line-height: 0.32rem;
        text-align: center;
      }
      .goodslist .list .center .coupon .border {
        width: 0.02rem;
        height: 0.24rem;
        float: left;
        margin: 0 0.24rem;
        background: #d8d8d8;
      }
      .goodslist .list .center .btns {
        position: absolute;
        bottom: 0.22rem;
        left: 0;
        z-index: 10;
        width: 100%;
        display: flex;
        justify-content: space-between;
        align-items: flex-end;
      }
      .goodslist .list .center .btns .sales {
        color: #17233d;
        font-size: 0.24rem;
        line-height: 0.33rem;
        padding-top: 0.11rem;
      }
      .goodslist .list .center .btns .sales span {
        color: #808695;
      }
      .goodslist .list .center .btns .ml {
        color: #ff4443;
        font-size: 0.26rem;
        line-height: 0.37rem;
        padding-top: 0.21rem;
        white-space: nowrap;
      }
      .goodslist .list .center .btns .ml b {
        margin-left: 0.04rem;
        font-size: 0.4rem;
        font-family: Arial-BoldMT;
      }
      .goodslist .list .center .btns .ml small {
        font-size: 0.22rem;
        font-family: PingFangSC-Semibold;
      }
      .goodslist .list .center .btns .go {
        width: 1.45rem;
        height: 0.66rem;
        line-height: 0.66rem;
        background: #ffd676;
        border-radius: 1rem 0px 0px 1rem;
        color: #8f2121;
        font-size: 0.28rem;
        font-weight: bold;
        font-family: PingFangSC-Medium;
        text-align: left;
        text-indent: 0.28rem;
      }
      .loading {
        line-height: 1rem;
        text-align: center;
        font-size: 0.3rem;
        color: #999;
      }
      .sys {
        width: 100%;
        height: 100vh;
        position: fixed;
        z-index: 9999999;
        background: rgba(0, 0, 0, 0.6)
          url('https://sr.ffquan.cn/dtk_yunying/20210803/c44albf6vrkd4bd59itg0.png')
          center center no-repeat;
        background-size: 2.4rem auto;
      }
      #shareID {
        position: fixed;
        left: 0;
        bottom: 0;
        z-index: 500;
        background: transparent;
        padding: 0.13rem 0;
        width: 100%;
      }
      #shareID a {
        display: block;
        height: 0.8rem;
        margin: 0 0.56rem;
        box-sizing: content-box;
        border: 0.06rem solid #ffffff;
        border-radius: 0.43rem;
        line-height: 0.8rem;
        background: #ff6a37;
        text-align: center;
        color: #ffeddf;
        font-size: 0.32rem;
        font-family: PingFangSC-Semibold;
      }
      .back_home {
        width: 30px;
        height: 30px;
        position: fixed;
        right: 0.3rem;
        bottom: 1.2rem;
        border-radius: 50%;
        background: rgba(0, 0, 0, 0.5);
        display: flex;
        align-items: center;
        justify-content: center;
      }
      .back_home img {
        width: 15px;
        height: 15px;
      }
    </style>
  </head>
  <body>
    <script
      type="text/javascript"
      src="https://public.ffquan.cn/lib/taobaoCode/taobaoCode.js?v=1.3.2"
    ></script>
    <div id="appMain">
      <div v-if="sys == null" class="sys"></div>
      <div class="bybt-layout">
        <div class="banner"></div>
        <div class="goodslist">
          <div
            v-for="(item, index) in goodsList1"
            :key="index"
            class="list"
            :id="'goodsList'+index"
          >
            <div class="pic"><img :src="imgFomate(item.pictUrl)" /></div>
            <div class="center">
              <h4>
                <img
                  src="https://sr.ffquan.cn/dtk_yunying/20210730/c41pb7v6vrk9djn36m0g0.png"
                  alt=""
                />{{item.title}}
              </h4>
              <div class="tag">
                <img
                  v-for="(item_tag, index) in item.bybtInfo.bybtItemTags"
                  :src="item_tag"
                  alt=""
                />
              </div>
              <div class="coupon">
                <span>已补贴{{item.bybtInfo.bybtCouponAmount || 0}}元</span>
                <div class="border"></div>
                <span
                  >已售{{digitalAbbNumber({ num: item.volume, unit:
                  '万'})}}ä»¶</span
                >
              </div>
              <div class="btns">
                <div>
                  <div class="ml">
                    è¡¥è´´æŠ¢è´­ä»· Â¥<b
                      >{{item.bybtInfo.bybtShowPrice.split('.')[0]}}</b
                    ><small v-if="item.bybtInfo.bybtShowPrice.split('.')[1]"
                      >.{{item.bybtInfo.bybtShowPrice.split('.')[1]}}</small
                    >
                  </div>
                </div>
                <div class="go">去抢购</div>
              </div>
            </div>
          </div>
        </div>
      </div>
      <div class="share" id="shareID"><a>立即分享</a></div>
      <div ref="reference" class="loading">加载中...</div>
      <div class="back_home" v-if="scrollTop>=230" @click="back_home">
        <img
          src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADEAAAAwCAYAAAC4wJK5AAACs0lEQVRoQ+3ZTYhOURzH8e9vYWFnqcTGQsnaxmJY2WFD3kkk8pKXRFIGpSkJk5KSlBRjIkqkiNSUUoqNTCmhFClJKfXT0X007pznuc9zn3Onmeme3XNfzvl/7jnn/s+5j5gERZPAwF+E7R3AOmB+hno8jnGLgLfAoKRDIU7ZPgYcGcdBtwrtjqSlAfETmDpBESHsBQFxBtg9QRFPJfU05sRxYAMwcwTmzTiEzcli+gHcBPZL+lrZ28n2UaAHWAj0Sgq/KymVIJq8LAYkrahCkRxh+wRwuEmwlUCSImyfBA4WPO3kkGQI233AgTaHS1JIEoTtU8C+NgGNy5JBukbYPg3s6RCQFNIVwvZZYFcE8BqYlzs+ACyPXNt1j5RG2O4HwsIxX15mPZNfRPYCc6uAlELYPg9sjwBeAGuB6cAoREh4tm+khnSMsH0B2BoBPAfWSBq2HbJ0FBHuSw3pCGH7IrAlAhjKAO+yIFsiUkPaRti+BGyKAJ5lgPeNc0U9MeK6JEOrLYTty8DGCOBJBvg48ly7iFQ9UoiwfQVYHwE8AlZL+pw/1wkiBaQlwvbV8KQjgIcZ4EssyXWK6BbSFGH7GrAqEuSDcFzSt2ZZugyiG0gUYfs6EFv738sA31stM8oiykJGIWzvBM5FgrwLrJQUPiy0LN0gCiDRHWIMcQtYlovydgb4VQRoN08U1dMkIX6SNCN/bwyR3xcMZoDfRQ13mieK6otA+iWNWnDGELOy3dk2IHxh65PkogbL5omiem3vBcIQfyVpSez6wjxR1EiqV2yZdhr31IjUeaJsb9Q9UfdE2bETua8eTvVwqofT/0+gnhP1nKjnxNjMidnAcO5hb5YUvl0lL5VM7Gx3dx9Y/G+5LFXWVmUV256W/XM6BRiS9CF5F2QVVoaoKuAx29mNJSC09QfRuW93lvvKnQAAAABJRU5ErkJggg=="
          alt=""
        />
      </div>
    </div>
  </body>
</html>
<script>
  (function () {
    var size =
      document.body.clientWidth || document.documentElement.clientWidth;
    document.documentElement.style.fontSize =
      (size > 750 ? 750 : size) / 7.5 + 'px';
  })();
  Vue.use(VueLazyload, {
    preLoad: 1.3, //
    error: 'https://sr.ffquan.cn/cms_pic/20200622/bro7s7f6vrkd3jat4ujg0.png',
    loading: 'https://sr.ffquan.cn/cms_pic/20200612/brhjkf76vrkcrfpi79eg0.png',
    attempt: 1,
  });
  new Vue({
    el: '#appMain',
    data: {
      sys: false,
      time: '',
      goodsList1: [],
      loading: false,
      linkKZL: '',
      scrollTop: 0,
      canScroll: false,
      loadData: false,
      nowPage: 1,
    },
    methods: {
      isStart(item) {
        if (this.getTime(item.activityStartTime) >= new Date()) {
          layer.msg('抢购暂未开始');
          return false;
        }
      },
      back_home() {
        $(document).scrollTop(0);
      },
      digitalAbbNumber: function ({ num = 0, unit }) {
        var param = {};
        var k = 10000,
          sizes = ['', '万', '亿', '万亿'],
          i;
        if (num < k) {
          return num;
        } else {
          i = Math.floor(Math.log(num) / Math.log(k));
          param.value = parseFloat((num / Math.pow(k, i)).toFixed(1));
          param.unit = sizes[i];
        }
        return param.value + (unit || param.unit);
      },
      getTime: function (time) {
        var newTime = new Date(time.replace(/-/g, '/'));
        return newTime;
      },
      handleClipboard: function (event, res, isGoods, text) {
        var _this = this;
        // console.log(event, res, isGoods, text);
        if (event.getAttribute('isCopy')) {
          return false;
        }
        event.setAttribute('isCopy', true);
        // @ts-ignore
        var clipboardImg = new window.ClipboardJS(event, {
          text: function (trigger)  {
            return text || _this.handleChange(res, isGoods);
          },
        });
        clipboardImg.on('success', function (e) {
          layer.msg(
            text ? '复制成功,快分享给小伙伴吧~' : '口令复制成功,打开手淘抢购'
          );
          e.clearSelection();
        });
        clipboardImg.on('error', function (e) {
          layer.msg('口令复制失败,请联系推择者');
        });
      },
      // æ´»åŠ¨ä¸“é“¾æŽ¥
      handleChange: function (res, isGoods) {
        // æ™®é€šå•†å“è½¬è¿žé€»è¾‘
        var _this = this;
        var result = '';
        $.ajax({
          url:'https://dtkapi.ffquan.cn/dtk_go_app_api/api/tb/activity/promote/bybt/tkl',
          // url: 'https://dtkapi.buydance.com/dtk_java_views_api/api/tb/activity/promote/bybt/tkl',
          type: 'get',
          data: {
            itemId: res.itemId,
            appKey: _config.appKey,
          },
          async: false,
        }).done(function (res) {
          // const {
          //   code,
          //   msg,
          //   data: { longTpwd },
          // } = res;
          var code = res.code ;
          var msg = res.msg;
          var longTpwd = res.data.longTpwd;
          if (code == 200) {
            result = longTpwd;
          } else {
            layer.msg(msg);
          }
        });
        return result;
      },
      getGoodsList: function (page) {
        var _this = this;
        page = page || 1;
        $.ajax({
          url:'https://dtkapi.ffquan.cn/dtk_java_views_api/api/tb/activity/promote/bybt',
          // url: 'https://dtkapi.buydance.com/dtk_java_views_api/api/tb/activity/promote/bybt',
          type: 'get',
          data: {
            pageId: page,
            pageSize: 20,
            appKey: _config.appKey,
          },
        }).done(function (res) {
          // var {
          //   code,
          //   data: { kzWebsite, list, pageId, sys },
          // } = res;
          var code = res.code ;
          var kzWebsite = res.data.kzWebsite;
          var list = res.data.list;
          var pageId = res.data.pageId;
          var sys = res.data.sys;
          if (code != 200) {
            _this.sys = null;
            return;
          }
          _this.time = res.time;
          _this.sys = sys || null;
          _this.linkKZ = kzWebsite;
          if (_this.loadData == true) {
            res.data
              ? (_this.goodsList1 = _this.goodsList1.concat(res.data.list))
              : '';
          } else {
            res.data ? (_this.goodsList1 = res.data.list) : '';
          }
          _this.loadData = false;
          if (res.data && res.data.list.length != 0) {
            _this.canScroll = true;
          }
          setTimeout(function () {
            for (var i = 0; i < _this.goodsList1.length; i++) {
              _this.handleClipboard(
                document.getElementById('goodsList' + i),
                _this.goodsList1[i],
                true
              );
            }
            if (code == 200) {
              $.ajax({
                url: 'https://dtkapi.ffquan.cn/taobaoapi/kz-create-short',
                // url: 'http://dtkapi.buydance.com/taobaoapi/kz-create-short',
                type: 'get',
                data: {
                  url: _this.linkKZ + '#/bybt?app_key='+_config.appKey,
                },
              }).done(function (res) {
                _this.handleClipboard(
                  document.getElementById('shareID'),
                  {},
                  false,
                  '聚划算发补贴福利了,大牌正品,买贵必陪,小伙伴们快来抢购吧~'+res.data
                );
              });
            }
          }, 500);
        });
      },
      scrollLoad: function () {
        //
        var _this = this;
        var range = 70; //距下边界长度/单位px
        var totalheight = 0;
        $(window).scroll(function () {
          var srollPos = $(window).scrollTop(); //滚动条距顶部距离(页面超出窗口的高度)
          totalheight = parseFloat($(window).height()) + parseFloat(srollPos);
          if ($(document).height() - range <= totalheight) {
            if (_this.canScroll) {
              _this.nowPage++;
              _this.canScroll = false;
              _this.loadData = true;
              _this.getGoodsList(_this.nowPage);
            }
          }
        });
      },
      imgFomate: function (img) {
        if (img.indexOf('http') != '-1') {
          return img;
        } else {
          return 'https:' + img;
        }
      },
    },
    mounted: function () {
      var _this = this;
      _this.getGoodsList();
      _this.scrollLoad();
      window.onscroll = function () {
        _this.scrollTop =
          document.documentElement.scrollTop || document.body.scrollTop;
      };
    },
  });
</script>
public/html/fengqiangbang.html
@@ -345,7 +345,10 @@
<script>
    (function(){
        var size = (document.body.clientWidth || document.documentElement.clientWidth);
        var size1=document.body.clientWidth;
        var size2=document.documentElement.clientWidth;
        var size=size1<=0?size2:size1;
        size=size<=0?400:size;
        document.documentElement.style.fontSize = (size > 750 ? 750 : size) / 7.5 + 'px';
    })();
public/html/freebuy.html
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,413 @@
<!--
 * @Author: your name
 * @Date: 2021-02-26 14:25:42
 * @LastEditTime: 2021-10-20 16:31:36
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: /www/dtk_static_www_user_center/html/单页html/首页.html
-->
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="App-Config" content="fullscreen=yes,useHistoryState=yes,transition=yes">
    <meta content="yes" name="apple-mobile-web-app-capable"><meta content="yes" name="apple-touch-fullscreen">
    <meta content="telephone=no,email=no" name="format-detection">
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">
    <script type="text/javascript" src="https://public.ffquan.cn/lib/jquery-1.12.4.min.js"></script>
    <script type="text/javascript" src="https://cdn.staticfile.org/vue/2.6.11/vue.min.js"></script>
    <script type="text/javascript" src="https://public.ffquan.cn/lib/vue-lazyload.js"></script>
    <script type="text/javascript" src="https://public.ffquan.cn/lib/swiper/js/swiper.min.js"></script>
    <script type="text/javascript" src="https://public.ffquan.cn/lib/taobaoCode/taobaoCode.js?v=1.2.1"></script>
    <script type="text/javascript" src="https://public.ffquan.cn/lib/clipboard.min.js"></script>
    <script type="text/javascript" src="https://img.ushopvip.com/js/uni-webview-js.js"></script>
    <title>新人专享</title>
    <script>
        var _config = {
            appKey: 'emkhhs',//此处替换成用户appKey
            // éœ€è¦è‡ªè¡ŒæŽ¥å…¥ç‚¹å‡»å•†å“åŽçš„逻辑 ï¼ˆéžå¿…填)
            // jumpGoodsUrl: function (items) {   // æ›¿æ¢ä¸ºè¯¦ç»†é¡µé¢çš„地址或转链逻辑
            //      window.open('https://xxxx&gid=' + items.goodsid);
            // }
        };
    </script>
    <style>
        a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline;-webkit-tap-highlight-color:transparent;-webkit-tap-highlight-color:rgba(0,0,0,0);tap-highlight-color:transparent;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}html{font-family:Arial,PingFang SC,-apple-system,BlinkMacSystemFont,Segoe UI,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}
        #appMain{
            margin: auto; max-width: 800px; font-size: .28rem; overflow: hidden; position: relative; z-index: 1;
            overflow: hidden;
        }
        #appMain:before {
            content: "";display: block;position: absolute;top: 0;left: -20%;height: 3.88rem;width: 140%;background: linear-gradient(90deg,#fbe7e2,#fbe7e2) no-repeat;background-size: 100%;
            border-radius: 0 0 50% 50%;z-index: -1;
        }
        .h3bt {
            width: 1.66rem;
            height: .7rem;
            background: url('https://sr.ffquan.cn/dtk_www/20210226/c0sbpgn6vrkfhsos6qvg0.png') no-repeat 50%;
            background-size: 100% auto;
            margin: 0 auto .1rem;
        }
        .act_header{
            z-index: 200; width: 100%; background: no-repeat top; background-size: 100% auto;
            display: flex; align-items: center; justify-content: space-between;
            position: fixed;background: linear-gradient(90deg, #fbe7e2 0%, #fbe7e2 100%) 0% 0% / 100%;
             color: #fff;
            max-width: 800px;
        }
        .act_header .centent{
            text-align: center;
        }
        .act_header .centent img{
            width:100%;
        }
        .act_header .share a{
            text-decoration: none;
            position: relative;
            top: -.2rem;
            height: 2em;color: #fff;width: 100%;line-height: 2em;text-align: center;display: block;margin-bottom: 1px;background: rgba(0,0,0,.3);border-radius: 0 0 .1rem .1rem;
        }
        .act_header .share a::before{
            content: ''; background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAMAAADypuvZAAAAdVBMVEUAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////li2ZAAAAAJnRSTlMA+z+lT+K/8lPr5pVEHO91X0s2MwTIsmUmDNmBSS6HbFnR2LSvggRdL7IAAAGQSURBVEjH5ZbZloIwDIa7UBg2QRYFUUdn8f0fcRrsORWCP861/4Wek/QjXdKk4l1UDTo8ROb4OqHS5HaXeRWpwzvgoUsSXb/T4qNuniC5vnm56cU3p83n8sxi59al6npnNP4zS9Rejq5dNplI5qmYM+fR0So+6eriVnpiccgqC7GkD3mHgvl6yB5tAcMXlcfEnJ4zkmaYTh2a7FvABKX9/ZmeKQUvECOU/btOPBS7hYzI53uuKJACjEuN5NGV0pkihhQk8eXRR3mdQYaronxrIMP1a316neGHVGKGK1zauwAz4mDd3cy2XWCO5qFuRNbfzyDDGbIZDHGmp5yG08sMK2GdHfbFNwKLki3kW45VTo5zmB0uOM6BpRFWs7HDKpawWJkdlPCrgbXzRQJfQjaGX3eoljYcFhaugkbUqyWM568WoFhynSg941yAsszjECPZTsEGUEjy7ZkdtBrVjo6zt6w1tSbbjUbp48D22Xeq1BvXAyk+bNRcOl97EjCF9WuPD68kVf955kSHUA+VeBP9AQg5RZhPUvaEAAAAAElFTkSuQmCC) center center no-repeat;
            width: 1.1em;height: 1.1em;display: inline-block;position: relative;top: .15em;margin-right: .4em;
            background-size: 100% auto;
        }
        .act_nav {
            background: linear-gradient(90deg,#ffa033,#ff8030) no-repeat;background-size: 100%;min-height: .7rem;margin-top: 1px;position: fixed;width: 100%;top: .85rem;z-index: 999;
            max-width: 800px;
        }
        .act_nav .swiper-wrapper{white-space: nowrap;display: -webkit-flex;display: flex;}
        .act_nav .tab{
            padding: 0 .2rem;font-weight: 500;font-size: .3rem;color: hsla(0,0%,100%,.6);position: relative;
        }
        .act_nav .tab.active{
            color: #fff;
        }
        .act_nav .tab.active:after {
            height: .04rem;border-radius: .02rem;content: "";overflow: hidden;width: 0;background: #fff;display: block;position: absolute;z-index: 1;zoom: 1;margin: auto;transition: all .3s;left: 0;bottom: -.12rem;right: 0;
            width: 50%;
        }
        .reclassify_swiper{
            margin: .33rem 0 .22rem;padding: 0 .14rem;
        }
        .reclassify_swiper .swiper-wrapper{white-space: nowrap;display: -webkit-flex;display: flex;}
        .reclassify_swiper .reclassify{
            height: .4rem;background: hsla(0,0%,100%,.6);border-radius: .2rem;padding: 0 .24rem;line-height: .4rem;font-size: .26rem;color: #ff7300;margin-right: .2rem;
        }
        .reclassify_swiper .reclassify.active{
            background: #fff;
        }
        .hot_goods{
        }
        .goods_hot .bt{
            height: .42rem;font-size: .3rem;font-family: PingFangSC-Medium,PingFang SC;font-weight: 500;color: #fff;display: -webkit-flex;display: flex;-webkit-justify-content: space-between;justify-content: space-between;-webkit-align-items: center;align-items: center;padding: 0 .14rem 0 .16rem;
        }
        .goods_hot .bt > div:last-child {
            height: .36rem;
            font-size: .26rem;
            font-family: PingFangSC-Regular,PingFang SC;
            font-weight: 400;
            color: #fff;
            display: flex;
        }
        .hot_goods_list{
            white-space: nowrap;display: -webkit-flex;display: flex;padding: 0 .14rem;margin: .24rem 0;
            overflow: hidden; overflow-x: auto;
        }
        .hot_goods_list .listTmp{
            width: 2.2rem;background: #fff;border-radius: .16rem;padding: .1rem;margin-right: .1rem;box-sizing: border-box;
        }
        .hot_goods_list .listTmp .productImg {
            width: 2rem;height: 2rem;border-radius: .1rem;position: relative;margin-bottom: .34rem
        }
        .hot_goods_list .listTmp .productImg img {
            width: 100%; height: 100%
        }
        .hot_goods_list .listTmp .productImg .topMsg {
            padding: 0 .16rem;height: .28rem;line-height: .26rem;background: linear-gradient(90deg,#ffedc9,#ffe3af);font-size: .2rem;color: #cc600e;text-align: center;position: absolute;right: 0;top: 0;border-radius: 0 0 0 .1rem;max-width: 100%;overflow: hidden;white-space: pre-wrap;max-height: .28rem
        }
        .hot_goods_list .listTmp .productImg .scale {
            width: 1.72rem;height: .36rem;background: linear-gradient(270deg,#ffbe50,#ff570c);box-shadow: 0 .04rem .06rem 0 rgba(255,153,67,.33);border-radius: .36rem;text-align: center;position: absolute;bottom: -.18rem;left: 0;right: 0;margin: auto;font-size: .22rem;color: #fff;line-height: .39rem
        }
        .hot_goods_list .listTmp .title {
            width: 100%;height: .32rem;font-size: .22rem;color: #333;line-height: .32rem;overflow: hidden;margin-bottom: .05rem;white-space: pre-wrap;max-height: .32rem
        }
        .hot_goods_list .listTmp .price .juanPrice {
            font-size: .34rem;font-weight: 500;color: #fe3738;font-family: PingFangSC-Medium,PingFang SC
        }
        .hot_goods_list .listTmp .price .originPrice {
            text-decoration: line-through;height: .26rem;font-size: .2rem;font-family: PingFangSC-Regular,PingFang SC;color: #999;line-height: .26rem;margin-left: .05rem
        }
        .hot_goods_list .listTmp .price .currency {
            font-size: .24rem;font-weight: 500;font-family: PingFangSC-Medium,PingFang SC;color: #fe3738;margin: 0 .02rem 0 .06rem
        }
        .list-section{
            display: -webkit-flex;display: flex;-webkit-flex-wrap: wrap;flex-wrap: wrap;-webkit-justify-content: space-between;justify-content: space-between;padding: 0 1.87%;
        }
        .list-section .listTmp{
            width: 49%;background: #fff;border-radius: .08rem;margin-bottom: .14rem;box-sizing: border-box;
        }
        .list-section .listTmp .productImg {
            border-radius: .08rem .08rem 0 0;position: relative
        }
        .list-section .listTmp .productImg img {width: 100%;height: 100%;border-radius: .08rem .08rem 0 0
        }
        .list-section .listTmp .productInfo {padding: .18rem .2rem .2rem;position: relative
        }
        .list-section .listTmp .title {width: 100%;margin-bottom: .16rem;height: .36rem;font-size: .26rem;color: #333;display: -webkit-flex;display: flex;-webkit-align-items: center;align-items: center;font-family: PingFangSC-Regular,PingFang SC;font-weight: 400
        }
        .list-section .listTmp .title span {    overflow: hidden;
     text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
        }
        .list-section .listTmp .price {font-size: .2rem;font-family: PingFangSC-Regular,PingFang SC;font-weight: 400;color: #666
        }
        .list-section .listTmp .price .juanPrice {font-size: .38rem;font-weight: 500;color: #fe3738;font-family: PingFangSC-Medium,PingFang SC
        }
        .list-section .listTmp .price .currency {font-size: .24rem;font-weight: 500;font-family: PingFangSC-Medium,PingFang SC;color: #fe3738;margin: 0 .02rem 0 .06rem
        }
        .list-section .listTmp .labels {margin-top: .05rem;display: -webkit-flex;display: flex;min-height: .24rem
        }
        .list-section .listTmp .scale {font-size: .2rem;color: #888;margin-top: .12rem;display: -webkit-flex;display: flex;-webkit-align-items: center;align-items: center;font-family: PingFangSC-Regular,PingFang SC;font-weight: 400
        }
        .list-section .listTmp .scale .divider {width: .02rem;height: .18rem;background: #b3b3b3;margin: 0 .06rem
        }
        .list-section .listTmp .scale span:last-child {max-width: 2rem;overflow: hidden;text-overflow: ellipsis;white-space: nowrap
        }
        .list-section .listTmp .label {
            margin-top: .05rem;display: -webkit-flex;display: flex;min-height: .24rem
        }
        .list-section .listTmp .tag{
            font-size: .19rem;color: #ff6305;border-radius: .04rem;border: 1px solid #f57224;padding: 0 .08rem;height: .24rem;display: -webkit-flex;display: flex;-webkit-align-items: center;align-items: center
        }
        .list-section .listTmp .coupon {
            height: .24rem;background: linear-gradient(90deg,#ff8873,#ff4f4f);border-radius: .04rem;display: inline-block;line-height: .24rem;padding: 0 .06rem 0 .02rem;font-size: .19rem;font-family: PingFangSC-Regular,PingFang SC;color: #fff;display: -webkit-flex;display: flex;-webkit-align-items: center;align-items: center;width: -webkit-max-content;width: -moz-max-content;width: max-content
        }
        .list-section .listTmp .coupon span {
            display: inline-block;font-size: .18rem;font-family: PingFangSC-Regular,PingFang SC;font-weight: 400;color: #ff5351;line-height: .19rem;padding: 1px .04rem;background: #fff;border-radius: .02rem 0 0 .02rem;text-align: center;margin-right: .06rem
        }
        .loading{
            line-height: 2rem; text-align: center; font-size: .3rem; color: #999;
        }
        .sys{
            width: 100%;
            height: 100vh;
            position: fixed;
            z-index: 9999999;
            background: rgba(0, 0, 0, 0.6)
            url('https://sr.ffquan.cn/dtk_yunying/20210803/c44albf6vrkd4bd59itg0.png')
            center center no-repeat;
            background-size: 2.4rem auto;
        }
    </style>
</head>
<body >
    <div id="appMain" >
    <header class="act_header">
        <div></div>
        <div class="centent"><img src="https://yanfeiobpub.obs.cn-east-3.myhuaweicloud.com/dfg/xinrengoubanner.png" alt=""></div>
        <div class="share">
            <!-- <a href="">分享</a> -->
        </div>
    </header>
    <div :style="{ height: (twoNav && twoNav.length > 0) ? '2.3rem' : '2.3rem'}"></div>
    <div v-if="loading" v-else class="loading">加载中...</div>
    <div v-else style="min-height: 100vh; background: #fbe7e2;" class=" swiper-container swiper-container-initialized swiper-container-horizontal swiper-container-free-mode swiper-container-ios">
            <div class="swiper-wrapper" style="transform: translate3d(0px, 0px, 0px);">
                <div class="swiper-slide list-section">
                            <div class="listTmp " v-for="(data,key) in lists" :key="key" v-on:click="targetItem(data)">
                                    <div class="productImg">
                                        <img :src="data.mainPic + '_310x310.jpg'" class="fadeIn " height="200" width="200">
                                    </div>
                                    <div class="productInfo">
                                         <div class="title">
                                            <span>{{data.dtitle}}</span>
                                        </div>
                                        <div class="price">
                                            <span>新人专享</span>
                                            <span class="currency">Â¥</span>
                                            <span class="juanPrice">0</span>
                                            <span style="text-decoration: line-through; margin-left:10px">原价¥{{data.originalPrice}}</span>
                                        </div>
                                      <!--   <div class="label">
                                            <span class="tag" v-if="data.labelOne && data.labelOne!='' " style="color: rgb(255, 53, 96); border-color: rgb(255, 1, 55); margin-right: 10px;">{{data.labelOne}}</span>
                                            <div class="coupon">
                                                <span>券</span>{{data.couponPrice}}元
                                            </div>
                                        </div> -->
                                        <div class="scale"><span>{{data.shopName}}</span></div>
                                    </div>
                                </div>
                            </div>
                <!-- <span :class="`reclassify swiper-slide ${item.id == activeTwo ? 'active' :''}`"  v-for="(item,key) in twoNav" :key="item.id" v-on:click="handleSwiperNavTwo(key,item)"  >{{item.title}}</span> -->
            </div>
            <div class="swiper-pagination"></div>
            <span class="swiper-notification" aria-live="assertive" aria-atomic="true"></span>
    </div>
</div>
</body>
</html>
<script src="https://polyfill.io/v2/polyfill.min.js?features=IntersectionObserver"></script>
<script>
    (function(){
        var size1=document.body.clientWidth;
        var size2=document.documentElement.clientWidth;
        var size=size1<=0?size2:size1;
        size=size<=0?400:size;
        document.documentElement.style.fontSize = (size > 750 ? 750 : size) / 7.5 + 'px';
    })();
    Vue.use(VueLazyload, {
        preLoad: 1.3,//
        error: 'https://sr.ffquan.cn/cms_pic/20200622/bro7s7f6vrkd3jat4ujg0.png',
      //  loading: 'https://sr.ffquan.cn/cms_pic/20200612/brhjkf76vrkcrfpi79eg0.png',
        attempt: 1
    })
    new Vue({
        el: '#appMain',
        data: {
            sys:false,
            hotGoodsItem:{
                goodsList:[],
                robbingNum:0,
            },
            goodsItem: [],
            lists:[],
            nav:[],
            active:0,
            twoNav:false,
            activeTwo:undefined,
            loading:true,
            isUniReady:false
        },
        methods: {
            targetItem:function(item){
                uni.navigateTo({
                  url: '/pages/goods/goodsDetail?id=' + item.goodsId+'&frompage=freebuy'
                });
                /* if(this.isUniReady)
                {
                    uni.postMessage({
                      data: {
                         action: 'target_tb',
                         data:item
                      }
                     });
                } */
            },
            getUrlPar:function(name)
            {
                var reg=new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
                 var r=window.location.search.substr(1).match(reg);
                if(r !=null)return unescape(r[2]);
                 return null;
            },
            getGoodsList:function(){
                var _this = this;
                this.loading=true;
                //判断是否首单
                $.ajax({
                    headers:{
                        "token":_this.getUrlPar("token")
                    },
                    //url:'http://dfg.shop.com/index.php/api/user/check_isfirst_free',
                   //url:'http://dfgapp.ushopvip.com/api/user/check_isfirst_free',
                   url:'http://appapitest.ushopvip.com/api/user/check_isfirst_free',
                   type:"post",
                    dataType:"json",
                    data:{
                    }
                }).done(function(res){
                    if(res.msg.info==1)
                    {
                        $.ajax({
                            headers:{
                                "token":_this.getUrlPar("token")
                            },
                                //url:'http://dfg.shop.com/index.php/api/taoke/get_first_free_goods',
                            //url:'http://dfgapp.ushopvip.com/api/taoke/get_first_free_goods',
                            url:'http://appapitest.ushopvip.com/api/taoke/get_first_free_goods',
                            type:"post",
                                dataType:"json",
                            data:{
                                page: 1,
                                pageSize:40,
                            }
                            }).done(function(res){
                            _this.lists=[].concat(_this.lists,res.data.list);
                            _this.loading = false;
                     })
                    }
                    else{
                        alert("您已下过首单,不可再次购买,请浏览其他商品吧~");
                        setTimeout(function(){
                            if(_this.isUniReady)
                            {
                                uni.postMessage({
                                data: {
                                    action: 'back'
                                }
                                });
                           }
                        }, 1000 )
                    }
                })
            },
        },
        mounted: function () {
            this.getGoodsList();
            var that=this;
            document.addEventListener('UniAppJSBridgeReady', function() {
            that.isUniReady=true;
            });
        },
    })
</script>
public/html/fxguid.html
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
<!--
 * @Author: your name
 * @Date: 2021-02-26 14:25:42
 * @LastEditTime: 2021-04-09 16:24:10
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: /www/dtk_static_www_user_center/html/单页html/首页.html
-->
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="App-Config" content="fullscreen=yes,useHistoryState=yes,transition=yes">
    <meta content="yes" name="apple-mobile-web-app-capable"><meta content="yes" name="apple-touch-fullscreen">
    <meta content="telephone=no,email=no" name="format-detection">
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">
</head>
<body style="padding: 20px;">
    <video style="width: 100%;" src="https://yanfeiobpub.obs.cn-east-3.myhuaweicloud.com/dfg/video/yaoqing.mp4" controls="controls">
        æ‚¨çš„æµè§ˆå™¨ä¸æ”¯æŒ video æ ‡ç­¾ã€‚
        </video>
</body>
</html>
public/html/newuse.html
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
<!--
 * @Author: your name
 * @Date: 2021-02-26 14:25:42
 * @LastEditTime: 2021-04-09 16:24:10
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: /www/dtk_static_www_user_center/html/单页html/首页.html
-->
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="App-Config" content="fullscreen=yes,useHistoryState=yes,transition=yes">
    <meta content="yes" name="apple-mobile-web-app-capable"><meta content="yes" name="apple-touch-fullscreen">
    <meta content="telephone=no,email=no" name="format-detection">
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">
</head>
<body style="padding: 20px;">
    <video style="width: 100%;" src="https://yanfeiobpub.obs.cn-east-3.myhuaweicloud.com/dfg/video/ruheshiyong.mp4" controls="controls">
        æ‚¨çš„æµè§ˆå™¨ä¸æ”¯æŒ video æ ‡ç­¾ã€‚
        </video>
</body>
</html>
public/html/tb_minishop.html
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,424 @@
<!DOCTYPE html>
<html>
  <head>
        <title>小样种草机</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
        <link rel="stylesheet" href="https://cdn.staticfile.org/minireset.css/0.0.2/minireset.css">
        <link rel="stylesheet" href="https://at.alicdn.com/t/font_1534407_mj4m6393aya.css">
        <script src="https://cdn.staticfile.org/promise-polyfill/8.2.0/polyfill.min.js"></script>
        <script src="https://cdn.staticfile.org/jquery/2.2.4/jquery.min.js"></script>
        <script src="https://cdn.staticfile.org/vue/3.0.11/vue.global.js"></script>
        <script src="https://cdn.staticfile.org/vant/3.2.4/vant.min.js"></script>
        <script src="https://img.bc.haodanku.com/cms/SpaUtils.min.js"></script>
        <script src="https://img.bc.haodanku.com/cdn/vant-touch-emulator.js"></script>
        <link href="https://cdn.staticfile.org/vant/3.2.4/index.min.css" rel="stylesheet">
        <link rel="stylesheet" href="https://img.bc.haodanku.com/cdn/locss.css">
    <meta name="referrer" content="no-referrer">
    <script src="https://img.bc.haodanku.com/cdn/tsUtils.js"></script>
    <script defer>document.write('<link rel="stylesheet" href="https://img.bc.haodanku.com/cms/tb_minishop.css?t=' + (Date.now() - Date.now() % (60 * 1000 * 30)) + '"/>')</script>
    <script type="text/javascript" src="https://img.ushopvip.com/js/uni-webview-js.js"></script>
  </head>
  <body>
    <template id="c-card">
  <div class="card row _ flex-c">
    <img class="cover" v-lazy="item.itempic" v-if="item.itempic"/>
    <img
      class="cover"
      src="http://img.bc.fqapps.com/fudai13cae4ae6ef16739ed3b100a2ec39e97.gif"
      alt=""
      v-else
    />
    <div class="detail" v-on:click.capture="buy">
      <div class="title">
        <span>{{ item.itemshorttitle || item.itemtitle }}</span>
      </div>
      <div class="shop-name _ flex-c">
        <img class="icon" src="https://img.bc.haodanku.com/cms/1646039788" :alt="item.shop_name"/>
        <span class="value">{{ item.shopname }}</span>
      </div>
      <div class="tags">
        <div class="f_div"><span class="f_fan">返</span>{{item.fanli}}元</div>
        <div v-for="tab in item.new_label" class="tag _ flex-c-c">{{tab}}</div>
      </div>
      <div class="price">
        <div class="end-price">
          <div class="label">抢购价</div>
          <div class="value">ï¿¥<strong>{{ Number(item.itemendprice) }}</strong></div>
        </div>
        <!-- <div class="origin">
          <del>ï¿¥{{ Number(item.itemprice) }}</del>
        </div> -->
      </div>
      <div class="btn-block">
        <div class="_ btn btn-order">
          <span v-on:click.capture="buy">立即下单</span>
        </div>
      </div>
    </div>
  </div>
</template>
    <div id="single-page-app" v-cloak>
      <van-pull-refresh v-model="refreshing" @refresh="reGetListData">
        <van-list class="page-container" v-bind:loading="listData.loading" v-bind:finished="listData.finished" v-on:load="getListData"><!-- åº•部提示 -->
          <template v-slot:finished v-if="listData.list.length"><span class="list-item-loading">-优惠到底啦-</span></template>
          <template v-slot:loading><span class="list-item-loading">数据正在赶来的路上...</span></template>
          <div class="banner-wrapper" ref="bannerRef"><img class="free-banner" v-bind:src="banner" alt=""></div>
          <van-sticky class="fixed-box">
            <van-search v-model="searchValue" show-action placeholder="请输入搜索关键词/链接" @search="onSearch" @clear="onSearchClear">
              <template v-slot:action>
                <div class="_ flex-c-c" @click="onSearch">搜索</div>
              </template>
            </van-search>
          </van-sticky>
          <div class="page-content" ref="list" v-bind:class="{'empty-list':!listData.list.length}">
            <div class="lists" ref="listsRef" v-if="listData.list.length || listData.finished">
              <card v-for="(item, index) in listData.list" v-bind:item="item" v-bind:key="item.itemid" v-on:transfer="handleGoodsTransfer"></card>
            </div>
            <div class="empty" v-show="!listData.list.length &amp;&amp; !loading">
              <div class="empty-box"><img src="http://img.bc.haodanku.com/cms/1627883509">
                <div class="text">暂无数据~</div>
              </div>
            </div>
          </div>
        </van-list>
      </van-pull-refresh>
      <div class="back-top-wrap max-width" v-movable>
        <div class="_ btn back-top" v-on:click="backTop" v-bind:class="{hide: scrollTop &lt; 600}"></div>
      </div>
      <share v-on:share="handleShare" v-bind:class="{hide:isScrollToDown}"></share>
      <van-overlay v-bind:show="loading">
        <van-loading color="#0094ff"></van-loading>
      </van-overlay>
    </div>
    <script>
      function useBase() {
  const listDataStr = JSON.stringify({
    list: [],
    loading: false,
    finished: false,
    min_id: 1,
    pageTotal: 1,
    pageCurrent: 0
  });
  const scrollTop = Vue.ref(0);
  const listData = Vue.reactive(JSON.parse(listDataStr));
  // æ ¹æ®å¾®ä¿¡æµè§ˆå™¨ç¼©æ”¾æ¯”例设置rem缩放
  if(SpaUtils.inWechat() && "ontouchstart" in window) {
    const scale = SpaUtils.getFontScale(true);
    document.documentElement.style.fontSize =
      "calc(13.33333vw * " + scale + ")";
  }
  return {
    listDataStr,
    data: {
      scrollTop,
      listData
    },
    useScrollEndMounted(onScrollEnd, onNotScrollEnd) {
      Vue.onMounted(function() {
        window.addEventListener("scroll", function(ev) {
          scrollTop.value = document.documentElement.scrollTop || document.body.scrollTop;
          if(SpaUtils.isScrollEnd(this, "vertical", 40)) {
            onScrollEnd && onScrollEnd();
          } else {
            onNotScrollEnd && onNotScrollEnd();
          }
        });
      });
    },
    methods: {
      onScrollEnd() {
        this.getListData();
      },
      handleShare() {
        SpaUtils.copy(location.href, "复制成功,分享给身边好友吧~");
      },
      resetListData(isCleanList = true) {
        Object.assign(
          listData,
          JSON.parse(listDataStr),
          isCleanList ? undefined : {list: listData.list}
        );
      }
    }
  };
}function getComponents() {
  const Card = Vue.defineComponent({
    template: "#c-card",
    props: {
      item: Object
    },
    emits: ["transfer"],
    setup(props, ctx) {
      return {
        buy(e, type = "buy") {
          uni.navigateTo({
                  url: '/pages/goods/goodsDetail?id=' + props.item.itemid
                });
          //ctx.emit("transfer", {e, item: props.item, type});
        },
        getMoneyStr: SpaUtils.numWan
      };
    }
  });
  const Share = Vue.defineComponent({
    template: "#c-share",
    emits: ["show-directer"],
    setup(props, ctx) {
      return {
        handleShare() {
          ctx.emit("share");
        },
        showDirecter() {
          ctx.emit("show-directer");
        }
      };
    }
  });
  return {card: Card, share: Share};
}
    </script>
    <script>window.onload = function() {
  const stamp = Date.now() - (Date.now() % (60 * 1000 * 30));
  const app = Vue.createApp({
    name: "App",
    directives: {
      movable: SpaUtils.movable
    },
    components: getComponents(),
    setup() {
      const {
        data: baseData,
        methods: baseMethods,
        useScrollEndMounted
      } = useBase();
      const customParams = useCustomParams();
      const data = {
        ...baseData,
        banner: "https://img.bc.haodanku.com/cms/1646037895?t=" + stamp,
        top: 0,
        loading: Vue.ref(false),
        refreshing: Vue.ref(false),
        isScrollToDown: Vue.ref(false),
        searchValue: Vue.ref(""),
        isload:false,
        ...customParams
      };
      const methods = {
        ...baseMethods,
        backTop() {
          $("html,body").animate({scrollTop: 0});
        },
        backTopAndReGetListData() {
          methods.resetListData(false);
          methods.backTop();
          return methods.getListData(true);
        },
        reGetListData() {
          methods.resetListData(false);
          return methods.getListData(true);
        },
        onSearchClear() {
          data.searchValue.value = "";
          methods.backTopAndReGetListData();
        },
        onSearch() {
          methods.backTopAndReGetListData();
        },
        getUrlPar(name)
            {
                var reg=new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
                 var r=window.location.search.substr(1).match(reg);
                if(r !=null)return unescape(r[2]);
                 return null;
            },
        async getListData(clean) {
          const loading = data.loading;
          const listData = data.listData;
          if(data.isload,loading.value || listData.loading || listData.finished)
          {
            return Promise.reject();
          }
          data.isload=true;
          listData.loading = true;
          if(clean) {
            loading.value = true;
          }
          try {
            const min_size = 10;
            const param = {
              ...customParams.getListDataParams(),
              keyword: data.searchValue.value,
              min_id: data.listData.min_id,
              back: min_size
            };
           /*  const url = "https://v2.api.haodanku.com/makeup_items";
            const res = await SpaUtils.Request.get(url, param).promise; */
            /*请求app*/
            $.ajax({
                    headers:{
                        "token":methods.getUrlPar("token")
                    },
                   // url:'http://dfgapp.ushopvip.com/api/Activity/xy_goods_list',
                   url:'http://appapitest.ushopvip.com/api/Activity/xy_goods_list',
                   //url:'http://dfg.shop.com/index.php/api/Activity/xy_goods_list',
                    type:"post",
                    dataType:"json",
                    data:param,
                    success: function success(res) {
                      data.isload=false;
                      listData.loading = false;
                      loading.value = false;
                      data.refreshing.value = false;
                      const list = res.data.data || [];
                      listData.list = clean ? list : listData.list.concat(list);
                        listData.finished =
                          listData.min_id == res.data.min_id ||
                          !list.length ||
                          list.length < min_size;
                        listData.min_id = res.data.min_id || listData.min_id;
                      return res.data;
                    },
                    error: function error(e) {
                      data.isload=false;
                    }
                })
           /*请求app end*/
          } catch(e) {
            listData.list = [];
            listData.finished = true;
          } finally {
           /*  setTimeout(() => {
              listData.loading = false;
              loading.value = false;
              data.refreshing.value = false;
            }, 200); */
          }
        },
        /**
         * å•†å“è½¬é“¾
         * @param e {MouseEvent}
         * @param item
         */
        async handleGoodsTransfer({e, item}) {
          const param = {
            itemid: item.itemid,
            title: item.itemshorttitle || item.itemtitle,
            get_taoword: 1,
            ...customParams.getTransferParams()
          };
          const loading = data.loading;
          loading.value = true;
          try {
            const transferUrl = SpaUtils.addProtocol("v2.api.haodanku.com/ratesurl");
            const params = {
              platformType: "tb",
              itemData: item,
              url: customParams.getTransferUrl ? customParams.getTransferUrl() : transferUrl,
              el: e.target,
              data: param,
              copySuccessMsg: "复制口令成功,请打开淘宝领取",
              requestCB(res) {
              },
              getCopyTarget(res) {
                if(typeof res.data === "object") {
                  return "0" + res.data.taoword + "/";
                }
                return res.data;
              }
            };
            const utils = window.SdkUtils || window.SpaUtils;
            await utils.conversionLink(params);
          } catch(e) {
            SpaUtils.toast(e.msg || "转链失败");
          } finally {
            setTimeout(function() {
              loading.value = false;
            }, 200);
          }
        }
      };
      function init() {
        useScrollEndMounted();
        Vue.watch(baseData.scrollTop, (n, o) => {
          data.isScrollToDown.value = n > o;
        });
      }
      init();
      return {...data, ...methods};
    }
  });
  app.use(vant);
  app.use(vant.Lazyload, {
    lazyComponent: true,
    preLoad: 1.3,
    error: "http://img.bc.haodanku.com/haodanku/1595237918",
    loading:
      "http://img.bc.fqapps.com/fudai13cae4ae6ef16739ed3b100a2ec39e97.gif",
    attempt: 1
  });
  app.mount("#single-page-app");
};
    </script>
    <script>
      function useCustomParams() {
        const customParams = {
          apikey: "0F92EBA7AADA", //必填
          pid: "mm_4091757048_2894550400_114860500173", //必填
          tb_name: "tb108547775155", //必填
          relation_id: "", //选填
        }
        return {
          customParams,
          // èŽ·å–åˆ—è¡¨æ•°æ®å‚æ•°
          getListDataParams() {
            return {apikey: customParams.apikey}
          },
          // è½¬é“¾å‚æ•°
          getTransferParams(item) {
            return {...customParams};
          }
        }
      }
    </script>
  </body>
</html>
<style>
  .f_div
  {
    background: #A429F3;
    border-radius: 0.04rem;
    color: #fff;
    padding: 0 0.06rem 0 0.02rem;
    align-items: center;
    display: inline-block;
    margin: .05rem;
  }
  .f_fan
  {
    background: #fff;
    display: inline-block;
    color: #A429F3;
    padding: 0 0.04rem;
    text-align: center;
    border-radius: 0.02rem 0 0 0.02rem;
    margin-right: 0.06rem;
  }
</style>
public/html/zsz_act.html
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,734 @@
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="App-Config" content="fullscreen=yes,useHistoryState=yes,transition=yes">
    <meta content="yes" name="apple-mobile-web-app-capable">
    <meta content="yes" name="apple-touch-fullscreen">
    <meta content="telephone=no,email=no" name="format-detection">
    <meta name="viewport"
          content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">
    <script type="text/javascript" src="https://public.ffquan.cn/lib/jquery-1.12.4.min.js"></script>
    <script type="text/javascript" src="https://cdn.staticfile.org/vue/2.6.11/vue.min.js"></script>
    <script type="text/javascript" src="https://public.ffquan.cn/lib/vue-lazyload.js"></script>
    <script type="text/javascript" src="https://public.ffquan.cn/lib/swiper/js/swiper.min.js"></script>
    <script type="text/javascript" src="https://public.ffquan.cn/lib/taobaoCode/taobaoCode.js?v=1.2.1"></script>
    <script type="text/javascript" src="https://public.ffquan.cn/lib/clipboard.min.js"></script>
    <script type="text/javascript" src="https://img.ushopvip.com/js/uni-webview-js.js"></script>
    <title>折上折</title>
    <script>
        var _config = {
            appKey: 'zsccir',//此处替换成用户appKey
            // éœ€è¦è‡ªè¡ŒæŽ¥å…¥ç‚¹å‡»å•†å“åŽçš„逻辑 ï¼ˆéžå¿…填)
             jumpGoodsUrl: function (items) {   // æ›¿æ¢ä¸ºè¯¦ç»†é¡µé¢çš„地址或转链逻辑
                uni.navigateTo({
                  url: '/pages/goods/goodsDetail?id=' + items.goodsid
                });
             }
        };
    </script>
</head>
<body>
<div id="appMain">
    <div v-if="sys == null" class="sys"></div>
  <!--   <div class="loading" v-if="loading">
        <span>加载中...</span>
    </div> -->
    <div class="title">
        <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAL4AAAAkCAYAAAA3iYC4AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAvqADAAQAAAABAAAAJAAAAAC1/24wAAAP7UlEQVR4Ae2dCZBU1RWG7+ueYYBCggwIokBEXIixMFiJGoOSVIJLuSYuMUrcjYhaWgZEBRkQBBNRE1eCGEUrKkaMpdGgqRJiablEXGOiEbEMLsAMDovM0svN97/u1/P6TfdMT/frYQY4VWfudu6555573rnLu/3GMSWAtTZC9UGgTbNxCDc6jrM1nQ4loJ2BMKoAvXZC4dsOE/Wlnr40tENn7PqZNaYyOtXEk03GMRGkXGsiPQ52+k/d2F7dYsrRB2I5JesCPrvS/mvgSJ8cd8F7ki8detSun32midg/GGvjhsYIG01F5TFOv2veCL0xGMpOaSbp5y1jKgpgNpiK88HDQW8QZCxrKLuKhl4lXjLASzI+Co4AvXZK5lsAA/XlKvDxdmkdp8pURatMIlllolRrtg0m2qj6oQK62BOGF4OjiV+AjteG2kBnMXOSlTiK3iaWMLgJYxK2ysRjRdtiPrHRkR7sM8GTiU9BX5kHq6jGYDIWZneB3waDMJyMZ6GZTEOLgoVFpGVA4insbOhbcIN6JD3Eh+Wqh072I1+66yhgIWYfcAIo4xcsht/p6Lg+lexmfz1duSGzVw43Qf80059YRM/k3VX3LNCz0YfgdyL6+lD8OmT4VJR4l4BzwV3AfKAnbSH0YwivpbFSp/x4vobKnJ81PYbQ1jh43BMCH7EYDy5AxxPQb3NIPLsam5EItDAkofaHz6Po6yj0ta5gw6dCNRV/A54XEETP7O/Bj8DZ4DdAgfeQHEjdS2jsvVR2KH8/hcvroXBqYaL+HQFq8i0XhPkAv4SQj4E5Z5dydaCT+YbpeP6N7PeC7p6tIMPHcA+mwp3gIaAfNM1OxagXKBM6Gbc8mqZ0DzS1P0fZFdAt8TJLDJfD6+wSeWRVRz7NTi+DVVkFBSVsa+NLmjAHzS+F1qm3gEvRQaO/oNvEozl1Uy59rUIvd4APoK+vPB21a/gYhAzsZnCAVykd6gm6GGb/8PKJL4deU7AaOt7LJ9wd1BrrIMLZ0JV66tOu3L62C432LITQ2gWVZtMXLcs8GXjC9M7yu3TQRKPVtn5u1Gzh5Ksq2uwMvHpzDv5aomjp+DFYyEwTg24l7LcQdguwS06NmvFj+hqnKbWKl76s06I/9UIlju1nv6rpZyJ9IybRnGjjRKwG6uVgITagh+l99NXqECBvZYxUG7tZ4GVgcFCeJO9SGK4hzALyPqXuqWTOBK8CvTYqiV8DHkT5JOhWE+9+UPflEahjEcdwmuI0aEni/U1jehWTUB7puF1hHI4t+lY4JhZbTkfPSSQMz0NWlzUwL6ILd8OVVbK9JH4yZignNs8aJ9oroy/ZlkUZgiT6Mk4PHoYHOBXjOLgBjSZX2/+OPDoWM7ZSVpMNevBXZGd1POUZZVZNDHMUGTq1GZdVYIw8jtb5s2g874aKsiZopsLnbcLbwN1AD44h8jxll0H3rJfZbcIIx3ARTpg8w5fgGjx3ANO9sDZqKiJD3VQlPiOWHJIuyRX0yJW53eRF4pW4hhHoA+OWkQMK5SAywKFJNLI7D4cxrr4SSVMR1zyQC1o/Crmo2skLenJksj+jzvPguEDdL0mfibFO8xs99N8AbwV/GqDHNpyHyTsWXBko25v0E9TRw5Hz4QvQd52kk4hwBs0A+TASGCMlK1CtR2OT3auPoWqbLZN1dG7foo9IK7PL1peTWSWEKomfWWZAMMBeFFwHXg1m8tPErxJqPf9WOu0G1NEmVhvbI8FzSMegecotTP8h/Qb5R5OU5/+Fr0ybyLngdyi/ErrPfWVdNxqPfmYSsaUZj+84Cbz9aAx9X6ZqLX3w/sx4jfHniDVTRk7kza7boY5JxlhVU2MQ4/V+QTWjZrOJm0dMQ6zK9fTSl7UjTMQ52J0lpS/LnNAUZ2no1DI78oTYL0xddaLymwW1UBSRa+B0Zi9qa0Mq7xyE+8nQm9gN/gLqHEBaM4M2roJ+oF6q6Fz5aTcn/Yf0evJ/SfI9cDqoh8yD04iMonwidDqi69LgDJz2TwTUrJgBWztrDhvYa81WDF/e35p6U93rDMeZ/HWGiEhgfe8V5V0yegRdJWSMdFT9IPg94pczXn9qTzanzxStFPwOz9jamRNQxmKTZJ2vJWPSagk92Rkw/Q0/P1ZEeiyCINqSoYIOaBDng8MD3HRyMAO8lQ76F2Qe2RoiMnwZtAcy/gfheR7hk9TDElJAXLuZuZS9S6ij0WGpEvfvgfxdRtlkwnvytOcj73LR7LlbL/q+SgRnzVxCq95h9Ft7oFyDnKuOl6e669FVYZ7Xq1VkiIwy+sWg9mgCjbPGbS4ybHJzCv6jxXwAnEjrvABJOqnrGjqW7Ki+RC9H9DbyxjU4MvDgefAq8uSBZdg5gbKNCHARhTLoc31EMv4rwL+Dm335bpR6T1PvIxJaIh3hK28gvoXyXA+Zj6ywKG1UwUub7G0DTkF3dbSx1UuVYvv8FHXluMoK6FInfPeDJ/ga0oN3Mfgw+I4vv8hoslBDrqEB2Vyh9H55PiAxFqzXrbVlRH4EPg4KZLB6rZvX6F0q/qQNayLRP3p5hEvBsyhrZfQeDWX/IX48qJddgpWg2tQ0WjIwUPvDxD05KplZ+RnI+eikolgsq4TociAN3A+eFGiojvRpjFkIRh/g3HZSM4McRjH6Uj0X3OkY4T+ng1qHHQc+Tzqv0aaqtfyFtom6Mn4ta9aCM8iLt1DkjkGj6XEidf9G+App1S0J4CUv9ENwETgcPJS8ZnhrdulciPeSVyo3aPDLDfKQQaPfQJ5O+Np1jh0QLrMs7kCdjpJm9JVZh9IJbbLkrTsM1NWS4oIOV6QCdfUyLCzYB0a6v7JrmqE6ejvGn6AdLSk6BxxNxYk97IY5J3PSs9QZOF1TbC6Qg7gD1AYwOHXr1OtysD/owStE/gKKVg95Pr4UhQZq7+fg78DBoNbXOsBYRhgW8DbX9uGQ4HLc55vObte/mGIco58ZW/XaeoiIDkmC+tJy8XxQNuDBp0TuTiekr/WgltStji2V153hY4S/CbwRVEcF0tydGH+SwbrPzSnnn5Tf2sWY+FLTu8co02AvsGvnXOIMui6XobiGj1yrgiIhr6b0CaDf8F+DVv3rNKA99WgJ8nxIqKsrd5D3TGgCpHY3ETzgnaaqYpSJJ+pt3Q2/dqqnL4rFKnO9uX2E9v+aq31kPJJ8v+GvgXZeLtqMx1chFfciGKKo0p0E2mVrt10ywCcGk5voRxPhfNAzfq3t7iY/Cs1C4uFCqt0UT/cag9OHH6SMMluYRCujI0yVfcbWTj6fV/DJHK/ge+URpjf5Qa+WNV556pUlG729hf7GE6Ye7VJasbzf8ED64jYTb25HcZbPmW+kn+kZvdfWTtsHl/WER+YLNRPmAzkLP3jj789z40FFamqd1IqqvBmHwn5lmE0wOLcxSDIaeSiv8zJ+LXvU1KJiB9DlWzf7Ul6t78fLFlhx6SRpfmCaWd14oDbiGlBE0FvK5tgLbIG0TPm+R9Idw6J1Vjf7dNMzMtY0SEfuJZ0D3Jd9nhI0JHF0qRHTlYXmxDvo7qk8d3W8WiWFQcNXutWiqqQW2q8c9Grt1yiAgkHSNQrP+L025C1uBV8G/1UAmxwkMx3jRE43fXocbpoYSHGW0etndH7QK/pEMm5i8ZtMU/JGZ8j8rdbefLifZIeJ28RRpnevc7m0l9KXHEazVnk+iGLwchTN8cWmR3SK0+eGtdbOOsRHEWo0aPjyitsNYPy3YPzy+LpYJxPdAF4BlrYp1FTdwCB6Xl4eyw/63a21q7lleKUzYEaYm3d/K90n7kRS+mpEZ4Kc+mLTnLDTzK7T72bcghSpeiH+DRr+I/AuzShyC6c1gdZfvwL9mw9RyyDLBijxZoxf/TwD1C/BXgqhsc28Zt/o3jXRMFquYGidquGS10raTdwvPxGjfzeEtrYHFluZ/TahF2lIqJk3tbfRlQUWOjiKi9jQ/tmYaUqXHbIMH6N4gRaFoULa8G6B6fAcjFs2OjkKw8iiX/OQYQGhjuJKAsepSdq6GvZByd5sXGX0SROzU0zPiotMA9O3xjHBJ0kGJFaX1ND2VDmWmIeu7jGVeHLpK2lOYe8zjxOc9NKHdb+T/KQzu5xl+OVoGIPbG773guMC/HWeOhXslLsmYRi9J79TXbPGiyvk/LnWvWyVyWRvUb/dHRVnetfRiDO4Zh11hC7Y2tmfu/O/lyFnUfhdHa9WSWFZDR+jH4t094EjA1LKcHQX6OlAfndNah+xEwrWgK4ea+W77aBsA4bRn023tLELGv3r5B27HRn9thu9nS0XrYHQDR+D11XnG5BIyxvv6oAnIJsXcxxGv3PT52lkZ7hNNBDqUgeDr6YXt4M6QfGDTnV0pFiD0Tf5C3aweOCwfwfrfce7WzZ9hWb4GP0o+rUIPCzQP93C1E8Ltdbf0WGPgALcbV0gb2eyRQNDW6KZmHv+mUkVGQnF8DH68bS/EBwWkGMV6Qsx+rCPSMvhCRoDsnckyTlm25B2DJcFqDT76YdA2wp0smYDjbfblwB9x5MR312dPLXTq4cZgWLJujmQV1SyJMNHOO0RLgR/C3IjMQtWkNIXfT/Kyg0noZ/rLYBVKE8/fKRQXbktWB8cYX6Xs+hTeDvLp675DYB7bwcOOQBZ9UZc94YGBYq1/PskkFdUkjY0m1wHFtoH9VkvkoIy/bhE3WpM6sA5jH3GSO2GecNMsnki+foA12jO7Ym2CerL6ADFEtKyq5KhUCXla+h6CoJPpWgfAPXJwHolygAj4SncdhBxxphdqqYYvYbXBavgXZ20ZBiRDOFS8NiAsMtJz0dHMsAwQNeXZVilwrdgICwF1lNZLywzhs/9jqGmV+VU9223vkYhneUBdHYCRbpa4getHvQF7lD2iKWe6ixHmFd90uktrJ5UefowjX5bHfrKaHODTfLGlhWX0L1aC6l7G9OtEtTr/2Dyto+RDENfomtveRXkk1+eFPNyLAF9YhccxRsEllDuG+60vvTxLU9XCvXPNLJBb9hX+LK0/JIjlR7bgqB+gnwzdUvy+AiynKfzaLjJ658E6gOyj2a4hxeRofQNj13BnLQGzg2Wq4aJZAMXq1p7bId1u+3p5qMPhY+hp2WEZ4CTwNvJb+92qOrpdwpbQYEGsS1vJ2P7EuwKFw3XIUe2S5fhJ+xW1+NTmIGU9tSvDD26eRF9ad94PDgFXEFeIS875Ui8fYseAk93RLMh+IRkl3YghaCDEU6KDxXgKxmHghrQlJpCbaFNZuvok2+6bqG1G2v6Y4bD+Bc2mQFzS2MJvgNWETP93/zAcR5r5YHpTx/ovoZvm32BToa+L6h1uGiV1udEPiNsBdBLP3uCoY1pq0YKz5CH1q+fMv23tqa3WRfhxyXcb/KD9KWPDDYmVzlDaloZKv3qCbl+PdfunS5oR0ArB6kxkb701Y6ce8z/A+b3M7Wxj88XAAAAAElFTkSuQmCC"
             alt="今日折上折">
    </div>
    <section class="banner">
        <span class="desc">
            <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAFqADAAQAAAABAAAAFgAAAAAcITNaAAAB2ElEQVQ4EbWVu07DMBiFCSodQGJh64yQUHmBthJFLH0AunVIKx7EL8LWGSHYWFgrdhYQQ8XARBcuBYTU8J3UBpc4TUHiSCe2/8ux4/x2oqU5SJJkB/cBbMEtG3pDew6Poyi6srbFGgQb8AQ+wjzIp5hGoSpBZWjgGPrQ+M4y5DP4ysEJ5IBH0McFg0O4DSuW6ssmnw/lZsUxGi/qgX4MV4KrwCgf7ELFOpiZeKx1+Gq9I9rdmYCpUBN7M8euHEEa9TSGTgmeQWEC40ByDfu7ZS3gj/EpVziFJb1SFT5DQfuWeX1sHTktOgFhbYvbc2lVlwlqwzUb3Kc2P34mMp54tjevn3ZtTt/apdUu8VDxC2M4SHvzH3usSG+lRQ3hAOFELZTGKmxpK9zGq04rGDPA7m8Fwy+optMPSqtylIYw0qyarQi3BLwUBfl+bYXOvr70BlyH93AGvOolq9jHuAndQiL6Q+i2T7nSEK61FQY69Kb23z8R6DkRWrNQuRVNg1Cm3CSsA6KiFoIHZAHh2OZKY3pAlMSg8EjniZPbhK6yvo+0S8BpoIMuli7MnEIvvvgSUjAi/3NteuKGSUKX+d8ueveKdoIG4vrtPME8yJf7a1KR54LEP/9MPwHLqitCaaKzMAAAAABJRU5ErkJggg=="
                 alt="更新时间">
            å·²äºŽ{{time}} 0点 å…¨ç½‘æ›´æ–°
        </span>
    </section>
    <div class="category">
        <div class="items">
            <span :class="active == 0 ? 'act':''" @click="handleSwiperNav(0, $event)">推荐</span>
            <span :class="active == i.id ? 'act':''" v-for="i in nav" :key="i.id"
                  @click="handleSwiperNav(i.id, $event)">
                {{i.title}}
            </span>
        </div>
    </div>
    <div v-if="active == 0">
        <h3 class="qiang"><span>今日必抢</span><span class="zsz">折上再省不止5折</span></h3>
        <div class="goods-wrap">
            <section class="goods">
                <a v-for="v in today" :key="v.id" v-on:click="handleCdetailFavorite(v)">
                    <div class="">
                        <img :src="v.pic"
                             class="fadeIn ">
                        <h5>{{v.dtitle}}</h5>
                        <div class="price___dfbCD">Â¥<span>{{v.jiage}}</span><u>Â¥{{v.yuanjia}}</u></div>
                        <div class="discount___1S9U2">
                            <span>淘抢购</span>
                            <span>折上{{zhe(v)}}折</span>
                        </div>
                    </div>
                </a>
            </section>
        </div>
    </div>
    <div>
        <div v-if="active == 0" class="choiceTitle___3ki4D">
            <img src="https://cmsstaticnew.dataoke.com/dist/static/double-discount-choice@2x.d2d5b409.png" alt="为你精选">
        </div>
        <div class="ulist">
            <a v-for="g in goodsItem" :key="g.id" v-on:click="handleCdetailFavorite(g)">
                <div class="detail___3ZQFW">
                    <img :src="g.pic"
                         class="fadeIn picture___r4a1j">
                    <div class="choiceInfo___3ZuEa">
                        <div class="other___2Mv8Q">
                            <h2>
                                <div class="shoplabel___1_Nv0"><img
                                        src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC4AAAAaCAYAAADIUm6MAAAE60lEQVRYw9WYbVBUVRjHz+gH/OCHdCY/WE1OGTNWU40ibIqSE6IGZpoGgrGUyAjrYkrI2yqIKGjN+FLONOk4aI6azZqZmu+ama9oElmOGApqvrK6KjBp8uvDc5a7d3eBJZsp78xv9p7/eZ7/8+y95yxnUEopRZ4tFIfdicPuxjGFoCnQODqKXdOhHDcOu5M8W6hqaTonw0VOBo8ILvJsoYqsdCfTJ/NIkZXuVNjT3NgnEZg0H9qLm/Qv01r9NLdi8kRMzMyFBw/+OWfPGF6VJ6GpEepqwbkebGnmWtVnAKCsxKzv3in6mi/w60+jmPgeJvJyeKjrbLXhVVVlnvthv+hfroWfK+HuXdGrq2Xs4fp10S9elHHpXHz7VCRbwZpsJiUlMA6HGNbVtR5jTYHkZMFqhdRUKJsPDY3Q3AxTbHDgQMcexpIlkGz1IhlF4gRaGN8OM/LEqLaONvMSA3DqlOQWzobsXJhXBnUXRCtfJWMPRytE37ZdxpMz/HwV4xIJmiy9jM7XBp8TPwFWrITGRsktKjHmDh6CK1fhw1xzzrqvRF+8tFVfxVsJ+BOv8dGnZkvxc7UEzvMhv0i+pPflKG7dv736Xihix2HiSAVU/WrmF03171K8qSnwvIdl5eK1co3EX7gEly7LfV4RrHNCzbngKSiG2He8GIci5m1MuG/z0Nem78QrNgE+WQax8VBxUuayC2Hnvo75FX+Eb5+KIaMxYcuBzHxhqsYz3uFVsHSRofuSlG72HJ4A1TWSN20mbN8r95+VQ4pdOHRMtKUrDO3Icb2h5+PbpyJyFEExaBTUeK3Xz1d7zb/pg5deUAqXrxp59nzYtkdv1I+NWM9DmbXA0HbtF62gzFxn0CgUEXFgaYUIjSUO8krFpEH/OtTfhOh4HTvSB52zeoPRcHOzfKbnwtbdcj9zgeG/Tb+F/DIjf4duPHeeX1+Kfm/QLjFJcL1eP6WFcPiE3G/Z03ZeUibccEHxIjiq13jqDNi8S+5dt+CPq0JjU+ta9lw/b8VLw2mTV8dA1WkxOHgcXh4Bce/DnQbRPl3Zdn7YSPk8Vinx1izYtKtjm3P6HD9fRZ+h0CdGM9TM4Hij6TPnYMBYWuJthXD/L73e18LzAfI9vBIHt/Sv1ZBE2KgPUcVLICoBosbDTn0MKFyktQTYfVC0zNk+njEoer9OQJKy4Io+7FSfB8tY/5hpc+HefYnZexgiAsQ8Fw3rt0pMRZVoX++Q8QclRtw3+i1kFhvaZr2JbUV+voqnh2DixTgo3yBHVIDvj0Lf0fjFeUiYJusS4MZNmFoCvfTcC7HwrS5+pwFGpIq+aqNoC8sNH89byJgt42ejoVK/7Xez/eoqeg6GnlEGx/Vh6N59mL8cnnzNPN8zCsnxou8Y2HfM68/6Yolbu0XGN90wxg5PRAmj7fJgmpvly15zQdOfEuu+A9fq4bY+8l68Ar2H+dVX9IikhccjIXUW/PgTRE6QcSC841u0QWCbA7/VQO8RMm8ZDwdOQP94THV6RMKUEqi/1famrDwNUdaA9RXdBrjpNgAzA/HXvHhME2iu+0D/uNbiuw+EXsPgmeH+PBXdVg9uRVeLk64WhAiN5T8i6PpORUh4KF3CXYT0xyDch/7tEGxcsP5tzHcJdxESrv+3EhIeSucwJ53C3HTqx/+TMDedw5yepv8GV1+TBUuIRhcAAAAASUVORK5CYII=">
                                </div>
                                <span>{{g.title}}</span></h2>
                            <div class="coupon___2SVZi" style="float: left; margin-right:10px"><span>券</span>{{g.quanJine}}元</div>
                            <div class="coupon___2SVZi" style="background: #A429F3;"><span style="color: #A429F3;">返</span>{{g.fanli}}元</div>
                        </div>
                        <div class="price___dfbCD">Â¥<span>{{g.jiage}}</span><u style="text-decoration:line-through">聚划算价 Â¥{{g.yuanjia}}</u></div>
                        <div class="operation___3KazI"><span>已抢{{digitalAbbNumber({num:g.xiaoliang})}}</span>
                            <button>马上抢</button>
                        </div>
                    </div>
                </div>
            </a>
        </div>
    </div>
</div>
</body>
</html>
<style>
</style>
<script>
    (function () {
        var size1=document.body.clientWidth;
        var size2=document.documentElement.clientWidth;
        var size=size1<=0?size2:size1;
        size=size<=0?400:size;
        document.documentElement.style.fontSize = (size > 750 ? 750 : size) / 7.5 + 'px';
    })();
    Vue.use(VueLazyload, {
        preLoad: 1.3,//
        error: 'https://sr.ffquan.cn/cms_pic/20200622/bro7s7f6vrkd3jat4ujg0.png',
        loading: 'https://sr.ffquan.cn/cms_pic/20200612/brhjkf76vrkcrfpi79eg0.png',
        attempt: 1
    })
    var $time = new Date();
    new Vue({
        el: '#appMain',
        data: {
            goodsItem: [],
            nav: [],
            active: 0,
            today: [],
            loading: true,
            sys: {},
            time:$time.getFullYear()+'-'+($time.getMonth()+1)+'-'+$time.getDate()
        },
        methods: {
            zhe: function (v) {
                return Number(v.discount * 10).toFixed(1);
            },
            accSub: function ({num}) {
                var r1, r2, m, n;
                try {
                    r1 = num[0].toString().split('.')[1].length;
                } catch (e) {
                    r1 = 0;
                }
                try {
                    r2 = num[1].toString().split('.')[1].length;
                } catch (e) {
                    r2 = 0;
                }
                m = Math.pow(10, Math.max(r1, r2)); //last modify by deeka //动态控制精度长度
                n = r1 >= r2 ? r1 : r2;
                return ((num[0] * m - num[1] * m) / m).toFixed(n);
            },
            digitalAbbNumber: function ({num = 0, unit}) {
                var param = {};
                var k = 10000,
                    sizes = ['', '万+', '亿', '万亿'],
                    i;
                if (num<=100) {
                    return num;
                }
                if (num < k && num>100) {
                    return num+"+";
                } else {
                    i = Math.floor(Math.log(num) / Math.log(k));
                    param.value = parseFloat((num / Math.pow(k, i)).toFixed(1));
                    param.unit = sizes[i];
                }
                return param.value + (unit || param.unit);
            },
            init: function () {
                var that = this;
                var url = 'https://dtkapi.ffquan.cn/dtk_go_app_api/v1/page-super-discount-cate'
                $.get(url, function (res) {
                    that.nav = res.data;
                })
                var todayUrl = 'https://dtkapi.ffquan.cn/dtk_go_app_api/v1/page-super-discount-today';
                $.get(todayUrl, function (res) {
                    that.today = res.data;
                })
                this.getGoodsList();
            },
            handleIntersectionObserver: function () {},
            handleSwiperNav: function (key, event) {
                console.log(key, event.target)
                this.active = key;
                var _this = this;
                $(document).scrollTop(0);
                this.active = key;
                setTimeout(function () {
                    _this.getGoodsList();
                }, 200)
            },
            getUrlPar:function(name)
            {
                var reg=new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
                 var r=window.location.search.substr(1).match(reg);
                if(r !=null)return unescape(r[2]);
                 return null;
            },
            getGoodsList: function () {
                var id = this.active, that = this;
                this.loading = true
                $.ajax({
                    headers:{
                        "token":this.getUrlPar("token")
                    },
                    //url:'http://dfgapp.ushopvip.com/api/Activity/zsz_goods_list',
                    url:'http://appapitest.ushopvip.com/api/Activity/zsz_goods_list',
                    type:"post",
                    dataType:"json",
                    data:{
                        cid:id,
                        app_key: _config.appKey,
                    }
                }).done(function(res){
                    if(res.code == 0){
                    that.goodsItem = res.data.data.data.list;
                    that.sys = res.data.data && res.data.data.sys ? res.data.data.sys : null;
                    that.loading = false
                    }
                })
            },
            handleCdetailFavorite: function (g) {
                if (_config.jumpGoodsUrl) {
                    return _config.jumpGoodsUrl(g);
                }
                var params = {
                    site_id: this.sys.uid,
                    auth_id:this.sys.auth_id,
                    pid: this.sys.pid,
                    goodsid: g.goodsid,
                    need_tpwd: 1,
                    gid: g.gid,
                    is_auto_quan: 1,
                    d_title: g.title,
                    need_short_link: 1,
                };
                if (this.sys.channel_id) {
                    params.relationId = this.sys.channel_id;
                }
                return new taobaoCode({
                    type: 1, // type=>1 å•†å“è½¬é“¾  2 æ´»åŠ¨è½¬é“¾  3自定义跳转
                    ua: ['MicroMessenger', 'WeiBo'], // å®šåˆ¶ UA  ua => [true]不跳转复制淘口令模式
                    modelType: 0, // 0 => é»˜è®¤æˆåŠŸå¤±è´¥æç¤º modelType => 1 è¶…级红包 2 =>会场弹窗 ï¼ˆåˆ¤æ–­ç±»åž‹ é»˜è®¤ä¸ä¼ ï¼Œç”¨é€”复制成功提示文案判断)
                    isRedPacket: false, // isRedPacket => true å¼€å¯çº¢åŒ…流程  isRedPacket=> å…³é—­çº¢åŒ…流程 ï¼ˆæ˜¯å¦å¼€å¯çº¢åŒ…弹窗流程)
                    params: params,
                    regCode: /\#(.*?)\#/, //替换正则 é»˜è®¤ #淘口令#
                    template: "优惠已生成,复制本段文字¥#淘口令#¥,打开淘宝APP领券购买",//替换模版
                });
            }
        },
        mounted: function () {
            this.init()
        },
    })
</script>
<style>
    html, body {
        padding: 0;
        margin: 0;
        background-color: #f5f5f9;
    }
    * {
        box-sizing: border-box;
    }
    .title img {
        height: 0.36rem;
        vertical-align: middle;
    }
    .title {
        height: 0.9rem;
        line-height: 0.9rem;
        text-align: center;
        background-color: #8e00d7;
        color: white;
        position: fixed;
        width: 100vw;
        z-index: 5;
    }
    .banner {
        height: 3.36rem;
        background-image: url("https://img.alicdn.com/imgextra/i2/2053469401/O1CN016BjNN82JJi1L2MPYl_!!2053469401.png");
        background-size: contain;
        position: relative;
    }
    .desc img {
        width: 0.22rem;
        height: 0.22rem;
        position: relative;
        top: .02rem;
        margin-right: .01rem;
    }
    .desc {
        bottom: 0.45rem;
        left: 50%;
        transform: translateX(-50%);
        padding: 0 0.2rem;
        position: absolute;
        height: .4rem;
        line-height: .4rem;
        background-color: #ff19e0;
        border-radius: .2rem;
        font-size: .24rem;
        font-weight: 400;
        color: #fff;
        white-space: nowrap;
    }
    .category {
        height: 0.88rem;
        line-height: 0.88rem;
        font-size: 0.3rem;
        overflow: hidden;
        padding: 0 0.1rem;
    }
    .items > span.act {
        background: linear-gradient(90deg, #8e00ff, #b20aff);
        color: white;
        padding: 0 0.2rem;
        border-radius: .24rem;
    }
    .items > span {
        color: #333;
        font-weight: 500;
        margin: 0 0.1rem;
        display: inline-block;
        line-height: 0.48rem;
        height: 0.48rem;
    }
    .items {
        overflow: scroll;
        white-space: nowrap;
    }
    .goods::-webkit-scrollbar,
    .items::-webkit-scrollbar {
        display: none;
    }
    .qiang .zsz {
        font-size: 0.22rem;
        color: #888;
        display: inline-block;
        margin-left: .1rem;
    }
    .qiang {
        background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAgCAYAAAAIXrg4AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAGKADAAQAAAABAAAAIAAAAABzZIbqAAAEHElEQVRIDbVWTWhcVRT+zn1v2gSSStqitl0YpErQ1mIyiURqFURBdKeC3Yh0WyIURdyILutCEQVRsqgUFdwJouhGdGeTNMVgFX/ALBSVUEzTaf7m3Xv8znvzZsZ5k5nnwsu8ufed852fe8655z6g5Nge1wlf1WU/qbN6p+4qKQZXFggJM05wS/B6qr4b42Xl+hqoHdGb6lV9SODGVQEn4qIIx/W4jpQxIjuB9G49mDicoQdPiGDUcJ4WGgKJQJZJ+pSY2d3zctn43UZXA0lVHyHjTYbkMOh1OtqRbTQfcFUdXo3/xuvyi2x1GmkXS3lU/jiJ5+j5sBFMlwcuk/YdXzYUup+0sUjksMXX+NwhaOh8NIzT8pXUSGqOuLniYntKqxLwTq48KJbp3UtxwCdyUa7mWJ3Q/V5wIlF9PoZMUzkih6fDNdTowAzDR0o2mjvQB3QgqeHzWHC/sULAkovwpMzJTw1sYdJpHUy2cTYSPGsFYDsJgqfiefmoAN6q6slQVbWHYVphko8VQF0I9FiSCX9OJ1WVsvWJsKT36J4camGEvqLOqT5jHthDZ96QS/JtDuo1Mxwaxe5FhvNXywdzc3Rb/YO5TGoAX+BWap00zT7oCsN0PgeUmeWC/MX6fT93MArRY7lcasDX/W2xkxErchVcxDx+ywFlZ+/xGfMW0rICjjKnaQFlVRSimxFlqhjJZZ5a221zGDhcxykSRl3AW6yoP5rMxqIS4fck6KqD7KXwDVjFEFmr/ypTwzpxLPuOsYYTzuFdcyJRmMwLHYj0lfnwFoXGLlJaloNu6DYaLR5IX1ndrLODbay+y8IOukpI5pPVOuvM2vZr9HRlA3hvaF7+7CrTIJYzYD2OW2cpoiIyxvWYNfoBj0PUM9PLQKkQsQ38zDBtsk1zA42Hxvhb66XceKV2IAsyVx/XR4k/VudfJQ0VrqxF+NiU9Bq5gUykB7KyKF+SbU+5EWV5y0IkbTtp3inl9HSgLIAWxcapYtlvTuntPOJpNzQmT/Kqzf95bKJGxevmt4iOJsBzbIROeN9+zThZb0+/ANjnF1yQH+hG04sSxizETI3d3RjhvW3Xa12DTLKvsX/wzyzbLVGBVKm6WkJpARJ4GVgzkiyjyvbh7QvhNOt7ic0O9qTGCqLlCGwnqQ6GeYs96SwW8L35jvQKjHBfFLC32IgIyBxrsbKDl1dgy3pWIHU6/OOuRfnGGKmBFmLn1fq0Hhoke4MBZcPb2DMnV3ZGtzh9DeiU7ku8fsjETafNnl7y1rrG3v9yvCizLVXdV31bRZLgjljkYQKH+QUxzPWQOBxQ0ZN2H3dX26IW49jipat4C5f8AD5g/u8NqixA6gzYFJG37T7ugBde+3qQS+hdeiMGIdeZA5bI+r4L0rfR5bL/6/wPvDd6z1FKJC0AAAAASUVORK5CYII=);
        background-size: auto 0.32rem;
        background-repeat: no-repeat;
        background-position: 0.14rem center;
        display: block;
        line-height: 0.72rem;
        height: 0.72rem;
        font-size: 0.3rem;
        box-sizing: border-box;
        padding-left: 0.5rem;
        margin: 0;
    }
    .goods-wrap {
        overflow: hidden;
    }
    .goods {
        display: block;
        white-space: nowrap;
        padding: 0 .14rem;
        font-size: 0;
        overflow: scroll;
    }
    .goods > a {
        display: inline-block;
        text-decoration: none;
    }
    .goods > a > div h5 {
        padding: 0;
        margin: .16rem 0 0;
        height: .32rem;
        font-size: .22rem;
        font-family: PingFangSC-Regular, PingFang SC;
        font-weight: 400;
        color: #333;
        line-height: .32rem;
        overflow: hidden;
        white-space: normal;
    }
    .goods > a > div .fadeIn {
        width: 2rem;
        height: 2rem;
        display: block;
        margin: 0 auto;
    }
    .goods > a > div {
        width: 2.2rem;
        box-sizing: border-box;
        padding: .1rem;
        background: #fff;
        border-radius: .16rem;
        margin-right: .1rem;
    }
    .price___dfbCD u {
        text-decoration: line-through;
        width: .64rem;
        font-size: .2rem;
        color: #a7a7a7;
    }
    .price___dfbCD span {
        font-size: .32rem;
        line-height: .34rem;
        padding: 0 .08rem 0 .04rem;
        font-weight: 700;
    }
    .price___dfbCD {
        font-family: PingFangSC-Regular, PingFang SC;
        font-weight: 500;
        color: #fe3738;
        font-size: .22rem;
        justify-content: flex-start;
        height: .34rem;
        margin: .04rem 0 .1rem;
        -webkit-align-items: baseline;
        -ms-flex-align: baseline;
        align-items: baseline;
    }
    .discount___1S9U2 span:nth-child(2) {
        font-size: .2rem;
        font-weight: 500;
        line-height: .34rem;
        height: .34rem;
        background: linear-gradient(
                99deg, #9c00ff, #c110ff);
        box-shadow: 0 0.02rem 0.08rem 0 rgb(224 0 255 / 31%);
        border-radius: .18rem .18rem 0 .18rem;
        padding-left: .76rem;
        display: block;
        text-align: right;
        position: relative;
        top: 0.1rem;
    }
    .discount___1S9U2 span:first-child {
        height: .42rem;
        line-height: .42rem;
        background: linear-gradient(
                315deg, #ff80fd, #ff59fe 29%, #f600ff);
        box-shadow: 0.02rem 0 0.06rem 0 rgb(127 20 190 / 20%);
        border-radius: 0 .22rem 0 .16rem;
        font-size: .2rem;
        font-weight: 500;
        padding: 0 .1rem;
        position: absolute;
        left: 0;
        bottom: 0;
        z-index: 3;
    }
    .discount___1S9U2 {
        height: .42rem;
        font-family: PingFangSC-Medium, PingFang SC;
        color: #fff;
        position: relative;
        margin-bottom: .06rem;
        font-size: 0;
        overflow: hidden;
    }
    .choiceTitle___3ki4D img {
        width: 1.66rem;
        height: .7rem;
        vertical-align: top;
        display: block;
        border: none;
    }
    .choiceTitle___3ki4D {
        padding-top: .18rem;
        background-color: #f6f6f6;
        display: -webkit-flex;
        display: -ms-flexbox;
        display: flex;
        -webkit-align-items: center;
        -ms-flex-align: center;
        align-items: center;
        -webkit-justify-content: center;
        -ms-flex-pack: center;
        justify-content: center;
        -webkit-flex-direction: row;
        -ms-flex-direction: row;
        flex-direction: row;
        -webkit-flex-wrap: nowrap;
        -ms-flex-wrap: nowrap;
        flex-wrap: nowrap;
    }
    .ulist > a {
        display: block;
        text-decoration: none;
    }
    .ulist {
        display: block;
    }
    .detail___3ZQFW {
        background-color: #fff;
        height: 2.2rem;
        border-radius: .16rem;
        margin: .2rem .2rem 0;
        padding: .1rem;
        position: relative;
        box-sizing: border-box;
    }
    .picture___r4a1j {
        height: 2rem;
        width: 2rem;
        border-radius: .1rem;
        position: absolute;
        left: .1rem;
        top: .1rem;
    }
    .choiceInfo___3ZuEa {
        -webkit-justify-content: space-between;
        -ms-flex-pack: justify;
        justify-content: space-between;
        padding-left: 2.2rem;
        height: 2rem;
        width: 100%;
        overflow: hidden;
        -webkit-align-items: flex-start;
        -ms-flex-align: start;
        align-items: flex-start;
        position: relative;
        display: flex;
        flex-wrap: nowrap;
        flex-direction: column;
    }
    .other___2Mv8Q h2 span {
        width: calc(100vw - 3.6rem);
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .other___2Mv8Q h2 {
        justify-content: flex-start;
        padding: 0;
        margin: 0;
        height: .4rem;
        font-size: .28rem;
        font-family: PingFangSC-Regular, PingFang SC;
        font-weight: 400;
        line-height: .4rem;
        color: #333;
        display: flex;
        flex-direction: row;
        flex-wrap: nowrap;
    }
    .shoplabel___1_Nv0 img {
        margin-right: .05rem;
        display: block;
        height: 100%;
        font-size: 100%;
        font: inherit;
        vertical-align: baseline;
    }
    .shoplabel___1_Nv0 {
        height: .26rem;
        float: left;
        position: relative;
        top: .05rem;
    }
    .coupon___2SVZi span {
        display: inline-block;
        font-size: .18rem;
        font-family: PingFangSC-Regular, PingFang SC;
        font-weight: 400;
        color: #ff5351;
        line-height: .19rem;
        padding: 1px .04rem;
        background: #fff;
        border-radius: .02rem 0 0 .02rem;
        text-align: center;
        margin-right: .06rem;
    }
    .coupon___2SVZi {
        margin-top: 6px;
        height: .24rem;
        background: linear-gradient(
                90deg, #ff8873, #ff4f4f);
        border-radius: .04rem;
        display: inline-block;
        line-height: .24rem;
        padding: 0 .06rem 0 .02rem;
        font-size: .19rem;
        font-family: PingFangSC-Regular, PingFang SC;
        color: #fff;
        display: -webkit-flex;
        display: -ms-flexbox;
        display: flex;
        -webkit-align-items: center;
        -ms-flex-align: center;
        align-items: center;
        width: -webkit-max-content;
        width: -moz-max-content;
        width: max-content;
    }
    .detail___3ZQFW .choiceInfo___3ZuEa .price___dfbCD {
        margin-bottom: .16rem;
        -webkit-justify-content: flex-start;
        -ms-flex-pack: start;
        justify-content: flex-start;
        -webkit-align-items: baseline;
        -ms-flex-align: baseline;
        align-items: baseline;
        height: .24rem;
        font-size: .24rem;
        font-family: PingFangSC-Medium, PingFang SC;
        font-weight: 500;
        color: #fe3738;
        line-height: .24rem;
    }
    .detail___3ZQFW .choiceInfo___3ZuEa .price___dfbCD u {
        text-decoration: none;
        font-size: .22rem;
        font-weight: 400;
        color: #777;
        line-height: .32rem;
    }
    .detail___3ZQFW .choiceInfo___3ZuEa .operation___3KazI button {
        border: none;
        width: 1.36rem;
        height: .4rem;
        line-height: .4rem;
        background: linear-gradient(
                270deg, #ff4afc, #da00ff);
        box-shadow: 0 0.02rem 0.06rem 0 rgb(255 39 252 / 43%);
        border-radius: .2rem;
        text-align: center;
        font-size: .22rem;
        font-family: PingFangSC-Medium, PingFang SC;
        font-weight: 500;
        color: #fff;
        line-height: .32rem;
    }
    .detail___3ZQFW .choiceInfo___3ZuEa .operation___3KazI span {
        height: .3rem;
        font-size: .2rem;
        font-family: PingFangSC-Regular, PingFang SC;
        font-weight: 400;
        color: #fa40fd;
        line-height: .3rem;
        margin-bottom: .1rem;
    }
    .detail___3ZQFW .choiceInfo___3ZuEa .operation___3KazI {
        position: absolute;
        right: .1rem;
        bottom: .06rem;
        display: flex;
        flex-direction: column;
        flex-wrap: nowrap;
    }
    .loading {
        display: flex;
        position: fixed;
        width: 100vw;
        height: 100vh;
        background: rgba(0, 0, 0, 0.2);
        top: 0;
        left: 0;
        z-index: 10;
        justify-content: center;
        align-items: center;
        font-size: .35rem;
        color: #333;
    }
    .sys{
        width: 100%;
        height: 100vh;
        position: fixed;
        z-index: 9999999;
        background: rgba(0, 0, 0, 0.6)
        url('https://sr.ffquan.cn/dtk_yunying/20210803/c44albf6vrkd4bd59itg0.png')
        center center no-repeat;
        background-size: 2.4rem auto;
    }
</style>
public/test111.txt