window.SecuritySettings = { emits: ['updated'], setup(props, { emit }) { const { ref, onMounted } = Vue; const api = useApi(); const loading = ref(false); const saving = ref(false); const currentUsername = ref(''); const form = ref({ current_password: '', new_username: '', new_password: '', confirm_password: '', }); async function load() { loading.value = true; const json = await api.getAuthStatus(); if (json) { currentUsername.value = json.username || ''; form.value.new_username = json.username || ''; } loading.value = false; } async function save() { const payload = { current_password: form.value.current_password || '', new_username: (form.value.new_username || '').trim(), new_password: form.value.new_password || '', }; if (!payload.current_password) { ElementPlus.ElMessage.warning('请输入当前密码'); return; } if (!payload.new_username) { ElementPlus.ElMessage.warning('请输入新账号'); return; } if (payload.new_password.length < 8) { ElementPlus.ElMessage.warning('新密码至少 8 位'); return; } if (payload.new_password !== form.value.confirm_password) { ElementPlus.ElMessage.warning('两次输入的新密码不一致'); return; } saving.value = true; const json = await api.changeCredentials(payload); saving.value = false; if (!json) return; currentUsername.value = json.username || payload.new_username; form.value.current_password = ''; form.value.new_password = ''; form.value.confirm_password = ''; form.value.new_username = currentUsername.value; emit('updated', currentUsername.value); window.dispatchEvent(new CustomEvent('webui-auth-updated', { detail: { username: currentUsername.value }, })); ElementPlus.ElMessage.success('账号密码已更新'); } onMounted(load); return { loading, saving, currentUsername, form, save, }; }, template: `
保存账号密码
`, };