1、修复了微信公众号关注后,可能会创建一个没有 userId 的 wechatUser 记录的情况。当系统中存在相同的 unionId 时,自动根据该 unionId 查找并关联到相应的用户。

2、增强了文档管理功能,支持传入指定滚动条所在元素的 id,以便动态调整和控制页面滚动。
This commit is contained in:
wkj 2024-11-13 11:05:00 +08:00
parent abf942ae1a
commit eaca6b32f6
275 changed files with 2164 additions and 3858 deletions

View File

@ -1502,12 +1502,39 @@ async function loginFromWechatEnv(code, env, context, wechatLoginId) {
else if (wechatLoginData.type === 'login') {
// wechatUser存在直接登录
if (wechatUser) {
const tokenValue = await setUpTokenAndUser(env, context, 'wechatUser', wechatUser.id, undefined, wechatUser.user);
// 微信公众号关注后会创建一个没有userId的wechatUser
let user2 = wechatUser.user;
if (!user2 && unionId) {
// 如果有unionId查找同一个system下有相同的unionId的user
const [user] = await context.select('user', {
data: {
id: 1,
userState: 1,
refId: 1,
},
filter: {
wechatUser$user: {
application: {
systemId: application.systemId,
},
unionId,
},
},
}, {
dontCollect: true,
});
user2 = user;
}
const tokenValue = await setUpTokenAndUser(env, context, 'wechatUser', wechatUser.id, undefined, user2);
const wechatUserUpdateData = wechatUserData;
if (unionId !== wechatUser.unionId) {
Object.assign(wechatUserUpdateData, {
unionId,
...wechatUserData,
});
}
if (user2 && !wechatUser.userId) {
Object.assign(wechatUserUpdateData, {
userId: user2.id,
});
}
await context.operate('wechatUser', {
@ -1518,7 +1545,10 @@ async function loginFromWechatEnv(code, env, context, wechatLoginId) {
id: wechatUser.id,
},
}, { dontCollect: true });
await updateWechatLogin({ userId: wechatUser.userId, successed: true });
await updateWechatLogin({
userId: wechatUser.userId,
successed: true,
});
return tokenValue;
}
else {
@ -1541,13 +1571,41 @@ async function loginFromWechatEnv(code, env, context, wechatLoginId) {
}
else {
if (wechatUser) {
const tokenValue = await setUpTokenAndUser(env, context, 'wechatUser', wechatUser.id, undefined, wechatUser.user);
// 微信公众号关注后会创建一个没有userId的wechatUser
let user2 = wechatUser.user;
if (!user2 && unionId) {
// 如果有unionId查找同一个system下有相同的unionId的user
const [user] = await context.select('user', {
data: {
id: 1,
userState: 1,
refId: 1,
},
filter: {
wechatUser$user: {
application: {
systemId: application.systemId,
},
unionId,
}
},
}, {
dontCollect: true,
});
user2 = user;
}
const tokenValue = await setUpTokenAndUser(env, context, 'wechatUser', wechatUser.id, undefined, user2);
const wechatUserUpdateData = wechatUserData;
if (unionId !== wechatUser.unionId) {
Object.assign(wechatUserUpdateData, {
unionId,
});
}
if (user2 && !wechatUser.userId) {
Object.assign(wechatUserUpdateData, {
userId: user2.id,
});
}
await context.operate('wechatUser', {
id: await generateNewIdAsync(),
action: 'update',

View File

@ -5,5 +5,6 @@ declare const _default: (props: import("oak-frontend-base").ReactComponentProps<
highlightBgColor: string;
headerTop: number;
className: string;
scrollId: string;
}>) => React.ReactElement;
export default _default;

View File

@ -25,6 +25,7 @@ export default OakComponent({
highlightBgColor: 'none',
headerTop: 0, //页面中吸顶部分高度
className: '',
scrollId: '', // 滚动条所在容器id不传默认body
},
lifetimes: {},
methods: {}

View File

@ -10,4 +10,5 @@ export default function Render(props: WebComponentProps<EntityDict, 'article', f
className?: string;
tocFixed: boolean;
tocClosed: boolean;
scrollId?: string;
}, {}>): React.JSX.Element;

View File

@ -6,7 +6,7 @@ import classNames from 'classnames';
import { TocView } from '../toc/tocView';
import Style from './web.module.less';
export default function Render(props) {
const { className, content, tocPosition = 'none', tocFixed, highlightBgColor = 'none', headerTop = 0, tocClosed = false } = props.data;
const { className, content, tocPosition = 'none', tocFixed, highlightBgColor = 'none', headerTop = 0, tocClosed = false, scrollId } = props.data;
const editorConfig = {
readOnly: true,
autoFocus: true,
@ -37,12 +37,12 @@ export default function Render(props) {
return (<div className={classNames(Style.container, className)}>
<Row gutter={[16, 0]}>
{tocPosition === 'left' ? (<Col flex="228px">
<TocView toc={toc} showToc={showToc} tocPosition='left' setShowToc={setShowToc} highlightBgColor={highlightBgColor} headerTop={headerTop} fixed={tocFixed} closed={tocClosed}/>
<TocView toc={toc} showToc={showToc} tocPosition='left' setShowToc={setShowToc} highlightBgColor={highlightBgColor} headerTop={headerTop} fixed={tocFixed} closed={tocClosed} scrollId={scrollId}/>
</Col>) : null}
<Col flex="auto">
<div className={Style.content}>
<div id="editorContainer" className={Style.editorContainer}>
<div className={Style.editorContainer}>
<div style={{ width: "100%" }}>
<Editor defaultConfig={editorConfig} value={html} mode="default" style={{
width: '100%'
@ -65,7 +65,7 @@ export default function Render(props) {
</div>
</Col>
{tocPosition === 'right' ? (<Col flex="228px">
<TocView toc={toc} showToc={showToc} tocPosition='right' setShowToc={setShowToc} highlightBgColor={highlightBgColor} headerTop={headerTop} fixed={tocFixed} closed={tocClosed}/>
<TocView toc={toc} showToc={showToc} tocPosition='right' setShowToc={setShowToc} highlightBgColor={highlightBgColor} headerTop={headerTop} fixed={tocFixed} closed={tocClosed} scrollId={scrollId}/>
</Col>) : null}
</Row>
</div>);

View File

@ -5,5 +5,6 @@ declare const _default: (props: import("oak-frontend-base").ReactComponentProps<
highlightBgColor: string;
headerTop: number;
className: string;
scrollId: string;
}>) => React.ReactElement;
export default _default;

View File

@ -32,6 +32,7 @@ export default OakComponent({
highlightBgColor: 'none',
headerTop: 0, //页面中吸顶部分高度
className: '',
scrollId: '', // 滚动条所在容器id不传默认body
},
methods: {},
});

View File

@ -9,4 +9,5 @@ export default function Render(props: WebComponentProps<EntityDict, 'article', f
className?: string;
tocFixed: boolean;
tocClosed: boolean;
scrollId?: string;
}, {}>): React.JSX.Element;

View File

@ -6,7 +6,7 @@ import classNames from 'classnames';
import { TocView } from '../toc/tocView';
import Styles from './web.module.less';
export default function Render(props) {
const { className, content, tocPosition = 'none', tocFixed, highlightBgColor = 'none', headerTop = 0, tocClosed = false } = props.data;
const { className, content, tocPosition = 'none', tocFixed, highlightBgColor = 'none', headerTop = 0, tocClosed = false, scrollId } = props.data;
const editorConfig = {
readOnly: true,
autoFocus: true,
@ -37,12 +37,12 @@ export default function Render(props) {
return (<div className={classNames(Styles.container, className)}>
<Row gutter={[16, 0]}>
{tocPosition === 'left' && (<Col flex="228px">
<TocView toc={toc} showToc={showToc} tocPosition='left' setShowToc={setShowToc} highlightBgColor={highlightBgColor} headerTop={headerTop} fixed={tocFixed} closed={tocClosed}/>
<TocView toc={toc} showToc={showToc} tocPosition='left' setShowToc={setShowToc} highlightBgColor={highlightBgColor} headerTop={headerTop} fixed={tocFixed} closed={tocClosed} scrollId={scrollId}/>
</Col>)}
<Col flex="auto">
<div className={Styles.content}>
<div id="editorContainer" className={Styles.editorContainer}>
<div className={Styles.editorContainer}>
<div style={{ width: "100%" }}>
<Editor defaultConfig={editorConfig} value={html} mode="default" style={{
width: '100%'
@ -65,7 +65,7 @@ export default function Render(props) {
</div>
</Col>
{tocPosition === 'right' && (<Col flex="228px">
<TocView toc={toc} showToc={showToc} tocPosition='right' setShowToc={setShowToc} highlightBgColor={highlightBgColor} headerTop={headerTop} fixed={tocFixed} closed={tocClosed}/>
<TocView toc={toc} showToc={showToc} tocPosition='right' setShowToc={setShowToc} highlightBgColor={highlightBgColor} headerTop={headerTop} fixed={tocFixed} closed={tocClosed} scrollId={scrollId}/>
</Col>)}
</Row>
</div>);

View File

@ -12,6 +12,6 @@ export declare function TocView(props: {
highlightBgColor: string;
headerTop?: number;
fixed?: boolean;
containerId?: string;
scrollId?: string;
closed?: boolean;
}): import("react").JSX.Element;

View File

@ -4,7 +4,7 @@ import { CaretDownOutlined, CloseOutlined, MenuOutlined } from "@ant-design/icon
import classNames from "classnames";
import Style from './tocView.module.less';
export function TocView(props) {
const { toc, showToc, tocPosition, setShowToc, highlightBgColor, headerTop = 0, containerId, fixed = false, closed = false } = props;
const { toc, showToc, tocPosition, setShowToc, highlightBgColor, headerTop = 0, scrollId, fixed = false, closed = false } = props;
useEffect(() => {
document.documentElement.style.setProperty('--highlight-bg-color', highlightBgColor);
}, [highlightBgColor]);
@ -49,8 +49,8 @@ export function TocView(props) {
//页面滚动到对应元素
const elem = document.getElementById(item.id);
const elemTop = elem?.getBoundingClientRect().top;
if (containerId) {
const scrollContainer = document.getElementById(containerId);
if (scrollId) {
const scrollContainer = document.getElementById(scrollId);
const containerTop = scrollContainer?.getBoundingClientRect().top;
scrollContainer?.scrollBy({
top: elemTop - containerTop,
@ -58,6 +58,7 @@ export function TocView(props) {
});
}
else {
// const containerTop = document.body.getBoundingClientRect().top;
window.scrollBy({
top: elemTop - headerTop,
behavior: 'smooth',

View File

@ -6,5 +6,6 @@ declare const _default: (props: import("oak-frontend-base").ReactComponentProps<
highlightBgColor: string;
onArticlePreview: (content?: string, title?: string) => void;
origin: string;
scrollId: string;
}>) => React.ReactElement;
export default _default;

View File

@ -29,6 +29,7 @@ export default OakComponent({
highlightBgColor: 'none', //点击目录时标题高亮背景色none为不显示高亮背景色
onArticlePreview: (content, title) => undefined, //预览文章
origin: 'qiniu', // 默认为七牛云
scrollId: '', // 滚动条所在容器id不传默认页面编辑器容器id
},
listeners: {
'editor,content'(prev, next) {

View File

@ -14,6 +14,7 @@ export default function Render(props: WebComponentProps<EntityDict, 'article', f
oakId: string;
tocPosition: 'none' | 'left' | 'right';
highlightBgColor: string;
scrollId?: string;
}, {
setHtml: (content: string) => void;
setEditor: (editor: any) => void;

View File

@ -28,7 +28,7 @@ function customCheckImageFn(src, alt, url) {
// 3. 返回 undefined即没有任何返回说明检查未通过编辑器会阻止插入。但不会提示任何信息
}
function TocView(props) {
const { toc, showToc, tocPosition, setShowToc, highlightBgColor } = props;
const { toc, showToc, tocPosition, setShowToc, highlightBgColor, scrollId } = props;
useEffect(() => {
document.documentElement.style.setProperty('--highlight-bg-color', highlightBgColor);
}, [highlightBgColor]);
@ -74,7 +74,7 @@ function TocView(props) {
//编辑器滚动到对应元素
const elem = document.getElementById(item.id);
const elemTop = elem?.getBoundingClientRect().top;
const scrollContainer = document.getElementById('editorContainer');
const scrollContainer = document.getElementById(scrollId || 'article-upsert-editorContainer');
const containerTop = scrollContainer?.getBoundingClientRect().top;
scrollContainer?.scrollBy({
top: elemTop - containerTop,
@ -122,7 +122,7 @@ function TocView(props) {
export default function Render(props) {
const { methods, data } = props;
const { t, setEditor, check, uploadFile, update, setHtml, gotoPreview, clearContentTip, } = methods;
const { id, content, editor, origin = 'qiniu', oakFullpath, html, tocPosition = 'none', highlightBgColor = 'none' } = data;
const { id, content, editor, origin = 'qiniu', oakFullpath, html, tocPosition = 'none', highlightBgColor = 'none', scrollId } = data;
const [articleId, setArticleId] = useState('');
const [toc, setToc] = useState([]);
const [showToc, setShowToc] = useState(false);
@ -143,12 +143,14 @@ export default function Render(props) {
</div>
<Row gutter={[16, 0]}>
{tocPosition === 'left' ? (<Col flex="228px">
<TocView toc={toc} showToc={showToc} tocPosition='left' setShowToc={setShowToc} highlightBgColor={highlightBgColor}/>
<TocView toc={toc} showToc={showToc} tocPosition='left' setShowToc={setShowToc} highlightBgColor={highlightBgColor} scrollId={scrollId}/>
</Col>) : null}
<Col flex="auto">
<div className={Style.content}>
<div id="editorContainer" className={Style.editorContainer}>
<div id="article-upsert-editorContainer" className={classNames(Style.editorContainer, {
[Style.editorExternalContainer]: !!scrollId
})}>
{data.contentTip && (<Alert type="info" message={t('tips.content')} closable onClose={() => clearContentTip()}/>)}
<div className={Style.titleContainer}>
<Input onChange={(e) => update({ name: e.target.value })} value={data.name} placeholder={'请输入文章标题'} size="large" maxLength={32} suffix={`${[...(data.name || '')].length}/32`} className={Style.titleInput}/>
@ -264,7 +266,7 @@ export default function Render(props) {
</div>
</Col>
{tocPosition === 'right' ? (<Col flex="228px">
<TocView toc={toc} showToc={showToc} tocPosition='right' setShowToc={setShowToc} highlightBgColor={highlightBgColor}/>
<TocView toc={toc} showToc={showToc} tocPosition='right' setShowToc={setShowToc} highlightBgColor={highlightBgColor} scrollId={scrollId}/>
</Col>) : null}
</Row>
</div>);

View File

@ -18,6 +18,11 @@
box-sizing: border-box;
}
.editorExternalContainer {
overflow-y: unset;
max-height: unset;
}
.titleContainer {
padding: 5px 0;
border-bottom: 1px solid #e8e8e8;

View File

@ -13,5 +13,6 @@ declare const _default: (props: import("oak-frontend-base").ReactComponentProps<
onArticleEdit: (oakId: string) => void;
setCopyArticleUrl: (id: string) => string;
origin: string;
scrollId: string;
}>) => React.ReactElement;
export default _default;

View File

@ -25,6 +25,7 @@ export default OakComponent({
onArticlePreview: (content, title) => undefined, //预览文章
onArticleEdit: (oakId) => undefined, //编辑文章
setCopyArticleUrl: (id) => '',
origin: 'qiniu' // cos origin默认七牛云
origin: 'qiniu', // cos origin默认七牛云
scrollId: '', // 滚动条所在容器id不传默认页面编辑器容器id
},
});

View File

@ -15,6 +15,7 @@ export default function Render(props: WebComponentProps<EntityDict, 'articleMenu
onArticlePreview: (content?: string, title?: string) => void;
onArticleEdit: (oakId: string) => void;
setCopyArticleUrl: (id: string) => string;
scrollId?: string;
}, {
gotoDoc: () => void;
gotoArticleDetail: (oakId: string) => void;

View File

@ -4,7 +4,7 @@ import { EyeOutlined, CopyOutlined, MenuFoldOutlined, MenuUnfoldOutlined, PlusOu
import copy from 'copy-to-clipboard';
import TreeList from '../treeList';
import ArticleUpsert from '../../article/upsert';
import ArticleDetail from '../../article/cell';
import ArticleCell from '../../article/cell';
import Styles from './web.pc.module.less';
function BreadcrumbView(props) {
const { breadcrumbItems } = props;
@ -20,7 +20,7 @@ function BreadcrumbView(props) {
</div>);
}
export default function Render(props) {
const { entity, entityId, oakFullpath, show, articleMenuId, width, articleId, tocPosition, highlightBgColor, onMenuViewById, onArticlePreview, onArticleEdit, origin, setCopyArticleUrl } = props.data;
const { entity, entityId, oakFullpath, show, articleMenuId, width, articleId, tocPosition, highlightBgColor, onMenuViewById, onArticlePreview, onArticleEdit, origin, setCopyArticleUrl, scrollId } = props.data;
const { gotoDoc, setMessage, gotoArticleDetail } = props.methods;
const [editArticleId, setEditArticleId] = useState('');
const [breadcrumbItems, setBreadcrumbItems] = useState([]);
@ -95,7 +95,7 @@ export default function Render(props) {
<div className={Styles.editor2}>
{editArticleId ? (<React.Fragment>
<BreadcrumbView breadcrumbItems={breadcrumbItems}/>
<ArticleDetail oakId={editArticleId} oakAutoUnmount={true} oakPath={`$articleMenu/treeManager-ArticleDetail-${editArticleId}`}/>
<ArticleCell oakId={editArticleId} oakAutoUnmount={true} oakPath={`$articleMenu/treeManager-ArticleCell-${editArticleId}`}/>
</React.Fragment>) : null}
</div>
</div>
@ -114,7 +114,7 @@ export default function Render(props) {
<div className={Styles.editor}>
{editArticleId ? (<React.Fragment>
<BreadcrumbView breadcrumbItems={breadcrumbItems}/>
<ArticleDetail oakId={editArticleId} oakAutoUnmount={true} oakPath={`$articleMenu/treeManager-ArticleDetail-${editArticleId}`}/>
<ArticleCell oakId={editArticleId} oakAutoUnmount={true} oakPath={`$articleMenu/treeManager-ArticleCell-${editArticleId}`} scrollId={scrollId}/>
</React.Fragment>) : null}
</div>
</div>);
@ -160,7 +160,7 @@ export default function Render(props) {
</div>);
})}
</div>
{isEdit ? (<ArticleUpsert oakId={editArticleId} oakAutoUnmount={true} oakPath={`$articleMenu/treeManager-ArticleUpsert-${editArticleId}`} changeIsEdit={changeIsEdit} tocPosition={tocPosition} highlightBgColor={highlightBgColor} origin={origin}/>) : (<ArticleDetail oakId={editArticleId} oakAutoUnmount={true} oakPath={`$articleMenu/treeManager-ArticleDetail-${editArticleId}`}/>)}
{isEdit ? (<ArticleUpsert oakId={editArticleId} oakAutoUnmount={true} oakPath={`$articleMenu/treeManager-ArticleUpsert-${editArticleId}`} changeIsEdit={changeIsEdit} tocPosition={tocPosition} highlightBgColor={highlightBgColor} origin={origin} scrollId={scrollId}/>) : (<ArticleCell oakId={editArticleId} oakAutoUnmount={true} oakPath={`$articleMenu/treeManager-ArticleCell-${editArticleId}`}/>)}
</div>) : null}
</div>
</div>);
@ -194,7 +194,7 @@ export default function Render(props) {
</div>)}
<div className={Styles.editor}>
{editArticleId ? (<ArticleUpsert oakId={editArticleId} oakAutoUnmount={true} oakPath={`$articleMenu/treeManager-ArticleUpsert-${editArticleId}`} tocPosition={tocPosition} highlightBgColor={highlightBgColor} onArticlePreview={onArticlePreview} origin={origin}/>) : null}
{editArticleId ? (<ArticleUpsert oakId={editArticleId} oakAutoUnmount={true} oakPath={`$articleMenu/treeManager-ArticleUpsert-${editArticleId}`} tocPosition={tocPosition} highlightBgColor={highlightBgColor} onArticlePreview={onArticlePreview} origin={origin} scrollId={scrollId}/>) : null}
</div>
</div>);
}

View File

@ -95,7 +95,6 @@
padding: 0 10px;
height: 50px;
width: 100vw;
}
}

View File

@ -4,8 +4,8 @@ import { ReactComponentProps } from 'oak-frontend-base';
import { ECode } from '../../../types/ErrorPage';
declare const _default: <ED2 extends EntityDict & BaseEntityDict, T2 extends keyof ED2>(props: ReactComponentProps<ED2, T2, false, {
code: ECode;
title?: string;
desc?: string;
title?: string | undefined;
desc?: string | undefined;
children?: React.ReactNode;
icon?: React.ReactNode;
}>) => React.ReactElement;

View File

@ -1,3 +1,4 @@
/// <reference types="react" />
import { EntityDict } from '../../../oak-app-domain';
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/types/Entity';
import { ReactComponentProps } from 'oak-frontend-base/lib/types/Page';
@ -8,14 +9,31 @@ type AfterCommit = (() => void) | undefined;
type BeforeCommit = (() => boolean | undefined | Promise<boolean | undefined>) | undefined;
declare const _default: <ED2 extends EntityDict & BaseEntityDict, T2 extends keyof ED2>(props: ReactComponentProps<ED2, T2, true, {
entity: keyof ED2;
action?: string;
action?: string | undefined;
size?: ButtonProps['size'] | AmButtonProps['size'];
block?: boolean;
block?: boolean | undefined;
type?: ButtonProps['type'] | AmButtonProps['type'];
executeText?: string;
buttonProps?: ButtonProps & AmButtonProps;
executeText?: string | undefined;
buttonProps?: (ButtonProps & {
color?: "primary" | "success" | "warning" | "default" | "danger" | undefined;
fill?: "none" | "solid" | "outline" | undefined;
size?: "small" | "large" | "middle" | "mini" | undefined;
block?: boolean | undefined;
loading?: boolean | "auto" | undefined;
loadingText?: string | undefined;
loadingIcon?: import("react").ReactNode;
disabled?: boolean | undefined;
onClick?: ((event: import("react").MouseEvent<HTMLButtonElement, MouseEvent>) => unknown) | undefined;
type?: "reset" | "submit" | "button" | undefined;
shape?: "default" | "rounded" | "rectangular" | undefined;
children?: import("react").ReactNode;
} & Pick<import("react").ClassAttributes<HTMLButtonElement> & import("react").ButtonHTMLAttributes<HTMLButtonElement>, "id" | "onMouseUp" | "onMouseDown" | "onTouchStart" | "onTouchEnd"> & {
className?: string | undefined;
style?: (import("react").CSSProperties & Partial<Record<"--text-color" | "--background-color" | "--border-radius" | "--border-width" | "--border-style" | "--border-color", string>>) | undefined;
tabIndex?: number | undefined;
} & import("react").AriaAttributes) | undefined;
afterCommit?: AfterCommit;
beforeCommit?: BeforeCommit;
messageProps?: MessageProps | boolean;
messageProps?: boolean | MessageProps | undefined;
}>) => React.ReactElement;
export default _default;

View File

@ -11,6 +11,6 @@ declare const _default: <ED2 extends EntityDict & BaseEntityDict, T2 extends key
tag2: string;
entity: keyof ED2;
entityId: string;
style?: string;
style?: string | undefined;
}>) => React.ReactElement;
export default _default;

View File

@ -39,6 +39,6 @@ declare const _default: <ED2 extends EntityDict & BaseEntityDict, T2 extends key
entityId: string;
theme: Theme;
children?: React.ReactNode;
style?: string;
style?: string | undefined;
}>) => React.ReactElement;
export default _default;

View File

@ -1,7 +1,7 @@
import { EntityDict } from '../../../oak-app-domain';
declare const _default: (props: import("oak-frontend-base").ReactComponentProps<EntityDict, "userEntityGrant", false, {
picker: ((props: {
disabled?: boolean;
disabled?: boolean | undefined;
entity: keyof EntityDict;
entityFilter: object;
relationIds: string[];
@ -9,8 +9,8 @@ declare const _default: (props: import("oak-frontend-base").ReactComponentProps<
ruleOnRow: EntityDict['userEntityGrant']['OpSchema']['ruleOnRow'];
onPickRelations: (ids: string[]) => void;
onPickRows: (ids: string[]) => void;
pickedRowIds?: string[];
pickedRelationIds?: string[];
pickedRowIds?: string[] | undefined;
pickedRelationIds?: string[] | undefined;
oakPath: string;
}) => React.ReactElement) | undefined;
hideInfo: boolean;

View File

@ -4,7 +4,7 @@ import { ReactComponentProps } from 'oak-frontend-base';
declare const _default: <ED2 extends EntityDict & BaseEntityDict, T2 extends keyof ED2>(props: ReactComponentProps<ED2, T2, true, {
entity: keyof ED2;
entityId: string;
redirectToAfterConfirm: ED2['userEntityGrant']['Schema']['redirectTo'];
redirectToAfterConfirm: ED2["userEntityGrant"]["Schema"]["redirectTo"];
qrCodeType: string;
showTitle: true;
showBack: false;

View File

@ -5,8 +5,8 @@ declare const _default: <ED2 extends EntityDict & BaseEntityDict, T2 extends key
entity: keyof ED2;
entityId: string;
relations: EntityDict['relation']['OpSchema'][];
passwordRequire?: boolean;
allowUpdateName?: boolean;
allowUpdateNickname?: boolean;
passwordRequire?: boolean | undefined;
allowUpdateName?: boolean | undefined;
allowUpdateNickname?: boolean | undefined;
}>) => React.ReactElement;
export default _default;

View File

@ -4,7 +4,7 @@ import { EntityDict as BaseEntityDict } from 'oak-domain/lib/types/Entity';
declare const _default: <ED2 extends EntityDict & BaseEntityDict, T2 extends keyof ED2>(props: ReactComponentProps<ED2, T2, true, {
entity: keyof ED2;
entityId: string;
allowUpdateName?: boolean;
allowUpdateNickname?: boolean;
allowUpdateName?: boolean | undefined;
allowUpdateNickname?: boolean | undefined;
}>) => React.ReactElement;
export default _default;

View File

@ -5,7 +5,7 @@ import { ReactComponentProps } from 'oak-frontend-base';
declare const _default: <ED2 extends EntityDict & BaseEntityDict, T2 extends keyof ED2>(props: ReactComponentProps<ED2, T2, true, {
entity: keyof ED2;
entityId: string;
redirectToAfterConfirm: ED2['userEntityGrant']['Schema']['redirectTo'];
redirectToAfterConfirm: ED2["userEntityGrant"]["Schema"]["redirectTo"];
qrCodeType: QrCodeType;
type: EntityDict['userEntityGrant']['Schema']['type'];
relations: EntityDict['relation']['OpSchema'][];

View File

@ -4,11 +4,11 @@ import { EntityDict as BaseEntityDict } from 'oak-domain/lib/types/Entity';
declare const _default: <ED2 extends EntityDict & BaseEntityDict, T2 extends keyof ED2>(props: ReactComponentProps<ED2, T2, true, {
entity: keyof ED2;
entityId: string;
redirectToAfterConfirm: ED2['userEntityGrant']['Schema']['redirectTo'];
redirectToAfterConfirm: ED2["userEntityGrant"]["Schema"]["redirectTo"];
claimUrl: string;
qrCodeType: string;
passwordRequire?: boolean;
allowUpdateName?: boolean;
allowUpdateNickname?: boolean;
passwordRequire?: boolean | undefined;
allowUpdateName?: boolean | undefined;
allowUpdateNickname?: boolean | undefined;
}>) => React.ReactElement;
export default _default;

View File

@ -12,7 +12,10 @@ export type OpSchema = EntityShape & {
deActions: Actions;
};
export type OpAttr = keyof OpSchema;
export type Schema = OpSchema & {
export type Schema = EntityShape & {
relationId?: ForeignKey<"relation"> | null;
pathId: ForeignKey<"path">;
deActions: Actions;
relation?: Relation.Schema | null;
path: Path.Schema;
} & {

View File

@ -1,8 +1 @@
{
"name": "用户授权",
"attr": {
"relation": "关系",
"path": "路径",
"deActions": "目标对象动作"
}
}
{ "name": "用户授权", "attr": { "relation": "关系", "path": "路径", "deActions": "目标对象动作" } }

View File

@ -17,7 +17,15 @@ export type OpSchema = EntityShape & {
entityId?: String<64> | null;
};
export type OpAttr = keyof OpSchema;
export type Schema = OpSchema & {
export type Schema = EntityShape & {
detail: String<32>;
areaId: ForeignKey<"area">;
phone: String<12>;
name: String<32>;
default: Boolean;
remark?: Text | null;
entity?: ("user" | string) | null;
entityId?: String<64> | null;
area: Area.Schema;
user?: User.Schema;
} & {

View File

@ -1,13 +1 @@
{
"name": "地址",
"attr": {
"detail": "详细地址",
"area": "所在地区",
"phone": "联系电话",
"name": "姓名",
"default": "是否默认",
"remark": "备注",
"entity": "对象实体",
"entityId": "对象实体Id"
}
}
{ "name": "地址", "attr": { "detail": "详细地址", "area": "所在地区", "phone": "联系电话", "name": "姓名", "default": "是否默认", "remark": "备注", "entity": "对象实体", "entityId": "对象实体Id" } }

View File

@ -91,59 +91,42 @@ export type OpSchema = EntityShape & {
domainId?: ForeignKey<"domain"> | null;
};
export type OpAttr = keyof OpSchema;
type ApplicationPassport$applicationAggr = "applicationPassport$application$$aggr" | "applicationPassport$application$$0$$aggr" | "applicationPassport$application$$1$$aggr" | "applicationPassport$application$$2$$aggr" | "applicationPassport$application$$3$$aggr" | "applicationPassport$application$$4$$aggr" | "applicationPassport$application$$5$$aggr" | "applicationPassport$application$$6$$aggr" | "applicationPassport$application$$7$$aggr" | "applicationPassport$application$$8$$aggr" | "applicationPassport$application$$9$$aggr";
type ExtraFile$applicationAggr = "extraFile$application$$aggr" | "extraFile$application$$0$$aggr" | "extraFile$application$$1$$aggr" | "extraFile$application$$2$$aggr" | "extraFile$application$$3$$aggr" | "extraFile$application$$4$$aggr" | "extraFile$application$$5$$aggr" | "extraFile$application$$6$$aggr" | "extraFile$application$$7$$aggr" | "extraFile$application$$8$$aggr" | "extraFile$application$$9$$aggr";
type Notification$applicationAggr = "notification$application$$aggr" | "notification$application$$0$$aggr" | "notification$application$$1$$aggr" | "notification$application$$2$$aggr" | "notification$application$$3$$aggr" | "notification$application$$4$$aggr" | "notification$application$$5$$aggr" | "notification$application$$6$$aggr" | "notification$application$$7$$aggr" | "notification$application$$8$$aggr" | "notification$application$$9$$aggr";
type SessionMessage$applicationAggr = "sessionMessage$application$$aggr" | "sessionMessage$application$$0$$aggr" | "sessionMessage$application$$1$$aggr" | "sessionMessage$application$$2$$aggr" | "sessionMessage$application$$3$$aggr" | "sessionMessage$application$$4$$aggr" | "sessionMessage$application$$5$$aggr" | "sessionMessage$application$$6$$aggr" | "sessionMessage$application$$7$$aggr" | "sessionMessage$application$$8$$aggr" | "sessionMessage$application$$9$$aggr";
type Token$applicationAggr = "token$application$$aggr" | "token$application$$0$$aggr" | "token$application$$1$$aggr" | "token$application$$2$$aggr" | "token$application$$3$$aggr" | "token$application$$4$$aggr" | "token$application$$5$$aggr" | "token$application$$6$$aggr" | "token$application$$7$$aggr" | "token$application$$8$$aggr" | "token$application$$9$$aggr";
type WechatMenu$applicationAggr = "wechatMenu$application$$aggr" | "wechatMenu$application$$0$$aggr" | "wechatMenu$application$$1$$aggr" | "wechatMenu$application$$2$$aggr" | "wechatMenu$application$$3$$aggr" | "wechatMenu$application$$4$$aggr" | "wechatMenu$application$$5$$aggr" | "wechatMenu$application$$6$$aggr" | "wechatMenu$application$$7$$aggr" | "wechatMenu$application$$8$$aggr" | "wechatMenu$application$$9$$aggr";
type WechatPublicAutoReply$applicationAggr = "wechatPublicAutoReply$application$$aggr" | "wechatPublicAutoReply$application$$0$$aggr" | "wechatPublicAutoReply$application$$1$$aggr" | "wechatPublicAutoReply$application$$2$$aggr" | "wechatPublicAutoReply$application$$3$$aggr" | "wechatPublicAutoReply$application$$4$$aggr" | "wechatPublicAutoReply$application$$5$$aggr" | "wechatPublicAutoReply$application$$6$$aggr" | "wechatPublicAutoReply$application$$7$$aggr" | "wechatPublicAutoReply$application$$8$$aggr" | "wechatPublicAutoReply$application$$9$$aggr";
type WechatPublicTag$applicationAggr = "wechatPublicTag$application$$aggr" | "wechatPublicTag$application$$0$$aggr" | "wechatPublicTag$application$$1$$aggr" | "wechatPublicTag$application$$2$$aggr" | "wechatPublicTag$application$$3$$aggr" | "wechatPublicTag$application$$4$$aggr" | "wechatPublicTag$application$$5$$aggr" | "wechatPublicTag$application$$6$$aggr" | "wechatPublicTag$application$$7$$aggr" | "wechatPublicTag$application$$8$$aggr" | "wechatPublicTag$application$$9$$aggr";
type WechatQrCode$applicationAggr = "wechatQrCode$application$$aggr" | "wechatQrCode$application$$0$$aggr" | "wechatQrCode$application$$1$$aggr" | "wechatQrCode$application$$2$$aggr" | "wechatQrCode$application$$3$$aggr" | "wechatQrCode$application$$4$$aggr" | "wechatQrCode$application$$5$$aggr" | "wechatQrCode$application$$6$$aggr" | "wechatQrCode$application$$7$$aggr" | "wechatQrCode$application$$8$$aggr" | "wechatQrCode$application$$9$$aggr";
type WechatTemplate$applicationAggr = "wechatTemplate$application$$aggr" | "wechatTemplate$application$$0$$aggr" | "wechatTemplate$application$$1$$aggr" | "wechatTemplate$application$$2$$aggr" | "wechatTemplate$application$$3$$aggr" | "wechatTemplate$application$$4$$aggr" | "wechatTemplate$application$$5$$aggr" | "wechatTemplate$application$$6$$aggr" | "wechatTemplate$application$$7$$aggr" | "wechatTemplate$application$$8$$aggr" | "wechatTemplate$application$$9$$aggr";
type WechatUser$applicationAggr = "wechatUser$application$$aggr" | "wechatUser$application$$0$$aggr" | "wechatUser$application$$1$$aggr" | "wechatUser$application$$2$$aggr" | "wechatUser$application$$3$$aggr" | "wechatUser$application$$4$$aggr" | "wechatUser$application$$5$$aggr" | "wechatUser$application$$6$$aggr" | "wechatUser$application$$7$$aggr" | "wechatUser$application$$8$$aggr" | "wechatUser$application$$9$$aggr";
type Session$entityAggr = "session$entity$$aggr" | "session$entity$$0$$aggr" | "session$entity$$1$$aggr" | "session$entity$$2$$aggr" | "session$entity$$3$$aggr" | "session$entity$$4$$aggr" | "session$entity$$5$$aggr" | "session$entity$$6$$aggr" | "session$entity$$7$$aggr" | "session$entity$$8$$aggr" | "session$entity$$9$$aggr";
export type Schema = OpSchema & {
export type Schema = EntityShape & {
name: String<32>;
description?: Text | null;
type: AppType;
systemId: ForeignKey<"system">;
config: WebConfig | WechatMpConfig | WechatPublicConfig | NativeConfig;
style?: Style | null;
domainId?: ForeignKey<"domain"> | null;
system: System.Schema;
domain?: Domain.Schema | null;
applicationPassport$application?: Array<ApplicationPassport.Schema>;
applicationPassport$application$$aggr?: AggregationResult<ApplicationPassport.Schema>;
extraFile$application?: Array<ExtraFile.Schema>;
extraFile$application$$aggr?: AggregationResult<ExtraFile.Schema>;
notification$application?: Array<Notification.Schema>;
notification$application$$aggr?: AggregationResult<Notification.Schema>;
sessionMessage$application?: Array<SessionMessage.Schema>;
sessionMessage$application$$aggr?: AggregationResult<SessionMessage.Schema>;
token$application?: Array<Token.Schema>;
token$application$$aggr?: AggregationResult<Token.Schema>;
wechatMenu$application?: Array<WechatMenu.Schema>;
wechatMenu$application$$aggr?: AggregationResult<WechatMenu.Schema>;
wechatPublicAutoReply$application?: Array<WechatPublicAutoReply.Schema>;
wechatPublicAutoReply$application$$aggr?: AggregationResult<WechatPublicAutoReply.Schema>;
wechatPublicTag$application?: Array<WechatPublicTag.Schema>;
wechatPublicTag$application$$aggr?: AggregationResult<WechatPublicTag.Schema>;
wechatQrCode$application?: Array<WechatQrCode.Schema>;
wechatQrCode$application$$aggr?: AggregationResult<WechatQrCode.Schema>;
wechatTemplate$application?: Array<WechatTemplate.Schema>;
wechatTemplate$application$$aggr?: AggregationResult<WechatTemplate.Schema>;
wechatUser$application?: Array<WechatUser.Schema>;
wechatUser$application$$aggr?: AggregationResult<WechatUser.Schema>;
session$entity?: Array<Session.Schema>;
session$entity$$aggr?: AggregationResult<Session.Schema>;
} & {
[A in ExpressionKey]?: any;
} & {
[A in ApplicationPassport$applicationAggr]?: AggregationResult<ApplicationPassport.Schema>;
} & {
[A in ExtraFile$applicationAggr]?: AggregationResult<ExtraFile.Schema>;
} & {
[A in Notification$applicationAggr]?: AggregationResult<Notification.Schema>;
} & {
[A in SessionMessage$applicationAggr]?: AggregationResult<SessionMessage.Schema>;
} & {
[A in Token$applicationAggr]?: AggregationResult<Token.Schema>;
} & {
[A in WechatMenu$applicationAggr]?: AggregationResult<WechatMenu.Schema>;
} & {
[A in WechatPublicAutoReply$applicationAggr]?: AggregationResult<WechatPublicAutoReply.Schema>;
} & {
[A in WechatPublicTag$applicationAggr]?: AggregationResult<WechatPublicTag.Schema>;
} & {
[A in WechatQrCode$applicationAggr]?: AggregationResult<WechatQrCode.Schema>;
} & {
[A in WechatTemplate$applicationAggr]?: AggregationResult<WechatTemplate.Schema>;
} & {
[A in WechatUser$applicationAggr]?: AggregationResult<WechatUser.Schema>;
} & {
[A in Session$entityAggr]?: AggregationResult<Session.Schema>;
};
type AttrFilter = {
id: Q_StringValue;
@ -192,88 +175,76 @@ export type Projection = {
applicationPassport$application?: ApplicationPassport.Selection & {
$entity: "applicationPassport";
};
applicationPassport$application$$aggr?: ApplicationPassport.Aggregation & {
$entity: "applicationPassport";
};
extraFile$application?: ExtraFile.Selection & {
$entity: "extraFile";
};
extraFile$application$$aggr?: ExtraFile.Aggregation & {
$entity: "extraFile";
};
notification$application?: Notification.Selection & {
$entity: "notification";
};
notification$application$$aggr?: Notification.Aggregation & {
$entity: "notification";
};
sessionMessage$application?: SessionMessage.Selection & {
$entity: "sessionMessage";
};
sessionMessage$application$$aggr?: SessionMessage.Aggregation & {
$entity: "sessionMessage";
};
token$application?: Token.Selection & {
$entity: "token";
};
token$application$$aggr?: Token.Aggregation & {
$entity: "token";
};
wechatMenu$application?: WechatMenu.Selection & {
$entity: "wechatMenu";
};
wechatMenu$application$$aggr?: WechatMenu.Aggregation & {
$entity: "wechatMenu";
};
wechatPublicAutoReply$application?: WechatPublicAutoReply.Selection & {
$entity: "wechatPublicAutoReply";
};
wechatPublicAutoReply$application$$aggr?: WechatPublicAutoReply.Aggregation & {
$entity: "wechatPublicAutoReply";
};
wechatPublicTag$application?: WechatPublicTag.Selection & {
$entity: "wechatPublicTag";
};
wechatPublicTag$application$$aggr?: WechatPublicTag.Aggregation & {
$entity: "wechatPublicTag";
};
wechatQrCode$application?: WechatQrCode.Selection & {
$entity: "wechatQrCode";
};
wechatQrCode$application$$aggr?: WechatQrCode.Aggregation & {
$entity: "wechatQrCode";
};
wechatTemplate$application?: WechatTemplate.Selection & {
$entity: "wechatTemplate";
};
wechatTemplate$application$$aggr?: WechatTemplate.Aggregation & {
$entity: "wechatTemplate";
};
wechatUser$application?: WechatUser.Selection & {
$entity: "wechatUser";
};
wechatUser$application$$aggr?: WechatUser.Aggregation & {
$entity: "wechatUser";
};
session$entity?: Session.Selection & {
$entity: "session";
};
} & Partial<ExprOp<OpAttr | string>> & {
[A in ApplicationPassport$applicationAggr]?: ApplicationPassport.Aggregation & {
$entity: "applicationPassport";
};
} & {
[A in ExtraFile$applicationAggr]?: ExtraFile.Aggregation & {
$entity: "extraFile";
};
} & {
[A in Notification$applicationAggr]?: Notification.Aggregation & {
$entity: "notification";
};
} & {
[A in SessionMessage$applicationAggr]?: SessionMessage.Aggregation & {
$entity: "sessionMessage";
};
} & {
[A in Token$applicationAggr]?: Token.Aggregation & {
$entity: "token";
};
} & {
[A in WechatMenu$applicationAggr]?: WechatMenu.Aggregation & {
$entity: "wechatMenu";
};
} & {
[A in WechatPublicAutoReply$applicationAggr]?: WechatPublicAutoReply.Aggregation & {
$entity: "wechatPublicAutoReply";
};
} & {
[A in WechatPublicTag$applicationAggr]?: WechatPublicTag.Aggregation & {
$entity: "wechatPublicTag";
};
} & {
[A in WechatQrCode$applicationAggr]?: WechatQrCode.Aggregation & {
$entity: "wechatQrCode";
};
} & {
[A in WechatTemplate$applicationAggr]?: WechatTemplate.Aggregation & {
$entity: "wechatTemplate";
};
} & {
[A in WechatUser$applicationAggr]?: WechatUser.Aggregation & {
$entity: "wechatUser";
};
} & {
[A in Session$entityAggr]?: Session.Aggregation & {
session$entity$$aggr?: Session.Aggregation & {
$entity: "session";
};
};
} & Partial<ExprOp<OpAttr | string>>;
type ApplicationIdProjection = OneOf<{
id: number;
}>;

View File

@ -1,21 +1 @@
{
"name": "应用",
"attr": {
"description": "描述",
"type": "类型",
"system": "系统",
"name": "名称",
"config": "设置",
"style": "样式",
"sessions": "会话",
"domain": "域名"
},
"v": {
"type": {
"web": "网站",
"wechatPublic": "微信公众号",
"wechatMp": "微信小程序",
"native": "App"
}
}
}
{ "name": "应用", "attr": { "description": "描述", "type": "类型", "system": "系统", "name": "名称", "config": "设置", "style": "样式", "sessions": "会话", "domain": "域名" }, "v": { "type": { "web": "网站", "wechatPublic": "微信公众号", "wechatMp": "微信小程序", "native": "App" } } }

View File

@ -12,7 +12,10 @@ export type OpSchema = EntityShape & {
isDefault: Boolean;
};
export type OpAttr = keyof OpSchema;
export type Schema = OpSchema & {
export type Schema = EntityShape & {
applicationId: ForeignKey<"application">;
passportId: ForeignKey<"passport">;
isDefault: Boolean;
application: Application.Schema;
passport: Passport.Schema;
} & {

View File

@ -1,8 +1 @@
{
"name": "应用登录方式",
"attr": {
"application": "应用",
"passport": "登录方式",
"isDefault": "是否默认"
}
}
{ "name": "应用登录方式", "attr": { "application": "应用", "passport": "登录方式", "isDefault": "是否默认" } }

View File

@ -16,26 +16,24 @@ export type OpSchema = EntityShape & {
center: Geo;
};
export type OpAttr = keyof OpSchema;
type Address$areaAggr = "address$area$$aggr" | "address$area$$0$$aggr" | "address$area$$1$$aggr" | "address$area$$2$$aggr" | "address$area$$3$$aggr" | "address$area$$4$$aggr" | "address$area$$5$$aggr" | "address$area$$6$$aggr" | "address$area$$7$$aggr" | "address$area$$8$$aggr" | "address$area$$9$$aggr";
type Area$parentAggr = "area$parent$$aggr" | "area$parent$$0$$aggr" | "area$parent$$1$$aggr" | "area$parent$$2$$aggr" | "area$parent$$3$$aggr" | "area$parent$$4$$aggr" | "area$parent$$5$$aggr" | "area$parent$$6$$aggr" | "area$parent$$7$$aggr" | "area$parent$$8$$aggr" | "area$parent$$9$$aggr";
type Station$areaAggr = "station$area$$aggr" | "station$area$$0$$aggr" | "station$area$$1$$aggr" | "station$area$$2$$aggr" | "station$area$$3$$aggr" | "station$area$$4$$aggr" | "station$area$$5$$aggr" | "station$area$$6$$aggr" | "station$area$$7$$aggr" | "station$area$$8$$aggr" | "station$area$$9$$aggr";
type Subway$areaAggr = "subway$area$$aggr" | "subway$area$$0$$aggr" | "subway$area$$1$$aggr" | "subway$area$$2$$aggr" | "subway$area$$3$$aggr" | "subway$area$$4$$aggr" | "subway$area$$5$$aggr" | "subway$area$$6$$aggr" | "subway$area$$7$$aggr" | "subway$area$$8$$aggr" | "subway$area$$9$$aggr";
export type Schema = OpSchema & {
export type Schema = EntityShape & {
name: String<32>;
level: "province" | "city" | "district" | "street" | "country";
depth: 0 | 1 | 2 | 3 | 4;
parentId?: ForeignKey<"area"> | null;
code: String<12>;
center: Geo;
parent?: Schema | null;
address$area?: Array<Address.Schema>;
address$area$$aggr?: AggregationResult<Address.Schema>;
area$parent?: Array<Schema>;
area$parent$$aggr?: AggregationResult<Schema>;
station$area?: Array<Station.Schema>;
station$area$$aggr?: AggregationResult<Station.Schema>;
subway$area?: Array<Subway.Schema>;
subway$area$$aggr?: AggregationResult<Subway.Schema>;
} & {
[A in ExpressionKey]?: any;
} & {
[A in Address$areaAggr]?: AggregationResult<Address.Schema>;
} & {
[A in Area$parentAggr]?: AggregationResult<Schema>;
} & {
[A in Station$areaAggr]?: AggregationResult<Station.Schema>;
} & {
[A in Subway$areaAggr]?: AggregationResult<Subway.Schema>;
};
type AttrFilter = {
id: Q_StringValue;
@ -71,32 +69,28 @@ export type Projection = {
address$area?: Address.Selection & {
$entity: "address";
};
address$area$$aggr?: Address.Aggregation & {
$entity: "address";
};
area$parent?: Selection & {
$entity: "area";
};
area$parent$$aggr?: Aggregation & {
$entity: "area";
};
station$area?: Station.Selection & {
$entity: "station";
};
station$area$$aggr?: Station.Aggregation & {
$entity: "station";
};
subway$area?: Subway.Selection & {
$entity: "subway";
};
} & Partial<ExprOp<OpAttr | string>> & {
[A in Address$areaAggr]?: Address.Aggregation & {
$entity: "address";
};
} & {
[A in Area$parentAggr]?: Aggregation & {
$entity: "area";
};
} & {
[A in Station$areaAggr]?: Station.Aggregation & {
$entity: "station";
};
} & {
[A in Subway$areaAggr]?: Subway.Aggregation & {
subway$area$$aggr?: Subway.Aggregation & {
$entity: "subway";
};
};
} & Partial<ExprOp<OpAttr | string>>;
type AreaIdProjection = OneOf<{
id: number;
parentId: number;

View File

@ -1,20 +1 @@
{
"name": "地区",
"attr": {
"level": "层级",
"depth": "深度",
"parent": "上级地区",
"name": "名称",
"code": "地区编码",
"center": "中心坐标"
},
"v": {
"level": {
"country": "国家",
"province": "省",
"city": "市",
"district": "区",
"street": "街道"
}
}
}
{ "name": "地区", "attr": { "level": "层级", "depth": "深度", "parent": "上级地区", "name": "名称", "code": "地区编码", "center": "中心坐标" }, "v": { "level": { "country": "国家", "province": "省", "city": "市", "district": "区", "street": "街道" } } }

View File

@ -12,14 +12,15 @@ export type OpSchema = EntityShape & {
articleMenuId: ForeignKey<"articleMenu">;
};
export type OpAttr = keyof OpSchema;
type ExtraFile$entityAggr = "extraFile$entity$$aggr" | "extraFile$entity$$0$$aggr" | "extraFile$entity$$1$$aggr" | "extraFile$entity$$2$$aggr" | "extraFile$entity$$3$$aggr" | "extraFile$entity$$4$$aggr" | "extraFile$entity$$5$$aggr" | "extraFile$entity$$6$$aggr" | "extraFile$entity$$7$$aggr" | "extraFile$entity$$8$$aggr" | "extraFile$entity$$9$$aggr";
export type Schema = OpSchema & {
export type Schema = EntityShape & {
name: String<32>;
content: Text;
articleMenuId: ForeignKey<"articleMenu">;
articleMenu: ArticleMenu.Schema;
extraFile$entity?: Array<ExtraFile.Schema>;
extraFile$entity$$aggr?: AggregationResult<ExtraFile.Schema>;
} & {
[A in ExpressionKey]?: any;
} & {
[A in ExtraFile$entityAggr]?: AggregationResult<ExtraFile.Schema>;
};
type AttrFilter = {
id: Q_StringValue;
@ -47,11 +48,10 @@ export type Projection = {
extraFile$entity?: ExtraFile.Selection & {
$entity: "extraFile";
};
} & Partial<ExprOp<OpAttr | string>> & {
[A in ExtraFile$entityAggr]?: ExtraFile.Aggregation & {
extraFile$entity$$aggr?: ExtraFile.Aggregation & {
$entity: "extraFile";
};
};
} & Partial<ExprOp<OpAttr | string>>;
type ArticleIdProjection = OneOf<{
id: number;
}>;

View File

@ -1,9 +1 @@
{
"name": "文章",
"attr": {
"name": "标题",
"content": "正文内容",
"articleMenu": "菜单",
"files": "文件"
}
}
{ "name": "文章", "attr": { "name": "标题", "content": "正文内容", "articleMenu": "菜单", "files": "文件" } }

View File

@ -15,22 +15,22 @@ export type OpSchema = EntityShape & {
entityId: String<64>;
};
export type OpAttr = keyof OpSchema;
type Article$articleMenuAggr = "article$articleMenu$$aggr" | "article$articleMenu$$0$$aggr" | "article$articleMenu$$1$$aggr" | "article$articleMenu$$2$$aggr" | "article$articleMenu$$3$$aggr" | "article$articleMenu$$4$$aggr" | "article$articleMenu$$5$$aggr" | "article$articleMenu$$6$$aggr" | "article$articleMenu$$7$$aggr" | "article$articleMenu$$8$$aggr" | "article$articleMenu$$9$$aggr";
type ArticleMenu$parentAggr = "articleMenu$parent$$aggr" | "articleMenu$parent$$0$$aggr" | "articleMenu$parent$$1$$aggr" | "articleMenu$parent$$2$$aggr" | "articleMenu$parent$$3$$aggr" | "articleMenu$parent$$4$$aggr" | "articleMenu$parent$$5$$aggr" | "articleMenu$parent$$6$$aggr" | "articleMenu$parent$$7$$aggr" | "articleMenu$parent$$8$$aggr" | "articleMenu$parent$$9$$aggr";
type ExtraFile$entityAggr = "extraFile$entity$$aggr" | "extraFile$entity$$0$$aggr" | "extraFile$entity$$1$$aggr" | "extraFile$entity$$2$$aggr" | "extraFile$entity$$3$$aggr" | "extraFile$entity$$4$$aggr" | "extraFile$entity$$5$$aggr" | "extraFile$entity$$6$$aggr" | "extraFile$entity$$7$$aggr" | "extraFile$entity$$8$$aggr" | "extraFile$entity$$9$$aggr";
export type Schema = OpSchema & {
export type Schema = EntityShape & {
name: String<32>;
isArticle: Boolean;
parentId?: ForeignKey<"articleMenu"> | null;
isLeaf?: Boolean | null;
entity: String<32>;
entityId: String<64>;
parent?: Schema | null;
article$articleMenu?: Array<Article.Schema>;
article$articleMenu$$aggr?: AggregationResult<Article.Schema>;
articleMenu$parent?: Array<Schema>;
articleMenu$parent$$aggr?: AggregationResult<Schema>;
extraFile$entity?: Array<ExtraFile.Schema>;
extraFile$entity$$aggr?: AggregationResult<ExtraFile.Schema>;
} & {
[A in ExpressionKey]?: any;
} & {
[A in Article$articleMenuAggr]?: AggregationResult<Article.Schema>;
} & {
[A in ArticleMenu$parentAggr]?: AggregationResult<Schema>;
} & {
[A in ExtraFile$entityAggr]?: AggregationResult<ExtraFile.Schema>;
};
type AttrFilter = {
id: Q_StringValue;
@ -66,25 +66,22 @@ export type Projection = {
article$articleMenu?: Article.Selection & {
$entity: "article";
};
article$articleMenu$$aggr?: Article.Aggregation & {
$entity: "article";
};
articleMenu$parent?: Selection & {
$entity: "articleMenu";
};
articleMenu$parent$$aggr?: Aggregation & {
$entity: "articleMenu";
};
extraFile$entity?: ExtraFile.Selection & {
$entity: "extraFile";
};
} & Partial<ExprOp<OpAttr | string>> & {
[A in Article$articleMenuAggr]?: Article.Aggregation & {
$entity: "article";
};
} & {
[A in ArticleMenu$parentAggr]?: Aggregation & {
$entity: "articleMenu";
};
} & {
[A in ExtraFile$entityAggr]?: ExtraFile.Aggregation & {
extraFile$entity$$aggr?: ExtraFile.Aggregation & {
$entity: "extraFile";
};
};
} & Partial<ExprOp<OpAttr | string>>;
type ArticleMenuIdProjection = OneOf<{
id: number;
parentId: number;

View File

@ -1,12 +1 @@
{
"name": "文章分类",
"attr": {
"name": "分类标题",
"isArticle": "是否存在文章",
"parent": "所属分类",
"entity": "对象",
"entityId": "对象Id",
"isLeaf": "结点下是否存在叶子结点",
"files": "文件"
}
}
{ "name": "文章分类", "attr": { "name": "分类标题", "isArticle": "是否存在文章", "parent": "所属分类", "entity": "对象", "entityId": "对象Id", "isLeaf": "结点下是否存在叶子结点", "files": "文件" } }

View File

@ -16,7 +16,18 @@ export type OpSchema = EntityShape & {
iState?: IState | null;
};
export type OpAttr = keyof OpSchema;
export type Schema = OpSchema & {} & {
export type Schema = EntityShape & {
origin: "mobile" | "email";
content: String<32>;
code: String<8>;
visitorId: Text;
reason?: Text | null;
env: Object;
expired: Boolean;
expiresAt: Datetime;
type: "login" | "changePassword" | "confirm";
iState?: IState | null;
} & {
[A in ExpressionKey]?: any;
};
type AttrFilter = {

View File

@ -1,33 +1 @@
{
"name": "验证码",
"attr": {
"origin": "源",
"content": "内容",
"code": "验证码",
"visitorId": "用户标识",
"reason": "失败原因",
"env": "用户环境",
"expired": "是否过期",
"expiresAt": "过期时间",
"iState": "状态",
"type": "类型"
},
"action": {
"send": "发送",
"fail": "失败",
"success": "成功"
},
"v": {
"iState": {
"unsent": "未发送",
"sending": "发送中",
"sent": "已发送",
"failure": "已失败"
},
"type": {
"login": "登录",
"changePassword": "修改密码",
"confirm": "校验"
}
}
}
{ "name": "验证码", "attr": { "origin": "源", "content": "内容", "code": "验证码", "visitorId": "用户标识", "reason": "失败原因", "env": "用户环境", "expired": "是否过期", "expiresAt": "过期时间", "iState": "状态", "type": "类型" }, "action": { "send": "发送", "fail": "失败", "success": "成功" }, "v": { "iState": { "unsent": "未发送", "sending": "发送中", "sent": "已发送", "failure": "已失败" }, "type": { "login": "登录", "changePassword": "修改密码", "confirm": "校验" } } }

View File

@ -12,7 +12,11 @@ export type OpSchema = EntityShape & {
result: "success" | "fail";
};
export type OpAttr = keyof OpSchema;
export type Schema = OpSchema & {
export type Schema = EntityShape & {
userId: ForeignKey<"user">;
prevPassword?: String<32> | null;
newPassword?: String<32> | null;
result: "success" | "fail";
user: User.Schema;
} & {
[A in ExpressionKey]?: any;

View File

@ -1,15 +1 @@
{
"name": "密码修改记录",
"attr": {
"user": "用户",
"prevPassword": "原密码",
"newPassword": "新密码",
"result": "修改结果"
},
"v": {
"result": {
"success": "成功",
"fail": "失败"
}
}
}
{ "name": "密码修改记录", "attr": { "user": "用户", "prevPassword": "原密码", "newPassword": "新密码", "result": "修改结果" }, "v": { "result": { "success": "成功", "fail": "失败" } } }

View File

@ -14,14 +14,17 @@ export type OpSchema = EntityShape & {
systemId: ForeignKey<"system">;
};
export type OpAttr = keyof OpSchema;
type Application$domainAggr = "application$domain$$aggr" | "application$domain$$0$$aggr" | "application$domain$$1$$aggr" | "application$domain$$2$$aggr" | "application$domain$$3$$aggr" | "application$domain$$4$$aggr" | "application$domain$$5$$aggr" | "application$domain$$6$$aggr" | "application$domain$$7$$aggr" | "application$domain$$8$$aggr" | "application$domain$$9$$aggr";
export type Schema = OpSchema & {
export type Schema = EntityShape & {
url: String<64>;
apiPath?: String<32> | null;
protocol: "http:" | "https:";
port: Int<2>;
systemId: ForeignKey<"system">;
system: System.Schema;
application$domain?: Array<Application.Schema>;
application$domain$$aggr?: AggregationResult<Application.Schema>;
} & {
[A in ExpressionKey]?: any;
} & {
[A in Application$domainAggr]?: AggregationResult<Application.Schema>;
};
type AttrFilter = {
id: Q_StringValue;
@ -53,11 +56,10 @@ export type Projection = {
application$domain?: Application.Selection & {
$entity: "application";
};
} & Partial<ExprOp<OpAttr | string>> & {
[A in Application$domainAggr]?: Application.Aggregation & {
application$domain$$aggr?: Application.Aggregation & {
$entity: "application";
};
};
} & Partial<ExprOp<OpAttr | string>>;
type DomainIdProjection = OneOf<{
id: number;
}>;

View File

@ -1,16 +1 @@
{
"name": "域名",
"attr": {
"url": "域名",
"apiPath": "api路径",
"protocol": "协议",
"port": "端口",
"system": "系统"
},
"v": {
"protocol": {
"http:": "http",
"https:": "https"
}
}
}
{ "name": "域名", "attr": { "url": "域名", "apiPath": "api路径", "protocol": "协议", "port": "端口", "system": "系统" }, "v": { "protocol": { "http:": "http", "https:": "https" } } }

View File

@ -13,14 +13,15 @@ export type OpSchema = EntityShape & {
ableState?: AbleState | null;
};
export type OpAttr = keyof OpSchema;
type Token$entityAggr = "token$entity$$aggr" | "token$entity$$0$$aggr" | "token$entity$$1$$aggr" | "token$entity$$2$$aggr" | "token$entity$$3$$aggr" | "token$entity$$4$$aggr" | "token$entity$$5$$aggr" | "token$entity$$6$$aggr" | "token$entity$$7$$aggr" | "token$entity$$8$$aggr" | "token$entity$$9$$aggr";
export type Schema = OpSchema & {
export type Schema = EntityShape & {
email: String<32>;
userId: ForeignKey<"user">;
ableState?: AbleState | null;
user: User.Schema;
token$entity?: Array<Token.Schema>;
token$entity$$aggr?: AggregationResult<Token.Schema>;
} & {
[A in ExpressionKey]?: any;
} & {
[A in Token$entityAggr]?: AggregationResult<Token.Schema>;
};
type AttrFilter = {
id: Q_StringValue;
@ -48,11 +49,10 @@ export type Projection = {
token$entity?: Token.Selection & {
$entity: "token";
};
} & Partial<ExprOp<OpAttr | string>> & {
[A in Token$entityAggr]?: Token.Aggregation & {
token$entity$$aggr?: Token.Aggregation & {
$entity: "token";
};
};
} & Partial<ExprOp<OpAttr | string>>;
type EmailIdProjection = OneOf<{
id: number;
}>;

View File

@ -1,19 +1 @@
{
"name": "邮箱",
"attr": {
"ableState": "是否可用",
"email": "邮箱",
"user": "关联用户",
"tokens": "相关令牌"
},
"action": {
"enable": "启用",
"disable": "禁用"
},
"v": {
"ableState": {
"enabled": "可用的",
"disabled": "禁用的"
}
}
}
{ "name": "邮箱", "attr": { "ableState": "是否可用", "email": "邮箱", "user": "关联用户", "tokens": "相关令牌" }, "action": { "enable": "启用", "disable": "禁用" }, "v": { "ableState": { "enabled": "可用的", "disabled": "禁用的" } } }

View File

@ -32,7 +32,27 @@ export type OpSchema = EntityShape & {
applicationId: ForeignKey<"application">;
};
export type OpAttr = keyof OpSchema;
export type Schema = OpSchema & {
export type Schema = EntityShape & {
origin: "qiniu" | "wechat" | "ctyun" | "aliyun" | "tencent" | "unknown";
type: "image" | "video" | "audio" | "file";
bucket?: String<32> | null;
objectId?: String<64> | null;
tag1?: String<32> | null;
tag2?: String<32> | null;
filename: String<256>;
md5?: Text | null;
entity: "article" | "articleMenu" | "sessionMessage" | "user" | string;
entityId: String<64>;
extra1?: Text | null;
extra2?: Object | null;
extension?: String<16> | null;
size?: Int<8> | null;
sort?: Float<22, 10> | null;
fileType?: String<128> | null;
isBridge?: Boolean | null;
uploadState: "success" | "failed" | "uploading";
uploadMeta?: Object | null;
applicationId: ForeignKey<"application">;
application: Application.Schema;
article?: Article.Schema;
articleMenu?: ArticleMenu.Schema;

View File

@ -1,46 +1 @@
{
"name": "文件",
"attr": {
"origin": "源",
"type": "类型",
"bucket": "桶",
"objectId": "对象编号",
"tag1": "标签一",
"tag2": "标签二",
"filename": "文件名",
"md5": "md5",
"entity": "关联对象",
"entityId": "关联对象id",
"extra1": "额外信息",
"extra2": "非结构化额外信息",
"extension": "后缀名",
"size": "文件大小",
"sort": "排序",
"fileType": "文件类型",
"isBridge": "是否桥接访问",
"uploadState": "上传状态",
"uploadMeta": "上传需要的metadata",
"application": "来源应用"
},
"v": {
"origin": {
"qiniu": "七牛云",
"ctyun": "天翼云",
"wechat": "微信",
"aliyun": "阿里云",
"tencent": "腾讯云",
"unknown": "未知"
},
"type": {
"image": "图像",
"video": "视频",
"audio": "音频",
"file": "文件"
},
"uploadState": {
"success": "上传成功",
"failed": "上传失败",
"uploading": "上传中"
}
}
}
{ "name": "文件", "attr": { "origin": "源", "type": "类型", "bucket": "桶", "objectId": "对象编号", "tag1": "标签一", "tag2": "标签二", "filename": "文件名", "md5": "md5", "entity": "关联对象", "entityId": "关联对象id", "extra1": "额外信息", "extra2": "非结构化额外信息", "extension": "后缀名", "size": "文件大小", "sort": "排序", "fileType": "文件类型", "isBridge": "是否桥接访问", "uploadState": "上传状态", "uploadMeta": "上传需要的metadata", "application": "来源应用" }, "v": { "origin": { "qiniu": "七牛云", "ctyun": "天翼云", "wechat": "微信", "aliyun": "阿里云", "tencent": "腾讯云", "unknown": "未知" }, "type": { "image": "图像", "video": "视频", "audio": "音频", "file": "文件" }, "uploadState": { "success": "上传成功", "failed": "上传失败", "uploading": "上传中" } } }

View File

@ -11,7 +11,13 @@ export type OpSchema = EntityShape & {
data: Object;
};
export type OpAttr = keyof OpSchema;
export type Schema = OpSchema & {} & {
export type Schema = EntityShape & {
module: String<64>;
position: String<188>;
namespace: String<256>;
language: String<32>;
data: Object;
} & {
[A in ExpressionKey]?: any;
};
type AttrFilter = {

View File

@ -1,10 +1 @@
{
"name": "i18n",
"attr": {
"module": "模块",
"position": "文件位置",
"namespace": "命名空间",
"language": "语言",
"data": "数据"
}
}
{ "name": "用户授权", "attr": { "module": "模块", "position": "文件位置", "namespace": "命名空间", "language": "语言", "data": "数据" } }

View File

@ -17,7 +17,19 @@ export type OpSchema = EntityShape & {
expireAt: Datetime;
};
export type OpAttr = keyof OpSchema;
export type Schema = OpSchema & {} & {
export type Schema = EntityShape & {
title: String<32>;
streamTitle: String<32>;
liveonly: "online" | "offline";
hub: String<32>;
streamKey: String<64>;
entity: String<32>;
entityId: String<64>;
rtmpPushUrl: String<64>;
rtmpPlayUrl: String<64>;
pcPushUrl: String<64>;
expireAt: Datetime;
} & {
[A in ExpressionKey]?: any;
};
type AttrFilter = {

View File

@ -1,22 +1 @@
{
"name": "直播流",
"attr": {
"title": "名称",
"streamTitle": "直播流名称",
"liveonly": "活跃状态",
"hub": "直播空间名称",
"entity": "所属实体",
"entityId": "所属实体id",
"rtmpPushUrl": "推流地址",
"rtmpPlayUrl": "播放地址",
"expireAt": "推流过期时间",
"pcPushUrl": "OBS推流地址",
"streamKey": "OBS串流密钥"
},
"v": {
"liveonly": {
"online": "在线",
"offline": "下线"
}
}
}
{ "name": "直播流", "attr": { "title": "名称", "streamTitle": "直播流名称", "liveonly": "活跃状态", "hub": "直播空间名称", "entity": "所属实体", "entityId": "所属实体id", "rtmpPushUrl": "推流地址", "rtmpPlayUrl": "播放地址", "expireAt": "推流过期时间", "pcPushUrl": "OBS推流地址", "streamKey": "OBS串流密钥" }, "v": { "liveonly": { "online": "在线", "offline": "下线" } } }

View File

@ -10,13 +10,14 @@ export type OpSchema = EntityShape & {
iState: "normal" | "rollbacked";
};
export type OpAttr = keyof OpSchema;
type Oper$logAggr = "oper$log$$aggr" | "oper$log$$0$$aggr" | "oper$log$$1$$aggr" | "oper$log$$2$$aggr" | "oper$log$$3$$aggr" | "oper$log$$4$$aggr" | "oper$log$$5$$aggr" | "oper$log$$6$$aggr" | "oper$log$$7$$aggr" | "oper$log$$8$$aggr" | "oper$log$$9$$aggr";
export type Schema = OpSchema & {
export type Schema = EntityShape & {
entity: String<32>;
entityId: String<64>;
iState: "normal" | "rollbacked";
oper$log?: Array<Oper.Schema>;
oper$log$$aggr?: AggregationResult<Oper.Schema>;
} & {
[A in ExpressionKey]?: any;
} & {
[A in Oper$logAggr]?: AggregationResult<Oper.Schema>;
};
type AttrFilter = {
id: Q_StringValue;
@ -42,11 +43,10 @@ export type Projection = {
oper$log?: Oper.Selection & {
$entity: "oper";
};
} & Partial<ExprOp<OpAttr | string>> & {
[A in Oper$logAggr]?: Oper.Aggregation & {
oper$log$$aggr?: Oper.Aggregation & {
$entity: "oper";
};
};
} & Partial<ExprOp<OpAttr | string>>;
type LogIdProjection = OneOf<{
id: number;
}>;

View File

@ -1,18 +1 @@
{
"name": "日志",
"attr": {
"entity": "关联对象",
"entityId": "关联对象ID",
"iState": "状态"
},
"action": {
"undo": "回滚",
"redo": "重做"
},
"v": {
"iState": {
"normal": "正常的",
"rollbacked": "已回滚"
}
}
}
{ "name": "日志", "attr": { "entity": "关联对象", "entityId": "关联对象ID", "iState": "状态" }, "action": { "undo": "回滚", "redo": "重做" }, "v": { "iState": { "normal": "正常的", "rollbacked": "已回滚" } } }

View File

@ -13,14 +13,15 @@ export type OpSchema = EntityShape & {
ableState?: AbleState | null;
};
export type OpAttr = keyof OpSchema;
type Token$entityAggr = "token$entity$$aggr" | "token$entity$$0$$aggr" | "token$entity$$1$$aggr" | "token$entity$$2$$aggr" | "token$entity$$3$$aggr" | "token$entity$$4$$aggr" | "token$entity$$5$$aggr" | "token$entity$$6$$aggr" | "token$entity$$7$$aggr" | "token$entity$$8$$aggr" | "token$entity$$9$$aggr";
export type Schema = OpSchema & {
export type Schema = EntityShape & {
name: String<32>;
userId: ForeignKey<"user">;
ableState?: AbleState | null;
user: User.Schema;
token$entity?: Array<Token.Schema>;
token$entity$$aggr?: AggregationResult<Token.Schema>;
} & {
[A in ExpressionKey]?: any;
} & {
[A in Token$entityAggr]?: AggregationResult<Token.Schema>;
};
type AttrFilter = {
id: Q_StringValue;
@ -48,11 +49,10 @@ export type Projection = {
token$entity?: Token.Selection & {
$entity: "token";
};
} & Partial<ExprOp<OpAttr | string>> & {
[A in Token$entityAggr]?: Token.Aggregation & {
token$entity$$aggr?: Token.Aggregation & {
$entity: "token";
};
};
} & Partial<ExprOp<OpAttr | string>>;
type LoginNameIdProjection = OneOf<{
id: number;
}>;

View File

@ -1,19 +1 @@
{
"name": "账号",
"attr": {
"name": "账号",
"user": "关联用户",
"tokens": "相关令牌",
"ableState": "是否可用"
},
"action": {
"enable": "启用",
"disable": "禁用"
},
"v": {
"ableState": {
"enabled": "可用的",
"disabled": "禁用的"
}
}
}
{ "name": "账号", "attr": { "name": "账号", "user": "关联用户", "tokens": "相关令牌", "ableState": "是否可用" }, "action": { "enable": "启用", "disable": "禁用" }, "v": { "ableState": { "enabled": "可用的", "disabled": "禁用的" } } }

View File

@ -37,19 +37,29 @@ export type OpSchema = EntityShape & {
visitState?: VisitState | null;
};
export type OpAttr = keyof OpSchema;
type MessageSystem$messageAggr = "messageSystem$message$$aggr" | "messageSystem$message$$0$$aggr" | "messageSystem$message$$1$$aggr" | "messageSystem$message$$2$$aggr" | "messageSystem$message$$3$$aggr" | "messageSystem$message$$4$$aggr" | "messageSystem$message$$5$$aggr" | "messageSystem$message$$6$$aggr" | "messageSystem$message$$7$$aggr" | "messageSystem$message$$8$$aggr" | "messageSystem$message$$9$$aggr";
type WechatMpJump$messageAggr = "wechatMpJump$message$$aggr" | "wechatMpJump$message$$0$$aggr" | "wechatMpJump$message$$1$$aggr" | "wechatMpJump$message$$2$$aggr" | "wechatMpJump$message$$3$$aggr" | "wechatMpJump$message$$4$$aggr" | "wechatMpJump$message$$5$$aggr" | "wechatMpJump$message$$6$$aggr" | "wechatMpJump$message$$7$$aggr" | "wechatMpJump$message$$8$$aggr" | "wechatMpJump$message$$9$$aggr";
export type Schema = OpSchema & {
export type Schema = EntityShape & {
entity: String<32>;
entityId: String<64>;
userId: ForeignKey<"user">;
type: String<64>;
weight: Weight;
restriction?: MessageRestriction | null;
title: String<256>;
content: Text;
data?: Object | null;
router?: Router | null;
platformId?: ForeignKey<"platform"> | null;
channels?: Channels | null;
iState?: IState | null;
visitState?: VisitState | null;
user: User.Schema;
platform?: Platform.Schema | null;
messageSystem$message?: Array<MessageSystem.Schema>;
messageSystem$message$$aggr?: AggregationResult<MessageSystem.Schema>;
wechatMpJump$message?: Array<WechatMpJump.Schema>;
wechatMpJump$message$$aggr?: AggregationResult<WechatMpJump.Schema>;
} & {
[A in ExpressionKey]?: any;
} & {
[A in MessageSystem$messageAggr]?: AggregationResult<MessageSystem.Schema>;
} & {
[A in WechatMpJump$messageAggr]?: AggregationResult<WechatMpJump.Schema>;
};
type AttrFilter = {
id: Q_StringValue;
@ -102,18 +112,16 @@ export type Projection = {
messageSystem$message?: MessageSystem.Selection & {
$entity: "messageSystem";
};
messageSystem$message$$aggr?: MessageSystem.Aggregation & {
$entity: "messageSystem";
};
wechatMpJump$message?: WechatMpJump.Selection & {
$entity: "wechatMpJump";
};
} & Partial<ExprOp<OpAttr | string>> & {
[A in MessageSystem$messageAggr]?: MessageSystem.Aggregation & {
$entity: "messageSystem";
};
} & {
[A in WechatMpJump$messageAggr]?: WechatMpJump.Aggregation & {
wechatMpJump$message$$aggr?: WechatMpJump.Aggregation & {
$entity: "wechatMpJump";
};
};
} & Partial<ExprOp<OpAttr | string>>;
type MessageIdProjection = OneOf<{
id: number;
}>;

View File

@ -1,40 +1 @@
{
"name": "消息",
"attr": {
"entity": "关联对象",
"entityId": "关联对象ID",
"restriction": "限制",
"title": "标题",
"content": "内容",
"user": "关联用户",
"type": "消息类型",
"weight": "优先级",
"iState": "发送状态",
"visitState": "访问状态",
"router": "目标路由",
"data": "透传数据",
"platform": "平台",
"channels": "渠道"
},
"action": {
"succeed": "成功",
"fail": "失败",
"visit": "阅读"
},
"v": {
"iState": {
"sending": "发送中",
"success": "发送成功",
"failure": "发送失败"
},
"visitState": {
"unvisited": "未读",
"visited": "已读"
},
"weight": {
"high": "高",
"medium": "中",
"low": "低"
}
}
}
{ "name": "消息", "attr": { "entity": "关联对象", "entityId": "关联对象ID", "restriction": "限制", "title": "标题", "content": "内容", "user": "关联用户", "type": "消息类型", "weight": "优先级", "iState": "发送状态", "visitState": "访问状态", "router": "目标路由", "data": "透传数据", "platform": "平台", "channels": "渠道" }, "action": { "succeed": "成功", "fail": "失败", "visit": "阅读" }, "v": { "iState": { "sending": "发送中", "success": "发送成功", "failure": "发送失败" }, "visitState": { "unvisited": "未读", "visited": "已读" }, "weight": { "high": "高", "medium": "中", "low": "低" } } }

View File

@ -11,15 +11,15 @@ export type OpSchema = EntityShape & {
systemId: ForeignKey<"system">;
};
export type OpAttr = keyof OpSchema;
type Notification$messageSystemAggr = "notification$messageSystem$$aggr" | "notification$messageSystem$$0$$aggr" | "notification$messageSystem$$1$$aggr" | "notification$messageSystem$$2$$aggr" | "notification$messageSystem$$3$$aggr" | "notification$messageSystem$$4$$aggr" | "notification$messageSystem$$5$$aggr" | "notification$messageSystem$$6$$aggr" | "notification$messageSystem$$7$$aggr" | "notification$messageSystem$$8$$aggr" | "notification$messageSystem$$9$$aggr";
export type Schema = OpSchema & {
export type Schema = EntityShape & {
messageId: ForeignKey<"message">;
systemId: ForeignKey<"system">;
message: Message.Schema;
system: System.Schema;
notification$messageSystem?: Array<Notification.Schema>;
notification$messageSystem$$aggr?: AggregationResult<Notification.Schema>;
} & {
[A in ExpressionKey]?: any;
} & {
[A in Notification$messageSystemAggr]?: AggregationResult<Notification.Schema>;
};
type AttrFilter = {
id: Q_StringValue;
@ -47,11 +47,10 @@ export type Projection = {
notification$messageSystem?: Notification.Selection & {
$entity: "notification";
};
} & Partial<ExprOp<OpAttr | string>> & {
[A in Notification$messageSystemAggr]?: Notification.Aggregation & {
notification$messageSystem$$aggr?: Notification.Aggregation & {
$entity: "notification";
};
};
} & Partial<ExprOp<OpAttr | string>>;
type MessageSystemIdProjection = OneOf<{
id: number;
}>;

View File

@ -1,7 +1 @@
{
"name": "消息系统连接",
"attr": {
"message": "消息",
"system": "系统"
}
}
{ "name": "消息系统连接", "attr": { "message": "消息", "system": "系统" } }

View File

@ -7,7 +7,9 @@ export type OpSchema = EntityShape & {
type: String<64>;
};
export type OpAttr = keyof OpSchema;
export type Schema = OpSchema & {} & {
export type Schema = EntityShape & {
type: String<64>;
} & {
[A in ExpressionKey]?: any;
};
type AttrFilter = {

View File

@ -1,6 +1 @@
{
"name": "消息类型",
"attr": {
"type": "类型"
}
}
{ "name": "消息类型", "attr": { "type": "类型" } }

View File

@ -10,7 +10,9 @@ export type OpSchema = EntityShape & {
templateId: ForeignKey<"smsTemplate">;
};
export type OpAttr = keyof OpSchema;
export type Schema = OpSchema & {
export type Schema = EntityShape & {
type: String<64>;
templateId: ForeignKey<"smsTemplate">;
template: SmsTemplate.Schema;
} & {
[A in ExpressionKey]?: any;

View File

@ -1,7 +1 @@
{
"name": "消息类型模板关联",
"attr": {
"type": "消息类型",
"template": "短信消息模板"
}
}
{ "name": "消息类型模板关联", "attr": { "type": "消息类型", "template": "短信消息模板" } }

View File

@ -10,7 +10,9 @@ export type OpSchema = EntityShape & {
templateId: ForeignKey<"wechatTemplate">;
};
export type OpAttr = keyof OpSchema;
export type Schema = OpSchema & {
export type Schema = EntityShape & {
type: String<64>;
templateId: ForeignKey<"wechatTemplate">;
template: WechatTemplate.Schema;
} & {
[A in ExpressionKey]?: any;

View File

@ -1,7 +1 @@
{
"name": "消息类型模板关联",
"attr": {
"type": "消息类型",
"template": "公众号消息模板"
}
}
{ "name": "消息类型模板关联", "attr": { "type": "消息类型", "template": "公众号消息模板" } }

View File

@ -13,14 +13,15 @@ export type OpSchema = EntityShape & {
ableState?: AbleState | null;
};
export type OpAttr = keyof OpSchema;
type Token$entityAggr = "token$entity$$aggr" | "token$entity$$0$$aggr" | "token$entity$$1$$aggr" | "token$entity$$2$$aggr" | "token$entity$$3$$aggr" | "token$entity$$4$$aggr" | "token$entity$$5$$aggr" | "token$entity$$6$$aggr" | "token$entity$$7$$aggr" | "token$entity$$8$$aggr" | "token$entity$$9$$aggr";
export type Schema = OpSchema & {
export type Schema = EntityShape & {
mobile: String<16>;
userId?: ForeignKey<"user"> | null;
ableState?: AbleState | null;
user?: User.Schema | null;
token$entity?: Array<Token.Schema>;
token$entity$$aggr?: AggregationResult<Token.Schema>;
} & {
[A in ExpressionKey]?: any;
} & {
[A in Token$entityAggr]?: AggregationResult<Token.Schema>;
};
type AttrFilter = {
id: Q_StringValue;
@ -48,11 +49,10 @@ export type Projection = {
token$entity?: Token.Selection & {
$entity: "token";
};
} & Partial<ExprOp<OpAttr | string>> & {
[A in Token$entityAggr]?: Token.Aggregation & {
token$entity$$aggr?: Token.Aggregation & {
$entity: "token";
};
};
} & Partial<ExprOp<OpAttr | string>>;
type MobileIdProjection = OneOf<{
id: number;
}>;

View File

@ -1,19 +1 @@
{
"name": "手机",
"attr": {
"ableState": "是否可用",
"mobile": "手机号",
"user": "关联用户",
"tokens": "相关令牌"
},
"action": {
"enable": "启用",
"disable": "禁用"
},
"v": {
"ableState": {
"enabled": "可用的",
"disabled": "禁用的"
}
}
}
{ "name": "手机", "attr": { "ableState": "是否可用", "mobile": "手机号", "user": "关联用户", "tokens": "相关令牌" }, "action": { "enable": "启用", "disable": "禁用" }, "v": { "ableState": { "enabled": "可用的", "disabled": "禁用的" } } }

View File

@ -15,13 +15,19 @@ export type OpSchema = EntityShape & {
iState?: IState | null;
};
export type OpAttr = keyof OpSchema;
type ModiEntity$modiAggr = "modiEntity$modi$$aggr" | "modiEntity$modi$$0$$aggr" | "modiEntity$modi$$1$$aggr" | "modiEntity$modi$$2$$aggr" | "modiEntity$modi$$3$$aggr" | "modiEntity$modi$$4$$aggr" | "modiEntity$modi$$5$$aggr" | "modiEntity$modi$$6$$aggr" | "modiEntity$modi$$7$$aggr" | "modiEntity$modi$$8$$aggr" | "modiEntity$modi$$9$$aggr";
export type Schema = OpSchema & {
export type Schema = EntityShape & {
targetEntity: String<32>;
entity: String<32>;
entityId: String<64>;
action: String<24>;
data: Object;
filter?: Object | null;
extra?: Object | null;
iState?: IState | null;
modiEntity$modi?: Array<ModiEntity.Schema>;
modiEntity$modi$$aggr?: AggregationResult<ModiEntity.Schema>;
} & {
[A in ExpressionKey]?: any;
} & {
[A in ModiEntity$modiAggr]?: AggregationResult<ModiEntity.Schema>;
};
type AttrFilter = {
id: Q_StringValue;
@ -57,11 +63,10 @@ export type Projection = {
modiEntity$modi?: ModiEntity.Selection & {
$entity: "modiEntity";
};
} & Partial<ExprOp<OpAttr | string>> & {
[A in ModiEntity$modiAggr]?: ModiEntity.Aggregation & {
modiEntity$modi$$aggr?: ModiEntity.Aggregation & {
$entity: "modiEntity";
};
};
} & Partial<ExprOp<OpAttr | string>>;
type ModiIdProjection = OneOf<{
id: number;
}>;

View File

@ -1,24 +1 @@
{
"name": "更新",
"attr": {
"targetEntity": "目标对象",
"entity": "关联对象",
"entityId": "关联对象Id",
"action": "动作",
"data": "数据",
"filter": "条件",
"extra": "其它",
"iState": "状态"
},
"action": {
"abandon": "放弃",
"apply": "应用"
},
"v": {
"iState": {
"active": "活跃的",
"abandoned": "放弃的",
"applied": "应用的"
}
}
}
{ "name": "更新", "attr": { "targetEntity": "目标对象", "entity": "关联对象", "entityId": "关联对象Id", "action": "动作", "data": "数据", "filter": "条件", "extra": "其它", "iState": "状态" }, "action": { "abandon": "放弃", "apply": "应用" }, "v": { "iState": { "active": "活跃的", "abandoned": "放弃的", "applied": "应用的" } } }

View File

@ -23,7 +23,10 @@ export type OpSchema = EntityShape & {
entityId: String<64>;
};
export type OpAttr = keyof OpSchema;
export type Schema = OpSchema & {
export type Schema = EntityShape & {
modiId: ForeignKey<"modi">;
entity: "user" | "userEntityGrant" | "userSystem" | "userWechatPublicTag" | "wechatLogin" | "wechatMenu" | "wechatMpJump" | "wechatPublicAutoReply" | "wechatPublicTag" | "wechatQrCode" | "wechatTemplate" | "wechatUser" | string;
entityId: String<64>;
modi: Modi.Schema;
user?: User.Schema;
userEntityGrant?: UserEntityGrant.Schema;

View File

@ -1,8 +1 @@
{
"name": "更新对象连接",
"attr": {
"modi": "更新",
"entity": "关联对象",
"entityId": "关联对象id"
}
}
{ "name": "更新对象连接", "attr": { "modi": "更新", "entity": "关联对象", "entityId": "关联对象id" } }

View File

@ -18,7 +18,15 @@ export type OpSchema = EntityShape & {
iState?: IState | null;
};
export type OpAttr = keyof OpSchema;
export type Schema = OpSchema & {
export type Schema = EntityShape & {
channel: Channel;
applicationId?: ForeignKey<"application"> | null;
data?: Object | null;
messageSystemId: ForeignKey<"messageSystem">;
data1?: Object | null;
data2?: Object | null;
templateId?: String<128> | null;
iState?: IState | null;
application?: Application.Schema | null;
messageSystem: MessageSystem.Schema;
} & {

View File

@ -1,32 +1 @@
{
"name": "通知",
"attr": {
"channel": "消息渠道",
"data": "消息数据",
"messageSystem": "消息系统连接",
"data1": "数据1",
"data2": "数据2",
"iState": "状态",
"application": "关联应用",
"templateId": "模板id"
},
"action": {
"succeed": "成功",
"fail": "失败"
},
"v": {
"iState": {
"sending": "发送中",
"success": "发送成功",
"failure": "发送失败"
},
"channel": {
"wechatPublic": "公众号",
"jPush": "极光推送",
"jim": "极光消息",
"wechatMp": "小程序",
"sms": "短信",
"email": "邮箱"
}
}
}
{ "name": "通知", "attr": { "channel": "消息渠道", "data": "消息数据", "messageSystem": "消息系统连接", "data1": "数据1", "data2": "数据2", "iState": "状态", "application": "关联应用", "templateId": "模板id" }, "action": { "succeed": "成功", "fail": "失败" }, "v": { "iState": { "sending": "发送中", "success": "发送成功", "failure": "发送失败" }, "channel": { "wechatPublic": "公众号", "jPush": "极光推送", "jim": "极光消息", "wechatMp": "小程序", "sms": "短信", "email": "邮箱" } } }

View File

@ -20,15 +20,23 @@ export type OpSchema = EntityShape & {
iState?: IState | null;
};
export type OpAttr = keyof OpSchema;
type OperEntity$operAggr = "operEntity$oper$$aggr" | "operEntity$oper$$0$$aggr" | "operEntity$oper$$1$$aggr" | "operEntity$oper$$2$$aggr" | "operEntity$oper$$3$$aggr" | "operEntity$oper$$4$$aggr" | "operEntity$oper$$5$$aggr" | "operEntity$oper$$6$$aggr" | "operEntity$oper$$7$$aggr" | "operEntity$oper$$8$$aggr" | "operEntity$oper$$9$$aggr";
export type Schema = OpSchema & {
export type Schema = EntityShape & {
action: String<24>;
data: Object;
filter?: Object | null;
extra?: Object | null;
operatorId?: ForeignKey<"user"> | null;
targetEntity: String<32>;
bornAt?: Datetime | null;
logId?: ForeignKey<"log"> | null;
undoData?: Object | null;
iState?: IState | null;
operator?: User.Schema | null;
log?: Log.Schema | null;
operEntity$oper?: Array<OperEntity.Schema>;
operEntity$oper$$aggr?: AggregationResult<OperEntity.Schema>;
} & {
[A in ExpressionKey]?: any;
} & {
[A in OperEntity$operAggr]?: AggregationResult<OperEntity.Schema>;
};
type AttrFilter = {
id: Q_StringValue;
@ -72,11 +80,10 @@ export type Projection = {
operEntity$oper?: OperEntity.Selection & {
$entity: "operEntity";
};
} & Partial<ExprOp<OpAttr | string>> & {
[A in OperEntity$operAggr]?: OperEntity.Aggregation & {
operEntity$oper$$aggr?: OperEntity.Aggregation & {
$entity: "operEntity";
};
};
} & Partial<ExprOp<OpAttr | string>>;
type OperIdProjection = OneOf<{
id: number;
}>;

View File

@ -1,25 +1 @@
{
"name": "操作",
"attr": {
"action": "动作",
"data": "数据",
"filter": "选择条件",
"extra": "其它",
"operator": "操作者",
"targetEntity": "关联对象",
"bornAt": "诞生时间",
"log": "关联日志",
"undoData": "回滚数据",
"iState": "状态"
},
"action": {
"undo": "回滚",
"redo": "重做"
},
"v": {
"iState": {
"normal": "正常的",
"rollbacked": "已回滚"
}
}
}
{ "name": "操作", "attr": { "action": "动作", "data": "数据", "filter": "选择条件", "extra": "其它", "operator": "操作者", "targetEntity": "关联对象", "bornAt": "诞生时间", "log": "关联日志", "undoData": "回滚数据", "iState": "状态" }, "action": { "undo": "回滚", "redo": "重做" }, "v": { "iState": { "normal": "正常的", "rollbacked": "已回滚" } } }

View File

@ -23,7 +23,10 @@ export type OpSchema = EntityShape & {
entityId: String<64>;
};
export type OpAttr = keyof OpSchema;
export type Schema = OpSchema & {
export type Schema = EntityShape & {
operId: ForeignKey<"oper">;
entity: "user" | "userEntityGrant" | "userSystem" | "userWechatPublicTag" | "wechatLogin" | "wechatMenu" | "wechatMpJump" | "wechatPublicAutoReply" | "wechatPublicTag" | "wechatQrCode" | "wechatTemplate" | "wechatUser" | string;
entityId: String<64>;
oper: Oper.Schema;
user?: User.Schema;
userEntityGrant?: UserEntityGrant.Schema;

View File

@ -1,8 +1 @@
{
"name": "操作对象连接",
"attr": {
"oper": "操作",
"entity": "关联对象",
"entityId": "关联对象id"
}
}
{ "name": "操作对象连接", "attr": { "oper": "操作", "entity": "关联对象", "entityId": "关联对象id" } }

View File

@ -23,14 +23,21 @@ export type OpSchema = EntityShape & {
tokenLifeLength?: Int<4> | null;
};
export type OpAttr = keyof OpSchema;
type Token$entityAggr = "token$entity$$aggr" | "token$entity$$0$$aggr" | "token$entity$$1$$aggr" | "token$entity$$2$$aggr" | "token$entity$$3$$aggr" | "token$entity$$4$$aggr" | "token$entity$$5$$aggr" | "token$entity$$6$$aggr" | "token$entity$$7$$aggr" | "token$entity$$8$$aggr" | "token$entity$$9$$aggr";
export type Schema = OpSchema & {
export type Schema = EntityShape & {
userId: ForeignKey<"user">;
entity: String<32>;
entityId: String<64>;
showTip?: Boolean | null;
expiresAt: Datetime;
expired: Boolean;
redirectTo: RedirectTo;
multiple?: Boolean | null;
tokenLifeLength?: Int<4> | null;
user: User.Schema;
token$entity?: Array<Token.Schema>;
token$entity$$aggr?: AggregationResult<Token.Schema>;
} & {
[A in ExpressionKey]?: any;
} & {
[A in Token$entityAggr]?: AggregationResult<Token.Schema>;
};
type AttrFilter = {
id: Q_StringValue;
@ -70,11 +77,10 @@ export type Projection = {
token$entity?: Token.Selection & {
$entity: "token";
};
} & Partial<ExprOp<OpAttr | string>> & {
[A in Token$entityAggr]?: Token.Aggregation & {
token$entity$$aggr?: Token.Aggregation & {
$entity: "token";
};
};
} & Partial<ExprOp<OpAttr | string>>;
type ParasiteIdProjection = OneOf<{
id: number;
}>;

View File

@ -1,20 +1 @@
{
"name": "寄生",
"attr": {
"user": "用户",
"showTip": "提示",
"expired": "已过期",
"expiresAt": "过期时间",
"redirectTo": "重定向页面",
"multiple": "允许反复使用",
"tokens": "令牌",
"entity": "关联对象",
"entityId": "关联对象Id",
"tokenLifeLength": "令牌生命长度"
},
"action": {
"wakeup": "激活",
"cancel": "作废",
"qrcode": "采集码"
}
}
{ "name": "寄生", "attr": { "user": "用户", "showTip": "提示", "expired": "已过期", "expiresAt": "过期时间", "redirectTo": "重定向页面", "multiple": "允许反复使用", "tokens": "令牌", "entity": "关联对象", "entityId": "关联对象Id", "tokenLifeLength": "令牌生命长度" }, "action": { "wakeup": "激活", "cancel": "作废", "qrcode": "采集码" } }

View File

@ -36,14 +36,16 @@ export type OpSchema = EntityShape & {
enabled: Boolean;
};
export type OpAttr = keyof OpSchema;
type ApplicationPassport$passportAggr = "applicationPassport$passport$$aggr" | "applicationPassport$passport$$0$$aggr" | "applicationPassport$passport$$1$$aggr" | "applicationPassport$passport$$2$$aggr" | "applicationPassport$passport$$3$$aggr" | "applicationPassport$passport$$4$$aggr" | "applicationPassport$passport$$5$$aggr" | "applicationPassport$passport$$6$$aggr" | "applicationPassport$passport$$7$$aggr" | "applicationPassport$passport$$8$$aggr" | "applicationPassport$passport$$9$$aggr";
export type Schema = OpSchema & {
export type Schema = EntityShape & {
systemId: ForeignKey<"system">;
type: Type;
config?: (SmsConfig | EmailConfig | PfwConfig | MfwConfig) | null;
enabled: Boolean;
system: System.Schema;
applicationPassport$passport?: Array<ApplicationPassport.Schema>;
applicationPassport$passport$$aggr?: AggregationResult<ApplicationPassport.Schema>;
} & {
[A in ExpressionKey]?: any;
} & {
[A in ApplicationPassport$passportAggr]?: AggregationResult<ApplicationPassport.Schema>;
};
type AttrFilter = {
id: Q_StringValue;
@ -73,11 +75,10 @@ export type Projection = {
applicationPassport$passport?: ApplicationPassport.Selection & {
$entity: "applicationPassport";
};
} & Partial<ExprOp<OpAttr | string>> & {
[A in ApplicationPassport$passportAggr]?: ApplicationPassport.Aggregation & {
applicationPassport$passport$$aggr?: ApplicationPassport.Aggregation & {
$entity: "applicationPassport";
};
};
} & Partial<ExprOp<OpAttr | string>>;
type PassportIdProjection = OneOf<{
id: number;
}>;

View File

@ -1,21 +1 @@
{
"name": "登录方式",
"attr": {
"system": "系统",
"type": "登录方式",
"config": "登录方式配置",
"enabled": "是否启用"
},
"v": {
"type": {
"email": "邮箱",
"sms": "短信",
"password": "密码",
"wechatMp": "小程序",
"wechatPublic": "公众号",
"wechatWeb": "微信网站",
"wechatMpForWeb": "小程序授权网页",
"wechatPublicForWeb": "公众号授权网页"
}
}
}
{ "name": "登录方式", "attr": { "system": "系统", "type": "登录方式", "config": "登录方式配置", "enabled": "是否启用" }, "v": { "type": { "email": "邮箱", "sms": "短信", "password": "密码", "wechatMp": "小程序", "wechatPublic": "公众号", "wechatWeb": "微信网站", "wechatMpForWeb": "小程序授权网页", "wechatPublicForWeb": "公众号授权网页" } } }

View File

@ -13,17 +13,18 @@ export type OpSchema = EntityShape & {
desc?: String<256> | null;
};
export type OpAttr = keyof OpSchema;
type ActionAuth$pathAggr = "actionAuth$path$$aggr" | "actionAuth$path$$0$$aggr" | "actionAuth$path$$1$$aggr" | "actionAuth$path$$2$$aggr" | "actionAuth$path$$3$$aggr" | "actionAuth$path$$4$$aggr" | "actionAuth$path$$5$$aggr" | "actionAuth$path$$6$$aggr" | "actionAuth$path$$7$$aggr" | "actionAuth$path$$8$$aggr" | "actionAuth$path$$9$$aggr";
type RelationAuth$pathAggr = "relationAuth$path$$aggr" | "relationAuth$path$$0$$aggr" | "relationAuth$path$$1$$aggr" | "relationAuth$path$$2$$aggr" | "relationAuth$path$$3$$aggr" | "relationAuth$path$$4$$aggr" | "relationAuth$path$$5$$aggr" | "relationAuth$path$$6$$aggr" | "relationAuth$path$$7$$aggr" | "relationAuth$path$$8$$aggr" | "relationAuth$path$$9$$aggr";
export type Schema = OpSchema & {
export type Schema = EntityShape & {
destEntity: String<32>;
value: String<256>;
recursive: Boolean;
sourceEntity: String<32>;
desc?: String<256> | null;
actionAuth$path?: Array<ActionAuth.Schema>;
actionAuth$path$$aggr?: AggregationResult<ActionAuth.Schema>;
relationAuth$path?: Array<RelationAuth.Schema>;
relationAuth$path$$aggr?: AggregationResult<RelationAuth.Schema>;
} & {
[A in ExpressionKey]?: any;
} & {
[A in ActionAuth$pathAggr]?: AggregationResult<ActionAuth.Schema>;
} & {
[A in RelationAuth$pathAggr]?: AggregationResult<RelationAuth.Schema>;
};
type AttrFilter = {
id: Q_StringValue;
@ -54,18 +55,16 @@ export type Projection = {
actionAuth$path?: ActionAuth.Selection & {
$entity: "actionAuth";
};
actionAuth$path$$aggr?: ActionAuth.Aggregation & {
$entity: "actionAuth";
};
relationAuth$path?: RelationAuth.Selection & {
$entity: "relationAuth";
};
} & Partial<ExprOp<OpAttr | string>> & {
[A in ActionAuth$pathAggr]?: ActionAuth.Aggregation & {
$entity: "actionAuth";
};
} & {
[A in RelationAuth$pathAggr]?: RelationAuth.Aggregation & {
relationAuth$path$$aggr?: RelationAuth.Aggregation & {
$entity: "relationAuth";
};
};
} & Partial<ExprOp<OpAttr | string>>;
type PathIdProjection = OneOf<{
id: number;
}>;

View File

@ -1,10 +1 @@
{
"name": "关系路径",
"attr": {
"sourceEntity": "源对象",
"value": "路径",
"destEntity": "目标对象",
"recursive": "是否递归",
"desc": "描述"
}
}
{ "name": "关系路径", "attr": { "sourceEntity": "源对象", "value": "路径", "destEntity": "目标对象", "recursive": "是否递归", "desc": "描述" } }

View File

@ -17,17 +17,19 @@ export type OpSchema = EntityShape & {
entityId?: String<64> | null;
};
export type OpAttr = keyof OpSchema;
type Message$platformAggr = "message$platform$$aggr" | "message$platform$$0$$aggr" | "message$platform$$1$$aggr" | "message$platform$$2$$aggr" | "message$platform$$3$$aggr" | "message$platform$$4$$aggr" | "message$platform$$5$$aggr" | "message$platform$$6$$aggr" | "message$platform$$7$$aggr" | "message$platform$$8$$aggr" | "message$platform$$9$$aggr";
type System$platformAggr = "system$platform$$aggr" | "system$platform$$0$$aggr" | "system$platform$$1$$aggr" | "system$platform$$2$$aggr" | "system$platform$$3$$aggr" | "system$platform$$4$$aggr" | "system$platform$$5$$aggr" | "system$platform$$6$$aggr" | "system$platform$$7$$aggr" | "system$platform$$8$$aggr" | "system$platform$$9$$aggr";
export type Schema = OpSchema & {
export type Schema = EntityShape & {
name: String<32>;
description?: Text | null;
config: Config;
style?: Style | null;
entity?: String<32> | null;
entityId?: String<64> | null;
message$platform?: Array<Message.Schema>;
message$platform$$aggr?: AggregationResult<Message.Schema>;
system$platform?: Array<System.Schema>;
system$platform$$aggr?: AggregationResult<System.Schema>;
} & {
[A in ExpressionKey]?: any;
} & {
[A in Message$platformAggr]?: AggregationResult<Message.Schema>;
} & {
[A in System$platformAggr]?: AggregationResult<System.Schema>;
};
type AttrFilter = {
id: Q_StringValue;
@ -60,18 +62,16 @@ export type Projection = {
message$platform?: Message.Selection & {
$entity: "message";
};
message$platform$$aggr?: Message.Aggregation & {
$entity: "message";
};
system$platform?: System.Selection & {
$entity: "system";
};
} & Partial<ExprOp<OpAttr | string>> & {
[A in Message$platformAggr]?: Message.Aggregation & {
$entity: "message";
};
} & {
[A in System$platformAggr]?: System.Aggregation & {
system$platform$$aggr?: System.Aggregation & {
$entity: "system";
};
};
} & Partial<ExprOp<OpAttr | string>>;
type PlatformIdProjection = OneOf<{
id: number;
}>;

View File

@ -1,11 +1 @@
{
"name": "平台",
"attr": {
"name": "名称",
"description": "描述",
"config": "设置",
"style": "样式",
"entity": "关联对象",
"entityId": "关联对象id"
}
}
{ "name": "平台", "attr": { "name": "名称", "description": "描述", "config": "设置", "style": "样式", "entity": "关联对象", "entityId": "关联对象id" } }

View File

@ -10,7 +10,9 @@ export type OpSchema = EntityShape & {
sessionId: ForeignKey<"session">;
};
export type OpAttr = keyof OpSchema;
export type Schema = OpSchema & {
export type Schema = EntityShape & {
userId: ForeignKey<"user">;
sessionId: ForeignKey<"session">;
user: User.Schema;
session: Session.Schema;
} & {

View File

@ -1,7 +1 @@
{
"name": "会话",
"attr": {
"user": "当前用户",
"session": "会话"
}
}
{ "name": "会话", "attr": { "user": "当前用户", "session": "会话" } }

View File

@ -17,31 +17,25 @@ export type OpSchema = EntityShape & {
display?: String<32> | null;
};
export type OpAttr = keyof OpSchema;
type ActionAuth$relationAggr = "actionAuth$relation$$aggr" | "actionAuth$relation$$0$$aggr" | "actionAuth$relation$$1$$aggr" | "actionAuth$relation$$2$$aggr" | "actionAuth$relation$$3$$aggr" | "actionAuth$relation$$4$$aggr" | "actionAuth$relation$$5$$aggr" | "actionAuth$relation$$6$$aggr" | "actionAuth$relation$$7$$aggr" | "actionAuth$relation$$8$$aggr" | "actionAuth$relation$$9$$aggr";
type RelationAuth$sourceRelationAggr = "relationAuth$sourceRelation$$aggr" | "relationAuth$sourceRelation$$0$$aggr" | "relationAuth$sourceRelation$$1$$aggr" | "relationAuth$sourceRelation$$2$$aggr" | "relationAuth$sourceRelation$$3$$aggr" | "relationAuth$sourceRelation$$4$$aggr" | "relationAuth$sourceRelation$$5$$aggr" | "relationAuth$sourceRelation$$6$$aggr" | "relationAuth$sourceRelation$$7$$aggr" | "relationAuth$sourceRelation$$8$$aggr" | "relationAuth$sourceRelation$$9$$aggr";
type RelationAuth$destRelationAggr = "relationAuth$destRelation$$aggr" | "relationAuth$destRelation$$0$$aggr" | "relationAuth$destRelation$$1$$aggr" | "relationAuth$destRelation$$2$$aggr" | "relationAuth$destRelation$$3$$aggr" | "relationAuth$destRelation$$4$$aggr" | "relationAuth$destRelation$$5$$aggr" | "relationAuth$destRelation$$6$$aggr" | "relationAuth$destRelation$$7$$aggr" | "relationAuth$destRelation$$8$$aggr" | "relationAuth$destRelation$$9$$aggr";
type UserEntityClaim$relationAggr = "userEntityClaim$relation$$aggr" | "userEntityClaim$relation$$0$$aggr" | "userEntityClaim$relation$$1$$aggr" | "userEntityClaim$relation$$2$$aggr" | "userEntityClaim$relation$$3$$aggr" | "userEntityClaim$relation$$4$$aggr" | "userEntityClaim$relation$$5$$aggr" | "userEntityClaim$relation$$6$$aggr" | "userEntityClaim$relation$$7$$aggr" | "userEntityClaim$relation$$8$$aggr" | "userEntityClaim$relation$$9$$aggr";
type UserRelation$relationAggr = "userRelation$relation$$aggr" | "userRelation$relation$$0$$aggr" | "userRelation$relation$$1$$aggr" | "userRelation$relation$$2$$aggr" | "userRelation$relation$$3$$aggr" | "userRelation$relation$$4$$aggr" | "userRelation$relation$$5$$aggr" | "userRelation$relation$$6$$aggr" | "userRelation$relation$$7$$aggr" | "userRelation$relation$$8$$aggr" | "userRelation$relation$$9$$aggr";
export type Schema = OpSchema & {
export type Schema = EntityShape & {
entity: "session" | "toDo" | string;
entityId?: String<64> | null;
name?: String<32> | null;
display?: String<32> | null;
session?: Session.Schema;
toDo?: ToDo.Schema;
actionAuth$relation?: Array<ActionAuth.Schema>;
actionAuth$relation$$aggr?: AggregationResult<ActionAuth.Schema>;
relationAuth$sourceRelation?: Array<RelationAuth.Schema>;
relationAuth$sourceRelation$$aggr?: AggregationResult<RelationAuth.Schema>;
relationAuth$destRelation?: Array<RelationAuth.Schema>;
relationAuth$destRelation$$aggr?: AggregationResult<RelationAuth.Schema>;
userEntityClaim$relation?: Array<UserEntityClaim.Schema>;
userEntityClaim$relation$$aggr?: AggregationResult<UserEntityClaim.Schema>;
userRelation$relation?: Array<UserRelation.Schema>;
userRelation$relation$$aggr?: AggregationResult<UserRelation.Schema>;
} & {
[A in ExpressionKey]?: any;
} & {
[A in ActionAuth$relationAggr]?: AggregationResult<ActionAuth.Schema>;
} & {
[A in RelationAuth$sourceRelationAggr]?: AggregationResult<RelationAuth.Schema>;
} & {
[A in RelationAuth$destRelationAggr]?: AggregationResult<RelationAuth.Schema>;
} & {
[A in UserEntityClaim$relationAggr]?: AggregationResult<UserEntityClaim.Schema>;
} & {
[A in UserRelation$relationAggr]?: AggregationResult<UserRelation.Schema>;
};
type AttrFilter = {
id: Q_StringValue;
@ -77,39 +71,34 @@ export type Projection = {
actionAuth$relation?: ActionAuth.Selection & {
$entity: "actionAuth";
};
actionAuth$relation$$aggr?: ActionAuth.Aggregation & {
$entity: "actionAuth";
};
relationAuth$sourceRelation?: RelationAuth.Selection & {
$entity: "relationAuth";
};
relationAuth$sourceRelation$$aggr?: RelationAuth.Aggregation & {
$entity: "relationAuth";
};
relationAuth$destRelation?: RelationAuth.Selection & {
$entity: "relationAuth";
};
relationAuth$destRelation$$aggr?: RelationAuth.Aggregation & {
$entity: "relationAuth";
};
userEntityClaim$relation?: UserEntityClaim.Selection & {
$entity: "userEntityClaim";
};
userEntityClaim$relation$$aggr?: UserEntityClaim.Aggregation & {
$entity: "userEntityClaim";
};
userRelation$relation?: UserRelation.Selection & {
$entity: "userRelation";
};
} & Partial<ExprOp<OpAttr | string>> & {
[A in ActionAuth$relationAggr]?: ActionAuth.Aggregation & {
$entity: "actionAuth";
};
} & {
[A in RelationAuth$sourceRelationAggr]?: RelationAuth.Aggregation & {
$entity: "relationAuth";
};
} & {
[A in RelationAuth$destRelationAggr]?: RelationAuth.Aggregation & {
$entity: "relationAuth";
};
} & {
[A in UserEntityClaim$relationAggr]?: UserEntityClaim.Aggregation & {
$entity: "userEntityClaim";
};
} & {
[A in UserRelation$relationAggr]?: UserRelation.Aggregation & {
userRelation$relation$$aggr?: UserRelation.Aggregation & {
$entity: "userRelation";
};
};
} & Partial<ExprOp<OpAttr | string>>;
type RelationIdProjection = OneOf<{
id: number;
}>;

View File

@ -1,9 +1 @@
{
"name": "用户授权",
"attr": {
"name": "关系",
"entity": "目标对象",
"entityId": "目标对象id",
"display": "显示值"
}
}
{ "name": "用户授权", "attr": { "name": "关系", "entity": "目标对象", "entityId": "目标对象id", "display": "显示值" } }

View File

@ -11,7 +11,10 @@ export type OpSchema = EntityShape & {
destRelationId: ForeignKey<"relation">;
};
export type OpAttr = keyof OpSchema;
export type Schema = OpSchema & {
export type Schema = EntityShape & {
sourceRelationId: ForeignKey<"relation">;
pathId: ForeignKey<"path">;
destRelationId: ForeignKey<"relation">;
sourceRelation: Relation.Schema;
path: Path.Schema;
destRelation: Relation.Schema;

View File

@ -1,8 +1 @@
{
"name": "用户授权",
"attr": {
"sourceRelation": "源关系",
"path": "路径",
"destRelation": "目标关系"
}
}
{ "name": "用户授权", "attr": { "sourceRelation": "源关系", "path": "路径", "destRelation": "目标关系" } }

View File

@ -18,27 +18,24 @@ export type OpSchema = EntityShape & {
openId?: String<32> | null;
};
export type OpAttr = keyof OpSchema;
type ReadRemark$sessionAggr = "readRemark$session$$aggr" | "readRemark$session$$0$$aggr" | "readRemark$session$$1$$aggr" | "readRemark$session$$2$$aggr" | "readRemark$session$$3$$aggr" | "readRemark$session$$4$$aggr" | "readRemark$session$$5$$aggr" | "readRemark$session$$6$$aggr" | "readRemark$session$$7$$aggr" | "readRemark$session$$8$$aggr" | "readRemark$session$$9$$aggr";
type SessionMessage$sessionAggr = "sessionMessage$session$$aggr" | "sessionMessage$session$$0$$aggr" | "sessionMessage$session$$1$$aggr" | "sessionMessage$session$$2$$aggr" | "sessionMessage$session$$3$$aggr" | "sessionMessage$session$$4$$aggr" | "sessionMessage$session$$5$$aggr" | "sessionMessage$session$$6$$aggr" | "sessionMessage$session$$7$$aggr" | "sessionMessage$session$$8$$aggr" | "sessionMessage$session$$9$$aggr";
type Relation$entityAggr = "relation$entity$$aggr" | "relation$entity$$0$$aggr" | "relation$entity$$1$$aggr" | "relation$entity$$2$$aggr" | "relation$entity$$3$$aggr" | "relation$entity$$4$$aggr" | "relation$entity$$5$$aggr" | "relation$entity$$6$$aggr" | "relation$entity$$7$$aggr" | "relation$entity$$8$$aggr" | "relation$entity$$9$$aggr";
type UserRelation$entityAggr = "userRelation$entity$$aggr" | "userRelation$entity$$0$$aggr" | "userRelation$entity$$1$$aggr" | "userRelation$entity$$2$$aggr" | "userRelation$entity$$3$$aggr" | "userRelation$entity$$4$$aggr" | "userRelation$entity$$5$$aggr" | "userRelation$entity$$6$$aggr" | "userRelation$entity$$7$$aggr" | "userRelation$entity$$8$$aggr" | "userRelation$entity$$9$$aggr";
export type Schema = OpSchema & {
export type Schema = EntityShape & {
entity: "application" | string;
entityId: String<64>;
userId?: ForeignKey<"user"> | null;
lmts?: Datetime | null;
openId?: String<32> | null;
user?: User.Schema | null;
application?: Application.Schema;
readRemark$session?: Array<ReadRemark.Schema>;
readRemark$session$$aggr?: AggregationResult<ReadRemark.Schema>;
sessionMessage$session?: Array<SessionMessage.Schema>;
sessionMessage$session$$aggr?: AggregationResult<SessionMessage.Schema>;
relation$entity?: Array<Relation.Schema>;
relation$entity$$aggr?: AggregationResult<Relation.Schema>;
userRelation$entity?: Array<UserRelation.Schema>;
userRelation$entity$$aggr?: AggregationResult<UserRelation.Schema>;
} & {
[A in ExpressionKey]?: any;
} & {
[A in ReadRemark$sessionAggr]?: AggregationResult<ReadRemark.Schema>;
} & {
[A in SessionMessage$sessionAggr]?: AggregationResult<SessionMessage.Schema>;
} & {
[A in Relation$entityAggr]?: AggregationResult<Relation.Schema>;
} & {
[A in UserRelation$entityAggr]?: AggregationResult<UserRelation.Schema>;
};
type AttrFilter = {
id: Q_StringValue;
@ -75,32 +72,28 @@ export type Projection = {
readRemark$session?: ReadRemark.Selection & {
$entity: "readRemark";
};
readRemark$session$$aggr?: ReadRemark.Aggregation & {
$entity: "readRemark";
};
sessionMessage$session?: SessionMessage.Selection & {
$entity: "sessionMessage";
};
sessionMessage$session$$aggr?: SessionMessage.Aggregation & {
$entity: "sessionMessage";
};
relation$entity?: Relation.Selection & {
$entity: "relation";
};
relation$entity$$aggr?: Relation.Aggregation & {
$entity: "relation";
};
userRelation$entity?: UserRelation.Selection & {
$entity: "userRelation";
};
} & Partial<ExprOp<OpAttr | string>> & {
[A in ReadRemark$sessionAggr]?: ReadRemark.Aggregation & {
$entity: "readRemark";
};
} & {
[A in SessionMessage$sessionAggr]?: SessionMessage.Aggregation & {
$entity: "sessionMessage";
};
} & {
[A in Relation$entityAggr]?: Relation.Aggregation & {
$entity: "relation";
};
} & {
[A in UserRelation$entityAggr]?: UserRelation.Aggregation & {
userRelation$entity$$aggr?: UserRelation.Aggregation & {
$entity: "userRelation";
};
};
} & Partial<ExprOp<OpAttr | string>>;
type SessionIdProjection = OneOf<{
id: number;
}>;

Some files were not shown because too many files have changed in this diff Show More