diff --git a/common/models/market/Market_sylive_user_model.php b/common/models/market/Market_sylive_user_model.php index cdfb3c40..406ef065 100644 --- a/common/models/market/Market_sylive_user_model.php +++ b/common/models/market/Market_sylive_user_model.php @@ -1,5 +1,5 @@ load->model('market/Market_sytopic_model', 'topic_model'); + $userRow = $this->get(['userId' => $useId]); + $topicRow = $this->topic_model->get(['id' => $topicId]); + if ($userRow['topOrgId'] == $topicRow['organizationId']) { + return true; + } else { + return false; + } + } } \ No newline at end of file diff --git a/common/models/market/Market_sytopic_enroll_model.php b/common/models/market/Market_sytopic_enroll_model.php new file mode 100644 index 00000000..7cd50c73 --- /dev/null +++ b/common/models/market/Market_sytopic_enroll_model.php @@ -0,0 +1,53 @@ +table_name, 'default'); + } + + //专题报名 + public function enroll($id, $topicUserId, $name, $mobile) + { + $this->load->model('market/Market_sytopic_user_model', 'topic_user_model'); + $this->load->model('market/market_sytopic_module_option_model'); + $optionRow = $this->market_sytopic_module_option_model->get(['id' => $id]); + $topicUser = $this->topic_user_model->get(['id' => $topicUserId]); + $row = $this->get(['status' => 0, 'moduleOptionId' => $id, 'userId' => $topicUser['userId']]); + if ($row) { +// $this->update(['name' => $name, 'mobile' => $mobile], ['id' => $row['id']]); + return ['code' => 0, 'msg' => '您的信息已收到,无需重复操作']; + } + $data = [ + 'topicUserId' => $topicUserId, + 'userId' => $topicUser['userId'], + 'channelId' => $topicUser['channelId'], + 'name' => $name, + 'mobile' => $mobile, + 'enTime' => date('Y-m-d H:i:s'), + 'createTime' => date('Y-m-d H:i:s'), + ]; + $optionRow['id'] && $data['moduleOptionId'] = $optionRow['id']; + $optionRow['topicId'] && $data['topicId'] = $optionRow['topicId']; + $optionRow['moduleId'] && $data['moduleId'] = $optionRow['moduleId']; + $res = $this->add($data); + if (!$res) { + return ['code' => 0, 'msg' => '提交失败']; + } + return ['code' => 1, 'msg' => '保存成功']; + } + + public function statusCn() + { + $statusArray = [ + 0 => '待确认', + 1 => '已确认', + 2 => '无效单' + ]; + return $statusArray; + } +} \ No newline at end of file diff --git a/common/models/market/Market_sytopic_model.php b/common/models/market/Market_sytopic_model.php new file mode 100644 index 00000000..c5056e39 --- /dev/null +++ b/common/models/market/Market_sytopic_model.php @@ -0,0 +1,13 @@ +table_name, 'default'); + } + +} \ No newline at end of file diff --git a/common/models/market/Market_sytopic_module_model.php b/common/models/market/Market_sytopic_module_model.php new file mode 100644 index 00000000..a4218696 --- /dev/null +++ b/common/models/market/Market_sytopic_module_model.php @@ -0,0 +1,36 @@ + '主图', + self::TYPE_DISCOUNT => '轮播报名', + self::TYPE_GRID => '网格报名', + self::TYPE_HORIZONTAL => '横排报名', + self::TYPE_SWIPER_BANNER => '轮播图', + self::TYPE_ARTICLE => '富文本', + ]; + + public function __construct() + { + parent::__construct($this->table_name, 'default'); + } + + public function getTopicModelIds($topicId) + { + $where = ['topicId' => $topicId, 'status' => 0]; + $modelList = $this->map('id','type',$where, 'sort desc,type asc', 1, 100, 'id,type'); + return $modelList ?: []; + } + +} \ No newline at end of file diff --git a/common/models/market/Market_sytopic_module_option_model.php b/common/models/market/Market_sytopic_module_option_model.php new file mode 100644 index 00000000..343df6e6 --- /dev/null +++ b/common/models/market/Market_sytopic_module_option_model.php @@ -0,0 +1,94 @@ +table_name, 'default'); + } + + public function getTopicModelOptionsList($topicId) + { + $this->load->model('market/market_sytopic_module_model'); + $modelList = $this->market_sytopic_module_model->getTopicModelIds($topicId); + $lists = []; + if ($modelList) { + $modelIdsStr = implode(',', array_keys($modelList)); + $where = ['topicId' => $topicId, 'status' => 0, "moduleId in ({$modelIdsStr})" => null]; + $modelOptionsList = $this->select($where, "FIELD (moduleId,{$modelIdsStr})", 1, 100); + foreach ($modelOptionsList as $item) { + $type = $modelList[$item['moduleId']]; + $lists[$item['moduleId']]['type'] = $type; + $lists[$item['moduleId']]['lists'][] = $this->formItem($type, $item);; + } + } + return $lists; + } + + //格式化数据 + private function formItem($type, $item) + { + $this->load->model('market/market_sytopic_module_model'); + $this->load->model('market/market_sytopic_enroll_model'); + $data = [ + 'id' => $item['id'], + 'title' => $item['title'], + 'subTitle' => $item['subTitle'], + 'showBtn' => (bool)$item['showBtn'], + 'btnText' => $item['btnText'], + 'popUpType' => $item['popUpType'], + 'targetUrl' => $item['targetUrl'] + ]; + $data['banner'] = $item['banner'] ? build_qiniu_image_url($item['banner']) : ''; + $otherImg = $item['otherImg'] ? json_decode($item['otherImg'], true) : []; + $otherImgSet = []; + if ($otherImg) { + foreach ($otherImg as $val) { + $otherImgSet[] = build_qiniu_image_url($val); + } + } + $data['otherImg'] = $otherImgSet; + $jsonData = json_encode($item['jsondata'], true); + switch ($type) { + case Market_sytopic_module_model::TYPE_DISCOUNT: //特惠报名 + $endTime = 0; + $showTime = false; + $enroll = true; //是否可报名 + if ($item['enrollEndTime'] != '0000-00-00 00:00:00') { + $showTime = true; + if (strtotime($item['enrollEndTime']) - time() > 0) { + $endTime = strtotime($item['enrollEndTime']) - time(); + } else { + $data['btnText'] = '已结束'; + $enroll = false; + } + } + //限制报名总人数 + $limitText = ''; + if ($item['enrollLimit'] > 0 && $enroll) { + $enrollCount = $this->market_sytopic_enroll_model->count(['status' => 0, 'moduleOptionId' => $item['id']]); + $leftEnroll = $item['enrollLimit'] - $enrollCount; + if ($leftEnroll <= 0) { + $leftEnroll = 0; + $enroll = false; + } + $limitText = "(还剩{$leftEnroll}个名额)"; + } + $data['endTime'] = $endTime; + $data['showTime'] = $showTime; + $data['limitText'] = $limitText; + $data['enroll'] = $enroll; + break; + case Market_sytopic_module_model::TYPE_ARTICLE: // 文章 + $data['introduction'] = $item['introduction']; + $data['createTime'] = $item['createTime']; + break; + default: + $data['introduction'] = strip_tags($item['introduction']); + } + return $data; + } +} \ No newline at end of file diff --git a/common/models/market/Market_sytopic_user_model.php b/common/models/market/Market_sytopic_user_model.php new file mode 100644 index 00000000..65fd96a1 --- /dev/null +++ b/common/models/market/Market_sytopic_user_model.php @@ -0,0 +1,20 @@ +table_name, 'default'); + } + + //判断是否管理员 + public function checkIsAdmin($id, $topicId) + { + $isAdmin = false; + $this->get(['id' => $id, 'topic_id' => $topicId]); + return $isAdmin; + } +} \ No newline at end of file diff --git a/home/controllers/h5/market/Welcome.php b/home/controllers/h5/market/Welcome.php new file mode 100644 index 00000000..b499cb4f --- /dev/null +++ b/home/controllers/h5/market/Welcome.php @@ -0,0 +1,14 @@ +load->model('market/Market_sytopic_enroll_model', 'sytopic_enroll_model'); } + //活动列表 - public function index(){ - $user = $this->user_model->get(['userId'=>$this->session['userId']]); + public function index() + { + $user = $this->user_model->get(['userId' => $this->session['userId']]); + $this->data['multi_org'] = $_SESSION[self::SESSION_KEY]['multi_org'] ? 1 : 0; + $this->data['isBiz'] = $user['bizId'] == $user['organizationId'] ? 1 : 0; + //微信分享 + $type = $this->input->get('type'); + $wx_info = $this->share_info(); + $this->data['sign_package'] = $wx_info['sign_package']; + $this->data['type'] = $type; + $this->show_view('h5/market/sylive2/biz/index'); + } + + public function appLists() + { + $user = $this->user_model->get(['userId' => $this->session['userId']]); $this->data['multi_org'] = $_SESSION[self::SESSION_KEY]['multi_org'] ? 1 : 0; $this->data['isBiz'] = $user['bizId'] == $user['organizationId'] ? 1 : 0; //微信分享 $wx_info = $this->share_info(); $this->data['sign_package'] = $wx_info['sign_package']; - $this->show_view('h5/market/sylive2/biz/index'); + $this->show_view('h5/market/sylive2/biz/app_lists'); } - public function act_list(){ + //活动列表 + public function act_list() + { $page = $this->input->get('page'); $size = $this->input->get('size'); !$page && $page = 1; !$size && $size = 20; + $type = $this->input->get('type'); + if ($type) { + return $this->topic_lists(); + } $where = [ 'userId' => $this->uid, 'status' => 0, 'activityId in (select activityId from lc_market_sylive_activity where status=0)' => null ]; $total = $this->groups_user_model->count($where); - $rows = $this->groups_user_model->select($where,'activityId desc',$page,$size); + $rows = $this->groups_user_model->select($where, 'activityId desc', $page, $size); $lists = []; - if($rows){ - $act_ids = implode(',',array_unique(array_column($rows,'activityId'))); + if ($rows) { + $act_ids = implode(',', array_unique(array_column($rows, 'activityId'))); $act_rows = []; - if($act_ids){ + if ($act_ids) { $where = [ "activityId in ({$act_ids})" => null, ]; } - $act_ids && $act_rows = $this->market_sylive_activity_model->map('activityId','',$where,'','','','activityId,title,timeStart,timeEnd,jsondata'); + $act_ids && $act_rows = $this->market_sylive_activity_model->map('activityId', '', $where, '', '', '', 'activityId,title,timeStart,timeEnd,jsondata'); foreach ($rows as $item) { $act = $act_rows[$item['activityId']] ? $act_rows[$item['activityId']][0] : []; - if($act){ - $jsondata = json_decode($act['jsondata'],true); + if ($act) { + $jsondata = json_decode($act['jsondata'], true); $banner = $jsondata['banner'] ? build_qiniu_image_url($jsondata['banner']) : ''; $lists[] = [ 'title' => $act['title'], 'img' => $banner, - 'time' => date('Y-m-d H:i',strtotime($act['timeStart'])).'-'.date('Y-m-d H:i',strtotime($act['timeEnd'])), + 'time' => date('Y-m-d H:i', strtotime($act['timeStart'])) . '-' . date('Y-m-d H:i', strtotime($act['timeEnd'])), 'url' => "/h5/market/sylive2/biz/userinfo?a_id={$item['activityId']}" ]; } - } + } } $data = [ 'list' => $lists, 'total' => $total ]; - $this->show_json($data,200); + $this->show_json($data, 200); + } + + //专题列表 + public function topic_lists() + { + $page = $this->input->get('page'); + $size = $this->input->get('size'); + !$page && $page = 1; + !$size && $size = 20; + $user = $this->user_model->get(['userId' => $this->uid]); + $where = [ + 'status' => 0, + 'organizationId' => $user['topOrgId'], + ]; + $total = $this->topic_model->count($where); + $lists = []; + if ($total) { + $rows = $this->topic_model->select($where, 'id desc', $page, $size); + foreach ($rows as $item) { + $banner = $item['banner'] ? build_qiniu_image_url($item['banner']) : ''; + //浏览数 + $userCount = $this->topic_user_model->count(['topicId' => $item['id'], 'bizId' => $user['bizId']]); + if ($userCount > 10000) { + $userCount = sprintf("%.2f", $userCount / 10000) . 'W'; + } + //留资数 + $lzCount = $this->sytopic_enroll_model->count(['topicId' => $item['id'], 'bizId' => $user['bizId'], 'status <> -1' => null]); + $lists[] = [ + 'title' => $item['title'], + 'img' => $banner, + 'time' => date('Y-m-d H:i', strtotime($item['timeStart'])) . '-' . date('Y-m-d H:i', strtotime($item['timeEnd'])), + 'url' => "/h5/market/sytopic?skey=" . $this->myencryption->base64url_encode(Common::SIGN_TOP_KEY . '=' . $item['id']), + 'userCount' => $userCount, + 'lzCount' => $lzCount, + ]; + } + } + $data = [ + 'list' => $lists, + 'total' => $total + ]; + $this->show_json($data, 200); } //获取微信用户信息 - public function userinfo(){ - if(!$_SESSION[self::SESSION_KEY]['all_info']){ - $ret = $this->set_auth('',1); - if($ret){ + public function userinfo() + { + if (!$_SESSION[self::SESSION_KEY]['all_info']) { + $ret = $this->set_auth('', 1); + if ($ret) { $update = [ "sex" => $ret['sex'] ? 1 : 0, ]; $ret['nickname'] && $update['nickname'] = strval($ret['nickname']); $ret['headimgurl'] && $update['headimg'] = strval($ret['headimgurl']); $ret['unionid'] && $update['unionid'] = $ret['unionid']; - $this->user_model->update($update,['userId'=>$this->uid,'openid'=>$ret['openid']]); + $this->user_model->update($update, ['userId' => $this->uid, 'openid' => $ret['openid']]); } - $_SESSION[self::SESSION_KEY]['all_info'] =1; + $_SESSION[self::SESSION_KEY]['all_info'] = 1; } $a_id = $this->input->get('a_id'); - $my_url = http_host_com('home')."/h5/market/sylive2/stic?a_id={$a_id}"; + $my_url = http_host_com('home') . "/h5/market/sylive2/stic?a_id={$a_id}"; redirect($my_url); } } \ No newline at end of file diff --git a/home/controllers/h5/market/sylive2/Common.php b/home/controllers/h5/market/sylive2/Common.php index d7dd329e..fd1524a4 100644 --- a/home/controllers/h5/market/sylive2/Common.php +++ b/home/controllers/h5/market/sylive2/Common.php @@ -1,16 +1,19 @@ load->model('market/market_sylive_user_model', 'user_model'); $this->load->model('market/market_sylive_activity_user_model', 'act_user_model'); $this->load->model('market/market_sylive_groups_model', 'groups_model'); $this->load->model('market/market_sylive_groups_user_model', 'groups_user_model'); $this->load->model('market/market_sylive_activity_model'); + $this->load->model('market/Market_sytopic_model', 'topic_model'); + $this->load->model('market/Market_sytopic_user_model', 'topic_user_model'); $this->load->library('hd_exception'); $this->load->library('MyEncryption'); @@ -40,8 +46,9 @@ abstract class Common extends CI_Controller{ /** * @param $view */ - protected function show_view($view){ - $this->load->view('h5/market/sylive2/header',$this->data); + protected function show_view($view) + { + $this->load->view('h5/market/sylive2/header', $this->data); $this->load->view($view); $this->load->view('h5/market/sylive2/footer'); } @@ -54,7 +61,7 @@ abstract class Common extends CI_Controller{ */ protected function show_json($data, $code = 200, $msg = 'success', $url = '') { - if(!isset($data['code'])){ + if (!isset($data['code'])) { $data = array('data' => $data, 'code' => $code, 'msg' => $msg, 'url' => $url); } @@ -67,13 +74,14 @@ abstract class Common extends CI_Controller{ * @return void * @throws Hd_exception */ - protected function set_auth($url='',$auth=0){ + protected function set_auth($url = '', $auth = 0) + { $this->load->helper('url'); $this->load->config('wechat'); $config = $this->config->item('hdy'); $code = $this->input->get('code'); - !$url && $url = http_host_com('home').$_SERVER['REQUEST_URI']; - $auth && $url = $_SERVER['QUERY_STRING'] ? $url."&auth={$auth}" : $url."?auth={$auth}"; + !$url && $url = http_host_com('home') . $_SERVER['REQUEST_URI']; + $auth && $url = $_SERVER['QUERY_STRING'] ? $url . "&auth={$auth}" : $url . "?auth={$auth}"; if ($code) {//授权码获取微信信息 $auth_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$config['appid']}&secret={$config['appSecret']}&code={$code}&grant_type=authorization_code"; $res = file_get_contents($auth_url); @@ -81,12 +89,12 @@ abstract class Common extends CI_Controller{ $access_token = $ret['access_token']; $openid = $ret['openid']; $unionid = $ret['unionid']; - if($this->input->get('auth') && $access_token){ + if ($this->input->get('auth') && $access_token) { $u_info_url = "https://api.weixin.qq.com/sns/userinfo?access_token={$access_token}&openid={$openid}&lang=zh_CN"; $u_ret = file_get_contents($u_info_url); - $ret = json_decode($u_ret,true); + $ret = json_decode($u_ret, true); } - if(!$openid){ + if (!$openid) { debug_log("[error]# " . $res, __FUNCTION__, $this->log_dir); throw new Hd_exception('获取用户信息失败', 400); } @@ -95,32 +103,49 @@ abstract class Common extends CI_Controller{ $redirect_uri = urlencode($url); $auth_url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={$config['appid']}&redirect_uri={$redirect_uri}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect&forcePopup=true"; redirect($auth_url); - } else{//静默授权获取用户openid + } else {//静默授权获取用户openid $redirect_uri = urlencode($url); $auth_url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={$config['appid']}&redirect_uri={$redirect_uri}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect"; redirect($auth_url); } } + //微信分享信息 - protected function share_info($act_row=[]){ - $a_id = $act_row['activityId']; - $share_skey = "a_id=" . $a_id . "&cf_uid=" . $this->uid; + protected function share_info($act_row = [], $topic_row = []) + { $this->load->library('Jssdk'); $jssdk = new Jssdk('liche'); $sign_package = $jssdk->getSignPackage(); $share = []; - if($act_row){ - //微信分享 - $share_url = http_host_com('home') . "/h5/market/sylive2/act?skey=" . $this->myencryption->base64url_encode($share_skey); - $shareTitle = $act_row['shareTitle'] ? json_decode($act_row['shareTitle'],true) : []; + $a_id = $act_row['activityId']; + if ($a_id) { + $share_skey = "a_id=" . $a_id . "&cf_uid=" . $this->uid; + } + $topic_id = $topic_row['id']; + if ($topic_id) { + $share_skey = self::SIGN_TOP_KEY . "=" . $topic_id . "&cf_uid=" . $this->uid; + } + if ($act_row) { + $shareTitle = []; + $share_url = $sharePhoto = ''; + if ($a_id) { + $share_url = http_host_com('home') . "/h5/market/sylive2/act?skey=" . $this->myencryption->base64url_encode($share_skey); + $shareTitle = $act_row['shareTitle'] ? json_decode($act_row['shareTitle'], true) : []; + $sharePhoto = $act_row['sharePhoto'] ? build_qiniu_image_url($act_row['sharePhoto']) : ''; + } + if ($topic_id) { + $share_url = http_host_com('home') . "/h5/market/sytopic?skey=" . $this->myencryption->base64url_encode($share_skey); + $shareTitle = $topic_row['shareTitle'] ? json_decode($topic_row['shareTitle'], true) : []; + $sharePhoto = $topic_row['sharePhoto'] ? build_qiniu_image_url($topic_row['sharePhoto']) : ''; + } $share = array( 'title' => $act_row['title'], - "img" => $act_row['sharePhoto'] ? build_qiniu_image_url($act_row['sharePhoto']) : '', + "img" => $sharePhoto, "desc" => $shareTitle[array_rand($shareTitle)], "url" => $share_url ); } - return ['sign_package' => $sign_package ,'share' => $share]; + return ['sign_package' => $sign_package, 'share' => $share]; } /** @@ -137,13 +162,16 @@ abstract class Common extends CI_Controller{ * @return array|false * @throws WxPayException */ - protected function unorder($trade_no,$price,$openid,$body,$notify_url,$expire_time,$other_data=[]){ - if(!$body){return false;} - require_once APPPATH."../api/third_party/WXpay/WxPay.Api.php"; - if($other_data['pay_config'] && file_exists($other_data['pay_config'])){ + protected function unorder($trade_no, $price, $openid, $body, $notify_url, $expire_time, $other_data = []) + { + if (!$body) { + return false; + } + require_once APPPATH . "../api/third_party/WXpay/WxPay.Api.php"; + if ($other_data['pay_config'] && file_exists($other_data['pay_config'])) { require_once $other_data['pay_config']; - }else{ - require_once APPPATH."../api/third_party/WXconfig/hdy_WxPay.Config.php"; + } else { + require_once APPPATH . "../api/third_party/WXconfig/hdy_WxPay.Config.php"; } $config = new WxPayConfig(); $wxpay = new WxPayUnifiedOrder(); @@ -154,164 +182,266 @@ abstract class Common extends CI_Controller{ $wxpay->SetOut_trade_no($trade_no); //订单号 $wxpay->SetTotal_fee($price * 100); //支付价格 $wxpay->SetTime_start(date("YmdHis")); //交易起始时间 - $wxpay->SetTime_expire(date('YmdHis',$expire_time)); //交易结束时间 + $wxpay->SetTime_expire(date('YmdHis', $expire_time)); //交易结束时间 $wxpay->SetTrade_type("JSAPI"); //设置交易类型 $wxpay->SetOpenid($openid); //openid $return = WxPayApi::unifiedOrder($config, $wxpay); //统一支付 - if($return['result_code'] == 'SUCCESS') { + if ($return['result_code'] == 'SUCCESS') { $wxpay_api = new WxPayJsApiPay(); $jsApiParameters = WxPayApi::GetJsApiParameters($return, $config, $wxpay_api); $jsApiParameters = json_decode($jsApiParameters, true); - return ['code'=>1,'data'=>$jsApiParameters,'msg'=>'下单成功']; - }else{ - $msg = $return['return_msg'] ? $return['return_msg'].$return['err_code_des'] : $return['return_msg']; - return ['code'=>0,'data'=>[],'msg'=>$msg]; + return ['code' => 1, 'data' => $jsApiParameters, 'msg' => '下单成功']; + } else { + $msg = $return['return_msg'] ? $return['return_msg'] . $return['err_code_des'] : $return['return_msg']; + return ['code' => 0, 'data' => [], 'msg' => $msg]; } } } -class Admin extends Common{ +class Admin extends Common +{ const WX_SESSION = "market_wx_info"; - public function __construct(){ + + public function __construct() + { parent::__construct(); //print_r($this->session); } - public function _remap($method){ - try{ + public function _remap($method) + { + try { $this->session = $_SESSION[self::SESSION_KEY]; $this->mobile = $this->session['mobile']; $_SESSION[self::SESSION_KEY]['act_uid'] = ''; - if(!in_array($method,$this->white_login_method) && !$_SESSION[self::SESSION_KEY]['mobile'] && !$this->uid){ + if (!in_array($method, $this->white_login_method) && !$_SESSION[self::SESSION_KEY]['mobile'] && !$this->uid) { $ret = $this->set_auth(); $openid = $ret['openid']; - $row_wechat = $this->user_model->get(['openid' => $openid,'status'=>0,'organizationId>'=>0]); - if(!$row_wechat){ + $row_wechat = $this->user_model->get(['openid' => $openid, 'status' => 0, 'organizationId>' => 0]); + if (!$row_wechat) { $_SESSION[self::WX_SESSION] = $ret; - header('Location:/h5/market/sylive2/login');exit; + header('Location:/h5/market/sylive2/login'); + exit; } //更新未绑定用户openid - $row_wechat['mobile'] && $this->user_model->update(['openid'=>$openid],['mobile'=>$row_wechat['mobile'],'status'=>0]); + $row_wechat['mobile'] && $this->user_model->update(['openid' => $openid], ['mobile' => $row_wechat['mobile'], 'status' => 0]); $_SESSION[self::SESSION_KEY]['mobile'] = $row_wechat['mobile']; - $org_url = http_host_com('home')."/h5/market/sylive2"; + $org_url = http_host_com('home') . "/h5/market/sylive2"; redirect($org_url); } return $this->$method(); - } catch(Hd_exception $e){//处理异常 + } catch (Hd_exception $e) {//处理异常 $msg = $e->getMessage(); $data = array('heading' => 'Warning', 'message' => $msg); - return $this->load->view('errors/html/error_404',$data); + return $this->load->view('errors/html/error_404', $data); } } } -class Wx extends Common{ - public function __construct(){ +class Wx extends Common +{ + public function __construct() + { parent::__construct(); } - public function _remap($method){ - try{ - if(!$this->act_uid){ + public function _remap($method) + { + try { + if (!$this->act_uid) { $this->session = $this->uid = ''; } - if(!in_array($method,$this->white_login_method) && !$this->uid){ + $skey = $this->input->get('skey'); + $param = $this->myencryption->base64url_decode($skey); + if (!in_array($method, $this->white_login_method) && !$this->uid) { $ret = $this->set_auth(); - $openid = $ret['openid']; - if(!$openid){ - echo ("");exit; + if (!$ret['openid']) { + echo(""); + exit; } - $skey = $this->input->get('skey'); - $param = $this->myencryption->base64url_decode($skey); - //找管理员角色 - $where = [ - 'activityId' => $param['a_id'], - 'status' => 0, - "userId in (select `userId` from lc_market_sylive_user where openid='{$openid}')" => null - ]; - $row_wechat = $this->groups_user_model->get($where); - if(!$row_wechat){ - $row_wechat = $this->user_model->get(['status'=>0,'openid'=>$openid]);//普通用户角色 + if ($param['a_id']) { + $this->initUserByActivity($param, $ret); //私域直播用户初始化 + } elseif ($param[self::SIGN_TOP_KEY]) { + $this->initUserByTopic($param, $ret); //专题活动用户初始化 } - if(!$row_wechat){ //创建用户 - $add = array( - "openid" => $openid, - "sex" => $ret['sex'] ? 1 : 0, - "createTime" => date('Y-m-d H:i:s') - ); - $ret['nickname'] && $add['nickname'] = strval($ret['nickname']); - $ret['headimgurl'] && $add['headimg'] = strval($ret['headimgurl']); - $ret['unionid'] && $add['unionid'] = $ret['unionid']; - $this->uid = $this->user_model->add($add); - if (!$this->uid) { - debug_log("[error]# " . $this->mdWeixinUsers->db->last_query(), __FUNCTION__, $this->log_dir); + } else { + if ($param['a_id']) { //私域直播 + //更新pid + $act_user = $this->act_user_model->get(['activityId' => $param['a_id'], 'userId' => $this->uid]); + if ($param['cf_uid']) { + $p_act_user = $this->act_user_model->get(['userId' => $param['cf_uid'], 'activityId' => $param['a_id']], 'userId,channelId'); + $update_ac_user['pid'] = $p_act_user['userId']; } - }else{ - $this->uid = $row_wechat['userId']; + $update_ac_user && $this->act_user_model->update($update_ac_user, ['id' => $act_user['id']]); } - //判断是否有绑定马甲 - $ma_user = ''; - $user = $this->user_model->get(['userId'=>$this->uid,'maJiaId>'=>0]); - $user['maJiaId'] && $ma_user = $this->user_model->get(['userId'=>$user['maJiaId'],'status'=>0]); - if($ma_user && !$param['cf_uid']){ - $where = ['activityId' => $param['a_id'], 'status' => 0, "userId" => $ma_user['userId']]; - $row_wechat = $this->groups_user_model->get($where); //管理员用户 - !$row_wechat && $row_wechat = $this->user_model->get(['status'=>0,'userId'=>$ma_user['userId']]);//普通用户角色 - $this->uid = $row_wechat['userId']; - } - $act_user = $this->act_user_model->get(['activityId'=>$param['a_id'],'userId'=>$this->uid]); - if(!$act_user && $param['a_id']){ - $act_data = [ - 'activityId' => $param['a_id'], - 'userId' => $this->uid, - "createTime" => date('Y-m-d H:i:s') - ]; - $row_wechat['bizId'] && $act_data['bizId'] = $row_wechat['bizId']; - $row_wechat['groupsId'] && $act_data['groupsId'] = $row_wechat['groupsId']; - $row_wechat['levelId1'] && $act_data['levelId1'] = $row_wechat['levelId1']; - $row_wechat['levelId2'] && $act_data['levelId2'] = $row_wechat['levelId2']; - $row_wechat['levelId3'] && $act_data['levelId3'] = $row_wechat['levelId3']; - if($param['cf_uid']){ - $p_act_user = $this->act_user_model->get(['userId'=>$param['cf_uid'],'activityId'=>$param['a_id']],'userId,channelId'); - if($p_act_user['channelId']){ - $act_data['channelId'] = $p_act_user['channelId']; - }else{ - $p_act_user['groupsId'] && $act_data['channelId'] = $p_act_user['userId']; - } - $act_data['pid'] = $p_act_user['userId']; - } - $row_wechat['groupsId'] && $act_data['channelId'] = $this->uid;//管理员自己归属到自己 - $act_user['id'] = $this->act_user_model->add($act_data); - }else{ - //更新分组信息 - $update_ac_user = []; - if($act_user['bizId']!=$row_wechat['bizId']){ - $update_ac_user['bizId'] = $row_wechat['bizId']; - } - if($act_user['groupsId']!=$row_wechat['groupsId']){ - $update_ac_user['groupsId'] = $row_wechat['groupsId']; - } - if($act_user['levelId1']!=$row_wechat['levelId1']){ - $update_ac_user['levelId1'] = $row_wechat['levelId1']; - } - if($act_user['levelId2']!=$row_wechat['levelId2']){ - $update_ac_user['levelId2'] = $row_wechat['levelId2']; - } - if($act_user['levelId3']!=$row_wechat['levelId3']){ - $update_ac_user['levelId3'] = $row_wechat['levelId3']; - } - $update_ac_user && $this->act_user_model->update($update_ac_user,['id'=>$act_user['id']]); - } - $_SESSION[self::SESSION_KEY]['userId'] = $this->uid; - $_SESSION[self::SESSION_KEY]['act_uid'] = $act_user['id']; - echo ("");exit; } return $this->$method(); - } catch(Hd_exception $e){//处理异常 + } catch (Hd_exception $e) {//处理异常 $msg = $e->getMessage(); $data = array('heading' => 'Warning', 'message' => $msg); - return $this->load->view('errors/html/error_404',$data); + return $this->load->view('errors/html/error_404', $data); } } + + //私域直播用户初始化 + private function initUserByActivity($param, $wxInfo) + { + $openid = $wxInfo['openid']; + //找管理员角色 + $where = [ + 'activityId' => $param['a_id'], + 'status' => 0, + "userId in (select `userId` from lc_market_sylive_user where openid='{$openid}')" => null + ]; + $row_wechat = $this->groups_user_model->get($where); + if (!$row_wechat) { + $row_wechat = $this->user_model->get(['status' => 0, 'openid' => $openid]);//普通用户角色 + } + if (!$row_wechat) { //创建用户 + $add = array( + "openid" => $openid, + "sex" => $wxInfo['sex'] ? 1 : 0, + "createTime" => date('Y-m-d H:i:s') + ); + $wxInfo['nickname'] && $add['nickname'] = strval($wxInfo['nickname']); + $wxInfo['headimgurl'] && $add['headimg'] = strval($wxInfo['headimgurl']); + $wxInfo['unionid'] && $add['unionid'] = $wxInfo['unionid']; + $this->uid = $this->user_model->add($add); + if (!$this->uid) { + debug_log("[error]# " . $this->mdWeixinUsers->db->last_query(), __FUNCTION__, $this->log_dir); + } + } else { + $this->uid = $row_wechat['userId']; + } + //判断是否有绑定马甲 + $ma_user = ''; + $user = $this->user_model->get(['userId' => $this->uid, 'maJiaId>' => 0]); + $user['maJiaId'] && $ma_user = $this->user_model->get(['userId' => $user['maJiaId'], 'status' => 0]); + if ($ma_user && !$param['cf_uid']) { + $where = ['activityId' => $param['a_id'], 'status' => 0, "userId" => $ma_user['userId']]; + $row_wechat = $this->groups_user_model->get($where); //管理员用户 + !$row_wechat && $row_wechat = $this->user_model->get(['status' => 0, 'userId' => $ma_user['userId']]);//普通用户角色 + $this->uid = $row_wechat['userId']; + } + + $act_user = $this->act_user_model->get(['activityId' => $param['a_id'], 'userId' => $this->uid]); + if (!$act_user && $param['a_id']) { + $act_data = [ + 'activityId' => $param['a_id'], + 'userId' => $this->uid, + 'pid' => 0, + "createTime" => date('Y-m-d H:i:s') + ]; + $row_wechat['bizId'] && $act_data['bizId'] = $row_wechat['bizId']; + $row_wechat['groupsId'] && $act_data['groupsId'] = $row_wechat['groupsId']; + $row_wechat['levelId1'] && $act_data['levelId1'] = $row_wechat['levelId1']; + $row_wechat['levelId2'] && $act_data['levelId2'] = $row_wechat['levelId2']; + $row_wechat['levelId3'] && $act_data['levelId3'] = $row_wechat['levelId3']; + if ($param['cf_uid']) { + $p_act_user = $this->act_user_model->get(['userId' => $param['cf_uid'], 'activityId' => $param['a_id']], 'userId,channelId'); + if ($p_act_user['channelId']) { + $act_data['channelId'] = $p_act_user['channelId']; + } else { + $p_act_user['groupsId'] && $act_data['channelId'] = $p_act_user['userId']; + } + $act_data['pid'] = $p_act_user['userId'] ? $p_act_user['userId'] : 0; + } + $row_wechat['groupsId'] && $act_data['channelId'] = $this->uid;//管理员自己归属到自己 + $act_user['id'] = $this->act_user_model->add($act_data); + } else { + //更新分组信息 + $update_ac_user = []; + if ($act_user['bizId'] != $row_wechat['bizId']) { + $update_ac_user['bizId'] = $row_wechat['bizId']; + } + if ($act_user['groupsId'] != $row_wechat['groupsId']) { + $update_ac_user['groupsId'] = $row_wechat['groupsId']; + } + if ($act_user['levelId1'] != $row_wechat['levelId1']) { + $update_ac_user['levelId1'] = $row_wechat['levelId1']; + } + if ($act_user['levelId2'] != $row_wechat['levelId2']) { + $update_ac_user['levelId2'] = $row_wechat['levelId2']; + } + if ($act_user['levelId3'] != $row_wechat['levelId3']) { + $update_ac_user['levelId3'] = $row_wechat['levelId3']; + } + $update_ac_user && $this->act_user_model->update($update_ac_user, ['id' => $act_user['id']]); + } + $_SESSION[self::SESSION_KEY]['userId'] = $this->uid; + $_SESSION[self::SESSION_KEY]['act_uid'] = $act_user['id']; + echo(""); + exit; + } + + //专题用户初始化 + private function initUserByTopic($param, $wxInfo) + { + $topic_id = $param[Common::SIGN_TOP_KEY]; + $openid = $wxInfo['openid']; + //找管理员角色 + $where = [ + 'openid' => $openid, + 'status' => 0, + "topOrgId in (select organizationId from lc_market_sytopic where id={$topic_id})" => null + ]; + $row_wechat = $this->user_model->get($where); + if (!$row_wechat) { + $row_wechat = $this->user_model->get(['status' => 0, 'openid' => $openid]);//普通用户角色 + } + if (!$row_wechat) { //创建普通用户 + $add = array( + "openid" => $openid, + "sex" => $wxInfo['sex'] ? 1 : 0, + "createTime" => date('Y-m-d H:i:s') + ); + $wxInfo['nickname'] && $add['nickname'] = strval($wxInfo['nickname']); + $wxInfo['headimgurl'] && $add['headimg'] = strval($wxInfo['headimgurl']); + $wxInfo['unionid'] && $add['unionid'] = $wxInfo['unionid']; + $this->uid = $this->user_model->add($add); + if (!$this->uid) { + debug_log("[error]# " . $this->mdWeixinUsers->db->last_query(), __FUNCTION__, $this->log_dir); + } + } else { + $this->uid = $row_wechat['userId']; + } + //判断是否有绑定马甲 + $ma_user = ''; + $user = $this->user_model->get(['userId' => $this->uid, 'maJiaId>' => 0]); + $user['maJiaId'] && $ma_user = $this->user_model->get(['userId' => $user['maJiaId'], 'status' => 0]); + if ($ma_user && !$param['cf_uid']) { + $this->uid = $row_wechat['maJiaId']; + } + $act_user = $this->topic_user_model->get(['topicId' => $topic_id, 'userId' => $this->uid]); + if (!$act_user && $topic_id) { + $act_data = [ + 'topicId' => $topic_id, + 'userId' => $this->uid, + 'pid' => 0, + "createTime" => date('Y-m-d H:i:s') + ]; + $row_wechat['bizId'] && $act_data['bizId'] = $row_wechat['bizId']; + if ($param['cf_uid']) { + $p_act_user = $this->topic_user_model->get(['userId' => $param['cf_uid'], 'topicId' => $topic_id], 'userId,channelId'); + if ($p_act_user['channelId']) { + $act_data['channelId'] = $p_act_user['channelId']; + } else { + $p_act_user['organizationId'] && $act_data['channelId'] = $p_act_user['userId']; + } + $act_data['pid'] = $p_act_user['userId'] ? $p_act_user['userId'] : 0; + } + //管理员自己归属到自己 + $topic_row = $this->topic_model->get(['id' => $topic_id]); + if ($row_wechat['topOrgId'] && $topic_row['organizationId'] == $row_wechat['topOrgId']) { + $act_data['channelId'] = $this->uid; + $act_data['organizationId'] = $row_wechat['organizationId']; + } + $act_user['id'] = $this->topic_user_model->add($act_data); + } + $_SESSION[self::SESSION_KEY]['userId'] = $this->uid; + $_SESSION[self::SESSION_KEY]['act_uid'] = $act_user['id']; + echo(""); + exit; + } } diff --git a/home/controllers/h5/market/sylive2/Login.php b/home/controllers/h5/market/sylive2/Login.php index f0522961..078e4cc3 100644 --- a/home/controllers/h5/market/sylive2/Login.php +++ b/home/controllers/h5/market/sylive2/Login.php @@ -81,7 +81,7 @@ class Login extends CI_Controller{ if(!$user){ $this->show_json('',400,'用户不存在'); } - $redis = &load_cache('redis'); + $redis = &load_cache(); $key = "sylive_login_code_".$mobile; $code = $redis->get($key); if(!$code){ diff --git a/home/controllers/h5/market/sylive2/User.php b/home/controllers/h5/market/sylive2/User.php index f7f0a45d..259790c7 100644 --- a/home/controllers/h5/market/sylive2/User.php +++ b/home/controllers/h5/market/sylive2/User.php @@ -1,5 +1,5 @@ load->model('market/Market_sylive_organization_model', 'mdSyliveOrganization'); + $this->load->model('market/Market_sytopic_enroll_model', 'sytopic_enroll_model'); $this->load->library('market/sylive_entity'); - $this->user = $this->user_model->get(['userId'=>$this->uid],'bizId,topOrgId'); + $this->user = $this->user_model->get(['userId' => $this->uid], 'bizId,topOrgId'); $this->biz_id = $this->user['bizId']; } @@ -20,6 +21,8 @@ class User extends Admin $row = $this->market_sylive_organization_model->get(['organizationId' => $this->user['topOrgId']]); $biz_row = $this->market_sylive_organization_model->get(['organizationId' => $this->biz_id]); $headimg = $row['logo'] ? build_qiniu_image_url($row['logo']) : Sylive_entity::HD_IMG; + $type = $this->input->get('type'); + $this->data['type'] = $type; $this->data['headimg'] = $headimg; $this->data['biz_name'] = $biz_row['organizationName']; $this->data['biz_id'] = $this->biz_id; @@ -81,13 +84,12 @@ class User extends Admin $this->show_json('', 400, '请输入正确手机号'); } - if($type == 1) { + if ($type == 1) { $re_org = $this->market_sylive_organization_model->get(['parentId' => $biz_id, 'organizationType' => 3, 'status' => 0]); if (!$re_org) { $this->show_json('', 400, '门店未添加店长类型,请联系管理员'); } - } - else{ + } else { $type = 0; $re_org = $this->market_sylive_organization_model->get(['parentId' => $biz_id, 'organizationType' => 4, 'status' => 0]); if (!$re_org) { @@ -118,8 +120,7 @@ class User extends Admin ]; $group = $this->groups_model->get($where); - if($group) - { + if ($group) { $levelAry = $this->getLevelAry($group['groupsId']); $value = ['userId' => $id, 'activityId' => $group['activityId'], 'groupsId' => $group['groupsId'], 'type' => $type, 'createTime' => date('Y-m-d H:i:s')]; $data = array_merge($value, $levelAry); @@ -171,12 +172,12 @@ class User extends Admin } $this->user_model->update(['status' => $status], ['userId' => $userId]); - if($status==-1){ + if ($status == -1) { $where = [ 'userId' => $userId, 'status>=' => 0, ]; - $this->groups_user_model->update(['status'=>-1],$where); + $this->groups_user_model->update(['status' => -1], $where); $where = [ 'userId' => $userId, 'groupsId>=' => 0, @@ -214,4 +215,68 @@ class User extends Admin } } } + + //专题报名 + public function enroll() + { + $this->data['_title'] = '我的推广'; + $this->show_view('h5/market/sylive2/user/enroll'); + } + + public function enLists() + { + $page = intval($this->input->get('page')); + $status = $this->input->get('status'); + !$page && $page = 1; + $size = 20; + $user = $this->user_model->get(['userId' => $this->session['userId']]); + $where = [ + 'status<>' => -1, + ]; + if ($user['bizId'] == $user['organizationId']) { //店长 + $where['bizId'] = $user['bizId']; + } else { + $where['channelId'] = $this->session['userId']; + } + if (strlen($status)) { + $where['status'] = intval($status); + } + $total = $this->sytopic_enroll_model->count($where); + $lists = []; + if ($total) { + $res = $this->sytopic_enroll_model->select($where, 'id desc', $page, $size); + $status_array = [ + 0 => ['name' => '待确认', 'class' => 'bg-f8e26a'], + 1 => ['name' => '已确认', 'class' => 'bg-2fdc53'], + 2 => ['name' => '无效单', 'class' => 'bg-f7'] + ]; + $topicIds = array_column($res, 'topicId'); + $topicIdsStr = implode(',', $topicIds); + $topicMap = []; + $topicIdsStr && $topicMap = $this->topic_model->map('id', 'title', ["id in ({$topicIdsStr})" => null], '', '', '', 'id,title'); + $channelUserIds = array_column($res, 'channelId'); + $channelUserIdsStr = implode(',', array_unique($channelUserIds)); + $channelUserMap = []; + $channelUserIdsStr && $channelUserMap = $this->user_model->map('userId', 'uname', ["userId in ({$channelUserIdsStr})" => null], '', '', '', 'userId,uname'); + foreach ($res as $val) { + $topicTitle = $topicMap[$val['topicId']]; + $channelName = $channelUserMap[$val['channelId']]; + $temp = [ + 'name' => $val['name'], + 'phone' => mobile_asterisk($val['mobile']), + 'time' => date('Y.m.d H:i', strtotime($val['enTime'])), + 'source' => [ + ['name' => $topicTitle, 'class' => 'bg-f8e26a'], + ['name' => '团队带客·' . $channelName, 'class' => 'bg-f7'], +// ['name' => '自然客', 'class' => 'bg-2fdc53'] + ], + 'status' => $status_array[$val['status']], + ]; + $lists[] = $temp; + } + } + $data['list'] = $lists; + $data['total'] = $total; + $this->show_json($data, 200); + } } \ No newline at end of file diff --git a/home/controllers/h5/market/sylive2/Welcome.php b/home/controllers/h5/market/sylive2/Welcome.php index 7d71c1e7..11e6c651 100644 --- a/home/controllers/h5/market/sylive2/Welcome.php +++ b/home/controllers/h5/market/sylive2/Welcome.php @@ -54,7 +54,7 @@ class Welcome extends Admin { $this->session['org_id'] = $this->input->get('org_id'); $this->session['userId'] = $this->input->get('userId'); $_SESSION[self::SESSION_KEY] = $this->session; - $org_url = http_host_com('home')."/h5/market/sylive2/biz"; + $org_url = http_host_com('home')."/h5/market/sylive2/biz/applists"; redirect($org_url); } } diff --git a/home/controllers/h5/market/sytopic/Ucenter.php b/home/controllers/h5/market/sytopic/Ucenter.php new file mode 100644 index 00000000..44a9b2ba --- /dev/null +++ b/home/controllers/h5/market/sytopic/Ucenter.php @@ -0,0 +1,36 @@ +skey = $this->input->get('skey'); + $param = $this->myencryption->base64url_decode($this->skey); + $this->a_id = intval($param[self::SIGN_TOP_KEY]);//活动id + if (!$this->a_id) { + throw new Hd_exception("参数错误", 400); + } + $this->data['skey'] = $this->skey; + } + + public function index() + { + $user = $this->user_model->get(['userId' => $this->uid], 'unionid,nickname,headimg'); + $lists = []; + $lists[] = ['title' => '联系客服', 'url' => '']; + $info = [ + 'title' => $user['nickname'], + 'logo' => $user['headimg'], + 'list' => $lists + ]; + $this->data['info'] = $info; + $this->data['_title'] = '我的'; + $this->show_view('h5/market/sytopic/ucenter/index'); + } +} diff --git a/home/controllers/h5/market/sytopic/Welcome.php b/home/controllers/h5/market/sytopic/Welcome.php new file mode 100644 index 00000000..2d76ca6b --- /dev/null +++ b/home/controllers/h5/market/sytopic/Welcome.php @@ -0,0 +1,154 @@ +load->model('market/Market_sytopic_module_option_model', 'module_option_model'); + $this->load->model('market/Market_sytopic_enroll_model', 'sytopic_enroll_model'); + $this->load->library('qiniu'); + $this->skey = $this->input->get_post('skey'); + $param = $this->myencryption->base64url_decode($this->skey); + $this->a_id = intval($param[self::SIGN_TOP_KEY]);//活动id + if (!$this->a_id) { + throw new Hd_exception("参数错误", 400); + } + $this->data['skey'] = $this->skey; + } + + public function index() + { + $row = $this->topic_model->get(['id' => $this->a_id]); + $actUser = $this->topic_user_model->get(['id' => $this->act_uid]); + if (!$row) { + throw new Hd_exception('参数错误', 400); + } + $channelRow = []; + $actUser['channelId'] && $channelRow = $this->user_model->get(['userId' => $actUser['channelId']]); + $jsonData = json_decode($row['jsondata'], true); + $info = [ + 'title' => $row['title'], + 'isAdmin' => $this->user_model->checkTopicIsAdmin($this->uid, $this->a_id), + 'channelName' => $channelRow ? $channelRow['uname'] : '', + 'channelHeadImg' => $channelRow['headimg'] ?: 'https://img.liche.cn/liche/market/202407/p_e1065373f27937f69142c28ce975a398.png', + 'banner' => $jsonData['banner'] ? build_qiniu_image_url($jsonData['banner']) : '', + 'bgColor' => $jsonData['bg_color'] ?: '', + ]; + $moduleLists = $this->module_option_model->getTopicModelOptionsList($this->a_id); + $this->data['modules'] = array_values($moduleLists); + $this->data['info'] = $info; + //获取配置信息 + $wx_info = $this->share_info([], $row);//微信分享 + $this->data['share'] = $wx_info['share']; + $this->show_view('h5/market/sytopic/index'); + } + + //报名 + public function enroll() + { + $redis = &load_cache(); + $optionId = intval($this->input->post('optionId')); + $info = $this->input->post('info'); + $name = $info['name']; + $mobile = $info['phone']; + $code = $info['code']; + if (!$name) { + $this->show_json('', 400, '请输入姓名'); + } + $key = self::ENROLL_SIGN_KEY . $mobile; + if (!$code || $code != $redis->get($key)) { + $this->show_json('', 400, '请输入正确的验证码'); + } + $result = $this->sytopic_enroll_model->enroll($optionId, $this->act_uid, $name, $mobile); + if (!$result['code']) { + $this->show_json('', 400, $result['msg']); + } + $this->show_json('', 200, '提交成功'); + } + + //获取报名验证码 + public function get_code() + { + $mobile = $this->input->post('mobile'); + if (!mobile_valid($mobile)) { + $this->show_json('', 400, '请输入正确的手机号码'); + } + $redis = &load_cache(); + $key = self::ENROLL_SIGN_KEY . $mobile; + $code = $redis->get($key); + if ($code) { + $this->show_json('', 200, '验证码已发送'); + } + if (!$code) { + $this->load->helper('string'); + $code = random_string('numeric', 4); + $redis->save($key, $code, 60 * 5); + } + $content = "【好店云】您的验证码为: {$code},五分钟之内有效,请勿泄露于他人,!"; + b2m_send_sms($mobile, $content); + $this->show_json('', 200, '验证码已发送'); + } + + public function share() + { + $row = $this->topic_model->get(['id' => $this->a_id]); + if (!$row) { + throw new Hd_exception('参数错误', 400); + } + $shareImg = json_decode($row['shareImg'], true); + $shareTitle = $row['shareTitle'] ? json_decode($row['shareTitle'], true) : []; + $lists = []; + if ($shareImg) { + $share_skey = self::SIGN_TOP_KEY . "=" . $this->a_id . "&cf_uid=" . $this->uid; + $share_url = http_host_com('home') . "/h5/market/sytopic?skey=" . $this->myencryption->base64url_encode($share_skey); + $errorCorrectionLevel = 'L'; //容错级别 + $matrixPointSize = 5; //生成图片大小 + //生成二维码图片 + $file_name = md5($share_url) . '.png'; + $file_path = "temp/{$file_name}"; + if (!file_exists(FCPATH . 'temp/')) { + $oldumask = umask(0); + mkdir(FCPATH . 'temp/', 0777, true); + umask($oldumask); + } + QRcode::png($share_url, FCPATH . $file_path, $errorCorrectionLevel, $matrixPointSize, 1); + $res = $this->qiniu->save($file_name, file_get_contents(FCPATH . $file_path)); + if ($res['url']) { + @unlink(FCPATH . $file_path); + $qr_code = build_qiniu_image_url($res['url']); + } else { + $qr_code = '/h5/market/sylive2/myqrcode/get?url=' . $share_url; + } + foreach ($shareImg as $item) { + $img_url = build_qiniu_image_url($item); + $img_info = file_get_contents($img_url . '?imageInfo'); + if ($img_info) { + $img_info = json_decode($img_info, true); + } + $lists[] = [ + "img" => $img_url, + "code" => $qr_code, + 'width' => $img_info['width'] ? $img_info['width'] : 750, + 'height' => $img_info['height'] ? $img_info['height'] : 1130, + ]; + } + } + $user = $this->user_model->get(['userId' => $this->uid], 'uname,nickname'); + $this->data['posterTip'] = "{$user['nickname']}诚挚邀请您参与"; + $this->data['fillStyle'] = '#fff'; + $this->data['lists'] = $lists; + $this->data['shareTitle'] = $shareTitle; + //微信分享 + $wx_info = $this->share_info([], $row); + $this->data['sign_package'] = $wx_info['sign_package']; + $this->data['share'] = $wx_info['share']; + $this->show_view('h5/market/sytopic/share'); + } +} diff --git a/home/views/h5/market/sylive2/biz/app_lists.php b/home/views/h5/market/sylive2/biz/app_lists.php new file mode 100644 index 00000000..9757d5d4 --- /dev/null +++ b/home/views/h5/market/sylive2/biz/app_lists.php @@ -0,0 +1,96 @@ + + +
+
+
+
退出 +
+ + 切换机构 + + + +
+
+ +
+
+
+
+
+

欢迎使用

+

好店云私域营销系统

+
+ +
+
+
+
+
+ +load->view('h5/market/sylive2/hidden_wx_share') ?> + \ No newline at end of file diff --git a/home/views/h5/market/sylive2/biz/index.php b/home/views/h5/market/sylive2/biz/index.php index 08999560..107c251f 100644 --- a/home/views/h5/market/sylive2/biz/index.php +++ b/home/views/h5/market/sylive2/biz/index.php @@ -1,38 +1,74 @@ + + + -
-
-
-
- - 退出 + diff --git a/home/views/h5/market/sylive2/header.php b/home/views/h5/market/sylive2/header.php index 84337ff5..d577ef77 100644 --- a/home/views/h5/market/sylive2/header.php +++ b/home/views/h5/market/sylive2/header.php @@ -15,4 +15,6 @@ + + \ No newline at end of file diff --git a/home/views/h5/market/sylive2/login.php b/home/views/h5/market/sylive2/login.php index 6511b360..10abe94e 100644 --- a/home/views/h5/market/sylive2/login.php +++ b/home/views/h5/market/sylive2/login.php @@ -22,7 +22,7 @@
手机号登录
-
欢迎使用好店云-私域直播系统
+
好店云私域营销系统
diff --git a/home/views/h5/market/sylive2/user/enroll.php b/home/views/h5/market/sylive2/user/enroll.php new file mode 100644 index 00000000..82d6d47d --- /dev/null +++ b/home/views/h5/market/sylive2/user/enroll.php @@ -0,0 +1,113 @@ + + +
+ +
+ + + +
+ +
+

{{item.name}} {{item.phone}}

+

{{item.time}}

+

来源: + {{it.name}} +

+ {{item.status.name}} +
+
+ +
+
+
+ + + \ No newline at end of file diff --git a/home/views/h5/market/sylive2/user/index.php b/home/views/h5/market/sylive2/user/index.php index b2ba562c..a4987945 100644 --- a/home/views/h5/market/sylive2/user/index.php +++ b/home/views/h5/market/sylive2/user/index.php @@ -65,7 +65,7 @@ 新增顾问
- +
首页
diff --git a/home/views/h5/market/sytopic/index.php b/home/views/h5/market/sytopic/index.php new file mode 100644 index 00000000..4c598c7b --- /dev/null +++ b/home/views/h5/market/sytopic/index.php @@ -0,0 +1,461 @@ + + + +
+
+ +
+ +
+ +
+ +
+ +
+ + + +
+
+
+ + + +
+
+

{{info.title}}

+
+
+ +
+
+

{{popCarInfo.title}}

+

指导价{{popCarInfo.subTitle}} +

+
+
+ +
+
+

+ 专属顾问:{{info.channelName}} +

+
+
+
+ +
+
+ +
+
+ + + +
+
+ +
+
+
+
+ + + +
+
+

{{info.title}}

+
+
+ +
+
+

{{popCarInfo.title}}

+

指导价{{popCarInfo.subTitle}} +

+
+
+ +
+
+

+ 专属顾问:{{info.channelName}} +

+
+
+
+ +
+
+ +
+
+ + + +
+
+ +
+
+
+
+ +
+ + + \ No newline at end of file diff --git a/home/views/h5/market/sytopic/share.php b/home/views/h5/market/sytopic/share.php new file mode 100644 index 00000000..68d763b6 --- /dev/null +++ b/home/views/h5/market/sytopic/share.php @@ -0,0 +1,160 @@ + + + +
+
+
+
+
+
+
+ +
{{posterTip}} +
+ +
+
+
+
+
+
+
+
+
+ +
+
+
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+
+
+ + 长按图片保存到手机发送给好友 +
+
+
+
+ +
+ +load->view('h5/market/sylive/share_script') ?> + \ No newline at end of file diff --git a/home/views/h5/market/sytopic/ucenter/index.php b/home/views/h5/market/sytopic/ucenter/index.php new file mode 100644 index 00000000..56dd4d77 --- /dev/null +++ b/home/views/h5/market/sytopic/ucenter/index.php @@ -0,0 +1,46 @@ + +
+
+
+
+ # +
{{info.title}}
+
尊享您的直播好礼
+
+ +
+ + +
首页
+
+
+ + +load->view('h5/market/sylive2/hidden_wx_share') ?> + \ No newline at end of file diff --git a/market/controllers/api/sytopic/Enroll.php b/market/controllers/api/sytopic/Enroll.php new file mode 100644 index 00000000..4fd1ab8c --- /dev/null +++ b/market/controllers/api/sytopic/Enroll.php @@ -0,0 +1,71 @@ +load->model('market/Market_sytopic_model', 'mSytopic'); + $this->load->model('market/Market_sytopic_enroll_model', 'sytopic_enroll_model'); + $this->load->model('market/market_sylive_user_model', 'user_model'); + $this->load->library('MyEncryption'); + } + + public function page_get() + { + $page = $this->input_param('page'); + $limit = $this->input_param('limit'); + $sort = $this->input_param('sort'); + $order = $this->input_param('order'); + !$page && $page = 1; + !$limit && $limit = 10; + $sort_order = 'id desc'; + if ($sort && $order) { + $sort_order = $sort . ' ' . $order; + } + $list = []; + $where['status>='] = 0; + $count = $this->sytopic_enroll_model->count($where); + if ($count) { + $res = $this->sytopic_enroll_model->select($where, $sort_order, $page, $limit); + $topicIds = array_column($res, 'topicId'); + $topicIdsStr = implode(',', $topicIds); + $topicMap = []; + $topicIdsStr && $topicMap = $this->mSytopic->map('id', 'title', ["id in ({$topicIdsStr})" => null], '', '', '', 'id,title'); + $channelUserIds = array_column($res, 'channelId'); + $channelUserIdsStr = implode(',', array_unique($channelUserIds)); + $channelUserMap = []; + $channelUserIdsStr && $channelUserMap = $this->user_model->map('userId', 'uname', ["userId in ({$channelUserIdsStr})" => null], '', '', '', 'userId,uname'); + foreach ($res as $val) { + $val['channelName'] = $channelUserMap[$val['channelId']] ?: ''; + $val['topicTitle'] = $topicMap[$val['topicId']] ?: ''; + $val['status'] = intval($val['status']); + $list[] = $val; + } + } + $date = ['list' => $list, 'count' => $count]; + $this->return_response_list($date); + } + + public function status_get() + { + $statusArray = $this->sytopic_enroll_model->statusCn(); + $this->return_response_list($statusArray); + } + + /** + * 修改状态 + */ + public function status_put() + { + $id = $this->input_param('id'); + $status = $this->input_param('status'); + if (!$id) { + $this->return_json('参数错误'); + } + $this->sytopic_enroll_model->update(['status' => $status], ['id' => $id]); + $this->return_response(); + } +} \ No newline at end of file diff --git a/market/controllers/api/sytopic/Module.php b/market/controllers/api/sytopic/Module.php new file mode 100644 index 00000000..9d8d5421 --- /dev/null +++ b/market/controllers/api/sytopic/Module.php @@ -0,0 +1,253 @@ +load->model('market/Market_sytopic_model', 'mSytopic'); + $this->load->model('market/Market_sytopic_module_model', 'mSModule'); + $this->load->model('market/Market_sytopic_module_option_model', 'mSModuleOption'); + } + + /** + * 专题模块列表 + * @return void + */ + public function page_get() + { + $topicId = intval($this->input_param('topicId')); + $page = $this->input_param('page'); + $limit = $this->input_param('limit'); + $title = $this->input_param('title'); + $sort = $this->input_param('sort'); + $order = $this->input_param('order'); + !$page && $page = 1; + !$limit && $limit = 10; + $sort_order = 'sort desc,type asc'; + if ($sort && $order) { + $sort_order = $sort . ' ' . $order; + } + $list = []; + $where = [ + 'topicId' => $topicId, + 'status>=' => 0 + ]; + $title && $where['title LIKE "%' . trim($title) . '%"'] = null; + $count = $this->mSModule->count($where); + if ($count) { + $res = $this->mSModule->select($where, $sort_order, $page, $limit); + $mSModule = new Market_sytopic_module_model(); + foreach ($res as $v) { + $v['options'] = $this->mSModuleOption->count(['moduleId' => $v['id'], 'status' => 0]); + $v['type_cn'] = $mSModule::TYPE_ARRAY[$v['type']] ?: ''; + $v['type'] = intval($v['type']); + $list[] = $v; + } + } + $data = ['list' => $list, 'count' => $count]; + $this->return_response_list($data); + } + + /** + * 添加专题模块 + */ + public function index_post() + { + $topicId = intval($this->input_param('topicId')); + $title = $this->input_param('title'); + $type = $this->input_param('type'); + $sort = intval($this->input_param('sort')); + if (!$topicId) { + $this->return_json('参数错误'); + } + if (!$title) { + $this->return_json('请输入活动标题'); + } + if (!$type) { + $this->return_json('请选择类型'); + } + $createTime = date('Y-m-d H:i:s'); + $addData = ['title' => $title, 'topicId' => $topicId, 'createTime' => $createTime, 'type' => $type, 'sort' => $sort ?: 0]; + $topicId = $this->mSModule->add($addData); + if (!$topicId) { + $this->return_json('添加专题模块失败'); + } + $this->return_response(); + } + + /** + * 修改活动 + */ + public function index_put() + { + $id = $this->input_param('id'); + $title = $this->input_param('title'); + $sort = intval($this->input_param('sort')); + if (!$title) { + $this->return_json('请输入活动标题'); + } + $addData = ['title' => $title, 'sort' => $sort]; + $topicId = $this->mSModule->update($addData, ['id' => $id]); + if (!$topicId) { + $this->return_json('修改专题失败'); + } + $this->return_response(); + } + + /** + * 修改状态 + */ + public function status_put() + { + $id = $this->input_param('id'); + $status = $this->input_param('status'); + if (!$id) { + $this->return_json('参数错误'); + } + $this->mSModule->update(['status' => $status], ['id' => $id]); + $this->return_response(); + } + + /** + * 删除活动 + */ + public function index_delete() + { + $ids = $this->input_param('ids'); + if (!$ids) { + $this->return_json('参数错误'); + } + $str_ids = is_array($ids) ? implode(',', $ids) : $ids; + if ($str_ids) { + $this->mSModule->update(['status' => -1], ["id in($str_ids)" => null]); + } + $this->return_response(); + } + + /** + * 类型列表 + * @return void + */ + public function types_get() + { + $mSModule = new Market_sytopic_module_model(); + $list = []; + if ($mSModule::TYPE_ARRAY) { + foreach ($mSModule::TYPE_ARRAY as $key => $item) { + $list[] = [ + 'key' => $key, + 'value' => $item + ]; + } + } + $data = ['list' => $list]; + $this->return_response_list($data); + } + + /** + * 获取模块配置项 + * @return void + */ + public function options_get() + { + $moduleId = $this->input_param('moduleId'); + $moduleRow = $this->mSModule->get(['id' => $moduleId]); + if (!$moduleRow) $this->return_json('参数错误'); + $where = [ + 'moduleId' => $moduleId, + 'status' => 0 + ]; + $rows = $this->mSModuleOption->select($where, 'id desc', 1, 1000); + $lists = []; + if ($rows) { + foreach ($rows as $item) { + $lists[] = $this->form_data($moduleRow, $item); + } + } + $data['lists'] = $lists; + $this->return_response_list($data); + } + + /** + * 保存模块配置项 + * @return void + */ + public function options_post() + { + $postData = $this->input_param(''); + $modelRow = $this->mSModule->get(['id' => $postData['moduleId']]); + if (!$modelRow) $this->return_json('参数错误'); + if (!$postData['title']) $this->return_json('请输入标题'); + $banner = $postData['banner'] ? $postData['banner'][0]['fileUrl'] : ''; + $setOtherImg = ''; + if ($postData['otherImg']) { + foreach ($postData['otherImg'] as $v) { + $setOtherImg[] = $v['fileUrl']; + } + $setOtherImg = json_encode($setOtherImg, JSON_UNESCAPED_UNICODE); + } + $data = [ + 'title' => $postData['title'], + 'banner' => $banner, + 'subTitle' => $postData['subTitle'] ?: '', + 'introduction' => $postData['introduction'] ?: '', + 'showBtn' => $postData['showBtn'] ? 1 : 0, + 'btnText' => $postData['btnText'] ?: '', + 'popUpType' => $postData['popUpType'] ? 1 : 0, + 'targetUrl' => $postData['targetUrl'] ?: '', + 'otherImg' => $setOtherImg, + 'enrollLimit' => $postData['enrollLimit'] ?: 0, + 'enrollEndTime' => $postData['enrollEndTime'] ?: '0000-00-00 00:00:00' + ]; + if ($postData['id']) { + $result = $this->mSModuleOption->update($data, ['id' => $postData['id']]); + } else { + $data['topicId'] = $modelRow['topicId']; + $data['moduleId'] = $modelRow['id']; + $data['createTime'] = date('Y-m-d H:i:s', time()); + $result = $this->mSModuleOption->add($data); + } + if (!$result) { + $this->return_json('操作失败'); + } + $this->return_response(); + } + + /** + * 修改状态 + */ + public function options_delete() + { + $id = $this->input_param('id'); + if (!$id) { + $this->return_json('参数错误'); + } + $this->mSModuleOption->update(['status' => -1], ['id' => $id]); + $this->return_response(); + } + + private function form_data($moduleType, $row) + { + $otherImg = $jsondata = $banner = []; + if ($row['banner']) { + $banner = [['uid' => 1, 'fileUrl' => $row['banner'], 'url' => build_qiniu_image_url($row['banner']), 'status' => 'done']]; + } + if ($row['otherImg']) { + $getOtherImg = json_decode($row['otherImg'], true); + foreach ($getOtherImg as $key => $val) { + $otherImg[] = ['uid' => $key, 'fileUrl' => $val, 'url' => build_qiniu_image_url($val), 'status' => 'done']; + } + } + $row['otherImg'] = $otherImg; + if ($jsondata) { + $jsondata = json_decode($row['jsondata'], true); + } + $row['jsondata'] = $jsondata; + $row['banner'] = $banner; + $row['enrollEndTime'] = $row['enrollEndTime'] != '0000-00-00 00:00:00' ? $row['enrollEndTime'] : ''; + return $row; + } +} \ No newline at end of file diff --git a/market/controllers/api/sytopic/Topic.php b/market/controllers/api/sytopic/Topic.php new file mode 100644 index 00000000..daf32739 --- /dev/null +++ b/market/controllers/api/sytopic/Topic.php @@ -0,0 +1,227 @@ +load->model('market/Market_sytopic_model', 'mSytopic'); + $this->load->library('MyEncryption'); + } + + /** + * 专题管理列表 + * @return void + */ + public function page_get() + { + $page = $this->input_param('page'); + $limit = $this->input_param('limit'); + $title = $this->input_param('title'); + $sort = $this->input_param('sort'); + $order = $this->input_param('order'); + !$page && $page = 1; + !$limit && $limit = 10; + $sort_order = 'id desc'; + if ($sort && $order) { + $sort_order = $sort . ' ' . $order; + } + $list = []; + $where['status>='] = 0; + $title && $where['title LIKE "%' . trim($title) . '%"'] = null; + if ($_SESSION['brandName']) {//品牌机构 + $re_org = $this->mdSyliveOrganization->get(['organizationName' => $_SESSION['brandName'], 'parentId' => 0, 'status' => 0]); + if ($re_org['organizationId']) { + $where['organizationId'] = $re_org['organizationId']; + } else { + $where['organizationId'] = -1; + } + } + $count = $this->mSytopic->count($where); + if ($count) { + $this->load->library('MyEncryption'); + $res = $this->mSytopic->select($where, $sort_order, $page, $limit); + foreach ($res as $v) { + $shareImg = $sharePhoto = $banner = []; + $jsonData = json_decode($v['jsondata'], true); + $jsonData['bg_color'] = $jsonData['bg_color'] ?: ''; + if ($v['banner']) { + $banner = [['uid' => 1, 'fileUrl' => $v['banner'], 'url' => build_qiniu_image_url($v['banner']), 'status' => 'done']]; + } + if ($v['sharePhoto']) { + $sharePhoto = [['uid' => 1, 'fileUrl' => $v['sharePhoto'], 'url' => build_qiniu_image_url($v['sharePhoto']), 'status' => 'done']]; + } + if ($v['shareImg']) { + $getShareImg = json_decode($v['shareImg'], true); + foreach ($getShareImg as $k2 => $v2) { + $shareImg[] = ['uid' => $k2, 'fileUrl' => $v2, 'url' => build_qiniu_image_url($v2), 'status' => 'done']; + } + } + if($jsonData['banner']){ + $jsonData['banner'] = [['uid' => 1, 'fileUrl' => $jsonData['banner'], 'url' => build_qiniu_image_url($jsonData['banner']), 'status' => 'done']]; + }else{ + $jsonData['banner'] = []; + } + $v['status'] = intval($v['status']); + $v['sharePhoto'] = $sharePhoto; + $v['banner'] = $banner; + $v['shareImg'] = $shareImg; + $v['organizationId'] = intval($v['organizationId']); + $v['dateRange'] = $v['timeStart'] ? [$v['timeStart'], $v['timeEnd']] : []; + $v['shareTitle'] = $v['shareTitle'] ? json_decode($v['shareTitle'], true) : []; + $v['json'] = $jsonData; + $list[] = $v; + } + } + $date = ['list' => $list, 'count' => $count]; + $this->return_response_list($date); + } + + public function detail_get() + { + $id = $this->input_param('id'); + $res = $this->mSytopic->get(['id' => $id]); + if (!$res) { + $this->return_json('参数错误'); + } + $skey = $this->myencryption->base64url_encode("a_id=" . $res['id']); + $date = ['url' => http_host_com('home') . "/h5/market/sylive2?skey=" . $skey]; + $this->return_response_list($date); + } + + /** + * 添加专题 + */ + public function index_post() + { + $title = $this->input_param('title'); + $dateRange = $this->input_param('dateRange'); + $shareTitle = $this->input_param('shareTitle'); + $shareImg = $this->input_param('shareImg'); + $sharePhoto = $this->input_param('sharePhoto'); + $organizationId = intval($this->input_param('organizationId')); + $banner = $this->input_param('banner'); + $introduction = $this->input_param('introduction'); + $jsonData = $this->input_param('json'); + if (!$title) { + $this->return_json('请输入活动标题'); + } + if (!$banner[0]['fileUrl']) { + $this->return_json('请选择banner图'); + } + if (!$dateRange) { + $this->return_json('请选择活动时间'); + } + $sharePhoto = $sharePhoto ? $sharePhoto[0]['fileUrl'] : ''; + $banner = $banner ? $banner[0]['fileUrl'] : ''; + $shareTitle = $shareTitle ? json_encode($shareTitle, JSON_UNESCAPED_UNICODE) : ''; + $setShareImg = ''; + if ($shareImg) { + foreach ($shareImg as $v) { + $setShareImg[] = $v['fileUrl']; + } + $setShareImg = json_encode($setShareImg, JSON_UNESCAPED_UNICODE); + } + $setJsonData = []; + if ($jsonData['banner']) { + $setJsonData['banner'] = $jsonData['banner'] ? $jsonData['banner'][0]['fileUrl'] : ''; + } else { + $setJsonData['banner'] = ''; + } + $setJsonData['bg_color'] = $jsonData['bg_color'] ?: ''; + $createTime = date('Y-m-d H:i:s'); + $addData = ['title' => $title, 'banner' => $banner, 'status' => 1, 'createTime' => $createTime, 'organizationId' => $organizationId, + 'sharePhoto' => $sharePhoto, 'shareTitle' => $shareTitle, 'timeStart' => $dateRange[0], 'timeEnd' => $dateRange[1], 'jsondata' => json_encode($setJsonData, JSON_UNESCAPED_UNICODE)]; + $setShareImg && $addData['shareImg'] = $setShareImg; + $addData['introduction'] = $introduction ?: ''; + $topicId = $this->mSytopic->add($addData); + if (!$topicId) { + $this->return_json('添加专题失败'); + } + $this->return_response(); + } + + /** + * 修改活动 + */ + public function index_put() + { + $id = $this->input_param('id'); + $title = $this->input_param('title'); + $dateRange = $this->input_param('dateRange'); + $shareTitle = $this->input_param('shareTitle'); + $shareImg = $this->input_param('shareImg'); + $sharePhoto = $this->input_param('sharePhoto'); + $organizationId = intval($this->input_param('organizationId')); + $banner = $this->input_param('banner'); + $introduction = $this->input_param('introduction'); + $jsonData = $this->input_param('json'); + if (!$title) { + $this->return_json('请输入活动标题'); + } + if (!$banner[0]['fileUrl']) { + $this->return_json('请选择banner图'); + } + if (!$dateRange) { + $this->return_json('请选择活动时间'); + } + $sharePhoto = $sharePhoto ? $sharePhoto[0]['fileUrl'] : ''; + $banner = $banner ? $banner[0]['fileUrl'] : ''; + $shareTitle = $shareTitle ? json_encode($shareTitle, JSON_UNESCAPED_UNICODE) : ''; + $setShareImg = ''; + if ($shareImg) { + foreach ($shareImg as $v) { + $setShareImg[] = $v['fileUrl']; + } + $setShareImg = json_encode($setShareImg, JSON_UNESCAPED_UNICODE); + } + $setJsonData = []; + if ($jsonData['banner']) { + $setJsonData['banner'] = $jsonData['banner'] ? $jsonData['banner'][0]['fileUrl'] : ''; + } else { + $setJsonData['banner'] = ''; + } + $setJsonData['bg_color'] = $jsonData['bg_color'] ?: ''; + $addData = ['title' => $title, 'banner' => $banner, 'status' => 1, 'organizationId' => $organizationId, 'sharePhoto' => $sharePhoto, + 'shareTitle' => $shareTitle, 'timeStart' => $dateRange[0], 'timeEnd' => $dateRange[1], 'jsondata' => json_encode($setJsonData, JSON_UNESCAPED_UNICODE)]; + $setShareImg && $addData['shareImg'] = $setShareImg; + $addData['introduction'] = $introduction ?: ''; + $topicId = $this->mSytopic->update($addData, ['id' => $id]); + if (!$topicId) { + $this->return_json('修改专题失败'); + } + $this->return_response(); + } + + /** + * 修改状态 + */ + public function status_put() + { + $id = $this->input_param('id'); + $status = $this->input_param('status'); + if (!$id) { + $this->return_json('参数错误'); + } + $this->mSytopic->update(['status' => $status], ['id' => $id]); + $this->return_response(); + } + + /** + * 删除活动 + */ + public function index_delete() + { + $ids = $this->input_param('ids'); + if (!$ids) { + $this->return_json('参数错误'); + } + $str_ids = is_array($ids) ? implode(',', $ids) : $ids; + if ($str_ids) { + $this->mSytopic->update(['status' => -1], ["id in($str_ids)" => null]); + } + $this->return_response(); + } +} \ No newline at end of file diff --git a/www/home/css/h5/market/sytopic/h5.css b/www/home/css/h5/market/sytopic/h5.css new file mode 100644 index 00000000..60458b87 --- /dev/null +++ b/www/home/css/h5/market/sytopic/h5.css @@ -0,0 +1 @@ +.bg-f8e26a{background-color:#f8e26a}.bg-2fdc53{background-color:#2fdc53}.color-fdad67{color:#fdad67}.notice-swipe{height:5.333vw;line-height:5.333vw}.van-cell{background-color:transparent}.card-module{position:relative;margin:4vw;padding:4vw;border-radius:2.667vw;background-color:#fff}.card-module-footer{margin:-5.867vw 3.2vw 3.2vw;padding:5.333vw 2.667vw 2.667vw 3.2vw;border-bottom-right-radius:2.667vw;border-bottom-left-radius:2.667vw}.card-module-header{margin:3.2vw 3.2vw -5.867vw;padding:2.667vw 2.667vw 5.333vw 3.2vw;border-top-right-radius:2.667vw;border-top-left-radius:2.667vw}.card-module-photo{position:relative;margin:-3.2vw -3.2vw 3.2vw;max-height:50vw;border-top-right-radius:2.667vw;border-top-left-radius:2.667vw;overflow:hidden}.d-icon-1{width:12.8vw;height:12.8vw;background-size:100% auto;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAA8FBMVEUAAADx8fHx8fHw8PDx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fEcHBxJSUk+Pj4gICAmJiY2NjZZWVno6OjX19ezs7Otra10dHRtbW1jY2NDQ0Ps7Ozb29vMzMy7u7uTk5MuLi7U1NTHx8fDw8Ojo6Oenp7j4+Pf39+YmJiJiYmBgYF7e3t2dnZeXl5SUlJNTU0c4Je0AAAAK3RSTlMAC0j+4fTs251PH/Hf1r24dlkUbAnp5NGUFqdwB8jGmJB4XEYpJPOoXR0SioNUSQAAAs5JREFUaN7t2tlS4kAUBuADiSSRHWRT3BDXPxpkB0Xcx3Xm/d9mkjCknJCGADmlF3x3UEX+dDpVnNPdNEPmIFtMxHNHcJMisUKimD3I0OJC2l4BMxX2tBAtIry5Bp/WNsNz3/xWDHOJbc0zjI1UBHOLpDbIp7SMhchp8mM9iYUl12mmShRLiFZmPX0VS1KnzkRpB0vbKZHQuoIAKMKJqOYRiHyVPB3mEZD8IXnIKAiMkqEJ5W0EaLtMbioCpZJLBQGruF7QKAIW/f9lTSJwSfoiDQZpcoRkMJBDNJYCi5QzgAhYRMZDyIJJlkZiYBIjWxhswmTZhLdm51L35bJzB2/H9hQL6qtWTfet1hJUZNY0a4L7F1xfkNCEJ80M2IWnD9104Ytu6sDTrhmgwJP5/I17+HJvmPMATwpRCd7MH/XhU98cAryVhC+p+Ztz+HQuDgjTPm/APqm8ASoleAMSFOcNiFOONyBHUd6AIwJvAFYBq4BVwCpgFbAKsJDEHRDh/suMcf/pF5jLFv7CS4WwfK/dwUW6eRneSHC5E5fvUIXFb9fqW+qfnWs4mkO71+i/fPnuV+ezbvVCXVHxKyzfB4Zuq4+v9PRbd9QfnzHS023GQFi+lyDwNErow/T8WB99chi9dgOmP7rtCQIlYQsFPFgXNdpotHvO1c+Hw77T+HVbV3YvatQfIKDYTaDQ1XWzIb077ebF6wCmwavTP9++SY3m9RWEdp02Vqg17rbf7iX8Iz283+ojbUylOY24UNu+048byf3Cdu2RPcIhasTpGNNInVvrWU+y5qbWa2CaY/bFEOblHJl7QWqLfUmNe1GQfVmTf2GWf2mZf3HccYKAnXBvUHBvsWzwbxLxb3NNqsoIhFwlgdM4AhA/JaGzIDZLz2iKchFLKpZpOm25DWvt+7fclzo08FOOPSx4cONnHT1hOjwjPv7jMZi1XNzP8Z+/pEwnsPTgrJ4AAAAASUVORK5CYII=)}.d-icon-2{width:12.8vw;height:12.8vw;background-size:100% auto;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAABX1BMVEUAAADx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fEcHBz45mgmJibv7++lpaV4eHggICAiIiLAwMD36Hz4525jY2NfX1/r6+vy8OqUlJRaWlo+Pj46Ojo3Nzfu7u7y8OXU1NTMzMy3t7eurq6dnZ3265v36YVzc3NISEjx8e7n5+fl5eXh4eHc3Nzz8NnX19fz79HR0dH07sr07Ln166aMjIyJiYn353JTU1NMTEwyMjLHx8fDw8O5ubn1666hoaH26qD36pKEhISBgYF9fX345mosLCzy7+De3t7ExMT07b/07LSXl5eNjY3353RoaGhVVVXk5ORCqtCqAAAALHRSTlMAC/R3Rx/s4vHf2tbHuFkUnGwJ6eTRlFwWp3AHvruYkFBNKSTcqJ35UUlFEquth2QAAAQ4SURBVGjezdr3W9NAGAfws60dlCEgUIaICLi+aToplFIqq0hliChLhiDi3v//Y3OkNDS995I2efTzmxrzNvfevZe7C5PoeNzZeyfc7UGtB/6xnju9nY87WONu3LvbA6meu/dusEb4+j2wyNPvs/3jB0KwJTRg5zG6vH7Y5vd2MYvaA2hIoJ1ZcbMNDWu7yaT6gmhCsE/W+hNo0gSZiUgrmtYaIZp/DA4YEyZi9DYccXuU1XWf39+RCPfrlrUWOKalTgkcbIWDWgdNAW7BUbdM4wsO66vpoEE4LHi9s7bBcW3X6idc0G6YXgJwQaA6BXnhCu/VA/jhCn/lETphQewo96t0qCofCweJ4nYMVnTqAUKQ+pL4qBjN7S1ALsQ4H2RODhSzqUVI+XiAftC2ppX6En8gMc5T7AEprlZvqebzBcMfC2nQPFqaR0B5uqro3vxIb/Bsby69z+t/lyyCNlIOMAxCdkq/U2IbBrF0pdnO6f40XA7QQv1+/T5TW+Z+VVK4PXrmYSwCwmX7qPG6wc8V7hSUCNlJ4/wOh6L+uJzS/jlFdtdHVB3aUvn9xUNqKaldkM9S9YiaKnkC1COILSuaXXLqHBL/PkUTByXBG2kTQkMsDJE3vP+AtDanXfQeQmHWDYEj3v95/5Q1kroOkW4WJJ8+Ia3iJbodPUw4xnh91sevrCvPQkgY4JjXH0itqVqas/YD5LQAPyDHq1XafoBV/f9JfdcuLBIBqE66AbkT7cIL+wEOte4HCxa0AL/sB0hpUzss+Ex0IyoAL2OwIJtsLIDW+wowezm5v/ISRrPlK3P2AxS0HMRg8ixaNvn2E65sJH5/j9kPwF+F6pTJyeilZ69nICMfB0sw2YlWZFZePW8iwKmgDr+IGvzcedFwgG3+CipKAqc31XxjATAnqBVfozU+vCOaigiwqwWYhslMJmqyvzNjP8CCojmGyVm0jnfCAA/oOlx6SqTZYF8YwA+RRf3VUJZm7kw4ZYYgdMEjLKPWa9PtM9+eCyd9Ym93vcDfek6kaT6bJ15bhiB2nOSvLqZ3hpXr+aUG2xC9y1LU10prNRU1WjX5SrLr4gVlT19ULsfMFY9bkZQjr2SNGdtVLpXi6/XSnPkE2iMWAe00pYdQp3NLC5+z0Mx/0APsQCLCl1CkxbxikJzeMKQ5Mw9aC18ESmR3U8YQq4Y0v4XEMF/GSm2eGxbHB9U0Z6ST2oi+EJdaj8/yMXE1v3+rPIB8Ic7GYclaungxNfs7F7tK8770AcaJzRCZrz/5EKP5Kts5LglVN6TcMeD6lprbm4Kub2u6vTHr9tay65vjbm/vu3xAMeH2EUuX+4dE7h9zmY0GHBpho8KjxjAcECbOfJ84cVj6hBEGe9Gk3kFGe9jcgfXDf3/k3tRHA//LZw8Nfrjxf3164tTHM3IdPsHnP/B0h8uf//g6GO0vllRizXSsKNsAAAAASUVORK5CYII=)}.d-icon-3{width:11.733vw;height:3.2vw;background-size:cover;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFgAAAAYCAMAAABJE8pqAAAAeFBMVEUAAAAcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBz///9c4E7Nzc2YmJheXl7z8/OysrLm5ubZ2dk/Pz+Kiop7e3stLS1Z2UtNu0M2eTMcIh2/v7+kpKROTk5Qv0UhNiJQwEVtbW1QwUZJJJiIAAAADnRSTlMA/R7z4rl3+adYcSGlTiaTTnUAAAHKSURBVEjHrZWNjqIwFIURBZ2Z3Xunt6UF6g8wuvv+b7i3tdKuSTGT4UtAq/Hz5JS2RaCsq90efsh2V9UfRUp52MBKbA5l9P7ewops34rA+3LcvksHBDMy+YIoCf1+9769qMEgRARCS8wgNCJO8AAxrcNnLrM9iDuI4U0QW9RCKKSxt5CKE7au519hcDmfjsfT+fIsNqj+F0PbkHvtsQcAKz2I0tOC58CBQxHXr0/P1/W5YqSkCMZZWxZr5RKzMoVCGWVRh7zsvXNLMz/9oieN1HG9RqHhRkYnbmLiZg5RFxV4zp8z51TcSU+HlE7egIwh6p2YYsc0i6tiB55TFJ9eiFmmjEFOZyEr3hVhHR+j+JipInwihgGNFQgj6s7mxPsClsWS7zFX2ytUGtVIgyASqGyuYxYvV2GEx4RcjLUNCqGU4PBT7qngKmB58hryhCj9H9cx8eWeauQrl7h6iC+3h/fv5dXk0ZzYtUMydix5cKcO4rhAblfITV4UE2lN7M8tadh8zOJkSWcnj0mryIjDkoYsLeeKHQuiFiapvTggljYhyCLxCQkjovFVeFi8sG3Cd2jl5O/hn6eljR7WJR5NsC7xMIUV2SfH/z9WL3oDNZi63gAAAABJRU5ErkJggg==)}.d-icon-4{width:6.4vw;height:3.2vw;background-size:cover;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAYCAMAAACLI47uAAAAXVBMVEUAAAD45mj45mj45mj45mj45mj45mj45mj45mj45mj45mj45mj45mj45mj45mgcHByTiUTs22THuVdNSSw+Oie6rVKtok6HfkDg0F/TxFt5cDtcVjEtLCFrZDaglUnjWTMoAAAADnRSTlMA8x75uaZ3VuRxIR/j1zKheDUAAAFJSURBVDjLlZTrjoMgEIXxWtvuzoAigpe+/2PuATTEkE31/Gk9c74ZSEbFrrKtfyr6R8Vv3b5EEuJNRd/UlCn/KOiCiseRf9JFPff+dFlhRlmQlC4aUhL18pA10hJ5xxCkpCz8PRoi5iECzID4UL/x5N0NNjSypkaId8ihkgBJu0xs5Fn8TDwTvUUbnBVWDlhmhROxDtbAI1Er6pDDOJUDMTOx9JNUoGvRxdzGWw7g/+Qpq5E1vMDpRBVzSvN4vrSvO9ak0H5CceYPopU4jt7zqnZgkUEGlZWtwZQR99XsTgC6LNmR0NbM6K5YWwyDugSogT8ZYHjWvriwxBCoTgAOvGaAgreQN1cMgtoEeDcDaOBwV4eSIuiVAF89r4aMTRxBcZBfjWPnvNx5+XpYdq+Z8FSUAbiz3veAp7gF4BW9BTSluAxUXfrM/AEhQT30WE9oKgAAAABJRU5ErkJggg==)}.d-icon-5{width:13.333vw;height:17.333vw;background-size:cover;background-image:url(data:image/png;base64,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)}.d-icon-6{width:13.333vw;height:17.333vw;background-size:cover;background-image:url(data:image/png;base64,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)}.d-icon-7{width:16vw;height:16vw;background-size:cover;background-image:url(data:image/png;base64,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)}.d-icon-8{width:16vw;height:16vw;background-size:cover;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAC+lBMVEUAAAD////1q3rhTkT456/55ZH////01n74mJX1lYn96Iz0VVfwnZ321n3////////54X755YXz3If////82W375YT2XF367JH3vCz////zxVPmhIX3hoXiLgr////3uSDzfw/73nD66JH////51HLvu0D////tNAb4tgj2tRj6twP6uQDkNxf/+/v////3ugzwlhvtKQb6zGb////1k5P4wDj0nJb8yUuWKyntKQb2sx7sKQf4pSLrQkPybAP5ryT2xY62Njn1UlPsKQb55OWgOSf////2XS/yzTr2VSnxTE7zTk//+/j2WSz0T1LwSkzvMAvuLAntKQb02n3zd3L2U1T2UyTxMw/1TiT2WCn1Sh762Ur41kb1joD1QgLrHAD23X7+7ef1MAD1RRr5saL20UD1OQD6t6nvSEnrS0r720z7xCb3jor7yiz1Rw3xMQvzPhb+5Xf3gIb7xDD80sj9313+7JT7ugP+6YD7vSj95d/+6o303YX2YTnoSkfyORLydG/+8/D93tfrQkL2WzD4moDzSkv2UBn82M74moj3g2j2mZv7z8TuZF/2Z0D94mX93VL5qpb154HubGf801j2blL8zkzgP0HXGSH0b2v0aWP1iYX2WFn11Wf6uhz2qA3113TtUlH1aEj74EH8zzj54YX3fGHuRUbWOTmtJimdFhzyQyP4k3j+6W7800D+7oXpOTz7xTvzKgD3fHr4inH0O0/xxjzIMjTxU0Xz1jr0mgX5oo/2dE3vmxT81lD87U/gMjO6EiSgISPsjg37wrX6vK34kpz/9pf014f3fFb8x0S8LS/7yb/7xrj6v7H3iJT3dnX3q1HqLkGtGBj4sBb03j37uDj3o4jMJyb4lyHHEB/KPRH+6V/aGTHyIQDpX1n5qCb6wLr1xIPlVE/gdAjvWk7bSEf7xBXuzFHzO0f47bf2uIvmbGnxuCmNBRnToUCAEhjcWxTvhon6rGHzo0L3mDfMZxDXSg/0wpn915LRfiySHBpmFxu6UBNDHJgCAAAARnRSTlMARw4hHf2jOfsl5tx0Ui70jXpoXv3RtKMjlHVlh0N+QP3kv7Ow/cSShF7l0IFv46js6+PW0dCu4NzYxr67282b39O+uZ+VUYxKsQAAEkdJREFUaN7slrGL2lAcx0OqhAYEFeVEKKJYUDu0FI5CKe3a3VEHly4Gh/B4yQv5I16GkE3jEMe8kOUGwSw3WDIHQehwm10cu/f3klZ6XoeAxy3tZ4goDz/v9/398hLhP//5dxGlcl0GOpWC8ISIpe6EAEFgavKTqcVCpU5VouJoPI6wb27lkvAEFKpXRYJVFXvHDZAoI1/blsW/rZSq1apUeCRtRTY17rXQ+nbtuuv1xlWsYHv1wCyVYaW21TpVUbgcqaMVi0WMuXdjIGQYC3AnzNc64tkGVdMkPqU+bKpweb3ytrgqqlOKPfcujncGwNWu52+v7mnbqknwzdF1E/RtW7+0ZrFurgBs0RHaxeFux7ULQ0m4OaicYoHZIwH9nEAY69tbdxp0LhRXwTtZLUcWZtdv7R2IM5SF63qqVsp2V5ZVSoiluK6+ANa37gg29ZCGmL/g1WQyWc3hHho3n5ftnfGHORkFaaJSPZ29qeImCkJIUSCPBE8awjn9wevckwVeLv4SYbsliFU7NAxkKBwwL3BQFoSSDF7fn6L37+IwDBEnWSO/LJzzStdbeZP+Jb5xcFsSQPI2NBAnM8/8dqFU1EyYZAv1RKntZOrQcBdW+zzXnq7rrxr5xM3VEJjMbxiuVYU/zAqaQaLJyK/L4LWoFfIUS0snBsI4XCxYW7rf39fgBXNLzFfxcjhcDudHZPldITXPETfPOEqiwPGpqRa22Pu0lK7tZBiGh5v3+qv/5nUec2m4BIbLl0fmr0pZCHPjZIa6MDEty/KMVra+Zjs2l4eIRZXznIG8aRe+LlPzd9ewiJwdR2XHUGYZio4sikdThvpCyvO2DYDZcyL7XsVi79WvgvPNV3mZcdyEOKhn5m68QLOMgzFiLGLGp98bbWdexqjtNM9u4tTcz3tirmrLWm1eszeuR4O6lP7DOz5bKcrBY2OG3p9aU+PeKBpTNbqRzo+Pga738h9dk/l8bts4XN+FNJDTvpVCRQEpvxwOMzYbnLrGhwsWW5hQdi2c09MHQn66tciOHCcy1vsQJumK19H0wHrQUw6HwalrTTtkEaaYmiRCD0MV+y0hP2LXiZnnMYbW+12kBjJX9w5QrQdEPo2uG7+9TsgwpdQ3TYw+iMJlgDlGiGvQfn8XY9UsdqTGu+nUwlQlhPBXsDKXiM3Qi7iWaASHb54Jl9N8OVPSjt7tf+wcrBJNKxIVrHDhYs3sSIXWtWPT7Ltq7d68EB6D1ocEnnbQzwVXxyAgoAMhfGYQ2YSfOCahzv4j1Ps49H+yXnchTYVhAMejiNYXWFQLMhhBBNFFhEgXfUMgZzAv5q42wouEmRNyMZsYEgS7iVFUNGfWWlvMBmvGsmVfcwv6vNhyrbZaKJmrsMzMlqlBz3Oe87adGbiT/T0780L5+bzn9XjcttFxC3I4gB578eTsGZPphM/XQMEzL83fsOL82Rf9OzbN+Y+t3rn5/rtsNvsOUigUqdTzpjp32pTGfPAU4NaehSejF/0pxYbZUvS8umDp8uXL5HJ5iXyl6cyH9V/4NsM+azrseO8SunrVddJnhoHhZrOlZFmJvGTZ0tmwy9fB/yzzG81+s+nMiurqRz+x8f37x8fHh4aG3n7DnkFj37+nnqT9D1l+s7kZf+P/sYXyZqixscF3ov/x9evXA0a+WMD4AIpG+ROrXVGfhq/FhLeHi8pLqSVroOLMBeXlZWW7/PiEOb/BlE7dtBMaCMTa2u1GAxQ1oMw6bvyocJkbm/nmE3w5elwmO47Bu6ysmAVYs18mi95uNl/GTOlrB5VVASG7RtMWEwrEAn8yavbV4VWmaKu/jBoMMiGwF868xjKYyPjWzz9hXtSGFK2D9ipgYlWxWBvnbP9rXa2OENylTdgJPNK+b+1tmJ2Klc4Mo3vu0alq6Mh5netr62Db0SrKWlvrVKk0Gg2eMPxMpVRqelvvuk6KSj/rYl8DP5imfdXcomBDPnyzEKbI1aiUICN8QEjLn0MEs6TDboTteTCXNy0cGMFEQrOBz+XgH9NgIsEkFbIQTAPPHlYjXM/DR3OwEzBCKXQBvu/S8uw9pOFgMNMlL/Whv8Fil8FEYnAGWEmbTzqs5uHXhTCXp2KchWDkWAh/VIKK4Zvkia/WFcIcByCpcHCQADNXhydcaouKcsKHRurmqmkSwS0ttSApWeSKYcJxYotSlUsSrM7BKBNcyTEUDqzSoudhEvEFJ4JxTeiaSIDVavHEYphDllwGH0ARD6R5GFg+vCwSJlbj5nJfKIRrmUksRjB6LIJpWWhpioHPCXA1weKlbqms5HIBCodeT7B2Osx2v0oCXC2a+CibmMFOknGpeTihK5i4C2AWZ9kzIzy33DA6OooTw+a66G56/Yr+SCBtrYWlBpj2M8E4sgdumQmdqNBYb6eN6oB6Ns3AolxaNmp8i9cY4Iq6X3HboBWXGuEW6JhH7/F4jvHZqM43r+66dLoaHbzwqAH4S/gpdoXaOq+o563SWB7sTdoG+j5hVZ8yHVSQ9RQLJsNxgEmldKGJYS/f5GQksnUvuMW0Jm/i7JQ3nOyw2TIDwGeEGViRSJxvGGAYNJc2NDEyOen1RqCta4EtFh4iWH2jPjs1Eg8ne2xQJpMJXolAXlFxr3c43p+oyc8VmggHg7A28G27cV9JhyemRmDilgErNNARfIoydgXDdYaS8fjzbhGccN3p1evhZsopVdvnSYBfToP7rKdPWzNwVYGDQbBjEO6zzs5w/DNNXCHA3Yk7vcIvnmrxP8BHPtTfHxlGuM8KcF8Gt5XNYxFuHHDowe3pCb9u6q5At6ICXlB34lKXcFeXBv+mtI5dGoaCMIBDs/ovZJQsXRzF0aV0CUbcXQRDdNFVSkEQHLrYQaxYrQiKk0uCGQqik7MKUhFF20FqxYLaQQp+l9ylrw009qOdf9y7d/eyubXFcFXgIioGfGJjZxCMbJC8vn4G2PEzanz/0OVnbG4EeGxlaS2Cfwl+FXjbrtAKwY/+AXwGuLMcwp7AC+cuXNqZo8H0PJG85zxf9uD3V2wum1B2AR8HFbeXWWT7zssCBoskwZoC7668MLxa7n4yjFTsnApvRHD9KKME8Lj5TzhlTOoqLBvEK3c/athdBOdLFamYWIZx1I8x2B8/dumkk2HdsqZSCtykimmenJ/T2sV2A+5OvhjAXHBAC3zl8zlLxV9vJlzICbdam7IsKx3BS5gngeuAc40SvY2A1R6bctSPNYbFBuxidySPk06uNWNoUjHDuNbO1Q3gJ7hx2IzgqsBS8bcbusOP2rA4E7rAm2vzDFdV2FZgROD7EPZ68DVanHjUqUlLYjCML+t5nqd9ggtScU5gsw/e768YGxMwZ0jF+jQXbGgC774w3Lp9qF3YBbViMwY/3A7ChwJnh8BIegauDBTgaJAPWmXA54Ui7hb3eJHaC12BO+VMfGOSmgRDlgYL3GTYc9oBnA/hHGBGVdjpcz0/03D50ywJ1iaov3F4NoAbhZ1BOKvCsjElvserOoskrEw9ramwOsiASypMqCSE64MwbUwE8gjvMcN/tJoxa9tAFIBxcANd7EFTllAweHOXzN3KA8MFzhl0QZAURcbJ1NNgOogExaJO5NQEMhQydfDgDO4kQgj1Wncy+QmCZCodM3Xsezqd7NQ2JIM/684P++6+9w5OxsaH2UG+VOJjLT7IrHPEN/jAW/XVCXqRl4s7KCbz728/SHycihEUo/Ig4eqKxJdvtPgmu2Oe4L6o73TvXj/jbwg5w6hUjPf3yJ+Uw4edx4v6PlH/Mgf8Oe7x4dVTPv39NTWgYhhGLr+y0FpY3ygCsKUAUCyvF+a6cyUAr7k/7Owsgc7FXWgDrBVmtPk1gGa7GsVx/GEJxFG0dz4MoVj5r+hCGYLrRiyFEJzzGrKVNPrIUmzp9nJwGufCb+w5HRtW80+8G3C3GbmuIHhGjXLAa4oFepViFiMqbewIjmLhu+7eeQjlqZrzZag7DYe8JBYcr4XU5qENGj6J0KrFjtUwu1CamFdhZDmW6+Ob2BIkwqUUUuWAz5IyqnFJa86zc55pZhEcl/Zda7thhrCuvQaER47luH6Cdteimpggk8ZRj12Gki0GJyVSgsSOZe6ee8VCen7LrP9xG8UEaSXVG521z2QKSTUYYtUcg0XIDE4XNbSm4u3qbpuVdMGjqoViNBMDhR8wL4vl4HtHsTPoDVXUlyIajG3brkeD+vheMd6/jfrpgOEZzleozXQTcdUMi7lEXMKCTS32e91mQpcB0+HX6NYDhb3ZAcWd9OM+o5fEbQs0rBePdRyMmnqBrUxsVk/bbG2FjtLb8MhKxA6J+zBLn8TM87wW2J9RzFotFAsZjaAVALsedIMgaAHDvtmLfqYDWGDrbHskdtOKq0f2Rj7Z6YtTk8SoRve/dsxex00gisJJkzIpUqVJEyld8hgXIeEWGaQQGaOhG6WgQkIRCDQsQkgUvIALV1SWu3XpLZBst9vts+TcATs/3vw0UZqcZWdnhjGfz507M2t3i2sNfhLTUQg/1GDrtusWAG/WKX34WFM8n63yLqa4S1b5J7+y6NitY8rW8B6XwMfJBlRwtWPTrnWsX1PvmQC7AENm1yWmuepGrUwz7zpTAByhdRjB3cNDRnvfLMlaf9oShevoUFqU1oeoxdYYU+jmGdWbLsWz53dUuuLMBdgx2xe8ol5RxeD5BP7kf65ubuYbn7WZ39xUn/xPDCZ9xiwSgNcbPwa4sygMsyKirKCzyo2/WlBaZhZFYhbTrb+MqPY1VoNNgDHJvHsgt0xN1mj3M4zQzWaJlrvBEzNTLEUzTdcE9gWDV5TZJcKaZj1iejjUZQqbopvGRlJEFLm5RcHDUstFpBncW89+ALOWHtInEEuuipbo1lu6HsJXVlUVAXx7Aa/L5gF2l31UkFWt+nVTwhyDF4c6pWj5cCIrr5B9/sh9FAzyhBYVUT2TqEkT6bH1XYAXdJDSO43gSngAyzwXfr9vXcF9ye3iaNYTODSTDGb93qLtHXLLc92JewWG5VHunF+ZdsLlWjrWPMybhfS2aNFcwEsAi+L+puh36GvuKEtqijQ48OYM1jlpUS3AZOzInX0DdrTliS3zCD4Fauy9TCS6ANb6Bnx0/YLIgtIC874KqdRgD+BYh1otxZEwpBCwg+txMKMnzzLAzErXduU9UYiKBi/2+/1pHxoaLBksijHTU4RagxuAhbeb3mRpL2WVEmWayVjN/R48kW19W8DJ3gHYPCG/BboZfJRyW1RStgB7GixXRb8NEErua0KK8jM4zXg52e7cy4hCYV8E7lcwVXJ2IbO8Ne9y0l4il7HIJ/BBiQw5pMFCAKxMW/h+i2nhEA0ninfIcSEHzLHwSjh2Pe3YwD5hQg5TIQZPG8gMZKAnLZuMCBknB7yq4cxT7FhsAOkVwFs7AdhWu3aLoamhtvu2iBHcOmwlv8nQ3mH9OWKXElQrb6a5s5y5egOZtkxu4mJJATVVpXzhy6pquCkVwhdVbUl0guP0/pRZAHtbothCCpveAxxCcePnqk+RXBhQekNMdIxBNtRMm82NPJ+dt8yXFCikGqTR2zsoaNvwdHcK2zbg5pbBqaUf7bS0aFP2Ycs1screWd2z3yNuG8quadSxSnnUwGVigwoZRm7M7AiHBB+LWaMAndABXStkMAv4gR0HUV23jpNs25J7d3dEuKP2RK1wdFeW0l1ISHSFzMYIxUgoSRKj4WNxzC7lXMgtXStQmKz0WAyFReEtskk1TZMYhiNVU+FMrmAyGpRqEOTEvg/6ajcgCQLaJ4ixrBYpwBqLn5l9z1OsY73P7QlrGENxrcFZtdtdoqQRxad+Ua450x0DmtnKqIIhOPSYRmMWZOUWCKWU0e7728BhnqOGdrCNUUluO9n5v723tD1b5nHX4u6RxE7Z7DdybI4fSkjfw1O4yu6caQiqWjlyC7sSFtNo+UXWuBP4N0Ly45392MksLc7d695JuZbcLSbDeinvDTWC/55GZ9Io6d3XT8Zv6JTLr2Skvi6/fRWC9LXBBSzA1OhFty7jp4eMlfOTZjyZppdE9Oz7D0/1znNx5xdCGHGdxacM/ji6fil47/2JcE9662z66HQhv6HFvSHk3Py1bJzbfJag4OsitFDoX/Mnmnte06b0auJeov36BZXt4HiPSkD+H0oI71Fh2cX0/uWTKz1/RbQoD6fwUQV/rPBRneospRevdT5fo9+9eU9/Te+fvXz+i6+bnj/9S3qOr5v+65/oCx/dq4sGR7e+AAAAAElFTkSuQmCC)}.d-icon-9{width:16vw;height:16vw;background-size:cover;background-image:url(data:image/png;base64,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)}.van-tabs__nav{background-color:transparent}.van-tabs__nav .van-tab--active{font-size:4.267vw;font-weight:700}.van-tabs__nav .van-tab{transition:all .2s ease} \ No newline at end of file diff --git a/www/home/img/h5/sytopic/ad_1.jpg b/www/home/img/h5/sytopic/ad_1.jpg new file mode 100644 index 00000000..6906c4ed Binary files /dev/null and b/www/home/img/h5/sytopic/ad_1.jpg differ diff --git a/www/home/img/h5/sytopic/ad_2.jpg b/www/home/img/h5/sytopic/ad_2.jpg new file mode 100644 index 00000000..13c95582 Binary files /dev/null and b/www/home/img/h5/sytopic/ad_2.jpg differ diff --git a/www/home/img/h5/sytopic/ad_3.jpg b/www/home/img/h5/sytopic/ad_3.jpg new file mode 100644 index 00000000..b8daaf93 Binary files /dev/null and b/www/home/img/h5/sytopic/ad_3.jpg differ diff --git a/www/home/img/h5/sytopic/banner.jpg b/www/home/img/h5/sytopic/banner.jpg new file mode 100644 index 00000000..57efc809 Binary files /dev/null and b/www/home/img/h5/sytopic/banner.jpg differ diff --git a/www/home/img/h5/sytopic/bg.jpg b/www/home/img/h5/sytopic/bg.jpg new file mode 100644 index 00000000..36473981 Binary files /dev/null and b/www/home/img/h5/sytopic/bg.jpg differ diff --git a/www/home/img/h5/sytopic/car.png b/www/home/img/h5/sytopic/car.png new file mode 100644 index 00000000..023f251b Binary files /dev/null and b/www/home/img/h5/sytopic/car.png differ diff --git a/www/home/img/h5/sytopic/car_info_01.jpg b/www/home/img/h5/sytopic/car_info_01.jpg new file mode 100644 index 00000000..94b5c013 Binary files /dev/null and b/www/home/img/h5/sytopic/car_info_01.jpg differ diff --git a/www/home/img/h5/sytopic/car_info_02.jpg b/www/home/img/h5/sytopic/car_info_02.jpg new file mode 100644 index 00000000..53873bc1 Binary files /dev/null and b/www/home/img/h5/sytopic/car_info_02.jpg differ