由于后台会员 没有新增会员按钮 只有编辑按钮 下面来个开发案例

    /**
     * 单独添加会员
     */
    public function add()
    {
        if ($this->request->isPost()) {
            $params = $this->request->post("row/a");
            
            validate('\\app\\admin\\validate\\user\\User')->scene('add')->check($params);
            
            // 密码处理
            if (!empty($params['password'])) {
                $params['salt'] = get_random_str(10);
                $params['password'] = app('user')->hashPassword($params['password'], $params['salt']);
            } else {
                unset($params['password']);
            }
            
            // 会员分组(
            $accessGroup = [];
            if (!empty($params['group_id'])) {
                $accessGroup = explode(',', $params['group_id']);
                foreach ($accessGroup as $key => $value) {
                    $addAccess[] = ['group_id' => $value, 'user_id' => 1]; // 和edit完全一致的临时赋值
                }
            }
            
            // 生日处理
            $params['birthday'] = empty($params['birthday']) ? null : $params['birthday'];
            
            // 补充基础字段(
            $params['create_time'] = time();
            $params['update_time'] = time();

            Db::startTrans();
            try {
                // 插入用户
                $userModel = new \app\admin\model\user\User;
                $bl = $userModel->save($params);
                if ($bl === false) {
                    Db::rollback();
                    $this->error(lang('Operation failed'));
                }
                $userId = $userModel->id; // 获取新增用户ID
                
                // 分组关联处理
                if (!empty($accessGroup)) {
                    $addAccess = [];
                    foreach ($accessGroup as $key => $value) {
                        $addAccess[] = [
                            'group_id' => $value,
                            'user_id' => $userId,
                            'create_time' => time(),
                            'update_time' => time()
                        ];
                    }
                    // 先删除再新增
                    UserGroupAccess::where(['user_id' => $userId])->delete();
                    (new UserGroupAccess)->insertAll($addAccess);
                } else {
                    UserGroupAccess::where(['user_id' => $userId])->delete();
                }

                Db::commit();
            } catch (\Exception $e) {
                Db::rollback();
                $this->error($e->getMessage());
            }
            $this->success();
        }

        // 获取会员分组列表
        $groupList = UserGroup::where(['status'=>'normal'])->select()->toArray();
        return $this->view->fetch('', compact('groupList'));
    }
下面在会员中心的html加入 原本是  {:build_toolbar('refresh,adel')} 新增  {:build_toolbar('refresh,add,del')}
然后在        
新增为        
下面是add文件的完整版 <form role="form" action="" class="frm-operate" method="post">
    
       
           
                               
                    <input type="text" id="frm-group_id" class="form-control selectpage" name="row[group_id]"                             data-select-only="true" data-pagination="false" data-multiple="true"                             data-data="{:url('/user.user/getGroup')}">                
           
           
                               
                    <input type="text" class="form-control" id="frm-username" name="row[username]"                             placeholder="用户名" data-rule="required;length(3~16)">                
           
           
                               
                    <input type="text" class="form-control" id="frm-nickname" name="row[nickname]"                             placeholder="昵称" data-rule="required;length(2~16)">                
           
           
                               
                    <input type="password" class="form-control" id="frm-password" name="row[password]"                             placeholder="密码" data-rule="required;length(6~16)">                
           
           
                               
                    <input type="text" class="form-control" id="frm-mobile" name="row[mobile]"                             placeholder="手机号" data-rule="mobile">                
           
           
                               
                    <input type="text" class="form-control" id="frm-email" name="row[email]"                             placeholder="邮箱" data-rule="email">                
           
           
                               
                    <input type="number" class="form-control" id="frm-money" name="row[money]" value="0" min="0">                
           
           
                               
                    <input type="number" class="form-control" id="frm-score" name="row[score]" value="0" min="0">                
           
           
                               
                    <select name="row[gender]" class="form-control">                                                                                             </select>                
           
           
                               
                    <input type="text" class="form-control laydate" id="frm-birthday" name="row[birthday]">                
           
           
                               
                    <textarea class="form-control" id="frm-remark" name="row[remark]" rows="3" placeholder="备注"></textarea>                
           
           
                               
                    {:build_radios('row[status]',['normal'=>'启用','hidden'=>'禁用'], 'normal')}                
           
       
           
</form> {block:script} [removed]     require(['admin','form'], function (undefined,Form) {         Form.api.init();     }) [removed] {/block:script}

上面即可实现新增会员功能 ,如果觉得麻烦 可以替换我下面的所有功能 如果你二开了 建议按上面方法来  替换user.php

<?php
// +----------------------------------------------------------------------
// | HkCms
// +----------------------------------------------------------------------
// | Copyright (c) 2020-2021 http://www.hkcms.cn, All rights reserved.
// +----------------------------------------------------------------------
// | Author: 广州恒企教育科技有限公司 
// +----------------------------------------------------------------------
declare (strict_types=1);


namespace app\admin\controller\user;

use app\admin\controller\BaseController;
use app\admin\model\user\UserGroup;
use app\admin\model\user\UserGroupAccess;
use libs\Tree;
use think\facade\Db;

class User extends BaseController
{
    /**
     * 用户模型
     * @var \app\admin\model\user\User
     */
    protected $model;

    /**
     * 控制器中间件
     * @var array
     */
    protected $middleware = [
        'login',
        'auth'=>['except'=>'getGroup']
    ];

    /**
     * 是否开启Validate验证
     * @var bool
     */
    protected $enableValidate = true;

    public function initialize()
    {
        parent::initialize();

        $this->model = new \app\admin\model\user\User;
    }

    public function index()
    {
        if ($this->request->isAjax()) {
            if ($this->request->param('searchTable')) {
                return $this->selectPage(); // 判断请求。如果是动态下拉组件请求,则交接给selectPage方法
            }

            list($map, $limit, $offset, $order, $sort) = $this->buildparams();

            $data = $this->model->where($map)->order($sort, $order)->limit($offset, $limit)->select()->toArray();
            $total = $this->model->where($map)->order($sort, $order)->count();
            foreach ($data as &$value) {
                $value['group_names'] = \app\index\library\User::instance()->getGroupField($value['id']);
            }
            return json(['total' => $total, 'rows' => $data]);
        }
        return $this->view->fetch();
    }
    /**
     * 单独添加会员
     */
    public function add()
    {
        if ($this->request->isPost()) {
            $params = $this->request->post("row/a");
            
            validate('\\app\\admin\\validate\\user\\User')->scene('add')->check($params);
            
            // 密码处理
            if (!empty($params['password'])) {
                $params['salt'] = get_random_str(10);
                $params['password'] = app('user')->hashPassword($params['password'], $params['salt']);
            } else {
                unset($params['password']);
            }
            
            // 会员分组(
            $accessGroup = [];
            if (!empty($params['group_id'])) {
                $accessGroup = explode(',', $params['group_id']);
                foreach ($accessGroup as $key => $value) {
                    $addAccess[] = ['group_id' => $value, 'user_id' => 1]; // 和edit完全一致的临时赋值
                }
            }
            
            // 生日处理
            $params['birthday'] = empty($params['birthday']) ? null : $params['birthday'];
            
            // 补充基础字段(
            $params['create_time'] = time();
            $params['update_time'] = time();

            Db::startTrans();
            try {
                // 插入用户
                $userModel = new \app\admin\model\user\User;
                $bl = $userModel->save($params);
                if ($bl === false) {
                    Db::rollback();
                    $this->error(lang('Operation failed'));
                }
                $userId = $userModel->id; // 获取新增用户ID
                
                // 分组关联处理
                if (!empty($accessGroup)) {
                    $addAccess = [];
                    foreach ($accessGroup as $key => $value) {
                        $addAccess[] = [
                            'group_id' => $value,
                            'user_id' => $userId,
                            'create_time' => time(),
                            'update_time' => time()
                        ];
                    }
                    // 先删除再新增
                    UserGroupAccess::where(['user_id' => $userId])->delete();
                    (new UserGroupAccess)->insertAll($addAccess);
                } else {
                    UserGroupAccess::where(['user_id' => $userId])->delete();
                }

                Db::commit();
            } catch (\Exception $e) {
                Db::rollback();
                $this->error($e->getMessage());
            }
            $this->success();
        }

        // 获取会员分组列表
        $groupList = UserGroup::where(['status'=>'normal'])->select()->toArray();
        return $this->view->fetch('', compact('groupList'));
    }
    public function edit($id = null)
    {
        $row = $this->model->find($id);
        if (!$row) {
            $this->error(lang('Record does not exist'));
        }

        if ($this->request->isPost()) {
            $params = $this->request->post("row/a");
            validate('\\app\\admin\\validate\\user\\User')->scene('edit')->check($params);
            // 密码处理
            if (!empty($params['password'])) {
                $params['salt'] = get_random_str(10);
                $params['password'] = app('user')->hashPassword($params['password'], $params['salt']);
            } else {
                unset($params['password']);
            }
            // 会员分组
            if (!empty($params['group_id'])) {
                $accessGroup = explode(',', $params['group_id']);
                foreach ($accessGroup as $key => $value) {
                    $addAccess[] = ['group_id' => $value, 'user_id' => 1];
                }
            }
            $params['birthday'] = empty($params['birthday']) ? null : $params['birthday'];
            Db::startTrans();
            try {
                $bl = $row->save($params);
                if ($bl === false) {
                    Db::rollback();
                    $this->error(lang('Operation failed'));
                }
                if (!empty($accessGroup)) {
                    $addAccess = [];
                    $userId = $row->id;
                    foreach ($accessGroup as $key => $value) {
                        $addAccess[] = ['group_id' => $value, 'user_id' => $userId, 'create_time' => time(), 'update_time' => time()];
                    }
                    UserGroupAccess::where(['user_id' => $userId])->delete();
                    (new UserGroupAccess)->insertAll($addAccess);
                } else {
                    UserGroupAccess::where(['user_id' => $row->id])->delete();
                }

                Db::commit();
            } catch (\Exception $e) {
                Db::rollback();
                $this->error($e->getMessage());
            }
            $this->success();
        }
        $row = $row->getOrigin();
        $row['group_id'] = implode(',', UserGroupAccess::where(['user_id' => $row['id']])->column('group_id'));
        return $this->view->fetch('', compact('row'));
    }

    /**
     * 获取会员分组
     */
    public function getGroup()
    {
        // 第一次加载搜索
        $searchValue = $this->request->param('searchValue');
        $map = [];
        if (!empty($searchValue)) {
            $map[] = ['id','in',$searchValue];
        }

        // 获取拥有的角色组ID
        $data = UserGroup::where(['status'=>'normal'])->where($map)->select()->toArray();
        if (empty($data)) {
            return json(['total'=>0,'rows'=>[]]);
        }
        $arr = Tree::instance()->getTreeList(Tree::instance()->init($data)->getTreeArray($data[0]['parent_id']),'name');
        return json(['total'=>count($arr),'rows'=>$arr]);
    }
}

替换index.html

   
       
            <form action="" method="get" class="frm-filter">                
                   
                       
                                                        <input type="text" class="form-control" name="nickname" placeholder="" data-op="like %...%">                        
                   
                   
                       
                                                        <input type="text" class="form-control" name="username" placeholder="{:lang("Username")}" data-op="like %...%">                        
                   
                   
                       
                                                        <input type="email" class="form-control" name="email" placeholder="" data-op="like %...%">                        
                   
                   
                       
                                                        <input type="text" class="form-control" name="mobile" placeholder="" data-op="like %...%">                        
                   
                   
                       
                                                        <input type="text"                                    class="form-control laydate"                                    id="frm-publish_time"                                    name="logintime"                                    data-type="datetime"                                    data-range="true"                                    data-op="BETWEEN TIME"                                    autocomplete="off"                                    placeholder="{:lang("Login time")}">                        
                   
                   
                       
                            <input type="submit" class="btn btn-primary" value="{:lang('Search')}">                             <input type="reset" class="btn btn-default ml-2" value="{:lang('Reset')}">                        
                   
               
            </form>        
       
            会员中心             {:build_toolbar('refresh,add,del')}                          {if (has_rule('batches'))}                         {/if}        
                
   
{block:script} [removed]     require(['admin','table'], function (undefined,cmsTable) {         $(function () {             cmsTable.init({                 url: "{:url('/user.User/index')}",                 search: false,                 escape: false,                 sortName:'update_time',                 customFilter: true,                 columns: [{                     field: 'state',                     checkbox: true,                 },{                     field: 'id',                     title: 'ID'                 },{                     field: 'group_names',                     title: '{:lang("Member group")}'                 },{                     field: 'username',                     title: '{:lang("Username")}',                 },{                     field: 'nickname',                     title: '{:lang("Nickname")}',                 },{                     field: 'email',                     title: '{:lang("Email")}',                 },{                     field: 'mobile',                     title: '{:lang("Mobile")}',                 },{                     field: 'money',                     title: '{:lang("Money")}',                 },{                     field: 'score',                     title: '{:lang("Score")}',                 },{                     field: 'level',                     title: '{:lang("Level")}',                     visible: false                 },{                     field: 'exp',                     title: '{:lang("Exp")}',                     visible: false                 },{                     field: 'avatar',                     title: '{:lang("Avatar")}',                     formatter: cmsTable.formatter.image                 },{                     field: 'gender',                     title: '{:lang("Gender")}',                     formatter: function (value, row) {                         if (value==1) {                             return lang('男');                         } else if (value==2) {                             return lang('女');                         } else {                             return lang('保密');                         }                     }                 },{                     field: 'birthday',                     title: '{:lang("Birthday")}',                     visible: false                 },{                     field: 'introduction',                     title: '{:lang("Introduction")}',                     visible: false                 },{                     field: 'latest_time',                     title: '{:lang("Latest time")}',                     visible: false                 },{                     field: 'login_time',                     title: '{:lang("Login time")}',                 },{                     field: 'login_ip',                     title: '{:lang("Login ip")}',                     visible: false                 },{                     field: 'status',                     title: '{:lang("Status")}',                     formatter: cmsTable.formatter.switchBtn,                     events: cmsTable.events.switchBtn                 },{                     field: 'remark',                     title: '{:lang("Remark")}',                 },{                     field: 'create_time',                     title: '{:lang("Create time")}'                 },{                     field: 'update_time',                     title: '{:lang("Update time")}',                     visible: false                 },{                     field: 'operate',                     title: '{:lang("Operate")}',                     formatter: cmsTable.formatter.operate,                     events: cmsTable.events.operate                 }]});         })     }) [removed] {/block:script}

新增add.html

<form role="form" action="" class="frm-operate" method="post">
    
       
           
                               
                    <input type="text" id="frm-group_id" class="form-control selectpage" name="row[group_id]"                             data-select-only="true" data-pagination="false" data-multiple="true"                             data-data="{:url('/user.user/getGroup')}">                
           
           
                               
                    <input type="text" class="form-control" id="frm-username" name="row[username]"                             placeholder="用户名" data-rule="required;length(3~16)">                
           
           
                               
                    <input type="text" class="form-control" id="frm-nickname" name="row[nickname]"                             placeholder="昵称" data-rule="required;length(2~16)">                
           
           
                               
                    <input type="password" class="form-control" id="frm-password" name="row[password]"                             placeholder="密码" data-rule="required;length(6~16)">                
           
           
                               
                    <input type="text" class="form-control" id="frm-mobile" name="row[mobile]"                             placeholder="手机号" data-rule="mobile">                
           
           
                               
                    <input type="text" class="form-control" id="frm-email" name="row[email]"                             placeholder="邮箱" data-rule="email">                
           
           
                               
                    <input type="number" class="form-control" id="frm-money" name="row[money]" value="0" min="0">                
           
           
                               
                    <input type="number" class="form-control" id="frm-score" name="row[score]" value="0" min="0">                
           
           
                               
                    <select name="row[gender]" class="form-control">                                                                                             </select>                
           
           
                               
                    <input type="text" class="form-control laydate" id="frm-birthday" name="row[birthday]">                
           
           
                               
                    <textarea class="form-control" id="frm-remark" name="row[remark]" rows="3" placeholder="备注"></textarea>                
           
           
                               
                    {:build_radios('row[status]',['normal'=>'启用','hidden'=>'禁用'], 'normal')}                
           
       
           
</form> {block:script} [removed]     require(['admin','form'], function (undefined,Form) {         Form.api.init();     }) [removed] {/block:script}

有个问题 本人不喜欢多语音 所以新增add并没有加入多语音 有需要多语音你们自己改下add.html就行