zzw
22 小时以前 f9114ffadfab1c01198dd980c3afb66d0c44a5ea
fix: limit equipment picker to selected X number
5个文件已修改
91 ■■■■■ 已修改文件
HANDOFF.md 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
emergency-repair-server/src/main/java/com/emergencyrepair/system/service/SystemService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
emergency-repair-web/src/components/ProductTreePicker.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
requirement/交接文件_2026.10.3.md 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
requirement/改进20261003.txt 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HANDOFF.md
@@ -853,7 +853,6 @@
**接手注意**
- ä¸è¦æäº¤ `.codex-run`、Office é”æ–‡ä»¶æˆ– `emergency-repair-web/public/新建 æ–‡æœ¬æ–‡æ¡£.txt`。
- æœ¬è½®ä»£ç ã€éœ€æ±‚文件和交接记录一并提交并推送公司 Git ä»“库 `main` åˆ†æ”¯ã€‚
## 22. æ”¶å°¾å¿«ç…§ï¼ˆ2026-10-06 å‘¨ä¸€ï¼Œéœ€æ±‚ 26 æ—¥å¿—日期范围分隔符)
**本轮完成内容**
@@ -878,3 +877,31 @@
**接手注意**
- ä¸è¦æäº¤ `.codex-run`、Office é”æ–‡ä»¶æˆ– `emergency-repair-web/public/新建 æ–‡æœ¬æ–‡æ¡£.txt`。
- æœ¬è½®ä»£ç ã€éœ€æ±‚文件和交接记录一并提交并推送公司 Git ä»“库 `main` åˆ†æ”¯ã€‚
## 23. æ”¶å°¾å¿«ç…§ï¼ˆ2026-10-06 å‘¨ä¸€ï¼Œéœ€æ±‚ 27 è®¾å¤‡é€‰æ‹©èŒƒå›´ï¼‰
**本轮完成内容**
- æ–°å¢žæ•…障选择 `rk_X号`(产品结构树 `side` ç±»åž‹èŠ‚ç‚¹ï¼‰åŽï¼Œè®¾å¤‡é€‰æ‹©å™¨åªä»¥æ‰€é€‰èŠ‚ç‚¹ä¸ºæ ¹å±•ç¤ºå…¶ä¸‹çº§ï¼Œä¸å†åŒæ—¶è¿”å›žåž‹å·æ ¹èŠ‚ç‚¹å’Œæ•´æ£µäº§å“ç»“æž„æ ‘ã€‚
- è®¾å¤‡é€‰æ‹©å™¨æ‰“开锁定范围时自动展开返回的 `side` æ ¹èŠ‚ç‚¹ï¼Œé¦–å±ç›´æŽ¥æ˜¾ç¤ºç¬¬ä¸€å±‚ç³»ç»ŸèŠ‚ç‚¹ï¼ŒåŽç»­ç»§ç»­æŒ‰åŽŸé€»è¾‘æ‡’åŠ è½½ã€‚
- `xNo` ä¸ºç©ºæ—¶ä»è¿”回完整产品结构树,不影响产品结构树管理和不按 `rk_X号` ç­›é€‰çš„设备选择场景。
**主要文件**
- `emergency-repair-server/src/main/java/com/emergencyrepair/system/service/SystemService.java`
- `emergency-repair-web/src/components/ProductTreePicker.vue`
- `requirement/改进20261003.txt`(补充需求 27)
**验证结果**
- åŽç«¯ `mvn -B -DskipTests compile`、`mvn -B -DskipTests package` é€šè¿‡ï¼›å‰ç«¯ `npm run build` é€šè¿‡ï¼Œä»…有既有包体积告警。
- `GET /api/system/tree/product/side-roots?xNo=203` ä¿®å¤åŽåªè¿”回 1 ä¸ªæ ¹èŠ‚ç‚¹ï¼š`id=1280000000000009729`、`name=203`、`layer=side`、`level=2`;`201 / 203 / 301 / æµ‹è¯•T` åˆ†åˆ«åªè¿”回对应节点。
- `node .codex-run/verify-req27.js` é€šè¿‡ï¼šæ ¹èŠ‚ç‚¹æ–‡æœ¬ä»…ä¸º `203`,自动展开 1 ä¸ªæ ¹èŠ‚ç‚¹ï¼Œé¦–å±æ˜¾ç¤ºå…¶ä¸‹çº§ç³»ç»ŸèŠ‚ç‚¹ï¼Œæ— ç½‘ç»œå¼‚å¸¸ã€‚
- è¯·æ±‚链路确认:`/api/system/tree/product/side-roots?xNo=203` åŽç»§ç»­è¯·æ±‚ `/api/system/tree/product/children?parentId=1280000000000009729`。截图:`.codex-run/req27-side-tree.png`。
**当前运行状态(2026-10-06)**
- å‰ç«¯ `http://localhost:8082`,PID `138164`;后端 `http://127.0.0.1:8091`,PID `148268`;DM8 `127.0.0.1:5236`;Edge CDP `9222`。
- ç™»å½• `admin / admin123`;数据库 `SYSDBA/SYSDBA`,业务 schema `LX`。
- åŽç«¯æ—¥å¿—:`.codex-run/backend-20261006-req27.out.log`、`.codex-run/backend-20261006-req27.err.log`。
**接手注意**
- éœ€æ±‚ 26 å·²æäº¤å¹¶æŽ¨é€ï¼Œæäº¤ `f651ad5`(`fix: show full date range separator in log filters`)。需求 27 ä¸ºæœ¬è½®åŽç»­æäº¤ã€‚
- ä¸è¦æäº¤ `.codex-run`、Office é”æ–‡ä»¶æˆ– `emergency-repair-web/public/新建 æ–‡æœ¬æ–‡æ¡£.txt`。
- æœ¬è½®ä»£ç ã€éœ€æ±‚文件和交接记录一并提交并推送公司 Git ä»“库 `main` åˆ†æ”¯ã€‚
emergency-repair-server/src/main/java/com/emergencyrepair/system/service/SystemService.java
@@ -414,30 +414,11 @@
        if (!StringUtils.hasText(xNo)) {
            return productTreeRoots();
        }
        List<ProductNode> rootNodes = productNodeMapper.selectList(Wrappers.<ProductNode>lambdaQuery()
                .and(wrapper -> wrapper.isNull(ProductNode::getParentId).or().eq(ProductNode::getParentId, 0L))
                .orderByAsc(ProductNode::getSortNo).orderByAsc(ProductNode::getId));
        List<ProductNode> sideNodes = productNodeMapper.selectList(Wrappers.<ProductNode>lambdaQuery()
                .in(ProductNode::getLayer, Arrays.asList("side", "SIDE"))
                .eq(ProductNode::getName, xNo.trim())
                .orderByAsc(ProductNode::getSortNo).orderByAsc(ProductNode::getId));
        Map<Long, ProductNode> roots = uniqueProductNodes(rootNodes);
        Map<Long, ProductNode> sides = uniqueProductNodes(sideNodes);
        Set<Long> branchIds = new HashSet<>();
        branchIds.addAll(roots.keySet());
        branchIds.addAll(sides.keySet());
        Map<Long, Map<String, Object>> rootRows = new LinkedHashMap<>();
        for (ProductNode root : sortProductNodes(roots.values())) {
            rootRows.put(root.getId(), mapProduct(root, branchIds));
        }
        for (ProductNode side : sortProductNodes(sides.values())) {
            ProductNode root = findProductRoot(side);
            Map<String, Object> rootRow = root == null ? null : rootRows.get(root.getId());
            if (rootRow != null) {
                children(rootRow).add(mapProduct(side, branchIds));
            }
        }
        return new ArrayList<>(rootRows.values());
        return mapProductTreeNodes(sideNodes, Collections.emptySet());
    }
    public List<String> productXNumbers() {
emergency-repair-web/src/components/ProductTreePicker.vue
@@ -91,9 +91,20 @@
          return map
        }, {})
        this.keyword = ''
        this.$nextTick(() => { this.restoreChecked(); this.syncSelected() })
        this.$nextTick(() => {
          this.expandLockedRoots(lockedXNo)
          this.restoreChecked()
          this.syncSelected()
        })
      }).finally(() => { this.loading = false })
    },
    expandLockedRoots(lockedXNo) {
      if (!lockedXNo || !this.$refs.tree) return
      this.tree.forEach(node => {
        const treeNode = this.$refs.tree.getNode(node.id)
        if (treeNode) treeNode.expand()
      })
    },
    loadNode(node, resolve) {
      if (!node || !node.data || !node.data.id) {
        resolve([])
requirement/½»½ÓÎļþ_2026.10.3.md
@@ -627,7 +627,6 @@
- å®Œå·¥æŸ¥é˜…当前只展示已有 `T_COMPLETION_INFO` å®Œå·¥å¡«æŠ¥è®°å½•的派工单,并且接口未分页。
- æœ¬è½®ä»£ç ã€éœ€æ±‚文件和交接记录一并提交并推送公司 Git ä»“库 `main` åˆ†æ”¯ã€‚
- `.codex-run`、Office é”æ–‡ä»¶åŠ `emergency-repair-web/public/新建 æ–‡æœ¬æ–‡æ¡£.txt` ä»ä¸ºæœ¬åœ°ä¸´æ—¶æ–‡ä»¶ï¼Œä¸åº”提交。
## åäº”、2026-10-06 è”调收尾(需求 21 æƒé™è®¾ç½®èŒƒå›´åˆ‡æ¢ï¼‰
| åºå· | éœ€æ±‚补充 | çŠ¶æ€ | å®žçŽ°ä¸ŽéªŒè¯ |
@@ -676,3 +675,29 @@
- å½“前运行:前端 `http://localhost:8082`;后端 `http://127.0.0.1:8091`;DM8 `127.0.0.1:5236`;Edge CDP `9222`。登录 `admin / admin123`。
- æœ¬è½®ä»£ç ã€éœ€æ±‚文件和交接记录一并提交并推送公司 Git ä»“库 `main` åˆ†æ”¯ã€‚
- `.codex-run`、Office é”æ–‡ä»¶åŠ `emergency-repair-web/public/新建 æ–‡æœ¬æ–‡æ¡£.txt` ä»ä¸ºæœ¬åœ°ä¸´æ—¶æ–‡ä»¶ï¼Œä¸åº”提交。
## åä¸ƒã€2026-10-06 è”调收尾(需求 27 è®¾å¤‡é€‰æ‹©èŒƒå›´ï¼‰
| åºå· | éœ€æ±‚ | çŠ¶æ€ | å®žçŽ°ä¸ŽéªŒè¯ |
| --- | --- | --- | --- |
| 27 | æ–°å¢žæ•…障选择 `rk_X号` åŽï¼Œè®¾å¤‡é€‰æ‹©å™¨åº”只显示所选 `side` èŠ‚ç‚¹çš„ä¸‹çº§ | å·²å®Œæˆ | åŽç«¯åªè¿”回所选 `side` èŠ‚ç‚¹ä½œä¸ºæ ¹ï¼›å‰ç«¯è‡ªåŠ¨å±•å¼€è¯¥æ ¹èŠ‚ç‚¹å¹¶ç»§ç»­æ‡’åŠ è½½ä¸‹çº§ï¼ŒæŽ¥å£ä¸Žæµè§ˆå™¨éªŒè¯é€šè¿‡ |
### 17.1 ä¸»è¦å˜æ›´æ–‡ä»¶
- `emergency-repair-server/src/main/java/com/emergencyrepair/system/service/SystemService.java`
- `emergency-repair-web/src/components/ProductTreePicker.vue`
- `requirement/改进20261003.txt`(补充需求 27)
### 17.2 éªŒè¯ç»“æžœ
- åŽç«¯ `mvn -B -DskipTests compile`、`mvn -B -DskipTests package` é€šè¿‡ï¼›å‰ç«¯ `npm run build` é€šè¿‡ï¼Œä»…有既有包体积告警。
- `GET /api/system/tree/product/side-roots?xNo=203` åªè¿”回对应的 `side` æ ¹èŠ‚ç‚¹ï¼›`201 / 203 / 301 / æµ‹è¯•T` å‡åˆ†åˆ«éªŒè¯é€šè¿‡ã€‚
- `node .codex-run/verify-req27.js` é€šè¿‡ï¼šæ ¹èŠ‚ç‚¹æ–‡æœ¬ä»…ä¸º `203`,自动展开 1 ä¸ªæ ¹èŠ‚ç‚¹ï¼Œæ˜¾ç¤ºä¸‹çº§ç³»ç»ŸèŠ‚ç‚¹ï¼Œæ— ç½‘ç»œå¼‚å¸¸ã€‚
- è¯·æ±‚链路确认:`side-roots?xNo=203` åŽè¯·æ±‚ `children?parentId=1280000000000009729`。截图:`.codex-run/req27-side-tree.png`。
### 17.3 æŽ¥æ‰‹æ³¨æ„
- å½“前运行:前端 `http://localhost:8082`,PID `138164`;后端 `http://127.0.0.1:8091`,PID `148268`;DM8 `127.0.0.1:5236`;Edge CDP `9222`。登录 `admin / admin123`。
- éœ€æ±‚ 26 å·²æäº¤å¹¶æŽ¨é€ï¼Œæäº¤ `f651ad5`;需求 27 ä¸ºæœ¬è½®åŽç»­æäº¤ã€‚
- æœ¬è½®ä»£ç ã€éœ€æ±‚文件和交接记录一并提交并推送公司 Git ä»“库 `main` åˆ†æ”¯ã€‚
- `.codex-run`、Office é”æ–‡ä»¶åŠ `emergency-repair-web/public/新建 æ–‡æœ¬æ–‡æ¡£.txt` ä»ä¸ºæœ¬åœ°ä¸´æ—¶æ–‡ä»¶ï¼Œä¸åº”提交。
requirement/¸Ä½ø20261003.txt
@@ -38,4 +38,5 @@
25、菜单管理编辑时,应该可以修改父节点
26、日志管理的日期组件2个日期中间那个“至”显示不完整
27、新增故障那里选了rk_X号(对应产品结构树的side类型)后,再选设备的时候还是显示整个产品结构树,应该显示锁选节点的下级节点