bat 脚本转 GBK/CRLF 修复 cmd 中文乱码与命令误解析;图表改低饱和语义色;驾驶舱主图限高
This commit is contained in:
@@ -1,102 +1,101 @@
|
|||||||
@echo off
|
@echo off
|
||||||
chcp 65001 >nul
|
REM ============================================================
|
||||||
REM ============================================================
|
REM CareerNexus 职联 初始化脚本(Windows)
|
||||||
REM CareerNexus 职联 初始化脚本(Windows)
|
REM 作用:建虚拟环境 → 装依赖 → 写离线默认配置(触发首次引导)→ 生成数据集
|
||||||
REM 作用:建虚拟环境 → 装依赖 → 写离线默认配置(触发首次引导)→ 生成数据集
|
REM 用法:双击运行,或在 cmd 中执行 init.bat
|
||||||
REM 用法:双击运行,或在 cmd 中执行 init.bat
|
REM ============================================================
|
||||||
REM ============================================================
|
setlocal enabledelayedexpansion
|
||||||
setlocal enabledelayedexpansion
|
cd /d "%~dp0"
|
||||||
cd /d "%~dp0"
|
|
||||||
|
echo ==========================================
|
||||||
echo ==========================================
|
echo CareerNexus 职联 · 初始化
|
||||||
echo CareerNexus 职联 · 初始化
|
echo ==========================================
|
||||||
echo ==========================================
|
|
||||||
|
REM ---------- 1. 检查 Python(跳过 WindowsApps 商店占位 stub) ----------
|
||||||
REM ---------- 1. 检查 Python(跳过 WindowsApps 商店占位 stub) ----------
|
set "PY="
|
||||||
set "PY="
|
for %%c in (python python3 py) do (
|
||||||
for %%c in (python python3 py) do (
|
if not defined PY (
|
||||||
if not defined PY (
|
where %%c >nul 2>nul
|
||||||
where %%c >nul 2>nul
|
if not errorlevel 1 (
|
||||||
if not errorlevel 1 (
|
for /f "delims=" %%p in ('where %%c 2^>nul ^| findstr /v /i "WindowsApps"') do (
|
||||||
for /f "delims=" %%p in ('where %%c 2^>nul ^| findstr /v /i "WindowsApps"') do (
|
if not defined PY (
|
||||||
if not defined PY (
|
for /f "tokens=2" %%v in ('"%%p" --version 2^>^&1') do (
|
||||||
for /f "tokens=2" %%v in ('"%%p" --version 2^>^&1') do (
|
set "PY=%%p"
|
||||||
set "PY=%%p"
|
set "PYVER=%%v"
|
||||||
set "PYVER=%%v"
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
if not defined PY (
|
||||||
if not defined PY (
|
echo [错误] 未找到可用的 Python 3.11+(商店占位 stub 不算),请安装后加入 PATH
|
||||||
echo [错误] 未找到可用的 Python 3.11+(商店占位 stub 不算),请安装后加入 PATH
|
pause
|
||||||
pause
|
exit /b 1
|
||||||
exit /b 1
|
)
|
||||||
)
|
echo [1/5] Python 版本: %PYVER% (%PY%)
|
||||||
echo [1/5] Python 版本: %PYVER% (%PY%)
|
|
||||||
|
REM ---------- 2. 创建虚拟环境 ----------
|
||||||
REM ---------- 2. 创建虚拟环境 ----------
|
if not exist ".venv\Scripts\python.exe" (
|
||||||
if not exist ".venv\Scripts\python.exe" (
|
echo [2/5] 创建虚拟环境 .venv ...
|
||||||
echo [2/5] 创建虚拟环境 .venv ...
|
"%PY%" -m venv .venv
|
||||||
"%PY%" -m venv .venv
|
if errorlevel 1 (
|
||||||
if errorlevel 1 (
|
echo [错误] 虚拟环境创建失败
|
||||||
echo [错误] 虚拟环境创建失败
|
pause
|
||||||
pause
|
exit /b 1
|
||||||
exit /b 1
|
)
|
||||||
)
|
) else (
|
||||||
) else (
|
echo [2/5] 虚拟环境已存在,跳过
|
||||||
echo [2/5] 虚拟环境已存在,跳过
|
)
|
||||||
)
|
set VENV_PY=.venv\Scripts\python.exe
|
||||||
set VENV_PY=.venv\Scripts\python.exe
|
|
||||||
|
REM ---------- 3. 安装依赖(镜像站优先,失败回退官方源) ----------
|
||||||
REM ---------- 3. 安装依赖(镜像站优先,失败回退官方源) ----------
|
echo [3/5] 安装依赖(清华镜像站)...
|
||||||
echo [3/5] 安装依赖(清华镜像站)...
|
%VENV_PY% -m pip install -q -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
|
||||||
%VENV_PY% -m pip install -q -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
|
if errorlevel 1 (
|
||||||
if errorlevel 1 (
|
echo 镜像站失败,改用官方源重试...
|
||||||
echo 镜像站失败,改用官方源重试...
|
%VENV_PY% -m pip install -q -r requirements.txt
|
||||||
%VENV_PY% -m pip install -q -r requirements.txt
|
if errorlevel 1 (
|
||||||
if errorlevel 1 (
|
echo [错误] 依赖安装失败,请检查网络
|
||||||
echo [错误] 依赖安装失败,请检查网络
|
pause
|
||||||
pause
|
exit /b 1
|
||||||
exit /b 1
|
)
|
||||||
)
|
)
|
||||||
)
|
|
||||||
|
REM ---------- 4. 写入离线默认配置(config.json) ----------
|
||||||
REM ---------- 4. 写入离线默认配置(config.json) ----------
|
REM mode=demo 离线演示模式;guided=false 使首次启动弹出"初始设置"引导;
|
||||||
REM mode=demo 离线演示模式;guided=false 使首次启动弹出"初始设置"引导;
|
REM 已有配置先备份为 config.json.bak
|
||||||
REM 已有配置先备份为 config.json.bak
|
if exist config.json (
|
||||||
if exist config.json (
|
echo [4/5] 检测到已有 config.json,备份为 config.json.bak
|
||||||
echo [4/5] 检测到已有 config.json,备份为 config.json.bak
|
copy /y config.json config.json.bak >nul
|
||||||
copy /y config.json config.json.bak >nul
|
)
|
||||||
)
|
echo [4/5] 写入离线默认配置 config.json ...
|
||||||
echo [4/5] 写入离线默认配置 config.json ...
|
(
|
||||||
(
|
echo {
|
||||||
echo {
|
echo "mode": "demo",
|
||||||
echo "mode": "demo",
|
echo "guided": false,
|
||||||
echo "guided": false,
|
echo "embed_provider": "local"
|
||||||
echo "embed_provider": "local"
|
echo }
|
||||||
echo }
|
) > config.json
|
||||||
) > config.json
|
|
||||||
|
REM ---------- 5. 生成自备数据集 ----------
|
||||||
REM ---------- 5. 生成自备数据集 ----------
|
if not exist "data\jd_raw" (
|
||||||
if not exist "data\jd_raw" (
|
echo [5/5] 生成自备数据集(seed=2026)...
|
||||||
echo [5/5] 生成自备数据集(seed=2026)...
|
%VENV_PY% scripts\generate_dataset.py
|
||||||
%VENV_PY% scripts\generate_dataset.py
|
if errorlevel 1 (
|
||||||
if errorlevel 1 (
|
echo [错误] 数据集生成失败
|
||||||
echo [错误] 数据集生成失败
|
pause
|
||||||
pause
|
exit /b 1
|
||||||
exit /b 1
|
)
|
||||||
)
|
) else (
|
||||||
) else (
|
echo [5/5] 数据集已存在,跳过(需重建请运行 %VENV_PY% scripts\generate_dataset.py)
|
||||||
echo [5/5] 数据集已存在,跳过(需重建请运行 %VENV_PY% scripts\generate_dataset.py)
|
)
|
||||||
)
|
|
||||||
|
echo.
|
||||||
echo.
|
echo ==========================================
|
||||||
echo ==========================================
|
echo 初始化完成!当前为离线演示模式
|
||||||
echo 初始化完成!当前为离线演示模式
|
echo 启动:%VENV_PY% main.py
|
||||||
echo 启动:%VENV_PY% main.py
|
echo 首次启动会弹出"初始设置",可在其中配置
|
||||||
echo 首次启动会弹出"初始设置",可在其中配置
|
echo 星火 LLM 密钥与语义向量模型(亦可跳过)
|
||||||
echo 星火 LLM 密钥与语义向量模型(亦可跳过)
|
echo ==========================================
|
||||||
echo ==========================================
|
pause
|
||||||
pause
|
|
||||||
|
|||||||
@@ -1,19 +1,18 @@
|
|||||||
@echo off
|
@echo off
|
||||||
chcp 65001 >nul
|
REM ============================================================
|
||||||
REM ============================================================
|
REM CareerNexus 职联 启动脚本(Windows)
|
||||||
REM CareerNexus 职联 启动脚本(Windows)
|
REM 直接通过项目内 .venv 启动服务,自动打开浏览器
|
||||||
REM 直接通过项目内 .venv 启动服务,自动打开浏览器
|
REM 首次使用请先运行 init.bat
|
||||||
REM 首次使用请先运行 init.bat
|
REM ============================================================
|
||||||
REM ============================================================
|
cd /d "%~dp0"
|
||||||
cd /d "%~dp0"
|
|
||||||
|
if not exist ".venv\Scripts\python.exe" (
|
||||||
if not exist ".venv\Scripts\python.exe" (
|
echo [错误] 未找到 .venv,请先运行 init.bat 完成初始化
|
||||||
echo [错误] 未找到 .venv,请先运行 init.bat 完成初始化
|
pause
|
||||||
pause
|
exit /b 1
|
||||||
exit /b 1
|
)
|
||||||
)
|
|
||||||
|
echo 启动 CareerNexus 职联 ...
|
||||||
echo 启动 CareerNexus 职联 ...
|
echo 服务地址 http://127.0.0.1:9008
|
||||||
echo 服务地址 http://127.0.0.1:9008
|
.venv\Scripts\python.exe main.py
|
||||||
.venv\Scripts\python.exe main.py
|
pause
|
||||||
pause
|
|
||||||
|
|||||||
+5
-4
@@ -732,10 +732,11 @@ function drawEventFlow(canvas, events, n) {
|
|||||||
/* ================= 岗位演化 ================= */
|
/* ================= 岗位演化 ================= */
|
||||||
/* 变化类型视觉语义:新增=青绿 / 增强=蓝紫 / 减弱=琥珀 / 退出=砖红(持续=中性蓝灰) */
|
/* 变化类型视觉语义:新增=青绿 / 增强=蓝紫 / 减弱=琥珀 / 退出=砖红(持续=中性蓝灰) */
|
||||||
const CHANGE_META = {
|
const CHANGE_META = {
|
||||||
"新增": { tag: "tag-cyan", color: "#13c2c2" },
|
// 低饱和语义色:图表填充用柔和色,文字标签仍用 tag 类的标准色
|
||||||
"增强": { tag: "tag-purple", color: "#722ed1" },
|
"新增": { tag: "tag-cyan", color: "#7bc8a4" },
|
||||||
"减弱": { tag: "tag-orange", color: "#ff7d00" },
|
"增强": { tag: "tag-purple", color: "#8f9ff0" },
|
||||||
"退出": { tag: "tag-red", color: "#f53f3f" },
|
"减弱": { tag: "tag-orange", color: "#e8c07d" },
|
||||||
|
"退出": { tag: "tag-red", color: "#d99a91" },
|
||||||
};
|
};
|
||||||
const STEADY_COLOR = "#86909c"; // 持续:中性蓝灰
|
const STEADY_COLOR = "#86909c"; // 持续:中性蓝灰
|
||||||
let evoEvents = [];
|
let evoEvents = [];
|
||||||
|
|||||||
+1
-1
@@ -27,7 +27,7 @@
|
|||||||
const VIEW_KEY = "cn_graph_view";
|
const VIEW_KEY = "cn_graph_view";
|
||||||
const DEFAULT_SOLO_JOB = "job_Java开发工程师"; // 首屏默认岗位子图(局部可读)
|
const DEFAULT_SOLO_JOB = "job_Java开发工程师"; // 首屏默认岗位子图(局部可读)
|
||||||
/* 变化类型颜色(与 app.js CHANGE_META 一致):新增=青绿 / 增强=蓝紫 / 减弱=琥珀 / 退出=砖红 */
|
/* 变化类型颜色(与 app.js CHANGE_META 一致):新增=青绿 / 增强=蓝紫 / 减弱=琥珀 / 退出=砖红 */
|
||||||
const CHANGE_COLORS = { "新增": "#13c2c2", "增强": "#722ed1", "减弱": "#ff7d00", "退出": "#f53f3f" };
|
const CHANGE_COLORS = { "新增": "#7bc8a4", "增强": "#8f9ff0", "减弱": "#e8c07d", "退出": "#d99a91" };
|
||||||
const CHANGE_MARK = { "新增": "新", "增强": "↑", "减弱": "↓", "退出": "退" };
|
const CHANGE_MARK = { "新增": "新", "增强": "↑", "减弱": "↓", "退出": "退" };
|
||||||
|
|
||||||
/* 变化角标数据:最近 2 季度有事件的技能(子图模式下按当前岗位过滤) */
|
/* 变化角标数据:最近 2 季度有事件的技能(子图模式下按当前岗位过滤) */
|
||||||
|
|||||||
@@ -1162,3 +1162,6 @@ svg { width: 16px; height: 16px; stroke: currentColor; fill: none; stroke-width:
|
|||||||
padding: 10px 14px; font-size: 13px; color: #ad4e00; margin-bottom: 14px;
|
padding: 10px 14px; font-size: 13px; color: #ad4e00; margin-bottom: 14px;
|
||||||
}
|
}
|
||||||
.path-demo-banner .btn { margin-left: auto; }
|
.path-demo-banner .btn { margin-left: auto; }
|
||||||
|
|
||||||
|
/* 驾驶舱事件流主图限高 */
|
||||||
|
#trend-canvas { max-height: 260px; }
|
||||||
|
|||||||
Reference in New Issue
Block a user