fixbug: 🐛 登录功能完善和已知问题修改
This commit is contained in:
parent
e6e7adda34
commit
5e69aed97e
|
@ -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: '非常弱' },
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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,
|
||||
});
|
||||
|
||||
/**
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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';
|
||||
};
|
||||
|
|
|
@ -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' }],
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue