声脉桥梁云监控平台

index.vue 17KB

    <template> <div class="app-container"> <div class="filter-container" style="margin-bottom:20px"> <el-input style="width: 200px;" class="filter-item" placeholder="桥梁名称" v-model="listQuery.name"> </el-input> <el-input style="width: 200px;" class="filter-item" placeholder="桥梁编号" v-model="listQuery.code"> </el-input> <el-button v-waves class="filter-item" style="margin-left: 10px;" @click="handleFilter" type="primary" icon="el-icon-search">查找</el-button> <el-button v-waves class="filter-item" style="margin-left: 10px;" @click="handleCreate" type="primary" icon="el-icon-edit">添加桥梁</el-button> </div> <el-table :key='tableKey' :data="list" v-loading="listLoading" border fit highlight-current-row style="width: 100%;min-height:550px;"> <el-table-column width="150px" align="center" label="桥梁编号"> <template slot-scope="scope"> <span>{{scope.row.code}}</span> </template> </el-table-column> <el-table-column width="150px" align="center" label="桥梁简称"> <template slot-scope="scope"> <span>{{scope.row.shortName}}</span> </template> </el-table-column> <el-table-column min-width="150px" align="center" label="桥梁位置"> <template slot-scope="scope"> <span>{{citys[scope.row.addrCode]}}</span> </template> </el-table-column> <el-table-column min-width="150px" align="center" label="维护机构"> <template slot-scope="scope"> <span>{{scope.row.org}}</span> </template> </el-table-column> <el-table-column min-width="200px" align="center" label="备注信息"> <template slot-scope="scope"> <span>{{scope.row.remark}}</span> </template> </el-table-column> <el-table-column align="center" label="操作" width="230" class-name="small-padding fixed-width"> <template slot-scope="scope"> <el-button v-waves type="primary" size="mini" @click="handleUpdate(scope.row)">编辑</el-button> <el-button v-waves size="mini" type="danger" @click="handleModifyStatus(scope.row,'deleted')">删除 </el-button> </template> </el-table-column> </el-table> <el-dialog title="桥梁信息" ref="ruleForm" :visible.sync="dialogTableVisible" width="860px" @close='closed'> <el-form :model="ruleForm2" :rules="rules2" ref="ruleForm2" class="form-main" label-position='top' status-icon> <el-row :gutter="10"> <el-col :xs="16" :sm="16" :lg="16"> <el-row> <el-col :span="12"> <el-form-item label="桥梁编号" prop="code"> <el-input placeholder="请输入桥梁编号" v-model="ruleForm2.code"></el-input> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="桥梁简称" prop="shortName"> <el-input placeholder="请输入桥梁简称" v-model="ruleForm2.shortName"></el-input> </el-form-item> </el-col> <el-col :span="24"> <el-form-item label="桥梁全称" prop="name"> <el-input placeholder="请输入桥梁全称" v-model="ruleForm2.name"></el-input> </el-form-item> </el-col> <el-col :span="24"> <el-form-item label="桥梁位置信息" prop="addrCode"> <!-- <city @paren="toshow" :addrCode='ruleForm2.addrCode'></city> --> <CityPicker @paren="toshow" :addrCode='ruleForm2.addrCode'></CityPicker> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="地理位置信息" prop="location"> <el-input placeholder="请输入地理位置信息" v-model="ruleForm2.location"></el-input> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="桥梁开通日期" prop="serviceDay"> <el-date-picker value-format='yyyyMMdd' v-model="ruleForm2.serviceDay" type="date" placeholder="选择日期"> </el-date-picker> </el-form-item> </el-col> <el-col :span="24"> <el-form-item label="维护机构" prop="org"> <el-input placeholder="请输入维护机构" v-model="ruleForm2.org"></el-input> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="维护单位电话" prop="phone"> <el-input placeholder="请输入维护单位电话" v-model="ruleForm2.phone"></el-input> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="维护单位电邮" prop="email"> <el-input placeholder="请输入维护单位电邮" v-model="ruleForm2.email"></el-input> </el-form-item> </el-col> </el-row> </el-col> <el-col :xs="8" :sm="8" :lg="8"> <el-upload class="avatar-uploader" action="/ajax/bridge/upload" accept='image' :show-file-list="false" :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload"> <img v-if="imageUrl" :src="imageUrl" class="avatar"> <i v-else class="el-icon-plus avatar-uploader-icon"></i> </el-upload> <p style="width:100%;text-align:center;font-size:14px;color:#999;">上传桥梁图片<br> JPEG/JPG/PNG格式大小5M以内</p> </el-col> </el-row> <el-row> <el-col :span="24"> <el-form-item label="详细描述" class="el-to-block" prop="descp"> <el-input type="textarea" maxlength=500 rows=6 v-model="ruleForm2.descp"></el-input> </el-form-item> </el-col> <el-col :span="24"> <el-form-item label="备注" class="el-to-block" prop="remark"> <el-input type="textarea" maxlength=100 rows=3 v-model="ruleForm2.remark"></el-input> </el-form-item> </el-col> <el-col :span="24" class="el-btn-col"> <div class="el-btn-col-box"> <el-button v-waves type="primary" @click="submitForm('ruleForm2')">确认</el-button> <el-button v-waves type="primary" @click="resetForm('ruleForm2')">返回</el-button> </div> </el-col> </el-row> </el-form> </el-dialog> <div class="pagination-container" style="text-align:center;"> <el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="listQuery.pageNo" :page-size="listQuery.pageSize" layout="prev, pager, next, jumper" :total="total"> </el-pagination> </div> </div> </template> <script> import { addDevice, updateDevice, deleteDevice, pageQueryDevice, checkDeviceCode, checkBridgeShortName, checkBridgeName } from '@/api/bridge' import waves from '@/directive/waves' import CityPicker from '@/components/CityPicker' import queryDict from '@/utils/queryDict' export default { name: 'complexTable', directives: { waves }, data() { var code = (rule, value, callback) => { if (value === '') { callback(new Error('请输入桥梁编号')) } else { if (this.edit) { checkDeviceCode({ code: value, id: this.edit }).then(response => { if (response.data) { callback(new Error('桥梁编号已存在,请重新输入')) } else { callback() } }) } else { checkDeviceCode({ code: value }).then(response => { if (response.data) { callback(new Error('桥梁编号已存在,请重新输入')) } else { callback() } }) } } } var shortName = (rule, value, callback) => { if (value === '') { callback(new Error('请输入桥梁简称')) } else { if (this.edit) { checkBridgeShortName({ shortName: value, id: this.edit }).then(response => { if (response.data) { callback(new Error('桥梁简称已存在,请重新输入')) } else { callback() } }) } else { checkBridgeShortName({ shortName: value }).then(response => { if (response.data) { callback(new Error('桥梁简称已存在,请重新输入')) } else { callback() } }) } } } var name = (rule, value, callback) => { if (value === '') { callback(new Error('请输入桥梁全称')) } else { if (this.edit) { checkBridgeName({ name: value, id: this.edit }).then(response => { if (response.data) { callback(new Error('桥梁全称已存在,请重新输入')) } else { callback() } }) } else { checkBridgeName({ name: value }).then(response => { if (response.data) { callback(new Error('桥梁全称已存在,请重新输入')) } else { callback() } }) } } } return { citys: {}, edit: '', imageUrl: '', ruleForm2: { code: '', shortName: '', name: '', addrCode: '', serviceDay: '', location: '', descp: '', remark: '', img: '', org: '', phone: '', email: '' }, rules2: { code: [ { required: true, validator: code, trigger: 'blur' } ], shortName: [ { required: true, validator: shortName, trigger: 'blur' } ], name: [ { required: true, validator: name, trigger: 'blur' } ], location: [ { required: true, message: '请输入地理位置信息', trigger: 'blur' } ], serviceDay: [ { required: true, message: '请输入桥梁开通日期', trigger: 'blur' } ], org: [ { required: true, message: '请输入维护机构名称', trigger: 'blur' } ], phone: [ { required: true, message: '请输入维护机构电话', trigger: 'blur' } ], addrCode: [ { required: true, message: '请选择桥梁位置信息', trigger: 'blur' } ], email: [ { required: true, message: '请输入维护机构电邮', trigger: 'blur' } ] }, timeout: null, dialogTableVisible: false, tableKey: 0, list: null, total: null, listLoading: true, listQuery: { name: '', code: '', active: 1, pageSize: 10, pageNo: 1 } } }, filters: { typeFilter(type) { } }, created() { this.getDictoryData() }, components: { CityPicker }, methods: { getDictoryData() { const that = this queryDict.applyDict('XZQH', function(dictData) { dictData.map(item => { that.citys[item.code] = item.fullCaption }) that.getList() }) // 城市级联 }, submitForm(formName) { const that = this this.$refs[formName].validate((valid) => { if (valid) { if (this.ruleForm2.img === '') { this.ruleForm2.img = '/default-bridge.jpg' } if (!this.edit) { addDevice(this.ruleForm2).then(response => { if (response.success) { this.getList() setTimeout(function() { that.pop('已成功添加桥梁') }, 1000) this.resetForm('ruleForm2') this.dialogTableVisible = false } }).catch(error => { console.log(error) }) } else { const par = this.ruleForm2 par.id = this.edit updateDevice(par).then(response => { if (response.success) { setTimeout(function() { that.pop('已成功更新桥梁') }, 1000) this.resetForm('ruleForm2') this.getList() this.dialogTableVisible = false this.edit = '' this.ruleForm2 = { code: '', shortName: '', name: '', addrCode: '', serviceDay: '', location: '', descp: '', remark: '', img: '', org: '', phone: '', email: '' } } }) } } }) }, resetForm(formName) { this.dialogTableVisible = false this.$refs[formName].resetFields() this.imageUrl = '' this.edit = '' }, closed() { this.$refs['ruleForm2'].resetFields() this.edit = '' this.imageUrl = '' }, getList() { this.listLoading = true pageQueryDevice(this.listQuery).then(response => { if (response.success) { this.list = response.data.data this.total = response.data.total setTimeout(() => { this.listLoading = false }, 1.5 * 1000) } }) }, handleFilter() { this.listQuery.pageNo = 1 this.getList() }, handleSizeChange(val) { this.listQuery.pageSize = val this.getList() }, handleCurrentChange(val) { this.listQuery.pageNo = val this.getList() }, handleModifyStatus(row, status) { this.$confirm('确实要删除:桥梁' + row.code + '吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning', center: true }).then(() => { deleteDevice({ id: row.id }).then(response => { if (response.success) { this.getList() this.pop('已成功删除该桥梁') } }) }).catch(() => { }) }, pop($par) { this.$confirm($par, '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'success', showCancelButton: false, center: true }).then(() => { }).catch(() => { }) }, resetTemp(row) { this.ruleForm2 = { code: row.code, shortName: row.shortName, name: row.shortName, addrCode: row.addrCode, serviceDay: row.serviceDay, location: row.location, descp: row.descp, remark: row.remark, img: row.img, org: row.org, phone: row.phone, email: row.email } this.edit = row.id }, handleCreate() { this.dialogTableVisible = true }, handleUpdate(row) { const that = this setTimeout(function() { that.resetTemp(row) that.imageUrl = '/data/bridge' + row.img }, 500) this.dialogTableVisible = true }, handleSelect(item) { this.ruleForm2.deviceId = item.id }, handleAvatarSuccess(res, file) { this.imageUrl = URL.createObjectURL(file.raw) this.ruleForm2.img = res.data[0].uri }, beforeAvatarUpload(file) { const isJPG = file.type === 'image/jpeg' const isPNG = file.type === 'image/png' const isLt2M = file.size / 1024 / 1024 < 5 if (!isJPG && !isPNG) { this.$message.error('图片过大或格式不对请重新上传') } if (!isLt2M) { this.$message.error('图片过大或格式不对请重新上传') } return (!isJPG || !isPNG) && isLt2M }, toshow(value) { this.ruleForm2.addrCode = value } } } </script> <style rel="stylesheet/scss" lang="scss" scoped> .el-autocomplete{ display: block } .el-btn-col{ margin-top: 45px } .avatar-uploader{ border: 1px dashed #409EFF; border-radius: 6px; cursor: pointer; position: relative; overflow: hidden; } .avatar-uploader { font-size: 28px; color: #8c939d; width: 260px; height: 260px; line-height: 260px; text-align: center; } .avatar { width: 260px; height: 260px; display: block; } .el-autocomplete{ display: block } .el-btn-col{ margin-top: 45px } .el-form-item{ margin: 0px 10px } .el-select,.el-date-editor--date{ width: 100% } .el-col{ margin-bottom: 15px } .el-form--label-top .el-form-item__label{ line-height: 20px } </style>