fixbug: 🐛 登录功能完善和已知问题修改

This commit is contained in:
bunny 2024-10-28 16:52:28 +08:00
parent e6e7adda34
commit 5e69aed97e
9 changed files with 84 additions and 38 deletions

View File

@ -3,6 +3,7 @@ import { onMounted, ref, watch } from 'vue';
import { $t } from '@/plugins/i18n';
import { zxcvbn } from '@zxcvbn-ts/core';
import { isAllEmpty } from '@pureadmin/utils';
import { REGEXP_PWD } from '@/views/login/utils/rule';
const props = defineProps({
form: {
@ -11,7 +12,15 @@ const props = defineProps({
});
const rules = {
password: [{ required: true, message: '请输入新密码', trigger: 'blur' }],
password: [
{ required: true, message: '请输入新密码', trigger: 'blur' },
{
type: 'pattern',
message: $t('login.purePassWordRuleReg'),
trigger: ['change', 'blur'],
pattern: REGEXP_PWD,
},
],
};
const pwdProgress = [
{ color: '#e74242', text: '非常弱' },

View File

@ -71,8 +71,8 @@ onMounted(() => {
</Motion>
<!-- 登录表单 -->
<login-form v-if="currentPage === 0" />
<login-email v-if="currentPage === 1" />
<login-form v-if="currentPage === 'default'" />
<login-email v-if="currentPage === 'email'" />
</div>
</div>
</div>

View File

@ -11,7 +11,7 @@ import { message } from '@/utils/message';
import { getTopMenu, initRouter } from '@/router/utils';
import Motion from './utils/motion';
import { ElMessage, FormInstance } from 'element-plus';
import { onBack } from '@/views/login/utils/hooks';
import { currentPage, onBack } from '@/views/login/utils/hooks';
const router = useRouter();
const userStore = useUserStore();
@ -25,6 +25,7 @@ const ruleForm = reactive({
username: '1319900154@qq.com',
password: 'admin123',
emailCode: '1',
type: currentPage.value,
});
/**

View File

@ -22,6 +22,7 @@ const { t } = useI18n();
const ruleForm = reactive({
username: 'bunny',
password: 'admin123',
type: currentPage.value,
});
/**
@ -93,7 +94,7 @@ onBeforeUnmount(() => {
<!-- 邮箱登录 -->
<Motion :delay="300">
<el-form-item>
<el-button class="w-full" size="default" @click="currentPage = 1"> 邮箱登录</el-button>
<el-button class="w-full" size="default" @click="currentPage = 'email'"> 邮箱登录</el-button>
</el-form-item>
</Motion>
</el-form>

View File

@ -1,9 +1,9 @@
import { ref } from 'vue';
// 0普通登录1邮箱登录其中0为普通登录
export const currentPage = ref(0);
export const currentPage = ref('default');
/** 返回到默认登录页面 */
export const onBack = () => {
currentPage.value = 0;
currentPage.value = 'default';
};

View File

@ -1,5 +1,7 @@
import { computed, reactive, ref } from 'vue';
import { $t } from '@/plugins/i18n';
import type { FormRules } from 'element-plus';
import { REGEXP_PWD } from '@/views/login/utils/rule';
// 是否是更新用户信息
export const isAddUserinfo = ref(false);
@ -36,15 +38,40 @@ export const columns: TableColumnList = [
];
// 添加规则
export const rules: any = reactive({
export const rules: any = reactive<FormRules>({
// 用户名
username: [{ required: true, message: `${$t('input')}${$t('adminUser_username')}`, trigger: 'blur' }],
// 密码
password: [{ required: isAddUserinfo, message: `${$t('input')}${$t('adminUser_password')}`, trigger: 'blur' }],
password: [
{
required: isAddUserinfo.value,
message: `${$t('input')}${$t('adminUser_password')}`,
trigger: 'blur',
},
{
type: 'pattern',
message: $t('login.purePassWordRuleReg'),
trigger: ['change', 'blur'],
pattern: REGEXP_PWD,
},
],
// 邮箱
email: [
{ required: true, message: `${$t('input')}${$t('adminUser_email')}`, trigger: 'blur' },
{ type: 'email', message: `${$t('input')}${$t('adminUser_email')}${$t('format_error')}` },
{ required: true, message: `${$t('input')}${$t('adminUser_email')}`, trigger: ['change', 'blur'] },
{
type: 'email',
message: `${$t('input')}${$t('adminUser_email')}${$t('format_error')}`,
trigger: ['change', 'blur'],
},
],
// 手机号
phone: [
{
type: 'pattern',
message: `${$t('input')}${$t('adminUser_phone')}${$t('format_error')}`,
trigger: ['change', 'blur'],
pattern: /^(0|86|17951)?(13[0-9]|15[012356789]|166|17[3678]|18[0-9]|14[57])[0-9]{8}$/,
},
],
// 状态
status: [{ required: true, message: `${$t('input')}${$t('adminUser_status')}`, trigger: 'blur' }],

View File

@ -1,5 +1,5 @@
<script lang="ts" setup>
import { computed, onMounted, ref } from 'vue';
import { onMounted, ref } from 'vue';
import { FormInstance } from 'element-plus';
import { powerCascadeProps, rules } from '@/views/system/power/utils/columns';
import { FormProps } from '@/views/system/power/utils/types';
@ -23,7 +23,6 @@ const props = withDefaults(defineProps<FormProps>(), {
const formRef = ref<FormInstance>();
const form = ref(props.formInline);
const powerStore = usePowerStore();
const datalist = computed(() => handleTree(powerStore.allPowerList));
onMounted(() => {
powerStore.getAllPowers();
@ -38,13 +37,13 @@ defineExpose({ formRef });
<el-cascader v-model="form.parentId" :options="handleTree(powerStore.allPowerList)" :props="powerCascadeProps" class="w-full" clearable filterable show-all-levels />
</el-form-item>
<el-form-item :label="$t('power_powerCode')" prop="powerCode">
<el-input v-model="form.powerCode" autocomplete="off" type="text" />
<el-input v-model="form.powerCode" :placeholder="$t('power_powerCode')" autocomplete="off" type="text" />
</el-form-item>
<el-form-item :label="$t('power_powerName')" prop="powerName">
<el-input v-model="form.powerName" autocomplete="off" type="text" />
<el-input v-model="form.powerName" :placeholder="$t('power_powerName')" autocomplete="off" type="text" />
</el-form-item>
<el-form-item :label="$t('power_requestUrl')" prop="requestUrl">
<el-input v-model="form.requestUrl" autocomplete="off" type="text" />
<el-input v-model="form.requestUrl" :placeholder="$t('inputRequestUrlTip')" autocomplete="off" type="text" />
</el-form-item>
</el-form>
</template>

View File

@ -1,5 +1,6 @@
import { reactive } from 'vue';
import { $t } from '@/plugins/i18n';
import type { FormRules } from 'element-plus';
// 表格列
export const columns: TableColumnList = [
@ -19,11 +20,13 @@ export const columns: TableColumnList = [
];
// 添加规则
export const rules = reactive({
export const rules = reactive<FormRules>({
// 权限编码
powerCode: [{ required: true, message: `${$t('input')}${$t('power_powerCode')}`, trigger: 'blur' }],
// 权限名称
powerName: [{ required: true, message: `${$t('input')}${$t('power_powerName')}`, trigger: 'blur' }],
// 请求地址
requestUrl: [{ type: 'pattern', message: $t('inputRequestUrlTip'), pattern: /^\/.*/, trigger: 'change' }],
});
// 权限树形结构props

View File

@ -2,11 +2,12 @@ import { addDialog } from '@/components/BaseDialog/index';
import RoleDialog from '@/views/system/role/role-dialog.vue';
import { useRoleStore } from '@/store/system/role';
import { h, ref } from 'vue';
import { messageBox } from '@/utils/message';
import { message, messageBox } from '@/utils/message';
import type { FormItemProps } from '@/views/system/role/utils/types';
import { $t } from '@/plugins/i18n';
import { fetchGetPowerListByRoleId } from '@/api/v1/power';
import { isAllEmpty } from '@pureadmin/utils';
import DeleteBatchDialog from '@/components/Table/DeleteBatchDialog.vue';
// 表格ref
export const tableRef = ref();
@ -33,9 +34,7 @@ export async function onSearch() {
roleStore.loading = false;
}
/**
* *
*/
/** 添加角色 */
export function onAdd() {
addDialog({
title: `${$t('addNew')}${$t('role')}`,
@ -86,9 +85,7 @@ export function onUpdate(row: any) {
});
}
/**
* *
*/
/** 删除角色 */
export const onDelete = async (row: any) => {
const id = row.id;
@ -106,24 +103,33 @@ export const onDelete = async (row: any) => {
await onSearch();
};
/**
*
*/
/** 批量删除 */
export const onDeleteBatch = async () => {
const ids = deleteIds.value;
const formDeletedBatchRef = ref();
addDialog({
title: $t('deleteBatchTip'),
width: '30%',
props: { formInline: { confirmText: '' } },
draggable: true,
fullscreenIcon: true,
closeOnClickModal: false,
contentRenderer: () => h(DeleteBatchDialog, { ref: formDeletedBatchRef }),
beforeSure: (done, { options }) => {
formDeletedBatchRef.value.formDeletedBatchRef.validate(async (valid: any) => {
if (!valid) return;
// 是否确认删除
const result = await messageBox({
title: $t('confirmDelete'),
showMessage: false,
confirmMessage: undefined,
cancelMessage: $t('confirmDelete'),
const text = options.props.formInline.confirmText.toLowerCase();
if (text === 'yes' || text === 'y') {
// 删除数据
await roleStore.deleteRole(ids);
await onSearch();
done();
} else message($t('deleteBatchTip'), { type: 'warning' });
});
},
});
if (!result) return;
// 删除数据
await roleStore.deleteRole(ids);
await onSearch();
};
/**