Commit 9b39f86718482f80f7819ef434e2533e0137b01e
1 parent
68c80336
feat: 新增 vben5-ele-general 代码生成模板
Showing
8 changed files
with
389 additions
and
381 deletions
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java
| @@ -201,6 +201,23 @@ public class CodegenEngine { | @@ -201,6 +201,23 @@ public class CodegenEngine { | ||
| 201 | vue3FilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-list.vue")) | 201 | vue3FilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-list.vue")) |
| 202 | .put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_SCHEMA.getType(), vue3Vben5EpSchemaTemplatePath("views/modules/list_sub_erp.vue"), // 特殊:主子表专属逻辑 | 202 | .put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_SCHEMA.getType(), vue3Vben5EpSchemaTemplatePath("views/modules/list_sub_erp.vue"), // 特殊:主子表专属逻辑 |
| 203 | vue3FilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-list.vue")) | 203 | vue3FilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-list.vue")) |
| 204 | + // VUE3_VBEN5_EP | ||
| 205 | + .put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_GENERAL.getType(), vue3Vben5EpGeneralTemplatePath("views/index.vue"), | ||
| 206 | + vue3FilePath("views/${table.moduleName}/${table.businessName}/index.vue")) | ||
| 207 | + .put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_GENERAL.getType(), vue3Vben5EpGeneralTemplatePath("views/form.vue"), | ||
| 208 | + vue3FilePath("views/${table.moduleName}/${table.businessName}/modules/form.vue")) | ||
| 209 | + .put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_GENERAL.getType(), vue3Vben5EpGeneralTemplatePath("api/api.ts"), | ||
| 210 | + vue3FilePath("api/${table.moduleName}/${table.businessName}/index.ts")) | ||
| 211 | + .put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_GENERAL.getType(), vue3Vben5EpGeneralTemplatePath("views/modules/form_sub_normal.vue"), // 特殊:主子表专属逻辑 | ||
| 212 | + vue3FilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-form.vue")) | ||
| 213 | + .put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_GENERAL.getType(), vue3Vben5EpGeneralTemplatePath("views/modules/form_sub_inner.vue"), // 特殊:主子表专属逻辑 | ||
| 214 | + vue3FilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-form.vue")) | ||
| 215 | + .put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_GENERAL.getType(), vue3Vben5EpGeneralTemplatePath("views/modules/form_sub_erp.vue"), // 特殊:主子表专属逻辑 | ||
| 216 | + vue3FilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-form.vue")) | ||
| 217 | + .put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_GENERAL.getType(), vue3Vben5EpGeneralTemplatePath("views/modules/list_sub_inner.vue"), // 特殊:主子表专属逻辑 | ||
| 218 | + vue3FilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-list.vue")) | ||
| 219 | + .put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_GENERAL.getType(), vue3Vben5EpGeneralTemplatePath("views/modules/list_sub_erp.vue"), // 特殊:主子表专属逻辑 | ||
| 220 | + vue3FilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-list.vue")) | ||
| 204 | .build(); | 221 | .build(); |
| 205 | 222 | ||
| 206 | @Resource | 223 | @Resource |
yudao-module-infra/src/main/resources/codegen/vue3_vben5_ele/general/views/form.vue.vm
| 1 | <script lang="ts" setup> | 1 | <script lang="ts" setup> |
| 2 | import type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}'; | 2 | import type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}'; |
| 3 | -import type { Rule } from 'ant-design-vue/es/form'; | 3 | +import type { FormRules } from 'element-plus'; |
| 4 | 4 | ||
| 5 | import { useVbenModal } from '@vben/common-ui'; | 5 | import { useVbenModal } from '@vben/common-ui'; |
| 6 | import { Tinymce as RichTextarea } from '#/components/tinymce'; | 6 | import { Tinymce as RichTextarea } from '#/components/tinymce'; |
| 7 | import { ImageUpload, FileUpload } from "#/components/upload"; | 7 | import { ImageUpload, FileUpload } from "#/components/upload"; |
| 8 | -import { message, Tabs, Form, Input, Textarea, Select, RadioGroup, Radio, CheckboxGroup, Checkbox, DatePicker, TreeSelect } from 'ant-design-vue'; | 8 | +import { ElMessage, ElTabs, ElTabPane, ElForm, ElFormItem, ElInput, ElSelect, ElOption, ElRadioGroup, ElRadio, ElCheckboxGroup, ElCheckbox, ElDatePicker, ElTreeSelect } from 'element-plus'; |
| 9 | import { DICT_TYPE, getDictOptions } from '#/utils'; | 9 | import { DICT_TYPE, getDictOptions } from '#/utils'; |
| 10 | #if($table.templateType == 2)## 树表需要导入这些 | 10 | #if($table.templateType == 2)## 树表需要导入这些 |
| 11 | -import { get${simpleClassName}List } from '#/api/${table.moduleName}/${table.businessName}'; | 11 | +import { get${simpleClassName}List } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}'; |
| 12 | import { handleTree } from '@vben/utils' | 12 | import { handleTree } from '@vben/utils' |
| 13 | #end | 13 | #end |
| 14 | ## 特殊:主子表专属逻辑 | 14 | ## 特殊:主子表专属逻辑 |
| @@ -20,9 +20,9 @@ import { handleTree } from '@vben/utils' | @@ -20,9 +20,9 @@ import { handleTree } from '@vben/utils' | ||
| 20 | #end | 20 | #end |
| 21 | #end | 21 | #end |
| 22 | 22 | ||
| 23 | -import { computed, ref } from 'vue'; | 23 | +import { computed, ref, reactive } from 'vue'; |
| 24 | import { $t } from '#/locales'; | 24 | import { $t } from '#/locales'; |
| 25 | -import { get${simpleClassName}, create${simpleClassName}, update${simpleClassName} } from '#/api/${table.moduleName}/${table.businessName}'; | 25 | +import { get${simpleClassName}, create${simpleClassName}, update${simpleClassName} } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}'; |
| 26 | 26 | ||
| 27 | const emit = defineEmits(['success']); | 27 | const emit = defineEmits(['success']); |
| 28 | 28 | ||
| @@ -38,14 +38,14 @@ const formData = ref<Partial<${simpleClassName}Api.${simpleClassName}>>({ | @@ -38,14 +38,14 @@ const formData = ref<Partial<${simpleClassName}Api.${simpleClassName}>>({ | ||
| 38 | #end | 38 | #end |
| 39 | #end | 39 | #end |
| 40 | }); | 40 | }); |
| 41 | -const rules: Record<string, Rule[]> = { | 41 | +const rules = reactive<FormRules>({ |
| 42 | #foreach ($column in $columns) | 42 | #foreach ($column in $columns) |
| 43 | #if (($column.createOperation || $column.updateOperation) && !$column.nullable && !${column.primaryKey})## 创建或者更新操作 && 要求非空 && 非主键 | 43 | #if (($column.createOperation || $column.updateOperation) && !$column.nullable && !${column.primaryKey})## 创建或者更新操作 && 要求非空 && 非主键 |
| 44 | #set($comment=$column.columnComment) | 44 | #set($comment=$column.columnComment) |
| 45 | $column.javaField: [{ required: true, message: '${comment}不能为空', trigger: #if($column.htmlType == 'select')'change'#else'blur'#end }], | 45 | $column.javaField: [{ required: true, message: '${comment}不能为空', trigger: #if($column.htmlType == 'select')'change'#else'blur'#end }], |
| 46 | #end | 46 | #end |
| 47 | #end | 47 | #end |
| 48 | -}; | 48 | +}); |
| 49 | ## 特殊:树表专属逻辑 | 49 | ## 特殊:树表专属逻辑 |
| 50 | #if ( $table.templateType == 2 ) | 50 | #if ( $table.templateType == 2 ) |
| 51 | const ${classNameVar}Tree = ref<any[]>([]) // 树形结构 | 51 | const ${classNameVar}Tree = ref<any[]>([]) // 树形结构 |
| @@ -145,10 +145,7 @@ const [Modal, modalApi] = useVbenModal({ | @@ -145,10 +145,7 @@ const [Modal, modalApi] = useVbenModal({ | ||
| 145 | // 关闭并提示 | 145 | // 关闭并提示 |
| 146 | await modalApi.close(); | 146 | await modalApi.close(); |
| 147 | emit('success'); | 147 | emit('success'); |
| 148 | - message.success({ | ||
| 149 | - content: $t('ui.actionMessage.operationSuccess'), | ||
| 150 | - key: 'action_process_msg', | ||
| 151 | - }); | 148 | + ElMessage.success($t('ui.actionMessage.operationSuccess')); |
| 152 | } finally { | 149 | } finally { |
| 153 | modalApi.unlock(); | 150 | modalApi.unlock(); |
| 154 | } | 151 | } |
| @@ -182,12 +179,12 @@ const [Modal, modalApi] = useVbenModal({ | @@ -182,12 +179,12 @@ const [Modal, modalApi] = useVbenModal({ | ||
| 182 | 179 | ||
| 183 | <template> | 180 | <template> |
| 184 | <Modal :title="getTitle"> | 181 | <Modal :title="getTitle"> |
| 185 | - <Form | 182 | + <el-form |
| 186 | ref="formRef" | 183 | ref="formRef" |
| 187 | :model="formData" | 184 | :model="formData" |
| 188 | :rules="rules" | 185 | :rules="rules" |
| 189 | - :label-col="{ span: 5 }" | ||
| 190 | - :wrapper-col="{ span: 18 }" | 186 | + label-width="120px" |
| 187 | + label-position="right" | ||
| 191 | > | 188 | > |
| 192 | #foreach($column in $columns) | 189 | #foreach($column in $columns) |
| 193 | #if ($column.createOperation || $column.updateOperation) | 190 | #if ($column.createOperation || $column.updateOperation) |
| @@ -203,122 +200,121 @@ const [Modal, modalApi] = useVbenModal({ | @@ -203,122 +200,121 @@ const [Modal, modalApi] = useVbenModal({ | ||
| 203 | #set ($dictMethod = "boolean") | 200 | #set ($dictMethod = "boolean") |
| 204 | #end | 201 | #end |
| 205 | #if ( $table.templateType == 2 && $column.id == $treeParentColumn.id ) | 202 | #if ( $table.templateType == 2 && $column.id == $treeParentColumn.id ) |
| 206 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 207 | - <TreeSelect | ||
| 208 | - v-model:value="formData.${javaField}" | ||
| 209 | - :treeData="${classNameVar}Tree" | 203 | + <el-form-item label="${comment}" prop="${javaField}"> |
| 204 | + <el-tree-select | ||
| 205 | + v-model="formData.${javaField}" | ||
| 206 | + :data="${classNameVar}Tree" | ||
| 210 | #if ($treeNameColumn.javaField == "name") | 207 | #if ($treeNameColumn.javaField == "name") |
| 211 | - :fieldNames="{ | 208 | + :props="{ |
| 212 | label: 'name', | 209 | label: 'name', |
| 213 | value: 'id', | 210 | value: 'id', |
| 214 | children: 'children', | 211 | children: 'children', |
| 215 | }" | 212 | }" |
| 216 | #else | 213 | #else |
| 217 | - :fieldNames="{ | 214 | + :props="{ |
| 218 | label: '$treeNameColumn.javaField', | 215 | label: '$treeNameColumn.javaField', |
| 219 | value: 'id', | 216 | value: 'id', |
| 220 | children: 'children', | 217 | children: 'children', |
| 221 | }" | 218 | }" |
| 222 | #end | 219 | #end |
| 223 | - checkable | ||
| 224 | - treeDefaultExpandAll | 220 | + check-strictly |
| 221 | + default-expand-all | ||
| 225 | placeholder="请选择${comment}" | 222 | placeholder="请选择${comment}" |
| 226 | /> | 223 | /> |
| 227 | - </Form.Item> | 224 | + </el-form-item> |
| 228 | #elseif ($column.htmlType == "input" && !$column.primaryKey)## 忽略主键,不用在表单里 | 225 | #elseif ($column.htmlType == "input" && !$column.primaryKey)## 忽略主键,不用在表单里 |
| 229 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 230 | - <Input v-model:value="formData.${javaField}" placeholder="请输入${comment}" /> | ||
| 231 | - </Form.Item> | 226 | + <el-form-item label="${comment}" prop="${javaField}"> |
| 227 | + <el-input v-model="formData.${javaField}" placeholder="请输入${comment}" /> | ||
| 228 | + </el-form-item> | ||
| 232 | #elseif($column.htmlType == "imageUpload")## 图片上传 | 229 | #elseif($column.htmlType == "imageUpload")## 图片上传 |
| 233 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 234 | - <ImageUpload v-model:value="formData.${javaField}" /> | ||
| 235 | - </Form.Item> | 230 | + <el-form-item label="${comment}" prop="${javaField}"> |
| 231 | + <ImageUpload v-model="formData.${javaField}" /> | ||
| 232 | + </el-form-item> | ||
| 236 | #elseif($column.htmlType == "fileUpload")## 文件上传 | 233 | #elseif($column.htmlType == "fileUpload")## 文件上传 |
| 237 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 238 | - <FileUpload v-model:value="formData.${javaField}" /> | ||
| 239 | - </Form.Item> | 234 | + <el-form-item label="${comment}" prop="${javaField}"> |
| 235 | + <FileUpload v-model="formData.${javaField}" /> | ||
| 236 | + </el-form-item> | ||
| 240 | #elseif($column.htmlType == "editor")## 文本编辑器 | 237 | #elseif($column.htmlType == "editor")## 文本编辑器 |
| 241 | - <Form.Item label="${comment}" name="${javaField}"> | 238 | + <el-form-item label="${comment}" prop="${javaField}"> |
| 242 | <RichTextarea v-model="formData.${javaField}" height="500px" /> | 239 | <RichTextarea v-model="formData.${javaField}" height="500px" /> |
| 243 | - </Form.Item> | 240 | + </el-form-item> |
| 244 | #elseif($column.htmlType == "select")## 下拉框 | 241 | #elseif($column.htmlType == "select")## 下拉框 |
| 245 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 246 | - <Select v-model:value="formData.${javaField}" placeholder="请选择${comment}"> | 242 | + <el-form-item label="${comment}" prop="${javaField}"> |
| 243 | + <el-select v-model="formData.${javaField}" placeholder="请选择${comment}"> | ||
| 247 | #if ("" != $dictType)## 有数据字典 | 244 | #if ("" != $dictType)## 有数据字典 |
| 248 | - <Select.Option | 245 | + <el-option |
| 249 | v-for="dict in getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod')" | 246 | v-for="dict in getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod')" |
| 250 | :key="dict.value" | 247 | :key="dict.value" |
| 251 | :value="dict.value" | 248 | :value="dict.value" |
| 252 | - > | ||
| 253 | - {{ dict.label }} | ||
| 254 | - </Select.Option> | 249 | + :label="dict.label" |
| 250 | + /> | ||
| 255 | #else##没数据字典 | 251 | #else##没数据字典 |
| 256 | - <Select.Option label="请选择字典生成" value="" /> | 252 | + <el-option label="请选择字典生成" value="" /> |
| 257 | #end | 253 | #end |
| 258 | - </Select> | ||
| 259 | - </Form.Item> | 254 | + </el-select> |
| 255 | + </el-form-item> | ||
| 260 | #elseif($column.htmlType == "checkbox")## 多选框 | 256 | #elseif($column.htmlType == "checkbox")## 多选框 |
| 261 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 262 | - <CheckboxGroup v-model:value="formData.${javaField}"> | 257 | + <el-form-item label="${comment}" prop="${javaField}"> |
| 258 | + <el-checkbox-group v-model="formData.${javaField}"> | ||
| 263 | #if ("" != $dictType)## 有数据字典 | 259 | #if ("" != $dictType)## 有数据字典 |
| 264 | - <Checkbox | 260 | + <el-checkbox |
| 265 | v-for="dict in getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod')" | 261 | v-for="dict in getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod')" |
| 266 | :key="dict.value" | 262 | :key="dict.value" |
| 267 | - :value="dict.value" | 263 | + :label="dict.value" |
| 268 | > | 264 | > |
| 269 | {{ dict.label }} | 265 | {{ dict.label }} |
| 270 | - </Checkbox> | 266 | + </el-checkbox> |
| 271 | #else##没数据字典 | 267 | #else##没数据字典 |
| 272 | - <Checkbox label="请选择字典生成" /> | 268 | + <el-checkbox label="请选择字典生成" /> |
| 273 | #end | 269 | #end |
| 274 | - </CheckboxGroup> | ||
| 275 | - </Form.Item> | 270 | + </el-checkbox-group> |
| 271 | + </el-form-item> | ||
| 276 | #elseif($column.htmlType == "radio")## 单选框 | 272 | #elseif($column.htmlType == "radio")## 单选框 |
| 277 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 278 | - <RadioGroup v-model:value="formData.${javaField}"> | 273 | + <el-form-item label="${comment}" prop="${javaField}"> |
| 274 | + <el-radio-group v-model="formData.${javaField}"> | ||
| 279 | #if ("" != $dictType)## 有数据字典 | 275 | #if ("" != $dictType)## 有数据字典 |
| 280 | - <Radio | 276 | + <el-radio |
| 281 | v-for="dict in getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod')" | 277 | v-for="dict in getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod')" |
| 282 | :key="dict.value" | 278 | :key="dict.value" |
| 283 | - :value="dict.value" | 279 | + :label="dict.value" |
| 284 | > | 280 | > |
| 285 | {{ dict.label }} | 281 | {{ dict.label }} |
| 286 | - </Radio> | 282 | + </el-radio> |
| 287 | #else##没数据字典 | 283 | #else##没数据字典 |
| 288 | - <Radio value="1">请选择字典生成</Radio> | 284 | + <el-radio :label="1">请选择字典生成</el-radio> |
| 289 | #end | 285 | #end |
| 290 | - </RadioGroup> | ||
| 291 | - </Form.Item> | 286 | + </el-radio-group> |
| 287 | + </el-form-item> | ||
| 292 | #elseif($column.htmlType == "datetime")## 时间框 | 288 | #elseif($column.htmlType == "datetime")## 时间框 |
| 293 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 294 | - <DatePicker | ||
| 295 | - v-model:value="formData.${javaField}" | ||
| 296 | - valueFormat="x" | 289 | + <el-form-item label="${comment}" prop="${javaField}"> |
| 290 | + <el-date-picker | ||
| 291 | + v-model="formData.${javaField}" | ||
| 292 | + value-format="x" | ||
| 297 | placeholder="选择${comment}" | 293 | placeholder="选择${comment}" |
| 298 | /> | 294 | /> |
| 299 | - </Form.Item> | 295 | + </el-form-item> |
| 300 | #elseif($column.htmlType == "textarea")## 文本框 | 296 | #elseif($column.htmlType == "textarea")## 文本框 |
| 301 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 302 | - <Textarea v-model:value="formData.${javaField}" placeholder="请输入${comment}" /> | ||
| 303 | - </Form.Item> | 297 | + <el-form-item label="${comment}" prop="${javaField}"> |
| 298 | + <el-input v-model="formData.${javaField}" type="textarea" placeholder="请输入${comment}" /> | ||
| 299 | + </el-form-item> | ||
| 304 | #end | 300 | #end |
| 305 | #end | 301 | #end |
| 306 | #end | 302 | #end |
| 307 | - </Form> | 303 | + </el-form> |
| 308 | ## 特殊:主子表专属逻辑 | 304 | ## 特殊:主子表专属逻辑 |
| 309 | #if ( $table.templateType == 10 || $table.templateType == 12 ) | 305 | #if ( $table.templateType == 10 || $table.templateType == 12 ) |
| 310 | <!-- 子表的表单 --> | 306 | <!-- 子表的表单 --> |
| 311 | - <Tabs v-model:active-key="subTabsName"> | 307 | + <el-tabs v-model="subTabsName"> |
| 312 | #foreach ($subTable in $subTables) | 308 | #foreach ($subTable in $subTables) |
| 313 | #set ($index = $foreach.count - 1) | 309 | #set ($index = $foreach.count - 1) |
| 314 | #set ($subClassNameVar = $subClassNameVars.get($index)) | 310 | #set ($subClassNameVar = $subClassNameVars.get($index)) |
| 315 | #set ($subSimpleClassName = $subSimpleClassNames.get($index)) | 311 | #set ($subSimpleClassName = $subSimpleClassNames.get($index)) |
| 316 | #set ($subJoinColumn_strikeCase = $subJoinColumn_strikeCases.get($index)) | 312 | #set ($subJoinColumn_strikeCase = $subJoinColumn_strikeCases.get($index)) |
| 317 | - <Tabs.TabPane key="$subClassNameVar" tab="${subTable.classComment}" force-render> | 313 | + <el-tab-pane name="$subClassNameVar" label="${subTable.classComment}"> |
| 318 | <${subSimpleClassName}Form ref="${subClassNameVar}FormRef" :${subJoinColumn_strikeCase}="formData?.id" /> | 314 | <${subSimpleClassName}Form ref="${subClassNameVar}FormRef" :${subJoinColumn_strikeCase}="formData?.id" /> |
| 319 | - </Tabs.TabPane> | 315 | + </el-tab-pane> |
| 320 | #end | 316 | #end |
| 321 | - </Tabs> | 317 | + </el-tabs> |
| 322 | #end | 318 | #end |
| 323 | </Modal> | 319 | </Modal> |
| 324 | </template> | 320 | </template> |
yudao-module-infra/src/main/resources/codegen/vue3_vben5_ele/general/views/index.vue.vm
| @@ -4,7 +4,7 @@ import type { VxeTableInstance } from '#/adapter/vxe-table'; | @@ -4,7 +4,7 @@ import type { VxeTableInstance } from '#/adapter/vxe-table'; | ||
| 4 | 4 | ||
| 5 | import { Page, useVbenModal } from '@vben/common-ui'; | 5 | import { Page, useVbenModal } from '@vben/common-ui'; |
| 6 | import { cloneDeep, formatDateTime } from '@vben/utils'; | 6 | import { cloneDeep, formatDateTime } from '@vben/utils'; |
| 7 | -import { Button, message,Tabs,Pagination,Form,RangePicker,DatePicker,Select,Input } from 'ant-design-vue'; | 7 | +import { ElButton, ElMessage, ElLoading, ElTabs, ElTabPane, ElPagination, ElForm, ElFormItem, ElDatePicker, ElSelect, ElOption, ElInput } from 'element-plus'; |
| 8 | import { DictTag } from '#/components/dict-tag'; | 8 | import { DictTag } from '#/components/dict-tag'; |
| 9 | import { DICT_TYPE, getDictOptions, getRangePickerDefaultProps } from '#/utils'; | 9 | import { DICT_TYPE, getDictOptions, getRangePickerDefaultProps } from '#/utils'; |
| 10 | import ${simpleClassName}Form from './modules/form.vue'; | 10 | import ${simpleClassName}Form from './modules/form.vue'; |
| @@ -30,7 +30,7 @@ import { handleTree,isEmpty } from '@vben/utils' | @@ -30,7 +30,7 @@ import { handleTree,isEmpty } from '@vben/utils' | ||
| 30 | import { get${simpleClassName}List, delete${simpleClassName}, export${simpleClassName} } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}'; | 30 | import { get${simpleClassName}List, delete${simpleClassName}, export${simpleClassName} } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}'; |
| 31 | #else## 标准表接口 | 31 | #else## 标准表接口 |
| 32 | import { isEmpty } from '@vben/utils'; | 32 | import { isEmpty } from '@vben/utils'; |
| 33 | -import { get${simpleClassName}Page, delete${simpleClassName},#if ($deleteBatchEnable) delete${simpleClassName}List,#end export${simpleClassName} } from '#/api/${table.moduleName}/${table.businessName}'; | 33 | +import { get${simpleClassName}Page, delete${simpleClassName},#if ($deleteBatchEnable) delete${simpleClassName}List,#end export${simpleClassName} } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}'; |
| 34 | #end | 34 | #end |
| 35 | import { downloadFileFromBlobPart } from '@vben/utils'; | 35 | import { downloadFileFromBlobPart } from '@vben/utils'; |
| 36 | 36 | ||
| @@ -141,37 +141,32 @@ function handleAppend(row: ${simpleClassName}Api.${simpleClassName}) { | @@ -141,37 +141,32 @@ function handleAppend(row: ${simpleClassName}Api.${simpleClassName}) { | ||
| 141 | 141 | ||
| 142 | /** 删除${table.classComment} */ | 142 | /** 删除${table.classComment} */ |
| 143 | async function handleDelete(row: ${simpleClassName}Api.${simpleClassName}) { | 143 | async function handleDelete(row: ${simpleClassName}Api.${simpleClassName}) { |
| 144 | - const hideLoading = message.loading({ | ||
| 145 | - content: $t('ui.actionMessage.deleting', [row.id]), | ||
| 146 | - duration: 0, | ||
| 147 | - key: 'action_process_msg', | 144 | + const loadingInstance = ElLoading.service({ |
| 145 | + text: $t('ui.actionMessage.deleting', [row.id]), | ||
| 146 | + background: 'rgba(0, 0, 0, 0.7)', | ||
| 148 | }); | 147 | }); |
| 149 | try { | 148 | try { |
| 150 | await delete${simpleClassName}(row.id as number); | 149 | await delete${simpleClassName}(row.id as number); |
| 151 | - message.success({ | ||
| 152 | - content: $t('ui.actionMessage.deleteSuccess', [row.id]), | ||
| 153 | - key: 'action_process_msg', | ||
| 154 | - }); | 150 | + ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.id])); |
| 155 | await getList(); | 151 | await getList(); |
| 156 | } finally { | 152 | } finally { |
| 157 | - hideLoading(); | 153 | + loadingInstance.close(); |
| 158 | } | 154 | } |
| 159 | } | 155 | } |
| 160 | 156 | ||
| 161 | #if ($table.templateType != 2 && $deleteBatchEnable) | 157 | #if ($table.templateType != 2 && $deleteBatchEnable) |
| 162 | /** 批量删除${table.classComment} */ | 158 | /** 批量删除${table.classComment} */ |
| 163 | async function handleDeleteBatch() { | 159 | async function handleDeleteBatch() { |
| 164 | - const hideLoading = message.loading({ | ||
| 165 | - content: $t('ui.actionMessage.deleting'), | ||
| 166 | - duration: 0, | ||
| 167 | - key: 'action_process_msg', | 160 | + const loadingInstance = ElLoading.service({ |
| 161 | + text: $t('ui.actionMessage.deleting'), | ||
| 162 | + background: 'rgba(0, 0, 0, 0.7)', | ||
| 168 | }); | 163 | }); |
| 169 | try { | 164 | try { |
| 170 | await delete${simpleClassName}List(checkedIds.value); | 165 | await delete${simpleClassName}List(checkedIds.value); |
| 171 | - message.success( $t('ui.actionMessage.deleteSuccess') ); | 166 | + ElMessage.success($t('ui.actionMessage.deleteSuccess')); |
| 172 | await getList(); | 167 | await getList(); |
| 173 | } finally { | 168 | } finally { |
| 174 | - hideLoading(); | 169 | + loadingInstance.close(); |
| 175 | } | 170 | } |
| 176 | } | 171 | } |
| 177 | 172 | ||
| @@ -218,10 +213,10 @@ onMounted(() => { | @@ -218,10 +213,10 @@ onMounted(() => { | ||
| 218 | 213 | ||
| 219 | <ContentWrap v-if="!hiddenSearchBar"> | 214 | <ContentWrap v-if="!hiddenSearchBar"> |
| 220 | <!-- 搜索工作栏 --> | 215 | <!-- 搜索工作栏 --> |
| 221 | - <Form | 216 | + <el-form |
| 222 | :model="queryParams" | 217 | :model="queryParams" |
| 223 | ref="queryFormRef" | 218 | ref="queryFormRef" |
| 224 | - layout="inline" | 219 | + inline |
| 225 | > | 220 | > |
| 226 | #foreach($column in $columns) | 221 | #foreach($column in $columns) |
| 227 | #if ($column.listOperation) | 222 | #if ($column.listOperation) |
| @@ -237,66 +232,69 @@ onMounted(() => { | @@ -237,66 +232,69 @@ onMounted(() => { | ||
| 237 | #set ($dictMethod = "boolean") | 232 | #set ($dictMethod = "boolean") |
| 238 | #end | 233 | #end |
| 239 | #if ($column.htmlType == "input") | 234 | #if ($column.htmlType == "input") |
| 240 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 241 | - <Input | ||
| 242 | - v-model:value="queryParams.${javaField}" | 235 | + <el-form-item label="${comment}"> |
| 236 | + <el-input | ||
| 237 | + v-model="queryParams.${javaField}" | ||
| 243 | placeholder="请输入${comment}" | 238 | placeholder="请输入${comment}" |
| 244 | - allowClear | ||
| 245 | - @pressEnter="handleQuery" | ||
| 246 | - class="w-full" | 239 | + clearable |
| 240 | + @keyup.enter="handleQuery" | ||
| 241 | + class="!w-[240px]" | ||
| 247 | /> | 242 | /> |
| 248 | - </Form.Item> | 243 | + </el-form-item> |
| 249 | #elseif ($column.htmlType == "select" || $column.htmlType == "radio" || $column.htmlType == "checkbox") | 244 | #elseif ($column.htmlType == "select" || $column.htmlType == "radio" || $column.htmlType == "checkbox") |
| 250 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 251 | - <Select | ||
| 252 | - v-model:value="queryParams.${javaField}" | 245 | + <el-form-item label="${comment}"> |
| 246 | + <el-select | ||
| 247 | + v-model="queryParams.${javaField}" | ||
| 253 | placeholder="请选择${comment}" | 248 | placeholder="请选择${comment}" |
| 254 | - allowClear | ||
| 255 | - class="w-full" | 249 | + clearable |
| 250 | + class="!w-[240px]" | ||
| 256 | > | 251 | > |
| 257 | #if ("" != $dictType)## 设置了 dictType 数据字典的情况 | 252 | #if ("" != $dictType)## 设置了 dictType 数据字典的情况 |
| 258 | - <Select.Option | 253 | + <el-option |
| 259 | v-for="dict in getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod')" | 254 | v-for="dict in getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod')" |
| 260 | :key="dict.value" | 255 | :key="dict.value" |
| 261 | :value="dict.value" | 256 | :value="dict.value" |
| 262 | - > | ||
| 263 | - {{ dict.label }} | ||
| 264 | - </Select.Option> | 257 | + :label="dict.label" |
| 258 | + /> | ||
| 265 | #else## 未设置 dictType 数据字典的情况 | 259 | #else## 未设置 dictType 数据字典的情况 |
| 266 | - <Select.Option label="请选择字典生成" value="" /> | 260 | + <el-option label="请选择字典生成" value="" /> |
| 267 | #end | 261 | #end |
| 268 | - </Select> | ||
| 269 | - </Form.Item> | 262 | + </el-select> |
| 263 | + </el-form-item> | ||
| 270 | #elseif($column.htmlType == "datetime") | 264 | #elseif($column.htmlType == "datetime") |
| 271 | #if ($column.listOperationCondition != "BETWEEN")## 非范围 | 265 | #if ($column.listOperationCondition != "BETWEEN")## 非范围 |
| 272 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 273 | - <DatePicker | ||
| 274 | - v-model:value="queryParams.${javaField}" | ||
| 275 | - valueFormat="YYYY-MM-DD" | 266 | + <el-form-item label="${comment}"> |
| 267 | + <el-date-picker | ||
| 268 | + v-model="queryParams.${javaField}" | ||
| 269 | + value-format="YYYY-MM-DD" | ||
| 276 | placeholder="选择${comment}" | 270 | placeholder="选择${comment}" |
| 277 | - allowClear | ||
| 278 | - class="w-full" | 271 | + clearable |
| 272 | + class="!w-[240px]" | ||
| 279 | /> | 273 | /> |
| 280 | - </Form.Item> | 274 | + </el-form-item> |
| 281 | #else## 范围 | 275 | #else## 范围 |
| 282 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 283 | - <RangePicker | ||
| 284 | - v-model:value="queryParams.${javaField}" | ||
| 285 | - v-bind="getRangePickerDefaultProps()" | ||
| 286 | - class="w-full" | 276 | + <el-form-item label="${comment}"> |
| 277 | + <el-date-picker | ||
| 278 | + v-model="queryParams.${javaField}" | ||
| 279 | + type="daterange" | ||
| 280 | + value-format="YYYY-MM-DD" | ||
| 281 | + range-separator="至" | ||
| 282 | + start-placeholder="开始日期" | ||
| 283 | + end-placeholder="结束日期" | ||
| 284 | + class="!w-[240px]" | ||
| 287 | /> | 285 | /> |
| 288 | - </Form.Item> | 286 | + </el-form-item> |
| 289 | #end | 287 | #end |
| 290 | #end | 288 | #end |
| 291 | #end | 289 | #end |
| 292 | #end | 290 | #end |
| 293 | - <Form.Item> | ||
| 294 | - <Button class="ml-2" @click="resetQuery"> 重置 </Button> | ||
| 295 | - <Button class="ml-2" @click="handleQuery" type="primary"> | 291 | + <el-form-item> |
| 292 | + <el-button class="ml-2" @click="resetQuery"> 重置 </el-button> | ||
| 293 | + <el-button class="ml-2" @click="handleQuery" type="primary"> | ||
| 296 | 搜索 | 294 | 搜索 |
| 297 | - </Button> | ||
| 298 | - </Form.Item> | ||
| 299 | - </Form> | 295 | + </el-button> |
| 296 | + </el-form-item> | ||
| 297 | + </el-form> | ||
| 300 | </ContentWrap> | 298 | </ContentWrap> |
| 301 | 299 | ||
| 302 | <!-- 列表 --> | 300 | <!-- 列表 --> |
| @@ -307,11 +305,11 @@ onMounted(() => { | @@ -307,11 +305,11 @@ onMounted(() => { | ||
| 307 | v-model:hidden-search="hiddenSearchBar" | 305 | v-model:hidden-search="hiddenSearchBar" |
| 308 | > | 306 | > |
| 309 | #if (${table.templateType} == 2) | 307 | #if (${table.templateType} == 2) |
| 310 | - <Button @click="toggleExpand" class="mr-2"> | 308 | + <el-button @click="toggleExpand" class="mr-2"> |
| 311 | {{ isExpanded ? '收缩' : '展开' }} | 309 | {{ isExpanded ? '收缩' : '展开' }} |
| 312 | - </Button> | 310 | + </el-button> |
| 313 | #end | 311 | #end |
| 314 | - <Button | 312 | + <el-button |
| 315 | class="ml-2" | 313 | class="ml-2" |
| 316 | :icon="h(Plus)" | 314 | :icon="h(Plus)" |
| 317 | type="primary" | 315 | type="primary" |
| @@ -319,8 +317,8 @@ onMounted(() => { | @@ -319,8 +317,8 @@ onMounted(() => { | ||
| 319 | v-access:code="['${permissionPrefix}:create']" | 317 | v-access:code="['${permissionPrefix}:create']" |
| 320 | > | 318 | > |
| 321 | {{ $t('ui.actionTitle.create', ['${table.classComment}']) }} | 319 | {{ $t('ui.actionTitle.create', ['${table.classComment}']) }} |
| 322 | - </Button> | ||
| 323 | - <Button | 320 | + </el-button> |
| 321 | + <el-button | ||
| 324 | :icon="h(Download)" | 322 | :icon="h(Download)" |
| 325 | type="primary" | 323 | type="primary" |
| 326 | class="ml-2" | 324 | class="ml-2" |
| @@ -329,19 +327,18 @@ onMounted(() => { | @@ -329,19 +327,18 @@ onMounted(() => { | ||
| 329 | v-access:code="['${permissionPrefix}:export']" | 327 | v-access:code="['${permissionPrefix}:export']" |
| 330 | > | 328 | > |
| 331 | {{ $t('ui.actionTitle.export') }} | 329 | {{ $t('ui.actionTitle.export') }} |
| 332 | - </Button> | 330 | + </el-button> |
| 333 | #if ($table.templateType != 2 && $deleteBatchEnable) | 331 | #if ($table.templateType != 2 && $deleteBatchEnable) |
| 334 | - <Button | 332 | + <el-button |
| 335 | :icon="h(Trash2)" | 333 | :icon="h(Trash2)" |
| 336 | - type="primary" | ||
| 337 | - danger | 334 | + type="danger" |
| 338 | class="ml-2" | 335 | class="ml-2" |
| 339 | :disabled="isEmpty(checkedIds)" | 336 | :disabled="isEmpty(checkedIds)" |
| 340 | @click="handleDeleteBatch" | 337 | @click="handleDeleteBatch" |
| 341 | v-access:code="['${table.moduleName}:${simpleClassName_strikeCase}:delete']" | 338 | v-access:code="['${table.moduleName}:${simpleClassName_strikeCase}:delete']" |
| 342 | > | 339 | > |
| 343 | 批量删除 | 340 | 批量删除 |
| 344 | - </Button> | 341 | + </el-button> |
| 345 | #end | 342 | #end |
| 346 | </TableToolbar> | 343 | </TableToolbar> |
| 347 | </template> | 344 | </template> |
| @@ -381,17 +378,17 @@ onMounted(() => { | @@ -381,17 +378,17 @@ onMounted(() => { | ||
| 381 | <vxe-column type="expand" width="60"> | 378 | <vxe-column type="expand" width="60"> |
| 382 | <template #content="{ row }"> | 379 | <template #content="{ row }"> |
| 383 | <!-- 子表的表单 --> | 380 | <!-- 子表的表单 --> |
| 384 | - <Tabs v-model:active-key="subTabsName" class="mx-8"> | 381 | + <el-tabs v-model="subTabsName" class="mx-8"> |
| 385 | #foreach ($subTable in $subTables) | 382 | #foreach ($subTable in $subTables) |
| 386 | #set ($index = $foreach.count - 1) | 383 | #set ($index = $foreach.count - 1) |
| 387 | #set ($subClassNameVar = $subClassNameVars.get($index)) | 384 | #set ($subClassNameVar = $subClassNameVars.get($index)) |
| 388 | #set ($subSimpleClassName = $subSimpleClassNames.get($index)) | 385 | #set ($subSimpleClassName = $subSimpleClassNames.get($index)) |
| 389 | #set ($subJoinColumn_strikeCase = $subJoinColumn_strikeCases.get($index)) | 386 | #set ($subJoinColumn_strikeCase = $subJoinColumn_strikeCases.get($index)) |
| 390 | - <Tabs.TabPane key="$subClassNameVar" tab="${subTable.classComment}" force-render> | 387 | + <el-tab-pane name="$subClassNameVar" label="${subTable.classComment}"> |
| 391 | <${subSimpleClassName}List :${subJoinColumn_strikeCase}="row?.id" /> | 388 | <${subSimpleClassName}List :${subJoinColumn_strikeCase}="row?.id" /> |
| 392 | - </Tabs.TabPane> | 389 | + </el-tab-pane> |
| 393 | #end | 390 | #end |
| 394 | - </Tabs> | 391 | + </el-tabs> |
| 395 | </template> | 392 | </template> |
| 396 | </vxe-column> | 393 | </vxe-column> |
| 397 | #end | 394 | #end |
| @@ -423,27 +420,29 @@ onMounted(() => { | @@ -423,27 +420,29 @@ onMounted(() => { | ||
| 423 | <vxe-column field="operation" title="操作" align="center"> | 420 | <vxe-column field="operation" title="操作" align="center"> |
| 424 | <template #default="{row}"> | 421 | <template #default="{row}"> |
| 425 | #if ( $table.templateType == 2 ) | 422 | #if ( $table.templateType == 2 ) |
| 426 | - <Button | 423 | + <el-button |
| 427 | size="small" | 424 | size="small" |
| 428 | - type="link" | 425 | + type="primary" |
| 426 | + link | ||
| 429 | @click="handleAppend(row as any)" | 427 | @click="handleAppend(row as any)" |
| 430 | v-access:code="['${permissionPrefix}:create']" | 428 | v-access:code="['${permissionPrefix}:create']" |
| 431 | > | 429 | > |
| 432 | 新增下级 | 430 | 新增下级 |
| 433 | - </Button> | 431 | + </el-button> |
| 434 | #end | 432 | #end |
| 435 | - <Button | 433 | + <el-button |
| 436 | size="small" | 434 | size="small" |
| 437 | - type="link" | 435 | + type="primary" |
| 436 | + link | ||
| 438 | @click="handleEdit(row as any)" | 437 | @click="handleEdit(row as any)" |
| 439 | v-access:code="['${permissionPrefix}:update']" | 438 | v-access:code="['${permissionPrefix}:update']" |
| 440 | > | 439 | > |
| 441 | {{ $t('ui.actionTitle.edit') }} | 440 | {{ $t('ui.actionTitle.edit') }} |
| 442 | - </Button> | ||
| 443 | - <Button | 441 | + </el-button> |
| 442 | + <el-button | ||
| 444 | size="small" | 443 | size="small" |
| 445 | - type="link" | ||
| 446 | - danger | 444 | + type="danger" |
| 445 | + link | ||
| 447 | class="ml-2" | 446 | class="ml-2" |
| 448 | #if ( $table.templateType == 2 ) | 447 | #if ( $table.templateType == 2 ) |
| 449 | :disabled="!isEmpty(row?.children)" | 448 | :disabled="!isEmpty(row?.children)" |
| @@ -452,19 +451,21 @@ onMounted(() => { | @@ -452,19 +451,21 @@ onMounted(() => { | ||
| 452 | v-access:code="['${permissionPrefix}:delete']" | 451 | v-access:code="['${permissionPrefix}:delete']" |
| 453 | > | 452 | > |
| 454 | {{ $t('ui.actionTitle.delete') }} | 453 | {{ $t('ui.actionTitle.delete') }} |
| 455 | - </Button> | 454 | + </el-button> |
| 456 | </template> | 455 | </template> |
| 457 | </vxe-column> | 456 | </vxe-column> |
| 458 | </vxe-table> | 457 | </vxe-table> |
| 459 | #if ( $table.templateType != 2 ) | 458 | #if ( $table.templateType != 2 ) |
| 460 | <!-- 分页 --> | 459 | <!-- 分页 --> |
| 461 | <div class="mt-2 flex justify-end"> | 460 | <div class="mt-2 flex justify-end"> |
| 462 | - <Pagination | 461 | + <el-pagination |
| 463 | :total="total" | 462 | :total="total" |
| 464 | - v-model:current="queryParams.pageNo" | 463 | + v-model:current-page="queryParams.pageNo" |
| 465 | v-model:page-size="queryParams.pageSize" | 464 | v-model:page-size="queryParams.pageSize" |
| 466 | - show-size-changer | ||
| 467 | - @change="getList" | 465 | + :page-sizes="[10, 20, 50, 100]" |
| 466 | + layout="total, sizes, prev, pager, next, jumper" | ||
| 467 | + @size-change="getList" | ||
| 468 | + @current-change="getList" | ||
| 468 | /> | 469 | /> |
| 469 | </div> | 470 | </div> |
| 470 | #end | 471 | #end |
| @@ -472,17 +473,17 @@ onMounted(() => { | @@ -472,17 +473,17 @@ onMounted(() => { | ||
| 472 | #if ($table.templateType == 11) ## erp情况 | 473 | #if ($table.templateType == 11) ## erp情况 |
| 473 | <ContentWrap> | 474 | <ContentWrap> |
| 474 | <!-- 子表的表单 --> | 475 | <!-- 子表的表单 --> |
| 475 | - <Tabs v-model:active-key="subTabsName"> | 476 | + <el-tabs v-model="subTabsName"> |
| 476 | #foreach ($subTable in $subTables) | 477 | #foreach ($subTable in $subTables) |
| 477 | #set ($index = $foreach.count - 1) | 478 | #set ($index = $foreach.count - 1) |
| 478 | #set ($subClassNameVar = $subClassNameVars.get($index)) | 479 | #set ($subClassNameVar = $subClassNameVars.get($index)) |
| 479 | #set ($subSimpleClassName = $subSimpleClassNames.get($index)) | 480 | #set ($subSimpleClassName = $subSimpleClassNames.get($index)) |
| 480 | #set ($subJoinColumn_strikeCase = $subJoinColumn_strikeCases.get($index)) | 481 | #set ($subJoinColumn_strikeCase = $subJoinColumn_strikeCases.get($index)) |
| 481 | - <Tabs.TabPane key="$subClassNameVar" tab="${subTable.classComment}" force-render> | 482 | + <el-tab-pane name="$subClassNameVar" label="${subTable.classComment}"> |
| 482 | <${subSimpleClassName}List :${subJoinColumn_strikeCase}="select${simpleClassName}?.id" /> | 483 | <${subSimpleClassName}List :${subJoinColumn_strikeCase}="select${simpleClassName}?.id" /> |
| 483 | - </Tabs.TabPane> | 484 | + </el-tab-pane> |
| 484 | #end | 485 | #end |
| 485 | - </Tabs> | 486 | + </el-tabs> |
| 486 | </ContentWrap> | 487 | </ContentWrap> |
| 487 | #end | 488 | #end |
| 488 | </Page> | 489 | </Page> |
yudao-module-infra/src/main/resources/codegen/vue3_vben5_ele/general/views/modules/form_sub_erp.vue.vm
| @@ -4,15 +4,15 @@ | @@ -4,15 +4,15 @@ | ||
| 4 | #set ($subSimpleClassName = $subSimpleClassNames.get($subIndex)) | 4 | #set ($subSimpleClassName = $subSimpleClassNames.get($subIndex)) |
| 5 | <script lang="ts" setup> | 5 | <script lang="ts" setup> |
| 6 | import type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}'; | 6 | import type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}'; |
| 7 | - import type { Rule } from 'ant-design-vue/es/form'; | 7 | + import type { FormRules } from 'element-plus'; |
| 8 | 8 | ||
| 9 | import { useVbenModal } from '@vben/common-ui'; | 9 | import { useVbenModal } from '@vben/common-ui'; |
| 10 | import { Tinymce as RichTextarea } from '#/components/tinymce'; | 10 | import { Tinymce as RichTextarea } from '#/components/tinymce'; |
| 11 | import { ImageUpload, FileUpload } from "#/components/upload"; | 11 | import { ImageUpload, FileUpload } from "#/components/upload"; |
| 12 | - import { message, Tabs, Form, Input, Textarea, Select, RadioGroup, Radio, CheckboxGroup, Checkbox, DatePicker, TreeSelect } from 'ant-design-vue'; | 12 | + import { ElMessage, ElTabs, ElTabPane, ElForm, ElFormItem, ElInput, ElSelect, ElOption, ElRadioGroup, ElRadio, ElCheckboxGroup, ElCheckbox, ElDatePicker, ElTreeSelect } from 'element-plus'; |
| 13 | import { DICT_TYPE, getDictOptions } from '#/utils'; | 13 | import { DICT_TYPE, getDictOptions } from '#/utils'; |
| 14 | 14 | ||
| 15 | - import { computed, ref } from 'vue'; | 15 | + import { computed, ref, reactive } from 'vue'; |
| 16 | import { $t } from '#/locales'; | 16 | import { $t } from '#/locales'; |
| 17 | 17 | ||
| 18 | import { get${subSimpleClassName}, create${subSimpleClassName}, update${subSimpleClassName} } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}'; | 18 | import { get${subSimpleClassName}, create${subSimpleClassName}, update${subSimpleClassName} } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}'; |
| @@ -36,14 +36,14 @@ | @@ -36,14 +36,14 @@ | ||
| 36 | #end | 36 | #end |
| 37 | #end | 37 | #end |
| 38 | }); | 38 | }); |
| 39 | - const rules: Record<string, Rule[]> = { | 39 | + const rules = reactive<FormRules>({ |
| 40 | #foreach ($column in $subColumns) | 40 | #foreach ($column in $subColumns) |
| 41 | #if (($column.createOperation || $column.updateOperation) && !$column.nullable && !${column.primaryKey})## 创建或者更新操作 && 要求非空 && 非主键 | 41 | #if (($column.createOperation || $column.updateOperation) && !$column.nullable && !${column.primaryKey})## 创建或者更新操作 && 要求非空 && 非主键 |
| 42 | #set($comment=$column.columnComment) | 42 | #set($comment=$column.columnComment) |
| 43 | $column.javaField: [{ required: true, message: '${comment}不能为空', trigger: #if($column.htmlType == 'select')'change'#else'blur'#end }], | 43 | $column.javaField: [{ required: true, message: '${comment}不能为空', trigger: #if($column.htmlType == 'select')'change'#else'blur'#end }], |
| 44 | #end | 44 | #end |
| 45 | #end | 45 | #end |
| 46 | - }; | 46 | + }); |
| 47 | 47 | ||
| 48 | const [Modal, modalApi] = useVbenModal({ | 48 | const [Modal, modalApi] = useVbenModal({ |
| 49 | async onConfirm() { | 49 | async onConfirm() { |
| @@ -57,10 +57,7 @@ | @@ -57,10 +57,7 @@ | ||
| 57 | // 关闭并提示 | 57 | // 关闭并提示 |
| 58 | await modalApi.close(); | 58 | await modalApi.close(); |
| 59 | emit('success'); | 59 | emit('success'); |
| 60 | - message.success({ | ||
| 61 | - content: $t('ui.actionMessage.operationSuccess'), | ||
| 62 | - key: 'action_process_msg', | ||
| 63 | - }); | 60 | + ElMessage.success($t('ui.actionMessage.operationSuccess')); |
| 64 | } finally { | 61 | } finally { |
| 65 | modalApi.unlock(); | 62 | modalApi.unlock(); |
| 66 | } | 63 | } |
| @@ -108,12 +105,12 @@ | @@ -108,12 +105,12 @@ | ||
| 108 | 105 | ||
| 109 | <template> | 106 | <template> |
| 110 | <Modal :title="getTitle"> | 107 | <Modal :title="getTitle"> |
| 111 | - <Form | 108 | + <el-form |
| 112 | ref="formRef" | 109 | ref="formRef" |
| 113 | :model="formData" | 110 | :model="formData" |
| 114 | :rules="rules" | 111 | :rules="rules" |
| 115 | - :label-col="{ span: 5 }" | ||
| 116 | - :wrapper-col="{ span: 18 }" | 112 | + label-width="120px" |
| 113 | + label-position="right" | ||
| 117 | > | 114 | > |
| 118 | #foreach($column in $subColumns) | 115 | #foreach($column in $subColumns) |
| 119 | #if ($column.createOperation || $column.updateOperation) | 116 | #if ($column.createOperation || $column.updateOperation) |
| @@ -129,84 +126,83 @@ | @@ -129,84 +126,83 @@ | ||
| 129 | #set ($dictMethod = "boolean") | 126 | #set ($dictMethod = "boolean") |
| 130 | #end | 127 | #end |
| 131 | #if ($column.htmlType == "input" && !$column.primaryKey)## 忽略主键,不用在表单里 | 128 | #if ($column.htmlType == "input" && !$column.primaryKey)## 忽略主键,不用在表单里 |
| 132 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 133 | - <Input v-model:value="formData.${javaField}" placeholder="请输入${comment}" /> | ||
| 134 | - </Form.Item> | 129 | + <el-form-item label="${comment}" prop="${javaField}"> |
| 130 | + <el-input v-model="formData.${javaField}" placeholder="请输入${comment}" /> | ||
| 131 | + </el-form-item> | ||
| 135 | #elseif($column.htmlType == "imageUpload")## 图片上传 | 132 | #elseif($column.htmlType == "imageUpload")## 图片上传 |
| 136 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 137 | - <ImageUpload v-model:value="formData.${javaField}" /> | ||
| 138 | - </Form.Item> | 133 | + <el-form-item label="${comment}" prop="${javaField}"> |
| 134 | + <ImageUpload v-model="formData.${javaField}" /> | ||
| 135 | + </el-form-item> | ||
| 139 | #elseif($column.htmlType == "fileUpload")## 文件上传 | 136 | #elseif($column.htmlType == "fileUpload")## 文件上传 |
| 140 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 141 | - <FileUpload v-model:value="formData.${javaField}" /> | ||
| 142 | - </Form.Item> | 137 | + <el-form-item label="${comment}" prop="${javaField}"> |
| 138 | + <FileUpload v-model="formData.${javaField}" /> | ||
| 139 | + </el-form-item> | ||
| 143 | #elseif($column.htmlType == "editor")## 文本编辑器 | 140 | #elseif($column.htmlType == "editor")## 文本编辑器 |
| 144 | - <Form.Item label="${comment}" name="${javaField}"> | 141 | + <el-form-item label="${comment}" prop="${javaField}"> |
| 145 | <RichTextarea v-model="formData.${javaField}" height="500px" /> | 142 | <RichTextarea v-model="formData.${javaField}" height="500px" /> |
| 146 | - </Form.Item> | 143 | + </el-form-item> |
| 147 | #elseif($column.htmlType == "select")## 下拉框 | 144 | #elseif($column.htmlType == "select")## 下拉框 |
| 148 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 149 | - <Select v-model:value="formData.${javaField}" placeholder="请选择${comment}"> | 145 | + <el-form-item label="${comment}" prop="${javaField}"> |
| 146 | + <el-select v-model="formData.${javaField}" placeholder="请选择${comment}"> | ||
| 150 | #if ("" != $dictType)## 有数据字典 | 147 | #if ("" != $dictType)## 有数据字典 |
| 151 | - <Select.Option | 148 | + <el-option |
| 152 | v-for="dict in getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod')" | 149 | v-for="dict in getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod')" |
| 153 | :key="dict.value" | 150 | :key="dict.value" |
| 154 | :value="dict.value" | 151 | :value="dict.value" |
| 155 | - > | ||
| 156 | - {{ dict.label }} | ||
| 157 | - </Select.Option> | 152 | + :label="dict.label" |
| 153 | + /> | ||
| 158 | #else##没数据字典 | 154 | #else##没数据字典 |
| 159 | - <Select.Option label="请选择字典生成" value="" /> | 155 | + <el-option label="请选择字典生成" value="" /> |
| 160 | #end | 156 | #end |
| 161 | - </Select> | ||
| 162 | - </Form.Item> | 157 | + </el-select> |
| 158 | + </el-form-item> | ||
| 163 | #elseif($column.htmlType == "checkbox")## 多选框 | 159 | #elseif($column.htmlType == "checkbox")## 多选框 |
| 164 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 165 | - <CheckboxGroup v-model:value="formData.${javaField}"> | 160 | + <el-form-item label="${comment}" prop="${javaField}"> |
| 161 | + <el-checkbox-group v-model="formData.${javaField}"> | ||
| 166 | #if ("" != $dictType)## 有数据字典 | 162 | #if ("" != $dictType)## 有数据字典 |
| 167 | - <Checkbox | 163 | + <el-checkbox |
| 168 | v-for="dict in getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod')" | 164 | v-for="dict in getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod')" |
| 169 | :key="dict.value" | 165 | :key="dict.value" |
| 170 | - :value="dict.value" | 166 | + :label="dict.value" |
| 171 | > | 167 | > |
| 172 | {{ dict.label }} | 168 | {{ dict.label }} |
| 173 | - </Checkbox> | 169 | + </el-checkbox> |
| 174 | #else##没数据字典 | 170 | #else##没数据字典 |
| 175 | - <Checkbox label="请选择字典生成" /> | 171 | + <el-checkbox label="请选择字典生成" /> |
| 176 | #end | 172 | #end |
| 177 | - </CheckboxGroup> | ||
| 178 | - </Form.Item> | 173 | + </el-checkbox-group> |
| 174 | + </el-form-item> | ||
| 179 | #elseif($column.htmlType == "radio")## 单选框 | 175 | #elseif($column.htmlType == "radio")## 单选框 |
| 180 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 181 | - <RadioGroup v-model:value="formData.${javaField}"> | 176 | + <el-form-item label="${comment}" prop="${javaField}"> |
| 177 | + <el-radio-group v-model="formData.${javaField}"> | ||
| 182 | #if ("" != $dictType)## 有数据字典 | 178 | #if ("" != $dictType)## 有数据字典 |
| 183 | - <Radio | 179 | + <el-radio |
| 184 | v-for="dict in getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod')" | 180 | v-for="dict in getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod')" |
| 185 | :key="dict.value" | 181 | :key="dict.value" |
| 186 | - :value="dict.value" | 182 | + :label="dict.value" |
| 187 | > | 183 | > |
| 188 | {{ dict.label }} | 184 | {{ dict.label }} |
| 189 | - </Radio> | 185 | + </el-radio> |
| 190 | #else##没数据字典 | 186 | #else##没数据字典 |
| 191 | - <Radio value="1">请选择字典生成</Radio> | 187 | + <el-radio :label="1">请选择字典生成</el-radio> |
| 192 | #end | 188 | #end |
| 193 | - </RadioGroup> | ||
| 194 | - </Form.Item> | 189 | + </el-radio-group> |
| 190 | + </el-form-item> | ||
| 195 | #elseif($column.htmlType == "datetime")## 时间框 | 191 | #elseif($column.htmlType == "datetime")## 时间框 |
| 196 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 197 | - <DatePicker | ||
| 198 | - v-model:value="formData.${javaField}" | ||
| 199 | - valueFormat="x" | 192 | + <el-form-item label="${comment}" prop="${javaField}"> |
| 193 | + <el-date-picker | ||
| 194 | + v-model="formData.${javaField}" | ||
| 195 | + value-format="x" | ||
| 200 | placeholder="选择${comment}" | 196 | placeholder="选择${comment}" |
| 201 | /> | 197 | /> |
| 202 | - </Form.Item> | 198 | + </el-form-item> |
| 203 | #elseif($column.htmlType == "textarea")## 文本框 | 199 | #elseif($column.htmlType == "textarea")## 文本框 |
| 204 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 205 | - <Textarea v-model:value="formData.${javaField}" placeholder="请输入${comment}" /> | ||
| 206 | - </Form.Item> | 200 | + <el-form-item label="${comment}" prop="${javaField}"> |
| 201 | + <el-input v-model="formData.${javaField}" type="textarea" placeholder="请输入${comment}" /> | ||
| 202 | + </el-form-item> | ||
| 207 | #end | 203 | #end |
| 208 | #end | 204 | #end |
| 209 | #end | 205 | #end |
| 210 | - </Form> | 206 | + </el-form> |
| 211 | </Modal> | 207 | </Modal> |
| 212 | </template> | 208 | </template> |
yudao-module-infra/src/main/resources/codegen/vue3_vben5_ele/general/views/modules/form_sub_inner.vue.vm
| 1 | ## 主表的 normal 和 inner 使用相同的 form 表单 | 1 | ## 主表的 normal 和 inner 使用相同的 form 表单 |
| 2 | -#parse("codegen/vue3_vben5_antd/general/views/modules/form_sub_normal.vue.vm") | ||
| 3 | \ No newline at end of file | 2 | \ No newline at end of file |
| 3 | +#parse("codegen/vue3_vben5_ele/general/views/modules/form_sub_normal.vue.vm") | ||
| 4 | \ No newline at end of file | 4 | \ No newline at end of file |
yudao-module-infra/src/main/resources/codegen/vue3_vben5_ele/general/views/modules/form_sub_normal.vue.vm
| @@ -7,8 +7,8 @@ | @@ -7,8 +7,8 @@ | ||
| 7 | <script lang="ts" setup> | 7 | <script lang="ts" setup> |
| 8 | import type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}'; | 8 | import type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}'; |
| 9 | 9 | ||
| 10 | - import { message, Tabs, Form, Input, Textarea,Button, Select, RadioGroup, Radio, CheckboxGroup, Checkbox, DatePicker } from 'ant-design-vue'; | ||
| 11 | - import { computed, ref, h, onMounted,watch,nextTick } from 'vue'; | 10 | + import { ElMessage, ElTabs, ElTabPane, ElForm, ElFormItem, ElInput, ElButton, ElSelect, ElOption, ElRadioGroup, ElRadio, ElCheckboxGroup, ElCheckbox, ElDatePicker } from 'element-plus'; |
| 11 | + import { computed, ref, reactive, h, onMounted,watch,nextTick } from 'vue'; | ||
| 12 | import { $t } from '#/locales'; | 12 | import { $t } from '#/locales'; |
| 13 | import { DICT_TYPE, getDictOptions } from '#/utils'; | 13 | import { DICT_TYPE, getDictOptions } from '#/utils'; |
| 14 | 14 | ||
| @@ -18,7 +18,7 @@ import { Plus } from "@vben/icons"; | @@ -18,7 +18,7 @@ import { Plus } from "@vben/icons"; | ||
| 18 | import { VxeColumn, VxeTable } from '#/adapter/vxe-table'; | 18 | import { VxeColumn, VxeTable } from '#/adapter/vxe-table'; |
| 19 | import { get${subSimpleClassName}ListBy${SubJoinColumnName} } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}'; | 19 | import { get${subSimpleClassName}ListBy${SubJoinColumnName} } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}'; |
| 20 | #else | 20 | #else |
| 21 | -import type { Rule } from 'ant-design-vue/es/form'; | 21 | +import type { FormRules } from 'element-plus'; |
| 22 | import { Tinymce as RichTextarea } from '#/components/tinymce'; | 22 | import { Tinymce as RichTextarea } from '#/components/tinymce'; |
| 23 | import { get${subSimpleClassName}By${SubJoinColumnName} } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}'; | 23 | import { get${subSimpleClassName}By${SubJoinColumnName} } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}'; |
| 24 | #end | 24 | #end |
| @@ -76,14 +76,14 @@ const formData = ref<Partial<${simpleClassName}Api.${subSimpleClassName}>>({ | @@ -76,14 +76,14 @@ const formData = ref<Partial<${simpleClassName}Api.${subSimpleClassName}>>({ | ||
| 76 | #end | 76 | #end |
| 77 | #end | 77 | #end |
| 78 | }); | 78 | }); |
| 79 | -const rules: Record<string, Rule[]> = { | 79 | +const rules = reactive<FormRules>({ |
| 80 | #foreach ($column in $subColumns) | 80 | #foreach ($column in $subColumns) |
| 81 | #if (($column.createOperation || $column.updateOperation) && !$column.nullable && !${column.primaryKey})## 创建或者更新操作 && 要求非空 && 非主键 | 81 | #if (($column.createOperation || $column.updateOperation) && !$column.nullable && !${column.primaryKey})## 创建或者更新操作 && 要求非空 && 非主键 |
| 82 | #set($comment=$column.columnComment) | 82 | #set($comment=$column.columnComment) |
| 83 | $column.javaField: [{ required: true, message: '${comment}不能为空', trigger: #if($column.htmlType == 'select')'change'#else'blur'#end }], | 83 | $column.javaField: [{ required: true, message: '${comment}不能为空', trigger: #if($column.htmlType == 'select')'change'#else'blur'#end }], |
| 84 | #end | 84 | #end |
| 85 | #end | 85 | #end |
| 86 | -}; | 86 | +}); |
| 87 | /** 暴露出表单校验方法和表单值获取方法 */ | 87 | /** 暴露出表单校验方法和表单值获取方法 */ |
| 88 | defineExpose({ | 88 | defineExpose({ |
| 89 | validate: async () => await formRef.value?.validate(), | 89 | validate: async () => await formRef.value?.validate(), |
| @@ -124,90 +124,89 @@ watch( | @@ -124,90 +124,89 @@ watch( | ||
| 124 | #elseif ($column.htmlType == "input" && !$column.primaryKey)## 忽略主键,不用在表单里 | 124 | #elseif ($column.htmlType == "input" && !$column.primaryKey)## 忽略主键,不用在表单里 |
| 125 | <vxe-column field="${javaField}" title="${comment}" align="center"> | 125 | <vxe-column field="${javaField}" title="${comment}" align="center"> |
| 126 | <template #default="{row}"> | 126 | <template #default="{row}"> |
| 127 | - <Input v-model:value="row.${javaField}" /> | 127 | + <el-input v-model="row.${javaField}" /> |
| 128 | </template> | 128 | </template> |
| 129 | </vxe-column> | 129 | </vxe-column> |
| 130 | #elseif($column.htmlType == "imageUpload")## 图片上传 | 130 | #elseif($column.htmlType == "imageUpload")## 图片上传 |
| 131 | <vxe-column field="${javaField}" title="${comment}" align="center"> | 131 | <vxe-column field="${javaField}" title="${comment}" align="center"> |
| 132 | <template #default="{row}"> | 132 | <template #default="{row}"> |
| 133 | - <ImageUpload v-model:value="row.${javaField}" /> | 133 | + <ImageUpload v-model="row.${javaField}" /> |
| 134 | </template> | 134 | </template> |
| 135 | </vxe-column> | 135 | </vxe-column> |
| 136 | #elseif($column.htmlType == "fileUpload")## 文件上传 | 136 | #elseif($column.htmlType == "fileUpload")## 文件上传 |
| 137 | <vxe-column field="${javaField}" title="${comment}" align="center"> | 137 | <vxe-column field="${javaField}" title="${comment}" align="center"> |
| 138 | <template #default="{row}"> | 138 | <template #default="{row}"> |
| 139 | - <FileUpload v-model:value="row.${javaField}" /> | 139 | + <FileUpload v-model="row.${javaField}" /> |
| 140 | </template> | 140 | </template> |
| 141 | </vxe-column> | 141 | </vxe-column> |
| 142 | #elseif($column.htmlType == "select")## 下拉框 | 142 | #elseif($column.htmlType == "select")## 下拉框 |
| 143 | <vxe-column field="${javaField}" title="${comment}" align="center"> | 143 | <vxe-column field="${javaField}" title="${comment}" align="center"> |
| 144 | <template #default="{row}"> | 144 | <template #default="{row}"> |
| 145 | - <Select v-model:value="row.${javaField}" placeholder="请选择${comment}"> | 145 | + <el-select v-model="row.${javaField}" placeholder="请选择${comment}"> |
| 146 | #if ("" != $dictType)## 有数据字典 | 146 | #if ("" != $dictType)## 有数据字典 |
| 147 | - <Select.Option | 147 | + <el-option |
| 148 | v-for="dict in getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod')" | 148 | v-for="dict in getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod')" |
| 149 | :key="dict.value" | 149 | :key="dict.value" |
| 150 | :value="dict.value" | 150 | :value="dict.value" |
| 151 | - > | ||
| 152 | - {{ dict.label }} | ||
| 153 | - </Select.Option> | 151 | + :label="dict.label" |
| 152 | + /> | ||
| 154 | #else##没数据字典 | 153 | #else##没数据字典 |
| 155 | - <Select.Option label="请选择字典生成" value="" /> | 154 | + <el-option label="请选择字典生成" value="" /> |
| 156 | #end | 155 | #end |
| 157 | - </Select> | 156 | + </el-select> |
| 158 | </template> | 157 | </template> |
| 159 | </vxe-column> | 158 | </vxe-column> |
| 160 | #elseif($column.htmlType == "checkbox")## 多选框 | 159 | #elseif($column.htmlType == "checkbox")## 多选框 |
| 161 | <vxe-column field="${javaField}" title="${comment}" align="center"> | 160 | <vxe-column field="${javaField}" title="${comment}" align="center"> |
| 162 | <template #default="{row}"> | 161 | <template #default="{row}"> |
| 163 | - <CheckboxGroup v-model:value="row.${javaField}"> | 162 | + <el-checkbox-group v-model="row.${javaField}"> |
| 164 | #if ("" != $dictType)## 有数据字典 | 163 | #if ("" != $dictType)## 有数据字典 |
| 165 | - <Checkbox | 164 | + <el-checkbox |
| 166 | v-for="dict in getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod')" | 165 | v-for="dict in getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod')" |
| 167 | :key="dict.value" | 166 | :key="dict.value" |
| 168 | - :value="dict.value" | 167 | + :label="dict.value" |
| 169 | > | 168 | > |
| 170 | {{ dict.label }} | 169 | {{ dict.label }} |
| 171 | - </Checkbox> | 170 | + </el-checkbox> |
| 172 | #else##没数据字典 | 171 | #else##没数据字典 |
| 173 | - <Checkbox label="请选择字典生成" /> | 172 | + <el-checkbox label="请选择字典生成" /> |
| 174 | #end | 173 | #end |
| 175 | - </CheckboxGroup> | 174 | + </el-checkbox-group> |
| 176 | </template> | 175 | </template> |
| 177 | </vxe-column> | 176 | </vxe-column> |
| 178 | #elseif($column.htmlType == "radio")## 单选框 | 177 | #elseif($column.htmlType == "radio")## 单选框 |
| 179 | <vxe-column field="${javaField}" title="${comment}" align="center"> | 178 | <vxe-column field="${javaField}" title="${comment}" align="center"> |
| 180 | <template #default="{row}"> | 179 | <template #default="{row}"> |
| 181 | - <RadioGroup v-model:value="row.${javaField}"> | 180 | + <el-radio-group v-model="row.${javaField}"> |
| 182 | #if ("" != $dictType)## 有数据字典 | 181 | #if ("" != $dictType)## 有数据字典 |
| 183 | - <Radio | 182 | + <el-radio |
| 184 | v-for="dict in getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod')" | 183 | v-for="dict in getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod')" |
| 185 | :key="dict.value" | 184 | :key="dict.value" |
| 186 | - :value="dict.value" | 185 | + :label="dict.value" |
| 187 | > | 186 | > |
| 188 | {{ dict.label }} | 187 | {{ dict.label }} |
| 189 | - </Radio> | 188 | + </el-radio> |
| 190 | #else##没数据字典 | 189 | #else##没数据字典 |
| 191 | - <Radio value="1">请选择字典生成</Radio> | 190 | + <el-radio :label="1">请选择字典生成</el-radio> |
| 192 | #end | 191 | #end |
| 193 | - </RadioGroup> | 192 | + </el-radio-group> |
| 194 | </template> | 193 | </template> |
| 195 | </vxe-column> | 194 | </vxe-column> |
| 196 | #elseif($column.htmlType == "datetime")## 时间框 | 195 | #elseif($column.htmlType == "datetime")## 时间框 |
| 197 | <vxe-column field="${javaField}" title="${comment}" align="center"> | 196 | <vxe-column field="${javaField}" title="${comment}" align="center"> |
| 198 | <template #default="{row}"> | 197 | <template #default="{row}"> |
| 199 | - <DatePicker | ||
| 200 | - v-model:value="row.${javaField}" | ||
| 201 | - :showTime="true" | 198 | + <el-date-picker |
| 199 | + v-model="row.${javaField}" | ||
| 200 | + type="datetime" | ||
| 201 | + value-format="x" | ||
| 202 | format="YYYY-MM-DD HH:mm:ss" | 202 | format="YYYY-MM-DD HH:mm:ss" |
| 203 | - valueFormat='x' | ||
| 204 | /> | 203 | /> |
| 205 | </template> | 204 | </template> |
| 206 | </vxe-column> | 205 | </vxe-column> |
| 207 | #elseif($column.htmlType == "textarea" || $column.htmlType == "editor")## 文本框 | 206 | #elseif($column.htmlType == "textarea" || $column.htmlType == "editor")## 文本框 |
| 208 | <vxe-column field="${javaField}" title="${comment}" align="center"> | 207 | <vxe-column field="${javaField}" title="${comment}" align="center"> |
| 209 | <template #default="{row}"> | 208 | <template #default="{row}"> |
| 210 | - <Textarea v-model:value="row.${javaField}" /> | 209 | + <el-input v-model="row.${javaField}" type="textarea" /> |
| 211 | </template> | 210 | </template> |
| 212 | </vxe-column> | 211 | </vxe-column> |
| 213 | #end | 212 | #end |
| @@ -215,31 +214,31 @@ watch( | @@ -215,31 +214,31 @@ watch( | ||
| 215 | #end | 214 | #end |
| 216 | <vxe-column field="operation" title="操作" align="center"> | 215 | <vxe-column field="operation" title="操作" align="center"> |
| 217 | <template #default="{row}"> | 216 | <template #default="{row}"> |
| 218 | - <Button | 217 | + <el-button |
| 219 | size="small" | 218 | size="small" |
| 220 | - type="link" | ||
| 221 | - danger | 219 | + type="danger" |
| 220 | + link | ||
| 222 | @click="onDelete(row as any)" | 221 | @click="onDelete(row as any)" |
| 223 | v-access:code="['${permissionPrefix}:delete']" | 222 | v-access:code="['${permissionPrefix}:delete']" |
| 224 | > | 223 | > |
| 225 | {{ $t('ui.actionTitle.delete') }} | 224 | {{ $t('ui.actionTitle.delete') }} |
| 226 | - </Button> | 225 | + </el-button> |
| 227 | </template> | 226 | </template> |
| 228 | </vxe-column> | 227 | </vxe-column> |
| 229 | </vxe-table> | 228 | </vxe-table> |
| 230 | <div class="flex justify-center mt-4"> | 229 | <div class="flex justify-center mt-4"> |
| 231 | - <Button :icon="h(Plus)" type="primary" ghost @click="onAdd" v-access:code="['${permissionPrefix}:create']"> | 230 | + <el-button :icon="h(Plus)" type="primary" plain @click="onAdd" v-access:code="['${permissionPrefix}:create']"> |
| 232 | {{ $t('ui.actionTitle.create', ['${subTable.classComment}']) }} | 231 | {{ $t('ui.actionTitle.create', ['${subTable.classComment}']) }} |
| 233 | - </Button> | 232 | + </el-button> |
| 234 | </div> | 233 | </div> |
| 235 | #else | 234 | #else |
| 236 | - <Form | 235 | + <el-form |
| 237 | ref="formRef" | 236 | ref="formRef" |
| 238 | class="mx-4" | 237 | class="mx-4" |
| 239 | :model="formData" | 238 | :model="formData" |
| 240 | :rules="rules" | 239 | :rules="rules" |
| 241 | - :label-col="{ span: 5 }" | ||
| 242 | - :wrapper-col="{ span: 18 }" | 240 | + label-width="120px" |
| 241 | + label-position="right" | ||
| 243 | > | 242 | > |
| 244 | #foreach($column in $subColumns) | 243 | #foreach($column in $subColumns) |
| 245 | #if ($column.createOperation || $column.updateOperation) | 244 | #if ($column.createOperation || $column.updateOperation) |
| @@ -255,84 +254,83 @@ watch( | @@ -255,84 +254,83 @@ watch( | ||
| 255 | #set ($dictMethod = "boolean") | 254 | #set ($dictMethod = "boolean") |
| 256 | #end | 255 | #end |
| 257 | #if ($column.htmlType == "input" && !$column.primaryKey)## 忽略主键,不用在表单里 | 256 | #if ($column.htmlType == "input" && !$column.primaryKey)## 忽略主键,不用在表单里 |
| 258 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 259 | - <Input v-model:value="formData.${javaField}" placeholder="请输入${comment}" /> | ||
| 260 | - </Form.Item> | 257 | + <el-form-item label="${comment}" prop="${javaField}"> |
| 258 | + <el-input v-model="formData.${javaField}" placeholder="请输入${comment}" /> | ||
| 259 | + </el-form-item> | ||
| 261 | #elseif($column.htmlType == "imageUpload")## 图片上传 | 260 | #elseif($column.htmlType == "imageUpload")## 图片上传 |
| 262 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 263 | - <ImageUpload v-model:value="formData.${javaField}" /> | ||
| 264 | - </Form.Item> | 261 | + <el-form-item label="${comment}" prop="${javaField}"> |
| 262 | + <ImageUpload v-model="formData.${javaField}" /> | ||
| 263 | + </el-form-item> | ||
| 265 | #elseif($column.htmlType == "fileUpload")## 文件上传 | 264 | #elseif($column.htmlType == "fileUpload")## 文件上传 |
| 266 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 267 | - <FileUpload v-model:value="formData.${javaField}" /> | ||
| 268 | - </Form.Item> | 265 | + <el-form-item label="${comment}" prop="${javaField}"> |
| 266 | + <FileUpload v-model="formData.${javaField}" /> | ||
| 267 | + </el-form-item> | ||
| 269 | #elseif($column.htmlType == "editor")## 文本编辑器 | 268 | #elseif($column.htmlType == "editor")## 文本编辑器 |
| 270 | - <Form.Item label="${comment}" name="${javaField}"> | 269 | + <el-form-item label="${comment}" prop="${javaField}"> |
| 271 | <RichTextarea v-model="formData.${javaField}" height="500px" /> | 270 | <RichTextarea v-model="formData.${javaField}" height="500px" /> |
| 272 | - </Form.Item> | 271 | + </el-form-item> |
| 273 | #elseif($column.htmlType == "select")## 下拉框 | 272 | #elseif($column.htmlType == "select")## 下拉框 |
| 274 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 275 | - <Select v-model:value="formData.${javaField}" placeholder="请选择${comment}"> | 273 | + <el-form-item label="${comment}" prop="${javaField}"> |
| 274 | + <el-select v-model="formData.${javaField}" placeholder="请选择${comment}"> | ||
| 276 | #if ("" != $dictType)## 有数据字典 | 275 | #if ("" != $dictType)## 有数据字典 |
| 277 | - <Select.Option | 276 | + <el-option |
| 278 | v-for="dict in getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod')" | 277 | v-for="dict in getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod')" |
| 279 | :key="dict.value" | 278 | :key="dict.value" |
| 280 | :value="dict.value" | 279 | :value="dict.value" |
| 281 | - > | ||
| 282 | - {{ dict.label }} | ||
| 283 | - </Select.Option> | 280 | + :label="dict.label" |
| 281 | + /> | ||
| 284 | #else##没数据字典 | 282 | #else##没数据字典 |
| 285 | - <Select.Option label="请选择字典生成" value="" /> | 283 | + <el-option label="请选择字典生成" value="" /> |
| 286 | #end | 284 | #end |
| 287 | - </Select> | ||
| 288 | - </Form.Item> | 285 | + </el-select> |
| 286 | + </el-form-item> | ||
| 289 | #elseif($column.htmlType == "checkbox")## 多选框 | 287 | #elseif($column.htmlType == "checkbox")## 多选框 |
| 290 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 291 | - <CheckboxGroup v-model:value="formData.${javaField}"> | 288 | + <el-form-item label="${comment}" prop="${javaField}"> |
| 289 | + <el-checkbox-group v-model="formData.${javaField}"> | ||
| 292 | #if ("" != $dictType)## 有数据字典 | 290 | #if ("" != $dictType)## 有数据字典 |
| 293 | - <Checkbox | 291 | + <el-checkbox |
| 294 | v-for="dict in getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod')" | 292 | v-for="dict in getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod')" |
| 295 | :key="dict.value" | 293 | :key="dict.value" |
| 296 | - :value="dict.value" | 294 | + :label="dict.value" |
| 297 | > | 295 | > |
| 298 | {{ dict.label }} | 296 | {{ dict.label }} |
| 299 | - </Checkbox> | 297 | + </el-checkbox> |
| 300 | #else##没数据字典 | 298 | #else##没数据字典 |
| 301 | - <Checkbox label="请选择字典生成" /> | 299 | + <el-checkbox label="请选择字典生成" /> |
| 302 | #end | 300 | #end |
| 303 | - </CheckboxGroup> | ||
| 304 | - </Form.Item> | 301 | + </el-checkbox-group> |
| 302 | + </el-form-item> | ||
| 305 | #elseif($column.htmlType == "radio")## 单选框 | 303 | #elseif($column.htmlType == "radio")## 单选框 |
| 306 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 307 | - <RadioGroup v-model:value="formData.${javaField}"> | 304 | + <el-form-item label="${comment}" prop="${javaField}"> |
| 305 | + <el-radio-group v-model="formData.${javaField}"> | ||
| 308 | #if ("" != $dictType)## 有数据字典 | 306 | #if ("" != $dictType)## 有数据字典 |
| 309 | - <Radio | 307 | + <el-radio |
| 310 | v-for="dict in getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod')" | 308 | v-for="dict in getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod')" |
| 311 | :key="dict.value" | 309 | :key="dict.value" |
| 312 | - :value="dict.value" | 310 | + :label="dict.value" |
| 313 | > | 311 | > |
| 314 | {{ dict.label }} | 312 | {{ dict.label }} |
| 315 | - </Radio> | 313 | + </el-radio> |
| 316 | #else##没数据字典 | 314 | #else##没数据字典 |
| 317 | - <Radio value="1">请选择字典生成</Radio> | 315 | + <el-radio :label="1">请选择字典生成</el-radio> |
| 318 | #end | 316 | #end |
| 319 | - </RadioGroup> | ||
| 320 | - </Form.Item> | 317 | + </el-radio-group> |
| 318 | + </el-form-item> | ||
| 321 | #elseif($column.htmlType == "datetime")## 时间框 | 319 | #elseif($column.htmlType == "datetime")## 时间框 |
| 322 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 323 | - <DatePicker | ||
| 324 | - v-model:value="formData.${javaField}" | ||
| 325 | - valueFormat="x" | 320 | + <el-form-item label="${comment}" prop="${javaField}"> |
| 321 | + <el-date-picker | ||
| 322 | + v-model="formData.${javaField}" | ||
| 323 | + value-format="x" | ||
| 326 | placeholder="选择${comment}" | 324 | placeholder="选择${comment}" |
| 327 | /> | 325 | /> |
| 328 | - </Form.Item> | 326 | + </el-form-item> |
| 329 | #elseif($column.htmlType == "textarea")## 文本框 | 327 | #elseif($column.htmlType == "textarea")## 文本框 |
| 330 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 331 | - <Textarea v-model:value="formData.${javaField}" placeholder="请输入${comment}" /> | ||
| 332 | - </Form.Item> | 328 | + <el-form-item label="${comment}" prop="${javaField}"> |
| 329 | + <el-input v-model="formData.${javaField}" type="textarea" placeholder="请输入${comment}" /> | ||
| 330 | + </el-form-item> | ||
| 333 | #end | 331 | #end |
| 334 | #end | 332 | #end |
| 335 | #end | 333 | #end |
| 336 | - </Form> | 334 | + </el-form> |
| 337 | #end | 335 | #end |
| 338 | </template> | 336 | </template> |
yudao-module-infra/src/main/resources/codegen/vue3_vben5_ele/general/views/modules/list_sub_erp.vue.vm
| @@ -21,7 +21,7 @@ | @@ -21,7 +21,7 @@ | ||
| 21 | import ${subSimpleClassName}Form from './${subSimpleClassName_strikeCase}-form.vue' | 21 | import ${subSimpleClassName}Form from './${subSimpleClassName_strikeCase}-form.vue' |
| 22 | import { Tinymce as RichTextarea } from '#/components/tinymce'; | 22 | import { Tinymce as RichTextarea } from '#/components/tinymce'; |
| 23 | import { ImageUpload, FileUpload } from "#/components/upload"; | 23 | import { ImageUpload, FileUpload } from "#/components/upload"; |
| 24 | - import { message,Button, Tabs,Pagination, Form, Input, Textarea, Select, RadioGroup, Radio, CheckboxGroup, Checkbox,RangePicker, DatePicker, TreeSelect } from 'ant-design-vue'; | 24 | + import { ElMessage, ElLoading, ElButton, ElTabs, ElTabPane, ElPagination, ElForm, ElFormItem, ElDatePicker, ElSelect, ElOption, ElInput } from 'element-plus'; |
| 25 | import { Plus, Trash2 } from '@vben/icons'; | 25 | import { Plus, Trash2 } from '@vben/icons'; |
| 26 | import { $t } from '#/locales'; | 26 | import { $t } from '#/locales'; |
| 27 | import { TableToolbar } from '#/components/table-toolbar'; | 27 | import { TableToolbar } from '#/components/table-toolbar'; |
| @@ -29,7 +29,7 @@ | @@ -29,7 +29,7 @@ | ||
| 29 | #end | 29 | #end |
| 30 | 30 | ||
| 31 | #if ($table.templateType == 11) ## erp | 31 | #if ($table.templateType == 11) ## erp |
| 32 | - import { delete${subSimpleClassName},#if ($deleteBatchEnable) delete${subSimpleClassName}List,#end get${subSimpleClassName}Page } from '#/api/${table.moduleName}/${table.businessName}'; | 32 | + import { delete${subSimpleClassName},#if ($deleteBatchEnable) delete${subSimpleClassName}List,#end get${subSimpleClassName}Page } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}'; |
| 33 | import { isEmpty } from '@vben/utils'; | 33 | import { isEmpty } from '@vben/utils'; |
| 34 | #else | 34 | #else |
| 35 | #if ($subTable.subJoinMany) ## 一对多 | 35 | #if ($subTable.subJoinMany) ## 一对多 |
| @@ -52,7 +52,7 @@ const props = defineProps<{ | @@ -52,7 +52,7 @@ const props = defineProps<{ | ||
| 52 | /** 创建${subTable.classComment} */ | 52 | /** 创建${subTable.classComment} */ |
| 53 | function handleCreate() { | 53 | function handleCreate() { |
| 54 | if (!props.${subJoinColumn.javaField}){ | 54 | if (!props.${subJoinColumn.javaField}){ |
| 55 | - message.warning("请先选择一个${table.classComment}!") | 55 | + ElMessage.warning("请先选择一个${table.classComment}!") |
| 56 | return | 56 | return |
| 57 | } | 57 | } |
| 58 | formModalApi.setData({${subJoinColumn.javaField}: props.${subJoinColumn.javaField}}).open(); | 58 | formModalApi.setData({${subJoinColumn.javaField}: props.${subJoinColumn.javaField}}).open(); |
| @@ -65,37 +65,32 @@ function handleEdit(row: ${simpleClassName}Api.${subSimpleClassName}) { | @@ -65,37 +65,32 @@ function handleEdit(row: ${simpleClassName}Api.${subSimpleClassName}) { | ||
| 65 | 65 | ||
| 66 | /** 删除${subTable.classComment} */ | 66 | /** 删除${subTable.classComment} */ |
| 67 | async function handleDelete(row: ${simpleClassName}Api.${subSimpleClassName}) { | 67 | async function handleDelete(row: ${simpleClassName}Api.${subSimpleClassName}) { |
| 68 | - const hideLoading = message.loading({ | ||
| 69 | - content: $t('ui.actionMessage.deleting', [row.id]), | ||
| 70 | - duration: 0, | ||
| 71 | - key: 'action_process_msg', | 68 | + const loadingInstance = ElLoading.service({ |
| 69 | + text: $t('ui.actionMessage.deleting', [row.id]), | ||
| 70 | + background: 'rgba(0, 0, 0, 0.7)', | ||
| 72 | }); | 71 | }); |
| 73 | try { | 72 | try { |
| 74 | await delete${subSimpleClassName}(row.id as number); | 73 | await delete${subSimpleClassName}(row.id as number); |
| 75 | - message.success({ | ||
| 76 | - content: $t('ui.actionMessage.deleteSuccess', [row.id]), | ||
| 77 | - key: 'action_process_msg', | ||
| 78 | - }); | 74 | + ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.id])); |
| 79 | await getList(); | 75 | await getList(); |
| 80 | } finally { | 76 | } finally { |
| 81 | - hideLoading(); | 77 | + loadingInstance.close(); |
| 82 | } | 78 | } |
| 83 | } | 79 | } |
| 84 | 80 | ||
| 85 | #if ($deleteBatchEnable) | 81 | #if ($deleteBatchEnable) |
| 86 | /** 批量删除${subTable.classComment} */ | 82 | /** 批量删除${subTable.classComment} */ |
| 87 | async function handleDeleteBatch() { | 83 | async function handleDeleteBatch() { |
| 88 | - const hideLoading = message.loading({ | ||
| 89 | - content: $t('ui.actionMessage.deleting'), | ||
| 90 | - duration: 0, | ||
| 91 | - key: 'action_process_msg', | 84 | + const loadingInstance = ElLoading.service({ |
| 85 | + text: $t('ui.actionMessage.deleting'), | ||
| 86 | + background: 'rgba(0, 0, 0, 0.7)', | ||
| 92 | }); | 87 | }); |
| 93 | try { | 88 | try { |
| 94 | await delete${subSimpleClassName}List(checkedIds.value); | 89 | await delete${subSimpleClassName}List(checkedIds.value); |
| 95 | - message.success( $t('ui.actionMessage.deleteSuccess') ); | 90 | + ElMessage.success($t('ui.actionMessage.deleteSuccess')); |
| 96 | await getList(); | 91 | await getList(); |
| 97 | } finally { | 92 | } finally { |
| 98 | - hideLoading(); | 93 | + loadingInstance.close(); |
| 99 | } | 94 | } |
| 100 | } | 95 | } |
| 101 | 96 | ||
| @@ -207,10 +202,10 @@ onMounted(() => { | @@ -207,10 +202,10 @@ onMounted(() => { | ||
| 207 | <div class="h-[600px]"> | 202 | <div class="h-[600px]"> |
| 208 | <ContentWrap v-if="!hiddenSearchBar"> | 203 | <ContentWrap v-if="!hiddenSearchBar"> |
| 209 | <!-- 搜索工作栏 --> | 204 | <!-- 搜索工作栏 --> |
| 210 | - <Form | 205 | + <el-form |
| 211 | :model="queryParams" | 206 | :model="queryParams" |
| 212 | ref="queryFormRef" | 207 | ref="queryFormRef" |
| 213 | - layout="inline" | 208 | + inline |
| 214 | > | 209 | > |
| 215 | #foreach($column in $subColumns) | 210 | #foreach($column in $subColumns) |
| 216 | #if ($column.listOperation) | 211 | #if ($column.listOperation) |
| @@ -226,66 +221,69 @@ onMounted(() => { | @@ -226,66 +221,69 @@ onMounted(() => { | ||
| 226 | #set ($dictMethod = "boolean") | 221 | #set ($dictMethod = "boolean") |
| 227 | #end | 222 | #end |
| 228 | #if ($column.htmlType == "input") | 223 | #if ($column.htmlType == "input") |
| 229 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 230 | - <Input | ||
| 231 | - v-model:value="queryParams.${javaField}" | 224 | + <el-form-item label="${comment}"> |
| 225 | + <el-input | ||
| 226 | + v-model="queryParams.${javaField}" | ||
| 232 | placeholder="请输入${comment}" | 227 | placeholder="请输入${comment}" |
| 233 | - allowClear | ||
| 234 | - @pressEnter="handleQuery" | ||
| 235 | - class="w-full" | 228 | + clearable |
| 229 | + @keyup.enter="handleQuery" | ||
| 230 | + class="!w-[240px]" | ||
| 236 | /> | 231 | /> |
| 237 | - </Form.Item> | 232 | + </el-form-item> |
| 238 | #elseif ($column.htmlType == "select" || $column.htmlType == "radio" || $column.htmlType == "checkbox") | 233 | #elseif ($column.htmlType == "select" || $column.htmlType == "radio" || $column.htmlType == "checkbox") |
| 239 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 240 | - <Select | ||
| 241 | - v-model:value="queryParams.${javaField}" | 234 | + <el-form-item label="${comment}"> |
| 235 | + <el-select | ||
| 236 | + v-model="queryParams.${javaField}" | ||
| 242 | placeholder="请选择${comment}" | 237 | placeholder="请选择${comment}" |
| 243 | - allowClear | ||
| 244 | - class="w-full" | 238 | + clearable |
| 239 | + class="!w-[240px]" | ||
| 245 | > | 240 | > |
| 246 | #if ("" != $dictType)## 设置了 dictType 数据字典的情况 | 241 | #if ("" != $dictType)## 设置了 dictType 数据字典的情况 |
| 247 | - <Select.Option | 242 | + <el-option |
| 248 | v-for="dict in getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod')" | 243 | v-for="dict in getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod')" |
| 249 | :key="dict.value" | 244 | :key="dict.value" |
| 250 | :value="dict.value" | 245 | :value="dict.value" |
| 251 | - > | ||
| 252 | - {{ dict.label }} | ||
| 253 | - </Select.Option> | 246 | + :label="dict.label" |
| 247 | + /> | ||
| 254 | #else## 未设置 dictType 数据字典的情况 | 248 | #else## 未设置 dictType 数据字典的情况 |
| 255 | - <Select.Option label="请选择字典生成" value="" /> | 249 | + <el-option label="请选择字典生成" value="" /> |
| 256 | #end | 250 | #end |
| 257 | - </Select> | ||
| 258 | - </Form.Item> | 251 | + </el-select> |
| 252 | + </el-form-item> | ||
| 259 | #elseif($column.htmlType == "datetime") | 253 | #elseif($column.htmlType == "datetime") |
| 260 | #if ($column.listOperationCondition != "BETWEEN")## 非范围 | 254 | #if ($column.listOperationCondition != "BETWEEN")## 非范围 |
| 261 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 262 | - <DatePicker | ||
| 263 | - v-model:value="queryParams.${javaField}" | ||
| 264 | - valueFormat="YYYY-MM-DD" | 255 | + <el-form-item label="${comment}"> |
| 256 | + <el-date-picker | ||
| 257 | + v-model="queryParams.${javaField}" | ||
| 258 | + value-format="YYYY-MM-DD" | ||
| 265 | placeholder="选择${comment}" | 259 | placeholder="选择${comment}" |
| 266 | - allowClear | ||
| 267 | - class="w-full" | 260 | + clearable |
| 261 | + class="!w-[240px]" | ||
| 268 | /> | 262 | /> |
| 269 | - </Form.Item> | 263 | + </el-form-item> |
| 270 | #else## 范围 | 264 | #else## 范围 |
| 271 | - <Form.Item label="${comment}" name="${javaField}"> | ||
| 272 | - <RangePicker | ||
| 273 | - v-model:value="queryParams.${javaField}" | ||
| 274 | - v-bind="getRangePickerDefaultProps()" | ||
| 275 | - class="w-full" | 265 | + <el-form-item label="${comment}"> |
| 266 | + <el-date-picker | ||
| 267 | + v-model="queryParams.${javaField}" | ||
| 268 | + type="daterange" | ||
| 269 | + value-format="YYYY-MM-DD" | ||
| 270 | + range-separator="至" | ||
| 271 | + start-placeholder="开始日期" | ||
| 272 | + end-placeholder="结束日期" | ||
| 273 | + class="!w-[240px]" | ||
| 276 | /> | 274 | /> |
| 277 | - </Form.Item> | 275 | + </el-form-item> |
| 278 | #end | 276 | #end |
| 279 | #end | 277 | #end |
| 280 | #end | 278 | #end |
| 281 | #end | 279 | #end |
| 282 | - <Form.Item> | ||
| 283 | - <Button class="ml-2" @click="resetQuery"> 重置 </Button> | ||
| 284 | - <Button class="ml-2" @click="handleQuery" type="primary"> | 280 | + <el-form-item> |
| 281 | + <el-button class="ml-2" @click="resetQuery"> 重置 </el-button> | ||
| 282 | + <el-button class="ml-2" @click="handleQuery" type="primary"> | ||
| 285 | 搜索 | 283 | 搜索 |
| 286 | - </Button> | ||
| 287 | - </Form.Item> | ||
| 288 | - </Form> | 284 | + </el-button> |
| 285 | + </el-form-item> | ||
| 286 | + </el-form> | ||
| 289 | </ContentWrap> | 287 | </ContentWrap> |
| 290 | 288 | ||
| 291 | <!-- 列表 --> | 289 | <!-- 列表 --> |
| @@ -295,7 +293,7 @@ onMounted(() => { | @@ -295,7 +293,7 @@ onMounted(() => { | ||
| 295 | ref="tableToolbarRef" | 293 | ref="tableToolbarRef" |
| 296 | v-model:hidden-search="hiddenSearchBar" | 294 | v-model:hidden-search="hiddenSearchBar" |
| 297 | > | 295 | > |
| 298 | - <Button | 296 | + <el-button |
| 299 | class="ml-2" | 297 | class="ml-2" |
| 300 | :icon="h(Plus)" | 298 | :icon="h(Plus)" |
| 301 | type="primary" | 299 | type="primary" |
| @@ -303,19 +301,18 @@ onMounted(() => { | @@ -303,19 +301,18 @@ onMounted(() => { | ||
| 303 | v-access:code="['${permissionPrefix}:create']" | 301 | v-access:code="['${permissionPrefix}:create']" |
| 304 | > | 302 | > |
| 305 | {{ $t('ui.actionTitle.create', ['${table.classComment}']) }} | 303 | {{ $t('ui.actionTitle.create', ['${table.classComment}']) }} |
| 306 | - </Button> | 304 | + </el-button> |
| 307 | #if ($deleteBatchEnable) | 305 | #if ($deleteBatchEnable) |
| 308 | - <Button | 306 | + <el-button |
| 309 | :icon="h(Trash2)" | 307 | :icon="h(Trash2)" |
| 310 | - type="primary" | ||
| 311 | - danger | 308 | + type="danger" |
| 312 | class="ml-2" | 309 | class="ml-2" |
| 313 | :disabled="isEmpty(checkedIds)" | 310 | :disabled="isEmpty(checkedIds)" |
| 314 | @click="handleDeleteBatch" | 311 | @click="handleDeleteBatch" |
| 315 | v-access:code="['${table.moduleName}:${simpleClassName_strikeCase}:delete']" | 312 | v-access:code="['${table.moduleName}:${simpleClassName_strikeCase}:delete']" |
| 316 | > | 313 | > |
| 317 | 批量删除 | 314 | 批量删除 |
| 318 | - </Button> | 315 | + </el-button> |
| 319 | #end | 316 | #end |
| 320 | </TableToolbar> | 317 | </TableToolbar> |
| 321 | </template> | 318 | </template> |
| @@ -358,35 +355,38 @@ onMounted(() => { | @@ -358,35 +355,38 @@ onMounted(() => { | ||
| 358 | #end | 355 | #end |
| 359 | <vxe-column field="operation" title="操作" align="center"> | 356 | <vxe-column field="operation" title="操作" align="center"> |
| 360 | <template #default="{row}"> | 357 | <template #default="{row}"> |
| 361 | - <Button | 358 | + <el-button |
| 362 | size="small" | 359 | size="small" |
| 363 | - type="link" | 360 | + type="primary" |
| 361 | + link | ||
| 364 | @click="handleEdit(row as any)" | 362 | @click="handleEdit(row as any)" |
| 365 | v-access:code="['${permissionPrefix}:update']" | 363 | v-access:code="['${permissionPrefix}:update']" |
| 366 | > | 364 | > |
| 367 | {{ $t('ui.actionTitle.edit') }} | 365 | {{ $t('ui.actionTitle.edit') }} |
| 368 | - </Button> | ||
| 369 | - <Button | 366 | + </el-button> |
| 367 | + <el-button | ||
| 370 | size="small" | 368 | size="small" |
| 371 | - type="link" | ||
| 372 | - danger | 369 | + type="danger" |
| 370 | + link | ||
| 373 | class="ml-2" | 371 | class="ml-2" |
| 374 | @click="handleDelete(row as any)" | 372 | @click="handleDelete(row as any)" |
| 375 | v-access:code="['${permissionPrefix}:delete']" | 373 | v-access:code="['${permissionPrefix}:delete']" |
| 376 | > | 374 | > |
| 377 | {{ $t('ui.actionTitle.delete') }} | 375 | {{ $t('ui.actionTitle.delete') }} |
| 378 | - </Button> | 376 | + </el-button> |
| 379 | </template> | 377 | </template> |
| 380 | </vxe-column> | 378 | </vxe-column> |
| 381 | </vxe-table> | 379 | </vxe-table> |
| 382 | <!-- 分页 --> | 380 | <!-- 分页 --> |
| 383 | <div class="mt-2 flex justify-end"> | 381 | <div class="mt-2 flex justify-end"> |
| 384 | - <Pagination | 382 | + <el-pagination |
| 385 | :total="total" | 383 | :total="total" |
| 386 | - v-model:current="queryParams.pageNo" | 384 | + v-model:current-page="queryParams.pageNo" |
| 387 | v-model:page-size="queryParams.pageSize" | 385 | v-model:page-size="queryParams.pageSize" |
| 388 | - show-size-changer | ||
| 389 | - @change="getList" | 386 | + :page-sizes="[10, 20, 50, 100]" |
| 387 | + layout="total, sizes, prev, pager, next, jumper" | ||
| 388 | + @size-change="getList" | ||
| 389 | + @current-change="getList" | ||
| 390 | /> | 390 | /> |
| 391 | </div> | 391 | </div> |
| 392 | </ContentWrap> | 392 | </ContentWrap> |
yudao-module-infra/src/main/resources/codegen/vue3_vben5_ele/general/views/modules/list_sub_inner.vue.vm
| 1 | ## 子表的 erp 和 inner 使用相似的 list 列表,差异主要两点: | 1 | ## 子表的 erp 和 inner 使用相似的 list 列表,差异主要两点: |
| 2 | ## 1)inner 使用 list 不分页,erp 使用 page 分页 | 2 | ## 1)inner 使用 list 不分页,erp 使用 page 分页 |
| 3 | ## 2)erp 支持单个子表的新增、修改、删除,inner 不支持 | 3 | ## 2)erp 支持单个子表的新增、修改、删除,inner 不支持 |
| 4 | -#parse("codegen/vue3_vben5_antd/general/views/modules/list_sub_erp.vue.vm") | ||
| 5 | \ No newline at end of file | 4 | \ No newline at end of file |
| 5 | +#parse("codegen/vue3_vben5_ele/general/views/modules/list_sub_erp.vue.vm") | ||
| 6 | \ No newline at end of file | 6 | \ No newline at end of file |