欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

vue 之后台 表单等父子表单的联动

程序员文章站 2024-01-03 13:54:34
...

vue 之后台 表单等父子表单的联动

vue 之后台 表单等父子表单的联动

  • 需求:就是针对业务品种勾选的时候,可以影响子业务品种,父业务品种有着8种,而着8种父业务下,对应的子业务有着10几种,那么只有勾选父业务的时候,才显示对应的子业务!
  • 需求2:就是父业务点击 X 的那个清除按钮的时候,需要清除掉自身的值,需要清除掉子业务选中的值
  • 需求3:点击子业务点击 X 的那个清除按钮的时候,需要清除掉自身的值
  • 需求4:父子业务改变的时候,下面还有数十种业务的改变,前提是需要先把选中的值清空
  • 针对业务品种 这个东西,封装为一个组件的时候,那么由于是 v-model="value" 数据双向绑定的,需要再封装的组件内部清空,于是这就需要借助 vuex + props 的方式 去清除掉当前组件的值了!

组件下拉菜单

<!-- 下拉菜单 -->
<template>
  <div class="xSelect_container">
    <el-select
      :clearable="isClearable"
      :disabled="isDisabled"
      class="xSelect_wrap"
      :style="
        labelWType == 1
          ? 'width: calc(100% - 94px)'
          : 'width: calc(100% - 112px)'
      "
      style="height: '32px'"
      v-model="value"
      :placeholder="defaultConfigData.placeholder"
      @change="selectChange"
      @clear="selectClear"
    >
      <el-option
        v-for="item in defaultConfigData.options"
        :key="item.value"
        :label="item.label"
        :value="item.value"
      >
      </el-option>
    </el-select>
    <span
      :style="labelWType == 1 ? 'width:94px' : 'width:112px'"
      class="xSelect_label"
      ><span class="xSelect_check" v-show="isCheck"></span>
      <span>{{ defaultConfigData.title }}</span>
    </span>
  </div>
</template>

<script>
export default {
  name: "SelectCom",
  components: {},
  props: {
    //给 label 设置宽度 默认94 类型2 为110
    labelWType: {
      type: Number,
      default: 1,
    },
    defaultConfig: {
      type: Object,
      default: () => {},
    },
    isCheck: {
      type: Boolean,
      default() {
        return false;
      },
    },
    // 是否禁用
    isDisabled:{
      type:Boolean,
      default:false,
    },
    // 是否清空
    isClearable:{
      type:Boolean,
      default:true,
    },
    //当前 组件的title
    titleType: {
      type:String,
      title: "",
    },
    commomClear: {
      type: Boolean,
      default: false,
    },
  },
  data() {
    return {
      value: "",
      defaultConfigData: this.defaultConfig,
    };
  },

  watch: {
    commomClear(val) {
    // 清空掉信用证 
      if (val && this.titleType == "creditCode") {
        this.value = "";
        this.$store.commit("claerCCode", false);
      }
    },
  },
  created() {
  },
  methods: {
    //下拉菜单选中的值 发生改变
    selectChange() {
      this.$emit("selectChange", this.value);
    },
    //下拉菜单 点击清空
    selectClear() {
      this.$emit("selectClear");
      if (this.selectType == "fatherType") {
        //单笔
        this.$store.commit("isClearSonType", true);
        this.$emit("selectChange", this.value);
      }
    },
  },
};
</script>
<style  lang="scss" scoped>
// input的宽高
::v-deep .el-input__inner {
  height: 32px!important;
}
</style>

vuex之中的数据


//信贷管理  新增
const creditAdd = {
  state: {
    claerCCode: "",
  },
  mutations: {
    claerCCode (state, payload) {
      state.claerCCode = payload
    },
  }
}

export default creditAdd;

使用组件

  • 01:需要从 vuex 之中 拿到那个是否清除的状态
  • 02:再使用组件的时候,需要使用 props 传递进去一个 清除当前 组件的选中的值的状态 (01步的状态)
  • 03:并且titleType 传递一个title属性,证明是当前改组件需要清除,避免清除掉别的组件的数据
  • 04:大体是这样的思路
相关标签: vue后台管理系统

上一篇:

下一篇: