import { ReactNode } from 'react'; /** * 系统类型 * @description 用于区分不同的系统类型(如:财险、农险) */ export interface SystemType { key: string; label: string; } /** * 登录表单值 */ export interface ProLoginValueType { username: string; password: string; verifyCode?: string; accountVerifyCode?: string; systemType?: string; autoLogin?: boolean; } /** * 修改密码表单值 */ export interface ProLoginModifyPWDType { nextPassword?: string; password?: string; reNextPassword?: string; username?: string; } /** * 注册表单值 */ export interface ProLoginRegisterValuesType { username: string; verifyCode?: string; password: string; rePassword: string; protocol?: boolean; inviteCode?: string; } /** * 登录类型名称 */ export type ProLoginTypeNameType = 'accountLogin' | 'quickLogin'; /** * 展示类型 */ export type ProLoginShowType = 'login' | 'register' | 'forgetPwd'; /** * 账户登录专属扩展配置 * @description 仅在 accountLogin 模式下生效 */ export interface AccountLoginConfigType { /** 用户名输入框占位文本 */ usernamePlaceholder?: string; /** 系统类型列表(如:财险、农险),以 Radio.Group 形式显示在表单顶部 */ systemTypes?: SystemType[]; /** 切换系统类型时的回调 */ onSwitchSystemType?: (systemType: string) => void; /** 账户登录模式下的额外扩展字段(原 accountLoginExtensions) */ extensions?: ReactNode; /** 是否需要图形验证码(原 hasAccountVerifyCode) */ verifyCode?: boolean; /** 验证码组件,作为 Input 的 addonAfter(原 accountVerifyCodeRender) */ verifyCodeRender?: ReactNode; } /** * 登录配置 * @description 控制登录方式、自动登录、二维码、第三方登录等登录层面的行为 */ export interface LoginConfigType { /** 支持的登录方式列表 */ loginType?: ProLoginTypeNameType[]; /** 默认激活的登录方式 */ defaultLoginType?: ProLoginTypeNameType; /** 是否显示"5天内自动登录" */ showAutoLogin?: boolean; /** 二维码图片 URL,传入后右上角出现扫码/表单切换入口 */ QRCode?: string; /** 第三方登录自定义渲染函数,渲染在登录按钮下方 */ thirdPartyLoginRender?: () => ReactNode; /** 切换登录方式回调 */ onSwitchLoginType?: (type: ProLoginTypeNameType) => void; /** 快速登录时获取短信验证码回调 */ onGetVerificationCode?: (username: string) => void; /** 滑块验证场景 ID,有值即开启登录场景的滑块验证 */ validateScene?: string; /** 账户登录专属扩展配置 */ accountLogin?: AccountLoginConfigType; } /** * 注册配置 * @description 传入此配置即代表开启注册入口(原 hasRegister=true) */ export interface RegisterConfigType { /** 注册方式(必填) */ type: 'phone' | 'email'; /** 用户已注册时显示跳转登录提示 */ registered?: boolean; /** 是否显示邀请码输入框 */ showInviteCode?: boolean; /** 自定义协议勾选内容 */ agreementRender?: ReactNode; /** 注册按钮回调 */ onRegister?: (formValue: ProLoginRegisterValuesType) => void; /** 注册时获取短信验证码回调 */ onGetVerificationCode?: (username: string) => void; /** 滑块验证场景 ID,有值即开启注册场景的滑块验证 */ validateScene?: string; } /** * 忘记密码配置 * @description 传入此配置即代表开启忘记密码入口(原 hasForgetPwd=true) */ export interface ForgetPwdConfigType { /** 找回密码方式 */ retrievePwdType?: ('phone' | 'email')[]; /** 下一步回调,返回 true 才进入重置密码步骤 */ onNextStep?: (formValue: any) => boolean; /** 确认修改回调,返回 true 才进入成功页 */ onUpdatePwd?: (formValue: any) => boolean | Promise; /** 找回密码时获取验证码回调 */ onGetVerificationCode?: (username: string) => void; /** 滑块验证场景 ID,有值即开启忘记密码场景的滑块验证 */ validateScene?: string; } /** * 修改密码配置 * @description 传入此配置即代表开启修改密码入口(原 hasModifyPWD=true) */ export interface ModifyPwdConfigType { /** 修改密码弹窗中的自定义表单(原 modifyPWDFormDom) */ formDom?: ReactNode; /** 控制修改密码弹窗中展示并参与校验的密码规则子集 */ passwordRuleKeys?: Array<'length' | 'letterAndNumber' | 'upperAndLower' | 'special'>; /** 弹窗确认回调,resolve 后弹窗关闭 */ onModifyPWD?: (formValue: ProLoginModifyPWDType) => Promise; } /** * ProLogin 组件属性 */ export interface ProLoginType { /** 系统名称 */ title: string; /** 系统简介 */ subTitle?: string; /** 企业 logo 图片 URL */ logo?: string; /** 头部公告 */ notice?: ReactNode | string; /** 是否显示返回按钮,点击返回上一个页面 */ showReturn?: boolean; /** 左侧区域自定义渲染,不传则展示默认视频背景 */ leftRender?: ReactNode; /** 全局加载状态,true 时 Spin 覆盖整个组件 */ spinning?: boolean; /** 后端返回的错误信息,展示在表单上方 */ errorMessage?: string; /** 初始显示页面:登录 / 注册 / 忘记密码 */ showType?: ProLoginShowType; /** 点击登录按钮回调(必填) */ onLogin: (formValue: ProLoginValueType) => void; /** 登录配置 */ loginConfig?: LoginConfigType; /** 注册配置(传入即开启注册入口) */ registerConfig?: RegisterConfigType; /** 忘记密码配置(传入即开启忘记密码入口) */ forgetPwdConfig?: ForgetPwdConfigType; /** 修改密码配置(传入即开启修改密码入口) */ modifyPwdConfig?: ModifyPwdConfigType; } /** * 用户信息 */ export interface ProLoginUserInfoType { userName: string; companyName?: string; custId?: string; token: string; orgCustId?: string; menu: []; } export type ProLoginProps = ProLoginType;