Skip to content

添加代码生成页面插入,编辑,列表,查询,必填列的全选按钮#98

Open
TAYOTOoO wants to merge 1 commit intoyangzongzhuan:masterfrom
TAYOTOoO:master
Open

添加代码生成页面插入,编辑,列表,查询,必填列的全选按钮#98
TAYOTOoO wants to merge 1 commit intoyangzongzhuan:masterfrom
TAYOTOoO:master

Conversation

@TAYOTOoO
Copy link

在工作实际开发中发现,公司数据库表字段长达100+,每次进行代码生成时会出现取消勾选不需要的列操作,费事费力,所以添加一键选中/不选中功能。
主要修改为在editTable.vue中添加按钮进行控制选择状态,修改数据库文件ry_20240629.sql,中gen_table_column表is_insert,is_edit,is_list,is_query列的结构从char改变为tinyint,亲测不会对其功能造成影响,已运行的项目可以使用
ALTER TABLE gen_table_column MODIFY COLUMN is_insert TINYINT(1), MODIFY COLUMN is_edit TINYINT(1), MODIFY COLUMN is_list TINYINT(1), MODIFY COLUMN is_query TINYINT(1);
更新数据表字段
e95ba2e4_12304221

点击按钮后(全选)
2154d0c5_12304221
再次点击按钮后
53c9aa53_12304221

@safe1ine
Copy link

safe1ine commented Feb 6, 2026

@MonkeyCode-AI review 一下

@MonkeyCode-AI
Copy link

MonkeyCode-AI 正在分析任务...

Copy link

@MonkeyCode-AI MonkeyCode-AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

我是 MonkeyCode AI 编程助手,你可以在 GitHub 仓库的 PR 中 at @MonkeyCode-AI 来呼唤我。

任务执行细节请参考: https://monkeycode-ai.com/tasks/public?id=8fbb6a27-671c-4ac3-90c4-a7b570ffa9b8

代码审查结果

实现了一键全选/反选提升字段配置效率,但当前改动存在 Vue/Element 生态不兼容及前后端类型不一致等风险,需修复后再合入。

✨ 代码亮点

  • 在表格列头使用按钮触发“全选/反选”,交互直观,能显著提升大表字段配置效率
  • 全选逻辑使用 every + forEach,代码简洁易读
🚨 Critical ⚠️ Warning 💡 Suggestion
2 0 0

</template>

<script>
<script setup>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

🚨 将 Options API 改为 <script setup> 但未补齐必要导入,且可能与项目 Vue/Element 版本不兼容

该文件从 Options API 整体重写为 <script setup>,但 diff 中未看到对 useRoute/ref/getCurrentInstance 的显式导入;同时模板中大量使用了 Element UI 风格的 /(以及旧式 class-name/slot-scope 的历史痕迹),而 <script setup>、template #default/#header 插槽语法、el-checkbox 的 true-value/false-value 更偏向 Vue3/Element Plus 生态。若项目仍是 Vue2 + Element UI(RuoYi UI 常见组合),该改动会直接导致编译或运行失败。

建议: 确认项目技术栈:

  • 若是 Vue2:不要使用 <script setup> 与 #default/#header 插槽语法;应保留 Options API(或至少使用 Vue2 可用的写法)。
  • 若是 Vue3:补齐 import(ref/useRoute/getCurrentInstance)并确认 Element Plus 组件/属性名一致。
    此外建议避免在同一 PR 中做“功能增强 + 框架风格大迁移”,降低回归风险。

Comment on lines +145 to +178
function toggleSelectAllInsert() {
const allSelected = columns.value.every(row => row.isInsert === "1");
columns.value.forEach(row => {
row.isInsert = allSelected ? "0" : "1";
});
}

function toggleSelectAllEdit() {
const allSelected = columns.value.every(row => row.isEdit === "1");
columns.value.forEach(row => {
row.isEdit = allSelected ? "0" : "1";
});
}

function toggleSelectAllList() {
const allSelected = columns.value.every(row => row.isList === "1");
columns.value.forEach(row => {
row.isList = allSelected ? "0" : "1";
});
}

function toggleSelectAllQuery() {
const allSelected = columns.value.every(row => row.isQuery === "1");
columns.value.forEach(row => {
row.isQuery = allSelected ? "0" : "1";
});
}

function toggleIsRequired() {
const allSelected = columns.value.every(row => row.isRequired === "1");
columns.value.forEach(row => {
row.isRequired = allSelected ? "0" : "1";
});
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

🚨 全选/反选逻辑与字段类型变更不一致:使用字符串“1/0”比较与赋值,tinyint/boolean 场景下可能失效

你在 SQL 中把 is_insert/is_edit/is_list/is_query 改为 tinyint(1),这通常会让后端返回数值 0/1(或布尔),但前端 toggleSelectAll* 仍在用 row.isInsert === "1" 判断,并把值写回 "0"/"1" 字符串。若实际数据是数字 1/0,则 every 判断永远为 false,导致按钮逻辑表现异常;同时提交 updateGenTable 时也可能把字符串发回后端,引发类型不匹配或隐式转换问题。

建议: 统一使用数字 0/1(或统一布尔),并与 el-checkbox 的 true-value/false-value 保持一致。建议前端统一改为 number:

  • every 判断使用 === 1
  • 赋值写回 0/1
  • el-checkbox true-value/false-value 使用 1/0(number)
    如后端仍产出字符串,也应在加载数据时做一次规范化转换。
Suggested change
function toggleSelectAllInsert() {
const allSelected = columns.value.every(row => row.isInsert === "1");
columns.value.forEach(row => {
row.isInsert = allSelected ? "0" : "1";
});
}
function toggleSelectAllEdit() {
const allSelected = columns.value.every(row => row.isEdit === "1");
columns.value.forEach(row => {
row.isEdit = allSelected ? "0" : "1";
});
}
function toggleSelectAllList() {
const allSelected = columns.value.every(row => row.isList === "1");
columns.value.forEach(row => {
row.isList = allSelected ? "0" : "1";
});
}
function toggleSelectAllQuery() {
const allSelected = columns.value.every(row => row.isQuery === "1");
columns.value.forEach(row => {
row.isQuery = allSelected ? "0" : "1";
});
}
function toggleIsRequired() {
const allSelected = columns.value.every(row => row.isRequired === "1");
columns.value.forEach(row => {
row.isRequired = allSelected ? "0" : "1";
});
}
function toggleSelectAllInsert() {
const allSelected = columns.value.every(row => row.isInsert === 1);
columns.value.forEach(row => {
row.isInsert = allSelected ? 0 : 1;
});
}
function toggleSelectAllEdit() {
const allSelected = columns.value.every(row => row.isEdit === 1);
columns.value.forEach(row => {
row.isEdit = allSelected ? 0 : 1;
});
}
function toggleSelectAllList() {
const allSelected = columns.value.every(row => row.isList === 1);
columns.value.forEach(row => {
row.isList = allSelected ? 0 : 1;
});
}
function toggleSelectAllQuery() {
const allSelected = columns.value.every(row => row.isQuery === 1);
columns.value.forEach(row => {
row.isQuery = allSelected ? 0 : 1;
});
}
function toggleIsRequired() {
const allSelected = columns.value.every(row => row.isRequired === "1");
columns.value.forEach(row => {
row.isRequired = allSelected ? "0" : "1";
});
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants