Commit 0bd4c6986a437db934b4e5c2d5e5aaf2e4fdfddb
1 parent
bca653f6
1.支持双击弹出行车记录
Showing
2 changed files
with
251 additions
and
5 deletions
src/mes/common/commonModalComponent/index.js
| @@ -6,11 +6,12 @@ import RouterComponent from "@/routes/mes/routerComponent"; | @@ -6,11 +6,12 @@ import RouterComponent from "@/routes/mes/routerComponent"; | ||
| 6 | import * as commonUtils from "@/utils/utils"; | 6 | import * as commonUtils from "@/utils/utils"; |
| 7 | 7 | ||
| 8 | const CommonModalComponent = props => { | 8 | const CommonModalComponent = props => { |
| 9 | + const bSmall = props?.sModelsId ==='17211911815017669983448000'; | ||
| 9 | const { | 10 | const { |
| 10 | visible, | 11 | visible, |
| 11 | title, | 12 | title, |
| 12 | - width = "calc(100vw - 110px)", | ||
| 13 | - height = "calc(100vh - 60px)", | 13 | + width = bSmall? "calc(75vw - 110px)" : "calc(100vw - 110px)", |
| 14 | + height = bSmall? "calc(80vh - 60px)" : "calc(100vh - 60px)", | ||
| 14 | onCancel | 15 | onCancel |
| 15 | } = props; | 16 | } = props; |
| 16 | 17 | ||
| @@ -22,7 +23,7 @@ const CommonModalComponent = props => { | @@ -22,7 +23,7 @@ const CommonModalComponent = props => { | ||
| 22 | padding: 0, | 23 | padding: 0, |
| 23 | margin: 0, | 24 | margin: 0, |
| 24 | top: 60, | 25 | top: 60, |
| 25 | - left: 110 | 26 | + left: bSmall? 216: 110 |
| 26 | }; | 27 | }; |
| 27 | } | 28 | } |
| 28 | 29 | ||
| @@ -39,7 +40,7 @@ const CommonModalComponent = props => { | @@ -39,7 +40,7 @@ const CommonModalComponent = props => { | ||
| 39 | window.deviceTargetInfoModalAutoShow = false; | 40 | window.deviceTargetInfoModalAutoShow = false; |
| 40 | }; | 41 | }; |
| 41 | }, []); | 42 | }, []); |
| 42 | - | 43 | + |
| 43 | return ( | 44 | return ( |
| 44 | <Modal | 45 | <Modal |
| 45 | title={titleNew} | 46 | title={titleNew} |
src/mes/common/commonModelComponent/index.js
| @@ -283,7 +283,9 @@ const useCommonModelEvent = props => { | @@ -283,7 +283,9 @@ const useCommonModelEvent = props => { | ||
| 283 | const [tableList, tabConfig] = pageLayout; | 283 | const [tableList, tabConfig] = pageLayout; |
| 284 | const colunmData = handleGetColumnData(tableList, true); | 284 | const colunmData = handleGetColumnData(tableList, true); |
| 285 | let result = {}; | 285 | let result = {}; |
| 286 | - if (!commonUtils.isEmptyObject(copyTo) && !refreshCount) { | 286 | + if(!noGetData && sModelsId === '17211911815017669983448000'){ |
| 287 | + result = await handleGetDataPop(tableList, true, true) | ||
| 288 | + } else if (!commonUtils.isEmptyObject(copyTo) && !refreshCount) { | ||
| 287 | result = await handleGetData(tableList, true, true); | 289 | result = await handleGetData(tableList, true, true); |
| 288 | 290 | ||
| 289 | } else if (noGetData) { | 291 | } else if (noGetData) { |
| @@ -535,6 +537,249 @@ const useCommonModelEvent = props => { | @@ -535,6 +537,249 @@ const useCommonModelEvent = props => { | ||
| 535 | props.onSaveState(addState); | 537 | props.onSaveState(addState); |
| 536 | } | 538 | } |
| 537 | }; | 539 | }; |
| 540 | + const handleGetDataPop = async (tableList = [], isWait, bInit) => { | ||
| 541 | + console.log('handleGetData开始执行,tableList:', tableList); | ||
| 542 | + let addState = {}; | ||
| 543 | + for (let i = 0; i < tableList.length; i++) { | ||
| 544 | + const tableName = tableList[i]; | ||
| 545 | + const config = formData.find(item => item.sGrd === tableName); | ||
| 546 | + if (!config || tableName.includes("FirstlineSelected")) continue; | ||
| 547 | + const conditonValues = props.onGetSqlConditionValues(config); | ||
| 548 | + let { [`${tableName}Filter`]: bFilter } = props; | ||
| 549 | + | ||
| 550 | + // 初始化时,加上搜索按钮上iTag为1的条件 | ||
| 551 | + if (!bFilter && bInit) { | ||
| 552 | + const initSearchConfig = config.gdsconfigformslave.find( | ||
| 553 | + item => | ||
| 554 | + item.bVisible && | ||
| 555 | + item.sControlName?.includes("BtnRight") && | ||
| 556 | + item.iTag === 1 && | ||
| 557 | + [ | ||
| 558 | + "近2天", | ||
| 559 | + "近两天", | ||
| 560 | + "近7天", | ||
| 561 | + "近七天", | ||
| 562 | + "近一月", | ||
| 563 | + "近三月", | ||
| 564 | + "近半年", | ||
| 565 | + "近一年" | ||
| 566 | + ].includes(item.showName.trim()) | ||
| 567 | + ); | ||
| 568 | + | ||
| 569 | + if (initSearchConfig) { | ||
| 570 | + const { showName, sActiveKey } = initSearchConfig; | ||
| 571 | + const tomorrowDate = moment() | ||
| 572 | + .add(1, "days") | ||
| 573 | + .format("YYYY-MM-DD"); | ||
| 574 | + let oneMonthAgo; | ||
| 575 | + switch (showName.trim()) { | ||
| 576 | + case "近2天": | ||
| 577 | + case "近两天": | ||
| 578 | + oneMonthAgo = moment() | ||
| 579 | + .subtract(2, "days") | ||
| 580 | + .format("YYYY-MM-DD"); | ||
| 581 | + break; | ||
| 582 | + case "近7天": | ||
| 583 | + case "近七天": | ||
| 584 | + oneMonthAgo = moment() | ||
| 585 | + .subtract(7, "days") | ||
| 586 | + .format("YYYY-MM-DD"); | ||
| 587 | + break; | ||
| 588 | + case "近一月": | ||
| 589 | + oneMonthAgo = moment() | ||
| 590 | + .subtract(1, "months") | ||
| 591 | + .format("YYYY-MM-DD"); | ||
| 592 | + break; | ||
| 593 | + case "近三月": | ||
| 594 | + oneMonthAgo = moment() | ||
| 595 | + .subtract(3, "months") | ||
| 596 | + .format("YYYY-MM-DD"); | ||
| 597 | + break; | ||
| 598 | + case "近半年": | ||
| 599 | + oneMonthAgo = moment() | ||
| 600 | + .subtract(6, "months") | ||
| 601 | + .format("YYYY-MM-DD"); | ||
| 602 | + break; | ||
| 603 | + case "近一年": | ||
| 604 | + oneMonthAgo = moment() | ||
| 605 | + .subtract(12, "months") | ||
| 606 | + .format("YYYY-MM-DD"); | ||
| 607 | + break; | ||
| 608 | + default: | ||
| 609 | + break; | ||
| 610 | + } | ||
| 611 | + | ||
| 612 | + const searchFieldList = config.gdsconfigformslave.filter( | ||
| 613 | + item => item.bVisible && item.bFind | ||
| 614 | + ); | ||
| 615 | + | ||
| 616 | + const searchField = searchFieldList[0] || {}; | ||
| 617 | + | ||
| 618 | + bFilter = [ | ||
| 619 | + { | ||
| 620 | + bFilterCondition: "between", | ||
| 621 | + bFilterName: sActiveKey || searchField.sName, | ||
| 622 | + bFilterValue: `${oneMonthAgo},${tomorrowDate}` | ||
| 623 | + } | ||
| 624 | + ]; | ||
| 625 | + addState[`${tableName}SelectedBtn`] = showName.trim(); | ||
| 626 | + addState[`${tableName}Filter`] = bFilter; | ||
| 627 | + } | ||
| 628 | + } | ||
| 629 | + | ||
| 630 | + // 行车记录新增时间、白夜班条件 | ||
| 631 | + if (config.sId === "12710101117087404588590") { | ||
| 632 | + // 判断当前时间是否小于上午8点,如果是,则默认为昨天 | ||
| 633 | + const now = moment(); | ||
| 634 | + const today8AM = moment() | ||
| 635 | + .hour(8) | ||
| 636 | + .minute(0) | ||
| 637 | + .second(0) | ||
| 638 | + .millisecond(0); | ||
| 639 | + const isBefore8AM = now.isSameOrBefore(today8AM); | ||
| 640 | + const { | ||
| 641 | + runningTime = isBefore8AM | ||
| 642 | + ? now.subtract(1, "days").format("YYYY-MM-DD") | ||
| 643 | + : now.format("YYYY-MM-DD"), | ||
| 644 | + runningShift = props.app?.userinfo?.sShift.toString(), | ||
| 645 | + iShowType = 0 | ||
| 646 | + } = props; | ||
| 647 | + conditonValues.tCreateTime = runningTime; | ||
| 648 | + conditonValues.sShiftNew = runningShift; | ||
| 649 | + conditonValues.iShowType = iShowType; | ||
| 650 | + } | ||
| 651 | + | ||
| 652 | + //【班组报工特殊处理】历史日报查看详情如果班组报工没查到数据,用sSReserve1当历史日报的sId | ||
| 653 | + if (tableName === "tableS0" && props.sSReserve1) { | ||
| 654 | + conditonValues.sSReserve1 = props.sSReserve1; | ||
| 655 | + } | ||
| 656 | + | ||
| 657 | + let result = {}; | ||
| 658 | + | ||
| 659 | + // 检查WebSocket连接状态 | ||
| 660 | + const checkWebSocketConnection = () => { | ||
| 661 | + const ws = props.app?.webSocket; | ||
| 662 | + if (!ws || ws.readyState !== WebSocket.OPEN) { | ||
| 663 | + console.warn('WebSocket连接异常,状态:', ws?.readyState); | ||
| 664 | + return false; | ||
| 665 | + } | ||
| 666 | + return true; | ||
| 667 | + }; | ||
| 668 | + | ||
| 669 | + try { | ||
| 670 | + // 先检查WebSocket连接 | ||
| 671 | + if (!checkWebSocketConnection()) { | ||
| 672 | + console.warn('WebSocket连接异常,跳过数据获取'); | ||
| 673 | + result = {}; | ||
| 674 | + } else { | ||
| 675 | + // 使用Promise.race实现超时控制 | ||
| 676 | + const dataPromise = props.onGetDataSet({ | ||
| 677 | + name: tableName, | ||
| 678 | + configData: config, | ||
| 679 | + condition: { | ||
| 680 | + sSqlCondition: { ...conditonValues, ...sFilterConditions }, | ||
| 681 | + bFilter | ||
| 682 | + }, | ||
| 683 | + isWait: true | ||
| 684 | + }) || Promise.resolve({}); | ||
| 685 | + | ||
| 686 | + // 添加超时机制 - 使用更安全的实现方式 | ||
| 687 | + result = await new Promise((resolve, reject) => { | ||
| 688 | + const timeoutId = setTimeout(() => { | ||
| 689 | + reject(new Error('Data fetch timeout (10 seconds)')); | ||
| 690 | + }, 10000); | ||
| 691 | + | ||
| 692 | + // 执行数据获取 | ||
| 693 | + dataPromise | ||
| 694 | + .then((data) => { | ||
| 695 | + clearTimeout(timeoutId); | ||
| 696 | + resolve(data); | ||
| 697 | + }) | ||
| 698 | + .catch((error) => { | ||
| 699 | + clearTimeout(timeoutId); | ||
| 700 | + reject(error); | ||
| 701 | + }); | ||
| 702 | + }); | ||
| 703 | + console.log(`表${tableName}数据获取成功:`, result); | ||
| 704 | + } | ||
| 705 | + } catch (error) { | ||
| 706 | + console.error(`获取表${tableName}数据时出错:`, error.message); | ||
| 707 | + // 如果是超时错误,尝试重新连接WebSocket | ||
| 708 | + if (error.message.includes('timeout')) { | ||
| 709 | + console.log('Data fetch timeout, trying to reconnect WebSocket...'); | ||
| 710 | + if (props.dispatch && props.app) { | ||
| 711 | + props.dispatch({ | ||
| 712 | + type: "app/createWebSocket", | ||
| 713 | + payload: { reStart: true, dispatch: props.dispatch } | ||
| 714 | + }); | ||
| 715 | + } | ||
| 716 | + } | ||
| 717 | + result = {}; | ||
| 718 | + } | ||
| 719 | + props.setTempRef(result); | ||
| 720 | + | ||
| 721 | + if (tableName?.includes("master")) { | ||
| 722 | + const masterData = result[`${tableName}Data`]; | ||
| 723 | + result[`${tableName}Data`] = masterData?.[0] || {}; | ||
| 724 | + } else { | ||
| 725 | + // 如果选中的数据不在返回的数据中,则清空选中数据 | ||
| 726 | + const { [`${tableName}Data`]: tableData = [] } = result; | ||
| 727 | + const { [`${tableName}SelectedRowKeys`]: selectedRowKeys = [] } = props; | ||
| 728 | + if (selectedRowKeys.length) { | ||
| 729 | + const selectedRowKeysNew = selectedRowKeys.filter(item => | ||
| 730 | + tableData.some(rowData => | ||
| 731 | + [rowData.sId, rowData.sSlaveId].includes(item) | ||
| 732 | + ) | ||
| 733 | + ); | ||
| 734 | + result[`${tableName}SelectedRowKeys`] = selectedRowKeysNew; | ||
| 735 | + } | ||
| 736 | + } | ||
| 737 | + | ||
| 738 | + // 如果配置了默认选中第一行,则默认选中第一行,刷新数据集时配置NotFirstlineSelected则不刷新 | ||
| 739 | + let bNotFirstlineSelected = | ||
| 740 | + tableList.findIndex( | ||
| 741 | + item => item === `${tableName}NotFirstlineSelected` | ||
| 742 | + ) > -1; | ||
| 743 | + | ||
| 744 | + console.log('ssbNotFirstlidss', bNotFirstlineSelected); | ||
| 745 | + | ||
| 746 | + if (!bNotFirstlineSelected) { | ||
| 747 | + // 如果配置了默认选中第一行,则默认选中第一行 | ||
| 748 | + let bFirstlineSelected = config.gdsconfigformslave.find( | ||
| 749 | + item => item.sControlName === "bFirstlineSelected" && item.bVisible | ||
| 750 | + ); | ||
| 751 | + // 配置刷新数据时,配置 数据集名称+FirstlineSelected,默认选中首行数据。 | ||
| 752 | + console.log('bFirstlineSelected', bFirstlineSelected); | ||
| 753 | + if (!bFirstlineSelected) { | ||
| 754 | + bFirstlineSelected = | ||
| 755 | + tableList.findIndex( | ||
| 756 | + item => item === `${tableName}FirstlineSelected` | ||
| 757 | + ) > -1; | ||
| 758 | + } | ||
| 759 | + if (bFirstlineSelected) { | ||
| 760 | + if (commonUtils.isNotEmptyObject(result[`${tableName}Data`])) { | ||
| 761 | + result[`${tableName}SelectedRowKeys`] = [ | ||
| 762 | + result[`${tableName}Data`][0].sId | ||
| 763 | + ]; | ||
| 764 | + result.triggerClickTableList = result.triggerClickTableList || []; | ||
| 765 | + result.triggerClickTableList.push(tableName); | ||
| 766 | + } | ||
| 767 | + } | ||
| 768 | + } | ||
| 769 | + addState = { ...addState, ...result }; | ||
| 770 | + | ||
| 771 | + if (tableName === "tableS0" && props.sSReserve1) { | ||
| 772 | + addState.sSReserve1 = undefined; | ||
| 773 | + } | ||
| 774 | + } | ||
| 775 | + | ||
| 776 | + props.setTempRef({}, true); | ||
| 777 | + if (isWait) { | ||
| 778 | + return addState; | ||
| 779 | + } else { | ||
| 780 | + props.onSaveState(addState); | ||
| 781 | + } | ||
| 782 | + }; | ||
| 538 | 783 | ||
| 539 | // 获取数据集 | 784 | // 获取数据集 |
| 540 | const handleGetData = async (tableList = [], isWait, bInit) => { | 785 | const handleGetData = async (tableList = [], isWait, bInit) => { |