feat: 表单设置完成

This commit is contained in:
bunny 2025-04-05 15:03:32 +08:00
parent 4fec1b43ce
commit b5e3ea5ffa
3 changed files with 154 additions and 35 deletions

View File

@ -0,0 +1,42 @@
import type { FormRules } from 'naive-ui';
export const serverOptions = [
{ name: 'controller', label: 'controller' },
{ name: 'mapper', label: 'mapper' },
{ name: 'resourceMapper', label: 'resourceMapper' },
{ name: 'service', label: 'service' },
{ name: 'serviceImpl', label: 'serviceImpl' },
];
export const webOptions = [
{ name: 'api', label: 'api' },
{ name: 'columns', label: 'columns' },
{ name: 'dialog', label: 'dialog' },
{ name: 'hook', label: 'hook' },
{ name: 'index', label: 'index' },
{ name: 'store', label: 'store' },
{ name: 'labels', label: 'labels' },
];
export const rules: FormRules = {
author: { required: true, trigger: ['blur', 'change', 'input'], message: '作者不能为空' },
packageName: { required: true, trigger: ['blur', 'change', 'input'], message: '包名不能为空' },
requestMapping: {
required: true,
trigger: ['blur', 'change', 'input'],
message: '请求路径不能为空',
},
className: { required: true, trigger: ['blur', 'change', 'input'], message: '类名不能为空' },
tableName: { required: true, trigger: ['blur', 'change', 'input'], message: '表名不能为空' },
simpleDateFormat: {
required: true,
trigger: ['blur', 'change', 'input'],
message: '日期格式不能为空',
},
// generatorServer: {
// required: true,
// trigger: ['blur', 'change', 'input'],
// message: '选择要生成的服务端',
// },
// generatorWeb: { required: true, trigger: ['blur', 'change', 'input'], message: '选择要生成的前端' },
};

View File

@ -1,48 +1,130 @@
<template>
<n-form ref="formRef" :label-width="80" :model="formValue" :rules="rules" inline>
<n-form-item label="姓名" path="user.name">
<n-input v-model:value="formValue.name" placeholder="输入姓名" />
</n-form-item>
<n-form-item label="年龄" path="user.age">
<n-input v-model:value="formValue.age" placeholder="输入年龄" />
</n-form-item>
<n-form-item label="电话号码" path="phone">
<n-input v-model:value="formValue.phone" placeholder="电话号码" />
</n-form-item>
<n-form ref="formRef" :label-width="80" :model="formValue" :rules="rules">
<n-grid :cols="24" :x-gap="24">
<n-form-item-gi :span="8" label="作者名称" path="author">
<n-input v-model:value="formValue.author" placeholder="输入姓名" />
</n-form-item-gi>
<n-form-item-gi :span="8" label="requestMapping名称" path="requestMapping">
<n-input v-model:value="formValue.requestMapping" placeholder="输入年龄" />
</n-form-item-gi>
<n-form-item-gi :span="8" label="表名称" path="tableName">
<n-input v-model:value="formValue.tableName" placeholder="电话号码" />
</n-form-item-gi>
</n-grid>
<n-grid :cols="24" :x-gap="24">
<n-form-item-gi :span="8" label="类名称" path="className">
<n-input v-model:value="formValue.className" placeholder="电话号码" />
</n-form-item-gi>
<n-form-item-gi :span="8" label="包名称" path="packageName">
<n-input v-model:value="formValue.packageName" placeholder="电话号码" />
</n-form-item-gi>
<n-form-item-gi :span="8" label="时间格式" path="simpleDateFormat">
<n-input v-model:value="formValue.simpleDateFormat" placeholder="电话号码" />
</n-form-item-gi>
</n-grid>
<n-grid :cols="24" :x-gap="24">
<n-form-item-gi :span="8" label="去除开头前缀" path="tablePrefixes">
<n-input v-model:value="formValue.tablePrefixes" placeholder="电话号码" />
</n-form-item-gi>
<n-form-item-gi :span="8" label="生成后端" path="generatorServer">
<n-checkbox-group v-model:value="formValue.generatorServer">
<n-space>
<n-checkbox v-for="(item, index) in serverOptions" :key="index" :value="item.name">
{{ item.label }}
</n-checkbox>
</n-space>
</n-checkbox-group>
</n-form-item-gi>
<n-form-item-gi :span="8" label="生成前端" path="generatorWeb">
<n-checkbox-group v-model:value="formValue.generatorWeb">
<n-space>
<n-checkbox v-for="(item, index) in webOptions" :key="index" v-model:value="item.name">
{{ item.label }}
</n-checkbox>
</n-space>
</n-checkbox-group>
</n-form-item-gi>
</n-grid>
<n-form-item>
<n-button attr-type="button" @click="handleValidateClick">验证</n-button>
<n-button attr-type="button" class="w-full" type="primary" @click="onSubmit">
开始生成
</n-button>
</n-form-item>
</n-form>
</template>
<script lang="ts" setup>
import { FormRules, NButton, NForm, NFormItem, NInput, useMessage } from 'naive-ui';
import { reactive, ref } from 'vue';
import {
NButton,
NCheckbox,
NCheckboxGroup,
NForm,
NFormItem,
NFormItemGi,
NGrid,
NInput,
NSpace,
useMessage,
} from 'naive-ui';
import { onMounted, reactive, ref } from 'vue';
import { useRoute } from 'vue-router';
const rules: FormRules = {
input: {
required: true,
trigger: ['focus', 'input'],
renderMessage: () => {
return localeRef.value === '语言1'
? '抽离透传归因分析作为抓手为产品赋能'
: '方法论是组合拳达到平台化标准';
},
},
};
import {
rules,
serverOptions,
webOptions,
} from '@/views/generator-code/components/generator-form/generatorOptions';
const route = useRoute();
const message = useMessage();
const formRef = ref();
const formValue = reactive({});
const formValue = reactive({
author: 'Bunny',
packageName: 'cn.bunny.services',
requestMapping: '/api',
className: '',
tableName: '',
simpleDateFormat: 'yyyy-MM-dd HH:mm:ss',
tablePrefixes: 't_,sys_,qrtz_,log_',
generatorServer: undefined,
generatorWeb: undefined,
});
const handleValidateClick = (e: MouseEvent) => {
/* 提交表单 */
const onSubmit = (e: MouseEvent) => {
e.preventDefault();
formRef.value?.validate((errors: any) => {
formRef.value?.validate(async (errors: any) => {
if (!errors) {
console.log(formValue);
message.success('验证成功');
} else {
console.log(errors);
message.error('验证失败');
errors.forEach((error: any) => {
error.forEach((err: any) => {
message.error(`${err.message}->${err.field}`);
});
});
}
});
};
/* 初始化表单信息 */
const formValueInit = () => {
//
const tableName = route.query.tableName;
formValue.tableName = tableName.toString();
//
let className: any = tableName as any;
formValue.tablePrefixes.split(/[,]/).forEach((item) => {
className = className.replace(item, '');
});
formValue.className = className;
};
onMounted(() => {
formValueInit();
});
</script>

View File

@ -6,7 +6,6 @@ import { useRoute, useRouter } from 'vue-router';
import { useTableStore } from '@/store/modules/table';
import Index from '@/views/generator-code/components/columns-info/index.vue';
import GeneratorForm from '@/views/generator-code/components/generator-form/index.vue';
import Home from '@/views/home/index.vue';
const router = useRouter();
const route = useRoute();
@ -35,6 +34,7 @@ onMounted(() => {
<n-card>
<template #header>
<n-card title="数据库信息">
<span class="color-blue" @click="router.push('/')">回到首页</span>
<ul>
<li>表名{{ route.query.tableName }}</li>
<li>表注释{{ tableInfo.comment }}</li>
@ -49,11 +49,6 @@ onMounted(() => {
<index />
</n-tab-pane>
<n-tab-pane name="home" tab="数据库表" @click="router.push('/')">
<a class="inline-block color-blue" href="/">回到首页</a>
<home />
</n-tab-pane>
<n-tab-pane name="the beatles" tab="生成">
<generator-form />
</n-tab-pane>