send.vue 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. <template>
  2. <ibps-container
  3. type="full"
  4. header-background-color
  5. class="page send send-form"
  6. >
  7. <div slot="header">
  8. <ibps-toolbar
  9. :actions="toolbars"
  10. :socpe="thatSocpe"
  11. @action-event="handleActionEvent"
  12. />
  13. </div>
  14. <el-row class="send-form-row">
  15. <el-form
  16. ref="form"
  17. :model="form"
  18. :rules="rules"
  19. label-width="100px"
  20. class="demo-form"
  21. @submit.native.prevent
  22. >
  23. <el-form-item label="主题:" prop="subject">
  24. <el-input v-model="form.subject" />
  25. </el-form-item>
  26. <el-form-item label="消息类型:" prop="messageType">
  27. <el-radio-group v-model="form.messageType" @input="handleChange">
  28. <template v-for="item in typeOptions">
  29. <el-radio v-if="item.value" :key="item.value" :label="item.value">{{ item.label }}</el-radio>
  30. </template>
  31. </el-radio-group>
  32. </el-form-item>
  33. <el-form-item label="收件人:" prop="receiverId">
  34. <ibps-employee-selector
  35. :value="form.receiverId"
  36. multiple
  37. placeholder="请选择接收用户"
  38. @input="handleInput"
  39. />
  40. </el-form-item>
  41. <!-- <el-form-item label="收件组织:" prop="groupId">
  42. <ibps-org-selector
  43. :value="form.groupId"
  44. :multiple="true"
  45. @input="depNameInput"
  46. />
  47. </el-form-item> -->
  48. <el-form-item label="收件部门:" prop="positionId">
  49. <ibps-pos-selector
  50. :value="form.positionId"
  51. :multiple="true"
  52. placeholder="请选择接收部门"
  53. @input="posNameInput"
  54. />
  55. </el-form-item>
  56. <el-form-item v-if="form.messageType !== 'bulletin'" label="是否可回复:" prop="canreply">
  57. <el-radio-group v-model="form.canreply">
  58. <el-radio label="1">是</el-radio>
  59. <el-radio label="0">否</el-radio>
  60. </el-radio-group>
  61. </el-form-item>
  62. <el-form-item label="附件:" prop="fileMsg">
  63. <ibps-attachment-selector
  64. v-model="form.fileMsg"
  65. accept="*"
  66. multiple
  67. />
  68. </el-form-item>
  69. <el-form-item
  70. label="正文:"
  71. prop="content"
  72. class="demo-form-content"
  73. >
  74. <ibps-ueditor v-model="form.content" :z-index="2000" />
  75. </el-form-item>
  76. </el-form>
  77. </el-row>
  78. </ibps-container>
  79. </template>
  80. <script>
  81. import { save } from '@/api/platform/message/innerMessage'
  82. import { typeOptions } from './constants'
  83. import ActionUtils from '@/utils/action'
  84. import IbpsEmployeeSelector from '@/business/platform/org/employee/selector'
  85. import IbpsOrgSelector from '@/business/platform/org/org/selector'
  86. import IbpsPosSelector from '@/business/platform/org/position/selector'
  87. import IbpsUeditor from '@/components/ibps-ueditor'
  88. import IbpsAttachmentSelector from '@/business/platform/file/attachment/selector'
  89. export default {
  90. components: {
  91. IbpsUeditor,
  92. IbpsEmployeeSelector,
  93. IbpsOrgSelector,
  94. IbpsPosSelector,
  95. IbpsAttachmentSelector
  96. },
  97. data () {
  98. return {
  99. typeOptions,
  100. formName: 'form',
  101. toolbars: [
  102. // { key: 'back', label: '返回', icon: 'ibps-icon-back' },
  103. { key: 'send', label: '发送', icon: 'ibps-icon-send' }
  104. ],
  105. form: {
  106. subject: '',
  107. messageType: 'normal',
  108. receiverId: '',
  109. receiver: '',
  110. groupId: '',
  111. groupName: '',
  112. positionId: '',
  113. positionName: '',
  114. canreply: '0',
  115. fileMsg: '',
  116. content: '',
  117. id: '',
  118. editorValue: ''
  119. },
  120. rules: {
  121. subject: [
  122. { required: true, message: this.$t('validate.required') }
  123. ],
  124. receiverId: [{ required: false }],
  125. groupId: [{ required: false }],
  126. positionId: [{ required: false }],
  127. canreply: [{ required: false }],
  128. fileMsg: [{ required: false }],
  129. content: [{ required: true }]
  130. }
  131. }
  132. },
  133. computed: {
  134. thatSocpe () {
  135. return this
  136. }
  137. },
  138. mounted () {
  139. this.$nextTick(() => {
  140. this.$refs[this.formName].validate(() => {})
  141. })
  142. },
  143. methods: {
  144. handleInput (data) {
  145. this.form.receiverId = data
  146. },
  147. depNameInput (data) {
  148. this.form.groupId = data
  149. },
  150. posNameInput (data) {
  151. this.form.positionId = data
  152. },
  153. handleActionEvent ({ key }) {
  154. switch (key) {
  155. case 'send': // 发送信息
  156. this.handSend()
  157. break
  158. case 'back':
  159. this.$router.go(-1)
  160. break
  161. default:
  162. break
  163. }
  164. },
  165. handSend () {
  166. this.$refs[this.formName].validate((valid) => {
  167. if (valid) {
  168. this.sendNews()
  169. } else {
  170. ActionUtils.saveErrorMessage()
  171. }
  172. })
  173. },
  174. sendNews () {
  175. if (this.form.receiverId === '' && this.form.groupId === '' && this.form.positionId === '') {
  176. ActionUtils.warning('至少选择一个收件人或收件部门!')
  177. return
  178. }
  179. this.form.ownerName = this.$store.getters.name
  180. this.form.ownerId = this.$store.getters.userId
  181. save(this.form).then((response) => {
  182. ActionUtils.saveSuccessAlert('消息发送成功', () => {
  183. this.$refs[this.formName].resetFields()
  184. })
  185. }).catch((err) => {
  186. console.error(err)
  187. })
  188. },
  189. handleChange (v) {
  190. if (v === 'bulletin') {
  191. this.form.canreply = '0'
  192. }
  193. }
  194. }
  195. }
  196. </script>
  197. <style lang="scss" scoped>
  198. .send {
  199. .ibps-container-full__body {
  200. padding: 15px !important;
  201. }
  202. .send-form {
  203. .send-form-row {
  204. padding: 10px;
  205. .demo-form-content {
  206. .edui-editor-iframeholder {
  207. height: 100% !important;
  208. }
  209. }
  210. }
  211. }
  212. }
  213. </style>