Эх сурвалжийг харах

Merge remote-tracking branch 'origin/feature-201816-wangcz' into feature-201816-wangcz

Administrator 7 жил өмнө
parent
commit
6917d2b2b4

+ 2 - 6
components/mobile/Home.vue

@@ -211,16 +211,12 @@
         let ua = this.$store.state.option.userAgent.toLowerCase()
         let info = localStorage.getItem('USOFTMALLWECHATINFO')
         // 如果本地有缓存 则证明存在openid
+        info = info && JSON.parse(info)
         if (ua.match(/micromessenger/i) && ua.match(/micromessenger/i)[0] === 'micromessenger' && !this.$route.query.code && !info) {
             window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxb3274b676737a319&redirect_uri=https://www.usoftmall.com&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`
             // window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxd29bbca61728b189&redirect_uri=http://cuy53h.natappfree.cc&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`
           } else if (ua.match(/micromessenger/i) && ua.match(/micromessenger/i)[0] === 'micromessenger') {
-            info = info && JSON.parse(info)
-            if (info) {
-              // if (info.status === 1) {
-              //   this.$store.dispatch('GerWechatInfo', {code: '', openId: info.openid})
-              // }
-            } else {
+            if (!info) {
               this.$store.dispatch('GerWechatInfo', {code: this.$route.query.code})
             }
         }

+ 0 - 0
components/mobile/order/order.vue


+ 1155 - 0
pages/mobile/order/index.vue

@@ -0,0 +1,1155 @@
+<template>
+  <div class="order-wrapper" id="order-wrapper">
+    <div class="com-mobile-header">
+      <a @click="goLastPage"><i class="iconfont icon-fanhui"></i></a>
+      <p>订单管理
+      </p>
+    </div>
+    <div class="order-nav">
+      <div :class="activeType === '' ? 'active': ''" @click="ChangeList('')"><span>全部</span></div>
+      <div :class="activeType === 'tobeconfirmed' ? 'active' : ''" @click="ChangeList('tobeconfirmed')"><span>待付款</span></div>
+      <div :class="activeType === 'comfirmed' ? 'active' : ''" @click="ChangeList('comfirmed')"><span>待发货</span></div>
+      <div :class="activeType === 'inbound' ? 'active' : ''" @click="ChangeList('inbound')"><span>待收货</span></div>
+    </div>
+    <ul class="order-list-wrap">
+      <li class="clearfix" v-for="item in orderList">
+        <div class="list-wrap-title clearfix">
+          <div class="pull-left" v-if="vendorType !== 'buyer'">{{item.buyername}}&nbsp;|&nbsp;{{item.buyentername}}</div>
+          <div class="pull-left" v-else>{{item.sellername}}</div>
+          <div class="pull-right">
+            <template v-if="vendorType === 'buyer'">
+              <span class="red" v-if="item.status === 505 || item.status === 406 || item.status === 407 || item.status === 403 || item.status === 408">待卖家发货</span>
+              <span class="red" v-else-if="item.status === 501 || item.status === 502 || item.status === 503 || item.status === 524">待付款</span>
+              <span class="red" v-else-if="item.status === 404">待收货</span>
+              <span class="red" v-else-if="item.status === 602 || item.status === 603 || item.status === 315 || item.status === 604 || item.status === 605 || item.status === 606">已取消</span>
+              <span class="red" v-else-if="item.status === 504">付款确认中</span>
+              <span class="red" v-else-if="item.status === 520 || item.status === 405">交易已完成</span>
+              <span class="red" v-else-if="item.status === 525">卖家请求取消</span>
+            </template>
+            <template v-else>
+              <span class="red" v-if="item.status === 502 || item.status === 406">买家已付款</span>
+              <!--<span class="red">待发货</span>-->
+              <span class="red" v-else-if="item.status === 602 || item.status === 603 || item.status === 315 || item.status === 604 || item.status === 605 || item.status === 606">订单已取消</span>
+              <span class="red" v-else-if="item.status === 501 || item.status === 524">待买家付款</span>
+              <span class="red" v-else-if="item.status === 404 || item.status === 520 || item.status === 405 || item.status === 503 || item.status === 514">待买家收货</span>
+              <span class="red" v-else-if="item.status === 405 || item.status === 514 || item.status === 503 || item.status === 506">待商城付款</span>
+              <span class="red" v-else-if="item.status === 606">交易关闭</span>
+              <span class="red" v-else-if="item.status === 520">交易完成</span>
+              <span class="red" v-else-if="item.status === 525">卖家发起取消,待确认</span>
+              <span class="red" v-else-if="item.status === 504">付款确认中</span>
+            </template>
+          </div>
+        </div>
+        <div class="list-wrap-content" v-for="(details, index) in item.purchaseDetails" v-if="index < 3">
+          <div class="list-item clearfix">
+            <div class="list-wrap-content-brand clearfix pull-left">
+              <div class="name pull-left">品牌:</div>
+              <div class="pull-left">{{details.brName || '-'}}</div>
+            </div>
+            <div class="pull-right lab">
+              自定义标签
+            </div>
+          </div>
+
+          <div class="list-item clearfix">
+            <div class="list-wrap-content-brand clearfix pull-left">
+              <div class="name pull-left">类目:</div>
+              <div class="pull-left">{{details.kiName || '-'}}</div>
+            </div>
+            <div class="pull-right pri">
+              <span>¥</span>{{details.ensurePrice}}
+            </div>
+          </div>
+
+          <div class="list-item clearfix">
+            <div class="list-wrap-content-brand clearfix pull-left">
+              <div class="name pull-left">型号:</div>
+              <div class="pull-left">{{details.cmpCode || '-'}}</div>
+            </div>
+            <div class="pull-right lab">
+              <span>x</span>{{details.number}}
+            </div>
+          </div>
+        </div>
+        <div class="list-all-info clearfix">
+          <div>共<span>{{item.batchQty}}</span>件商品&nbsp;&nbsp;合计:
+            <span class="pri"><a class="red">¥</a>{{item.ensurePrice }}</span>
+            <span class="lab">(含运费:<a class="red">¥</a><a class="red">{{item.fare | priceFiter}}</a>)</span></div>
+        </div>
+        <div class="list-btn clearfix">
+          <template v-if="vendorType === 'buyer'">
+            <div class="pull-right sendGoods" v-if="item.status === 404" @click="buyerGetGoods(item)">确认收货</div>
+            <div class="pull-right sendGoods" v-if="!item.installmentId && (item.status === 503 || item.status === 501)" @click="onMind('跳到上传水印地址')">确认付款</div>
+            <div class="pull-right" @click="lookOrderDetail(item)">订单详情</div>
+            <div class="pull-right sendGoods" @click="onMind('此订单为分期付款,请前往【PC】端进行相关操作')" v-if="item.installmentId && (item.status === 503 || item.status === 504 || item.status === 524 ) && item.installment.status !== 505 && !item.againUpload">立即付款</div>
+            <div class="pull-right" @click="onMind('此订单为分期付款,请前往【PC】端进行相关操作')" v-if="item.installmentId && (item.status === 503 || item.status === 504 || item.status === 524 ) && item.installment.status !== 505 && item.againUpload">重新上传</div>
+            <div class="pull-right" @click="cancelOrder(item)" v-if="item.status === 503 || item.status === 501 || item.status === 502">取消订单</div>
+            <div class="pull-right" @click="deleteOrder(item)" v-if="item.status === 602 || item.status === 603 || item.status === 315 || item.status === 604 || item.status === 605 || item.status === 606">
+              删除订单</div>
+            <div class="pull-right" v-if="_getHoursFromNow(item.paytime) > sellsendGoodsTime - 1">提醒发货</div>
+            <div @click="lookLogisticsInfo(item)" class="pull-right" v-if="item.status === 404 || item.status === 520 || item.status === 405 || item.status === 521">查看物流</div>
+          </template>
+          <template v-else>
+            <div class="pull-right sendGoods" v-if="(item.status === 502 || item.status === 406) && !item.uasPurcid" @click="sendGoods(item)">点击发货</div>
+            <div @click="changelogistics(item)" class="pull-right sendGoods" v-if="item.status === 404 && !item.uasPurcid">修改物流</div>
+            <div @click="lookOrderDetail(item)" class="pull-right">订单详情</div>
+            <div @click="deleteOrder(item)" class="pull-right" v-if="item.status === 602 || item.status === 603 || item.status === 315 || item.status === 604 || item.status === 605 || item.status === 606">
+              删除订单</div>
+            <div @click="lookLogisticsInfo(item)" class="pull-right" v-if="item.status === 404 || item.status === 520 || item.status === 405 || item.status === 503 || item.status === 514">查看物流</div>
+            <div @click="onMind('此订单为分期付款,请前往【PC】端进行相关操作')" class="pull-right" v-if="item.installmentId && ((item.installment.status === 503 && item.Overtime) || item.installment.status === 504) && item.status !== 606 && item.status !== 525">
+              取消订单
+            </div>
+            <div @click="onMind('此订单为分期付款,请前往【PC】端进行相关操作')" class="pull-right" v-if="installmentDetailPaid(item) && item.status !== 525 && item.status !== 606">
+              确认收款
+            </div>
+          </template>
+        </div>
+      </li>
+    </ul>
+    <div v-if="getOrderList && false"></div>
+    <!-- 发货弹窗 -->
+    <div class="mobile-modal" v-if="showSend">
+      <div class="sendGoods_Alert">
+        <div class="sendGoods_title">发货信息<span><i class="iconfont icon-guanbi1" @click="showSend = false"></i></span></div>
+        <div class="sendGoods_buyer">
+          <div class="sendGoods_buyer_top">
+            <span class="name">{{sendGoodsInfo.area.name}}</span>
+            <span class="tel">{{sendGoodsInfo.area.tel}}</span>
+          </div>
+          <div class="sendGoods_buyer_bottom">
+            <img src="/images/order/address_icon.png"/>
+            <span>{{sendGoodsInfo.area.area}}{{sendGoodsInfo.area.detailAddress}}</span>
+          </div>
+        </div>
+        <div class="sendGoods_list clearfix">
+          <div class="ti pull-left">配送方式</div>
+          <div class="pull-right">
+            {{sendGoodsInfo.sendType === 1301 ? '第三方配送' : (sendGoodsInfo.sendType === 1302 ? '卖家配送': '上门自提')}}
+          </div>
+        </div>
+        <div class="sendGoods_list clearfix" @click="choosePeisong()">
+          <div class="ti pull-left">配送商</div>
+          <div class="pull-right">{{peisongShowName ? peisongShowName : '请选择'}}<img src="/images/mobile/user/icon-right.png"/></div>
+        </div>
+        <div class="sendGoods_list clearfix">
+          <div class="ti pull-left">运单号</div>
+          <div class="pull-right"><input type="number" placeholder="请输入运单号" v-model="sendGoodsInfo.kuaidinumber"/></div>
+        </div>
+        <div class="sendGoods_Btn" @click="saveSendGoods()">
+          确定
+        </div>
+      </div>
+    </div>
+    <!-- /end 发货弹窗 -->
+    <!-- 选择配送商 -->
+    <div class="mobile-modal" v-if="peisongShow">
+      <div class="peisong_Alert">
+        <div class="com-mobile-header" >
+          <a @click="peisongShow = false"><i class="iconfont icon-fanhui"></i></a>
+          <p>选择配送商
+          </p>
+        </div>
+        <div class="search-content">
+          <input type="text" v-model="seekKeyword" placeholder="请输入您要查找的配送商" @keyup.13="searchSeek" ref="searchSeekInput" @focus="inputGetFocus()" @blur="blur()">
+          <span @click="searchSeek" >
+          <i class="iconfont icon-sousuo"></i>
+          </span>
+        </div>
+        <ul>
+          <li class="clearfix" v-for="(item, index) in peisongList" @click="selectPeisong(index, item)">
+            <div class="name pull-left">{{item.companyName}}</div>
+            <div class="pull-right target" :class="peisongChooseIndex === index ? 'active' : ''"></div>
+          </li>
+        </ul>
+        <div @click="savePeisongChoose()" class="sendGoods_Btn">保存</div>
+      </div>
+    </div>
+    <!-- /end 选择配送商 -->
+    <!-- 删除订单 -->
+    <!-- 删除提示框 -->
+    <div class="deleteKuang" v-if="showDeleteAlert">
+      <div class="kuangContent">
+        <div class="title">删除信息</div>
+        <div class="titleinfo">是否删除此订单</div>
+        <!--<div class="info" v-show="isUploadpro">*存在已上架信息</div>-->
+        <div class="K_btn">
+          <div class="cancelBtn" @click="showDeleteAlert = false">取消</div>
+          <div class="answerBtn" @click="deleteFn()">确定</div>
+        </div>
+      </div>
+    </div>
+    <!-- /end 删除订单 -->
+    <!-- 取消订单原因弹窗 -->
+    <div class="mobile-modal" v-if="showBuyerAlert">
+     <div class="cancelOrder">
+       <div class="sendGoods_title">取消订单<span><i class="iconfont icon-guanbi1" @click="showBuyerAlert = false"></i></span></div>
+       <div class="cancelOrder_title">请选择取消订单的原因(必选):</div>
+       <ul>
+         <li v-for="(item, index) in cancelList" class="clearfix" @click="ChooseOrderCancel(item, index)">
+           <div class="target pull-left" :class="index === OrderCancelIndex ? 'active' : ''"></div>
+           <div class="name pull-left">{{item}}</div>
+         </li>
+       </ul>
+       <div @click="cancenFn()" class="sendGoods_Btn">确定</div>
+     </div>
+    </div>
+    <!-- /end 取消订单原因弹窗 -->
+    <remind-box :title="collectResult" :timeoutCount="timeoutCount"></remind-box>
+    <pull-up :fixId="'order-wrapper'"
+             :searchMore="isSearchSearchingMore"
+             :allPage="allPage"
+             :page="page"
+             @pullUpAction="getMoreSearch"></pull-up>
+  </div>
+</template>
+
+<script>
+  import { EncryptionFilter } from '~utils/tools.js'
+  import { RemindBox, PullUp } from '~components/mobile/common'
+  import axios from '~plugins/axios'
+  export default {
+    name: 'order',
+    layout: 'mobile',
+    middleware: 'authenticated',
+    fetch({store, route}) {
+      return route.query.type === 'buyer' ? Promise.all([
+        store.dispatch('order/getBuyerOrderList', {
+          count: 5,
+          page: 1,
+          isRate: false,
+          currentPage: 1,
+          sorting: { creattime: 'DESC' },
+          status: '503-504-524-525-505-406-407-403-408-404-405-520-523-522-602-603-315-604-605-606'}
+        )
+      ]) : Promise.all([
+        store.dispatch('order/getSellOrderList', {
+          count: 5,
+          page: 1,
+          sorting: { createtime: 'DESC' },
+          status: '',
+          storeType: 'other'}
+        )
+      ])
+    },
+    data() {
+      return {
+        isSearchSearchingMore: false,
+        page: 1,
+        collectResult: '',
+        timeoutCount: 0,
+        activeType: '', // 选择类型
+        orderList: [], // 订单列表
+        $status: '', // 传参状态
+        showSend: false, // 是否显示发货弹窗
+        sendGoodsInfo: { // 发货弹窗对象
+          area: {}
+        },
+        peisongShow: false, // 是否显示配送商选择弹窗
+        seekKeyword: '',
+        peisongChooseIndex: '', // 配送商选择下标
+        peisongList: [], // 配送商数组
+        peisongShowName: '', // 选择完后的配送
+        showDeleteAlert: false, // 是否显示删除订单
+        sellsendGoodsTime: '', // 卖家发货时间
+        showBuyerAlert: false, // 买家取消订单原因
+        cancelList: ['我不想买了', '信息填写有误,重新购买', '先看看样品再下单', '付款遇到问题(如余额不足、超出限额等)', '买错了', '其他原因'], // 取消订单原因数组
+        $CancenOrderId: '', // 取消订单id
+        $Orderreason: '', // 取消订单原因
+        OrderCancelIndex: '' // 取消订单原因下标
+      }
+    },
+    computed: {
+      allPage() {
+        return this.$store.state.order.order.orderList.data.totalPages
+      },
+      vendorType() {
+        return this.$route.query.type
+      },
+      getOrderList() {
+        this.orderList = this._initSetParams(this.$store.state.order.order.orderList.data.content)
+        return this.$store.state.order.order.orderList
+      }
+    },
+    async asyncData({route}) {
+      if (route.query.type === 'buyer') {
+        let { data } = await axios.get(`/trade/tradebasicproperties/get/1054`)
+        return {
+          sellsendGoodsTime: parseInt(data.info)
+        }
+      }
+    },
+    methods: {
+      getMoreSearch() {
+        this.page++
+        this.isSearchSearchingMore = true
+        let params = {
+          count: 5,
+          page: this.page,
+          sorting: {createtime: 'DESC'},
+          status: this.$status,
+          storeType: 'other',
+          isRate: false,
+          currentPage: this.page
+        }
+        if (this.vendorType === 'buyer') {
+          params.sorting = { creattime: 'DESC' }
+        }
+        let url = this.vendorType !== 'buyer' ? '/trade/purchase/status/createtime' : '/trade/history/goods/list'
+        this.$http.get(url, {params}).then(res => {
+          this.isSearchSearchingMore = false
+          res.data.content = this._initSetParams(res.data.content)
+          this.orderList = [...this.orderList, ...res.data.content]
+        })
+      },
+      ChangeList(_tp) {
+        this.activeType = _tp
+        this.page = 1
+        if (this.$route.query.type !== 'buyer') {
+          // 卖家中心
+          this.sellOrderList(_tp)
+        } else {
+          // 买家中心
+          this.buyerOrderList(_tp)
+        }
+      },
+      // 买家中心订单列表加载数据
+      buyerOrderList(_tp) {
+        let status = '503-504-524-525-505-406-407-403-408-404-405-520-523-522-602-603-315-604-605-606'
+        if (_tp === 'tobeconfirmed') {
+          status = '503-504-524-525'
+        } else if (_tp === 'comfirmed') {
+          status = '505-406-407-403-408'
+        } else if (_tp === 'inbound') {
+          status = '404'
+        }
+        this.$status = status
+        this.$store.dispatch('order/getBuyerOrderList', {
+          count: 5,
+          page: 1,
+          isRate: false,
+          currentPage: 1,
+          sorting: { creattime: 'DESC' },
+          status: status
+        })
+      },
+      // 卖家中心订单列表加载数据
+      sellOrderList(_tp) {
+        let status = ''
+        if (_tp === 'tobeconfirmed') {
+          status = '501-504-524-525'
+        } else if (_tp === 'comfirmed') {
+          status = '502-406'
+        } else if (_tp === 'inbound') {
+          status = '404-511'
+        }
+        this.peisongShowName = ''
+        this.sendGoodsInfo.kuaidinumber = ''
+        this.$status = status
+        this.$store.dispatch('order/getSellOrderList', {
+          count: 5,
+          page: 1,
+          sorting: {createtime: 'DESC'},
+          status: status,
+          storeType: 'other'
+        })
+      },
+      // 是否为分期付款
+      installmentDetailPaid(item) {
+        if (!item.installment) return false
+        let _flag = false
+        item.installment.installmentDetails.forEach(list => {
+          if (list.detno === item.installment.currentNo && list.status === 504) {
+            _flag = true
+          }
+        })
+        return _flag
+      },
+      // 发货
+      sendGoods(item) {
+        this._id
+        this.sendGoodstype = 'add'
+        if (item.inid) {
+          this._id = EncryptionFilter(item.inid)
+          this.$http.get(`/trade/inFpu/tobeshipped/${this._id}`).then(res => {
+            this.sendGoodsInfo = res.data[0]
+            this.sendGoodsInfo.area = JSON.parse(res.data[0].jsonSpAddress)
+            this.showSend = true
+          })
+        } else {
+          this.$http.get(`/trade/purchase/vendor/tobeshiped/${item.id}`).then(res => {
+            this._id = EncryptionFilter(res.inid)
+            this.$http.get(`/trade/inFpu/tobeshipped/${this._id}`).then(res => {
+              this.sendGoodsInfo = res.data[0]
+              this.sendGoodsInfo.area = JSON.parse(res.data[0].jsonSpAddress)
+              this.showSend = true
+            })
+          }, err => {
+            this.onMind('转出货单失败' + err.data)
+          })
+        }
+      },
+      // 选择配送商
+      choosePeisong() {
+        if (this.peisongList.length > 0) {
+          this.peisongShow = true
+          return
+        }
+        this.$http.get('/trade/distributor/selected').then(res => {
+          this.peisongList = res.data
+          this.peisongList.splice(0, 0, {
+            companyName: '请选择配送商'
+          })
+          this.peisongShow = true
+        })
+      },
+      // 配送商列表选择
+      selectPeisong(index, item) {
+        this.peisongChooseIndex = index
+        this.peisongChooseItem = item
+      },
+      // 确定选择当前配送商
+      savePeisongChoose() {
+        this.peisongShow = false
+        this.peisongShowName = this.peisongChooseItem.companyName === '请选择配送商' ? '' : this.peisongChooseItem.companyName
+      },
+      // 发货最终步骤
+      saveSendGoods() {
+        // 发货
+        if (this.sendGoodstype === 'add') {
+          let patt = new RegExp('^[A-Za-z0-9]+$')
+          if (this.peisongShowName === '') {
+            this.onMind('请选择配送商')
+          } else if (!this.sendGoodsInfo.kuaidinumber) {
+            this.onMind('请填写物流单号')
+          } else if (!patt.test(this.sendGoodsInfo.kuaidinumber)) {
+            this.onMind('请输入正确的物流单号')
+          } else {
+            let sendInfo = this.getLogisticsInfo()
+            this.$http.post(`/trade/inFpu/save?id=${this.sendGoodsInfo.id}`, sendInfo).then(res => {
+              if (res.data.success) {
+                this.onMind('发货成功')
+                setTimeout(() => {
+                  this.ChangeList(this.activeType)
+                  this.showSend = false
+                  this.peisongChooseIndex = 0
+                  this.peisongChooseItem = {companyName: '请选择配送商'}
+                }, 1500)
+              }
+            })
+          }
+        } else if (this.sendGoodstype === 'change') {
+          // 修改物流
+          let sendInfo = this.getLogisticsInfo('change')
+          let patt = new RegExp('^[A-Za-z0-9]+$')
+          if (!this.sendGoodsInfo.lgtId) {
+            // 如果快递公司 以及 快递编号为空
+            if (!this.peisongShowName && !this.sendGoodsInfo.kuaidinumber) {
+              this.showSend = false
+              return
+            }
+            // 如果快递公司为空
+            if (!this.peisongShowName && this.sendGoodsInfo.kuaidinumber) {
+              this.onMind('请选择配送商')
+              return
+            } else if (!this.sendGoodsInfo.kuaidinumber) {
+              this.onMind('请填写物流单号')
+              return
+            } else if (!patt.test(this.sendGoodsInfo.kuaidinumber)) {
+              this.onMind('请输入正确的物流单号')
+              return
+            }
+            // 没有物流信息则添加物流信息
+            this.$http.post(`/trade/logistics/add?inid=${this.sendGoodsInfo.inid}`, sendInfo).then(res => {
+              if (res.data.success) {
+                this.onMind('物流信息保存成功')
+                setTimeout(() => {
+                  this.ChangeList(this.activeType)
+                  this.peisongChooseIndex = 0
+                  this.peisongChooseItem = {companyName: '请选择配送商'}
+                  this.showSend = false
+                }, 1500)
+              }
+            })
+          } else {
+            if (this.ChangeInfoObj.number === this.sendGoodsInfo.kuaidinumber && this.peisongShowName === this.ChangeInfoObj.peisongShowName) {
+              this.showSend = false
+              return
+            }
+            if (this.peisongShowName !== '' || this.sendGoodsInfo.kuaidinumber !== '') {
+              // 如果用户未做任何信息修改
+              if (!this.peisongShowName) {
+                this.onMind('请选择配送商')
+                return
+              } else if (!this.sendGoodsInfo.kuaidinumber) {
+                this.onMind('请填写物流单号')
+                return
+              } else if (!patt.test(this.sendGoodsInfo.kuaidinumber)) {
+                this.onMind('请输入正确的物流单号')
+                return
+              }
+              this.$http.post(`/trade/logistics/${this.sendGoodsInfo.lgtId}?invoiceFuid=${this.sendGoodsInfo.inid}`, sendInfo).then(res => {
+                if (res.data.success) {
+                  this.onMind('修改物流信息成功')
+                  setTimeout(() => {
+                    this.ChangeList(this.activeType)
+                    this.peisongChooseIndex = 0
+                    this.peisongChooseItem = {companyName: '请选择配送商'}
+                    this.showSend = false
+                  }, 1500)
+                }
+              })
+            } else {
+              if (this.sendGoodsInfo.sendType !== 1301) {
+                // 如果清空了物流信息
+                this.$http.put(`/trade/logistics/clear?inid=${this.sendGoodsInfo.inid}`).then(res => {
+                  if (res.data.success) {
+                    this.onMind('修改物流信息成功')
+                    setTimeout(() => {
+                      this.ChangeList(this.activeType)
+                      this.peisongChooseIndex = 0
+                      this.peisongChooseItem = {companyName: '请选择配送商'}
+                      this.showSend = false
+                    }, 1500)
+                  }
+                })
+              }
+            }
+          }
+        }
+      },
+      // 买家取消订单
+      cancelOrder(item) {
+        this.$CancenOrderId = item.orderid
+        this.showBuyerAlert = true
+      },
+      // 买家取消订单原因选择
+      ChooseOrderCancel(item, index) {
+        this.OrderCancelIndex = index
+        this.$Orderreason = item
+      },
+      // 取消订单确认事件
+      cancenFn() {
+        if (!this.$Orderreason || this.$Orderreason === '') {
+          this.onMind('请选择取消订单的原因')
+        } else {
+          let reason = {
+            reason: this.$Orderreason
+          }
+          this.$http.put(`/trade/order/simpleinfo/ones/${this.$CancenOrderId}/release`, reason).then(res => {
+            this.onMind('取消订单成功,等待买家确认')
+            this.$Orderreason = ''
+            this.ChangeList(this.activeType)
+            this.showBuyerAlert = false
+          })
+        }
+      },
+      // 删除订单弹窗
+      deleteOrder(item) {
+        this.sendGoodsInfo = this.baseUtils.deepCopy(item)
+        this.showDeleteAlert = true
+      },
+      // 删除订单确定按钮
+      deleteFn() {
+        if (this.$route.query.type !== 'buyer') {
+          this.$http.post(`/trade/purchase/used/${this.sendGoodsInfo.purchaseid}`).then(res => {
+            this.ChangeList(this.activeType)
+            this.showDeleteAlert = false
+            this.onMind('删除成功')
+          })
+        } else {
+          this.$http.post(`/trade/order/used/${this.sendGoodsInfo.orderid}`).then(res => {
+            this.ChangeList(this.activeType)
+            this.showDeleteAlert = false
+            this.onMind('删除成功')
+          })
+        }
+      },
+      // 修改物流
+      changelogistics(item) {
+        this.sendGoodstype = 'change'
+        this.peisongShowName = ''
+        this.sendGoodsInfo.kuaidinumber = ''
+        let _obj = this.baseUtils.deepCopy(item)
+        if (!item.lgtId) {
+            // 如果没有订单编号
+            this.sendGoodsInfo = _obj
+            this.sendGoodsInfo.area = JSON.parse(_obj.jsonSdAddress)
+            this.showSend = true
+            this.ChangeInfoObj = {
+              number: '',
+              peisongShowName: ''
+            }
+          } else {
+            this.$http.get(`/trade/logistics/${_obj.lgtId}`).then(res => {
+              this.sendGoodsInfo = _obj
+              this.sendGoodsInfo.area = JSON.parse(_obj.jsonSdAddress)
+              this.sendGoodsInfo.kuaidinumber = res.data.number
+              this.peisongShowName = res.data.companyName
+              this.ChangeInfoObj = {
+                number: res.data.number,
+                peisongShowName: res.data.companyName
+              }
+              this.showSend = true
+            })
+        }
+      },
+      // 搜索
+      searchSeek() {
+        this.seekKeyword
+      },
+      // 获取物流提交信息
+      getLogisticsInfo(_type) {
+        let sendInfo = {}
+        sendInfo.sendType = this.sendGoodsInfo.sendType
+        sendInfo.jsonSdAddress = this.sendGoodsInfo.jsonSpAddress
+        sendInfo.logisticsInfo = {}
+        if (this.peisongShowName) {
+          sendInfo.logisticsInfo.companyName = this.peisongShowName
+        }
+        if (this.sendGoodsInfo.kuaidinumber) {
+          sendInfo.logisticsInfo.number = this.sendGoodsInfo.kuaidinumber
+        }
+        return _type ? sendInfo.logisticsInfo : sendInfo
+      },
+      // 查看物流信息
+      lookLogisticsInfo(item) {
+        this.$router.push(`/mobile/order/logistics?uuid=${EncryptionFilter(item.purchaseid)}`)
+      },
+      // 查看订单详情
+      lookOrderDetail(item) {},
+      // 买家确认收货
+      buyerGetGoods(item) {
+        this.$http.put(`/trade/order/simpleinfo/ones/${item.id}?_status=ensureaccept`).then(res => {
+          this.onMind('确认收货成功')
+          this.ChangeList(this.activeType)
+        })
+      },
+      // 买卖家中心字段同步化
+      _initSetParams(_obj) {
+        _obj = this.baseUtils.deepCopy(_obj)
+        for (let i = 0; i < _obj.length; i++) {
+          if (!_obj[i].purchaseDetails) {
+            _obj[i].purchaseDetails = _obj[i].orderDetails
+          }
+        }
+        return _obj
+      },
+      // 传入时间,计算距离现在的时间是多少小时了
+      _getHoursFromNow(time) {
+        if (!time) {
+          return 0
+        }
+        let newTime = new Date()
+        let msec = newTime.getTime() - time
+        let hours = parseInt(parseInt(msec) / (1000 * 60 * 60))
+        return hours
+      },
+      onMind(str) {
+        this.collectResult = str
+        this.timeoutCount++
+      },
+      blur: function() {
+        setTimeout(() => {
+          this.$store.dispatch('mobile/SetInputGetFocus', false)
+        }, 300)
+      },
+      inputGetFocus: function() {
+        setTimeout(() => {
+          this.$store.dispatch('mobile/SetInputGetFocus', true)
+        }, 300)
+      }
+    },
+    filters: {
+      priceFiter(val) {
+        if (!val) return '0.00'
+        return val.toFixed(2)
+      }
+    },
+    components: {
+      RemindBox,
+      PullUp
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+  @mixin overFlowHidden {
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+  }
+  @mixin lineHeight($value) {
+    height: $value;
+    line-height: $value;
+  }
+.order-wrapper {
+  background: #f1f3f6;
+  margin: 0.88rem 0 0.98rem 0;
+  height: calc(100vh - 0.88rem - 0.98rem);
+  overflow-y: scroll;
+  padding-bottom: 0.2rem;
+  .order-nav {
+    background: #fff;
+    div {
+      height: 0.82rem;
+      line-height: 0.82rem;
+      display: inline-block;
+      width: 25%;
+      text-align: center;
+      font-size: .28rem;
+      color: #666;
+      &.active span{
+        color: #3f84f6;
+        border-bottom: 0.03rem solid #3f84f6;
+        padding-bottom: 0.2rem;
+      }
+    }
+  }
+  .order-list-wrap {
+    li {
+      margin-top: 0.2rem;
+    }
+    .list-wrap-title{
+       padding: 0 0.2rem;
+       background: #fff;
+       @include lineHeight(0.88rem);
+       font-size: 0.28rem;
+       color: #333;
+       .pull-left {
+         width: 5rem;
+         @include overFlowHidden()
+       }
+       .pull-right {
+         .red {
+           color: #f21c1c;
+         }
+       }
+    }
+    .list-wrap-content {
+      background: #f9f9f8;
+      padding: 0.3rem 0.2rem;
+      border-bottom: 1px solid #e4e4e4;
+      .list-item {
+        font-size: 0.28rem;
+        color: #333;
+        line-height: 0.6rem;
+        .list-wrap-content-brand {
+          width: 4.8rem;
+          @include overFlowHidden();
+        }
+        .name {
+          color: #666;
+        }
+        .lab {
+          color: #999;
+          font-size: 0.24rem;
+          span {
+            font-size: 0.16rem;
+          }
+        }
+        .pri {
+          font-size: 0.32rem;
+          color: #f43938;
+          span {
+            font-size: 0.24rem;
+          }
+        }
+      }
+    }
+    .list-all-info{
+      text-align: right;
+      background: #fff;
+      padding: 0 0.2rem;
+      @include overFlowHidden();
+      @include lineHeight(0.66rem);
+      font-size: 0.26rem;
+      color: #333;
+      border-bottom: 1px solid #e4e4e4;
+      .pri {
+        font-size: 0.32rem;
+        color: #f43938;
+      }
+      .red {
+        color: #f43938;
+        font-size: 0.24rem;
+      }
+      .lab {
+        color: #999;
+        font-size: 0.24rem;
+      }
+    }
+    .list-btn {
+      background: #fff;
+      @include lineHeight(0.8rem);
+      padding: 0 0.2rem;
+      div {
+        display: inline-block;
+        width: 1.5rem;
+        @include lineHeight(0.56rem);
+        border: 0.01rem solid #333;
+        font-size: 0.26rem;
+        color: #333;
+        text-align: center;
+        margin-top: 0.11rem;
+        margin-left: 0.2rem;
+        border-radius: 3px;
+        &.sendGoods {
+          color: #f43938;
+          border: 0.01rem solid #f43938;
+        }
+      }
+    }
+  }
+  .sendGoods_Alert {
+    background: #fff;
+    position: absolute;
+    bottom: 0;
+    left: 0;
+    width: 100%;
+    border-top-left-radius: 5px;
+    border-top-right-radius: 5px;
+    overflow: hidden;
+    .sendGoods_title {
+      color: #333;
+      font-size: 0.42rem;
+      text-align: center;
+      line-height: 1rem;
+      font-weight: 600;
+      position: relative;
+      i {
+        position: absolute;
+        font-size: 16px;
+        right: 0.2rem;
+      }
+    }
+    .sendGoods_buyer {
+      padding: 0.3rem 0.2rem;
+      border-bottom: 1px solid #d9d9d9;
+      border-top: 1px solid #d9d9d9;
+      .sendGoods_buyer_top {
+        color: #333;
+        font-size: 0.3rem;
+        font-weight: bold;
+        .name {
+          margin-right: 0.3rem;
+          margin-left: 0.32rem;
+        }
+      }
+      .sendGoods_buyer_bottom {
+        color: #333;
+        font-size: 0.26rem;
+        margin-top: 0.2rem;
+        img {
+          width: 0.22rem;
+          height: 0.29rem;
+          margin-right: 0.1rem;
+          margin-top: -0.1rem;
+        }
+      }
+    }
+    .sendGoods_list {
+      padding: 0 0.2rem;
+      @include lineHeight(0.8rem);
+      border-bottom: 1px solid #d9d9d9;
+      font-size: 0.32rem;
+      color: #333;
+      .ti {
+        font-weight: bold;
+      }
+      .pull-right {
+        font-size: 0.28rem;
+        color: #999;
+        img {
+          width: 0.14rem;
+          height: 0.24rem;
+          vertical-align: middle;
+          margin-top: -0.02rem;
+          margin-left: 0.1rem;
+        }
+      }
+      input {
+        width: 4rem;
+        text-align: right;
+        color: #333;
+      }
+    }
+    .sendGoods_Btn {
+      @include lineHeight(1rem);
+      text-align: center;
+      color: #fff;
+      font-size: 0.36rem;
+      background: #3f84f6;
+    }
+  }
+  .search-content {
+    margin-top: 0.88rem;
+    margin-bottom: 0.2rem;
+    text-align: center;
+    padding: .25rem 0 0 0;
+    input {
+      border: 1px solid #376ff3;
+    }
+    span {
+      height: .46rem;
+      line-height: .46rem;
+    }
+  }
+  .peisong_Alert {
+    background: #f1f3f6;
+    position: fixed;
+    bottom: 0;
+    left: 0;
+    right: 0;
+    top: 0;
+    z-index: 11111;
+    ul {
+      height: calc(100vh - 1.2rem - 1.7rem);
+      overflow-y: scroll;
+      li {
+        line-height: 1rem;
+        background: #fff;
+        padding: 0 0.2rem;
+        font-size: 0.28rem;
+        color: #333;
+        border-bottom: 1px solid #e0e1e2;
+        div.name {
+          @include overFlowHidden();
+        }
+        div.target {
+          width: 0.36rem;
+          height: 0.36rem;
+          border-radius: 50%;
+          overflow: hidden;
+          border: 1px solid #a4a4a4;
+          margin-top: 0.3rem;
+          &.active {
+            background-image: url('/images/order/getChoose_icon.png');
+            background-size: 100% 100%;
+            border: 0px;
+          }
+        }
+      }
+    }
+    .sendGoods_Btn {
+      @include lineHeight(1rem);
+      text-align: center;
+      color: #fff;
+      font-size: 0.36rem;
+      background: #3f84f6;
+    }
+  }
+  .deleteKuang {
+    position: fixed;
+    background: rgba(0,0,0,0.5);
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    z-index: 9999;
+    .kuangContent {
+      border-radius: 5px;
+      background: #fff;
+      width: 5rem;
+      position: absolute;
+      left: 50%;
+      top: 50%;
+      transform: translate3d(-50%, -50%, 0);
+      overflow: hidden;
+      .titleinfo {
+        font-size: .3rem;
+        color: #666;
+        text-align: center;
+        margin-top: 0.5rem;
+        margin-bottom: 0.1rem;
+      }
+      .title {
+        background: #5078cb;
+        height: .7rem;
+        line-height: .7rem;
+        font-size: .3rem;
+        color: #fff;
+        text-align: center;
+      }
+      .info {
+        color: #f00;
+        text-align: center;
+      }
+      .K_btn {
+        margin-top: 0.4rem;
+        line-height: 0.7rem;
+        height: 0.7rem;
+        &::after{
+          clear: both;
+          display: block;
+          content: ' ';
+          visibility: hidden;
+          zoom: 1;
+        }
+        div {
+          float: left;
+          width: 50%;
+          font-size: 0.3rem;
+          text-align: center;
+          &.cancelBtn {
+            background: #b4b5b9;
+            color: #333;
+          }
+          &.answerBtn {
+            background: #5078cb;
+            color: #fff;
+          }
+        }
+      }
+    }
+    i {
+      font-size: .6rem;
+      position: absolute;
+      right: -0.3rem;
+      top: -0.35rem;
+      color: #fff;
+      &::after{
+        position: absolute;
+        top: -0.1rem;
+        left: -0.1rem;
+        right: -0.1rem;
+        bottom: -0.1rem;
+        content: ' '
+      }
+    }
+    .title {
+      background: #3f84f6;
+      height: 0.7rem;
+      line-height: 0.7rem;
+      color: #fff;
+      text-align: center;
+      font-size: 0.3rem;
+      position: relative;
+    }
+    .Kuang {
+      max-height: 10rem;
+      width: 6.7rem;
+      position: absolute;
+      left: 50%;
+      top: 50%;
+      transform: translate3d(-50%, -50%, 0);
+      background: #ececec;
+      border-radius: 5px;
+    }
+    .content {
+      overflow-y: scroll;
+      max-height: 9.3rem;
+      .infob {
+        background: #e3edfd;
+        padding: 0.2rem;
+        .info {
+          color: #333;
+          font-size: 0.3rem;
+          overflow: hidden;
+          text-overflow: ellipsis;
+          white-space: nowrap;
+          margin-bottom: 0.18rem;
+          .name {
+            color: #666;
+          }
+          div {
+            display: inline-block;
+          }
+        }
+      }
+      .content_sq {
+        width: 6.4rem;
+        margin: 0.1rem auto;
+        background: #fff;
+        padding: 0.2rem 0rem;
+        .list {
+          margin-bottom: 0.18rem;
+        }
+        .fl {
+          width: 3.2rem;
+        }
+        .table {
+          width: 4.2rem;
+          margin-top: -0.1rem;
+        }
+        .labelinfo {
+          background-image: url('/images/mobile/@2x/labelTop.png');
+          background-repeat: no-repeat;
+          width: 6.29rem;
+          height: 0.64rem;
+          line-height: 0.64rem;
+          background-size: 100%;
+          margin-top: 0rem;
+          margin-right: 0rem;
+          background-color: rgba(0, 0, 0, 0);
+          color: #666;
+        }
+      }
+    }
+  }
+  .cancelOrder {
+    background: #fff;
+    position: absolute;
+    bottom: 0;
+    left: 0;
+    width: 100%;
+    border-top-left-radius: 5px;
+    border-top-right-radius: 5px;
+    overflow: hidden;
+    .sendGoods_title {
+      color: #333;
+      font-size: 0.42rem;
+      text-align: center;
+      line-height: 1rem;
+      font-weight: 600;
+      position: relative;
+      i {
+        position: absolute;
+        font-size: 16px;
+        right: 0.2rem;
+      }
+    }
+    .cancelOrder_title {
+      font-size: 0.36rem;
+      color: #333;
+      border-bottom: 1px solid #d9d9d9;
+      font-weight: bold;
+      padding: 0 0.2rem;
+      line-height: 0.6rem;
+    }
+    ul {
+      li {
+        line-height: 1rem;
+        background: #fff;
+        padding: 0 0.2rem;
+        font-size: 0.32rem;
+        color: #333;
+        border-bottom: 1px solid #d9d9d9;
+        div.name {
+          @include overFlowHidden();
+        }
+        div.target {
+          margin-right: 0.2rem;
+          width: 0.36rem;
+          height: 0.36rem;
+          border-radius: 50%;
+          overflow: hidden;
+          border: 1px solid #a4a4a4;
+          margin-top: 0.3rem;
+          &.active {
+            background-image: url('/images/order/getChoose_icon.png');
+            background-size: 100% 100%;
+            border: 0px;
+          }
+        }
+      }
+    }
+    .sendGoods_Btn {
+      @include lineHeight(1rem);
+      text-align: center;
+      color: #fff;
+      font-size: 0.36rem;
+      background: #3f84f6;
+    }
+  }
+}
+</style>

+ 194 - 0
pages/mobile/order/logistics.vue

@@ -0,0 +1,194 @@
+<template>
+    <div class="order-wrapper">
+      <div class="com-mobile-header">
+        <a @click="goLastPage"><i class="iconfont icon-fanhui"></i></a>
+        <p>物流信息
+        </p>
+      </div>
+      <div class="logistics_top clearfix">
+        <div class="pull-left">
+          <div class="name">订单编号:<span class="red">{{detailsInfo.orderid}}</span></div>
+          <div class="name">配送方式:<span>{{detailsInfo.sendType === 1301 ? '第三方配送' : (detailsInfo.sendType === 1302 ? '卖家配送': '上门自提')}}</span></div>
+          <div class="name">配送商:<span>{{logistics.companyName || '-'}}</span></div>
+          <div class="name">运单号:<span class="red">{{logistics.number || '-'}}</span></div>
+        </div>
+        <div class="pull-right">
+          <template v-if="status === 'signin'">已签收</template>
+          <template v-else-if="status === 'send'">派件中</template>
+          <template v-else-if="status === 'transit'">运输中</template>
+          <template v-else>已发货</template>
+        </div>
+      </div>
+      <ul class="logistics_ul" v-if="logisticsInfo.length > 0">
+        <li class="clearfix" v-for="(item, index) in logisticsInfo">
+          <div class="pull-left" :class="index > 0 ? '' : 'marginL'">
+            <div class="logistics_icon" :class="index > 0 ? '' : 'active'">
+              <div class="red" v-if="index === 0"></div>
+            </div>
+          </div>
+          <div class="pull-right" :class="index > 0 ? '' : 'marginT'">
+            <div class="logistics_time">{{item.AcceptTime}}</div>
+            <div class="logistics_info">{{item.AcceptStation}}</div>
+          </div>
+        </li>
+      </ul>
+      <div class="nologistics" v-else>
+        <img src="/images/order/nologistics.png"/>
+        <div>暂无物流信息</div>
+      </div>
+    </div>
+</template>
+<script>
+   import axios from '~plugins/axios'
+    export default {
+      name: 'logistics',
+      layout: 'mobile',
+      middleware: 'authenticated',
+      data() {
+        return {
+          detailsInfo: {},
+          logistics: {},
+          logisticsInfo: {},
+          status: '',
+        }
+      },
+      async asyncData ({route}) {
+        let res = await axios.get(`/trade/purchase/purchaseId/${route.query.uuid}`)
+        let logistics = await axios.get(`/trade/logistics/${res.data.data.lgtId}`)
+        let logisticsInfo = await axios.get(`/kdn/logistics/query?companyName=${logistics.data.companyName}&logisticsCode=${logistics.data.number}`)
+        let str = logisticsInfo.data.traces
+        let status = ''
+        if (str.indexOf('揽件') !== -1 || str.indexOf('收件') !== -1 || str.indexOf('转运') !== -1 || str.indexOf('运输') !== -1 || str.indexOf('发往') !== -1 ||
+          str.indexOf('发出') !== -1 || str.indexOf('收入') !== -1 || str.indexOf('扫描') !== -1 || str.indexOf('到达') !== -1) {
+          status = 'transit'
+        }
+        if (str.indexOf('派送') !== -1 || str.indexOf('派件') !== -1) {
+          status = 'send'
+        }
+        if (str.indexOf('签收') !== -1) {
+          status = 'signin'
+        }
+        return {
+          detailsInfo: res.data.data,
+          logistics: logistics.data,
+          logisticsInfo: JSON.parse(logisticsInfo.data.traces).reverse(),
+          status: status
+        }
+      }
+    }
+</script>
+<style scoped lang='scss'>
+  @mixin overFlowHidden {
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+  }
+  @mixin lineHeight($value) {
+    height: $value;
+    line-height: $value;
+  }
+  .order-wrapper {
+    background: #f1f3f6;
+    margin: 0.88rem 0 0.98rem 0;
+    height: calc(100vh - 0.88rem - 0.98rem);
+    overflow-y: scroll;
+    .logistics_top {
+      padding: 0.2rem;
+      background: #fff;
+      margin-bottom: 0.2rem;
+      .pull-left {
+        font-size: 0.28rem;
+        color: #333;
+        .name {
+          @include lineHeight(0.5rem);
+        }
+        .red {
+          color: #f43938
+        }
+      }
+      .pull-right {
+        font-size: 0.32rem;
+        color: #f43938
+      }
+    }
+    .logistics_ul {
+      background: #fff;
+      padding: 0.2rem;
+      height: calc(100vh - 0.88rem - 0.98rem - 2.62rem);
+      overflow-y: auto;
+      li {
+        position: relative;
+        border-left: 2px solid #e4e5ea;
+        margin-left: 0.2rem;
+        .pull-left {
+          position: absolute;
+          left: -4px;
+          top: 0.36rem;
+          .logistics_icon {
+            width: 6px;
+            height: 6px;
+            border-radius: 50%;
+            background: #e4e5ea;
+            &.active {
+              width: 20px;
+              height: 20px;
+              border-radius: 50%;
+              background: #fcc1c0;
+              position: relative;
+              &~.logistics_line {
+                margin-left: 9px;
+              }
+              .red {
+                position: absolute;
+                width: 12px;
+                height: 12px;
+                background: #f32f2f;
+                margin-left: 4px;
+                margin-top: 4px;
+                border-radius: 50%;
+              }
+            }
+          }
+          &.marginL {
+            left: -10px;
+            top: 0px
+          }
+        }
+        .pull-right {
+          padding-top: 0.2rem;
+          font-size: 0.24rem;
+          color: #333;
+          border-bottom: 1px solid #f3f3f3;
+          padding-bottom: 0.2rem;
+          width: 6.4rem;
+          .logistics_time {
+            @include lineHeight(20px);
+          }
+          .logistics_info {
+            margin-top: 0.2rem;
+            word-break:break-all;
+            word-wrap: break-word;
+            line-height: 0.45rem
+          }
+          &.marginT {
+            padding-top: 0px;
+          }
+        }
+      }
+    }
+    .nologistics {
+      height: calc(100vh - 0.88rem - 0.98rem - 2.62rem);
+      text-align: center;
+      padding-top: 2rem;
+      img {
+        width: 1.87rem;
+        height: 1.87rem;
+      }
+      div {
+        font-size: 0.32rem;
+        color: #999999;
+        margin-top: 0.2rem;
+      }
+    }
+  }
+</style>

+ 1 - 1
pages/mobile/product/_batchCode.vue

@@ -157,7 +157,7 @@
     },
     computed: {
       commodity () {
-        console.log(this.$store.state.shop.storeInfo.commodity.data)
+        // console.log(this.$store.state.shop.storeInfo.commodity.data)
         return this.$store.state.shop.storeInfo.commodity.data
       },
       isRMB () {

+ 3 - 1
pages/mobile/wechat/index.vue

@@ -76,8 +76,10 @@
         // window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxb3274b676737a319&redirect_uri=https://www.usoftmall.com/mobile/wechat&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`
       } else if (info) {
         info = JSON.parse(info)
-        if (info.status === 1) {
+        if (info.openid) {
           this.$store.dispatch('GerWechatInfo', {code: '', openId: info.openid})
+        } else {
+          window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxb3274b676737a319&redirect_uri=https://www.usoftmall.com/mobile/wechat&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`
         }
       } else {
         this.$store.dispatch('GerWechatInfo', {code: this.$route.query.code})

BIN
static/images/order/address_icon.png


BIN
static/images/order/getChoose_icon.png


BIN
static/images/order/nologistics.png


+ 5 - 1
store/index.js

@@ -476,7 +476,11 @@ export const actions = {
     return axios.get('/wx/getWxUserInfo', { params: params })
       .then(response => {
         commit('option/REQUEST_WECHATINFO_STATUS_SUCCESS', response.data)
-        localStorage.setItem('USOFTMALLWECHATINFO', JSON.stringify(response.data))
+        if (response.data.openid) {
+          localStorage.setItem('USOFTMALLWECHATINFO', JSON.stringify(response.data))
+        } else {
+          // localStorage.removeItem('USOFTMALLWECHATINFO')
+        }
       }, err => {
         localStorage.removeItem('USOFTMALLWECHATINFO')
         commit('option/REQUEST_WECHATINFO_STATUS_FAILURE', err)

+ 24 - 0
store/order.js

@@ -0,0 +1,24 @@
+import axios from '~/plugins/axios'
+
+export const actions = {
+  // 获取卖家中心订单列表
+  getSellOrderList ({ commit }, params = {}) {
+    commit('order/REQUEST_ORDERLIST')
+    return axios.get('/trade/purchase/status/createtime', {params})
+      .then(response => {
+        commit('order/GET_ORDERLIST_SUCCESS', response.data)
+      }, err => {
+        commit('order/GET_ORDERLIST_FAILURE', err)
+      })
+  },
+  // 获取买家中心订单列表
+  getBuyerOrderList ({ commit }, params = {}) {
+    commit('order/REQUEST_ORDERLIST')
+    return axios.get('/trade/order/individual', {params})
+      .then(response => {
+        commit('order/GET_ORDERLIST_SUCCESS', response.data)
+      }, err => {
+        commit('order/GET_ORDERLIST_FAILURE', err)
+      })
+  },
+}

+ 20 - 0
store/order/order.js

@@ -0,0 +1,20 @@
+export const state = () => ({
+  orderList: {
+    fetching: false,
+    data: []
+  }
+})
+
+export const mutations = {
+  REQUEST_ORDERLIST (state) {
+    state.orderList.fetching = true
+  },
+  GET_ORDERLIST_FAILURE (state) {
+    state.orderList.fetching = false
+  },
+  GET_ORDERLIST_SUCCESS (state, result) {
+    state.orderList.fetching = false
+    state.orderList.data = result
+  }
+}
+

+ 67 - 0
utils/tools.js

@@ -0,0 +1,67 @@
+export function EncryptionFilter (str) {
+  if (str) {
+    let encryptStr = '' // 最终返回的加密后的字符串
+    // 产生三位随机数
+    let num = ''
+    for (let i = 0; i < 3; i++) {
+      num += Math.floor(Math.random() * 10)
+    }
+    encryptStr += num // 产生3位随机数
+
+    // 16位加密
+    let tempspit = ''
+    let strspit = str.toLowerCase()
+    if (strspit.match(/^[-+]?\d*$/) == null) { // 非整数字符,对每一个字符都转换成16进制,然后拼接
+      /**
+       * Unicode汉字、英文字母、数字的unicode范围
+       *   汉字:[0x4e00,0x9fa5](或十进制[19968,40869])
+       * 	 数字:[0x30,0x39](或十进制[48, 57])
+       * 	 小写字母:[0x61,0x7a](或十进制[97, 122])
+       * 	 大写字母:[0x41,0x5a](或十进制[65, 90]
+       * 'a'的Unicode编码:'&#97;',charCodeAt()的值是97
+       * '码'的Unicode编码:'\u7801', new String('码').charCodeAt()的值是30721,30721的16进制表示是7801
+       */
+      let s = strspit.split('')
+      for (let i = 0; i < s.length; i++) {
+        s[i] = s[i].charCodeAt() // 先转换成Unicode编码
+        s[i] = s[i].toString(16)
+        // 因为在服务器是每两位当做一个字符进行解析的,所以这里每个字符的Unicode编码范围必须在0——255之间。数字和大小写满足该要求,特殊字符则不一定,如果后续有特殊字符的要求,需要重写编码器和解码器
+        if(s[i].length === 1)
+          s[i] = '0' + s[i]
+
+        tempspit = tempspit + s[i]
+      }
+      tempspit = tempspit + '{' + 1 // 1代表字符
+    } else { // 数字直接转换成16进制
+      strspit = parseInt(strspit)
+        .toString(16)
+      tempspit = strspit + '{' + 0 // 0代表纯数字
+    }
+
+    let temp = tempspit.split('{') // 对要加密的字符转换成16进制
+    let numLength = temp[0].length // 转换后的字符长度
+    numLength = numLength.toString(16) // 字符长度换算成16进制
+    if (numLength.length === 1) { // 如果是1,补一个0
+      numLength = '0' + numLength
+    } else if (numLength.length > 3) { // 转换后的16进制字符长度如果大于2位数,则返回,不支持
+      return ''
+    }
+    encryptStr += numLength
+    if (temp[1] === '0') {
+      encryptStr += 0
+    } else if (temp[1] === '1') {
+      encryptStr += 1
+    }
+    encryptStr += temp[0]
+    if (encryptStr.length < 20) { // 如果小于20位,补上随机数
+      // 产生三位随机数
+      let numtwo = ''
+      for (let i = 0; i < 20 - encryptStr.length; i++) {
+        numtwo += Math.floor(Math.random() * 10)
+      }
+      let ran = numtwo // 产生3位随机数
+      encryptStr += ran
+    }
+    return encryptStr
+  }
+}