|
@@ -0,0 +1,366 @@
|
|
|
+<template>
|
|
|
+ <!-- 新增设备或编辑设备弹出框 -->
|
|
|
+ <el-dialog
|
|
|
+ :visible.sync="visible"
|
|
|
+ class="form">
|
|
|
+ <div slot="title" class="dialog-title">
|
|
|
+ {{ form.id? '编辑设备': '新增设备' }}
|
|
|
+ </div>
|
|
|
+ <el-form
|
|
|
+ :model="form"
|
|
|
+ :rules="formRule"
|
|
|
+ size="mini"
|
|
|
+ label-position="left"
|
|
|
+ label-width="135px"
|
|
|
+ ref="form"
|
|
|
+ inline>
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="注册时间:" prop="registerTime">
|
|
|
+ <el-input v-model="form.registerTime" disabled></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="设备编码:" prop="deviceCode">
|
|
|
+ <el-input v-model="form.deviceCode"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="省市县名:" prop="countyName">
|
|
|
+ <el-input v-model="form.countyName"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="省市县编码:" prop="countyCode">
|
|
|
+ <el-input v-model="form.countyCode"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="牧场名:" prop="farmName">
|
|
|
+ <!-- <el-input v-model="form.farmName"></el-input> -->
|
|
|
+ <el-select v-model="form.farmCode" style="width: 178px;">
|
|
|
+ <el-option
|
|
|
+ v-for="item in farmSelectedList"
|
|
|
+ :key="item.farmCode"
|
|
|
+ :label="item.farmName"
|
|
|
+ :value="item.farmCode">
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="栋舍:" prop="pigpenId">
|
|
|
+ <!-- <el-input v-model="form.pigpenId"></el-input> -->
|
|
|
+ <el-select
|
|
|
+ v-model="form.pigpenId"
|
|
|
+ ref="pigpen"
|
|
|
+ @focus="handleFocus('pigpen', 'farmCode')"
|
|
|
+ @blur="handleBlur"
|
|
|
+ style="width: 178px;">
|
|
|
+ <el-option
|
|
|
+ v-for="item in pigpenSelectedList"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.pigpenName"
|
|
|
+ :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="unitId">
|
|
|
+ <!-- <el-input v-model="form.pigpenId"></el-input> -->
|
|
|
+ <el-select
|
|
|
+ v-model="form.unitId"
|
|
|
+ ref="unit"
|
|
|
+ @focus="handleFocus('unit', 'pigpenId')"
|
|
|
+ @blur="handleBlur"
|
|
|
+ style="width: 178px;">
|
|
|
+ <el-option
|
|
|
+ v-for="item in unitSelectedList"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.pigpenName"
|
|
|
+ :value="item.id">
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="阶段:" prop="stage">
|
|
|
+ <el-select v-model="form.stage" style="width: 178px;">
|
|
|
+ <el-option
|
|
|
+ v-for="item in stageList"
|
|
|
+ :key="item.value"
|
|
|
+ :label="item.label"
|
|
|
+ :value="item.value">
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="上传服务器地址:" prop="serverIp">
|
|
|
+ <el-input v-model="form.serverIp"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="端口:" prop="port">
|
|
|
+ <el-input v-model="form.port"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-form>
|
|
|
+ <div slot="footer" class="dialog-footer">
|
|
|
+ <el-button size="mini" plain @click="visible = false">取 消</el-button>
|
|
|
+ <el-button size="mini" type="success" @click="onSubmit">确 定</el-button>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
+</template>
|
|
|
+<script>
|
|
|
+import {mapState} from 'vuex'
|
|
|
+export default {
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ visible: false,
|
|
|
+ form: {
|
|
|
+ id: 0,
|
|
|
+ registerTime: '',
|
|
|
+ deviceCode: '',
|
|
|
+ countyName: '',
|
|
|
+ countyCode: '',
|
|
|
+ farmCode: '',
|
|
|
+ stage: '',
|
|
|
+ pigpenId: '',
|
|
|
+ unitId: '',
|
|
|
+ serverIp: '',
|
|
|
+ port: ''
|
|
|
+ },
|
|
|
+ stageList: [ // 状态
|
|
|
+ {
|
|
|
+ value: 1,
|
|
|
+ label: '配怀'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 2,
|
|
|
+ label: '分娩'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 3,
|
|
|
+ label: '后备'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 4,
|
|
|
+ label: '空怀'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 5,
|
|
|
+ label: '公猪'
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ farmList: [ // 牧场List
|
|
|
+ ],
|
|
|
+ farmSelectedList: [ // 根据省市县确定的牧场List
|
|
|
+
|
|
|
+ ],
|
|
|
+ pigpenList: [ // 猪舍List
|
|
|
+
|
|
|
+ ],
|
|
|
+ pigpenSelectedList: [ // 根据牧场确定的猪舍List
|
|
|
+ ],
|
|
|
+ unitList: [ // 单元List
|
|
|
+ ],
|
|
|
+ unitSelectedList: [ // 根据猪舍确定的单元List
|
|
|
+ ],
|
|
|
+ formRule: {
|
|
|
+ deviceCode: [
|
|
|
+ { required: true, message: '设备编码不能为空', trigger: 'blur' }
|
|
|
+ ],
|
|
|
+ countyName: [],
|
|
|
+ countyCode: [],
|
|
|
+ farmName: [],
|
|
|
+ farmCode: [],
|
|
|
+ stage: [],
|
|
|
+ pigpenId: [],
|
|
|
+ serverIp: [
|
|
|
+ { required: true, message: '上传服务器地址不能为空', trigger: 'blur' }
|
|
|
+ ],
|
|
|
+ port: [
|
|
|
+ { required: true, message: '端口不能为空', trigger: 'blur' }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ msgFlag: false
|
|
|
+ }
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ ...mapState(['baseUrl'])
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ init (row) {
|
|
|
+ this.visible = true
|
|
|
+ this.form.registerTime = this.getDate(new Date())
|
|
|
+ if (row.id) { // 如果没有参数传入,默认传入鼠标点击事件
|
|
|
+ console.log(row);
|
|
|
+ for (const key in this.form) {
|
|
|
+ if (Object.hasOwnProperty.call(this.form, key)) {
|
|
|
+ this.form[key] = row[key]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.$http({
|
|
|
+ url: this.$http.adornUrl(`${this.baseUrl}/manager/basepigpen/listAll`),
|
|
|
+ method: 'get'
|
|
|
+ }).then(async({data}) => {
|
|
|
+ let farmResult = await this.$http({
|
|
|
+ url: this.$http.adornUrl(`${this.baseUrl}/management/basefarminfo/findAll`),
|
|
|
+ method: 'get'
|
|
|
+ })
|
|
|
+ this.farmList = farmResult.data.data
|
|
|
+ this.farmSelectedList = this.farmList
|
|
|
+ this.pigpenList = data.page
|
|
|
+ }).catch(() => {})
|
|
|
+ },
|
|
|
+ // 获取时间格式:2021-07-28
|
|
|
+ getDate (time) {
|
|
|
+ let fmt = 'yyyy-MM-dd'
|
|
|
+ var o = {
|
|
|
+ "M+" : time.getMonth()+1, //月份
|
|
|
+ "d+" : time.getDate(), //日
|
|
|
+ "h+" : time.getHours(), //小时
|
|
|
+ "m+" : time.getMinutes(), //分
|
|
|
+ "s+" : time.getSeconds(), //秒
|
|
|
+ "q+" : Math.floor((time.getMonth()+3)/3), //季度
|
|
|
+ "S" : time.getMilliseconds() //毫秒
|
|
|
+ };
|
|
|
+ if(/(y+)/.test(fmt)) {
|
|
|
+ fmt=fmt.replace(RegExp.$1, (time.getFullYear()+"").substr(4 - RegExp.$1.length))
|
|
|
+ }
|
|
|
+ for(var k in o) {
|
|
|
+ if(new RegExp("("+ k +")").test(fmt)){
|
|
|
+ fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)))
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return fmt;
|
|
|
+ },
|
|
|
+ // 选择框的选择顺序
|
|
|
+ handleFocus (ref, formItem) {
|
|
|
+ const msg = {
|
|
|
+ pigpen: '请先选择牧场',
|
|
|
+ unit: '请先选择栋舍'
|
|
|
+ }
|
|
|
+ if (!this.form[formItem]) {
|
|
|
+ this.$refs[ref].blur()
|
|
|
+ }
|
|
|
+ if (!this.form[formItem] && !this.msgFlag) {
|
|
|
+ this.$message.error(msg[ref])
|
|
|
+ this.msgFlag = true
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // FIXME: 我要吐了,为什么点击el-select会触发两次focus事件,没懂,反正就是行了
|
|
|
+ handleBlur () {
|
|
|
+ setTimeout(() => {
|
|
|
+ this.msgFlag = false
|
|
|
+ }, 50)
|
|
|
+ },
|
|
|
+ // 确定按钮
|
|
|
+ onSubmit () {
|
|
|
+ this.$refs['form'].validate((valid) => {
|
|
|
+ if (valid) {
|
|
|
+ this.$http({
|
|
|
+ url: this.$http.adornUrl(`${this.baseUrl}/manager/collectorregister/${this.form.id? 'update': 'save'}`),
|
|
|
+ method: 'post',
|
|
|
+ data: this.$http.adornData({
|
|
|
+ 'id': this.form.id || undefined,
|
|
|
+ 'registerTime': this.form.registerTime + ' 00:00:00',
|
|
|
+ 'deviceCode': this.form.deviceCode,
|
|
|
+ 'countyName': this.form.countyName,
|
|
|
+ 'countyCode': this.form.countyCode,
|
|
|
+ 'unitId': this.form.unitId || undefined,
|
|
|
+ 'farmCode': this.form.farmCode || undefined,
|
|
|
+ 'stage': this.form.stage || undefined,
|
|
|
+ 'pigpenId': parseInt(this.form.pigpenId) || undefined,
|
|
|
+ 'serverIp': this.form.serverIp,
|
|
|
+ 'port': this.form.port
|
|
|
+ })
|
|
|
+ }).then(({data}) => {
|
|
|
+ if (data && data.code === 0) {
|
|
|
+ this.$refs['form'].resetFields()
|
|
|
+ this.visible = false
|
|
|
+ this.$emit('refreshData')
|
|
|
+ this.$message({
|
|
|
+ message: '操作成功',
|
|
|
+ type: 'success',
|
|
|
+ duration: 1500,
|
|
|
+ // onClose: () => {
|
|
|
+ // this.visible = false
|
|
|
+ // this.$emit('refreshDataList')
|
|
|
+ // }
|
|
|
+ })
|
|
|
+ // this.resetForm()
|
|
|
+ this.visible = false
|
|
|
+ } else {
|
|
|
+ this.$message.error(data.msg)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+ // this.visible = false
|
|
|
+ }
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ /** 根据 farmCode 确定猪舍 */
|
|
|
+ 'form.farmCode': {
|
|
|
+ handler (newValue) {
|
|
|
+ this.form.pigpenId = ''
|
|
|
+ if (newValue) {
|
|
|
+ this.pigpenSelectedList = this.pigpenList.filter(item => item.farmCode === newValue)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /** 根据 pigpenId 确定单元 */
|
|
|
+ 'form.pigpenId': {
|
|
|
+ handler (newValue) {
|
|
|
+ this.form.unitId = ''
|
|
|
+ if (newValue) {
|
|
|
+ let pigpen = this.pigpenSelectedList.find(item => item.id === newValue)
|
|
|
+ this.unitSelectedList = pigpen.children
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|
|
|
+<style>
|
|
|
+ .form {
|
|
|
+ margin-top: 50px;
|
|
|
+ }
|
|
|
+ .form .el-dialog {
|
|
|
+ border-radius: 5px;
|
|
|
+ width: 45%;
|
|
|
+ }
|
|
|
+ .form .el-dialog__header {
|
|
|
+ padding: 0;
|
|
|
+ border-radius: 5px;
|
|
|
+ }
|
|
|
+ .dialog-title {
|
|
|
+ background-color: #f3f3f3;
|
|
|
+ padding: 15px;
|
|
|
+ font-weight: 700;
|
|
|
+ border-bottom: 1px solid #ddd;
|
|
|
+ }
|
|
|
+ .form .el-dialog__body {
|
|
|
+ padding: 20px 60px;
|
|
|
+ }
|
|
|
+ .form .el-dialog__footer {
|
|
|
+ border-top: 1px solid #ddd;
|
|
|
+ }
|
|
|
+ .form .dialog-footer {
|
|
|
+ padding-right: 50px;
|
|
|
+ padding-top: 10px;
|
|
|
+ }
|
|
|
+</style>
|