Commit b91b53d9 authored by 张伯涛's avatar 张伯涛

部分文件添加注释,以及登录接口调整

parent 9407724b
# Whether to open mock # Whether to open mock
# 是否开启mock数据,关闭时需要自行对接后台接口
VITE_USE_MOCK = true VITE_USE_MOCK = true
# public path # public path
# 资源公共路径,需要以 /开头和结尾
VITE_PUBLIC_PATH = / VITE_PUBLIC_PATH = /
# Basic interface address SPA # Basic interface address SPA
# 接口地址
# 如果没有跨域问题,直接在这里配置即可
VITE_GLOB_API_URL = /basic-api VITE_GLOB_API_URL = /basic-api
# File upload address, optional # File upload address, optional
# 文件上传接口 可选
VITE_GLOB_UPLOAD_URL = /upload VITE_GLOB_UPLOAD_URL = /upload
# Interface prefix # Interface prefix
# 接口地址前缀,有些系统所有接口地址都有前缀,可以在这里统一加,方便切换
VITE_GLOB_API_URL_PREFIX = VITE_GLOB_API_URL_PREFIX =
# Whether to open mock # Whether to open mock
# 是否开启mock
VITE_USE_MOCK = true VITE_USE_MOCK = true
# public path # public path
...@@ -7,15 +8,21 @@ VITE_PUBLIC_PATH = / ...@@ -7,15 +8,21 @@ VITE_PUBLIC_PATH = /
# Whether to enable gzip or brotli compression # Whether to enable gzip or brotli compression
# Optional: gzip | brotli | none # Optional: gzip | brotli | none
# If you need multiple forms, you can use `,` to separate # If you need multiple forms, you can use `,` to separate
# 打包是否输出gz|br文件
# 可选: gzip | brotli | none
# 也可以有多个, 例如 ‘gzip’|'brotli',这样会同时生成 .gz和.br文件
VITE_BUILD_COMPRESS = 'none' VITE_BUILD_COMPRESS = 'none'
# Basic interface address SPA # Basic interface address SPA
# 接口地址 可以由nginx做转发或者直接写实际地址
VITE_GLOB_API_URL = /basic-api VITE_GLOB_API_URL = /basic-api
# File upload address, optional # File upload address, optional
# It can be forwarded by nginx or write the actual address directly # It can be forwarded by nginx or write the actual address directly
# 文件上传地址 可以由nginx做转发或者直接写实际地址
VITE_GLOB_UPLOAD_URL = /upload VITE_GLOB_UPLOAD_URL = /upload
# Interface prefix # Interface prefix
# 接口地址前缀,有些系统所有接口地址都有前缀,可以在这里统一加,方便切换
VITE_GLOB_API_URL_PREFIX = VITE_GLOB_API_URL_PREFIX =
...@@ -85,6 +85,7 @@ ...@@ -85,6 +85,7 @@
"dayjs": "^1.11.10", "dayjs": "^1.11.10",
"echarts": "^5.5.0", "echarts": "^5.5.0",
"exceljs": "^4.4.0", "exceljs": "^4.4.0",
"jsencrypt": "^3.0.0-rc.1",
"html2canvas": "^1.4.1", "html2canvas": "^1.4.1",
"lodash-es": "^4.17.21", "lodash-es": "^4.17.21",
"mockjs": "^1.1.0", "mockjs": "^1.1.0",
......
...@@ -4,6 +4,9 @@ ...@@ -4,6 +4,9 @@
export interface LoginParams { export interface LoginParams {
username: string; username: string;
password: string; password: string;
rememberMe: boolean;
code: string | number;
uuid: string | number
} }
export interface RoleInfo { export interface RoleInfo {
......
import { defHttp } from '@/utils/http/axios'; import { defHttp } from '@/utils/http/axios';
import { LoginParams, LoginResultModel, GetUserInfoModel } from './model/userModel'; import { LoginParams, LoginResultModel, GetUserInfoModel } from './model/userModel';
import Qs from 'qs';
import { ErrorMessageMode } from '#/axios'; import { ErrorMessageMode } from '#/axios';
import { encrypt } from '@/utils/jsencrypt.js'
import {ContentTypeEnum} from "@/enums/httpEnum";
enum Api { enum Api {
Login = '/login', Login = '/auth/login',
Logout = '/logout', Logout = '/logout',
GetUserInfo = '/getUserInfo', GetUserInfo = '/system/user/getInfo',
GetPermCode = '/getPermCode', GetPermCode = '/getPermCode',
TestRetry = '/testRetry', TestRetry = '/testRetry',
} }
...@@ -15,10 +17,13 @@ enum Api { ...@@ -15,10 +17,13 @@ enum Api {
* @description: user login api * @description: user login api
*/ */
export function loginApi(params: LoginParams, mode: ErrorMessageMode = 'modal') { export function loginApi(params: LoginParams, mode: ErrorMessageMode = 'modal') {
return defHttp.post<LoginResultModel>( return defHttp.post<any>(
{ {
url: Api.Login, url: Api.Login,
params, data: Qs.stringify({
sign: encrypt(params)
}),
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
}, },
{ {
errorMessageMode: mode, errorMessageMode: mode,
...@@ -30,7 +35,7 @@ export function loginApi(params: LoginParams, mode: ErrorMessageMode = 'modal') ...@@ -30,7 +35,7 @@ export function loginApi(params: LoginParams, mode: ErrorMessageMode = 'modal')
* @description: getUserInfo * @description: getUserInfo
*/ */
export function getUserInfo() { export function getUserInfo() {
return defHttp.get<GetUserInfoModel>({ url: Api.GetUserInfo }, { errorMessageMode: 'none' }); return defHttp.get<any>({ url: Api.GetUserInfo }, { errorMessageMode: 'none' });
} }
export function getPermCode() { export function getPermCode() {
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @description: Request result set * @description: Request result set
*/ */
export enum ResultEnum { export enum ResultEnum {
SUCCESS = 0, SUCCESS = 200,
ERROR = -1, ERROR = -1,
TIMEOUT = 401, TIMEOUT = 401,
TYPE = 'success', TYPE = 'success',
......
import { isDevMode } from '@/utils/env'; import { isDevMode } from '@/utils/env';
// System default cache time, in seconds // System default cache time, in seconds
// 缓存默认过期时间
export const DEFAULT_CACHE_TIME = 60 * 60 * 24 * 7; export const DEFAULT_CACHE_TIME = 60 * 60 * 24 * 7;
// aes encryption key // aes encryption key
// 开启缓存加密后,加密密钥。采用aes加密
export const cacheCipher = { export const cacheCipher = {
key: '_11111000001111@', key: '_11111000001111@',
iv: '@11111000001111_', iv: '@11111000001111_',
}; };
// Whether the system cache is encrypted using aes // Whether the system cache is encrypted using aes
// 是否加密缓存,默认生产环境加密
export const SHOULD_ENABLE_STORAGE_ENCRYPTION = !isDevMode(); export const SHOULD_ENABLE_STORAGE_ENCRYPTION = !isDevMode();
...@@ -7,16 +7,21 @@ export const LOCALE: { [key: string]: LocaleType } = { ...@@ -7,16 +7,21 @@ export const LOCALE: { [key: string]: LocaleType } = {
}; };
export const localeSetting: LocaleSetting = { export const localeSetting: LocaleSetting = {
// 是否显示语言选择器
showPicker: true, showPicker: true,
// Locale // Locale
// 当前语言
locale: LOCALE.ZH_CN, locale: LOCALE.ZH_CN,
// Default locale // Default locale
// 默认语言
fallback: LOCALE.ZH_CN, fallback: LOCALE.ZH_CN,
// available Locales // available Locales
// 允许的语言
availableLocales: [LOCALE.ZH_CN, LOCALE.EN_US], availableLocales: [LOCALE.ZH_CN, LOCALE.EN_US],
}; };
// locale list // locale list
// 语言列表
export const localeList: DropMenu[] = [ export const localeList: DropMenu[] = [
{ {
text: '简体中文', text: '简体中文',
......
...@@ -16,32 +16,49 @@ import { ...@@ -16,32 +16,49 @@ import {
} from './designSetting'; } from './designSetting';
// ! You need to clear the browser cache after the change // ! You need to clear the browser cache after the change
// ! 改动后需要清空浏览器缓存
const setting: ProjectConfig = { const setting: ProjectConfig = {
// Whether to show the configuration button // Whether to show the configuration button
// 是否显示SettingButton
showSettingButton: true, showSettingButton: true,
// Whether to show the theme switch button // Whether to show the theme switch button
// 是否显示主题切换按钮
showDarkModeToggle: true, showDarkModeToggle: true,
// `Settings` button position // `Settings` button position
// 设置按钮位置 可选项
// SettingButtonPositionEnum.AUTO: 自动选择
// SettingButtonPositionEnum.HEADER: 位于头部
// SettingButtonPositionEnum.FIXED: 固定在右侧
settingButtonPosition: SettingButtonPositionEnum.AUTO, settingButtonPosition: SettingButtonPositionEnum.AUTO,
// Permission mode // Permission mode
// 权限模式,默认前端角色权限模式
// ROUTE_MAPPING: 前端模式(菜单由路由生成,默认)
// ROLE:前端模式(菜单路由分开)
permissionMode: PermissionModeEnum.ROUTE_MAPPING, permissionMode: PermissionModeEnum.ROUTE_MAPPING,
// Permission-related cache is stored in sessionStorage or localStorage // Permission-related cache is stored in sessionStorage or localStorage
// 权限缓存存放位置。默认存放于localStorage
permissionCacheType: CacheTypeEnum.LOCAL, permissionCacheType: CacheTypeEnum.LOCAL,
// Session timeout processing // Session timeout processing
// 会话超时处理方案
// SessionTimeoutProcessingEnum.ROUTE_JUMP: 路由跳转到登录页
// SessionTimeoutProcessingEnum.PAGE_COVERAGE: 生成登录弹窗,覆盖当前页面
sessionTimeoutProcessing: SessionTimeoutProcessingEnum.ROUTE_JUMP, sessionTimeoutProcessing: SessionTimeoutProcessingEnum.ROUTE_JUMP,
// color // color
// 项目主题色
themeColor: APP_PRESET_COLOR_LIST[0], themeColor: APP_PRESET_COLOR_LIST[0],
// Website gray mode, open for possible mourning dates // Website gray mode, open for possible mourning dates
// 网站灰色模式,用于可能悼念的日期开启
grayMode: false, grayMode: false,
// Color Weakness Mode // Color Weakness Mode
// 色弱模式
colorWeak: false, colorWeak: false,
// Whether to cancel the menu, the top, the multi-tab page display, for possible embedded in other systems // Whether to cancel the menu, the top, the multi-tab page display, for possible embedded in other systems
......
...@@ -87,20 +87,19 @@ export const useUserStore = defineStore({ ...@@ -87,20 +87,19 @@ export const useUserStore = defineStore({
goHome?: boolean; goHome?: boolean;
mode?: ErrorMessageMode; mode?: ErrorMessageMode;
}, },
): Promise<GetUserInfoModel | null> { ): Promise<any | null> {
try { try {
const { goHome = true, mode, ...loginParams } = params; const { goHome = true, mode, ...loginParams } = params;
const data = await loginApi(loginParams, mode); const data = await loginApi(loginParams, mode);
const { token } = data; const token = data.data;
// 存储token
// save token
this.setToken(token); this.setToken(token);
return this.afterLoginAction(goHome); return this.afterLoginAction(goHome);
} catch (error) { } catch (error) {
return Promise.reject(error); return Promise.reject(error);
} }
}, },
async afterLoginAction(goHome?: boolean): Promise<GetUserInfoModel | null> { async afterLoginAction(goHome?: boolean): Promise<any | null> {
if (!this.getToken) return null; if (!this.getToken) return null;
// get user info // get user info
const userInfo = await this.getUserInfoAction(); const userInfo = await this.getUserInfoAction();
...@@ -128,6 +127,7 @@ export const useUserStore = defineStore({ ...@@ -128,6 +127,7 @@ export const useUserStore = defineStore({
async getUserInfoAction(): Promise<UserInfo | null> { async getUserInfoAction(): Promise<UserInfo | null> {
if (!this.getToken) return null; if (!this.getToken) return null;
const userInfo = await getUserInfo(); const userInfo = await getUserInfo();
console.log('userInfo',userInfo)
const { roles = [] } = userInfo; const { roles = [] } = userInfo;
if (isArray(roles)) { if (isArray(roles)) {
const roleList = roles.map((item) => item.value) as RoleEnum[]; const roleList = roles.map((item) => item.value) as RoleEnum[];
......
...@@ -40,7 +40,7 @@ const transform: AxiosTransform = { ...@@ -40,7 +40,7 @@ const transform: AxiosTransform = {
} }
// 不进行任何处理,直接返回 // 不进行任何处理,直接返回
// 用于页面代码可能需要直接获取code,data,message这些信息时开启 // 用于页面代码可能需要直接获取code,data,message这些信息时开启
if (!isTransformResponse) { if (isTransformResponse) {
return res.data; return res.data;
} }
// 错误的时候返回 // 错误的时候返回
......
import JSEncrypt from 'jsencrypt/bin/jsencrypt'
// 密钥对生成 http://web.chacuo.net/netrsakeypair
const publicKey = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu6EsPHTuCzwyZ7D0/OhW\n' +
'QDQdB9tByC0vDnb7k7gmT0h77/mmJYcwvuqUdj+PXKO+V1NlJJqlf61UjcQkWD9o\n' +
'K6M1MHLHlS1qWXeXGaETClNUXAhdw2IkdBouXSHxyDkXYIDINYlOd91chxEBuBac\n' +
'igJI0c5p9BA62QcOKDUE2mDJL+LOd70NCYsJf3um1IAgfKDX8RH2H3aPxy/BJ8aS\n' +
'Edu+M9YDWsF6VFpaBr/WPPdouuPPjfs5203PCbvp0pvco+05JNDSiurEFcL+VDMm\n' +
'wFNKExmeCvn/zr+UIkRPWHwxfJq+/gw/lt+UzBO2NURhCv4pQZy19vdFLLLeMM09\n' +
'ewIDAQAB'
export function encrypt(data) {
const json = JSON.stringify(data)
const encryptor = new JSEncrypt()
encryptor.setPublicKey(publicKey)
return encryptor.encrypt(json)
}
export function encryptTwo(data) {
const json = data
const encryptor = new JSEncrypt()
encryptor.setPublicKey(publicKey)
return encryptor.encrypt(json)
}
export function decrypt(txt) {
const encryptor = new JSEncrypt()
encryptor.setPrivateKey('')
return encryptor.decrypt(txt)
}
const passwordPublicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANL378k3RiZHWx5AfJqdH9xRNBmD9wGD\n' +
'2iRe41HdTNF8RUhNnHit5NpMNtGL0NPTSSpPjjI1kJfVorRvaQerUgkCAwEAAQ=='
const passwordPrivateKey = 'MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8\n' +
'mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9p\n' +
'B6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue\n' +
'/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZ\n' +
'UBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6\n' +
'vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha\n' +
'4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3\n' +
'tTbklZkD2A=='
// 加密
export function passwordEncrypt(txt) {
const encryptor = new JSEncrypt()
encryptor.setPublicKey(passwordPublicKey) // 设置公钥
return encryptor.encrypt(txt) // 对需要加密的数据进行加密
}
// 解密
export function passwordDecrypt(txt) {
const encryptor = new JSEncrypt()
encryptor.setPrivateKey(passwordPrivateKey)
return encryptor.decrypt(txt)
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment