Commit f3a6524f authored by wangtao's avatar wangtao

学习资料

parent 39b9b3aa
...@@ -14,6 +14,7 @@ use app\BaseController; ...@@ -14,6 +14,7 @@ use app\BaseController;
use app\model\system\SystemRoles as Roles; use app\model\system\SystemRoles as Roles;
use app\model\system\SystemManager as Manager; use app\model\system\SystemManager as Manager;
use think\facade\Db; use think\facade\Db;
use think\helper\Str;
/** /**
*【后台控制器抽象基类】 *【后台控制器抽象基类】
...@@ -72,7 +73,25 @@ abstract class AdminBase extends BaseController ...@@ -72,7 +73,25 @@ abstract class AdminBase extends BaseController
//载入权限菜单 //载入权限菜单
$this->loadMenusRoles(); $this->loadMenusRoles();
//构组路由: 控制器 + 方法 + (参数action的传值) //构组路由: 控制器 + 方法 + (参数action的传值)
$this->routeUri = strtolower($this->request->ADDON_APP . $this->request->controller() . "/" . $this->request->action() . (($action = $this->request->get('action')) ? '/' . $action : ''));
$controler = $this->request->controller();
$controlerarr = explode('.', $controler);
//下划线转驼峰(首字母小写)
$firstcc = Str::camel($controlerarr[0]);
$firstcc = Str::snake($firstcc, $delimiter = '_');
$routeuri_controler = $firstcc;
if(isset($controlerarr[1]) && $controlerarr[1]){
//下划线转驼峰(首字母小写)
$ss = Str::camel($controlerarr[1]);
$ss = Str::snake($ss, $delimiter = '_');
$routeuri_controler = $controlerarr[0].'.'.$ss;
}
// print_r($routeuri_controler);exit;
$this->routeUri = strtolower($this->request->ADDON_APP .$routeuri_controler . "/" . $this->request->action() . (($action = $this->request->get('action')) ? '/' . $action : ''));
// $this->routeUri = strtolower($this->request->ADDON_APP . $this->request->controller() . "/" . $this->request->action() . (($action = $this->request->get('action')) ? '/' . $action : ''));
//验证权限 //验证权限
$this->isPower(); $this->isPower();
} }
...@@ -123,6 +142,7 @@ abstract class AdminBase extends BaseController ...@@ -123,6 +142,7 @@ abstract class AdminBase extends BaseController
*/ */
private function isPower() private function isPower()
{ {
if ($this->manUser['userid'] > 1 && !in_array($this->routeUri, $this->manUser['actions'])) { if ($this->manUser['userid'] > 1 && !in_array($this->routeUri, $this->manUser['actions'])) {
$this->exitMsg('抱歉,您没有该项权限请联系管理员!', $this->request->isAjax() ? 401 : 400); $this->exitMsg('抱歉,您没有该项权限请联系管理员!', $this->request->isAjax() ? 401 : 400);
} }
...@@ -167,5 +187,4 @@ abstract class AdminBase extends BaseController ...@@ -167,5 +187,4 @@ abstract class AdminBase extends BaseController
} }
} }
\ No newline at end of file
...@@ -45,7 +45,8 @@ ...@@ -45,7 +45,8 @@
cols: [[ cols: [[
{field:'id',width:50,unresize:true,align:'center',title:'ID'}, {field:'id',width:50,unresize:true,align:'center',title:'ID'},
{field:'thumb',width:80,height:80,align:'center',title:'缩略图',templet:'<div class="files_itemw"><img src="{{d.thumbpath}}" lay-event="article-event-image" /></div>'}, // {field:'thumb',width:80,height:80,align:'center',title:'缩略图',templet:'<div class="files_itemw"><img src="{{d.thumbpath}}" lay-event="article-event-image" /></div>'},
{field:'thumbpath',width:50,align:'center',title:'缩略图',templet:function(d){return '<div><div class="files_itemw"><img src="'+(d.thumbpath ? d.thumbpath : '')+'" lay-event="article-event-image" /></div></div>';}},
{field:'title',align:'left',title:'分类',}, {field:'title',align:'left',title:'分类',},
{field:'typetxt',width:100,align:'center',title:'类型'}, {field:'typetxt',width:100,align:'center',title:'类型'},
{field:'sort',width:100,align:'center',title:'排序',edit:'text'}, {field:'sort',width:100,align:'center',title:'排序',edit:'text'},
......
...@@ -54,7 +54,8 @@ ...@@ -54,7 +54,8 @@
cols: [[ cols: [[
{field:'id',width:50,align:'center',title:'ID'}, {field:'id',width:50,align:'center',title:'ID'},
{field:'title',align:'left',title:'分类',edit:'text'}, {field:'title',align:'left',title:'分类',edit:'text'},
{field:'thumb',width:50,align:'center',title:'缩略图',templet:'<div><div class="files_itemw1"><img src="{{d.thumbpath}}" lay-event="article-event-image" /></div></div>'}, // {field:'thumb',width:50,align:'center',title:'缩略图',templet:'<div><div class="files_itemw1"><img src="{{d.thumbpath}}" lay-event="article-event-image" /></div></div>'},
{field:'thumbpath',width:50,align:'center',title:'缩略图',templet:function(d){return '<div><div class="files_itemw1"><img src="'+(d.thumbpath ? d.thumbpath : '')+'" lay-event="article-event-image" /></div></div>';}},
{field:'sort',width:50,align:'center',title:'排序',edit:'text'}, {field:'sort',width:50,align:'center',title:'排序',edit:'text'},
{fixed:'right',width:130,align:'center',toolbar:'<div><a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a><a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del">删除</a></div>',title:'操作'} {fixed:'right',width:130,align:'center',toolbar:'<div><a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a><a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del">删除</a></div>',title:'操作'}
]], ]],
......
...@@ -79,7 +79,7 @@ ...@@ -79,7 +79,7 @@
{in name="data.fileext" value="jpg,png,jpeg"} {in name="data.fileext" value="jpg,png,jpeg"}
<img src="{$data.fileurl}" width="50" height="50" class="imgclick"> <img src="{$data.fileurl}" width="50" height="50" class="imgclick">
{else/} {else/}
<a class="layui-btn layui-btn-xs" href="/admin/course.course_work/downloadfile?fileid={$data.fileid}" target="_blank">下载</a> <a class="layui-btn layui-btn-xs" href="/admin/cert.cert_order/downloadfile?fileid={$data.fileid}" target="_blank">下载</a>
{/in} {/in}
</td> </td>
</tr> </tr>
......
...@@ -54,7 +54,8 @@ ...@@ -54,7 +54,8 @@
cols: [[ cols: [[
{field:'id',width:50,align:'center',title:'ID'}, {field:'id',width:50,align:'center',title:'ID'},
{field:'title',align:'left',title:'分类',edit:'text'}, {field:'title',align:'left',title:'分类',edit:'text'},
{field:'thumb',width:50,align:'center',title:'缩略图',templet:'<div><div class="files_itemw1"><img src="{{d.thumbpath}}" lay-event="article-event-image" /></div></div>'}, {field:'thumbpath',width:50,align:'center',title:'缩略图',templet:function(d){return '<div><div class="files_itemw1"><img src="'+(d.thumbpath ? d.thumbpath : '')+'" lay-event="article-event-image" /></div></div>';}},
// {field:'thumb',width:50,align:'center',title:'缩略图',templet:'<div><div class="files_itemw1"><img src="{{d.thumbpath}}" lay-event="article-event-image" /></div></div>'},
{field:'sort',width:50,align:'center',title:'排序',edit:'text'}, {field:'sort',width:50,align:'center',title:'排序',edit:'text'},
{field:"is_tj",width:80,align:'center',title:"是否推荐",templet:function(d){return '<input type="checkbox" name="is_tj" lay-skin="switch" lay-text="是|否" lay-filter="is_tj-chang" value="'+d.is_tj+'" data-json="'+encodeURIComponent(JSON.stringify(d))+'"'+(d.is_tj==1 ? ' checked' : '')+'>';},unresize:true,}, {field:"is_tj",width:80,align:'center',title:"是否推荐",templet:function(d){return '<input type="checkbox" name="is_tj" lay-skin="switch" lay-text="是|否" lay-filter="is_tj-chang" value="'+d.is_tj+'" data-json="'+encodeURIComponent(JSON.stringify(d))+'"'+(d.is_tj==1 ? ' checked' : '')+'>';},unresize:true,},
{fixed:'right',width:130,align:'center',toolbar:'<div><a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a><a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del">删除</a></div>',title:'操作'} {fixed:'right',width:130,align:'center',toolbar:'<div><a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a><a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del">删除</a></div>',title:'操作'}
......
...@@ -75,7 +75,7 @@ ...@@ -75,7 +75,7 @@
{in name="data.fileext" value="jpg,png,jpeg"} {in name="data.fileext" value="jpg,png,jpeg"}
<img src="{$data.fileurl}" width="50" height="50" class="imgclick"> <img src="{$data.fileurl}" width="50" height="50" class="imgclick">
{else/} {else/}
<a class="layui-btn layui-btn-xs" href="/admin/course.course_work/downloadfile?fileid={$data.fileid}" target="_blank">下载</a> <a class="layui-btn layui-btn-xs" href="/admin/project.project/downloadfile?fileid={$data.fileid}" target="_blank">下载</a>
{/in} {/in}
</td> </td>
</tr> </tr>
......
...@@ -54,7 +54,7 @@ ...@@ -54,7 +54,7 @@
cols: [[ cols: [[
{field:'id',width:50,align:'center',title:'ID'}, {field:'id',width:50,align:'center',title:'ID'},
{field:'title',align:'left',title:'分类',edit:'text'}, {field:'title',align:'left',title:'分类',edit:'text'},
{field:'thumb',width:50,align:'center',title:'缩略图',templet:'<div><div class="files_itemw1"><img src="{{d.thumbpath}}" lay-event="article-event-image" /></div></div>'}, {field:'thumbpath',width:50,align:'center',title:'缩略图',templet:function(d){return '<div><div class="files_itemw1"><img src="'+(d.thumbpath ? d.thumbpath : '')+'" lay-event="article-event-image" /></div></div>';}},
{field:'sort',width:50,align:'center',title:'排序',edit:'text'}, {field:'sort',width:50,align:'center',title:'排序',edit:'text'},
{field:"is_tj",width:80,align:'center',title:"是否推荐",templet:function(d){return '<input type="checkbox" name="is_tj" lay-skin="switch" lay-text="是|否" lay-filter="is_tj-chang" value="'+d.is_tj+'" data-json="'+encodeURIComponent(JSON.stringify(d))+'"'+(d.is_tj==1 ? ' checked' : '')+'>';},unresize:true,}, {field:"is_tj",width:80,align:'center',title:"是否推荐",templet:function(d){return '<input type="checkbox" name="is_tj" lay-skin="switch" lay-text="是|否" lay-filter="is_tj-chang" value="'+d.is_tj+'" data-json="'+encodeURIComponent(JSON.stringify(d))+'"'+(d.is_tj==1 ? ' checked' : '')+'>';},unresize:true,},
{fixed:'right',width:130,align:'center',toolbar:'<div><a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a><a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del">删除</a></div>',title:'操作'} {fixed:'right',width:130,align:'center',toolbar:'<div><a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a><a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del">删除</a></div>',title:'操作'}
......
...@@ -192,7 +192,7 @@ ...@@ -192,7 +192,7 @@
function shajax(id,shstatus,errordesc=''){ function shajax(id,shstatus,errordesc=''){
$.ajax({ $.ajax({
method: "post", method: "post",
url: layui.cache.maps+'/users.business/shenhebusiness', url: layui.cache.maps+'users.business/shenhebusiness',
data: {id:id,shstatus:shstatus,errordesc:errordesc}, data: {id:id,shstatus:shstatus,errordesc:errordesc},
dataType: "json", dataType: "json",
success: function (res){ success: function (res){
......
...@@ -195,7 +195,7 @@ ...@@ -195,7 +195,7 @@
function shajax(id,shstatus,errordesc=''){ function shajax(id,shstatus,errordesc=''){
$.ajax({ $.ajax({
method: "post", method: "post",
url: layui.cache.maps+'/users.school/shenheschool', url: layui.cache.maps+'users.school/shenheschool',
data: {id:id,shstatus:shstatus,errordesc:errordesc}, data: {id:id,shstatus:shstatus,errordesc:errordesc},
dataType: "json", dataType: "json",
success: function (res){ success: function (res){
......
...@@ -10,6 +10,7 @@ use app\BaseController; ...@@ -10,6 +10,7 @@ use app\BaseController;
use app\Request; use app\Request;
use app\model\project\User as userModel; use app\model\project\User as userModel;
use think\exception\ValidateException; use think\exception\ValidateException;
use think\facade\Cache;
class User extends BaseController class User extends BaseController
{ {
...@@ -49,7 +50,7 @@ class User extends BaseController ...@@ -49,7 +50,7 @@ class User extends BaseController
public function register(Request $request) public function register(Request $request)
{ {
$vo = (new UserValidate())->goCheck(['name', 'mobile', 'password', 'code', 'role','password2']); $vo = (new UserValidate())->goCheck(['name', 'mobile', 'password', 'code', 'role', 'password2']);
if ($vo !== true) { if ($vo !== true) {
return $vo; return $vo;
} }
...@@ -67,7 +68,13 @@ class User extends BaseController ...@@ -67,7 +68,13 @@ class User extends BaseController
return $this->returnMsg('验证码错误'); return $this->returnMsg('验证码错误');
} }
} }
if(isset($data['cachekey']) && !empty($data['cachekey'])) {
$cachekey = $data['cachekey'];
$openid = Cache::get($cachekey . '_wxopenid');
if($openid){
$user['wx_openid'] = $openid;
}
}
$user['username'] = $data['name']; $user['username'] = $data['name'];
$user['mobile'] = $data['mobile']; $user['mobile'] = $data['mobile'];
...@@ -87,10 +94,45 @@ class User extends BaseController ...@@ -87,10 +94,45 @@ class User extends BaseController
return $this->returnMsg('注册成功', 1); return $this->returnMsg('注册成功', 1);
} }
//微信登录成功绑定手机号 //微信登录成功绑定已有手机号
public function bindmobile(Request $request) public function bindmobile(Request $request)
{ {
$vo = (new UserValidate())->goCheck(['user_id', 'name', 'mobile', 'password', 'code','password2']); $vo = (new UserValidate())->goCheck(['cachekey', 'mobile', 'code']);
if ($vo !== true) {
return $vo;
}
$data = $request->param();
$user = userModel::where(['mobile' => $data['mobile']])->where('is_del', 0)->find();
if (empty($user)) {
return $this->returnMsg('手机号未注册');
}
$checkSmsCode = UtilService::checkSmsCode($data['mobile'], $data['code']);
if (!$checkSmsCode) {
// return $this->returnMsg('验证码错误');
}
$cachekey = $data['cachekey'];
$openid = Cache::get($cachekey . '_wxopenid');
if (empty($openid)) {
return $this->returnMsg('微信登录生效请重新扫码登录');
}
//绑定微信openid
userModel::where('id', $user['id'])->save(['wx_openid' => $openid]);
$user['wx_openid'] = $openid;
//登录
$token = TokenService::generateToken($user['id'], $user->toArray());
$update['token'] = $token;
$update['last_login_time'] = time();
userModel::where(['id' => $user['id']])->update($update);
return $this->returnMsg('操作成功', 1, ['token' => $token, 'expires_in' => TokenService::EXPIRE]);
}
//微信登录后新建账号 不用了
public function bindregister(Request $request)
{
$vo = (new UserValidate())->goCheck(['cachekey', 'name', 'mobile', 'password', 'code', 'password2', 'role']);
if ($vo !== true) { if ($vo !== true) {
return $vo; return $vo;
} }
...@@ -101,20 +143,40 @@ class User extends BaseController ...@@ -101,20 +143,40 @@ class User extends BaseController
} }
$checkSmsCode = UtilService::checkSmsCode($data['mobile'], $data['code']); $checkSmsCode = UtilService::checkSmsCode($data['mobile'], $data['code']);
if (!$checkSmsCode) { if (!$checkSmsCode) {
// return $this->returnMsg('验证码错误'); return $this->returnMsg('验证码错误');
} }
$cachekey = $data['cachekey'];
$openid = Cache::get($cachekey. '_wxopenid');
if (empty($openid)) {
return $this->returnMsg('微信登录生效请重新扫码登录');
}
$is_exit = userModel::where(['wx_openid' => $openid])->where('is_del', 0)->count();
if ($is_exit) {
return $this->returnMsg('此微信已绑定其它账号');
}
//绑定用户信息
$user['wx_openid'] = $openid;
$user['username'] = $data['name']; $user['username'] = $data['name'];
$user['mobile'] = $data['mobile']; $user['mobile'] = $data['mobile'];
$user['salt'] = random(4); $user['salt'] = random(4);
$user['reg_time'] = time(); $user['reg_time'] = time();
$user['create_time'] = time(); $user['create_time'] = time();
$user['is_del'] = 0;
$user['password'] = md5($data['password'] . $user['salt']); $user['password'] = md5($data['password'] . $user['salt']);
$user['last_login_time'] = time(); $user['role'] = $data['role'] ?? 1;
$token = TokenService::generateToken($data['user_id'], $user); $user['headico'] = vconfig('default_user') ?? null;
$user['token'] = $token;
userModel::where('id', $data['user_id'])->update($user); $user = userModel::create($user);
if (!$user) {
return $this->returnMsg('注册失败', 0);
}
//登录
$token = TokenService::generateToken($user->id, $user->toArray());
$update['token'] = $token;
$update['last_login_time'] = time();
userModel::where(['id' => $user->id])->update($update);
return $this->returnMsg('操作成功', 1, ['token' => $token, 'expires_in' => TokenService::EXPIRE]); return $this->returnMsg('操作成功', 1, ['token' => $token, 'expires_in' => TokenService::EXPIRE]);
} }
......
...@@ -38,15 +38,16 @@ class Wecaht extends BaseController ...@@ -38,15 +38,16 @@ class Wecaht extends BaseController
if ($cachekey == $array['Ticket']) { if ($cachekey == $array['Ticket']) {
$openid = $array['FromUserName']; $openid = $array['FromUserName'];
Log::write('扫描成功'); Log::write('扫描成功');
Cache::set($EventKey, $openid, 1000); Cache::set($EventKey . '_wxopenid', $openid, 3000);
$user = User::where('wx_openid', $openid)->find();
if (empty($user)) { // $user = User::where('wx_openid', $openid)->find();
$user['wx_openid'] = $openid; // if (empty($user)) {
$user['is_del'] = 1; // $user['wx_openid'] = $openid;
$user['create_time'] = time(); // $user['is_del'] = 1;
$user['headico'] = vconfig('default_user') ?? null; // $user['create_time'] = time();
userModel::insert($user); // $user['headico'] = vconfig('default_user') ?? null;
} // userModel::insert($user);
// }
} }
} }
...@@ -105,10 +106,13 @@ class Wecaht extends BaseController ...@@ -105,10 +106,13 @@ class Wecaht extends BaseController
{ {
$param = $this->request->post(); $param = $this->request->post();
$cachekey = $param['cachekey']; $cachekey = $param['cachekey'];
$openid = Cache::get($cachekey); $openid = Cache::get($cachekey . '_wxopenid');
if (empty($openid)) {
return $this->returnMsg("等待用户扫码关注", 1);
}
$user = User::where('wx_openid', $openid)->find(); $user = User::where('wx_openid', $openid)->find();
if (isset($user['id']) && empty($user['mobile'])) { if (empty($user)) {
$redata = ['token' => '', 'expires_in' => 0, 'user_id' => $user['id'], 'is_mobile' => 0]; $redata = ['token' => '', 'expires_in' => 0, 'user_id' => 0, 'is_mobile' => 0];
} elseif ($user) { } elseif ($user) {
if ($user['status'] != 1) { if ($user['status'] != 1) {
return $this->returnMsg('账号禁止登录', 0); return $this->returnMsg('账号禁止登录', 0);
...@@ -121,10 +125,8 @@ class Wecaht extends BaseController ...@@ -121,10 +125,8 @@ class Wecaht extends BaseController
$update['last_login_time'] = time(); $update['last_login_time'] = time();
User::where(['id' => $user['id']])->update($update); User::where(['id' => $user['id']])->update($update);
$redata = ['token' => $token, 'expires_in' => TokenService::EXPIRE, 'user_id' => $user['id'], 'is_mobile' => 1]; $redata = ['token' => $token, 'expires_in' => TokenService::EXPIRE, 'user_id' => $user['id'], 'is_mobile' => 1];
} else {
return $this->returnMsg("登录失败,请重新扫码", 0);
}
}
return $this->returnMsg("success", 1, $redata); return $this->returnMsg("success", 1, $redata);
} }
......
...@@ -31,6 +31,7 @@ class User extends BaseController ...@@ -31,6 +31,7 @@ class User extends BaseController
public function getUserInfo(Request $request) public function getUserInfo(Request $request)
{ {
$vo = (new UserValidate())->goCheck(['token']); $vo = (new UserValidate())->goCheck(['token']);
if ($vo !== true) { if ($vo !== true) {
return $vo; return $vo;
...@@ -38,9 +39,12 @@ class User extends BaseController ...@@ -38,9 +39,12 @@ class User extends BaseController
$data = $request->header(); $data = $request->header();
$user = UserService::getUserInfo($data['token']); $user = UserService::getUserInfo($data['token']);
if (!$user) { if (!$user) {
return $this->returnMsg('token无效', 0); return $this->returnMsg('token无效', 0);
} }
$info_status = ''; $info_status = '';
if ($user['role'] == 2) { if ($user['role'] == 2) {
$info_status = Db::name('business')->where('user_id', $user['id'])->value('status'); $info_status = Db::name('business')->where('user_id', $user['id'])->value('status');
......
...@@ -27,9 +27,11 @@ class UserValidate extends BaseValidate ...@@ -27,9 +27,11 @@ class UserValidate extends BaseValidate
'reset_token'=>'require', 'reset_token'=>'require',
'role'=>'require', 'role'=>'require',
'user_id'=>'require', 'user_id'=>'require',
'cachekey'=>'require',
]; ];
protected $message = [ protected $message = [
'cachekey.require' => '微信登录唯一标识不能为空',
'user_id.require' => '用户id不能为空', 'user_id.require' => '用户id不能为空',
'name.require' => '名称必须', 'name.require' => '名称必须',
'mobile.require' => '手机号不能为空', 'mobile.require' => '手机号不能为空',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment