Vue2商品规格选择

Vue2+Element-ui

Vu2仿写拼多多商家后台规则选择,为什么用Vue2呢,因为公司用的Vue2...
样式不是很好看,自己调一下就行。
 

 

<template>
  <div ref="inputContainer">

    <div>
      {{ combinationsResult }}
    </div>

    <el-row>
      <el-col :span="10">
        <div class="input-group">
          <label for="columnOneName" style="width: 150px;">商品规格-1:</label>
          <el-input v-model="columnNoeName" id="columnOneName"></el-input>
        </div>
      </el-col>
    </el-row>

    <el-row>
      <el-col :span="10">
        <div class="input-group">
          <label for="columnTwoName" style="width: 150px;">商品规格-2:</label>
          <el-input v-model="columnTwoName" id="columnTwoName"></el-input>
        </div>
      </el-col>
    </el-row>

    <div v-show="columnNoeName!==''" v-for="(item, index) in classifyOne" :key="`one-${index}`"
         style="display: inline-block; width: 300px;">
      <el-input
          v-model="item.value"
          placeholder="请输入内容"
          @blur="() => handleBlur('classifyOne', index)"
          style="display: inline-block; width: 200px;"
      ></el-input>
      <el-button style="display: inline-block" v-if="item.value" @click="() => removeInput('classifyOne', index)"
                 class="right-space">删除
      </el-button>
    </div>

    <div></div>

    <div v-show="columnTwoName!==''" v-for="(item, index) in classifyTwo" :key="`two-${index}`"
         style="display: inline-block; width: 300px;  margin-top: 20px;">
      <el-input
          v-model="item.value"
          placeholder="请输入内容"
          @blur="() => handleBlur('classifyTwo', index)"
          style="display: inline-block; width: 200px;"
      ></el-input>
      <el-button style="display: inline-block" v-if="item.value" @click="() => removeInput('classifyTwo', index)"
                 class="right-space">删除
      </el-button>
    </div>

    <el-table :data="combinationsResult"
              style="width: 80%; margin: 0 auto; margin-bottom: 100px; margin-top: 50px;">
      <el-table-column v-if="showStyleColumn" prop="style" :label="columnTwoName"></el-table-column>
      <el-table-column v-if="showColorColumn" prop="color" :label="columnNoeName"></el-table-column>
      <el-table-column label="库存">
        <template slot-scope="scope">
          <el-input v-model="scope.row.stock" placeholder="请输入库存"></el-input>
        </template>
      </el-table-column>
      <el-table-column label="拼单价(元)">
        <template slot-scope="scope">
          <el-input v-model="scope.row.groupPrice" placeholder="请输入拼单价"></el-input>
        </template>
      </el-table-column>
      <el-table-column label="单买价(元)">
        <template slot-scope="scope">
          <el-input v-model="scope.row.singlePrice" placeholder="请输入单买价"></el-input>
        </template>
      </el-table-column>
      <el-table-column label="预览图">
        <template slot-scope="scope">
          <el-input v-model="scope.row.preview" placeholder="请输入预览图 URL"></el-input>
        </template>
      </el-table-column>
      <el-table-column label="规格编码">
        <template slot-scope="scope">
          <el-input v-model="scope.row.code" placeholder="请输入规格编码"></el-input>
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>

<script>
export default {
  data() {
    return {
      classifyOne: [{value: ''}],
      classifyTwo: [{value: ''}],
      columnNoeName: "",
      columnTwoName: "",
      combinationsResult: [{
        stock: '',
        groupPrice: '',
        singlePrice: '',
        preview: '',
        code: ''
      }],  // 用于存储表格中的数据
    };
  },
  computed: {

    showColorColumn() {
      return this.classifyOne.some(one => one.value);
    },
    showStyleColumn() {
      return this.classifyTwo.some(two => two.value);
    }
  },
  methods: {
    createRow(color, style) {
      return {
        color,
        style,
        stock: '',
        groupPrice: '',
        singlePrice: '',
        preview: '',
        code: ''
      };
    },

    generateCombinations() {
      let result = [];
      let sourceResult = this.combinationsResult; // 用于存储组合结果

      const hasColorValues = this.classifyOne.some(one => one.value);
      const hasStyleValues = this.classifyTwo.some(two => two.value);

      if (!hasColorValues && !hasStyleValues) {
        result = [this.createRow('', '')];
      } else if (hasColorValues && hasStyleValues) {
        this.classifyOne.forEach(one => {
          this.classifyTwo.forEach(two => {
            if (one.value && two.value) {
              result.push(this.createRow(one.value, two.value));
            }
          });
        });
      } else {
        this.classifyOne.forEach(one => {
          if (one.value) {
            result.push(this.createRow(one.value, ''));
          }
        });
        this.classifyTwo.forEach(two => {
          if (two.value) {
            result.push(this.createRow('', two.value));
          }
        });
      }

      for (let i = 0; i < result.length; i++) {
        for (let j = 0; j < sourceResult.length; j++) {
          if (sourceResult === []) {
            break;
          }
          if (result[i].color === sourceResult[j].color &&
              result[i].style === sourceResult[j].style) {
            result[i] = sourceResult[j];
          }
        }


        this.combinationsResult = result;
      }
    },
    handleBlur(arrayName, index) {
      this.ensureEmptyInputAtEnd(arrayName);
    }
    ,
    removeInput(arrayName, index) {
      this[arrayName].splice(index, 1);
      this.ensureEmptyInputAtEnd(arrayName);
    }
    ,
    ensureEmptyInputAtEnd(arrayName) {
      const array = this[arrayName];
      if (array && array[array.length - 1].value) {
        array.push({value: ''});
      }
      this[arrayName] = array && array.filter((item, idx) =>
          item.value || idx === array.length - 1
      );
    }
    ,
    handleClickOutside(e) {
      if (!this.$refs.inputContainer.contains(e.target)) {
        this.ensureEmptyInputAtEnd('classifyOne');
        this.ensureEmptyInputAtEnd('classifyTwo');
      }
    }
  },
  mounted() {
    document.addEventListener('click', this.handleClickOutside);
  },
  beforeDestroy() {
    document.removeEventListener('click', this.handleClickOutside);
  },
  watch: {
    classifyOne: {
      handler: 'generateCombinations',
      deep: true
    },
    classifyTwo: {
      handler: 'generateCombinations',
      deep: true
    }
  }
};
</script>

<style scoped>
.right-space {
  margin-right: 10px;
}

.input-group {
  display: flex;
  align-items: center;
}

.input-group label {
  margin-right: 10px;
}

</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/298618.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

案例099:基于微信小程序的外卖小程序的研究与开发

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

在Gitee上维护Erpnext源

在Gitee上维护Erpnext源 官方的frappe和erpnext地址: GitHub - frappe/frappe: Low code web framework for real world applications, in Python and Javascript GitHub - frappe/erpnext: Free and Open Source Enterprise Resource Planning (ERP) 1, 仓库地址输入frappe的官…

R 批量对多个变量进行单因素方差分析 批量计算均值±标准差

多个变量批量进行单因素方差 R实现 文章目录 一、批量生成均值标准差 P值二、添加协变量单因素方差分析&#xff0c;生成校正P值三、在分层情况下进行单因素方差分析四、添加协变量和交互项的单因素方差分析&#xff0c;生成交互项的P值 一、批量生成均值标准差 P值 数据结构如…

pyfolio工具结合backtrader分析量化策略组合,附源码+问题分析

pyfolio可以分析backtrader的策略&#xff0c;并生成一系列好看的图表&#xff0c;但是由于pyfolio直接install的稳定版有缺陷&#xff0c;开发版也存在诸多问题&#xff0c;使用的依赖版本都偏低&#xff0c;试用了一下之后还是更推荐quantstats。 1、安装依赖 pip install …

【STM32】STM32学习笔记-TIM输出比较(15)

00. 目录 文章目录 00. 目录01. 输出比较简介02. PWM简介03. 输出比较通道(高级)04. 输出比较通道(通用)05. 输出比较模式06. PWM基本结构07. PWM参数计算08. 舵机简介09. 舵机硬件电路10. 直流电机及驱动简介11. 直流电机硬件电路12. 附录 01. 输出比较简介 OC&#xff08;Ou…

ASP.NET可视化流程设计器源码

源码介绍: ASP.NET可视化流程设计器源码已应用于众多大型企事业单位。拥有全浏览器兼容的可视化流程设计器、表单设计器、基于角色的权限管理等系统开发必须功能&#xff0c;大大为您节省开发时间&#xff0c;是您开发OA.CRM、HR等企事业各种应用管理系统和工作流系统的最佳基…

Redis高级特性和应用(慢查询、Pipeline、事务、Lua)

Redis的慢查询 许多存储系统(例如 MySQL)提供慢查询日志帮助开发和运维人员定位系统存在的慢操作。所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将这条命令的相关信息(例如:发生时间,耗时,命令的详细信息)记录下来,Redis也提供了类似…

【开源】基于JAVA语言的服装店库存管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 服装档案模块2.4 服装入库模块2.5 服装出库模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 角色表3.2.2 服装档案表3.2.3 服装入库表3.2.4 服装出库表 四、系统展示五、核心代码5.…

梦想家内容管理系统(Dreamer CMS)跨站请求伪造漏洞

梦想家内容管理系统&#xff08;Dreamer CMS&#xff09;跨站请求伪造漏洞 目标:GitHub - iteachyou-wjn/dreamer_cms: Dreamer CMS 梦想家内容发布系统采用流行的SpringBoot搭建&#xff0c;支持静态化、标签化建站。不需要专业的后台开发技能&#xff0c;会HTML就能建站&…

java数据结构与算法刷题-----LeetCode63. 不同路径 II

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 很多人觉得动态规划很难&#xff0c;但它就是固定套路而已。其实动态规划只…

uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -后端鉴权拦截器实现

锋哥原创的uniapp微信小程序投票系统实战&#xff1a; uniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )_哔哩哔哩_bilibiliuniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )共计21条视频…

【GitHub】-design-pattern-extend(设计模式扩展)

写在前面 偶然间看到一篇文章 《Java 中保持扩展性的几种套路和实现》&#xff0c;写的不错&#xff0c;但是类图画的差了点儿意思。于是&#xff0c;自己动手画了画&#xff0c;对其中的内容作了一些调整&#xff0c;对包做了进一步划分&#xff0c;便于理解消化。以下是对Git…

C++ Qt开发:Charts与数据库组件联动

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍Charts组件与QSql数据库组件的常用方法及灵活…

【STM32】STM32学习笔记-定时器定时中断 定时器外部时钟(14)

00. 目录 文章目录 00. 目录01. 定时器中断相关API1.1 TIM_InternalClockConfig1.2 TIM_TimeBaseInit1.3 TIM_TimeBaseInitTypeDef1.4 TIM_ClearFlag1.5 TIM_ITConfig1.6 TIM_Cmd1.7 中断服务函数1.8 TIM_ETRClockMode2Config 02. 定时器定时中断接线图03. 定时器定时中断示例0…

嵌入式项目——平衡小车(1)

焊接 驱动板需要焊接的如上图。 陀螺仪8pin排母电机两路排线插口。(个别同学需要焊接)两个电池仓,注意电池仓分正反。 安装 底部电池板 4个 双通尼龙柱M3*224个 尼龙螺钉M3*6电机驱动板

个人笔记:分布式大数据技术原理(二)构建在 Hadoop 框架之上的 Hive 与 Impala

有了 MapReduce&#xff0c;Tez 和 Spark 之后&#xff0c;程序员发现&#xff0c;MapReduce 的程序写起来真麻烦。他们希望简化这个过程。这就好比你有了汇编语言&#xff0c;虽然你几乎什么都能干了&#xff0c;但是你还是觉得繁琐。你希望有个更高层更抽象的语言层来描述算法…

Java数组:一维数组、二维数组、Arrays

文章目录 1、一维数组1.1 数组概念1.2 数组的声明1.3 数组的静态初始化1.4 数组的动态初始化1.5 地址值1.6 数组元素访问1.7 索引1.8 数组的遍历1.9 数组两种初始化方式的区别 2、二维数组2.1 二维数组的声明2.2 二维数组的静态初始化2.3 二维数组的动态初始化2.4 二维数组的遍…

扩散模型: Diffusion Model概念讲解

Diffusion Model 课件视频前向扩散过程 在原始图像中逐步添加高斯分布随机噪声,直到最后得到完全噪声的图像。 反向降噪过程 逐步去除噪声图中的噪声,得到最后原图。 根据噪声图和时间步得到预测的噪声,然后噪声图减去噪声得到原始图 噪声预测的标签来自于前向扩散过程中添加…

TSINGSEE青犀智能分析网关V4在智慧园区车辆违停检测场景中的应用

一、背景与需求 园区作为企业办公、生产制造的重要场所&#xff0c;主要道路车辆违停等违规行为会对园区的安全造成隐患&#xff0c;并且在上下班高峰期内&#xff0c;由于发现不及时&#xff0c;车辆违停行为会造成出入口拥堵现象&#xff0c;这也成为园区管理的棘手问题。为了…

胡圆圆的暑期实习经验分享

背景 实验室一般是在研究生二年级的时候会放实习&#xff0c;在以后的日子就是自己完成毕业工作要求&#xff0c;基本上不再涉及实验室的活了&#xff0c;目前是一月份也是开始准备暑期实习的好时间。实验室每年这个时候都会有学长学姐组织暑期实习经验分享&#xff0c;本着不…