添加表格模板页面.
This commit is contained in:
@@ -13,6 +13,7 @@ import com.orion.lang.utils.ext.yml.YmlExt;
|
|||||||
import com.orion.ops.framework.mybatis.core.domain.BaseDO;
|
import com.orion.ops.framework.mybatis.core.domain.BaseDO;
|
||||||
import com.orion.ops.framework.mybatis.core.mapper.IMapper;
|
import com.orion.ops.framework.mybatis.core.mapper.IMapper;
|
||||||
import com.orion.ops.module.infra.enums.RoleStatusEnum;
|
import com.orion.ops.module.infra.enums.RoleStatusEnum;
|
||||||
|
import com.orion.ops.module.infra.enums.TestTableStatusEnum;
|
||||||
import com.orion.ops.module.infra.enums.UserStatusEnum;
|
import com.orion.ops.module.infra.enums.UserStatusEnum;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
@@ -40,13 +41,16 @@ public class CodeGenerator {
|
|||||||
String module = "infra";
|
String module = "infra";
|
||||||
// 生成的表
|
// 生成的表
|
||||||
GenTable[] tables = {
|
GenTable[] tables = {
|
||||||
new GenTable("system_user", "用户", "user")
|
new GenTable("test_table", "表", "test")
|
||||||
.vue("user", "user")
|
.vue("test", "table")
|
||||||
.enums(UserStatusEnum.class),
|
.enums(TestTableStatusEnum.class),
|
||||||
new GenTable("system_role", "角色", "role")
|
// new GenTable("system_user", "用户", "user")
|
||||||
.vue("user", "role")
|
// .vue("user", "user")
|
||||||
.enums(RoleStatusEnum.class),
|
// .enums(UserStatusEnum.class),
|
||||||
new GenTable("system_menu", "菜单", "menu"),
|
// new GenTable("system_role", "角色", "role")
|
||||||
|
// .vue("user", "role")
|
||||||
|
// .enums(RoleStatusEnum.class),
|
||||||
|
// new GenTable("system_menu", "菜单", "menu"),
|
||||||
};
|
};
|
||||||
// jdbc 配置 - 使用配置文件
|
// jdbc 配置 - 使用配置文件
|
||||||
File yamlFile = new File("orion-ops-launch/src/main/resources/application-dev.yaml");
|
File yamlFile = new File("orion-ops-launch/src/main/resources/application-dev.yaml");
|
||||||
@@ -129,7 +133,6 @@ public class CodeGenerator {
|
|||||||
private static GlobalConfig getGlobalConfig(String outputDir, String author) {
|
private static GlobalConfig getGlobalConfig(String outputDir, String author) {
|
||||||
// 全局配置
|
// 全局配置
|
||||||
GlobalConfig gbConfig = new GlobalConfig.Builder()
|
GlobalConfig gbConfig = new GlobalConfig.Builder()
|
||||||
.disableOpenDir()
|
|
||||||
// 设置作者
|
// 设置作者
|
||||||
.author(author)
|
.author(author)
|
||||||
// 生成路径
|
// 生成路径
|
||||||
|
|||||||
@@ -256,6 +256,8 @@ public class VelocityTemplateEngine extends AbstractTemplateEngine {
|
|||||||
String outPath = getConfigBuilder().getGlobalConfig().getOutputDir();
|
String outPath = getConfigBuilder().getGlobalConfig().getOutputDir();
|
||||||
GenTable table = tables.get(tableInfo.getName());
|
GenTable table = tables.get(tableInfo.getName());
|
||||||
BeanMap beanMap = BeanMap.create(table, "enums");
|
BeanMap beanMap = BeanMap.create(table, "enums");
|
||||||
|
// 模块名称首字母大写
|
||||||
|
beanMap.put("moduleFirstUpper", Strings.firstUpper(table.getModule()));
|
||||||
// 功能名称首字母大写
|
// 功能名称首字母大写
|
||||||
beanMap.put("featureFirstUpper", Strings.firstUpper(table.getFeature()));
|
beanMap.put("featureFirstUpper", Strings.firstUpper(table.getFeature()));
|
||||||
// 功能名称全大写
|
// 功能名称全大写
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ const $vue.featureAllUpper: AppRouteRecordRaw = {
|
|||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
name: '$vue.module$vue.featureFirstUpper',
|
name: '$vue.module$vue.featureFirstUpper',
|
||||||
path: '/$vue.module/$vue.featureFirstUpper',
|
path: '/$vue.module/$vue.feature',
|
||||||
component: () => import('@/views/$vue.module/$vue.feature/index.vue'),
|
component: () => import('@/views/$vue.module/$vue.feature/index.vue'),
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1 +1,141 @@
|
|||||||
form
|
<template>
|
||||||
|
<a-modal v-model:visible="visible"
|
||||||
|
body-class="modal-form"
|
||||||
|
title-align="start"
|
||||||
|
:title="title"
|
||||||
|
:top="120"
|
||||||
|
:align-center="false"
|
||||||
|
:draggable="true"
|
||||||
|
:mask-closable="false"
|
||||||
|
:unmount-on-close="true"
|
||||||
|
:ok-button-props="{ disabled: loading }"
|
||||||
|
:cancel-button-props="{ disabled: loading }"
|
||||||
|
:on-before-ok="handlerOk"
|
||||||
|
@close="handleClose">
|
||||||
|
<a-spin :loading="loading">
|
||||||
|
<a-form :model="formModel"
|
||||||
|
ref="formRef"
|
||||||
|
label-align="right"
|
||||||
|
:style="{ width: '460px' }"
|
||||||
|
:label-col-props="{ span: 6 }"
|
||||||
|
:wrapper-col-props="{ span: 18 }"
|
||||||
|
:rules="formRules">
|
||||||
|
#foreach($field in ${table.fields})
|
||||||
|
#if("$field.propertyName" != "id")
|
||||||
|
<!-- $field.comment -->
|
||||||
|
<a-form-item field="${field.propertyName}" label="${field.comment}">
|
||||||
|
#if("$field.propertyType" == "Integer" || "$field.propertyType" == "Long")
|
||||||
|
<a-input-number v-model="formModel.${field.propertyName}" placeholder="请输入${field.comment}" />
|
||||||
|
#elseif("$field.propertyType" == "Date")
|
||||||
|
<a-date-picker v-model="formModel.${field.propertyName}" placeholder="请选择${field.comment}" show-time />
|
||||||
|
#else
|
||||||
|
<a-input v-model="formModel.${field.propertyName}" placeholder="请输入${field.comment}" />
|
||||||
|
#end
|
||||||
|
</a-form-item>
|
||||||
|
#end
|
||||||
|
#end
|
||||||
|
</a-form>
|
||||||
|
</a-spin>
|
||||||
|
</a-modal>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
export default {
|
||||||
|
name: '${vue.module}-${vue.feature}-form-modal'
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { reactive, ref } from 'vue';
|
||||||
|
import useLoading from '@/hooks/loading';
|
||||||
|
import useVisible from '@/hooks/visible';
|
||||||
|
import formRules from '../types/form.rules';
|
||||||
|
import { create${vue.featureFirstUpper}, update${vue.featureFirstUpper} } from '@/api/${vue.module}/${vue.feature}';
|
||||||
|
|
||||||
|
const { visible, setVisible } = useVisible();
|
||||||
|
const { loading, setLoading } = useLoading();
|
||||||
|
|
||||||
|
const title = ref<string>();
|
||||||
|
const isAddHandle = ref<boolean>(true);
|
||||||
|
|
||||||
|
const defaultForm = () => {
|
||||||
|
return {
|
||||||
|
#foreach($field in ${table.fields})
|
||||||
|
${field.propertyName}: underfined,
|
||||||
|
#end
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const formRef = ref<any>();
|
||||||
|
const formModel = reactive<Record<string, any>>(defaultForm());
|
||||||
|
|
||||||
|
const emits = defineEmits(['added', 'updated']);
|
||||||
|
|
||||||
|
// 打开新增
|
||||||
|
const openAdd = () => {
|
||||||
|
title.value = '添加${table.comment}';
|
||||||
|
isAddHandle.value = true;
|
||||||
|
renderForm({ ...defaultForm() });
|
||||||
|
setVisible(true);
|
||||||
|
};
|
||||||
|
|
||||||
|
// 打开修改
|
||||||
|
const openUpdate = (record: any) => {
|
||||||
|
title.value = '修改${table.comment}';
|
||||||
|
isAddHandle.value = false;
|
||||||
|
renderForm({ ...defaultForm(), ...record });
|
||||||
|
setVisible(true);
|
||||||
|
};
|
||||||
|
|
||||||
|
// 渲染表单
|
||||||
|
const renderForm = (record: any) => {
|
||||||
|
Object.keys(formModel).forEach(k => {
|
||||||
|
formModel[k] = record[k];
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
defineExpose({ openAdd, openUpdate });
|
||||||
|
|
||||||
|
// 确定
|
||||||
|
const handlerOk = async () => {
|
||||||
|
setLoading(true);
|
||||||
|
try {
|
||||||
|
// 验证参数
|
||||||
|
const error = await formRef.value.validate();
|
||||||
|
if (error) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (isAddHandle.value) {
|
||||||
|
// 新增
|
||||||
|
await create${vue.featureFirstUpper}(formModel as any);
|
||||||
|
emits('added');
|
||||||
|
} else {
|
||||||
|
// 修改
|
||||||
|
await update${vue.featureFirstUpper}(formModel as any);
|
||||||
|
emits('updated');
|
||||||
|
}
|
||||||
|
// 清空
|
||||||
|
handlerClear();
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
} finally {
|
||||||
|
setLoading(false);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 关闭
|
||||||
|
const handleClose = () => {
|
||||||
|
handlerClear();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 清空
|
||||||
|
const handlerClear = () => {
|
||||||
|
setLoading(false);
|
||||||
|
setVisible(false);
|
||||||
|
};
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|||||||
@@ -1 +1,32 @@
|
|||||||
index
|
<template>
|
||||||
|
<div class="layout-container">
|
||||||
|
<!-- 表格 -->
|
||||||
|
<${vue.feature}-table ref="table"
|
||||||
|
@openAdd="() => modal.openAdd()"
|
||||||
|
@openUpdate="(e) => modal.openUpdate(e)" />
|
||||||
|
<!-- 添加修改框 -->
|
||||||
|
<${vue.feature}-form-modal ref="modal"
|
||||||
|
@added="() => table.addedCallback()"
|
||||||
|
@updated="() => table.updatedCallback()" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
export default {
|
||||||
|
name: '${vue.module}${vue.featureAllUpper}'
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import ${vue.featureFirstUpper}Table from './components/${vue.feature}-table.vue';
|
||||||
|
import ${vue.featureFirstUpper}Modal from './components/${vue.feature}-form-modal.vue';
|
||||||
|
import { ref } from 'vue';
|
||||||
|
|
||||||
|
const table = ref();
|
||||||
|
const modal = ref();
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ export const $enumEntity.key = {
|
|||||||
#foreach($enumEntityItemFields in $enumEntityItem.value.entrySet())
|
#foreach($enumEntityItemFields in $enumEntityItem.value.entrySet())
|
||||||
$enumEntityItemFields.key: '$enumEntityItemFields.value',
|
$enumEntityItemFields.key: '$enumEntityItemFields.value',
|
||||||
#end
|
#end
|
||||||
}
|
},
|
||||||
#end
|
#end
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { FieldRule } from '@arco-design/web-vue';
|
import { FieldRule } from '@arco-design/web-vue';
|
||||||
|
|
||||||
#foreach($field in ${table.fields})
|
#foreach($field in ${table.fields})
|
||||||
|
#if("$!field.propertyName" != "id")
|
||||||
#if(${field.propertyType} == 'String')
|
#if(${field.propertyType} == 'String')
|
||||||
export const ${field.propertyName} = [{
|
export const ${field.propertyName} = [{
|
||||||
required: true,
|
required: true,
|
||||||
@@ -15,10 +15,13 @@ export const ${field.propertyName} = [{
|
|||||||
message: '请输入${field.comment}'
|
message: '请输入${field.comment}'
|
||||||
}] as FieldRule[];
|
}] as FieldRule[];
|
||||||
#end
|
#end
|
||||||
|
#end
|
||||||
|
|
||||||
#end
|
#end
|
||||||
export default {
|
export default {
|
||||||
#foreach($field in ${table.fields})
|
#foreach($field in ${table.fields})
|
||||||
|
#if("$!field.propertyName" != "id")
|
||||||
${field.propertyName},
|
${field.propertyName},
|
||||||
#end
|
#end
|
||||||
|
#end
|
||||||
} as Record<string, FieldRule | FieldRule[]>;
|
} as Record<string, FieldRule | FieldRule[]>;
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import { TableColumnData } from '@arco-design/web-vue/es/table/interface';
|
import { TableColumnData } from '@arco-design/web-vue/es/table/interface';
|
||||||
|
import { formatMilliSecond, YMD_HMS } from '@/utils';
|
||||||
|
|
||||||
const columns = [
|
const columns = [
|
||||||
{
|
{
|
||||||
@@ -6,8 +7,9 @@ const columns = [
|
|||||||
dataIndex: 'id',
|
dataIndex: 'id',
|
||||||
slotName: 'id',
|
slotName: 'id',
|
||||||
width: 70,
|
width: 70,
|
||||||
|
align: 'left',
|
||||||
fixed: 'left',
|
fixed: 'left',
|
||||||
}, #foreach($field in ${table.fields}){
|
}, #foreach($field in ${table.fields})#if("$!field.propertyName" != "id"){
|
||||||
title: '${field.comment}',
|
title: '${field.comment}',
|
||||||
dataIndex: '${field.propertyName}',
|
dataIndex: '${field.propertyName}',
|
||||||
slotName: '${field.propertyName}',
|
slotName: '${field.propertyName}',
|
||||||
@@ -17,14 +19,20 @@ const columns = [
|
|||||||
ellipsis: true,
|
ellipsis: true,
|
||||||
tooltip: true,
|
tooltip: true,
|
||||||
#end
|
#end
|
||||||
}, #end{
|
}, #end#end{
|
||||||
title: '创建时间',
|
title: '创建时间',
|
||||||
dataIndex: 'createTime',
|
dataIndex: 'createTime',
|
||||||
slotName: 'createTime',
|
slotName: 'createTime',
|
||||||
|
render: ({ record }) => {
|
||||||
|
return formatMilliSecond(record.createTime, YMD_HMS);
|
||||||
|
},
|
||||||
}, {
|
}, {
|
||||||
title: '修改时间',
|
title: '修改时间',
|
||||||
dataIndex: 'updateTime',
|
dataIndex: 'updateTime',
|
||||||
slotName: 'updateTime',
|
slotName: 'updateTime',
|
||||||
|
render: ({ record }) => {
|
||||||
|
return formatMilliSecond(record.createTime, YMD_HMS);
|
||||||
|
},
|
||||||
}, {
|
}, {
|
||||||
title: '创建人',
|
title: '创建人',
|
||||||
dataIndex: 'creator',
|
dataIndex: 'creator',
|
||||||
@@ -35,10 +43,11 @@ const columns = [
|
|||||||
slotName: 'updater',
|
slotName: 'updater',
|
||||||
}, {
|
}, {
|
||||||
title: '操作',
|
title: '操作',
|
||||||
slotName: 'option',
|
slotName: 'handle',
|
||||||
width: 158,
|
width: 130,
|
||||||
|
align: 'center',
|
||||||
fixed: 'right',
|
fixed: 'right',
|
||||||
}
|
},
|
||||||
] as TableColumnData[];
|
] as TableColumnData[];
|
||||||
|
|
||||||
export default columns;
|
export default columns;
|
||||||
|
|||||||
Reference in New Issue
Block a user