From 68ab7e257b3c932ba4f8450dd6bcc7baf1f8a6ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BF=97=E5=BC=BA?= <357099073@qq.com> Date: Mon, 26 May 2025 17:34:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=82=AE=E7=AE=B1=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/controller/YunzerController.php | 327 ++++++++++++------ .../controller/YunzeradminController.php | 22 +- app/admin/model/MailConfig.php | 8 + app/admin/view/yunzer/mailconfig.php | 105 ++++++ 4 files changed, 332 insertions(+), 130 deletions(-) create mode 100644 app/admin/model/MailConfig.php create mode 100644 app/admin/view/yunzer/mailconfig.php diff --git a/app/admin/controller/YunzerController.php b/app/admin/controller/YunzerController.php index 51f7098..a4ea12c 100644 --- a/app/admin/controller/YunzerController.php +++ b/app/admin/controller/YunzerController.php @@ -13,10 +13,14 @@ use app\admin\model\AdminSysMenu; use app\admin\model\AdminUserGroup; use app\admin\model\AdminConfig; use app\admin\model\ZIconfont; +use app\admin\model\MailConfig; +use \PHPMailer\PHPMailer\PHPMailer; -class YunzerController extends Base{ +class YunzerController extends Base +{ # 菜单列表 - public function menuinfo(){ + public function menuinfo() + { $lists = AdminSysMenu::where('parent_id', 0)->order('sort DESC,smid DESC')->select(); View::assign([ 'lists' => $lists @@ -92,46 +96,47 @@ class YunzerController extends Base{ } } # 菜单修改 - public function menuedit(){ + public function menuedit() + { $req = request(); - if($req->isPost()){ - $smid = (int)input('post.smid'); + if ($req->isPost()) { + $smid = (int) input('post.smid'); $data['label'] = trim(input('post.label')); - if(!$data['label']){ + if (!$data['label']) { Log::record('编辑菜单', 0, '请输入菜单名称', '菜单管理'); $this->returnCode(1, '请输入菜单名称'); } $data['icon_class'] = trim(input('post.icon_class')); - $data['sort'] = (int)trim(input('post.sort')); - $data['status'] = (int)trim(input('post.status')); - $data['type'] = (int)trim(input('post.type',0)); - if($data['type'] == 1){ + $data['sort'] = (int) trim(input('post.sort')); + $data['status'] = (int) trim(input('post.status')); + $data['type'] = (int) trim(input('post.type', 0)); + if ($data['type'] == 1) { $data['src'] = trim(input('post.src1')); - if(empty($data['src'])){ + if (empty($data['src'])) { Log::record('编辑菜单', 0, '请输入内部跳转地址', '菜单管理'); $this->returnCode(1, '请输入内部跳转地址'); } - }else if($data['type'] == 2){ + } else if ($data['type'] == 2) { $data['src'] = trim(input('post.src2')); - if(empty($data['src'])){ + if (empty($data['src'])) { Log::record('编辑菜单', 0, '请输入超链接地址', '菜单管理'); $this->returnCode(1, '请输入超链接地址'); } - }else{ + } else { $data['src'] = ''; } // 保存用户 - $res = AdminSysMenu::where('smid',$smid)->update($data); - if(!$res){ + $res = AdminSysMenu::where('smid', $smid)->update($data); + if (!$res) { Log::record('编辑菜单', 0, '修改菜单失败', '菜单管理'); $this->returnCode(1, '修改菜单失败'); } Log::record('编辑菜单', 1, '', '菜单管理'); $this->returnCode(0); - }else{ - $smid = (int)input('get.smid'); - $lists = AdminSysMenu::where('smid',$smid)->find(); - $iconfont = ZIconfont::where('status',1)->select(); + } else { + $smid = (int) input('get.smid'); + $lists = AdminSysMenu::where('smid', $smid)->find(); + $iconfont = ZIconfont::where('status', 1)->select(); View::assign([ 'lists' => $lists, 'iconfont' => $iconfont @@ -140,15 +145,16 @@ class YunzerController extends Base{ } } # 菜单删除 - public function menudel(){ - $smid = (int)input('post.smid'); - $count = AdminSysMenu::where('parent_id',$smid)->count(); - if($count > 0){ + public function menudel() + { + $smid = (int) input('post.smid'); + $count = AdminSysMenu::where('parent_id', $smid)->count(); + if ($count > 0) { Log::record('删除菜单', 0, '该菜单下还有子菜单,不能删除', '菜单管理'); $this->returnCode(1, '该菜单下还有子菜单,不能删除'); } - $res = AdminSysMenu::where('smid',$smid)->delete(); - if(empty($res)){ + $res = AdminSysMenu::where('smid', $smid)->delete(); + if (empty($res)) { Log::record('删除菜单', 0, '删除菜单失败', '菜单管理'); $this->returnCode(1, '删除菜单失败'); } @@ -156,11 +162,12 @@ class YunzerController extends Base{ $this->returnCode(0); } # 按钮管理 - public function buttoninfo(){ - $smid = (int)input('get.smid'); - $lists = AdminSysMenu::where('parent_id',$smid)->order('sort DESC')->select()->toArray(); - if(!empty($lists)){ - foreach($lists as &$v){ + public function buttoninfo() + { + $smid = (int) input('get.smid'); + $lists = AdminSysMenu::where('parent_id', $smid)->order('sort DESC')->select()->toArray(); + if (!empty($lists)) { + foreach ($lists as &$v) { switch ($v['type']) { case 0: $v['type_name'] = '顶级菜单'; @@ -179,101 +186,103 @@ class YunzerController extends Base{ } View::assign([ 'lists' => $lists, - 'smid' => $smid + 'smid' => $smid ]); return View::fetch(); } # 按钮添加 - public function buttonadd(){ + public function buttonadd() + { $req = request(); - if($req->isPost()){ - $smid = (int)input('post.smid'); + if ($req->isPost()) { + $smid = (int) input('post.smid'); $data['label'] = trim(input('post.label')); - if(!$data['label']){ + if (!$data['label']) { Log::record('添加按钮', 0, '请输入按钮名称', '按钮管理'); $this->returnCode(1, '请输入按钮名称'); } $data['icon_class'] = trim(input('post.icon_class')); - $data['sort'] = (int)trim(input('post.sort')); - $data['status'] = (int)trim(input('post.status')); - $data['type'] = (int)trim(input('post.type')); - if(empty($data['type'])){ + $data['sort'] = (int) trim(input('post.sort')); + $data['status'] = (int) trim(input('post.status')); + $data['type'] = (int) trim(input('post.type')); + if (empty($data['type'])) { Log::record('添加按钮', 0, '请选择按钮类型', '按钮管理'); $this->returnCode(1, '请选择按钮类型'); } - if($data['type'] == 1){ + if ($data['type'] == 1) { $data['src'] = trim(input('post.src1')); - if(empty($data['src'])){ + if (empty($data['src'])) { Log::record('添加按钮', 0, '请输入内部跳转地址', '按钮管理'); $this->returnCode(1, '请输入内部跳转地址'); } - }else if($data['type'] == 2){ + } else if ($data['type'] == 2) { $data['src'] = trim(input('post.src2')); - if(empty($data['src'])){ + if (empty($data['src'])) { Log::record('添加按钮', 0, '请输入超链接地址', '按钮管理'); $this->returnCode(1, '请输入超链接地址'); } } $data['parent_id'] = $smid; $res = AdminSysMenu::insert($data); - if(!$res){ + if (!$res) { Log::record('添加按钮', 0, '添加按钮失败', '按钮管理'); $this->returnCode(1, '添加按钮失败'); } Log::record('添加按钮', 1, '', '按钮管理'); $this->returnCode(0); - }else{ - $smid = (int)input('get.smid'); - $iconfont = ZIconfont::where('status',1)->select(); + } else { + $smid = (int) input('get.smid'); + $iconfont = ZIconfont::where('status', 1)->select(); View::assign([ - 'smid' => $smid, + 'smid' => $smid, 'iconfont' => $iconfont ]); return View::fetch(); } } # 按钮修改 - public function buttonedit(){ + public function buttonedit() + { $req = request(); - if($req->isPost()){ - $smid = (int)input('post.smid'); + if ($req->isPost()) { + $smid = (int) input('post.smid'); $data['label'] = trim(input('post.label')); - if(!$data['label']){ + if (!$data['label']) { Log::record('编辑按钮', 0, '请输入按钮名称', '按钮管理'); $this->returnCode(1, '请输入按钮名称'); } $data['icon_class'] = trim(input('post.icon_class')); - $data['sort'] = (int)trim(input('post.sort')); - $data['status'] = (int)trim(input('post.status')); - $data['type'] = (int)trim(input('post.type')); - if(empty($data['type'])){ + $data['sort'] = (int) trim(input('post.sort')); + $data['status'] = (int) trim(input('post.status')); + $data['type'] = (int) trim(input('post.type')); + if (empty($data['type'])) { Log::record('编辑按钮', 0, '请选择按钮类型', '按钮管理'); $this->returnCode(1, '请选择按钮类型'); } - if($data['type'] == 1){ + if ($data['type'] == 1) { $data['src'] = trim(input('post.src1')); - if(empty($data['src'])){ + if (empty($data['src'])) { Log::record('编辑按钮', 0, '请输入内部跳转地址', '按钮管理'); $this->returnCode(1, '请输入内部跳转地址'); } - }else if($data['type'] == 2){ + } else if ($data['type'] == 2) { $data['src'] = trim(input('post.src2')); - if(empty($data['src'])){ + if (empty($data['src'])) { Log::record('编辑按钮', 0, '请输入超链接地址', '按钮管理'); $this->returnCode(1, '请输入超链接地址'); } } - $res = AdminSysMenu::where('smid',$smid)->update($data); - if(!$res){ + $res = AdminSysMenu::where('smid', $smid)->update($data); + if (!$res) { Log::record('编辑按钮', 0, '修改按钮失败', '按钮管理'); $this->returnCode(1, '修改按钮失败'); } Log::record('编辑按钮', 1, '', '按钮管理'); $this->returnCode(0); - }else{ - $smid = (int)input('get.smid'); - $lists = AdminSysMenu::where('smid',$smid)->find(); - $iconfont = ZIconfont::where('status',1)->select(); + } else { + $smid = (int) input('get.smid'); + $lists = AdminSysMenu::where('smid', $smid)->find(); + $iconfont = ZIconfont::where('status', 1)->select(); View::assign([ 'lists' => $lists, 'iconfont' => $iconfont @@ -282,10 +291,11 @@ class YunzerController extends Base{ } } # 按钮删除 - public function buttondel(){ - $smid = (int)input('post.smid'); - $res = AdminSysMenu::where('smid',$smid)->delete(); - if(empty($res)){ + public function buttondel() + { + $smid = (int) input('post.smid'); + $res = AdminSysMenu::where('smid', $smid)->delete(); + if (empty($res)) { Log::record('删除按钮', 0, '删除按钮失败', '按钮管理'); $this->returnCode(1, '删除按钮失败'); } @@ -293,80 +303,83 @@ class YunzerController extends Base{ $this->returnCode(0); } # 配置列表 - public function configlist(){ + public function configlist() + { $req = request(); - if($req->isPost()){ - $page = (int)input('post.page',1); - $limit = (int)input('post.limit',$this->config['admin_page']); + if ($req->isPost()) { + $page = (int) input('post.page', 1); + $limit = (int) input('post.limit', $this->config['admin_page']); $count = AdminConfig::count(); - $lists = AdminConfig::page($page,$limit)->order('config_sort DESC,config_id DESC')->select(); - $this->returnCode(0,$lists,$count); - }else{ + $lists = AdminConfig::page($page, $limit)->order('config_sort DESC,config_id DESC')->select(); + $this->returnCode(0, $lists, $count); + } else { return View::fetch(); } } # 配置添加 - public function configadd(){ + public function configadd() + { $req = request(); - if($req->isPost()){ + if ($req->isPost()) { $data['config_name'] = trim(input('post.config_name')); - if(empty($data['config_name'])){ + if (empty($data['config_name'])) { Log::record('添加配置', 0, '请输入关键词', '系统配置'); - $this->returnCode(1,'请输入关键词'); + $this->returnCode(1, '请输入关键词'); } $data['config_info'] = trim(input('post.config_info')); - if(empty($data['config_info'])){ + if (empty($data['config_info'])) { Log::record('添加配置', 0, '请输入作用', '系统配置'); - $this->returnCode(1,'请输入作用'); + $this->returnCode(1, '请输入作用'); } $data['config_type'] = trim(input('post.config_type')); $data['config_desc'] = trim(input('post.config_desc')); $data['config_status'] = trim(input('post.config_status')); $data['config_sort'] = trim(input('post.config_sort')); $res = AdminConfig::insert($data); - if(empty($res)){ + if (empty($res)) { Log::record('添加配置', 0, '添加配置失败', '系统配置'); $this->returnCode(1, '添加配置失败'); } Log::record('添加配置', 1, '', '系统配置'); $this->returnCode(0); - }else{ + } else { return View::fetch(); } } # 配置修改 - public function configedit(){ + public function configedit() + { $req = request(); - if($req->isPost()){ - $config_id = (int)input('post.config_id'); - if(empty($config_id)){ + if ($req->isPost()) { + $config_id = (int) input('post.config_id'); + if (empty($config_id)) { Log::record('编辑配置', 0, '请选择一条数据', '系统配置'); - $this->returnCode(1,'请选择一条数据'); + $this->returnCode(1, '请选择一条数据'); } $data['config_name'] = trim(input('post.config_name')); - if(empty($data['config_name'])){ + if (empty($data['config_name'])) { Log::record('编辑配置', 0, '请输入关键词', '系统配置'); - $this->returnCode(1,'请输入关键词'); + $this->returnCode(1, '请输入关键词'); } $data['config_info'] = trim(input('post.config_info')); - if(empty($data['config_info'])){ + if (empty($data['config_info'])) { Log::record('编辑配置', 0, '请输入作用', '系统配置'); - $this->returnCode(1,'请输入作用'); + $this->returnCode(1, '请输入作用'); } $data['config_type'] = trim(input('post.config_type')); $data['config_desc'] = trim(input('post.config_desc')); $data['config_status'] = trim(input('post.config_status')); $data['config_sort'] = trim(input('post.config_sort')); - $res = AdminConfig::where('config_id',$config_id)->update($data); - if(empty($res)){ + $res = AdminConfig::where('config_id', $config_id)->update($data); + if (empty($res)) { Log::record('编辑配置', 0, '修改配置失败', '系统配置'); $this->returnCode(1, '修改配置失败'); } Log::record('编辑配置', 1, '', '系统配置'); $this->returnCode(0); - }else{ - $config_id = (int)input('get.config_id'); - $find = AdminConfig::where('config_id',$config_id)->find(); + } else { + $config_id = (int) input('get.config_id'); + $find = AdminConfig::where('config_id', $config_id)->find(); View::assign([ 'find' => $find ]); @@ -374,14 +387,15 @@ class YunzerController extends Base{ } } # 配置删除 - public function configdel(){ - $config_id = (int)input('post.config_id'); - if(empty($config_id)){ + public function configdel() + { + $config_id = (int) input('post.config_id'); + if (empty($config_id)) { Log::record('删除配置', 0, '请选择一条数据', '系统配置'); - $this->returnCode(1,'请选择一条数据'); + $this->returnCode(1, '请选择一条数据'); } - $res = AdminConfig::where('config_id',$config_id)->delete(); - if(empty($res)){ + $res = AdminConfig::where('config_id', $config_id)->delete(); + if (empty($res)) { Log::record('删除配置', 0, '删除配置失败', '系统配置'); $this->returnCode(1, '删除配置失败'); } @@ -389,23 +403,24 @@ class YunzerController extends Base{ $this->returnCode(0); } # 配置值 - public function configvalue(){ + public function configvalue() + { $req = request(); - if($req->isPost()){ + if ($req->isPost()) { $post = input('post.'); - if(empty($post)){ + if (empty($post)) { Log::record('更新配置值', 0, '数据不能为空', '系统配置'); - $this->returnCode(1,'数据不能为空'); + $this->returnCode(1, '数据不能为空'); } $oConfig = new YzAdminConfig(); $updateAll = $oConfig->updateAll($post); - if(empty($updateAll)){ + if (empty($updateAll)) { Log::record('更新配置值', 0, '更新配置值失败', '系统配置'); $this->returnCode(1, '更新配置值失败'); } Log::record('更新配置值', 1, '', '系统配置'); $this->returnCode(0); - }else{ + } else { $lists = AdminConfig::order('config_sort DESC,config_id')->select(); View::assign([ 'lists' => $lists @@ -413,4 +428,92 @@ class YunzerController extends Base{ return View::fetch(); } } + + + // 邮件配置 + public function mailconfig() + { + if (Request::isPost()) { + $data = [ + 'smtp_host' => input('post.smtp_host'), + 'smtp_port' => input('post.smtp_port'), + 'smtp_email' => input('post.smtp_email'), + 'smtp_password' => input('post.smtp_password'), + 'smtp_name' => input('post.smtp_name') + ]; + + // 验证必填字段 + if (empty($data['smtp_host']) || empty($data['smtp_port']) || empty($data['smtp_email']) || empty($data['smtp_password'])) { + // Log::record('修改邮件配置', 0, '必填字段不能为空', '邮件配置'); + return json(['code' => 1, 'msg' => '必填字段不能为空']); + } + + $res = MailConfig::where('id', 1)->update($data); + if ($res === false) { + // Log::record('修改邮件配置', 0, '更新邮件配置失败', '邮件配置'); + return json(['code' => 1, 'msg' => '更新邮件配置失败']); + } + // Log::record('修改邮件配置', 1, '', '邮件配置'); + return json(['code' => 0, 'msg' => '更新成功']); + } + + $config = MailConfig::where('id', 1)->find(); + View::assign([ + 'config' => $config + ]); + return View::fetch(); + } + + // 获取邮件配置 + public function getMailConfig() + { + $config = MailConfig::where('id', 1)->find(); + if ($config) { + return json(['code' => 0, 'msg' => '获取成功', 'data' => $config]); + } + return json(['code' => 1, 'msg' => '获取配置失败']); + } + + // 测试邮件配置 + public function testMailConfig() + { + if (!Request::isPost()) { + return json(['code' => 1, 'msg' => '请求方法无效']); + } + + $email = input('post.email'); + $config = input('post.config'); + + if (empty($email) || empty($config)) { + return json(['code' => 1, 'msg' => '参数错误']); + } + + try { + // 配置邮件服务器 + $mail = new PHPMailer(true); + $mail->isSMTP(); + $mail->Host = $config['smtp_host']; + $mail->Port = $config['smtp_port']; + $mail->SMTPAuth = true; + $mail->Username = $config['smtp_email']; + $mail->Password = $config['smtp_password']; + $mail->SMTPSecure = 'ssl'; + $mail->CharSet = 'UTF-8'; + + // 设置发件人 + $mail->setFrom($config['smtp_email'], $config['smtp_name']); + $mail->addAddress($email); + + // 设置邮件内容 + $mail->isHTML(true); + $mail->Subject = '邮件配置测试'; + $mail->Body = '这是一封测试邮件,如果您收到这封邮件,说明邮件配置正确。'; + + $mail->send(); + return json(['code' => 0, 'msg' => '发送成功']); + } catch (\Exception $e) { + //Log::record('测试邮件配置', 0, $e->getMessage(), '邮件配置'); + return json(['code' => 1, 'msg' => '发送失败:' . $e->getMessage()]); + } + } } \ No newline at end of file diff --git a/app/admin/controller/YunzeradminController.php b/app/admin/controller/YunzeradminController.php index 53431c2..b0e5225 100644 --- a/app/admin/controller/YunzeradminController.php +++ b/app/admin/controller/YunzeradminController.php @@ -4,7 +4,7 @@ use app\admin\controller\Base; use think\facade\Db; use think\facade\View; use think\facade\Request; -use app\admin\controller\Log; +use app\admin\controller\LogController as Log; use app\admin\model\AdminSysMenu; use app\admin\model\AdminUserGroup; use app\admin\model\AdminUser; @@ -102,23 +102,8 @@ class YunzeradminController extends Base $group['rights'] = json_decode($group['rights']); } - $menus = AdminSysMenu::order('type,sort desc')->where('status', '=', 1)->select(); - $menu = []; - - // 先处理所有父菜单 - foreach ($menus as $menus_v) { - if ($menus_v['parent_id'] == 0) { - $menu[$menus_v['smid']] = $menus_v; - $menu[$menus_v['smid']]['children'] = []; // 初始化 children 数组 - } - } - - // 再处理子菜单 - foreach ($menus as $menus_v) { - if ($menus_v['parent_id'] != 0 && isset($menu[$menus_v['parent_id']])) { - $menu[$menus_v['parent_id']]['children'][] = $menus_v; - } - } + // 使用模型中的 getMenuTree 方法获取菜单树 + $menu = AdminSysMenu::getMenuTree(); View::assign([ 'group' => $group, @@ -467,4 +452,5 @@ class YunzeradminController extends Base return json(['code' => 1, 'msg' => '请求方法无效']); } + } \ No newline at end of file diff --git a/app/admin/model/MailConfig.php b/app/admin/model/MailConfig.php new file mode 100644 index 0000000..574a3e6 --- /dev/null +++ b/app/admin/model/MailConfig.php @@ -0,0 +1,8 @@ + +