Merge branch 'dev' into release
This commit is contained in:
commit
2199279916
|
|
@ -1,9 +1,9 @@
|
|||
import { BRC } from '../types/RuntimeCxt';
|
||||
import { BackendRuntimeContext } from '../context/BackendRuntimeContext';
|
||||
import { EntityDict } from '../oak-app-domain';
|
||||
export type AspectDict = {
|
||||
export type AspectDict<ED extends EntityDict> = {
|
||||
getWithdrawCreateData: (params: {
|
||||
accountId: string;
|
||||
price: number;
|
||||
withdrawAccountId?: string;
|
||||
}, context: BRC) => Promise<EntityDict['withdraw']['CreateSingle']['data']>;
|
||||
}, context: BackendRuntimeContext<ED>) => Promise<EntityDict['withdraw']['CreateSingle']['data']>;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { EntityDict } from '../oak-app-domain';
|
||||
import { AspectDict } from './AspectDict';
|
||||
declare const aspectDict: AspectDict;
|
||||
declare const aspectDict: AspectDict<EntityDict>;
|
||||
export default aspectDict;
|
||||
export { AspectDict, };
|
||||
|
|
|
|||
|
|
@ -54,14 +54,15 @@ const checkers = [
|
|||
case 'refund':
|
||||
case 'withdraw': {
|
||||
if (totalPlus >= 0 || availPlus >= 0 || totalPlus !== availPlus) {
|
||||
throw new OakInputIllegalException('accountOper', ['availPlus'], 'accountOper为withdraw时,其totalPlus和availPlus必须为不相等的负数');
|
||||
throw new OakInputIllegalException('accountOper', ['availPlus'], `accountOper为${type}时,其totalPlus和availPlus必须为不相等的负数`);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'refundFailure':
|
||||
case 'withdrawBack': {
|
||||
case 'withdrawBack':
|
||||
case 'consumeBack': {
|
||||
if (totalPlus <= 0 || availPlus <= 0 || totalPlus !== availPlus) {
|
||||
throw new OakInputIllegalException('accountOper', ['availPlus'], 'accountOper为withdraw时,其totalPlus和availPlus必须为不相等的正数');
|
||||
throw new OakInputIllegalException('accountOper', ['availPlus'], `accountOper为${type}时,其totalPlus和availPlus必须为不相等的正数`);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,13 +27,16 @@ function checkAttributes(data) {
|
|||
}
|
||||
}
|
||||
}
|
||||
const { refundCompensateRatio, refundGapDays } = data;
|
||||
const { refundCompensateRatio, refundGapDays, withdrawTransferLossRatio } = data;
|
||||
if (typeof refundGapDays !== 'number' || refundGapDays < 0) {
|
||||
throw new OakInputIllegalException('offlineAccount', ['refundGapDays'], 'offlineAccount::error.refundGapDaysNotNegative');
|
||||
}
|
||||
if (typeof refundCompensateRatio !== 'number' || refundCompensateRatio < 0 || refundCompensateRatio > 100) {
|
||||
throw new OakInputIllegalException('offlineAccount', ['refundGapDays'], 'offlineAccount::error.refundCompensateIllegal');
|
||||
}
|
||||
if (typeof withdrawTransferLossRatio !== 'number' || withdrawTransferLossRatio < 0) {
|
||||
throw new OakInputIllegalException('offlineAccount', ['withdrawTransferLossRatio'], 'offlineAccount::error.withdrawTransferLossRatioNotNegative');
|
||||
}
|
||||
}
|
||||
const checkers = [
|
||||
{
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ const checkers = [
|
|||
},
|
||||
},
|
||||
action: 'create',
|
||||
errMsg: 'error::refund.create.hasAnotherRefunding',
|
||||
},
|
||||
{
|
||||
entity: 'refund',
|
||||
|
|
|
|||
|
|
@ -16,8 +16,8 @@ declare const List: <T extends keyof EntityDict>(props: ReactComponentProps<Enti
|
|||
attributes: OakAbsAttrDef[];
|
||||
data: RowWithActions<EntityDict, T>[];
|
||||
loading: boolean;
|
||||
tablePagination?: any;
|
||||
rowSelection?: any;
|
||||
tablePagination?: false | import("antd").TablePaginationConfig | undefined;
|
||||
rowSelection?: import("antd/es/table/interface").TableRowSelection<RowWithActions<EntityDict, T>> | undefined;
|
||||
hideHeader?: boolean | undefined;
|
||||
disableSerialNumber?: boolean | undefined;
|
||||
size?: "small" | "middle" | "large" | undefined;
|
||||
|
|
@ -27,7 +27,7 @@ declare const List: <T extends keyof EntityDict>(props: ReactComponentProps<Enti
|
|||
} & {
|
||||
scrollToFirstRowOnChange?: boolean | undefined;
|
||||
}) | undefined;
|
||||
locale?: any;
|
||||
locale?: import("antd/es/table/interface").TableLocale | undefined;
|
||||
opWidth?: number | undefined;
|
||||
}>) => React.ReactElement;
|
||||
declare const ListPro: <T extends keyof EntityDict>(props: {
|
||||
|
|
@ -43,29 +43,34 @@ declare const ListPro: <T extends keyof EntityDict>(props: {
|
|||
attributes: OakAbsAttrDef[];
|
||||
data: RowWithActions<EntityDict, T>[];
|
||||
loading?: boolean | undefined;
|
||||
tablePagination?: any;
|
||||
rowSelection?: any;
|
||||
tablePagination?: false | import("antd").TablePaginationConfig | undefined;
|
||||
rowSelection?: import("antd/es/table/interface").TableRowSelection<RowWithActions<EntityDict, T>> | undefined;
|
||||
disableSerialNumber?: boolean | undefined;
|
||||
size?: "small" | "middle" | "large" | undefined;
|
||||
scroll?: any;
|
||||
locale?: any;
|
||||
scroll?: ({
|
||||
x?: string | number | true | undefined;
|
||||
y?: string | number | undefined;
|
||||
} & {
|
||||
scrollToFirstRowOnChange?: boolean | undefined;
|
||||
}) | undefined;
|
||||
locale?: import("antd/es/table/interface").TableLocale | undefined;
|
||||
opWidth?: number | undefined;
|
||||
}) => React.ReactElement;
|
||||
declare const Detail: <T extends keyof EntityDict>(props: ReactComponentProps<EntityDict, T, false, {
|
||||
column?: number | Record<Breakpoint, number> | undefined;
|
||||
column?: number | Record<import("antd").Breakpoint, number> | undefined;
|
||||
entity: T;
|
||||
attributes: OakAbsAttrDef[];
|
||||
data: Partial<EntityDict[T]["Schema"]>;
|
||||
title?: string | undefined;
|
||||
bordered?: boolean | undefined;
|
||||
layout?: "horizontal" | "vertical" | undefined;
|
||||
layout?: "vertical" | "horizontal" | undefined;
|
||||
}>) => React.ReactElement;
|
||||
declare const Upsert: <T extends keyof EntityDict>(props: ReactComponentProps<EntityDict, T, false, {
|
||||
helps: Record<string, string>;
|
||||
entity: T;
|
||||
attributes: OakAbsAttrUpsertDef<EntityDict, T, string | number>[];
|
||||
data: EntityDict[T]["Schema"];
|
||||
layout: "horizontal" | "vertical";
|
||||
layout: "vertical" | "horizontal";
|
||||
mode: "default" | "card";
|
||||
}>) => React.ReactElement;
|
||||
export { FilterPanel, List, ListPro, Detail, Upsert, ReactComponentProps, ColumnProps, RowWithActions, OakExtraActionProps, OakAbsAttrDef, onActionFnDef, };
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ export default function render(props) {
|
|||
update({ allowWithdrawTransfer });
|
||||
}}/>
|
||||
</Form.Item>
|
||||
<Form.Item label={t('offlineAccount:attr.withdrawTransferLossRatio')} help={t('placeholder.withdrawTransferLossRatio')}>
|
||||
<Form.Item label={t('offlineAccount:attr.withdrawTransferLossRatio')} help={t('placeholder.withdrawTransferLossRatio')} required>
|
||||
<InputNumber value={offlineAccount.withdrawTransferLossRatio} max={5} min={0.01} addonAfter={"%"} step={0.01} precision={2} onChange={(value) => {
|
||||
const withdrawTransferLossRatio = value;
|
||||
update({ withdrawTransferLossRatio });
|
||||
|
|
|
|||
|
|
@ -24,5 +24,7 @@
|
|||
"orderPriceSum": "订单总额",
|
||||
"orderManage": "订单管理",
|
||||
"orderList": "订单列表",
|
||||
"tips1": "总账户余额+退款总额+转账总额+订单总额应该等于系统账户总余额"
|
||||
"tips1": "总账户余额+退款总额+转账总额+订单总额应该等于系统账户总余额",
|
||||
"move": "移动资金",
|
||||
"history": "账单"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,13 @@
|
|||
import React from 'react';
|
||||
import React, { useState } from 'react';
|
||||
import { Descriptions, Tag, Modal, Flex, Button, Divider, Alert } from 'antd';
|
||||
import { AlipayOutlined, WechatOutlined } from '@ant-design/icons';
|
||||
import Styles from './web.pc.module.less';
|
||||
import { ThousandCont, ToYuan } from "oak-domain/lib/utils/money";
|
||||
import { OfflineAccount as OADetail } from '../../offlineAccount/config/web.pc';
|
||||
import { WpAccount as WADetail } from '../../wpAccount/config/web.pc';
|
||||
import TransferList from '../transferList';
|
||||
import SysAccountMoveCreate from '../../sysAccountMove/create';
|
||||
import SysAccountOperList from '../../sysAccountOper/list';
|
||||
function OfflineAccount(props) {
|
||||
const { data, t } = props;
|
||||
const { type, channel, color, name } = data;
|
||||
|
|
@ -65,6 +68,10 @@ export default function render(props) {
|
|||
const { accounts, total, systemId, accountNum, accountTotalSum, accountAvailSum, refundCnt, refundPriceSum, transferCnt, transferPriceSum, orderCnt, orderPaidSum, orderRefundSum, } = props.data;
|
||||
const { t, setMessage } = props.methods;
|
||||
if (accounts && systemId) {
|
||||
const [showTransferList, setShowTransferList] = useState(false);
|
||||
const [showMoveCreate, setShowMoveCreate] = useState(false);
|
||||
const [showHistoryList, setShowHistoryList] = useState(false);
|
||||
const [showHistoryAcc, setShowHistoryAcc] = useState(undefined);
|
||||
return (<div className={Styles.container}>
|
||||
<Descriptions title={t('sysAccount')} bordered items={[
|
||||
{
|
||||
|
|
@ -78,7 +85,14 @@ export default function render(props) {
|
|||
label: t('count'),
|
||||
children: accounts.length,
|
||||
}
|
||||
]} column={2}/>
|
||||
]} column={2} extra={<>
|
||||
<Button type="primary" onClick={() => setShowMoveCreate(true)}>
|
||||
{t('move')}
|
||||
</Button>
|
||||
<Modal destroyOnClose open={showMoveCreate} onCancel={() => setShowMoveCreate(false)} closeIcon={null} width={800} title={t('move')} footer={null}>
|
||||
<SysAccountMoveCreate oakPath="$opb-sysAccount-survery-saMoveCreate" systemId={systemId} onSuccess={() => setShowMoveCreate(false)}/>
|
||||
</Modal>
|
||||
</>}/>
|
||||
<div className={Styles.sysAccounts}>
|
||||
{accounts.map(({ entity, data }, idx) => {
|
||||
const TopRender = RenderSysAccountCardTopDict[entity];
|
||||
|
|
@ -92,6 +106,12 @@ export default function render(props) {
|
|||
</div>
|
||||
<div className={Styles.bottom}>
|
||||
<Button onClick={() => {
|
||||
setShowHistoryAcc({ entity, data });
|
||||
setShowHistoryList(true);
|
||||
}} style={{ marginRight: 8, }}>
|
||||
{t('history')}
|
||||
</Button>
|
||||
<Button onClick={() => {
|
||||
const DetailRender = RenderSysAccountDetailDict[entity];
|
||||
if (DetailRender) {
|
||||
Modal.info({
|
||||
|
|
@ -110,6 +130,20 @@ export default function render(props) {
|
|||
}}>
|
||||
{t('common::action.detail')}
|
||||
</Button>
|
||||
|
||||
{!!showHistoryAcc && showHistoryList &&
|
||||
<Modal destroyOnClose open={showHistoryList} onCancel={() => {
|
||||
setShowHistoryAcc(undefined);
|
||||
setShowHistoryList(false);
|
||||
}} width={800} title={showHistoryAcc.entity === 'offlineAccount' ?
|
||||
(showHistoryAcc.data.type === 'bank' ?
|
||||
`${t(`${showHistoryAcc.entity}:v.type.${showHistoryAcc.data.type}`)}-${showHistoryAcc.data.channel}-${t('history')}`
|
||||
: `${t(`${showHistoryAcc.entity}:v.type.${showHistoryAcc.data.type}`)}-${showHistoryAcc.data.name}-${t('history')}`) : `${t(`${showHistoryAcc.entity}:name`)}-${t('history')}`} footer={null}>
|
||||
<div style={{ height: '65vh' }}>
|
||||
<SysAccountOperList entity={showHistoryAcc.entity} entityId={showHistoryAcc.data.id} oakPath="$opb-sysAccount-survery-operList"/>
|
||||
</div>
|
||||
|
||||
</Modal>}
|
||||
</div>
|
||||
</div>);
|
||||
})}
|
||||
|
|
@ -119,16 +153,16 @@ export default function render(props) {
|
|||
{
|
||||
label: t('accountTotalSum'),
|
||||
children: <div className={Styles.total}>
|
||||
<span className={Styles.symbol}>{t('common::pay.symbol')}</span>
|
||||
<span className={Styles.value}>{ThousandCont(ToYuan(accountTotalSum || 0), 2)}</span>
|
||||
</div>
|
||||
<span className={Styles.symbol}>{t('common::pay.symbol')}</span>
|
||||
<span className={Styles.value}>{ThousandCont(ToYuan(accountTotalSum || 0), 2)}</span>
|
||||
</div>
|
||||
},
|
||||
{
|
||||
label: t('accountAvailSum'),
|
||||
children: <div className={Styles.total}>
|
||||
<span className={Styles.symbol}>{t('common::pay.symbol')}</span>
|
||||
<span className={Styles.value}>{ThousandCont(ToYuan(accountAvailSum || 0), 2)}</span>
|
||||
</div>
|
||||
<span className={Styles.symbol}>{t('common::pay.symbol')}</span>
|
||||
<span className={Styles.value}>{ThousandCont(ToYuan(accountAvailSum || 0), 2)}</span>
|
||||
</div>
|
||||
},
|
||||
{
|
||||
label: t('accountNum'),
|
||||
|
|
@ -142,14 +176,14 @@ export default function render(props) {
|
|||
label: t('refundPriceSum'),
|
||||
span: 2,
|
||||
children: (<div className={Styles.span2}>
|
||||
<span className={Styles.total}>
|
||||
<span className={Styles.symbol}>{t('common::pay.symbol')}</span>
|
||||
<span className={Styles.value}>{ThousandCont(ToYuan(refundPriceSum || 0), 2)}</span>
|
||||
</span>
|
||||
<Button style={{ marginLeft: 20 }}>
|
||||
{t('refundList')}
|
||||
</Button>
|
||||
</div>)
|
||||
<span className={Styles.total}>
|
||||
<span className={Styles.symbol}>{t('common::pay.symbol')}</span>
|
||||
<span className={Styles.value}>{ThousandCont(ToYuan(refundPriceSum || 0), 2)}</span>
|
||||
</span>
|
||||
<Button style={{ marginLeft: 20 }}>
|
||||
{t('refundList')}
|
||||
</Button>
|
||||
</div>)
|
||||
},
|
||||
{
|
||||
label: t('transferCnt'),
|
||||
|
|
@ -159,14 +193,17 @@ export default function render(props) {
|
|||
label: t('transferPriceSum'),
|
||||
span: 2,
|
||||
children: (<div className={Styles.span2}>
|
||||
<span className={Styles.total}>
|
||||
<span className={Styles.symbol}>{t('common::pay.symbol')}</span>
|
||||
<span className={Styles.value}>{ThousandCont(ToYuan(transferPriceSum || 0), 2)}</span>
|
||||
</span>
|
||||
<Button>
|
||||
{t('transferList')}
|
||||
</Button>
|
||||
</div>)
|
||||
<span className={Styles.total}>
|
||||
<span className={Styles.symbol}>{t('common::pay.symbol')}</span>
|
||||
<span className={Styles.value}>{ThousandCont(ToYuan(transferPriceSum || 0), 2)}</span>
|
||||
</span>
|
||||
<Button onClick={() => setShowTransferList(true)}>
|
||||
{t('transferList')}
|
||||
</Button>
|
||||
<Modal open={showTransferList} onCancel={() => setShowTransferList(false)} footer={null} closeIcon={null} width={800}>
|
||||
<TransferList oakPath="$opb-sysAccount-survery-transferList"/>
|
||||
</Modal>
|
||||
</div>)
|
||||
},
|
||||
{
|
||||
label: t('orderCnt'),
|
||||
|
|
@ -175,14 +212,14 @@ export default function render(props) {
|
|||
{
|
||||
label: t('orderPriceSum'),
|
||||
children: (<div className={Styles.span2}>
|
||||
<div className={Styles.total}>
|
||||
<span className={Styles.symbol}>{t('common::pay.symbol')}</span>
|
||||
<span className={Styles.value}>{ThousandCont(ToYuan((orderPaidSum || 0) - (orderRefundSum || 0)), 2)}</span>
|
||||
</div>
|
||||
<Button>
|
||||
{t('orderList')}
|
||||
</Button>
|
||||
</div>)
|
||||
<div className={Styles.total}>
|
||||
<span className={Styles.symbol}>{t('common::pay.symbol')}</span>
|
||||
<span className={Styles.value}>{ThousandCont(ToYuan((orderPaidSum || 0) - (orderRefundSum || 0)), 2)}</span>
|
||||
</div>
|
||||
<Button>
|
||||
{t('orderList')}
|
||||
</Button>
|
||||
</div>)
|
||||
}
|
||||
]} column={3}/>}
|
||||
</div>);
|
||||
|
|
|
|||
|
|
@ -19,13 +19,14 @@
|
|||
padding: 8px;
|
||||
flex-wrap: wrap;
|
||||
margin-top: 12px;
|
||||
gap: 14px;
|
||||
|
||||
.sysAccount {
|
||||
width: 244px;
|
||||
height: 284px;
|
||||
border: solid 0.1px silver;
|
||||
border-radius: 5px;
|
||||
margin-right: 14px;
|
||||
// margin-right: 14px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
|
|
@ -64,7 +65,7 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.span2 {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,3 @@
|
|||
/// <reference types="wechat-miniprogram" />
|
||||
declare const _default: (props: import("oak-frontend-base").ReactComponentProps<import("../../../oak-app-domain").EntityDict, "withdrawTransfer", true, WechatMiniprogram.Component.DataOption>) => React.ReactElement;
|
||||
export default _default;
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
export default OakComponent({
|
||||
entity: 'withdrawTransfer',
|
||||
isList: true,
|
||||
projection: {
|
||||
id: 1,
|
||||
price: 1,
|
||||
loss: 1,
|
||||
externalId: 1,
|
||||
iState: 1,
|
||||
withdrawAccount: {
|
||||
org: 1,
|
||||
name: 1,
|
||||
code: 1,
|
||||
channel: {
|
||||
entity: 1,
|
||||
entityId: 1,
|
||||
offlineAccount: {
|
||||
id: 1,
|
||||
type: 1,
|
||||
}
|
||||
},
|
||||
id: 1,
|
||||
}
|
||||
},
|
||||
filters: [
|
||||
{
|
||||
filter() {
|
||||
const systemId = this.features.application.getApplication().systemId;
|
||||
return {
|
||||
withdrawAccount: {
|
||||
ofSystemId: systemId,
|
||||
},
|
||||
iState: 'transferring',
|
||||
};
|
||||
}
|
||||
}
|
||||
],
|
||||
formData({ data }) {
|
||||
return {
|
||||
transfers: data?.map((ele) => {
|
||||
const { withdrawAccount, ...rest } = ele;
|
||||
const { entity, offlineAccount } = withdrawAccount.channel;
|
||||
const channel = entity === 'offlineAccount' ? this.t(`withdraw::channel.offlineAccount.${offlineAccount?.type}`) : this.t(`withdraw::channel.${entity}`);
|
||||
return {
|
||||
...rest,
|
||||
withdrawAccount,
|
||||
channel,
|
||||
};
|
||||
}),
|
||||
};
|
||||
},
|
||||
});
|
||||
|
|
@ -0,0 +1 @@
|
|||
{}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"label": {
|
||||
"channel": "转账渠道"
|
||||
},
|
||||
"tips": "正在转账的金额不计入任何账户,请到\"提现转账管理\"菜单完成操作"
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
import React from 'react';
|
||||
import { RowWithActions, WebComponentProps } from 'oak-frontend-base';
|
||||
import { EntityDict } from '../../../oak-app-domain';
|
||||
export default function Render(props: WebComponentProps<EntityDict, 'pay', false, {
|
||||
transfers?: (RowWithActions<EntityDict, 'withdrawTransfer'> & {
|
||||
creatorName: string;
|
||||
creatorMobile: string;
|
||||
operatorName: string;
|
||||
operatorMobile: string;
|
||||
channel: string;
|
||||
})[];
|
||||
}>): React.JSX.Element;
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
import React from 'react';
|
||||
import { Result, Alert } from 'antd';
|
||||
import ListPro from 'oak-frontend-base/es/components/listPro';
|
||||
import { ThousandCont, ToYuan } from 'oak-domain/lib/utils/money';
|
||||
export default function Render(props) {
|
||||
const { transfers, oakFullpath, oakExecutable } = props.data;
|
||||
const { t } = props.methods;
|
||||
if (transfers?.length) {
|
||||
return (<ListPro entity="withdrawTransfer" data={transfers} title={<Alert type="info" message={t('tips')}/>} attributes={[
|
||||
{
|
||||
path: 'price',
|
||||
label: t('withdrawTransfer:attr.price'),
|
||||
width: 100,
|
||||
render: (row) => {
|
||||
return `${t('common::pay.symbol')} ${ThousandCont(ToYuan(row.price), 2)}`;
|
||||
}
|
||||
},
|
||||
{
|
||||
path: 'loss',
|
||||
label: t('withdrawTransfer:attr.loss'),
|
||||
width: 100,
|
||||
render: (row) => {
|
||||
return `${t('common::pay.symbol')} ${ThousandCont(ToYuan(row.loss), 2)}`;
|
||||
}
|
||||
},
|
||||
{
|
||||
path: '$$createAt$$',
|
||||
label: t('common::$$createAt$$'),
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
path: 'channel',
|
||||
label: t('label.channel'),
|
||||
type: 'string',
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
path: 'externalId',
|
||||
label: t('withdrawTransfer:attr.externalId'),
|
||||
width: 120,
|
||||
},
|
||||
]} disabledOp={true}/>);
|
||||
}
|
||||
return (<Result status="404" title={t('common::noData')}/>);
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import { EntityDict } from "../../../oak-app-domain";
|
||||
declare const _default: (props: import("oak-frontend-base").ReactComponentProps<EntityDict, keyof EntityDict, boolean, {
|
||||
systemId: string;
|
||||
entities: string[];
|
||||
onSuccess: (id: string) => void;
|
||||
}>) => React.ReactElement;
|
||||
export default _default;
|
||||
|
|
@ -0,0 +1,145 @@
|
|||
import { uniq } from "oak-domain/lib/utils/lodash";
|
||||
import { generateNewIdAsync } from 'oak-domain/lib/utils/uuid';
|
||||
import { ThousandCont, ToCent, ToYuan } from 'oak-domain/lib/utils/money';
|
||||
export default OakComponent({
|
||||
properties: {
|
||||
systemId: '',
|
||||
entities: [],
|
||||
onSuccess: (id) => undefined,
|
||||
},
|
||||
data: {
|
||||
accounts: [],
|
||||
fromEntity: '',
|
||||
fromEntityId: '',
|
||||
toEntity: '',
|
||||
toEntityId: '',
|
||||
price: 0,
|
||||
externalId: '',
|
||||
remark: '',
|
||||
max: 0,
|
||||
},
|
||||
lifetimes: {
|
||||
ready() {
|
||||
this.refreshSysAccount();
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async refreshSysAccount() {
|
||||
const { entities, systemId } = this.props;
|
||||
const accounts2 = await Promise.all(uniq(['wpAccount', 'offlineAccount'].concat(entities || [])).map(async (entity) => {
|
||||
const { data: rows } = await this.features.cache.refresh(entity, {
|
||||
data: entity === 'offlineAccount' ? {
|
||||
id: 1,
|
||||
price: 1,
|
||||
name: 1,
|
||||
type: 1,
|
||||
channel: 1,
|
||||
} : {
|
||||
id: 1,
|
||||
price: 1,
|
||||
},
|
||||
filter: {
|
||||
systemId,
|
||||
}
|
||||
});
|
||||
const accounts = rows.map((row) => {
|
||||
const { id, price, name, type, channel } = row;
|
||||
return {
|
||||
id: id,
|
||||
entity: entity,
|
||||
priceStr: ThousandCont(ToYuan(price)),
|
||||
price: price,
|
||||
label: entity === 'offlineAccount' ? `${this.t(`${entity}:name`)}-${this.t(`offlineAccount:v.type.${type}`)}` : this.t(`${entity}:name`),
|
||||
name: name || undefined,
|
||||
};
|
||||
});
|
||||
return accounts;
|
||||
}));
|
||||
this.setState({
|
||||
accounts: accounts2.flat(),
|
||||
});
|
||||
},
|
||||
setFromId(id) {
|
||||
const { accounts } = this.state;
|
||||
const account = accounts.find(ele => ele.id === id);
|
||||
this.setState({
|
||||
fromEntity: account.entity,
|
||||
fromEntityId: account.id,
|
||||
max: ToYuan(account.price),
|
||||
});
|
||||
},
|
||||
setToId(id) {
|
||||
const { accounts } = this.state;
|
||||
const account = accounts.find(ele => ele.id === id);
|
||||
this.setState({
|
||||
toEntity: account.entity,
|
||||
toEntityId: account.id,
|
||||
});
|
||||
},
|
||||
setPrice(price) {
|
||||
this.setState({
|
||||
price,
|
||||
});
|
||||
},
|
||||
setExternalId(externalId) {
|
||||
this.setState({
|
||||
externalId,
|
||||
});
|
||||
},
|
||||
setRemark(remark) {
|
||||
this.setState({
|
||||
remark,
|
||||
});
|
||||
},
|
||||
async createMove() {
|
||||
const { fromEntity, fromEntityId, toEntity, toEntityId, price, remark, externalId } = this.state;
|
||||
const userId = this.features.token.getUserId();
|
||||
const systemId = this.features.application.getApplication().systemId;
|
||||
const id = await generateNewIdAsync();
|
||||
const price2 = ToCent(price);
|
||||
const { onSuccess } = this.props;
|
||||
await this.execute(undefined, undefined, undefined, [
|
||||
{
|
||||
entity: 'sysAccountMove',
|
||||
operation: {
|
||||
id: await generateNewIdAsync(),
|
||||
action: 'create',
|
||||
data: {
|
||||
id,
|
||||
price: price2,
|
||||
externalId,
|
||||
remark,
|
||||
systemId,
|
||||
operatorId: userId,
|
||||
sysAccountOper$sysAccountMove: [
|
||||
{
|
||||
id: await generateNewIdAsync(),
|
||||
action: 'create',
|
||||
data: {
|
||||
id: await generateNewIdAsync(),
|
||||
entity: fromEntity,
|
||||
entityId: fromEntityId,
|
||||
delta: -price2,
|
||||
type: 'moveOut',
|
||||
},
|
||||
},
|
||||
{
|
||||
id: await generateNewIdAsync(),
|
||||
action: 'create',
|
||||
data: {
|
||||
id: await generateNewIdAsync(),
|
||||
entity: toEntity,
|
||||
entityId: toEntityId,
|
||||
delta: price2,
|
||||
type: 'moveIn',
|
||||
},
|
||||
},
|
||||
]
|
||||
}
|
||||
},
|
||||
}
|
||||
]);
|
||||
onSuccess && onSuccess(id);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
@ -0,0 +1 @@
|
|||
{}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"label": {
|
||||
"from": "从账户",
|
||||
"to": "到账户"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
import React from 'react';
|
||||
import { WebComponentProps } from 'oak-frontend-base';
|
||||
import { EntityDict } from '../../../oak-app-domain';
|
||||
export default function Render(props: WebComponentProps<EntityDict, 'pay', false, {
|
||||
fromEntityId?: string;
|
||||
toEntityId?: string;
|
||||
price: number;
|
||||
max?: number;
|
||||
externalId: string;
|
||||
remark: string;
|
||||
accounts: Array<{
|
||||
id: string;
|
||||
entity: string;
|
||||
price: number;
|
||||
priceStr: string;
|
||||
label: string;
|
||||
name?: string;
|
||||
}>;
|
||||
}, {
|
||||
setFromId: (id: string) => void;
|
||||
setToId: (id: string) => void;
|
||||
setPrice: (price: number) => void;
|
||||
setExternalId: (externalId: string) => void;
|
||||
setRemark: (remark: string) => void;
|
||||
createMove: () => Promise<void>;
|
||||
}>): React.JSX.Element | null;
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
import React from 'react';
|
||||
import { Button, Form, Input, InputNumber, Radio, Space, Flex } from 'antd';
|
||||
export default function Render(props) {
|
||||
const { price, externalId, max, remark, fromEntityId, toEntityId, accounts } = props.data;
|
||||
const { t, setFromId, setToId, setPrice, setExternalId, setRemark, createMove } = props.methods;
|
||||
if (accounts.length) {
|
||||
return (<>
|
||||
<Form labelCol={{ span: 4 }} wrapperCol={{ span: 14 }} layout="horizontal" style={{
|
||||
marginTop: 20,
|
||||
}}>
|
||||
<Form.Item label={t('label.from')} required>
|
||||
<Radio.Group onChange={({ target }) => {
|
||||
setFromId(target.value);
|
||||
}} value={fromEntityId}>
|
||||
<Space direction="vertical">
|
||||
{accounts.filter(ele => ele.price > 0).map(ele => {
|
||||
const { id, label, price, priceStr } = ele;
|
||||
return (<Radio value={id} key={id} disabled={price <= 0}>
|
||||
{`${label}: ${t('common::pay.symbol')}${priceStr}`}
|
||||
</Radio>);
|
||||
})}
|
||||
</Space>
|
||||
</Radio.Group>
|
||||
</Form.Item>
|
||||
{fromEntityId && <Form.Item label={t('label.to')} required>
|
||||
<Radio.Group onChange={({ target }) => {
|
||||
setToId(target.value);
|
||||
}} value={toEntityId}>
|
||||
<Space direction="vertical">
|
||||
{accounts.filter(ele => ele.id !== fromEntityId).map(ele => {
|
||||
const { id, label, price, priceStr } = ele;
|
||||
return (<Radio value={id} key={id}>
|
||||
{`${label}: ${t('common::pay.symbol')}${priceStr}`}
|
||||
</Radio>);
|
||||
})}
|
||||
</Space>
|
||||
</Radio.Group>
|
||||
</Form.Item>}
|
||||
{fromEntityId && toEntityId && <Form.Item label={t('sysAccountMove:attr.price')} required>
|
||||
<InputNumber value={price} style={{
|
||||
width: 240,
|
||||
}} max={max} precision={2} onChange={(value) => {
|
||||
const price = value;
|
||||
setPrice(price);
|
||||
}}/>
|
||||
</Form.Item>}
|
||||
{fromEntityId && toEntityId && <Form.Item label={t('sysAccountMove:attr.externalId')} required>
|
||||
<Input value={externalId} onChange={({ currentTarget }) => {
|
||||
const externalId = currentTarget.value;
|
||||
setExternalId(externalId);
|
||||
}} maxLength={64}/>
|
||||
</Form.Item>}
|
||||
{fromEntityId && toEntityId && <Form.Item label={t('sysAccountMove:attr.remark')}>
|
||||
<Input.TextArea value={remark || undefined} onChange={({ currentTarget }) => {
|
||||
const remark = currentTarget.value;
|
||||
setRemark(remark);
|
||||
}} rows={4}/>
|
||||
</Form.Item>}
|
||||
</Form>
|
||||
<Flex style={{ width: '100%', padding: 12 }} justify="end">
|
||||
<Button type="primary" disabled={!fromEntityId || !toEntityId || !price || !externalId} onClick={() => createMove()}>
|
||||
{t('common::confirm')}
|
||||
</Button>
|
||||
</Flex>
|
||||
</>);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
declare const _default: (props: import("oak-frontend-base").ReactComponentProps<import("../../../oak-app-domain").EntityDict, "sysAccountOper", true, {
|
||||
entity: string;
|
||||
entityId: string;
|
||||
}>) => React.ReactElement;
|
||||
export default _default;
|
||||
|
|
@ -0,0 +1,127 @@
|
|||
import dayjs from 'dayjs';
|
||||
import { ToYuan, ThousandCont } from "oak-domain/lib/utils/money";
|
||||
export default OakComponent({
|
||||
entity: 'sysAccountOper',
|
||||
isList: true,
|
||||
projection: {
|
||||
id: 1,
|
||||
delta: 1,
|
||||
type: 1,
|
||||
entity: 1,
|
||||
entityId: 1,
|
||||
$$createAt$$: 1,
|
||||
},
|
||||
filters: [
|
||||
{
|
||||
filter() {
|
||||
const { entity, entityId } = this.props;
|
||||
return {
|
||||
entity,
|
||||
entityId,
|
||||
};
|
||||
}
|
||||
}
|
||||
],
|
||||
formData({ data }) {
|
||||
return {
|
||||
sysAccountOpers: data.map((oper) => {
|
||||
const { $$createAt$$, type, delta } = oper;
|
||||
const num = Math.abs(delta);
|
||||
const plus = ThousandCont(ToYuan(num), 2);
|
||||
const sign = delta > 0 ? '+' : '-';
|
||||
const time = dayjs($$createAt$$).format('YYYY-MM-DD HH:mm');
|
||||
const symbol = this.t(`sysAccountOper:v.type.${type}`)[0];
|
||||
const bgColor = this.features.style.getColor('sysAccountOper', 'type', type);
|
||||
return {
|
||||
value: `${sign}${plus}`,
|
||||
time,
|
||||
type: this.t(`sysAccountOper:v.type.${type}`),
|
||||
symbol,
|
||||
bgColor,
|
||||
};
|
||||
}),
|
||||
};
|
||||
},
|
||||
pagination: {
|
||||
pageSize: 7,
|
||||
currentPage: 1,
|
||||
},
|
||||
getTotal: 100,
|
||||
properties: {
|
||||
entity: '',
|
||||
entityId: '',
|
||||
},
|
||||
data: {
|
||||
month: new Date(),
|
||||
monthStr: '',
|
||||
type: 'all',
|
||||
typesOptions: []
|
||||
},
|
||||
lifetimes: {
|
||||
ready() {
|
||||
let typesOptions = [{
|
||||
label: this.t('all'),
|
||||
value: 'all',
|
||||
}];
|
||||
const types = ['withdrawTransfer', 'pay', 'refund', 'compensate', 'moveIn', 'moveOut'];
|
||||
types.forEach((ele) => {
|
||||
typesOptions.push({
|
||||
label: this.t(`sysAccountOper:v.type.${ele}`),
|
||||
value: ele,
|
||||
});
|
||||
});
|
||||
this.setState({
|
||||
typesOptions,
|
||||
});
|
||||
this.setTypeFilter();
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
setType(type) {
|
||||
this.setState({
|
||||
type,
|
||||
}, () => this.setTypeFilter());
|
||||
},
|
||||
setTypeFilter() {
|
||||
const { type } = this.state;
|
||||
if (type === 'all') {
|
||||
this.removeNamedFilterByName('type', true);
|
||||
}
|
||||
else {
|
||||
this.addNamedFilter({
|
||||
'#name': 'type',
|
||||
filter: {
|
||||
type,
|
||||
}
|
||||
}, true);
|
||||
}
|
||||
},
|
||||
setMonth(month) {
|
||||
if (month) {
|
||||
const m = dayjs(month);
|
||||
const begin = m.startOf('month').valueOf();
|
||||
const end = m.endOf('month').valueOf();
|
||||
this.setState({
|
||||
monthStr: m.format('YYYY-MM'),
|
||||
month,
|
||||
}, () => this.addNamedFilter({
|
||||
'#name': 'month',
|
||||
filter: {
|
||||
$$createAt$$: {
|
||||
$between: [begin, end],
|
||||
}
|
||||
}
|
||||
}, true));
|
||||
}
|
||||
else {
|
||||
this.setState({
|
||||
monthStr: '',
|
||||
month: undefined,
|
||||
}, () => this.removeNamedFilter({
|
||||
'#name': 'month',
|
||||
filter: {}
|
||||
}, true));
|
||||
}
|
||||
},
|
||||
}
|
||||
});
|
||||
|
|
@ -0,0 +1 @@
|
|||
{}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"history": "账户历史",
|
||||
"chooseMonth": "选择月份",
|
||||
"all": "全部"
|
||||
}
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
.container {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.control {
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
.value {
|
||||
font-size: x-large;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.content{
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.types {
|
||||
padding: 20px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.pagi{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.empty {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
flex: 1;
|
||||
background-color: white;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
import React from 'react';
|
||||
import { WebComponentProps } from 'oak-frontend-base';
|
||||
import { EntityDict } from '../../../oak-app-domain';
|
||||
import { SysAccountOperType } from '../../../types/sysAccountOper';
|
||||
type SAOType = SysAccountOperType | 'all';
|
||||
export default function Render(props: WebComponentProps<EntityDict, 'accountOper', true, {
|
||||
sysAccountOpers?: Array<{
|
||||
value: string;
|
||||
time: string;
|
||||
type: string;
|
||||
symbol: string;
|
||||
bgColor: string;
|
||||
}>;
|
||||
month?: Date;
|
||||
monthStr: string;
|
||||
type: SAOType;
|
||||
typesOptions: {
|
||||
label: string;
|
||||
value: SAOType;
|
||||
}[];
|
||||
}, {
|
||||
setMonth: (month?: Date) => void;
|
||||
setType: (type: SAOType) => void;
|
||||
}>): React.JSX.Element;
|
||||
export {};
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
import React from 'react';
|
||||
import { Avatar, List, Select, Flex, DatePicker, Empty, Pagination } from 'antd';
|
||||
import Styles from './web.module.less';
|
||||
import dayJs from 'dayjs';
|
||||
export default function Render(props) {
|
||||
const { sysAccountOpers, month, type, monthStr, oakLoading, oakLoadingMore, typesOptions, oakPagination } = props.data;
|
||||
const { t, setType, setMonth, setPageSize, setCurrentPage } = props.methods;
|
||||
const { pageSize, total, currentPage } = oakPagination || {};
|
||||
return (<div className={Styles.container}>
|
||||
<Flex gap="middle" justify="flex-end" className={Styles.control}>
|
||||
<DatePicker picker="month" onChange={(value) => {
|
||||
setMonth(value?.toDate());
|
||||
}} maxDate={dayJs()}/>
|
||||
<Select style={{ width: 120 }} onChange={(value) => {
|
||||
setType(value);
|
||||
}} value={type} options={typesOptions}/>
|
||||
</Flex>
|
||||
|
||||
{sysAccountOpers?.length ?
|
||||
<div className={Styles.content}>
|
||||
<List loading={oakLoading || oakLoadingMore} dataSource={sysAccountOpers} renderItem={(item, idx) => (<List.Item key={idx}>
|
||||
<List.Item.Meta avatar={<Avatar style={{ backgroundColor: item.bgColor }}>{item.symbol}</Avatar>} title={<span className={Styles.type}>{item.type}</span>} description={<div>{item.time}</div>}/>
|
||||
<div className={Styles.value} style={{
|
||||
color: item.bgColor,
|
||||
}}>
|
||||
{item.value}
|
||||
</div>
|
||||
</List.Item>)}/>
|
||||
<div className={Styles.pagi}>
|
||||
<Pagination current={currentPage} total={total} pageSize={pageSize} onShowSizeChange={(size) => setPageSize(size)} onChange={(page) => setCurrentPage(page)}/>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
: (<Empty image={Empty.PRESENTED_IMAGE_SIMPLE}/>)}
|
||||
</div>);
|
||||
}
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"label": {
|
||||
"channel": "提现渠道",
|
||||
"channel": "转账渠道",
|
||||
"transferActualPrice": "实际转账金额",
|
||||
"sysAccountAmount": "系统账户余额",
|
||||
"cn": "创建者",
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ export default function render(props) {
|
|||
if (wpAccount) {
|
||||
return (<Form labelCol={{ span: 8 }} wrapperCol={{ span: 12 }} layout="horizontal" style={{ minWidth: 860 }}>
|
||||
{(!wechatPay || wechatPay.$$createAt$$ === 1) && <WechatPayUpsert oakPath={`${oakFullpath}.wechatPay`} systemId={systemId} key="wpCreate"/>}
|
||||
{(wpAccount.wechatPayId && wechatPay?.$$createAt$$ !== 1) && <WechatPayUpsert oakPath={`${oakFullpath}.wechatPay`} systemId={systemId} key="wpUpdate" oakId={wpAccount.wechatPayId}/>}
|
||||
{(wpAccount.wechatPayId && wpAccount?.$$createAt$$ !== 1) && <WechatPayUpsert oakPath={`${oakFullpath}.wechatPay`} systemId={systemId} key="wpUpdate" oakId={wpAccount.wechatPayId}/>}
|
||||
<Form.Item label="说明">
|
||||
<div className={Styles.tips}>
|
||||
{t('wechatPayIsShared')}
|
||||
|
|
|
|||
|
|
@ -138,7 +138,7 @@ const attrUpdateMatrix = {
|
|||
actions: ['update'],
|
||||
},
|
||||
price: {
|
||||
actions: ['pay', 'refund', 'deposit', 'withdraw', 'tax'],
|
||||
actions: ['pay', 'refund', 'deposit', 'withdrawTransfer', 'tax', 'moveOut', 'moveIn', 'compensate'],
|
||||
},
|
||||
allowDeposit: {
|
||||
actions: ['update'],
|
||||
|
|
@ -200,7 +200,7 @@ const attrUpdateMatrix = {
|
|||
actions: ['update'],
|
||||
},
|
||||
price: {
|
||||
actions: ['pay', 'refund', 'deposit', 'withdraw', 'tax'],
|
||||
actions: ['pay', 'refund', 'deposit', 'withdrawTransfer', 'tax', 'moveOut', 'moveIn', 'compensate'],
|
||||
}
|
||||
},
|
||||
withdrawAccount: {
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ export declare class BackendRuntimeContext<ED extends EntityDict & BaseEntityDic
|
|||
type?: number | undefined;
|
||||
systemId?: number | undefined;
|
||||
system?: import("../oak-app-domain/System/Schema").Projection | undefined;
|
||||
config?: number | import("oak-domain/lib/types").JsonProjection<import("../oak-app-domain/Application/Schema").WechatMpConfig | import("../oak-app-domain/Application/Schema").WebConfig | import("../oak-app-domain/Application/Schema").WechatPublicConfig | import("../oak-app-domain/Application/Schema").NativeConfig> | undefined;
|
||||
config?: number | import("oak-domain/lib/types").JsonProjection<import("../oak-app-domain/Application/Schema").WebConfig | import("../oak-app-domain/Application/Schema").WechatMpConfig | import("../oak-app-domain/Application/Schema").WechatPublicConfig | import("../oak-app-domain/Application/Schema").NativeConfig> | undefined;
|
||||
style?: number | import("oak-domain/lib/types").JsonProjection<import("oak-general-business/lib/types/Style").Style> | undefined;
|
||||
domainId?: number | undefined;
|
||||
domain?: import("../oak-app-domain/Domain/Schema").Projection | undefined;
|
||||
|
|
|
|||
|
|
@ -10,8 +10,13 @@ const actionAuths = [
|
|||
deActions: ['select', 'create']
|
||||
},
|
||||
{
|
||||
id: 'user-acc-pay',
|
||||
pathId: 'user-acc-pay',
|
||||
id: 'creator-order-pay',
|
||||
pathId: 'creator-order-pay',
|
||||
deActions: ['select', 'create', 'startPaying', 'startRefunding', 'close']
|
||||
},
|
||||
{
|
||||
id: 'user-dep-acc-pay',
|
||||
pathId: 'user-dep-acc-pay',
|
||||
deActions: ['select', 'update', 'startPaying', 'startRefunding', 'close']
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -406,7 +406,47 @@ const i18ns = [
|
|||
"orderPriceSum": "订单总额",
|
||||
"orderManage": "订单管理",
|
||||
"orderList": "订单列表",
|
||||
"tips1": "总账户余额+退款总额+转账总额+订单总额应该等于系统账户总余额"
|
||||
"tips1": "总账户余额+退款总额+转账总额+订单总额应该等于系统账户总余额",
|
||||
"move": "移动资金",
|
||||
"history": "账单"
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "207fd2189d3697d15672176ae88f4175",
|
||||
namespace: "oak-pay-business-c-sysAccount-transferList",
|
||||
language: "zh-CN",
|
||||
module: "oak-pay-business",
|
||||
position: "src/components/sysAccount/transferList",
|
||||
data: {
|
||||
"label": {
|
||||
"channel": "转账渠道"
|
||||
},
|
||||
"tips": "正在转账的金额不计入任何账户,请到\"提现转账管理\"菜单完成操作"
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "17a11f164c9977d8eb5b59fbc78755d5",
|
||||
namespace: "oak-pay-business-c-sysAccountMove-create",
|
||||
language: "zh-CN",
|
||||
module: "oak-pay-business",
|
||||
position: "src/components/sysAccountMove/create",
|
||||
data: {
|
||||
"label": {
|
||||
"from": "从账户",
|
||||
"to": "到账户"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "f89e1a2d0e88d8e2b3f900cfe28a893e",
|
||||
namespace: "oak-pay-business-c-sysAccountOper-list",
|
||||
language: "zh-CN",
|
||||
module: "oak-pay-business",
|
||||
position: "src/components/sysAccountOper/list",
|
||||
data: {
|
||||
"history": "账户历史",
|
||||
"chooseMonth": "选择月份",
|
||||
"all": "全部"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -583,7 +623,7 @@ const i18ns = [
|
|||
position: "src/components/withdrawTransfer/list",
|
||||
data: {
|
||||
"label": {
|
||||
"channel": "提现渠道",
|
||||
"channel": "转账渠道",
|
||||
"transferActualPrice": "实际转账金额",
|
||||
"sysAccountAmount": "系统账户余额",
|
||||
"cn": "创建者",
|
||||
|
|
@ -753,6 +793,11 @@ const i18ns = [
|
|||
"order": {
|
||||
"payAmountNotEnough": "支付的额度总和不足",
|
||||
"nonePay": "没有传入支付信息"
|
||||
},
|
||||
"refund": {
|
||||
"create": {
|
||||
"hasAnotherRefunding": "您有一笔退款正在进行中"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
@ -786,7 +831,8 @@ const i18ns = [
|
|||
"error": {
|
||||
"nameQrCodeBothNull": "账号名和二维码不能同时为空",
|
||||
"refundGapDaysNotNegative": "允许退款天数不能为负数或空",
|
||||
"refundCompensateIllegal": "退款补偿百分比必须在0到100之间"
|
||||
"refundCompensateIllegal": "退款补偿百分比必须在0到100之间",
|
||||
"withdrawTransferLossRatioNotNegative": "提现转账费率必须在0到100之间"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -7,10 +7,10 @@ const paths = [
|
|||
recursive: false,
|
||||
},
|
||||
{
|
||||
id: 'user-acc-pay',
|
||||
id: 'user-dep-acc-pay',
|
||||
sourceEntity: 'user',
|
||||
destEntity: 'pay',
|
||||
value: 'account.user',
|
||||
value: 'deposit.account.user',
|
||||
recursive: false,
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ import { String, Price } from 'oak-domain/lib/types/DataType';
|
|||
import { EntityShape } from 'oak-domain/lib/types/Entity';
|
||||
import { EntityDesc } from 'oak-domain/lib/types';
|
||||
import { Schema as Account } from './Account';
|
||||
type Type = 'deposit' | 'withdraw' | 'consume' | 'loan' | 'repay' | 'withdrawBack' | 'earn' | 'encash' | 'cutoffRefundable' | 'tax' | 'taxRefund' | 'refund' | 'refundFailure';
|
||||
type Type = 'deposit' | 'withdraw' | 'consume' | 'consumeBack' | 'loan' | 'repay' | 'withdrawBack' | 'earn' | 'encash' | 'cutoffRefundable' | 'tax' | 'taxRefund' | 'refund' | 'refundFailure';
|
||||
export interface Schema extends EntityShape {
|
||||
account: Account;
|
||||
type: Type;
|
||||
|
|
|
|||
|
|
@ -20,9 +20,10 @@ export const entityDesc = {
|
|||
deposit: '充值',
|
||||
withdraw: '提现',
|
||||
consume: '消费',
|
||||
consumeBack: '消费退还',
|
||||
loan: '抵押',
|
||||
repay: '偿还',
|
||||
withdrawBack: '提现未遂',
|
||||
withdrawBack: '提现退还',
|
||||
earn: '赚取',
|
||||
encash: '兑现',
|
||||
tax: '渠道费',
|
||||
|
|
@ -41,6 +42,7 @@ export const entityDesc = {
|
|||
withdraw: '#F7DC6F',
|
||||
withdrawBack: '#F7DC6F',
|
||||
consume: '#A569BD',
|
||||
consumeBack: '#009933',
|
||||
loan: '#CD6155',
|
||||
repay: '#82E0AA',
|
||||
earn: '#FF3333',
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ export interface Schema extends AbstractAccount {
|
|||
channels: WithdrawChannel[];
|
||||
enabled: Boolean;
|
||||
}
|
||||
export type Action = 'pay' | 'refund' | 'deposit' | 'withdraw' | 'tax';
|
||||
export type Action = 'pay' | 'refund' | 'withdrawTransfer' | 'compensate' | 'moveIn' | 'moveOut' | 'deposit' | 'tax';
|
||||
export declare const entityDesc: EntityDesc<Schema, Action, '', {
|
||||
type: Schema['type'];
|
||||
}>;
|
||||
|
|
|
|||
|
|
@ -34,8 +34,11 @@ export const entityDesc = {
|
|||
action: {
|
||||
pay: '支付',
|
||||
refund: '退款',
|
||||
withdrawTransfer: '提现转账',
|
||||
compensate: '补偿',
|
||||
moveIn: '转入',
|
||||
moveOut: '转出',
|
||||
deposit: '充值',
|
||||
withdraw: '提现',
|
||||
tax: '渠道费',
|
||||
}
|
||||
},
|
||||
|
|
@ -53,8 +56,11 @@ export const entityDesc = {
|
|||
icon: {
|
||||
pay: '',
|
||||
refund: '',
|
||||
withdrawTransfer: '',
|
||||
compensate: '',
|
||||
moveIn: '',
|
||||
moveOut: '',
|
||||
deposit: '',
|
||||
withdraw: '',
|
||||
tax: '',
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -0,0 +1,13 @@
|
|||
import { String, Text, Price } from 'oak-domain/lib/types/DataType';
|
||||
import { EntityShape } from 'oak-domain/lib/types/Entity';
|
||||
import { EntityDesc } from 'oak-domain/lib/types';
|
||||
import { Schema as User } from './User';
|
||||
import { Schema as System } from './System';
|
||||
export interface Schema extends EntityShape {
|
||||
price: Price;
|
||||
externalId: String<64>;
|
||||
operator: User;
|
||||
remark?: Text;
|
||||
system: System;
|
||||
}
|
||||
export declare const entityDesc: EntityDesc<Schema>;
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
;
|
||||
export const entityDesc = {
|
||||
locales: {
|
||||
zh_CN: {
|
||||
name: '系统资金移动',
|
||||
attr: {
|
||||
price: '金额',
|
||||
externalId: '外部流水号',
|
||||
operator: '操作者',
|
||||
remark: '备注',
|
||||
system: '所属系统'
|
||||
},
|
||||
},
|
||||
},
|
||||
configuration: {
|
||||
actionType: 'appendOnly',
|
||||
}
|
||||
};
|
||||
|
|
@ -4,14 +4,17 @@ import { EntityDesc } from 'oak-domain/lib/types';
|
|||
import { Schema as Pay } from './Pay';
|
||||
import { Schema as Refund } from './Refund';
|
||||
import { Schema as WithdrawTransfer } from './WithdrawTransfer';
|
||||
import { Schema as SysAccountMove } from './SysAccountMove';
|
||||
import { SysAccountOperType } from '../types/sysAccountOper';
|
||||
export interface Schema extends EntityShape {
|
||||
delta: Price;
|
||||
type: 'pay' | 'refund' | 'withdrawTransfer' | 'compensate' | 'moveIn' | 'moveOut';
|
||||
type: SysAccountOperType;
|
||||
entity: String<32>;
|
||||
entityId: String<64>;
|
||||
pay?: Pay;
|
||||
refund?: Refund;
|
||||
withdrawTransfer?: WithdrawTransfer;
|
||||
sysAccountMove?: SysAccountMove;
|
||||
}
|
||||
export declare const entityDesc: EntityDesc<Schema, '', '', {
|
||||
type: Schema['type'];
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ export const entityDesc = {
|
|||
pay: '关联支付',
|
||||
refund: '关联退款',
|
||||
withdrawTransfer: '关联转账提现',
|
||||
sysAccountMove: '系统资金移动',
|
||||
},
|
||||
v: {
|
||||
type: {
|
||||
|
|
|
|||
|
|
@ -17,5 +17,5 @@ export interface Schema extends AbstractAccount {
|
|||
channels: WithdrawChannel[];
|
||||
enabled: Boolean;
|
||||
}
|
||||
export type Action = 'pay' | 'refund' | 'deposit' | 'withdraw' | 'tax';
|
||||
export type Action = 'pay' | 'refund' | 'withdrawTransfer' | 'compensate' | 'moveIn' | 'moveOut' | 'deposit' | 'tax';
|
||||
export declare const entityDesc: EntityDesc<Schema, Action>;
|
||||
|
|
|
|||
|
|
@ -23,8 +23,11 @@ export const entityDesc = {
|
|||
action: {
|
||||
pay: '支付',
|
||||
refund: '退款',
|
||||
withdrawTransfer: '提现转账',
|
||||
compensate: '补偿',
|
||||
moveIn: '转入',
|
||||
moveOut: '转出',
|
||||
deposit: '充值',
|
||||
withdraw: '提现',
|
||||
tax: '渠道费',
|
||||
}
|
||||
},
|
||||
|
|
@ -33,8 +36,11 @@ export const entityDesc = {
|
|||
icon: {
|
||||
pay: '',
|
||||
refund: '',
|
||||
withdrawTransfer: '',
|
||||
compensate: '',
|
||||
moveIn: '',
|
||||
moveOut: '',
|
||||
deposit: '',
|
||||
withdraw: '',
|
||||
tax: '',
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,5 +16,10 @@
|
|||
"order": {
|
||||
"payAmountNotEnough": "支付的额度总和不足",
|
||||
"nonePay": "没有传入支付信息"
|
||||
},
|
||||
"refund": {
|
||||
"create": {
|
||||
"hasAnotherRefunding": "您有一笔退款正在进行中"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@
|
|||
"error": {
|
||||
"nameQrCodeBothNull": "账号名和二维码不能同时为空",
|
||||
"refundGapDaysNotNegative": "允许退款天数不能为负数或空",
|
||||
"refundCompensateIllegal": "退款补偿百分比必须在0到100之间"
|
||||
"refundCompensateIllegal": "退款补偿百分比必须在0到100之间",
|
||||
"withdrawTransferLossRatioNotNegative": "提现转账费率必须在0到100之间"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import * as Pay from "../Pay/Schema";
|
|||
import * as Refund from "../Refund/Schema";
|
||||
import * as Withdraw from "../Withdraw/Schema";
|
||||
import * as WithdrawTransfer from "../WithdrawTransfer/Schema";
|
||||
type Type = "deposit" | "withdraw" | "consume" | "loan" | "repay" | "withdrawBack" | "earn" | "encash" | "cutoffRefundable" | "tax" | "taxRefund" | "refund" | "refundFailure";
|
||||
type Type = "deposit" | "withdraw" | "consume" | "consumeBack" | "loan" | "repay" | "withdrawBack" | "earn" | "encash" | "cutoffRefundable" | "tax" | "taxRefund" | "refund" | "refundFailure";
|
||||
export type OpSchema = EntityShape & {
|
||||
accountId: ForeignKey<"account">;
|
||||
type: Type;
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ export const desc = {
|
|||
type: {
|
||||
notNull: true,
|
||||
type: "enum",
|
||||
enumeration: ["deposit", "withdraw", "consume", "loan", "repay", "withdrawBack", "earn", "encash", "cutoffRefundable", "tax", "taxRefund", "refund", "refundFailure"]
|
||||
enumeration: ["deposit", "withdraw", "consume", "consumeBack", "loan", "repay", "withdrawBack", "earn", "encash", "cutoffRefundable", "tax", "taxRefund", "refund", "refundFailure"]
|
||||
},
|
||||
totalPlus: {
|
||||
notNull: true,
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ export const style = {
|
|||
withdraw: '#F7DC6F',
|
||||
withdrawBack: '#F7DC6F',
|
||||
consume: '#A569BD',
|
||||
consumeBack: '#009933',
|
||||
loan: '#CD6155',
|
||||
repay: '#82E0AA',
|
||||
earn: '#FF3333',
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
{ "name": "帐号操作", "attr": { "account": "帐号", "type": "类型", "totalPlus": "余额变化", "availPlus": "可用余额变化", "refundablePlus": "可退款余额变化", "total": "操作后余额", "avail": "操作后可用余额", "refundable": "操作后可退款余额", "entity": "关联对象", "entityId": "关联对象Id" }, "v": { "type": { "deposit": "充值", "withdraw": "提现", "consume": "消费", "loan": "抵押", "repay": "偿还", "withdrawBack": "提现未遂", "earn": "赚取", "encash": "兑现", "tax": "渠道费", "taxRefund": "渠道费用退还", "cutoffRefundable": "削减可自由退额度", "refund": "退款", "refundFailure": "退款失败" } } }
|
||||
{ "name": "帐号操作", "attr": { "account": "帐号", "type": "类型", "totalPlus": "余额变化", "availPlus": "可用余额变化", "refundablePlus": "可退款余额变化", "total": "操作后余额", "avail": "操作后可用余额", "refundable": "操作后可退款余额", "entity": "关联对象", "entityId": "关联对象Id" }, "v": { "type": { "deposit": "充值", "withdraw": "提现", "consume": "消费", "consumeBack": "消费退还", "loan": "抵押", "repay": "偿还", "withdrawBack": "提现退还", "earn": "赚取", "encash": "兑现", "tax": "渠道费", "taxRefund": "渠道费用退还", "cutoffRefundable": "削减可自由退额度", "refund": "退款", "refundFailure": "退款失败" } } }
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ import { EntityDef as OfflineAccount } from "./OfflineAccount/Schema";
|
|||
import { EntityDef as Order } from "./Order/Schema";
|
||||
import { EntityDef as Pay } from "./Pay/Schema";
|
||||
import { EntityDef as Refund } from "./Refund/Schema";
|
||||
import { EntityDef as SysAccountMove } from "./SysAccountMove/Schema";
|
||||
import { EntityDef as SysAccountOper } from "./SysAccountOper/Schema";
|
||||
import { EntityDef as WechatPay } from "./WechatPay/Schema";
|
||||
import { EntityDef as Withdraw } from "./Withdraw/Schema";
|
||||
|
|
@ -131,6 +132,7 @@ export type EntityDict = {
|
|||
order: Order;
|
||||
pay: Pay;
|
||||
refund: Refund;
|
||||
sysAccountMove: SysAccountMove;
|
||||
sysAccountOper: SysAccountOper;
|
||||
wechatPay: WechatPay;
|
||||
withdraw: Withdraw;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import { GenericAction } from "oak-domain/lib/actions/action";
|
||||
export type ParticularAction = 'pay' | 'refund' | 'deposit' | 'withdraw' | 'tax';
|
||||
export type ParticularAction = 'pay' | 'refund' | 'withdrawTransfer' | 'compensate' | 'moveIn' | 'moveOut' | 'deposit' | 'tax';
|
||||
export declare const actions: string[];
|
||||
export type Action = GenericAction | ParticularAction | string;
|
||||
export declare const actionDefDict: {};
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
export const actions = ["count", "stat", "download", "select", "aggregate", "create", "remove", "update", "pay", "refund", "deposit", "withdraw", "tax"];
|
||||
export const actions = ["count", "stat", "download", "select", "aggregate", "create", "remove", "update", "pay", "refund", "withdrawTransfer", "compensate", "moveIn", "moveOut", "deposit", "tax"];
|
||||
export const actionDefDict = {};
|
||||
|
|
|
|||
|
|
@ -11,8 +11,11 @@ export const style = {
|
|||
icon: {
|
||||
pay: '',
|
||||
refund: '',
|
||||
withdrawTransfer: '',
|
||||
compensate: '',
|
||||
moveIn: '',
|
||||
moveOut: '',
|
||||
deposit: '',
|
||||
withdraw: '',
|
||||
tax: '',
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
{ "name": "线下账户", "attr": { "type": "类型", "channel": "通道", "name": "用户/帐号", "qrCode": "收款二维码", "taxLossRatio": "商户号手续费(百分比)", "refundCompensateRatio": "退款补偿百分比", "refundGapDays": "(支付后)允许退款的天数", "allowWithdrawTransfer": "允许提现转账", "withdrawTransferLossRatio": "提现转账费率(百分数)", "allowDeposit": "允许主动充值", "allowPay": "允许主动支付", "system": "所属系统", "price": "余额", "pays": "支付", "opers": "操作记录", "channels": "提现通道", "enabled": "是否启用" }, "v": { "type": { "bank": "银行", "alipay": "支付宝", "wechat": "微信", "shouqianba": "收钱吧", "others": "其它" } }, "action": { "pay": "支付", "refund": "退款", "deposit": "充值", "withdraw": "提现", "tax": "渠道费" } }
|
||||
{ "name": "线下账户", "attr": { "type": "类型", "channel": "通道", "name": "用户/帐号", "qrCode": "收款二维码", "taxLossRatio": "商户号手续费(百分比)", "refundCompensateRatio": "退款补偿百分比", "refundGapDays": "(支付后)允许退款的天数", "allowWithdrawTransfer": "允许提现转账", "withdrawTransferLossRatio": "提现转账费率(百分数)", "allowDeposit": "允许主动充值", "allowPay": "允许主动支付", "system": "所属系统", "price": "余额", "pays": "支付", "opers": "操作记录", "channels": "提现通道", "enabled": "是否启用" }, "v": { "type": { "bank": "银行", "alipay": "支付宝", "wechat": "微信", "shouqianba": "收钱吧", "others": "其它" } }, "action": { "pay": "支付", "refund": "退款", "withdrawTransfer": "提现转账", "compensate": "补偿", "moveIn": "转入", "moveOut": "转出", "deposit": "充值", "tax": "渠道费" } }
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ export type OpSchema = EntityShape & {
|
|||
value: String<256>;
|
||||
recursive: Boolean;
|
||||
sourceEntity: String<32>;
|
||||
desc?: String<256> | null;
|
||||
};
|
||||
export type OpAttr = keyof OpSchema;
|
||||
export type Schema = EntityShape & {
|
||||
|
|
@ -17,6 +18,7 @@ export type Schema = EntityShape & {
|
|||
value: String<256>;
|
||||
recursive: Boolean;
|
||||
sourceEntity: String<32>;
|
||||
desc?: String<256> | null;
|
||||
actionAuth$path?: Array<ActionAuth.Schema>;
|
||||
actionAuth$path$$aggr?: AggregationResult<ActionAuth.Schema>;
|
||||
relationAuth$path?: Array<RelationAuth.Schema>;
|
||||
|
|
@ -33,6 +35,7 @@ type AttrFilter = {
|
|||
value: Q_StringValue;
|
||||
recursive: Q_BooleanValue;
|
||||
sourceEntity: Q_StringValue;
|
||||
desc: Q_StringValue;
|
||||
actionAuth$path: ActionAuth.Filter & SubQueryPredicateMetadata;
|
||||
relationAuth$path: RelationAuth.Filter & SubQueryPredicateMetadata;
|
||||
};
|
||||
|
|
@ -48,6 +51,7 @@ export type Projection = {
|
|||
value?: number;
|
||||
recursive?: number;
|
||||
sourceEntity?: number;
|
||||
desc?: number;
|
||||
actionAuth$path?: ActionAuth.Selection & {
|
||||
$entity: "actionAuth";
|
||||
};
|
||||
|
|
@ -80,6 +84,8 @@ export type SortAttr = {
|
|||
recursive: number;
|
||||
} | {
|
||||
sourceEntity: number;
|
||||
} | {
|
||||
desc: number;
|
||||
} | {
|
||||
[k: string]: any;
|
||||
} | OneOf<ExprOp<OpAttr | string>>;
|
||||
|
|
|
|||
|
|
@ -25,6 +25,12 @@ export const desc = {
|
|||
params: {
|
||||
length: 32
|
||||
}
|
||||
},
|
||||
desc: {
|
||||
type: "varchar",
|
||||
params: {
|
||||
length: 256
|
||||
}
|
||||
}
|
||||
},
|
||||
static: true,
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
{ "name": "关系路径", "attr": { "sourceEntity": "源对象", "value": "路径(从dest到source)", "destEntity": "目标对象", "recursive": "是否递归(目标对象)" } }
|
||||
{ "name": "关系路径", "attr": { "sourceEntity": "源对象", "value": "路径", "destEntity": "目标对象", "recursive": "是否递归", "desc": "描述" } }
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ import { desc as offlineAccountDesc } from "./OfflineAccount/Storage";
|
|||
import { desc as orderDesc } from "./Order/Storage";
|
||||
import { desc as payDesc } from "./Pay/Storage";
|
||||
import { desc as refundDesc } from "./Refund/Storage";
|
||||
import { desc as sysAccountMoveDesc } from "./SysAccountMove/Storage";
|
||||
import { desc as sysAccountOperDesc } from "./SysAccountOper/Storage";
|
||||
import { desc as wechatPayDesc } from "./WechatPay/Storage";
|
||||
import { desc as withdrawDesc } from "./Withdraw/Storage";
|
||||
|
|
@ -131,6 +132,7 @@ export const storageSchema = {
|
|||
order: orderDesc,
|
||||
pay: payDesc,
|
||||
refund: refundDesc,
|
||||
sysAccountMove: sysAccountMoveDesc,
|
||||
sysAccountOper: sysAccountOperDesc,
|
||||
wechatPay: wechatPayDesc,
|
||||
withdraw: withdrawDesc,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,185 @@
|
|||
import { ForeignKey } from "oak-domain/lib/types/DataType";
|
||||
import { Q_DateValue, Q_NumberValue, Q_StringValue, NodeId, MakeFilter, ExprOp, ExpressionKey, SubQueryPredicateMetadata } from "oak-domain/lib/types/Demand";
|
||||
import { OneOf } from "oak-domain/lib/types/Polyfill";
|
||||
import { FormCreateData, FormUpdateData, DeduceAggregation, Operation as OakOperation, Selection as OakSelection, MakeAction as OakMakeAction, AggregationResult, EntityShape } from "oak-domain/lib/types/Entity";
|
||||
import { AppendOnlyAction } from "oak-domain/lib/actions/action";
|
||||
import { Price, String, Text } from "oak-domain/lib/types/DataType";
|
||||
import * as User from "../User/Schema";
|
||||
import * as System from "../System/Schema";
|
||||
import * as SysAccountOper from "../SysAccountOper/Schema";
|
||||
export type OpSchema = EntityShape & {
|
||||
price: Price;
|
||||
externalId: String<64>;
|
||||
operatorId: ForeignKey<"user">;
|
||||
remark?: Text | null;
|
||||
systemId: ForeignKey<"system">;
|
||||
};
|
||||
export type OpAttr = keyof OpSchema;
|
||||
export type Schema = EntityShape & {
|
||||
price: Price;
|
||||
externalId: String<64>;
|
||||
operatorId: ForeignKey<"user">;
|
||||
remark?: Text | null;
|
||||
systemId: ForeignKey<"system">;
|
||||
operator: User.Schema;
|
||||
system: System.Schema;
|
||||
sysAccountOper$sysAccountMove?: Array<SysAccountOper.Schema>;
|
||||
sysAccountOper$sysAccountMove$$aggr?: AggregationResult<SysAccountOper.Schema>;
|
||||
} & {
|
||||
[A in ExpressionKey]?: any;
|
||||
};
|
||||
type AttrFilter = {
|
||||
id: Q_StringValue;
|
||||
$$createAt$$: Q_DateValue;
|
||||
$$seq$$: Q_NumberValue;
|
||||
$$updateAt$$: Q_DateValue;
|
||||
price: Q_NumberValue;
|
||||
externalId: Q_StringValue;
|
||||
operatorId: Q_StringValue;
|
||||
operator: User.Filter;
|
||||
remark: Q_StringValue;
|
||||
systemId: Q_StringValue;
|
||||
system: System.Filter;
|
||||
sysAccountOper$sysAccountMove: SysAccountOper.Filter & SubQueryPredicateMetadata;
|
||||
};
|
||||
export type Filter = MakeFilter<AttrFilter & ExprOp<OpAttr | string>>;
|
||||
export type Projection = {
|
||||
"#id"?: NodeId;
|
||||
[k: string]: any;
|
||||
id?: number;
|
||||
$$createAt$$?: number;
|
||||
$$updateAt$$?: number;
|
||||
$$seq$$?: number;
|
||||
price?: number;
|
||||
externalId?: number;
|
||||
operatorId?: number;
|
||||
operator?: User.Projection;
|
||||
remark?: number;
|
||||
systemId?: number;
|
||||
system?: System.Projection;
|
||||
sysAccountOper$sysAccountMove?: SysAccountOper.Selection & {
|
||||
$entity: "sysAccountOper";
|
||||
};
|
||||
sysAccountOper$sysAccountMove$$aggr?: SysAccountOper.Aggregation & {
|
||||
$entity: "sysAccountOper";
|
||||
};
|
||||
} & Partial<ExprOp<OpAttr | string>>;
|
||||
type SysAccountMoveIdProjection = OneOf<{
|
||||
id: number;
|
||||
}>;
|
||||
type UserIdProjection = OneOf<{
|
||||
operatorId: number;
|
||||
}>;
|
||||
type SystemIdProjection = OneOf<{
|
||||
systemId: number;
|
||||
}>;
|
||||
export type SortAttr = {
|
||||
id: number;
|
||||
} | {
|
||||
$$createAt$$: number;
|
||||
} | {
|
||||
$$seq$$: number;
|
||||
} | {
|
||||
$$updateAt$$: number;
|
||||
} | {
|
||||
price: number;
|
||||
} | {
|
||||
externalId: number;
|
||||
} | {
|
||||
operatorId: number;
|
||||
} | {
|
||||
operator: User.SortAttr;
|
||||
} | {
|
||||
remark: number;
|
||||
} | {
|
||||
systemId: number;
|
||||
} | {
|
||||
system: System.SortAttr;
|
||||
} | {
|
||||
[k: string]: any;
|
||||
} | OneOf<ExprOp<OpAttr | string>>;
|
||||
export type SortNode = {
|
||||
$attr: SortAttr;
|
||||
$direction?: "asc" | "desc";
|
||||
};
|
||||
export type Sorter = SortNode[];
|
||||
export type SelectOperation<P extends Object = Projection> = OakSelection<"select", P, Filter, Sorter>;
|
||||
export type Selection<P extends Object = Projection> = SelectOperation<P>;
|
||||
export type Aggregation = DeduceAggregation<Projection, Filter, Sorter>;
|
||||
export type CreateOperationData = FormCreateData<Omit<OpSchema, "operatorId" | "systemId">> & (({
|
||||
operatorId?: never;
|
||||
operator: User.CreateSingleOperation;
|
||||
} | {
|
||||
operatorId: ForeignKey<"operator">;
|
||||
operator?: User.UpdateOperation;
|
||||
} | {
|
||||
operator?: never;
|
||||
operatorId: ForeignKey<"operator">;
|
||||
}) & ({
|
||||
systemId?: never;
|
||||
system: System.CreateSingleOperation;
|
||||
} | {
|
||||
systemId: ForeignKey<"system">;
|
||||
system?: System.UpdateOperation;
|
||||
} | {
|
||||
system?: never;
|
||||
systemId: ForeignKey<"system">;
|
||||
})) & {
|
||||
sysAccountOper$sysAccountMove?: OakOperation<"create", Omit<SysAccountOper.CreateOperationData, "sysAccountMove" | "sysAccountMoveId">[]> | Array<OakOperation<"create", Omit<SysAccountOper.CreateOperationData, "sysAccountMove" | "sysAccountMoveId">>>;
|
||||
};
|
||||
export type CreateSingleOperation = OakOperation<"create", CreateOperationData>;
|
||||
export type CreateMultipleOperation = OakOperation<"create", Array<CreateOperationData>>;
|
||||
export type CreateOperation = CreateSingleOperation | CreateMultipleOperation;
|
||||
export type UpdateOperationData = FormUpdateData<Omit<OpSchema, "operatorId" | "systemId">> & (({
|
||||
operator?: User.CreateSingleOperation;
|
||||
operatorId?: never;
|
||||
} | {
|
||||
operator?: User.UpdateOperation;
|
||||
operatorId?: never;
|
||||
} | {
|
||||
operator?: User.RemoveOperation;
|
||||
operatorId?: never;
|
||||
} | {
|
||||
operator?: never;
|
||||
operatorId?: ForeignKey<"operator">;
|
||||
}) & ({
|
||||
system?: System.CreateSingleOperation;
|
||||
systemId?: never;
|
||||
} | {
|
||||
system?: System.UpdateOperation;
|
||||
systemId?: never;
|
||||
} | {
|
||||
system?: System.RemoveOperation;
|
||||
systemId?: never;
|
||||
} | {
|
||||
system?: never;
|
||||
systemId?: ForeignKey<"system">;
|
||||
})) & {
|
||||
[k: string]: any;
|
||||
sysAccountOper$sysAccountMove?: OakOperation<"create", Omit<SysAccountOper.CreateOperationData, "sysAccountMove" | "sysAccountMoveId">[]> | Array<OakOperation<"create", Omit<SysAccountOper.CreateOperationData, "sysAccountMove" | "sysAccountMoveId">>>;
|
||||
};
|
||||
export type UpdateOperation = OakOperation<"update" | string, UpdateOperationData, Filter, Sorter>;
|
||||
export type RemoveOperationData = {} & (({
|
||||
operator?: User.UpdateOperation | User.RemoveOperation;
|
||||
}) & ({
|
||||
system?: System.UpdateOperation | System.RemoveOperation;
|
||||
}));
|
||||
export type RemoveOperation = OakOperation<"remove", RemoveOperationData, Filter, Sorter>;
|
||||
export type Operation = CreateOperation | UpdateOperation | RemoveOperation;
|
||||
export type UserIdSubQuery = Selection<UserIdProjection>;
|
||||
export type SystemIdSubQuery = Selection<SystemIdProjection>;
|
||||
export type SysAccountMoveIdSubQuery = Selection<SysAccountMoveIdProjection>;
|
||||
export type EntityDef = {
|
||||
Schema: Schema;
|
||||
OpSchema: OpSchema;
|
||||
Action: OakMakeAction<AppendOnlyAction> | string;
|
||||
Selection: Selection;
|
||||
Aggregation: Aggregation;
|
||||
Operation: Operation;
|
||||
Create: CreateOperation;
|
||||
Update: UpdateOperation;
|
||||
Remove: RemoveOperation;
|
||||
CreateSingle: CreateSingleOperation;
|
||||
CreateMulti: CreateMultipleOperation;
|
||||
};
|
||||
export {};
|
||||
|
|
@ -0,0 +1 @@
|
|||
export {};
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
import { StorageDesc } from "oak-domain/lib/types/Storage";
|
||||
import { OpSchema } from "./Schema";
|
||||
export declare const desc: StorageDesc<OpSchema>;
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
import { appendOnlyActions as actions } from "oak-domain/lib/actions/action";
|
||||
export const desc = {
|
||||
attributes: {
|
||||
price: {
|
||||
notNull: true,
|
||||
type: "money"
|
||||
},
|
||||
externalId: {
|
||||
notNull: true,
|
||||
type: "varchar",
|
||||
params: {
|
||||
length: 64
|
||||
}
|
||||
},
|
||||
operatorId: {
|
||||
notNull: true,
|
||||
type: "ref",
|
||||
ref: "user"
|
||||
},
|
||||
remark: {
|
||||
type: "text"
|
||||
},
|
||||
systemId: {
|
||||
notNull: true,
|
||||
type: "ref",
|
||||
ref: "system"
|
||||
}
|
||||
},
|
||||
actionType: "appendOnly",
|
||||
actions
|
||||
};
|
||||
|
|
@ -0,0 +1 @@
|
|||
{ "name": "系统资金移动", "attr": { "price": "金额", "externalId": "外部流水号", "operator": "操作者", "remark": "备注", "system": "所属系统" } }
|
||||
|
|
@ -4,32 +4,37 @@ import { OneOf } from "oak-domain/lib/types/Polyfill";
|
|||
import { FormCreateData, FormUpdateData, DeduceAggregation, Operation as OakOperation, Selection as OakSelection, MakeAction as OakMakeAction, EntityShape } from "oak-domain/lib/types/Entity";
|
||||
import { AppendOnlyAction } from "oak-domain/lib/actions/action";
|
||||
import { Price, String } from "oak-domain/lib/types/DataType";
|
||||
import { SysAccountOperType } from "../../types/sysAccountOper";
|
||||
import * as Pay from "../Pay/Schema";
|
||||
import * as Refund from "../Refund/Schema";
|
||||
import * as WithdrawTransfer from "../WithdrawTransfer/Schema";
|
||||
import * as SysAccountMove from "../SysAccountMove/Schema";
|
||||
import * as OfflineAccount from "../OfflineAccount/Schema";
|
||||
import * as WpAccount from "../WpAccount/Schema";
|
||||
export type OpSchema = EntityShape & {
|
||||
delta: Price;
|
||||
type: "pay" | "refund" | "withdrawTransfer" | "compensate" | "moveIn" | "moveOut";
|
||||
type: SysAccountOperType;
|
||||
entity: "offlineAccount" | "wpAccount" | string;
|
||||
entityId: String<64>;
|
||||
payId?: ForeignKey<"pay"> | null;
|
||||
refundId?: ForeignKey<"refund"> | null;
|
||||
withdrawTransferId?: ForeignKey<"withdrawTransfer"> | null;
|
||||
sysAccountMoveId?: ForeignKey<"sysAccountMove"> | null;
|
||||
};
|
||||
export type OpAttr = keyof OpSchema;
|
||||
export type Schema = EntityShape & {
|
||||
delta: Price;
|
||||
type: "pay" | "refund" | "withdrawTransfer" | "compensate" | "moveIn" | "moveOut";
|
||||
type: SysAccountOperType;
|
||||
entity: "offlineAccount" | "wpAccount" | string;
|
||||
entityId: String<64>;
|
||||
payId?: ForeignKey<"pay"> | null;
|
||||
refundId?: ForeignKey<"refund"> | null;
|
||||
withdrawTransferId?: ForeignKey<"withdrawTransfer"> | null;
|
||||
sysAccountMoveId?: ForeignKey<"sysAccountMove"> | null;
|
||||
pay?: Pay.Schema | null;
|
||||
refund?: Refund.Schema | null;
|
||||
withdrawTransfer?: WithdrawTransfer.Schema | null;
|
||||
sysAccountMove?: SysAccountMove.Schema | null;
|
||||
offlineAccount?: OfflineAccount.Schema;
|
||||
wpAccount?: WpAccount.Schema;
|
||||
} & {
|
||||
|
|
@ -41,7 +46,7 @@ type AttrFilter = {
|
|||
$$seq$$: Q_NumberValue;
|
||||
$$updateAt$$: Q_DateValue;
|
||||
delta: Q_NumberValue;
|
||||
type: Q_EnumValue<"pay" | "refund" | "withdrawTransfer" | "compensate" | "moveIn" | "moveOut">;
|
||||
type: Q_EnumValue<SysAccountOperType>;
|
||||
entity: Q_EnumValue<"offlineAccount" | "wpAccount" | string>;
|
||||
entityId: Q_StringValue;
|
||||
payId: Q_StringValue;
|
||||
|
|
@ -50,6 +55,8 @@ type AttrFilter = {
|
|||
refund: Refund.Filter;
|
||||
withdrawTransferId: Q_StringValue;
|
||||
withdrawTransfer: WithdrawTransfer.Filter;
|
||||
sysAccountMoveId: Q_StringValue;
|
||||
sysAccountMove: SysAccountMove.Filter;
|
||||
offlineAccount: OfflineAccount.Filter;
|
||||
wpAccount: WpAccount.Filter;
|
||||
};
|
||||
|
|
@ -71,6 +78,8 @@ export type Projection = {
|
|||
refund?: Refund.Projection;
|
||||
withdrawTransferId?: number;
|
||||
withdrawTransfer?: WithdrawTransfer.Projection;
|
||||
sysAccountMoveId?: number;
|
||||
sysAccountMove?: SysAccountMove.Projection;
|
||||
offlineAccount?: OfflineAccount.Projection;
|
||||
wpAccount?: WpAccount.Projection;
|
||||
} & Partial<ExprOp<OpAttr | string>>;
|
||||
|
|
@ -86,6 +95,9 @@ type RefundIdProjection = OneOf<{
|
|||
type WithdrawTransferIdProjection = OneOf<{
|
||||
withdrawTransferId: number;
|
||||
}>;
|
||||
type SysAccountMoveIdProjection = OneOf<{
|
||||
sysAccountMoveId: number;
|
||||
}>;
|
||||
type OfflineAccountIdProjection = OneOf<{
|
||||
entityId: number;
|
||||
}>;
|
||||
|
|
@ -120,6 +132,10 @@ export type SortAttr = {
|
|||
withdrawTransferId: number;
|
||||
} | {
|
||||
withdrawTransfer: WithdrawTransfer.SortAttr;
|
||||
} | {
|
||||
sysAccountMoveId: number;
|
||||
} | {
|
||||
sysAccountMove: SysAccountMove.SortAttr;
|
||||
} | {
|
||||
offlineAccount: OfflineAccount.SortAttr;
|
||||
} | {
|
||||
|
|
@ -135,7 +151,7 @@ export type Sorter = SortNode[];
|
|||
export type SelectOperation<P extends Object = Projection> = OakSelection<"select", P, Filter, Sorter>;
|
||||
export type Selection<P extends Object = Projection> = SelectOperation<P>;
|
||||
export type Aggregation = DeduceAggregation<Projection, Filter, Sorter>;
|
||||
export type CreateOperationData = FormCreateData<Omit<OpSchema, "entity" | "entityId" | "payId" | "refundId" | "withdrawTransferId">> & (({
|
||||
export type CreateOperationData = FormCreateData<Omit<OpSchema, "entity" | "entityId" | "payId" | "refundId" | "withdrawTransferId" | "sysAccountMoveId">> & (({
|
||||
payId?: never;
|
||||
pay?: Pay.CreateSingleOperation;
|
||||
} | {
|
||||
|
|
@ -162,6 +178,12 @@ export type CreateOperationData = FormCreateData<Omit<OpSchema, "entity" | "enti
|
|||
} | {
|
||||
withdrawTransfer?: never;
|
||||
withdrawTransferId?: ForeignKey<"withdrawTransfer">;
|
||||
}) & ({
|
||||
sysAccountMoveId?: never;
|
||||
sysAccountMove?: SysAccountMove.CreateSingleOperation;
|
||||
} | {
|
||||
sysAccountMove?: never;
|
||||
sysAccountMoveId?: ForeignKey<"sysAccountMove">;
|
||||
})) & ({
|
||||
entity?: never;
|
||||
entityId?: never;
|
||||
|
|
@ -194,7 +216,7 @@ export type CreateOperationData = FormCreateData<Omit<OpSchema, "entity" | "enti
|
|||
export type CreateSingleOperation = OakOperation<"create", CreateOperationData>;
|
||||
export type CreateMultipleOperation = OakOperation<"create", Array<CreateOperationData>>;
|
||||
export type CreateOperation = CreateSingleOperation | CreateMultipleOperation;
|
||||
export type UpdateOperationData = FormUpdateData<Omit<OpSchema, "entity" | "entityId" | "payId" | "refundId" | "withdrawTransferId">> & (({
|
||||
export type UpdateOperationData = FormUpdateData<Omit<OpSchema, "entity" | "entityId" | "payId" | "refundId" | "withdrawTransferId" | "sysAccountMoveId">> & (({
|
||||
pay?: Pay.CreateSingleOperation;
|
||||
payId?: never;
|
||||
} | {
|
||||
|
|
@ -230,6 +252,12 @@ export type UpdateOperationData = FormUpdateData<Omit<OpSchema, "entity" | "enti
|
|||
} | {
|
||||
withdrawTransfer?: never;
|
||||
withdrawTransferId?: ForeignKey<"withdrawTransfer"> | null;
|
||||
}) & ({
|
||||
sysAccountMove?: SysAccountMove.CreateSingleOperation;
|
||||
sysAccountMoveId?: never;
|
||||
} | {
|
||||
sysAccountMove?: never;
|
||||
sysAccountMoveId?: ForeignKey<"sysAccountMove"> | null;
|
||||
})) & ({
|
||||
offlineAccount?: OfflineAccount.CreateSingleOperation | OfflineAccount.UpdateOperation | OfflineAccount.RemoveOperation;
|
||||
entityId?: never;
|
||||
|
|
@ -265,6 +293,7 @@ export type Operation = CreateOperation | UpdateOperation | RemoveOperation;
|
|||
export type PayIdSubQuery = Selection<PayIdProjection>;
|
||||
export type RefundIdSubQuery = Selection<RefundIdProjection>;
|
||||
export type WithdrawTransferIdSubQuery = Selection<WithdrawTransferIdProjection>;
|
||||
export type SysAccountMoveIdSubQuery = Selection<SysAccountMoveIdProjection>;
|
||||
export type OfflineAccountIdSubQuery = Selection<OfflineAccountIdProjection>;
|
||||
export type WpAccountIdSubQuery = Selection<WpAccountIdProjection>;
|
||||
export type SysAccountOperIdSubQuery = Selection<SysAccountOperIdProjection>;
|
||||
|
|
|
|||
|
|
@ -36,6 +36,10 @@ export const desc = {
|
|||
withdrawTransferId: {
|
||||
type: "ref",
|
||||
ref: "withdrawTransfer"
|
||||
},
|
||||
sysAccountMoveId: {
|
||||
type: "ref",
|
||||
ref: "sysAccountMove"
|
||||
}
|
||||
},
|
||||
actionType: "appendOnly",
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
{ "name": "系统账户操作", "attr": { "type": "类型", "delta": "余额变化", "entity": "关联对象", "entityId": "关联对象Id", "pay": "关联支付", "refund": "关联退款", "withdrawTransfer": "关联转账提现" }, "v": { "type": { "withdrawTransfer": "提现转账", "pay": "支付", "refund": "退款", "compensate": "补偿", "moveIn": "转入", "moveOut": "转出" } } }
|
||||
{ "name": "系统账户操作", "attr": { "type": "类型", "delta": "余额变化", "entity": "关联对象", "entityId": "关联对象Id", "pay": "关联支付", "refund": "关联退款", "withdrawTransfer": "关联转账提现", "sysAccountMove": "系统资金移动" }, "v": { "type": { "withdrawTransfer": "提现转账", "pay": "支付", "refund": "退款", "compensate": "补偿", "moveIn": "转入", "moveOut": "转出" } } }
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ import * as UserSystem from "../UserSystem/Schema";
|
|||
import * as Account from "../Account/Schema";
|
||||
import * as OfflineAccount from "../OfflineAccount/Schema";
|
||||
import * as Order from "../Order/Schema";
|
||||
import * as SysAccountMove from "../SysAccountMove/Schema";
|
||||
import * as WechatPay from "../WechatPay/Schema";
|
||||
import * as WithdrawAccount from "../WithdrawAccount/Schema";
|
||||
import * as WithdrawChannel from "../WithdrawChannel/Schema";
|
||||
|
|
@ -76,6 +77,8 @@ export type Schema = EntityShape & {
|
|||
offlineAccount$system$$aggr?: AggregationResult<OfflineAccount.Schema>;
|
||||
order$system?: Array<Order.Schema>;
|
||||
order$system$$aggr?: AggregationResult<Order.Schema>;
|
||||
sysAccountMove$system?: Array<SysAccountMove.Schema>;
|
||||
sysAccountMove$system$$aggr?: AggregationResult<SysAccountMove.Schema>;
|
||||
wechatPay$system?: Array<WechatPay.Schema>;
|
||||
wechatPay$system$$aggr?: AggregationResult<WechatPay.Schema>;
|
||||
withdrawAccount$ofSystem?: Array<WithdrawAccount.Schema>;
|
||||
|
|
@ -114,6 +117,7 @@ type AttrFilter = {
|
|||
account$entity: Account.Filter & SubQueryPredicateMetadata;
|
||||
offlineAccount$system: OfflineAccount.Filter & SubQueryPredicateMetadata;
|
||||
order$system: Order.Filter & SubQueryPredicateMetadata;
|
||||
sysAccountMove$system: SysAccountMove.Filter & SubQueryPredicateMetadata;
|
||||
wechatPay$system: WechatPay.Filter & SubQueryPredicateMetadata;
|
||||
withdrawAccount$ofSystem: WithdrawAccount.Filter & SubQueryPredicateMetadata;
|
||||
withdrawAccount$entity: WithdrawAccount.Filter & SubQueryPredicateMetadata;
|
||||
|
|
@ -193,6 +197,12 @@ export type Projection = {
|
|||
order$system$$aggr?: Order.Aggregation & {
|
||||
$entity: "order";
|
||||
};
|
||||
sysAccountMove$system?: SysAccountMove.Selection & {
|
||||
$entity: "sysAccountMove";
|
||||
};
|
||||
sysAccountMove$system$$aggr?: SysAccountMove.Aggregation & {
|
||||
$entity: "sysAccountMove";
|
||||
};
|
||||
wechatPay$system?: WechatPay.Selection & {
|
||||
$entity: "wechatPay";
|
||||
};
|
||||
|
|
@ -294,6 +304,7 @@ export type CreateOperationData = FormCreateData<Omit<OpSchema, "entity" | "enti
|
|||
account$entity?: OakOperation<Account.UpdateOperation["action"], Omit<Account.UpdateOperationData, "entity" | "entityId">, Omit<Account.Filter, "entity" | "entityId">> | OakOperation<"create", Omit<Account.CreateOperationData, "entity" | "entityId">[]> | Array<OakOperation<"create", Omit<Account.CreateOperationData, "entity" | "entityId">> | OakOperation<Account.UpdateOperation["action"], Omit<Account.UpdateOperationData, "entity" | "entityId">, Omit<Account.Filter, "entity" | "entityId">>>;
|
||||
offlineAccount$system?: OakOperation<OfflineAccount.UpdateOperation["action"], Omit<OfflineAccount.UpdateOperationData, "system" | "systemId">, Omit<OfflineAccount.Filter, "system" | "systemId">> | OakOperation<"create", Omit<OfflineAccount.CreateOperationData, "system" | "systemId">[]> | Array<OakOperation<"create", Omit<OfflineAccount.CreateOperationData, "system" | "systemId">> | OakOperation<OfflineAccount.UpdateOperation["action"], Omit<OfflineAccount.UpdateOperationData, "system" | "systemId">, Omit<OfflineAccount.Filter, "system" | "systemId">>>;
|
||||
order$system?: OakOperation<Order.UpdateOperation["action"], Omit<Order.UpdateOperationData, "system" | "systemId">, Omit<Order.Filter, "system" | "systemId">> | OakOperation<"create", Omit<Order.CreateOperationData, "system" | "systemId">[]> | Array<OakOperation<"create", Omit<Order.CreateOperationData, "system" | "systemId">> | OakOperation<Order.UpdateOperation["action"], Omit<Order.UpdateOperationData, "system" | "systemId">, Omit<Order.Filter, "system" | "systemId">>>;
|
||||
sysAccountMove$system?: OakOperation<"create", Omit<SysAccountMove.CreateOperationData, "system" | "systemId">[]> | Array<OakOperation<"create", Omit<SysAccountMove.CreateOperationData, "system" | "systemId">>>;
|
||||
wechatPay$system?: OakOperation<WechatPay.UpdateOperation["action"], Omit<WechatPay.UpdateOperationData, "system" | "systemId">, Omit<WechatPay.Filter, "system" | "systemId">> | OakOperation<"create", Omit<WechatPay.CreateOperationData, "system" | "systemId">[]> | Array<OakOperation<"create", Omit<WechatPay.CreateOperationData, "system" | "systemId">> | OakOperation<WechatPay.UpdateOperation["action"], Omit<WechatPay.UpdateOperationData, "system" | "systemId">, Omit<WechatPay.Filter, "system" | "systemId">>>;
|
||||
withdrawAccount$ofSystem?: OakOperation<WithdrawAccount.UpdateOperation["action"], Omit<WithdrawAccount.UpdateOperationData, "ofSystem" | "ofSystemId">, Omit<WithdrawAccount.Filter, "ofSystem" | "ofSystemId">> | OakOperation<"create", Omit<WithdrawAccount.CreateOperationData, "ofSystem" | "ofSystemId">[]> | Array<OakOperation<"create", Omit<WithdrawAccount.CreateOperationData, "ofSystem" | "ofSystemId">> | OakOperation<WithdrawAccount.UpdateOperation["action"], Omit<WithdrawAccount.UpdateOperationData, "ofSystem" | "ofSystemId">, Omit<WithdrawAccount.Filter, "ofSystem" | "ofSystemId">>>;
|
||||
withdrawAccount$entity?: OakOperation<WithdrawAccount.UpdateOperation["action"], Omit<WithdrawAccount.UpdateOperationData, "entity" | "entityId">, Omit<WithdrawAccount.Filter, "entity" | "entityId">> | OakOperation<"create", Omit<WithdrawAccount.CreateOperationData, "entity" | "entityId">[]> | Array<OakOperation<"create", Omit<WithdrawAccount.CreateOperationData, "entity" | "entityId">> | OakOperation<WithdrawAccount.UpdateOperation["action"], Omit<WithdrawAccount.UpdateOperationData, "entity" | "entityId">, Omit<WithdrawAccount.Filter, "entity" | "entityId">>>;
|
||||
|
|
@ -326,6 +337,7 @@ export type UpdateOperationData = FormUpdateData<Omit<OpSchema, "platformId">> &
|
|||
account$entity?: OakOperation<Account.UpdateOperation["action"], Omit<Account.UpdateOperationData, "entity" | "entityId">, Omit<Account.Filter, "entity" | "entityId">> | OakOperation<Account.RemoveOperation["action"], Omit<Account.RemoveOperationData, "entity" | "entityId">, Omit<Account.Filter, "entity" | "entityId">> | OakOperation<"create", Omit<Account.CreateOperationData, "entity" | "entityId">[]> | Array<OakOperation<"create", Omit<Account.CreateOperationData, "entity" | "entityId">> | OakOperation<Account.UpdateOperation["action"], Omit<Account.UpdateOperationData, "entity" | "entityId">, Omit<Account.Filter, "entity" | "entityId">> | OakOperation<Account.RemoveOperation["action"], Omit<Account.RemoveOperationData, "entity" | "entityId">, Omit<Account.Filter, "entity" | "entityId">>>;
|
||||
offlineAccount$system?: OakOperation<OfflineAccount.UpdateOperation["action"], Omit<OfflineAccount.UpdateOperationData, "system" | "systemId">, Omit<OfflineAccount.Filter, "system" | "systemId">> | OakOperation<OfflineAccount.RemoveOperation["action"], Omit<OfflineAccount.RemoveOperationData, "system" | "systemId">, Omit<OfflineAccount.Filter, "system" | "systemId">> | OakOperation<"create", Omit<OfflineAccount.CreateOperationData, "system" | "systemId">[]> | Array<OakOperation<"create", Omit<OfflineAccount.CreateOperationData, "system" | "systemId">> | OakOperation<OfflineAccount.UpdateOperation["action"], Omit<OfflineAccount.UpdateOperationData, "system" | "systemId">, Omit<OfflineAccount.Filter, "system" | "systemId">> | OakOperation<OfflineAccount.RemoveOperation["action"], Omit<OfflineAccount.RemoveOperationData, "system" | "systemId">, Omit<OfflineAccount.Filter, "system" | "systemId">>>;
|
||||
order$system?: OakOperation<Order.UpdateOperation["action"], Omit<Order.UpdateOperationData, "system" | "systemId">, Omit<Order.Filter, "system" | "systemId">> | OakOperation<Order.RemoveOperation["action"], Omit<Order.RemoveOperationData, "system" | "systemId">, Omit<Order.Filter, "system" | "systemId">> | OakOperation<"create", Omit<Order.CreateOperationData, "system" | "systemId">[]> | Array<OakOperation<"create", Omit<Order.CreateOperationData, "system" | "systemId">> | OakOperation<Order.UpdateOperation["action"], Omit<Order.UpdateOperationData, "system" | "systemId">, Omit<Order.Filter, "system" | "systemId">> | OakOperation<Order.RemoveOperation["action"], Omit<Order.RemoveOperationData, "system" | "systemId">, Omit<Order.Filter, "system" | "systemId">>>;
|
||||
sysAccountMove$system?: OakOperation<"create", Omit<SysAccountMove.CreateOperationData, "system" | "systemId">[]> | Array<OakOperation<"create", Omit<SysAccountMove.CreateOperationData, "system" | "systemId">>>;
|
||||
wechatPay$system?: OakOperation<WechatPay.UpdateOperation["action"], Omit<WechatPay.UpdateOperationData, "system" | "systemId">, Omit<WechatPay.Filter, "system" | "systemId">> | OakOperation<WechatPay.RemoveOperation["action"], Omit<WechatPay.RemoveOperationData, "system" | "systemId">, Omit<WechatPay.Filter, "system" | "systemId">> | OakOperation<"create", Omit<WechatPay.CreateOperationData, "system" | "systemId">[]> | Array<OakOperation<"create", Omit<WechatPay.CreateOperationData, "system" | "systemId">> | OakOperation<WechatPay.UpdateOperation["action"], Omit<WechatPay.UpdateOperationData, "system" | "systemId">, Omit<WechatPay.Filter, "system" | "systemId">> | OakOperation<WechatPay.RemoveOperation["action"], Omit<WechatPay.RemoveOperationData, "system" | "systemId">, Omit<WechatPay.Filter, "system" | "systemId">>>;
|
||||
withdrawAccount$ofSystem?: OakOperation<WithdrawAccount.UpdateOperation["action"], Omit<WithdrawAccount.UpdateOperationData, "ofSystem" | "ofSystemId">, Omit<WithdrawAccount.Filter, "ofSystem" | "ofSystemId">> | OakOperation<WithdrawAccount.RemoveOperation["action"], Omit<WithdrawAccount.RemoveOperationData, "ofSystem" | "ofSystemId">, Omit<WithdrawAccount.Filter, "ofSystem" | "ofSystemId">> | OakOperation<"create", Omit<WithdrawAccount.CreateOperationData, "ofSystem" | "ofSystemId">[]> | Array<OakOperation<"create", Omit<WithdrawAccount.CreateOperationData, "ofSystem" | "ofSystemId">> | OakOperation<WithdrawAccount.UpdateOperation["action"], Omit<WithdrawAccount.UpdateOperationData, "ofSystem" | "ofSystemId">, Omit<WithdrawAccount.Filter, "ofSystem" | "ofSystemId">> | OakOperation<WithdrawAccount.RemoveOperation["action"], Omit<WithdrawAccount.RemoveOperationData, "ofSystem" | "ofSystemId">, Omit<WithdrawAccount.Filter, "ofSystem" | "ofSystemId">>>;
|
||||
withdrawAccount$entity?: OakOperation<WithdrawAccount.UpdateOperation["action"], Omit<WithdrawAccount.UpdateOperationData, "entity" | "entityId">, Omit<WithdrawAccount.Filter, "entity" | "entityId">> | OakOperation<WithdrawAccount.RemoveOperation["action"], Omit<WithdrawAccount.RemoveOperationData, "entity" | "entityId">, Omit<WithdrawAccount.Filter, "entity" | "entityId">> | OakOperation<"create", Omit<WithdrawAccount.CreateOperationData, "entity" | "entityId">[]> | Array<OakOperation<"create", Omit<WithdrawAccount.CreateOperationData, "entity" | "entityId">> | OakOperation<WithdrawAccount.UpdateOperation["action"], Omit<WithdrawAccount.UpdateOperationData, "entity" | "entityId">, Omit<WithdrawAccount.Filter, "entity" | "entityId">> | OakOperation<WithdrawAccount.RemoveOperation["action"], Omit<WithdrawAccount.RemoveOperationData, "entity" | "entityId">, Omit<WithdrawAccount.Filter, "entity" | "entityId">>>;
|
||||
|
|
|
|||
|
|
@ -34,7 +34,8 @@ export const desc = {
|
|||
: {
|
||||
type: "object"
|
||||
},
|
||||
entity: {
|
||||
entity // 如果为true,则按照渠道taxLossRatio和refundCompensateRatio进行扣取(如果因为depositLossRatio已经大于taxLossRatio,则全额退款)
|
||||
: {
|
||||
type: "varchar",
|
||||
params: {
|
||||
length: 32
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import * as Deposit from "../Deposit/Schema";
|
|||
import * as Order from "../Order/Schema";
|
||||
import * as Pay from "../Pay/Schema";
|
||||
import * as Refund from "../Refund/Schema";
|
||||
import * as SysAccountMove from "../SysAccountMove/Schema";
|
||||
import * as Withdraw from "../Withdraw/Schema";
|
||||
import * as WithdrawTransfer from "../WithdrawTransfer/Schema";
|
||||
import * as ModiEntity from "../ModiEntity/Schema";
|
||||
|
|
@ -108,6 +109,8 @@ export type Schema = EntityShape & {
|
|||
pay$creator$$aggr?: AggregationResult<Pay.Schema>;
|
||||
refund$creator?: Array<Refund.Schema>;
|
||||
refund$creator$$aggr?: AggregationResult<Refund.Schema>;
|
||||
sysAccountMove$operator?: Array<SysAccountMove.Schema>;
|
||||
sysAccountMove$operator$$aggr?: AggregationResult<SysAccountMove.Schema>;
|
||||
withdraw$creator?: Array<Withdraw.Schema>;
|
||||
withdraw$creator$$aggr?: AggregationResult<Withdraw.Schema>;
|
||||
withdrawTransfer$operator?: Array<WithdrawTransfer.Schema>;
|
||||
|
|
@ -171,6 +174,7 @@ type AttrFilter = {
|
|||
order$creator: Order.Filter & SubQueryPredicateMetadata;
|
||||
pay$creator: Pay.Filter & SubQueryPredicateMetadata;
|
||||
refund$creator: Refund.Filter & SubQueryPredicateMetadata;
|
||||
sysAccountMove$operator: SysAccountMove.Filter & SubQueryPredicateMetadata;
|
||||
withdraw$creator: Withdraw.Filter & SubQueryPredicateMetadata;
|
||||
withdrawTransfer$operator: WithdrawTransfer.Filter & SubQueryPredicateMetadata;
|
||||
withdrawTransfer$creator: WithdrawTransfer.Filter & SubQueryPredicateMetadata;
|
||||
|
|
@ -335,6 +339,12 @@ export type Projection = {
|
|||
refund$creator$$aggr?: Refund.Aggregation & {
|
||||
$entity: "refund";
|
||||
};
|
||||
sysAccountMove$operator?: SysAccountMove.Selection & {
|
||||
$entity: "sysAccountMove";
|
||||
};
|
||||
sysAccountMove$operator$$aggr?: SysAccountMove.Aggregation & {
|
||||
$entity: "sysAccountMove";
|
||||
};
|
||||
withdraw$creator?: Withdraw.Selection & {
|
||||
$entity: "withdraw";
|
||||
};
|
||||
|
|
@ -477,6 +487,7 @@ export type CreateOperationData = FormCreateData<Omit<OpSchema, "refId">> & (({
|
|||
order$creator?: OakOperation<Order.UpdateOperation["action"], Omit<Order.UpdateOperationData, "creator" | "creatorId">, Omit<Order.Filter, "creator" | "creatorId">> | OakOperation<"create", Omit<Order.CreateOperationData, "creator" | "creatorId">[]> | Array<OakOperation<"create", Omit<Order.CreateOperationData, "creator" | "creatorId">> | OakOperation<Order.UpdateOperation["action"], Omit<Order.UpdateOperationData, "creator" | "creatorId">, Omit<Order.Filter, "creator" | "creatorId">>>;
|
||||
pay$creator?: OakOperation<Pay.UpdateOperation["action"], Omit<Pay.UpdateOperationData, "creator" | "creatorId">, Omit<Pay.Filter, "creator" | "creatorId">> | OakOperation<"create", Omit<Pay.CreateOperationData, "creator" | "creatorId">[]> | Array<OakOperation<"create", Omit<Pay.CreateOperationData, "creator" | "creatorId">> | OakOperation<Pay.UpdateOperation["action"], Omit<Pay.UpdateOperationData, "creator" | "creatorId">, Omit<Pay.Filter, "creator" | "creatorId">>>;
|
||||
refund$creator?: OakOperation<Refund.UpdateOperation["action"], Omit<Refund.UpdateOperationData, "creator" | "creatorId">, Omit<Refund.Filter, "creator" | "creatorId">> | OakOperation<"create", Omit<Refund.CreateOperationData, "creator" | "creatorId">[]> | Array<OakOperation<"create", Omit<Refund.CreateOperationData, "creator" | "creatorId">> | OakOperation<Refund.UpdateOperation["action"], Omit<Refund.UpdateOperationData, "creator" | "creatorId">, Omit<Refund.Filter, "creator" | "creatorId">>>;
|
||||
sysAccountMove$operator?: OakOperation<"create", Omit<SysAccountMove.CreateOperationData, "operator" | "operatorId">[]> | Array<OakOperation<"create", Omit<SysAccountMove.CreateOperationData, "operator" | "operatorId">>>;
|
||||
withdraw$creator?: OakOperation<Withdraw.UpdateOperation["action"], Omit<Withdraw.UpdateOperationData, "creator" | "creatorId">, Omit<Withdraw.Filter, "creator" | "creatorId">> | OakOperation<"create", Omit<Withdraw.CreateOperationData, "creator" | "creatorId">[]> | Array<OakOperation<"create", Omit<Withdraw.CreateOperationData, "creator" | "creatorId">> | OakOperation<Withdraw.UpdateOperation["action"], Omit<Withdraw.UpdateOperationData, "creator" | "creatorId">, Omit<Withdraw.Filter, "creator" | "creatorId">>>;
|
||||
withdrawTransfer$operator?: OakOperation<WithdrawTransfer.UpdateOperation["action"], Omit<WithdrawTransfer.UpdateOperationData, "operator" | "operatorId">, Omit<WithdrawTransfer.Filter, "operator" | "operatorId">> | OakOperation<"create", Omit<WithdrawTransfer.CreateOperationData, "operator" | "operatorId">[]> | Array<OakOperation<"create", Omit<WithdrawTransfer.CreateOperationData, "operator" | "operatorId">> | OakOperation<WithdrawTransfer.UpdateOperation["action"], Omit<WithdrawTransfer.UpdateOperationData, "operator" | "operatorId">, Omit<WithdrawTransfer.Filter, "operator" | "operatorId">>>;
|
||||
withdrawTransfer$creator?: OakOperation<WithdrawTransfer.UpdateOperation["action"], Omit<WithdrawTransfer.UpdateOperationData, "creator" | "creatorId">, Omit<WithdrawTransfer.Filter, "creator" | "creatorId">> | OakOperation<"create", Omit<WithdrawTransfer.CreateOperationData, "creator" | "creatorId">[]> | Array<OakOperation<"create", Omit<WithdrawTransfer.CreateOperationData, "creator" | "creatorId">> | OakOperation<WithdrawTransfer.UpdateOperation["action"], Omit<WithdrawTransfer.UpdateOperationData, "creator" | "creatorId">, Omit<WithdrawTransfer.Filter, "creator" | "creatorId">>>;
|
||||
|
|
@ -527,6 +538,7 @@ export type UpdateOperationData = FormUpdateData<Omit<OpSchema, "refId">> & (({
|
|||
order$creator?: OakOperation<Order.UpdateOperation["action"], Omit<Order.UpdateOperationData, "creator" | "creatorId">, Omit<Order.Filter, "creator" | "creatorId">> | OakOperation<Order.RemoveOperation["action"], Omit<Order.RemoveOperationData, "creator" | "creatorId">, Omit<Order.Filter, "creator" | "creatorId">> | OakOperation<"create", Omit<Order.CreateOperationData, "creator" | "creatorId">[]> | Array<OakOperation<"create", Omit<Order.CreateOperationData, "creator" | "creatorId">> | OakOperation<Order.UpdateOperation["action"], Omit<Order.UpdateOperationData, "creator" | "creatorId">, Omit<Order.Filter, "creator" | "creatorId">> | OakOperation<Order.RemoveOperation["action"], Omit<Order.RemoveOperationData, "creator" | "creatorId">, Omit<Order.Filter, "creator" | "creatorId">>>;
|
||||
pay$creator?: OakOperation<Pay.UpdateOperation["action"], Omit<Pay.UpdateOperationData, "creator" | "creatorId">, Omit<Pay.Filter, "creator" | "creatorId">> | OakOperation<Pay.RemoveOperation["action"], Omit<Pay.RemoveOperationData, "creator" | "creatorId">, Omit<Pay.Filter, "creator" | "creatorId">> | OakOperation<"create", Omit<Pay.CreateOperationData, "creator" | "creatorId">[]> | Array<OakOperation<"create", Omit<Pay.CreateOperationData, "creator" | "creatorId">> | OakOperation<Pay.UpdateOperation["action"], Omit<Pay.UpdateOperationData, "creator" | "creatorId">, Omit<Pay.Filter, "creator" | "creatorId">> | OakOperation<Pay.RemoveOperation["action"], Omit<Pay.RemoveOperationData, "creator" | "creatorId">, Omit<Pay.Filter, "creator" | "creatorId">>>;
|
||||
refund$creator?: OakOperation<Refund.UpdateOperation["action"], Omit<Refund.UpdateOperationData, "creator" | "creatorId">, Omit<Refund.Filter, "creator" | "creatorId">> | OakOperation<Refund.RemoveOperation["action"], Omit<Refund.RemoveOperationData, "creator" | "creatorId">, Omit<Refund.Filter, "creator" | "creatorId">> | OakOperation<"create", Omit<Refund.CreateOperationData, "creator" | "creatorId">[]> | Array<OakOperation<"create", Omit<Refund.CreateOperationData, "creator" | "creatorId">> | OakOperation<Refund.UpdateOperation["action"], Omit<Refund.UpdateOperationData, "creator" | "creatorId">, Omit<Refund.Filter, "creator" | "creatorId">> | OakOperation<Refund.RemoveOperation["action"], Omit<Refund.RemoveOperationData, "creator" | "creatorId">, Omit<Refund.Filter, "creator" | "creatorId">>>;
|
||||
sysAccountMove$operator?: OakOperation<"create", Omit<SysAccountMove.CreateOperationData, "operator" | "operatorId">[]> | Array<OakOperation<"create", Omit<SysAccountMove.CreateOperationData, "operator" | "operatorId">>>;
|
||||
withdraw$creator?: OakOperation<Withdraw.UpdateOperation["action"], Omit<Withdraw.UpdateOperationData, "creator" | "creatorId">, Omit<Withdraw.Filter, "creator" | "creatorId">> | OakOperation<Withdraw.RemoveOperation["action"], Omit<Withdraw.RemoveOperationData, "creator" | "creatorId">, Omit<Withdraw.Filter, "creator" | "creatorId">> | OakOperation<"create", Omit<Withdraw.CreateOperationData, "creator" | "creatorId">[]> | Array<OakOperation<"create", Omit<Withdraw.CreateOperationData, "creator" | "creatorId">> | OakOperation<Withdraw.UpdateOperation["action"], Omit<Withdraw.UpdateOperationData, "creator" | "creatorId">, Omit<Withdraw.Filter, "creator" | "creatorId">> | OakOperation<Withdraw.RemoveOperation["action"], Omit<Withdraw.RemoveOperationData, "creator" | "creatorId">, Omit<Withdraw.Filter, "creator" | "creatorId">>>;
|
||||
withdrawTransfer$operator?: OakOperation<WithdrawTransfer.UpdateOperation["action"], Omit<WithdrawTransfer.UpdateOperationData, "operator" | "operatorId">, Omit<WithdrawTransfer.Filter, "operator" | "operatorId">> | OakOperation<WithdrawTransfer.RemoveOperation["action"], Omit<WithdrawTransfer.RemoveOperationData, "operator" | "operatorId">, Omit<WithdrawTransfer.Filter, "operator" | "operatorId">> | OakOperation<"create", Omit<WithdrawTransfer.CreateOperationData, "operator" | "operatorId">[]> | Array<OakOperation<"create", Omit<WithdrawTransfer.CreateOperationData, "operator" | "operatorId">> | OakOperation<WithdrawTransfer.UpdateOperation["action"], Omit<WithdrawTransfer.UpdateOperationData, "operator" | "operatorId">, Omit<WithdrawTransfer.Filter, "operator" | "operatorId">> | OakOperation<WithdrawTransfer.RemoveOperation["action"], Omit<WithdrawTransfer.RemoveOperationData, "operator" | "operatorId">, Omit<WithdrawTransfer.Filter, "operator" | "operatorId">>>;
|
||||
withdrawTransfer$creator?: OakOperation<WithdrawTransfer.UpdateOperation["action"], Omit<WithdrawTransfer.UpdateOperationData, "creator" | "creatorId">, Omit<WithdrawTransfer.Filter, "creator" | "creatorId">> | OakOperation<WithdrawTransfer.RemoveOperation["action"], Omit<WithdrawTransfer.RemoveOperationData, "creator" | "creatorId">, Omit<WithdrawTransfer.Filter, "creator" | "creatorId">> | OakOperation<"create", Omit<WithdrawTransfer.CreateOperationData, "creator" | "creatorId">[]> | Array<OakOperation<"create", Omit<WithdrawTransfer.CreateOperationData, "creator" | "creatorId">> | OakOperation<WithdrawTransfer.UpdateOperation["action"], Omit<WithdrawTransfer.UpdateOperationData, "creator" | "creatorId">, Omit<WithdrawTransfer.Filter, "creator" | "creatorId">> | OakOperation<WithdrawTransfer.RemoveOperation["action"], Omit<WithdrawTransfer.RemoveOperationData, "creator" | "creatorId">, Omit<WithdrawTransfer.Filter, "creator" | "creatorId">>>;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import { GenericAction } from "oak-domain/lib/actions/action";
|
||||
export type ParticularAction = 'pay' | 'refund' | 'deposit' | 'withdraw' | 'tax';
|
||||
export type ParticularAction = 'pay' | 'refund' | 'withdrawTransfer' | 'compensate' | 'moveIn' | 'moveOut' | 'deposit' | 'tax';
|
||||
export declare const actions: string[];
|
||||
export type Action = GenericAction | ParticularAction | string;
|
||||
export declare const actionDefDict: {};
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
export const actions = ["count", "stat", "download", "select", "aggregate", "create", "remove", "update", "pay", "refund", "deposit", "withdraw", "tax"];
|
||||
export const actions = ["count", "stat", "download", "select", "aggregate", "create", "remove", "update", "pay", "refund", "withdrawTransfer", "compensate", "moveIn", "moveOut", "deposit", "tax"];
|
||||
export const actionDefDict = {};
|
||||
|
|
|
|||
|
|
@ -2,8 +2,11 @@ export const style = {
|
|||
icon: {
|
||||
pay: '',
|
||||
refund: '',
|
||||
withdrawTransfer: '',
|
||||
compensate: '',
|
||||
moveIn: '',
|
||||
moveOut: '',
|
||||
deposit: '',
|
||||
withdraw: '',
|
||||
tax: '',
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
{ "name": "微信支付帐号", "attr": { "wechatPay": "微信支付", "taxLossRatio": "商户号手续费(百分比)", "refundCompensateRatio": "退款补偿百分比", "refundGapDays": "(支付后)允许退款的天数", "allowWithdrawTransfer": "允许提现转账", "withdrawTransferLossRatio": "提现转账费率(百分数)", "mchId": "商户号", "publicKeyFilePath": "公钥文件路径", "privateKeyFilePath": "私钥文件路径", "apiV3Key": "apiV3Key", "price": "余额", "system": "关联系统", "opers": "操作记录", "channels": "提现通道", "enabled": "是否启用" }, "action": { "pay": "支付", "refund": "退款", "deposit": "充值", "withdraw": "提现", "tax": "渠道费" } }
|
||||
{ "name": "微信支付帐号", "attr": { "wechatPay": "微信支付", "taxLossRatio": "商户号手续费(百分比)", "refundCompensateRatio": "退款补偿百分比", "refundGapDays": "(支付后)允许退款的天数", "allowWithdrawTransfer": "允许提现转账", "withdrawTransferLossRatio": "提现转账费率(百分数)", "mchId": "商户号", "publicKeyFilePath": "公钥文件路径", "privateKeyFilePath": "私钥文件路径", "apiV3Key": "apiV3Key", "price": "余额", "system": "关联系统", "opers": "操作记录", "channels": "提现通道", "enabled": "是否启用" }, "action": { "pay": "支付", "refund": "退款", "withdrawTransfer": "提现转账", "compensate": "补偿", "moveIn": "转入", "moveOut": "转出", "deposit": "充值", "tax": "渠道费" } }
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ import * as OfflineAccount from "./OfflineAccount/Schema";
|
|||
import * as Order from "./Order/Schema";
|
||||
import * as Pay from "./Pay/Schema";
|
||||
import * as Refund from "./Refund/Schema";
|
||||
import * as SysAccountMove from "./SysAccountMove/Schema";
|
||||
import * as SysAccountOper from "./SysAccountOper/Schema";
|
||||
import * as WechatPay from "./WechatPay/Schema";
|
||||
import * as Withdraw from "./Withdraw/Schema";
|
||||
|
|
@ -172,6 +173,8 @@ export type UserIdSubQuery = {
|
|||
entity: "pay";
|
||||
}) | (Refund.UserIdSubQuery & {
|
||||
entity: "refund";
|
||||
}) | (SysAccountMove.UserIdSubQuery & {
|
||||
entity: "sysAccountMove";
|
||||
}) | (Withdraw.UserIdSubQuery & {
|
||||
entity: "withdraw";
|
||||
}) | (WithdrawTransfer.UserIdSubQuery & {
|
||||
|
|
@ -448,6 +451,8 @@ export type SystemIdSubQuery = {
|
|||
entity: "offlineAccount";
|
||||
}) | (Order.SystemIdSubQuery & {
|
||||
entity: "order";
|
||||
}) | (SysAccountMove.SystemIdSubQuery & {
|
||||
entity: "sysAccountMove";
|
||||
}) | (WechatPay.SystemIdSubQuery & {
|
||||
entity: "wechatPay";
|
||||
}) | (WithdrawAccount.SystemIdSubQuery & {
|
||||
|
|
@ -610,6 +615,13 @@ export type RefundIdSubQuery = {
|
|||
entity: "refund";
|
||||
}) | any;
|
||||
};
|
||||
export type SysAccountMoveIdSubQuery = {
|
||||
[K in "$in" | "$nin"]?: (SysAccountOper.SysAccountMoveIdSubQuery & {
|
||||
entity: "sysAccountOper";
|
||||
}) | (SysAccountMove.SysAccountMoveIdSubQuery & {
|
||||
entity: "sysAccountMove";
|
||||
}) | any;
|
||||
};
|
||||
export type SysAccountOperIdSubQuery = {
|
||||
[K in "$in" | "$nin"]?: (SysAccountOper.SysAccountOperIdSubQuery & {
|
||||
entity: "sysAccountOper";
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ import assert from 'assert';
|
|||
import { getPayClazz } from '../utils/payClazz';
|
||||
import { fullPayProjection } from '../utils/pay';
|
||||
import { DATA_SUBSCRIBER_KEYS } from '../config/constants';
|
||||
import { getRelevantIds } from 'oak-domain/lib/store/filter';
|
||||
async function changeOrderStateByPay(filter, context, option) {
|
||||
const orders = await context.select('order', {
|
||||
data: {
|
||||
|
|
@ -144,6 +145,96 @@ async function changeOrderStateByPay(filter, context, option) {
|
|||
throw err;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 当订单上其它的支付全部完成/失败时,将对应的order上类型为account的pay处理掉
|
||||
* 现在的逻辑是:account类型的pay必须等所有其它的pay都完成了,自己才能完成,如果其它都失败了,自己就也失败,钱返回付款的account
|
||||
* @param payId
|
||||
* @param context
|
||||
*/
|
||||
async function tryCompleteAccountPay(payId, context) {
|
||||
const [pay] = await context.select('pay', {
|
||||
data: {
|
||||
id: 1,
|
||||
paid: 1,
|
||||
price: 1,
|
||||
iState: 1,
|
||||
order: {
|
||||
iState: 1,
|
||||
price: 1,
|
||||
pay$order: {
|
||||
$entity: 'pay',
|
||||
data: {
|
||||
id: 1,
|
||||
iState: 1,
|
||||
price: 1,
|
||||
entity: 1,
|
||||
paid: 1,
|
||||
},
|
||||
filter: {
|
||||
iState: {
|
||||
$in: ['paid', 'paying'],
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
filter: {
|
||||
id: payId,
|
||||
}
|
||||
}, {});
|
||||
const { order } = pay;
|
||||
if (order) {
|
||||
const { price, iState, pay$order: pays } = order;
|
||||
assert(iState === 'paying');
|
||||
const successfulPayIds = [];
|
||||
const accountPayIds = [];
|
||||
let totalPaid = 0;
|
||||
pays?.forEach((pay) => {
|
||||
const { iState, entity, paid, price } = pay;
|
||||
if (iState === 'paid') {
|
||||
assert(paid === price);
|
||||
totalPaid += paid;
|
||||
}
|
||||
else if (entity === 'account') {
|
||||
totalPaid += paid;
|
||||
accountPayIds.push(pay.id);
|
||||
if (price === paid) {
|
||||
successfulPayIds.push(pay.id);
|
||||
}
|
||||
}
|
||||
});
|
||||
if (totalPaid === price) {
|
||||
for (const payId2 of successfulPayIds) {
|
||||
await context.operate('pay', {
|
||||
id: await generateNewIdAsync(),
|
||||
action: 'succeedPaying',
|
||||
data: {
|
||||
successAt: Date.now(),
|
||||
},
|
||||
filter: {
|
||||
id: payId2,
|
||||
}
|
||||
}, {});
|
||||
}
|
||||
return successfulPayIds.length;
|
||||
}
|
||||
else if (pay.iState === 'closed') {
|
||||
// 本条支付关闭,则其它的account pay也跟随关闭
|
||||
for (const payId2 of accountPayIds) {
|
||||
await context.operate('pay', {
|
||||
id: await generateNewIdAsync(),
|
||||
action: 'close',
|
||||
data: {},
|
||||
filter: {
|
||||
id: payId2,
|
||||
}
|
||||
}, {});
|
||||
}
|
||||
return accountPayIds.length;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
const triggers = [
|
||||
{
|
||||
name: '当生成pay时,自动开始支付流程',
|
||||
|
|
@ -169,10 +260,11 @@ const triggers = [
|
|||
{
|
||||
name: '当pay的状态发生变化时,修改相应的order的状态或者deposit的状态,同时尝试向订阅者推送',
|
||||
entity: 'pay',
|
||||
action: ['startPaying', 'succeedPaying', 'continuePaying', 'startClosing', 'succeedClosing', 'startRefunding',
|
||||
action: ['startPaying', 'succeedPaying', 'continuePaying', 'close', 'startRefunding',
|
||||
'refundAll', 'refundPartially'],
|
||||
when: 'after',
|
||||
asRoot: true,
|
||||
priority: 99,
|
||||
fn: async ({ operation }, context, option) => {
|
||||
const { data, filter, action, id } = operation;
|
||||
assert(typeof filter.id === 'string');
|
||||
|
|
@ -313,13 +405,14 @@ const triggers = [
|
|||
},
|
||||
},
|
||||
{
|
||||
name: '当pay完成支付时,计算相应的account以及syste account中的余额变化,使deposit完成',
|
||||
name: '当pay完成支付时,计算相应的account以及system account中的余额变化,使deposit完成',
|
||||
entity: 'pay',
|
||||
action: 'succeedPaying',
|
||||
when: 'after',
|
||||
asRoot: true,
|
||||
fn: async ({ operation }, context) => {
|
||||
const { data, filter } = operation;
|
||||
assert(typeof filter.id === 'string');
|
||||
const projection = {
|
||||
id: 1,
|
||||
paid: 1,
|
||||
|
|
@ -448,50 +541,6 @@ const triggers = [
|
|||
return cnt;
|
||||
},
|
||||
},
|
||||
{
|
||||
name: '当account类型的pay的paid达到price,改为支付成功',
|
||||
entity: 'pay',
|
||||
asRoot: true,
|
||||
action: ['startPaying', 'continuePaying'],
|
||||
check(operation) {
|
||||
return (!!operation.data.paid) && operation.data.paid > 0;
|
||||
},
|
||||
filter: {
|
||||
entity: 'account',
|
||||
},
|
||||
when: 'commit',
|
||||
fn: async ({ ids }, context) => {
|
||||
for (const id of ids) {
|
||||
const [row] = await context.select('pay', {
|
||||
data: {
|
||||
id: 1,
|
||||
orderId: 1,
|
||||
entity: 1,
|
||||
price: 1,
|
||||
paid: 1,
|
||||
},
|
||||
filter: {
|
||||
id,
|
||||
}
|
||||
}, { dontCollect: true });
|
||||
assert(row && row.entity === 'account');
|
||||
if (row.paid && row.paid === row.price) {
|
||||
const closeFn = context.openRootMode();
|
||||
await context.operate('pay', {
|
||||
id: await generateNewIdAsync(),
|
||||
action: 'succeedPaying',
|
||||
data: {
|
||||
successAt: Date.now(),
|
||||
},
|
||||
filter: {
|
||||
id,
|
||||
}
|
||||
}, {});
|
||||
closeFn();
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
name: '当pay完成支付时,计算其refundable和forbidRefundAt',
|
||||
entity: 'pay',
|
||||
|
|
@ -519,5 +568,59 @@ const triggers = [
|
|||
return 1;
|
||||
},
|
||||
},
|
||||
{
|
||||
entity: 'pay',
|
||||
name: '当有pay支付成功时,尝试将account类型的pay完成',
|
||||
action: ['startPaying', 'continuePaying', 'succeedPaying'],
|
||||
attributes: ['paid'],
|
||||
when: 'after',
|
||||
fn: async ({ operation }, context, option) => {
|
||||
const { filter } = operation;
|
||||
const ids = getRelevantIds(filter);
|
||||
assert(ids.length === 1);
|
||||
return tryCompleteAccountPay(ids[0], context);
|
||||
}
|
||||
},
|
||||
{
|
||||
entity: 'pay',
|
||||
name: '当有pay关闭时,如果是account类型的,将金额还给account,否则检查会否测试相关Account pay是否需要关闭',
|
||||
action: 'close',
|
||||
when: 'after',
|
||||
fn: async ({ operation }, context, option) => {
|
||||
const { filter } = operation;
|
||||
const ids = getRelevantIds(filter);
|
||||
assert(ids.length === 1);
|
||||
const [pay] = await context.select('pay', {
|
||||
data: {
|
||||
id: 1,
|
||||
price: 1,
|
||||
paid: 1,
|
||||
entity: 1,
|
||||
entityId: 1,
|
||||
},
|
||||
filter: {
|
||||
id: ids[0],
|
||||
},
|
||||
}, {});
|
||||
if (pay.entity === 'account') {
|
||||
await context.operate('accountOper', {
|
||||
id: await generateNewIdAsync(),
|
||||
action: 'create',
|
||||
data: {
|
||||
id: await generateNewIdAsync(),
|
||||
accountId: pay.entityId,
|
||||
entity: 'pay',
|
||||
entityId: ids[0],
|
||||
type: 'consumeBack',
|
||||
totalPlus: pay.paid,
|
||||
availPlus: pay.paid,
|
||||
},
|
||||
}, {});
|
||||
}
|
||||
else {
|
||||
return tryCompleteAccountPay(ids[0], context);
|
||||
}
|
||||
}
|
||||
},
|
||||
];
|
||||
export default triggers;
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ async function startRefunding(context, data) {
|
|||
settled: 1,
|
||||
}
|
||||
},
|
||||
filter: {
|
||||
id: data.payId,
|
||||
}
|
||||
}, { dontCollect: true });
|
||||
const { paid, refunded, deposit, order } = pay;
|
||||
assert(paid - refunded >= data.price);
|
||||
|
|
|
|||
|
|
@ -6,6 +6,6 @@ import { BRC } from '../types/RuntimeCxt';
|
|||
* @param context
|
||||
* @param refunds
|
||||
*/
|
||||
export declare function updateWithdrawState(context: BRC, id: string): Promise<1 | 0>;
|
||||
export declare function updateWithdrawState(context: BRC, id: string): Promise<0 | 1>;
|
||||
declare const triggers: Trigger<EntityDict, 'withdraw', BRC>[];
|
||||
export default triggers;
|
||||
|
|
|
|||
|
|
@ -8,5 +8,5 @@ import { FeatureDict as Ogb0FeatureDict, AspectDict as Ogb0AspectDict } from "oa
|
|||
export type BRC = BackendRuntimeContext<EntityDict>;
|
||||
export type FRC = FrontendRuntimeContext<EntityDict>;
|
||||
export type RuntimeCxt = FRC | BRC;
|
||||
export type AAD = AspectDict & Ogb0AspectDict<EntityDict>;
|
||||
export type AAD = AspectDict<EntityDict> & Ogb0AspectDict<EntityDict>;
|
||||
export type AFD = FeatureDict<EntityDict> & BasicFeatures<EntityDict> & Ogb0FeatureDict<EntityDict>;
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
export type SysAccountOperType = 'pay' | 'refund' | 'withdrawTransfer' | 'compensate' | 'moveIn' | 'moveOut';
|
||||
|
|
@ -0,0 +1 @@
|
|||
export {};
|
||||
|
|
@ -14,7 +14,7 @@ export declare const mergedProjection: {
|
|||
type?: number | undefined;
|
||||
systemId?: number | undefined;
|
||||
system?: import("../oak-app-domain/System/Schema").Projection | undefined;
|
||||
config?: number | import("oak-domain/lib/types").JsonProjection<import("../oak-app-domain/Application/Schema").WechatMpConfig | import("../oak-app-domain/Application/Schema").WebConfig | import("../oak-app-domain/Application/Schema").WechatPublicConfig | import("../oak-app-domain/Application/Schema").NativeConfig> | undefined;
|
||||
config?: number | import("oak-domain/lib/types").JsonProjection<import("../oak-app-domain/Application/Schema").WebConfig | import("../oak-app-domain/Application/Schema").WechatMpConfig | import("../oak-app-domain/Application/Schema").WechatPublicConfig | import("../oak-app-domain/Application/Schema").NativeConfig> | undefined;
|
||||
style?: number | import("oak-domain/lib/types").JsonProjection<import("oak-general-business/lib/types/Style").Style> | undefined;
|
||||
domainId?: number | undefined;
|
||||
domain?: import("../oak-app-domain/Domain/Schema").Projection | undefined;
|
||||
|
|
|
|||
|
|
@ -72,7 +72,8 @@ export default class Account {
|
|||
getState(pay) {
|
||||
throw new Error("account类型的pay不应该需要查询此状态");
|
||||
}
|
||||
close(pay) {
|
||||
throw new Error("account类型的pay无法关闭");
|
||||
async close(pay) {
|
||||
// throw new Error("account类型的pay无法关闭");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import WechatPay from './WechatPay';
|
||||
import WechatPayDebug from './WechatPay.debug';
|
||||
declare const _default: typeof WechatPayDebug | typeof WechatPay;
|
||||
declare const _default: typeof WechatPay | typeof WechatPayDebug;
|
||||
export default _default;
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
import { BRC } from '../types/RuntimeCxt';
|
||||
import { BackendRuntimeContext } from '../context/BackendRuntimeContext';
|
||||
import { EntityDict } from '../oak-app-domain';
|
||||
export type AspectDict = {
|
||||
export type AspectDict<ED extends EntityDict> = {
|
||||
getWithdrawCreateData: (params: {
|
||||
accountId: string;
|
||||
price: number;
|
||||
withdrawAccountId?: string;
|
||||
}, context: BRC) => Promise<EntityDict['withdraw']['CreateSingle']['data']>;
|
||||
}, context: BackendRuntimeContext<ED>) => Promise<EntityDict['withdraw']['CreateSingle']['data']>;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { EntityDict } from '../oak-app-domain';
|
||||
import { AspectDict } from './AspectDict';
|
||||
declare const aspectDict: AspectDict;
|
||||
declare const aspectDict: AspectDict<EntityDict>;
|
||||
export default aspectDict;
|
||||
export { AspectDict, };
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ export declare function getWithdrawCreateData(params: {
|
|||
creatorId: string;
|
||||
creator?: import("../oak-app-domain/User/Schema").UpdateOperation | undefined;
|
||||
} & {
|
||||
refund$withdraw?: import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/Refund/Schema").UpdateOperationData, "withdraw" | "withdrawId">, Omit<import("../oak-app-domain/Refund/Schema").Filter, "withdraw" | "withdrawId">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/Refund/Schema").CreateOperationData, "withdraw" | "withdrawId">[]> | (import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/Refund/Schema").UpdateOperationData, "withdraw" | "withdrawId">, Omit<import("../oak-app-domain/Refund/Schema").Filter, "withdraw" | "withdrawId">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/Refund/Schema").CreateOperationData, "withdraw" | "withdrawId">>)[] | undefined;
|
||||
withdrawTransfer$withdraw?: import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").UpdateOperationData, "withdraw" | "withdrawId">, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").Filter, "withdraw" | "withdrawId">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/WithdrawTransfer/Schema").CreateOperationData, "withdraw" | "withdrawId">[]> | (import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").UpdateOperationData, "withdraw" | "withdrawId">, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").Filter, "withdraw" | "withdrawId">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/WithdrawTransfer/Schema").CreateOperationData, "withdraw" | "withdrawId">>)[] | undefined;
|
||||
refund$withdraw?: import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/Refund/Schema").UpdateOperationData, "withdrawId" | "withdraw">, Omit<import("../oak-app-domain/Refund/Schema").Filter, "withdrawId" | "withdraw">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/Refund/Schema").CreateOperationData, "withdrawId" | "withdraw">[]> | (import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/Refund/Schema").UpdateOperationData, "withdrawId" | "withdraw">, Omit<import("../oak-app-domain/Refund/Schema").Filter, "withdrawId" | "withdraw">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/Refund/Schema").CreateOperationData, "withdrawId" | "withdraw">>)[] | undefined;
|
||||
withdrawTransfer$withdraw?: import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").UpdateOperationData, "withdrawId" | "withdraw">, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").Filter, "withdrawId" | "withdraw">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/WithdrawTransfer/Schema").CreateOperationData, "withdrawId" | "withdraw">[]> | (import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").UpdateOperationData, "withdrawId" | "withdraw">, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").Filter, "withdrawId" | "withdraw">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/WithdrawTransfer/Schema").CreateOperationData, "withdrawId" | "withdraw">>)[] | undefined;
|
||||
modiEntity$entity?: import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/ModiEntity/Schema").CreateOperationData, "entity" | "entityId">[]> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/ModiEntity/Schema").CreateOperationData, "entity" | "entityId">>[] | undefined;
|
||||
operEntity$entity?: import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/OperEntity/Schema").CreateOperationData, "entity" | "entityId">[]> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/OperEntity/Schema").CreateOperationData, "entity" | "entityId">>[] | undefined;
|
||||
accountOper$entity?: import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/AccountOper/Schema").CreateOperationData, "entity" | "entityId">[]> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/AccountOper/Schema").CreateOperationData, "entity" | "entityId">>[] | undefined;
|
||||
|
|
@ -26,8 +26,8 @@ export declare function getWithdrawCreateData(params: {
|
|||
creator?: undefined;
|
||||
creatorId: string;
|
||||
} & {
|
||||
refund$withdraw?: import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/Refund/Schema").UpdateOperationData, "withdraw" | "withdrawId">, Omit<import("../oak-app-domain/Refund/Schema").Filter, "withdraw" | "withdrawId">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/Refund/Schema").CreateOperationData, "withdraw" | "withdrawId">[]> | (import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/Refund/Schema").UpdateOperationData, "withdraw" | "withdrawId">, Omit<import("../oak-app-domain/Refund/Schema").Filter, "withdraw" | "withdrawId">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/Refund/Schema").CreateOperationData, "withdraw" | "withdrawId">>)[] | undefined;
|
||||
withdrawTransfer$withdraw?: import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").UpdateOperationData, "withdraw" | "withdrawId">, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").Filter, "withdraw" | "withdrawId">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/WithdrawTransfer/Schema").CreateOperationData, "withdraw" | "withdrawId">[]> | (import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").UpdateOperationData, "withdraw" | "withdrawId">, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").Filter, "withdraw" | "withdrawId">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/WithdrawTransfer/Schema").CreateOperationData, "withdraw" | "withdrawId">>)[] | undefined;
|
||||
refund$withdraw?: import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/Refund/Schema").UpdateOperationData, "withdrawId" | "withdraw">, Omit<import("../oak-app-domain/Refund/Schema").Filter, "withdrawId" | "withdraw">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/Refund/Schema").CreateOperationData, "withdrawId" | "withdraw">[]> | (import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/Refund/Schema").UpdateOperationData, "withdrawId" | "withdraw">, Omit<import("../oak-app-domain/Refund/Schema").Filter, "withdrawId" | "withdraw">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/Refund/Schema").CreateOperationData, "withdrawId" | "withdraw">>)[] | undefined;
|
||||
withdrawTransfer$withdraw?: import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").UpdateOperationData, "withdrawId" | "withdraw">, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").Filter, "withdrawId" | "withdraw">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/WithdrawTransfer/Schema").CreateOperationData, "withdrawId" | "withdraw">[]> | (import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").UpdateOperationData, "withdrawId" | "withdraw">, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").Filter, "withdrawId" | "withdraw">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/WithdrawTransfer/Schema").CreateOperationData, "withdrawId" | "withdraw">>)[] | undefined;
|
||||
modiEntity$entity?: import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/ModiEntity/Schema").CreateOperationData, "entity" | "entityId">[]> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/ModiEntity/Schema").CreateOperationData, "entity" | "entityId">>[] | undefined;
|
||||
operEntity$entity?: import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/OperEntity/Schema").CreateOperationData, "entity" | "entityId">[]> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/OperEntity/Schema").CreateOperationData, "entity" | "entityId">>[] | undefined;
|
||||
accountOper$entity?: import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/AccountOper/Schema").CreateOperationData, "entity" | "entityId">[]> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/AccountOper/Schema").CreateOperationData, "entity" | "entityId">>[] | undefined;
|
||||
|
|
@ -40,8 +40,8 @@ export declare function getWithdrawCreateData(params: {
|
|||
creatorId: string;
|
||||
creator?: import("../oak-app-domain/User/Schema").UpdateOperation | undefined;
|
||||
} & {
|
||||
refund$withdraw?: import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/Refund/Schema").UpdateOperationData, "withdraw" | "withdrawId">, Omit<import("../oak-app-domain/Refund/Schema").Filter, "withdraw" | "withdrawId">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/Refund/Schema").CreateOperationData, "withdraw" | "withdrawId">[]> | (import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/Refund/Schema").UpdateOperationData, "withdraw" | "withdrawId">, Omit<import("../oak-app-domain/Refund/Schema").Filter, "withdraw" | "withdrawId">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/Refund/Schema").CreateOperationData, "withdraw" | "withdrawId">>)[] | undefined;
|
||||
withdrawTransfer$withdraw?: import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").UpdateOperationData, "withdraw" | "withdrawId">, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").Filter, "withdraw" | "withdrawId">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/WithdrawTransfer/Schema").CreateOperationData, "withdraw" | "withdrawId">[]> | (import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").UpdateOperationData, "withdraw" | "withdrawId">, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").Filter, "withdraw" | "withdrawId">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/WithdrawTransfer/Schema").CreateOperationData, "withdraw" | "withdrawId">>)[] | undefined;
|
||||
refund$withdraw?: import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/Refund/Schema").UpdateOperationData, "withdrawId" | "withdraw">, Omit<import("../oak-app-domain/Refund/Schema").Filter, "withdrawId" | "withdraw">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/Refund/Schema").CreateOperationData, "withdrawId" | "withdraw">[]> | (import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/Refund/Schema").UpdateOperationData, "withdrawId" | "withdraw">, Omit<import("../oak-app-domain/Refund/Schema").Filter, "withdrawId" | "withdraw">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/Refund/Schema").CreateOperationData, "withdrawId" | "withdraw">>)[] | undefined;
|
||||
withdrawTransfer$withdraw?: import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").UpdateOperationData, "withdrawId" | "withdraw">, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").Filter, "withdrawId" | "withdraw">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/WithdrawTransfer/Schema").CreateOperationData, "withdrawId" | "withdraw">[]> | (import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").UpdateOperationData, "withdrawId" | "withdraw">, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").Filter, "withdrawId" | "withdraw">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/WithdrawTransfer/Schema").CreateOperationData, "withdrawId" | "withdraw">>)[] | undefined;
|
||||
modiEntity$entity?: import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/ModiEntity/Schema").CreateOperationData, "entity" | "entityId">[]> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/ModiEntity/Schema").CreateOperationData, "entity" | "entityId">>[] | undefined;
|
||||
operEntity$entity?: import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/OperEntity/Schema").CreateOperationData, "entity" | "entityId">[]> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/OperEntity/Schema").CreateOperationData, "entity" | "entityId">>[] | undefined;
|
||||
accountOper$entity?: import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/AccountOper/Schema").CreateOperationData, "entity" | "entityId">[]> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/AccountOper/Schema").CreateOperationData, "entity" | "entityId">>[] | undefined;
|
||||
|
|
@ -54,8 +54,8 @@ export declare function getWithdrawCreateData(params: {
|
|||
creator?: undefined;
|
||||
creatorId: string;
|
||||
} & {
|
||||
refund$withdraw?: import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/Refund/Schema").UpdateOperationData, "withdraw" | "withdrawId">, Omit<import("../oak-app-domain/Refund/Schema").Filter, "withdraw" | "withdrawId">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/Refund/Schema").CreateOperationData, "withdraw" | "withdrawId">[]> | (import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/Refund/Schema").UpdateOperationData, "withdraw" | "withdrawId">, Omit<import("../oak-app-domain/Refund/Schema").Filter, "withdraw" | "withdrawId">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/Refund/Schema").CreateOperationData, "withdraw" | "withdrawId">>)[] | undefined;
|
||||
withdrawTransfer$withdraw?: import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").UpdateOperationData, "withdraw" | "withdrawId">, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").Filter, "withdraw" | "withdrawId">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/WithdrawTransfer/Schema").CreateOperationData, "withdraw" | "withdrawId">[]> | (import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").UpdateOperationData, "withdraw" | "withdrawId">, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").Filter, "withdraw" | "withdrawId">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/WithdrawTransfer/Schema").CreateOperationData, "withdraw" | "withdrawId">>)[] | undefined;
|
||||
refund$withdraw?: import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/Refund/Schema").UpdateOperationData, "withdrawId" | "withdraw">, Omit<import("../oak-app-domain/Refund/Schema").Filter, "withdrawId" | "withdraw">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/Refund/Schema").CreateOperationData, "withdrawId" | "withdraw">[]> | (import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/Refund/Schema").UpdateOperationData, "withdrawId" | "withdraw">, Omit<import("../oak-app-domain/Refund/Schema").Filter, "withdrawId" | "withdraw">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/Refund/Schema").CreateOperationData, "withdrawId" | "withdraw">>)[] | undefined;
|
||||
withdrawTransfer$withdraw?: import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").UpdateOperationData, "withdrawId" | "withdraw">, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").Filter, "withdrawId" | "withdraw">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/WithdrawTransfer/Schema").CreateOperationData, "withdrawId" | "withdraw">[]> | (import("oak-domain/lib/types").Operation<string, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").UpdateOperationData, "withdrawId" | "withdraw">, Omit<import("../oak-app-domain/WithdrawTransfer/Schema").Filter, "withdrawId" | "withdraw">> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/WithdrawTransfer/Schema").CreateOperationData, "withdrawId" | "withdraw">>)[] | undefined;
|
||||
modiEntity$entity?: import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/ModiEntity/Schema").CreateOperationData, "entity" | "entityId">[]> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/ModiEntity/Schema").CreateOperationData, "entity" | "entityId">>[] | undefined;
|
||||
operEntity$entity?: import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/OperEntity/Schema").CreateOperationData, "entity" | "entityId">[]> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/OperEntity/Schema").CreateOperationData, "entity" | "entityId">>[] | undefined;
|
||||
accountOper$entity?: import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/AccountOper/Schema").CreateOperationData, "entity" | "entityId">[]> | import("oak-domain/lib/types").Operation<"create", Omit<import("../oak-app-domain/AccountOper/Schema").CreateOperationData, "entity" | "entityId">>[] | undefined;
|
||||
|
|
|
|||
|
|
@ -57,14 +57,15 @@ const checkers = [
|
|||
case 'refund':
|
||||
case 'withdraw': {
|
||||
if (totalPlus >= 0 || availPlus >= 0 || totalPlus !== availPlus) {
|
||||
throw new types_1.OakInputIllegalException('accountOper', ['availPlus'], 'accountOper为withdraw时,其totalPlus和availPlus必须为不相等的负数');
|
||||
throw new types_1.OakInputIllegalException('accountOper', ['availPlus'], `accountOper为${type}时,其totalPlus和availPlus必须为不相等的负数`);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'refundFailure':
|
||||
case 'withdrawBack': {
|
||||
case 'withdrawBack':
|
||||
case 'consumeBack': {
|
||||
if (totalPlus <= 0 || availPlus <= 0 || totalPlus !== availPlus) {
|
||||
throw new types_1.OakInputIllegalException('accountOper', ['availPlus'], 'accountOper为withdraw时,其totalPlus和availPlus必须为不相等的正数');
|
||||
throw new types_1.OakInputIllegalException('accountOper', ['availPlus'], `accountOper为${type}时,其totalPlus和availPlus必须为不相等的正数`);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,13 +30,16 @@ function checkAttributes(data) {
|
|||
}
|
||||
}
|
||||
}
|
||||
const { refundCompensateRatio, refundGapDays } = data;
|
||||
const { refundCompensateRatio, refundGapDays, withdrawTransferLossRatio } = data;
|
||||
if (typeof refundGapDays !== 'number' || refundGapDays < 0) {
|
||||
throw new types_1.OakInputIllegalException('offlineAccount', ['refundGapDays'], 'offlineAccount::error.refundGapDaysNotNegative');
|
||||
}
|
||||
if (typeof refundCompensateRatio !== 'number' || refundCompensateRatio < 0 || refundCompensateRatio > 100) {
|
||||
throw new types_1.OakInputIllegalException('offlineAccount', ['refundGapDays'], 'offlineAccount::error.refundCompensateIllegal');
|
||||
}
|
||||
if (typeof withdrawTransferLossRatio !== 'number' || withdrawTransferLossRatio < 0) {
|
||||
throw new types_1.OakInputIllegalException('offlineAccount', ['withdrawTransferLossRatio'], 'offlineAccount::error.withdrawTransferLossRatioNotNegative');
|
||||
}
|
||||
}
|
||||
const checkers = [
|
||||
{
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ const checkers = [
|
|||
},
|
||||
},
|
||||
action: 'create',
|
||||
errMsg: 'error::refund.create.hasAnotherRefunding',
|
||||
},
|
||||
{
|
||||
entity: 'refund',
|
||||
|
|
|
|||
|
|
@ -140,7 +140,7 @@ const attrUpdateMatrix = {
|
|||
actions: ['update'],
|
||||
},
|
||||
price: {
|
||||
actions: ['pay', 'refund', 'deposit', 'withdraw', 'tax'],
|
||||
actions: ['pay', 'refund', 'deposit', 'withdrawTransfer', 'tax', 'moveOut', 'moveIn', 'compensate'],
|
||||
},
|
||||
allowDeposit: {
|
||||
actions: ['update'],
|
||||
|
|
@ -202,7 +202,7 @@ const attrUpdateMatrix = {
|
|||
actions: ['update'],
|
||||
},
|
||||
price: {
|
||||
actions: ['pay', 'refund', 'deposit', 'withdraw', 'tax'],
|
||||
actions: ['pay', 'refund', 'deposit', 'withdrawTransfer', 'tax', 'moveOut', 'moveIn', 'compensate'],
|
||||
}
|
||||
},
|
||||
withdrawAccount: {
|
||||
|
|
|
|||
|
|
@ -12,8 +12,13 @@ const actionAuths = [
|
|||
deActions: ['select', 'create']
|
||||
},
|
||||
{
|
||||
id: 'user-acc-pay',
|
||||
pathId: 'user-acc-pay',
|
||||
id: 'creator-order-pay',
|
||||
pathId: 'creator-order-pay',
|
||||
deActions: ['select', 'create', 'startPaying', 'startRefunding', 'close']
|
||||
},
|
||||
{
|
||||
id: 'user-dep-acc-pay',
|
||||
pathId: 'user-dep-acc-pay',
|
||||
deActions: ['select', 'update', 'startPaying', 'startRefunding', 'close']
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -408,7 +408,47 @@ const i18ns = [
|
|||
"orderPriceSum": "订单总额",
|
||||
"orderManage": "订单管理",
|
||||
"orderList": "订单列表",
|
||||
"tips1": "总账户余额+退款总额+转账总额+订单总额应该等于系统账户总余额"
|
||||
"tips1": "总账户余额+退款总额+转账总额+订单总额应该等于系统账户总余额",
|
||||
"move": "移动资金",
|
||||
"history": "账单"
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "207fd2189d3697d15672176ae88f4175",
|
||||
namespace: "oak-pay-business-c-sysAccount-transferList",
|
||||
language: "zh-CN",
|
||||
module: "oak-pay-business",
|
||||
position: "src/components/sysAccount/transferList",
|
||||
data: {
|
||||
"label": {
|
||||
"channel": "转账渠道"
|
||||
},
|
||||
"tips": "正在转账的金额不计入任何账户,请到\"提现转账管理\"菜单完成操作"
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "17a11f164c9977d8eb5b59fbc78755d5",
|
||||
namespace: "oak-pay-business-c-sysAccountMove-create",
|
||||
language: "zh-CN",
|
||||
module: "oak-pay-business",
|
||||
position: "src/components/sysAccountMove/create",
|
||||
data: {
|
||||
"label": {
|
||||
"from": "从账户",
|
||||
"to": "到账户"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "f89e1a2d0e88d8e2b3f900cfe28a893e",
|
||||
namespace: "oak-pay-business-c-sysAccountOper-list",
|
||||
language: "zh-CN",
|
||||
module: "oak-pay-business",
|
||||
position: "src/components/sysAccountOper/list",
|
||||
data: {
|
||||
"history": "账户历史",
|
||||
"chooseMonth": "选择月份",
|
||||
"all": "全部"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -585,7 +625,7 @@ const i18ns = [
|
|||
position: "src/components/withdrawTransfer/list",
|
||||
data: {
|
||||
"label": {
|
||||
"channel": "提现渠道",
|
||||
"channel": "转账渠道",
|
||||
"transferActualPrice": "实际转账金额",
|
||||
"sysAccountAmount": "系统账户余额",
|
||||
"cn": "创建者",
|
||||
|
|
@ -755,6 +795,11 @@ const i18ns = [
|
|||
"order": {
|
||||
"payAmountNotEnough": "支付的额度总和不足",
|
||||
"nonePay": "没有传入支付信息"
|
||||
},
|
||||
"refund": {
|
||||
"create": {
|
||||
"hasAnotherRefunding": "您有一笔退款正在进行中"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
@ -788,7 +833,8 @@ const i18ns = [
|
|||
"error": {
|
||||
"nameQrCodeBothNull": "账号名和二维码不能同时为空",
|
||||
"refundGapDaysNotNegative": "允许退款天数不能为负数或空",
|
||||
"refundCompensateIllegal": "退款补偿百分比必须在0到100之间"
|
||||
"refundCompensateIllegal": "退款补偿百分比必须在0到100之间",
|
||||
"withdrawTransferLossRatioNotNegative": "提现转账费率必须在0到100之间"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -9,10 +9,10 @@ const paths = [
|
|||
recursive: false,
|
||||
},
|
||||
{
|
||||
id: 'user-acc-pay',
|
||||
id: 'user-dep-acc-pay',
|
||||
sourceEntity: 'user',
|
||||
destEntity: 'pay',
|
||||
value: 'account.user',
|
||||
value: 'deposit.account.user',
|
||||
recursive: false,
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ import { String, Price } from 'oak-domain/lib/types/DataType';
|
|||
import { EntityShape } from 'oak-domain/lib/types/Entity';
|
||||
import { EntityDesc } from 'oak-domain/lib/types';
|
||||
import { Schema as Account } from './Account';
|
||||
type Type = 'deposit' | 'withdraw' | 'consume' | 'loan' | 'repay' | 'withdrawBack' | 'earn' | 'encash' | 'cutoffRefundable' | 'tax' | 'taxRefund' | 'refund' | 'refundFailure';
|
||||
type Type = 'deposit' | 'withdraw' | 'consume' | 'consumeBack' | 'loan' | 'repay' | 'withdrawBack' | 'earn' | 'encash' | 'cutoffRefundable' | 'tax' | 'taxRefund' | 'refund' | 'refundFailure';
|
||||
export interface Schema extends EntityShape {
|
||||
account: Account;
|
||||
type: Type;
|
||||
|
|
|
|||
|
|
@ -23,9 +23,10 @@ exports.entityDesc = {
|
|||
deposit: '充值',
|
||||
withdraw: '提现',
|
||||
consume: '消费',
|
||||
consumeBack: '消费退还',
|
||||
loan: '抵押',
|
||||
repay: '偿还',
|
||||
withdrawBack: '提现未遂',
|
||||
withdrawBack: '提现退还',
|
||||
earn: '赚取',
|
||||
encash: '兑现',
|
||||
tax: '渠道费',
|
||||
|
|
@ -44,6 +45,7 @@ exports.entityDesc = {
|
|||
withdraw: '#F7DC6F',
|
||||
withdrawBack: '#F7DC6F',
|
||||
consume: '#A569BD',
|
||||
consumeBack: '#009933',
|
||||
loan: '#CD6155',
|
||||
repay: '#82E0AA',
|
||||
earn: '#FF3333',
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ export interface Schema extends AbstractAccount {
|
|||
channels: WithdrawChannel[];
|
||||
enabled: Boolean;
|
||||
}
|
||||
export type Action = 'pay' | 'refund' | 'deposit' | 'withdraw' | 'tax';
|
||||
export type Action = 'pay' | 'refund' | 'withdrawTransfer' | 'compensate' | 'moveIn' | 'moveOut' | 'deposit' | 'tax';
|
||||
export declare const entityDesc: EntityDesc<Schema, Action, '', {
|
||||
type: Schema['type'];
|
||||
}>;
|
||||
|
|
|
|||
|
|
@ -37,8 +37,11 @@ exports.entityDesc = {
|
|||
action: {
|
||||
pay: '支付',
|
||||
refund: '退款',
|
||||
withdrawTransfer: '提现转账',
|
||||
compensate: '补偿',
|
||||
moveIn: '转入',
|
||||
moveOut: '转出',
|
||||
deposit: '充值',
|
||||
withdraw: '提现',
|
||||
tax: '渠道费',
|
||||
}
|
||||
},
|
||||
|
|
@ -56,8 +59,11 @@ exports.entityDesc = {
|
|||
icon: {
|
||||
pay: '',
|
||||
refund: '',
|
||||
withdrawTransfer: '',
|
||||
compensate: '',
|
||||
moveIn: '',
|
||||
moveOut: '',
|
||||
deposit: '',
|
||||
withdraw: '',
|
||||
tax: '',
|
||||
}
|
||||
},
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue