派生自 IRIS 实例的 feature/ai-audit-update @ 192c8ee,在同一台机器上独立运行。 隔离机制(开关集中在 app/core/config.py 的 ORG_DEPARTMENT / MATERIAL_CATEGORY_PREFIX): - 登录:sys_user 查询增加 department 条件,非本部门账号一律 401 - 人员列表:服务端钉死部门、忽略客户端传参;删除「异常退回全表」的降级分支 - 物料:groups 与 items 都增加 category LIKE 'LICA/%' 前缀过滤 - 人员操作统计:把硬编码的 department='IRIS' 改为配置项 物料为什么用前缀而不是 LIKE '%LICA%': MOM 里存在 171 条 IRIS/成品/LICA/...(无人机/野外便携/高塔监测等), 模糊匹配会把这些 IRIS 物料漏给 LICA。实测前缀匹配命中 795 条 / 5 个分组。 部署隔离: - 端口 8030/8031/8032,容器名 lica_*,卷 lica_pgdata(与 IRIS 完全独立) - 服务名改为 lica_backend,避免在 projects_default 网络上与 IRIS 的 backend 重名 —— 否则将来任何一方写 http://backend:8000 会随机打到另一个部门 - SECRET_KEY 重新生成:实测两边 token 互不通用(双向 401) 客户端标识(不改会导致两个部门的客户端互相覆盖): - Tauri identifier 改 com.lica.production(否则桌面端互相覆盖安装,且共用 WebView 数据目录会让 track_admin_token 串号) - uni-app appid 改 __UNI__D2F4A19(否则同机 APK 互相覆盖、wgt 热更新串号) - uni-app 地址端口 8011 → 8031(收敛在 utils/config.js 单一来源) - sync-watch.sh 的 DST 指向 LICA 专属 HBuilderX 目录(否则会把源码灌进 IRIS 工程) 排除项:未复制 deploy.sh / deploy_full.sh / docker-compose.prod.yml —— 它们写死了 IRIS 的生产服务器,误跑会覆盖线上系统。
123 lines
4.7 KiB
Bash
123 lines
4.7 KiB
Bash
#!/bin/bash
|
||
# ============================================================
|
||
# track-uniapp 源码 → HBuilderX 项目 同步
|
||
#
|
||
# 方向:单向 WSL track-lica/track-uniapp/src/ → G:\Track\track-lica-app\track
|
||
#
|
||
# ⚠️ LICA 与 IRIS 是两套独立的 App 工程,DST 必须指向各自在 Windows 侧的
|
||
# HBuilderX 目录。若两边共用同一个 DST,本脚本会持续把 LICA 的源码灌进
|
||
# IRIS 的工程(而且带 --delete,会删掉对方的文件),因为带监听循环,
|
||
# 改一次就会反复覆盖。
|
||
#
|
||
# ⚠️ 为什么是「src/ → 项目根」且单向(2026-09-15 修正):
|
||
# HBuilderX 是以 G:\Track\track-app\track 为项目根打开的(经典布局,
|
||
# pages.json / App.vue / manifest.json 都在根目录),该目录就是
|
||
# track-uniapp/src/ 的**扁平镜像** —— 证据:test_wgt_local.bat 里写着
|
||
# "Please build WGT in HBuilderX first",且两侧文件时间戳逐项吻合。
|
||
#
|
||
# 旧版脚本按 track-uniapp/ ↔ track-app/track/ 双向对拷,方向完全错误:
|
||
# · 正向会把 src/ 整个塞成 track/src/,并用 WSL 的 index.html 覆盖
|
||
# HBuilderX 的入口文件;
|
||
# · 反向会把 Windows 项目根的文件搬回 WSL 根目录,让已清理的
|
||
# 「幽灵文件」复活。
|
||
# 故改为单向,且显式排除所有「只在 Windows 侧存在」的项。
|
||
#
|
||
# 用法:
|
||
# bash sync-watch.sh # 同步一次,然后持续监听(推荐)
|
||
# bash sync-watch.sh once # 只同步一次
|
||
# bash sync-watch.sh dry # 只预览差异,不落盘
|
||
# 停止: Ctrl+C
|
||
# ============================================================
|
||
|
||
SRC="/home/yueli/track-lica/track-uniapp/src"
|
||
DST="/mnt/g/Track/track-lica-app/track"
|
||
|
||
# ── 只在 Windows 侧存在、绝对不能被覆盖或删除的项 ──
|
||
EXCLUDES=(
|
||
# manifest.json 的版本号(T1.0.44)与存储权限只在 HBuilderX 里维护。
|
||
# WSL 那份停留在 T1.0.8,是过期副本 —— 同步过去会回退版本号并抹掉权限。
|
||
--exclude 'manifest.json'
|
||
# HBuilderX 经典布局特有,src/ 里没有对应物
|
||
--exclude 'index.html'
|
||
--exclude 'static/'
|
||
--exclude 'uni.scss'
|
||
--exclude 'uni.promisify.adaptor.js'
|
||
--exclude '.editorconfig'
|
||
--exclude '.gitignore'
|
||
--exclude '.hbuilderx/'
|
||
# HBuilderX 的 WGT 构建产物(约 216M)
|
||
--exclude 'unpackage/'
|
||
--exclude 'node_modules/'
|
||
--exclude '.git/'
|
||
# 手工备份(如 pages/scan/detail.vue.bak-20260914)
|
||
--exclude '*.bak-*'
|
||
--exclude '*.wgt'
|
||
)
|
||
|
||
# --delete 让「在 WSL 删掉的文件」在 Windows 侧同步消失(如已废弃的
|
||
# FlowTree.vue / TaskTreeNode.vue)。被 --exclude 命中的项不受 --delete
|
||
# 影响,所以上面的白名单不会被误删。
|
||
#
|
||
# 不用 -a:目标 /mnt/g 是 drvfs,POSIX 权限/属主都是合成的(恒为 777),
|
||
# -a 里的 -p/-o/-g 每次都会判定为「有差异」→ 无谓 chmod + 刷屏的 p 标记。
|
||
# 保留 -r(递归)+ -t(时间戳,两侧时间戳本就是同步依据)。
|
||
RSYNC_OPTS=(-rlt --delete "${EXCLUDES[@]}" --no-perms --no-owner --no-group)
|
||
|
||
do_sync() {
|
||
case "$1" in
|
||
dry)
|
||
echo "🔍 预览模式(不落盘):"
|
||
rsync "${RSYNC_OPTS[@]}" --dry-run --itemize-changes "$SRC/" "$DST/"
|
||
;;
|
||
*)
|
||
rsync "${RSYNC_OPTS[@]}" --itemize-changes "$SRC/" "$DST/"
|
||
local rc=$?
|
||
if [ $rc -eq 0 ]; then
|
||
echo " ↻ $(date +%H:%M:%S) 已同步"
|
||
else
|
||
# 不吞错误:旧脚本 2>/dev/null 把 rsync 的报错全丢了,出了问题只能干瞪眼
|
||
echo " ❌ $(date +%H:%M:%S) rsync 退出码 $rc —— 同步可能不完整,请检查"
|
||
fi
|
||
;;
|
||
esac
|
||
}
|
||
|
||
case "$1" in
|
||
dry)
|
||
do_sync dry
|
||
exit 0
|
||
;;
|
||
once)
|
||
do_sync
|
||
exit 0
|
||
;;
|
||
esac
|
||
|
||
echo "🔁 单向同步 $SRC → $DST"
|
||
do_sync
|
||
echo "✅ 首次同步完成,开始监听..."
|
||
|
||
if command -v inotifywait >/dev/null 2>&1; then
|
||
echo "👀 inotifywait 实时监听中(Ctrl+C 停止)"
|
||
inotifywait -m -r -e modify,create,delete,move \
|
||
--exclude 'node_modules|\.git|dist|unpackage|\.hbuilderx' \
|
||
"$SRC" | while read -r _dir _action _file; do
|
||
do_sync
|
||
done
|
||
else
|
||
# 旧脚本在这里静默失败过:inotifywait 没装,2>/dev/null 又把报错吞了,
|
||
# 表现为「脚本像是跑着,但改了代码 G 盘一直不更新」。改为明确提示 + 轮询兜底。
|
||
echo "⚠️ inotifywait 未安装,退回轮询模式(每 3 秒比对一次)"
|
||
echo " 想要实时监听: sudo apt install -y inotify-tools"
|
||
echo " Ctrl+C 停止"
|
||
last=""
|
||
while true; do
|
||
cur=$(find "$SRC" -type f -printf '%T@ %p\n' 2>/dev/null | sort | md5sum)
|
||
if [ "$cur" != "$last" ]; then
|
||
[ -n "$last" ] && do_sync
|
||
last="$cur"
|
||
fi
|
||
sleep 3
|
||
done
|
||
fi
|