Commit e917e615b5d5f59e57e58521bfc39912ff84ed59

Authored by Min
1 parent c0d1cd9d

1.劲嘉---班组报工时间支持点击双击弹窗,行车记录特殊处理

src/mes/common/commonModelComponent/index.js
@@ -300,8 +300,9 @@ const useCommonModelEvent = props => { @@ -300,8 +300,9 @@ const useCommonModelEvent = props => {
300 pageLayout = handleGetFilterPageLayout(pageLayout); 300 pageLayout = handleGetFilterPageLayout(pageLayout);
301 const [tableList, tabConfig] = pageLayout; 301 const [tableList, tabConfig] = pageLayout;
302 const colunmData = handleGetColumnData(tableList, true); 302 const colunmData = handleGetColumnData(tableList, true);
303 - const result = !noGetData  
304 - ? await handleGetData(tableList, true, true) 303 + const result = !noGetData && sModelsId === '17211911815017669983448000' ?
  304 + await handleGetDataPop(tableList, true, true) :
  305 + !noGetData ? await handleGetData(tableList, true, true)
305 : await handleGetData( 306 : await handleGetData(
306 tableList.filter( 307 tableList.filter(
307 item => 308 item =>
@@ -482,6 +483,246 @@ const useCommonModelEvent = props => { @@ -482,6 +483,246 @@ const useCommonModelEvent = props => {
482 } 483 }
483 }; 484 };
484 485
  486 + const handleGetDataPop = async (tableList = [], isWait, bInit) => {
  487 + console.log('handleGetData开始执行,tableList:', tableList);
  488 + let addState = {};
  489 + for (let i = 0; i < tableList.length; i++) {
  490 + const tableName = tableList[i];
  491 + const config = formData.find(item => item.sGrd === tableName);
  492 + if (!config || tableName.includes("FirstlineSelected")) continue;
  493 + const conditonValues = props.onGetSqlConditionValues(config);
  494 + let { [`${tableName}Filter`]: bFilter } = props;
  495 +
  496 + // 初始化时,加上搜索按钮上iTag为1的条件
  497 + if (!bFilter && bInit) {
  498 + const initSearchConfig = config.gdsconfigformslave.find(
  499 + item =>
  500 + item.bVisible &&
  501 + item.sControlName?.includes("BtnRight") &&
  502 + item.iTag === 1 &&
  503 + [
  504 + "近2天",
  505 + "近两天",
  506 + "近7天",
  507 + "近七天",
  508 + "近一月",
  509 + "近三月",
  510 + "近半年",
  511 + "近一年"
  512 + ].includes(item.showName.trim())
  513 + );
  514 +
  515 + if (initSearchConfig) {
  516 + const { showName, sActiveKey } = initSearchConfig;
  517 + const tomorrowDate = moment()
  518 + .add(1, "days")
  519 + .format("YYYY-MM-DD");
  520 + let oneMonthAgo;
  521 + switch (showName.trim()) {
  522 + case "近2天":
  523 + case "近两天":
  524 + oneMonthAgo = moment()
  525 + .subtract(2, "days")
  526 + .format("YYYY-MM-DD");
  527 + break;
  528 + case "近7天":
  529 + case "近七天":
  530 + oneMonthAgo = moment()
  531 + .subtract(7, "days")
  532 + .format("YYYY-MM-DD");
  533 + break;
  534 + case "近一月":
  535 + oneMonthAgo = moment()
  536 + .subtract(1, "months")
  537 + .format("YYYY-MM-DD");
  538 + break;
  539 + case "近三月":
  540 + oneMonthAgo = moment()
  541 + .subtract(3, "months")
  542 + .format("YYYY-MM-DD");
  543 + break;
  544 + case "近半年":
  545 + oneMonthAgo = moment()
  546 + .subtract(6, "months")
  547 + .format("YYYY-MM-DD");
  548 + break;
  549 + case "近一年":
  550 + oneMonthAgo = moment()
  551 + .subtract(12, "months")
  552 + .format("YYYY-MM-DD");
  553 + break;
  554 + default:
  555 + break;
  556 + }
  557 +
  558 + const searchFieldList = config.gdsconfigformslave.filter(
  559 + item => item.bVisible && item.bFind
  560 + );
  561 +
  562 + const searchField = searchFieldList[0] || {};
  563 +
  564 + bFilter = [
  565 + {
  566 + bFilterCondition: "between",
  567 + bFilterName: sActiveKey || searchField.sName,
  568 + bFilterValue: `${oneMonthAgo},${tomorrowDate}`
  569 + }
  570 + ];
  571 + addState[`${tableName}SelectedBtn`] = showName.trim();
  572 + addState[`${tableName}Filter`] = bFilter;
  573 + }
  574 + }
  575 +
  576 + // 行车记录新增时间、白夜班条件
  577 + if (config.sId === "12710101117087404588590") {
  578 + // 判断当前时间是否小于上午8点,如果是,则默认为昨天
  579 + const now = moment();
  580 + const today8AM = moment()
  581 + .hour(8)
  582 + .minute(0)
  583 + .second(0)
  584 + .millisecond(0);
  585 + const isBefore8AM = now.isSameOrBefore(today8AM);
  586 + const {
  587 + runningTime = isBefore8AM
  588 + ? now.subtract(1, "days").format("YYYY-MM-DD")
  589 + : now.format("YYYY-MM-DD"),
  590 + runningShift = props.app?.userinfo?.sShift.toString(),
  591 + iShowType = 0
  592 + } = props;
  593 + conditonValues.tCreateTime = runningTime;
  594 + conditonValues.sShiftNew = runningShift;
  595 + conditonValues.iShowType = iShowType;
  596 + }
  597 +
  598 + //【班组报工特殊处理】历史日报查看详情如果班组报工没查到数据,用sSReserve1当历史日报的sId
  599 + if (tableName === "tableS0" && props.sSReserve1) {
  600 + conditonValues.sSReserve1 = props.sSReserve1;
  601 + }
  602 +
  603 + let result = {};
  604 +
  605 + // 检查WebSocket连接状态
  606 + const checkWebSocketConnection = () => {
  607 + const ws = props.app?.webSocket;
  608 + if (!ws || ws.readyState !== WebSocket.OPEN) {
  609 + console.warn('WebSocket连接异常,状态:', ws?.readyState);
  610 + return false;
  611 + }
  612 + return true;
  613 + };
  614 +
  615 + try {
  616 + // 先检查WebSocket连接
  617 + if (!checkWebSocketConnection()) {
  618 + console.warn('WebSocket连接异常,跳过数据获取');
  619 + result = {};
  620 + } else {
  621 + // 使用Promise.race实现超时控制
  622 + const dataPromise = props.onGetDataSet({
  623 + name: tableName,
  624 + configData: config,
  625 + condition: {
  626 + sSqlCondition: { ...conditonValues, ...sFilterConditions },
  627 + bFilter
  628 + },
  629 + isWait: true
  630 + }) || Promise.resolve({});
  631 +
  632 + // 添加超时机制 - 使用更安全的实现方式
  633 + result = await new Promise((resolve, reject) => {
  634 + const timeoutId = setTimeout(() => {
  635 + reject(new Error('Data fetch timeout (10 seconds)'));
  636 + }, 10000);
  637 +
  638 + // 执行数据获取
  639 + dataPromise
  640 + .then((data) => {
  641 + clearTimeout(timeoutId);
  642 + resolve(data);
  643 + })
  644 + .catch((error) => {
  645 + clearTimeout(timeoutId);
  646 + reject(error);
  647 + });
  648 + });
  649 + console.log(`表${tableName}数据获取成功:`, result);
  650 + }
  651 + } catch (error) {
  652 + console.error(`获取表${tableName}数据时出错:`, error.message);
  653 + // 如果是超时错误,尝试重新连接WebSocket
  654 + if (error.message.includes('timeout')) {
  655 + console.log('Data fetch timeout, trying to reconnect WebSocket...');
  656 + if (props.dispatch && props.app) {
  657 + props.dispatch({
  658 + type: "app/createWebSocket",
  659 + payload: { reStart: true, dispatch: props.dispatch }
  660 + });
  661 + }
  662 + }
  663 + result = {};
  664 + }
  665 + props.setTempRef(result);
  666 +
  667 + if (tableName?.includes("master")) {
  668 + const masterData = result[`${tableName}Data`];
  669 + result[`${tableName}Data`] = masterData?.[0] || {};
  670 + } else {
  671 + // 如果选中的数据不在返回的数据中,则清空选中数据
  672 + const { [`${tableName}Data`]: tableData = [] } = result;
  673 + const { [`${tableName}SelectedRowKeys`]: selectedRowKeys = [] } = props;
  674 + if (selectedRowKeys.length) {
  675 + const selectedRowKeysNew = selectedRowKeys.filter(item =>
  676 + tableData.some(rowData =>
  677 + [rowData.sId, rowData.sSlaveId].includes(item)
  678 + )
  679 + );
  680 + result[`${tableName}SelectedRowKeys`] = selectedRowKeysNew;
  681 + }
  682 + }
  683 +
  684 + // 如果配置了默认选中第一行,则默认选中第一行,刷新数据集时配置NotFirstlineSelected则不刷新
  685 + let bNotFirstlineSelected =
  686 + tableList.findIndex(
  687 + item => item === `${tableName}NotFirstlineSelected`
  688 + ) > -1;
  689 +
  690 + if (!bNotFirstlineSelected) {
  691 + // 如果配置了默认选中第一行,则默认选中第一行
  692 + let bFirstlineSelected = config.gdsconfigformslave.find(
  693 + item => item.sControlName === "bFirstlineSelected" && item.bVisible
  694 + );
  695 + // 配置刷新数据时,配置 数据集名称+FirstlineSelected,默认选中首行数据。
  696 + if (!bFirstlineSelected) {
  697 + bFirstlineSelected =
  698 + tableList.findIndex(
  699 + item => item === `${tableName}FirstlineSelected`
  700 + ) > -1;
  701 + }
  702 + if (bFirstlineSelected) {
  703 + if (commonUtils.isNotEmptyObject(result[`${tableName}Data`])) {
  704 + result[`${tableName}SelectedRowKeys`] = [
  705 + result[`${tableName}Data`][0].sId
  706 + ];
  707 + result.triggerClickTableList = result.triggerClickTableList || [];
  708 + result.triggerClickTableList.push(tableName);
  709 + }
  710 + }
  711 + }
  712 + addState = { ...addState, ...result };
  713 +
  714 + if (tableName === "tableS0" && props.sSReserve1) {
  715 + addState.sSReserve1 = undefined;
  716 + }
  717 + }
  718 +
  719 + props.setTempRef({}, true);
  720 + if (isWait) {
  721 + return addState;
  722 + } else {
  723 + props.onSaveState(addState);
  724 + }
  725 + };
485 // 获取数据集 726 // 获取数据集
486 const handleGetData = async (tableList = [], isWait, bInit) => { 727 const handleGetData = async (tableList = [], isWait, bInit) => {
487 let addState = {}; 728 let addState = {};