diff --git a/src/mes/common/commonModelComponent/index.js b/src/mes/common/commonModelComponent/index.js index e25a9c9..ac3807c 100644 --- a/src/mes/common/commonModelComponent/index.js +++ b/src/mes/common/commonModelComponent/index.js @@ -300,8 +300,9 @@ const useCommonModelEvent = props => { pageLayout = handleGetFilterPageLayout(pageLayout); const [tableList, tabConfig] = pageLayout; const colunmData = handleGetColumnData(tableList, true); - const result = !noGetData - ? await handleGetData(tableList, true, true) + const result = !noGetData && sModelsId === '17211911815017669983448000' ? + await handleGetDataPop(tableList, true, true) : + !noGetData ? await handleGetData(tableList, true, true) : await handleGetData( tableList.filter( item => @@ -482,6 +483,246 @@ const useCommonModelEvent = props => { } }; + const handleGetDataPop = async (tableList = [], isWait, bInit) => { + console.log('handleGetData开始执行,tableList:', tableList); + let addState = {}; + for (let i = 0; i < tableList.length; i++) { + const tableName = tableList[i]; + const config = formData.find(item => item.sGrd === tableName); + if (!config || tableName.includes("FirstlineSelected")) continue; + const conditonValues = props.onGetSqlConditionValues(config); + let { [`${tableName}Filter`]: bFilter } = props; + + // 初始化时,加上搜索按钮上iTag为1的条件 + if (!bFilter && bInit) { + const initSearchConfig = config.gdsconfigformslave.find( + item => + item.bVisible && + item.sControlName?.includes("BtnRight") && + item.iTag === 1 && + [ + "近2天", + "近两天", + "近7天", + "近七天", + "近一月", + "近三月", + "近半年", + "近一年" + ].includes(item.showName.trim()) + ); + + if (initSearchConfig) { + const { showName, sActiveKey } = initSearchConfig; + const tomorrowDate = moment() + .add(1, "days") + .format("YYYY-MM-DD"); + let oneMonthAgo; + switch (showName.trim()) { + case "近2天": + case "近两天": + oneMonthAgo = moment() + .subtract(2, "days") + .format("YYYY-MM-DD"); + break; + case "近7天": + case "近七天": + oneMonthAgo = moment() + .subtract(7, "days") + .format("YYYY-MM-DD"); + break; + case "近一月": + oneMonthAgo = moment() + .subtract(1, "months") + .format("YYYY-MM-DD"); + break; + case "近三月": + oneMonthAgo = moment() + .subtract(3, "months") + .format("YYYY-MM-DD"); + break; + case "近半年": + oneMonthAgo = moment() + .subtract(6, "months") + .format("YYYY-MM-DD"); + break; + case "近一年": + oneMonthAgo = moment() + .subtract(12, "months") + .format("YYYY-MM-DD"); + break; + default: + break; + } + + const searchFieldList = config.gdsconfigformslave.filter( + item => item.bVisible && item.bFind + ); + + const searchField = searchFieldList[0] || {}; + + bFilter = [ + { + bFilterCondition: "between", + bFilterName: sActiveKey || searchField.sName, + bFilterValue: `${oneMonthAgo},${tomorrowDate}` + } + ]; + addState[`${tableName}SelectedBtn`] = showName.trim(); + addState[`${tableName}Filter`] = bFilter; + } + } + + // 行车记录新增时间、白夜班条件 + if (config.sId === "12710101117087404588590") { + // 判断当前时间是否小于上午8点,如果是,则默认为昨天 + const now = moment(); + const today8AM = moment() + .hour(8) + .minute(0) + .second(0) + .millisecond(0); + const isBefore8AM = now.isSameOrBefore(today8AM); + const { + runningTime = isBefore8AM + ? now.subtract(1, "days").format("YYYY-MM-DD") + : now.format("YYYY-MM-DD"), + runningShift = props.app?.userinfo?.sShift.toString(), + iShowType = 0 + } = props; + conditonValues.tCreateTime = runningTime; + conditonValues.sShiftNew = runningShift; + conditonValues.iShowType = iShowType; + } + + //【班组报工特殊处理】历史日报查看详情如果班组报工没查到数据,用sSReserve1当历史日报的sId + if (tableName === "tableS0" && props.sSReserve1) { + conditonValues.sSReserve1 = props.sSReserve1; + } + + let result = {}; + + // 检查WebSocket连接状态 + const checkWebSocketConnection = () => { + const ws = props.app?.webSocket; + if (!ws || ws.readyState !== WebSocket.OPEN) { + console.warn('WebSocket连接异常,状态:', ws?.readyState); + return false; + } + return true; + }; + + try { + // 先检查WebSocket连接 + if (!checkWebSocketConnection()) { + console.warn('WebSocket连接异常,跳过数据获取'); + result = {}; + } else { + // 使用Promise.race实现超时控制 + const dataPromise = props.onGetDataSet({ + name: tableName, + configData: config, + condition: { + sSqlCondition: { ...conditonValues, ...sFilterConditions }, + bFilter + }, + isWait: true + }) || Promise.resolve({}); + + // 添加超时机制 - 使用更安全的实现方式 + result = await new Promise((resolve, reject) => { + const timeoutId = setTimeout(() => { + reject(new Error('Data fetch timeout (10 seconds)')); + }, 10000); + + // 执行数据获取 + dataPromise + .then((data) => { + clearTimeout(timeoutId); + resolve(data); + }) + .catch((error) => { + clearTimeout(timeoutId); + reject(error); + }); + }); + console.log(`表${tableName}数据获取成功:`, result); + } + } catch (error) { + console.error(`获取表${tableName}数据时出错:`, error.message); + // 如果是超时错误,尝试重新连接WebSocket + if (error.message.includes('timeout')) { + console.log('Data fetch timeout, trying to reconnect WebSocket...'); + if (props.dispatch && props.app) { + props.dispatch({ + type: "app/createWebSocket", + payload: { reStart: true, dispatch: props.dispatch } + }); + } + } + result = {}; + } + props.setTempRef(result); + + if (tableName?.includes("master")) { + const masterData = result[`${tableName}Data`]; + result[`${tableName}Data`] = masterData?.[0] || {}; + } else { + // 如果选中的数据不在返回的数据中,则清空选中数据 + const { [`${tableName}Data`]: tableData = [] } = result; + const { [`${tableName}SelectedRowKeys`]: selectedRowKeys = [] } = props; + if (selectedRowKeys.length) { + const selectedRowKeysNew = selectedRowKeys.filter(item => + tableData.some(rowData => + [rowData.sId, rowData.sSlaveId].includes(item) + ) + ); + result[`${tableName}SelectedRowKeys`] = selectedRowKeysNew; + } + } + + // 如果配置了默认选中第一行,则默认选中第一行,刷新数据集时配置NotFirstlineSelected则不刷新 + let bNotFirstlineSelected = + tableList.findIndex( + item => item === `${tableName}NotFirstlineSelected` + ) > -1; + + if (!bNotFirstlineSelected) { + // 如果配置了默认选中第一行,则默认选中第一行 + let bFirstlineSelected = config.gdsconfigformslave.find( + item => item.sControlName === "bFirstlineSelected" && item.bVisible + ); + // 配置刷新数据时,配置 数据集名称+FirstlineSelected,默认选中首行数据。 + if (!bFirstlineSelected) { + bFirstlineSelected = + tableList.findIndex( + item => item === `${tableName}FirstlineSelected` + ) > -1; + } + if (bFirstlineSelected) { + if (commonUtils.isNotEmptyObject(result[`${tableName}Data`])) { + result[`${tableName}SelectedRowKeys`] = [ + result[`${tableName}Data`][0].sId + ]; + result.triggerClickTableList = result.triggerClickTableList || []; + result.triggerClickTableList.push(tableName); + } + } + } + addState = { ...addState, ...result }; + + if (tableName === "tableS0" && props.sSReserve1) { + addState.sSReserve1 = undefined; + } + } + + props.setTempRef({}, true); + if (isWait) { + return addState; + } else { + props.onSaveState(addState); + } + }; // 获取数据集 const handleGetData = async (tableList = [], isWait, bInit) => { let addState = {};