ylj20011123 a9f9af33ec update
2025-06-27 19:44:17 +08:00

371 lines
13 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.

/*
* @Author: cclu
* @Date: 2022-03-04 10:51:49
* @LastEditTime: 2024-09-30 17:50:35
* @LastEditors: cclu 1106109051@qq.com
* @Description: 合作方分润 组件
* @FilePath: \cloud-platform\src\pages\BussinessProject\components\ShareBenefit.tsx
*/
import { useRef, useState } from 'react';
import { Drawer, message, Space } from 'antd';
import ProTable from '@ant-design/pro-table';
import type { ActionType, ProColumns } from '@ant-design/pro-table';
import type { BusinessProjectModel, RevenueConfirmModel } from '../data';
import { createRevenueAccount, getRevenuenConfirmList, handleAgain, handleGetSplitRes } from '../service'
import RevenueList from './RevenueList';
import moment from 'moment';
import { fmoney } from "@/services/options";
import { getDetail } from "@/pages/contract/service";
import Item from 'antd/lib/list/Item';
// 更新回款信息
const handleAddUpdate = async (dataType: 1000 | 2000, fields: number) => {
const hide = message.loading('正在提交...');
// dataType 经营模式为合作经营1000
const result = await createRevenueAccount(fields as number);
hide();
if (result.Result_Code !== 100) {
message.error(`${result.Result_Desc}` || `${result.Result_Code}:提交失败`);
return false;
}
message.success("生成账款记录成功!")
return true;
};
/**
* @description: 合作方分润
* @param {BusinessProjectModel} props 项目详情数据对象
* @return {*}
*/
const ShareBenefit: React.FC<{ props: BusinessProjectModel, showEdit?: boolean, startDate?: string, endDate?: string, otherDate?: any }> = (
{ props, showEdit, startDate, endDate, otherDate, showType, relatedContractsList }: { props: BusinessProjectModel, showEdit?: boolean, startDate?: string, endDate?: string, otherDate?: any, showType?: any, relatedContractsList?: any }) => {
// const { SERVERPARTSHOP_ID, SERVERPARTSHOP_NAME } = props
const actionRef = useRef<ActionType>() // 表格对应的对象
const [showDetail, setShowDetail] = useState<boolean>(false) // 是否显示详情
const [currentRow, setCurrentRow] = useState<BusinessProjectModel | any>(undefined) // 选中的当前行
const [tableLoading, setTableLoading] = useState<boolean>(false)
// 关联合同需要遍历的表格
const [relateTableData, setRelateTableData] = useState<any>()
const revenuenColumns: any = [
{
title: '开始日期',
dataIndex: 'STARTDATE',
valueType: "date",
width: 110,
align: 'center',
sorter: (a, b) => (new Date(a.STARTDATE).getTime() || 0) - (new Date(b.STARTDATE).getTime() || 0),
defaultSortOrder: 'descend'
},
{
title: '结束日期',
dataIndex: 'ENDDATE',
valueType: "date",
width: 110,
align: 'center'
},
{
title: '真实提成',
dataIndex: '',
valueType: 'digit',
align: "center",
hideInTable: props.BUSINESS_TYPE === 2000,
width: 110,
render: (_, record) => {
return <span style={{
color: record.REVENUE_AMOUNT ?
((record.ROYALTY_THEORY / record.REVENUE_AMOUNT) * 100) >= record.GUARANTEERATIO ? 'red' : 'green'
: ''
}}>
{record.REVENUE_AMOUNT ? `${((record.ROYALTY_THEORY / record.REVENUE_AMOUNT) * 100).toFixed(2)}%` : '-'}
</span>
},
},
{
title: '实际营业额',
dataIndex: 'REVENUE_AMOUNT',
valueType: "money",
width: 140,
align: "right",
render: (_, record) => {
return <a onClick={() => { // 点击实际营业额时 打开抽屉 展示每日营收数据
console.log('record', record)
setCurrentRow(record)
setShowDetail(true)
}}>{record.REVENUE_AMOUNT ? fmoney(record.REVENUE_AMOUNT, 2) : '-'}</a>
},
},
{
title: '合同提成',
dataIndex: 'GUARANTEERATIO',
valueType: 'digit',
align: "center",
hideInTable: props.BUSINESS_TYPE === 2000,
width: 110,
render: (_, record) => {
return `${record.GUARANTEERATIO || '-'}%`
},
},
{
title: '保底租金',
dataIndex: 'MINTURNOVER',
valueType: "money",
width: 140,
align: "center",
render: (_, record) => {
return <span style={{ color: record.MINTURNOVER ? '' : '#faad14' }}>{record.MINTURNOVER ? `¥${fmoney(record.MINTURNOVER, 2)}` : '合同期外'}</span>
}
},
{
title: '甲方到账',
dataIndex: 'ROYALTY_PRICE',
valueType: "money",
align: "right",
width: 140,
render: (_, record) => {
return <span>{record.ROYALTY_PRICE ? `¥${fmoney(record.ROYALTY_PRICE, 2)}` : '-'}</span>
}
},
{
title: '甲方入账',
dataIndex: 'ROYALTY_THEORY',
valueType: "money",
align: "right",
width: 140,
render: (_, record) => {
return <span>{record.ROYALTY_THEORY ? `¥${fmoney(record.ROYALTY_THEORY, 2)}` : '-'}</span>
}
},
{
title: '乙方入账',
dataIndex: 'SUBROYALTY_THEORY',
valueType: "money",
align: "right",
width: 140,
render: (_, record) => {
return <span>{record.SUBROYALTY_THEORY ? `¥${fmoney(record.SUBROYALTY_THEORY, 2)}` : '-'}</span>
}
},
// {
// title: '丙方入账',
// dataIndex: 'PARTYC_SHAREPROFIT',
// valueType: "money",
// width: 100,
// },
{
title: '备注说明',
dataIndex: 'BIZPSPLITMONTH_DESC',
ellipsis: true,
hideInTable: !(showEdit === undefined || showEdit),
},
// {
// title: '商家欠款',
// dataIndex: '',
// ellipsis: true,
// render:(_,record)=>{
// return <span style={{color:'red'}}>{record?.SUBROYALTY_PRICE===record?.SUBROYALTY_THEORY?'-':fmoney(record?.SUBROYALTY_PRICE - record?.SUBROYALTY_THEORY,2)}</span>
// }
// },
{
title: '操作',
valueType: 'option',
width: 80,
hideInTable: showType === 'Nooperate' ? true : !(showEdit === undefined || showEdit),
render: (_, record) => (
new Date(record?.STARTDATE).getTime() < new Date().getTime() && record.showAgainBtn ?
<Space>
<a
key="revenue"
onClick={async () => {
// const amount1000 = await handleAddUpdate(1000,
// record?.SHOPROYALTY_ID ? record?.SHOPROYALTY_ID : 0)
// if (amount1000) {
// actionRef.current?.reload()
// }
setTableLoading(true)
let req = {}
const yesterday = moment().subtract(1, 'day').startOf('day').format('YYYY-MM-DD')
if (new Date(yesterday).getTime() < new Date(moment(record.ENDDATE).format('YYYY-MM-DD')).getTime()) {
req = {
StartDate: moment(record.STARTDATE).format('YYYY-MM-DD'),
EndDate: moment(yesterday).format('YYYY-MM-DD'),
ProjectId: props.BUSINESSPROJECT_ID,
// OutBusinessType:props.BUSINESS_TYPE
}
} else {
req = {
StartDate: moment(record.STARTDATE).format('YYYY-MM-DD'),
EndDate: moment(record.ENDDATE).format('YYYY-MM-DD'),
ProjectId: props.BUSINESSPROJECT_ID,
// OutBusinessType:props.BUSINESS_TYPE
}
}
const data = await handleAgain(req)
setTableLoading(false)
if (data.Result_Code === 100) {
actionRef.current?.reload()
message.success(data.Result_Desc)
} else {
message.error(data.Result_Desc)
}
}}
>
</a>
</Space> : ''
),
},
]
const relateRevenuenColumns: any = [
...revenuenColumns.slice(0, 9)
]
// 拿到关联合同项目数据
const handleGetRelatedData = async (list: any) => {
console.log('list', list);
let result: any = []
// 可能存在多个关联项目
for (let i = 0; i <= list.length - 1; i++) {
const res = await handleGetSplitRes({
DataType: 2,
CompactId: list[i].REGISTERCOMPACT_ID
})
result.push({
title: list[i].COMPACT_NAME,
time: `${moment(list[i].COMPACT_STARTDATE).format('YYYY-MM-DD')}-${moment(list[i].COMPACT_ENDDATE).format('YYYY-MM-DD')}`,
STARTDATE: moment(list[i].COMPACT_STARTDATE).format('YYYY-MM-DD'),
ENDDATE: moment(list[i].COMPACT_ENDDATE).format('YYYY-MM-DD'),
data: res.data
})
// .then(res => {
// console.log('312321312312', JSON.parse(JSON.stringify(res)));
// result.push({
// title: list[i].COMPACT_NAME,
// time: `${moment(list[i].COMPACT_STARTDATE).format('YYYY-MM-DD')}-${moment(list[0].COMPACT_ENDDATE).format('YYYY-MM-DD')}`,
// data: res.data
// })
// console.log('resultresultresultresult', result);
// // for循环不一定会等接口调完 才赋值 所以放在循环里面 最后一次也会拿到最新的
// })
}
setRelateTableData(result)
return result
}
return (
<>
<ProTable<RevenueConfirmModel>
cardProps={{ // 去除表格内边距
bodyStyle: { padding: 0 }
}}
rowKey="REVENUECONFIRM_ID"
actionRef={actionRef}
loading={tableLoading}
request={async (pramas, sorter) => {
console.log('otherDate', otherDate);
setTableLoading(true)
const sortstr = Object.keys(sorter).map(n => {
const value = sorter[n]
return value ? `${n} ${value.replace('end', '')}` : ''
})
let req = {}
if (new Date(props?.PROJECT_STARTDATE).getTime() > new Date(otherDate).getTime()) {
req = {
...pramas,
BusinessProjectId: props.BUSINESSPROJECT_ID,
DataType: 2,
BusinessDate: moment(otherDate).format('YYYY-MM-DD')
}
} else {
req = {
...pramas,
BusinessProjectId: props.BUSINESSPROJECT_ID,
DataType: 2,
}
}
const data = await handleGetSplitRes(req)
console.log('fjajasdaslkd', data);
let res: any = []
if (relatedContractsList && relatedContractsList.length > 0) {
res = await handleGetRelatedData(relatedContractsList)
}
console.log('resresresresres', res);
if (res && res.length > 0) {
res.forEach((item: any) => {
if (data.data && data.data.length > 0) {
data.data.forEach((subItem: any) => {
if (new Date(item.STARTDATE).getTime() < new Date(subItem.ENDDATE).getTime() && new Date(item.ENDDATE).getTime() >= new Date(subItem.ENDDATE).getTime()) {
// 如果该行数据(上面的) 已经包括了下面的数据的时间 那么这段就不出现重新生成
} else {
subItem.showAgainBtn = true
}
})
}
})
} else {
data.data.forEach((subItem: any) => {
subItem.showAgainBtn = true
})
}
setTableLoading(false)
return data
}}
options={false}
columns={revenuenColumns}
search={false}
pagination={false}
/>
<div style={{ marginTop: '24px' }}>
{
relateTableData && relateTableData.length > 0 ?
relateTableData.map((item: any) => {
return <div>
<div style={{ paddingLeft: '12px', marginBottom: '8px' }}>{item.title ? item.title + '' : ''}{item.time || ''}</div>
<ProTable
search={false}
pagination={false}
columns={relateRevenuenColumns}
options={false}
dataSource={item.data}
/>
</div>
}) : ''
}
</div>
{/* 查看项目详情 右侧弹出的抽屉 */}
<Drawer
width="80%"
// className="project-drawer"
visible={showDetail} // 抽屉弹框是否显示状态
onClose={() => { // 关闭抽屉 设置抽屉状态为关闭
setShowDetail(false);
}}
bodyStyle={{ backgroundColor: "#f9f9f9", padding: 0 }}
closable={false}
>
{/* 抽屉打开时 加载项目详情组件 */}
{showDetail && <RevenueList BusinessProjectId={props.BUSINESSPROJECT_ID} propsBP={props} propsRC={currentRow}
ShopRoyaltyId={currentRow?.SHOPROYALTY_ID ? currentRow?.SHOPROYALTY_ID : 0}
ShopIds={currentRow?.SERVERPARTSHOP_ID ? currentRow?.SERVERPARTSHOP_ID : ''}
StartDate={moment(currentRow?.STARTDATE).format('YYYY-MM-DD')}
EndDate={moment(currentRow?.ENDDATE).format('YYYY-MM-DD')} onShow={showDetail}></RevenueList>}
</Drawer>
</>
);
}
export default ShareBenefit;