Skip to content

业务模块开发

内置模块二次开发

内置功能模块功能已经比较完善能适配各行业的大部分需求,一般不建议修改,主要是方便后续版本的升级,对内置模块的二次开发可能有代码冲突导致无法升级,无法使用后续版本的新功能或 Bug 修复。有行业通用的需求可提给 FgxAdmin 团队。

如果有特殊的业务逻辑需二次开发,也是支持的。根据 3.1.3 和 3.2.3 章节可知 FgxAdmin 的内置功能是按模块划分的,不同模块使用不同的包或目录划分。如果要对内置的某个模块进行二次开发,找到对应模块进行修改即可。

自定义模块方式

代码生成器生成项目(推荐)

生成项目

gen-project1.png

gen-project2.png

在 FgxGen 代码生成器->研发工具->生成项目里可以一键生成前端和后端的项目框架。生成项目的代码结构和 fgx-admin-bootstrap、fgx-admin-ui 一样。

导入数据

新增数据库执行初始化 SQL 脚本 database-init-v1.0.0.sql , 注意:脚本的第一行的数据库名称要与新建的数据库一致

启动项目

后端的根据 3.1.6 章节修改配置即可本地启动项目。
前端使用以下命令启动项目

shell
# 进入项目
cd fgx-abc-ui

# 安装依赖
npm install --registry=https://registry.npm.taobao.org

# 启动服务
npm run dev

访问地址:http://localhost:3000

手动新建项目开发

新建后端项目

新建项目进行开发,代码结构跟 fgx-admin-bootstrap 一样,拷贝 fgx-admin-bootstrap 相关文件到新项目。fgx-admin-bootstrap 是一个启动器,它依赖 fgx-admin-web(所有内置功能在该项目),主要提供配置管理、打包构建等功能。
如:新建 fgx-mall 项目
gen-project3.png

pom.xml 如下,其它文件从 fgx-admin-bootstrap 拷贝:

xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.fuginx</groupId>
        <artifactId>fgx-admin-parent</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>
    <groupId>com.fuginx</groupId>
    <artifactId>fgx-mall</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>fgx-mall</name>
    <description>fgx-mall</description>

    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>

        <dependency>
            <groupId>com.fuginx</groupId>
            <artifactId>fgx-admin-web</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

导入数据

新增数据库执行初始化 SQL 脚本 fgx-admin-bootstrap-init-v1.0.0.sql , 注意:脚本的第一行的数据库名称要与新建的数据库一致

新建前端项目

通过拷贝 fgx-admin-ui 改名新建项目,修改 package.json 和 nginx.conf 里的项目名为新项目名。新建模块目录进行开发,如:xxx 为模块名
src/api/xxx
src/views/xxx

fgx-generator-ui 基于该方式开发,可参考。

第一个业务模块

需求说明

某司需要对公司的设备资产进行信息化管理,支持设备分类,支持父子类别。需记录设备的名称,厂商、生产日期和数量等(仅举例,其它字段忽略)

建立表模型

根据业务需求建立表模型如下:

sql
CREATE TABLE `tbl_demo_category` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `corp_id` bigint NOT NULL COMMENT '企业ID',
  `parent_id` bigint NOT NULL DEFAULT '0' COMMENT '父ID',
  `parent_ids` varchar(512) COLLATE utf8mb4_general_ci NOT NULL COMMENT '祖先ID(多个以英文逗号分隔)',
  `leaf` tinyint(1) NOT NULL COMMENT '是否末级',
  `category_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '类目名称',
  `remark` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
  `name_path` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '完整路径(以斜杠分隔)',
  `order_num` int DEFAULT NULL COMMENT '同级排序',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `create_uid` bigint DEFAULT NULL COMMENT '创建人UID',
  `create_aid` bigint DEFAULT NULL COMMENT '创建人AID',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `update_uid` bigint DEFAULT NULL COMMENT '更新人UID',
  `update_aid` bigint DEFAULT NULL COMMENT '更新人AID',
  `deleted` int NOT NULL DEFAULT '0' COMMENT '是否删除(0否,1是)',
  PRIMARY KEY (`id`),
  KEY `idx_1` (`parent_id`),
  KEY `idx_2` (`parent_ids`),
  KEY `idx_3` (`category_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='类目';

CREATE TABLE `tbl_demo_device` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `corp_id` bigint NOT NULL COMMENT '企业ID',
  `device_name` varchar(128) COLLATE utf8mb4_general_ci NOT NULL COMMENT '设备名称',
  `category_id` bigint NOT NULL COMMENT '设备分类',
  `manufacturer` varchar(128) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '厂商',
  `manufacture_date` datetime DEFAULT NULL COMMENT '生产日期',
  `quantity` int DEFAULT NULL COMMENT '数量',
  `intro` varchar(1024) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '简介',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `create_uid` bigint DEFAULT NULL COMMENT '创建人UID',
  `create_aid` bigint DEFAULT NULL COMMENT '创建人AID',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `update_uid` bigint DEFAULT NULL COMMENT '更新人UID',
  `update_aid` bigint DEFAULT NULL COMMENT '更新人AID',
  `deleted` int NOT NULL DEFAULT '0' COMMENT '是否删除(0否,1是)',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='设备';

在 fgx-admin-bootstrap 的数据库执行上面 SQL 创建表

生成代码

添加数据源

在代码生成器-研发工具的数据源里添加 FgxAdmin 数据源

gen-module1.png

添加表配置

在代码生成器-研发工具的生成代码里添加表配置 tbl_demo_category

gen-module2.png

表的基础信息和列表配置:

gen-module3.png

主要关注圈选的信息填写

  • 模板类型:系统会根据表的字段自动判断是否树表
  • 模块名:填写模块名称,填写英文名称,如 demo
  • 表单布局:表单是指数据编辑表单,支持 1-4 列,可根据字段的多少选择,默认 2 列。本例需编辑的字段少选 1 列
  • 标签字段:当模板类型为树表时填写,一般选树名称字段,用于树名称展示
  • 一级菜单名称:左侧边栏的一级菜单名称,用于生成菜单 SQL
  • 二级菜单名称:左侧边栏的二级菜单名称,用于生成菜单 SQL
  • 一级菜单图标:左侧边栏的一级菜单的图标 icon,用于生成菜单 SQL
  • 二级菜单图标:左侧边栏的二级菜单的图标 icon,用于生成菜单 SQL
  • 功能:列表页面的功能操作,系统默认勾选除批量删除以外的选项
  • 列表展示:列表页面是否该字段,系统默认前 6 个有意义的字段
  • 最小列宽:字段在列表页面的最小宽度,非必填,最小和固定列宽为空时系统自动适配宽度
  • 固定列表:字段在列表页面的固定宽度,优先级比最小列宽高。非必填。最小和固定列宽为空时系统自动适配宽度
  • 内容超出隐藏:当内容超过字段列宽时隐藏超出部分,鼠标悬停时以 tooltip 方式展示全部内容

查询配置:
gen-module4.png

  • 是否查询:是否列表搜索条件字段
  • 匹配方式:仅在是否查询为是的情况下有效,搜索的匹配方式,后端会根据匹配方式生成查询条件
  • 条件排序:搜索条件排序,默认按字段在列表中的顺序一致。仅当搜索条件位置和列表不一致时填写。一般不填写

表单配置:
gen-module5.png

  • 查看:查看详情页面是否展示该字段
  • 新增:新增时表单是否展示该字段
  • 编辑:编辑时表单是否展示该字段
  • 必填:新增或编辑时该字段是否必填,必填时展示红色的星号并在表单提交前校验
  • 校验唯一:校验该字段是否全局唯一
  • 独占一行:在新增或编辑表单中该字段独占一行
  • 表单排序:字段在表单的排序号,序号超大越靠前
  • 控件类型:字段在表单里的 vue 组件类型,系统默认根据字段的数据库字段类型来确定 vue 组件类型,可根据实际情况微调
  • 字典编码:如果该字段是枚举值,须在 FgxAdmin 的数据字典里添加枚举类型和字典选项,然后代码生成器才能引用。
  • 字典 URL:如果该字段的数据来源于一个业务表(业务表须先用代码生成器生成代码或已有接口获取数据),填写获取字典下拉列表数据的接口 URL;一般使用代码生成器的 findTreeOptions 接口;字典编码和字典 URL 同时有值时字典 URL 无效
  • 校验类型: 前端进行类型数据校验

同理添加 tbl_demo_device 表配置

生成代码
gen-module6.png

勾选 tbl_demo_category 和 tbl_demo_device 点生成代码并下载代码,代码结构如下:

gen-module7.png

生成的代码包括 3 部分:
frontend: 前端代码
main:后端代码,包括 java 代码和 mybatis 的 mapper.xml 配置文件
sql: 菜单的 SQL 脚本,sql 可重复执行,如果菜单记录已存在不会重复插入数据。

执行 sql 后分别把前端和后端代码拷贝到 fgx-admin-bootstrap 和 fgx-admin-ui 的对应目录,启动服务,给当前账号(如:admin 超级管理员)的角色加上新增的菜单权限,刷新页面即可看到新增加的设备模块页面。

当生成的代码需要微调时,可修改表配置重新生成代码。

生成代码二次开发

生成的代码一般情况下能满足大部分业务需求,当业务很复杂生成的代码不能满足需求时,可对生成的代码做二次开发。

二次开发后如果又重新生成代码,需手工合并代码。建议合并前先备份当前模块代码或提交到 git 仓库,以免合并时有冲突丢失代码。