You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
2.6 KiB
Vue

<template>
<el-dialog :model-value="visible" class="reset-password-dialog" top="15vh" width="460px" destroy-on-close
:close-on-click-modal="false" @update:model-value="(v) => !v && close()">
<div class="body-wrap">
<div class="body-header">
<span class="body-title">{{ $t('account.resetPassword') }}</span>
<img src="@/assets/image/close-btn.svg" alt="" class="close-btn" @click="close" />
</div>
<div class="reset-password-content">
<p class="confirm-line">
{{ $t('account.confirmReset', { id: ` ${username} ` }) }}
</p>
<p class="default-line">{{ $t('account.defaultPassword') }}</p>
</div>
</div>
<div class="body-footer">
<el-button @click="close">{{ $t('common.cancel') }}</el-button>
<el-button type="primary" :loading="submitting" @click="submit">
{{ $t('account.resetPassword') }}
</el-button>
</div>
</el-dialog>
</template>
<script setup>
import { ref, watch } from "vue";
import { ElMessage } from "element-plus";
import { useI18n } from "vue-i18n";
import { resetAdminAccountPassword } from "@/service/modular/admin";
const { t: $t } = useI18n();
const props = defineProps({
visible: { type: Boolean, default: false },
// 当前点击的表格行数据;用于读取 username
accountData: { type: Object, default: () => ({}) },
});
const emit = defineEmits(["update:visible", "success"]);
const submitting = ref(false);
// 缓存当前要重置的账号,避免 dialog 关闭后 username 丢失
const username = ref("");
watch(
() => [props.visible, props.accountData],
([vis]) => {
if (vis) {
username.value = props.accountData?.username || "";
}
},
{ immediate: true }
);
const close = () => emit("update:visible", false);
const submit = async () => {
if (!props.accountData?.id) return;
submitting.value = true;
try {
await resetAdminAccountPassword(props.accountData.id);
ElMessage.success($t('msg.passwordResetSuccess'));
emit("success");
emit("update:visible", false);
} finally {
submitting.value = false;
}
};
</script>
<style scoped lang="scss">
.reset-password-content {
display: flex;
flex-direction: column;
align-items: center;
gap: 12px;
.confirm-line {
font-weight: 400;
font-size: 16px;
color: #1D2129;
}
.default-line {
background: #EAF3FF;
border-radius: 8px 8px 8px 8px;
font-weight: 400;
font-size: 15px;
color: #3289FB;
padding: 10px 12px;
}
}
</style>
<style lang="scss">
.reset-password-dialog {
min-width: 410px;
max-width: 90vw;
}
</style>