Files
yidaima/RuoYi-Vue/docs/superpowers/plans/2026-06-18-hide-auto-increment-id-form.md

3.8 KiB

Hide Auto-Increment IDs in Create Forms Implementation Plan

For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (- [ ]) syntax for tracking.

Goal: Hide generated auto-increment fields in create dialogs while showing them read-only in edit and view dialogs.

Architecture: Keep field metadata unchanged and implement visibility in the Qing Vue template with a runtime v-if keyed to the generated primary-key value. Add a template-rendering regression test so both frontend and admin-frontend generation inherit the behavior.

Tech Stack: Java 8, JUnit 4, Apache Velocity, Vue 2, Element UI, Maven


Task 1: Template rendering behavior

Files:

  • Modify: ruoyi-generator/src/test/java/com/ruoyi/generator/util/QingTemplateSupportTest.java

  • Modify: ruoyi-generator/src/main/resources/qing/index.vue.vm

  • Step 1: Write the failing rendering test

Add a test that renders qing/index.vue.vm for a table with:

GenTableColumn id = column("id", "ID", "Long", "id", "1", "1", "1", "1", "EQ", "input");
GenTableColumn name = column("name", "Name", "String", "name", "0", "1", "1", "1", "LIKE", "input");

Assert the rendered template contains:

assertTrue(rendered.contains("<el-form-item v-if=\"form.id\" label=\"ID\" prop=\"id\">"));
assertTrue(rendered.contains("<el-input v-model=\"form.id\" disabled"));
assertFalse(rendered.contains("prop=\"id\" :rules="));
assertTrue(rendered.contains("<el-form-item label=\"Name\" prop=\"name\""));
  • Step 2: Run the focused test and verify RED

Run:

mvn -pl ruoyi-generator -am "-Dtest=QingTemplateSupportTest#qingCrudFormHidesAutoIncrementIdOnCreateAndShowsItReadOnlyOnEdit" "-Dsurefire.failIfNoSpecifiedTests=false" test

Expected: the new assertions fail because the generated ID field is unconditional, editable, and required.

  • Step 3: Implement the minimal template condition

In the form-field loop:

#set($autoIncrementField = $column.isIncrement == "1")
        <el-form-item#if($autoIncrementField) v-if="form.${pkColumn.javaField}"#end label="${columnComment}" prop="${javaField}"#if($column.isRequired == "1" && !$autoIncrementField) :rules="..."#end>

For input fields:

          <el-input v-model="form.${javaField}"#if($autoIncrementField) disabled#end placeholder="请输入${columnComment}" />
  • Step 4: Run focused and related tests

Run:

mvn -pl ruoyi-generator -am "-Dtest=QingTemplateSupportTest" "-Dsurefire.failIfNoSpecifiedTests=false" test

Expected: all QingTemplateSupportTest tests pass.

  • Step 5: Verify generated output

Render or regenerate project 106 and confirm the generated book form contains:

<el-form-item v-if="form.id" label="图书ID" prop="id">
  <el-input v-model="form.id" disabled ... />
</el-form-item>

Open http://127.0.0.1:20178/#/admin/books and verify:

  • clicking “新增” does not show ID;
  • editing an existing record shows ID read-only;
  • saving a new record still succeeds.

Task 2: Final verification

Files:

  • Verify: ruoyi-generator/src/main/resources/qing/index.vue.vm

  • Verify: ruoyi-generator/src/test/java/com/ruoyi/generator/util/QingTemplateSupportTest.java

  • Step 1: Run regression tests

mvn -pl ruoyi-generator -am "-Dtest=QingTemplateSupportTest,FrontProjectServiceImplTest,MysqlDdlBuilderTest" "-Dsurefire.failIfNoSpecifiedTests=false" test

Expected: zero failures and zero errors.

  • Step 2: Check the patch
git diff --check -- ruoyi-generator/src/main/resources/qing/index.vue.vm ruoyi-generator/src/test/java/com/ruoyi/generator/util/QingTemplateSupportTest.java

Expected: exit code 0.