update
This commit is contained in:
parent
7f0e90bd01
commit
85b417e367
@ -68,6 +68,11 @@ export default [
|
|||||||
name: '租金测算',
|
name: '租金测算',
|
||||||
component: "@/pages/RentCalculation/index",
|
component: "@/pages/RentCalculation/index",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: '/rentComparison/index',
|
||||||
|
name: '租金对比',
|
||||||
|
component: "@/pages/rentComparison/index",
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|||||||
BIN
src/assets/operation.png
Normal file
BIN
src/assets/operation.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
@ -293,6 +293,12 @@ const UserModel: UserModelType = {
|
|||||||
name: '租金测算',
|
name: '租金测算',
|
||||||
component: "@/pages/RentCalculation/index",
|
component: "@/pages/RentCalculation/index",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: '/rentComparison/index',
|
||||||
|
redirect: '',
|
||||||
|
name: '租金对比',
|
||||||
|
component: "@/pages/rentComparison/index",
|
||||||
|
},
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -374,6 +380,7 @@ const UserModel: UserModelType = {
|
|||||||
"/operationReport/securityIssueList",
|
"/operationReport/securityIssueList",
|
||||||
"/operationReport/rectificationStatus",
|
"/operationReport/rectificationStatus",
|
||||||
"/RentCalculation/index",
|
"/RentCalculation/index",
|
||||||
|
"/rentComparison/index",
|
||||||
// '/examine/index',
|
// '/examine/index',
|
||||||
// '/examine/modal',
|
// '/examine/modal',
|
||||||
// '/examine/question',
|
// '/examine/question',
|
||||||
|
|||||||
@ -314,8 +314,6 @@ const DigitalElectronics: React.FC<{ currentUser: any }> = (props) => {
|
|||||||
|
|
||||||
// 撤回发票
|
// 撤回发票
|
||||||
const handleRevokeBill = async (detail: any) => {
|
const handleRevokeBill = async (detail: any) => {
|
||||||
console.log('detaildetaildetaildetail', detail);
|
|
||||||
|
|
||||||
let obj: any = {
|
let obj: any = {
|
||||||
sellerTaxpayerId: publicParams.sellerTaxpayerId,//销方税号
|
sellerTaxpayerId: publicParams.sellerTaxpayerId,//销方税号
|
||||||
orgCode: "",// 组织编号
|
orgCode: "",// 组织编号
|
||||||
@ -343,7 +341,6 @@ const DigitalElectronics: React.FC<{ currentUser: any }> = (props) => {
|
|||||||
|
|
||||||
let responseOld = await handleGetForwardJDPJInterface(newTokenReq2)
|
let responseOld = await handleGetForwardJDPJInterface(newTokenReq2)
|
||||||
responseOld = JSON.parse(responseOld as any)
|
responseOld = JSON.parse(responseOld as any)
|
||||||
console.log('responseOldresponseOld', responseOld);
|
|
||||||
|
|
||||||
if (responseOld && (responseOld.success || responseOld.errorCode == 10905)) {
|
if (responseOld && (responseOld.success || responseOld.errorCode == 10905)) {
|
||||||
return {
|
return {
|
||||||
@ -570,8 +567,6 @@ const DigitalElectronics: React.FC<{ currentUser: any }> = (props) => {
|
|||||||
SortStr: "BILLDETAIL_ID"
|
SortStr: "BILLDETAIL_ID"
|
||||||
})
|
})
|
||||||
|
|
||||||
console.log('billDetailbillDetail', billDetail);
|
|
||||||
|
|
||||||
let billDetailReq: any = []
|
let billDetailReq: any = []
|
||||||
if (billDetail && billDetail.length > 0) {
|
if (billDetail && billDetail.length > 0) {
|
||||||
billDetail.forEach((item: any) => {
|
billDetail.forEach((item: any) => {
|
||||||
@ -688,7 +683,6 @@ const DigitalElectronics: React.FC<{ currentUser: any }> = (props) => {
|
|||||||
PageSize: 999999,
|
PageSize: 999999,
|
||||||
SortStr: "BILLDETAIL_ID"
|
SortStr: "BILLDETAIL_ID"
|
||||||
})
|
})
|
||||||
console.log('billDetailbillDetail', billDetail);
|
|
||||||
|
|
||||||
let billDetailReq: any = []
|
let billDetailReq: any = []
|
||||||
if (billDetail && billDetail.length > 0) {
|
if (billDetail && billDetail.length > 0) {
|
||||||
@ -767,7 +761,6 @@ const DigitalElectronics: React.FC<{ currentUser: any }> = (props) => {
|
|||||||
let response: any = await handleGetForwardJDPJInterface(newreq)
|
let response: any = await handleGetForwardJDPJInterface(newreq)
|
||||||
|
|
||||||
let result: any = JSON.parse(response)
|
let result: any = JSON.parse(response)
|
||||||
console.log('resultresultresult', result);
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
// 退回开票
|
// 退回开票
|
||||||
|
|||||||
@ -34,7 +34,6 @@ const InvoiceSearch: React.FC = () => {
|
|||||||
// 查看详情
|
// 查看详情
|
||||||
const handleViewDetail = (record: any) => {
|
const handleViewDetail = (record: any) => {
|
||||||
message.info('查看详情功能待开发');
|
message.info('查看详情功能待开发');
|
||||||
console.log('详情数据:', record);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// 表格列定义
|
// 表格列定义
|
||||||
@ -212,7 +211,6 @@ const InvoiceSearch: React.FC = () => {
|
|||||||
|
|
||||||
// 撤回
|
// 撤回
|
||||||
const handleRevoke = async (params: any) => {
|
const handleRevoke = async (params: any) => {
|
||||||
console.log('paramsparamsparams', params);
|
|
||||||
const queryData = {
|
const queryData = {
|
||||||
sellerTaxpayerId: "91530112MA7MQ2JR9U",
|
sellerTaxpayerId: "91530112MA7MQ2JR9U",
|
||||||
serialNos: params.billNo || "",
|
serialNos: params.billNo || "",
|
||||||
@ -243,8 +241,6 @@ const InvoiceSearch: React.FC = () => {
|
|||||||
// 红冲
|
// 红冲
|
||||||
const handleRedReversal = async (params: any) => {
|
const handleRedReversal = async (params: any) => {
|
||||||
// 整单红冲 不需要调用红冲接口 申请里面放蓝票信息 就是红冲
|
// 整单红冲 不需要调用红冲接口 申请里面放蓝票信息 就是红冲
|
||||||
console.log('paramsparams', params);
|
|
||||||
|
|
||||||
let obj: any = {
|
let obj: any = {
|
||||||
billNo: "SRM_202509011370",
|
billNo: "SRM_202509011370",
|
||||||
billDate: "2025-09-01",
|
billDate: "2025-09-01",
|
||||||
@ -291,7 +287,6 @@ const InvoiceSearch: React.FC = () => {
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
console.log('objobjobj', obj);
|
|
||||||
|
|
||||||
// 构造原始数据
|
// 构造原始数据
|
||||||
const originalData = [obj]; // 将record作为data数组的一项
|
const originalData = [obj]; // 将record作为data数组的一项
|
||||||
@ -307,7 +302,6 @@ const InvoiceSearch: React.FC = () => {
|
|||||||
};
|
};
|
||||||
const response = await handleGetKaiPiao(invoiceData, accessToken);
|
const response = await handleGetKaiPiao(invoiceData, accessToken);
|
||||||
|
|
||||||
console.log('responseresponseresponse', response);
|
|
||||||
|
|
||||||
// const queryData = {
|
// const queryData = {
|
||||||
// billNo: params?.billNo || "",
|
// billNo: params?.billNo || "",
|
||||||
@ -316,7 +310,6 @@ const InvoiceSearch: React.FC = () => {
|
|||||||
// sellerTaxpayerId: "91530112MA7MQ2JR9U",
|
// sellerTaxpayerId: "91530112MA7MQ2JR9U",
|
||||||
// redReason: "111",
|
// redReason: "111",
|
||||||
// };
|
// };
|
||||||
// console.log('queryDataqueryDataqueryData', queryData);
|
|
||||||
|
|
||||||
// // 将data字段进行base64加密
|
// // 将data字段进行base64加密
|
||||||
// const dataString = JSON.stringify(queryData);
|
// const dataString = JSON.stringify(queryData);
|
||||||
@ -329,11 +322,9 @@ const InvoiceSearch: React.FC = () => {
|
|||||||
// }
|
// }
|
||||||
// // 他这个接口 就一个地址 改不一样的参数就能调不一样的接口
|
// // 他这个接口 就一个地址 改不一样的参数就能调不一样的接口
|
||||||
// const data = await handleGetInvoiceSearch(req, accessToken)
|
// const data = await handleGetInvoiceSearch(req, accessToken)
|
||||||
// console.log('datadatadatadata', data);
|
|
||||||
|
|
||||||
// if (data && data.success) {
|
// if (data && data.success) {
|
||||||
// let res = JSON.parse(decodeURIComponent(escape(atob(data.data))))
|
// let res = JSON.parse(decodeURIComponent(escape(atob(data.data))))
|
||||||
// console.log('resresresresres', res);
|
|
||||||
// if (res && res.length > 0) {
|
// if (res && res.length > 0) {
|
||||||
// let result = res[0]
|
// let result = res[0]
|
||||||
// message.success(result.message)
|
// message.success(result.message)
|
||||||
@ -347,7 +338,6 @@ const InvoiceSearch: React.FC = () => {
|
|||||||
// 请求表格数据
|
// 请求表格数据
|
||||||
const request = async (params: any) => {
|
const request = async (params: any) => {
|
||||||
try {
|
try {
|
||||||
console.log('查询参数:', params);
|
|
||||||
let req: any = {
|
let req: any = {
|
||||||
appId: "FPY001",
|
appId: "FPY001",
|
||||||
appSecret: "FPY001fpy@2023***",
|
appSecret: "FPY001fpy@2023***",
|
||||||
@ -356,7 +346,6 @@ const InvoiceSearch: React.FC = () => {
|
|||||||
language: ""
|
language: ""
|
||||||
}
|
}
|
||||||
const token = await handleGetAppToken(req)
|
const token = await handleGetAppToken(req)
|
||||||
console.log('tokentokentoken', token);
|
|
||||||
|
|
||||||
let appToken: any = token.data.app_token
|
let appToken: any = token.data.app_token
|
||||||
|
|
||||||
@ -369,7 +358,6 @@ const InvoiceSearch: React.FC = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const accessToken: any = await handleGetSDToken(tokenReq)
|
const accessToken: any = await handleGetSDToken(tokenReq)
|
||||||
console.log('accessTokenaccessTokenaccessToken', accessToken);
|
|
||||||
setAppToken(appToken)
|
setAppToken(appToken)
|
||||||
setAccessToken(accessToken.data.access_token)
|
setAccessToken(accessToken.data.access_token)
|
||||||
|
|
||||||
@ -391,17 +379,14 @@ const InvoiceSearch: React.FC = () => {
|
|||||||
data: encryptedData
|
data: encryptedData
|
||||||
};
|
};
|
||||||
|
|
||||||
console.log('最终请求参数:', requestParams);
|
|
||||||
|
|
||||||
// 调用查询接口 (这里需要传入正确的code参数)
|
// 调用查询接口 (这里需要传入正确的code参数)
|
||||||
const response = await handleGetInvoiceSearch(requestParams, accessToken.data.access_token);
|
const response = await handleGetInvoiceSearch(requestParams, accessToken.data.access_token);
|
||||||
console.log('responseresponseresponseresponse', response);
|
|
||||||
|
|
||||||
|
|
||||||
if (response && response.success) {
|
if (response && response.success) {
|
||||||
|
|
||||||
let res = JSON.parse(decodeURIComponent(escape(atob(response.data))))
|
let res = JSON.parse(decodeURIComponent(escape(atob(response.data))))
|
||||||
console.log('最终请求结果:', res);
|
|
||||||
let result = res[0].invoiceList
|
let result = res[0].invoiceList
|
||||||
|
|
||||||
return { data: result || [], success: true };
|
return { data: result || [], success: true };
|
||||||
|
|||||||
@ -33,16 +33,11 @@ const InvoicingIndex: React.FC<{ currentUser: any }> = (props) => {
|
|||||||
// 开始刷脸认证的流程
|
// 开始刷脸认证的流程
|
||||||
const handleGetFacialAuthentication = async () => {
|
const handleGetFacialAuthentication = async () => {
|
||||||
let url = window.location.search.split('?')[1]
|
let url = window.location.search.split('?')[1]
|
||||||
console.log('url', url);
|
|
||||||
|
|
||||||
const params = new URLSearchParams(url);
|
const params = new URLSearchParams(url);
|
||||||
console.log('params', params);
|
|
||||||
let resultObj: any = {};
|
let resultObj: any = {};
|
||||||
for (const [key, value] of params.entries()) {
|
for (const [key, value] of params.entries()) {
|
||||||
resultObj[key] = value;
|
resultObj[key] = value;
|
||||||
}
|
}
|
||||||
console.log('resultObj', resultObj);
|
|
||||||
|
|
||||||
let code = "menuCloud"
|
let code = "menuCloud"
|
||||||
|
|
||||||
if (resultObj.UserIdEncrypted) {
|
if (resultObj.UserIdEncrypted) {
|
||||||
@ -59,9 +54,7 @@ const InvoicingIndex: React.FC<{ currentUser: any }> = (props) => {
|
|||||||
// code: code
|
// code: code
|
||||||
// }
|
// }
|
||||||
// const data = await handleGetBWTokenFun(req)
|
// const data = await handleGetBWTokenFun(req)
|
||||||
// console.log('data', data);
|
|
||||||
// let token = data.data.data.token
|
// let token = data.data.data.token
|
||||||
// console.log('token', token);
|
|
||||||
|
|
||||||
let codeReq: any = {
|
let codeReq: any = {
|
||||||
qrCodeType: 0,
|
qrCodeType: 0,
|
||||||
@ -69,8 +62,6 @@ const InvoicingIndex: React.FC<{ currentUser: any }> = (props) => {
|
|||||||
}
|
}
|
||||||
// 刷脸二维码的值
|
// 刷脸二维码的值
|
||||||
const qrCodeData = await handleGetCertifyQrcode('menuCloud', codeReq)
|
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 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]
|
let img = qrCodeData.data.response.qrCode.split(',')[length - 1]
|
||||||
@ -93,7 +84,6 @@ const InvoicingIndex: React.FC<{ currentUser: any }> = (props) => {
|
|||||||
certifyQueryType: 1
|
certifyQueryType: 1
|
||||||
})
|
})
|
||||||
let res: any = resultData.data.response
|
let res: any = resultData.data.response
|
||||||
console.log('res', res);
|
|
||||||
if (res.certificationStatus == '1') {
|
if (res.certificationStatus == '1') {
|
||||||
if (timerRef.current) {
|
if (timerRef.current) {
|
||||||
clearInterval(timerRef.current)
|
clearInterval(timerRef.current)
|
||||||
@ -298,8 +288,6 @@ const InvoicingIndex: React.FC<{ currentUser: any }> = (props) => {
|
|||||||
render: (_, record) => {
|
render: (_, record) => {
|
||||||
return <Space>
|
return <Space>
|
||||||
<a onClick={() => {
|
<a onClick={() => {
|
||||||
console.log('record', record);
|
|
||||||
|
|
||||||
handleInvoicing(record)
|
handleInvoicing(record)
|
||||||
}}>
|
}}>
|
||||||
开票
|
开票
|
||||||
@ -325,16 +313,12 @@ const InvoicingIndex: React.FC<{ currentUser: any }> = (props) => {
|
|||||||
pushPhone: obj.pushPhone, // 交付手机
|
pushPhone: obj.pushPhone, // 交付手机
|
||||||
pushEmail: obj.pushEmail // 交付邮箱
|
pushEmail: obj.pushEmail // 交付邮箱
|
||||||
}
|
}
|
||||||
console.log('req', req);
|
|
||||||
// return
|
// return
|
||||||
const data = await handleGetDeliver('menuCloud', req)
|
const data = await handleGetDeliver('menuCloud', req)
|
||||||
console.log('data', data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 作废
|
// 作废
|
||||||
const handleCancelInvoicing = async (obj: any) => {
|
const handleCancelInvoicing = async (obj: any) => {
|
||||||
console.log('obj', obj);
|
|
||||||
|
|
||||||
const req: any = {
|
const req: any = {
|
||||||
taxNo: BWDetailObj.taxNo,
|
taxNo: BWDetailObj.taxNo,
|
||||||
serialNo: obj.serialNo,
|
serialNo: obj.serialNo,
|
||||||
@ -350,7 +334,6 @@ const InvoicingIndex: React.FC<{ currentUser: any }> = (props) => {
|
|||||||
const handleGetUserInfo = async (UserIdEncrypted: string) => {
|
const handleGetUserInfo = async (UserIdEncrypted: string) => {
|
||||||
const req: any = { UserIdEncrypted: UserIdEncrypted }
|
const req: any = { UserIdEncrypted: UserIdEncrypted }
|
||||||
const data = await handleGetUserInfoById(req)
|
const data = await handleGetUserInfoById(req)
|
||||||
console.log('handleGetUserInfo', data);
|
|
||||||
let userDetail: any = data.Result_Data
|
let userDetail: any = data.Result_Data
|
||||||
setUserInfo(userDetail)
|
setUserInfo(userDetail)
|
||||||
}
|
}
|
||||||
@ -375,7 +358,6 @@ const InvoicingIndex: React.FC<{ currentUser: any }> = (props) => {
|
|||||||
headerTitle={<span style={{ color: "#1890ff", fontSize: 14, fontWeight: 600 }}>发票列表</span>}
|
headerTitle={<span style={{ color: "#1890ff", fontSize: 14, fontWeight: 600 }}>发票列表</span>}
|
||||||
search={{ span: 6 }}
|
search={{ span: 6 }}
|
||||||
request={async (params: any) => {
|
request={async (params: any) => {
|
||||||
console.log('params', params);
|
|
||||||
// startOf('M').
|
// startOf('M').
|
||||||
let [state, end] = [moment().format('YYYY-MM-DD 00:00:00'), moment().format('YYYY-MM-DD 23:59:59')]
|
let [state, end] = [moment().format('YYYY-MM-DD 00:00:00'), moment().format('YYYY-MM-DD 23:59:59')]
|
||||||
const req: any = {
|
const req: any = {
|
||||||
@ -387,9 +369,7 @@ const InvoicingIndex: React.FC<{ currentUser: any }> = (props) => {
|
|||||||
endDate: end || ''
|
endDate: end || ''
|
||||||
}
|
}
|
||||||
const data = await handleGetInvoicePageTable('menuCloud', req)
|
const data = await handleGetInvoicePageTable('menuCloud', req)
|
||||||
console.log('data3232', data);
|
|
||||||
let tableData: any = data.data.response
|
let tableData: any = data.data.response
|
||||||
console.log('tableData3232', tableData);
|
|
||||||
|
|
||||||
if (tableData.list && tableData.list.length > 0) {
|
if (tableData.list && tableData.list.length > 0) {
|
||||||
return {
|
return {
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -31,7 +31,305 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.rentCalculateModalContent::-webkit-scrollbar {
|
.rentCalculateModalContent::-webkit-scrollbar {
|
||||||
display: none;
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -12,6 +12,7 @@ const authority: PageAuthority = {
|
|||||||
'/operationReport/securityIssueList': ['/operationReport/securityIssueList'],
|
'/operationReport/securityIssueList': ['/operationReport/securityIssueList'],
|
||||||
'/operationReport/rectificationStatus': ['/operationReport/rectificationStatus'],
|
'/operationReport/rectificationStatus': ['/operationReport/rectificationStatus'],
|
||||||
'/RentCalculation/index': ['/RentCalculation/index'],
|
'/RentCalculation/index': ['/RentCalculation/index'],
|
||||||
|
'/rentComparison/index': ['/rentComparison/index'],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -136,8 +136,6 @@ const OperationReport = ({ PATROLID }: DetailProps) => {
|
|||||||
const handleAddUpdate = async (obj: any) => {
|
const handleAddUpdate = async (obj: any) => {
|
||||||
// 用参数去判断 两个嵌套的子集 是否已经有数据了 没有的话 就提示
|
// 用参数去判断 两个嵌套的子集 是否已经有数据了 没有的话 就提示
|
||||||
let list: any = []
|
let list: any = []
|
||||||
console.log('inspectionItemsTableDatainspectionItemsTableData', inspectionItemsTableData);
|
|
||||||
console.log('inspectionItemObjinspectionItemObjinspectionItemObj', inspectionItemObj);
|
|
||||||
if (inspectionItemsTableData && inspectionItemsTableData.length > 0) {
|
if (inspectionItemsTableData && inspectionItemsTableData.length > 0) {
|
||||||
list = JSON.parse(JSON.stringify(inspectionItemsTableData))
|
list = JSON.parse(JSON.stringify(inspectionItemsTableData))
|
||||||
list.forEach((item: any) => {
|
list.forEach((item: any) => {
|
||||||
@ -162,9 +160,6 @@ const OperationReport = ({ PATROLID }: DetailProps) => {
|
|||||||
PATROL_TYPE: pageDataType || 1000,
|
PATROL_TYPE: pageDataType || 1000,
|
||||||
PATROLDETAILList: list
|
PATROLDETAILList: list
|
||||||
}
|
}
|
||||||
console.log('reqreqreq', req);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (req.PATROLDETAILList && req.PATROLDETAILList.length > 0) {
|
if (req.PATROLDETAILList && req.PATROLDETAILList.length > 0) {
|
||||||
// 只要有一个子集就是 true
|
// 只要有一个子集就是 true
|
||||||
@ -188,7 +183,6 @@ const OperationReport = ({ PATROLID }: DetailProps) => {
|
|||||||
value: encryptAES(JSON.stringify(req))
|
value: encryptAES(JSON.stringify(req))
|
||||||
}
|
}
|
||||||
const data = await handleSynchroPATROL(newReq)
|
const data = await handleSynchroPATROL(newReq)
|
||||||
console.log('datadadsad', data);
|
|
||||||
if (data.Result_Code === 100) {
|
if (data.Result_Code === 100) {
|
||||||
message.success('同步成功!')
|
message.success('同步成功!')
|
||||||
|
|
||||||
@ -205,7 +199,6 @@ const OperationReport = ({ PATROLID }: DetailProps) => {
|
|||||||
SPRegionType_ID: id
|
SPRegionType_ID: id
|
||||||
}
|
}
|
||||||
const data = await handleGetServerpartTree(req)
|
const data = await handleGetServerpartTree(req)
|
||||||
console.log('dsadasda', data);
|
|
||||||
if (data && data.length > 0) {
|
if (data && data.length > 0) {
|
||||||
let list = data[0].children
|
let list = data[0].children
|
||||||
setServerPartList(list)
|
setServerPartList(list)
|
||||||
@ -271,7 +264,6 @@ const OperationReport = ({ PATROLID }: DetailProps) => {
|
|||||||
|
|
||||||
// 拿到整改情况的录入数据
|
// 拿到整改情况的录入数据
|
||||||
const handleGetRectificationStatusData = async (formData: any) => {
|
const handleGetRectificationStatusData = async (formData: any) => {
|
||||||
console.log('formDataformData', formData);
|
|
||||||
const req: any = {
|
const req: any = {
|
||||||
...formData,
|
...formData,
|
||||||
PATROL_ID: PATROLID,
|
PATROL_ID: PATROLID,
|
||||||
@ -301,14 +293,12 @@ const OperationReport = ({ PATROLID }: DetailProps) => {
|
|||||||
SERVERPARTId: id
|
SERVERPARTId: id
|
||||||
}
|
}
|
||||||
const data = await handleGetServerpartInfo(req)
|
const data = await handleGetServerpartInfo(req)
|
||||||
console.log('datadatadata', data);
|
|
||||||
let list: any = []
|
let list: any = []
|
||||||
if (data.RegionInfo && data.RegionInfo.length > 0) {
|
if (data.RegionInfo && data.RegionInfo.length > 0) {
|
||||||
data.RegionInfo.forEach((item: any) => {
|
data.RegionInfo.forEach((item: any) => {
|
||||||
list.push({ label: item.SERVERPART_REGIONNAME, value: item.SERVERPART_REGION })
|
list.push({ label: item.SERVERPART_REGIONNAME, value: item.SERVERPART_REGION })
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
console.log('listlistlist', list);
|
|
||||||
|
|
||||||
setSERVERPARTREGION(list)
|
setSERVERPARTREGION(list)
|
||||||
}
|
}
|
||||||
@ -329,8 +319,6 @@ const OperationReport = ({ PATROLID }: DetailProps) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setSaveLoading(true)
|
setSaveLoading(true)
|
||||||
console.log('resres', res);
|
|
||||||
|
|
||||||
handleAddUpdate(res)
|
handleAddUpdate(res)
|
||||||
})
|
})
|
||||||
}}>保存</Button>
|
}}>保存</Button>
|
||||||
@ -347,7 +335,6 @@ const OperationReport = ({ PATROLID }: DetailProps) => {
|
|||||||
// 地址栏传参 UserIdEncrypted 为当前登录用户的加密id
|
// 地址栏传参 UserIdEncrypted 为当前登录用户的加密id
|
||||||
const search = window.location.search;
|
const search = window.location.search;
|
||||||
const addressParams = Object.fromEntries(new URLSearchParams(search).entries());
|
const addressParams = Object.fromEntries(new URLSearchParams(search).entries());
|
||||||
console.log('addressParamsaddressParams', addressParams);
|
|
||||||
const req: any = {
|
const req: any = {
|
||||||
UserIdEncrypted: addressParams.UserIdEncrypted
|
UserIdEncrypted: addressParams.UserIdEncrypted
|
||||||
}
|
}
|
||||||
@ -357,7 +344,6 @@ const OperationReport = ({ PATROLID }: DetailProps) => {
|
|||||||
if (addressParams.dataType) {
|
if (addressParams.dataType) {
|
||||||
setPageDataType(Number(addressParams.dataType))
|
setPageDataType(Number(addressParams.dataType))
|
||||||
}
|
}
|
||||||
console.log('PATROLIDPATROLIDPATROLIDPATROLID', PATROLID);
|
|
||||||
|
|
||||||
if (PATROLID) {
|
if (PATROLID) {
|
||||||
const req: any = {
|
const req: any = {
|
||||||
@ -372,15 +358,12 @@ const OperationReport = ({ PATROLID }: DetailProps) => {
|
|||||||
value: encryptAES(JSON.stringify(req))
|
value: encryptAES(JSON.stringify(req))
|
||||||
}
|
}
|
||||||
const data = await handleGetPATROLList(newReq)
|
const data = await handleGetPATROLList(newReq)
|
||||||
console.log('datadatadata3213', data);
|
|
||||||
|
|
||||||
if (data && data.length > 0) {
|
if (data && data.length > 0) {
|
||||||
let detail: any = data[0]
|
let detail: any = data[0]
|
||||||
console.log('detaildetail', detail);
|
|
||||||
|
|
||||||
setCurrentRecord(detail)
|
setCurrentRecord(detail)
|
||||||
if (detail.PATROLDETAILList && detail.PATROLDETAILList.length > 0) {
|
if (detail.PATROLDETAILList && detail.PATROLDETAILList.length > 0) {
|
||||||
console.log('sdada', detail.PATROLDETAILList);
|
|
||||||
let list: any = detail.PATROLDETAILList
|
let list: any = detail.PATROLDETAILList
|
||||||
setInspectionItemsTableData(list)
|
setInspectionItemsTableData(list)
|
||||||
|
|
||||||
@ -443,7 +426,6 @@ const OperationReport = ({ PATROLID }: DetailProps) => {
|
|||||||
SortStr: "TYPE_INDEX,SERVERPARTTYPE_ID"
|
SortStr: "TYPE_INDEX,SERVERPARTTYPE_ID"
|
||||||
}
|
}
|
||||||
const data = await handleGetSERVERPARTTYPEList(req)
|
const data = await handleGetSERVERPARTTYPEList(req)
|
||||||
console.log('datadatadatadata', data);
|
|
||||||
let list: any = []
|
let list: any = []
|
||||||
if (data && data.length > 0) {
|
if (data && data.length > 0) {
|
||||||
data.forEach((item: any) => {
|
data.forEach((item: any) => {
|
||||||
@ -458,7 +440,6 @@ const OperationReport = ({ PATROLID }: DetailProps) => {
|
|||||||
(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) {
|
||||||
formRef.current?.setFieldsValue({ SPREGIONTYPE_NAME: option.label })
|
formRef.current?.setFieldsValue({ SPREGIONTYPE_NAME: option.label })
|
||||||
@ -492,7 +473,6 @@ const OperationReport = ({ PATROLID }: DetailProps) => {
|
|||||||
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) {
|
||||||
formRef.current?.setFieldsValue({ SERVERPART_NAME: option.label })
|
formRef.current?.setFieldsValue({ SERVERPART_NAME: option.label })
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
import requestCode from "@/utils/requestCode"
|
||||||
import requestOld from "@/utils/requestOld"
|
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) {
|
export async function handlGetDeleteRENTCALCULATION(params: any) {
|
||||||
const data = await requestOld(`/Analysis/DeleteRENTCALCULATION`, {
|
const data = await requestOld(`/Analysis/DeleteRENTCALCULATION`, {
|
||||||
|
|||||||
@ -60,6 +60,7 @@ const InvoiceDetail = ({ showDetail, setShowDetail, parentRow, setParentRow }: P
|
|||||||
align: 'left',
|
align: 'left',
|
||||||
width: 200,
|
width: 200,
|
||||||
dataIndex: "TABLE_NAME",
|
dataIndex: "TABLE_NAME",
|
||||||
|
ellipsis: true,
|
||||||
render: (_, record) => {
|
render: (_, record) => {
|
||||||
return isEdit ? <Input defaultValue={record.TABLE_NAME} onBlur={(e: any) => {
|
return isEdit ? <Input defaultValue={record.TABLE_NAME} onBlur={(e: any) => {
|
||||||
console.log('eee', e);
|
console.log('eee', e);
|
||||||
@ -76,9 +77,10 @@ const InvoiceDetail = ({ showDetail, setShowDetail, parentRow, setParentRow }: P
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: <div style={{ textAlign: 'center' }}>商品条码</div>,
|
title: <div style={{ textAlign: 'center' }}>商品条码</div>,
|
||||||
align: 'center',
|
align: 'left',
|
||||||
width: 120,
|
width: 150,
|
||||||
dataIndex: "ITEM_ID"
|
dataIndex: "ITEM_ID",
|
||||||
|
ellipsis: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: <div style={{ textAlign: 'center' }}>规格型号</div>,
|
title: <div style={{ textAlign: 'center' }}>规格型号</div>,
|
||||||
|
|||||||
583
src/pages/rentComparison/index.tsx
Normal file
583
src/pages/rentComparison/index.tsx
Normal 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);
|
||||||
297
src/pages/rentComparison/style.less
Normal file
297
src/pages/rentComparison/style.less
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -109,7 +109,6 @@ const ServerpartAssets = () => {
|
|||||||
: '' :
|
: '' :
|
||||||
record?.level === 4 ? record?.PROPERTYASSETS_CODE ?
|
record?.level === 4 ? record?.PROPERTYASSETS_CODE ?
|
||||||
<a onClick={() => {
|
<a onClick={() => {
|
||||||
console.log('record', record);
|
|
||||||
setCurrentRow(record)
|
setCurrentRow(record)
|
||||||
setAssetsDrawer(true)
|
setAssetsDrawer(true)
|
||||||
}}>
|
}}>
|
||||||
@ -156,7 +155,6 @@ const ServerpartAssets = () => {
|
|||||||
valueType: 'treeSelect',
|
valueType: 'treeSelect',
|
||||||
request: async () => {
|
request: async () => {
|
||||||
const list = await getFieldEnumTree({ FieldExplainField: 'PROPERTYASSETS_TYPE', notformate: true })
|
const list = await getFieldEnumTree({ FieldExplainField: 'PROPERTYASSETS_TYPE', notformate: true })
|
||||||
console.log('list2222', list);
|
|
||||||
let obj: any = []
|
let obj: any = []
|
||||||
if (list && list.length > 0) {
|
if (list && list.length > 0) {
|
||||||
list.forEach((item: any) => {
|
list.forEach((item: any) => {
|
||||||
@ -231,14 +229,12 @@ const ServerpartAssets = () => {
|
|||||||
record?.PROPERTYASSETS_CODE ?
|
record?.PROPERTYASSETS_CODE ?
|
||||||
<>
|
<>
|
||||||
<a onClick={() => {
|
<a onClick={() => {
|
||||||
console.log('record', record);
|
|
||||||
setCurrentRow(record)
|
setCurrentRow(record)
|
||||||
setAssetsDrawer(true)
|
setAssetsDrawer(true)
|
||||||
}}>编辑</a>
|
}}>编辑</a>
|
||||||
<Popconfirm
|
<Popconfirm
|
||||||
title="确认删除该资产?"
|
title="确认删除该资产?"
|
||||||
onConfirm={async () => {
|
onConfirm={async () => {
|
||||||
console.log('record', record);
|
|
||||||
const req: any = {
|
const req: any = {
|
||||||
Id: record?.PROPERTYASSETS_ID,
|
Id: record?.PROPERTYASSETS_ID,
|
||||||
OperateId: currentUser?.ID,
|
OperateId: currentUser?.ID,
|
||||||
@ -261,7 +257,6 @@ const ServerpartAssets = () => {
|
|||||||
{
|
{
|
||||||
record?.SHOPNAME ?
|
record?.SHOPNAME ?
|
||||||
<a onClick={() => {
|
<a onClick={() => {
|
||||||
console.log('record', record);
|
|
||||||
setCurrentRow(record)
|
setCurrentRow(record)
|
||||||
setAssetsDrawer(true)
|
setAssetsDrawer(true)
|
||||||
}}>编辑</a> : ''
|
}}>编辑</a> : ''
|
||||||
@ -329,7 +324,6 @@ const ServerpartAssets = () => {
|
|||||||
// 历史表格的提交
|
// 历史表格的提交
|
||||||
const handleSubHistoryTableData = async () => {
|
const handleSubHistoryTableData = async () => {
|
||||||
let list: any = historyTableRef.current?.selectModalRowList
|
let list: any = historyTableRef.current?.selectModalRowList
|
||||||
console.log('list', list);
|
|
||||||
let reqList: any = []
|
let reqList: any = []
|
||||||
list.forEach((item: any) => {
|
list.forEach((item: any) => {
|
||||||
reqList.push({
|
reqList.push({
|
||||||
@ -360,7 +354,6 @@ const ServerpartAssets = () => {
|
|||||||
UserIdEncrypted: id
|
UserIdEncrypted: id
|
||||||
}
|
}
|
||||||
const data = await handleGetPassportInfoById(req)
|
const data = await handleGetPassportInfoById(req)
|
||||||
console.log('datae2e12e1', data);
|
|
||||||
setCurrentUser(data)
|
setCurrentUser(data)
|
||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
@ -380,7 +373,6 @@ const ServerpartAssets = () => {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const search = window.location.search;
|
const search = window.location.search;
|
||||||
const addressParams = Object.fromEntries(new URLSearchParams(search).entries());
|
const addressParams = Object.fromEntries(new URLSearchParams(search).entries());
|
||||||
console.log('addressParamsaddressParamsaddressParams', addressParams);
|
|
||||||
handleGetUserInfo(addressParams.UserIdEncrypted)
|
handleGetUserInfo(addressParams.UserIdEncrypted)
|
||||||
handleGetServerList()
|
handleGetServerList()
|
||||||
}, [])
|
}, [])
|
||||||
@ -472,7 +464,6 @@ const ServerpartAssets = () => {
|
|||||||
}
|
}
|
||||||
setSearchParams(params)
|
setSearchParams(params)
|
||||||
const data = await handleGetPROPERTYASSETSTreeList(req)
|
const data = await handleGetPROPERTYASSETSTreeList(req)
|
||||||
console.log('data', data);
|
|
||||||
if (data && data.length > 0) {
|
if (data && data.length > 0) {
|
||||||
// 每层都加上level 第一层显示片区 第二层显示服务区 第三层显示方位 第四层显示资产编码
|
// 每层都加上level 第一层显示片区 第二层显示服务区 第三层显示方位 第四层显示资产编码
|
||||||
data.forEach((item: any, index: number) => {
|
data.forEach((item: any, index: number) => {
|
||||||
@ -589,12 +580,9 @@ const ServerpartAssets = () => {
|
|||||||
title={'请选择门店进行关联'}
|
title={'请选择门店进行关联'}
|
||||||
onOk={() => {
|
onOk={() => {
|
||||||
let shopIdList: any = relatedShopRef.current?.selectModalRowList
|
let shopIdList: any = relatedShopRef.current?.selectModalRowList
|
||||||
console.log('shopIdList', shopIdList);
|
|
||||||
let shopId: any = {}
|
let shopId: any = {}
|
||||||
if (shopIdList && shopIdList.length > 0) {
|
if (shopIdList && shopIdList.length > 0) {
|
||||||
shopId = shopIdList[0]
|
shopId = shopIdList[0]
|
||||||
console.log('shopId', shopId);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
// 选中的整行对象 因为要回显关联的门店
|
// 选中的整行对象 因为要回显关联的门店
|
||||||
setSelectShopId(shopId)
|
setSelectShopId(shopId)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user