README.md
@@ -33,6 +33,7 @@ # æå»ºæµè¯ç¯å¢ yarn build:stage # æå»ºç产ç¯å¢ yarn build:prod # æå»ºç产ç¯å¢ yarn build:prod -- --company="AAA" # å端访é®å°å http://localhost:80 ``` index.html
@@ -8,8 +8,8 @@ name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" /> <link rel="icon" href="/ZQHXico.ico" /> <title>æµè¯è¿éå管çç³»ç»</title> <link rel="icon" href="/favicon.ico" /> <title>%VITE_APP_TITLE%</title> <!--[if lt IE 11 ]><script> window.location.href = "/html/ie.html"; multiple/assets/favicon/BHMY.ico
multiple/assets/favicon/DHDCico.icomultiple/assets/favicon/HHKJIco.icomultiple/assets/favicon/HYSNico.icomultiple/assets/favicon/JZYJico.icomultiple/assets/favicon/MXSCIco.icomultiple/assets/favicon/RZNY.icomultiple/assets/favicon/TJXM.icomultiple/assets/favicon/WDSYico.icomultiple/assets/favicon/XYHBico.icomultiple/assets/favicon/ZQHXico.icomultiple/assets/favicon/favicon.ico
multiple/assets/logo/BHMYLogo.png
multiple/assets/logo/DHDCLogo.pngmultiple/assets/logo/HHKJLogo.pngmultiple/assets/logo/HYSNLogo.pngmultiple/assets/logo/JZYJLogo.pngmultiple/assets/logo/LCLogo.png
multiple/assets/logo/MXSCLogo.pngmultiple/assets/logo/RZNYLogo.pngmultiple/assets/logo/TJXMLogo.pngmultiple/assets/logo/WDSYLogo.pngmultiple/assets/logo/XYHBLogo.pngmultiple/assets/logo/ZQHXLogo.pngmultiple/assets/logo/logo.png
multiple/assets/logo/ÄÏÍ¨ÔÆ´Ó¹¤Òµ»¥ÁªÍøÓÐÏÞ¹«Ë¾.png
multiple/assets/logo/ÐÂÀ£¨½ËÕ£©Êý×ֿƼ¼ÓÐÏÞ¹«Ë¾.png
multiple/assets/logo/оµ¼Èí¼þ£¨½ËÕ£©ÓÐÏÞ¹«Ë¾.png
multiple/assets/screen/DHDCView.pngmultiple/assets/screen/HHKJView.pngmultiple/assets/screen/HYSNView.pngmultiple/assets/screen/JZYJView.pngmultiple/assets/screen/MXSCBack.pngmultiple/assets/screen/RZNYView.pngmultiple/assets/screen/TJXMView.pngmultiple/assets/screen/WDSYView.pngmultiple/assets/screen/XYHBView.pngmultiple/assets/screen/ZQHXView.pngmultiple/config.json
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,32 @@ { "default": { "env": { "VITE_APP_TITLE": "è¯å¯¼äºï¼ç®¡çä¿¡æ¯ç³»ç»ï¼" }, "screen": "screen/JZYJView.png", "logo": "logo/HYSNLogo.png", "favicon": "favicon/HYSNico.ico" }, "TEST": { "env": { "VITE_APP_TITLE": "ä¸å°ä¼ä¸æ°åå转åäºçº§å¥é¤å ", "VITE_BASE_API": "http://114.132.189.42:9036", "VITE_JAVA_API": "http://114.132.189.42:9037" }, "screen": "screen/HYSNView.png", "logo": "logo/LCLogo.png", "favicon": "favicon/BHMY.ico" }, "BBB": { "env": { "VITE_APP_TITLE": "éè¾¹å¿ä¸å¼ºæå ´ç¯ä¿ç§ææéå ¬å¸", "VITE_BASE_API": "http://127.0.0.1:9036" }, "screen": "screen/ZQHXView.png", "logo": "logo/æ°ç¼ï¼æ±èï¼æ°åç§ææéå ¬å¸.png", "favicon": "favicon/HYSNico.ico" }, "screen": "/src/assets/images/login-background.png", "logo": "/src/assets/logo/logo.png", "favicon": "/public/favicon.ico" } multiple/multiple-build.js
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,86 @@ import fs from 'fs/promises'; import fsSync from 'fs'; import path from 'path'; import { fileURLToPath } from 'url'; import { execSync } from "child_process"; // è·å __dirname const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); // 读å JSON é ç½® const data = await fs.readFile(path.join(__dirname, 'config.json'), 'utf-8'); const config = JSON.parse(data); // 项ç®è·¯å¾ const rootPath = path.resolve(__dirname, '..'); const resourcePath = path.join(rootPath, 'multiple', 'assets'); const replacePath = path.join(rootPath, 'replace'); // è·åå½ä»¤è¡åæ° const params = parseArgs(process.argv); const company = params["company"] ?? "default"; const companyMap = config[company]; const envFilePath = path.join(process.cwd(), '.env.production.local'); try { // 1ï¸â£ çæ .env console.log("=======çæ.env======="); const envContent = Object.entries(companyMap.env) .map(([key, value]) => `${key}='${value}'`) .join('\n') + '\n'; await fs.writeFile(envFilePath, envContent, 'utf-8'); // 2ï¸â£ å¤ä»½åå§èµæºå¹¶æ¿æ¢ console.log("=======ä¿®æ¹èµæº======="); for (const [key, value] of Object.entries(companyMap)) { if (key === 'env') continue; const originFile = path.join(rootPath, config[key]); const backupFile = path.join(replacePath, config[key]); const replaceFile = path.join(resourcePath, companyMap[key]); await fs.mkdir(path.dirname(backupFile), { recursive: true }); await fs.copyFile(originFile, backupFile); await fs.copyFile(replaceFile, originFile); } console.log("=====å¼å§æå ======"); execSync("vite build", { stdio: "inherit" }); console.log("=====æå 宿======"); } finally { console.log("=====æ¢å¤èµæº======"); // å é¤ä¸´æ¶ .env æä»¶ if (fsSync.existsSync(envFilePath)) { await fs.unlink(envFilePath); console.log(`ðï¸ å·²å é¤ ${envFilePath}`); } // æ¢å¤èµæºæä»¶ if (fsSync.existsSync(replacePath)) { for (const [key, value] of Object.entries(companyMap)) { if (key === 'env') continue; const originFile = path.join(rootPath, config[key]); const backupFile = path.join(replacePath, config[key]); await fs.copyFile(backupFile, originFile); } await fs.rm(replacePath, { recursive: true, force: true }); console.log(`ðï¸ å·²å é¤ ${replacePath}`); } } // ç®åå½ä»¤è¡åæ°è§£æ function parseArgs(argv) { const params = {}; for (const arg of argv.slice(2)) { if (arg.startsWith('--')) { const [key, value] = arg.slice(2).split('='); params[key] = value ?? true; } } return params; } package.json
@@ -1,13 +1,13 @@ { "name": "ruoyi", "version": "3.8.9", "description": "æµè¯è¿éå管çç³»ç»", "description": "ä¸å°ä¼ä¸æ°åå转åäºçº§å¥é¤å ", "author": "è¥ä¾", "license": "MIT", "type": "module", "scripts": { "dev": "vite", "build:prod": "vite build", "build:prod": "node multiple/multiple-build.js", "build:stage": "vite build --mode staging", "preview": "vite preview" }, src/assets/indexViews/login-background.png
src/layout/components/Sidebar/Logo.vue
@@ -16,7 +16,7 @@ <script setup> import { ref, computed, onMounted, watch } from 'vue' import useUserStore from '@/store/modules/user' import defaultLogo from '@/assets/indexViews/ZQHXLogo.png' // å¯¼å ¥é»è®¤logo import defaultLogo from '@/assets/indexViews/LCLogo.png' // å¯¼å ¥é»è®¤logo defineProps({ collapse: { src/main.js
@@ -76,7 +76,7 @@ app.config.globalProperties.addDateRange = addDateRange; app.config.globalProperties.selectDictLabel = selectDictLabel; app.config.globalProperties.selectDictLabels = selectDictLabels; app.config.globalProperties.javaApi = "http://114.132.189.42:9037"; app.config.globalProperties.javaApi = __BASE_API__; app.config.globalProperties.HaveJson = (val) => { return JSON.parse(JSON.stringify(val)); }; src/views/login.vue
@@ -181,7 +181,7 @@ <style lang='scss' scoped> .login { height: 100%; background-image: url("../assets/indexViews/JZYJView.png"); background-image: url("../assets/images/login-background.png"); background-size: cover; position: relative; } vite.config.js
@@ -7,11 +7,17 @@ const env = loadEnv(mode, process.cwd()); const { VITE_APP_ENV } = env; const baseUrl = VITE_APP_ENV == "development" ? "http://114.132.189.42:9036" // å¼åç¯å¢å端æ¥å£ : "http://114.132.189.42:9036"; // ç产ç¯å¢å端æ¥å£ env.VITE_APP_ENV === "development" ? "http://114.132.189.42:9036" : env.VITE_BASE_API; const javaUrl = env.VITE_APP_ENV === "development" ? "http://114.132.189.42:9037" : env.VITE_JAVA_API; return { define:{ __BASE_API__: JSON.stringify(javaUrl) }, // é¨ç½²ç产ç¯å¢åå¼åç¯å¢ä¸çURLã // é»è®¤æ åµä¸ï¼vite ä¼åè®¾ä½ çåºç¨æ¯è¢«é¨ç½²å¨ä¸ä¸ªååçæ ¹è·¯å¾ä¸ // ä¾å¦ https://www.ruoyi.vip/ã妿åºç¨è¢«é¨ç½²å¨ä¸ä¸ªåè·¯å¾ä¸ï¼ä½ å°±éè¦ç¨è¿ä¸ªé项æå®è¿ä¸ªåè·¯å¾ãä¾å¦ï¼å¦æä½ çåºç¨è¢«é¨ç½²å¨ https://www.ruoyi.vip/admin/ï¼å设置 baseUrl 为 /admin/ã