<el-header height="62px" class="filter-container">
<el-row>
<el-col :span="21">
<el-form :inline="true" :model="formSearch" class="demo-form-inline">
<el-form-item>
<el-input v-model="formSearch.value" placeholder="请输入水道名称" clearable></el-input>
</el-form-item>
<el-form-item>
<el-select v-model="formSearch.type" filterable clearable placeholder="请选择水道类型">
<el-option v-for="item in dataType" :key="item.value" :label="item.text" :value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-select v-model="formSearch.official" placeholder="请选择水道性质" filterable clearable>
<el-option key="true" label="正式水道" value="true"></el-option>
<el-option key="false" label="测试水道" value="false"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="loadMain" size="small" icon="el-icon-search" round>搜索</el-button>
</el-form-item>
</el-form>
</el-col>
<el-col :span="3" style="text-align: right">
<el-button @click="handleAdd" v-show="visibleBtnAdd" type="success" size="small" icon="el-icon-plus" round>新增水道</el-button>
</el-col>
</el-row>
</el-header>
<el-main ref="layoutMain" class="table-container">
<el-table :data="dataMain" :height="heightMain" stripe highlight-current-row class="el-table-border">
<el-table-column prop="name" label="水道名称"></el-table-column>
<el-table-column prop="swzName" label="水位站"></el-table-column>
<el-table-column prop="typeName" label="水道类型" width="100"></el-table-column>
<el-table-column prop="isOfficial" label="水道性质" align="center" width="100" :formatter="formatOfficial"></el-table-column>
<el-table-column prop="startName" label="水道起点" width="100"></el-table-column>
<el-table-column prop="endName" label="水道讫点" width="100"></el-table-column>
<el-table-column label="里程" width="100">
<template slot-scope="scope">{{ Math.abs(scope.row.endMileage - scope.row.startMileage) + '公里' }}</template>
</el-table-column>
<el-table-column prop="remark" label="水道概况" width="200"></el-table-column>
<el-table-column label="操作" align="center" fixed="right" width="150">
<template slot-scope="scope">
<el-button @click="handleEdit(scope.row)" v-show="visibleBtnEdit" type="primary" size="mini" round plain>编辑</el-button>
<el-button @click="handleDelete(scope.row)" v-show="visibleBtnDelete" type="danger" size="mini" round plain>删除</el-button>
</template>
</el-table-column>
</el-table>
</el-main>
<el-footer>
<el-pagination
@size-change="handlePageSizeChange"
@current-change="handlePageCurrentChange"
:current-page="dataPage"
:page-sizes="[10, 20, 50, 100]"
:page-size="dataSize"
:total="dataTotal"
layout="total, sizes, prev, pager, next, jumper">
</el-pagination>
</el-footer>
<el-dialog
:title="dataRecordTitle[actionDialogRecord]"
:visible.sync="visibleDialogRecord"
:close-on-click-modal="false"
:before-close="handleClose" >
<el-form
class="large-space"
ref="formRecord"
:model="formRecord"
:rules="ruleRecord"
label-position="left"
label-width="90px">
<el-row :gutter="24">
<el-col :span="4"><strong>图片信息</strong></el-col>
<el-col :span="20">
<el-upload
:action="imageUpload"
:headers="headers"
:with-credentials="true"
list-type="picture-card"
:file-list="formRecord.waterInfomationPicDTO"
:on-success="handleAvatarSuccess"
:on-preview="handlePictureCardPreview"
:before-upload="beforeAvatarUpload"
:on-remove="handleRemove" style="float: left; margin-bottom: 10px">
<i class="el-icon-plus"></i>
</el-upload>
<el-dialog :visible.sync="dialogVisible" size="tiny">
<img width="100%" :src="dialogImageUrl" alt="">
</el-dialog>
</el-col>
</el-row>
<el-form-item label="水道名称" prop="name">
<el-input v-model="formRecord.name"></el-input>
</el-form-item>
<el-row :gutter="20">
<el-col :span="12"><el-form-item label="水道类型" prop="type">
<el-select v-model="formRecord.type" filterable placeholder="请选择水道类型" style="width: 100%">
<el-option v-for="item in dataType" :key="item.value" :label="item.text" :value="item.value">
</el-option>
</el-select>
</el-form-item></el-col>
<el-col :span="12"><el-form-item label="水道性质" prop="official">
<el-switch
v-model="formRecord.official"
:disabled.sync="disabledSelOfficial"
active-text="正式水道"
inactive-text="测试水道"
></el-switch>
</el-form-item></el-col>
</el-row>
<!-- <el-form-item label="位置" prop="waterway">
<map-box v-loading="loadingWaterway" @mapReady="handleMapReady" class="map-box"></map-box>
</el-form-item> -->
<el-row :gutter="20">
<el-col :span="12"><el-form-item label="水道起点" prop="start">
<el-select ref="selStart" v-model="formRecord.start" filterable placeholder="请选择水道起点" style="width: 100%">
<el-option v-for="item in dataNode" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item></el-col>
<el-col :span="12"><el-form-item label="水道讫点" prop="end">
<el-select ref="selEnd" v-model="formRecord.end" filterable placeholder="请选择水道讫点" style="width: 100%">
<el-option v-for="item in dataNode" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item></el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12"><el-form-item label="水位站" prop="swzId">
<el-select ref="selStation" v-model="formRecord.swzId" filterable placeholder="请选择关联水位站" style="width: 100%">
<el-option v-for="item in dataWaterStation" :key="item[0]" :label="item[1]" :value="item[0]">
</el-option>
</el-select>
</el-form-item></el-col>
</el-row>
<el-form-item label="水道概况" prop="remark">
<el-input type="textarea" v-model="formRecord.remark"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel">取消</el-button>
<el-button @click="handleSave" type="primary">保存</el-button>
</div>
</el-dialog>
.map-box {
height: 200px;
overflow: auto;
border: 1px solid #ebeef5;
}
import $ from 'jquery'
import waves from '@/directive/waves/index.js'
import MapBox from '@/components/mapBox.vue'
import { addGraphicsLayer, RAddListGraphic, RegClick } from '@/filters/RMapUitl.js'
import { queryWaterwayList, queryWaterwayPointList, waterInfomationList } from '@/api/base/waterway'
import { debounce, getTableHeight } from '@/utils'
import { queryNodeList } from '@/api/base/node'
import {
queryChannelTypeList,
queryChannelFullList,
queryChannelAdd,
queryChannelEdit,
queryChannelDelete
} from '@/api/base/channel'
import {
fetchSelectData,
getCoordinate,
addWaterStation,
getWaterStation,
updateWaterStation,
getUpload,
deletePicByid,
fetchCjjmDetail
} from '@/api/water/waterStation.js'
import {getToken} from '@/utils/auth' // 验权
export default {
name: 'channel_page',
directives: {
waves
},
components: {
MapBox
},
data() {
return {
visibleBtnAdd: true,
visibleBtnEdit: true,
visibleBtnDelete: true,
formSearch: {
type: undefined,
value: '',
official: undefined
},
formRecord: {
id: null,
name: '',
type: null,
official: false,
waterway: null,
startId: null,
endId: null,
start: null,
end: null,
swzId: null,
remark: '',
waterInfomationPicDTO: []
},
imageUpload: getUpload(),
headers: {'X-Token': getToken()},
heightMain: getTableHeight(10),
dataWaterway: [],
dataWaterStation: [],
dataType: [],
dataNode: [],
dataMain: [],
dataTotal: 0,
dataPage: 1,
dataSize: 10,
loadingData: false,
loadingWaterway: false,
visibleDialogRecord: false,
disabledSelOfficial: false,
actionDialogRecord: '',
fullscreenLoading: false,
dialogVisible: false,
dialogImageUrl: ''
}
},
computed: {
ruleRecord: () => {
return {
name: [
{ required: true, message: '请输入水道名称', trigger: 'blur' },
{ max: 30, message: '长度不得超过30个字符', trigger: 'blur' }
],
type: [
{ required: true, message: '请选择水道类型', trigger: 'blur' }
],
waterway: [
{ required: true, message: '请选择水道位置', trigger: 'blur' }
],
start: [
{ required: true, message: '请选择水道起点', trigger: 'blur' }
],
end: [
{ required: true, message: '请选择水道讫点', trigger: 'blur' }
],
swzId: [
{ required: true, message: '请选择水位站', trigger: 'blur' }
],
remark: [
{ max: 100, message: '长度不得超过100个字符', trigger: 'blur' }
]
}
},
dataRecordTitle: () => {
return {
add: '新增水道',
edit: '编辑水道'
}
}
},
beforeDestroy() {
window.removeEventListener('resize', this.__resizeHanlder)
},
mounted() {
this.__resizeHanlder = debounce(() => {
this.heightMain = getTableHeight(10)
}, 100)
window.addEventListener('resize', this.__resizeHanlder)
this.loadMain()
queryChannelTypeList(null, result => {
this.dataType = result
})
this.dataWaterway = []
queryWaterwayList(null, result => {
if (result) {
for (const i in result) {
const record = result[i]
queryWaterwayPointList({
'waterway': record.id
}, ((me, polyline) => {
return result => {
if (result) {
for (const i in result) {
const record = result[i]
if (polyline.geometry.length > 0) {
polyline.geometry += '#'
}
polyline.geometry += record.long + ',' + record.lat
}
}
me.dataWaterway.push(polyline)
}
})(this, {
'id': record.id,
'xtype': 'polyline',
'style': {
'stype': 'lineSymbol'
},
'geometry': ''
}))
}
}
}),
// 新建水道->水位站选项数据获取
waterInfomationList(null, result => {
if (result) {
this.dataWaterStation = result
}
})
},
methods: {
// 上传照片之前判断是否符合格式要求
beforeAvatarUpload(file) {
// 照片格式
const picArr = ['image/jpeg', 'image/JPEG', 'image/png', 'image/PNG']
// 照片大小
const isLt2M = file.size / 1024 / 1024 < 2
// 一次上传照片数量
const maxLength = this.formRecord.waterInfomationPicDTO.length < 5
if (picArr.indexOf(file.type) < 0) {
this.$message.error('上传图片只能是 JPG 或者 PNG 格式!')
return false
}
if (!maxLength) {
this.$message.error('图片最多只能上传五张!')
return false
}
if (!isLt2M) {
this.$message.error('上传图片大小不能超过 2MB!')
return false
}
this.imgLoading = true
},
// 上传照片成功
handleAvatarSuccess(res) {
if (res.status) {
const urlObj = {}
urlObj.url = res.imageUrl
this.formRecord.waterInfomationPicDTO.push(urlObj)
this.imgLoading = false
}
},
// 删除照片
handleRemove(file, fileList) {
deletePicByid(file.id).then(() => {
})
this.formRecord.waterInfomationPicDTO = fileList
},
// 放大图片
handlePictureCardPreview(file) {
this.dialogImageUrl = file.url
this.dialogVisible = true
},
beforeClose() {
this.$refs.formRecord.resetFields()
this.actionDialogRecord = ''
this.disabledSelOfficial = false
this.formRecord.id = null
this.formRecord.name = ''
this.formRecord.type = null
this.formRecord.official = false
this.formRecord.waterway = null
this.formRecord.startId = null
this.formRecord.endId = null
this.formRecord.swzId = null
this.formRecord.remark = ''
},
resetSearch() {
this.formSearch.type = undefined
this.formSearch.value = ''
this.formSearch.official = undefined
this.dataPage = 1
},
loadNode() {
debugger
const param = {}
if (this.formRecord.waterway !== null) {
param.waterway = this.formRecord.waterway
}
queryNodeList(param, result => {
this.dataNode = result
}, null, () => {
if (this.formRecord.start) {
this.formRecord.startId = this.formRecord.start
}
if (this.formRecord.end) {
this.formRecord.endId = this.formRecord.end
}
this.formRecord.start = null
this.formRecord.end = null
for (const i in this.dataNode) {
const node = this.dataNode[i]
if (this.formRecord.startId && node.id === this.formRecord.startId) {
this.formRecord.start = node.id
}
if (this.formRecord.endId && node.id === this.formRecord.endId) {
this.formRecord.end = node.id
}
}
})
},
loadMain() {
this.loadingData = true
const param = {}
if (this.formSearch.type) {
param.type = this.formSearch.type
}
if (this.formSearch.value) {
param.value = this.formSearch.value
}
if (this.formSearch.official) {
param.isOfficial = this.formSearch.official
}
queryChannelFullList(param, this.dataPage, this.dataSize, (data, total) => {
if (data) {
this.dataMain = data
} else {
this.dataMain = []
}
if (total) {
this.dataTotal = total
} else {
this.dataTotal = this.dataMain.length
}
}, null, () => {
this.loadingData = false
})
},
formatOfficial(row, column) {
const value = row[column.property]
if (value === undefined || value === null) {
return ''
} else {
if (value === true || value === 'true' || value === '1') {
return '正式水道'
} else {
return '测试水道'
}
}
},
handleMapReady() {
this.loadingWaterway = true
addGraphicsLayer({
'type': 'GraphicsLayer',
'layerid': 'WaterwayLayer'
}, (me => {
return layer => {
RAddListGraphic(layer, me.dataWaterway)
RegClick(layer, me.handleMapLineClick)
}
})(this))
this.loadingWaterway = false
},
handleMapLineClick(evt) {
this.formRecord.waterway = evt.graphic.attributes.id
this.loadNode()
},
handleAdd() {
this.loadNode()
this.actionDialogRecord = 'add'
this.visibleDialogRecord = true
},
handleEdit(r) {
this.disabledSelOfficial = true
this.formRecord.id = r.id
this.formRecord.name = r.name
this.formRecord.type = r.typeId
this.formRecord.official = r.isOfficial
//this.formRecord.waterway = r.waterwayId
this.formRecord.startId = r.startId
this.formRecord.endId = r.endId
this.formRecord.remark = r.remark
this.loadNode()
this.actionDialogRecord = 'edit'
this.visibleDialogRecord = true
},
handleDelete(r) {
this.$confirm('确认删除?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.fullscreenLoading = true
queryChannelDelete({
'id': r.id
}, () => {
this.resetSearch()
this.loadMain()
this.$notify({
type: 'success',
title: '成功',
message: '操作成功!'
})
}, null, () => {
this.fullscreenLoading = false
})
})
},
handlePageSizeChange(v) {
this.dataSize = v
this.loadMain()
},
handlePageCurrentChange(v) {
this.dataPage = v
this.loadMain()
},
handleSave() {
this.$refs.formRecord.validate((valid) => {
if (valid) {
const param = {
'name': this.formRecord.name,
'type': this.formRecord.type,
'waterway': this.formRecord.waterway,
'start': this.formRecord.start,
'end': this.formRecord.end,
'swzId': this.formRecord.swzId,
'sdzp': this.formRecord.waterInfomationPicDTO
}
if (this.formRecord.remark) {
param['remark'] = this.formRecord.remark
}
const done = () => {
this.handleCancel()
this.resetSearch()
this.loadMain()
this.$notify({
type: 'success',
title: '成功',
message: '操作成功!'
})
}
const always = () => {
this.fullscreenLoading = false
}
this.fullscreenLoading = true
switch (this.actionDialogRecord) {
case 'add':
param['isOfficial'] = this.formRecord.official
queryChannelAdd(param, done, null, always)
break
case 'edit':
param['id'] = this.formRecord.id
param['waterway'] = 0
queryChannelEdit(param, done, null, always)
break
default:
always()
}
} else {
return false
}
})
},
handleCancel() {
this.beforeClose()
this.visibleDialogRecord = false
},
handleClose(done) {
this.beforeClose()
done()
}
}
}