zangbin 2 yıl önce
ebeveyn
işleme
c73889d90c

+ 2 - 1
tour-module/src/main/java/com/tour/module/domain/AgentWithdrawal.java

@@ -21,7 +21,7 @@ import java.util.Map;
 
 /**
  * 代理商提现记录对象 tour_agent_withdrawal
- * 
+ *
  * @author zoe
  * @date 2023-05-23
  */
@@ -101,5 +101,6 @@ private static final long serialVersionUID=1L;
     @TableField(exist = false)
     private String agentName;
 
+    @TableField(exist = false)
     private List<Long> agentIds;
 }

+ 2 - 1
tour-module/src/main/java/com/tour/module/domain/Order.java

@@ -11,6 +11,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
 import java.util.Date;
@@ -19,7 +20,7 @@ import java.util.Map;
 
 /**
  * 订单对象 tour_order
- * 
+ *
  * @author zoe
  * @date 2023-05-23
  */

+ 103 - 0
tour-module/src/main/java/com/tour/module/domain/dto/OmsOrderDto.java

@@ -0,0 +1,103 @@
+package com.tour.module.domain.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * Demo class
+ *
+ * @author zangbin
+ * @date 2023/6/7 15:08
+ */
+@Data
+public class OmsOrderDto implements Serializable {
+
+    /** $column.columnComment */
+    private Long orderId;
+    @ApiModelProperty(value = "订单编号")
+    private String orderNo;
+    /** $column.columnComment */
+    private Long memberId;
+
+    /** $column.columnComment */
+    @ApiModelProperty(value = "卡密")
+    private String cardKey;
+    private Integer cardType;
+    /** $column.columnComment */
+    private Long agentId;
+
+    /** 线路id */
+    @ApiModelProperty(value = "线路id")
+    private Long lineId;
+
+    @ApiModelProperty(value = "出行人")
+    private String travelers;
+    /** 出行人id(联系人id) */
+    private String travelerIds;
+
+    /** 行程开始时间 */
+    @ApiModelProperty(value = "行程开始时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date travelStartTime;
+
+    /** 行程结束时间 */
+    @ApiModelProperty(value = "行程结束时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date travelEndTime;
+
+    /** 0 待出行 1出行中 3 已完成 -1 取消 */
+    @ApiModelProperty(value = "0 待出行 1出行中 3 已完成 -1 取消 ")
+    private Integer status;
+
+    /** 0未到达待联系地接 1已到达,地接已接到 */
+    @ApiModelProperty(value = "0未到达待联系地接 1已到达,地接已接到 ")
+    private Integer hasReach;
+
+    /** 行程车票,多张车票图片逗号隔开 */
+    private String travelDetail;
+
+    /** 创建者 */
+    private String createBy;
+
+    /** 更新者 */
+    private String updateBy;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /** 更新时间 */
+    private Date updateTime;
+
+    /** 删除标识位: 0正常 1删除 */
+    private Integer deleted;
+
+    private String lineTitle;
+
+    private String limeImage;
+
+    private Integer lineType;
+
+    /** 省 */
+    private String provinceName;
+
+    /** 市 */
+    private String cityName;
+
+    /** 原价 */
+    private BigDecimal originalPrice;
+
+    /** 会员价 */
+
+    private BigDecimal memberPrice;
+
+    private String agentName;
+}

+ 65 - 0
tour-module/src/main/java/com/tour/module/domain/dto/SystemOrderDto.java

@@ -0,0 +1,65 @@
+package com.tour.module.domain.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class SystemOrderDto implements Serializable {
+
+    /** $column.columnComment */
+    private Long orderId;
+    private String orderNo;
+    /** $column.columnComment */
+    private Long memberId;
+
+    /** $column.columnComment */
+    private String cardKey;
+    private Integer cardType;
+    /** $column.columnComment */
+    private Long agentId;
+
+    /** 线路id */
+    private Long lineId;
+    private String travelers;
+    /** 出行人id(联系人id) */
+    private String travelerIds;
+
+    /** 行程开始时间 */
+    private String travelStartTime;
+
+    /** 行程结束时间 */
+    private String travelEndTime;
+
+    /** 0 待出行 1出行中 3 已完成 -1 取消 */
+    private Integer status;
+
+    /** 0未到达待联系地接 1已到达,地接已接到 */
+    private Integer hasReach;
+
+    /** 行程车票,多张车票图片逗号隔开 */
+    private String travelDetail;
+
+    /** 创建者 */
+    private String createBy;
+
+    /** 更新者 */
+    private String updateBy;
+
+    /** 删除标识位: 0正常 1删除 */
+    private Integer deleted;
+
+    private List<Long> agentIds;
+
+    private Long aId;
+
+    private String firstStartTime;
+
+    private String firstEndTime;
+
+    private String secondStartTime;
+
+    private String secondEndTime;
+}

+ 7 - 0
tour-module/src/main/java/com/tour/module/mapper/OrderMapper.java

@@ -2,7 +2,12 @@ package com.tour.module.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.tour.module.domain.Order;
+import com.tour.module.domain.dto.OmsOrderDto;
+import com.tour.module.domain.dto.SystemOrderDto;
 import com.tour.module.vo.OrderDetailVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 订单Mapper接口
@@ -13,4 +18,6 @@ import com.tour.module.vo.OrderDetailVo;
 public interface OrderMapper extends BaseMapper<Order> {
 
     OrderDetailVo getOrderDetail(Long orderId);
+
+    List<OmsOrderDto> queryPageList(@Param("params") SystemOrderDto order);
 }

+ 5 - 0
tour-module/src/main/java/com/tour/module/service/IOrderService.java

@@ -1,7 +1,10 @@
 package com.tour.module.service;
 
+import com.tour.common.core.domain.entity.SysUser;
 import com.tour.module.domain.Order;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.tour.module.domain.dto.OmsOrderDto;
+import com.tour.module.domain.dto.SystemOrderDto;
 import com.tour.module.vo.OrderDetailVo;
 import com.tour.module.vo.OrderVo;
 
@@ -22,6 +25,8 @@ public interface IOrderService extends IService<Order> {
      */
     List<Order> queryList(Order order);
 
+    List<OmsOrderDto> queryPageList(SystemOrderDto order, SysUser user);
+
     Long addOrder(OrderVo order);
 
     Boolean  addOrderContact(OrderVo order);

+ 52 - 0
tour-module/src/main/java/com/tour/module/service/impl/OrderServiceImpl.java

@@ -2,11 +2,16 @@ package com.tour.module.service.impl;
 
 import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.google.common.collect.Lists;
+import com.tour.common.core.domain.entity.SysUser;
+import com.tour.common.enums.UserTypeEnums;
 import com.tour.common.exception.CustomException;
 import com.tour.common.utils.SnCodeUtils;
 import com.tour.module.domain.Agent;
 import com.tour.module.domain.Card;
 import com.tour.module.domain.Contacts;
+import com.tour.module.domain.dto.OmsOrderDto;
+import com.tour.module.domain.dto.SystemOrderDto;
 import com.tour.module.enums.StatusEnum;
 import com.tour.module.service.IAgentService;
 import com.tour.module.service.ICardService;
@@ -26,6 +31,7 @@ import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 订单Service业务层处理
@@ -73,6 +79,52 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     }
 
     @Override
+    public List<OmsOrderDto> queryPageList(SystemOrderDto order, SysUser user) {
+        boolean result = this.handleListSearchCondition(order, user);
+        if (!result) {
+            return Lists.newArrayList();
+        }
+        List<OmsOrderDto> orderList = baseMapper.queryPageList(order);
+        if (CollectionUtils.isEmpty(orderList)) {
+            return Lists.newArrayList();
+        }
+
+        // 代理商名称
+        List<Long> agentIds = orderList.stream().map(OmsOrderDto::getAgentId).collect(Collectors.toList());
+        List<Agent> agentList = agentService.list(new QueryWrapper<Agent>().in("id", agentIds));
+        Map<Long, Agent> agentMap = Optional.of(agentList).map(list -> list.stream().collect(Collectors.toMap(Agent::getId, v -> v, (v1, v2) -> v1))).orElse(new HashMap<>());
+        for (OmsOrderDto o : orderList) {
+            // 增加代理商名称
+            Agent agent = agentMap.get(o.getAgentId());
+            o.setAgentName(agent == null ? null : agent.getAgentName());
+        }
+        return orderList;
+    }
+
+    private boolean handleListSearchCondition(SystemOrderDto order, SysUser user) {
+        boolean result = true;
+        if(UserTypeEnums.AGENT.getCode().equals(user.getType()) && user.getAgentId() != null) {
+            List<Long> agentIds = agentService.listAgent(user.getAgentId());
+            if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(agentIds)) {
+                result = false;
+            }
+            order.setAgentIds(agentIds);
+        }
+        if (order.getAId() != null) {
+            List<Long> aIds = agentService.listAgent(order.getAId());
+            if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(order.getAgentIds())) {
+                order.setAgentIds(aIds);
+            } else {
+                order.getAgentIds().retainAll(aIds);
+            }
+            if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(order.getAgentIds())) {
+                result = false;
+            }
+        }
+        return result;
+    }
+
+    @Override
     public Long addOrder(OrderVo orderVo) {
         Card card = cardService.getOne(new QueryWrapper<Card>().eq("card_key", orderVo.getCardKey()).eq("status", 0));
         if(card==null){

+ 63 - 2
tour-module/src/main/resources/mapper/module/OrderMapper.xml

@@ -3,7 +3,7 @@
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.tour.module.mapper.OrderMapper">
-    
+
     <resultMap type="Order" id="OrderResult">
         <result property="orderId"    column="order_id"    />
         <result property="memberId"    column="member_id"    />
@@ -26,4 +26,65 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         from tour_order o join tour_line l on o.line_id = l.id where o.order_id=#{orderId}
     </select>
 
-</mapper>
+    <select id="queryPageList" resultType="com.tour.module.domain.dto.OmsOrderDto">
+        SELECT
+            o.order_id,
+            o.travel_start_time,
+            o.travel_end_time,
+            o.card_key,
+            o.order_no,
+            o.card_type,
+            o.agent_id,
+            o.travelers,
+            o.status,
+            o.has_reach,
+            l.title as lineTitle,
+            l.image as limeImage,
+            l.type as lineType,
+            l.original_price,
+            l.member_price,
+            l.province_name,
+            l.city_name
+        from tour_order o join tour_line l on o.line_id = l.id
+        where o.deleted = 0
+        <if test="params.agentIds != null and params.agentIds.size > 0">
+            AND
+            o.agent_Id in
+            <foreach collection="params.agentIds" index="index" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="params.orderNo != null and params.orderNo != ''">
+            AND o.order_no like concat('%', #{params.orderNo}, '%')
+        </if>
+        <if test="params.cardKey != null and params.cardKey != ''">
+            AND o.card_key like concat('%', #{params.cardKey}, '%')
+        </if>
+        <if test="params.cardType != null">
+            AND o.card_type = #{params.cardType}
+        </if>
+        <if test="params.status != null">
+            AND o.status = #{params.status}
+        </if>
+         <if test="params.hasReach != null">
+            AND o.has_reach = #{params.hasReach}
+        </if>
+        <if test="params.travelers != null and params.travelers != ''">
+            AND find_in_set(#{params.travelers}, o.travelers)
+        </if>
+        <if test="params.firstStartTime != null and params.firstStartTime != ''">
+            AND o.travel_start_time >= #{params.firstStartTime}
+        </if>
+        <if test="params.firstEndTime != null and params.firstEndTime != ''">
+            AND #{params.firstEndTime} >= o.travel_start_time
+        </if>
+        <if test="params.secondStartTime != null and params.secondStartTime != ''">
+            AND o.travel_end_time >= #{params.secondStartTime}
+        </if>
+        <if test="params.secondEndTime != null and params.secondEndTime != ''">
+            AND #{params.secondEndTime} >= o.travel_end_time
+        </if>
+        ORDER BY o.create_time DESC
+    </select>
+
+</mapper>

+ 13 - 3
tour-oms/src/main/java/com/tour/web/controller/OrderController.java

@@ -3,6 +3,11 @@ package com.tour.web.controller;
 import java.util.List;
 import java.util.Arrays;
 
+import com.tour.common.core.domain.entity.SysUser;
+import com.tour.common.enums.UserTypeEnums;
+import com.tour.core.utils.HttpContextUtils;
+import com.tour.module.domain.dto.OmsOrderDto;
+import com.tour.module.domain.dto.SystemOrderDto;
 import lombok.RequiredArgsConstructor;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,7 +30,7 @@ import com.tour.common.core.page.TableDataInfo;
 
 /**
  * 订单Controller
- * 
+ *
  * @author zoe
  * @date 2023-05-23
  */
@@ -41,9 +46,14 @@ public class OrderController extends BaseController {
      */
     @PreAuthorize("@ss.hasPermi('module:order:list')")
     @GetMapping("/list")
-    public TableDataInfo list(Order order) {
+    public TableDataInfo list(SystemOrderDto order) {
+        SysUser user = getSysUser();
+        if (user.getType().equals(UserTypeEnums.AGENT.getCode()) && user.getAgentId() != null){
+            order.setAgentId(user.getAgentId());
+        }
+
         startPage();
-        List<Order> list = iOrderService.queryList(order);
+        List<OmsOrderDto> list = iOrderService.queryPageList(order, user);
         return getDataTable(list);
     }
 

+ 1 - 1
web-ui/src/api/module/order.js

@@ -12,7 +12,7 @@ export function listOrder(query) {
 // 查询订单(单作品单订单)详细
 export function getOrder(id) {
   return request({
-    url: '/module/order/info/' + id,
+    url: '/module/order/' + id,
     method: 'get'
   })
 }

+ 416 - 0
web-ui/src/views/module/order/index.vue

@@ -0,0 +1,416 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="订单编号" prop="orderNo">
+        <el-input
+          v-model="queryParams.orderNo"
+          placeholder="请输入订单编号"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="卡密" prop="cardKey">
+        <el-input
+          v-model="queryParams.cardKey"
+          placeholder="请输入卡密"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="卡类型" prop="cardType">
+        <el-select v-model="queryParams.cardType" placeholder="请选择卡类型" clearable >
+          <el-option v-for="item in cardTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="出行状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="请选择出行状态" clearable >
+          <el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="到达状态" prop="hasReach">
+        <el-select v-model="queryParams.hasReach" placeholder="请选择到达状态" clearable >
+          <el-option v-for="item in hasReachOptions" :key="item.value" :label="item.label" :value="item.value" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="出行人姓名" prop="travelers" label-width="auto">
+        <el-input
+          v-model="queryParams.travelers"
+          placeholder="请输入出行人姓名"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="行程开始时间" prop="travelStartTime" label-width="auto">
+        <el-date-picker
+          v-model="startDate"
+          type="datetimerange"
+          start-placeholder="请选择"
+          range-separator="至"
+          end-placeholder="请选择"
+          :default-time="['00:00:00', '23:59:59']"
+          value-format="yyyy-MM-dd HH:mm:ss"
+          format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
+      </el-form-item>
+      <el-form-item label="行程结束时间" prop="travelEndTime" label-width="auto">
+        <el-date-picker
+          v-model="endDate"
+          type="datetimerange"
+          start-placeholder="请选择"
+          range-separator="至"
+          end-placeholder="请选择"
+          :default-time="['00:00:00', '23:59:59']"
+          value-format="yyyy-MM-dd HH:mm:ss"
+          format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search"  @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh"  @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-table v-loading="loading" :data="orderList" @selection-change="handleSelectionChange" stripe>
+      <el-table-column label="线路" align="center" prop="line" width="300">
+        <template slot-scope="scope">
+            <div style="display:flex">
+                <div><img :src="scope.row.image" style="width: 70px; height: 70px" /></div>
+                <div style="margin-left: 20px;">
+                    <div style="text-align: left;font-size: 15px;font-weight: bold;">{{ scope.row.lineTitle }}</div>
+                    <div>
+                        <span style="text-decoration: line-through">原价:{{ scope.row.originalPrice}}</span>
+                        <span style="color:red" v-if="scope.row.memberPrice != undefined"> / 会员价:{{ scope.row.memberPrice}}</span>
+                    </div>
+                    <div style="text-align: left;">
+                        {{ scope.row.provinceName}} - {{ scope.row.cityName}}
+                        <el-tag v-if="scope.row.lineType == 1" type="danger" effect="plain">热门</el-tag>
+                        <el-tag v-if="scope.row.lineType == 2" effect="plain">品质</el-tag>
+                        <el-tag v-else type="info" effect="plain">经典</el-tag>
+                    </div>
+                </div>
+            </div>
+        </template>
+      </el-table-column>
+      <el-table-column label="订单编号" align="center" prop="orderNo" />
+      <el-table-column label="卡信息" align="center" prop="card">
+        <template slot-scope="scope">
+            <span>{{ scope.row.cardKey }}</span><br/>
+            <span v-if="scope.row.cardType == 1">会员卡</span>
+            <span v-else>旅行卡</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="出行人" align="center" prop="travelers" />
+      <el-table-column label="行程时间" align="center" prop="travelTime">
+        <template slot-scope="scope">
+            <span v-if="scope.row.travelStartTime == undefined && scope.row.travelEndTime == undefined">
+                -- 至 --
+            </span>
+            <span v-else>{{ scope.row.travelStartTime }} 至 {{scope.row.travelEndTime }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="状态" align="center" prop="status">
+        <template slot-scope="scope">
+            <el-tag v-if="scope.row.status== 0">待出行</el-tag>
+            <el-tag v-if="scope.row.status== 1" type="warning">
+                出行中
+                <span v-if="scope.row.hasReach == 0">-未到达</span>
+                <span v-if="scope.row.hasReach == 1">-已到达</span>
+            </el-tag>
+            <el-tag v-if="scope.row.status== 3" type="success">已完成</el-tag>
+            <el-tag v-if="scope.row.status== -1" type="danger">取消</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="代理商" align="center" prop="agentName" />
+
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="150">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="changeStatus(scope.row)"
+          >更改状态</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-date"
+            v-if="scope.row.status == 0"
+            @click="setTravelTime(scope.row)"
+          >设置出行日期</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <el-dialog title="设置出行日期" :visible.sync="travelVisible" width="30%" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules">
+        <el-form-item prop="travelTime">
+          <el-date-picker
+            v-model="date"
+            value-format="yyyy-MM-dd HH:mm:ss"
+            type="datetimerange"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期">
+          </el-date-picker>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="travelVisible = false">取 消</el-button>
+        <el-button type="primary" @click="submitTravelForm">确 定</el-button>
+      </span>
+    </el-dialog>
+
+    <el-dialog title="更改出行状态" :visible.sync="statusVisible" width="30%" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio :label="0">待出行</el-radio>
+            <el-radio :label="1">出行中</el-radio>
+            <el-radio :label="3">已完成</el-radio>
+            <el-radio :label="-1">取消</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="到达状态" prop="hasReach">
+          <el-radio-group v-model="form.hasReach">
+            <el-radio :label="0">未到达</el-radio>
+            <el-radio :label="1">已到达</el-radio>
+          </el-radio-group>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="statusVisible = false">取 消</el-button>
+        <el-button type="primary" @click="submitStautsForm">确 定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listOrder, getOrder, updateOrder } from "@/api/module/order";
+import moment from "moment";
+
+export default {
+  name: "order",
+  components: {
+  },
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      travelVisible: false,
+      statusVisible: false,
+      // 总条数
+      total: 0,
+      // 订单数据
+      orderList: [],
+      date: [],
+      startDate: [],
+      endDate: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        orderNo: '',
+        cardKey: '',
+        cardType: undefined,
+        status: undefined,
+        hasReach: undefined,
+        travelers: '',
+        firstStartTime: '',
+        firstEndTime: '',
+        secondStartTime: '',
+        secondEndTime: ''
+      },
+      cardTypeOptions: [
+        {
+            value: 1,
+            label: '会员卡'
+        },{
+            value: 2,
+            label: '旅游卡'
+        }
+      ],
+      statusOptions: [
+        {
+            value: 0,
+            label: '待出行'
+        },{
+            value: 1,
+            label: '出行中'
+        },{
+            value: 3,
+            label: '已完成'
+        },{
+            value: -1,
+            label: '取消'
+        }
+      ],
+      hasReachOptions: [
+        {
+            value: 0,
+            label: '未到达'
+        },{
+            value: 1,
+            label: '已到达'
+        }
+      ],
+      // 表单参数
+      form: {
+        orderId: '',
+        travelStartTime: '',
+        travelEndTime: ''
+      },
+      // 表单校验
+      rules: {
+      },
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    formatDate(time) {
+      return moment(time).format("yyyy-MM-dd HH:mm:ss");
+    },
+
+    getOrderInfo(id) {
+      this.date = []
+      this.form.travelStartTime = "";
+      this.form.travelEndTime = "";
+      getOrder(id).then(response => {
+        this.form = response.data
+        // console.log('form', this.form)
+        if (this.form.travelStartTime != undefined && this.form.travelEndTime != undefined) {
+          this.$set(this.date, 0, this.form.travelStartTime)
+          this.$set(this.date, 1, this.form.travelEndTime)
+          // console.log('date', this.date)
+        } 
+      })
+    },
+
+    changeStatus(row) {
+      this.statusVisible = true;
+      this.form.orderId = row.orderId;
+      this.getOrderInfo(row.orderId);
+    },
+
+    setTravelTime(row) {
+      this.travelVisible = true;
+      this.form.orderId = row.orderId;
+      this.getOrderInfo(row.orderId);
+    },
+    submitStautsForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          this.update();
+        }
+      })
+    },
+    submitTravelForm() {
+      if (this.date !== null && this.date !== []) {
+        if (this.date[0] !== undefined) {
+          this.form.travelStartTime = this.date[0];
+          this.form.travelEndTime = this.date[1];
+        }
+      } else {
+        this.$message.error("出行日期不能为空!");
+        return; 
+      }
+      this.update();
+    },
+    update() {
+      // console.log('form', this.form)
+      updateOrder(this.form).then(response => {
+        this.msgSuccess("修改成功");
+        this.travelVisible = false;
+        this.statusVisible = false;
+        this.getList();
+      });
+    },
+    /** 查询字典类型列表 */
+    getList() {
+      this.loading = true;
+      if([] != this.startDate && undefined != this.startDate) {
+        this.queryParams.firstStartTime = this.startDate[0];
+        this.queryParams.firstEndTime = this.startDate[1];
+      }else {
+        this.queryParams.firstStartTime = "";
+        this.queryParams.firstEndTime = "";
+      }
+      if([] != this.endDate && undefined != this.endDate) {
+        this.queryParams.secondStartTime = this.endDate[0];
+        this.queryParams.secondEndTime = this.endDate[1];
+      }else {
+        this.queryParams.secondStartTime = "";
+        this.queryParams.secondEndTime = "";
+      }
+      listOrder(this.queryParams).then(response => {
+        this.orderList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.startDate = [];
+      this.queryParams.firstStartTime = "";
+      this.queryParams.firstEndTime = "";
+      this.endDate = [];
+      this.queryParams.secondStartTime = "";
+      this.queryParams.secondEndTime = "";
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.dictId)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const dictId = row.dictId || this.ids
+      getDictType(dictId).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改字典类型";
+      });
+    }
+  }
+};
+</script>