| @@ -35,7 +35,10 @@ | ||||
| 					<FormSwitch v-model="silenced" class="_formBlock" @update:modelValue="toggleSilence">{{ $ts.silence }}</FormSwitch> | ||||
| 					<FormSwitch v-model="suspended" class="_formBlock" @update:modelValue="toggleSuspend">{{ $ts.suspend }}</FormSwitch> | ||||
| 					{{ $ts.reflectMayTakeTime }} | ||||
| 					<FormButton v-if="user.host == null && iAmModerator" class="_formBlock" @click="resetPassword"><i class="fas fa-key"></i> {{ $ts.resetPassword }}</FormButton> | ||||
| 					<div class="_formBlock"> | ||||
| 						<FormButton v-if="user.host == null && iAmModerator" inline style="margin-right: 8px;" @click="resetPassword"><i class="fas fa-key"></i> {{ $ts.resetPassword }}</FormButton> | ||||
| 						<FormButton v-if="$i.isAdmin" inline danger @click="deleteAccount">{{ $ts.deleteAccount }}</FormButton> | ||||
| 					</div> | ||||
| 				</FormSection> | ||||
|  | ||||
| 				<FormSection> | ||||
| @@ -233,6 +236,30 @@ async function deleteAllFiles() { | ||||
| 	await refreshUser(); | ||||
| } | ||||
|  | ||||
| async function deleteAccount() { | ||||
| 	const confirm = await os.confirm({ | ||||
| 		type: 'warning', | ||||
| 		text: i18n.ts.deleteAccountConfirm, | ||||
| 	}); | ||||
| 	if (confirm.canceled) return; | ||||
|  | ||||
| 	const typed = await os.inputText({ | ||||
| 		text: i18n.t('typeToConfirm', { x: user?.username }), | ||||
| 	}); | ||||
| 	if (typed.canceled) return; | ||||
|  | ||||
| 	if (typed.result === user?.username) { | ||||
| 		await os.apiWithDialog('admin/delete-account', { | ||||
| 			userId: user.id, | ||||
| 		}); | ||||
| 	} else { | ||||
| 		os.alert({ | ||||
| 			type: 'error', | ||||
| 			text: 'input not match', | ||||
| 		}); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| watch(() => props.userId, () => { | ||||
| 	init = createFetcher(); | ||||
| }, { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 syuilo
					syuilo