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