This commit is contained in:
ylj20011123 2025-12-05 19:39:56 +08:00
parent 27712ec067
commit b51847f568
2 changed files with 273 additions and 123 deletions

View File

@ -1,16 +1,18 @@
import LeftSelectTree from "@/components/leftSelectTree/leftSelectTree"; import LeftSelectTree from "@/components/leftSelectTree/leftSelectTree";
import { ActionType, FormInstance, ProForm, ProFormDatePicker, ProFormDigit, ProFormSelect, ProFormText, ProTable } from "@ant-design/pro-components"; import { ActionType, FormInstance, ProForm, ProFormDatePicker, ProFormDigit, ProFormSelect, ProFormText, ProTable } from "@ant-design/pro-components";
import { Button, Col, Divider, Modal, Row } from "antd"; import { Button, Col, Divider, message, Modal, Row } from "antd";
import { useRef, useState } from "react"; import { useRef, useState } from "react";
import { connect } from "umi"; import { connect } from "umi";
import './style.less' import './style.less'
import { handleGetServerpartTree, handleGetSERVERPARTTYPEList } from "../operationReport/service"; import { handleGetServerpartTree, handleGetSERVERPARTTYPEList, handlGetSPCONTRIBUTIONList } from "../operationReport/service";
import { handleGetServerpartInfo } from "../serverpartAssets/service"; import { handleGetServerpartInfo } from "../serverpartAssets/service";
import { encryptAES } from "@/utils/handleAes";
const RentCalculation: React.FC<{ currentUser: any }> = (props) => { const RentCalculation: React.FC<{ currentUser: any }> = (props) => {
const actionRef = useRef<ActionType>(); const actionRef = useRef<ActionType>();
const formRef = useRef<FormInstance>(); const formRef = useRef<FormInstance>();
const selectFormRef = useRef<FormInstance>();
const modalRef = useRef<FormInstance>(); const modalRef = useRef<FormInstance>();
// 树相关的属性和方法 // 树相关的属性和方法
const [selectedId, setSelectedId] = useState<string>() const [selectedId, setSelectedId] = useState<string>()
@ -25,6 +27,9 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => {
const [serverPartList, setServerPartList] = useState<any>() const [serverPartList, setServerPartList] = useState<any>()
// 当前服务区下的方位 // 当前服务区下的方位
const [SERVERPARTREGION, setSERVERPARTREGION] = useState<any>() const [SERVERPARTREGION, setSERVERPARTREGION] = useState<any>()
// 选择模式里面的 表单数据
const [selectFormData, setSelectFormData] = useState<any>()
const operatingModels = [ const operatingModels = [
'委托运营', '委托运营',
@ -194,6 +199,27 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => {
} }
console.log('listlistlist', list); console.log('listlistlist', list);
const newReq: any = {
SearchParameter: {
SERVERPART_IDS: id
},
PageIndex: 1,
PageSize: 999999,
}
let newreq: any = {
name: "",
value: encryptAES(JSON.stringify(newReq))
}
const newData = await handlGetSPCONTRIBUTIONList(newreq)
console.log('newDatanewDatanewData', newData);
if (newData && newData.length > 0) {
let res: any = newData[0].SERVERPART_TYPE
selectFormRef.current?.setFieldsValue({ rating: res })
}
setSERVERPARTREGION(list) setSERVERPARTREGION(list)
} }
@ -245,15 +271,23 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => {
<Modal <Modal
title={'请选择运营模式'} title={'请选择运营模式'}
destroyOnClose destroyOnClose
width={800} width={1200}
open={showSelectOperatingModel} open={showSelectOperatingModel}
className={'operatingModelModal'} className={'operatingModelModal'}
onCancel={() => { onCancel={() => {
setShowSelectOperatingModel(false) setShowSelectOperatingModel(false)
}} }}
footer={false} okText={'下一步'}
onOk={async () => { onOk={async () => {
setShowSelectOperatingModel(false); // setShowSelectOperatingModel(false);
selectFormRef.current?.validateFields().then((res: any) => {
if (selectedOperatingModel) {
setSelectFormData(res)
setRentCalculateModal(true)
} else {
message.success('请选择运营模式')
}
})
}} }}
> >
<div className="operatingModelModalBox"> <div className="operatingModelModalBox">
@ -263,46 +297,22 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => {
className={`operatingModelModalItemBox ${selectedOperatingModel === model ? 'selected' : ''}`} className={`operatingModelModalItemBox ${selectedOperatingModel === model ? 'selected' : ''}`}
onClick={() => { onClick={() => {
setSelectedOperatingModel(model) setSelectedOperatingModel(model)
setShowSelectOperatingModel(false); // setShowSelectOperatingModel(false);
setRentCalculateModal(true) // setRentCalculateModal(true)
}} }}
> >
{model} {model}
</div> </div>
))} ))}
</div>
</Modal>
{/* 打开实际填写测算的 悬浮框 */}
<Modal
title={'租金测算'}
destroyOnClose
width={1200}
open={rentCalculateModal}
onCancel={() => {
setSelectedOperatingModel(null)
setRentCalculateModal(false)
}}
onOk={async () => {
modalRef.current?.validateFields().then((res: any) => {
setSelectedOperatingModel(null)
setRentCalculateModal(false)
// 保存同步租金测算的方法
handleAddUpdate(res)
})
}}
>
<div className="rentCalculateModalContent" style={{ height: '700px', overflowY: 'auto', overflowX: 'hidden', boxSizing: 'border-box', width: '100%' }}>
<ProForm <ProForm
formRef={modalRef} formRef={selectFormRef}
submitter={false} submitter={false}
layout={'horizontal'} layout={'horizontal'}
labelCol={{ style: { width: 120 } }} labelCol={{ style: { width: 80 } }}
style={{ width: '100%', marginTop: '30px' }}
> >
<Row gutter={8}>
<Row gutter={16}>
<Divider orientation="left"></Divider>
<Col span={8}> <Col span={8}>
<ProFormSelect <ProFormSelect
label={'片区'} label={'片区'}
@ -335,7 +345,6 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => {
(option?.label ?? '').toLowerCase().includes(input.toLowerCase()), (option?.label ?? '').toLowerCase().includes(input.toLowerCase()),
optionFilterProp: 'label', optionFilterProp: 'label',
onChange: (value: any, option: any) => { onChange: (value: any, option: any) => {
console.log('valuevalue', value);
handleGetServerPartList(value) handleGetServerPartList(value)
if (value) { if (value) {
modalRef.current?.setFieldsValue({ belongArea: option.label }) modalRef.current?.setFieldsValue({ belongArea: option.label })
@ -359,7 +368,6 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => {
options={serverPartList} options={serverPartList}
fieldProps={{ fieldProps={{
onChange: (e: any, option: any) => { onChange: (e: any, option: any) => {
console.log('e', e);
handleGetSERVERPARTREGION(e) handleGetSERVERPARTREGION(e)
if (e) { if (e) {
modalRef.current?.setFieldsValue({ SAName: option.label }) modalRef.current?.setFieldsValue({ SAName: option.label })
@ -377,11 +385,190 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => {
name={'SAName'} name={'SAName'}
/> />
</Col> </Col>
<Col span={8}>
<ProFormSelect
label={'方位'}
name={'SERVERPART_REGION'}
options={SERVERPARTREGION}
/>
</Col>
<Col span={8}>
<ProFormSelect
label={'是否首次'}
name={'isFirst'}
rules={[
{
required: true,
message: '请选择是否为首次'
}
]}
options={[
{ label: "首次", value: 1 },
{ label: "非首次", value: 2 }
]}
/>
</Col>
<Col span={8} style={{ display: 'none' }}>
<ProFormSelect
label={'分类定级'}
name={'rating'}
options={[
{ label: "立标杆", value: 1000 },
{ label: "提能级", value: 2000 },
{ label: "稳营收", value: 3000 },
{ label: "保功能", value: 4000 },
]}
// fieldProps={{
// onChange: (e: any) => {
// if (e) {
// console.log('eeeeee', e);
// let fromRes: any = modalRef.current?.getFieldValue('floorPrice')
// if (fromRes) {
// let rate: number = 1.05
// if (e === 1000 || e === 2000) {
// rate = 1.15
// } else if (e === 3000) {
// rate = 1.1
// } else if (e === 4000) {
// rate = 1.05
// }
// let sum: number = fromRes * 1.15 * rate
// modalRef.current?.setFieldsValue({ floorPriceMore: sum.toFixed(2) })
// // 到这里是拿到新的 保底收益递增
// let newNumber: number = Number(sum.toFixed(2))
// // 先拿到判断是不是首次项目
// let formDataIsFirst: number = modalRef.current?.getFieldValue('isFirst')
// // 是首次 就不去改变 保底营业额的值 不是才计算
// if (formDataIsFirst === 1) {
// // 1 代表首次
// // 首次则 首次招标营业额 为 最高值收益(floorPriceMore) / 35%
// modalRef.current?.setFieldsValue({ firstMinimumRevenue: (Number(newNumber) / 0.35).toFixed(2) })
// // 那么二次保底营业额的值就是 第一次的值
// let firstMinimumRevenueNumber: number = Number((Number(sum.toFixed(2)) / 0.35).toFixed(2))
// modalRef.current?.setFieldsValue({ secondMinimumRevenue: (firstMinimumRevenueNumber).toFixed(2) })
// // 那么第三次保底营业额的值 就是 第二次的值 *90%
// let secondMinimumRevenue: number = Number((firstMinimumRevenueNumber).toFixed(2))
// modalRef.current?.setFieldsValue({ thriceMinimumRevenue: (secondMinimumRevenue * 0.9).toFixed(2) })
// } else if (formDataIsFirst === 2) {
// // 2 代表非首次
// // 不是首次进来 那么就不管首次保底营业额了 只要看第二次 有没有值即可 有值算第三次 没值就不算
// let secondMinimumRevenueNumber: number = modalRef.current?.getFieldValue('secondMinimumRevenue')
// if (secondMinimumRevenueNumber) {
// modalRef.current?.setFieldsValue({ thriceMinimumRevenue: (secondMinimumRevenueNumber * 0.9).toFixed(2) })
// }
// }
// }
// }
// }
// }}
/>
</Col>
</Row>
</ProForm>
</div>
</Modal>
{/* 打开实际填写测算的 悬浮框 */}
<Modal
title={'租金测算'}
destroyOnClose
width={1200}
open={rentCalculateModal}
onCancel={() => {
setSelectedOperatingModel(null)
setRentCalculateModal(false)
}}
onOk={async () => {
modalRef.current?.validateFields().then((res: any) => {
setSelectedOperatingModel(null)
setRentCalculateModal(false)
// 保存同步租金测算的方法
handleAddUpdate(res)
})
}}
>
<div className="rentCalculateModalContent" style={{ height: '700px', overflowY: 'auto', overflowX: 'hidden', boxSizing: 'border-box', width: '100%' }}>
<ProForm
formRef={modalRef}
submitter={false}
layout={'horizontal'}
labelCol={{ style: { width: 120 } }}
request={async () => {
let formData: any = selectFormRef.current?.getFieldsValue({})
console.log('formDataformDataformData', formData);
if (formData) {
return {
...formData
}
} else {
return {}
}
}}
>
<Row gutter={16}>
<Divider orientation="left"></Divider>
<Col span={8}>
<ProFormSelect
label={'片区'}
name={'belongAreaCode'}
readonly
request={async () => {
const req: any = {
SearchParameter: {
SERVERPARTSTATICTYPE_ID: 1000,
TYPE_STATE: 1,
PROVINCE_CODE: 530000
},
PageIndex: 1,
PageSize: 100,
SortStr: "TYPE_INDEX,SERVERPARTTYPE_ID"
}
const data = await handleGetSERVERPARTTYPEList(req)
console.log('datadatadatadata', data);
let list: any = []
if (data && data.length > 0) {
data.forEach((item: any) => {
list.push({ label: item.TYPE_NAME, value: item.SERVERPARTTYPE_ID })
})
}
return list
}}
/>
</Col>
<Col span={8} style={{ display: 'none' }}>
<ProFormText
label={'片区名称'}
name={'belongArea'}
readonly
/>
</Col>
<Col span={8}>
<ProFormSelect
label={'服务区'}
name={'SACode'}
options={serverPartList}
readonly
/>
</Col>
<Col span={8} style={{ display: 'none' }}>
<ProFormText
label={'服务区名称'}
name={'SAName'}
readonly
/>
</Col>
<Col span={8}> <Col span={8}>
<ProFormSelect <ProFormSelect
label={'服务区方位'} label={'服务区方位'}
name={'SERVERPART_REGION'} name={'SERVERPART_REGION'}
options={SERVERPARTREGION} options={SERVERPARTREGION}
readonly
/> />
</Col> </Col>
<Col span={8}> <Col span={8}>
@ -398,7 +585,7 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => {
}} }}
/> />
</Col> </Col>
<Col span={8}> {/* <Col span={8}>
<ProFormSelect <ProFormSelect
label={'是否首次'} label={'是否首次'}
name={'isFirst'} name={'isFirst'}
@ -424,7 +611,7 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => {
} }
}} }}
/> />
</Col> </Col> */}
<Col span={8}> <Col span={8}>
<ProFormText <ProFormText
label={'所属高速'} label={'所属高速'}
@ -438,64 +625,6 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => {
options={[]} options={[]}
/> />
</Col> </Col>
<Col span={8}>
<ProFormSelect
label={'分类定级'}
name={'rating'}
options={[
{ label: "立标杆", value: 1000 },
{ label: "提能级", value: 2000 },
{ label: "稳营收", value: 3000 },
{ label: "保功能", value: 4000 },
]}
fieldProps={{
onChange: (e: any) => {
if (e) {
console.log('eeeeee', e);
let fromRes: any = modalRef.current?.getFieldValue('floorPrice')
if (fromRes) {
let rate: number = 1.05
if (e === 1000 || e === 2000) {
rate = 1.15
} else if (e === 3000) {
rate = 1.1
} else if (e === 4000) {
rate = 1.05
}
let sum: number = fromRes * 1.15 * rate
modalRef.current?.setFieldsValue({ floorPriceMore: sum.toFixed(2) })
// 到这里是拿到新的 保底收益递增
let newNumber: number = Number(sum.toFixed(2))
// 先拿到判断是不是首次项目
let formDataIsFirst: number = modalRef.current?.getFieldValue('isFirst')
// 是首次 就不去改变 保底营业额的值 不是才计算
if (formDataIsFirst === 1) {
// 1 代表首次
// 首次则 首次招标营业额 为 最高值收益(floorPriceMore) / 35%
modalRef.current?.setFieldsValue({ firstMinimumRevenue: (Number(newNumber) / 0.35).toFixed(2) })
// 那么二次保底营业额的值就是 第一次的值
let firstMinimumRevenueNumber: number = Number((Number(sum.toFixed(2)) / 0.35).toFixed(2))
modalRef.current?.setFieldsValue({ secondMinimumRevenue: (firstMinimumRevenueNumber).toFixed(2) })
// 那么第三次保底营业额的值 就是 第二次的值 *90%
let secondMinimumRevenue: number = Number((firstMinimumRevenueNumber).toFixed(2))
modalRef.current?.setFieldsValue({ thriceMinimumRevenue: (secondMinimumRevenue * 0.9).toFixed(2) })
} else if (formDataIsFirst === 2) {
// 2 代表非首次
// 不是首次进来 那么就不管首次保底营业额了 只要看第二次 有没有值即可 有值算第三次 没值就不算
let secondMinimumRevenueNumber: number = modalRef.current?.getFieldValue('secondMinimumRevenue')
if (secondMinimumRevenueNumber) {
modalRef.current?.setFieldsValue({ thriceMinimumRevenue: (secondMinimumRevenueNumber * 0.9).toFixed(2) })
}
}
}
}
}
}}
/>
</Col>
<Col span={8}> <Col span={8}>
<ProFormSelect <ProFormSelect
label={'评审方式'} label={'评审方式'}
@ -529,12 +658,6 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => {
selectedOperatingModel === '委托运营' ? selectedOperatingModel === '委托运营' ?
<> <>
<Divider orientation="left"></Divider> <Divider orientation="left"></Divider>
<Col span={8}>
<ProFormText
label={'经营面积(m²)'}
name={''}
/>
</Col>
<Col span={8}> <Col span={8}>
<ProFormDatePicker <ProFormDatePicker
label={'合同到期时间'} label={'合同到期时间'}
@ -582,26 +705,35 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => {
fieldProps={{ fieldProps={{
onChange: (e: any) => { onChange: (e: any) => {
if (e) { if (e) {
let fromRes: any = modalRef.current?.getFieldValue('rating') let fromRes: any = Number(selectFormData?.rating)
console.log('fromResfromRes', fromRes); if (fromRes) {
let rate: number = 1.05 let rate: number = 1.05
if (fromRes === 1000 || fromRes === 2000) { if (fromRes === 1000 || fromRes === 2000) {
rate = 1.15 rate = 1.15
} else if (fromRes === 3000) { } else if (fromRes === 3000) {
rate = 1.1 rate = 1.1
} else if (fromRes === 4000) { } else if (fromRes === 4000) {
rate = 1.05 rate = 1.05
} }
let sum: number = e * 1.15 * rate
modalRef.current?.setFieldsValue({ floorPriceMore: sum.toFixed(2) })
let sum: number = e * 1.15 * rate // 是首次 那么就要把 1 2 3 次都算出来 不是首次的话 就算 2 3 即可
// 先拿到判断是不是首次项目 if (selectFormData?.isFirst === 1) {
let formDataIsFirst: number = modalRef.current?.getFieldValue('isFirst') // 是首次的话
// 是首次 就不去改变 保底营业额的值 不是才计算 modalRef.current?.setFieldsValue({ firstMinimumRevenue: (Number(sum.toFixed(2)) / 0.35).toFixed(2) })
if (formDataIsFirst === 1) { // 首次的钱 赋值一下
} else if (formDataIsFirst === 2) { let firstMinimumRevenueNumber: number = Number((Number(sum.toFixed(2)) / 0.35).toFixed(2))
modalRef.current?.setFieldsValue({ firstMinimumRevenue: (Number(sum.toFixed(2)) / 0.35).toFixed(2) }) // 第二次就是第一次的值
modalRef.current?.setFieldsValue({ secondMinimumRevenue: (Number(firstMinimumRevenueNumber)).toFixed(2) })
// 给第二次的钱 赋值一下
let secondMinimumRevenueNumber: number = Number((Number(firstMinimumRevenueNumber)).toFixed(2))
// 第三次的钱是第二次的90%
modalRef.current?.setFieldsValue({ thriceMinimumRevenue: (Number(secondMinimumRevenueNumber) * 0.9).toFixed(2) })
} else if (selectFormData?.isFirst === 2) {
// 非首次 这边怎么样都没关系了 等用户自己输入第一次的值之后 再给他补齐 2 3 次
}
} }
modalRef.current?.setFieldsValue({ floorPriceMore: sum.toFixed(2) })
} }
} }
}} }}
@ -650,7 +782,10 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => {
onChange: (e: any) => { onChange: (e: any) => {
if (e) { if (e) {
let sum: number = e * 0.9 let sum: number = e * 0.9
modalRef.current?.setFieldsValue({ secondMinimumRevenue: sum.toFixed(2), thriceMinimumRevenue: (Number(sum.toFixed(2)) * 0.9).toFixed(2) }) modalRef.current?.setFieldsValue({
secondMinimumRevenue: e,
thriceMinimumRevenue: sum.toFixed(2)
})
} }
} }
}} }}
@ -660,7 +795,7 @@ const RentCalculation: React.FC<{ currentUser: any }> = (props) => {
<ProFormDigit <ProFormDigit
label={'收益提点比例(%'} label={'收益提点比例(%'}
name={'firstReminder'} name={'firstReminder'}
initialValue={38} initialValue={selectFormData?.isFirst === 1 ? 38 : 32}
/> />
</Col> </Col>
<Divider orientation="left"></Divider> <Divider orientation="left"></Divider>

View File

@ -112,3 +112,18 @@ export async function handlGetPatrolSecurityList(params: any) {
return data.Result_Data.List return data.Result_Data.List
} }
// 拿到当前服务区的 分类定级
export async function handlGetSPCONTRIBUTIONList(params: any) {
const data = await requestOld(`/Analysis/GetSPCONTRIBUTIONList`, {
method: 'POST',
data: params
})
if (data.Result_Code !== 100) {
return data
}
return data.Result_Data.List
}