From 104453d04e70264da61165b69864f28b896db944 Mon Sep 17 00:00:00 2001 From: SkyLi Date: Fri, 15 May 2026 21:07:43 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E5=9B=BA=E5=AE=9A=E5=80=BC?= =?UTF-8?q?=E5=8C=BA=E5=9F=9F=EF=BC=9A=E6=96=B0=E5=A2=9E=E9=87=8D=E9=87=8F?= =?UTF-8?q?=E5=BC=BA=E5=88=B6=E8=A6=86=E7=9B=96=EF=BC=8C=E5=AF=84=E8=BE=BE?= =?UTF-8?q?=E5=9C=B0/=E5=AF=84=E4=BB=B6=E4=BA=BA/=E5=AF=84=E4=BB=B6?= =?UTF-8?q?=E5=9C=B0=E5=9D=80=E6=9C=89=E5=80=BC=E5=8D=B3=E5=BC=BA=E5=88=B6?= =?UTF-8?q?=E8=A6=86=E7=9B=96=EF=BC=8C=E5=AF=84=E8=BE=BE=E5=9C=B0=E5=8C=BA?= =?UTF-8?q?=E5=88=92=E4=BB=A3=E7=A0=81=E6=94=B9=E4=B8=BA=E4=B8=8B=E6=8B=89?= =?UTF-8?q?=E6=A1=86(config=E8=AF=BB=E5=8F=96=E6=98=A0=E5=B0=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.json | 5 +++ main.py | 95 +++++++++++++++++++++++++++++------------------------ 2 files changed, 57 insertions(+), 43 deletions(-) diff --git a/config.json b/config.json index 7b53a46..71a8a7b 100644 --- a/config.json +++ b/config.json @@ -8,6 +8,11 @@ "field_mapping": { "_comment": "仅需在此配置与内置映射不同的自定义列名,默认使用内置映射" }, + "district_codes": { + "广东省": "440000", + "山东省": "370000", + "河北省": "130000" + }, "fixed_values": { "客户名称": {"value": "", "force": false}, "寄件人": {"value": "", "force": false}, diff --git a/main.py b/main.py index 2817d98..7a12886 100644 --- a/main.py +++ b/main.py @@ -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):