hrjy 2 роки тому
батько
коміт
3bde69195a

+ 2 - 2
.constant

@@ -1,3 +1,3 @@
 <?php
-define('INSTALL_DATE',1578360044);
-define('SERIALNUMBER','N2L6Px');
+define('INSTALL_DATE',1673316438);
+define('SERIALNUMBER','ojHfzv');

+ 0 - 1
.example.env

@@ -1 +0,0 @@
-APP_DEBUG = true

[APP]
DEFAULT_TIMEZONE = Asia/Shanghai

[DATABASE]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = test
USERNAME = username
PASSWORD = password
HOSTPORT = 3306
CHARSET = utf8
DEBUG = true

[LANG]
default_lang = zh-cn

+ 100 - 1
app/admin/controller/user/User.php

@@ -8,6 +8,8 @@
 namespace app\admin\controller\user;
 
 use app\admin\controller\AuthController;
+use app\models\user\ProxyAddress;
+use app\models\user\UserBill;
 use crmeb\repositories\UserRepository;
 use crmeb\traits\CurdControllerTrait;
 use think\facade\Route as Url;
@@ -16,7 +18,7 @@ use app\models\user\UserLevel as Level;
 use app\admin\model\order\StoreOrder;
 use app\admin\model\wechat\WechatMessage;
 use app\admin\model\store\{StoreVisit, StoreCouponUser};
-use app\admin\model\system\{SystemUserLevel, SystemUserTask};
+use app\admin\model\system\{SystemCity, SystemUserLevel, SystemUserTask};
 use crmeb\services\{FormBuilder as Form, UtilService as Util, JsonService as Json};
 use app\admin\model\user\{User as UserModel, UserBill as UserBillAdmin, UserLevel, UserGroup, UserTaskFinish};
 
@@ -240,6 +242,20 @@ class User extends AuthController
             }
             $res = $res && UserModel::where('uid', $uid)->update(['level' => $level_id]);
             if ($inserValue) $res && UserTaskFinish::insertAll($inserValue);
+            if ($level_id == 3){
+                $user = UserModel::where('uid', $uid)->find();
+                if ($user['spread_uid']){
+                    $spread = UserModel::where('uid', $user['spread_uid'])->find();
+                    if ($spread and $spread['level'] >= 3){
+                        //上级城市或者联创
+                        $jl = 6000;
+                        UserBill::income('佣金', $spread['uid'], 'now_money', 'brokerage', $jl, '', $spread['brokerage_price']+$jl, '推广下级升级城市代理奖励');
+                        UserModel::where('uid', $spread['uid'])->inc('brokerage_price', $jl)->update();
+
+                    }
+                }
+            }
+
             if ($res) {
                 UserModel::commitTrans();
                 return Json::successful('赠送成功');
@@ -753,6 +769,89 @@ class User extends AuthController
         return $this->fetch();
     }
 
+    /**
+     * 显示资源列表
+     *
+     * @return \think\Response
+     */
+    public function proxy_address($uid)
+    {
+        $this->assign('uid', $uid);
+        return $this->fetch();
+    }
+
+
+    public function proxy_address_list($uid)
+    {
+        $data['data'] = ProxyAddress::where('uid', $uid)->order('id DESC')->select()->toArray();
+        $data['count'] = ProxyAddress::where('uid', $uid)->order('id DESC')->count();
+        foreach ($data['data'] as &$item)
+        {
+            $item['address'] = $item['province'].' '.$item['city'].' '.$item['district'];
+        }
+        return Json::successlayui($data);
+    }
+
+
+    /**
+     * 显示创建资源表单页.
+     *
+     * @return \think\Response
+     */
+    public function proxy_address_add($uid = 0)
+    {
+        $f = [];
+        $f[] = Form::cityArea('address', '代理地址');
+        $f[] = Form::hidden('uid', $uid);
+        $form = Form::make_post_form('添加', $f, Url::buildUrl('proxy_address_save'));
+        $this->assign(compact('form'));
+        return $this->fetch('public/form-builder');
+    }
+
+    /**
+     * 添加.
+     *
+     * @return \think\Response
+     */
+    public function proxy_address_save()
+    {
+       $data = Util::postMore([
+           'address',
+           'uid'
+       ]);
+       $insert = [
+           'uid' => $data['uid'],
+           'province' => $data['address'][0],
+           'city' => $data['address'][1],
+           'district' => $data['address'][2],
+       ];
+       $res = ProxyAddress::create($insert);
+
+        if ($res){
+            return Json::success('添加成功!');
+        }else{
+            return Json::fail('添加失败');
+        }
+    }
+
+    /**
+     * 添加.
+     *
+     * @return \think\Response
+     */
+    public function proxy_address_delete($id)
+    {
+        $res = ProxyAddress::destroy($id);
+        if ($res){
+            return Json::success('成功!');
+        }else{
+            return Json::fail('失败');
+        }
+    }
+
+
+
+
     /*
      * 获取某个用户的推广下线
      * */

+ 55 - 39
app/admin/model/system/SystemUserTask.php

@@ -41,53 +41,69 @@ class SystemUserTask extends BaseModel
      * @var array
      */
     protected static $TaskType = [
+//        [
+//            'type' => 'SatisfactionIntegral',
+//            'name' => '满足积分{$num}',
+//            'real_name' => '积分数',
+//            'max_number' => 0,
+//            'min_number' => 0,
+//            'unit' => '分'
+//        ],
+//        [
+//            'type' => 'ConsumptionAmount',
+//            'name' => '消费满{$num}',
+//            'real_name' => '消费金额',
+//            'max_number' => 0,
+//            'min_number' => 0,
+//            'unit' => '元'
+//        ],
+//        [
+//            'type' => 'ConsumptionFrequency',
+//            'name' => '消费{$num}',
+//            'real_name' => '消费次数',
+//            'max_number' => 0,
+//            'min_number' => 0,
+//            'unit' => '次'
+//        ],
+//        [
+//            'type' => 'CumulativeAttendance',
+//            'name' => '累计签到{$num}',
+//            'real_name' => '累计签到',
+//            'max_number' => 365,
+//            'min_number' => 1,
+//            'unit' => '天'
+//        ],
+//        [
+//            'type' => 'InviteGoodFriends',
+//            'name' => '邀请好友{$num}成为下线',
+//            'real_name' => '邀请好友成为下线',
+//            'max_number' => 1000,
+//            'min_number' => 1,
+//            'unit' => '人'
+//        ],
+//        [
+//            'type' => 'InviteGoodFriendsLevel',
+//            'name' => '邀请好友{$num}成为会员',
+//            'real_name' => '邀请好友成为会员',
+//            'max_number' => 1000,
+//            'min_number' => 1,
+//            'unit' => '人'
+//        ],
         [
-            'type' => 'SatisfactionIntegral',
-            'name' => '满足积分{$num}',
-            'real_name' => '积分数',
-            'max_number' => 0,
-            'min_number' => 0,
-            'unit' => '分'
-        ],
-        [
-            'type' => 'ConsumptionAmount',
-            'name' => '消费满{$num}',
-            'real_name' => '消费金额',
+            'type' => 'InviteConsumption',
+            'name' => '消费{$num}成为会员',
+            'real_name' => '消费成为会员',
             'max_number' => 0,
             'min_number' => 0,
             'unit' => '元'
         ],
         [
-            'type' => 'ConsumptionFrequency',
-            'name' => '消费{$num}',
-            'real_name' => '消费次数',
+            'type' => 'InviteConsumptionPurchase',
+            'name' => '消费{$num}成为团购经济人',
+            'real_name' => '团购经济人',
             'max_number' => 0,
             'min_number' => 0,
-            'unit' => '次'
-        ],
-        [
-            'type' => 'CumulativeAttendance',
-            'name' => '累计签到{$num}',
-            'real_name' => '累计签到',
-            'max_number' => 365,
-            'min_number' => 1,
-            'unit' => '天'
-        ],
-        [
-            'type' => 'InviteGoodFriends',
-            'name' => '邀请好友{$num}成为下线',
-            'real_name' => '邀请好友成为下线',
-            'max_number' => 1000,
-            'min_number' => 1,
-            'unit' => '人'
-        ],
-        [
-            'type' => 'InviteGoodFriendsLevel',
-            'name' => '邀请好友{$num}成为会员',
-            'real_name' => '邀请好友成为会员',
-            'max_number' => 1000,
-            'min_number' => 1,
-            'unit' => '人'
+            'unit' => '元'
         ],
     ];
 

+ 7 - 0
app/admin/view/user/user/index.php

@@ -252,6 +252,10 @@
                                     <i class="layui-icon layui-icon-close-fill" aria-hidden="true"></i> 清除等级</a>
                             </li>
                             {{# } }}
+                            <li>
+                                <a href="javascript:void(0);" lay-event="proxy_address">
+                                    <i class="layui-icon layui-icon-edit"></i> 代理地址</a>
+                            </li>
                         </ul>
                     </script>
                 </div>
@@ -375,6 +379,9 @@
             case 'see':
                 $eb.createModalFrame(data.nickname+'-会员详情',layList.Url({a:'see',p:{uid:data.uid}}));
                 break;
+            case 'proxy_address':
+                $eb.createModalFrame(data.nickname+'-代理地址列表',layList.Url({a:'proxy_address',p:{uid:data.uid}}));
+                break;
             case 'del_level':
                 $eb.$swal('delete',function(){
                     $eb.axios.get(layList.U({a:'del_level',q:{uid:data.uid}})).then(function(res){

+ 152 - 0
app/admin/view/user/user/proxy_address.php

@@ -0,0 +1,152 @@
+{extend name="public/container"}
+{block name="head_top"}
+
+{/block}
+{block name="content"}
+<style>
+    .btn-outline{
+        border:none;
+    }
+    .btn-outline:hover{
+        background-color: #0e9aef;
+        color: #fff;
+    }
+    .layui-form-item .layui-btn {
+        margin-top: 5px;
+        margin-right: 10px;
+    }
+    .layui-btn-primary{
+        margin-right: 10px;
+        margin-left: 0!important;
+    }
+    label{
+        margin-bottom: 0!important;
+        margin-top: 4px;
+    }
+</style>
+<div class="layui-fluid">
+    <div class="layui-row layui-col-space15" id="app">
+        <!--搜索条件-->
+<!--        <div class="layui-col-md12">-->
+<!--            <div class="layui-card">-->
+<!--                <div class="layui-card-header">搜索条件</div>-->
+<!--                <div class="layui-card-body">-->
+<!--                    <div class="layui-carousel layadmin-carousel layadmin-shortcut" lay-anim="" lay-indicator="inside" lay-arrow="none" style="background:none">-->
+<!--                        <form class="layui-form layui-form-pane" action="">-->
+<!--                            <div class="layui-form-item">-->
+<!--                                <div class="layui-col-lg12">-->
+<!--                                    <label class="layui-form-label" style="top: -5.5px;">搜索条件</label>-->
+<!--                                    <div class="layui-input-inline">-->
+<!--                                        <input type="text" id="auction" name="auction" class="layui-input" placeholder="请输入名称,编号">-->
+<!--                                    </div>-->
+<!--                                </div>-->
+<!--                                <div class="layui-inline">-->
+<!--                                    <div class="layui-input-inline">-->
+<!--                                        <button class="layui-btn layui-btn-sm layui-btn-normal" lay-submit="search" lay-filter="search">-->
+<!--                                            <i class="layui-icon layui-icon-search"></i>搜索</button>-->
+<!--                                    </div>-->
+<!--                                </div>-->
+<!--                            </div>-->
+<!--                        </form>-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--            </div>-->
+<!--        </div>-->
+
+        <!-- 中间详细信息-->
+        <div :class="item.col!=undefined ? 'layui-col-sm'+item.col+' '+'layui-col-md'+item.col:'layui-col-sm6 layui-col-md3'"
+             v-for="item in badge" v-cloak="" v-if="item.count > 0">
+        </div>
+        <!--enb-->
+    </div>
+    <!--列表-->
+    <div class="layui-row layui-col-space15">
+        <div class="layui-col-md12">
+            <div class="layui-card">
+                <div class="layui-card-header">场馆列表</div>
+                <div class="layui-card-body">
+                    <div class="layui-btn-container" id="container-action">
+                        <a class="layui-btn layui-btn-sm" href="{:Url('user.user/proxy_address_add?uid='.$uid)}">添加商品</a>
+<!--                        <button class="layui-btn layui-btn-sm" data-type="del_auction">批量删除</button>-->
+                    </div>
+                    <table class="layui-hide" id="List" lay-filter="List"></table>
+
+                    <script type="text/html" id="act">
+                        <button type="button" class="layui-btn layui-btn-xs layui-btn-danger" lay-event='delete' id="">
+                            删除
+                        </button>
+
+                    </script>
+                </div>
+            </div>
+        </div>
+    </div>
+    <!--end-->
+</div>
+<script src="{__ADMIN_PATH}js/layuiList.js"></script>
+{/block}
+{block name="script"}
+<script>
+    layList.form.render();
+    var uid = {$uid};
+    layList.tableList('List', "{:Url('proxy_address_list')}?uid="+uid, function () {
+        return [
+            {type: 'checkbox'},
+            {field: 'id', title: 'ID', sort: true, event: 'id', width: '5%', templet: '#id'},
+            {field: 'address', title: '代理地址', templet: '#nickname', align: 'center'},
+            {field: 'right', title: '操作', align: 'center', toolbar: '#act', width: '10%'},
+        ];
+    });
+
+    //查询
+    layList.search('search',function(where){
+        layList.reload(where,true);
+    });
+
+    //点击事件绑定
+    layList.tool(function (event,data,obj) {
+        switch (event) {
+            case 'delete':
+                var url=layList.U({c:'user.user',a:'proxy_address_delete',q:{id:data.id}});
+                var code = {title:"操作提示",text:"确定将该商品移入回收站吗?",type:'info',confirm:'是的,移入回收站'};
+                $eb.$swal('delete',function(){
+                    $eb.axios.get(url).then(function(res){
+                        if(res.status == 200 && res.data.code == 200) {
+                            $eb.$swal('success',res.data.msg);
+                            obj.del();
+                            location.reload();
+                        }else
+                            return Promise.reject(res.data.msg || '删除失败')
+                    }).catch(function(err){
+                        $eb.$swal('error',err);
+                    });
+                },code)
+                break;
+            case 'open_image':
+                $eb.openImage(data.image);
+                break;
+            case 'edit':
+                location.href = layList.U({a:'edit',q:{id:data.id}});
+                break;
+        }
+    })
+
+
+    //改状态
+    layList.switch('status',function (odj,value) {
+        if(odj.elem.checked==true){
+            layList.baseGet(layList.Url({c:'auction.auction',a:'set_status',p:{status:1,id:value}}),function (res) {
+                layList.msg(res.msg, function () {
+                    layList.reload();
+                });
+            });
+        }else{
+            layList.baseGet(layList.Url({c:'auction.auction',a:'set_status',p:{status:0,id:value}}),function (res) {
+                layList.msg(res.msg, function () {
+                    layList.reload();
+                });
+            });
+        }
+    });
+</script>
+{/block}

+ 9 - 9
app/api/controller/AuthController.php

@@ -41,8 +41,8 @@ class AuthController
         if ($user) {
             if ($user->pwd !== md5($request->param('password')))
                 return app('json')->fail('账号或密码错误');
-            if ($user->pwd === md5(123456))
-                return app('json')->fail('请修改您的初始密码,再尝试登陆!');
+//            if ($user->pwd === md5(123456))
+//                return app('json')->fail('请修改您的初始密码,再尝试登陆!');
         } else {
             return app('json')->fail('账号或密码错误');
         }
@@ -196,15 +196,15 @@ class AuthController
         } catch (ValidateException $e) {
             return app('json')->fail($e->getError());
         }
-        $verifyCode = CacheService::get('code_' . $account);
-        if (!$verifyCode)
-            return app('json')->fail('请先获取验证码');
-        $verifyCode = substr($verifyCode, 0, 6);
-        if ($verifyCode != $captcha)
-            return app('json')->fail('验证码错误');
+//        $verifyCode = CacheService::get('code_' . $account);
+//        if (!$verifyCode)
+//            return app('json')->fail('请先获取验证码');
+//        $verifyCode = substr($verifyCode, 0, 6);
+//        if ($verifyCode != $captcha)
+//            return app('json')->fail('验证码错误');
         if (strlen(trim($password)) < 6 || strlen(trim($password)) > 16)
             return app('json')->fail('密码必须是在6到16位之间');
-        if ($password == '123456') return app('json')->fail('密码太过简单,请输入较为复杂的密码');
+//        if ($password == '123456') return app('json')->fail('密码太过简单,请输入较为复杂的密码');
         $registerStatus = User::register($account, $password, $spread);
         if ($registerStatus) return app('json')->success('注册成功');
         return app('json')->fail(User::getErrorInfo('注册失败'));

+ 12 - 0
app/common.php

@@ -594,3 +594,15 @@ if (!function_exists('do_request')) {
         return $result;
     }
 }
+
+if (!function_exists('pr')) {
+    function pr($var, $int = '')
+    {
+        $template = PHP_SAPI !== 'cli' ? '<pre>%s</pre>' : "\n%s\n";
+        printf($template, print_r($var, true));
+        if (!empty($int)) {
+            exit($int);
+        }
+
+    }
+}

+ 37 - 1
app/models/store/StoreOrder.php

@@ -18,7 +18,7 @@ use crmeb\traits\ModelTrait;
 use think\facade\Log;
 use app\models\system\SystemStore;
 use app\models\routine\RoutineTemplate;
-use app\models\user\{User, UserAddress, UserBill, UserSpread, WechatUser};
+use app\models\user\{ProxyAddress, User, UserAddress, UserBill, UserSpread, WechatUser};
 use crmeb\services\{
     SystemConfigService, WechatTemplateService, workerman\ChannelService
 };
@@ -777,10 +777,33 @@ class StoreOrder extends BaseModel
         UserBill::expend('购买商品', $order['uid'], 'now_money', 'pay_money', $order['pay_price'], $order['id'], $now_money, '支付' . floatval($order['pay_price']) . '元购买商品');
         //支付成功后
         event('OrderPaySuccess', [$order, $formId]);
+        self::push($order);
         $res = $res1 && $resPink && UserSpread::setSpreadSure($order['uid']) && User::backOrderBrokerage($order);
         return false !== $res;
     }
 
+
+    /**
+     * 直推奖励
+     * @param $order
+     * @return void
+     */
+    public static function push($order)
+    {
+        $user = User::where('uid', $order['uid'])->find();
+        if ($user['spread_uid']){
+            $spread = User::where('uid', $user['spread_uid'])->where('level', 2)->find();
+            if ($spread){
+                //直推上级是团队
+                $group_purchase = sys_config('group_purchase');
+                $jl = round($order['pay_price'] * ($group_purchase/100), 2);
+                UserBill::income('佣金', $spread['uid'], 'now_money', 'brokerage', $jl, '', $spread['brokerage_price']+$jl, '直推佣金奖励');
+                User::where('uid', $spread['uid'])->inc('brokerage_price', $jl)->update();
+
+            }
+        }
+    }
+
     /*
      * 线下支付消息通知
      * 待完善
@@ -903,6 +926,19 @@ class StoreOrder extends BaseModel
                 self::rollbackTrans();
                 return self::setErrorInfo($e->getMessage());
             }
+            $address = explode(' ', $order['user_address']);
+            $proxy = ProxyAddress::where(['province' => $address[0], 'city' => $address[1], 'district' => $address[2]])->select()->toArray();
+            foreach ($proxy as $item)
+            {
+                $user = User::where('uid', $item['uid'])->find();
+                if ($user['level'] == 3){
+                    $to_ground = sys_config('to_ground');
+                    $jl = $order['pay_price'] * ($to_ground/100);
+                    UserBill::income('佣金', $user['uid'], 'now_money', 'brokerage', $jl, '', $user['brokerage_price']+$jl, '落地奖励佣金');
+                    User::where('uid', $user['uid'])->inc('brokerage_price', $jl)->update();
+                }
+
+            }
             self::commitTrans();
             event('UserLevelAfter', [User::get($uni)]);
             event('UserOrderTake', $uni);

+ 34 - 0
app/models/system/SystemUserTask.php

@@ -247,6 +247,40 @@ class SystemUserTask extends BaseModel
         return ['还需签到{$num}天', $sumCount, $isComplete];
     }
 
+    /**
+     * 消费金额
+     * @param int $task_id 任务id
+     * @param int $uid 用户id
+     * @param int $start_time 查询开始时间
+     * @param int $number 限定数量
+     * @return Boolean
+     * */
+    public static function InviteConsumption($task_id, $uid = 0, $start_time = 0, $number = 0)
+    {
+        $isComplete = false;
+        $sumCount = StoreOrder::where('uid', $uid)->where('paid', 1)->sum('pay_price');
+        if ($sumCount >= $number) $isComplete = UserTaskFinish::setFinish($uid, $task_id) ? true : false;
+        return ['还需签到{$num}天', $sumCount, $isComplete];
+    }
+
+    /**
+     * 消费金额
+     * @param int $task_id 任务id
+     * @param int $uid 用户id
+     * @param int $start_time 查询开始时间
+     * @param int $number 限定数量
+     * @return Boolean
+     * */
+    public static function InviteConsumptionPurchase($task_id, $uid = 0, $start_time = 0, $number = 0)
+    {
+        $isComplete = false;
+        $sumCount = StoreOrder::where('uid', $uid)->where('paid', 1)->sum('pay_price');
+        if ($sumCount >= $number) $isComplete = UserTaskFinish::setFinish($uid, $task_id) ? true : false;
+        return ['还需签到{$num}天', $sumCount, $isComplete];
+    }
+
+
+
     /**
      * 设置任务完成情况
      * @param int $task_id 任务id

+ 15 - 0
app/models/user/ProxyAddress.php

@@ -0,0 +1,15 @@
+<?php
+
+
+namespace app\models\user;
+
+
+use think\Model;
+
+class ProxyAddress extends Model
+{
+    protected $name = 'proxy_address';
+
+
+    protected $autoWriteTimestamp = true;
+}

+ 2 - 0
app/wap/.gitignore

@@ -0,0 +1,2 @@
+*
+!.gitignore

+ 0 - 8
public/.htaccess

@@ -1,8 +0,0 @@
-<IfModule mod_rewrite.c>
-  Options +FollowSymlinks -Multiviews
-  RewriteEngine On
-
-  RewriteCond %{REQUEST_FILENAME} !-d
-  RewriteCond %{REQUEST_FILENAME} !-f
-  RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
-</IfModule>

+ 5 - 6
public/nginx.htaccess

@@ -1,6 +1,5 @@
-location / { 
-   if (!-e $request_filename) {
-   rewrite  ^(.*)$  /index.php?s=/$1  last;
-   break;
-    }
- }
+location / {
+        if (!-e $request_filename){
+                rewrite  ^(.*)$  /index.php?s=$1  last;   break;
+        }
+}

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
public/static/plug/form-create/province_city_area.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
public/static/plug/ydui/province_city_area2.js


+ 1 - 1
route/wap/route.php

@@ -11,5 +11,5 @@
 use think\facade\Route;
 
 Route::miss(function () {
-    return redirect(sys_config('site_url') . '/index');
+    return view(app()->getRootPath() . 'public' . DS . 'index.html');
 });

Деякі файли не було показано, через те що забагато файлів було змінено