mirror of
https://github.com/cool-team-official/cool-admin-midway.git
synced 2026-01-06 10:58:14 +00:00
117 lines
2.7 KiB
TypeScript
117 lines
2.7 KiB
TypeScript
import { DictTypeEntity } from './../entity/type';
|
|
import { DictInfoEntity } from './../entity/info';
|
|
import { Provide } from '@midwayjs/decorator';
|
|
import { BaseService } from '@cool-midway/core';
|
|
import { InjectEntityModel } from '@midwayjs/typeorm';
|
|
import { Repository, In } from 'typeorm';
|
|
import * as _ from 'lodash';
|
|
|
|
/**
|
|
* 字典信息
|
|
*/
|
|
@Provide()
|
|
export class DictInfoService extends BaseService {
|
|
@InjectEntityModel(DictInfoEntity)
|
|
dictInfoEntity: Repository<DictInfoEntity>;
|
|
|
|
@InjectEntityModel(DictTypeEntity)
|
|
dictTypeEntity: Repository<DictTypeEntity>;
|
|
|
|
/**
|
|
* 获得字典数据
|
|
* @param types
|
|
*/
|
|
async data(types: string[]) {
|
|
const result = {};
|
|
const find = await this.dictTypeEntity.createQueryBuilder();
|
|
if (!_.isEmpty(types)) {
|
|
find.where('`key` in(:key)', { key: types });
|
|
}
|
|
const typeData = await find.getMany();
|
|
if (_.isEmpty(typeData)) {
|
|
return {};
|
|
}
|
|
const data = await this.dictInfoEntity
|
|
.createQueryBuilder('a')
|
|
.select([
|
|
'a.id',
|
|
'a.name',
|
|
'a.typeId',
|
|
'a.parentId',
|
|
'a.orderNum',
|
|
'a.value',
|
|
])
|
|
.where('typeId in(:typeIds)', {
|
|
typeIds: typeData.map(e => {
|
|
return e.id;
|
|
}),
|
|
})
|
|
.orderBy('orderNum', 'ASC')
|
|
.addOrderBy('a.createTime', 'ASC')
|
|
.getMany();
|
|
for (const item of typeData) {
|
|
result[item.key] = _.filter(data, { typeId: item.id }).map(e => {
|
|
const value = Number(e.value ? e.value : e.id);
|
|
return {
|
|
...e,
|
|
value: isNaN(value) ? e.value : value,
|
|
};
|
|
});
|
|
}
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* 获得字典值
|
|
* @param infoId
|
|
* @returns
|
|
*/
|
|
async value(infoId: number) {
|
|
const info = await this.dictInfoEntity.findOneBy({ id: infoId });
|
|
return info?.name;
|
|
}
|
|
|
|
/**
|
|
* 获得字典值
|
|
* @param infoId
|
|
* @returns
|
|
*/
|
|
async values(infoIds: number[]) {
|
|
const infos = await this.dictInfoEntity.findBy({ id: In(infoIds) });
|
|
return infos.map(e => {
|
|
return e.name;
|
|
});
|
|
}
|
|
|
|
/**
|
|
* 修改之后
|
|
* @param data
|
|
* @param type
|
|
*/
|
|
async modifyAfter(data: any, type: 'delete' | 'update' | 'add') {
|
|
if (type === 'delete') {
|
|
for (const id of data) {
|
|
await this.delChildDict(id);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 删除子字典
|
|
* @param id
|
|
*/
|
|
private async delChildDict(id) {
|
|
const delDict = await this.dictInfoEntity.findBy({ parentId: id });
|
|
if (_.isEmpty(delDict)) {
|
|
return;
|
|
}
|
|
const delDictIds = delDict.map(e => {
|
|
return e.id;
|
|
});
|
|
await this.dictInfoEntity.delete(delDictIds);
|
|
for (const dictId of delDictIds) {
|
|
await this.delChildDict(dictId);
|
|
}
|
|
}
|
|
}
|