重构固定值区域:新增重量强制覆盖,寄达地/寄件人/寄件地址有值即强制覆盖,寄达地区划代码改为下拉框(config读取映射)

This commit is contained in:
2026-05-15 21:07:43 +08:00
parent be6319f697
commit 104453d04e
2 changed files with 57 additions and 43 deletions
+5
View File
@@ -8,6 +8,11 @@
"field_mapping": {
"_comment": "仅需在此配置与内置映射不同的自定义列名,默认使用内置映射"
},
"district_codes": {
"广东省": "440000",
"山东省": "370000",
"河北省": "130000"
},
"fixed_values": {
"客户名称": {"value": "", "force": false},
"寄件人": {"value": "", "force": false},
+52 -43
View File
@@ -118,14 +118,12 @@ class App:
self.fv_product = StringVar()
self.fv_customer = StringVar()
self.fv_destination = StringVar()
self.fv_force_destination = BooleanVar()
self.fv_district_code = StringVar()
self.fv_force_district = BooleanVar()
self.fv_sender_name = StringVar()
self.fv_force_sender_name = BooleanVar()
self.fv_sender_addr = StringVar()
self.fv_force_sender_addr = BooleanVar()
self.fv_transport_type = StringVar()
self.fv_weight = StringVar()
# 搜索基础设施(懒加载)
self._search_bridge = None
@@ -141,6 +139,7 @@ class App:
self._customer_cached_detail = None
self._sender_realname_cached = None
self._transmode_map = {} # {propertyName: propertyCode}
self._district_codes = {} # {中文名: 区划代码}
self._build_ui()
@@ -219,50 +218,45 @@ class App:
r0 = Frame(fixed_frame)
r0.pack(fill=X, pady=2)
Label(r0, text="产品:", width=10, anchor="e").pack(side="left")
self.fv_product_entry = Entry(r0, textvariable=self.fv_product, width=20)
self.fv_product_entry = Entry(r0, textvariable=self.fv_product, width=18)
self.fv_product_entry.pack(side="left", padx=5)
Label(r0, text="客户:", width=10, anchor="e").pack(side="left", padx=(30, 0))
self.fv_customer_entry = Entry(r0, textvariable=self.fv_customer, width=20)
Label(r0, text="客户:", width=10, anchor="e").pack(side="left", padx=(20, 0))
self.fv_customer_entry = Entry(r0, textvariable=self.fv_customer, width=18)
self.fv_customer_entry.pack(side="left", padx=5)
# Row 1: 寄达地 | 无影响
# Row 1: 运输类型 | 重量
r1 = Frame(fixed_frame)
r1.pack(fill=X, pady=2)
Label(r1, text="寄达地:", width=10, anchor="e").pack(side="left")
Entry(r1, textvariable=self.fv_destination, width=20).pack(side="left", padx=5)
Checkbutton(r1, text="强制覆盖", variable=self.fv_force_destination).pack(side="left", padx=5)
Label(r1, text="无影响", fg="gray", font=("", 8)).pack(side="left")
Label(r1, text="运输类型:", width=10, anchor="e").pack(side="left")
self.fv_transport_combo = ttk.Combobox(r1, textvariable=self.fv_transport_type,
state="readonly", width=16)
self.fv_transport_combo.pack(side="left", padx=5)
Label(r1, text="(产品选择后填充)", fg="gray", font=("", 8)).pack(side="left")
Label(r1, text="重量:", width=8, anchor="e").pack(side="left", padx=(10, 0))
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: 寄达地 | 寄达地区划代码
r2 = Frame(fixed_frame)
r2.pack(fill=X, pady=2)
Label(r2, text="寄达地区划代码:", width=12, anchor="e").pack(side="left")
Entry(r2, textvariable=self.fv_district_code, width=20).pack(side="left", padx=5)
Checkbutton(r2, text="强制覆盖", variable=self.fv_force_district).pack(side="left", padx=5)
Label(r2, text="(直接决定寄达地)", fg="gray", font=("", 8)).pack(side="left")
Label(r2, text="寄达地:", width=10, anchor="e").pack(side="left")
Entry(r2, textvariable=self.fv_destination, width=18).pack(side="left", padx=5)
Label(r2, text="(有值即强制覆盖)", fg="gray", font=("", 8)).pack(side="left")
Label(r2, text="区划代码:", width=10, anchor="e").pack(side="left", padx=(10, 0))
self.fv_district_combo = ttk.Combobox(r2, textvariable=self.fv_district_code,
state="readonly", width=12)
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 3: 寄件人姓名 | 寄件地址
r3 = Frame(fixed_frame)
r3.pack(fill=X, pady=2)
Label(r3, text="寄件人姓名:", width=12, anchor="e").pack(side="left")
Entry(r3, textvariable=self.fv_sender_name, width=20).pack(side="left", padx=5)
Checkbutton(r3, text="强制覆盖", variable=self.fv_force_sender_name).pack(side="left", padx=5)
# Row 4: 寄件地址 | 强制覆盖
r4 = Frame(fixed_frame)
r4.pack(fill=X, pady=2)
Label(r4, text="寄件地址:", width=12, anchor="e").pack(side="left")
Entry(r4, textvariable=self.fv_sender_addr, width=20).pack(side="left", padx=5)
Checkbutton(r4, text="强制覆盖", variable=self.fv_force_sender_addr).pack(side="left", padx=5)
# Row 5: 运输类型 | 下拉框(产品选择后自动填充)
r5 = Frame(fixed_frame)
r5.pack(fill=X, pady=2)
Label(r5, text="运输类型:", width=12, anchor="e").pack(side="left")
self.fv_transport_combo = ttk.Combobox(r5, textvariable=self.fv_transport_type,
state="readonly", width=18)
self.fv_transport_combo.pack(side="left", padx=5)
Label(r5, text="(产品选择后自动填充)", fg="gray", font=("", 8)).pack(side="left")
Label(r3, text="寄件人姓名:", width=10, anchor="e").pack(side="left")
Entry(r3, textvariable=self.fv_sender_name, width=18).pack(side="left", padx=5)
Label(r3, text="(有值即强制覆盖)", fg="gray", font=("", 8)).pack(side="left")
Label(r3, text="寄件地址:", width=10, anchor="e").pack(side="left", padx=(10, 0))
Entry(r3, textvariable=self.fv_sender_addr, width=18).pack(side="left", padx=5)
Label(r3, text="(有值即强制覆盖)", fg="gray", font=("", 8)).pack(side="left")
# ── 进度条 ──
progress_frame = Frame(self.root)
@@ -363,13 +357,18 @@ class App:
self.fv_product.set(fv.get("产品名称", {}).get("value", ""))
self.fv_customer.set(fv.get("客户名称", {}).get("value", ""))
self.fv_destination.set(fv.get("寄达地", {}).get("value", ""))
self.fv_force_destination.set(fv.get("寄达地", {}).get("force", False))
self.fv_district_code.set(fv.get("寄达地区划", {}).get("value", ""))
self.fv_force_district.set(fv.get("寄达地区划", {}).get("force", False))
self.fv_sender_name.set(fv.get("寄件人", {}).get("value", ""))
self.fv_force_sender_name.set(fv.get("寄件人", {}).get("force", False))
self.fv_sender_addr.set(fv.get("寄件地址", {}).get("value", ""))
self.fv_force_sender_addr.set(fv.get("寄件地址", {}).get("force", False))
self.fv_weight.set(fv.get("重量", {}).get("value", ""))
# 加载区划代码下拉选项
dc = self.config.get("district_codes", {})
self._district_codes = dc
names = list(dc.keys())
self.fv_district_combo["values"] = names
self._loading_config = False
# 检查已保存的登录会话
@@ -397,13 +396,22 @@ class App:
def _save_fixed_from_entries(self):
"""从编辑框保存固定值到 config.json。"""
dest_val = self.fv_destination.get().strip()
sender_val = self.fv_sender_name.get().strip()
addr_val = self.fv_sender_addr.get().strip()
weight_val = self.fv_weight.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
new_fixed = {
"产品名称": {"value": self.fv_product.get().strip(), "force": False},
"客户名称": {"value": self.fv_customer.get().strip(), "force": False},
"寄达地": {"value": self.fv_destination.get().strip(), "force": self.fv_force_destination.get()},
"寄达地区划": {"value": self.fv_district_code.get().strip(), "force": self.fv_force_district.get()},
"寄件人": {"value": self.fv_sender_name.get().strip(), "force": self.fv_force_sender_name.get()},
"寄件地址": {"value": self.fv_sender_addr.get().strip(), "force": self.fv_force_sender_addr.get()},
"寄达地": {"value": dest_val, "force": bool(dest_val)},
"寄达地区划": {"value": dist_code, "force": self.fv_force_district.get()},
"寄件人": {"value": sender_val, "force": bool(sender_val)},
"寄件地址": {"value": addr_val, "force": bool(addr_val)},
"重量": {"value": weight_val, "force": bool(weight_val)},
}
self.config["fixed_values"] = new_fixed
@@ -870,6 +878,7 @@ class App:
self._customer_cached_detail = None
self._sender_realname_cached = None
self.fv_transport_type.set("")
self.fv_weight.set("")
self._transmode_map = {}
def _pause(self):