codeGen.vue 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <template>
  2. <el-card class="box-card" shadow="never">
  3. <template #header>
  4. <div>
  5. <span>{{ $t('generate.code.title') }}</span>
  6. </div>
  7. </template>
  8. <div class="w-full sm:w-[40%] mx-auto">
  9. <el-form :model="gen" ref="form" label-width="100px">
  10. <el-form-item
  11. :label="$t('generate.code.module.name')"
  12. prop="module"
  13. :rules="[
  14. {
  15. required: true,
  16. message: $t('generate.code.module.verify'),
  17. },
  18. ]"
  19. >
  20. <Select v-model="gen.module" clearable :placeholder="$t('generate.code.module.placeholder')" api="modules" class="w-full" filterable />
  21. </el-form-item>
  22. <el-form-item
  23. :label="$t('generate.code.controller.name')"
  24. prop="controller"
  25. :rules="[
  26. {
  27. required: true,
  28. message: $t('generate.code.controller.verify'),
  29. },
  30. ]"
  31. >
  32. <el-input v-model="gen.controller" clearable :placeholder="$t('generate.code.controller.placeholder')" />
  33. </el-form-item>
  34. <el-form-item :label="$t('generate.code.model.name')" prop="model">
  35. <el-input v-model="gen.model" clearable :placeholder="$t('generate.code.model.placeholder')" />
  36. </el-form-item>
  37. <div class="flex">
  38. <el-form-item :label="$t('generate.code.paginate')" prop="paginate">
  39. <el-switch v-model="gen.paginate" inline-prompt :active-text="$t('system.yes')" :inactive-text="$t('system.no')" />
  40. </el-form-item>
  41. <el-form-item label-width="15px">
  42. <div class="text-sm text-gray-300">控制列表是否使用分页功能</div>
  43. </el-form-item>
  44. </div>
  45. </el-form>
  46. </div>
  47. <Structure />
  48. <div class="w-full flex justify-center pt-5">
  49. <router-link to="/develop/schemas">
  50. <el-button>{{ $t('system.back') }}</el-button>
  51. </router-link>
  52. <el-button type="primary" @click="submitGenerate(form)" class="ml-5">{{ $t('system.finish') }}</el-button>
  53. </div>
  54. </el-card>
  55. </template>
  56. <script lang="ts" setup>
  57. import {onMounted, reactive, ref} from 'vue'
  58. import {useGenerateStore} from './store'
  59. import type {FormInstance} from 'element-plus'
  60. import http from '/admin/support/http'
  61. import Structure from './structure.vue'
  62. import {useRouter} from 'vue-router'
  63. const generateStore = useGenerateStore()
  64. const gen = reactive(generateStore.getCodeGen)
  65. const router = useRouter()
  66. const schemaId = router.currentRoute.value.params.schema
  67. onMounted(() => {
  68. if (!generateStore.getSchemaId) {
  69. generateStore.setSchemaId(schemaId)
  70. getSchema()
  71. } else {
  72. if (schemaId !== generateStore.getSchemaId) {
  73. generateStore.setSchemaId(schemaId)
  74. generateStore.resetStructures()
  75. getSchema()
  76. }
  77. }
  78. })
  79. const getSchema = () => {
  80. http.get('schema/' + schemaId).then(r => {
  81. gen.module = r.data.data.module
  82. gen.schema = r.data.data.name
  83. gen.model = r.data.data.name.replace(/\_(\w)/g, (value, letter) => {
  84. return letter.toUpperCase()
  85. })
  86. generateStore.initStructures(r.data.data.columns)
  87. })
  88. }
  89. const form = ref<FormInstance>()
  90. const submitGenerate = (formEl: FormInstance | undefined) => {
  91. if (!formEl) return
  92. formEl.validate(valid => {
  93. if (valid) {
  94. http.post('generate', generateStore.$state).then(r => {})
  95. //emits('next')
  96. //generateStore.$reset()
  97. } else {
  98. return false
  99. }
  100. })
  101. }
  102. </script>