yankun 3 tygodni temu
rodzic
commit
4cce7480e8

+ 15 - 1
locale/zh.json

@@ -617,5 +617,19 @@
   "店铺地址": "店铺地址",
   "请输入店铺地址": "请输入店铺地址",
   "联系方式": "联系方式",
-  "请输入联系方式": "请输入联系方式"
+  "请输入联系方式": "请输入联系方式",
+  "店铺订单列表": "店铺订单列表",
+  "待发货": "待发货",
+  "付款": "付款",
+  "店铺订单详情": "店铺订单详情",
+  "人购买": "人购买",
+  "请输入商品链接或关键字": "请输入商品链接或关键字",
+  "粉丝": "粉丝",
+  "好评率": "好评率",
+  "已售": "已售",
+  "切换到卖家模式": "切换到卖家模式",
+  "确定要切换到店铺模式吗?": "确定要切换到店铺模式吗?",
+  "店铺订单": "店铺订单",
+  "切换到买家模式": "切换到买家模式",
+  "确定要切换到买家模式吗?": "确定要切换到买家模式吗?"
 }

+ 2 - 2
manifest.json

@@ -2,8 +2,8 @@
     "name" : "VAVABUY",
     "appid" : "__UNI__0358C1D",
     "description" : "VAVABUY",
-    "versionName" : "1.7.8",
-    "versionCode" : 1708,
+    "versionName" : "1.8.0",
+    "versionCode" : 1800,
     "transformPx" : false,
     /* 5+App特有相关 */
     "app-plus" : {

+ 2 - 2
pages/dashboard/order.vue

@@ -130,10 +130,10 @@
                       </view>
                     </view>
                     <view class="order_btns" v-if="item.status == 100">
-                      <view class="btn" @click="orderCancel(item)">
+                      <view class="btn" @click.stop="orderCancel(item)">
                         <trans _t="取消" />
                       </view>
-                      <view class="btn pay_btn" @click="paySubmit(item)">
+                      <view class="btn pay_btn" @click.stop="paySubmit(item)">
                         <trans _t="支付" />
                       </view>
                     </view>

+ 2 - 5
pages/order/details.vue

@@ -18,11 +18,8 @@
         </view>
         <view class="information">
           <text class="name">{{ queryData?.goods[0]["goodTitle"] }}</text>
-          <view
-            v-for="(title, index) in queryData?.goods[0]['sku_desc'].split(';')"
-            :key="index"
-          >
-            <text>{{ title }}</text>
+          <view>
+            {{ queryData?.goods[0]["sku_desc"] }}
           </view>
           <view class="num">x{{ queryData?.goods[0]["total"] }}</view>
         </view>

+ 1 - 0
pages/shop/payment.vue

@@ -371,6 +371,7 @@ const paySubmit = async (password) => {
       payType: radioValue.value,
       paypass: password,
       [isShipping ? "id" : "oid"]: oid.value,
+      sid: oid.value,
     };
     if (isShipping && payInfo.value.couponId) {
       params.couponId = payInfo.value.couponId;

+ 204 - 179
pages/store/components/order_item.vue

@@ -1,61 +1,69 @@
 <template>
-  <view class="order-item" @click="handleClick">
-    <!-- 订单头部 -->
-    <view class="order-header">
-      <view class="order-info">
-        <text class="order-number">{{ t("订单号") }}:{{ item.orderNo }}</text>
-        <text class="order-time">{{ useGlobal().$format(item.indate) }}</text>
-      </view>
-      <view class="order-status">
-        {{ item.status_txt }}
+  <view class="order_list">
+    <view class="order_header">
+      <!-- <view class="header_img">
+        <image
+          :src="`../../static/shop/icon_${item.channel}.png`"
+          class="img"
+        ></image>
+      </view> -->
+      <view class="create_time">
+        <trans _t="创建时间" />:
+        {{ useGlobal().$format(item.indate) }}
       </view>
     </view>
-
-    <!-- 商品信息 -->
-    <view class="product-section">
-      <view class="product-list">
-        <view
-          v-for="(product, index) in item.goods"
-          :key="index"
-          class="product-item"
-        >
-          <view class="product-image">
-            <image :src="product.pic_url" mode="aspectFill" />
+    <view class="order_item">
+      <view
+        class="order_item_wrapper"
+        v-for="(val, num) in item.goods"
+        :key="num"
+        @click="handleClick"
+      >
+        <view class="_item_wrapper">
+          <view class="thumb_img">
+            <image :src="val.pic_url" class="_img"></image>
           </view>
-          <view class="product-info">
-            <view class="product-name">{{ product.shopName }}</view>
-            <view class="product-spec" v-if="product.sku_desc">{{
-              product.sku_desc
-            }}</view>
-            <view class="product-price">
-              <text class="price">{{ formatCurrency(product.price) }}</text>
-              <text class="quantity">x{{ product.total }}</text>
+          <view class="goods_info">
+            <view class="info_name">
+              <view class="_name">{{ val.goodTitle }}</view>
+              <view class="_price"
+                >{{ symbol.symbol }}&nbsp;{{ Moneyhtml(val.price) }}</view
+              >
+            </view>
+            <view class="spec_info">
+              <view class="spec_desc">{{ val.sku_desc }}</view>
+              <view class="spec_num">x{{ val.total }}</view>
             </view>
           </view>
         </view>
+        <view class="order_status">
+          <text>{{ item.status_txt }}&nbsp;</text>
+          <!-- <i class="icon-font icon-question2"></i> -->
+        </view>
       </view>
-    </view>
-
-    <!-- 订单金额 -->
-    <view class="order-amount">
-      <view class="shipping-fee" v-if="item.status == 300 && item.money">
-        <text class="fee-label">{{ t("运费") }}:</text>
-        <text class="fee-amount">{{ formatCurrency(item.money) }}</text>
-      </view>
-    </view>
-
-    <!-- 操作按钮 -->
-    <view class="order-actions" v-if="item.status == 300">
-      <view class="action-btn" @click.stop="handleAction()">
-        <trans _t="付款" />
+      <view class="order_footer" v-if="item.status == 300">
+        <view class="order_price">
+          <view class="price_text"> <trans _t="运费" />: </view>
+          <text>{{ symbol.symbol }}{{ Moneyhtml(item.money) }}</text>
+        </view>
+        <view class="order_btns">
+          <view class="btn pay_btn" @click.stop="handleAction">
+            <trans _t="支付" />
+          </view>
+        </view>
       </view>
     </view>
   </view>
 </template>
 
 <script setup>
-import { useGlobal, formatCurrency } from "@/utils";
+import { computed } from "vue";
 import { t } from "@/locale";
+import { useSystemStore } from "@/store";
+import { useGlobal, Moneyhtml } from "@/utils";
+
+const useSystem = useSystemStore();
+const symbol = computed(() => useSystem.getSymbol);
 
 const props = defineProps({
   item: {
@@ -78,177 +86,194 @@ const handleAction = () => {
 <style lang="less" scoped>
 @import url("@/style.less");
 
-.order-item {
-  background: var(--light);
+.order_list {
+  margin-top: 24rpx;
+  padding: 16rpx 24rpx;
+  background-color: var(--light);
+  border: var(--bor1);
   border-radius: 16rpx;
-  padding: 30rpx;
-  margin-bottom: 20rpx;
-  box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.05);
-
-  .order-header {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    margin-bottom: 24rpx;
-    padding-bottom: 20rpx;
-    border-bottom: 1rpx solid var(--border);
-
-    .order-info {
-      display: flex;
-      flex-direction: column;
-      gap: 8rpx;
-
-      .order-number {
-        font-size: 28rpx;
-        font-weight: bold;
-        color: var(--black);
-      }
 
-      .order-time {
-        font-size: 24rpx;
-        color: var(--text-01);
+  .order_header {
+    .ver();
+    margin-bottom: 16rpx;
+
+    .header_img {
+      width: 48rpx;
+      height: 48rpx;
+      margin-right: 16rpx;
+      .img {
+        width: inherit;
+        height: inherit;
+        border-radius: 8rpx;
       }
     }
 
-    .order-status {
-      font-size: 24rpx;
-      font-weight: bold;
-      padding: 8rpx 16rpx;
-      border-radius: 20rpx;
-      color: var(--success);
-      background: rgba(76, 175, 80, 0.1);
+    .create_time {
+      .size(24rpx);
+      color: var(--text);
+      font-weight: 700;
+
+      text {
+        font-weight: 500;
+      }
     }
   }
 
-  .product-section {
-    margin-bottom: 24rpx;
+  .order_item {
+    &_wrapper {
+      margin-top: 16rpx;
 
-    .product-list {
-      display: flex;
-      flex-direction: column;
-      gap: 20rpx;
+      ._item_wrapper {
+        .flex();
 
-      .product-item {
-        display: flex;
-        gap: 20rpx;
+        .thumb_img {
+          width: 140rpx;
+          height: 140rpx;
 
-        .product-image {
-          width: 120rpx;
-          height: 120rpx;
-          border-radius: 12rpx;
-          overflow: hidden;
-          background: var(--bg);
-
-          image {
-            width: 100%;
-            height: 100%;
+          ._img {
+            width: inherit;
+            height: inherit;
+            border-radius: 16rpx;
           }
         }
 
-        .product-info {
+        .goods_info {
+          margin-left: 16rpx;
           flex: 1;
-          display: flex;
-          flex-direction: column;
-          justify-content: space-between;
-
-          .product-name {
-            font-size: 28rpx;
-            color: var(--black);
-            line-height: 1.4;
-            margin-bottom: 8rpx;
-            overflow: hidden;
-            text-overflow: ellipsis;
-            display: -webkit-box;
-            -webkit-line-clamp: 2;
-            -webkit-box-orient: vertical;
-          }
 
-          .product-spec {
-            font-size: 24rpx;
-            color: var(--text-01);
-            margin-bottom: 8rpx;
+          .info_name {
+            color: var(--text);
+            .size(24rpx);
+            font-weight: 700;
+            line-height: 44rpx;
+            .ver();
+
+            ._name {
+              flex: 1;
+              .ellipsis();
+              margin-right: 8rpx;
+            }
           }
 
-          .product-price {
-            display: flex;
-            justify-content: space-between;
-            align-items: center;
+          .spec_info {
+            .flex();
+            flex: 1;
+            margin-top: 8rpx;
+            color: var(--text-01);
+            .size(24rpx);
+            line-height: 40rpx;
 
-            .price {
-              font-size: 28rpx;
-              font-weight: bold;
-              color: var(--primary);
+            .spec_desc {
+              flex: 1;
+              margin-right: 8rpx;
             }
+          }
 
-            .quantity {
-              font-size: 24rpx;
-              color: var(--text-01);
-            }
+          .no_return {
+            border: var(--danger-bor);
+            border-radius: 40rpx;
+            color: var(--danger);
+            cursor: pointer;
+            .size(24rpx);
+            line-height: 40rpx;
+            margin-top: 16rpx;
+            padding: 0 24rpx;
+            width: max-content;
           }
         }
       }
-    }
-  }
 
-  .order-amount {
-    margin-bottom: 24rpx;
-    padding-top: 20rpx;
-    border-top: 1rpx solid var(--border);
+      .order_status {
+        color: var(--primary);
+        .size(24rpx);
+        height: 40rpx;
+        .flex_position(flex-end);
+        margin-top: 16rpx;
 
-    .amount-info {
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
+        .icon-question2 {
+          .size(36rpx);
+        }
+      }
 
-      .total-label {
-        font-size: 24rpx;
+      .order-cancel {
+        margin-top: 16rpx;
         color: var(--text-01);
-      }
+        .size(24rpx);
+        line-height: 40rpx;
+
+        .time {
+          color: var(--danger);
+          font-weight: 700;
+        }
 
-      .total-amount {
-        font-size: 32rpx;
-        font-weight: bold;
-        color: var(--black);
+        .content {
+          margin-top: 8rpx;
+          color: var(--text);
+          font-weight: 500;
+        }
       }
     }
-    .shipping-fee {
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
-      padding: 8rpx 0;
-      background: rgba(255, 193, 7, 0.1);
-      border-radius: 8rpx;
-      padding: 12rpx 16rpx;
-
-      .fee-label {
-        font-size: 24rpx;
-        color: var(--warning);
+
+    .order_footer {
+      margin-top: 16rpx;
+      border-top: 1px solid #f5f6f7;
+
+      .order_price {
+        padding-top: 16rpx;
+        .flex_position(flex-end);
+        color: var(--primary);
+        color: var(--red);
+        .size();
+        font-weight: 700;
+        height: 48rpx;
+        line-height: 1;
+
+        .price_text {
+          color: var(--text);
+          .size(24rpx);
+          font-weight: 400;
+        }
+
+        .icon-question2 {
+          font-weight: 400;
+          color: var(--text-01);
+          margin-left: 8rpx;
+        }
       }
 
-      .fee-amount {
-        font-size: 26rpx;
-        font-weight: bold;
-        color: var(--warning);
+      .end_time {
+        .flex_position(flex-end);
+        margin-top: 16rpx;
+        color: #e62e2e;
+        font-weight: 700;
+        .size(24rpx);
+
+        text {
+          font-weight: 400;
+        }
       }
-    }
-  }
 
-  .order-actions {
-    display: flex;
-    justify-content: flex-end;
-    gap: 20rpx;
-    padding-top: 20rpx;
-    border-top: 1rpx solid var(--border);
-
-    .action-btn {
-      padding: 12rpx 24rpx;
-      border-radius: 40rpx;
-      font-size: 24rpx;
-      font-weight: bold;
-      text-align: center;
-      min-width: 120rpx;
-      background: var(--primary);
-      color: var(--light);
+      .order_btns {
+        .flex_position(flex-end);
+        margin-top: 16rpx;
+        gap: 16rpx;
+
+        .btn {
+          .flex_center();
+          border-radius: 16rpx;
+          padding: 0 30rpx;
+          .size(24rpx);
+          height: 48rpx;
+          border: 1px solid var(--black);
+          background-color: var(--light);
+          color: var(--black);
+        }
+
+        .pay_btn {
+          color: var(--light);
+          background-color: var(--black);
+        }
+      }
     }
   }
 }

+ 276 - 475
pages/store/detail.vue

@@ -1,569 +1,370 @@
 <template>
   <Theme>
-    <view class="wrap">
-      <!-- 导航栏 -->
-      <Navbar fixed leftIconColor="var(--black)" title="店铺订单详情"> </Navbar>
-
-      <!-- 订单状态 -->
-      <view class="status-section">
-        <view class="status-icon">
-          <i class="icon-font" :class="getStatusIcon(orderDetail.status)"></i>
+    <Navbar fixed>
+      <template #center>
+        <view class="nav_title">
+          <trans _t="店铺订单详情" />
         </view>
-        <view class="status-info">
-          <view class="status-text">{{
-            getStatusText(orderDetail.status)
-          }}</view>
-          <view class="status-desc">{{
-            getStatusDesc(orderDetail.status)
-          }}</view>
+      </template>
+    </Navbar>
+    <view class="content">
+      <view class="overview">
+        <view class="img_box">
+          <image
+            class="img"
+            mode="aspectFit"
+            :src="queryData?.goods[0]['pic_url']"
+          ></image>
         </view>
-      </view>
-
-      <!-- 收货信息 -->
-      <view class="address-section" v-if="orderDetail.address">
-        <view class="section-header">
-          <i class="icon-font icon-location"></i>
-          <text>收货信息</text>
-        </view>
-        <view class="address-info">
-          <view class="receiver">
-            <text class="name">{{ orderDetail.address.name }}</text>
-            <text class="phone">{{ orderDetail.address.phone }}</text>
-          </view>
-          <view class="address">{{ orderDetail.address.address }}</view>
-        </view>
-      </view>
-
-      <!-- Tab导航 -->
-      <view class="tab-section">
-        <Tab :active="activeTab" :tabList="tabList" @confirm="onTabChange" />
-      </view>
-
-      <!-- 商品信息 -->
-      <view class="products-section" v-if="activeTab === 0">
-        <view class="section-header">
-          <i class="icon-font icon-goods"></i>
-          <text>商品信息</text>
-        </view>
-        <view class="product-list">
+        <view class="information">
+          <text class="name">{{ queryData?.goods[0]["goodTitle"] }}</text>
           <view
-            v-for="(product, index) in orderDetail.goods"
+            v-for="(title, index) in queryData?.goods[0]['sku_desc'].split(';')"
             :key="index"
-            class="product-item"
           >
-            <view class="product-image">
-              <image :src="product.image" mode="aspectFill" />
-            </view>
-            <view class="product-info">
-              <view class="product-name">{{ product.name }}</view>
-              <view class="product-spec" v-if="product.spec">{{
-                product.spec
-              }}</view>
-              <view class="product-price">
-                <text class="price">{{ formatCurrency(product.price) }}</text>
-                <text class="quantity">x{{ product.quantity }}</text>
-              </view>
-            </view>
+            <text>{{ title }}</text>
           </view>
+          <view class="num">x{{ queryData?.goods[0]["total"] }}</view>
         </view>
       </view>
-
-      <!-- 订单信息 -->
-      <view class="order-info-section">
-        <view class="section-header">
-          <i class="icon-font icon-order"></i>
-          <text>订单信息</text>
-        </view>
-        <view class="info-list">
-          <view class="info-item">
-            <text class="label">订单号</text>
-            <text class="value">{{ orderDetail.orderNo }}</text>
-          </view>
-          <view class="info-item">
-            <text class="label">下单时间</text>
-            <text class="value">{{ formatTime(orderDetail.createTime) }}</text>
-          </view>
-          <view class="info-item" v-if="orderDetail.payTime">
-            <text class="label">支付时间</text>
-            <text class="value">{{ formatTime(orderDetail.payTime) }}</text>
-          </view>
-          <view class="info-item" v-if="orderDetail.shipTime">
-            <text class="label">发货时间</text>
-            <text class="value">{{ formatTime(orderDetail.shipTime) }}</text>
-          </view>
-          <view class="info-item" v-if="orderDetail.completeTime">
-            <text class="label">完成时间</text>
-            <text class="value">{{
-              formatTime(orderDetail.completeTime)
-            }}</text>
-          </view>
-          <view class="info-item" v-if="orderDetail.remark">
-            <text class="label">备注</text>
-            <text class="value">{{ orderDetail.remark }}</text>
-          </view>
-        </view>
+      <view class="price_box">
+        <text class="currency">{{ symbol.symbol }}:</text>
+        <rich-text
+          class="texts"
+          :nodes="Moneyhtml(queryData?.goods[0]['price'])"
+        ></rich-text>
       </view>
 
-      <!-- 金额明细 -->
-      <view class="amount-section">
-        <view class="section-header">
-          <i class="icon-font icon-money"></i>
-          <text>金额明细</text>
-        </view>
-        <view class="amount-list">
-          <view class="amount-item">
-            <text class="label">商品金额</text>
-            <text class="value">{{ formatCurrency(orderDetail.goodsAmount) }}</text>
-          </view>
-          <view class="amount-item" v-if="orderDetail.shippingFee > 0">
-            <text class="label">运费</text>
-            <text class="value">{{ formatCurrency(orderDetail.shippingFee) }}</text>
-          </view>
-          <view class="amount-item" v-if="orderDetail.discountAmount > 0">
-            <text class="label">优惠金额</text>
-            <text class="value discount"
-              >-{{ formatCurrency(orderDetail.discountAmount) }}</text
-            >
-          </view>
-          <view class="amount-item total">
-            <text class="label">实付金额</text>
-            <text class="value">{{ formatCurrency(orderDetail.totalAmount) }}</text>
-          </view>
+      <view class="dashed"></view>
+
+      <view class="text_box" v-if="queryData.status == 300">
+        <trans class="title" _t="运费"></trans>
+        <view class="price_box">
+          <text class="currency">{{ symbol.symbol }}</text>
+          <rich-text
+            class="texts"
+            :nodes="Moneyhtml(queryData?.money)"
+          ></rich-text>
         </view>
       </view>
+      <view class="text_box" v-if="queryData?.payType">
+        <trans class="title" _t="支付方式"></trans>
+        <text>{{ queryData?.payType }}</text>
+      </view>
+      <view class="text_box">
+        <trans class="title" _t="订单状态"></trans>
+        <text>{{ queryData?.status_txt }}</text>
+      </view>
+      <view class="text_box">
+        <trans class="title" _t="平台订单号"></trans>
+        <up-copy
+          :content="queryData?.orderNo"
+          :notice="t('复制成功')"
+          class="right_value"
+        >
+          <up-icon name="file-text" size="16px"></up-icon>
+          <text>{{ queryData?.orderNo }}</text>
+        </up-copy>
+      </view>
+      <view class="text_box" v-if="queryData?.payDate">
+        <trans class="title" _t="订单时间"></trans>
+        <text>{{ useGlobal().$format(queryData?.payDate) }}</text>
+      </view>
 
-      <!-- 物流信息 -->
-      <view class="logistics-section" v-if="orderDetail.logistics">
-        <view class="section-header">
-          <i class="icon-font icon-truck"></i>
-          <text>物流信息</text>
-        </view>
-        <view class="logistics-info">
-          <view class="logistics-item">
-            <text class="label">快递公司</text>
-            <text class="value">{{ orderDetail.logistics.company }}</text>
-          </view>
-          <view class="logistics-item">
-            <text class="label">快递单号</text>
-            <text class="value">{{
-              orderDetail.logistics.trackingNumber
-            }}</text>
+      <!-- 地址信息 -->
+      <view class="dashed" v-if="adrData"></view>
+      <view class="address_box" v-if="adrData">
+        <trans class="title" _t="收货地址"></trans>
+        <view class="_item">
+          <view class="_item_top">
+            <view class="_top_left">
+              <view class="name"
+                >{{ adrData.firstName }}&nbsp;{{ adrData.lastName }}</view
+              >
+              <view class="phone">{{ adrData.phoneNo }}</view>
+              <view class="code">{{ adrData.zipCode }}</view>
+            </view>
           </view>
-          <view class="logistics-item" v-if="orderDetail.logistics.status">
-            <text class="label">物流状态</text>
-            <text class="value">{{ orderDetail.logistics.status }}</text>
+          <view class="_item_middle">
+            {{ adrData.country }}&nbsp;{{ adrData.province }},{{
+              adrData.city
+            }},{{ adrData.address }}
           </view>
         </view>
       </view>
 
-      <!-- 操作按钮 -->
-      <!-- <view class="action-section" v-if="getActionButtons(orderDetail.status).length > 0">
-        <view 
-          v-for="action in getActionButtons(orderDetail.status)"
-          :key="action.type"
-          class="action-btn"
-          :class="action.class"
-          @click="handleAction(action.type)"
-        >
-          {{ action.text }}
-        </view>
-      </view> -->
+      <view class="dashed"></view>
+      <view v-if="queryData.status == 300" class="popup_close" @click="buyCart">
+        <trans class="menu_text" _t="去支付" />
+      </view>
+      <view class="popup_cancle" @click="onClose">
+        <trans class="menu_text" _t="返回" />
+      </view>
     </view>
   </Theme>
 </template>
 
 <script setup>
-import { ref, onMounted } from "vue";
-import Navbar from "@/components/navbar";
-import Tab from "@/components/tabs";
+import { ref, computed, watch, onMounted, nextTick } from "vue";
+import { useSystemStore } from "@/store";
+import { useGlobal, Moneyhtml, Modal, Toast } from "@/utils";
 import { t } from "@/locale";
+import Navbar from "@/components/navbar";
 import { onLoad } from "@dcloudio/uni-app";
-import { Toast, formatCurrency } from "@/utils";
-import { SELLER_SELLER_DETAIL } from "@/api";
-
-// 订单详情数据
-const orderDetail = ref({});
+import { SELLER_SELLER_GETPAY, SHOP_ACTION, SELLER_SELLER_DETAIL } from "@/api";
 
-// Tab相关
-const tabList = ref(["商品信息", "订单详情"]);
-const activeTab = ref(0);
+const parmes = ref(null);
+const useSystem = useSystemStore();
+const queryData = ref(null);
+const symbol = computed(() => useSystem.getSymbol);
 
-// Tab切换
-const onTabChange = (index) => {
-  activeTab.value = index;
-};
-
-// 获取订单详情
-const getOrderDetail = async (orderId) => {
-  try {
-    const res = await SELLER_SELLER_DETAIL(orderId);
-    orderDetail.value = res.data;
-  } catch (error) {
-    Toast(error.msg);
-  }
-};
+const adrData = ref(null);
 
-// 格式化时间
-const formatTime = (timestamp) => {
-  if (!timestamp) return "";
-  const date = new Date(timestamp);
-  const year = date.getFullYear();
-  const month = String(date.getMonth() + 1).padStart(2, "0");
-  const day = String(date.getDate()).padStart(2, "0");
-  const hours = String(date.getHours()).padStart(2, "0");
-  const minutes = String(date.getMinutes()).padStart(2, "0");
-  return `${year}-${month}-${day} ${hours}:${minutes}`;
+const onClose = () => {
+  uni.navigateBack();
 };
 
-// 获取状态文本
-const getStatusText = (status) => {
-  const statusMap = {
-    0: "待付款",
-    100: "待发货",
-    200: "已发货",
-    300: "待发货",
-    400: "已完成",
-    500: "已取消",
-    600: "已退款",
-  };
-  return statusMap[status] || "未知状态";
+const buyCart = async (oid) => {
+  const res = await SELLER_SELLER_GETPAY(parmes.value.id);
+  toPay(res.data.sid);
 };
-
-// 获取状态描述
-const getStatusDesc = (status) => {
-  const descMap = {
-    0: "等待买家付款",
-    100: "等待您发货",
-    200: "商品已发出",
-    300: "等待您发货",
-    400: "订单已完成",
-    500: "订单已取消",
-    600: "订单已退款",
-  };
-  return descMap[status] || "";
+const toPay = (oid) => {
+  uni.navigateTo({
+    url: `/pages/shop/payment?oid=${oid}&type=sellerpay`,
+  });
 };
 
-// 获取状态图标
-const getStatusIcon = (status) => {
-  const iconMap = {
-    0: "icon-time",
-    100: "icon-package",
-    200: "icon-truck",
-    300: "icon-package",
-    400: "icon-check",
-    500: "icon-close",
-    600: "icon-refund",
-  };
-  return iconMap[status] || "icon-order";
-};
+const cancelModelRef = ref(null);
 
-// 获取操作按钮
-const getActionButtons = (status) => {
-  const buttonMap = {
-    0: [], // 待付款 - 买家操作
-    100: [{ type: "ship", text: "发货", class: "btn-primary" }],
-    200: [], // 已发货 - 买家操作
-    300: [{ type: "ship", text: "发货", class: "btn-primary" }],
-    400: [], // 已完成
-    500: [], // 已取消
-    600: [], // 已退款
-  };
-  return buttonMap[status] || [];
+const orderCancel = () => {
+  cancelModelRef.value && cancelModelRef.value.open(queryData.value.id);
 };
-
-// 处理操作
-const handleAction = (actionType) => {
-  switch (actionType) {
-    case "ship":
-      // 发货
-      Toast("发货功能待实现");
-      break;
-    case "cancel":
-      // 取消订单
-      Toast("取消订单功能待实现");
-      break;
-    case "refund":
-      // 退款
-      Toast("退款功能待实现");
-      break;
-    default:
-      break;
+const getDetail = async () => {
+  try {
+    const res = await SELLER_SELLER_DETAIL(parmes.value.id);
+    queryData.value = res.data;
+    adrData.value = JSON.parse(res.data.adrData);
+  } catch (error) {
+    Toast(error.msg);
   }
 };
-
 onLoad((options) => {
-  if (options.id) {
-    getOrderDetail(options.id);
-  }
+  parmes.value = options;
+  getDetail();
 });
 </script>
 
 <style lang="less" scoped>
 @import url("@/style.less");
 
-.wrap {
-  min-height: 100vh;
-  background: var(--bg);
-  padding-bottom: 40rpx;
+.scroll-Y {
+  height: 300rpx;
+}
+
+.scroll-view_H {
+  width: 280%;
+}
 
-  .nav_title {
+.scroll-view-item_H {
+  width: 35%;
+}
+
+.content {
+  padding: 15rpx 5%;
+  border-top: 1rpx solid #ccc;
+
+  .popup_close {
+    background-color: var(--black);
+    color: var(--light);
+    .flex_center();
+    padding: 28rpx 0;
+    border-radius: 20rpx;
+  }
+
+  .popup_cancle {
+    background-color: var(--white);
     color: var(--black);
-    font-size: 36rpx;
-    font-weight: bold;
+    .flex_center();
+    border-radius: 20rpx;
+    margin-top: 15rpx;
+    padding: 28rpx 0;
+    border: 1px solid var(--black);
+  }
+
+  .steps_box {
+    width: 100%;
+    overflow-x: scroll;
+    margin: 20rpx 0;
+    border: 1px solid #ccc;
+    padding: 10rpx 0;
   }
 
-  .status-section {
-    background: var(--light);
-    padding: 40rpx 30rpx;
-    margin-bottom: 20rpx;
-    display: flex;
-    align-items: center;
-    gap: 30rpx;
-
-    .status-icon {
-      width: 100rpx;
-      height: 100rpx;
-      border-radius: 50%;
-      background: var(--primary);
-      display: flex;
-      align-items: center;
-      justify-content: center;
-
-      .icon-font {
-        font-size: 48rpx;
-        color: var(--light);
+  .overview {
+    color: var(--text);
+    .flex();
+    gap: 24rpx;
+
+    .img_box {
+      flex: 2;
+      border-radius: 20rpx;
+
+      .img {
+        width: 100%;
+        height: 100%;
       }
     }
 
-    .status-info {
-      flex: 1;
+    .information {
+      flex: 6;
+      .size(24rpx);
 
-      .status-text {
-        font-size: 32rpx;
-        font-weight: bold;
-        color: var(--black);
-        margin-bottom: 8rpx;
+      .name {
+        // .ellipsis(2);
+        margin-bottom: 26rpx;
+        .size(28rpx);
       }
 
-      .status-desc {
-        font-size: 24rpx;
-        color: var(--text-01);
+      .num {
+        text-align: right;
       }
     }
   }
 
-  .tab-section {
-    background: var(--light);
-    margin-bottom: 20rpx;
-    padding: 0 30rpx;
-  }
-
-  .address-section,
-  .products-section,
-  .order-info-section,
-  .amount-section,
-  .logistics-section {
-    background: var(--light);
-    margin-bottom: 20rpx;
-    padding: 30rpx;
-
-    .section-header {
-      display: flex;
-      align-items: center;
-      gap: 12rpx;
-      margin-bottom: 24rpx;
-      font-size: 28rpx;
-      font-weight: bold;
-      color: var(--black);
-
-      .icon-font {
-        font-size: 32rpx;
-        color: var(--primary);
-      }
-    }
+  .orginal_price {
+    .hor(end);
   }
 
-  .address-info {
-    .receiver {
-      display: flex;
-      align-items: center;
-      gap: 20rpx;
-      margin-bottom: 12rpx;
+  .text_box {
+    .flex_position(space-between, flex-end);
+    margin: 8rpx 0;
+    .size(24rpx);
 
-      .name {
-        font-size: 28rpx;
-        font-weight: bold;
-        color: var(--black);
-      }
+    .title {
+      color: var(--text-01);
+    }
 
-      .phone {
-        font-size: 24rpx;
-        color: var(--text-01);
-      }
+    .currency,
+    .texts {
+      color: var(--red);
+      .size(28rpx);
+      font-weight: 500;
     }
 
-    .address {
-      font-size: 26rpx;
-      color: var(--text);
-      line-height: 1.5;
+    .right_value {
+      .flex();
     }
   }
 
-  .product-list {
-    .product-item {
-      display: flex;
-      gap: 20rpx;
-      padding: 20rpx 0;
-      border-bottom: 1rpx solid var(--border);
+  .price_box {
+    .flex_position(end, flex-end);
+    color: var(--black);
+    .size(28rpx);
 
-      &:last-child {
-        border-bottom: none;
-      }
+    .currency {
+      margin-right: 10rpx;
+    }
+  }
 
-      .product-image {
-        width: 120rpx;
-        height: 120rpx;
-        border-radius: 12rpx;
-        overflow: hidden;
-        background: var(--bg);
+  .texts /deep/ {
+    .price {
+      .size();
+    }
+  }
 
-        image {
-          width: 100%;
-          height: 100%;
-        }
-      }
+  .address_box {
+    margin: 8rpx 0;
+    .size(24rpx);
 
-      .product-info {
-        flex: 1;
-        display: flex;
-        flex-direction: column;
-        justify-content: space-between;
-
-        .product-name {
-          font-size: 28rpx;
-          color: var(--black);
-          line-height: 1.4;
-          margin-bottom: 8rpx;
-          overflow: hidden;
-          text-overflow: ellipsis;
-          display: -webkit-box;
-          -webkit-line-clamp: 2;
-          line-clamp: 2;
-          -webkit-box-orient: vertical;
-        }
+    .title {
+      color: var(--text-01);
+      margin-bottom: 12rpx;
+    }
 
-        .product-spec {
-          font-size: 24rpx;
-          color: var(--text-01);
-          margin-bottom: 8rpx;
-        }
+    ._item {
+      overflow: hidden;
 
-        .product-price {
-          display: flex;
-          justify-content: space-between;
-          align-items: center;
+      &_top {
+        .flex_position(space-between);
+        padding-right: 30rpx;
+        line-height: 60rpx;
 
-          .price {
-            font-size: 28rpx;
-            font-weight: bold;
-            color: var(--primary);
+        ._top_left {
+          .ver();
+
+          .name {
+            .size(36rpx);
+            font-weight: 700;
+            color: var(--text);
           }
 
-          .quantity {
-            font-size: 24rpx;
+          .phone,
+          .code {
             color: var(--text-01);
+            margin-left: 30rpx;
+            .size(28rpx);
+            font-weight: 700;
           }
         }
-      }
-    }
-  }
-
-  .info-list,
-  .amount-list,
-  .logistics-info {
-    .info-item,
-    .amount-item,
-    .logistics-item {
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
-      padding: 16rpx 0;
-      border-bottom: 1rpx solid var(--border);
-
-      &:last-child {
-        border-bottom: none;
-      }
-
-      .label {
-        font-size: 26rpx;
-        color: var(--text-01);
-      }
 
-      .value {
-        font-size: 26rpx;
-        color: var(--text);
-        text-align: right;
-
-        &.discount {
-          color: var(--success);
+        .icon-left {
+          color: var(--text-01);
+          transform: rotate(180deg);
+          .size();
         }
       }
 
-      &.total {
-        border-top: 2rpx solid var(--border);
-        margin-top: 16rpx;
-        padding-top: 20rpx;
-
-        .label {
-          font-size: 28rpx;
-          font-weight: bold;
-          color: var(--black);
-        }
-
-        .value {
-          font-size: 32rpx;
-          font-weight: bold;
-          color: var(--primary);
-        }
+      &_middle {
+        text-wrap: wrap;
+        white-space: pre-wrap;
+        word-wrap: break-word;
+        .size(28rpx);
+        color: var(--text-01);
+        margin-top: 8rpx;
+        line-height: 48rpx;
+        margin-bottom: 12rpx;
       }
     }
   }
 
-  .action-section {
-    position: fixed;
-    bottom: 0;
-    left: 0;
-    right: 0;
-    background: var(--light);
-    padding: 20rpx 30rpx;
-    padding-bottom: calc(20rpx + env(safe-area-inset-bottom));
-    border-top: 1rpx solid var(--border);
-    display: flex;
-    gap: 20rpx;
-    justify-content: flex-end;
-
-    .action-btn {
-      padding: 20rpx 40rpx;
-      border-radius: 40rpx;
-      font-size: 28rpx;
-      font-weight: bold;
-      text-align: center;
-      min-width: 120rpx;
-
-      &.btn-primary {
-        background: var(--primary);
-        color: var(--light);
-      }
+  .title_box {
+    .size(28rpx);
+    font-weight: 500;
+    color: var(--text);
+  }
 
-      &.btn-secondary {
-        background: var(--light);
-        color: var(--black);
-        border: 1rpx solid var(--border);
-      }
+  .hint {
+    .size(24rpx);
+    color: var(--text-01);
+    margin-top: 10rpx;
 
-      &.btn-danger {
-        background: var(--danger);
-        color: var(--light);
+    .steps-scroll-view {
+      flex: 1;
+      width: 100%;
+      white-space: nowrap;
+      padding: 24rpx 0;
+      scroll-behavior: smooth;
+
+      .custom-steps {
+        display: inline-flex;
+        min-width: 100%;
+
+        .step-item {
+          min-width: 120px;
+          max-width: 180px;
+          padding: 0 12rpx;
+          box-sizing: border-box;
+          white-space: normal;
+          word-break: break-word;
+          cursor: pointer;
+          transition: all 0.3s;
+
+          &:deep(.up-steps-item-title) {
+            .size(28rpx);
+            color: #333;
+            font-weight: 500;
+            // text-align: center;
+          }
+        }
       }
     }
   }

+ 1 - 2
pages/store/index.vue

@@ -63,7 +63,7 @@ const onTabChange = (item, index) => {
 
 // 获取列表数据
 const getList = (data) => {
-  console.log("订单列表数据:", data);
+  // console.log("订单列表数据:", data);
 };
 
 // 跳转到订单详情
@@ -75,7 +75,6 @@ const toOrderDetail = (order) => {
 
 // 处理订单操作
 const handleOrderAction = async (order) => {
-  console.log("订单操作:", order);
   try {
     const res = await SELLER_SELLER_GETPAY(order.id);
     uni.navigateTo({

+ 6 - 2
pages/user/index.vue

@@ -93,7 +93,11 @@
         </view>
       </view>
       <view class="footer">
-        <view class="switch_user_type" @click="switchUserType">
+        <view
+          class="switch_user_type"
+          @click="switchUserType"
+          v-if="userInfo.is_seller"
+        >
           <trans _t="切换到买家模式" />
         </view>
         <view class="exit_btn" @click="exit">
@@ -393,7 +397,7 @@ const handleAgreementModalClose = () => {
 // 切换用户类型
 const switchUserType = () => {
   Modal({
-    content: t("确定要切换到买家模式吗?切换后底部导航将显示买家功能"),
+    content: t("确定要切换到买家模式吗?"),
   }).then(() => {
     // 设置为买家类型
     useUser.setUserType(0);

+ 1 - 2
pagesBuyer/home/components/product_item.vue

@@ -135,9 +135,8 @@ const toggleFavorite = () => {
 
     .product-price {
       display: flex;
-      align-items: center;
+      align-items: baseline;
       gap: 12rpx;
-      line-height: 1;
       .current-price {
         font-size: 32rpx;
         font-weight: bold;

+ 12 - 12
pagesBuyer/home/index.vue

@@ -7,7 +7,7 @@
             <template #left>
               <view class="nav_left">
                 <image
-                  src="@/static/logo.png"
+                  src="@/static/userLogo.png"
                   class="nav_logo"
                   mode="widthFix"
                 ></image>
@@ -58,12 +58,12 @@
               </Search>
             </view>
           </view>
-          </view>
-          <view class="content">
-            <!-- 轮播图区域 -->
-            <view class="banner-section">
+        </view>
+        <view class="content">
+          <!-- 轮播图区域 -->
+          <view class="banner-section">
             <Swiper @click="swiperClick" height="108px" class="swiper-box" />
-            </view>
+          </view>
 
           <!-- Tab导航 -->
           <view class="tab-section">
@@ -85,7 +85,7 @@
                 transform: 'scale(1)',
               }"
             />
-                </view>
+          </view>
 
           <!-- 商品列表 -->
           <view class="products_section">
@@ -259,7 +259,7 @@ onMounted(() => {
     align-items: center;
 
     .nav_logo {
-      width: 284rpx;
+      width: 274rpx;
     }
   }
 
@@ -360,10 +360,10 @@ onMounted(() => {
         margin-bottom: 32rpx;
       }
 
-        .swiper-box {
-          width: 100%;
-          border-radius: 20rpx;
-          overflow: hidden;
+      .swiper-box {
+        width: 100%;
+        border-radius: 20rpx;
+        overflow: hidden;
       }
 
       .products_section {

+ 36 - 23
pagesBuyer/profile/index.vue

@@ -87,7 +87,11 @@
         </view>
       </view>
       <view class="footer">
-        <view class="switch_user_type" @click="switchUserType">
+        <view
+          class="switch_user_type"
+          @click="switchUserType"
+          v-if="userInfo.is_seller"
+        >
           <trans _t="切换到卖家模式" />
         </view>
         <view class="exit_btn" @click="exit">
@@ -195,28 +199,37 @@ const entryList = ref([
   },
 ]);
 
-const card = [
-  {
-    icon: "address",
-    text: "我的地址",
-    url: "/pages/address/index",
-  },
-  {
-    icon: "invite",
-    text: "邀请有礼",
-    url: "/pages/user/invite",
-  },
-  {
+const card = computed(() => {
+  const baseCard = [
+    {
+      icon: "address",
+      text: "我的地址",
+      url: "/pages/address/index",
+    },
+    {
+      icon: "invite",
+      text: "邀请有礼",
+      url: "/pages/user/invite",
+    },
+  ];
+
+  // 当用户不是卖家时添加商家入驻选项
+  if (userInfo.value.is_seller == 0) {
+    baseCard.push({
+      icon: "enter",
+      text: "商家入驻",
+      url: "/pagesBuyer/profile/enter",
+    });
+  }
+
+  baseCard.push({
     icon: "setting",
     text: "系统设置",
     url: "/pages/setting/index",
-  },
-  {
-    icon: "enter",
-    text: "商家入驻",
-    url: "/pagesBuyer/profile/enter",
-  },
-];
+  });
+
+  return baseCard;
+});
 
 const exit = () => {
   Modal({ content: t("确定要退出登录吗") }).then(async () => {
@@ -249,13 +262,13 @@ const handleAgreementModalClose = () => {
 // 切换用户类型
 const switchUserType = () => {
   Modal({
-    content: t("确定要切换到买家模式吗?切换后底部导航将显示买家功能"),
+    content: t("确定要切换到店铺模式吗?"),
   }).then(() => {
     // 设置为买家类型
-    useUser.setUserType(2);
+    useUser.setUserType(1);
     // 跳转到买家首页
     uni.reLaunch({
-      url: "/pagesBuyer/home/index",
+      url: "/pages/index/index",
     });
   });
 };

+ 45 - 43
pagesBuyer/store/components/product_item.vue

@@ -1,30 +1,47 @@
 <template>
   <view class="product-item" @click="handleClick">
     <view class="product-image">
-      <image :src="item.image" mode="aspectFill" />
+      <image :src="item.picurl" mode="aspectFill" />
       <!-- 视频播放图标 -->
       <view v-if="item.isVideo" class="play-icon">
         <i class="icon-font icon-play"></i>
       </view>
-      <!-- 收藏图标 -->
-      <view class="favorite-icon" @click.stop="toggleFavorite">
-        <i class="icon-font icon-star" :class="{ active: item.isFavorite }"></i>
-      </view>
     </view>
     <view class="product-info">
-      <view class="product-title">{{ item.title }}</view>
-      <view class="product-sales">{{ item.sales }}</view>
+      <view class="product-title">{{ item.goodsName }}</view>
+      <view class="product-middle">
+        <view class="product-sales">
+          <trans _t="已售" />
+          {{ item.sale }}</view
+        >
+        <view class="favorite-icon" @click.stop="toggleFavorite">
+          <image
+            class="img"
+            :src="
+              item.iscollect
+                ? '/static/seller/collect_active.png'
+                : '/static/seller/collect.png'
+            "
+          ></image>
+        </view>
+      </view>
+
       <view class="product-price">
-        <text class="current-price">¥{{ item.currentPrice }}</text>
-        <text class="original-price">¥{{ item.originalPrice }}</text>
+        <text class="current-price">{{ symbol }} {{ item.price }}</text>
+        <text class="original-price"
+          >{{ symbol }} {{ item.originalprice }}</text
+        >
       </view>
     </view>
   </view>
 </template>
 
 <script setup>
-import { defineProps, defineEmits } from "vue";
+import { computed } from "vue";
+import { useSystemStore } from "@/store";
 
+const useSystem = useSystemStore();
+const symbol = computed(() => useSystem.getSymbol.symbol);
 const props = defineProps({
   item: {
     type: Object,
@@ -80,28 +97,6 @@ const toggleFavorite = () => {
         font-size: 32rpx;
       }
     }
-
-    .favorite-icon {
-      position: absolute;
-      bottom: 20rpx;
-      right: 20rpx;
-      width: 60rpx;
-      height: 60rpx;
-      background: rgba(255, 255, 255, 0.9);
-      border-radius: 50%;
-      display: flex;
-      align-items: center;
-      justify-content: center;
-
-      .icon-star {
-        color: var(--text-01);
-        font-size: 32rpx;
-
-        &.active {
-          color: var(--primary);
-        }
-      }
-    }
   }
 
   .product-info {
@@ -112,28 +107,35 @@ const toggleFavorite = () => {
       color: var(--black);
       line-height: 1.4;
       margin-bottom: 12rpx;
-      overflow: hidden;
-      text-overflow: ellipsis;
-      display: -webkit-box;
-      -webkit-line-clamp: 2;
-      -webkit-box-orient: vertical;
+      .ellipsis(2);
     }
-
-    .product-sales {
-      font-size: 24rpx;
-      color: var(--text-01);
+    .product-middle {
+      width: 100%;
+      .flex_position(space-between);
       margin-bottom: 12rpx;
+      .product-sales {
+        .size(24rpx);
+        color: #fe7907;
+      }
+      .favorite-icon {
+        width: 32rpx;
+        height: 32rpx;
+        .img {
+          width: 100%;
+          height: 100%;
+        }
+      }
     }
 
     .product-price {
       display: flex;
-      align-items: center;
+      align-items: baseline;
       gap: 12rpx;
 
       .current-price {
         font-size: 32rpx;
         font-weight: bold;
-        color: var(--primary);
+        color: var(--red);
       }
 
       .original-price {

+ 19 - 2
pagesBuyer/store/components/shop_item.vue

@@ -17,13 +17,17 @@
         </view>
       </view>
       <view class="shop-arrow">
-        <up-rate
+        <!-- <up-rate
           readonly
           :count="5"
           size="16"
           active-color="var(--red)"
           v-model="item.score"
-        ></up-rate>
+        ></up-rate> -->
+        <view class="purchase—box">
+          <text class="num">{{ item.sale }}</text>
+          <trans _t="人购买" />
+        </view>
       </view>
     </view>
 
@@ -124,6 +128,19 @@ const handleProductClick = (product) => {
     }
 
     .shop-arrow {
+      .purchase—box {
+        height: 36rpx;
+        line-height: 30rpx;
+        border-radius: 0 10rpx 0 10rpx;
+        border: var(--danger-bor);
+        padding: 0 18rpx;
+        font-size: 20rpx;
+        color: var(--red);
+        .num {
+          font-size: 22rpx;
+          font-weight: 700;
+        }
+      }
       .icon-right {
         color: var(--text-01);
         font-size: 24rpx;

+ 44 - 59
pagesBuyer/store/detail.vue

@@ -24,48 +24,45 @@
       <view class="shop-info-section">
         <view class="shop-header">
           <view class="shop-avatar">
-            <image :src="shopInfo.avatar" mode="aspectFill" />
+            <image :src="shopInfo.logo" mode="aspectFill" />
           </view>
           <view class="shop-details">
             <view class="shop-name">{{ shopInfo.name }}</view>
             <view class="shop-stats">
-              <text class="followers">{{ shopInfo.followers }}粉丝</text>
+              <view
+                >{{ shopInfo.fans }}
+                <trans class="font" _t="粉丝"></trans>
+              </view>
               <text class="divider">|</text>
-              <text class="rating">{{ shopInfo.rating }}%好评率</text>
+              <view
+                >{{ shopInfo.score }}%
+                <trans class="font" _t="好评率"></trans>
+              </view>
             </view>
           </view>
           <view class="follow-btn" @click="toggleFollow">
             <i class="icon-font icon-plus"></i>
-            <text>{{ isFollowed ? "已关注" : "关注" }}</text>
+            <text>{{ shopInfo.status ? "已关注" : "关注" }}</text>
           </view>
         </view>
       </view>
 
       <!-- 商品列表 -->
       <view class="content">
-        <List
-          ref="listRef"
-          :defaultParams="defaultParams"
-          @datas="getList"
-          :isLoading="false"
-        >
-          <template #item="{ item }">
-            <productItem
-              :item="item"
-              @click="toProductDetail"
-              @favorite="toggleProductFavorite"
-            />
-          </template>
-        </List>
+        <view v-for="(item, index) in shopGoods" :key="index" class="list">
+          <productItem
+            :item="item"
+            @click="toProductDetail"
+            @favorite="toggleProductFavorite"
+          />
+        </view>
       </view>
     </view>
-    <Tabbar page="shop" />
   </Theme>
 </template>
 
 <script setup>
 import { ref, reactive, onMounted } from "vue";
-import Tabbar from "@/components/tabbar";
 import Navbar from "@/components/navbar";
 import Search from "@/components/input";
 import List from "@/components/list";
@@ -87,14 +84,8 @@ const defaultParams = reactive({
 });
 
 // 店铺信息
-const shopInfo = ref({
-  id: 1,
-  name: "香皂旗舰店",
-  avatar: "/static/shop/shop1.png",
-  followers: 100,
-  rating: 90,
-});
-
+const shopInfo = ref({});
+const shopGoods = ref([]);
 // 是否已关注
 const isFollowed = ref(false);
 
@@ -178,6 +169,7 @@ const onSearchInput = (value) => {
 // 搜索点击
 const onSearchClick = () => {
   console.log("搜索:", searchValue.value);
+  getList();
 };
 
 // Tab切换
@@ -210,16 +202,13 @@ const getList = (data) => {
     filteredProducts.value = products.value;
   }
 
-  // 设置到List组件
-  if (listRef.value) {
-    listRef.value.setList(filteredProducts.value);
-  }
+  getDetail();
 };
 
 // 跳转到商品详情
 const toProductDetail = (product) => {
   uni.navigateTo({
-    url: `/pagesBuyer/product/detail?id=${product.id}`,
+    url: `/pagesBuyer/shop/detail?id=${product.id}`,
   });
 };
 
@@ -232,8 +221,8 @@ const toggleProductFavorite = (product) => {
 const getDetail = async () => {
   try {
     const res = await SELLER_SELLER_INFO(defaultParams);
-    shopInfo.value = res.data;
-    isCollect.value = res.data.isCollect ? true : false;
+    shopInfo.value = res.data.seller;
+    shopGoods.value = res.data.goods || [];
   } catch (error) {
     Toast(error.msg);
   }
@@ -243,9 +232,6 @@ onLoad((options) => {
     defaultParams.id = options.id;
     getDetail();
   }
-
-  // 初始化数据
-  getList();
 });
 </script>
 
@@ -287,18 +273,18 @@ onLoad((options) => {
     padding: 30rpx;
     background: var(--black);
     border-bottom: 1rpx solid var(--border);
-
+    color: var(--light);
     .shop-header {
       display: flex;
       align-items: center;
 
       .shop-avatar {
-        width: 100rpx;
-        height: 100rpx;
+        width: 80rpx;
+        height: 80rpx;
         border-radius: 50%;
         overflow: hidden;
         margin-right: 20rpx;
-        background: var(--primary);
+        background: var(--light);
 
         image {
           width: 100%;
@@ -312,7 +298,7 @@ onLoad((options) => {
         .shop-name {
           font-size: 32rpx;
           font-weight: bold;
-          color: var(--black);
+
           margin-bottom: 8rpx;
         }
 
@@ -320,11 +306,13 @@ onLoad((options) => {
           display: flex;
           align-items: center;
           font-size: 24rpx;
-          color: var(--text-01);
+          .font {
+            color: rgba(255, 255, 255, 0.8);
+          }
 
           .divider {
-            margin: 0 8rpx;
-            color: var(--text-02);
+            margin: 0 20rpx;
+            color: #cccccc;
           }
         }
       }
@@ -332,14 +320,13 @@ onLoad((options) => {
       .follow-btn {
         display: flex;
         align-items: center;
-        gap: 8rpx;
-        padding: 12rpx 24rpx;
+        padding: 0 24rpx;
+        height: 44rpx;
+        line-height: 44rpx;
         background: var(--light);
-        border: 1rpx solid var(--border);
-        border-radius: 40rpx;
-        color: var(--black);
+        border-radius: 20rpx;
+        color: var(--text);
         font-size: 24rpx;
-        font-weight: bold;
 
         .icon-plus {
           font-size: 20rpx;
@@ -349,16 +336,14 @@ onLoad((options) => {
   }
 
   .content {
-    flex: 1;
+    .flex();
+    flex-wrap: wrap;
+    gap: 8rpx 16rpx;
     padding: 20rpx 30rpx;
     padding-bottom: calc(90rpx + constant(safe-area-inset-bottom));
     padding-bottom: calc(90rpx + env(safe-area-inset-bottom));
-
-    // 网格布局样式
-    :deep(.list-container) {
-      display: grid;
-      grid-template-columns: 1fr 1fr;
-      gap: 20rpx;
+    .list {
+      width: calc((100% - 16rpx) / 2);
     }
   }
 }

+ 2 - 2
pagesBuyer/store/index.vue

@@ -122,14 +122,14 @@ const getList = (data) => {
 // 跳转到店铺详情
 const toShopDetail = (shop) => {
   uni.navigateTo({
-    url: `/pagesBuyer/store/detail?id=${shop.id}`,
+    url: `/pagesBuyer/store/detail?id=${shop.userid}`,
   });
 };
 
 // 跳转到商品详情
 const toProductDetail = (product) => {
   uni.navigateTo({
-    url: `/pagesBuyer/product/detail?id=${product.id}`,
+    url: `/pagesBuyer/shop/detail?id=${product.id}`,
   });
 };
 

+ 0 - 5
static/css/main.css

@@ -3800,11 +3800,6 @@ scroll-view.cu-steps .cu-item {
 	text-transform: Lowercase;
 }
 
-.text-price::before {
-	content: "¥";
-	font-size: 80%;
-	margin-right: 4rpx;
-}
 
 .text-cut {
 	text-overflow: ellipsis;

BIN
static/seller/collect.png


BIN
static/seller/collect_active.png


BIN
static/userLogo.png