UNPKG

select-org-info

Version:

通过该组件选择组织信息,包括人员、部门、角色

68 lines (64 loc) 2.29 kB
import { defineStore } from "pinia"; import { ResultListType } from "../type"; import { TabDataEnum } from '../enum' interface StateType { resultList: Array<ResultListType>; resultIds: Array<string>; resultListMap: Map<string, ResultListType>; } export const useResultListStore = defineStore('resultList', { state: (): StateType => ({ resultList: [], resultListMap: new Map<string, ResultListType>(), resultIds: [], }), actions: { /** * 往结果集里添加数据的方法 * 如果存在就是删除,反之就是增加 * 如果是单选的时候,直接就是添加,因为单选没有取消操作 * @param data 需要添加的数据 * @param multiple 是否是多选 * @param isIndeterminate 是否是半选 */ pushResultList(data: Array<ResultListType>, multiple: boolean = false, isIndeterminate: boolean = false) { // 多选 if (multiple) { // 创建一个 Map 来快速查找 data 数组中的项目 const resultListMap = new Map<string, ResultListType>(this.resultList.map(item => [item.id, item])); data.forEach(item => { if (resultListMap.has(item.id) && !isIndeterminate) { // 如果 a 数组中存在相同 id 的项目,删除它 resultListMap.delete(item.id); } else { // 如果 a 数组中不存在相同 id 的项目,添加它 resultListMap.set(item.id, item); } }); // 将更新后的 Map 转换回数组 this.resultList = Array.from(resultListMap.values()); this.resultListMap = resultListMap; } else { // 单选 this.resultList = data; } this.resultIds = this.resultList.map(item => item.id); }, /** * 删除单个 * @param id */ removeResultListItem(id: string) { this.resultList = this.resultList.filter(item => item.id !== id); this.resultIds = this.resultList.map(item => item.id); }, /** * 根据类型来删除数据 * @param type */ removeResultListItemByType(type: TabDataEnum) { this.resultList = this.resultList.filter(item => item.dataType !== type); this.resultIds = this.resultList.map(item => item.id); } } });