[主框架组件文档](/ecode/playground/doc/share/view/1022992915720224769)

[主框架SDK文档](/ecode/playground/doc/share/view/1183567561081184260)

[基础服务二开文档](/ecode/playground/doc/share/view/1023781106639618049)

[基础服务配置文档](/ecode/playground/doc/share/view/1183582498868387841)

# 登录注册部分

## 一、登录

### 登录请求后、退出登录前、切换团队前二开口子

基线版本支持：2024.0801+

完整代码示例

```
import { regOvProps } from '@weapp/utils';

let callback = () => { alert(2)} } 
//登录请求后 
regOvProps('weappPassportWeb', 'Login', (props) => {
  //pc登录
  window.weappPassportweb.PassportWebSDK.regHook("afterLoginRequest", callback)
  return {
    ...props
  }
})
regOvProps('weappPassportWeb', 'MLogin', (props) => {
  //移动登录
  window.weappPassportweb.PassportWebSDK.regHook("afterLoginRequestMobile", callback)
  return {
    ...props
  }
})
//注销钩子 
weappPassportweb.PassportWebSDK.unRegHook("afterLoginRequest", callback)

 //退出登录前 
window.ePassport.regHook("beforeLogout", () => {alert(2)})
window.ePassport.regHook("beforeLogoutMobile", () => {alert(2)}) 

//切换团队前 
weappLayout.LayoutSDK.regHook("beforeChangeTenant", callback) 
weappLayout.LayoutSDK.regHook("beforeChangeTenantMobile", callback) 
//注销钩子 
weappPassportweb.PassportWebSDK.unRegHook("afterLoginRequest", callback)

```

### 切换组织跳转指定地址

基线版本支持：2025.1001+

完整代码示例
```
import { regOvProps, regOvComponent } from '@weapp/utils';

regOvProps('weappLayout', 'TenantDrop', (props)=>{
  return {
    ...props,
    changeRedirectUrl: (tenant) => {
      console.log(tenant);
      return '/task'
    }
  }
})
```

### 切换组织跳转指定地址（移动端）

基线版本支持：2025.0501+

完整代码示例
```
import { regOvProps } from "@weapp/utils";

regOvProps("weappLayout", "MobTeamsFrame", (props) => {
  return {
    ...props,
    changeRedirectUrl: (tenant) => {
      return '/mobile/portal';
    }
  }
})
```

### 自定义登录

基线版本支持：2025.0701+

pc端：

```
import { regOvProps } from '@weapp/utils';

regOvProps('weappPassportWeb', 'Login', (props) => {
  return {
    ...props,
    customLogin: (loginParams, originLogin) => { //触发自定义登录
      alert("自定义登录触发事件");
      originLogin(loginParams);
    }
  }
})
```

移动端：

```
import { regOvProps } from '@weapp/utils';

regOvProps('weappPassportWeb', 'MLogin', (props) => {
  return {
    ...props,
    customLogin: (loginParams, originLogin) => { //触发自定义登录
      alert("自定义登录触发事件");
      originLogin(loginParams);
    }
  }
})
```

### 自定义登出

基线版本支持：2025.0801+

```
window.weappPassport?.passportSDK?.setCustomLogout((logout) => {
    //logout为原登出方法
    logout()
})
```

### 密码框后自定义渲染

```
import { regOvProps } from '@weapp/utils';

regOvProps('weappPassportWeb', 'Login', (props) => {
  return {
    ...props,
    customRenderAfterPwd: () => { //密码框后自定义渲染
      return <div>密码框后自定义渲染</div>
    }
  }
})
```

### 系统使用中登录超时事件

基线版本支持：2024.1201+

完整代码示例

```
import { regHook } from "@weapp/utils"

regHook('@weapp/utils','token-expire-hook', (params)=>{
   console.log("接口返回的结果",params.data);
   // 可以做额外操作
   // ..........
   
   // 当后续处理完毕之后 想要跳转会默认的过期失效的处理 可以直接调用对应回调函数
   params?.callback()
})
```

### 自定义登录标题区域

基线版本支持：2024.0801+

完整代码示例

```
import { regOvProps, getLabel } from '@weapp/utils';

regOvProps('weappPassportWeb', 'Login', (props)=>{
  return {
    ...props,
    ecodeLoginTitleCustomRender: () => {
    	return (
        <div>
         自定义标题
        </div>
      )
    }
  }
})
```

### 自定义登录按钮

基线版本支持：2024.1201+

完整代码示例

```
import { regOvProps } from '@weapp/utils';

regOvProps('weappPassportWeb', 'Login', (props) => {
  return {
    ...props,
    ecodePCLoginButtonCustomRender: (originButton) => {
      return <>
        {originButton}
        自定义内容
      </>
    }
  }
})
```

### PC登录自定义tab


基线版本支持：2024.0701、2024.0901+

完整代码示例

```
import { regOvProps } from "@weapp/utils";

regOvProps("weappPassportWeb", "Login", (props) => {
  return {
    ...props,
    customTab: [{
        id: 'login',
        content: '普通登录'
    }, {
        id: 'other',
        content: "自定义登录tab",
        customRender: () => {
            return (
              <div>自定义登录tab内容</div>
            )
        }
    }],
    customTabDefaultValue: 'login'
  }
})
```

### 登录页自定义注册和忘记密码跳转

基线版本支持：2024.1101+

```
import { regOvProps, regOvComponent } from "@weapp/utils";

regOvProps("weappPassportWeb", "Login", (props) => {
  return {
    ...props,
    customHandleSignUp: () => {
      window.location.href = 'https://www.baidu.com'
    },
    customHandleForgetPass: () => {
      window.location.href = 'https://www.baidu.com'
    }
  }
})
regOvProps("weappPassportWeb", "MLogin", (props) => {
  return {
    ...props,
    customHandleSignUp: () => {
      window.location.href = 'https://www.baidu.com'
    },
    customHandleForgetPass: () => {
      window.location.href = 'https://www.baidu.com'
    }
  }
})
```

### pc端登录框底部支持自定义渲染
基线版本支持：2024.1201+
```
import { regOvProps } from '@weapp/utils';

regOvProps('weappPassportWeb', 'Login', (props) => {
  props.customFooterRender = <div>测试自定义渲染底部</div>
  return props;
}, 0);
```

### 注册、忘记密码页面自定义返回登录页按钮逻辑

基线版本支持：2025.0801+

完整代码示例
```
window.e_customReturnLogin=()=>{
	//自定义返回登录页按钮逻辑，需要新建ecode应用，并发布为公共应用
}
```


# 主框架部分

## 一、导航


### 移动端应用列表过滤

基线版本支持：2024.0801+

完整代码示例

```
import { regOvProps } from "@weapp/utils";

regOvProps("weappLayout", "MobApplications", (props) => {
  window.weappLayout?.LayoutSDK.regAppMenuFilterMobile?.((menus) => {return menus.sort((group1, group2) => group1.categoryType === "portal" ? 1 : -1)})
  return props;
})
```

### 导航栏各个区域自定义渲染内容

基线版本支持：2024.0801+

完整代码示例

```
import { regOvProps, regOvComponent } from '@weapp/utils';

regOvProps('weappLayout', 'AppMainMenus', (props)=>{
  return {
    ...props,
    customRenderBeforePortal: () => {
    	return <div>门户前</div>
    },
    customRenderBeforeAppMenu: () => {
    	return <div>应用菜单前</div>
    },
    customRenderAfterAppMenu: () => {
    	return <div>应用菜单后</div>
    },
    customRenderAfterMoreApp: () => {
    	return <div>更多应用后</div>
    }
  }
})
```

### 导航更多应用常用菜单下自定义渲染

基线版本支持：2024.0801+

完整代码示例

```
import { regOvProps, regOvComponent } from '@weapp/utils';

regOvProps('weappLayout', 'AppDropMenus', (props)=>{
  return {
    ...props,
    customRenderDropMenusUnderFrequently: () => {
    	return <div>常用菜单下</div>;
    }
  }
})
```

### 导航应用菜单点击事件

基线版本支持：2024.1201+

完整代码示例

```
import { regOvProps } from "@weapp/utils";

regOvProps("weappLayout", "AppMenuItem", (props) => {
  let newProps = {...props};
  if(props.id === '2'){ //流程菜单
    newProps.customClick = (menuData, event, defaultClick, type) => {
      alert('流程菜单点击');
      defaultClick();
      let preventDefault = true;
      return preventDefault;
    }
  }
  return newProps;
})
```

### 导航纵向应用菜单隐藏浮动应用名称

基线版本支持：2025.0201+

```
```
import { regOvProps } from "@weapp/utils";

regOvProps("weappLayout", "AppMainMenus", (props) => {
  return {
  	...props,
    menuTipVisible: false
  };
})
```
```

### 导航右侧菜单自定义点击

基线版本支持：2024.1201+

完整代码示例

```
import { regOvProps } from "@weapp/utils";

regOvProps("weappLayout", "Main", (props: any) => {
  return {
    ...props,
    afterNavMenuLoaded: (data) => {
      const { mainMenus, moreNavMenus, navMenus } = data;
      return {
        ...data,
        //右侧下拉工具菜单
        moreNavMenus: moreNavMenus.map((item) => {
          if (item.menuKey === 'quick_logout') {
            item.customClick = (originClick) => {	//自定义点击
              //do something
              originClick(item);
            }
          }
          return item;
        })
      }
    }
  }
})
```

### 导航应用、更多应用、右侧工具菜单同步过滤

基线版本支持：2025.0301+

完整代码示例

同步方式：

```
import { regOvProps } from "@weapp/utils";

regOvProps("weappLayout", "Main", (props: any) => {
  return {
    ...props,

    //导航应用菜单加载过滤
    afterNavAppMemuLoaded: (data) => data.filter((menu) => {
      return menu.id !== '55'  //导航上应用菜单过滤 我的人事
    }),

    //导航更多应用菜单加载过滤
    afterAllAppMemuLoaded: (data) => {

      //更多应用菜单过滤流程应用示例
      let newData = [];
      data?.forEach?.((column: any) => {  //应用列
        let newColumn = [];
        column?.forEach?.((group: any) => { //应用分组
          let newMenus = [];
          group?.menus?.forEach?.((item: any) => {  //应用项
            if (item.id !== '2') {  //流程菜单
              newMenus.push(item);
            }
          })
          newColumn.push({
            ...group,
            menus: newMenus
          })
        })
        newData.push(newColumn);
      })
      return newData;
    },

    //导航右侧工具菜单加载过滤
    afterNavMenuLoaded: (data) => {
      const { mainMenus, moreNavMenus, navMenus } = data;
      const tenantKey = window.TEAMS.currentTenant.tenantKey;   //用户租户key
      const employeeId = window.TEAMS.currentUser.employeeId;   //用户employeeId
      return {
        //主导航菜单（工作消息、门户、更多应用）
        mainMenus: mainMenus.filter((item) => {
          return true
        }),
        //右侧导航工具菜单
        navMenus: navMenus.filter((item) => {
          //指定租户用户过滤导航上快捷新建菜单示例
          if (tenantKey === 'tk8p2813sq' && employeeId === '3086530165433350813') {
            if (item.menuKey === 'quick_create') {
              return false;
            }
          }
          return true
        }),
        //右侧下拉工具菜单
        moreNavMenus: moreNavMenus.filter((item) => {
          //指定租户用户过滤语言菜单示例
          if (tenantKey === 'tk8p2813sq' && employeeId === '3086530165433350813') {
            if (item.menuKey === 'quick_lanset') {
              return false;
            }
          }
          return true
        }),
      }
    }
  }
})
```

异步方式：

```
import { regOvProps } from "@weapp/utils";

regOvProps("weappLayout", "Main", (props: any) => {
  return {
    ...props,

    //导航应用菜单加载过滤
    afterNavAppMemuLoaded: (data) => new Promise((resolve, reject) => {
      resolve(data.filter((menu) => {
        return menu.id !== '55'  //导航上应用菜单过滤 我的人事
      }));
    }),

    //导航更多应用菜单加载过滤
    afterAllAppMemuLoaded: (data) => new Promise((resolve, reject) => {
      //更多应用菜单过滤流程应用示例
      let newData = [];
      data?.forEach?.((column: any) => {  //应用列
        let newColumn = [];
        column?.forEach?.((group: any) => { //应用分组
          let newMenus = [];
          group?.menus?.forEach?.((item: any) => {  //应用项
            if (item.id !== '2') {  //流程菜单
              newMenus.push(item);
            }
          })
          newColumn.push({
            ...group,
            menus: newMenus
          })
        })
        newData.push(newColumn);
      })
      resolve(newData);
    }),

    //导航右侧工具菜单加载过滤
    afterNavMenuLoaded: (data) => new Promise((resolve, reject) => {
      const { mainMenus, moreNavMenus, navMenus } = data;
      const tenantKey = window.TEAMS.currentTenant.tenantKey;   //用户租户key
      const employeeId = window.TEAMS.currentUser.employeeId;   //用户employeeId
      resolve({
        //主导航菜单（工作消息、门户、更多应用）
        mainMenus: mainMenus.filter((item) => {
          return true
        }),
        //右侧导航工具菜单
        navMenus: navMenus.filter((item) => {
          //指定租户用户过滤导航上快捷新建菜单示例
          if (tenantKey === 'tk8p2813sq' && employeeId === '3086530165433350813') {
            if (item.menuKey === 'quick_create') {
              return false;
            }
          }
          return true
        }),
        //右侧下拉工具菜单
        moreNavMenus: moreNavMenus.filter((item) => {
          //指定租户用户过滤语言菜单示例
          if (tenantKey === 'tk8p2813sq' && employeeId === '3086530165433350813') {
            if (item.menuKey === 'quick_lanset') {
              return false;
            }
          }
          return true
        }),
      });
    }),
  }
})
```

### 导航工具菜单各个区域自定义渲染

基线版本支持：2024.0801+

完整代码示例

```
import { regOvProps, regOvComponent } from '@weapp/utils';

regOvProps('weappLayout', 'QuickToolbar', (props)=>{
 return {
  ...props,
  customRenderBeforeQuickMenu: ()=> {
  	return <div>菜单前</div>;
  },
  customRenderAfterQuickMenu: () => {
  	return <div>菜单后</div>;
  },
  customRenderQuickToolBarIcon: (menuItem, menuCom) => {	//菜单图标自定义
    return <div>
      <div>自定义内容</div>
      {menuCom}
    </div>;
  },
 }
})
```

### 导航工具单个菜单自定义渲染

基线版本支持：2024.1201+

完整代码示例

```
import { regOvProps } from "@weapp/utils";

regOvProps("weappLayout", "Main", (props: any) => {
  return {
    ...props,
    afterNavMenuLoadedSync: (data) => new Promise((resolve, reject) => {
      const { moreNavMenus } = data;
      resolve({
        ...data,
        //下拉工具菜单自定义渲染
        moreNavMenus: moreNavMenus.map((item) => {
          return {
            ...item,
            ...(item.menuKey === 'quick_lanset' ? {
              customTriggerPopup: () => {
                return <div>
                  自定义下拉内容
                </div>
              }
            } : {}),
            ...(item.menuKey === 'quick_changePass' ? {
              customRender: () => {
                return <div>自定义渲染内容</div>
              }
            } : {}),
          }
        }),
      });
    }),
  }
})
```

### 导航待办下拉菜单自定义渲染

基线版本支持：2025.0701+

完整代码示例

```
import { regOvProps } from "@weapp/utils";

regOvProps("weappLayout", "CountTab", (props: any) => {
  return {
    ...props,
    getMenus: (orginMenus) => {
      let newMenus = [];
      newMenus = orginMenus.filter((item) => { return item.id !== 'tag' })  //过滤标签菜单
      //新增自定义菜单
      newMenus.push({
        id: 'test',
        name: '新增菜单',
        value: 10,
        icon: 'Icon-label02',
        color: '#24CEF6',
        link: '/task'
      })
      return newMenus;
    }
  }
});
```

### 导航应用点击不记录常用应用

基线版本支持：2024.1201+

完整代码示例

```
import { regOvProps } from "@weapp/utils";

regOvProps("weappLayout", "AppMenuItem", (props) => {
  return {
    ...props,
    disableCommonAppReqeust: true //常用应用点击不记录
  };
})
```

### 应用点击不记住上次打开应用

基线版本支持：2024.1201+

完整代码示例

```
import { regOvProps } from "@weapp/utils";

regOvProps("weappLayout", "AppMenuItem", (props) => {
  return {
    ...props,
    disableRememeberLastApp: true //点击应用不记住上次打开应用
  };
})
```

### 导航禁用快捷搜索&延时渲染

基线版本支持：2024.0901+

完整代码示例

```
import { regOvProps, regOvComponent } from '@weapp/utils';

regOvProps('weappLayout', 'Navigation', (props)=>{
 return {
  ...props,
  disableQuickSearch: true,
  quickSearchDelay: 5000  //延时5000ms
 }
})
```

### 导航工具栏延时渲染

基线版本支持：2024.0901+

完整代码示例

```
import { regOvProps, regOvComponent } from '@weapp/utils';

regOvProps('weappLayout', 'Navigation', (props)=>{
 return {
  ...props,
  quickToolDelay: 5000  //延时5000ms
 }
})
```

### 外部身份切换禁用&延时

基线版本支持：2024.0901+

完整代码示例

```
import { regOvProps, regOvComponent } from '@weapp/utils';

regOvProps('weappLayout', 'AccountInfo', (props)=>{
 return {
  ...props,
  externalDisable: false,
  externalDelay: 5000, //默认3000ms
 }
})
```

### license提醒禁用&延时

基线版本支持：2024.0901+

完整代码示例

```
import { regOvProps, regOvComponent } from '@weapp/utils';

regOvProps('weappLayout', 'MainDialogs', (props)=>{
 return {
  ...props,
  licenseRemindDisable: false,
  licenseRemindDelay: 5000, //默认3000ms
 }
})
```


## 二、其他


### 用户首次登录通过修改props跳过引导
基线版本支持：2024.1201+
```
import { regOvProps } from '@weapp/utils';
regOvProps("weappLayout", "PortalIntro", (props:any) => {
  return {
    ...props,
    disabledIntro: true
  }
})
```

### nacos配置登陆后跳转地址

基线版本支持：2024.1201+

nacos配置：

组合走nacos配置，修改完重启base，单体修改以下配置文件后重启项目
e10-server0/E10/webapps/ROOT/WEB-INF/classes/weaver/config/config-center/weaver-common-cas-core.properties

添加配置：
weaver.cas.base.custom.config={"weappRedirectTenantConfig": [{"tenantKey": "tv8aaml2rj","employeeId": "","device": "pc","url": "/task", "cusurl": "${window.TEAMS?.currentUser?.id === '1' ? '/task' : ''}"}]}

### nacos配置退出登录地址

基线版本支持：2024.1201+

添加配置：weaver.cas.base.custom.config

注：需要是标准json字符串

示例1：通过condition参数配置pc客户端退出到指定自定义登录页

```
weaver.cas.base.custom.config={"weappLogoutRedirectConfig": [{"condition": "window.navigator.userAgent.indexOf(\"weapp-pc\")>-1","device": "pc","url": "https://passport.mulinquan.cn/customlogin/323232","tenantKey": "all_teams"}]}
```


示例2：通过url参数配置pc客户端退出到指定自定义登录页

```
weaver.cas.base.custom.config={"weappLogoutRedirectConfig": [{"device": "pc","cusurl": "(function(){if(window.navigator.userAgent.indexOf(\"weapp-pc\")===-1){return \"https://passport.mulinquan.cn/customlogin/323232\"}else{return \"\"}})()","tenantKey": "all_teams"}]}
```

### nacos配置指定主题


基线版本支持：2024.1201+

添加配置：

1、组合环境
nacos添加：
weaver.cas.base.custom.config={"pointTopicId":"指定主题id"}
配置添加完成后重启base服务

2、单体环境
服务器上修改weaver-common-cas-core配置文件(e10-server0/E10/webapps/ROOT/WEB-INF/classes/weaver/config/config-center/weaver-common-cas-core.properties)，添加：
weaver.cas.base.custom.config={"pointTopicId":"指定主题id"}

### 禁用插件

基线版本支持：2024.1201+

```
import { regOvProps } from "@weapp/utils";

regOvProps("weappLayout", "Main", (props) => {
  return {
    ...props,
    disablePlugin: true
  }
})
```

### 插件支持单个插件延时

基线版本支持：2024.1201+

```
axios.interceptors.response.use(
  response => {
    if(response.config.url.indexOf('/api/basicserver/topicPlugin/qryPluginListOfEmp') !== -1){   //团队列表接口
       response.data.data = response.data.data?.map((item) => {
       	return {
        	...item,
          ...(item.compName === 'BirthdayReminderDialog' ? {
          	delayTime: '1000' //单位ms
          } : {})
        }
       })
    }
 
    return response;
  },
  error => {
    return Promise.reject(error);
  }
);
```

### 主框架下设置浏览器标题

```
import { regOvProps } from "@weapp/utils";

regOvProps("weappLayout", "Main", (props: any) => {
	window.weappLayout.layoutTitle = '标题';
  return props;
})
```

### 客户端设置可拖拽区域
```
let style = document.createElement("style");
style.type='text/css';
style.innerHTML='.weapp-em-component-dragdrop-area{-webkit-app-region: drag}';
document.body.append(style);
```

### 移动端app自定义jsapi参数

基线版本支持：2025.0701+

完整代码示例

```
import {regOvProps} from "@weapp/utils";
regOvProps('weappPassportWeb', 'MLogin', (props)=>{
  return {
    ...props,
    customAppLoginParams: (params) => {
      let newParams = {...params};
      delete newParams.username;
      delete newParams.password;
      return newParams
    }
  }
})
```