ylj20011123 a05dd915f3 update
2025-08-29 19:14:40 +08:00

1215 lines
52 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import './ItemDetail.less'
import closeIcon from '@/assets/brand/closeIcon.png'
import { Button, Col, DatePicker, Drawer, Row, Spin, Image, Upload, Popconfirm, message, Modal, Input } from "antd";
import React, { useEffect, useImperativeHandle, useRef, useState } from "react";
import type { tabType } from "@/pages/DataVerification/list/data";
import ProForm, { ProFormText, ProFormTextArea } from "@ant-design/pro-form";
import Dragger from "antd/es/upload/Dragger";
import { InboxOutlined } from "@ant-design/icons";
import ProTable from "@ant-design/pro-table";
import PayDetail from "@/pages/DataVerification/list/components/PayDetail";
import FlowFlush from "@/pages/DataVerification/list/components/FlowFlush";
import allRealMoney from '@/assets/DataVerification/allRealMoney.png'
import north from '@/assets/DataVerification/north.png'
import south from '@/assets/DataVerification/south.png'
import west from '@/assets/DataVerification/west.png'
import east from '@/assets/DataVerification/east.png'
import waitCheck from '@/assets/DataVerification/waitCheck.png'
import activeWaitCheck from '@/assets/DataVerification/activeWaitCheck.png'
import successCheck from '@/assets/DataVerification/successCheck.png'
import activeSuccessCheck from '@/assets/DataVerification/activeSuccessCheck.png'
import billBasic from '@/assets/DataVerification/billBasic.png'
import billSale from '@/assets/DataVerification/billSale.png'
import billCheck from '@/assets/DataVerification/billCheck.png'
import auditFeedback from '@/assets/DataVerification/auditFeedback.png'
import productDataImg from '@/assets/DataVerification/productData.png'
import mobilePay from '@/assets/DataVerification/mobilePay.png'
import upLoad from '@/assets/DataVerification/upLoad.png'
import fixed from '@/assets/DataVerification/fixed.png'
import noData from '@/assets/DataVerification/noData.svg'
import defaultIcon from '@/assets/brand/defaultIcon.png'
import moment from "moment/moment";
import {
handleDetailList,
handleDetail,
handleBrandDetailList,
handleGetShopData,
handleGetPictureList,
handleSaveEndAccount,
handleSaveAddShopData, handleExamine
} from "@/pages/DataVerification/list/service";
import ReportDetail from "@/pages/DataVerification/list/components/reportDetail";
import { uploadFile } from "@/pages/supplier/supplierList/service";
import ProductData from "@/pages/DataVerification/list/components/ProductData";
import AuditDetail from "@/pages/DataVerification/list/components/auditDetail";
import DetailBasicInfo from './detailBasicInfo';
const { REACT_APP_ENV } = process.env;
const ItemDetail: React.FC<{ currentItem?: any, showDetail?: any, currentRow?: any, searchTimeParent?: any, currentUser: any, onRef?: any, handleKnowChildrenTabChange: any, pageVersion?: any }> = ({ currentItem, showDetail, currentRow, searchTimeParent, currentUser, onRef, handleKnowChildrenTabChange, pageVersion }) => {
const formRef = useRef()
const examineForm = useRef<any>()
const flowFlushBigRef = useRef()
const auditDetailRef = useRef<any>()
const productDataRef = useRef()
const { RangePicker } = DatePicker;
const [selectTab, setSelectTab] = useState<number>(1)
const [payDetail, setPayDetail] = useState<boolean>(false)// 支付明细的抽屉
const [flowFlush, setFlowFlush] = useState<boolean>(false)
const [tabList, setTabList] = useState<tabType[]>([
{ label: '待我校验', icon: waitCheck, selectIcon: activeWaitCheck, number: 0, value: 1 },
{ label: '我已校验', icon: successCheck, selectIcon: activeSuccessCheck, number: 0, value: 2 }])
const [searchTime, setSearchTime] = useState<any>(searchTimeParent || [moment().subtract(1, 'day'), moment().subtract(1, 'day')])
const [leftTimeAllList, setLeftTimeAllList] = useState<any>()
const [showChangeLoading, setShowChangeLoading] = useState<boolean>(false)// 切换左侧页面 相信信息的的loading
const [leftTimeList, setLeftTimeList] = useState<any>()// 左侧时间列表
const [selectLeftTime, setSelectLeftTime] = useState<number>()
const [currentDetail, setCurrentDetail] = useState<any>()
const [topDetail, setTopDetail] = useState<any>()
// 审核悬浮框
const [examineModal, setExamineModal] = useState<boolean>(false)
// 上传文件的悬浮框
const [upLoadModal, setUpLoadModal] = useState<boolean>(false)
// 禁用操作按钮
const [disableBtn, setDisableBtn] = useState<boolean>(true)
// 稽查反馈的列表数据
const [auditTableData, setAuditTableData] = useState<any>()
// 稽查反馈的抽屉
const [showAuditDrawer, setShowAuditDrawer] = useState<boolean>(false)
// 稽查反馈点击的那行数据
const [auditRowDetail, setAuditRowDetail] = useState<any>()
// 添加单品
const [productsDrawer, setProductsDrawer] = useState<boolean>(false)
// 文件列表
const [fileList, setFileList] = useState<any>()
const columns: any = [
{
dataIndex: 'Check_Info',
title: '稽核反馈',
},
{
dataIndex: 'Error_Rate',
title: '稽核误差率',
render: (_, record) => {
return <span style={{ color: record.Error_Rate > 0.2 ? 'red' : '' }}>{`${record.Error_Rate}%`}</span>
}
},
{
dataIndex: 'Difference_Amount',
title: '长短款/流水冲正',
render: (_, record) => {
return <span style={{ color: record.Difference_Amount > 0 ? 'green' : 'red' }}>
{`${record.Difference_Amount} / ${record.Supplement_Amount}`}
</span>
}
},
{
dataIndex: 'Audit_Date',
title: '稽查时间',
},
{
dataIndex: 'Audit_Type',
title: '稽查类型',
},
{
dataIndex: 'Audit_Id',
title: '稽查内码',
hideInTable: true
},
]
// 图片数组
const [imgList, setImgList] = useState<any>()
const [productData, setProductData] = useState<any>()// 单品数据 1
const [mobilePayment, setMobilePayment] = useState<any>()// 移动支付 3
const [cigarettePayment, setCigarettePayment] = useState<any>()// 香烟支付 2
// 三个查询报表的抽屉
const [queryRecords, setQueryRecords] = useState<boolean>(false)
// 三个查询报表记录 选择的哪个
const [selectQueryType, setSelectQueryType] = useState<number>(0)
// 整个抽屉的校验loading
const [itemDetailLoading, setItemDetailLoading] = useState<boolean>(false)
const fmoney = (s: number, n?: number) => {
/*
* 参数说明:
* s要格式化的数字
* n保留几位小数
* */
n = n > 0 && n <= 20 ? n : s.toString().indexOf('.') === -1 ? 0 : s.toString().indexOf('.') > -1 ? s.toString().split('.')[1].length : 2;
let fuhao = ''; // 如果数字小于零则值为-
if (s < 0) {
s = Math.abs(s);
fuhao = '-'
}
s = `${parseFloat((`${s}`).replace(/[^\d\.-]/g, "")).toFixed(n)}`;
const l = s.split(".")[0].split("").reverse();
const r = s.split(".")[1];
let t = "";
for (let i = 0; i < l.length; i++) {
t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "");
}
if (n === 0) {
return s
}
return `${fuhao + [...t].reverse().join("")}.${r}`;
}
const handleGetItemDetail = async () => {
setShowChangeLoading(true)
const req = {
RoleType: 1,
ServerpartId: currentRow.Serverpart_Id,
ServerpartShopCode: currentRow.ServerpartShop_Code,
StartDate: moment(searchTime[0]).format('YYYY-MM-DD'),
EndDate: moment(searchTime[1]).format('YYYY-MM-DD'),
}
const data = await handleBrandDetailList(req)
const resultData = JSON.parse(JSON.stringify(data))
setTopDetail(resultData)
if (resultData.VerifyList && resultData.VerifyList.length > 0) {
resultData.VerifyList.forEach((item: any) => {
item.name = resultData.ServerpartShop_Name
})
}
if (resultData.VerifiedList && resultData.VerifiedList.length > 0) {
resultData.VerifiedList.forEach((item: any) => {
item.name = resultData.ServerpartShop_Name
})
}
setLeftTimeAllList([resultData.VerifyList, resultData.VerifiedList])
console.log('resultData323', resultData);
const selectTabList: any = JSON.parse(JSON.stringify(tabList))
selectTabList.forEach((item: any) => {
if (item.label === '待我校验') {
item.number = data.VerifyList.length
} else {
item.number = data.VerifiedList.length
}
})
setLeftTimeList([resultData.VerifyList, resultData.VerifiedList][selectTab - 1])
if (selectTabList[0].number === 0) {
setSelectTab(2)
setLeftTimeList([resultData.VerifyList, resultData.VerifiedList][1])
} else {
setLeftTimeList([resultData.VerifyList, resultData.VerifiedList][selectTab - 1])
}
setTabList(selectTabList)
// 如果未校验有值 那默认显示数组第一个 没值就显示第二个
const leftList: any = [resultData.VerifyList, resultData.VerifiedList][selectTabList[0].number === 0 ? 1 : 0]
console.log('leftList', leftList);
if (leftList && leftList.length > 0) {
// setSelectLeftTime(leftList[0].value)
// handleGetDetail(leftList[0].value, selectTab)
setSelectLeftTime(currentRow?.Endaccount_Id)
handleGetDetail(currentRow?.Endaccount_Id, selectTab)
} else {
formRef.current?.resetFields()
}
setShowChangeLoading(false)
}
useEffect(async () => {
if (showDetail && currentRow) {
// 抽屉顶部显示内容调用的接口
handleGetItemDetail()
}
}, [showDetail]);
// 拿到校验说明
const handleGetApprovedInfo = () => {
const data = formRef.current?.getFieldsValue()
return data
}
// 校验表单方法
const handleForm = async () => {
let flag: boolean = false
const res = await formRef.current?.validateFields()
console.log('res', res)
if (res) {
flag = true
}
return flag
}
// 改变最大的抽屉loading
const showDetailLoading = (type: boolean) => {
setItemDetailLoading(type)
}
useImperativeHandle(onRef, () => ({
selectTab,
handleGetApprovedInfo,
currentDetail,
auditTableData,
handleLeftListChange,
handleForm,
handleGetItemDetail,
showDetailLoading
}));
const handleLeftListChange = () => {
if (leftTimeList && leftTimeList.length === 0 && selectTab === 1) {
return true
}
return false
}
useEffect(() => {
handleKnowChildrenTabChange(selectTab, leftTimeList && leftTimeList.length > 0 ? leftTimeList.length : 0, disableBtn)
}, [selectTab]);
useEffect(() => {
handleKnowChildrenTabChange(selectTab, leftTimeList && leftTimeList.length > 0 ? leftTimeList.length : 0, disableBtn)
}, [leftTimeList]);
useEffect(() => {
handleKnowChildrenTabChange(selectTab, leftTimeList && leftTimeList.length > 0 ? leftTimeList.length : 0, disableBtn)
}, [disableBtn]);
const handleGetDetail = async (id: number, tabSelect?: number) => {
const req = {
EndaccountId: id
}
const data = await handleDetail(req)
setAuditTableData(data.AuditInfoList)
if (tabSelect !== 2) {
handleGetShopPriceData(1, data.Endaccount_Id)
handleGetShopPriceData(3, data.Endaccount_Id)
if (data.ShowCigarette) {
handleGetShopPriceData(2, data.Endaccount_Id, data.CigaretteType)
}
}
setCurrentDetail(data)
formRef.current?.setFieldsValue(
{
...data,
AvgTicketPrice: data.Ticket_Count ? fmoney(data.TotalSell_Amount / data.Ticket_Count, 2) : ''
}
)
setShowChangeLoading(false)
getPictureList(data.Endaccount_Id)
}
const handleGetShopPriceData = async (type: number, id: number, CigaretteType?: any) => {
// type 为数据类型 1单品数据 2香烟数据 3移动支付 id 为日结账期内码
let req = {}
if (type === 1) {
req = {
Data_Type: 1,
Endaccount_ID: id,
}
}
else if (type === 2) {
req = {
Data_Type: 2,
Endaccount_ID: id,
CigaretteType
}
}
else {
req = {
Data_Type: 3,
Endaccount_ID: id,
ReloadType: 1
}
}
const data = await handleGetShopData(req)
if (type === 1) {
setProductData(data)
formRef?.current?.setFieldsValue({
...data,
SellCount_Sale: data.count,
FactAmount_Sale: data.amount
})
}
else if (type === 2) {
setCigarettePayment(data)
formRef?.current?.setFieldsValue({
...data,
FactAmount_Cigarette: data.amount,
SellCount_Cigarette: data.count
})
}
else if (type === 3) {
setMobilePayment(data)
formRef?.current?.setFieldsValue({
...data,
FactAmount_Mobilepayment: data.amount
})
}
setShowChangeLoading(false)
}
const getPictureList = (id: any) => {
setShowChangeLoading(true)
const req = {
TableId: id,
TableName: "ENDACCOUNT",
}
handleGetPictureList(req).then((data: any) => {
console.log('setImgList', data)
if (data && data.List && data.List.length > 0) {
data.List.forEach((item: any) => {
item.url = item.ImageUrl
item.status = 'done'
})
setImgList(data.List)
}
setShowChangeLoading(false)
})
}
// 单品报表 香烟记录 支付记录 按钮点击调用的方法
// 1 为单品报表 2为香烟记录 3为支付记录
const handleGetQueryRecords = async (type: number) => {
setQueryRecords(true)
setSelectQueryType(type)
}
return (
<div className={'detailDrawer'}>
{
itemDetailLoading ?
<div className={'detailLoading'}>
<div className={'loading'}>
<Spin />
<span style={{ marginLeft: '5px' }}>{'校验中.....'}</span>
</div>
</div> : ''
}
{/* 抽屉顶部的品牌信息 */}
<div className={'detailTop'}>
<p className={'detailTitle'}></p>
<img className={'closeIcon'} src={closeIcon} />
</div>
{
pageVersion === 'new' ?
<div className={'detailContent'}>
{/* 蓝色带图标的详情框 */}
<div className={'contentTop'}>
<img className={'brandIcon'} src={currentRow?.ServerpartShop_ICO || defaultIcon} />
<div className={'contentTopRight'}>
<div className={'detailRightTop'}>
<div className={'nameType'}>
<span className={'brandName'}>{currentRow?.ServerpartShop_Name}</span>
{/* <span className={'brandType'}>{currentRow?.Business_Type}</span> */}
<div className={'brandType'} style={{ background: currentRow?.Treatment_MarkState === -1 ? '#FFE4E4' : currentRow?.Treatment_MarkState === 1 ? '#EBEDEE' : '', color: currentRow?.Treatment_MarkState === -1 ? '#FF2F0D' : currentRow?.Treatment_MarkState === 1 ? '#686E75' : '' }}>
{currentRow?.Treatment_MarkState === -1 ? '未上传' : currentRow?.Treatment_MarkState === 0 ? '待处理' : currentRow?.Treatment_MarkState === 1 ? '已处理' : ''}</div>
</div>
<div className={'serviceBox'}>
<img className={'serviceIcon'} src={fixed} />
<span className={'serviceName'}>{currentRow?.Serverpart_Name}</span>
</div>
</div>
<div className={'progressDetail'}>
<div className={'progressBox'}>
<div className={'progressHave'} style={{ width: `${(currentRow?.Deal_Count / currentRow?.Total_Count) * 100}%` }}></div>
</div>
<span className={'rote'}>{`${currentRow?.Deal_Count}/${currentRow?.Total_Count}`}</span>
</div>
<div className={'detailBottom'}>
<div className={'detailItem'}>
<div className={'itemTop'}>
<img className={'itemIcon'} src={allRealMoney} />
<span className={'itemLabel'}>{'总实收金额/元'}</span>
</div>
<span className={'itemValue'}>{topDetail?.Revenue_Amount ? fmoney(topDetail?.Revenue_Amount, 2) : '0'}</span>
</div>
{
topDetail?.ShopRegion_Name_A ?
<div className={'detailItem'}>
<div className={'itemTop'}>
<img className={'itemIcon'} src={topDetail?.ShopRegion_Name_B === '西区' ? east : south} />
<span className={'itemLabel'}>{`${topDetail?.ShopRegion_Name_A}实收金额/元`}</span>
</div>
<span className={'itemValue'}>{topDetail?.Revenue_Amount_A ? fmoney(topDetail?.Revenue_Amount_A, 2) : '0'}</span>
</div>
: ''
}
{
topDetail?.ShopRegion_Name_B ?
<div className={'detailItem'}>
<div className={'itemTop'}>
<img className={'itemIcon'} src={topDetail?.ShopRegion_Name_B === '西区' ? west : north} />
<span className={'itemLabel'}>{`${topDetail?.ShopRegion_Name_B}实收金额/元`}</span>
</div>
<span className={'itemValue'}>{topDetail?.Revenue_Amount_B ? fmoney(topDetail?.Revenue_Amount_B, 2) : '0'}</span>
</div> : ''
}
</div>
</div>
</div>
<div className={'detailListBox'}>
{/* tab选项卡和搜索时间框 */}
<div className={'tabBox'}>
<div className={'tab'}>
{
tabList.map((item: tabType) => {
return item.number === 0 ? '' : <div className={selectTab === item.value ? 'selectTab tabItem' : 'tabItem'} onClick={() => {
setSelectTab(item.value)
setLeftTimeList(leftTimeAllList[item.value - 1])
setShowChangeLoading(true)
if (leftTimeAllList[item.value - 1] && leftTimeAllList[item.value - 1].length > 0) {
setSelectLeftTime(leftTimeAllList[item.value - 1][0].value)
handleGetDetail(leftTimeAllList[item.value - 1][0].value, item.value)
} else {
setShowChangeLoading(false)
formRef.current?.resetFields()
}
}}>
<img className={'tabIcon'} src={selectTab === item.value ? item.selectIcon : item.icon} />
<span className={'tabName'}>{item.label}</span>
<span className={'number'}>{`(${item.number})`}</span>
</div>
})
}
</div>
<div className={'searchBox'}>
<RangePicker
value={searchTime}
onChange={(e: any) => {
if (e && e.length > 0) {
setSearchTime([moment(e[0]._d), moment(e[1]._d)])
} else {
setSearchTime([])
}
}}
/>
<Button style={{ marginLeft: '8px' }} type={'primary'} onClick={() => {
handleGetItemDetail()
}}></Button>
</div>
</div>
<div className={'listBox'}>
<div className={'listLeft'}>
{
leftTimeList && leftTimeList.length > 0 ?
leftTimeList.map((item: any) => {
return <div className={item.value === selectLeftTime ? 'selectListItem listItem' : 'listItem'} onClick={() => {
setSelectLeftTime(item.value)
setImgList([])
if (item.type !== 0) {
setShowChangeLoading(true)
handleGetDetail(item.value)
}
if (item.type === 0) {
formRef.current?.resetFields()
setDisableBtn(false)
} else {
setDisableBtn(true)
}
}}>{`${item.label}${item.key}`}</div>
}) : ''
}
</div>
{showChangeLoading ?
<div className={'LoadingBox'}>
<div className={'loading'}>
<Spin />
<span style={{ marginLeft: '5px' }}>{'加载中'}</span>
</div>
</div> : ''
}
{
leftTimeList && leftTimeList.length > 0 ?
<div className={'listRight'}>
<ProForm
formRef={formRef}
submitter={{
// 清空表单自带的按钮
render: (props, doms) => {
return []
}
}}>
<div className={'rightFormTitle'}>
<div className={'titleLeft'}>
<img className={'titleIcon'} src={billBasic} />
<span className={'titleName'}>{'账单基础信息'}</span>
</div>
</div>
<div style={{ paddingLeft: '20px', marginTop: '8px' }}>
<Row>
<Col span={6}>
<ProFormText
readonly
label='收银机号'
name='MachineCode'
/>
</Col>
<Col className={'CashierName'} span={6}>
<ProFormText
readonly
label='收银人员'
name='Cashier_Name'
/>
</Col>
<Col span={6}>
<ProFormText
readonly
label='结账人员'
name='Checkout_Name'
/>
</Col>
<Col span={6}>
<ProFormText
readonly
label='稽核人员'
name='Auditor_Name'
/>
</Col>
</Row>
<Row>
<Col span={6}>
<ProFormText
readonly
label='起始时间'
name='Endaccount_StartDate'
/>
</Col>
<Col span={6}>
<ProFormText
readonly
label='结账时间'
name='Endaccount_EndDate'
/>
</Col>
</Row>
</div>
<div className={'rightFormTitle'} >
<div className={'titleLeft'}>
<img className={'titleIcon'} src={billSale} />
<span className={'titleName'}>{'账单销售信息'}</span>
</div>
{
disableBtn ?
<Button onClick={() => {
setPayDetail(true)
}}></Button> : ''
}
</div>
<div style={{ paddingLeft: '20px', marginTop: '8px' }}>
<Row>
<Col span={6}>
<ProFormText
readonly
label='客单数量'
name='Ticket_Count'
/>
</Col>
<Col span={6}>
<ProFormText
readonly
label='客单均价'
name='AvgTicketPrice'
/>
</Col>
<Col span={6}>
<ProFormText
readonly
label='优惠金额'
name='TotalOff_Amount'
/>
</Col>
<Col span={6}>
<ProFormText
readonly
label='稽核补录'
name='Check_Replenish'
/>
</Col>
</Row>
<div className={'specialField'}>
<div className={'fieldItem'}>
<ProFormText
// readonly
disabled
label="总销售额"
name='TotalSell_Amount'
/>
</div>
<span style={{ width: '10px', textAlign: 'center', marginTop: '15px' }}>{'='}</span>
<div className={'fieldItem'}>
<ProFormText
// readonly
disabled
label="现金支付"
name='Cash_Amount'
/>
</div>
<span style={{ width: '10px', textAlign: 'center', marginTop: '15px' }}>{'+'}</span>
<div className={'fieldItem'}>
<ProFormText
// readonly
disabled
label="移动支付"
name='MobilePay_Amount'
/>
</div>
<span style={{ width: '10px', textAlign: 'center', marginTop: '15px' }}>{'+'}</span>
<div className={'fieldItem'}>
<ProFormText
// readonly
disabled
label="其他支付"
name='OtherPay_Amount'
/>
</div>
</div>
<div className={'specialField'}>
<div className={'fieldItem'}>
<ProFormText
// readonly
disabled
label="长款金额"
name='Difference_Amount'
/>
</div>
<span style={{ width: '10px', textAlign: 'center', marginTop: '15px' }}>{'='}</span>
<div className={'fieldItem'}>
<ProFormText
// readonly
disabled
label="缴款金额"
name='Payment_Amount'
/>
</div>
<span style={{ width: '10px', textAlign: 'center', marginTop: '15px' }}>{'-'}</span>
<div className={'fieldItem'}>
<ProFormText
// readonly
disabled
label="现金支付"
name='Cash_Amount'
/>
</div>
{/* <span>{'+'}</span> */}
<div className={'fieldItem'} style={{ width: 'calc(25% + 10px)' }}>
</div>
</div>
</div>
<div className={'rightFormTitle'} >
<div className={'titleLeft'}>
<img className={'titleIcon'} src={billCheck} />
<span className={'titleName'}>{'账单校验说明'}<span style={{ marginLeft: '12px', color: 'red', fontSize: '14px', fontWeight: 500 }}>{'必填项'}</span></span>
</div>
{
disableBtn ?
<Button onClick={() => {
setFlowFlush(true);
}}></Button> : ''
}
</div>
<div className={'specialField'} >
<div style={{ paddingLeft: '20px', width: '100%', display: 'flex', alignItems: 'center', justifyContent: "space-between" }}>
<div className={'fieldItem'}>
<ProFormText
rules={[
{
required: true,
message: '请输入实收金额'
}
]}
label="实收金额"
name='Revenue_Amount'
/>
</div>
<span style={{ width: '10px', textAlign: 'center', marginTop: '15px' }}>{'='}</span>
<div className={'fieldItem'}>
<ProFormText
// readonly
disabled
label="总销售额"
name='TotalSell_Amount'
/>
</div>
<span style={{ width: '10px', textAlign: 'center', marginTop: '15px' }}>{'+'}</span>
<div className={'fieldItem'}>
<ProFormText
// readonly
disabled
label="冲正金额"
name='Correct_TotalAmount'
/>
</div>
<div className={'fieldItem'} style={{ width: 'calc(25% + 10px)' }}>
</div>
</div>
</div>
<Row>
<div style={{ width: '100%' }}>
<div style={{ paddingLeft: '20px', marginTop: '8px', width: '100%' }}>
<Col span={24}>
{
currentDetail?.Approved_Info ?
<span style={{ color: 'red' }}>{`${currentDetail?.Approved_Staff || '-'}${currentDetail?.Approved_Date || '-'}】:${currentDetail?.Approved_Info || '-'}`}</span> : ''
}
<ProFormTextArea
label="校验说明"
name='Description_Info'
/>
</Col>
</div>
</div>
</Row>
{
disableBtn ?
<>
{
auditTableData && auditTableData.length > 0 ?
<>
<div className={'rightFormTitle'} >
<div className={'titleLeft'}>
<img className={'titleIcon'} src={auditFeedback} />
<span className={'titleName'}>{'稽核反馈'}</span>
</div>
</div>
<ProTable
style={{ marginTop: '12px' }}
search={false}
options={false}
columns={columns}
dataSource={auditTableData}
onRow={(record) => {
return {
onClick: (event) => {
setAuditRowDetail(record)
setShowAuditDrawer(true)
},
}
}}
>
</ProTable>
</> : ''
}
<div className={'rightFormTitle'} >
<div className={'titleLeft'}>
<img className={'titleIcon'} src={productDataImg} />
<span className={'titleName'}>{'单品数据'}</span>
</div>
{
disableBtn ?
<div>
<Button style={{ marginRight: '8px' }} onClick={() => {
handleGetQueryRecords(1)
}}></Button>
{
selectTab === 1 ?
<Button onClick={() => {
setShowChangeLoading(true)
handleGetShopPriceData(1, currentDetail?.Endaccount_Id)
}}></Button> : ''
}
</div> : ''
}
</div>
<div style={{ paddingLeft: '20px', marginTop: '8px', width: '100%' }}>
<Row>
<Col span={6}>
<ProFormText
readonly
label="销售数量"
name='SellCount_Sale'
/>
</Col>
<Col span={6}>
<ProFormText
readonly
label="销售金额"
name='FactAmount_Sale'
/>
</Col>
</Row>
</div>
{
currentDetail?.ShowCigarette ?
<>
<div className={'rightFormTitle'} style={{ marginTop: '24px' }}>
<div className={'titleLeft'}>
<img className={'titleIcon'} src={mobilePay} />
<span className={'titleName'}>{'香烟数据'}</span>
</div>
{
disableBtn ?
<div>
<Button style={{ marginRight: '8px' }} onClick={() => {
handleGetQueryRecords(2)
}}></Button>
{
selectTab === 1 ?
<Button onClick={() => {
setShowChangeLoading(true)
handleGetShopPriceData(2, currentDetail?.Endaccount_Id, currentDetail?.CigaretteType)
}}></Button> : ''
}
</div> : ''
}
</div>
<div style={{ paddingLeft: '20px', marginTop: '8px', width: '100%' }}>
<Row>
<Col span={6}>
<ProFormText
readonly
label="销售数量"
name='SellCount_Cigarette'
/>
</Col>
<Col span={6}>
<ProFormText
readonly
label="销售金额"
name='FactAmount_Cigarette'
/>
</Col>
</Row>
</div>
</>
: ''
}
<div className={'rightFormTitle'} >
<div className={'titleLeft'}>
<img className={'titleIcon'} src={mobilePay} />
<span className={'titleName'}>{'移动支付'}</span>
</div>
{
disableBtn ?
<div>
<Button style={{ marginRight: '8px' }} onClick={() => {
handleGetQueryRecords(3)
}}></Button>
{
selectTab === 1 ?
<Button onClick={() => {
setShowChangeLoading(true)
handleGetShopPriceData(3, currentDetail?.Endaccount_Id)
}}></Button> : ''
}
</div> : ''
}
</div>
<Row>
<div style={{ paddingLeft: '20px', marginTop: '8px', width: '100%' }}>
<Col span={6}>
<ProFormText
readonly
label="销售金额"
name='FactAmount_Mobilepayment'
/>
</Col>
</div>
</Row>
<div className={'rightFormTitle'} style={{ marginBottom: '12px' }}>
<div className={'titleLeft'}>
<img className={'titleIcon'} src={upLoad} />
<span className={'titleName'}>{'上传单据'}</span>
</div>
</div>
{
selectTab === 1 ?
<iframe
style={{ borderWidth: '0px' }}
width={'100%'}
height={370}
// src={`http://10.104.1.69:8000/cloud/static/uploadPhoto/index.html?id=${currentDetail?.Endaccount_Id}&tablename=ENDACCOUNT&readonly=&PopDialogName=IMAGEPage&Module_ID=3CD350DC5905D75D`}
src={`${REACT_APP_ENV === 'dev' ? 'http://10.104.1.69:8000/' : 'http://saas.eshangtech.com/cloud/'}static/uploadPhoto/index.html?id=${currentDetail?.Endaccount_Id}&tablename=ENDACCOUNT&readonly=&PopDialogName=IMAGEPage&Module_ID=3CD350DC5905D75D`}
/>
// http://saas.eshangtech.com/cloud/
:
<div className={'imgList'}>
{
imgList && imgList.length > 0 ?
imgList.map((item: any) => {
return <Image
width={150}
style={{ marginRight: '8px' }}
src={item.ImageUrl}
/>
}) : ''
}
</div>
}
</> : ''
}
</ProForm>
</div>
:
<div className={'listRight'}>
<div style={{ width: '100%', height: '100%', display: 'flex', alignItems: 'center', flexDirection: 'column', justifyContent: 'center' }}>
<div style={{ width: '150px', height: '150px' }}>
<img style={{ width: '150px', height: '150px' }} src={noData} />
</div>
<div></div>
</div>
</div>
}
</div>
</div>
</div> :
<div>
{showChangeLoading ?
<div className={'LoadingBox'}>
<div className={'loading'}>
<Spin />
<span style={{ marginLeft: '5px' }}>{'加载中'}</span>
</div>
</div> : ''
}
<DetailBasicInfo formRef={formRef} leftTimeList={leftTimeList} disableBtn={disableBtn} setPayDetail={setPayDetail} setFlowFlush={setFlowFlush}
currentDetail={currentDetail} auditTableData={auditTableData} setAuditRowDetail={setAuditRowDetail} setShowAuditDrawer={setShowAuditDrawer}
handleGetQueryRecords={handleGetQueryRecords} selectTab={selectTab} setShowChangeLoading={setShowChangeLoading} handleGetShopPriceData={handleGetShopPriceData}
imgList={imgList}
/>
</div>
}
{/* 支付明细 */}
<Drawer
width={'60%'}
visible={payDetail}
closable={false}
bodyStyle={{ padding: 0 }}
onClose={() => {
setPayDetail(false);
}}
destroyOnClose={true}
>
<PayDetail currentDetail={currentDetail} />
</Drawer>
{/* 流水冲正 */}
<Drawer
width={'60%'}
visible={flowFlush}
closable={false}
bodyStyle={{ padding: 0 }}
onClose={() => {
setFlowFlush(false);
}}
destroyOnClose={true}
footer={
selectTab === 1 ?
<div style={{ width: '100%', display: 'flex', justifyContent: 'space-between' }}>
<div>
<Button type={"primary"} onClick={() => {
setProductsDrawer(true)
}}></Button>
</div>
<div>
<Button onClick={() => { setFlowFlush(false) }}></Button>
<Button type={'primary'} style={{ marginLeft: '8px' }} onClick={async () => {
const formData = flowFlushBigRef.current?.flowFlushRef.current.getFieldsValue()
const req: any = {
EndaccountId_Encrypt: flowFlushBigRef.current?.rightData.EndaccountId_Encrypt,
CorrectList: flowFlushBigRef.current?.correctList || [],
...formData
}
const data = await handleSaveEndAccount(req)
if (data.Result_Code === 100) {
setFlowFlush(false);
message.success(data.Result_Desc)
handleGetItemDetail()
} else {
message.error(data.Result_Desc)
}
}}></Button>
</div>
</div> : ''
}
>
<FlowFlush onRef={flowFlushBigRef} currentItem={currentDetail} currentRow={currentRow} />
</Drawer>
{/* 单品报表 香烟记录 支付记录 */}
<Drawer
width={'60%'}
visible={queryRecords}
closable={false}
bodyStyle={{ padding: 0 }}
onClose={() => {
setQueryRecords(false);
setSelectQueryType(0)
}}
destroyOnClose={true}
>
<ReportDetail currentUser={currentUser} queryRecords={queryRecords} selectQueryType={selectQueryType} currentItem={currentDetail} currentRow={currentRow} />
</Drawer>
{/* 添加单品数据 */}
<Drawer
width={'60%'}
visible={productsDrawer}
closable={false}
bodyStyle={{ padding: 0 }}
onClose={() => {
setProductsDrawer(false);
}}
destroyOnClose={true}
footer={
selectTab === 1 ?
<div style={{ display: 'flex', justifyContent: 'flex-end' }}>
<Button type={'primary'} onClick={async () => {
const resList: any = productDataRef.current?.selectShopList
let isError: boolean = true
if (resList && resList.length > 0) {
resList.forEach((item => {
if (item.Total_Count && item.Total_SellAmount && Number(item.Total_Count) !== 0 && Number(item.Total_SellAmount) !== 0) { } else {
isError = false
}
}))
} else {
isError = false
}
if (isError) {
const req = {
EndaccountId: selectLeftTime,
CigaretteTypeCode: currentDetail.CigaretteType,
SaleCommodityList: resList
}
const data = await handleSaveAddShopData(req)
if (data.Result_Code === 100) {
flowFlushBigRef.current.handleGetDetail()
setProductsDrawer(false);
} else {
message.error(data.Result_Desc)
}
} else {
message.error('请检查已选择的商品,销售数量和销售金额是否填写正确')
}
}}></Button>
</div>
: ''
}
>
<ProductData onRef={productDataRef} currentUser={currentUser} currentDetail={currentDetail} productsDrawer={productsDrawer} />
</Drawer>
{/* 稽核反馈列表点击出现的抽屉 稽核反馈表 */}
<Drawer
width={'50%'}
visible={showAuditDrawer}
closable={false}
bodyStyle={{ padding: 0 }}
onClose={() => {
setShowAuditDrawer(false);
}}
destroyOnClose={true}
footer={
<div style={{ width: '100%', display: 'flex', justifyContent: 'space-between' }}>
<div>
<Button danger onClick={() => {
auditDetailRef.current.setShowMoadl(!auditDetailRef.current.showModal)
}}></Button>
</div>
<div>
<Button style={{ marginRight: '8px' }} onClick={() => {
setExamineModal(true)
}}></Button>
<Button type={'primary'} style={{ marginRight: '8px' }} onClick={() => {
}}></Button>
<Button onClick={() => {
setShowAuditDrawer(false);
}}></Button>
</div>
</div>
}
>
<AuditDetail onRef={auditDetailRef} isShow={showAuditDrawer} rowDetail={auditRowDetail} currentDetail={currentDetail} />
</Drawer>
<Modal
title="审核意见"
open={examineModal}
destroyOnClose
onOk={() => {
examineForm.current?.validateFields().then(async (res: any) => {
if (res) {
const obj: any = {
'查看视频': 1000,
'稽核审核': 2000,
'下载视频': 3000
}
const req = {
VIDEOLOG_TYPE: 2000,
CHECKACCOUNT_ID: auditRowDetail.Audit_Id,
USER_ID: currentUser.ID,
USER_NAME: currentUser.Name,
OPERATE_DATE: moment().format('YYYY-MM-DD HH:mm:ss'),
VIDEOLOG_DESC: res.desc
}
const data = await handleExamine(req)
if (data.Result_Code === 100) {
message.success(data.Result_Desc)
auditDetailRef.current?.handleDetail()
setExamineModal(false)
} else {
message.error(data.Result_Desc)
}
}
})
}} onCancel={() => {
setExamineModal(false)
}}>
<ProForm
formRef={examineForm}
submitter={{
// 清空表单自带的按钮
render: (props, doms) => {
return []
}
}}
>
<ProFormTextArea
label='审核备注'
rules={[
{ required: true, message: '请输入审核备注' }
]}
name='desc'
/>
</ProForm>
</Modal>
<Modal
width={1200}
title="上传文件"
open={upLoadModal}
destroyOnClose
footer={null}
onOk={() => {
}}
onCancel={() => {
setUpLoadModal(false)
}}>
<iframe
width={1150}
height={720}
src={`https://eshangtech.com/uploadPhoto/index.html?id=${currentDetail?.Endaccount_Id}&tablename=ENDACCOUNT&readonly=&PopDialogName=IMAGEPage&Module_ID=3CD350DC5905D75D`} />
</Modal>
</div>
)
};
export default ItemDetail