diff --git a/es/components/AbstractComponents.d.ts b/es/components/AbstractComponents.d.ts index 9251d752..18b3c16d 100644 --- a/es/components/AbstractComponents.d.ts +++ b/es/components/AbstractComponents.d.ts @@ -21,7 +21,7 @@ declare const List: (props: ReactComponentProps(props: { tablePagination?: any; rowSelection?: any; disableSerialNumber?: boolean | undefined; - size?: "large" | "middle" | "small" | undefined; + size?: "small" | "middle" | "large" | undefined; scroll?: any; empty?: any; opWidth?: number | undefined; diff --git a/es/components/pay/detail/index.js b/es/components/pay/detail/index.js index 6cbf380e..6d58efb9 100644 --- a/es/components/pay/detail/index.js +++ b/es/components/pay/detail/index.js @@ -138,7 +138,7 @@ export default OakComponent({ } const startPayable = iState === 'paying' && !['account', 'offlineAccount'].includes(data.entity) && (PayRoutineDict[data.entity] && PayRoutineDict[data.entity].judgeCanPay(data, this.features)); const { mode } = this.props; - const succeedable = data["#oakLegalActions"].includes('succeedPaying'); + const succeedable = data["#oakLegalActions"]?.includes('succeedPaying'); const payChannels = this.features.pay.getPayChannels(); const offlines = this.features.cache.get('offlineAccount', { data: { diff --git a/es/components/pay/detail/web.js b/es/components/pay/detail/web.js index 1969d6c8..adff07af 100644 --- a/es/components/pay/detail/web.js +++ b/es/components/pay/detail/web.js @@ -134,9 +134,8 @@ function RenderPayMeta(props) { case 'offlineAccount': { if (offline && offlines) { return (<> - {iState === 'paying' && (mode === 'frontend' - ? - : )} + {iState === 'paying' && mode === 'frontend' ? : null} + {['unpaid', 'paying'].includes(iState) && mode === 'backend' ? : null} ); } diff --git a/es/components/pay/detail/web.pc.js b/es/components/pay/detail/web.pc.js index 268967c9..de5077fe 100644 --- a/es/components/pay/detail/web.pc.js +++ b/es/components/pay/detail/web.pc.js @@ -136,9 +136,8 @@ function RenderPayMeta(props) { case 'offlineAccount': { if (offline && offlines) { return (<> - {iState === 'paying' && (mode === 'frontend' - ? - : )} + {iState === 'paying' && mode === 'frontend' ? : null} + {['unpaid', 'paying'].includes(iState) && mode === 'backend' ? : null} ); } @@ -159,7 +158,19 @@ export default function Render(props) { if (pay) { const { iState, price, entity } = pay; const BtnPart2 = []; - if (startPayable) { + if (succeedable) { + BtnPart2.push(); + } + else if (startPayable) { BtnPart2.push(); @@ -171,43 +182,32 @@ export default function Render(props) { {t('common::reset')} ); } - else { - if (closable) { - BtnPart2.push(); - } - if (goBackable) { - BtnPart2.push(); - } + if (closable) { + BtnPart2.push(); + } + if (goBackable) { + BtnPart2.push(); } return (<> - {succeedable ? : - {t(`pay:v.iState.${iState}`)} - } + + {t(`pay:v.iState.${iState}`)} + }>
diff --git a/es/entities/Order.d.ts b/es/entities/Order.d.ts index 808bf0b9..bd73e79a 100644 --- a/es/entities/Order.d.ts +++ b/es/entities/Order.d.ts @@ -2,10 +2,12 @@ import { String, Text, Price, Boolean, Datetime } from 'oak-domain/lib/types/Dat import { EntityShape } from 'oak-domain/lib/types/Entity'; import { EntityDesc, ActionDef } from 'oak-domain/lib/types'; import { Schema as User } from 'oak-general-business/lib/entities/User'; +import { Schema as Address } from 'oak-general-business/lib/entities/Address'; import { Schema as AccountOper } from './AccountOper'; import { Schema as System } from './System'; export interface Schema extends EntityShape { price: Price; + receivingMethod: 'express' | 'pickup'; paid: Price; refunded: Price; title: String<32>; @@ -17,12 +19,20 @@ export interface Schema extends EntityShape { settled: Boolean; allowPartialPay?: Boolean; system: System; + address?: Address; + payAt?: Datetime; + shipAt?: Datetime; opers: AccountOper[]; } export type IAction = 'startPaying' | 'payAll' | 'payPartially' | 'payNone' | 'timeout' | 'cancel' | 'startRefunding' | 'refundAll' | 'refundPartially' | 'refundNone'; export type IState = 'unpaid' | 'timeout' | 'cancelled' | 'paying' | 'partiallyPaid' | 'paid' | 'refunding' | 'partiallyRefunded' | 'refunded'; export declare const IActionDef: ActionDef; -export type Action = IAction | 'settle'; +export type GState = 'staging' | 'shipped' | 'unshipped' | 'received' | 'taken'; +export type GAction = 'send' | 'receive' | 'store' | 'take' | 'turnBack' | 'unship'; +export declare const GActionDef: ActionDef; +export type Action = IAction | GAction | 'settle'; export declare const entityDesc: EntityDesc; diff --git a/es/entities/Order.js b/es/entities/Order.js index 353fb0d8..7d9765f0 100644 --- a/es/entities/Order.js +++ b/es/entities/Order.js @@ -14,6 +14,17 @@ export const IActionDef = { }, is: 'unpaid', }; +export const GActionDef = { + stm: { + send: ['unshipped', 'shipped'], + receive: ['shipped', 'received'], + store: [['unshipped', 'shipped'], 'staging'], + unship: [['shipped', 'staging'], 'unshipped'], + turnBack: ['shipped', 'unshipped'], + take: [['staging'], 'taken'], + }, + is: 'unshipped', +}; export const entityDesc = { indexes: [ //索引 @@ -52,16 +63,21 @@ export const entityDesc = { paid: '已支付金额', refunded: '已退款金额', iState: '订单状态', + gState: '物流状态', title: '订单标题', desc: "订单描述", timeoutAt: '过期时间', allowPartialPay: '允许部分支付', + receivingMethod: '配送方式', creator: '创建者', entity: '关联对象', entityId: '关联对象Id', settled: '是否结算', opers: '相关帐户操作', - system: '所属系统' + system: '所属系统', + address: '收货地址', + payAt: '付款时间', + shipAt: '发货时间', }, action: { startPaying: '开始支付', @@ -74,7 +90,13 @@ export const entityDesc = { refundAll: '完全退款', refundNone: '退款失败', refundPartially: '部分退款', + send: '发货', + store: '暂存', + take: '取货', + receive: '收货', settle: '结算', + turnBack: '退还', + unship: '入库' }, v: { iState: { @@ -88,6 +110,17 @@ export const entityDesc = { partiallyRefunded: '已部分退款', refunding: '退款中', }, + gState: { + unshipped: '未发货', + shipped: '已发货', + received: '已收货', + staging: '寄存中', + taken: '已取货', + }, + receivingMethod: { + express: '配送', + pickup: '自提', + } } }, }, @@ -116,6 +149,17 @@ export const entityDesc = { partiallyRefunded: '#EDBB99', refunding: '#FBEEE6' }, + gState: { + unshipped: '#AF601A', + shipped: '#2874A6', + received: '#1E8449', + staging: '#283747', + taken: '#117A65', + }, + receivingMethod: { + express: '#5DADE2', + pickup: '#2ECC71', + } } } }; diff --git a/es/entities/Pay.d.ts b/es/entities/Pay.d.ts index 8951224e..e3b0e350 100644 --- a/es/entities/Pay.d.ts +++ b/es/entities/Pay.d.ts @@ -34,8 +34,8 @@ export interface Schema extends EntityShape { opers: AccountOper[]; autoStart?: Boolean; } -type IAction = 'startPaying' | 'succeedPaying' | 'close' | 'startRefunding' | 'refundAll' | 'refundPartially' | 'stopRefunding'; -type IState = 'unpaid' | 'paying' | 'paid' | 'closed' | 'refunding' | 'partiallyRefunded' | 'refunded'; +export type IAction = 'startPaying' | 'succeedPaying' | 'close' | 'startRefunding' | 'refundAll' | 'refundPartially' | 'stopRefunding'; +export type IState = 'unpaid' | 'paying' | 'paid' | 'closed' | 'refunding' | 'partiallyRefunded' | 'refunded'; export declare const IActionDef: ActionDef; type Action = IAction | 'closeRefund' | 'continuePaying'; export declare const entityDesc: EntityDesc; + gState: import("oak-domain/lib/types").ActionDef; }; pay: { iState: import("oak-domain/lib/types").ActionDef; diff --git a/es/oak-app-domain/Application/_baseSchema.d.ts b/es/oak-app-domain/Application/_baseSchema.d.ts index 46fb2e04..a9845d9d 100644 --- a/es/oak-app-domain/Application/_baseSchema.d.ts +++ b/es/oak-app-domain/Application/_baseSchema.d.ts @@ -85,7 +85,7 @@ export type OpSchema = EntityShape & { style?: Style | null; dangerousVersions: Versions; warningVersions: Versions; - soaVersion: String<12>; + soaVersion: String<32>; domainId?: ForeignKey<"domain"> | null; } & { [A in ExpressionKey]?: any; diff --git a/es/oak-app-domain/EntityDict.d.ts b/es/oak-app-domain/EntityDict.d.ts index 34fdbd19..5525fbc3 100644 --- a/es/oak-app-domain/EntityDict.d.ts +++ b/es/oak-app-domain/EntityDict.d.ts @@ -1128,14 +1128,22 @@ export type Address = { Schema: BaseAddress.OpSchema & { area: Area["Schema"]; user?: User["Schema"]; + order$address?: Array>; ship$to?: Array>; ship$from?: Array>; + order$address$$aggr?: AggregationResult>; ship$to$$aggr?: AggregationResult>; ship$from$$aggr?: AggregationResult>; }; Projection: BaseAddress.OpProjection & { area?: Area["Projection"]; user?: User["Projection"]; + order$address?: OakSelection<"select", Omit, Omit, Order["Sorter"]> & { + $entity: "order"; + }; + order$address$$aggr?: DeduceAggregation, Omit, Order["Sorter"]> & { + $entity: "order"; + }; ship$to?: OakSelection<"select", Omit, Omit, Ship["Sorter"]> & { $entity: "ship"; }; @@ -1152,6 +1160,7 @@ export type Address = { FilterUnit: BaseAddress.OpFilter & { area: MakeFilter; user: MakeFilter; + order$address: MakeFilter> & SubQueryPredicateMetadata; ship$to: MakeFilter> & SubQueryPredicateMetadata; ship$from: MakeFilter> & SubQueryPredicateMetadata; }; @@ -1169,6 +1178,7 @@ export type Address = { Aggregation: DeduceAggregation; CreateOperationData: FormCreateData | OakOperation; + order$address?: (OakOperation<"create", Omit | Omit[]> | OakOperation, Order["Filter"]>)[]; ship$to?: (OakOperation<"create", Omit | Omit[]> | OakOperation, Ship["Filter"]>)[]; ship$from?: (OakOperation<"create", Omit | Omit[]> | OakOperation, Ship["Filter"]>)[]; }>; @@ -1177,6 +1187,7 @@ export type Address = { Create: Address["CreateSingle"] | Address["CreateMulti"]; UpdateOperationData: FormUpdateData | OakOperation | OakOperation<"remove", User["RemoveOperationData"], User["Filter"]>; + order$address?: (OakOperation<"create", Omit | Omit[]> | OakOperation, Order["Filter"]> | OakOperation<"remove", Order["RemoveOperationData"], Order["Filter"]>)[]; ship$to?: (OakOperation<"create", Omit | Omit[]> | OakOperation, Ship["Filter"]> | OakOperation<"remove", Ship["RemoveOperationData"], Ship["Filter"]>)[]; ship$from?: (OakOperation<"create", Omit | Omit[]> | OakOperation, Ship["Filter"]> | OakOperation<"remove", Ship["RemoveOperationData"], Ship["Filter"]>)[]; }>; @@ -4022,6 +4033,7 @@ export type Order = { Schema: BaseOrder.OpSchema & { creator: User["Schema"]; system: System["Schema"]; + address?: Address["Schema"]; pay$order?: Array>; settlement$order?: Array>; shipOrder$order?: Array>; @@ -4034,6 +4046,7 @@ export type Order = { Projection: BaseOrder.OpProjection & { creator?: User["Projection"]; system?: System["Projection"]; + address?: Address["Projection"]; pay$order?: OakSelection<"select", Omit, Omit, Pay["Sorter"]> & { $entity: "pay"; }; @@ -4062,6 +4075,7 @@ export type Order = { FilterUnit: BaseOrder.OpFilter & { creator: MakeFilter; system: MakeFilter; + address: MakeFilter; pay$order: MakeFilter> & SubQueryPredicateMetadata; settlement$order: MakeFilter> & SubQueryPredicateMetadata; shipOrder$order: MakeFilter> & SubQueryPredicateMetadata; @@ -4071,6 +4085,7 @@ export type Order = { SortAttr: Partial; SortNode: { $attr: Order["SortAttr"]; @@ -4082,6 +4097,7 @@ export type Order = { CreateOperationData: FormCreateData | OakOperation; system?: OakOperation<"create", System["CreateOperationData"]> | OakOperation; + address?: OakOperation<"create", Address["CreateOperationData"]> | OakOperation; pay$order?: (OakOperation<"create", Omit | Omit[]> | OakOperation, Pay["Filter"]>)[]; settlement$order?: (OakOperation<"create", Omit | Omit[]> | OakOperation, Settlement["Filter"]>)[]; shipOrder$order?: (OakOperation<"create", Omit | Omit[]> | OakOperation, ShipOrder["Filter"]>)[]; @@ -4093,6 +4109,7 @@ export type Order = { UpdateOperationData: FormUpdateData | OakOperation | OakOperation<"remove", User["RemoveOperationData"], User["Filter"]>; system?: OakOperation<"create", System["CreateOperationData"]> | OakOperation | OakOperation<"remove", System["RemoveOperationData"], System["Filter"]>; + address?: OakOperation<"create", Address["CreateOperationData"]> | OakOperation | OakOperation<"remove", Address["RemoveOperationData"], Address["Filter"]>; pay$order?: (OakOperation<"create", Omit | Omit[]> | OakOperation, Pay["Filter"]> | OakOperation<"remove", Pay["RemoveOperationData"], Pay["Filter"]>)[]; settlement$order?: (OakOperation<"create", Omit | Omit[]> | OakOperation, Settlement["Filter"]> | OakOperation<"remove", Settlement["RemoveOperationData"], Settlement["Filter"]>)[]; shipOrder$order?: (OakOperation<"create", Omit | Omit[]> | OakOperation, ShipOrder["Filter"]> | OakOperation<"remove", ShipOrder["RemoveOperationData"], ShipOrder["Filter"]>)[]; diff --git a/es/oak-app-domain/Order/Action.d.ts b/es/oak-app-domain/Order/Action.d.ts index db93ec9b..8476a233 100644 --- a/es/oak-app-domain/Order/Action.d.ts +++ b/es/oak-app-domain/Order/Action.d.ts @@ -3,9 +3,13 @@ import { GenericAction } from "oak-domain/lib/actions/action"; export type IAction = 'startPaying' | 'payAll' | 'payPartially' | 'payNone' | 'timeout' | 'cancel' | 'startRefunding' | 'refundAll' | 'refundPartially' | 'refundNone' | string; export type IState = 'unpaid' | 'timeout' | 'cancelled' | 'paying' | 'partiallyPaid' | 'paid' | 'refunding' | 'partiallyRefunded' | 'refunded' | string; export declare const IActionDef: ActionDef; -export type ParticularAction = IAction | 'settle'; +export type GState = 'staging' | 'shipped' | 'unshipped' | 'received' | 'taken' | string; +export type GAction = 'send' | 'receive' | 'store' | 'take' | 'turnBack' | 'unship' | string; +export declare const GActionDef: ActionDef; +export type ParticularAction = IAction | GAction | 'settle'; export declare const actions: string[]; export type Action = GenericAction | ParticularAction | string; export declare const actionDefDict: { iState: ActionDef; + gState: ActionDef; }; diff --git a/es/oak-app-domain/Order/Action.js b/es/oak-app-domain/Order/Action.js index 685cf1da..098f7f56 100644 --- a/es/oak-app-domain/Order/Action.js +++ b/es/oak-app-domain/Order/Action.js @@ -13,7 +13,19 @@ export const IActionDef = { }, is: 'unpaid', }; -export const actions = ["count", "stat", "download", "select", "aggregate", "create", "remove", "update", "startPaying", "payAll", "payPartially", "payNone", "timeout", "cancel", "startRefunding", "refundAll", "refundPartially", "refundNone", "settle"]; -export const actionDefDict = { - iState: IActionDef +export const GActionDef = { + stm: { + send: ['unshipped', 'shipped'], + receive: ['shipped', 'received'], + store: [['unshipped', 'shipped'], 'staging'], + unship: [['shipped', 'staging'], 'unshipped'], + turnBack: ['shipped', 'unshipped'], + take: [['staging'], 'taken'], + }, + is: 'unshipped', +}; +export const actions = ["count", "stat", "download", "select", "aggregate", "create", "remove", "update", "startPaying", "payAll", "payPartially", "payNone", "timeout", "cancel", "startRefunding", "refundAll", "refundPartially", "refundNone", "send", "receive", "store", "take", "turnBack", "unship", "settle"]; +export const actionDefDict = { + iState: IActionDef, + gState: GActionDef }; diff --git a/es/oak-app-domain/Order/Storage.js b/es/oak-app-domain/Order/Storage.js index 7231f9fe..7bd41cec 100644 --- a/es/oak-app-domain/Order/Storage.js +++ b/es/oak-app-domain/Order/Storage.js @@ -5,6 +5,11 @@ export const desc = { notNull: true, type: "money" }, + receivingMethod: { + notNull: true, + type: "enum", + enumeration: ["express", "pickup"] + }, paid: { notNull: true, type: "money" @@ -58,9 +63,23 @@ export const desc = { type: "ref", ref: "system" }, + addressId: { + type: "ref", + ref: "address" + }, + payAt: { + type: "datetime" + }, + shipAt: { + type: "datetime" + }, iState: { type: "enum", enumeration: ["unpaid", "timeout", "cancelled", "paying", "partiallyPaid", "paid", "refunding", "partiallyRefunded", "refunded"] + }, + gState: { + type: "enum", + enumeration: ["staging", "shipped", "unshipped", "received", "taken"] } }, actionType: "crud", diff --git a/es/oak-app-domain/Order/Style.js b/es/oak-app-domain/Order/Style.js index 9c87e85e..502727c2 100644 --- a/es/oak-app-domain/Order/Style.js +++ b/es/oak-app-domain/Order/Style.js @@ -23,5 +23,16 @@ export const style = { partiallyRefunded: '#EDBB99', refunding: '#FBEEE6' }, + gState: { + unshipped: '#AF601A', + shipped: '#2874A6', + received: '#1E8449', + staging: '#283747', + taken: '#117A65', + }, + receivingMethod: { + express: '#5DADE2', + pickup: '#2ECC71', + } } }; diff --git a/es/oak-app-domain/Order/_baseSchema.d.ts b/es/oak-app-domain/Order/_baseSchema.d.ts index 1cbbfb30..259ac0e1 100644 --- a/es/oak-app-domain/Order/_baseSchema.d.ts +++ b/es/oak-app-domain/Order/_baseSchema.d.ts @@ -1,10 +1,11 @@ import { ForeignKey } from "oak-domain/lib/types/DataType"; import { Q_DateValue, Q_BooleanValue, Q_NumberValue, Q_StringValue, Q_EnumValue, NodeId, ExprOp, ExpressionKey } from "oak-domain/lib/types/Demand"; import { MakeAction as OakMakeAction, EntityShape } from "oak-domain/lib/types/Entity"; -import { Action, ParticularAction, IState } from "./Action"; +import { Action, ParticularAction, IState, GState } from "./Action"; import { Price, String, Text, Datetime, Boolean } from "oak-domain/lib/types/DataType"; export type OpSchema = EntityShape & { price: Price; + receivingMethod: "express" | "pickup"; paid: Price; refunded: Price; title: String<32>; @@ -16,7 +17,11 @@ export type OpSchema = EntityShape & { settled: Boolean; allowPartialPay?: Boolean | null; systemId: ForeignKey<"system">; + addressId?: ForeignKey<"address"> | null; + payAt?: Datetime | null; + shipAt?: Datetime | null; iState?: IState | null; + gState?: GState | null; } & { [A in ExpressionKey]?: any; }; @@ -27,6 +32,7 @@ export type OpFilter = { $$seq$$: Q_NumberValue; $$updateAt$$: Q_DateValue; price: Q_NumberValue; + receivingMethod: Q_EnumValue<"express" | "pickup">; paid: Q_NumberValue; refunded: Q_NumberValue; title: Q_StringValue; @@ -38,7 +44,11 @@ export type OpFilter = { settled: Q_BooleanValue; allowPartialPay: Q_BooleanValue; systemId: Q_StringValue; + addressId: Q_StringValue; + payAt: Q_DateValue; + shipAt: Q_DateValue; iState: Q_EnumValue; + gState: Q_EnumValue; } & ExprOp; export type OpProjection = { "#id"?: NodeId; @@ -48,6 +58,7 @@ export type OpProjection = { $$updateAt$$?: number; $$seq$$?: number; price?: number; + receivingMethod?: number; paid?: number; refunded?: number; title?: number; @@ -59,7 +70,11 @@ export type OpProjection = { settled?: number; allowPartialPay?: number; systemId?: number; + addressId?: number; + payAt?: number; + shipAt?: number; iState?: number; + gState?: number; } & Partial>; export type OpSortAttr = Partial<{ id: number; @@ -67,6 +82,7 @@ export type OpSortAttr = Partial<{ $$seq$$: number; $$updateAt$$: number; price: number; + receivingMethod: number; paid: number; refunded: number; title: number; @@ -76,7 +92,10 @@ export type OpSortAttr = Partial<{ entityId: number; settled: number; allowPartialPay: number; + payAt: number; + shipAt: number; iState: number; + gState: number; [k: string]: any; } | ExprOp>; export type OpAction = OakMakeAction; diff --git a/es/oak-app-domain/Order/locales/zh_CN.json b/es/oak-app-domain/Order/locales/zh_CN.json index 1125e118..349bec27 100644 --- a/es/oak-app-domain/Order/locales/zh_CN.json +++ b/es/oak-app-domain/Order/locales/zh_CN.json @@ -5,16 +5,21 @@ "paid": "已支付金额", "refunded": "已退款金额", "iState": "订单状态", + "gState": "物流状态", "title": "订单标题", "desc": "订单描述", "timeoutAt": "过期时间", "allowPartialPay": "允许部分支付", + "receivingMethod": "配送方式", "creator": "创建者", "entity": "关联对象", "entityId": "关联对象Id", "settled": "是否结算", "opers": "相关帐户操作", - "system": "所属系统" + "system": "所属系统", + "address": "收货地址", + "payAt": "付款时间", + "shipAt": "发货时间" }, "action": { "startPaying": "开始支付", @@ -27,7 +32,13 @@ "refundAll": "完全退款", "refundNone": "退款失败", "refundPartially": "部分退款", - "settle": "结算" + "send": "发货", + "store": "暂存", + "take": "取货", + "receive": "收货", + "settle": "结算", + "turnBack": "退还", + "unship": "入库" }, "v": { "iState": { @@ -40,6 +51,17 @@ "refunded": "已退款", "partiallyRefunded": "已部分退款", "refunding": "退款中" + }, + "gState": { + "unshipped": "未发货", + "shipped": "已发货", + "received": "已收货", + "staging": "寄存中", + "taken": "已取货" + }, + "receivingMethod": { + "express": "配送", + "pickup": "自提" } } } diff --git a/es/triggers/pay.js b/es/triggers/pay.js index d2b6614b..d9bb7c6f 100644 --- a/es/triggers/pay.js +++ b/es/triggers/pay.js @@ -121,6 +121,7 @@ async function changeOrderStateByPay(filter, context, option) { action, data: { paid: payPaid, + payAt: action === 'payAll' ? Date.now() : null, }, filter: { id: orderId, diff --git a/es/triggers/withdraw.d.ts b/es/triggers/withdraw.d.ts index e69f8d6e..979a44c8 100644 --- a/es/triggers/withdraw.d.ts +++ b/es/triggers/withdraw.d.ts @@ -6,6 +6,6 @@ import { BRC } from '../types/RuntimeCxt'; * @param context * @param refunds */ -export declare function updateWithdrawState(context: BRC, id: string): Promise<0 | 1>; +export declare function updateWithdrawState(context: BRC, id: string): Promise<1 | 0>; declare const triggers: Trigger[]; export default triggers; diff --git a/lib/entities/Order.d.ts b/lib/entities/Order.d.ts index 808bf0b9..bd73e79a 100644 --- a/lib/entities/Order.d.ts +++ b/lib/entities/Order.d.ts @@ -2,10 +2,12 @@ import { String, Text, Price, Boolean, Datetime } from 'oak-domain/lib/types/Dat import { EntityShape } from 'oak-domain/lib/types/Entity'; import { EntityDesc, ActionDef } from 'oak-domain/lib/types'; import { Schema as User } from 'oak-general-business/lib/entities/User'; +import { Schema as Address } from 'oak-general-business/lib/entities/Address'; import { Schema as AccountOper } from './AccountOper'; import { Schema as System } from './System'; export interface Schema extends EntityShape { price: Price; + receivingMethod: 'express' | 'pickup'; paid: Price; refunded: Price; title: String<32>; @@ -17,12 +19,20 @@ export interface Schema extends EntityShape { settled: Boolean; allowPartialPay?: Boolean; system: System; + address?: Address; + payAt?: Datetime; + shipAt?: Datetime; opers: AccountOper[]; } export type IAction = 'startPaying' | 'payAll' | 'payPartially' | 'payNone' | 'timeout' | 'cancel' | 'startRefunding' | 'refundAll' | 'refundPartially' | 'refundNone'; export type IState = 'unpaid' | 'timeout' | 'cancelled' | 'paying' | 'partiallyPaid' | 'paid' | 'refunding' | 'partiallyRefunded' | 'refunded'; export declare const IActionDef: ActionDef; -export type Action = IAction | 'settle'; +export type GState = 'staging' | 'shipped' | 'unshipped' | 'received' | 'taken'; +export type GAction = 'send' | 'receive' | 'store' | 'take' | 'turnBack' | 'unship'; +export declare const GActionDef: ActionDef; +export type Action = IAction | GAction | 'settle'; export declare const entityDesc: EntityDesc; diff --git a/lib/entities/Order.js b/lib/entities/Order.js index be26c04a..44af5ccc 100644 --- a/lib/entities/Order.js +++ b/lib/entities/Order.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.entityDesc = exports.IActionDef = void 0; +exports.entityDesc = exports.GActionDef = exports.IActionDef = void 0; ; exports.IActionDef = { stm: { @@ -17,6 +17,17 @@ exports.IActionDef = { }, is: 'unpaid', }; +exports.GActionDef = { + stm: { + send: ['unshipped', 'shipped'], + receive: ['shipped', 'received'], + store: [['unshipped', 'shipped'], 'staging'], + unship: [['shipped', 'staging'], 'unshipped'], + turnBack: ['shipped', 'unshipped'], + take: [['staging'], 'taken'], + }, + is: 'unshipped', +}; exports.entityDesc = { indexes: [ //索引 @@ -55,16 +66,21 @@ exports.entityDesc = { paid: '已支付金额', refunded: '已退款金额', iState: '订单状态', + gState: '物流状态', title: '订单标题', desc: "订单描述", timeoutAt: '过期时间', allowPartialPay: '允许部分支付', + receivingMethod: '配送方式', creator: '创建者', entity: '关联对象', entityId: '关联对象Id', settled: '是否结算', opers: '相关帐户操作', - system: '所属系统' + system: '所属系统', + address: '收货地址', + payAt: '付款时间', + shipAt: '发货时间', }, action: { startPaying: '开始支付', @@ -77,7 +93,13 @@ exports.entityDesc = { refundAll: '完全退款', refundNone: '退款失败', refundPartially: '部分退款', + send: '发货', + store: '暂存', + take: '取货', + receive: '收货', settle: '结算', + turnBack: '退还', + unship: '入库' }, v: { iState: { @@ -91,6 +113,17 @@ exports.entityDesc = { partiallyRefunded: '已部分退款', refunding: '退款中', }, + gState: { + unshipped: '未发货', + shipped: '已发货', + received: '已收货', + staging: '寄存中', + taken: '已取货', + }, + receivingMethod: { + express: '配送', + pickup: '自提', + } } }, }, @@ -119,6 +152,17 @@ exports.entityDesc = { partiallyRefunded: '#EDBB99', refunding: '#FBEEE6' }, + gState: { + unshipped: '#AF601A', + shipped: '#2874A6', + received: '#1E8449', + staging: '#283747', + taken: '#117A65', + }, + receivingMethod: { + express: '#5DADE2', + pickup: '#2ECC71', + } } } }; diff --git a/lib/entities/Pay.d.ts b/lib/entities/Pay.d.ts index 8951224e..e3b0e350 100644 --- a/lib/entities/Pay.d.ts +++ b/lib/entities/Pay.d.ts @@ -34,8 +34,8 @@ export interface Schema extends EntityShape { opers: AccountOper[]; autoStart?: Boolean; } -type IAction = 'startPaying' | 'succeedPaying' | 'close' | 'startRefunding' | 'refundAll' | 'refundPartially' | 'stopRefunding'; -type IState = 'unpaid' | 'paying' | 'paid' | 'closed' | 'refunding' | 'partiallyRefunded' | 'refunded'; +export type IAction = 'startPaying' | 'succeedPaying' | 'close' | 'startRefunding' | 'refundAll' | 'refundPartially' | 'stopRefunding'; +export type IState = 'unpaid' | 'paying' | 'paid' | 'closed' | 'refunding' | 'partiallyRefunded' | 'refunded'; export declare const IActionDef: ActionDef; type Action = IAction | 'closeRefund' | 'continuePaying'; export declare const entityDesc: EntityDesc; + gState: import("oak-domain/lib/types").ActionDef; }; pay: { iState: import("oak-domain/lib/types").ActionDef; diff --git a/lib/oak-app-domain/Application/_baseSchema.d.ts b/lib/oak-app-domain/Application/_baseSchema.d.ts index 46fb2e04..a9845d9d 100644 --- a/lib/oak-app-domain/Application/_baseSchema.d.ts +++ b/lib/oak-app-domain/Application/_baseSchema.d.ts @@ -85,7 +85,7 @@ export type OpSchema = EntityShape & { style?: Style | null; dangerousVersions: Versions; warningVersions: Versions; - soaVersion: String<12>; + soaVersion: String<32>; domainId?: ForeignKey<"domain"> | null; } & { [A in ExpressionKey]?: any; diff --git a/lib/oak-app-domain/EntityDict.d.ts b/lib/oak-app-domain/EntityDict.d.ts index 34fdbd19..5525fbc3 100644 --- a/lib/oak-app-domain/EntityDict.d.ts +++ b/lib/oak-app-domain/EntityDict.d.ts @@ -1128,14 +1128,22 @@ export type Address = { Schema: BaseAddress.OpSchema & { area: Area["Schema"]; user?: User["Schema"]; + order$address?: Array>; ship$to?: Array>; ship$from?: Array>; + order$address$$aggr?: AggregationResult>; ship$to$$aggr?: AggregationResult>; ship$from$$aggr?: AggregationResult>; }; Projection: BaseAddress.OpProjection & { area?: Area["Projection"]; user?: User["Projection"]; + order$address?: OakSelection<"select", Omit, Omit, Order["Sorter"]> & { + $entity: "order"; + }; + order$address$$aggr?: DeduceAggregation, Omit, Order["Sorter"]> & { + $entity: "order"; + }; ship$to?: OakSelection<"select", Omit, Omit, Ship["Sorter"]> & { $entity: "ship"; }; @@ -1152,6 +1160,7 @@ export type Address = { FilterUnit: BaseAddress.OpFilter & { area: MakeFilter; user: MakeFilter; + order$address: MakeFilter> & SubQueryPredicateMetadata; ship$to: MakeFilter> & SubQueryPredicateMetadata; ship$from: MakeFilter> & SubQueryPredicateMetadata; }; @@ -1169,6 +1178,7 @@ export type Address = { Aggregation: DeduceAggregation; CreateOperationData: FormCreateData | OakOperation; + order$address?: (OakOperation<"create", Omit | Omit[]> | OakOperation, Order["Filter"]>)[]; ship$to?: (OakOperation<"create", Omit | Omit[]> | OakOperation, Ship["Filter"]>)[]; ship$from?: (OakOperation<"create", Omit | Omit[]> | OakOperation, Ship["Filter"]>)[]; }>; @@ -1177,6 +1187,7 @@ export type Address = { Create: Address["CreateSingle"] | Address["CreateMulti"]; UpdateOperationData: FormUpdateData | OakOperation | OakOperation<"remove", User["RemoveOperationData"], User["Filter"]>; + order$address?: (OakOperation<"create", Omit | Omit[]> | OakOperation, Order["Filter"]> | OakOperation<"remove", Order["RemoveOperationData"], Order["Filter"]>)[]; ship$to?: (OakOperation<"create", Omit | Omit[]> | OakOperation, Ship["Filter"]> | OakOperation<"remove", Ship["RemoveOperationData"], Ship["Filter"]>)[]; ship$from?: (OakOperation<"create", Omit | Omit[]> | OakOperation, Ship["Filter"]> | OakOperation<"remove", Ship["RemoveOperationData"], Ship["Filter"]>)[]; }>; @@ -4022,6 +4033,7 @@ export type Order = { Schema: BaseOrder.OpSchema & { creator: User["Schema"]; system: System["Schema"]; + address?: Address["Schema"]; pay$order?: Array>; settlement$order?: Array>; shipOrder$order?: Array>; @@ -4034,6 +4046,7 @@ export type Order = { Projection: BaseOrder.OpProjection & { creator?: User["Projection"]; system?: System["Projection"]; + address?: Address["Projection"]; pay$order?: OakSelection<"select", Omit, Omit, Pay["Sorter"]> & { $entity: "pay"; }; @@ -4062,6 +4075,7 @@ export type Order = { FilterUnit: BaseOrder.OpFilter & { creator: MakeFilter; system: MakeFilter; + address: MakeFilter; pay$order: MakeFilter> & SubQueryPredicateMetadata; settlement$order: MakeFilter> & SubQueryPredicateMetadata; shipOrder$order: MakeFilter> & SubQueryPredicateMetadata; @@ -4071,6 +4085,7 @@ export type Order = { SortAttr: Partial; SortNode: { $attr: Order["SortAttr"]; @@ -4082,6 +4097,7 @@ export type Order = { CreateOperationData: FormCreateData | OakOperation; system?: OakOperation<"create", System["CreateOperationData"]> | OakOperation; + address?: OakOperation<"create", Address["CreateOperationData"]> | OakOperation; pay$order?: (OakOperation<"create", Omit | Omit[]> | OakOperation, Pay["Filter"]>)[]; settlement$order?: (OakOperation<"create", Omit | Omit[]> | OakOperation, Settlement["Filter"]>)[]; shipOrder$order?: (OakOperation<"create", Omit | Omit[]> | OakOperation, ShipOrder["Filter"]>)[]; @@ -4093,6 +4109,7 @@ export type Order = { UpdateOperationData: FormUpdateData | OakOperation | OakOperation<"remove", User["RemoveOperationData"], User["Filter"]>; system?: OakOperation<"create", System["CreateOperationData"]> | OakOperation | OakOperation<"remove", System["RemoveOperationData"], System["Filter"]>; + address?: OakOperation<"create", Address["CreateOperationData"]> | OakOperation | OakOperation<"remove", Address["RemoveOperationData"], Address["Filter"]>; pay$order?: (OakOperation<"create", Omit | Omit[]> | OakOperation, Pay["Filter"]> | OakOperation<"remove", Pay["RemoveOperationData"], Pay["Filter"]>)[]; settlement$order?: (OakOperation<"create", Omit | Omit[]> | OakOperation, Settlement["Filter"]> | OakOperation<"remove", Settlement["RemoveOperationData"], Settlement["Filter"]>)[]; shipOrder$order?: (OakOperation<"create", Omit | Omit[]> | OakOperation, ShipOrder["Filter"]> | OakOperation<"remove", ShipOrder["RemoveOperationData"], ShipOrder["Filter"]>)[]; diff --git a/lib/oak-app-domain/Order/Action.d.ts b/lib/oak-app-domain/Order/Action.d.ts index db93ec9b..8476a233 100644 --- a/lib/oak-app-domain/Order/Action.d.ts +++ b/lib/oak-app-domain/Order/Action.d.ts @@ -3,9 +3,13 @@ import { GenericAction } from "oak-domain/lib/actions/action"; export type IAction = 'startPaying' | 'payAll' | 'payPartially' | 'payNone' | 'timeout' | 'cancel' | 'startRefunding' | 'refundAll' | 'refundPartially' | 'refundNone' | string; export type IState = 'unpaid' | 'timeout' | 'cancelled' | 'paying' | 'partiallyPaid' | 'paid' | 'refunding' | 'partiallyRefunded' | 'refunded' | string; export declare const IActionDef: ActionDef; -export type ParticularAction = IAction | 'settle'; +export type GState = 'staging' | 'shipped' | 'unshipped' | 'received' | 'taken' | string; +export type GAction = 'send' | 'receive' | 'store' | 'take' | 'turnBack' | 'unship' | string; +export declare const GActionDef: ActionDef; +export type ParticularAction = IAction | GAction | 'settle'; export declare const actions: string[]; export type Action = GenericAction | ParticularAction | string; export declare const actionDefDict: { iState: ActionDef; + gState: ActionDef; }; diff --git a/lib/oak-app-domain/Order/Action.js b/lib/oak-app-domain/Order/Action.js index edfb6ab3..cf6b2b11 100644 --- a/lib/oak-app-domain/Order/Action.js +++ b/lib/oak-app-domain/Order/Action.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.actionDefDict = exports.actions = exports.IActionDef = void 0; +exports.actionDefDict = exports.actions = exports.GActionDef = exports.IActionDef = void 0; exports.IActionDef = { stm: { startPaying: [['unpaid', 'partiallyPaid'], 'paying'], @@ -16,7 +16,19 @@ exports.IActionDef = { }, is: 'unpaid', }; -exports.actions = ["count", "stat", "download", "select", "aggregate", "create", "remove", "update", "startPaying", "payAll", "payPartially", "payNone", "timeout", "cancel", "startRefunding", "refundAll", "refundPartially", "refundNone", "settle"]; -exports.actionDefDict = { - iState: exports.IActionDef +exports.GActionDef = { + stm: { + send: ['unshipped', 'shipped'], + receive: ['shipped', 'received'], + store: [['unshipped', 'shipped'], 'staging'], + unship: [['shipped', 'staging'], 'unshipped'], + turnBack: ['shipped', 'unshipped'], + take: [['staging'], 'taken'], + }, + is: 'unshipped', +}; +exports.actions = ["count", "stat", "download", "select", "aggregate", "create", "remove", "update", "startPaying", "payAll", "payPartially", "payNone", "timeout", "cancel", "startRefunding", "refundAll", "refundPartially", "refundNone", "send", "receive", "store", "take", "turnBack", "unship", "settle"]; +exports.actionDefDict = { + iState: exports.IActionDef, + gState: exports.GActionDef }; diff --git a/lib/oak-app-domain/Order/Storage.js b/lib/oak-app-domain/Order/Storage.js index fd5dbb5d..071ce22e 100644 --- a/lib/oak-app-domain/Order/Storage.js +++ b/lib/oak-app-domain/Order/Storage.js @@ -8,6 +8,11 @@ exports.desc = { notNull: true, type: "money" }, + receivingMethod: { + notNull: true, + type: "enum", + enumeration: ["express", "pickup"] + }, paid: { notNull: true, type: "money" @@ -61,9 +66,23 @@ exports.desc = { type: "ref", ref: "system" }, + addressId: { + type: "ref", + ref: "address" + }, + payAt: { + type: "datetime" + }, + shipAt: { + type: "datetime" + }, iState: { type: "enum", enumeration: ["unpaid", "timeout", "cancelled", "paying", "partiallyPaid", "paid", "refunding", "partiallyRefunded", "refunded"] + }, + gState: { + type: "enum", + enumeration: ["staging", "shipped", "unshipped", "received", "taken"] } }, actionType: "crud", diff --git a/lib/oak-app-domain/Order/Style.js b/lib/oak-app-domain/Order/Style.js index 80327f52..dc5f3806 100644 --- a/lib/oak-app-domain/Order/Style.js +++ b/lib/oak-app-domain/Order/Style.js @@ -26,5 +26,16 @@ exports.style = { partiallyRefunded: '#EDBB99', refunding: '#FBEEE6' }, + gState: { + unshipped: '#AF601A', + shipped: '#2874A6', + received: '#1E8449', + staging: '#283747', + taken: '#117A65', + }, + receivingMethod: { + express: '#5DADE2', + pickup: '#2ECC71', + } } }; diff --git a/lib/oak-app-domain/Order/_baseSchema.d.ts b/lib/oak-app-domain/Order/_baseSchema.d.ts index 1cbbfb30..259ac0e1 100644 --- a/lib/oak-app-domain/Order/_baseSchema.d.ts +++ b/lib/oak-app-domain/Order/_baseSchema.d.ts @@ -1,10 +1,11 @@ import { ForeignKey } from "oak-domain/lib/types/DataType"; import { Q_DateValue, Q_BooleanValue, Q_NumberValue, Q_StringValue, Q_EnumValue, NodeId, ExprOp, ExpressionKey } from "oak-domain/lib/types/Demand"; import { MakeAction as OakMakeAction, EntityShape } from "oak-domain/lib/types/Entity"; -import { Action, ParticularAction, IState } from "./Action"; +import { Action, ParticularAction, IState, GState } from "./Action"; import { Price, String, Text, Datetime, Boolean } from "oak-domain/lib/types/DataType"; export type OpSchema = EntityShape & { price: Price; + receivingMethod: "express" | "pickup"; paid: Price; refunded: Price; title: String<32>; @@ -16,7 +17,11 @@ export type OpSchema = EntityShape & { settled: Boolean; allowPartialPay?: Boolean | null; systemId: ForeignKey<"system">; + addressId?: ForeignKey<"address"> | null; + payAt?: Datetime | null; + shipAt?: Datetime | null; iState?: IState | null; + gState?: GState | null; } & { [A in ExpressionKey]?: any; }; @@ -27,6 +32,7 @@ export type OpFilter = { $$seq$$: Q_NumberValue; $$updateAt$$: Q_DateValue; price: Q_NumberValue; + receivingMethod: Q_EnumValue<"express" | "pickup">; paid: Q_NumberValue; refunded: Q_NumberValue; title: Q_StringValue; @@ -38,7 +44,11 @@ export type OpFilter = { settled: Q_BooleanValue; allowPartialPay: Q_BooleanValue; systemId: Q_StringValue; + addressId: Q_StringValue; + payAt: Q_DateValue; + shipAt: Q_DateValue; iState: Q_EnumValue; + gState: Q_EnumValue; } & ExprOp; export type OpProjection = { "#id"?: NodeId; @@ -48,6 +58,7 @@ export type OpProjection = { $$updateAt$$?: number; $$seq$$?: number; price?: number; + receivingMethod?: number; paid?: number; refunded?: number; title?: number; @@ -59,7 +70,11 @@ export type OpProjection = { settled?: number; allowPartialPay?: number; systemId?: number; + addressId?: number; + payAt?: number; + shipAt?: number; iState?: number; + gState?: number; } & Partial>; export type OpSortAttr = Partial<{ id: number; @@ -67,6 +82,7 @@ export type OpSortAttr = Partial<{ $$seq$$: number; $$updateAt$$: number; price: number; + receivingMethod: number; paid: number; refunded: number; title: number; @@ -76,7 +92,10 @@ export type OpSortAttr = Partial<{ entityId: number; settled: number; allowPartialPay: number; + payAt: number; + shipAt: number; iState: number; + gState: number; [k: string]: any; } | ExprOp>; export type OpAction = OakMakeAction; diff --git a/lib/oak-app-domain/Order/locales/zh_CN.json b/lib/oak-app-domain/Order/locales/zh_CN.json index 1125e118..349bec27 100644 --- a/lib/oak-app-domain/Order/locales/zh_CN.json +++ b/lib/oak-app-domain/Order/locales/zh_CN.json @@ -5,16 +5,21 @@ "paid": "已支付金额", "refunded": "已退款金额", "iState": "订单状态", + "gState": "物流状态", "title": "订单标题", "desc": "订单描述", "timeoutAt": "过期时间", "allowPartialPay": "允许部分支付", + "receivingMethod": "配送方式", "creator": "创建者", "entity": "关联对象", "entityId": "关联对象Id", "settled": "是否结算", "opers": "相关帐户操作", - "system": "所属系统" + "system": "所属系统", + "address": "收货地址", + "payAt": "付款时间", + "shipAt": "发货时间" }, "action": { "startPaying": "开始支付", @@ -27,7 +32,13 @@ "refundAll": "完全退款", "refundNone": "退款失败", "refundPartially": "部分退款", - "settle": "结算" + "send": "发货", + "store": "暂存", + "take": "取货", + "receive": "收货", + "settle": "结算", + "turnBack": "退还", + "unship": "入库" }, "v": { "iState": { @@ -40,6 +51,17 @@ "refunded": "已退款", "partiallyRefunded": "已部分退款", "refunding": "退款中" + }, + "gState": { + "unshipped": "未发货", + "shipped": "已发货", + "received": "已收货", + "staging": "寄存中", + "taken": "已取货" + }, + "receivingMethod": { + "express": "配送", + "pickup": "自提" } } } diff --git a/lib/triggers/pay.js b/lib/triggers/pay.js index 4c0f20b2..e4888f9c 100644 --- a/lib/triggers/pay.js +++ b/lib/triggers/pay.js @@ -124,6 +124,7 @@ async function changeOrderStateByPay(filter, context, option) { action, data: { paid: payPaid, + payAt: action === 'payAll' ? Date.now() : null, }, filter: { id: orderId, diff --git a/src/components/AbstractComponents.ts b/src/components/AbstractComponents.ts index 764b7d9a..51dbec40 100644 --- a/src/components/AbstractComponents.ts +++ b/src/components/AbstractComponents.ts @@ -3,6 +3,8 @@ * by Xc 20230807 */ + + // @ts-nocheck import React from 'react'; import { EntityDict } from '../oak-app-domain'; diff --git a/src/components/pay/detail/web.pc.tsx b/src/components/pay/detail/web.pc.tsx index ed62f848..5bac2545 100644 --- a/src/components/pay/detail/web.pc.tsx +++ b/src/components/pay/detail/web.pc.tsx @@ -260,11 +260,8 @@ function RenderPayMeta(props: { if (offline && offlines) { return ( <> - {iState === 'paying' && ( - mode === 'frontend' - ? - : - )} + {iState === 'paying' && mode === 'frontend' ? : null} + {['unpaid', 'paying'].includes(iState!) && mode === 'backend' ? : null} - {iState === 'paying' && ( - mode === 'frontend' - ? - : - )} + {iState === 'paying' && mode === 'frontend' ? : null} + {['unpaid', 'paying'].includes(iState!) && mode === 'backend' ? : null} = { } } }; - - diff --git a/src/entities/Order.ts b/src/entities/Order.ts index ab58d443..72c94227 100644 --- a/src/entities/Order.ts +++ b/src/entities/Order.ts @@ -8,11 +8,13 @@ import { import { EntityShape } from 'oak-domain/lib/types/Entity'; import { EntityDesc, ActionDef } from 'oak-domain/lib/types'; import { Schema as User } from 'oak-general-business/lib/entities/User'; +import { Schema as Address } from 'oak-general-business/lib/entities/Address'; import { Schema as AccountOper } from './AccountOper'; import { Schema as System } from './System'; export interface Schema extends EntityShape { price: Price; + receivingMethod: 'express' | 'pickup'; paid: Price; refunded: Price; title: String<32>; @@ -24,6 +26,9 @@ export interface Schema extends EntityShape { settled: Boolean; allowPartialPay?: Boolean; system: System; + address?: Address; + payAt?: Datetime; + shipAt?: Datetime; opers: AccountOper[]; }; @@ -45,10 +50,28 @@ export const IActionDef: ActionDef = { }, is: 'unpaid', }; -export type Action = IAction | 'settle'; + +export type GState = 'staging' | 'shipped' | 'unshipped' | 'received' | 'taken'; +export type GAction = 'send' | 'receive' | 'store' | 'take' | 'turnBack' | 'unship'; + +export const GActionDef: ActionDef = { + stm: { + send: ['unshipped', 'shipped'], + receive: ['shipped', 'received'], + store: [['unshipped', 'shipped'], 'staging'], + unship: [['shipped', 'staging'], 'unshipped'], + turnBack: ['shipped', 'unshipped'], + take: [['staging'], 'taken'], + }, + is: 'unshipped', +}; + +export type Action = IAction | GAction | 'settle'; export const entityDesc: EntityDesc = { indexes: [ //索引 @@ -87,16 +110,21 @@ export const entityDesc: EntityDesc = { stm: { diff --git a/src/triggers/pay.ts b/src/triggers/pay.ts index 6ab91edf..d2e80cef 100644 --- a/src/triggers/pay.ts +++ b/src/triggers/pay.ts @@ -134,6 +134,7 @@ async function changeOrderStateByPay( action, data: { paid: payPaid, + payAt: action === 'payAll' ? Date.now() : null, }, filter: { id: orderId!,