From 0bd4c6986a437db934b4e5c2d5e5aaf2e4fdfddb Mon Sep 17 00:00:00 2001 From: pengm <674192343@qq.com> Date: Wed, 18 Mar 2026 09:29:50 +0800 Subject: [PATCH] 1.支持双击弹出行车记录 --- src/mes/common/commonModalComponent/index.js | 9 +++++---- src/mes/common/commonModelComponent/index.js | 247 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 251 insertions(+), 5 deletions(-) diff --git a/src/mes/common/commonModalComponent/index.js b/src/mes/common/commonModalComponent/index.js index 798858f..bfc5a82 100644 --- a/src/mes/common/commonModalComponent/index.js +++ b/src/mes/common/commonModalComponent/index.js @@ -6,11 +6,12 @@ import RouterComponent from "@/routes/mes/routerComponent"; import * as commonUtils from "@/utils/utils"; const CommonModalComponent = props => { + const bSmall = props?.sModelsId ==='17211911815017669983448000'; const { visible, title, - width = "calc(100vw - 110px)", - height = "calc(100vh - 60px)", + width = bSmall? "calc(75vw - 110px)" : "calc(100vw - 110px)", + height = bSmall? "calc(80vh - 60px)" : "calc(100vh - 60px)", onCancel } = props; @@ -22,7 +23,7 @@ const CommonModalComponent = props => { padding: 0, margin: 0, top: 60, - left: 110 + left: bSmall? 216: 110 }; } @@ -39,7 +40,7 @@ const CommonModalComponent = props => { window.deviceTargetInfoModalAutoShow = false; }; }, []); - + return ( { const [tableList, tabConfig] = pageLayout; const colunmData = handleGetColumnData(tableList, true); let result = {}; - if (!commonUtils.isEmptyObject(copyTo) && !refreshCount) { + if(!noGetData && sModelsId === '17211911815017669983448000'){ + result = await handleGetDataPop(tableList, true, true) + } else if (!commonUtils.isEmptyObject(copyTo) && !refreshCount) { result = await handleGetData(tableList, true, true); } else if (noGetData) { @@ -535,6 +537,249 @@ const useCommonModelEvent = props => { props.onSaveState(addState); } }; + 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; + + console.log('ssbNotFirstlidss', bNotFirstlineSelected); + + if (!bNotFirstlineSelected) { + // 如果配置了默认选中第一行,则默认选中第一行 + let bFirstlineSelected = config.gdsconfigformslave.find( + item => item.sControlName === "bFirstlineSelected" && item.bVisible + ); + // 配置刷新数据时,配置 数据集名称+FirstlineSelected,默认选中首行数据。 + console.log('bFirstlineSelected', bFirstlineSelected); + 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) => { -- libgit2 0.22.2