dever 3 years ago
parent
commit
8bb4074553

+ 283 - 0
app/factory/assets/pc/html/setGoods.html

@@ -0,0 +1,283 @@
+<!doctype html>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0" />
+<meta name="author" content="siweiyong 2602812659@qq.com"/>
+<title>设置商品</title>
+<link rel="stylesheet" href="../script/lib/miniui/themes/default/miniui.css">
+<link rel="stylesheet" href="../script/lib/layui/css/layui.css" />
+<link rel="stylesheet" href="../script/lib/cashier/common.css">
+<link rel="stylesheet" href="../script/lib/layui/admin/modules/plugin/formselects/formselects.css" media="all" />
+<script src="../script/lib/jquery/jquery.min.js"></script>
+<script src="../script/lib/miniui/miniui.js"></script>
+<script src="../script/lib/layui/layui.js"></script>
+<script><{Dever::script()}></script>
+<script src="../script/dever/core.js"></script>
+</head>
+<body style="background: #F6F7F9;">
+<div class="main">
+<form class="layui-form" lay-filter="form">
+    <div class="layui-row">
+        <div class="main_left layui-col-xs12 layui-col-md3">
+            <div class="layui-row">
+                <div class="top">
+                    <i class="layui-icon layui-icon-app"></i>商品列表
+                </div>
+                <div class="left_main">
+                    <input id="key" class="mini-textbox" placeholder="请输入商品名称" onenter="onKeyEnter"/>
+                    <a class="mini-button" onclick="search()">查询</a> 
+                    <ul id="tree1" class="mini-tree" url="<{$url}>" showTreeIcon="true" textField="name" idField="id" expandOnLoad="true" onNodeClick="onNodeClick">
+                    </ul>
+                </div>
+            </div>
+        </div>
+        <div class="main_right layui-col-xs12 layui-col-md9">
+            <div class="layui-row">
+                <div class="top">
+                    <label>选择工厂:</label>
+                    <div class="layui-input-inline">
+
+                        <div><select xm-select="factory_id" xm-select-skin="normal" xm-select-search="<{$search}>" xm-select-search-type="dl" xm-select-radio="" class="update_value form-control layui-input layui-select" name="factory_id" id="factory_id"  ></select></div>
+
+                    </div>
+                    <div class="layui-input-inline">
+                        <button class="layui-btn layui-btn-button" type="button" style="vertical-align: middle;margin-bottom: 2px;" onclick="setFactory()">确认选择</button>
+                    </div>
+                </div>
+                <div class="goods_list">
+                    <table class="layui-table">
+                        <thead>
+                            <tr>
+                                <th lay-data="{field:'id'}">商品编码</th>
+                                <th lay-data="{field:'name'}">商品名称</th>
+                                <th lay-data="{field:'price', edit: 'text'}">销售价(元)</th>
+                                <th lay-data="{field:'p_price', edit: 'text'}">出厂价(元)</th>
+                                <!--<th lay-data="{field:'number', edit: 'text'}">数量</th>-->
+                                <th lay-data="{field:'operation'}">操作</th>
+                            </tr>
+                        </thead>
+                        <tbody id="goods">
+                            
+                        </tbody>
+                    </table>
+                </div>
+                <div class="total ft16">
+                    合计:【<span> 总金额:<i class="totalMoney">0.00</i> </span>】【<span> 总数量:<i class="totalQuantity">0</i> </span>
+                </div>
+                <div class="towbtn">
+                    <input type="button" id="settlement" value="确认设置">
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+</form>
+</div>
+<script>
+    var form;
+    layui.config(
+    {
+        base: '../script/lib/layui/admin/' //静态资源所在路径
+        ,version: true
+    }).extend(
+    {
+        index: 'lib/index', //主入口模块
+        formSelects: 'plugin/formselects/formselects'
+    }).use(['index', 'contlist', 'table', 'form', 'formSelects','layer'], function()
+    {
+        var table = layui.table;
+        form = layui.form; 
+        var formSelects = layui.formSelects;
+    });
+
+    $(function()
+    {
+        $("#settlement").click(function(){
+            var url = '<{$submit}>';
+            var factory_id = '<{$factory_id}>';
+
+            layui.layer.confirm('确定进行此项设置吗?', function() {
+                var goods_string = JSON.stringify(goods);
+
+                var data = {};
+                data = {factory_id:factory_id, goods:goods_string};
+                $.post(url, data, function(t) {
+                    t = JSON.parse(t);
+                    if (t.status == 1) {
+                        layui.layer.alert('商品设置成功', function(index){
+                          location.href = t.data;
+                          layer.close(index);
+                        });
+                    } else {
+                        layui.layer.alert(t.msg);
+                    }
+                });
+            });
+        })
+
+        /*
+        $("#goods").on("keyup", ".goods_num", function() {
+            var num = parseInt($(this).val());
+            if (!num || num <= 0) {
+                num = 1;
+                $(this).val(1);
+            }
+            var id = $(this).parent().attr('value');
+            goods[id].num = num;
+            setTotal();
+        });
+        */
+
+        $("#goods").on("keyup", ".goods_set_price", function() {
+            var num = parseInt($(this).val());
+            var id = $(this).parent().attr('value');
+            goods[id].p_price = num;
+            setTotal();
+        })
+    })
+    var goods = {};
+    mini.parse();
+    var tree = mini.get("tree1");
+    for (var i in tree.data) {
+        if (typeof(tree.data[i].children) == 'object') {
+            if (tree.data[i].children.length > 0) {
+                for (var j in tree.data[i].children) {
+                    if(tree.data[i].children[j].select == 1) {
+                        setGoods(tree.data[i].children[j]);
+                    }
+                }
+            } else if(tree.data[i].select == 1) {
+                setGoods(tree.data[i]);
+            }
+        }
+    }
+    function search() 
+    {
+        var key = mini.get("key").getValue();
+        if (key == "") {
+            tree.clearFilter();
+        } else {
+            key = key.toLowerCase();                
+            tree.filter(function (node) {
+                var name = node.name ? node.name.toLowerCase() : "";
+                if (name.indexOf(key) != -1) {
+                    return true;
+                }
+            });
+        }
+    }
+    function onKeyEnter(e)
+    {
+        search();
+    }
+
+    function onNodeClick()
+    {
+        var tree=mini.get("tree1");
+        node=tree.getSelectedNode();
+        if(node.end) {
+            setGoods(node);
+        }
+    }
+
+    function setGoods(node)
+    {
+        if (node.id) {
+            var key = node.id;
+            if (!goods[key]) {
+                goods[key] = node;
+                goods[key].price = parseFloat(goods[key].price);
+                goods[key].p_price = parseFloat(goods[key].p_price);
+                goods[key].num = 1;
+                create(node);
+                setTotal();
+            } else {
+                //add(key);
+            }
+        }
+    }
+
+    function get(key)
+    {
+        return $('#goods_' + key);
+    }
+
+    function create(node)
+    {
+        if (!get(node.id).length) {
+            var addtr = '<tr class="mytr" id="goods_'+node.id+'">';
+            addtr += '<td class="goods_id">'+node.id+'</td>';
+            addtr += '<td class="goods_name">'+node.name+'</td>';     
+            addtr += '<td class="goods_price">'+node.price+'</td>';              
+            addtr += '<td class="goods_p_price" value='+node.id+'><input type="tel" class="layui-input goods_set_price" value="'+node.p_price+'" /></td>';
+            //addtr += '<td><div class="jiajian" value='+node.id+'><span class="jian" onclick="dec(\''+node.id+'\')">-</span><input type="text" value="'+node.num+'" class="goods_num"><span class="jia" onclick="add(\''+node.id+'\')">+</span></div></td>';                 
+            addtr += '<td><button class="delete_btn" onclick="del(\''+node.id+'\')">删除</button></td>';                      
+            addtr += '</tr>';
+            $("#goods").append(addtr);
+        }
+    }
+
+    function add(id)
+    {
+        goods[id].num += 1;
+        get(id).find('.goods_num').val(goods[id].num);
+        setTotal();
+    }
+    
+    function dec(id)
+    {
+        goods[id].num -= 1;
+        if (goods[id].num < 1) {
+            goods[id].num = 1;
+        }
+
+        get(id).find('.goods_num').val(goods[id].num);
+        setTotal();
+    }
+
+    function del(id)
+    {
+        delete goods[id];
+        get(id).remove();
+        setTotal();
+    }
+
+
+    /*
+    //点击 - 单价 - 可编辑
+    $("#goods").on("click","td.danjia",function(){
+        if(!$(this).is('.bj')){   
+            var currentPrice = $(this).html();
+            $(this).focus();
+            $(this).addClass('bj').html('<input type="tel" class="layui-input" value="'+$(this).text()+'" />').find('input').focus().blur();    
+        } 
+    })
+    */
+    
+    function setTotal()
+    {
+        var cash = 0;
+        var num = 0;
+        for (var i in goods) {
+            num += goods[i].num;
+            cash += goods[i].p_price * goods[i].num;
+        }
+        $(".totalQuantity").html(num);
+        $(".totalMoney").html(cash); 
+    }
+
+    function setFactory()
+    {
+        var factory_id = $('.xm-select-parent[fs_id="factory_id"] span[fsw="xm-select"]').attr('value');
+        if (!factory_id) {
+            layui.layer.alert('请选择工厂');
+            return;
+        }
+        layui.layer.confirm('确定切换工厂吗?切换后现在选择的商品都将清空', function() {
+            location.href = '<{$host}>&id=' + factory_id;
+        });
+    }
+</script>
+</body>
+</html>

+ 3 - 1
app/factory/database/goods.php

@@ -7,7 +7,7 @@ return array
     'lang' => '商品列表',
     'order' => 10,
     'menu'  => false,
-    'end' => array
+    'ends' => array
     (
         'insert' => 'factory/lib/manage.goodsUpdate',
         'update' => 'factory/lib/manage.goodsUpdate',
@@ -130,7 +130,9 @@ return array
 
     'manage' => array
     (
+        'insert' => false,
         'edit' => false,
+        'delete' => false,
 
         # 列表里的按钮
         'list_button' => array

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

@@ -361,7 +361,9 @@ return array
     (
         'list_button' => array
         (
-            'add' => array('设置生产能力', '"info&where_id={id}&col=goods&oper_save_jump=info&oper_table=info&oper_parent=info"'),
+            //'add' => array('设置生产能力', '"info&where_id={id}&col=goods&oper_save_jump=info&oper_table=info&oper_parent=info"'),
+
+            'location' => array('设置生产能力', Dever::url('lib/set.home', 'factory')),
 
             'list3' => array('商品列表', '"goods&search_option_factory_id={id}&oper_table=info"'),
 

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

@@ -93,7 +93,7 @@ class Manage
     }
 
     /**
-     * 更新商品信息
+     * 更新商品信息 废弃
      *
      * @return mixed
      */

+ 92 - 0
app/factory/lib/Set.php

@@ -0,0 +1,92 @@
+<?php
+
+namespace Factory\Lib;
+
+use Dever;
+
+# 批量设置商品
+class Set
+{
+    # 导出订单
+    public function __construct()
+    {
+        Dever::load('manage/auth.init');
+    }
+
+    # 获取工厂
+    public function search_api()
+    {
+        return Dever::search('factory/info');
+    }
+
+    # 获取商品列表
+    public function goods_api()
+    {
+        $factory_id = Dever::input('factory_id', 1);
+        return Dever::outDiy(Dever::load('goods/lib/manage')->getGoodsList($factory_id, 'factory_id', 'factory/goods_sku'));
+    }
+
+    # 设置生产能力
+    public function home_api()
+    {
+        $data = array();
+        $data['factory_id'] = Dever::input('id', 1);
+        $data['host'] = Dever::url('lib/set.home', 'factory');
+        $data['url'] = Dever::url('lib/set.goods?factory_id=' . $data['factory_id'], 'factory');
+        $data['search'] = Dever::url('lib/set.search?yes='.$data['factory_id'].'&json=1', 'factory');
+        $data['submit'] = Dever::url('lib/set.action_cmmmit?json=1', 'factory');
+
+        return Dever::render('setGoods', $data);
+    }
+
+    # 设置生产能力
+    public function action_cmmmit_api()
+    {
+        $goods = Dever::input('goods');
+        if (!$goods) {
+            Dever::alert('请传入商品');
+        }
+        $goods = Dever::json_decode($goods);
+        $factory_id = Dever::input('factory_id');
+
+        foreach ($goods as $k => $v) {
+            $temp = explode('-', $k);
+            $goods_id = $temp[0];
+            if (isset($temp[1])) {
+                $sku_id = $temp[1];
+            } else {
+                $sku_id = -1;
+            }
+            $w = array();
+            $w['goods_id'] = $goods_id;
+            $w['factory_id'] = $factory_id;
+            $info = Dever::db('factory/goods')->one($w);
+
+            $w['p_price'] = $v['p_price'];
+            if (!$info) {
+                Dever::db('factory/goods')->insert($w);
+            } else {
+                $w['where_id'] = $info['id'];
+                $w['state'] = 1;
+                Dever::db('factory/goods')->update($w);
+            }
+
+            $w = array();
+            $w['goods_id'] = $goods_id;
+            $w['factory_id'] = $factory_id;
+            $w['sku_id'] = $sku_id;
+            $info = Dever::db('factory/goods_sku')->one($w);
+
+            $w['p_price'] = $v['p_price'];
+            if (!$info) {
+                Dever::db('factory/goods_sku')->insert($w);
+            } else {
+                $w['where_id'] = $info['id'];
+                $w['state'] = 1;
+                Dever::db('factory/goods_sku')->update($w);
+            }
+        }
+
+        return Dever::url('project/database/list&project=factory&&table=info&menu=factory&search_option_state=1', 'manage');
+    }
+}

+ 67 - 0
app/goods/lib/Manage.php

@@ -353,4 +353,71 @@ class Manage
 
         return $data;
     }
+
+    # 获取商品及其属性列表
+    public function getGoodsList($id, $type, $table)
+    {
+        $where['status'] = 1;
+        $data = Dever::db('goods/info')->select($where);
+
+        $result = array();
+        if ($data) {
+            foreach ($data as $k => $v) {
+                $sku = Dever::db('goods/info_sku')->select(array('info_id' => $v['id']));
+
+                if ($sku) {
+                    $other = Dever::db($table)->getOne(array($type => $id, 'goods_id' => $v['id'], 'key' => -1));
+                    $result[$k]['id'] = $v['id'];
+                    $result[$k]['name'] = $v['name'];
+                    $result[$k]['price'] = $v['price'];
+                    $result[$k]['select'] = 2;
+                    if ($type == 'factory_id') {
+                        if ($other) {
+                            $result[$k]['p_price'] = $other['p_price'];
+                            $result[$k]['select'] = 1;
+                        } else {
+                            $result[$k]['p_price'] = $v['price'];
+                        }
+                    }
+                    $result[$k]['children'] = array();
+                    $num = count($sku);
+                    if ($num == 1 && $sku[0]['key'] == -1) {
+                        $result[$k]['end'] = true;
+                    } else {
+                        foreach ($sku as $k1 => $v1) {
+                            $v1['sku_name'] = '';
+                            if ($v1['attr']) {
+                                $v1['attr'] = Dever::json_decode($v1['attr']);
+                                $v1['attr'] = Dever::load('attr/api')->getInfoByJson($v1['attr']);
+                                $v1['sku_name'] = $v1['attr']['string'];
+                            }
+
+                            $other_sku = Dever::db($table)->getOne(array($type => $id, 'goods_id' => $v['id'], 'sku_id' => $v1['id']));
+
+                            $p_price = $v1['price'];
+                            $select = 2;
+                            if ($type == 'factory_id') {
+                                if ($other_sku) {
+                                    $p_price = $other_sku['p_price'];
+                                    $select = 1;
+                                } 
+                            }
+
+                            $result[$k]['children'][] = array
+                            (
+                                'id' => $v['id'] . '-' . $v1['id'],
+                                'name' => $v['name'] . '-' . $v1['sku_name'],
+                                'price' => $v1['price'] ? $v1['price'] : 0,
+                                'p_price' => $p_price,
+                                'select' => $select,
+                                'end' => true,
+                            );
+                        }
+                    }
+                }
+            }
+        }
+
+        return $result;
+    }
 }

+ 1 - 1
app/mshop/lib/Buy.php

@@ -1091,7 +1091,7 @@ class Buy
             $where['sku_id'] = ($goods['sku_id'] && $goods['sku_id'] > 0) ? $goods['sku_id'] : -1;
             $sku = Dever::db('factory/goods_sku')->getOne($where);
 
-            if ($sku) {
+            if ($sku && $sku['p_price'] > 0) {
                 $state = $this->createOrder($order_id, $order_num, 1, $shop['id'], 3, $where['factory_id'], $goods['price'], $sku['p_price'], $goods['num'], $where['goods_id'], $where['sku_id']);
                 if ($state) {
                     $type_id[] = $where['factory_id'];