diff --git a/init.bat b/init.bat index 7b6c6ed..b0d124d 100644 --- a/init.bat +++ b/init.bat @@ -1,102 +1,101 @@ -@echo off -chcp 65001 >nul -REM ============================================================ -REM CareerNexus è�Œè�” åˆ�始化脚本(Windows) -REM 作用:建虚拟环境 → 装ä¾�èµ– → 写离线默认é…�置(触å�‘首次引导)→ 生æˆ�æ•°æ�®é›† -REM 用法:å�Œå‡»è¿�行,或在 cmd 中执行 init.bat -REM ============================================================ -setlocal enabledelayedexpansion -cd /d "%~dp0" - -echo ========================================== -echo CareerNexus è�Œè�” · åˆ�始化 -echo ========================================== - -REM ---------- 1. 检查 Python(跳过 WindowsApps 商店å� ä½� stub) ---------- -set "PY=" -for %%c in (python python3 py) do ( - if not defined PY ( - where %%c >nul 2>nul - if not errorlevel 1 ( - for /f "delims=" %%p in ('where %%c 2^>nul ^| findstr /v /i "WindowsApps"') do ( - if not defined PY ( - for /f "tokens=2" %%v in ('"%%p" --version 2^>^&1') do ( - set "PY=%%p" - set "PYVER=%%v" - ) - ) - ) - ) - ) -) -if not defined PY ( - echo [错误] 未找到å�¯ç”¨çš„ Python 3.11+(商店å� ä½� stub ä¸�算),请安装å�ŽåŠ å…¥ PATH - pause - exit /b 1 -) -echo [1/5] Python 版本: %PYVER% (%PY%) - -REM ---------- 2. 创建虚拟环境 ---------- -if not exist ".venv\Scripts\python.exe" ( - echo [2/5] 创建虚拟环境 .venv ... - "%PY%" -m venv .venv - if errorlevel 1 ( - echo [错误] 虚拟环境创建失败 - pause - exit /b 1 - ) -) else ( - echo [2/5] 虚拟环境已存在,跳过 -) -set VENV_PY=.venv\Scripts\python.exe - -REM ---------- 3. 安装ä¾�赖(镜åƒ�站优先,失败回退官方æº�) ---------- -echo [3/5] 安装ä¾�赖(清å�Žé•œåƒ�站)... -%VENV_PY% -m pip install -q -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple -if errorlevel 1 ( - echo 镜åƒ�站失败,改用官方æº�é‡�试... - %VENV_PY% -m pip install -q -r requirements.txt - if errorlevel 1 ( - echo [错误] ä¾�赖安装失败,请检查网络 - pause - exit /b 1 - ) -) - -REM ---------- 4. 写入离线默认é…�置(config.json) ---------- -REM mode=demo 离线演示模å¼�ï¼›guided=false 使首次å�¯åŠ¨å¼¹å‡º"åˆ�始设置"引导; -REM 已有é…�置先备份为 config.json.bak -if exist config.json ( - echo [4/5] 检测到已有 config.json,备份为 config.json.bak - copy /y config.json config.json.bak >nul -) -echo [4/5] 写入离线默认é…�ç½® config.json ... -( -echo { -echo "mode": "demo", -echo "guided": false, -echo "embed_provider": "local" -echo } -) > config.json - -REM ---------- 5. 生æˆ�自备数æ�®é›† ---------- -if not exist "data\jd_raw" ( - echo [5/5] 生æˆ�自备数æ�®é›†ï¼ˆseed=2026)... - %VENV_PY% scripts\generate_dataset.py - if errorlevel 1 ( - echo [错误] æ•°æ�®é›†ç”Ÿæˆ�失败 - pause - exit /b 1 - ) -) else ( - echo [5/5] æ•°æ�®é›†å·²å­˜åœ¨ï¼Œè·³è¿‡ï¼ˆéœ€é‡�建请è¿�行 %VENV_PY% scripts\generate_dataset.py) -) - -echo. -echo ========================================== -echo åˆ�始化完æˆ�ï¼�当å‰�为离线演示模å¼� -echo å�¯åŠ¨ï¼š%VENV_PY% main.py -echo 首次å�¯åŠ¨ä¼šå¼¹å‡º"åˆ�始设置",å�¯åœ¨å…¶ä¸­é…�ç½® -echo 星ç�« LLM 密钥与语义å�‘é‡�模型(亦å�¯è·³è¿‡ï¼‰ -echo ========================================== -pause +@echo off +REM ============================================================ +REM CareerNexus Ö°Áª ³õʼ»¯½Å±¾£¨Windows£© +REM ×÷Ó㺽¨ÐéÄâ»·¾³ ¡ú ×°ÒÀÀµ ¡ú дÀëÏßĬÈÏÅäÖ㨴¥·¢Ê×´ÎÒýµ¼£©¡ú Éú³ÉÊý¾Ý¼¯ +REM Ó÷¨£ºË«»÷ÔËÐУ¬»òÔÚ cmd ÖÐÖ´ÐÐ init.bat +REM ============================================================ +setlocal enabledelayedexpansion +cd /d "%~dp0" + +echo ========================================== +echo CareerNexus Ö°Áª ¡¤ ³õʼ»¯ +echo ========================================== + +REM ---------- 1. ¼ì²é Python£¨Ìø¹ý WindowsApps É̵êռλ stub£© ---------- +set "PY=" +for %%c in (python python3 py) do ( + if not defined PY ( + where %%c >nul 2>nul + if not errorlevel 1 ( + for /f "delims=" %%p in ('where %%c 2^>nul ^| findstr /v /i "WindowsApps"') do ( + if not defined PY ( + for /f "tokens=2" %%v in ('"%%p" --version 2^>^&1') do ( + set "PY=%%p" + set "PYVER=%%v" + ) + ) + ) + ) + ) +) +if not defined PY ( + echo [´íÎó] δÕÒµ½¿ÉÓÃµÄ Python 3.11+£¨É̵êռλ stub ²»Ë㣩£¬Çë°²×°ºó¼ÓÈë PATH + pause + exit /b 1 +) +echo [1/5] Python °æ±¾: %PYVER% (%PY%) + +REM ---------- 2. ´´½¨ÐéÄâ»·¾³ ---------- +if not exist ".venv\Scripts\python.exe" ( + echo [2/5] ´´½¨ÐéÄâ»·¾³ .venv ... + "%PY%" -m venv .venv + if errorlevel 1 ( + echo [´íÎó] ÐéÄâ»·¾³´´½¨Ê§°Ü + pause + exit /b 1 + ) +) else ( + echo [2/5] ÐéÄâ»·¾³ÒÑ´æÔÚ£¬Ìø¹ý +) +set VENV_PY=.venv\Scripts\python.exe + +REM ---------- 3. °²×°ÒÀÀµ£¨¾µÏñÕ¾ÓÅÏÈ£¬Ê§°Ü»ØÍ˹ٷ½Ô´£© ---------- +echo [3/5] °²×°ÒÀÀµ£¨Ç廪¾µÏñÕ¾£©... +%VENV_PY% -m pip install -q -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple +if errorlevel 1 ( + echo ¾µÏñվʧ°Ü£¬¸ÄÓùٷ½Ô´ÖØÊÔ... + %VENV_PY% -m pip install -q -r requirements.txt + if errorlevel 1 ( + echo [´íÎó] ÒÀÀµ°²×°Ê§°Ü£¬Çë¼ì²éÍøÂç + pause + exit /b 1 + ) +) + +REM ---------- 4. дÈëÀëÏßĬÈÏÅäÖã¨config.json£© ---------- +REM mode=demo ÀëÏßÑÝʾģʽ£»guided=false ʹÊ×´ÎÆô¶¯µ¯³ö"³õʼÉèÖÃ"Òýµ¼£» +REM ÒÑÓÐÅäÖÃÏȱ¸·ÝΪ config.json.bak +if exist config.json ( + echo [4/5] ¼ì²âµ½ÒÑÓÐ config.json£¬±¸·ÝΪ config.json.bak + copy /y config.json config.json.bak >nul +) +echo [4/5] дÈëÀëÏßĬÈÏÅäÖà config.json ... +( +echo { +echo "mode": "demo", +echo "guided": false, +echo "embed_provider": "local" +echo } +) > config.json + +REM ---------- 5. Éú³É×Ô±¸Êý¾Ý¼¯ ---------- +if not exist "data\jd_raw" ( + echo [5/5] Éú³É×Ô±¸Êý¾Ý¼¯£¨seed=2026£©... + %VENV_PY% scripts\generate_dataset.py + if errorlevel 1 ( + echo [´íÎó] Êý¾Ý¼¯Éú³Éʧ°Ü + pause + exit /b 1 + ) +) else ( + echo [5/5] Êý¾Ý¼¯ÒÑ´æÔÚ£¬Ìø¹ý£¨ÐèÖØ½¨ÇëÔËÐÐ %VENV_PY% scripts\generate_dataset.py£© +) + +echo. +echo ========================================== +echo ³õʼ»¯Íê³É£¡µ±Ç°ÎªÀëÏßÑÝʾģʽ +echo Æô¶¯£º%VENV_PY% main.py +echo Ê×´ÎÆô¶¯»áµ¯³ö"³õʼÉèÖÃ"£¬¿ÉÔÚÆäÖÐÅäÖà +echo ÐÇ»ð LLM ÃÜÔ¿ÓëÓïÒåÏòÁ¿Ä£ÐÍ£¨Òà¿ÉÌø¹ý£© +echo ========================================== +pause diff --git a/start.bat b/start.bat index 7b6b750..39dbb51 100644 --- a/start.bat +++ b/start.bat @@ -1,19 +1,18 @@ -@echo off -chcp 65001 >nul -REM ============================================================ -REM CareerNexus è�Œè�” å�¯åŠ¨è„šæœ¬ï¼ˆWindows) -REM 直接通过项目内 .venv å�¯åЍæœ�务,自动打开æµ�览器 -REM 首次使用请先è¿�行 init.bat -REM ============================================================ -cd /d "%~dp0" - -if not exist ".venv\Scripts\python.exe" ( - echo [错误] 未找到 .venv,请先è¿�行 init.bat 完æˆ�åˆ�始化 - pause - exit /b 1 -) - -echo å�¯åЍ CareerNexus è�Œè�” ... -echo æœ�务地å�€ http://127.0.0.1:9008 -.venv\Scripts\python.exe main.py -pause +@echo off +REM ============================================================ +REM CareerNexus Ö°Áª Æô¶¯½Å±¾£¨Windows£© +REM Ö±½Óͨ¹ýÏîÄ¿ÄÚ .venv Æô¶¯·þÎñ£¬×Ô¶¯´ò¿ªä¯ÀÀÆ÷ +REM Ê×´ÎʹÓÃÇëÏÈÔËÐÐ init.bat +REM ============================================================ +cd /d "%~dp0" + +if not exist ".venv\Scripts\python.exe" ( + echo [´íÎó] δÕÒµ½ .venv£¬ÇëÏÈÔËÐÐ init.bat Íê³É³õʼ»¯ + pause + exit /b 1 +) + +echo Æô¶¯ CareerNexus Ö°Áª ... +echo ·þÎñµØÖ· http://127.0.0.1:9008 +.venv\Scripts\python.exe main.py +pause diff --git a/webui/app.js b/webui/app.js index 0a0e787..84c9210 100644 --- a/webui/app.js +++ b/webui/app.js @@ -732,10 +732,11 @@ function drawEventFlow(canvas, events, n) { /* ================= å²—ä½�演化 ================= */ /* å�˜åŒ–类型视觉语义:新增=é�’绿 / 增强=è“�ç´« / å‡�å¼±=ç�¥ç�€ / 退出=砖红(æŒ�ç»­=中性è“�ç�°ï¼‰ */ const CHANGE_META = { - "新增": { tag: "tag-cyan", color: "#13c2c2" }, - "增强": { tag: "tag-purple", color: "#722ed1" }, - "å‡�å¼±": { tag: "tag-orange", color: "#ff7d00" }, - "退出": { tag: "tag-red", color: "#f53f3f" }, + // 低饱和语义色:图表填充用柔和色,文字标签ä»�用 tag 类的标准色 + "新增": { tag: "tag-cyan", color: "#7bc8a4" }, + "增强": { tag: "tag-purple", color: "#8f9ff0" }, + "å‡�å¼±": { tag: "tag-orange", color: "#e8c07d" }, + "退出": { tag: "tag-red", color: "#d99a91" }, }; const STEADY_COLOR = "#86909c"; // æŒ�续:中性è“�ç�° let evoEvents = []; diff --git a/webui/graph.js b/webui/graph.js index 4836013..549e4d1 100644 --- a/webui/graph.js +++ b/webui/graph.js @@ -27,7 +27,7 @@ const VIEW_KEY = "cn_graph_view"; const DEFAULT_SOLO_JOB = "job_Javaå¼€å�‘工程师"; // 首å±�默认岗ä½�å­�图(局部å�¯è¯»ï¼‰ /* å�˜åŒ–类型颜色(与 app.js CHANGE_META 一致):新增=é�’绿 / 增强=è“�ç´« / å‡�å¼±=ç�¥ç�€ / 退出=砖红 */ - const CHANGE_COLORS = { "新增": "#13c2c2", "增强": "#722ed1", "å‡�å¼±": "#ff7d00", "退出": "#f53f3f" }; + const CHANGE_COLORS = { "新增": "#7bc8a4", "增强": "#8f9ff0", "å‡�å¼±": "#e8c07d", "退出": "#d99a91" }; const CHANGE_MARK = { "新增": "æ–°", "增强": "↑", "å‡�å¼±": "↓", "退出": "退" }; /* å�˜åŒ–角标数æ�®ï¼šæœ€è¿‘ 2 季度有事件的技能(å­�图模å¼�下按当å‰�å²—ä½�过滤) */ diff --git a/webui/style.css b/webui/style.css index 394475b..31f983f 100644 --- a/webui/style.css +++ b/webui/style.css @@ -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; } .path-demo-banner .btn { margin-left: auto; } + +/* 驾驶舱事件æµ�主图é™�高 */ +#trend-canvas { max-height: 260px; }