mainId)); } /** * 获取首页模块顺序与开关 */ public function actionGetModules() { $list = HomePageConfigClass::getModules($this->mainId); util::success(['list' => $list]); } /** * 保存首页模块顺序与开关(合并写入 Redis) */ public function actionSaveModules() { $form = new SaveModulesForm(); $form->loadAndValidate(); HomePageConfigClass::saveModules($this->mainId, $form->getItems()); util::complete('保存成功'); } /** * 获取顶部导航与搜索配置;门店名称实时取 xhShop.merchantName */ public function actionGetTopNav() { $data = HomePageConfigClass::getTopNav($this->mainId); $data['merchantName'] = $this->shop->merchantName ?? ''; util::success($data); } /** * 保存顶部导航与搜索配置(不含门店名称) */ public function actionSaveTopNav() { $form = new SaveTopNavForm(); $data = Yii::$app->request->post(); $form->load($data ?: ['enabled' => 0], ''); $form->validateForm(); HomePageConfigClass::saveTopNav($this->mainId, $form->getPayload(), $form->getEnabled()); util::complete('保存成功'); } /** * 获取首页轮播图配置(管理端) */ public function actionGetBanner() { $data = HomePageConfigClass::getBanner($this->mainId); util::success($data); } /** * 保存首页轮播图配置;同步模块开关,并清理被移除的 OSS 图片 */ public function actionSaveBanner() { $form = new SaveBannerForm(); $data = Yii::$app->request->post(); $form->load($data ?: ['enabled' => 0], ''); $form->validateForm(); HomePageConfigClass::saveBanner($this->mainId, $form->getPayload(), $form->getEnabled()); util::complete('保存成功'); } /** * 上传轮播图到独立 OSS 目录 uploads_home_banner/{mainId}/{shopId}/日期路径 * 文件名按日期时间生成,便于按日识别 */ public function actionUploadBanner() { $file = isset($_FILES['file']) ? $_FILES['file'] : null; if (empty($file) || empty($file['tmp_name']) || !is_uploaded_file($file['tmp_name'])) { util::fail('请上传图片'); } $mainId = intval($this->mainId); $shopId = intval($this->shopId); if ($mainId <= 0 || $shopId <= 0) { util::fail('无效门店'); } $root = HomePageConfigClass::BANNER_OSS_ROOT; $month = date('Ym'); $day = date('d'); // 本地临时目录与 OSS 对象路径保持一致 $relativeDir = "{$root}/{$mainId}/{$shopId}/{$month}/{$day}/"; $localDir = rtrim(dirUtil::getImgUploadDir(), '/') . '/' . $relativeDir; if (!is_dir($localDir) && !@mkdir($localDir, 0700, true) && !is_dir($localDir)) { util::fail('创建上传目录失败'); } // 文件名:日期时间 + 短唯一串,满足「按日期创建」并避免冲突 $fileName = date('YmdHis') . '_' . substr(stringUtil::uniqueFileName(), 0, 8) . '.jpg'; $localFile = $localDir . $fileName; if (!move_uploaded_file($file['tmp_name'], $localFile)) { util::fail('上传失败'); } $ossPath = $relativeDir . $fileName; oss::uploadImage($ossPath, $localFile); @unlink($localFile); $data = business::formatUploadImg($ossPath); $data['shortUrl'] = $ossPath; $data['smallShortUrl'] = $ossPath . '?x-oss-process=image/resize,l_200'; util::success($data, 'ok'); } /** * 删除单张轮播图 OSS(前端移除图片时即时调用) */ public function actionDeleteBannerImg() { $form = new DeleteBannerImgForm(); $form->loadAndValidate(); HomePageConfigClass::deleteBannerOssImages([$form->getFilePath()]); util::complete('删除成功'); } /** 金刚区导航 */ public function actionGetNavGrid() { util::success(HomePageModuleClass::getNavGrid($this->mainId)); } public function actionSaveNavGrid() { $form = new SaveNavGridForm(); $data = Yii::$app->request->post(); $form->load($data ?: ['enabled' => 0], ''); $form->validateForm(); HomePageModuleClass::saveNavGrid($this->mainId, $form->getPayload(), $form->getEnabled()); util::complete('保存成功'); } /** * 上传金刚区图标到 uploads_home_nav/{mainId}/{shopId}/日期 */ public function actionUploadNavIcon() { $this->uploadHomeImage(HomePageModuleClass::NAV_OSS_ROOT); } /** 秒杀专区 */ public function actionGetSeckill() { util::success(HomePageModuleClass::getSeckill($this->mainId, true)); } public function actionSaveSeckill() { $form = new SaveSeckillForm(); $data = Yii::$app->request->post(); $form->load($data ?: ['enabled' => 0], ''); $form->validateForm(); HomePageModuleClass::saveSeckill( $this->mainId, $form->getBasePayload(), $form->getGoods(), $form->getEnabled() ); util::complete('保存成功'); } /** 团购专区 */ public function actionGetGroupBuy() { util::success(HomePageModuleClass::getGroupBuy($this->mainId, true)); } public function actionSaveGroupBuy() { $form = new SaveGroupBuyForm(); $data = Yii::$app->request->post(); $form->load($data ?: ['enabled' => 0], ''); $form->validateForm(); HomePageModuleClass::saveGroupBuy( $this->mainId, $form->getBasePayload(), $form->getGoods(), $form->getEnabled() ); util::complete('保存成功'); } /** 热门推荐 */ public function actionGetHot() { util::success(HomePageModuleClass::getGoodsSection($this->mainId, 'hot')); } public function actionSaveHot() { $form = new SaveGoodsSectionForm(); $data = Yii::$app->request->post(); $form->load($data ?: ['enabled' => 0], ''); $form->validateForm(); HomePageModuleClass::saveGoodsSection($this->mainId, 'hot', $form->getPayload(), $form->getEnabled()); util::complete('保存成功'); } /** 今日上新 */ public function actionGetNew() { util::success(HomePageModuleClass::getGoodsSection($this->mainId, 'new')); } public function actionSaveNew() { $form = new SaveGoodsSectionForm(); $data = Yii::$app->request->post(); $form->load($data ?: ['enabled' => 0], ''); $form->validateForm(); HomePageModuleClass::saveGoodsSection($this->mainId, 'new', $form->getPayload(), $form->getEnabled()); util::complete('保存成功'); } /** 下拉商品 */ public function actionGetPullGoods() { util::success(HomePageModuleClass::getGoodsSection($this->mainId, 'pullGoods')); } public function actionSavePullGoods() { $form = new SaveGoodsSectionForm(); $data = Yii::$app->request->post(); $form->load($data ?: ['enabled' => 0], ''); $form->validateForm(); HomePageModuleClass::saveGoodsSection($this->mainId, 'pullGoods', $form->getPayload(), $form->getEnabled()); util::complete('保存成功'); } /** * 通用首页配置图片上传:按项目(mainId)+shopId+日期落 OSS */ private function uploadHomeImage($root) { $file = isset($_FILES['file']) ? $_FILES['file'] : null; if (empty($file) || empty($file['tmp_name']) || !is_uploaded_file($file['tmp_name'])) { util::fail('请上传图片'); } $mainId = intval($this->mainId); $shopId = intval($this->shopId); if ($mainId <= 0 || $shopId <= 0) { util::fail('无效门店'); } $month = date('Ym'); $day = date('d'); $relativeDir = "{$root}/{$mainId}/{$shopId}/{$month}/{$day}/"; $localDir = rtrim(dirUtil::getImgUploadDir(), '/') . '/' . $relativeDir; if (!is_dir($localDir) && !@mkdir($localDir, 0700, true) && !is_dir($localDir)) { util::fail('创建上传目录失败'); } $fileName = date('YmdHis') . '_' . substr(stringUtil::uniqueFileName(), 0, 8) . '.jpg'; $localFile = $localDir . $fileName; if (!move_uploaded_file($file['tmp_name'], $localFile)) { util::fail('上传失败'); } $ossPath = $relativeDir . $fileName; oss::uploadImage($ossPath, $localFile); @unlink($localFile); $data = business::formatUploadImg($ossPath); $data['shortUrl'] = $ossPath; $data['smallShortUrl'] = $ossPath . '?x-oss-process=image/resize,l_200'; util::success($data, 'ok'); } }