import React, { useState, useEffect } from 'react'; import { Form, Icon, Input, Button, DatePicker, Select, Card, Row, Col, Pagination, Alert, Radio, Tag, Tooltip, Tabs, InputNumber, notification } from 'antd'; import moment from 'moment'; import { router } from 'umi'; import request from '../../../../../utils/request'; import apis from '../../../../../services/apis'; import Styles from '../style.less'; import ImageUpload from '../../../../../components/XForm/ImageUpload' import ImageListUpload from '../../../../../components/XForm/ImageListUpload' import Wangedit from '../../../../../components/Wangedit/Wangedit' import TagGroup from './tags' import Amap from './amap' import BudildingProjectType from './buildingProjectType' import SelectCity from '../../../../../components/SelectButton/CitySelect' import FileUpload from '@/components/XForm/FileUpload'; import { POI_TYPES_KETY, getAroundData, getPOIType, POI_TYPES } from './amapAroundData' import { ifError } from 'assert'; const { Option } = Select const { TabPane } = Tabs; const formItemLayout = { labelCol: { xs: { span: 24 }, sm: { span: 2 }, }, wrapperCol: { xs: { span: 24 }, sm: { span: 16 }, }, }; function openNotificationWithIcon(type, message) { notification[type]({ message, description: '', }); } function AddBuilding(props) { const { getFieldDecorator } = props.form; const [poi, setPoi] = useState([]) // console.log('props.building: ', props.building) const { buildingId } = props.building // eslint-disable-next-line react-hooks/rules-of-hooks useEffect(() => { if (buildingId && buildingId !== '') { getById(buildingId) } }, [buildingId]) // 获取详情信息 function getById(currentId) { request({ ...apis.building.buildingGetById, urlData: { id: currentId } }).then(res => { if (res.openingDate !== null) { res.openingDate = moment(res.openingDate) } if (res.receivedDate !== null) { res.receivedDate = moment(res.receivedDate) } if (res.buildingTag !== null) { res.tag = res.buildingTag.map((item, _) => item.tagName) } res.avatarImage = res.buildingImg.map(item => item.url) if (res.buildingListImg) { res.listImage = res.buildingListImg.map(item => item.url) } res.mapCoordinate = res.coordinate if (res.videoUrl) { res.videoUrl = [].concat(res.videoUrl) } if (res.videoImage) { res.videoImage = res.videoImage[0].url } // setPoi(res.mapJson || []) props.form.setFieldsValue(res) props.onSuccess(res) }) } function handleSubmit(e) { e.preventDefault(); props.form.validateFieldsAndScroll((err, values) => { if (!err) { addBuilding(values) } }); } function addBuilding(data) { // console.log('poi: ', poi) if (poi.length !== 0) { data.mapJson = poi } data.openingDate = moment(data.openingDate, 'yyyy-MM-dd HH:mm:ss') data.receivedDate = moment(data.receivedDate, 'yyyy-MM-dd HH:mm:ss') // 项目主图 data.img = data.avatarImage && data.avatarImage.map((item, index) => ({ imgType: 'banner', url: item, orderNo: index + 1 })) // 列表图 data.listImg = data.listImage && data.listImage.map((item, index) => ({ imgType: 'list', url: item, orderNo: index + 1 })) if (data.videoUrl) { // console.log(data.videoUrl[0]) data.videoUrl = data.videoUrl[0] } if (data.tag) { data.tag = data.tag.map((item, _) => ({ tagName: item })) } if (data.videoImage) { data.videoImage = [{ imgType: 'videoImage', url: data.videoImage, orderNo: 1 }] } const api = data.buildingId === undefined ? apis.building.addBuilding : apis.building.updateBuilding request({ ...api, data: { ...data } }).then(res => { openNotificationWithIcon('success', '操作成功') // router.go(-1) getById(res.buildingId) }).catch(err => { // openNotificationWithIcon('error', err.message) }) } // 视频文件上传前 回调 function fileUploadBeforeUpload(file, fileList) { // console.log('视频文件上传前 回调: ', file, fileList) return new Promise((resolve, reject) => { if (file.type === 'video/mp4' || file.type === '.mp4') { resolve(file) } else { openNotificationWithIcon('error', '项目视频,仅支持MP4格式') reject() } }) } // 周边设施 回调 function getMapScope(e) { const coordinate = props.form.getFieldValue('coordinate').split(',') const poiData = [].concat(POI_TYPES) poiData.map(item => { getAroundData({ types: item.key, location: `${coordinate[1]},${coordinate[0]}`, radius: e }).then(res => { const { pois } = res setFormMapScopeValue(item.key, pois) }).catch(err => { console.log(err.message) openNotificationWithIcon('error', '周边数据获取失败') }) }) } function setFormMapScopeValue(key, pois) { const poiArray = pois.map(p => { return { address: p.address, adname: p.adname, cityname: p.cityname, distance: p.distance, id: p.id, location: p.location, name: p.name, pname: p.pname, shopinfo: p.shopinfo, type: p.type, typecode: p.typecode, } }) // 设置表单值 getFormMapScopeName(key, { data: poiArray }) const poiData = [].concat(POI_TYPES) const newPoi = poiData.map(m => { if (m.key === key) { m.data = poiArray } return m }) setPoi(newPoi) } function getFormMapScopeName(keyType, item) { switch (keyType) { case POI_TYPES_KETY.Transport: props.form.setFieldsValue({ buildingTransport: item.data.map(t => t.name).join(',') }) return 'buildingTransport'; case POI_TYPES_KETY.Bank: props.form.setFieldsValue({ buildingBank: item.data.map(t => t.name).join(',') }) return 'buildingBank'; case POI_TYPES_KETY.Edu: props.form.setFieldsValue({ buildingEdu: item.data.map(t => t.name).join(',') }) return 'buildingEdu'; case POI_TYPES_KETY.Hospital: props.form.setFieldsValue({ buildingHospital: item.data.map(t => t.name).join(',') }) return 'buildingHospital'; case POI_TYPES_KETY.Restaurant: props.form.setFieldsValue({ buildingRestaurant: item.data.map(t => t.name).join(',') }) return 'buildingRestaurant'; case POI_TYPES_KETY.Mall: props.form.setFieldsValue({ buildingMall: item.data.map(t => t.name).join(',') }) return 'buildingMall'; default: } } return (