SlaveMemo.js 11.8 KB
/**
 * Created by mar105 on 2019-02-13.
 */
/* eslint-disable no-undef,import/first,prefer-destructuring,jsx-a11y/alt-text */
import React, { Component } from "react";
import { Form } from "@ant-design/compatible";
import "@ant-design/compatible/assets/index.css";
import { Input, Space, Button } from "antd";
import * as commonUtils from "../../utils/utils";
import ShowType from "./CommonComponent"; /* 通用方法 */
import AntdDraggableModal from "../Common/AntdDraggableModal";
import moment from "moment";

const { TextArea } = Input;
const FormItem = Form.Item;
class SlaveMemoRc extends Component {
  /**   构造函数   */
  constructor(props) {
    super(props);
    this.handleTextareaChange = this.handleTextareaChange.bind(this);
    this.state = { textareaValue: "" };
    this.max = 2000;
    this.min = 0;
    this.sDateFormat = "YYYY-MM-DD";
    this.bInit = true; // 是否初始化
    // this.isChoosedate = btnName.toLowerCase().endsWith('choosedate');
  }

  componentWillMount() {
    this.componentWillReceiveProps(this.props);
  }

  componentWillReceiveProps(nextProps) {
    /*   state和this属性赋值   */
    const { sCurrMemoProps } = nextProps;
    if (this.bInit && sCurrMemoProps && sCurrMemoProps.bVisibleMemo) {
      this.bInit = false;
      if (
        commonUtils.isNotEmptyObject(sCurrMemoProps) &&
        sCurrMemoProps.btnName === undefined
      ) {
        this.setState({ textareaValue: nextProps.sCurrMemoProps.sValue });
      } else {
        this.setState({ textareaValue: nextProps.sValue });
      }
      if (commonUtils.isNotEmptyObject(sCurrMemoProps)) {
        this.max = commonUtils.convertStrToNumber(
          commonUtils.isNotEmptyObject(nextProps.sCurrMemoProps.sMemoConfig) &&
          commonUtils.isNotEmptyObject(
            nextProps.sCurrMemoProps.sMemoConfig.sMaxValue
          )
            ? nextProps.sCurrMemoProps.sMemoConfig.sMaxValue
            : this.max
        ); /*   最大值(数据格式:数字)   */
        this.min = commonUtils.convertStrToNumber(
          commonUtils.isNotEmptyObject(nextProps.sCurrMemoProps.sMemoConfig) &&
          commonUtils.isNotEmptyObject(
            nextProps.sCurrMemoProps.sMemoConfig.sMinValue
          )
            ? nextProps.sCurrMemoProps.sMemoConfig.sMinValue
            : this.min
        ); /*   最小值(数据格式:数字)   */
      }
    }
  }
  handleOk = () => {
    this.props.onGetMemoCancel();
    return;
    const { sCurrMemoProps, slaveMemoConfig, masterData } = this.props;
    const sValue = {};
    const name = sCurrMemoProps.name;
    const bVisibleMemo = sCurrMemoProps.bVisibleMemo;
    const sMemoField = sCurrMemoProps.sMemoField;
    const sRecord = sCurrMemoProps.sRecord;
    const btnName = sCurrMemoProps.btnName ? sCurrMemoProps.btnName : "";
    let valueKey = "";
    if (
      commonUtils.isNotEmptyArr(slaveMemoConfig) &&
      commonUtils.isNotEmptyObject(masterData)
    ) {
      // eslint-disable-next-line array-callback-return
      slaveMemoConfig.map(item => {
        /**
         * 修改日期:2021-03-24
         * 修改人:吕杰
         * 区域:以下 18 行
         * BUG:
         * 说明:过滤伪字段,为下拉框时替换为id
         * 原代码:
         */
        let realName = item.sName;
        if (item.sRelation && item.sRelation !== "noQuery") {
          // 伪字段处理
          if (item.sDropDownType && item.sDropDownType === "sql") {
            // 下拉框处理
            /** 此处存在替换隐患,暂无好的解决方案(存在多个Name且需要替换的位置不确定时,无解决方案) */
            realName = realName.replace("Name", "Id");
          } else {
            // 过滤
            // eslint-disable-next-line array-callback-return
            return;
          }
        }
        sValue[realName] = masterData[realName];
        if (
          btnName.toLowerCase().endsWith("choosedate") &&
          realName.length > 0 &&
          realName.substring(0, 1) === "p"
        ) {
          const tStartDate = moment(sValue[realName][0]).format(
            this.sDateFormat
          );
          const tEndDate = moment(sValue[realName][1])
            .add(1, "days")
            .format(this.sDateFormat);
          sValue[realName][0] = tStartDate;
          sValue[realName][1] = tEndDate;
        }
        valueKey += `${realName},`;
      });
      sValue.valueKey = valueKey;
    }
    sValue.textareaValue = this.state.textareaValue;
    if (btnName.indexOf("BtnRepair") > -1) {
      const btnConfig = this.props.masterConfig.gdsconfigformslave.filter(
        item => item.sControlName === btnName
      )[0];
      if (commonUtils.isNotEmptyObject(btnConfig)) {
        this.props.onBtnEent(btnConfig, btnName, sValue);
      }
      if (btnName.toLowerCase().endsWith("choosedate")) {
        const iIndex = slaveMemoConfig.findIndex(
          item => item.sName === "pChooseDate"
        );
        if (iIndex > -1) {
          /* 日期凭证调用存储过程后清除时间区间 */
          masterData.pChooseDate = null;
        }
      }
    } else if (btnName.indexOf("BtnForceComplete") > -1) {
      this.props.onGetMemo(
        name,
        sValue,
        sMemoField,
        sRecord,
        bVisibleMemo,
        btnName
      );
    } else {
      this.props.onGetMemo(
        name,
        this.state.textareaValue,
        sMemoField,
        sRecord,
        bVisibleMemo,
        btnName
      );
    }
    this.bInit = true;
  };
  handleSlaveMemoMasterChange = async (
    name,
    sFieldName,
    changeValue,
    sId,
    dropDownData,
    isWait,
    masterDataNew
  ) => {
    const { masterData: masterDataOld, enabled } = this.props;
    const addState = { enabled };
    const masterData =
      masterDataNew === undefined
        ? masterDataOld === undefined
          ? {}
          : masterDataOld
        : masterDataNew;
    const returnData = await this.props.onChange(
      name,
      sFieldName,
      changeValue,
      sId,
      dropDownData,
      true,
      masterData
    );
    if (isWait) {
      return { ...returnData, ...addState };
    } else {
      this.props.onSaveState({ ...returnData, ...addState });
      return returnData;
    }
  };

  handleCancel = () => {
    this.bInit = true;
    this.props.onGetMemoCancel();
  };
  /* 设置textareaValue */
  handleTextareaChange(e) {
    this.setState({
      textareaValue: e.target.value
    });
  }
  handleViewClick = (name, sName, sId) => {
    this.props.onViewClick(name, sName, sId);
  };
  /**   渲染   */
  render() {
    const {
      sCurrMemoProps,
      masterData,
      app,
      sModelsId,
      form,
      slaveMemoConfig
    } = this.props;
    let bVisibleMemo;
    let sMemoField;
    let btnName = "";
    const sDetailTitle =   commonFunc.showLocalMessage(props, 'sDetailTitle', '详细');
    const title = sDetailTitle;
    let bEnabledTextArea = false; /* 多行文本默认可输入 非编辑状态多行文本禁止输入 */
    if (commonUtils.isNotEmptyObject(sCurrMemoProps)) {
      bVisibleMemo = sCurrMemoProps.bVisibleMemo;
      sMemoField = sCurrMemoProps.sMemoField;
      btnName = sCurrMemoProps.btnName ? sCurrMemoProps.btnName : "";
      if (sCurrMemoProps.bOnlyShow !== undefined) {
        /* 查看状态下备注弹窗只能查看不能修改 */
        bEnabledTextArea = sCurrMemoProps.bOnlyShow;
      }
    }
    let bVisibleTextArea = true;
    if (commonUtils.isNotEmptyArr(slaveMemoConfig)) {
      if (slaveMemoConfig[0].sName === "sDevelopMemo") {
        bVisibleTextArea = false; /* 开发备注多行文本不显示 */
      }
    }
    // const tStartDate = moment(); /* 开始时间 */
    // 判断是否备注双击弹出的弹窗
    // if (fromToorBar) {
    //   bVisibleMemo = false;
    // }
    const formItemLayout = { labelCol: { span: 6 }, wrapperCol: { span: 18 } };
    return (
      <div>
        {bVisibleMemo ? (
          <AntdDraggableModal
            className="mesCommonModal slaveMemo"
            zIndex={1000}
            title={title}
            visible={bVisibleMemo}
            onOk={this.handleOk}
            width={btnName.toLowerCase().endsWith("choosedate") ? 778 : "70%"}
            bodyStyle={{
              height: "60vh"
            }}
            onCancel={this.handleCancel}
            footer={
              <Space>
                {/* <Button size="large" onClick={this.handleCancel}>
                  取消
                </Button> */}
                <Button size="large" type="primary" onClick={this.handleOk}>
                  关闭
                </Button>
              </Space>
            }
          >
            <div className="slaveMemoForm">
              {btnName.indexOf("BtnRepair") > -1 ? (
                <Form>
                  <FormItem>
                    {commonUtils.isNotEmptyArr(slaveMemoConfig)
                      ? slaveMemoConfig.map(child => {
                          const sMemo = child.sName
                            .toLowerCase()
                            .endsWith("memo");
                          let enabledNew = !child.bReadonly;
                          const iColValue = sMemo ? 21 : child.iColValue * 6;
                          if (child.iTag === 1) {
                            enabledNew = false;
                          } else if (child.iTag === 3) {
                            enabledNew = true;
                          }
                          const showTypeProps = {
                            app,
                            iColValue,
                            record: masterData,
                            name: "master",
                            form,
                            formId: sModelsId,
                            getSqlDropDownData: this.props.getSqlDropDownData,
                            getSqlCondition: this.props.getSqlCondition,
                            handleSqlDropDownNewRecord: this.props
                              .handleSqlDropDownNewRecord,
                            getFloatNum: this.props.getFloatNum,
                            getDateFormat: this.props.getDateFormat,
                            onChange: this.handleSlaveMemoMasterChange,
                            showConfig: child,
                            formItemLayout,
                            textArea: sMemo,
                            enabled: enabledNew,
                            dataValue: masterData
                              ? masterData[child.sName]
                              : undefined,
                            bTable: false,
                            onFilterDropDownData: this.props
                              .onFilterDropDownData,
                            onViewClick: this.handleViewClick,
                            onSaveState: this.props.onSaveState,
                            style: { backgroundColor: "#eaeaea" },
                            bInSlaveMemo: true
                          };
                          return <ShowType {...showTypeProps} />;
                        })
                      : ""}
                  </FormItem>
                </Form>
              ) : (
                ""
              )}
              {sMemoField !== undefined &&
              !btnName.toLowerCase().endsWith("choosedate") ? (
                <TextArea
                  value={this.state.textareaValue}
                  maxLength={this.max}
                  minLength={this.min}
                  rows={18}
                  style={{ display: bVisibleTextArea ? "block" : "none" }}
                  onChange={this.handleTextareaChange}
                  disabled={bEnabledTextArea}
                />
              ) : null}
            </div>
          </AntdDraggableModal>
        ) : (
          ""
        )}
      </div>
    );
  }
}

const SlaveMemo = props => {
  const { sCurrMemoProps = {} } = props;
  const { bVisibleMemo } = sCurrMemoProps;
  if (!bVisibleMemo) return "";

  return <SlaveMemoRc {...props} />;
};

export default SlaveMemo;