hejianhao
2026-05-11 02882c5d3f146768801a22fa60cfbd80b18d7725
feat(订单): 新增开发票功能并优化订单操作按钮布局

- 在配置文件中添加生产环境和开发环境的发票页面链接常量
- 重构订单列表操作按钮布局,使用 flex 布局替代绝对定位
- 为已完成订单添加“开发票”按钮,点击跳转至发票页面
- 调整“再来一单”按钮的显示逻辑,使其在已完成和已取消订单中均显示
4个文件已修改
76 ■■■■■ 已修改文件
config/dev.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
config/prod.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/order/index.less 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/order/index.tsx 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
config/dev.js
@@ -24,6 +24,7 @@
const ROBOTAXI_HOST = '"https://rt-api.deploy-test.xiaopeng.com"';
const ROBOTAXI_WS_HOST = '"wss://rt-ws.deploy-test.xiaopeng.com/websocket"';
const AMAP_KEY = '"8157fdfa13878d3f7bf69c560c8a846a"';
const INVOICE_URL = '"https://pay.deploy-test.xiaopeng.com/invoice.html#/entry?bizType=rt"';
const XP_APPID_MAP = {
  weapp: '"xp_cs_wom"',
@@ -94,6 +95,7 @@
    ROBOTAXI_HOST,
    ROBOTAXI_WS_HOST,
    AMAP_KEY,
    INVOICE_URL,
  },
  mini: {
    // webpackChain (chain) {
config/prod.js
@@ -19,6 +19,7 @@
const ROBOTAXI_HOST = '"https://rt-api.xiaopeng.com"';
const ROBOTAXI_WS_HOST = '"wss://rt-ws.xiaopeng.com/websocket"';
const AMAP_KEY = '"8157fdfa13878d3f7bf69c560c8a846a"';
const INVOICE_URL = '"https://pay.xiaopeng.com/invoice.html#/entry?bizType=rt"';
const XP_APPID_MAP = {
  weapp: '"xp_cs_wom"', // 用户中心登录appId
@@ -87,6 +88,7 @@
    ROBOTAXI_HOST,
    ROBOTAXI_WS_HOST,
    AMAP_KEY,
    INVOICE_URL,
  },
  mini: {
    // module: {
src/robotaxi/pages/order/index.less
@@ -95,29 +95,12 @@
      color: rgba(0, 0, 0, 0.6);
    }
    .order-again-box-position {
      position: absolute;
      padding: 10px;
      bottom: 14px;
      right: 30px;
    }
    .order-pay-box-position {
      position: absolute;
      padding: 10px;
      bottom: 14px;
      right: 194px;
    }
    .order-again-box {
    .order-action-row {
      margin-top: 4px;
      min-height: 48px;
      display: flex;
      justify-content: flex-end;
      .order-again-text-container {
        width: 144px;
        height: 48px;
      }
      gap: 16px;
    }
    .order-again-text {
src/robotaxi/pages/order/index.tsx
@@ -3,6 +3,7 @@
import { View, Image } from '@tarojs/components';
import './index.less';
import { getOrderHistoryList, OrderHistoryGroup } from '../../../robotaxi/api/order';
import { INVOICE_URL } from '../../../constants/api';
type OrderFilterKey = 'all' | 'pendingPay' | 'completed' | 'cancelled';
@@ -104,6 +105,12 @@
    })
  }
  const toInvoicePage = () => {
    Taro.navigateTo({
      url: `/pages/webpage/index?pageUrl=${encodeURIComponent(INVOICE_URL)}`
    })
  }
  useReachBottom(() => {
    if (hasMore) {
      const nextPage = pageNum + 1;
@@ -112,7 +119,7 @@
    }
  })
  const formatOrderStatus = (status?: number) => {
  const formatOrderStatus = (status: number) => {
    if (status == 0) {
      return '已取消'
    }
@@ -130,7 +137,7 @@
    }
  }
  const getOrderStatusClassName = (status?: number) => {
  const getOrderStatusClassName = (status: number) => {
    if (status >= 1 && status <= 7) {
      return 'order-status--processing'
    }
@@ -169,24 +176,26 @@
              </View>
              <View className='order-start'>起点:{item.startPointName || '-'}</View>
              <View className='order-start'>终点:{item.endPointName || '-'}</View>
              {
                formatOrderStatus(item.status) != '进行中' &&
                <View className='order-again-box'>
                  <View className='order-again-text-container'></View>
                </View>
              }
              {
                formatOrderStatus(item.status) != '进行中' &&
                <View className='order-again-box-position' onClick={(e) => { e.stopPropagation(); againOrder(item) }}>
                  <View className='order-again-text' hoverClass='common-hover-class'>再来一单</View>
                </View>
              }
              {
                formatOrderStatus(item.status) == '待支付' &&
                <View className='order-pay-box-position' onClick={(e) => e.stopPropagation()}>
                  <View className='order-pay-text' hoverClass='common-hover-class'>去支付</View>
                </View>
              }
              <View className='order-action-row'>
                {
                  formatOrderStatus(item.status) == '待支付' &&
                  <View onClick={(e) => e.stopPropagation()}>
                    <View className='order-pay-text' hoverClass='common-hover-class'>去支付</View>
                  </View>
                }
                {
                  formatOrderStatus(item.status) == '已完成' &&
                  <View onClick={(e) => { e.stopPropagation(); toInvoicePage() }}>
                    <View className='order-again-text' hoverClass='common-hover-class'>开发票</View>
                  </View>
                }
                {
                  ['已完成', '已取消'].includes(formatOrderStatus(item.status)) &&
                  <View onClick={(e) => { e.stopPropagation(); againOrder(item) }}>
                    <View className='order-again-text' hoverClass='common-hover-class'>再来一单</View>
                  </View>
                }
              </View>
            </View>
          })}
        </View>)