rabin 2 år sedan
förälder
incheckning
85e57811e3

+ 22 - 6
app/card/database/info.php

@@ -18,6 +18,7 @@ $create_type = array
 (
     1 => '正常礼品卡',
     2 => '合并礼品卡',
+    3 => '面值自定义卡',
 );
 
 return array
@@ -39,7 +40,7 @@ return array
             'desc'      => '',
             'match'     => 'is_numeric',
             'search'    => 'order',
-            'list'      => true,
+            //'list'      => true,
             'order'     => 'desc',
         ),
         
@@ -67,32 +68,46 @@ return array
             'list'      => true,
         ),
 
+        'category'      => array
+        (
+            'type'      => 'varchar-500',
+            'name'      => '可用商品分类',
+            'default'   => '',
+            'desc'      => '可用商品分类',
+            'match'     => 'is_string',
+            //'search'    => 'linkage',
+            //'update'    => 'linkage',
+            //'option'    => Dever::url('api.get', 'category'),
+            //'list'        => 'Dever::load("category/api.string", "{category}")',
+        ),
+
         'value'        => array
         (
             'type'      => 'int-11',
             'name'      => '面值',
-            'default'   => '100',
+            'default'   => '0',
             'desc'      => '面值',
             'match'     => 'is_numeric',
             'update'    => 'text',
-            'list'      => true,
+            'list_name' => '面值/售价',  
+            'list'      => '"{value}/{price}"',
         ),
 
         'price'        => array
         (
             'type'      => 'varchar-80',
             'name'      => '售价',
-            'default'   => '100',
+            'default'   => '0',
             'desc'      => '售价',
             'match'     => 'is_numeric',
             'update'    => 'text',
-            'list'      => true,
+            //'list'      => true,
         ),
 
         'create_type'        => array
         (
             'type'      => 'int-11',
-            'name'      => '生成类型',
+            'name'      => '生成类型-仅影响后台生成礼品卡时,生成的礼品卡类型,如代理商发放的礼品卡',
             'default'   => '1',
             'desc'      => '生成类型',
             'match'     => 'is_numeric',
@@ -212,6 +227,7 @@ return array
             'option' => array
             (
                 'type_id' => array('yes', 'in'),
+                'create_type' => array('yes', 'in'),
                 'status' => 1,
                 'state' => 1,
             ),

BIN
data/qiquan_2022_05_06_04.xlsx


+ 254 - 0
service/agent/assets/pc/html/setPrizeGoods.html

@@ -0,0 +1,254 @@
+<!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>商品列表
+
+                    <!-- <a class="mini-button" onclick="location.href='<{$link}>'">返回上一页</a> -->
+                </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="goods_list" style="height:645px;">
+                    <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:'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="totalNum">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;
+        form.render(); 
+    });
+
+    $(function()
+    {
+        $("#settlement").click(function(){
+            var url = '<{$submit}>';
+            var prize_id = '<{$prize_id}>';
+            var link = '<{$link}>';
+
+            layui.layer.confirm('确定进行此项设置吗?', function() {
+                var goods_string = JSON.stringify(goods);
+
+                var data = {};
+                data = {prize_id:prize_id, goods:goods_string,link:link};
+                $.post(url, data, function(t) {
+                    t = JSON.parse(t);
+                    if (t.status == 1) {
+                        layui.layer.alert('名额权益设置成功', function(index){
+                          location.reload();
+                          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 = 0;
+                $(this).val(0);
+            }
+            var id = $(this).parent().attr('value');
+            goods[id].total = num;
+            setTotal();
+        });
+    })
+    var goods = {};
+    var del_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] && goods[key].del == 2)) {
+                goods[key] = node;
+                goods[key].price = parseFloat(goods[key].price);
+                goods[key].price_type = parseInt(goods[key].price_type);
+                goods[key].total = parseFloat(goods[key].total);
+                goods[key].total = goods[key].total > 0 ? goods[key].total : 1;
+                goods[key].num = 0;
+                goods[key].del = 1;
+                create(node);
+                setTotal();
+            } else if(node.price_type < 4) {
+                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><div class="jiajian" value='+node.id+'><span class="jian" onclick="dec(\''+node.id+'\')">-</span><input type="text" value="'+node.total+'" class="goods_num"><span class="jia" onclick="add(\''+node.id+'\')">+</span></div></td>'; 
+            
+            if (node.total <= 0) {
+                addtr += '<td><a class="delete_btn" onclick="del(\''+node.id+'\')">删除</a></td>';
+            } else {
+                addtr += '<td></td>';
+            }
+                                  
+            addtr += '</tr>';
+            $("#goods").append(addtr);
+        }
+    }
+
+    function add(id)
+    {
+        goods[id].total += 1;
+        get(id).find('.goods_num').val(goods[id].total);
+        setTotal();
+    }
+    
+    function dec(id)
+    {
+        goods[id].total -= 1;
+        if (goods[id].total < 1) {
+            goods[id].total = 0;
+        }
+
+        get(id).find('.goods_num').val(goods[id].total);
+        setTotal();
+    }
+
+    function del(id)
+    {
+        if (confirm('确定删除吗?')) {
+            goods[id].del = 2;
+            get(id).remove();
+            setTotal();
+        }
+    }
+
+    function setTotal()
+    {
+        var cash = 0;
+        var num = 0;
+        var total = 0;
+        for (var i in goods) {
+            //num += goods[i].num;
+            total += goods[i].total;
+        }
+        //$(".totalQuantity").html(num);
+        $(".totalNum").html(total);
+    }
+</script>
+</body>
+</html>

+ 17 - 0
service/agent/database/member.php

@@ -39,6 +39,12 @@ $import = array
     3 => 'v1旧系统导入',
 );
 
+$is_area = array
+(
+    1 => '是',
+    2 => '否',
+);
+
 $source_id = function()
 {
     $array = array
@@ -282,6 +288,17 @@ return array
             //'list'        => true,
         ),
 
+        'is_area'        => array
+        (
+            'type'      => 'tinyint-1',
+            'name'      => '是否有代理区域',
+            'default'   => '1',
+            'desc'      => '是否有代理区域',
+            'match'     => 'is_numeric',
+            'option'    => $is_area,
+            'update'    => 'radio',
+        ),
+
         'area'       => array
         (
             'type'      => 'varchar-500',

+ 17 - 1
service/agent/database/member_goods.php

@@ -298,7 +298,7 @@ return array
             ),
             'order' => array('type' => 'desc', 'id' => 'desc'),
             'type' => 'all',
-            'page' => array(20, 'list'),
+            'page' => array(500, 'list'),
             'col' => '*, total_num-sell_num as num',
         ),
 
@@ -318,6 +318,22 @@ return array
             'col' => '*, total_num-sell_num as num',
         ),
 
+        'getAll' => array
+        (
+            # 匹配的正则或函数 选填项
+            'option' => array
+            (
+                'id' => 'yes',
+                'mid' => 'yes',
+                'type' => 'yes',
+                'type_id' => 'yes',
+                'sku_id' => 'yes',
+                'state' => 1,
+            ),
+            'type' => 'all',
+            'col' => '*, total_num-sell_num as num',
+        ),
+
         'findData' => array
         (
             # 匹配的正则或函数 选填项

+ 1 - 0
service/agent/database/order.php

@@ -39,6 +39,7 @@ $status = array
     4 => array('name' => '已完成', 'style' => 'font-weight:bold;color:green'),
     5 => array('name' => '驳回', 'style' => 'font-weight:bold;color:#CD3700'),
     6 => array('name' => '挂起', 'style' => 'font-weight:bold;color:#436EEE'),
+    7 => array('name' => '关闭', 'style' => 'font-weight:bold;color:#000000'),
 );
 
 $pay_status = array

+ 33 - 12
service/agent/lib/Manage.php

@@ -26,6 +26,8 @@ class Manage
     {
         Dever::config('base')->hook = true;
         $id = $id['where_id'];
+        $is_area = Dever::param('is_area', $data);
+
         $area = Dever::param('area', $data);#修改后
         $role = Dever::param('role', $data);
         $level_id = Dever::param('level_id', $data);
@@ -34,19 +36,38 @@ class Manage
         if (!$member) {
             return;
         }
-        if ($area && is_array($area) && $role) {
-            $role = Dever::db('setting/role')->find($role);
-            $area_string = array();
+
+        if ($is_area == 1) {
+            if ($area && is_array($area) && $role) {
+                $role = Dever::db('setting/role')->find($role);
+                $area_string = array();
+                if ($role && $role['type'] == 2) {
+                    $area_string = Dever::load('agent/lib/order')->checkArea($area, $role, $member['id']);
+                } else {
+                    $area_string = implode(',', $area);
+                    $area_string = str_replace(',-1', '', $area_string);
+                }
+                
+                $data['set_area'] = $area_string;
+                $this->upLog($member, $role, $area_string, -1, 3);
+            }
+        } else {
+            # 清理区域
+            $role = Dever::db('setting/role')->find($member['role']);
             if ($role && $role['type'] == 2) {
-                $area_string = Dever::load('agent/lib/order')->checkArea($area, $role, $member['id']);
-            } else {
-                $area_string = implode(',', $area);
-                $area_string = str_replace(',-1', '', $area_string);
+                $area = $member['area'];
+                Dever::load('area/api')->upStatus($area, 2);
+                $area_data['mid'] = $member['id'];
+                $area_data['area'] = $area;
+                $area_info = Dever::db('agent/member_area')->find($area_data);
+                if ($area_info) {
+                    Dever::db('agent/member_area')->update(array('where_id' => $area_info['id'], 'state' => 2));
+                    Dever::db('agent/member')->update(array('where_id' => $member['id'], 'area' => ''));
+                    $this->area_log($member['id'], -1, $member['area'], '');
+                }
             }
-            
-            $data['set_area'] = $area_string;
-            $this->upLog($member, $role, $area_string, -1, 3);
         }
+        
         if ($level_id && $level_id != $member['level_id']) {
             $group_num = Dever::load('invite/api')->getChildNum($member['id'], 1);
             Dever::load('agent/lib/level_log')->up($member['id'], -1, $member['level_id'], $level_id, 0, 0, $group_num);
@@ -266,7 +287,7 @@ class Manage
                         $prize_type = Dever::param('prize_type', $data);
                         $option_price = Dever::param('option_price', $data);
                         if ($prize_type == 2) {
-                            # 扣减已有名额,判断一下
+                            # 扣减已有名额,判断一下 暂时废弃
                             $prize = Dever::db('setting/prize')->find(array('type' => 1, 'price' => $order['price']));
                             if ($prize) {
                                 $member_goods = Dever::db('agent/member_goods')->getOne(array('mid' => $order['mid'], 'type' => 3, 'type_id' => $prize['id']));
@@ -509,7 +530,7 @@ class Manage
                     return false;
                 }
             } elseif ($card['create_type'] == 3) {
-                $cash = $card['price']*$v['num'] * $t;
+                $cash = round($order['price']*($v['num']/100), 2);
                 $price = $cash;
                 $v['num'] = 1;
                 $v['sku_id'] = Dever::load('card/lib/code')->create($card, 2, $order['mid'], $order['id'], $cash);

+ 1 - 1
service/agent/lib/Member.php

@@ -257,7 +257,7 @@ class Member
             $button[0]['btn'][] = array
             (
                 'type' => 'edit',
-                'link' => Dever::url('project/database/update?project=agent&table=member&where_id='.$member['id'].'&status=1&col=name,mobile,email,shop_id,area,role,level_id,is_shop', 'manage'),
+                'link' => Dever::url('project/database/update?project=agent&table=member&where_id='.$member['id'].'&status=1&col=name,mobile,email,shop_id,area,role,level_id,is_shop,is_area', 'manage'),
                 'name' => '修改基础资料',
             );
         }

+ 2 - 2
service/agent/lib/Member_set.php

@@ -102,7 +102,7 @@ class Member_set
                     }
                     $name = $card['name'];
                     if ($sku_id == -1) {
-                        if ($card['create_type'] == 2) {
+                        if ($card['create_type'] >= 2) {
                             $cash = $price = $card['price'] * $total;
                             $total = 1;
                             $w['sku_id'] = Dever::load('card/lib/code')->create($card, 2, $mid, -1, $cash);
@@ -142,7 +142,7 @@ class Member_set
                         $total = $v['total'] - count($sku);
                         
                         if ($total > 0) {
-                            if ($card['create_type'] == 2) {
+                            if ($card['create_type'] >= 2) {
                                 $cash = $price = $card['price'] * $total;
                                 $total = 1;
                                 $w['sku_id'] = Dever::load('card/lib/code')->create($card, 2, $mid, -1, $cash);

+ 63 - 22
service/agent/lib/Order.php

@@ -805,7 +805,7 @@ class Order
     {
         # 这里要获取上级信息
         $table = array();
-        $table['head'] = array('名称', '角色', '级别', '分润比例', '分润(元)');
+        $table['head'] = array('名称', '手机', '角色', '级别', '类型', '比例', '分润(元)');
         $table['body'] = array();
 
         $parents[0] = array('uid' => $parent_member['id'], 'level' => 0);
@@ -871,7 +871,7 @@ class Order
 
                 # 直推佣金
                 if ($k == 0) {
-                    $parent_name = $this->show_parent_reward($parent_info, $info, $role, $v, $parent_role, $parent_level, $child_num);
+                    $parent_name = $this->show_parent_reward($parent_info, $info, $role, $v, $parent_role, $parent_level, $child_num, $table);
                 }
 
                 $param = array();
@@ -890,7 +890,7 @@ class Order
 
                     $cash = '<a style="color:blue" class="set_cash" data-param="'.$data_param.'">' . $cash . '</a>';
 
-                    $table['body'][] = array($parent_info['name'], $parent_role['name'], $parent_level['name'], $parent_level['value'] . '%', $cash);
+                    $table['body'][] = array($parent_info['name'], $parent_info['mobile'], $parent_role['name'], $parent_level['name'], '团队', $parent_level['value'] . '%', $cash);
                 } else {              
                     $param['cash'] = 0;
                     $param['per'] = 0;
@@ -935,7 +935,7 @@ class Order
         );
     }
 
-    private function show_parent_reward($parent_info, $info, $role, $v, $parent_role, $parent_level, $child_num)
+    private function show_parent_reward($parent_info, $info, $role, $v, $parent_role, $parent_level, $child_num, &$table)
     {
         $parent_name = '邀请人:'.$parent_info['name'].','.$parent_info['mobile'].'&nbsp;&nbsp;邀请人角色:';
 
@@ -952,38 +952,70 @@ class Order
                 $param['cash'] = 0;
                 $param['per'] = 0;
 
-                if ($reward['num'] == 1) {
-                    # 每推荐1个,获取直推佣金
-                    if ($reward['value_type'] == 1) {
-                        # 检测有没有创客名额
-                        if ($role['id'] == 6) {
-                            $parent_goods = Dever::db('agent/member_goods')->getOne(array('mid' => $v['uid'], 'type' => 3));
-                            if ($parent_goods && $parent_goods['num'] > 0) {
-                                $parent_prize = Dever::db('setting/prize')->find($parent_goods['type_id']);
-                                if ($parent_prize && $parent_prize['type'] == 2) {
+                # 判断上级的等级,仅限区县和城市代理
+                if ($parent_role && $parent_role['type'] == 2 && $parent_role['area'] <= 2) {
+                    if (strstr($info['area'], $parent_info['area'])) {
+                        # 区域内
+                        if ($reward['zt_qn_value'] && $reward['zt_qn_value'] > 0) {
+                            $reward['value'] = $reward['zt_qn_value'];
+                        }
+                    } else {
+                        # 区域外
+                        if ($reward['zt_qw_value'] && $reward['zt_qw_value'] > 0) {
+                            $reward['value'] = $reward['zt_qw_value'];
+                        }
+                    }
+                }
+
+                # 检测有没有名额,如果有,直接使用名额内的佣金比例和权益
+                if ($role['id'] == 6 || $role['id'] == 8) {
+                    $parent_goods = Dever::db('agent/member_goods')->getAll(array('mid' => $v['uid'], 'type' => 3));
+                    if ($parent_goods) {
+                        foreach ($parent_goods as $vg) {
+                            if ($vg['num'] > 0) {
+                                $parent_prize = Dever::db('setting/prize')->find($vg['type_id']);
+                                if ($parent_prize && $parent_prize['type'] == 2 && $parent_prize['role'] == $role['id']) {
                                     $reward['value'] = $parent_prize['per'];
-                                    $param['parent_goods_id'] = $parent_goods['id'];
+                                    $param['parent_goods_id'] = $vg['id'];
+
+                                    # 检测有没有名额权益 待加
+                                    $prize_goods = Dever::db('setting/prize_goods')->select(array('prize_id' => $parent_prize['id']));
+                                    if ($prize_goods) {
+
+                                    }
+
+                                    break;
                                 }
                             }
                         }
-                        
-                        $param['cash'] = $info['agent_cash'] * ($reward['value']/100);
-                        $param['per'] = $reward['value'];
-                    } else {
-                        $param['cash'] = $reward['value'];
-                        $param['per'] = 0;
                     }
+                }
+
+                $reward_state = false;
+                if ($reward['num'] == 1) {
+                    # 每推荐1个,获取直推佣金
+                    $reward_state = true;
                 } elseif ($reward['num'] > 1) {
                     # 每推荐多少个,获取直推佣金
                     if (!$child_num) {
                         $child_num = Dever::load('invite/api')->getChildNum($v['uid'], 1);
                     }
                     if ($child_num >= $reward['num'] && $child_num % $reward['num'] == 0) {
-                            $param['cash'] = $reward['value'];
-                            $param['per'] = 0;
+                        $reward_state = true;
                     }
                 }
 
+                if ($reward_state) {
+                    if ($reward['value_type'] == 1) {
+                        $param['cash'] = $info['agent_cash'] * ($reward['value']/100);
+                        $param['per'] = $reward['value'];
+                    } else {
+                        $param['cash'] = $reward['value'];
+                        $param['per'] = 0;
+                    }
+                }
+
+                # 额外赠送
                 if ($reward['is_give'] == 1) {
                     $give = Dever::array_decode($reward['give']);
                     if (!$child_num) {
@@ -1007,6 +1039,9 @@ class Order
                     if (isset($prize)) {
                         $parent_name .= '&nbsp;&nbsp;赠送名额:'.$prize['name'];
                     }
+                    if (isset($card)) {
+                        $parent_name .= '&nbsp;&nbsp;赠送权益:'.$card['name'];
+                    }
                     if ($param['per'] > 0) {
                         $parent_name .= '&nbsp;&nbsp;直推佣金比例:'.$param['per'].'%';
                     }
@@ -1015,6 +1050,10 @@ class Order
                     if (isset($parent_goods)) {
 
                     }
+                    $table['body'][] = array($parent_info['name'], $parent_info['mobile'], $parent_role['name'], $parent_level['name'], '直推', $parent_level['value'] . '%', $cash);
+
+                } else {
+                    $table['body'][] = array($parent_info['name'], $parent_info['mobile'], $parent_role['name'], $parent_level['name'], '直推', $parent_level['value'] . '%', $cash);
                 }
             }
         } else {
@@ -1028,6 +1067,8 @@ class Order
                 $parent_name .= '&nbsp;&nbsp;直推佣金比例:'.$order_cash['per'].'%';
             }
             $parent_name .= '&nbsp;&nbsp;直推佣金:<a style="color:blue">' . $order_cash['cash'] . '</a>元';
+
+            $table['body'][] = array($parent_info['name'], $parent_info['mobile'], $parent_role['name'], $parent_level['name'], '直推', $order_cash['per'] . '%', $order_cash['cash']);
         }
 
         return $parent_name;

+ 92 - 0
service/agent/lib/Prize_set.php

@@ -0,0 +1,92 @@
+<?php
+
+namespace Agent\Lib;
+
+use Dever;
+
+# 批量设置商品
+class Prize_set
+{
+	public function __construct()
+    {
+        Dever::load('manage/auth.init');
+    }
+
+    # 获取商品列表
+    public function goods_api()
+    {
+        $id = Dever::input('prize_id', 1);
+        return Dever::load('agent/lib/set')->getData($id);
+    }
+
+    # 设置商品
+    public function home_api()
+    {
+        $data = array();
+        $data['link'] = Dever::decode(Dever::input('refer'));
+        $data['prize_id'] = Dever::input('id', 1);
+        Dever::setInput('prize_id', $data['prize_id']);
+        $data['host'] = Dever::url('lib/prize_set.home?id=' . $data['prize_id'], 'agent');
+        $data['url'] = Dever::url('lib/prize_set.goods?prize_id=' . $data['prize_id'], 'agent');
+        $data['submit'] = Dever::url('lib/prize_set.action_commit?json=1', 'agent');
+
+        return Dever::render('setPrizeGoods', $data);
+    }
+
+    # 设置
+    public function action_commit_api()
+    {
+        $goods = Dever::input('goods');
+        if (!$goods) {
+            Dever::alert('请传入商品');
+        }
+        $goods = Dever::json_decode($goods);
+        $prize_id = Dever::input('prize_id');
+
+        $where['option_prize_id'] = $prize_id;
+        $where['set_state'] = 2;
+        Dever::db('setting/prize_goods')->updates($where);
+
+        foreach ($goods as $k => $v) {
+            $type = 1;
+            $type_id = $k;
+            $sku_id = -1;
+            if (strstr($k, '_')) {
+                $temp = explode('_', $k);
+                $type_id = $temp[0];
+                $type = $temp[1];
+            } elseif (strstr($k, '-')) {
+                $temp = explode('-', $k);
+                $type_id = $temp[0];
+                $sku_id = $temp[1];
+            }
+            
+            if ($v['total'] <= 0) {
+            	continue;
+            }
+            $w = array();
+            $w['type'] = $type;
+            $w['type_id'] = $type_id;
+            $w['prize_id'] = $prize_id;
+            $w['sku_id'] = $sku_id;
+            $info = Dever::db('setting/prize_goods')->one($w);
+            if ($v['del'] == 2) {
+                if ($info) {
+                    Dever::db('setting/prize_goods')->update(array('where_id' => $info['id'], 'state' => 2));
+                }
+            } else {
+            	$w['num'] = $v['total'];
+                
+                if (!$info) {
+                    Dever::db('setting/prize_goods')->insert($w);
+                } else {
+                    $w['where_id'] = $info['id'];
+                    $w['state'] = 1;
+                    Dever::db('setting/prize_goods')->update($w);
+                }
+            }
+        }
+
+        return 'reload';
+    }
+}

+ 38 - 27
service/agent/lib/Set.php

@@ -17,6 +17,7 @@ class Set
     {
         $order_id = Dever::input('order_id');
         $mid = Dever::input('mid');
+        $prize_id = Dever::input('prize_id');
         $total = Dever::input('total', 1);
 
         $col = 'role_id';
@@ -27,6 +28,10 @@ class Set
             $col = 'mid';
             $table = 'agent/member_goods';
             $value = $mid;
+        } elseif ($prize_id) {
+            $col = 'prize_id';
+            $table = 'setting/prize_goods';
+            $value = $prize_id;
         } elseif ($order_id) {
             $check = Dever::db('agent/order_goods')->find(array('order_id' => $order_id));
             if ($check) {
@@ -36,34 +41,37 @@ class Set
             }
         }
         $data = array();
-        $prize = Dever::db('setting/prize')->select();
-        if ($prize) {
-            $data[0]['id'] = -1;
-            $data[0]['name'] = '名额';
-            $data[0]['price'] = 0;
-            $data[0]['price_type'] = 2;
-            $data[0]['select'] = 2;
-            $data[0]['del'] = 1;
-            $data[0]['total'] = 0;
-
-            foreach ($prize as $k => $v) {
-                $data[0]['children'][$k]['id'] = $v['id'] . '_3';
-                $data[0]['children'][$k]['name'] = $v['name'];
-                $data[0]['children'][$k]['price'] = $v['price'];
-                $data[0]['children'][$k]['price_type'] = 2;
-                $data[0]['children'][$k]['select'] = 2;
-                $data[0]['children'][$k]['del'] = 1;
-                $data[0]['children'][$k]['total'] = 0;
-                $data[0]['children'][$k]['end'] = true;
-
-                $info = Dever::db($table)->find(array('type' => 3, 'type_id' => $v['id'], $col => $value));
-                if ($info) {
-                    if ($table == 'agent/member_goods') {
-                        //$info['num'] = $info['total_num'] - $info['sell_num'];
-                        $info['num'] = $info['total_num'];
+
+        if (!$prize_id) {
+            $prize = Dever::db('setting/prize')->select();
+            if ($prize) {
+                $data[0]['id'] = -1;
+                $data[0]['name'] = '名额';
+                $data[0]['price'] = 0;
+                $data[0]['price_type'] = 2;
+                $data[0]['select'] = 2;
+                $data[0]['del'] = 1;
+                $data[0]['total'] = 0;
+
+                foreach ($prize as $k => $v) {
+                    $data[0]['children'][$k]['id'] = $v['id'] . '_3';
+                    $data[0]['children'][$k]['name'] = $v['name'];
+                    $data[0]['children'][$k]['price'] = $v['price'];
+                    $data[0]['children'][$k]['price_type'] = 2;
+                    $data[0]['children'][$k]['select'] = 2;
+                    $data[0]['children'][$k]['del'] = 1;
+                    $data[0]['children'][$k]['total'] = 0;
+                    $data[0]['children'][$k]['end'] = true;
+
+                    $info = Dever::db($table)->find(array('type' => 3, 'type_id' => $v['id'], $col => $value));
+                    if ($info) {
+                        if ($table == 'agent/member_goods') {
+                            //$info['num'] = $info['total_num'] - $info['sell_num'];
+                            $info['num'] = $info['total_num'];
+                        }
+                        $data[0]['children'][$k]['select'] = 1;
+                        $data[0]['children'][$k]['total'] = $info['num'] * $total;
                     }
-                    $data[0]['children'][$k]['select'] = 1;
-                    $data[0]['children'][$k]['total'] = $info['num'] * $total;
                 }
             }
         }
@@ -80,6 +88,9 @@ class Set
             foreach ($card as $k => $v) {
                 $data[1]['children'][$k]['id'] = $v['id'] . '_2';
                 $data[1]['children'][$k]['name'] = $v['name'];
+                if ($v['create_type'] == 3) {
+                    $data[1]['children'][$k]['name'] .= '(自定义面值卡-数量即百分比)';
+                }
                 $data[1]['children'][$k]['price'] = $v['price'];
                 $data[1]['children'][$k]['price_type'] = 2;
                 $data[1]['children'][$k]['select'] = 2;

+ 6 - 5
service/agent/src/My.php

@@ -481,15 +481,16 @@ class My extends Core
     {
         $where['type'] = Dever::input('type', 1);
         $where['mid'] = $this->uid;
-        $this->data['list'] = Dever::db('agent/member_goods')->getData($where);
+        $this->data['list'] = array();
+        $list = Dever::db('agent/member_goods')->getData($where);
         $this->data['type'] = $where['type'];
-        if ($this->data['list']) {
-            foreach ($this->data['list'] as $k => $v) {
+        if ($list) {
+            foreach ($list as $k => $v) {
                 if ($v['num'] <= 0) {
-                    unset($this->data['list'][$k]);
                     continue;
                 }
-                $this->getGoodsInfo($this->data['list'][$k]);
+                $this->getGoodsInfo($v);
+                $this->data['list'][] = $v;
             }
         }
 

+ 44 - 32
service/option/lib/Import.php

@@ -8,12 +8,13 @@ include('/share/lib/php/dever_package/excel/src/PHPExcel.php');
 
 class Import
 {
-    private $name = 'qiquan_2022_05_06_01.xlsx';
+    private $path = '/www/churen/data/';
+    private $name = 'qiquan_2022_05_06_04.xlsx';
     # 导入账户
     public function get_api()
     {
         Dever::config('base')->hook = true;
-        $file = Dever::data() . $this->name;
+        $file = $this->path . $this->name;
 
         $data = Dever::excelImport($file, 1, 5, 'excel');
 
@@ -126,7 +127,7 @@ class Import
     public function check_api()
     {
         Dever::config('base')->hook = true;
-        $file = Dever::data() . $this->name;
+        $file = $this->path . $this->name;
 
         $data = Dever::excelImport($file, 1, 5, 'excel');
 
@@ -211,7 +212,7 @@ class Import
 
         $check = Dever::input('check');
 
-        $file = Dever::data() . $this->name;
+        $file = $this->path . $this->name;
 
         $data = Dever::excelImport($file, 2, 5, 'excel');
 
@@ -240,23 +241,29 @@ class Import
                         }
                         $info = Dever::db('option/member')->find($where);
                         if ($info) {
-                            $account = Dever::db('option/account')->find(array('id' => $info['aid'], 'clear' => true));
-                            if ($account && $account['status'] < 3) {
-                                if ($check == 1) {
-                                    $state = true;
-                                } else {
-                                    $state = Dever::load('option/lib/cash')->up($account['id'], $info['id'], $type, $v['C'], $v['E'], false);
-                                }
-                                
-                                if ($state) {
-                                    $table_status['body'][0][0] += 1;
-                                    $table_status['body'][0][1] += $v['C'];
+                            $idcard = trim($v['B']);
+                            if ($info['idcard'] != $idcard) {
+                                $table['body'][] = array($info['mobile'], $info['idcard'], $idcard, $type_name, '手机号和身份证不对应');
+                            } else {
+                                $account = Dever::db('option/account')->find(array('id' => $info['aid'], 'clear' => true));
+                                if ($account && $account['status'] < 3) {
+                                    if ($check == 1) {
+                                        $state = true;
+                                    } else {
+                                        $state = Dever::load('option/lib/cash')->up($account['id'], $info['id'], $type, $v['C'], $v['E'], false);
+                                    }
+                                    
+                                    if ($state) {
+                                        $table_status['body'][0][0] += 1;
+                                        $table_status['body'][0][1] += $v['C'];
+                                    } else {
+                                        $table['body'][] = array($info['mobile'], $info['idcard'], $v['C'], $type_name, '导入到数据表失败');
+                                    }
                                 } else {
-                                    $table['body'][] = array($info['mobile'], $info['idcard'], $v['C'], $type_name, '导入到数据表失败');
+                                    $table['body'][] = array($info['mobile'], $info['idcard'], $v['C'], $type_name, '未找到主账户');
                                 }
-                            } else {
-                                $table['body'][] = array($info['mobile'], $info['idcard'], $v['C'], $type_name, '未找到主账户');
                             }
+                            
                         } else {
                             $table['body'][] = array($where['mobile'], $v['B'], $v['C'], $type_name, '未找到期权账户');
                         }
@@ -287,7 +294,7 @@ class Import
     {
         Dever::config('base')->hook = true;
         $check = Dever::input('check');
-        $file = Dever::data() . $this->name;
+        $file = $this->path . $this->name;
 
         $data = Dever::excelImport($file, 3, 5, 'excel');
 
@@ -315,21 +322,26 @@ class Import
                         }
                         $info = Dever::db('option/member')->find($where);
                         if ($info) {
-                            $account = Dever::db('option/account')->find($info['aid']);
-                            if ($account && $account['status'] < 3) {
-                                if ($check == 1) {
-                                    $state = true;
-                                } else {
-                                    $state = Dever::load('option/lib/cash')->up($account['id'], $info['id'], $type, $v['C'], $v['E'], false);
-                                }
-                                if ($state) {
-                                    $table_status['body'][0][0] += 1;
-                                    $table_status['body'][0][1] += $v['C'];
+                            $idcard = trim($v['B']);
+                            if ($info['idcard'] != $idcard) {
+                                $table['body'][] = array($info['mobile'], $info['idcard'], $idcard, $type_name, '手机号和身份证不对应');
+                            } else {
+                                $account = Dever::db('option/account')->find($info['aid']);
+                                if ($account && $account['status'] < 3) {
+                                    if ($check == 1) {
+                                        $state = true;
+                                    } else {
+                                        $state = Dever::load('option/lib/cash')->up($account['id'], $info['id'], $type, $v['C'], $v['E'], false);
+                                    }
+                                    if ($state) {
+                                        $table_status['body'][0][0] += 1;
+                                        $table_status['body'][0][1] += $v['C'];
+                                    } else {
+                                        $table['body'][] = array($info['mobile'], $info['idcard'], $v['C'], $type_name, '交付价值不足');
+                                    }
                                 } else {
-                                    $table['body'][] = array($info['mobile'], $info['idcard'], $v['C'], $type_name, '交付价值不足');
+                                    $table['body'][] = array($info['mobile'], $info['idcard'], $v['C'], $type_name, '未找到主账户');
                                 }
-                            } else {
-                                $table['body'][] = array($info['mobile'], $info['idcard'], $v['C'], $type_name, '未找到主账户');
                             }
                         } else {
                             $table['body'][] = array($where['mobile'], $v['B'], $v['C'], $type_name, '未找到期权账户');

+ 25 - 4
service/setting/database/prize.php

@@ -2,10 +2,16 @@
 $type = array
 (
 	//1 => '街道',
-	2 => '创客直推佣金',
+	2 => '直推佣金',
 	//3 => '九阳自动炒菜机套餐',
 );
 
+$role = function()
+{
+    $info = Dever::db('setting/role')->select();
+    return $info;
+};
+
 $level = function()
 {
     $info = Dever::db('area/level')->select();
@@ -63,7 +69,7 @@ return array
         (
             'type'      => 'tinyint-1',
             'name'      => '名额类型',
-            'default'   => '1',
+            'default'   => '2',
             'desc'      => '名额类型',
             'match'     => 'is_numeric',
             'update'  	=> 'radio',
@@ -73,6 +79,18 @@ return array
             'control'	=> 'type',
         ),
 
+        'role'        => array
+        (
+            'type'      => 'int-11',
+            'name'      => '推荐角色',
+            'default'   => '-1',
+            'desc'      => '推荐角色',
+            'match'     => 'is_numeric',
+            'update'      => 'radio',
+            'option'    => $role,
+            'show'      => 'type=2',
+        ),
+
         'level'        => array
         (
             'type'      => 'int-11',
@@ -104,7 +122,7 @@ return array
             'desc'      => '价值',
             'match'     => 'option',
             'update'    => 'text',
-            'show'      => 'type=2',
+            'show'      => 'type=2,3',
         ),
 
         'num'      => array
@@ -141,7 +159,10 @@ return array
 
     'manage' => array
     (
-    	
+    	'list_button' => array
+        (
+            'location1' => array('权益设置', Dever::url('lib/prize_set.home', 'agent')),
+        )
     ),
 
     'request' => array

+ 137 - 0
service/setting/database/prize_goods.php

@@ -0,0 +1,137 @@
+<?php
+
+$role = function()
+{
+    $info = Dever::db('setting/role')->select();
+    return $info;
+};
+
+$type = array
+(
+	1 => '商品',
+	2 => '礼品卡',
+);
+
+return array
+(
+    # 表名
+    'name' => 'prize_goods',
+    # 显示给用户看的名称
+    'lang' => '名额权益设置',
+    'menu' => false,
+    'set' => array
+    (
+    	'type' => $type,
+    ),
+    # 数据结构
+    'struct' => array
+    (
+    
+        'id'        => array
+        (
+            'type'      => 'int-11',
+            'name'      => 'ID',
+            'default'   => '',
+            'desc'      => '',
+            'match'     => 'is_numeric',
+            'search'    => 'order',
+            'update'    => 'hidden',
+            //'list'        => true,
+        ),
+
+        'prize_id'      => array
+        (
+            'type'      => 'int-11',
+            'name'      => '名额',
+            'default'   => '',
+            'desc'      => '名额',
+            'match'     => 'is_numeric',
+            'update'    => 'hidden',
+            'search'    => 'hidden',
+            'value'     => Dever::input('search_option_prize_id'),
+            'list'      => 'Dever::load("setting/prize-one#name", {prize_id})',
+        ),
+
+        'type'        => array
+        (
+            'type'      => 'tinyint-1',
+            'name'      => '类型',
+            'default'   => '1',
+            'desc'      => '类型',
+            'match'     => 'is_numeric',
+            'update'  	=> 'radio',
+            'option'    => $type,
+        ),
+
+        'type_id'      => array
+        (
+            'type'      => 'int-11',
+            'name'      => '类型id',
+            'default'   => '-1',
+            'desc'      => '类型id',
+            'match'     => 'is_numeric',
+        ),
+
+        'sku_id'      => array
+        (
+            'type'      => 'int-11',
+            'name'      => 'sku_id',
+            'default'   => '-1',
+            'desc'      => 'sku_id',
+            'match'     => 'is_numeric',
+        ),
+
+        'num'        => array
+        (
+            'type'      => 'int-11',
+            'name'      => '数量',
+            'default'   => '',
+            'desc'      => '数量',
+            'match'     => 'is_numeric',
+            'search'    => 'select',
+            'list'        => true,
+        ),
+
+        'state'     => array
+        (
+            'type'      => 'tinyint-1',
+            'name'      => '状态',
+            'default'   => '1',
+            'desc'      => '请选择状态',
+            'match'     => 'is_numeric',
+        ),
+        
+        'cdate'     => array
+        (
+            'type'      => 'int-11',
+            'name'      => '创建时间',
+            'match'     => array('is_numeric', time()),
+            'desc'      => '',
+            # 只有insert时才生效
+            //'insert'    => true,
+            'search'    => 'date',
+            'list'      => 'date("Y-m-d H:i:s", {cdate})',
+        ),
+    ),
+
+    'manage' => array
+    (
+        
+    ),
+
+    'request' => array
+    (
+        'getData' => array
+        (
+            # 匹配的正则或函数 选填项
+            'option' => array
+            (
+                'prize_id' => 'yes',
+                'state' => 1,
+            ),
+            'order' => array('type' => 'desc', 'id' => 'desc'),
+            'type' => 'all',
+            'col' => '*',
+        ),
+    ),
+);

+ 36 - 0
service/setting/database/role_reward.php

@@ -96,6 +96,42 @@ return array
             'list'      => true,
         ),
 
+        'zt_qn_value'      => array
+        (
+            'type'      => 'varchar-32',
+            'name'      => '直推区内数值-规则同上,仅限区县和城市代理有效',
+            'default'   => '0',
+            'desc'      => '直推区内数值',
+            'match'     => 'is_string',
+            'update'    => 'text',
+            //'search'    => 'fulltext',
+            //'list'      => true,
+        ),
+
+        'zt_qw_value'      => array
+        (
+            'type'      => 'varchar-32',
+            'name'      => '直推区外数值-规则同上,仅限区县和城市代理有效',
+            'default'   => '0',
+            'desc'      => '直推区外数值',
+            'match'     => 'is_string',
+            'update'    => 'text',
+            //'search'    => 'fulltext',
+            //'list'      => true,
+        ),
+
+        'fzt_qn_value'      => array
+        (
+            'type'      => 'varchar-32',
+            'name'      => '非直推区内数值-规则同上,仅限区县和城市代理有效,如果是城市代理,这里可以填写两个数值,用半角逗号隔开,第一个是区县数值,第二个是街道数值',
+            'default'   => '0',
+            'desc'      => '非直推区内数值',
+            'match'     => 'is_string',
+            'update'    => 'text',
+            //'search'    => 'fulltext',
+            //'list'      => true,
+        ),
+
         'value_type'        => array
         (
             'type'      => 'tinyint-1',