浏览代码

```
feat(api): 添加充电订单相关类型定义和API接口

- 新增ChargeOrderInfo接口定义,包含充电订单基本信息
- 新增chargeOrderDetail接口定义,用于获取充电订单详情
- 扩展xsbOmsOrderItem接口,添加电站名称字段
- 定义charge.orderDetail API接口配置
- 为chargeOrderDetail接口生成Alova方法类型定义

```

```
chore(config): 更新测试环境配置地址

- 将测试环境地址从HTTP切换到HTTPS协议
- 注释掉旧的HTTP测试地址配置
- 启用新的HTTPS测试环境地址

```

```
feat(charge): 实现充电订单详情页面功能

- 创建chargeOrderDetail页面组件,展示充电订单详细信息
- 集成chargeOrderStatus工具函数,统一订单状态显示逻辑
- 实现页面加载时获取订单详情数据功能
- 动态绑定订单详情信息到页面元素

```

```
feat(charge): 增强充电订单列表页面交互体验

- 实现充电订单列表项点击跳转到详情页功能
- 添加页面滚动透明度变化效果,提升视觉体验
- 集成chargeOrderStatus状态处理函数,优化订单状态展示
- 更新列表项显示内容,使用真实的充电订单数据

```

```
feat(charge): 完善充电启动页面信息展示

- 在充电启动表单中添加充电站名称字段
- 增加终端状态、终端编号、充电电站等详细信息展示
- 修复充电站名称数据传递问题

```

```
refactor(charge): 优化充电价格展示逻辑

- 移除企业价格相关的条件渲染逻辑
- 简化价格信息展示结构
- 统一价格显示格式

```

```
feat(utils): 新增充电订单状态处理工具函数

- 创建chargeOrderStatus函数,统一处理充电订单状态
- 根据不同状态返回对应图标、文本和颜色值
- 支持待充电、充电中、结算中、已完成四种状态

```

```
refactor(smqjh): 优化订单组件架构和交互逻辑

- 将订单操作处理逻辑从父组件移动到子组件内部
- 实现统一的充电订单状态处理函数
- 修改导航标签值,将CHARGE改为CD
- 优化组件间通信机制,提升代码可维护性

```

zouzexu 1 周之前
父节点
当前提交
8ce337382d

+ 92 - 0
src/api/api.type.d.ts

@@ -712,6 +712,36 @@ namespace Api {
     transactionId?: string
     updateTime?: string
     [property: string]: any
+    /**
+     * 充电订单
+     */
+    chargeOrder?: ChargeOrderInfo
+  }
+  interface ChargeOrderInfo {
+  /**
+   * 充电电站名称
+   */
+    powerStationName?: string | null
+    /**
+     * 充电订单创建时间
+     */
+    createTime?: string | null
+    /**
+     * 终端编号
+     */
+    connectorId?: number | null
+    /**
+     * 充电状态
+     */
+    status?: number | null
+    /**
+     * 费用
+     */
+    realCost?: number | null
+    /**
+     * 充电订单编号
+     */
+    orderNumber?: string
   }
   interface xsbOmsOrderItem {
     /**
@@ -1809,6 +1839,10 @@ namespace Api {
      * 用户手机号
      */
     consigneeMobile?: string
+    /**
+     * 电站名称
+     */
+    powerStationName: ?string | undefined
   }
 
   interface chargeSearchList {
@@ -1973,4 +2007,62 @@ namespace Api {
      */
     height?: number
   }
+  interface chargeOrderDetail {
+    /**
+     * 充电订单号
+     */
+    chargeOrderNo?: string
+    /**
+     * 充电时间:秒
+     */
+    chargeTime?: number
+    /**
+     * 结束充电时间
+     */
+    endTime?: string
+    /**
+     * 用户ID
+     */
+    memberId?: number
+    /**
+     * 订购流水号
+     */
+    orderNumber?: string
+    /**
+     * 电站名称
+     */
+    powerStationName?: string
+    /**
+     * 预充值金额
+     */
+    preAmt?: number
+    /**
+     * 平台实际收取金额
+     */
+    realCost?: number
+    /**
+     * 平台总服务费
+     */
+    realServiceCost?: number
+    /**
+     * 备注
+     */
+    remarks?: string
+    /**
+     * 开始充电时间
+     */
+    startTime?: string
+    /**
+     * 第三方充电站ID
+     */
+    stationId?: string
+    /**
+     * 充电订单状态
+     */
+    status?: number
+    /**
+     * 实际充电度数(单位:0.001 kw/h)
+     */
+    totalCharge?: number
+  }
 }

+ 1 - 0
src/api/apiDefinitions.ts

@@ -81,4 +81,5 @@ export default {
   'charge.chargeingCost': ['GET', '/smqjh-system/applet/v1/station/charging-cost'],
   'charge.stopCharge': ['POST', '/smqjh-system/applet/v1/station/stopCharge'],
   'charge.stationInfoMapList': ['GET', '/smqjh-system/applet/v1/homePage/getStationInfoMapList'],
+  'charge.orderDetail': ['GET', '/smqjh-system/api/v1/order/getChargeOrder'],
 };

+ 10 - 0
src/api/globals.d.ts

@@ -779,6 +779,16 @@ declare global {
       >(
         config: Config
       ): Alova2Method<apiResData<any>, 'charge.stationInfoMapList', Config>;
+
+      orderDetail<
+        Config extends Alova2MethodConfig<apiResData<chargeOrderDetail>> & {
+          data: {
+            orderNumber?: string|null;
+          }
+        }
+      >(
+        config: Config
+      ): Alova2Method<apiResData<chargeOrderDetail>, 'charge.orderDetail', Config>;
     }
   }
 }

+ 2 - 2
src/config/index.ts

@@ -16,9 +16,9 @@ const mapEnvVersion = {
    */
   // trial: "http://192.168.1.166:8080/jeecg-boot",
   // trial: 'http://192.168.0.157:8080',
-  trial: 'http://47.109.84.152:8081',
+  // trial: 'http://47.109.84.152:8081',
   // trial: 'http://192.168.1.166:8080',
-  // trial: 'https://smqjh.api.zswlgz.com',
+  trial: 'https://smqjh.api.zswlgz.com',
   /**
    * 正式版
    */

+ 31 - 30
src/subPack-charge/chargeOrderDetail/chargeOrderDetail.vue

@@ -1,4 +1,5 @@
 <script setup lang="ts">
+import { chargeOrderStatus } from '../utils/index'
 import router from '@/router'
 import { StaticUrl } from '@/config'
 
@@ -12,6 +13,22 @@ definePage({
     navigationStyle: 'custom',
   },
 })
+
+const orderNo = ref('')
+onLoad((options: any) => {
+  console.log(options, '页面数据')
+  orderNo.value = options.orderNo
+})
+
+onMounted(() => {
+  getOrderDetail()
+})
+
+const chargeOrderDetail = ref<Api.chargeOrderDetail>()
+async function getOrderDetail() {
+  const res = await Apis.charge.orderDetail({ data: { orderNumber: orderNo.value } })
+  chargeOrderDetail.value = res.data
+}
 </script>
 
 <template>
@@ -30,12 +47,12 @@ definePage({
               :src="`${StaticUrl}/charge-order-number.png`"
             />
           </view>
-          <view class="text-28rpx">
+          <view class="mb-10rpx text-28rpx">
             充电度数
           </view>
         </view>
         <view class="mt-20rpx text-28rpx text-#9ED605 font-bold">
-          60.800度电
+          {{ chargeOrderDetail?.totalCharge }}度电
         </view>
       </view>
       <view class="mt-20rpx rounded-16rpx bg-#FFF p-24rpx">
@@ -44,7 +61,7 @@ definePage({
             起始时间
           </view>
           <view class="mt-20rpx text-32rpx font-bold">
-            2024-07-02  23:10:05
+            {{ chargeOrderDetail?.startTime }}
           </view>
         </view>
         <view class="mt-28rpx">
@@ -52,7 +69,7 @@ definePage({
             终止时间
           </view>
           <view class="mt-20rpx text-32rpx font-bold">
-            2024-07-02  23:10:05
+            {{ chargeOrderDetail?.endTime }}
           </view>
         </view>
         <view class="mt-28rpx">
@@ -60,7 +77,7 @@ definePage({
             终止方式
           </view>
           <view class="mt-20rpx text-32rpx font-bold">
-            用户主动终止
+            {{ '--' }}
           </view>
         </view>
       </view>
@@ -70,7 +87,7 @@ definePage({
             订单状态
           </view>
           <view class="text-28rpx text-#AAA">
-            已完成
+            {{ chargeOrderStatus(chargeOrderDetail?.status).text || '--' }}
           </view>
         </view>
         <view class="mt-28rpx flex items-center justify-between">
@@ -78,7 +95,7 @@ definePage({
             订单编号
           </view>
           <view class="text-28rpx text-#AAA">
-            5215564861554994
+            {{ chargeOrderDetail?.chargeOrderNo }}
           </view>
         </view>
         <view class="mt-28rpx flex items-center justify-between">
@@ -86,7 +103,7 @@ definePage({
             订单时间
           </view>
           <view class="text-28rpx text-#AAA">
-            2024-07-07 23:13:12
+            {{ chargeOrderDetail?.chargeTime }}
           </view>
         </view>
         <view class="mt-28rpx flex items-center justify-between">
@@ -94,15 +111,7 @@ definePage({
             充电电站
           </view>
           <view class="text-28rpx text-#AAA">
-            华能贵州盘州市风电有限责任公司
-          </view>
-        </view>
-        <view class="mt-28rpx flex items-center justify-between">
-          <view class="text-28rpx font-500">
-            终端名称
-          </view>
-          <view class="text-28rpx text-#AAA">
-            402号直流快充
+            {{ chargeOrderDetail?.powerStationName }}
           </view>
         </view>
         <view class="mt-28rpx flex items-center justify-between">
@@ -110,15 +119,7 @@ definePage({
             终端编号
           </view>
           <view class="text-28rpx text-#AAA">
-            52155648615
-          </view>
-        </view>
-        <view class="mt-28rpx flex items-center justify-between">
-          <view class="text-28rpx font-500">
-            车位编号
-          </view>
-          <view class="text-28rpx text-#AAA">
-            无
+            402号直流快充
           </view>
         </view>
         <view class="mt-28rpx flex items-center justify-between">
@@ -134,11 +135,11 @@ definePage({
             服务费
           </view>
           <view class="text-28rpx text-#AAA">
-            0.71
+            {{ chargeOrderDetail?.realServiceCost }}
           </view>
         </view>
         <wd-divider />
-        <view class="mt-28rpx flex items-center justify-between">
+        <!-- <view class="mt-28rpx flex items-center justify-between">
           <view class="text-28rpx font-500">
             新用户首单立减
           </view>
@@ -153,13 +154,13 @@ definePage({
           <view class="text-28rpx text-#F44033">
             0.71元
           </view>
-        </view>
+        </view> -->
         <view class="mt-28rpx flex items-center justify-between">
           <view class="text-28rpx font-500">
             实际结算费用
           </view>
           <view class="text-28rpx text-#F44033">
-            0.71
+            {{ chargeOrderDetail?.realCost }}
           </view>
         </view>
       </view>

+ 35 - 11
src/subPack-charge/chargeOrderList/chargeOrderList.vue

@@ -1,11 +1,12 @@
 <script setup lang="ts">
 import { navTabTypeList } from '../utils/order-data'
+import { chargeOrderStatus } from '../utils/index'
 import router from '@/router'
 import { createGlobalLoadingMiddleware } from '@/api/core/middleware'
 import { StaticUrl } from '@/config'
 
 const navActiveTab = ref(0)
-const { statusBarHeight, MenuButtonHeight } = storeToRefs(useSysStore())
+const { statusBarHeight, MenuButtonHeight, opcity } = storeToRefs(useSysStore())
 definePage({
   name: 'charge-order-list',
   islogin: false,
@@ -31,6 +32,14 @@ const { data: orderList, refresh, isLastPage, page, reload } = usePagination((pa
 onShow(() => {
   refresh()
 })
+onMounted(() => {
+  opcity.value = 0
+})
+
+onPageScroll((e) => {
+  const calculatedOpacity = e.scrollTop / 100
+  opcity.value = Math.min(1, Math.max(0.1, calculatedOpacity))
+})
 onReachBottom(() => {
   if (!isLastPage.value) {
     page.value++
@@ -42,12 +51,25 @@ function handleChangeTypeNav(value: number) {
   reload()
   console.log(navActiveTab.value, '===============')
 }
+
+function handleItemClick(item: Api.xsbOrderList) {
+  const orderNumber = item.chargeOrder?.orderNumber
+  if (orderNumber) {
+    router.push({
+      name: 'charge-order-detail',
+      params: { orderNo: orderNumber },
+    })
+  }
+  else {
+    console.warn('订单号不存在,无法跳转到详情页')
+  }
+}
 </script>
 
 <template>
-  <view class="min-h-screen from-[#E2FF91] to-[rgba(158,214,5,0)] bg-gradient-to-b">
+  <view class="min-h-screen bg-[linear-gradient(180deg,#F5FEDD_0%,#FCFFF3_22.46%,#FAFCFB_27.26%,#FBFDFC_45.2%,#FBFCFB_68.94%,#FBFCFB_100%)]">
     <wd-navbar
-      title="充电订单" custom-style="background: linear-gradient(90deg, #F1FECC 0%, #EAFEFA 100%);"
+      title="充电订单" :custom-style="`background-color: rgba(226, 255, 145, ${opcity})`"
       :bordered="false" :z-index="999" safe-area-inset-top left-arrow fixed @click-left="router.back()"
     />
     <view :style="{ paddingTop: `${(Number(statusBarHeight) || 44) + MenuButtonHeight + 12}px` }" />
@@ -67,25 +89,27 @@ function handleChangeTypeNav(value: number) {
       </view>
     </view>
     <view class="box-border px24rpx">
-      <view v-for="item in orderList" :key="item.orderNumber" class="mt-20rpx mt20rpx rounded-16rpx bg-#FFF p-24rpx" @click="router.push({ name: 'charge-order-detail' })">
+      <view v-for="item in orderList" :key="item.orderNumber" class="mt-20rpx mt20rpx rounded-16rpx bg-#FFF p-24rpx" @click="handleItemClick(item)">
         <view class="flex items-center justify-between">
           <view>
             <view class="text-28rpx font-bold">
-              {{ item.shopName }}
+              {{ item.chargeOrder?.powerStationName }}
             </view>
             <view class="mt-20rpx text-24rpx text-#AAA">
-              订单时间:{{ item.createTime || '未知' }}
+              订单时间:{{ item.chargeOrder?.createTime || '未知' }}
             </view>
             <view class="mt-20rpx text-24rpx text-#AAA">
-              终端名称:{{ item.orderItemList?.[0]?.goodsName || '未知' }}
+              终端编号:{{ item.chargeOrder?.connectorId || '未知' }}
             </view>
           </view>
-          <view class="text-center text-28rpx text-#4EDC86">
+          <view v-if="item.chargeOrder?.status" class="text-center text-28rpx text-#4EDC86">
             <image
               class="h-64rpx w-64rpx"
-              :src="`${StaticUrl}/charge-order-ing.png`"
+              :src="`${StaticUrl}/${chargeOrderStatus(item.chargeOrder?.status).icon}.png`"
             />
-            <view>{{ '充电中' }}</view>
+            <view :style="{ color: chargeOrderStatus(item.chargeOrder?.status).color }">
+              {{ chargeOrderStatus(item.chargeOrder?.status).text }}
+            </view>
           </view>
         </view>
         <view class="my-20rpx h-2rpx w-full bg-#F0F0F0" />
@@ -97,7 +121,7 @@ function handleChangeTypeNav(value: number) {
             <text class="text-18rpx">
             </text>
-            {{ item.actualTotal }}
+            {{ item.chargeOrder?.realCost }}
           </view>
         </view>
       </view>

+ 26 - 0
src/subPack-charge/chargeStart/chargeStart.vue

@@ -37,6 +37,7 @@ const fromData = ref<Api.invokeChargeList>({
   equipmentId: 0,
   stationId: 0,
   connectorId: '',
+  powerStationName: '',
   consigneeName: userInfo.value?.nickName,
   consigneeMobile: userInfo.value?.mobile,
 })
@@ -46,6 +47,7 @@ async function launchCharge() {
   fromData.value.equipmentId = connectorDetailInfo.value?.equipmentId
   fromData.value.stationId = connectorDetailInfo.value?.stationId
   fromData.value.connectorId = connectorDetailInfo.value?.connectorCode
+  fromData.value.powerStationName = connectorDetailInfo.value?.stationName
   const res = await Apis.charge.invokeCharge({ data: fromData.value })
   if (res.code === '00000') {
     router.push({ name: 'chargeing', params: { orderNo: res.data } })
@@ -125,6 +127,30 @@ async function launchCharge() {
             {{ connectorDetailInfo?.parkingTips || '--' }}
           </view>
         </view>
+        <view class="mt-20rpx flex items-center justify-between">
+          <view class="text-28rpx font-bold">
+            终端状态
+          </view>
+          <view class="text-28rpx text-#AAA">
+            {{ connectorDetailInfo?.statusName || '--' }}
+          </view>
+        </view>
+        <view class="mt-20rpx flex items-center justify-between">
+          <view class="text-28rpx font-bold">
+            终端编号
+          </view>
+          <view class="text-28rpx text-#AAA">
+            {{ connectorDetailInfo?.connectorCode || '--' }}
+          </view>
+        </view>
+        <view class="mt-20rpx flex items-center justify-between">
+          <view class="text-28rpx font-bold">
+            充电电站
+          </view>
+          <view class="text-28rpx text-#AAA">
+            {{ connectorDetailInfo?.stationName || '--' }}
+          </view>
+        </view>
         <view class="mt-28rpx text-24rpx text-#AAA">
           账单信息可能会有所延迟,具体以实际结算为准
         </view>

+ 1 - 21
src/subPack-charge/index/index.vue

@@ -203,7 +203,7 @@ function handleFilterClick(filterKey: number) {
                 </view>
               </view>
             </view>
-            <view v-if="!item.enterprisePrice" class="mt-28rpx flex items-center justify-between">
+            <view class="mt-28rpx flex items-center justify-between">
               <view class="relative flex">
                 <view class="absolute left-30rpx z-10 flex items-center -top-26rpx">
                   <text class="text-40rpx text-#FF6464 font-bold">
@@ -222,26 +222,6 @@ function handleFilterClick(filterKey: number) {
                 {{ item.peakValue }}:{{ item.peakTime }}
               </view>
             </view>
-            <view v-else class="mt-20rpx flex items-center justify-between">
-              <view class="flex items-center">
-                <view class="flex items-center -mt-10rpx">
-                  <text class="text-40rpx text-#FF6464 font-bold">
-                    {{ item.platformPrice }}
-                  </text>
-                  <text class="w-100rpx text-24rpx">
-                    元/度
-                  </text>
-                </view>
-                <view class="h-52rpx w-212rpx text-center" :style="{ backgroundImage: `url(${StaticUrl}/charge-firm.png)`, backgroundSize: 'cover', backgroundPosition: 'center' }">
-                  <text class="ml-70rpx text-28rpx text-#FF6464">
-                    {{ item.enterprisePrice }}
-                  </text>
-                </view>
-              </view>
-              <view class="text-24rpx text-#2B303A">
-                {{ item.peakValue }}:{{ item.peakTime }}
-              </view>
-            </view>
           </view>
         </wd-skeleton>
       </view>

+ 31 - 0
src/subPack-charge/utils/index.ts

@@ -5,6 +5,37 @@ export function formatStatusName(statusName: string) {
   return statusName.replace(/\([^)]*\)/g, '')
 }
 
+/**
+ * 统一充电订单状态处理
+ * @param order
+ */
+export function chargeOrderStatus(status: any) {
+  const statusObj = { icon: '', text: '', color: '' }
+  switch (status) {
+    case 0:
+      statusObj.icon = 'charge-order-settlement'
+      statusObj.text = '待充电'
+      statusObj.color = '#FFA500'
+      break
+    case 1:
+      statusObj.icon = 'charge-order-ing'
+      statusObj.text = '充电中'
+      statusObj.color = '#4EDC86'
+      break
+    case 2:
+      statusObj.icon = 'charge-order-settlement'
+      statusObj.text = '结算中'
+      statusObj.color = '#3EB6F8'
+      break
+    case 3:
+      statusObj.icon = 'charge-order-settled'
+      statusObj.text = '已完成'
+      statusObj.color = '#AAAAAA'
+      break
+  }
+  return statusObj
+}
+
 /**
  * 扫码工具类
  */

+ 25 - 6
src/subPack-smqjh/components/charge-orderList/charge-orderList.vue

@@ -1,29 +1,48 @@
 <script setup lang="ts">
+import { chargeOrderStatus } from '../../order/order-data'
 import router from '@/router'
+import { StaticUrl } from '@/config'
 
 defineProps<{
   orderList: Api.xsbOrderList[]
   subPackOrder: any
 }>()
+
+function handleItemClick(item: Api.xsbOrderList) {
+  const orderNumber = item.chargeOrder?.orderNumber
+  if (orderNumber) {
+    router.push({
+      name: 'charge-order-detail',
+      params: { orderNo: orderNumber },
+    })
+  }
+  else {
+    console.warn('订单号不存在,无法跳转到详情页')
+  }
+}
 </script>
 
 <template>
   <view class="">
-    <view v-for="item in orderList" :key="item.orderNumber" class="mt-20rpx mt20rpx rounded-16rpx bg-#FFF p-24rpx" @click="router.push({ name: 'charge-order-detail' })">
+    <view v-for="item in orderList" :key="item.orderNumber" class="mt-20rpx mt20rpx rounded-16rpx bg-#FFF p-24rpx" @click="handleItemClick(item)">
       <view class="flex items-center justify-between">
         <view>
           <view class="text-28rpx font-bold">
-            {{ item.shopName }}
+            {{ item.chargeOrder?.powerStationName }}
           </view>
           <view class="mt-20rpx text-24rpx text-#AAA">
             订单时间:{{ item.createTime || '未知' }}
           </view>
           <view class="mt-20rpx text-24rpx text-#AAA">
-            终端名称:{{ item.orderItemList?.[0]?.goodsName || '未知' }}
+            终端编号:{{ item.chargeOrder?.connectorId || '未知' }}
           </view>
         </view>
-        <view class="text-28rpx text-#4EDC86">
-          {{ subPackOrder?.handleCommonOrderStatusText(item) }}
+        <view class="text-center text-28rpx text-#4EDC86">
+          <image
+            class="h-64rpx w-64rpx"
+            :src="`${StaticUrl}/${chargeOrderStatus(item.chargeOrder?.status).icon}.png`"
+          />
+          <view>{{ chargeOrderStatus(item.chargeOrder?.status).text }}</view>
         </view>
       </view>
       <view class="my-20rpx h-2rpx w-full bg-#F0F0F0" />
@@ -35,7 +54,7 @@ defineProps<{
           <text class="text-18rpx">
           </text>
-          {{ item.actualTotal }}
+          {{ item.chargeOrder?.realCost }}
         </view>
       </view>
     </view>

+ 54 - 18
src/subPack-smqjh/components/xsb-orderList/xsb-orderList.vue

@@ -9,14 +9,55 @@ const props = defineProps<{
 }>()
 
 const _emit = defineEmits<{
-  'cancel': [order: Api.xsbOrderList]
-  'pay': [orderNumber: string]
-  'submit': [order: Api.xsbOrderList]
-  'del': [order: Api.xsbOrderList]
   'after-sale': [item: Api.xsbOrderList]
   'refresh': []
 }>()
 
+function resolveModule<T = any>(maybeRef: any): T | undefined {
+  if (!maybeRef)
+    return undefined
+  if (maybeRef.value !== undefined)
+    return maybeRef.value as T
+  return maybeRef as T
+}
+
+async function handleCancel(order: Api.xsbOrderList) {
+  const sp = resolveModule(props.subPackOrder)
+  if (!sp)
+    return
+  await sp.handleCommonCancelOrder?.(order)
+  _emit('refresh')
+}
+
+async function handlePay(orderNumber: string) {
+  const spc = resolveModule(props.subPackConfirm)
+  if (!spc)
+    return
+  const res = await spc.handleCommonPayMent?.(orderNumber)
+  if (res?.payType !== 1 && res) {
+    await spc.getWxCommonPayment?.(res)
+  }
+  else {
+    _emit('refresh')
+  }
+}
+
+async function handleSubmit(order: Api.xsbOrderList) {
+  const sp = resolveModule(props.subPackOrder)
+  if (!sp)
+    return
+  await sp.handleCommonOrderReceive?.(order)
+  _emit('refresh')
+}
+
+async function handleDel(order: Api.xsbOrderList) {
+  const sp = resolveModule(props.subPackOrder)
+  if (!sp)
+    return
+  await sp.handleCommonDeleteOrder?.(order)
+  _emit('refresh')
+}
+
 function handleClick(no: string) {
   router.push({ name: 'xsb-orderDetaile', params: { id: no } })
 }
@@ -82,40 +123,35 @@ function handleClick(no: string) {
       </view>
     </view>
     <view class="my24rpx flex items-center justify-end">
-      <template v-if="item.hbOrderStatus === props.subPackOrder?.OrderStatus.PaddingPay">
+      <template v-if="item.hbOrderStatus === resolveModule(props.subPackOrder)?.OrderStatus.PaddingPay">
         <view class="mr20rpx">
-          <wd-button size="small" plain type="info" @click.stop="$emit('cancel', item)">
+          <wd-button size="small" plain type="info" @click.stop="handleCancel(item)">
             取消订单
           </wd-button>
         </view>
         <view class="mr20rpx">
-          <wd-button size="small" plain type="error" @click.stop="$emit('pay', item.orderNumber as string)">
+          <wd-button size="small" plain type="error" @click.stop="handlePay(item.orderNumber as string)">
             付款
           </wd-button>
         </view>
       </template>
-      <template v-if="[props.subPackOrder?.OrderStatus.OrderCancel, props.subPackOrder?.OrderStatus.OrderCompleted].includes(item.hbOrderStatus) ">
+      <template v-if="[resolveModule(props.subPackOrder)?.OrderStatus.OrderCancel, resolveModule(props.subPackOrder)?.OrderStatus.OrderCompleted].includes(item.hbOrderStatus) ">
         <view class="mr20rpx">
-          <wd-button size="small" plain type="info" @click.stop="$emit('del', item)">
+          <wd-button size="small" plain type="info" @click.stop="handleDel(item)">
             删除订单
           </wd-button>
         </view>
-        <!-- <view class="ml20rpx">
-              <wd-button size="small" plain type="error" >
-                再次购买
-              </wd-button>
-            </view> -->
       </template>
-      <template v-if="item.hbOrderStatus === props.subPackOrder?.OrderStatus.OrderArrived">
+      <template v-if="item.hbOrderStatus === resolveModule(props.subPackOrder)?.OrderStatus.OrderArrived">
         <view class="mr20rpx">
-          <wd-button size="small" plain type="info" @click.stop="$emit('submit', item)">
+          <wd-button size="small" plain type="info" @click.stop="handleSubmit(item)">
             确认收货
           </wd-button>
         </view>
       </template>
-      <template v-if="item.refundStatus != 2 || [props.subPackOrder?.OrderStatus.OrderCompleted, props.subPackOrder?.OrderStatus.OrderWaitDelivery, props.subPackOrder?.OrderStatus.OrderAccepted].includes(item.hbOrderStatus) ">
+      <template v-if="item.refundStatus != 2 || [resolveModule(props.subPackOrder)?.OrderStatus.OrderCompleted, resolveModule(props.subPackOrder)?.OrderStatus.OrderWaitDelivery, resolveModule(props.subPackOrder)?.OrderStatus.OrderAccepted].includes(item.hbOrderStatus) ">
         <view class="mr20rpx">
-          <wd-button size="small" plain type="info" @click.stop="$emit('after-sale', item)">
+          <wd-button size="small" plain type="info" @click.stop="() => _emit('after-sale', item)">
             申请售后
           </wd-button>
         </view>

+ 1 - 1
src/subPack-smqjh/order/components/OrderRenderer.vue

@@ -55,7 +55,7 @@ defineEmits<{
     @refresh="$emit('refresh')"
   />
   <chargeList
-    v-else-if="navActiveTab === 'CHARGE'"
+    v-else-if="navActiveTab === 'CD'"
     :order-list="orderList"
     :sub-pack-order="subPackOrder"
   />

+ 6 - 30
src/subPack-smqjh/order/index.vue

@@ -34,20 +34,20 @@ const { data: orderList, refresh, isLastPage, page, reload } = usePagination((pa
   middleware: createGlobalLoadingMiddleware(),
 })
 
-function createFilteredList(navTabValue: string, businessType: string) {
+function createFilteredList(businessType: string) {
   return computed(() => {
     if (navActiveTab.value === 'all') {
       return orderList.value.filter(order => order.businessType === businessType)
     }
-    else if (navActiveTab.value === navTabValue) {
+    else if (navActiveTab.value === businessType) {
       return orderList.value
     }
     return []
   })
 }
 
-const xsbOrderList = createFilteredList('XSB', 'XSB')
-const chargeOrderList = createFilteredList('CHARGE', 'CD')
+const xsbOrderList = createFilteredList('XSB')
+const chargeOrderList = createFilteredList('CD')
 
 const currentOrderList = computed(() => {
   if (navActiveTab.value === 'all') {
@@ -56,7 +56,7 @@ const currentOrderList = computed(() => {
   else if (navActiveTab.value === 'XSB') {
     return xsbOrderList.value
   }
-  else if (navActiveTab.value === 'CHARGE') {
+  else if (navActiveTab.value === 'CD') {
     return chargeOrderList.value
   }
   return []
@@ -86,27 +86,7 @@ function handleChangeStatus(value: string) {
   orderList.value = []
   reload()
 }
-async function handleCancel(order: Api.xsbOrderList) {
-  await subPackOrder.value?.handleCommonCancelOrder(order)
-  reload()
-}
-async function handlePay(orderNumber: string) {
-  const res = await subPackComfirm.value?.handleCommonPayMent(orderNumber)
-  if (res?.payType !== 1 && res) {
-    await subPackComfirm.value?.getWxCommonPayment(res)
-  }
-  else {
-    reload()
-  }
-}
-async function handleSubmitOrder(order: Api.xsbOrderList) {
-  await subPackOrder.value?.handleCommonOrderReceive(order)
-  reload()
-}
-async function handleDel(order: Api.xsbOrderList) {
-  await subPackOrder.value?.handleCommonDeleteOrder(order)
-  reload()
-}
+// Cancel / Pay / Submit / Delete are handled inside child components now
 async function handleAfterSale(item: Api.xsbOrderList) {
   if (!item.orderItemList) {
     useGlobalToast().show('商品异常!')
@@ -155,10 +135,6 @@ async function handleAfterSale(item: Api.xsbOrderList) {
         :nav-active-tab="navActiveTab"
         :sub-pack-order="subPackOrder"
         :sub-pack-confirm="subPackComfirm"
-        @cancel="handleCancel"
-        @pay="handlePay"
-        @submit="handleSubmitOrder"
-        @del="handleDel"
         @after-sale="handleAfterSale"
         @refresh="refresh"
       />

+ 32 - 1
src/subPack-smqjh/order/order-data.ts

@@ -1,7 +1,7 @@
 export const navTabTypeList = [
   { name: '全部', value: 'all' },
   { name: '星闪豹', value: 'XSB' },
-  { name: '充电', value: 'CHARGE' },
+  { name: '充电', value: 'CD' },
   { name: '电影演出', value: 'MOVIE' },
   { name: '视频权益', value: 'VIDEO' },
   { name: '大牌点餐', value: 'SHOP' },
@@ -32,3 +32,34 @@ export function handleCommonOrderPay(order: any) {
 export function handleCommonCancelOrder(order: any) {
   return order
 }
+
+/**
+ * 统一充电订单状态处理
+ * @param order
+ */
+export function chargeOrderStatus(status: any) {
+  const statusObj = { icon: '', text: '', color: '' }
+  switch (status) {
+    case 0:
+      statusObj.icon = 'charge-order-settlement'
+      statusObj.text = '待充电'
+      statusObj.color = '#FFA500'
+      break
+    case 1:
+      statusObj.icon = 'charge-order-ing'
+      statusObj.text = '充电中'
+      statusObj.color = '#4EDC86'
+      break
+    case 2:
+      statusObj.icon = 'charge-order-settlement'
+      statusObj.text = '结算中'
+      statusObj.color = '#3EB6F8'
+      break
+    case 3:
+      statusObj.icon = 'charge-order-settled'
+      statusObj.text = '已完成'
+      statusObj.color = '#AAAAAA'
+      break
+  }
+  return statusObj
+}