feature (办公基价迁移): 完成办公计价迁移

1. 办公案例下载
2. 办公案例清洗
3. 办公基价计算
4. 办公基价导入
5. 物业基价菜单调整
6. 住宅租赁挂牌案例下载
7. 住宅租赁案例清洗
This commit is contained in:
purple
2020-07-03 18:52:11 +08:00
parent 0ace1f040f
commit 706dddeedd
43 changed files with 1759 additions and 681 deletions

View File

@ -3,7 +3,7 @@ import request from '@/utils/request'
// 查询住宅销售基价修正列表
export function list(query) {
return request({
url: '/data/sale-price/residence/ultimate/list',
url: '/data/sale-price/residence/artificial/list',
method: 'get',
params: query
})
@ -12,7 +12,7 @@ export function list(query) {
// 查询住宅销售基价修正详细
// export function get(id) {
// return request({
// url: '/data/sale-price/residence/ultimate/' + id,
// url: '/data/sale-price/residence/artificial/' + id,
// method: 'get'
// })
// }
@ -20,7 +20,7 @@ export function list(query) {
// // 修改住宅销售基价修正
// export function update(data) {
// return request({
// url: '/data/sale-price/residence/ultimate',
// url: '/data/sale-price/residence/artificial',
// method: 'put',
// data: data
// })
@ -29,7 +29,7 @@ export function list(query) {
// 导出住宅销售基价修正
export function export2File(query) {
return request({
url: '/data/sale-price/residence/ultimate/export',
url: '/data/sale-price/residence/artificial/export',
method: 'get',
params: query
})
@ -37,7 +37,7 @@ export function export2File(query) {
export function getYearMonthList() {
return request({
url: '/data/sale-price/residence/ultimate/yearmonth',
url: '/data/sale-price/residence/artificial/yearmonth',
method: 'get'
})
}

View File

@ -41,3 +41,17 @@ export function getYearMonthList() {
method: 'get'
})
}
export function getBlockChange(yearmonth) {
return request({
url: '/data/sale-price/residence/compute/block-change/' + yearmonth,
method: 'get'
})
}
export function getCountyChange(yearmonth) {
return request({
url: '/data/sale-price/residence/compute/county-change/' + yearmonth,
method: 'get'
})
}

View File

@ -1,17 +1,17 @@
<template>
<div class="app-container">
<el-form :model="queryParams" :rules="rules" ref="queryForm" :inline="true" label-width="100px">
<el-form-item label="联城小区ID" prop="communityId" clearable>
<el-form-item label="小区ID" prop="communityId" clearable>
<el-input
v-model="queryParams.communityId"
placeholder="请输入案例小区名称"
placeholder="请输入案例小区ID"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="小区类型" prop="communityType" clearable>
<el-select v-model="queryParams.communityType" placeholder="请输入小区类型">
<el-form-item label="项目类型" prop="communityType" clearable>
<el-select v-model="queryParams.communityType" placeholder="请选择项目类型">
<el-option
v-for="item in communityTypeOptions"
:value="item.value"
@ -21,7 +21,7 @@
</el-select>
</el-form-item>
<el-form-item label="价格类型" prop="priceType" clearable>
<el-select v-model="queryParams.priceType" placeholder="请输入价格类型">
<el-select v-model="queryParams.priceType" placeholder="请选择价格类型">
<el-option
v-for="item in priceTypeOptions"
:value="item.value"
@ -47,17 +47,7 @@
</el-form>
<el-row :gutter="10" class="mb8">
<!-- <el-col :span="1.5">
<el-button
type="success"
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['system:user:edit']"
>修改</el-button>
</el-col>-->
<!-- <el-col :span="1.5">
<el-col :span="1.5">
<el-button
type="warning"
icon="el-icon-download"
@ -66,15 +56,6 @@
v-hasPermi="['system:user:export']"
>导出</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="info"
icon="el-icon-upload2"
size="mini"
@click="handleImport"
v-hasPermi="['system:user:import']"
>导入</el-button>
</el-col>-->
</el-row>
<el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
@ -86,12 +67,6 @@
<el-tag size="big" type="success" v-if="2 == scope.row.communityType">办公</el-tag>
</template>
</el-table-column>
<!-- <el-table-column
label=""
align="center"
prop=""
:formatter="priceTypeFormatter"
/> -->
<el-table-column label="价格类型" align="center" prop="priceType">
<template slot-scope="scope">
<el-tag size="big" v-if="1 == scope.row.priceType">售价</el-tag>
@ -101,117 +76,15 @@
<el-table-column label="价值时点" align="center" prop="valuePoint" />
<el-table-column label="标准基价" align="center" prop="standardPrice" />
<el-table-column label="主力面积基价" align="center" prop="mainAreaPrice" />
<!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:user:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:user:remove']"
>删除</el-button>
</template>
</el-table-column>-->
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:page.sync="queryParams.pageIndex"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改办公基价对话框 -->
<!-- <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="160px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="小区ID">
<el-input v-model="form.communityId" disabled="true" readonly />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="楼栋ID">
<el-input v-model="form.buildingId" disabled="true" readonly />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="主力基价(元/㎡)">
<el-input v-model="form.mainPrice" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="主力租金(元/月·㎡)">
<el-input v-model="form.mainPriceRent" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="主力基价涨跌幅">
<el-input v-model="form.mainPricePst" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="主力租金涨跌幅">
<el-input v-model="form.mainPriceRentPst" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="主力基价类型">
<el-input v-model="form.mainPriceType" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="主力租金类型">
<el-input v-model="form.mainPriceRentType" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload
ref="upload"
:limit="1"
accept=".xlsx, .xls"
:headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport"
:disabled="upload.isUploading"
:on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess"
:auto-upload="false"
drag
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">
将文件拖到此处
<em>点击上传</em>
</div>
<div class="el-upload__tip" style="color:red" slot="tip">提示仅允许导入xlsxlsx格式文件</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFileForm"> </el-button>
<el-button @click="upload.open = false"> </el-button>
</div>
</el-dialog>-->
</div>
</template>
@ -262,7 +135,7 @@ export default {
communityType: undefined,
priceType: undefined,
valuePoint: undefined,
pageNum: 1,
pageIndex: 1,
pageSize: 10
},
yearMonthList: [],
@ -301,9 +174,6 @@ export default {
},
created() {
this.loading = false;
// getYearMonthList().then(response => {
// this.yearMonthList = response.data;
// });
},
methods: {
priceTypeFormatter: function(row, column, cellValue, index) {
@ -365,7 +235,7 @@ export default {
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.queryParams.pageIndex = 1;
this.getList();
},
/** 重置按钮操作 */
@ -379,12 +249,6 @@ export default {
this.single = selection.length != 1;
this.multiple = !selection.length;
},
/** 新增按钮操作 */
// handleAdd() {
// this.reset();
// this.open = true;
// this.title = "添加办公基价";
// },
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
@ -409,16 +273,6 @@ export default {
this.msgError(response.msg);
}
});
} else {
// addUltimate(this.form).then(response => {
// if (response.code === 200) {
// this.msgSuccess("新增成功");
// this.open = false;
// this.getList();
// } else {
// this.msgError(response.msg);
// }
// });
}
}
});
@ -426,7 +280,7 @@ export default {
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$confirm("是否确认导出所有住宅租赁基价数据项?", "警告", {
this.$confirm("确认导出物业基价?", "警告", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"

View File

@ -45,6 +45,24 @@
v-hasPermi="['system:user:export']"
>导出</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="primary"
icon="el-icon-s-data"
size="mini"
@click="queryBlockChart"
v-hasPermi="['system:user:list']"
>板块涨跌幅</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="primary"
icon="el-icon-s-data"
size="mini"
@click="queryCountyChart"
v-hasPermi="['system:user:list']"
>区域涨跌幅</el-button>
</el-col>
</el-row>
<el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
@ -120,24 +138,6 @@
<el-table-column label="绑定板块+小区类型的涨跌幅" align="center" prop="bindBlockProjectTypePst" />
<el-table-column label="绑定区县+小区类型" align="center" prop="bindCountyProjectType" />
<el-table-column label="绑定区县+小区类型的涨跌幅" align="center" prop="bindCountyProjectTypePst" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:user:edit']"
>修改</el-button>
<!-- <el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:user:remove']"
>删除</el-button>-->
</template>
</el-table-column>
</el-table>
<pagination
@ -147,17 +147,25 @@
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<el-dialog :title="changeChart.title" :visible.sync="changeChart.open" append-to-body>
<line-chart :chart-data="changeChart" />
</el-dialog>
</div>
</template>
<script>
import { getToken } from "@/utils/auth";
import LineChart from "./DistrictBlockChangeChart";
import {
list,
get,
update,
export2File,
getYearMonthList
getYearMonthList,
getBlockChange,
getCountyChange
} from "@/api/data/computeResidenceSalePrice";
export default {
@ -191,6 +199,15 @@ export default {
title: "",
// 是否显示弹出层
open: false,
// 板块变化
blockChart: null,
changeChart: {
title: "",
graph: null,
open: false,
name: [],
value: []
},
// 查询参数
queryParams: {
yearMonth: undefined,
@ -235,7 +252,16 @@ export default {
this.yearMonthList = response.data;
});
},
components: {
LineChart
},
methods: {
initChart() {
console.log(document.getElementById("main"));
echarts.init(document.getElementById("main"));
console.log("====>");
console.log(this.blockChart);
},
yesOrNotFormatter: function(row, column, cellValue, index) {
if (cellValue) return "是";
return "否";
@ -321,16 +347,6 @@ export default {
this.msgError(response.msg);
}
});
} else {
// addUltimate(this.form).then(response => {
// if (response.code === 200) {
// this.msgSuccess("新增成功");
// this.open = false;
// this.getList();
// } else {
// this.msgError(response.msg);
// }
// });
}
}
});
@ -374,6 +390,43 @@ export default {
// 提交上传文件
submitFileForm() {
this.$refs.upload.submit();
},
// 板块涨跌幅
queryBlockChart() {
this.$refs["queryForm"].validate(valid => {
if (valid) {
getBlockChange(this.queryParams.yearMonth).then(response => {
var name = new Array();
var value = new Array();
for (var i = 0; i < response.data.length; i++) {
name.push(response.data[i]["name"]);
value.push(response.data[i]["value"]);
}
this.changeChart.name = name;
this.changeChart.value = value;
});
this.changeChart.open = true;
this.changeChart.title = "板块涨跌幅";
}
});
},
queryCountyChart() {
this.$refs["queryForm"].validate(valid => {
if (valid) {
getCountyChange(this.queryParams.yearMonth).then(response => {
var name = new Array();
var value = new Array();
for (var i = 0; i < response.data.length; i++) {
name.push(response.data[i]["name"]);
value.push(response.data[i]["value"]);
}
this.changeChart.name = name;
this.changeChart.value = value;
this.changeChart.title = "区域涨跌幅";
});
this.changeChart.open = true;
}
});
}
}
};

View File

@ -0,0 +1,86 @@
<template>
<div :class="className" :style="{height:height,width:width}" />
</template>
<script>
import echarts from "echarts";
require("echarts/theme/macarons"); // echarts theme
export default {
props: {
className: {
type: String,
default: "chart"
},
width: {
type: String,
default: "100%"
},
height: {
type: String,
default: "400px"
},
autoResize: {
type: Boolean,
default: true
},
chartData: {
type: Object,
required: true
}
},
data() {
return {
chart: null
};
},
watch: {
chartData: {
deep: true,
handler(val) {
this.setOptions(val);
}
}
},
mounted() {
this.$nextTick(() => {
this.initChart();
});
},
beforeDestroy() {
if (!this.chart) {
return;
}
this.chart.dispose();
this.chart = null;
},
methods: {
initChart() {
this.chart = echarts.init(this.$el, "macarons");
this.setOptions(this.chartData);
},
setOptions({ name, value } = {}) {
this.chart.setOption({
xAxis: {
type: "category",
data: name,
axisLabel: {
formatter: function(value) {
return value.split("").join("\n");
}
}
},
yAxis: {
type: "value"
},
series: [
{
data: value,
type: "line"
}
]
});
}
}
};
</script>

View File

@ -18,16 +18,16 @@
<el-form-item label="联城小区ID" prop="communityId" clearable>
<el-input
v-model="queryParams.communityId"
placeholder="请输入案例小区名称"
placeholder="请输入案例小区ID"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="联城楼栋ID" prop="buildingId" clearable>
<el-form-item label="名称或地址" prop="nameOrAddress" clearable>
<el-input
v-model="queryParams.buildingId"
placeholder="请输入联城楼栋ID"
v-model="queryParams.nameOrAddress"
placeholder="请输入名称或地址"
clearable
size="small"
@keyup.enter.native="handleQuery"
@ -39,6 +39,12 @@
<el-option label="失效" value="0"></el-option>
</el-select>
</el-form-item>
<el-form-item label="标准楼栋">
<el-select v-model="queryParams.standardBuilding" clearable>
<el-option label="是" value="1"></el-option>
<el-option label="否" value="0"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@ -62,7 +68,7 @@
size="mini"
@click="handleImport"
v-hasPermi="['system:user:import']"
>导入</el-button>
>文件导入</el-button>
</el-col>
<!-- <el-col :span="1.5">
<el-button
@ -76,9 +82,9 @@
</el-row>
<el-table v-loading="loading" :data="dataList">
<el-table-column label="年月" align="center" prop="yearMonth" />
<el-table-column label="小区ID" align="center" prop="communityId" width="110" />
<el-table-column label="楼栋ID" align="center" prop="buildingId" width="110" />
<el-table-column label="年月" align="center" prop="yearMonth" fixed />
<el-table-column label="小区ID" align="center" prop="communityId" width="110" fixed />
<el-table-column label="楼栋ID" align="center" prop="buildingId" width="110" fixed />
<el-table-column label="项目名称" align="center" prop="communityName" />
<el-table-column label="办公项目地址" align="center" prop="communityAddress" />
<el-table-column label="楼栋地址" align="center" prop="buildingAddress" />
@ -293,7 +299,7 @@
:limit="1"
accept=".xlsx, .xls"
:headers="upload.headers"
:action="upload.url"
:action="upload.url+ '/' + queryParams.yearMonth "
:disabled="upload.isUploading"
:on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess"
@ -380,14 +386,12 @@ export default {
queryParams: {
yearMonth: undefined,
communityId: undefined,
buildingId: undefined,
nameOrAddress: undefined,
status: undefined,
standardBuilding: undefined,
pageNum: 1,
pageSize: 10
},
statusOptions: [
{ value: 1, text: "正常" },
{ value: 1, text: "失效" }
],
upload: {
// 是否显示弹出层(用户导入)
open: false,
@ -442,8 +446,8 @@ export default {
},
methods: {
yearMonthChange: function(yearMonth) {
this.upload.url += "/" + yearMonth;
console.log(this.upload.url);
// this.upload.url += "/" + yearMonth;
// console.log(this.upload.url);
},
regionFormatter: function(row, column, cellValue, index) {
// 区域-板块-环线-街道