From f1e88d4e6b2db87e3beb2e77254dc6ba2ef70f76 Mon Sep 17 00:00:00 2001 From: bunny <1319900154@qq.com> Date: Tue, 15 Oct 2024 15:24:52 +0800 Subject: [PATCH] =?UTF-8?q?fixbug:=20=F0=9F=90=9B=20=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E6=98=BE=E7=A4=BAip=E5=86=85=E5=AE=B9,?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E9=A1=B5=E9=9D=A2=E4=BF=AE=E6=94=B9,NGINX?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.production | 2 +- ReadMe.md | 3 + build/buildEnv.ts | 96 ++++++------ build/plugins.ts | 122 +++++++-------- build/utils.ts | 150 +++++++++---------- docker/Dockerfile | 2 +- docker/nginx.conf | 27 +--- images/img.png | Bin 0 -> 58946 bytes src/api/service/request.ts | 4 +- src/api/v1/i18n.ts | 2 +- src/views/login/index.vue | 6 +- src/views/login/login-form.vue | 2 +- src/views/system/adminUser/utils/columns.tsx | 4 + 13 files changed, 203 insertions(+), 217 deletions(-) create mode 100644 ReadMe.md create mode 100644 images/img.png diff --git a/.env.production b/.env.production index 7dd8fec..22b39b8 100644 --- a/.env.production +++ b/.env.production @@ -5,7 +5,7 @@ VITE_PORT=7000 VITE_ROUTER_HISTORY="hash" # 基础请求路径 -VITE_BASE_API=/api +VITE_BASE_API=/admin # 跨域代理地址 VITE_APP_URL=http://localhost:7070 diff --git a/ReadMe.md b/ReadMe.md new file mode 100644 index 0000000..370752b --- /dev/null +++ b/ReadMe.md @@ -0,0 +1,3 @@ +# Docker配置详情 + +![img.png](images/img.png) \ No newline at end of file diff --git a/build/buildEnv.ts b/build/buildEnv.ts index bd62c61..7e68d7a 100644 --- a/build/buildEnv.ts +++ b/build/buildEnv.ts @@ -1,52 +1,52 @@ -import { pathResolve } from "./utils"; -import type { BuildOptions } from "vite"; +import { pathResolve } from './utils'; +import type { BuildOptions } from 'vite'; export const buildEnvironment = () => { - const environment: BuildOptions = { - target: "es2015", - assetsInlineLimit: 20000, - // 构建输出的目录,默认值为"dist" - outDir: "dist", - // 用于指定使用的代码压缩工具。在这里,minify 被设置为 'terser',表示使用 Terser 进行代码压缩。默认值terser - // esbuild 打包更快,但是不能去除 console.log,terser打包慢,但能去除 console.log - minify: "terser", - // 用于配置 Terser 的选项 - terserOptions: { - // 用于配置压缩选项 - compress: { - drop_console: true, // 是否删除代码中的 console 语句, 默认值false - drop_debugger: true // 是否删除代码中的 debugger 语句, 默认值false - } - }, - // 禁用 gzip 压缩大小报告,可略微减少打包时间 - reportCompressedSize: false, - // 用于指定是否生成源映射文件。源映射文件可以帮助调试和定位源代码中的错误。当设置为false时,构建过程不会生成源映射文件 - sourcemap: false, - // 用于配置 CommonJS 模块的选项 - commonjsOptions: { - // 用于指定是否忽略 CommonJS 模块中的 try-catch 语句。当设置为false时,构建过程会保留 CommonJS 模块中的 try-catch 语句 - ignoreTryCatch: false - }, - // 规定触发警告的 chunk 大小, 当某个代码分块的大小超过该限制时,Vite 会发出警告 - chunkSizeWarningLimit: 2000, - rollupOptions: { - input: { - index: pathResolve("../index.html", import.meta.url) - }, - // 静态资源分类打包 - output: { - chunkFileNames: "static/js/[name]-[hash].js", - entryFileNames: "static/js/[name]-[hash].js", - assetFileNames: "static/[ext]/[name]-[hash].[ext]", - manualChunks: id => { - // 如果是包含在包中则打包成 vendor - if (id.includes("node_modules")) { - return "vendor"; - } - } - } - } - }; + const environment: BuildOptions = { + target: 'es2015', + assetsInlineLimit: 20000, + // 构建输出的目录,默认值为"dist" + outDir: 'docker/dist', + // 用于指定使用的代码压缩工具。在这里,minify 被设置为 'terser',表示使用 Terser 进行代码压缩。默认值terser + // esbuild 打包更快,但是不能去除 console.log,terser打包慢,但能去除 console.log + minify: 'terser', + // 用于配置 Terser 的选项 + terserOptions: { + // 用于配置压缩选项 + compress: { + drop_console: true, // 是否删除代码中的 console 语句, 默认值false + drop_debugger: true, // 是否删除代码中的 debugger 语句, 默认值false + }, + }, + // 禁用 gzip 压缩大小报告,可略微减少打包时间 + reportCompressedSize: false, + // 用于指定是否生成源映射文件。源映射文件可以帮助调试和定位源代码中的错误。当设置为false时,构建过程不会生成源映射文件 + sourcemap: false, + // 用于配置 CommonJS 模块的选项 + commonjsOptions: { + // 用于指定是否忽略 CommonJS 模块中的 try-catch 语句。当设置为false时,构建过程会保留 CommonJS 模块中的 try-catch 语句 + ignoreTryCatch: false, + }, + // 规定触发警告的 chunk 大小, 当某个代码分块的大小超过该限制时,Vite 会发出警告 + chunkSizeWarningLimit: 2000, + rollupOptions: { + input: { + index: pathResolve('../index.html', import.meta.url), + }, + // 静态资源分类打包 + output: { + chunkFileNames: 'static/js/[name]-[hash].js', + entryFileNames: 'static/js/[name]-[hash].js', + assetFileNames: 'static/[ext]/[name]-[hash].[ext]', + manualChunks: id => { + // 如果是包含在包中则打包成 vendor + if (id.includes('node_modules')) { + return 'vendor'; + } + }, + }, + }, + }; - return environment; + return environment; }; diff --git a/build/plugins.ts b/build/plugins.ts index 591a2bb..2958f34 100644 --- a/build/plugins.ts +++ b/build/plugins.ts @@ -1,66 +1,60 @@ -import { cdn } from "./cdn"; -import vue from "@vitejs/plugin-vue"; -import { pathResolve } from "./utils"; -import { viteBuildInfo } from "./info"; -import svgLoader from "vite-svg-loader"; -import type { PluginOption } from "vite"; -import vueJsx from "@vitejs/plugin-vue-jsx"; -import Inspector from "vite-plugin-vue-inspector"; -import { configCompressPlugin } from "./compress"; -import removeNoMatch from "vite-plugin-router-warn"; -import { visualizer } from "rollup-plugin-visualizer"; -import removeConsole from "vite-plugin-remove-console"; -import { themePreprocessorPlugin } from "@pureadmin/theme"; -import VueI18nPlugin from "@intlify/unplugin-vue-i18n/vite"; -import { genScssMultipleScopeVars } from "../src/layout/theme"; -import { vitePluginFakeServer } from "vite-plugin-fake-server"; +import { cdn } from './cdn'; +import vue from '@vitejs/plugin-vue'; +import { pathResolve } from './utils'; +import { viteBuildInfo } from './info'; +import svgLoader from 'vite-svg-loader'; +import type { PluginOption } from 'vite'; +import vueJsx from '@vitejs/plugin-vue-jsx'; +import Inspector from 'vite-plugin-vue-inspector'; +import { configCompressPlugin } from './compress'; +import removeNoMatch from 'vite-plugin-router-warn'; +import { visualizer } from 'rollup-plugin-visualizer'; +import removeConsole from 'vite-plugin-remove-console'; +import { themePreprocessorPlugin } from '@pureadmin/theme'; +import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite'; +import { genScssMultipleScopeVars } from '../src/layout/theme'; +import { vitePluginFakeServer } from 'vite-plugin-fake-server'; -export function getPluginsList( - VITE_CDN: boolean, - VITE_COMPRESSION: ViteCompression, - VITE_PORT: number -): PluginOption[] { - const lifecycle = process.env.npm_lifecycle_event; - return [ - vue(), - // jsx、tsx语法支持 - vueJsx(), - VueI18nPlugin({ - jitCompilation: false, - include: [pathResolve("../locales/**")] - }), - // 按下Command(⌘)+Shift(⇧),然后点击页面元素会自动打开本地IDE并跳转到对应的代码位置 - Inspector(), - viteBuildInfo(VITE_PORT), - /** - * 开发环境下移除非必要的vue-router动态路由警告No match found for location with path - * 非必要具体看 https://github.com/vuejs/router/issues/521 和 https://github.com/vuejs/router/issues/359 - * vite-plugin-router-warn只在开发环境下启用,只处理vue-router文件并且只在服务启动或重启时运行一次,性能消耗可忽略不计 - */ - removeNoMatch(), - // mock支持 - vitePluginFakeServer({ - logger: false, - include: "mock", - infixName: false, - enableProd: true - }), - // 自定义主题 - themePreprocessorPlugin({ - scss: { - multipleScopeVars: genScssMultipleScopeVars(), - extract: true - } - }), - // svg组件化支持 - svgLoader(), - VITE_CDN ? cdn : null, - configCompressPlugin(VITE_COMPRESSION), - // 线上环境删除console - removeConsole({ external: ["src/assets/iconfont/iconfont.js"] }), - // 打包分析 - lifecycle === "report" - ? visualizer({ open: true, brotliSize: true, filename: "report.html" }) - : (null as any) - ]; +export function getPluginsList(VITE_CDN: boolean, VITE_COMPRESSION: ViteCompression, VITE_PORT: number): PluginOption[] { + const lifecycle = process.env.npm_lifecycle_event; + return [ + vue(), + // jsx、tsx语法支持 + vueJsx(), + VueI18nPlugin({ + jitCompilation: false, + include: [pathResolve('../locales/**')], + }), + // 按下Command(⌘)+Shift(⇧),然后点击页面元素会自动打开本地IDE并跳转到对应的代码位置 + Inspector(), + viteBuildInfo(VITE_PORT), + /** + * 开发环境下移除非必要的vue-router动态路由警告No match found for location with path + * 非必要具体看 https://github.com/vuejs/router/issues/521 和 https://github.com/vuejs/router/issues/359 + * vite-plugin-router-warn只在开发环境下启用,只处理vue-router文件并且只在服务启动或重启时运行一次,性能消耗可忽略不计 + */ + removeNoMatch(), + // mock支持 + vitePluginFakeServer({ + logger: false, + include: 'mock', + infixName: false, + enableProd: true, + }), + // 自定义主题 + themePreprocessorPlugin({ + scss: { + multipleScopeVars: genScssMultipleScopeVars(), + extract: true, + }, + }), + // svg组件化支持 + svgLoader(), + VITE_CDN ? cdn : null, + configCompressPlugin(VITE_COMPRESSION), + // 线上环境删除console + removeConsole({ external: ['src/assets/iconfont/iconfont.js'] }), + // 打包分析 + lifecycle === 'report' ? visualizer({ open: true, brotliSize: true, filename: 'report.html' }) : (null as any), + ]; } diff --git a/build/utils.ts b/build/utils.ts index 5a26eee..8c927a9 100644 --- a/build/utils.ts +++ b/build/utils.ts @@ -1,15 +1,9 @@ -import dayjs from "dayjs"; -import { readdir, stat } from "node:fs"; -import { fileURLToPath } from "node:url"; -import { dirname, resolve } from "node:path"; -import { formatBytes, sum } from "@pureadmin/utils"; -import { - dependencies, - devDependencies, - engines, - name, - version -} from "../package.json"; +import dayjs from 'dayjs'; +import { readdir, stat } from 'node:fs'; +import { fileURLToPath } from 'node:url'; +import { dirname, resolve } from 'node:path'; +import { formatBytes, sum } from '@pureadmin/utils'; +import { dependencies, devDependencies, engines, name, version } from '../package.json'; /** 启动`node`进程时所在工作目录的绝对路径 */ const root: string = process.cwd(); @@ -19,93 +13,91 @@ const root: string = process.cwd(); * @param dir 路径片段,默认`build` * @param metaUrl 模块的完整`url`,如果在`build`目录外调用必传`import.meta.url` */ -const pathResolve = (dir = ".", metaUrl = import.meta.url) => { - // 当前文件目录的绝对路径 - const currentFileDir = dirname(fileURLToPath(metaUrl)); - // build 目录的绝对路径 - const buildDir = resolve(currentFileDir, "build"); - // 解析的绝对路径 - const resolvedPath = resolve(currentFileDir, dir); - // 检查解析的绝对路径是否在 build 目录内 - if (resolvedPath.startsWith(buildDir)) { - // 在 build 目录内,返回当前文件路径 - return fileURLToPath(metaUrl); - } - // 不在 build 目录内,返回解析后的绝对路径 - return resolvedPath; +const pathResolve = (dir = '.', metaUrl = import.meta.url) => { + // 当前文件目录的绝对路径 + const currentFileDir = dirname(fileURLToPath(metaUrl)); + // build 目录的绝对路径 + const buildDir = resolve(currentFileDir, 'build'); + // 解析的绝对路径 + const resolvedPath = resolve(currentFileDir, dir); + // 检查解析的绝对路径是否在 build 目录内 + if (resolvedPath.startsWith(buildDir)) { + // 在 build 目录内,返回当前文件路径 + return fileURLToPath(metaUrl); + } + // 不在 build 目录内,返回解析后的绝对路径 + return resolvedPath; }; /** 设置别名 */ const alias: Record = { - "@": pathResolve("../src"), - "@build": pathResolve() + '@': pathResolve('../src'), + '@build': pathResolve(), }; /** 平台的名称、版本、运行所需的`node`和`pnpm`版本、依赖、最后构建时间的类型提示 */ const __APP_INFO__ = { - pkg: { name, version, engines, dependencies, devDependencies }, - lastBuildTime: dayjs(new Date()).format("YYYY-MM-DD HH:mm:ss") + pkg: { name, version, engines, dependencies, devDependencies }, + lastBuildTime: dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss'), }; /** 处理环境变量 */ const wrapperEnv = (envConf: Recordable): ViteEnv => { - // 默认值 - const ret: ViteEnv = { - VITE_PORT: 8848, - VITE_PUBLIC_PATH: "", - VITE_ROUTER_HISTORY: "", - VITE_APP_URL: "", - VITE_CDN: false, - VITE_HIDE_HOME: "false", - VITE_COMPRESSION: "none" - }; + // 默认值 + const ret: ViteEnv = { + VITE_PORT: 8848, + VITE_PUBLIC_PATH: '', + VITE_ROUTER_HISTORY: '', + VITE_APP_URL: '', + VITE_CDN: false, + VITE_HIDE_HOME: 'false', + VITE_COMPRESSION: 'none', + }; - for (const envName of Object.keys(envConf)) { - let realName = envConf[envName].replace(/\\n/g, "\n"); - realName = - realName === "true" ? true : realName === "false" ? false : realName; + for (const envName of Object.keys(envConf)) { + let realName = envConf[envName].replace(/\\n/g, '\n'); + realName = realName === 'true' ? true : realName === 'false' ? false : realName; - if (envName === "VITE_PORT") { - realName = Number(realName); - } - ret[envName] = realName; - if (typeof realName === "string") { - process.env[envName] = realName; - } else if (typeof realName === "object") { - process.env[envName] = JSON.stringify(realName); - } - } - return ret; + if (envName === 'VITE_PORT') { + realName = Number(realName); + } + ret[envName] = realName; + if (typeof realName === 'string') { + process.env[envName] = realName; + } else if (typeof realName === 'object') { + process.env[envName] = JSON.stringify(realName); + } + } + return ret; }; const fileListTotal: number[] = []; /** 获取指定文件夹中所有文件的总大小 */ const getPackageSize = options => { - const { folder = "dist", callback, format = true } = options; - readdir(folder, (err, files: string[]) => { - if (err) throw err; - let count = 0; - const checkEnd = () => { - ++count == files.length && - callback(format ? formatBytes(sum(fileListTotal)) : sum(fileListTotal)); - }; - files.forEach((item: string) => { - stat(`${folder}/${item}`, async (err, stats) => { - if (err) throw err; - if (stats.isFile()) { - fileListTotal.push(stats.size); - checkEnd(); - } else if (stats.isDirectory()) { - getPackageSize({ - folder: `${folder}/${item}/`, - callback: checkEnd - }); - } - }); - }); - files.length === 0 && callback(0); - }); + const { folder = 'dist', callback, format = true } = options; + readdir(folder, (err, files: string[]) => { + if (err) throw err; + let count = 0; + const checkEnd = () => { + ++count == files.length && callback(format ? formatBytes(sum(fileListTotal)) : sum(fileListTotal)); + }; + files.forEach((item: string) => { + stat(`${folder}/${item}`, async (err, stats) => { + if (err) throw err; + if (stats.isFile()) { + fileListTotal.push(stats.size); + checkEnd(); + } else if (stats.isDirectory()) { + getPackageSize({ + folder: `${folder}/${item}/`, + callback: checkEnd, + }); + } + }); + }); + files.length === 0 && callback(0); + }); }; export { root, pathResolve, alias, __APP_INFO__, wrapperEnv, getPackageSize }; diff --git a/docker/Dockerfile b/docker/Dockerfile index 6e2e99f..821028c 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -5,7 +5,7 @@ FROM nginx RUN rm /etc/nginx/conf.d/default.conf # 将自定义的 Nginx 配置文件复制到容器中 -COPY nginx.conf /etc/nginx/conf.d/ +COPY nginx.conf /etc/nginx/conf.d/default.conf # 设置时区,构建镜像时执行的命令 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime diff --git a/docker/nginx.conf b/docker/nginx.conf index 7aab7ef..8f09f63 100644 --- a/docker/nginx.conf +++ b/docker/nginx.conf @@ -15,24 +15,13 @@ server { } # 后端跨域请求 - location ~/api/ { - proxy_pass http://192.168.3.98:8200; - } - - # 配置WebSocket - location ~/ws/ { - # WebSocket 代理配置 - proxy_pass http://192.168.3.98:8200; # WebSocket 服务器地址和端口 - proxy_http_version 1.1; # 使用 HTTP 1.1 版本 - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection $connection_upgrade; - proxy_read_timeout 600s; # 保持连接的超时时间,根据需要调整 - proxy_redirect off; # 关闭重定向 - } - - # mock 跨域 - location ~/mock/ { - proxy_pass http://192.168.3.98:8200; + location ~/admin/ { + #proxy_pass http://z-bunny.cn:7070; + proxy_pass http://172.17.0.1:7070; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; } error_page 404 404.html; @@ -40,4 +29,4 @@ server { location = /50x.html { root html; } -} \ No newline at end of file +} diff --git a/images/img.png b/images/img.png new file mode 100644 index 0000000000000000000000000000000000000000..6fe246bf271435c7ad449e7aedd1bb0c64fb4edd GIT binary patch literal 58946 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 P85lfW{an^LB{Ts5{(!eF literal 0 HcmV?d00001 diff --git a/src/api/service/request.ts b/src/api/service/request.ts index f72469d..4f9a153 100644 --- a/src/api/service/request.ts +++ b/src/api/service/request.ts @@ -118,7 +118,7 @@ class PureHttp { private httpInterceptorsResponse(): void { const instance = PureHttp.axiosInstance; instance.interceptors.response.use( - (response: PureHttpResponse) => { + async (response: PureHttpResponse) => { const $config = response.config; const data = response.data; @@ -128,8 +128,8 @@ class PureHttp { // 登录过期,和异常处理 if (data.code === 208) { message(data.message, { type: 'warning' }); - router.push('/').then(); removeToken(); + await router.push('/login'); } else if (data.code >= 201 && data.code < 300) { message(data.message, { type: 'warning' }); } else if (data.code > 300) { diff --git a/src/api/v1/i18n.ts b/src/api/v1/i18n.ts index 5c01685..4d6db35 100644 --- a/src/api/v1/i18n.ts +++ b/src/api/v1/i18n.ts @@ -40,7 +40,7 @@ export const fetchDeleteI18n = (data: any) => { * 多语言类型管理---获取多语言类型列表 */ export const fetchGetI18nTypeList = () => { - return http.request>('get', 'i18nType/getI18nTypeList'); + return http.request>('get', 'i18nType/noAuth/getI18nTypeList'); }; /** diff --git a/src/views/login/index.vue b/src/views/login/index.vue index 782b51c..53a96e9 100644 --- a/src/views/login/index.vue +++ b/src/views/login/index.vue @@ -3,7 +3,7 @@ import Motion from './utils/motion'; import { useNav } from '@/layout/hooks/useNav'; import { useLayout } from '@/layout/hooks/useLayout'; import { avatar, bg, illustration } from './utils/static'; -import { toRaw } from 'vue'; +import { onMounted, toRaw } from 'vue'; import { useTranslationLang } from '@/layout/hooks/useTranslationLang'; import { useDataThemeChange } from '@/layout/hooks/useDataThemeChange'; @@ -27,6 +27,10 @@ dataThemeChange(overallStyle.value); const { title, getDropdownItemStyle, getDropdownItemClass } = useNav(); const { locale, translation } = useTranslationLang(); const i18nTypeStore = userI18nTypeStore(); + +onMounted(() => { + i18nTypeStore.getI18nTypeList(); +}); - {{ userStore.readMeDay }}天免登录 + {{ userStore.readMeDay }}天免登录(邮箱验证码随便输入,后端校验验证码已注释) diff --git a/src/views/system/adminUser/utils/columns.tsx b/src/views/system/adminUser/utils/columns.tsx index 0a3bad1..141feaa 100644 --- a/src/views/system/adminUser/utils/columns.tsx +++ b/src/views/system/adminUser/utils/columns.tsx @@ -26,6 +26,10 @@ export const columns: TableColumnList = [ { label: $t('adminUser_sex'), prop: 'sex', slot: 'sex' }, // 个人描述 { label: $t('adminUser_summary'), prop: 'summary', width: 460 }, + // 登录的IP地址 + { label: $t('lastLoginIp'), prop: 'lastLoginIp', width: 130 }, + // IP地区 + { label: $t('lastLoginIpAddress'), prop: 'lastLoginIpAddress', width: 130 }, { label: $t('table.updateTime'), prop: 'updateTime', sortable: true, width: 160 }, { label: $t('table.createTime'), prop: 'createTime', sortable: true, width: 160 }, { label: $t('table.updateUser'), prop: 'updateUser', slot: 'updateUser', width: 90, fixed: 'right' },