import React, { useEffect } from "react"; import { decorator } from 'grey-react-box'; import { Form } from 'kts-components-antd-x3'; import { FormComponentProps } from 'kts-components-antd-x3/lib/form'; import Invoice from '../../..'; import './index.less'; import { Cascader, Col, DatePicker, Input, Row, Select } from "kts-components-antd-x4"; import moment from "moment"; const { RangePicker } = DatePicker; export interface RealEstateInfoProps { /** * 不动产地址数据 */ realEstateAddressOptions?: any[]; /** * 不动产地址数据字段名 */ realEstateAddressFieldNames?: any; } /** 特殊信息-不动产销售 */ export default decorator(Form.create())(props => { /** 控制器 */ const controller = Invoice.useInvoiceController(); const { form } = props; const { getFieldDecorator } = form; const model = controller.useMemo(s => s.model, []); const readOnly = React.useMemo(() => model === 'readOnly', [model]); const goodsList = controller.useMemo(s => s.goodsListState.goodsList, []); const indexRef = React.useRef([]); useEffect(() => { const dd = goodsList?.reduce((acc: any, cur: any) => { if (cur.lineAttribute !== 1) { acc.push(cur.$index) } return acc }, []) indexRef.current = dd; }, [goodsList, indexRef]) // 注册 form controller.useForm('realEstateSales', form); const getList = () => { const decrease = indexRef.current.length > goodsList.length if (decrease) { //已删行列表 const diff = indexRef.current.filter((item: any) => !goodsList.find(i => i.$index === item)); const formData: any[] = form.getFieldValue('realEstateDataDto'); if (Array.isArray(formData) && diff.length > 0) { const newForm = formData?.filter(item => !diff.find((i: any) => i === item.$index)); form.setFieldsValue({ realEstateDataDto: newForm }); } else { form.setFieldsValue({ realEstateDataDto: undefined }); } } return goodsList.filter(item=>item.lineAttribute !== 1).map((item, index) => { if (item.lineAttribute !== 1) { return {getFieldDecorator(`realEstateDataDto[${index}].unitCode`, { rules: readOnly ? [] : [] })( readOnly ? : )} {getFieldDecorator(`realEstateDataDto[${index}].contractNumber`, { rules: readOnly ? [] : [] })( readOnly ? : )} {getFieldDecorator(`realEstateDataDto[${index}].$index`, { initialValue: item.$index, })( )} {/* {getFieldDecorator(`realEstateDataDto[${index}].type`, { rules: readOnly ? [] : [] })( readOnly ? : )} */} {getFieldDecorator(`realEstateDataDto[${index}].realEstateAddress`, { rules: readOnly ? [] : [{ required: true, message: '请选择不动产地址' }] })( readOnly ? () : () )} {getFieldDecorator(`realEstateDataDto[${index}].realEstateDetailedAddress`, { rules: readOnly ? [] : [ { required: true, message: '请输入详细地址' }, { max: 60, message: '详细地址最多60个字符' }, { validator: async (_, value, callback) => { const pattern = /街|路|村|乡|镇|道|巷|号/; if (pattern.test(value)) { callback() } else { callback('地址必须包含“街”、“路”、“村”、“乡”、“镇”、“道”、“巷”、“号”等任意一个关键词') } } } ] })( readOnly ? : )} {getFieldDecorator(`realEstateDataDto[${index}].crossCitiesSign`, { rules: readOnly ? [] : [ { required: true, message: '请选择跨地(市)标志' } ] })( readOnly ? : )} {getFieldDecorator(`realEstateDataDto[${index}].landTaxProjNo`, { rules: readOnly ? [] : [] })( readOnly ? : )} {getFieldDecorator(`realEstateDataDto[${index}].approvedTaxableAmount`, { rules: readOnly ? [] : [] })( readOnly ? : )} {getFieldDecorator(`realEstateDataDto[${index}].tradedIncludeAmount`, { rules: readOnly ? [] : [] })( readOnly ? : )} {getFieldDecorator(`realEstateDataDto[${index}].realEstateNumber`, { rules: readOnly ? [] : [ { max: 40, message: '证书编号最多40个字符' }, ] })( readOnly ? : )} {getFieldDecorator(`realEstateDataDto[${index}].unit`, { rules: readOnly ? [] : [{ required: true, message: '请选择面积单位' }] })( readOnly ? : )} } }) } return (
特定信息-不动产销售
{getList()}
) }) class MyDiv extends React.Component<{ value?: string, style?: React.CSSProperties }> { render(): React.ReactNode { return (
{this.props.value}
) } } class MyArrString extends React.Component<{ value?: string[], style?: React.CSSProperties }> { render(): React.ReactNode { return (
{ this.props.value?.filter(e => !!e) .join(',') }
) } } class MyArrMoment extends React.Component<{ value?: moment.Moment[], style?: React.CSSProperties }> { render(): React.ReactNode { const { value = [] } = this.props return (
{moment.isMoment(value[0]) && value[0].format('YYYY-MM-DD')} - {moment.isMoment(value[1]) && value[0].format('YYYY-MM-DD')}
) } } class MyNY extends React.Component<{ value?: 'Y' | 'N', style?: React.CSSProperties }> { render(): React.ReactNode { return (
{ this.props.value === 'Y' ? '是' : '否' }
) } }