# TaxerInfo 迁移说明文档(节选) > 说明:仓库中若曾存在更完整的迁移章节,可与本节合并。 > **本节仅描述「纳税人信息」Tab 内嵌页面相关功能**(对应 `TaxerInfo.xaml` 中第一个 `TabItem` 及 `TaxerInfoViewModel` 中驱动 `WebBrowser` 的逻辑)。代理人企业清单等其余能力假定已在其他模块完成,此处不展开。 --- ## 纳税人信息 Tab — 页面功能详细说明(Tauri 复刻用) **术语(文中 `t`)**:下文及源码参数中的 **`t` 均指 `ticket`**,即叫号/办税流程里的一条 **票据实体**(队列库 `ticket` 表对应的一行数据),与 **点击呼叫后进入办理环节所关联的票号数据** 为同一套模型。在办税员窗口内,传入 `Analize_URL` / `Load_BS_NSR_URL` 的 `t` 多为 **`CurrentTicket`(主票)** 或列表选中的 **`SelectedSubTicket`(当日关联子票)**;占位符里的 `t.TKT_ID`、`t.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"` | `webview`(Tauri Webview)或 `iframe`;需可设 URL、可 reload | | 加载中 | `IsLoading == true` 时 `WebBrowser` `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`,最终可能得到无效地址;复刻时建议对 **结果 URL** 做 `http/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`,对命令参数票或回落 `CurrentTicket` 再 `Load_BS_NSR_URL`。 4. **后台加载完成 `loadWorker_RunWorkerCompleted`**:在身份证/采集等数据就绪后,若有 `SelectedSubTicket` 则对其加载,否则对 `CurrentTicket` 加载。 5. **个人业务路径**:与「当前展示票」一致,保证打开纳税人页时 query 与当前 `ticket` 一致。 ### 6. 办结与清空页面 - **`EndCommand`**(办结当前参数票)成功后:若存在 `Browser`,执行 **`Navigate("about:blank")`**,即 Tab 内页面回到空白页,避免继续显示上一纳税人敏感页。 - Tauri:办结成功后对 webview 执行 `about:blank` 或 `data:text/html,` 空文档等价行为。 ### 7. 刷新(与内嵌页直接相关) - **顶栏「刷新」**(与 Tab 同列、操作对象为该 `WebBrowser`):若 `Browser.Document != null && Browser.Source != null`,则 **`Browser.Refresh()`**。 - Tauri:`webview.reload()` 或 iframe `contentWindow.location.reload()`;无有效 `src` 时不应报错。 > 若你们其他模块已实现顶栏而仅缺 Tab 内逻辑:**最小集**为在「纳税人信息」可见且已导航过时提供 reload 能力即可。 ### 8. 与加载态 `IsLoading` 的配合 - Worker 开始时 `IsLoading = true`;完成时在 `finally` 中 `IsLoading = false`。 - `IsLoading == true` 时该 Tab 内 `WebBrowser` 被 Collapsed,避免在数据未就绪时露出错误 URL 或半屏。 - Tauri:建议在 **首次导航前** 与 **远程页首屏 onload 前** 之间展示 loading;若仅依赖「接口已返回」即导航,可与 WPF 一致在 `IsLoading` 为 true 期间隐藏 webview。 ### 9. 配置与安全要点(复刻 checklist) - [ ] `BS_NSR_URL`、`BS_TAX_AUTHORITY_NUM` 与现网配置一致。 - [ ] URL 编码:若第三方要求对参数编码,需在拼接后整体 URL 合法;现 C# 为模板 `Replace`,一般 **不对整段 URL 二次编码**,除非模板里已含编码后的占位。 - [ ] HTTPS / 证书 / 混合内容:Tauri webview 与 WPF IE 内核行为不同,需在目标环境验证登录态与 Cookie。 - [ ] `about:blank` 与 `file://` 策略按平台区分处理。 ### 10. 与 WPF 行为差异说明(便于测试验收) | 场景 | 期望行为 | |------|----------| | 切换子票 | 新票对应 URL 与当前不同 → 应导航;相同 → 不重复导航 | | 办结 | 内嵌页变为空白 | | 加载中 | 内嵌页不可见(或等价遮罩) | | 无票 / url 为 about:blank | 不崩溃、不导航非法地址 | --- **文档版本**:节选 — 仅「纳税人信息」Tab 页面功能。 **对应源码**:`CallClient/WPF/TaxerInfo.xaml`(TabItem「纳税人信息」)、`CallClient/WPF/TaxerInfo.xaml.cs`(`Analize_URL`、`Load_BS_NSR_URL`、`EndCommand` 内 `about:blank`、`Reflesh_Click`)。