From 790736c98d8a7d6d1194d1e642946bc8219edcfb Mon Sep 17 00:00:00 2001
From: RuoYi <yzz_ivy@163.com>
Date: Sun, 12 Apr 2026 10:40:37 +0800
Subject: [PATCH] 新增代码生成详情页功能
---
ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/index.vue.vm | 397 +++++++++++++++++++++++++++++++-------------------------
1 files changed, 220 insertions(+), 177 deletions(-)
diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/index.vue.vm b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/index.vue.vm
index f66cc3b..6680775 100644
--- a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/index.vue.vm
+++ b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/index.vue.vm
@@ -73,7 +73,7 @@
plain
icon="Plus"
@click="handleAdd"
- v-hasPermi="['${moduleName}:${businessName}:add']"
+ v-hasPermi="['${permissionPrefix}:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
@@ -83,7 +83,7 @@
icon="Edit"
:disabled="single"
@click="handleUpdate"
- v-hasPermi="['${moduleName}:${businessName}:edit']"
+ v-hasPermi="['${permissionPrefix}:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
@@ -93,7 +93,7 @@
icon="Delete"
:disabled="multiple"
@click="handleDelete"
- v-hasPermi="['${moduleName}:${businessName}:remove']"
+ v-hasPermi="['${permissionPrefix}:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
@@ -102,7 +102,7 @@
plain
icon="Download"
@click="handleExport"
- v-hasPermi="['${moduleName}:${businessName}:export']"
+ v-hasPermi="['${permissionPrefix}:export']"
>导出</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
@@ -148,18 +148,11 @@
#end
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
- <el-button
- type="text"
- icon="Edit"
- @click="handleUpdate(scope.row)"
- v-hasPermi="['${moduleName}:${businessName}:edit']"
- >修改</el-button>
- <el-button
- type="text"
- icon="Delete"
- @click="handleDelete(scope.row)"
- v-hasPermi="['${moduleName}:${businessName}:remove']"
- >删除</el-button>
+#if($genView)
+ <el-button link type="primary" icon="View" @click="handleViewData(scope.row)" v-hasPermi="['${permissionPrefix}:query']">详情</el-button>
+#end
+ <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['${permissionPrefix}:edit']">修改</el-button>
+ <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['${permissionPrefix}:remove']">删除</el-button>
</template>
</el-table-column>
</el-table>
@@ -172,9 +165,21 @@
@pagination="getList"
/>
+#if($genView)
+ <!-- ${functionName}详情抽屉 -->
+ <${businessName}-view-drawer ref="${businessName}ViewRef" />
+#end
<!-- 添加或修改${functionName}对话框 -->
- <el-dialog :title="title" v-model="open" width="500px" append-to-body>
- <el-form ref="${businessName}Ref" :model="form" :rules="rules" label-width="80px">
+#if($table.formColNum == 2)
+#set($dialogWidth = "800px")
+#elseif($table.formColNum == 3)
+#set($dialogWidth = "1100px")
+#else
+#set($dialogWidth = "500px")
+#end
+ <el-dialog :title="title" v-model="open" width="${dialogWidth}" append-to-body>
+ <el-form ref="${businessName}Ref" :model="form" :rules="rules" label-width="100px">
+ <el-row>
#foreach($column in $columns)
#set($field=$column.javaField)
#if($column.insert && !$column.pk)
@@ -187,90 +192,121 @@
#end
#set($dictType=$column.dictType)
#if($column.htmlType == "input")
- <el-form-item label="${comment}" prop="${field}">
- <el-input v-model="form.${field}" placeholder="请输入${comment}" />
- </el-form-item>
+ <el-col :span="${colSpan}">
+ <el-form-item label="${comment}" prop="${field}">
+ <el-input v-model="form.${field}" placeholder="请输入${comment}" />
+ </el-form-item>
+ </el-col>
#elseif($column.htmlType == "imageUpload")
- <el-form-item label="${comment}">
- <image-upload v-model="form.${field}"/>
- </el-form-item>
+ <el-col :span="${colSpan}">
+ <el-form-item label="${comment}" prop="${field}">
+ <image-upload v-model="form.${field}"/>
+ </el-form-item>
+ </el-col>
#elseif($column.htmlType == "fileUpload")
- <el-form-item label="${comment}">
- <file-upload v-model="form.${field}"/>
- </el-form-item>
+ <el-col :span="${colSpan}">
+ <el-form-item label="${comment}" prop="${field}">
+ <file-upload v-model="form.${field}"/>
+ </el-form-item>
+ </el-col>
#elseif($column.htmlType == "editor")
- <el-form-item label="${comment}">
- <editor v-model="form.${field}" :min-height="192"/>
- </el-form-item>
+ <el-col :span="24">
+ <el-form-item label="${comment}">
+ <editor v-model="form.${field}" :min-height="192"/>
+ </el-form-item>
+ </el-col>
#elseif($column.htmlType == "select" && "" != $dictType)
- <el-form-item label="${comment}" prop="${field}">
- <el-select v-model="form.${field}" placeholder="请选择${comment}">
- <el-option
- v-for="dict in ${dictType}"
- :key="dict.value"
- :label="dict.label"
- #if($column.javaType == "Integer" || $column.javaType == "Long"):value="parseInt(dict.value)"#else:value="dict.value"#end
-
- ></el-option>
- </el-select>
- </el-form-item>
+ <el-col :span="${colSpan}">
+ <el-form-item label="${comment}" prop="${field}">
+ <el-select v-model="form.${field}" placeholder="请选择${comment}">
+ <el-option
+ v-for="dict in ${dictType}"
+ :key="dict.value"
+ :label="dict.label"
+#if($column.javaType == "Integer" || $column.javaType == "Long")
+ :value="parseInt(dict.value)"
+#else
+ :value="dict.value"
+#end
+ ></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
#elseif($column.htmlType == "select" && $dictType)
- <el-form-item label="${comment}" prop="${field}">
- <el-select v-model="form.${field}" placeholder="请选择${comment}">
- <el-option label="请选择字典生成" value="" />
- </el-select>
- </el-form-item>
+ <el-col :span="${colSpan}">
+ <el-form-item label="${comment}" prop="${field}">
+ <el-select v-model="form.${field}" placeholder="请选择${comment}">
+ <el-option label="请选择字典生成" value="" />
+ </el-select>
+ </el-form-item>
+ </el-col>
#elseif($column.htmlType == "checkbox" && "" != $dictType)
- <el-form-item label="${comment}">
- <el-checkbox-group v-model="form.${field}">
- <el-checkbox
- v-for="dict in ${dictType}"
- :key="dict.value"
- :label="dict.value">
- {{dict.label}}
- </el-checkbox>
- </el-checkbox-group>
- </el-form-item>
+ <el-col :span="${colSpan}">
+ <el-form-item label="${comment}" prop="${field}">
+ <el-checkbox-group v-model="form.${field}">
+ <el-checkbox
+ v-for="dict in ${dictType}"
+ :key="dict.value"
+ :label="dict.value">
+ {{dict.label}}
+ </el-checkbox>
+ </el-checkbox-group>
+ </el-form-item>
+ </el-col>
#elseif($column.htmlType == "checkbox" && $dictType)
- <el-form-item label="${comment}">
- <el-checkbox-group v-model="form.${field}">
- <el-checkbox>请选择字典生成</el-checkbox>
- </el-checkbox-group>
- </el-form-item>
+ <el-col :span="${colSpan}">
+ <el-form-item label="${comment}" prop="${field}">
+ <el-checkbox-group v-model="form.${field}">
+ <el-checkbox>请选择字典生成</el-checkbox>
+ </el-checkbox-group>
+ </el-form-item>
+ </el-col>
#elseif($column.htmlType == "radio" && "" != $dictType)
- <el-form-item label="${comment}">
- <el-radio-group v-model="form.${field}">
- <el-radio
- v-for="dict in ${dictType}"
- :key="dict.value"
- #if($column.javaType == "Integer" || $column.javaType == "Long"):label="parseInt(dict.value)"#else:label="dict.value"#end
-
- >{{dict.label}}</el-radio>
- </el-radio-group>
- </el-form-item>
+ <el-col :span="${colSpan}">
+ <el-form-item label="${comment}" prop="${field}">
+ <el-radio-group v-model="form.${field}">
+ <el-radio
+ v-for="dict in ${dictType}"
+ :key="dict.value"
+#if($column.javaType == "Integer" || $column.javaType == "Long")
+ :label="parseInt(dict.value)"
+#else
+ :label="dict.value"
+#end
+ >{{dict.label}}</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
#elseif($column.htmlType == "radio" && $dictType)
- <el-form-item label="${comment}">
- <el-radio-group v-model="form.${field}">
- <el-radio label="1">请选择字典生成</el-radio>
- </el-radio-group>
- </el-form-item>
+ <el-col :span="${colSpan}">
+ <el-form-item label="${comment}" prop="${field}">
+ <el-radio-group v-model="form.${field}">
+ <el-radio label="1">请选择字典生成</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
#elseif($column.htmlType == "datetime")
- <el-form-item label="${comment}" prop="${field}">
- <el-date-picker clearable
- v-model="form.${field}"
- type="date"
- value-format="YYYY-MM-DD"
- placeholder="请选择${comment}">
- </el-date-picker>
- </el-form-item>
+ <el-col :span="${colSpan}">
+ <el-form-item label="${comment}" prop="${field}">
+ <el-date-picker clearable
+ v-model="form.${field}"
+ type="date"
+ value-format="YYYY-MM-DD"
+ placeholder="请选择${comment}">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
#elseif($column.htmlType == "textarea")
- <el-form-item label="${comment}" prop="${field}">
- <el-input v-model="form.${field}" type="textarea" placeholder="请输入内容" />
- </el-form-item>
+ <el-col :span="24">
+ <el-form-item label="${comment}" prop="${field}">
+ <el-input v-model="form.${field}" type="textarea" placeholder="请输入内容" />
+ </el-form-item>
+ </el-col>
#end
#end
#end
#end
+ </el-row>
#if($table.sub)
<el-divider content-position="center">${subTable.functionName}信息</el-divider>
<el-row :gutter="10" class="mb8">
@@ -281,9 +317,13 @@
<el-button type="danger" icon="Delete" @click="handleDelete${subClassName}">删除</el-button>
</el-col>
</el-row>
- <el-table :data="${subclassName}List" :row-class-name="row${subClassName}Index" @selection-change="handle${subClassName}SelectionChange" ref="${subclassName}">
+ <el-table :data="${subclassName}List" @selection-change="handle${subClassName}SelectionChange" ref="${subclassName}">
<el-table-column type="selection" width="50" align="center" />
- <el-table-column label="序号" align="center" prop="index" width="50"/>
+ <el-table-column label="序号" width="60">
+ <template #default="{ $index }">
+ {{ $index + 1 }}
+ </template>
+ </el-table-column>
#foreach($column in $subTable.columns)
#set($javaField=$column.javaField)
#set($parentheseIndex=$column.columnComment.indexOf("("))
@@ -347,33 +387,36 @@
</template>
<script setup name="${BusinessName}">
-import { list${BusinessName}, get${BusinessName}, del${BusinessName}, add${BusinessName}, update${BusinessName} } from "@/api/${moduleName}/${businessName}";
+import { list${BusinessName}, get${BusinessName}, del${BusinessName}, add${BusinessName}, update${BusinessName} } from "@/api/${moduleName}/${businessName}"
+#if($genView)
+import ${BusinessName}ViewDrawer from "./view"
+#end
-const { proxy } = getCurrentInstance();
+const { proxy } = getCurrentInstance()
#if(${dicts} != '')
#set($dictsNoSymbol=$dicts.replace("'", ""))
-const { ${dictsNoSymbol} } = proxy.useDict(${dicts});
+const { ${dictsNoSymbol} } = useDict(${dicts})
#end
-const ${businessName}List = ref([]);
+const ${businessName}List = ref([])
#if($table.sub)
-const ${subclassName}List = ref([]);
+const ${subclassName}List = ref([])
#end
-const open = ref(false);
-const loading = ref(true);
-const showSearch = ref(true);
-const ids = ref([]);
+const open = ref(false)
+const loading = ref(true)
+const showSearch = ref(true)
+const ids = ref([])
#if($table.sub)
-const checked${subClassName} = ref([]);
+const checked${subClassName} = ref([])
#end
-const single = ref(true);
-const multiple = ref(true);
-const total = ref(0);
-const title = ref("");
+const single = ref(true)
+const multiple = ref(true)
+const total = ref(0)
+const title = ref("")
#foreach ($column in $columns)
#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
-const daterange${AttrName} = ref([]);
+const daterange${AttrName} = ref([])
#end
#end
@@ -384,7 +427,7 @@
pageSize: 10,
#foreach ($column in $columns)
#if($column.query)
- $column.javaField: null#if($foreach.count != $columns.size()),#end
+ $column.javaField: undefined#if($foreach.count != $columns.size()),#end
#end
#end
},
@@ -398,69 +441,67 @@
#set($comment=$column.columnComment)
#end
$column.javaField: [
- { required: true, message: "$comment不能为空", trigger: #if($column.htmlType == "select")"change"#else"blur"#end }
+ { required: true, message: "$comment不能为空", trigger: #if($column.htmlType == "select" || $column.htmlType == "radio")"change"#else"blur"#end }
]#if($foreach.count != $columns.size()),#end
#end
#end
}
-});
+})
-const { queryParams, form, rules } = toRefs(data);
+const { queryParams, form, rules } = toRefs(data)
/** 查询${functionName}列表 */
function getList() {
- loading.value = true;
+ loading.value = true
#foreach ($column in $columns)
#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
- queryParams.value.params = {};
+ queryParams.value.params = {}
#break
#end
#end
#foreach ($column in $columns)
#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
- if (null != daterange${AttrName} && '' != daterange${AttrName}) {
- queryParams.value.params["begin${AttrName}"] = daterange${AttrName}.value[0];
- queryParams.value.params["end${AttrName}"] = daterange${AttrName}.value[1];
+ if (null != daterange${AttrName}.value && '' != daterange${AttrName}.value) {
+ queryParams.value.params["begin${AttrName}"] = daterange${AttrName}.value[0]
+ queryParams.value.params["end${AttrName}"] = daterange${AttrName}.value[1]
}
#end
#end
list${BusinessName}(queryParams.value).then(response => {
- ${businessName}List.value = response.rows;
- total.value = response.total;
- loading.value = false;
- });
+ ${businessName}List.value = response.rows
+ total.value = response.total
+ loading.value = false
+ })
}
-// 取消按钮
+/** 取消按钮 */
function cancel() {
- open.value = false;
- reset();
+ open.value = false
+ reset()
}
-// 表单重置
+/** 表单重置 */
function reset() {
form.value = {
#foreach ($column in $columns)
-#if($column.htmlType == "radio")
- $column.javaField: #if($column.javaType == "Integer" || $column.javaType == "Long")0#else"0"#end#if($foreach.count != $columns.size()),#end
-#elseif($column.htmlType == "checkbox")
+#if($column.htmlType == "checkbox")
$column.javaField: []#if($foreach.count != $columns.size()),#end
#else
$column.javaField: null#if($foreach.count != $columns.size()),#end
#end
#end
- };
+ }
#if($table.sub)
- ${subclassName}List.value = [];
+ ${subclassName}List.value = []
#end
- proxy.resetForm("${businessName}Ref");
+ proxy.resetForm("${businessName}Ref")
}
/** 搜索按钮操作 */
function handleQuery() {
- queryParams.value.pageNum = 1;
- getList();
+ queryParams.value.pageNum = 1
+ getList()
}
/** 重置按钮操作 */
@@ -468,44 +509,44 @@
#foreach ($column in $columns)
#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
- daterange${AttrName}.value = [];
+ daterange${AttrName}.value = []
#end
#end
- proxy.resetForm("queryRef");
- handleQuery();
+ proxy.resetForm("queryRef")
+ handleQuery()
}
-// 多选框选中数据
+/** 多选框选中数据 */
function handleSelectionChange(selection) {
- ids.value = selection.map(item => item.${pkColumn.javaField});
- single.value = selection.length != 1;
- multiple.value = !selection.length;
+ ids.value = selection.map(item => item.${pkColumn.javaField})
+ single.value = selection.length != 1
+ multiple.value = !selection.length
}
/** 新增按钮操作 */
function handleAdd() {
- reset();
- open.value = true;
- title.value = "添加${functionName}";
+ reset()
+ open.value = true
+ title.value = "添加${functionName}"
}
/** 修改按钮操作 */
function handleUpdate(row) {
- reset();
+ reset()
const _${pkColumn.javaField} = row.${pkColumn.javaField} || ids.value
get${BusinessName}(_${pkColumn.javaField}).then(response => {
- form.value = response.data;
+ form.value = response.data
#foreach ($column in $columns)
#if($column.htmlType == "checkbox")
- form.value.$column.javaField = form.value.${column.javaField}.split(",");
+ form.value.$column.javaField = form.value.${column.javaField}.split(",")
#end
#end
#if($table.sub)
- ${subclassName}List.value = response.data.${subclassName}List;
+ ${subclassName}List.value = response.data.${subclassName}List
#end
- open.value = true;
- title.value = "修改${functionName}";
- });
+ open.value = true
+ title.value = "修改${functionName}"
+ })
}
/** 提交按钮 */
@@ -514,74 +555,76 @@
if (valid) {
#foreach ($column in $columns)
#if($column.htmlType == "checkbox")
- form.value.$column.javaField = form.value.${column.javaField}.join(",");
+ form.value.$column.javaField = form.value.${column.javaField}.join(",")
#end
#end
#if($table.sub)
- form.value.${subclassName}List = ${subclassName}List.value;
+ form.value.${subclassName}List = ${subclassName}List.value
#end
if (form.value.${pkColumn.javaField} != null) {
- update${BusinessName}(form.value).then(response => {
- proxy.#[[$modal]]#.msgSuccess("修改成功");
- open.value = false;
- getList();
- });
+ update${BusinessName}(form.value).then(() => {
+ proxy.#[[$modal]]#.msgSuccess("修改成功")
+ open.value = false
+ getList()
+ })
} else {
- add${BusinessName}(form.value).then(response => {
- proxy.#[[$modal]]#.msgSuccess("新增成功");
- open.value = false;
- getList();
- });
+ add${BusinessName}(form.value).then(() => {
+ proxy.#[[$modal]]#.msgSuccess("新增成功")
+ open.value = false
+ getList()
+ })
}
}
- });
+ })
}
/** 删除按钮操作 */
function handleDelete(row) {
- const _${pkColumn.javaField}s = row.${pkColumn.javaField} || ids.value;
+ const _${pkColumn.javaField}s = row.${pkColumn.javaField} || ids.value
proxy.#[[$modal]]#.confirm('是否确认删除${functionName}编号为"' + _${pkColumn.javaField}s + '"的数据项?').then(function() {
- return del${BusinessName}(_${pkColumn.javaField}s);
+ return del${BusinessName}(_${pkColumn.javaField}s)
}).then(() => {
- getList();
- proxy.#[[$modal]]#.msgSuccess("删除成功");
- }).catch(() => {});
+ getList()
+ proxy.#[[$modal]]#.msgSuccess("删除成功")
+ }).catch(() => {})
}
#if($table.sub)
-/** ${subTable.functionName}序号 */
-function row${subClassName}Index({ row, rowIndex }) {
- row.index = rowIndex + 1;
-}
-
/** ${subTable.functionName}添加按钮操作 */
function handleAdd${subClassName}() {
- let obj = {};
+ let obj = {}
#foreach($column in $subTable.columns)
#if($column.pk || $column.javaField == ${subTableFkclassName})
#elseif($column.list && "" != $javaField)
- obj.$column.javaField = "";
+ obj.$column.javaField = undefined
#end
#end
- ${subclassName}List.value.push(obj);
+ ${subclassName}List.value.push(obj)
}
/** ${subTable.functionName}删除按钮操作 */
function handleDelete${subClassName}() {
if (checked${subClassName}.value.length == 0) {
- proxy.#[[$modal]]#.msgError("请先选择要删除的${subTable.functionName}数据");
+ proxy.#[[$modal]]#.msgError("请先选择要删除的${subTable.functionName}数据")
} else {
- const ${subclassName}s = ${subclassName}List.value;
- const checked${subClassName}s = checked${subClassName}.value;
+ const ${subclassName}s = ${subclassName}List.value
+ const checked${subClassName}s = checked${subClassName}.value
${subclassName}List.value = ${subclassName}s.filter(function(item) {
return checked${subClassName}s.indexOf(item.index) == -1
- });
+ })
}
}
/** 复选框选中数据 */
function handle${subClassName}SelectionChange(selection) {
checked${subClassName}.value = selection.map(item => item.index)
+}
+
+#end
+#if($genView)
+/** 详情按钮操作 */
+function handleViewData(row) {
+ proxy.#[[$]]#refs["${businessName}ViewRef"].open(row.${pkColumn.javaField})
}
#end
@@ -592,5 +635,5 @@
}, `${businessName}_#[[${new Date().getTime()}]]#.xlsx`)
}
-getList();
+getList()
</script>
--
Gitblit v1.9.3