create.vue 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <template>
  2. <el-form :model="formData" label-width="120px" ref="form" v-loading="loading" class="pr-4">
  3. <el-form-item
  4. :label="$t('module.form.name.title')"
  5. prop="title"
  6. :rules="[
  7. {
  8. required: true,
  9. message: $t('module.form.name.required'),
  10. },
  11. ]"
  12. >
  13. <el-input v-model="formData.title" />
  14. </el-form-item>
  15. <el-form-item
  16. :label="$t('module.form.path.title')"
  17. prop="path"
  18. :rules="[
  19. {
  20. required: true,
  21. message: $t('module.form.path.required'),
  22. },
  23. ]"
  24. >
  25. <el-input v-model="formData.path" :disabled="!!primary" />
  26. </el-form-item>
  27. <el-form-item :label="$t('module.form.keywords.title')" prop="keywords">
  28. <el-input v-model="formData.keywords" />
  29. </el-form-item>
  30. <el-form-item :label="$t('module.form.desc.title')" prop="desc">
  31. <el-input v-model="formData.description" type="textarea" />
  32. </el-form-item>
  33. <el-form-item :label="$t('module.form.dirs.title')" prop="dirs" v-if="!primary">
  34. <el-checkbox v-model="formData['dirs']['controllers']" label="Controllers" size="large" />
  35. <el-checkbox v-model="formData['dirs']['models']" label="Models" size="large" />
  36. <el-checkbox v-model="formData['dirs']['database']" label="Database" size="large" />
  37. <el-checkbox v-model="formData['dirs']['requests']" label="Requests" size="large" />
  38. </el-form-item>
  39. <div class="flex justify-end">
  40. <el-button type="primary" @click="submitForm(form)">{{ $t('system.confirm') }}</el-button>
  41. </div>
  42. </el-form>
  43. </template>
  44. <script lang="ts" setup>
  45. import {useCreate} from '/admin/composables/curd/useCreate'
  46. import {useShow} from '/admin/composables/curd/useShow'
  47. import {onMounted} from 'vue'
  48. const props = defineProps({
  49. primary: String | Number,
  50. api: String,
  51. })
  52. const { formData, form, loading, submitForm, close } = useCreate(
  53. props.api,
  54. props.primary,
  55. Object.assign({
  56. title: '',
  57. path: '',
  58. keywords: '',
  59. description: '',
  60. dirs: {
  61. controllers: true,
  62. models: true,
  63. database: true,
  64. requests: false,
  65. },
  66. }),
  67. )
  68. const emit = defineEmits(['close'])
  69. if (props.primary) {
  70. useShow(props.api, props.primary, formData)
  71. }
  72. onMounted(() => {
  73. close(() => emit('close'))
  74. })
  75. </script>