import React, { useState, useRef, useEffect,useImperativeHandle } from "react"; import { connect } from "react-redux"; import { Modal, Form, Row, Col, Spin } from "@douyinfe/semi-ui"; import { IconTickCircle } from "@douyinfe/semi-icons"; import moment from "moment"; function nvrModal(props) { const { modalName ,nvrRef} = props; const { dispatch, actions, vender, close } = props; const nvrData = props.nvrData || {}; //修改时传来的值 const form = useRef(); const [visible, setVisible] = useState(false); //是否显示弹框 const [isloading, setloading] = useState(false); //是否显示loading const [loadingTip, setloadingTip] = useState("获取中...请稍后..."); //loading tip的值 const [step, setstep] = useState("none"); //第几步 const [okText, setokText] = useState("测试校验"); //ok弹框text 右边 const [cancelText, setcancelText] = useState("取消"); //取消弹框text 左边 const [formObj, setformObj] = useState(); //接口入参 function showDialog() { //打开弹框 setVisible(true); } function positionForm(val) { let zz = /^(-?\d+)(\.\d+)?$/; if (!val) { return "请输入或拾取高德经纬度坐标"; } else if (val.split(",").length != 2) { return "请输入格式为116.354169,39.835452的经纬度坐标"; } else if (!zz.test(val.split(",")[0])) { return "只能填写数字"; } else if (!zz.test(val.split(",")[1])) { return "只能填写数字"; } else { return ""; } } function handleOk() { //点击弹框确定 右边按钮 if (step == "none") { form.current .validate() .then((values) => { //表单校验 console.log(values) let valuesObj = JSON.parse(JSON.stringify(values)); valuesObj.longitude = values.position.split(",")[0]; valuesObj.latitude = values.position.split(",")[1]; delete valuesObj.position; if (nvrData.id) { valuesObj.id = nvrData.id; } var front = new moment(); //验证前时间 setloading(true); dispatch( actions.equipmentWarehouse.getCheck({ serialNo: valuesObj.serialNo, }) ).then((res) => { var after = new moment(); //验证后时间 var duration = moment.duration(after.diff(front))._data.milliseconds; if (res.success) { setTimeout( () => { setloadingTip("已完成"); setTimeout(() => { setstep("block"); setloading(false); setokText("确认"); setcancelText("上一步"); setloadingTip("获取中...请稍后..."); }, 1000); }, duration > 2000 ? 0 : 2000 - duration ); } else { setTimeout( () => { setloadingTip("校验失败"); setTimeout(() => { setstep("none"); setloading(false); setokText("测试校验"); setcancelText("取消"); setloadingTip("获取中...请稍后..."); }, 1000); }, duration > 2000 ? 0 : 2000 - duration ); } }); setformObj(valuesObj); }) .catch((errors) => { //表单校验失败 console.log("errors", errors); }); } else { dispatch(actions.equipmentWarehouse.addchangeNvr(formObj)).then((res) => { setVisible(false); close(); }); } } function handleAfterClose() { //在关闭之后 setstep("none"); setokText("测试校验"); setcancelText("取消"); } function handleCancel() { //点击弹框取消 左边按钮 if (step == "none") { setVisible(false); } else { setstep("none"); setokText("测试校验"); setcancelText("取消"); } } function handleLocation() { //高德经纬度 window.open("https://lbs.amap.com/tools/picker", "_blank"); } useImperativeHandle(nvrRef, () => ({ //传给父组件方法 //aa即为子组件暴露给父组件的方法 nvrNumber: ()=>formObj.serialNo })); return ( <>
{modalName == "add" ? "添加NVR" : "修改"}
console.log(values)} getFormApi={(formApi) => (form.current = formApi)} > `${value}`.replace(/\D/g, "")} hideButtons={true} maxLength="15" field="regionCode" label="行政区区码:" initValue={nvrData.regionCode || ""} placeholder="请输入行政区区码" style={{ width: 149 }} /> {vender.map((item, index) => ( {item.name} ))}
已完成NVR设备测试和校验,是否确认添加?
); } function mapStateToProps(state) { const { auth, global, members, vender } = state; return { loading: members.isRequesting, user: auth.user, actions: global.actions, members: members.data, vender: vender.data || [], //设备厂家 }; } export default connect(mapStateToProps)(nvrModal);