/* * @Author: liqiang * @Date: 2021-02-23 13:49:53 * @LastEditTime: 2021-03-25 16:46:14 * @LastEditors: Please set LastEditors * @Description: In User Settings Edit * @FilePath: \ebtp-cloud-frontend\src\pages\Auction\AuctionViewAuctions\components\A.tsx */ import { getURLInformation, isEmpty } from '@/utils/CommonUtils'; import { Button, Col, Divider, Form, Input, message, Modal, Row, Spin, Tabs } from 'antd'; import React, { useEffect, useRef, useState } from 'react'; import ProTable from '@ant-design/pro-table'; import ExtendUpload from '@/utils/ExtendUpload'; import '../../AuctionViewAuctions/auctionParts.less'; import { getProId, getSessionUserData } from '@/utils/session'; import { pictureDisplayPath } from '@/utils/DownloadUtils'; import { algebraicAddition, digitalConversionAmount } from '@/utils/NumberUtils'; import { getFilelist } from '@/services/download_'; import { getAuctionViewAuctions, getRedisBidData, putOrderBidPrice, updatetOnlookers } from '../../AuctionViewAuctions/service'; import AuctionImage from '../../AuctionViewAuctions/components/AuctionImage'; import CountDownUtils from '../../AuctionViewAuctions/components/CountDownUtils'; import { insertBidders } from '../../AuctionLookingForInnerShot/service'; const { TabPane } = Tabs; const layout = { labelCol: { span: 7 }, wrapperCol: { span: 13 }, }; //定时器间隔时间 const timingInterval = 5000; //金额校验正则 保留两位小数 const amountMoney = /^\d{1,15}([.]\d{1,2})?$/; const AuctionViewAuctions: React.FC = () => { //项目id const tpId = isEmpty(getProId()) ? getURLInformation('id') : getProId(); //状态 0围观 1 参拍 const [viewStatus, setViewStatus] = useState(''); //出价数据 const [cjDataSource, setCjDataSource] = useState([]); //起拍价 const [startingPrice, setStartingPrice] = useState(); //公告数据 const [noticeData, setNoticeData] = useState(); //物资数据 const [auctionMaterialsList, setAuctionMaterialsList] = useState([]); //标的物所在地:右侧信息 const [locationOfTheSubjectMatter, setLocationOfTheSubjectMatter] = useState(); const [subjectMatterIntroductionForm] = Form.useForm(); //标的物清单附件bid const [subjectMatterIntroductionBid, setSubjectMatterIntroductionBid] = useState(''); //项目名称 const [projectName, setProjectName] = useState(''); //参拍信息 const [participateData, setParticipateData] = useState(); //当前价 const [currentPrice, setCurrentPrice] = useState(0); //延时次数 const [delay, setDelay] = useState(); //是否结束 const [overFlag, setOverFlag] = useState(false); //是否开始 const [startFlag, setStartFlag] = useState(false); //竞拍数据 const [auctionData, setAuctionData] = useState(); //倒计时剩余时间 const [countDownTime, setCountDownTime] = useState(null); //结束时间 const [endTime, setEndTime] = useState(''); //开始时间 const [startTime, setStartTime] = useState(''); const ref = useRef(); const overFlagRef = useRef(); //图片 const [auctionImage, setAuctionImage] = useState([]); //显示图片 const [auctionImageFlag, setAuctionImageFlag] = useState(false); //控制模态框是否显示 const [isModalVisible, setIsModalVisible] = useState(false); //loading const [loading, setLoading] = useState(false); //form const [form] = Form.useForm(); //当前用户信息 const userData = getSessionUserData(); const cjColumns = [ { title: '序号', valueType: 'index' }, { title: '参拍人', dataIndex: 'supplierId', }, { title: '出价(元)', dataIndex: 'price', }, { title: '出价时间', dataIndex: 'bidTime', }, ]; const wzColumns = [ { title: '所属OU组织', dataIndex: 'organization', }, { title: '物资名称', dataIndex: 'materialName', }, { title: '物料编码', dataIndex: 'materialCode', }, { title: '物资厂家', dataIndex: 'manufacturer', }, { title: '规格型号', dataIndex: 'specification', key: 'specification', }, { title: '库龄', dataIndex: 'reservoirAge', }, { title: '数量', dataIndex: 'amount', }, { title: '计量单位', dataIndex: 'materialUnit', }, { title: '单价', dataIndex: 'unitPrice', }, { title: '统一目录名称', dataIndex: 'directoryName', }, { title: '统一目录编码', dataIndex: 'directoryCode', }, ]; useEffect(() => { init(); setTimeout(() => { //项目已结束 if (overFlagRef.current) { return; } ref.current = setInterval(() => { getRedisBidData(tpId).then(res => { res = res !== null ? res : {}; if (res.code === 200) { let data = res.data; timedRefreshData(data); if (Number(data.jssj) <= 0) { setOverFlag(true); clearInterval(ref.current); } } else { // clearInterval(ref.current); } }) }, timingInterval); }, timingInterval); }, []); const reloadData = () => { getRedisBidData(tpId).then(res => { if (res.code === 200) { let data = res.data; timedRefreshData(data); if (Number(data.jssj) <= 0) { setOverFlag(true); } } }) } const timedRefreshData = (data: any) => { let participateData = [data.cpr, data.cjcs, data.wgr]; getParticipateData(participateData); setCjDataSource(data.cjjl); setCurrentPrice(data.zgjg); setDelay(data.yscs); setCountDownTime(data.jssj); setStartFlag(data.bidOpeningStatus != "0"); } /** * 倒计时结束 */ const countDownOver = () => { setOverFlag(true); } const getParticipateData = (arr: any[]) => { setParticipateData( <> {arr[0]}人参拍 {arr[1]}次出价 {arr[2]}人围观 ) } /** * 初始化 */ const [range, rangeSet] = useState(0)//加价幅度 const init = () => { getAuctionViewAuctions(tpId).then(res => { if (res.code === 200) { let data = res.data; //判断项目是否结束 if (data.yczt) { setOverFlag(data.yczt); overFlagRef.current = data.yczt; } //项目是否开始 setStartFlag(data.bidOpeningStatus != "0"); findFile(data.gg.auctionBdwxcdfzp) setProjectName(data.xm.auction.projectName); setCurrentPrice(data.inner02_04); let participateData = [data.inner02_03.cprsl, data.inner02_03.xmcjcs, data.inner02_03.wgrsl]; getParticipateData(participateData); setDelay(data.inner02_02.yscs); setCjDataSource(data.tab03_01); //状态 0围观 1 参拍 setViewStatus(data.cprdm !== null ? '1' : '0'); setStartingPrice( <> 起拍价:¥{digitalConversionAmount(String(data.gg.auctionJpjg), 2)} 加价幅度:¥{digitalConversionAmount(String(data.gg.auctionJjfd), 2)} 延时周期:{data.gg.auctionYszq}分钟/次 ); rangeSet(Number(data.gg.auctionJjfd));//幅度 // offerAPriceSet(Number(data.inner02_04));//出价 //公告数据 setNoticeData(



竞拍公告附件:
) setAuctionMaterialsList(data.xm.auctionMaterialsList); subjectMatterIntroductionForm.setFieldsValue(data.gg); setSubjectMatterIntroductionBid(data.gg.auctionBdwqdfj); setLocationOfTheSubjectMatter( <>
  • 标的物所在地:{data.gg.auctionBdwwz}
  • 挂拍方:{data.gg.auctionGpf}
  • 联系人:{data.gg.auctionLxr}
  • 联系电话:{data.gg.auctionLxdh}
  • ) setEndTime(data.gg.auctionJpjssj); setStartTime(data.gg.auctionJpkssj); setCountDownTime(data.jpjssjTime); setAuctionData(data); //围观+1 if (data.cprdm == null && data.bidOpeningStatus != "0") {//开始后未报名的才算围观 updatetOnlookers(tpId).then(res => { }); } } }) } const findFile = (id: string) => { getFilelist([id]).then(res => { let arr = [] if (res?.success && res?.data.length > 0) { for (const item of res?.data) { arr.push(pictureDisplayPath + '?filePath=' + item.filePath); } } setAuctionImage(arr); setAuctionImageFlag(true); }) } /** * 出价 */ const [offerAPrice, offerAPriceSet] = useState(''); const onSearch = () => { let value: any = Number(offerAPrice); if (isEmpty(value)) { message.info('请出价!'); return; } if (!amountMoney.test(value)) { message.info('请输入正确的格式(小数点前15位,小数点后2位)!'); return; } if (Number(value) <= Number(currentPrice)) { message.info('请输入高于当前价的金额!'); return; } // let differ = (Number(value) - Number(currentPrice)) % range // let differ = (value * 1000 - currentPrice * 1000) % (range * 1000) // if (differ !== 0) { // message.info('请增加加价幅度整数倍的金额!'); // return; // } //出价 confirmBidOrNot(tpId, value); } /** * 确认出价 * @param tpId * @param value */ const confirmBidOrNot = (tpId: any, value: any) => { const orderBidPrice = (tpId: any, value: any) => { //出价 putOrderBidPrice(tpId, value).then(res => { if (res.code === 200) { let data = res.data; if (data) { message.success('出价成功!'); } reloadData(); } }) } Modal.confirm({ content: "请确认出价", okText: '确认', cancelText: '取消', keyboard: false, centered: true, onCancel: () => { }, onOk: () => orderBidPrice(tpId, value) }); } /** * 我要参拍 */ const toParticipate = () => { if (isParticipant()) {//有权限 setIsModalVisible(true); form.setFieldsValue({ "organizationName": userData.organizationName, "biddersCpr": userData.fullName, }); } else { message.info("您好,您不具有参拍人权限,无法参与竞拍出价,您可联系省分接口人配置参拍权限。"); } } //参与竞拍 const handleOk = () => { form.validateFields().then(values => { const fromData = { "auctionId": tpId, "biddersCpr": form.getFieldValue("biddersCpr"), "biddersLxdh": form.getFieldValue("biddersLxdh"), "biddersFj": form.getFieldValue("biddersFj"), "biddersBs": 0 } setLoading(true); insertBidders(fromData).then(res => { if (res != null && res.message == "success") { message.success("参与竞拍成功!"); init(); setIsModalVisible(false); } }).finally(() => { setLoading(false); }); }) }; const handleCancel = () => { setIsModalVisible(false); }; //判断当前登录人是否有参拍人角色 const isParticipant = () => { if (userData.authorityList?.length > 0) { for (const ite of userData.authorityList) { if (ite.roleCode == "ebtp-auction-participant") {//参拍人角色 return true; } } return false; } return false; } return (
    { auctionImageFlag && }
    {/* */}

    {projectName}

    {/* */}
    { overFlag ? ( <> 竞拍结束  结束时间:{endTime}(延时{delay}次) ) : startFlag ? ( <> 正在进行  距离结束仅剩: countDownOver()} />(延时{delay}次) ) : ( <> 未开始  开始时间:{startTime} ) }

    {participateData}

    {overFlag ? '最终价:' : '当前价:'}¥{digitalConversionAmount(String(currentPrice), 2)}
    { !overFlag && ( viewStatus === '1' ? ( startFlag ? (
    <> 请出价: offerAPriceSet(e.target.value)} />
    ) : (
    您已报名参拍,竞拍未开始!
    ) ) : (
    ) ) }
    {startingPrice} { viewStatus === '1' && isParticipant() && startFlag && 竞拍代码:{auctionData?.cprdm} }
      {locationOfTheSubjectMatter}
    竞拍公告 {noticeData} 标的物介绍
    {/* */}
    出价记录
    ) } export default AuctionViewAuctions;