// +---------------------------------------------------------------------- namespace app\controller\api\v2; use app\Request; use app\services\diy\DiyServices; use app\services\other\CityAreaServices; use app\services\product\category\StoreProductCategoryServices; use app\services\product\product\StoreProductServices; use app\services\wechat\WechatUserServices; use crmeb\services\CacheService; use app\services\other\CacheServices; use crmeb\services\SystemConfigService; use app\services\system\attachment\SystemAttachmentServices; class PublicController { /** * 主页获取 * @param Request $request * @return mixed */ public function index(Request $request) { $uid = $request->hasMacro('uid') ? (int)$request->uid() : 0; $data = SystemConfigService::more(['fast_number', 'bast_number', 'first_number', 'promotion_number', 'tengxun_map_key', 'site_name']); $site_name = $data['site_name'] ?? ''; $tengxun_map_key = $data['tengxun_map_key'] ?? ''; $fastNumber = (int)($data['fast_number'] ?? 0);// 快速选择分类个数 $bastNumber = (int)($data['bast_number'] ?? 0);// 精品推荐个数 $firstNumber = (int)($data['first_number'] ?? 0);// 首发新品个数 $promotionNumber = (int)($data['promotion_number'] ?? 0);// 首发新品个数 /** @var StoreProductCategoryServices $categoryService */ $categoryService = app()->make(StoreProductCategoryServices::class); $info['fastList'] = $fastNumber ? $categoryService->byIndexList($fastNumber, 'id,cate_name,pid,pic') : [];// 快速选择分类个数 /** @var StoreProductServices $storeProductServices */ $storeProductServices = app()->make(StoreProductServices::class); $info['bastList'] = $bastNumber ? $storeProductServices->getRecommendProduct($uid, ['is_best' => 1], $bastNumber) : [];// 精品推荐个数 $info['firstList'] = $firstNumber ? $storeProductServices->getRecommendProduct($uid, ['is_new' => 1], $firstNumber) : [];// 首发新品个数 $benefit = $promotionNumber ? $storeProductServices->getRecommendProduct($uid, ['is_benefit' => 1], $promotionNumber) : [];// 首页促销单品 $likeInfo = $storeProductServices->getRecommendProduct($uid, ['is_hot' => 1], 3);// 热门榜单 猜你喜欢 if ($uid) { /** @var WechatUserServices $wechatUserService */ $wechatUserService = app()->make(WechatUserServices::class); $subscribe = (bool)$wechatUserService->value(['uid' => $uid, 'user_type' => 'wechat'], 'subscribe'); } else { $subscribe = true; } return app('json')->successful(compact('info', 'benefit', 'likeInfo', 'subscribe', 'tengxun_map_key', 'site_name')); } /** * 获取页面数据 * @return mixed * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function getDiy($name = '') { /** @var DiyServices $diyService */ $diyService = app()->make(DiyServices::class); $data = CacheService::redisHandler('diy')->remember('diy_' . $name, function () use ($name, $diyService) { $data = $diyService->getDiy($name); if (isset($data['f_scroll_box']['goodsList']['list'])) { $data['f_scroll_box']['goodsList']['list'] = get_thumb_water($data['f_scroll_box']['goodsList']['list'], 'small', ['pic']); } return $data; }); return app('json')->successful($data); } /** * 是否强制绑定手机号 * @return mixed */ public function bindPhoneStatus() { $status = (bool)sys_config('store_user_mobile'); return app('json')->success(compact('status')); } /** * 是否关注 * @param Request $request * @param WechatUserServices $services * @return mixed */ public function subscribe(Request $request, WechatUserServices $services) { return app('json')->success(['subscribe' => (bool)$services->value(['uid' => $request->uid(), 'user_type' => 'wechat'], 'subscribe')]); } /** * 获取提货点自提开启状态 * @return mixed */ public function getStoreStatus() { $data['store_status'] = 0; if (sys_config('store_func_status', 1)) { $data['store_status'] = sys_config('store_self_mention', 0); } return app('json')->successful($data); } /** * 获取颜色选择和分类模板选择 * @param DiyServices $services * @param $name * @return mixed * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function colorChange(DiyServices $services, $name) { $status = (int)$services->getColorChange((string)$name); $navigation = (int)sys_config('navigation_open'); return app('json')->success(compact('status', 'navigation')); } /** * 获取商品详情diy * @param DiyServices $services * @return mixed * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function productDetailDiy(DiyServices $services) { $product_detail = $services->getProductDetailDiy(); $product_video_status = (bool)sys_config('product_video_status'); $product_category = $services->getProductCategoryDiy(); return app('json')->success(compact('product_detail', 'product_video_status', 'product_category')); } /** * 获取城市 * @param CityAreaServices $services * @return mixed */ public function city(Request $request, CityAreaServices $services) { $pid = $request->get('pid', 0); $type = $request->get('type', 0); return app('json')->success($services->getCityTreeList((int)$pid, (int)$type)); } /** * 解析(获取导入微信地址) * @param CityAreaServices $services * @return mixed */ public function cityList(Request $request, CityAreaServices $services) { $address = $request->param('address', ''); if (!$address) return app('json')->fail('地址不存在'); $city = $services->searchCity(compact('address')); if (!$city) return app('json')->fail('地址暂未录入,请联系管理员'); $where = [['id', 'in', array_merge([$city['id']], explode('/', trim($city->path, '/')))]]; return app('json')->success($services->getCityList($where, 'id as value,id,name as label,parent_id as pid', ['children'])); } /** * 获取客服类型配置 * @return mixed */ public function getCustomerType() { $data = SystemConfigService::more(['routine_contact_type', 'customer_type', 'customer_phone', 'customer_url', 'wechat_work_corpid']); $data['userInfo'] = []; return app('json')->success($data); } }