﻿════════════════════════════════════════════════════════════
  自动更新设置说明
  系统版本 v2.4 起支持
════════════════════════════════════════════════════════════

一句话：把新版安装包放到一个「公共位置」，每台电脑自己发现、自己装，
不用再一台台拷 U 盘、发微信、解压覆盖。


────────────────────────────────────────────────────────────
一、以前为什么麻烦
────────────────────────────────────────────────────────────
以前发新版是这样的：
  你打一个包 → 发微信/拷 U 盘 → 对方解压 → 手工覆盖 → 有时候覆盖错目录

三台电脑还好，十台就是纯体力活，而且经常出现
「这台升了、那台没升」，同一个项目两边记录对不上。

现在改成：新版只要放到一个地方，各台电脑开机后自己去看一眼，
有新版就在页面右上角亮一个「新版本 vX.X」的按钮，点一下自动装好并重启。


────────────────────────────────────────────────────────────
二、配置（只在第一台电脑上做一次）
────────────────────────────────────────────────────────────
需要准备一个「更新源」——就是一个所有电脑都能访问的文件夹。
三种都行，按你们现场条件选：

  【做法 A · 局域网共享文件夹】最常用，不用联外网
    1. 选一台常开的电脑（建议就是装系统那台，或者文件服务器）
    2. 新建文件夹，例如  D:\yh-update
    3. 右键该文件夹 → 属性 → 共享 → 高级共享 → 勾选「共享此文件夹」
       → 权限里给「Everyone」读权限（只读就够，别给写）
    4. 在别的电脑上试一下：资源管理器地址栏输入
         \\192.168.1.10\yh-update
       能打开、能看到里面的文件，就算通了
       （192.168.1.10 换成那台电脑的实际 IP）

  【做法 B · 单位网站目录】
    如果你们有网站或者网盘能放文件，把安装包和 version.json
    传上去，地址形如：
       http://www.example.com/yh-update
    注意：要能直接下载 zip，不能是需要登录的网盘页面。

  【做法 C · 只在一台电脑上试】
    把安装包 + version.json 放进程序目录下的 update 文件夹：
       D:\...\power-safety-app\update\
    这样只有这一台会检查。适合先拿一台试水。


────────────────────────────────────────────────────────────
三、在系统里填地址
────────────────────────────────────────────────────────────
  1. 用管理员账号登录（admin）
  2. 左侧点「账号与接入」，拉到最下面「程序更新」卡片
  3. 勾上「自动检查新版本」
  4. 「更新源」填第二步准备好的地址：
       做法 A 填：  \\192.168.1.10\yh-update
       做法 B 填：  http://www.example.com/yh-update
       做法 C 填：  留空（默认就用程序目录下的 update 文件夹）
  5. 检查间隔选「2 小时」（默认）
  6. 点「保存」，再点「立即检查」

  如果配置对了，会弹一句「当前已是最新版本 v2.4」。
  如果显示「查不到更新源」，看本文第六节。

  ★ 每一台电脑都要填一次这个地址（填一次就永久记住）。
    这是唯一需要人工做的配置，之后发版都不用管了。


────────────────────────────────────────────────────────────
四、以后怎么发新版（你自己的操作）
────────────────────────────────────────────────────────────
  1. 打新包：双击「③ 打包成安装包.bat」
  2. 把新的完整版 zip 复制到更新源目录，例如：
        \\192.168.1.10\yh-update\宇珩安全管控系统-完整版.zip
     同名覆盖旧的那个
  3. 修改同目录下的 version.json，把 version 改成新版本号：

        {
          "version": "2.5",
          "date": "2026-11-10",
          "notes": [
            "新增手机实时画面回传",
            "修复台账导出中文乱码",
            "识别速度提升 20%"
          ],
          "file": "宇珩安全管控系统-完整版.zip"
        }

    字段说明：
      version  必填。新版本号，必须比原来的大（2.10 比 2.4 新，按数字比）
      date     选填。发布日期，会显示在更新弹窗里
      notes    选填。这次改了什么，写成一句话一条，最多 20 条。
               这些文字会原样显示给使用者看，建议写人话，
               不要写「修复 bug」这种看不出改了什么的。
      file     必填。zip 的文件名，要和实际文件名一模一样，区分大小写。

  4. 完事。各台电脑最迟 2 小时内会自己发现；
     想让它马上发现，就在那台电脑上点「立即检查」。

  ★ 只放 zip 不放 version.json，或者 version 号没改大，
    电脑就不会认为有新版本——这是故意的，防止误触发。


────────────────────────────────────────────────────────────
五、用户看到什么、点了会发生什么
────────────────────────────────────────────────────────────
  · 有新版时，页面右上角（「系统运行中」旁边）会出现
    一个橙色按钮：  ⬆ 新版本 v2.5
  · 点开是更新弹窗：当前版本 → 最新版本、这次改了什么、
    安装包多大、发布日期
  · 管理员点「立即更新」→ 二次确认 → 自动下载、解压、替换、
    重启服务。全过程 20~60 秒，页面会显示进度并自动刷新
  · 普通账号（安全员、飞手）能看到提示，但按钮是灰的，
    提示「请联系管理员更新」。避免谁都来点。

  更新过程中：
    · 服务会短暂停止，手机端同时打不开，属于正常
    · 页面会显示「正在安装并重启，请稍候…」
    · 完成后自动刷新，右上角提示消失


────────────────────────────────────────────────────────────
六、什么会被保留、什么会被替换
────────────────────────────────────────────────────────────
  【原样保留，绝对不动】
     data\            账号、项目、工人、台账、推送配置
     photos\          抓拍照片
     videos\          录像
     certs\           手机 HTTPS 用的证书
     live\            实时画面缓存
     bin\             自带运行环境 node.exe
     update\          更新源文件夹（如果你用了做法 C）

  【会被新版替换】
     server.js  notify.js  update.js  *.ps1  *.cmd  *.bat
     public\    （所有页面）
     ai\        （识别引擎和模型）
     *.txt      （说明文档）
     README.md

  所以升级不会丢台账，也不会丢配置。这条是硬性保证，
  代码里是把这些目录写死在排除列表里的，不是靠"记得别覆盖"。


────────────────────────────────────────────────────────────
七、出问题了怎么办
────────────────────────────────────────────────────────────
【1】点「立即检查」提示「查不到更新源」
  · 做法 A：在资源管理器地址栏直接粘贴那个 \\ 地址，能不能打开？
    打不开就是共享没设好，或者两台电脑不在一个网段
  · 做法 B：浏览器里打开  http://.../version.json ，能不能看到内容？
    看到的是网页报错，说明地址或文件名不对
  · 提示「拒绝访问」：共享权限要加「Everyone 读取」
  · 杀毒软件把共享访问拦了：把程序目录加入信任区

【2】能看到「新版本」提示，点了却提示更新失败
  · 最常见：这台电脑对程序目录没有写权限。
    程序装在 C:\Program Files 下面就会这样，
    建议整个文件夹放在 D 盘或桌面，不要装进 Program Files
  · 其次：zip 文件没下载完 / 被杀软删了。
    看程序目录下的「更新日志.txt」，最后几行会写明失败在哪一步

【3】更新完版本号没变，还是旧的
  · 说明更新其实没成功，看「更新日志.txt」
  · 也可能是打开了旧目录的程序：检查桌面图标指向哪里

【4】更新后系统起不来了
  · 每次更新前都会自动备份，位置：
        data\_update\backup-年月日时分秒\
    里面是升级前的 server.js、notify.js、update.js 和整个 public 目录
  · 手工还原：把 backup 里的文件复制回程序目录，覆盖回去
  · 再双击「① 检查并启动.cmd」

【5】想彻底关掉自动更新
  · 「账号与接入」→「程序更新」→ 取消勾选「自动检查新版本」→ 保存
  · 关掉后就不提示了，但仍然可以手动点「立即检查」


────────────────────────────────────────────────────────────
八、手机端要不要也更新
────────────────────────────────────────────────────────────
不用。

手机通过浏览器（或那个 APK 壳）访问的是电脑上的网页，
电脑上的服务升级完，手机刷新一下就是新版，没有"手机端装新版"这回事。

   · 手机浏览器：下拉刷新即可
   · 手机 APK：APK 只是个外壳，里面加载的还是电脑的网页，
     同样刷新即可。除非外壳本身有重大改动（很少），
     否则不需要重装 APK。

所以「更新提示」只需要出现在电脑端，手机端不用管。


────────────────────────────────────────────────────────────
九、和"手动发安装包"的关系
────────────────────────────────────────────────────────────
自动更新不是非用不可。不想用的话，原来那套照旧：
  发 zip → 解压 → 只覆盖程序文件 → 不要覆盖 data 目录

两条路可以混着走：比如项目部这台走自动更新，
现场没网的笔记本还是人工拷。互不影响。


────────────────────────────────────────────────────────────
十、安全提醒
────────────────────────────────────────────────────────────
  · 更新源给「只读」权限就够了，别给写权限。
    能改那个文件夹的人，就能往所有电脑推程序。
  · 别把更新源直接暴露到公网（比如做成任何人都能访问的网址），
    否则别人可以放一个假包进来。走内网共享最稳。
  · 装完可以在「账号与接入」页看一眼「服务版本」，
    确认是不是你要的版本号。

════════════════════════════════════════════════════════════
  配套文件：
    version.json              更新清单（本文第四节有格式）
    宇珩安全管控系统-完整版.zip   新版安装包
  需要帮助时，把「更新日志.txt」发给技术人员即可。
════════════════════════════════════════════════════════════
