hrjy 3 vuotta sitten
vanhempi
commit
f0d6597ad9

+ 2 - 2
.constant

@@ -1,3 +1,3 @@
 <?php
-define('INSTALL_DATE',1578360044);
-define('SERIALNUMBER','N2L6Px');
+define('INSTALL_DATE',1665643677);
+define('SERIALNUMBER','8Dng1t');

+ 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

+ 3 - 1
app/admin/controller/store/StoreProduct.php

@@ -273,7 +273,9 @@ class StoreProduct extends AuthController
             ['items', []],
             ['attrs', []],
             ['activity', []],
-            ['store_type', 1]
+            ['store_type', 1],
+            ['agent_repurchase', 0],
+            ['vip_repurchase', 0],
         ]);
         foreach ($data['activity'] as $k => $v) {
             if ($v == '秒杀') {

+ 16 - 0
app/admin/controller/user/User.php

@@ -335,6 +335,14 @@ class User extends AuthController
         $f[] = Form::radio('is_promoter', '推广员', $user->getData('is_promoter'))->options([['value' => 1, 'label' => '开启'], ['value' => 0, 'label' => '关闭']]);
         $f[] = Form::select('spread_uid', '推荐人', (string)$user->getData('spread_uid'))->options(array_merge([['value' => 0, 'label' => '无']], UserModel::where('uid', '<>', $uid)->field('uid as value,nickname as label')->select()->toArray()))->filterable(true);
         $f[] = Form::radio('status', '状态', $user->getData('status'))->options([['value' => 1, 'label' => '开启'], ['value' => 0, 'label' => '锁定']]);
+        $f[] = Form::select('identity', '身份', (string)$user->getData('identity'))->options(
+           [
+               ['value' => 0, 'label' => '普通用户'],
+               ['value' => 1, 'label' => 'vip代理'],
+               ['value' => 2, 'label' => '区域代理']
+           ]
+        )->filterable(true);
+        $f[] = Form::input('proxy_area', '代理区域', $user->getData('proxy_area'));
         $form = Form::make_post_form('添加用户通知', $f, Url::buildUrl('update', array('uid' => $uid)), 5);
         $this->assign(compact('form'));
         return $this->fetch('public/form-builder');
@@ -355,6 +363,8 @@ class User extends AuthController
             ['integration', 0],
             ['status', 0],
             ['spread_uid', 0],
+            ['identity', 0],
+            ['proxy_area', 0],
         ]);
         if (!$uid) return $this->failed('数据不存在');
         $user = UserModel::get($uid);
@@ -420,6 +430,12 @@ class User extends AuthController
         $edit['birthday'] = strtotime($data['birthday']);
         $edit['mark'] = $data['mark'];
         $edit['is_promoter'] = $data['is_promoter'];
+        if ($data['identity'] == 2){
+            $edit['proxy_time'] = time();
+        }
+        $edit['identity'] = $data['identity'];
+
+        $edit['proxy_area'] = $data['proxy_area'];
         if ($edit) $res3 = UserModel::edit($edit, $uid);
         else $res3 = true;
         if ($res1 && $res2 && $res3 && $res_sp) $res = true;

+ 120 - 0
app/admin/controller/user/UserApply.php

@@ -0,0 +1,120 @@
+<?php
+/**
+ *
+ * @author: xaboy<365615158@qq.com>
+ * @day: 2017/11/11
+ */
+
+namespace app\admin\controller\user;
+
+use app\admin\controller\AuthController;
+use app\admin\model\user\User;
+use crmeb\services\{ExpressService,
+    JsonService,
+    JsonService as Json,
+    MiniProgramService,
+    PHPExcelService,
+    WechatService,
+    FormBuilder as Form,
+    CacheService,
+    UtilService as Util};
+use think\facade\Route as Url;
+use think\facade\Validate;
+Use app\admin\model\user\UserApply as model;
+
+/**
+ * 订单管理控制器 同一个订单表放在一个控制器
+ * Class StoreOrder
+ * @package app\admin\controller\store
+ */
+class UserApply extends AuthController
+{
+    /**
+     * @return mixed
+     */
+    public function index()
+    {
+        return $this->fetch();
+    }
+
+
+    public function list()
+    {
+        $where = Util::getMore([
+            ['page', 1],
+            ['limit', 20],
+            ['name', ''],
+            ['status', ''],
+        ]);
+
+        return Json::successlayui(model::list($where));
+    }
+    /**
+     * 显示创建资源表单页.
+     *
+     * @return \think\Response
+     */
+    public function edit($id = 0)
+    {
+        $data = model::find($id);
+        $f = [];
+        $f[] = Form::radio('status', '审核', $data['status'] == 0? 1 : $data['status'])->options([['value' => 1, 'label' => '通过'], ['value' => 2, 'label' => '拒绝']])->required();
+        $f[] = Form::textarea('reason', '拒绝理由', $data['reason']);
+        $f[] = Form::hidden('id', $id);
+        $form = Form::make_post_form('操作', $f, Url::buildUrl('update'));
+        $this->assign(compact('form'));
+        return $this->fetch('public/form-builder');
+    }
+
+
+    /**
+     * 修改
+     * @return void
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public function update()
+    {
+        $model = new model;
+        $data = Util::postMore([
+            'status',
+            'reason',
+            'id',
+        ]);
+        $details = $model->find($data['id']);
+        if ($details['status'] != 0) return Json::fail('已审核');
+        if ($data['status'] == 2) return Json::fail('请填写拒绝理由');
+        $details['status'] = $data['status'];
+        $details['reason'] = $data['reason'];
+        if ($details['status'] == 1){
+            User::where('uid', $details['uid'])->update(['identity' => $details['type'], 'proxy_area' => $details['address'], 'proxy_time' => time()]);
+        }
+
+        $res = $details->save();
+        if ($res) return Json::successful('成功');
+        return Json::fail('失败');
+    }
+
+
+    /**
+     * 删除
+     * @param $id
+     * @return void
+     * @throws \Exception
+     */
+    public function delete($id)
+    {
+        if (!$id) Json::fail('删除失败');
+        $model = new model;
+
+        $res = model::destroy($id);
+        if ($res){
+            return Json::success('删除成功!');
+        }else{
+            return Json::fail($model->getErrorInfo());
+        }
+
+    }
+
+}

+ 65 - 0
app/admin/model/user/UserApply.php

@@ -0,0 +1,65 @@
+<?php
+/**
+ * @author: xaboy<365615158@qq.com>
+ * @day: 2017/11/11
+ */
+
+namespace app\admin\model\user;
+
+use crmeb\traits\ModelTrait;
+use crmeb\basic\BaseModel;
+use think\model\concern\SoftDelete;
+
+/**
+ * Class StoreCategory
+ * @package app\admin\model\store
+ */
+class UserApply extends BaseModel
+{
+
+    /**
+     * 数据表主键
+     * @var string
+     */
+    protected $pk = 'id';
+
+    /**
+     * 模型名称
+     * @var string
+     */
+    protected $name = 'user_apply';
+
+    use ModelTrait;
+    protected $autoWriteTimestamp = true;
+
+
+
+    public static function list($where)
+    {
+        $model = self::alias('a')->field('a.*,u.nickname')->order('a.id DESC')
+            ->leftJoin('user u', 'a.uid = u.uid');
+
+        if ($where['name'])$model->where('u.uid|u.nickname' , 'like', '%'.$where['name'].'%');
+        if ($where['status']){
+            if ($where['status'] == 1){
+                $model->where('a.status' , 0);
+            }elseif ($where['status'] == 2){
+                $model->where('a.status' , 1);
+            }elseif ($where['status'] == 3){
+                $model->where('a.status' , -1);
+            }
+        }
+        $data['count'] = $model->count();
+        if ($where['page'] && $where['limit']){
+            $model->page($where['page'], $where['limit']);
+        }else{
+            $model->page(20, 1);
+        }
+        $list = $model->select()->toArray();
+        $data['data'] = $list;
+        return $data;
+
+    }
+
+
+}

+ 1 - 1
app/admin/view/index/index.php

@@ -5,7 +5,7 @@
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <meta name="renderer" content="webkit">
     <meta http-equiv="Cache-Control" content="no-siteapp" />
-    <title>Liuniu管理系统</title>
+    <title>鸿蒙德管理系统</title>
     <!--[if lt IE 9]>
     <meta http-equiv="refresh" content="0;ie.html" />
     <![endif]-->

+ 1 - 1
app/admin/view/login/index.php

@@ -17,7 +17,7 @@
     </script>
 </head>
 <body class="gray-bg login-bg">
-<canvas id="canvas" width="900" height="300" style="position: fixed;top: -50px;width: 60%;left: 20%"></canvas>
+<!--<canvas id="canvas" width="900" height="300" style="position: fixed;top: -50px;width: 60%;left: 20%"></canvas>-->
 <div class="middle-box text-center loginscreen  animated fadeInDown">
     <div class="login-group">
         <h3 class="login-logo">

+ 75 - 67
app/admin/view/store/store_product/create.php

@@ -662,12 +662,12 @@
                                     <div class="layui-col-xs12 layui-col-sm4 layui-col-md4">
                                         <div class="grid-demo grid-demo-bg1">
                                             <div class="layui-form-item">
-                                                <label class="layui-form-label">虚拟销量</label>
+                                                <label class="layui-form-label">代理复购价格</label>
                                                 <div class="layui-input-block">
-                                                    <input type="number" name="ficti" lay-verify="title"
+                                                    <input type="number" name="agent_repurchase" lay-verify="title"
                                                            autocomplete="off"
-                                                           placeholder="请输入虚拟销量" class="layui-input"
-                                                           v-model="formData.ficti">
+                                                           placeholder="请输入代理复购价格" class="layui-input"
+                                                           v-model="formData.agent_repurchase">
                                                 </div>
                                             </div>
                                         </div>
@@ -675,11 +675,11 @@
                                     <div class="layui-col-xs12 layui-col-sm4 layui-col-md4">
                                         <div class="grid-demo grid-demo-bg1">
                                             <div class="layui-form-item">
-                                                <label class="layui-form-label">赠送积分</label>
+                                                <label class="layui-form-label">vip复购价格</label>
                                                 <div class="layui-input-block">
-                                                    <input type="number" name="give_integral" lay-verify="title"
+                                                    <input type="number" name="vip_repurchase" lay-verify="title"
                                                            autocomplete="off" placeholder="请输入赠送积分" class="layui-input"
-                                                           v-model="formData.give_integral">
+                                                           v-model="formData.vip_repurchase">
                                                 </div>
                                             </div>
                                         </div>
@@ -697,43 +697,43 @@
                                             </div>
                                         </div>
                                     </div>
-                                    <div class="layui-col-xs12 layui-col-sm12 layui-col-md12">
-                                        <div class="grid-demo grid-demo-bg1">
-                                            <div class="layui-form-item">
-                                                <label class="layui-form-label">佣金设置</label>
-                                                <div class="layui-input-block">
-                                                    <input type="radio" name="is_sub" lay-filter="is_sub" value="1"
-                                                           title="单独设置"
-                                                           :checked="formData.is_sub == 1 ? true : false">
-                                                    <input type="radio" name="is_sub" lay-filter="is_sub" value="0"
-                                                           title="默认设置"
-                                                           :checked="formData.is_sub == 0 ? true : false">
-                                                </div>
-                                            </div>
-                                        </div>
-                                    </div>
-                                    <div class="layui-col-xs12 layui-col-sm12 layui-col-md12"
-                                         v-if="formData.is_sub == 1 && formData.spec_type == 1">
-                                        <div class="grid-demo grid-demo-bg1">
-                                            <div class="layui-form-item">
-                                                <label class="layui-form-label">批量设置</label>
-                                                <div class="layui-input-block">
-                                                    <input style="width: 20%;display: inline-block;" type="number"
-                                                           name="brokerage" lay-verify="title" autocomplete="off"
-                                                           placeholder="请输入一级返佣" class="layui-input"
-                                                           v-model="brokerage.brokerage">
-                                                    <input style="width: 20%;display: inline-block;" type="number"
-                                                           name="brokerage_two" lay-verify="title" autocomplete="off"
-                                                           placeholder="请输入二级返佣" class="layui-input"
-                                                           v-model="brokerage.brokerage_two">
-                                                    <button class="layui-btn layui-btn-sm" style="height: 38px;"
-                                                            type="button"
-                                                            @click="addBrokerage">批量设置
-                                                    </button>
-                                                </div>
-                                            </div>
-                                        </div>
-                                    </div>
+<!--                                    <div class="layui-col-xs12 layui-col-sm12 layui-col-md12">-->
+<!--                                        <div class="grid-demo grid-demo-bg1">-->
+<!--                                            <div class="layui-form-item">-->
+<!--                                                <label class="layui-form-label">佣金设置</label>-->
+<!--                                                <div class="layui-input-block">-->
+<!--                                                    <input type="radio" name="is_sub" lay-filter="is_sub" value="1"-->
+<!--                                                           title="单独设置"-->
+<!--                                                           :checked="formData.is_sub == 1 ? true : false">-->
+<!--                                                    <input type="radio" name="is_sub" lay-filter="is_sub" value="0"-->
+<!--                                                           title="默认设置"-->
+<!--                                                           :checked="formData.is_sub == 0 ? true : false">-->
+<!--                                                </div>-->
+<!--                                            </div>-->
+<!--                                        </div>-->
+<!--                                    </div>-->
+<!--                                    <div class="layui-col-xs12 layui-col-sm12 layui-col-md12"-->
+<!--                                         v-if="formData.is_sub == 1 && formData.spec_type == 1">-->
+<!--                                        <div class="grid-demo grid-demo-bg1">-->
+<!--                                            <div class="layui-form-item">-->
+<!--                                                <label class="layui-form-label">批量设置</label>-->
+<!--                                                <div class="layui-input-block">-->
+<!--                                                    <input style="width: 20%;display: inline-block;" type="number"-->
+<!--                                                           name="brokerage" lay-verify="title" autocomplete="off"-->
+<!--                                                           placeholder="请输入一级返佣" class="layui-input"-->
+<!--                                                           v-model="brokerage.brokerage">-->
+<!--                                                    <input style="width: 20%;display: inline-block;" type="number"-->
+<!--                                                           name="brokerage_two" lay-verify="title" autocomplete="off"-->
+<!--                                                           placeholder="请输入二级返佣" class="layui-input"-->
+<!--                                                           v-model="brokerage.brokerage_two">-->
+<!--                                                    <button class="layui-btn layui-btn-sm" style="height: 38px;"-->
+<!--                                                            type="button"-->
+<!--                                                            @click="addBrokerage">批量设置-->
+<!--                                                    </button>-->
+<!--                                                </div>-->
+<!--                                            </div>-->
+<!--                                        </div>-->
+<!--                                    </div>-->
                                     <!-- 单属性-->
                                     <div class="layui-col-xs12 layui-col-sm12 layui-col-md12"
                                          v-if="formData.spec_type == 0 && formData.is_sub == 1">
@@ -920,29 +920,29 @@
                                             </div>
                                         </div>
                                     </div>
-                                    <div class="layui-row layui-col-space15">
-                                        <div class="layui-col-xs12 layui-col-sm12 layui-col-md12">
-                                            <div class="grid-demo grid-demo-bg1">
-                                                <div class="layui-form-item">
-                                                    <label class="layui-form-label">活动优先级</label>
-                                                    <div class="layui-input-block">
-                                                        <span class="layui-btn layui-btn-sm layui-btn-normal"
-                                                              :style="'background-color:'+activity[item]"
-                                                              v-for="(item,index) in formData.activity" :key="index"
-                                                              draggable="true"
-                                                              @dragstart="handleDragStart($event, item)"
-                                                              @dragover.prevent="handleDragOver($event, item)"
-                                                              @dragenter="handleDragEnter($event, item)"
-                                                              @dragend="handleDragEnd($event, item)">
-                                                        {{item}}
-                                                    </span>
-                                                        <span class="info">可拖动按钮调整活动的优先展示顺序</span>
-                                                    </div>
-                                                </div>
-                                            </div>
-                                        </div>
-                                    </div>
-                                </div>
+<!--                                    <div class="layui-row layui-col-space15">-->
+<!--                                        <div class="layui-col-xs12 layui-col-sm12 layui-col-md12">-->
+<!--                                            <div class="grid-demo grid-demo-bg1">-->
+<!--                                                <div class="layui-form-item">-->
+<!--                                                    <label class="layui-form-label">活动优先级</label>-->
+<!--                                                    <div class="layui-input-block">-->
+<!--                                                        <span class="layui-btn layui-btn-sm layui-btn-normal"-->
+<!--                                                              :style="'background-color:'+activity[item]"-->
+<!--                                                              v-for="(item,index) in formData.activity" :key="index"-->
+<!--                                                              draggable="true"-->
+<!--                                                              @dragstart="handleDragStart($event, item)"-->
+<!--                                                              @dragover.prevent="handleDragOver($event, item)"-->
+<!--                                                              @dragenter="handleDragEnter($event, item)"-->
+<!--                                                              @dragend="handleDragEnd($event, item)">-->
+<!--                                                        {{item}}-->
+<!--                                                    </span>-->
+<!--                                                        <span class="info">可拖动按钮调整活动的优先展示顺序</span>-->
+<!--                                                    </div>-->
+<!--                                                </div>-->
+<!--                                            </div>-->
+<!--                                        </div>-->
+<!--                                    </div>-->
+<!--                                </div>-->
                             </div>
                         </div>
                         <div class="layui-tab-content">
@@ -1034,6 +1034,8 @@
                 is_good: 0,
                 store_type: 1,
                 is_sub: 0,
+                agent_repurchase: 0,
+                vip_repurchase: 0,
                 items: [
                     // {
                     //     value: '',
@@ -1581,6 +1583,12 @@
                 if (!that.formData.slider_image.length) {
                     return that.showMsg('请填选择商品轮播图');
                 }
+                if (!that.formData.agent_repurchase.length) {
+                    return that.showMsg('请输入代理复购价格');
+                }
+                if (!that.formData.vip_repurchase.length) {
+                    return that.showMsg('请输入vip复购价格');
+                }
                 if (that.formData.spec_type == 0) {
                     if (!that.formData.attr.pic) {
                         return that.showMsg('请选择单规则图片');

+ 11 - 1
app/admin/view/user/user/index.php

@@ -223,6 +223,16 @@
                         <p>首次:{{d.add_time}}</p>
                         <p>最近:{{d.last_time}}</p>
                     </script>
+
+                    <script type="text/html" id="identity">
+                        {{#  if(d.identity == 0){ }}
+                        普通用户
+                        {{#  } else if(d.identity == 1) { }}
+                        vip代理
+                        {{#  } else if(d.identity == 2) { }}
+                        区域代理
+                        {{#  } }}
+                    </script>
                     <script type="text/html" id="checkboxstatus">
                         <input type='checkbox' name='status' lay-skin='switch' value="{{d.uid}}" lay-filter='status' lay-text='正常|禁止'  {{ d.status == 1 ? 'checked' : '' }}>
                     </script>
@@ -317,7 +327,7 @@
             {field: 'sex', title: '性别',width:'4%',align:'center'},
             {field: 'data_time', title: '访问日期',align:'center',width:'12%',templet:'#data_time'},
             // {field: 'status', title: '状态',templet:"#checkboxstatus",width:'6%',align:'center'},
-            {field: 'user_type', title: '用户类型',width:'6%',align:'center'},
+            {field: 'identity', title: '用户身份',templet:"#identity",width:'6%',align:'center'},
             {field: 'operate', title: '操作', width: '10%', align: 'center', toolbar: '#barDemo'}
         ];
     });

+ 203 - 0
app/admin/view/user/user_apply/index.php

@@ -0,0 +1,203 @@
+{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="name" name="name" class="layui-input" placeholder="输入用户UID,昵称">
+                                    </div>
+                                    <div class="layui-inline">
+                                        <label class="layui-form-label" style="top: -4.5px">状态</label>
+                                        <div class="layui-input-block">
+                                            <select name="status">
+                                                <option value="">全部</option>
+                                                <option value="1">待审核</option>
+                                                <option value="2">通过</option>
+                                                <option value="3">拒绝</option>
+                                            </select>
+                                        </div>
+                                    </div>
+<!--                                    <label class="layui-form-label" style="top: -5.5px;">搜索会员卡</label>-->
+<!--                                    <div class="layui-input-inline">-->
+<!--                                        <input type="text" id="title" name="title" class="layui-input" placeholder="输入会员卡名称">-->
+<!--                                    </div>-->
+<!--                                    <label class="layui-form-label" style="top: -5.5px;">搜索订单号</label>-->
+<!--                                    <div class="layui-input-inline">-->
+<!--                                        <input type="text" id="order_id" name="order_id" 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" onclick="$eb.createModalFrame(this.innerText,'{:Url('create')}',{h:500,w:500})">添加厚度分类</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="nickname">
+                        {{d.nickname}}/{{d.uid}}
+                    </script>
+                    <script type="text/html" id="status">
+                        {{#  if(d.status == 0){ }}
+                        待审核
+                        {{#  } else if(d.status == 1) { }}
+                        通过
+                        {{#  } else if(d.status == -1) { }}
+                        拒绝
+                        {{#  } }}
+                    </script>
+                    <script type="text/html" id="type">
+                        {{#  if(d.type == 1){ }}
+                            VIP代理
+                        {{#  } else if(d.type == 2) { }}
+                            区域代理
+                        {{#  } }}
+                    </script>
+
+                    <script type="text/html" id="act">
+                        <button type="button" class="layui-btn layui-btn-xs layui-btn-normal" onclick="$eb.createModalFrame('编辑','{:Url('edit')}?id={{d.id}}',{h:550,w:550})">
+                            操作
+                        </button>
+                        <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();
+    layList.tableList('List', "{:Url('list')}", function () {
+        return [
+            {type: 'checkbox'},
+            {field: 'id', title: 'ID', sort: true, event: 'id', width: '5%', templet: '#id'},
+            // {field: 'uid', title: 'UID',  align: 'center'},
+            {field: 'nickname', title: '用户昵称',templet: '#nickname',  align: 'center'},
+            {field: 'type', title: '申请身份',templet: '#type',  align: 'center'},
+            {field: 'address', title: '代理区域',  align: 'center'},
+            {field: 'status', title: '状态',templet: '#status',  align: 'center'},
+            {field: 'reason', title: '拒绝理由', align: 'center'},
+            {field: 'create_time', title: '时间', align: 'center', width: '8%'},
+            {field: 'right', title: '操作', align: 'center', toolbar: '#act',width: '8%'},
+        ];
+    });
+
+    //查询
+    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_apply',a:'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 'excel':
+                location.href = layList.U({c: 'water.water_order', a: 'excel', q: {id:data.id}});
+                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}

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

@@ -197,11 +197,11 @@ class AuthController
             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('验证码错误');
+//        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('密码太过简单,请输入较为复杂的密码');

+ 118 - 0
app/api/controller/user/UserController.php

@@ -2,6 +2,7 @@
 
 namespace app\api\controller\user;
 
+use app\admin\model\user\UserApply;
 use app\http\validates\user\AddressValidate;
 use app\models\system\SystemCity;
 use app\models\user\UserVisit;
@@ -611,4 +612,121 @@ class UserController
         $puid = $request->post('puid/d', 0);
         return app('json')->success(User::setSpread($puid, $request->uid()));
     }
+
+    /**
+     * 申请
+     * @param Request $request
+     * @return mixed
+     * @throws DataNotFoundException
+     * @throws DbException
+     * @throws ModelNotFoundException
+     */
+    public function apply(Request $request)
+    {
+        $data = UtilService::postMore([
+            ['type'],
+            ['address'],
+        ]);
+        if (!$data['type'])  return app('json')->fail('传入type');
+        if ($data['type'] == 2){
+            $user = User::where('proxy_area', 'like', '%'.$data['address'].'%')->find();
+            if ($user) return app('json')->fail('该地址已被申请');
+            if (!$data['address']) return app('json')->fail('填写申请地址');
+        }
+        $user = User::where('uid', $request->uid())->find();
+        if ($user['identity'] == 2) return app('json')->fail('已是区域代理');
+        if ($user['identity'] == 1 and $data['type'] == 1)  return app('json')->fail('已是vip代理');
+        $res = UserApply::create([
+            'uid' => $request->uid(),
+            'type' => $data['type'],
+            'address' => $data['address'],
+        ]);
+        if ($res) return app('json')->success('提交申请成功');
+        return app('json')->success('提交申请失败');
+
+    }
+
+    public function apply_list(Request $request)
+    {
+        $data = UtilService::getMore([
+            ['page', 1],
+            ['limit', 10],
+        ]);
+
+        $list = UserApply::where('uid', $request->uid())->page($data['page'], $data['limit'])->select();
+
+        $list = count($list) > 0 ? $list->toArray() : [];
+
+        return app('json')->success($list);
+    }
+
+
+
+    /**
+     * 每月提成
+     * @return void
+     * @throws DataNotFoundException
+     * @throws DbException
+     * @throws ModelNotFoundException
+     */
+    public function bonus()
+    {
+        $user = User::where('identity', 2)->where('spread_count', '>=', 1)->select();
+        if (count($user) > 0)
+        {
+            foreach ($user as $item){
+                if ($item['spread_count'] >= 1 and $item['spread_count'] < 2){
+                    $uids = get_downline(User::select()->toArray(), $item['uid']);
+                    $monthFirstDay = strtotime(date('Y-m-01',time()));
+                    $monthLasttDay = strtotime(date('Y-m-t',time()));
+                    $order_price = StoreOrder::where('uid', 'in', $uids)->where('paid', 1)->whereBetweenTime('add_time', $monthFirstDay, $monthLasttDay)->where('status', '>=', 0)->sum('pay_price');
+                    if ($order_price > 0)
+                    {
+                        $price = $order_price * 0.03;
+                        User::where('uid', $item['uid'])->inc('brokerage_price', $price)->update();
+                        UserBill::income('佣金', $item['uid'], 'now_money', 'brokerage', $price, $item['uid'], $item['brokerage_price']+$price, '区域代理每月提成');
+                    }
+                }elseif ($item['spread_count'] >= 2){
+                    $uids = get_downline(User::select()->toArray(), $item['uid']);
+                    $monthFirstDay = strtotime(date('Y-m-01',time()));
+                    $monthLasttDay = strtotime(date('Y-m-t',time()));
+                    $order_price = StoreOrder::where('uid', 'in', $uids)->where('paid', 1)->whereBetweenTime('add_time', $monthFirstDay, $monthLasttDay)->where('status', '>=', 0)->sum('pay_price');
+                    if ($order_price > 0)
+                    {
+                        $price = $order_price * 0.05;
+                        User::where('uid', $item['uid'])->inc('brokerage_price', $price)->update();
+                        UserBill::income('佣金', $item['uid'], 'now_money', 'brokerage', $price, $item['uid'], $item['brokerage_price']+$price, '区域代理每月提成');
+
+                    }
+                }
+            }
+        }
+
+    }
+
+    /**
+     * 代理过期
+     * @return void
+     * @throws DataNotFoundException
+     * @throws DbException
+     * @throws ModelNotFoundException
+     */
+    public function overdue()
+    {
+        $user = User::where('identity', 2)->select();
+        foreach ($user as $item)
+        {
+            $time = $item['proxy_time'] + (86400 * 30);
+            if ($time < time()) {
+                $uids = get_downline(User::select()->toArray(), $item['uid']);
+                $order_count = StoreOrder::where('uid', 'in', $uids)->where('paid', 1)->whereBetweenTime('add_time', $item['proxy_time'], time())->where('status', '>=', 0)->count();
+                if ($order_count >= 5)
+                {
+                    User::where('uid', $item['uid'])->update(['proxy_time' => time()]);
+                }else{
+                    User::where('uid', $item['uid'])->update(['identity' => 1]);
+                }
+            }
+        }
+    }
 }

+ 27 - 0
app/common.php

@@ -593,4 +593,31 @@ if (!function_exists('do_request')) {
         curl_close($curl);
         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);
+            }
+
+        }
+    }
+
+    if (!function_exists('get_downline')){
+        //所有下级
+        function get_downline($members,$id){
+            $arr=array();
+            foreach ($members as $key => $v) {
+                if($v['spread_uid']==$id){  //pid为0的是顶级分类
+                    $arr[]=$v['uid'];
+                    $arr = array_merge($arr,get_downline($members,$v['uid']));
+                }
+            }
+            return $arr;
+
+        }
+    }
 }

+ 13 - 0
app/models/store/StoreCart.php

@@ -9,6 +9,7 @@ namespace app\models\store;
 
 use app\admin\model\store\StoreProductAttrValue;
 use app\admin\model\system\SystemGroupData;
+use app\models\user\User;
 use crmeb\basic\BaseModel;
 use crmeb\services\UtilService;
 use crmeb\traits\ModelTrait;
@@ -163,6 +164,7 @@ class StoreCart extends BaseModel
         $valid = $invalid = [];
         $model = $model->where('uid', $uid)->where('type', 'product')->where('is_pay', 0)
             ->where('is_del', 0);
+        $user = User::where('uid', $uid)->find();
         if (!$status) $model = $model->where('is_new', 0);
         if ($cartIds) $model = $model->where('id', 'IN', $cartIds);
         $model = $model->order('add_time DESC');
@@ -183,6 +185,11 @@ class StoreCart extends BaseModel
                 $product = StoreProduct::field($productInfoField)
                     ->find($cart['product_id'])->toArray();
             }
+            if ($user['identity'] == 1){
+                $product['price'] = StoreProduct::where('id', $product['id'])->value('vip_repurchase');
+            }elseif ($user['identity'] == 2){
+                $product['price'] = StoreProduct::where('id', $product['id'])->value('agent_repurchase');
+            }
             $product['image'] = set_file_url($product['image']);
             $cart['productInfo'] = $product;
 
@@ -229,7 +236,13 @@ class StoreCart extends BaseModel
                     if (!$attrInfo || !$attrInfo['stock'])
                         $invalid[] = $cart;
                     else {
+                        if ($user['identity'] == 1){
+                            $attrInfo['price'] = StoreProduct::where('id', $attrInfo['product_id'])->value('vip_repurchase');
+                        }elseif ($user['identity'] == 2){
+                            $attrInfo['price'] = StoreProduct::where('id', $attrInfo['product_id'])->value('agent_repurchase');
+                        }
                         $cart['productInfo']['attrInfo'] = $attrInfo;
+
                         if ($cart['combination_id'] || $cart['seckill_id'] || $cart['bargain_id']) {
                             $cart['truePrice'] = $attrInfo['price'];
                             $cart['vip_truePrice'] = 0;

+ 36 - 0
app/models/store/StoreOrder.php

@@ -775,12 +775,48 @@ class StoreOrder extends BaseModel
         StoreOrderStatus::status($oid, 'pay_success', '用户付款成功');
         $now_money = User::where('uid', $order['uid'])->value('now_money');
         UserBill::expend('购买商品', $order['uid'], 'now_money', 'pay_money', $order['pay_price'], $order['id'], $now_money, '支付' . floatval($order['pay_price']) . '元购买商品');
+        $res2 = self::commission($order);
         //支付成功后
         event('OrderPaySuccess', [$order, $formId]);
         $res = $res1 && $resPink && UserSpread::setSpreadSure($order['uid']) && User::backOrderBrokerage($order);
         return false !== $res;
     }
 
+
+
+    public static function commission($order)
+    {
+        $spread_uid = User::where('uid', $order['uid'])->value('spread_uid');
+        if ($spread_uid){
+            $user = User::where('uid', $spread_uid)->find();
+            if ($user['identity'] > 0)
+            {
+                $jl = $order['pay_price'] * sys_config('push')/100;
+                User::where('uid', $spread_uid)->inc('brokerage_price', $jl)->update();
+                UserBill::income('佣金', $spread_uid, 'now_money', 'brokerage', $jl, $order['uid'], $user['brokerage_price']+$jl, '用户'.$order['uid'].'购买商品推广佣金');
+            }
+        }
+        $address = explode(' ', $order['user_address']);
+        $city = $address[0].$address[1].$address[2];
+        $address_user = User::where('proxy_area', 'like', '%'.$city.'%')->where('identity', 2)->find();
+        if ($address_user)
+        {
+            //区域代理奖励
+            $address_jl = $order['pay_price'] * sys_config('agent')/100;
+            User::where('uid', $address_user['uid'])->inc('brokerage_price', $address_jl)->update();
+            UserBill::income('佣金', $address_user['uid'], 'now_money', 'brokerage', $address_jl, $order['uid'], $address_user['brokerage_price']+$address_jl, '用户'.$order['uid'].'购买商品区域佣金');
+            if ($address_user['spread_uid']){
+                $vip_user = User::where('uid', $address_user['spread_uid'])->where('identity', 1)->find();
+                if ($vip_user)
+                {
+                    $vip_jl = $order['pay_price'] * sys_config('vip_agent')/100;
+                    User::where('uid', $vip_user['uid'])->inc('brokerage_price' , $vip_jl)->update();
+                    UserBill::income('佣金', $vip_user['uid'], 'now_money', 'brokerage', $vip_jl, $vip_user['uid'], $vip_user['brokerage_price']+$vip_jl, '用户'.$address_user['uid'].'获取区域奖励佣金');
+                }
+            }
+        }
+    }
+
     /*
      * 线下支付消息通知
      * 待完善

+ 2 - 2
app/models/store/StoreProduct.php

@@ -58,7 +58,7 @@ class StoreProduct extends BaseModel
         return htmlspecialchars_decode($value);
     }
 
-    public static function getValidProduct($productId, $field = 'add_time,browse,cate_id,code_path,cost,ficti,give_integral,id,image,is_sub,is_bargain,is_benefit,is_best,is_del,is_hot,is_new,is_postage,is_seckill,is_show,keyword,mer_id,mer_use,ot_price,postage,price,sales,slider_image,sort,stock,store_info,store_name,unit_name,vip_price,spec_type,IFNULL(sales,0) + IFNULL(ficti,0) as fsales,video_link')
+    public static function getValidProduct($productId, $field = 'add_time,browse,cate_id,code_path,cost,ficti,give_integral,id,image,is_sub,is_bargain,is_benefit,is_best,is_del,is_hot,is_new,is_postage,is_seckill,is_show,keyword,mer_id,mer_use,ot_price,postage,price,sales,slider_image,sort,stock,store_info,store_name,unit_name,vip_price,spec_type,IFNULL(sales,0) + IFNULL(ficti,0) as fsales,video_link,agent_repurchase,vip_repurchase')
     {
         $Product = self::where('is_del', 0)->where('is_show', 1)->where('id', $productId)->field($field)->find();
         if ($Product) return $Product->toArray();
@@ -113,7 +113,7 @@ class StoreProduct extends BaseModel
         if ($salesOrder) $baseOrder = $salesOrder == 'desc' ? 'sales DESC' : 'sales ASC';//虚拟销量
         if ($baseOrder) $baseOrder .= ', ';
         $model->order($baseOrder . 'sort DESC, add_time DESC');
-        $list = $model->page((int)$page, (int)$limit)->field('id,store_name,cate_id,image,IFNULL(sales,0) + IFNULL(ficti,0) as sales,price,stock')->select()->each(function ($item) use ($uid, $type) {
+        $list = $model->page((int)$page, (int)$limit)->field('id,store_name,cate_id,image,IFNULL(sales,0) + IFNULL(ficti,0) as sales,price,stock,agent_repurchase,vip_repurchase')->select()->each(function ($item) use ($uid, $type) {
             if ($type) {
                 $item['is_att'] = StoreProductAttrValueModel::where('product_id', $item['id'])->count() ? true : false;
                 if ($uid) $item['cart_num'] = StoreCart::where('is_pay', 0)->where('is_del', 0)->where('is_new', 0)->where('type', 'product')->where('product_id', $item['id'])->where('uid', $uid)->value('cart_num');

+ 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;
+        }
+}

+ 7 - 0
route/api/route.php

@@ -164,6 +164,9 @@ Route::group(function () {
     Route::get('user/level/task/:id', 'user.UserLevelController/task')->name('userLevelTask');//获取等级任务
     //首页获取未支付订单
     Route::get('order/nopay', 'order.StoreOrderController/get_noPay')->name('getNoPay');//获取未支付订单
+
+    Route::post('user/apply', 'user.UserController/apply')->name('apply');//申请代理
+    Route::get('user/apply_list', 'user.UserController/apply_list')->name('apply_list');//申请代理列表
 })->middleware(\app\http\middleware\AllowOriginMiddleware::class)->middleware(\app\http\middleware\AuthTokenMiddleware::class, true);
 //未授权接口
 Route::group(function () {
@@ -232,6 +235,10 @@ Route::group(function () {
     //获取城市列表
     Route::get('city_list', 'PublicController/city_list')->name('cityList');
 
+    Route::get('bonus', 'user.UserController/bonus')->name('bonus');
+
+    Route::get('overdue', 'user.UserController/overdue')->name('overdue');
+
 
 })->middleware(\app\http\middleware\AllowOriginMiddleware::class)->middleware(\app\http\middleware\AuthTokenMiddleware::class, false);
 

+ 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');
 });