Compare commits

...

8 Commits

Author SHA1 Message Date
wangjia 067f21c273 release: 触发 client-v1.1.9 发版(稳定网络重发 #2)
Design Source Checks / design-source (push) Failing after 8m48s
Deploy Client / build-client-web (push) Failing after 4m30s
Deploy Client / build-macos (push) Has been skipped
Deploy Client / build-android (push) Has been skipped
Deploy Client / build-ios (push) Has been skipped
Deploy Client / build-windows-ci (push) Successful in 7m29s
Deploy Client / build-windows (push) Has been cancelled
Deploy Client / release-deploy-client (push) Has been cancelled
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P9G7E3wmAYL9KeYCVZVsqu
2026-07-18 19:18:45 +08:00
wangjia aa4a3951f7 release: 触发 client-v1.1.9 发版(WiFi 稳定网络重发)
Design Source Checks / design-source (push) Failing after 1m59s
Deploy Client / build-client-web (push) Failing after 15m28s
Deploy Client / build-macos (push) Has been skipped
Deploy Client / build-android (push) Has been skipped
Deploy Client / build-ios (push) Has been skipped
Deploy Client / build-windows-ci (push) Failing after 1s
Deploy Client / build-windows (push) Has been cancelled
Deploy Client / release-deploy-client (push) Has been cancelled
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P9G7E3wmAYL9KeYCVZVsqu
2026-07-18 10:41:15 +08:00
wangjia 5eec510f1e ci(windows): NAS 暂存设 continue-on-error(发版已从 GitHub 拉,NAS 仅最佳努力记录)
Design Source Checks / design-source (push) Failing after 4m4s
Deploy Client / build-client-web (push) Successful in 5m3s
Deploy Client / build-windows-ci (push) Successful in 4m57s
Deploy Client / build-macos (push) Failing after 4m38s
Deploy Client / build-android (push) Has been skipped
Deploy Client / build-ios (push) Has been skipped
Deploy Client / build-windows (push) Has been cancelled
Deploy Client / release-deploy-client (push) Has been cancelled
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P9G7E3wmAYL9KeYCVZVsqu
2026-07-18 09:38:03 +08:00
wangjia 161dee17b1 ci(windows): 加 permissions contents:write——GITHUB_TOKEN 默认只读建不了 Release(403)
Design Source Checks / design-source (push) Failing after 5m48s
Deploy Client / build-macos (push) Successful in 8m50s
Deploy Client / build-client-web (push) Successful in 13m39s
Deploy Client / build-windows-ci (push) Successful in 4m34s
Deploy Client / build-android (push) Successful in 11m59s
Deploy Client / build-ios (push) Failing after 2m43s
Deploy Client / build-windows (push) Has been cancelled
Deploy Client / release-deploy-client (push) Has been cancelled
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P9G7E3wmAYL9KeYCVZVsqu
2026-07-18 09:21:49 +08:00
wangjia c8eabe0596 ci(windows): Windows 包发版改从 GitHub Release 拉取(免 frps)
Design Source Checks / design-source (push) Failing after 5m2s
mac-runner off-LAN 时,从 NAS 经 ali frps 下载 26MB 太慢/易断(实测 ~220KB/s 且中途断)。
改为:windows.yml 额外发布到 GitHub Release winstage-v<版本>;deploy-client 的
build-windows-ci 从 github.com 拉(不过 frps)+ 重试断点续传 + 完整性校验。
需 gitea 密钥 GH_TOKEN(已设)。NAS 暂存保留作记录。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P9G7E3wmAYL9KeYCVZVsqu
2026-07-18 09:13:50 +08:00
wangjia 03772542d2 docs(changelog): 1.1.9 发版说明
Design Source Checks / design-source (push) Failing after 11m21s
Deploy Client / build-client-web (push) Successful in 7m49s
Deploy Client / build-windows-ci (push) Failing after 5m10s
Deploy Client / build-macos (push) Successful in 12m17s
Deploy Client / build-ios (push) Has been cancelled
Deploy Client / build-windows (push) Has been cancelled
Deploy Client / release-deploy-client (push) Has been cancelled
Deploy Client / build-android (push) Has been cancelled
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P9G7E3wmAYL9KeYCVZVsqu
2026-07-18 08:16:55 +08:00
wangjia 5cf8958313 feat(prototype): 登记支付状态图标 待支付/已支付/已关闭
Design Source Checks / design-source (push) Has been cancelled
ds-flow 原型单源:BADGE_ICON 补三个支付状态图标,先登记再供页面使用。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P9G7E3wmAYL9KeYCVZVsqu
2026-07-18 07:53:53 +08:00
wangjia f6e326794e fix(backend): 出入库列表 Preload(Items) 供手机端卡片显示品项数
List 之前未 preload items,手机端 MCard sub 行拿不到 items.length。
入库进价对 operator 本就可见(客户端无条件展示+待定价逻辑依赖 costPrice),
故 stock_in 不加脱敏;stock_out 侧成本敏感,List 已有 stripStockOutCost 兜底,安全。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P9G7E3wmAYL9KeYCVZVsqu
2026-07-18 07:53:53 +08:00
7 changed files with 80 additions and 31 deletions
+4 -5
View File
@@ -149,7 +149,7 @@ jobs:
name: windows
path: dist/
# 特殊:家里 Windows 关机/连不上时,从 NAS 暂存拉 GitHub 云构建的安装器(版本强匹配)。
# 特殊:家里 Windows 关机/连不上时,从 GitHub Release 拉云构建的安装器(版本强匹配,免 frps)。
# 启用:gitea 仓库设变量 WINDOWS_SOURCE=github,并先在 GitHub 跑 windows.yml 构建该版本。
# 产出同名 windows artifact,下游 release-deploy-client 无需改动。
build-windows-ci:
@@ -158,11 +158,10 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: Fetch staged Windows installer from NAS
- name: Fetch staged Windows installer from GitHub (免 frps)
env:
FORGEJO_TOKEN: ${{ secrets.FORGEJO_TOKEN }}
FORGEJO_URL: ${{ secrets.FORGEJO_URL }}
GITEA_REPOSITORY: ${{ gitea.repository }}
GH_TOKEN: ${{ secrets.GH_TOKEN }}
GH_REPO: bj-wangjia/jiu
run: sh scripts/ci/fetch-windows-staged.sh "${{ gitea.ref_name }}"
- name: Upload windows artifacts
+20 -1
View File
@@ -19,6 +19,9 @@ on:
- 'scripts/ci/compile-windows.sh'
- 'deploy/windows/**'
permissions:
contents: write # 允许内置 GITHUB_TOKEN 创建 Release(winstage-v<版本>)
jobs:
build-stage-windows:
runs-on: windows-latest
@@ -64,7 +67,23 @@ jobs:
path: dist/jiu-windows-x64-setup.exe
if-no-files-found: error
- name: Stage installer → NAS gitea (winstage-v<版本>)
# 发布到 GitHub Release winstage-v<版本> —— 发版时 mac-runner 从这里(github.com)拉,
# 不走 ali frps(off-LAN 时 NAS 经 frps 太慢/易断)。用内置 GITHUB_TOKEN,免额外密钥。
- name: Publish installer → GitHub Release (winstage-v<版本>,供 mac-runner 免 frps 拉取)
shell: bash
env:
GH_TOKEN: ${{ github.token }}
run: |
tag="winstage-v${{ steps.ver.outputs.ver }}"
gh release delete "$tag" -R "${{ github.repository }}" --yes --cleanup-tag 2>/dev/null || true
gh release create "$tag" -R "${{ github.repository }}" \
--title "$tag" --notes "Windows 安装器暂存(供 deploy-client 免 frps 拉取)" \
dist/jiu-windows-x64-setup.exe
# NAS 暂存仅作最佳努力的记录(发版实际从 GitHub Release 拉,见 fetch-windows-staged.sh)。
# 经 ali frps 上传易失败,不让它 fail 整个构建。
- name: Stage installer → NAS gitea (best-effort 记录)
continue-on-error: true
shell: bash
env:
FORGEJO_URL: ${{ secrets.FORGEJO_URL }}
+19
View File
@@ -5,6 +5,25 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.1.9] - 2026-07-18
### 新功能
- 授权管理独立成一级页面,分「授权 / 购买续费 / 订单管理」三个标签。
- 购买支持外跳支付页或内嵌二维码扫码付款,可查看/取消订单。
- 财务应收应付汇总、财务筛选新增「往来单位」搜索。
- 出入库单详情新增「生产日期 / 批次号」列;库存商品详情新增「供应商 / 批次号」。
- 出入库列表状态筛选改为多选(默认草稿 + 待审核);新建单自动填充默认仓库。
- 出入库列表卡片(手机端)显示品项数。
### 改进
- 慢请求监控(后台记录 >500ms 请求,便于排查卡顿)。
### 修复
- 切换账号后仍显示上一账号数据。
- 订单时间按本地时区显示(原为 UTC)。
- 「已在运行」提示框、出入库抽屉在特定情况下的闪退。
- 支付宝下单因网关地址过长失败。
## [1.1.8] - 2026-07-10
### 新功能
+3 -1
View File
@@ -75,7 +75,9 @@ func (h *StockInHandler) List(c *gin.Context) {
query.Count(&total)
orders := make([]model.StockInOrder, 0)
query.Preload("Warehouse", "shop_id = ?", shopID).
// 列表卡片需要 items.length 显示品项数(手机端 MCard sub 行)
query.Preload("Items").
Preload("Warehouse", "shop_id = ?", shopID).
Preload("Partner", "shop_id = ?", shopID).
Preload("Operator", "shop_id = ?", shopID).
Preload("Reviewer", "shop_id = ?", shopID).
+3 -1
View File
@@ -87,7 +87,9 @@ func (h *StockOutHandler) List(c *gin.Context) {
query.Count(&total)
orders := make([]model.StockOutOrder, 0)
query.Preload("Warehouse", "shop_id = ?", shopID).
// 列表卡片需要 items.length 显示品项数(手机端 MCard sub 行)
query.Preload("Items").
Preload("Warehouse", "shop_id = ?", shopID).
Preload("Partner", "shop_id = ?", shopID).
Preload("Operator", "shop_id = ?", shopID).
Preload("Reviewer", "shop_id = ?", shopID).
+2 -1
View File
@@ -17,7 +17,8 @@
'在线':'i-wifi','离线':'i-wifi-off',
'进行中':'i-ic04','已完成':'i-check',
'未使用':'i-tag','已兑换':'i-check','作废':'i-close',
'未结清':'i-ic04','已结清':'i-check','收款':'i-download','付款':'i-upload'
'未结清':'i-ic04','已结清':'i-check','收款':'i-download','付款':'i-upload',
'待支付':'i-ic04','已支付':'i-check','已关闭':'i-close'
};
window.BADGE_ICON = BADGE_ICON;
function enhanceBadges(){
+29 -22
View File
@@ -1,53 +1,60 @@
#!/usr/bin/env bash
# fetch-windows-staged.sh <tag> — 发版时从 NAS gitea 暂存 Release 拉 Windows 安装器。
# fetch-windows-staged.sh <tag> — 发版时从 GitHub Release 拉 Windows 安装器。
#
# 用途:deploy-client.yml 的 build-windows-ci job(仅当 WINDOWS_SOURCE=github 时启用)
# 调用此脚本,按发版 tag(client-vX.Y.Z) 的**同一版本号**去找 `winstage-vX.Y.Z`
# 调用此脚本,按发版 tag(client-vX.Y.Z) 的**同一版本号**去 GitHub 找 `winstage-vX.Y.Z`
# 把 jiu-windows-x64-setup.exe 下到 dist/,供后续 upload-artifact → release/deploy 使用。
#
# **版本强匹配**:找不到对应版本的暂存包 → 硬失败并提示先在 GitHub 构建该版本,
# **为什么从 GitHub 而不是 NAS**mac-runner 常在 off-LANNAS 只能经 ali frps(慢又易断)
# Windows 包本就是 GitHub 云构建的,直接从 github.com 拉最稳、不过 frps。
#
# **版本强匹配**:找不到对应版本的 GitHub Release → 硬失败并提示先构建该版本,
# 绝不静默发出旧版/错版 Windows 包。
#
# 需要 envFORGEJO_URL、FORGEJO_TOKEN、GITEA_REPOSITORY
# 需要 envGH_TOKEN(github PAT,私有库拉 release 需 auth)GH_REPO(默认 bj-wangjia/jiu)
set -euo pipefail
. "$(dirname "$0")/lib-forgejo.sh"
TAG="$1"
VER="$(ver_from_tag "$TAG")"
VER="${TAG#client-v}"; VER="${VER#v}"
STAGE_TAG="winstage-v${VER}"
NAME="jiu-windows-x64-setup.exe"
GH_REPO="${GH_REPO:-bj-wangjia/jiu}"
: "${GH_TOKEN:?需要 GH_TOKEN(github PAT)}"
echo "==> fetch-windows-staged: 发版版本=${VER}找暂存 ${STAGE_TAG}"
base="${FORGEJO_URL}/api/v1/repos/${GITEA_REPOSITORY}"
echo "==> fetch-windows-staged: 发版版本=${VER}从 GitHub 找 ${STAGE_TAG}repo ${GH_REPO}"
api="https://api.github.com/repos/${GH_REPO}"
mkdir -p dist
if ! info=$(curl -kfsS -H "Authorization: token ${FORGEJO_TOKEN}" "${base}/releases/tags/${STAGE_TAG}" 2>/dev/null); then
if ! info=$(curl -fsSL -H "Authorization: Bearer ${GH_TOKEN}" -H "Accept: application/vnd.github+json" "${api}/releases/tags/${STAGE_TAG}" 2>/dev/null); then
cat >&2 <<MSG
ERROR: NAS 上找不到暂存 Release ${STAGE_TAG}。
ERROR: GitHub 上找不到 Release ${STAGE_TAG}。
WINDOWS_SOURCE=github 需要先在 GitHub 构建**版本 ${VER}** 的 Windows 包:
gh workflow run windows.yml -f ver=${VER} (仓库 bj-wangjia/jiu)
构建完成会把安装器暂存到 NAS,再重跑本次发版即可。
gh workflow run windows.yml -f ver=${VER} (仓库 ${GH_REPO})
构建完成会发布 Windows Release,再重跑本次发版即可。
MSG
exit 1
fi
# 取同名资产的 browser_download_url(版本已由 STAGE_TAG 精确锁定)。JSON 经 stdin 传入避免转义。
# 注意:API 的 /assets/{id} 端点返回的是**元数据 JSON**(非二进制),必须用 browser_download_url。
dl=$(printf '%s' "$info" | python3 -c "import sys,json; print(next((a['browser_download_url'] for a in json.load(sys.stdin).get('assets',[]) if a['name']=='${NAME}'), ''))")
if [ -z "$dl" ]; then
# 取同名资产的 GitHub API asset url(用 Accept: octet-stream 拉二进制,302 跳 codeload,走 github.com 不过 frps
aid=$(printf '%s' "$info" | python3 -c "import sys,json; print(next((a['id'] for a in json.load(sys.stdin).get('assets',[]) if a['name']=='${NAME}'), ''))")
if [ -z "$aid" ]; then
echo "ERROR: ${STAGE_TAG} 存在但缺少 ${NAME} 资产(GitHub 构建可能失败)。" >&2
exit 1
fi
echo "==> fetch-windows-staged: 下载 ${dl} → dist/${NAME}"
curl -kfsSL -H "Authorization: token ${FORGEJO_TOKEN}" "$dl" -o "dist/${NAME}"
echo "==> fetch-windows-staged: 下载 asset id=${aid}(GitHub)→ dist/${NAME}"
# 重试 + 断点续传(-C -)+ 低速/超时上限:断了自动续传重来,不会一次瞬断就整个失败。
curl -fSL \
--retry 30 --retry-delay 5 --retry-all-errors -C - \
--connect-timeout 15 --speed-time 60 --speed-limit 1024 --max-time 900 \
-H "Authorization: Bearer ${GH_TOKEN}" -H "Accept: application/octet-stream" \
"${api}/releases/assets/${aid}" -o "dist/${NAME}"
ls -lh "dist/${NAME}"
# 完整性校验:安装器至少应有 1MB,防重定向页/截断被当成有效包发出去。
sz=$(wc -c < "dist/${NAME}")
if [ "$sz" -lt 1000000 ]; then
echo "ERROR: 下载的 ${NAME}${sz} 字节,疑似重定向页/损坏,拒绝发版。" >&2
echo "ERROR: 下载的 ${NAME}${sz} 字节,疑似损坏,拒绝发版。" >&2
exit 1
fi
echo "==> fetch-windows-staged: done(版本 ${VER} 匹配)"
echo "==> fetch-windows-staged: done(版本 ${VER} 匹配,源=GitHub"