| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306 |
- <?php
- namespace hd\controllers;
- use bizHd\homePageConfig\classes\HomePageConfigClass;
- use bizHd\homePageConfig\classes\HomePageDisplayClass;
- use bizHd\homePageConfig\classes\HomePageModuleClass;
- use common\components\business;
- use common\components\dirUtil;
- use common\components\oss;
- use common\components\stringUtil;
- use common\components\util;
- use hd\models\homePageConfig\DeleteBannerImgForm;
- use hd\models\homePageConfig\SaveBannerForm;
- use hd\models\homePageConfig\SaveGoodsSectionForm;
- use hd\models\homePageConfig\SaveGroupBuyForm;
- use hd\models\homePageConfig\SaveModulesForm;
- use hd\models\homePageConfig\SaveNavGridForm;
- use hd\models\homePageConfig\SaveSeckillForm;
- use hd\models\homePageConfig\SaveTopNavForm;
- use Yii;
- /**
- * 门店首页配置接口
- * 供 hdApp 管理端配置商城首页模块顺序、开关、顶部导航及轮播图详情。
- */
- class HomePageConfigController extends BaseController
- {
- /**
- * 门店首页预览:与 app-mall 顾客端首页共用同一套组装/格式化逻辑(HomePageDisplayClass),
- * 保证商家在后台点"预览"看到的效果与顾客真实首页完全一致
- */
- public function actionGetHome()
- {
- util::success(HomePageDisplayClass::buildHome($this->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');
- }
- }
|