使用背景:每个装备下都有多个批次,以下拉框展示,所以要求每个下拉框里数据不一样,且其中一个下拉框数据选择发生变化时,不能影响其他的!

引用组件代码:

<Select
    :itemId="item.id"
    :options="item.children"
    @initSomeData="initSomeData"
></Select>
import Select from "./component/el-select.vue";
components: { Select }

封装的组件代码如下:

<template>
  <div class="select">
    <el-select
      v-model="curBatchNumber"
      @change="changeBatchNumber"
      placeholder="请选择装备批号"
      size="medium"
      style="width: 85%"
      :title="curBatchNumber"
    >
      <el-option
        v-for="(item, index) in options"
        :key="index"
        :label="item.equipmentBatchNumber"
        :value="item.equipmentBatchNumber"
      ></el-option>
    </el-select>
  </div>
</template>

<script>
export default {
  data() {
    return {
      curBatchNumber: "", // 当前装备批号
      equipmentNum: "", // 装备数量
      storageTime: "", // 贮存时间
    };
  },
  props: ["options", "itemId"],
  mounted() {
    this.curBatchNumber = this.options[0].equipmentBatchNumber;
    this.dealData(this.curBatchNumber);
  },
  methods: {
    // 选择的装备型号发生变化时
    changeBatchNumber(val) {
      this.dealData(val);
    },
    dealData(val) {
      this.options.forEach((item) => {
        if (item.equipmentBatchNumber == val) {
          this.equipmentNum = item.equipmentNum;
          this.storageTime = item.storageTime;
        }
      });
      this.$emit(
        "initSomeData",
        this.equipmentNum,
        this.storageTime,
        this.itemId
      );
    },
  },
};
</script>

<style lang="scss" scoped>
.select ::v-deep .el-input--medium .el-input__inner {
  height: 32px;
  line-height: 32px;
}
</style>

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐