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