mirror of
https://gitee.com/nocobase/nocobase.git
synced 2024-12-03 20:58:01 +08:00
feat(plugin-china-region): improve code
This commit is contained in:
parent
785077a6f3
commit
51ca12cc87
@ -64,6 +64,7 @@ const plugins = [
|
|||||||
'@nocobase/plugin-system-settings',
|
'@nocobase/plugin-system-settings',
|
||||||
'@nocobase/plugin-users',
|
'@nocobase/plugin-users',
|
||||||
'@nocobase/plugin-acl',
|
'@nocobase/plugin-acl',
|
||||||
|
'@nocobase/plugin-china-region',
|
||||||
];
|
];
|
||||||
|
|
||||||
for (const plugin of plugins) {
|
for (const plugin of plugins) {
|
||||||
@ -78,5 +79,5 @@ if (process.argv.length < 3) {
|
|||||||
console.log(process.argv);
|
console.log(process.argv);
|
||||||
|
|
||||||
api.parse(process.argv).then(() => {
|
api.parse(process.argv).then(() => {
|
||||||
console.log(`Start-up time: ${(Date.now() - start) / 1000}s`);
|
console.log(`${new Date().toLocaleTimeString()} Start-up time: ${(Date.now() - start) / 1000}s`);
|
||||||
});
|
});
|
||||||
|
@ -138,6 +138,10 @@ export class Database extends EventEmitter implements AsyncEmitter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getModel<M extends Model>(name: string) {
|
||||||
|
return this.getCollection(name).model as ModelCtor<M>;
|
||||||
|
}
|
||||||
|
|
||||||
getRepository<R extends Repository>(name: string): R;
|
getRepository<R extends Repository>(name: string): R;
|
||||||
getRepository<R extends RelationRepository>(name: string, relationId: string | number): R;
|
getRepository<R extends RelationRepository>(name: string, relationId: string | number): R;
|
||||||
|
|
||||||
|
@ -1,14 +1,16 @@
|
|||||||
import { CollectionOptions } from '@nocobase/database';
|
import { defineCollection } from '@nocobase/database';
|
||||||
|
|
||||||
export default {
|
export default defineCollection({
|
||||||
name: 'china_regions',
|
name: 'chinaRegions',
|
||||||
title: '中国行政区划',
|
title: '中国行政区划',
|
||||||
|
autoGenId: false,
|
||||||
fields: [
|
fields: [
|
||||||
// 如使用代码作为 id 可能更节省,但由于代码数字最长为 12 字节,除非使用 bigint(64) 才够放置
|
// 如使用代码作为 id 可能更节省,但由于代码数字最长为 12 字节,除非使用 bigint(64) 才够放置
|
||||||
{
|
{
|
||||||
name: 'code',
|
name: 'code',
|
||||||
type: 'string',
|
type: 'string',
|
||||||
unique: true,
|
// unique: true,
|
||||||
|
primaryKey: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'name',
|
name: 'name',
|
||||||
@ -17,20 +19,20 @@ export default {
|
|||||||
{
|
{
|
||||||
name: 'parent',
|
name: 'parent',
|
||||||
type: 'belongsTo',
|
type: 'belongsTo',
|
||||||
target: 'china_regions',
|
target: 'chinaRegions',
|
||||||
targetKey: 'code',
|
targetKey: 'code',
|
||||||
foreignKey: 'parent_code',
|
foreignKey: 'parentCode',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'children',
|
name: 'children',
|
||||||
type: 'hasMany',
|
type: 'hasMany',
|
||||||
target: 'china_regions',
|
target: 'chinaRegions',
|
||||||
sourceKey: 'code',
|
sourceKey: 'code',
|
||||||
foreignKey: 'parent_code',
|
foreignKey: 'parentCode',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'level',
|
name: 'level',
|
||||||
type: 'integer',
|
type: 'integer',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
} as CollectionOptions;
|
});
|
@ -1,11 +1,26 @@
|
|||||||
import path from 'path';
|
|
||||||
import { provinces, cities, areas, streets, villages } from 'china-division';
|
|
||||||
import { Plugin } from '@nocobase/server';
|
import { Plugin } from '@nocobase/server';
|
||||||
|
import { areas, cities, provinces } from 'china-division';
|
||||||
|
import { resolve } from 'path';
|
||||||
|
|
||||||
async function importData(model) {
|
export class ChinaRegionPlugin extends Plugin {
|
||||||
|
|
||||||
|
async beforeLoad() {
|
||||||
|
this.app.on('installing', async () => {
|
||||||
|
await this.importData();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async load() {
|
||||||
|
await this.db.import({
|
||||||
|
directory: resolve(__dirname, 'collections'),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async importData() {
|
||||||
const timer = Date.now();
|
const timer = Date.now();
|
||||||
|
const ChinaRegion = this.db.getModel('chinaRegions');
|
||||||
|
|
||||||
await model.bulkCreate(
|
await ChinaRegion.bulkCreate(
|
||||||
provinces.map((item) => ({
|
provinces.map((item) => ({
|
||||||
code: item.code,
|
code: item.code,
|
||||||
name: item.name,
|
name: item.name,
|
||||||
@ -13,55 +28,43 @@ async function importData(model) {
|
|||||||
})),
|
})),
|
||||||
);
|
);
|
||||||
|
|
||||||
await model.bulkCreate(
|
await ChinaRegion.bulkCreate(
|
||||||
cities.map((item) => ({
|
cities.map((item) => ({
|
||||||
code: item.code,
|
code: item.code,
|
||||||
name: item.name,
|
name: item.name,
|
||||||
level: 2,
|
level: 2,
|
||||||
parent_code: item.provinceCode,
|
parentCode: item.provinceCode,
|
||||||
})),
|
})),
|
||||||
);
|
);
|
||||||
|
|
||||||
await model.bulkCreate(
|
await ChinaRegion.bulkCreate(
|
||||||
areas.map((item) => ({
|
areas.map((item) => ({
|
||||||
code: item.code,
|
code: item.code,
|
||||||
name: item.name,
|
name: item.name,
|
||||||
level: 3,
|
level: 3,
|
||||||
parent_code: item.cityCode,
|
parentCode: item.cityCode,
|
||||||
})),
|
})),
|
||||||
);
|
);
|
||||||
|
|
||||||
// // 乡级数据 2856 条
|
// // 乡级数据 2856 条
|
||||||
// await model.bulkCreate(streets.map(item => ({
|
// await ChinaRegion.bulkCreate(streets.map(item => ({
|
||||||
// code: item.code,
|
// code: item.code,
|
||||||
// name: item.name,
|
// name: item.name,
|
||||||
// level: 4,
|
// level: 4,
|
||||||
// parent_code: item.areaCode
|
// parentCode: item.areaCode
|
||||||
// })));
|
// })));
|
||||||
|
|
||||||
// // 村级数据 658001 条
|
// // 村级数据 658001 条
|
||||||
// await model.bulkCreate(villages.map(item => ({
|
// await ChinaRegion.bulkCreate(villages.map(item => ({
|
||||||
// code: item.code,
|
// code: item.code,
|
||||||
// name: item.name,
|
// name: item.name,
|
||||||
// level: 5,
|
// level: 5,
|
||||||
// parent_code: item.streetCode
|
// parentCode: item.streetCode
|
||||||
// })));
|
// })));
|
||||||
|
|
||||||
const count = await model.count();
|
const count = await ChinaRegion.count();
|
||||||
console.log(`${count} rows of region data imported in ${(Date.now() - timer) / 1000}s`);
|
console.log(`${count} rows of region data imported in ${(Date.now() - timer) / 1000}s`);
|
||||||
}
|
|
||||||
|
|
||||||
export default class PluginChinaRegion extends Plugin {
|
|
||||||
async beforeLoad() {
|
|
||||||
this.app.on('installing', async () => {
|
|
||||||
const ChinaRegion = this.db.getCollection('china_regions').model;
|
|
||||||
await importData(ChinaRegion);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
async load() {
|
|
||||||
await this.db.import({
|
|
||||||
directory: path.resolve(__dirname, 'collections'),
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export default ChinaRegionPlugin;
|
||||||
|
Loading…
Reference in New Issue
Block a user