feat: basicInfo codegen
							parent
							
								
									6e27639bb9
								
							
						
					
					
						commit
						0d58b2bf8d
					
				|  | @ -1,8 +1,7 @@ | ||||||
| <template> | <template> | ||||||
|   <PageWrapper> |   <PageWrapper> | ||||||
|     <div class="m-5 w-200"> |     <div class="m-0-auto w-200"> | ||||||
|       <Steps :current="current"> |       <Steps :current="current"> | ||||||
|         <Step title="基本信息" /> |  | ||||||
|         <Step title="生成信息" /> |         <Step title="生成信息" /> | ||||||
|         <Step title="字段信息" /> |         <Step title="字段信息" /> | ||||||
|         <Step title="完成" /> |         <Step title="完成" /> | ||||||
|  | @ -10,32 +9,50 @@ | ||||||
|     </div> |     </div> | ||||||
| 
 | 
 | ||||||
|     <div class="m-5"> |     <div class="m-5"> | ||||||
|       <BasicInfoForm @next="handleStep1Next" v-show="current === 0" /> |       <BasicInfoForm :basicInfo="basicInfo" @next="handleStep1Next" v-show="current === 0" /> | ||||||
|       <GenInfoForm @prev="handleStepPrev" @next="handleStep2Next" v-show="current === 1" v-if="state.initSetp2" /> |       <CloumInfoForm | ||||||
|       <CloumInfoForm v-show="current === 2" @redo="handleRedo" v-if="state.initSetp3" /> |         :columnsInfo="columnsInfo" | ||||||
|       <span v-show="current === 4">1234</span> |         @prev="handleStepPrev" | ||||||
|  |         @next="handleStep2Next" | ||||||
|  |         v-show="current === 1" | ||||||
|  |         v-if="state.initSetp2" | ||||||
|  |       /> | ||||||
|  |       <FinishForm v-show="current === 2" @redo="handleRedo" v-if="state.initSetp3" /> | ||||||
|     </div> |     </div> | ||||||
|   </PageWrapper> |   </PageWrapper> | ||||||
| </template> | </template> | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { ref, reactive } from 'vue' | import { ref, reactive, onMounted } from 'vue' | ||||||
| import { Steps } from 'ant-design-vue' | import { Steps } from 'ant-design-vue' | ||||||
| import { PageWrapper } from '@/components/Page' | import { PageWrapper } from '@/components/Page' | ||||||
| import BasicInfoForm from './components/BasicInfoForm.vue' | import BasicInfoForm from './components/BasicInfoForm.vue' | ||||||
| import CloumInfoForm from './components/CloumInfoForm.vue' | import CloumInfoForm from './components/CloumInfoForm.vue' | ||||||
| import GenInfoForm from './components/GenInfoForm.vue' | import FinishForm from './components/FinishForm.vue' | ||||||
|  | import { useRoute } from 'vue-router' | ||||||
|  | import { getCodegenTable } from '@/api/infra/codegen' | ||||||
| 
 | 
 | ||||||
| const Step = Steps.Step | const Step = Steps.Step | ||||||
| 
 | 
 | ||||||
|  | const { query } = useRoute() | ||||||
|  | 
 | ||||||
|  | // 表详细信息 | ||||||
|  | const basicInfo = ref<any>() | ||||||
|  | // 表列信息 | ||||||
|  | const columnsInfo = ref<any[]>([]) | ||||||
|  | 
 | ||||||
|  | const basicInfoValue = ref() | ||||||
|  | 
 | ||||||
| const current = ref(0) | const current = ref(0) | ||||||
| const state = reactive({ | const state = reactive({ | ||||||
|   initSetp2: false, |   initSetp2: false, | ||||||
|   initSetp3: false |   initSetp3: false | ||||||
| }) | }) | ||||||
|  | 
 | ||||||
| function handleStep1Next(step1Values: any) { | function handleStep1Next(step1Values: any) { | ||||||
|   current.value++ |   current.value++ | ||||||
|   state.initSetp2 = true |   state.initSetp2 = true | ||||||
|   console.log(step1Values) |   basicInfoValue.value = step1Values | ||||||
|  |   console.info(step1Values) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function handleStepPrev() { | function handleStepPrev() { | ||||||
|  | @ -53,4 +70,15 @@ function handleRedo() { | ||||||
|   state.initSetp2 = false |   state.initSetp2 = false | ||||||
|   state.initSetp3 = false |   state.initSetp3 = false | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | async function getList() { | ||||||
|  |   const tableId = query.id as unknown as number | ||||||
|  |   const res = await getCodegenTable(tableId) | ||||||
|  |   basicInfo.value = res.table | ||||||
|  |   columnsInfo.value = res.columns | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | onMounted(async () => { | ||||||
|  |   await getList() | ||||||
|  | }) | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
|  | @ -19,10 +19,20 @@ | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { BasicForm, useForm } from '@/components/Form' | import { BasicForm, useForm } from '@/components/Form' | ||||||
| import { basicInfoSchemas } from './data' | import { basicInfoSchemas } from './data' | ||||||
| 
 |  | ||||||
| import { Divider } from 'ant-design-vue' | import { Divider } from 'ant-design-vue' | ||||||
|  | import { watch } from 'vue' | ||||||
|  | import { CodegenTableVO } from '@/api/infra/codegen/types' | ||||||
|  | 
 | ||||||
| const emit = defineEmits(['next']) | const emit = defineEmits(['next']) | ||||||
| const [register, { validate }] = useForm({ | 
 | ||||||
|  | const props = defineProps({ | ||||||
|  |   basicInfo: { | ||||||
|  |     type: Object as PropType<Nullable<CodegenTableVO>>, | ||||||
|  |     default: () => null | ||||||
|  |   } | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | const [register, { setFieldsValue, resetFields, validate }] = useForm({ | ||||||
|   labelWidth: 120, |   labelWidth: 120, | ||||||
|   schemas: basicInfoSchemas, |   schemas: basicInfoSchemas, | ||||||
|   actionColOptions: { |   actionColOptions: { | ||||||
|  | @ -41,11 +51,24 @@ async function customSubmitFunc() { | ||||||
|     emit('next', values) |     emit('next', values) | ||||||
|   } catch (error) {} |   } catch (error) {} | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | watch( | ||||||
|  |   () => props.basicInfo, | ||||||
|  |   (basicInfo) => { | ||||||
|  |     if (!basicInfo) return | ||||||
|  |     resetFields() | ||||||
|  |     setFieldsValue({ ...basicInfo }) | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     deep: true, | ||||||
|  |     immediate: true | ||||||
|  |   } | ||||||
|  | ) | ||||||
| </script> | </script> | ||||||
| <style lang="less" scoped> | <style lang="less" scoped> | ||||||
| .step1 { | .step1 { | ||||||
|   &-form { |   &-form { | ||||||
|     width: 450px; |     width: 80%; | ||||||
|     margin: 0 auto; |     margin: 0 auto; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| <template> | <template> | ||||||
|   <div class="step3"> |   <div class="step2"> | ||||||
|     <div class="step3-form"> |     <div class="step2-form"> | ||||||
|       <BasicForm @register="register" /> |       <BasicForm @register="register" /> | ||||||
|     </div> |     </div> | ||||||
|     <Divider /> |     <Divider /> | ||||||
|  | @ -19,22 +19,30 @@ | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { BasicForm, useForm } from '@/components/Form' | import { BasicForm, useForm } from '@/components/Form' | ||||||
| import { basicInfoSchemas } from './data' | import { basicInfoSchemas } from './data' | ||||||
| 
 |  | ||||||
| import { Divider } from 'ant-design-vue' | import { Divider } from 'ant-design-vue' | ||||||
| const emit = defineEmits(['next']) | 
 | ||||||
|  | const emit = defineEmits(['next', 'prev']) | ||||||
|  | 
 | ||||||
| const [register, { validate }] = useForm({ | const [register, { validate }] = useForm({ | ||||||
|   labelWidth: 120, |   labelWidth: 120, | ||||||
|   schemas: basicInfoSchemas, |   schemas: basicInfoSchemas, | ||||||
|   actionColOptions: { |   actionColOptions: { | ||||||
|     span: 14 |     span: 14 | ||||||
|   }, |   }, | ||||||
|   showResetButton: false, |   resetButtonOptions: { | ||||||
|  |     text: '上一步' | ||||||
|  |   }, | ||||||
|   submitButtonOptions: { |   submitButtonOptions: { | ||||||
|     text: '下一步' |     text: '下一步' | ||||||
|   }, |   }, | ||||||
|  |   resetFunc: customResetFunc, | ||||||
|   submitFunc: customSubmitFunc |   submitFunc: customSubmitFunc | ||||||
| }) | }) | ||||||
| 
 | 
 | ||||||
|  | async function customResetFunc() { | ||||||
|  |   emit('prev') | ||||||
|  | } | ||||||
|  | 
 | ||||||
| async function customSubmitFunc() { | async function customSubmitFunc() { | ||||||
|   try { |   try { | ||||||
|     const values = await validate() |     const values = await validate() | ||||||
|  | @ -43,7 +51,7 @@ async function customSubmitFunc() { | ||||||
| } | } | ||||||
| </script> | </script> | ||||||
| <style lang="less" scoped> | <style lang="less" scoped> | ||||||
| .step3 { | .step2 { | ||||||
|   &-form { |   &-form { | ||||||
|     width: 450px; |     width: 450px; | ||||||
|     margin: 0 auto; |     margin: 0 auto; | ||||||
|  |  | ||||||
|  | @ -0,0 +1 @@ | ||||||
|  | <template><span>123</span></template> | ||||||
|  | @ -1,78 +0,0 @@ | ||||||
| <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> |  | ||||||
|  | @ -3,19 +3,25 @@ import { FormSchema } from '@/components/Form' | ||||||
| import { getIntDictOptions, DICT_TYPE } from '@/utils/dict' | import { getIntDictOptions, DICT_TYPE } from '@/utils/dict' | ||||||
| 
 | 
 | ||||||
| export const basicInfoSchemas: FormSchema[] = [ | export const basicInfoSchemas: FormSchema[] = [ | ||||||
|  |   { | ||||||
|  |     label: '基本信息', | ||||||
|  |     field: 'basicInfo', | ||||||
|  |     component: 'Divider', | ||||||
|  |     colProps: { span: 24 } | ||||||
|  |   }, | ||||||
|   { |   { | ||||||
|     label: '表名称', |     label: '表名称', | ||||||
|     field: 'tableName', |     field: 'tableName', | ||||||
|     required: true, |     required: true, | ||||||
|     component: 'Input', |     component: 'Input', | ||||||
|     colProps: { span: 24 } |     colProps: { span: 12 } | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     label: '表描述', |     label: '表描述', | ||||||
|     field: 'tableComment', |     field: 'tableComment', | ||||||
|     required: true, |     required: true, | ||||||
|     component: 'Input', |     component: 'Input', | ||||||
|     colProps: { span: 24 } |     colProps: { span: 12 } | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     label: '实体类名称', |     label: '实体类名称', | ||||||
|  | @ -23,24 +29,21 @@ export const basicInfoSchemas: FormSchema[] = [ | ||||||
|     required: true, |     required: true, | ||||||
|     helpMessage: '默认去除表名的前缀。如果存在重复,则需要手动添加前缀,避免 MyBatis 报 Alias 重复的问题。', |     helpMessage: '默认去除表名的前缀。如果存在重复,则需要手动添加前缀,避免 MyBatis 报 Alias 重复的问题。', | ||||||
|     component: 'Input', |     component: 'Input', | ||||||
|     colProps: { span: 24 } |     colProps: { span: 12 } | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     label: '作者', |     label: '作者', | ||||||
|     field: 'author', |     field: 'author', | ||||||
|     required: true, |     required: true, | ||||||
|     component: 'Input', |     component: 'Input', | ||||||
|     colProps: { span: 24 } |     colProps: { span: 12 } | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     label: '备注', |     label: '生成信息', | ||||||
|     field: 'remark', |     field: 'genInfo', | ||||||
|     component: 'InputTextArea', |     component: 'Divider', | ||||||
|     colProps: { span: 24 } |     colProps: { span: 24 } | ||||||
|   } |   }, | ||||||
| ] |  | ||||||
| 
 |  | ||||||
| export const genInfoSchemas: FormSchema[] = [ |  | ||||||
|   { |   { | ||||||
|     label: '生成模板', |     label: '生成模板', | ||||||
|     field: 'templateType', |     field: 'templateType', | ||||||
|  | @ -49,7 +52,7 @@ export const genInfoSchemas: FormSchema[] = [ | ||||||
|     componentProps: { |     componentProps: { | ||||||
|       options: getIntDictOptions(DICT_TYPE.INFRA_CODEGEN_TEMPLATE_TYPE) |       options: getIntDictOptions(DICT_TYPE.INFRA_CODEGEN_TEMPLATE_TYPE) | ||||||
|     }, |     }, | ||||||
|     colProps: { span: 24 } |     colProps: { span: 12 } | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     label: '生成场景', |     label: '生成场景', | ||||||
|  | @ -59,7 +62,7 @@ export const genInfoSchemas: FormSchema[] = [ | ||||||
|     componentProps: { |     componentProps: { | ||||||
|       options: getIntDictOptions(DICT_TYPE.INFRA_CODEGEN_SCENE) |       options: getIntDictOptions(DICT_TYPE.INFRA_CODEGEN_SCENE) | ||||||
|     }, |     }, | ||||||
|     colProps: { span: 24 } |     colProps: { span: 12 } | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     label: '模块名', |     label: '模块名', | ||||||
|  | @ -67,7 +70,7 @@ export const genInfoSchemas: FormSchema[] = [ | ||||||
|     required: true, |     required: true, | ||||||
|     helpMessage: '模块名,即一级目录,例如 system、infra、tool 等等', |     helpMessage: '模块名,即一级目录,例如 system、infra、tool 等等', | ||||||
|     component: 'Input', |     component: 'Input', | ||||||
|     colProps: { span: 24 } |     colProps: { span: 12 } | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     label: '业务名', |     label: '业务名', | ||||||
|  | @ -75,7 +78,7 @@ export const genInfoSchemas: FormSchema[] = [ | ||||||
|     required: true, |     required: true, | ||||||
|     component: 'Input', |     component: 'Input', | ||||||
|     helpMessage: '业务名,即二级目录,例如 user、permission、dict 等等', |     helpMessage: '业务名,即二级目录,例如 user、permission、dict 等等', | ||||||
|     colProps: { span: 24 } |     colProps: { span: 12 } | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     label: '类名称', |     label: '类名称', | ||||||
|  | @ -83,7 +86,7 @@ export const genInfoSchemas: FormSchema[] = [ | ||||||
|     required: true, |     required: true, | ||||||
|     component: 'Input', |     component: 'Input', | ||||||
|     helpMessage: '类名称(首字母大写),例如SysUser、SysMenu、SysDictData 等等', |     helpMessage: '类名称(首字母大写),例如SysUser、SysMenu、SysDictData 等等', | ||||||
|     colProps: { span: 24 } |     colProps: { span: 12 } | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     label: '类描述', |     label: '类描述', | ||||||
|  | @ -91,7 +94,7 @@ export const genInfoSchemas: FormSchema[] = [ | ||||||
|     required: true, |     required: true, | ||||||
|     component: 'Input', |     component: 'Input', | ||||||
|     helpMessage: '用作类描述,例如 用户', |     helpMessage: '用作类描述,例如 用户', | ||||||
|     colProps: { span: 24 } |     colProps: { span: 12 } | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     label: '上级菜单', |     label: '上级菜单', | ||||||
|  | @ -107,7 +110,7 @@ export const genInfoSchemas: FormSchema[] = [ | ||||||
|       }, |       }, | ||||||
|       handleTree: 'id' |       handleTree: 'id' | ||||||
|     }, |     }, | ||||||
|     colProps: { span: 24 } |     colProps: { span: 12 } | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     label: '自定义路径', |     label: '自定义路径', | ||||||
|  | @ -116,6 +119,12 @@ export const genInfoSchemas: FormSchema[] = [ | ||||||
|     helpMessage: '填写磁盘绝对路径,若不填写,则生成到当前Web项目下', |     helpMessage: '填写磁盘绝对路径,若不填写,则生成到当前Web项目下', | ||||||
|     defaultValue: '/', |     defaultValue: '/', | ||||||
|     ifShow: ({ values }) => values.genType === '1', |     ifShow: ({ values }) => values.genType === '1', | ||||||
|  |     colProps: { span: 12 } | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     label: '备注', | ||||||
|  |     field: 'remark', | ||||||
|  |     component: 'InputTextArea', | ||||||
|     colProps: { span: 24 } |     colProps: { span: 24 } | ||||||
|   } |   } | ||||||
| ] | ] | ||||||
|  |  | ||||||
|  | @ -9,7 +9,7 @@ | ||||||
|           <TableAction |           <TableAction | ||||||
|             :actions="[ |             :actions="[ | ||||||
|               { icon: IconEnum.EDIT, label: '预览', onClick: handlePreview.bind(null, record) }, |               { icon: IconEnum.EDIT, label: '预览', onClick: handlePreview.bind(null, record) }, | ||||||
|               { icon: IconEnum.EDIT, label: t('action.edit'), onClick: handleEdit.bind(null) }, |               { icon: IconEnum.EDIT, label: t('action.edit'), onClick: handleEditTable.bind(null, record) }, | ||||||
|               { icon: IconEnum.DOWNLOAD, label: '生成', onClick: handleGenTable.bind(null, record) }, |               { icon: IconEnum.DOWNLOAD, label: '生成', onClick: handleGenTable.bind(null, record) }, | ||||||
|               { |               { | ||||||
|                 icon: IconEnum.RESET, |                 icon: IconEnum.RESET, | ||||||
|  | @ -82,8 +82,8 @@ function handlePreview(record: Recordable) { | ||||||
|   }) |   }) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function handleEdit() { | function handleEditTable(record: Recordable) { | ||||||
|   go('/codegen/editTable') |   go('/codegen/editTable?id=' + record.id) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| async function handleGenTable(record: Recordable) { | async function handleGenTable(record: Recordable) { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 xingyu
						xingyu