create-group.vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. <template>
  2. <div>
  3. <el-form :model="form" :rules="rules" ref="createGroupForm" label-width="100px">
  4. <el-form-item label="群ID">
  5. <el-input v-model="form.groupID"></el-input>
  6. </el-form-item>
  7. <el-form-item label="群名称" prop="name">
  8. <el-input v-model="form.name"></el-input>
  9. </el-form-item>
  10. <el-form-item label="群类型">
  11. <el-select v-model="form.type">
  12. <el-option label="Work" :value="TIM.TYPES.GRP_WORK"></el-option>
  13. <el-option label="Public" :value="TIM.TYPES.GRP_PUBLIC"></el-option>
  14. <el-option label="Meeting" :value="TIM.TYPES.GRP_MEETING"></el-option>
  15. <el-option label="AVChatRoom" :value="TIM.TYPES.GRP_AVCHATROOM"></el-option>
  16. </el-select>
  17. </el-form-item>
  18. <el-form-item label="群头像地址">
  19. <el-input v-model="form.avatar"></el-input>
  20. </el-form-item>
  21. <el-form-item label="群简介">
  22. <el-input type="textarea" v-model="form.introduction" :maxlength="240"></el-input>
  23. </el-form-item>
  24. <el-form-item label="群公告">
  25. <el-input type="textarea" v-model="form.notification" :maxlength="300"></el-input>
  26. </el-form-item>
  27. <el-form-item label="加群方式">
  28. <el-radio-group v-model="form.joinOption" :disabled="joinOptionDisabled">
  29. <el-radio label="FreeAccess">自由加群</el-radio>
  30. <el-radio label="NeedPermission">需要验证</el-radio>
  31. <el-radio label="DisableApply">禁止加群</el-radio>
  32. </el-radio-group>
  33. </el-form-item>
  34. <el-form-item label="群成员列表">
  35. <el-select
  36. v-model="form.memberList"
  37. default-first-option
  38. multiple
  39. filterable
  40. remote
  41. :disabled="form.type === OpenIM.TYPES.GRP_AVCHATROOM"
  42. :remote-method="handleSearchUser"
  43. :loading="loading"
  44. placeholder="请输入群成员 userID"
  45. >
  46. <el-option v-for="item in options" :key="item" :label="item" :value="item"></el-option>
  47. </el-select>
  48. </el-form-item>
  49. </el-form>
  50. <div slot="footer">
  51. <el-button type="primary" @click="onSubmit('createGroupForm')">立即创建</el-button>
  52. <el-button @click="closeCreateGroupModel">取消</el-button>
  53. </div>
  54. </div>
  55. </template>
  56. <script>
  57. import {
  58. Form,
  59. FormItem,
  60. Input,
  61. Select,
  62. Option,
  63. Radio,
  64. RadioGroup
  65. } from 'element-ui'
  66. export default {
  67. components: {
  68. ElForm: Form,
  69. ElFormItem: FormItem,
  70. ElInput: Input,
  71. ElSelect: Select,
  72. ElOption: Option,
  73. ElRadioGroup: RadioGroup,
  74. ElRadio: Radio
  75. },
  76. data() {
  77. return {
  78. form: {
  79. groupID: '',
  80. name: '',
  81. type: this.OpenIM.TYPES.GRP_WORK,
  82. avatar: '',
  83. introduction: '',
  84. notification: '',
  85. joinOption: 'FreeAccess',
  86. memberList: []
  87. },
  88. options: [],
  89. loading: false,
  90. rules: {
  91. name: [{ required: true, message: '请输入群名称', trigger: 'blur' }]
  92. }
  93. }
  94. },
  95. computed: {
  96. joinOptionDisabled() {
  97. return [
  98. this.OpenIM.TYPES.GRP_WORK,
  99. this.OpenIM.TYPES.GRP_MEETING,
  100. this.OpenIM.TYPES.GRP_AVCHATROOM
  101. ].includes(this.form.type)
  102. }
  103. },
  104. methods: {
  105. onSubmit(ref) {
  106. this.$refs[ref].validate(valid => {
  107. if (!valid) {
  108. return false
  109. }
  110. this.createGroup()
  111. })
  112. },
  113. closeCreateGroupModel() {
  114. this.$store.commit('updateCreateGroupModelVisible', false)
  115. },
  116. createGroup() {
  117. this.tim.createGroup(this.getOptions()).then((imResponse) => {
  118. this.$store.commit('showMessage', {
  119. message: `群组:【${imResponse.data.group.name}】创建成功`,
  120. type: 'success'
  121. })
  122. this.closeCreateGroupModel()
  123. })
  124. .catch(error => {
  125. this.$store.commit('showMessage', {
  126. type: 'error',
  127. message: error.message
  128. })
  129. })
  130. },
  131. getOptions() {
  132. let options = {
  133. ...this.form,
  134. memberList: this.form.memberList.map(userID => ({ userID }))
  135. }
  136. if ([this.OpenIM.TYPES.GRP_WORK, this.OpenIM.TYPES.GRP_AVCHATROOM].includes(this.form.type)) {
  137. delete options.joinOption
  138. }
  139. return options
  140. },
  141. handleSearchUser(userID) {
  142. if (userID !== '') {
  143. this.loading = true
  144. this.tim.getUserProfile({ userIDList: [userID] }).then(({ data }) => {
  145. this.options = data.map(item => item.userID)
  146. this.loading = false
  147. })
  148. .catch(error => {
  149. this.$store.commit('showMessage', {
  150. type: 'error',
  151. message: error.message
  152. })
  153. })
  154. }
  155. }
  156. }
  157. }
  158. </script>
  159. <style lang="stylus" scoped>
  160. </style>