This commit is contained in:
2026-04-04 08:52:59 +08:00
parent 66bcd8061a
commit d98ac8f146
33 changed files with 2565 additions and 328 deletions
+96
View File
@@ -0,0 +1,96 @@
<?php
namespace app\api\controller;
use support\Request;
use support\Response;
use hg\apidoc\annotation as Apidoc;
use app\model\User;
use app\model\Album as AlbumModel;
/**
* 群相册
*/
class AlbumController extends BaseController
{
public $noNeedAuth = ['*'];
public $noNeedLogin = [];
/**
* @Apidoc\Title("群相册列表")
* @Apidoc\Method("POST")
* @Apidoc\Param("group_id", type="string", require=true, desc="群ID")
* @Apidoc\Param("offset", type="int", require=false, desc="偏移量,和页码二选一",default=0)
* @Apidoc\Param("page", type="int", require=false, desc="页码",default=1)
* @Apidoc\Param("limit", type="int", require=true, desc="分页大小",default=10)
*/
function list(Request $request): Response
{
$user = \support\Jwt::getUser();
$limit = $request->post('limit',10);
$offset = $request->post('offset',0);
$group_id = $request->post('groupID') ?:$request->post('group_id');
//$ls = $this->get_user_in_group($group_id);
$query = AlbumModel::where('group_id',$group_id)
->order('id','desc');
if($offset){
$list = $query->where('id','<',$offset)->limit($offset,$limit);
}else{
$list = $query->paginate($limit);
}
return $this->success('ok',$list);
}
/**
* @Apidoc\Title("创建相册")
* @Apidoc\Method("POST")
* @Apidoc\Param("groupID", type="string", require=true, desc="群ID")
* @Apidoc\Param("title", type="string", require=true, desc="标题")
* @Apidoc\Param("image", type="int", require=false, desc="封面ID")
*/
function create(Request $request): Response
{
$user_id = \support\Jwt\JwtToken::getCurrentId();
$data = [
'user_id' => $user_id,
'group_id' => $request->post('groupID'),
'title' => input('title'),
'image' => input('image'),
];
$result = AlbumModel::create($data);
return $this->success('ok',$result);
}
/**
* @Apidoc\Title("更新")
* @Apidoc\Method("POST")
* @Apidoc\Param("id", type="string", require=true, desc="ID")
* @Apidoc\Param("title", type="string", require=true, desc="标题")
* @Apidoc\Param("image", type="int", require=false, desc="封面ID")
*/
function update(Request $request): Response
{
$id = $request->input('id');
$image = $request->input('image');
$title = $request->input('title');
$album = AlbumModel::find($id);
if($title){
$album->title = $title;
}
if($image){
$album->image = $image;
}
$album->save();
return $this->success('ok',$album);
}
/**
* @Apidoc\Title("删除")
* @Apidoc\Method("POST")
* @Apidoc\Param("id", type="string", require=true, desc="ID")
*/
function delete(Request $request): Response
{
$id = Input('id');
$album = AlbumModel::whereIn('id',condition: $id)->find();
$album->delete();
return $this->success('ok');
}
}
@@ -90,4 +90,17 @@ class CollectionController extends BaseController{
return $this->success('发布成功', ['collection' => $collection]);
}
/**
* 删除收藏
* @Apidoc\Param("id", type="int",require=true, desc="收藏id")
* @param Request $request
* @return Response
*/
function delete(Request $request): Response
{
$user = \support\Jwt::getUser();
$id = $request->post('id');
CollectionModel::where('id',$id)->where('user_id',$user->id)->delete();
return $this->success('删除成功');
}
}
+62 -12
View File
@@ -56,6 +56,33 @@ class CommonController extends BaseController{
$config['recharge_status_list'] = \app\enum\RechargeStatus::toArray();
$config['withdrawl_status_list'] = \app\enum\WithdrawlStatus::toArray();
$config['server_status_list'] = \app\enum\ServerStatus::toArray();
$config['see_point_awards'] = [
[
'name'=>'S1',
'award'=>0.05,
'total'=>50,
],
[
'name'=>'S2',
'award'=>0.1,
'total'=>100,
],
[
'name'=>'S3',
'award'=>0.15,
'total'=>1000,
],
[
'name'=>'S4',
'award'=>0.2,
'total'=>5000,
],
[
'name'=>'S5',
'award'=>0.25,
'total'=>20000,
]
];
//$config['getFriendList'] = $request->IM->friend->getFriendList('100006');
return $this->success(__('successful'), $config);
}
@@ -97,7 +124,9 @@ class CommonController extends BaseController{
* 注册会员
*
* @Apidoc\Method ("POST")
* @Apidoc\Param("type", type="string",require=true, desc="注册方式:email,mobile")
* @Apidoc\Param("email", type="string",require=true, desc="邮箱")
* @Apidoc\Param("mobile", type="string",require=true, desc="手机号码")
* @Apidoc\Param("password", type="string",require=true, desc="密码")
* @Apidoc\Param("trade_password", type="string",require=true, desc="交易密码")
* @Apidoc\Param("invite_code", type="string",require=true, desc="推荐码")
@@ -121,7 +150,7 @@ class CommonController extends BaseController{
}
$username = $email;
unset($mobile);
//captcha_verfiy('email','register',$email,false);
captcha_verfiy('email','register',$email,false);
}
if ($type == 'mobile') {
if(!$mobile || !Validate::regex($mobile, "^1\d{10}$")){
@@ -129,10 +158,10 @@ class CommonController extends BaseController{
}
$username = $mobile;
unset($email);
//captcha_verfiy('mobile','register',$mobile,false);
captcha_verfiy('mobile','register',$mobile,false);
}
if ($type == 'username') {
if(!$email || !Validate::is($email, "email")){
if(!$username){
return $this->error(__('Username is incorrect'));
}
}
@@ -151,9 +180,18 @@ class CommonController extends BaseController{
'role_id' => 1,
'group_id' => 0,
'region' => '86',
'nickname' => input('nickname','用户_'.substr($username,7)),
'nickname' => input('nickname'),
'avatar' => '/static/avatar/'.rand(0,17).'.png',
];
if(empty($extends['nickname'])){
if($type == 'mobile'){
$extends['nickname'] = '用户_'.substr($username,7);
}else if($type == 'email'){
$extends['nickname'] = '用户_'.substr(explode('@',$username)[0],7);
}else{
$extends['nickname'] = $username;
}
}
if ($invite_code) {
if(strlen($invite_code) == 12){
//系统生产的一次性推荐吗
@@ -203,10 +241,12 @@ class CommonController extends BaseController{
* 登录
* @Apidoc\Method("POST")
* @Apidoc\Param("username", type="string",require=false, desc="用户名登录必填")
* @Apidoc\Param("email", type="string",require=false, desc="邮箱登录必填")
* @Apidoc\Param("mobile", type="string",require=false, desc="手机号登录必填")
* @Apidoc\Param("type", type="string",require=true,default="mobile",desc="登录方式,username,mobile,email")
* @Apidoc\Param("password", type="string",require=false, desc="密码的登录必填")
* @Apidoc\Param("code", type="string",require=false, desc="验证码登录必填")
* @Apidoc\Param("platform", type="string",require=false, desc="平台",default="web")
* @Apidoc\Param("region", type="string",require=false,default="86", desc="区域,手机号登录必填")
*/
public function login(Request $request){
@@ -321,11 +361,13 @@ class CommonController extends BaseController{
* @Apidoc\Param("email", type="string",require=true, desc="邮箱")
* @Apidoc\Param("newpassword", type="string",require=true, desc="新密码")
* @Apidoc\Param("code", type="string",require=true, desc="邮箱验证码,event=reset_trade_pwd")
* @Apidoc\Param("verify_type", type="string",require=true, desc="验证方式,email,mobile")
*/
public function reset_trade_pwd()
{
$email = input("email");
$mobile = input("mobile");
$verify_type = input("verify_type");
$newpassword = input("newpassword");
if (!$newpassword) {
return $this->error(__('Invalid parameters'));
@@ -334,7 +376,6 @@ class CommonController extends BaseController{
if (!Validate::check(['newpassword' => $newpassword], ['newpassword' => 'require|regex:\S{6,32}'])) {
return $this->error(__('Trade password must be 6-32 characters'));
}
if (!$mobile && !$email){
try{
$user = \support\Jwt::getUser();
@@ -342,7 +383,14 @@ class CommonController extends BaseController{
$user = false;
}
if($user){
captcha_verfiy('mobile','reset_trade_pwd',$user->mobile);
if($verify_type == 'email'){
captcha_verfiy('email','reset_trade_pwd',$user->email);
}else if($verify_type == 'mobile'){
captcha_verfiy('mobile','reset_trade_pwd',$user->mobile);
}else{
return $this->error(__('Unknown verify type'));
}
}
}else{
if ($mobile && Validate::regex($mobile, "^1\d{10}$")) {
@@ -402,12 +450,13 @@ class CommonController extends BaseController{
$list[$code] = time();
cache($key,$list);
cache('exp_'.$key,time());
// addJob([
// 'email' => $email,
// 'title' => __("Mt email code"),
// 'event' => $event,
// 'code' => $code
// ],'Email');
addJob([
'email' => $email,
'title' => __(Config('site.name').' 验证码'),
'event' => $event,
'code' => $code
],'Email');
\support\Log::channel('mail')->alert("邮件验证码:".$code.',邮箱:'.$email);
return $this->success(__('Email sent successfully'),[
'code'=> $debug ? $code : ''
]);
@@ -443,6 +492,7 @@ class CommonController extends BaseController{
'event' => $event,
'code' => $code
],'Sms');
\support\Log::channel('mail')->alert("短信验证码:".$code.',手机号:'.$mobile);
return $this->success(__('SMS sent successfully'),[
'code'=> $debug ? $code : ''
]);
+120
View File
@@ -0,0 +1,120 @@
<?php
namespace app\api\controller;
use support\Request;
use support\Response;
use hg\apidoc\annotation as Apidoc;
use app\model\User;
use app\model\Gallery as GalleryModel;
use app\model\Album as AlbumModel;
/**
* 相册的相片
*/
class GalleryController extends BaseController
{
public $noNeedAuth = ['*'];
public $noNeedLogin = [];
/**
* @Apidoc\Title("列表")
* @Apidoc\Method("POST")
* @Apidoc\Param("album_id", type="string", require=true, desc="相册ID")
* @Apidoc\Param("offset", type="int", require=false, desc="偏移量,和页码二选一",default=0)
* @Apidoc\Param("page", type="int", require=false, desc="页码",default=1)
* @Apidoc\Param("limit", type="int", require=true, desc="分页大小",default=10)
*/
function list(Request $request): Response
{
$user = \support\Jwt::getUser();
$limit = $request->post('limit',10);
$offset = $request->post('offset',0);
$album_id = $request->post('album_id') ?: 0;
//$ls = $this->get_user_in_group($group_id);
$query = GalleryModel::where('album_id',$album_id)->order('id','desc');
if($offset){
$list = $query->where('id','<',$offset)->limit(0,$limit);
}else{
$list = $query->paginate($limit);
}
return $this->success('ok',$list);
}
/**
* @Apidoc\Title("上传")
* @Apidoc\Method("POST")
* @Apidoc\Param("album_id", type="string", require=true, desc="相册ID",default=0)
* @Apidoc\Param("title", type="string", require=true, desc="标题")
* @Apidoc\Param("url", type="string", require=true, desc="图片")
* @Apidoc\Param("file", type="file", require=true, desc="图片,没有url得时候必传")
*/
function create(Request $request): Response
{
$user_id = \support\Jwt\JwtToken::getCurrentId();
$res = $this->_upload($request);
if(is_string($res)){
return $this->fail( $res);
}
$album_id = $request->post('album_id') ?: 0;
$album = AlbumModel::find($album_id);
if(!$album){
return $this->fail('相册不存在');
}
$insert_data = [];
foreach($res as $item){
$insert_data[] = [
'user_id' => $user_id,
'group_id' => $album->group_id,
'album_id' => $album_id,
'title' => $item['origin_name'],
'url' => $item['file_name'],
];
}
$result = GalleryModel::saveAll($insert_data);
return $this->success('ok',$result[0]);
}
/**
* @Apidoc\Title("更新")
* @Apidoc\Method("POST")
* @Apidoc\Param("id", type="string", require=true, desc="ID")
* @Apidoc\Param("title", type="string", require=true, desc="标题")
* @Apidoc\Param("url", type="string", require=true, desc="图片")
*/
function update(Request $request): Response
{
$id = $request->input('id');
$title = $request->input('title');
$url = $request->input('url');
$album = GalleryModel::find($id);
if($album){
if($title){
$album->title = $title;
}
if($url){
$album->url = $url;
}
$album->save();
}
return $this->success('ok',$album);
}
/**
* @Apidoc\Title("删除")
* @Apidoc\Method("POST")
* @Apidoc\Param("id", type="string", require=true, desc="ID")
*/
function delete(Request $request): Response
{
$ids = Input('ids');
GalleryModel::whereIn('id',condition: $ids)->delete();
return $this->success('ok');
}
/**
* 获取在群里的角色
* @Apidoc\NotParse()
* @Apidoc\NotDebug()
*/
private function get_user_in_group($group_id='',$user_id='')
{
$list = request()->IM->group->getGroupMemberList($group_id,$user_id);
return $list;
}
}
+2 -2
View File
@@ -6,7 +6,7 @@ use support\Request;
use support\Response;
use hg\apidoc\annotation as Apidoc;
use app\model\User;
use app\model\Album as AlbumModel;
use app\model\Gallery as AlbumModel;
/**
* 群组管理
@@ -19,7 +19,7 @@ class GroupController extends BaseController
* @Apidoc\Title("群相片列表")
* @Apidoc\Method("POST")
* @Apidoc\Param("group_id", type="string", require=true, desc="群ID")
* @Apidoc\Param("page", type="int", require=true, desc="页码",default=1)
* @Apidoc\Param("offset", type="int", require=true, desc="偏移量",default=99999999999999)
* @Apidoc\Param("limit", type="int", require=true, desc="分页大小",default=10)
*/
function album_list(Request $request): Response
+8 -1
View File
@@ -401,6 +401,12 @@ class MomentsController extends BaseController{
$result[] = \support\Encrypt::userIDDecode($userID);
return $result;
}
/**
* 删除朋友圈
* @Apidoc\Method("POST")
* @Apidoc\Param("id", type="int",require=true, desc="朋友圈动态ID")
* @return Response
*/
function delete(Request $request): Response{
$id = $request->post('id');
$user = \support\Jwt::getUser();
@@ -422,7 +428,8 @@ class MomentsController extends BaseController{
}
/**
* 设置朋友圈背景
* @param Request $request
* @Apidoc\Method("POST")
* @Apidoc\Param("file", type="File",require=true, desc="文件")
* @return Response
*/
function setBanner(Request $request){
+189
View File
@@ -0,0 +1,189 @@
<?php
namespace app\api\controller;
use app\model\User as UserModel;
use app\model\Card;
use app\model\Cdkey;
use support\think\Db;
use hg\apidoc\annotation as Apidoc;
use Tinywan\Validate\Facade\Validate;
/**
* 通行证
*/
class PassportController extends BaseController{
/**
* 不需要鉴权的方法
* @var array
*/
public $noNeedAuth = ['*'];
public $noNeedLogin = [];
/**
* 安全验证
* @Apidoc\Method("POST")
* @Apidoc\Param("verify_type", type="string", require=true, desc="验证类型,email或mobile")
* @Apidoc\Param("code", type="string", require=true, desc="验证码,event=verify")
*/
public function security_verify()
{
$user = \support\Jwt::getUser();
$verify_type = input('verify_type');
if($verify_type=='mobile'){
captcha_verfiy('mobile', 'verify', $user->mobile);
}else if($verify_type == 'email'){
captcha_verfiy('email', 'verify', $user->email);
}else{
return $this->error(__('Invalid verify type'));
}
return $this->success(__('Security verify successfully'));
}
/**
* 绑定手机号
* @Apidoc\Method("POST")
* @Apidoc\Param("region", type="string", require=true, desc="区域代码")
* @Apidoc\Param("mobile", type="string", require=true, desc="手机号")
* @Apidoc\Param("code", type="string", require=true, desc="验证码,event=bind_mobile")
*/
public function bind_mobile()
{
$user = \support\Jwt::getUser();
$mobile = input('mobile');
$region = input('region');
// 验证手机号格式
if (!$mobile || !Validate::regex($mobile, "^1\d{10}$")) {
return $this->error(__('Incorrect mobile number format'));
}
// 验证手机号唯一性
if (UserModel::where('mobile', $mobile)->where('region',$region)->where('id', '<>', $user->id)->find()) {
return $this->error(__('Mobile number already exists'));
}
// 验证验证码
captcha_verfiy('mobile', 'bind_mobile', $mobile);
// 更新用户信息
$user->mobile = $mobile;
$user->region = $region;
//$user->mobile_verify = 1;
$user->save();
return $this->success(__('Mobile number bound successfully'));
}
/**
* 绑定邮箱
* @Apidoc\Method("POST")
* @Apidoc\Param("email", type="string", require=true, desc="邮箱")
* @Apidoc\Param("code", type="string", require=true, desc="验证码,event=bind_email")
*/
public function bind_email()
{
$user = \support\Jwt::getUser();
$email = input('email');
// 验证邮箱格式
if (!$email || !Validate::email($email)) {
return $this->error(__('Incorrect email format'));
}
// 验证邮箱唯一性
if (UserModel::where('email', $email)->where('id', '<>', $user->id)->find()) {
return $this->error(__('Email already exists'));
}
captcha_verfiy('email', 'bind_email', $email);
// 更新用户信息
$user->email = $email;
//$user->email_verify = 1;
$user->save();
return $this->success(__('Email bound successfully'));
}
/**
* 绑定用户名
* @Apidoc\Method("POST")
* @Apidoc\Param("username", type="string", require=true, desc="用户名")
* @Apidoc\Param("verify_type", type="string", require=true, desc="验证类型,email或mobile")
* @Apidoc\Param("code", type="string", require=true, desc="验证码,event=bind_username")
*/
public function bind_username()
{
$user = \support\Jwt::getUser();
$username = input('username');
$verify_type = input('verify_type');
// 验证用户名格式
if (!$username || strlen($username) < 3 || strlen($username) > 20) {
return $this->error(__('Username length must be between 3 and 20 characters'));
}
// 验证用户名唯一性
if (UserModel::where('username', $username)->where('id', '<>', $user->id)->find()) {
return $this->error(__('Username already exists'));
}
if($verify_type == 'mobile'){
captcha_verfiy('mobile', 'bind_username', $user->mobile);
}else if($verify_type == 'email'){
captcha_verfiy('email', 'bind_username', $user->email);
}
// 更新用户信息
$user->username = $username;
$user->save();
return $this->success(__('Username bound successfully'));
}
/**
* 解绑手机号
* @Apidoc\Method("POST")
* @Apidoc\Param("code", type="string", require=true, desc="验证码,event=unbind_mobile")
*/
public function unbind_mobile()
{
$user = \support\Jwt::getUser();
if (!$user->mobile) {
return $this->error(__('Mobile number not bound'));
}
// 验证验证码
captcha_verfiy('mobile', 'unbind_mobile', $user->mobile);
// 更新用户信息
$user->mobile = '';
$user->mobile_verify = 0;
$user->save();
return $this->success(__('Mobile number unbound successfully'));
}
/**
* 解绑邮箱
* @Apidoc\Method("POST")
* @Apidoc\Param("code", type="string", require=true, desc="验证码,event=unbind_email")
*/
public function unbind_email()
{
$user = \support\Jwt::getUser();
if (!$user->email) {
return $this->error(__('Email not bound'));
}
// 验证验证码
captcha_verfiy('email', 'unbind_email', $user->email);
// 更新用户信息
$user->email = '';
$user->email_verify = 0;
$user->save();
return $this->success(__('Email unbound successfully'));
}
}
+1 -2
View File
@@ -47,8 +47,7 @@ class TeamController extends BaseController{
// 'user_sales_reward' => cache('user_sales_reward_'.$user_id)??0,//销售奖
// 'user_output_reward' => cache('user_output_reward_'.$user_id)??0,//产值奖
// 'user_withdrawl_reward' => cache('user_withdrawl_reward'.$user_id)??0,//提现奖
'user' => $user[0],
'user' => $user[0]
];
return $this->success(__('successful'),$result);
+31 -5
View File
@@ -95,20 +95,46 @@ class UserController extends BaseController{
* @Apidoc\Param("password", type="string",require=true, desc="旧密码(新设时可用为空)")
* @Apidoc\Param("newpassword", type="string",require=true, desc="新密码")
* @Apidoc\Param("renewpassword", type="string",require=true, desc="新密码")
* @Apidoc\Param("code", type="string",require=true, desc="验证码")
* @Apidoc\Param("verify_type", type="string",require=true, desc="验证方式,email,mobile,password")
*/
public function change_trade_password(){
$user = \support\Jwt::getUser();
$password = input('password');
$newpassword = input('newpassword');
$renewpassword = input('renewpassword');
$verify_type = input('verify_type');
if (!$newpassword || !$renewpassword || $newpassword !== $renewpassword) {
return $this->error(__('Invalid parameters'));
}
try{
\support\Jwt::change_trade_pwd($newpassword,$password);
return $this->success(__('Reset trade password successful'));
} catch (\Throwable $e) {
return $this->error($e->getMessage());
if($verify_type == 'email'){
captcha_verfiy('email','reset_trade_pwd',$user->email);
try{
\support\Jwt::change_trade_pwd($newpassword,'',true);
return $this->success(__('Reset trade password successful'));
} catch (\Throwable $e) {
return $this->error($e->getMessage());
}
}else if($verify_type == 'mobile'){
captcha_verfiy('mobile','reset_trade_pwd',$user->mobile);
try{
\support\Jwt::change_trade_pwd($newpassword,'',true);
return $this->success(__('Reset trade password successful'));
} catch (\Throwable $e) {
return $this->error($e->getMessage());
}
}else if($verify_type == 'password'){
if (!$password) {
return $this->error(__('Invalid parameters'));
}
try{
\support\Jwt::change_trade_pwd($newpassword,$password);
return $this->success(__('Reset trade password successful'));
} catch (\Throwable $e) {
return $this->error($e->getMessage());
}
}
}
/**
* 根据关键字查询用户列表