|
|
|
// components/detail-senior/detail-senior.js
|
|
|
|
const $api = require('../../utils/api').API;
|
|
|
|
const measure = require('../../utils/measure')
|
|
|
|
Component({
|
|
|
|
options: {
|
|
|
|
addGlobalClass: true
|
|
|
|
},
|
|
|
|
/**
|
|
|
|
* 组件的属性列表
|
|
|
|
*/
|
|
|
|
properties: {
|
|
|
|
mid: {
|
|
|
|
type: String,
|
|
|
|
},
|
|
|
|
//测算数据
|
|
|
|
info: {
|
|
|
|
type: Object,
|
|
|
|
value: {}
|
|
|
|
},
|
|
|
|
//基础数据
|
|
|
|
dataInfo: {
|
|
|
|
type: Object,
|
|
|
|
value: {}
|
|
|
|
},
|
|
|
|
// 查询数据
|
|
|
|
orgiData: {
|
|
|
|
type: Object,
|
|
|
|
value: {}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
/**
|
|
|
|
* 组件的初始数据
|
|
|
|
*/
|
|
|
|
data: {
|
|
|
|
tabInput: [false, true, false, false, false],
|
|
|
|
priceData: {
|
|
|
|
housingPrice: null,
|
|
|
|
commercePrice: null,
|
|
|
|
businessPrice: null,
|
|
|
|
parkingPrice: null,
|
|
|
|
parkingAllocation: null,
|
|
|
|
singleIndicator: null,
|
|
|
|
parkingSaleRate: null,
|
|
|
|
singlePrimeCost: null,
|
|
|
|
commerceRate: null,
|
|
|
|
businessRate: null,
|
|
|
|
manageFeeRate: null,
|
|
|
|
salesRate: null,
|
|
|
|
financialRate: null,
|
|
|
|
financingRate: null,
|
|
|
|
loansRate: null,
|
|
|
|
financingInterest: null,
|
|
|
|
loansInterest: null,
|
|
|
|
financingPeriod: null,
|
|
|
|
loansPeriod: null,
|
|
|
|
freeHousingRate: null,
|
|
|
|
freeCommerceRate: null,
|
|
|
|
freeBusinessRate: null,
|
|
|
|
selfHousingRate: null,
|
|
|
|
selfHousingPrice: null,
|
|
|
|
selfCommerceRate: null,
|
|
|
|
selfCommercePrice: null,
|
|
|
|
selfBusinessRate: null,
|
|
|
|
selfBusinessPrice: null,
|
|
|
|
selfBusinessSale: null,
|
|
|
|
selfCommerceSale: null,
|
|
|
|
selfHousingSale: null,
|
|
|
|
forecastFloorPrice: null,//预测楼面价
|
|
|
|
},
|
|
|
|
tabHDate: ['土地价格', '楼面价', '土地总价', '净利率', '溢价率'], // 标题内容
|
|
|
|
tabW: ['167', '114', '157', '134', '120'],
|
|
|
|
rowKey: ['Tprice', 'Lprice', 'AllPrice', 'Interest', 'PremiumRate'],
|
|
|
|
rowData: [{
|
|
|
|
Tprice: '起拍价',
|
|
|
|
Lprice: 0,
|
|
|
|
AllPrice: 0,
|
|
|
|
Interest: 0,
|
|
|
|
PremiumRate: 0
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Tprice: '预测成交价',
|
|
|
|
Lprice: null,
|
|
|
|
AllPrice: 0,
|
|
|
|
Interest: 0,
|
|
|
|
PremiumRate: 0
|
|
|
|
},
|
|
|
|
],
|
|
|
|
isMeasure: false,
|
|
|
|
params: {
|
|
|
|
selfHousingSale: '',
|
|
|
|
selfCommerceSale: '',
|
|
|
|
selfBusinessSale: '',
|
|
|
|
},
|
|
|
|
arr: [
|
|
|
|
{label: '否', value: '0'},
|
|
|
|
{label: '是', value: '1'},
|
|
|
|
],
|
|
|
|
measureDataId: '',
|
|
|
|
parking_sale_rate: '',
|
|
|
|
finance_rate: '',
|
|
|
|
measureData: {
|
|
|
|
"landListedId": null,
|
|
|
|
"businessPrice": 0,//商务定价
|
|
|
|
"businessRate": 0,//商务配比
|
|
|
|
"commercePrice": 0,//商业定价
|
|
|
|
"commerceRate": 0,//商业配比
|
|
|
|
"errorAbsoluteValue": 0,//误差绝对值
|
|
|
|
"financialRate": 0,//财务费率
|
|
|
|
"financingInterest": 0,//前融利率
|
|
|
|
"financingPeriod": 0,//前融周期
|
|
|
|
"financingRate": 0,//前融比例
|
|
|
|
"floorPrice": 0,//起拍楼面价
|
|
|
|
"forecastFloorPrice": 0,//预测楼面价
|
|
|
|
"forecastLandTotalPrice": 0,//预测土地总价
|
|
|
|
"forecastNetProfitRatio": 0,//预测净利率
|
|
|
|
"forecastPremiumRate": 0,// 预测溢价率
|
|
|
|
"freeBusinessRate": 0,//无偿移交商务计容占比
|
|
|
|
"freeCommerceRate": 0,//无偿移交商业计容占比
|
|
|
|
"freeHousingRate": 0,//无偿移交住宅计容占比
|
|
|
|
"housingPrice": 0,//住宅定价
|
|
|
|
"landTotalPrice": 0,// 土地总价
|
|
|
|
"loansInterest": 0,// 开发贷利率
|
|
|
|
"loansPeriod": 0,//开发贷周期
|
|
|
|
"loansRate": 0,//开发贷比例
|
|
|
|
"manageFeeRate": 0,//管理费率
|
|
|
|
// "measureDataId": 0,// 测算数据id
|
|
|
|
"measureType": 0,// 测算类型(0:基础,1:高级)
|
|
|
|
"netProfitRatio": 0,//净利率
|
|
|
|
"parkingAllocation": 0,//车位配比(个/100㎡)
|
|
|
|
"parkingPrice": 0,//车位定价
|
|
|
|
"parkingSaleRate": 0,// 车位可售
|
|
|
|
"premiumRate": 0,//溢价率
|
|
|
|
"salesRate": 0,//销售费率
|
|
|
|
"selfBusinessSale": 0,//
|
|
|
|
"selfBusinessPrice": 0,//商务可售价格
|
|
|
|
"selfBusinessRate": 0,// 自持商务计容占比
|
|
|
|
"selfCommerceSale": 0,//
|
|
|
|
"selfCommercePrice": 0,//商业可售价格
|
|
|
|
"selfCommerceRate": 0,//自持商业计容占比
|
|
|
|
"selfHousingSale": 0,//
|
|
|
|
"selfHousingPrice": 0,//住宅可售价格
|
|
|
|
"selfHousingRate": 0,//自持住宅计容占比
|
|
|
|
"singleIndicator": 0,// 单车指标
|
|
|
|
"singlePrimeCost": 0,//单方成本
|
|
|
|
"transactionFloorPrice": 0,// 成交楼面价
|
|
|
|
"statusCd": 1000
|
|
|
|
}
|
|
|
|
},
|
|
|
|
ready() {
|
|
|
|
//回填数据
|
|
|
|
$api.AJAX('GET', 'applets/measuredata/' + this.properties.mid, true).then(res => {
|
|
|
|
if (res.data && res.data.measureType == 1) {
|
|
|
|
this.setData({
|
|
|
|
'priceData.housingPrice': res.data.housingPrice,
|
|
|
|
'priceData.commercePrice': res.data.commercePrice,
|
|
|
|
'priceData.businessPrice': res.data.businessPrice,
|
|
|
|
'priceData.parkingPrice': res.data.parkingPrice,
|
|
|
|
'priceData.parkingAllocation': res.data.parkingAllocation,
|
|
|
|
'priceData.singleIndicator': res.data.singleIndicator,
|
|
|
|
'priceData.singlePrimeCost': res.data.singlePrimeCost,
|
|
|
|
'priceData.manageFeeRate': res.data.manageFeeRate,
|
|
|
|
'priceData.salesRate': res.data.salesRate,
|
|
|
|
'priceData.financialRate': res.data.financialRate,
|
|
|
|
'priceData.loansRate': res.data.loansRate,
|
|
|
|
'priceData.financingInterest': res.data.financingInterest,
|
|
|
|
'priceData.loansInterest': res.data.loansInterest,
|
|
|
|
'priceData.financingPeriod': res.data.financingPeriod,
|
|
|
|
'priceData.loansPeriod': res.data.loansPeriod,
|
|
|
|
'priceData.freeHousingRate': res.data.freeHousingRate,
|
|
|
|
'priceData.freeCommerceRate': res.data.freeCommerceRate,
|
|
|
|
'priceData.freeBusinessRate': res.data.freeBusinessRate,
|
|
|
|
'priceData.selfHousingRate': res.data.selfHousingRate,
|
|
|
|
'priceData.selfHousingPrice': res.data.selfHousingPrice,
|
|
|
|
'priceData.selfCommerceRate': res.data.selfCommerceRate,
|
|
|
|
'priceData.selfCommercePrice': res.data.selfCommercePrice,
|
|
|
|
'priceData.selfBusinessRate': res.data.selfBusinessRate,
|
|
|
|
'priceData.selfBusinessPrice': res.data.selfBusinessPrice,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
if (this.data.dataInfo) {
|
|
|
|
this.setData({
|
|
|
|
'priceData.commerceRate': (((parseFloat(this.data.dataInfo.bizSpace) / parseFloat(this.data.dataInfo.totalConsArea)).toFixed(3)) * 100).toFixed(2),
|
|
|
|
'priceData.businessRate': (((parseFloat(this.data.dataInfo.bizSpace) / parseFloat(this.data.dataInfo.totalConsArea)).toFixed(3)) * 100).toFixed(2),
|
|
|
|
'rowData[0].Lprice': this.data.dataInfo.floorPrice ? parseFloat(this.data.dataInfo.floorPrice).toFixed(3) : 0,//transferPrice
|
|
|
|
'rowData[0].AllPrice': parseFloat(this.data.dataInfo.transferPrice).toFixed(3),
|
|
|
|
'rowData[1].AllPrice': parseFloat(this.data.dataInfo.transferPrice).toFixed(3),
|
|
|
|
})
|
|
|
|
if (this.data.orgiData && this.data.orgiData.measureType === 1) {
|
|
|
|
let data = JSON.parse(JSON.stringify(this.data.orgiData))
|
|
|
|
this.data.measureDataId = data.measureDataId;
|
|
|
|
this.data.isMeasure = true;
|
|
|
|
this.setData({
|
|
|
|
params: {
|
|
|
|
selfHousingSale: data.selfHousingSale === 1 ? '是' : '否',
|
|
|
|
selfCommerceSale: data.selfCommerceSale === 1 ? '是' : '否',
|
|
|
|
selfBusinessSale: data.selfBusinessSale === 1 ? '是' : '否',
|
|
|
|
}
|
|
|
|
})
|
|
|
|
for (let key in data) {
|
|
|
|
for (let key2 in this.data.measureData) {
|
|
|
|
if (key == key2) {
|
|
|
|
if (!data[key]) {
|
|
|
|
this.data.measureData[key2] = 0
|
|
|
|
} else {
|
|
|
|
this.data.measureData[key2] = data[key]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for (let key3 in this.data.priceData) {
|
|
|
|
if (key == key3) {
|
|
|
|
if (!data[key]) {
|
|
|
|
this.setData({
|
|
|
|
[`priceData.${key3}`]: 0
|
|
|
|
})
|
|
|
|
// this.data.priceData[key3]=0
|
|
|
|
} else {
|
|
|
|
this.setData({
|
|
|
|
[`priceData.${key3}`]: data[key]
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
console.log(this.data.priceData)
|
|
|
|
this.setData({
|
|
|
|
'rowData[0].Interest': this.data.measureData.netProfitRatio,
|
|
|
|
'rowData[1].Interest': this.data.measureData.forecastNetProfitRatio,
|
|
|
|
'rowData[1].Lprice': this.data.measureData.forecastFloorPrice,
|
|
|
|
'rowData[1].PremiumRate': this.data.measureData.forecastPremiumRate,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
//车位配比
|
|
|
|
$api.getDict('parking_sale_rate').then(res => {
|
|
|
|
this.setData({
|
|
|
|
parking_sale_rate: res.data[0].value,
|
|
|
|
'priceData.parkingSaleRate': res.data[0].value
|
|
|
|
})
|
|
|
|
})
|
|
|
|
//财务费率
|
|
|
|
$api.getDict('finance_rate').then(res => {
|
|
|
|
this.setData({
|
|
|
|
finance_rate: res.data[0].value,
|
|
|
|
'priceData.financialRate': res.data[0].value
|
|
|
|
})
|
|
|
|
})
|
|
|
|
},
|
|
|
|
/**
|
|
|
|
* 组件的方法列表
|
|
|
|
*/
|
|
|
|
methods: {
|
|
|
|
bindChange(e) {
|
|
|
|
let type = e.currentTarget.dataset.type;
|
|
|
|
// console.log(type)
|
|
|
|
for (let key in this.data.params) {
|
|
|
|
if (key == type) {
|
|
|
|
this.setData({
|
|
|
|
[`params.${key}`]: this.data.arr[e.detail.value].label
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for (let key in this.data.priceData) {
|
|
|
|
if (key == type) {
|
|
|
|
this.setData({
|
|
|
|
[`priceData.${key}`]: this.data.arr[e.detail.value].value
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
console.log(this.data.priceData)
|
|
|
|
},
|
|
|
|
vmodel(e) {
|
|
|
|
for (let key in this.data.priceData) {
|
|
|
|
if (key == e.currentTarget.dataset.type) {
|
|
|
|
this.data.priceData[key] = e.detail.value
|
|
|
|
}
|
|
|
|
}
|
|
|
|
console.log(this.data.priceData)
|
|
|
|
},
|
|
|
|
calculate() {
|
|
|
|
let table = this.selectComponent('#table');
|
|
|
|
if (table.data.myData) {
|
|
|
|
this.setData({
|
|
|
|
'priceData.forecastFloorPrice': table.data.myData
|
|
|
|
})
|
|
|
|
} else if (this.data.measureData.forecastFloorPrice) {
|
|
|
|
table.data.myData = this.data.measureData.forecastFloorPrice
|
|
|
|
this.setData({
|
|
|
|
'priceData.forecastFloorPrice': this.data.measureData.forecastFloorPrice
|
|
|
|
})
|
|
|
|
}
|
|
|
|
console.log(this.data.priceData)
|
|
|
|
for (let key in this.data.priceData) {
|
|
|
|
if (!this.data.priceData[key] && this.data.priceData[key] != 0) {
|
|
|
|
console.log(key)
|
|
|
|
wx.showToast({
|
|
|
|
title: '请确定输入是否完整',
|
|
|
|
icon: 'none',
|
|
|
|
duration: 2000
|
|
|
|
})
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for (let key in this.data.measureData) {
|
|
|
|
for (let key2 in this.data.priceData) {
|
|
|
|
if (typeof this.data.priceData[key2] == 'string') {
|
|
|
|
this.data.priceData[key2] = parseFloat(this.data.priceData[key2])
|
|
|
|
}
|
|
|
|
if (key2 == key) {
|
|
|
|
this.data.measureData[key] = this.data.priceData[key2]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
this.setData({
|
|
|
|
'rowData[0].Interest': (measure(this.data.measureData, parseFloat(this.data.dataInfo.totalConsArea), parseFloat(this.data.dataInfo.startingFloorPrice), parseFloat(this.data.dataInfo.allocationCapacity), parseFloat(this.data.dataInfo.allocationNotCapacity))).toFixed(3),
|
|
|
|
'rowData[1].Interest': (measure(this.data.measureData, parseFloat(this.data.dataInfo.totalConsArea), parseFloat(table.data.myData), parseFloat(this.data.dataInfo.allocationCapacity), parseFloat(this.data.dataInfo.allocationNotCapacity))).toFixed(3),
|
|
|
|
'rowData[1].Lprice': table.data.myData,
|
|
|
|
'rowData[1].PremiumRate': ((parseFloat(table.data.myData) - parseFloat(this.data.dataInfo.startingFloorPrice)) / parseFloat(this.data.dataInfo.startingFloorPrice)).toFixed(3),
|
|
|
|
})
|
|
|
|
this.data.measureData.netProfitRatio = parseFloat(this.data.rowData[0].Interest);
|
|
|
|
this.data.measureData.forecastNetProfitRatio = parseFloat(this.data.rowData[1].Interest);
|
|
|
|
this.data.measureData.premiumRate = parseFloat(this.data.rowData[0].PremiumRate);
|
|
|
|
this.data.measureData.forecastPremiumRate = parseFloat(this.data.rowData[1].PremiumRate);
|
|
|
|
this.data.isMeasure = true;
|
|
|
|
// measure()
|
|
|
|
// console.log(this.data.dataInfo)
|
|
|
|
},
|
|
|
|
save() {
|
|
|
|
if (!this.data.isMeasure) {
|
|
|
|
wx.showToast({
|
|
|
|
title: '请先完成数据测算',
|
|
|
|
icon: 'none',
|
|
|
|
duration: 2000
|
|
|
|
})
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
if (this.data.orgiData && this.data.orgiData.statusCd == '1100') {
|
|
|
|
wx.showToast({
|
|
|
|
title: '该测算数据已被保存',
|
|
|
|
icon: 'none',
|
|
|
|
duration: 2000
|
|
|
|
})
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
let data = JSON.parse(JSON.stringify(this.data.measureData))
|
|
|
|
if (this.data.measureDataId) {
|
|
|
|
data.measureDataId = this.data.measureDataId
|
|
|
|
}
|
|
|
|
data.landListedId = this.data.dataInfo.landListedId;
|
|
|
|
data.statusCd = 1100;
|
|
|
|
data.measureType = 1;
|
|
|
|
$api.measureData(data).then(res => {
|
|
|
|
if (res.msg == 'ok') {
|
|
|
|
wx.showToast({
|
|
|
|
title: '保存成功',
|
|
|
|
icon: 'none',
|
|
|
|
duration: 2000
|
|
|
|
})
|
|
|
|
}
|
|
|
|
})
|
|
|
|
console.log(this.data.measureData)
|
|
|
|
},
|
|
|
|
submit() {
|
|
|
|
if (!this.data.isMeasure) {
|
|
|
|
wx.showToast({
|
|
|
|
title: '请先完成数据测算',
|
|
|
|
icon: 'none',
|
|
|
|
duration: 2000
|
|
|
|
})
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
if (this.data.orgiData && this.data.orgiData.statusCd == '1100') {
|
|
|
|
wx.showToast({
|
|
|
|
title: '该测算数据已被保存',
|
|
|
|
icon: 'none',
|
|
|
|
duration: 2000
|
|
|
|
})
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
let data = JSON.parse(JSON.stringify(this.data.measureData))
|
|
|
|
if (this.data.measureDataId) {
|
|
|
|
data.measureDataId = this.data.measureDataId
|
|
|
|
}
|
|
|
|
data.landListedId = this.data.dataInfo.landListedId;
|
|
|
|
data.statusCd = 1000;
|
|
|
|
data.measureType = 1;
|
|
|
|
$api.measureData(data).then(res => {
|
|
|
|
console.log(res)
|
|
|
|
if (res.msg == 'ok') {
|
|
|
|
wx.showToast({
|
|
|
|
title: '提交成功',
|
|
|
|
icon: 'none',
|
|
|
|
duration: 2000
|
|
|
|
})
|
|
|
|
}
|
|
|
|
})
|
|
|
|
},
|
|
|
|
//重做
|
|
|
|
clearData() {
|
|
|
|
this.setData({
|
|
|
|
priceData: {
|
|
|
|
housingPrice: null,
|
|
|
|
commercePrice: null,
|
|
|
|
businessPrice: null,
|
|
|
|
parkingPrice: null,
|
|
|
|
parkingAllocation: null,
|
|
|
|
singleIndicator: null,
|
|
|
|
parkingSaleRate: this.data.parking_sale_rate,
|
|
|
|
singlePrimeCost: null,
|
|
|
|
commerceRate: (parseFloat(this.data.dataInfo.bizSpace) / parseFloat(this.data.dataInfo.totalConsArea)).toFixed(3),
|
|
|
|
businessRate: (parseFloat(this.data.dataInfo.bizSpace) / parseFloat(this.data.dataInfo.totalConsArea)).toFixed(3),
|
|
|
|
manageFeeRate: null,
|
|
|
|
salesRate: null,
|
|
|
|
financialRate: this.data.finance_rate,
|
|
|
|
financingRate: null,
|
|
|
|
loansRate: null,
|
|
|
|
financingInterest: null,
|
|
|
|
loansInterest: null,
|
|
|
|
financingPeriod: null,
|
|
|
|
loansPeriod: null,
|
|
|
|
freeHousingRate: null,
|
|
|
|
freeCommerceRate: null,
|
|
|
|
freeBusinessRate: null,
|
|
|
|
selfHousingRate: null,
|
|
|
|
selfHousingPrice: null,
|
|
|
|
selfCommerceRate: null,
|
|
|
|
selfCommercePrice: null,
|
|
|
|
selfBusinessRate: null,
|
|
|
|
selfBusinessPrice: null,
|
|
|
|
selfBusinessSale: null,
|
|
|
|
selfCommerceSale: null,
|
|
|
|
selfHousingSale: null,
|
|
|
|
forecastFloorPrice: null,//预测楼面价
|
|
|
|
},
|
|
|
|
rowData: [{
|
|
|
|
Tprice: '起拍价',
|
|
|
|
Lprice: this.data.dataInfo.floorPrice ? parseFloat(this.data.dataInfo.floorPrice).toFixed(3) : 0,//transferPrice,
|
|
|
|
AllPrice: parseFloat(this.data.dataInfo.transferPrice).toFixed(3),
|
|
|
|
Interest: 0,
|
|
|
|
PremiumRate: 0
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Tprice: '预测成交价',
|
|
|
|
Lprice: null,
|
|
|
|
AllPrice: parseFloat(this.data.dataInfo.transferPrice).toFixed(3),
|
|
|
|
Interest: 0,
|
|
|
|
PremiumRate: 0
|
|
|
|
},
|
|
|
|
],
|
|
|
|
isMeasure: false,
|
|
|
|
params: {
|
|
|
|
selfHousingSale: '',
|
|
|
|
selfCommerceSale: '',
|
|
|
|
selfBusinessSale: '',
|
|
|
|
},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|