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