oak-general-business/es/components/passport/index.js

303 lines
12 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { cloneDeep, isEqual, set, } from "oak-domain/lib/utils/lodash";
export default OakComponent({
entity: 'passport',
isList: true,
projection: {
id: 1,
type: 1,
config: 1,
systemId: 1,
enabled: 1,
},
properties: {
systemId: '',
systemName: '',
},
filters: [
{
filter() {
const { systemId } = this.props;
return {
systemId,
};
}
}
],
// sorters: [
// {
// sorter: {
// $attr: {
// enabled: 1,
// },
// $direction: 'desc',
// }
// }
// ],
formData({ data }) {
const passports = data.map((ele) => {
const stateColor = ele.type ? this.features.style.getColor('passport', 'type', ele.type) : '#00BFFF';
let appIdStr, hasQrCodePrefix = false;
if (ele.type === 'wechatMpForWeb') {
appIdStr = this.getAppIdStr('wechatMp', ele.config?.appId);
hasQrCodePrefix = this.checkMpQrCodePrefix(ele.config?.appId);
}
else if (ele.type === 'wechatPublicForWeb') {
appIdStr = this.getAppIdStr('wechatPublic', ele.config?.appId);
}
return {
...ele,
appIdStr,
stateColor,
hasQrCodePrefix,
};
});
return {
passports,
};
},
data: {
oauthOptions: [],
},
lifetimes: {
async ready() {
const { systemId } = this.props;
const { data: oauthProviders } = await this.features.cache.refresh('oauthProvider', {
data: {
id: 1,
name: 1,
systemId: 1,
ableState: 1,
},
filter: {
systemId,
ableState: 'enabled'
}
});
if (oauthProviders && oauthProviders?.length > 0) {
const oauthOptions = oauthProviders?.map((ele) => {
return {
label: ele.name,
value: ele.id,
};
});
this.setState({
oauthOptions,
});
}
}
},
methods: {
updateConfig(id, config, path, value, type) {
const newConfig = cloneDeep(config);
set(newConfig, path, value);
if (path === 'mockSend' && !value) {
if (type === 'sms') {
if (!newConfig.templateName || newConfig.templateName === '') {
this.setMessage({
type: 'warning',
content: '手机号登录未配置模板名称,将无法正常使用手机号登录'
});
}
else if (!newConfig.defaultOrigin) {
this.setMessage({
type: 'warning',
content: '手机号登录未选择默认渠道,将无法正常使用手机号登录'
});
}
}
else if (type === 'email') {
if (!newConfig.account || newConfig.account === '') {
this.setMessage({
type: 'warning',
content: '邮箱登录未指定邮箱账号,将无法正常使用邮箱登录'
});
}
else if (!newConfig.subject || newConfig.subject === '') {
this.setMessage({
type: 'warning',
content: '邮箱登录未配置邮件主题,将无法正常使用邮箱登录'
});
}
else if ((!newConfig.text || newConfig.text === '' || !newConfig.text?.includes('${code}')) &&
(!newConfig.html || newConfig.html === '' || !newConfig.html?.includes('${code}'))) {
this.setMessage({
type: 'warning',
content: '邮箱登录未配置邮件内容模板,将无法正常使用邮箱登录'
});
}
}
}
else if (path === 'appId' && (!value || value === '')) {
this.setMessage({
type: 'warning',
content: '未填写appId该登录方式将无法正常使用'
});
}
else if (type === 'oauth ' && path === 'oauthId' && !(value && value.length > 0)) {
this.setMessage({
type: 'warning',
content: '未选择oauth提供商将无法正常使用OAuth授权登录'
});
}
this.updateItem({
config: newConfig,
}, id);
},
checkConfrim() {
const { passports } = this.state;
let warnings = [];
for (const passport of passports) {
const { type, config = {}, enabled, id } = passport;
if (enabled) {
//检查启用的passport对应的config是否设置
switch (type) {
case 'sms':
if (!config.mockSend) {
if (!config.templateName || config.templateName === '') {
warnings.push({
id,
type,
tip: '手机号登录未配置验证码模板名称',
});
}
if (!config.defaultOrigin) {
const smsWarning = warnings.find((ele) => ele.id === id);
if (smsWarning) {
Object.assign(smsWarning, { tip: '短信登录未选择默认渠道且未配置验证码模板名称' });
}
else {
warnings.push({
id,
type,
tip: '手机号登录未选择默认渠道',
});
}
}
}
break;
case 'email':
if (!config.mockSend) {
if (!config.account) {
warnings.push({
id,
type,
tip: '邮箱登录未指定邮箱账号',
});
}
else if (!config.subject) {
const emailWarning = warnings.find((ele) => ele.id === id);
if (emailWarning) {
Object.assign(emailWarning, { tip: emailWarning.tip + '、邮件主题' });
}
else {
warnings.push({
id,
type,
tip: '邮箱登录未配置邮件主题',
});
}
}
else if ((!config.text || !config.text?.includes('${code}')) &&
(!config.html || !config.html?.includes('${code}'))) {
const emailWarning = warnings.find((ele) => ele.id === id);
if (emailWarning) {
Object.assign(emailWarning, { tip: emailWarning.tip + '、邮件内容模板' });
}
else {
warnings.push({
id,
type,
tip: '邮箱登录未正确配置邮件内容模板',
});
}
}
}
break;
case 'wechatPublicForWeb':
if (!config.appId) {
warnings.push({
id,
type,
tip: '公众号授权登录未选择appId',
});
}
break;
case 'wechatMpForWeb':
if (!config.appId) {
warnings.push({
id,
type,
tip: '小程序授权登录未选择appId',
});
}
break;
case 'oauth':
if (!(config.oauthIds && config.oauthIds.length > 0)) {
warnings.push({
id,
type,
tip: 'OAuth授权登录未选择oauth供应商',
});
}
break;
default:
break;
}
}
}
return warnings;
},
async myConfirm(ids) {
//存在不完整的配置更新保存更新时将相应的applicationPassport移除
await this.features.cache.exec('removeApplicationPassportsByPIds', { passportIds: ids });
await this.execute();
},
arraysAreEqual(first, second) {
if (first?.length !== second?.length) {
return false;
}
for (let i = 0; i < first?.length; ++i) {
if (!isEqual(first[i], second[i])) {
return false;
}
}
return true;
},
getAppIdStr(type, appId) {
const systemId = this.features.application.getApplication().systemId;
const [application] = this.features.cache.get('application', {
data: {
id: 1,
name: 1,
},
filter: {
systemId,
config: {
appId,
},
type,
}
});
return application?.name ? appId + ' applicationName' + application.name + '' : appId;
},
checkMpQrCodePrefix(appId) {
const systemId = this.features.application.getApplication().systemId;
const [application] = this.features.cache.get('application', {
data: {
id: 1,
config: 1,
},
filter: {
systemId,
config: {
appId,
},
type: 'wechatMp',
}
});
const config = application?.config;
return !!config?.qrCodePrefix;
}
},
});