Newer
Older
smartKitchenFront / src / components / mycomponent / snCode / codeField.vue
<!--SN码规则新增弹窗内置组件1-->
<template>
  <div class="codeItem ">
    <div class="inputContent">
      <div class="inputBox">
        <red-star />
        <input-vue v-model.number="itemInfo.snDigit" title="位数" size="small" width="80px" />
      </div>
    </div>
    <div class="inputContent">
      <div class="inputBox">
        <input-vue v-model="itemInfo.snDigitName" title="名称" size="small" :red-star="true" />
      </div>
    </div>
    <div class="Content_content">
      <div class="left_title" />
      <div class="right_content">
        <div class="title">
          <div class="inputBox">
            <input-vue title="编码规则" width="150px" :red-star="true">
              <el-checkbox v-model="itemInfo.checked" :disabled="!relationShow">
                是否关联前一项
              </el-checkbox>
            </input-vue>
          </div>
          <div class="title_item" style="margin-left: 20px">
            <input-vue title="关联项名称" box-width="200px" width="100px">
              <el-select
                v-model="relevance"
                value-key="value"
                filterable
                placeholder="请选择"
                style="width: 150px; margin-left: 10px"
                size="small"
                :disabled="!relationShow||!itemInfo.checked"
              >
                <el-option
                  v-for="(item,index) in NameList"
                  :key="index"
                  :label="item.name"
                  :value="item"
                />
              </el-select>
            </input-vue>
          </div>

          <div class="title_item">
            <i class="el-icon-circle-plus icon" @click="addAry" />
          </div>
        </div>
        <div class="right_content_conetent">
          <div v-for="(item,index) in itemInfo.itemList" :key="index">
            <code-item v-model=" itemInfo.itemList[index]" :checked="itemInfo.checked" :code-list="relevance?relevance.itemList:[]" @upmove="upmove(index)" @downmove="downmove(index)" @remove="remove(index)" />
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script>

import InputVue from '../input/inputVue.vue'
import RedStar from '../redStar.vue'
import codeItem from './codeItem.vue'
export default {
  components: { codeItem, InputVue, RedStar },
  props: {
    preList: {
      type: Array,
      default: () => {
        return []
      } // 前项下拉选择列表
    },
    index: {
      type: Number,
      required: true
    },
    codeItem: {
      type: Object,
      required: true
    }, // 当前编码对象
    relationShow: {
      type: Boolean,
      default: false
    }// 是否可点击关联项
  },
  data() {
    return {
      checked: false,
      itemInfo: {},
      relevance: null,
      codeItemInfo: ''// 编码详情
    }
  },
  computed: {
    NameList() { // 只取当前项之前的
      return this.preList.slice(0, this.index)
    }
  },
  watch: {
    codeItem: {
      handler(val) {
        this.itemInfo = val
      },
      deep: true
    },
    itemInfo: {
      handler(val) {
        this.$emit('changeRuleList', { data: val, index: this.index })
      },
      deep: true
    }
  },
  mounted() {
    this.itemInfo = this.codeItem
  },
  methods: {
    // 移除编码项
    remove(index) {
      this.itemInfo.itemList.splice(index, 1)
    },
    // 上移编码项
    upmove(index) {
      if (index === 0) return
      const temp = this.itemInfo.itemList[index - 1]
      this.itemInfo.itemList[index - 1] = this.itemInfo.itemList[index]
      this.itemInfo.itemList[index] = temp
      console.log(this.itemInfo.itemList[index])
    },
    // 下移编码项
    downmove(index) {
      if (index === this.itemInfo.itemList.length - 1) return
      const temp = this.itemInfo.itemList[index + 1]
      this.itemInfo.itemList[index + 1] = this.itemInfo.itemList[index]
      this.itemInfo.itemList[index] = temp
    },
    // 添加编码项
    addAry() {
      this.itemInfo.itemList.push({
        digitItem: '',
        digitPre: '',
        digitItemIllustration: '',
        digitPrelllustration:''
      })
    }

  }
}
</script>

<style lang="scss" scoped>
.codeItem {
  display: flex;
  flex: 1;
  .inputContent {

    .inputBox {
      display: flex;
      align-items: center;
    }
  }
  .inputContent+.inputContent{
    margin-left: 20px;
  }
      .Content_content {
        flex: 1;
        display: flex;
        // align-items:center;
        .left_title{
          line-height: 50px;
          padding: 0 10px;
        }
        .right_content{
          flex: 1;
        .title{
           align-items:center;
          display: flex;
          .title_item{
            flex: 1;
            .icon{
              width: 40px;
              height: 40px;
              color: skyblue;
              // margin-left: 10px;
              text-align: center;
              font-size: 20px;
              line-height: 40px;
            }
          }
        }
        .right_content_conetent{
          display: flex;
          flex-direction: column;
    /* justify-content: right; */
           align-items: end;
        }
        }
      }
    }
</style>