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...

101 lines
7.2 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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`)。