Prechádzať zdrojové kódy

订单+收藏+浏览

weixin_52219567 3 týždňov pred
rodič
commit
2ac26d2400

+ 17 - 10
src/addon/shop/api/goods.ts

@@ -46,21 +46,28 @@ export function getGoodsSku(sku_id: any) {
  * 收藏列表
  */
 export function getCollectList(params: Record<string, any>) {
-    return request.get(`shop/goods/collect`, params)
+    return request.get(`product/miniProduct/getFavoritesProductPage`, params)
 }
 
 /**
  * 取消收藏
  */
-export function cancelCollect(params: Record<string, any>) {
-    return request.put(`shop/goods/collect`, params, { showSuccessMessage: true })
+export function cancelCollect(params: any) {
+    return request.delete(`product/miniProduct/cancelProductCollect`, params, { showSuccessMessage: true })
 }
 
 /**
  *  收藏
  */
-export function collect(goods_id: any) {
-    return request.post(`shop/goods/collect/${ goods_id }`)
+export function collect(params: any) {
+    return request.post(`product/miniProduct/addProductCollect` ,params, { showSuccessMessage: true })
+}
+
+/**
+ *  是否收藏
+ */
+export function isProductInDefaultCollect(goods_id: any) {
+    return request.get(`product/miniProduct/isProductInDefaultCollect/${ goods_id }`)
 }
 
 
@@ -88,22 +95,22 @@ export function getManjian(params: Record<string, any>) {
 /**
  *  商品足迹添加
  */
-export function browse(params: Record<string, any>) {
-    return request.post(`shop/goods/browse`, params, { showSuccessMessage: false })
+export function browse(goods_id: any) {
+    return request.post(`product/miniProduct/addProductBrowsingHistory/${goods_id}`)
 }
 
 /**
  *  商品足迹列表
  */
 export function getBrowse(params: Record<string, any>) {
-    return request.get(`shop/goods/browse`, params)
+    return request.get(`product/miniProduct/getProductBrowsingHistory`, params)
 }
 
 /**
  * 商品足迹删除
  */
-export function delBrowse(params: Record<string, any>) {
-    return request.delete(`shop/goods/browse`, params)
+export function delBrowse(ids: any) {
+    return request.delete(`/product/miniProduct/deleteProductBrowsingHistory/${ids}`)
 }
 
 /**

+ 19 - 2
src/addon/shop/api/order.ts

@@ -19,7 +19,14 @@ export function getShopOrderStatus() {
  * 获取订单列表
  */
 export function getShopOrder(params: Record<string, any>) {
-    return request.get(`shop/order`, params)
+    return request.get(`order/miniOrder/list`, params)
+}
+
+/**
+ * 获取订单列表商品
+ */
+export function getproducts(params: any) {
+    return request.get(`order/miniOrder/products`, params)
 }
 
 /**
@@ -40,7 +47,7 @@ export function getShopOrderDetail(order_id: any) {
  * 关闭订单
  */
 export function orderClose(order_id: number) {
-    return request.put(`shop/order/close/${ order_id }`)
+    return request.put(`order/miniOrder/cancel/${ order_id }`)
 }
 
 /**
@@ -91,3 +98,13 @@ export function getMaterialflowList(params: Record<string, any>) {
 export function getLocal() {
     return request.get('shop/order_create/local')
 }
+
+
+/**
+ * 获取会员收货地址详情
+ * @param id 会员收货地址id
+ * @returns
+ */
+export function getAddressInfo(id: number) {
+    return request.get(`customer/miniAddress/${ id }`);
+}

+ 8 - 34
src/addon/shop/components/diy/shop-goods-detail-bottom/index.vue

@@ -51,18 +51,15 @@
 
 <script setup lang="ts">
 import { ref, computed, watch, onMounted, nextTick } from 'vue';
-import { redirect, img } from '@/utils/common';
+import { redirect, img, getToken } from '@/utils/common';
 import useDiyStore from '@/app/stores/diy';
 import useMemberStore from '@/stores/member'
-import { collect, cancelCollect } from '@/addon/shop/api/goods';
+import { collect, cancelCollect, isProductInDefaultCollect } from '@/addon/shop/api/goods';
 import useGoodsDetailStore from '@/addon/shop/stores/goodsDetail'
 
 const props = defineProps(['component', 'index', 'value', 'global']);
 const diyStore = useDiyStore();
 const emits = defineEmits(['loadingFn', 'update:componentIsShow']); //商品数据加载完成之后触发
-const sendMessageTitle = ref('')
-const sendMessagePath = ref('')
-const sendMessageImg = ref('')
 
 // 会员信息
 const memberStore = useMemberStore()
@@ -81,9 +78,6 @@ const diyComponent = computed(() => {
     }
 })
 
-const diyGlobal = computed(() => {
-    return props.global;
-})
 
 const warpCss = computed(() => {
     let style = '';
@@ -117,14 +111,14 @@ const cartBtnStyle = computed(() => {
 const isCollect: any = ref(0);
 const collectFn = () => {
     // 检测是否登录
-    if (!userInfo.value) {
+    if (!getToken()) {
         uni.showToast({
             title: '未登录,请先登录后再收藏商品',
             icon: 'none'
         });
         return false
     }
-    let api = isCollect.value ? cancelCollect({ goods_ids: [diyComponent.value.goods_id] }) : collect(diyComponent.value.goods_id);
+    let api = isCollect.value ? cancelCollect({ productId: diyComponent.value.id }) : collect({ productId: diyComponent.value.id });
     api.then(res => {
         isCollect.value = !isCollect.value;
         if (isCollect.value) {
@@ -164,24 +158,6 @@ const goodsMaxBuy = (data: any = {}) => {
     }
 }
 
-// 判断单规格库存是否为0
-const isShowSingleSku = computed(() => {
-    let isSingleSpec = false // 是否为单规格,true:多规格,false:单规格
-    diyComponent.value.skuList.forEach((item: any, index: any) => {
-        if (item.sku_spec_format) {
-            isSingleSpec = true
-        }
-    })
-
-    // 单规格,库存为0,显示已售罄
-    if (!isSingleSpec && diyComponent.value.stock <= 0) {
-        return false;
-    } else if (!isSingleSpec && diyComponent.value.stock > 0) {
-        // 单规格,库存大于0,可以购买
-        return true;
-    }
-    return true;
-})
 
 const buyFn = (type: any) => {
     useGoodsDetailStore().setGoodsDetail({ isOpenSkuBuy: true, skuBuyType: type });
@@ -226,13 +202,11 @@ onMounted(() => {
 
 const menuContent = ref<any>([])
 const initFn = () => {
-    isCollect.value = diyComponent.value.goods.is_collect;
-    sendMessageTitle.value = diyComponent.value.goods.goods_name
-    sendMessagePath.value = '/addon/shop/pages/goods/detail?sku_id=' + diyComponent.value.sku_id;
-    if (diyComponent.value.type) {
-        sendMessagePath.value += '&type=' + diyComponent.value.type;
+    if (getToken()) {
+        isProductInDefaultCollect(diyComponent.value.id).then((res: any) => {
+            isCollect.value = res.data ? 1 : 0;
+        })
     }
-    sendMessageImg.value = img(diyComponent.value.goods.goods_cover_thumb_mid)
     menuContent.value = (typeof diyComponent.value?.menuContent == 'object') ? diyComponent.value?.menuContent : diyComponent.value?.menuContent.split(',');
 }
 

+ 3 - 5
src/addon/shop/hooks/useDiyGoodsDetail.ts

@@ -265,7 +265,7 @@ export function useDiyGoodsDetail(params: any = {}) {
     const assembleGoodsDetailData = (componentData: any, res: any) => {
         let data = deepClone(res)
         data.goods = {
-            goods_image:['https://img1.yoe365.com/Photos/133337988754342006.jpg'],
+            goods_image:[],
             goods_name:data.itemName,
             sub_title:'',
             unit:data.unitName,
@@ -282,7 +282,7 @@ export function useDiyGoodsDetail(params: any = {}) {
 
         if (getToken()) {
             // 我的足迹
-            // myBrowseFn(data.goods.goods_id);
+            myBrowseFn(data.id);
         }
 
         uni.setNavigationBarTitle({
@@ -300,9 +300,7 @@ export function useDiyGoodsDetail(params: any = {}) {
 
     // 我的足迹
     const myBrowseFn = (goods_id: any) => {
-        browse({
-            goods_id
-        }).then((res: any) => {
+        browse(goods_id).then((res: any) => {
         })
     }
 

+ 122 - 102
src/addon/shop/pages/goods/browse.vue

@@ -17,54 +17,68 @@
                 </view>
             </view>
         </view>
-        <mescroll-body ref="mescrollRef" top="76" bottom="168" @init="mescrollInit" :down="{ use: false }" @up="getBrowseListFn">
-            <view v-if="browseList.length">
-                <view class="bg-[#fff] mb-[20rpx] pt-[30rpx] px-[20rpx]" v-for="(item,index) in browseList" :key="index">
-                    <view class="flex items-center h-[34rpx]  mb-[20rpx]">
-                        <view class="self-center w-[58rpx]  flex items-center" v-if="isEdit" @click.stop="isSelectGroup(item)">
-                            <view class="bg-[#fff] w-[34rpx] h-[34rpx] rounded-[17rpx] flex items-center justify-center">
-                                <text class=" iconfont text-primary text-[34rpx] w-[34rpx] h-[34rpx] rounded-[17rpx] overflow-hidden shrink-0"
-                                    :class="{ 'iconxuanze1':item.checked,'bg-[#F5F5F5]':!item.checked}"></text>
-                            </view>
-                        </view>
-                        <view class="text-[28rpx] font-500 text-[#333] ">{{ item.date }}</view>
+        <view class="bg-[#fff] mb-[20rpx] pt-[30rpx] px-[20rpx]" v-for="(item, index) in browseList" :key="index">
+            <view class="flex items-center h-[34rpx]  mb-[20rpx]">
+                <view class="self-center w-[58rpx]  flex items-center" v-if="isEdit" @click.stop="isSelectGroup(item)">
+                    <view class="bg-[#fff] w-[34rpx] h-[34rpx] rounded-[17rpx] flex items-center justify-center">
+                        <text
+                            class=" iconfont text-primary text-[34rpx] w-[34rpx] h-[34rpx] rounded-[17rpx] overflow-hidden shrink-0"
+                            :class="{ 'iconxuanze1': item.checked, 'bg-[#F5F5F5]': !item.checked }"></text>
                     </view>
-                    <view class="flex flex-wrap">
-                        <view class="w-[230rpx] mb-[20rpx]" :class="{'mr-[10rpx]': (subIndex + 1) % 3 }" v-for="(subItem,subIndex) in item.list" :key="subIndex" @click="toDetail(subItem)">
-                            <view class="relative w-[230rpx] h-[230rpx] rounded-[var(--goods-rounded-mid)] overflow-hidden mb-[10rpx]">
-                                <u--image width="230rpx" height="230rpx" :radius="'var(--goods-rounded-mid)'" :src="img(subItem.goods_cover_thumb_mid ? subItem.goods_cover_thumb_mid : '')" mode="aspectFill">
-                                    <template #error>
-                                        <image class="w-[230rpx] h-[230rpx] rounded-[var(--goods-rounded-mid)] overflow-hidden" :src="img('static/resource/images/diy/shop_default.jpg')" mode="aspectFill" />
-                                    </template>
-                                </u--image>
-                                <view v-if="subItem.status == 0 " class="absolute left-0 top-0  w-[230rpx] h-[230rpx]  leading-[230rpx] text-center " style="background-color: rgba(0,0,0,0.3);">
-                                    <text class="text-[#fff] text-[28rpx]">已失效</text>
-                                </view>
-                                <view class="absolute top-0 left-0 right-0 bottom-0 p-[10rpx] flex justify-end items-start z-100"
-                                    v-if="isEdit" @click.stop="changeItem(item,subItem)">
-                                    <view class="bg-[#fff] w-[34rpx] h-[34rpx] rounded-[17rpx] flex items-center justify-center">
-                                        <text class="iconfont text-primary text-[34rpx] w-[34rpx] h-[34rpx] rounded-[17rpx] overflow-hidden shrink-0"
-                                            :class="{ 'iconxuanze1':subItem.checked,'bg-[#F5F5F5]':!subItem.checked}"></text>
-                                    </view>
-                                </view>
-                            </view>
-                            <view class="text-[var(--price-text-color)] price-font">
-                                <text class="text-[24rpx] font-500">¥</text>
-                                <text class="text-[40rpx] font-500">{{ parseFloat(subItem.show_price).toFixed(2).split('.')[0] }}</text>
-                                <text class="text-[24rpx] font-500">.{{ parseFloat(subItem.show_price).toFixed(2).split('.')[1] }}</text>
-                                <image v-if="subItem.show_type == 'member_price'" class="max-w-[50rpx] h-[28rpx] ml-[6rpx]" :src="img('addon/shop/VIP.png')" mode="heightFix" />
-                                <image v-else-if="subItem.show_type  == 'newcomer_price'" class="max-w-[60rpx] h-[28rpx] ml-[6rpx]" :src="img('addon/shop/newcomer.png')" mode="heightFix" />
-                                <image v-else-if="subItem.show_type  == 'discount_price'" class="max-w-[80rpx] h-[28rpx] ml-[6rpx]" :src="img('addon/shop/discount.png')" mode="heightFix" />
+                </view>
+                <view class="text-[28rpx] font-500 text-[#333] ">{{ item.date }}</view>
+            </view>
+            <view class="flex flex-wrap">
+                <view class="w-[230rpx] mb-[20rpx]" :class="{ 'mr-[10rpx]': (Number(subIndex) + 1) % 3 }"
+                    v-for="(subItem, subIndex) in item.list" :key="subIndex" @click="toDetail(subItem)">
+                    <view
+                        class="relative w-[230rpx] h-[230rpx] rounded-[var(--goods-rounded-mid)] overflow-hidden mb-[10rpx]">
+                        <u--image width="230rpx" height="230rpx" :radius="'var(--goods-rounded-mid)'"
+                            :src="img(subItem.goods_cover_thumb_mid ? subItem.goods_cover_thumb_mid : '')"
+                            mode="aspectFill">
+                            <template #error>
+                                <image class="w-[230rpx] h-[230rpx] rounded-[var(--goods-rounded-mid)] overflow-hidden"
+                                    :src="img('static/resource/images/diy/shop_default.jpg')" mode="aspectFill" />
+                            </template>
+                        </u--image>
+                        <view v-if="subItem.productStatus == 0"
+                            class="absolute left-0 top-0  w-[230rpx] h-[230rpx]  leading-[230rpx] text-center "
+                            style="background-color: rgba(0,0,0,0.3);">
+                            <text class="text-[#fff] text-[28rpx]">已失效</text>
+                        </view>
+                        <view
+                            class="absolute top-0 left-0 right-0 bottom-0 p-[10rpx] flex justify-end items-start z-100"
+                            v-if="isEdit" @click.stop="changeItem(item, subItem)">
+                            <view
+                                class="bg-[#fff] w-[34rpx] h-[34rpx] rounded-[17rpx] flex items-center justify-center">
+                                <text
+                                    class="iconfont text-primary text-[34rpx] w-[34rpx] h-[34rpx] rounded-[17rpx] overflow-hidden shrink-0"
+                                    :class="{ 'iconxuanze1': subItem.checked, 'bg-[#F5F5F5]': !subItem.checked }"></text>
                             </view>
                         </view>
                     </view>
+                    <view class="text-[var(--price-text-color)] price-font">
+                        <text class="text-[24rpx] font-500">¥</text>
+                        <text class="text-[40rpx] font-500">{{ parseFloat(subItem.show_price).toFixed(2).split('.')[0]
+                            }}</text>
+                        <text class="text-[24rpx] font-500">.{{ parseFloat(subItem.show_price).toFixed(2).split('.')[1]
+                            }}</text>
+                        <image v-if="subItem.show_type == 'member_price'" class="max-w-[50rpx] h-[28rpx] ml-[6rpx]"
+                            :src="img('addon/shop/VIP.png')" mode="heightFix" />
+                        <image v-else-if="subItem.show_type == 'newcomer_price'"
+                            class="max-w-[60rpx] h-[28rpx] ml-[6rpx]" :src="img('addon/shop/newcomer.png')"
+                            mode="heightFix" />
+                        <image v-else-if="subItem.show_type == 'discount_price'"
+                            class="max-w-[80rpx] h-[28rpx] ml-[6rpx]" :src="img('addon/shop/discount.png')"
+                            mode="heightFix" />
+                    </view>
                 </view>
             </view>
-            <mescroll-empty v-if="!browseList.length && loading" :option="{tip : '暂无浏览的商品'}"></mescroll-empty>
-        </mescroll-body>
+        </view>
+        <mescroll-empty v-if="!browseList.length && loading" :option="{ tip: '暂无浏览的商品' }"></mescroll-empty>
         <view v-if="browseList.length && isEdit" class="fixed left-0 right-0 bottom-0 z-200 bg-[#fff]  pb-ios">
             <view v-if="checkedNum"
-                  class="h-[66rpx] flex items-center justify-between pl-[30rpx] pr-[20rpx] border-0  border-b-[1rpx] border-solid border-[#f6f6f6]">
+                class="h-[66rpx] flex items-center justify-between pl-[30rpx] pr-[20rpx] border-0  border-b-[1rpx] border-solid border-[#f6f6f6]">
                 <view class="text-[24rpx]">
                     <text>已选</text>
                     <text class="text-primary">{{ checkedNum }}</text>
@@ -74,11 +88,13 @@
             </view>
             <view class="flex h-[100rpx] items-center  justify-between pl-[30rpx] pr-[20rpx]">
                 <view class="flex items-center" @click="allChange">
-                    <text class="self-center iconfont text-primary text-[34rpx] mr-[10rpx] w-[34rpx] h-[34rpx] rounded-[17rpx] overflow-hidden flex-shrink-0"
-                        :class="{'iconxuanze1': isSelectAll, 'bg-color': !isSelectAll } "></text>
+                    <text
+                        class="self-center iconfont text-primary text-[34rpx] mr-[10rpx] w-[34rpx] h-[34rpx] rounded-[17rpx] overflow-hidden flex-shrink-0"
+                        :class="{ 'iconxuanze1': isSelectAll, 'bg-color': !isSelectAll }"></text>
                     <text class="font-400 text-[#303133] text-[26rpx]">全选</text>
                 </view>
-                <button class="w-[180rpx] h-[70rpx] font-500 text-[26rpx] leading-[70rpx] !text-[#fff] m-0 rounded-full primary-btn-bg remove-border"
+                <button
+                    class="w-[180rpx] h-[70rpx] font-500 text-[26rpx] leading-[70rpx] !text-[#fff] m-0 rounded-full primary-btn-bg remove-border"
                     @click="deleteBrowseFn">删除</button>
             </view>
         </view>
@@ -99,6 +115,7 @@ import useMescroll from '@/components/mescroll/hooks/useMescroll.js';
 import { onPageScroll, onReachBottom } from '@dcloudio/uni-app';
 
 const { mescrollInit, downCallback, getMescroll } = useMescroll(onPageScroll, onReachBottom);
+import { onLaunch, onShow, onHide } from '@dcloudio/uni-app'
 
 const isEdit = ref(false)
 let loading = ref<boolean>(false);
@@ -106,59 +123,61 @@ const optionLoading = ref(false)
 const browseTotal = ref<number>(0);
 let browseList = ref<any>([]);
 const create_time = ref([])
-const getBrowseListFn = (mescroll: any) => {
+
+onShow(() => {
+    getBrowseListFn()
+})
+const getBrowseListFn = () => {
     loading.value = false;
-    let data: object = {
-        page: mescroll.num,
-        limit: mescroll.size,
-        date: create_time.value
+    const data = {
+        startTime: create_time.value.length > 1 ? create_time.value[0] : '',
+        endTime: create_time.value.length > 1 ? create_time.value[1] : ''
     };
-    getBrowse(data).then((res: any) => {
-        browseTotal.value = res.data.total;
-        let newArr = (res.data.data as Array<Object>);
-        //设置列表数据
-        if (Number(mescroll.num) === 1) {
-            browseList.value = []; //如果是第一页需手动制空列表
-        }
-        // 按日期分组
-        const groupedData = newArr.reduce((acc: any, item: any) => {
-            const date = item.browse_time.split(' ')[0]; // 提取日期部分
-            if (!acc[date]) {
-                acc[date] = [];
-            }
-            acc[date].push(item);
-            return acc;
-        }, {});
+    browseList.value = [];
+    getBrowse(data)
+        .then((res: any) => {
+            // 新接口返回的是 { "2026-04-30": [...], "2026-04-29": [...] }
+            const groupedData = res.data || {}; // 假设总数据在 res.data
+            browseTotal.value = Object.values(groupedData).flat().length; // 总条数
+
+            // 转换为页面需要的格式:[{ date: '2026-04-30', list: [...] }, ...]
+            const formattedData = Object.entries(groupedData).map(([date, list]) => ({
+                date,
+                list: (list as any[]).map(item => ({
+                    ...item,
+                    goods_id: item.id, // 页面使用 goods_id,但接口是 id
+                    goods_cover_thumb_mid: item.productImage,
+                    show_price: item.memberPrice ?? item.minSellingPrice ?? item.marketPrice,
+                    status: item.productStatus === '1' ? 1 : 0, // 1=有效, 0=失效
+                    browse_time: `${date} 00:00:00` // 补充 browse_time 用于兼容旧逻辑(如果需要)
+                }))
+            }));
 
-        // 转换为所需格式
-        const formattedData = Object.keys(groupedData).map(date => ({
-            date: date,
-            list: groupedData[date]
-        }));
-        formattedData.forEach((item: any) => {
-            item.checked = false;
-            item.list.forEach((subItem: any) => {
-                subItem.checked = false; // 初始化选中状态
+            // 初始化选中状态
+            formattedData.forEach((item: any) => {
+                item.checked = false;
+                item.list.forEach((subItem: any) => {
+                    subItem.checked = false;
+                });
             });
+
+            formattedData.forEach(newItem => {
+                const existingIndex = browseList.value.findIndex((item: any) => item.date === newItem.date);
+                if (existingIndex !== -1) {
+                    // 合并商品列表(去重可选)
+                    const existingIds = new Set(browseList.value[existingIndex].list.map((g: any) => g.goods_id));
+                    const newItemsToAdd = newItem.list.filter((g: any) => !existingIds.has(g.goods_id));
+                    browseList.value[existingIndex].list.push(...newItemsToAdd);
+                } else {
+                    browseList.value.push(newItem);
+                }
+            });
+            loading.value = true;
+        })
+        .catch(() => {
+            loading.value = true;
         });
-        // 合并相同日期的数据
-        formattedData.forEach((newItem: any) => {
-            const existingItemIndex = browseList.value.findIndex((item: any) => item.date === newItem.date);
-            if (existingItemIndex !== -1) {
-                // 合并到已有的日期数据中
-                browseList.value[existingItemIndex].list = [...browseList.value[existingItemIndex].list, ...newItem.list];
-            } else {
-                // 新增日期数据
-                browseList.value.push(newItem);
-            }
-        });
-        mescroll.endSuccess(newArr.length);
-        loading.value = true;
-    }).catch(() => {
-        loading.value = true;
-        mescroll.endErr(); // 请求失败, 结束加载
-    })
-}
+};
 
 // 选择数量
 const checkedNum = computed(() => {
@@ -227,15 +246,16 @@ const deleteBrowseFn = () => {
     if (optionLoading.value) return
     optionLoading.value = true
 
-    const ids: any = []
+    let ids: any = []
     browseList.value.forEach((item: any) => {
         item.list.forEach((subItem: any) => {
-            subItem.checked && ids.push(subItem.goods_id)
+            subItem.checked && ids.push(subItem.id)
         })
     })
-    delBrowse({ goods_ids: ids }).then((res: any) => {
+    ids = ids.join(',')
+    delBrowse(ids).then((res: any) => {
         optionLoading.value = false
-        getMescroll().resetUpScroll();
+        getBrowseListFn()
     })
 }
 
@@ -243,15 +263,15 @@ const clearBrowseFn = () => {
     if (optionLoading.value) return
     optionLoading.value = true
 
-    const ids: any = []
+    let ids: any = []
     browseList.value.forEach((item: any) => {
         item.list.forEach((subItem: any) => {
-            ids.push(subItem.goods_id)
+            ids.push(subItem.id)
         })
     })
-
-    delBrowse({ goods_ids: ids }).then((res: any) => {
-        getMescroll().resetUpScroll();
+    ids = ids.join(',')
+    delBrowse(ids).then((res: any) => {
+        getBrowseListFn()
         optionLoading.value = false
     })
 }
@@ -264,11 +284,11 @@ const handleSelect = () => {
 const confirmFn = (data: any) => {
     create_time.value = data;
     browseList.value = []
-    getMescroll().resetUpScroll();
+    getBrowseListFn()
 }
 
 const toDetail = (data: any) => {
-    redirect({ url: '/addon/shop/pages/goods/detail', param: { goods_id: data.goods_id } })
+    redirect({ url: '/addon/shop/pages/goods/detail', param: { goodsId: data.brandId } })
 }
 </script>
 

+ 15 - 14
src/addon/shop/pages/goods/collect.vue

@@ -22,25 +22,25 @@
                                             </view>
                                             <view  class="flex flex-1" @click="toDetail(item)">
                                                 <view class="relative w-[200rpx] h-[200rpx] flex items-center justify-center rounded-[var(--goods-rounded-big)] overflow-hidden">
-                                                    <u--image radius="var(--goods-rounded-big)" width="200rpx" height="200rpx" :src="img(item.goods_cover_thumb_mid||'')" model="aspectFill">
+                                                    <u--image radius="var(--goods-rounded-big)" width="200rpx" height="200rpx" :src="img(item.productImage)" model="aspectFill">
                                                         <template #error>
                                                             <image class="w-[200rpx] h-[200rpx] rounded-[var(--goods-rounded-big)] overflow-hidden" :src="img('static/resource/images/diy/shop_default.jpg')" mode="aspectFill" />
                                                         </template>
                                                     </u--image>
-                                                    <view v-if="item.status == 0 " class="absolute left-0 top-0 w-[200rpx] h-[200rpx]  leading-[200rpx] text-center " style="background-color: rgba(0,0,0,0.3);">
+                                                    <view v-if="item.productStatus == 0 " class="absolute left-0 top-0 w-[200rpx] h-[200rpx]  leading-[200rpx] text-center " style="background-color: rgba(0,0,0,0.3);">
                                                         <text class="text-[#fff] text-[28rpx]">已失效</text>
                                                     </view>
                                                 </view>
                                                 <view class="flex flex-1 flex-wrap ml-[20rpx]">
                                                     <view class="w-[100%] flex flex-col items-baseline">
-                                                        <view class="text-[#333] text-[28rpx] max-h-[80rpx] leading-[40rpx] multi-hidden font-400">{{ item.goods_name }}</view>
+                                                        <view class="text-[#333] text-[28rpx] max-h-[80rpx] leading-[40rpx] multi-hidden font-400">{{ item.itemName }}</view>
                                                         <view class="box-border max-w-[376rpx] mt-[10rpx] px-[14rpx] h-[36rpx] leading-[36rpx] truncate text-[var(--text-color-light6)] bg-[#F5F5F5] text-[22rpx] rounded-[20rpx]" v-if="item.sku_name">{{ item.sku_name }}</view>
                                                     </view>
                                                     <view class="flex justify-between items-end self-end mt-[10rpx] w-[100%]">
                                                         <view class="text-[var(--price-text-color)] price-font truncate max-w-[200rpx]">
                                                             <text class="text-[24rpx] font-500">¥</text>
-                                                            <text class="text-[40rpx] font-500">{{ parseFloat(item.show_price).toFixed(2).split('.')[0] }}</text>
-                                                            <text class="text-[24rpx] font-500">.{{ parseFloat(item.show_price).toFixed(2).split('.')[1] }}</text>
+                                                            <text class="text-[40rpx] font-500">{{ parseFloat(item.memberPrice).toFixed(2).split('.')[0] }}</text>
+                                                            <text class="text-[24rpx] font-500">.{{ parseFloat(item.memberPrice).toFixed(2).split('.')[1] }}</text>
                                                             <image v-if="item.show_type == 'member_price'" class="max-w-[50rpx] h-[28rpx] ml-[6rpx]" :src="img('addon/shop/VIP.png')" mode="heightFix" />
                                                             <image v-else-if="item.show_type  == 'newcomer_price'" class="max-w-[60rpx] h-[28rpx] ml-[6rpx]" :src="img('addon/shop/newcomer.png')" mode="heightFix" />
                                                             <image v-else-if="item.show_type  == 'discount_price'" class="max-w-[80rpx] h-[28rpx] ml-[6rpx]" :src="img('addon/shop/discount.png')" mode="heightFix" />	
@@ -93,11 +93,11 @@ interface mescrollStructure {
 const getCollectListFn = (mescroll: mescrollStructure) => {
     loading.value = false
     let data: object = {
-        page: mescroll.num,
-        limit: mescroll.size
+        pageSize: mescroll.num,
+        pageNum: mescroll.size
     };
     getCollectList(data).then((res: any) => {
-        let newArr = (res.data.data as Array<Object>);
+        let newArr = (res.rows as Array<Object>);
         //设置列表数据
         if (Number(mescroll.num) === 1) {
             goodsList.value = []; //如果是第一页需手动制空列表
@@ -117,7 +117,7 @@ const getCollectListFn = (mescroll: mescrollStructure) => {
 
 const cartOptions = ref([
     {
-        text: t('delete'),
+        text: '删除',
         style: {
             backgroundColor: '#EF000C',
             width: '100rpx',
@@ -131,7 +131,7 @@ const cartOptions = ref([
 const swipeClick = (data: any) => {
     if (optionLoading.value) return
     optionLoading.value = true
-    cancelCollect({ goods_ids: [data.goods_id] }).then((res: any) => {
+    cancelCollect({ productId: data.id }).then((res: any) => {
         optionLoading.value = false
         getMescroll().resetUpScroll();
     })
@@ -145,11 +145,12 @@ const  deleteCollectFn = () => {
     }
     if (optionLoading.value) return
     optionLoading.value = true
-    const ids: any = []
+    let ids: any = []
     goodsList.value.forEach((item: any) => {
-        if (item.checked) ids.push(item.goods_id)
+        if (item.checked) ids.push(item.id)
     })
-    cancelCollect({ goods_ids: ids }).then((res: any) => {
+    ids = ids.join(',')
+    cancelCollect({ productId: ids }).then((res: any) => {
         optionLoading.value = false
         getMescroll().resetUpScroll();
     })
@@ -175,7 +176,7 @@ const checkedNum = computed(() => {
 }
 
 const toDetail = (data: any) => {
-    redirect({ url: '/addon/shop/pages/goods/detail', param: { goods_id: data.goods_id } })
+    redirect({ url: '/addon/shop/pages/goods/detail', param: { goodsId: data.id } })
 }
 </script>
 

+ 129 - 536
src/addon/shop/pages/order/detail.vue

@@ -2,226 +2,91 @@
     <view :style="themeColor()">
         <view class="bg-[var(--page-bg-color)] min-h-screen overflow-hidden" v-if="!loading">
             <view v-if="!loading" class="pb-20rpx">
-                <view v-if="detail.status_name" class="pl-[40rpx] pr-[35rpx] bg-linear pb-[100rpx]">
+                <view class="pl-[40rpx] pr-[35rpx] bg-linear pb-[100rpx]">
                     <!-- #ifdef MP-WEIXIN -->
                     <top-tabbar :data="topTabbarData" :scrollBool="topTabarObj.getScrollBool()" />
                     <!-- #endif -->
                     <view class="flex justify-between items-center pt-[40rpx]">
                         <view class="flex flex-col">
-                            <image class="w-[28rpx] h-[20rpx] mb-[10rpx] ml-[4rpx]" :src="img('addon/shop/detail/head_001.png')" mode="aspectFit" />
-                            <view class="text-[#fff] text-[36rpx] font-500 leading-[42rpx]">{{ detail.status_name.name }}</view>
+                            <image class="w-[28rpx] h-[20rpx] mb-[10rpx] ml-[4rpx]"
+                                :src="img('https://v6.site.niucloud.com/addon/shop/detail/head_001.png')"
+                                mode="aspectFit" />
+                            <view class="text-[#fff] text-[36rpx] font-500 leading-[42rpx]">{{
+                                getStatusText(detail.orderStatus) }}</view>
                         </view>
                         <view class="flex items-end relative -bottom-[6rpx]">
-                            <image v-if="detail.status == 1" class="w-[160rpx] h-[140rpx]"
-                               :src="img('addon/shop/detail/payment.png')" mode="aspectFit" />
-                            <image v-if="detail.status == 2" class="w-[160rpx] h-[140rpx]"
-                                :src="img('addon/shop/detail/deliver_goods.png')" mode="aspectFit" />
-                            <image v-if="detail.status == 3" class="w-[160rpx] h-[140rpx]"
-                                :src="img('addon/shop/detail/receive.png')" mode="aspectFit" />
-                            <image v-if="detail.status == 5" class="w-[160rpx] h-[140rpx]"
-                                :src="img('addon/shop/detail/complete.png')" mode="aspectFit" />
-                            <image v-if="detail.status == -1" class="w-[160rpx] h-[140rpx]"
-                                :src="img('addon/shop/detail/close.png')" mode="aspectFit" />
+                            <image v-if="detail.orderStatus == 1" class="w-[160rpx] h-[140rpx]"
+                                :src="img('https://v6.site.niucloud.com/addon/shop/detail/payment.png')"
+                                mode="aspectFit" />
+                            <image v-if="detail.orderStatus == 2" class="w-[160rpx] h-[140rpx]"
+                                :src="img('https://v6.site.niucloud.com/addon/shop/detail/deliver_goods.png')"
+                                mode="aspectFit" />
+                            <image v-if="detail.orderStatus == 3" class="w-[160rpx] h-[140rpx]"
+                                :src="img('https://v6.site.niucloud.com/addon/shop/detail/receive.png')"
+                                mode="aspectFit" />
+                            <image v-if="detail.orderStatus == 5" class="w-[160rpx] h-[140rpx]"
+                                :src="img('https://v6.site.niucloud.com/addon/shop/detail/complete.png')"
+                                mode="aspectFit" />
+                            <image v-if="detail.orderStatus == -1" class="w-[160rpx] h-[140rpx]"
+                                :src="img('https://v6.site.niucloud.com/addon/shop/detail/close.png')"
+                                mode="aspectFit" />
                             <image class="w-[8rpx] h-[30rpx] mb-[20rpx]"
-                                :src="img('addon/shop/detail/head_002.png')" mode="aspectFit" />
+                                :src="img('https://v6.site.niucloud.com/addon/shop/detail/head_002.png')"
+                                mode="aspectFit" />
                         </view>
                     </view>
                 </view>
-                <view class="sidebar-margin mt-[-86rpx] card-template" v-if="detail.delivery_type != 'virtual'&& detail.taker_name">
-                    <view v-if="detail.delivery_type == 'express'">
+                <view class="sidebar-margin mt-[-86rpx] card-template">
+                    <view>
                         <view class="text-[#303133] flex">
                             <text class="nc-iconfont nc-icon-dizhiguanliV6xx text-[40rpx] pt-[12rpx] mr-[20rpx]"></text>
                             <view class="flex flex-col">
                                 <view class="text-[30rpx] leading-[38rpx] overflow-hidden">
-                                    <text>{{ detail.taker_name }}</text>
-                                    <text class="ml-[15rpx]">{{ detail.taker_mobile }}</text>
+                                    <text>{{ addressInfo.consignee }}</text>
+                                    <text class="ml-[15rpx]">{{ addressInfo.phone }}</text>
                                 </view>
-                                <view class="mt-[12rpx] text-[24rpx] text-[var(--text-color-light6)] using-hidden leading-[26rpx]">{{ detail.taker_full_address.split(detail.taker_address)[0] }}{{ detail.taker_address }}</view>
+                                <view
+                                    class="mt-[12rpx] text-[24rpx] text-[var(--text-color-light6)] using-hidden leading-[26rpx]">
+                                    {{ addressInfo.provincialCityCountry }}{{ addressInfo.address }}</view>
                             </view>
                         </view>
                     </view>
-                    <view v-if="detail.delivery_type == 'store'">
-                        <view class="flex items-center mb-3">
-                            <view>
-                                <u--image class="overflow-hidden" radius="var(--goods-rounded-mid)" width="100rpx"
-                                          height="100rpx" :src="img(detail.store.store_logo ? detail.store.store_logo : '')" model="aspectFill">
-                                    <template #error>
-                                        <image class="w-[100rpx] h-[100rpx] rounded-[var(--goods-rounded-mid)] overflow-hidden" :src="img('addon/shop/store_default.png')" mode="aspectFill" />
-                                    </template>
-                                </u--image>
-                            </view>
-                            <view class="flex flex-col ml-[20rpx]">
-                                <text class="text-[30rpx] font-500 text-[#303133] mb-[20rpx]">{{ detail.store.store_name }}</text>
-                                <text class="text-[24rpx] text-[var(--text-color-light6)] mb-[14rpx]">{{ detail.store.trade_time }}</text>
-                                <text class="text-[24rpx] text-[var(--text-color-light6)] leading-[1.4]">{{ detail.store.full_address }}</text>
-                            </view>
-                        </view>
-						<view class="justify-between card-template-item" v-if="detail.taker_name">
-						    <view class="text-[28rpx]">姓名</view>
-						    <view class="text-[28rpx]">{{ detail.taker_name }}</view>
-						</view>
-						<view class="justify-between card-template-item" v-if="detail.taker_mobile">
-						    <view class="text-[28rpx]">预留手机</view>
-						    <view class="text-[28rpx]">{{ detail.taker_mobile }}</view>
-						</view>
-						<view class="justify-between card-template-item" v-if="detail.buyer_ask_delivery_time">
-						    <view class="text-[28rpx]">提货时间</view>
-						    <view class="text-[28rpx]">{{ detail.buyer_ask_delivery_time }}</view>
-						</view>
-                    </view>
-                    <view class="flex" v-if="detail.delivery_type == 'local_delivery'">
-                        <text @click="getAddress"
-                              class="nc-iconfont nc-icon-dizhiguanliV6xx text-[40rpx] pt-[12rpx] mr-[20rpx]"></text>
-                        <view class="flex flex-col">
-                            <view class="flex leading-[38rpx] overflow-hidden">
-                                <text class="text-[30rpx]">{{ detail.taker_name }}</text>
-                                <text class="text-[30rpx] ml-[15rpx]">{{ detail.taker_mobile }}</text>
-                            </view>
-                            <text class="text-[24rpx] mt-[12rpx] leading-[26rpx]">{{ detail.taker_full_address }}</text>
-                        </view>
-						
-                    </view>
                 </view>
-				<!-- 自提核销-->
-				<template v-if="isShowSelfPickup">
-				    <view class="sidebar-margin  mt-[var(--top-m)] card-template" v-if="selfPickupInfo && selfPickupInfo.length">
-				        <swiper class="h-[450rpx]" circular indicator-dots="true" v-if="selfPickupInfo.length > 1">
-				            <swiper-item v-for="(item,index) in selfPickupInfo" :key="index">
-				                <view class="flex flex-col items-center justify-center">
-				                    <image :src="item.qrcode" class="w-[300rpx] h-[auto]" mode="widthFix" />
-				                </view>
-				                <view class="flex items-center justify-center mt-[30rpx]">
-				                    <text class="text-[28rpx] font-500">{{ item.code }}</text>
-				                    <text class="text-[var(--text-color-light6)] text-[24rpx] ml-[10rpx] border-[2rpx] border-solid border-[#666] bg-[#f7f7f7] px-[12rpx] py-[6rpx] rounded" @click="copy(item.code)">复制</text>
-				                </view>
-				            </swiper-item>
-				        </swiper>
-				        <template v-else>
-				            <view class="flex flex-col items-center justify-center">
-				                <image :src="selfPickupInfo[0].qrcode" class="w-[300rpx] h-[auto]" mode="widthFix" />
-				            </view>
-				            <view class="flex items-center justify-center mt-[30rpx]">
-				                <text class="text-[28rpx] font-500">{{ selfPickupInfo[0].code }}</text>
-				                <text class="text-[var(--text-color-light6)] text-[24rpx] ml-[10rpx] border-[2rpx] border-solid border-[#666] bg-[#f7f7f7] px-[12rpx] py-[6rpx] rounded" @click="copy(selfPickupInfo[0].code)">复制</text>
-				            </view>
-				        </template>
-				
-				    </view>
-				</template>
                 <view class="sidebar-margin card-template p-[0] py-[var(--pad-top-m)] overflow-hidden"
-                      :class="{'pb-[var(--pad-top-m)]': detail.gift_goods.length <= 0}"
-                      :style="detail.delivery_type == 'virtual' || detail.taker_name=='' ? 'margin-top: -86rpx' : 'margin-top: 20rpx'">
-                    <view v-for="(goodsItem, goodsIndex) in detail.goods" :key="goodsIndex"
-                          class="px-[var(--pad-sidebar-m)]">
+                    :class="{ 'pb-[var(--pad-top-m)]': detail.orderProductList.length <= 0 }"
+                    :style="detail.delivery_type == 'virtual' || detail.taker_name == '' ? 'margin-top: -86rpx' : 'margin-top: 20rpx'">
+                    <view v-for="(goodsItem, goodsIndex) in detail.orderProductList" :key="goodsIndex"
+                        class="px-[var(--pad-sidebar-m)]">
                         <view class="order-goods-item flex justify-between flex-wrap mb-[20rpx]">
-                            <view class="w-[150rpx] h-[150rpx] rounded-[var(--goods-rounded-big)] overflow-hidden" @click="goodsEvent(goodsItem.goods_id)">
+                            <view class="w-[150rpx] h-[150rpx] rounded-[var(--goods-rounded-big)] overflow-hidden"
+                                @click="goodsEvent(goodsItem.productId)">
                                 <u--image class="overflow-hidden" radius="var(--goods-rounded-big)" width="150rpx"
-                                          height="150rpx" :src="img(goodsItem.goods_image_thumb_small ? goodsItem.goods_image_thumb_small : '')" model="aspectFill">
+                                    height="150rpx" :src="img(goodsItem.productImage)" model="aspectFill">
                                     <template #error>
-                                        <image class="w-[150rpx] h-[150rpx] rounded-[var(--goods-rounded-big)] overflow-hidden" :src="img('static/resource/images/diy/shop_default.jpg')" mode="aspectFill"/>
+                                        <image
+                                            class="w-[150rpx] h-[150rpx] rounded-[var(--goods-rounded-big)] overflow-hidden"
+                                            :src="img('static/resource/images/diy/shop_default.jpg')"
+                                            mode="aspectFill" />
                                     </template>
                                 </u--image>
                             </view>
 
                             <view class="ml-[20rpx] flex flex-1 flex-col justify-between">
                                 <view>
-                                    <view class="text-[28rpx] max-w-[490rpx] truncate leading-[40rpx] text-[#333]">{{ goodsItem.goods_name }}</view>
-                                    <view v-if="goodsItem.sku_name">
-                                        <view class="text-[22rpx] mt-[14rpx] text-[var(--text-color-light9)] truncate max-w-[490rpx] leading-[28rpx]">{{ goodsItem.sku_name }}</view>
+                                    <view class="text-[28rpx] max-w-[490rpx] truncate leading-[40rpx] text-[#333]">{{
+                                        goodsItem.productName }}
                                     </view>
                                 </view>
-                                <view v-if="goodsItem.manjian_info && Object.keys(goodsItem.manjian_info).length"
-                                      class="flex items-center mt-[10rpx] mb-[auto]"
-                                      @click.stop="manjianOpenFn(goodsItem.manjian_info)">
-                                    <view class="bg-[var(--primary-color-light)] text-[var(--primary-color)] rounded-[6rpx] text-[20rpx] flex items-center justify-center w-[88rpx] h-[36rpx] mr-[6rpx]">满减送</view>
-                                    <text class="text-[22rpx] text-[#999]">{{ goodsItem.manjian_info.manjian_name }}
-                                    </text>
-                                </view>
+
                                 <view class="flex justify-between items-baseline leading-[28rpx] text-[#333]">
                                     <view class="price-font">
-                                        <view class="text-[40rpx] inline-block"
-                                              v-if="goodsItem.extend && parseFloat(goodsItem.extend.point) > 0">
-                                            <text class="text-[40rpx] font-200">{{ goodsItem.extend.point }}</text>
-                                            <text class="text-[32rpx] ml-[4rpx]">积分</text>
-                                        </view>
-                                        <text class="mx-[4rpx] text-[32rpx]" v-if="parseFloat(goodsItem.price) && goodsItem.extend && parseFloat(goodsItem.extend.point) > 0">+</text>
-                                        <template v-if="parseFloat(goodsItem.price) && goodsItem.extend && parseFloat(goodsItem.extend.point) > 0">
-                                            <text class="text-[40rpx] font-200">{{ parseFloat(goodsItem.price).toFixed(2) }}</text>
-                                            <text class="text-[32rpx] ml-[4rpx]">元</text>
-                                        </template>
-                                        <template v-if="goodsItem.extend && goodsItem.extend.is_newcomer">
-                                            <text class="text-[24rpx]">¥</text>
-                                            <text class="text-[40rpx] font-500">{{ parseFloat(goodsItem.price).toFixed(2).split('.')[0] }}</text>
-                                            <text class="text-[24rpx] font-500">.{{ parseFloat(goodsItem.price).toFixed(2).split('.')[1] }}</text>
-                                        </template>
-                                        <template v-if="goodsItem.extend && goodsItem.extend.is_impulse_buy">
-                                            <text class="text-[24rpx]">¥</text>
-                                            <text class="text-[40rpx] font-500">{{ parseFloat(goodsItem.goods_money).toFixed(2).split('.')[0] }}</text>
-                                            <text class="text-[24rpx] font-500">.{{ parseFloat(goodsItem.goods_money).toFixed(2).split('.')[1] }}</text>
-                                        </template>
-                                        <template v-if="!goodsItem.extend">
-                                            <text class="text-[24rpx]">¥</text>
-                                            <text class="text-[40rpx] font-500">{{ parseFloat(goodsItem.price).toFixed(2).split('.')[0] }}</text>
-                                            <text class="text-[24rpx] font-500">.{{ parseFloat(goodsItem.price).toFixed(2).split('.')[1] }}</text>
-                                        </template>
-                                    </view>
-                                    <text class="text-right text-[26rpx]">x{{ goodsItem.num }}</text>
-                                </view>
-                            </view>
-                        </view>
-                        <view class="flex items-center box-border mt-[8rpx]"
-                              v-if="goodsItem.extend && goodsItem.extend.is_impulse_buy && goodsItem.num>1">
-                            <image class="h-[24rpx] w-[56rpx]" :src="img('addon/shop/impulse_buy.png')" mode="heightFix" />
-                            <view class="text-[24rpx] text-[#FFB000] leading-[34rpx] ml-[8rpx]">
-                                {{ goodsItem.impulse_buy_tips }}
-                            </view>
-                        </view>
-                        <view class="flex items-center box-border mt-[8rpx]"
-                              v-if="goodsItem.extend && goodsItem.extend.is_newcomer && goodsItem.num>1">
-                            <image class="h-[24rpx] w-[56rpx]" :src="img('addon/shop/newcomer.png')" mode="heightFix" />
-                            <view class="text-[24rpx] text-[#FFB000] leading-[34rpx] ml-[8rpx]">
-                                第1{{ goodsItem.unit }},¥{{ parseFloat(goodsItem.extend.newcomer_price).toFixed(2) }}/{{ goodsItem.unit }};第{{ goodsItem.num > 2 ? '2~' + goodsItem.num : '2' }}{{ goodsItem.unit }},¥{{ parseFloat(goodsItem.price).toFixed(2) }}/{{ goodsItem.unit }}
-                            </view>
-                        </view>
-                        <view class="flex justify-end w-[100%] mt-[30rpx] mb-[20rpx]"
-                              v-if="(goodsItem.status != '1') || (goodsItem.is_enable_refund == 1)">
-                            <view v-if="goodsItem.status != '1'"
-                                  class="order-grey-hollow-btn"
-                                  @click="redirect({ url: '/addon/shop/pages/refund/detail', param: { order_refund_no : goodsItem.order_refund_no } })">查看退款</view>
-                            <view v-else-if="goodsItem.is_enable_refund == 1"
-                                  class="order-grey-hollow-btn ml-[20rpx]"
-                                  @click="applyRefund(goodsItem.order_goods_id)">申请退款</view>
-                        </view>
-
-                        <!-- 商品的万能表单信息 -->
-                        <view :class="{'diy-form-wrap' : goodsDiyFormData.length }" v-if="goodsItem.form_record_id">
-                            <diy-form-detail :record_id="goodsItem.form_record_id" completeLayout="style-2" @callback="getGoodsDiyFormDetailCallback" />
-                        </view>
-                    </view>
-                    <view class="pt-[20rpx] bg-[#f9f9f9] mt-[20rpx] mx-[var(--pad-sidebar-m)] rounded-[var(--rounded-big)]"
-                        v-if="detail.gift_goods.length">
-                        <view class="order-goods-item flex justify-between flex-wrap px-[var(--pad-sidebar-m)] pb-[20rpx]"
-                            v-for="(goodsItem, goodsIndex) in detail.gift_goods" :key="goodsIndex">
-                            <view class="w-[120rpx] h-[120rpx] rounded-[var(--goods-rounded-big)] overflow-hidden" @click="goodsEvent(goodsItem.goods_id)">
-                                <u--image class="overflow-hidden" radius="var(--goods-rounded-big)" width="120rpx" height="120rpx" :src="img(goodsItem.goods_image_thumb_small ? goodsItem.goods_image_thumb_small : '')" model="aspectFill">
-                                    <template #error>
-                                        <image class="w-[120rpx] h-[120rpx] rounded-[var(--goods-rounded-big)] overflow-hidden" :src="img('static/resource/images/diy/shop_default.jpg')" mode="aspectFill" />
-                                    </template>
-                                </u--image>
-                            </view>
-                            <view class="ml-[16rpx] py-[8rpx] flex flex-1 flex-col justify-between">
-                                <view class="flex items-center">
-                                    <view class="bg-[var(--primary-color-light)] whitespace-nowrap text-[var(--primary-color)] rounded-[6rpx] text-[22rpx] flex items-center justify-center w-[64rpx] h-[34rpx] mr-[6rpx]">
-                                        赠品
-                                    </view>
-                                    <view class="text-[26rpx] max-w-[400rpx] truncate leading-[40rpx] text-[#333]">{{ goodsItem.goods_name }}</view>
-                                </view>
-                                <view class="flex items-center">
-                                    <view v-if="goodsItem.sku_name" class="text-[22rpx] text-[var(--text-color-light9)] truncate max-w-[400rpx] leading-[28rpx]">{{ goodsItem.sku_name }}</view>
-                                    <view class="ml-[auto] font-400 text-[26rpx] text-[#303133]">
-                                        <text>x</text>
-                                        <text>{{ goodsItem.num }}</text>
+                                        <text class="text-[24rpx]">¥</text>
+                                        <text class="text-[40rpx] font-500">{{
+                                            parseFloat(goodsItem.orderPrice).toFixed(2).split('.')[0] }}</text>
+                                        <text class="text-[24rpx] font-500">.{{
+                                            parseFloat(goodsItem.orderPrice).toFixed(2).split('.')[1] }}</text>
                                     </view>
+                                    <text class="text-right text-[26rpx]">x{{ goodsItem.orderQuantity }}</text>
                                 </view>
                             </view>
                         </view>
@@ -229,227 +94,107 @@
                 </view>
                 <view class="sidebar-margin mt-[var(--top-m)] card-template">
                     <view class="justify-between card-template-item">
-                        <view class="text-[28rpx]">{{ t('orderNo') }}</view>
+                        <view class="text-[28rpx]">订单号</view>
                         <view class="flex items-center text-[28rpx]">
-                            <text>{{ detail.order_no }}</text>
+                            <text>{{ detail.orderNo }}</text>
                             <text class="w-[2rpx] h-[20rpx] bg-[#999] mx-[10rpx]"></text>
-                            <text class="text-[var(--primary-color)]" @click="copy(detail.order_no)">复制</text>
+                            <text class="text-[var(--primary-color)]" @click="copy(detail.orderNo)">复制</text>
                         </view>
                     </view>
-                    <view v-if="detail.out_trade_no" class="justify-between card-template-item">
-                        <view class="text-[28rpx]">{{ t('orderTradeNo') }}</view>
-                        <view class="text-[28rpx]">{{ detail.out_trade_no }}</view>
-                    </view>
                     <view class="justify-between card-template-item">
-                        <view class="text-[28rpx]">{{ t('createTime') }}</view>
-                        <view class="text-[28rpx]">{{ detail.create_time }}</view>
-                    </view>
-					<view class="justify-between card-template-item" v-if="detail.member_remark">
-					    <view class="text-[28rpx] w-[180rpx]">{{ t('memberRemark') }}</view>
-					    <view class="text-[28rpx] flex-1 text-right">{{ detail.member_remark }}</view>
-					</view>
-                    <view class=" card-template-item justify-between">
-                        <view class="text-[28rpx]">{{ t('deliveryType') }}</view>
-                        <view class="text-[28rpx]">{{ detail.delivery_type_name }}<text v-if="detail.order_delivery && detail.order_delivery[0]?.third_delivery_name && detail.delivery_type == 'local_delivery'&& detail.status_name.status!=2 && detail.status_name.status!=1 ">-{{detail.order_delivery[0].third_delivery_name}}</text></view>
+                        <view class="text-[28rpx]">创建时间</view>
+                        <view class="text-[28rpx]">{{ detail.orderTime }}</view>
                     </view>
-					<view class=" card-template-item justify-between" v-if="detail.delivery_type == 'local_delivery' &&  detail.buyer_ask_delivery_time">
-					    <view class="text-[28rpx]">预约配送时间</view>
-					    <view class="text-[28rpx]">{{ detail.buyer_ask_delivery_time }}</view>
-					</view>
-                    <view v-if="detail.pay" class="card-template-item justify-between" :class="{ '!mb-[18rpx]' : detail.member_id !== detail.pay.main_id && detail.pay.status == 2 }">
-                        <view class="text-[28rpx]">{{ t('payTypeName') }}</view>
-                        <view class="text-[28rpx]">{{ detail.pay.type_name }}</view>
+                    <view class="justify-between card-template-item">
+                        <view class="text-[28rpx]">跟新时间</view>
+                        <view class="text-[28rpx]">{{ detail.updateTime }}</view>
                     </view>
-                    <view v-if="detail.pay && detail.member_id !== detail.pay.main_id && detail.pay.status == 2" class="card-template-item justify-end">
-                        <view class="friend-pay relative px-[20rpx] py-[12rpx] bg-[#F2F2F2] rounded-[10rpx] flex items-center">
-                            <u-avatar :src="img(detail.pay.pay_member_headimg)" size="20" leftIcon="none" :default-url="img('static/resource/images/default_headimg.png')" />
-                            <text class="ml-[14rpx] text-[24rpx] using-hidden">{{ detail.pay.pay_member }}{{ t('helpPay') }}</text>
+                </view>
+                <view class="sidebar-margin mt-[var(--top-m)] card-template">
+                    <view class="justify-between card-template-item">
+                        <view class="text-[28rpx]">配送时间</view>
+                        <view class="text-[28rpx]">{{ detail.expectedDeliveryTime || '-'}}
                         </view>
                     </view>
-                    <view v-if="detail.pay" class=" card-template-item justify-between">
-                        <view class="text-[28rpx]">{{ t('payTime') }}</view>
-                        <view class="text-[28rpx]">{{ detail.pay.pay_time }}</view>
+                    <view class="justify-between card-template-item">
+                        <view class="text-[28rpx]">采购事由</view>
+                        <view class="text-[28rpx]">{{ detail.purchaseReason || '-' }}
+                        </view>
                     </view>
-
-                </view>
-				<view class="sidebar-margin mt-[var(--top-m)] card-template" v-if="detail.order_delivery && detail.order_delivery[0] && detail.order_delivery[0].third_delivery_info && detail.delivery_type == 'local_delivery' && detail.status_name.status!=2 && detail.status_name.status!=1 ">
-				    <view v-if="detail.order_delivery[0].third_delivery_info?.transporter_name" class="justify-between card-template-item">
-				        <view class="text-[28rpx]">配送员</view>
-				        <view class="text-[28rpx]">{{ detail.order_delivery[0].third_delivery_info?.transporter_name }}</view>
-				    </view>
-				    <view v-if="detail.order_delivery[0].third_delivery_info?.transporter_phone" class="justify-between card-template-item">
-				        <view class="text-[28rpx]">配送员手机号</view>
-				        <view class="text-[28rpx]">{{ detail.order_delivery[0].third_delivery_info?.transporter_phone }}</view>
-				    </view>
-					<view v-if="detail.order_delivery[0].third_delivery_info?.status_name" class="justify-between card-template-item">
-					    <view class="text-[28rpx]">配送状态</view>
-					    <view class="text-[28rpx]">{{ detail.order_delivery[0].third_delivery_info?.status_name }}</view>
-					</view>
-				    <view v-if="detail.order_delivery[0].third_delivery_name" class=" card-template-item justify-between">
-				        <view class="text-[28rpx]">{{ t('deliveryType') }}</view>
-				        <view class="text-[28rpx]"><text v-if="detail.delivery_type == 'local_delivery'&& detail.status_name.status!=2 && detail.status_name.status!=1 ">{{detail.order_delivery[0].third_delivery_name}}</text></view>
-				    </view>
-				</view>
-                <!-- 核销码 -->
-                <template v-if="isShowVerify">
-                    <view class="sidebar-margin  mt-[var(--top-m)] card-template" v-if="verifyInfo && verifyInfo.length">
-                        <swiper class="h-[450rpx]" circular indicator-dots="true" v-if="verifyInfo.length > 1">
-                            <swiper-item v-for="(item,index) in verifyInfo" :key="index">
-                                <view class="flex flex-col items-center justify-center">
-                                    <image :src="item.qrcode" class="w-[300rpx] h-[auto]" mode="widthFix" />
-                                </view>
-                                <view class="flex items-center justify-center mt-[30rpx]">
-                                    <text class="text-[28rpx] font-500">{{ item.code }}</text>
-                                    <text class="text-[var(--text-color-light6)] text-[24rpx] ml-[10rpx] border-[2rpx] border-solid border-[#666] bg-[#f7f7f7] px-[12rpx] py-[6rpx] rounded" @click="copy(item.code)">复制</text>
-                                </view>
-                            </swiper-item>
-                        </swiper>
-                        <template v-else>
-                            <view class="flex flex-col items-center justify-center">
-                                <image :src="verifyInfo[0].qrcode" class="w-[300rpx] h-[auto]" mode="widthFix" />
-                            </view>
-                            <view class="flex items-center justify-center mt-[30rpx]">
-                                <text class="text-[28rpx] font-500">{{ verifyInfo[0].code }}</text>
-                                <text class="text-[var(--text-color-light6)] text-[24rpx] ml-[10rpx] border-[2rpx] border-solid border-[#666] bg-[#f7f7f7] px-[12rpx] py-[6rpx] rounded" @click="copy(verifyInfo[0].code)">复制</text>
-                            </view>
-                        </template>
-
+                    <view class="justify-between card-template-item">
+                        <view class="text-[28rpx]">费用类型</view>
+                        <view class="text-[28rpx]">日常物资采购</view>
                     </view>
-                    <view class="sidebar-margin mt-[var(--top-m)] card-template">
-                        <view class="title">核销信息</view>
-                        <view class="card-template-item justify-between">
-                            <view class="text-[28rpx]">核销次数</view>
-                            <view class="price-font font-500 text-[28rpx]">{{ '剩余' + (verifyGoodsData.num - verifyGoodsData.verify_count) + '次' }}/{{ '共' + verifyGoodsData.num + '次' }}</view>
-                        </view>
-                        <view class="card-template-item justify-between">
-                            <view class="text-[28rpx]">有效期</view>
-                            <view class="price-font font-500 text-[28rpx]">{{ verifyGoodsData.verify_expire_time ? verifyGoodsData.verify_expire_time : '永久' }}</view>
-                        </view>
+                    <view class=" card-template-item justify-between">
+                        <view class="text-[28rpx]">订单备注</view>
+                        <view class="text-[28rpx]">{{ detail.remark || '-' }}</view>
                     </view>
-                </template>
-
-                <!-- 待付款订单的万能表单信息 -->
-                <view :class="{'sidebar-margin mt-[var(--top-m)] card-template' : orderDiyFormData.length }"
-                      v-if="detail.form_record_id">
-                    <diy-form-detail :record_id="detail.form_record_id" completeLayout="style-2" @callback="getOrderDiyFormDetailCallback" />
                 </view>
                 <view class="sidebar-margin mt-[var(--top-m)] card-template">
                     <view class="card-template-item justify-between">
-                        <view class="text-[28rpx]">{{ t('goodsMoney') }}</view>
+                        <view class="text-[28rpx]">商品金额</view>
                         <view class="price-font font-500">
-                            <text v-if="parseFloat(detail.point) > 0" class="text-[28rpx]">{{ detail.point }}积分</text>
-                            <text v-if="parseFloat(detail.point) > 0 && parseFloat(detail.goods_money)" class="mx-[4rpx] text-[28rpx]">+</text>
-                            <template v-if="parseFloat(detail.goods_money) || !parseFloat(detail.point)">
+                            <template v-if="parseFloat(detail.totalAmount)">
                                 <text class="text-[28rpx]">¥</text>
-                                <text class="text-[28rpx]">{{ parseFloat(detail.goods_money).toFixed(2).split('.')[0] }}</text>
-                                <text class="text-[28rpx]">.{{ parseFloat(detail.goods_money).toFixed(2).split('.')[1] }}</text>
+                                <text class="text-[28rpx]">{{ parseFloat(detail.totalAmount).toFixed(2).split('.')[0]
+                                }}</text>
+                                <text class="text-[28rpx]">.{{ parseFloat(detail.totalAmount).toFixed(2).split('.')[1]
+                                }}</text>
                             </template>
                         </view>
                     </view>
-                    <view class=" card-template-item justify-between" v-if="parseFloat(detail.delivery_money)">
-                        <view class="text-[28rpx]">{{ t('deliveryMoney') }}</view>
-                        <view class="price-font font-500 text-[28rpx]">¥{{ parseFloat(detail.delivery_money).toFixed(2) }}</view>
-                    </view>
-                    <!-- <view class=" card-template-item justify-between">
-                      <view class="text-[28rpx]">{{ t('discountMoney') }}</view>
-                      <view class="price-font font-500 text-[28rpx]">
-                        -¥{{ parseFloat(detail.discount_money).toFixed(2) }}
-                      </view>
-                    </view> -->
-                    <view class=" card-template-item justify-between" v-if="parseFloat(detail.coupon_money)">
-                        <view class="text-[28rpx]">优惠券优惠</view>
-                        <view class="price-font font-500 text-[28rpx]">-¥{{ parseFloat(detail.coupon_money).toFixed(2) }}</view>
-                    </view>
-                    <view class=" card-template-item justify-between" v-if="parseFloat(detail.manjian_discount_money)">
-                        <view class="text-[28rpx]">满减优惠</view>
-                        <view class="price-font font-500 text-[28rpx]">-¥{{ parseFloat(detail.manjian_discount_money).toFixed(2) }}</view>
+                    <view class=" card-template-item justify-between">
+                        <view class="text-[28rpx]">配送费用</view>
+                        <view class="price-font font-500 text-[28rpx]">¥{{ detail.shippingFee }}</view>
                     </view>
                     <view class=" card-template-item justify-between items-baseline">
-                        <view class="text-[28rpx]">{{ t('orderMoney') }}</view>
+                        <view class="text-[28rpx]">实付金额</view>
                         <view class="text-[var(--price-text-color)] price-font">
-                            <text v-if="parseFloat(detail.point) > 0" class="text-[28rpx]">{{ detail.point }}积分</text>
-                            <text v-if="parseFloat(detail.point) > 0 && parseFloat(detail.order_money)" class="mx-[4rpx] text-[28rpx]">+</text>
-                            <text v-if="parseFloat(detail.order_money) || !parseFloat(detail.point)" class="text-[28rpx]">¥{{ parseFloat(detail.order_money).toFixed(2) }}</text>
+                            <text v-if="parseFloat(detail.order_money) || !parseFloat(detail.point)"
+                                class="text-[28rpx]">¥{{
+                                    parseFloat(detail.totalAmount).toFixed(2) }}</text>
                         </view>
                     </view>
                 </view>
 
-                <view class="flex z-2 justify-between items-center bg-[#fff] fixed left-0 right-0 bottom-0 min-h-[100rpx] pl-[30rpx] pr-[20rpx] flex-wrap  pb-ios">
-                    <view class="flex">
-                        <!-- <view class="flex  mr-[34rpx] flex-col justify-center items-center"
-                              @click="orderBtnFn('index')">
-                            <view class="nc-iconfont nc-icon-shouyeV6xx11 text-[36rpx]"></view>
-                            <text class="text-[20rpx] mt-[10rpx]">{{ t('index') }}</text>
-                        </view> -->
-                        <!-- #ifdef MP-WEIXIN -->
-                        <!-- <view>
-                            <nc-contact :send-message-title="sendMessageTitle" :send-message-path="sendMessagePath" :send-message-img="sendMessageImg">
-                                <view class="flex flex-col justify-center items-center">
-                                    <view class="w-[36rpx] h-[36rpx] flex-center">
-                                        <text class="nc-iconfont nc-icon-kefuV6xx-1 text-[34rpx]"></text>
-                                    </view>
-                                    <text class="text-[20rpx] mt-[10rpx]">客服</text>
-                                </view>
-                            </nc-contact>
-                        </view> -->
-                        <!-- #endif -->
-                    </view>
+                <view
+                    class="flex z-2 justify-between items-center bg-[#fff] fixed left-0 right-0 bottom-0 min-h-[100rpx] pl-[30rpx] pr-[20rpx] flex-wrap  pb-ios">
                     <view class="flex justify-end">
-                        <view @click="orderBtnFn('index')" class="order-grey-hollow-btn ml-[20rpx]">
-                              {{ t('index') }}
-                        </view>
-                          <!-- #ifdef MP-WEIXIN -->
-                          <view>
-                            <nc-contact :send-message-title="sendMessageTitle" :send-message-path="sendMessagePath" :send-message-img="sendMessageImg">
-                                <view class="order-grey-hollow-btn ml-[20rpx]">
-                                    客服
-                                </view>
-                            </nc-contact>
+                        <view @click="orderBtnFn('index')" class="order-grey-hollow-btn ml-[20rpx]">首页</view>
+                        <view
+                            class="px-[35rpx]  box-border  text-[24rpx]  h-[60rpx] flex-center text-center border-[2rpx] border-solid border-[#ccc] rounded-full ml-[20rpx] text-[var(--text-color-light3)]"
+                            @click="orderBtnFn('logistics')" v-if="detail.isNeedCheck == '0' && detail.checkStatus != '0'">查看物流
                         </view>
-                        <!-- #endif -->
-                        <view class="px-[35rpx]  box-border  text-[24rpx]  h-[60rpx] flex-center text-center border-[2rpx] border-solid border-[#ccc] rounded-full ml-[20rpx] text-[var(--text-color-light3)]"
-                            @click="orderBtnFn('logistics')" v-if="showLogistics(detail)">{{ t('logisticsTracking') }}</view>
-                        <view class="order-grey-hollow-btn ml-[20rpx]" v-if="detail.status == 1" @click="orderBtnFn('close')">{{ t('orderClose') }}</view>
-                        <view class="px-[35rpx] box-border  text-[24rpx] h-[60rpx] flex-center text-center text-[#fff] primary-btn-bg rounded-full ml-[20rpx]" v-if="detail.status == 1" @click="orderBtnFn('pay')">{{ t('topay') }}</view>
-                        <view v-if="detail.status == 3" class="px-[35rpx] box-border  text-[24rpx] h-[60rpx] flex-center text-center  text-[#fff]  primary-btn-bg rounded-full ml-[20rpx]" @click="orderBtnFn('finish')">{{ t('orderFinish') }}</view>
-                        <template v-if="detail.status == 5 && isShowEvaluate">
-                            <view v-if="detail.is_evaluate == 1 || (detail.is_evaluate != 1 && evaluateConfig.is_evaluate == 1)"
-                                class="px-[35rpx] box-border text-[24rpx]  h-[60rpx] flex-center border-[2rpx] border-solid border-[#ccc] rounded-full ml-[20rpx] !text-[var(--text-color-light3)]"
-                                @click="orderBtnFn('evaluate')">{{ detail.is_evaluate == 1 ? t('selectedEvaluate') : t('evaluate') }}</view>
-                        </template>
+                        <view class="order-grey-hollow-btn ml-[20rpx]" v-if="detail.orderStatus == 1 ||detail.orderStatus == 0 "
+                            @click="orderBtnFn('close')">取消订单</view>
+                        <view
+                            class="px-[35rpx] box-border  text-[24rpx] h-[60rpx] flex-center text-center text-[#fff] primary-btn-bg rounded-full ml-[20rpx]"
+                            v-if="detail.status == 1" @click="orderBtnFn('pay')">去支付</view>
+                        <view v-if="detail.orderStatus == 4"
+                            class="px-[35rpx] box-border  text-[24rpx] h-[60rpx] flex-center text-center  text-[#fff]  primary-btn-bg rounded-full ml-[20rpx]"
+                            @click="orderBtnFn('finish')">确认收货</view>
                     </view>
                 </view>
             </view>
             <view class="tab-bar-placeholder"></view>
             <pay ref="payRef" @close="payClose"></pay>
             <logistics-tracking ref="materialRef"></logistics-tracking>
-            <!-- 满减 -->
-            <ns-goods-manjian ref="manjianShowRef"></ns-goods-manjian>
         </view>
 
         <loading-page :loading="loading"></loading-page>
-
-        <!-- #ifdef MP-WEIXIN -->
-        <!-- 小程序隐私协议 -->
-        <wx-privacy-popup ref="wxPrivacyPopupRef"></wx-privacy-popup>
-        <!-- #endif -->
     </view>
 </template>
 
 <script setup lang="ts">
 import { ref, reactive, computed, nextTick } from 'vue';
 import { onLoad } from '@dcloudio/uni-app'
-import { t } from '@/locale'
 import { img, redirect, copy, goback } from '@/utils/common';
-import { getShopOrderDetail, orderClose, orderFinish } from '@/addon/shop/api/order';
-import { getEvaluateConfig } from '@/addon/shop/api/shop';
+import { getShopOrderDetail, orderClose, orderFinish, getAddressInfo } from '@/addon/shop/api/order';
 import { getVerifyCode } from '@/app/api/verify';
 import logisticsTracking from '@/addon/shop/pages/order/components/logistics-tracking/logistics-tracking.vue'
 import useConfigStore from "@/stores/config";
-import nsGoodsManjian from '@/addon/shop/components/ns-goods-manjian/ns-goods-manjian.vue';
 import { topTabar } from '@/utils/topTabbar';
 import { cloneDeep } from 'lodash-es';
-import diyFormDetail from '@/addon/components/diy-form-detail/index.vue'
 
 /********* 自定义头部 - start ***********/
 const topTabarObj = topTabar()
@@ -457,17 +202,11 @@ let topTabbarData = topTabarObj.setTopTabbarParam({ title: '订单详情' })
 /********* 自定义头部 - end ***********/
 
 const detail: any = ref<Object>({});
+const addressInfo = ref<any>({});
 const loading = ref<boolean>(true);
-const type = ref('')
 const orderId = ref('')
-const evaluateConfig = ref<Object>({});
-const isShowEvaluate = ref(true)
 const manjianShowRef: any = ref(null); //满减送
 
-const sendMessageTitle = ref('')
-const sendMessagePath = ref('')
-const sendMessageImg = ref('')
-
 const wxPrivacyPopupRef: any = ref(null)
 
 onLoad((option: any) => {
@@ -488,62 +227,21 @@ onLoad((option: any) => {
     }
 });
 
-getEvaluateConfig().then(({ data }) => {
-    evaluateConfig.value = data
-})
-
 const orderDetailFn = (id: any) => {
     loading.value = true;
     getShopOrderDetail(id).then((res: any) => {
         detail.value = res.data;
-        if (res.data.order_goods && res.data.order_goods.length && isShowVerify.value) {
-            let obj: any = {};
-            obj.order_goods_id = res.data.order_goods[0].order_goods_id
-            getVerifyCodeFn(obj);
-        }
-		if (res.data.order_goods && res.data.order_goods.length && isShowSelfPickup.value) {
-		    let obj: any = {};
-		    obj.order_id = res.data.order_id
-		    getSelfPickupCodeFn(obj);
-		}
 
-        detail.value.goods = []; //购买商品
-        detail.value.gift_goods = []; //赠品
-        detail.value.order_goods.forEach((item, index) => {
-            if (item.is_gift) {
-                detail.value.gift_goods.push(item);
-            } else {
-                detail.value.goods.push(item);
-            }
+        getAddressInfo(res.data.shippingAddressId).then((res1: any) => {
+            addressInfo.value = res1.data
         })
 
-        let evaluateCount = 0;
-        for (let i = 0; i < detail.value.order_goods.length; i++) {
-            if (detail.value.order_goods[i].status != 1) {
-                evaluateCount++;
-            }
-        }
-
-        if (evaluateCount == detail.value.order_goods.length) {
-            isShowEvaluate.value = false;
-        }
-        sendMessageTitle.value = detail.value.order_goods[0].goods_name
-        sendMessageImg.value = img(detail.value.order_goods[0].goods_image_thumb_small || '')
         loading.value = false;
     }).catch(() => {
         loading.value = false;
     })
 }
 
-// 满减
-const manjianOpenFn = (data: any) => {
-    let obj = {};
-    obj.condition_type = cloneDeep(data).condition_type;
-    obj.rule_json = [cloneDeep(data).rule];
-    obj.name = cloneDeep(data).manjian_name;
-    manjianShowRef.value.open(obj);
-}
-
 //关闭订单
 const close = (item: any) => {
     uni.showModal({
@@ -614,28 +312,19 @@ const finish = (item: any) => {
 }
 
 const goodsEvent = (id: number) => {
-    if (detail.value.activity_type == 'exchange') {
-        redirect({
-            url: '/addon/shop/pages/point/detail',
-            param: {
-                id: detail.value.relate_id
-            }
-        })
-    } else {
-        redirect({
-            url: '/addon/shop/pages/goods/detail',
-            param: {
-                goods_id: id
-            }
-        })
-    }
+    redirect({
+        url: '/addon/shop/pages/goods/detail',
+        param: {
+            goodsId: id
+        }
+    })
 }
 
 const payRef = ref(null)
 const materialRef: any = ref(null)
 const orderBtnFn = (type = '') => {
     if (type == 'pay')
-        payRef.value?.open(detail.value.order_type, detail.value.order_id, `/addon/shop/pages/order/detail?order_id=${ detail.value.order_id }`);
+        payRef.value?.open(detail.value.order_type, detail.value.order_id, `/addon/shop/pages/order/detail?order_id=${detail.value.order_id}`);
     else if (type == 'close') {
         close(detail.value);
     } else if (type == 'finish') {
@@ -649,8 +338,8 @@ const orderBtnFn = (type = '') => {
         if (detail.value.order_delivery.length > 0) {
             let list: any = []
             detail.value.order_delivery.forEach((item: any, index: number) => {
-                if(item.delivery_type == 'express' && (item.sub_delivery_type == 'express' || item.sub_delivery_type == 'none_express')) {
-                    item.name = `包裹${ index + 1 }`
+                if (item.delivery_type == 'express' && (item.sub_delivery_type == 'express' || item.sub_delivery_type == 'none_express')) {
+                    item.name = `包裹${index + 1}`
                     list.push(item)
                 }
             })
@@ -673,118 +362,22 @@ const orderBtnFn = (type = '') => {
         }
     }
 }
-
-const dateFormat = (res: any, type: any) => {
-    let data;
-    if (res.indexOf('/') != -1) {
-        data = res.split("/");
-    } else if (res.indexOf('-') != -1) {
-        data = res.split("-");
-    }
-
-    let time;
-    const index = new Date(res).getDay();
-    const week = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']
-    if (type == "yearMonthDay") {
-        time = data[0] + '年' + data[1] + '月' + data[2] + '日';
-    } else if (type == "yearMonthDayWeek") {
-        time = data[0] + '年' + data[1] + '月' + data[2] + '日 ' + week[index];
-    } else if (type == "monthDayWeek") {
-        time = data[1] + '月' + data[2] + '日 ' + week[index];
-    } else {
-        time = data[1] + '月' + data[2] + '日';
-    }
-
-    return time;
-}
-
-const applyRefund = (orderGoodsId: number) => {
-    redirect({
-        url: '/addon/shop/pages/refund/apply',
-        param: {
-            order_id: detail.value.order_id,
-            order_goods_id: orderGoodsId
-        }
-    })
-}
-
-const getAddress = () => {
-    uni.openLocation({
-        latitude: Number(detail.value.taker_latitude),
-        longitude: Number(detail.value.taker_longitude),
-        success: function () {
-        }
-    });
-}
-
-const showLogistics = (data: any) => {
-    let status = false
-    if (data.delivery_type != 'express') return false;
-    for (let i = 0; i < data.order_delivery.length; i++) {
-        let item = data.order_delivery[i];
-        if (item.sub_delivery_type === 'express') {
-            status = true;
-            break;
-        } else {
-            status = false
-        }
-    }
-    return status
-}
-
-/************ 虚拟商品核销-start ***************/
-const verifyGoodsData = ref({}) //虚拟商品
-const isShowVerify = computed(() => {
-    let bool = false;
-    if (detail.value.order_goods.length == 1) {
-        verifyGoodsData.value = detail.value.order_goods[0]
-
-        let data = detail.value.order_goods[0];
-        bool = data.is_verify == 1 && data.goods_type == 'virtual' && data.delivery_status == 'delivery_finish' && detail.value.status == 3 ? true : false;
-    }
-    return bool
-})
-const verifyInfo = ref([])
-const getVerifyCodeFn = (data: any) => {
-    verifyInfo.value = [];
-
-    getVerifyCode('shopVirtualGoods', data).then((res: any) => {
-        verifyInfo.value = res.data;
-    })
-}
-/************ 虚拟商品核销-end ***************/
-
-/************ 自提核销-start ***************/
-// const verifyGoodsData = ref({}) //虚拟商品
-const isShowSelfPickup = computed(() => {
-    let bool = false;
-    // if (detail.value.order_goods.length == 1) {
-        // verifyGoodsData.value = detail.value.order_goods[0]
-        bool = detail.value.delivery_type == 'store' && detail.value.status == 2 ? true : false;
-    // }
-    return bool
-})
-const selfPickupInfo = ref([])
-const getSelfPickupCodeFn = (data: any) => {
-    selfPickupInfo.value = [];
-
-    getVerifyCode('shopPickUpOrder', data).then((res: any) => {
-        selfPickupInfo.value = res.data;
-    })
-}
-/************ 自提核销-end ***************/
-
-// 商品表单信息
-const goodsDiyFormData = ref([]);
-const getGoodsDiyFormDetailCallback = (data: any) => {
-    goodsDiyFormData.value = data;
-}
-
-// 订单表单信息
-const orderDiyFormData = ref([]);
-const getOrderDiyFormDetailCallback = (data: any) => {
-    orderDiyFormData.value = data;
-}
+// 根据订单状态获取状态文本
+const getStatusText = (status: string) => {
+    const statusMap: Record<string, string> = {
+        '0': '待支付',
+        '1': '待确认',
+        '2': '待发货',
+        '3': '部分发货',
+        '4': '发货完成',
+        '5': '已完成',
+        '6': '已关闭',
+        '7': '已取消'
+    };
+    return statusMap[status] || status;
+};
+
+const payClose =()=>{}
 </script>
 <style lang="scss" scoped>
 .text-item {

+ 141 - 126
src/addon/shop/pages/order/list.vue

@@ -1,9 +1,11 @@
 <template>
     <view class="bg-[var(--page-bg-color)] min-h-screen overflow-hidden order-list" :style="themeColor()">
-        <view class="fixed left-0 top-0 right-0 z-10" v-if="statusLoading">
+        <view class="fixed left-0 top-0 right-0 z-10">
             <scroll-view :scroll-x="true" class="tab-style-2">
                 <view class="tab-content">
-                    <view class="tab-items" :class="{ 'class-select': orderState === item.status.toString() }" @click="orderStateFn(item.status)" v-for="(item, index) in orderStateList">{{ item.name }}</view>
+                    <view class="tab-items" :class="{ 'class-select': orderState === item.key }"
+                        @click="orderStateFn(item.key)" v-for="(item, index) in orderStateList">{{ item.name }}
+                    </view>
                 </view>
             </scroll-view>
         </view>
@@ -15,93 +17,88 @@
                         <view @click.stop="toLink(item)">
                             <view class="flex justify-between items-center">
                                 <view class="text-[#303133] text-[24rpx] font-400 leading-[36rpx] flex items-center">
-                                    <view v-if="item.activity_type_name" class="text-primary text-[18rpx] border-primary border-[2rpx] border-solid rounded-[4rpx] leading-[24rpx] px-[3rpx]">{{ item.activity_type_name }}</view>
-                                    <view class="ml-[10rpx] text-[24rpx] font-400 text-[#303133]">{{ item.create_time }}</view> 
+                                    <view class="ml-[10rpx] text-[24rpx] font-400 text-[#303133]">{{ item.orderTime }}
+                                    </view>
                                 </view>
-								<view v-if="item.status  == -1" class="text-[#303133] text-[26rpx] max-w-[150px] leading-[34rpx] truncate" :class="{'text-primary': item.status  == 1,'!text-[var(--text-color-light9)]' :item.status  == 5 || item.status  == -1}">{{ item.close_type_name }}</view>
-                                <view v-else class="text-[#303133] text-[26rpx] leading-[34rpx]" :class="{'text-primary': item.status  == 1,'!text-[var(--text-color-light9)]' :item.status  == 5 || item.status  == -1}">{{ item.status_name.name }}</view>
+                                <view class="text-[#303133] text-[26rpx] max-w-[150px] leading-[34rpx] truncate">
+                                    {{ getStatusText(item.orderStatus) }}</view>
                             </view>
-                            <template v-for="(subItem, index) in item.order_goods" :key="index">
+                            <template v-for="(subItem, index) in item.goodsList" :key="index">
                                 <view class="flex box-border mt-[20rpx]">
-                                    <u--image width="150rpx" height="150rpx" :radius="'var(--goods-rounded-big)'" :src="img(subItem.goods_image_thumb_small ? subItem.goods_image_thumb_small : '')" mode="aspectFill">
+                                    <u--image width="150rpx" height="150rpx" :radius="'var(--goods-rounded-big)'"
+                                        :src="img(subItem.image ? subItem.image : '')" mode="aspectFill">
                                         <template #error>
-                                            <image class="w-[150rpx] h-[150rpx] rounded-[var(--goods-rounded-big)] overflow-hidden" :src="img('static/resource/images/diy/shop_default.jpg')" mode="aspectFill" />
+                                            <image
+                                                class="w-[150rpx] h-[150rpx] rounded-[var(--goods-rounded-big)] overflow-hidden"
+                                                :src="img('https://v6.site.niucloud.com/static/resource/images/diy/shop_default.jpg')"
+                                                mode="aspectFill" />
                                         </template>
                                     </u--image>
                                     <view class="ml-[20rpx] flex flex-1 flex-col box-border">
                                         <view class="flex justify-between items-baseline">
-                                            <view class="max-w-[322rpx] text-[28rpx] leading-[40rpx] font-400 truncate text-[#303133]">{{ subItem.goods_name }}</view>
-                                            <template v-if="item.activity_type == 'exchange'">
-                                                <view class="text-right ml-[10rpx] leading-[42rpx]" v-if="parseFloat(subItem.price)">
-                                                    <text class="text-[22rpx] font-400 price-font">¥</text>
-                                                    <text class="text-[36rpx] font-500 price-font">{{ parseFloat(subItem.price).toFixed(2).split('.')[0] }}</text>
-                                                    <text class="text-[22rpx] font-500 price-font">.{{ parseFloat(subItem.price).toFixed(2).split('.')[1] }}</text>
-                                                </view>
-                                            </template>
-                                            <template v-else-if="subItem.extend && subItem.extend.is_impulse_buy">
-                                                <view class="text-right ml-[10rpx] leading-[42rpx]" v-if="parseFloat(subItem.goods_money)">
-                                                    <text class="text-[22rpx] font-400 price-font">¥</text>
-                                                    <text class="text-[36rpx] font-500 price-font">{{ parseFloat(subItem.goods_money).toFixed(2).split('.')[0] }}</text>
-                                                    <text class="text-[22rpx] font-500 price-font">.{{ parseFloat(subItem.goods_money).toFixed(2).split('.')[1] }}</text>
-                                                </view>
-                                            </template>
-                                            <template v-else>
-                                                <view class="text-right leading-[42rpx] ml-[10rpx]">
-                                                    <text class="text-[22rpx] price-font">¥</text>
-                                                    <text class="text-[36rpx] font-500 price-font">{{ parseFloat(subItem.price).toFixed(2).split('.')[0] }}</text>
-                                                    <text class="text-[22rpx] font-500 price-font">.{{ parseFloat(subItem.price).toFixed(2).split('.')[1] }}</text>
-                                                </view>
-                                            </template>
+                                            <view
+                                                class="max-w-[322rpx] text-[28rpx] leading-[40rpx] font-400 truncate text-[#303133]">
+                                                {{ subItem.name
+                                                }}</view>
+
+                                            <view class="text-right leading-[42rpx] ml-[10rpx]">
+                                                <text class="text-[22rpx] price-font">¥</text>
+                                                <text class="text-[36rpx] font-500 price-font">{{
+                                                    parseFloat(subItem.price).toFixed(2).split('.')[0] }}</text>
+                                                <text class="text-[22rpx] font-500 price-font">.{{
+                                                    parseFloat(subItem.price).toFixed(2).split('.')[1] }}</text>
+                                            </view>
                                         </view>
                                         <view class="flex justify-between items-baseline text-[#303133] mt-[14rpx]">
                                             <view>
-                                                <view class="text-[24rpx] text-[var(--text-color-light6)] font-400 truncate leading-[34rpx] max-w-[369rpx] mb-[10rpx]" v-if="subItem.sku_name">{{ subItem.sku_name }}</view>
-                                                <view class="text-[24rpx] font-400 leading-[34rpx] text-[var(--text-color-light6)]" v-if="item.delivery_type != 'virtual'">{{ t('deliveryType') }} : {{ item.delivery_type_name }}</view>
+                                                <view
+                                                    class="text-[24rpx] text-[var(--text-color-light6)] font-400 truncate leading-[34rpx] max-w-[369rpx] mb-[10rpx]">
+                                                    {{ subItem.spec1 }}</view>
+                                                <view
+                                                    class="text-[24rpx] font-400 leading-[34rpx] text-[var(--text-color-light6)]">
+                                                    {{ subItem.spec2 }}</view>
                                             </view>
-                                            <text class="text-right text-[26rpx] font-400 w-[90rpx] leading-[36rpx]">x{{ subItem.num }}</text>
+                                            <text class="text-right text-[26rpx] font-400 w-[90rpx] leading-[36rpx]">x{{
+                                                subItem.quantity }}</text>
                                         </view>
                                     </view>
                                 </view>
-                                <view class="flex items-center box-border mt-[8rpx]" v-if="subItem.extend && subItem.extend.is_newcomer && subItem.num > 1">
-                                    <image class="h-[24rpx] w-[56rpx]" :src="img('addon/shop/newcomer.png')" mode="heightFix" />
-                                    <view class="text-[24rpx] text-[#FFB000] leading-[34rpx] ml-[8rpx]">第1{{ subItem.unit }},¥{{ parseFloat(subItem.extend.newcomer_price).toFixed(2) }}/{{ subItem.unit }};第{{ subItem.num > 2 ? '2~' + subItem.num : '2' }}{{ subItem.unit }},¥{{ parseFloat(subItem.price).toFixed(2) }}/{{ subItem.unit }}</view>
-                                </view>
                             </template>
                         </view>
                         <view class="flex justify-end items-center mt-[20rpx]">
                             <view class="flex items-baseline">
-                                <view class="text-[22rpx] text-[var(--text-color-light9)] leading-[30rpx] mr-[6rpx]" v-if="parseFloat(item.delivery_money)">{{ t('service') }}</view>
-                                <view class="text-[22rpx] font-400 leading-[30rpx] text-[#303133]">{{ t('actualPayment') }}:</view>
+                                <view class="text-[22rpx] font-400 leading-[30rpx] text-[#303133]">实付款:</view>
                                 <view class="leading-[1] text-[var(--price-text-color)]">
-                                    <template v-if="item.activity_type == 'exchange'">
-                                        <text class="text-[36rpx] mr-[2rpx] leading-[40rpx] price-font font-500">{{ item.point }}</text>
-                                        <text class="text-[20rpx] leading-[28rpx] font-500">{{ t('point') }}</text>
-                                        <template v-if="parseFloat(item.order_money)">
-                                            <text class="text-[20rpx] mx-[4rpx] font-500 leading-[28rpx]">+</text>
-                                            <text class="text-[36rpx] font-500 leading-[40rpx] price-font">{{ parseFloat(item.order_money).toFixed(2) }}</text>
-                                            <text class="text-[20rpx] font-500 leading-[28rpx] ml-[2rpx]">{{ t('money') }}</text>
-                                        </template>
-                                    </template>
-                                    <template v-else>
-                                        <text class="text-[22rpx] leading-[26rpx] price-font">¥</text>
-                                        <text class="text-[36rpx] font-500 leading-[40rpx] price-font">{{ parseFloat(item.order_money).toFixed(2).split('.')[0] }}</text>
-                                        <text class="text-[22rpx] font-500 leading-[28rpx] price-font">.{{ parseFloat(item.order_money).toFixed(2).split('.')[1] }}</text>
-                                    </template>
+                                    <text class="text-[22rpx] leading-[26rpx] price-font">¥</text>
+                                    <text class="text-[36rpx] font-500 leading-[40rpx] price-font">{{
+                                        parseFloat(item.payableAmount).toFixed(2).split('.')[0] }}</text>
+                                    <text class="text-[22rpx] font-500 leading-[28rpx] price-font">.{{
+                                        parseFloat(item.payableAmount).toFixed(2).split('.')[1] }}</text>
                                 </view>
                             </view>
                         </view>
-                        <view class="flex justify-end text-[28rpx] mt-[20rpx] items-center" v-if="(item.status == 1) || (item.status == 3) || (item.status == 5 && evaluateConfig.evaluate_is_show && evaluateConfig.is_evaluate == 1)">
-                            <view class="text-[24rpx] font-500 leading-[52rpx] h-[56rpx] min-w-[150rpx] text-center border-[2rpx] border-solid border-[#ccc] rounded-full text-[var(--text-color-light3)] box-border" v-if="item.status == 1" @click.stop="orderBtnFn(item, 'close')">{{ t('orderClose') }}</view>
-                            <view class="text-[24rpx] font-500 flex-center h-[56rpx] min-w-[150rpx] text-center border-[0] text-[#fff] primary-btn-bg rounded-full ml-[20rpx] box-border" v-if="item.status == 1" @click.stop="orderBtnFn(item, 'pay')">{{ t('topay') }}</view>
-                            <view class="text-[24rpx] font-500 flex-center h-[56rpx] min-w-[150rpx] text-center border-[0] text-[#fff] primary-btn-bg rounded-full ml-[20rpx] box-border" v-if="item.status == 3" @click.stop="orderBtnFn(item, 'finish')">{{ t('orderFinish') }}</view>
-                            <view class="text-[24rpx] font-500 leading-[52rpx] h-[56rpx] min-w-[150rpx] text-center border-[2rpx] border-solid border-[#ccc] rounded-full ml-[20rpx]  text-[var(--text-color-light3)] box-border"
-                                v-if="item.status == 5 && evaluateConfig.evaluate_is_show && evaluateConfig.is_evaluate == 1"
-                                @click.stop="orderBtnFn(item, 'evaluate')">{{ item.is_evaluate == 1 ? t('selectedEvaluate') : t('evaluate') }}</view>
+                        <view class="flex justify-end text-[28rpx] mt-[20rpx] items-center" >
+                            <view
+                                class="text-[24rpx] font-500 leading-[52rpx] h-[56rpx] min-w-[150rpx] text-center border-[2rpx] border-solid border-[#ccc] rounded-full text-[var(--text-color-light3)] box-border"
+                                v-if="item.orderStatus == 1 || item.orderStatus == 0" @click.stop="orderBtnFn(item, 'close')">取消订单
+                            </view>
+                            <!-- <view
+                                class="text-[24rpx] font-500 flex-center h-[56rpx] min-w-[150rpx] text-center border-[0] text-[#fff] primary-btn-bg rounded-full ml-[20rpx] box-border"
+                                v-if="item.status == 1" @click.stop="orderBtnFn(item, 'pay')">去支付</view> -->
+                            <view
+                                class="text-[24rpx] font-500 flex-center h-[56rpx] min-w-[150rpx] text-center border-[0] text-[#fff] primary-btn-bg rounded-full ml-[20rpx] box-border"
+                                v-if="item.orderStatus == 4" @click.stop="orderBtnFn(item, 'finish')">确认收货
+                            </view>
+                            <view
+                                class="text-[24rpx] font-500 leading-[52rpx] h-[56rpx] min-w-[150rpx] text-center border-[2rpx] border-solid border-[#ccc] rounded-full ml-[20rpx]  text-[var(--text-color-light3)] box-border"
+                                v-if="item.isNeedCheck == '0' && item.checkStatus != '0'"
+                                @click.stop="orderBtnFn(item, 'evaluate')">查看物流
+                            </view>
                         </view>
                     </view>
                 </template>
             </view>
-            <mescroll-empty v-if="!list.length && loading" :option="{tip : '暂无订单'}"></mescroll-empty>
+            <mescroll-empty v-if="!list.length && loading" :option="{ tip: '暂无订单' }"></mescroll-empty>
         </mescroll-body>
         <pay ref="payRef" @close="payClose"></pay>
         <!-- #ifdef MP-WEIXIN -->
@@ -115,7 +112,7 @@
 import { ref, nextTick } from 'vue';
 import { t } from '@/locale'
 import { img, redirect, copy } from '@/utils/common'
-import { getShopOrderStatus, getShopOrder, orderClose, orderFinish } from '@/addon/shop/api/order';
+import { getShopOrderStatus, getShopOrder, orderClose, orderFinish, getproducts } from '@/addon/shop/api/order';
 import { getEvaluateConfig } from '@/addon/shop/api/shop';
 import MescrollBody from '@/components/mescroll/mescroll-body/mescroll-body.vue';
 import MescrollEmpty from '@/components/mescroll/mescroll-empty/mescroll-empty.vue';
@@ -124,11 +121,16 @@ import { onLoad, onPageScroll, onReachBottom, onShow } from '@dcloudio/uni-app';
 import useConfigStore from "@/stores/config";
 
 const { mescrollInit, downCallback, getMescroll } = useMescroll(onPageScroll, onReachBottom);
-const list = ref<Array<Object>>([]);
+const list = ref<any>([]);
 const loading = ref<boolean>(false);
-const statusLoading = ref<boolean>(false);
-const orderState = ref('')
-const orderStateList: any = ref([]);
+const orderState = ref('all')
+const orderStateList: any = ref([
+    { key: 'all', name: '全部订单' },
+    { key: '0', name: '预下单' },
+    { key: '4', name: '待收货' },
+    { key: '5', name: '已完成' },
+    { key: '7', name: '已取消' }
+]);
 const evaluateConfig = ref("")
 
 const mch_id = ref('')
@@ -137,9 +139,7 @@ const isTradeManaged = ref(false)
 const wxPrivacyPopupRef: any = ref(null)
 
 onLoad((option: any) => {
-    orderState.value = option.status || "";
-    evaluateEvent()
-    getShopOrderStatusFn();
+    orderState.value = option.status || "all";
     // #ifdef MP
     nextTick(() => {
         if (wxPrivacyPopupRef.value) wxPrivacyPopupRef.value.proactive();
@@ -156,83 +156,96 @@ onShow(() => {
     })
 })
 
-const evaluateEvent = () => {
-    getEvaluateConfig().then((data: any) => {
-        evaluateConfig.value = data.data
-    })
-}
-
-const getShopOrderFn = (mescroll: any) => {
+const getShopOrderFn = async (mescroll: any) => {
     loading.value = false;
-    let data: object = {
-        page: mescroll.num,
-        limit: mescroll.size,
-        status: orderState.value
-    };
+    try {
+        const data = {
+            pageNum: mescroll.num,
+            pageSize: mescroll.size,
+            orderStatuses: orderState.value === 'all' ? '' : orderState.value
+        };
 
-    getShopOrder(data).then((res: any) => {
-        let newArr = (res.data.data as Array<Object>);
-        //设置列表数据
-        if (mescroll.num == 1) {
-            list.value = []; //如果是第一页需手动制空列表
+        const res: any = await getShopOrder(data);
+        let newArr = res.rows || [];
+
+        if (mescroll.num === 1) {
+            list.value = []; // 第一页清空
         }
+        const orderProductsMap: Record<number, any[]> = {};
+        // 获取商品详情(可选)
+        if (newArr.length > 0) {
 
-        newArr.forEach((item: any) => {
-            item.is_show_evaluate = true;
-            let evaluateCount = 0;
-            for (let i = 0; i < item.order_goods.length; i++) {
-                if (item.order_goods[i].status != 1 || item.order_goods[i].is_enable_refund == 1) {
-                    evaluateCount++;
+            let orderIds = newArr.map((o: any) => o.id);
+            orderIds = orderIds.join(",")
+            console.log(orderIds, 'orderIds')
+            try {
+                const prodRes: any = await getproducts({ orderIds: orderIds });
+                if (prodRes.code === 200 && prodRes.rows) {
+                    prodRes.rows.forEach((p: any) => {
+                        if (!orderProductsMap[p.orderId]) {
+                            orderProductsMap[p.orderId] = [];
+                        }
+                        orderProductsMap[p.orderId].push({
+                            id: p.id,
+                            productId: p.productId,
+                            image: p.productImage || '',
+                            name: p.productName || '',
+                            spec1: p.productUnit || '',
+                            spec2: p.productNo || '',
+                            price: p.orderPrice || 0,
+                            quantity: p.orderQuantity || 0
+                        });
+                    });
+                    console.log(prodRes, 'prodRes')
                 }
+            } catch (e) {
+                console.error('获取商品列表失败:', e);
+                // 不中断主流程,继续显示订单
             }
-            if (evaluateCount == item.order_goods.length) {
-                item.is_show_evaluate = false;
-            }
-        })
-
+        }
+        newArr.forEach((item: any) => {
+            item.goodsList = orderProductsMap[item.id] || []
+        });
         list.value = list.value.concat(newArr);
         mescroll.endSuccess(newArr.length);
-
-        mch_id.value = res.data.mch_id;
-        isTradeManaged.value = res.data.is_trade_managed;
+    } catch (error) {
+        console.error('获取订单列表失败:', error);
+        mescroll.endErr();
+    } finally {
         loading.value = true;
-    }).catch(() => {
-        loading.value = true;
-        mescroll.endErr(); // 请求失败, 结束加载
-    })
-}
-
-const getShopOrderStatusFn = () => {
-    statusLoading.value = false;
-    orderStateList.value = [];
-    let obj = { name: '全部', status: '' };
-    orderStateList.value.push(obj);
+    }
+};
 
-    getShopOrderStatus().then((res: any) => {
-        Object.values(res.data).forEach((item, index) => {
-            orderStateList.value.push(item);
-        });
-        statusLoading.value = true;
-    }).catch(() => {
-        statusLoading.value = true;
-    })
-}
+// 根据订单状态获取状态文本
+const getStatusText = (status: string) => {
+    const statusMap: Record<string, string> = {
+        '0': '待支付',
+        '1': '待确认',
+        '2': '待发货',
+        '3': '部分发货',
+        '4': '发货完成',
+        '5': '已完成',
+        '6': '已关闭',
+        '7': '已取消'
+    };
+    return statusMap[status] || status;
+};
 
 const orderStateFn = (status: any) => {
-    orderState.value = status.toString();
+    orderState.value = status;
     list.value = [];
     getMescroll().resetUpScroll();
 };
 
 const toLink = (data: any) => {
-    redirect({ url: '/addon/shop/pages/order/detail', param: { order_id: data.order_id } })
+    redirect({ url: '/addon/shop/pages/order/detail', param: { order_id: data.id } })
 }
 
 // 支付
 const payRef = ref(null)
 const orderBtnFn = (data: any, type = '') => {
     if (type == 'pay')
-        payRef.value?.open(data.order_type, data.order_id, `/addon/shop/pages/order/detail?order_id=${ data.order_id }`);
+        payRef.value?.open(data.order_type, data.order_id, `/addon/shop/pages/order/detail?order_id=${data.order_id}`);
     else if (type == 'close') {
         close(data);
     } else if (type == 'finish') {
@@ -250,11 +263,11 @@ const orderBtnFn = (data: any, type = '') => {
 const close = (item: any) => {
     uni.showModal({
         title: '提示',
-        content: '您确定要关闭该订单吗?',
+        content: '您确定要取消订单吗?',
         confirmColor: useConfigStore().themeColor['--primary-color'],
         success: res => {
             if (res.confirm) {
-                orderClose(item.order_id).then((data) => {
+                orderClose(item.id).then((data) => {
                     getMescroll().resetUpScroll();
                 })
             }
@@ -314,6 +327,8 @@ const finish = (item: any) => {
     }
     // #endif
 }
+
+const payClose =()=>{}
 </script>
 <style>
 .order-list .mescroll-body {

+ 1 - 1
src/utils/common.ts

@@ -513,7 +513,7 @@ export function timeTurnTimeStampTwo(dateStr: string) {
  * @param {Object} value
  * @param {Object} callback
  */
-export function copy(value: any, callback: any) {
+export function copy(value: any, callback?: any) {
     // #ifdef H5
     const oInput = document.createElement('input'); //创建一个隐藏input(重要!)
     oInput.value = value; //赋值