xieruidong 2 years ago
parent
commit
828fa75f5a

+ 32 - 21
application/admin/controller/Goods.php

@@ -101,42 +101,52 @@ class Goods extends Backend
     protected function makeVal(){
         $data=input('row/a');
         $data['logo']=array_filter(explode(',',$data['logo']??''));
-        if(empty($data['is_kill'])||$data['is_kill']==0){
-            unset($data['amount_kill']);
-        }
         $this->validate($data,[
             'name|商品名称'=>['require'],
             'describe|描述'=>['require','max:50'],
             'category_id|商品分类'=>['require'],
             'brand|品牌'=>['require'],
-            //'amount|售价'=>['require','float','gt:0'],
-            //'amount_cost|成本价'=>['require','float','egt:0'],
             'is_kill'=>['require'],
-            //'amount_kill|秒杀价'=>['float','gt:0','requireIf:is_kill,1'],
             'logo|LOGO'=>['require','array','min:1','max:6'],
         ]);
-        foreach ($data['sku'] as $item){
+        foreach ($data['sku'] as $key=>$item){
             $rule=[
                 'name|规格名'=>['require'],
                 'num_stock|规格库存'=>['require','gt:0'],
-                'amount|售价'=>['require','float','gt:0'],
                 'amount_cost|成本价'=>['require','float','egt:0'],
             ];
-            if($data['is_kill']){
-                $rule['amount_kill|秒杀价']=['float','gt:0','require'];
-            }
             $this->validate($item,$rule);
+            #售价
+            $amountLadderAll=$data['amount_ladder'][$key]??[];
+            foreach ($amountLadderAll as $amount){
+                $this->validate($amount,[
+                    'min|售价区间最小数量'=>['require','gt:0'],
+                    'max|售价区间最大数量'=>['require','gt:0'],
+                    'amount|售价区间价格'=>['require','gt:0'],
+                ]);
+            }
+            #秒杀价
+            if($data['is_kill']) {
+                $amountKillLadderAll = $data['amount_kill_ladder'][$key] ?? [];
+                foreach ($amountKillLadderAll as $amount) {
+                    $this->validate($amount, [
+                        'min|秒杀价区间最小数量' => ['require', 'gt:0'],
+                        'max|秒杀价区间最大数量' => ['require', 'gt:0'],
+                        'amount|秒杀价区间价格' => ['require', 'gt:0'],
+                    ]);
+                }
+            }
         }
         foreach ($data['detail'] as $item){
             $this->validate($item,[
                 'name|规格参数名'=>['require'],
-                'value|规格参数值'=>['require','gt:0'],
+                'value|规格参数值'=>['require'],
             ]);
         }
         foreach ($data['service'] as $item){
             $this->validate($item,[
                 'name|售后服务参数名'=>['require'],
-                'value|售后服务参数值'=>['require','gt:0'],
+                'value|售后服务参数值'=>['require'],
             ]);
         }
         return $data;
@@ -151,18 +161,19 @@ class Goods extends Backend
         }
         Db::startTrans();
         foreach ($data as $key=>$value){
-            if(!in_array($key,$goods::$read)){
+            if(!in_array($key,$goods::$read) && $goods->hasColumn($key)){
                 $goods[$key]=$value;
             }
         }
         $goods->allowField(true)->save();
         $ids=[];
-        foreach ($data['sku'] as $sku){
-            $this->validate($sku,[
-                'name|规格名称'=>['require'],
-                'num_stock|库存'=>['require','gt:0'],
-                'amount|价格'=>['require','gt:0'],
-            ]);
+        foreach ($data['sku'] as $key=>$sku){
+            #售价
+            $amountLadderAll=array_values($data['amount_ladder'][$key]??[]);
+            #秒杀价
+            $amountKillLadderAll=array_values($data['amount_kill_ladder'][$key]??[]);
+            $sku['amount_ladder']=$amountLadderAll;
+            $sku['amount_kill_ladder']=$amountKillLadderAll;
             if(!empty($sku['id'])){
                 $SKU=$goods->sku()->find($sku['id']);
                 $SKU->save($sku);
@@ -200,7 +211,7 @@ class Goods extends Backend
         $goods->service()->whereNotIn('id',$ids)->delete();
         $goods->setAmount();
         Db::commit();
-        $this->success();
+        $this->error('成功');
     }
 
     public function bind_goods($ids){

+ 6 - 6
application/admin/view/goods/add.html

@@ -95,9 +95,9 @@
                 <span class="itemName">{:$aa['name']??''}</span>
                 {foreach name="$row['amount_ladder']??[[]]" item="a"}
                 <div class="amountItemOne">
-                    <input class="form-control smInput" name="row[amount_ladder][__{$aakey}][_{$key}][min]" type="number" placeholder="数量" value="{$a.min|default=''}">-
-                    <input class="form-control smInput" name="row[amount_ladder][__{$aakey}][_{$key}][max]" type="number" placeholder="数量" value="{$a.max|default=''}">,
-                    售价<input class="form-control smInput" name="row[amount_ladder][__{$aakey}][_{$key}][amount]" type="number" placeholder="金额" value="{$a.amount|default=''}">
+                    <input class="form-control smInput" name="row[amount_ladder][_{$aakey}][__{$key}][min]" type="number" placeholder="数量" value="{$a.min|default=''}">-
+                    <input class="form-control smInput" name="row[amount_ladder][_{$aakey}][__{$key}][max]" type="number" placeholder="数量" value="{$a.max|default=''}">,
+                    售价<input class="form-control smInput" name="row[amount_ladder][_{$aakey}][__{$key}][amount]" type="number" placeholder="金额" value="{$a.amount|default=''}">
                     <a class="btn btn-sm delAmountItem">删除</a>
                 </div>
                 {/foreach}
@@ -114,9 +114,9 @@
                 <span class="itemName">{:$aa['name']??''}</span>
                 {foreach name="$row['amount_ladder']??[[]]" item="a"}
                 <div class="amountItemOne">
-                    <input class="form-control smInput" name="row[amount_kill_ladder][__{$aakey}][_{$key}][min]" type="number" placeholder="数量" value="{$a.min|default=''}">-
-                    <input class="form-control smInput" name="row[amount_kill_ladder][__{$aakey}][_{$key}][max]" type="number" placeholder="数量" value="{$a.max|default=''}">,
-                    售价<input class="form-control smInput" name="row[amount_kill_ladder][__{$aakey}][_{$key}][amount]" type="number" placeholder="金额" value="{$a.amount|default=''}">
+                    <input class="form-control smInput" name="row[amount_kill_ladder][_{$aakey}][__{$key}][min]" type="number" placeholder="数量" value="{$a.min|default=''}">-
+                    <input class="form-control smInput" name="row[amount_kill_ladder][_{$aakey}][__{$key}][max]" type="number" placeholder="数量" value="{$a.max|default=''}">,
+                    售价<input class="form-control smInput" name="row[amount_kill_ladder][_{$aakey}][__{$key}][amount]" type="number" placeholder="金额" value="{$a.amount|default=''}">
                     <a class="btn btn-sm delAmountItem">删除</a>
                 </div>
                 {/foreach}

+ 2 - 0
application/common/model/Goods.php

@@ -12,6 +12,8 @@ class Goods Extends Model
 {
     protected $type=[
         'logo'=>'json',
+        'amount_ladder'=>'json',
+        'amount_kill_ladder'=>'json',
     ];
     public static $read=[
         'num_sell'

+ 2 - 2
public/assets/js/backend/goods.js

@@ -226,7 +226,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
                 $(this).parent().before(a[0].outerHTML.replace(/value="\S+"/ig,''))
 
                 //添加价格
-                let html=$('.amountItem')[0].outerHTML.replace(/\[__\d+]/g,`[__${key}]`)
+                let html=$('.amountItem')[0].outerHTML.replace(/\[_\d+]/g,`[_${key}]`)
                 let item=$(html)
                 item.find('.itemName').text('')
                 item.find('.amountItemOne').each(function (idx){
@@ -266,7 +266,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
             })
             $(document).on('click','.addAmountDetail',function (){
                 let key=Date.now()
-                let a=$($(this).prev()[0].outerHTML.replace(/\[_\d+]/g,`[_${key}]`))
+                let a=$($(this).prev()[0].outerHTML.replace(/\[__\d+]/g,`[__${key}]`))
                 $(this).before(a[0].outerHTML.replace(/value="\S+"/ig,''))
             })
         },

+ 3 - 0
thinkphp/library/think/Model.php

@@ -2367,4 +2367,7 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
             $query->whereBetween($this->getTable().'.'.$column,$date);
         }
     }
+    public function hasColumn($column){
+        return in_array($column,$this->getTableInfo()['fields']);
+    }
 }