| | |
| | | |
| | | defineOptions({ name: 'MdItemTypeTree' }); |
| | | |
| | | withDefaults( |
| | | const props = withDefaults( |
| | | defineProps<{ |
| | | excludeCodes?: string[]; |
| | | filterPlaceholder?: string; |
| | | }>(), |
| | | { |
| | | excludeCodes: () => [], |
| | | filterPlaceholder: '搜索分类', |
| | | }, |
| | | ); |
| | |
| | | const itemTypeList = ref<MesMdItemTypeApi.ItemType[]>([]); // 物料分类列表 |
| | | const itemTypeTree = ref<any[]>([]); // 物料分类树 |
| | | |
| | | /** 按分类编码排除分类及其全部子分类 */ |
| | | function filterExcludedTypes(data: MesMdItemTypeApi.ItemType[]) { |
| | | const excludedIds = new Set<number>(); |
| | | let changed = true; |
| | | while (changed) { |
| | | changed = false; |
| | | for (const item of data) { |
| | | if ( |
| | | item.id !== undefined && |
| | | (props.excludeCodes.includes(item.code ?? '') || |
| | | (item.parentId !== undefined && excludedIds.has(item.parentId))) && |
| | | !excludedIds.has(item.id) |
| | | ) { |
| | | excludedIds.add(item.id); |
| | | changed = true; |
| | | } |
| | | } |
| | | } |
| | | return data.filter( |
| | | (item) => item.id === undefined || !excludedIds.has(item.id), |
| | | ); |
| | | } |
| | | |
| | | /** 加载分类树 */ |
| | | async function loadTree() { |
| | | loading.value = true; |
| | | try { |
| | | const data = await getItemTypeSimpleList(); |
| | | itemTypeList.value = data; |
| | | itemTypeTree.value = handleTree(data, 'id', 'parentId'); |
| | | itemTypeList.value = filterExcludedTypes(data); |
| | | itemTypeTree.value = handleTree(itemTypeList.value, 'id', 'parentId'); |
| | | } finally { |
| | | loading.value = false; |
| | | } |