2025-03-24 17:21:44 +08:00
|
|
|
|
import { ref, onMounted, reactive } from 'vue';
|
|
|
|
|
import inputSuppliesApis from '@/apis/inputSuppliesApi';
|
|
|
|
|
const { getMaterailTypes } = inputSuppliesApis;
|
2025-04-01 17:33:12 +08:00
|
|
|
|
|
2025-03-24 17:21:44 +08:00
|
|
|
|
export function useBasicInfo(set = {}) {
|
|
|
|
|
const loadFinish = ref(false);
|
|
|
|
|
const searchCondition = Object.assign(
|
2025-03-17 17:32:59 +08:00
|
|
|
|
{
|
2025-03-24 17:21:44 +08:00
|
|
|
|
dataType: '',
|
|
|
|
|
moduleType: '',
|
2025-03-17 17:32:59 +08:00
|
|
|
|
},
|
2025-03-24 17:21:44 +08:00
|
|
|
|
set
|
|
|
|
|
);
|
2025-03-26 13:37:24 +08:00
|
|
|
|
|
2025-03-24 17:21:44 +08:00
|
|
|
|
/* ------ 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: '全部' }],
|
|
|
|
|
});
|
2025-03-26 13:37:24 +08:00
|
|
|
|
/* 不包含顶级 */
|
2025-03-27 15:56:05 +08:00
|
|
|
|
const materialTwoLevel = reactive({});
|
2025-03-24 17:21:44 +08:00
|
|
|
|
|
|
|
|
|
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: '/株' },
|
2025-03-17 17:32:59 +08:00
|
|
|
|
]);
|
2025-03-24 17:21:44 +08:00
|
|
|
|
|
|
|
|
|
// #endregion
|
2025-03-26 13:37:24 +08:00
|
|
|
|
/* ------ ------ */
|
|
|
|
|
// #region
|
|
|
|
|
|
|
|
|
|
/* 获取物资类型 */
|
2025-03-24 17:21:44 +08:00
|
|
|
|
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();
|
|
|
|
|
});
|
2025-03-26 13:37:24 +08:00
|
|
|
|
console.log('materialTypes --- ', materialTypes);
|
2025-03-27 15:56:05 +08:00
|
|
|
|
console.log('materialTwoLevel --- ', materialTwoLevel);
|
2025-03-24 17:21:44 +08:00
|
|
|
|
}
|
|
|
|
|
loadFinish.value = true;
|
2025-03-27 15:56:05 +08:00
|
|
|
|
let t = setInterval(() => {
|
|
|
|
|
loadFinish.value = false;
|
|
|
|
|
clearInterval(t);
|
|
|
|
|
}, 1000);
|
2025-03-24 17:21:44 +08:00
|
|
|
|
}
|
2025-03-26 13:37:24 +08:00
|
|
|
|
/* 将所有的数据处理成value label格式,方便其他地方指直接使用 */
|
2025-03-24 17:21:44 +08:00
|
|
|
|
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;
|
|
|
|
|
}
|
2025-03-26 13:37:24 +08:00
|
|
|
|
/* 处理二级及以下的联动数据 */
|
2025-03-24 17:21:44 +08:00
|
|
|
|
function handleTwoLevel() {
|
|
|
|
|
for (let key in materialTypes) {
|
2025-03-27 15:56:05 +08:00
|
|
|
|
materialTwoLevel[key] = {};
|
2025-03-24 17:21:44 +08:00
|
|
|
|
materialTypes[key].forEach((v) => {
|
|
|
|
|
if (v.value != 0) {
|
2025-03-27 15:56:05 +08:00
|
|
|
|
materialTwoLevel[key][v.dataType] = v.children;
|
2025-03-24 17:21:44 +08:00
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-03-26 13:37:24 +08:00
|
|
|
|
/* 获取标签的名字 */
|
|
|
|
|
function targetName(arr, ids, _name) {
|
|
|
|
|
let name = '';
|
2025-03-31 09:03:19 +08:00
|
|
|
|
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;
|
2025-03-26 13:37:24 +08:00
|
|
|
|
} 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;
|
|
|
|
|
}
|
2025-03-24 17:21:44 +08:00
|
|
|
|
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;
|
|
|
|
|
}
|
2025-03-27 15:56:05 +08:00
|
|
|
|
const _timer = ref(null);
|
|
|
|
|
function defaultGet(fc = () => {}) {
|
|
|
|
|
_timer.value = setTimeout(() => {
|
|
|
|
|
clearTimeout(_timer.value);
|
|
|
|
|
if (loadFinish.value) {
|
|
|
|
|
fc();
|
|
|
|
|
} else {
|
|
|
|
|
defaultGet(fc);
|
|
|
|
|
}
|
|
|
|
|
}, 200);
|
|
|
|
|
}
|
|
|
|
|
/* t: 1规格 2用量 */
|
2025-03-31 09:03:19 +08:00
|
|
|
|
function handleNumUnit(_info = {}) {
|
2025-03-27 15:56:05 +08:00
|
|
|
|
let text = '';
|
2025-03-31 09:03:19 +08:00
|
|
|
|
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}`;
|
2025-03-27 15:56:05 +08:00
|
|
|
|
}
|
|
|
|
|
return text;
|
|
|
|
|
}
|
2025-03-31 09:03:19 +08:00
|
|
|
|
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;
|
|
|
|
|
}
|
2025-03-26 13:37:24 +08:00
|
|
|
|
// #endregion
|
2025-03-24 17:21:44 +08:00
|
|
|
|
onMounted(getmaterialType);
|
|
|
|
|
|
2025-03-17 17:32:59 +08:00
|
|
|
|
return {
|
2025-03-27 15:56:05 +08:00
|
|
|
|
defaultGet,
|
2025-03-24 17:21:44 +08:00
|
|
|
|
loadFinish,
|
|
|
|
|
materialTypes,
|
|
|
|
|
materialTwoLevel,
|
|
|
|
|
goodsUnitOptions,
|
|
|
|
|
useDosageUnit,
|
|
|
|
|
getmaterialType,
|
2025-03-26 13:37:24 +08:00
|
|
|
|
targetName,
|
2025-03-24 17:21:44 +08:00
|
|
|
|
filterTypes,
|
2025-03-31 09:03:19 +08:00
|
|
|
|
handleShowName,
|
2025-03-27 15:56:05 +08:00
|
|
|
|
handleNumUnit,
|
2025-03-17 17:32:59 +08:00
|
|
|
|
};
|
|
|
|
|
}
|