Newer
Older
smartKitchenFront / src / components / mycomponent / snCode / codeField.vue
liuyangyingjie on 26 Oct 2022 6 KB first commit
<template>
   <div class="codeItem ">
        <div class="inputContent">
          <div class="inputBox">
            <red-star />
            <input-vue title="位数" width="150px" v-model.number="itemInfo.snDigit">
          
            </input-vue>
          </div>
        </div>
        <div class="inputContent">
          <div class="inputBox">
            <red-star />
            <input-vue title="名称"  v-model="itemInfo.snDigitName"></input-vue>
          </div>
        </div>
        <div class="Content_content">
          <div class="left_title"><red-star />编码规则:</div>
          <div class="right_content">
            <div class="title">
              <div class="title_item">
                <input-vue>
                  <el-checkbox v-model="itemInfo.checked"  >是否关联前一项</el-checkbox>
                </input-vue>
              </div>
              <div class="title_item" > 
                <input-vue title="关联项名称">
                   <el-select  @change="changitemInfo"
                    v-model="relevanceName"
                    filterable
                    placeholder="请选择"
                    style="width: 130px"
                  >
                    <el-option
                      v-for="(item,index) in NameList"
                      :key="index"
                      :label="item.snDigitName"
                      :value="item.snDigitName"
                    >
                    </el-option>
                  </el-select>
                </input-vue>
              </div>
            
              <div class="title_item">
                <i class="el-icon-circle-plus icon"  @click="addAry"></i>
                
              </div>
            </div>
            <div class="right_content_conetent">
            <div v-for="(item,index) in  itemInfo.itemList" :key="index">
              <code-item v-model=" itemInfo.itemList[index]"  @upmove="upmove(index)" @downmove="downmove(index)" @remove="remove(index)"  :checked="checked" :codeList="codelist"></code-item>
            </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:['ruleList','allInfo','index'],
  // model: {
  //   prop: 'snDigitOrder',
  //   event: 'changeSnDigitOrder'
  // },
  mounted(){
    this.itemInfo = {...this.ruleList}    //单个框数据
    //  allInfo 全部数据
    // this.itemInfo = this.ruleList   // 根据 对象的性质
      // this.$on('submitCode',()=>{console.log(11);})
      // this.codeItemInfo = 
  },
  data(){
    return{
        checked:false,
        itemInfo:{},
        relevanceName:'',
        codelist:'',
        codeItemInfo:''//编码详情
    }
  },
  methods:{
    remove(index){
      this.itemInfo.itemList.splice(index,1)
    },
    upmove(index){
       

     if(index==0)return
     console.log(this.itemInfo);
     let 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){
      console.log(index, this.itemInfo.itemList.length-1);
     if(index==this.itemInfo.itemList.length-1 )return
      let temp = this.itemInfo.itemList[index+1]
     this.itemInfo.itemList[index+1] =this.itemInfo.itemList[index] 
     this.itemInfo.itemList[index]  =temp
     
    
    },
    addAry(){
      console.log( this.itemInfo);
      this.itemInfo.itemList.push({
                digitItem:'',
                digitPre:'',
              digitItemIllustration:''
      })
    },
    changitemInfo(){
    

      const temp = this.NameList.findIndex(item => {
             return  item.snDigitName == this.relevanceName 
            })

      
     if(temp==-1)return []
      const ary =  this.NameList[temp].itemList.map(item => {
        return { digitItem:item.digitItem}
      })
      console.log(ary,"======ary=====");
      this.codelist = ary
    //  this.codelist = temp
    },
   
  },
  watch:{
   
    itemInfo:{
      handler(vls){
       this.changitemInfo()
      //  iteminfo改变时改变父组件
        // 判断是否带前项编码
      //  if(!vls.checked){
                   
      //  const  temp = vls.itemList.map(item => {
      //    item.itemList = {
      //      digitItem:item.digitItem,
      //      digitItemIllustration:item.digitItemIllustration
      //    }
      //    return item
      //  })
      //    this.$emit('changeRuleList',{data:temp,index:this.index})
      // // console.log(temp, "-===========================",vls);
      // }else{
         this.$emit('changeRuleList',{data:vls,index:this.index})
      // }
    },
      deep:true
    },
    allInfo:{
        handler(vls){
         this.changitemInfo()
        },
        deep:true
    },
    // checked(){
    //     this.subInfo(this.itemInfo)
    // }
    // ruleList:{
    //   handler(vls){
   
    //     if(this.itemInfo.digitItem)
    //    this.itemInfo = {...vls}
    //   },
    //   deep:true,
    //   immediate:true
    // }
  },
  computed:{
    NameList(){
      // console.log(this.allInfo[0].itemList[0].digitItem,"=========");
    const temp = [...this.allInfo]
     const temp2  =  temp.slice (0 ,this.index)
    //  console.log(temp2[0].itemList[0].digitItem,"+=====temp2====");
    return [...temp2]
    // return []
    },
    // codeList(){
    //     const index = this.allInfo.findIndex(item => {
          
    //       return  item.snDigitName = this.relevanceName
    //       // console.log(item.snDigitName ,  this.relevanceName);
    //     })
    //     // if(index==-1) return []
    //     // const temp  =  this.ruleList[index].itemList
    //     // return [...temp]
    //     return index
    // }
  }
}
</script>

<style lang="scss" scoped>
.codeItem {
      display: flex;
      flex: 1;
      .inputContent {
        flex: 1;
        .inputBox {
          display: flex;
          align-items: center;
        }
      }
      .Content_content {
        flex: 3;
        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>