Commit b91a4321 authored by cellee's avatar cellee

Signed-off-by: cellee <893264950@qq.com>

parent 93a133a8
......@@ -8,6 +8,7 @@ import {
Button,
TimePicker,
Checkbox,
Upload,
message,
Spin,
Modal,
......@@ -22,9 +23,8 @@ import { village } from '@/utils/tip';
import moment from 'moment';
import { getNumber } from '@/utils/string'; // 正则
import PictureOptionsRow from '@/components/PictureOptions/PictureOptionsRow'; // banner 上传
import Facilities from '@/components/Form/ZipCode'; // 小区邮编地址名称
import PdfUpload from '@/components/Form/PdfUpload'; // 多图上传
import FileViewer from 'react-file-viewer';
import PDF from 'react-pdf-js';
const { RangePicker } = TimePicker;
......@@ -37,22 +37,23 @@ const Adds = (props: any) => {
const [PropertyFee, setPropertyFee] = useState(['1']); // 表单物业费提交值
// 监听用户填写小区名 以及后续禁止输入 提示信息
const [codename, setCodeName] = useState(null);
const [tips, setTips] = useState([false, false, false]); // 三个自定义上传的提示
const [loubaUpload, setLouba] = useState([] as any); // 楼巴上传列表
const [guideUpload, setGuide] = useState([] as any); // 物业办事指南列表
const [periodUpload, setPeriod] = useState([] as any); // 保质期服务列表
// const [codeStrat, setcodeStrat] = useState(false);
// const [tipMain, setTipMain] = useState('');
// 监听用户填写小区名 以及后续禁止输入 提示信息
const [codename, setCodeName] = useState('');
const [codeStrat, setcodeStrat] = useState(false);
const [tipMain, setTipMain] = useState('');
// const [previewVisible, setpreviewVisible] = useState(false); // 预览弹窗显示隐藏
// const [previewImage, setpreviewImage] = useState({} as any); // 预览图片信息
const [previewVisible, setpreviewVisible] = useState(false); // 预览弹窗显示隐藏
const [previewImage, setpreviewImage] = useState({} as any); // 预览图片信息
// //pdf 页码内容
// const [numPages, setNumPages] = useState(1 as any); // 总页码数
// const [pageNumber, setPageNumber] = useState(1); // 当前页码数
//pdf 页码内容
const [numPages, setNumPages] = useState(1 as any); // 总页码数
const [pageNumber, setPageNumber] = useState(1); // 当前页码数
// const [imgLoad, setimgLoad] = useState(false); //图片上传 load状态
const [imgLoad, setimgLoad] = useState(false); //图片上传 load状态
// 赋值
useEffect(() => {
......@@ -89,13 +90,13 @@ const Adds = (props: any) => {
},
});
// 上传
// setLouba(Data.balouscheduleUrl ? [backUpload(Data.balouscheduleUrl, Data.id)] : []);
// setGuide(Data.serviceGuideUrl ? [backUpload(Data.serviceGuideUrl, Data.id)] : []);
setLouba(Data.balouscheduleUrl ? [backUpload(Data.balouscheduleUrl, Data.id)] : []);
setGuide(Data.serviceGuideUrl ? [backUpload(Data.serviceGuideUrl, Data.id)] : []);
// setPeriod(Data.lifeServiceUrl ? [backUpload(Data.lifeServiceUrl, Data.id)] : []);
// 小区名 -- 上传需要
setCodeName(Data.residentialName);
// setcodeStrat(true);
// setTipMain('Binding Content Already Exists, Cannot Be Modified!');
setcodeStrat(true);
setTipMain('Binding Content Already Exists, Cannot Be Modified!');
} else {
// console.log('新建');
}
......@@ -130,6 +131,104 @@ const Adds = (props: any) => {
}
}, [imgUrl]);
// 编辑 返回上传格式 和 地址
function backUpload(str: any, index: number, url?: any) {
let a = {
uid: str + index,
name: str,
status: 'done',
type: str.match(/\.([^\.]+)$/)[1].toLowerCase(),
url: 'Transfer', // 需要调取接口
};
return a;
}
// 上传设置
const uploads = {
name: 'file',
accept: '.jpg,.png,.pdf',
action: '/tos/image/upload',
data: { imageType: 'tosCreateCommunity', extends: codename },
};
// 文件上传判断
function beforeUpload(file: any) {
// 文件大小判断
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isLt2M) {
message.error('File must be less than or equal to 2MB!');
}
return isLt2M;
}
// 上传返回格式
function BackFormat(name: any, url: any) {
let imgs = [
{
uid: '-1',
name: name,
status: 'done',
type: name.match(/\.([^\.]+)$/)[1].toLowerCase(),
url: url,
},
];
return imgs;
}
// 楼巴上传
const upload1 = {
onChange({ file }: any) {
file.status === 'uploading' ? setimgLoad(true) : setimgLoad(false);
if (file.status === 'done') {
let data = file.response.data;
setLouba(BackFormat(data.imageName, data.url));
setcodeStrat(true);
setTipMain('Binding Content Already Exists, Cannot Be Modified!');
}
// 结果
uploadMsg(file);
},
};
// 指南上传
const upload2 = {
onChange({ file, fileList }: any) {
file.status === 'uploading' ? setimgLoad(true) : setimgLoad(false);
if (file.status === 'done') {
let data = file.response.data;
setGuide(BackFormat(data.imageName, data.url));
setcodeStrat(true);
setTipMain('Binding Content Already Exists, Cannot Be Modified!');
}
// 结果
uploadMsg(file);
},
};
// 保质期上传
// const upload3 = {
// onChange({ file }: any) {
// file.status === 'uploading' ? setimgLoad(true) : setimgLoad(false);
// if (file.status === 'done') {
// let data = file.response.data;
// setPeriod(BackFormat(data.imageName, data.url));
// setcodeStrat(true);
// setTipMain('Binding Content Already Exists, Cannot Be Modified!');
// }
// // 结果
// uploadMsg(file);
// },
// };
// 上传提示
function uploadMsg(file: any) {
if (file.status === 'done') {
// message.success(`${file.name} File Uploaded Successfully`);
} else if (file.status === 'error') {
message.error(`${file.name} File Upload Failed.`);
}
}
// 多选选择改变值
function onChange(checkedValues: any) {
// 修改选择值
......@@ -145,98 +244,78 @@ const Adds = (props: any) => {
}
}
// 提取pdf地址文件名出来
const pickUp = (list: any) => {
let newArr = [];
// 如果存在
if (list) {
//循环一次
for (let i in list) {
// 判断有没有错误
if (list[i].name == '' || list[i].fileList.length == 0) {
return '错误';
} else {
let name = list[i].name;
let page = list[i].fileList;
//再循环拼接
for (let v in page) {
name += '&' + page[v].name;
}
newArr.push(name);
}
}
return newArr;
// 表单验证
const onFinish = (values: any) => {
let { residentialZipCode } = values.des;
let tel = values.info.tel;
if (values.residentialManagerUserName.length < 2) {
message.error('Please Enter 2-digit Administrator Name!');
} else if (residentialZipCode.length < 6) {
message.error('Please Enter The Correct Name!');
} else if (tel.length != 8 && tel.length != 11) {
message.error('Incorrect Contact Information!');
} else {
return null;
onUpDate(values);
}
};
// 表单提交
function onFinish(values: any) {
let mainPdfList = pickUp(values.mainPdfList);
let essentialPdfList = pickUp(values.essentialPdfList);
if (mainPdfList == '错误') {
let a = tips;
a[0] = true;
setTips([...a]);
return false;
} else if (essentialPdfList == '错误') {
let b = tips;
b[1] = true;
setTips([...b]);
return false;
}
function onUpDate(values: any) {
// 额外判断
let obj: any = new Object();
obj.propertyFee = PropertyFee;
// 小区信息;
let { residentialZipCode, residentialAddress, residentialName } = values.des;
values.residentialZipCode = `SINGAPORE ${residentialZipCode}`;
values.residentialAddress = residentialAddress;
values.residentialName = residentialName;
// 支付方式
values.propertyFee = PropertyFee.join('');
obj.residentialZipCode = `SINGAPORE ${residentialZipCode}`;
obj.residentialAddress = residentialAddress;
obj.residentialName = residentialName;
// 小区时间与管理员
values.residentialManagerUserName = undeFi(values.residentialManagerUserName);
values.residentialStartWorking = values.workingHours[0].format('HH:mm');
values.residentialEndWorking = values.workingHours[1].format('HH:mm');
obj.residentialManagerUserName = undeFi(values.residentialManagerUserName);
obj.residentialStartWorking = values.workingHours[0].format('HH:mm');
obj.residentialEndWorking = values.workingHours[1].format('HH:mm');
obj.residentialPhone = values.info.tel;
obj.residentialEmail = values.info.email;
// 上传内容
values.bannerUrl = values.bannerUrl ? values.bannerUrl.join('') : null;
values.mainPdfList = pickUp(values.mainPdfList);
values.essentialPdfList = pickUp(values.essentialPdfList);
// values.formsPdfList = pickUp(values.formsPdfList);
obj.balouscheduleUrl = undeFi(loubaUpload.map((item: any) => item.name)[0]);
obj.serviceGuideUrl = undeFi(guideUpload.map((item: any) => item.name)[0]);
// obj.lifeServiceUrl = undeFi(periodUpload.map((item: any) => item.name)[0]);
// 小区热线
let { residentialHotline, residentialHotlineName, time } = values.help;
// 没选的话就上面小区联系人和方式
values.residentialHotline = residentialHotline
? undeFi(residentialHotline)
: values.residentialPhone;
values.residentialHotlineName = residentialHotlineName
? undeFi(residentialHotlineName)
: values.residentialManagerUserName;
// 没选的话就上面小区时间
if (time) {
values.residentialHotlineServieStartTime = undeFi(time[0].format('HH:mm'));
values.residentialHotlineServieEndTime = undeFi(time[1].format('HH:mm'));
// 表单结构存在数据不存在情况, 所以要多判断一次
if (values.help) {
obj.residentialHotlineName = values.help.residentialHotlineName
? undeFi(values.help.residentialHotlineName)
: 'Community Hotline';
obj.residentialHotline = values.help.residentialHotline
? undeFi(values.help.residentialHotline)
: values.info.tel;
// 编辑的时候 为空 判断
if (values.help.time) {
obj.residentialHotlineServieStartTime = undeFi(values.help.time[0]).format('HH:mm');
obj.residentialHotlineServieEndTime = undeFi(values.help.time[1]).format('HH:mm');
} else {
obj.residentialHotlineServieStartTime = values.workingHours[0].format('HH:mm');
obj.residentialHotlineServieEndTime = values.workingHours[1].format('HH:mm');
}
} else {
values.residentialHotlineServieStartTime = values.workingHours[0].format('HH:mm');
values.residentialHotlineServieEndTime = values.workingHours[1].format('HH:mm');
obj.residentialHotlineName = values.info.tel;
obj.residentialHotline = values.info.tel;
obj.residentialHotlineServieStartTime = values.workingHours[0].format('HH:mm');
obj.residentialHotlineServieEndTime = values.workingHours[1].format('HH:mm');
}
delete values.des;
delete values.help;
delete values.workingHours;
if (Data) {
values.id = Data.id;
obj.id = Data.id;
}
console.log(values);
console.log(obj);
// 上传
RA(63, values, 'CellList', dispatch);
RA(29, obj, 'CellList', dispatch);
}
// 返回
......@@ -244,11 +323,10 @@ const Adds = (props: any) => {
history.go(-1);
};
// 小区名输入监听赋值
function insdInp(value: any) {
if (value.trim() != '') {
setCodeName(value);
}
// 小区名输入监听ant
function insdInp(value: string) {
setCodeName(value);
return value;
}
// 正则手机号
......@@ -261,28 +339,55 @@ const Adds = (props: any) => {
e.target.value = keyup_tool(e.target.value);
};
// 邮编小区名字验证
const checkPrice = (_: any, value: any) => {
if (!value) {
return Promise.reject('Please fill in the basic information !');
}
if (!value.residentialZipCode || value.residentialZipCode.trim() == '') {
return Promise.reject('Please enter the postcode !');
} else if (value.residentialZipCode.length < 6 || !/^\d+$/.test(value.residentialZipCode)) {
return Promise.reject('Wrong zip code !');
} else if (
!value.residentialAddress ||
value.residentialAddress.trim() == '' ||
value.residentialAddress.length < 2
) {
return Promise.reject('Please enter the address of the community !');
} else if (!value.residentialName || value.residentialName.trim() == '') {
return Promise.reject('Please enter the community name !');
// 上传按钮
const uploadButton = (
<div>
{imgLoad ? <LoadingOutlined /> : <PlusOutlined />}
<div style={{ marginTop: 8 }}>Upload</div>
</div>
);
// 文件预览
const handlePreview = async (file: any) => {
if (file.url == 'Transfer') {
// 这是编辑的预览, 需要发送一个请求
let msg = {
// userToken: '',
// type: ans.substr(ans.lastIndexOf('.') + 1),
type: 'tosCommunityFileService',
fileName: file.name,
extends: Data.residentialName,
};
RA(47, msg, module, dispatch);
} else {
return Promise.resolve();
setpreviewImage(file);
setpreviewVisible(true);
}
};
// 点击移除图片
const handRemove = (key: any) => {
key == 1 ? setLouba([]) : key == 2 ? setGuide([]) : setPeriod([]);
};
// 点击遮罩回调
const handleCancel = () => {
setpreviewVisible(false);
// 每次关闭预览都要清掉弹窗图片信息 -- 防止编辑打开页面直接弹出窗口
setpreviewImage({});
dispatch({ type: module + '/urlRemove' });
};
// pdf 总页数
const onDocumentLoadSuccess = (pages: any) => {
setNumPages(pages);
};
// 切换pdf 总数
const onChangePage = (page: any) => {
setPageNumber(page);
};
return (
<>
<Spin spinning={loading} tip="loading..." size="large">
......@@ -306,21 +411,49 @@ const Adds = (props: any) => {
labelAlign="left"
scrollToFirstError={true}
>
{/* 小区邮编、地址和名称 */}
<Form.Item
name="des"
label="Community Name"
rules={[{ validator: checkPrice }]}
style={{ marginBottom: 15 }}
name="des"
rules={[{ required: false }]}
className="must"
>
<Facilities
insdInps={(value: any) => {
insdInp(value);
}}
/>
<Input.Group compact>
<Form.Item name={['des', 'residentialZipCode']} noStyle rules={village[0] as any}>
<Input
style={{ marginRight: '10px', width: 120 }}
placeholder="6 Postcode"
maxLength={6}
onKeyUp={keyup_communityManagerFee}
/>
</Form.Item>
<Form.Item name={['des', 'residentialAddress']} noStyle rules={village[1] as any}>
<Input
style={{ width: '360px' }}
placeholder="Please enter community adds"
disabled={codeStrat}
/>
</Form.Item>
<div className="li">
<Form.Item
name={['des', 'residentialName']}
normalize={insdInp}
noStyle
rules={village[2] as any}
>
<Input
style={{ marginRight: '10px', width: '260px' }}
placeholder="Please enter community name"
disabled={codeStrat}
/>
</Form.Item>
{/* 不可修改提示 */}
<span className="redFs">{tipMain}</span>
</div>
</Input.Group>
</Form.Item>
{/* 小区时间 */}
<Form.Item label="Working Hours" name="workingHours" rules={village[3] as any}>
<RangePicker
minuteStep={60}
......@@ -328,32 +461,40 @@ const Adds = (props: any) => {
placeholder={['Start Time', 'End Time']}
/>
</Form.Item>
{/* 小区联系方式 */}
<Form.Item
name="residentialPhone"
label="Community Telephone"
rules={village[4] as any}
name="info"
rules={[{ required: false }]}
className="must"
>
<Input
style={{ marginRight: '10px', width: '240px' }}
placeholder="Please enter phone"
maxLength={11}
onKeyUp={keyup_communityManagerFee}
/>
</Form.Item>
{/* 小区邮箱 */}
<Form.Item name="residentialEmail" label="Community Mailbox" rules={village[5] as any}>
<Input style={{ width: '240px' }} placeholder="Please enter email" />
<Input.Group compact>
<Form.Item name={['info', 'tel']} noStyle rules={village[4] as any}>
<Input
style={{ marginRight: '10px', width: '160px' }}
placeholder="Please enter phone"
maxLength={11}
onKeyUp={keyup_communityManagerFee}
/>
</Form.Item>
<Button type="text">-</Button>
<Form.Item name={['info', 'email']} noStyle rules={village[5] as any}>
<Input
style={{ marginLeft: '10px', width: '180px' }}
placeholder="Please enter email"
/>
</Form.Item>
</Input.Group>
</Form.Item>
{/* 小区管理员 */}
<Form.Item
label="Administrator"
name="residentialManagerUserName"
rules={village[6] as any}
>
<Input style={{ width: '240px' }} placeholder="Please enter name" maxLength={30} />
<Input style={{ width: '160px' }} placeholder="Name" maxLength={30} />
</Form.Item>
{/* 小区缴费方式 */}
<Form.Item label="Property Fee" name="propertyFee" style={{ marginBottom: '0' }}>
<Checkbox onChange={onChange} disabled>
Online Payment
......@@ -362,75 +503,80 @@ const Adds = (props: any) => {
Offline Payment
</Checkbox>
</Form.Item>
<hr />
{/* banner上传部分 */}
{/* 上传部分 */}
<Form.Item
name={'bannerUrl'}
label="Banner:"
colon={false}
style={{
marginBottom: 8,
}}
label="Shuttle Bus Timetable"
name="balouscheduleFile"
style={{ marginBottom: '0', minHeight: 159 }}
>
<PictureOptionsRow
action="/tos/image/upload"
data={{
imageType: 'communityBannerImage',
// extends: codename,
}}
limitNums={1}
// imgs={ImageSrc}
/>
<Upload
{...uploads}
{...upload1}
fileList={loubaUpload}
beforeUpload={beforeUpload}
listType="picture-card"
disabled={codename == '' ? true : false}
onPreview={() => handlePreview(loubaUpload[0])} // 预览
onRemove={() => handRemove(1)} //移除
>
{loubaUpload.length >= 1 ? null : uploadButton}
</Upload>
<div className="tip">
<span>Support Files:.jpg, .png, .pdf</span>
</div>
</Form.Item>
{/* 第一个上传 */}
{/* 上传部分 */}
<Form.Item
name={'mainPdfList'}
label="Maintenance Schedule:"
colon={false}
style={{
marginBottom: tips[0] ? 4 : 14,
}}
label="Property Guide"
name="serviceGuideFile"
style={{ marginBottom: '0', minHeight: 159 }}
>
<PdfUpload
action="/tos/community/pdf/upload"
data={{
type: 'tosCommunityPdf',
extends: codename,
}}
></PdfUpload>
<Upload
{...uploads}
{...upload2}
fileList={guideUpload}
beforeUpload={beforeUpload}
listType="picture-card"
disabled={codename == '' ? true : false}
onPreview={() => handlePreview(guideUpload[0])} // 预览
onRemove={() => handRemove(2)} //移除
>
{guideUpload.length >= 1 ? null : uploadButton}
</Upload>
<div className="tip">
<span>Support Files:.jpg, .png, .pdf</span>
</div>
</Form.Item>
{tips[0] ? (
<p style={{ margin: '6px 0 10px 160px', color: '#f00' }}>
Please complete or delete the incomplete part !
</p>
) : (
''
)}
{/* 第二个上传 */}
<Form.Item
name={'essentialPdfList'}
label=" Essential Information:"
colon={false}
style={{
marginBottom: tips[1] ? 4 : 14,
}}
{/* 上传部分 */}
{/* <Form.Item
label="Warranty Period Service"
name="lifeServiceFile"
style={{ marginBottom: '0', minHeight: 159 }}
>
<PdfUpload
action="/tos/community/pdf/upload"
data={{
type: 'tosCommunityPdf',
extends: codename,
}}
></PdfUpload>
</Form.Item>{' '}
{tips[1] ? (
<p style={{ margin: '6px 0 10px 160px', color: '#f00' }}>
Please complete or delete the incomplete part !
</p>
) : (
''
)}
<Upload
{...uploads}
{...upload3}
fileList={periodUpload}
beforeUpload={beforeUpload}
listType="picture-card"
disabled={codename == '' ? true : false}
onPreview={() => handlePreview(periodUpload[0])} // 预览
onRemove={() => handRemove(3)} //移除
>
{periodUpload.length >= 1 ? null : uploadButton}
</Upload>
<div className="tip">
<span>Support Files:.jpg, .png, .pdf</span>
</div>
</Form.Item> */}
<hr />
{/* 帮助中心 */}
<Form.Item label="Help Center" name="help">
<Input.Group compact>
......@@ -450,6 +596,7 @@ const Adds = (props: any) => {
</Form.Item>
</Input.Group>
</Form.Item>
<hr />
{/* 提交 */}
<Form.Item label="" colon={false}>
......@@ -459,6 +606,49 @@ const Adds = (props: any) => {
</Form.Item>
</Form>
</div>
{/* 附件预览 */}
<Modal
title={previewImage != null ? previewImage.name : 'File Preview'}
visible={previewVisible}
width={800}
onCancel={handleCancel}
style={{ textAlign: 'center' }}
footer={null}
>
{previewImage != null ? (
previewImage.type == 'pdf' ? (
// pdf 换一种
<>
<PDF
file={previewImage.url}
page={pageNumber}
scale={1.25}
onDocumentComplete={onDocumentLoadSuccess}
/>
<Pagination
style={{ textAlign: 'center', marginTop: 10, display: 'block' }}
simple
defaultCurrent={pageNumber}
total={numPages * 10}
onChange={onChangePage}
/>
</>
) : previewImage.type == 'jpg' || previewImage.type == 'png' ? (
// 图片用指定格式
<Image
src={previewImage.url}
preview={false}
style={{ margin: '0 auto', textAlign: 'center' }}
/>
) : (
<FileViewer fileType={previewImage.type} filePath={previewImage.url} />
)
) : (
''
)}
</Modal>
</Spin>
</>
);
......@@ -467,6 +657,7 @@ const Adds = (props: any) => {
// export default Adds;
function map(state: any) {
// console.log(state);
const Data = state.CellList.DataSave;
const { imgUrl, Result } = state.CellList;
const loading = state.loading.models.CellList ? state.loading.models.CellList : false;
......
......@@ -8,7 +8,6 @@ import {
Button,
TimePicker,
Checkbox,
Upload,
message,
Spin,
Modal,
......@@ -23,8 +22,9 @@ import { village } from '@/utils/tip';
import moment from 'moment';
import { getNumber } from '@/utils/string'; // 正则
import FileViewer from 'react-file-viewer';
import PDF from 'react-pdf-js';
import PictureOptionsRow from '@/components/PictureOptions/PictureOptionsRow'; // banner 上传
import Facilities from '@/components/Form/ZipCode'; // 小区邮编地址名称
import PdfUpload from '@/components/Form/PdfUpload'; // 多图上传
const { RangePicker } = TimePicker;
......@@ -37,23 +37,22 @@ const Adds = (props: any) => {
const [PropertyFee, setPropertyFee] = useState(['1']); // 表单物业费提交值
const [loubaUpload, setLouba] = useState([] as any); // 楼巴上传列表
const [guideUpload, setGuide] = useState([] as any); // 物业办事指南列表
const [periodUpload, setPeriod] = useState([] as any); // 保质期服务列表
// 监听用户填写小区名 以及后续禁止输入 提示信息
const [codename, setCodeName] = useState('');
const [codeStrat, setcodeStrat] = useState(false);
const [tipMain, setTipMain] = useState('');
const [codename, setCodeName] = useState(null);
const [tips, setTips] = useState([false, false, false]); // 三个自定义上传的提示
// const [codeStrat, setcodeStrat] = useState(false);
// const [tipMain, setTipMain] = useState('');
const [previewVisible, setpreviewVisible] = useState(false); // 预览弹窗显示隐藏
const [previewImage, setpreviewImage] = useState({} as any); // 预览图片信息
// const [previewVisible, setpreviewVisible] = useState(false); // 预览弹窗显示隐藏
// const [previewImage, setpreviewImage] = useState({} as any); // 预览图片信息
//pdf 页码内容
const [numPages, setNumPages] = useState(1 as any); // 总页码数
const [pageNumber, setPageNumber] = useState(1); // 当前页码数
// //pdf 页码内容
// const [numPages, setNumPages] = useState(1 as any); // 总页码数
// const [pageNumber, setPageNumber] = useState(1); // 当前页码数
const [imgLoad, setimgLoad] = useState(false); //图片上传 load状态
// const [imgLoad, setimgLoad] = useState(false); //图片上传 load状态
// 赋值
useEffect(() => {
......@@ -90,13 +89,13 @@ const Adds = (props: any) => {
},
});
// 上传
setLouba(Data.balouscheduleUrl ? [backUpload(Data.balouscheduleUrl, Data.id)] : []);
setGuide(Data.serviceGuideUrl ? [backUpload(Data.serviceGuideUrl, Data.id)] : []);
// setLouba(Data.balouscheduleUrl ? [backUpload(Data.balouscheduleUrl, Data.id)] : []);
// setGuide(Data.serviceGuideUrl ? [backUpload(Data.serviceGuideUrl, Data.id)] : []);
// setPeriod(Data.lifeServiceUrl ? [backUpload(Data.lifeServiceUrl, Data.id)] : []);
// 小区名 -- 上传需要
setCodeName(Data.residentialName);
setcodeStrat(true);
setTipMain('Binding Content Already Exists, Cannot Be Modified!');
// setcodeStrat(true);
// setTipMain('Binding Content Already Exists, Cannot Be Modified!');
} else {
// console.log('新建');
}
......@@ -131,104 +130,6 @@ const Adds = (props: any) => {
}
}, [imgUrl]);
// 编辑 返回上传格式 和 地址
function backUpload(str: any, index: number, url?: any) {
let a = {
uid: str + index,
name: str,
status: 'done',
type: str.match(/\.([^\.]+)$/)[1].toLowerCase(),
url: 'Transfer', // 需要调取接口
};
return a;
}
// 上传设置
const uploads = {
name: 'file',
accept: '.jpg,.png,.pdf',
action: '/tos/image/upload',
data: { imageType: 'tosCreateCommunity', extends: codename },
};
// 文件上传判断
function beforeUpload(file: any) {
// 文件大小判断
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isLt2M) {
message.error('File must be less than or equal to 2MB!');
}
return isLt2M;
}
// 上传返回格式
function BackFormat(name: any, url: any) {
let imgs = [
{
uid: '-1',
name: name,
status: 'done',
type: name.match(/\.([^\.]+)$/)[1].toLowerCase(),
url: url,
},
];
return imgs;
}
// 楼巴上传
const upload1 = {
onChange({ file }: any) {
file.status === 'uploading' ? setimgLoad(true) : setimgLoad(false);
if (file.status === 'done') {
let data = file.response.data;
setLouba(BackFormat(data.imageName, data.url));
setcodeStrat(true);
setTipMain('Binding Content Already Exists, Cannot Be Modified!');
}
// 结果
uploadMsg(file);
},
};
// 指南上传
const upload2 = {
onChange({ file, fileList }: any) {
file.status === 'uploading' ? setimgLoad(true) : setimgLoad(false);
if (file.status === 'done') {
let data = file.response.data;
setGuide(BackFormat(data.imageName, data.url));
setcodeStrat(true);
setTipMain('Binding Content Already Exists, Cannot Be Modified!');
}
// 结果
uploadMsg(file);
},
};
// 保质期上传
// const upload3 = {
// onChange({ file }: any) {
// file.status === 'uploading' ? setimgLoad(true) : setimgLoad(false);
// if (file.status === 'done') {
// let data = file.response.data;
// setPeriod(BackFormat(data.imageName, data.url));
// setcodeStrat(true);
// setTipMain('Binding Content Already Exists, Cannot Be Modified!');
// }
// // 结果
// uploadMsg(file);
// },
// };
// 上传提示
function uploadMsg(file: any) {
if (file.status === 'done') {
// message.success(`${file.name} File Uploaded Successfully`);
} else if (file.status === 'error') {
message.error(`${file.name} File Upload Failed.`);
}
}
// 多选选择改变值
function onChange(checkedValues: any) {
// 修改选择值
......@@ -244,78 +145,98 @@ const Adds = (props: any) => {
}
}
// 表单验证
const onFinish = (values: any) => {
let { residentialZipCode } = values.des;
let tel = values.info.tel;
if (values.residentialManagerUserName.length < 2) {
message.error('Please Enter 2-digit Administrator Name!');
} else if (residentialZipCode.length < 6) {
message.error('Please Enter The Correct Name!');
} else if (tel.length != 8 && tel.length != 11) {
message.error('Incorrect Contact Information!');
// 提取pdf地址文件名出来
const pickUp = (list: any) => {
let newArr = [];
// 如果存在
if (list) {
//循环一次
for (let i in list) {
// 判断有没有错误
if (list[i].name == '' || list[i].fileList.length == 0) {
return '错误';
} else {
let name = list[i].name;
let page = list[i].fileList;
//再循环拼接
for (let v in page) {
name += '&' + page[v].name;
}
newArr.push(name);
}
}
return newArr;
} else {
onUpDate(values);
return null;
}
};
// 表单提交
function onUpDate(values: any) {
// 额外判断
let obj: any = new Object();
obj.propertyFee = PropertyFee;
function onFinish(values: any) {
let mainPdfList = pickUp(values.mainPdfList);
let essentialPdfList = pickUp(values.essentialPdfList);
if (mainPdfList == '错误') {
let a = tips;
a[0] = true;
setTips([...a]);
return false;
} else if (essentialPdfList == '错误') {
let b = tips;
b[1] = true;
setTips([...b]);
return false;
}
// 小区信息;
let { residentialZipCode, residentialAddress, residentialName } = values.des;
values.residentialZipCode = `SINGAPORE ${residentialZipCode}`;
values.residentialAddress = residentialAddress;
values.residentialName = residentialName;
obj.residentialZipCode = `SINGAPORE ${residentialZipCode}`;
obj.residentialAddress = residentialAddress;
obj.residentialName = residentialName;
// 支付方式
values.propertyFee = PropertyFee.join('');
// 小区时间与管理员
obj.residentialManagerUserName = undeFi(values.residentialManagerUserName);
obj.residentialStartWorking = values.workingHours[0].format('HH:mm');
obj.residentialEndWorking = values.workingHours[1].format('HH:mm');
obj.residentialPhone = values.info.tel;
obj.residentialEmail = values.info.email;
values.residentialManagerUserName = undeFi(values.residentialManagerUserName);
values.residentialStartWorking = values.workingHours[0].format('HH:mm');
values.residentialEndWorking = values.workingHours[1].format('HH:mm');
// 上传内容
obj.balouscheduleUrl = undeFi(loubaUpload.map((item: any) => item.name)[0]);
obj.serviceGuideUrl = undeFi(guideUpload.map((item: any) => item.name)[0]);
// obj.lifeServiceUrl = undeFi(periodUpload.map((item: any) => item.name)[0]);
values.bannerUrl = values.bannerUrl ? values.bannerUrl.join('') : null;
values.mainPdfList = pickUp(values.mainPdfList);
values.essentialPdfList = pickUp(values.essentialPdfList);
// values.formsPdfList = pickUp(values.formsPdfList);
// 小区热线
// 表单结构存在数据不存在情况, 所以要多判断一次
if (values.help) {
obj.residentialHotlineName = values.help.residentialHotlineName
? undeFi(values.help.residentialHotlineName)
: 'Community Hotline';
obj.residentialHotline = values.help.residentialHotline
? undeFi(values.help.residentialHotline)
: values.info.tel;
// 编辑的时候 为空 判断
if (values.help.time) {
obj.residentialHotlineServieStartTime = undeFi(values.help.time[0]).format('HH:mm');
obj.residentialHotlineServieEndTime = undeFi(values.help.time[1]).format('HH:mm');
} else {
obj.residentialHotlineServieStartTime = values.workingHours[0].format('HH:mm');
obj.residentialHotlineServieEndTime = values.workingHours[1].format('HH:mm');
}
let { residentialHotline, residentialHotlineName, time } = values.help;
// 没选的话就上面小区联系人和方式
values.residentialHotline = residentialHotline
? undeFi(residentialHotline)
: values.residentialPhone;
values.residentialHotlineName = residentialHotlineName
? undeFi(residentialHotlineName)
: values.residentialManagerUserName;
// 没选的话就上面小区时间
if (time) {
values.residentialHotlineServieStartTime = undeFi(time[0].format('HH:mm'));
values.residentialHotlineServieEndTime = undeFi(time[1].format('HH:mm'));
} else {
obj.residentialHotlineName = values.info.tel;
obj.residentialHotline = values.info.tel;
obj.residentialHotlineServieStartTime = values.workingHours[0].format('HH:mm');
obj.residentialHotlineServieEndTime = values.workingHours[1].format('HH:mm');
values.residentialHotlineServieStartTime = values.workingHours[0].format('HH:mm');
values.residentialHotlineServieEndTime = values.workingHours[1].format('HH:mm');
}
delete values.des;
delete values.help;
delete values.workingHours;
if (Data) {
obj.id = Data.id;
values.id = Data.id;
}
console.log(values);
console.log(obj);
// 上传
RA(29, obj, 'CellList', dispatch);
RA(63, values, 'CellList', dispatch);
}
// 返回
......@@ -323,10 +244,11 @@ const Adds = (props: any) => {
history.go(-1);
};
// 小区名输入监听ant
function insdInp(value: string) {
setCodeName(value);
return value;
// 小区名输入监听赋值
function insdInp(value: any) {
if (value.trim() != '') {
setCodeName(value);
}
}
// 正则手机号
......@@ -339,55 +261,28 @@ const Adds = (props: any) => {
e.target.value = keyup_tool(e.target.value);
};
// 上传按钮
const uploadButton = (
<div>
{imgLoad ? <LoadingOutlined /> : <PlusOutlined />}
<div style={{ marginTop: 8 }}>Upload</div>
</div>
);
// 文件预览
const handlePreview = async (file: any) => {
if (file.url == 'Transfer') {
// 这是编辑的预览, 需要发送一个请求
let msg = {
// userToken: '',
// type: ans.substr(ans.lastIndexOf('.') + 1),
type: 'tosCommunityFileService',
fileName: file.name,
extends: Data.residentialName,
};
RA(47, msg, module, dispatch);
// 邮编小区名字验证
const checkPrice = (_: any, value: any) => {
if (!value) {
return Promise.reject('Please fill in the basic information !');
}
if (!value.residentialZipCode || value.residentialZipCode.trim() == '') {
return Promise.reject('Please enter the postcode !');
} else if (value.residentialZipCode.length < 6 || !/^\d+$/.test(value.residentialZipCode)) {
return Promise.reject('Wrong zip code !');
} else if (
!value.residentialAddress ||
value.residentialAddress.trim() == '' ||
value.residentialAddress.length < 2
) {
return Promise.reject('Please enter the address of the community !');
} else if (!value.residentialName || value.residentialName.trim() == '') {
return Promise.reject('Please enter the community name !');
} else {
setpreviewImage(file);
setpreviewVisible(true);
return Promise.resolve();
}
};
// 点击移除图片
const handRemove = (key: any) => {
key == 1 ? setLouba([]) : key == 2 ? setGuide([]) : setPeriod([]);
};
// 点击遮罩回调
const handleCancel = () => {
setpreviewVisible(false);
// 每次关闭预览都要清掉弹窗图片信息 -- 防止编辑打开页面直接弹出窗口
setpreviewImage({});
dispatch({ type: module + '/urlRemove' });
};
// pdf 总页数
const onDocumentLoadSuccess = (pages: any) => {
setNumPages(pages);
};
// 切换pdf 总数
const onChangePage = (page: any) => {
setPageNumber(page);
};
return (
<>
<Spin spinning={loading} tip="loading..." size="large">
......@@ -411,49 +306,21 @@ const Adds = (props: any) => {
labelAlign="left"
scrollToFirstError={true}
>
{/* 小区邮编、地址和名称 */}
<Form.Item
label="Community Name"
name="des"
rules={[{ required: false }]}
label="Community Name"
rules={[{ validator: checkPrice }]}
style={{ marginBottom: 15 }}
className="must"
>
<Input.Group compact>
<Form.Item name={['des', 'residentialZipCode']} noStyle rules={village[0] as any}>
<Input
style={{ marginRight: '10px', width: 120 }}
placeholder="6 Postcode"
maxLength={6}
onKeyUp={keyup_communityManagerFee}
/>
</Form.Item>
<Form.Item name={['des', 'residentialAddress']} noStyle rules={village[1] as any}>
<Input
style={{ width: '360px' }}
placeholder="Please enter community adds"
disabled={codeStrat}
/>
</Form.Item>
<div className="li">
<Form.Item
name={['des', 'residentialName']}
normalize={insdInp}
noStyle
rules={village[2] as any}
>
<Input
style={{ marginRight: '10px', width: '260px' }}
placeholder="Please enter community name"
disabled={codeStrat}
/>
</Form.Item>
{/* 不可修改提示 */}
<span className="redFs">{tipMain}</span>
</div>
</Input.Group>
<Facilities
insdInps={(value: any) => {
insdInp(value);
}}
/>
</Form.Item>
{/* 小区时间 */}
<Form.Item label="Working Hours" name="workingHours" rules={village[3] as any}>
<RangePicker
minuteStep={60}
......@@ -461,40 +328,32 @@ const Adds = (props: any) => {
placeholder={['Start Time', 'End Time']}
/>
</Form.Item>
{/* 小区联系方式 */}
<Form.Item
name="residentialPhone"
label="Community Telephone"
name="info"
rules={[{ required: false }]}
className="must"
rules={village[4] as any}
>
<Input.Group compact>
<Form.Item name={['info', 'tel']} noStyle rules={village[4] as any}>
<Input
style={{ marginRight: '10px', width: '160px' }}
placeholder="Please enter phone"
maxLength={11}
onKeyUp={keyup_communityManagerFee}
/>
</Form.Item>
<Button type="text">-</Button>
<Form.Item name={['info', 'email']} noStyle rules={village[5] as any}>
<Input
style={{ marginLeft: '10px', width: '180px' }}
placeholder="Please enter email"
/>
</Form.Item>
</Input.Group>
<Input
style={{ marginRight: '10px', width: '240px' }}
placeholder="Please enter phone"
maxLength={11}
onKeyUp={keyup_communityManagerFee}
/>
</Form.Item>
{/* 小区邮箱 */}
<Form.Item name="residentialEmail" label="Community Mailbox" rules={village[5] as any}>
<Input style={{ width: '240px' }} placeholder="Please enter email" />
</Form.Item>
{/* 小区管理员 */}
<Form.Item
label="Administrator"
name="residentialManagerUserName"
rules={village[6] as any}
>
<Input style={{ width: '160px' }} placeholder="Name" maxLength={30} />
<Input style={{ width: '240px' }} placeholder="Please enter name" maxLength={30} />
</Form.Item>
{/* 小区缴费方式 */}
<Form.Item label="Property Fee" name="propertyFee" style={{ marginBottom: '0' }}>
<Checkbox onChange={onChange} disabled>
Online Payment
......@@ -503,80 +362,75 @@ const Adds = (props: any) => {
Offline Payment
</Checkbox>
</Form.Item>
<hr />
{/* 上传部分 */}
{/* banner上传部分 */}
<Form.Item
label="Shuttle Bus Timetable"
name="balouscheduleFile"
style={{ marginBottom: '0', minHeight: 159 }}
name={'bannerUrl'}
label="Banner:"
colon={false}
style={{
marginBottom: 8,
}}
>
<Upload
{...uploads}
{...upload1}
fileList={loubaUpload}
beforeUpload={beforeUpload}
listType="picture-card"
disabled={codename == '' ? true : false}
onPreview={() => handlePreview(loubaUpload[0])} // 预览
onRemove={() => handRemove(1)} //移除
>
{loubaUpload.length >= 1 ? null : uploadButton}
</Upload>
<div className="tip">
<span>Support Files:.jpg, .png, .pdf</span>
</div>
<PictureOptionsRow
action="/tos/image/upload"
data={{
imageType: 'communityBannerImage',
// extends: codename,
}}
limitNums={1}
// imgs={ImageSrc}
/>
</Form.Item>
{/* 上传部分 */}
{/* 第一个上传 */}
<Form.Item
label="Property Guide"
name="serviceGuideFile"
style={{ marginBottom: '0', minHeight: 159 }}
name={'mainPdfList'}
label="Maintenance Schedule:"
colon={false}
style={{
marginBottom: tips[0] ? 4 : 14,
}}
>
<Upload
{...uploads}
{...upload2}
fileList={guideUpload}
beforeUpload={beforeUpload}
listType="picture-card"
disabled={codename == '' ? true : false}
onPreview={() => handlePreview(guideUpload[0])} // 预览
onRemove={() => handRemove(2)} //移除
>
{guideUpload.length >= 1 ? null : uploadButton}
</Upload>
<div className="tip">
<span>Support Files:.jpg, .png, .pdf</span>
</div>
<PdfUpload
action="/tos/community/pdf/upload"
data={{
type: 'tosCommunityPdf',
extends: codename,
}}
></PdfUpload>
</Form.Item>
{/* 上传部分 */}
{/* <Form.Item
label="Warranty Period Service"
name="lifeServiceFile"
style={{ marginBottom: '0', minHeight: 159 }}
{tips[0] ? (
<p style={{ margin: '6px 0 10px 160px', color: '#f00' }}>
Please complete or delete the incomplete part !
</p>
) : (
''
)}
{/* 第二个上传 */}
<Form.Item
name={'essentialPdfList'}
label=" Essential Information:"
colon={false}
style={{
marginBottom: tips[1] ? 4 : 14,
}}
>
<Upload
{...uploads}
{...upload3}
fileList={periodUpload}
beforeUpload={beforeUpload}
listType="picture-card"
disabled={codename == '' ? true : false}
onPreview={() => handlePreview(periodUpload[0])} // 预览
onRemove={() => handRemove(3)} //移除
>
{periodUpload.length >= 1 ? null : uploadButton}
</Upload>
<div className="tip">
<span>Support Files:.jpg, .png, .pdf</span>
</div>
</Form.Item> */}
<PdfUpload
action="/tos/community/pdf/upload"
data={{
type: 'tosCommunityPdf',
extends: codename,
}}
></PdfUpload>
</Form.Item>{' '}
{tips[1] ? (
<p style={{ margin: '6px 0 10px 160px', color: '#f00' }}>
Please complete or delete the incomplete part !
</p>
) : (
''
)}
<hr />
{/* 帮助中心 */}
<Form.Item label="Help Center" name="help">
<Input.Group compact>
......@@ -596,7 +450,6 @@ const Adds = (props: any) => {
</Form.Item>
</Input.Group>
</Form.Item>
<hr />
{/* 提交 */}
<Form.Item label="" colon={false}>
......@@ -606,49 +459,6 @@ const Adds = (props: any) => {
</Form.Item>
</Form>
</div>
{/* 附件预览 */}
<Modal
title={previewImage != null ? previewImage.name : 'File Preview'}
visible={previewVisible}
width={800}
onCancel={handleCancel}
style={{ textAlign: 'center' }}
footer={null}
>
{previewImage != null ? (
previewImage.type == 'pdf' ? (
// pdf 换一种
<>
<PDF
file={previewImage.url}
page={pageNumber}
scale={1.25}
onDocumentComplete={onDocumentLoadSuccess}
/>
<Pagination
style={{ textAlign: 'center', marginTop: 10, display: 'block' }}
simple
defaultCurrent={pageNumber}
total={numPages * 10}
onChange={onChangePage}
/>
</>
) : previewImage.type == 'jpg' || previewImage.type == 'png' ? (
// 图片用指定格式
<Image
src={previewImage.url}
preview={false}
style={{ margin: '0 auto', textAlign: 'center' }}
/>
) : (
<FileViewer fileType={previewImage.type} filePath={previewImage.url} />
)
) : (
''
)}
</Modal>
</Spin>
</>
);
......@@ -657,7 +467,6 @@ const Adds = (props: any) => {
// export default Adds;
function map(state: any) {
// console.log(state);
const Data = state.CellList.DataSave;
const { imgUrl, Result } = state.CellList;
const loading = state.loading.models.CellList ? state.loading.models.CellList : false;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment