134 lines
4.1 KiB
JavaScript
134 lines
4.1 KiB
JavaScript
import { generateNewIdAsync } from "oak-domain/lib/utils/uuid";
|
|
export default OakComponent({
|
|
entity: 'articleMenu',
|
|
isList: false,
|
|
projection: {
|
|
id: 1,
|
|
name: 1,
|
|
entity: 1,
|
|
entityId: 1,
|
|
parentId: 1,
|
|
isArticle: 1,
|
|
extraFile$entity: {
|
|
$entity: 'extraFile',
|
|
data: {
|
|
id: 1,
|
|
tag1: 1,
|
|
origin: 1,
|
|
bucket: 1,
|
|
objectId: 1,
|
|
filename: 1,
|
|
extra1: 1,
|
|
extension: 1,
|
|
type: 1,
|
|
entity: 1,
|
|
},
|
|
filter: {
|
|
tag1: {
|
|
$in: ['logo'],
|
|
},
|
|
},
|
|
},
|
|
articleMenu$parent: {
|
|
$entity: 'articleMenu',
|
|
data: {
|
|
id: 1,
|
|
},
|
|
},
|
|
article$articleMenu: {
|
|
$entity: 'article',
|
|
data: {
|
|
id: 1,
|
|
name: 1,
|
|
},
|
|
},
|
|
},
|
|
properties: {
|
|
onRemove: () => undefined,
|
|
onUpdateName: async (name) => undefined,
|
|
onChildEditArticleChange: (data) => undefined,
|
|
show: 'edit',
|
|
getBreadcrumbItemsByParent: (breadcrumbItems) => undefined,
|
|
breadItems: [],
|
|
drawerOpen: false,
|
|
changeDrawerOpen: (open) => undefined,
|
|
selectedArticleId: '',
|
|
openArray: [],
|
|
getTopInfo: (data) => undefined,
|
|
articleId: '',
|
|
articleMenuId: '',
|
|
getSideInfo: (data) => undefined,
|
|
currentArticle: '',
|
|
setCurrentArticle: (id) => undefined,
|
|
onMenuViewById: (articleMenuId) => undefined,
|
|
setCopyArticleUrl: (id) => '',
|
|
origin: 'qiniu', // cos origin默认七牛云
|
|
},
|
|
formData({ data: row }) {
|
|
const { articleMenu$parent, article$articleMenu } = row || {};
|
|
const allowCreateSubMenu = article$articleMenu && article$articleMenu.length === 0; //目录下无文章则允许创建子目录
|
|
const allowCreateSubArticle = articleMenu$parent && articleMenu$parent.length === 0; //目录下无子目录则允许创建文章
|
|
const allowRemove = allowCreateSubMenu && allowCreateSubArticle; //目录下无子目录且无文章则允许删除
|
|
const logoExtraFile = row?.extraFile$entity?.find((ele) => ele.tag1 === 'logo');
|
|
const logo = this.features.extraFile.getUrl(logoExtraFile);
|
|
return {
|
|
row,
|
|
allowCreateSubMenu,
|
|
allowCreateSubArticle,
|
|
allowRemove,
|
|
logo,
|
|
article$articleMenu,
|
|
};
|
|
},
|
|
data: {
|
|
editArticleId: '',
|
|
},
|
|
methods: {
|
|
async createSubArticle(name) {
|
|
const id = await generateNewIdAsync();
|
|
this.setState({
|
|
editArticleId: '',
|
|
});
|
|
this.update({
|
|
article$articleMenu: [{
|
|
id,
|
|
action: 'create',
|
|
data: {
|
|
id,
|
|
name,
|
|
content: '',
|
|
}
|
|
}]
|
|
});
|
|
await this.execute();
|
|
this.setState({
|
|
editArticleId: id
|
|
});
|
|
},
|
|
async createSubArticleMenu(name) {
|
|
const { row } = this.state;
|
|
this.update({
|
|
articleMenu$parent: [
|
|
{
|
|
id: await generateNewIdAsync(),
|
|
action: 'create',
|
|
data: {
|
|
id: await generateNewIdAsync(),
|
|
name,
|
|
entity: row.entity,
|
|
entityId: row.entityId,
|
|
isArticle: false,
|
|
isLeaf: false,
|
|
},
|
|
}
|
|
]
|
|
});
|
|
await this.execute();
|
|
},
|
|
gotoDoc(articleMenuId) {
|
|
const { onMenuViewById } = this.props;
|
|
onMenuViewById && onMenuViewById(articleMenuId);
|
|
}
|
|
}
|
|
});
|