extraFile
This commit is contained in:
commit
52673b8960
|
|
@ -2,7 +2,7 @@ import { WebEnv, WechatMpEnv } from 'oak-domain/lib/types/Environment';
|
|||
import { AppType } from '../oak-app-domain/Application/Schema';
|
||||
import { EntityDict } from '../oak-app-domain';
|
||||
import { QiniuUploadInfo } from 'oak-frontend-base';
|
||||
import { Config, Origin } from '../types/Config';
|
||||
import { Config } from '../types/Config';
|
||||
import { BackendRuntimeContext } from '../context/BackendRuntimeContext';
|
||||
export declare type GeneralAspectDict<ED extends EntityDict, Cxt extends BackendRuntimeContext<ED>> = {
|
||||
mergeUser: (params: {
|
||||
|
|
@ -42,9 +42,7 @@ export declare type GeneralAspectDict<ED extends EntityDict, Cxt extends Backend
|
|||
env: WebEnv | WechatMpEnv;
|
||||
}, context: Cxt) => Promise<string>;
|
||||
getUploadInfo: (params: {
|
||||
origin: Origin;
|
||||
bucket?: string;
|
||||
key?: string;
|
||||
extraFile: EntityDict['extraFile']['CreateSingle']['data'];
|
||||
}, context: Cxt) => Promise<QiniuUploadInfo>;
|
||||
sendCaptcha: (params: {
|
||||
mobile: string;
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
import { EntityDict } from '../oak-app-domain';
|
||||
import { Origin } from '../types/Config';
|
||||
import { QiniuUploadInfo } from 'oak-frontend-base';
|
||||
import { BackendRuntimeContext } from '../context/BackendRuntimeContext';
|
||||
export declare function getUploadInfo<ED extends EntityDict, Cxt extends BackendRuntimeContext<ED>>(params: {
|
||||
origin: Origin;
|
||||
bucket?: string;
|
||||
key?: string;
|
||||
extraFile: EntityDict['extraFile']['CreateSingle']['data'];
|
||||
}, context: Cxt): Promise<QiniuUploadInfo>;
|
||||
export declare function upload<ED extends EntityDict, Cxt extends BackendRuntimeContext<ED>>(params: {
|
||||
extraFile: EntityDict['extraFile']['CreateSingle']['data'];
|
||||
}, context: Cxt): Promise<QiniuUploadInfo>;
|
||||
export declare function getInfoByUrl(params: {
|
||||
url: string;
|
||||
|
|
|
|||
|
|
@ -2,7 +2,20 @@ import { getConfig } from '../utils/getContextConfig';
|
|||
import { assert } from 'oak-domain/lib/utils/assert';
|
||||
import { WechatSDK } from 'oak-external-sdk';
|
||||
export async function getUploadInfo(params, context) {
|
||||
const { origin, key, bucket } = params;
|
||||
const { origin, extra1, filename, objectId, extension, entity, bucket } = params.extraFile;
|
||||
// 构造文件上传所需的key
|
||||
const key = `${entity ? entity + '/' : ''}${objectId}${extension ? '.' + extension : ''}`;
|
||||
assert(origin && origin !== 'unknown');
|
||||
const { instance, config, } = await getConfig(context, 'Cos', origin);
|
||||
assert(origin === 'qiniu');
|
||||
const { uploadHost, domain, bucket: bucket2 } = config;
|
||||
return instance.getUploadInfo(uploadHost, domain, bucket || bucket2, key);
|
||||
}
|
||||
export async function upload(params, context) {
|
||||
const { origin, extra1, filename, objectId, extension, entity, bucket } = params.extraFile;
|
||||
// 构造文件上传所需的key
|
||||
const key = `${entity ? entity + '/' : ''}${objectId}${extension ? '.' + extension : ''}`;
|
||||
assert(origin && origin !== 'unknown');
|
||||
const { instance, config, } = await getConfig(context, 'Cos', origin);
|
||||
assert(origin === 'qiniu');
|
||||
const { uploadHost, domain, bucket: bucket2 } = config;
|
||||
|
|
|
|||
|
|
@ -37,5 +37,5 @@ export declare type Poi = {
|
|||
email?: string;
|
||||
businessArea?: string;
|
||||
};
|
||||
declare const Location: (props: LocationProps) => import("react/jsx-runtime").JSX.Element;
|
||||
declare const Location: (props: LocationProps) => JSX.Element;
|
||||
export default Location;
|
||||
|
|
|
|||
|
|
@ -29,5 +29,5 @@ export interface AMapProps extends APILoaderProps {
|
|||
securityJsCode?: string;
|
||||
serviceHost?: string;
|
||||
}
|
||||
declare const memo: (props: AMapProps) => import("react/jsx-runtime").JSX.Element;
|
||||
declare const memo: (props: AMapProps) => JSX.Element;
|
||||
export default memo;
|
||||
|
|
|
|||
|
|
@ -7,4 +7,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'article', f
|
|||
name: string;
|
||||
width: string;
|
||||
editor: any;
|
||||
}, {}>): import("react/jsx-runtime").JSX.Element;
|
||||
}, {}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -8,4 +8,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'article', f
|
|||
content?: string;
|
||||
html?: string;
|
||||
origin?: string;
|
||||
}, {}>): import("react/jsx-runtime").JSX.Element;
|
||||
}, {}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -8,4 +8,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'article', f
|
|||
content?: string;
|
||||
html?: string;
|
||||
origin?: string;
|
||||
}, {}>): import("react/jsx-runtime").JSX.Element;
|
||||
}, {}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -19,4 +19,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'articleMenu
|
|||
setCurrentArticle: (id: string) => void;
|
||||
}, {
|
||||
createOne: () => Promise<void>;
|
||||
}>): import("react/jsx-runtime").JSX.Element | null;
|
||||
}>): JSX.Element | null;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
import { generateNewId } from 'oak-domain/lib/utils/uuid';
|
||||
export default OakComponent({
|
||||
entity: 'article',
|
||||
projection: {
|
||||
|
|
@ -71,16 +70,18 @@ export default OakComponent({
|
|||
},
|
||||
},
|
||||
methods: {
|
||||
async addExtraFile(extraFile) {
|
||||
const result = await this.features.cache.operate('extraFile', {
|
||||
action: 'create',
|
||||
data: extraFile,
|
||||
id: generateNewId(),
|
||||
});
|
||||
return result;
|
||||
},
|
||||
// async addExtraFile(
|
||||
// extraFile: EntityDict['extraFile']['CreateSingle']['data']
|
||||
// ) {
|
||||
// const result = await this.features.cache.operate('extraFile', {
|
||||
// action: 'create',
|
||||
// data: extraFile,
|
||||
// id: generateNewId(),
|
||||
// });
|
||||
// return result;
|
||||
// },
|
||||
async uploadFile(extraFile) {
|
||||
const result = await this.features.extraFile.upload(extraFile);
|
||||
const result = await this.features.extraFile.createAndUpload(extraFile);
|
||||
return result;
|
||||
},
|
||||
setEditor(editor) {
|
||||
|
|
|
|||
|
|
@ -26,4 +26,4 @@ export default function Render(props: WebComponentProps<EntityDict, "article", f
|
|||
}>;
|
||||
clearContentTip: () => void;
|
||||
gotoPreview: (content?: string, title?: string) => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ export default function Render(props) {
|
|||
const { url, bucket } = await uploadFile(extraFile);
|
||||
extraFile.bucket = bucket;
|
||||
extraFile.extra1 = null;
|
||||
await addExtraFile(extraFile);
|
||||
// await addExtraFile(extraFile);
|
||||
// 最后插入图片
|
||||
insertFn("http://" + url, extraFile.filename);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,4 +34,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'articleMenu
|
|||
createSubArticle: (name: string) => Promise<void>;
|
||||
createSubArticleMenu: (name: string) => Promise<void>;
|
||||
gotoDoc: (articleMenuId: string) => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element | null;
|
||||
}>): JSX.Element | null;
|
||||
|
|
|
|||
|
|
@ -33,4 +33,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'articleMenu
|
|||
createOne: (name?: string) => Promise<void>;
|
||||
getDefaultArticle: (rows: EntityDict['articleMenu']['OpSchema'][]) => void;
|
||||
getSearchArticle: () => Promise<string[]>;
|
||||
}>): import("react/jsx-runtime").JSX.Element | null;
|
||||
}>): JSX.Element | null;
|
||||
|
|
|
|||
|
|
@ -14,4 +14,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'articleMenu
|
|||
searchArticle: (searchValue: string) => void;
|
||||
getArticleMenuIdByArticle: (articleId: string, type: string) => void;
|
||||
gotoSearchArticleAndArticleMenu: (articleMenuId: string, articleId: string) => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element | null;
|
||||
}>): JSX.Element | null;
|
||||
|
|
|
|||
|
|
@ -10,4 +10,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'message', f
|
|||
setMobile: (value: string) => void;
|
||||
sendCaptcha: (mobile: string) => Promise<void>;
|
||||
onConfirmByMobile: (mobile: string, captcha: string, newPassword: string) => Promise<void>;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -5,4 +5,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'message', f
|
|||
failTimes: number;
|
||||
}, {
|
||||
onConfirm: (prevPassword: string, password: string) => Promise<void>;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -6,4 +6,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'message', f
|
|||
oakId: string;
|
||||
}, {
|
||||
goToMobile: () => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ declare type IDownloadProps = {
|
|||
style?: React.CSSProperties;
|
||||
filename?: string;
|
||||
};
|
||||
declare function Download(props: IDownloadProps): import("react/jsx-runtime").JSX.Element;
|
||||
declare function Download(props: IDownloadProps): JSX.Element;
|
||||
declare namespace Download {
|
||||
var onDownload: (arrayBuffer: ArrayBuffer, filename: string) => void;
|
||||
var base64ToBlob: (base64String: string) => Blob;
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
import './index.less';
|
||||
declare const Empty: () => import("react/jsx-runtime").JSX.Element;
|
||||
declare const Empty: () => JSX.Element;
|
||||
export default Empty;
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
import './index.less';
|
||||
declare const Empty: () => import("react/jsx-runtime").JSX.Element;
|
||||
declare const Empty: () => JSX.Element;
|
||||
export default Empty;
|
||||
|
|
|
|||
|
|
@ -15,5 +15,5 @@ interface IErrorPageProps {
|
|||
children?: React.ReactNode;
|
||||
icon?: React.ReactNode;
|
||||
}
|
||||
declare function ErrorPage(props: IErrorPageProps): import("react/jsx-runtime").JSX.Element;
|
||||
declare function ErrorPage(props: IErrorPageProps): JSX.Element;
|
||||
export default ErrorPage;
|
||||
|
|
|
|||
|
|
@ -15,5 +15,5 @@ declare type GridProps = {
|
|||
list: Array<Item>;
|
||||
onChange?: (index: number, event?: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;
|
||||
};
|
||||
declare const _default: React.MemoExoticComponent<(props: GridProps) => import("react/jsx-runtime").JSX.Element>;
|
||||
declare const _default: React.MemoExoticComponent<(props: GridProps) => JSX.Element>;
|
||||
export default _default;
|
||||
|
|
|
|||
|
|
@ -17,5 +17,5 @@ declare type PageHeaderProps = {
|
|||
children?: React.ReactNode;
|
||||
showHeader?: boolean;
|
||||
};
|
||||
declare const _default: React.MemoExoticComponent<(props: PageHeaderProps) => import("react/jsx-runtime").JSX.Element>;
|
||||
declare const _default: React.MemoExoticComponent<(props: PageHeaderProps) => JSX.Element>;
|
||||
export default _default;
|
||||
|
|
|
|||
|
|
@ -14,5 +14,5 @@ declare type IQrCodeProps = {
|
|||
successed?: boolean;
|
||||
type?: EntityDict['wechatLogin']['Schema']['type'];
|
||||
};
|
||||
declare function QrCode(props: IQrCodeProps): import("react/jsx-runtime").JSX.Element;
|
||||
declare function QrCode(props: IQrCodeProps): JSX.Element;
|
||||
export default QrCode;
|
||||
|
|
|
|||
|
|
@ -5,5 +5,5 @@ declare type Props = {
|
|||
description?: string;
|
||||
children?: React.ReactNode;
|
||||
};
|
||||
declare const _default: React.MemoExoticComponent<(props: Props) => import("react/jsx-runtime").JSX.Element>;
|
||||
declare const _default: React.MemoExoticComponent<(props: Props) => JSX.Element>;
|
||||
export default _default;
|
||||
|
|
|
|||
|
|
@ -5,5 +5,5 @@ declare type Props = {
|
|||
description?: string;
|
||||
children?: React.ReactNode;
|
||||
};
|
||||
declare const _default: React.MemoExoticComponent<(props: Props) => import("react/jsx-runtime").JSX.Element>;
|
||||
declare const _default: React.MemoExoticComponent<(props: Props) => JSX.Element>;
|
||||
export default _default;
|
||||
|
|
|
|||
|
|
@ -14,5 +14,5 @@ interface GrantProps {
|
|||
rootStyle?: React.CSSProperties;
|
||||
rootClassName?: string;
|
||||
}
|
||||
declare function Grant(props: GrantProps): import("react/jsx-runtime").JSX.Element;
|
||||
declare function Grant(props: GrantProps): JSX.Element;
|
||||
export default Grant;
|
||||
|
|
|
|||
|
|
@ -14,5 +14,5 @@ interface QrCodeProps {
|
|||
rootStyle?: React.CSSProperties;
|
||||
rootClassName?: string;
|
||||
}
|
||||
declare function QrCode(props: QrCodeProps): import("react/jsx-runtime").JSX.Element;
|
||||
declare function QrCode(props: QrCodeProps): JSX.Element;
|
||||
export default QrCode;
|
||||
|
|
|
|||
|
|
@ -15,5 +15,5 @@ export default function render(props: WebComponentProps<EntityDict, 'user', fals
|
|||
setValue: (path: string, value: string) => void;
|
||||
removeItem: (path: string, index: number) => void;
|
||||
cleanKey: (path: string, key: string) => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
export {};
|
||||
|
|
|
|||
|
|
@ -4,4 +4,4 @@ export default function Web(props: {
|
|||
setValue: (path: string, value: any) => void;
|
||||
removeItem: (path: string, index: number) => void;
|
||||
cleanKey: (path: string, key: string) => void;
|
||||
}): import("react/jsx-runtime").JSX.Element;
|
||||
}): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -4,4 +4,4 @@ export default function WechatMp(props: {
|
|||
setValue: (path: string, value: any) => void;
|
||||
removeItem: (path: string, index: number) => void;
|
||||
cleanKey: (path: string, key: string) => void;
|
||||
}): import("react/jsx-runtime").JSX.Element;
|
||||
}): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -5,4 +5,4 @@ export default function WechatPublic(props: {
|
|||
setValue: (path: string, value: any) => void;
|
||||
removeItem: (path: string, index: number) => void;
|
||||
cleanKey: (path: string, key: string) => void;
|
||||
}): import("react/jsx-runtime").JSX.Element;
|
||||
}): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -3,5 +3,5 @@ declare type StyleProps = {
|
|||
value?: StyleType | null;
|
||||
onChange: (value: StyleType) => void;
|
||||
};
|
||||
export default function Render(props: StyleProps): import("react/jsx-runtime").JSX.Element;
|
||||
export default function Render(props: StyleProps): JSX.Element;
|
||||
export {};
|
||||
|
|
|
|||
|
|
@ -3,4 +3,4 @@ export default function Account(props: {
|
|||
account: Required<Config>['Account'];
|
||||
setValue: (path: string, value: any) => void;
|
||||
removeItem: (path: string, index: number) => void;
|
||||
}): import("react/jsx-runtime").JSX.Element;
|
||||
}): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -2,4 +2,4 @@ import { Config } from '../../../../types/Config';
|
|||
export default function Cos(props: {
|
||||
cos: Required<Config>['Cos'];
|
||||
setValue: (path: string, value: any) => void;
|
||||
}): import("react/jsx-runtime").JSX.Element;
|
||||
}): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -2,4 +2,4 @@ import { Config } from '../../../../types/Config';
|
|||
export default function Cos(props: {
|
||||
live: Required<Config>['Live'];
|
||||
setValue: (path: string, value: any) => void;
|
||||
}): import("react/jsx-runtime").JSX.Element;
|
||||
}): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -2,4 +2,4 @@ import { Config } from '../../../../types/Config';
|
|||
export default function Cos(props: {
|
||||
map: Required<Config>['Map'];
|
||||
setValue: (path: string, value: any) => void;
|
||||
}): import("react/jsx-runtime").JSX.Element;
|
||||
}): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -4,4 +4,4 @@ export default function Sms(props: {
|
|||
setValue: (path: string, value: any) => void;
|
||||
removeItem: (path: string, index: number) => void;
|
||||
cleanKey: (path: string, key: string) => void;
|
||||
}): import("react/jsx-runtime").JSX.Element;
|
||||
}): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -12,4 +12,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'user', fals
|
|||
setValue: (path: string, value: string) => void;
|
||||
removeItem: (path: string, index: number) => void;
|
||||
cleanKey: (path: string, key: string) => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -105,10 +105,10 @@ export default OakComponent({
|
|||
bucket: '',
|
||||
id: generateNewId(),
|
||||
};
|
||||
const { url, bucket } = await this.features.extraFile.upload(extraFile);
|
||||
const { url, bucket } = await this.features.extraFile.createAndUpload(extraFile);
|
||||
extraFile.bucket = bucket;
|
||||
extraFile.extra1 = null;
|
||||
await this.addExtraFile(extraFile);
|
||||
// await this.addExtraFile(extraFile);
|
||||
this.editorCtx.insertImage({
|
||||
src: 'http://' + url,
|
||||
});
|
||||
|
|
|
|||
|
|
@ -108,18 +108,24 @@ export default OakComponent({
|
|||
id: generateNewId(),
|
||||
entityId,
|
||||
};
|
||||
try {
|
||||
const { bucket } = await this.features.extraFile.upload(updateData);
|
||||
Object.assign(updateData, {
|
||||
bucket,
|
||||
extra1: null,
|
||||
});
|
||||
}
|
||||
catch (error) {
|
||||
//todo 保存extraFile失败 需要remove七牛图片
|
||||
throw error;
|
||||
}
|
||||
this.addItem(updateData);
|
||||
// try {
|
||||
// const { bucket } = await this.features.extraFile.upload(
|
||||
// updateData
|
||||
// );
|
||||
// Object.assign(updateData, {
|
||||
// bucket,
|
||||
// extra1: null,
|
||||
// });
|
||||
// } catch (error) {
|
||||
// //todo 保存extraFile失败 需要remove七牛图片
|
||||
// throw error;
|
||||
// }
|
||||
this.addItem(Object.assign({}, updateData, {
|
||||
extra1: null,
|
||||
}), undefined, async () => {
|
||||
console.log(updateData);
|
||||
await this.features.extraFile.upload(updateData, extra1);
|
||||
});
|
||||
if (avatar) {
|
||||
this.removeItem(avatar.id);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,4 +6,4 @@ export default function render(props: WebComponentProps<EntityDict, 'extraFile',
|
|||
avatarUrl?: string;
|
||||
}, {
|
||||
onPickByWeb: (files: File[]) => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
export default function render(): import("react/jsx-runtime").JSX.Element;
|
||||
export default function render(): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -204,18 +204,15 @@ export default OakComponent({
|
|||
async myAddItem(createData) {
|
||||
// 目前只支持七牛上传
|
||||
const { methodsType } = this.state;
|
||||
this.addItem(createData, async () => {
|
||||
this.addItem(Object.assign(createData, {
|
||||
extra1: null,
|
||||
}), async () => {
|
||||
if (createData.bucket) {
|
||||
// 说明本函数已经执行过了
|
||||
return;
|
||||
}
|
||||
if (methodsType === 'uploadLocalImg') {
|
||||
const { bucket } = await this.features.extraFile.upload(createData);
|
||||
Object.assign(createData, {
|
||||
bucket,
|
||||
extra1: null,
|
||||
});
|
||||
}
|
||||
}, async () => {
|
||||
await this.features.extraFile.upload(createData, createData.extra1);
|
||||
});
|
||||
},
|
||||
async myUpdateItem(params) {
|
||||
|
|
|
|||
|
|
@ -19,5 +19,5 @@ export default function render(props: WebComponentProps<EntityDict, "extraFile",
|
|||
closeModal: () => void;
|
||||
onModal1Confirm: (value: number) => void;
|
||||
setSelectedId: (id: number) => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
export {};
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import { EntityDict } from '../../../oak-app-domain';
|
||||
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/types/Entity';
|
||||
import { ReactComponentProps } from 'oak-frontend-base';
|
||||
import { ReactComponentProps } from 'oak-frontend-base/lib/types/Page';
|
||||
declare type SourceType = 'album' | 'camera';
|
||||
declare type Theme = 'file' | 'image' | 'image-flow' | 'custom';
|
||||
declare type FileType = 'all' | 'video' | 'image' | 'file';
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import { generateNewId } from 'oak-domain/lib/utils/uuid';
|
||||
import { assert } from 'oak-domain/lib/utils/assert';
|
||||
import assert from 'assert';
|
||||
import Dialog from '../../../utils/dialog/index';
|
||||
export default OakComponent({
|
||||
entity: 'extraFile',
|
||||
|
|
@ -251,11 +251,13 @@ export default OakComponent({
|
|||
callback(updateData, 'uploading');
|
||||
}
|
||||
try {
|
||||
const { bucket } = await this.features.extraFile.upload(updateData);
|
||||
Object.assign(updateData, {
|
||||
bucket,
|
||||
this.addItem(Object.assign({}, updateData, {
|
||||
extra1: null,
|
||||
}), undefined, async () => {
|
||||
console.log(updateData);
|
||||
await this.features.extraFile.upload(updateData, extra1);
|
||||
});
|
||||
await this.execute();
|
||||
if (callback) {
|
||||
callback(updateData, 'success');
|
||||
}
|
||||
|
|
@ -267,20 +269,18 @@ export default OakComponent({
|
|||
//todo 保存extraFile失败 需要remove七牛图片
|
||||
throw error;
|
||||
}
|
||||
this.addItem(updateData);
|
||||
await this.execute();
|
||||
}
|
||||
else {
|
||||
this.addItem(updateData, async () => {
|
||||
this.addItem(Object.assign({}, updateData, {
|
||||
extra1: null,
|
||||
}), async () => {
|
||||
if (updateData.bucket) {
|
||||
// 说明本函数已经执行过了
|
||||
return;
|
||||
}
|
||||
const { bucket } = await this.features.extraFile.upload(updateData);
|
||||
Object.assign(updateData, {
|
||||
bucket,
|
||||
extra1: null,
|
||||
});
|
||||
}, async () => {
|
||||
await this.features.extraFile.upload(updateData, extra1);
|
||||
});
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -33,5 +33,5 @@ export default function render(props: WebComponentProps<EntityDict, "extraFile",
|
|||
getUrl: (extraFile: EntityDict['extraFile']['OpSchema']) => string;
|
||||
getFileName: (extraFile: EntityDict['extraFile']['OpSchema']) => string;
|
||||
eFFormatBytes: (value: number) => string;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
export {};
|
||||
|
|
|
|||
|
|
@ -10,4 +10,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'user', fals
|
|||
}>;
|
||||
}, {
|
||||
onClick: (action: string) => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element | null;
|
||||
}>): JSX.Element | null;
|
||||
|
|
|
|||
|
|
@ -10,4 +10,4 @@ export default function render(props: WebComponentProps<EntityDict, 'address', t
|
|||
resetInitialData: () => void;
|
||||
downloadEnv: () => void;
|
||||
resetEnv: (data: Record<string, any>) => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -8,4 +8,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'user', fals
|
|||
size?: string;
|
||||
className?: string;
|
||||
style?: React.CSSProperties;
|
||||
}, {}>): import("react/jsx-runtime").JSX.Element;
|
||||
}, {}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -11,4 +11,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'message', f
|
|||
router: EntityDict['message']['Schema']['router'];
|
||||
visitState: EntityDict['message']['Schema']['visitState'];
|
||||
id: string;
|
||||
}, {}>): import("react/jsx-runtime").JSX.Element;
|
||||
}, {}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -10,4 +10,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'message', f
|
|||
router: EntityDict['message']['Schema']['router'];
|
||||
}, {
|
||||
goPage: () => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -10,4 +10,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'message', f
|
|||
router: EntityDict['message']['Schema']['router'];
|
||||
}, {
|
||||
goPage: () => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -4,4 +4,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'message', t
|
|||
messages: EntityDict['message']['Schema'][];
|
||||
}, {
|
||||
goDetailById: (id: string) => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -4,4 +4,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'message', t
|
|||
messages: RowWithActions<EntityDict, 'message'>[];
|
||||
}, {
|
||||
goDetailById: (id: string) => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -3,4 +3,4 @@ export default function render(props: {
|
|||
data: {
|
||||
data: MessageProps;
|
||||
};
|
||||
}): import("react/jsx-runtime").JSX.Element;
|
||||
}): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -5,4 +5,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'messageType
|
|||
dirtyIds: string[];
|
||||
messageTypes: string[];
|
||||
applicationId: string;
|
||||
}, {}>): import("react/jsx-runtime").JSX.Element;
|
||||
}, {}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -9,4 +9,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'token', fal
|
|||
iconName?: string;
|
||||
iconLarger?: string;
|
||||
onClick?: () => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -13,4 +13,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'token', fal
|
|||
}, {
|
||||
logout: () => void;
|
||||
updateAttribute: (attr: string, value: any) => Promise<void>;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -13,4 +13,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'token', fal
|
|||
}, {
|
||||
logout: () => void;
|
||||
updateAttribute: (attr: string, value: any) => Promise<void>;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -8,4 +8,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'user', fals
|
|||
style?: React.CSSProperties;
|
||||
}, {
|
||||
goMessageList: () => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -10,4 +10,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'user', fals
|
|||
buttonClassName?: string;
|
||||
}, {
|
||||
goMessageList: () => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -6,4 +6,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'userEntityG
|
|||
url: string;
|
||||
expiresAt: number;
|
||||
title?: string;
|
||||
}, {}>): import("react/jsx-runtime").JSX.Element;
|
||||
}, {}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -4,4 +4,4 @@ export default function render(props: WebComponentProps<EntityDict, 'parasite',
|
|||
loading: boolean;
|
||||
illegal: boolean;
|
||||
expired: boolean;
|
||||
}, {}>): import("react/jsx-runtime").JSX.Element;
|
||||
}, {}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -7,4 +7,4 @@ export default function render(props: WebComponentProps<EntityDict, 'parasite',
|
|||
}, {
|
||||
cancel: () => void;
|
||||
getQrCode: () => Promise<void>;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -19,4 +19,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'parasite',
|
|||
onSearch: (value: string) => void;
|
||||
onSelect: (value: string) => void;
|
||||
setSearchValue: (value: string) => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -16,4 +16,4 @@ export default function render(props: WebComponentProps<EntityDict, 'area', true
|
|||
setCheckedList: (station: string, flag: boolean) => void;
|
||||
cancel: () => void;
|
||||
confirm: () => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -3,5 +3,5 @@ interface IProps {
|
|||
defaultValue?: number | string;
|
||||
onChange: (color: string) => void;
|
||||
}
|
||||
declare const _default: React.MemoExoticComponent<(props: IProps) => import("react/jsx-runtime").JSX.Element>;
|
||||
declare const _default: React.MemoExoticComponent<(props: IProps) => JSX.Element>;
|
||||
export default _default;
|
||||
|
|
|
|||
|
|
@ -9,5 +9,5 @@ interface IProps {
|
|||
onChange: (value?: any) => void;
|
||||
options: IOption[];
|
||||
}
|
||||
declare const _default: React.MemoExoticComponent<(props: IProps) => import("react/jsx-runtime").JSX.Element>;
|
||||
declare const _default: React.MemoExoticComponent<(props: IProps) => JSX.Element>;
|
||||
export default _default;
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
export default function Render(this: any): import("react/jsx-runtime").JSX.Element;
|
||||
export default function Render(this: any): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -19,4 +19,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'token', fal
|
|||
sendCaptcha: (mobile: string) => Promise<void>;
|
||||
loginByMobile: (mobile: string, password?: string, captcha?: string) => Promise<void>;
|
||||
setLoginMode: (value: number) => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -17,4 +17,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'user', true
|
|||
goUpsert: () => void;
|
||||
confirmDelete: (id: string) => Promise<void>;
|
||||
goUpdate: (id: string) => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -11,4 +11,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'user', true
|
|||
goUpsert: () => void;
|
||||
goUpdate: (id: string) => void;
|
||||
confirmDelete: (id: string) => Promise<void>;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
export default function render(this: any): import("react/jsx-runtime").JSX.Element;
|
||||
export default function render(this: any): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -11,4 +11,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'mobile', fa
|
|||
onMobileChange: (value: string) => Promise<void>;
|
||||
onConfirm: () => Promise<void>;
|
||||
onReset: () => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -13,4 +13,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'mobile', fa
|
|||
onMobileChange: (value: string) => Promise<void>;
|
||||
onConfirm: () => Promise<void>;
|
||||
onReset: () => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -8,4 +8,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'user', fals
|
|||
}, {
|
||||
onConfirm: () => Promise<void>;
|
||||
onReset: () => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -8,4 +8,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'user', fals
|
|||
}, {
|
||||
onConfirm: () => Promise<void>;
|
||||
onReset: () => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -14,5 +14,5 @@ export default function render(props: WebComponentProps<EntityDict, 'userEntityG
|
|||
setInit: () => void;
|
||||
setPeriod: (p: number) => void;
|
||||
setUnit: (u: Unit) => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
export {};
|
||||
|
|
|
|||
|
|
@ -18,5 +18,5 @@ export default function render(props: WebComponentProps<EntityDict, 'userEntityG
|
|||
setInit: () => void;
|
||||
setPeriod: (p: number) => void;
|
||||
setUnit: (u: Unit) => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
export {};
|
||||
|
|
|
|||
|
|
@ -8,4 +8,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'user', fals
|
|||
}[];
|
||||
}, {
|
||||
onRelationChange: (relation: EntityDict['relation']['OpSchema'], checked: boolean) => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -8,4 +8,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'user', fals
|
|||
}[];
|
||||
}, {
|
||||
onRelationChange: (relation: EntityDict['relation']['OpSchema'], checked: boolean) => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -15,4 +15,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'user', fals
|
|||
onMobileChange: (value: string) => Promise<void>;
|
||||
onConfirm: () => Promise<void>;
|
||||
onReset: () => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -16,4 +16,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'user', fals
|
|||
onMobileChange: (value: string) => Promise<void>;
|
||||
onConfirm: () => Promise<void>;
|
||||
onReset: () => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -11,4 +11,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'relation',
|
|||
entityId: string;
|
||||
relations: EntityDict['relation']['OpSchema'][];
|
||||
qrCodeType?: QrCodeType;
|
||||
}, {}>): import("react/jsx-runtime").JSX.Element;
|
||||
}, {}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -6,4 +6,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'wechatLogin
|
|||
loading: boolean;
|
||||
successed: boolean;
|
||||
type: EntityDict['wechatLogin']['Schema']['type'];
|
||||
}, {}>): import("react/jsx-runtime").JSX.Element;
|
||||
}, {}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -2,4 +2,4 @@ import { EntityDict } from '../../../oak-app-domain';
|
|||
import { WebComponentProps } from 'oak-frontend-base';
|
||||
export default function Render(props: WebComponentProps<EntityDict, 'wechatUser', true, {
|
||||
wechatUsers: EntityDict['wechatUser']['Schema'][];
|
||||
}, {}>): import("react/jsx-runtime").JSX.Element;
|
||||
}, {}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -4,4 +4,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'wechatUser'
|
|||
wechatLoginId: string;
|
||||
qrCodeUrl: string;
|
||||
loading: boolean;
|
||||
}, {}>): import("react/jsx-runtime").JSX.Element;
|
||||
}, {}>): JSX.Element;
|
||||
|
|
|
|||
|
|
@ -17,4 +17,6 @@ export interface Schema extends EntityShape {
|
|||
sort?: Float<22, 10>;
|
||||
fileType?: String<128>;
|
||||
isBridge?: Boolean;
|
||||
uploadState: 'success' | 'failed' | 'uploading';
|
||||
uploadMeta?: Object;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,8 @@ const entityDesc = {
|
|||
sort: '排序',
|
||||
fileType: '文件类型',
|
||||
isBridge: '是否桥接访问',
|
||||
uploadState: '上传状态',
|
||||
uploadMeta: '上传需要的metadata',
|
||||
},
|
||||
v: {
|
||||
origin: {
|
||||
|
|
@ -32,6 +34,11 @@ const entityDesc = {
|
|||
audio: '音频',
|
||||
file: '文件',
|
||||
},
|
||||
uploadState: {
|
||||
success: '上传成功',
|
||||
failed: '上传失败',
|
||||
uploading: '上传中',
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,11 +12,11 @@ export declare class ExtraFile<ED extends EntityDict, Cxt extends BackendRuntime
|
|||
private application;
|
||||
private locales;
|
||||
constructor(cache: Cache<ED, Cxt, FrontCxt, AD & CommonAspectDict<ED, Cxt>>, application: Application<ED, Cxt, FrontCxt, AD>, locales: Locales<ED, Cxt, FrontCxt, AD>);
|
||||
private getUploadInfo;
|
||||
upload(extraFile: EntityDict['extraFile']['CreateSingle']['data']): Promise<{
|
||||
createAndUpload(extraFile: EntityDict['extraFile']['CreateSingle']['data']): Promise<{
|
||||
url: string;
|
||||
bucket: string;
|
||||
bucket: ED["extraFile"]["Schema"]["bucket"] | undefined;
|
||||
}>;
|
||||
upload(extraFile: EntityDict['extraFile']['CreateSingle']['data'], file: string | File): Promise<Partial<ED["extraFile"]["Schema"]>>;
|
||||
getUrl(extraFile?: EntityDict['extraFile']['OpSchema'] | EntityDict['extraFile']['Schema'] | null, style?: string): string;
|
||||
/**
|
||||
* 使用该方法,要在使用完url时,通过URL.revokeObjectURL释放缓存
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@ import { Feature } from 'oak-frontend-base';
|
|||
import { Upload } from 'oak-frontend-base/es/utils/upload';
|
||||
import { composeFileUrl, bytesToSize } from '../utils/extraFile';
|
||||
import { assert } from 'oak-domain/lib/utils/assert';
|
||||
import UploaderDict from '../utils/uploader';
|
||||
import { generateNewId } from 'oak-domain/lib/utils/uuid';
|
||||
export class ExtraFile extends Feature {
|
||||
cache;
|
||||
application;
|
||||
|
|
@ -12,29 +14,89 @@ export class ExtraFile extends Feature {
|
|||
this.application = application;
|
||||
this.locales = locales;
|
||||
}
|
||||
async getUploadInfo(origin, key) {
|
||||
const uploadInfo = await this.cache.exec('getUploadInfo', {
|
||||
origin,
|
||||
key,
|
||||
// async getUploadInfo(extraFile: EntityDict['extraFile']['CreateSingle']['data']) {
|
||||
// // const { origin, extra1, filename, objectId, extension, entity } =
|
||||
// // extraFile;
|
||||
// // 构造文件上传所需的key
|
||||
// // const key = `${entity ? entity + '/' : ''}${objectId}${extension ? '.' + extension : ''}`;
|
||||
// assert(origin && origin !== 'unknown');
|
||||
// const uploadInfo = await this.cache.exec('getUploadInfo', {
|
||||
// extraFile
|
||||
// });
|
||||
// return uploadInfo;
|
||||
// }
|
||||
async createAndUpload(extraFile) {
|
||||
await this.cache.operate('extraFile', {
|
||||
action: 'create',
|
||||
data: Object.assign({}, extraFile, { extra1: null }),
|
||||
id: generateNewId(),
|
||||
});
|
||||
return uploadInfo;
|
||||
const result = await this.upload(Object.assign({}, extraFile, { extra1: null }), extraFile.extra1);
|
||||
const application = this.application.getApplication();
|
||||
const config = application?.system?.config ||
|
||||
application?.system?.platform?.config;
|
||||
const { bucket } = result;
|
||||
return {
|
||||
url: composeFileUrl(Object.assign({}, extraFile, { extra1: null }), config),
|
||||
bucket,
|
||||
};
|
||||
}
|
||||
async upload(extraFile) {
|
||||
const { origin, extra1, filename, objectId, extension, entity } = extraFile;
|
||||
// 构造文件上传所需的key
|
||||
const key = `${entity ? entity + '/' : ''}${objectId}${extension ? '.' + extension : ''}`;
|
||||
assert(origin && origin !== 'unknown');
|
||||
const { result: uploadInfo } = await this.getUploadInfo(origin, key);
|
||||
if (process.env.OAK_PLATFORM === 'wechatMp') {
|
||||
// 微信小程序使用wx.uploadFile, 封装upload,上传源为origin
|
||||
const up = new Upload();
|
||||
const result = await up.uploadFile(origin, extra1, uploadInfo);
|
||||
return result;
|
||||
async upload(extraFile, file) {
|
||||
const { id, origin } = extraFile;
|
||||
assert(origin, '未设置上传方式');
|
||||
const [extraFileData] = this.cache.get('extraFile', {
|
||||
data: {
|
||||
origin: 1,
|
||||
type: 1,
|
||||
bucket: 1,
|
||||
objectId: 1,
|
||||
tag1: 1,
|
||||
tag2: 1,
|
||||
filename: 1,
|
||||
md5: 1,
|
||||
entity: 1,
|
||||
entityId: 1,
|
||||
extra1: 1,
|
||||
extension: 1,
|
||||
size: 1,
|
||||
sort: 1,
|
||||
fileType: 1,
|
||||
isBridge: 1,
|
||||
uploadState: 1,
|
||||
uploadMeta: 1,
|
||||
},
|
||||
filter: {
|
||||
id,
|
||||
},
|
||||
});
|
||||
console.log(id, extraFileData);
|
||||
const up = new Upload();
|
||||
try {
|
||||
const uploadInfo = UploaderDict[origin].upload(extraFileData, up.uploadFile, file);
|
||||
await this.cache.operate('extraFile', {
|
||||
action: 'update',
|
||||
data: {
|
||||
uploadState: 'success',
|
||||
},
|
||||
filter: {
|
||||
id,
|
||||
},
|
||||
id: generateNewId(),
|
||||
});
|
||||
return extraFileData;
|
||||
}
|
||||
else {
|
||||
const up = new Upload();
|
||||
const result = await up.uploadFile(origin, extra1, uploadInfo);
|
||||
return result;
|
||||
catch (err) {
|
||||
await this.cache.operate('extraFile', {
|
||||
action: 'update',
|
||||
data: {
|
||||
uploadState: 'failed',
|
||||
},
|
||||
filter: {
|
||||
id,
|
||||
},
|
||||
id: generateNewId(),
|
||||
});
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
getUrl(extraFile, style) {
|
||||
|
|
|
|||
|
|
@ -13,3 +13,4 @@ export { BackendRuntimeContext } from './context/BackendRuntimeContext';
|
|||
export { FrontendRuntimeContext, SerializedData, } from './context/FrontendRuntimeContext';
|
||||
export { RuntimeContext } from './context/RuntimeContext';
|
||||
export { registerWechatPublicTags } from './config/constants';
|
||||
export { registerUploader } from './utils/uploader';
|
||||
|
|
|
|||
|
|
@ -11,3 +11,4 @@ export { getLivestream, getPlayBackUrl, getStreamObj } from './utils/livestream'
|
|||
export { BackendRuntimeContext } from './context/BackendRuntimeContext';
|
||||
export { FrontendRuntimeContext, } from './context/FrontendRuntimeContext';
|
||||
export { registerWechatPublicTags } from './config/constants';
|
||||
export { registerUploader } from './utils/uploader';
|
||||
|
|
|
|||
|
|
@ -25,6 +25,8 @@ export declare type OpSchema = EntityShape & {
|
|||
sort?: Float<22, 10> | null;
|
||||
fileType?: String<128> | null;
|
||||
isBridge?: Boolean | null;
|
||||
uploadState: 'success' | 'failed' | 'uploading';
|
||||
uploadMeta?: Object | null;
|
||||
};
|
||||
export declare type OpAttr = keyof OpSchema;
|
||||
export declare type Schema = EntityShape & {
|
||||
|
|
@ -44,6 +46,8 @@ export declare type Schema = EntityShape & {
|
|||
sort?: Float<22, 10> | null;
|
||||
fileType?: String<128> | null;
|
||||
isBridge?: Boolean | null;
|
||||
uploadState: 'success' | 'failed' | 'uploading';
|
||||
uploadMeta?: Object | null;
|
||||
article?: Article.Schema;
|
||||
articleMenu?: ArticleMenu.Schema;
|
||||
user?: User.Schema;
|
||||
|
|
@ -71,6 +75,8 @@ declare type AttrFilter = {
|
|||
sort: Q_NumberValue;
|
||||
fileType: Q_StringValue;
|
||||
isBridge: Q_BooleanValue;
|
||||
uploadState: Q_EnumValue<'success' | 'failed' | 'uploading'>;
|
||||
uploadMeta: Object;
|
||||
article: Article.Filter;
|
||||
articleMenu: ArticleMenu.Filter;
|
||||
user: User.Filter;
|
||||
|
|
@ -99,6 +105,8 @@ export declare type Projection = {
|
|||
sort?: number;
|
||||
fileType?: number;
|
||||
isBridge?: number;
|
||||
uploadState?: number;
|
||||
uploadMeta?: number | Object;
|
||||
article?: Article.Projection;
|
||||
articleMenu?: ArticleMenu.Projection;
|
||||
user?: User.Projection;
|
||||
|
|
@ -155,6 +163,8 @@ export declare type SortAttr = {
|
|||
fileType: number;
|
||||
} | {
|
||||
isBridge: number;
|
||||
} | {
|
||||
uploadState: number;
|
||||
} | {
|
||||
article: Article.SortAttr;
|
||||
} | {
|
||||
|
|
|
|||
|
|
@ -93,6 +93,14 @@ export const desc = {
|
|||
},
|
||||
isBridge: {
|
||||
type: "boolean"
|
||||
},
|
||||
uploadState: {
|
||||
notNull: true,
|
||||
type: "enum",
|
||||
enumeration: ["success", "failed", "uploading"]
|
||||
},
|
||||
uploadMeta: {
|
||||
type: "object"
|
||||
}
|
||||
},
|
||||
actionType: "crud",
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
{ "name": "文件", "attr": { "origin": "源", "type": "类型", "bucket": "桶", "objectId": "对象编号", "tag1": "标签一", "tag2": "标签二", "filename": "文件名", "md5": "md5", "entity": "关联对象", "entityId": "关联对象id", "extra1": "额外信息", "extension": "后缀名", "size": "文件大小", "sort": "排序", "fileType": "文件类型", "isBridge": "是否桥接访问" }, "v": { "origin": { "qiniu": "七牛云", "unknown": "未知" }, "type": { "image": "图像", "video": "视频", "audio": "音频", "file": "文件" } } }
|
||||
{ "name": "文件", "attr": { "origin": "源", "type": "类型", "bucket": "桶", "objectId": "对象编号", "tag1": "标签一", "tag2": "标签二", "filename": "文件名", "md5": "md5", "entity": "关联对象", "entityId": "关联对象id", "extra1": "额外信息", "extension": "后缀名", "size": "文件大小", "sort": "排序", "fileType": "文件类型", "isBridge": "是否桥接访问", "uploadState": "上传状态", "uploadMeta": "上传需要的metadata" }, "v": { "origin": { "qiniu": "七牛云", "unknown": "未知" }, "type": { "image": "图像", "video": "视频", "audio": "音频", "file": "文件" }, "uploadState": { "success": "上传成功", "failed": "上传失败", "uploading": "上传中" } } }
|
||||
|
|
|
|||
|
|
@ -5,4 +5,4 @@ export default function Render(props: WebComponentProps<EntityDict, 'address', t
|
|||
}, {
|
||||
gotoUpsert: (id: string) => void;
|
||||
goNewAddress: () => void;
|
||||
}>): import("react/jsx-runtime").JSX.Element;
|
||||
}>): JSX.Element;
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue