Newer
Older
baseResourceFront / src / views / carinfo / editCarInfo.vue
zhangyingjie on 22 Mar 2021 13 KB 原车辆子系统代码提交
<template>
  <el-dialog :close-on-click-modal="false" :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible" append-to-body >
    <el-form ref="dataForm" :rules="rules" :model="carInfoForm" label-position="right" label-width="120px">
      <el-row :gutter="20">
        <el-col :span="12">
          <el-form-item label="车牌号">
            <el-input v-model.trim="carInfoForm.carCode" :disabled="dialogStatus=='detail'" :placeholder="dialogStatus=='detail'?'':'车牌号'" type="text"/>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="车辆类型" prop="carType">
            <el-select v-model="carInfoForm.carType" :disabled="dialogStatus=='detail'" :placeholder="dialogStatus=='detail'?'':'必填'" filterable clearable value="">
              <el-option
                v-for="item in cartypelist"
                :key="item.value"
                :label="item.name"
                :value="item.value"/>
            </el-select>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="20">
        <el-col :span="12">
          <el-form-item label="车辆描述" prop="description">
            <el-input v-model.trim="carInfoForm.description" :disabled="dialogStatus=='detail'" :placeholder="dialogStatus=='detail'?'':'必填'" type="text"/>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="使用单位" prop="deptId">
            <dept-select v-model="carInfoForm.deptId" :disabled="dialogStatus=='detail'" :dept-show="deptShow" :placeholder="dialogStatus=='detail'?'':'必填'" style="width: 100%" clearable value=""/>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="20">
        <el-col :span="12">
          <el-form-item label="品牌型号">
            <el-input v-model.trim="carInfoForm.brandModel" :disabled="dialogStatus=='detail'" :placeholder="dialogStatus=='detail'?'':'品牌型号'" type="text"/>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="准乘人数" >
            <el-input v-model.trim="carInfoForm.peopleNumber" :disabled="dialogStatus=='detail'" :placeholder="dialogStatus=='detail'?'':'准乘人数'" type="text" oninput="value=value.replace(/^\.+|[^\d.]/g,'')"/>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="20">
        <el-col :span="12">
          <el-form-item label="使用人">
            <el-input v-model.trim="carInfoForm.userPerson" :disabled="dialogStatus=='detail'" :placeholder="dialogStatus=='detail'?'':'使用人'" type="text" />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="使用人电话" prop="userPhone">
            <el-input v-model.trim="carInfoForm.userPhone" :disabled="dialogStatus=='detail'" :placeholder="dialogStatus=='detail'?'':'使用人电话'" type="text"/>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="20">
        <el-col :span="12">
          <el-form-item label="责任人">
            <el-input v-model.trim="carInfoForm.chargePerson" :disabled="dialogStatus=='detail'" :placeholder="dialogStatus=='detail'?'':'责任人'" type="text" />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="责任人电话" prop="chargePhone">
            <el-input v-model.trim="carInfoForm.chargePhone" :disabled="dialogStatus=='detail'" :placeholder="dialogStatus=='detail'?'':'责任人电话'" type="text"/>
          </el-form-item>
        </el-col>
      </el-row>
      <!--<el-row :gutter="20">-->
      <!--<el-col :span="12">-->
      <!--<el-form-item label="发动机号">-->
      <!--<el-input v-model.trim="carInfoForm.engine" :disabled="dialogStatus=='detail'" :placeholder="dialogStatus=='detail'?'':'发动机号'" type="text" />-->
      <!--</el-form-item>-->
      <!--</el-col>-->
      <!--<el-col :span="12">-->
      <!--<el-form-item label="车载摄像头编号">-->
      <!--<el-input v-model.trim="carInfoForm.camera" :disabled="dialogStatus=='detail'" :placeholder="dialogStatus=='detail'?'':'车载摄像头编号'" type="text" />-->
      <!--</el-form-item>-->
      <!--</el-col>-->
      <!--</el-row>-->
      <el-row :gutter="20">
        <el-col :span="12">
          <el-form-item label="购入日期">
            <el-date-picker
              :placeholder="dialogStatus=='detail'?'':'购入日期'"
              v-model="carInfoForm.purchaseDate"
              :disabled="dialogStatus=='detail'"
              style="width: 100%"
              type="date"
              value-format="yyyy-MM-dd"/>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="登记日期">
            <el-date-picker
              v-model="carInfoForm.registerDate"
              :placeholder="dialogStatus=='detail'?'': '登记日期'"
              :disabled="dialogStatus=='detail'"
              style="width: 100%"
              type="date"
              value-format="yyyy-MM-dd"/>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="20">
        <el-col :span="24">
          <el-form-item label="备注">
            <el-input v-model.trim="carInfoForm.remarks" :disabled="dialogStatus=='detail'" :placeholder="dialogStatus=='detail'?'': '备注'" type="textarea" />
          </el-form-item>
        </el-col>
      </el-row>
      <el-row class="table-title">
        <el-col :span="20">
          <div class="title-header">
            <i class="el-icon-menu" />车辆GPS定位模块信息
          </div>
        </el-col>
      </el-row>
      <el-row :gutter="20" style="margin-top: 15px">
        <el-col :span="12">
          <el-form-item label="IMEI">
            <el-select v-model="carInfoForm.imei" :disabled="dialogStatus=='detail'" :placeholder="dialogStatus=='detail'?'':'IMEI'" filterable clearable value="" @change="changeiot">
              <el-option
                v-for="item in imeilist"
                :key="item.imei"
                :label="item.imei"
                :value="item.imei"/>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="物联网卡号">
            <el-input v-model.trim="carInfoForm.iot" :placeholder="dialogStatus=='detail'?'':'物联网卡号'" disabled type="text"/>
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>
    <div v-if="dialogStatus !== 'detail'" slot="footer" class="dialog-footer">
      <el-button type="primary" style="width: 100px;font-size: 16px;" @click="saveData">保 存</el-button>
      <el-button style="width: 100px;font-size: 16px" @click="cancel">取 消</el-button>
    </div>
  </el-dialog>
</template>

<script>
import { getCarInfo, addCarInfo, updateCarInfo } from '@/api/carInfo'
import DeptSelect from '@/components/DeptSelect'
import { getDictCode } from '@/api/dict'
import { listNoBind } from '@/api/device'
export default {
  name: 'EditCarInfo',
  components: { DeptSelect },
  data() {
    return {
      deptShow: true,
      dialogFormVisible: false, // 对话框是否显示
      dialogStatus: '', // 对话框类型:create,update
      cartypelist: [],
      imeilist: [],
      carInfoForm: {
        id: '',
        carCode: '',
        carType: '',
        description: '',
        deptId: '',
        brandModel: '',
        peopleNumber: '',
        userPerson: '',
        userPhone: '',
        chargePerson: '',
        chargePhone: '',
        engine: '',
        camera: '',
        purchaseDate: '',
        registerDate: '',
        remarks: '',
        imei: '',
        iot: '',
        deviceId: ''
      }, // 表单
      textMap: {
        update: '编辑车辆信息',
        create: '新增车辆信息',
        detail: '车辆信息详情'
      }, // 表头显示标题
      rules: {
        description: [{ required: true, message: '车辆描述不能为空', trigger: ['blur', 'change'] }],
        carType: [{ required: true, message: '车辆类型必选', trigger: ['blur', 'change'] }],
        deptId: [{ required: true, message: '使用单位必选', trigger: ['blur', 'change'] }],
        userPhone: [{
          required: false,
          pattern: /^1[34578]\d{9}$/, // 可以写正则表达式
          message: '请输入正确的手机号',
          trigger: ['blur', 'change'] }],
        chargePhone: [{
          required: false,
          pattern: /^1[34578]\d{9}$/, // 可以写正则表达式
          message: '请输入正确的手机号',
          trigger: ['blur', 'change'] }]
      } // 前端校验规则
    }
  },
  methods: {
    // 初始化对话框
    initDialog: function(dialogStatus, dialogFormVisible, row = null) {
      this.dialogStatus = dialogStatus
      this.dialogFormVisible = dialogFormVisible
      getDictCode('carType').then(response => {
        this.cartypelist = response.data
      })
      if (dialogStatus === 'create') { // 如果是新增,清除验证
        this.resetForm()
        listNoBind(null).then(response => {
          this.imeilist = response.data
        })
        this.$nextTick(() => {
          this.$refs['dataForm'].clearValidate()
        })
      } else if (dialogStatus === 'update' || dialogStatus === 'detail') { // 如果是修改,将row中数据填写到输入框中
        listNoBind(row.id).then(response => {
          this.imeilist = response.data
          console.log(this.imeilist)
        })
        getCarInfo(row.id).then(response => {
          console.log(response.data)
          this.carInfoForm = {
            id: response.data.id,
            carCode: response.data.carCode,
            carType: response.data.carType,
            description: response.data.description,
            deptId: response.data.deptId,
            brandModel: response.data.brandModel,
            peopleNumber: response.data.peopleNumber,
            userPerson: response.data.userPerson,
            userPhone: response.data.userPhone,
            chargePerson: response.data.chargePerson,
            chargePhone: response.data.chargePhone,
            engine: response.data.engine,
            camera: response.data.camera,
            purchaseDate: response.data.purchaseDate,
            registerDate: response.data.registerDate,
            remarks: response.data.remarks,
            imei: response.data.imei,
            iot: response.data.iot,
            deviceId: response.data.deviceId
          }
        })
      }
    },
    // 重置表单
    resetForm() {
      this.carInfoForm = {
        id: '',
        carCode: '',
        carType: '',
        description: '',
        deptId: '',
        brandModel: '',
        peopleNumber: '',
        userPerson: '',
        userPhone: '',
        chargePerson: '',
        chargePhone: '',
        engine: '',
        camera: '',
        purchaseDate: '',
        registerDate: '',
        remarks: '',
        deviceId: '',
        imei: '',
        iot: ''
      }
    },
    // 保存数据
    saveData: function() {
      if (this.dialogStatus === 'update') {
        this.updateData()
      } else if (this.dialogStatus === 'create') {
        this.createData()
      }
    },
    // 新增数据
    createData: function() {
      this.$refs['dataForm'].validate((valid) => {
        console.log(this.carInfoForm)
        if (valid) {
          addCarInfo(this.carInfoForm).then(response => {
            if (response.code === 200) {
              this.$confirm('新增成功,是否继续新增?', '提示', {
                confirmButtonText: '是',
                cancelButtonText: '否',
                type: 'info'
              }).then(() => {
                this.resetForm()
                this.$nextTick(() => {
                  this.$refs['dataForm'].clearValidate()
                })
              }).catch(() => {
                this.$emit('watchChild')
                this.dialogFormVisible = false
              })
            }
          })
        }
      })
    },
    // 修改数据
    updateData: function() {
      this.$refs['dataForm'].validate((valid) => {
        if (valid) {
          console.log(this.carInfoForm)
          updateCarInfo(this.carInfoForm).then(response => {
            if (response.code === 200) {
              this.$message.success('修改成功')
              this.$emit('watchChild')
              this.dialogFormVisible = false
            }
          })
        }
      })
    },
    cancel: function() {
      this.dialogFormVisible = false
      this.$emit('watchChild')
    },
    changeiot(val) {
      for (var i = 0; i < this.imeilist.length; i++) {
        if (val === this.imeilist[i].imei) {
          this.carInfoForm.iot = this.imeilist[i].iot
          this.carInfoForm.deviceId = this.imeilist[i].id
        }
      }
    }
  }
}
</script>

<style rel="stylesheet/scss" lang="scss" scoped>
  $tableTitleHeight: 40px;
  .el-form-item {
    margin-bottom: 15px;
  }
  .el-dialog{
    width:700px;
  }
  .el-select{
    width: 100%;
  }
  .table-title {
    background-color: rgba(243, 243, 243, 1);
    height: $tableTitleHeight;
    .title-header {
      line-height: $tableTitleHeight;
      color: #606266;
      font-size: 14px;
      font-weight: bold;
      i {
        margin-left: 5px;
        margin-right: 5px;
      }
    }
  }
</style>