isMobile()) return redirect('index/index'); // 查询参数获取 $shortUrl = ShortUrl::where(['uri' => $tag, 'type' => 'share'])->find(); if (empty($shortUrl)) { abort(404, '内容不存在'); } $param = json_decode($shortUrl->content, true); $scheme = new UrlScheme(); // class $type = $param['type']; $strpos = strpos($type, '_vr'); if ($strpos){ $type = str_replace('_vr', '', $type); } $className = 'app\\model\\' . ucfirst($type); if (!class_exists($className)) { abort(404, '内容不存在'); } $mini = Miniprogram::where(['notify' => $param['client_type']])->find(); view::assign('mini_account', $mini->account); $accessToken = $mini->accesstoken; $company = Company::with(['brand'])->where('root_id', $mini->root_id)->field(['company_name', 'logo', 'company_brand'])->find(); if (!empty($param['id'])) { if ($strpos) { $data['title'] = 'VR预览'; $data['vr_link'] = $param['other_data']; } elseif (strtolower($param['type']) == 'construction') { // 在施工地信息处理 $data = Construction::with(['style', 'designer', 'housetype', 'community'])->find($param['id']); $root_id = $data['root_id']; $step_list = ConstructionStep::where('root_id', '=', $root_id)->order('order asc')->select()->toArray(); if (!empty($step_list)) { $record_list = ConstructionRecord::where([['construction_id', '=', $param['id']]])->order('update_time desc')->select(); $step_now = 0; //进行到哪一步了 foreach ($step_list as $k => $v) { foreach ($record_list as $kk => $vv) { if ($v['id'] == $vv['step_id'] && $v['order'] > $step_now) { $step_now = $v['order']; } } } foreach ($step_list as $k => $v) { $step_list[$k]['upload'] = 0; // 判断是否上传 $step_list[$k]['need_upload'] = 0; // 判断节点是否变色(已过此节点,但是没上传) $have = false; //是否有上传 true有 $need_have = false; //没上传,但是后面的节点上传了 true是 $step_list[$k]['data'] = []; foreach ($record_list as $kk => $vv) { if ($v['id'] == $vv['step_id']) { $have = true; $step_list[$k]['data'] = $vv; } } if ($have == false && $v['order'] < $step_now) { $need_have = true; } if ($have) { $step_list[$k]['upload'] = 1; } elseif ($need_have) { $step_list[$k]['need_upload'] = 1; } } $data['step_list'] = $step_list; } else { $data['step_list'] = []; } } elseif (strtolower($param['type']) == 'building') { $data = BuildingModel::find($param['id']); //关联在施工地数量 $data['start_num']=BuildingConstruction::where('building_id', '=', $param['id'])->count(); $data['end_num'] = BuildingMaterialCase::where([['building_id', '=', $param['id']]])->count(); $area_list = BuildingHousetype::where('building_id', '=', $param['id'])->order('area asc')->limit(3)->column('area'); $data['area_list'] = implode('/', array_values(array_unique(array_filter($area_list)))); //小区户型 $housetype = BuildingHousetype::where('building_id', '=', $param['id'])->withCount(['materialCase'])->select(); $data['housetype'] = $housetype->toArray(); $data['housetype_count'] = $housetype->count(); $progress_list = BuildingProgress::where('building_id', '=', $param['id'])->order('addtime desc')->select()->each(function ($item) { $item->vr = explode(',', $item['vr']); }); $data['progress'] = $progress_list; } elseif (strtolower($param['type']) == 'housetype') { // $data = BuildingHousetype::find($param['id']); $build = BuildingModel::where('id',$data->building_id)->field('id,name,address,community_id')->findOrEmpty(); if (!$build->isEmpty()){ $build->community = $build->community_id ? Community::where('id',$build->community_id)->value('name') : ''; } View::assign('build', $build); } elseif(strtolower($param['type']) == 'agentarticle'){ $data = AgentArticle::find($param['id']); $data->files = !empty($data['file'][0]) ? str_replace('https://'.config('app.ali_oss_bindurl').'/','',$data['file'][0]) : ''; } else { $className = 'app\\model\\' . ucfirst($param['type']); if (!class_exists($className)) { abort(404, '内容不存在'); } $obj = new $className(); $data = $obj->find($param['id']); } //短链中间页展示内容 $data['cover_file'] = $this->param_content($param['path'], $data); View::assign('data', $data); } else { // 获取小程序二维码 $qrObj = new Qrcode; $qrdata = [ 'scene' => $param['query'], 'page' => $param['path'], 'width' => '280px', ]; $qr = $qrObj->getUnlimited($accessToken, $qrdata); $rs = json_decode($qr, true); if (!is_null($rs)) { trace('名片二维码生成失败' . ';error:' . $qr, 'error'); } $path = 'share_qr_unlimit' . DIRECTORY_SEPARATOR . uniqid() . '.jpeg'; ossContentUpload($path, $qr); View::assign('qrcode', request()->domain() . '/' . $path); } // 设置分享人昵称 $nickname = User::where('id', $param['user_id'])->value('nickname'); View::assign('nickname', $nickname); $data = [ 'jump_wxa' => [ 'path' => $param['path'], 'query' => $param['query'], 'env_version' => isset($param['env_version']) ? $param['env_version'] : 'release', ], 'expire_type' => 1, 'expire_interval' => 30 // 链接有效时间30天 ]; $rs = $scheme->generate($accessToken, $data); if (isset($rs['errcode']) && $rs['errcode'] != 0) { trace($rs['errmsg'], 'error'); } // 设置分享链接 $jssdk = new JsSdk(); $appid = config('app.official_appid'); if (cache('?jsapi_ticket')) { $ticket = cache('jsapi_ticket'); } else { // 获取普通access_token if (!$token = Cache::get('zqxg_offi_access_token')) { $token = getAccessToken($appid, config('app.official_secret')); Cache::set('zqxg_offi_access_token', $token, 7100); } $ticket = $jssdk->getJsApiTicket($token); cache('jsapi_ticket', $ticket, 7200); } $signPackage = $jssdk->getSignPackage($ticket); $signPackage['appid'] = $appid; View::assign('wxconfig', $signPackage); View::assign('company', $company); View::assign('query', $param['query']); View::assign('path', $param['path']); View::assign('urlsheme', $rs['openlink']); return View::fetch(); } /* * 短链接中间页面需要展示的不同内容定义 * path:分享的路径 */ private function param_content($path, $data) { $dufault_img = 'https://o.nczyzs.com/xcx/nonedata.jpg'; $cover_file = ''; switch ($path) { //口碑详情 case '/share/pages/publicpraisemsg/publicpraisemsg': if ($data['difference'] == 1) { $cover_file = $data['cover'] ?: (!empty($data['pics']) ? $data['pics'][0].'?x-oss-process=video/snapshot,t_100,f_jpg,w_375,m_fast' : $dufault_img); }else{ $cover_file = !empty($data['pics']) ? $data['pics'][0] : $dufault_img; } break; //视频详情 case '/share/pages/videoshare/videoshare': //$cover_file = !empty($data['video_url']) ? $data['video_url'].'?x-oss-process=video/snapshot,t_100,f_jpg,w_500,m_fast' : $dufault_img; $cover_file = !empty($data['cover']) ? $data['cover'] : $data['video_url'] . '?x-oss-process=video/snapshot,t_100,f_jpg,w_500,m_fast'; break; //图文详情 case '/share/pages/articleshare/articleshare': //案例详情 case '/share/pages/materialcase/materialcase': $cover_file = !empty($data['cover_img']) ? $data['cover_img'] : $dufault_img; break; // 活动详情 case '/share/pages/activitymsg/activitymsg': // 在施工地 case '/share/pages/constructsite/constructsite': $cover_file = !empty($data['cover']) ? $data['cover'] : $dufault_img; break; // vr楼书 case '/share/pages/buildprogress/buildprogress': $cover_file = !empty($data['cover'][0]) ? $data['cover'][0] : $dufault_img; break; // 活码 case '/share/pages/channelsignup/channelsignup': $cover_file = !empty($data['poster_img']) ? $data['poster_img'] : $dufault_img; break; case '/share/pages/other/other': // vr //$cover_file = !empty($data['vr_link']) ? $data['vr_link'] : $dufault_img; $cover_file = $dufault_img; break; } return $cover_file; } /** * 访问链接打开小程序 */ public function open($uri) { // 查询参数获取 $shortUrl = ShortUrl::where(['uri' => $uri, 'type' => 'join_company'])->find(); if (empty($shortUrl)) { abort(404, '内容不存在'); } $param = json_decode($shortUrl->content, true); $scheme = new UrlScheme(); $mini = Miniprogram::where(['notify' => $param['client_type']])->find(); view::assign('mini_account', $mini->account); $accessToken = $mini->accesstoken; $company = Company::with(['brand'])->where('root_id', $mini->root_id)->field(['company_name', 'logo', 'company_brand'])->find(); $data = [ 'jump_wxa' => [ 'path' => $param['path'], 'query' => $param['query'], 'env_version' => isset($param['env_version']) ? $param['env_version'] : 'release', ], 'expire_type' => 1, 'expire_interval' => 30 // 链接有效时间30天 ]; $rs = $scheme->generate($accessToken, $data); if (isset($rs['errcode']) && $rs['errcode'] != 0) { trace($rs['errmsg'], 'error'); } // 设置分享链接 $jssdk = new JsSdk(); $appid = config('app.official_appid'); if (cache('?jsapi_ticket')) { $ticket = cache('jsapi_ticket'); } else { // 获取普通access_token if (!$token = Cache::get('zqxg_offi_access_token')) { $token = getAccessToken($appid, config('app.official_secret')); Cache::set('zqxg_offi_access_token', $token, 7100); } $ticket = $jssdk->getJsApiTicket($token); cache('jsapi_ticket', $ticket, 7200); } $signPackage = $jssdk->getSignPackage($ticket); $signPackage['appid'] = $appid; View::assign('wxconfig', $signPackage); View::assign('company', $company); View::assign('query', $param['query']); View::assign('path', $param['path']); View::assign('urlsheme', $rs['openlink']); return View::fetch(); } /** * vr作品预览页面 */ public function vr() { return View::fetch(); } }