初始化项目:添加后端代码、ThinkPHP框架、前端资源

This commit is contained in:
amb
2026-09-03 12:42:39 +08:00
commit 482bece22e
3726 changed files with 416708 additions and 0 deletions
+140
View File
@@ -0,0 +1,140 @@
<?php
namespace app\api\controller\app\pc;
use app\common\controller\Api;
use app\common\library\Wechat;
/**
* 登录
*/
class Login extends Api
{
protected $noNeedLogin = ['*'];
// 无需鉴权的接口,*表示全部
protected $noNeedRight = ['*'];
public function _initialize()
{
parent::_initialize();
$this->model = new \app\api\model\app\pc\Login();
}
/**
* 获取登录地址
* @return void
*/
public function pcLoginPath(){
global $_W;
if(\app\common\library\Platform::getSystemType() == 'single'){
$apiUrl = $_W['siteroot'].'/index.php?i='.$_W['uniacid'].'&route=api/';
}else{
$apiUrl = $_W['siteroot'].'/app/index.php?i='.$_W['uniacid'].'&c=entry&m=tuzi_v1&do=index&route=api/';
}
$ticket = $this->model->buildTicket();
$wxOfficialAccountConfig = \app\common\model\config\System::getConfig('wxOfficialAccount');
$path = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' .$wxOfficialAccountConfig['app_id']. '&redirect_uri='.urlencode($apiUrl).'app/pc/login/pcLoginCallback/ticket/'.$ticket.'&response_type=code&scope=snsapi_userinfo&state='.$apiUrl;
$this->success('获取成功', [
'path'=>$path,
'ticket'=>$ticket
]);
}
/**
* 获取登录状态
* @return void
*/
public function pcLoginState(){
$ticket = input('ticket','');
if(!$ticket){
$this->error("ticket 错误");
}
$ticketData = $this->model->getTicketState($ticket);
if(!$ticketData){
$this->error("未查询到登录信息");
}
$userinfo = $this->auth->getUserinfo($ticketData['user_id']);
$userinfo['token'] = $ticketData['token'];
$this->success(__('登录成功'), $userinfo);
}
/**
* 登录回调
* @return void
*/
public function pcLoginCallback(){
$ticket = input('ticket','');
if(!$ticket){
$this->error("ticket 错误");
}
if(\app\common\library\Platform::getSystemType() == 'single'){
$iconPath = MODULE_URL.'/';
}else{
$iconPath = MODULE_URL.'/public/';
}
if(!$this->model->checkTicketCanUse($ticket)){
return view('pc_login_callback',['type'=>'error','title'=>'登录失败','subtitle'=>'当前登录二维码已过期,请刷新登录二维码后重试']);
}
$wechat = new Wechat('wxOfficialAccount');
//解析来源页面
try{
$oauth = $wechat->oauth();
$decryptData = $oauth->user()->getOriginal();
$ret = (new \app\api\controller\user\Info())->oauthLoginOrRegister($decryptData, 'wxOfficialAccount', 'Wechat');
}catch (\Exception $e){
$this->model->destroyTicket($ticket);
return view('pc_login_callback',['icon_path'=>$iconPath,'type'=>'error','title'=>'登录失败','subtitle'=>'获取验证信息错误,请刷新登录二维码后重试']);
}
if (isset($ret) && $ret) {
//登录页接参Token
$this->model->successTicket($ticket,$ret->id,$ret->getToken());
return view('pc_login_callback',['icon_path'=>$iconPath,'type'=>'success','title'=>'登录成功','subtitle'=>'请返回PC端继续操作']);
}else{
$this->model->destroyTicket($ticket);
return view('pc_login_callback',['icon_path'=>$iconPath,'type'=>'error','title'=>'登录失败','subtitle'=>'获取用户信息失败,请刷新登录二维码后重试']);
}
}
/**
* 获取登录信息
* @return void
*/
public function loginInfo(){
//系统名称
$systemConfig = \app\common\model\config\System::getConfig('system');
//是否可微信登录
$wxOfficialAccountConfig = \app\common\model\config\System::getConfig('wxOfficialAccount');
$data = [
'name'=>$systemConfig['name'],
'can_wechat_login'=> $wxOfficialAccountConfig['app_id'] && $wxOfficialAccountConfig['wx_login'] == 'open' && $wxOfficialAccountConfig['secret'],
'is_login'=>$this->auth->isLogin(),
'mobile_login'=>'open'
];
if(isset($systemConfig['mobile_login'])){
$data['mobile_login'] = $systemConfig['mobile_login'];
}
$this->success(__('获取成功'), $data);
}
}
@@ -0,0 +1,114 @@
<?php
namespace app\api\controller\app\pc;
use app\common\controller\Api;
/**
* 推荐商品
*/
class Navigation extends Api
{
protected $noNeedLogin = ['*'];
// 无需鉴权的接口,*表示全部
protected $noNeedRight = ['*'];
/**
* 获取悬浮窗数据
* @return void
*/
public function float(){
$config = \app\common\model\app\Config::getConfig('pc_float');
$this->success('获取成功',$config);
}
/**
* 获取悬浮窗数据
* @return void
*/
public function navigation(){
$config = \app\common\model\app\Config::getConfig('pc_navigation');
$this->success('获取成功',$config);
}
/**
* 获取悬浮窗数据
* @return void
*/
public function footer(){
$data = \app\common\model\config\System::getConfig('system');
$config = \app\common\model\app\Config::getConfig('pc_footer');
$config['name'] = $data['name'];
$this->success('获取成功',$config);
}
/**
* 获取移动端页面
* @return void
*/
public function mobilePath(){
//判断当前开放的终端
$type = input('type','index');
$id = input('id',0);
$data = [
'h5'=>false,
'mini'=>false,
'dy'=>false
];
$path = [
'course'=> 'pages/course/detail/detail',
'page'=> 'pages/public/diy/diy',
'group'=> 'pages/course/group/group',
'activity_signin'=> 'pages/app/activity/sign/sign',
'activity'=> 'pages/app/activity/detail/detail',
'exercises'=> 'pages/app/exam/detail/detail',
'physical'=> 'pages/app/physical/detail/detail',
'evaluation'=> 'pages/app/exam/detail/detail',
'vipcard'=> 'pages/app/vip/center/center',
'index'=> 'pages/public/diy/diy'
];
$wxOfficialAccountConfig = \app\common\model\config\System::getConfig('wxOfficialAccount');
$H5Config = \app\common\model\config\System::getConfig('H5');
$wxMiniProgramConfig = \app\common\model\config\System::getConfig('wxMiniProgram');
$dyMiniProgramConfig = \app\common\model\config\System::getConfig('dyMiniProgram');
if(isset($path[$type])){
global $_W;
if($wxOfficialAccountConfig['status'] == 'open' || $H5Config['status'] == 'open'){
$mobilePath = $_W['siteroot'].'?i='.$_W['uniacid'].'&route=index#';
$data['h5'] = $mobilePath."/".$path[$type]."?id=".$id;
}
if($wxMiniProgramConfig['status'] == 'open'){
$wechatQrCode = \app\common\library\share\Qrsharecode::getMpCode($type,$id,'wechat');
if($wechatQrCode){
$data['mini'] = "data:image/png;base64,".$wechatQrCode;
}
}
// if($dyMiniProgramConfig['status'] == 'open'){
// $dyQrCode = \app\common\library\share\Qrsharecode::getMpCode($type,$id,'douyin');
// if($dyQrCode){
// $data['dy'] = "data:image/png;base64,".$dyQrCode;
// }
// }
}
$this->success("获取成功",$data);
}
}
@@ -0,0 +1,41 @@
<?php
namespace app\api\controller\app\pc;
use app\common\controller\Api;
/**
* 页面
*/
class Page extends Api
{
protected $noNeedLogin = ['*'];
// 无需鉴权的接口,*表示全部
protected $noNeedRight = ['*'];
public function _initialize()
{
parent::_initialize();
$this->model = new \app\api\model\app\pc\Page();
}
public function index()
{
$id = input('page_id');
$data = $this->model->getPageData($id);
if(!$data){
$this->error("未获取到页面信息");
}
$this->success("获取成功",$data);
}
public function meta(){
$id = input('id');
$type = input('type');
$data = (new \app\api\model\app\pc\Seo())->getMeta($type,$id);
$this->success("获取成功",$data);
}
}