diff --git a/src/api/login/index.ts b/src/api/login/index.ts index 5c8c1de..3cd6bbb 100644 --- a/src/api/login/index.ts +++ b/src/api/login/index.ts @@ -4,13 +4,20 @@ import type { UserType } from './types' interface RoleParams { roleName: string } - +// 登录 export const loginApi = (data: UserType) => { return request.post({ url: '/system/user/login?username=' + data.username + '&password=' + data.password, data }) } +// 注册 +export const registerApi = (data) => { + return request.post({ + url: '/system/user/register', + data + }) +} export const loginOutApi = (): Promise => { return request.get({ url: '/system/user/logout' }) diff --git a/src/components/TagsView/src/TagsView.vue b/src/components/TagsView/src/TagsView.vue index 345d902..ad74981 100644 --- a/src/components/TagsView/src/TagsView.vue +++ b/src/components/TagsView/src/TagsView.vue @@ -18,6 +18,12 @@ const { emitter } = useEmitt() emitter.on('closeCurrentTab', () => { closeSelectedTag(unref(selectedTag) as RouteLocationNormalizedLoaded) }) +emitter.on('refreshCurrentTab', () => { + refreshSelectedTag(unref(selectedTag) as RouteLocationNormalizedLoaded) +}) +emitter.on('refreshSelectedTagWithQuery', (query) => { + refreshSelectedTagWithQuery(unref(selectedTag) as RouteLocationNormalizedLoaded, query) +}) emitter.on('closeTab', (view) => { closeSelectedTag(view as RouteLocationNormalizedLoaded) @@ -102,6 +108,18 @@ const refreshSelectedTag = async (view?: RouteLocationNormalizedLoaded) => { }) } +// 重新加载 +const refreshSelectedTagWithQuery = async (view?: RouteLocationNormalizedLoaded, query) => { + if (!view) return + tagsViewStore.delCachedView() + const { path } = view + await nextTick() + replace({ + path: '/redirect' + path, + query: query + }) +} + // 关闭左侧 const closeLeftTags = () => { tagsViewStore.delLeftViews(unref(selectedTag) as RouteLocationNormalizedLoaded) diff --git a/src/modules/system/api/index.ts b/src/modules/system/api/index.ts index ef3c3e3..87b8f66 100644 --- a/src/modules/system/api/index.ts +++ b/src/modules/system/api/index.ts @@ -59,9 +59,14 @@ export const user = Object.assign({}, COMMON_METHOD, { disable(id) { return request.put({ url: this.serveUrl + id + '/disable' }) }, + // 管理员重置密码 resetPassword(id) { return request.put({ url: this.serveUrl + id + '/resetPassword' }) }, + // 自助重置密码,用于忘记密码 + selfResetPassword(code, password) { + return request.put({ url: this.serveUrl + 'selfResetPassword', params: { code, password } }) + }, unlock(id) { return request.put({ url: this.serveUrl + id + '/unlock' }) }, @@ -111,6 +116,14 @@ export const user = Object.assign({}, COMMON_METHOD, { // 导出 export(params) { return request.download({ url: this.serveUrl + 'exportExcel', params }) + }, + // 找回密码 + retrievePassword(email) { + return request.post({ url: this.serveUrl + 'retrievePassword', params: { email } }) + }, + //根据授权码获取账号 + getAccoutByCode(code) { + return request.get({ url: this.serveUrl + 'getAccoutByCode', params: { code } }) } // // 高级查询初始化 // initAdvanceQuery() { diff --git a/src/permission.ts b/src/permission.ts index 8f58cbd..3f3fe7d 100644 --- a/src/permission.ts +++ b/src/permission.ts @@ -18,7 +18,7 @@ const { start, done } = useNProgress() const { loadStart, loadDone } = usePageLoading() -const whiteList = ['/login'] // 不重定向白名单 +const whiteList = ['/login', '/selfResetPassword'] // 不重定向白名单 router.beforeEach(async (to, from, next) => { start() diff --git a/src/router/index.ts b/src/router/index.ts index 33f0135..5dfc267 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -43,6 +43,16 @@ export const constantRouterMap: AppRouteRecordRaw[] = [ noTagsView: true } }, + { + path: '/selfResetPassword', + component: () => import('@/views/Login/components/SelfResetPassword.vue'), + name: 'SelfResetPassword', + meta: { + hidden: true, + title: '重设密码', + noTagsView: true + } + }, { path: '/404', component: () => import('@/views/Error/404.vue'), diff --git a/src/store/modules/app.ts b/src/store/modules/app.ts index 8bb487f..1bee3a1 100644 --- a/src/store/modules/app.ts +++ b/src/store/modules/app.ts @@ -35,6 +35,7 @@ interface AppState { footer: boolean theme: ThemeTypes fixedMenu: boolean + enableRegister: boolean } export const useAppStore = defineStore('app', { @@ -61,7 +62,7 @@ export const useAppStore = defineStore('app', { footer: true, // 显示页脚 greyMode: false, // 是否开始灰色模式,用于特殊悼念日 fixedMenu: wsCache.get('fixedMenu') || false, // 是否固定菜单 - + enableRegister: false, // 是否启用注册 layout: wsCache.get('layout') || 'classic', // layout布局 isDark: wsCache.get('isDark') || false, // 是否是暗黑模式 currentSize: wsCache.get('default') || 'default', // 组件尺寸 @@ -169,6 +170,9 @@ export const useAppStore = defineStore('app', { }, getFooter(): boolean { return this.footer + }, + getEnableRegister(): boolean { + return this.enableRegister } }, actions: { diff --git a/src/utils/index.ts b/src/utils/index.ts index 6278af4..bc87691 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -153,6 +153,16 @@ export function closeCurrentTab() { emitter.emit('closeCurrentTab') } +/** + * 刷新当前tab页 + */ +export function refreshCurrentTab() { + emitter.emit('refreshCurrentTab') +} +export function refreshSelectedTagWithQuery(query) { + emitter.emit('refreshCurrentTab', query) +} + export function closeTab(view) { emitter.emit('closeTab', view) } diff --git a/src/views/Login/Login.vue b/src/views/Login/Login.vue index 4b738cf..3402dbc 100644 --- a/src/views/Login/Login.vue +++ b/src/views/Login/Login.vue @@ -1,5 +1,5 @@