Commit 0bd4c6986a437db934b4e5c2d5e5aaf2e4fdfddb

Authored by Min
1 parent bca653f6

1.支持双击弹出行车记录

src/mes/common/commonModalComponent/index.js
... ... @@ -6,11 +6,12 @@ import RouterComponent from "@/routes/mes/routerComponent";
6 6 import * as commonUtils from "@/utils/utils";
7 7  
8 8 const CommonModalComponent = props => {
  9 + const bSmall = props?.sModelsId ==='17211911815017669983448000';
9 10 const {
10 11 visible,
11 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 15 onCancel
15 16 } = props;
16 17  
... ... @@ -22,7 +23,7 @@ const CommonModalComponent = props => {
22 23 padding: 0,
23 24 margin: 0,
24 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 40 window.deviceTargetInfoModalAutoShow = false;
40 41 };
41 42 }, []);
42   -
  43 +
43 44 return (
44 45 <Modal
45 46 title={titleNew}
... ...
src/mes/common/commonModelComponent/index.js
... ... @@ -283,7 +283,9 @@ const useCommonModelEvent = props =&gt; {
283 283 const [tableList, tabConfig] = pageLayout;
284 284 const colunmData = handleGetColumnData(tableList, true);
285 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 289 result = await handleGetData(tableList, true, true);
288 290  
289 291 } else if (noGetData) {
... ... @@ -535,6 +537,249 @@ const useCommonModelEvent = props =&gt; {
535 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 785 const handleGetData = async (tableList = [], isWait, bInit) => {
... ...