完成了 BOM 管理和生产管理,完成部分发料单、采购计划和调拨单。

This commit is contained in:
c
2026-02-28 18:18:01 +08:00
commit 219eef4729
399 changed files with 46113 additions and 0 deletions

72
node/getEnv.ts Normal file
View File

@@ -0,0 +1,72 @@
import fs from "fs";
import path from "path";
import dotenv from "dotenv";
export type Recordable<T = any> = Record<string, T>;
export function isDevFn(mode: string): boolean {
return mode === "development";
}
export function isProdFn(mode: string): boolean {
return mode === "production";
}
/**
* 是否开启生成 package 报告
*/
export function isReportMode(): boolean {
return process.env.VITE_REPORT === "true";
}
/**
* 重新解析 .env 的内容,重新封装类型,比如 .env 定义了 truefalse默认为字符串类型需要转换为 boolean 类型
*/
export function wrapperEnv(envConf: Recordable): ImportMetaEnv {
const ret: any = {};
for (const envName of Object.keys(envConf)) {
let realName = envConf[envName].replace(/\\n/g, "\n");
// 将 true 和 false 字符串转换为布尔值
realName = realName === "true" ? true : realName === "false" ? false : realName;
// 指定变量名进行类型转换
if (envName === "VITE_PORT") realName = Number(realName);
ret[envName] = realName;
process.env[envName] = realName;
}
return ret;
}
/**
* 从环境变量文件里获取变量值
*
* @param match 前缀
* @param confFiles 文件列表
*/
export function getEnvConfig(match = "VITE_", confFiles = [".env", ".env.production", ".env.sit", ".env.uat"]) {
let envConfig = {};
confFiles.forEach(item => {
try {
const env = dotenv.parse(fs.readFileSync(path.resolve(process.cwd(), item)));
envConfig = { ...envConfig, ...env };
} catch (error) {
console.error(`Error in parsing ${item}`, error);
}
});
Object.keys(envConfig).forEach(key => {
const reg = new RegExp(`^(${match})`);
if (!reg.test(key)) {
Reflect.deleteProperty(envConfig, key);
}
});
return envConfig;
}
/**
* 获取项目根路径
*/
export function getRootPath(...dir: string[]) {
return path.resolve(process.cwd(), ...dir);
}