schema.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <template>
  2. <div class="w-full sm:w-[90%] mx-auto">
  3. <el-form :model="schema" ref="form" label-width="80px">
  4. <el-form-item
  5. :label="$t('generate.code.module.name')"
  6. prop="module"
  7. :rules="[
  8. {
  9. // required: true,
  10. message: $t('generate.code.module.verify'),
  11. },
  12. ]"
  13. >
  14. <Select v-model="schema.module" clearable :placeholder="$t('generate.code.module.placeholder')" api="modules" class="w-full" filterable />
  15. </el-form-item>
  16. <el-form-item
  17. :label="$t('generate.schema.name')"
  18. prop="name"
  19. :rules="[
  20. {
  21. required: true,
  22. message: $t('generate.schema.name_verify'),
  23. },
  24. ]"
  25. >
  26. <el-input v-model="schema.name" clearable />
  27. </el-form-item>
  28. <el-form-item
  29. :label="$t('generate.schema.engine.name')"
  30. prop="engine"
  31. :rules="[
  32. {
  33. required: true,
  34. message: $t('generate.schema.engine.verify'),
  35. },
  36. ]"
  37. >
  38. <el-select class="w-full" v-model="schema.engine" :placeholder="$t('generate.schema.engine.placeholder')" clearable>
  39. <el-option v-for="engine in engines" :key="engine.value" :label="engine.label" :value="engine.value" />
  40. </el-select>
  41. </el-form-item>
  42. <el-form-item :label="$t('generate.schema.default_field.name')">
  43. <el-checkbox v-model="schema.created_at" :label="$t('generate.schema.default_field.created_at')" size="large" />
  44. <el-checkbox v-model="schema.updated_at" :label="$t('generate.schema.default_field.updated_at')" size="large" />
  45. <el-checkbox v-model="schema.creator_id" :label="$t('generate.schema.default_field.creator')" size="large" />
  46. <el-checkbox v-model="schema.deleted_at" :label="$t('generate.schema.default_field.delete_at')" size="large" />
  47. </el-form-item>
  48. <el-form-item
  49. :label="$t('generate.schema.comment.name')"
  50. prop="comment"
  51. :rules="[
  52. {
  53. required: true,
  54. message: $t('generate.schema.comment.verify'),
  55. },
  56. ]"
  57. >
  58. <el-input v-model="schema.comment" type="textarea" />
  59. </el-form-item>
  60. </el-form>
  61. <div class="w-full sm:w-96 justify-between mx-auto pl-24 mt-4">
  62. <el-button class="mt-5" @click="$emit('prev')">{{ $t('system.prev') }}</el-button>
  63. <el-button class="mt-5" type="primary" @click="submitCreateTable(form)">{{ $t('system.next') }}</el-button>
  64. </div>
  65. </div>
  66. </template>
  67. <script lang="ts" setup>
  68. import {computed, ref, unref} from 'vue'
  69. import {useSchemaStore} from '../store'
  70. import type {FormInstance} from 'element-plus'
  71. const schemaStore = useSchemaStore()
  72. schemaStore.start()
  73. const emits = defineEmits(['prev', 'next'])
  74. const schema = ref(schemaStore.getSchema)
  75. const form = ref<FormInstance>()
  76. const submitCreateTable = (formEl: FormInstance | undefined) => {
  77. if (!formEl) return
  78. formEl.validate(valid => {
  79. if (valid) {
  80. emits('next')
  81. schemaStore.setSchema(unref(schema))
  82. } else {
  83. return false
  84. }
  85. })
  86. }
  87. const engines = computed(() => {
  88. return [
  89. {
  90. value: 'InnoDB',
  91. label: 'InnoDB',
  92. },
  93. {
  94. value: 'MyISAM',
  95. label: 'MyISAM',
  96. },
  97. {
  98. value: 'Memory',
  99. label: 'Memory',
  100. },
  101. ]
  102. })
  103. </script>