老产品前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

572 lines
17 KiB

4 years ago
<template>
<div>
3 years ago
<div class="dialog-h-content scroll-h m-edit">
4 years ago
<div v-show="!propertyFormShow">
<el-form ref="ref_form"
:inline="true"
4 years ago
:model="dataForm"
:rules="dataRule"
3 years ago
label-width="90px"
class="m-form">
4 years ago
<el-form-item label="所属组织"
style="display: block">
<span>{{ dataForm.agencyName }}</span>
</el-form-item>
<el-form-item label="所属网格"
prop="gridId"
style="display: block">
3 years ago
<el-select class="edit_item_width_1"
4 years ago
v-model="dataForm.gridId"
placeholder="请选择"
clearable>
<el-option v-for="item in gridList"
:key="item.gridId"
:label="item.gridName"
:value="item.gridId">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="小区名称"
prop="neighborHoodName"
style="display: block">
3 years ago
<el-input class="edit_item_width_1"
4 years ago
maxlength="50"
show-word-limit
placeholder="请输入小区名称"
v-model="dataForm.neighborHoodName">
</el-input>
</el-form-item>
<el-form-item label="小区编码"
3 years ago
prop="coding"
style="display: block">
3 years ago
<el-input class="edit_item_btn_width_1"
3 years ago
maxlength="50"
placeholder="请输入楼栋编码"
v-model="dataForm.coding">
</el-input>
3 years ago
<el-button type="text"
size="small"
3 years ago
class="div-table-button--blue edit-btn-1"
@click="handleCode">生成</el-button>
3 years ago
</el-form-item>
3 years ago
<div v-if="dataForm.qrcodeUrl"
style="display: flex;flex-direction: column;">
<img style="margin-left: 70px;width: 200px;"
:src="dataForm.qrcodeUrl">
<a style="margin-left: 80px"
:href="dataForm.qrcodeUrl"
target="_blank">下载</a>
</div>
4 years ago
<el-form-item label="关联物业"
prop="propertyId"
style="display: block">
3 years ago
<el-select class="edit_item_btn_width_1"
4 years ago
v-model="dataForm.propertyId"
placeholder="请选择"
4 years ago
filterable
4 years ago
clearable>
<el-option v-for="item in propertyList"
:key="item.propertyId"
:label="item.propertyName"
:value="item.propertyId">
</el-option>
</el-select>
3 years ago
<el-button type="text"
4 years ago
size="small"
3 years ago
class="div-table-button--blue edit-btn-1"
4 years ago
@click="handleAddProperty">添加物业</el-button>
</el-form-item>
<el-form-item label="实有楼栋"
3 years ago
style="display: block"
3 years ago
prop="realBuilding">
3 years ago
<el-input-number class="item_width_4"
v-model="dataForm.realBuilding"
:min="0"
:max="9999"
label="总户数"></el-input-number>
</el-form-item>
3 years ago
<div class="item-map">
<el-form-item label="地图位置"
prop="longitude"
style="display: block">
<div style="width: 500px">
<el-select v-model="searchValue"
filterable
style="width: 500px"
remote
:reserve-keyword="true"
placeholder="请输入关键词"
:remote-method="remoteMethod"
:loading="loading">
<el-option v-for="(item,index) in searchOptions"
@click.native="handleClickKey(index)"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<div id="app_community"
class="div_map"></div>
</div>
</el-form-item>
</div>
3 years ago
4 years ago
<el-form-item label="详细地址"
prop="address"
style="display: block">
3 years ago
<el-input class="edit_item_width_1"
4 years ago
maxlength="50"
show-word-limit
placeholder="请输入详细地址"
v-model="dataForm.address">
</el-input>
</el-form-item>
3 years ago
<div class="item-textarea">
<el-form-item label="备注"
prop="remark"
style="display: block">
<el-input class="edit_item_width_1"
type="textarea"
maxlength="500"
show-word-limit
resize="none"
:rows="3"
placeholder="请输入备注,不超过500字"
v-model="dataForm.remark"></el-input>
</el-form-item>
</div>
4 years ago
</el-form>
</div>
<div v-show="propertyFormShow">
<el-form :inline="false"
:model="propertyForm"
:rules="propertyRule"
3 years ago
class="m-form">
4 years ago
<el-form-item label="物业名称"
prop="name"
style="display: block">
3 years ago
<el-input class="edit_item_width_1"
maxlength="10"
4 years ago
placeholder="请输入小区名称"
v-model="propertyForm.name">
</el-input>
</el-form-item>
</el-form>
</div>
</div>
<div class="div_btn">
4 years ago
<el-button size="small"
3 years ago
class="diy-button--other"
4 years ago
@click="handleCancle"> </el-button>
<el-button size="small"
3 years ago
class="diy-button--blue"
4 years ago
:disabled="btnDisable"
4 years ago
@click="handleComfirm"> </el-button>
</div>
</div>
</template>
<script>
import { mapGetters } from 'vuex'
import { Loading } from 'element-ui' // 引入Loading服务
import { requestPost } from '@/js/dai/request'
3 years ago
import daiMap from "@/utils/dai-map";
4 years ago
var map
var search
var markers
var infoWindowList
let loading // 加载动画
export default {
data () {
return {
formType: 'add', //表单操作类型 add新增,edit编辑,detail详情
3 years ago
searchOptions: [],
searchValue: '',
resultList: [],
loading: false,
4 years ago
gridList: [],
propertyList: [],
4 years ago
btnDisable: false,
4 years ago
neighborHoodId: '', //小区ID
dataForm: {
neighborHoodName: '', // 小区名称【不超过50字】
agencyId: '', // 所属组织ID
agencyName: '',
gridId: '', //所属网格ID
propertyId: '', //关联物业
address: '', //详细地址
remark: '', //备注【最大500字】
location: '', //坐标位置
longitude: '', //经度
latitude: '', //纬度
realBuilding: 0,
coding: '',
sysCoding: ''
4 years ago
},
propertyFormShow: false,
propertyForm: {
name: ''
},
keyWords: '',
agencyObj: {}
}
},
components: {},
mounted () {
3 years ago
4 years ago
},
methods: {
3 years ago
async initForm (type, row, agencyObj) {
this.$refs.ref_form.resetFields();
this.agencyObj = agencyObj
let { latitude, longitude } = this.$store.state.user;
this.formType = type
if (row) {
this.dataForm = JSON.parse(JSON.stringify(row))
this.dataForm.neighborHoodId = this.dataForm.id
this.neighborHoodId = this.dataForm.neighborHoodId
4 years ago
3 years ago
} else {
this.dataForm.latitude = latitude
this.dataForm.longitude = longitude
}
if (!map) {
this.initMap(this.dataForm.latitude, this.dataForm.longitude);
} else {
map.setCenter(this.dataForm.latitude, this.dataForm.longitude);
map.setMarker(this.dataForm.latitude, this.dataForm.longitude);
}
await this.loadAgency()
await this.loadGrid()
await this.loadProperty()
4 years ago
},
3 years ago
// 地图初始化函数,本例取名为init,开发者可根据实际情况定义
initMap (latitude, longitude) {
4 years ago
3 years ago
map = new daiMap(
document.getElementById("app_community"),
{ latitude, longitude },
4 years ago
{
3 years ago
zoom: 16.2, // 设置地图缩放级别
pitch: 43.5, // 设置俯仰角
rotation: 45, // 设置地图旋转角度
4 years ago
}
3 years ago
);
// 监听地图平移结束
map.on("dragend", (e) => {
this.handleMoveCenter(e);
});
map.setCenter(latitude, longitude);
map.setMarker(latitude, longitude);
4 years ago
},
3 years ago
async handleMoveCenter () {
4 years ago
//修改地图中心点
3 years ago
const { lat, lng } = map.getCenter();
this.dataForm.latitude = lat;
this.dataForm.longitude = lng;
map.setMarker(lat, lng);
let { msg, data } = await map.getAddress(lat, lng);
if (msg == "success") {
this.dataForm.address = data.address
this.searchValue = data.address
this.searchOptions = []
}
4 years ago
},
3 years ago
async remoteMethod (query) {
4 years ago
3 years ago
if (query !== '') {
this.loading = true;
4 years ago
3 years ago
const { msg, data } = await map.searchNearby(query);
this.loading = false;
this.resultList = []
if (msg == "success" && data.resultList && data.resultList.length > 0) {
if (data.resultList && data.resultList.length > 0) {
this.resultList = data.resultList
this.searchOptions = this.resultList.map(item => {
return { value: `${item.hotPointID}`, label: `${item.address + item.name}` };
});
}
} else {
this.searchOptions = [
{
value: '0',
label: '未检索到结果'
}
]
}
4 years ago
} else {
3 years ago
this.searchOptions = [];
4 years ago
}
3 years ago
},
3 years ago
handleClickKey (index) {
let selPosition = this.resultList[index]
let lonlat = selPosition.lonlat.split(" ")
map.setCenter(lonlat[1], lonlat[0]);
map.setMarker(lonlat[1], lonlat[0]);
this.dataForm.latitude = lonlat[1];
this.dataForm.longitude = lonlat[0];
this.dataForm.address = selPosition.address + selPosition.name
4 years ago
},
3 years ago
async handleCode () {
if (!this.dataForm.gridId) return this.$message.error('请选择网格')
const { data, code, msg } = await requestPost(
"/gov/org/houseInformation/getNeighborHoodCoding/" + this.dataForm.gridId);
if (msg == "success" && code == 0) {
this.dataForm.coding = data.coding
this.dataForm.sysCoding = data.sysCoding
3 years ago
}
},
4 years ago
//加载组织
async loadAgency () {
const url = '/epmetuser/customerstaff/staffbasicinfo'
let params = {}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.dataForm.agencyId = data.agencyId
this.dataForm.agencyName = data.agencyName
} else {
this.$message.error(msg)
}
},
//加载网格
async loadGrid () {
const url = '/gov/org/grid/allgridsnopermission '
// const url = "https://epmet-dev.elinkservice.cn:7082/api/apimock-v2/95518686fa128a53f64c678906848062/gov/org/grid/allgrids"
let params = {
agencyId: this.dataForm.agencyId
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.gridList = data
} else {
this.$message.error(msg)
}
},
//加载物业
async loadProperty () {
const url = '/gov/org/propertymanagement/list'
// const url = "http://yapi.elinkservice.cn/mock/245/gov/org/propertymanagement/list"
let params = {}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.propertyList = data
} else {
this.$message.error(msg)
}
},
handleAddProperty () {
this.propertyForm.name = ''
this.propertyFormShow = true
},
async handleComfirm () {
4 years ago
4 years ago
if (this.propertyFormShow) {
4 years ago
this.addProperty()
4 years ago
} else {
4 years ago
this.btnDisable = true
setTimeout(() => {
this.btnDisable = false
}, 10000)
this.$refs['ref_form'].validate((valid, messageObj) => {
if (!valid) {
app.util.validateRule(messageObj)
4 years ago
this.btnDisable = false
} else {
this.addCommunity()
}
})
4 years ago
}
},
async addCommunity () {
4 years ago
let url = ''
if (this.formType === 'add') {
url = '/gov/org/neighborhood/neighborhoodadd'
// url = "http://yapi.elinkservice.cn/mock/245/gov/org/neighborhood/neighborhoodadd"
} else {
url = '/gov/org/neighborhood/neighborhoodupdate'
this.dataForm.neighborHoodId = this.neighborHoodId
}
const { data, code, msg } = await requestPost(url, this.dataForm)
if (code === 0) {
this.$message({
type: 'success',
message: '操作成功'
4 years ago
})
this.resetData()
this.$emit('dialogOk')
4 years ago
this.btnDisable = false
4 years ago
} else {
4 years ago
this.btnDisable = false
4 years ago
this.$message.error(msg)
}
4 years ago
},
async addProperty () {
if (!this.propertyForm.name || this.propertyForm.name === '') {
this.$message({
type: 'error',
message: '物业名称不能为空'
})
return false
}
4 years ago
const url = '/gov/org/propertymanagement/add'
// const url = "http://yapi.elinkservice.cn/mock/245/gov/org/propertymanagement/add"
let params = {
name: this.propertyForm.name
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.$message({
type: 'success',
4 years ago
message: '操作成功'
4 years ago
})
4 years ago
this.dataForm.propertyId = data.propertyId
4 years ago
this.propertyForm.name = ''
this.propertyFormShow = false
this.loadProperty()
} else {
this.$message.error(msg)
}
},
handleCancle () {
if (this.propertyFormShow) {
this.propertyForm.name = ''
this.propertyFormShow = false
} else {
this.resetData()
this.$emit('dialogCancle')
}
},
resetData () {
3 years ago
this.searchValue = ''
this.searchOptions = []
this.resultList = []
4 years ago
this.neighborHoodId = '' //小区ID
this.dataForm = {
neighborHoodName: '', // 小区名称【不超过50字】
agencyId: '', // 所属组织ID
agencyName: '',
gridId: '', //所属网格ID
propertyId: '', //关联物业
address: '', //详细地址
remark: '', //备注【最大500字】
location: '', //坐标位置
longitude: '', //经度
latitude: '', //纬度
realBuilding: 0,
coding: '',
sysCoding: ''
4 years ago
}
this.propertyFormShow = false
4 years ago
},
// 开启加载动画
startLoading () {
loading = Loading.service({
lock: true, // 是否锁定
text: '正在加载……', // 加载中需要显示的文字
background: 'rgba(0,0,0,.7)' // 背景颜色
})
},
// 结束加载动画
endLoading () {
// clearTimeout(timer);
if (loading) {
loading.close()
}
}
},
computed: {
dataRule () {
return {
neighborHoodName: [
{ required: true, message: '小区名称不能为空', trigger: 'blur' },
{
min: 1,
max: 50,
message: '小区名称长度在 1 到 50个字符',
trigger: 'blur'
}
],
agencyId: [
{ required: true, message: '所属组织不能为空', trigger: 'blur' }
],
gridId: [
{ required: true, message: '所属网格不能为空', trigger: 'blur' }
],
coding: [
{ required: true, message: '小区编码不能为空', trigger: 'blur' }
],
4 years ago
address: [
{ required: true, message: '详细地址不能为空', trigger: 'blur' }
],
longitude: [
{ required: true, message: '坐标不能为空', trigger: 'blur' }
]
}
},
propertyRule () {
name: [
{ required: true, message: '物业名称不能为空', trigger: 'blur' }
// { min: 1, max: 50, message: '小区名称长度在 1 到 50个字符', trigger: 'blur' }
]
}
},
props: {}
}
</script>
4 years ago
<style lang="scss" scoped >
@import "@/assets/scss/modules/visual/communityManageForm.scss";
3 years ago
@import "@/assets/scss/modules/management/edit-main.scss";
4 years ago
</style>
4 years ago
4 years ago