1 <template> 2 <!-- 人员资料--我的群组--添加群组 --> 3 <section class="add-group"> 4 <div class="content"> 5 <el-form 6 class="add-form" 7 label-position="right" 8 label-width="100px" 9 :model="groupForm" 10 :rules="formRules" 11 ref="groupForm" 12 > 13 <el-form-item prop="groupName" label="群组名称:"> 14 <el-input 15 v-model.trim="groupForm.groupName" 16 placeholder="请输入群组名称" 17 ></el-input> 18 </el-form-item> 19 <el-form-item prop="name"> 20 <span slot="label"> 21 <span>群组成员:</span> 22 <el-button size="small" type="primary" @click.native="addMembers"> 23 添加 24 </el-button> 25 </span> 26 <el-input 27 type="textarea" 28 :rows="4" 29 v-model.trim="groupForm.members" 30 placeholder="请添加群组成员" 31 ></el-input> 32 </el-form-item> 33 <el-form-item class="operate"> 34 <el-button size="small" type="default" @click.native="cancel"> 35 取消 36 </el-button> 37 <el-button size="small" type="primary" @click.native="submit"> 38 保存 39 </el-button> 40 </el-form-item> 41 </el-form> 42 </div> 43 <!-- 添加群组成员 --> 44 <el-dialog 45 title="添加成员" 46 :modal-append-to-body="true" 47 :append-to-body="true" 48 :visible.sync="addFormVisible" 49 > 50 <el-form 51 :model="membersForm" 52 :rules="membersRule" 53 ref="membersForm" 54 label-width="100px" 55 class="add-form" 56 > 57 <el-form-item label="成员类型:" prop="type"> 58 <el-radio-group v-model="membersForm.type"> 59 <el-radio 60 v-for="item in memberType" 61 :key="item.value" 62 :label="item.value" 63 > 64 {{ item.label }} 65 </el-radio> 66 </el-radio-group> 67 </el-form-item> 68 <!-- 选择用户时如果选择的是门户人员则成员名称是必填项,否则为非必填项 --> 69 <!-- 动态校验数据的必填项和非必填项 --> 70 <el-form-item 71 label="成员名称:" 72 prop="name" 73 :message="'请选择成员名称'" 74 :required="membersForm.type === STAFF_TYPE.PORTAL_USER? true:false"> 75 <el-input 76 v-if="membersForm.type === STAFF_TYPE.PORTAL_USER" 77 type="textarea" 78 autosize 79 @focus="showSelectStaff" 80 placeholder="请选择(可多选)" 81 key="select-name" 82 > 83 </el-input> 84 <el-input 85 v-else 86 v-model="membersForm.name" 87 type="textarea" 88 autosize 89 auto-complete="off" 90 key="input-name" 91 placeholder="请输入成员姓名,多个以" , "隔开" 92 ></el-input> 93 </el-form-item> 94 <!-- 输入成员昵称 --> 95 <el-form-item label="成员昵称" prop="nicknames"> 96 <el-input 97 v-model="membersForm.nicknames" 98 type="textarea" 99 autosize 100 auto-complete="off" 101 placeholder="请输入成员昵称,多个以" , "隔开" 102 ></el-input> 103 </el-form-item> 104 <!-- 输入成员手机号 --> 105 <el-form-item label="成员手机号" prop="phone" v-if="membersForm.type === STAFF_TYPE.DIRECT_INPUT"> 106 <el-input 107 v-model="membersForm.phone" 108 maxlength="11" 109 auto-complete="off" 110 placeholder="请输入成员手机号,多个以" , "隔开" 111 ></el-input> 112 </el-form-item> 113 </el-form> 114 <div slot="footer" class="dialog-footer"> 115 <el-button size="small" @click="addFormVisible = false" 116 >取 消</el-button 117 > 118 <el-button 119 size="small" 120 type="primary" 121 @click="addSubmit" 122 :loading="load.addLoading" 123 >确 定</el-button 124 > 125 </div> 126 </el-dialog> 127 <!-- 选择群组成员弹窗 --> 128 <select-staff :showDialog="selectDialogVisible" @closeModal="closeModal"></select-staff> 129 </section> 130 </template> 131 <script> 132 import DATA_TYPE from 'utils/enum'; 133 import utilCheck from 'utils/check'; 134 import selectStaff from 'components/selectStaff'; 135 136 export default { 137 components: { 138 'select-staff': selectStaff 139 }, 140 data() { 141 return { 142 load: { 143 addLoading: false, 144 treeLoading: false 145 }, 146 // 群组信息 147 groupForm: { 148 groupName: '', 149 members: '' 150 }, 151 addFormVisible: false, 152 // 成员信息 153 membersForm: { 154 type: DATA_TYPE.STAFF_TYPE.PORTAL_USER, // 默认为门户用户 155 name: '', 156 members: [], 157 nicknames: '', 158 phone: '' 159 }, 160 // 用户类型 161 STAFF_TYPE: DATA_TYPE.STAFF_TYPE, 162 memberType: [ 163 { label: '门户用户', value: DATA_TYPE.STAFF_TYPE.PORTAL_USER }, 164 { label: '直接输入', value: DATA_TYPE.STAFF_TYPE.DIRECT_INPUT } 165 ], 166 selectDialogVisible: false, 167 searchMember: '', 168 selectedMembers: [], 169 // 群组信息校验 170 formRules: { 171 name: [ 172 { 173 required: true, 174 message: '请输入群组名称', 175 trigger: 'blur' 176 } 177 ], 178 members: [ 179 { 180 required: true, 181 message: '请添加群组成员', 182 trigger: 'blur' 183 } 184 ] 185 }, 186 /** 187 * 成员信息校验分为两种 188 * 1.门户选择 189 * 选择成员名称,成员昵称非必填,但是若填写,则数量上须保持一致 190 * 2.直接输入 191 * 成员手机号必填,成员名称和昵称非必填 192 * 但是如果填写了,则必须和手机号数量保持一致 193 * 194 */ 195 membersRule: { 196 name: [ 197 { 198 trigger: 'blur', 199 validator: (rule, value, callback) => { 200 let err; 201 // 门户成员时必须选择成员名称 202 if (this.membersForm.type === this.STAFF_TYPE.PORTAL_USER && !value) { 203 err = new Error('请选择成员名称'); 204 } 205 callback(err); 206 } 207 } 208 ], 209 phone: [ 210 { 211 required: true, 212 message: '请输入成员手机号', 213 trigger: 'blur' 214 }, 215 // 校验多个手机号的格式是否都正确 216 utilCheck.checkMultipleMobile 217 ] 218 }, 219 searchStaff: '' 220 }; 221 }, 222 watch: { 223 /** 224 * 需要在监听这个属性 另外一定要加$nextTick() 225 * 不加的话切换必选属性的时候会触发框架自带的验证会出现 XX is required 226 */ 227 'membersForm.type': function (val) { 228 this.$nextTick(() => { 229 if (val !== 1) { 230 this.$refs.membersForm.validateField('name'); 231 this.membersForm.name = ''; 232 } 233 }); 234 } 235 }, 236 methods: { 237 showSelectStaff() { 238 this.selectDialogVisible = true; 239 }, 240 // 选择群组成员 241 addMembers() { 242 this.addFormVisible = true; 243 }, 244 // 关闭选择群组成员弹窗 245 closeModal() { 246 this.selectDialogVisible = false; 247 }, 248 // 提交添加群组成员 249 addSubmit() {}, 250 submit() { 251 this.$refs.groupForm.validate((valid) => { 252 if (valid) { 253 // TODO test 254 } 255 }); 256 }, 257 cancel() { 258 this.$router.back(); 259 } 260 }, 261 mounted() {} 262 }; 263 </script> 264 <style lang="scss" scoped> 265 @import "~assets/css/vars.scss"; 266 .add-group { 267 overflow: hidden; 268 .content { 269 width: 50%; 270 margin: 60px auto 0; 271 } 272 .operate { 273 text-align: center; 274 margin-top: 40px; 275 } 276 } 277 .search-content { 278 display: flex; 279 .el-button { 280 margin-left: 30px; 281 } 282 } 283 .dialog-content { 284 padding-bottom: 20px; 285 } 286 </style>