import React, { useState } from 'react'; import { Button, Row, Tabs } from 'antd'; import Styles from './web.pc.module.less'; import PayConfigUpsert from '../upsert'; import { PAY_CHANNEL_WECHAT_JS_NAME, PAY_CHANNEL_WECHAT_H5_NAME, PAY_CHANNEL_WECHAT_MP_NAME, PAY_CHANNEL_WECHAT_NATIVE_NAME } from '../../../types/PayConfig'; import { generateNewId } from 'oak-domain/lib/utils/uuid'; const SystemPayChannels = []; // [label, value] const ApplicationPayChannels = {}; /** * * @param channel [label, value] */ export function registerSystemPayChannel(channel) { SystemPayChannels.push(channel); } /** * * @param type * @param channel [label, value] */ export function registerApplicationPayChannel(type, channel) { if (ApplicationPayChannels[type]) { ApplicationPayChannels[type].push(channel); } else { ApplicationPayChannels[type] = [channel]; } } const DefaultApplicationPayChannels = { web: [PAY_CHANNEL_WECHAT_JS_NAME, PAY_CHANNEL_WECHAT_H5_NAME, PAY_CHANNEL_WECHAT_NATIVE_NAME], wechatMp: [PAY_CHANNEL_WECHAT_MP_NAME], wechatPublic: [PAY_CHANNEL_WECHAT_JS_NAME], }; export default function render(props) { const { system, oakFullpath, operation, oakDirty } = props.data; const { t, update, setMessage, execute } = props.methods; const defaultApplicationPayChannelDict = { web: DefaultApplicationPayChannels.web.map(ele => [t(`payChannel::${ele}`), ele]), wechatMp: DefaultApplicationPayChannels.wechatMp.map(ele => [t(`payChannel::${ele}`), ele]), wechatPublic: DefaultApplicationPayChannels.wechatPublic.map(ele => [t(`payChannel::${ele}`), ele]), }; const [key, setKey] = useState(''); if (system && oakFullpath) { const { payConfig, application$system: applications } = system; return (
{t('system')}
), key: 'system', children: ( update({ payConfig: config })} channels={SystemPayChannels.concat([[t('payChannel::ACCOUNT'), 'ACCOUNT'], [t('payChannel::OFFLINE'), 'OFFLINE']])} t={t}/>), }, { label: (
{t('appsBelow')}
), disabled: true, key: 'padding', }, ...applications.map((app) => { const { type, id, payConfig: appPayConfig } = app; return { key: id, label: (
{app.name}
), children: ( update({ application$system: { id: generateNewId(), action: 'update', data: { payConfig: config, }, filter: { id, } } })} channels={(defaultApplicationPayChannelDict[type] || []).concat(ApplicationPayChannels[type] || [])} t={t}/>), }; }) ]} onTabClick={(activeKey) => { if (key && operation) { const { application$system } = operation.data; const { filter } = application$system; if (filter?.id === key) { setMessage({ type: 'warning', content: t('mayLossUpdate', { name: applications?.find(ele => ele.id === key).name }), }); } } setKey(activeKey); }}/> ); } return null; }