Showing
19 changed files
with
248 additions
and
218 deletions
| ... | ... | @@ -2,22 +2,27 @@ module.exports = { |
| 2 | 2 | root: true, |
| 3 | 3 | parser: 'vue-eslint-parser', |
| 4 | 4 | globals: { |
| 5 | - postMessage: true | |
| 5 | + postMessage: true, | |
| 6 | 6 | }, |
| 7 | 7 | parserOptions: { |
| 8 | 8 | parser: '@typescript-eslint/parser', |
| 9 | 9 | sourceType: 'module', |
| 10 | 10 | ecmaFeatures: { |
| 11 | 11 | jsx: true, |
| 12 | - tsx: true | |
| 13 | - } | |
| 12 | + tsx: true, | |
| 13 | + }, | |
| 14 | 14 | }, |
| 15 | 15 | env: { |
| 16 | - node: true, | |
| 16 | + 'node': true, | |
| 17 | 17 | // The Follow config only works with eslint-plugin-vue v8.0.0+ |
| 18 | - 'vue/setup-compiler-macros': true | |
| 18 | + 'vue/setup-compiler-macros': true, | |
| 19 | 19 | }, |
| 20 | - extends: ['plugin:vue/vue3-essential', 'eslint:recommended'], | |
| 20 | + extends: [ | |
| 21 | + 'plugin:vue/vue3-essential', | |
| 22 | + 'eslint:recommended', | |
| 23 | + 'plugin:import/typescript', | |
| 24 | + 'plugin:@typescript-eslint/recommended', | |
| 25 | + ], | |
| 21 | 26 | rules: { |
| 22 | 27 | 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', |
| 23 | 28 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', |
| ... | ... | @@ -25,6 +30,6 @@ module.exports = { |
| 25 | 30 | 'vue/no-unused-vars': 'off', |
| 26 | 31 | 'vue/multi-word-component-names': 'off', |
| 27 | 32 | 'vue/valid-template-root': 'off', |
| 28 | - 'vue/no-mutating-props': 'off' | |
| 29 | - } | |
| 33 | + 'vue/no-mutating-props': 'off', | |
| 34 | + }, | |
| 30 | 35 | } | ... | ... |
build/external/globConfig/useGlobSetting.ts
deleted
100644 → 0
| 1 | -import { getGlobalConfigName } from "./getGlobConfigName"; | |
| 2 | - | |
| 3 | - | |
| 4 | -export function getAppEnvConfig() { | |
| 5 | - const ENV_NAME = getGlobalConfigName(import.meta.env); | |
| 6 | - | |
| 7 | - const ENV = (import.meta.env.DEV | |
| 8 | - ? // Get the global configuration (the configuration will be extracted independently when packaging) | |
| 9 | - (import.meta.env as unknown as GlobEnvConfig) | |
| 10 | - : window[ENV_NAME as any]) as unknown as GlobEnvConfig; | |
| 11 | - const { | |
| 12 | - VITE_GLOB_APP_TITLE, | |
| 13 | - VITE_GLOB_APP_SHORT_NAME, | |
| 14 | - VITE_GLOB_CONTENT_SECURITY_POLICY, | |
| 15 | - } = ENV; | |
| 16 | - | |
| 17 | - if (!/^[a-zA-Z\_]*$/.test(VITE_GLOB_APP_SHORT_NAME)) { | |
| 18 | - console.warn( | |
| 19 | - `VITE_GLOB_APP_SHORT_NAME Variables can only be characters/underscores, please modify in the environment variables and re-running.` | |
| 20 | - ); | |
| 21 | - } | |
| 22 | - | |
| 23 | - return { | |
| 24 | - VITE_GLOB_APP_TITLE, | |
| 25 | - VITE_GLOB_APP_SHORT_NAME, | |
| 26 | - VITE_GLOB_CONTENT_SECURITY_POLICY, | |
| 27 | - }; | |
| 28 | -} | |
| 29 | - | |
| 30 | -export const useGlobSetting = (): Readonly<GlobConfig> => { | |
| 31 | - const { | |
| 32 | - VITE_GLOB_APP_TITLE, | |
| 33 | - VITE_GLOB_APP_SHORT_NAME, | |
| 34 | - VITE_GLOB_CONTENT_SECURITY_POLICY, | |
| 35 | - } = getAppEnvConfig(); | |
| 36 | - | |
| 37 | - if (!/[a-zA-Z\_]*/.test(VITE_GLOB_APP_SHORT_NAME)) { | |
| 38 | - console.warn( | |
| 39 | - `VITE_GLOB_APP_SHORT_NAME Variables can only be characters/underscores, please modify in the environment variables and re-running.` | |
| 40 | - ); | |
| 41 | - } | |
| 42 | - | |
| 43 | - // Take global configuration | |
| 44 | - const glob: Readonly<GlobConfig> = { | |
| 45 | - title: VITE_GLOB_APP_TITLE, | |
| 46 | - securityPolicy: VITE_GLOB_CONTENT_SECURITY_POLICY, | |
| 47 | - }; | |
| 48 | - | |
| 49 | - return glob as Readonly<GlobConfig>; | |
| 50 | -}; |
| ... | ... | @@ -53,7 +53,7 @@ |
| 53 | 53 | "@types/node": "^16.11.26", |
| 54 | 54 | "@types/qs": "^6.9.7", |
| 55 | 55 | "@types/three": "^0.144.0", |
| 56 | - "@typescript-eslint/eslint-plugin": "^5.18.0", | |
| 56 | + "@typescript-eslint/eslint-plugin": "^5.28.0", | |
| 57 | 57 | "@typescript-eslint/parser": "^5.18.0", |
| 58 | 58 | "@vicons/carbon": "^0.12.0", |
| 59 | 59 | "@vicons/ionicons5": "~0.11.0", | ... | ... |
| ... | ... | @@ -12,7 +12,7 @@ specifiers: |
| 12 | 12 | '@types/node': ^16.11.26 |
| 13 | 13 | '@types/qs': ^6.9.7 |
| 14 | 14 | '@types/three': ^0.144.0 |
| 15 | - '@typescript-eslint/eslint-plugin': ^5.18.0 | |
| 15 | + '@typescript-eslint/eslint-plugin': ^5.28.0 | |
| 16 | 16 | '@typescript-eslint/parser': ^5.18.0 |
| 17 | 17 | '@vicons/carbon': ^0.12.0 |
| 18 | 18 | '@vicons/ionicons5': ~0.11.0 | ... | ... |
| ... | ... | @@ -7,14 +7,11 @@ export const useGlobSetting = (): Readonly<GlobConfig> => { |
| 7 | 7 | VITE_GLOB_API_URL, |
| 8 | 8 | VITE_GLOB_APP_SHORT_NAME, |
| 9 | 9 | VITE_GLOB_API_URL_PREFIX, |
| 10 | - VITE_GLOB_UPLOAD_URL, | |
| 11 | - VITE_GLOB_CONFIGURATION, | |
| 10 | + VITE_GLOB_UPLOAD_URL, | |
| 12 | 11 | VITE_GLOB_WEB_SOCKET, |
| 13 | - VITE_GLOB_CONTENT_SECURITY_POLICY, | |
| 14 | - VITE_GLOB_ALARM_NOTIFY_POLLING_INTERVAL_TIME, | |
| 15 | - VITE_GLOB_ALARM_NOTIFY_DURATION, | |
| 12 | + VITE_GLOB_CONTENT_SECURITY_POLICY, | |
| 16 | 13 | } = getAppEnvConfig(); |
| 17 | - | |
| 14 | + | |
| 18 | 15 | if (!/[a-zA-Z_]*/.test(VITE_GLOB_APP_SHORT_NAME)) { |
| 19 | 16 | console.warn( |
| 20 | 17 | `VITE_GLOB_APP_SHORT_NAME Variables can only be characters/underscores, please modify in the environment variables and re-running.` |
| ... | ... | @@ -27,12 +24,10 @@ export const useGlobSetting = (): Readonly<GlobConfig> => { |
| 27 | 24 | apiUrl: VITE_GLOB_API_URL, |
| 28 | 25 | shortName: VITE_GLOB_APP_SHORT_NAME, |
| 29 | 26 | urlPrefix: VITE_GLOB_API_URL_PREFIX, |
| 30 | - uploadUrl: VITE_GLOB_UPLOAD_URL, | |
| 31 | - configurationPrefix: VITE_GLOB_CONFIGURATION, | |
| 27 | + uploadUrl: VITE_GLOB_UPLOAD_URL, | |
| 32 | 28 | socketUrl: VITE_GLOB_WEB_SOCKET, |
| 33 | 29 | securityPolicy: VITE_GLOB_CONTENT_SECURITY_POLICY, |
| 34 | - alarmNotifyDuration: VITE_GLOB_ALARM_NOTIFY_DURATION, | |
| 35 | - alarmPollingInterval: VITE_GLOB_ALARM_NOTIFY_POLLING_INTERVAL_TIME, | |
| 36 | 30 | }; |
| 31 | + | |
| 37 | 32 | return glob as Readonly<GlobConfig>; |
| 38 | 33 | }; | ... | ... |
| ... | ... | @@ -12,7 +12,7 @@ import { |
| 12 | 12 | RefreshTokenParams, |
| 13 | 13 | SmsLoginParams, |
| 14 | 14 | } from '@/api/external/sys/model/userModel'; |
| 15 | -import { doRefreshToken, loginApi } from '@/api/external/sys/user'; | |
| 15 | +import { doRefreshToken, getMyInfo, loginApi } from '@/api/external/sys/user'; | |
| 16 | 16 | import router from '@/router'; |
| 17 | 17 | import { createLocalStorage } from '@/utils/external/cache'; |
| 18 | 18 | import { useI18n } from 'vue-i18n'; |
| ... | ... | @@ -133,12 +133,25 @@ export const useUserStore = defineStore({ |
| 133 | 133 | try { |
| 134 | 134 | const { goHome = true, mode, ...loginParams } = params; |
| 135 | 135 | const data = await loginApi(loginParams, mode); |
| 136 | + return this.process(data, goHome); | |
| 136 | 137 | } catch (error) { |
| 137 | 138 | return Promise.reject(error); |
| 138 | 139 | } |
| 139 | 140 | }, |
| 140 | 141 | async process(data: LoginResultModel, goHome?: boolean) { |
| 142 | + const { token, refreshToken } = data; | |
| 143 | + this.storeToken(token, refreshToken); | |
| 144 | + // get user info | |
| 145 | + const userInfo = await this.getMyUserInfoAction(); | |
| 141 | 146 | |
| 147 | + const sessionTimeout = this.sessionTimeout; | |
| 148 | + if (sessionTimeout) { | |
| 149 | + this.setSessionTimeout(false); | |
| 150 | + } else if (goHome) { | |
| 151 | + | |
| 152 | + await router.replace(userInfo.homePath || PageEnum.BASE_HOME); | |
| 153 | + } | |
| 154 | + return userInfo; | |
| 142 | 155 | }, |
| 143 | 156 | async smsCodelogin( |
| 144 | 157 | params: SmsLoginParams & { |
| ... | ... | @@ -149,7 +162,12 @@ export const useUserStore = defineStore({ |
| 149 | 162 | |
| 150 | 163 | }, |
| 151 | 164 | async getMyUserInfoAction() { |
| 152 | - | |
| 165 | + const userInfo = await getMyInfo(); | |
| 166 | + this.setUserInfo(userInfo); | |
| 167 | + const { roles } = userInfo; | |
| 168 | + const roleList = roles.map((item) => item) as RoleEnum[]; | |
| 169 | + this.setRoleList(roleList); | |
| 170 | + return userInfo; | |
| 153 | 171 | }, |
| 154 | 172 | /** |
| 155 | 173 | * @description: logout | ... | ... |
| 1 | 1 | import type { GlobEnvConfig } from '/#/external/config'; |
| 2 | - | |
| 3 | -import pkg from '../../../../package.json'; | |
| 4 | -import { getGlobalConfigName } from 'build/external/globConfig/getGlobConfigName'; | |
| 2 | + | |
| 3 | +import pkg from '../../../../package.json'; | |
| 4 | +import { getGlobalConfigName } from '../../../../build/external/globConfig/getGlobConfigName'; | |
| 5 | 5 | |
| 6 | 6 | export function getCommonStoragePrefix() { |
| 7 | 7 | const { VITE_GLOB_APP_SHORT_NAME } = getAppEnvConfig(); |
| ... | ... | @@ -18,8 +18,9 @@ export function getAppEnvConfig() { |
| 18 | 18 | |
| 19 | 19 | const ENV = (import.meta.env.DEV |
| 20 | 20 | ? // Get the global configuration (the configuration will be extracted independently when packaging) |
| 21 | - (import.meta.env as unknown as GlobEnvConfig) | |
| 21 | + (import.meta.env as unknown as GlobEnvConfig) | |
| 22 | 22 | : window[ENV_NAME as any]) as unknown as GlobEnvConfig; |
| 23 | + | |
| 23 | 24 | const { |
| 24 | 25 | VITE_GLOB_APP_TITLE, |
| 25 | 26 | VITE_GLOB_API_URL, | ... | ... |
| 1 | 1 | import type { ErrorMessageMode } from '/#/external/axios'; |
| 2 | 2 | import { useUserStoreWithOut } from '@/store/external/module/user'; |
| 3 | -import { useI18n } from 'vue-i18n'; | |
| 4 | -import { useMessage } from 'naive-ui'; | |
| 5 | 3 | |
| 6 | -const { error } = useMessage() | |
| 7 | 4 | export function checkStatus( |
| 8 | 5 | status: number, |
| 9 | 6 | msg: string, |
| 10 | 7 | errorMessageMode: ErrorMessageMode = 'message' |
| 11 | -): void { | |
| 12 | - const { t } = useI18n(); | |
| 8 | +): void { | |
| 13 | 9 | const userStore = useUserStoreWithOut(); |
| 14 | 10 | let errMessage = msg; |
| 15 | 11 | switch (status) { |
| ... | ... | @@ -20,8 +16,9 @@ export function checkStatus( |
| 20 | 16 | // Jump to the login page if not logged in, and carry the path of the current page |
| 21 | 17 | // Return to the current page after successful login. This step needs to be operated on the login page. |
| 22 | 18 | case 401: |
| 23 | - errMessage = ''; | |
| 24 | - userStore.logout() | |
| 19 | + errMessage = '没有权限'; | |
| 20 | + userStore.setToken(undefined); | |
| 21 | + userStore.setSessionTimeout(true); | |
| 25 | 22 | break; |
| 26 | 23 | case 403: |
| 27 | 24 | errMessage = '未授权'; |
| ... | ... | @@ -56,8 +53,10 @@ export function checkStatus( |
| 56 | 53 | break; |
| 57 | 54 | default: |
| 58 | 55 | } |
| 59 | - if (errMessage) { | |
| 56 | + | |
| 57 | + if (errMessage) { | |
| 60 | 58 | if (errorMessageMode === 'message') { |
| 59 | + const { error } = window['$message'] | |
| 61 | 60 | error(errMessage); |
| 62 | 61 | } |
| 63 | 62 | } | ... | ... |
| ... | ... | @@ -14,12 +14,10 @@ import { setObjToUrlParams, deepMerge } from '@/utils/external'; |
| 14 | 14 | import { joinTimestamp, formatRequestDate } from './helper'; |
| 15 | 15 | import { PageEnum } from '@/enums/external/pageEnum'; |
| 16 | 16 | import router from '@/router'; |
| 17 | -import { useDialog } from 'naive-ui'; | |
| 18 | 17 | |
| 19 | 18 | const globSetting = useGlobSetting(); |
| 20 | 19 | const urlPrefix = globSetting.urlPrefix; |
| 21 | 20 | |
| 22 | -const { success, error } = useDialog() | |
| 23 | 21 | /** |
| 24 | 22 | * @description: 数据处理,方便区分多种处理方式 |
| 25 | 23 | */ |
| ... | ... | @@ -47,6 +45,7 @@ const transform: AxiosTransform = { |
| 47 | 45 | if (apiUrl && isString(apiUrl)) { |
| 48 | 46 | config.url = `${apiUrl}${config.url}`; |
| 49 | 47 | } |
| 48 | + | |
| 50 | 49 | const params = config.params || {}; |
| 51 | 50 | const data = config.data || false; |
| 52 | 51 | formatDate && data && !isString(data) && formatRequestDate(data); | ... | ... |
src/utils/external/to.ts
0 → 100644
| 1 | +/** | |
| 2 | + * @description use to function capture await throw error | |
| 3 | + * @param promise | |
| 4 | + * @param errorExt - Additional Information you can pass to the err object | |
| 5 | + */ | |
| 6 | +export function to<T, E = any>( | |
| 7 | + promise: Promise<T>, | |
| 8 | + errorExt?: string | |
| 9 | +): Promise<[Nullable<E>, T | undefined]> { | |
| 10 | + return promise | |
| 11 | + .then((data) => [null, data] as [null, T]) | |
| 12 | + .catch((err) => { | |
| 13 | + if (errorExt) { | |
| 14 | + const parsedError = Object.assign({}, err, errorExt) | |
| 15 | + return [parsedError, undefined] | |
| 16 | + } | |
| 17 | + return [err, undefined] | |
| 18 | + }); | |
| 19 | +} | ... | ... |
src/views/login/external/useLogin.ts
0 → 100644
| 1 | +import { PageEnum } from "@/enums/pageEnum" | |
| 2 | +import { useUserStore } from "@/store/external/module/user" | |
| 3 | +import { cryptoEncode, routerTurnByName, setLocalStorage } from "@/utils" | |
| 4 | +import { to } from "@/utils/external/to" | |
| 5 | +import { StorageEnum } from '@/enums/storageEnum' | |
| 6 | +import { ref } from "vue" | |
| 7 | + | |
| 8 | +export const useLogin = () => { | |
| 9 | + const userStore = useUserStore() | |
| 10 | + const t = window['$t'] | |
| 11 | + const loading = ref(false) | |
| 12 | + | |
| 13 | + const login = async (params: Record<'password' | 'username', string>) => { | |
| 14 | + loading.value = true | |
| 15 | + const [err, data] = await to<AwaitToResult<typeof userStore['login']>>(userStore.login({ | |
| 16 | + ...params, | |
| 17 | + mode: 'message' | |
| 18 | + })) | |
| 19 | + loading.value = false | |
| 20 | + if (err) { | |
| 21 | + return | |
| 22 | + } | |
| 23 | + | |
| 24 | + setLocalStorage( | |
| 25 | + StorageEnum.GO_LOGIN_INFO_STORE, | |
| 26 | + cryptoEncode( | |
| 27 | + JSON.stringify(params) | |
| 28 | + ) | |
| 29 | + ) | |
| 30 | + | |
| 31 | + window['$message'].success(`${t('login.login_success')}!`) | |
| 32 | + routerTurnByName(PageEnum.BASE_HOME_NAME, true) | |
| 33 | + } | |
| 34 | + | |
| 35 | + return { login, loading } | |
| 36 | +} | ... | ... |
| ... | ... | @@ -24,18 +24,9 @@ |
| 24 | 24 | </layout-header> |
| 25 | 25 | <div class="go-login"> |
| 26 | 26 | <div class="go-login-carousel"> |
| 27 | - <n-carousel | |
| 28 | - autoplay | |
| 29 | - dot-type="line" | |
| 30 | - :interval="Number(carouselInterval)" | |
| 31 | - > | |
| 32 | - <img | |
| 33 | - v-for="(item, i) in carouselImgList" | |
| 34 | - :key="i" | |
| 35 | - class="go-login-carousel-img" | |
| 36 | - :src="getImageUrl(item, 'login')" | |
| 37 | - alt="image" | |
| 38 | - /> | |
| 27 | + <n-carousel autoplay dot-type="line" :interval="Number(carouselInterval)"> | |
| 28 | + <img v-for="(item, i) in carouselImgList" :key="i" class="go-login-carousel-img" | |
| 29 | + :src="getImageUrl(item, 'login')" alt="image" /> | |
| 39 | 30 | </n-carousel> |
| 40 | 31 | </div> |
| 41 | 32 | <div class="login-account"> |
| ... | ... | @@ -43,24 +34,11 @@ |
| 43 | 34 | <n-collapse-transition :appear="true" :show="show"> |
| 44 | 35 | <n-card class="login-account-card" :title="$t('login.desc')"> |
| 45 | 36 | <div class="login-account-top"> |
| 46 | - <img | |
| 47 | - class="login-account-top-logo" | |
| 48 | - src="~@/assets/images/login/input.png" | |
| 49 | - alt="展示图片" | |
| 50 | - /> | |
| 37 | + <img class="login-account-top-logo" src="~@/assets/images/login/input.png" alt="展示图片" /> | |
| 51 | 38 | </div> |
| 52 | - <n-form | |
| 53 | - ref="formRef" | |
| 54 | - label-placement="left" | |
| 55 | - size="large" | |
| 56 | - :model="formInline" | |
| 57 | - :rules="rules" | |
| 58 | - > | |
| 39 | + <n-form ref="formRef" label-placement="left" size="large" :model="formInline" :rules="rules"> | |
| 59 | 40 | <n-form-item path="username"> |
| 60 | - <n-input | |
| 61 | - v-model:value="formInline.username" | |
| 62 | - :placeholder="$t('global.form_account')" | |
| 63 | - > | |
| 41 | + <n-input v-model:value="formInline.username" :placeholder="$t('global.form_account')"> | |
| 64 | 42 | <template #prefix> |
| 65 | 43 | <n-icon size="18"> |
| 66 | 44 | <PersonOutlineIcon></PersonOutlineIcon> |
| ... | ... | @@ -69,12 +47,8 @@ |
| 69 | 47 | </n-input> |
| 70 | 48 | </n-form-item> |
| 71 | 49 | <n-form-item path="password"> |
| 72 | - <n-input | |
| 73 | - v-model:value="formInline.password" | |
| 74 | - type="password" | |
| 75 | - show-password-on="click" | |
| 76 | - :placeholder="$t('global.form_password')" | |
| 77 | - > | |
| 50 | + <n-input v-model:value="formInline.password" type="password" show-password-on="click" | |
| 51 | + :placeholder="$t('global.form_password')"> | |
| 78 | 52 | <template #prefix> |
| 79 | 53 | <n-icon size="18"> |
| 80 | 54 | <LockClosedOutlineIcon></LockClosedOutlineIcon> |
| ... | ... | @@ -92,14 +66,9 @@ |
| 92 | 66 | </div> |
| 93 | 67 | </n-form-item> |
| 94 | 68 | <n-form-item> |
| 95 | - <n-button | |
| 96 | - type="primary" | |
| 97 | - @click="handleSubmit" | |
| 98 | - size="large" | |
| 99 | - :loading="loading" | |
| 100 | - block | |
| 101 | - >{{ $t('login.form_button') }}</n-button | |
| 102 | - > | |
| 69 | + <!-- YUN_TENG loading修改 --> | |
| 70 | + <n-button type="primary" @click="handleSubmit" size="large" :loading="loginLoading" block>{{ | |
| 71 | + $t('login.form_button') }}</n-button> | |
| 103 | 72 | </n-form-item> |
| 104 | 73 | </n-form> |
| 105 | 74 | </n-card> |
| ... | ... | @@ -127,6 +96,7 @@ import { PageEnum } from '@/enums/pageEnum' |
| 127 | 96 | import { icon } from '@/plugins' |
| 128 | 97 | import { StorageEnum } from '@/enums/storageEnum' |
| 129 | 98 | import { routerTurnByName, cryptoEncode, setLocalStorage } from '@/utils' |
| 99 | +import { useLogin } from './external/useLogin' | |
| 130 | 100 | const { GO_LOGIN_INFO_STORE } = StorageEnum |
| 131 | 101 | |
| 132 | 102 | const { PersonOutlineIcon, LockClosedOutlineIcon } = icon.ionicons5 |
| ... | ... | @@ -203,6 +173,9 @@ const shuffleHandle = () => { |
| 203 | 173 | }, carouselInterval) |
| 204 | 174 | } |
| 205 | 175 | |
| 176 | +// YUN_TENG 登录钩子 | |
| 177 | +const { login, loading: loginLoading } = useLogin() | |
| 178 | + | |
| 206 | 179 | // 点击事件 |
| 207 | 180 | const handleSubmit = (e: Event) => { |
| 208 | 181 | e.preventDefault() |
| ... | ... | @@ -210,17 +183,20 @@ const handleSubmit = (e: Event) => { |
| 210 | 183 | if (!errors) { |
| 211 | 184 | const { username, password } = formInline |
| 212 | 185 | loading.value = true |
| 213 | - setLocalStorage( | |
| 214 | - GO_LOGIN_INFO_STORE, | |
| 215 | - cryptoEncode( | |
| 216 | - JSON.stringify({ | |
| 217 | - username, | |
| 218 | - password, | |
| 219 | - }) | |
| 220 | - ) | |
| 221 | - ) | |
| 222 | - window['$message'].success(`${t('login.login_success')}!`) | |
| 223 | - routerTurnByName(PageEnum.BASE_HOME_NAME, true) | |
| 186 | + // YUN_TENG 登录接口 | |
| 187 | + await login({ username, password }) | |
| 188 | + // setLocalStorage( | |
| 189 | + // GO_LOGIN_INFO_STORE, | |
| 190 | + // cryptoEncode( | |
| 191 | + // JSON.stringify({ | |
| 192 | + // username, | |
| 193 | + // password, | |
| 194 | + // }) | |
| 195 | + // ) | |
| 196 | + // ) | |
| 197 | + // window['$message'].success(`${t('login.login_success')}!`) | |
| 198 | + // routerTurnByName(PageEnum.BASE_HOME_NAME, true) | |
| 199 | + | |
| 224 | 200 | } else { |
| 225 | 201 | window['$message'].error(`${t('login.login_message')}!`) |
| 226 | 202 | } |
| ... | ... | @@ -243,10 +219,12 @@ $carousel-image-height: 60vh; |
| 243 | 219 | * { |
| 244 | 220 | box-sizing: border-box; |
| 245 | 221 | } |
| 222 | + | |
| 246 | 223 | @include go(login-box) { |
| 247 | 224 | height: $go-login-height; |
| 248 | 225 | overflow: hidden; |
| 249 | 226 | @include background-image('background-image'); |
| 227 | + | |
| 250 | 228 | &-header { |
| 251 | 229 | display: flex; |
| 252 | 230 | justify-content: space-between; |
| ... | ... | @@ -254,6 +232,7 @@ $carousel-image-height: 60vh; |
| 254 | 232 | padding: 0 40px; |
| 255 | 233 | height: $--header-height; |
| 256 | 234 | } |
| 235 | + | |
| 257 | 236 | &-divider { |
| 258 | 237 | margin: 0; |
| 259 | 238 | padding-top: 0; |
| ... | ... | @@ -267,20 +246,24 @@ $carousel-image-height: 60vh; |
| 267 | 246 | margin-top: -$--header-height; |
| 268 | 247 | height: $go-login-height; |
| 269 | 248 | width: 100vw; |
| 249 | + | |
| 270 | 250 | &-carousel { |
| 271 | 251 | width: $carousel-width; |
| 272 | 252 | margin-top: 100px; |
| 273 | 253 | min-width: 500px; |
| 254 | + | |
| 274 | 255 | &-img { |
| 275 | 256 | display: block; |
| 276 | 257 | margin: 0 auto; |
| 277 | 258 | height: $carousel-image-height; |
| 278 | 259 | } |
| 279 | 260 | } |
| 261 | + | |
| 280 | 262 | .login-account { |
| 281 | 263 | display: flex; |
| 282 | 264 | flex-direction: column; |
| 283 | 265 | margin: 0 160px; |
| 266 | + | |
| 284 | 267 | &-container { |
| 285 | 268 | width: $width; |
| 286 | 269 | } |
| ... | ... | @@ -316,15 +299,18 @@ $carousel-image-height: 60vh; |
| 316 | 299 | width: 100vw; |
| 317 | 300 | height: 100vh; |
| 318 | 301 | background: url('@/assets/images/login/login-bg.png') no-repeat 0 -120px; |
| 302 | + | |
| 319 | 303 | .bg-slot { |
| 320 | 304 | width: $carousel-width; |
| 321 | 305 | } |
| 306 | + | |
| 322 | 307 | .bg-img-box { |
| 323 | 308 | position: relative; |
| 324 | 309 | display: flex; |
| 325 | 310 | flex-wrap: wrap; |
| 326 | 311 | width: 770px; |
| 327 | 312 | margin-right: -20px; |
| 313 | + | |
| 328 | 314 | &-li { |
| 329 | 315 | img { |
| 330 | 316 | margin-right: 20px; |
| ... | ... | @@ -337,12 +323,15 @@ $carousel-image-height: 60vh; |
| 337 | 323 | } |
| 338 | 324 | } |
| 339 | 325 | } |
| 326 | + | |
| 340 | 327 | @media only screen and (max-width: 1200px) { |
| 328 | + | |
| 341 | 329 | .bg-img-box, |
| 342 | 330 | .bg-slot, |
| 343 | 331 | .go-login-carousel { |
| 344 | 332 | display: none !important; |
| 345 | 333 | } |
| 334 | + | |
| 346 | 335 | .go-login-box-footer { |
| 347 | 336 | position: relative; |
| 348 | 337 | } | ... | ... |
| ... | ... | @@ -10,16 +10,41 @@ |
| 10 | 10 | "resolveJsonModule": true, |
| 11 | 11 | "esModuleInterop": true, |
| 12 | 12 | "skipLibCheck": true, |
| 13 | - "lib": ["es6", "ESNext", "dom"], | |
| 14 | - "types": ["vite/client"], | |
| 13 | + "lib": [ | |
| 14 | + "es6", | |
| 15 | + "ESNext", | |
| 16 | + "dom" | |
| 17 | + ], | |
| 18 | + "types": [ | |
| 19 | + "vite/client" | |
| 20 | + ], | |
| 21 | + "typeRoots": [ | |
| 22 | + "./node_modules/@types/", | |
| 23 | + "./types" | |
| 24 | + ], | |
| 15 | 25 | "paths": { |
| 16 | - "@/*": ["src/*"], | |
| 17 | - "/#/*": ["types/*"] | |
| 26 | + "@/*": [ | |
| 27 | + "src/*" | |
| 28 | + ], | |
| 29 | + "/#/*": [ | |
| 30 | + "types/*" | |
| 31 | + ] | |
| 18 | 32 | }, |
| 19 | 33 | "noImplicitAny": true, //不允许使用any |
| 20 | 34 | // "strictNullChecks": true, //不允许使用null |
| 21 | 35 | "noImplicitThis": true //不允许往this上面挂属性 |
| 22 | 36 | }, |
| 23 | - "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue", "types/**/*", "build/**/*"], | |
| 24 | - "exclude": ["node_modules", "dist", "**/*.js"] | |
| 37 | + "include": [ | |
| 38 | + "src/**/*.ts", | |
| 39 | + "src/**/*.d.ts", | |
| 40 | + "src/**/*.tsx", | |
| 41 | + "src/**/*.vue", | |
| 42 | + "types/**/*", | |
| 43 | + "build/**/*" | |
| 44 | + ], | |
| 45 | + "exclude": [ | |
| 46 | + "node_modules", | |
| 47 | + "dist", | |
| 48 | + "**/*.js" | |
| 49 | + ] | |
| 25 | 50 | } | ... | ... |
| ... | ... | @@ -146,14 +146,8 @@ export interface GlobConfig { |
| 146 | 146 | urlPrefix?: string; |
| 147 | 147 | // Project abbreviation |
| 148 | 148 | shortName: string; |
| 149 | - // configuration center proxy prefix | |
| 150 | - configurationPrefix: string; | |
| 151 | 149 | // socket url |
| 152 | 150 | socketUrl: string; |
| 153 | - // alarm notify alarm duration | |
| 154 | - alarmNotifyDuration: string; | |
| 155 | - // alarm notify polling interval | |
| 156 | - alarmPollingInterval: string; | |
| 157 | 151 | // upgrade your http policy to https |
| 158 | 152 | securityPolicy: string; |
| 159 | 153 | } |
| ... | ... | @@ -168,14 +162,8 @@ export interface GlobEnvConfig { |
| 168 | 162 | VITE_GLOB_APP_SHORT_NAME: string; |
| 169 | 163 | // Upload url |
| 170 | 164 | VITE_GLOB_UPLOAD_URL?: string; |
| 171 | - // configuration | |
| 172 | - VITE_GLOB_CONFIGURATION: string; | |
| 173 | 165 | // socket |
| 174 | 166 | VITE_GLOB_WEB_SOCKET: string; |
| 175 | - // force transform http to https | |
| 176 | - VITE_GLOB_CONTENT_SECURITY_POLICY: string; | |
| 177 | - // notify polling interval time | |
| 178 | - VITE_GLOB_ALARM_NOTIFY_POLLING_INTERVAL_TIME: string; | |
| 179 | 167 | // notify duration |
| 180 | 168 | VITE_GLOB_ALARM_NOTIFY_DURATION: string; |
| 181 | 169 | } | ... | ... |
| 1 | 1 | import type { |
| 2 | + ComponentPublicInstance, | |
| 2 | 3 | ComponentRenderProxy, |
| 4 | + FunctionalComponent, | |
| 3 | 5 | VNode, |
| 4 | 6 | VNodeChild, |
| 5 | - ComponentPublicInstance, | |
| 6 | - FunctionalComponent, | |
| 7 | 7 | PropType as VuePropType, |
| 8 | -} from 'vue'; | |
| 8 | +} from 'vue' | |
| 9 | 9 | |
| 10 | 10 | declare global { |
| 11 | 11 | const __APP_INFO__: { |
| 12 | 12 | pkg: { |
| 13 | - name: string; | |
| 14 | - version: string; | |
| 15 | - dependencies: Recordable<string>; | |
| 16 | - devDependencies: Recordable<string>; | |
| 17 | - }; | |
| 18 | - lastBuildTime: string; | |
| 19 | - }; | |
| 13 | + name: string | |
| 14 | + version: string | |
| 15 | + dependencies: Recordable<string> | |
| 16 | + devDependencies: Recordable<string> | |
| 17 | + } | |
| 18 | + lastBuildTime: string | |
| 19 | + } | |
| 20 | 20 | // declare interface Window { |
| 21 | 21 | // // Global vue app instance |
| 22 | 22 | // __APP__: App<Element>; |
| 23 | 23 | // } |
| 24 | 24 | |
| 25 | 25 | // vue |
| 26 | - declare type PropType<T> = VuePropType<T>; | |
| 27 | - declare type VueNode = VNodeChild | JSX.Element; | |
| 26 | + declare type PropType<T> = VuePropType<T> | |
| 27 | + declare type VueNode = VNodeChild | JSX.Element | |
| 28 | 28 | |
| 29 | 29 | export type Writable<T> = { |
| 30 | 30 | -readonly [P in keyof T]: T[P]; |
| 31 | - }; | |
| 31 | + } | |
| 32 | 32 | |
| 33 | - declare type Nullable<T> = T | null; | |
| 34 | - declare type NonNullable<T> = T extends null | undefined ? never : T; | |
| 35 | - declare type Recordable<T = any> = Record<string, T>; | |
| 36 | - declare type ReadonlyRecordable<T = any> = { | |
| 37 | - readonly [key: string]: T; | |
| 38 | - }; | |
| 39 | - declare type Indexable<T = any> = { | |
| 40 | - [key: string]: T; | |
| 41 | - }; | |
| 33 | + declare type Nullable<T> = T | null | |
| 34 | + declare type NonNullable<T> = T extends null | undefined ? never : T | |
| 35 | + declare type Recordable<T = any> = Record<string, T> | |
| 36 | + type ReadonlyRecordable<T> = Readonly<Record<string, T>> | |
| 37 | + type Indexable<T> = Record<string, T> | |
| 42 | 38 | declare type DeepPartial<T> = { |
| 43 | 39 | [P in keyof T]?: DeepPartial<T[P]>; |
| 44 | - }; | |
| 45 | - declare type TimeoutHandle = ReturnType<typeof setTimeout>; | |
| 46 | - declare type IntervalHandle = ReturnType<typeof setInterval>; | |
| 40 | + } | |
| 41 | + declare type TimeoutHandle = ReturnType<typeof setTimeout> | |
| 42 | + declare type IntervalHandle = ReturnType<typeof setInterval> | |
| 47 | 43 | |
| 48 | 44 | declare interface ChangeEvent extends Event { |
| 49 | - target: HTMLInputElement; | |
| 45 | + target: HTMLInputElement | |
| 50 | 46 | } |
| 51 | 47 | |
| 52 | 48 | declare interface WheelEvent { |
| 53 | - path?: EventTarget[]; | |
| 49 | + path?: EventTarget[] | |
| 54 | 50 | } |
| 55 | 51 | interface ImportMetaEnv extends ViteEnv { |
| 56 | - __: unknown; | |
| 52 | + __: unknown | |
| 57 | 53 | } |
| 58 | 54 | |
| 59 | 55 | declare interface ViteEnv { |
| 60 | - VITE_PORT: number; | |
| 61 | - VITE_GLOB_USE_MOCK: boolean; | |
| 62 | - VITE_USE_PWA: boolean; | |
| 63 | - VITE_GLOB_PUBLIC_PATH: string; | |
| 64 | - VITE_PROXY: [string, string][]; | |
| 65 | - VITE_GLOB_APP_TITLE: string; | |
| 66 | - VITE_GLOB_APP_SHORT_NAME: string; | |
| 67 | - VITE_USE_CDN: boolean; | |
| 68 | - VITE_GLOB_DROP_CONSOLE: boolean; | |
| 69 | - VITE_GLOB_BUILD_COMPRESS: 'gzip' | 'brotli' | 'none'; | |
| 70 | - VITE_GLOB_BUILD_COMPRESS_DELETE_ORIGIN_FILE: boolean; | |
| 71 | - VITE_LEGACY: boolean; | |
| 72 | - VITE_GLOB_USE_IMAGEMIN: boolean; | |
| 73 | - VITE_GENERATE_UI: string; | |
| 74 | - VITE_GLOB_CONTENT_SECURITY_POLICY: boolean; | |
| 75 | - VITE_GLOB_ALARM_NOTIFY_POLLING_INTERVAL_TIME: number; | |
| 76 | - VITE_GLOB_ALARM_NOTIFY_DURATION: number; | |
| 56 | + VITE_PORT: number | |
| 57 | + VITE_GLOB_USE_MOCK: boolean | |
| 58 | + VITE_USE_PWA: boolean | |
| 59 | + VITE_GLOB_PUBLIC_PATH: string | |
| 60 | + VITE_PROXY: [string, string][] | |
| 61 | + VITE_GLOB_APP_TITLE: string | |
| 62 | + VITE_GLOB_APP_SHORT_NAME: string | |
| 63 | + VITE_USE_CDN: boolean | |
| 64 | + VITE_GLOB_DROP_CONSOLE: boolean | |
| 65 | + VITE_GLOB_BUILD_COMPRESS: 'gzip' | 'brotli' | 'none' | |
| 66 | + VITE_GLOB_BUILD_COMPRESS_DELETE_ORIGIN_FILE: boolean | |
| 67 | + VITE_LEGACY: boolean | |
| 68 | + VITE_GLOB_USE_IMAGEMIN: boolean | |
| 69 | + VITE_GENERATE_UI: string | |
| 70 | + VITE_GLOB_CONTENT_SECURITY_POLICY: boolean | |
| 71 | + VITE_GLOB_ALARM_NOTIFY_POLLING_INTERVAL_TIME: number | |
| 72 | + VITE_GLOB_ALARM_NOTIFY_DURATION: number | |
| 77 | 73 | } |
| 78 | 74 | |
| 79 | - declare function parseInt(s: string | number, radix?: number): number; | |
| 75 | + declare function parseInt(s: string | number, radix?: number): number | |
| 80 | 76 | |
| 81 | - declare function parseFloat(string: string | number): number; | |
| 77 | + declare function parseFloat(string: string | number): number | |
| 82 | 78 | |
| 83 | 79 | namespace JSX { |
| 84 | 80 | // tslint:disable no-empty-interface |
| 85 | - type Element = VNode; | |
| 81 | + type Element = VNode | |
| 86 | 82 | // tslint:disable no-empty-interface |
| 87 | - type ElementClass = ComponentRenderProxy; | |
| 83 | + type ElementClass = ComponentRenderProxy | |
| 88 | 84 | interface ElementAttributesProperty { |
| 89 | - $props: any; | |
| 90 | - } | |
| 91 | - interface IntrinsicElements { | |
| 92 | - [elem: string]: any; | |
| 93 | - } | |
| 94 | - interface IntrinsicAttributes { | |
| 95 | - [elem: string]: any; | |
| 85 | + $props: any | |
| 96 | 86 | } |
| 87 | + | |
| 88 | + type IntrinsicElements = Record<string, any> | |
| 89 | + type IntrinsicAttributes = Record<string, any> | |
| 97 | 90 | } |
| 91 | + | |
| 92 | + type AwaitToResult<T> = Awaited<ReturnType<T>> | |
| 98 | 93 | } |
| 99 | 94 | |
| 100 | 95 | declare module 'vue' { |
| 101 | 96 | export type JSXComponent<Props = any> = |
| 102 | - | { new (): ComponentPublicInstance<Props> } | |
| 103 | - | FunctionalComponent<Props>; | |
| 97 | + | { new(): ComponentPublicInstance<Props> } | |
| 98 | + | FunctionalComponent<Props> | |
| 104 | 99 | } | ... | ... |