You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tauri-client/call-client/TaxerInfo-tauri-v1-migratio...

7.2 KiB

TaxerInfo 迁移说明文档(节选)

说明:仓库中若曾存在更完整的迁移章节,可与本节合并。
本节仅描述「纳税人信息」Tab 内嵌页面相关功能(对应 TaxerInfo.xaml 中第一个 TabItemTaxerInfoViewModel 中驱动 WebBrowser 的逻辑)。代理人企业清单等其余能力假定已在其他模块完成,此处不展开。


纳税人信息 Tab — 页面功能详细说明Tauri 复刻用)

术语(文中 t:下文及源码参数中的 t 均指 ticket,即叫号/办税流程里的一条 票据实体(队列库 ticket 表对应的一行数据),与 点击呼叫后进入办理环节所关联的票号数据 为同一套模型。在办税员窗口内,传入 Analize_URL / Load_BS_NSR_URLt 多为 CurrentTicket(主票) 或列表选中的 SelectedSubTicket(当日关联子票);占位符里的 t.TKT_IDt.ENTERPRISE_ID 等均来自该条 ticket 已落库字段,而非本 Tab 内单独请求计算。

1. 功能本质

  • 不是先调用第三方 JSON 接口再渲染自有 HTML 模板。
  • 在 Tab 内放置 Web 视图WPF 为 WebBrowser),将配置项 BS_NSR_URL 与当前业务上下文拼成 完整 HTTP(S) URL,再 navigate / 设置 src 打开第三方页面。
  • 第三方站点负责展示「纳税人信息」;客户端只负责 拼 URL、导航、刷新、加载态、办结后清空

2. UI 与控件范围(仅限该 Tab

项目 WPF 行为 Tauri 对应建议
容器 TabItem Header="纳税人信息" 内嵌 WebBrowser Name="Browser" webviewTauri Webviewiframe;需可设 URL、可 reload
加载中 IsLoading == trueWebBrowser Visibility = Collapsed 加载中为 true 时隐藏 webview 或盖一层 loading避免白块/半渲染
可见性 与 Tab 切换无关的特殊逻辑;随 Tab 切换自然显示/隐藏即可 与 Vue el-tab-pane 或路由子页一致

3. URL 来源与占位符替换

  • 模板来源SystemControl.Get("BS_NSR_URL")(运行时配置,非写死)。仓库内默认示例形态为带 query 的 URL内含占位符。
  • 拼接入口Analize_URL(string url, ticket t)t == null 时返回 about:blank(避免空引用;实际导航前仍应判票)。
  • 占位符与取值(与现 C# 一致即可保证第三方页参数一致):
占位符 替换为
{djxh} t.ENTERPRISE_ID(登记序号/电局登记序号语境,与现字段同名)
{sfzhm} 办税员身份证 Card.Code(来自先前置办的百税办税员信息;无 Card 则为空串)
{sflb} t.IS_ENTERPRISE == 1 → 字符串 "1",否则 "2"
{swjgDm} SystemControl.Get("BS_TAX_AUTHORITY_NUM")
{qhhm} t.TKT_ID(票号/取号展示号,与现逻辑一致)
{sjhm} ViewModel 的 PhoneNo(实名采集接口侧手机号,可为空)
  • 空模板:若 BS_NSR_URL 配置为空,除 t==null 外仍会 Replace,最终可能得到无效地址;复刻时建议对 结果 URLhttp/https 校验,非法则不调导航并打日志。

4. 导航与「避免重复加载」

  • 方法名Load_BS_NSR_URL(ticket t)(在 UI 线程上执行:Dispatcher.Invoke)。
  • 步骤
    1. url = Analize_URL(SystemControl.Get("BS_NSR_URL"), t)
    2. 若当前浏览器已有 Source,且 Source.AbsoluteUri == url(字符串与规范化 URI 一致),则 直接 return不重复导航(减轻第三方页重复初始化、闪烁)。
    3. 否则设置 Browser.Source = new Uri(url)(或等价 navigate(url))。

Tauri 实现时:在设置 src 前比较 规范化后的当前 URL 与目标 URL;一致则跳过。

5. 何时触发加载(与 Tab 内页相关的触发点)

以下情形会调用 Load_BS_NSR_URL(或等价逻辑),仅列与内嵌页相关的

  1. CurrentTicket setter(且 Browser != null):当新票 非企业IS_ENTERPRISE != 1)时,对主票加载纳税人 URL。企业业务时左侧列表仍可能通过子票切换加载见下。
  2. SelectedSubTicket setter:选中子票变化时,在更新 CuttentCompany 文案后 始终 Load_BS_NSR_URL(value)
  3. StartCommand:开始办理后,若存在 Browser,对命令参数票或回落 CurrentTicketLoad_BS_NSR_URL
  4. 后台加载完成 loadWorker_RunWorkerCompleted:在身份证/采集等数据就绪后,若有 SelectedSubTicket 则对其加载,否则对 CurrentTicket 加载。
  5. 个人业务路径:与「当前展示票」一致,保证打开纳税人页时 query 与当前 ticket 一致。

6. 办结与清空页面

  • EndCommand(办结当前参数票)成功后:若存在 Browser,执行 Navigate("about:blank"),即 Tab 内页面回到空白页,避免继续显示上一纳税人敏感页。
  • Tauri办结成功后对 webview 执行 about:blankdata:text/html, 空文档等价行为。

7. 刷新(与内嵌页直接相关)

  • 顶栏「刷新」(与 Tab 同列、操作对象为该 WebBrowser):若 Browser.Document != null && Browser.Source != null,则 Browser.Refresh()
  • Tauriwebview.reload() 或 iframe contentWindow.location.reload();无有效 src 时不应报错。

若你们其他模块已实现顶栏而仅缺 Tab 内逻辑:最小集为在「纳税人信息」可见且已导航过时提供 reload 能力即可。

8. 与加载态 IsLoading 的配合

  • Worker 开始时 IsLoading = true;完成时在 finallyIsLoading = false
  • IsLoading == true 时该 Tab 内 WebBrowser 被 Collapsed避免在数据未就绪时露出错误 URL 或半屏。
  • Tauri建议在 首次导航前远程页首屏 onload 前 之间展示 loading若仅依赖「接口已返回」即导航可与 WPF 一致在 IsLoading 为 true 期间隐藏 webview。

9. 配置与安全要点(复刻 checklist

  • BS_NSR_URLBS_TAX_AUTHORITY_NUM 与现网配置一致。
  • URL 编码:若第三方要求对参数编码,需在拼接后整体 URL 合法;现 C# 为模板 Replace,一般 不对整段 URL 二次编码,除非模板里已含编码后的占位。
  • HTTPS / 证书 / 混合内容Tauri webview 与 WPF IE 内核行为不同,需在目标环境验证登录态与 Cookie。
  • about:blankfile:// 策略按平台区分处理。

10. 与 WPF 行为差异说明(便于测试验收)

场景 期望行为
切换子票 新票对应 URL 与当前不同 → 应导航;相同 → 不重复导航
办结 内嵌页变为空白
加载中 内嵌页不可见(或等价遮罩)
无票 / url 为 about:blank 不崩溃、不导航非法地址

文档版本:节选 — 仅「纳税人信息」Tab 页面功能。
对应源码CallClient/WPF/TaxerInfo.xamlTabItem「纳税人信息」CallClient/WPF/TaxerInfo.xaml.csAnalize_URLLoad_BS_NSR_URLEndCommandabout:blankReflesh_Click)。