react 购物车


import React, { Component } from 'react'
import './App.css';
class GoodsItem extends Component {
  constructor(props) {
    super(props)
    this.state = {
      goodsInfo: this.props.goodsInfo,
      singleCheck: false
    }
  }
  render() {
    return (
      <li>
        {/** 单选按钮点击的时候需要传参到父组件 参数:id,price ,number**/}
        <input type="checkbox" checked={this.props.ischeckAll ? true : this.state.singleCheck} onChange={() => {
          this.singleChecked()
        }} />
        <img src={this.state.goodsInfo.pic} alt="" />

        <div>
          <div>{this.state.goodsInfo.name}</div>
          <div style={{ color: "red" }}>{this.state.goodsInfo.price}</div>
        </div>

        <div>
          <button onClick={this.changeNumberCount.bind(this, this.state.goodsInfo.number, -1)}
            disabled={this.state.goodsInfo.number === 1}>-</button>
          <span>{this.state.goodsInfo.number}</span>
          <button onClick={this.changeNumberCount.bind(this, this.state.goodsInfo.number, 1)}>+</button>
        </div>

        <div>
          <button onClick={() => { this.props.removeItem(this.state.goodsInfo) }}>删除</button>
        </div>
      </li>
    )
  }
  // 加减
  changeNumberCount(number, count) {

    this.setState({
      goodsInfo: { ...this.state.goodsInfo, number: number + count }
    }, () => {
      if (this.state.singleCheck) {
        this.props.countMoney(this.state.goodsInfo, this.state.singleCheck)
      }
    })
  }
  // 单选
  singleChecked() {
    this.setState({
      singleCheck: !this.state.singleCheck
    }, () => {
      if (this.props.ischeckAll) {
        this.props.changeCheckAll()
      }
      this.props.countMoney(this.state.goodsInfo, this.state.singleCheck)
    })
  }

}
export default class App extends Component {
  state = {
    ischeckAll: false,
    selected: [],
    totalPrice: 0,
    totalNumber: 0,
    datalist: [{
      name: "商品1",
      price: 10,
      number: 1,
      id: 1,
      limit: 5, //限购
      pic: "https://static.maizuo.com/pc/v5/usr/movie/44dc08914d508fc47c8267c6ca73f2d8.jpg",
      checked: false
    },
    {
      name: "商品2",
      price: 20,
      number: 2,
      id: 2,
      limit: 10, //限购
      pic: "https://static.maizuo.com/pc/v5/usr/movie/44dc08914d508fc47c8267c6ca73f2d8.jpg",
      checked: false
    },
    {
      name: "商品3",
      price: 30,
      number: 3,
      id: 3,
      limit: 15, //限购
      pic: "https://static.maizuo.com/pc/v5/usr/movie/44dc08914d508fc47c8267c6ca73f2d8.jpg",
      checked: false
    }
    ]
  }
  render() {
    return (
      <div>
        <input type="checkbox" checked={this.state.ischeckAll} onChange={
          () => this.allCheck()} />全选/全不选
        <ul>
          {this.state.datalist.map((item, index) =>
            <GoodsItem key={item.id}
              goodsInfo={item}
              ischeckAll={this.state.ischeckAll}
              changeCheckAll={() => {
                this.setState({
                  ischeckAll: !this.state.ischeckAll
                })
              }}
              countMoney={(goodsInfo, singleCheck) => { this.countMoney(goodsInfo, singleCheck) }}
              removeItem={(goodsInfo) => { this.removeItem(goodsInfo) }} />
          )}
        </ul>
        <div>总金额:{this.state.totalPrice} 总数量:{this.state.totalNumber}</div>
      </div>
    )
  }
  // 计算总金额,总数量(单条数据)
  countMoney(goodsInfo, singleCheck) {
    console.log(goodsInfo)
    // 更新商品列表(状态,数量)
    this.setState({
      datalist: this.state.datalist.map(item => {
        if (item.id === goodsInfo.id) {
          return { ...item, singleCheck, number: goodsInfo.number }
        }
        return item
      })
    }, () => {
      // 计算
      let total = 0
      let num = 0
      this.state.datalist.filter(item => item.singleCheck).forEach((item) => {
        console.log(item)
        total += item.number * item.price
        num += item.number
      })
      //更新页面金额,数量
      this.setState({
        totalPrice: total,
        totalNumber: num
      })
    })
  }

  removeItem(goodsInfo) { // 删除
    this.setState({
      datalist: this.state.datalist.filter(item => item.id !== goodsInfo.id)
    }, () => {
      this.countMoney(goodsInfo, false)
    })
  }

  allCheck() { // 全选
    this.setState({
      ischeckAll: !this.state.ischeckAll
    }, () => {
      let total = 0
      let num = 0
      this.state.datalist.forEach(item => {
        total += item.number * item.price
        num += item.number
      })
      //更新页面金额,数量
      this.setState({
        totalPrice: total,
        totalNumber: num
      })
    })
  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
牙科就诊管理系统利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了用户在线查看数据。管理员管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等功能。牙科就诊管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 管理员在后台主要管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等。 牙医列表页面,此页面提供给管理员的功能有:查看牙医、新增牙医、修改牙医、删除牙医等。公告信息管理页面提供的功能操作有:新增公告,修改公告,删除公告操作。公告类型管理页面显示所有公告类型,在此页面既可以让管理员添加新的公告信息类型,也能对已有的公告类型信息执行编辑更新,失效的公告类型信息也能让管理员快速删除。药品管理页面,此页面提供给管理员的功能有:新增药品,修改药品,删除药品。药品类型管理页面,此页面提供给管理员的功能有:新增药品类型,修改药品类型,删除药品类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值