Newer
Older
ProductionSysFront / src / views / batchManager / createDevice.vue
wangxitong on 12 Apr 2023 13 KB first commit
<!--suppress ALL -->
<template>
  <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible" append-to-body :close-on-click-modal="false">
    <el-form ref="dataForm" :rules="rules" :model="taskForm" label-well-code="right" label-width="100px" >
      <el-row :gutter="20">
        <el-col :span="12">
          <el-form-item label="项目名称" prop="projectId">
            <el-select v-model="taskForm.projectId" disabled filterable placeholder="项目名称" clearable value="">
              <el-option
                v-for="item in projectList"
                :key="item.id"
                :label="item.projectName"
                :value="item.id"/>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="设备型号" prop="devmodeId">
            <el-select v-model="taskForm.devmodeId" disabled filterable placeholder="设备型号" clearable value="">
              <el-option
                v-for="item in modelList"
                :key="item.id"
                :label="item.productModel"
                :value="item.productModel"/>
            </el-select>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="20">
        <el-col :span="12" >
          <el-form-item label="设备类型" prop="devtypeId">
            <el-select v-model="taskForm.devtypeId" disabled filterable placeholder="设备类型" clearable value="" value-key="id" @change="changeModel($event)">
              <el-option
                v-for="item in deviceTypeList"
                :key="item.id"
                :label="item.productName"
                :value="item"/>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="设备数量" prop="devcount">
            <el-input v-model.trim="taskForm.devcount" disabled type="text" placeholder="必填">
            </el-input>
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>
    <el-form ref="dataForm" :model="taskForm" :rules="rules">
      <el-row class="table-title">
        <el-col :span="6"><div class="title-header"><i class="el-icon-menu"/>数据列表</div></el-col>
        <el-button class="edit_btn" size="small" @click="addlist">新增</el-button>
      </el-row>

      <el-table :data="taskForm.batches"  class="tableBox" border >
        <!--<el-table-column :index="indexMethod" v-if="!isZero()" align="center" type="index" label="批次号" width="120"/>-->
        <el-table-column v-if="!isZero()" align="center" label="批次号" width="100">
        <template scope="scope">
          <el-form-item :prop="'batches.' + scope.$index + '.batchNumber'" :rules="rules.batchNumber">
            {{scope.row.batchNumber}}
            <!--<el-input v-model.trim="scope.row.batchNumber"  type="text" placeholder="必填" oninput="value=value.replace(/^\.+|[^\d.]/g,'')" />-->
          </el-form-item>
        </template>
        </el-table-column>
        <el-table-column v-if="isZero()" align="center" label="批次号" width="100">
        <template scope="scope">
          <el-form-item :prop="'batches.' + scope.$index + '.batchNumber'" :rules="rules.batchNumber">
            0
          </el-form-item>
        </template>
        </el-table-column>
        <el-table-column label="数量" width="100" align="center">
          <template scope="scope">
            <el-form-item :prop="'batches.' + scope.$index + '.batchCount'" :rules="rules.batchCount">
              <el-input v-model.trim="scope.row.batchCount"  type="text" placeholder="必填" oninput="value=value.replace(/^\.+|[^\d.]/g,'')" />
            </el-form-item>
          </template>
        </el-table-column>
        <el-table-column label="关联合同" align="center" width="250">
          <template scope="scope">
            <el-form-item :prop="'batches.' + scope.$index + '.contractId'" :rules="rules.contractId">
              <el-select v-model="scope.row.contractId" filterable placeholder="选择合同" clearable value="">
                <el-option
                  v-for="item in contractList"
                  :key="item.id"
                  :label="item.contractNumber"
                  :value="item.id"
                   style="width: 250px"/>
              </el-select>
            </el-form-item>
          </template>
        </el-table-column>
        <el-table-column label="操作" align="center">
          <template slot-scope="scope">
            <el-button type="text" :disabled="checkDetail(scope.row)" @click="detailContract(scope.row.contractId)">合同详情</el-button>
            <el-button type="text" @click="deletelist(scope.$index)">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
    </el-form>
    <div slot="footer" class="dialog-footer">
      <el-button v-if="subBtn" type="primary" @click="saveData">提交</el-button>
      <el-button @click="cancel">取消</el-button>
    </div>
  </el-dialog>
</template>

<script>

import { updateBatch,getProjectList,getModelList,getContractList,getBatchNumber,getBatchList,getContractDetail } from '@/api/batch'
import { getDeviceList } from '@/api/factory'
export default {
  name: 'CreateDevice',
  data() {
    return {
      startnumber : 231,
      listitem:{},
      subBtn: true,
      dialogFormVisible: false, // 对话框是否显示
      dialogStatus: '', // 对话框类型:create,update
      deviceList: null, // 在产设备列表
      devTypeId: '',
      projectName: '',
      isstored: '',
      devTypeName: '',
      taskForm: {
        batches: [], // 列表数据
        taskId:'',
        devtypeId: '',
        projectId: '',
        devmodeId: '',
        devcount: '',
        isstored:''
      }, // 表单
      equipmentFile: null,
      textMap: {
        update: '生成设备',
        create: '',
        detail: ''
      }, // 表头显示标题
      deviceTypeList: null, // 设备类型列表
      contractList: null,
      rules: {
        devtypeId: [{ required: true, message: '设备类型不能为空', trigger: ['blur', 'change'] }],
        projectId: [{ required: true, message: '项目名称不能为空', trigger: ['blur', 'change'] }],
        devmodeId: [{ required: true, message: '设备型号不能为空', trigger: ['blur', 'change'] }],
        devcount: [{ required: true, message: '设备数量不能为空', trigger: ['blur', 'change'] }],
        batchNumber: [{ required: true, message: '批次号不能为空', trigger: [ 'blur','change'] }],
        batchCount: [{ required: true, message: '数量不能为空', trigger: [ 'blur','change'] }],
        contractId: [{ required: true, message: '关联合同不能为空', trigger: [ 'blur','change'] }],
      }, // 前端校验规则
      isEditMode: false,
      projectList:null,
      modelList:null
    }
  },
  watch: {
  },
  mounted() {
  },
  created() {
    this.subBtn = true
    this.fetchList()
  },
  methods: {
    isZero(){
      if(this.devTypeName === '电子标识器' || this.isstored === '1') {
        return true
      }else{
        return false
      }
    },
    // 获取项目名称
    fetchList() {
      getProjectList().then(response => {
        this.projectList = response.data
      })
      getDeviceList().then(response => {
        this.deviceTypeList = response.data
        console.log(this.deviceTypeList)
      })
      getContractList().then(response => {
        this.contractList = response.data
        console.log(this.contractList)
      })
    },
    // 初始化对话框
    initDialog: function(dialogStatus, dialogFormVisible, row = null) {
      this.subBtn= true
      this.dialogStatus = dialogStatus
      this.dialogFormVisible = dialogFormVisible
      if (dialogStatus === 'update') { // 如果是修改,将row中数据填写到输入框中
        this.taskForm = {
          taskId: row.taskId,
          devtypeId: row.devTypeName,
          projectId: row.projectId,
          devmodeId: row.devmodeId,
          devcount: row.devcount,
          isstored: row.isstored,
          batches:[]
        }
        this.isstored = row.isstored
        this.devTypeName = row.devTypeName
        this.devTypeId = row.devtypeId
        this.projectName = row.projectName
        getBatchList(row.devtypeId, row.taskId).then(response => {
          console.log(response)
          this.taskForm.batches = response.data
          console.log(this.taskForm.batches)
        })
        getBatchNumber(row.devtypeId).then(response => {
          this.startnumber = Number(response.data)
          console.log(this.startnumber)
        })
        this.isEditMode = true
      }
    },
    addlist(){
      this.listitem = {'batchNumber': this.startnumber.toString(),'batchCount': '','remaincount': '','contractId': ''}
      this.startnumber++
      this.taskForm.batches.push(this.listitem)
    },
    detailContract(id){
      getContractDetail(id).then(response => {
        console.log(response)
        let data = ['合同编号:'+response.data.contractNumber,'合同名称:'+ response.data.contractName,'合同内容:'+response.data.contractContent]
        let newDatas = [];
        const h = this.$createElement;
        for(let i in data){
          newDatas.push(h('p',null,data[i]));
        };
        this.$msgbox({
          title: '合同详情',
          message: h('div',null, newDatas),
          showCancelButton: false,
          confirmButtonText: '确定',
        }).then(action => {
        });
      })
    },
    checkDetail(row){
      if(row.contractId !== ''){
        return false
      }else{
        return true
      }
    },
    deletelist(e){
      var isNew = false
      console.log(e)
      if(!this.taskForm.batches[e].taskId)
      {
        isNew = true
        var num = Number(this.taskForm.batches[e].batchNumber)
        for(var i=e; i<this.taskForm.batches.length;i++) {
          if(Number(this.taskForm.batches[i].batchNumber) > num)
          {
            this.taskForm.batches[i].batchNumber = (Number(this.taskForm.batches[i].batchNumber)-1).toString()
          }
        }
      }
      if(isNew) {
        this.startnumber--
      }
      this.taskForm.batches.splice(e,1)
    },
    indexMethod(index) {
        return this.taskForm.batches[index].batchNumber
    },
    countChange(e,index){
      this.taskForm.batches[index].batchCount = e.target.value
    },

    // 保存数据
    saveData: function() {
      if (this.dialogStatus === 'update') {
        this.updateData()
      }
    },

    // 修改数据
    updateData: function() {
      // this.subBtn= false
      var sum = 0
      for(var i=0; i<this.taskForm.batches.length;i++){
        // this.taskForm.batches[i].id = this.startnumber + i
        sum += Number(this.taskForm.batches[i].batchCount)
      }
      this.$refs['dataForm'].validate((valid) => {
        if (valid) {
          if(sum.toString() === this.taskForm.devcount)
          {
            this.subBtn= false
            console.log(this.taskForm)
            var item = this.taskForm.devtypeId
            this.taskForm.devtypeId= this.devTypeId
            if(this.isZero()){
              for(var i=0;i<this.taskForm.batches.length;i++){
                this.taskForm.batches[i].batchNumber = '0'
                this.taskForm.batches[i].remaincount = this.taskForm.batches[i].batchCount
              }
            }else{
              for(var i=0;i<this.taskForm.batches.length;i++){
                this.taskForm.batches[i].remaincount = this.taskForm.batches[i].batchCount
              }
            }
            console.log(this.taskForm.batches)
            updateBatch(this.taskForm,this.taskForm.batches).then(response => {
              if (response.code === 200) {
                this.subBtn= true
                this.taskForm.devtypeId = item
                this.$message.success('修改成功')
                this.$emit('watchChild')
                this.dialogFormVisible = false
                this.$router.push({ path: '/devicelist/' + this.projectName })
              }else if(response.code == 400){
                this.$message.error(response.message)
              }
            })
          }
          else{
            this.subBtn= true
            this.$message({
              message: '各批次累加后与设备数量不符',
              type: 'warning'
            });
          }
        }
      })
    },

    changeModel(event)
    {
      var str = event.productName
      getModelList(str).then(response => {
        this.modelList = response.data
        this.taskForm.devmodeId = this.modelList[0].productModel
      })
    },
    cancel: function() {
      this.dialogFormVisible = false
      this.$emit('watchChild')
    }
  }
}
</script>

<style rel="stylesheet/scss" lang="scss" scoped>
  .tableBox{
    div{
      height: 18px !important;
      line-height: 18px !important;
    }
  }
  .el-select{
    width: 100%;
  }
  .el-date-editor{
    width: 100%;
  }
  .labeltext{
    vertical-align: -webkit-baseline-middle;
  }
  $tableTitleHeight:46px;
  .table-title{
    background-color:rgba(243, 243, 243, 1);
    height: $tableTitleHeight;
    .title-header{
      line-height:$tableTitleHeight;
      color: #606266;
      font-size: 15px;
      i{
        margin-left: 5px;
        margin-right: 5px;
      }
    }
  }
  .edit_btn{
    float:right;
    margin:7px 3px;//为了需要居中显示margin-top和bottom要用$tableTitleHeight减去按钮原高度除以2
  }
</style>