通过微信开发者工具 商城模板 创建新小程序
This commit is contained in:
		
							
								
								
									
										288
									
								
								mini-program/pages/order/order-detail/index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										288
									
								
								mini-program/pages/order/order-detail/index.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,288 @@
 | 
			
		||||
import { formatTime } from '../../../utils/util';
 | 
			
		||||
import { OrderStatus, LogisticsIconMap } from '../config';
 | 
			
		||||
import {
 | 
			
		||||
  fetchBusinessTime,
 | 
			
		||||
  fetchOrderDetail,
 | 
			
		||||
} from '../../../services/order/orderDetail';
 | 
			
		||||
import Toast from 'tdesign-miniprogram/toast/index';
 | 
			
		||||
import { getAddressPromise } from '../../usercenter/address/list/util';
 | 
			
		||||
 | 
			
		||||
Page({
 | 
			
		||||
  data: {
 | 
			
		||||
    pageLoading: true,
 | 
			
		||||
    order: {}, // 后台返回的原始数据
 | 
			
		||||
    _order: {}, // 内部使用和提供给 order-card 的数据
 | 
			
		||||
    storeDetail: {},
 | 
			
		||||
    countDownTime: null,
 | 
			
		||||
    addressEditable: false,
 | 
			
		||||
    backRefresh: false, // 用于接收其他页面back时的状态
 | 
			
		||||
    formatCreateTime: '', //格式化订单创建时间
 | 
			
		||||
    logisticsNodes: [],
 | 
			
		||||
    /** 订单评论状态 */
 | 
			
		||||
    orderHasCommented: true,
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onLoad(query) {
 | 
			
		||||
    this.orderNo = query.orderNo;
 | 
			
		||||
    this.init();
 | 
			
		||||
    this.navbar = this.selectComponent('#navbar');
 | 
			
		||||
    this.pullDownRefresh = this.selectComponent('#wr-pull-down-refresh');
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onShow() {
 | 
			
		||||
    // 当从其他页面返回,并且 backRefresh 被置为 true 时,刷新数据
 | 
			
		||||
    if (!this.data.backRefresh) return;
 | 
			
		||||
    this.onRefresh();
 | 
			
		||||
    this.setData({ backRefresh: false });
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onPageScroll(e) {
 | 
			
		||||
    this.pullDownRefresh && this.pullDownRefresh.onPageScroll(e);
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onImgError(e) {
 | 
			
		||||
    if (e.detail) {
 | 
			
		||||
      console.error('img 加载失败');
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  // 页面初始化,会展示pageLoading
 | 
			
		||||
  init() {
 | 
			
		||||
    this.setData({ pageLoading: true });
 | 
			
		||||
    this.getStoreDetail();
 | 
			
		||||
    this.getDetail()
 | 
			
		||||
      .then(() => {
 | 
			
		||||
        this.setData({ pageLoading: false });
 | 
			
		||||
      })
 | 
			
		||||
      .catch((e) => {
 | 
			
		||||
        console.error(e);
 | 
			
		||||
      });
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  // 页面刷新,展示下拉刷新
 | 
			
		||||
  onRefresh() {
 | 
			
		||||
    this.init();
 | 
			
		||||
    // 如果上一页为订单列表,通知其刷新数据
 | 
			
		||||
    const pages = getCurrentPages();
 | 
			
		||||
    const lastPage = pages[pages.length - 2];
 | 
			
		||||
    if (lastPage) {
 | 
			
		||||
      lastPage.data.backRefresh = true;
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  // 页面刷新,展示下拉刷新
 | 
			
		||||
  onPullDownRefresh_(e) {
 | 
			
		||||
    const { callback } = e.detail;
 | 
			
		||||
    return this.getDetail().then(() => callback && callback());
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  getDetail() {
 | 
			
		||||
    const params = {
 | 
			
		||||
      parameter: this.orderNo,
 | 
			
		||||
    };
 | 
			
		||||
    return fetchOrderDetail(params).then((res) => {
 | 
			
		||||
      const order = res.data;
 | 
			
		||||
      const _order = {
 | 
			
		||||
        id: order.orderId,
 | 
			
		||||
        orderNo: order.orderNo,
 | 
			
		||||
        parentOrderNo: order.parentOrderNo,
 | 
			
		||||
        storeId: order.storeId,
 | 
			
		||||
        storeName: order.storeName,
 | 
			
		||||
        status: order.orderStatus,
 | 
			
		||||
        statusDesc: order.orderStatusName,
 | 
			
		||||
        amount: order.paymentAmount,
 | 
			
		||||
        totalAmount: order.goodsAmountApp,
 | 
			
		||||
        logisticsNo: order.logisticsVO.logisticsNo,
 | 
			
		||||
        goodsList: (order.orderItemVOs || []).map((goods) =>
 | 
			
		||||
          Object.assign({}, goods, {
 | 
			
		||||
            id: goods.id,
 | 
			
		||||
            thumb: goods.goodsPictureUrl,
 | 
			
		||||
            title: goods.goodsName,
 | 
			
		||||
            skuId: goods.skuId,
 | 
			
		||||
            spuId: goods.spuId,
 | 
			
		||||
            specs: (goods.specifications || []).map((s) => s.specValue),
 | 
			
		||||
            price: goods.tagPrice ? goods.tagPrice : goods.actualPrice, // 商品销售单价, 优先取限时活动价
 | 
			
		||||
            num: goods.buyQuantity,
 | 
			
		||||
            titlePrefixTags: goods.tagText ? [{ text: goods.tagText }] : [],
 | 
			
		||||
            buttons: goods.buttonVOs || [],
 | 
			
		||||
          }),
 | 
			
		||||
        ),
 | 
			
		||||
        buttons: order.buttonVOs || [],
 | 
			
		||||
        createTime: order.createTime,
 | 
			
		||||
        receiverAddress: this.composeAddress(order),
 | 
			
		||||
        groupInfoVo: order.groupInfoVo,
 | 
			
		||||
      };
 | 
			
		||||
      this.setData({
 | 
			
		||||
        order,
 | 
			
		||||
        _order,
 | 
			
		||||
        formatCreateTime: formatTime(
 | 
			
		||||
          parseFloat(`${order.createTime}`),
 | 
			
		||||
          'YYYY-MM-DD HH:mm',
 | 
			
		||||
        ), // 格式化订单创建时间
 | 
			
		||||
        countDownTime: this.computeCountDownTime(order),
 | 
			
		||||
        addressEditable:
 | 
			
		||||
          [OrderStatus.PENDING_PAYMENT, OrderStatus.PENDING_DELIVERY].includes(
 | 
			
		||||
            order.orderStatus,
 | 
			
		||||
          ) && order.orderSubStatus !== -1, // 订单正在取消审核时不允许修改地址(但是返回的状态码与待发货一致)
 | 
			
		||||
        isPaid: !!order.paymentVO.paySuccessTime,
 | 
			
		||||
        invoiceStatus: this.datermineInvoiceStatus(order),
 | 
			
		||||
        invoiceDesc: order.invoiceDesc,
 | 
			
		||||
        invoiceType:
 | 
			
		||||
          order.invoiceVO?.invoiceType === 5 ? '电子普通发票' : '不开发票', //是否开票 0-不开 5-电子发票
 | 
			
		||||
        logisticsNodes: this.flattenNodes(order.trajectoryVos || []),
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  // 展开物流节点
 | 
			
		||||
  flattenNodes(nodes) {
 | 
			
		||||
    return (nodes || []).reduce((res, node) => {
 | 
			
		||||
      return (node.nodes || []).reduce((res1, subNode, index) => {
 | 
			
		||||
        res1.push({
 | 
			
		||||
          title: index === 0 ? node.title : '', // 子节点中仅第一个显示title
 | 
			
		||||
          desc: subNode.status,
 | 
			
		||||
          date: formatTime(+subNode.timestamp, 'YYYY-MM-DD HH:mm:ss'),
 | 
			
		||||
          icon: index === 0 ? LogisticsIconMap[node.code] || '' : '', // 子节点中仅第一个显示icon
 | 
			
		||||
        });
 | 
			
		||||
        return res1;
 | 
			
		||||
      }, res);
 | 
			
		||||
    }, []);
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  datermineInvoiceStatus(order) {
 | 
			
		||||
    // 1-已开票
 | 
			
		||||
    // 2-未开票(可补开)
 | 
			
		||||
    // 3-未开票
 | 
			
		||||
    // 4-门店不支持开票
 | 
			
		||||
    return order.invoiceStatus;
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  // 拼接省市区
 | 
			
		||||
  composeAddress(order) {
 | 
			
		||||
    return [
 | 
			
		||||
      //order.logisticsVO.receiverProvince,
 | 
			
		||||
      order.logisticsVO.receiverCity,
 | 
			
		||||
      order.logisticsVO.receiverCountry,
 | 
			
		||||
      order.logisticsVO.receiverArea,
 | 
			
		||||
      order.logisticsVO.receiverAddress,
 | 
			
		||||
    ]
 | 
			
		||||
      .filter((s) => !!s)
 | 
			
		||||
      .join(' ');
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  getStoreDetail() {
 | 
			
		||||
    fetchBusinessTime().then((res) => {
 | 
			
		||||
      const storeDetail = {
 | 
			
		||||
        storeTel: res.data.telphone,
 | 
			
		||||
        storeBusiness: res.data.businessTime.join('\n'),
 | 
			
		||||
      };
 | 
			
		||||
      this.setData({ storeDetail });
 | 
			
		||||
    });
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  // 仅对待支付状态计算付款倒计时
 | 
			
		||||
  // 返回时间若是大于2020.01.01,说明返回的是关闭时间,否则说明返回的直接就是剩余时间
 | 
			
		||||
  computeCountDownTime(order) {
 | 
			
		||||
    if (order.orderStatus !== OrderStatus.PENDING_PAYMENT) return null;
 | 
			
		||||
    return order.autoCancelTime > 1577808000000
 | 
			
		||||
      ? order.autoCancelTime - Date.now()
 | 
			
		||||
      : order.autoCancelTime;
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onCountDownFinish() {
 | 
			
		||||
    //this.setData({ countDownTime: -1 });
 | 
			
		||||
    const { countDownTime, order } = this.data;
 | 
			
		||||
    if (
 | 
			
		||||
      countDownTime > 0 ||
 | 
			
		||||
      (order && order.groupInfoVo && order.groupInfoVo.residueTime > 0)
 | 
			
		||||
    ) {
 | 
			
		||||
      this.onRefresh();
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onGoodsCardTap(e) {
 | 
			
		||||
    const { index } = e.currentTarget.dataset;
 | 
			
		||||
    const goods = this.data.order.orderItemVOs[index];
 | 
			
		||||
    wx.navigateTo({ url: `/pages/goods/details/index?spuId=${goods.spuId}` });
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onEditAddressTap() {
 | 
			
		||||
    getAddressPromise()
 | 
			
		||||
      .then((address) => {
 | 
			
		||||
        this.setData({
 | 
			
		||||
          'order.logisticsVO.receiverName': address.name,
 | 
			
		||||
          'order.logisticsVO.receiverPhone': address.phone,
 | 
			
		||||
          '_order.receiverAddress': address.address,
 | 
			
		||||
        });
 | 
			
		||||
      })
 | 
			
		||||
      .catch(() => {});
 | 
			
		||||
 | 
			
		||||
    wx.navigateTo({
 | 
			
		||||
      url: `/pages/usercenter/address/list/index?selectMode=1`,
 | 
			
		||||
    });
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onOrderNumCopy() {
 | 
			
		||||
    wx.setClipboardData({
 | 
			
		||||
      data: this.data.order.orderNo,
 | 
			
		||||
    });
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onDeliveryNumCopy() {
 | 
			
		||||
    wx.setClipboardData({
 | 
			
		||||
      data: this.data.order.logisticsVO.logisticsNo,
 | 
			
		||||
    });
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onToInvoice() {
 | 
			
		||||
    wx.navigateTo({
 | 
			
		||||
      url: `/pages/order/invoice/index?orderNo=${this.data._order.orderNo}`,
 | 
			
		||||
    });
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onSuppleMentInvoice() {
 | 
			
		||||
    wx.navigateTo({
 | 
			
		||||
      url: `/pages/order/receipt/index?orderNo=${this.data._order.orderNo}`,
 | 
			
		||||
    });
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onDeliveryClick() {
 | 
			
		||||
    const logisticsData = {
 | 
			
		||||
      nodes: this.data.logisticsNodes,
 | 
			
		||||
      company: this.data.order.logisticsVO.logisticsCompanyName,
 | 
			
		||||
      logisticsNo: this.data.order.logisticsVO.logisticsNo,
 | 
			
		||||
      phoneNumber: this.data.order.logisticsVO.logisticsCompanyTel,
 | 
			
		||||
    };
 | 
			
		||||
    wx.navigateTo({
 | 
			
		||||
      url: `/pages/order/delivery-detail/index?data=${encodeURIComponent(
 | 
			
		||||
        JSON.stringify(logisticsData),
 | 
			
		||||
      )}`,
 | 
			
		||||
    });
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  /** 跳转订单评价 */
 | 
			
		||||
  navToCommentCreate() {
 | 
			
		||||
    wx.navigateTo({
 | 
			
		||||
      url: `/pages/order/createComment/index?orderNo=${this.orderNo}`,
 | 
			
		||||
    });
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  /** 跳转拼团详情/分享页*/
 | 
			
		||||
  toGrouponDetail() {
 | 
			
		||||
    wx.showToast({ title: '点击了拼团' });
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  clickService() {
 | 
			
		||||
    Toast({
 | 
			
		||||
      context: this,
 | 
			
		||||
      selector: '#t-toast',
 | 
			
		||||
      message: '您点击了联系客服',
 | 
			
		||||
    });
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onOrderInvoiceView() {
 | 
			
		||||
    wx.navigateTo({
 | 
			
		||||
      url: `/pages/order/invoice/index?orderNo=${this.orderNo}`,
 | 
			
		||||
    });
 | 
			
		||||
  },
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										17
									
								
								mini-program/pages/order/order-detail/index.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								mini-program/pages/order/order-detail/index.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
{
 | 
			
		||||
  "navigationBarTitleText": "订单详情",
 | 
			
		||||
  "usingComponents": {
 | 
			
		||||
    "t-pull-down-refresh": "tdesign-miniprogram/pull-down-refresh/pull-down-refresh",
 | 
			
		||||
    "t-button": "tdesign-miniprogram/button/button",
 | 
			
		||||
    "t-cell": "tdesign-miniprogram/cell/cell",
 | 
			
		||||
    "t-icon": "tdesign-miniprogram/icon/icon",
 | 
			
		||||
    "t-image": "/components/webp-image/index",
 | 
			
		||||
    "t-count-down": "tdesign-miniprogram/count-down/count-down",
 | 
			
		||||
    "t-toast": "tdesign-miniprogram/toast/toast",
 | 
			
		||||
    "t-dialog": "tdesign-miniprogram/dialog/dialog",
 | 
			
		||||
    "price": "/components/price/index",
 | 
			
		||||
    "order-card": "../components/order-card/index",
 | 
			
		||||
    "order-goods-card": "../components/order-goods-card/index",
 | 
			
		||||
    "order-button-bar": "../components/order-button-bar/index"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										159
									
								
								mini-program/pages/order/order-detail/index.wxml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										159
									
								
								mini-program/pages/order/order-detail/index.wxml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,159 @@
 | 
			
		||||
<t-pull-down-refresh id="t-pull-down-refresh" bindrefresh="onPullDownRefresh_" t-class-indicator="t-class-indicator">
 | 
			
		||||
  <!-- 页面内容 -->
 | 
			
		||||
  <view class="order-detail">
 | 
			
		||||
    <view class="header">
 | 
			
		||||
      <view class="order-detail__header">
 | 
			
		||||
        <view class="title">{{_order.statusDesc}}</view>
 | 
			
		||||
        <view class="desc">
 | 
			
		||||
          <block wx:if="{{ order.holdStatus === 1 }}">
 | 
			
		||||
            <block wx:if="{{ order.groupInfoVo.residueTime > 0 }}">
 | 
			
		||||
              拼团剩余
 | 
			
		||||
              <t-count-down
 | 
			
		||||
                time="{{order.groupInfoVo.residueTime}}"
 | 
			
		||||
                format="HH小时mm分ss秒"
 | 
			
		||||
                t-class="count-down"
 | 
			
		||||
                bindfinish="onCountDownFinish"
 | 
			
		||||
              />
 | 
			
		||||
              <view>过时自动取消</view>
 | 
			
		||||
            </block>
 | 
			
		||||
          </block>
 | 
			
		||||
          <block wx:elif="{{countDownTime === null}}">{{order.orderSatusRemark || ''}}</block>
 | 
			
		||||
          <block wx:elif="{{countDownTime > 0}}">
 | 
			
		||||
            剩
 | 
			
		||||
            <t-count-down
 | 
			
		||||
              time="{{countDownTime}}"
 | 
			
		||||
              format="HH小时mm分ss秒"
 | 
			
		||||
              t-class="count-down"
 | 
			
		||||
              bindfinish="onCountDownFinish"
 | 
			
		||||
            />
 | 
			
		||||
            支付,过时订单将会取消
 | 
			
		||||
          </block>
 | 
			
		||||
          <block wx:else>超时未支付</block>
 | 
			
		||||
        </view>
 | 
			
		||||
      </view>
 | 
			
		||||
 | 
			
		||||
      <!-- 物流 -->
 | 
			
		||||
      <view class="order-logistics" wx:if="{{logisticsNodes[0]}}" bindtap="onDeliveryClick">
 | 
			
		||||
        <t-icon name="deliver" size="40rpx" class="logistics-icon" prefix="wr" />
 | 
			
		||||
        <view class="logistics-content">
 | 
			
		||||
          <view>{{logisticsNodes[0].desc}}</view>
 | 
			
		||||
          <view class="logistics-time">{{logisticsNodes[0].date}}</view>
 | 
			
		||||
        </view>
 | 
			
		||||
        <t-icon class="logistics-back" name="arrow_forward" size="36rpx" prefix="wr" />
 | 
			
		||||
      </view>
 | 
			
		||||
      <view class="border-bottom" wx:if="{{logisticsNodes[0]}}" />
 | 
			
		||||
      <!-- 收货地址 -->
 | 
			
		||||
      <view class="order-logistics">
 | 
			
		||||
        <t-icon name="location" size="40rpx" class="logistics-icon" prefix="wr" />
 | 
			
		||||
        <view class="logistics-content">
 | 
			
		||||
          <view>{{order.logisticsVO.receiverName + ' '}}{{order.logisticsVO.receiverPhone}}</view>
 | 
			
		||||
          <view class="logistics-time">{{_order.receiverAddress}}</view>
 | 
			
		||||
        </view>
 | 
			
		||||
        <view wx:if="{{addressEditable}}" class="edit-text" bindtap="onEditAddressTap"> 修改 </view>
 | 
			
		||||
      </view>
 | 
			
		||||
    </view>
 | 
			
		||||
    <!-- 店铺及商品 -->
 | 
			
		||||
    <order-card order="{{_order}}" use-top-right-slot>
 | 
			
		||||
      <order-goods-card
 | 
			
		||||
        wx:for="{{_order.goodsList}}"
 | 
			
		||||
        wx:key="id"
 | 
			
		||||
        wx:for-item="goods"
 | 
			
		||||
        wx:for-index="gIndex"
 | 
			
		||||
        goods="{{goods}}"
 | 
			
		||||
        no-top-line="{{gIndex === 0}}"
 | 
			
		||||
        bindtap="onGoodsCardTap"
 | 
			
		||||
        data-index="{{gIndex}}"
 | 
			
		||||
      >
 | 
			
		||||
        <order-button-bar
 | 
			
		||||
          slot="append-card"
 | 
			
		||||
          class="goods-button-bar"
 | 
			
		||||
          order="{{_order}}"
 | 
			
		||||
          bindrefresh="onRefresh"
 | 
			
		||||
          goodsIndex="{{gIndex}}"
 | 
			
		||||
        />
 | 
			
		||||
      </order-goods-card>
 | 
			
		||||
      <view class="pay-detail">
 | 
			
		||||
        <view class="pay-item">
 | 
			
		||||
          <text>商品总额</text>
 | 
			
		||||
          <price fill decimalSmaller wr-class="pay-item__right font-bold" price="{{order.totalAmount || '0'}}" />
 | 
			
		||||
        </view>
 | 
			
		||||
        <view class="pay-item">
 | 
			
		||||
          <text>运费</text>
 | 
			
		||||
          <view class="pay-item__right font-bold">
 | 
			
		||||
            <block wx:if="{{order.freightFee}}">
 | 
			
		||||
              +
 | 
			
		||||
              <price fill decimalSmaller price="{{order.freightFee}}" />
 | 
			
		||||
            </block>
 | 
			
		||||
            <text wx:else>免运费</text>
 | 
			
		||||
          </view>
 | 
			
		||||
        </view>
 | 
			
		||||
        <view class="pay-item">
 | 
			
		||||
          <text>活动优惠</text>
 | 
			
		||||
          <view class="pay-item__right primary font-bold">
 | 
			
		||||
            -
 | 
			
		||||
            <price fill price="{{order.discountAmount || 0}}" />
 | 
			
		||||
          </view>
 | 
			
		||||
        </view>
 | 
			
		||||
        <view class="pay-item">
 | 
			
		||||
          <text>优惠券</text>
 | 
			
		||||
          <view class="pay-item__right" catchtap="onOpenCoupons">
 | 
			
		||||
            <block wx:if="{{order.couponAmount}}">
 | 
			
		||||
              -
 | 
			
		||||
              <price fill decimalSmaller price="{{order.couponAmount}}" />
 | 
			
		||||
            </block>
 | 
			
		||||
            <text wx:else>无可用</text>
 | 
			
		||||
            <!-- <t-icon name="chevron-right" size="32rpx" color="#BBBBBB" /> -->
 | 
			
		||||
          </view>
 | 
			
		||||
        </view>
 | 
			
		||||
        <view class="pay-item">
 | 
			
		||||
          <text>{{isPaid ? '实付' : '应付'}}</text>
 | 
			
		||||
          <price
 | 
			
		||||
            fill
 | 
			
		||||
            decimalSmaller
 | 
			
		||||
            wr-class="pay-item__right font-bold primary max-size"
 | 
			
		||||
            price="{{order.paymentAmount || '0'}}"
 | 
			
		||||
          />
 | 
			
		||||
        </view>
 | 
			
		||||
      </view>
 | 
			
		||||
    </order-card>
 | 
			
		||||
    <view class="pay-detail padding-inline">
 | 
			
		||||
      <view class="pay-item">
 | 
			
		||||
        <text>订单编号</text>
 | 
			
		||||
        <view class="pay-item__right" bindtap="onOrderNumCopy">
 | 
			
		||||
          <text class="order-no">{{order.orderNo}}</text>
 | 
			
		||||
          <view class="pay-item__right__copy">复制</view>
 | 
			
		||||
        </view>
 | 
			
		||||
      </view>
 | 
			
		||||
      <view class="pay-item">
 | 
			
		||||
        <text>下单时间</text>
 | 
			
		||||
        <view class="pay-item__right">
 | 
			
		||||
          <text class="order-no normal-color">{{formatCreateTime}}</text>
 | 
			
		||||
        </view>
 | 
			
		||||
      </view>
 | 
			
		||||
      <view class="border-bottom border-bottom-margin" />
 | 
			
		||||
      <view class="pay-item">
 | 
			
		||||
        <text>发票</text>
 | 
			
		||||
        <view class="pay-item__right" bindtap="onOrderInvoiceView">
 | 
			
		||||
          <text class="order-no normal-color">{{invoiceType}}</text>
 | 
			
		||||
          <view class="pay-item__right__copy">查看</view>
 | 
			
		||||
        </view>
 | 
			
		||||
      </view>
 | 
			
		||||
      <view class="pay-item">
 | 
			
		||||
        <text>备注</text>
 | 
			
		||||
        <view class="pay-item__right">
 | 
			
		||||
          <text class="order-no normal-color">{{order.remark || '-'}}</text>
 | 
			
		||||
        </view>
 | 
			
		||||
      </view>
 | 
			
		||||
      <view class="border-bottom border-bottom-margin" />
 | 
			
		||||
      <view class="pay-service" wx:if="{{storeDetail && storeDetail.storeTel}}" catch:tap="clickService">
 | 
			
		||||
        <t-icon name="service" size="40rpx" />
 | 
			
		||||
        <text decode="{{true}}"> 联系客服</text>
 | 
			
		||||
      </view>
 | 
			
		||||
    </view>
 | 
			
		||||
  </view>
 | 
			
		||||
  <view wx:if="{{_order.buttons.length > 0}}" class="bottom-bar">
 | 
			
		||||
    <order-button-bar order="{{_order}}" bindrefresh="onRefresh" isBtnMax />
 | 
			
		||||
  </view>
 | 
			
		||||
</t-pull-down-refresh>
 | 
			
		||||
<t-toast id="t-toast" />
 | 
			
		||||
<t-dialog id="t-dialog" />
 | 
			
		||||
							
								
								
									
										245
									
								
								mini-program/pages/order/order-detail/index.wxss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										245
									
								
								mini-program/pages/order/order-detail/index.wxss
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,245 @@
 | 
			
		||||
:host {
 | 
			
		||||
  background-color: #f8f8f8;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order-detail {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  box-sizing: border-box;
 | 
			
		||||
  padding: 0rpx 0rpx calc(env(safe-area-inset-bottom) + 144rpx);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order-detail .count-down {
 | 
			
		||||
  color: #ffffff;
 | 
			
		||||
}
 | 
			
		||||
.order-detail .header {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  background-color: #ffffff;
 | 
			
		||||
}
 | 
			
		||||
.order-detail .order-detail__header {
 | 
			
		||||
  width: 700rpx;
 | 
			
		||||
  height: 200rpx;
 | 
			
		||||
  border-radius: 24rpx;
 | 
			
		||||
  margin: 0 auto;
 | 
			
		||||
  overflow: hidden;
 | 
			
		||||
  display: flex;
 | 
			
		||||
  flex-direction: column;
 | 
			
		||||
  align-items: center;
 | 
			
		||||
  justify-content: center;
 | 
			
		||||
  background-image: url('https://cdn-we-retail.ym.tencent.com/miniapp/template/order-bg.png');
 | 
			
		||||
  background-repeat: no-repeat;
 | 
			
		||||
  background-size: contain;
 | 
			
		||||
}
 | 
			
		||||
.order-detail .order-detail__header .title,
 | 
			
		||||
.order-detail .order-detail__header .desc {
 | 
			
		||||
  color: #ffffff;
 | 
			
		||||
  overflow: hidden;
 | 
			
		||||
  display: -webkit-box;
 | 
			
		||||
  -webkit-box-orient: vertical;
 | 
			
		||||
}
 | 
			
		||||
.order-detail .order-detail__header .title {
 | 
			
		||||
  -webkit-line-clamp: 1;
 | 
			
		||||
  font-size: 44rpx;
 | 
			
		||||
  line-height: 64rpx;
 | 
			
		||||
  margin-bottom: 8rpx;
 | 
			
		||||
  font-weight: bold;
 | 
			
		||||
}
 | 
			
		||||
.order-detail .order-detail__header .desc {
 | 
			
		||||
  -webkit-line-clamp: 2;
 | 
			
		||||
  font-size: 24rpx;
 | 
			
		||||
  line-height: 32rpx;
 | 
			
		||||
}
 | 
			
		||||
.order-detail .order-detail__header .desc .count-down {
 | 
			
		||||
  display: inline;
 | 
			
		||||
}
 | 
			
		||||
.order-detail .order-logistics {
 | 
			
		||||
  box-sizing: border-box;
 | 
			
		||||
  padding: 32rpx;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  background-color: #ffffff;
 | 
			
		||||
  overflow: hidden;
 | 
			
		||||
  color: #333333;
 | 
			
		||||
  font-size: 32rpx;
 | 
			
		||||
  line-height: 48rpx;
 | 
			
		||||
  display: flex;
 | 
			
		||||
  position: relative;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order-logistics .logistics-icon {
 | 
			
		||||
  width: 40rpx;
 | 
			
		||||
  height: 40rpx;
 | 
			
		||||
  margin-right: 16rpx;
 | 
			
		||||
  margin-top: 4rpx;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order-logistics .logistics-content {
 | 
			
		||||
  flex: 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order-logistics .logistics-content .logistics-time {
 | 
			
		||||
  font-size: 28rpx;
 | 
			
		||||
  line-height: 40rpx;
 | 
			
		||||
  color: #999999;
 | 
			
		||||
  margin-top: 12rpx;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order-logistics .logistics-back {
 | 
			
		||||
  color: #999999;
 | 
			
		||||
  align-self: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order-logistics .edit-text {
 | 
			
		||||
  color: #fa4126;
 | 
			
		||||
  font-size: 26rpx;
 | 
			
		||||
  line-height: 36rpx;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order-detail .border-bottom {
 | 
			
		||||
  margin: 0 auto;
 | 
			
		||||
  width: 686rpx;
 | 
			
		||||
  scale: 1 0.5;
 | 
			
		||||
  height: 2rpx;
 | 
			
		||||
  background-color: #e5e5e5;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order-detail .border-bottom-margin {
 | 
			
		||||
  margin: 16rpx auto;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order-detail .pay-detail {
 | 
			
		||||
  background-color: #ffffff;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  box-sizing: border-box;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order-detail .padding-inline {
 | 
			
		||||
  padding: 16rpx 32rpx;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order-detail .pay-detail .pay-item {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 72rpx;
 | 
			
		||||
  display: flex;
 | 
			
		||||
  align-items: center;
 | 
			
		||||
  justify-content: space-between;
 | 
			
		||||
  font-size: 26rpx;
 | 
			
		||||
  line-height: 36rpx;
 | 
			
		||||
  color: #666666;
 | 
			
		||||
  background-color: #ffffff;
 | 
			
		||||
}
 | 
			
		||||
.order-detail .pay-detail .pay-item .pay-item__right {
 | 
			
		||||
  color: #333333;
 | 
			
		||||
  font-size: 24rpx;
 | 
			
		||||
  display: flex;
 | 
			
		||||
  align-items: center;
 | 
			
		||||
  justify-content: flex-end;
 | 
			
		||||
  max-width: 400rpx;
 | 
			
		||||
}
 | 
			
		||||
.order-detail .pay-detail .pay-item .pay-item__right .pay-remark {
 | 
			
		||||
  display: -webkit-box;
 | 
			
		||||
  -webkit-box-orient: vertical;
 | 
			
		||||
  -webkit-line-clamp: 2;
 | 
			
		||||
  max-width: 400rpx;
 | 
			
		||||
  text-overflow: ellipsis;
 | 
			
		||||
  overflow: hidden;
 | 
			
		||||
}
 | 
			
		||||
.order-detail .pay-detail .pay-item .font-bold {
 | 
			
		||||
  font-weight: bold;
 | 
			
		||||
}
 | 
			
		||||
.order-detail .pay-detail .pay-item .primary {
 | 
			
		||||
  color: #fa4126;
 | 
			
		||||
}
 | 
			
		||||
.order-detail .pay-detail .pay-item .max-size {
 | 
			
		||||
  font-size: 36rpx;
 | 
			
		||||
  line-height: 48rpx;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.pay-item .pay-item__right .pay-item__right__copy {
 | 
			
		||||
  width: 80rpx;
 | 
			
		||||
  height: 40rpx;
 | 
			
		||||
  text-align: center;
 | 
			
		||||
  font-size: 24rpx;
 | 
			
		||||
  line-height: 40rpx;
 | 
			
		||||
  color: #333333;
 | 
			
		||||
  position: relative;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.pay-item .pay-item__right .pay-item__right__copy::before {
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  content: '';
 | 
			
		||||
  width: 200%;
 | 
			
		||||
  height: 200%;
 | 
			
		||||
  border-radius: 40rpx;
 | 
			
		||||
  border: 2rpx solid #dddddd;
 | 
			
		||||
  transform: scale(0.5);
 | 
			
		||||
  left: 0;
 | 
			
		||||
  top: 0;
 | 
			
		||||
  transform-origin: left top;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.pay-item .pay-item__right .order-no {
 | 
			
		||||
  color: #333333;
 | 
			
		||||
  font-size: 26rpx;
 | 
			
		||||
  line-height: 40rpx;
 | 
			
		||||
  padding-right: 16rpx;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.pay-item .pay-item__right .normal-color {
 | 
			
		||||
  color: #333333;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.order-detail .pay-detail .pay-service {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 72rpx;
 | 
			
		||||
  display: flex;
 | 
			
		||||
  align-items: center;
 | 
			
		||||
  justify-content: center;
 | 
			
		||||
  font-size: 32rpx;
 | 
			
		||||
  line-height: 36rpx;
 | 
			
		||||
  color: #333333;
 | 
			
		||||
  background-color: #ffffff;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.bottom-bar {
 | 
			
		||||
  position: fixed;
 | 
			
		||||
  left: 0;
 | 
			
		||||
  bottom: 0;
 | 
			
		||||
  right: 0;
 | 
			
		||||
  z-index: 10;
 | 
			
		||||
  background: #fff;
 | 
			
		||||
  height: 112rpx;
 | 
			
		||||
  width: 686rpx;
 | 
			
		||||
  padding: 0rpx 32rpx env(safe-area-inset-bottom);
 | 
			
		||||
  display: flex;
 | 
			
		||||
  align-items: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.bottom-bar::before {
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  content: '';
 | 
			
		||||
  width: 200%;
 | 
			
		||||
  height: 200%;
 | 
			
		||||
  border-top: 2rpx solid #dddddd;
 | 
			
		||||
  transform: scale(0.5);
 | 
			
		||||
  left: 0;
 | 
			
		||||
  top: 0;
 | 
			
		||||
  transform-origin: left top;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.goods-button-bar {
 | 
			
		||||
  height: 112rpx;
 | 
			
		||||
  width: 686rpx;
 | 
			
		||||
  margin-bottom: 16rpx;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.t-class-indicator {
 | 
			
		||||
  color: #b9b9b9 !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.add-notes__confirm {
 | 
			
		||||
  color: #fa4126 !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.t-button {
 | 
			
		||||
  --td-button-default-color: #000;
 | 
			
		||||
  --td-button-primary-text-color: #fa4126;
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user