2424 <span >{{ $t("team.raid.memberSetting.roleInfoHint") }}</span >
2525 </header >
2626
27- <el-form-item :label =" $t('team.raid.memberSetting.roleName')" prop =" name" >
28- <el-input
29- v-if =" !['normal', 'sub'].includes(mode)"
30- v-model =" form.name"
31- :placeholder =" $t('team.raid.memberSetting.rolePlaceholder')"
27+ <el-form-item :label =" $t('team.raid.memberSetting.school')" >
28+ <el-select
29+ v-model =" selectedSchool"
30+ :placeholder =" $t('team.raid.memberSetting.schoolPlaceholder')"
3231 :disabled =" !canEdit"
32+ filterable
3333 clearable
34- />
34+ @change =" handleSchoolChange"
35+ >
36+ <el-option
37+ v-for =" school in schoolOptions"
38+ :key =" school.id"
39+ :label =" school.name"
40+ :value =" school.id"
41+ >
42+ <div class =" m-raid-member-option" >
43+ <img :src =" showSchoolIcon(school.id)" :alt =" school.name" />
44+ <span >{{ school.name }}</span >
45+ </div >
46+ </el-option >
47+ </el-select >
48+ </el-form-item >
3549
36- <div v-else class =" m-raid-member-source" >
50+ <el-form-item :label =" $t('team.raid.memberSetting.roleName')" prop =" name" >
51+ <div class =" m-raid-member-source" >
3752 <div v-if =" form.role_id" class =" m-raid-selected-role" >
3853 <img :src =" showMountIcon(form.mount)" :alt =" form.name" />
3954 <div >
4863 popper-class =" m-raid-pop-member-select"
4964 teleported
5065 filterable
66+ allow-create
5167 clearable
52- :placeholder =" $t('team.raid.memberSetting.selectBound ')"
68+ :placeholder =" $t('team.raid.memberSetting.rolePlaceholder ')"
5369 :disabled =" !canEdit"
5470 @change =" handleChange"
5571 >
56- <el-option v-for =" role in roles" :key =" role.ID" :label =" role.name" :value =" role.ID" >
72+ <el-option
73+ v-for =" role in filteredRoles"
74+ :key =" role.ID"
75+ :label =" role.name"
76+ :value =" role.ID"
77+ >
5778 <div class =" m-raid-member-option" >
5879 <img :src =" showSchoolIcon(role.mount)" :alt =" role.name" />
5980 <span >{{ role.name }}</span >
6081 <small v-if =" role.server" >{{ role.server }}</small >
6182 </div >
6283 </el-option >
6384 </el-select >
64- <div class =" m-raid-member-divider" ><span >{{ $t("team.raid.memberSetting.orTemporary") }}</span ></div >
65- <el-input
66- v-model =" form.name"
67- :placeholder =" $t('team.raid.memberSetting.temporaryPlaceholder')"
68- :disabled =" !canEdit"
69- clearable
70- />
7185 </template >
7286 </div >
7387 </el-form-item >
113127</template >
114128
115129<script >
116- import { getRoles , addNormalMember , addSubMember , updateMember } from " @/service/team/raid.js" ;
130+ import { addNormalMember , addSubMember , updateMember } from " @/service/team/raid.js" ;
117131import xf_map from " @jx3box/jx3box-data/data/xf/xf.json" ;
118132import mountg from " @jx3box/jx3box-data/data/xf/mount_group.json" ;
133+ import school_map from " @jx3box/jx3box-data/data/xf/schoolid.json" ;
119134import cloneDeep from " lodash/cloneDeep" ;
120135import pick from " lodash/pick" ;
121136import { showMountIcon , showSchoolIcon } from " @/utils/filters" ;
@@ -147,7 +162,6 @@ export default {
147162 rules: {},
148163 roles: [],
149164 substitute: [],
150- loading: false ,
151165 addLoading: false ,
152166 selectedSchool: 0 ,
153167
@@ -179,6 +193,13 @@ export default {
179193 }
180194 return Object .values (xf_map);
181195 },
196+ schoolOptions () {
197+ return Object .entries (school_map).map (([id , name ]) => ({ id: Number (id), name }));
198+ },
199+ filteredRoles () {
200+ if (! this .selectedSchool ) return this .roles ;
201+ return this .roles .filter ((role ) => this .getSchoolByMount (role .mount ) === this .selectedSchool );
202+ },
182203 allRoles () {
183204 return this .$store .state .roles ;
184205 },
@@ -203,6 +224,8 @@ export default {
203224 for (const key of Object .keys (val)) {
204225 this .form [key] = val[key];
205226 }
227+ this .selectedSchool = this .getSchoolByMount (val .mount );
228+ this .tmpVal = val .role_id || val .name || " " ;
206229 }
207230 },
208231 },
@@ -284,43 +307,48 @@ export default {
284307 },
285308 handleChange (val ) {
286309 this .form .role_id = 0 ;
287- const [ member ] = this .roles ? this . roles . filter ((role ) => role .ID === val) : [] ;
310+ const member = this .roles . find ((role ) => String ( role .ID ) === String ( val)) ;
288311
289312 if (member) {
290313 this .form .name = member .name ;
291314 this .form .role_id = member .ID ;
292- this .selectedSchool = Number (member .mount ) || 0 ;
315+ this .selectedSchool = this . getSchoolByMount (member .mount );
293316 this .form .mount = this .xfMaps [0 ]? .id || " " ;
317+ this .tmpVal = member .ID ;
318+ return ;
294319 }
320+
321+ this .form .name = typeof val === " string" ? val .trim () : " " ;
322+ this .tmpVal = this .form .name ;
323+ this .ensureMountMatchesSchool ();
295324 },
296- remoteMethod (query ) {
297- if (query !== " " ) {
298- getRoles (this .teamId , query).then ((res ) => {
299- this .roles = res .data .data .list ;
300- this .loading = false ;
301- });
302- // 如果新的id不在角色列表则重置已选择的门派
303- if (this .roles ? .some ((r ) => r .name === this .form .name )) {
304- this .selectedSchool = 0 ;
325+ getSchoolByMount (mount ) {
326+ const mountId = Number (mount);
327+ const mountInfo = Object .values (xf_map).find ((item ) => Number (item .id ) === mountId);
328+ return Number (mountInfo? .school ) || mountId || 0 ;
329+ },
330+ handleSchoolChange () {
331+ if (this .form .role_id ) {
332+ const role = this .roles .find ((item ) => String (item .ID ) === String (this .form .role_id ));
333+ if (! this .selectedSchool || this .getSchoolByMount (role? .mount ) !== this .selectedSchool ) {
334+ this .clearRole ();
305335 }
306- } else {
307- this .roles = cloneDeep (this .allRoles );
308- this .selectedSchool = 0 ;
309336 }
337+ this .ensureMountMatchesSchool ();
310338 },
311- // 清空选择
312- handleClear () {
313- this .roles = cloneDeep (this .allRoles );
314- this .selectedSchool = 0 ;
315- },
316- handleNameInput (val ) {
317- this .remoteMethod (val);
339+ ensureMountMatchesSchool () {
340+ if (! this .selectedSchool ) return ;
341+ const hasCurrentMount = this .xfMaps .some ((item ) => Number (item .id ) === Number (this .form .mount ));
342+ if (! hasCurrentMount) this .form .mount = this .xfMaps [0 ]? .id || " " ;
318343 },
319- removeRole () {
320- this .form .role_id = " " ;
344+ clearRole () {
345+ this .form .role_id = 0 ;
321346 this .form .name = " " ;
322347 this .form .mount = " " ;
323- this .selectedSchool = 0 ;
348+ this .tmpVal = " " ;
349+ },
350+ removeRole () {
351+ this .clearRole ();
324352 },
325353 showMountIcon,
326354 showSchoolIcon,
0 commit comments