diff --git a/.gitignore b/.gitignore index c077a8d..8ca21b2 100644 --- a/.gitignore +++ b/.gitignore @@ -24,4 +24,4 @@ dist-ssr *.sw? .cursor -/package-lock.json \ No newline at end of file +/package-lock.json diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 0000000..17fd1e7 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,66 @@ +#!/usr/bin/env bash +set -e + +# 部署脚本:打包并通过 SSH 将构建产物同步到远程目录 +# 用法: ./deploy.sh <服务器IP> <登录账户> <登录密码> [sudo] +# 示例: ./deploy.sh 192.168.1.100 22 root mypassword +# 若远程目录无写权限,加第5个参数 sudo:先传到 /tmp,再通过 sudo 拷到目标(会用到同一密码作为 sudo 密码) +# 示例: ./deploy.sh 192.168.1.100 22 myuser mypassword sudo + +if [ $# -lt 4 ]; then + echo "用法: $0 <服务器IP> <登录账户> <登录密码> [sudo]" + echo "示例: $0 192.168.1.100 22 root mypassword" + echo "远程目录无写权限时加第5参数: $0 <端口> <用户> <密码> sudo" + exit 1 +fi + +HOST="$1" +PORT="$2" +USER="$3" +PASSWORD="$4" +USE_SUDO="${5:-}" +REMOTE_DIR="/default/dockerfile/nginx/nginx/webapps/tool" +REMOTE_TMP="/tmp/tool_deploy_$$" +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +DIST_DIR="${SCRIPT_DIR}/dist" +SSH_OPTS="-p ${PORT} -o StrictHostKeyChecking=accept-new -T" + +echo ">>> 正在打包..." +cd "$SCRIPT_DIR" +npm run build + +if [ ! -d "$DIST_DIR" ]; then + echo "错误: 构建产物目录 dist 不存在" + exit 1 +fi + +# 检查 sshpass 是否可用(用于非交互式传入密码) +if ! command -v sshpass &> /dev/null; then + echo "未找到 sshpass,请先安装:" + echo " macOS: brew install sshpass" + echo " Ubuntu: sudo apt-get install sshpass" + exit 1 +fi + +export SSHPASS="$PASSWORD" + +if [ "$USE_SUDO" = "sudo" ]; then + echo ">>> 正在同步到远程临时目录 ${REMOTE_TMP}" + sshpass -e rsync -avz --delete \ + -e "ssh ${SSH_OPTS}" \ + "${DIST_DIR}/" \ + "${USER}@${HOST}:${REMOTE_TMP}/" + echo ">>> 正在用 sudo 拷贝到目标目录 ${REMOTE_DIR}" + # 只执行一次 sudo(读一次密码),在子 shell 里完成 rsync 与清理,避免第二次 sudo 无密码 + printf '%s\n' "$PASSWORD" | sshpass -e ssh ${SSH_OPTS} "${USER}@${HOST}" \ + "sudo -S sh -c 'rsync -avz --delete ${REMOTE_TMP}/ ${REMOTE_DIR}/ && rm -rf ${REMOTE_TMP}'" +else + echo ">>> 正在通过 SSH 同步到 ${USER}@${HOST}:${PORT} -> ${REMOTE_DIR}" + sshpass -e rsync -avz --delete \ + -e "ssh ${SSH_OPTS}" \ + "${DIST_DIR}/" \ + "${USER}@${HOST}:${REMOTE_DIR}/" +fi + +unset SSHPASS +echo ">>> 部署完成" diff --git a/package.json b/package.json index bd6529c..e40b359 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ }, "dependencies": { "@fortawesome/fontawesome-free": "^7.1.0", + "fflate": "^0.8.2", "qrcode": "^1.5.4", "vue": "^3.4.0", "vue-router": "^4.2.5" diff --git a/src/views/EncoderDecoder.vue b/src/views/EncoderDecoder.vue index f5e4cfc..88ca68e 100644 --- a/src/views/EncoderDecoder.vue +++ b/src/views/EncoderDecoder.vue @@ -37,7 +37,8 @@ item.encodingType === 'base64' ? 'Base64' : item.encodingType === 'url' ? 'URL' : item.encodingType === 'unicode' ? 'Unicode' : - item.encodingType + item.encodingType === 'zlib' ? 'Zlib' : + item.encodingType }} {{ formatTime(item.time) }} @@ -77,6 +78,13 @@ > Unicode +