addForum.vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. <template>
  2. <div style="display: flex; justify-content: center">
  3. <a-card :bordered="false" style="width: 1200px">
  4. <a-form ref="formRef" :model="formData" :rules="formRules" layout="vertical">
  5. <a-row :gutter="16">
  6. <a-col :span="8">
  7. <a-form-item label="标题:" name="postTitle">
  8. <a-input v-model:value="formData.postTitle" placeholder="请输入标题" allow-clear />
  9. </a-form-item>
  10. </a-col>
  11. <a-col :span="8">
  12. <a-form-item label="分类:" name="typeId">
  13. <a-select
  14. v-model:value="formData.typeId"
  15. show-search
  16. placeholder="请选择分类"
  17. style="width: 100%"
  18. :options="typeOptions"
  19. :filter-option="filterOption"
  20. ></a-select>
  21. </a-form-item>
  22. </a-col>
  23. <a-col :span="8">
  24. <a-form-item label="指向:" name="appointUserArr">
  25. <a-select
  26. v-model:value="formData.appointUserArr"
  27. mode="multiple"
  28. show-search
  29. placeholder="请选择"
  30. style="width: 100%"
  31. :options="usertypeOptions"
  32. :filter-option="filterOption"
  33. ></a-select>
  34. </a-form-item>
  35. </a-col>
  36. <a-col :span="24">
  37. <a-form-item label="内容:" name="postContent">
  38. <xn-editor v-model="formData.postContent" placeholder="请输入内容" :height="400"></xn-editor>
  39. </a-form-item>
  40. </a-col>
  41. </a-row>
  42. </a-form>
  43. <div>
  44. <a-button style="margin-right: 8px" @click="onClose">关闭</a-button>
  45. <a-button type="primary" :loading="submitLoading" @click="onSubmit">保存</a-button>
  46. </div>
  47. </a-card>
  48. </div>
  49. </template>
  50. <script setup name="addForum">
  51. import { required } from '@/utils/formRules'
  52. import SnowflakeId from 'snowflake-id'
  53. import tool from '@/utils/tool'
  54. import forumApi from '@/api/forum/forumApi'
  55. import XnEditor from '@/components/Editor/index.vue'
  56. import Bowser from 'bowser'
  57. import { useRoute, useRouter } from 'vue-router'
  58. const route = useRoute()
  59. const router = useRouter()
  60. const { proxy } = getCurrentInstance()
  61. const userInfo = tool.data.get('USER_INFO')
  62. const typeOptions = ref([])
  63. // 默认是关闭状态
  64. const emit = defineEmits({ successful: null })
  65. const formRef = ref()
  66. const treeData = ref([])
  67. // 表单数据,也就是默认给一些数据
  68. const formData = ref({})
  69. // 默认展开的节点(顶级)
  70. const defaultExpandedKeys = ref([0])
  71. const submitLoading = ref(false)
  72. // 模块ID
  73. const moduleId = ref('')
  74. const usertypeOptions = ref([])
  75. const filterOption = (input, option) => {
  76. return option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0
  77. }
  78. // 打开抽屉
  79. const onOpen = () => {
  80. forumApi.forumTypeList().then((data) => {
  81. typeOptions.value = data.map((r) => {
  82. return {
  83. label: r.typeName,
  84. value: r.typeId,
  85. ...r
  86. }
  87. })
  88. })
  89. forumApi.allUserList().then((data) => {
  90. usertypeOptions.value = data.map((r) => {
  91. return {
  92. label: r.name,
  93. value: r.id,
  94. ...r
  95. }
  96. })
  97. })
  98. if (route.query.postType == 1) {
  99. getBower()
  100. }
  101. if (route.query.postType == 2) {
  102. errorCorrection()
  103. }
  104. }
  105. setTimeout(() => {
  106. onOpen()
  107. }, 0)
  108. // 关闭抽屉
  109. const onClose = () => {
  110. formRef.value.resetFields()
  111. window.close()
  112. router.push({
  113. path: '/forum'
  114. })
  115. }
  116. // 默认要校验的
  117. const formRules = {
  118. postTitle: [required('请输入标题')],
  119. typeId: [required('请选择分类')],
  120. postContent: [required('请输入内容')]
  121. }
  122. // 验证并提交数据
  123. const onSubmit = () => {
  124. formRef.value
  125. .validate()
  126. .then(() => {
  127. submitLoading.value = true
  128. if (formData.value.appointUserArr && formData.value.appointUserArr.length > 1) {
  129. formData.value.appointUser = formData.value.appointUserArr.join(',')
  130. }
  131. let params = formData.value
  132. if (route.query.postType == 1) {
  133. params = {
  134. ...formData.value,
  135. ...browserObj.value,
  136. postType: route.query.postType
  137. }
  138. }
  139. if (route.query.postType == 2) {
  140. params = {
  141. ...formData.value,
  142. ...errorVal.value,
  143. postType: route.query.postType
  144. }
  145. }
  146. forumApi.submitForm(params).then(() => {
  147. onClose()
  148. emit('successful')
  149. })
  150. })
  151. .finally(() => {
  152. submitLoading.value = false
  153. })
  154. }
  155. //获取操作系统/浏览器等信息
  156. const browserObj = ref({})
  157. function getBower() {
  158. const browser = Bowser.getParser(window.navigator.userAgent)
  159. let obj = browser.parsedResult
  160. browserObj.value = {
  161. forumSupportEnvParam: {
  162. browserType: obj.browser.name,
  163. browserVersion: obj.browser.version,
  164. osType: obj.os.name,
  165. osVersion: obj.os.version,
  166. deviceType: 0
  167. }
  168. }
  169. }
  170. //纠错
  171. const errorVal = ref({})
  172. function errorCorrection() {
  173. errorVal.value = {
  174. contentCorrectionParam: {
  175. resourceType: route.query.type,
  176. resourceId: route.query.id
  177. }
  178. }
  179. }
  180. </script>