邮箱后缀字段名调整

This commit is contained in:
wkj 2025-05-07 09:39:57 +08:00
parent 11962700ff
commit 719b225227
17 changed files with 77 additions and 77 deletions

View File

@ -589,11 +589,11 @@ export async function loginByAccount(params, context) {
// const config = applicationPassport.passport.config as EmailConfig; // const config = applicationPassport.passport.config as EmailConfig;
// const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account); // const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
// assert(emailConfig); // assert(emailConfig);
// const emailSuffix = config.emailSuffix; // const emailSuffixes = config.emailSuffixes;
// // 检查邮箱后缀是否满足配置 // // 检查邮箱后缀是否满足配置
// if (emailSuffix?.length! > 0) { // if (emailSuffixes?.length! > 0) {
// let isValid = false; // let isValid = false;
// for (const suffix of emailSuffix!) { // for (const suffix of emailSuffixes!) {
// if (account.endsWith(suffix)) { // if (account.endsWith(suffix)) {
// isValid = true; // isValid = true;
// break; // break;
@ -1002,11 +1002,11 @@ export async function loginByEmail(params, context) {
const config = applicationPassport.passport.config; const config = applicationPassport.passport.config;
const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account); const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
assert(emailConfig); assert(emailConfig);
const emailSuffix = config.emailSuffix; const emailSuffixes = config.emailSuffixes;
// 检查邮箱后缀是否满足配置 // 检查邮箱后缀是否满足配置
if (emailSuffix?.length > 0) { if (emailSuffixes?.length > 0) {
let isValid = false; let isValid = false;
for (const suffix of emailSuffix) { for (const suffix of emailSuffixes) {
if (email.endsWith(suffix)) { if (email.endsWith(suffix)) {
isValid = true; isValid = true;
break; break;
@ -1255,11 +1255,11 @@ export async function bindByEmail(params, context) {
const config = applicationPassport.passport.config; const config = applicationPassport.passport.config;
const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account); const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
assert(emailConfig); assert(emailConfig);
const emailSuffix = config.emailSuffix; const emailSuffixes = config.emailSuffixes;
// 检查邮箱后缀是否满足配置 // 检查邮箱后缀是否满足配置
if (emailSuffix?.length > 0) { if (emailSuffixes?.length > 0) {
let isValid = false; let isValid = false;
for (const suffix of emailSuffix) { for (const suffix of emailSuffixes) {
if (email.endsWith(suffix)) { if (email.endsWith(suffix)) {
isValid = true; isValid = true;
break; break;
@ -2193,11 +2193,11 @@ export async function sendCaptchaByEmail({ email, env, type: captchaType, }, con
const duration = config.codeDuration || 5; const duration = config.codeDuration || 5;
const digit = config.digit || 4; const digit = config.digit || 4;
const mockSend = config.mockSend; const mockSend = config.mockSend;
const emailSuffix = config.emailSuffix; const emailSuffixes = config.emailSuffixes;
// 检查邮箱后缀是否满足配置 // 检查邮箱后缀是否满足配置
if (emailSuffix?.length > 0) { if (emailSuffixes?.length > 0) {
let isValid = false; let isValid = false;
for (const suffix of emailSuffix) { for (const suffix of emailSuffixes) {
if (email.endsWith(suffix)) { if (email.endsWith(suffix)) {
isValid = true; isValid = true;
break; break;

View File

@ -1,7 +1,7 @@
import { Style } from '../../../../types/Style'; import { Style } from '../../../../types/Style';
declare const _default: (props: import("oak-frontend-base").ReactComponentProps<import("../../../../oak-app-domain").EntityDict, keyof import("../../../../oak-app-domain").EntityDict, false, { declare const _default: (props: import("oak-frontend-base").ReactComponentProps<import("../../../../oak-app-domain").EntityDict, keyof import("../../../../oak-app-domain").EntityDict, false, {
style: Style; style: Style;
entity: "platform" | "system" | "application"; entity: "system" | "platform" | "application";
entityId: string; entityId: string;
name: string; name: string;
}>) => React.ReactElement; }>) => React.ReactElement;

View File

@ -1,7 +1,7 @@
import { Config } from '../../../types/Config'; import { Config } from '../../../types/Config';
declare const _default: (props: import("oak-frontend-base").ReactComponentProps<import("../../../oak-app-domain").EntityDict, keyof import("../../../oak-app-domain").EntityDict, false, { declare const _default: (props: import("oak-frontend-base").ReactComponentProps<import("../../../oak-app-domain").EntityDict, keyof import("../../../oak-app-domain").EntityDict, false, {
config: Config; config: Config;
entity: "platform" | "system"; entity: "system" | "platform";
name: string; name: string;
entityId: string; entityId: string;
}>) => React.ReactElement; }>) => React.ReactElement;

View File

@ -15,19 +15,19 @@ declare const _default: <ED2 extends EntityDict & BaseEntityDict, T2 extends key
type?: ButtonProps['type'] | AmButtonProps['type']; type?: ButtonProps['type'] | AmButtonProps['type'];
executeText?: string | undefined; executeText?: string | undefined;
buttonProps?: (ButtonProps & { buttonProps?: (ButtonProps & {
color?: "default" | "primary" | "success" | "warning" | "danger" | undefined; color?: "default" | "success" | "warning" | "primary" | "danger" | undefined;
fill?: "none" | "solid" | "outline" | undefined; fill?: "none" | "solid" | "outline" | undefined;
size?: "small" | "large" | "middle" | "mini" | undefined; size?: "small" | "middle" | "large" | "mini" | undefined;
block?: boolean | undefined; block?: boolean | undefined;
loading?: boolean | "auto" | undefined; loading?: boolean | "auto" | undefined;
loadingText?: string | undefined; loadingText?: string | undefined;
loadingIcon?: import("react").ReactNode; loadingIcon?: import("react").ReactNode;
disabled?: boolean | undefined; disabled?: boolean | undefined;
onClick?: ((event: import("react").MouseEvent<HTMLButtonElement, MouseEvent>) => unknown) | undefined; onClick?: ((event: import("react").MouseEvent<HTMLButtonElement, MouseEvent>) => unknown) | undefined;
type?: "reset" | "submit" | "button" | undefined; type?: "button" | "reset" | "submit" | undefined;
shape?: "default" | "rounded" | "rectangular" | undefined; shape?: "default" | "rounded" | "rectangular" | undefined;
children?: import("react").ReactNode; children?: import("react").ReactNode;
} & Pick<import("react").ClassAttributes<HTMLButtonElement> & import("react").ButtonHTMLAttributes<HTMLButtonElement>, "id" | "onMouseUp" | "onMouseDown" | "onTouchStart" | "onTouchEnd"> & { } & Pick<import("react").ClassAttributes<HTMLButtonElement> & import("react").ButtonHTMLAttributes<HTMLButtonElement>, "id" | "onMouseDown" | "onMouseUp" | "onTouchEnd" | "onTouchStart"> & {
className?: string | undefined; className?: string | undefined;
style?: (import("react").CSSProperties & Partial<Record<"--text-color" | "--background-color" | "--border-radius" | "--border-width" | "--border-style" | "--border-color", string>>) | undefined; style?: (import("react").CSSProperties & Partial<Record<"--text-color" | "--background-color" | "--border-radius" | "--border-width" | "--border-style" | "--border-color", string>>) | undefined;
tabIndex?: number | undefined; tabIndex?: number | undefined;

View File

@ -6,8 +6,8 @@ import { Editor, Toolbar } from "@wangeditor/editor-for-react";
import { PlusOutlined, CloseOutlined } from '@ant-design/icons'; import { PlusOutlined, CloseOutlined } from '@ant-design/icons';
const { TextArea } = Input; const { TextArea } = Input;
const { Text } = Typography; const { Text } = Typography;
function RenderEmailSuffix(props) { function RenderEmailSuffixes(props) {
const { emailSuffix, onChange, t } = props; const { emailSuffixes, onChange, t } = props;
const [inputVisible, setInputVisible] = useState(false); const [inputVisible, setInputVisible] = useState(false);
const [inputValue, setInputValue] = useState(''); const [inputValue, setInputValue] = useState('');
const inputRef = useRef(null); const inputRef = useRef(null);
@ -25,21 +25,21 @@ function RenderEmailSuffix(props) {
setInputValue(e.target.value); setInputValue(e.target.value);
}; };
const handleInputConfirm = () => { const handleInputConfirm = () => {
if (inputValue && !emailSuffix?.includes(inputValue)) { if (inputValue && !emailSuffixes?.includes(inputValue)) {
onChange([...emailSuffix || [], inputValue]); onChange([...emailSuffixes || [], inputValue]);
} }
setInputVisible(false); setInputVisible(false);
setInputValue(''); setInputValue('');
}; };
const handleClose = (removedTag) => { const handleClose = (removedTag) => {
const emailSuffix2 = emailSuffix.filter((tag) => tag !== removedTag); const emailSuffixes2 = emailSuffixes.filter((tag) => tag !== removedTag);
onChange(emailSuffix2); onChange(emailSuffixes2);
}; };
const showInput = () => { const showInput = () => {
setInputVisible(true); setInputVisible(true);
}; };
return (<Flex gap="4px 0" wrap="wrap"> return (<Flex gap="4px 0" wrap="wrap">
{(emailSuffix || []).map((tag, index) => { {(emailSuffixes || []).map((tag, index) => {
const isLongTag = tag.length > 20; const isLongTag = tag.length > 20;
const tagElem = (<Tag closeIcon={<CloseOutlined />} key={tag} onClose={() => handleClose(tag)}> const tagElem = (<Tag closeIcon={<CloseOutlined />} key={tag} onClose={() => handleClose(tag)}>
<span> <span>
@ -66,7 +66,7 @@ export default function Email(props) {
const [html, setHtml] = useState(config?.html || ''); const [html, setHtml] = useState(config?.html || '');
const [emailCodeDuration, setEmailCodeDuration] = useState(config?.codeDuration || ''); const [emailCodeDuration, setEmailCodeDuration] = useState(config?.codeDuration || '');
const [emailDigit, setEmailDigit] = useState(config?.digit || ''); const [emailDigit, setEmailDigit] = useState(config?.digit || '');
const [emailSuffix, setEmailSuffix] = useState(config?.emailSuffix || []); const [emailSuffixes, setEmailSuffixes] = useState(config?.emailSuffixes || []);
// editor 实例 // editor 实例
const [editor, setEditor] = useState(null); // TS 语法 const [editor, setEditor] = useState(null); // TS 语法
// 工具栏配置 // 工具栏配置
@ -91,7 +91,7 @@ export default function Email(props) {
setHtml(config?.html || ''); setHtml(config?.html || '');
setEmailCodeDuration(config?.codeDuration || ''); setEmailCodeDuration(config?.codeDuration || '');
setEmailDigit(config?.digit || ''); setEmailDigit(config?.digit || '');
setEmailSuffix(config?.emailSuffix || []); setEmailSuffixes(config?.emailSuffixes || []);
if (config?.html) { if (config?.html) {
setEContentType('html'); setEContentType('html');
} }
@ -205,9 +205,9 @@ export default function Email(props) {
}}/> }}/>
</Form.Item> </Form.Item>
<Form.Item label="邮箱后缀" tooltip="允许的邮箱后缀(如: qq.com不填则不校验"> <Form.Item label="邮箱后缀" tooltip="允许的邮箱后缀(如: qq.com不填则不校验">
<RenderEmailSuffix t={t} emailSuffix={emailSuffix} onChange={(v) => { <RenderEmailSuffixes t={t} emailSuffixes={emailSuffixes} onChange={(v) => {
if (v !== config?.emailSuffix) { if (v !== config?.emailSuffixes) {
updateConfig(id, config, 'emailSuffix', v, 'email'); updateConfig(id, config, 'emailSuffixes', v, 'email');
} }
}}/> }}/>
</Form.Item> </Form.Item>

View File

@ -1,6 +1,6 @@
import { EntityDict } from '../../../oak-app-domain'; import { EntityDict } from '../../../oak-app-domain';
declare const _default: (props: import("oak-frontend-base").ReactComponentProps<EntityDict, keyof EntityDict, false, { declare const _default: (props: import("oak-frontend-base").ReactComponentProps<EntityDict, keyof EntityDict, false, {
type: "login" | "bind"; type: "bind" | "login";
url: string; url: string;
size: undefined; size: undefined;
}>) => React.ReactElement; }>) => React.ReactElement;

View File

@ -18,7 +18,7 @@ export type EmailConfig = {
html?: string; html?: string;
codeDuration?: number; codeDuration?: number;
digit?: number; digit?: number;
emailSuffix?: string[]; emailSuffixes?: string[];
}; };
export type PfwConfig = { export type PfwConfig = {
appId: string; appId: string;

View File

@ -19,7 +19,7 @@ export type EmailConfig = {
html?: string; html?: string;
codeDuration?: number; codeDuration?: number;
digit?: number; digit?: number;
emailSuffix?: string[]; emailSuffixes?: string[];
}; };
export type PfwConfig = { export type PfwConfig = {
appId: string; appId: string;

View File

@ -1,2 +1,2 @@
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "system", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "passport", import("..").BRC<import("../oak-app-domain").EntityDict>>)[]; declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "system", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "passport", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
export default _default; export default _default;

View File

@ -595,11 +595,11 @@ async function loginByAccount(params, context) {
// const config = applicationPassport.passport.config as EmailConfig; // const config = applicationPassport.passport.config as EmailConfig;
// const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account); // const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
// assert(emailConfig); // assert(emailConfig);
// const emailSuffix = config.emailSuffix; // const emailSuffixes = config.emailSuffixes;
// // 检查邮箱后缀是否满足配置 // // 检查邮箱后缀是否满足配置
// if (emailSuffix?.length! > 0) { // if (emailSuffixes?.length! > 0) {
// let isValid = false; // let isValid = false;
// for (const suffix of emailSuffix!) { // for (const suffix of emailSuffixes!) {
// if (account.endsWith(suffix)) { // if (account.endsWith(suffix)) {
// isValid = true; // isValid = true;
// break; // break;
@ -1009,11 +1009,11 @@ async function loginByEmail(params, context) {
const config = applicationPassport.passport.config; const config = applicationPassport.passport.config;
const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account); const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
(0, assert_1.assert)(emailConfig); (0, assert_1.assert)(emailConfig);
const emailSuffix = config.emailSuffix; const emailSuffixes = config.emailSuffixes;
// 检查邮箱后缀是否满足配置 // 检查邮箱后缀是否满足配置
if (emailSuffix?.length > 0) { if (emailSuffixes?.length > 0) {
let isValid = false; let isValid = false;
for (const suffix of emailSuffix) { for (const suffix of emailSuffixes) {
if (email.endsWith(suffix)) { if (email.endsWith(suffix)) {
isValid = true; isValid = true;
break; break;
@ -1264,11 +1264,11 @@ async function bindByEmail(params, context) {
const config = applicationPassport.passport.config; const config = applicationPassport.passport.config;
const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account); const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
(0, assert_1.assert)(emailConfig); (0, assert_1.assert)(emailConfig);
const emailSuffix = config.emailSuffix; const emailSuffixes = config.emailSuffixes;
// 检查邮箱后缀是否满足配置 // 检查邮箱后缀是否满足配置
if (emailSuffix?.length > 0) { if (emailSuffixes?.length > 0) {
let isValid = false; let isValid = false;
for (const suffix of emailSuffix) { for (const suffix of emailSuffixes) {
if (email.endsWith(suffix)) { if (email.endsWith(suffix)) {
isValid = true; isValid = true;
break; break;
@ -2210,11 +2210,11 @@ async function sendCaptchaByEmail({ email, env, type: captchaType, }, context) {
const duration = config.codeDuration || 5; const duration = config.codeDuration || 5;
const digit = config.digit || 4; const digit = config.digit || 4;
const mockSend = config.mockSend; const mockSend = config.mockSend;
const emailSuffix = config.emailSuffix; const emailSuffixes = config.emailSuffixes;
// 检查邮箱后缀是否满足配置 // 检查邮箱后缀是否满足配置
if (emailSuffix?.length > 0) { if (emailSuffixes?.length > 0) {
let isValid = false; let isValid = false;
for (const suffix of emailSuffix) { for (const suffix of emailSuffixes) {
if (email.endsWith(suffix)) { if (email.endsWith(suffix)) {
isValid = true; isValid = true;
break; break;

View File

@ -18,7 +18,7 @@ export type EmailConfig = {
html?: string; html?: string;
codeDuration?: number; codeDuration?: number;
digit?: number; digit?: number;
emailSuffix?: string[]; emailSuffixes?: string[];
}; };
export type PfwConfig = { export type PfwConfig = {
appId: string; appId: string;

View File

@ -19,7 +19,7 @@ export type EmailConfig = {
html?: string; html?: string;
codeDuration?: number; codeDuration?: number;
digit?: number; digit?: number;
emailSuffix?: string[]; emailSuffixes?: string[];
}; };
export type PfwConfig = { export type PfwConfig = {
appId: string; appId: string;

View File

@ -1,2 +1,2 @@
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "system", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "passport", import("..").BRC<import("../oak-app-domain").EntityDict>>)[]; declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "system", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "passport", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
export default _default; export default _default;

View File

@ -14,7 +14,7 @@ export declare function createToDo<ED extends EntityDict & BaseEntityDict, T ext
redirectTo: EntityDict['toDo']['OpSchema']['redirectTo']; redirectTo: EntityDict['toDo']['OpSchema']['redirectTo'];
entity: any; entity: any;
entityId: string; entityId: string;
}, userIds?: string[]): Promise<0 | 1>; }, userIds?: string[]): Promise<1 | 0>;
/** /**
* todo例程entity对象上进行action操作时filtertodo完成 * todo例程entity对象上进行action操作时filtertodo完成
* entity的action的后trigger中调用 * entity的action的后trigger中调用

View File

@ -791,12 +791,12 @@ export async function loginByAccount<ED extends EntityDict>(
// const config = applicationPassport.passport.config as EmailConfig; // const config = applicationPassport.passport.config as EmailConfig;
// const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account); // const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
// assert(emailConfig); // assert(emailConfig);
// const emailSuffix = config.emailSuffix; // const emailSuffixes = config.emailSuffixes;
// // 检查邮箱后缀是否满足配置 // // 检查邮箱后缀是否满足配置
// if (emailSuffix?.length! > 0) { // if (emailSuffixes?.length! > 0) {
// let isValid = false; // let isValid = false;
// for (const suffix of emailSuffix!) { // for (const suffix of emailSuffixes!) {
// if (account.endsWith(suffix)) { // if (account.endsWith(suffix)) {
// isValid = true; // isValid = true;
// break; // break;
@ -1269,12 +1269,12 @@ export async function loginByEmail<ED extends EntityDict>(
const config = applicationPassport.passport.config as EmailConfig; const config = applicationPassport.passport.config as EmailConfig;
const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account); const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
assert(emailConfig); assert(emailConfig);
const emailSuffix = config.emailSuffix; const emailSuffixes = config.emailSuffixes;
// 检查邮箱后缀是否满足配置 // 检查邮箱后缀是否满足配置
if (emailSuffix?.length! > 0) { if (emailSuffixes?.length! > 0) {
let isValid = false; let isValid = false;
for (const suffix of emailSuffix!) { for (const suffix of emailSuffixes!) {
if (email.endsWith(suffix)) { if (email.endsWith(suffix)) {
isValid = true; isValid = true;
break; break;
@ -1592,12 +1592,12 @@ export async function bindByEmail<ED extends EntityDict>(
const config = applicationPassport.passport.config as EmailConfig; const config = applicationPassport.passport.config as EmailConfig;
const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account); const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
assert(emailConfig); assert(emailConfig);
const emailSuffix = config.emailSuffix; const emailSuffixes = config.emailSuffixes;
// 检查邮箱后缀是否满足配置 // 检查邮箱后缀是否满足配置
if (emailSuffix?.length! > 0) { if (emailSuffixes?.length! > 0) {
let isValid = false; let isValid = false;
for (const suffix of emailSuffix!) { for (const suffix of emailSuffixes!) {
if (email.endsWith(suffix)) { if (email.endsWith(suffix)) {
isValid = true; isValid = true;
break; break;
@ -2900,12 +2900,12 @@ export async function sendCaptchaByEmail<ED extends EntityDict>(
const duration = config.codeDuration || 5; const duration = config.codeDuration || 5;
const digit = config.digit || 4; const digit = config.digit || 4;
const mockSend = config.mockSend; const mockSend = config.mockSend;
const emailSuffix = config.emailSuffix; const emailSuffixes = config.emailSuffixes;
// 检查邮箱后缀是否满足配置 // 检查邮箱后缀是否满足配置
if (emailSuffix?.length! > 0) { if (emailSuffixes?.length! > 0) {
let isValid = false; let isValid = false;
for (const suffix of emailSuffix!) { for (const suffix of emailSuffixes!) {
if (email.endsWith(suffix)) { if (email.endsWith(suffix)) {
isValid = true; isValid = true;
break; break;

View File

@ -11,12 +11,12 @@ import { PlusOutlined, CloseOutlined } from '@ant-design/icons';
const { TextArea } = Input; const { TextArea } = Input;
const { Text } = Typography; const { Text } = Typography;
function RenderEmailSuffix(props: { function RenderEmailSuffixes(props: {
emailSuffix?: string[]; emailSuffixes?: string[];
onChange: (v: string[]) => void; onChange: (v: string[]) => void;
t: (k: string) => string; t: (k: string) => string;
}) { }) {
const { emailSuffix, onChange, t } = props; const { emailSuffixes, onChange, t } = props;
const [inputVisible, setInputVisible] = useState(false); const [inputVisible, setInputVisible] = useState(false);
const [inputValue, setInputValue] = useState(''); const [inputValue, setInputValue] = useState('');
const inputRef = useRef<InputRef>(null); const inputRef = useRef<InputRef>(null);
@ -38,16 +38,16 @@ function RenderEmailSuffix(props: {
}; };
const handleInputConfirm = () => { const handleInputConfirm = () => {
if (inputValue && !emailSuffix?.includes(inputValue)) { if (inputValue && !emailSuffixes?.includes(inputValue)) {
onChange([...emailSuffix || [], inputValue]); onChange([...emailSuffixes || [], inputValue]);
} }
setInputVisible(false); setInputVisible(false);
setInputValue(''); setInputValue('');
}; };
const handleClose = (removedTag: string) => { const handleClose = (removedTag: string) => {
const emailSuffix2 = emailSuffix!.filter((tag) => tag !== removedTag); const emailSuffixes2 = emailSuffixes!.filter((tag) => tag !== removedTag);
onChange(emailSuffix2); onChange(emailSuffixes2);
}; };
const showInput = () => { const showInput = () => {
setInputVisible(true); setInputVisible(true);
@ -55,7 +55,7 @@ function RenderEmailSuffix(props: {
return ( return (
<Flex gap="4px 0" wrap="wrap"> <Flex gap="4px 0" wrap="wrap">
{(emailSuffix || []).map<React.ReactNode>((tag, index) => { {(emailSuffixes || []).map<React.ReactNode>((tag, index) => {
const isLongTag = tag.length > 20; const isLongTag = tag.length > 20;
const tagElem = ( const tagElem = (
<Tag <Tag
@ -112,7 +112,7 @@ export default function Email(props: {
const [html, setHtml] = useState(config?.html || ''); const [html, setHtml] = useState(config?.html || '');
const [emailCodeDuration, setEmailCodeDuration] = useState(config?.codeDuration || ''); const [emailCodeDuration, setEmailCodeDuration] = useState(config?.codeDuration || '');
const [emailDigit, setEmailDigit] = useState(config?.digit || ''); const [emailDigit, setEmailDigit] = useState(config?.digit || '');
const [emailSuffix, setEmailSuffix] = useState(config?.emailSuffix || []); const [emailSuffixes, setEmailSuffixes] = useState(config?.emailSuffixes || []);
// editor 实例 // editor 实例
const [editor, setEditor] = useState<IDomEditor | null>(null) // TS 语法 const [editor, setEditor] = useState<IDomEditor | null>(null) // TS 语法
@ -141,7 +141,7 @@ export default function Email(props: {
setHtml(config?.html || ''); setHtml(config?.html || '');
setEmailCodeDuration(config?.codeDuration || ''); setEmailCodeDuration(config?.codeDuration || '');
setEmailDigit(config?.digit || ''); setEmailDigit(config?.digit || '');
setEmailSuffix(config?.emailSuffix || []); setEmailSuffixes(config?.emailSuffixes || []);
if (config?.html) { if (config?.html) {
setEContentType('html'); setEContentType('html');
} else { } else {
@ -347,12 +347,12 @@ export default function Email(props: {
label="邮箱后缀" label="邮箱后缀"
tooltip="允许的邮箱后缀(如: qq.com不填则不校验" tooltip="允许的邮箱后缀(如: qq.com不填则不校验"
> >
<RenderEmailSuffix <RenderEmailSuffixes
t={t} t={t}
emailSuffix={emailSuffix} emailSuffixes={emailSuffixes}
onChange={(v) => { onChange={(v) => {
if (v !== (config as EmailConfig)?.emailSuffix) { if (v !== (config as EmailConfig)?.emailSuffixes) {
updateConfig(id, config!, 'emailSuffix', v, 'email'); updateConfig(id, config!, 'emailSuffixes', v, 'email');
} }
}} }}
/> />

View File

@ -20,7 +20,7 @@ export type EmailConfig = {
html?: string; html?: string;
codeDuration?: number; //验证码有效时间 单位分钟, 不填5分钟 codeDuration?: number; //验证码有效时间 单位分钟, 不填5分钟
digit?: number; //验证码位数 4~8默认为4位 digit?: number; //验证码位数 4~8默认为4位
emailSuffix?: string[] //邮箱后缀,不填则不校验 emailSuffixes?: string[] //邮箱后缀,不填则不校验
}; };
export type PfwConfig = { export type PfwConfig = {