yunzer_under/app/admin/controller/YunzerController.php
2025-07-14 14:48:36 +08:00

556 lines
18 KiB
PHP

<?php
/**
* 商业使用授权协议
*
* Copyright (c) 2025 [云泽网]. 保留所有权利.
*
* 本软件仅供评估使用。任何商业用途必须获得书面授权许可。
* 未经授权商业使用本软件属于侵权行为,将承担法律责任。
*
* 授权购买请联系: 357099073@qq.com
* 官方网站: https://www.yunzer.cn
*
* 评估用户须知:
* 1. 禁止移除版权声明
* 2. 禁止用于生产环境
* 3. 禁止转售或分发
*/
/**
* 后台管理系统-核心功能
*/
namespace app\admin\controller;
use app\admin\controller\Base;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
use app\admin\model\YzAdminConfig;
use app\admin\controller\LogController as Log;
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;
use PHPMailer\PHPMailer\Exception;
class YunzerController extends Base
{
# 菜单列表
public function menuinfo()
{
$lists = AdminSysMenu::where('parent_id', 0)->order('sort DESC,smid DESC')->select();
View::assign([
'lists' => $lists
]);
return View::fetch();
}
# 菜单添加
public function menuadd()
{
$req = request();
if ($req->isPost()) {
$data['label'] = trim(input('post.label'));
if (empty($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['src'] = trim(input('post.src1'));
if (empty($data['src'])) {
Log::record('添加菜单', 0, '请输入内部跳转地址', '菜单管理');
$this->returnCode(1, '请输入内部跳转地址');
}
} else if ($data['type'] == 2) {
$data['src'] = trim(input('post.src2'));
if (empty($data['src'])) {
Log::record('添加菜单', 0, '请输入超链接地址', '菜单管理');
$this->returnCode(1, '请输入超链接地址');
}
} else {
$data['src'] = '';
}
// 保存菜单
$res = AdminSysMenu::insert($data);
if (!$res) {
Log::record('添加菜单', 0, '添加菜单失败', '菜单管理');
$this->returnCode(1, '添加菜单失败');
}
// 获取新插入的菜单ID
$newMenuId = AdminSysMenu::getLastInsID();
// 获取所有管理员用户组
$adminGroups = AdminUserGroup::select();
foreach ($adminGroups as $group) {
// 获取现有权限
$rights = [];
if (!empty($group['rights'])) {
$rights = json_decode($group['rights'], true);
}
// 添加新菜单ID到权限列表
if (!in_array($newMenuId, $rights)) {
$rights[] = $newMenuId;
// 更新用户组权限
AdminUserGroup::where('group_id', $group['group_id'])
->update(['rights' => json_encode($rights)]);
}
}
Log::record('添加菜单', 1, '', '菜单管理');
$this->returnCode(0);
} else {
$iconfont = ZIconfont::where('status', 1)->select();
View::assign([
'iconfont' => $iconfont
]);
return View::fetch();
}
}
# 菜单修改
public function menuedit()
{
$req = request();
if ($req->isPost()) {
$smid = (int) input('post.smid');
$data['label'] = trim(input('post.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['src'] = trim(input('post.src1'));
if (empty($data['src'])) {
Log::record('编辑菜单', 0, '请输入内部跳转地址', '菜单管理');
$this->returnCode(1, '请输入内部跳转地址');
}
} else if ($data['type'] == 2) {
$data['src'] = trim(input('post.src2'));
if (empty($data['src'])) {
Log::record('编辑菜单', 0, '请输入超链接地址', '菜单管理');
$this->returnCode(1, '请输入超链接地址');
}
} else {
$data['src'] = '';
}
// 保存用户
$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();
View::assign([
'lists' => $lists,
'iconfont' => $iconfont
]);
return View::fetch();
}
}
# 菜单删除
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)) {
Log::record('删除菜单', 0, '删除菜单失败', '菜单管理');
$this->returnCode(1, '删除菜单失败');
}
Log::record('删除菜单', 1, '', '菜单管理');
$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) {
switch ($v['type']) {
case 0:
$v['type_name'] = '顶级菜单';
break;
case 1:
$v['type_name'] = '内部跳转';
break;
case 2:
$v['type_name'] = '超链接';
break;
default:
$v['type_name'] = '未规划类型';
break;
}
}
}
View::assign([
'lists' => $lists,
'smid' => $smid
]);
return View::fetch();
}
# 按钮添加
public function buttonadd()
{
$req = request();
if ($req->isPost()) {
$smid = (int) input('post.smid');
$data['label'] = trim(input('post.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'])) {
Log::record('添加按钮', 0, '请选择按钮类型', '按钮管理');
$this->returnCode(1, '请选择按钮类型');
}
if ($data['type'] == 1) {
$data['src'] = trim(input('post.src1'));
if (empty($data['src'])) {
Log::record('添加按钮', 0, '请输入内部跳转地址', '按钮管理');
$this->returnCode(1, '请输入内部跳转地址');
}
} else if ($data['type'] == 2) {
$data['src'] = trim(input('post.src2'));
if (empty($data['src'])) {
Log::record('添加按钮', 0, '请输入超链接地址', '按钮管理');
$this->returnCode(1, '请输入超链接地址');
}
}
$data['parent_id'] = $smid;
$res = AdminSysMenu::insert($data);
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();
View::assign([
'smid' => $smid,
'iconfont' => $iconfont
]);
return View::fetch();
}
}
# 按钮修改
public function buttonedit()
{
$req = request();
if ($req->isPost()) {
$smid = (int) input('post.smid');
$data['label'] = trim(input('post.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'])) {
Log::record('编辑按钮', 0, '请选择按钮类型', '按钮管理');
$this->returnCode(1, '请选择按钮类型');
}
if ($data['type'] == 1) {
$data['src'] = trim(input('post.src1'));
if (empty($data['src'])) {
Log::record('编辑按钮', 0, '请输入内部跳转地址', '按钮管理');
$this->returnCode(1, '请输入内部跳转地址');
}
} else if ($data['type'] == 2) {
$data['src'] = trim(input('post.src2'));
if (empty($data['src'])) {
Log::record('编辑按钮', 0, '请输入超链接地址', '按钮管理');
$this->returnCode(1, '请输入超链接地址');
}
}
$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();
View::assign([
'lists' => $lists,
'iconfont' => $iconfont
]);
return View::fetch();
}
}
# 按钮删除
public function buttondel()
{
$smid = (int) input('post.smid');
$res = AdminSysMenu::where('smid', $smid)->delete();
if (empty($res)) {
Log::record('删除按钮', 0, '删除按钮失败', '按钮管理');
$this->returnCode(1, '删除按钮失败');
}
Log::record('删除按钮', 1, '', '按钮管理');
$this->returnCode(0);
}
# 配置列表
public function configlist()
{
$req = request();
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 {
return View::fetch();
}
}
# 配置添加
public function configadd()
{
$req = request();
if ($req->isPost()) {
$data['config_name'] = trim(input('post.config_name'));
if (empty($data['config_name'])) {
Log::record('添加配置', 0, '请输入关键词', '系统配置');
$this->returnCode(1, '请输入关键词');
}
$data['config_info'] = trim(input('post.config_info'));
if (empty($data['config_info'])) {
Log::record('添加配置', 0, '请输入作用', '系统配置');
$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)) {
Log::record('添加配置', 0, '添加配置失败', '系统配置');
$this->returnCode(1, '添加配置失败');
}
Log::record('添加配置', 1, '', '系统配置');
$this->returnCode(0);
} else {
return View::fetch();
}
}
# 配置修改
public function configedit()
{
$req = request();
if ($req->isPost()) {
$config_id = (int) input('post.config_id');
if (empty($config_id)) {
Log::record('编辑配置', 0, '请选择一条数据', '系统配置');
$this->returnCode(1, '请选择一条数据');
}
$data['config_name'] = trim(input('post.config_name'));
if (empty($data['config_name'])) {
Log::record('编辑配置', 0, '请输入关键词', '系统配置');
$this->returnCode(1, '请输入关键词');
}
$data['config_info'] = trim(input('post.config_info'));
if (empty($data['config_info'])) {
Log::record('编辑配置', 0, '请输入作用', '系统配置');
$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)) {
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();
View::assign([
'find' => $find
]);
return View::fetch();
}
}
# 配置删除
public function configdel()
{
$config_id = (int) input('post.config_id');
if (empty($config_id)) {
Log::record('删除配置', 0, '请选择一条数据', '系统配置');
$this->returnCode(1, '请选择一条数据');
}
$res = AdminConfig::where('config_id', $config_id)->delete();
if (empty($res)) {
Log::record('删除配置', 0, '删除配置失败', '系统配置');
$this->returnCode(1, '删除配置失败');
}
Log::record('删除配置', 1, '', '系统配置');
$this->returnCode(0);
}
# 配置值
public function configvalue()
{
$req = request();
if ($req->isPost()) {
$post = input('post.');
if (empty($post)) {
Log::record('更新配置值', 0, '数据不能为空', '系统配置');
$this->returnCode(1, '数据不能为空');
}
// 获取所有配置项,检查 config_type 为 4 的项
$allConfigs = AdminConfig::order('config_sort DESC,config_id')->select();
foreach ($allConfigs as $config) {
if ($config['config_type'] == 4) {
$checkboxName = $config['config_name'] . '_checkbox';
$configName = $config['config_name'];
if (!isset($post[$checkboxName])) {
// 复选框未选中,手动添加对应的值为 0
$post[$configName] = 0;
} else {
// 复选框选中,确保值为 1
$post[$configName] = 1;
}
// 移除 checkbox 字段
unset($post[$checkboxName]);
}
}
$oConfig = new YzAdminConfig();
$updateAll = $oConfig->updateAll($post);
if (empty($updateAll)) {
Log::record('更新配置值', 0, '更新配置值失败', '系统配置');
$this->returnCode(1, '更新配置值失败');
}
Log::record('更新配置值', 1, '', '系统配置');
$this->returnCode(0);
} else {
$lists = AdminConfig::order('config_sort DESC,config_id')->select();
View::assign([
'lists' => $lists
]);
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()]);
}
}
}