ソースを参照

Merge branch 'linwenxin_dev' of https://gogs.zfire.top/zfire-front/zfire-newmall-admin

linwenxin 1 年間 前
コミット
729d18dce0

+ 97 - 0
src/api/orderManagement.js

@@ -1,5 +1,13 @@
 import request, { postBlob, getBlob, handleImport } from '@/utils/request'
 
+export function esOrderListRefund(params) {
+  return request({
+    url: '/esOrder/listRefund',
+    method: 'post',
+    params
+  })
+}
+
 export function esOrderList(params) {
   return request({
     url: '/esOrder/list',
@@ -8,6 +16,22 @@ export function esOrderList(params) {
   })
 }
 
+export function esOrderDetailRefund(params) {
+  return request({
+    url: '/esOrder/detailRefund',
+    method: 'post',
+    params
+  })
+}
+
+export function esOrderDetail(params) {
+  return request({
+    url: '/esOrder/detail',
+    method: 'post',
+    params
+  })
+}
+
 export function esOrderAdd(data) {
   return request({
     url: '/esOrder/add',
@@ -15,3 +39,76 @@ export function esOrderAdd(data) {
     data
   })
 }
+
+export function esOrderSend(params) {
+  return request({
+    url: '/esOrder/send',
+    method: 'post',
+    params
+  })
+}
+
+export function esOrderExpress(params) {
+  return request({
+    url: '/esOrder/express',
+    method: 'get',
+    params
+  })
+}
+
+export function esOrderRefund(params) {
+  return request({
+    url: '/esOrder/refund',
+    method: 'post',
+    params
+  })
+}
+
+export function esOrderPayPrice(params) {
+  return request({
+    url: '/esOrder/payPrice',
+    method: 'post',
+    params
+  })
+}
+
+export function esOrderListExcel(params) {
+  return request({
+    url: '/esOrder/listExcel',
+    method: 'post',
+    params
+  })
+}
+
+export function esOrderPayOk(params) {
+  return request({
+    url: '/esOrder/payOk',
+    method: 'post',
+    params
+  })
+}
+
+export function esOrderCancel(params) {
+  return request({
+    url: '/esOrder/cancel',
+    method: 'post',
+    params
+  })
+}
+
+export function esOrderRefundPrice(params) {
+  return request({
+    url: '/esOrder/refundPrice',
+    method: 'post',
+    params
+  })
+}
+
+export function esOrderPayPriceList(params) {
+  return request({
+    url: '/esOrder/payPriceList',
+    method: 'post',
+    params
+  })
+}
+

+ 399 - 0
src/views/secondHandMall/activistOrder/details.vue

@@ -0,0 +1,399 @@
+<template>
+  <zj-page-container>
+    <zj-page-fill>
+      <div style="box-sizing: border-box; padding:10px;">
+        <div>
+          <div class="order-main">
+            <el-row style="padding: 15px 15px 10px">
+              <el-col :span="24">
+                <div class="order-main-title">
+                  <span>售后编号:{{ orderDetail.esOrderRefundId }}</span>
+                  <span>订单号:{{ orderDetail.esOrderId }}</span>
+                  <span>下单时间:{{ orderDetail.createTime }}</span>
+                </div>
+              </el-col>
+            </el-row>
+            <div style="width: 100%; padding: 10px 15px 15px 15px">
+              <el-row>
+                <el-col :span="10">
+                  <div v-if="~['WAIT'].indexOf(orderDetail.status)">
+                    <el-form ref="formTHref" :model="formTH" label-width="80px" size="mini">
+                      <el-form-item label="处理结果" prop="refundType" :rules="[{ required: true, message: '请选择', trigger: 'blur' }]">
+                        <el-radio-group v-model="formTH.refundType">
+                          <el-radio label="GOODS">仅退货</el-radio>
+                          <el-radio label="REFUND">仅退款</el-radio>
+                          <el-radio label="GOODS_REFUND">退货退款</el-radio>
+                          <el-radio label="FAIL">驳回</el-radio>
+                        </el-radio-group>
+                      </el-form-item>
+                      <el-form-item v-if="~['GOODS','GOODS_REFUND'].indexOf(formTH.refundType)" label="退货数量" prop="refundNum" :rules="[{ required: true, message: '请填写', trigger: 'blur' }]">
+                        <el-input v-model="formTH.refundNum"></el-input>
+                      </el-form-item>
+                      <el-form-item v-if="~['REFUND','GOODS_REFUND'].indexOf(formTH.refundType)" label="退款金额" prop="refundPrice" :rules="[{ required: true, message: '请填写', trigger: 'blur' }]">
+                        <el-input type="number" v-model="formTH.refundPrice"></el-input>
+                      </el-form-item>
+                      <el-form-item label="备注">
+                        <el-input type="textarea" v-model="formTH.refundRemark"></el-input>
+                      </el-form-item>
+                    </el-form>
+                  </div>
+                  <div v-else style="display: flex;">
+                    <div>
+                      <div class="order-main-status">
+                        <span>{{ ({WAIT: "平台处理", OVER: "完成"})[orderDetail.status] }}</span>
+                      </div>
+                    </div>
+                  </div>
+                </el-col>
+                <el-col :span="14" style="padding-top: 10px;">
+                  <el-steps :active="zhuangtai" align-center>
+                    <el-step title="买家申请" ></el-step>
+                    <el-step title="平台处理" ></el-step>
+                    <el-step title="维权完成" ></el-step>
+                  </el-steps>
+                </el-col>
+              </el-row>
+            </div>
+          </div>
+
+          <div class="order-receive-info">
+            <el-row :gutter="10">
+              <el-col :xs="24" :sm="24" :md="8" :lg="8" :xl="8">
+                <div class='info'>
+                  <div class='info_title'>卖家信息</div>
+                  <div class='info_bottom'>
+                    <div v-if="orderDetail.sellUrl" class='info_bottom_lt'>
+                      <el-image style='width: 40px; height: 40px' :src="orderDetail.sellUrl"></el-image>
+                    </div>
+                    <div class='info_bottom_rt'>
+                      <div>昵称:{{orderDetail.sellName}}</div>
+                      <div>手机号:{{orderDetail.sellMobile}}</div>
+                      <div>发布时间:{{orderDetail.sellTime}}</div>
+                    </div>
+                  </div>
+                </div>
+              </el-col>
+              <el-col :xs="24" :sm="24" :md="8" :lg="8" :xl="8">
+                <div class='info'>
+                  <div class='info_title'>买家信息</div>
+                  <div class='info_bottom'>
+                    <div v-if="orderDetail.wechatUserUrl" class='info_bottom_lt'>
+                      <el-image style='width: 40px; height: 40px' :src="orderDetail.wechatUserUrl">
+                      </el-image>
+                    </div>
+                    <div class='info_bottom_rt'>
+                      <div v-if="orderDetail.wechatUserName">昵称:{{orderDetail.wechatUserName}}</div>
+                      <div v-if="orderDetail.wechatUserMobile">手机号:{{orderDetail.wechatUserMobile}}</div>
+                      <div>收货人信息:({{orderDetail.userName}}){{orderDetail.userMobile}}</div>
+                      <div>收货人地址:{{ orderDetail.province + orderDetail.city + orderDetail.area + orderDetail.street + orderDetail.receAddress }}</div>
+                      <div>支付方式:{{({WECHAT:"微信支付", CASH:"到店支付", TRANSFER:"转账支付"})[orderDetail.payType]}}</div>
+                    </div>
+                  </div>
+                </div>
+              </el-col>
+              <el-col v-if="orderDetail.status=='OVER'" :xs="24" :sm="24" :md="8" :lg="8" :xl="8">
+                <div class='info'>
+                  <div class='info_title'>维权信息</div>
+                  <div class='info_bottom'>
+                    <div class='info_bottom_rt'>
+                      <div>退款方式:{{({REFUND: "退款", GOODS_REFUND: "退货退款", FAIL: "驳回", GOODS: "退货"})[orderDetail.refundType]}}</div>
+                      <div>退款原因:{{orderDetail.refundNote}}</div>
+                      <div>退款凭证:<el-image v-for="(url,index) in (orderDetail.refundUrl ? orderDetail.refundUrl.split(',') : [])" :preview-src-list="(orderDetail.refundUrl ? orderDetail.refundUrl.split(',') : [])" :key="index" style="width: 60px; height: 60px" :src="url"></el-image>
+                      </div>
+                    </div>
+                  </div>
+                </div>
+              </el-col>
+            </el-row>
+          </div>
+
+          <h3>商品信息</h3>
+          <div class="order-main" style="border:none;">
+            <!-- 订单表格 -->
+            <el-table :data="[orderDetail]" style="width: 100%" border>
+              <el-table-column label="商品信息" min-width="200">
+                <template slot-scope="scope">
+                  <el-row>
+                    <el-col v-if="scope.row.goodsUrl" :span="6">
+                      <el-image style="width: 40px; height: 40px" :src="scope.row.goodsUrl">
+                        <div slot="error" class="image-slot">
+                          <i class="el-icon-picture-outline"></i>
+                        </div>
+                      </el-image>
+                    </el-col>
+                    <el-col :span="18">
+                      <div>{{ scope.row.esGoodsName }}</div>
+                    </el-col>
+                  </el-row>
+                </template>
+              </el-table-column>
+              <el-table-column prop="goodsPrice" label="单价" align="center"></el-table-column>
+              <el-table-column prop="num" label="数量" align="center"></el-table-column>
+              <el-table-column prop="totalAmount" label="商品总金额" align="center" min-width="100"></el-table-column>
+              <el-table-column prop="refundPrice" label="退款金额" align="center"></el-table-column>
+            </el-table>
+          </div>
+
+          <h3 v-if="orderDetail.status=='OVER'">退款记录</h3>
+          <div v-if="orderDetail.status=='OVER'" class="order-main" style="border:none;">
+            <!-- 订单表格 -->
+            <el-table :data="[orderDetail]" style="width: 100%" border>
+              <el-table-column label="处理结果" min-width="200">
+                <template slot-scope="scope">
+                  {{({REFUND: "退款", GOODS_REFUND: "退货退款", FAIL: "驳回", GOODS: "退货"})[scope.row.refundType]}}
+                </template>
+              </el-table-column>
+              <el-table-column prop="refundNum" label="退货数量" align="center"></el-table-column>
+              <el-table-column prop="refundPrice" label="退款金额" align="center"></el-table-column>
+              <el-table-column prop="refundRemark" label="备注" align="center" min-width="100"></el-table-column>
+              <el-table-column prop="refundName" label="退款人" align="center"></el-table-column>
+              <el-table-column prop="refundTime" label="退款时间" align="center"></el-table-column>
+            </el-table>
+          </div>
+
+        </div>
+      </div>
+    </zj-page-fill>
+    <div v-if="~['WAIT'].indexOf(orderDetail.status)" style="box-sizing: border-box; padding: 10px; text-align: right;">
+      <el-button type="primary" size="small" @click="faqituikuan">确定</el-button>
+    </div>
+  </zj-page-container>
+</template>
+
+<script>
+import { esOrderDetailRefund, esOrderRefundPrice } from "@/api/orderManagement";
+export default {
+  props:{
+    detailsId: {
+      type: [String, Number],
+      default: ""
+    },
+    detailsType: {
+      type: [String, Number],
+      default: ""
+    },
+  },
+  data() {
+    return {
+      detailsTypeCp: this.detailsType,
+      // 退货退款表单
+      formTH: {
+
+      },
+      // 订单详情
+      orderDetail: {
+      },
+    }
+  },
+  computed:{
+    zhuangtai(){
+      return  !!~['WAIT'].indexOf(this.orderDetail.status)?2:!!~['OVER'].indexOf(this.orderDetail.status)?3:-1
+    }
+  },
+  watch: {
+    detailsId: {
+      handler(newVal, oldVal) {
+        this.getEsOrderDetail()
+      },
+      deep: true,
+      immediate: true,
+    },
+  },
+  methods: {
+    getEsOrderDetail(){
+      esOrderDetailRefund({
+        esOrderRefundId: this.detailsId
+      }).then(res=>{
+        this.orderDetail = {
+          ...res.data
+        }
+      })
+    },
+    faqituikuan(){
+      this.$refs.formTHref.validate((valid) => {
+        if (valid) {
+          esOrderRefundPrice({
+            ...this.formTH,
+            esOrderRefundId: this.detailsId
+          }).then(res=>{
+            this.$message({ type: 'success', message: `操作成功!` })
+            this.$emit("removeTab")
+          })
+        }
+      });
+    },
+  }
+}
+</script>
+
+<style scoped lang="scss">
+.info {
+  .info_title {
+    font-size: 16px;
+    font-weight: 700;
+  }
+
+  .info_bottom {
+    display: flex;
+    margin: 10px 0;
+
+    .info_bottom_lt {
+      width: 40px;
+      height: 40px;
+    }
+
+    .info_bottom_rt {
+      padding: 0 0 0 10px;
+      line-height: 30px;
+
+      .photoPZ {
+        display: inline-block;
+        vertical-align: text-top;
+      }
+    }
+  }
+}
+
+.order-main {
+  margin-top: 15px;
+  border: 1px solid #e5e5e5;
+
+  .order-main-title {
+    font-size: 14px;
+  }
+
+  .order-main-title span {
+    margin-right: 15px;
+  }
+
+  .order-main-status {
+    padding: 15px 0;
+    font-size: 24px;
+    color: #409EFF;
+  }
+
+  .order-main-opt-btn {
+    padding: 15px 0;
+  }
+}
+
+.order-receive-info {
+  margin: 15px 0 30px;
+  padding: 15px;
+  background: #f5f7fa;
+
+  :first-child div span {
+    padding-right: 15px;
+  }
+}
+
+.order-detail {
+  background: #f5f7fa;
+
+  .order-amount-info {
+    padding: 15px 0;
+    font-size: 12px;
+    font-weight: bold;
+  }
+
+  ::v-deep .el-table tr,
+  ::v-deep .el-table th {
+    background-color: #f5f7fa;
+  }
+}
+
+.main-detail {
+  .title {
+    font-size: 16px;
+    font-weight: 700;
+    margin-bottom: 20px;
+  }
+
+  .item {
+    display: flex;
+    font-size: 14px;
+    color: #666;
+    padding-bottom: 12px;
+
+    .label {
+      white-space: nowrap;
+    }
+  }
+}
+
+.order-evaluate-info {
+  margin: 15px 0;
+  padding: 30px 15px;
+  background: #f5f7fa;
+
+  .title {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+
+    .left {
+      font-size: 16px;
+      font-weight: 700;
+
+      span {
+        font-weight: normal;
+        margin-left: 20px;
+        font-size: 14px;
+        color: #666;
+      }
+    }
+
+    .right {
+      display: flex;
+      align-items: center;
+      font-size: 14px;
+
+      span {
+        margin-right: 10px;
+      }
+    }
+  }
+
+  .main {
+    margin-top: 20px;
+    display: flex;
+
+    .rate-list {
+      font-size: 14px;
+      flex-shrink: 0;
+    }
+
+    .tag-list {
+      margin-left: 30px;
+
+      ::v-deep .el-tag {
+        margin-right: 10px;
+        margin-bottom: 10px;
+      }
+    }
+  }
+
+  .content {
+    width: 400px;
+    line-height: 20px;
+    font-size: 14px;
+    color: #333;
+    margin-top: 10px;
+  }
+
+  .img-list {
+    display: flex;
+    flex-wrap: wrap;
+    margin-top: 10px;
+    width: 400px;
+
+    ::v-deep .el-image {
+      width: 100px;
+      height: 100px;
+      margin-right: 10px;
+      margin-bottom: 10px;
+      border: 1px solid #eaeaea;
+    }
+  }
+}
+</style>

+ 101 - 171
src/views/secondHandMall/activistOrder/index.vue

@@ -15,29 +15,23 @@
                         </el-form-item>
                       </el-col>
                       <el-col :xs="24" :sm="12" :lg="6">
-                        <el-form-item label="商品名称" prop="goodsName">
-                          <el-input v-model="screenForm.goodsName" placeholder="请输入商品名称"></el-input>
+                        <el-form-item label="售后编号" prop="esOrderRefundId">
+                          <el-input v-model="screenForm.esOrderRefundId" placeholder="请输入售后编号"></el-input>
                         </el-form-item>
                       </el-col>
                       <el-col :xs="24" :sm="12" :lg="6">
-                        <el-form-item label="会员昵称" prop="memberName">
-                          <el-input v-model="screenForm.memberName" placeholder="请输入会员昵称"></el-input>
+                        <el-form-item label="商品名称" prop="esGoodsName">
+                          <el-input v-model="screenForm.esGoodsName" placeholder="请输入商品名称"></el-input>
                         </el-form-item>
                       </el-col>
                       <el-col :xs="24" :sm="12" :lg="6">
-                        <el-form-item label="手机号" prop="phone">
-                          <el-input v-model="screenForm.phone" placeholder="请输入手机号"></el-input>
+                        <el-form-item label="会员昵称" prop="userName">
+                          <el-input v-model="screenForm.userName" placeholder="请输入会员昵称"></el-input>
                         </el-form-item>
                       </el-col>
                       <el-col :xs="24" :sm="12" :lg="6">
-                        <el-form-item label="状态" prop="evaluateStatus">
-                          <el-select v-model="screenForm.evaluateStatus" placeholder="全部">
-                            <el-option label="全部" value=""></el-option>
-                            <el-option label="未评价订单" :value="0"></el-option>
-                            <el-option label="已评价订单" :value="3"></el-option>
-                            <el-option label="差评订单" :value="1"></el-option>
-                            <el-option label="好评订单" :value="2"></el-option>
-                          </el-select>
+                        <el-form-item label="手机号" prop="userMobile">
+                          <el-input v-model="screenForm.userMobile" placeholder="请输入手机号"></el-input>
                         </el-form-item>
                       </el-col>
                       <el-col :xs="24" :sm="12" :lg="6">
@@ -56,9 +50,11 @@
                         </el-form-item>
                       </el-col>
                       <el-col :xs="24" :sm="12" :lg="6" class="tr">
-                        <el-form-item label="">
-                          <el-button size="small" type="primary" @click="submitScreenForm">搜索</el-button>
-                          <el-button size="small" @click="resetScreenForm">清空</el-button>
+                        <el-form-item label="" label-width="0px">
+                          <div style="text-align: left;">
+                            <el-button size="small" type="primary" @click="submitScreenForm">搜索</el-button>
+                            <el-button size="small" @click="resetScreenForm">清空</el-button>
+                          </div>
                         </el-form-item>
                       </el-col>
                     </el-row>
@@ -68,115 +64,91 @@
                   <div class="fl">
                     <el-tabs v-model="tabCurrent" type="card" @tab-click="changeTabs" class="fl" size="small" style="margin-right: 10px">
                       <el-tab-pane label="全部" name="ALL"></el-tab-pane>
-                      <el-tab-pane label="待付款" name="NOPAY"></el-tab-pane>
-                      <el-tab-pane label="待确认" name="DQR"></el-tab-pane>
-                      <el-tab-pane label="待发货" name="DFH"></el-tab-pane>
-                      <el-tab-pane label="已发货" name="YFH"></el-tab-pane>
+                      <el-tab-pane label="待商家处理" name="WAIT"></el-tab-pane>
                       <el-tab-pane label="已完成" name="OVER"></el-tab-pane>
-                      <el-tab-pane label="退款/取消" name="CLOSE"></el-tab-pane>
-                      <el-tab-pane label="已超时" name="TIMEOUT"></el-tab-pane>
                     </el-tabs>
-                    <el-button class="fl" type="primary" size="small">新增</el-button>
                   </div>
                   <div class="fr">
-                    <el-button size="small" type="primary">导出</el-button>
+                    <el-button size="small" type="primary" @click="handleExport">导出</el-button>
                   </div>
                 </div>
                 <zj-page-fill>
                   <div class="order-main-container">
-                    <!--  -->
                     <div class="table-top">
                       <el-row style="width:100%">
                         <el-col :span="3">
                           <span class="item product">商品信息</span>
                         </el-col>
                         <el-col :span="3" style="text-align: right"><span class="item">单价(元)/数量</span></el-col>
-                        <el-col :span="4" style="text-align: center"><span class="item">买家信息</span></el-col>
-                        <el-col :span="4" style="text-align: center"><span class="item">收货信息</span></el-col>
-                        <el-col :span="4" style="text-align: center"><span class="item">实付金额</span></el-col>
-                        <el-col :span="3" style="text-align: center"><span class="item">订单状态</span></el-col>
+                        <el-col :span="3" style="text-align: center"><span class="item">买家信息</span></el-col>
+                        <el-col :span="3" style="text-align: center"><span class="item">收货信息</span></el-col>
+                        <el-col :span="3" style="text-align: center"><span class="item">订单金额</span></el-col>
+                        <el-col :span="3" style="text-align: center"><span class="item">退款金额</span></el-col>
+                        <el-col :span="3" style="text-align: center"><span class="item">状态</span></el-col>
                         <el-col :span="3" style="text-align: center"><span class="item">操作</span></el-col>
                       </el-row>
                     </div>
-                    <!--  -->
                     <div class="order-item" v-for="order in dataList" :key="order.orderId">
                       <div class="order-top">
-                        <span><b>订单号</b>:{{ order.orderId }}</span>
+                        <span><b>售后编号</b>:{{ order.esOrderRefundId }}</span>
+                        <span><b>订单号</b>:{{ order.esOrderId }}</span>
                         <span><b>下单时间</b>:{{ order.createTime }}</span>
-                        <el-tag>商城销售</el-tag>
+                        <!-- <el-tag>商城销售</el-tag> -->
                         <div class="fr"></div>
                       </div>
                       <div class="order-content">
                         <el-row style="width:100%;">
                           <el-col :span="6" style="height: 100%;">
                             <div class="col-item-pro">
-                              <div class="pro-item" v-for="orderItem in order.orderDetails" :key="orderItem.orderDetailId">
+                              <div class="pro-item">
                                 <div class="left">
                                   <div class="image">
-                                    <img :src="orderItem.imgUrl" style="height:80px;width: 80px;">
+                                    <img :src="order.goodsUrl" style="height:80px;width: 80px;">
                                   </div>
                                   <div class="main">
-                                    <span><el-tag type="danger" effect="plain" size="mini" style="margin-right: 4px"
-                                        v-if="orderItem.promotionFullPieceId">满件打折</el-tag>{{ orderItem.goodsName }}</span>
-                                    <span class="spec"
-                                      v-if="orderItem.goodsSpecName === '默认' && orderItem.goodsSpecValue === '默认'">默认</span>
-                                    <span class="spec" v-else>{{ orderItem.goodsSpecName }}-{{ orderItem.goodsSpecValue
-                                      }}</span>
+                                    <span>{{ order.esGoodsName }}</span>
                                   </div>
                                 </div>
                                 <div class="right">
-                                  <span>¥{{ orderItem.price }}</span>
-                                  <span>x{{ orderItem.num }}</span>
+                                  <span>¥{{ order.goodsPrice }}</span>
+                                  <span>x{{ order.num }}</span>
                                 </div>
                               </div>
                             </div>
                           </el-col>
-                          <el-col :span="4" style="height: 100%;">
+                          <el-col :span="3" style="height: 100%;">
                             <div class="col-item">
                               <div>{{ order.userName }}</div>
-                              <div>{{ order.phone }}</div>
+                              <div>{{ order.userMobile }}</div>
+                            </div>
+                          </el-col>
+                          <el-col :span="3" style="height: 100%;">
+                            <div class="col-item">
+                              <div>{{ order.userName }}/{{ order.userMobile }}</div>
+                              <div class="ellipsis-2">{{ order.province + order.city + order.area + order.street + order.receAddress }}</div>
                             </div>
                           </el-col>
-                          <el-col :span="4" style="height: 100%;">
+                          <el-col :span="3" style="height: 100%;">
                             <div class="col-item">
-                              <div>{{ order.receUserName }}/{{ order.recePhone }}</div>
-                              <div class="ellipsis-2">{{ order.province + order.city + order.area + order.street + order.receAddress + order.houseNo }}</div>
+                              <div class="totalprice">¥{{ order.totalAmount }}</div>
                             </div>
                           </el-col>
-                          <el-col :span="4" style="height: 100%;">
+                          <el-col :span="3" style="height: 100%;">
                             <div class="col-item">
-                              <div class="totalprice">¥{{ order.payAmount }}</div>
-                              <div style="font-size: 12px" v-if="order.discountAmount">(<span>-{{ order.discountAmount
-                                  }}</span><span v-if="order.promotionDiscountRate">/{{ order.promotionDiscountRate * 10
-                                  }}折</span>)</div>
+                              <div class="totalprice">¥{{ order.refundPrice }}</div>
                             </div>
                           </el-col>
                           <el-col :span="3" style="height: 100%;">
                             <div class="col-item">
                               <div style="display: flex; align-items: center;">
-                                <img src="@/assets/order/CLOSE.png" style="width: 16px; flex-shrink: 0;"
-                                  v-if="order.orderStatus == 'CLOSE'">
-                                <img src="@/assets/order/DFH.png" style="width: 16px; flex-shrink: 0;"
-                                  v-if="order.orderStatus == 'DFH'">
-                                <img src="@/assets/order/NOPAY.png" style="width: 16px; flex-shrink: 0;"
-                                  v-if="order.orderStatus == 'NOPAY'">
-                                <img src="@/assets/order/OVER.png" style="width: 16px; flex-shrink: 0;"
-                                  v-if="order.orderStatus == 'OVER'">
-                                <img src="@/assets/order/TIMEOUT.png" style="width: 16px; flex-shrink: 0;"
-                                  v-if="order.orderStatus == 'TIMEOUT'">
-                                <img src="@/assets/order/YFH.png" style="width: 16px; flex-shrink: 0;"
-                                  v-if="order.orderStatus == 'YFH'">
-                                <span style="margin-left: 4px">{{ order.orderStatus | ORDER_CURRENT_STATUS_FILTER }}</span>
+                                <span style="margin-left: 4px">{{ ({WAIT: "平台处理", OVER: "完成"})[order.status] }}</span>
                               </div>
-                              <div>({{ order.toWorkOrder ? '已派单' : '未派单' }})</div>
                             </div>
                           </el-col>
                           <el-col :span="3" style="height: 100%;">
-                            <div class="col-item">
+                            <div class="col-item">  
                               <div class="operate">
-                                <el-popconfirm title="确定确认订单吗?" @confirm="">
-                                  <el-button slot="reference" type="text" size="small">确认订单</el-button>
-                                </el-popconfirm>
+                                <el-button @click="viewDetails(order)" type="text" size="small">查看详情</el-button>
                               </div>
                             </div>
                           </el-col>
@@ -197,75 +169,12 @@
               </zj-page-container>
             </div>
           </div>
-          <!-- 新增 -->
-          <div v-if="activeKey == 'remark'" style="width:100%;height:100%;">
-            <zj-page-container>
-              <zj-page-fill>
-                <div style="box-sizing: border-box; padding:10px;">
-                
-                </div>
-              </zj-page-fill>
-            </zj-page-container>
-          </div>
-          <!-- 确认订单 -->
-          <div v-if="activeKey == 'remark'" style="width:100%;height:100%;">
-            <zj-page-container>
-              <zj-page-fill>
-                <div style="box-sizing: border-box; padding:10px;">
-                
-                </div>
-              </zj-page-fill>
-            </zj-page-container>
-          </div>
-          <!-- 确认收款 -->
-          <div v-if="activeKey == 'materialDetail'" style="width:100%;height:100%;">
-            <zj-page-container>
-              <zj-page-fill>
-                <div style="box-sizing: border-box; padding:10px;">
-                
-                </div>
-              </zj-page-fill>
-            </zj-page-container>
-          </div>
-          <!-- 取消订单 -->
-          <div v-if="activeKey == 'deliverGoods'" style="width:100%;height:100%;">
-            <zj-page-container>
-              <zj-page-fill>
-                <div style="box-sizing: border-box; padding:10px;">
-                
-                </div>
-              </zj-page-fill>
-            </zj-page-container>
-          </div>
-          <!-- 查看物流 -->
-          <div v-if="activeKey == 'editAddress1'" style="width:100%;height:100%;">
-            <zj-page-container>
-              <zj-page-fill>
-                <div style="box-sizing: border-box; padding:10px;">
-                
-                </div>
-              </zj-page-fill>
-            </zj-page-container>
-          </div>
           <!-- 查看详情 -->
-          <div v-if="activeKey == 'editAddress2'" style="width:100%;height:100%;">
-            <zj-page-container>
-              <zj-page-fill>
-                <div style="box-sizing: border-box; padding:10px;">
-                
-                </div>
-              </zj-page-fill>
-            </zj-page-container>
-          </div>
-          <!-- 退货 -->
-          <div v-if="activeKey == 'editAddress3'" style="width:100%;height:100%;">
-            <zj-page-container>
-              <zj-page-fill>
-                <div style="box-sizing: border-box; padding:10px;">
-                
-                </div>
-              </zj-page-fill>
-            </zj-page-container>
+          <div v-if="activeKey == 'details'" style="width:100%;height:100%;">
+            <detailsV :detailsId="detailsId" @removeTab="()=>{
+              getList()
+              data.removeTab()
+            }"/>
           </div>
         </template>
       </zj-tab-page>
@@ -275,20 +184,22 @@
 </template>
 
 <script>
-import { getList } from "@/api/order";
+import { esOrderListRefund } from "@/api/orderManagement";
+import detailsV from "./details.vue"
 import '@/styles/order-list.scss'
+import { downloadFiles } from '@/utils/util'
 export default {
-  components: {},
-
+  components: {detailsV},
   data() {
     return {
       screenForm: { // 筛选表单数据
         orderId: '', // 订单号
-        goodsName: '', // 商品名称
-        memberName: '', // 会员昵称
-        phone: '', // 手机号
+        esOrderRefundId: "",
+        esGoodsName: '', // 商品名称
+        userName: '', // 会员昵称
+        userMobile: '', // 手机号
         websitId: '', // 网点名称
-        orderStatus: '', // 状态
+        status: '', // 状态
         createDate: '', // 创建时间
         payDate: '', // 支付时间
         exchangeCode: '', // 兑换码
@@ -296,29 +207,38 @@ export default {
         sendStatus: '', // 派单异常
         workerOrderNo: '', // 信息编号
       },
-      screen_status: [ // 筛选字段 - 状态
-        { label: '待付款', value: 'NOPAY' },
-        { label: '待发货', value: 'DFH' },
-        { label: '已发货', value: 'YFH' },
-        { label: '已完成', value: 'OVER' },
-        { label: '已退款', value: 'CLOSE' }
-      ],
       tabCurrent: 'ALL',
       currentPage: 1, // 当前页码
       pageSize: 10, // 每页数量
       listTotal: 0, // 列表总数
       dataList: [],
+      detailsId: "",
     }
   },
-  computed: {
-
-  },
   created() {
     this.getList();
   },
   methods: {
+    viewDetails(row, type){
+      this.$refs.tabPage.addTab({
+        // 对应显示的模块
+        activeKey: "details",
+        // 唯一标识
+        key: "details",
+        // 页签名称
+        label: "订单详情",
+        // 打开时事件
+        triggerEvent: () => {
+          this.detailsId = row.esOrderRefundId
+        },
+        // 关闭时事件
+        closeEvent: () => {
+          
+        }
+      })
+    },
     changeTabs(tab, event) {
-      this.screenForm.orderStatus = this.tabCurrent === 'ALL' ? '' : tab.$options.propsData.name
+      this.screenForm.status = this.tabCurrent === 'ALL' ? '' : tab.$options.propsData.name
       this.currentPage = 1;
       this.getList();
     },
@@ -326,23 +246,19 @@ export default {
     getList() {
       let params = {
         orderId: this.screenForm.orderId, // 订单号
-        productName: this.screenForm.goodsName, // 商品名称
-        userName: this.screenForm.memberName, // 会员昵称
-        phone: this.screenForm.phone, // 手机号
-        websitId: this.screenForm.websitId,
-        exchangeCode: this.screenForm.exchangeCode,
-        orderStatus: this.screenForm.orderStatus, // 状态
+        esOrderRefundId: this.screenForm.esOrderRefundId, // 订单号
+        esGoodsName: this.screenForm.esGoodsName, // 商品名称
+        userName: this.screenForm.userName, // 会员昵称
+        userMobile: this.screenForm.userMobile, // 手机号
+        status: this.screenForm.status, // 状态
         startCreateTime: this.screenForm.createDate[0] ? this.screenForm.createDate[0] : null, // 创建时间
         endCreateTime: this.screenForm.createDate[1] ? this.screenForm.createDate[1] : null, // 创建时间
         startPayTime: this.screenForm.payDate[0] ? this.screenForm.payDate[0] : null, // 支付时间
         endPayTime: this.screenForm.payDate[1] ? this.screenForm.payDate[1] : null, // 支付时间
-        isNegative: this.screenForm.evaluateStatus, // 评价状态
-        abnormalDispatch: this.screenForm.sendStatus, // 派单异常
-        workerOrderNo: this.screenForm.workerOrderNo, // 信息编号
         pageNum: this.currentPage,
         pageSize: this.pageSize
       };
-      getList(params).then(res => {
+      esOrderListRefund(params).then(res => {
         res.data.records.forEach(item => {
           item.selected = false;
         });
@@ -350,16 +266,12 @@ export default {
         this.listTotal = res.data.total;
       })
     },
-    openForm(type, order) {
-
-    },
     // 更改每页数量
     handleSizeChange(val) {
       this.pageSize = val;
       this.currentPage = 1;
       this.getList();
     },
-
     // 更改当前页
     handleCurrentChange(val) {
       this.currentPage = val;
@@ -376,6 +288,24 @@ export default {
       this.currentPage = 1;
       this.getList();
     },
+    // 导出
+    handleExport() {
+      let params = {
+        orderId: this.screenForm.orderId, // 订单号
+        esOrderRefundId: this.screenForm.esOrderRefundId, // 订单号
+        esGoodsName: this.screenForm.esGoodsName, // 商品名称
+        userName: this.screenForm.userName, // 会员昵称
+        userMobile: this.screenForm.userMobile, // 手机号
+        status: this.screenForm.status, // 状态
+        startCreateTime: this.screenForm.createDate[0] ? this.screenForm.createDate[0] : null, // 创建时间
+        endCreateTime: this.screenForm.createDate[1] ? this.screenForm.createDate[1] : null, // 创建时间
+        startPayTime: this.screenForm.payDate[0] ? this.screenForm.payDate[0] : null, // 支付时间
+        endPayTime: this.screenForm.payDate[1] ? this.screenForm.payDate[1] : null, // 支付时间
+        pageNum: this.currentPage,
+        pageSize: this.pageSize
+      };
+      downloadFiles('esOrder/listExcelRefund', params);
+    },
   }
 }
 

+ 107 - 56
src/views/secondHandMall/commodityManagement/form.vue

@@ -4,14 +4,14 @@
       <zj-form-container ref="formRef" :form-data="formData" :form-rules="formRules">
         <zj-form-module title="商品详情" :form-data="formData" :form-items="formItems" label-width="80px">
         </zj-form-module>
-        <zj-form-module title="出售信息" class="my-module" :form-data="formData.order" :form-items="formItems2"
+        <zj-form-module v-if="formData.id && ~['SALE'].indexOf(cpdata.status)" title="出售信息" class="my-module" :form-data="formData.order" :form-items="formItems2"
           label-width="0px"/>
-          <zj-form-module title="查看留言" class="my-module" :form-data="formData.order" :form-items="formItems3"
+        <zj-form-module title="查看留言" class="my-module" :form-data="formData.order" :form-items="formItems3"
           label-width="0px"/>
       </zj-form-container>
     </zj-page-fill>
     <div style="box-sizing: border-box; padding: 10px; text-align: right;">
-      <el-button type="primary" size="small" @click="handleSubmit">保存</el-button>
+      <el-button v-if="!disabled" type="primary" size="small" @click="handleSubmit">保存</el-button>
       <el-button v-if="formData.id && ~['SALE'].indexOf(formData.status)" type="primary" size="small"
         @click="copyGoods">克隆商品</el-button>
       <el-button v-if="formData.id && ~['ON'].indexOf(formData.status)" type="primary" size="small"
@@ -26,8 +26,9 @@
 </template>
 
 <script>
-import ImageUpload from '@/components/Common/image-upload.vue'
-import { esGoodsDetail, esGoodsCopy, esGoodsBatchUpdateStatus, esGoodsReply } from '@/api/commodityManagement'
+import ImageUpload from '@/components/file-upload'
+import { esGoodsDetail, esGoodsCopy, esGoodsBatchUpdateStatus, esGoodsReply, esGoodsUpdate } from '@/api/commodityManagement'
+import { getClassifyList } from '@/api/goods'
 export default {
   components: { ImageUpload },
   props: {
@@ -38,6 +39,7 @@ export default {
   },
   data() {
     return {
+      classifyList: [],
       formData: {
         "brand": "",
         "categoryId": "",
@@ -71,24 +73,31 @@ export default {
         { label: '上架', value: "ON" },
         { label: '已卖出', value: "SALE" },
       ],
+      cpdata:{},
     }
   },
   computed: {
     disabled(){
-      return this.detailId? !~['ON', 'OFF'].indexOf(this.formData?.status) : false
+      return ~['ON', 'OFF'].indexOf(this.cpdata?.status) ? false : true
     },
     formItems() {
       return [
         {
-          name: 'el-input',
+          name: 'el-select',
           md: 12,
+          options: this.classifyList.map(item=>({label: item.name,value: item.categoryId})),
           attributes: { disabled: this.disabled },
-          formItemAttributes: { label: '商品分类', prop: 'categoryName' }
+          formItemAttributes: { label: '商品分类', prop: 'categoryId' },
+          events: {
+            change: (val) => {
+              this.formData.categoryName = this.classifyList.find(item=>item.categoryId == val)?.name
+            }
+          }
         },
         {
           name: 'el-radio',
           options: this.publishStatus,
-          attributes: { disabled: this.disabled },
+          attributes: { disabled: true },
           md: 12,
           formItemAttributes: { label: '发布状态', prop: 'status' }
         },
@@ -129,9 +138,9 @@ export default {
           formItemAttributes: { label: '功率(W)', prop: 'power' }
         },
         {
-          name: 'el-input',
+          name: 'el-date-picker',
           md: 6,
-          attributes: { disabled: this.disabled },
+          attributes: { disabled: this.disabled, type:"date", style:{width:'100%'}, "value-format":"yyyy-MM-dd" },
           formItemAttributes: { label: '制造日期', prop: 'makeDate' }
         },
         {
@@ -163,6 +172,12 @@ export default {
           },
         },
         {
+          name: 'el-input',
+          md: 6,
+          attributes: { disabled: true },
+          formItemAttributes: { label: '出售数量', prop: 'goumaiNum' }
+        },
+        {
           name: 'el-radio',
           options: [
             { label: '一级能效', value: "一级能效" },
@@ -171,49 +186,51 @@ export default {
             { label: '四级能效', value: "四级能效" },
             { label: '五级能效', value: "五级能效" },
           ],
-          md: 24,
+          md: 18,
           attributes: { disabled: this.disabled },
           formItemAttributes: { label: '能效标识', prop: 'mark' }
         },
         {
-          name: 'slot-component',
           md: 24,
-          attributes: { disabled: this.disabled },
-          formItemAttributes: { label: '商品图片', prop: 'imgList' },
-          render: (h, { props }) => {
-            return (<div>
-              <ImageUpload file-list={this.formData.imgList} limit={this.formData?.imgList?.length + 1} isEdit={false} />
-            </div>)
+          name: 'slot-component',
+          formItemAttributes: {
+            label: '商品图片',
+            prop: 'imgList',
+            rules: []
+          },
+          render: (h, { props, onInput }) => {
+            return (
+              <ImageUpload fileList={this.formData.imgList} limit={100} isEdit={!this.disabled}/>
+            )
           }
-        },
+        }
       ]
     },
-    formItems2() {
+    // esOrderInfo
+    formItems2 () {
       return [{
         name: 'slot-component',
         md: 24,
         attributes: { disabled: this.disabled },
         formItemAttributes: { label: '', prop: '', 'label-width': '0px' },
         render: (h, { props }) => {
-          var { formData } = props
-          console.log(formData, 999)
           return (<div>
             <el-row gutter={10}>
               <el-col xs={24} sm={24} md={8} lg={8} xl={8}>
                 <div class='info'>
-                  <div class='info_title'>上架人信息</div>
+                  <div class='info_title'>卖家信息</div>
                   <div class='info_bottom'>
                     <div class='info_bottom_lt'>
-                      <el-image
+                      {this?.formData?.esOrderInfo?.sellUrl ? <el-image
                         style='width: 40px; height: 40px'
-                        src={this.$imageUrl + this.formData?.order?.buyerUserPic}
+                        src={this?.formData?.esOrderInfo?.sellUrl}
                       >
-                      </el-image>
+                      </el-image>:null}
                     </div>
                     <div class='info_bottom_rt'>
-                      <div>微信昵称:{formData.userName}</div>
-                      <div>微信手机号:{formData.phone}</div>
-                      <div>发布时间:{formData.goodsCreateTime}</div>
+                      <div>微信昵称:{this?.formData?.esOrderInfo?.sellName}</div>
+                      <div>微信手机号:{this?.formData?.esOrderInfo?.sellMobile}</div>
+                      <div>发布时间:{this?.formData?.esOrderInfo?.sellTime}</div>
                     </div>
                   </div>
                 </div>
@@ -223,42 +240,50 @@ export default {
                   <div class='info_title'>买家信息</div>
                     <div class='info_bottom'>
                       <div class='info_bottom_lt'>
-                        <el-image
+                        {this?.formData?.esOrderInfo?.wechatUserUrl?<el-image
                           style='width: 40px; height: 40px'
-                          src={this.$imageUrl + this?.formData?.userPic}
+                          src={this?.formData?.esOrderInfo?.wechatUserUrl}
                         >
-                        </el-image>
+                        </el-image>:null}
                       </div>
                       <div class='info_bottom_rt'>
-                        <div>微信昵称:{formData.buyerUserName}</div>
-                        <div>微信手机号:{formData.buyerUserPhone}</div>
-                        <div>收货人信息:{formData.consigneeName}</div>
-                        <div>收货人地址:{formData.address}</div>
-                        <div>支付方式:{formData.payType === 'WECHAT' ? '微信支付' : ''}</div>
+                        <div>微信昵称:{this?.formData?.esOrderInfo?.wechatUserName}</div>
+                        <div>微信手机号:{this?.formData?.esOrderInfo?.wechatUserMobile}</div>
+                        <div>收货人信息:{`(${this?.formData?.esOrderInfo?.userMobile||''}) ${this?.formData?.esOrderInfo?.userMobile||''}`}</div>
+                        <div>收货人地址:{this?.formData?.esOrderInfo?.sellName}</div>
+                        <div>支付方式:{({WECHAT:"微信支付", CASH:"到店支付", TRANSFER:"转账支付"})[this?.formData?.esOrderInfo?.payType]}</div>
                       </div>
                     </div>
                 </div>
               </el-col>
-              <el-col xs={24} sm={24} md={8} lg={8} xl={8}>
+              {~['SEND','OVER'].indexOf(this?.formData?.esOrderInfo?.status)?<el-col xs={24} sm={24} md={8} lg={8} xl={8}>
                 <div class='info'>
                   <div class='info_title'>物流信息</div>
                   <div class='info_bottom'>
                     <div class='info_bottom_rt'>
                       <div>
-                        <el-radio-group value={formData.logisticsType}>
+                        <el-radio-group disabled={true} value={this?.formData?.esOrderInfo?.logisticsType}>
                           <el-radio label='SELF'>自提</el-radio>
                           <el-radio label='DELIVERY'>物流</el-radio>
                         </el-radio-group>
                       </div>
-                      <div>快递单号:{formData.logisticsNum}</div>
-                      <div>快递公司:{formData.logisticsName}</div>
-                      <el-button type='primary' size='small' onClick={() => { }}
-                      >查看物流
-                      </el-button>
+                      {this?.formData?.esOrderInfo?.logisticsType=="DELIVERY"?<div>快递单号:{this?.formData?.esOrderInfo?.logisticsNo}</div>:null}
+                      {this?.formData?.esOrderInfo?.logisticsType=="DELIVERY"?<div>快递公司:{this?.formData?.esOrderInfo?.logisticsName}</div>:null}
+                      {this?.formData?.esOrderInfo?.logisticsType=="DELIVERY"?<el-button type='primary' size='small' onClick={() => { 
+                        this.$router.push({
+                          name: 'orderManagement',
+                          params: {
+                            pageName: this?.formData?.esOrderInfo?.esOrderId,
+                            pageType: 'materialFlow',
+                            pageCode: this?.formData?.esOrderInfo?.esOrderId,
+                          },
+                        })
+                      }}>查看物流
+                      </el-button>:null}
                     </div>
                   </div>
                 </div>
-              </el-col>
+              </el-col>:null}
             </el-row>
           </div>)
         }
@@ -336,22 +361,31 @@ export default {
           return
         }
         esGoodsDetail({ id: newVal }).then(res => {
-          console.log(res.data)
           this.formData = {
             ...res.data,
+            goumaiNum: res.data?.esOrderInfo?.num || '',
             imgList: res.data.imgList.map(item => {
               return {
                 ...item,
-                imgUrl: item.imgUrl
+                url: item.imgUrl,
               }
             })
           }
+          this.cpdata = JSON.parse(JSON.stringify(res.data))
         })
       },
       deep: true,
       immediate: true,
     }
   },
+  created(){
+    getClassifyList({
+      status:true,
+      type:5
+    }).then(res=>{
+      this.classifyList = res.data
+    })
+  },
   methods: {
     msgSend(row){
       this.$prompt('留言回复', '回复', {
@@ -372,7 +406,7 @@ export default {
                 imgList: res2.data.imgList.map(item => {
                   return {
                     ...item,
-                    imgUrl: item.imgUrl
+                    url: item.imgUrl
                   }
                 })
               }
@@ -382,25 +416,42 @@ export default {
       })
     },
     copyGoods() {
-      esGoodsCopy({ id: this.detailId.id }).then(res => {
+      esGoodsCopy({ id: this.detailId }).then(res => {
         this.$message({ type: 'success', message: `克隆成功!` })
-        this.handleClose()
+        this.$emit('back',{detailId:res.data})
       })
     },
     setStatus(status){
-      esGoodsBatchUpdateStatus({ ids: this.detailId.id,status:status }).then(res => {
+      esGoodsBatchUpdateStatus({ ids: this.detailId, status:status }).then(res => {
         this.$message({ type: 'success', message: `设置成功!` })
         this.handleClose()
       })
     },
-    zhuanxiaoshou(){
-      
-    },
     handleSubmit() {
-
+      this.$refs.formRef.validate((valid) => {
+        if (valid) {
+          esGoodsUpdate({
+            ...this.formData,
+            imgList: this.formData.imgList.map(item=>({...item, imgUrl:item.url}))
+          }).then(res=>{
+            this.$message({ type: 'success', message: `成功!` })
+            this.$emit('back')
+          })
+        }
+      });
     },
     handleClose() {
       this.$emit('back')
+    },
+    zhuanxiaoshou(){
+      this.$router.push({
+        name: 'orderManagement',
+        params: {
+          pageName: this.detailId,
+          pageType: 'add',
+          pageCode: this.detailId,
+        },
+      })
     }
   }
 }

+ 22 - 1
src/views/secondHandMall/commodityManagement/index.vue

@@ -125,6 +125,21 @@ export default {
     exportList: esGoodsListExport,
     // 表格列解析渲染数据更改
     columnParsing(item, defaultData) {
+      if (item.jname === 'imgUrl') {
+        defaultData.render = (h, { row, index, column }) => {
+          return (
+            <div style="padding:0 6px;cursor: pointer;">
+              {row.imgUrl
+                ? row.imgUrl
+                  .split(',')
+                  .map(url => (
+                    <el-image src={url} preview-src-list={[url]} fit="fit" style="width:80px;height:80px;" />
+                  ))
+                : null}
+            </div>
+          )
+        }
+      }
       return defaultData
     },
     operation() {
@@ -173,10 +188,16 @@ export default {
         }
       })
     },
-    handleClose() {
+    handleClose(obj) {
       this.detailId = ''
       this.visible = false
       this.$refs.pageRef.refreshList()
+      if(obj && obj.detailId){
+        this.$nextTick(()=>{
+          this.detailId = obj.detailId
+          this.visible = true
+        })
+      }
     }
   }
 }

+ 101 - 0
src/views/secondHandMall/components/preview.vue

@@ -0,0 +1,101 @@
+<template>
+  <el-dialog
+    :visible.sync="visible"
+    :show-close="false"
+    :maskClosable="false"
+    :close-on-click-modal="false"
+    @cancel="hideModal"
+    :width="350 + 'mm'"
+  >
+    <div v-loading="spinning" style="min-height: 100px">
+      <div id="preview_content" ref="printDom"></div>
+    </div>
+    <template slot="title">
+      <div>
+        <el-button :loading="waitShowPrinter" type="primary" icon="printer" @click.stop="print">打印</el-button>
+      </div>
+    </template>
+    <template slot="footer">
+      <el-button key="close" type="info" @click="hideModal"> 关闭 </el-button>
+    </template>
+  </el-dialog>
+</template>
+
+<script>
+export default {
+  name: 'PrintPreview',
+  props: {
+    addPrint: {
+      type: Function,
+      default: null
+    },
+  },
+ 
+  data() {
+    return {
+      visible: false,
+      spinning: true,
+      waitShowPrinter: false,
+      // 纸张宽 mm
+      width: 0,
+      // 模板
+      hiprintTemplate: {},
+      // 数据
+      printData: {}
+    }
+  },
+  computed: {},
+  watch: {},
+  created() {},
+  mounted() {},
+  methods: {
+    hideModal() {
+      this.visible = false
+      this.waitShowPrinter = false
+    },
+    show(hiprintTemplate, printData, width = '210') {
+      this.visible = true
+      this.width = width
+      this.hiprintTemplate = hiprintTemplate
+      setTimeout(() => {
+        $('#preview_content').html(hiprintTemplate.getHtml(printData))
+        this.spinning = false
+      }, 500)
+    },
+    print() {
+      this.hiprintTemplate.print()
+      setTimeout(() => {
+        this.hideModal()
+        this.$emit('refreshList')
+      }, 2000)
+
+    }
+  }
+}
+</script>
+
+<style scoped>
+::v-deep .el-dialog__body {
+  padding: 0;
+}
+
+::v-deep tr {
+  height: 40px !important;
+}
+
+::v-deep .hiprint-printPaper {
+  margin: 0 auto;
+}
+
+::v-deep .hiprint-paperNumber {
+  display: none;
+}
+
+.ant-modal-body {
+  padding: 0px;
+}
+
+.ant-modal-content {
+  margin-bottom: 24px;
+}
+</style>

+ 327 - 76
src/views/secondHandMall/orderManagement/add.vue

@@ -1,23 +1,107 @@
 <template>
-  <zj-form-container ref="formRef" :form-data="formData" :form-attributes="{ size: 'mini' }">
-    <zj-form-module title="客户信息" label-width="100px" :form-data="formData" :form-items="formItems" />
-    <zj-form-module title="商品信息" label-width="100px" :form-data="formData" :form-items="formItems2" />
-  </zj-form-container>
+  <zj-page-container>
+    <zj-page-fill>
+      <div style="box-sizing: border-box; padding:10px;">
+        <zj-form-container ref="formRef" :form-data="formData" :form-attributes="{ size: 'mini' }">
+          <zj-form-module title="客户信息" label-width="80px" :form-data="formData" :form-items="formItems" />
+          <zj-form-module title="商品信息" label-width="80px" :form-data="formData" :form-items="formItems2" />
+        </zj-form-container>
+      </div>
+    </zj-page-fill>
+    <div style="box-sizing: border-box; padding: 10px; text-align: right;">
+      <el-button type="primary" size="small" @click="queding">确定</el-button>
+    </div>
+  </zj-page-container>
 </template>
 
 <script>
 import getLbsAmapRegion from "./getLbsAmapRegion.js"
 import ImageUpload from '@/components/file-upload'
 import editTable from '@/components/template/editTable.js'
+import { getClassifyList } from '@/api/goods'
+import { esGoodsList } from '@/api/commodityManagement'
+import { esOrderAdd } from '@/api/orderManagement'
+import { required, mobileRequired, mobile, httpUrl, email } from '@/components/template/rules_verify.js'
 export default {
   components: {ImageUpload},
   mixins: [getLbsAmapRegion, editTable],
+  props:{
+    detailsType: {
+      type: [String, Number],
+      default: ""
+    },
+  },
   data(){
     return {
       formData: {
-        imgSrc: [],
-        promotionQuestionnaireQrcodes: []
-      }
+        "area": "",
+        "brandName": "",
+        "city": "",
+        "companyName": "",
+        "companyWechatId": "",
+        "createBy": "",
+        "createTime": "",
+        "energyLabel": "",
+        "esCategoryId": "",
+        "esCategoryName": "",
+        "esGoodsId": "",
+        "esGoodsName": "",
+        "esOrderId": "",
+        "esOrderInfos": [],
+        "fileUrl": [],
+        "goodsNote": "",
+        "goodsPrice": 0,
+        "goodsUrl": "",
+        "logisticsCode": "",
+        "logisticsName": "",
+        "logisticsNo": "",
+        "num": 0,
+        "overTime": "",
+        "payStartTime": "",
+        "payTime": "",
+        "payType": "",
+        "pickType": "",
+        "power": "",
+        "productionTime": "",
+        "province": "",
+        "receAddress": "",
+        "refundNum": 0,
+        "refundPrice": 0,
+        "remark": "",
+        "saleType": 2,
+        "sellId": "",
+        "sellMobile": "",
+        "sellName": "",
+        "sellTime": "",
+        "sellUrl": "",
+        "sendName": "",
+        "sendTime": "",
+        "source": "",
+        "status": "",
+        "street": "",
+        "totalAmount": 0,
+        "transactionId": "",
+        "unit": "",
+        "updateBy": "",
+        "updateTime": "",
+        "userAddressId": "",
+        "userMobile": "",
+        "userName": "",
+        "wechatUserId": "",
+        "wechatUserMobile": "",
+        "wechatUserName": "",
+        "wechatUserUrl": "",
+        // 省
+        provinceId: "",
+        // 市
+        cityId: "",
+        // 区
+        areaId: "",
+        // 街道
+        streetId: "",
+      },
+      classifyList: [],
+      esGoodsList: []
     }
   },
   computed: {
@@ -26,46 +110,47 @@ export default {
         name: 'el-input',
         md: 6,
         attributes: { disabled: false },
-        formItemAttributes: { label: '商品分类', prop: 'categoryName' }
+        formItemAttributes: { label: '客户名称', prop: 'userName', rules:[{ required: true, message: '请填写', trigger: 'blur' }] }
       },{
         name: 'el-input',
         md: 6,
         attributes: { disabled: false },
-        formItemAttributes: { label: '商品分类', prop: 'categoryName' }
+        formItemAttributes: { label: '客户电话', prop: 'userMobile', rules: mobileRequired }
       },{
         name: 'el-radio',
         options: [
-          { label: '一级能效', value: "一级能效" },
-          { label: '二级能效', value: "二级能效" },
+          { label: '到店支付', value: "CASH" },
+          { label: '转账支付', value: "TRANSFER" },
+          // { label: '微信支付', value: "WECHAT" },
         ],
         md: 6,
         attributes: { disabled: this.disabled },
-        formItemAttributes: { label: '能效标识', prop: 'mark' }
+        formItemAttributes: { label: '支付方式', prop: 'payType', rules:[{ required: true, message: '请填写', trigger: 'blur' }] }
       },{
         name: 'el-radio',
         options: [
-          { label: '一级能效', value: "一级能效" },
-          { label: '五级能效', value: "五级能效" },
+          { label: '线上销售', value: 1 },
+          { label: '线下销售', value: 2 },
         ],
         md: 6,
-        attributes: { disabled: this.disabled },
-        formItemAttributes: { label: '能效标识', prop: 'mark' }
-      },...this.amapRegion,{
+        attributes: { disabled: true },
+        formItemAttributes: { label: '销售方式', prop: 'saleType', rules:[{ required: true, message: '请填写', trigger: 'blur' }] }
+      }, ...this.amapRegion, {
         name: 'el-input',
         md: 24,
         attributes: { disabled: false, type:"textarea" },
-        formItemAttributes: { label: '备注', prop: 'categoryName' }
+        formItemAttributes: { label: '备注', prop: 'remark' }
       },{
         md: 24,
         name: 'slot-component',
         formItemAttributes: {
           label: '附件',
-          prop: 'imgSrc',
+          prop: 'fileUrl',
           rules: []
         },
         render: (h, { props, onInput }) => {
           return (
-            <ImageUpload fileList={this.formData.imgSrc} limit={100}/>
+            <ImageUpload fileList={this.formData.fileUrl} limit={1}/>
           )
         }
       }]
@@ -77,8 +162,8 @@ export default {
           formItemAttributes: {
             label: '',
             'label-width': '0px',
-            prop: 'promotionQuestionnaireQrcodes',
-            rules: []
+            prop: 'esOrderInfos',
+            rules: [{ required: true, message: '请填写', trigger: 'blur' }]
           },
           render: (h, { props, onInput }) => {
             var { value } = props
@@ -88,7 +173,13 @@ export default {
                 {
                   columnAttributes: {
                     label: '商品分类',
-                    prop: 'websitName'
+                    prop: 'esCategoryName'
+                  }
+                },
+                {
+                  columnAttributes: {
+                    label: '商品名称',
+                    prop: 'esGoodsId'
                   },
                   editRender: (h, { row, column, index }) => {
                     return (
@@ -96,69 +187,72 @@ export default {
                         <el-form-item
                           label=""
                           label-width="0px"
-                          prop={`promotionQuestionnaireQrcodes.${index}.${column.columnAttributes.prop}`}
+                          prop={`esOrderInfos.${index}.${column.columnAttributes.prop}`}
                           rules={[{ required: true, message: '请填写', trigger: 'blur' }]}
                         >
-                          <el-input
-                            value={row[column.columnAttributes.prop]}
-                            onInput={val => {
-                              row[column.columnAttributes.prop] = val
-                            }}
-                            placeholder="请输入内容"
-                          ></el-input>
+                          <el-select 
+                              filterable={true}
+                              value={row[column.columnAttributes.prop]}
+                              onInput={val => {
+                                var data = this.esGoodsList.find( item => item.id===val )
+                                row[column.columnAttributes.prop] = val
+                                row.esCategoryId = data?.categoryId ||''
+                                row.esCategoryName = data?.categoryName ||''
+                                row.brandName = data?.brand ||''
+                                console.log(data)
+                                row.unit = '台'
+                                row.sjNum = data?.qty ||''
+                                row.totalAmount = (Number(data?.price) * Number(data?.qty)).toFixed(2);
+                                row.power = data?.power ||''
+                                row.productionTime = data?.makeDate ||''
+                                row.energyLabel = data?.mark ||''
+                              }}
+                              placeholder="请输入内容">
+                            {this.esGoodsList.filter(item=>!this.formData.esOrderInfos.find(v=>v.esGoodsId==item.id ) || row.esGoodsId==item.id ).map((item, index_) => <el-option key={index_} label={item.goodsName} value={item.id}></el-option>)}
+                          </el-select>
                         </el-form-item>
                       </div>
                     )
                   },
                   viewRender: (h, { row, column, index }) => {
-                    return <div style="padding-left:10px">{row[column.columnAttributes.prop]}</div>
-                  }
-                },
-                {
-                  columnAttributes: {
-                    label: '商品名称',
-                    prop: 'websitName'
-                  },
-                  editRender: (h, { row, column, index }) => {
                     return (
                       <div class="redbordererr">
                         <el-form-item
                           label=""
                           label-width="0px"
-                          prop={`promotionQuestionnaireQrcodes.${index}.${column.columnAttributes.prop}`}
+                          prop={`esOrderInfos.${index}.${column.columnAttributes.prop}`}
                           rules={[{ required: true, message: '请填写', trigger: 'blur' }]}
                         >
-                          <el-input
-                            value={row[column.columnAttributes.prop]}
-                            onInput={val => {
-                              row[column.columnAttributes.prop] = val
-                            }}
-                            placeholder="请输入内容"
-                          ></el-input>
+                          <el-select 
+                              disabled={true}
+                              value={row[column.columnAttributes.prop]}
+                              onInput={val => {
+                                row[column.columnAttributes.prop] = val
+                              }}
+                              placeholder="请输入内容">
+                            {this.esGoodsList.map((item, index_) => <el-option key={index_} label={item.goodsName} value={item.id}></el-option>)}
+                          </el-select>
                         </el-form-item>
                       </div>
                     )
-                  },
-                  viewRender: (h, { row, column, index }) => {
-                    return <div style="padding-left:10px">{row[column.columnAttributes.prop]}</div>
                   }
                 },
                 {
                   columnAttributes: {
                     label: '单位',
-                    prop: 'websitName'
+                    prop: 'unit'
                   }
                 },
                 {
                   columnAttributes: {
                     label: '上架数量',
-                    prop: 'websitName'
+                    prop: 'sjNum'
                   }
                 },
                 {
                   columnAttributes: {
                     label: '订单数量',
-                    prop: 'websitName'
+                    prop: 'num'
                   },
                   editRender: (h, { row, column, index }) => {
                     return (
@@ -166,13 +260,14 @@ export default {
                         <el-form-item
                           label=""
                           label-width="0px"
-                          prop={`promotionQuestionnaireQrcodes.${index}.${column.columnAttributes.prop}`}
+                          prop={`esOrderInfos.${index}.${column.columnAttributes.prop}`}
                           rules={[{ required: true, message: '请填写', trigger: 'blur' }]}
                         >
                           <el-input
                             value={row[column.columnAttributes.prop]}
                             onInput={val => {
                               row[column.columnAttributes.prop] = val
+                              row.totalAmount = (Number(val) * Number(row.goodsPrice)).toFixed(2)
                             }}
                             placeholder="请输入内容"
                           ></el-input>
@@ -187,7 +282,7 @@ export default {
                 {
                   columnAttributes: {
                     label: '商品价格',
-                    prop: 'websitName'
+                    prop: 'goodsPrice'
                   },
                   editRender: (h, { row, column, index }) => {
                     return (
@@ -195,13 +290,14 @@ export default {
                         <el-form-item
                           label=""
                           label-width="0px"
-                          prop={`promotionQuestionnaireQrcodes.${index}.${column.columnAttributes.prop}`}
+                          prop={`esOrderInfos.${index}.${column.columnAttributes.prop}`}
                           rules={[{ required: true, message: '请填写', trigger: 'blur' }]}
                         >
                           <el-input
                             value={row[column.columnAttributes.prop]}
                             onInput={val => {
                               row[column.columnAttributes.prop] = val
+                              row.totalAmount = (Number(val) * Number(row.num)).toFixed(2)
                             }}
                             placeholder="请输入内容"
                           ></el-input>
@@ -216,31 +312,31 @@ export default {
                 {
                   columnAttributes: {
                     label: '金额',
-                    prop: 'websitName'
+                    prop: 'totalAmount'
                   }
                 },
                 {
                   columnAttributes: {
                     label: '商品品牌',
-                    prop: 'websitName'
+                    prop: 'brandName'
                   }
                 },
                 {
                   columnAttributes: {
                     label: '功率(W)',
-                    prop: 'websitName'
+                    prop: 'power'
                   }
                 },
                 {
                   columnAttributes: {
                     label: '制造日期',
-                    prop: 'websitName'
+                    prop: 'productionTime'
                   }
                 },
                 {
                   columnAttributes: {
                     label: '能效标识',
-                    prop: 'websitName'
+                    prop: 'energyLabel'
                   }
                 },
               ],
@@ -251,29 +347,184 @@ export default {
               },
               {
                 add: () => {
-                  this.formData.promotionQuestionnaireQrcodes.push({
-                    websitName: '',
-                    qrcode: ''
+                  this.formData.esOrderInfos.push({
+                    "area": "",
+                    "brandName": "",
+                    "city": "",
+                    "companyName": "",
+                    "companyWechatId": "",
+                    "createBy": "",
+                    "createTime": "",
+                    "energyLabel": "",
+                    "esCategoryId": "",
+                    "esCategoryName": "",
+                    "esGoodsId": "",
+                    "esGoodsName": "",
+                    "esOrderId": "",
+                    "fileUrl": "",
+                    "goodsNote": "",
+                    "goodsPrice": "",
+                    "goodsUrl": "",
+                    "logisticsCode": "",
+                    "logisticsName": "",
+                    "logisticsNo": "",
+                    "num": "",
+                    "overTime": "",
+                    "payStartTime": "",
+                    "payTime": "",
+                    "payType": "",
+                    "pickType": "",
+                    "power": "",
+                    "productionTime": "",
+                    "province": "",
+                    "receAddress": "",
+                    "refundNum": 0,
+                    "refundPrice": 0,
+                    "remark": "",
+                    "saleType": 2,
+                    "sellId": "",
+                    "sellMobile": "",
+                    "sellName": "",
+                    "sellTime": "",
+                    "sellUrl": "",
+                    "sendName": "",
+                    "sendTime": "",
+                    "source": "",
+                    "status": "",
+                    "street": "",
+                    "totalAmount": "",
+                    "transactionId": "",
+                    "unit": "",
+                    "updateBy": "",
+                    "updateTime": "",
+                    "userAddressId": "",
+                    "userMobile": "",
+                    "userName": "",
+                    "wechatUserId": "",
+                    "wechatUserMobile": "",
+                    "wechatUserName": "",
+                    "wechatUserUrl": "",
+                    sjNum:""
+                  })
+                  this.isEditTableIndex = this.formData.esOrderInfos.length - 1
+                },
+                verify: ({ row, column, index }, isEditTableIndex) => {
+                  return new Promise(r => {
+                    if (isEditTableIndex > -1) {
+                      this.$refs.formRef.validateField(
+                        [
+                          `esOrderInfos.${isEditTableIndex}.esCategoryId`,
+                          `esOrderInfos.${isEditTableIndex}.esGoodsId`,
+                          `esOrderInfos.${isEditTableIndex}.num`,
+                          `esOrderInfos.${isEditTableIndex}.goodsPrice`,
+                        ],
+                        v => {
+                          if (v) {
+                            r(true)
+                          } else {
+                            r(false)
+                          }
+                        }
+                      )
+                    } else {
+                      r(true)
+                    }
                   })
-                  this.isEditTableIndex = this.formData.promotionQuestionnaireQrcodes.length - 1
                 },
-                // verify: ({ row, column, index }, isEditTableIndex) => {
-                //   return new Promise(r => {
-                //     if (isEditTableIndex > -1) {
-                //       r(true)
-                //     } else {
-                //       r(true)
-                //     }
-                //   })
-                // },
               }
             )
           }
         }]
     }
   },
+  created(){
+    getClassifyList({
+      status:true,
+      type:5
+    }).then(res=>{
+      this.classifyList = res.data
+    })
+    esGoodsList({"pageNum":1,"pageSize":-1,"params":[{"param":"a.status","compare":"=","value":"ON"}]}).then(res=>{
+      this.esGoodsList = res.data.records
+      if(this?.$route?.params?.pageType==="add" && this?.$route?.params?.pageCode && this.detailsType == 0){
+        var data = this.esGoodsList.find( item => item.id===this?.$route?.params?.pageCode )
+        this.formData.esOrderInfos.push({
+          "area": "",
+          "brandName": data?.brand ||'',
+          "city": "",
+          "companyName": "",
+          "companyWechatId": "",
+          "createBy": "",
+          "createTime": "",
+          "energyLabel": data?.mark ||'',
+          "esCategoryId": data?.categoryId ||'',
+          "esCategoryName": data?.categoryName ||'',
+          "esGoodsId": this?.$route?.params?.pageCode,
+          "esGoodsName": "",
+          "esOrderId": "",
+          "fileUrl": "",
+          "goodsNote": "",
+          "goodsPrice": "",
+          "goodsUrl": "",
+          "logisticsCode": "",
+          "logisticsName": "",
+          "logisticsNo": "",
+          "num": "",
+          "overTime": "",
+          "payStartTime": "",
+          "payTime": "",
+          "payType": "",
+          "pickType": "",
+          "power": data?.power ||'',
+          "productionTime": data?.makeDate ||'',
+          "province": "",
+          "receAddress": "",
+          "refundNum": 0,
+          "refundPrice": 0,
+          "remark": "",
+          "saleType": 2,
+          "sellId": "",
+          "sellMobile": "",
+          "sellName": "",
+          "sellTime": "",
+          "sellUrl": "",
+          "sendName": "",
+          "sendTime": "",
+          "source": "",
+          "status": "",
+          "street": "",
+          "totalAmount": (Number(data?.price) * Number(data?.qty)).toFixed(2),
+          "transactionId": "",
+          "unit": '台',
+          "updateBy": "",
+          "updateTime": "",
+          "userAddressId": "",
+          "userMobile": "",
+          "userName": "",
+          "wechatUserId": "",
+          "wechatUserMobile": "",
+          "wechatUserName": "",
+          "wechatUserUrl": "",
+          sjNum:data?.qty ||''
+        })
+        this.isEditTableIndex = 0
+      }
+    })
+  },
   methods: {
-    
+    queding(){
+      this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
+        if(valid){
+          esOrderAdd({
+            ...this.formData,
+            fileUrl: this.formData.fileUrl.map(item=>item.url).join(",")
+          }).then(res=>{
+            this.$message({ type: 'success', message: `成功!` })
+            this.$emit("removeTab")
+          })
+        }
+      })
+    }
   }
 }
 </script>

+ 221 - 0
src/views/secondHandMall/orderManagement/deliverGoods.vue

@@ -0,0 +1,221 @@
+<template>
+  <zj-page-container>
+    <zj-page-fill>
+      <div style="box-sizing: border-box; padding:10px;">
+        <zj-form-container ref="formRef" :form-data="formData" :form-attributes="{ size: 'mini' }">
+          <zj-form-module title="客户信息" label-width="80px" :form-data="formData" :form-items="formItems" />
+          <zj-form-module title="商品信息" label-width="80px" :form-data="formData" :form-items="formItems2" />
+        </zj-form-container>
+      </div>
+    </zj-page-fill>
+    <div style="box-sizing: border-box; padding: 10px; text-align: right;">
+      <el-button type="primary" size="small" @click="queding">确定</el-button>
+    </div>
+  </zj-page-container>
+</template>
+
+<script>
+import getLbsAmapRegion from "./getLbsAmapRegion.js"
+import ImageUpload from '@/components/file-upload'
+import editTable from '@/components/template/editTable.js'
+import { esOrderSend } from '@/api/orderManagement'
+import { required, mobileRequired, mobile, httpUrl, email } from '@/components/template/rules_verify.js'
+import { esOrderDetail } from "@/api/orderManagement";
+import { getCompanyList } from "@/api/common";
+export default {
+  components: {ImageUpload},
+  mixins: [getLbsAmapRegion, editTable],
+  props:{
+    detailsId: {
+      type: [String, Number],
+      default: ""
+    },
+  },
+  data(){
+    return {
+      formData: {
+        esOrderInfos:[],
+        pickType:"",
+        logisticsCode:"",
+        logisticsName:"",
+        logisticsNo:"",
+      },
+      classifyList:[]
+    }
+  },
+  created(){
+    getCompanyList().then(res=>{
+      this.classifyList = res.data
+    })
+  },
+  computed: {
+    formItems(){
+      return [{
+        name: 'el-radio',
+        options: [
+          { label: '自提', value: "YES" },
+          { label: '物流快递', value: "NO" },
+        ],
+        md: 12,
+        attributes: { disabled: this.disabled },
+        formItemAttributes: { label: '发货方式', prop: 'pickType', rules:[{ required: true, message: '请填写', trigger: 'blur' }] }
+      },
+      {
+        name: 'slot-component',
+        md: 12,
+        formItemAttributes: {
+          label: '',
+          'label-width': '0px',
+          prop: '',
+          rules: []
+        },
+        render: ()=>{
+          return null
+        }
+      },
+      {
+        isShow: this.formData.pickType==="NO",
+        name: 'el-select',
+        options: this.classifyList.map(item=>({label: item.name, value: item.code})),
+        md: 6,
+        attributes: { disabled: this.disabled },
+        formItemAttributes: { label: '物流公司', prop: 'logisticsCode', rules:[{ required: true, message: '请填写', trigger: 'blur' }] },
+        events:{
+          change:(val)=>{
+            this.formData.logisticsName = this.classifyList.find(item=>item.code==val)?.name
+          }
+        }
+      },{
+        isShow: this.formData.pickType==="NO",
+        name: 'el-input',
+        md: 6,
+        attributes: { disabled: this.disabled },
+        formItemAttributes: { label: '快递单号', prop: 'logisticsNo', rules:[{ required: true, message: '请填写', trigger: 'blur' }] }
+      }]
+    },
+    formItems2(){
+      return [{
+          name: 'slot-component',
+          md: 24,
+          formItemAttributes: {
+            label: '',
+            'label-width': '0px',
+            prop: 'esOrderInfos',
+            rules: [{ required: true, message: '请填写', trigger: 'blur' }]
+          },
+          render: (h, { props, onInput }) => {
+            var { value } = props
+            return this.convertTableJson(
+              value,
+              [
+                {
+                  columnAttributes: {
+                    label: '商品分类',
+                    prop: 'esCategoryName'
+                  },
+                },
+                {
+                  columnAttributes: {
+                    label: '商品名称',
+                    prop: 'esGoodsName'
+                  },
+                },
+                {
+                  columnAttributes: {
+                    label: '单位',
+                    prop: 'unit'
+                  }
+                },
+                {
+                  columnAttributes: {
+                    label: '订单数量',
+                    prop: 'num'
+                  },
+                },
+                {
+                  columnAttributes: {
+                    label: '商品价格',
+                    prop: 'goodsPrice'
+                  },
+                },
+                {
+                  columnAttributes: {
+                    label: '金额',
+                    prop: 'totalAmount'
+                  }
+                },
+                {
+                  columnAttributes: {
+                    label: '商品品牌',
+                    prop: 'brandName'
+                  }
+                },
+                {
+                  columnAttributes: {
+                    label: '功率(W)',
+                    prop: 'power'
+                  }
+                },
+                {
+                  columnAttributes: {
+                    label: '制造日期',
+                    prop: 'productionTime'
+                  }
+                },
+                {
+                  columnAttributes: {
+                    label: '能效标识',
+                    prop: 'energyLabel'
+                  }
+                },
+              ],
+              {
+                isEdit: false,
+                isAdd: false,
+                isDel: false
+              },
+              {}
+            )
+          }
+        }]
+    }
+  },
+  watch: {
+    detailsId: {
+      handler(newVal, oldVal) {
+        this.getEsOrderDetail()
+      },
+      deep: true,
+      immediate: true,
+    },
+  },
+  methods: {
+    getEsOrderDetail(){
+      esOrderDetail({
+        esOrderId: this.detailsId
+      }).then(res=>{
+        this.formData = {
+          esOrderInfos:[{...res.data}]
+        }
+      })
+    },
+    queding(){
+      this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
+        if(valid){
+          esOrderSend({
+            esOrderId: this.detailsId,
+            ...this.formData,
+            esOrderInfos: undefined
+          }).then(res=>{
+            this.$message({ type: 'success', message: `发货成功!` })
+            this.$emit("removeTab")
+          })
+        }
+      })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+</style>

+ 483 - 0
src/views/secondHandMall/orderManagement/details.vue

@@ -0,0 +1,483 @@
+<template>
+  <zj-page-container>
+    <div style="box-sizing: border-box; padding:0 10px;">
+      <el-tabs v-model="activeName">
+        <el-tab-pane label="详情" name="first"></el-tab-pane>
+        <el-tab-pane label="操作记录" name="second"></el-tab-pane>
+      </el-tabs>
+    </div>
+    <zj-page-fill>
+      <template v-if="activeName=='first'">
+        <div style="box-sizing: border-box; padding:10px;">
+          <div>
+            <div class="order-main">
+              <el-row style="padding: 15px 15px 10px">
+                <el-col :span="24">
+                  <div class="order-main-title">
+                    <span>订单编号:{{ orderDetail.esOrderId }}</span>
+                    <span>下单时间:{{ orderDetail.createTime }}</span>
+                  </div>
+                </el-col>
+              </el-row>
+              <div style="width: 100%; padding: 10px 15px 15px 15px">
+                <el-row>
+                  <el-col :span="10">
+                    <!--  -->
+                    <div v-if="~[0, 1].indexOf(detailsTypeCp)" style="display: flex;">
+                      <div>
+                        <div class="order-main-status">
+                          <span>{{ ({SAVE: "待支付", WAIT: "待确认", PAID: "待发货", SEND: "卖家发货", OVER: "已完成", TIME_OUT: "超时", CANCEL: "已售后/取消", WAIT_REFUND: "售后中"})[orderDetail.status] }}</span>
+                        </div>
+                        <div class="order-main-opt-btn">
+                          <template>
+                            <el-button v-if="~['SEND','OVER'].indexOf(orderDetail.status)" size="small" type="primary" @click="lookkuaidi">查看物流</el-button>
+                            <el-button v-if="~['SEND','OVER'].indexOf(orderDetail.status)" size="small" type="primary" @click="detailsTypeCp = 2">退货退款</el-button>
+                          </template>
+                        </div>
+                      </div>
+                    </div>
+                    <!--  -->
+                    <div  v-if="detailsTypeCp==2">
+                      <el-form ref="formTHref" :model="formTH" label-width="80px" size="mini">
+                        <el-form-item label="处理结果" prop="refundType" :rules="[{ required: true, message: '请选择', trigger: 'blur' }]">
+                          <el-radio-group v-model="formTH.refundType">
+                            <el-radio label="GOODS">仅退货</el-radio>
+                            <el-radio label="REFUND">仅退款</el-radio>
+                            <el-radio label="GOODS_REFUND">退货退款</el-radio>
+                          </el-radio-group>
+                        </el-form-item>
+                        <el-form-item v-if="~['GOODS','GOODS_REFUND'].indexOf(formTH.refundType)" label="退货数量" prop="refundNum" :rules="[{ required: true, message: '请填写', trigger: 'blur' }]">
+                          <el-input v-model="formTH.refundNum"></el-input>
+                        </el-form-item>
+                        <el-form-item v-if="~['REFUND','GOODS_REFUND'].indexOf(formTH.refundType)" label="退款金额" prop="refundPrice" :rules="[{ required: true, message: '请填写', trigger: 'blur' }]">
+                          <el-input type="number" v-model="formTH.refundPrice"></el-input>
+                        </el-form-item>
+                        <el-form-item label="备注">
+                          <el-input type="textarea" v-model="formTH.refundRemark"></el-input>
+                        </el-form-item>
+                      </el-form>
+                    </div>
+                  </el-col>
+                  <el-col  v-if="detailsTypeCp==0" :span="14" style="padding-top: 10px;">
+                    <el-steps :active="zhuangtai" align-center>
+                      <el-step title="买家下单" ></el-step>
+                      <el-step title="买家付款" ></el-step>
+                      <el-step title="卖家发货" ></el-step>
+                      <el-step title="交易成功" ></el-step>
+                    </el-steps>
+                  </el-col>
+                </el-row>
+              </div>
+            </div>
+  
+            <div class="order-receive-info">
+              <el-row :gutter="10">
+                <el-col :xs="24" :sm="24" :md="8" :lg="8" :xl="8">
+                  <div class='info'>
+                    <div class='info_title'>卖家信息</div>
+                    <div class='info_bottom'>
+                      <div class='info_bottom_lt'>
+                        <el-image v-if="orderDetail.sellUrl" style='width: 40px; height: 40px' :src="orderDetail.sellUrl"></el-image>
+                      </div>
+                      <div class='info_bottom_rt'>
+                        <div>昵称:{{orderDetail.sellName}}</div>
+                        <div>手机号:{{orderDetail.sellMobile}}</div>
+                        <div>发布时间:{{orderDetail.sellTime}}</div>
+                      </div>
+                    </div>
+                  </div>
+                </el-col>
+                <el-col :xs="24" :sm="24" :md="8" :lg="8" :xl="8">
+                  <div class='info'>
+                    <div class='info_title'>买家信息</div>
+                    <div class='info_bottom'>
+                      <div class='info_bottom_lt'>
+                        <el-image v-if="orderDetail.wechatUserUrl" style='width: 40px; height: 40px' :src="orderDetail.wechatUserUrl">
+                        </el-image>
+                      </div>
+                      <div class='info_bottom_rt'>
+                        <div v-if="orderDetail.wechatUserName">昵称:{{orderDetail.wechatUserName}}</div>
+                        <div v-if="orderDetail.wechatUserMobile">手机号:{{orderDetail.wechatUserMobile}}</div>
+                        <div>收货人信息:({{orderDetail.userName}}){{orderDetail.userMobile}}</div>
+                        <div>收货人地址:{{ orderDetail.province + orderDetail.city + orderDetail.area + orderDetail.street + orderDetail.receAddress }}</div>
+                        <div>支付方式:{{({WECHAT:"微信支付", CASH:"到店支付", TRANSFER:"转账支付"})[orderDetail.payType]}}</div>
+                      </div>
+                    </div>
+                  </div>
+                </el-col>
+                <el-col v-if="~['SEND','OVER'].indexOf(orderDetail.status)" :xs="24" :sm="24" :md="8" :lg="8" :xl="8">
+                  <div class='info'>
+                    <div class='info_title'>物流信息</div>
+                    <div class='info_bottom'>
+                      <div class='info_bottom_rt'>
+                        <div>
+                          <el-radio-group disabled v-model="orderDetail.pickType">
+                            <el-radio label='YES'>自提</el-radio>
+                            <el-radio label='NO'>物流</el-radio>
+                          </el-radio-group>
+                        </div>
+                        <div v-if="orderDetail.pickType=='NO'">快递单号:{{orderDetail.logisticsNo}}</div>
+                        <div v-if="orderDetail.pickType=='NO'">快递公司:{{orderDetail.logisticsName}}</div>
+                      </div>
+                    </div>
+                  </div>
+                </el-col>
+              </el-row>
+            </div>
+  
+            <h3>商品信息</h3>
+            <div class="order-main" style="border:none;">
+              <!-- 订单表格 -->
+              <el-table :data="[orderDetail]" style="width: 100%" border>
+                <el-table-column label="商品信息" min-width="200">
+                  <template slot-scope="scope">
+                    <el-row>
+                      <el-col v-if="scope.row.goodsUrl" :span="6">
+                        <el-image style="width: 40px; height: 40px" :src="scope.row.goodsUrl">
+                          <div slot="error" class="image-slot">
+                            <i class="el-icon-picture-outline"></i>
+                          </div>
+                        </el-image>
+                      </el-col>
+                      <el-col :span="18">
+                        <div>{{ scope.row.esGoodsName }}</div>
+                      </el-col>
+                    </el-row>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="goodsPrice" label="单价" align="center"></el-table-column>
+                <el-table-column prop="num" label="数量" align="center"></el-table-column>
+                <el-table-column prop="totalAmount" label="商品总金额" align="center" min-width="100"></el-table-column>
+                <el-table-column prop="refundPrice" label="退款金额" align="center"></el-table-column>
+              </el-table>
+            </div>
+  
+            <h3 v-if="detailsTypeCp==1">收款信息</h3>
+            <div v-if="detailsTypeCp==1" class="order-main">
+              <div style="width: 100%; padding: 10px 15px 15px 15px">
+                <el-row>
+                  <el-col :span="10">
+                    <div>
+                      <el-form ref="formSKref" :model="formSK" label-width="80px" size="mini">
+                        <el-form-item label="收款金额" prop="price" :rules="[{ required: true, message: '请填写', trigger: 'blur' }]">
+                          <el-input type="number" v-model="formSK.price"></el-input>
+                        </el-form-item>
+                        <el-form-item label="收款金额" prop="fileUrl">
+                          <ImageUpload :fileList="formSK.fileUrl" :limit="1"/>
+                        </el-form-item>
+                        <el-form-item label="备注" prop="remark">
+                          <el-input type="textarea" v-model="formSK.remark"></el-input>
+                        </el-form-item>
+                      </el-form>
+                    </div>
+                  </el-col>
+                </el-row>
+              </div>
+            </div>
+          </div>
+        </div>
+      </template>
+      <template v-if="activeName=='second'">
+        <div style="box-sizing: border-box; padding:10px;">
+          <div>
+            <div class="order-main" style="border:none;">
+              <el-table :data="orderPayPriceList" style="width: 100%" border>
+                <el-table-column prop="price" label="收款金额" align="center"></el-table-column>
+                <el-table-column prop="fileUrl" label="收款凭证" min-width="200">
+                  <template slot-scope="scope">
+                    <el-image v-if="scope.row.fileUrl" style="width: 40px; height: 40px" :src="scope.row.fileUrl">
+                      <div slot="error" class="image-slot">
+                        <i class="el-icon-picture-outline"></i>
+                      </div>
+                    </el-image>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="createBy" label="操作人" align="center" min-width="100"></el-table-column>
+                <el-table-column prop="createTime" label="操作时间" align="center"></el-table-column>
+              </el-table>
+            </div>
+          </div>
+        </div>
+      </template>
+    </zj-page-fill>
+    <div style="box-sizing: border-box; padding: 10px; text-align: right;">
+      <!-- 确定退货退款 -->
+      <el-button v-if="detailsTypeCp==2" type="primary" size="small" @click="faqituikuan">确定</el-button>
+      <!-- 确认收款 -->
+      <el-button v-if="detailsTypeCp==1" type="primary" size="small" @click="quererndingda">确认收款</el-button>
+    </div>
+  </zj-page-container>
+</template>
+
+<script>
+import { esOrderDetail, esOrderRefund, esOrderPayPrice, esOrderPayPriceList } from "@/api/orderManagement";
+import ImageUpload from '@/components/file-upload'
+export default {
+  components:{
+    ImageUpload
+  },
+  props:{
+    detailsId: {
+      type: [String, Number],
+      default: ""
+    },
+    detailsType: {
+      type: [String, Number],
+      default: ""
+    },
+  },
+  data() {
+    return {
+      activeName: "first",
+      detailsTypeCp: this.detailsType,
+      // 退货退款表单
+      formTH: {
+
+      },
+      // 收款表单
+      formSK: {
+        fileUrl:[]
+      },
+      // 订单详情
+      orderDetail: {
+      },
+      // 物流详情
+      expressDetail: {
+      },
+      orderPayPriceList:[],
+    }
+  },
+  computed:{
+    zhuangtai(){
+      return  !!~['SAVE','WAIT'].indexOf(this.orderDetail.status)?1:!!~['PAID'].indexOf(this.orderDetail.status)?2:!!~['SEND'].indexOf(this.orderDetail.status)?3:!!~['OVER'].indexOf(this.orderDetail.status)?4:-1
+    }
+  },
+  watch: {
+    detailsId: {
+      handler(newVal, oldVal) {
+        this.getEsOrderDetail()
+      },
+      deep: true,
+      immediate: true,
+    },
+  },
+  methods: {
+    getEsOrderDetail(){
+      esOrderDetail({
+        esOrderId: this.detailsId
+      }).then(res=>{
+        this.orderDetail = {
+          ...res.data
+        }
+      })
+      esOrderPayPriceList({
+        esOrderId: this.detailsId
+      }).then(res=>{
+        this.orderPayPriceList = res.data
+      })
+    },
+    lookkuaidi(){
+      this.$emit("viewMaterialFlow", {...this.orderDetail})
+    },
+    faqituikuan(){
+      this.$refs.formTHref.validate((valid) => {
+        if (valid) {
+          esOrderRefund({
+            esOrderId: this.detailsId,
+            ...this.formTH
+          }).then(res=>{
+            this.$message({ type: 'success', message: `确定退货退款成功!` })
+            this.$emit("removeTab")
+          })
+        }
+      });
+    },
+    quererndingda(){
+      this.$refs.formSKref.validate((valid) => {
+        if (valid) {
+          esOrderPayPrice({
+            esOrderId: this.detailsId,
+            ...this.formSK,
+            fileUrl: this.formSK.fileUrl.map(item=>item.url).join(",")
+          }).then(res=>{
+            this.$message({ type: 'success', message: `确认收款成功!` })
+            this.$emit("removeTab")
+          })
+        }
+      });
+    }
+  }
+}
+</script>
+
+<style scoped lang="scss">
+.info {
+  .info_title {
+    font-size: 16px;
+    font-weight: 700;
+  }
+
+  .info_bottom {
+    display: flex;
+    margin: 10px 0;
+
+    .info_bottom_lt {
+      width: 40px;
+      height: 40px;
+    }
+
+    .info_bottom_rt {
+      padding: 0 0 0 10px;
+      line-height: 30px;
+
+      .photoPZ {
+        display: inline-block;
+        vertical-align: text-top;
+      }
+    }
+  }
+}
+
+.order-main {
+  margin-top: 15px;
+  border: 1px solid #e5e5e5;
+
+  .order-main-title {
+    font-size: 14px;
+  }
+
+  .order-main-title span {
+    margin-right: 15px;
+  }
+
+  .order-main-status {
+    padding: 15px 0;
+    font-size: 24px;
+    color: #409EFF;
+  }
+
+  .order-main-opt-btn {
+    padding: 15px 0;
+  }
+}
+
+.order-receive-info {
+  margin: 15px 0 30px;
+  padding: 15px;
+  background: #f5f7fa;
+
+  :first-child div span {
+    padding-right: 15px;
+  }
+}
+
+.order-detail {
+  background: #f5f7fa;
+
+  .order-amount-info {
+    padding: 15px 0;
+    font-size: 12px;
+    font-weight: bold;
+  }
+
+  ::v-deep .el-table tr,
+  ::v-deep .el-table th {
+    background-color: #f5f7fa;
+  }
+}
+
+.main-detail {
+  .title {
+    font-size: 16px;
+    font-weight: 700;
+    margin-bottom: 20px;
+  }
+
+  .item {
+    display: flex;
+    font-size: 14px;
+    color: #666;
+    padding-bottom: 12px;
+
+    .label {
+      white-space: nowrap;
+    }
+  }
+}
+
+.order-evaluate-info {
+  margin: 15px 0;
+  padding: 30px 15px;
+  background: #f5f7fa;
+
+  .title {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+
+    .left {
+      font-size: 16px;
+      font-weight: 700;
+
+      span {
+        font-weight: normal;
+        margin-left: 20px;
+        font-size: 14px;
+        color: #666;
+      }
+    }
+
+    .right {
+      display: flex;
+      align-items: center;
+      font-size: 14px;
+
+      span {
+        margin-right: 10px;
+      }
+    }
+  }
+
+  .main {
+    margin-top: 20px;
+    display: flex;
+
+    .rate-list {
+      font-size: 14px;
+      flex-shrink: 0;
+    }
+
+    .tag-list {
+      margin-left: 30px;
+
+      ::v-deep .el-tag {
+        margin-right: 10px;
+        margin-bottom: 10px;
+      }
+    }
+  }
+
+  .content {
+    width: 400px;
+    line-height: 20px;
+    font-size: 14px;
+    color: #333;
+    margin-top: 10px;
+  }
+
+  .img-list {
+    display: flex;
+    flex-wrap: wrap;
+    margin-top: 10px;
+    width: 400px;
+
+    ::v-deep .el-image {
+      width: 100px;
+      height: 100px;
+      margin-right: 10px;
+      margin-bottom: 10px;
+      border: 1px solid #eaeaea;
+    }
+  }
+}
+</style>

+ 7 - 10
src/views/secondHandMall/orderManagement/getLbsAmapRegion.js

@@ -18,7 +18,7 @@ export default {
           formItemAttributes: {
             label: '客户地址', //省
             prop: 'provinceId',
-            rules: [],
+            rules:[{ required: true, message: '请选择', trigger: 'blur' }],
             errLabel: '省'
           },
           options: this.provinceList.map((v, i) => ({ value: v.id, label: v.name })),
@@ -42,7 +42,7 @@ export default {
             'label-width': '0px',
             label: '', //市
             prop: 'cityId',
-            rules: [],
+            rules:[{ required: true, message: '请选择', trigger: 'blur' }],
             errLabel: '市'
           },
           options: this.cityList.map((v, i) => ({ value: v.id, label: v.name })),
@@ -66,7 +66,7 @@ export default {
             'label-width': '0px',
             label: '', //区
             prop: 'areaId',
-            rules: [],
+            rules:[{ required: true, message: '请选择', trigger: 'blur' }],
             errLabel: '区'
           },
           options: this.areaList.map((v, i) => ({ value: v.id, label: v.name })),
@@ -85,12 +85,12 @@ export default {
         },
         {
           name: 'el-select',
-          md: 6,
+          md: 5,
           formItemAttributes: {
             'label-width': '0px',
             label: '', //街道
             prop: 'streetId',
-            rules: [],
+            rules:[{ required: true, message: '请选择', trigger: 'blur' }],
             errLabel: '街道'
           },
           options: this.streetList.map((v, i) => ({ value: v.id, label: v.name })),
@@ -151,10 +151,7 @@ export default {
                         this.formData.streetId = id
                         this.formData.street = name
                         // 赋值GPS详细地址
-                        this.formData.gpsAddress = data.name
-                        if (!this.formData.address) {
-                          this.formData.address = data.name
-                        }
+                        this.formData.receAddress = data.name
                       })
                     })
                   })
@@ -166,7 +163,7 @@ export default {
         {
           name: 'el-input',
           md: 24,
-          formItemAttributes: { label: '', prop: 'address', rules: [] },
+          formItemAttributes: { label: '', prop: 'receAddress', rules:[{ required: true, message: '请选择', trigger: 'blur' }], },
           attributes: { disabled: false, placeholder: '详细地址' }
         },
       ]

+ 301 - 141
src/views/secondHandMall/orderManagement/index.vue

@@ -30,17 +30,6 @@
                         </el-form-item>
                       </el-col>
                       <el-col :xs="24" :sm="12" :lg="6">
-                        <el-form-item label="状态" prop="evaluateStatus">
-                          <el-select v-model="screenForm.evaluateStatus" placeholder="全部">
-                            <el-option label="全部" value=""></el-option>
-                            <el-option label="未评价订单" :value="0"></el-option>
-                            <el-option label="已评价订单" :value="3"></el-option>
-                            <el-option label="差评订单" :value="1"></el-option>
-                            <el-option label="好评订单" :value="2"></el-option>
-                          </el-select>
-                        </el-form-item>
-                      </el-col>
-                      <el-col :xs="24" :sm="12" :lg="6">
                         <el-form-item label="创建时间" prop="createDate" style="height: 33px;">
                           <el-date-picker v-model="screenForm.createDate" type="datetimerange"
                             value-format="yyyy-MM-dd HH:mm:ss" range-separator="至" start-placeholder="开始日期"
@@ -56,9 +45,11 @@
                         </el-form-item>
                       </el-col>
                       <el-col :xs="24" :sm="12" :lg="6" class="tr">
-                        <el-form-item label="">
-                          <el-button size="small" type="primary" @click="submitScreenForm">搜索</el-button>
-                          <el-button size="small" @click="resetScreenForm">清空</el-button>
+                        <el-form-item label="" label-width="0px">
+                          <div style="text-align: left;">
+                            <el-button size="small" type="primary" @click="submitScreenForm">搜索</el-button>
+                            <el-button size="small" @click="resetScreenForm">清空</el-button>
+                          </div>
                         </el-form-item>
                       </el-col>
                     </el-row>
@@ -68,23 +59,22 @@
                   <div class="fl">
                     <el-tabs v-model="tabCurrent" type="card" @tab-click="changeTabs" class="fl" size="small" style="margin-right: 10px">
                       <el-tab-pane label="全部" name="ALL"></el-tab-pane>
-                      <el-tab-pane label="待付款" name="NOPAY"></el-tab-pane>
-                      <el-tab-pane label="待确认" name="DQR"></el-tab-pane>
-                      <el-tab-pane label="待发货" name="DFH"></el-tab-pane>
-                      <el-tab-pane label="已发货" name="YFH"></el-tab-pane>
+                      <el-tab-pane label="待付款" name="SAVE"></el-tab-pane>
+                      <el-tab-pane label="待确认" name="WAIT"></el-tab-pane>
+                      <el-tab-pane label="待发货" name="PAID"></el-tab-pane>
+                      <el-tab-pane label="已发货" name="SEND"></el-tab-pane>
                       <el-tab-pane label="已完成" name="OVER"></el-tab-pane>
-                      <el-tab-pane label="退款/取消" name="CLOSE"></el-tab-pane>
-                      <el-tab-pane label="已超时" name="TIMEOUT"></el-tab-pane>
+                      <el-tab-pane label="已售后/取消" name="CANCEL"></el-tab-pane>
+                      <el-tab-pane label="已超时" name="TIME_OUT"></el-tab-pane>
                     </el-tabs>
-                    <el-button class="fl" type="primary" size="small" @click="add">新增</el-button>
+                    <el-button class="fl" type="primary" size="small" @click="add(1)">新增</el-button>
                   </div>
                   <div class="fr">
-                    <el-button size="small" type="primary">导出</el-button>
+                    <el-button size="small" type="primary" @click="handleExport">导出</el-button>
                   </div>
                 </div>
                 <zj-page-fill>
                   <div class="order-main-container">
-                    <!--  -->
                     <div class="table-top">
                       <el-row style="width:100%">
                         <el-col :span="3">
@@ -98,35 +88,33 @@
                         <el-col :span="3" style="text-align: center"><span class="item">操作</span></el-col>
                       </el-row>
                     </div>
-                    <!--  -->
                     <div class="order-item" v-for="order in dataList" :key="order.orderId">
                       <div class="order-top">
-                        <span><b>订单号</b>:{{ order.orderId }}</span>
+                        <span><b>订单号</b>:{{ order.esOrderId }}</span>
                         <span><b>下单时间</b>:{{ order.createTime }}</span>
-                        <el-tag>商城销售</el-tag>
+                        <el-tag v-if="~[2,'2'].indexOf(order.saleType)">线下销售</el-tag>
+                        <el-tag v-if="~[1,'1'].indexOf(order.saleType)">线上销售</el-tag>
+                        <el-tag v-if="order.saleType==1 && order.payType == 'WECHAT'">在线支付</el-tag>
+                        <el-tag v-if="(order.saleType==1 && order.payType != 'WECHAT') || order.saleType==2">到店支付</el-tag>
+                        <el-tag v-if="~[0].indexOf(order.totalAmount)">面议</el-tag>
                         <div class="fr"></div>
                       </div>
                       <div class="order-content">
                         <el-row style="width:100%;">
                           <el-col :span="6" style="height: 100%;">
                             <div class="col-item-pro">
-                              <div class="pro-item" v-for="orderItem in order.orderDetails" :key="orderItem.orderDetailId">
+                              <div class="pro-item">
                                 <div class="left">
                                   <div class="image">
-                                    <img :src="orderItem.imgUrl" style="height:80px;width: 80px;">
+                                    <img :src="order.goodsUrl" style="height:80px;width: 80px;">
                                   </div>
                                   <div class="main">
-                                    <span><el-tag type="danger" effect="plain" size="mini" style="margin-right: 4px"
-                                        v-if="orderItem.promotionFullPieceId">满件打折</el-tag>{{ orderItem.esGoodsName }}</span>
-                                    <span class="spec"
-                                      v-if="orderItem.goodsSpecName === '默认' && orderItem.goodsSpecValue === '默认'">默认</span>
-                                    <span class="spec" v-else>{{ orderItem.goodsSpecName }}-{{ orderItem.goodsSpecValue
-                                      }}</span>
+                                    <span>{{ order.esGoodsName }}</span>
                                   </div>
                                 </div>
                                 <div class="right">
-                                  <span>¥{{ orderItem.price }}</span>
-                                  <span>x{{ orderItem.num }}</span>
+                                  <span>¥{{ order.goodsPrice }}</span>
+                                  <span>x{{ order.num }}</span>
                                 </div>
                               </div>
                             </div>
@@ -139,44 +127,37 @@
                           </el-col>
                           <el-col :span="4" style="height: 100%;">
                             <div class="col-item">
-                              <div>{{ order.receUserName }}/{{ order.recePhone }}</div>
-                              <div class="ellipsis-2">{{ order.province + order.city + order.area + order.street + order.receAddress + order.houseNo }}</div>
+                              <div>{{ order.userName }}/{{ order.userMobile }}</div>
+                              <div class="ellipsis-2">{{ order.province + order.city + order.area + order.street + order.receAddress }}</div>
                             </div>
                           </el-col>
                           <el-col :span="4" style="height: 100%;">
                             <div class="col-item">
-                              <div class="totalprice">¥{{ order.payAmount }}</div>
-                              <div style="font-size: 12px" v-if="order.discountAmount">(<span>-{{ order.discountAmount
-                                  }}</span><span v-if="order.promotionDiscountRate">/{{ order.promotionDiscountRate * 10
-                                  }}折</span>)</div>
+                              <div class="totalprice">¥{{ order.totalAmount }}</div>
                             </div>
                           </el-col>
                           <el-col :span="3" style="height: 100%;">
                             <div class="col-item">
                               <div style="display: flex; align-items: center;">
-                                <img src="@/assets/order/CLOSE.png" style="width: 16px; flex-shrink: 0;"
-                                  v-if="order.status == 'CLOSE'">
-                                <img src="@/assets/order/DFH.png" style="width: 16px; flex-shrink: 0;"
-                                  v-if="order.status == 'DFH'">
-                                <img src="@/assets/order/NOPAY.png" style="width: 16px; flex-shrink: 0;"
-                                  v-if="order.status == 'NOPAY'">
-                                <img src="@/assets/order/OVER.png" style="width: 16px; flex-shrink: 0;"
-                                  v-if="order.status == 'OVER'">
-                                <img src="@/assets/order/TIMEOUT.png" style="width: 16px; flex-shrink: 0;"
-                                  v-if="order.status == 'TIMEOUT'">
-                                <img src="@/assets/order/YFH.png" style="width: 16px; flex-shrink: 0;"
-                                  v-if="order.status == 'YFH'">
-                                <span style="margin-left: 4px">{{ order.status | ORDER_CURRENT_STATUS_FILTER }}</span>
+                                <span style="margin-left: 4px">{{ ({SAVE: "待支付", WAIT: "待确认", PAID: "待发货", SEND: "卖家发货", OVER: "已完成", TIME_OUT: "超时", CANCEL: "已售后/取消", WAIT_REFUND: "售后中", REFUND: "已退"})[order.status] }}</span>
                               </div>
-                              <div>({{ order.toWorkOrder ? '已派单' : '未派单' }})</div>
                             </div>
                           </el-col>
                           <el-col :span="3" style="height: 100%;">
-                            <div class="col-item">
+                            <div class="col-item">  
                               <div class="operate">
-                                <el-popconfirm title="确定确认订单吗?" @confirm="">
+                                <el-popconfirm v-if="~['WAIT'].indexOf(order.status)" title="确认订单吗?" @confirm="quedingesOrderPayOk(order)">
                                   <el-button slot="reference" type="text" size="small">确认订单</el-button>
                                 </el-popconfirm>
+                                <el-popconfirm v-if="~['SAVE','WAIT'].indexOf(order.status)" title="确认取消订单吗?" @confirm="quedingesOrderCancel(order)">
+                                  <el-button slot="reference" type="text" size="small">取消订单</el-button>
+                                </el-popconfirm>
+                                <el-button v-if="~['SEND','OVER'].indexOf(order.status)" @click="viewMaterialFlow(order)" type="text" size="small">查看物流</el-button>
+                                <el-button v-if="~['SAVE', 'WAIT', 'PAID', 'SEND', 'OVER', 'CANCEL', 'TIME_OUT'].indexOf(order.status)" @click="viewDetails(order, 0)" type="text" size="small">查看详情</el-button>
+                                <el-button v-if="~['CASH'].indexOf(order.payType) && ~['SAVE'].indexOf(order.status)" @click="viewDetails(order, 1)" type="text" size="small">确认收款</el-button>
+                                <el-button v-if="~['SEND','OVER'].indexOf(order.status)" @click="viewDetails(order, 2)" type="text" size="small">发起退货</el-button>
+                                <el-button v-if="~['PAID'].indexOf(order.status)" type="text" @click="gofahuo(order)" size="small">发货</el-button>
+                                <el-button v-if="~['PAID','SEND'].indexOf(order.status)" type="text" size="small" @click="toPrint(order)">打印</el-button>
                               </div>
                             </div>
                           </el-col>
@@ -199,90 +180,53 @@
           </div>
           <!-- 新增 -->
           <div v-if="activeKey == 'add'" style="width:100%;height:100%;">
-            <zj-page-container>
-              <zj-page-fill>
-                <div style="box-sizing: border-box; padding:10px;">
-                  <add/>
-                </div>
-              </zj-page-fill>
-            </zj-page-container>
+            <add :detailsId="detailsId" :detailsType="detailsType" @removeTab="()=>{
+              getList()
+              data.removeTab()
+            }"/>
           </div>
-          <!-- 确认订单 -->
-          <div v-if="activeKey == 'remark'" style="width:100%;height:100%;">
-            <zj-page-container>
-              <zj-page-fill>
-                <div style="box-sizing: border-box; padding:10px;">
-                
-                </div>
-              </zj-page-fill>
-            </zj-page-container>
-          </div>
-          <!-- 确认收款 -->
-          <div v-if="activeKey == 'materialDetail'" style="width:100%;height:100%;">
-            <zj-page-container>
-              <zj-page-fill>
-                <div style="box-sizing: border-box; padding:10px;">
-                
-                </div>
-              </zj-page-fill>
-            </zj-page-container>
-          </div>
-          <!-- 取消订单 -->
-          <div v-if="activeKey == 'deliverGoods'" style="width:100%;height:100%;">
-            <zj-page-container>
-              <zj-page-fill>
-                <div style="box-sizing: border-box; padding:10px;">
-                
-                </div>
-              </zj-page-fill>
-            </zj-page-container>
+          <!-- 查看详情 / 确认收款 / 退货-->
+          <div v-if="~activeKey.indexOf('details_')" style="width:100%;height:100%;">
+            <detailsV :detailsId="detailsId" :detailsType="detailsType" @viewMaterialFlow="viewMaterialFlow" @removeTab="()=>{
+              getList()
+              data.removeTab()
+            }"/>
           </div>
           <!-- 查看物流 -->
-          <div v-if="activeKey == 'editAddress1'" style="width:100%;height:100%;">
-            <zj-page-container>
-              <zj-page-fill>
-                <div style="box-sizing: border-box; padding:10px;">
-                
-                </div>
-              </zj-page-fill>
-            </zj-page-container>
-          </div>
-          <!-- 查看详情 -->
-          <div v-if="activeKey == 'editAddress2'" style="width:100%;height:100%;">
-            <zj-page-container>
-              <zj-page-fill>
-                <div style="box-sizing: border-box; padding:10px;">
-                
-                </div>
-              </zj-page-fill>
-            </zj-page-container>
+          <div v-if="activeKey == 'materialFlow'" style="width:100%;height:100%;">
+            <materialFlow :detailsId="detailsId"/>
           </div>
-          <!-- 退货 -->
-          <div v-if="activeKey == 'editAddress3'" style="width:100%;height:100%;">
-            <zj-page-container>
-              <zj-page-fill>
-                <div style="box-sizing: border-box; padding:10px;">
-                
-                </div>
-              </zj-page-fill>
-            </zj-page-container>
+          <!-- 发货 -->
+          <div v-if="activeKey == 'fahuo'" style="width:100%;height:100%;">
+            <deliverGoods :detailsId="detailsId" @removeTab="()=>{
+              getList()
+              data.removeTab()
+            }"/>
           </div>
         </template>
       </zj-tab-page>
     </zj-page-fill>
+    <print-preview ref="preView" @initPrint="handleInitPrint" @refreshList="handleRefreshList" />
   </zj-page-container>
-
 </template>
 
 <script>
-import { esOrderList } from "@/api/orderManagement";
+import { esOrderList, esOrderListExcel, esOrderPayOk, esOrderCancel, esOrderDetail } from "@/api/orderManagement";
 import add from "./add.vue"
+import detailsV from "./details.vue"
+import materialFlow from "./materialFlow.vue"
+import deliverGoods from "./deliverGoods.vue"
 import '@/styles/order-list.scss'
+import { downloadFiles } from '@/utils/util'
+import { disAutoConnect, hiprint } from 'vue-plugin-hiprint'
+import printPreview from '../components/preview.vue'
 export default {
-  components: {add},
-
+  components: {add, detailsV, materialFlow, deliverGoods, printPreview},
   data() {
     return {
+      pageType:this?.$route?.params?.pageType,
+      pageCode:this?.$route?.params?.pageCode,
+      pagePam:this?.$route?.params?.pagePam,
       screenForm: { // 筛选表单数据
         orderId: '', // 订单号
         esGoodsName: '', // 商品名称
@@ -297,28 +241,51 @@ export default {
         sendStatus: '', // 派单异常
         workerOrderNo: '', // 信息编号
       },
-      screen_status: [ // 筛选字段 - 状态
-        { label: '待付款', value: 'NOPAY' },
-        { label: '待发货', value: 'DFH' },
-        { label: '已发货', value: 'YFH' },
-        { label: '已完成', value: 'OVER' },
-        { label: '已退款', value: 'CLOSE' }
-      ],
       tabCurrent: 'ALL',
       currentPage: 1, // 当前页码
       pageSize: 10, // 每页数量
       listTotal: 0, // 列表总数
       dataList: [],
+      detailsId: "",
+      detailsType: "",
     }
   },
-  computed: {
-
-  },
   created() {
     this.getList();
+    if(this.pageType==="detail" && this.pageCode){
+      this.$nextTick(()=>{
+        this.viewDetails({esOrderId:this.pageCode},0)
+      })
+    }
+    if(this.pageType==="materialFlow" && this.pageCode){
+      this.$nextTick(()=>{
+        this.viewMaterialFlow({esOrderId:this.pageCode})
+      })
+    }
+    if(this.pageType==="add" && this.pageCode){
+      this.$nextTick(()=>{
+        this.add(0)
+      })
+    }
   },
   methods: {
-    add(){
+    quedingesOrderPayOk(row){
+      esOrderPayOk({
+        esOrderId:row.esOrderId
+      }).then(res=>{
+        this.$message({ type: 'success', message: `确定成功!` })
+        this.getList();
+      })
+    },
+    quedingesOrderCancel(row){
+      esOrderCancel({
+        esOrderId:row.esOrderId
+      }).then(res=>{
+        this.$message({ type: 'success', message: `取消成功!` })
+        this.getList();
+      })
+    },
+    add(type){
       this.$refs.tabPage.addTab({
         // 对应显示的模块
         activeKey: "add",
@@ -328,7 +295,62 @@ export default {
         label: "新增订单",
         // 打开时事件
         triggerEvent: () => {
-        
+          this.detailsType = type
+        },
+        // 关闭时事件
+        closeEvent: () => {
+          
+        }
+      })
+    },
+    viewDetails(row, type){
+      this.$refs.tabPage.addTab({
+        // 对应显示的模块
+        activeKey: "details_"+type,
+        // 唯一标识
+        key: "details_"+type,
+        // 页签名称
+        label: ["订单详情", "确认收款", "退货退款"][type],
+        // 打开时事件
+        triggerEvent: () => {
+          this.detailsId = row.esOrderId
+          this.detailsType = type
+        },
+        // 关闭时事件
+        closeEvent: () => {
+          
+        }
+      })
+    },
+    viewMaterialFlow(row){
+      this.$refs.tabPage.addTab({
+        // 对应显示的模块
+        activeKey: "materialFlow",
+        // 唯一标识
+        key: "materialFlow",
+        // 页签名称
+        label: "查看物流",
+        // 打开时事件
+        triggerEvent: () => {
+          this.detailsId = row.esOrderId
+        },
+        // 关闭时事件
+        closeEvent: () => {
+          
+        }
+      })
+    },
+    gofahuo (row) {
+      this.$refs.tabPage.addTab({
+        // 对应显示的模块
+        activeKey: "fahuo",
+        // 唯一标识
+        key: "fahuo",
+        // 页签名称
+        label: "发货",
+        // 打开时事件
+        triggerEvent: () => {
+          this.detailsId = row.esOrderId
         },
         // 关闭时事件
         closeEvent: () => {
@@ -364,16 +386,12 @@ export default {
         this.listTotal = res.data.total;
       })
     },
-    openForm(type, order) {
-
-    },
     // 更改每页数量
     handleSizeChange(val) {
       this.pageSize = val;
       this.currentPage = 1;
       this.getList();
     },
-
     // 更改当前页
     handleCurrentChange(val) {
       this.currentPage = val;
@@ -390,6 +408,148 @@ export default {
       this.currentPage = 1;
       this.getList();
     },
+    // 导出
+    handleExport() {
+      let params = {
+        orderId: this.screenForm.orderId, // 订单号
+        esGoodsName: this.screenForm.esGoodsName, // 商品名称
+        userName: this.screenForm.userName, // 会员昵称
+        userMobile: this.screenForm.userMobile, // 手机号
+        status: this.screenForm.status, // 状态
+        startCreateTime: this.screenForm.createDate[0] ? this.screenForm.createDate[0] : null, // 创建时间
+        endCreateTime: this.screenForm.createDate[1] ? this.screenForm.createDate[1] : null, // 创建时间
+        startPayTime: this.screenForm.payDate[0] ? this.screenForm.payDate[0] : null, // 支付时间
+        endPayTime: this.screenForm.payDate[1] ? this.screenForm.payDate[1] : null, // 支付时间
+        pageNum: this.currentPage,
+        pageSize: this.pageSize
+      };
+      downloadFiles('esOrder/listExcel', params);
+    },
+    // 点击打印
+		async toPrint(row) {
+			const { data } = await esOrderDetail({
+        esOrderId: row.esOrderId
+      })
+			// 初始化模板,否则生成的模板叠加
+			hiprint.init()
+			this.hiprintTemplate = new hiprint.PrintTemplate()
+			// 使用 i-- 提升for效率
+			this.$startLoading()
+      try {
+        let num = data.num
+        let totalAmount = Number(data.num) * Number(data.goodsPrice)
+        let html = `
+          <tr align="center">
+          <td>${data.esGoodsName || ''}</td>
+          <td>${data.unit||''}</td>
+          <td>${data.num}</td>
+          <td>${data.goodsPrice}</td>
+          <td>${totalAmount}</td>
+          <td>${data.remark || ''}</td>
+          </tr>
+        `
+        // 模板基础配置
+        this.panel = this.hiprintTemplate.addPrintPanel({
+          height: 140,
+          width: 241,
+          fontFamily: '黑体',
+          fontSize: 13,
+          paperFooter: 340,
+          paperHeader: 10,
+          paperNumberDisabled: true
+        })
+        // 获取收款单模板和基础配置
+        this.panel.addPrintHtml({
+          options: {
+            width: 633,
+            top: 30,
+            left: 20,
+            fontFamily: '黑体',
+            fontSize: 13,
+            content: this.setTableDom(data, html, totalAmount, num, 1, 0)
+          }
+        })
+      } catch (error) {
+        this.$endLoading()
+        return
+      }
+			this.$endLoading()
+			// 预览打印内容
+			this.$refs.preView.show(this.hiprintTemplate, this.panel)
+		},
+		// 打印模板
+		setTableDom(data, html, totalAmount, num, length, page) {
+      let now = new Date();
+      let year = now.getFullYear();
+      let month = now.getMonth() + 1; // 月份是从 0 开始计数的,所以要加 1
+      let day = now.getDate();
+      let hours = now.getHours();
+      let minutes = now.getMinutes();
+      let seconds = now.getSeconds();
+      let nowTime = `${year}-${month < 10 ? '0'+month : month}-${day < 10 ? '0'+day : day} ${hours < 10 ? '0'+hours : hours}:${minutes < 10 ? '0'+minutes : minutes}:${seconds < 10 ? '0'+seconds : seconds}`
+      let showpPrintCount = `打印日期: ${nowTime}`;
+			return `
+	    <div style="font-family:'黑体';font-size: 16px;">
+        <div style="display: flex;justify-content: center;align-items: center;position: relative;">
+          <h1 style="text-align:center;margin: 10px 0;">${JSON.parse(localStorage.getItem('greemall_user'))?.billTitle || data.companyWechatName}销售单</h1>
+          <div style="position: absolute;right:0;">共 ${length}页 第 ${page + 1} 页</div>
+        </div>
+        <div style="display: flex;justify-content: space-between;">
+          <div>${showpPrintCount}</div>
+          <div>单据日期: ${data.createTime}</div>
+          <div>单据编号: ${data.esOrderId}</div>
+        </div>
+        <div style="display: flex;justify-content: space-between;font-size: 16px;margin: 10px 0;">
+          <div>客户: ${data.userName}</div>
+          <div>摘要: ${({TRANSFER:"在线支付",WECHAT:"在线支付",CASH:"到店支付"})[data.payType]}</div>
+        </div>
+        <div style="display: flex;font-size: 16px;margin-bottom: 10px;">
+          <div style="flex-shrink: 0;">联系电话: ${data.userMobile}</div>
+          <div style="margin-left: 50px;">收货地址: ${data.province}${data.city}${data.area}${data.street}${data.receAddress}</div>
+        </div>
+        <div >
+          <table border=".5" cellspacing="0" width="856" style="border-color: rgb(0,0,0);border-collapse: collapse;border-style: none;border: 1px solid rgb(0,0,0);font-weight: normal;text-decoration: none;vertical-align: middle;box-sizing: border-box;word-wrap: break-word;word-break: break-all;">
+            <tr align="center">
+              <td>商品名称</td>
+              <td>单位</td>
+              <td>数量</td>
+              <td>单价</td>
+              <td>金额</td>
+              <td>备注</td>
+            </tr>
+            ${html}
+            <tr align="center" align="center">
+              <td>小计: </td>
+              <td></td>
+              <td>${num}</td>
+              <td>${totalAmount}</td>
+              <td>金额总计: ${totalAmount}</td>
+              <td></td>
+            </tr>
+          </table>
+        </div>
+        <div style="display: flex;justify-content: space-between;font-size: 16px;margin: 10px 0;">
+          <div>制单人: ${data.createBy || ''}</div>
+          <div>审核人: ${JSON.parse(localStorage.getItem('greemall_user'))?.nickName || ''}</div>
+          <div>业务员: ${data.saleName || ''}</div>
+          <div>签收人: </div>
+        </div>
+        <div style="display: flex;justify-content: flex-end;">
+        </div>
+        <div style="margin:100px 0 0 0">
+          <div></div>
+        </div>
+	   </div>
+	  `
+		},
+    handleRefreshList() {
+      this.getList();
+		},
+		handleInitPrint() {
+			this.$nextTick(() => {
+				this?.initPrint()
+			})
+		},
   }
 }
 

+ 312 - 0
src/views/secondHandMall/orderManagement/materialFlow.vue

@@ -0,0 +1,312 @@
+<template>
+  <zj-page-container>
+    <zj-page-fill>
+      <div style="box-sizing: border-box; padding:10px;">
+        <div>
+          
+          <div class="order-main">
+            <el-row style="padding: 15px 15px 10px">
+              <el-col :span="24">
+                <div class="order-main-title">
+                  <span>订单编号:{{ orderDetail.esOrderId }}</span>
+                  <span>下单时间:{{ orderDetail.createTime }}</span>
+                </div>
+              </el-col>
+            </el-row>
+            <div style="width: 100%; padding: 10px 15px 15px 15px">
+              <el-row :gutter="10">
+                <el-col :xs="24" :sm="24" :md="8" :lg="8" :xl="8">
+                  <div class='info'>
+                    <div class='info_title'>卖家信息</div>
+                    <div class='info_bottom'>
+                      <div class='info_bottom_lt'>
+                        <el-image v-if="orderDetail.sellUrl" style='width: 40px; height: 40px' :src="orderDetail.sellUrl"></el-image>
+                      </div>
+                      <div class='info_bottom_rt'>
+                        <div>昵称:{{orderDetail.sellName}}</div>
+                        <div>手机号:{{orderDetail.sellMobile}}</div>
+                        <div>发布时间:{{orderDetail.sellTime}}</div>
+                      </div>
+                    </div>
+                  </div>
+                </el-col>
+                <el-col :xs="24" :sm="24" :md="8" :lg="8" :xl="8">
+                  <div class='info'>
+                    <div class='info_title'>买家信息</div>
+                    <div class='info_bottom'>
+                      <div class='info_bottom_lt'>
+                        <el-image v-if="orderDetail.wechatUserUrl" style='width: 40px; height: 40px' :src="orderDetail.wechatUserUrl">
+                        </el-image>
+                      </div>
+                      <div class='info_bottom_rt'>
+                        <div v-if="orderDetail.wechatUserName">昵称:{{orderDetail.wechatUserName}}</div>
+                        <div v-if="orderDetail.wechatUserMobile">手机号:{{orderDetail.wechatUserMobile}}</div>
+                        <div>收货人信息:({{orderDetail.userName}}){{orderDetail.userMobile}}</div>
+                        <div>收货人地址:{{ orderDetail.province + orderDetail.city + orderDetail.area + orderDetail.street + orderDetail.receAddress }}</div>
+                        <div>支付方式:{{({WECHAT:"微信支付", CASH:"到店支付", TRANSFER:"转账支付"})[orderDetail.payType]}}</div>
+                      </div>
+                    </div>
+                  </div>
+                </el-col>
+                <el-col :xs="24" :sm="24" :md="8" :lg="8" :xl="8">
+                  <div class='info'>
+                    <div class='info_title'>物流信息</div>
+                    <div class='info_bottom'>
+                      <div class='info_bottom_rt'>
+                        <div>
+                          <el-radio-group disabled v-model="orderDetail.pickType">
+                            <el-radio label='YES'>自提</el-radio>
+                            <el-radio label='NO'>物流</el-radio>
+                          </el-radio-group>
+                        </div>
+                        <div v-if="orderDetail.logisticsCode && orderDetail.logisticsNo">快递单号:{{orderDetail.logisticsNo}}</div>
+                        <div v-if="orderDetail.logisticsCode && orderDetail.logisticsNo">快递公司:{{orderDetail.logisticsName}}</div>
+                      </div>
+                    </div>
+                  </div>
+                </el-col>
+              </el-row>
+            </div>
+          </div>
+
+          <h3 v-if="orderDetail.logisticsCode && orderDetail.logisticsNo">物流信息</h3>
+          <div v-if="orderDetail.logisticsCode && orderDetail.logisticsNo" class="order-detail">
+            <el-table :data="expressList" style="width: 100%" border>
+              <el-table-column prop="comName" label="物流公司" align="center"></el-table-column>
+              <el-table-column prop="areaName" label="地区名称" align="center"></el-table-column>
+              <el-table-column prop="time" label="物流时间" align="center" min-width="100"></el-table-column>
+              <el-table-column prop="state" label="物流状态" align="center">
+                <template slot-scope="scope">
+                  <div>{{ ({0:'在途',1:'揽收',2:'疑难',3:'签收',4:'退签',5:'派件',6:'退回'})[scope.row.state] }}</div>
+                </template>
+              </el-table-column>
+              <el-table-column prop="context" label="物流详情" align="center"></el-table-column>
+            </el-table>
+          </div>
+
+        </div>
+      </div>
+    </zj-page-fill>
+  </zj-page-container>
+</template>
+
+<script>
+import { esOrderDetail, esOrderExpress, esOrderRefund, esOrderPayPrice } from "@/api/orderManagement";
+export default {
+  props:{
+    detailsId: {
+      type: [String, Number],
+      default: ""
+    },
+  },
+  data() {
+    return {
+      // 订单详情
+      orderDetail: {
+      },
+      // 物流详情
+      expressList: [],
+    }
+  },
+  watch: {
+    detailsId: {
+      handler(newVal, oldVal) {
+        this.getEsOrderDetail()
+      },
+      deep: true,
+      immediate: true,
+    },
+  },
+  methods: {
+    getEsOrderDetail(){
+      esOrderDetail({
+        esOrderId: this.detailsId
+      }).then(res=>{
+        this.orderDetail = {
+          ...res.data
+        }
+        if(this.orderDetail.logisticsCode && this.orderDetail.logisticsNo){
+          esOrderExpress({
+            companyCode:this.orderDetail.logisticsCode,
+            logisticsNo:this.orderDetail.logisticsNo
+          }).then(res2=>{
+            this.expressList = res2.data
+          })
+        }
+      })
+    },
+  }
+}
+</script>
+
+<style scoped lang="scss">
+.info {
+  .info_title {
+    font-size: 16px;
+    font-weight: 700;
+  }
+
+  .info_bottom {
+    display: flex;
+    margin: 10px 0;
+
+    .info_bottom_lt {
+      width: 40px;
+      height: 40px;
+    }
+
+    .info_bottom_rt {
+      padding: 0 0 0 10px;
+      line-height: 30px;
+
+      .photoPZ {
+        display: inline-block;
+        vertical-align: text-top;
+      }
+    }
+  }
+}
+
+.order-main {
+  margin-top: 15px;
+  border: 1px solid #e5e5e5;
+
+  .order-main-title {
+    font-size: 14px;
+  }
+
+  .order-main-title span {
+    margin-right: 15px;
+  }
+
+  .order-main-status {
+    padding: 15px 0;
+    font-size: 24px;
+    color: #409EFF;
+  }
+
+  .order-main-opt-btn {
+    padding: 15px 0;
+  }
+}
+
+.order-receive-info {
+  margin: 15px 0 30px;
+  padding: 15px;
+  background: #f5f7fa;
+
+  :first-child div span {
+    padding-right: 15px;
+  }
+}
+
+.order-detail {
+  background: #f5f7fa;
+
+  .order-amount-info {
+    padding: 15px 0;
+    font-size: 12px;
+    font-weight: bold;
+  }
+
+  ::v-deep .el-table tr,
+  ::v-deep .el-table th {
+    background-color: #f5f7fa;
+  }
+}
+
+.main-detail {
+  .title {
+    font-size: 16px;
+    font-weight: 700;
+    margin-bottom: 20px;
+  }
+
+  .item {
+    display: flex;
+    font-size: 14px;
+    color: #666;
+    padding-bottom: 12px;
+
+    .label {
+      white-space: nowrap;
+    }
+  }
+}
+
+.order-evaluate-info {
+  margin: 15px 0;
+  padding: 30px 15px;
+  background: #f5f7fa;
+
+  .title {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+
+    .left {
+      font-size: 16px;
+      font-weight: 700;
+
+      span {
+        font-weight: normal;
+        margin-left: 20px;
+        font-size: 14px;
+        color: #666;
+      }
+    }
+
+    .right {
+      display: flex;
+      align-items: center;
+      font-size: 14px;
+
+      span {
+        margin-right: 10px;
+      }
+    }
+  }
+
+  .main {
+    margin-top: 20px;
+    display: flex;
+
+    .rate-list {
+      font-size: 14px;
+      flex-shrink: 0;
+    }
+
+    .tag-list {
+      margin-left: 30px;
+
+      ::v-deep .el-tag {
+        margin-right: 10px;
+        margin-bottom: 10px;
+      }
+    }
+  }
+
+  .content {
+    width: 400px;
+    line-height: 20px;
+    font-size: 14px;
+    color: #333;
+    margin-top: 10px;
+  }
+
+  .img-list {
+    display: flex;
+    flex-wrap: wrap;
+    margin-top: 10px;
+    width: 400px;
+
+    ::v-deep .el-image {
+      width: 100px;
+      height: 100px;
+      margin-right: 10px;
+      margin-bottom: 10px;
+      border: 1px solid #eaeaea;
+    }
+  }
+}
+</style>