tachybase_todo/packages/plugins/china-region/src/server.ts
2022-04-22 13:23:50 +08:00

73 lines
1.7 KiB
TypeScript

import { Plugin } from '@nocobase/server';
import { areas, cities, provinces } from 'china-division';
import { resolve } from 'path';
export class ChinaRegionPlugin extends Plugin {
async install() {
await this.importData();
}
async load() {
await this.db.import({
directory: resolve(__dirname, 'collections'),
});
this.app.acl.skip('chinaRegions', 'list', 'logged-in');
}
async importData() {
const timer = Date.now();
const ChinaRegion = this.db.getModel('chinaRegions');
await ChinaRegion.bulkCreate(
provinces.map((item) => ({
code: item.code,
name: item.name,
level: 1,
})),
);
await ChinaRegion.bulkCreate(
cities.map((item) => ({
code: item.code,
name: item.name,
level: 2,
parentCode: item.provinceCode,
})),
);
await ChinaRegion.bulkCreate(
areas.map((item) => ({
code: item.code,
name: item.name,
level: 3,
parentCode: item.cityCode,
})),
);
// // 乡级数据 2856 条
// await ChinaRegion.bulkCreate(streets.map(item => ({
// code: item.code,
// name: item.name,
// level: 4,
// parentCode: item.areaCode
// })));
// // 村级数据 658001 条
// await ChinaRegion.bulkCreate(villages.map(item => ({
// code: item.code,
// name: item.name,
// level: 5,
// parentCode: item.streetCode
// })));
const count = await ChinaRegion.count();
console.log(`${count} rows of region data imported in ${(Date.now() - timer) / 1000}s`);
}
getName(): string {
return this.getPackageName(__dirname);
}
}
export default ChinaRegionPlugin;