Browse Source

用户管理

zac3533 1 year ago
parent
commit
e2ec22514d

+ 1 - 1
application/admin/controller/user/Group.php

@@ -44,7 +44,7 @@ class Group extends Backend
             }
             list($where, $sort, $order, $offset, $limit) = $this->buildparams();
             $list = $this->model
-                ->where($where)->where('is_agent', 1)
+                ->where($where)->where('is_agent', 1)->where('is_delete', 0)
                 ->order($sort, $order)
                 ->paginate($limit);
 

+ 2 - 2
application/admin/controller/user/Team.php

@@ -2,9 +2,9 @@
 
 namespace app\admin\controller\user;
 
-use app\admin\model\UserPath;
 use think\Db;
 use Exception;
+use app\admin\model\UserPath;
 use think\exception\DbException;
 use think\exception\PDOException;
 use app\common\controller\Backend;
@@ -67,7 +67,7 @@ class Team extends Backend
             ->where('a.id','IN',function($query) use($user_id){
                 $query->table('ta_users_path')->where('parent_id', $user_id)->order('distance', 'desc')->field('user_id');
             })
-            ->where($where)->where($mapType)
+            ->where($where)->where($mapType)->where('a.is_delete', 0)
             ->field('a.id,a.is_lock,a.mobile,a.balance,a.bonus_sum,a.create_time,b.mobile as parent_name,c.distance')
             ->order($sort, $order)
             ->paginate($limit);

+ 64 - 9
application/admin/controller/user/User.php

@@ -4,6 +4,8 @@ namespace app\admin\controller\user;
 
 use think\Db;
 use Exception;
+use fast\Random;
+use app\admin\model\UserPath;
 use app\common\model\Moneylog;
 use think\exception\DbException;
 use think\exception\PDOException;
@@ -47,15 +49,25 @@ class User extends Backend
                 return $this->selectpage();
             }
             list($where, $sort, $order, $offset, $limit) = $this->buildparams();
-            $list = $this->model
-                //->with('group')
-                ->where($where)
+
+            $list = $this->model->alias('a')
+                ->join('users b','a.parent_id = b.id', 'LEFT')
+                ->where($where)->where('a.is_delete', 0)
                 ->order($sort, $order)
+                ->field('a.*,b.mobile as parent_name')
                 ->paginate($limit);
-            // foreach ($list as $k => $v) {
-            //     $v->avatar = $v->avatar ? cdnurl($v->avatar, true) : letter_avatar($v->nickname);
-            //     $v->hidden(['password', 'salt']);
-            // }
+
+   
+            $in  = model('Mongyin');
+            $out = model('Mongyout');
+            $path= model('UserPath');
+            foreach ($list as &$item) {
+                $item->agent = $this->model->where('id', '=',  
+                                $path->where('user_id', $item->id)->where('is_agent', 1)->order('distance', 'desc')->value('parent_id'))
+                             ->value('mobile');
+                $item->recharge = $in::where('status', 1)->where('user_id', $item->id)->sum('amount');
+                $item->withdraw = $out::where('status', 1)->where('user_id', $item->id)->sum('amount');
+            }  
             $result = array("total" => $list->total(), "rows" => $list->items());
 
             return json($result);
@@ -65,7 +77,7 @@ class User extends Backend
 
 
     /**
-     * 余额     public function balance($ids = null)
+     * 余额
      * @param $ids
      * @return string
      * @throws DbException
@@ -211,7 +223,7 @@ class User extends Backend
 
 
     /**
-     * 清0
+     * 清
      * @param $ids
      * @return string
      * @throws DbException
@@ -276,6 +288,17 @@ class User extends Backend
                 $validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.edit' : $name) : $this->modelValidate;
                 $row->validateFailException()->validate($validate);
             }
+            if(!empty($params['login_pwd'])){
+                $params['salt'] = Random::alnum();
+                $params['fund_pwd'] = $this->auth->getEncryptPassword($params['fund_pwd'], $params['salt']);
+            }else{
+                unset($params['login_pwd']);
+            }
+            if(!empty($params['fund_pwd'])){
+                $params['fund_pwd'] = md5($params['fund_pwd']);
+            }else{
+                unset($params['fund_pwd']);
+            }
             $result = $row->allowField(true)->save($params);
             Db::commit();
         } catch (ValidateException|PDOException|Exception $e) {
@@ -288,6 +311,38 @@ class User extends Backend
         $this->success();
     }
 
+    
+    /**
+     * 删除
+     *
+     * @param $ids
+     * @return void
+     * @throws DbException
+     * @throws DataNotFoundException
+     * @throws ModelNotFoundException
+     */
+    public function del($ids = null)
+    {
 
+        $row = $this->model->get($ids);
+        if (!$row) {
+            $this->error(__('No Results were found'));
+        }
+        $adminIds = $this->getDataLimitAdminIds();
+        if (is_array($adminIds) && !in_array($row[$this->dataLimitField], $adminIds)) {
+            $this->error(__('You have no permission'));
+        }
+        $result = false;
+        try {
+            $result = $row->allowField(true)->save(['is_delete'=>1]);
+        } catch (ValidateException|PDOException|Exception $e) {
+
+            $this->error($e->getMessage());
+        }
+        if (false === $result) {
+            $this->error(__('No rows were updated'));
+        }
+        $this->success();
+    }
 
 }

+ 43 - 29
application/admin/lang/vn/user/user.php

@@ -1,33 +1,47 @@
 <?php
 
 return [
-    'Id'             => 'ID',
-    'Group_id'       => '组别ID',
-    'Username'       => '用户名',
-    'Nickname'       => '昵称',
-    'Password'       => '密码',
-    'Salt'           => '密码盐',
-    'Email'          => '电子邮箱',
-    'Mobile'         => '手机号',
-    'Avatar'         => '头像',
-    'Level'          => '等级',
-    'Gender'         => '性别',
-    'Male'           => '男',
-    'FeMale'         => '女',
-    'Birthday'       => '生日',
-    'Bio'            => '格言',
-    'Score'          => '积分',
-    'Successions'    => '连续登录天数',
-    'Maxsuccessions' => '最大连续登录天数',
-    'Prevtime'       => '上次登录时间',
-    'Logintime'      => '登录时间',
-    'Loginip'        => '登录IP',
-    'Loginfailure'   => '失败次数',
-    'Joinip'         => '加入IP',
-    'Jointime'       => '加入时间',
-    'Createtime'     => '创建时间',
-    'Updatetime'     => '更新时间',
-    'Token'          => 'Token',
-    'Status'         => '状态',
-    'Leave password blank if dont want to change' => '不修改密码请留空',
+    'Id'                    => 'ID',
+    'Group_id'              => '所属代理',
+    'Mobile'                => '手机号',
+    'Parent_id'             => '上级',
+    'Balance'               => '余额',
+    'Freeze'                => '冻结金额',
+    'Task'                  => '本轮已做任务量',
+    'Invitation_code'       => '邀请码',
+    'Is_agent'              => '代理',
+    'User_type'             => '用户类型(真人/假人)',
+    'Status'                => '状态(是/否)',
+    'Recharge'              => '充值',
+    'Withdrawal'            => '提现',
+    'Income'                => '收益',
+    'Account change'        => '帐变',
+    'Clear'                 => '清零',
+    'Team'                  => '团队',
+    'Card slip'             => '卡单',
+    'Collection'            => '收款', 
+    'Yes'                   => '是',
+    'No'                    => '否',
+    'Dummy'                 => '假人',
+    'Real person'           => '真人',
+    'Locking'               => '锁定',
+    'New'                   => '新增',
+    'Reduce'                => '减少',
+    'Type'                  => '类型',
+    'Amount'                => '金额',
+    'USDT address'          => 'USDT钱包地址',
+    'Real name'             => '姓名',
+    'Bank name'             => '开户行',
+    'Bank card'             => '卡号',
+    'Which start'           => '第几单开始',
+    'Min amount'            => '最小金额',
+    'Max amount'            => '最大金额',
+    'Income multiple'       => '收益倍数',
+    'Agent ID'              => '代理ID',
+    'Code'                  => '区号',
+    'Nickname'              => '昵称',
+    'Login pwd'             => '登录密码',
+    'Fund pwd'              => '资金密码',
+    'Task num'              => 'Số lượng nhiệm vụ hiện tại',
+    'Pwd title'             => 'Để trống để không thực hiện thay đổi',
 ];

+ 7 - 5
application/admin/lang/zh-cn/user/user.php

@@ -29,8 +29,6 @@ return [
     'Reduce'                => '减少',
     'Type'                  => '类型',
     'Amount'                => '金额',
-
-    
     'USDT address'          => 'USDT钱包地址',
     'Real name'             => '姓名',
     'Bank name'             => '开户行',
@@ -39,8 +37,12 @@ return [
     'Min amount'            => '最小金额',
     'Max amount'            => '最大金额',
     'Income multiple'       => '收益倍数',
-
-
-
+    'Agent ID'              => '代理ID',
+    'Code'                  => '区号',
+    'Nickname'              => '昵称',
+    'Login pwd'             => '登录密码',
+    'Fund pwd'              => '资金密码',
+    'Task num'              => '当前任务数',
+    'Pwd title'             => '留空则不修改',
 
 ];

+ 27 - 95
application/admin/view/user/user/edit.html

@@ -1,129 +1,61 @@
-<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
+<form id="edit-form" role="form" data-toggle="validator" method="POST" action="">
     {:token()}
-    <input type="hidden" name="row[id]" value="{$row.id}">
+  
+    <div class="form-horizontal">
     <div class="form-group">
-        <label for="c-password" class="control-label col-xs-12 col-sm-2">{:__('Password')}:</label>
-        <div class="col-xs-12 col-sm-4">
-            <input id="c-password" data-rule="password" class="form-control" name="row[password]" type="password" value="" placeholder="{:__('Leave password blank if dont want to change')}" autocomplete="new-password" />
-        </div>
-    </div>
-
-    <div class="form-group">
-        <label for="c-mobile" class="control-label col-xs-12 col-sm-2">{:__('Mobile')}:</label>
-        <div class="col-xs-12 col-sm-4">
-            <input id="c-mobile" data-rule="mobile" class="form-control" name="row[mobile]" type="text" value="{$row.mobile|htmlentities}">
+        <label for="c-agent_id" class="control-label col-xs-12 col-sm-2">{:__('Agent ID')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-agent_id" data-rule="agent_id" class="form-control" name="row[agent_id]" type="agent_id" value="{$row.agent_id|htmlentities}" />
         </div>
     </div>
     <div class="form-group">
-        <label for="c-avatar" class="control-label col-xs-12 col-sm-2">{:__('Avatar')}:</label>
+        <label for="c-code" class="control-label col-xs-12 col-sm-2">{:__('Code')}:</label>
         <div class="col-xs-12 col-sm-8">
-            <div class="input-group">
-                <input id="c-avatar" data-rule="" class="form-control" size="50" name="row[avatar]" type="text" value="{$row.avatar}">
-                <div class="input-group-addon no-border no-padding">
-                    <span><button type="button" id="faupload-avatar" class="btn btn-danger faupload" data-input-id="c-avatar" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-avatar"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
-                    <span><button type="button" id="fachoose-avatar" class="btn btn-primary fachoose" data-input-id="c-avatar" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
-                </div>
-                <span class="msg-box n-right" for="c-avatar"></span>
-            </div>
-            <ul class="row list-inline faupload-preview" id="p-avatar"></ul>
+            <input id="c-code" data-rule="required" class="form-control" name="row[code]" type="number" value="{$row.code|htmlentities}">
         </div>
     </div>
 
     <div class="form-group">
-        <label for="c-level" class="control-label col-xs-12 col-sm-2">{:__('Level')}:</label>
-        <div class="col-xs-12 col-sm-4">
-            <input id="c-level" data-rule="required" class="form-control" name="row[level]" type="number" value="{$row.level}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Gender')}:</label>
+        <label for="c-mobile" class="control-label col-xs-12 col-sm-2">{:__('Mobile')}:</label>
         <div class="col-xs-12 col-sm-8">
-            {:build_radios('row[gender]', ['1'=>__('Male'), '0'=>__('Female')], $row['gender'])}
-        </div>
-    </div>
-    <div class="form-group">
-        <label for="c-birthday" class="control-label col-xs-12 col-sm-2">{:__('Birthday')}:</label>
-        <div class="col-xs-12 col-sm-4">
-            <input id="c-birthday" data-rule="" class="form-control datetimepicker" data-date-format="YYYY-MM-DD" data-use-current="true" name="row[birthday]" type="text" value="{$row.birthday}">
+            <input id="c-mobile" data-rule="mobile" class="form-control" name="row[mobile]" type="text" value="{$row.mobile|htmlentities}">
         </div>
     </div>
     <div class="form-group">
-        <label for="c-bio" class="control-label col-xs-12 col-sm-2">{:__('Bio')}:</label>
+        <label for="c-nickname" class="control-label col-xs-12 col-sm-2">{:__('Nickname')}:</label>
         <div class="col-xs-12 col-sm-8">
-            <input id="c-bio" data-rule="" class="form-control" name="row[bio]" type="text" value="{$row.bio|htmlentities}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label for="c-money" class="control-label col-xs-12 col-sm-2">{:__('Money')}:</label>
-        <div class="col-xs-12 col-sm-4">
-            <input id="c-money" data-rule="required" class="form-control" name="row[money]" type="number" value="{$row.money}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label for="c-score" class="control-label col-xs-12 col-sm-2">{:__('Score')}:</label>
-        <div class="col-xs-12 col-sm-4">
-            <input id="c-score" data-rule="required" class="form-control" name="row[score]" type="number" value="{$row.score}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label for="c-successions" class="control-label col-xs-12 col-sm-2">{:__('Successions')}:</label>
-        <div class="col-xs-12 col-sm-4">
-            <input id="c-successions" data-rule="required" class="form-control" name="row[successions]" type="number" value="{$row.successions}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label for="c-maxsuccessions" class="control-label col-xs-12 col-sm-2">{:__('Maxsuccessions')}:</label>
-        <div class="col-xs-12 col-sm-4">
-            <input id="c-maxsuccessions" data-rule="required" class="form-control" name="row[maxsuccessions]" type="number" value="{$row.maxsuccessions}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label for="c-prevtime" class="control-label col-xs-12 col-sm-2">{:__('Prevtime')}:</label>
-        <div class="col-xs-12 col-sm-4">
-            <input id="c-prevtime" data-rule="required" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[prevtime]" type="text" value="{$row.prevtime|datetime}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label for="c-logintime" class="control-label col-xs-12 col-sm-2">{:__('Logintime')}:</label>
-        <div class="col-xs-12 col-sm-4">
-            <input id="c-logintime" data-rule="required" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[logintime]" type="text" value="{$row.logintime|datetime}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label for="c-loginip" class="control-label col-xs-12 col-sm-2">{:__('Loginip')}:</label>
-        <div class="col-xs-12 col-sm-4">
-            <input id="c-loginip" data-rule="required" class="form-control" name="row[loginip]" type="text" value="{$row.loginip}">
-        </div>
-    </div>
-    <div class="form-group">
-        <label for="c-loginfailure" class="control-label col-xs-12 col-sm-2">{:__('Loginfailure')}:</label>
-        <div class="col-xs-12 col-sm-4">
-            <input id="c-loginfailure" data-rule="required" class="form-control" name="row[loginfailure]" type="number" value="{$row.loginfailure}">
+            <input id="c-nickname" data-rule="nickname" class="form-control" name="row[nickname]" type="text" value="{$row.nickname|htmlentities}">
         </div>
     </div>
+
     <div class="form-group">
-        <label for="c-joinip" class="control-label col-xs-12 col-sm-2">{:__('Joinip')}:</label>
-        <div class="col-xs-12 col-sm-4">
-            <input id="c-joinip" data-rule="required" class="form-control" name="row[joinip]" type="text" value="{$row.joinip}">
+        <label for="c-login_pwd" class="control-label col-xs-12 col-sm-2">{:__('Login pwd')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-login_pwd" class="form-control" name="row[login_pwd]" type="text" value="">
+            <a>{:__('Pwd title')}</a>
         </div>
     </div>
     <div class="form-group">
-        <label for="c-jointime" class="control-label col-xs-12 col-sm-2">{:__('Jointime')}:</label>
-        <div class="col-xs-12 col-sm-4">
-            <input id="c-jointime" data-rule="required" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[jointime]" type="text" value="{$row.jointime|datetime}">
+        <label for="c-fund_pwd" class="control-label col-xs-12 col-sm-2">{:__('Fund pwd')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-fund_pwd"  class="form-control" name="row[fund_pwd]" type="text" value="">
+            <a>{:__('Pwd title')}</a>
         </div>
     </div>
+
     <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
+        <label for="c-task_num" class="control-label col-xs-12 col-sm-2">{:__('Task num')}:</label>
         <div class="col-xs-12 col-sm-8">
-            {:build_radios('row[status]', ['normal'=>__('Normal'), 'hidden'=>__('Hidden')], $row['status'])}
+            <input id="c-task_num" data-rule="required" class="form-control" name="row[task_num]" type="number" value="{$row.task_num|htmlentities}">
         </div>
     </div>
+
+
     <div class="form-group layer-footer">
         <label class="control-label col-xs-12 col-sm-2"></label>
         <div class="col-xs-12 col-sm-8">
             <button type="submit" class="btn btn-primary btn-embossed disabled">{:__('OK')}</button>
             <button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
         </div>
-    </div>
+    </div></div>
 </form>

+ 12 - 12
public/assets/js/backend/user/user.js

@@ -20,25 +20,25 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
             // 初始化表格
             table.bootstrapTable({
                 url: $.fn.bootstrapTable.defaults.extend.index_url,
-                pk: 'id',
-                sortName: 'user.id',
+                pk: 'a.id',
+                sortName: 'a.id',
                 columns: [
                     [
                         {checkbox: true},
-                        {field: 'id', title: __('Id'), sortable: true},
+                        {field: 'id', title: __('Id'), operate: false},
 
-                        {field: 'id', title: __('Group_id')},
+                        {field: 'agent', title: __('Group_id'), operate: false},
                         {field: 'mobile', title: __('Mobile'), operate: 'LIKE'},
-                        {field: 'parent_id', title: __('Parent_id'), operate: 'BETWEEN', sortable: true},
-                        {field: 'balance', title: __('Balance'), operate: 'BETWEEN', sortable: true},
-                        {field: 'freeze', title: __('Freeze'), operate: 'BETWEEN', sortable: true},
-                        {field: 'task_num', title: __('Task'), formatter: Table.api.formatter.search},
+                        {field: 'parent_name', title: __('Parent_id'), operate: false},
+                        {field: 'balance', title: __('Balance'), operate: false},
+                        {field: 'freeze', title: __('Freeze'), operate: false},
+                        {field: 'task_num', title: __('Task'), operate: false},
 
-                        {field: 'id', title: __('Recharge'), operate: 'BETWEEN', sortable: true},
-                        {field: 'id', title: __('Withdrawal'), operate: 'BETWEEN', sortable: true},
-                        {field: 'id', title: __('Income'), operate: 'BETWEEN', sortable: true},
+                        {field: 'id', title: __('Recharge'), operate: false},
+                        {field: 'id', title: __('Withdrawal'), operate: false},
+                        {field: 'id', title: __('Income'), operate: false},
 
-                        {field: 'invitation_code', title: __('Invitation_code'), formatter: Table.api.formatter.search},
+                        {field: 'invitation_code', title: __('Invitation_code'), operate: false},
                         {field: 'is_agent', title: __('Is_agent'), searchList: {1: __('Yes'), 0: __('No')}, formatter: Table.api.formatter.status},
                         
                         {field: 'user_type', title: __('User_type'), formatter: Table.api.formatter.toggle,