182 lines
4.9 KiB
JavaScript
182 lines
4.9 KiB
JavaScript
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 = 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
|
||
/* ------ ------ */
|
||
// #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));
|
||
handleTwoLevel();
|
||
});
|
||
// console.log('materialTypes --- ', materialTypes);
|
||
// console.log('materialTwoLevel --- ', materialTwoLevel);
|
||
}
|
||
loadFinish.value = true;
|
||
let t = setInterval(() => {
|
||
loadFinish.value = false;
|
||
clearInterval(t);
|
||
}, 1000);
|
||
}
|
||
/* 将所有的数据处理成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[key] = {};
|
||
materialTypes[key].forEach((v) => {
|
||
if (v.value != 0) {
|
||
materialTwoLevel[key][v.dataType] = v.children;
|
||
}
|
||
});
|
||
}
|
||
}
|
||
/* 获取标签的名字 */
|
||
function targetName(arr, ids, _name) {
|
||
let name = '';
|
||
if (!arr || !arr.length || ids.length < 1) {
|
||
return name;
|
||
}
|
||
let _ids = JSON.parse(JSON.stringify(ids));
|
||
if (typeof ids == 'string') {
|
||
let obj = arr.find((v) => v.value == _ids) || { value: '', label: '', children: [] };
|
||
name = obj.label;
|
||
} 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;
|
||
}
|
||
const _timer = ref(null);
|
||
function defaultGet(fc = () => {}) {
|
||
_timer.value = setTimeout(() => {
|
||
clearTimeout(_timer.value);
|
||
if (loadFinish.value) {
|
||
fc();
|
||
} else {
|
||
defaultGet(fc);
|
||
}
|
||
}, 200);
|
||
}
|
||
/* t: 1规格 2用量 */
|
||
function handleNumUnit(_info = {}) {
|
||
let text = '';
|
||
if (!_info.type || !_info.type < -1) return text;
|
||
const info = Object.assign(
|
||
{
|
||
num1: '',
|
||
unit1: '',
|
||
num2: '',
|
||
unit2: '',
|
||
type: -2,
|
||
},
|
||
_info
|
||
);
|
||
if (info.type == -1) {
|
||
let u1 = (goodsUnitOptions.find((_v) => _v.value == info.unit1) || { label: '' }).label;
|
||
let u2 = (useDosageUnit.find((_v) => _v.value == info.unit2) || { label: '' }).label;
|
||
text = `${info.num2}${u1.split('/')[1]}${u2}`;
|
||
} else if (info.type == 1) {
|
||
text = `${info.num1}${(goodsUnitOptions.find((_v) => _v.value == info.unit1) || { label: '' }).label}`;
|
||
} else if (info.type == 2) {
|
||
text = `${info.num2}${(useDosageUnit.find((_v) => _v.value == info.unit2) || { label: '' }).label}`;
|
||
}
|
||
return text;
|
||
}
|
||
function handleShowName(text = '') {
|
||
if (!text || !text.includes('|')) return false;
|
||
let names = JSON.parse(text.split('|')[1]);
|
||
let _t = '';
|
||
names.forEach((v, i) => {
|
||
_t += (i == 0 ? '' : ',') + v;
|
||
});
|
||
return _t;
|
||
}
|
||
// #endregion
|
||
onMounted(getmaterialType);
|
||
|
||
return {
|
||
defaultGet,
|
||
loadFinish,
|
||
materialTypes,
|
||
materialTwoLevel,
|
||
goodsUnitOptions,
|
||
useDosageUnit,
|
||
getmaterialType,
|
||
targetName,
|
||
filterTypes,
|
||
handleShowName,
|
||
handleNumUnit,
|
||
};
|
||
}
|