7 Коміти 7d4d14d7f8 ... 4b9253e41c

Автор SHA1 Опис Дата
  hurx 4b9253e41c 修改 1 день тому
  肖路 2c73d013db refactor(layout): 重构头部和底部导航为动态配置 3 днів тому
  weixin_52219567 7c6d00ca89 放大 4 днів тому
  牛奶 a0833b158c 样式优化 4 днів тому
  牛奶 3b65ca4f47 11 4 днів тому
  weixin_52219567 2e385362fa 优化样式 4 днів тому
  weixin_52219567 37a0c2e784 修复bug 1 тиждень тому

+ 22 - 0
src/api/home/index.ts

@@ -239,3 +239,25 @@ export function getHomeNav(title: any) {
     }
   });
 }
+
+//搜索底部导航
+export function getBottomNav(title: any) {
+  return request({
+    url: '/system/indexSystem/getBottomNav',
+    method: 'get',
+    params: {
+      title: title // 将参数传递给后端  页面类型
+    }
+  });
+}
+
+//搜索头部导航
+export function getHeaderNav(title: any) {
+  return request({
+    url: '/system/indexSystem/getHeaderNav',
+    method: 'get',
+    params: {
+      title: title // 将参数传递给后端  页面类型
+    }
+  });
+}

+ 1 - 0
src/api/types.ts

@@ -28,6 +28,7 @@ export interface LoginData {
   grantType: string;
   mobile?: string;
   smsCode?: string;
+  phonenumber?: string;
 }
 
 /**

+ 44 - 14
src/layout/components/foot.vue

@@ -17,20 +17,17 @@
         </div>
         <div class="head-right">
           <div class="info-bos flex-row-start">
-            <div style="margin-right: 140px">
-              <div class="info-title">客户服务</div>
-              <div class="info-text" style="margin-top: 0">在线客服</div>
-              <div class="info-text">问题反馈</div>
-            </div>
-            <div style="margin-right: 140px">
-              <div class="info-title">客户</div>
-              <div class="info-text" style="margin-top: 0">客户管理</div>
-              <div class="info-text">供应商合作</div>
-            </div>
-            <div>
-              <div class="info-title">联系</div>
-              <div class="info-text" style="margin-top: 0">帮助中心</div>
-              <div class="info-text">关于我们</div>
+            <div v-for="(navItem, index) in bottomNavList" :key="index" :style="{ marginRight: index < bottomNavList.length - 1 ? '140px' : '0' }">
+              <div class="info-title">{{ navItem.navigationName }}</div>
+              <div
+                v-for="(link, linkIndex) in navItem.children"
+                :key="linkIndex"
+                class="info-text"
+                :style="{ marginTop: linkIndex === 0 ? '0' : '12px' }"
+                @click="handleNavClick(link)"
+              >
+                {{ link.navigationName }}
+              </div>
             </div>
           </div>
           <div class="contact">
@@ -61,11 +58,39 @@
 
 <script setup lang="ts">
 import { getPlatformConfigList } from '@/api/breg/index';
+import { getBottomNav } from '@/api/home/index';
+import { handleTree } from '@/utils/ruoyi';
+
 const icpNo = ref<any>('');
 const license = ref<any>('');
 const wechatLink = ref<any>('');
 const weiboLink = ref<any>('');
 const servicePhone = ref<any>('');
+const bottomNavList = ref<any[]>([]);
+
+// 获取底部导航数据
+const fetchBottomNav = async () => {
+  try {
+    const res = await getBottomNav('footer'); // 使用 footer 作为页面类型参数
+    if (res.code == 200 && res.data) {
+      // 后端返回的是扁平列表,使用 handleTree 转换为树形结构
+      // parentId 为 0、null 或 undefined 的是父级节点
+      bottomNavList.value = handleTree(res.data, 'id', 'parentId', 'children');
+    }
+  } catch (error) {
+    console.error('获取底部导航失败:', error);
+  }
+};
+
+// 处理导航点击事件
+const handleNavClick = (link: any) => {
+  if (link.url) {
+    window.open(link.url, '_blank');
+  } else if (link.link) {
+    window.open(link.link, '_blank');
+  }
+};
+
 getPlatformConfigList({ configKey: 'icpNo' }).then((res) => {
   if (res.code == 200) {
     if (res.rows && res.rows.length > 0) {
@@ -105,6 +130,11 @@ getPlatformConfigList({ configKey: 'servicePhone' }).then((res) => {
     }
   }
 });
+
+// 组件挂载时获取底部导航数据
+onMounted(() => {
+  fetchBottomNav();
+});
 </script>
 
 <style lang="scss" scoped>

+ 31 - 4
src/layout/components/header.vue

@@ -30,6 +30,8 @@
             </el-icon>
           </div>
           <div class="userInfo-box">姓名:{{ userInfo.user.nickName }}</div>
+          <div class="userInfo-box">部门:{{ userInfo.user.deptName || '' }}</div>
+
           <div class="userInfo-box" @click="onlogout">退出登录</div>
         </div>
         <div v-if="!userInfo.user" class="header-text end" @click="onPath('/login')" style="cursor: pointer">请登录</div>
@@ -38,9 +40,9 @@
         <div v-else class="header-text" @click="goEnterprise">切换到企业</div> -->
         <div class="header-text" @click="onPath('/order/orderManage')">我的订单</div>
         <div v-if="userInfo.user && userInfo.user.userSonType != 4" class="header-text" @click="onPath('/enterprise/companyInfo')">会员中心</div>
-        <div class="header-text" @click="onPath('/theme?id=1')">人才招聘</div>
-        <div class="header-text">帮助中心</div>
-        <div class="header-text">在线客服</div>
+        <template v-for="(item, index) in headerNavList" :key="index">
+          <div class="header-text" @click="handleNavClick(item)">{{ item.navigationName }}</div>
+        </template>
       </div>
     </div>
   </div>
@@ -51,9 +53,11 @@ import { useUserStore } from '@/store/modules/user';
 import { onPath } from '@/utils/siteConfig';
 import Cookies from 'js-cookie';
 import { getInfo } from '@/api/login';
+import { getHeaderNav } from '@/api/home/index';
 const route = useRoute();
 const userInfoOpen = ref<any>(false);
 const userInfo = ref<any>({});
+const headerNavList = ref<any[]>([]);
 
 onMounted(() => {
   // getCurrentLocation();
@@ -65,6 +69,8 @@ onMounted(() => {
       }
     });
   }
+  // 获取头部导航数据
+  fetchHeaderNav();
 });
 
 const handleMouseEnter = () => {
@@ -145,6 +151,27 @@ const onlogout = () => {
       onPath('/login');
     });
 };
+
+// 获取头部导航数据
+const fetchHeaderNav = async () => {
+  try {
+    const res = await getHeaderNav('header'); // 使用 header 作为页面类型参数
+    if (res.code == 200 && res.data) {
+      headerNavList.value = res.data;
+    }
+  } catch (error) {
+    console.error('获取头部导航失败:', error);
+  }
+};
+
+// 处理导航点击事件
+const handleNavClick = (item: any) => {
+  if (item.url) {
+    onPath(item.url);
+  } else if (item.link) {
+    onPath(item.link);
+  }
+};
 </script>
 
 <style lang="scss" scoped>
@@ -194,7 +221,7 @@ const onlogout = () => {
         &.open {
           background-color: #ffffff;
           box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.12);
-          height: 110px;
+          height: 130px;
           overflow: visible;
 
           .userInfo-customer {

+ 20 - 1
src/layout/components/nav.vue

@@ -1,6 +1,6 @@
 <template>
   <!-- 导航组件 -->
-  <div class="nav-pages">
+  <div class="nav-pages" :class="meta.info ? 'nav-pages1' : ''">
     <div class="nav-bos" :style="{ 'max-width': route.path == '/item' ? '1600px' : '1500px' }" @mouseleave="leaveClassify">
       <div class="nav-all flex-row-start" @mouseenter="openClassify">
         <img src="@/assets/images/layout/layout2.png" alt="" />
@@ -71,6 +71,9 @@ const navList = ref<any>([
   { title: '解决方案', url: '/plan' },
   { title: '特价专区', url: '/search/special' }
 ]);
+const props = defineProps<{
+  meta?: any;
+}>();
 
 onMounted(async () => {
   // 获取分类
@@ -121,6 +124,7 @@ const leaveClassify = () => {
     display: flex;
     position: relative;
     padding-top: 15px;
+    // justify-content: center;
 
     .nav-all {
       width: 234px;
@@ -130,6 +134,8 @@ const leaveClassify = () => {
       font-size: 15px;
       color: #ffffff;
       cursor: pointer;
+      // position: absolute;
+      // left: 0;
 
       img {
         height: 16px;
@@ -284,5 +290,18 @@ const leaveClassify = () => {
       }
     }
   }
+
+  &.nav-pages1 {
+    .nav-bos {
+      width: 1200px;
+      min-width: 0;
+      max-width: 1200px;
+      @media (min-width: 1600px) {
+        width: 1600px;
+        min-width: 0;
+        max-width: 1600px;
+      }
+    }
+  }
 }
 </style>

+ 12 - 1
src/layout/components/search.vue

@@ -1,6 +1,6 @@
 <template>
   <!-- 搜索组件 -->
-  <div class="search-bos" :style="{ 'background': meta.workbench ? '#F4F4F4' : '#ffffff' }">
+  <div :class="meta.info ? 'search-bos1' : ''" class="search-bos" :style="{ 'background': meta.workbench ? '#F4F4F4' : '#ffffff' }">
     <div class="search-content">
       <img @click="onPath('/')" class="logo logo2" v-if="route.path == '/indexMro'" src="@/assets/images/mro.png" alt="" />
       <img @click="onPath('/')" class="logo logo2" v-else-if="route.path == '/indexFuli'" src="@/assets/images/fuli.png" alt="" />
@@ -93,6 +93,17 @@ getSearchTitle(1).then((res) => {
     padding: 0 30px;
   }
 
+  &.search-bos1 {
+    .search-content {
+      min-width: 1200px;
+      max-width: 1200px;
+      @media (min-width: 1600px) {
+        min-width: 1600px;
+        max-width: 1600px;
+      }
+    }
+  }
+
   .logo {
     cursor: pointer;
     border-radius: 4px;

+ 2 - 2
src/layout/index.vue

@@ -1,8 +1,8 @@
 <template>
   <div class="app-wrapper">
     <Header v-if="meta.header != 'hide'" />
-    <Search v-if="meta.search != 'hide'" />
-    <Nav v-if="meta.nav" />
+    <Search v-if="meta.search != 'hide'" :meta="meta" />
+    <Nav v-if="meta.nav" :meta="meta" />
     <Breadcrumb v-if="meta.breadcrumb" />
     <div class="pages-bos" :class="meta.workbench ? 'pages-bos1' : 'pages-bos2'" :style="{ minHeight: boxHeight }">
       <Workbench ref="WorkbenchRef" v-if="meta.workbench" />

+ 1 - 1
src/router/index.ts

@@ -168,7 +168,7 @@ export const constantRoutes: RouteRecordRaw[] = [
         path: '/item',
         component: () => import('@/views/item/index.vue'),
         name: 'Item',
-        meta: { title: '商品详情', nav: true, breadcrumbColor: '#F4F4F4' }
+        meta: { title: '商品详情', nav: true, breadcrumbColor: '#F4F4F4', info: true }
       },
       {
         path: '/itemPreview',

+ 9 - 2
src/views/cart/index.vue

@@ -22,13 +22,16 @@
         <el-table-column type="selection" width="55" />
         <el-table-column label="商品信息" minWidth="490">
           <template #default="scope">
-            <div class="cart-info">
+            <div class="cart-info" @click="onPath('/item?id=' + scope.row.shoppingCartId + '&productNo=' + scope.row.productNo)">
               <img class="cart-img" :src="scope.row.productImage" alt="" />
               <div class="cart-text">
                 <div class="text1">{{ scope.row.itemName }}</div>
                 <div class="text2">
                   <span>单位:{{ scope.row.unitName }}</span>
                 </div>
+                <div class="text2">
+                  <span>编号:{{ scope.row.productNo }}</span>
+                </div>
               </div>
             </div>
           </template>
@@ -77,13 +80,16 @@
         <el-table-column type="selection" width="55" />
         <el-table-column label="商品信息" minWidth="490">
           <template #default="scope">
-            <div class="cart-info">
+            <div class="cart-info" @click="onPath('/item?id=' + scope.row.shoppingCartId + '&productNo=' + scope.row.productNo)">
               <img class="cart-img" :src="scope.row.productImage" alt="" />
               <div class="cart-text">
                 <div class="text1">{{ scope.row.itemName }}</div>
                 <div class="text2">
                   <span>单位:{{ scope.row.unitName }}</span>
                 </div>
+                <div class="text2">
+                  <span>编号:{{ scope.row.productNo }}</span>
+                </div>
                 <!-- <div class="text3">当前商品库存不足,当前库存量:0</div> -->
               </div>
             </div>
@@ -366,6 +372,7 @@ const handleChange = (row: any) => {
     width: 490px;
     height: 94px;
     display: flex;
+    cursor: pointer;
     .cart-img {
       width: 94px;
       height: 94px;

+ 2 - 2
src/views/home/jdcomponents/JDBannerCards.vue

@@ -10,7 +10,7 @@
           </div>
         </div>
         <div class="dots">
-          <span v-for="(_, i) in carouseData" :key="i" :class="{ active: currentIdx === i }" @click="carouseData = i"></span>
+          <span v-for="(_, i) in carouseData" :key="i" :class="{ active: currentIdx === i }" @click="currentIdx = i"></span>
         </div>
       </div>
 
@@ -112,7 +112,7 @@
 <script setup lang="ts">
 import { carouselList, adModuleConfigList } from '@/api/home/index-enterprise';
 import { onPath } from '@/utils/siteConfig';
-const currentIdx = ref(0);
+const currentIdx = ref<any>(0);
 const carouseData = ref<any>([]);
 const dataInfo1 = ref<any>({});
 const dataInfo2 = ref<any>({});

+ 18 - 10
src/views/home/jdcomponents/JDProducts.vue

@@ -52,7 +52,7 @@
         <div class="p-info">
           <div class="p-name">
             <span class="tag-zy">{{ p.isSelf == 1 ? '自营' : '非自营' }}</span>
-            {{ p.name || p.itemName || '' }}
+            <span class="tag-name">{{ p.name || p.itemName || '' }}</span>
           </div>
           <div class="p-price-row">
             <span class="p-currency">¥</span>
@@ -109,6 +109,8 @@ const noMore = ref(false);
 
 recommendThemeConfig({}).then((res) => {
   if (res.code == 200) {
+    document.documentElement.style.setProperty('--hover-jd3', res.data.themeColor || '#E7000B');
+    document.documentElement.style.setProperty('--hover-jd4', res.data.productThemeColor || '#E7000B');
     categories.value = res.data.categoryConfigList;
     categories.value.forEach((item: any) => {
       item.goodsList = [];
@@ -259,7 +261,10 @@ const handlePageScroll = () => {
 };
 
 onMounted(() => {
-  setTimeout(checkScroll, 100);
+  nextTick(() => {
+    setTimeout(checkScroll, 500);
+  });
+
   // 添加页面滚动监听
   window.addEventListener('scroll', handlePageScroll);
 });
@@ -270,7 +275,7 @@ onUnmounted(() => {
 });
 </script>
 
-<style scoped>
+<style lang="scss" scoped>
 .products-section {
   margin-top: 24px;
   background: #fff;
@@ -319,7 +324,7 @@ onUnmounted(() => {
 }
 .cat-item.active .c-t,
 .cat-item.active .c-s {
-  color: #e1251b;
+  color: var(--hover-jd3);
 }
 
 .cat-img {
@@ -415,6 +420,9 @@ onUnmounted(() => {
   transform: translateY(-4px);
   box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08);
   cursor: pointer;
+  .tag-name {
+    color: var(--hover-jd4);
+  }
 }
 
 .p-img-box {
@@ -531,8 +539,8 @@ onUnmounted(() => {
   flex-shrink: 0;
 }
 .btn-cart-icon:hover {
-  border-color: #e1251b;
-  color: #e1251b;
+  border-color: var(--hover-jd4);
+  color: var(--hover-jd4);
 }
 
 .btn-buy {
@@ -556,8 +564,8 @@ onUnmounted(() => {
 
 /* 悬停卡片时,按钮直接变为红色,文字改变 */
 .p-card:hover .btn-buy {
-  background: #e1251b;
-  border-color: #e1251b;
+  background: var(--hover-jd4);
+  border-color: var(--hover-jd4);
   color: #fff;
 }
 .p-card:hover .txt-normal {
@@ -569,8 +577,8 @@ onUnmounted(() => {
 
 /* 鼠标悬停在按钮本身时,保持红色 */
 .p-card .btn-buy:hover {
-  background: #c81623;
-  border-color: #c81623;
+  background: var(--hover-jd4);
+  border-color: var(--hover-jd4);
 }
 
 .empty-bos {

+ 1 - 1
src/views/home/jdcomponents/JDScene.vue

@@ -24,7 +24,7 @@
               </div>
             </div>
             <div class="item-pic">
-              <el-image class="item-img" :src="s.imageUrl" />
+              <el-image class="item-img" :src="s.imageUrl" :fit="'cover'" />
             </div>
           </div>
         </div>

+ 2 - 0
src/views/home/jdcomponents/JDUserPanel.vue

@@ -10,6 +10,7 @@
       </div>
       <div class="u-info">
         <p class="name">{{ userInfo.nickName }}</p>
+        <p class="links">{{ userInfo.customerName }}</p>
         <!-- <p @click="onPath('/breg')" class="links">切换企业账号<span class="divider">|</span>注册</p> -->
       </div>
     </div>
@@ -121,6 +122,7 @@ const chunkArray = (arr, size) => {
 getInfo().then((res) => {
   if (res.code == 200) {
     userInfo.value = res.data.user;
+    userInfo.value.customerName = res.data.customerName;
   }
 });
 

+ 7 - 1
src/views/item/index.vue

@@ -113,6 +113,7 @@
       <div class="shop-right">
         <div class="shop-info">
           <div class="right-title">{{ dataInfo.itemName || '' }}</div>
+          <div class="right-title1">{{ dataInfo.promotionTitle || '' }}</div>
           <div class="right-price flex-row-between">
             <div class="flex-row-start">
               <div class="price1">
@@ -735,12 +736,17 @@ const handleMouseMove = (e: MouseEvent) => {
       .shop-info {
         padding: 20px 20px 30px 20px;
         .right-title {
-          min-height: 56px;
+          // min-height: 56px;
           font-weight: 600;
           font-size: 20px;
           color: #101828;
         }
 
+        .right-title1 {
+          font-size: 16px;
+          color: #999999;
+        }
+
         .right-num {
           font-size: 14px;
           color: #6a7282;

+ 6 - 9
src/views/item/preview.vue

@@ -236,7 +236,6 @@ import {
   getProductPreview
 } from '@/api/goods/index';
 
-
 const route = useRoute();
 const id = ref<any>(null);
 const dataInfo = ref<any>({});
@@ -276,7 +275,6 @@ const initData = () => {
   getInfoId();
 
   if (token) {
-    console.log('收藏');
     getCollection();
     // 浏览记录
     addProductBrowsingHistory(id.value).then((res) => {});
@@ -386,7 +384,6 @@ const onCart = () => {
   });
 };
 
-
 // 新增:放大功能相关
 const showZoom = ref(false);
 const mainImageRef = ref<HTMLImageElement | null>(null);
@@ -410,7 +407,7 @@ const handleMouseMove = (e: MouseEvent) => {
 
   // 遮罩层尺寸 (假设放大倍数为2,遮罩层大小为容器的一半,即正方形)
   // 如果希望遮罩层固定大小,可以写死,例如 200px
-  const maskSize = width / 2;
+  const maskSize = 200;
 
   // 计算遮罩层左上角的位置 (让鼠标位于遮罩层中心)
   let maskX = x - maskSize / 2;
@@ -532,7 +529,7 @@ const handleMouseMove = (e: MouseEvent) => {
           border-radius: 5px;
           overflow: hidden;
           position: relative; /* 关键:作为遮罩层的定位父级 */
-          cursor: crosshair; /* 关键:鼠标变成十字准星 */
+          cursor: move; /* 关键:鼠标变成十字准星 */
 
           @media (min-width: 1600px) {
             width: 860px;
@@ -548,10 +545,10 @@ const handleMouseMove = (e: MouseEvent) => {
           // 新增:遮罩层样式
           .zoom-mask {
             position: absolute;
-            width: 50%; /* 对应2倍放大,宽高各占50%形成正方形 */
-            height: 50%; /* 如果图片不是正方形,这里可能需要调整以保持正方形,但通常跟随容器比例即可 */
-            background-color: rgba(255, 255, 255, 0.3); /* 半透明白色 */
-            border: 1px solid #ccc; /* 边框 */
+            width: 200px; /* 容器宽度的一半 */
+            height: 200px; /* 容器高度的一半 */
+            // background-color: rgba(255, 255, 255, 0.3); /* 半透明白色 */
+            // border: 1px solid #ccc; /* 边框 */
             pointer-events: none; /* 关键:让鼠标事件穿透遮罩层,避免闪烁 */
             z-index: 5;
           }

+ 11 - 6
src/views/login.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="login">
-    <div>
+    <div style="height:70%">
       <img @click="onPath('/')" class="head" src="@/assets/images/head.png" alt="" />
       <div class="login-info flex-row-between">
         <div></div>
@@ -157,6 +157,7 @@ const handleLogin = () => {
         localStorage.removeItem('rememberMe');
       }
       // 调用登录
+      loginForm.value.phonenumber = loginForm.value.mobile;
       const [err] = await to(userStore.login(loginForm.value));
       if (!err) {
         const redirectUrl = redirect.value || '/';
@@ -258,7 +259,7 @@ onMounted(() => {
 <style lang="scss" scoped>
 .login {
   height: 100%;
-  min-height: 700px;
+  // min-height: 700px;
   width: 100%;
   background-image: url('@/assets/images/login/login1.png');
   overflow: auto;
@@ -279,7 +280,8 @@ onMounted(() => {
 
   .login-info {
     width: 100%;
-    height: 600px;
+    // height: 600px;
+    height: 100%;
     background-image: url('@/assets/images/login/login2.png');
     overflow: hidden;
     background-position: center center;
@@ -290,13 +292,16 @@ onMounted(() => {
     padding: 0 5%;
 
     .login-bos {
-      width: 420px;
-      height: 420px;
+      height: 90%;
+      max-height: 420px;
+      aspect-ratio: 1;
+      // width: 420px;
+      // height: 420px;
       background: #ffffff;
       border-radius: 30px 30px 30px 30px;
       display: flex;
       flex-direction: column;
-      justify-content: center;
+      justify-content: space-around;
       align-items: center;
 
       :deep(.el-form-item) {

+ 1 - 1
src/views/order/orderManage/applyAfter.vue

@@ -529,7 +529,7 @@ const loadReturnDetail = async () => {
             productImage: p.productImage || '',
             name: p.productName || '',
             spec: `${p.productUnit || ''} ${p.productNo || ''}`.trim(),
-            unitPrice: Number(p.returnPrice) || Number(p.orderPrice) || 0,
+            unitPrice: Number(p.unitPrice) || Number(p.orderPrice) || 0,
             soldQty: Number(p.returnQuantity) || 0,
             availableQty: Number(p.returnQuantity) || 0,
             returnQuantity: Number(p.returnQuantity) || 0,

+ 18 - 21
src/views/trad/index.vue

@@ -465,27 +465,24 @@ const disabledDate = (date: Date) => {
         }
       }
 
-      :deep(.el-select__wrapper) {
-        border: none;
-        /* 可选:去除聚焦时的高亮 */
-        box-shadow: none;
-        outline: none;
-        background: #f4f6f8;
-      }
-      :deep(.el-input__wrapper) {
-        border: none;
-        /* 可选:去除聚焦时的高亮 */
-        box-shadow: none;
-        outline: none;
-        background: #f4f6f8;
-      }
-      :deep(.el-textarea__inner) {
-        border: none;
-        /* 可选:去除聚焦时的高亮 */
-        box-shadow: none;
-        outline: none;
-        background: #f4f6f8;
-      }
+      // :deep(.el-select__wrapper) {
+      //   border: none;
+      //   box-shadow: none;
+      //   outline: none;
+      //   background: #f4f6f8;
+      // }
+      // :deep(.el-input__wrapper) {
+      //   border: none;
+      //   box-shadow: none;
+      //   outline: none;
+      //   background: #f4f6f8;
+      // }
+      // :deep(.el-textarea__inner) {
+      //   border: none;
+      //   box-shadow: none;
+      //   outline: none;
+      //   background: #f4f6f8;
+      // }
     }
     .cart-info {
       // width: 490px;