diff --git a/flutter_app/README.md b/flutter_app/README.md index ae1316d..9acfd40 100644 --- a/flutter_app/README.md +++ b/flutter_app/README.md @@ -72,7 +72,9 @@ GPU delegate 默认允许 FP16 计算(YOLO 类精度损失可忽略);如 (s/n);服务器未发布模型时不返回 `models` 字段,App 无模型可用, 相机页仅预览不识别。 - **下载入口**:相机页设置弹层「模型清单」按需下载/使用(封面缩略图 2 列网格, - **同一物种合并一张卡**,卡上双档行标注各自版本与状态(使用中绿色高亮);点 + **同一物种合并一张卡**,卡上**不显示版本号、也不设档位状态行** + (2026-09-10 删除「高精度/高性能 + 版本」灰字行,版本仅作内部记账, + 档位状态看主按钮);点 「下载」一次性补下该动物高精度+高性能两个已训练文件——各档独立进度逐条展示、 可取消(已下过的档不重复下),**目标档落地即自动启用、伴档备好**;目标档已 启用显示「使用中」点击取消使用。弹层高度上限 70% 屏高(防盖满全屏无法关闭)。 diff --git a/flutter_app/lib/camera/model_catalog_section.dart b/flutter_app/lib/camera/model_catalog_section.dart index b1f2fd1..463fc7a 100644 --- a/flutter_app/lib/camera/model_catalog_section.dart +++ b/flutter_app/lib/camera/model_catalog_section.dart @@ -18,7 +18,8 @@ String _variantLabel(String v) => v == kVariantN ? '高性能' : '高精度'; /// - 目标档已下载未激活 →「使用」直接启用(同数据集另一档在运行会自动停用); /// - 目标档未下载 →「下载」只取回目标档(双档分别下载,伴档不随下;另一档 /// 正在运行而缺目标档时,下载完自动切换过去)。 -/// 另一档的版本/状态以灰字行展示,供对照。新版本由用户在卡片上手动重新 +/// 卡片不展示版本号与档位状态行(2026-09-10 删「高精度/高性能 + 版本」灰字行, +/// 版本仅作内部记账),档位状态看主按钮。新版本由用户在卡片上手动重新 /// 下载(使用中重下会原地生效,2026-09-09 自动更新/待办横幅已退场)。 class ModelCatalogSection extends StatelessWidget { final ModelManager manager; @@ -278,32 +279,6 @@ class _SpeciesCard extends StatelessWidget { ), ], ), - const SizedBox(height: 2), - // 双档灰字状态行:高精度 / 高性能各自版本号;使用中绿色高亮、 - // 已下载次之、缺失置灰(纯信息,非按钮) - Text.rich( - TextSpan( - children: [ - for (final i in items) ...[ - if (i != items.first) const TextSpan(text: ' · '), - TextSpan( - text: '${_variantLabel(i.variant)} ${i.version}', - style: TextStyle( - fontSize: 9, - color: manager.isActive(i.datasetId, i.variant) - ? Colors.greenAccent - : manager.isDownloaded(i.datasetId, i.variant) - ? Colors.white70 - : Colors.white38, - fontWeight: manager.isActive(i.datasetId, i.variant) - ? FontWeight.bold - : FontWeight.normal, - ), - ), - ], - ], - ), - ), const SizedBox(height: 6), _actionArea( items: items, diff --git a/server/Dockerfile b/server/Dockerfile index 4087b48..5a2e52a 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -1,5 +1,7 @@ # 视野后端构建:多阶段编译 → 精简运行镜像(纯 Go + SQLite,无 CGO 依赖) -FROM golang:1.26 AS builder +# 基础镜像仓库:国内直连 docker.io 不通,默认走 DaoCloud 镜像站;构建时可用 --build-arg REGISTRY=docker.io/library 覆盖 +ARG REGISTRY=docker.m.daocloud.io/library +FROM ${REGISTRY}/golang:1.26 AS builder # 国内网络 proxy.golang.org 不通,默认走 goproxy.cn;构建时可用 --build-arg 覆盖 ARG GOPROXY=https://goproxy.cn,direct @@ -15,7 +17,8 @@ RUN http_proxy= https_proxy= HTTP_PROXY= HTTPS_PROXY= go mod download COPY . . RUN CGO_ENABLED=0 go build -o /out/observer-server . -FROM alpine:3.20 +ARG REGISTRY=docker.m.daocloud.io/library +FROM ${REGISTRY}/alpine:3.20 # 国内网络 dl-cdn.alpinelinux.org 不通,默认走阿里云镜像;构建时可用 --build-arg 覆盖 ARG APK_MIRROR=https://mirrors.aliyun.com # 时区对齐宿主(自然日授权语义依赖本地时区) @@ -33,5 +36,5 @@ COPY --from=builder /build/admin_dist /app/admin_dist COPY --from=builder /build/h5 /app/h5 # 运行时数据目录(SQLite 库),由 docker-compose 挂载持久化 RUN mkdir -p /app/data -EXPOSE 18080 +EXPOSE 8080 ENTRYPOINT ["/app/observer-server"] diff --git a/server/config.yml b/server/config.yml index ea88986..b31ea79 100644 --- a/server/config.yml +++ b/server/config.yml @@ -1,6 +1,6 @@ # 视野后端配置 server: - address: ":18080" + address: ":8080" openapiPath: "/api.json" # 请求体上限(默认 8MB):APK 上传(管理端下发新版本)可能数百 MB,必须放大 clientMaxBodySize: "512mb" diff --git a/server/docker-compose.yml b/server/docker-compose.yml index d83a49a..708360b 100644 --- a/server/docker-compose.yml +++ b/server/docker-compose.yml @@ -14,7 +14,7 @@ services: container_name: observer-server restart: unless-stopped ports: - - "18080:18080" + - "8080:8080" volumes: - /data:/app/data - /workspace:/app/workspace