sku的处理 电商SKU

sku的处理

sku电商项目,里面的规格之类。

在没有想法的时候写着确实费劲。

完成后的效果

在这里插入图片描述

文件路劲示意图

在这里插入图片描述

html文件

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>sku</title>
    <link rel="stylesheet" href="./css/index.css">
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
    <script src="./js/data.js"></script>
    <script src="./js/sku.js"></script>

</head>
<body>
    <h1 style="text-align: center;">sku</h1>
    <div id="app">
        <!-- <div class="item">
            <div class="title">color:</div>
            <div class="tag">pink</div>
            <div class="tag">pink</div>
            <div class="tag">pink</div>
        </div> -->
    </div>
    <h2 style="text-align: center;">修改数据</h2>
    <div class="json-data">
        <textarea id="fwb"></textarea>
        <button id="ok">确认</button>
    </div>
</body>
</html>

css代码

css/index.css

#app {
    width: 600px;
    padding-top: 100px;
    position: relative;
    left: 50%;
    transform: translateX(-50%);
}
#app .item {
    display: flex;
    margin: 10px 0;
}
#app .item .title {
    font-size: 20px;
    font-weight: 700;
    width: 100px;
}

#app .item .tag {
    border: solid 1px #000;
    border-radius: 5px;
    padding: 3px 10px;
    margin: 10px;
    cursor: pointer;
    /* 不让文字双击选中 */
    user-select: none;
}
#app .item .tag.active {
    background-color: pink;
}
#app .item .tag.noactive {
    background-color: #ccc;
}

/* 扩展 */
.json-data {
    margin-top: 30px;
    width: 700px;
    height: 400px;
    position: relative;
    left: 50%;
    transform: translateX(-50%);
}
.json-data #fwb {
    height: 300px;
    width: 700px;
    font-size: 20px;
}
.json-data #ok {
    width: 100px;
    height: 40px;
    background-color: #007ACC;
    border: none ;
    color: #fff;
}

js代码

js/sku.js

/***
 * 创建dom
 * el           ->  标签类型
 * className    ->  class
 */
function createDOM(obj) {
  obj = { ...{ el: "div", className: "", innerText: "" }, ...obj };
  let el = document.createElement(obj.el);
  if (obj.className !== "") el.className = obj.className;
  if (obj.innerText !== "") el.innerText = obj.innerText;
  return el;
}

window.onload = () => {
  let app = document.querySelector("#app");
  //   选中的内容
  let active = {};

  //   获取数据 产品 某一项规格 的所有选项
  function handleSky(arr, key) {
    let retArrs = [];
    arr.forEach((item) => {
      if (!retArrs.includes(item[key])) retArrs.push(item[key]);
    });
    return retArrs;
  }

  //  页面展示数据 处理数据
  function handleData(arr, obj) {
    let skuKeyArr = [];
    for (let item in obj) {
      // 递归 拿到所有产品的选项
      let obj = { key: item, arr: handleSky(arr, item) };
      skuKeyArr.push(obj);
    }
    return skuKeyArr;
  }

  //   渲染dom
  function viewDom(data) {
    data = { ...{ SkuDataArr: [] }, ...data };
    //   清除dom
    app.innerHTML = "";
    data.arr.forEach((ite) => {
      let items = createDOM({ className: "item" });
      let title = createDOM({
        className: "title",
        innerText: skuKeyObj[ite.key],
      });
      items.appendChild(title);
      ite.arr.forEach((el) => {
        let tag = createDOM({ className: "tag", innerText: el });
        tag.setAttribute("data-lei", ite.key);

        // 添加点击事件
        tag.onclick = selectTag;
        
        // 重置所有选项
        if (data.SkuDataArr.length == 0) {
          tag.className = "tag";
          tag.setAttribute("data-disabled", false);
        } else {
          tag.className = "tag noactive";
          tag.setAttribute("data-disabled", true);
        }
        let boo = true;
        for (let index = 0; index < data.SkuDataArr.length; index++) {
          const element = data.SkuDataArr[index];
          if (element[ite.key] == el && boo) {
            tag.className = "tag";
            tag.setAttribute("data-disabled", false);
            boo = false;
          }
        }

        // 判断选中的
        if (data.active && data.active[ite.key] == el)
          tag.className = "tag active";

        items.appendChild(tag);
      });
      app.appendChild(items);
    });
    //   结账
    // 处理新的skuData
    if (data.SkuDataArr.length == 1) {
      let items = createDOM({ className: "item" });
      items.appendChild(
        createDOM({
          className: "title",
          innerText: "结账",
        })
      );
      items.appendChild(
        createDOM({
          className: "p",
          innerText: `${data.SkuDataArr[0].price}`,
        })
      );
      app.appendChild(items);
    }
  }


  //   点击选中
  function selectTag(e) {
    if (e.target.dataset.disabled == "true") return;
    if (active[e.target.dataset.lei] == e.target.innerText) {
      delete active[e.target.dataset.lei];
    } else {
      active[e.target.dataset.lei] = e.target.innerText;
    }
    let SkuDataArr = retHandleSkuData(active, skuData);

    // 渲染页面
    viewDom({
      arr: handleData(skuData, skuKeyObj),
      active: active,
      SkuDataArr: SkuDataArr,
    });
    return;
  }

  //   处理skuData数据
  function retHandleSkuData(obj, arr) {
    let arrCy = []; // 存过滤后的数据
    let retArr = JSON.parse(JSON.stringify(arr)); // 要返回的数据  完整数据  后续过滤ok的数据 预备准备多次过滤
    for (let key in obj) {
      retArr.forEach((el) => {
        if (el[key] == obj[key]) {
          arrCy.push(el);
        }
      });
      retArr = JSON.parse(JSON.stringify(arrCy));
      arrCy = [];
    }
    return retArr;
  }

  viewDom({ arr: handleData(skuData, skuKeyObj), active: active });


  // ------------------------------扩展-------------------------
  let fwb = document.querySelector("#fwb");
  let ok = document.querySelector("#ok");
  console.dir(fwb)
  fwb.value = JSON.stringify(skuData);
  ok.onclick = function (e) { 
    skuData = JSON.parse(fwb.value);
    viewDom({ arr: handleData(skuData, skuKeyObj), active: active });
  }
};

js数据

js/data.js

let skuData = [
  { color: "red", name: "小米5", internal: "4G", price: 1999 },
  { color: "red", name: "小米5", internal: "6G", price: 2991 },
  { color: "red", name: "小米5", internal: "8G", price: 3992 },
  { color: "red", name: "小米6", internal: "4G", price: 4993 },
  { color: "red", name: "小米6", internal: "6G", price: 5994 },
  { color: "red", name: "小米6", internal: "8G", price: 6995 },

  // { color: "pink", name: "小米5", internal: "4G", price: 1996 },
  // { color: "pink", name: "小米5", internal: "6G", price: 2997 },
  // { color: "pink", name: "小米5", internal: "8G", price: 3998 },
  // { color: "pink", name: "小米6", internal: "4G", price: 4999 },
  // { color: "pink", name: "小米6", internal: "6G", price: 5991 },
  { color: "pink", name: "小米6", internal: "8G", price: 6992 },

  { color: "black", name: "小米5", internal: "4G", price: 1993 },
  { color: "black", name: "小米5", internal: "6G", price: 2994 },
  // { color: "black", name: "小米5", internal: "8G", price: 3995 },
  // { color: "black", name: "小米6", internal: "4G", price: 4996 },
  // { color: "black", name: "小米6", internal: "6G", price: 5997 },
  // { color: "black", name: "小米6", internal: "8G", price: 6998 },
];

const skuKeyObj = {
  color: "颜色",
  name: "型号",
  internal: "配置",
};


最后

这种写法主要是提供一个思路, 不是很成熟。仅仅供给大家学习之用。
喜欢就点赞收藏。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
SKU电商系统订单表是一种记录电商平台上商品购买信息的数据表格。每个订单代表着一次顾客购买商品的行为。 SKU(Stock Keeping Unit)是库存量单位的缩写,指的是电商平台上每种商品的唯一标识。在订单表中,每个订单都会包括不同SKU商品信息。 订单表通常包含以下字段: 1. 订单编号:每个订单都有一个独特的编号,用于区分不同订单。 2. 顾客信息:记录顾客的姓名、联系方式、配送地址等信息,方便商家与顾客进行沟通和配送商品。 3. 商品信息:记录顾客购买的商品SKU商品名称、价格、数量等信息。 4. 订单金额:记录订单的总金额,包括商品金额、运费、优惠券等相关费用。 5. 订单状态:记录订单的状态,如待支付、待发货、已取消、已完成等,用于商家进行订单管理和跟踪。 6. 下单时间:记录订单的下单时间,方便商家按时间顺序进行订单处理。 7. 支付方式:记录顾客支付的方式,如微信支付、支付宝、银行转账等。 8. 物流信息:记录订单的物流状态、物流公司、快递单号等信息,方便商家跟踪和查询订单配送状态。 通过SKU电商系统订单表,商家可以方便地了解顾客购买行为以及订单的处理流程,从而更好地进行订单管理和顾客服务。同时,订单表也为商家提供了有效的数据分析和业务决策依据,以优化库存管理、销售策略和供应链运作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

厚渡

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

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

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

打赏作者

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

抵扣说明:

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

余额充值