/** * 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, message } from 'antd-v4'; 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; export default class SlaveMemo 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 = () => { 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 : ''; if (!Array.isArray(slaveMemoConfig) || !slaveMemoConfig.length) { if (!sCurrMemoProps?.bNoMemo && sMemoField !== undefined && !btnName.toLowerCase().endsWith('choosedate') && !this.state.textareaValue?.trim()) { return message.warning('请填写内容'); } } 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 title = '详细'; let bEnabledTextArea = false; /* 多行文本默认可输入 非编辑状态多行文本禁止输入 */ let bNoMemo = false; if (commonUtils.isNotEmptyObject(sCurrMemoProps)) { bNoMemo = sCurrMemoProps.bNoMemo; 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 (