request->isAjax && Yii::$app->request->isGet) { $params = Yii::$app->request->get(); // 检查提交的参数 $res = Yii::$app->services->validate->validate($params,[ [['title'], 'string'], [['title', 'page', 'limit'], 'safe'], ]); if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage()); $where = []; $where[] = ['=', 'mall_id', $this->mall_id]; $where[] = ['=', 'status', StatusEnum::ENABLED]; // 根据名称搜索 if (!empty($params['title'])) { $where[] = ['like', 'title', $params['title']]; } $order = 'is_home_page desc,type desc,sort asc,id desc'; $select = ['id', 'title', 'mall_id', 'template', 'is_home_page', 'type', 'created_at', 'is_show_bottom_nav']; $params = array('select' => $select, 'where' => $where, 'order' => $order, 'limit' => $params['limit']); $data = DiyPage::listPage($params, false, true); if (empty($data)) return $this->success('获取成功'); // 获取模板 $data['template'] = DiyEnum::template(); // h5地址 $h5_url = MallHost::getHost($this->mall_id, 'h5_url'); $sign = $this->mall['mall_sign']; // 支付宝二维码链接 $data['alipay_mini_app_id'] = null; if (MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_ALIPAY_MCH_COUPON)) { $data['alipay_mini_app_id'] = \Yii::$app->services->setting->mall->get($this->mall_id, 'alipay_mini.app_id'); } foreach ($data['list'] as $k => &$v){ $tmp_url = ''; if ($h5_url) { if ($v['is_home_page'] == 1) { $v['web_url'] = $h5_url .'/#'. DiyEnum::HOME_PAGE_PATH . '?sign=' . $sign; } elseif ($v['template'] == DiyEnum::USER_CENTER) { $v['web_url'] = $h5_url .'/#'. DiyEnum::USER_CENTER_PATH . '?sign=' . $sign; } else { $v['web_url'] = $h5_url .'/#'. DiyEnum::CUSTOM_PAGE_PATH . '?sign=' . $sign . '&id=' . $v['id']; } } else { $v['web_url'] = ''; } if (!empty($data['alipay_mini_app_id']) && empty($v['alipay_mini_link']) && !empty($v['web_url'])) { $question_mark_index = strpos($v['web_url'], '?'); if ($question_mark_index !== false) { // 有可能需要去掉&符号? $tmp_url = str_replace("sign={$sign}", '', $v['web_url']); // 去掉签名,不然生成的二维码太复杂导致低端手机无法识别二维码 $tmp_url = str_replace("sign={$sign}&", '', $tmp_url); // 去掉签名,不然生成的二维码太复杂导致低端手机无法识别二维码 $query_params = substr($tmp_url, $question_mark_index+1); if (!empty($query_params)) { // 如果只有sign一个参数的时候那么去掉后就有可能没有参数了 $tmp_url = str_replace("?{$query_params}", "&query=" . urlencode($query_params), $tmp_url); } } $v['alipay_mini_link'] = str_replace("$h5_url/#", "alipays://platformapi/startapp?appId={$data['alipay_mini_app_id']}&page=", $tmp_url); } } $this->success('获取成功', $data); } else { return $this->render($this->action->id); } } // public function backups() // { // $groups = ['mall','common']; // $components = DiyComponents::getComponent($groups,$filter=['img-text']); // $components = DiyComponents::makeUpGroup($components,['other'=>['mall_common']]); // $components = DiyComponents::Components(['other'=>['banner','picture_box']]); // $my_components_name_arr = ['other'=>'其他']; // $components_name_arr = [ // array_merge(DiyComponents::$components_name_arr,$my_components_name_arr) // ]; // } /** * 编辑自定义装修 * @return mixed|void */ public function actionEdit() { $request = Yii::$app->request; if ($request->isAjax) { if ($request->isPost) { $params = $request->post(); $res = Yii::$app->services->validate->validate($params,[ [['id'], 'integer'], [['content'], 'string'], [['content'], 'required'], ['title', 'required', 'message' => '标题文字必须填写'], [['id', 'cover'], 'safe'], ]); if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage()); $trans = Yii::$app->db->beginTransaction(); try { // 将数组转为json字符串 if (is_array($params['content'])) $params['content'] = Json::encode($params['content'],JSON_UNESCAPED_SLASHES); $params['mall_id'] = $this->mall_id; // 保存数据 $res = DiyPage::setData($params); if ($res == false) throw new Exception(DiyPage::getStaticError()); # 重置所有表单 GlobalInvoke::exec(GlobalInvoke::DIY_EDIT_FORM, $this->mall_id,$res); # end $trans->commit(); $this->success('保存成功'); } catch (\Exception $e) { $trans->rollBack(); \Yii::error('edit DiyController error:' . $e->getMessage()); $this->error('编辑失败,msg:' . $e->getMessage()); } } else { $params = $request->get(); $res = Yii::$app->services->validate->validate($params,[ [['id'], 'integer'], [['id'], 'safe'] ]); if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage()); try{ $diypage = (object)[];$template = DiyEnum::CUSTOM_PAGE; if (isset($params['id'])) { // 查询页面 $diypage = DiyPage::find()->where(['id' => $params['id'], 'mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED])->select(['id','title', 'is_home_page','template','content','type','created_at'])->asArray()->one(); if (empty($diypage))throw new \Exception("页面不存在"); $template = $diypage['template'];// 获取该页面模板 } // 获取商城有效的插件 $valid_addons = MallAddons::getValidAddons($this->mall_id); // 根据分组获取组件 $components = DiyComponents::getComponent(DiyEnum::getGroup($template), [], $valid_addons, $this->mall_id); // 获取会员等级 $default_level_list[] = ['level' => 0, 'name' => '普通用户']; $member_level_list = UserLevel::getUserLevel([['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED]], [], 1,'level,name'); $auth[] = [ 'name' => 'member', 'title' => '会员等级', 'list' => array_merge($default_level_list, $member_level_list) ]; // 获取币种 if ($template == DiyEnum::USER_CENTER) { $capital = CurrencyEnum::getMap($this->mall_id); // $capital = [ // ['code' => 'balance', 'title' => Yii::$app->services->setting->mall->get($this->mall_id, 'balance.balance_name') ?? '余额', 'route' => '/plugins/pages/assets/balance/index'], // ['code' => 'score', 'title' => Yii::$app->services->setting->mall->get($this->mall_id, 'score.score_name') ?? '积分', 'route' => '/plugins/pages/assets/currency/index'], // ]; // // 判断是否开启优惠券插件 // $coupon = MallAddons::getOne([['mall_id' => $this->mall_id, 'addons_name' => 'Coupon', 'status' => StatusEnum::ENABLED]]); // if ($coupon) $capital[] = ['code' => 'coupon', 'title' => '优惠券', 'route' => '/plugins/pages/coupon/index']; $level_sel = LevelEnum::getMap($this->mall_id); } $this->success('获取成功', compact('diypage', 'components', 'auth', 'capital','level_sel', 'valid_addons')); } catch (\Exception $e) { $this->error($e->getMessage()); $this->error('获取失败,msg:' . $e->getMessage()); } } } else { // 获取所有插件组件 $addons_components = DiyComponents::find()->select('code,title,group,source')->where(['status' => StatusEnum::ENABLED])->andWhere(['not', ['source' => '']])->asArray()->all(); return $this->render($this->action->id, ['addons_components' => $addons_components]); } } /** * 设为首页 * @return mixed|void */ public function actionSetHome() { $request = Yii::$app->request; if ($request->isAjax) { if ($request->isPost) { $params = $request->post(); $res = Yii::$app->services->validate->validate($params,[ [['id'], 'required'], [['id'], 'integer'], ]); if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage()); $trans = Yii::$app->db->beginTransaction(); try { // 将其他页面变成非首页 DiyPage::updateAll(['is_home_page' => 0, 'template' => DiyEnum::CUSTOM_PAGE], ['mall_id' => $this->mall_id, 'type' => 1, 'status' => StatusEnum::ENABLED]); // 默认首页修改 Yii::$app->db->createCommand()->update(DiyPage::tableName(), ['is_home_page' => 0], ['mall_id' => $this->mall_id, 'type' => 2])->execute(); $params['is_home_page'] = 1; $params['mall_id'] = $this->mall_id; $params['template'] = DiyEnum::HOME_PAGE; // 保存数据 $res = DiyPage::setData($params); if ($res == false) throw new Exception(DiyPage::getStaticError()); $trans->commit(); $this->success('设置成功'); } catch (\Exception $e) { $trans->rollBack(); \Yii::error('edit DiyController error:' . $e->getMessage()); $this->error('设置失败' . $e->getMessage()); } } } } /** * 设为首页 * @return mixed|void */ public function actionSetShowNav() { $request = Yii::$app->request; if ($request->isAjax) { if ($request->isPost) { $params = $request->post(); $res = Yii::$app->services->validate->validate($params,[ [['id'], 'required'], [['id'], 'integer'], ]); if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage()); $page = DiyPage::findOne(['id' => $params['id'], 'mall_id' => $this->mall_id]); if (empty($page)) return $this->error('页面不存在'); $page->is_show_bottom_nav = empty($page->is_show_bottom_nav) ? StatusEnum::ENABLED : StatusEnum::DISABLED; if (!$page->save()) return $this->error($page->getErrorMessage()); return $this->success('操作成功'); } } } /** * 复制页面 * @return mixed|void */ public function actionCopyPage() { $request = Yii::$app->request; if ($request->isPost) { $trans = Yii::$app->db->beginTransaction(); try{ $params = $request->post(); $res = Yii::$app->services->validate->validate($params,[ [['id'], 'required'], ]); if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage()); $detail = DiyPage::findOne(['id' => $params['id'], 'mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED]); if (empty($detail)) throw new \Exception("页面不存在"); $detail->title = $detail->title . '-copy'; $detail->is_home_page = 0; $detail->type = 1; $detail->template = DiyEnum::CUSTOM_PAGE; $diy = new DiyPage(); $diy->attributes = $detail->attributes; if (!$diy->save()) throw new \Exception("复制失败:" . $diy->getErrorMessage()); GlobalInvoke::exec(GlobalInvoke::DIY_COPY_FORM, $this->mall_id, $diy->toArray()); // print_r($diy->toArray());exit; $trans->commit(); $this->success('复制成功'); } catch (\Exception $e) { $trans->rollBack(); $this->error($e->getMessage()); } } } /** * 装修删除 * @return mixed|void */ public function actionDelete() { $request = Yii::$app->request; if ($request->isPost) { try{ $params = $request->post(); $res = Yii::$app->services->validate->validate($params,[ [['id'], 'required'], ]); if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage()); $detail = DiyPage::findOne(['id' => $params['id'], 'status' => StatusEnum::ENABLED]); if (empty($detail)) throw new \Exception("页面不存在"); if ($detail->is_home_page == 1) throw new \Exception("该页面是首页,暂不可删除"); $detail->status = StatusEnum::DELETE; if (!$detail->save()) throw new \Exception("删除失败"); GlobalInvoke::exec(GlobalInvoke::DIY_DELETE_FORM, $this->mall_id,$params); $this->success('删除成功'); } catch (\Exception $e) { $this->error($e->getMessage()); } } } /** * 根据标识获取对应组件的内容 * @Author: lun * @DateTime: 2021/11/11 0011 14:52 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|void */ public function actionGetComponentsData() { $params = Yii::$app->request->get('form'); $list = Json::decode($params, true); if (empty($list)) return $this->error('请求数据为空'); // 获取数据 $data = DiyComponentsData::getCompentsData($this->mall_id, $list); return $this->success('操作成功',$data); } /** * 模板市场列表 * @Author: lun * @DateTime: 2021/12/14 0014 17:47 * @Copyright: copyright (c) 2021 广东七件事集团 */ public function actionTemplateMarket() { if(Yii::$app->request->isAjax){ if (Yii::$app->request->isGet) { $params = Yii::$app->request->get(); // 检查提交的参数 $res = Yii::$app->services->validate->validate($params,[ [['route_type'], 'required'], [['title','template','route_type'], 'string'], [['title', 'page', 'limit'], 'safe'], [['cate_id','mid'], 'integer'], ]); if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage()); $data = DiyTemplateLogic::TemplateMarket($params); $this->success('获取成功', $data); } } else { return $this->render("@backend/modules/admin/views/template/mall.php", ['mid' => $this->mall_id]); } } /** * 我的模板列表 * @Author: lun * @DateTime: 2021/12/14 0014 17:47 * @Copyright: copyright (c) 2021 广东七件事集团 */ public function actionMyTemplate() { $request = Yii::$app->request; if ($request->isAjax && $request->isGet) { $params = $request->get(); // 检查提交的参数 $res = Yii::$app->services->validate->validate($params,[ [['route_type'], 'required'], [['title','template','route_type'], 'string'], [['title', 'page', 'limit'], 'safe'], [['cate_id'], 'integer'], ]); if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage()); // 条件组合 $where = []; $where[] = ['=', 'mall_id', $this->mall_id]; !empty($params['cate_id']) && $where[] = ['=', 'cate_id', $params['cate_id']]; !empty($params['template']) && $where[] = ['=', 'template', $params['template']]; !empty($params['title']) && $where[] = ['like', 'title', $params['title']]; $where[] = ['=', 'status', [StatusEnum::ENABLED, 2]]; $order = 'created_at desc'; $select = ['id','title','cate_id','template','created_at','cover','status','expire_time']; $list_params = array('select' => $select,'where' => $where, 'order' => $order, 'limit' => $params['limit'] ?? 20); $list = DiyMallTemplate::listPage($list_params, false, true); if (empty($list)) return $this->success('获取成功'); $data['list'] = $list; // 获取模板 $data['cate_arr'] = DiyEnum::getTemplateCate(); $data['template_type'] = DiyEnum::template(); return $this->success('获取成功', $data); } return $this->render("@backend/modules/admin/views/template/mall.php"); } /** * 购买模板 * @Author: lun * @DateTime: 2021/12/14 0014 18:05 * @Copyright: copyright (c) 2021 广东七件事集团 */ public function actionBuyTemplate() { $request = Yii::$app->request; if ($request->isAjax && $request->isPost) { try{ $params = $request->post(); $res = Yii::$app->services->validate->validate($params,[ [['template_id','duration'], 'required'], [['template_id','duration'], 'integer'], ]); if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage()); $detail = DiyTemplate::findOne(['id' => $params['template_id'], 'is_on_sale' => StatusEnum::ENABLED,'status' => StatusEnum::ENABLED]); if (empty($detail)) throw new \Exception("模板不存在"); // 设置过期时间 $expire_time = $params['duration'] == -1 ? -1 : strtotime("+{$params['duration']} month"); $data['mall_id'] = $this->mall_id; $data['title'] = $detail->title; $data['cate_id'] = $detail->cate_id; $data['template_id'] = $detail->id; $data['template'] = $detail->template; $data['cover'] = $detail->cover; $data['content'] = $detail->content; $data['expire_time'] = $expire_time;// TODO 后期改为可购买 // 保存数据 $res = DiyMallTemplate::setData($data); if ($res == false) throw new Exception(DiyMallTemplate::getStaticError()); $this->success('购买成功'); } catch (\Exception $e) { $this->error('购买失败:' . $e->getMessage()); } } } /** * 使用该模板 * @Author: lun * @DateTime: 2021/12/14 0014 18:05 * @Copyright: copyright (c) 2021 广东七件事集团 */ public function actionUseTemplate() { $request = Yii::$app->request; if ($request->isAjax && $request->isPost) { try{ $params = $request->post(); $res = Yii::$app->services->validate->validate($params,[ [['id'], 'required'],[['id'], 'integer'] ]); if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage()); $detail = DiyMallTemplate::findOne(['id' => $params['id'], 'mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED]); if (empty($detail)) throw new \Exception("模板不存在"); if ($detail->expire_time != StatusEnum::DELETE && $detail->expire_time < time()) throw new \Exception("模板已过期"); $data['mall_id'] = $this->mall_id; $data['title'] = $detail->title; $data['mall_template_id'] = $detail->id; $data['template_id'] = $detail->template_id; $data['cover'] = $detail->cover; $data['content'] = $detail->content; // 保存数据 $res = DiyPage::setData($data); if ($res == false) throw new Exception(DiyPage::getStaticError()); $this->success('使用成功', $res['id']); } catch (\Exception $e) { $this->error('使用模板失败:' . $e->getMessage()); } } } public function actionGetAddonsFields() { $request = Yii::$app->request; if ($request->isAjax) { if ($request->isGet) { $type = $request->get('type'); $fields = GoodsExtra::getExtraFields($this->mall_id, $type); return $this->success('success', $fields); } } } /** * 创建订单 * * @param int $id * @param int $index * @return string */ public function actionCreateOrder(int $id, int $index) { $service = new TemplateService(['mall_id' => $this->mall_id]); $id = $service->createOrder($id, $index); return $id ? $this->success('ok', ['id' => $id]) : $this->error($service->getError()); } /** * 支付 * * @param integer $id * @return string */ public function actionPay(int $id) { $service = new TemplateService(['mall_id' => $this->mall_id]); $data = $service->getPayData($id); return $data ? $this->success('ok', $data) : $this->error($service->getError()); } /** * 支付完成 * * @return string */ public function actionPaid() { return $this->render($this->action->id); } }