链街Dcat后台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

326 lines
14 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. <?php
  2. namespace App\Admin\Controllers\v3;
  3. use App\Admin\Repositories\v3\Store;
  4. use Dcat\Admin\Form;
  5. use Dcat\Admin\Grid;
  6. use Dcat\Admin\Show;
  7. use Dcat\Admin\Controllers\AdminController;
  8. use App\Models\LanzuMmInfo as MminfoModel;
  9. use App\Models\v3\Market as MarketModel;
  10. use App\Admin\Common\StoreQrCode;
  11. use App\Models\v3\Store as StoreModel;
  12. use App\Models\v3\User as UserModel;
  13. use App\Models\v3\Category as CategoryModel;
  14. use App\Models\LanzuUserBalance as UserBalanceModel;
  15. use App\Models\v3\StoreUsers as StoreUsersModel;
  16. use App\Admin\Actions\Grid\v3\StoreSetTime;
  17. class StoreController extends AdminController
  18. {
  19. /**
  20. * Make a grid builder.
  21. *
  22. * @return Grid
  23. */
  24. protected function grid()
  25. {
  26. return Grid::make(new Store(), function (Grid $grid) {
  27. // 查询市场
  28. $marketList = MarketModel::getMarketArray();
  29. // 查询一级分类
  30. // $categoryList = CategoryModel::getArray([['parent_id','=',0]]);
  31. $grid->model()->orderBy('id','desc');
  32. $grid->id->sortable();
  33. $grid->logo_url->image('',50);
  34. $grid->name;
  35. $grid->market_id->display(function ($marketId) use($marketList){
  36. // $market = MarketModel::getMarketInfo($marketId,'name');
  37. return isset($marketList[$marketId]) ? $marketList[$marketId] : '';
  38. });
  39. $grid->mm_user_id->display(function ($mmUserId){
  40. $mmUser = MminfoModel::getMmInfo($mmUserId,'name');
  41. return empty($mmUser) ? '' : $mmUser->name;
  42. });
  43. $grid->store_applet_img->display(function($appletImg){
  44. $id = $this->id;
  45. $oldPath = 'https://img.lanzu.vip/addons/zh_cjdianc/data/code_store_img/wx_store_'.$id.'.jpg';
  46. $path = empty($appletImg) ? $oldPath : config('filesystems.disks.oss.img_host').'/'.$appletImg;
  47. $img = "<img src='$path' style='width:50px;' data-action='preview-img' style='max-width:50px;max-height:200px;cursor:pointer' class='img img-thumbnail'/>";
  48. return $img;
  49. });
  50. // ->image('',50);
  51. $grid->cash_code_img->display(function($appletImg){
  52. $id = $this->id;
  53. $oldPath = 'https://img.lanzu.vip/addons/zh_cjdianc/data/code_pay_img/wx_pay_'.$id.'.jpg';
  54. $path = empty($appletImg) ? $oldPath : config('filesystems.disks.oss.img_host').'/'.$appletImg;
  55. $img = "<img src='$path' style='width:50px;' data-action='preview-img' style='max-width:50px;max-height:200px;cursor:pointer' class='img img-thumbnail'/>";
  56. return $img;
  57. });
  58. // ->image('',50);
  59. $grid->sort->sortable();
  60. $grid->is_rest->switch();
  61. $grid->is_open->switch();
  62. $grid->actions([new StoreSetTime()]);
  63. // 搜索
  64. $grid->filter(function (Grid\Filter $filter) use($marketList){
  65. $filter->equal('id');
  66. $filter->like('name');
  67. $filter->equal('market_id')->select($marketList);
  68. });
  69. // 每页10条
  70. $grid->paginate(10);
  71. $grid->disableDeleteButton();
  72. });
  73. }
  74. /**
  75. * Make a show builder.
  76. *
  77. * @param mixed $id
  78. *
  79. * @return Show
  80. */
  81. protected function detail($id)
  82. {
  83. return Show::make($id, new Store(), function (Show $show) {
  84. $show->row(function (Show\Row $show) {
  85. $show->width(6)->id;
  86. $show->width(6)->mm_user_id->as(function ($mmUserId){
  87. $item = MminfoModel::getMmInfo($mmUserId,'name');
  88. return empty($item) ? '' : $item->name;
  89. });
  90. $show->width(6)->market_id->as(function ($marketId){
  91. $item = MarketModel::getMarketInfo($marketId,'name');
  92. return empty($item) ? '' : $item->name;
  93. });
  94. $show->width(6)->category_id->as(function ($categoryId){
  95. $item = CategoryModel::getInfo($categoryId,'title');
  96. return empty($item) ? '' : $item->title;
  97. });
  98. $show->width(6)->name;
  99. $show->width(6)->logo->image();
  100. $show->width(6)->user_id->as(function ($userId){
  101. $item = UserModel::getUserInfo($userId,'nick_name');
  102. return empty($item) ? '' : $item->nick_name;
  103. });
  104. $show->width(6)->admin_id->as(function ($userId){
  105. $item = UserModel::getUserInfo($userId,'nick_name');
  106. return empty($item) ? '' : $item->nick_name;
  107. });
  108. $show->width(6)->business_license->image();
  109. $show->width(6)->zm_img->image();
  110. $show->width(6)->fm_img->image();
  111. $show->width(6)->tel;
  112. $show->width(6)->link_name;
  113. $show->width(6)->link_tel;
  114. $show->width(6)->time1;
  115. $show->width(6)->time2;
  116. $show->width(6)->time3;
  117. $show->width(6)->time4;
  118. });
  119. $show->row(function (Show\Row $show) {
  120. $show->width(6)->announcement;
  121. $show->width(6)->address;
  122. $show->width(6)->coordinates;
  123. $show->width(6)->is_rest_text;
  124. $show->width(6)->is_open_text;
  125. $show->width(6)->sort;
  126. // $show->width(6)->environment;
  127. $show->width(6)->expire_time;
  128. $show->width(6)->loudspeaker_imei;
  129. });
  130. $show->panel()->tools(function ($tools) {
  131. $tools->disableDelete();
  132. });
  133. });
  134. }
  135. /**
  136. * Make a form builder.
  137. *
  138. * @return Form
  139. */
  140. protected function form()
  141. {
  142. return Form::make(new Store(), function (Form $form) {
  143. // $userId = $form->model()->user_id;
  144. $adminId = $form->model()->admin_id;
  145. // 查询市场经理
  146. // $mmList = MminfoModel::getMmInfoArray();
  147. // 查询市场
  148. $marketList = MarketModel::getMarketArray();
  149. // 查询一级分类
  150. $categoryList = CategoryModel::getArray([['parent_id','=',0]]);
  151. // 用户
  152. // $userList = UserModel::getUserArray();
  153. // 已绑定店铺的用户
  154. // $userHas = StoreModel::pluck('admin_id')->toArray();
  155. // foreach($userList as $ku => $uv){
  156. // if($ku != 0 && in_array($ku,$userHas) && !in_array($adminId,$userHas)){
  157. // unset($userList[$ku]);
  158. // }
  159. // }
  160. $form->column(6, function (Form $form) use($marketList,$categoryList){
  161. $form->hidden('id');
  162. $form->number('mm_user_id')->help('市场经理的懒ID');
  163. $form->select('market_id')->required()->options($marketList);
  164. $form->select('category_id')->options($categoryList);
  165. $form->text('name')->required()->maxLength(50);
  166. $form->image('logo')->required()->uniqueName();
  167. $form->mobile('tel');
  168. $form->text('link_name')->required();
  169. $form->mobile('link_tel')->required();
  170. $form->number('sort');
  171. $form->switch('is_rest')
  172. ->customFormat(function ($v) {
  173. return $v == 1 ? 1 : 0;
  174. })
  175. ->saving(function ($v) {
  176. return $v == 1 ? 1 : 0;
  177. });
  178. $form->switch('is_open')
  179. ->customFormat(function ($v) {
  180. return $v == 1 ? 1 : 0;
  181. })
  182. ->saving(function ($v) {
  183. return $v == 1 ? 1 : 0;
  184. });
  185. $form->text('address')->required();
  186. });
  187. $form->column(6, function (Form $form) {
  188. $form->image('business_license')->required()->uniqueName();
  189. $form->image('zm_img')->required()->uniqueName();
  190. $form->image('fm_img')->required()->uniqueName();
  191. // $form->select('admin_id')->options($userList)->required();
  192. // $form->select('user_id')->options($userList)->required();
  193. $form->number('admin_id')->required()->min(0);
  194. $form->number('user_id')->required()->min(0);
  195. $form->time('time1','时间段一开始')->required()->format('HH:mm');
  196. $form->time('time2','时间段一结束')->required()->format('HH:mm')->rules('after:time1',['after'=>'选择的时间必须比时间段一开始时间晚']);
  197. $form->time('time3','时间段二开始')->format('HH:mm')->rules('after:time2',['after'=>'选择的时间必须比时间段一结束时间晚']);
  198. $form->time('time4','时间段二结束')->format('HH:mm')->rules('after:time3',['after'=>'选择的时间必须比时间段二开始时间晚']);
  199. // $form->timeRange('time1','time2','营业时间段一')->required();
  200. // $form->timeRange('time3','time4','营业时间段二')->rules('after:time2',['after'=>'选择的时间必须比时间段一结束时间大']);
  201. });
  202. $form->column(12, function (Form $form) {
  203. $form->map('lat','lng','地址');
  204. $form->textarea('introduction')->required();
  205. $form->textarea('announcement');
  206. $form->multipleImage('environment');
  207. });
  208. // $form->text('coordinates')->width(4)
  209. // ->placeholder('输入 经纬度,如: 108.281552,22.83731')
  210. // ->help("通过网址 <a href='https://lbs.amap.com/console/show/picker' target='_blank'>https://lbs.amap.com/console/show/picker</a> 获取经纬度");
  211. $form->saving(function(Form $form){
  212. $id = $form->getKey();
  213. $adminId = $form->input('admin_id');
  214. $store = StoreModel::select('id')->where([
  215. ['admin_id','=',$adminId],
  216. ['id','<>',$id?$id:0],
  217. ])->first();
  218. if(!empty($store)){
  219. return $form->error('管理员已经绑定了店铺');
  220. }
  221. });
  222. $form->saved(function (Form $form){
  223. $id = $form->getKey();
  224. $store = StoreModel::find($id);
  225. // 添加商户钱包
  226. $userBalance = UserBalanceModel::where([
  227. ['user_type','=',5],
  228. ['source_id','=',$id]
  229. ])->first();
  230. if(empty($userBalance)){
  231. $userBalance = new UserBalanceModel();
  232. $userBalance->user_type = 5;
  233. $userBalance->source_id = $id;
  234. $userBalance->save();
  235. }
  236. if($form->isCreating() && !empty($id)){
  237. $qrCode = new StoreQrCode();
  238. // 生成小程序码 店铺
  239. $sRes = $qrCode->SetStoreWeChatCode($id);
  240. // 生产小程序码 收银
  241. $pRes = $qrCode->SetPayWeChatCode($id);
  242. // 保存图片
  243. $store->store_applet_img = $sRes['status'] ? $sRes['path'] : '';
  244. $store->cash_code_img = $pRes['status'] ? $pRes['path'] : '';
  245. $store->save();
  246. // 剪裁图片
  247. // $form->image('cash_code_img')->crop(270, 270, [5, 5])->uniqueName();
  248. //店长账号
  249. $storeUsersInfo = StoreUsersModel::where('store_id',$id)->where('user_category',1)->first();
  250. if(empty($storeUsersInfo)){
  251. $storeUsersModel = new StoreUsersModel();
  252. $storeUsersModel->store_id = $id;
  253. $storeUsersModel->username = $form->link_tel;
  254. $storeUsersModel->join_ip = $_SERVER['SERVER_NAME'];
  255. $storeUsersModel->user_category = 1;
  256. $storeUsersModel->register_type = 4;
  257. $storeUsersModel->status = 2;
  258. $storeUsersModel->salt = $this->random(8);
  259. $storeUsersModel->password = $this->stringHash(substr($form->link_tel,-6),$storeUsersModel->salt);
  260. $storeUsersModel->remark = '入驻店铺注册';
  261. $storeUsersModel->save();
  262. }
  263. }
  264. });
  265. $form->disableResetButton();
  266. $form->disableViewCheck();
  267. $form->disableEditingCheck();
  268. $form->disableCreatingCheck();
  269. $form->disableDeleteButton();
  270. });
  271. }
  272. public function stringHash($password, $salt) {
  273. $authkey = config('admin.setting.authkey');
  274. $password = "{$password}-{$salt}-{$authkey}";
  275. return sha1($password);
  276. }
  277. /**
  278. * 字符串
  279. */
  280. public function random($length, $numeric = false) {
  281. $seed = base_convert(md5(microtime() . $_SERVER['DOCUMENT_ROOT']), 16, $numeric ? 10 : 35);
  282. $seed = $numeric ? (str_replace('0', '', $seed) . '012340567890') : ($seed . 'zZ' . strtoupper($seed));
  283. if ($numeric) {
  284. $hash = '';
  285. } else {
  286. $hash = chr(rand(1, 26) + rand(0, 1) * 32 + 64);
  287. --$length;
  288. }
  289. $max = strlen($seed) - 1;
  290. for ($i = 0; $i < $length; ++$i) {
  291. $hash .= $seed[mt_rand(0, $max)];
  292. }
  293. return $hash;
  294. }
  295. }