表单里,动态表格,表格的头部是数组,横着与纵向都是一个数组,这个表格所有的input框用的一个input,需要实现新增与回显的双向绑定用这一个input

270 阅读1分钟

功能描述:首先配置水质报告的增删改查的功能,这个功能是为了配置。

然后在水质检测这边就可以进行水质检测的实现了,先拿到刚才的配置。

这里的水质检测有两种新增:出厂水质与过程水质。

出厂的水质比较简单一点,

上代码

    <!-- 添加或修改出水出厂水水质报告记录对话框 -->
    <el-dialog :title="title" :visible.sync="open" width="50%" append-to-body>
      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-form-item label="检测时间" prop="reportTime">
          <el-date-picker clearable
            v-model="form.reportTime"
            type="datetime"
            :disabled="disabled"
            value-format="yyyy-MM-dd HH:mm:ss"
            placeholder="请选择检测时间"
            >
          </el-date-picker>
        </el-form-item>
        <el-table
        :data="waterList"
        :span-method="arraySpanMethod"
        border
        style="width: 100%">
        <el-table-column 
        type="index" 
        align="center"
        width="50">
      </el-table-column>
        <el-table-column
        prop="realName"
        label="检测区域"
        align="center"
        width="180">
      </el-table-column>
        <el-table-column
          prop="name"
          label="检测项目"
          align="center"
          width="180">
        </el-table-column>
        <el-table-column
          prop="value"
          width="150"
          align="center"
          label="检测结果">
          <template slot-scope="scope">
            <el-input :disabled="disabled" v-model="scope.row.value" placeholder="请输入检测结果" />
          </template>
        </el-table-column>
        <el-table-column
          prop="unit"
          align="center"
          label="单位">
        </el-table-column>
      </el-table>
      </el-form>
      <div slot="footer" class="dialog-footer" v-show="typeLog==2">
        <el-button type="primary" @click="submitForm">确 定</el-button>
        <el-button @click="cancel">取 消</el-button>
      </div>
    </el-dialog>

过程的水质复杂一点

先从配置的接口哪到配置的数据这一步就不好搞了。因为前端要回显,要双向绑定。

上接口返回的数据,目前配置了三层结构,也只实现了三层,

看接口返回的数据层级和前端的表格绑定的数据的关系

比如表头配置和第二列的配置都很好绑定,但是每个PH纵列的input值 不好绑定了,因为前端这里的表格,横向的是绑定一个数组,纵向绑定的也是一个数组,前端实际上就写了一个input 循环实现的横向与纵向。

这里的绑定 想了很长时间,因为不单单要新增,还需要回显功能的。

下面是接口返回的真实数据,就是前面的自己配置的。

废话不多说了,上代码。

  <!-- 添加或修改过程水水质报告记录对话框 -->
    <el-dialog :title="titles" :visible.sync="process" width="50%" append-to-body>
      <el-form ref="formWater" :model="formWater" label-width="80px">
        <el-row>
          <el-col :span="12">
            <el-form-item label="检测时间:" prop="reportTime">
              <el-date-picker clearable
                v-model="formWater.reportTime"
                type="datetime"
                value-format="yyyy-MM-dd HH:mm:ss"
                placeholder="请选择检测时间"
                :disabled="disabledProcess"
                >
              </el-date-picker>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="过程水:" >
              <el-select :disabled="disabledProcess"  value-key="wqrcId" v-model="processValue" placeholder="请选择" clearable @change="onChange">
                <el-option v-for="item in processList" :key="item.wqrcId" :label="item.name"
                  :value="item" />
              </el-select>
            </el-form-item>
          </el-col>
        </el-row>
        <el-table
        v-show="processValue"
        :data="processValue.children"
        border
        style="width: 100%"
        max-height="50%"
       >
      <el-table-column 
        type="index" 
        align="center"
        width="50">
      </el-table-column>
        <el-table-column
        prop="name"
        label="检测区域"
        align="center"
        width="180">
      </el-table-column>
      <el-table-column
          align="center"
          v-for="(item, index) in lastChildren[0]"
          :key="index" 
           width="170" 
          :prop="'value'+index" 
          :label="item.name +(item.unit ? '('+item.unit+')' :'')">
          <template slot-scope="scope">
            <el-input :disabled="disabledProcess" v-model="lastChildren[scope.$index][index].value" placeholder="请输入" />
          </template>
        </el-table-column>
      </el-table>
      </el-form>
      <div slot="footer" class="dialog-footer" v-show="typeLog==2">
   

主要是这个input绑定,这里的scope.$index 是拿到每一行的index。

最后的回显