Commit e917e615b5d5f59e57e58521bfc39912ff84ed59
1 parent
c0d1cd9d
1.劲嘉---班组报工时间支持点击双击弹窗,行车记录特殊处理
Showing
1 changed file
with
243 additions
and
2 deletions
src/mes/common/commonModelComponent/index.js
| ... | ... | @@ -300,8 +300,9 @@ const useCommonModelEvent = props => { |
| 300 | 300 | pageLayout = handleGetFilterPageLayout(pageLayout); |
| 301 | 301 | const [tableList, tabConfig] = pageLayout; |
| 302 | 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 | 306 | : await handleGetData( |
| 306 | 307 | tableList.filter( |
| 307 | 308 | item => |
| ... | ... | @@ -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 | 727 | const handleGetData = async (tableList = [], isWait, bInit) => { |
| 487 | 728 | let addState = {}; | ... | ... |