rtgk-screen-web/components/client/PackagingOperation/hooks.js

200 lines
5.1 KiB
JavaScript
Raw Permalink Normal View History

2024-06-20 11:26:44 +08:00
import React, { useCallback, useEffect, useState, useRef } from "react";
import { message } from "antd";
import { request, getQueryVariable } from "../utils";
export const isDev = false;
let rules = (function () {
let data = [];
let callback = () => {};
let setData = (res) => {
setData = () => {};
data = res;
callback({ success: true, data: res });
};
return {
setData,
getData: () => data,
loaded: new Promise((resolve, reject) => {
callback = resolve;
}),
};
})();
let getRule = () => {
getRule = () => rules.loaded;
return request({
method: "get",
url: `${window.config.mesUrl}/console/getpermissions`,
});
};
export const useRule = (code) => {
const [ruleList, setRuleList] = useState(rules.getData());
useEffect(() => {
getRule().then(({ success, data } = {}) => {
if (success) {
setRuleList(data);
rules.setData(data);
}
});
}, []);
if (code) return ruleList.includes(code);
return true;
};
export const useUser = () => {
const [data, setData] = useState();
const getUser = useCallback(() => {
// let user = localStorage.getItem("userInfo");
// try {
// user = JSON.parse(user)
// } catch (e) {
// console.log(e);
// user = {};
// }
// console.log("user", user, localStorage.getItem("userInfo"))
// setData(user);
request({
method: "get",
url: `${window.config.mesUrl}/console/currentinfo`,
}).then(({ success, data } = {}) => {
if (success) {
setData(data);
} else setData();
});
}, [])
// useEffect(() => {
// getUser();
// }, [getUser]);
return [data, getUser];
};
export const useEquipKey = () => {
const [equipKey, setEquipKey] = useState();
const getEquipKey = useCallback(() => {
let ip = getQueryVariable("ip");
console.log("ip", ip);
if (!ip || ip === "null") {
message.error("获取 ip 失败!");
} else {
setEquipKey(ip);
}
}, []);
useEffect(() => {
getEquipKey();
}, [getEquipKey]);
return { equipKey, getEquipKey };
};
export const useSetting = (equipKey) => {
const [settingData, setSettingData] = useState({});
const getSettingData = useCallback(() => {
if (equipKey) {
request({
method: "post",
url: `${window.config.mesUrl}/prodexec/prodexec/packageEquipment/getPackInfoByKey?equipKey=${equipKey}`,
}).then(({ success, data } = {}) => {
if (success) setSettingData(data || {});
});
} else setSettingData({});
}, [equipKey]);
useEffect(() => {
getSettingData();
}, [getSettingData]);
return { settingData, getSettingData };
};
export const useMetaInfo = (equipCode) => {
const [data, setData] = useState({}); // bagNo outBagNo
const timmerRef = useRef();
const getData = useCallback(() => {
if (timmerRef.current) {
clearTimeout(timmerRef.current);
timmerRef.current = undefined;
}
if (equipCode) {
request({
method: "post",
url: `${window.config.mesUrl}/prodexec/prodexec/packageEquipment/getEquipRecord?equipCode=${equipCode}`,
}).then(({ success, data, message: msg } = {}) => {
if (success) {
let { status } = data || {};
// 没有数据,或者数据为中断状态,尝试定时重复请求
if (!data || status === "INTERRUPT") {
if (!data) {
data = { status: "no_job" };
message.error("请先分配任务!");
}
let { reloadTime } = window.config.packagingOperaConfig || {};
if (reloadTime !== undefined) {
timmerRef.current = setTimeout(getData, reloadTime);
}
}
setData(data);
} else {
message.error(msg);
}
});
} else setData({});
}, [equipCode]);
useEffect(() => {
getData();
}, [getData]);
return [data, getData];
};
export const useWsInfo = (equipCode, isEdit) => {
const [data, setData] = useState({});
useEffect(() => {
if (equipCode) {
let url = window.config.edgewsUrl;
if (isDev) {
url = "ws://120.202.38.15:8081/rongtong-edge-application-ws/";
}
if (!isEdit) {
console.log("link: ", url);
let ws = new WebSocket(url);
ws.onmessage = (evt) => {
let res = evt.data;
// if (isDev) {
// res = {
// czzl: 1.11,
// fczl: 2.22,
// }
// }
if (typeof res === "string") {
try {
res = JSON.parse(res);
} catch (e) {
console.log("ws", res);
res = {};
}
}
console.log("ws res:", res);
setData(res);
};
ws.onopen = () => {
if (isDev) {
// 01 02 03
equipCode = "L5-BZ-02";
}
console.log("Connection open ... send:", equipCode);
ws.send(equipCode);
};
}
return () => {
if (!isEdit) {
console.log("ws close:", equipCode);
ws.close();
}
};
}
}, [equipCode, isEdit]);
return [data];
};