diff --git a/config/define.php b/config/define.php index 92e4191..bca9956 100644 --- a/config/define.php +++ b/config/define.php @@ -20,6 +20,15 @@ define('JWT_KEY', 'a59d36be11e345a8fcb246c259e55baf'); // md5('kuaile_knowledge') define('CALLBACK_KNOWLEDGE_LOGIN', 'knowledge_login'); + define('CALLBACK_KNOWLEDGE_BIND', 'knowledge_bind'); + define('CALLBACK_KNOWLEDGE_LOGIN_REDIRECT', "http://www.yizherenxin.cn/callback/wxlogin"); + define('_RC_KNOWLEDGE_BIND_USER_INFO', "bind_user_info_%s_%s"); + + define('ADMIN_USER_NOT_SUPER', 0); + define('ADMIN_USER_IS_SUPER', 1); + + define('ADMIN_USER_OPEN', 1); + define('ADMIN_USER_CLOSE', 2); define('WEIXIN_OPEN_APPID','wx68a1060c4ec4722f'); define('WEIXIN_OPEN_APPSCRET','9f8a1dd8352e1150a40ebf3262429f69'); diff --git a/control/callback.php b/control/callback.php index cd25f47..27fbfa5 100644 --- a/control/callback.php +++ b/control/callback.php @@ -11,6 +11,8 @@ class callback extends publicBase { if (empty($this->get('code'))) $this->show_message('登录失败,请重新登录', 'goback'); $state = explode('-', $this->get('state')); + + //知识库登陆 if ($state[0] == CALLBACK_KNOWLEDGE_LOGIN) { $obj = new mManage(); $res = $obj->weixinLogin($this->get('code'), $this->get('state')); @@ -25,6 +27,19 @@ class callback extends publicBase { header('Location:' . urldecode($state[1])); exit; } + + //知识库绑定 + if ($state[0] == CALLBACK_KNOWLEDGE_BIND) { + $obj = new mManage(); + $sub_user_id = $obj->weixinBind($this->get('code'), $this->get('state')); + if (!$sub_user_id) $this->show_message($obj->getError(), 'goback'); + + $obj = new mUser(); + $rdobj = $obj->initRedis(); + $rdobj->setex(sprintf(_RC_KNOWLEDGE_BIND_USER_INFO, $state[1], $state[2]), 6*60*60, $sub_user_id); + //header('Location:http://zhishiku.yizherenxin.cn/index/bind_user?pageid='.$state[2]); + exit; + } exit; } } diff --git a/control/index.php b/control/index.php index ce00d26..ba84d1d 100644 --- a/control/index.php +++ b/control/index.php @@ -11,7 +11,11 @@ class index extends publicBase { $this->login(); } - public function login() {} + public function login() { + $this->view['appid'] = WEIXIN_OPEN_APPID; + $this->view['redirect_uri'] = urlencode(CALLBACK_KNOWLEDGE_LOGIN_REDIRECT); + $this->view['state'] = CALLBACK_KNOWLEDGE_LOGIN . "-" . $this->get('url'); + } public function loginout() { session_start(); @@ -24,32 +28,74 @@ class index extends publicBase { public function user_list() { $user_info = $this->get_user_info(); - if (!$user_info['is_super_admin']) $this->show_message('您没有权限', 'goback'); + if (!$user_info['is_super_admin']) $this->show_message(false, '您还有此权限'); + + $obj = new mUser(); + $pageid = $obj->genPasswd(16); + + $this->view['pageid'] = $pageid; + $this->view['appid'] = WEIXIN_OPEN_APPID; + $this->view['redirect_uri'] = urlencode(CALLBACK_KNOWLEDGE_LOGIN_REDIRECT); + $this->view['state'] = CALLBACK_KNOWLEDGE_BIND . "-" . $user_info['aid'] . "-" . $pageid; + } + + public function ajax_user_list() { + $user_info = $this->get_user_info(); + if (!$user_info['is_super_admin']) $this->ajax_json(false, '您还有此权限'); + + $condition = array('is_super_admin' => ADMIN_USER_NOT_SUPER); + $cur_page = $this->post('currentPage') ? $this->post('currentPage') : 1; + $page_size = $this->post('pageSize') ? $this->post('pageSize') : 20; $uobj = new mUser(); - $this->view['user_list'] = $uobj->getAdminUserList(); - $this->view['login_list'] = $uobj->getLoginUserList(); + $total = $uobj->getAdminUserTotal($condition); + $user_list = $uobj->getAdminUserList($condition, $cur_page, $page_size); + + $rdata = array( + 'total' => $total, + 'per_page' => $page_size, + 'last_page' => ceil($total / $page_size), + 'cur_page' => $cur_page, + 'list' => $user_list, + ); + + $this->ajax_json(true, '获取成功', $rdata); } - public function ajax_change_user_status() { + public function ajax_change_user() { + $user_info = $this->get_user_info(); + if (!$user_info['is_super_admin']) $this->ajax_json(false, '您还有此权限'); + $id = $this->post('id') + 0; $status = $this->post('status') + 0; + $realname = trim($this->post('realname')); + + $data = array(); + if ($status > 0) $data['status'] = $status; + if (!empty($realname)) $data['realname'] = $realname; $uobj = new mUser(); - $res = $uobj->updateAdminUser($id, array('status' => $status)); + $res = $uobj->updateAdminUser($id, $data); if (!$res) $this->ajax_json(false, '设置失败'); $this->ajax_json(true, '设置成功'); } - public function ajax_pass_user() { - $id = $this->post('id') + 0; - $aid = 1; //当前默认aid为1 + public function ajax_get_user_login() { + $user_info = $this->get_user_info(); + if (!$user_info['is_super_admin']) $this->ajax_json(false, '您还有此权限'); + + $pageid = trim($this->post('pageid')); $uobj = new mUser(); - $res = $uobj->passLoginUser($id, $aid); - if (!$res) $this->ajax_json(false, $uobj->getError()); + $rdobj = $uobj->initRedis(); + $sub_user_id = $rdobj->get(sprintf(_RC_KNOWLEDGE_BIND_USER_INFO, $user_info['aid'], $pageid)); + $sub_user_id = 70; + if (!$sub_user_id) $this->ajax_json(false, '还未扫码'); - $this->ajax_json(true, '设置成功'); + $bind_user_info = $uobj->getAdminUserById($sub_user_id); + if (!$bind_user_info) $this->ajax_json(false, '未知错误'); + + $this->ajax_json(true, '扫码成功', $bind_user_info); } } diff --git a/data/dUser.php b/data/dUser.php index 0ec63ef..8b074d7 100644 --- a/data/dUser.php +++ b/data/dUser.php @@ -7,16 +7,9 @@ include_once SERVER_ROOT . '/data/dBase.php'; class dUser extends dBase { protected $fieldlist = array( - 'login_user_list' => array( - 'id', - 'nickname', - 'openid', - 'addtime', - ), 'admin_user_list' => array( 'id', 'aid', - 'uid', 'nickname', 'realname', 'openid', @@ -27,8 +20,7 @@ dUser extends dBase { ); protected $primary_keys = array( - 'login_user_list' => 'id', - 'admin_user_list' => 'uid', + 'admin_user_list' => 'id', ); } diff --git a/model/mManage.php b/model/mManage.php index d883120..fb02930 100644 --- a/model/mManage.php +++ b/model/mManage.php @@ -42,15 +42,7 @@ class mManage extends mBase { $uobj = new mUser(); $agent_login_info = $uobj->getAdminUserByOpenid($res['openid']); if (empty($agent_login_info)) { - $login_user_info = $uobj->getLoginUserByOpenid($res['openid']); - if (empty($login_user_info)) $login_user_info = $uobj->addLoginUser(array('openid' => $userinfo['openid'], 'nickname' => $userinfo['nickname'])); - - if (empty($login_user_info)) { - $this->setError("注册失败"); - return false; - } - - $this->setError("请联系管理员开启账号"); + $this->setError("账号不存在"); return false; } @@ -83,4 +75,61 @@ class mManage extends mBase { } return $jwttoken; } + + public function weixinBind($code, $state) { + if (empty($code)) { + $this->setError("缺少回调参数code"); + return false; + } + + if (empty($state)) { + $this->setError("缺少回调参数state"); + return false; + } + + // 获取access token + $wxopenobj = new mWeixinOpen(); + $res = $wxopenobj->getAccessToken($code); + if (!$res) { + $this->setError($wxopenobj->getError()); + return false; + } + + // 获取扫码登录用户信息 + $userinfo = $wxopenobj->getUserInfo($res['access_token'], $res['openid']); + if (!$userinfo) { + $this->setError($wxopenobj->getError()); + return false; + } + + $aid = explode('-', $state)[1]; + + $uobj = new mUser(); + $admin_user_info = $uobj->getAdminUserByOpenid($res['openid']); + if (!empty($admin_user_info) && $admin_user_info['aid'] == $aid) { + $this->setError("账号已存在"); + return false; + } + + if (!empty($admin_user_info)) { + $uobj->updateAdminUser($admin_user_info['id'], array('aid' => $aid)); + return true; + } + + $data = array( + 'aid' => $aid, + 'nickname' => $userinfo['nickname'], + 'openid' => $userinfo['openid'], + 'is_super_admin' => ADMIN_USER_NOT_SUPER, + 'status' => ADMIN_USER_OPEN, + ); + + $id = $uobj->addAdminUser($data); + if (!$id) { + $this->setError("绑定失败"); + return false; + } + + return $id; + } } \ No newline at end of file diff --git a/model/mUser.php b/model/mUser.php index ae459d5..40fca34 100644 --- a/model/mUser.php +++ b/model/mUser.php @@ -9,74 +9,59 @@ class mUser extends mBase { private $obj; private $tbl; - private $login_tbl; public function __construct() { $this->obj = new dUser(); $this->tbl = 'admin_user_list'; - $this->login_tbl = 'login_user_list'; } - public function getAdminUserByOpenid($openid) { - return $this->obj->select($this->tbl, array('sql' => '`openid`=?', 'vals' => array($openid))); + public function getAdminUserById($id) { + return $this->obj->select($this->tbl, array('sql' => '`id`=?', 'vals' => array($id))); } - public function getAdminUserList() { - return $this->obj->selectAll($this->tbl, array(), 'id desc '); + public function getAdminUserByOpenid($openid) { + return $this->obj->select($this->tbl, array('sql' => '`openid`=?', 'vals' => array($openid))); } - public function updateAdminUser($id, $data) { - return $this->obj->update($this->tbl, $data, array('sql' => '`id`=?', 'vals' => array($id))); - } + public function getAdminUserList($condition, $page_num, $page_size) { + $offset = ($page_num - 1) * $page_size; + + $where = "1=1 "; + if (!empty($condition)) { + foreach ($condition as $key => $val) { + if (is_array($val)) { + $val = implode(',', $val); + $where .= " and {$key} in ({$val})"; + } else { + $where .= " and {$key}={$val}"; + } + } + } - public function getLoginUserByOpenid($openid) { - return $this->obj->select($this->login_tbl, array('sql' => '`openid`=?', 'vals' => array($openid))); + return $this->obj->selectAll($this->tbl, array('sql' => $where, 'vals' => array()), 'id desc', array($offset, $page_size)); } - public function getLoginUserById($id) { - return $this->obj->select($this->login_tbl, array('sql' => '`id`=?', 'vals' => array($id))); - } + public function getAdminUserTotal($condition) { + $where = "1=1 "; + if (!empty($condition)) { + foreach ($condition as $key => $val) { + if (is_array($val)) { + $val = implode(',', $val); + $where .= " and {$key} in ({$val})"; + } else { + $where .= " and {$key}={$val}"; + } + } + } - public function addLoginUser($data) { - return $this->obj->insert($this->login_tbl, $data); + return $this->obj->count($this->tbl, array('sql' => $where, 'vals' => array())); } - public function getLoginUserList() { - return $this->obj->selectAll($this->login_tbl, array(), 'id desc ', array(0, 10)); + public function updateAdminUser($id, $data) { + return $this->obj->update($this->tbl, $data, array('sql' => '`id`=?', 'vals' => array($id))); } - public function passLoginUser($id, $aid) { - $login_user = $this->getLoginUserById($id); - if (empty($login_user)) { - $this->setError('用户不存在'); - return false; - } - - $admin_user = $this->getAdminUserByOpenid($login_user['openid']); - if (!empty($admin_user)) { - $this->setError('审核员已存在'); - return false; - } - - $data = array( - 'aid' => $aid, - 'nickname' => $login_user['nickname'], - 'openid' => $login_user['openid'], - 'status' => 1, - ); - - $res = $this->obj->insert($this->tbl, $data); - if (!$res) { - $this->setError('添加失败'); - return false; - } - - $res = $this->obj->delete($this->login_tbl, array('sql' => 'id=?', 'vals' => array($id))); - if (!$res) { - $this->setError('删除申请失败'); - return false; - } - - return true; + public function addAdminUser($data) { + return $this->obj->insert($this->tbl, $data); } } \ No newline at end of file diff --git a/view/css/common.css b/view/css/common.css index 8950fe5..da86bd0 100644 --- a/view/css/common.css +++ b/view/css/common.css @@ -38,6 +38,81 @@ p{ justify-content: center; } +/* 头部 */ +.home-page { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; +} + +.header-wrap { + /* position: absolute; + left: 0px; + top: 0px; */ + width: calc(100% - 64px); + height: 46px; + /* 自动布局 */ + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + padding: 8px 32px; + display: flex; + justify-content: space-between; + background: linear-gradient(270deg, #4EA4F3 0%, #3D85EA 100%); +} + +.home-logo { + width: 168px; +} + +/* Dropdown 容器 */ +.dropdown { + position: relative; + display: inline-block; +} + +/* Dropdown 按钮 */ +.dropdown-toggle { + background-color: transparent; + padding: 10px 20px; + border: none; + cursor: pointer; + display: flex; + align-items: center; + gap: 8px; + color: #fff; +} + +/* Dropdown 面板 */ +.dropdown-panel { + display: none; + position: absolute; + right: 20px; + padding: 12px; + background-color: #fff; + min-width: 160px; + border-radius: 4px; + box-shadow: 0px 3px 8px 0px rgba(0, 0, 0, 0.16); + z-index: 1; +} + +/* Dropdown 面板中的链接 */ +.dropdown-panel a { + color: black; + border-radius: 2px; + padding: 7px 10px; + background: #F6F7FA; + text-decoration: none; + display: block; +} + +/* Dropdown 面板中的链接悬停效果 */ +.dropdown-panel a:hover { + background-color: #f1f1f1; +} + /* 底部 */ .leftSideFooterNew{ display: flex; @@ -173,4 +248,4 @@ button:hover { background: #cc0303; color: #FFFFFF; border: none; -} +} \ No newline at end of file diff --git a/view/css/index.css b/view/css/index.css index f45a6e5..d77a14a 100644 --- a/view/css/index.css +++ b/view/css/index.css @@ -116,81 +116,6 @@ border-radius: 4px; } - -.home-page { - width: 100%; - height: 100%; - display: flex; - flex-direction: column; -} - -.header-wrap { - /* position: absolute; - left: 0px; - top: 0px; */ - width: calc(100% - 64px); - height: 46px; - /* 自动布局 */ - display: flex; - flex-direction: row; - justify-content: space-between; - align-items: center; - padding: 8px 32px; - display: flex; - justify-content: space-between; - background: linear-gradient(270deg, #4EA4F3 0%, #3D85EA 100%); -} - -.home-logo { - width: 168px; -} - -/* Dropdown 容器 */ -.dropdown { - position: relative; - display: inline-block; -} - -/* Dropdown 按钮 */ -.dropdown-toggle { - background-color: transparent; - padding: 10px 20px; - border: none; - cursor: pointer; - display: flex; - align-items: center; - gap: 8px; - color: #fff; -} - -/* Dropdown 面板 */ -.dropdown-panel { - display: none; - position: absolute; - right: 20px; - padding: 12px; - background-color: #fff; - min-width: 160px; - border-radius: 4px; - box-shadow: 0px 3px 8px 0px rgba(0, 0, 0, 0.16); - z-index: 1; -} - -/* Dropdown 面板中的链接 */ -.dropdown-panel a { - color: black; - border-radius: 2px; - padding: 7px 10px; - background: #F6F7FA; - text-decoration: none; - display: block; -} - -/* Dropdown 面板中的链接悬停效果 */ -.dropdown-panel a:hover { - background-color: #f1f1f1; -} - /* 图标旋转效果 */ .icon { transition: transform 0.3s ease; diff --git a/view/css/subCount.css b/view/css/subCount.css index 9712c32..1734dca 100644 --- a/view/css/subCount.css +++ b/view/css/subCount.css @@ -223,7 +223,7 @@ input:checked+.slider:before { width: calc(544px - 156px); padding: 32px 78px; max-height: 650px; - overflow-y: auto; + /*overflow-y: auto;*/ background: #fff; border-radius: 6px; opacity: 1; @@ -243,6 +243,7 @@ input:checked+.slider:before { } .temImg{ width: 220px; + height: 220px; margin: 24px auto 12px; display: flex; justify-content: center; diff --git a/view/js/subCount.js b/view/js/subCount.js index 78aff5c..4022c53 100644 --- a/view/js/subCount.js +++ b/view/js/subCount.js @@ -1,65 +1,9 @@ $(document).ready(function () { var status = 0; var currentPage = 1; // 定义变量,用于存储当前的页码 - var pageSize = 1; // 定义变量,用于存储当前页条数 - var totalPages = 9; - var pageData = [ - - { - alias:'哈哈1', - name:'qq哎111', - date:'2025-03-04 05:59:59', - status:1 - }, - { - alias:'哈哈2', - name:'qq哎222', - date:'2025-03-04 05:59:59', - status:1 - }, - { - alias:'哈哈3', - name:'qq哎333', - date:'2025-03-04 05:59:59', - status:0 - }, - { - alias:'哈哈4', - name:'qq哎', - date:'2025-03-04 05:59:59', - status:0 - }, - { - alias:'哈哈5', - name:'qq哎', - date:'2025-03-04 05:59:59', - status:1 - }, - { - alias:'哈哈6', - name:'qq哎', - date:'2025-03-04 05:59:59', - status:0 - }, - { - alias:'哈哈7', - name:'qq哎', - date:'2025-03-04 05:59:59', - status:1 - }, - { - alias:'哈哈8', - name:'qq哎', - date:'2025-03-04 05:59:59', - status:0 - }, - { - alias:'哈哈9', - name:'qq哎999', - date:'2025-03-04 05:59:59', - status:1 - }, - ] + var pageSize = 20; // 定义变量,用于存储当前页条数 + var totalPages = 0; + var pageData = [] // 渲染分页按钮 function renderPagination() { const pageNumbers = $('#page-numbers'); @@ -118,42 +62,38 @@ $(document).ready(function () { getRenderData(); function getRenderData(){ - // $.ajax({ - // type: "post", - // dataType: 'json', - // url: 'http://zhishiku.yizherenxin.cn/weibo/ajax_weibo_list', - // data: { - // status, - // currentPage, - // pageSize - // }, - // success: function (res) { - // if(!res.status){ - // alert(`请求失败`); - // } - - // renderData(res.data) - // } - // }) - var data = JSON.parse(JSON.stringify(pageData)) - renderData(data.slice(currentPage-1,currentPage+1 )) + $.ajax({ + type: "post", + dataType: 'json', + url: '/index/ajax_user_list', + data: { + currentPage, + pageSize + }, + success: function (res) { + if(!res.status){ + alert(`请求失败`); + } + + renderData(res.data) + } + }) } - function renderData(pageData){ - console.log(pageData,'====data'); + function renderData(data){ + totalPages = data.last_page; + var pageData = data.list $('#tbody-wrap').empty() renderList() var html = ''; - pageData.forEach((item,index)=>{ - html += ` - ${item.alias} - ${item.name} - - ${item.date} - + pageData.forEach((item)=>{ + html += ` + ${item.nickname} + ${item.realname} + ${item.addtime} @@ -313,8 +253,25 @@ function renderList() { $('#confirmBtn').click(function () { const newValue = $('#editInput').val(); if (newValue && currentRow) { - currentRow.find('td').eq(0).text(newValue); - $('#editPopover').hide(); + const id = currentRow.data('id'); + const realname = newValue; + $.ajax({ + type: "post", + dataType: 'json', + url: '/index/ajax_change_user', + data: { + id, + realname + }, + success: function (res) { + if(!res.status){ + alert(`请求失败`); + } + + currentRow.find('td').eq(1).text(newValue); + $('#editPopover').hide(); + } + }) } }); @@ -323,24 +280,86 @@ function renderList() { $('#editPopover').hide(); }); - // Switch 开关切换 - $('.switch input').change(function () { - const row = $(this).closest('tr'); - const isChecked = $(this).is(':checked'); - const status = isChecked ? 'Active' : 'Inactive'; - row.find('td').eq(2).text(status); // 更新状态列 - }); + //Switch 开关切换 + $('#tbody-wrap').on('change','.switch input',function () { + // row.find('td').eq(2).text(status); // 更新状态列 + const that = $(this); + const row = that.closest('tr'); + const isChecked = that.is(':checked'); - $('.addNewBtn').click(function () { + const id = row.data('id'); + const status = isChecked ? '1' : '2'; + $.ajax({ + type: "post", + dataType: 'json', + url: '/index/ajax_change_user', + data: { + id, + status + }, + success: function (res) { + if(!res.status){ + alert(res.info); + if(isChecked){ + that.prop('checked', false) + }else{ + that.prop('checked', true) + } + } + } + }) + }); + + + function listenLogin() { + const pageid = $('#pageid').val(); + $.ajax({ + type: "post", + dataType: 'json', + url: '/index/ajax_get_user_login', + data: { + pageid + }, + success: function (res) { + if(res.status){ + $('#bind_id').val(res.data.id); + $('.scanSuccessText').html(res.data.nickname + ',扫码成功'); + $('.scanSuccess').removeClass('hide'); + }else{ + setTimeout(listenLogin,3000) + } + } + }) + } + + $('.addNewBtn').click(function () { $('.addChildNumWrap, .modal-overlay').fadeIn(); - // setTimeout(()=>{ - // $('.addChildNumWrap, .modal-overlay').fadeOut(); - // },3000) + setTimeout(listenLogin,3000) }); $('.cancelBtn').click(function(){ $('.addChildNumWrap, .modal-overlay').fadeOut(); + if(!$('.scanSuccess').hasClass('hide')){ + setTimeout(function (){ window.location.reload();},1000) + } }) $('.confirmBtn').click(function(){ - $('.addChildNumWrap, .modal-overlay').fadeOut(); + const id = $('#bind_id').val(); + const realname = $('#bind_realname').val(); + $.ajax({ + type: "post", + dataType: 'json', + url: '/index/ajax_change_user', + data: { + id, + realname + }, + success: function (res) { + if(!res.status){ + alert(res.info); + } + $('.addChildNumWrap, .modal-overlay').fadeOut(); + setTimeout(function (){ window.location.reload();},1000) + } + }) }) }) \ No newline at end of file diff --git a/view/templates/include/header.html b/view/templates/include/header.html index 67666ce..d913ad6 100644 --- a/view/templates/include/header.html +++ b/view/templates/include/header.html @@ -9,7 +9,7 @@ diff --git a/view/templates/index/login.html b/view/templates/index/login.html index 17ae798..3a92093 100644 --- a/view/templates/index/login.html +++ b/view/templates/index/login.html @@ -93,16 +93,15 @@ 私有云知识库 -
{$smarty.get.url}
{literal} - - - - - - -
- {include file="include/header.html"} -
-
-
- 子账号管理 - -
- - - - - - - - - - - -
账号昵称姓名添加时间启用状态
- -
-
- 备注 - -
-
- - -
- -
- - - - -
-
- - -
-

新增子账号

-
{$smarty.get.url}
- - -
- - {$_user_info.nickname},扫码成功 -
-

- - 微信扫码,绑定子账号 -

-
-
- - 姓名 -
- -
-
- - -
-
- -
- - - - \ No newline at end of file diff --git a/view/templates/index/user_list.html b/view/templates/index/user_list.html index d114313..295296a 100644 --- a/view/templates/index/user_list.html +++ b/view/templates/index/user_list.html @@ -6,152 +6,107 @@ 知识库 - + + + + -{literal} - -{/literal} + -
+
{include file="include/header.html"} +
+
+
+ 子账号管理 + +
+ + + + + + + + + + + +
账号昵称姓名添加时间启用状态
+ +
+
+ 备注 + +
+
+ + +
+ +
-
- - - - - - - - - {foreach from=$user_list key=key item=item} - - - - - - - {/foreach} -
审核员列表
ID昵称真实姓名操作
{$item.id}{$item.nickname}{$item.real_name} - {if $item.is_super_admin == 0} - - {/if} -
- {if $login_list} - - - - - - - - - {foreach from=$login_list key=key item=item} - - - - - - - {/foreach} -
申请列表
ID昵称登陆时间操作
{$item.id}{$item.nickname}{$item.addtime} - -
- {/if} + + +
+ - {include file="include/footer.html"} +
+

新增子账号

+
+ {literal} + + {/literal} +
+
+ + {$bind_user_info.nickname},扫码成功 +
+

+ + 微信扫码,绑定子账号 +

+
+
+ + 姓名 +
+ + +
+
+ + +
+
+ {include file="include/footer.html"}
-{literal} - -{/literal} + \ No newline at end of file