MemberDesignerController.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: win 10
  5. * Date: 2019/7/16
  6. * Time: 14:53
  7. */
  8. namespace app\frontend\modules\member\controllers;
  9. use app\common\components\ApiController;
  10. use app\common\facades\Setting;
  11. use app\common\models\Member;
  12. use app\framework\Http\Request;
  13. use app\frontend\controllers\HomePageController;
  14. use app\frontend\modules\coupon\controllers\MemberCouponController;
  15. use Yunshop\Diyform\api\DiyFormController;
  16. use Yunshop\Designer\models\MemberDesigner;
  17. use Yunshop\Designer\services\DesignerService;
  18. use app\frontend\modules\member\models\MemberModel;
  19. use Yunshop\NearbyStoreGoods\frontend\controllers\DesignerController;
  20. use Yunshop\Commission\models\Agents;
  21. use Yunshop\Commission\models\AgentLevel;
  22. use Yunshop\TeamDividend\admin\models\TeamDividendAgencyModel;
  23. use Yunshop\TeamDividend\models\TeamDividendLevelModel;
  24. use app\frontend\modules\member\controllers\MemberController;
  25. class MemberDesignerController extends ApiController
  26. {
  27. public function index(Request $request, $integrated = null)
  28. {//代码结构有机会一定要重新弄一下。。。
  29. $res = [];
  30. $res['status'] = false;
  31. $res['data'] = [];
  32. $goods_model = \app\common\modules\shop\ShopConfig::current()->get('goods.models.commodity_classification');
  33. $goods_model = new $goods_model;
  34. $set = \Setting::get('plugin.video-share');
  35. //如果安装了新装修插件并开启插件
  36. if (app('plugins')->isEnabled('decorate') && \Setting::get('plugin.decorate.is_open') == "1")
  37. {
  38. $page = new \Yunshop\Decorate\frotend\IndexController();
  39. $pageType = \Yunshop::request()->type;
  40. if ($pageType == '7') {
  41. $pageType = '3';
  42. }
  43. if ($pageType == '8') {
  44. $pageType = '4';
  45. }
  46. if ($pageType == '18') {
  47. $pageType = '5';
  48. }
  49. if (\request()->cps_h5){
  50. $pageType = '7';
  51. }
  52. $page->page_type = $pageType;
  53. $page->page_scene = '2';
  54. $page->page_sort = '1';
  55. if ($pageType == '2')
  56. {
  57. $page->page_sort = "2"; //2为会员装修页面
  58. }
  59. $decorate = $page->getPage();
  60. if ($decorate)
  61. {
  62. $decorate['datas']=json_decode($decorate['datas'],true);
  63. $decorate['page_info']=json_decode($decorate['page_info'],true);
  64. $memberData = $this->getMemberData();
  65. //收银台属于插件第二个按钮,特殊处理
  66. $is_cashier = 0;
  67. $has_cashier = 1;
  68. if ($memberData['merchants_arr']['cashier']) {
  69. $is_cashier = 1;
  70. }
  71. $is_love_open = app('plugins')->isEnabled('love');
  72. foreach ($decorate['datas'] as $key => $value)
  73. {
  74. //实用工具
  75. if ($value['component_key'] == 'U_membertop')
  76. {
  77. $name = '';
  78. if ($value['remote_data']['grade_type'] == 2) {
  79. if (app('plugins')->isEnabled('team-dividend')) {
  80. $name = $this->getLevelName(2);
  81. } else {
  82. $decorate['datas'][$key]['remote_data']['grade_type'] = 1;
  83. }
  84. }
  85. if ($value['remote_data']['grade_type'] == 3) {
  86. if (app('plugins')->isEnabled('commission')) {
  87. $name = $this->getLevelName(3);
  88. } else {
  89. $decorate['datas'][$key]['remote_data']['grade_type'] = 1;
  90. }
  91. }
  92. if (!$value['remote_data']['grade_type']) {
  93. $decorate['datas'][$key]['remote_data']['grade_type'] = 1;
  94. }
  95. if (MemberModel::isAgent()) {
  96. $decorate['datas'][$key]['remote_data']['isagent'] = true;
  97. } else {
  98. $decorate['datas'][$key]['remote_data']['isagent'] = false;
  99. }
  100. $decorate['datas'][$key]['remote_data']['levelname'] = $name;
  101. }
  102. //实用工具
  103. if ($value['component_key'] == 'U_membertool')
  104. {
  105. foreach ($value['remote_data']['show_list'] as $pkey => $par)
  106. {
  107. if (!in_array($par['name'], $memberData['tools']) || $par['is_open'] == false)
  108. {
  109. unset($decorate['datas'][$key]['remote_data']['show_list'][$pkey]);
  110. }
  111. }
  112. $decorate['datas'][$key]['remote_data']['show_list'] = array_values($decorate['datas'][$key]['remote_data']['show_list']);
  113. }
  114. // 商家管理
  115. if ($value['component_key'] == 'U_membermerchant')
  116. {
  117. foreach ($value['remote_data']['show_list'] as $pkey => $par)
  118. {
  119. if (in_array($par['name'], ['store-cashier', 'hotel', 'supplier', 'micro','package_deliver','ad-serving']))
  120. {
  121. $decorate['datas'][$key]['remote_data']['show_list'][$pkey]['title'] = $memberData['merchants_arr'][$par['name']]['title'];
  122. $decorate['datas'][$key]['remote_data']['show_list'][$pkey]['url'] = $memberData['merchants_arr'][$par['name']]['url'];
  123. $decorate['datas'][$key]['remote_data']['show_list'][$pkey]['mini_url'] = $memberData['merchants_arr'][$par['name']]['mini_url'];
  124. }
  125. if ($par['name'] == 'cashier') {
  126. $has_cashier = 0;
  127. }
  128. if ($par['name'] == 'store-cashier')
  129. {
  130. $storeCashier = true;
  131. }
  132. if ($par['name'] == 'StoreVerification' && app('plugins')->isEnabled('store-project')) {
  133. $langService = new \Yunshop\StoreProjects\common\services\LangService;
  134. if ($langService->getLangSetting()['project'] !== '') {
  135. $decorate['datas'][$key]['remote_data']['show_list'][$pkey]['title'] = '我的' . $langService->getLangSetting()['project'];
  136. }
  137. }
  138. if (!in_array($par['name'], $memberData['merchants']) || $par['is_open'] == false)
  139. {
  140. unset($decorate['datas'][$key]['remote_data']['show_list'][$pkey]);
  141. }
  142. }
  143. if ($is_cashier == 1 && $has_cashier == 1 && $storeCashier === true)
  144. {
  145. $memberData['merchants_arr']['cashier']['image'] = $this->handlePluginImage($memberData['merchants_arr']['cashier']['image']);
  146. // $decorate['datas'][$key]['remote_data']['show_list'][] = $memberData['merchants_arr']['cashier'];
  147. }
  148. $decorate['datas'][$key]['remote_data']['show_list'] = array_values($decorate['datas'][$key]['remote_data']['show_list']);
  149. }
  150. //营销互动
  151. if ($value['component_key'] == 'U_membermarket')
  152. {
  153. foreach ($value['remote_data']['show_list'] as $pkey => $par)
  154. {
  155. if(app('plugins')->isEnabled('video-share') && $par['name'] == 'video-share' && $set['list_style'] == 2)
  156. { //视频分享url单独处理
  157. $decorate['datas'][$key]['remote_data']['show_list'][$pkey]['url'] = 'VideoDetail';
  158. $decorate['datas'][$key]['remote_data']['show_list'][$pkey]['mini_url'] = '/packageC/video_goods/VideoDetail/VideoDetail';
  159. }elseif(app('plugins')->isEnabled('video-share') && $par['name'] == 'video-share'){
  160. $decorate['datas'][$key]['remote_data']['show_list'][$pkey]['url'] = 'VideoList';
  161. $decorate['datas'][$key]['remote_data']['show_list'][$pkey]['mini_url'] = '/packageC/video_goods/VideoList/VideoList';
  162. }
  163. //如果是客户 && 安装了客户中心插件 && 开启客户中心
  164. if($par['name'] == 'm-guanxi' && app('plugins')->isEnabled('customer-center') && \Setting::get("plugin.customer-center.is_open")){
  165. $decorate['datas'][$key]['remote_data']['show_list'][$pkey]['url'] = 'customerCenterIndex';
  166. $decorate['datas'][$key]['remote_data']['show_list'][$pkey]['mini_url'] = '/packageF/others/customerCenter/customerCenterIndex/customerCenterIndex';
  167. }
  168. if(app('plugins')->isEnabled('customer-development') && $par['name'] == 'customer-development')
  169. {
  170. $decorate['datas'][$key]['remote_data']['show_list'][$pkey]['mini_url'] = '/packageH/toker/memberTokerCard/memberTokerCard';
  171. }
  172. if (!in_array($par['name'], $memberData['markets']) || $par['is_open'] == false)
  173. {
  174. unset($decorate['datas'][$key]['remote_data']['show_list'][$pkey]);
  175. }else{
  176. $decorate['datas'][$key]['remote_data']['show_list'][$pkey]['title'] = empty($memberData['market_arr'][$par['name']]['title'])?$decorate['datas'][$key]['remote_data']['show_list'][$pkey]['title']:$memberData['market_arr'][$par['name']]['title'];
  177. $decorate['datas'][$key]['remote_data']['show_list'][$pkey]['mini_url'] = empty($memberData['market_arr'][$par['name']]['mini_url'])?$decorate['datas'][$key]['remote_data']['show_list'][$pkey]['mini_url']:$memberData['market_arr'][$par['name']]['mini_url'];
  178. $decorate['datas'][$key]['remote_data']['show_list'][$pkey]['url'] = empty($memberData['market_arr'][$par['name']]['url'])?$decorate['datas'][$key]['remote_data']['show_list'][$pkey]['url']:$memberData['market_arr'][$par['name']]['url'];
  179. $decorate['datas'][$key]['remote_data']['show_list'][$pkey]['total'] = isset($memberData['market_arr'][$par['name']]['total'])?$memberData['market_arr'][$par['name']]['total']:$decorate['datas'][$key]['remote_data']['show_list'][$pkey]['total'];
  180. }
  181. }
  182. $decorate['datas'][$key]['remote_data']['show_list'] = array_values($decorate['datas'][$key]['remote_data']['show_list']);
  183. }
  184. //资产权益
  185. if ($value['component_key'] == 'U_memberrights')
  186. {
  187. foreach ($value['remote_data']['show_list'] as $pkey => $par)
  188. {
  189. if (!in_array($par['name'], $memberData['assets']) || $par['is_open'] == false)
  190. {
  191. unset($decorate['datas'][$key]['remote_data']['show_list'][$pkey]);
  192. }else{
  193. $decorate['datas'][$key]['remote_data']['show_list'][$pkey]['title'] = $memberData['assets_arr'][$par['name']]['title'];
  194. }
  195. }
  196. $decorate['datas'][$key]['remote_data']['show_list'] = array_values($decorate['datas'][$key]['remote_data']['show_list']);
  197. }
  198. }
  199. $memberController = new MemberController;
  200. $advertisement = $memberController->getFirstLogin('member');
  201. $decorate['pageinfo']['params']['advertisement'] = $advertisement;
  202. //给前端判断是否新装修页面
  203. $decorate['page_plugins']='decorate';
  204. $res['data'] = $decorate;
  205. $res['status'] = true;
  206. }
  207. }
  208. if (is_null($integrated)) {
  209. return $this->successJson('成功', $res);
  210. } else {
  211. return show_json(1, $res);
  212. }
  213. }
  214. /**
  215. * 获取可用模板
  216. */
  217. private function getDesigner()
  218. {
  219. if (\Yunshop::request()->ingress == 'weChatApplet') {
  220. $pageType = 9;
  221. } else {
  222. $pageType = \Yunshop::request()->type;
  223. }
  224. $designer = MemberDesigner::uniacid()
  225. ->whereRaw('FIND_IN_SET(?,page_type)', [$pageType])
  226. ->where(['shop_page_type' => MemberDesigner::PAGE_MEMBER_CENTER, 'is_default' => 1])
  227. ->first();
  228. return $designer;
  229. }
  230. /**
  231. * @return array
  232. * 获取可用插件按钮
  233. */
  234. private function getMemberData()
  235. {
  236. $memberId = \YunShop::app()->getMemberId();
  237. $arr = (new \app\common\services\member\MemberCenterService())->getMemberData($memberId);
  238. $tools = ['m-collection', 'm-footprint', 'm-address', 'm-info'];
  239. $merchants = [];
  240. //控制二维码显示,由member-data方法搬来
  241. $member_info = MemberModel::getUserInfos_v2(\YunShop::app()->getMemberId())->first();
  242. if (empty($member_info)) {
  243. $mid = Member::getMid();
  244. $this->jump = true;
  245. return $this->jumpUrl(\YunShop::request()->type, $mid);
  246. }
  247. $member_info = $member_info->toArray();
  248. $is_agent = $member_info['yz_member']['is_agent'] == 1 && $member_info['yz_member']['status'] == 2 ? true : false;
  249. if ($is_agent) {
  250. $markets = ['m-erweima'];
  251. } else {
  252. $markets = [];
  253. }
  254. $markets = array_merge($markets, ['m-pinglun', 'm-guanxi', 'm-coupon']);
  255. $assets = [];
  256. $merchants_arr = [];
  257. foreach ($arr['tool'] as $v) {
  258. $tools[] = $v['name'];
  259. }
  260. foreach ($arr['merchant'] as $v) {
  261. $merchants[] = $v['name'];
  262. $merchants_arr[$v['name']] = $v;
  263. }
  264. foreach ($arr['market'] as $v) {
  265. $markets[] = $v['name'];
  266. $market_arr[$v['name']] = $v;
  267. }
  268. foreach ($arr['asset_equity'] as $v) {
  269. $assets[] = $v['name'];
  270. $assets_arr[$v['name']] = $v;
  271. }
  272. return [
  273. 'tools' => $tools,
  274. 'merchants' => $merchants,
  275. 'markets' => $markets,
  276. 'assets' => $assets,
  277. 'merchants_arr' => $merchants_arr,
  278. 'assets_arr' => $assets_arr,
  279. 'market_arr' => $market_arr
  280. ];
  281. }
  282. private function getLevelName($type)
  283. {
  284. $name = '';
  285. if ($type == 2) {
  286. $agency_model = TeamDividendAgencyModel::getAgencyInfoByUid(\YunShop::app()->getMemberId());
  287. $name = $agency_model->hasOneLevel->level_name ?: '';
  288. }
  289. if ($type == 3) {
  290. $request = Agents::getLevelByMemberId()
  291. ->where('member_id', \YunShop::app()->getMemberId())
  292. ->first();
  293. if (!$request) {
  294. return '';
  295. }
  296. $request = $request->toArray();
  297. if ($request['agent_level']) {
  298. $name = $request['agent_level']['name'];
  299. } else {
  300. $name = AgentLevel::getDefaultLevelName();
  301. }
  302. }
  303. return $name;
  304. }
  305. private function handlePluginImage($image)
  306. {
  307. if (config('app.framework') == 'platform') {
  308. $dir = '/';
  309. } else {
  310. $dir = '/addons/yun_shop/';
  311. }
  312. return $dir.'static/yunshop/designer/images/'.$image;
  313. }
  314. }