chore: customize branding for Baihua
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
**Goal:** Change 嘉恒仓库盘库 into a current-selected-warehouse-only flow: select a warehouse bar first, click 盘库, confirm/export one locked warehouse sheet, import only that same stocktake workbook, show a modal diff immediately, and confirm to reset that warehouse inventory and unlock it.
|
||||
**Goal:** Change 百华仓库盘库 into a current-selected-warehouse-only flow: select a warehouse bar first, click 盘库, confirm/export one locked warehouse sheet, import only that same stocktake workbook, show a modal diff immediately, and confirm to reset that warehouse inventory and unlock it.
|
||||
|
||||
**Architecture:** Backend becomes the source of truth for single-warehouse stocktake rules, workbook validation token checks, import overwrite behavior, and current-warehouse history filtering. Frontend removes multi-warehouse selection from the stocktake dialog and renders two blocks: a stocktake flow block for the currently selected warehouse and a stocktake records block filtered to that warehouse. The diff review is opened as a modal immediately after each import; cancel closes the modal and leaves the warehouse locked for re-import.
|
||||
|
||||
@@ -1072,7 +1072,7 @@ Expected: Vite exits code 0. Existing chunk warning is acceptable.
|
||||
Use the running ERP UI and verify:
|
||||
|
||||
```text
|
||||
1. Select 原材料库 in 嘉恒仓库 warehouse bar.
|
||||
1. Select 原材料库 in 百华仓库 warehouse bar.
|
||||
2. Click 盘库.
|
||||
3. Dialog shows 当前仓库:原材料库 and no multi-warehouse checkbox cards.
|
||||
4. Click 确认盘库并导出仓库清单.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
**Goal:** Build a "盘库" feature in 嘉恒仓库 that locks selected warehouses, exports stocktake sheets, imports counted results, shows a side-by-side diff, posts adjustments, records audit logs, and unlocks warehouses after confirmation.
|
||||
**Goal:** Build a "盘库" feature in 百华仓库 that locks selected warehouses, exports stocktake sheets, imports counted results, shows a side-by-side diff, posts adjustments, records audit logs, and unlocks warehouses after confirmation.
|
||||
|
||||
**Architecture:** Backend owns stocktake locking, snapshots, Excel import/export, diff calculation, and inventory adjustment transactions. Frontend adds a stocktake entry above the warehouse bar, drives a wizard-style dialog, and renders a code-diff-like two-table comparison before confirmation. Inventory mutation endpoints must call a shared lock guard so locked warehouses cannot be changed outside stocktake.
|
||||
|
||||
@@ -1955,7 +1955,7 @@ Create `frontend/src/components/StocktakeDialog.vue`:
|
||||
<section class="stocktake-shell">
|
||||
<header class="stocktake-head">
|
||||
<div>
|
||||
<p class="eyebrow">嘉恒仓库 · 盘库</p>
|
||||
<p class="eyebrow">百华仓库 · 盘库</p>
|
||||
<h3>{{ activeStocktake ? activeStocktake.stocktake_no : "新建盘库" }}</h3>
|
||||
</div>
|
||||
<button class="ghost-button" type="button" @click="$emit('close')">关闭</button>
|
||||
@@ -2125,7 +2125,7 @@ async function startStocktake() {
|
||||
try {
|
||||
activeStocktake.value = await postResource("/inventory/stocktakes", {
|
||||
warehouse_ids: selectedWarehouseIds.value,
|
||||
remark: "嘉恒仓库盘库"
|
||||
remark: "百华仓库盘库"
|
||||
});
|
||||
activeStep.value = "export";
|
||||
emit("message", `盘库单 ${activeStocktake.value.stocktake_no} 已创建并锁库`);
|
||||
@@ -2684,7 +2684,7 @@ Expected: PASS.
|
||||
Run the app using the project's normal backend/frontend commands, then verify:
|
||||
|
||||
```text
|
||||
1. 打开 采购与库存 -> 嘉恒仓库。
|
||||
1. 打开 采购与库存 -> 百华仓库。
|
||||
2. 点击仓库 bar 上方“盘库”。
|
||||
3. 默认勾选当前仓库。
|
||||
4. 点击“开始盘库并锁库”。
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
**Goal:** Rebuild the 嘉恒仓库盘库 interaction so users can clearly start locked stocktakes, export/import sheets, review side-by-side differences, confirm adjustments, and continue unfinished stocktakes without confusing tab jumps or silent states.
|
||||
**Goal:** Rebuild the 百华仓库盘库 interaction so users can clearly start locked stocktakes, export/import sheets, review side-by-side differences, confirm adjustments, and continue unfinished stocktakes without confusing tab jumps or silent states.
|
||||
|
||||
**Architecture:** Keep the existing backend stocktake tables and core service flow. Add a small frontend workflow helper to centralize stocktake state decisions, then refactor `StocktakeDialog.vue` into a status-driven panel instead of a freely clickable five-tab wizard. Backend changes are limited to regression tests unless implementation finds an API defect.
|
||||
|
||||
@@ -1243,7 +1243,7 @@ Expected: command exits with code `0`.
|
||||
Start backend and frontend using the project's normal local commands, then verify these paths in the browser:
|
||||
|
||||
```text
|
||||
1. Open 嘉恒仓库 and click 盘库.
|
||||
1. Open 百华仓库 and click 盘库.
|
||||
2. Warehouse cards show 可盘库 or active stocktake status.
|
||||
3. Start a stocktake for one warehouse.
|
||||
4. Dialog moves to 导出清单 and shows the selected warehouse name.
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
## Scope And Decisions
|
||||
|
||||
- Add this only under `嘉恒仓库 -> 原材料库 -> 出库 -> 退货出库`.
|
||||
- Add this only under `百华仓库 -> 原材料库 -> 出库 -> 退货出库`.
|
||||
- This is for material that already entered the warehouse and was later found quality/performance-unqualified.
|
||||
- This is not the same as purchase quality inspection rejection. Existing `PENDING_QC` / `REJECTED` quality flow stays unchanged.
|
||||
- Raw material remains weight-only. Do not introduce raw-material quantity fields.
|
||||
@@ -1956,7 +1956,7 @@ Expected: first command finds the new feature in planned files. Second command m
|
||||
Run the backend and frontend using the project’s existing local start commands. If the commands are already running, reuse them. Then verify:
|
||||
|
||||
```text
|
||||
1. Open 嘉恒仓库.
|
||||
1. Open 百华仓库.
|
||||
2. Select 原材料库.
|
||||
3. Confirm 出库 row shows 生产出库、委外出库、报废出库、退货出库.
|
||||
4. Click 退货出库.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
**Goal:** Add 嘉恒仓库“退货库” for customer-returned products that can be reworked, move the current “退货处理” entry into warehouse inbound operations, and add 废料库“退货废料入库” for customer-returned products judged as scrap.
|
||||
**Goal:** Add 百华仓库“退货库” for customer-returned products that can be reworked, move the current “退货处理” entry into warehouse inbound operations, and add 废料库“退货废料入库” for customer-returned products judged as scrap.
|
||||
|
||||
**Architecture:** Treat customer returns as inventory movement. `RETURN` warehouse lots represent returned finished goods waiting for rework and are locked until `返工出库`; customer-return scrap bypasses the return warehouse and enters `SCRAP` directly while retaining delivery-line and source-material traceability. The old 发货与售后退货入口 is removed from navigation, but existing return order/disposition tables remain the trace backbone.
|
||||
|
||||
@@ -12,11 +12,11 @@
|
||||
|
||||
## Confirmed Business Rules
|
||||
|
||||
- “发货与售后”的“退货处理”入口去掉,退货登记逻辑移动到“嘉恒仓库 -> 退货库 -> 入库 -> 退货入库”。
|
||||
- “发货与售后”的“退货处理”入口去掉,退货登记逻辑移动到“百华仓库 -> 退货库 -> 入库 -> 退货入库”。
|
||||
- “退货库”只存放客户退回后判定可以返工的产品。
|
||||
- 退货库入库后的批次默认“待返工/锁定”,不能作为成品库存销售。
|
||||
- 退货库出库只有“返工出库”,出库后扣减退货库库存并生成返工处置/返工工单。
|
||||
- 客户退回后判定报废的产品不进入退货库,用户在“嘉恒仓库 -> 废料库 -> 入库 -> 退货废料入库”登记。
|
||||
- 客户退回后判定报废的产品不进入退货库,用户在“百华仓库 -> 废料库 -> 入库 -> 退货废料入库”登记。
|
||||
- 退货库需要“期初入库”,用于初始化历史退货待返工库存。
|
||||
- 退货品明细必须展示发货单号或发货批次号,并通过发货明细追溯成品批次、原材料库存批次号、来源材料。
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
- Add `RETURN` warehouse and default location.
|
||||
- Add `delivery_item_id` to `rt_return_item`.
|
||||
- Modify `backend/app/api/routes/master_data.py`
|
||||
- Add 嘉恒退货库 definition and auto-ensure location.
|
||||
- Add 百华退货库 definition and auto-ensure location.
|
||||
- Modify `backend/app/api/routes/inventory.py`
|
||||
- Add `RETURN` warehouse label, sample opening rows, inbound/outbound permissions, lot number rules, and customer-return scrap inbound operation.
|
||||
- Modify `backend/app/services/stocktake.py`
|
||||
@@ -1418,7 +1418,7 @@ Update the workspace title/description:
|
||||
|
||||
```vue
|
||||
title="成品发货与交付管理"
|
||||
description="发货退回后的库存处理已迁移到嘉恒仓库的退货库和废料库。"
|
||||
description="发货退回后的库存处理已迁移到百华仓库的退货库和废料库。"
|
||||
```
|
||||
|
||||
- [ ] **Step 2: Remove return-management child menu from App**
|
||||
@@ -1563,7 +1563,7 @@ Expected: static test passes and build exits 0.
|
||||
Open the ERP frontend and verify:
|
||||
|
||||
```text
|
||||
1. 嘉恒仓库出现第六个仓库:退货库。
|
||||
1. 百华仓库出现第六个仓库:退货库。
|
||||
2. 退货库入库区有:期初入库、退货入库。
|
||||
3. 退货库出库区有:返工出库。
|
||||
4. 废料库入库区有:退货废料入库。
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
**Goal:** Add a fifth "废料库" to 嘉恒仓库 for production scrap, offcuts, defective goods, opening stock, outsourcing scrap return, and scrap sale outbound.
|
||||
**Goal:** Add a fifth "废料库" to 百华仓库 for production scrap, offcuts, defective goods, opening stock, outsourcing scrap return, and scrap sale outbound.
|
||||
|
||||
**Architecture:** Reuse the current warehouse ledger architecture: one new warehouse type `SCRAP`, one tab in `InventoryLedgerView.vue`, existing `wh_stock_lot` / `wh_stock_balance` / `wh_inventory_txn` tables, existing stocktake flow, and existing opening inventory import/export. Scrap inventory is weight-only and can reference existing material/product items rather than introducing a new scrap catalog.
|
||||
|
||||
@@ -1324,7 +1324,7 @@ npm run dev
|
||||
```
|
||||
|
||||
Expected manual checks:
|
||||
- 嘉恒仓库 shows five warehouse tabs: 原材料库、半成品库、成品库、辅料库、废料库.
|
||||
- 百华仓库 shows five warehouse tabs: 原材料库、半成品库、成品库、辅料库、废料库.
|
||||
- 废料库 tab uses the same card style and selected style as the other four warehouses.
|
||||
- 废料库 list is weight-only and does not show quantity columns.
|
||||
- 入库 bar shows 生产废料入库、期初入库、委外废料入库.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
**Goal:** Make `嘉恒仓库 -> 成品库 -> 销售出库` the only place that creates delivery outbound records, while `发货与售后 -> 发货管理` becomes a read-only delivery ledger with traceability.
|
||||
**Goal:** Make `百华仓库 -> 成品库 -> 销售出库` the only place that creates delivery outbound records, while `发货与售后 -> 发货管理` becomes a read-only delivery ledger with traceability.
|
||||
|
||||
**Architecture:** Keep the existing `/sales/deliveries` API as the single write path for delivery creation. Extend the warehouse sales-out drawer to support both sales-order delivery and direct customer delivery, and remove the create path from the delivery management page. Preserve traceability through existing `DeliveryItem.lot_id -> StockLot.source_material_lot_id/source_material_sub_batch_no/source_material_summary` fields.
|
||||
|
||||
@@ -872,7 +872,7 @@ Expected:
|
||||
Open the ERP frontend and verify:
|
||||
|
||||
```text
|
||||
嘉恒仓库 -> 成品库 -> 销售出库
|
||||
百华仓库 -> 成品库 -> 销售出库
|
||||
```
|
||||
|
||||
Expected UI behavior:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
**Goal:** Add a warehouse-level “流水” entry in 嘉恒仓库 so each of the six warehouses can view paginated, searchable, sortable inbound/outbound inventory transactions.
|
||||
**Goal:** Add a warehouse-level “流水” entry in 百华仓库 so each of the six warehouses can view paginated, searchable, sortable inbound/outbound inventory transactions.
|
||||
|
||||
**Architecture:** Keep `wh_inventory_txn` as the single source of truth. Add a new backend pagination endpoint for warehouse-level transaction ledger queries, then add a right-side drawer in `InventoryLedgerView.vue` that follows the active warehouse tab and displays summary cards, filters, and transaction rows. Keep the existing material-level stock detail drawer unchanged.
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
## Confirmed Requirements
|
||||
|
||||
- Add a “流水” icon/text button in 嘉恒仓库, positioned on the right side of the existing inbound/outbound operation bar.
|
||||
- Add a “流水” icon/text button in 百华仓库, positioned on the right side of the existing inbound/outbound operation bar.
|
||||
- The button follows the active warehouse tab: 原材料库、半成品库、成品库、辅料库、废料库、退货库.
|
||||
- Clicking opens a right-side drawer titled `{当前仓库名} · 出入库流水`.
|
||||
- The drawer shows summary cards, filters, and a paginated table.
|
||||
@@ -774,7 +774,7 @@ In the same Vue file, before `<StocktakeDialog`, add:
|
||||
```vue
|
||||
<FormDrawer
|
||||
:open="warehouseLedgerDrawerOpen"
|
||||
eyebrow="嘉恒仓库 · 库级流水"
|
||||
eyebrow="百华仓库 · 库级流水"
|
||||
:title="`${activeInventoryLabel} · 出入库流水`"
|
||||
tag="库存流水"
|
||||
wide
|
||||
@@ -1214,7 +1214,7 @@ http://localhost:5173/inventory-ledger
|
||||
|
||||
Manual expected results after login:
|
||||
|
||||
- 嘉恒仓库 page renders.
|
||||
- 百华仓库 page renders.
|
||||
- Select 原材料库, click `流水`, drawer title is `原材料库 · 出入库流水`.
|
||||
- Switch 成品库 while the drawer is open, drawer reloads and title becomes `成品库 · 出入库流水`.
|
||||
- Search box can filter by a known material or batch keyword.
|
||||
|
||||
@@ -704,7 +704,7 @@ Expected: all pass.
|
||||
Open the ERP in the browser and check:
|
||||
|
||||
```text
|
||||
1. 嘉恒仓库 -> 成品库 -> 产品明细抽屉
|
||||
1. 百华仓库 -> 成品库 -> 产品明细抽屉
|
||||
2. 库存批次明细表
|
||||
3. 库存流水表
|
||||
4. 采购订单详情抽屉
|
||||
|
||||
@@ -104,4 +104,4 @@ Expected: all backend tests pass.
|
||||
|
||||
Run frontend dev server and open `http://127.0.0.1:5173/` in the in-app browser.
|
||||
|
||||
Expected: page loads with title `嘉恒智能五金 ERP` and no console errors.
|
||||
Expected: page loads with title `百华智能五金 ERP` and no console errors.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
**Goal:** 把嘉恒仓库的半成品库从“通用物料/产品库存”改为“产品 + 已完成工序”的半成品库存模型。
|
||||
**Goal:** 把百华仓库的半成品库从“通用物料/产品库存”改为“产品 + 已完成工序”的半成品库存模型。
|
||||
|
||||
**Architecture:** 后端继续使用 `md_item.id` 表示产品,但用 `StockLot.source_line_id` 和 `InventoryTxn.source_line_id` 记录产品需规清单中的 `route_operation_id`,从而区分同一产品不同工序阶段的半成品。前端半成品入库从 `/master-data/process-routes` 展开产品工序选项,半成品出库和库存明细按 `item_id + source_line_id` 过滤与展示,避免跨工序混扣库存。
|
||||
|
||||
@@ -575,7 +575,7 @@ Expected: PASS.
|
||||
|
||||
- [ ] **Step 4: Manual UI sanity check if local server is already running**
|
||||
|
||||
Open the inventory page, select `嘉恒仓库 -> 半成品库` and verify:
|
||||
Open the inventory page, select `百华仓库 -> 半成品库` and verify:
|
||||
|
||||
```text
|
||||
半成品入库字段显示“产品工序”
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
**Goal:** Add `嘉恒仓库 -> 成品库 -> 返工入库`, binding finished-goods rework inbound to existing `退货库 -> 返工出库` disposition records, with raw-material stock-lot traceability and quantity-based finished inventory updates.
|
||||
**Goal:** Add `百华仓库 -> 成品库 -> 返工入库`, binding finished-goods rework inbound to existing `退货库 -> 返工出库` disposition records, with raw-material stock-lot traceability and quantity-based finished inventory updates.
|
||||
|
||||
**Architecture:** Reuse the existing generic warehouse inbound route and drawer. Add a new inbound business type `REWORK_IN` that is allowed only in `FINISHED` warehouses, validates `RETURN_DISPOSITION` source documents, derives remaining rework-return quantity from existing finished inbound stock lots, and records raw-material source stock lot trace fields. The frontend adds a finished-warehouse operation, loads return dispositions, filters pending/partial rework dispositions by product, and submits `source_doc_type/source_doc_id/source_line_id` through the generic inbound flow.
|
||||
|
||||
@@ -977,7 +977,7 @@ http://127.0.0.1:5173/
|
||||
Manual checks:
|
||||
|
||||
- Login if needed.
|
||||
- Navigate to `嘉恒仓库`.
|
||||
- Navigate to `百华仓库`.
|
||||
- Select `成品库`.
|
||||
- Confirm the inbound operation row shows `返工入库`.
|
||||
- Click `返工入库`.
|
||||
|
||||
@@ -319,7 +319,7 @@ nano /opt/ForgeFlow-ERP/backend/.env
|
||||
推荐内容:
|
||||
|
||||
```env
|
||||
APP_NAME=Jiaheng Hardware ERP API
|
||||
APP_NAME=Baihua Hardware ERP API
|
||||
APP_ENV=staging-dev
|
||||
APP_HOST=0.0.0.0
|
||||
APP_PORT=8000
|
||||
@@ -802,7 +802,7 @@ API 请求地址是 http://<腾讯云公网IP>:8000/api/...
|
||||
验证:
|
||||
|
||||
```text
|
||||
嘉恒仓库六大库能打开,出入库弹窗能打开
|
||||
百华仓库六大库能打开,出入库弹窗能打开
|
||||
```
|
||||
|
||||
- [ ] **Step 4: 生产执行页面**
|
||||
|
||||
@@ -1497,7 +1497,7 @@ ERP 工单台账中返工工单累计良品 8、废品 2。
|
||||
Manual flow:
|
||||
|
||||
```text
|
||||
嘉恒仓库 -> 成品库 -> 返工入库
|
||||
百华仓库 -> 成品库 -> 返工入库
|
||||
-> 选择返工工单 JH0001 对应工单
|
||||
-> 入库 8 件
|
||||
```
|
||||
@@ -1515,7 +1515,7 @@ Expected:
|
||||
Manual flow:
|
||||
|
||||
```text
|
||||
嘉恒仓库 -> 废料库 -> 返工废料入库
|
||||
百华仓库 -> 废料库 -> 返工废料入库
|
||||
-> 选择同一返工工单
|
||||
-> 入库 2 件对应废料重量
|
||||
-> 勾选结单
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
**Goal:** 为嘉恒仓库 6 大库的入库与出库操作区分别增加“特殊入库”“特殊出库”,允许在强制填写说明后,精确到库存明细行进行受控库存调整,并把说明写入所有变更记录。
|
||||
**Goal:** 为百华仓库 6 大库的入库与出库操作区分别增加“特殊入库”“特殊出库”,允许在强制填写说明后,精确到库存明细行进行受控库存调整,并把说明写入所有变更记录。
|
||||
|
||||
**Architecture:** 新增独立的“特殊调整”后端服务与审计主/明细表,库存变动仍复用现有 `wh_stock_lot`、`wh_stock_balance`、`wh_inventory_txn` 三层账本。前端在现有 `InventoryLedgerView.vue` 的仓库出入库操作矩阵中增加特殊操作入口,打开专用抽屉完成说明填写、明细选择、调整前后预览和提交。
|
||||
|
||||
@@ -1743,8 +1743,8 @@ http://127.0.0.1:5173/
|
||||
|
||||
Manual checks:
|
||||
|
||||
- 嘉恒仓库 6 大库的入库操作区都有“特殊入库”。
|
||||
- 嘉恒仓库 6 大库的出库操作区都有“特殊出库”。
|
||||
- 百华仓库 6 大库的入库操作区都有“特殊入库”。
|
||||
- 百华仓库 6 大库的出库操作区都有“特殊出库”。
|
||||
- 未填写说明时,不能添加/提交特殊调整明细。
|
||||
- 原材料库特殊出库只能填写重量,提交后对应库存批次重量减少。
|
||||
- 辅料库特殊入库只按数量增加,不写入重量。
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
**Goal:** Implement原材料库存批次号全库递增、生产出库单批次合并工单、小程序按材料库存批次号报工、以及嘉恒仓库“生产工单入库”统一闭环成品/余料/废料。
|
||||
**Goal:** Implement原材料库存批次号全库递增、生产出库单批次合并工单、小程序按材料库存批次号报工、以及百华仓库“生产工单入库”统一闭环成品/余料/废料。
|
||||
|
||||
**Architecture:** Add a small system-config service for the raw lot prefix, keep ERP production work orders as the internal container, and make raw stock lot IDs the external production-facing identifier. Production outbound becomes single-lot and merges into a deterministic daily work order; production work-order inbound becomes one transactional backend API that posts finished goods, returns surplus to the original raw lot, posts scrap, and optionally settles the work order.
|
||||
|
||||
@@ -1859,7 +1859,7 @@ Add a `FormDrawer` in `InventoryLedgerView.vue`:
|
||||
```html
|
||||
<FormDrawer
|
||||
:open="productionWorkOrderInboundDrawerOpen"
|
||||
eyebrow="嘉恒仓库 · 生产工单入库"
|
||||
eyebrow="百华仓库 · 生产工单入库"
|
||||
title="生产工单入库"
|
||||
tag="工单闭环"
|
||||
wide
|
||||
@@ -2144,12 +2144,12 @@ Smoke flow:
|
||||
|
||||
1. Open `http://127.0.0.1:5173`.
|
||||
2. Go to 系统拓展 and verify 原材料库存批次号前缀 shows `YL`.
|
||||
3. Go to 嘉恒仓库原材料库 and create a raw inbound test lot; verify lot number is `YL0001` or the next available `YL` sequence.
|
||||
3. Go to 百华仓库原材料库 and create a raw inbound test lot; verify lot number is `YL0001` or the next available `YL` sequence.
|
||||
4. Use 原材料库 · 生产出库, select one material stock lot and one product, submit.
|
||||
5. Verify 工单台账 has work order `YYYYMMDD-YLxxxx-产品名称`.
|
||||
6. Submit another production outbound for the same day, same lot, same product.
|
||||
7. Verify it merges into the same work order and adds another issue line.
|
||||
8. Open 嘉恒仓库 · 生产工单入库, select that work order, enter finished qty, verify surplus/scrap defaults are filled.
|
||||
8. Open 百华仓库 · 生产工单入库, select that work order, enter finished qty, verify surplus/scrap defaults are filled.
|
||||
9. Change surplus or scrap beyond 15%; verify deviation remark is required.
|
||||
10. Check “本次入库后结单”, submit, confirm second prompt, verify work order status becomes 已结单.
|
||||
|
||||
|
||||
@@ -42,11 +42,11 @@
|
||||
- Modify `backend/app/api/routes/inventory.py`
|
||||
- Validate warehouse form personnel fields against `MENU_INVENTORY_LEDGER`.
|
||||
- Modify `backend/app/api/routes/production.py`
|
||||
- Validate completion/production inbound receiver fields against `MENU_INVENTORY_LEDGER` when the UI flow belongs to 嘉恒仓库.
|
||||
- Validate completion/production inbound receiver fields against `MENU_INVENTORY_LEDGER` when the UI flow belongs to 百华仓库.
|
||||
- Modify `backend/app/api/routes/sales.py`
|
||||
- Validate delivery shipper fields against `MENU_DELIVERY_MANAGEMENT` for 发货概览 delivery endpoints.
|
||||
- Modify `backend/app/api/routes/returns.py`
|
||||
- Validate return handler fields against the page permission used by that route. Current return-management route redirects to 嘉恒仓库, so warehouse return flows use `MENU_INVENTORY_LEDGER`.
|
||||
- Validate return handler fields against the page permission used by that route. Current return-management route redirects to 百华仓库, so warehouse return flows use `MENU_INVENTORY_LEDGER`.
|
||||
- Modify `backend/app/api/routes/equipment.py`
|
||||
- Validate maintenance owner fields against `MENU_EQUIPMENT_MANAGEMENT`.
|
||||
|
||||
@@ -1610,7 +1610,7 @@ Start or use the existing local app, log in as an admin, and verify:
|
||||
3. 销售订单新增:能看到“销售人员”,选项只包含有客户名录/销售订单权限的人。
|
||||
4. 采购订单新增:采购员只包含有采购订单权限的人。
|
||||
5. 到货入库:接收人只包含有到货入库权限的人。
|
||||
6. 嘉恒仓库内接收人/经办人/发货人只包含有嘉恒仓库权限的人。
|
||||
6. 百华仓库内接收人/经办人/发货人只包含有百华仓库权限的人。
|
||||
7. 设备管理负责人只包含有设备管理权限的人。
|
||||
8. 尝试用接口提交一个无权限人员 ID,后端返回中文错误,不保存单据。
|
||||
```
|
||||
|
||||
@@ -187,7 +187,7 @@ class SystemPermissionManagementTest(unittest.TestCase):
|
||||
now = datetime(2026, 6, 8, 9, 0, 0)
|
||||
self.company = Department(
|
||||
dept_code="JH",
|
||||
dept_name="嘉恒总公司",
|
||||
dept_name="百华总公司",
|
||||
parent_id=None,
|
||||
org_node_type="COMPANY",
|
||||
dept_type="ADMIN",
|
||||
@@ -331,7 +331,7 @@ SET role_name = '采购专员', remark = '供应商、采购订单、到货和
|
||||
WHERE role_code = 'PURCHASER';
|
||||
|
||||
UPDATE sys_role
|
||||
SET role_name = '仓库管理人员', remark = '到货、质检、嘉恒仓库、发货台账相关作业'
|
||||
SET role_name = '仓库管理人员', remark = '到货、质检、百华仓库、发货台账相关作业'
|
||||
WHERE role_code = 'WAREHOUSE';
|
||||
|
||||
UPDATE sys_role
|
||||
@@ -498,7 +498,7 @@ Append these tests to `SystemPermissionManagementTest` in `backend/tests/test_sy
|
||||
tree = build_org_tree(self.db)
|
||||
|
||||
self.assertEqual(len(tree), 1)
|
||||
self.assertEqual(tree[0].node_label, "嘉恒总公司")
|
||||
self.assertEqual(tree[0].node_label, "百华总公司")
|
||||
purchase = tree[0].children[0]
|
||||
self.assertEqual(purchase.node_label, "采购部")
|
||||
self.assertEqual(purchase.manager_employee_id, self.manager_employee_id)
|
||||
@@ -792,7 +792,7 @@ MENU_PERMISSION_TREE = [
|
||||
("MENU_PURCHASE_ORDER", "采购订单", []),
|
||||
("MENU_PURCHASE_RECEIPT", "到货入库", []),
|
||||
("MENU_QUALITY_INSPECTION", "质量检验", []),
|
||||
("MENU_INVENTORY_LEDGER", "嘉恒仓库", []),
|
||||
("MENU_INVENTORY_LEDGER", "百华仓库", []),
|
||||
],
|
||||
),
|
||||
(
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
**Goal:** 让嘉恒仓库 6 大库所有出入库填单都采用正式纸质单据风格,保存后生成 PDF 留档,并支持在各库流水中预览、下载、重新生成 PDF,以及按当前筛选时间范围导出流水 Excel 清单。
|
||||
**Goal:** 让百华仓库 6 大库所有出入库填单都采用正式纸质单据风格,保存后生成 PDF 留档,并支持在各库流水中预览、下载、重新生成 PDF,以及按当前筛选时间范围导出流水 Excel 清单。
|
||||
|
||||
**Architecture:** 采用“双轨归档”:生产主链路继续使用 `生产领料出库单`、`生产入库结算单`,其它仓库出入库统一使用新增 `仓库出入库单`。后端以库存流水 `wh_inventory_txn` 为核心收集归档上下文和导出 Excel;前端抽取通用纸质单据底座,在仓库流水抽屉复用现有 `DocumentArchiveActions`。
|
||||
|
||||
@@ -1133,7 +1133,7 @@ Create `frontend/src/components/documentForms/WarehouseDocumentFormShell.vue`:
|
||||
<form class="warehouse-document-form" @submit.prevent="$emit('submit')">
|
||||
<header class="warehouse-document-head">
|
||||
<div>
|
||||
<span class="warehouse-document-kicker">嘉恒仓库</span>
|
||||
<span class="warehouse-document-kicker">百华仓库</span>
|
||||
<h2>{{ title }}</h2>
|
||||
</div>
|
||||
<dl>
|
||||
|
||||
@@ -431,8 +431,8 @@ class DocumentArchiveServiceTest(unittest.TestCase):
|
||||
self.customer = Customer(
|
||||
id=1,
|
||||
customer_code="CUS001",
|
||||
customer_name="嘉恒客户",
|
||||
short_name="嘉恒",
|
||||
customer_name="百华客户",
|
||||
short_name="百华",
|
||||
status="ACTIVE",
|
||||
created_at=now,
|
||||
updated_at=now,
|
||||
@@ -1789,7 +1789,7 @@ const props = defineProps({
|
||||
},
|
||||
companyName: {
|
||||
type: String,
|
||||
default: "嘉恒仓库 ERP"
|
||||
default: "百华仓库 ERP"
|
||||
},
|
||||
tone: {
|
||||
type: String,
|
||||
|
||||
@@ -185,7 +185,7 @@ const props = defineProps({
|
||||
},
|
||||
companyName: {
|
||||
type: String,
|
||||
default: "宁波嘉恒智能科技有限公司"
|
||||
default: "宁波百华智能科技有限公司"
|
||||
},
|
||||
metaLabel: {
|
||||
type: String,
|
||||
@@ -496,7 +496,7 @@ defineProps({
|
||||
},
|
||||
companyName: {
|
||||
type: String,
|
||||
default: "嘉恒仓库"
|
||||
default: "百华仓库"
|
||||
},
|
||||
signatureLabels: {
|
||||
type: Array,
|
||||
|
||||
Reference in New Issue
Block a user