Goods.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. <?php
  2. namespace app\admin\controller;
  3. use app\common\controller\Backend;
  4. use app\common\model\GoodsSku;
  5. use think\Db;
  6. /**
  7. * 商品列管理
  8. *
  9. * @icon fa fa-circle-o
  10. */
  11. class Goods extends Backend
  12. {
  13. /**
  14. * Goods模型对象
  15. * @var \app\admin\model\Goods
  16. */
  17. protected $model = null;
  18. public function _initialize()
  19. {
  20. parent::_initialize();
  21. $this->model = new \app\admin\model\Goods;
  22. }
  23. public function import()
  24. {
  25. parent::import();
  26. }
  27. /**
  28. * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
  29. * 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
  30. * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
  31. */
  32. /**
  33. * 查看
  34. */
  35. public function index()
  36. {
  37. //当前是否为关联查询
  38. $this->relationSearch = false;
  39. //设置过滤方法
  40. $this->request->filter(['strip_tags', 'trim']);
  41. if ($this->request->isAjax()) {
  42. //如果发送的来源是Selectpage,则转发到Selectpage
  43. if ($this->request->request('keyField')) {
  44. return $this->selectpage();
  45. }
  46. list($where, $sort, $order, $offset, $limit) = $this->buildparams();
  47. $list = $this->model
  48. ->where($where)
  49. ->order($sort, $order)
  50. ->paginate($limit);
  51. foreach ($list as $row) {
  52. $row->visible(['id','name','brand','amount','amount_kill','is_hot','is_kill','is_down','num_sell','num_stock','create_time','update_time']);
  53. }
  54. $result = array("total" => $list->total(), "rows" => $list->items());
  55. return json($result);
  56. }
  57. return $this->view->fetch();
  58. }
  59. public function add()
  60. {
  61. if($this->request->isGet()){
  62. return $this->fetch();
  63. }else{
  64. $this->makeAdd();
  65. }
  66. }
  67. public function edit($ids = null)
  68. {
  69. if($this->request->isGet()){
  70. $row=$this->model->findOrFail($ids);
  71. $this->assign('row',$row);
  72. return $this->fetch('add');
  73. }else{
  74. $this->makeAdd();
  75. }
  76. }
  77. protected function makeVal(){
  78. $data=input('row/a');
  79. $data['logo']=array_filter(explode(',',$data['logo']??''));
  80. $this->validate($data,[
  81. 'name|商品名称'=>['require'],
  82. 'brand|品牌'=>['require'],
  83. 'amount|售价'=>['require','float','gt:0'],
  84. 'is_kill'=>['require'],
  85. 'amount_kill|秒杀价'=>['float','gt:0','requireIf:is_kill,1'],
  86. 'logo|LOGO'=>['require','array','min:1'],
  87. ]);
  88. foreach ($data['sku'] as $item){
  89. $this->validate($item,[
  90. 'name|规格名'=>['require'],
  91. 'num_stock|规格库存'=>['require','gt:0'],
  92. ]);
  93. }
  94. foreach ($data['detail'] as $item){
  95. $this->validate($item,[
  96. 'name|规格参数名'=>['require'],
  97. 'value|规格参数值'=>['require','gt:0'],
  98. ]);
  99. }
  100. foreach ($data['service'] as $item){
  101. $this->validate($item,[
  102. 'name|售后服务参数名'=>['require'],
  103. 'value|售后服务参数值'=>['require','gt:0'],
  104. ]);
  105. }
  106. return $data;
  107. }
  108. protected function makeAdd(){
  109. $data=$this->makeVal();
  110. if(isset($data['id'])){
  111. $goods=$this->model->findOrFail($data['id']);
  112. }else{
  113. $goods=new $this->model;
  114. }
  115. Db::startTrans();
  116. foreach ($data as $key=>$value){
  117. if(!in_array($key,$goods::$read)){
  118. $goods[$key]=$value;
  119. }
  120. }
  121. $goods->allowField(true)->save();
  122. $ids=[];
  123. foreach ($data['sku'] as $sku){
  124. if(!empty($sku['id'])){
  125. $SKU=$goods->sku()->find($sku['id']);
  126. $SKU->allowField(true)->save($sku);
  127. }else{
  128. $SKU=$goods->sku()->save($sku);
  129. }
  130. $ids[]=$SKU['id'];
  131. }
  132. $goods->sku()->whereNotIn('id',$ids)->update(['is_del'=>1]);
  133. $ids=[];
  134. foreach ($data['detail'] as $data){
  135. if(!empty($data['id'])){
  136. $model=$goods->detail()->find($data['id']);
  137. $model->allowField(true)->save($data);
  138. }else{
  139. $model=$goods->detail()->save($data);
  140. }
  141. $ids[]=$model['id'];
  142. }
  143. $goods->detail()->whereNotIn('id',$ids)->update(['is_del'=>1]);
  144. $ids=[];
  145. foreach ($data['service'] as $data){
  146. if(!empty($data['id'])){
  147. $model=$goods->service()->find($data['id']);
  148. $model->allowField(true)->save($data);
  149. }else{
  150. $model=$goods->service()->save($data);
  151. }
  152. $ids[]=$model['id'];
  153. }
  154. $goods->service()->whereNotIn('id',$ids)->update(['is_del'=>1]);
  155. Db::commit();
  156. $this->success();
  157. }
  158. }