form.hbs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <script lang="ts" setup>
  2. import type { FormInstance, FormRules } from 'element-plus'
  3. import { ElMessage } from 'element-plus'
  4. import api from '@/api'
  5. const props = defineProps({
  6. id: {
  7. type: [Number, String],
  8. default: '',
  9. },
  10. })
  11. const loading = ref(false)
  12. const formRef = ref<FormInstance>()
  13. const form = ref({
  14. id: props.id,
  15. title: '',
  16. })
  17. const formRules = ref<FormRules>({
  18. title: [
  19. { required: true, message: '请输入标题', trigger: 'blur' },
  20. ],
  21. })
  22. onMounted(() => {
  23. if (form.value.id !== '') {
  24. getInfo()
  25. }
  26. })
  27. function getInfo() {
  28. loading.value = true
  29. api.get('{{#if relativePath}}{{ relativePath }}/{{/if}}{{ snakeCase moduleName }}/detail', {
  30. baseURL: '/mock/',
  31. params: {
  32. id: form.value.id,
  33. },
  34. }).then((res: any) => {
  35. loading.value = false
  36. form.value.title = res.data.title
  37. })
  38. }
  39. defineExpose({
  40. submit() {
  41. return new Promise<void>((resolve) => {
  42. if (form.value.id === '') {
  43. formRef.value && formRef.value.validate((valid) => {
  44. if (valid) {
  45. api.post('{{#if relativePath}}{{ relativePath }}/{{/if}}{{ snakeCase moduleName }}/create', form.value, {
  46. baseURL: '/mock/',
  47. }).then(() => {
  48. ElMessage.success({
  49. message: '模拟新增成功',
  50. center: true,
  51. })
  52. resolve()
  53. })
  54. }
  55. })
  56. }
  57. else {
  58. formRef.value && formRef.value.validate((valid) => {
  59. if (valid) {
  60. api.post('{{#if relativePath}}{{ relativePath }}/{{/if}}{{ snakeCase moduleName }}/edit', form.value, {
  61. baseURL: '/mock/',
  62. }).then(() => {
  63. ElMessage.success({
  64. message: '模拟编辑成功',
  65. center: true,
  66. })
  67. resolve()
  68. })
  69. }
  70. })
  71. }
  72. })
  73. },
  74. })
  75. </script>
  76. <template>
  77. <div v-loading="loading">
  78. <el-form ref="formRef" :model="form" :rules="formRules" label-width="120px" label-suffix=":">
  79. <el-form-item label="标题" prop="title">
  80. <el-input v-model="form.title" placeholder="请输入标题" />
  81. </el-form-item>
  82. </el-form>
  83. </div>
  84. </template>
  85. <style lang="scss" scoped>
  86. // scss
  87. </style>