/* * @Author: Sakura * @LastEditors: Sakura * @Date: 2024-02-26 10:55:04 * @Description: 班组信息界面 */ import React, { useEffect, useRef, useState } from "react"; import { Avatar, Col, Row, Button, Modal, Spin, Form, Input } from "antd"; import { UserOutlined } from "@ant-design/icons"; import RouterComponent from "@/routes/mes/routerComponent"; import styles from "./index.less"; import { DraggableConfirmModal } from "@/components/Draggable"; import * as commonFunc from "@/components/Common/commonFunc"; import * as commonUtils from "@/utils/utils"; import * as commonBusiness from "@/components/Common/commonBusiness"; import * as commonConfig from "@/utils/config"; import * as commonServices from "@/services/services"; import ShowType from "@/components/Common/CommonComponent"; import useCommonBase from "@/components/Common/CommonHooks/useCommonBase"; import StaticEditTable from "@/components/Common/CommonTable"; import FaceDetect from "@/components/FaceDetect"; import CommonOperationBarComponent from "@/mes/common/commonOperationBarComponent"; import userImgs from "./assets/user.jpg"; import teaIcon from "./assets/teaIcon.png"; import joinIcon from "./assets/joinIcon.png"; import { message } from "antd"; const teamInfoSid = "17086669370007136849817837261000"; let loginInfo = {}; // 业务层 const useTeamInfoEvent = props => { const { formData } = props; useEffect( async () => { if (commonUtils.isNotEmptyArr(formData)) { const colunmData = handleGetColumnData(formData, true); const result = await handleGetData(formData, true); const addState = { ...colunmData, ...result, bFinish: true }; props.onSaveState({ ...addState, loadings: false }); } }, [formData] ); // 监听人员表第一条数据的实际上班人员 const sFirstActualEmployeeName = props.slave0Data?.[0]?.sActualEmployeeName; const timer = useRef(null); useEffect( () => { if (!props.bFinish) return; const changeUserInfo = () => { const userinfo = commonUtils.getAppData("userinfo"); if ( sFirstActualEmployeeName && sFirstActualEmployeeName !== userinfo.sUserName ) { userinfo.sUserName = sFirstActualEmployeeName; userinfo.sUserNo = props.slave0Data[0].sActualEmployeeNo; props.dispatch({ type: "app/saveUserinfo", payload: userinfo }); } else if ( sFirstActualEmployeeName === undefined && userinfo.sUserNameBak && userinfo.sUserNameBak !== userinfo.sUserName ) { userinfo.sUserName = userinfo.sUserNameBak; userinfo.sUserNo = userinfo.sUserNoBak; props.dispatch({ type: "app/saveUserinfo", payload: userinfo }); } }; clearTimeout(timer.current); timer.current = setTimeout(() => { changeUserInfo(); }, 200); }, [sFirstActualEmployeeName] ); // 获取表头数据 const handleGetColumnData = (formData = [], isWait) => { let addState = {}; for (let i = 0; i < formData.length; i++) { const config = formData[i]; const { sGrd } = config; const column = commonFunc.getHeaderConfig(config); addState = { ...addState, [`${sGrd}Column`]: column, [`${sGrd}Config`]: config }; } if (isWait) { return addState; } else { props.onSaveState(addState); } }; // 获取数据集 const handleGetData = async (formData = [], isWait) => { let addState = {}; for (let i = 0; i < formData.length; i++) { const config = formData[i]; const { sGrd } = config; const conditonValues = props.onGetSqlConditionValues(config); const result = (await props.onGetDataSet({ name: sGrd, // 有指定表名时用指定表名 configData: config, condition: { sSqlCondition: { ...conditonValues } }, isWait: true })) || {}; props.setTempRef(result); addState = { ...addState, ...result }; } props.setTempRef({}, true); if (isWait) { return addState; } else { props.onSaveState(addState); } }; const sModelsId = "16034339700006038392152714521000"; const mesSysbrands = commonUtils.convertStrToObj( localStorage.getItem("mesSysbrands") ); const { masterData = {} } = props; // 遍历登录文本组件 const handleGetFormItem = (props, item) => { let enabledNew = true; const showTypeProps = { bNewForm: true, iColValue: 24, record: { ...masterData, ...mesSysbrands }, name: "master", formId: sModelsId, getSqlDropDownData: props.getSqlDropDownData, getSqlCondition: props.getSqlCondition, handleSqlDropDownNewRecord: props.handleSqlDropDownNewRecord, getFloatNum: props.getFloatNum, getDateFormat: props.getDateFormat, onChange: (...args) => { loginInfo = { ...loginInfo, ...args[2] }; }, showConfig: { ...item, sDropDownType: "" }, formItemLayout: { labelCol: { span: 0 }, wrapperCol: { span: 24 } }, textArea: false, enabled: enabledNew, dataValue: masterData[item.sName], bTable: item.sName !== "sPassWord", bViewTable: true, onFilterDropDownData: props.onFilterDropDownData, onSaveState: props.onSaveState, bPassWord: item.sName === "sPassWord", style: { backgroundColor: "#eaeaea" } }; return ( ); }; const getFaceResult = async () => { let faceResult = false; const loginType = await new Promise(resolve => { Modal.confirm({ title: "温馨提示:", content: "请选择验证方式", closable: true, maskClosable: true, wrapClassName: "mesCommonModal", cancelText: "账号密码", okText: "人脸识别", onOk() { resolve(1); }, onCancel(e) { if (e.name) { resolve(2); Modal.destroyAll(); } else { resolve(0); } } }); }); if (loginType === 1) { // 人脸识别 faceResult = await new Promise(resolve => { const modal = Modal.info({ title: "人脸识别", keyboard: false, content: ( { const resultRowData = e.dataset.rows[0]; resolve(resultRowData); modal.destroy(); }} actionType={"identifyFace"} /> ), wrapClassName: "xlyFaceAuthModal", okText: "取消", onOk() { resolve(false); } }); }); } else if (loginType === 2) { // 账号密码登陆 let loginConfig; const configUrl = `${ commonConfig.server_host }business/getModelBysId/${sModelsId}?sModelsId=${sModelsId}&sName=/commonAuto`; const configReturn = (await commonServices.getService("", configUrl)) .data; if (configReturn.code === 1) { const dataReturn = configReturn.dataset.rows; if (commonUtils.isNotEmptyArr(dataReturn)) { const { formData } = dataReturn[0]; if (commonUtils.isNotEmptyArr(formData)) { loginConfig = formData[0].gdsconfigformslave.filter( item => item.bVisible && item.sName && ["sUserName", "sPassWord"].includes(item.sName) ); } } } else { message.error(configReturn.msg); } faceResult = await new Promise(resolve => { loginInfo = {}; Modal.confirm({ title: "请输入账号密码:", content: (
{loginConfig.map(item => handleGetFormItem(props, item))}
), wrapClassName: "mesCommonModal mesLoginForm", cancelText: "取消", okText: "确定", onOk(e) { if (e.name) { if (!loginInfo.sUserNo && !loginInfo.sUserName) { message.error("账号/姓名不能为空!"); return; } if (!loginInfo.sPassWord) { message.error("密码不能为空!"); return; } const { sBrandsId, sSubsidiaryId } = mesSysbrands; const url = `${ commonConfig.server_host }userloginUserNo/${sBrandsId}/${sSubsidiaryId}`; const value = { username: loginInfo.sUserNo || loginInfo.sUserName, password: loginInfo.sPassWord }; commonServices .postValueService(null, value, url) .then(({ data: dataReturn }) => { const { msg, code, dataset } = dataReturn; if (code !== 1) { message.error(msg); return; } if (commonUtils.isNotEmptyObject(msg)) { message.warning(msg, 6); } const result = dataset.rows[0]; resolve(result); }); } }, onCancel() { resolve(false); } }); }); } Modal.destroyAll(); return faceResult; }; // 上下班事件 const handleChangeWorkState = async (params, workState) => { // 如果是上班,需要人脸识别 let faceResult = false; if (workState == "on") { const tempFaceData = localStorage.getItem("tempFaceData"); if (tempFaceData) { faceResult = commonUtils.convertStrToObj(tempFaceData, {}); } else { faceResult = await getFaceResult(); } if (!faceResult) return; } const { config, record, name } = params; props.onProcedureCall({ btnConfig: config, tableData: [record], faceData: { sEmployeeNo: faceResult.sEmployeeNo }, onSuccess: () => { handleRefreshDataByTableName(name); }, onConfirm: () => {}, onError: () => {} }); // const tableDataNew = [...tableData]; // tableDataNew[index].workState = 'on'; // props.onSaveState({ [`${tableName}Data`]: tableDataNew }); }; // 通过表名刷新数据 const handleRefreshDataByTableName = tableName => { const { [`${tableName}Config`]: config } = props; handleGetData([{ ...config, specifyTableName: tableName }]); }; // props.setLoading(false) // 刷新指定表格 const { refreshTableList = [] } = props; useEffect( async () => { if (!refreshTableList.length) return; let addState = { refreshTableList: [] }; const formDataNew = formData.filter(item => refreshTableList.includes(item.sGrd) ); addState = { ...addState, ...(await handleGetData(formDataNew, true)) }; props.onSaveState(addState); }, [refreshTableList.length] ); // 监听slave0表数据,看是否有人上班 const { slave0Data = [] } = props; const bStartWork = slave0Data.filter(item => item.sActualEmployeeName).length > 0; useEffect( () => { if (!props.bFinish) return; const userinfo = commonUtils.getAppData("userinfo"); const userinfoNew = { ...userinfo, bStartWork }; props.dispatch({ type: "app/saveUserinfo", payload: userinfoNew }); }, [bStartWork] ); return { ...props, // 其他对象 onChangeWorkState: handleChangeWorkState }; }; // 班组信息 const TeamInfo = baseProps => { const [faceModal, setFaceModal] = useState(false); const props = useTeamInfoEvent( useCommonBase({ ...baseProps, sModelsId: teamInfoSid }) ); const { formData = [] } = props; if (!formData.length) return ""; const tableBaseProps = commonBusiness.getTableTypes("slave0", props); const { config: slave0Config } = tableBaseProps; // 上班按钮配置 const BtnEnventStartWorkConfig = slave0Config?.gdsconfigformslave?.find( item => item.sControlName === "BtnEnventStartWork" ) || {}; // 下班按钮配置 const BtnEnventOfftWorkConfig = slave0Config?.gdsconfigformslave?.find( item => item.sControlName === "BtnEnventOfftWork" ) || {}; const tableProps = { ...tableBaseProps, tableProps: { onChange: () => {} // AutoTableHeight: 400, }, fixedHeight: "calc(25vh - 80px)", tableBtnsConfig: params => { const { record } = params; const { workState = "off", sTeamEmployeeName, sActualEmployeeName = "" } = record; // console.log(record) return [ { ...BtnEnventStartWorkConfig, btnBgColor: sActualEmployeeName ? "#AAAAAA" : "#FAAD14" }, { ...BtnEnventOfftWorkConfig, btnBgColor: !sActualEmployeeName ? "#AAAAAA" : "#FAAD14" } ]; }, tableBtnsWidth: "190px", // tableBtnsConfig:[ // { btnBgColor:"#AAAAAA" , showName:'上班' }, // { btnBgColor:"#FAAD14" , showName:'下班' } // ], onTableBtnClick: item => { const { record, config } = item; if (config.showName === "上班") { if (record.sActualEmployeeName) { message.info("当前正在上班中...", 3); return; } props.onChangeWorkState(item, "on"); } else if (config.showName === "下班") { if (!record.sActualEmployeeName) { message.info("请先上班", 3); return; } props.onChangeWorkState(item, "off"); } } }; const { sForemanName = "", sIpqcName = "", sEmployeeName = "" } = props.slaveData && props.slaveData.length !== 0 ? props.slaveData[0] : {}; const { sTeamEmployeeNo = "" } = props.slave0Data?.[0] || {}; let faceProps = { ...props, faceModal, setFaceModal }; const operationBarProps = { ...props, sName: "slave0" }; return (

班组信息

{props.app.userinfo.sJzPicturePath ? ( { event.target.src = userImgs; }} /> ) : ( )}
  • {sEmployeeName}
  • {props.app.userinfo?.sTeamNo}
  • {props.app.userinfo?.sShift == "1" ? "白班" : props.app.userinfo?.sShift == "2" ? "夜班" : ""}
  • {sForemanName}
  • {sIpqcName}
{/**/}
{/* 刷脸 */}
); }; // 人脸登录弹窗 const FaceLoginModal = props => { const { faceModal, setFaceModal } = props; if (!faceModal) return ""; // 人脸登录成功回调 const handleIdentifySuccess = e => { // const { sBrandsId: sParentId, sSubsidiaryId: sId, sEmployeeNo } = e.dataset.rows[0]; // // ZY0232 // const value = { // sParentId, sId, sEmployeeNo // }; // handleSubmit(value); }; return ( { setFaceModal(false); }} >
); }; const TeamJoinInfo = props => { const { slave1Config, slave1Data } = props; const joinInfoData = commonUtils.filteredArr( slave1Config?.gdsconfigformslave.map(e => { if (e.bVisible) { return e; } }) ); const joinInfoTableData = commonUtils .filteredArr( props.formData?.map((e, i) => { if (i >= 3 && i <= 5) { return { showName: e.showName, tableName: e.sGrd }; } }) ) ?.filter(item => item.tableName !== "slave3"); const tableProps = tableName => { const result = { ...commonBusiness.getTableTypes(tableName, props), tableProps: { onChange: () => {} }, onTableBtnClick: props.onTableBtnClick, fixedHeight: tableName === "slave4" ? "230px" : "160px" }; result.tableBtnsConfig = result.config?.gdsconfigformslave ?.filter( item => item.bVisible && item.sControlName === "BtnTable.confirm" ) .map(item => ({ ...item, btnBgColor: "#1890ff" })); return result; }; const handleOk = () => { // 将当前选中行保存到全局 props.dispatch({ type: "app/saveGlobalData", payload: { bStartWork: true // 开工 } }); props.onChangeRouter({ type: "name", path: ["计划任务", "机台任务"] }); }; const workHandoverInformation= commonFunc.showLocalMessage(props, 'workHandoverInformation', '上班交接信息'); return (

{workHandoverInformation}

{joinInfoData?.map((item, i) => (

{item.showName}

{slave1Data.length > 0 ? slave1Data[0][item.sName] : ""}
))} {joinInfoTableData?.map((item, i) => (

{item.showName}

))}
{/* { handleOk(); console.log('点击确定') }} onCancel={() => { console.log('点击取消') }} /> */}
); }; export default TeamInfo;