From e47bc9e53ed3d64016c1e0db67d280e63b367e07 Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期五, 21 八月 2026 17:05:54 +0800
Subject: [PATCH] 导入模板下载 导入 计算迟到加班早退

---
 deploy.bat |  520 ++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 401 insertions(+), 119 deletions(-)

diff --git a/deploy.bat b/deploy.bat
index 658af05..f07c556 100644
--- a/deploy.bat
+++ b/deploy.bat
@@ -1,169 +1,451 @@
 @echo off
-chcp 65001 >nul
-setlocal enabledelayedexpansion
+setlocal EnableExtensions EnableDelayedExpansion
 
-:: ================= Config =================
-set "USER=root"
-set "PASS=Xdrjkj@10086#"
-set "IP=36.213.180.217"
-set "PORT=65022"
-set "DIST_DIR=dist"
-set "REMOTE_DIR=/data/project/mom/vue/test"
-set "SSH_OPTS=-o StrictHostKeyChecking=no -o ConnectTimeout=10"
-:: ===========================================
+REM ============================================================
+REM Vue Frontend Deploy Script
+REM ============================================================
 
-echo ==========================================
-echo        Vue Dist Auto Deploy Script
-echo ==========================================
+REM =========================
+REM Configuration
+REM =========================
+
+set "COMPANY=TEST"
+
+set "REMOTE_USER=root"
+set "REMOTE_HOST=36.213.90.123"
+set "REMOTE_PORT=65022"
+
+set "PASSWORD=Xdrjkj@10086#"
+
+set "ZIP_FILE=dist.zip"
+set "REMOTE_DIR=/data/project/mom/vue/test/dist"
+
+set "SSH_OPTS=-o StrictHostKeyChecking=no -o ConnectTimeout=10 -o ServerAliveInterval=15 -o ServerAliveCountMax=3"
+
+set "RETRY_COUNT=3"
+
+set "SSHPASS_DIR=%~dp0bin"
+
+
+REM ============================================================
+REM Start
+REM ============================================================
+
+echo.
+echo ============================================================
+echo              Vue Dist Auto Deploy
+echo ============================================================
+echo.
+echo Company    : %COMPANY%
+echo Server     : %REMOTE_USER%@%REMOTE_HOST%
+echo Port       : %REMOTE_PORT%
+echo Remote Dir : %REMOTE_DIR%
+echo Package    : %ZIP_FILE%
 echo.
 
-:: Check if sshpass is available
-set "SSHPASS_DIR=%~dp0bin"
-if exist "!SSHPASS_DIR!\sshpass.exe" (
-    set "PATH=!SSHPASS_DIR!;%PATH%"
+
+REM ============================================================
+REM Check sshpass
+REM ============================================================
+
+echo [1/7] Checking sshpass...
+
+if exist "%SSHPASS_DIR%\sshpass.exe" (
+    set "PATH=%SSHPASS_DIR%;%PATH%"
 )
 
 where sshpass >nul 2>&1
-if %errorlevel% equ 0 goto :check_node
 
-echo [WARN] sshpass not found, trying to install...
-echo.
-
-where bash >nul 2>&1
-if %errorlevel% equ 0 (
-    echo [INFO] Git Bash detected, trying pacman install...
-    bash -c "pacman -S --noconfirm sshpass" 2>nul
-    if !errorlevel! equ 0 (
-        echo [OK] sshpass installed via pacman!
-        goto :check_node
-    )
+if not errorlevel 1 (
+    echo [OK] sshpass found.
+    goto CHECK_PNPM
 )
 
-if not exist "!SSHPASS_DIR!" mkdir "!SSHPASS_DIR!"
+echo [WARN] sshpass not found.
 
-if exist "!SSHPASS_DIR!\sshpass.exe" (
-    set "PATH=!SSHPASS_DIR!;%PATH%"
-    echo [OK] sshpass found at: !SSHPASS_DIR!
-    goto :check_node
+if not exist "%SSHPASS_DIR%" (
+    mkdir "%SSHPASS_DIR%" >nul 2>&1
+)
+
+if exist "%SSHPASS_DIR%\sshpass.exe" (
+    set "PATH=%SSHPASS_DIR%;%PATH%"
+    echo [OK] sshpass found.
+    goto CHECK_PNPM
 )
 
 echo [INFO] Downloading sshpass...
-powershell -NoProfile -Command "$url='https://github.com/xhcoding/sshpass-win32/releases/download/v1.0.3/sshpass.exe'; $out='!SSHPASS_DIR!\sshpass.exe'; Write-Host \"Downloading to: $out\"; try { Invoke-WebRequest -Uri $url -OutFile $out -UseBasicParsing; exit 0 } catch { Write-Host $_.Exception.Message; exit 1 }"
-if !errorlevel! neq 0 (
-    echo [ERROR] Failed to download sshpass!
-    echo [HINT] Please install sshpass manually or use Git Bash: pacman -S sshpass
-    goto :error_exit
+
+powershell -NoProfile -ExecutionPolicy Bypass -Command "$url='https://github.com/xhcoding/sshpass-win32/releases/download/v1.0.3/sshpass.exe'; $out='%SSHPASS_DIR%\sshpass.exe'; Invoke-WebRequest -Uri $url -OutFile $out"
+
+if errorlevel 1 (
+    echo [ERROR] Failed to download sshpass.
+    echo [ERROR] Please install sshpass manually.
+    goto ERROR_EXIT
 )
 
-set "PATH=!SSHPASS_DIR!;%PATH%"
-echo [OK] sshpass downloaded to: !SSHPASS_DIR!
-echo.
+set "PATH=%SSHPASS_DIR%;%PATH%"
 
-:check_node
-:: Check if pnpm is available
+echo [OK] sshpass installed.
+
+
+REM ============================================================
+REM Check pnpm
+REM ============================================================
+
+:CHECK_PNPM
+
+echo.
+echo [2/7] Checking pnpm...
+
 where pnpm >nul 2>&1
-if %errorlevel% neq 0 (
-    echo [ERROR] pnpm not found! Please install pnpm first.
+
+if errorlevel 1 (
+    echo [ERROR] pnpm not found.
     echo [HINT] npm install -g pnpm
-    goto :error_exit
+    goto ERROR_EXIT
 )
 
-:: Check if node_modules exists
+call pnpm --version
+
+if errorlevel 1 (
+    echo [ERROR] pnpm execution failed.
+    goto ERROR_EXIT
+)
+
+
+REM ============================================================
+REM Check node
+REM ============================================================
+
+echo.
+echo [3/7] Checking Node.js...
+
+where node >nul 2>&1
+
+if errorlevel 1 (
+    echo [ERROR] Node.js not found.
+    goto ERROR_EXIT
+)
+
+call node --version
+
+if errorlevel 1 (
+    echo [ERROR] Node.js execution failed.
+    goto ERROR_EXIT
+)
+
+
+REM ============================================================
+REM Check node_modules
+REM ============================================================
+
 if not exist "node_modules" (
-    echo [INFO] node_modules not found, running pnpm install...
     echo.
+    echo [INFO] node_modules not found.
+    echo [INFO] Running pnpm install...
+
     call pnpm install
-    if !errorlevel! neq 0 (
-        echo [ERROR] pnpm install failed!
-        goto :error_exit
+
+    if errorlevel 1 (
+        echo [ERROR] pnpm install failed.
+        goto ERROR_EXIT
     )
+
+    echo [OK] pnpm install completed.
+) else (
+    echo [OK] node_modules exists.
+)
+
+
+REM ============================================================
+REM Build
+REM ============================================================
+
+echo.
+echo [4/7] Building project...
+
+if exist "%ZIP_FILE%" (
     echo.
-)
+    echo [WARN] %ZIP_FILE% already exists.
+    set "REBUILD="
+    set /p "REBUILD=Rebuild? Y/N (default Y): "
 
-:: Check if dist exists and ask user
-if exist "%DIST_DIR%" (
-    echo [WARN] dist directory already exists.
-    set /p "REBUILD=Do you want to rebuild? (Y/N, default Y): "
-    if /i "!REBUILD!"=="N" (
-        echo [INFO] Skip build, using existing dist
-        goto :upload
+    if /I "!REBUILD!"=="N" (
+        echo [INFO] Skip build.
+        goto CHECK_ZIP
     )
 )
 
-:: Build the project
-echo [STEP 1/3] Building project...
-echo [INFO] Running: pnpm run build
+echo [INFO] Company: %COMPANY%
+echo [INFO] Command: pnpm run build
 echo.
+
+set "VITE_COMPANY=%COMPANY%"
+
 call pnpm run build
-if !errorlevel! neq 0 (
-    echo [ERROR] Build failed! Check your project configuration.
-    goto :error_exit
-)
-echo [OK] Build completed!
-echo.
 
-:upload
-if not exist "%DIST_DIR%" (
-    echo [ERROR] Dist directory not found: %DIST_DIR%
-    echo [HINT] Build may have failed or output directory is incorrect.
-    goto :error_exit
+if errorlevel 1 (
+    echo.
+    echo [ERROR] Build failed.
+    goto ERROR_EXIT
 )
 
-:: Count files and calculate size
-set "FILE_COUNT=0"
-set "TOTAL_SIZE=0"
-for /r "%DIST_DIR%" %%F in (*) do (
-    set /a "FILE_COUNT+=1"
-    set /a "TOTAL_SIZE+=%%~zF"
-)
-set /a "TOTAL_SIZE_MB=TOTAL_SIZE/1024/1024"
-
-echo [INFO] Dist directory: %DIST_DIR%
-echo [INFO] Files count: %FILE_COUNT%
-echo [INFO] Total size: %TOTAL_SIZE_MB% MB
-echo [INFO] Target: %USER%@%IP%:%PORT%
-echo [INFO] Remote dir: %REMOTE_DIR%
 echo.
+echo [OK] Build completed.
 
-:: Optional: Ask for confirmation before upload
-set /p "CONFIRM=Proceed with upload? (Y/N, default Y): "
-if /i "!CONFIRM!"=="N" (
-    echo [INFO] Upload cancelled by user.
-    goto :end
+
+REM ============================================================
+REM Check ZIP
+REM ============================================================
+
+:CHECK_ZIP
+
+echo.
+echo [5/7] Checking package...
+
+if not exist "%ZIP_FILE%" (
+    echo [ERROR] %ZIP_FILE% not found.
+    echo [HINT] Please check whether your build generates dist.zip.
+    goto ERROR_EXIT
 )
 
-:: Upload dist directory
-echo [STEP 2/3] Uploading dist directory...
-sshpass -p "%PASS%" scp -P %PORT% %SSH_OPTS% -r "%DIST_DIR%" %USER%@%IP%:%REMOTE_DIR%/
-if %errorlevel% neq 0 (
-    echo [ERROR] Upload failed! Check network or credentials.
-    goto :error_exit
+for %%F in ("%ZIP_FILE%") do set "ZIP_BYTES=%%~zF"
+
+set /a ZIP_MB=ZIP_BYTES/1024/1024
+
+echo [OK] Package found.
+echo [INFO] File size: !ZIP_BYTES! bytes
+echo [INFO] File size: !ZIP_MB! MB
+
+
+REM ============================================================
+REM Set sshpass password
+REM ============================================================
+
+set "SSHPASS=%PASSWORD%"
+
+
+REM ============================================================
+REM Test SSH
+REM ============================================================
+
+echo.
+echo [6/7] Testing SSH connection...
+
+sshpass -e ssh -p %REMOTE_PORT% %SSH_OPTS% %REMOTE_USER%@%REMOTE_HOST% "echo SSH_OK"
+
+if errorlevel 1 (
+    echo [ERROR] SSH connection failed.
+    goto ERROR_EXIT
 )
-echo [OK] Upload completed!
-echo.
 
-:: Optional: Remote restart/cleanup (uncomment if needed)
-:: echo [STEP 3/3] Restarting remote service...
-:: sshpass -p "%PASS%" ssh -p %PORT% %SSH_OPTS% %USER%@%IP% "cd %REMOTE_DIR% && npm run restart"
+echo [OK] SSH connection successful.
+
+
+REM ============================================================
+REM Create remote directory
+REM ============================================================
 
 echo.
-echo ==========================================
-echo [SUCCESS] Deploy completed!
-echo ==========================================
+echo [INFO] Creating remote directory...
+
+sshpass -e ssh -p %REMOTE_PORT% %SSH_OPTS% %REMOTE_USER%@%REMOTE_HOST% "mkdir -p '%REMOTE_DIR%'"
+
+if errorlevel 1 (
+    echo [ERROR] Failed to create remote directory.
+    goto ERROR_EXIT
+)
+
+echo [OK] Remote directory ready.
+
+
+REM ============================================================
+REM Upload temporary file
+REM ============================================================
+
 echo.
-echo Summary:
-echo   - Build: Completed
-echo   - Upload: %FILE_COUNT% files (%TOTAL_SIZE_MB% MB)
-echo   - Target: %USER%@%IP%:%PORT%%REMOTE_DIR%
+echo [INFO] Uploading package...
+
+set "REMOTE_TMP=%REMOTE_DIR%/.dist.zip.uploading"
+
+sshpass -e ssh -p %REMOTE_PORT% %SSH_OPTS% %REMOTE_USER%@%REMOTE_HOST% "rm -f '%REMOTE_TMP%'"
+
+sshpass -e scp -P %REMOTE_PORT% %SSH_OPTS% "%ZIP_FILE%" %REMOTE_USER%@%REMOTE_HOST%:"%REMOTE_TMP%"
+
+if errorlevel 1 (
+    echo [ERROR] Upload failed.
+    goto ERROR_EXIT
+)
+
+echo [OK] Upload completed.
+
+
+REM ============================================================
+REM Check remote file
+REM ============================================================
+
+echo.
+echo [INFO] Checking remote package...
+
+sshpass -e ssh -p %REMOTE_PORT% %SSH_OPTS% %REMOTE_USER%@%REMOTE_HOST% "test -f '%REMOTE_TMP%'"
+
+if errorlevel 1 (
+    echo [ERROR] Remote package does not exist.
+    goto ERROR_EXIT
+)
+
+echo [OK] Remote package exists.
+
+
+REM ============================================================
+REM Compare file size
+REM ============================================================
+
+echo.
+echo [INFO] Checking package size...
+
+sshpass -e ssh -p %REMOTE_PORT% %SSH_OPTS% %REMOTE_USER%@%REMOTE_HOST% "stat -c %%s '%REMOTE_TMP%'"
+
 echo.
 
-goto :end
 
-:error_exit
+REM ============================================================
+REM Rename temporary file
+REM ============================================================
+
+echo [INFO] Activating package...
+
+sshpass -e ssh -p %REMOTE_PORT% %SSH_OPTS% %REMOTE_USER%@%REMOTE_HOST% "mv -f '%REMOTE_TMP%' '%REMOTE_DIR%/%ZIP_FILE%'"
+
+if errorlevel 1 (
+    echo [ERROR] Failed to activate package.
+    goto ERROR_EXIT
+)
+
+echo [OK] Package activated.
+
+
+REM ============================================================
+REM Check unzip
+REM ============================================================
+
 echo.
-echo ==========================================
-echo [FAILED] Deploy failed!
-echo ==========================================
+echo [INFO] Checking unzip...
 
-:end
-pause
\ No newline at end of file
+sshpass -e ssh -p %REMOTE_PORT% %SSH_OPTS% %REMOTE_USER%@%REMOTE_HOST% "command -v unzip"
+
+if errorlevel 1 (
+    echo [ERROR] unzip is not installed on server.
+    echo.
+    echo CentOS/RHEL:
+    echo yum install -y unzip
+    echo.
+    echo Ubuntu/Debian:
+    echo apt install -y unzip
+    goto ERROR_EXIT
+)
+
+echo [OK] unzip found.
+
+
+REM ============================================================
+REM Test ZIP
+REM ============================================================
+
+echo.
+echo [INFO] Testing remote ZIP...
+
+sshpass -e ssh -p %REMOTE_PORT% %SSH_OPTS% %REMOTE_USER%@%REMOTE_HOST% "cd '%REMOTE_DIR%' && unzip -t '%ZIP_FILE%'"
+
+if errorlevel 1 (
+    echo.
+    echo [ERROR] ZIP test failed.
+    echo [INFO] Remote ZIP has been kept.
+    goto ERROR_EXIT
+)
+
+echo [OK] ZIP test passed.
+
+
+REM ============================================================
+REM Extract
+REM ============================================================
+
+echo.
+echo [INFO] Extracting package...
+
+sshpass -e ssh -p %REMOTE_PORT% %SSH_OPTS% %REMOTE_USER%@%REMOTE_HOST% "cd '%REMOTE_DIR%' && unzip -o '%ZIP_FILE%'"
+
+if errorlevel 1 (
+    echo.
+    echo [ERROR] Remote unzip failed.
+    echo [INFO] Remote ZIP has been kept.
+    goto ERROR_EXIT
+)
+
+echo.
+echo [OK] Extract completed.
+
+
+REM ============================================================
+REM Remove ZIP
+REM ============================================================
+
+echo.
+echo [INFO] Removing remote ZIP...
+
+sshpass -e ssh -p %REMOTE_PORT% %SSH_OPTS% %REMOTE_USER%@%REMOTE_HOST% "rm -f '%REMOTE_DIR%/%ZIP_FILE%'"
+
+if errorlevel 1 (
+    echo [WARN] Failed to remove remote ZIP.
+) else (
+    echo [OK] Remote ZIP removed.
+)
+
+
+REM ============================================================
+REM Success
+REM ============================================================
+
+echo.
+echo ============================================================
+echo                 DEPLOY SUCCESS
+echo ============================================================
+echo.
+echo Company    : %COMPANY%
+echo Server     : %REMOTE_HOST%:%REMOTE_PORT%
+echo Remote Dir : %REMOTE_DIR%
+echo Package    : %ZIP_FILE%
+echo Size       : !ZIP_MB! MB
+echo.
+echo Deployment completed successfully.
+echo.
+
+goto END
+
+
+REM ============================================================
+REM Error
+REM ============================================================
+
+:ERROR_EXIT
+
+echo.
+echo ============================================================
+echo                  DEPLOY FAILED
+echo ============================================================
+echo.
+echo Please check the error message above.
+echo.
+
+goto END
+
+
+REM ============================================================
+REM End
+REM ============================================================
+
+:END
+
+pause
+endlocal
\ No newline at end of file

--
Gitblit v1.9.3