dever 3 years ago
parent
commit
26c4a7d252

+ 0 - 29
app/factory/assets/manage/html/sku.html

@@ -1,29 +0,0 @@
-</form>
-<form class="layui-form form10" action="" target="f10" method="post">
-<input type="hidden" name="goods_id" id="goods_id" value="">
-<input type="hidden" name="factory_id" id="factory_id" value="">
-<input type="hidden" name="function" id="function" value="skuMsg">
-<iframe id="f10" name="f10" style="display:none;"></iframe>
-<div class="layui-form-item">
-    <table class="layui-table" id="sku">
-      <thead>
-        <tr>
-          <th>昵称</th>
-          <th>加入时间</th>
-          <th>签名</th>
-        </tr> 
-      </thead>
-      <tbody>
-        <tr>
-          <td>贤心</td>
-          <td>2016-11-29</td>
-          <td>人生就像是一场修行</td>
-        </tr>
-        <tr>
-          <td>许闲心</td>
-          <td>2016-11-28</td>
-          <td>于千万人之中遇见你所遇见的人,于千万年之中,时间的无涯的荒野里…</td>
-        </tr>
-      </tbody>
-    </table>
-</div>

+ 4 - 2
app/factory/database/goods.php

@@ -92,7 +92,7 @@ return array
             'desc'      => '出厂价',
             'match'     => 'option',
             'update'    => Dever::input('col') ? 'text' : 'hidden',
-            'list'      => true,
+            'list'      => 'Dever::load("goods/lib/sku.table", "{goods_id}", "factory", "{factory_id}", false, false)',
         ),
 
         'state'     => array
@@ -125,7 +125,9 @@ return array
         'list_button' => array
         (
             //'edit' => array('设置出厂价', 'p_price', '{price_type} == 1'),
-            'fast_list' => array('设置出厂价', '"goods_sku&project=factory&search_option_goods_id={goods_id}&search_option_factory_id={factory_id}&oper_parent=goods&oper_project=factory&top_table=info&oper_save_jump=goods&page_type=1"'),
+            //'fast_list' => array('设置出厂价', '"goods_sku&project=factory&search_option_goods_id={goods_id}&search_option_factory_id={factory_id}&oper_parent=goods&oper_project=factory&top_table=info&oper_save_jump=goods&page_type=1"'),
+
+            'fast_list' => array('设置出厂价', '"info_sku&project=goods&goods_id={goods_id}&other=factory&other_id={factory_id}&page_type=1"'),
         ),
     ),
 

+ 0 - 3
app/factory/database/goods_sku.php

@@ -124,7 +124,6 @@ $config = array
                 'factory_id' => 'yes',
                 'sku_id' => 'yes',
                 'goods_id' => 'yes',
-                'factory_goods_id' => 'yes',
                 'state' => 1,
             ),
             'type' => 'all',
@@ -140,7 +139,6 @@ $config = array
                 'factory_id' => 'yes',
                 'sku_id' => 'yes',
                 'goods_id' => 'yes',
-                'factory_goods_id' => 'yes',
                 'state' => 1,
             ),
             'type' => 'one',
@@ -156,7 +154,6 @@ $config = array
                 'factory_id' => 'yes',
                 'sku_id' => 'yes',
                 'goods_id' => 'yes',
-                'factory_goods_id' => 'yes',
                 'state' => 1,
             ),
             'type' => 'one',

+ 1 - 1
app/factory/database/info.php

@@ -230,7 +230,7 @@ return array
             'match'     => 'option',
             // 多级联动+多选
             'update'    => Dever::input('col') ? 'linkage' : 'hidden',
-            'option'    => array(Dever::url('api.get', 'category'), 'cate_id', Dever::url('lib/info.getGoods', 'goods'), '设置出厂价', Dever::url('project/database/list?project=factory&table=goods_sku&page_type=1&search_option_factory_id={where_id}&search_option_goods_id={id}', 'manage')),
+            'option'    => array(Dever::url('api.get', 'category'), 'cate_id', Dever::url('lib/info.getGoods', 'goods'), '快速设置', Dever::url('project/database/list?project=goods&table=info_sku&page_type=1&other=factory&other_id={where_id}&goods_id={id}', 'manage')),
         ),
 
         'hr2'       => array

+ 1 - 138
app/factory/lib/Manage.php

@@ -1,6 +1,6 @@
 <?php
 
-namespace factory\Lib;
+namespace Factory\Lib;
 
 use Dever;
 
@@ -113,141 +113,4 @@ class Manage
             }
         }
     }
-
-    public function skuConfig()
-    {
-        $data['action'] = Dever::url('factory/lib/manage.skuUp');
-        $data['goods_id'] = Dever::input('search_option_goods_id');
-        $data['factory_id'] = Dever::input('search_option_factory_id');
-        return $data;
-    }
-
-    public function skuUp_api()
-    {
-        $goods_id = Dever::input('goods_id');
-        $factory_id = Dever::input('factory_id');
-        $key = Dever::input('key');
-        $p_price = Dever::input('p_price');
-
-        if ($key == -1) {
-            $data = array();
-            $data['factory_id'] = $factory_id;
-            $data['goods_id'] = $goods_id;
-            $data['sku_id'] = -1;
-            $factory_info = Dever::db('factory/goods_sku')->one($data);
-
-            $data['p_price'] = $p_price;
-            if (!$factory_info) {
-                Dever::db('factory/goods_sku')->insert($data);
-            } else {
-                $data['where_id'] = $factory_info['id'];
-                Dever::db('factory/goods_sku')->update($data);
-            }
-
-            $where['factory_id'] = $factory_id;
-            $where['goods_id'] = $goods_id;
-            $info = Dever::db('factory/goods')->one($where);
-
-            if ($info) {
-                Dever::db('factory/goods')->update(array('id' => $info['id'], 'p_price' => $p_price));
-            }
-        } elseif ($key) {
-            foreach ($key as $k => $v) {
-                if (isset($p_price[$k]) && $p_price[$k]) {
-                    $sku = Dever::db('goods/info_sku')->one(array('key' => $v));
-                    $data = array();
-                    $data['factory_id'] = $factory_id;
-                    $data['goods_id'] = $goods_id;
-                    $data['sku_id'] = $sku['id'];
-                    $factory_info = Dever::db('factory/goods_sku')->one($data);
-
-                    $data['p_price'] = $p_price[$k];
-                    if (!$factory_info) {
-                        Dever::db('factory/goods_sku')->insert($data);
-                    } else {
-                        $data['where_id'] = $factory_info['id'];
-                        Dever::db('factory/goods_sku')->update($data);
-                    }
-                }
-            }
-        }
-
-        Dever::out('yes');
-    }
-
-    public function skuInput()
-    {
-        $goods_id = Dever::input('search_option_goods_id');
-
-        $factory_id = Dever::input('search_option_factory_id');
-
-        $sku = Dever::db('goods/info_sku')->getData(array('info_id' => $goods_id));
-
-        $sku_value = Dever::db('factory/goods_sku')->getData(array('goods_id' => $goods_id, 'factory_id' => $factory_id));
-
-        $info = Dever::db('goods/info')->one($goods_id);
-
-        $info = \Goods\Lib\Info::init(-1)->info($info, 'list_reorder');
-
-        if (!isset($info['sell_attr'])) {
-            $html = '<input type="hidden" name="goods_id" value="'.$goods_id.'"/><input type="hidden" name="factory_id" value="'.$factory_id.'"/><input type="hidden" name="key" value="-1"/>';
-
-            $p_price = '';
-            if (isset($sku_value[-1])) {
-                $p_price = $sku_value[-1]['p_price'];
-            }
-            $html .= '<div classs="layui-col-lg6"><div><label style="font-size:14px;font-weight:bold;" class="">出厂价</label></div><div><input type="text" class="layui-input update_value form-control layui-input" name="p_price" id="p_price" autocomplete="new-password" placeholder="" value="'.$p_price.'"></div></div>';
-
-        } else {
-            $html = '请先选择属性';
-            if ($info['sell_attr']) {
-                $head = '<thead><tr>';
-                $body = '<tbody>';
-                $option = array();
-                foreach ($info['sell_attr'] as $k => $v) {
-                    $head .= '<th>'.$v['name'].'</th>';
-                    if (isset($v['option_sku'])) {
-                        $option[$k] = $v['option_sku'];
-                    }
-                }
-                $head .= '<th>出厂价</th>';
-                $head .= '</tr></thead>';
-
-                if ($option) {
-                    $option = Dever::cartesian($option);
-
-                    foreach ($option as $k => $v) {
-                        $body .= '<tr data-row="' .($k+1). '">';
-
-                        $key = $id = array();
-                        foreach ($v['name'] as $k1 => $v1) {
-                            $rows = 1;
-                            $body .= '<td width="50" rowspan="'.$rows.'">'.$v1.'</td>';
-                            $id[] = array
-                            (
-                                'id' => $v['id'][$k1],
-                                'attr_id' => $v['info_id'][$k1],
-                            );
-                            $key[] = $v['info_id'][$k1] . '-' . $v['id'][$k1];
-                        }
-                        $key = implode('_', $key);
-                        $p_price = '';
-                        if (isset($sku[$key]) && isset($sku_value[$sku[$key]['id']])) {
-                            $p_price = $sku_value[$sku[$key]['id']]['p_price'];
-                        }
-                        $body .= '<td width="30"><input type="text" class="layui-input" name="p_price['.$k.']"  value="'.$p_price.'"/></td>';
-
-                        $body .= '<input type="hidden" name="key['.$k.']" value="'.$key.'"/>';
-                        $body .= '</tr>';
-                    }
-                }
-
-                $body .= '<input type="hidden" name="goods_id" value="'.$goods_id.'"/><input type="hidden" name="factory_id" value="'.$factory_id.'"/></tbody>';
-                
-                $html = $head . $body;
-            }
-        }
-
-        return $html;
-    }
 }

+ 14 - 0
app/factory/lib/Sku.php

@@ -0,0 +1,14 @@
+<?php
+
+namespace Factory\Lib;
+
+use Dever;
+
+class Sku
+{
+    # 设置sku特殊字段
+	public $col = array
+    (
+        'p_price' => '出厂价',
+    );
+}

+ 0 - 8
app/factory/template/manage/sku.php

@@ -1,8 +0,0 @@
-<?php
-
-$view
-->fetch('.form10@action', 'factory/lib/manage.skuConfig#action')
-->fetch('#goods_id@value', 'factory/lib/manage.skuConfig#goods_id')
-->fetch('#factory_id@value', 'factory/lib/manage.skuConfig#factory_id')
-->fetch('#sku', 'factory/lib/manage.skuInput')
-->display();

+ 3 - 1
app/goods/assets/manage/html/sku.html

@@ -1,6 +1,8 @@
 </form>
 <form class="layui-form form10" action="" target="f10" method="post">
-<input type="hidden" name="info_id" id="info_id" value="">
+<input type="hidden" name="goods_id" id="goods_id" value="">
+<input type="hidden" name="other" id="other" value="">
+<input type="hidden" name="other_id" id="other_id" value="">
 <input type="hidden" name="function" id="function" value="skuMsg">
 <iframe id="f10" name="f10" style="display:none;"></iframe>
 <div class="layui-form-item">

+ 6 - 6
app/goods/database/info.php

@@ -5,7 +5,7 @@ $status = Dever::config('base')->status;
 $price_type = array
 (
     1 => '单一价格',
-    2 => '多种价格(需进行sku设置)',
+    2 => '多种价格(需进行属性设置)',
 );
 
 $mode = array
@@ -160,7 +160,7 @@ $config = array
             'default'   => '',
             'desc'      => '销售价',
             'match'     => 'option',
-            'update'    => 'text',
+            //'update'    => 'text',
             'show'      => 'price_type=1',
         ),
 
@@ -171,7 +171,7 @@ $config = array
             'default'   => '',
             'desc'      => '市场价',
             'match'     => 'option',
-            'update'    => 'text',
+            //'update'    => 'text',
             'show'      => 'price_type=1',
         ),
 
@@ -182,7 +182,7 @@ $config = array
             'default'   => '',
             'desc'      => '采购价',
             'match'     => 'option',
-            'update'    => 'text',
+            //'update'    => 'text',
             'show'      => 'price_type=1',
         ),
 
@@ -196,7 +196,7 @@ $config = array
             'update'    => 'image',
             'key'       => '1',
             'place'     => '300*300',
-            'list_name' => '资源详情',
+            'list_name' => '商品详情',
             'list'      => 'Dever::load("goods/lib/manage.info", "{id}")',
         ),
 
@@ -356,7 +356,7 @@ $config = array
         (
             'fast' => array('属性设置', '"info_attr&project=goods&search_option_info_id={id}&search_option_category={category}&oper_parent=info&oper_project=goods&oper_save_jump=info&where_id={id}"', '{price_type} == 2'),
 
-            'fast_list' => array('价格设置', '"info_sku&project=goods&search_option_info_id={id}&oper_parent=info&oper_project=goods&oper_save_jump=info&page_type=1"', '{price_type} == 2'),
+            'fast_list' => array('价格设置', '"info_sku&project=goods&goods_id={id}&page_type=1"', '{price_type} <= 2'),
             'br1' => array('<br />'),
             'delete' => '删除',
         ),

+ 14 - 121
app/goods/lib/Manage.php

@@ -143,21 +143,27 @@ class Manage
         $info = Dever::db('goods/info')->one($id);
         if ($info) {
             $table['编号'] = $info['id'];
-            $table['标题'] = $info['name'];
+            //$table['标题'] = $info['name'];
             $table['分类'] = Dever::load("category/api.string", $info['category']);
 
             if ($info['pic']) {
                 $table['商品图'] = '<img src="'.$info['pic'].'" width="150" />';
             }
 
-            //$table['属性'] = $this->attrInfo($info);
-
-            if ($info['cdate']) {
-                $table['发布时间'] = date("Y-m-d H:i:s", $info['cdate']);
+            $attr = $this->attrInfo($info);
+            if ($attr) {
+                $table['属性'] = $attr;
             }
+
+            $table['价格'] = Dever::load('goods/lib/sku')->table($info['id'], false, false, false, false);
+            
             if ($info['udate']) {
                 $table['更新时间'] = date("Y-m-d H:i:s", $info['udate']);
             }
+
+            if ($info['cdate']) {
+                $table['发布时间'] = date("Y-m-d H:i:s", $info['cdate']);
+            }
         }
 
         return Dever::table($table);
@@ -167,10 +173,10 @@ class Manage
     {
         $table = array();
 
-        $info = Info::init($info['top_category_id']);
+        $class = Info::init($info['top_category_id']);
 
         if ($info) {
-            $info = $info->info($info, 'id');
+            $info = $class->info($info);
             if ($info && isset($info['attr'])) {
                 foreach ($info['attr'] as $k => $v) {
                     $table[$v['name']] = $v['value_string'];
@@ -178,7 +184,7 @@ class Manage
             }
         }
         
-        return Dever::table($table);
+        return $table ? Dever::table($table) : false;
     }
 
     public function area($id, $name, $data)
@@ -212,119 +218,6 @@ class Manage
         }
     }
 
-    public function skuConfig()
-    {
-        $data['action'] = Dever::url('goods/lib/manage.skuUp');
-        $data['info_id'] = Dever::input('search_option_info_id');
-        return $data;
-    }
-
-    public function skuUp_api()
-    {
-        $info_id = Dever::input('info_id');
-        $attr = Dever::input('attr');
-        $key = Dever::input('key');
-        $price = Dever::input('price');
-        $s_price = Dever::input('s_price');
-        $f_price = Dever::input('f_price');
-        $num = Dever::input('num');
-
-        if ($key) {
-            foreach ($key as $k => $v) {
-                if (isset($price[$k]) && $price[$k]) {
-                    $info = Dever::db('goods/info_sku')->one(array('key' => $v));
-                    $data['info_id'] = $info_id;
-                    $data['attr'] = $attr[$k];
-                    $data['key'] = $v;
-                    $data['price'] = $price[$k];
-                    $data['s_price'] = $s_price[$k];
-                    $data['f_price'] = $f_price[$k];
-                    //$data['num'] = $num[$k];
-                    if (!$info) {
-                        Dever::db('goods/info_sku')->insert($data);
-                    } else {
-                        $data['where_id'] = $info['id'];
-                        Dever::db('goods/info_sku')->update($data);
-                    }
-                }
-            }
-        }
-
-        Dever::out('yes');
-    }
-
-    public function skuInput()
-    {
-        $id = Dever::input('search_option_info_id');
-
-        $sku = Dever::db('goods/info_sku')->getData(array('info_id' => $id));
-
-        $info = Dever::db('goods/info')->one($id);
-
-        $info = Info::init(-1)->info($info, 'list_reorder');
-
-        $html = '请先选择属性';
-        if ($info['sell_attr']) {
-            $head = '<thead><tr>';
-            $body = '<tbody>';
-            $option = array();
-            foreach ($info['sell_attr'] as $k => $v) {
-                $head .= '<th>'.$v['name'].'</th>';
-                if (isset($v['option_sku'])) {
-                    $option[$k] = $v['option_sku'];
-                }
-            }
-
-            $head .= '<th>销售价</th>';
-            $head .= '<th>市场价</th>';
-            $head .= '<th>进货价</th>';
-            //$head .= '<th>库存</th>';
-            $head .= '</tr></thead>';
-
-            if ($option) {
-                $option = Dever::cartesian($option);
-
-                foreach ($option as $k => $v) {
-                    $body .= '<tr data-row="' .($k+1). '">';
-
-                    $key = $id = array();
-                    foreach ($v['name'] as $k1 => $v1) {
-                        $rows = 1;
-                        $body .= '<td width="50" rowspan="'.$rows.'">'.$v1.'</td>';
-                        $id[] = array
-                        (
-                            'id' => $v['id'][$k1],
-                            'attr_id' => $v['info_id'][$k1],
-                        );
-                        $key[] = $v['info_id'][$k1] . '-' . $v['id'][$k1];
-                    }
-                    $key = implode('_', $key);
-                    $f_price = $s_price = $price = $num = '';
-                    if (isset($sku[$key])) {
-                        $f_price = $sku[$key]['f_price'];
-                        $s_price = $sku[$key]['s_price'];
-                        $price = $sku[$key]['price'];
-                        //$num = $sku[$key]['num'];
-                    }
-                    
-                    $body .= '<td width="30"><input type="text" class="layui-input" name="price['.$k.']"  value="'.$price.'"/></td>';
-                    $body .= '<td width="30"><input type="text" class="layui-input" name="s_price['.$k.']" value="'.$s_price.'"/></td>';
-                    $body .= '<td width="30"><input type="text" class="layui-input" name="f_price['.$k.']"  value="'.$f_price.'"/></td>';
-                    //$body .= '<td width="30"><input type="text" class="layui-input" name="num['.$k.']"  value="'.$num.'"/></td>';
-
-                    $body .= '<input type="hidden" name="key['.$k.']" value="'.$key.'"/><textarea style="display:none;" name="attr['.$k.']">'.json_encode($id).'</textarea>';
-                    $body .= '</tr>';
-                }
-            }
-
-            $body .= '</tbody>';
-            
-            $html = $head . $body;
-        }
-
-        return $html;
-    }
-
     /**
      * 显示用户信息
      *

+ 311 - 0
app/goods/lib/Sku.php

@@ -0,0 +1,311 @@
+<?php
+
+namespace Goods\Lib;
+
+use Dever;
+
+class Sku
+{
+    # 设置sku特殊字段
+    private $col = array
+    (
+        'f_price' => '销售价',
+        's_price' => '市场价',
+        'price' => '进货价',
+    );
+
+    public function __construct()
+    {
+        # 设置权限
+        Dever::load('manage/auth.init');
+    }
+
+    public function config()
+    {
+        $data['action'] = Dever::url('goods/lib/sku.update');
+        $data['goods_id'] = Dever::input('goods_id');
+        $data['other'] = Dever::input('other');
+        $data['other_id'] = Dever::input('other_id');
+        if ($data['other']) {
+            $data['other_col'] = $data['other'] . '_id';
+        }
+        
+        $data['attr'] = Dever::input('attr');
+        $data['key'] = Dever::input('key');
+        $data['hook'] = Dever::input('hook');
+
+        $data['col'] = $this->getCol($data['other']);
+        return $data;
+    }
+
+    private function getCol($other)
+    {
+        if ($other) {
+            if (Dever::project($other)) {
+                $col = Dever::load($other . '/lib/sku')->col;
+            } else {
+                Dever::alert($other . '不存在');
+            }
+        } else {
+            $col = $this->col;
+        }
+
+        return $col;
+    }
+
+    public function show()
+    {
+        $config = Dever::load('goods/lib/sku')->config();
+
+        return $this->table($config['goods_id'], $config['other'], $config['other_id'], $config['col'], true);
+    }
+
+    public function update_api()
+    {
+        $config = Dever::load('goods/lib/sku')->config();
+
+        $where = array();
+        if ($config['other']) {
+            $where[$config['other_col']] = $config['other_id'];
+            $where['goods_id'] = $config['goods_id'];
+            $key = 'sku_id';
+            $table = $config['other'] . '/goods';
+        } else {
+            $where['info_id'] = $config['goods_id'];
+            $key = 'key';
+            $table = 'goods/info';
+        }
+
+        $sku_table = $table . '_sku';
+
+        if ($config['key'] == -1) {
+
+            if ($config['other']) {
+                $info = Dever::db($table)->one($where);
+            } else {
+                $info = Dever::db($table)->one($config['goods_id']);
+            }
+
+            $update = $where;
+            foreach ($config['col'] as $k => $v) {
+                $update[$k] = Dever::input($k);
+            }
+
+            if ($info) {
+                $update['where_id'] = $info['id'];
+                Dever::db($table)->update($update);
+
+                unset($update['where_id']);
+            }
+
+            $where[$key] = -1;
+
+            $info = Dever::db($sku_table)->one($where);
+
+            $update[$key] = $where[$key];
+            Dever::config('base')->hook = false;
+            if (!$info) {
+                $state = Dever::db($sku_table)->insert($update);
+            } else {
+                $update['where_id'] = $info['id'];
+                $state = Dever::db($sku_table)->update($update);
+            }
+            
+        } elseif ($config['key']) {
+
+            if (!is_array($config['key'])) {
+                $config['key'] = explode(',', $config['key']);
+            }
+            foreach ($config['key'] as $k => $v) {
+                if (isset($config['attr'][$k])) {
+                    
+                    $data = $where;
+                    if ($config['other']) {
+                        $sku = Dever::db('goods/info_sku')->one(array('key' => $v));
+                        if (!$sku) {
+                            continue;
+                        }
+                        $data[$key] = $sku['id'];
+
+                        $info = Dever::db($sku_table)->one($data);
+                    } else {
+                        $info = Dever::db('goods/info_sku')->one(array('key' => $v));
+                        $data['attr'] = $config['attr'][$k];
+                        $data[$key] = $v;
+                    }
+                    
+                    foreach ($config['col'] as $k1 => $v1) {
+                        $value = Dever::input($k1);
+                        if (isset($value[$k])) {
+                            $data[$k1] = $value[$k];
+                        }
+                    }
+
+                    Dever::config('base')->hook = false;
+                    if (!$info) {
+                        Dever::db($sku_table)->insert($data);
+                    } else {
+                        $data['where_id'] = $info['id'];
+                        Dever::db($sku_table)->update($data);
+                    }
+                }
+            }
+        }
+
+        Dever::config('base')->hook = true;
+
+        Dever::out('yes');
+    }
+
+    public function table($goods_id, $other = false, $other_id = false, $col = false, $update = true)
+    {
+        if (!$col) {
+            $col = $this->getCol($other);
+        }
+        $input = '';
+        if ($other) {
+            $other_col = $other . '_id';
+            $sku_value = Dever::db($other . '/goods_sku')->getData(array('goods_id' => $goods_id, $other_col => $other_id));
+
+            $input = '<input type="hidden" name="goods_id" value="'.$goods_id.'"/><input type="hidden" name="'.$other_col.'" value="'.$other_id.'"/>';
+        }
+
+        $sku = Dever::db('goods/info_sku')->getData(array('info_id' => $goods_id));
+
+        $info = Dever::db('goods/info')->one($goods_id);
+
+        $info = Info::init(-1)->info($info, 'list_reorder');
+
+        $option = array();
+        $head = '<thead><tr>';
+        $html = '请先选择属性';
+
+        if (isset($info['sell_attr']) && $info['sell_attr']) {
+            foreach ($info['sell_attr'] as $k => $v) {
+                $head .= '<th>'.$v['name'].'</th>';
+                if (isset($v['option_sku'])) {
+                    $option[$k] = $v['option_sku'];
+                }
+            }
+        }
+
+        $col_num = 0;
+        foreach ($col as $k => $v) {
+            if (!$update && strstr($v, '^')) {
+                continue;
+            }
+            $col_num++;
+            if (strstr($v, '^')) {
+                $v = str_replace('^', '', $v);
+            }
+            if (strstr($v, '|')) {
+                $v = str_replace('|', '', $v);
+            }
+            
+            $head .= '<th>'.$v.'</th>';
+        }
+        
+        $head .= '</tr></thead>';
+
+        $body = '<tbody>';
+
+        if (!$option) {
+
+            if (!$update && $col_num <= 1) {
+                $head = '';
+            }
+
+            $input .= '<input type="hidden" name="key" value="-1"/>';
+
+            $body .= '<tr>';
+
+            foreach ($col as $k1 => $v1) {
+                if (!$update && strstr($v1, '^')) {
+                    continue;
+                } 
+                $value = '';
+                if (isset($sku_value[-1]) && isset($sku_value[-1][$k1])) {
+                    $value = $sku_value[-1][$k1];
+                } elseif (isset($sku[-1]) && isset($sku[-1][$k1])) {
+                    $value = $sku[-1][$k1];
+                }
+                
+                if ($update) {
+                    if (strstr($v1, '|')) {
+                        $v1 = str_replace('|', '', $v1);
+                        $body .= '<td width="30">'.$value.'</td>';
+                    } else {
+                        $body .= '<td width="30"><input type="text" class="layui-input" name="'.$k1.'"  value="'.$value.'"/></td>';
+                    }
+                    
+                } elseif ($col_num > 1) {
+                    $body .= '<td width="30">'.$value.'</td>';
+                } else {
+                    $body .= $value;
+                }
+            }
+
+            $body .= '</tr>';
+
+        } else {
+            
+            $option = Dever::cartesian($option);
+
+            foreach ($option as $k => $v) {
+                $body .= '<tr data-row="' .($k+1). '">';
+
+                $key = $id = array();
+                foreach ($v['name'] as $k1 => $v1) {
+                    $rows = 1;
+                    $body .= '<td width="50" rowspan="'.$rows.'">'.$v1.'</td>';
+                    $id[] = array
+                    (
+                        'id' => $v['id'][$k1],
+                        'attr_id' => $v['info_id'][$k1],
+                    );
+                    $key[] = $v['info_id'][$k1] . '-' . $v['id'][$k1];
+                }
+                $key = implode('_', $key);
+
+                foreach ($col as $k1 => $v1) {
+                    if (!$update && strstr($v1, '^')) {
+                        continue;
+                    } 
+                    $value = '';
+                    if (isset($sku[$key])) {
+                        if (isset($sku_value[$sku[$key]['id']][$k1])) {
+                            $value = $sku_value[$sku[$key]['id']][$k1];
+                        } elseif (isset($sku[$key][$k1])) {
+                            $value = $sku[$key][$k1];
+                        }
+                    }
+                    
+                    if ($update) {
+                        if (strstr($v1, '|')) {
+                            $v1 = str_replace('|', '', $v1);
+                            $body .= '<td width="30">'.$value.'</td>';
+                        } else {
+                            $body .= '<td width="30"><input type="text" class="layui-input" name="'.$k1.'['.$k.']"  value="'.$value.'"/></td>';
+                        }
+                        
+                    } else {
+                        $body .= '<td width="30">'.$value.'</td>';
+                    }
+                }
+
+                $body .= '<input type="hidden" name="key['.$k.']" value="'.$key.'"/><textarea style="display:none;" name="attr['.$k.']">'.json_encode($id).'</textarea>';
+                $body .= '</tr>';
+            }
+        }
+
+        $body .= $input;
+                
+        $html = $head . $body;
+
+        if (!$update) {
+            $html = '<table>' . $html . '</table>';
+        }
+
+        return $html;
+    }
+}

+ 5 - 3
app/goods/template/manage/sku.php

@@ -1,7 +1,9 @@
 <?php
 
 $view
-->fetch('.form10@action', 'goods/lib/manage.skuConfig#action')
-->fetch('#info_id@value', 'goods/lib/manage.skuConfig#info_id')
-->fetch('#sku', 'goods/lib/manage.skuInput')
+->fetch('.form10@action', 'goods/lib/sku.config#action')
+->fetch('#goods_id@value', 'goods/lib/sku.config#goods_id')
+->fetch('#other@value', 'goods/lib/sku.config#other')
+->fetch('#other_id@value', 'goods/lib/sku.config#other_id')
+->fetch('#sku', 'goods/lib/sku.show')
 ->display();

+ 0 - 28
app/shop/assets/manage/html/sku.html

@@ -1,28 +0,0 @@
-</form>
-<form class="layui-form form10" action="" target="f10" method="post">
-<input type="hidden" name="info_id" id="info_id" value="">
-<input type="hidden" name="function" id="function" value="skuMsg">
-<iframe id="f10" name="f10" style="display:none;"></iframe>
-<div class="layui-form-item">
-    <table class="layui-table" id="sku">
-      <thead>
-        <tr>
-          <th>昵称</th>
-          <th>加入时间</th>
-          <th>签名</th>
-        </tr> 
-      </thead>
-      <tbody>
-        <tr>
-          <td>贤心</td>
-          <td>2016-11-29</td>
-          <td>人生就像是一场修行</td>
-        </tr>
-        <tr>
-          <td>许闲心</td>
-          <td>2016-11-28</td>
-          <td>于千万人之中遇见你所遇见的人,于千万年之中,时间的无涯的荒野里…</td>
-        </tr>
-      </tbody>
-    </table>
-</div>

+ 54 - 10
app/shop/database/goods.php

@@ -13,6 +13,19 @@ return array
         'insert' => 'shop/lib/manage.goodsUpdate',
         'update' => 'shop/lib/manage.goodsUpdate',
     ),
+    'fill' => array
+    (
+        # 从哪个表填充
+        'goods/info' => array
+        (
+            # 条件,另外一个表的字段 => 本表的字段
+            'where' => array('id' => 'goods_id'),
+            # 要填充的数据,另外一个表的字段 => 本表的字段,如果不填写就是所有的
+            'update' => array('price_type'),
+            # 不需要填充的字段 与update互斥
+            //'no' => array('id', 'seller_id', 'service_id', 'chose', 'state', 'cdate')
+        )
+    ),
     # 数据结构
     'struct' => array
     (
@@ -53,6 +66,15 @@ return array
             'list'      => 'Dever::load("goods/info-find#name", {goods_id})',
         ),
 
+        'category_id'      => array
+        (
+            'type'      => 'int-11',
+            'name'      => '分类id',
+            'default'   => '',
+            'desc'      => '分类id',
+            'match'     => 'is_numeric',
+        ),
+
         'price_type'        => array
         (
             'type'      => 'int-11',
@@ -62,17 +84,25 @@ return array
             'match'     => 'is_numeric',
         ),
 
-        'num'        => array
+        'add_num'        => array
         (
             'type'      => 'int-11',
-            'name'      => '库存',
+            'name'      => '新增库存-输入小于0的数字,则为减少库存',
             'default'   => '0',
-            'desc'      => '库存',
+            'desc'      => '新增库存',
             'match'     => 'is_numeric',
-            'update'    => 'text',
-            'search'    => 'select',
+            'update'    => Dever::input('col') ? 'text' : 'hidden',
             'list_name' => '当前库存',
-            'list'        => '{num}-{sell_num}',
+            'list'      => 'Dever::load("goods/lib/sku.table", "{goods_id}", "shop", "{shop_id}", false, false)',
+        ),
+
+        'total_num'        => array
+        (
+            'type'      => 'int-11',
+            'name'      => '总库存',
+            'default'   => '0',
+            'desc'      => '总库存',
+            'match'     => 'is_numeric',
         ),
 
         'sell_num'      => array
@@ -83,7 +113,7 @@ return array
             'desc'      => '请填写销量',
             'match'     => 'option',
             'search'    => 'order',
-            'list'      => true,
+            //'list'      => true,
         ),
 
         'state'     => array
@@ -113,7 +143,7 @@ return array
         # 列表里的按钮
         'list_button' => array
         (
-            'fast_list' => array('多价库存设置', '"goods_sku&project=shop&search_option_shop_goods_id={id}&oper_parent=goods&oper_project=shop&top_table=info&oper_save_jump=goods&page_type=1"', '{price_type} == 2'),
+            'fast_list' => array('库存设置', '"info_sku&project=goods&goods_id={goods_id}&other=shop&other_id={shop_id}&page_type=1"'),
         ),
     ),
 
@@ -133,6 +163,20 @@ return array
             ),
         ),
 
+        # 更新总库存
+        'updateTotal' => array
+        (
+            'type' => 'update',
+            'where' => array
+            (
+                'id' => 'yes',
+            ),
+            'set' => array
+            (
+                'total_num' => array('yes', '+='),
+            ),
+        ),
+
         # 获取单条数据
         'getOne' => array
         (
@@ -144,7 +188,7 @@ return array
                 'state' => 1,
             ),
             'type' => 'one',
-            'col' => '*,num-sell_num as num',
+            'col' => '*,total_num-sell_num as num',
         ),
 
         'getData' => array
@@ -174,7 +218,7 @@ return array
             ),
             'type' => 'all',
             'order' => array('t_2.reorder' => 'desc', 't_2.id' => 'desc'),
-            'col' => '*,t_2.*,t_1.num-t_1.sell_num as num,t_1.sell_num',
+            'col' => '*,t_2.*,t_1.total_num-t_1.sell_num as num,t_1.sell_num',
         ),
     ),
 );

+ 35 - 22
app/shop/database/goods_sku.php

@@ -8,6 +8,11 @@ $config = array
     'lang' => '商品价格设置',
     'order' => 200,
     'menu' => false,
+    'end' => array
+    (
+        'insert' => 'shop/lib/manage.skuUpdate',
+        'update' => 'shop/lib/manage.skuUpdate',
+    ),
 
     # 数据结构 不同的字段放这里
     'struct' => array
@@ -42,35 +47,31 @@ $config = array
             //'list'      => 'Dever::load("goods/info-find#name", {goods_id})',
         ),
 
-        'shop_goods_id'      => array
+        'sku_id'      => array
         (
             'type'      => 'int-11',
-            'name'      => '商品名称',
+            'name'      => '商品sku',
             'default'   => '',
-            'desc'      => '商品名称',
-            'value'     => Dever::input('search_option_shop_goods_id'),
-            'update'    => 'hidden',
+            'desc'      => '商品sku',
             'match'     => 'is_numeric',
         ),
 
-        'sku_id'      => array
+        'add_num'        => array
         (
             'type'      => 'int-11',
-            'name'      => '商品sku',
-            'default'   => '',
-            'desc'      => '商品sku',
+            'name'      => '新增库存-输入小于0的数字,则为减少库存',
+            'default'   => '0',
+            'desc'      => '新增库存',
             'match'     => 'is_numeric',
         ),
 
-        'num'       => array
+        'total_num'        => array
         (
             'type'      => 'int-11',
-            'name'      => '库存',
-            'default'   => '',
-            'desc'      => '库存',
-            'match'     => 'is_string',
-            'update'    => 'text',
-            'list'      => true,
+            'name'      => '总库存',
+            'default'   => '0',
+            'desc'      => '总库存',
+            'match'     => 'is_numeric',
         ),
 
         'sell_num'      => array
@@ -81,7 +82,7 @@ $config = array
             'desc'      => '请填写销量',
             'match'     => 'option',
             'search'    => 'order',
-            'list'      => true,
+            //'list'      => true,
         ),
 
         'reorder'       => array
@@ -138,7 +139,7 @@ $config = array
     # request 请求接口定义
     'request' => array
     (
-        # 列表
+       # 列表
         'getData' => array
         (
             # 匹配的正则或函数 选填项
@@ -147,12 +148,11 @@ $config = array
                 'shop_id' => 'yes',
                 'sku_id' => 'yes',
                 'goods_id' => 'yes',
-                'shop_goods_id' => 'yes',
                 'state' => 1,
             ),
             'type' => 'all',
             'order' => array('id' => 'desc'),
-            'col' => '*,num-sell_num as num|sku_id',
+            'col' => '*,total_num-sell_num as num|sku_id',
         ),
 
         # 获取单条数据
@@ -164,11 +164,10 @@ $config = array
                 'shop_id' => 'yes',
                 'sku_id' => 'yes',
                 'goods_id' => 'yes',
-                'shop_goods_id' => 'yes',
                 'state' => 1,
             ),
             'type' => 'one',
-            'col' => '*,num-sell_num as num',
+            'col' => '*,total_num-sell_num as num',
         ),
 
         # 更新售出量
@@ -184,6 +183,20 @@ $config = array
                 'sell_num' => array('yes', '+='),
             ),
         ),
+
+        # 更新总库存
+        'updateTotal' => array
+        (
+            'type' => 'update',
+            'where' => array
+            (
+                'id' => 'yes',
+            ),
+            'set' => array
+            (
+                'total_num' => array('yes', '+='),
+            ),
+        ),
     ),
 );
 

+ 13 - 0
app/shop/database/info.php

@@ -193,6 +193,18 @@ return array
             //'list'        => true,
         ),
 
+        'goods'       => array
+        (
+            'type'      => 'text-255',
+            'name'      => '请先选择分类-选择分类,之后选择分类下的商品,点击商品名称可以设置库存',
+            'default'   => '',
+            'desc'      => '生产能力',
+            'match'     => 'option',
+            // 多级联动+多选
+            'update'    => Dever::input('col') ? 'linkage' : 'hidden',
+            'option'    => array(Dever::url('api.get', 'category'), 'cate_id', Dever::url('lib/info.getGoods', 'goods'), '快速设置', Dever::url('project/database/list?project=goods&table=info_sku&page_type=1&other=shop&other_id={where_id}&goods_id={id}', 'manage')),
+        ),
+
         'hr2'       => array
         (
             'name'      => '门店营业设置',
@@ -417,6 +429,7 @@ return array
         'insert' => false,
         'list_button' => array
         (
+            'add' => array('批量设置商品', '"info&where_id={id}&col=goods&oper_save_jump=info&oper_table=info&oper_parent=info"'),
             'list22' => array('商品管理', '"goods&search_option_shop_id={id}&oper_table=info"'),
             'list' => array('优惠券管理', '"coupon&search_option_shop_id={id}&oper_table=info"'),
             'list1' => array('账号管理', '"member&search_option_shop_id={id}&oper_table=info"'),

+ 83 - 99
app/shop/lib/Manage.php

@@ -28,6 +28,39 @@ class Manage
             $update['lat'] = $temp[2];
         }
 
+        $goods = Dever::param('goods', $data);
+        if ($goods) {
+            $goods = Dever::json_decode($goods);
+
+            if ($goods) {
+                foreach ($goods as $k1 => $v1) {
+                    if ($v1['value']) {
+                        foreach ($v1['value'] as $k => $v) {
+                            if ($v['state'] == 1) {
+                                $w = array();
+                                $w['goods_id'] = $v['id'];
+                                $w['shop_id'] = $id;
+                                $info = Dever::db('shop/goods')->one($w);
+
+                                $w['category_id'] = $v1['id'];
+                                if (!$info) {
+                                    Dever::db('shop/goods')->insert($w);
+                                } else {
+                                    $w['where_id'] = $info['id'];
+                                    $w['state'] = 1;
+                                    Dever::db('shop/goods')->update($w);
+                                }
+                            } else {
+                                unset($goods[$k1]['value'][$k]);
+                            }
+                        }
+                    }
+                }
+
+                $update['goods'] = Dever::json_encode($goods);
+            }
+        }
+
         if (isset($update) && $update) {
             $update['where_id'] = $id;
             Dever::db('shop/info')->update($update);
@@ -42,119 +75,70 @@ class Manage
     public function goodsUpdate($id, $name, $data)
     {
         $update = array();
-        $goods_id = Dever::param('goods_id', $data);
-        if ($goods_id) {
-            $info = Dever::db('goods/info')->find($goods_id);
-            $update['price_type'] = $info['price_type'];
-        }
+        $state = Dever::param('state', $data);
+        if ($state) {
+            Dever::config('base')->after = true;
+            $info = Dever::db('shop/goods')->one($id);
+            $shop_id = $info['shop_id'];
 
-        if (isset($update) && $update) {
-            $update['where_id'] = $id;
-            Dever::db('shop/goods')->update($update);
-        }
-    }
+            $shop = Dever::db('shop/info')->one($shop_id);
 
-    public function skuConfig()
-    {
-        $data['action'] = Dever::url('shop/lib/manage.skuUp');
-        $data['info_id'] = Dever::input('search_option_shop_goods_id');
-        return $data;
-    }
+            if ($shop && $shop['goods']) {
+                $goods = Dever::json_decode($shop['goods']);
 
-    public function skuUp_api()
-    {
-        $shop_goods_id = Dever::input('info_id');
-        $key = Dever::input('key');
-        $num = Dever::input('num');
-
-        $shop_goods = Dever::db('shop/goods')->one($shop_goods_id);
-        if ($key) {
-            foreach ($key as $k => $v) {
-                if (isset($num[$k]) && $num[$k]) {
-                    $info = Dever::db('goods/info_sku')->one(array('key' => $v));
-                    $data = array();
-                    $data['shop_id'] = $shop_goods['shop_id'];
-                    $data['goods_id'] = $shop_goods['goods_id'];
-                    $data['shop_goods_id'] = $shop_goods_id;
-                    $data['sku_id'] = $info['id'];
-                    $shop_info = Dever::db('shop/goods_sku')->one($data);
-
-                    $data['num'] = $num[$k];
-                    if (!$shop_info) {
-                        Dever::db('shop/goods_sku')->insert($data);
-                    } else {
-                        $data['where_id'] = $shop_info['id'];
-                        Dever::db('shop/goods_sku')->update($data);
+                if (isset($goods['level_' . $info['category_id']]['value']['id_' . $info['goods_id']])) {
+                    if ($state == 2) {
+                        unset($goods['level_' . $info['category_id']]['value']['id_' . $info['goods_id']]);
+                    }
+
+                    if (count($goods['level_' . $info['category_id']]['value']) <= 0) {
+                        unset($goods['level_' . $info['category_id']]);
                     }
+                } elseif ($state == 1) {
+                    $goods_info = Dever::db('goods/info')->one($info['goods_id']);
+                    $cate = Dever::load('category/api')->string($info['category_id']);
+                    $goods['level_' . $info['category_id']]['id'] = $info['category_id'];
+                    $goods['level_' . $info['category_id']]['name'] = $cate;
+                    $goods['level_' . $info['category_id']]['value']['id_' . $info['goods_id']] = array
+                    (
+                        'id' => $info['goods_id'],
+                        'name' => $goods_info['name'],
+                        'state' => 1,
+                    );
                 }
+                
+                $set['goods'] = Dever::json_encode($goods);
+                $set['where_id'] = $shop_id;
+                Dever::db('shop/info')->update($set);
             }
         }
-
-        Dever::out('yes');
     }
 
-    public function skuInput()
+    /**
+     * 更新库存信息
+     *
+     * @return mixed
+     */
+    public function skuUpdate($id, $name, $data)
     {
-        $id = Dever::input('search_option_shop_goods_id');
-
-        $shop_goods = Dever::db('shop/goods')->one($id);
-
-        $sku = Dever::db('goods/info_sku')->getData(array('info_id' => $shop_goods['goods_id']));
-
-        $sku_num = Dever::db('shop/goods_sku')->getData(array('shop_goods_id' => $id));
-
-        $info = Dever::db('goods/info')->one($shop_goods['goods_id']);
-
-        $info = \Goods\Lib\Info::init(-1)->info($info, 'list_reorder');
-
-        $html = '请先选择属性';
-        if ($info['sell_attr']) {
-            $head = '<thead><tr>';
-            $body = '<tbody>';
-            $option = array();
-            foreach ($info['sell_attr'] as $k => $v) {
-                $head .= '<th>'.$v['name'].'</th>';
-                if (isset($v['option_sku'])) {
-                    $option[$k] = $v['option_sku'];
+        $update = array();
+        $add_num = Dever::param('add_num', $data);
+        if ($add_num) {
+            $state = Dever::db('shop/goods_sku')->updateTotal(array('where_id' => $id, 'total_num' => $add_num));
+            if ($state) {
+                $state = Dever::db('shop/goods_sku')->update(array('where_id' => $id, 'add_num' => 0));
+                $info = Dever::db('shop/goods_sku')->one($id);
+                $goods = Dever::db('shop/goods')->one(array('goods_id' => $info['goods_id'], 'shop_id' => $info['shop_id']));
+                if ($goods) {
+                    Dever::db('shop/goods')->update(array('where_id' => $goods['id'], 'total_num' => $info['total_num'], 'add_num' => 0));
                 }
-            }
-            $head .= '<th>库存</th>';
-            $head .= '</tr></thead>';
-
-            if ($option) {
-                $option = Dever::cartesian($option);
-
-                foreach ($option as $k => $v) {
-                    $body .= '<tr data-row="' .($k+1). '">';
-
-                    $key = $id = array();
-                    foreach ($v['name'] as $k1 => $v1) {
-                        $rows = 1;
-                        $body .= '<td width="50" rowspan="'.$rows.'">'.$v1.'</td>';
-                        $id[] = array
-                        (
-                            'id' => $v['id'][$k1],
-                            'attr_id' => $v['info_id'][$k1],
-                        );
-                        $key[] = $v['info_id'][$k1] . '-' . $v['id'][$k1];
-                    }
-                    $key = implode('_', $key);
-                    $f_price = $s_price = $price = $num = '';
-                    if (isset($sku[$key]) && isset($sku_num[$sku[$key]['id']])) {
-                        $num = $sku_num[$sku[$key]['id']]['num'];
-                    }
-                    $body .= '<td width="30"><input type="text" class="layui-input" name="num['.$k.']"  value="'.$num.'"/></td>';
 
-                    $body .= '<input type="hidden" name="key['.$k.']" value="'.$key.'"/>';
-                    $body .= '</tr>';
+                if ($add_num < 0) {
+                    # 记录出库日志
+                } else {
+                    # 记录入库日志
                 }
             }
-
-            $body .= '</tbody>';
-            
-            $html = $head . $body;
         }
-
-        return $html;
     }
 }

+ 15 - 0
app/shop/lib/Sku.php

@@ -0,0 +1,15 @@
+<?php
+
+namespace Shop\Lib;
+
+use Dever;
+
+class Sku
+{
+    # 设置sku特殊字段
+	public $col = array
+    (
+        'add_num' => '新增库存数^-输入小于0的数字,则为减少库存',
+        'total_num' => '当前库存|',
+    );
+}

+ 7 - 16
app/shop/src/Buy.php

@@ -347,22 +347,13 @@ class Buy extends Core
     private function total(&$num, $goods_id, $shop_id, $sku_id, $state = 1)
     {
         $total = 0;
-        if ($sku_id > 0) {
-            $w['goods_id'] = $goods_id;
-            $w['shop_id'] = $shop_id;
-            $w['sku_id'] = $sku_id;
-            $sku = Dever::db('shop/goods_sku')->getOne($w);
-
-            if ($sku) {
-                $total = $sku['num'];
-            }
-        } else {
-            $w['goods_id'] = $goods_id;
-            $w['shop_id'] = $shop_id;
-            $goods = Dever::db('shop/goods')->getOne($w);
-            if ($goods) {
-                $total = $goods['num'];
-            }
+        $w['goods_id'] = $goods_id;
+        $w['shop_id'] = $shop_id;
+        $w['sku_id'] = $sku_id ? $sku_id : -1;
+        $sku = Dever::db('shop/goods_sku')->getOne($w);
+
+        if ($sku) {
+            $total = $sku['num'];
         }
 
         if ($num > $total) {

+ 0 - 7
app/shop/template/manage/sku.php

@@ -1,7 +0,0 @@
-<?php
-
-$view
-->fetch('.form10@action', 'shop/lib/manage.skuConfig#action')
-->fetch('#info_id@value', 'shop/lib/manage.skuConfig#info_id')
-->fetch('#sku', 'shop/lib/manage.skuInput')
-->display();

+ 0 - 28
app/store/assets/manage/html/sku.html

@@ -1,28 +0,0 @@
-</form>
-<form class="layui-form form10" action="" target="f10" method="post">
-<input type="hidden" name="info_id" id="info_id" value="">
-<input type="hidden" name="function" id="function" value="skuMsg">
-<iframe id="f10" name="f10" style="display:none;"></iframe>
-<div class="layui-form-item">
-    <table class="layui-table" id="sku">
-      <thead>
-        <tr>
-          <th>昵称</th>
-          <th>加入时间</th>
-          <th>签名</th>
-        </tr> 
-      </thead>
-      <tbody>
-        <tr>
-          <td>贤心</td>
-          <td>2016-11-29</td>
-          <td>人生就像是一场修行</td>
-        </tr>
-        <tr>
-          <td>许闲心</td>
-          <td>2016-11-28</td>
-          <td>于千万人之中遇见你所遇见的人,于千万年之中,时间的无涯的荒野里…</td>
-        </tr>
-      </tbody>
-    </table>
-</div>

+ 55 - 11
app/store/database/goods.php

@@ -12,6 +12,19 @@ return array
         'insert' => 'store/lib/manage.goodsUpdate',
         'update' => 'store/lib/manage.goodsUpdate',
     ),
+    'fill' => array
+    (
+        # 从哪个表填充
+        'goods/info' => array
+        (
+            # 条件,另外一个表的字段 => 本表的字段
+            'where' => array('id' => 'goods_id'),
+            # 要填充的数据,另外一个表的字段 => 本表的字段,如果不填写就是所有的
+            'update' => array('price_type'),
+            # 不需要填充的字段 与update互斥
+            //'no' => array('id', 'seller_id', 'service_id', 'chose', 'state', 'cdate')
+        )
+    ),
     # 数据结构
     'struct' => array
     (
@@ -52,6 +65,15 @@ return array
             'list'      => 'Dever::load("goods/info-find#name", {goods_id})',
         ),
 
+        'category_id'      => array
+        (
+            'type'      => 'int-11',
+            'name'      => '分类id',
+            'default'   => '',
+            'desc'      => '分类id',
+            'match'     => 'is_numeric',
+        ),
+
         'price_type'        => array
         (
             'type'      => 'int-11',
@@ -61,17 +83,25 @@ return array
             'match'     => 'is_numeric',
         ),
 
-        'num'        => array
+        'add_num'        => array
         (
             'type'      => 'int-11',
-            'name'      => '库存',
+            'name'      => '新增库存-输入小于0的数字,则为减少库存',
             'default'   => '0',
-            'desc'      => '库存',
+            'desc'      => '新增库存',
             'match'     => 'is_numeric',
-            'update'    => 'text',
-            'search'    => 'select',
+            'update'    => Dever::input('col') ? 'text' : 'hidden',
             'list_name' => '当前库存',
-            'list'        => '{num}-{sell_num}',
+            'list'      => 'Dever::load("goods/lib/sku.table", "{goods_id}", "store", "{store_id}", false, false)',
+        ),
+
+        'total_num'        => array
+        (
+            'type'      => 'int-11',
+            'name'      => '总库存',
+            'default'   => '0',
+            'desc'      => '总库存',
+            'match'     => 'is_numeric',
         ),
 
         'sell_num'      => array
@@ -82,7 +112,7 @@ return array
             'desc'      => '请填写销量',
             'match'     => 'option',
             'search'    => 'order',
-            'list'      => true,
+            //'list'      => true,
         ),
 
         'state'     => array
@@ -112,7 +142,7 @@ return array
         # 列表里的按钮
         'list_button' => array
         (
-            'fast_list' => array('多价库存设置', '"goods_sku&project=store&search_option_store_goods_id={id}&oper_parent=goods&oper_project=store&top_table=info&oper_save_jump=goods&page_type=1"', '{price_type} == 2'),
+            'fast_list' => array('库存设置', '"info_sku&project=goods&goods_id={goods_id}&other=store&other_id={store_id}&page_type=1"'),
         ),
     ),
 
@@ -132,18 +162,32 @@ return array
             ),
         ),
 
+        # 更新总库存
+        'updateTotal' => array
+        (
+            'type' => 'update',
+            'where' => array
+            (
+                'id' => 'yes',
+            ),
+            'set' => array
+            (
+                'total_num' => array('yes', '+='),
+            ),
+        ),
+
         # 获取单条数据
         'getOne' => array
         (
             # 匹配的正则或函数 选填项
             'option' => array
             (
-                'shop_id' => 'yes',
+                'store_id' => 'yes',
                 'goods_id' => 'yes',
                 'state' => 1,
             ),
             'type' => 'one',
-            'col' => '*,num-sell_num as num',
+            'col' => '*,total_num-sell_num as num',
         ),
 
         'getData' => array
@@ -173,7 +217,7 @@ return array
             ),
             'type' => 'all',
             'order' => array('t_2.reorder' => 'desc', 't_2.id' => 'desc'),
-            'col' => '*,t_2.*,t_1.num-t_1.sell_num as num,t_1.sell_num',
+            'col' => '*,t_2.*,t_1.total_num-t_1.sell_num as num,t_1.sell_num',
         ),
     ),
 );

+ 36 - 22
app/store/database/goods_sku.php

@@ -5,9 +5,14 @@ $config = array
     # 表名
     'name' => 'goods_sku',
     # 显示给用户看的名称
-    'lang' => '商品价格设置',
+    'lang' => '商品库存设置',
     'order' => 200,
     'menu' => false,
+    'end' => array
+    (
+        'insert' => 'store/lib/manage.skuUpdate',
+        'update' => 'store/lib/manage.skuUpdate',
+    ),
 
     # 数据结构 不同的字段放这里
     'struct' => array
@@ -28,6 +33,7 @@ $config = array
             'name'      => '所属仓库',
             'default'   => '',
             'desc'      => '所属仓库',
+            'match'     => 'is_numeric',
             'list'      => 'Dever::load("store/info-find#name", {store_id})',
         ),
 
@@ -41,35 +47,31 @@ $config = array
             'list'      => 'Dever::load("goods/info-find#name", {goods_id})',
         ),
 
-        'store_goods_id'      => array
+        'sku_id'      => array
         (
             'type'      => 'int-11',
-            'name'      => '商品名称',
+            'name'      => '商品sku',
             'default'   => '',
-            'desc'      => '商品名称',
-            'value'     => Dever::input('search_option_store_goods_id'),
-            'update'    => 'hidden',
+            'desc'      => '商品sku',
             'match'     => 'is_numeric',
         ),
 
-        'sku_id'      => array
+        'add_num'        => array
         (
             'type'      => 'int-11',
-            'name'      => '商品sku',
-            'default'   => '',
-            'desc'      => '商品sku',
+            'name'      => '新增库存-输入小于0的数字,则为减少库存',
+            'default'   => '0',
+            'desc'      => '新增库存',
             'match'     => 'is_numeric',
         ),
 
-        'num'       => array
+        'total_num'        => array
         (
             'type'      => 'int-11',
-            'name'      => '库存',
-            'default'   => '',
-            'desc'      => '库存',
-            'match'     => 'is_string',
-            'update'    => 'text',
-            'list'      => true,
+            'name'      => '总库存',
+            'default'   => '0',
+            'desc'      => '总库存',
+            'match'     => 'is_numeric',
         ),
 
         'sell_num'      => array
@@ -80,7 +82,7 @@ $config = array
             'desc'      => '请填写销量',
             'match'     => 'option',
             'search'    => 'order',
-            'list'      => true,
+            //'list'      => true,
         ),
 
         'reorder'       => array
@@ -146,12 +148,11 @@ $config = array
                 'store_id' => 'yes',
                 'sku_id' => 'yes',
                 'goods_id' => 'yes',
-                'store_goods_id' => 'yes',
                 'state' => 1,
             ),
             'type' => 'all',
             'order' => array('id' => 'desc'),
-            'col' => '*,num-sell_num as num|sku_id',
+            'col' => '*,total_num-sell_num as num|sku_id',
         ),
 
         # 获取单条数据
@@ -163,11 +164,10 @@ $config = array
                 'store_id' => 'yes',
                 'sku_id' => 'yes',
                 'goods_id' => 'yes',
-                'store_goods_id' => 'yes',
                 'state' => 1,
             ),
             'type' => 'one',
-            'col' => '*,num-sell_num as num',
+            'col' => '*,total_num-sell_num as num',
         ),
 
         # 更新售出量
@@ -183,6 +183,20 @@ $config = array
                 'sell_num' => array('yes', '+='),
             ),
         ),
+
+        # 更新总库存
+        'updateTotal' => array
+        (
+            'type' => 'update',
+            'where' => array
+            (
+                'id' => 'yes',
+            ),
+            'set' => array
+            (
+                'total_num' => array('yes', '+='),
+            ),
+        ),
     ),
 );
 

+ 17 - 1
app/store/database/info.php

@@ -173,6 +173,18 @@ return array
             //'list'        => true,
         ),
 
+        'goods'       => array
+        (
+            'type'      => 'text-255',
+            'name'      => '请先选择分类-选择分类,之后选择分类下的商品,点击商品名称可以设置库存',
+            'default'   => '',
+            'desc'      => '生产能力',
+            'match'     => 'option',
+            // 多级联动+多选
+            'update'    => Dever::input('col') ? 'linkage' : 'hidden',
+            'option'    => array(Dever::url('api.get', 'category'), 'cate_id', Dever::url('lib/info.getGoods', 'goods'), '快速设置', Dever::url('project/database/list?project=goods&table=info_sku&page_type=1&other=store&other_id={where_id}&goods_id={id}', 'manage')),
+        ),
+
         'hr2'       => array
         (
             'name'      => '仓库认证信息',
@@ -301,8 +313,12 @@ return array
     (
         'list_button' => array
         (
+            'add' => array('设置库存清单', '"info&where_id={id}&col=goods&oper_save_jump=info&oper_table=info&oper_parent=info"'),
+
+            'list3' => array('商品列表', '"goods&search_option_factory_id={id}&oper_table=info"'),
+
             'list1' => array('账号管理', '"member&search_option_store_id={id}&oper_table=info"'),
-            'list3' => array('库存清单', '"goods&search_option_store_id={id}&oper_table=info"'),
+
             'list2' => array('订货单', '"order&search_option_store_id={id}&oper_table=info"'),
         ),
     ),

+ 83 - 99
app/store/lib/Manage.php

@@ -28,6 +28,39 @@ class Manage
             $update['lat'] = $temp[2];
         }
 
+        $goods = Dever::param('goods', $data);
+        if ($goods) {
+            $goods = Dever::json_decode($goods);
+
+            if ($goods) {
+                foreach ($goods as $k1 => $v1) {
+                    if ($v1['value']) {
+                        foreach ($v1['value'] as $k => $v) {
+                            if ($v['state'] == 1) {
+                                $w = array();
+                                $w['goods_id'] = $v['id'];
+                                $w['store_id'] = $id;
+                                $info = Dever::db('store/goods')->one($w);
+
+                                $w['category_id'] = $v1['id'];
+                                if (!$info) {
+                                    Dever::db('store/goods')->insert($w);
+                                } else {
+                                    $w['where_id'] = $info['id'];
+                                    $w['state'] = 1;
+                                    Dever::db('store/goods')->update($w);
+                                }
+                            } else {
+                                unset($goods[$k1]['value'][$k]);
+                            }
+                        }
+                    }
+                }
+
+                $update['goods'] = Dever::json_encode($goods);
+            }
+        }
+
         if (isset($update) && $update) {
             $update['where_id'] = $id;
             Dever::db('store/info')->update($update);
@@ -42,119 +75,70 @@ class Manage
     public function goodsUpdate($id, $name, $data)
     {
         $update = array();
-        $goods_id = Dever::param('goods_id', $data);
-        if ($goods_id) {
-            $info = Dever::db('goods/info')->find($goods_id);
-            $update['price_type'] = $info['price_type'];
-        }
+        $state = Dever::param('state', $data);
+        if ($state) {
+            Dever::config('base')->after = true;
+            $info = Dever::db('store/goods')->one($id);
+            $store_id = $info['store_id'];
 
-        if (isset($update) && $update) {
-            $update['where_id'] = $id;
-            Dever::db('store/goods')->update($update);
-        }
-    }
+            $store = Dever::db('store/info')->one($store_id);
 
-    public function skuConfig()
-    {
-        $data['action'] = Dever::url('store/lib/manage.skuUp');
-        $data['info_id'] = Dever::input('search_option_store_goods_id');
-        return $data;
-    }
+            if ($store && $store['goods']) {
+                $goods = Dever::json_decode($store['goods']);
 
-    public function skuUp_api()
-    {
-        $store_goods_id = Dever::input('info_id');
-        $key = Dever::input('key');
-        $num = Dever::input('num');
-
-        $store_goods = Dever::db('store/goods')->one($store_goods_id);
-        if ($key) {
-            foreach ($key as $k => $v) {
-                if (isset($num[$k]) && $num[$k]) {
-                    $info = Dever::db('goods/info_sku')->one(array('key' => $v));
-                    $data = array();
-                    $data['store_id'] = $store_goods['store_id'];
-                    $data['goods_id'] = $store_goods['goods_id'];
-                    $data['store_goods_id'] = $store_goods_id;
-                    $data['sku_id'] = $info['id'];
-                    $store_info = Dever::db('store/goods_sku')->one($data);
-
-                    $data['num'] = $num[$k];
-                    if (!$store_info) {
-                        Dever::db('store/goods_sku')->insert($data);
-                    } else {
-                        $data['where_id'] = $store_info['id'];
-                        Dever::db('store/goods_sku')->update($data);
+                if (isset($goods['level_' . $info['category_id']]['value']['id_' . $info['goods_id']])) {
+                    if ($state == 2) {
+                        unset($goods['level_' . $info['category_id']]['value']['id_' . $info['goods_id']]);
+                    }
+
+                    if (count($goods['level_' . $info['category_id']]['value']) <= 0) {
+                        unset($goods['level_' . $info['category_id']]);
                     }
+                } elseif ($state == 1) {
+                    $goods_info = Dever::db('goods/info')->one($info['goods_id']);
+                    $cate = Dever::load('category/api')->string($info['category_id']);
+                    $goods['level_' . $info['category_id']]['id'] = $info['category_id'];
+                    $goods['level_' . $info['category_id']]['name'] = $cate;
+                    $goods['level_' . $info['category_id']]['value']['id_' . $info['goods_id']] = array
+                    (
+                        'id' => $info['goods_id'],
+                        'name' => $goods_info['name'],
+                        'state' => 1,
+                    );
                 }
+                
+                $set['goods'] = Dever::json_encode($goods);
+                $set['where_id'] = $store_id;
+                Dever::db('store/info')->update($set);
             }
         }
-
-        Dever::out('yes');
     }
 
-    public function skuInput()
+    /**
+     * 更新库存信息
+     *
+     * @return mixed
+     */
+    public function skuUpdate($id, $name, $data)
     {
-        $id = Dever::input('search_option_store_goods_id');
-
-        $store_goods = Dever::db('store/goods')->one($id);
-
-        $sku = Dever::db('goods/info_sku')->getData(array('info_id' => $store_goods['goods_id']));
-
-        $sku_num = Dever::db('store/goods_sku')->getData(array('store_goods_id' => $id));
-
-        $info = Dever::db('goods/info')->one($store_goods['goods_id']);
-
-        $info = \Goods\Lib\Info::init(-1)->info($info, 'list_reorder');
-
-        $html = '请先选择属性';
-        if ($info['sell_attr']) {
-            $head = '<thead><tr>';
-            $body = '<tbody>';
-            $option = array();
-            foreach ($info['sell_attr'] as $k => $v) {
-                $head .= '<th>'.$v['name'].'</th>';
-                if (isset($v['option_sku'])) {
-                    $option[$k] = $v['option_sku'];
+        $update = array();
+        $add_num = Dever::param('add_num', $data);
+        if ($add_num) {
+            $state = Dever::db('store/goods_sku')->updateTotal(array('where_id' => $id, 'total_num' => $add_num));
+            if ($state) {
+                $state = Dever::db('store/goods_sku')->update(array('where_id' => $id, 'add_num' => 0));
+                $info = Dever::db('store/goods_sku')->one($id);
+                $goods = Dever::db('store/goods')->one(array('goods_id' => $info['goods_id'], 'store_id' => $info['store_id']));
+                if ($goods) {
+                    Dever::db('store/goods')->update(array('where_id' => $goods['id'], 'total_num' => $info['total_num'], 'add_num' => 0));
                 }
-            }
-            $head .= '<th>库存</th>';
-            $head .= '</tr></thead>';
-
-            if ($option) {
-                $option = Dever::cartesian($option);
-
-                foreach ($option as $k => $v) {
-                    $body .= '<tr data-row="' .($k+1). '">';
-
-                    $key = $id = array();
-                    foreach ($v['name'] as $k1 => $v1) {
-                        $rows = 1;
-                        $body .= '<td width="50" rowspan="'.$rows.'">'.$v1.'</td>';
-                        $id[] = array
-                        (
-                            'id' => $v['id'][$k1],
-                            'attr_id' => $v['info_id'][$k1],
-                        );
-                        $key[] = $v['info_id'][$k1] . '-' . $v['id'][$k1];
-                    }
-                    $key = implode('_', $key);
-                    $f_price = $s_price = $price = $num = '';
-                    if (isset($sku[$key]) && isset($sku_num[$sku[$key]['id']])) {
-                        $num = $sku_num[$sku[$key]['id']]['num'];
-                    }
-                    $body .= '<td width="30"><input type="text" class="layui-input" name="num['.$k.']"  value="'.$num.'"/></td>';
 
-                    $body .= '<input type="hidden" name="key['.$k.']" value="'.$key.'"/>';
-                    $body .= '</tr>';
+                if ($add_num < 0) {
+                    # 记录出库日志
+                } else {
+                    # 记录入库日志
                 }
             }
-
-            $body .= '</tbody>';
-            
-            $html = $head . $body;
         }
-
-        return $html;
     }
 }

+ 15 - 0
app/store/lib/Sku.php

@@ -0,0 +1,15 @@
+<?php
+
+namespace Store\Lib;
+
+use Dever;
+
+class Sku
+{
+    # 设置sku特殊字段
+	public $col = array
+    (
+        'add_num' => '新增库存数^-输入小于0的数字,则为减少库存',
+        'total_num' => '当前库存|',
+    );
+}

+ 0 - 7
app/store/template/manage/sku.php

@@ -1,7 +0,0 @@
-<?php
-
-$view
-->fetch('.form10@action', 'store/lib/manage.skuConfig#action')
-->fetch('#info_id@value', 'store/lib/manage.skuConfig#info_id')
-->fetch('#sku', 'store/lib/manage.skuInput')
-->display();