Merge branch 'dev' into release

This commit is contained in:
Xu Chang 2025-10-16 11:00:26 +08:00
commit d6a3c50d31
42 changed files with 134 additions and 72 deletions

View File

@ -24,10 +24,10 @@ export default OakComponent({
},
isList: false,
properties: {
accountId: '',
accountAvailMax: 0,
accountId: '', // 是否可以使用帐户中的余额抵扣
accountAvailMax: 0, // 本次交易可以使用的帐户中的Avail max值调用者自己保证此数值的一致性不要扣成负数
onSetPays: (pays) => undefined,
accountTips: '',
accountTips: '', // 使用余额支付的提示说明
autoStartPay: false,
},
formData({ data }) {

View File

@ -156,7 +156,7 @@ export default OakComponent({
},
},
filter: {
settled: 0,
settled: 0, //todo 部分settle的order是否需要统计在内
price: {
$gt: 0,
},

View File

@ -30,7 +30,7 @@ export const entityDesc = {
keyType: '指定应用私钥类型',
gateway: "支付宝网关地址",
wsServiceUrl: 'websocket服务地址',
timeout: "网关超时时间",
timeout: "网关超时时间", //(单位毫秒),默认值是 5000
needEncrypt: "是否需要AES加解密",
encryptKey: 'AES密钥', //调用AES加解密相关接口时需要
},

View File

@ -15,7 +15,6 @@ export const desc = {
type: "object"
}
},
static: true,
actionType: "crud",
actions,
indexes: [

View File

@ -4,7 +4,6 @@ import { MakeAction as OakMakeAction, EntityShape } from "oak-domain/lib/types/E
import { GenericAction } from "oak-domain/lib/actions/action";
import { String, Text } from "oak-domain/lib/types/DataType";
import { Style } from "oak-general-business/lib/types/Style";
export type Passport = "email" | "mobile" | "wechat" | "wechatPublic" | "wechatNative";
export type AppType = "web" | "wechatMp" | "wechatPublic" | "native";
export type WechatMpConfig = {
type: "wechatMp";
@ -19,7 +18,6 @@ export type WechatMpConfig = {
mode: "clear" | "compatible" | "safe";
dataFormat: "json" | "xml";
};
passport?: Passport[];
};
export type WebConfig = {
type: "web";
@ -33,7 +31,6 @@ export type WebConfig = {
appId: string;
appSecret: string;
};
passport?: Passport[];
location: {
protocol: "http:" | "https:";
hostname: string;
@ -56,7 +53,6 @@ export type WechatPublicConfig = {
appId: string;
originalId: string;
};
passport?: Passport[];
location: {
protocol: "http:" | "https:";
hostname: string;
@ -65,7 +61,6 @@ export type WechatPublicConfig = {
};
export type NativeConfig = {
type: "native";
passport?: Passport[];
wechatNative?: {
appId: string;
appSecret: string;

View File

@ -18,6 +18,12 @@ export const desc = {
length: 32
}
},
prevPasswordSha1: {
type: "text"
},
newPasswordSha1: {
type: "text"
},
result: {
notNull: true,
type: "enum",

View File

@ -2,11 +2,13 @@ import { ForeignKey } from "oak-domain/lib/types/DataType";
import { Q_DateValue, 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 { GenericAction } from "oak-domain/lib/actions/action";
import { String } from "oak-domain/lib/types/DataType";
import { String, Text } from "oak-domain/lib/types/DataType";
export type OpSchema = EntityShape & {
userId: ForeignKey<"user">;
prevPassword?: String<32> | null;
newPassword?: String<32> | null;
prevPasswordSha1?: Text | null;
newPasswordSha1?: Text | null;
result: "success" | "fail";
} & {
[A in ExpressionKey]?: any;
@ -20,6 +22,8 @@ export type OpFilter = {
userId: Q_StringValue;
prevPassword: Q_StringValue;
newPassword: Q_StringValue;
prevPasswordSha1: Q_StringValue;
newPasswordSha1: Q_StringValue;
result: Q_EnumValue<"success" | "fail">;
} & ExprOp<OpAttr | string>;
export type OpProjection = {
@ -32,6 +36,8 @@ export type OpProjection = {
userId?: number;
prevPassword?: number;
newPassword?: number;
prevPasswordSha1?: number;
newPasswordSha1?: number;
result?: number;
} & Partial<ExprOp<OpAttr | string>>;
export type OpSortAttr = Partial<{
@ -42,6 +48,8 @@ export type OpSortAttr = Partial<{
userId: number;
prevPassword: number;
newPassword: number;
prevPasswordSha1: number;
newPasswordSha1: number;
result: number;
[k: string]: any;
} | ExprOp<OpAttr | string>>;

View File

@ -4,6 +4,8 @@
"user": "用户",
"prevPassword": "原密码",
"newPassword": "新密码",
"prevPasswordSha1": "原sha1加密密码",
"newPasswordSha1": "新sha1加密密码",
"result": "修改结果"
},
"v": {

View File

@ -117,12 +117,14 @@ export type ActionAuth = {
Aggregation: DeduceAggregation<ActionAuth["Projection"], ActionAuth["Filter"], ActionAuth["Sorter"]>;
CreateOperationData: FormCreateData<BaseActionAuth.OpSchema & {
relation?: OakOperation<"create", Relation["CreateOperationData"]> | OakOperation<BaseRelation.OpUpdateAction, Relation["UpdateOperationData"], Relation["Filter"]>;
path?: OakOperation<"create", Path["CreateOperationData"]> | OakOperation<BasePath.OpUpdateAction, Path["UpdateOperationData"], Path["Filter"]>;
}>;
CreateSingle: OakOperation<"create", ActionAuth["CreateOperationData"]>;
CreateMulti: OakOperation<"create", Array<ActionAuth["CreateOperationData"]>>;
Create: ActionAuth["CreateSingle"] | ActionAuth["CreateMulti"];
UpdateOperationData: FormUpdateData<BaseActionAuth.OpSchema & {
relation?: OakOperation<"create", Relation["CreateOperationData"]> | OakOperation<BaseRelation.OpUpdateAction, Relation["UpdateOperationData"], Relation["Filter"]> | OakOperation<"remove", Relation["RemoveOperationData"], Relation["Filter"]>;
path?: OakOperation<"create", Path["CreateOperationData"]> | OakOperation<BasePath.OpUpdateAction, Path["UpdateOperationData"], Path["Filter"]> | OakOperation<"remove", Path["RemoveOperationData"], Path["Filter"]>;
}>;
Update: OakOperation<BaseActionAuth.OpUpdateAction, ActionAuth["UpdateOperationData"], ActionAuth["Filter"], ActionAuth["Sorter"]>;
RemoveOperationData: {};
@ -400,11 +402,17 @@ export type Path = {
Sorter: Path["SortNode"][];
Selection: OakSelection<"select", Path["Projection"], Path["Filter"], Path["Sorter"]>;
Aggregation: DeduceAggregation<Path["Projection"], Path["Filter"], Path["Sorter"]>;
CreateOperationData: FormCreateData<BasePath.OpSchema>;
CreateOperationData: FormCreateData<BasePath.OpSchema & {
actionAuth$path?: (OakOperation<"create", Omit<ActionAuth["CreateOperationData"], "path"> | Omit<ActionAuth["CreateOperationData"], "path">[]> | OakOperation<BaseActionAuth.OpUpdateAction, Omit<ActionAuth["UpdateOperationData"], "path">, ActionAuth["Filter"]>)[];
relationAuth$path?: (OakOperation<"create", Omit<RelationAuth["CreateOperationData"], "path"> | Omit<RelationAuth["CreateOperationData"], "path">[]> | OakOperation<BaseRelationAuth.OpUpdateAction, Omit<RelationAuth["UpdateOperationData"], "path">, RelationAuth["Filter"]>)[];
}>;
CreateSingle: OakOperation<"create", Path["CreateOperationData"]>;
CreateMulti: OakOperation<"create", Array<Path["CreateOperationData"]>>;
Create: Path["CreateSingle"] | Path["CreateMulti"];
UpdateOperationData: FormUpdateData<BasePath.OpSchema>;
UpdateOperationData: FormUpdateData<BasePath.OpSchema & {
actionAuth$path?: (OakOperation<"create", Omit<ActionAuth["CreateOperationData"], "path"> | Omit<ActionAuth["CreateOperationData"], "path">[]> | OakOperation<BaseActionAuth.OpUpdateAction, Omit<ActionAuth["UpdateOperationData"], "path">, ActionAuth["Filter"]> | OakOperation<"remove", ActionAuth["RemoveOperationData"], ActionAuth["Filter"]>)[];
relationAuth$path?: (OakOperation<"create", Omit<RelationAuth["CreateOperationData"], "path"> | Omit<RelationAuth["CreateOperationData"], "path">[]> | OakOperation<BaseRelationAuth.OpUpdateAction, Omit<RelationAuth["UpdateOperationData"], "path">, RelationAuth["Filter"]> | OakOperation<"remove", RelationAuth["RemoveOperationData"], RelationAuth["Filter"]>)[];
}>;
Update: OakOperation<BasePath.OpUpdateAction, Path["UpdateOperationData"], Path["Filter"], Path["Sorter"]>;
RemoveOperationData: {};
Remove: OakOperation<"remove", Path["RemoveOperationData"], Path["Filter"], Path["Sorter"]>;
@ -490,6 +498,9 @@ export type Relation = {
platform?: OakOperation<"create", Platform["CreateOperationData"]> | OakOperation<BasePlatform.OpUpdateAction, Platform["UpdateOperationData"], Platform["Filter"]>;
session?: OakOperation<"create", Session["CreateOperationData"]> | OakOperation<BaseSession.OpUpdateAction, Session["UpdateOperationData"], Session["Filter"]>;
toDo?: OakOperation<"create", ToDo["CreateOperationData"]> | OakOperation<BaseToDo.OpUpdateAction, ToDo["UpdateOperationData"], ToDo["Filter"]>;
actionAuth$relation?: (OakOperation<"create", Omit<ActionAuth["CreateOperationData"], "relation"> | Omit<ActionAuth["CreateOperationData"], "relation">[]> | OakOperation<BaseActionAuth.OpUpdateAction, Omit<ActionAuth["UpdateOperationData"], "relation">, ActionAuth["Filter"]>)[];
relationAuth$sourceRelation?: (OakOperation<"create", Omit<RelationAuth["CreateOperationData"], "sourceRelation"> | Omit<RelationAuth["CreateOperationData"], "sourceRelation">[]> | OakOperation<BaseRelationAuth.OpUpdateAction, Omit<RelationAuth["UpdateOperationData"], "sourceRelation">, RelationAuth["Filter"]>)[];
relationAuth$destRelation?: (OakOperation<"create", Omit<RelationAuth["CreateOperationData"], "destRelation"> | Omit<RelationAuth["CreateOperationData"], "destRelation">[]> | OakOperation<BaseRelationAuth.OpUpdateAction, Omit<RelationAuth["UpdateOperationData"], "destRelation">, RelationAuth["Filter"]>)[];
userEntityClaim$relation?: (OakOperation<"create", Omit<UserEntityClaim["CreateOperationData"], "relation"> | Omit<UserEntityClaim["CreateOperationData"], "relation">[]> | OakOperation<BaseUserEntityClaim.OpUpdateAction, Omit<UserEntityClaim["UpdateOperationData"], "relation">, UserEntityClaim["Filter"]>)[];
userRelation$relation?: (OakOperation<"create", Omit<UserRelation["CreateOperationData"], "relation"> | Omit<UserRelation["CreateOperationData"], "relation">[]> | OakOperation<BaseUserRelation.OpUpdateAction, Omit<UserRelation["UpdateOperationData"], "relation">, UserRelation["Filter"]>)[];
}>;
@ -500,6 +511,9 @@ export type Relation = {
platform?: OakOperation<"create", Platform["CreateOperationData"]> | OakOperation<BasePlatform.OpUpdateAction, Platform["UpdateOperationData"], Platform["Filter"]> | OakOperation<"remove", Platform["RemoveOperationData"], Platform["Filter"]>;
session?: OakOperation<"create", Session["CreateOperationData"]> | OakOperation<BaseSession.OpUpdateAction, Session["UpdateOperationData"], Session["Filter"]> | OakOperation<"remove", Session["RemoveOperationData"], Session["Filter"]>;
toDo?: OakOperation<"create", ToDo["CreateOperationData"]> | OakOperation<BaseToDo.OpUpdateAction, ToDo["UpdateOperationData"], ToDo["Filter"]> | OakOperation<"remove", ToDo["RemoveOperationData"], ToDo["Filter"]>;
actionAuth$relation?: (OakOperation<"create", Omit<ActionAuth["CreateOperationData"], "relation"> | Omit<ActionAuth["CreateOperationData"], "relation">[]> | OakOperation<BaseActionAuth.OpUpdateAction, Omit<ActionAuth["UpdateOperationData"], "relation">, ActionAuth["Filter"]> | OakOperation<"remove", ActionAuth["RemoveOperationData"], ActionAuth["Filter"]>)[];
relationAuth$sourceRelation?: (OakOperation<"create", Omit<RelationAuth["CreateOperationData"], "sourceRelation"> | Omit<RelationAuth["CreateOperationData"], "sourceRelation">[]> | OakOperation<BaseRelationAuth.OpUpdateAction, Omit<RelationAuth["UpdateOperationData"], "sourceRelation">, RelationAuth["Filter"]> | OakOperation<"remove", RelationAuth["RemoveOperationData"], RelationAuth["Filter"]>)[];
relationAuth$destRelation?: (OakOperation<"create", Omit<RelationAuth["CreateOperationData"], "destRelation"> | Omit<RelationAuth["CreateOperationData"], "destRelation">[]> | OakOperation<BaseRelationAuth.OpUpdateAction, Omit<RelationAuth["UpdateOperationData"], "destRelation">, RelationAuth["Filter"]> | OakOperation<"remove", RelationAuth["RemoveOperationData"], RelationAuth["Filter"]>)[];
userEntityClaim$relation?: (OakOperation<"create", Omit<UserEntityClaim["CreateOperationData"], "relation"> | Omit<UserEntityClaim["CreateOperationData"], "relation">[]> | OakOperation<BaseUserEntityClaim.OpUpdateAction, Omit<UserEntityClaim["UpdateOperationData"], "relation">, UserEntityClaim["Filter"]> | OakOperation<"remove", UserEntityClaim["RemoveOperationData"], UserEntityClaim["Filter"]>)[];
userRelation$relation?: (OakOperation<"create", Omit<UserRelation["CreateOperationData"], "relation"> | Omit<UserRelation["CreateOperationData"], "relation">[]> | OakOperation<BaseUserRelation.OpUpdateAction, Omit<UserRelation["UpdateOperationData"], "relation">, UserRelation["Filter"]> | OakOperation<"remove", UserRelation["RemoveOperationData"], UserRelation["Filter"]>)[];
}>;
@ -541,6 +555,7 @@ export type RelationAuth = {
Aggregation: DeduceAggregation<RelationAuth["Projection"], RelationAuth["Filter"], RelationAuth["Sorter"]>;
CreateOperationData: FormCreateData<BaseRelationAuth.OpSchema & {
sourceRelation?: OakOperation<"create", Relation["CreateOperationData"]> | OakOperation<BaseRelation.OpUpdateAction, Relation["UpdateOperationData"], Relation["Filter"]>;
path?: OakOperation<"create", Path["CreateOperationData"]> | OakOperation<BasePath.OpUpdateAction, Path["UpdateOperationData"], Path["Filter"]>;
destRelation?: OakOperation<"create", Relation["CreateOperationData"]> | OakOperation<BaseRelation.OpUpdateAction, Relation["UpdateOperationData"], Relation["Filter"]>;
}>;
CreateSingle: OakOperation<"create", RelationAuth["CreateOperationData"]>;
@ -548,6 +563,7 @@ export type RelationAuth = {
Create: RelationAuth["CreateSingle"] | RelationAuth["CreateMulti"];
UpdateOperationData: FormUpdateData<BaseRelationAuth.OpSchema & {
sourceRelation?: OakOperation<"create", Relation["CreateOperationData"]> | OakOperation<BaseRelation.OpUpdateAction, Relation["UpdateOperationData"], Relation["Filter"]> | OakOperation<"remove", Relation["RemoveOperationData"], Relation["Filter"]>;
path?: OakOperation<"create", Path["CreateOperationData"]> | OakOperation<BasePath.OpUpdateAction, Path["UpdateOperationData"], Path["Filter"]> | OakOperation<"remove", Path["RemoveOperationData"], Path["Filter"]>;
destRelation?: OakOperation<"create", Relation["CreateOperationData"]> | OakOperation<BaseRelation.OpUpdateAction, Relation["UpdateOperationData"], Relation["Filter"]> | OakOperation<"remove", Relation["RemoveOperationData"], Relation["Filter"]>;
}>;
Update: OakOperation<BaseRelationAuth.OpUpdateAction, RelationAuth["UpdateOperationData"], RelationAuth["Filter"], RelationAuth["Sorter"]>;

View File

@ -4,7 +4,7 @@ export const desc = {
origin: {
notNull: true,
type: "enum",
enumeration: ["qiniu", "wechat", "ctyun", "aliyun", "tencent", "local", "unknown"]
enumeration: ["qiniu", "wechat", "ctyun", "aliyun", "tencent", "local", "unknown", "s3"]
},
type: {
notNull: true,

View File

@ -1,6 +1,7 @@
export const style = {
color: {
origin: {
s3: '#FFA500',
qiniu: '#37caff',
wechat: '#2aae67',
ctyun: '#ff0000',

View File

@ -4,7 +4,7 @@ import { MakeAction as OakMakeAction, EntityShape } from "oak-domain/lib/types/E
import { GenericAction } from "oak-domain/lib/actions/action";
import { String, Text, Int, Float, Boolean } from "oak-domain/lib/types/DataType";
export type OpSchema = EntityShape & {
origin: "qiniu" | "wechat" | "ctyun" | "aliyun" | "tencent" | "local" | "unknown";
origin: "qiniu" | "wechat" | "ctyun" | "aliyun" | "tencent" | "local" | "unknown" | "s3";
type: "image" | "video" | "audio" | "file";
bucket?: String<32> | null;
objectId?: String<64> | null;
@ -33,7 +33,7 @@ export type OpFilter = {
$$createAt$$: Q_DateValue;
$$seq$$: Q_NumberValue;
$$updateAt$$: Q_DateValue;
origin: Q_EnumValue<"qiniu" | "wechat" | "ctyun" | "aliyun" | "tencent" | "local" | "unknown">;
origin: Q_EnumValue<"qiniu" | "wechat" | "ctyun" | "aliyun" | "tencent" | "local" | "unknown" | "s3">;
type: Q_EnumValue<"image" | "video" | "audio" | "file">;
bucket: Q_StringValue;
objectId: Q_StringValue;

View File

@ -30,7 +30,8 @@
"aliyun": "阿里云",
"tencent": "腾讯云",
"local": "本地",
"unknown": "未知"
"unknown": "未知",
"s3": "S3"
},
"type": {
"image": "图像",

View File

@ -34,7 +34,6 @@ export const desc = {
type: "object"
}
},
static: true,
actionType: "crud",
actions,
indexes: [

View File

@ -27,10 +27,18 @@ export type PfwConfig = {
export type MfwConfig = {
appId: string;
};
export type PwdConfig = {
mode: "all" | "plain" | "sha1";
min: number;
max: number;
verify?: boolean;
regexs?: string[];
tip?: string;
};
export type OpSchema = EntityShape & {
systemId: ForeignKey<"system">;
type: Type;
config?: (SmsConfig | EmailConfig | PfwConfig | MfwConfig) | null;
config?: (SmsConfig | EmailConfig | PfwConfig | MfwConfig | PwdConfig) | null;
enabled: Boolean;
} & {
[A in ExpressionKey]?: any;
@ -43,7 +51,7 @@ export type OpFilter = {
$$updateAt$$: Q_DateValue;
systemId: Q_StringValue;
type: Q_EnumValue<Type>;
config: JsonFilter<SmsConfig | EmailConfig | PfwConfig | MfwConfig>;
config: JsonFilter<SmsConfig | EmailConfig | PfwConfig | MfwConfig | PwdConfig>;
enabled: Q_BooleanValue;
} & ExprOp<OpAttr | string>;
export type OpProjection = {
@ -55,7 +63,7 @@ export type OpProjection = {
$$seq$$?: number;
systemId?: number;
type?: number;
config?: number | JsonProjection<SmsConfig | EmailConfig | PfwConfig | MfwConfig>;
config?: number | JsonProjection<SmsConfig | EmailConfig | PfwConfig | MfwConfig | PwdConfig>;
enabled?: number;
} & Partial<ExprOp<OpAttr | string>>;
export type OpSortAttr = Partial<{

View File

@ -16,7 +16,6 @@ export const desc = {
}
},
recursive: {
notNull: true,
type: "boolean"
},
sourceEntity: {
@ -33,7 +32,6 @@ export const desc = {
}
}
},
static: true,
actionType: "crud",
actions,
indexes: [

View File

@ -5,7 +5,7 @@ import { String, Boolean } from "oak-domain/lib/types/DataType";
export type OpSchema = EntityShape & {
destEntity: String<32>;
value: String<256>;
recursive: Boolean;
recursive?: Boolean | null;
sourceEntity: String<32>;
desc?: String<256> | null;
} & {

View File

@ -17,7 +17,6 @@ export const desc = {
ref: "relation"
}
},
static: true,
actionType: "crud",
actions,
indexes: [

View File

@ -19,8 +19,7 @@ export const desc = {
type: "ref",
ref: "platform"
},
folder // 提现的loss在用户提现时计算
: {
folder: {
type: "varchar",
params: {
length: 16

View File

@ -190,10 +190,10 @@ export default class AliPay extends AliPayDebug {
const qrCodeWidth = this.apProduct.config?.qrCodeWidth || 100;
const params = {
bizContent: {
subject: pay.order?.desc || (pay.orderId ? '订单支付' : '帐户充值'),
out_trade_no: out_trade_no,
total_amount: totalAmount,
product_code: 'FAST_INSTANT_TRADE_PAY',
subject: pay.order?.desc || (pay.orderId ? '订单支付' : '帐户充值'), // 订单标题
out_trade_no: out_trade_no, // 商户订单号64个字符以内、可包含字母、数字、下划线需保证在商户端不重复
total_amount: totalAmount, // 订单总金额,单位为元
product_code: 'FAST_INSTANT_TRADE_PAY', // 销售产品码,商家和支付宝签约的产品码
notify_url: payNotifyUrl,
qr_pay_mode: qrPayMode,
qrcode_width: qrCodeWidth,

View File

@ -157,9 +157,9 @@ export default class WechatMpShipDebug {
name: from.name,
mobile: from.phone,
// country: from!.area!.parent!.parent!.name!, //国家
province: from.area.parent.parent.name,
city: from.area.parent.name,
area: from.area.name,
province: from.area.parent.parent.name, //省份
city: from.area.parent.name, //市
area: from.area.name, // 区
address: from.detail, //详细地址
},
receiver: {

View File

@ -33,7 +33,7 @@ exports.entityDesc = {
keyType: '指定应用私钥类型',
gateway: "支付宝网关地址",
wsServiceUrl: 'websocket服务地址',
timeout: "网关超时时间",
timeout: "网关超时时间", //(单位毫秒),默认值是 5000
needEncrypt: "是否需要AES加解密",
encryptKey: 'AES密钥', //调用AES加解密相关接口时需要
},

View File

@ -18,7 +18,6 @@ exports.desc = {
type: "object"
}
},
static: true,
actionType: "crud",
actions: action_1.genericActions,
indexes: [

View File

@ -4,7 +4,6 @@ import { MakeAction as OakMakeAction, EntityShape } from "oak-domain/lib/types/E
import { GenericAction } from "oak-domain/lib/actions/action";
import { String, Text } from "oak-domain/lib/types/DataType";
import { Style } from "oak-general-business/lib/types/Style";
export type Passport = "email" | "mobile" | "wechat" | "wechatPublic" | "wechatNative";
export type AppType = "web" | "wechatMp" | "wechatPublic" | "native";
export type WechatMpConfig = {
type: "wechatMp";
@ -19,7 +18,6 @@ export type WechatMpConfig = {
mode: "clear" | "compatible" | "safe";
dataFormat: "json" | "xml";
};
passport?: Passport[];
};
export type WebConfig = {
type: "web";
@ -33,7 +31,6 @@ export type WebConfig = {
appId: string;
appSecret: string;
};
passport?: Passport[];
location: {
protocol: "http:" | "https:";
hostname: string;
@ -56,7 +53,6 @@ export type WechatPublicConfig = {
appId: string;
originalId: string;
};
passport?: Passport[];
location: {
protocol: "http:" | "https:";
hostname: string;
@ -65,7 +61,6 @@ export type WechatPublicConfig = {
};
export type NativeConfig = {
type: "native";
passport?: Passport[];
wechatNative?: {
appId: string;
appSecret: string;

View File

@ -21,6 +21,12 @@ exports.desc = {
length: 32
}
},
prevPasswordSha1: {
type: "text"
},
newPasswordSha1: {
type: "text"
},
result: {
notNull: true,
type: "enum",

View File

@ -2,11 +2,13 @@ import { ForeignKey } from "oak-domain/lib/types/DataType";
import { Q_DateValue, 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 { GenericAction } from "oak-domain/lib/actions/action";
import { String } from "oak-domain/lib/types/DataType";
import { String, Text } from "oak-domain/lib/types/DataType";
export type OpSchema = EntityShape & {
userId: ForeignKey<"user">;
prevPassword?: String<32> | null;
newPassword?: String<32> | null;
prevPasswordSha1?: Text | null;
newPasswordSha1?: Text | null;
result: "success" | "fail";
} & {
[A in ExpressionKey]?: any;
@ -20,6 +22,8 @@ export type OpFilter = {
userId: Q_StringValue;
prevPassword: Q_StringValue;
newPassword: Q_StringValue;
prevPasswordSha1: Q_StringValue;
newPasswordSha1: Q_StringValue;
result: Q_EnumValue<"success" | "fail">;
} & ExprOp<OpAttr | string>;
export type OpProjection = {
@ -32,6 +36,8 @@ export type OpProjection = {
userId?: number;
prevPassword?: number;
newPassword?: number;
prevPasswordSha1?: number;
newPasswordSha1?: number;
result?: number;
} & Partial<ExprOp<OpAttr | string>>;
export type OpSortAttr = Partial<{
@ -42,6 +48,8 @@ export type OpSortAttr = Partial<{
userId: number;
prevPassword: number;
newPassword: number;
prevPasswordSha1: number;
newPasswordSha1: number;
result: number;
[k: string]: any;
} | ExprOp<OpAttr | string>>;

View File

@ -4,6 +4,8 @@
"user": "用户",
"prevPassword": "原密码",
"newPassword": "新密码",
"prevPasswordSha1": "原sha1加密密码",
"newPasswordSha1": "新sha1加密密码",
"result": "修改结果"
},
"v": {

View File

@ -117,12 +117,14 @@ export type ActionAuth = {
Aggregation: DeduceAggregation<ActionAuth["Projection"], ActionAuth["Filter"], ActionAuth["Sorter"]>;
CreateOperationData: FormCreateData<BaseActionAuth.OpSchema & {
relation?: OakOperation<"create", Relation["CreateOperationData"]> | OakOperation<BaseRelation.OpUpdateAction, Relation["UpdateOperationData"], Relation["Filter"]>;
path?: OakOperation<"create", Path["CreateOperationData"]> | OakOperation<BasePath.OpUpdateAction, Path["UpdateOperationData"], Path["Filter"]>;
}>;
CreateSingle: OakOperation<"create", ActionAuth["CreateOperationData"]>;
CreateMulti: OakOperation<"create", Array<ActionAuth["CreateOperationData"]>>;
Create: ActionAuth["CreateSingle"] | ActionAuth["CreateMulti"];
UpdateOperationData: FormUpdateData<BaseActionAuth.OpSchema & {
relation?: OakOperation<"create", Relation["CreateOperationData"]> | OakOperation<BaseRelation.OpUpdateAction, Relation["UpdateOperationData"], Relation["Filter"]> | OakOperation<"remove", Relation["RemoveOperationData"], Relation["Filter"]>;
path?: OakOperation<"create", Path["CreateOperationData"]> | OakOperation<BasePath.OpUpdateAction, Path["UpdateOperationData"], Path["Filter"]> | OakOperation<"remove", Path["RemoveOperationData"], Path["Filter"]>;
}>;
Update: OakOperation<BaseActionAuth.OpUpdateAction, ActionAuth["UpdateOperationData"], ActionAuth["Filter"], ActionAuth["Sorter"]>;
RemoveOperationData: {};
@ -400,11 +402,17 @@ export type Path = {
Sorter: Path["SortNode"][];
Selection: OakSelection<"select", Path["Projection"], Path["Filter"], Path["Sorter"]>;
Aggregation: DeduceAggregation<Path["Projection"], Path["Filter"], Path["Sorter"]>;
CreateOperationData: FormCreateData<BasePath.OpSchema>;
CreateOperationData: FormCreateData<BasePath.OpSchema & {
actionAuth$path?: (OakOperation<"create", Omit<ActionAuth["CreateOperationData"], "path"> | Omit<ActionAuth["CreateOperationData"], "path">[]> | OakOperation<BaseActionAuth.OpUpdateAction, Omit<ActionAuth["UpdateOperationData"], "path">, ActionAuth["Filter"]>)[];
relationAuth$path?: (OakOperation<"create", Omit<RelationAuth["CreateOperationData"], "path"> | Omit<RelationAuth["CreateOperationData"], "path">[]> | OakOperation<BaseRelationAuth.OpUpdateAction, Omit<RelationAuth["UpdateOperationData"], "path">, RelationAuth["Filter"]>)[];
}>;
CreateSingle: OakOperation<"create", Path["CreateOperationData"]>;
CreateMulti: OakOperation<"create", Array<Path["CreateOperationData"]>>;
Create: Path["CreateSingle"] | Path["CreateMulti"];
UpdateOperationData: FormUpdateData<BasePath.OpSchema>;
UpdateOperationData: FormUpdateData<BasePath.OpSchema & {
actionAuth$path?: (OakOperation<"create", Omit<ActionAuth["CreateOperationData"], "path"> | Omit<ActionAuth["CreateOperationData"], "path">[]> | OakOperation<BaseActionAuth.OpUpdateAction, Omit<ActionAuth["UpdateOperationData"], "path">, ActionAuth["Filter"]> | OakOperation<"remove", ActionAuth["RemoveOperationData"], ActionAuth["Filter"]>)[];
relationAuth$path?: (OakOperation<"create", Omit<RelationAuth["CreateOperationData"], "path"> | Omit<RelationAuth["CreateOperationData"], "path">[]> | OakOperation<BaseRelationAuth.OpUpdateAction, Omit<RelationAuth["UpdateOperationData"], "path">, RelationAuth["Filter"]> | OakOperation<"remove", RelationAuth["RemoveOperationData"], RelationAuth["Filter"]>)[];
}>;
Update: OakOperation<BasePath.OpUpdateAction, Path["UpdateOperationData"], Path["Filter"], Path["Sorter"]>;
RemoveOperationData: {};
Remove: OakOperation<"remove", Path["RemoveOperationData"], Path["Filter"], Path["Sorter"]>;
@ -490,6 +498,9 @@ export type Relation = {
platform?: OakOperation<"create", Platform["CreateOperationData"]> | OakOperation<BasePlatform.OpUpdateAction, Platform["UpdateOperationData"], Platform["Filter"]>;
session?: OakOperation<"create", Session["CreateOperationData"]> | OakOperation<BaseSession.OpUpdateAction, Session["UpdateOperationData"], Session["Filter"]>;
toDo?: OakOperation<"create", ToDo["CreateOperationData"]> | OakOperation<BaseToDo.OpUpdateAction, ToDo["UpdateOperationData"], ToDo["Filter"]>;
actionAuth$relation?: (OakOperation<"create", Omit<ActionAuth["CreateOperationData"], "relation"> | Omit<ActionAuth["CreateOperationData"], "relation">[]> | OakOperation<BaseActionAuth.OpUpdateAction, Omit<ActionAuth["UpdateOperationData"], "relation">, ActionAuth["Filter"]>)[];
relationAuth$sourceRelation?: (OakOperation<"create", Omit<RelationAuth["CreateOperationData"], "sourceRelation"> | Omit<RelationAuth["CreateOperationData"], "sourceRelation">[]> | OakOperation<BaseRelationAuth.OpUpdateAction, Omit<RelationAuth["UpdateOperationData"], "sourceRelation">, RelationAuth["Filter"]>)[];
relationAuth$destRelation?: (OakOperation<"create", Omit<RelationAuth["CreateOperationData"], "destRelation"> | Omit<RelationAuth["CreateOperationData"], "destRelation">[]> | OakOperation<BaseRelationAuth.OpUpdateAction, Omit<RelationAuth["UpdateOperationData"], "destRelation">, RelationAuth["Filter"]>)[];
userEntityClaim$relation?: (OakOperation<"create", Omit<UserEntityClaim["CreateOperationData"], "relation"> | Omit<UserEntityClaim["CreateOperationData"], "relation">[]> | OakOperation<BaseUserEntityClaim.OpUpdateAction, Omit<UserEntityClaim["UpdateOperationData"], "relation">, UserEntityClaim["Filter"]>)[];
userRelation$relation?: (OakOperation<"create", Omit<UserRelation["CreateOperationData"], "relation"> | Omit<UserRelation["CreateOperationData"], "relation">[]> | OakOperation<BaseUserRelation.OpUpdateAction, Omit<UserRelation["UpdateOperationData"], "relation">, UserRelation["Filter"]>)[];
}>;
@ -500,6 +511,9 @@ export type Relation = {
platform?: OakOperation<"create", Platform["CreateOperationData"]> | OakOperation<BasePlatform.OpUpdateAction, Platform["UpdateOperationData"], Platform["Filter"]> | OakOperation<"remove", Platform["RemoveOperationData"], Platform["Filter"]>;
session?: OakOperation<"create", Session["CreateOperationData"]> | OakOperation<BaseSession.OpUpdateAction, Session["UpdateOperationData"], Session["Filter"]> | OakOperation<"remove", Session["RemoveOperationData"], Session["Filter"]>;
toDo?: OakOperation<"create", ToDo["CreateOperationData"]> | OakOperation<BaseToDo.OpUpdateAction, ToDo["UpdateOperationData"], ToDo["Filter"]> | OakOperation<"remove", ToDo["RemoveOperationData"], ToDo["Filter"]>;
actionAuth$relation?: (OakOperation<"create", Omit<ActionAuth["CreateOperationData"], "relation"> | Omit<ActionAuth["CreateOperationData"], "relation">[]> | OakOperation<BaseActionAuth.OpUpdateAction, Omit<ActionAuth["UpdateOperationData"], "relation">, ActionAuth["Filter"]> | OakOperation<"remove", ActionAuth["RemoveOperationData"], ActionAuth["Filter"]>)[];
relationAuth$sourceRelation?: (OakOperation<"create", Omit<RelationAuth["CreateOperationData"], "sourceRelation"> | Omit<RelationAuth["CreateOperationData"], "sourceRelation">[]> | OakOperation<BaseRelationAuth.OpUpdateAction, Omit<RelationAuth["UpdateOperationData"], "sourceRelation">, RelationAuth["Filter"]> | OakOperation<"remove", RelationAuth["RemoveOperationData"], RelationAuth["Filter"]>)[];
relationAuth$destRelation?: (OakOperation<"create", Omit<RelationAuth["CreateOperationData"], "destRelation"> | Omit<RelationAuth["CreateOperationData"], "destRelation">[]> | OakOperation<BaseRelationAuth.OpUpdateAction, Omit<RelationAuth["UpdateOperationData"], "destRelation">, RelationAuth["Filter"]> | OakOperation<"remove", RelationAuth["RemoveOperationData"], RelationAuth["Filter"]>)[];
userEntityClaim$relation?: (OakOperation<"create", Omit<UserEntityClaim["CreateOperationData"], "relation"> | Omit<UserEntityClaim["CreateOperationData"], "relation">[]> | OakOperation<BaseUserEntityClaim.OpUpdateAction, Omit<UserEntityClaim["UpdateOperationData"], "relation">, UserEntityClaim["Filter"]> | OakOperation<"remove", UserEntityClaim["RemoveOperationData"], UserEntityClaim["Filter"]>)[];
userRelation$relation?: (OakOperation<"create", Omit<UserRelation["CreateOperationData"], "relation"> | Omit<UserRelation["CreateOperationData"], "relation">[]> | OakOperation<BaseUserRelation.OpUpdateAction, Omit<UserRelation["UpdateOperationData"], "relation">, UserRelation["Filter"]> | OakOperation<"remove", UserRelation["RemoveOperationData"], UserRelation["Filter"]>)[];
}>;
@ -541,6 +555,7 @@ export type RelationAuth = {
Aggregation: DeduceAggregation<RelationAuth["Projection"], RelationAuth["Filter"], RelationAuth["Sorter"]>;
CreateOperationData: FormCreateData<BaseRelationAuth.OpSchema & {
sourceRelation?: OakOperation<"create", Relation["CreateOperationData"]> | OakOperation<BaseRelation.OpUpdateAction, Relation["UpdateOperationData"], Relation["Filter"]>;
path?: OakOperation<"create", Path["CreateOperationData"]> | OakOperation<BasePath.OpUpdateAction, Path["UpdateOperationData"], Path["Filter"]>;
destRelation?: OakOperation<"create", Relation["CreateOperationData"]> | OakOperation<BaseRelation.OpUpdateAction, Relation["UpdateOperationData"], Relation["Filter"]>;
}>;
CreateSingle: OakOperation<"create", RelationAuth["CreateOperationData"]>;
@ -548,6 +563,7 @@ export type RelationAuth = {
Create: RelationAuth["CreateSingle"] | RelationAuth["CreateMulti"];
UpdateOperationData: FormUpdateData<BaseRelationAuth.OpSchema & {
sourceRelation?: OakOperation<"create", Relation["CreateOperationData"]> | OakOperation<BaseRelation.OpUpdateAction, Relation["UpdateOperationData"], Relation["Filter"]> | OakOperation<"remove", Relation["RemoveOperationData"], Relation["Filter"]>;
path?: OakOperation<"create", Path["CreateOperationData"]> | OakOperation<BasePath.OpUpdateAction, Path["UpdateOperationData"], Path["Filter"]> | OakOperation<"remove", Path["RemoveOperationData"], Path["Filter"]>;
destRelation?: OakOperation<"create", Relation["CreateOperationData"]> | OakOperation<BaseRelation.OpUpdateAction, Relation["UpdateOperationData"], Relation["Filter"]> | OakOperation<"remove", Relation["RemoveOperationData"], Relation["Filter"]>;
}>;
Update: OakOperation<BaseRelationAuth.OpUpdateAction, RelationAuth["UpdateOperationData"], RelationAuth["Filter"], RelationAuth["Sorter"]>;

View File

@ -7,7 +7,7 @@ exports.desc = {
origin: {
notNull: true,
type: "enum",
enumeration: ["qiniu", "wechat", "ctyun", "aliyun", "tencent", "local", "unknown"]
enumeration: ["qiniu", "wechat", "ctyun", "aliyun", "tencent", "local", "unknown", "s3"]
},
type: {
notNull: true,

View File

@ -4,6 +4,7 @@ exports.style = void 0;
exports.style = {
color: {
origin: {
s3: '#FFA500',
qiniu: '#37caff',
wechat: '#2aae67',
ctyun: '#ff0000',

View File

@ -4,7 +4,7 @@ import { MakeAction as OakMakeAction, EntityShape } from "oak-domain/lib/types/E
import { GenericAction } from "oak-domain/lib/actions/action";
import { String, Text, Int, Float, Boolean } from "oak-domain/lib/types/DataType";
export type OpSchema = EntityShape & {
origin: "qiniu" | "wechat" | "ctyun" | "aliyun" | "tencent" | "local" | "unknown";
origin: "qiniu" | "wechat" | "ctyun" | "aliyun" | "tencent" | "local" | "unknown" | "s3";
type: "image" | "video" | "audio" | "file";
bucket?: String<32> | null;
objectId?: String<64> | null;
@ -33,7 +33,7 @@ export type OpFilter = {
$$createAt$$: Q_DateValue;
$$seq$$: Q_NumberValue;
$$updateAt$$: Q_DateValue;
origin: Q_EnumValue<"qiniu" | "wechat" | "ctyun" | "aliyun" | "tencent" | "local" | "unknown">;
origin: Q_EnumValue<"qiniu" | "wechat" | "ctyun" | "aliyun" | "tencent" | "local" | "unknown" | "s3">;
type: Q_EnumValue<"image" | "video" | "audio" | "file">;
bucket: Q_StringValue;
objectId: Q_StringValue;

View File

@ -30,7 +30,8 @@
"aliyun": "阿里云",
"tencent": "腾讯云",
"local": "本地",
"unknown": "未知"
"unknown": "未知",
"s3": "S3"
},
"type": {
"image": "图像",

View File

@ -37,7 +37,6 @@ exports.desc = {
type: "object"
}
},
static: true,
actionType: "crud",
actions: action_1.genericActions,
indexes: [

View File

@ -27,10 +27,18 @@ export type PfwConfig = {
export type MfwConfig = {
appId: string;
};
export type PwdConfig = {
mode: "all" | "plain" | "sha1";
min: number;
max: number;
verify?: boolean;
regexs?: string[];
tip?: string;
};
export type OpSchema = EntityShape & {
systemId: ForeignKey<"system">;
type: Type;
config?: (SmsConfig | EmailConfig | PfwConfig | MfwConfig) | null;
config?: (SmsConfig | EmailConfig | PfwConfig | MfwConfig | PwdConfig) | null;
enabled: Boolean;
} & {
[A in ExpressionKey]?: any;
@ -43,7 +51,7 @@ export type OpFilter = {
$$updateAt$$: Q_DateValue;
systemId: Q_StringValue;
type: Q_EnumValue<Type>;
config: JsonFilter<SmsConfig | EmailConfig | PfwConfig | MfwConfig>;
config: JsonFilter<SmsConfig | EmailConfig | PfwConfig | MfwConfig | PwdConfig>;
enabled: Q_BooleanValue;
} & ExprOp<OpAttr | string>;
export type OpProjection = {
@ -55,7 +63,7 @@ export type OpProjection = {
$$seq$$?: number;
systemId?: number;
type?: number;
config?: number | JsonProjection<SmsConfig | EmailConfig | PfwConfig | MfwConfig>;
config?: number | JsonProjection<SmsConfig | EmailConfig | PfwConfig | MfwConfig | PwdConfig>;
enabled?: number;
} & Partial<ExprOp<OpAttr | string>>;
export type OpSortAttr = Partial<{

View File

@ -19,7 +19,6 @@ exports.desc = {
}
},
recursive: {
notNull: true,
type: "boolean"
},
sourceEntity: {
@ -36,7 +35,6 @@ exports.desc = {
}
}
},
static: true,
actionType: "crud",
actions: action_1.genericActions,
indexes: [

View File

@ -5,7 +5,7 @@ import { String, Boolean } from "oak-domain/lib/types/DataType";
export type OpSchema = EntityShape & {
destEntity: String<32>;
value: String<256>;
recursive: Boolean;
recursive?: Boolean | null;
sourceEntity: String<32>;
desc?: String<256> | null;
} & {

View File

@ -20,7 +20,6 @@ exports.desc = {
ref: "relation"
}
},
static: true,
actionType: "crud",
actions: action_1.genericActions,
indexes: [

View File

@ -22,8 +22,7 @@ exports.desc = {
type: "ref",
ref: "platform"
},
folder // 提现的loss在用户提现时计算
: {
folder: {
type: "varchar",
params: {
length: 16

View File

@ -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;

View File

@ -193,10 +193,10 @@ class AliPay extends AliPay_debug_1.default {
const qrCodeWidth = this.apProduct.config?.qrCodeWidth || 100;
const params = {
bizContent: {
subject: pay.order?.desc || (pay.orderId ? '订单支付' : '帐户充值'),
out_trade_no: out_trade_no,
total_amount: totalAmount,
product_code: 'FAST_INSTANT_TRADE_PAY',
subject: pay.order?.desc || (pay.orderId ? '订单支付' : '帐户充值'), // 订单标题
out_trade_no: out_trade_no, // 商户订单号64个字符以内、可包含字母、数字、下划线需保证在商户端不重复
total_amount: totalAmount, // 订单总金额,单位为元
product_code: 'FAST_INSTANT_TRADE_PAY', // 销售产品码,商家和支付宝签约的产品码
notify_url: payNotifyUrl,
qr_pay_mode: qrPayMode,
qrcode_width: qrCodeWidth,

View File

@ -160,9 +160,9 @@ class WechatMpShipDebug {
name: from.name,
mobile: from.phone,
// country: from!.area!.parent!.parent!.name!, //国家
province: from.area.parent.parent.name,
city: from.area.parent.name,
area: from.area.name,
province: from.area.parent.parent.name, //省份
city: from.area.parent.name, //市
area: from.area.name, // 区
address: from.detail, //详细地址
},
receiver: {

View File

@ -1,6 +1,6 @@
{
"name": "oak-pay-business",
"version": "3.2.0",
"version": "3.3.1",
"description": "",
"files": [
"lib/**/*",
@ -31,10 +31,10 @@
"alipay-sdk": "^4.14.0",
"classnames": "^2.3.1",
"dayjs": "^1.11.5",
"oak-domain": "^5.1.27",
"oak-external-sdk": "^2.3.10",
"oak-frontend-base": "^5.3.37",
"oak-general-business": "~5.8.1",
"oak-domain": "^5.1.28",
"oak-external-sdk": "^2.3.11",
"oak-frontend-base": "^5.3.38",
"oak-general-business": "~5.9.2",
"react-markdown": "^9.0.3",
"wechat-pay-nodejs": "^0.2.3"
},