Skip to content

系统设置

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[执行记录管理]
    end

2. 路由配置

系统设置相关的路由配置位于 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:设置开发者key
  • GET /sys/config/developer_token:获取开发者key
  • GET /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:配置ID
    • config_key:配置键
    • value:配置值(JSON格式)
    • create_time:创建时间
    • update_time:更新时间

4.2 用户组模型

  • 表名:sys_role
  • 主要字段:
    • role_id:角色ID
    • role_name:角色名称
    • status:状态(0:禁用,1:启用)
    • create_time:创建时间
    • update_time:更新时间

4.3 部门模型

  • 表名:sys_dept
  • 主要字段:
    • id:部门ID
    • name:部门名称
    • pid:父部门ID
    • sort:排序
    • create_time:创建时间
    • update_time:更新时间

4.4 岗位模型

  • 表名:sys_position
  • 主要字段:
    • id:岗位ID
    • name:岗位名称
    • dept_id:部门ID
    • sort:排序
    • create_time:创建时间
    • update_time:更新时间

4.5 菜单模型

  • 表名:sys_menu
  • 主要字段:
    • menu_key:菜单键
    • menu_name:菜单名称
    • parent_key:父菜单键
    • menu_type:菜单类型
    • url:菜单URL
    • icon:菜单图标
    • sort:排序
    • status:状态
    • create_time:创建时间
    • update_time:更新时间

4.6 附件模型

  • 表名:sys_attachment
  • 主要字段:
    • att_id:附件ID
    • name:附件名称
    • path:存储路径
    • url:访问URL
    • type:文件类型
    • size:文件大小
    • storage_type:存储类型
    • category_id:分组ID
    • create_time:创建时间

4.7 协议模型

  • 表名:sys_agreement
  • 主要字段:
    • key:协议键
    • title:协议标题
    • content:协议内容
    • create_time:创建时间
    • update_time:更新时间

4.8 地区模型

  • 表名:sys_area
  • 主要字段:
    • id:地区ID
    • name:地区名称
    • pid:父地区ID
    • level:地区层级
    • sort:排序
    • code:地区编码

4.9 计划任务模型

  • 表名:sys_schedule
  • 主要字段:
    • id:任务ID
    • name:任务名称
    • type:任务类型
    • content:任务内容
    • cron: cron表达式
    • status:状态(0:禁用,1:启用)
    • create_time:创建时间
    • update_time:更新时间

4.10 计划任务日志模型

  • 表名:sys_schedule_log
  • 主要字段:
    • id:日志ID
    • schedule_id:任务ID
    • content:执行内容
    • 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. 注意事项

  1. 权限管理:系统设置模块涉及核心权限,需要严格控制访问权限
  2. 数据安全:敏感配置信息需要加密存储
  3. 性能优化:对于系统信息和配置的获取,考虑使用缓存提高性能
  4. 兼容性:确保不同环境下系统设置的兼容性
  5. 备份:定期备份系统配置,防止配置丢失

7. 开发流程

  1. 需求分析:明确系统设置的具体需求
  2. 功能设计:设计系统设置的功能模块和流程
  3. 代码实现:按照编码规范实现功能
  4. 测试验证:测试系统设置的各项功能
  5. 部署上线:将系统设置功能部署到生产环境

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);
    }
}