React后台管理系统-订单管理
1.订单管理页面和商品管理页面类似,都是一个搜索组件+列表组件

2.搜索框search组件
- import React from 'react';
- class ListSearch extends React.Component{
- constructor(props){
- super(props);
- this.state = {
- orderNumber : ''
- }
- }
- // 数据变化的时候
- onValueChange(e){
- let name = e.target.name,
- value = e.target.value.trim();
- this.setState({
- [name] : value
- });
- }
- // 点击搜索按钮的时候
- onSearch(){
- this.props.onSearch(this.state.orderNumber);
- }
- // 输入关键字后按回车,自动提交
- onSearchKeywordKeyUp(e){
- if(e.keyCode === 13){
- this.onSearch();
- }
- }
- render(){
- return (
- <div className="row search-wrap">
- <div className="col-md-12">
- <div className="form-inline">
- <div className="form-group">
- <select className="form-control">
- <option value="">按订单号查询</option>
- </select>
- </div>
- <div className="form-group">
- <input type="text"
- className="form-control"
- placeholder="订单号"
- name="orderNumber"
- onKeyUp={(e) => this.onSearchKeywordKeyUp(e)}
- onChange={(e) => this.onValueChange(e)}/>
- </div>
- <button className="btn btn-primary"
- onClick={(e) => this.onSearch()}>搜索</button>
- </div>
- </div>
- </div>
- )
- }
- }
- export default ListSearch;
3.订单列表组件
- import React from 'react';
- import { Link } from 'react-router-dom';
- import MUtil from 'util/mm.jsx'
- import Order from 'service/order-service.jsx'
- import PageTitle from 'component/page-title/index.jsx';
- import ListSearch from './index-list-search.jsx';
- import TableList from 'util/table-list/index.jsx';
- import Pagination from 'util/pagination/index.jsx';
- const _mm = new MUtil();
- const _order = new Order();
- class OrderList extends React.Component{
- constructor(props){
- super(props);
- this.state = {
- list : [],
- pageNum : 1,
- listType : 'list' // list / search
- };
- }
- componentDidMount(){
- this.loadOrderList();
- }
- // 加载商品列表
- loadOrderList(){
- let listParam = {};
- listParam.listType = this.state.listType;
- listParam.pageNum = this.state.pageNum;
- // 如果是搜索的话,需要传入搜索类型和搜索关键字
- if(this.state.listType === 'search'){
- listParam.orderNo = this.state.orderNumber;
- }
- // 请求接口
- _order.getOrderList(listParam).then(res => {
- this.setState(res);
- }, errMsg => {
- this.setState({
- list : []
- });
- _mm.errorTips(errMsg);
- });
- }
- // 搜索
- onSearch(orderNumber){
- let listType = orderNumber === '' ? 'list' : 'search';
- this.setState({
- listType : listType,
- pageNum : 1,
- orderNumber : orderNumber
- }, () => {
- this.loadOrderList();
- });
- }
- // 页数发生变化的时候
- onPageNumChange(pageNum){
- this.setState({
- pageNum : pageNum
- }, () => {
- this.loadOrderList();
- });
- }
- render(){
- let tableHeads = ['订单号', '收件人', '订单状态', '订单总价', '创建时间', '操作'];
- return (
- <div id="page-wrapper">
- <PageTitle title="订单列表" />
- <ListSearch onSearch={(orderNumber) => {this.onSearch(orderNumber)}}/>
- <TableList tableHeads={tableHeads}>
- {
- this.state.list.map((order, index) => {
- return (
- <tr key={index}>
- <td>
- <Link to={ `/order/detail/${order.orderNo}` }>{order.orderNo}</Link>
- </td>
- <td>{order.receiverName}</td>
- <td>{order.statusDesc}</td>
- <td>¥{order.payment}</td>
- <td>{order.createTime}</td>
- <td>
- <Link to={ `/order/detail/${order.orderNo}` }>详情</Link>
- </td>
- </tr>
- );
- })
- }
- </TableList>
- <Pagination current={this.state.pageNum}
- total={this.state.total}
- onChange={(pageNum) => this.onPageNumChange(pageNum)}/>
- </div>
- );
- }
- }
- export default OrderList;
4.详情detail组件
- import React from 'react';
- import MUtil from 'util/mm.jsx'
- import Order from 'service/order-service.jsx'
- import PageTitle from 'component/page-title/index.jsx';
- import TableList from 'util/table-list/index.jsx';
- import './detail.scss';
- const _mm = new MUtil();
- const _order = new Order();
- class OrderDetail extends React.Component{
- constructor(props){
- super(props);
- this.state = {
- orderNumber : this.props.match.params.orderNumber,
- orderInfo : {}
- }
- }
- componentDidMount(){
- this.loadOrderDetail();
- }
- // 加载商品详情
- loadOrderDetail(){
- _order.getOrderDetail(this.state.orderNumber).then((res) => {
- this.setState({
- orderInfo : res
- });
- }, (errMsg) => {
- _mm.errorTips(errMsg);
- });
- }
- // 发货操作
- onSendGoods(){
- if(window.confirm('是否确认该订单已经发货?')){
- _order.sendGoods(this.state.orderNumber).then((res) => {
- _mm.successTips('发货成功');
- this.loadOrderDetail();
- }, (errMsg) => {
- _mm.errorTips(errMsg);
- });
- }
- }
- render(){
- let receiverInfo = this.state.orderInfo.shippingVo || {},
- productList = this.state.orderInfo.orderItemVoList || [];
- let tableHeads = [
- {name: '商品图片', width: '10%'},
- {name: '商品信息', width: '45%'},
- {name: '单价', width: '15%'},
- {name: '数量', width: '15%'},
- {name: '合计', width: '15%'}
- ];
- return (
- <div id="page-wrapper">
- <PageTitle title="订单详情" />
- <div className="form-horizontal">
- <div className="form-group">
- <label className="col-md-2 control-label">订单号</label>
- <div className="col-md-5">
- <p className="form-control-static">{this.state.orderInfo.orderNo}</p>
- </div>
- </div>
- <div className="form-group">
- <label className="col-md-2 control-label">创建时间</label>
- <div className="col-md-5">
- <p className="form-control-static">{this.state.orderInfo.createTime}</p>
- </div>
- </div>
- <div className="form-group">
- <label className="col-md-2 control-label">收件人</label>
- <div className="col-md-5">
- <p className="form-control-static">
- {receiverInfo.receiverName},
- {receiverInfo.receiverProvince}
- {receiverInfo.receiverCity}
- {receiverInfo.receiverAddress}
- {receiverInfo.receiverMobile || receiverInfo.receiverPhone}
- </p>
- </div>
- </div>
- <div className="form-group">
- <label className="col-md-2 control-label">订单状态</label>
- <div className="col-md-5">
- <p className="form-control-static">
- {this.state.orderInfo.statusDesc}
- {
- this.state.orderInfo.status === 20
- ? <button className="btn btn-default btn-sm btn-send-goods"
- onClick={(e) => {this.onSendGoods(e)}}>立即发货</button>
- : null
- }
- </p>
- </div>
- </div>
- <div className="form-group">
- <label className="col-md-2 control-label">支付方式</label>
- <div className="col-md-5">
- <p className="form-control-static">
- {this.state.orderInfo.paymentTypeDesc}
- </p>
- </div>
- </div>
- <div className="form-group">
- <label className="col-md-2 control-label">订单金额</label>
- <div className="col-md-5">
- <p className="form-control-static">
- ¥{this.state.orderInfo.payment}
- </p>
- </div>
- </div>
- <div className="form-group">
- <label className="col-md-2 control-label">商品列表</label>
- <div className="col-md-10">
- <TableList tableHeads={tableHeads}>
- {
- productList.map((product, index) => {
- return (
- <tr key={index}>
- <td>
- <img className="p-img" alt={product.productName}
- src={`${this.state.orderInfo.imageHost}${product.productImage}`}/>
- </td>
- <td>{product.productName}</td>
- <td>¥{product.currentUnitPrice}</td>
- <td>{product.quantity}</td>
- <td>¥{product.totalPrice}</td>
- </tr>
- );
- })
- }
- </TableList>
- </div>
- </div>
- </div>
- </div>
- )
- }
- }
- export default OrderDetail;
React后台管理系统-订单管理的更多相关文章
- React后台管理系统-商品管理列表组件
1.商品列表页面结构 <div id="page-wrapper"> <PageTitle title="商品列表" ...
- 【共享单车】—— React后台管理系统开发手记:城市管理和订单管理
前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...
- 【共享单车】—— React后台管理系统开发手记:主页面架构设计
前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...
- 《React后台管理系统实战 :一》:目录结构、引入antd、引入路由、写login页面、使用antd的form登录组件、form前台验证、高阶函数/组件
实战 上接,笔记:https://blog.csdn.net/u010132177/article/details/104150177 https://gitee.com/pasaulis/react ...
- 《React后台管理系统实战 :二》antd左导航:cmd批量创建子/目录、用antd进行页面布局、分离左导航为单独组件、子路由、动态写左导航、css样式相对陷阱
一.admin页面布局及路由创建 0)cmd批量创建目录及子目录 //创建各个目录,及charts和子目录bar md home category product role user charts\b ...
- react后台管理系统路由方案及react-router原理解析
最近做了一个后台管理系统主体框架是基于React进行开发的,因此系统的路由管理,选用了react-router(4.3.1)插件进行路由页面的管理配置. 实现原理剖析 1.hash的方式 ...
- 【共享单车】—— React后台管理系统开发手记:项目工程化开发
前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...
- springboot学习笔记:11.springboot+shiro+mysql+mybatis(通用mapper)+freemarker+ztree+layui实现通用的java后台管理系统(权限管理+用户管理+菜单管理)
一.前言 经过前10篇文章,我们已经可以快速搭建一个springboot的web项目: 今天,我们在上一节基础上继续集成shiro框架,实现一个可以通用的后台管理系统:包括用户管理,角色管理,菜单管理 ...
- 【共享单车】—— React后台管理系统开发手记:员工管理之增删改查
前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...
随机推荐
- C. Permute Digits dfs大模拟
http://codeforces.com/contest/915/problem/C 这题麻烦在前导0可以直接删除,比如 1001 100 应该输出11就好 我的做法是用dfs,每一位每一位的比较. ...
- 性能测试工具Jmeter08-Jmeter断言(检查点)
断言是在请求的返回层面增加一层判断机制.因为请求成功了,并不代表结果一定正确,因此需要检测机制提高测试准确性. 下面介绍常用的jmeter三种断言 1.响应断言 例如: 模式匹配规则 2.Size A ...
- 什么是JavaScript Souce Map
第一部分 我们经常可以看到后缀名为.map的文件,比如我们下载得到bootstrap的css文件,如下所示: 不难理解bootstrap.css. bootstrap.min.css.等这些常规的代码 ...
- git 基础教程
git 提交 全部文件 git add . git add xx命令可以将xx文件添加到暂存区,如果有很多改动可以通过 git add -A .来一次添加所有改变的文件.注意 -A 选项后面还有一个 ...
- POJ 3189——Steady Cow Assignment——————【多重匹配、二分枚举区间长度】
Steady Cow Assignment Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I ...
- Http Client 源码分析
/** * 此接口仅代表HTTP请求执行的最基本约定. * 它对请求执行过程没有任何限制或特定的细节,并将状态管理.身份验证和重定向处理的细节留给单个实现. */ public interface H ...
- 在CentOS上配置MySQL服务
#!/bin/sh # Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB # Thi ...
- SQL Stored Procedure and Function
Anything can be programmable with defined syntax and common lib. )) -- Add the parameters for the st ...
- 【起航计划 024】2015 起航计划 Android APIDemo的魔鬼步伐 23 App->Notification->IncomingMessage 状态栏通知
应用程序可以使用Notifications来通知用户某个事件发生了(如收到短信).类NotificationManager 用来处理Notification, NotificationManager可 ...
- DevExpress控件扩展之表达式编辑器
业务需求: 业务工作中经常需要对表格中的数据进行处理,包括过滤.复合计算等.过滤需要有过滤条件,复合计算需要计算公式.这两种场景都需要一个表达式编辑器.GridControl自带过滤条件的表达式编辑器 ...