form.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <template>
  2. <xn-form-container
  3. :title="formData.postId ? '编辑帖子信息表' : '增加帖子信息表'"
  4. :width="700"
  5. :visible="visible"
  6. :destroy-on-close="true"
  7. @close="onClose"
  8. >
  9. <a-form ref="formRef" :model="formData" :rules="formRules" layout="vertical">
  10. <a-form-item label="分类id:" name="typeId">
  11. <a-input v-model:value="formData.typeId" placeholder="请输入分类id" allow-clear />
  12. </a-form-item>
  13. <a-form-item label="用户id:" name="userId">
  14. <a-input v-model:value="formData.userId" placeholder="请输入用户id" allow-clear />
  15. </a-form-item>
  16. <a-form-item label="帖子标题:" name="postTitle">
  17. <a-input v-model:value="formData.postTitle" placeholder="请输入帖子标题" allow-clear />
  18. </a-form-item>
  19. <a-form-item label="帖子内容:" name="postContent">
  20. <a-input v-model:value="formData.postContent" placeholder="请输入帖子内容" allow-clear />
  21. </a-form-item>
  22. <a-form-item label="是否置顶 0普通 1置顶:" name="isTop">
  23. <a-input v-model:value="formData.isTop" placeholder="请输入是否置顶 0普通 1置顶" allow-clear />
  24. </a-form-item>
  25. <a-form-item label="浏览次数:" name="viewCount">
  26. <a-input v-model:value="formData.viewCount" placeholder="请输入浏览次数" allow-clear />
  27. </a-form-item>
  28. <a-form-item label="回复次数:" name="replyCount">
  29. <a-input v-model:value="formData.replyCount" placeholder="请输入回复次数" allow-clear />
  30. </a-form-item>
  31. <a-form-item label="点赞次数:" name="likeCount">
  32. <a-input v-model:value="formData.likeCount" placeholder="请输入点赞次数" allow-clear />
  33. </a-form-item>
  34. <a-form-item label="最后回复用户id:" name="lastReplyUserId">
  35. <a-input v-model:value="formData.lastReplyUserId" placeholder="请输入最后回复用户id" allow-clear />
  36. </a-form-item>
  37. <a-form-item label="最后回复时间:" name="lastReplyTime">
  38. <a-date-picker v-model:value="formData.lastReplyTime" value-format="YYYY-MM-DD HH:mm:ss" show-time placeholder="请选择最后回复时间" style="width: 100%" />
  39. </a-form-item>
  40. <a-form-item label="帖子类型 0普通帖子 1技术支持 2内容纠错:" name="postType">
  41. <a-input v-model:value="formData.postType" placeholder="请输入帖子类型 0普通帖子 1技术支持 2内容纠错" allow-clear />
  42. </a-form-item>
  43. <a-form-item label="定向用户:" name="appointUser">
  44. <a-input v-model:value="formData.appointUser" placeholder="请输入定向用户" allow-clear />
  45. </a-form-item>
  46. </a-form>
  47. <template #footer>
  48. <a-button style="margin-right: 8px" @click="onClose">关闭</a-button>
  49. <a-button type="primary" @click="onSubmit" :loading="submitLoading">保存</a-button>
  50. </template>
  51. </xn-form-container>
  52. </template>
  53. <script setup name="forumPostInfoForm">
  54. import { cloneDeep } from 'lodash-es'
  55. import { required } from '@/utils/formRules'
  56. import forumPostInfoApi from '@/api/forum/forumPostInfoApi'
  57. // 抽屉状态
  58. const visible = ref(false)
  59. const emit = defineEmits({ successful: null })
  60. const formRef = ref()
  61. // 表单数据
  62. const formData = ref({})
  63. const submitLoading = ref(false)
  64. // 打开抽屉
  65. const onOpen = (record) => {
  66. visible.value = true
  67. if (record) {
  68. let recordData = cloneDeep(record)
  69. formData.value = Object.assign({}, recordData)
  70. }
  71. }
  72. // 关闭抽屉
  73. const onClose = () => {
  74. formRef.value.resetFields()
  75. formData.value = {}
  76. visible.value = false
  77. }
  78. // 默认要校验的
  79. const formRules = {
  80. }
  81. // 验证并提交数据
  82. const onSubmit = () => {
  83. formRef.value.validate().then(() => {
  84. submitLoading.value = true
  85. const formDataParam = cloneDeep(formData.value)
  86. forumPostInfoApi
  87. .forumPostInfoSubmitForm(formDataParam, formDataParam.postId)
  88. .then(() => {
  89. onClose()
  90. emit('successful')
  91. })
  92. .finally(() => {
  93. submitLoading.value = false
  94. })
  95. })
  96. }
  97. // 抛出函数
  98. defineExpose({
  99. onOpen
  100. })
  101. </script>