系统设置
1. 功能概述
系统设置模块是后台管理的核心功能,包含以下主要模块:
- 系统信息管理
- 用户组(角色)管理
- 部门管理
- 岗位管理
- 菜单管理
- 网站配置管理
- 附件上传管理
- 协议管理
- 地区管理
- 渠道管理
- 系统环境管理
- 计划任务管理
1.1 系统设置功能流程
mermaid
flowchart TD
A[系统设置] --> B[系统信息管理]
A --> C[用户组管理]
A --> D[部门管理]
A --> E[岗位管理]
A --> F[菜单管理]
A --> G[网站配置管理]
A --> H[附件上传管理]
A --> I[协议管理]
A --> J[地区管理]
A --> K[渠道管理]
A --> L[系统环境管理]
A --> M[计划任务管理]
subgraph 权限管理
C --> C1[角色创建]
C --> C2[权限分配]
C --> C3[角色状态管理]
D --> D1[部门创建]
D --> D2[部门树形结构]
E --> E1[岗位创建]
E --> E2[岗位与部门关联]
F --> F1[菜单创建]
F --> F2[菜单权限控制]
end
subgraph 系统配置
G --> G1[网站基本信息]
G --> G2[服务信息配置]
G --> G3[版权信息设置]
H --> H1[文件上传]
H --> H2[附件分组]
H --> H3[存储配置]
I --> I1[协议编辑]
I --> I2[协议管理]
end
subgraph 系统管理
B --> B1[系统信息获取]
B --> B2[推广二维码生成]
J --> J1[地区层级管理]
J --> J2[地址解析]
K --> K1[渠道类型管理]
K --> K2[场景域名配置]
L --> L1[环境信息获取]
L --> L2[消息队列校验]
M --> M1[任务创建]
M --> M2[任务执行]
M --> M3[执行记录管理]
end2. 路由配置
系统设置相关的路由配置位于 backend/app/adminapi/route/sys.php 文件中,主要包含以下路由组:
2.1 系统整体信息
GET /sys/info:获取系统信息GET /sys/url:获取系统URL信息GET /sys/qrcode:获取推广二维码
2.2 用户组管理
GET /sys/role:用户组列表GET /sys/role/all:所有用户组GET /sys/role/:role_id:用户组详情POST /sys/role:新增用户组PUT /sys/role/status:修改角色状态PUT /sys/role/:role_id:编辑用户组DELETE /sys/role/:role_id:删除用户组
2.3 部门管理
GET /sys/dept:部门列表GET /sys/dept/all:所有部门GET /sys/dept/tree:部门树形列表GET /sys/dept/:id:部门详情POST /sys/dept:新增部门PUT /sys/dept/:id:编辑部门DELETE /sys/dept/:id:删除部门
2.4 岗位管理
GET /sys/position:岗位列表GET /sys/position/all:所有岗位GET /sys/position/dept/:dept_id:根据部门获取岗位列表GET /sys/position/:id:岗位详情POST /sys/position:新增岗位PUT /sys/position/:id:编辑岗位DELETE /sys/position/:id:删除岗位
2.5 菜单管理
POST /sys/menu:新增菜单PUT /sys/menu/:menu_key:更新菜单GET /sys/menu:菜单列表DELETE /sys/menu/:menu_key:删除菜单GET /sys/menu/info/:menu_key:获取菜单信息POST /sys/menu/refresh:初始化菜单GET /sys/menutype:菜单类型GET /sys/authmenu:授权用户菜单GET /sys/menu/mothod:获取方法类型GET /sys/menu/system_menu:获取系统菜单GET /sys/menu/addon_menu/:app_key:获取插件菜单GET /sys/menu/dir/:addon:根据类型获取菜单目录
2.6 网站配置管理
GET /sys/config/website:获取网站设置PUT /sys/config/website:设置网站设置GET /sys/config/service:获取服务信息设置GET /sys/config/copyright:获取版权设置PUT /sys/config/copyright:设置版权设置PUT /sys/config/map:设置地图GET /sys/config/map:获取地图设置GET /sys/config/login:获取登录注册设置PUT /sys/config/login:设置登录注册设置PUT /sys/config/developer_token:设置开发者keyGET /sys/config/developer_token:获取开发者keyGET /sys/config/layout:获取布局设置PUT /sys/config/layout:设置布局设置GET /sys/config/themecolor:获取色调设置PUT /sys/config/themecolor:设置色调设置
2.7 附件上传管理
POST /sys/image:附件图片上传POST /sys/video:附件视频上传POST /sys/audio:附件音频上传POST /sys/document/:type:附件上传GET /sys/attachment:附件列表DELETE /sys/attachment/:att_id:删除附件DELETE /sys/attachment/del:批量删除附件PUT /sys/attachment/batchmove:批量移动图片分组POST /sys/attachment/category:附件组新增PUT /sys/attachment/category/:id:附件组更新GET /sys/attachment/category:附件组列表DELETE /sys/attachment/category/:id:删除附件组GET /sys/storage:获取存储列表GET /sys/storage/:storage_type:存储详情PUT /sys/storage/:storage_type:存储修改PUT /sys/upload/config:上传设置GET /sys/upload/config:获取上传设置
2.8 协议管理
GET /sys/agreement:协议列表GET /sys/agreement/:key:协议详情PUT /sys/agreement/:key:编辑协议
2.9 地区管理
GET /sys/area/list_by_pid/:pid:通过pid获取地区列表GET /sys/area/tree/:level:通过层级获取地区树形列表GET /sys/area/get_info:获取地址位置信息GET /sys/area/contrary:反向地址解析GET /sys/area/code/:code:根据地址码获取省市县数据
2.10 渠道管理
GET /sys/channel:获取渠道类型GET /sys/scene_domain:获取场景域名
2.11 系统环境管理
GET /sys/system:获取系统环境信息GET /sys/job:校验消息队列GET /sys/schedule:校验计划任务GET /sys/env:获取环境变量
2.12 计划任务管理
GET /sys/schedule/list:计划任务列表GET /sys/schedule/:id:任务详情PUT /sys/schedule/modify/status/:id:设置任务状态POST /sys/schedule:任务新增PUT /sys/schedule/:id:编辑任务DELETE /sys/schedule/:id:删除任务GET /sys/schedule/type:任务模式GET /sys/schedule/template:任务模板GET /sys/schedule/datetype:任务时间间隔PUT /sys/schedule/do/:id:执行一次任务POST /sys/schedule/reset:重置定时任务GET /sys/schedule/log/list:任务执行记录列表PUT /sys/schedule/log/delete:删除执行记录PUT /sys/schedule/log/clear:清空执行记录
2.13 应用管理
GET /sys/applist:获取应用列表
2.14 缓存管理
POST /sys/schema/clear:清理数据库结构缓存POST /sys/cache/clear:清理缓存
2.15 公共字典数据
GET /sys/date/month:获取月份数据GET /sys/date/week:获取星期数据
2.16 百度编辑器
GET /sys/ueditor:获取百度编辑器配置POST /sys/ueditor:百度编辑器文件上传
2.17 系统检测
GET /sys/check_imagick:检验是否开启imagick
3. 核心功能实现
3.1 系统信息管理
3.1.1 系统信息获取
- 获取系统基本信息,包括版本、运行状态等
- 生成推广二维码
- 管理系统URL配置
3.1.2 实现逻辑
php
// 系统信息获取示例
public function info() {
$info = [
'version' => config('version.version'),
'php_version' => PHP_VERSION,
'mysql_version' => $this->getMysqlVersion(),
'os' => php_uname(),
'server' => $_SERVER['SERVER_SOFTWARE'],
];
return success($info);
}3.2 用户组(角色)管理
3.2.1 功能实现
- 创建、编辑、删除用户组
- 管理用户组权限
- 设置用户组状态
3.2.2 实现逻辑
php
// 用户组列表示例
public function lists() {
$params = $this->request->params([
[ 'page', 1 ],
[ 'limit', 10 ],
[ 'keyword', '' ],
]);
$roleModel = new SysRole();
$list = $roleModel->where(function($query) use ($params) {
if (!empty($params['keyword'])) {
$query->where('role_name', 'like', '%' . $params['keyword'] . '%');
}
})->paginate([
'page' => $params['page'],
'list_rows' => $params['limit']
]);
return success($list);
}3.3 部门管理
3.3.1 功能实现
- 构建部门树形结构
- 部门的增删改查
- 部门与岗位的关联
3.3.2 实现逻辑
php
// 部门树形列表示例
public function getTree() {
$deptModel = new SysDept();
$list = $deptModel->order('sort asc')->select()->toArray();
$tree = $this->buildTree($list);
return success($tree);
}
// 构建树形结构
private function buildTree($data, $pid = 0) {
$tree = [];
foreach ($data as $item) {
if ($item['pid'] == $pid) {
$children = $this->buildTree($data, $item['id']);
if (!empty($children)) {
$item['children'] = $children;
}
$tree[] = $item;
}
}
return $tree;
}3.4 岗位管理
3.4.1 功能实现
- 岗位的增删改查
- 按部门查询岗位
- 岗位与用户的关联
3.4.2 实现逻辑
php
// 根据部门获取岗位列表示例
public function getByDept($dept_id) {
$positionModel = new SysPosition();
$list = $positionModel->where('dept_id', $dept_id)->select();
return success($list);
}3.5 菜单管理
3.5.1 功能实现
- 菜单的增删改查
- 菜单权限控制
- 菜单类型管理
- 系统菜单与插件菜单的管理
3.5.2 实现逻辑
php
// 菜单列表示例
public function lists() {
$params = $this->request->params([
[ 'menu_type', '' ],
[ 'addon', '' ],
]);
$menuModel = new SysMenu();
$list = $menuModel->where(function($query) use ($params) {
if (!empty($params['menu_type'])) {
$query->where('menu_type', $params['menu_type']);
}
if (!empty($params['addon'])) {
$query->where('addon', $params['addon']);
}
})->order('sort asc')->select();
$tree = $this->buildMenuTree($list);
return success($tree);
}3.6 网站配置管理
3.6.1 功能实现
- 网站基本信息设置
- 服务信息配置
- 版权信息设置
- 地图配置
- 登录注册设置
- 开发者key管理
- 布局设置
- 色调设置
3.6.2 实现逻辑
php
// 获取网站设置示例
public function getWebsite() {
$configService = new ConfigService();
$websiteConfig = $configService->getWebSite();
return success($websiteConfig);
}
// 设置网站设置示例
public function setWebsite() {
$data = $this->request->params([
[ "site_name", "" ],
[ "logo", "" ],
[ "keywords", "" ],
[ "desc", "" ],
[ "latitude", "" ],
[ "longitude", "" ],
[ "province_id", 0 ],
[ "city_id", 0 ],
[ "district_id", 0 ],
[ "address", "" ],
[ "full_address", "" ],
[ "phone", "" ],
[ "business_hours", "" ],
[ "front_end_name", "" ],
[ "front_end_logo", "" ],
[ "front_end_icon", "" ],
[ "icon", "" ],
[ "meta_title", "" ],
[ "meta_desc", "" ],
[ "meta_keyword", "" ],
]);
$configService = new ConfigService();
$configService->setWebSite($data);
return success();
}3.7 附件上传管理
3.7.1 功能实现
- 支持图片、视频、音频、文档等多种类型的文件上传
- 附件分组管理
- 存储配置管理(本地、阿里云、腾讯云、七牛云等)
- 上传设置管理
3.7.2 实现逻辑
php
// 图片上传示例
public function image() {
$file = $this->request->file('file');
if (empty($file)) {
return error('请选择上传文件');
}
$uploadService = new UploadService();
$result = $uploadService->image($file);
return success($result);
}3.8 协议管理
3.8.1 功能实现
- 管理系统各种协议(用户协议、隐私政策等)
- 协议内容的编辑和更新
3.8.2 实现逻辑
php
// 协议列表示例
public function lists() {
$agreementModel = new SysAgreement();
$list = $agreementModel->select();
return success($list);
}
// 编辑协议示例
public function edit($key) {
$data = $this->request->params([
[ 'title', '' ],
[ 'content', '' ],
]);
$agreementModel = new SysAgreement();
$result = $agreementModel->where('key', $key)->update($data);
return success($result);
}3.9 地区管理
3.9.1 功能实现
- 地区数据的层级管理
- 地区信息的查询和获取
- 地址解析和反向解析
3.9.2 实现逻辑
php
// 通过pid获取地区列表示例
public function listByPid($pid) {
$areaModel = new SysArea();
$list = $areaModel->where('pid', $pid)->order('sort asc')->select();
return success($list);
}
// 通过层级获取地区树形列表示例
public function tree($level) {
$areaModel = new SysArea();
$list = $areaModel->where('level', '<=', $level)->order('sort asc')->select()->toArray();
$tree = $this->buildAreaTree($list);
return success($tree);
}3.10 渠道管理
3.10.1 功能实现
- 渠道类型的管理
- 场景域名的配置
3.10.2 实现逻辑
php
// 获取渠道类型示例
public function getChannelType() {
$channelTypes = [
[ 'value' => 'h5', 'label' => 'H5' ],
[ 'value' => 'weapp', 'label' => '微信小程序' ],
[ 'value' => 'aliapp', 'label' => '支付宝小程序' ],
[ 'value' => 'pc', 'label' => 'PC' ],
];
return success($channelTypes);
}
// 获取场景域名示例
public function getSceneDomain() {
$configService = new ConfigService();
$domain = $configService->getSceneDomain();
return success($domain);
}3.11 系统环境管理
3.11.1 功能实现
- 系统环境信息的获取
- 消息队列和计划任务的校验
- 环境变量的管理
3.11.2 实现逻辑
php
// 获取系统环境信息示例
public function getSystemInfo() {
$info = [
'php_version' => PHP_VERSION,
'mysql_version' => $this->getMysqlVersion(),
'os' => php_uname(),
'server' => $_SERVER['SERVER_SOFTWARE'],
'upload_max_filesize' => ini_get('upload_max_filesize'),
'post_max_size' => ini_get('post_max_size'),
'memory_limit' => ini_get('memory_limit'),
];
return success($info);
}
// 校验消息队列示例
public function checkJob() {
$status = true;
$message = '消息队列运行正常';
// 检查消息队列状态
return success([ 'status' => $status, 'message' => $message ]);
}3.12 计划任务管理
3.12.1 功能实现
- 计划任务的创建和管理
- 任务状态的控制
- 任务执行记录的管理
- 任务模板的使用
3.12.2 实现逻辑
php
// 计划任务列表示例
public function lists() {
$params = $this->request->params([
[ 'page', 1 ],
[ 'limit', 10 ],
[ 'status', '' ],
]);
$scheduleModel = new SysSchedule();
$list = $scheduleModel->where(function($query) use ($params) {
if (isset($params['status'])) {
$query->where('status', $params['status']);
}
})->paginate([
'page' => $params['page'],
'list_rows' => $params['limit']
]);
return success($list);
}
// 执行一次任务示例
public function doSchedule($id) {
$scheduleModel = new SysSchedule();
$schedule = $scheduleModel->find($id);
if (empty($schedule)) {
return error('任务不存在');
}
// 执行任务
$scheduleService = new ScheduleService();
$result = $scheduleService->execute($schedule);
return success($result);
}4. 数据模型
4.1 系统配置模型
- 表名:
sys_config - 主要字段:
id:配置IDconfig_key:配置键value:配置值(JSON格式)create_time:创建时间update_time:更新时间
4.2 用户组模型
- 表名:
sys_role - 主要字段:
role_id:角色IDrole_name:角色名称status:状态(0:禁用,1:启用)create_time:创建时间update_time:更新时间
4.3 部门模型
- 表名:
sys_dept - 主要字段:
id:部门IDname:部门名称pid:父部门IDsort:排序create_time:创建时间update_time:更新时间
4.4 岗位模型
- 表名:
sys_position - 主要字段:
id:岗位IDname:岗位名称dept_id:部门IDsort:排序create_time:创建时间update_time:更新时间
4.5 菜单模型
- 表名:
sys_menu - 主要字段:
menu_key:菜单键menu_name:菜单名称parent_key:父菜单键menu_type:菜单类型url:菜单URLicon:菜单图标sort:排序status:状态create_time:创建时间update_time:更新时间
4.6 附件模型
- 表名:
sys_attachment - 主要字段:
att_id:附件IDname:附件名称path:存储路径url:访问URLtype:文件类型size:文件大小storage_type:存储类型category_id:分组IDcreate_time:创建时间
4.7 协议模型
- 表名:
sys_agreement - 主要字段:
key:协议键title:协议标题content:协议内容create_time:创建时间update_time:更新时间
4.8 地区模型
- 表名:
sys_area - 主要字段:
id:地区IDname:地区名称pid:父地区IDlevel:地区层级sort:排序code:地区编码
4.9 计划任务模型
- 表名:
sys_schedule - 主要字段:
id:任务IDname:任务名称type:任务类型content:任务内容cron: cron表达式status:状态(0:禁用,1:启用)create_time:创建时间update_time:更新时间
4.10 计划任务日志模型
- 表名:
sys_schedule_log - 主要字段:
id:日志IDschedule_id:任务IDcontent:执行内容status:执行状态(0:失败,1:成功)error_msg:错误信息create_time:执行时间
5. 开发规范
5.1 代码结构
- 控制器:位于
backend/app/adminapi/controller/sys/目录 - 模型:位于
backend/app/model/sys/目录 - 验证器:位于
backend/app/validate/sys/目录 - 字典:位于
backend/app/dict/sys/目录 - 服务层:位于
backend/app/service/admin/sys/目录 - 核心服务:位于
backend/app/service/core/sys/目录
5.2 权限控制
- 使用中间件
AdminCheckRole进行权限验证 - 基于角色的权限控制
- 菜单权限与操作权限的分离
5.3 数据验证
- 使用
validate进行数据验证 - 确保数据的合法性和安全性
5.4 日志记录
- 使用中间件
AdminLog记录操作日志 - 记录关键操作的详细信息
6. 注意事项
- 权限管理:系统设置模块涉及核心权限,需要严格控制访问权限
- 数据安全:敏感配置信息需要加密存储
- 性能优化:对于系统信息和配置的获取,考虑使用缓存提高性能
- 兼容性:确保不同环境下系统设置的兼容性
- 备份:定期备份系统配置,防止配置丢失
7. 开发流程
- 需求分析:明确系统设置的具体需求
- 功能设计:设计系统设置的功能模块和流程
- 代码实现:按照编码规范实现功能
- 测试验证:测试系统设置的各项功能
- 部署上线:将系统设置功能部署到生产环境
8. 示例代码
8.1 系统配置服务示例
php
<?php
namespace app\service\admin\sys;
use app\service\core\sys\CoreConfigService;
use core\base\BaseAdminService;
/**
* 配置服务层
*/
class ConfigService extends BaseAdminService {
//系统配置文件
public $core_config_service;
public function __construct() {
parent::__construct();
$this->core_config_service = new CoreConfigService();
}
/**
* 获取网站信息
* @return array
*/
public function getWebSite() {
$info = ( new CoreConfigService() )->getConfig('WEB_SITE_INFO');
if (empty($info)) {
$info = [];
$info[ 'value' ] = [
'site_name' => config('install.admin_site_name'),
'logo' => config('install.admin_logo'),
'desc' => '',
'latitude' => '',
'longitude' => '',
'province_id' => 0,
'city_id' => 0,
'district_id' => 0,
'address' => '',
'full_address' => '',
'phone' => '',
'business_hours' => '',
'front_end_name' => '',
'front_end_logo' => '',
'front_end_icon' => '',
'icon' => '',
];
}
return $info[ 'value' ];
}
/**
* 设置网站信息
* @return bool
*/
public function setWebSite($data) {
$web_site = [
'site_name' => $data[ 'site_name' ],
'logo' => $data[ 'logo' ],
'desc' => $data[ 'desc' ],
'latitude' => $data[ 'latitude' ],
'longitude' => $data[ 'longitude' ],
'province_id' => $data[ 'province_id' ],
'city_id' => $data[ 'city_id' ],
'district_id' => $data[ 'district_id' ],
'address' => $data[ 'address' ],
'full_address' => $data[ 'full_address' ],
'phone' => $data[ 'phone' ],
'business_hours' => $data[ 'business_hours' ],
'front_end_name' => $data[ 'front_end_name' ],
'front_end_logo' => $data[ 'front_end_logo' ],
'front_end_icon' => $data[ 'front_end_icon' ],
'icon' => $data[ 'icon' ],
];
return $this->core_config_service->setConfig('WEB_SITE_INFO', $web_site);
}
}8.2 菜单管理控制器示例
php
<?php
namespace app\adminapi\controller\sys;
use app\service\admin\sys\MenuService;
use core\base\BaseAdminController;
use think\Response;
/**
* 菜单管理
*/
class Menu extends BaseAdminController {
/**
* 菜单列表
* @description 菜单列表
* @return Response
*/
public function lists() {
$params = $this->request->params([
[ 'menu_type', '' ],
[ 'addon', '' ],
]);
$menuService = new MenuService();
$list = $menuService->getMenuList($params);
return success($list);
}
/**
* 菜单新增
* @description 菜单新增
* @return Response
*/
public function add() {
$data = $this->request->params([
[ 'menu_name', '' ],
[ 'parent_key', '' ],
[ 'menu_type', '' ],
[ 'url', '' ],
[ 'icon', '' ],
[ 'sort', 0 ],
[ 'status', 1 ],
[ 'addon', '' ],
]);
$menuService = new MenuService();
$result = $menuService->addMenu($data);
return success($result);
}
/**
* 菜单更新
* @description 菜单更新
* @param string $menu_key
* @return Response
*/
public function edit($menu_key) {
$data = $this->request->params([
[ 'menu_name', '' ],
[ 'parent_key', '' ],
[ 'menu_type', '' ],
[ 'url', '' ],
[ 'icon', '' ],
[ 'sort', 0 ],
[ 'status', 1 ],
[ 'addon', '' ],
]);
$menuService = new MenuService();
$result = $menuService->editMenu($menu_key, $data);
return success($result);
}
/**
* 菜单删除
* @description 菜单删除
* @param string $menu_key
* @return Response
*/
public function del($menu_key) {
$menuService = new MenuService();
$result = $menuService->delMenu($menu_key);
return success($result);
}
}