area.entity.ts 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { Entity, PrimaryGeneratedColumn, Column, ManyToOne, JoinColumn, OneToMany, CreateDateColumn, UpdateDateColumn } from 'typeorm';
  2. import { DeleteStatus, DisabledStatus } from '../../share/types';
  3. export enum AreaLevel {
  4. PROVINCE = 1, // 省/直辖市
  5. CITY = 2, // 市
  6. DISTRICT = 3 // 区/县
  7. }
  8. @Entity({ name: 'areas' })
  9. export class AreaEntity {
  10. @PrimaryGeneratedColumn({ unsigned: true, comment: '区域ID' })
  11. id!: number;
  12. @Column({ name: 'parent_id', type: 'int', unsigned: true, nullable: true, default: null, comment: '父级区域ID,null表示顶级(省/直辖市)' })
  13. parentId!: number | null;
  14. @Column({ name: 'name', type: 'varchar', length: 100, comment: '区域名称' })
  15. name!: string;
  16. @Column({
  17. name: 'level',
  18. type: 'enum',
  19. enum: AreaLevel,
  20. comment: '层级: 1:省/直辖市, 2:市, 3:区/县'
  21. })
  22. level!: AreaLevel;
  23. @Column({ name: 'code', type: 'varchar', length: 20, unique: true, comment: '行政区划代码' })
  24. code!: string;
  25. // 自关联关系 - 父级区域
  26. @ManyToOne(() => AreaEntity, (area) => area.children)
  27. @JoinColumn({ name: 'parent_id', referencedColumnName: 'id' })
  28. parent!: AreaEntity | null;
  29. // 自关联关系 - 子级区域
  30. @OneToMany(() => AreaEntity, (area) => area.parent)
  31. children!: AreaEntity[];
  32. @Column({ name: 'is_disabled', type: 'int', default: DisabledStatus.ENABLED, comment: '是否禁用(0:启用,1:禁用)' })
  33. isDisabled!: DisabledStatus;
  34. @Column({ name: 'is_deleted', type: 'int', default: DeleteStatus.NOT_DELETED, comment: '是否删除(0:未删除,1:已删除)' })
  35. isDeleted!: DeleteStatus;
  36. @Column({ name: 'created_by', type: 'int', nullable: true, comment: '创建人ID' })
  37. createdBy!: number | null;
  38. @Column({ name: 'updated_by', type: 'int', nullable: true, comment: '更新人ID' })
  39. updatedBy!: number | null;
  40. @CreateDateColumn({ name: 'created_at', type: 'timestamp' })
  41. createdAt!: Date;
  42. @UpdateDateColumn({ name: 'updated_at', type: 'timestamp' })
  43. updatedAt!: Date;
  44. constructor(partial?: Partial<AreaEntity>) {
  45. Object.assign(this, partial);
  46. }
  47. }