GoodsController.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. <?php
  2. namespace Yunshop\ReserveSimple\admin;
  3. use app\common\helpers\PaginationHelper;
  4. use app\common\helpers\Url;
  5. use app\backend\modules\goods\models\Brand;
  6. use app\backend\modules\goods\services\CopyGoodsService;
  7. use app\backend\modules\goods\services\CategoryService;
  8. use app\backend\modules\goods\models\Category;
  9. use Yunshop\ReserveSimple\common\models\Goods;
  10. use Yunshop\ReserveSimple\common\services\CreateGoodsService;
  11. use app\backend\modules\goods\services\EditGoodsService;
  12. use Yunshop\ReserveSimple\common\services\LangService;
  13. use Yunshop\ReserveSimple\widgets\ReserveSimpleGoodsWidgetManager;
  14. class GoodsController extends \app\backend\modules\goods\controllers\GoodsController
  15. {
  16. const MESSAGEJUMP = 'plugin.reserve-simple.admin.goods.index';
  17. const SORT_URL = 'plugin.reserve-simple.admin.goods.displayorder';
  18. const EDIT_URL = 'plugin.reserve-simple.admin.goods.edit';
  19. const ADD_URL = 'plugin.reserve-simple.admin.goods.create';
  20. const DELETE_URL = 'plugin.reserve-simple.admin.goods.destroy';
  21. protected $success_url = 'plugin.reserve-simple.admin.goods.index';
  22. protected $widget_url = 'plugin.reserve-simple.admin.goods.widget-column';
  23. public $lang_set = [];
  24. public function preAction()
  25. {
  26. parent::preAction();
  27. $this->lang_set = (new LangService())->getLang();
  28. }
  29. public function index()
  30. {
  31. $project_id = request()->project_id;
  32. return view('Yunshop\ReserveSimple::admin.goods.extend-index',[
  33. 'project_id'=>$project_id,
  34. 'lang_set' => $this->lang_set
  35. ]);
  36. }
  37. public function goodsList()
  38. {
  39. //增加商品属性搜索
  40. $product_attr_list = [
  41. 'is_new' => '新品',
  42. 'is_hot' => '热卖',
  43. 'is_recommand' => '推荐',
  44. 'is_discount' => '促销',
  45. ];
  46. $brands = Brand::getBrands()->get()->toArray();
  47. $service_id = request()->service_id;
  48. $catetory_menus = [
  49. 'catlevel' => $this->shopset['cat_level'],
  50. 'ids' => Category::getAllCategoryGroupArray()//CategoryFactory::create('shop'),//isset($categorySearch) ? array_values($categorySearch) : [],
  51. ];
  52. $query = Goods::Search('')->pluginId();
  53. if($service_id){
  54. $query->whereHas('hasManyReserveGoods', function ($query) use($service_id) {
  55. $query->where('service_id', $service_id);
  56. });
  57. }
  58. $list = $query->orderBy('display_order', 'desc')->orderBy('yz_goods.id', 'desc')->paginate(20);
  59. foreach ($list as $key => $item){
  60. $list[$key]['thumb'] = yz_tomedia($item->thumb);
  61. $list[$key]['link'] = yzAppFullUrl('goods/'.$item->id);
  62. }
  63. $delete_msg = '确认删除此商品?';
  64. $data = [
  65. 'list' => $list,
  66. //课程商品id
  67. 'courseGoods_ids' => [],
  68. 'brands' => $brands,
  69. 'var' => \YunShop::app()->get(),
  70. 'catetory_menus' => $catetory_menus,
  71. 'shopset' => $this->shopset,
  72. 'lang' => $this->lang,
  73. 'product_attr_list' => $product_attr_list,
  74. 'yz_url' => 'yzWebUrl',
  75. 'edit_url' => self::EDIT_URL,
  76. 'delete_url' => self::DELETE_URL,
  77. 'delete_msg' => $delete_msg,
  78. 'sort_url' => self::SORT_URL,
  79. 'copy_url' => 'plugin.reserve-simple.admin.goods.copy',
  80. 'add_url' => 'plugin.reserve-simple.admin.goods.create'
  81. ];
  82. return $this->successJson('查询成功',$data);
  83. }
  84. public function goodsSearch()
  85. {
  86. $requestSearch = request()->search;
  87. $service_id = request()->service_id;
  88. if($service_id){
  89. $requestSearch['service_id'] = $service_id;
  90. }
  91. if ($requestSearch) {
  92. $requestSearch = array_filter($requestSearch, function ($item) {
  93. return $item !== '';// && $item !== 0;
  94. });
  95. $categorySearch = array_filter(request()->category, function ($item) {
  96. return !empty($item);
  97. });
  98. if ($categorySearch) {
  99. $requestSearch['category'] = $categorySearch;
  100. }
  101. }
  102. $query = Goods::Search($requestSearch)->pluginId();
  103. if($requestSearch['service_id']){
  104. $query->whereHas('hasManyReserveGoods', function ($query) use($requestSearch) {
  105. $query->where('service_id', $requestSearch['service_id']);
  106. });
  107. }
  108. $list = $query->orderBy('display_order', 'desc')->orderBy('yz_goods.id', 'desc')->paginate(20);
  109. foreach ($list as $key => $item){
  110. $list[$key]['thumb'] = yz_tomedia($item->thumb);
  111. $list[$key]['link'] = yzAppFullUrl('goods/'.$item->id);
  112. }
  113. return $this->successJson('查询成功',$list);
  114. }
  115. public function copy()
  116. {
  117. $id = intval(\YunShop::request()->id);
  118. if (!$id) {
  119. $this->error('请传入正确参数.');
  120. }
  121. $result = CopyGoodsService::copyGoods($id);
  122. if (!$result) {
  123. $this->error('商品不存在.');
  124. }
  125. return $this->message('商品复制成功', Url::absoluteWeb(self::MESSAGEJUMP));
  126. }
  127. //商品编辑挂件获取
  128. public function widgetColumn()
  129. {
  130. $data = (new ReserveSimpleGoodsWidgetManager())->handle();
  131. return $this->successJson('widgetColumn', $data);
  132. }
  133. public function create()
  134. {
  135. if (request()->ajax()) {
  136. $request = Request();
  137. $goods_service = new CreateGoodsService($request);
  138. $result = $goods_service->create();
  139. if ($result['status'] == 1) {
  140. return $this->successJson('商品创建成功');
  141. } else {
  142. return $this->errorJson($result['msg']);
  143. }
  144. }
  145. return view('goods.vue-goods', [
  146. 'store_url' => yzWebFullUrl(request()->input('route')),
  147. 'widget_url' => yzWebFullUrl('plugin.reserve-simple.admin.goods.widget-column'),
  148. 'success_url' => yzWebFullUrl($this->success_url),
  149. ])->render();
  150. }
  151. public function displayorder()
  152. {
  153. $id = request()->id;
  154. $value = request()->value;
  155. if (empty($id)){
  156. return $this->errorJson('排序失败,商品ID不能为空');
  157. }
  158. $goods = \app\common\models\Goods::find($id);
  159. $goods->display_order = $value;
  160. if ($goods->save()){
  161. return $this->successJson('排序成功');
  162. }else{
  163. return $this->errorJson('排序失败');
  164. }
  165. }
  166. public function destroy()
  167. {
  168. $id = request()->id;
  169. $goods = Goods::destroy($id);
  170. return $this->message('商品删除成功', Url::absoluteWeb(self::MESSAGEJUMP));
  171. }
  172. }