form.vue 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <template>
  2. <xn-form-container
  3. :title="formData.sensitivityId ? '编辑论坛-敏感词' : '增加论坛-敏感词'"
  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="敏感词:" name="sensitivityWord">
  11. <a-input v-model:value="formData.sensitivityWord" placeholder="请输入敏感词" allow-clear />
  12. </a-form-item>
  13. </a-form>
  14. <template #footer>
  15. <a-button style="margin-right: 8px" @click="onClose">关闭</a-button>
  16. <a-button type="primary" @click="onSubmit" :loading="submitLoading">保存</a-button>
  17. </template>
  18. </xn-form-container>
  19. </template>
  20. <script setup name="forumSensitivityForm">
  21. import { cloneDeep } from 'lodash-es'
  22. import { required } from '@/utils/formRules'
  23. import forumSensitivityApi from '@/api/forum/forumSensitivityApi'
  24. // 抽屉状态
  25. const visible = ref(false)
  26. const emit = defineEmits({ successful: null })
  27. const formRef = ref()
  28. // 表单数据
  29. const formData = ref({})
  30. const submitLoading = ref(false)
  31. // 打开抽屉
  32. const onOpen = (record) => {
  33. visible.value = true
  34. if (record) {
  35. let recordData = cloneDeep(record)
  36. formData.value = Object.assign({}, recordData)
  37. }
  38. }
  39. // 关闭抽屉
  40. const onClose = () => {
  41. formRef.value.resetFields()
  42. formData.value = {}
  43. visible.value = false
  44. }
  45. // 默认要校验的
  46. const formRules = {
  47. }
  48. // 验证并提交数据
  49. const onSubmit = () => {
  50. formRef.value.validate().then(() => {
  51. submitLoading.value = true
  52. const formDataParam = cloneDeep(formData.value)
  53. forumSensitivityApi
  54. .forumSensitivitySubmitForm(formDataParam, formDataParam.sensitivityId)
  55. .then(() => {
  56. onClose()
  57. emit('successful')
  58. })
  59. .finally(() => {
  60. submitLoading.value = false
  61. })
  62. })
  63. }
  64. // 抛出函数
  65. defineExpose({
  66. onOpen
  67. })
  68. </script>