VUE-商品详情多规格-拿来即用--插件式

1 篇文章 0 订阅
1 篇文章 0 订阅

效果图

 具体代码

<template>
  <div class="title-small colonn">

    <div class="colonn"
     style="padding:20px 20px;border-radius: 10px;margin-top:10px;">
      <div class="roww">
        <div style="color: #606266;margin-right: 10px;min-width:60px;">添加规格</div>
        <el-tag
          :key="'tag'+index"
          v-for="(tag,index) in dynamicTags"
          closable
          :disable-transitions="false"
          @close="handleClose(tag)">
          {{tag.name}}
        </el-tag>
        <el-input
          class="input-new-tag"
          v-if="inputVisible"
          v-model="inputValue"
          ref="saveTagInput"
          size="small"
          @keyup.enter.native="handleInputConfirm"
          @blur="handleInputConfirm"
        >
        </el-input>
        <el-button v-else class="button-new-tag" size="small" @click="showInput">添加规格</el-button>
      </div>

    </div>
    <div class="roww  endend">
      <el-button type="danger" @click="getSkus">生成所有规格</el-button>
    </div>
    <div class="colonn"
     v-for="(item,index) in dynamicTags"
     style="background-color: #fcfcfc;padding:20px 20px;border-radius: 10px;margin-top:10px;">
      <div class="roww">
        <div style="color: #606266;margin-right: 10px;min-width:60px;">规格名</div>
        <div style="font-weight: bold;">{{item.name}}</div>
      </div>
      <div class="roww" style="margin-top:20px;">
        <div style="color: #606266;margin-right: 10px;min-width:60px;">规格值</div>
        <div>
          <!--  -->
           <el-checkbox v-model="item.is"  @change="allTrueValue(index)">全选</el-checkbox>
           <!-- -->
        </div>
      </div>
      <div class="roww" style="margin-top:20px;">
        <div style="color: #606266;margin-right: 10px;opacity: 0;min-width:60px;">规格值</div>
        <div class="huanhang">
           <el-checkbox style="margin-bottom:15px;"
            v-model="item1.is"
            v-for="(item1,index1) in item.listvalue">{{item1.value}}</el-checkbox>
            <div style="width:25px;" v-if="item.listvalue.length>0"></div>
           <el-input
           style="margin-bottom:15px;"
             class="input-new-tag"
             v-if="index==indexSpace"
             v-model="inputValue1"
             :focus="index==indexSpace"
             size="small"
             @keyup.enter.native="handleInputConfirm1(index,$event)"
             @blur="handleInputConfirm1(index,$event)"
           >
           </el-input>
           <el-button v-else class="button-new-tag" size="small" @click="showInput1(index)">添加规格</el-button>

        </div>
      </div>
    </div>

    <div class="roww center_center">
      <el-button @click="getAllValues">获取所有值</el-button>
    </div>

    <div style="height:15px;"></div>
    <el-table
     :data="tabledatas"
          style="width: 100%">
          <el-table-column v-for="(item,index) in dynamicTags"
            :label="item.name"
             :prop="'key'+index"
            >
          </el-table-column>

          <el-table-column
            label="库存">
            <template  slot-scope="scope">
              <el-input type="number"  v-model="scope.row.stock" placeholder="请输入库存"></el-input>
            </template>
          </el-table-column>
          <el-table-column
            label="原价格">

            <template  slot-scope="scope">
              <el-input  type="number" v-model="scope.row.original_price"  placeholder="请输入原价格"></el-input>
            </template>
          </el-table-column>
          <el-table-column
            label="价格" >
            <template  slot-scope="scope">
              <el-input type="number" v-model="scope.row.price"  placeholder="请输入价格"></el-input>
            </template>
          </el-table-column>
        </el-table>
        <el-table :show-header="false" v-if="tabledatas.length>0"
         :data="tableData"
         :cell-style="cellStyle"
              style="width: 100%;background-color: #0072C6;">
              <el-table-column v-for="(item,index) in dynamicTags"
                :label="item.name"
                 :prop="'key'+index"
                >
                <template>
                  {{index==0?'整体调整':""}}
                </template>
              </el-table-column>

              <el-table-column
                label="库存">
                <template  slot-scope="scope">
                  <el-input type="number"  v-model="stockss" placeholder="请输入库存"></el-input>
                </template>
              </el-table-column>
              <el-table-column
                label="原价格">

                <template  slot-scope="scope">
                  <el-input  type="number" v-model="original_pricess"  placeholder="请输入原价格"></el-input>
                </template>
              </el-table-column>
              <el-table-column
                label="价格" >
                <template  slot-scope="scope">
                  <el-input type="number" v-model="pricess"  placeholder="请输入价格"></el-input>
                </template>
              </el-table-column>
            </el-table>
  </div>
</template>

<script>
export default {
  name: "",
  data() {
    return {
        dynamicTags: [],//规格名列表
        inputVisible: false,
        inputValue: '',
        inputValue1:'',//规格属性值
        indexSpace:0,//第几个规格
        tabledatas:[],
        tableData:[{
                    date: '2016-05-02',
                    name: '王小虎',
                    address: '上海市普陀区金沙江路 1518 弄'
        }],
        spacesList:[],//所有的规格可能
        stockss:0,//库存修改所有
        pricess:0,//价格修改所有
        original_pricess:0,//价格修改所有
    };
  },
  props: {
    content: "",//接收参数
  },
  components: {},
  created() {},
  mounted() {},
  watch:{
    stockss(res){
      console.log(res)
      var tabledatas=this.tabledatas;
      for(var a=0;a,tabledatas.length;a++){
        tabledatas[a].stock=res;
      }
      this.tabledatas=tabledatas;
    },
    pricess(res){
      console.log(res)
      var tabledatas=this.tabledatas;
      for(var a=0;a,tabledatas.length;a++){
        tabledatas[a].price=res;
      }
      this.tabledatas=tabledatas;
    },
    original_pricess(res){
      console.log(res)
      var tabledatas=this.tabledatas;
      for(var a=0;a,tabledatas.length;a++){
        tabledatas[a].original_price=res;
      }
      this.tabledatas=tabledatas;
    },
  },
  methods: {

    cellStyle(){
      return "background:#e8f4ff;"
    },

    getAllValues(){
      console.log("tabledatas",this.tabledatas)
    },
    // 算法获取所有排序可能
    getSkus(){
      var dynamicTags=this.dynamicTags;
      if(dynamicTags.length<=0){
         this.$message({
                  message: '请填写相关规格',
                  type: 'warning'
                });
        return false;
      }
      console.log('dynamicTags',dynamicTags)
      var spaces=[];
      for(var a=0;a<dynamicTags.length;a++){
        var list=[];
        for(var b=0;b<dynamicTags[a].listvalue.length;b++){
          if(dynamicTags[a].listvalue[b].is){
            list.push(dynamicTags[a].listvalue[b].value);
          }
        }
        spaces.push(list);
      }
      console.log(spaces)
      let allArr =this.cartesianProductOf(...spaces)
      this.spacesList=allArr;
      this.tableData1();
    },
    //整理sku数据  和表格需要的数据一样
    tableData1(){
      var spacesList=this.spacesList;
      var dynamicTags=this.dynamicTags;
      var tabledatas=[];
      for(var a=0;a<spacesList.length;a++){
        var obg={};
        for(var b=0;b<spacesList[a].length;b++){
          obg['key'+b]=spacesList[a][b];
        }
        obg.stock=0;
        obg.price=0;
        obg.original_price=0;
       tabledatas.push(obg);
      }



      this.tabledatas=tabledatas;
      console.log(tabledatas)
    },
    cartesianProductOf() {
        return Array.prototype.reduce.call(arguments, function(a, b) {
            var ret = [];
            a.forEach(function(a) {
                b.forEach(function(b) {
                    ret.push(a.concat([b]));
                });
            });
            return ret;
        }, [[]]);
    },
    // 动态添加规格 showInput
    showInput1(index){
      console.log("动态添加规格",index)
      this.indexSpace=index;

    },
    // 输入属性值
  handleInputConfirm1(index,res) {
    if(this.inputValue1==""){
      this.$message({
                message: '请输入属性值',
                type: 'warning'
              });
      return false;
    }
       var spaceindex=this.indexSpace;
       var dynamicTags=this.dynamicTags;
       var obg={
         'is':true,
         'value':this.inputValue1
       }
       dynamicTags[spaceindex].listvalue.push(obg);
       this.dynamicTags=dynamicTags;
       this.inputValue1="";
        this.$forceUpdate();
  },
  // 点击全选
  allTrueValue(index){
    var dynamicTags=this.dynamicTags;
    var listvalue=dynamicTags[index].listvalue;
    for(var a=0;a<listvalue.length;a++){
      console.log(dynamicTags[index].is)
      listvalue[a].is=dynamicTags[index].is;
    }
    dynamicTags[index].listvalue=listvalue;
    this.dynamicTags=dynamicTags;
    this.$forceUpdate();
  },

    inputChange(res){
      console.log(res)
      this.goodprice=res;
      this.$forceUpdate()
    },

    // 添加规格值开始
     handleClose(tag) {
            this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1);
          },

          showInput() {
            this.inputVisible = true;
            this.$nextTick(_ => {
              this.$refs.saveTagInput.$refs.input.focus();
            });
          },

          handleInputConfirm() {
            let inputValue = this.inputValue;
            var obg={
              'name':inputValue,
              is:true,
              listvalue:[],
            }
            if (inputValue) {
              this.dynamicTags.push(obg);
            }
            this.inputVisible = false;
            this.inputValue = '';
             this.$forceUpdate();
          },
          // 添加规格值结束

  },
};
</script>
<style >
@import url("style.css");

/* 添加规格 */
.el-tag + .el-tag {
    margin-left: 10px;
  }
  .button-new-tag {
    margin-left: 10px;
    height: 32px;
    line-height: 30px;
    padding-top: 0;
    padding-bottom: 0;
  }
  .input-new-tag {
    width: 90px;
    margin-left: 10px;
    vertical-align: bottom;
  }
</style>

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞飞翼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值