From 259f2476d22c232dbf27561ecd414232672effd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E7=AB=A5=E5=B4=87?= <792998983@qq.com> Date: Sun, 28 Jul 2024 13:55:37 +0800 Subject: [PATCH] =?UTF-8?q?fix(web):=20=E5=A6=82=E6=9E=9CUI=E6=89=A9?= =?UTF-8?q?=E5=B1=95=E8=87=AA=E5=AE=9A=E4=B9=89=E5=AF=BC=E8=88=AA=E6=A0=8F?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=BF=94=E5=9B=9E=E7=9A=84=E6=9F=90=E4=B8=AA?= =?UTF-8?q?=E5=AF=BC=E8=88=AA=E9=A1=B9=E7=9A=84`path`=E4=B8=8E=E6=9F=90?= =?UTF-8?q?=E4=B8=AA=E5=B7=B2=E6=9C=89=E7=9A=84=E8=B7=AF=E5=BE=84=E7=9A=84?= =?UTF-8?q?`clickToPath`=E7=9B=B8=E5=90=8C=EF=BC=88=E4=B9=8B=E5=89=8D?= =?UTF-8?q?=E5=8F=AA=E6=A3=80=E6=9F=A5`path`=EF=BC=89=EF=BC=8C=E5=88=99?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E7=9A=84=E8=B7=AF=E5=BE=84=E4=B9=9F=E5=B0=86?= =?UTF-8?q?=E4=B8=8D=E5=81=9A=E8=BF=9B=E4=B8=80=E6=AD=A5=E5=A4=84=E7=90=86?= =?UTF-8?q?=20(#1377)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Chen Junda --- .changeset/tasty-geese-reflect.md | 5 +++++ docs/docs/integration/ui-extension/develop.md | 22 ++++++++++++++++--- libs/web/src/extensions/navigations.tsx | 3 +++ 3 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 .changeset/tasty-geese-reflect.md diff --git a/.changeset/tasty-geese-reflect.md b/.changeset/tasty-geese-reflect.md new file mode 100644 index 0000000000..fcbf170d55 --- /dev/null +++ b/.changeset/tasty-geese-reflect.md @@ -0,0 +1,5 @@ +--- +"@scow/lib-web": patch +--- + +如果UI扩展自定义导航栏接口返回的某个导航项的`path`与某个已有的路径的`clickToPath`相同(之前只检查`path`),则返回的路径也将不做进一步处理 diff --git a/docs/docs/integration/ui-extension/develop.md b/docs/docs/integration/ui-extension/develop.md index 14ccf74d9f..19763ae075 100644 --- a/docs/docs/integration/ui-extension/develop.md +++ b/docs/docs/integration/ui-extension/develop.md @@ -98,7 +98,7 @@ SCOW将会在body中传入默认情况下SCOW将会显示的导航项。下表 #### 关于返回的路径的说明 - 如果 - - 返回的路径在调用这个扩展的此接口之前已经存在(即在调用此扩展的此接口时的某个已有的导航项具有和返回的路径相同的路径),或者 + - 返回的路径和传入参数的某项的`path`或者`clickToPath`相同,或者 - 此路径是一个有效的URL - 检查方法:使用`new URL(输入)`,若不抛出异常则为有效的URL - 则 @@ -109,6 +109,8 @@ SCOW将会在body中传入默认情况下SCOW将会显示的导航项。下表 - 当系统采用多个个UI扩展配置语法时,对应的导航项的路径为:`{SCOW URL}/extensions/{name}/{path}` - 若当前浏览器的pathname以此开头,则此导航项将会高亮 +#### 多个UI扩展 + 如果配置了多个UI扩展,那么SCOW将会按照配置中的顺序依次调用每个需要重写导航项的UI扩展的此接口,并将上一个UI扩展的输出作为下一个UI扩展的输入,并将最终结果作为SCOW的导航项。 ### 增加导航栏链接:POST /api/\{portal,mis\}/navbarLinks @@ -128,7 +130,7 @@ SCOW在调用接口时,会将[上下文参数](#上下文参数)作为查询 | JSON属性路径 | 类型 | 是否必须 | 解释 | | ----------------------------- | -------- | -------- | ---------------------------------------------------------------------------------------------------------- | | `navbarLinks` | 对象数组 | 是 | 导航项 | -| `navbarLinks[].path` | 字符串 | 是 | 此导航项的路径,请参考上文**关于返回的路径的的说明** | +| `navbarLinks[].path` | 字符串 | 是 | 此导航项的路径,请参考下文**关于返回的路径的的说明** | | `navbarLinks[].text` | 字符串 | 是 | 导航项的文本 | | `navbarLinks[].icon` | 对象 | 否 | 导航项的图标信息。如果不填,将显示[Ant Design Icon](https://ant.design/components/icon-cn)的`LinkOutlined` | | `navbarLinks[].icon.src` | 图标URL | 是 | 导航项的图标地址。必须是完整的、可公开访问的URL | @@ -136,6 +138,19 @@ SCOW在调用接口时,会将[上下文参数](#上下文参数)作为查询 | `navbarLinks[].openInNewPage` | 布尔值 | 否 | 此导航项的页面是否在新窗口中打开,默认`true` | | `navbarLinks[].priority` | 数字 | 是 | 此链接的优先级。默认为0. | +#### 关于返回的路径的说明 + +- 如果返回的路径是一个有效的URL + - 检查方法:使用`new URL(输入)`,若不抛出异常则为有效的URL +- 则 + - 这个路径将会保留原状,直接写入为``标签的`href`属性 +- 否则 + - 此路径为相当于扩展UI的`/extensions`下的路径,即 + - 当系统采用单个UI扩展配置语法时,对应的导航项的路径为:`{SCOW URL}/extensions/{path}` + - 当系统采用多个个UI扩展配置语法时,对应的导航项的路径为:`{SCOW URL}/extensions/{name}/{path}` + +#### 多个UI扩展 + 如果配置了多个UI扩展,那么SCOW将会按照配置中的顺序依次调用每个需要增加导航栏链接的UI扩展的此接口,并将获得的所有链接按以下规则**从左到右**排列: - 优先级(`priority`)属性从大到小 @@ -143,7 +158,8 @@ SCOW在调用接口时,会将[上下文参数](#上下文参数)作为查询 - 返回链接的UI扩展在配置中的顺序从前往后 - 同一个UI扩展返回的链接在响应中的列表的顺序从前往后 -注意: +#### 其他注意事项 + - 当右上角导航栏链接数量**大于等于5个**,或者屏幕宽度小于**768px**时,所有导航栏链接将会仅显示图标。 ## 注意事项 diff --git a/libs/web/src/extensions/navigations.tsx b/libs/web/src/extensions/navigations.tsx index 8cda4ef5e9..a6ce70be56 100644 --- a/libs/web/src/extensions/navigations.tsx +++ b/libs/web/src/extensions/navigations.tsx @@ -80,6 +80,9 @@ export const toNavItemProps = ( const convertToMap = (navs: NavItemProps) => { originalItemsMap.set(navs.path, navs); + if (navs.clickToPath) { + originalItemsMap.set(navs.clickToPath, navs); + } navs.children?.forEach(convertToMap); };