diff --git a/.env.localhost b/.env.localhost index 1104cf0..b919d0f 100644 --- a/.env.localhost +++ b/.env.localhost @@ -2,7 +2,7 @@ VITE_PUBLIC_PATH = '/' # 是否启用MOCK -VITE_APP_USE_MOCK = true +VITE_APP_USE_MOCK = false # proxy VITE_PROXY = [["/api-local","http://127.0.0.1:8002/api"],["/api-mock","http://127.0.0.1:8003"]] diff --git a/src/api/login/index.js b/src/api/login/index.js index ad84212..66f060a 100644 --- a/src/api/login/index.js +++ b/src/api/login/index.js @@ -13,6 +13,17 @@ export function userLogin(data = {}) { }) } +/** + * params + * @returns 当前登录人信息 + */ +export function getUser() { + return request({ + url: '/index/getUserInfo', + method: 'get' + }) +} + /** * 获取验证码 * @returns 验证码图片 diff --git a/src/assets/back/form.png b/src/assets/back/form.png new file mode 100644 index 0000000..2ee5810 Binary files /dev/null and b/src/assets/back/form.png differ diff --git a/src/assets/back/login.png b/src/assets/back/login.png new file mode 100644 index 0000000..a9485c9 Binary files /dev/null and b/src/assets/back/login.png differ diff --git a/src/assets/icon/password.png b/src/assets/icon/password.png new file mode 100644 index 0000000..dc37f02 Binary files /dev/null and b/src/assets/icon/password.png differ diff --git a/src/assets/icon/username.png b/src/assets/icon/username.png new file mode 100644 index 0000000..c697fd7 Binary files /dev/null and b/src/assets/icon/username.png differ diff --git a/src/assets/icon/verify.png b/src/assets/icon/verify.png new file mode 100644 index 0000000..32910b4 Binary files /dev/null and b/src/assets/icon/verify.png differ diff --git a/src/layout/components/Header/index.vue b/src/layout/components/Header/index.vue index f29b85d..e940b5f 100644 --- a/src/layout/components/Header/index.vue +++ b/src/layout/components/Header/index.vue @@ -1,17 +1,79 @@ @@ -19,8 +81,11 @@ export default defineComponent({ .layout__header { padding: 0 20px; display: flex; - justify-content: flex-end; align-items: center; + justify-content: space-between; +} +.header__logo{ + height: 18px; } .user_msg { display: flex; diff --git a/src/store/modules/user.js b/src/store/modules/user.js index f3e2a74..0beeae7 100644 --- a/src/store/modules/user.js +++ b/src/store/modules/user.js @@ -1,6 +1,10 @@ import { defineStore } from 'pinia' -import { getUser } from '@/api/user' -import { removeToken } from '@/utils/token' +import { userLogin, loginOut } from '@/api/login' +import { getUser } from '@/api/login/index.js' +import { setToken, removeToken } from '@/utils/token' + +import { useTagsMenuStore } from './tagsMenu.js' +import { usePermissionStore } from './permission.js' export const useUserStore = defineStore('user', { persist: true, @@ -15,24 +19,51 @@ export const useUserStore = defineStore('user', { } }, actions: { - async getUserInfo() { + /* 登录 */ + async getLoginToken(form) { try { - const res = await getUser() + const res = await userLogin(form) if (res.code === 0) { - this.userInfo = res.data - return Promise.resolve(res.msg) + /* 设置token */ + setToken(res.data.access_token) + this.getUserInfo() } else { - return Promise.reject(res.msg) + return Promise.reject(res) } } catch (error) { - console.error(error) - return Promise.reject(error.msg) + return Promise.reject(error) } }, - logout() { - removeToken() - this.userInfo = {} + /* 获取用户信息 */ + async getUserInfo() { + const res = await getUser() + if (res.code === 0) { + this.setUserInfo(res.data) + } }, + async userLogout() { + try { + const res = await loginOut() + if (res.code === 0) { + removeToken() + this.reset() + return Promise.resolve(res) + } else { + return Promise.reject(res) + } + } catch (error) { + return Promise.reject(error) + } + }, + + reset() { + this.$reset() + const tagsMenuStore = useTagsMenuStore() + const permissionStore = usePermissionStore() + tagsMenuStore.$reset() + permissionStore.$reset() + }, + setUserInfo(userInfo = {}) { this.userInfo = { ...this.userInfo, ...userInfo } } diff --git a/src/utils/http/interceptors.js b/src/utils/http/interceptors.js index 2c87253..57fa90c 100644 --- a/src/utils/http/interceptors.js +++ b/src/utils/http/interceptors.js @@ -34,11 +34,12 @@ export function setupInterceptor(service) { service.interceptors.response.use( (response) => { + const { method } = response?.config const { code } = response?.data const { currentRoute } = router switch (code) { case 0: - if (!response.config.hideMessage) { + if (method !== 'get') { $message.success(response.data.msg) } break diff --git a/src/views/login/index.vue b/src/views/login/index.vue index b9d4976..eafbda6 100644 --- a/src/views/login/index.vue +++ b/src/views/login/index.vue @@ -1,47 +1,68 @@ + .container__right{ + flex: 1; + padding: 137px 0 236px 0; + .right__title{ + font-size: 44px; + font-family: PingFang SC-Semibold, PingFang SC; + font-weight: 600; + color: #1890FF; + text-align: center; + } + .right__form{ + padding: 34px 0 20px 0; + .n-form{ + margin: 0 auto; + } + .n-input:not(.n-input--autosize) { + width: 100%; + height: 40px; + line-height: 40px; + background-color: transparent; + } + ::v-deep(.n-input__suffix){ + cursor: pointer; + transform: translate(12px); + } + .captcha_img { + width: 90px; + height: 100%; + border-left: 1px solid rgb(224, 224, 230); + border-radius: 4px; + } + } + .right__button{ + width: 300px; + height: 40px; + border-radius: 4px; + cursor: pointer; + background-color: #1890ff; + line-height: 40px; + text-align: center; + color: #fff; + font-size: 16px; + margin: 0 auto; + } + } +} +.login__copyright { + font-size: 20px; + color: #fff; + position: absolute; + bottom: 16px; +} + +@media screen and (max-width: 1200px) { + .login__container{ + max-width: 730px; + } + .container__left{ + display: none; + } +} + diff --git a/src/views/system/user/info.js b/src/views/system/user/info.js index e265d8d..8ac87ae 100644 --- a/src/views/system/user/info.js +++ b/src/views/system/user/info.js @@ -6,7 +6,7 @@ const getRolesOption = async function() { const res = await getRoleAll() rolesOptions.value = dataToSelect(res.data, { label: 'name', value: 'id' }) } -getRolesOption() +// getRolesOption() const data = [ { label: '用户账号',