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.
7.2 KiB
7.2 KiB
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)。 - 步骤:
url = Analize_URL(SystemControl.Get("BS_NSR_URL"), t)- 若当前浏览器已有
Source,且Source.AbsoluteUri == url(字符串与规范化 URI 一致),则 直接 return,不重复导航(减轻第三方页重复初始化、闪烁)。 - 否则设置
Browser.Source = new Uri(url)(或等价navigate(url))。
Tauri 实现时:在设置 src 前比较 规范化后的当前 URL 与目标 URL;一致则跳过。
5. 何时触发加载(与 Tab 内页相关的触发点)
以下情形会调用 Load_BS_NSR_URL(或等价逻辑),仅列与内嵌页相关的:
CurrentTicketsetter(且Browser != null):当新票 非企业(IS_ENTERPRISE != 1)时,对主票加载纳税人 URL。企业业务时左侧列表仍可能通过子票切换加载,见下。SelectedSubTicketsetter:选中子票变化时,在更新CuttentCompany文案后 始终Load_BS_NSR_URL(value)。StartCommand:开始办理后,若存在Browser,对命令参数票或回落CurrentTicket再Load_BS_NSR_URL。- 后台加载完成
loadWorker_RunWorkerCompleted:在身份证/采集等数据就绪后,若有SelectedSubTicket则对其加载,否则对CurrentTicket加载。 - 个人业务路径:与「当前展示票」一致,保证打开纳税人页时 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()或 iframecontentWindow.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)。