后台列表总数改到每页左边,报价模板页同样靠右。陆运选线补每段车型。多段群每次带出询价字段时,底部补上另报提示。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-12 14:59:07 +08:00
co-authored by Cursor
parent 739ba401aa
commit 4f8c373121
9 changed files with 106 additions and 10 deletions
@@ -433,6 +433,41 @@ class LandRouteOptionsTests(unittest.TestCase):
self.assertIn("CNY 7500", page)
self.assertIn("成本价合计", page)
def test_h5_shows_vehicle_type_on_each_leg(self) -> None:
"""多条线路的 H5 卡片按段展示 TMS 车型,没有就写 -。"""
from agent.channel.h5.land_route_page import render_land_route_page
quote = _three_routes()
for leg in quote["landSegments"]:
dest = str(leg.get("destination") or "")
origin = str(leg.get("origin") or "")
if dest == "深圳":
leg["vehicleType"] = "9米6"
elif origin == "深圳":
leg["vehicleType"] = "13米"
elif dest == "广西":
leg["vehicleType"] = None
quote["fee_lines"] = _tms_land_fees(
(1, 1, "运输费", 7500),
(1, 2, "运输费", 9600),
(2, 1, "运输费", 7500),
(2, 2, "运输费", 9600),
(3, 1, "运输费", 7500),
(3, 2, "运输费", 9600),
)
page = render_land_route_page(
{"work_order_no": "WO202609220010", "quote": quote}
)
od = page.find("上海 → 深圳")
vehicle = page.find("车型 9米6", od)
fee = page.find("运输费", vehicle)
self.assertGreaterEqual(od, 0)
self.assertGreater(vehicle, od)
self.assertGreater(fee, vehicle)
self.assertIn("车型 13米", page)
self.assertIn("车型 -", page)
self.assertNotIn("9米6/1", page)
def test_h5_and_detail_use_tms_fees_when_java_sends_json_strings(self) -> None:
"""主账 quote 常是 JSON 串,且 fee_lines 可能没带段号。"""
from agent.channel.h5.land_route_page import render_land_route_page
+5
View File
@@ -177,6 +177,7 @@ class QuoteTests(unittest.TestCase):
)
self.assertEqual(phase, "multi_deal_sent")
self.assertIn("120", self.client.texts[-1])
self.assertNotIn("纯文字", self.client.texts[-1])
self.assertNotIn("100", deal_text(
work_order_no=self.ticket.work_order_no,
segments=[Segment(index=1, mode="SEA"), Segment(index=2, mode="LAND")],
@@ -198,6 +199,8 @@ class QuoteTests(unittest.TestCase):
brief = self.client.texts[-1]
self.assertIn("段1:海运", brief)
self.assertIn("段2:陆运", brief)
self.assertIn("产品人员可通过“纯文字”告知新报价", brief)
self.assertNotIn("航线或产品人员", brief)
self.assertNotIn("TMS报价", brief)
self.assertNotIn("其他段报完", brief)
self.assertEqual(self.ledger.get_ticket(work_order_no=no).collab_chat_id, "room-9")
@@ -265,6 +268,8 @@ class QuoteTests(unittest.TestCase):
self.assertIn("段2:空运", brief)
self.assertIn("目的地(必填):CRK", brief)
self.assertIn("贸易条款(非必填):DAP", brief)
self.assertTrue(brief.endswith("(注:附件报价单仅作为文件存储于后台,智能体不读取且不将报价内容写进系统)"))
self.assertIn("航线或产品人员可通过“纯文字”告知新报价", brief)
self.assertNotIn("其他段报完", "\n".join(self.client.texts))
self.assertNotIn("询价字段:", brief)
@@ -167,6 +167,10 @@ class SplitTests(unittest.TestCase):
)
self.assertIn("@吴季林@林绵助\n段1:", text)
self.assertNotIn("@林绵助\n\n段1", text)
self.assertTrue(
text.endswith(copy.multi_group_field_hint(includes_air=True)),
text,
)
def test_missing_fields_use_single_chat_examples(self) -> None:
outcome = split_segments("段1:海运\n起运港:广州港\n段2:空运\n目的地:CRK")
@@ -694,6 +698,11 @@ class PullTests(unittest.TestCase):
segments=flow._segments(flow.session_of("sales")),
)
self.assertNotIn("TMS", brief_text)
self.assertTrue(
brief_text.endswith(copy.multi_group_field_hint(includes_air=False)),
brief_text,
)
self.assertNotIn("航线或产品人员", brief_text)
class CardPullTests(unittest.TestCase):