This commit is contained in:
ylj20011123 2025-12-10 19:52:54 +08:00
parent 7f0e90bd01
commit 85b417e367
15 changed files with 1947 additions and 117 deletions

View File

@ -68,6 +68,11 @@ export default [
name: '租金测算',
component: "@/pages/RentCalculation/index",
},
{
path: '/rentComparison/index',
name: '租金对比',
component: "@/pages/rentComparison/index",
},
]

BIN
src/assets/operation.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -293,6 +293,12 @@ const UserModel: UserModelType = {
name: '租金测算',
component: "@/pages/RentCalculation/index",
},
{
path: '/rentComparison/index',
redirect: '',
name: '租金对比',
component: "@/pages/rentComparison/index",
},
]
}
@ -374,6 +380,7 @@ const UserModel: UserModelType = {
"/operationReport/securityIssueList",
"/operationReport/rectificationStatus",
"/RentCalculation/index",
"/rentComparison/index",
// '/examine/index',
// '/examine/modal',
// '/examine/question',

View File

@ -314,8 +314,6 @@ const DigitalElectronics: React.FC<{ currentUser: any }> = (props) => {
// 撤回发票
const handleRevokeBill = async (detail: any) => {
console.log('detaildetaildetaildetail', detail);
let obj: any = {
sellerTaxpayerId: publicParams.sellerTaxpayerId,//销方税号
orgCode: "",// 组织编号
@ -343,7 +341,6 @@ const DigitalElectronics: React.FC<{ currentUser: any }> = (props) => {
let responseOld = await handleGetForwardJDPJInterface(newTokenReq2)
responseOld = JSON.parse(responseOld as any)
console.log('responseOldresponseOld', responseOld);
if (responseOld && (responseOld.success || responseOld.errorCode == 10905)) {
return {
@ -570,8 +567,6 @@ const DigitalElectronics: React.FC<{ currentUser: any }> = (props) => {
SortStr: "BILLDETAIL_ID"
})
console.log('billDetailbillDetail', billDetail);
let billDetailReq: any = []
if (billDetail && billDetail.length > 0) {
billDetail.forEach((item: any) => {
@ -688,7 +683,6 @@ const DigitalElectronics: React.FC<{ currentUser: any }> = (props) => {
PageSize: 999999,
SortStr: "BILLDETAIL_ID"
})
console.log('billDetailbillDetail', billDetail);
let billDetailReq: any = []
if (billDetail && billDetail.length > 0) {
@ -767,7 +761,6 @@ const DigitalElectronics: React.FC<{ currentUser: any }> = (props) => {
let response: any = await handleGetForwardJDPJInterface(newreq)
let result: any = JSON.parse(response)
console.log('resultresultresult', result);
return result
}
// 退回开票

View File

@ -34,7 +34,6 @@ const InvoiceSearch: React.FC = () => {
// 查看详情
const handleViewDetail = (record: any) => {
message.info('查看详情功能待开发');
console.log('详情数据:', record);
};
// 表格列定义
@ -212,7 +211,6 @@ const InvoiceSearch: React.FC = () => {
// 撤回
const handleRevoke = async (params: any) => {
console.log('paramsparamsparams', params);
const queryData = {
sellerTaxpayerId: "91530112MA7MQ2JR9U",
serialNos: params.billNo || "",
@ -243,8 +241,6 @@ const InvoiceSearch: React.FC = () => {
// 红冲
const handleRedReversal = async (params: any) => {
// 整单红冲 不需要调用红冲接口 申请里面放蓝票信息 就是红冲
console.log('paramsparams', params);
let obj: any = {
billNo: "SRM_202509011370",
billDate: "2025-09-01",
@ -291,7 +287,6 @@ const InvoiceSearch: React.FC = () => {
}
]
}
console.log('objobjobj', obj);
// 构造原始数据
const originalData = [obj]; // 将record作为data数组的一项
@ -307,7 +302,6 @@ const InvoiceSearch: React.FC = () => {
};
const response = await handleGetKaiPiao(invoiceData, accessToken);
console.log('responseresponseresponse', response);
// const queryData = {
// billNo: params?.billNo || "",
@ -316,7 +310,6 @@ const InvoiceSearch: React.FC = () => {
// sellerTaxpayerId: "91530112MA7MQ2JR9U",
// redReason: "111",
// };
// console.log('queryDataqueryDataqueryData', queryData);
// // 将data字段进行base64加密
// const dataString = JSON.stringify(queryData);
@ -329,11 +322,9 @@ const InvoiceSearch: React.FC = () => {
// }
// // 他这个接口 就一个地址 改不一样的参数就能调不一样的接口
// const data = await handleGetInvoiceSearch(req, accessToken)
// console.log('datadatadatadata', data);
// if (data && data.success) {
// let res = JSON.parse(decodeURIComponent(escape(atob(data.data))))
// console.log('resresresresres', res);
// if (res && res.length > 0) {
// let result = res[0]
// message.success(result.message)
@ -347,7 +338,6 @@ const InvoiceSearch: React.FC = () => {
// 请求表格数据
const request = async (params: any) => {
try {
console.log('查询参数:', params);
let req: any = {
appId: "FPY001",
appSecret: "FPY001fpy@2023***",
@ -356,7 +346,6 @@ const InvoiceSearch: React.FC = () => {
language: ""
}
const token = await handleGetAppToken(req)
console.log('tokentokentoken', token);
let appToken: any = token.data.app_token
@ -369,7 +358,6 @@ const InvoiceSearch: React.FC = () => {
}
const accessToken: any = await handleGetSDToken(tokenReq)
console.log('accessTokenaccessTokenaccessToken', accessToken);
setAppToken(appToken)
setAccessToken(accessToken.data.access_token)
@ -391,17 +379,14 @@ const InvoiceSearch: React.FC = () => {
data: encryptedData
};
console.log('最终请求参数:', requestParams);
// 调用查询接口 (这里需要传入正确的code参数)
const response = await handleGetInvoiceSearch(requestParams, accessToken.data.access_token);
console.log('responseresponseresponseresponse', response);
if (response && response.success) {
let res = JSON.parse(decodeURIComponent(escape(atob(response.data))))
console.log('最终请求结果:', res);
let result = res[0].invoiceList
return { data: result || [], success: true };

View File

@ -33,16 +33,11 @@ const InvoicingIndex: React.FC<{ currentUser: any }> = (props) => {
// 开始刷脸认证的流程
const handleGetFacialAuthentication = async () => {
let url = window.location.search.split('?')[1]
console.log('url', url);
const params = new URLSearchParams(url);
console.log('params', params);
let resultObj: any = {};
for (const [key, value] of params.entries()) {
resultObj[key] = value;
}
console.log('resultObj', resultObj);
let code = "menuCloud"
if (resultObj.UserIdEncrypted) {
@ -59,9 +54,7 @@ const InvoicingIndex: React.FC<{ currentUser: any }> = (props) => {
// code: code
// }
// const data = await handleGetBWTokenFun(req)
// console.log('data', data);
// let token = data.data.data.token
// console.log('token', token);
let codeReq: any = {
qrCodeType: 0,
@ -69,8 +62,6 @@ const InvoicingIndex: React.FC<{ currentUser: any }> = (props) => {
}
// 刷脸二维码的值
const qrCodeData = await handleGetCertifyQrcode('menuCloud', codeReq)
console.log('qrCodeData', qrCodeData);
console.log('321', qrCodeData.data.response.qrCode);
let length = qrCodeData.data.response.qrCode.split(',') && qrCodeData.data.response.qrCode.split(',').length > 0 ? qrCodeData.data.response.qrCode.split(',').length : 0
let img = qrCodeData.data.response.qrCode.split(',')[length - 1]
@ -93,7 +84,6 @@ const InvoicingIndex: React.FC<{ currentUser: any }> = (props) => {
certifyQueryType: 1
})
let res: any = resultData.data.response
console.log('res', res);
if (res.certificationStatus == '1') {
if (timerRef.current) {
clearInterval(timerRef.current)
@ -298,8 +288,6 @@ const InvoicingIndex: React.FC<{ currentUser: any }> = (props) => {
render: (_, record) => {
return <Space>
<a onClick={() => {
console.log('record', record);
handleInvoicing(record)
}}>
@ -325,16 +313,12 @@ const InvoicingIndex: React.FC<{ currentUser: any }> = (props) => {
pushPhone: obj.pushPhone, // 交付手机
pushEmail: obj.pushEmail // 交付邮箱
}
console.log('req', req);
// return
const data = await handleGetDeliver('menuCloud', req)
console.log('data', data);
}
// 作废
const handleCancelInvoicing = async (obj: any) => {
console.log('obj', obj);
const req: any = {
taxNo: BWDetailObj.taxNo,
serialNo: obj.serialNo,
@ -350,7 +334,6 @@ const InvoicingIndex: React.FC<{ currentUser: any }> = (props) => {
const handleGetUserInfo = async (UserIdEncrypted: string) => {
const req: any = { UserIdEncrypted: UserIdEncrypted }
const data = await handleGetUserInfoById(req)
console.log('handleGetUserInfo', data);
let userDetail: any = data.Result_Data
setUserInfo(userDetail)
}
@ -375,7 +358,6 @@ const InvoicingIndex: React.FC<{ currentUser: any }> = (props) => {
headerTitle={<span style={{ color: "#1890ff", fontSize: 14, fontWeight: 600 }}></span>}
search={{ span: 6 }}
request={async (params: any) => {
console.log('params', params);
// startOf('M').
let [state, end] = [moment().format('YYYY-MM-DD 00:00:00'), moment().format('YYYY-MM-DD 23:59:59')]
const req: any = {
@ -387,9 +369,7 @@ const InvoicingIndex: React.FC<{ currentUser: any }> = (props) => {
endDate: end || ''
}
const data = await handleGetInvoicePageTable('menuCloud', req)
console.log('data3232', data);
let tableData: any = data.data.response
console.log('tableData3232', tableData);
if (tableData.list && tableData.list.length > 0) {
return {

File diff suppressed because it is too large Load Diff

View File

@ -31,7 +31,305 @@
}
}
.rentCalculateModalContent::-webkit-scrollbar {
display: none;
}
.analysisModalBox {
.analysisModalContentBox {
width: 100%;
max-height: 700px;
overflow-y: auto;
.serverPart {
display: flex;
//align-items: center;
justify-content: space-between;
width: 100%;
height: 70px;
border-bottom: 2px solid #EBEDF5;
margin-bottom: 16px;
.serverPartBox {
width: 80px;
height: 60px;
border-radius: 8px;
overflow: hidden;
position: relative;
margin-right: 12px;
.serverPartBoxBg {
width: 80px;
height: 80px;
position: absolute;
top: 0;
left: 0;
z-index: 1;
}
.nameBox {
position: absolute;
z-index: 2;
top: 14px;
left: 10px;
display: flex;
flex-direction: column;
.titleName {
font-family: PingFangSC, PingFang SC;
font-weight: 600;
font-size: 14px;
color: #2858CC;
line-height: 20px;
text-align: left;
font-style: normal;
}
.labelName {
font-family: PingFangSC, PingFang SC;
font-weight: 500;
font-size: 12px;
color: #2858CC;
line-height: 12px;
text-align: left;
font-style: normal;
}
}
.statusBox {
padding: 1px 4px;
box-sizing: border-box;
color: #fff;
font-size: 10px;
background: #2ABAC6;
border-radius: 0px 8px 0px 8px;
z-index: 2;
display: inline-block;
position: absolute;
top: 0;
right: 0;
}
}
.serverPartDetail {
height: 60px;
display: flex;
flex-direction: column;
justify-content: space-between;
.serverPartDetailTop {
display: flex;
align-items: center;
flex-wrap: wrap;
.serverPartName {
font-family: PingFangSC, PingFang SC;
font-weight: 600;
font-size: 20px;
color: #333333;
line-height: 28px;
text-align: left;
font-style: normal;
}
.serverPartType {
margin-left: 8px;
background: linear-gradient(134deg, #FFEED1 0%, #FFE1CD 100%);
border-radius: 2px;
box-sizing: border-box;
color: #FFA509;
padding: 0 10px;
}
}
.serverPartDetailBottom {
display: flex;
margin-top: 12px;
.businessBox {
margin-right: 8px;
background: #E7F0FF;
box-sizing: border-box;
padding: 2px 8px;
border-radius: 2px;
display: flex;
align-items: center;
.businessIcon {
width: 16px;
height: 16px;
margin-right: 4px;
}
.businessText {
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: 14px;
color: #1E58BE;
line-height: 22px;
text-align: left;
font-style: normal;
margin-right: 4px;
white-space: nowrap;
}
.businessValue {
font-family: DINAlternate, DINAlternate;
font-weight: bold;
font-size: 18px;
color: #1E58BE;
line-height: 22px;
text-align: left;
font-style: normal;
}
}
}
.bigTitlte {
font-family: PingFangSC, PingFang SC;
font-weight: 600;
font-size: 20px;
color: #333333;
line-height: 28px;
text-align: left;
margin-bottom: 0 !important;
}
}
.brandBox {
display: flex;
width: 250px;
flex-direction: column;
.brandIcon {
width: 80px;
height: 80px;
}
.brandName {
font-family: PingFangSC, PingFang SC;
font-weight: 600;
font-size: 14px;
color: #2858CC;
line-height: 20px;
text-align: left;
font-style: normal;
width: 170px;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
}
}
.operateLeft {
display: flex;
align-items: center;
margin-bottom: 6px;
.operateIcon {
width: 24px;
height: 24px;
margin-right: 6px;
}
.titleName {
font-family: PingFangSC, PingFang SC;
font-weight: 600;
font-size: 14px;
color: #183362;
line-height: 24px;
text-align: left;
font-style: normal;
}
}
.paragraph {
font-family: PingFangSC, PingFang SC;
font-size: 14px !important;
line-height: 28px !important;
.keynote {
font-weight: 600;
color: #1890ff;
font-family: PingFangSC, PingFang SC;
}
.beforeBluePoint {
position: relative;
}
.beforeBluePoint::before {
content: '';
width: 8px;
height: 8px;
border-radius: 50%;
background-color: #1890ff;
position: absolute;
top: 50%;
transform: translateY(-50%);
left: 1rem;
}
.titleName {
font-family: PingFangSC, PingFang SC;
font-weight: 600;
font-size: 14px;
color: #333333;
line-height: 20px;
text-align: left;
font-style: normal;
}
.numberValue {
font-family: PingFangSC, PingFang SC;
font-weight: bold;
font-size: 14px;
color: #243F6E;
line-height: 28px;
text-align: left;
font-style: normal;
}
.compare {
font-family: PingFangSC, PingFang SC;
font-weight: bold;
font-size: 14px;
color: #FE7628;
line-height: 28px;
text-align: left;
font-style: normal;
}
.unit {
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: 14px;
color: #788395;
line-height: 22px;
text-align: left;
font-style: normal;
}
}
.proposal {
text-indent: 2rem;
font-size: 14px !important;
line-height: 28px !important;
font-family: PingFangSC, PingFang SC;
.keynote {
font-weight: 600;
color: #1890ff;
}
.proposalTitle {
font-weight: 600;
color: #FE7628;
}
}
}
}

View File

@ -12,6 +12,7 @@ const authority: PageAuthority = {
'/operationReport/securityIssueList': ['/operationReport/securityIssueList'],
'/operationReport/rectificationStatus': ['/operationReport/rectificationStatus'],
'/RentCalculation/index': ['/RentCalculation/index'],
'/rentComparison/index': ['/rentComparison/index'],
};

View File

@ -136,8 +136,6 @@ const OperationReport = ({ PATROLID }: DetailProps) => {
const handleAddUpdate = async (obj: any) => {
// 用参数去判断 两个嵌套的子集 是否已经有数据了 没有的话 就提示
let list: any = []
console.log('inspectionItemsTableDatainspectionItemsTableData', inspectionItemsTableData);
console.log('inspectionItemObjinspectionItemObjinspectionItemObj', inspectionItemObj);
if (inspectionItemsTableData && inspectionItemsTableData.length > 0) {
list = JSON.parse(JSON.stringify(inspectionItemsTableData))
list.forEach((item: any) => {
@ -162,9 +160,6 @@ const OperationReport = ({ PATROLID }: DetailProps) => {
PATROL_TYPE: pageDataType || 1000,
PATROLDETAILList: list
}
console.log('reqreqreq', req);
if (req.PATROLDETAILList && req.PATROLDETAILList.length > 0) {
// 只要有一个子集就是 true
@ -188,7 +183,6 @@ const OperationReport = ({ PATROLID }: DetailProps) => {
value: encryptAES(JSON.stringify(req))
}
const data = await handleSynchroPATROL(newReq)
console.log('datadadsad', data);
if (data.Result_Code === 100) {
message.success('同步成功!')
@ -205,7 +199,6 @@ const OperationReport = ({ PATROLID }: DetailProps) => {
SPRegionType_ID: id
}
const data = await handleGetServerpartTree(req)
console.log('dsadasda', data);
if (data && data.length > 0) {
let list = data[0].children
setServerPartList(list)
@ -271,7 +264,6 @@ const OperationReport = ({ PATROLID }: DetailProps) => {
// 拿到整改情况的录入数据
const handleGetRectificationStatusData = async (formData: any) => {
console.log('formDataformData', formData);
const req: any = {
...formData,
PATROL_ID: PATROLID,
@ -301,14 +293,12 @@ const OperationReport = ({ PATROLID }: DetailProps) => {
SERVERPARTId: id
}
const data = await handleGetServerpartInfo(req)
console.log('datadatadata', data);
let list: any = []
if (data.RegionInfo && data.RegionInfo.length > 0) {
data.RegionInfo.forEach((item: any) => {
list.push({ label: item.SERVERPART_REGIONNAME, value: item.SERVERPART_REGION })
})
}
console.log('listlistlist', list);
setSERVERPARTREGION(list)
}
@ -329,8 +319,6 @@ const OperationReport = ({ PATROLID }: DetailProps) => {
}
setSaveLoading(true)
console.log('resres', res);
handleAddUpdate(res)
})
}}></Button>
@ -347,7 +335,6 @@ const OperationReport = ({ PATROLID }: DetailProps) => {
// 地址栏传参 UserIdEncrypted 为当前登录用户的加密id
const search = window.location.search;
const addressParams = Object.fromEntries(new URLSearchParams(search).entries());
console.log('addressParamsaddressParams', addressParams);
const req: any = {
UserIdEncrypted: addressParams.UserIdEncrypted
}
@ -357,7 +344,6 @@ const OperationReport = ({ PATROLID }: DetailProps) => {
if (addressParams.dataType) {
setPageDataType(Number(addressParams.dataType))
}
console.log('PATROLIDPATROLIDPATROLIDPATROLID', PATROLID);
if (PATROLID) {
const req: any = {
@ -372,15 +358,12 @@ const OperationReport = ({ PATROLID }: DetailProps) => {
value: encryptAES(JSON.stringify(req))
}
const data = await handleGetPATROLList(newReq)
console.log('datadatadata3213', data);
if (data && data.length > 0) {
let detail: any = data[0]
console.log('detaildetail', detail);
setCurrentRecord(detail)
if (detail.PATROLDETAILList && detail.PATROLDETAILList.length > 0) {
console.log('sdada', detail.PATROLDETAILList);
let list: any = detail.PATROLDETAILList
setInspectionItemsTableData(list)
@ -443,7 +426,6 @@ const OperationReport = ({ PATROLID }: DetailProps) => {
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) => {
@ -458,7 +440,6 @@ const OperationReport = ({ PATROLID }: DetailProps) => {
(option?.label ?? '').toLowerCase().includes(input.toLowerCase()),
optionFilterProp: 'label',
onChange: (value: any, option: any) => {
console.log('valuevalue', value);
handleGetServerPartList(value)
if (value) {
formRef.current?.setFieldsValue({ SPREGIONTYPE_NAME: option.label })
@ -492,7 +473,6 @@ const OperationReport = ({ PATROLID }: DetailProps) => {
options={serverPartList}
fieldProps={{
onChange: (e: any, option: any) => {
console.log('e', e);
handleGetSERVERPARTREGION(e)
if (e) {
formRef.current?.setFieldsValue({ SERVERPART_NAME: option.label })

View File

@ -1,3 +1,4 @@
import requestCode from "@/utils/requestCode"
import requestOld from "@/utils/requestOld"
// 获取日常巡检表列表
@ -159,6 +160,48 @@ export async function handlGetRENTCALCULATIONList(params: any) {
}
// 拿到服务区合同列表
export async function handlGetREGISTERCOMPACTList(params: any) {
const data = await requestOld(`/Compact/GetREGISTERCOMPACTList`, {
method: 'POST',
data: params
})
if (data.Result_Code !== 100) {
return data
}
return data.Result_Data.List
}
// 根据合同获取提成比例列表 的列表
export async function handlGetPERCENTAGEOFCOMMISSIONList(params: any) {
const data = await requestOld(`/Compact/GetPERCENTAGEOFCOMMISSIONList`, {
method: 'POST',
data: params
})
if (data.Result_Code !== 100) {
return data
}
return data.Result_Data.List
}
// 获取营收和车流的 用来租金测算的基础数据
export async function handlGetMonthAnalysis(params: any) {
const data = await requestCode(`/BigData/GetMonthAnalysis`, {
method: 'GET',
params
})
if (data.Result_Code !== 100) {
return data
}
return data.Result_Data.List
}
// 租金测算的列表接口
export async function handlGetDeleteRENTCALCULATION(params: any) {
const data = await requestOld(`/Analysis/DeleteRENTCALCULATION`, {

View File

@ -60,6 +60,7 @@ const InvoiceDetail = ({ showDetail, setShowDetail, parentRow, setParentRow }: P
align: 'left',
width: 200,
dataIndex: "TABLE_NAME",
ellipsis: true,
render: (_, record) => {
return isEdit ? <Input defaultValue={record.TABLE_NAME} onBlur={(e: any) => {
console.log('eee', e);
@ -76,9 +77,10 @@ const InvoiceDetail = ({ showDetail, setShowDetail, parentRow, setParentRow }: P
},
{
title: <div style={{ textAlign: 'center' }}></div>,
align: 'center',
width: 120,
dataIndex: "ITEM_ID"
align: 'left',
width: 150,
dataIndex: "ITEM_ID",
ellipsis: true
},
{
title: <div style={{ textAlign: 'center' }}></div>,

View File

@ -0,0 +1,583 @@
import LeftSelectTree from "@/components/leftSelectTree/leftSelectTree";
import { encryptAES } from "@/utils/handleAes";
import { useRef, useState } from "react";
import { connect } from "umi";
import { handlGetMonthAnalysis, handlGetPERCENTAGEOFCOMMISSIONList, handlGetREGISTERCOMPACTList, handlGetRENTCALCULATIONList, handlGetSPCONTRIBUTIONList } from "../operationReport/service";
import { handleGetPassportInfoById } from "../DigitalElectronics/service";
import { ActionType, FormInstance, ProTable } from "@ant-design/pro-components";
import moment from "moment";
import { Modal, Tooltip } from "antd";
import './style.less'
import operation from '../../assets/operation.png'
const rentComparison: React.FC<{ currentUser: any }> = (props) => {
const actionRef = useRef<ActionType>();
const formRef = useRef<FormInstance>();
// 树相关的属性和方法
const [selectedId, setSelectedId] = useState<string>()
const [collapsible, setCollapsible] = useState<boolean>(false)
// 当前的用户信息
const [userInfoDetail, setUserInfoDetail] = useState<any>()
// 详情悬浮框
const [detailModal, setDetailModal] = useState<boolean>(false)
// 当前行数据
const [currentRow, setCurrentRow] = useState<any>()
// 表格的默认搜索条件
const [searchParams, setSearchParams] = useState<any>()
// 悬浮框里面 需要显示的内容的总体对象
const [currentObj, setCurrentObj] = useState<any>()
// 对比的 排名前五的数据
const [top5Data, setTop5Data] = useState<any>()
// 悬浮框在请求数据的时候的加载效果
const [modalLoading, setModalLoading] = useState<boolean>(false)
const SERVERPART_TYPEObj: any = {
1000: "立标杆",
2000: "提能级",
3000: "稳营收",
4000: "保功能",
}
const columns: any = [
{
title: "统计日期",
dataIndex: "staticDate",
hideInTable: true,
valueType: "dateRange",
initialValue: [moment().startOf('M'), moment()],
search: {
transform: (value: any) => {
return {
COMPACT_STARTDATE_End: moment().startOf('y').format('YYYY-MM-DD'),
COMPACT_ENDDATE_Start: moment().format('YYYY-MM-DD')
};
},
},
fieldProps: {
picker: "day",
format: 'YYYY-MM-DD',
}
},
{
title: "服务区名称",
dataIndex: "SERVERPART_NAME",
width: 150,
hideInSearch: true,
ellipsis: true,
align: 'center'
},
{
title: "合同名称",
dataIndex: "COMPACT_NAME",
width: 300,
hideInSearch: true,
ellipsis: true,
align: 'center',
render: (_, record) => {
return record?.COMPACT_NAME ?
<a onClick={() => {
setModalLoading(true)
setCurrentRow(record)
setDetailModal(true)
}}>{record?.COMPACT_NAME || ""}</a> : ""
}
},
{
title: "合同格式",
dataIndex: "ISFORMAT",
width: 150,
hideInSearch: true,
ellipsis: true,
valueType: 'select',
valueEnum: {
1000: "联合经营",
2000: "委托运营管理",
3000: "固定租金",
4000: "业主自营",
},
align: 'center'
},
{
title: <div style={{ textAlign: 'center' }}>()</div>,
dataIndex: "COMPACT_AMOUNT",
width: 150,
hideInSearch: true,
ellipsis: true,
align: 'right',
valueType: 'digit'
},
{
title: <div style={{ textAlign: 'center' }}>()</div>,
dataIndex: "SECURITYDEPOSIT",
width: 150,
hideInSearch: true,
ellipsis: true,
align: 'right',
valueType: 'digit'
},
{
title: <div style={{ textAlign: 'center' }}>()</div>,
dataIndex: "DURATIONDAY",
width: 150,
hideInSearch: true,
ellipsis: true,
align: 'right',
valueType: 'digit'
},
{
title: "开始时间",
dataIndex: "COMPACT_STARTDATE",
width: 150,
hideInSearch: true,
ellipsis: true,
align: 'center',
render: (_, record) => {
return record?.COMPACT_STARTDATE ? moment(record?.COMPACT_STARTDATE).format('YYYY-MM-DD') : ""
}
},
{
title: "结束时间",
dataIndex: "COMPACT_ENDDATE",
width: 150,
hideInSearch: true,
ellipsis: true,
align: 'center',
render: (_, record) => {
return record?.COMPACT_ENDDATE ? moment(record?.COMPACT_ENDDATE).format('YYYY-MM-DD') : ""
}
},
{
title: "甲方",
dataIndex: "FIRSTPART_NAME",
width: 250,
hideInSearch: true,
ellipsis: true,
align: 'center'
},
{
title: "乙方",
dataIndex: "SECONDPART_NAME",
width: 250,
hideInSearch: true,
ellipsis: true,
align: 'center'
}
]
// 租金对比
const handleGetRentComparison = async () => {
console.log('dsakdas', currentRow);
// 先拿到当前合同的提成比例
const req: any = {
searchParameter: {
REGISTERCOMPACT_IDS: currentRow?.REGISTERCOMPACT_ID,
STARTDATE_End: searchParams?.COMPACT_ENDDATE_Start || "",
ENDDATE_Start: searchParams?.COMPACT_STARTDATE_End || "",
},
PageIndex: 1,
PageSize: 999999,
}
console.log('reqreqreqreq', req);
let newReq: any = {
name: "",
value: encryptAES(JSON.stringify(req))
}
const data = await handlGetPERCENTAGEOFCOMMISSIONList(newReq)
console.log('dakdjsakldjsa', data);
// 可能会查出来多条 我们取最新的 就是后面的那条
// 提成比例的数据 这是取出当期的
let commissionObj: any = {}
if (data && data.length > 0) {
commissionObj = data[data.length - 1]
}
// 现在取出上一期的
let previousReq: any = {
searchParameter: {
REGISTERCOMPACT_IDS: currentRow?.REGISTERCOMPACT_ID,
STARTDATE_End: moment(searchParams?.COMPACT_ENDDATE_Start).subtract(1, 'y').format('YYYY-MM-DD'),
ENDDATE_Start: moment(searchParams?.COMPACT_STARTDATE_End).subtract(1, 'y').format('YYYY-MM-DD'),
},
PageIndex: 1,
PageSize: 999999,
}
let newPreviousReq: any = {
name: "",
value: encryptAES(JSON.stringify(previousReq))
}
const previousData = await handlGetPERCENTAGEOFCOMMISSIONList(newPreviousReq)
console.log('previousDatapreviousDatapreviousData', previousData);
// 拿到上一期的数据
let commissionObjPrevious: any = {}
if (previousData && previousData.length > 0) {
commissionObjPrevious = previousData[previousData.length - 1]
}
console.log('commissionObjPreviouscommissionObjPreviouscommissionObjPrevious', commissionObjPrevious);
// 拿到营收数据
// 这里的时间 先写死 25年1月到8月
const revenueReq: any = {
StatisticsDate: "2025/12/31",
StartDate: "2025/01/01",
EndDate: "2025/08/31",
Serverpart_ID: currentRow?.SERVERPART_ID
}
const revenueData: any = await handlGetMonthAnalysis(revenueReq)
console.log('revenueDatarevenueDatarevenueData', revenueData);
// 这是一个月一个月给的营收数据的数组 我们算全年的 就 取平均 然后 *12
let yearRevenueSum: number = 0
if (revenueData && revenueData.length > 0) {
// 取营收的平均值 车流当前显示的内容 不需要车流数据了
let revenueSum: number = 0
let revenueAvg: number = 0
revenueData.forEach((item: any) => {
revenueSum += item.RevenueAmount
})
revenueAvg = Number((revenueSum / revenueData.length).toFixed(2))
yearRevenueSum = revenueAvg * 12
}
// 全年营收
console.log('yearRevenueSumyearRevenueSumyearRevenueSumyearRevenueSum', yearRevenueSum);
// 提成比例的数据对象
console.log('commissionObjcommissionObj', commissionObj);
let nowProfit: number = Number(((Number(yearRevenueSum) * Number(commissionObj.GUARANTEERATIO / 100)) / 10000).toFixed(2))
let res: any = {
...currentRow,
noRate: commissionObj.GUARANTEERATIO ? false : true,
max: commissionObj?.EXCESSRATIO || commissionObj?.GUARANTEERATIO || "",
min: commissionObj?.GUARANTEERATIO || "",
MINTURNOVERMin: commissionObj?.MINTURNOVER || "",
MINTURNOVERMax: commissionObj?.MINTURNOVER || "",
avg: commissionObj?.GUARANTEERATIO || "",
MINTURNOVERAvg: commissionObj?.MINTURNOVER || "",
MINTURNOVER: commissionObj?.MINTURNOVER || "",
GUARANTEERATIO: commissionObj?.GUARANTEERATIO || "",
profit: Number((yearRevenueSum / 10000).toFixed(2)),
avgThanNowRate: commissionObjPrevious.GUARANTEERATIO > commissionObj.GUARANTEERATIO,
oldRate: commissionObjPrevious.GUARANTEERATIO,
reduce: commissionObjPrevious.GUARANTEERATIO - commissionObj.GUARANTEERATIO,
nowRate: commissionObj.GUARANTEERATIO,
BUSINESS_TYPEMINTURNOVER: commissionObjPrevious.MINTURNOVER,
nowGUARANTEERATIO: commissionObjPrevious.GUARANTEERATIO,
differenceGUARANTEERATIO: commissionObj.GUARANTEERATIO - commissionObjPrevious.GUARANTEERATIO,
MINTURNOVERAvgThanAvg: commissionObjPrevious.MINTURNOVER > commissionObj.MINTURNOVER,
addMINTURNOVER: nowProfit - commissionObj.MINTURNOVER,
addMINTURNOVERRate: commissionObjPrevious.MINTURNOVER ? (nowProfit / commissionObjPrevious.MINTURNOVER * 100).toFixed(2) : "",
nowProfit: nowProfit,
currentThanRecently: commissionObj.MINTURNOVER > commissionObjPrevious.MINTURNOVER,
recentREVENUE_AMOUNT: Number((yearRevenueSum).toFixed(2)),
nowMINTURNOVER: commissionObj.MINTURNOVER
}
// 这里再添加判断 之前是有业态 所以知道行业提成比例 现在也没有业态 那么就拿我们之前租金测算出来的 第三次比例 当作 他的比例去计算
if (res.noRate) {
let contributionReq: any = {
searchParameter: {
SERVERPART_IDS: currentRow?.SERVERPART_ID
},
PageIndex: 1,
PageSize: 999999,
}
let newContributionReq: any = {
name: "",
value: encryptAES(JSON.stringify(contributionReq))
}
const contributionData = await handlGetSPCONTRIBUTIONList(newContributionReq)
console.log('contributionDatacontributionDatacontributionData', contributionData);
// 拿到分类定级
if (contributionData && contributionData.length > 0) {
let SERVERPART_TYPEStr: string = contributionData[0].SERVERPART_TYPE
const req: any = {
searchParameter: {
SERVERPART_IDS: currentRow?.SERVERPART_ID,
SERVERPART_TYPES: SERVERPART_TYPEStr,
RENTCALCULATION_STATE: 1
},
PageIndex: 1,
PageSize: 999999,
SortStr: "OPERATE_DATE desc"
}
let newReq: any = {
name: "",
value: encryptAES(JSON.stringify(req))
}
const data = await handlGetRENTCALCULATIONList(newReq)
console.log('dskadjaskldjaslkdjsal', data);
if (data && data.length > 0) {
// 建议提成比例
let newGUARANTEERATIO: number = Number(data[0].THIRD_PURCHASER_RATE)
let nowProfit: number = Number(((Number(yearRevenueSum) * Number(newGUARANTEERATIO / 100)) / 10000).toFixed(2))
res = {
...res,
avgThanNowRate: false,
nowRate: newGUARANTEERATIO,
oldRate: newGUARANTEERATIO,
MINTURNOVERAvgThanAvg: nowProfit < commissionObj?.MINTURNOVER,
nowProfit: nowProfit,
addMINTURNOVER: nowProfit - commissionObj.MINTURNOVER,
addMINTURNOVERRate: commissionObjPrevious.MINTURNOVER ? (nowProfit / commissionObjPrevious.MINTURNOVER * 100).toFixed(2) : "",
currentThanRecently: commissionObj.MINTURNOVER > commissionObjPrevious.MINTURNOVER,
recentREVENUE_AMOUNT: Number((yearRevenueSum).toFixed(2)),
nowMINTURNOVER: commissionObj.MINTURNOVER
}
}
}
}
console.log('dklashdoashldjashkl', res);
setCurrentObj(res)
setModalLoading(false)
}
const truncateDecimal = (num: number) => {
if (!num && num !== 0) {
return 0
}
// 先用 toFixed 保留两位小数以消除精度问题
const fixedNum = parseFloat(num.toFixed(10));
// 将数字转换为字符串
let strNum = fixedNum.toString();
// 找到小数点的位置
const dotIndex = strNum.indexOf('.');
// 如果有小数点且小数点后有至少两位,则截取
if (dotIndex !== -1) {
strNum = strNum.substring(0, dotIndex + 3);
}
// 转换回数字类型
return parseFloat(strNum);
}
return (
<div style={{ height: 'calc(100vh - 100px)', backgroundColor: '#fff', display: 'flex' }}>
<LeftSelectTree setSelectedId={setSelectedId} setCollapsible={setCollapsible} collapsible={collapsible} />
<div style={{
width: !collapsible ? 'calc(100% - 300px)' : 'calc(100% - 60px)',
paddingTop: 0,
paddingBottom: 0,
paddingRight: 0
}}>
<ProTable
actionRef={actionRef}
formRef={formRef}
columns={columns}
bordered
scroll={{ x: '100%', y: 'calc(100vh - 450px)' }}
headerTitle={'合同备案列表'}
search={{ span: 6, }}
request={async (params) => {
// 地址栏传参 UserIdEncrypted 为当前登录用户的加密id
const search = window.location.search;
const addressParams = Object.fromEntries(new URLSearchParams(search).entries());
const reqtoken: any = {
UserIdEncrypted: addressParams.UserIdEncrypted
}
const userInfo = await handleGetPassportInfoById(reqtoken)
setUserInfoDetail(userInfo)
if (!selectedId) {
return { data: [], success: true }
}
const req: any = {
searchParameter: {
COMPACT_TYPE: 530001,
COMPACT_DETAILS: 1000,
SERVERPART_IDS: selectedId,
COMPACT_STARTDATE_End: params?.COMPACT_STARTDATE_End || "",
COMPACT_ENDDATE_Start: params?.COMPACT_ENDDATE_Start || "",
},
PageIndex: 1,
PageSize: 999999,
SortStr: "MODIFYDATE desc"
}
let newReq: any = {
name: "",
value: encryptAES(JSON.stringify(req))
}
setSearchParams(params)
const data = await handlGetREGISTERCOMPACTList(newReq)
console.log('datadatadatadata', data);
if (data && data.length > 0) {
return { data, success: true }
}
return { data: [], success: true }
}}
toolbar={{
actions: [
]
}}
/>
</div>
<Modal
title={'租金对比'}
destroyOnClose
width={1200}
open={detailModal}
className="rentComparisonModalBox"
onCancel={() => {
setCurrentRow(undefined)
setDetailModal(false)
}}
footer={false}
afterOpenChange={(open: boolean) => {
if (open) {
// 获取租金对比的数据 并计算数据
handleGetRentComparison()
}
}}
loading={modalLoading}
>
<div className="analysisModalContentBox">
<div className={'serverPart'}>
<div className={'serverPartDetail'}>
<div className={'serverPartDetailTop'}>
<span className={'serverPartName'}>{currentObj?.SERVERPART_NAME}</span>
<div className={'serverPartType'}>{SERVERPART_TYPEObj[currentObj?.SERVERPART_TYPE]}</div>
</div>
<div className="bigTitlte">{`${currentObj?.COMPACT_NAME || ''}`}</div>
</div>
</div>
<div className={'operateLeft'}>
<img className={'operateIcon'} src={operation} />
<span className={'titleName'}></span>
</div>
<div style={{ fontWeight: 600, color: '#FE7628' }}>驿</div>
<div className="paragraph" style={{ textIndent: '2rem' }}>
2
<span className="keynote">{currentObj?.SERVERPART_NAME}</span>
<span className="keynote">{currentObj?.COMPACT_NAME}</span>
</div>
<div className="proposal" style={{ marginTop: '12px' }}>
<div style={{ marginTop: '12px' }}>
{
currentObj?.noRate ? '固定租金' :
<span>{currentObj?.min === currentObj?.max ?
<span>
<span className="keynote">{currentObj?.max}%</span>
</span> :
<span>
<span className="keynote">{currentObj?.min}%</span>
<span className="keynote">{currentObj?.max}%</span>
</span>}</span>
}{
currentObj?.MINTURNOVERMin === currentObj?.MINTURNOVERMax ?
<span className="keynote">{currentObj?.MINTURNOVERMin}</span> :
<span>
<span className="keynote">{currentObj?.MINTURNOVERMin}</span>
<span className="keynote">{currentObj?.MINTURNOVERMax}</span>
</span>
}{currentObj?.noRate ? '固定租金' : <span className="keynote">{currentObj?.avg}%</span>}<span className="keynote">{currentObj?.MINTURNOVERAvg}</span>
</div>
<div>
<span className="keynote">{`${currentObj?.COMPACT_NAME}`}</span><span className="keynote">{currentObj?.MINTURNOVER || ''}</span>/
{
currentObj?.noRate ?
'' :
<span><span className="keynote">{currentObj?.GUARANTEERATIO || '-'}%</span></span>
}
<Tooltip title={currentObj?.indexRevenue || ''}>
<span className="keynote">{currentObj?.profit || ''}</span>
</Tooltip>
</div>
<div style={{ marginTop: '12px' }}><span className="proposalTitle"></span></div>
<div style={{ fontWeight: 600 }}>{
currentObj?.avgThanNowRate ?
<span>
<Tooltip title={`${currentObj?.oldRate}%${currentObj?.reduce ? `-${currentObj.reduce}%` : ''}`}>
<span className="keynote" style={{ color: 'red' }}>{currentObj?.nowRate || ''}%</span>
</Tooltip>
<span className="keynote" style={{ color: 'red' }}>{currentObj?.avg || ''}%</span>
{
currentObj?.BUSINESS_TYPE === 2000 ?
<span>(<span className="keynote">{currentObj?.BUSINESS_TYPEMINTURNOVER || ''}</span>/)</span> :
<span>(<span className="keynote">{currentObj?.nowGUARANTEERATIO || ''}%</span>
{
currentObj?.differenceGUARANTEERATIO ?
<span>{currentObj?.differenceGUARANTEERATIO > 0 ? '优于' : currentObj?.differenceGUARANTEERATIO < 0 ? '下浮' : ''}<span className="keynote">{currentObj?.differenceGUARANTEERATIO || ''}%</span></span> : ''
}
)
</span>
}
</span> :
<span>
<Tooltip title={`${currentObj?.oldRate}%${currentObj?.reduce ? `-${currentObj.reduce}%` : ''}`}>
<span className="keynote" style={{ color: 'red' }}>{currentObj?.nowRate || ''}%</span>
</Tooltip>
{
currentObj?.noRate ?
<span>(<span className="keynote">{currentObj?.BUSINESS_TYPEMINTURNOVER || ''}</span>/)</span> :
<span>(<span className="keynote">{currentObj?.nowGUARANTEERATIO || ''}%</span>
{
currentObj?.differenceGUARANTEERATIO ?
<span>{currentObj?.differenceGUARANTEERATIO > 0 ? '优于' : currentObj?.differenceGUARANTEERATIO < 0 ? '下浮' : ''}
<span className="keynote">{currentObj?.differenceGUARANTEERATIO || ''}%</span>
</span> : ''
}
)</span>
}
</span>
}
</div>
<div style={{ fontWeight: 600 }}>
{
currentObj?.MINTURNOVERAvgThanAvg ?
<span>
{/* title={`${currentObj?.currentThanRecently ? '当前' : '上个'}合同年的对客销售总额${truncateDecimal(currentObj?.recentREVENUE_AMOUNT / 10000)}万元×${currentObj?.nowRate || ''}% = ${currentObj?.nowProfit}万元,保底租金${currentObj?.addMINTURNOVER>0?'优于':currentObj?.addMINTURNOVER<0?'下浮':''}${currentObj?.addMINTURNOVER}万/年。`} */}
<Tooltip title={currentObj?.BUSINESS_TYPE === 2000 ? `` : `比原来${currentObj?.addMINTURNOVER > 0 ? '优于' : currentObj?.addMINTURNOVER < 0 ? '下浮' : ''}${currentObj?.addMINTURNOVER}万元,${currentObj?.addMINTURNOVERRate > 0 ? '提升' : currentObj?.addMINTURNOVERRate < 0 ? '降低' : ''}${Math.abs(currentObj?.addMINTURNOVERRate)}%`}>
<span className="keynote" style={{ color: 'red' }}>{currentObj?.nowProfit}</span>
</Tooltip>
<span className="keynote" style={{ color: 'red' }}>{currentObj?.MINTURNOVERAvg}</span>
({currentObj?.currentThanRecently ? '当前' : '上个'}<span className="keynote">{((currentObj?.recentREVENUE_AMOUNT / 10000).toFixed(2))}</span>×<span className="keynote">{currentObj?.nowRate || ''}%</span> = <span className="keynote">{currentObj?.nowProfit}</span><span className="keynote">{currentObj?.BUSINESS_TYPE === 2000 ? currentObj?.BUSINESS_TYPEMINTURNOVER : currentObj?.nowMINTURNOVER}</span>{currentObj?.addMINTURNOVER > 0 ? '优于' : currentObj?.addMINTURNOVER < 0 ? '下浮' : ''}<span className="keynote">{currentObj?.addMINTURNOVER}</span>/)
</span>
:
<span>
<Tooltip title={currentObj?.BUSINESS_TYPE === 2000 ? `` : `比原来${currentObj?.addMINTURNOVER > 0 ? '优于' : currentObj?.addMINTURNOVER < 0 ? '下浮' : ''}${currentObj?.addMINTURNOVER}万元,${currentObj?.addMINTURNOVERRate > 0 ? '提升' : currentObj?.addMINTURNOVERRate < 0 ? '降低' : ''}${Math.abs(currentObj?.addMINTURNOVERRate)}%`}>
<span className="keynote" style={{ color: 'red' }}>{currentObj?.nowProfit}</span>
</Tooltip>
({currentObj?.currentThanRecently ? '当前' : '上个'}<span className="keynote">{((currentObj?.recentREVENUE_AMOUNT / 10000).toFixed(2))}</span>×<span className="keynote">{currentObj?.nowRate || ''}%</span> = <span className="keynote">{currentObj?.nowProfit}</span><span className="keynote">{currentObj?.BUSINESS_TYPE === 2000 ? currentObj?.BUSINESS_TYPEMINTURNOVER : currentObj?.nowMINTURNOVER}</span>{currentObj?.addMINTURNOVER > 0 ? '优于' : currentObj?.addMINTURNOVER < 0 ? '下浮' : ''}<span className="keynote">{currentObj?.addMINTURNOVER}</span>/)
</span>
}
</div>
</div>
</div>
</Modal>
</div>
)
}
export default connect(({ user }: ConnectState) => ({
currentUser: user.data
}))(rentComparison);

View File

@ -0,0 +1,297 @@
.rentComparisonModalBox {
.analysisModalContentBox {
width: 100%;
max-height: 700px;
overflow-y: auto;
.serverPart {
display: flex;
//align-items: center;
justify-content: space-between;
width: 100%;
height: 70px;
border-bottom: 2px solid #EBEDF5;
margin-bottom: 16px;
.serverPartBox {
width: 80px;
height: 60px;
border-radius: 8px;
overflow: hidden;
position: relative;
margin-right: 12px;
.serverPartBoxBg {
width: 80px;
height: 80px;
position: absolute;
top: 0;
left: 0;
z-index: 1;
}
.nameBox {
position: absolute;
z-index: 2;
top: 14px;
left: 10px;
display: flex;
flex-direction: column;
.titleName {
font-family: PingFangSC, PingFang SC;
font-weight: 600;
font-size: 14px;
color: #2858CC;
line-height: 20px;
text-align: left;
font-style: normal;
}
.labelName {
font-family: PingFangSC, PingFang SC;
font-weight: 500;
font-size: 12px;
color: #2858CC;
line-height: 12px;
text-align: left;
font-style: normal;
}
}
.statusBox {
padding: 1px 4px;
box-sizing: border-box;
color: #fff;
font-size: 10px;
background: #2ABAC6;
border-radius: 0px 8px 0px 8px;
z-index: 2;
display: inline-block;
position: absolute;
top: 0;
right: 0;
}
}
.serverPartDetail {
height: 60px;
display: flex;
flex-direction: column;
justify-content: space-between;
.serverPartDetailTop {
display: flex;
align-items: center;
flex-wrap: wrap;
.serverPartName {
font-family: PingFangSC, PingFang SC;
font-weight: 600;
font-size: 20px;
color: #333333;
line-height: 28px;
text-align: left;
font-style: normal;
}
.serverPartType {
margin-left: 8px;
background: linear-gradient(134deg, #FFEED1 0%, #FFE1CD 100%);
border-radius: 2px;
box-sizing: border-box;
color: #FFA509;
padding: 0 10px;
}
}
.serverPartDetailBottom {
display: flex;
margin-top: 12px;
.businessBox {
margin-right: 8px;
background: #E7F0FF;
box-sizing: border-box;
padding: 2px 8px;
border-radius: 2px;
display: flex;
align-items: center;
.businessIcon {
width: 16px;
height: 16px;
margin-right: 4px;
}
.businessText {
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: 14px;
color: #1E58BE;
line-height: 22px;
text-align: left;
font-style: normal;
margin-right: 4px;
white-space: nowrap;
}
.businessValue {
font-family: DINAlternate, DINAlternate;
font-weight: bold;
font-size: 18px;
color: #1E58BE;
line-height: 22px;
text-align: left;
font-style: normal;
}
}
}
.bigTitlte {
font-family: PingFangSC, PingFang SC;
font-weight: 600;
font-size: 20px;
color: #333333;
line-height: 28px;
text-align: left;
margin-bottom: 0 !important;
}
}
.brandBox {
display: flex;
width: 250px;
flex-direction: column;
.brandIcon {
width: 80px;
height: 80px;
}
.brandName {
font-family: PingFangSC, PingFang SC;
font-weight: 600;
font-size: 14px;
color: #2858CC;
line-height: 20px;
text-align: left;
font-style: normal;
width: 170px;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
}
}
.operateLeft {
display: flex;
align-items: center;
margin-bottom: 6px;
.operateIcon {
width: 24px;
height: 24px;
margin-right: 6px;
}
.titleName {
font-family: PingFangSC, PingFang SC;
font-weight: 600;
font-size: 14px;
color: #183362;
line-height: 24px;
text-align: left;
font-style: normal;
}
}
.paragraph {
font-family: PingFangSC, PingFang SC;
font-size: 14px !important;
line-height: 28px !important;
.keynote {
font-weight: 600;
color: #1890ff;
font-family: PingFangSC, PingFang SC;
}
.beforeBluePoint {
position: relative;
}
.beforeBluePoint::before {
content: '';
width: 8px;
height: 8px;
border-radius: 50%;
background-color: #1890ff;
position: absolute;
top: 50%;
transform: translateY(-50%);
left: 1rem;
}
.titleName {
font-family: PingFangSC, PingFang SC;
font-weight: 600;
font-size: 14px;
color: #333333;
line-height: 20px;
text-align: left;
font-style: normal;
}
.numberValue {
font-family: PingFangSC, PingFang SC;
font-weight: bold;
font-size: 14px;
color: #243F6E;
line-height: 28px;
text-align: left;
font-style: normal;
}
.compare {
font-family: PingFangSC, PingFang SC;
font-weight: bold;
font-size: 14px;
color: #FE7628;
line-height: 28px;
text-align: left;
font-style: normal;
}
.unit {
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: 14px;
color: #788395;
line-height: 22px;
text-align: left;
font-style: normal;
}
}
.proposal {
text-indent: 2rem;
font-size: 14px !important;
line-height: 28px !important;
font-family: PingFangSC, PingFang SC;
.keynote {
font-weight: 600;
color: #1890ff;
}
.proposalTitle {
font-weight: 600;
color: #FE7628;
}
}
}
}

View File

@ -109,7 +109,6 @@ const ServerpartAssets = () => {
: '' :
record?.level === 4 ? record?.PROPERTYASSETS_CODE ?
<a onClick={() => {
console.log('record', record);
setCurrentRow(record)
setAssetsDrawer(true)
}}>
@ -156,7 +155,6 @@ const ServerpartAssets = () => {
valueType: 'treeSelect',
request: async () => {
const list = await getFieldEnumTree({ FieldExplainField: 'PROPERTYASSETS_TYPE', notformate: true })
console.log('list2222', list);
let obj: any = []
if (list && list.length > 0) {
list.forEach((item: any) => {
@ -231,14 +229,12 @@ const ServerpartAssets = () => {
record?.PROPERTYASSETS_CODE ?
<>
<a onClick={() => {
console.log('record', record);
setCurrentRow(record)
setAssetsDrawer(true)
}}></a>
<Popconfirm
title="确认删除该资产?"
onConfirm={async () => {
console.log('record', record);
const req: any = {
Id: record?.PROPERTYASSETS_ID,
OperateId: currentUser?.ID,
@ -261,7 +257,6 @@ const ServerpartAssets = () => {
{
record?.SHOPNAME ?
<a onClick={() => {
console.log('record', record);
setCurrentRow(record)
setAssetsDrawer(true)
}}></a> : ''
@ -329,7 +324,6 @@ const ServerpartAssets = () => {
// 历史表格的提交
const handleSubHistoryTableData = async () => {
let list: any = historyTableRef.current?.selectModalRowList
console.log('list', list);
let reqList: any = []
list.forEach((item: any) => {
reqList.push({
@ -360,7 +354,6 @@ const ServerpartAssets = () => {
UserIdEncrypted: id
}
const data = await handleGetPassportInfoById(req)
console.log('datae2e12e1', data);
setCurrentUser(data)
return data
}
@ -380,7 +373,6 @@ const ServerpartAssets = () => {
useEffect(() => {
const search = window.location.search;
const addressParams = Object.fromEntries(new URLSearchParams(search).entries());
console.log('addressParamsaddressParamsaddressParams', addressParams);
handleGetUserInfo(addressParams.UserIdEncrypted)
handleGetServerList()
}, [])
@ -472,7 +464,6 @@ const ServerpartAssets = () => {
}
setSearchParams(params)
const data = await handleGetPROPERTYASSETSTreeList(req)
console.log('data', data);
if (data && data.length > 0) {
// 每层都加上level 第一层显示片区 第二层显示服务区 第三层显示方位 第四层显示资产编码
data.forEach((item: any, index: number) => {
@ -589,12 +580,9 @@ const ServerpartAssets = () => {
title={'请选择门店进行关联'}
onOk={() => {
let shopIdList: any = relatedShopRef.current?.selectModalRowList
console.log('shopIdList', shopIdList);
let shopId: any = {}
if (shopIdList && shopIdList.length > 0) {
shopId = shopIdList[0]
console.log('shopId', shopId);
}
// 选中的整行对象 因为要回显关联的门店
setSelectShopId(shopId)