From 6174ca90e12c561c5c562bf46908910fe8214b32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=99=A8=E6=9B=A6?= <635132977@qq.com> Date: Tue, 16 Apr 2024 15:20:55 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E7=BC=96=E8=BE=91=E9=A1=B5=E7=9A=84?= =?UTF-8?q?=E5=88=97=E6=95=B0=E7=94=B1=E5=8E=9F=E5=85=881=E5=88=97?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=B8=BA=E5=A4=9A=EF=BC=881-4=EF=BC=89?= =?UTF-8?q?=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/vm/vue/element.ts.index.vue.vm | 1311 ++++++++--------- 1 file changed, 619 insertions(+), 692 deletions(-) diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/vue/element.ts.index.vue.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/vue/element.ts.index.vue.vm index 14d6229..d128863 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/vue/element.ts.index.vue.vm +++ b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/vue/element.ts.index.vue.vm @@ -1,706 +1,633 @@ <template> - <div class="p-2"> - <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> - <div class="search" v-show="showSearch"> - <el-form :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px"> -#foreach($column in $columns) -#if($column.query) -#set($dictType=$column.dictType) -#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) -#set($parentheseIndex=$column.columnComment.indexOf("(")) -#if($parentheseIndex != -1) -#set($comment=$column.columnComment.substring(0, $parentheseIndex)) -#else -#set($comment=$column.columnComment) -#end -#if($column.htmlType == "input" || $column.htmlType == "textarea") - <el-form-item label="${comment}" prop="${column.javaField}"> - <el-input v-model="queryParams.${column.javaField}" placeholder="请输入${comment}" clearable style="width: 240px" @keyup.enter="handleQuery" /> - </el-form-item> -#elseif(($column.htmlType == "select" || $column.htmlType == "radio") && "" != $dictType) - <el-form-item label="${comment}" prop="${column.javaField}"> - <el-select v-model="queryParams.${column.javaField}" placeholder="请选择${comment}" clearable style="width: 240px"> - <el-option - v-for="dict in ${dictType}" - :key="dict.value" - :label="dict.label" - :value="dict.value" - /> - </el-select> - </el-form-item> -#elseif(($column.htmlType == "select" || $column.htmlType == "radio") && $dictType) - <el-form-item label="${comment}" prop="${column.javaField}"> - <el-select v-model="queryParams.${column.javaField}" placeholder="请选择${comment}" clearable style="width: 240px"> - <el-option label="请选择字典生成" value="" /> - </el-select> - </el-form-item> -#elseif($column.htmlType == "datetime" && $column.queryType != "BETWEEN") - <el-form-item label="${comment}" prop="${column.javaField}"> - <el-date-picker clearable - v-model="queryParams.${column.javaField}" - type="date" - value-format="YYYY-MM-DD" - placeholder="请选择${comment}" + <div class="p-2"> + <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> + <div class="search" v-show="showSearch"> + <el-form :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px"> + #foreach($column in $columns) + #if($column.query) + #set($dictType=$column.dictType) + #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) + #set($parentheseIndex=$column.columnComment.indexOf("(")) + #if($parentheseIndex != -1) + #set($comment=$column.columnComment.substring(0, $parentheseIndex)) + #else + #set($comment=$column.columnComment) + #end + #if($column.htmlType == "input" || $column.htmlType == "textarea") + <el-form-item label="${comment}" prop="${column.javaField}"> + <el-input v-model="queryParams.${column.javaField}" placeholder="请输入${comment}" clearable style="width: 240px" @keyup.enter="handleQuery" /> + </el-form-item> + #elseif(($column.htmlType == "select" || $column.htmlType == "radio") && "" != $dictType) + <el-form-item label="${comment}" prop="${column.javaField}"> + <el-select v-model="queryParams.${column.javaField}" placeholder="请选择${comment}" clearable style="width: 240px"> + <el-option + v-for="dict in ${dictType}" + :key="dict.value" + :label="dict.label" + :value="dict.value" + /> + </el-select> + </el-form-item> + #elseif(($column.htmlType == "select" || $column.htmlType == "radio") && $dictType) + <el-form-item label="${comment}" prop="${column.javaField}"> + <el-select v-model="queryParams.${column.javaField}" placeholder="请选择${comment}" clearable style="width: 240px"> + <el-option label="请选择字典生成" value="" /> + </el-select> + </el-form-item> + #elseif($column.htmlType == "datetime" && $column.queryType != "BETWEEN") + <el-form-item label="${comment}" prop="${column.javaField}"> + <el-date-picker clearable + v-model="queryParams.${column.javaField}" + type="date" + value-format="YYYY-MM-DD" + placeholder="请选择${comment}" + /> + </el-form-item> + #elseif($column.htmlType == "datetime" && $column.queryType == "BETWEEN") + <el-form-item label="${comment}" style="width: 308px"> + <el-date-picker + v-model="dateRange${AttrName}" + value-format="YYYY-MM-DD" + type="daterange" + range-separator="-" + start-placeholder="开始日期" + end-placeholder="结束日期" + :default-time="[new Date(2024, 1, 1, 0, 0, 0), new Date(2024, 1, 1, 23, 59, 59)]" + /> + </el-form-item> + #end + #end + #end + <el-form-item> + <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> + <el-button icon="Refresh" @click="resetQuery">重置</el-button> + </el-form-item> + </el-form> + </div> + </transition> + + <el-card shadow="never"> + <template #header> + <el-row :gutter="10" class="mb8"> + <el-col :span="1.5"> + <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['${moduleName}:${businessName}:add']">新增</el-button> + </el-col> + <el-col :span="1.5"> + <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['${moduleName}:${businessName}:edit']">修改</el-button> + </el-col> + <el-col :span="1.5"> + <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['${moduleName}:${businessName}:remove']">删除</el-button> + </el-col> + <el-col :span="1.5"> + <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['${moduleName}:${businessName}:export']">导出</el-button> + </el-col> + <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> + </el-row> + </template> + + <el-table v-loading="loading" :data="${businessName}List" @selection-change="handleSelectionChange"> + <el-table-column type="selection" width="55" align="center" /> + #foreach($column in $columns) + #set($javaField=$column.javaField) + #set($parentheseIndex=$column.columnComment.indexOf("(")) + #if($parentheseIndex != -1) + #set($comment=$column.columnComment.substring(0, $parentheseIndex)) + #else + #set($comment=$column.columnComment) + #end + #if($column.pk) + <el-table-column label="${comment}" align="center" prop="${javaField}" v-if="${column.list}" /> + #elseif($column.list && $column.htmlType == "datetime") + <el-table-column label="${comment}" align="center" prop="${javaField}" width="180"> + <template #default="scope"> + <span>{{ parseTime(scope.row.${javaField}, '{y}-{m}-{d}') }}</span> + </template> + </el-table-column> + #elseif($column.list && $column.htmlType == "imageUpload") + <el-table-column label="${comment}" align="center" prop="${javaField}" width="100"> + <template #default="scope"> + <image-preview :src="scope.row.${javaField}" :width="50" :height="50"/> + </template> + </el-table-column> + #elseif($column.list && $column.dictType && "" != $column.dictType) + <el-table-column label="${comment}" align="center" prop="${javaField}"> + <template #default="scope"> + #if($column.htmlType == "checkbox") + <dict-tag :options="${column.dictType}" :value="scope.row.${javaField} ? scope.row.${javaField}.split(',') : []"/> + #else + <dict-tag :options="${column.dictType}" :value="scope.row.${javaField}"/> + #end + </template> + </el-table-column> + #elseif($column.list && "" != $javaField) + <el-table-column label="${comment}" align="center" prop="${javaField}" /> + #end + #end + <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> + <template #default="scope"> + <el-tooltip content="修改" placement="top"> + <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['${moduleName}:${businessName}:edit']"></el-button> + </el-tooltip> + <el-tooltip content="删除" placement="top"> + <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['${moduleName}:${businessName}:remove']"></el-button> + </el-tooltip> + </template> + </el-table-column> + </el-table> + + <pagination + v-show="total>0" + :total="total" + v-model:page="queryParams.pageNum" + v-model:limit="queryParams.pageSize" + @pagination="getList" /> - </el-form-item> -#elseif($column.htmlType == "datetime" && $column.queryType == "BETWEEN") - <el-form-item label="${comment}" style="width: 308px"> - <el-date-picker - v-model="dateRange${AttrName}" - value-format="YYYY-MM-DD" - type="daterange" - range-separator="-" - start-placeholder="开始日期" - end-placeholder="结束日期" - :default-time="[new Date(2024, 1, 1, 0, 0, 0), new Date(2024, 1, 1, 23, 59, 59)]" - /> - </el-form-item> -#end -#end -#end - <el-form-item> - <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> - <el-button icon="Refresh" @click="resetQuery">重置</el-button> - </el-form-item> - </el-form> - </div> - </transition> + </el-card> + <!-- 添加或修改${functionName}对话框 --> + <el-dialog :title="dialog.title" v-model="dialog.visible" width="1200px" append-to-body> + <el-form ref="${businessName}FormRef" :model="form" :rules="rules" label-width="100px"> + <el-row> + #foreach($column in $columns) + #set($field=$column.javaField) + #if(($column.insert || $column.edit) && !$column.pk) + #set($parentheseIndex=$column.columnComment.indexOf("(")) + #if($parentheseIndex != -1) + #set($comment=$column.columnComment.substring(0, $parentheseIndex)) + #else + #set($comment=$column.columnComment) + #end + #set($dictType=$column.dictType) + #if(${editColumns}==1) + <el-col :span="24"> + #end + #if(${editColumns}==2) + <el-col :span="12"> + #end + #if(${editColumns}==3) + <el-col :span="8"> + #end + #if(${editColumns}==4) + <el-col :span="6"> + #end + #if($column.htmlType == "input") + #if(${field} == "version") + <el-form-item label="${comment}" prop="${field}" v-show="false"> + <el-input v-model="form.${field}" placeholder="请输入${comment}" /> + </el-form-item> + #else + <el-form-item label="${comment}" prop="${field}"> + <el-input v-model="form.${field}" placeholder="请输入${comment}" /> + </el-form-item> + #end + #elseif($column.htmlType == "imageUpload") + <el-form-item label="${comment}" prop="${field}"> + <image-upload v-model="form.${field}"/> + </el-form-item> + #elseif($column.htmlType == "fileUpload") + <el-form-item label="${comment}" prop="${field}"> + <file-upload v-model="form.${field}"/> + </el-form-item> + #elseif($column.htmlType == "editor") + <el-form-item label="${comment}"> + <editor v-model="form.${field}" :min-height="192"/> + </el-form-item> + #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> + #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> + #elseif($column.htmlType == "checkbox" && "" != $dictType) + <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> + #elseif($column.htmlType == "checkbox" && $dictType) + <el-form-item label="${comment}" prop="${field}"> + <el-checkbox-group v-model="form.${field}"> + <el-checkbox>请选择字典生成</el-checkbox> + </el-checkbox-group> + </el-form-item> + #elseif($column.htmlType == "radio" && "" != $dictType) + <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> + #elseif($column.htmlType == "radio" && $dictType) + <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> + #elseif($column.htmlType == "datetime") + <el-form-item label="${comment}" prop="${field}"> + <el-date-picker clearable + v-model="form.${field}" + type="datetime" + value-format="YYYY-MM-DD HH:mm:ss" + placeholder="请选择${comment}"> + </el-date-picker> + </el-form-item> + #elseif($column.htmlType == "textarea") + <el-form-item label="${comment}" prop="${field}"> + <el-input v-model="form.${field}" type="textarea" placeholder="请输入内容" /> + </el-form-item> + #end + </el-col> + #end - <el-card shadow="never"> - <template #header> - <el-row :gutter="10" class="mb8"> - <el-col :span="1.5"> - <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['${moduleName}:${businessName}:add']">新增</el-button> - </el-col> - <el-col :span="1.5"> - <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['${moduleName}:${businessName}:edit']">修改</el-button> - </el-col> - <el-col :span="1.5"> - <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['${moduleName}:${businessName}:remove']">删除</el-button> - </el-col> - <el-col :span="1.5"> - <el-button type="success" plain icon="Top" @click="handleImport()" v-hasPermi="['${moduleName}:${businessName}:import']">导入</el-button> - </el-col> - <el-col :span="1.5"> - <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['${moduleName}:${businessName}:export']">导出</el-button> - </el-col> - <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> - </el-row> - </template> - - <el-table v-loading="loading" :data="${businessName}List" @selection-change="handleSelectionChange"> - <el-table-column type="selection" width="55" align="center" /> -#foreach($column in $columns) -#set($javaField=$column.javaField) -#set($parentheseIndex=$column.columnComment.indexOf("(")) -#if($parentheseIndex != -1) -#set($comment=$column.columnComment.substring(0, $parentheseIndex)) -#else -#set($comment=$column.columnComment) -#end -#if($column.pk) - <el-table-column label="${comment}" align="center" prop="${javaField}" v-if="${column.list}" /> -#elseif($column.list && $column.htmlType == "datetime") - <el-table-column label="${comment}" align="center" prop="${javaField}" width="180"> - <template #default="scope"> - <span>{{ parseTime(scope.row.${javaField}, '{y}-{m}-{d}') }}</span> - </template> - </el-table-column> -#elseif($column.list && $column.htmlType == "imageUpload") - <el-table-column label="${comment}" align="center" prop="${javaField}" width="100"> - <template #default="scope"> - <image-preview :src="scope.row.${javaField}" :width="50" :height="50"/> - </template> - </el-table-column> -#elseif($column.list && $column.dictType && "" != $column.dictType) - <el-table-column label="${comment}" align="center" prop="${javaField}"> - <template #default="scope"> -#if($column.htmlType == "checkbox") - <dict-tag :options="${column.dictType}" :value="scope.row.${javaField} ? scope.row.${javaField}.split(',') : []"/> -#else - <dict-tag :options="${column.dictType}" :value="scope.row.${javaField}"/> -#end - </template> - </el-table-column> -#elseif($column.list && "" != $javaField) - <el-table-column label="${comment}" align="center" prop="${javaField}" /> -#end -#end - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> - <template #default="scope"> - <el-tooltip content="修改" placement="top"> - <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['${moduleName}:${businessName}:edit']"></el-button> - </el-tooltip> - <el-tooltip content="删除" placement="top"> - <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['${moduleName}:${businessName}:remove']"></el-button> - </el-tooltip> - </template> - </el-table-column> - </el-table> - - <pagination - v-show="total>0" - :total="total" - v-model:page="queryParams.pageNum" - v-model:limit="queryParams.pageSize" - @pagination="getList" - /> - </el-card> - <!-- 添加或修改${functionName}对话框 --> - <el-dialog :title="dialog.title" v-model="dialog.visible" width="780px" append-to-body> - <el-form ref="${businessName}FormRef" :model="form" :rules="rules" label-width="80px"> -#foreach($column in $columns) -#set($field=$column.javaField) -#if(($column.insert || $column.edit) && !$column.pk) -#set($parentheseIndex=$column.columnComment.indexOf("(")) -#if($parentheseIndex != -1) -#set($comment=$column.columnComment.substring(0, $parentheseIndex)) -#else -#set($comment=$column.columnComment) -#end -#set($dictType=$column.dictType) -#if($column.htmlType == "input") - #if(${field} == "version") - <el-form-item label="${comment}" prop="${field}" v-show="false"> - <el-input v-model="form.${field}" placeholder="请输入${comment}" /> - </el-form-item> - #else - <el-form-item label="${comment}" prop="${field}"> - <el-input v-model="form.${field}" placeholder="请输入${comment}" /> - </el-form-item> - #end -#elseif($column.htmlType == "imageUpload") - <el-form-item label="${comment}" prop="${field}"> - <image-upload v-model="form.${field}"/> - </el-form-item> -#elseif($column.htmlType == "fileUpload") - <el-form-item label="${comment}" prop="${field}"> - <file-upload v-model="form.${field}"/> - </el-form-item> -#elseif($column.htmlType == "editor") - <el-form-item label="${comment}"> - <editor v-model="form.${field}" :min-height="192"/> - </el-form-item> -#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> -#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> -#elseif($column.htmlType == "checkbox" && "" != $dictType) - <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> -#elseif($column.htmlType == "checkbox" && $dictType) - <el-form-item label="${comment}" prop="${field}"> - <el-checkbox-group v-model="form.${field}"> - <el-checkbox>请选择字典生成</el-checkbox> - </el-checkbox-group> - </el-form-item> -#elseif($column.htmlType == "radio" && "" != $dictType) - <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> -#elseif($column.htmlType == "radio" && $dictType) - <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> -#elseif($column.htmlType == "datetime") - <el-form-item label="${comment}" prop="${field}"> - <el-date-picker clearable - v-model="form.${field}" - type="datetime" - value-format="YYYY-MM-DD HH:mm:ss" - placeholder="请选择${comment}"> - </el-date-picker> - </el-form-item> -#elseif($column.htmlType == "textarea") - <el-form-item label="${comment}" prop="${field}"> - <el-input v-model="form.${field}" type="textarea" placeholder="请输入内容" /> - </el-form-item> -#end -#end -#end - #if($table.sub) - <el-divider content-position="center">${subTable.functionName}信息</el-divider> - <el-row :gutter="10" class="mb8"> - <el-col :span="1.5"> - <el-button type="primary" icon="Plus" @click="handleAdd${subClassName}">添加</el-button> - </el-col> - <el-col :span="1.5"> - <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-column type="selection" width="50" align="center" /> - <el-table-column label="序号" align="center" prop="index" width="50" /> - #foreach($column in $subTable.columns) - #set($javaField=$column.javaField) - #set($parentheseIndex=$column.columnComment.indexOf("(")) - #if($parentheseIndex != -1) - #set($comment=$column.columnComment.substring(0, $parentheseIndex)) - #else - #set($comment=$column.columnComment) - #end - #if($column.pk || $javaField == ${subTableFkclassName}) - #elseif($column.list && $column.htmlType == "input") - #if(${javaField} == "version") - <el-table-column v-if="false" label="$comment" prop="${javaField}" width="150"> - <template #default="scope"> - <el-input v-model="scope.row.$javaField" placeholder="请输入$comment" /> - </template> - </el-table-column> - #else - <el-table-column label="$comment" prop="${javaField}" width="150"> - <template #default="scope"> - <el-input v-model="scope.row.$javaField" placeholder="请输入$comment" /> - </template> - </el-table-column> - #end - #elseif($column.list && $column.htmlType == "datetime") - <el-table-column label="$comment" prop="${javaField}" width="240"> - <template #default="scope"> - <el-date-picker clearable - v-model="scope.row.$javaField" - type="date" - value-format="YYYY-MM-DD" - placeholder="请选择$comment"> - </el-date-picker> - </template> - </el-table-column> - #elseif($column.list && ($column.htmlType == "select" || $column.htmlType == "radio") && "" != $column.dictType) - <el-table-column label="$comment" prop="${javaField}" width="150"> - <template #default="scope"> - <el-select v-model="scope.row.$javaField" placeholder="请选择$comment"> - <el-option - v-for="dict in $column.dictType" - :key="dict.value" - :label="dict.label" - :value="dict.value" - ></el-option> - </el-select> - </template> - </el-table-column> - #elseif($column.list && ($column.htmlType == "select" || $column.htmlType == "radio") && "" == $column.dictType) - <el-table-column label="$comment" prop="${javaField}" width="150"> - <template #default="scope"> - <el-select v-model="scope.row.$javaField" placeholder="请选择$comment"> - <el-option label="请选择字典生成" value="" /> - </el-select> - </template> - </el-table-column> - #end - #end - </el-table> - #end - </el-form> - <template #footer> - <div class="dialog-footer"> - <el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button> - <el-button @click="cancel">取 消</el-button> - </div> - </template> - </el-dialog> - - <!-- 导入对话框 --> - <el-dialog v-model="upload.open" :title="upload.title" width="400px" append-to-body> - <el-upload - ref="uploadRef" - :limit="1" - accept=".xlsx, .xls" - :headers="upload.headers" - :action="upload.url + '?updateSupport=' + upload.updateSupport" - :disabled="upload.isUploading" - :on-progress="handleFileUploadProgress" - :on-success="handleFileSuccess" - :auto-upload="false" - drag - > - <el-icon class="el-icon--upload"> - <i-ep-upload-filled /> - </el-icon> - <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div> - <template #tip> - <div class="text-center el-upload__tip"> - <div class="el-upload__tip"> - <el-checkbox v-model="upload.updateSupport" /> - 是否更新已经存在的${functionName}数据 - </div> - <span>仅允许导入xls、xlsx格式文件。</span> - <el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline" @click="importTemplate">下载模板 </el-link> - </div> - </template> - </el-upload> - <template #footer> - <div class="dialog-footer"> - <el-button type="primary" @click="submitFileForm">确 定</el-button> - <el-button @click="upload.open = false">取 消</el-button> - </div> - </template> - </el-dialog> - </div> + #end + </el-row> + #if($table.sub) + <el-divider content-position="center">${subTable.functionName}信息</el-divider> + <el-row :gutter="10" class="mb8"> + <el-col :span="1.5"> + <el-button type="primary" icon="Plus" @click="handleAdd${subClassName}">添加</el-button> + </el-col> + <el-col :span="1.5"> + <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-column type="selection" width="50" align="center" /> + <el-table-column label="序号" align="center" prop="index" width="50" /> + #foreach($column in $subTable.columns) + #set($javaField=$column.javaField) + #set($parentheseIndex=$column.columnComment.indexOf("(")) + #if($parentheseIndex != -1) + #set($comment=$column.columnComment.substring(0, $parentheseIndex)) + #else + #set($comment=$column.columnComment) + #end + #if($column.pk || $javaField == ${subTableFkclassName}) + #elseif($column.list && $column.htmlType == "input") + #if(${javaField} == "version") + <el-table-column v-if="false" label="$comment" prop="${javaField}" width="150"> + <template #default="scope"> + <el-input v-model="scope.row.$javaField" placeholder="请输入$comment" /> + </template> + </el-table-column> + #else + <el-table-column label="$comment" prop="${javaField}" width="150"> + <template #default="scope"> + <el-input v-model="scope.row.$javaField" placeholder="请输入$comment" /> + </template> + </el-table-column> + #end + #elseif($column.list && $column.htmlType == "datetime") + <el-table-column label="$comment" prop="${javaField}" width="240"> + <template #default="scope"> + <el-date-picker clearable + v-model="scope.row.$javaField" + type="date" + value-format="YYYY-MM-DD" + placeholder="请选择$comment"> + </el-date-picker> + </template> + </el-table-column> + #elseif($column.list && ($column.htmlType == "select" || $column.htmlType == "radio") && "" != $column.dictType) + <el-table-column label="$comment" prop="${javaField}" width="150"> + <template #default="scope"> + <el-select v-model="scope.row.$javaField" placeholder="请选择$comment"> + <el-option + v-for="dict in $column.dictType" + :key="dict.value" + :label="dict.label" + :value="dict.value" + ></el-option> + </el-select> + </template> + </el-table-column> + #elseif($column.list && ($column.htmlType == "select" || $column.htmlType == "radio") && "" == $column.dictType) + <el-table-column label="$comment" prop="${javaField}" width="150"> + <template #default="scope"> + <el-select v-model="scope.row.$javaField" placeholder="请选择$comment"> + <el-option label="请选择字典生成" value="" /> + </el-select> + </template> + </el-table-column> + #end + #end + </el-table> + #end + </el-form> + <template #footer> + <div class="dialog-footer"> + <el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button> + <el-button @click="cancel">取 消</el-button> + </div> + </template> + </el-dialog> + </div> </template> -<script setup lang="ts"> -import { list${BusinessName}, get${BusinessName}, del${BusinessName}, add${BusinessName}, update${BusinessName} } from '@/api/${moduleName}/${businessName}'; -#if($table.sub) -import { ${BusinessName}VO, ${subClassName}VO, ${BusinessName}Query, ${BusinessName}Form } from '@/api/${moduleName}/${businessName}/types'; -#else -import { ${BusinessName}VO, ${BusinessName}Query, ${BusinessName}Form } from '@/api/${moduleName}/${businessName}/types'; -#end -import { globalHeaders } from '@/utils/request'; - -const { proxy } = getCurrentInstance() as ComponentInternalInstance; -#if(${dicts} != '') -#set($dictsNoSymbol=$dicts.replace("'", "")) -const { ${dictsNoSymbol} } = toRefs<any>(proxy?.useDict(${dicts})); -#end - -// 表格数据 -const ${businessName}List = ref<${BusinessName}VO[]>([]); -#if($table.sub) -// 子表格数据 -const ${subclassName}List = ref<${subClassName}VO[]>([]); -#end -const buttonLoading = ref(false); -const loading = ref(true); -const showSearch = ref(true); -// 选中数组 -const ids = ref<Array<string | number>>([]); -#if($table.sub) -// 子表选中数据 -const checked${subClassName} = ref<${subClassName}VO[]>([]); -#end -// 非单个禁用 -const single = ref(true); -// 非多个禁用 -const multiple = ref(true); -// 总条数 -const total = ref(0); -#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<[DateModelType, DateModelType]>(['', '']); -#end -#end - -const queryFormRef = ref<ElFormInstance>(); -const ${businessName}FormRef = ref<ElFormInstance>(); -const uploadRef = ref<ElUploadInstance>(); - -/*** 导入参数 */ -const upload = reactive<ImportOption>({ - // 是否显示弹出层(导入) - open: false, - // 弹出层标题(导入) - title: '', - // 是否禁用上传 - isUploading: false, - // 是否更新已经存在的用户数据 - updateSupport: 1, - // 设置上传的请求头部 - headers: globalHeaders(), - // 上传的地址 - url: import.meta.env.VITE_APP_BASE_API + '/${moduleName}/${businessName}/importData' -}); - -const dialog = reactive<DialogOption>({ - visible: false, - title: '' -}); - -const initFormData: ${BusinessName}Form = { -#foreach ($column in $columns) -#if($column.insert || $column.edit) -#if($column.htmlType == "checkbox") - $column.javaField: []#if($foreach.count != $columns.size()),#end -#else - #if(${column.javaField} == "version") - $column.javaField: 0#if($foreach.count != $columns.size()),#end - #else - $column.javaField: undefined#if($foreach.count != $columns.size()),#end - #end -#end -#end -#end -}; -const data = reactive<PageData<${BusinessName}Form, ${BusinessName}Query>>({ - form: {...initFormData}, - queryParams: { - pageNum: 1, - pageSize: 10, -#foreach ($column in $columns) -#if($column.query) -#if($column.htmlType != "datetime" || $column.queryType != "BETWEEN") - $column.javaField: undefined, -#end -#end -#end - params: { -#foreach ($column in $columns) -#if($column.query) -#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN") - $column.javaField: undefined#if($foreach.count != $columns.size()),#end -#end -#end -#end - } - }, - rules: { -#foreach ($column in $columns) -#if($column.insert || $column.edit) -#if($column.required) -#set($parentheseIndex=$column.columnComment.indexOf("(")) -#if($parentheseIndex != -1) -#set($comment=$column.columnComment.substring(0, $parentheseIndex)) -#else -#set($comment=$column.columnComment) -#end - $column.javaField: [ - { required: true, message: "$comment不能为空", trigger: #if($column.htmlType == "select" || $column.htmlType == "radio")"change"#else"blur"#end } - ]#if($foreach.count != $columns.size()),#end -#end -#end -#end - } -}); - -const { queryParams, form, rules } = toRefs(data); - -/** 查询${functionName}列表 */ -const getList = async () => { - loading.value = true; -#foreach ($column in $columns) -#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN") - 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)}) - proxy?.addDateRange(queryParams.value, dateRange${AttrName}.value, '${AttrName}'); -#end -#end - const res = await list${BusinessName}(queryParams.value); - ${businessName}List.value = res.rows; - total.value = res.total; - loading.value = false; -}; - -/** 取消按钮 */ -const cancel = () => { - reset(); - dialog.visible = false; -}; - -/** 表单重置 */ -const reset = () => { - form.value = {...initFormData}; -#if($table.sub) - ${subclassName}List.value = []; -#end - ${businessName}FormRef.value?.resetFields(); -}; - -/** 搜索按钮操作 */ -const handleQuery = () => { - queryParams.value.pageNum = 1; - getList(); -}; - -/** 重置按钮操作 */ -const resetQuery = () => { -#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 = ['', '']; -#end -#end - queryFormRef.value?.resetFields(); - handleQuery(); -}; - -/** 多选框选中数据 */ -const handleSelectionChange = (selection: ${BusinessName}VO[]) => { - ids.value = selection.map(item => item.${pkColumn.javaField}); - single.value = selection.length != 1; - multiple.value = !selection.length; -}; - -/** 新增按钮操作 */ -const handleAdd = () => { - reset(); - dialog.visible = true; - dialog.title = '添加${functionName}'; -}; - -/** 修改按钮操作 */ -const handleUpdate = async (row?: ${BusinessName}VO) => { - reset(); - const _${pkColumn.javaField} = row?.${pkColumn.javaField} || ids.value[0]; - const res = await get${BusinessName}(_${pkColumn.javaField}); - Object.assign(form.value, res.data); -#foreach ($column in $columns) - #if($column.htmlType == "checkbox") - form.value.$column.javaField = form.value.${column.javaField}.split(","); - #end -#end -#if($table.sub) - ${subclassName}List.value = res.data.${subclassName}List; -#end - dialog.visible = true; - dialog.title = '修改${functionName}'; -}; - -/** 提交按钮 */ -const submitForm = () => { - ${businessName}FormRef.value?.validate(async (valid: boolean) => { - if (valid) { - buttonLoading.value = true; - #foreach ($column in $columns) - #if($column.htmlType == "checkbox") - form.value.$column.javaField = form.value.${column.javaField}.join(","); +<script setup name="${BusinessName}" lang="ts"> + import { list${BusinessName}, get${BusinessName}, del${BusinessName}, add${BusinessName}, update${BusinessName} } from '@/api/${moduleName}/${businessName}'; + #if($table.sub) + import { ${BusinessName}VO, ${subClassName}VO, ${BusinessName}Query, ${BusinessName}Form } from '@/api/${moduleName}/${businessName}/types'; + #else + import { ${BusinessName}VO, ${BusinessName}Query, ${BusinessName}Form } from '@/api/${moduleName}/${businessName}/types'; #end - #end - #if($table.sub) - form.value.${subclassName}List = ${subclassName}List.value; - #end - if (form.value.${pkColumn.javaField}) { - await update${BusinessName}(form.value).finally(() => (buttonLoading.value = false)); - } else { - await add${BusinessName}(form.value).finally(() => (buttonLoading.value = false)); - } - proxy?.#[[$modal]]#.msgSuccess('操作成功'); - dialog.visible = false; - await getList(); - } - }); -}; -/** 删除按钮操作 */ -const handleDelete = async (row?: ${BusinessName}VO) => { - const _${pkColumn.javaField}s = row?.${pkColumn.javaField} || ids.value; - await proxy?.#[[$modal]]#.confirm('是否确认删除${functionName}编号为"' + _${pkColumn.javaField}s + '"的数据项?').finally(() => loading.value = false); - await del${BusinessName}(_${pkColumn.javaField}s); - proxy?.#[[$modal]]#.msgSuccess("删除成功"); - await getList(); -}; + const { proxy } = getCurrentInstance() as ComponentInternalInstance; + #if(${dicts} != '') + #set($dictsNoSymbol=$dicts.replace("'", "")) + const { ${dictsNoSymbol} } = toRefs<any>(proxy?.useDict(${dicts})); + #end -#if($table.sub) -/** ${subTable.functionName}序号 */ -const row${subClassName}Index = ({row,rowIndex}: {row: ${subClassName}VO,rowIndex: number}) => { - row.index = rowIndex + 1; -} + // 表格数据 + const ${businessName}List = ref<${BusinessName}VO[]>([]); + #if($table.sub) + // 子表格数据 + const ${subclassName}List = ref<${subClassName}VO[]>([]); + #end + const buttonLoading = ref(false); + const loading = ref(true); + const showSearch = ref(true); + // 选中数组 + const ids = ref<Array<string | number>>([]); + #if($table.sub) + // 子表选中数据 + const checked${subClassName} = ref<${subClassName}VO[]>([]); + #end + // 非单个禁用 + const single = ref(true); + // 非多个禁用 + const multiple = ref(true); + // 总条数 + const total = ref(0); + #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<[DateModelType, DateModelType]>(['', '']); + #end + #end -/** ${subTable.functionName}添加按钮操作 */ -const handleAdd${subClassName} = () => { - let obj = {}; -#foreach($column in $subTable.columns) - #if($column.pk || $column.javaField == ${subTableFkclassName}) - #elseif($column.list && "" != $javaField) - #if(${column.javaField} == "version") - obj.$column.javaField = 0; - #else - obj.$column.javaField = ""; - #end - #end -#end - ${subclassName}List.value.push(obj); -} + const queryFormRef = ref<ElFormInstance>(); + const ${businessName}FormRef = ref<ElFormInstance>(); -/** ${subTable.functionName}删除按钮操作 */ -const handleDelete${subClassName} = () => { - if (checked${subClassName}.value.length == 0) { - proxy.#[[$modal]]#.msgError("请先选择要删除的${subTable.functionName}数据"); - } else { - 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 - }); - } -} - -/** 复选框选中数据 */ -const handle${subClassName}SelectionChange = (selection: ${subClassName}VO[]) => { - checked${subClassName}.value = selection.map(item => item.index) -} -#end - -/** 导出按钮操作 */ -const handleExport = () => { - proxy?.download('${moduleName}/${businessName}/export', { - ...queryParams.value - }, `${businessName}_#[[${new Date().getTime()}]]#.xlsx`) -}; - -/** 导入按钮操作 */ -const handleImport = () => { - upload.title = '${functionName}导入'; - upload.open = true; -}; - -/** 下载模板操作 */ -const importTemplate = () => { - proxy?.download('${moduleName}/${businessName}/importTemplate', {}, `${businessName}_template.xlsx`); -}; - -/**文件上传中处理 */ -const handleFileUploadProgress = () => { - upload.isUploading = true; -}; -/** 文件上传成功处理 */ -const handleFileSuccess = (response: any, file: UploadFile) => { - upload.open = false; - upload.isUploading = false; - uploadRef.value?.handleRemove(file); - ElMessageBox.alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + '</div>', '导入结果', { - dangerouslyUseHTMLString: true + const dialog = reactive<DialogOption>({ + visible: false, + title: '' }); - getList(); -}; -/** 提交上传文件 */ -function submitFileForm() { - uploadRef.value?.submit(); -} + const initFormData: ${BusinessName}Form = { + #foreach ($column in $columns) + #if($column.insert || $column.edit) + #if($column.htmlType == "checkbox") + $column.javaField: []#if($foreach.count != $columns.size()),#end + #else + #if(${column.javaField} == "version") + $column.javaField: 0#if($foreach.count != $columns.size()),#end + #else + $column.javaField: undefined#if($foreach.count != $columns.size()),#end + #end + #end + #end + #end + }; + const data = reactive<PageData<${BusinessName}Form, ${BusinessName}Query>>({ + form: {...initFormData}, + queryParams: { + pageNum: 1, + pageSize: 10, + #foreach ($column in $columns) + #if($column.query) + #if($column.htmlType != "datetime" || $column.queryType != "BETWEEN") + $column.javaField: undefined, + #end + #end + #end + params: { + #foreach ($column in $columns) + #if($column.query) + #if($column.htmlType == "datetime" && $column.queryType == "BETWEEN") + $column.javaField: undefined#if($foreach.count != $columns.size()),#end + #end + #end + #end + } + }, + rules: { + #foreach ($column in $columns) + #if($column.insert || $column.edit) + #if($column.required) + #set($parentheseIndex=$column.columnComment.indexOf("(")) + #if($parentheseIndex != -1) + #set($comment=$column.columnComment.substring(0, $parentheseIndex)) + #else + #set($comment=$column.columnComment) + #end + $column.javaField: [ + { required: true, message: "$comment不能为空", trigger: #if($column.htmlType == "select" || $column.htmlType == "radio")"change"#else"blur"#end } + ]#if($foreach.count != $columns.size()),#end + #end + #end + #end + } + }); -onMounted(() => { - getList(); -}); + const { queryParams, form, rules } = toRefs(data); + + /** 查询${functionName}列表 */ + const getList = async () => { + loading.value = true; + #foreach ($column in $columns) + #if($column.htmlType == "datetime" && $column.queryType == "BETWEEN") + 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)}) + proxy?.addDateRange(queryParams.value, dateRange${AttrName}.value, '${AttrName}'); + #end + #end + const res = await list${BusinessName}(queryParams.value); + ${businessName}List.value = res.rows; + total.value = res.total; + loading.value = false; + }; + + /** 取消按钮 */ + const cancel = () => { + reset(); + dialog.visible = false; + }; + + /** 表单重置 */ + const reset = () => { + form.value = {...initFormData}; + #if($table.sub) + ${subclassName}List.value = []; + #end + ${businessName}FormRef.value?.resetFields(); + }; + + /** 搜索按钮操作 */ + const handleQuery = () => { + queryParams.value.pageNum = 1; + getList(); + }; + + /** 重置按钮操作 */ + const resetQuery = () => { + #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 = ['', '']; + #end + #end + queryFormRef.value?.resetFields(); + handleQuery(); + }; + + /** 多选框选中数据 */ + const handleSelectionChange = (selection: ${BusinessName}VO[]) => { + ids.value = selection.map(item => item.${pkColumn.javaField}); + single.value = selection.length != 1; + multiple.value = !selection.length; + }; + + /** 新增按钮操作 */ + const handleAdd = () => { + reset(); + dialog.visible = true; + dialog.title = '添加${functionName}'; + }; + + /** 修改按钮操作 */ + const handleUpdate = async (row?: ${BusinessName}VO) => { + reset(); + const _${pkColumn.javaField} = row?.${pkColumn.javaField} || ids.value[0]; + const res = await get${BusinessName}(_${pkColumn.javaField}); + Object.assign(form.value, res.data); + #foreach ($column in $columns) + #if($column.htmlType == "checkbox") + form.value.$column.javaField = form.value.${column.javaField}.split(","); + #end + #end + #if($table.sub) + ${subclassName}List.value = res.data.${subclassName}List; + #end + dialog.visible = true; + dialog.title = '修改${functionName}'; + }; + + /** 提交按钮 */ + const submitForm = () => { + ${businessName}FormRef.value?.validate(async (valid: boolean) => { + if (valid) { + buttonLoading.value = true; + #foreach ($column in $columns) + #if($column.htmlType == "checkbox") + form.value.$column.javaField = form.value.${column.javaField}.join(","); + #end + #end + #if($table.sub) + form.value.${subclassName}List = ${subclassName}List.value; + #end + if (form.value.${pkColumn.javaField}) { + await update${BusinessName}(form.value).finally(() => (buttonLoading.value = false)); + } else { + await add${BusinessName}(form.value).finally(() => (buttonLoading.value = false)); + } + proxy?.#[[$modal]]#.msgSuccess('操作成功'); + dialog.visible = false; + await getList(); + } + }); + }; + + /** 删除按钮操作 */ + const handleDelete = async (row?: ${BusinessName}VO) => { + const _${pkColumn.javaField}s = row?.${pkColumn.javaField} || ids.value; + await proxy?.#[[$modal]]#.confirm('是否确认删除${functionName}编号为"' + _${pkColumn.javaField}s + '"的数据项?').finally(() => loading.value = false); + await del${BusinessName}(_${pkColumn.javaField}s); + proxy?.#[[$modal]]#.msgSuccess("删除成功"); + await getList(); + }; + + #if($table.sub) + /** ${subTable.functionName}序号 */ + const row${subClassName}Index = ({row,rowIndex}: {row: ${subClassName}VO,rowIndex: number}) => { + row.index = rowIndex + 1; + } + + /** ${subTable.functionName}添加按钮操作 */ + const handleAdd${subClassName} = () => { + let obj = {}; + #foreach($column in $subTable.columns) + #if($column.pk || $column.javaField == ${subTableFkclassName}) + #elseif($column.list && "" != $javaField) + #if(${column.javaField} == "version") + obj.$column.javaField = 0; + #else + obj.$column.javaField = ""; + #end + #end + #end + ${subclassName}List.value.push(obj); + } + + /** ${subTable.functionName}删除按钮操作 */ + const handleDelete${subClassName} = () => { + if (checked${subClassName}.value.length == 0) { + proxy.#[[$modal]]#.msgError("请先选择要删除的${subTable.functionName}数据"); + } else { + 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 + }); + } + } + + /** 复选框选中数据 */ + const handle${subClassName}SelectionChange = (selection: ${subClassName}VO[]) => { + checked${subClassName}.value = selection.map(item => item.index) + } + #end + + /** 导出按钮操作 */ + const handleExport = () => { + proxy?.download('${moduleName}/${businessName}/export', { + ...queryParams.value + }, `${businessName}_#[[${new Date().getTime()}]]#.xlsx`) + }; + + onMounted(() => { + getList(); + }); </script> From c8738f6eb016d4400d0dfbbd8ad09b720ad00588 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=99=A8=E6=9B=A6?= <635132977@qq.com> Date: Tue, 16 Apr 2024 15:21:43 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E7=BC=96=E8=BE=91=E9=A1=B5=E7=9A=84?= =?UTF-8?q?=E5=88=97=E6=95=B0=E7=94=B1=E5=8E=9F=E5=85=881=E5=88=97?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=B8=BA=E5=A4=9A=EF=BC=881-4=EF=BC=89?= =?UTF-8?q?=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ruoyi/generator/domain/GenTable.java | 3 +++ .../src/main/java/com/ruoyi/generator/util/VelocityUtils.java | 2 ++ 2 files changed, 5 insertions(+) diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java b/ruoyi-modules/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java index 6c5d71f..5602538 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java +++ b/ruoyi-modules/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java @@ -156,6 +156,9 @@ public class GenTable implements Serializable /** 备注 */ private String remark; + /** 编辑页列数 */ + private Integer editColumns; + /** * 请求参数 */ diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java b/ruoyi-modules/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java index a3a6cd7..09663da 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java +++ b/ruoyi-modules/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java @@ -70,6 +70,8 @@ public class VelocityUtils { velocityContext.put("columns", genTable.getColumns()); velocityContext.put("table", genTable); velocityContext.put("dicts", getDicts(genTable)); + /* 编辑页列数*/ + velocityContext.put("editColumns", genTable.getEditColumns()); setMenuVelocityContext(velocityContext, genTable); if (GenConstants.TPL_TREE.equals(tplCategory)) { setTreeVelocityContext(velocityContext, genTable); From 108bd8e7c4f69e38a78857b31954b5ad32a4fb53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=99=A8=E6=9B=A6?= <635132977@qq.com> Date: Tue, 16 Apr 2024 17:39:27 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E7=BC=96=E8=BE=91=E9=A1=B5=E7=9A=84?= =?UTF-8?q?=E5=88=97=E6=95=B0=E7=94=B1=E5=8E=9F=E5=85=881=E5=88=97?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=B8=BA=E5=A4=9A=EF=BC=881-4=EF=BC=89?= =?UTF-8?q?=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/vm/vue/element.ts.index.vue.vm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/vue/element.ts.index.vue.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/vue/element.ts.index.vue.vm index d128863..d7a38fd 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/vue/element.ts.index.vue.vm +++ b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/vue/element.ts.index.vue.vm @@ -263,7 +263,7 @@ <el-input v-model="form.${field}" type="textarea" placeholder="请输入内容" /> </el-form-item> #end - </el-col> + </el-col> #end #end From d86def60368e112195acd84a039d460a555dfd57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=99=A8=E6=9B=A6?= <635132977@qq.com> Date: Tue, 16 Apr 2024 18:57:41 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E7=BC=96=E8=BE=91=E9=A1=B5=E7=9A=84?= =?UTF-8?q?=E5=88=97=E6=95=B0=E7=94=B1=E5=8E=9F=E5=85=881=E5=88=97?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=B8=BA=E5=A4=9A=EF=BC=881-4=EF=BC=89?= =?UTF-8?q?=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/vm/vue/element.ts.index.vue.vm | 104 ++++++++++++++++-- script/sql/mysql/update.sql | 3 + script/sql/postgresql/update.sql | 3 + 3 files changed, 102 insertions(+), 8 deletions(-) diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/vue/element.ts.index.vue.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/vue/element.ts.index.vue.vm index d7a38fd..5a7b54a 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/vue/element.ts.index.vue.vm +++ b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/vue/element.ts.index.vue.vm @@ -78,6 +78,9 @@ <el-col :span="1.5"> <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['${moduleName}:${businessName}:remove']">删除</el-button> </el-col> + <el-col :span="1.5"> + <el-button type="success" plain icon="Top" @click="handleImport()" v-hasPermi="['${moduleName}:${businessName}:import']">导入</el-button> + </el-col> <el-col :span="1.5"> <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['${moduleName}:${businessName}:export']">导出</el-button> </el-col> @@ -144,7 +147,7 @@ /> </el-card> <!-- 添加或修改${functionName}对话框 --> - <el-dialog :title="dialog.title" v-model="dialog.visible" width="1200px" append-to-body> + <el-dialog :title="dialog.title" v-model="dialog.visible" width="1000px" append-to-body> <el-form ref="${businessName}FormRef" :model="form" :rules="rules" label-width="100px"> <el-row> #foreach($column in $columns) @@ -158,16 +161,16 @@ #end #set($dictType=$column.dictType) #if(${editColumns}==1) - <el-col :span="24"> + <el-col :span="24"> #end #if(${editColumns}==2) - <el-col :span="12"> + <el-col :span="12"> #end #if(${editColumns}==3) - <el-col :span="8"> + <el-col :span="8"> #end #if(${editColumns}==4) - <el-col :span="6"> + <el-col :span="6"> #end #if($column.htmlType == "input") #if(${field} == "version") @@ -263,9 +266,8 @@ <el-input v-model="form.${field}" type="textarea" placeholder="请输入内容" /> </el-form-item> #end - </el-col> + </el-col> #end - #end </el-row> #if($table.sub) @@ -348,16 +350,54 @@ </div> </template> </el-dialog> + + <!-- 导入对话框 --> + <el-dialog v-model="upload.open" :title="upload.title" width="400px" append-to-body> + <el-upload + ref="uploadRef" + :limit="1" + accept=".xlsx, .xls" + :headers="upload.headers" + :action="upload.url + '?updateSupport=' + upload.updateSupport" + :disabled="upload.isUploading" + :on-progress="handleFileUploadProgress" + :on-success="handleFileSuccess" + :auto-upload="false" + drag + > + <el-icon class="el-icon--upload"> + <i-ep-upload-filled /> + </el-icon> + <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div> + <template #tip> + <div class="text-center el-upload__tip"> + <div class="el-upload__tip"> + <el-checkbox v-model="upload.updateSupport" /> + 是否更新已经存在的${functionName}数据 + </div> + <span>仅允许导入xls、xlsx格式文件。</span> + <el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline" @click="importTemplate">下载模板 </el-link> + </div> + </template> + </el-upload> + <template #footer> + <div class="dialog-footer"> + <el-button type="primary" @click="submitFileForm">确 定</el-button> + <el-button @click="upload.open = false">取 消</el-button> + </div> + </template> + </el-dialog> </div> </template> -<script setup name="${BusinessName}" lang="ts"> +<script setup lang="ts"> import { list${BusinessName}, get${BusinessName}, del${BusinessName}, add${BusinessName}, update${BusinessName} } from '@/api/${moduleName}/${businessName}'; #if($table.sub) import { ${BusinessName}VO, ${subClassName}VO, ${BusinessName}Query, ${BusinessName}Form } from '@/api/${moduleName}/${businessName}/types'; #else import { ${BusinessName}VO, ${BusinessName}Query, ${BusinessName}Form } from '@/api/${moduleName}/${businessName}/types'; #end + import { globalHeaders } from '@/utils/request'; const { proxy } = getCurrentInstance() as ComponentInternalInstance; #if(${dicts} != '') @@ -395,6 +435,23 @@ const queryFormRef = ref<ElFormInstance>(); const ${businessName}FormRef = ref<ElFormInstance>(); + const uploadRef = ref<ElUploadInstance>(); + + /*** 导入参数 */ + const upload = reactive<ImportOption>({ + // 是否显示弹出层(导入) + open: false, + // 弹出层标题(导入) + title: '', + // 是否禁用上传 + isUploading: false, + // 是否更新已经存在的用户数据 + updateSupport: 1, + // 设置上传的请求头部 + headers: globalHeaders(), + // 上传的地址 + url: import.meta.env.VITE_APP_BASE_API + '/${moduleName}/${businessName}/importData' + }); const dialog = reactive<DialogOption>({ visible: false, @@ -627,6 +684,37 @@ }, `${businessName}_#[[${new Date().getTime()}]]#.xlsx`) }; + /** 导入按钮操作 */ + const handleImport = () => { + upload.title = '${functionName}导入'; + upload.open = true; + }; + + /** 下载模板操作 */ + const importTemplate = () => { + proxy?.download('${moduleName}/${businessName}/importTemplate', {}, `${businessName}_template.xlsx`); + }; + + /**文件上传中处理 */ + const handleFileUploadProgress = () => { + upload.isUploading = true; + }; + /** 文件上传成功处理 */ + const handleFileSuccess = (response: any, file: UploadFile) => { + upload.open = false; + upload.isUploading = false; + uploadRef.value?.handleRemove(file); + ElMessageBox.alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + '</div>', '导入结果', { + dangerouslyUseHTMLString: true + }); + getList(); + }; + + /** 提交上传文件 */ + function submitFileForm() { + uploadRef.value?.submit(); + } + onMounted(() => { getList(); }); diff --git a/script/sql/mysql/update.sql b/script/sql/mysql/update.sql index b055636..bd7934e 100644 --- a/script/sql/mysql/update.sql +++ b/script/sql/mysql/update.sql @@ -72,3 +72,6 @@ insert into sys_menu values('130', 'EasyRetry控制台', '2', '6', 'easyret -- 增加ancestors字段 ALTER TABLE `mf_product` ADD COLUMN `ancestors` VARCHAR(760) NULL DEFAULT '' COMMENT '祖级列表' AFTER `parent_id`; ALTER TABLE `demo_product` ADD COLUMN `ancestors` VARCHAR(760) NULL DEFAULT '' COMMENT '祖级列表' AFTER `parent_id`; + +--增加edit_columns字段 +ALTER TABLE `gen_table` ADD COLUMN `edit_columns` TINYINT NULL DEFAULT 1 AFTER `remark`; diff --git a/script/sql/postgresql/update.sql b/script/sql/postgresql/update.sql index b3e2c5c..b0febc8 100644 --- a/script/sql/postgresql/update.sql +++ b/script/sql/postgresql/update.sql @@ -133,3 +133,6 @@ insert into sys_menu values('130', 'EasyRetry控制台', '2', '6', 'easyret -- 增加ancestors字段 ALTER TABLE "mf_product" ADD "ancestors" VARCHAR(760) NULL; COMMENT ON COLUMN "mf_product"."ancestors" IS '祖级列表'; + +--增加edit_columns字段 +ALTER TABLE `gen_table` ADD COLUMN `edit_columns` TINYINT NULL DEFAULT 1 AFTER `remark`;