7 changed files with 441 additions and 7 deletions
@ -1 +1,56 @@ |
|||||||
<template><sapn>123</sapn></template> |
<template> |
||||||
|
<PageWrapper> |
||||||
|
<div class="m-5 w-200"> |
||||||
|
<Steps :current="current"> |
||||||
|
<Step title="基本信息" /> |
||||||
|
<Step title="生成信息" /> |
||||||
|
<Step title="字段信息" /> |
||||||
|
<Step title="完成" /> |
||||||
|
</Steps> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="m-5"> |
||||||
|
<BasicInfoForm @next="handleStep1Next" v-show="current === 0" /> |
||||||
|
<GenInfoForm @prev="handleStepPrev" @next="handleStep2Next" v-show="current === 1" v-if="state.initSetp2" /> |
||||||
|
<CloumInfoForm v-show="current === 2" @redo="handleRedo" v-if="state.initSetp3" /> |
||||||
|
<span v-show="current === 4">1234</span> |
||||||
|
</div> |
||||||
|
</PageWrapper> |
||||||
|
</template> |
||||||
|
<script lang="ts" setup> |
||||||
|
import { ref, reactive } from 'vue' |
||||||
|
import { Steps } from 'ant-design-vue' |
||||||
|
import { PageWrapper } from '@/components/Page' |
||||||
|
import BasicInfoForm from './components/BasicInfoForm.vue' |
||||||
|
import CloumInfoForm from './components/CloumInfoForm.vue' |
||||||
|
import GenInfoForm from './components/GenInfoForm.vue' |
||||||
|
|
||||||
|
const Step = Steps.Step |
||||||
|
|
||||||
|
const current = ref(0) |
||||||
|
const state = reactive({ |
||||||
|
initSetp2: false, |
||||||
|
initSetp3: false |
||||||
|
}) |
||||||
|
function handleStep1Next(step1Values: any) { |
||||||
|
current.value++ |
||||||
|
state.initSetp2 = true |
||||||
|
console.log(step1Values) |
||||||
|
} |
||||||
|
|
||||||
|
function handleStepPrev() { |
||||||
|
current.value-- |
||||||
|
} |
||||||
|
|
||||||
|
function handleStep2Next(step2Values: any) { |
||||||
|
current.value++ |
||||||
|
state.initSetp3 = true |
||||||
|
console.log(step2Values) |
||||||
|
} |
||||||
|
|
||||||
|
function handleRedo() { |
||||||
|
current.value = 0 |
||||||
|
state.initSetp2 = false |
||||||
|
state.initSetp3 = false |
||||||
|
} |
||||||
|
</script> |
||||||
|
@ -0,0 +1,78 @@ |
|||||||
|
<template> |
||||||
|
<div class="step1"> |
||||||
|
<div class="step1-form"> |
||||||
|
<BasicForm @register="register" /> |
||||||
|
</div> |
||||||
|
<Divider /> |
||||||
|
<h3>说明</h3> |
||||||
|
<h4>转账到支付宝账户</h4> |
||||||
|
<p> |
||||||
|
如果需要,这里可以放一些关于产品的常见问题说明。如果需要,这里可以放一些关于产品的常见问题说明。如果需要,这里可以放一些关于产品的常见问题说明。 |
||||||
|
</p> |
||||||
|
|
||||||
|
<h4>转账到银行卡</h4> |
||||||
|
<p> |
||||||
|
如果需要,这里可以放一些关于产品的常见问题说明。如果需要,这里可以放一些关于产品的常见问题说明。如果需要,这里可以放一些关于产品的常见问题说明。 |
||||||
|
</p> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<script lang="ts" setup> |
||||||
|
import { BasicForm, useForm } from '@/components/Form' |
||||||
|
import { basicInfoSchemas } from './data' |
||||||
|
|
||||||
|
import { Divider } from 'ant-design-vue' |
||||||
|
const emit = defineEmits(['next']) |
||||||
|
const [register, { validate }] = useForm({ |
||||||
|
labelWidth: 120, |
||||||
|
schemas: basicInfoSchemas, |
||||||
|
actionColOptions: { |
||||||
|
span: 14 |
||||||
|
}, |
||||||
|
showResetButton: false, |
||||||
|
submitButtonOptions: { |
||||||
|
text: '下一步' |
||||||
|
}, |
||||||
|
submitFunc: customSubmitFunc |
||||||
|
}) |
||||||
|
|
||||||
|
async function customSubmitFunc() { |
||||||
|
try { |
||||||
|
const values = await validate() |
||||||
|
emit('next', values) |
||||||
|
} catch (error) {} |
||||||
|
} |
||||||
|
</script> |
||||||
|
<style lang="less" scoped> |
||||||
|
.step1 { |
||||||
|
&-form { |
||||||
|
width: 450px; |
||||||
|
margin: 0 auto; |
||||||
|
} |
||||||
|
|
||||||
|
h3 { |
||||||
|
margin: 0 0 12px; |
||||||
|
font-size: 16px; |
||||||
|
line-height: 32px; |
||||||
|
color: @text-color; |
||||||
|
} |
||||||
|
|
||||||
|
h4 { |
||||||
|
margin: 0 0 4px; |
||||||
|
font-size: 14px; |
||||||
|
line-height: 22px; |
||||||
|
color: @text-color; |
||||||
|
} |
||||||
|
|
||||||
|
p { |
||||||
|
color: @text-color; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.pay-select { |
||||||
|
width: 20%; |
||||||
|
} |
||||||
|
|
||||||
|
.pay-input { |
||||||
|
width: 70%; |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,78 @@ |
|||||||
|
<template> |
||||||
|
<div class="step3"> |
||||||
|
<div class="step3-form"> |
||||||
|
<BasicForm @register="register" /> |
||||||
|
</div> |
||||||
|
<Divider /> |
||||||
|
<h3>说明</h3> |
||||||
|
<h4>转账到支付宝账户</h4> |
||||||
|
<p> |
||||||
|
如果需要,这里可以放一些关于产品的常见问题说明。如果需要,这里可以放一些关于产品的常见问题说明。如果需要,这里可以放一些关于产品的常见问题说明。 |
||||||
|
</p> |
||||||
|
|
||||||
|
<h4>转账到银行卡</h4> |
||||||
|
<p> |
||||||
|
如果需要,这里可以放一些关于产品的常见问题说明。如果需要,这里可以放一些关于产品的常见问题说明。如果需要,这里可以放一些关于产品的常见问题说明。 |
||||||
|
</p> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<script lang="ts" setup> |
||||||
|
import { BasicForm, useForm } from '@/components/Form' |
||||||
|
import { basicInfoSchemas } from './data' |
||||||
|
|
||||||
|
import { Divider } from 'ant-design-vue' |
||||||
|
const emit = defineEmits(['next']) |
||||||
|
const [register, { validate }] = useForm({ |
||||||
|
labelWidth: 120, |
||||||
|
schemas: basicInfoSchemas, |
||||||
|
actionColOptions: { |
||||||
|
span: 14 |
||||||
|
}, |
||||||
|
showResetButton: false, |
||||||
|
submitButtonOptions: { |
||||||
|
text: '下一步' |
||||||
|
}, |
||||||
|
submitFunc: customSubmitFunc |
||||||
|
}) |
||||||
|
|
||||||
|
async function customSubmitFunc() { |
||||||
|
try { |
||||||
|
const values = await validate() |
||||||
|
emit('next', values) |
||||||
|
} catch (error) {} |
||||||
|
} |
||||||
|
</script> |
||||||
|
<style lang="less" scoped> |
||||||
|
.step3 { |
||||||
|
&-form { |
||||||
|
width: 450px; |
||||||
|
margin: 0 auto; |
||||||
|
} |
||||||
|
|
||||||
|
h3 { |
||||||
|
margin: 0 0 12px; |
||||||
|
font-size: 16px; |
||||||
|
line-height: 32px; |
||||||
|
color: @text-color; |
||||||
|
} |
||||||
|
|
||||||
|
h4 { |
||||||
|
margin: 0 0 4px; |
||||||
|
font-size: 14px; |
||||||
|
line-height: 22px; |
||||||
|
color: @text-color; |
||||||
|
} |
||||||
|
|
||||||
|
p { |
||||||
|
color: @text-color; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.pay-select { |
||||||
|
width: 20%; |
||||||
|
} |
||||||
|
|
||||||
|
.pay-input { |
||||||
|
width: 70%; |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,78 @@ |
|||||||
|
<template> |
||||||
|
<div class="step2"> |
||||||
|
<div class="step2-form"> |
||||||
|
<BasicForm @register="register" /> |
||||||
|
</div> |
||||||
|
<Divider /> |
||||||
|
<h3>说明</h3> |
||||||
|
<h4>转账到支付宝账户</h4> |
||||||
|
<p> |
||||||
|
如果需要,这里可以放一些关于产品的常见问题说明。如果需要,这里可以放一些关于产品的常见问题说明。如果需要,这里可以放一些关于产品的常见问题说明。 |
||||||
|
</p> |
||||||
|
|
||||||
|
<h4>转账到银行卡</h4> |
||||||
|
<p> |
||||||
|
如果需要,这里可以放一些关于产品的常见问题说明。如果需要,这里可以放一些关于产品的常见问题说明。如果需要,这里可以放一些关于产品的常见问题说明。 |
||||||
|
</p> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<script lang="ts" setup> |
||||||
|
import { BasicForm, useForm } from '@/components/Form' |
||||||
|
import { genInfoSchemas } from './data' |
||||||
|
|
||||||
|
import { Divider } from 'ant-design-vue' |
||||||
|
const emit = defineEmits(['next']) |
||||||
|
const [register, { validate }] = useForm({ |
||||||
|
labelWidth: 120, |
||||||
|
schemas: genInfoSchemas, |
||||||
|
actionColOptions: { |
||||||
|
span: 14 |
||||||
|
}, |
||||||
|
showResetButton: false, |
||||||
|
submitButtonOptions: { |
||||||
|
text: '下一步' |
||||||
|
}, |
||||||
|
submitFunc: customSubmitFunc |
||||||
|
}) |
||||||
|
|
||||||
|
async function customSubmitFunc() { |
||||||
|
try { |
||||||
|
const values = await validate() |
||||||
|
emit('next', values) |
||||||
|
} catch (error) {} |
||||||
|
} |
||||||
|
</script> |
||||||
|
<style lang="less" scoped> |
||||||
|
.step2 { |
||||||
|
&-form { |
||||||
|
width: 450px; |
||||||
|
margin: 0 auto; |
||||||
|
} |
||||||
|
|
||||||
|
h3 { |
||||||
|
margin: 0 0 12px; |
||||||
|
font-size: 16px; |
||||||
|
line-height: 32px; |
||||||
|
color: @text-color; |
||||||
|
} |
||||||
|
|
||||||
|
h4 { |
||||||
|
margin: 0 0 4px; |
||||||
|
font-size: 14px; |
||||||
|
line-height: 22px; |
||||||
|
color: @text-color; |
||||||
|
} |
||||||
|
|
||||||
|
p { |
||||||
|
color: @text-color; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.pay-select { |
||||||
|
width: 20%; |
||||||
|
} |
||||||
|
|
||||||
|
.pay-input { |
||||||
|
width: 70%; |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,121 @@ |
|||||||
|
import { listSimpleMenus } from '@/api/system/menu' |
||||||
|
import { FormSchema } from '@/components/Form' |
||||||
|
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict' |
||||||
|
|
||||||
|
export const basicInfoSchemas: FormSchema[] = [ |
||||||
|
{ |
||||||
|
label: '表名称', |
||||||
|
field: 'tableName', |
||||||
|
required: true, |
||||||
|
component: 'Input', |
||||||
|
colProps: { span: 24 } |
||||||
|
}, |
||||||
|
{ |
||||||
|
label: '表描述', |
||||||
|
field: 'tableComment', |
||||||
|
required: true, |
||||||
|
component: 'Input', |
||||||
|
colProps: { span: 24 } |
||||||
|
}, |
||||||
|
{ |
||||||
|
label: '实体类名称', |
||||||
|
field: 'className', |
||||||
|
required: true, |
||||||
|
helpMessage: '默认去除表名的前缀。如果存在重复,则需要手动添加前缀,避免 MyBatis 报 Alias 重复的问题。', |
||||||
|
component: 'Input', |
||||||
|
colProps: { span: 24 } |
||||||
|
}, |
||||||
|
{ |
||||||
|
label: '作者', |
||||||
|
field: 'author', |
||||||
|
required: true, |
||||||
|
component: 'Input', |
||||||
|
colProps: { span: 24 } |
||||||
|
}, |
||||||
|
{ |
||||||
|
label: '备注', |
||||||
|
field: 'remark', |
||||||
|
component: 'InputTextArea', |
||||||
|
colProps: { span: 24 } |
||||||
|
} |
||||||
|
] |
||||||
|
|
||||||
|
export const genInfoSchemas: FormSchema[] = [ |
||||||
|
{ |
||||||
|
label: '生成模板', |
||||||
|
field: 'templateType', |
||||||
|
required: true, |
||||||
|
component: 'Select', |
||||||
|
componentProps: { |
||||||
|
options: getIntDictOptions(DICT_TYPE.INFRA_CODEGEN_TEMPLATE_TYPE) |
||||||
|
}, |
||||||
|
colProps: { span: 24 } |
||||||
|
}, |
||||||
|
{ |
||||||
|
label: '生成场景', |
||||||
|
field: 'scene', |
||||||
|
required: true, |
||||||
|
component: 'Select', |
||||||
|
componentProps: { |
||||||
|
options: getIntDictOptions(DICT_TYPE.INFRA_CODEGEN_SCENE) |
||||||
|
}, |
||||||
|
colProps: { span: 24 } |
||||||
|
}, |
||||||
|
{ |
||||||
|
label: '模块名', |
||||||
|
field: 'moduleName', |
||||||
|
required: true, |
||||||
|
helpMessage: '模块名,即一级目录,例如 system、infra、tool 等等', |
||||||
|
component: 'Input', |
||||||
|
colProps: { span: 24 } |
||||||
|
}, |
||||||
|
{ |
||||||
|
label: '业务名', |
||||||
|
field: 'businessName', |
||||||
|
required: true, |
||||||
|
component: 'Input', |
||||||
|
helpMessage: '业务名,即二级目录,例如 user、permission、dict 等等', |
||||||
|
colProps: { span: 24 } |
||||||
|
}, |
||||||
|
{ |
||||||
|
label: '类名称', |
||||||
|
field: 'className', |
||||||
|
required: true, |
||||||
|
component: 'Input', |
||||||
|
helpMessage: '类名称(首字母大写),例如SysUser、SysMenu、SysDictData 等等', |
||||||
|
colProps: { span: 24 } |
||||||
|
}, |
||||||
|
{ |
||||||
|
label: '类描述', |
||||||
|
field: 'classComment', |
||||||
|
required: true, |
||||||
|
component: 'Input', |
||||||
|
helpMessage: '用作类描述,例如 用户', |
||||||
|
colProps: { span: 24 } |
||||||
|
}, |
||||||
|
{ |
||||||
|
label: '上级菜单', |
||||||
|
field: 'parentMenuId', |
||||||
|
required: true, |
||||||
|
component: 'ApiTreeSelect', |
||||||
|
componentProps: { |
||||||
|
api: () => listSimpleMenus(), |
||||||
|
fieldNames: { |
||||||
|
label: 'name', |
||||||
|
key: 'id', |
||||||
|
value: 'id' |
||||||
|
}, |
||||||
|
handleTree: 'id' |
||||||
|
}, |
||||||
|
colProps: { span: 24 } |
||||||
|
}, |
||||||
|
{ |
||||||
|
label: '自定义路径', |
||||||
|
field: 'genPath', |
||||||
|
component: 'Input', |
||||||
|
helpMessage: '填写磁盘绝对路径,若不填写,则生成到当前Web项目下', |
||||||
|
defaultValue: '/', |
||||||
|
ifShow: ({ values }) => values.genType === '1', |
||||||
|
colProps: { span: 24 } |
||||||
|
} |
||||||
|
] |
Reference in new issue