import { ref, onMounted, reactive } from 'vue'; import inputSuppliesApis from '@/apis/inputSuppliesApi'; const { getMaterailTypes } = inputSuppliesApis; export function useBasicInfo(set = {}) { const loadFinish = ref(false); const searchCondition = Object.assign( { dataType: '', moduleType: '', }, set ); /* ------ data ------ */ // #region const materialTypes = reactive({ 1: [{ value: '0', label: '全部' }], 2: [{ value: '0', label: '全部' }], 3: [{ value: '0', label: '全部' }], 4: [{ value: '0', label: '全部' }], 5: [{ value: '0', label: '全部' }], }); /* 不包含顶级 */ const materialTwoLevel = ref({}); /* ------ 农药 ------ */ // #region const pesticideTypes = reactive({}); const goodsUnitOptions = reactive([ { value: '1', label: 'ml/瓶' }, { value: '2', label: 'mg/盒' }, { value: '3', label: 'kg/袋' }, ]); const useDosageUnit = reactive([ { value: '1', label: '/亩' }, { value: '2', label: '/平方米' }, { value: '3', label: '/株' }, ]); // #endregion // #endregion /* ------ ------ */ // #region /* 获取物资类型 */ async function getmaterialType(_set = {}) { let params = Object.assign(searchCondition, _set); let res = await getMaterailTypes(params); if (res && res?.code == 200) { res.data.forEach((item) => { const { moduleType, children } = item; materialTypes[moduleType].push(...handleTypes(children)); // materialTwoLevel.value[moduleType] = handleTypes(children); handleTwoLevel(); }); console.log('materialTypes --- ', materialTypes); console.log('materialTwoLevel --- ', materialTwoLevel.value); } loadFinish.value = true; } /* 将所有的数据处理成value label格式,方便其他地方指直接使用 */ function handleTypes(arr) { arr.forEach((item) => { item.value = item.id; item.label = item.dataName; if (item.children.length > 0) { item.children = handleTypes(item.children); } }); return arr; } /* 处理二级及以下的联动数据 */ function handleTwoLevel() { for (let key in materialTypes) { materialTwoLevel.value[key] = {}; materialTypes[key].forEach((v) => { if (v.value != 0) { materialTwoLevel.value[key][v.dataType] = v.children; } }); } } /* 获取标签的名字 */ function targetName(arr, ids, _name) { let _ids = JSON.parse(JSON.stringify(ids)); let name = ''; if (!arr || !arr.length || _ids.length < 1) { return; } else { let obj = arr.find((v) => v.value == _ids[0]) || { value: '', label: '', children: [] }; name = _name + (_name ? '/' : '') + obj.label; _ids.splice(0, 1); if (_ids.length > 0) { name = targetName(obj.children, _ids, name); } } return name; } function filterTypes(_set = {}) { let filterType = Object.assign( { dataType: '1', moduleType: '1', }, _set ); let all = materialTypes[filterType.moduleType]; let _arr = []; all.forEach((item) => { if (filterType.dataType == item.dataType) { _arr = item.children; } }); return _arr; } // #endregion onMounted(getmaterialType); return { loadFinish, materialTypes, materialTwoLevel, goodsUnitOptions, useDosageUnit, getmaterialType, targetName, filterTypes, }; }