diff --git a/resources/assets/src/components/ApplyToPlayerDialog.vue b/resources/assets/src/components/ApplyToPlayerDialog.vue index 6d26b18a..ae308e36 100644 --- a/resources/assets/src/components/ApplyToPlayerDialog.vue +++ b/resources/assets/src/components/ApplyToPlayerDialog.vue @@ -5,21 +5,25 @@ :title="$t('user.closet.use-as.title')" :ok-button-text="$t('general.submit')" flex-footer - center >

@@ -59,26 +63,29 @@ export default { data() { return { players: [], - selected: 0, + search: '', } }, + computed: { + filteredPlayers() { + return this.players.filter(player => player.name.includes(this.search)) + }, + }, + mounted() { + this.fetchList() + }, methods: { async fetchList() { this.players = (await this.$http.get('/user/player/list')).data }, - async submit() { - if (!this.selected) { - toast.info(this.$t('user.emptySelectedPlayer')) - return - } - + async submit(selected) { if (!this.skin && !this.cape) { toast.info(this.$t('user.emptySelectedTexture')) return } const { code, message } = await this.$http.post( - `/user/player/set/${this.selected}`, + `/user/player/set/${selected}`, { skin: this.skin || undefined, cape: this.cape || undefined, @@ -92,13 +99,8 @@ export default { } }, avatarUrl(player) { - return `${blessing.base_url}/avatar/${player.tid_skin}?3d&size=35` + return `${blessing.base_url}/avatar/${player.tid_skin}?3d&size=45` }, }, } - - diff --git a/resources/assets/tests/components/ApplyToPlayerDialog.test.ts b/resources/assets/tests/components/ApplyToPlayerDialog.test.ts index e3b5e5fd..9847ca87 100644 --- a/resources/assets/tests/components/ApplyToPlayerDialog.test.ts +++ b/resources/assets/tests/components/ApplyToPlayerDialog.test.ts @@ -8,16 +8,13 @@ import ApplyToPlayerDialog from '@/components/ApplyToPlayerDialog.vue' jest.mock('@/scripts/notify') test('submit applying texture', async () => { - Vue.prototype.$http.get.mockResolvedValue({ data: [{ pid: 1 }] }) + Vue.prototype.$http.get.mockResolvedValue({ data: [{ pid: 1, name: 'a' }] }) Vue.prototype.$http.post.mockResolvedValueOnce({ code: 1 }) .mockResolvedValue({ code: 0, message: 'ok' }) const wrapper = mount(ApplyToPlayerDialog) - const button = wrapper.find('[data-test=submit]') + await flushPromises() + const button = wrapper.find('.btn-outline-info') - button.trigger('click') - expect(toast.info).toBeCalledWith('user.emptySelectedPlayer') - - wrapper.setData({ selected: 1 }) button.trigger('click') expect(toast.info).toBeCalledWith('user.emptySelectedTexture') @@ -48,5 +45,17 @@ test('compute avatar URL', () => { // eslint-disable-next-line camelcase const wrapper = mount(ApplyToPlayerDialog) const { avatarUrl } = wrapper.vm - expect(avatarUrl({ tid_skin: 1 })).toBe('/avatar/1?3d&size=35') + expect(avatarUrl({ tid_skin: 1 })).toBe('/avatar/1?3d&size=45') +}) + +test('search players', async () => { + Vue.prototype.$http.get.mockResolvedValue({ data: [{ pid: 1, name: 'abc' }] }) + const wrapper = mount(ApplyToPlayerDialog) + await flushPromises() + + wrapper.find('input').setValue('e') + expect(wrapper.find('.btn-outline-info').exists()).toBeFalse() + + wrapper.find('input').setValue('b') + expect(wrapper.find('.btn-outline-info').exists()).toBeTrue() }) diff --git a/resources/misc/changelogs/en/5.0.0.md b/resources/misc/changelogs/en/5.0.0.md index 17df6032..e2deb08f 100644 --- a/resources/misc/changelogs/en/5.0.0.md +++ b/resources/misc/changelogs/en/5.0.0.md @@ -18,6 +18,7 @@ - Added login with 3rd-party services. (GitHub and Microsoft Live are supported currently.) - Added support of character "§" for player name. (Under CJK mode.) - New password hash algorithm: Argon2i. +- Support searching players when applying textures. ## Tweaked diff --git a/resources/misc/changelogs/zh_CN/5.0.0.md b/resources/misc/changelogs/zh_CN/5.0.0.md index ccfce7c5..8aa7f512 100644 --- a/resources/misc/changelogs/zh_CN/5.0.0.md +++ b/resources/misc/changelogs/zh_CN/5.0.0.md @@ -18,6 +18,7 @@ - 第三方登录(目前仅支持 GitHub 和 Microsoft Live) - 角色名支持字符「§」(需开启「CJK」模式) - 新的密码哈希算法:Argon2i +- 将材质应用到角色时可进行搜索 ## 调整