+
-
-
选择段类型:
-
- {{ opt.label }}
-
-
+
+ 选择段类型:
+
+
-
+
- {{ isNewSegment ? '新增' : '编辑' }}
- {{ typeOptions.find((t) => t.value === editingType.value)?.label }}
+ {{ isNewSegment ? '新增' : '编辑' }} {{ typeOptions.find(t => t.value === editingType)?.label }}
-
-
+
+
-
-
+
+
+
+
@@ -272,32 +233,24 @@ function getSegmentSummary(seg: BaseCodeRuleApi.SegmentConfig): string {
-
- {{ isNewSegment ? '添加' : '保存' }}
-
+
{{ isNewSegment ? '添加' : '保存' }}
取消
-
+
-
- + 添加分段
-
+
+ 添加分段
From 9ecf5f6582b6c239a04077a54842891597dbf0d1 Mon Sep 17 00:00:00 2001
From: zhouz <>
Date: Wed, 15 Jul 2026 17:51:54 +0800
Subject: [PATCH 23/32] =?UTF-8?q?fix:=20separator=E6=94=B9=E4=B8=BAcode=5F?=
=?UTF-8?q?separator=E9=81=BF=E5=85=8DMySQL=E4=BF=9D=E7=95=99=E5=85=B3?=
=?UTF-8?q?=E9=94=AE=E5=AD=97=E5=86=B2=E7=AA=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../nl/module/base/dal/dataobject/codegen/CodeRuleDO.java | 1 +
sql/mysql/add26071501.sql | 5 ++++-
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/dal/dataobject/codegen/CodeRuleDO.java b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/dal/dataobject/codegen/CodeRuleDO.java
index b8a9fb4d..d367f472 100644
--- a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/dal/dataobject/codegen/CodeRuleDO.java
+++ b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/dal/dataobject/codegen/CodeRuleDO.java
@@ -46,6 +46,7 @@ public class CodeRuleDO extends BaseDO {
/**
* 分隔符
*/
+ @TableField("code_separator")
private String separator;
/**
diff --git a/sql/mysql/add26071501.sql b/sql/mysql/add26071501.sql
index 98e454c1..b4b4a116 100644
--- a/sql/mysql/add26071501.sql
+++ b/sql/mysql/add26071501.sql
@@ -4,7 +4,7 @@ CREATE TABLE base_code_rule (
rule_name VARCHAR(64) NOT NULL COMMENT '规则名称',
rule_code VARCHAR(32) NOT NULL COMMENT '规则编码(唯一标识,调用时传入)',
segment_config JSON NOT NULL COMMENT '分段配置(JSON数组)',
- separator VARCHAR(8) DEFAULT '' COMMENT '分隔符(- / _ . 或空)',
+ code_separator VARCHAR(8) DEFAULT '' COMMENT '分隔符(- / _ . 或空)',
letter_case TINYINT DEFAULT 0 COMMENT '字母大小写:0=原样 1=全大写 2=全小写',
total_length INT DEFAULT 0 COMMENT '固定总长度约束(0=不限制)',
seq_strategy VARCHAR(16) DEFAULT 'segment' COMMENT '序号策略:segment=号段预分配 lock=分布式锁实时',
@@ -43,3 +43,6 @@ INSERT INTO `system_menu`(`id`, `name`, `permission`, `type`, `sort`, `parent_id
INSERT INTO `system_menu`(`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (6747, '编码规则新增', 'base:code-rule:create', 3, 2, 6745, '', NULL, NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');
INSERT INTO `system_menu`(`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (6748, '编码规则修改', 'base:code-rule:update', 3, 3, 6745, '', NULL, NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');
INSERT INTO `system_menu`(`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (6749, '编码规则删除', 'base:code-rule:delete', 3, 4, 6745, '', NULL, NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');
+
+-- 如果已建表且列名为 separator,执行此语句修复保留关键字问题
+-- ALTER TABLE base_code_rule CHANGE COLUMN separator code_separator VARCHAR(8) DEFAULT '' COMMENT '分隔符(- / _ . 或空)';
From 98dca0edb1ed0d05b1d49e56210e966946dad599 Mon Sep 17 00:00:00 2001
From: zhouz <>
Date: Wed, 15 Jul 2026 17:59:10 +0800
Subject: [PATCH 24/32] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DSegmentConfig=20?=
=?UTF-8?q?Jackson=E5=A4=9A=E6=80=81=E5=BA=8F=E5=88=97=E5=8C=96type?=
=?UTF-8?q?=E5=86=B2=E7=AA=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 移除SegmentConfig中与@JsonTypeInfo冲突的type字段
- buildSegment改用instanceof替代getType()
- 避免序列化时type覆盖为null导致反序列化失败
---
.../base/service/codegen/CodeGenServiceImpl.java | 14 ++++++++------
.../base/service/codegen/dto/SegmentConfig.java | 12 ++++--------
2 files changed, 12 insertions(+), 14 deletions(-)
diff --git a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/CodeGenServiceImpl.java b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/CodeGenServiceImpl.java
index ba869821..5ca18d0b 100644
--- a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/CodeGenServiceImpl.java
+++ b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/CodeGenServiceImpl.java
@@ -61,12 +61,14 @@ public class CodeGenServiceImpl implements CodeGenService {
* 根据段类型分发处理,生成段值
*/
private String buildSegment(CodeRuleDO rule, SegmentConfig segment) {
- return switch (segment.getType()) {
- case "PREFIX" -> buildPrefixSegment((PrefixSegment) segment);
- case "DATE" -> buildDateSegment((DateSegment) segment);
- case "SEQUENCE" -> buildSequenceSegment(rule, (SequenceSegment) segment);
- default -> throw new IllegalArgumentException("不支持的段类型: " + segment.getType());
- };
+ if (segment instanceof PrefixSegment) {
+ return buildPrefixSegment((PrefixSegment) segment);
+ } else if (segment instanceof DateSegment) {
+ return buildDateSegment((DateSegment) segment);
+ } else if (segment instanceof SequenceSegment) {
+ return buildSequenceSegment(rule, (SequenceSegment) segment);
+ }
+ throw new IllegalArgumentException("不支持的段类型: " + segment.getClass().getSimpleName());
}
/**
diff --git a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/dto/SegmentConfig.java b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/dto/SegmentConfig.java
index 495bbf56..df20c511 100644
--- a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/dto/SegmentConfig.java
+++ b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/dto/SegmentConfig.java
@@ -5,22 +5,18 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo;
import lombok.Data;
/**
- * 分段配置基类,使用 Jackson 多态序列化/反序列化
+ * 分段配置基类,使用 Jackson 多态序列化/反序列化。
+ * 注意:type 字段由 @JsonTypeInfo 自动管理,不要在子类中重复定义,
+ * 否则会导致序列化时 type 被覆盖为 null,反序列化时找不到子类型。
*
* @author zhouz
*/
@Data
-@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
+@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type", visible = true)
@JsonSubTypes({
@JsonSubTypes.Type(value = PrefixSegment.class, name = "PREFIX"),
@JsonSubTypes.Type(value = DateSegment.class, name = "DATE"),
@JsonSubTypes.Type(value = SequenceSegment.class, name = "SEQUENCE")
})
public abstract class SegmentConfig {
-
- /**
- * 段类型:PREFIX / DATE / SEQUENCE
- */
- private String type;
-
}
From f3ef75f9904ebf56b0727c5242963d9d8ef23de1 Mon Sep 17 00:00:00 2001
From: zhouz <>
Date: Wed, 15 Jul 2026 18:08:50 +0800
Subject: [PATCH 25/32] =?UTF-8?q?fix:=20=E6=94=BE=E5=BC=83Jackson=E5=A4=9A?=
=?UTF-8?q?=E6=80=81=EF=BC=8C=E6=94=B9=E7=94=A8=E6=99=AE=E9=80=9ADTO?=
=?UTF-8?q?=E9=81=BF=E5=85=8Dtype=E5=BA=8F=E5=88=97=E5=8C=96=E5=86=B2?=
=?UTF-8?q?=E7=AA=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- SegmentConfig改为普通POJO,移除@JsonTypeInfo和子类
- CodeGenServiceImpl/SequenceAllocator直接用SegmentConfig
- 彻底消除type字段序列化/反序列化的冲突问题
---
.../service/codegen/CodeGenServiceImpl.java | 23 +++----
.../service/codegen/SequenceAllocator.java | 12 ++--
.../base/service/codegen/dto/DateSegment.java | 20 ------
.../service/codegen/dto/PrefixSegment.java | 20 ------
.../service/codegen/dto/SegmentConfig.java | 62 +++++++++++++++----
.../service/codegen/dto/SequenceSegment.java | 40 ------------
6 files changed, 65 insertions(+), 112 deletions(-)
delete mode 100644 nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/dto/DateSegment.java
delete mode 100644 nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/dto/PrefixSegment.java
delete mode 100644 nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/dto/SequenceSegment.java
diff --git a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/CodeGenServiceImpl.java b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/CodeGenServiceImpl.java
index 5ca18d0b..4d2623e7 100644
--- a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/CodeGenServiceImpl.java
+++ b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/CodeGenServiceImpl.java
@@ -1,10 +1,7 @@
package cn.code.nl.module.base.service.codegen;
import cn.code.nl.module.base.dal.dataobject.codegen.CodeRuleDO;
-import cn.code.nl.module.base.service.codegen.dto.DateSegment;
-import cn.code.nl.module.base.service.codegen.dto.PrefixSegment;
import cn.code.nl.module.base.service.codegen.dto.SegmentConfig;
-import cn.code.nl.module.base.service.codegen.dto.SequenceSegment;
import cn.code.nl.module.base.service.codegen.enums.LetterCaseEnum;
import cn.code.nl.module.base.service.codegen.enums.SeqStrategyEnum;
import cn.hutool.core.util.StrUtil;
@@ -61,27 +58,25 @@ public class CodeGenServiceImpl implements CodeGenService {
* 根据段类型分发处理,生成段值
*/
private String buildSegment(CodeRuleDO rule, SegmentConfig segment) {
- if (segment instanceof PrefixSegment) {
- return buildPrefixSegment((PrefixSegment) segment);
- } else if (segment instanceof DateSegment) {
- return buildDateSegment((DateSegment) segment);
- } else if (segment instanceof SequenceSegment) {
- return buildSequenceSegment(rule, (SequenceSegment) segment);
- }
- throw new IllegalArgumentException("不支持的段类型: " + segment.getClass().getSimpleName());
+ return switch (segment.getType()) {
+ case "PREFIX" -> buildPrefixSegment(segment);
+ case "DATE" -> buildDateSegment(segment);
+ case "SEQUENCE" -> buildSequenceSegment(rule, segment);
+ default -> throw new IllegalArgumentException("不支持的段类型: " + segment.getType());
+ };
}
/**
* 生成固定前缀段
*/
- private String buildPrefixSegment(PrefixSegment segment) {
+ private String buildPrefixSegment(SegmentConfig segment) {
return segment.getValue() != null ? segment.getValue() : "";
}
/**
* 生成日期段
*/
- private String buildDateSegment(DateSegment segment) {
+ private String buildDateSegment(SegmentConfig segment) {
String format = StrUtil.isNotBlank(segment.getFormat())
? segment.getFormat() : "yyyyMMdd";
return LocalDate.now().format(DateTimeFormatter.ofPattern(format));
@@ -90,7 +85,7 @@ public class CodeGenServiceImpl implements CodeGenService {
/**
* 生成流水序号段
*/
- private String buildSequenceSegment(CodeRuleDO rule, SequenceSegment segment) {
+ private String buildSequenceSegment(CodeRuleDO rule, SegmentConfig segment) {
String strategy = rule.getSeqStrategy();
if (SeqStrategyEnum.LOCK.getCode().equals(strategy)) {
return sequenceAllocator.allocateByLock(rule.getId(), segment);
diff --git a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/SequenceAllocator.java b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/SequenceAllocator.java
index 852dab90..40081672 100644
--- a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/SequenceAllocator.java
+++ b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/SequenceAllocator.java
@@ -2,7 +2,7 @@ package cn.code.nl.module.base.service.codegen;
import cn.code.nl.module.base.dal.dataobject.codegen.CodeSequenceDO;
import cn.code.nl.module.base.dal.mysql.codegen.CodeSequenceMapper;
-import cn.code.nl.module.base.service.codegen.dto.SequenceSegment;
+import cn.code.nl.module.base.service.codegen.dto.SegmentConfig;
import cn.code.nl.module.base.service.codegen.enums.ResetByEnum;
import cn.hutool.core.util.StrUtil;
import com.baomidou.lock.annotation.Lock4j;
@@ -57,7 +57,7 @@ public class SequenceAllocator {
* @param segment 序号段配置
* @return 格式化后的序号字符串
*/
- public String allocateBySegment(Long ruleId, SequenceSegment segment) {
+ public String allocateBySegment(Long ruleId, SegmentConfig segment) {
String resetKey = buildResetKey(segment.getResetBy());
String cacheKey = ruleId + ":" + resetKey;
@@ -87,7 +87,7 @@ public class SequenceAllocator {
* @param segment 序号段配置
* @return 格式化后的序号字符串
*/
- public String allocateByLock(Long ruleId, SequenceSegment segment) {
+ public String allocateByLock(Long ruleId, SegmentConfig segment) {
String resetKey = buildResetKey(segment.getResetBy());
String lockKey = "codegen:seq:lock:" + ruleId + ":" + resetKey;
return self.allocateWithLock(lockKey, ruleId, resetKey, segment);
@@ -98,7 +98,7 @@ public class SequenceAllocator {
*/
@Lock4j(keys = "#lockKey", acquireTimeout = 3000, expire = 5000)
public long fetchSegmentWithLock(String lockKey, String cacheKey, Long ruleId,
- String resetKey, SequenceSegment segment) {
+ String resetKey, SegmentConfig segment) {
// double-check:其他线程可能已经预取了
AtomicLong existing = localSegmentCache.get(cacheKey);
if (existing != null) {
@@ -136,7 +136,7 @@ public class SequenceAllocator {
* Lock4j 保护下实时分配序号
*/
@Lock4j(keys = "#lockKey", acquireTimeout = 3000, expire = 5000)
- public String allocateWithLock(String lockKey, Long ruleId, String resetKey, SequenceSegment segment) {
+ public String allocateWithLock(String lockKey, Long ruleId, String resetKey, SegmentConfig segment) {
Long startAt = segment.getStartAt() != null ? segment.getStartAt() : 1L;
// step=1 每次只取一个号
codeSequenceMapper.updateCurrentValueBySegment(ruleId, resetKey, 1, startAt, segment.getMaxValue());
@@ -178,7 +178,7 @@ public class SequenceAllocator {
* @param segment 序号段配置
* @return 格式化后的字符串
*/
- public String formatSequence(long value, SequenceSegment segment) {
+ public String formatSequence(long value, SegmentConfig segment) {
String raw = String.valueOf(value);
int paddingLen = segment.getPaddingLen() != null ? segment.getPaddingLen() : 0;
if (paddingLen <= 0 || raw.length() >= paddingLen) {
diff --git a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/dto/DateSegment.java b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/dto/DateSegment.java
deleted file mode 100644
index 382fd548..00000000
--- a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/dto/DateSegment.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package cn.code.nl.module.base.service.codegen.dto;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * 日期段配置
- *
- * @author zhouz
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class DateSegment extends SegmentConfig {
-
- /**
- * 日期格式,如 "yyyyMMdd"、"yyyyMM"、"yyyy"
- */
- private String format;
-
-}
diff --git a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/dto/PrefixSegment.java b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/dto/PrefixSegment.java
deleted file mode 100644
index cd61a833..00000000
--- a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/dto/PrefixSegment.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package cn.code.nl.module.base.service.codegen.dto;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * 固定前缀段配置
- *
- * @author zhouz
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class PrefixSegment extends SegmentConfig {
-
- /**
- * 固定前缀值,如 "ORD"
- */
- private String value;
-
-}
diff --git a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/dto/SegmentConfig.java b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/dto/SegmentConfig.java
index df20c511..75cf785c 100644
--- a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/dto/SegmentConfig.java
+++ b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/dto/SegmentConfig.java
@@ -1,22 +1,60 @@
package cn.code.nl.module.base.service.codegen.dto;
-import com.fasterxml.jackson.annotation.JsonSubTypes;
-import com.fasterxml.jackson.annotation.JsonTypeInfo;
import lombok.Data;
/**
- * 分段配置基类,使用 Jackson 多态序列化/反序列化。
- * 注意:type 字段由 @JsonTypeInfo 自动管理,不要在子类中重复定义,
- * 否则会导致序列化时 type 被覆盖为 null,反序列化时找不到子类型。
+ * 分段配置 —— 通用 DTO,不做 Jackson 多态。
+ * type 决定了哪些字段有效:PREFIX→value, DATE→format, SEQUENCE→resetBy/startAt/paddingLen/paddingChar/maxValue
*
* @author zhouz
*/
@Data
-@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type", visible = true)
-@JsonSubTypes({
- @JsonSubTypes.Type(value = PrefixSegment.class, name = "PREFIX"),
- @JsonSubTypes.Type(value = DateSegment.class, name = "DATE"),
- @JsonSubTypes.Type(value = SequenceSegment.class, name = "SEQUENCE")
-})
-public abstract class SegmentConfig {
+public class SegmentConfig {
+
+ /**
+ * 段类型:PREFIX / DATE / SEQUENCE
+ */
+ private String type;
+
+ // ========== PREFIX 段 ==========
+
+ /**
+ * 固定值,如 "ORD"
+ */
+ private String value;
+
+ // ========== DATE 段 ==========
+
+ /**
+ * 日期格式,如 "yyyyMMdd"
+ */
+ private String format;
+
+ // ========== SEQUENCE 段 ==========
+
+ /**
+ * 重置维度:DAY / MONTH / YEAR / GLOBAL
+ */
+ private String resetBy;
+
+ /**
+ * 起始值,默认 1
+ */
+ private Long startAt;
+
+ /**
+ * 补位后的总长度,如 4 → 0001
+ */
+ private Integer paddingLen;
+
+ /**
+ * 补位字符,默认 "0"
+ */
+ private String paddingChar;
+
+ /**
+ * 序号最大值上限
+ */
+ private Long maxValue;
+
}
diff --git a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/dto/SequenceSegment.java b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/dto/SequenceSegment.java
deleted file mode 100644
index 0b0d6057..00000000
--- a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/dto/SequenceSegment.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package cn.code.nl.module.base.service.codegen.dto;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * 流水序号段配置
- *
- * @author zhouz
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class SequenceSegment extends SegmentConfig {
-
- /**
- * 重置维度:DAY / MONTH / YEAR / GLOBAL
- */
- private String resetBy;
-
- /**
- * 起始值,默认 1
- */
- private Long startAt;
-
- /**
- * 补位后的总长度,如 4 → 0001
- */
- private Integer paddingLen;
-
- /**
- * 补位字符,默认 "0"
- */
- private String paddingChar;
-
- /**
- * 序号最大值上限
- */
- private Long maxValue;
-
-}
From fbc5554c6a97ea5437097a32723e697917ec5b70 Mon Sep 17 00:00:00 2001
From: zhouz <>
Date: Wed, 15 Jul 2026 18:14:40 +0800
Subject: [PATCH 26/32] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E7=BC=96?=
=?UTF-8?q?=E7=A0=81=E9=A2=84=E8=A7=88=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 后端新增 /rpc-api/base/code-gen/preview 接口
- SequenceAllocator.preview 查询序号但不消耗
- 前端操作列新增预览按钮,弹窗展示下一个编码
---
.../module/base/api/codegen/CodeGenApi.java | 6 +++
.../controller/api/CodeGenController.java | 9 ++++
.../base/service/codegen/CodeGenService.java | 8 +++
.../service/codegen/CodeGenServiceImpl.java | 32 ++++++++++++
.../service/codegen/SequenceAllocator.java | 15 ++++++
.../src/api/base/codegen/index.ts | 8 +++
.../src/views/base/codegen/index.vue | 50 +++++++++++++++++--
7 files changed, 125 insertions(+), 3 deletions(-)
diff --git a/nl-module-base/nl-module-base-api/src/main/java/cn/code/nl/module/base/api/codegen/CodeGenApi.java b/nl-module-base/nl-module-base-api/src/main/java/cn/code/nl/module/base/api/codegen/CodeGenApi.java
index b6a77556..6ac04ef9 100644
--- a/nl-module-base/nl-module-base-api/src/main/java/cn/code/nl/module/base/api/codegen/CodeGenApi.java
+++ b/nl-module-base/nl-module-base-api/src/main/java/cn/code/nl/module/base/api/codegen/CodeGenApi.java
@@ -9,6 +9,8 @@ import jakarta.validation.Valid;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
/**
* RPC 服务 - 编码生成
@@ -31,4 +33,8 @@ public interface CodeGenApi {
@Operation(summary = "生成编码")
CommonResult
generate(@Valid @RequestBody CodeGenerateReqDTO reqDTO);
+ @GetMapping(PREFIX + "/preview")
+ @Operation(summary = "预览下一个编码(不消耗序号)")
+ CommonResult preview(@RequestParam("ruleCode") String ruleCode);
+
}
diff --git a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/controller/api/CodeGenController.java b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/controller/api/CodeGenController.java
index 17cb8e52..8cb27cb1 100644
--- a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/controller/api/CodeGenController.java
+++ b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/controller/api/CodeGenController.java
@@ -8,9 +8,11 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import static cn.code.nl.framework.common.pojo.CommonResult.success;
@@ -39,4 +41,11 @@ public class CodeGenController {
return success(code);
}
+ @GetMapping("/preview")
+ @Operation(summary = "预览下一个编码(不消耗序号)")
+ public CommonResult preview(@RequestParam("ruleCode") String ruleCode) {
+ String code = codeGenService.preview(ruleCode);
+ return success(code);
+ }
+
}
diff --git a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/CodeGenService.java b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/CodeGenService.java
index d300a70c..57fe3c1a 100644
--- a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/CodeGenService.java
+++ b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/CodeGenService.java
@@ -15,4 +15,12 @@ public interface CodeGenService {
*/
String generate(String ruleCode);
+ /**
+ * 预览下一个编码(不消耗序号)
+ *
+ * @param ruleCode 规则编码
+ * @return 预览的编码
+ */
+ String preview(String ruleCode);
+
}
diff --git a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/CodeGenServiceImpl.java b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/CodeGenServiceImpl.java
index 4d2623e7..95be27d0 100644
--- a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/CodeGenServiceImpl.java
+++ b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/CodeGenServiceImpl.java
@@ -54,6 +54,26 @@ public class CodeGenServiceImpl implements CodeGenService {
return postProcess(sb.toString(), rule);
}
+ @Override
+ public String preview(String ruleCode) {
+ // 1. 获取规则配置
+ CodeRuleDO rule = codeRuleService.getRuleByCode(ruleCode);
+
+ // 2. 遍历分段,SEQUENCE 段用 preview(不消耗序号)
+ List segments = rule.getSegmentConfig();
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < segments.size(); i++) {
+ String segmentValue = buildPreviewSegment(rule, segments.get(i));
+ sb.append(segmentValue);
+ if (i < segments.size() - 1 && StrUtil.isNotBlank(rule.getSeparator())) {
+ sb.append(rule.getSeparator());
+ }
+ }
+
+ // 3. 后处理
+ return postProcess(sb.toString(), rule);
+ }
+
/**
* 根据段类型分发处理,生成段值
*/
@@ -66,6 +86,18 @@ public class CodeGenServiceImpl implements CodeGenService {
};
}
+ /**
+ * 预览模式分发(SEQUENCE 段不消耗序号)
+ */
+ private String buildPreviewSegment(CodeRuleDO rule, SegmentConfig segment) {
+ return switch (segment.getType()) {
+ case "PREFIX" -> buildPrefixSegment(segment);
+ case "DATE" -> buildDateSegment(segment);
+ case "SEQUENCE" -> sequenceAllocator.preview(rule.getId(), segment);
+ default -> throw new IllegalArgumentException("不支持的段类型: " + segment.getType());
+ };
+ }
+
/**
* 生成固定前缀段
*/
diff --git a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/SequenceAllocator.java b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/SequenceAllocator.java
index 40081672..bed9ad55 100644
--- a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/SequenceAllocator.java
+++ b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/service/codegen/SequenceAllocator.java
@@ -189,4 +189,19 @@ public class SequenceAllocator {
return paddingChar.repeat(paddingLen - raw.length()) + raw;
}
+ /**
+ * 预览下一个序号(不实际分配,不更新数据库)
+ *
+ * @param ruleId 规则ID
+ * @param segment 序号段配置
+ * @return 格式化后的序号字符串
+ */
+ public String preview(Long ruleId, SegmentConfig segment) {
+ String resetKey = buildResetKey(segment.getResetBy());
+ CodeSequenceDO seq = codeSequenceMapper.selectByRuleIdAndResetKey(ruleId, resetKey);
+ Long startAt = segment.getStartAt() != null ? segment.getStartAt() : 1L;
+ long nextValue = (seq != null) ? seq.getCurrentValue() + 1 : startAt;
+ return formatSequence(nextValue, segment);
+ }
+
}
diff --git a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/base/codegen/index.ts b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/base/codegen/index.ts
index eb012932..5cbea0f4 100644
--- a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/base/codegen/index.ts
+++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/base/codegen/index.ts
@@ -79,3 +79,11 @@ export async function updateCodeRule(data: BaseCodeRuleApi.CodeRule) {
export async function deleteCodeRule(id: number) {
return requestClient.delete(`/base/code-rule/delete?id=${id}`);
}
+
+/** 预览下一个编码(不消耗序号) */
+export async function previewCode(ruleCode: string) {
+ return requestClient.get(
+ '/rpc-api/base/code-gen/preview',
+ { params: { ruleCode } },
+ );
+}
diff --git a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/base/codegen/index.vue b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/base/codegen/index.vue
index f9e0740f..b659f8e6 100644
--- a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/base/codegen/index.vue
+++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/base/codegen/index.vue
@@ -7,10 +7,10 @@ import { ref } from 'vue';
import { confirm, Page, useVbenModal } from '@vben/common-ui';
import { isEmpty } from '@vben/utils';
-import { message } from 'antdv-next';
+import { Modal, message } from 'antdv-next';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
-import { deleteCodeRule, getCodeRulePage } from '#/api/base/codegen';
+import { deleteCodeRule, getCodeRulePage, previewCode } from '#/api/base/codegen';
import { $t } from '#/locales';
import { useGridColumns, useGridFormSchema } from './data';
@@ -51,7 +51,7 @@ async function handleDelete(row: BaseCodeRuleApi.CodeRule) {
}
}
-/** 批量删除编码规则 */
+/** 批量删除 */
async function handleDeleteBatch() {
await confirm($t('ui.actionMessage.deleteBatchConfirm'));
const hideLoading = message.loading({
@@ -70,6 +70,25 @@ async function handleDeleteBatch() {
}
}
+/** 预览下一个编码 */
+const previewVisible = ref(false);
+const previewLoading = ref(false);
+const previewCodeValue = ref('');
+const previewTitle = ref('');
+async function handlePreview(row: BaseCodeRuleApi.CodeRule) {
+ previewTitle.value = row.ruleName;
+ previewLoading.value = true;
+ previewVisible.value = true;
+ try {
+ const result = await previewCode(row.ruleCode);
+ previewCodeValue.value = result ?? '';
+ } catch {
+ previewCodeValue.value = '预览失败';
+ } finally {
+ previewLoading.value = false;
+ }
+}
+
const checkedIds = ref([]);
function handleRowCheckboxChange({
records,
@@ -145,6 +164,13 @@ const [Grid, gridApi] = useVbenVxeGrid({
+
+ 加载中...
+
+
+
规则:{{ previewTitle }}
+
+ {{ previewCodeValue }}
+
+
+
From 95664293b26710a64cea3f5d94d4e388c0a0f886 Mon Sep 17 00:00:00 2001
From: zhouz <>
Date: Wed, 15 Jul 2026 18:59:56 +0800
Subject: [PATCH 27/32] =?UTF-8?q?fix:=20=E9=A2=84=E8=A7=88=E6=8E=A5?=
=?UTF-8?q?=E5=8F=A3=E6=94=B9=E4=B8=BAadmin=E8=B7=AF=E5=BE=84=20/base/code?=
=?UTF-8?q?-rule/preview?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../controller/admin/codegen/CodeRuleController.java | 11 +++++++++++
.../apps/web-antdv-next/src/api/base/codegen/index.ts | 2 +-
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/controller/admin/codegen/CodeRuleController.java b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/controller/admin/codegen/CodeRuleController.java
index 3fdcbeb5..840634ee 100644
--- a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/controller/admin/codegen/CodeRuleController.java
+++ b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/controller/admin/codegen/CodeRuleController.java
@@ -5,6 +5,7 @@ import cn.code.nl.framework.common.pojo.PageResult;
import cn.code.nl.framework.common.util.object.BeanUtils;
import cn.code.nl.module.base.controller.admin.codegen.vo.*;
import cn.code.nl.module.base.dal.dataobject.codegen.CodeRuleDO;
+import cn.code.nl.module.base.service.codegen.CodeGenService;
import cn.code.nl.module.base.service.codegen.CodeRuleService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
@@ -33,6 +34,9 @@ public class CodeRuleController {
@Resource
private CodeRuleService codeRuleService;
+ @Resource
+ private CodeGenService codeGenService;
+
/**
* 创建编码规则
*/
@@ -106,4 +110,11 @@ public class CodeRuleController {
return success(BeanUtils.toBean(list, CodeRuleSimpleRespVO.class));
}
+ @GetMapping("/preview")
+ @Operation(summary = "预览下一个编码(不消耗序号)")
+ @PreAuthorize("@ss.hasPermission('base:code-rule:query')")
+ public CommonResult previewCode(@RequestParam("ruleCode") String ruleCode) {
+ return success(codeGenService.preview(ruleCode));
+ }
+
}
diff --git a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/base/codegen/index.ts b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/base/codegen/index.ts
index 5cbea0f4..5129d55a 100644
--- a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/base/codegen/index.ts
+++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/base/codegen/index.ts
@@ -83,7 +83,7 @@ export async function deleteCodeRule(id: number) {
/** 预览下一个编码(不消耗序号) */
export async function previewCode(ruleCode: string) {
return requestClient.get(
- '/rpc-api/base/code-gen/preview',
+ '/base/code-rule/preview',
{ params: { ruleCode } },
);
}
From 2e79c0348a29810ba5141ca4bc7972de73f9ae49 Mon Sep 17 00:00:00 2001
From: zhouz <>
Date: Wed, 15 Jul 2026 19:15:16 +0800
Subject: [PATCH 28/32] =?UTF-8?q?fix:=20=E8=B7=AF=E7=94=B1=E6=B7=BB?=
=?UTF-8?q?=E5=8A=A0hideInMenu=EF=BC=8C=E8=8F=9C=E5=8D=95=E7=94=B1?=
=?UTF-8?q?=E5=90=8E=E7=AB=AFsystem=5Fmenu=E6=8E=A7=E5=88=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
未加hideInMenu时Vben5会自行生成顶级菜单入口,绕过数据库菜单管理
---
.../apps/web-antdv-next/src/router/routes/modules/base.ts | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/router/routes/modules/base.ts b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/router/routes/modules/base.ts
index ba465dd3..8a7f01c6 100644
--- a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/router/routes/modules/base.ts
+++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/router/routes/modules/base.ts
@@ -6,8 +6,7 @@ const routes: RouteRecordRaw[] = [
component: () => import('#/views/base/codegen/index.vue'),
name: 'BaseCodeRule',
meta: {
- title: '编码规则',
- icon: 'ant-design:barcode-outlined',
+ hideInMenu: true,
},
},
];
From d2e767a4fada8b3a052324aae8531655a7bb6475 Mon Sep 17 00:00:00 2001
From: zhouz <>
Date: Wed, 15 Jul 2026 19:37:32 +0800
Subject: [PATCH 29/32] =?UTF-8?q?fix:=20=E5=88=A0=E9=99=A4base.ts=E8=B7=AF?=
=?UTF-8?q?=E7=94=B1=E6=96=87=E4=BB=B6=EF=BC=8CVben5=E8=87=AA=E5=8A=A8?=
=?UTF-8?q?=E5=8F=91=E7=8E=B0views=E7=BB=84=E4=BB=B6=E6=97=A0=E9=9C=80?=
=?UTF-8?q?=E6=89=8B=E5=8A=A8=E6=B3=A8=E5=86=8C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/router/routes/modules/base.ts | 14 --------------
sql/mysql/add26071501.sql | 2 +-
2 files changed, 1 insertion(+), 15 deletions(-)
delete mode 100644 nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/router/routes/modules/base.ts
diff --git a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/router/routes/modules/base.ts b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/router/routes/modules/base.ts
deleted file mode 100644
index 8a7f01c6..00000000
--- a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/router/routes/modules/base.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import type { RouteRecordRaw } from 'vue-router';
-
-const routes: RouteRecordRaw[] = [
- {
- path: '/base/code-rule',
- component: () => import('#/views/base/codegen/index.vue'),
- name: 'BaseCodeRule',
- meta: {
- hideInMenu: true,
- },
- },
-];
-
-export default routes;
diff --git a/sql/mysql/add26071501.sql b/sql/mysql/add26071501.sql
index b4b4a116..2c27e3e8 100644
--- a/sql/mysql/add26071501.sql
+++ b/sql/mysql/add26071501.sql
@@ -35,6 +35,7 @@ CREATE TABLE base_code_sequence (
UNIQUE KEY idx_rule_reset (rule_id, reset_key)
) COMMENT '编码流水号段记录表';
+
-- 编码规则菜单(基础数据 > 编码规则)
INSERT INTO `system_menu`(`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (6745, '编码规则', '', 2, 1, 6743, 'code-rule', NULL, NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');
@@ -43,6 +44,5 @@ INSERT INTO `system_menu`(`id`, `name`, `permission`, `type`, `sort`, `parent_id
INSERT INTO `system_menu`(`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (6747, '编码规则新增', 'base:code-rule:create', 3, 2, 6745, '', NULL, NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');
INSERT INTO `system_menu`(`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (6748, '编码规则修改', 'base:code-rule:update', 3, 3, 6745, '', NULL, NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');
INSERT INTO `system_menu`(`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (6749, '编码规则删除', 'base:code-rule:delete', 3, 4, 6745, '', NULL, NULL, NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');
-
-- 如果已建表且列名为 separator,执行此语句修复保留关键字问题
-- ALTER TABLE base_code_rule CHANGE COLUMN separator code_separator VARCHAR(8) DEFAULT '' COMMENT '分隔符(- / _ . 或空)';
From 14a784f8691ef0150d05b4254ee7e5ae8f2b17fa Mon Sep 17 00:00:00 2001
From: zhouz <>
Date: Wed, 15 Jul 2026 19:40:47 +0800
Subject: [PATCH 30/32] =?UTF-8?q?fix:=20=E7=9B=AE=E5=BD=95=E9=87=8D?=
=?UTF-8?q?=E5=91=BD=E5=90=8D=E4=B8=BAcode-rule=E5=8C=B9=E9=85=8D=E8=8F=9C?=
=?UTF-8?q?=E5=8D=95=E8=B7=AF=E5=BE=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- views/base/codegen → views/base/code-rule
- api/base/codegen → api/base/code-rule
- 更新所有内部import路径
- Vben5按菜单路径自动映射views目录
---
.../src/api/base/{codegen => code-rule}/index.ts | 0
.../base/{codegen => code-rule}/components/SegmentEditor.vue | 2 +-
.../src/views/base/{codegen => code-rule}/data.ts | 2 +-
.../src/views/base/{codegen => code-rule}/index.vue | 4 ++--
.../src/views/base/{codegen => code-rule}/modules/form.vue | 4 ++--
5 files changed, 6 insertions(+), 6 deletions(-)
rename nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/base/{codegen => code-rule}/index.ts (100%)
rename nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/base/{codegen => code-rule}/components/SegmentEditor.vue (99%)
rename nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/base/{codegen => code-rule}/data.ts (98%)
rename nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/base/{codegen => code-rule}/index.vue (98%)
rename nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/base/{codegen => code-rule}/modules/form.vue (96%)
diff --git a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/base/codegen/index.ts b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/base/code-rule/index.ts
similarity index 100%
rename from nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/base/codegen/index.ts
rename to nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/base/code-rule/index.ts
diff --git a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/base/codegen/components/SegmentEditor.vue b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/base/code-rule/components/SegmentEditor.vue
similarity index 99%
rename from nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/base/codegen/components/SegmentEditor.vue
rename to nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/base/code-rule/components/SegmentEditor.vue
index 71eded9b..6959b4dc 100644
--- a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/base/codegen/components/SegmentEditor.vue
+++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/base/code-rule/components/SegmentEditor.vue
@@ -1,5 +1,5 @@