feat: add fixed parcel dimensions

This commit is contained in:
2026-10-03 20:02:35 +08:00
parent 2fbb7fc8a5
commit f25df94f63
4 changed files with 39 additions and 4 deletions
+2
View File
@@ -102,6 +102,7 @@ cookies 保存到 `session.json`(与 exe 同目录)。登录成功后自动
| 寄达地区划代码 | 直接决定寄达地,勾选强制覆盖后优先级最高 |
| 寄件人姓名 | 强制覆盖客户资料中的寄件人 |
| 寄件地址 | 强制覆盖客户资料中的寄件地址 |
| 长 / 宽 / 高 | 有值即强制覆盖提交表单中的包裹尺寸 |
### 5. 开始处理
@@ -136,6 +137,7 @@ cookies 保存到 `session.json`(与 exe 同目录)。登录成功后自动
"字段名": {"value": "值", "force": false}
```
`force: true` 时覆盖 API 获取值。GUI 中通过复选框控制,点击"开始处理"时自动保存到配置文件。
长、宽、高在 GUI 中填写后会自动保存为强制固定值;留空时不覆盖 Excel 或系统已有值。
### defaults
字段的默认值(中文名,自动翻译为系统编码)。
+5 -2
View File
@@ -20,7 +20,10 @@
"寄达地": {"value": "", "force": false},
"寄达地区划": {"value": "", "force": false},
"产品名称": {"value": "", "force": false},
"内件品名": {"value": "", "force": false}
"内件品名": {"value": "", "force": false},
"长": {"value": "", "force": false},
"宽": {"value": "", "force": false},
"高": {"value": "", "force": false}
},
"defaults": {
"电商平台": "无",
@@ -34,4 +37,4 @@
"代收标志": "不代收",
"投递方式": "普通投递"
}
}
}
+3
View File
@@ -29,6 +29,9 @@ BUILTIN_FIELD_MAP: dict[str, str] = {
"寄件人固话": "senderFixtel",
# ── 货物 ──
"重量": "realWeight",
"长": "length",
"宽": "width",
"高": "height",
"内件品名": "reserved5",
# ── 电商 / 支付 ──
"电商平台": "ecommerceNo",
+29 -2
View File
@@ -125,6 +125,9 @@ class App:
self.fv_sender_addr = StringVar()
self.fv_transport_type = StringVar()
self.fv_weight = StringVar()
self.fv_length = StringVar()
self.fv_width = StringVar()
self.fv_height = StringVar()
# 搜索基础设施(懒加载)
self._search_bridge = None
@@ -244,7 +247,19 @@ class App:
Entry(r1, textvariable=self.fv_weight, width=10).pack(side="left", padx=5)
Label(r1, text="(有值即强制覆盖)", fg="gray", font=("", 8)).pack(side="left")
# Row 2: 寄达地 | 寄达地区划代码
# Row 2: 长 | 宽 | 高
r_dimensions = Frame(fixed_frame)
r_dimensions.pack(fill=X, pady=2)
for label, variable in (
("长:", self.fv_length),
("宽:", self.fv_width),
("高:", self.fv_height),
):
Label(r_dimensions, text=label, width=5, anchor="e").pack(side="left")
Entry(r_dimensions, textvariable=variable, width=10).pack(side="left", padx=5)
Label(r_dimensions, text="(有值即强制覆盖)", fg="gray", font=("", 8)).pack(side="left")
# Row 3: 寄达地 | 寄达地区划代码
r2 = Frame(fixed_frame)
r2.pack(fill=X, pady=2)
Label(r2, text="寄达地:", width=10, anchor="e").pack(side="left")
@@ -256,7 +271,7 @@ class App:
self.fv_district_combo.pack(side="left", padx=5)
Checkbutton(r2, text="强制覆盖", variable=self.fv_force_district).pack(side="left", padx=2)
# Row 3: 寄件人姓名 | 寄件地址
# Row 4: 寄件人姓名 | 寄件地址
r3 = Frame(fixed_frame)
r3.pack(fill=X, pady=2)
Label(r3, text="寄件人姓名:", width=10, anchor="e").pack(side="left")
@@ -380,6 +395,9 @@ class App:
self.fv_sender_name.set(fv.get("寄件人", {}).get("value", ""))
self.fv_sender_addr.set(fv.get("寄件地址", {}).get("value", ""))
self.fv_weight.set(fv.get("重量", {}).get("value", ""))
self.fv_length.set(fv.get("长", {}).get("value", ""))
self.fv_width.set(fv.get("宽", {}).get("value", ""))
self.fv_height.set(fv.get("高", {}).get("value", ""))
# 加载区划代码下拉选项
dc = self.config.get("district_codes", {})
@@ -418,6 +436,9 @@ class App:
sender_val = self.fv_sender_name.get().strip()
addr_val = self.fv_sender_addr.get().strip()
weight_val = self.fv_weight.get().strip()
length_val = self.fv_length.get().strip()
width_val = self.fv_width.get().strip()
height_val = self.fv_height.get().strip()
# 区划代码:Combobox 显示中文名,实际存 propertyCode
dist_name = self.fv_district_code.get()
dist_code = self._district_codes.get(dist_name, dist_name) if self._district_codes else dist_name
@@ -430,6 +451,9 @@ class App:
"寄件人": {"value": sender_val, "force": bool(sender_val)},
"寄件地址": {"value": addr_val, "force": bool(addr_val)},
"重量": {"value": weight_val, "force": bool(weight_val)},
"长": {"value": length_val, "force": bool(length_val)},
"宽": {"value": width_val, "force": bool(width_val)},
"高": {"value": height_val, "force": bool(height_val)},
}
self.config["fixed_values"] = new_fixed
@@ -934,6 +958,9 @@ class App:
self.fv_sender_addr.set("")
self.fv_transport_type.set("")
self.fv_weight.set("")
self.fv_length.set("")
self.fv_width.set("")
self.fv_height.set("")
self._product_cached_choice = None
self._product_cached_detail = None
self._customer_cached_choice = None