dever 3 years ago
parent
commit
3675e3f6b4

+ 2 - 1
app/factory/assets/manage/html/sku.html

@@ -1,6 +1,7 @@
 </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="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">

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

@@ -65,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',
@@ -115,8 +124,8 @@ return array
         # 列表里的按钮
         'list_button' => array
         (
-            'edit' => array('设置出厂价', 'p_price', '{price_type} == 1'),
-            'fast_list' => array('设置出厂价', '"goods_sku&project=factory&search_option_factory_goods_id={id}&oper_parent=goods&oper_project=factory&top_table=info&oper_save_jump=goods&page_type=1"', '{price_type} == 2'),
+            //'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"'),
         ),
     ),
 

+ 1 - 11
app/factory/database/goods_sku.php

@@ -28,6 +28,7 @@ $config = array
             'name'      => '所属工厂',
             'default'   => '',
             'desc'      => '所属工厂',
+            'match'     => 'is_numeric',
             'list'      => 'Dever::load("factory/info-find#name", {factory_id})',
         ),
 
@@ -41,17 +42,6 @@ $config = array
             'list'      => 'Dever::load("goods/info-find#name", {goods_id})',
         ),
 
-        'factory_goods_id'      => array
-        (
-            'type'      => 'int-11',
-            'name'      => '商品名称',
-            'default'   => '',
-            'desc'      => '商品名称',
-            'value'     => Dever::input('search_option_factory_goods_id'),
-            'update'    => 'hidden',
-            'match'     => 'is_numeric',
-        ),
-
         'sku_id'      => array
         (
             'type'      => 'int-11',

+ 18 - 2
app/factory/database/info.php

@@ -32,7 +32,8 @@ return array
         'insert' => 'factory/lib/manage.infoUpdate',
         'update' => 'factory/lib/manage.infoUpdate',
     ),
-    # 同步更新另外一个或多个表的多条关联数据,以逗号隔开
+    # 同步更新另外一个或多个表的多条关联数据,以逗号隔开,goods格式有变化,只能通过end处理
+    /*
     'sync' => array
     (
         'factory/goods' => array
@@ -45,6 +46,7 @@ return array
             'type' => 'update',
         )
     ),
+    */
     # 数据结构
     'struct' => array
     (
@@ -198,6 +200,7 @@ return array
             //'list'        => true,
         ),
 
+        /*
         'goods'       => array
         (
             'type'      => 'text-255',
@@ -216,6 +219,19 @@ return array
             # 或者加入可选项
             //'option' => $cate,
         ),
+        */
+
+        '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=factory&table=goods_sku&page_type=1&search_option_factory_id={where_id}&search_option_goods_id={id}', 'manage')),
+        ),
 
         'hr2'       => array
         (
@@ -345,7 +361,7 @@ return array
     (
         'list_button' => array
         (
-            'add' => array('设置生产能力', '"info&where_id={id}&col=goods&oper_save_jump=goods&oper_table=info&oper_parent=info"'),
+            '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"'),
 

+ 152 - 79
app/factory/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['factory_id'] = $id;
+                                $info = Dever::db('factory/goods')->one($w);
+
+                                $w['category_id'] = $v1['id'];
+                                if (!$info) {
+                                    Dever::db('factory/goods')->insert($w);
+                                } else {
+                                    $w['where_id'] = $info['id'];
+                                    $w['state'] = 1;
+                                    Dever::db('factory/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('factory/info')->update($update);
@@ -44,62 +77,91 @@ class Manage
         $update = array();
         $state = Dever::param('state', $data);
         if ($state) {
+            Dever::config('base')->after = true;
             $info = Dever::db('factory/goods')->one($id);
             $factory_id = $info['factory_id'];
 
-            $array = Dever::db('factory/goods')->getIds(array('factory_id' => $factory_id));
-            Dever::config('base')->after = true;
-            if ($array) {
-                $ids = array_keys($array);
-                $set = array();
-                $set['goods'] = implode(',', $ids);
-                $set['where_id'] = $factory_id;
-                Dever::db('factory/info')->update($set);
-            } else {
-                $set['goods'] = '';
+            $factory = Dever::db('factory/info')->one($factory_id);
+
+            if ($factory && $factory['goods']) {
+                $goods = Dever::json_decode($factory['goods']);
+
+                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'] = $factory_id;
                 Dever::db('factory/info')->update($set);
             }
         }
-
-        $goods_id = Dever::param('goods_id', $data);
-        if ($goods_id) {
-            $info = Dever::db('goods/info')->find($goods_id);
-            $update['price_type'] = $info['price_type'];
-        }
-
-        if (isset($update) && $update) {
-            $update['where_id'] = $id;
-            Dever::db('factory/goods')->update($update);
-        }
     }
 
     public function skuConfig()
     {
         $data['action'] = Dever::url('factory/lib/manage.skuUp');
-        $data['info_id'] = Dever::input('search_option_factory_goods_id');
+        $data['goods_id'] = Dever::input('search_option_goods_id');
+        $data['factory_id'] = Dever::input('search_option_factory_id');
         return $data;
     }
 
     public function skuUp_api()
     {
-        $factory_goods_id = Dever::input('info_id');
+        $goods_id = Dever::input('goods_id');
+        $factory_id = Dever::input('factory_id');
         $key = Dever::input('key');
-        $c_price = Dever::input('c_price');
+        $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);
+            }
 
-        $factory_goods = Dever::db('factory/goods')->one($factory_goods_id);
-        if ($key) {
+            $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($c_price[$k]) && $c_price[$k]) {
-                    $info = Dever::db('goods/info_sku')->one(array('key' => $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_goods['factory_id'];
-                    $data['goods_id'] = $factory_goods['goods_id'];
-                    $data['factory_goods_id'] = $factory_goods_id;
-                    $data['sku_id'] = $info['id'];
+                    $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['c_price'] = $c_price[$k];
+                    $data['p_price'] = $p_price[$k];
                     if (!$factory_info) {
                         Dever::db('factory/goods_sku')->insert($data);
                     } else {
@@ -115,64 +177,75 @@ class Manage
 
     public function skuInput()
     {
-        $id = Dever::input('search_option_factory_goods_id');
+        $goods_id = Dever::input('search_option_goods_id');
 
-        $factory_goods = Dever::db('factory/goods')->one($id);
+        $factory_id = Dever::input('search_option_factory_id');
 
-        $sku = Dever::db('goods/info_sku')->getData(array('info_id' => $factory_goods['goods_id']));
+        $sku = Dever::db('goods/info_sku')->getData(array('info_id' => $goods_id));
 
-        $sku_num = Dever::db('factory/goods_sku')->getData(array('factory_goods_id' => $id));
+        $sku_value = Dever::db('factory/goods_sku')->getData(array('goods_id' => $goods_id, 'factory_id' => $factory_id));
 
-        $info = Dever::db('goods/info')->one($factory_goods['goods_id']);
+        $info = Dever::db('goods/info')->one($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'];
-                }
+        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'];
             }
-            $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];
+            $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'];
                     }
-                    $key = implode('_', $key);
-                    $c_price = '';
-                    if (isset($sku[$key]) && isset($sku_num[$sku[$key]['id']])) {
-                        $c_price = $sku_num[$sku[$key]['id']]['c_price'];
+                }
+                $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 .= '<td width="30"><input type="text" class="layui-input" name="c_price['.$k.']"  value="'.$c_price.'"/></td>';
-
-                    $body .= '<input type="hidden" name="key['.$k.']" value="'.$key.'"/>';
-                    $body .= '</tr>';
                 }
-            }
 
-            $body .= '</tbody>';
-            
-            $html = $head . $body;
+                $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;

+ 2 - 1
app/factory/template/manage/sku.php

@@ -2,6 +2,7 @@
 
 $view
 ->fetch('.form10@action', 'factory/lib/manage.skuConfig#action')
-->fetch('#info_id@value', 'factory/lib/manage.skuConfig#info_id')
+->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();

+ 28 - 0
app/goods/database/info_category.php

@@ -62,4 +62,32 @@ return array
         'edit' => false,
         'insert' => false,
     ),
+
+    'request' => array
+    (
+        'getData' => array
+        (
+            # 匹配的正则或函数 选填项
+            'option' => array
+            (
+                'category_id' => array('yes-t_1.category_id'),
+                'status' => array('yes-t_2.status', 1),
+                'state' => array('yes-t_2.state', 1),
+            ),
+            # 联表
+            'join' => array
+            (
+                array
+                (
+                    'table' => 'goods/info',
+                    'type' => 'left join',
+                    'on' => array('info_id','id'),
+                    'col' => 'info_id',
+                ),
+            ),
+            'type' => 'all',
+            'order' => array('t_2.top' => 'asc', 't_2.reorder' => 'desc', 't_2.id' => 'desc'),
+            'col' => '*,t_2.*',
+        ),
+    ),
 );

+ 11 - 0
app/goods/lib/Info.php

@@ -551,4 +551,15 @@ class Info
     {
         $this->view_path = $path;
     }
+
+    # 根据分类获取商品
+    public function getGoods_api()
+    {
+        $where['category_id'] = Dever::input('cate_id');
+        $factory_id = Dever::input('id');
+
+        $data = Dever::db('goods/info_category')->getData($where);
+
+        return $data;
+    }
 }