feat: support add collection to collectionManager
This commit is contained in:
parent
8ccfdf5828
commit
cc09966d63
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,180 @@
|
||||
import { defineCollection } from '@nocobase/database';
|
||||
|
||||
export default defineCollection({
|
||||
dumpRules: 'required',
|
||||
name: 'undetermined_projects',
|
||||
title: '测算项目',
|
||||
inherit: false,
|
||||
hidden: false,
|
||||
description: null,
|
||||
fields: [
|
||||
{
|
||||
name: 'parentId',
|
||||
type: 'bigInt',
|
||||
interface: 'integer',
|
||||
description: null,
|
||||
parentKey: null,
|
||||
reverseKey: null,
|
||||
isForeignKey: true,
|
||||
uiSchema: {
|
||||
type: 'number',
|
||||
title: '{{t("Parent ID")}}',
|
||||
'x-component': 'InputNumber',
|
||||
'x-read-pretty': true,
|
||||
},
|
||||
target: 'undetermined_projects',
|
||||
},
|
||||
{
|
||||
name: 'parent',
|
||||
type: 'belongsTo',
|
||||
interface: 'm2o',
|
||||
description: null,
|
||||
parentKey: null,
|
||||
reverseKey: null,
|
||||
foreignKey: 'parentId',
|
||||
treeParent: true,
|
||||
onDelete: 'CASCADE',
|
||||
uiSchema: {
|
||||
title: '{{t("Parent")}}',
|
||||
'x-component': 'AssociationField',
|
||||
'x-component-props': {
|
||||
multiple: false,
|
||||
fieldNames: {
|
||||
label: 'id',
|
||||
value: 'id',
|
||||
},
|
||||
},
|
||||
},
|
||||
target: 'undetermined_projects',
|
||||
targetKey: 'id',
|
||||
},
|
||||
{
|
||||
name: 'children',
|
||||
type: 'hasMany',
|
||||
interface: 'o2m',
|
||||
description: null,
|
||||
parentKey: null,
|
||||
reverseKey: null,
|
||||
foreignKey: 'parentId',
|
||||
treeChildren: true,
|
||||
onDelete: 'CASCADE',
|
||||
uiSchema: {
|
||||
title: '{{t("Children")}}',
|
||||
'x-component': 'AssociationField',
|
||||
'x-component-props': {
|
||||
multiple: true,
|
||||
fieldNames: {
|
||||
label: 'id',
|
||||
value: 'id',
|
||||
},
|
||||
},
|
||||
},
|
||||
target: 'undetermined_projects',
|
||||
targetKey: 'id',
|
||||
sourceKey: 'id',
|
||||
},
|
||||
{
|
||||
name: 'id',
|
||||
type: 'bigInt',
|
||||
interface: 'integer',
|
||||
description: null,
|
||||
parentKey: null,
|
||||
reverseKey: null,
|
||||
autoIncrement: true,
|
||||
primaryKey: true,
|
||||
allowNull: false,
|
||||
uiSchema: {
|
||||
type: 'number',
|
||||
title: '{{t("ID")}}',
|
||||
'x-component': 'InputNumber',
|
||||
'x-read-pretty': true,
|
||||
},
|
||||
target: 'undetermined_projects',
|
||||
},
|
||||
{
|
||||
name: 'createdAt',
|
||||
type: 'date',
|
||||
interface: 'createdAt',
|
||||
description: null,
|
||||
parentKey: null,
|
||||
reverseKey: null,
|
||||
field: 'createdAt',
|
||||
uiSchema: {
|
||||
type: 'datetime',
|
||||
title: '{{t("Created at")}}',
|
||||
'x-component': 'DatePicker',
|
||||
'x-component-props': {},
|
||||
'x-read-pretty': true,
|
||||
},
|
||||
target: 'undetermined_projects',
|
||||
},
|
||||
{
|
||||
name: 'createdBy',
|
||||
type: 'belongsTo',
|
||||
interface: 'createdBy',
|
||||
description: null,
|
||||
parentKey: null,
|
||||
reverseKey: null,
|
||||
target: 'users',
|
||||
foreignKey: 'createdById',
|
||||
uiSchema: {
|
||||
type: 'object',
|
||||
title: '{{t("Created by")}}',
|
||||
'x-component': 'AssociationField',
|
||||
'x-component-props': {
|
||||
fieldNames: {
|
||||
value: 'id',
|
||||
label: 'nickname',
|
||||
},
|
||||
},
|
||||
'x-read-pretty': true,
|
||||
},
|
||||
targetKey: 'id',
|
||||
},
|
||||
{
|
||||
name: 'updatedAt',
|
||||
type: 'date',
|
||||
interface: 'updatedAt',
|
||||
description: null,
|
||||
parentKey: null,
|
||||
reverseKey: null,
|
||||
field: 'updatedAt',
|
||||
uiSchema: {
|
||||
type: 'string',
|
||||
title: '{{t("Last updated at")}}',
|
||||
'x-component': 'DatePicker',
|
||||
'x-component-props': {},
|
||||
'x-read-pretty': true,
|
||||
},
|
||||
target: 'undetermined_projects',
|
||||
},
|
||||
{
|
||||
name: 'updatedBy',
|
||||
type: 'belongsTo',
|
||||
interface: 'updatedBy',
|
||||
description: null,
|
||||
parentKey: null,
|
||||
reverseKey: null,
|
||||
target: 'users',
|
||||
foreignKey: 'updatedById',
|
||||
uiSchema: {
|
||||
type: 'object',
|
||||
title: '{{t("Last updated by")}}',
|
||||
'x-component': 'AssociationField',
|
||||
'x-component-props': {
|
||||
fieldNames: {
|
||||
value: 'id',
|
||||
label: 'nickname',
|
||||
},
|
||||
},
|
||||
'x-read-pretty': true,
|
||||
},
|
||||
targetKey: 'id',
|
||||
},
|
||||
],
|
||||
template: 'tree',
|
||||
view: false,
|
||||
tree: 'adjacencyList',
|
||||
schema: 'public',
|
||||
filterTargetKey: 'id',
|
||||
});
|
@ -8,6 +8,8 @@ import { Container } from '@nocobase/utils';
|
||||
import './actions';
|
||||
import { SqlLoader } from '@hera/plugin-core';
|
||||
import { DetailCheckService } from './services/detail-check-service';
|
||||
import { CollectionRepository } from '@nocobase/plugin-collection-manager';
|
||||
import { Repository } from '@nocobase/database';
|
||||
export class PluginRentalServer extends Plugin {
|
||||
async afterAdd() {}
|
||||
|
||||
@ -23,6 +25,39 @@ export class PluginRentalServer extends Plugin {
|
||||
Container.get(ContractService).load();
|
||||
}
|
||||
|
||||
async syncCollections(collectionName: string, categoryNames: string[]) {
|
||||
const repo = this.db.getRepository<CollectionRepository>('collections');
|
||||
await repo.db2cm(collectionName);
|
||||
const categoriesRepo = this.db.getRepository<Repository>('collectionCategories');
|
||||
const categories = await Promise.all(
|
||||
categoryNames.map(async (name) => {
|
||||
return await categoriesRepo.findOne({
|
||||
filter: {
|
||||
name,
|
||||
},
|
||||
});
|
||||
}),
|
||||
);
|
||||
const collectionRepo = this.db.getRepository<Repository>('collectionCategory');
|
||||
// 删除之前建立的所有分类
|
||||
await collectionRepo.destroy({
|
||||
filter: {
|
||||
collectionName,
|
||||
},
|
||||
});
|
||||
|
||||
await collectionRepo.createMany({
|
||||
records: categories
|
||||
.filter((item) => typeof item.id !== 'undefined')
|
||||
.map((item) => ({ collectionName, categoryId: item.id })),
|
||||
});
|
||||
}
|
||||
|
||||
async upgrade() {
|
||||
await this.syncCollections('transfer_orders', ['测算相关']);
|
||||
await this.syncCollections('undetermined_projects', ['测算相关']);
|
||||
}
|
||||
|
||||
async install() {}
|
||||
|
||||
async afterEnable() {}
|
||||
|
Loading…
Reference in New Issue
Block a user