Explorar el Código

docs: init初始化项目

chenpeng hace 1 mes
commit
87268888d3
Se han modificado 100 ficheros con 938 adiciones y 0 borrados
  1. 10 0
      .gitignore
  2. 5 0
      .npmrc
  3. 7 0
      .vscode/settings.json
  4. 21 0
      LICENSE
  5. 19 0
      README.md
  6. 41 0
      api/model/blogs.ts
  7. 83 0
      api/model/brand.ts
  8. 52 0
      api/model/cart.ts
  9. 94 0
      api/model/common.ts
  10. 54 0
      api/model/feature.ts
  11. 91 0
      api/model/goods.ts
  12. 80 0
      api/model/message.ts
  13. 60 0
      api/model/my.ts
  14. 16 0
      api/model/notice.ts
  15. 50 0
      api/model/order.ts
  16. 69 0
      api/model/user.ts
  17. 89 0
      app.vue
  18. 16 0
      app/router.options.ts
  19. BIN
      assets/fonts/BodoniModa.ttf
  20. BIN
      assets/fonts/Georgia Bold.ttf
  21. BIN
      assets/fonts/Roboto-Medium.ttf
  22. BIN
      assets/fonts/Roboto-Regular.ttf
  23. BIN
      assets/fonts/bodoni-72.ttf
  24. BIN
      assets/fonts/custom_font.woff2
  25. BIN
      assets/fonts/shanhai.ttf
  26. 1 0
      assets/icons/arrow.svg
  27. 1 0
      assets/icons/arrowL.svg
  28. 1 0
      assets/icons/arrowR.svg
  29. 14 0
      assets/icons/arrowRight.svg
  30. 1 0
      assets/icons/arrowRotate.svg
  31. 1 0
      assets/icons/cart.svg
  32. 0 0
      assets/icons/dashboard.svg
  33. 25 0
      assets/icons/delete.svg
  34. 0 0
      assets/icons/enclosure.svg
  35. 1 0
      assets/icons/favorite.svg
  36. 1 0
      assets/icons/file.svg
  37. 1 0
      assets/icons/language.svg
  38. 5 0
      assets/icons/like.svg
  39. 0 0
      assets/icons/lock.svg
  40. 0 0
      assets/icons/logout.svg
  41. 1 0
      assets/icons/message.svg
  42. 1 0
      assets/icons/notice.svg
  43. 0 0
      assets/icons/order.svg
  44. 1 0
      assets/icons/quotation.svg
  45. 0 0
      assets/icons/remark.svg
  46. 0 0
      assets/icons/rfqs.svg
  47. 1 0
      assets/icons/selected.svg
  48. 0 0
      assets/icons/setting.svg
  49. 1 0
      assets/icons/swiperLeft.svg
  50. 1 0
      assets/icons/swiperRight.svg
  51. 22 0
      assets/icons/user.svg
  52. 1 0
      assets/icons/userAvatar.svg
  53. BIN
      assets/images/about_icon01.png
  54. BIN
      assets/images/about_icon02.png
  55. BIN
      assets/images/about_icon03.png
  56. BIN
      assets/images/about_img01.png
  57. BIN
      assets/images/about_img02.png
  58. BIN
      assets/images/about_team_01.png
  59. BIN
      assets/images/about_team_02.png
  60. BIN
      assets/images/about_team_03.png
  61. BIN
      assets/images/about_team_04.png
  62. BIN
      assets/images/about_team_05.png
  63. BIN
      assets/images/about_team_06.png
  64. BIN
      assets/images/addImage.png
  65. BIN
      assets/images/all_brand_banner.jpg
  66. BIN
      assets/images/arrow_left.png
  67. BIN
      assets/images/arrow_right.png
  68. BIN
      assets/images/avatar.png
  69. BIN
      assets/images/blog_banner.png
  70. BIN
      assets/images/contact_addr.png
  71. BIN
      assets/images/contact_email.png
  72. BIN
      assets/images/contact_phone.png
  73. BIN
      assets/images/decorate.png
  74. BIN
      assets/images/ejet_logo.png
  75. BIN
      assets/images/empty.png
  76. BIN
      assets/images/featured_banner.png
  77. BIN
      assets/images/featured_empty.png
  78. BIN
      assets/images/featured_img01.png
  79. BIN
      assets/images/featured_img02.png
  80. BIN
      assets/images/featured_img03.png
  81. BIN
      assets/images/featured_img04.png
  82. BIN
      assets/images/featured_img05.png
  83. BIN
      assets/images/file_delete.png
  84. BIN
      assets/images/footer_consult.png
  85. BIN
      assets/images/footer_consult_img01.png
  86. BIN
      assets/images/footer_consult_img02.png
  87. BIN
      assets/images/footer_consult_img03.png
  88. BIN
      assets/images/footer_consult_img04.png
  89. BIN
      assets/images/footer_guide_facebook.png
  90. BIN
      assets/images/footer_guide_img.png
  91. BIN
      assets/images/footer_guide_ins.png
  92. BIN
      assets/images/footer_guide_linkedin.png
  93. BIN
      assets/images/footer_guide_pinterest.png
  94. BIN
      assets/images/footer_guide_whatsApp.png
  95. BIN
      assets/images/footer_guide_youtube.png
  96. BIN
      assets/images/header_banner.png
  97. BIN
      assets/images/home_banner.png
  98. BIN
      assets/images/home_blog_img01.png
  99. BIN
      assets/images/home_blog_img02.png
  100. BIN
      assets/images/home_blog_img03.png

+ 10 - 0
.gitignore

@@ -0,0 +1,10 @@
+node_modules
+*.log
+dist
+.output
+.nuxt
+.env
+.nitro
+.DS_Store
+.idea
+.vercel

+ 5 - 0
.npmrc

@@ -0,0 +1,5 @@
+shamefully-hoist=true
+strict-peer-dependencies=false
+shell-emulator=true
+node-linker=hoisted
+public-hoist-pattern=*

+ 7 - 0
.vscode/settings.json

@@ -0,0 +1,7 @@
+{
+  "cSpell.words": [
+    "TMDB"
+  ],
+  "eslint.experimental.useFlatConfig": true,
+  "i18n-ally.localesPaths": []
+}

+ 21 - 0
LICENSE

@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2022-present - Nuxt Team
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 19 - 0
README.md

@@ -0,0 +1,19 @@
+## Setup
+
+``` bash
+# Enable pnpm
+$ corepack enable
+
+# Install dependencies
+$ pnpm install
+
+# Start dev server with hot reload at localhost:3000
+$ pnpm dev
+
+# build
+$ pnpm build
+
+# preview
+$ node .output/server/index.mjs
+
+```

+ 41 - 0
api/model/blogs.ts

@@ -0,0 +1,41 @@
+import { useMyRequest } from '~/composables/useFetchRequest'
+
+enum Api {
+  VideoOrBlogsList = '/client/content/list',
+  VideoOrBlogsDetail = '/client/content/detail',
+  BlogCategoryList = '/client/content/category/content',
+}
+
+/**
+ * 获取博客
+ * @param params
+ * @returns
+ */
+export async function getBlogsListApi(params?: any) {
+  return await useMyRequest().get(Api.VideoOrBlogsList, params)
+}
+
+/**
+ * 获取博客详情
+ * @param params
+ * @returns
+ */
+export async function getBlogsDetailApi(params?: any) {
+  return await useMyRequest().get(Api.VideoOrBlogsDetail, params)
+}
+/**
+ * 获取最新一条博客详情
+ * @param params
+ * @returns
+ */
+export async function getReleaseBlogApi(params?: any) {
+  return await useMyRequest().get(Api.VideoOrBlogsList, params)
+}
+/**
+ * 获取博客分类
+ * @param params
+ * @returns
+ */
+export async function getBlogCategoryListApi(params?: any) {
+  return await useMyRequest().get(Api.BlogCategoryList, params)
+}

+ 83 - 0
api/model/brand.ts

@@ -0,0 +1,83 @@
+import { useMyRequest } from '~/composables/useFetchRequest'
+
+enum Api {
+  BrandList = '/client/brand/list/default',
+  BrandFavorite = '/client/brand/favorite',
+  BrandGoodsList = '/client/merchandise/list/default',
+  DynamicCategoryList = '/client/brand/dynamicCategory',
+  BrandDetail = '/client/brand/detail',
+}
+
+/**
+ * 首页获取品牌列表
+ * @param params
+ * @returns
+ */
+export async function getHomeBrandListApi(params?: any) {
+  return await useMyRequest().get(Api.BrandList, params)
+}
+/**
+ * 品牌详情页获取相似品牌列表
+ * @param params
+ * @returns
+ */
+export async function getSimilarBrandListApi(params?: any) {
+  return await useMyRequest().get(Api.BrandList, params)
+}
+/**
+ * 品牌页获取品牌列表
+ * @param params
+ * @returns
+ */
+export async function getBrandListApi(params?: any) {
+  return await useMyRequest().get(Api.BrandList, params)
+}
+
+/**
+ * 是否品牌收藏
+ * @param params
+ * @returns
+ */
+export async function setBrandFavoriteApi(params: any) {
+  return await useMyRequest().post(Api.BrandFavorite, params)
+}
+/**
+ * 获取品牌详情
+ * @param params
+ * @returns
+ */
+export async function getBrandDetailApi(params?: any) {
+  return await useMyRequest().get(Api.BrandDetail, params)
+}
+
+/**
+ * 获取品牌详情分类列表
+ * @param params
+ * @returns
+ */
+export async function getDynamicCategoryListApi(params?: any) {
+  const data = await useMyRequest().get(Api.DynamicCategoryList, params)
+  const result = handleData(data)
+  return result
+}
+function handleData(data: any) {
+  if (data && isArray(data)) {
+    data.forEach((item) => {
+      item.label = item.title
+      if (item.children === null)
+        delete item.children
+      if (item.children && item.children.length > 0)
+        handleData(item.children)
+    })
+  }
+  return data
+}
+
+/**
+ * 获取品牌详情分类下的商品列表
+ * @param params
+ * @returns
+ */
+export async function getBrandGoodsListApi(params?: any) {
+  return await useMyRequest().post(Api.BrandGoodsList, params)
+}

+ 52 - 0
api/model/cart.ts

@@ -0,0 +1,52 @@
+import { useMyRequest } from '~/composables/useFetchRequest'
+
+enum Api {
+  CartList = '/client/cart/list/my',
+  RemoveCart = '/client/cart/del',
+  ChangeQuantity = '/client/cart/updateQuantity',
+  CartBrandQuantityApi = '/client/cart/brandQuantity',
+  CancelOrder = '/client/order/wish/cancel',
+  SubmitOrder = '/client/order/wish/submitFromCart',
+}
+/**
+ * 获取商品列表
+ * @param params
+ * @return
+ */
+export async function getCartListApi(params?: any) {
+  return await useMyRequest().get(Api.CartList, params)
+}
+/**
+ * 获取购物车中的品牌数量
+ * @param params
+ * @return
+ */
+export async function getCartBrandQuantityApi(params?: any) {
+  return await useMyRequest().get(Api.CartBrandQuantityApi, params)
+}
+
+/**
+ * 移除购物车
+ * @param params
+ * @return
+ */
+export async function removeCartApi(params: any) {
+  return await useMyRequest().post(Api.RemoveCart, params)
+}
+/**
+ * 更新购物车数量
+ * @param params
+ * @return
+ */
+export async function changeQuantityApi(params: any) {
+  return await useMyRequest().post(Api.ChangeQuantity, params)
+}
+
+/**
+ * 提交订单
+ * @param params
+ * @returns
+ */
+export async function submitOrderApi(params: any) {
+  return await useMyRequest().post(Api.SubmitOrder, params)
+}

+ 94 - 0
api/model/common.ts

@@ -0,0 +1,94 @@
+/** @format */
+
+import { useMyRequest } from "~/composables/useFetchRequest"
+
+enum Api {
+  CategoryList = "/client/category/merchandise",
+  NewCategoryList = "/api-s002/categoryUsa/rootList",
+  OssUploadFile = "/sys/oss/file/otherUpload",
+  DictUrl = "/shop/sys/dict",
+  Subscribe = "/client/spCustomSubscription/add",
+  ContactUs = "/client/guestbook/add",
+  labels = "/client/centerProductTag/listTree",
+  BannerData = "/client/category/detail",
+  NoticeRemind = "/client/notification/unReadList",
+}
+
+/**
+ * 获取分类列表
+ * @param params
+ * @returns
+ */
+export async function getCategoryListApi(params?: any) {
+  const data = await useMyRequest().get(Api.CategoryList, params)
+  const result = handleData(data)
+  return result
+}
+function handleData(data: any) {
+  if (data && isArray(data)) {
+    data.forEach((item) => {
+      item.label = item.title
+      if (item.children && item.children.length > 0) handleData(item.children)
+    })
+  }
+  return data
+}
+
+/**
+ * 获取分类数据
+ * @returns
+ */
+export async function getBannerDataApi(data: any) {
+  return await useMyRequest().get(Api.BannerData, data)
+}
+/**
+ * 获取字典列表数据
+ * @returns
+ */
+export async function getDictListApi(code: string) {
+  return await useMyRequest().get(Api.DictUrl, {
+    code,
+  })
+}
+/**
+ * 获取产品标签 + Trending
+ * @returns
+ */
+export async function getProductLabelAndTrendApi(data: any) {
+  return await useMyRequest().get(Api.labels, data)
+}
+
+/**
+ * 上传文件
+ * @param file
+ * @returns
+ */
+export async function ossUploadApi(file: File) {
+  const formData = new FormData()
+  formData.append("file", file)
+  try {
+    const result = await useMyRequest().post(Api.OssUploadFile, formData)
+    return result
+  } catch (error) {
+    console.error("Upload failed:", error)
+  }
+}
+
+/**
+ * 订阅
+ */
+export async function submitSubscribeApi(params: any) {
+  return await useMyRequest().post(Api.Subscribe, params)
+}
+/**
+ * 联系我们
+ */
+export async function getContactUsApi(params: any) {
+  return await useMyRequest().post(Api.ContactUs, params)
+}
+/**
+ * 获取未读提醒列表
+ */
+export async function getNoticeRemindApi(params: any) {
+  return await useMyRequest().get(Api.NoticeRemind, params)
+}

+ 54 - 0
api/model/feature.ts

@@ -0,0 +1,54 @@
+import { useMyRequest } from '~/composables/useFetchRequest'
+
+enum Api {
+  FeatureList = '/client/topic/list',
+  FeatureDetail = '/client/topic/detail',
+  FeatureAlumDetail = '/client/topic/getPaintingDetail',
+  FeatureGoodsList = '/client/topic/rm/list',
+  FeatureBrandList = '/client/topic/rb/list',
+}
+
+/**
+ * 获取主题列表
+ * @param params
+ * @returns
+ */
+export async function getFeatureListApi(params?: any) {
+  return await useMyRequest().get(Api.FeatureList, params)
+}
+
+/**
+ * 获取主题详情
+ * @param params
+ * @returns
+ */
+export async function getFeatureDetailApi(params?: any) {
+  return await useMyRequest().get(Api.FeatureDetail, params)
+}
+/**
+ * 获取主题的画册详情
+ * @param params
+ * @returns
+ */
+export async function getFeatureAlumDetailApi(params?: any) {
+  return await useMyRequest().get(Api.FeatureAlumDetail, params)
+}
+
+/**
+ * 获取主题商品列表
+ * @param params
+ * @returns
+ */
+
+export async function getFeatureGoodsListApi(params?: any) {
+  return await useMyRequest().get(Api.FeatureGoodsList, params)
+}
+
+/**
+ * 获取主题下品牌列表
+ * @param params
+ * @returns
+ */
+export async function getFeatureBrandsListApi(params?: any) {
+  return await useMyRequest().get(Api.FeatureBrandList, params)
+}

+ 91 - 0
api/model/goods.ts

@@ -0,0 +1,91 @@
+import { useMyRequest } from '~/composables/useFetchRequest'
+
+enum Api {
+  GoodsList = '/client/merchandise/list/default',
+  GoodsTrendingList = '/client/merchandise/recommendList/trending',
+  GoodsHotSaleList = '/client/merchandise/recommendList/hotSale',
+  Favorite = '/client/merchandise/favorite',
+  GoodsDetail = '/client/merchandise/detail',
+  GoodsRecommendList = '/client/merchandise/recommendList/similar',
+  AddShopCart = '/client/cart/add',
+  RecommendListOne = '/client/merchandise/recommendList/sameSupplier',
+  RecommendListTwo = '/client/merchandise/recommendList/sameCategory',
+}
+
+/**
+ * 获取商品列表
+ * @param params
+ * @returns
+ */
+export async function getGoodsListApi(params?: any) {
+  return await useMyRequest().post(Api.GoodsList, params)
+}
+
+/**
+ * 获取trending 商品列表
+ * @param params
+ * @returns
+ */
+export async function getGoodsTrendingListApi(params?: any) {
+  return await useMyRequest().get(Api.GoodsTrendingList, params)
+}
+/**
+ * 获取热卖 商品列表
+ * @param params
+ * @returns
+ */
+export async function getGoodsHotSaleListApi(params?: any) {
+  return await useMyRequest().get(Api.GoodsHotSaleList, params)
+}
+
+/**
+ * 是否收藏
+ * @param params
+ * @returns
+ */
+export async function setGoodsFavoriteApi(params: any) {
+  return await useMyRequest().post(Api.Favorite, params)
+}
+
+/**
+ * 获取商品详情
+ * @param params
+ * @returns
+ */
+export async function getGoodsDetailApi(params?: any) {
+  return await useMyRequest().get(Api.GoodsDetail, params)
+}
+
+/**
+ * 获取商品推荐
+ * @param params
+ * @returns
+ */
+export async function getGoodsRecommendListApi(params?: any) {
+  return await useMyRequest().get(Api.GoodsRecommendList, params)
+}
+/**
+ * 添加购物车
+ * @param params
+ * @returns
+ */
+export async function addShopCartApi(params: any) {
+  return await useMyRequest().post(Api.AddShopCart, params)
+}
+
+/**
+ * 获取推荐商品1
+ * @param params
+ * @returns
+ */
+export async function getRecommendListOneApi(params?: any) {
+  return await useMyRequest().get(Api.RecommendListOne, params)
+}
+/**
+ * 获取推荐商品2
+ * @param params
+ * @returns
+ */
+export async function getRecommendListTwoApi(params?: any) {
+  return await useMyRequest().get(Api.RecommendListTwo, params)
+}

+ 80 - 0
api/model/message.ts

@@ -0,0 +1,80 @@
+import { useMyRequest } from '~/composables/useFetchRequest'
+
+enum Api {
+  ContactList = '/client/im/session/list',
+  BrandConversation = '/client/im/session/get',
+  MessagesHistory = '/client/im/message/list/history',
+  UnReadMessageNum = '/client/im/message/clearUnreadQuantity',
+  NewMessageList = '/client/im/message/list/new',
+  SendOutMessage = '/client/im/message/send',
+  CreateNewChat = '/client/im/session/create',
+  DeleteContact = '/client/im/session/remove',
+}
+
+/**
+ * 获取会话列表
+ * @param params
+ * @returns
+ */
+export async function getContactListApi(params?: any) {
+  return await useMyRequest().get(Api.ContactList, params)
+}
+/**
+ * 获取当前会话聊天记录列表
+ * @param params
+ * @returns
+ */
+export async function getContactMessagesApi(params?: any) {
+  return await useMyRequest().get(Api.MessagesHistory, params)
+}
+/**
+ * 清除当前会话的消息数量
+ * @param params
+ * @returns
+ */
+export async function clearUnReadMessageNumApi(params?: any) {
+  return await useMyRequest().post(Api.UnReadMessageNum, params)
+}
+/**
+ * 删除(隐藏)会话
+ * @param params
+ * @returns
+ */
+export async function deleteContactApi(params?: any) {
+  return await useMyRequest().post(Api.DeleteContact, params)
+}
+/**
+ * 获取当前会话的消息(交流消息)  (5s钟轮询一次)
+ * @param params
+ * @returns
+ */
+export async function getNewMessageListApi(params?: any) {
+  return await useMyRequest().get(Api.NewMessageList, params)
+}
+/**
+ * 发送当前输入的消息内容 (文本content和图片imageUrl分开两个参数)
+ * @param params
+ * @returns
+ */
+export async function sendMessageApi(params?: any) {
+  return await useMyRequest().post(Api.SendOutMessage, params)
+}
+// ------- 品牌 新打开沟通 ---------
+
+/**
+ * 创建聊天会话
+ * @param params
+ * @returns
+ */
+export async function createNewChatApi(params?: any) {
+  return await useMyRequest().post(Api.CreateNewChat, params)
+}
+
+/**
+ * 获取当前品牌会话信息
+ * @param params
+ * @returns
+ */
+export async function getBrandConversationApi(params?: any) {
+  return await useMyRequest().get(Api.BrandConversation, params)
+}

+ 60 - 0
api/model/my.ts

@@ -0,0 +1,60 @@
+import { useMyRequest } from '~/composables/useFetchRequest'
+
+enum Api {
+  StaticData = '/client/dashboard/count',
+  CollectionGoodsList = '/client/merchandise/favorite',
+  CollectBrandsListApi = '/client/brand/favorite',
+  RFQsListApi = '/client/rfq/list',
+  SubmitRFQsApi = '/client/rfq/submit',
+  RFQsDetailApi = '/client/rfq/detail',
+}
+
+/**
+ * 个人中心获取数据统计
+ * @param params
+ * @returns
+ */
+export async function getStaticDataApi(params?: any) {
+  return await useMyRequest().get(Api.StaticData, params)
+}
+
+/**
+ * 获取收藏列表
+ * @param params
+ * @returns
+ */
+export async function getCollectionGoodsListApi(params?: any) {
+  return await useMyRequest().get(Api.CollectionGoodsList, params)
+}
+/**
+ * 获取收藏列表
+ * @param params
+ * @returns
+ */
+export async function getCollectBrandsListApi(params?: any) {
+  return await useMyRequest().get(Api.CollectBrandsListApi, params)
+}
+/**
+ * 获取rfq列表
+ * @param params
+ * @returns
+ */
+export async function getRFQsListApi(params?: any) {
+  return await useMyRequest().get(Api.RFQsListApi, params)
+}
+/**
+ * 获取rfq详情
+ * @param params
+ * @returns
+ */
+export async function getRFQsDetailApi(params?: any) {
+  return await useMyRequest().get(Api.RFQsDetailApi, params)
+}
+/**
+ * 提交 rfqs
+ * @param params
+ * @returns
+ */
+export async function submitRFQsApiApi(params?: any) {
+  return await useMyRequest().post(Api.SubmitRFQsApi, params)
+}

+ 16 - 0
api/model/notice.ts

@@ -0,0 +1,16 @@
+/** @format */
+
+import { useMyRequest } from "~/composables/useFetchRequest"
+
+enum Api {
+  NoticeList = "/client/notification/vue3List",
+}
+
+/**
+ * 获取notice列表
+ * @param params
+ * @returns
+ */
+export async function getNoticeListApi(params?: any) {
+  return await useMyRequest().get(Api.NoticeList, params)
+}

+ 50 - 0
api/model/order.ts

@@ -0,0 +1,50 @@
+import { useMyRequest } from '~/composables/useFetchRequest'
+
+enum Api {
+  OrderDetail = '/client/order/wish/detail',
+  OrderList = '/client/order/wish/list/my',
+  CancelOrder = '/client/order/wish/cancel',
+  SubmitOrder = '/client/order/wish/submitFromCart',
+  UpdateOrder = '/client/order/wish/updateOrderMd',
+}
+
+/**
+ * 获取订单列表
+ * @param params
+ * @returns
+ */
+export async function getOrderListApi(params?: any) {
+  return await useMyRequest().get(Api.OrderList, params)
+}
+/**
+ * 获取订单详情
+ * @param params
+ * @returns
+ */
+export async function getOrderDetailApi(params?: any) {
+  return await useMyRequest().get(Api.OrderDetail, params)
+}
+/**
+ * 提交订单
+ * @param params
+ * @returns
+ */
+export async function submitOrderApi(params: any) {
+  return await useMyRequest().post(Api.SubmitOrder, params)
+}
+/**
+ * 取消订单
+ * @param params
+ * @returns
+ */
+export async function cancelOrderApi(params: any) {
+  return await useMyRequest().post(Api.CancelOrder, params)
+}
+/**
+ * 更新订单
+ * @param params
+ * @returns
+ */
+export async function updateOrderApi(params: any) {
+  return await useMyRequest().post(Api.UpdateOrder, params)
+}

+ 69 - 0
api/model/user.ts

@@ -0,0 +1,69 @@
+import { useMyRequest } from '~/composables/useFetchRequest'
+
+enum Api {
+  Login = '/client/user/login',
+  UserInfo = '/client/user/userinfo',
+  Logout = '/client/user/logout',
+  Register = '/client/user/preRegister',
+  ValidateRegister = '/client/user/register',
+  ValidateEmail = '/client/user/forgetPassword',
+  ResetOrChangePassword = '/client/user/changePassword',
+}
+
+/**
+ * @description: user login api
+ */
+export async function loginApi(params: any) {
+  return await useMyRequest().post(Api.Login, params)
+}
+/**
+ * 预注册
+ * @param params
+ * @param mode
+ * @returns
+ */
+export async function registerApi(params: any) {
+  return await useMyRequest().post(Api.Register, params)
+}
+/**
+ * 注册
+ * @param params
+ * @returns
+ */
+export async function validateRegisterApi(params: any) {
+  return await useMyRequest().post(Api.ValidateRegister, params)
+}
+/**
+ * 忘记密码,发送邮箱
+ * @param params
+ * @returns
+ */
+export async function validateEmailApi(params: any) {
+  return await useMyRequest().post(Api.ValidateEmail, params)
+}
+/**
+ * 更新用户信息
+ * @param params
+ * @returns
+ */
+export async function updateUserInfoApi(params: any) {
+  return await useMyRequest().post(Api.UserInfo, params)
+}
+/**
+ * 重置密码
+ * @param params
+ * @returns
+ */
+export async function resetOrChangePasswordApi(params: any) {
+  return await useMyRequest().post(Api.ResetOrChangePassword, params)
+}
+/**
+ * @description: getUserInfo
+ */
+export async function getUserProfileApi() {
+  return await useMyRequest().get(Api.UserInfo)
+}
+
+export async function logoutApi() {
+  return await useMyRequest().get(Api.Logout)
+}

+ 89 - 0
app.vue

@@ -0,0 +1,89 @@
+<!-- @format -->
+
+<script setup>
+import '@unocss/reset/tailwind.css'
+import LoginModal from '~/components/common/login/index.vue'
+import MessageModal from '~/components/common/message/index.vue'
+
+const router = useRouter()
+router.beforeEach(() => {
+  const timer = setTimeout(() => {
+    const dom = document.getElementById('app-scroller')
+    dom.scrollTo({
+      top: 0,
+      behavior: 'smooth',
+    })
+    clearTimeout(timer)
+  }, 500)
+})
+
+useHead({
+  script: [
+    // Google Tag Manager
+    {
+      children: `(function (w, d, s, l, i) {
+        w[l] = w[l] || []
+        function gtag() {  w[l].push(arguments) }
+        w.$gtag = gtag
+        const j = d.createElement(s)
+        j.src = "https://www.googletagmanager.com/gtag/js?id=" + i
+        j.async = true
+        j.onload = function () {
+           gtag("js", new Date())
+           gtag("config", i)
+        }
+        d.head.appendChild(j)
+    })(window, document, "script", "dataLayer", "G-XNX7ZDX7QY")`,
+    },
+    // 第三方客服工具
+    {
+      children: `!function(){const c=document.createElement("script");c.src="https://plugin-code.salesmartly.com/js/project_270819_277882_1741848946.js",c.async=!0,c.onload=function(){window.__ssc.setting={hideIcon:!1}},document.head.appendChild(c)}();`,
+    },
+    // JSON-LD
+    {
+      type: 'application/ld+json',
+      children: JSON.stringify({
+        datePublished: '2024-12-01T00:00:00.000Z',
+        dateModified: new Date().toISOString(),
+      }),
+    },
+  ],
+  noscript: [
+    // Google Tag Manager (noscript)
+    {
+      children: '<iframe src="https://www.googletagmanager.com/gtag/js?id=G-XNX7ZDX7QY" height="0" width="0" style="display:none;visibility:hidden"></iframe>', // 替换为您的 GTM ID
+      tagPosition: 'bodyOpen',
+    },
+  ],
+})
+</script>
+
+<template>
+  <NuxtLayout>
+    <NuxtPage />
+    <LoginModal />
+    <MessageModal />
+  </NuxtLayout>
+</template>
+
+<style lang="less">
+.page-enter-active,
+.page-leave-active {
+  transition: opacity .5s;
+}
+.page-enter-from,
+.page-leave-to {
+  opacity: 0;
+}
+html,
+body,
+#__nuxt {
+  height: 100vh;
+  margin: 0;
+  padding: 0;
+  background: #fff;
+  color: var(--primary-color);
+  font-size: var(--font-size-base);
+  font-family: 'CommonFont';
+}
+</style>

+ 16 - 0
app/router.options.ts

@@ -0,0 +1,16 @@
+export default {
+  scrollBehavior(to: any, from: any, savedPosition: { x: number, y: number } | void): { x: number, y: number } | void {
+    if (savedPosition) {
+      // 如果存在保存的滚动位置,则滚动到该位置
+      return savedPosition
+    }
+    else if (to.hash) {
+      // 如果目标路由有hash值,则滚动到该hash对应的元素
+      return { selector: to.hash }
+    }
+    else {
+      // 否则,滚动到页面顶部
+      return { x: 0, y: 0 }
+    }
+  },
+}

BIN
assets/fonts/BodoniModa.ttf


BIN
assets/fonts/Georgia Bold.ttf


BIN
assets/fonts/Roboto-Medium.ttf


BIN
assets/fonts/Roboto-Regular.ttf


BIN
assets/fonts/bodoni-72.ttf


BIN
assets/fonts/custom_font.woff2


BIN
assets/fonts/shanhai.ttf


+ 1 - 0
assets/icons/arrow.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="20" height="20" viewBox="0 0 20 20"><defs><clipPath id="master_svg0_148_19204"><rect x="0" y="0" width="20" height="20" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_148_19204)"><g><path d="M16.24980390625,2.8921159765624997L1.66650390625,17.475425976562498L2.52434690625,18.3333259765625L17.107703906250002,3.7499559765625L17.107703906250002,11.4705459765625L18.33320390625,11.4705459765625L18.33320390625,1.6666259765625L8.52925390625,1.6666259765625L8.52925390625,2.8921159765624997L16.24980390625,2.8921159765624997Z" fill="#5B463E" fill-opacity="1" style="mix-blend-mode:passthrough"/><path d="M8.02925390625,1.1666259765625L8.02925390625,3.3921159765624997L15.04270390625,3.3921159765624997L0.95939690625,17.475425976562498L2.52434690625,19.0404259765625L16.607703906250002,4.9570659765625L16.607703906250002,11.9705259765625L18.83320390625,11.9705259765625L18.83320390625,1.1666259765625L8.02925390625,1.1666259765625ZM9.02925390625,2.3921159765624997L17.456903906249998,2.3921159765624997L2.37361090625,17.475425976562498L2.52434690625,17.626225976562502L17.607703906250002,2.5428519765625L17.607703906250002,10.9705459765625L17.83320390625,10.9705459765625L17.83320390625,2.1666259765625L9.02925390625,2.1666259765625L9.02925390625,2.3921159765624997Z" fill-rule="evenodd" fill="#5B463E" fill-opacity="1"/></g></g></svg>

+ 1 - 0
assets/icons/arrowL.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="19.725" height="19.725" viewBox="0 0 19.725 19.725"><defs><style>.a{fill:none;stroke:#5b463e;stroke-width:2px;}</style></defs><path class="a" d="M0,13.134H12.761V0" transform="translate(19.725 9.995) rotate(135)"/></svg>

+ 1 - 0
assets/icons/arrowR.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="19.725" height="19.725" viewBox="0 0 19.725 19.725"><defs><style>.a{fill:none;stroke:#5b463e;stroke-width:2px;}</style></defs><path class="a" d="M1023.5,1569.5h12.761v13.134" transform="translate(395.368 -1832.821) rotate(45)"/></svg>

+ 14 - 0
assets/icons/arrowRight.svg

@@ -0,0 +1,14 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="40"
+    height="40" viewBox="0 0 40 40">
+    <defs>
+        <clipPath id="master_svg0_46_2365">
+            <rect x="40" y="0" width="40" height="40" rx="0" />
+        </clipPath>
+    </defs>
+    <g transform="matrix(-1,0,0,1,80,0)" clip-path="url(#master_svg0_46_2365)">
+        <g>
+            <path d="M75,20L75,22.5L45,22.5L45,20L45.0625,20L53.3125,11.75L55.0938,13.53125L48.59375,20L75,20Z"
+                fill-opacity="1" style="mix-blend-mode:passthrough" />
+        </g>
+    </g>
+</svg>

+ 1 - 0
assets/icons/arrowRotate.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="18.000000938630166" height="18.000000938630166" viewBox="0 0 18.000000938630166 18.000000938630166"><defs><clipPath id="master_svg0_64_00154"><rect x="18" y="18.000000938630166" width="18" height="18" rx="0"/></clipPath></defs><g transform="matrix(-1,-5.2146120310681e-8,5.2146120310681e-8,-1,35.999999061369785,36.0000028158905)" clip-path="url(#master_svg0_64_00154)"><g style="opacity:0.009999999776482582;"><path d="M18,18.000000938630166L36,18.000000938630166L36,36.000000938630166L18,36.000000938630166L18,18.000000938630166Z" fill="#666666" fill-opacity="1" style="mix-blend-mode:passthrough"/></g><g transform="matrix(1,1.023805680233636e-7,-1.023805680233636e-7,1,0.0000023327885791957215,-0.000002025465562383033)"><path d="M33.84679140625,23.151804364411415C34.31529140625,23.620404364411417,34.31529140625,24.380002364411414,33.84679140625,24.848602364411416L27.84683140625,30.848602364411416C27.378231406250002,31.317062364411413,26.61863140625,31.317062364411413,26.15003140625,30.848602364411416L20.15003440625,24.848602364411416C19.66746640625,24.382522364411415,19.66076640625,23.611331364411416,20.13516440625,23.136934364411417C20.60956140625,22.662537364411417,21.38075140625,22.669237364411416,21.84683140625,23.151805364411416L26.99843140625,28.303402364411415L32.14999140625,23.151804364411415C32.61859140625,22.683346364411417,33.37819140625,22.683346364411417,33.84679140625,23.151804364411415Z" fill="#666666" fill-opacity="1" style="mix-blend-mode:passthrough"/></g></g></svg>

+ 1 - 0
assets/icons/cart.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="27.307" height="27.614" viewBox="0 0 27.307 27.614"><defs><style>.a{fill:#63524d;}</style></defs><path class="a" d="M246.4,846.793a1.993,1.993,0,1,0,1.993-1.993A1.993,1.993,0,0,0,246.4,846.793Z" transform="translate(-240.422 -821.172)"/><path class="a" d="M716.8,846.793a1.993,1.993,0,1,0,1.993-1.993A1.993,1.993,0,0,0,716.8,846.793Z" transform="translate(-696.872 -821.172)"/><path class="a" d="M70.326,69.256H54.384a2.116,2.116,0,0,1-1.9-1.613l-2.847-16.8A3.546,3.546,0,0,0,46.223,48h-.664a.759.759,0,1,0,0,1.518h.664a2.116,2.116,0,0,1,1.9,1.613l2.847,16.8a3.546,3.546,0,0,0,3.416,2.847H70.326a.816.816,0,0,0,.759-.759A.748.748,0,0,0,70.326,69.256Z" transform="translate(-44.8 -48)"/><path class="a" d="M299.345,179.2H282.359a.759.759,0,0,0,0,1.518h16.986a.892.892,0,0,1,.949,1.234l-2.088,8.351a2.553,2.553,0,0,1-2.183,1.8l-11.767.854a.765.765,0,1,0,.19,1.518l11.767-.854a4.067,4.067,0,0,0,3.511-2.942l2.088-8.351A2.5,2.5,0,0,0,299.345,179.2Z" transform="translate(-274.578 -175.309)"/></svg>

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
assets/icons/dashboard.svg


+ 25 - 0
assets/icons/delete.svg

@@ -0,0 +1,25 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="24"
+    height="24" viewBox="0 0 24 24">
+    <defs>
+        <clipPath id="master_svg0_19_5415">
+            <rect x="0" y="0" width="24" height="24" rx="0" />
+        </clipPath>
+    </defs>
+    <g clip-path="url(#master_svg0_19_5415)">
+        <g>
+            <path
+                d="M2.9998779296875,4.7001953125L20.9998779296875,4.7001953125C21.5998779296875,4.7001953125,21.9998779296875,5.1001953125,21.9998779296875,5.7001953125C21.9998779296875,6.3001953125,21.5998779296875,6.7001953125,20.9998779296875,6.7001953125L2.9998779296875,6.7001953125C2.3998779296875,6.7001953125,1.9998779296875,6.3001953125,1.9998779296875,5.7001953125C1.9998779296875,5.1001953125,2.3998779296875,4.700194954872,2.9998779296875,4.7001953125Z"
+                fill="#999999" fill-opacity="1" style="mix-blend-mode:passthrough" />
+        </g>
+        <g>
+            <path
+                d="M15.7001220703125,21.99951171875L8.3001220703125,21.99951171875C5.9001220703125,21.99951171875,4.0001220703125,20.09951171875,4.0001220703125,17.69951171875L4.0001220703125,4.99951171875L6.0001220703125,4.99951171875L6.0001220703125,17.69951171875C6.0001220703125,18.99951171875,7.0001220703125,19.99951171875,8.3001220703125,19.99951171875L15.6001220703125,19.99951171875C16.9001220703125,19.99951171875,17.9001220703125,18.99951171875,17.9001220703125,17.69951171875L17.9001220703125,4.99951171875L19.9001220703125,4.99951171875L19.9001220703125,17.69951171875C20.0001220703125,20.09951171875,18.1001220703125,21.99951171875,15.7001220703125,21.99951171875ZM16.5001220703125,4.99951171875L14.5001220703125,4.99951171875C14.5001220703125,4.39951171875,14.1001220703125,3.99951171875,13.5001220703125,3.99951171875L10.5001220703125,3.99951171875C9.9001220703125,3.99951171875,9.5001220703125,4.39951171875,9.5001220703125,4.99951171875L7.5001220703125,4.99951171875C7.5001220703125,3.29951171875,8.8001220703125,1.99951171875,10.5001220703125,1.99951171875L13.5001220703125,1.99951171875C15.2001220703125,1.99951171875,16.5001220703125,3.29951171875,16.5001220703125,4.99951171875Z"
+                fill="#999999" fill-opacity="1" style="mix-blend-mode:passthrough" />
+        </g>
+        <g>
+            <path
+                d="M10,7.99951171875C10.6,7.99951171875,11,8.39951171875,11,8.99951171875L11,16.99951171875C11,17.59951171875,10.6,17.99951171875,10,17.99951171875C9.4,17.99951171875,9,17.59951171875,9,16.99951171875L9,8.99951171875C9,8.39951171875,9.4,7.99951171875,10,7.99951171875ZM14,7.99951171875C14.6,7.99951171875,15,8.39951171875,15,8.99951171875L15,16.99951171875C15,17.59951171875,14.6,17.99951171875,14,17.99951171875C13.4,17.99951171875,13,17.59951171875,13,16.99951171875L13,8.99951171875C13,8.39951171875,13.4,7.99951171875,14,7.99951171875Z"
+                fill="#999999" fill-opacity="1" style="mix-blend-mode:passthrough" />
+        </g>
+    </g>
+</svg>

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
assets/icons/enclosure.svg


+ 1 - 0
assets/icons/favorite.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="24" height="24" viewBox="0 0 24 24"><g><g><g><g><path d="M12,21.64999990463257C11.69,21.64999990463257,11.39,21.60999990463257,11.14,21.51999990463257C7.32,20.209999904632568,1.25,15.55999990463257,1.25,8.689999904632568C1.25,5.189999904632568,4.08,2.3499999046325684,7.56,2.3499999046325684C9.25,2.3499999046325684,10.83,3.0099999046325685,12,4.189999904632568C13.17,3.0099999046325685,14.75,2.3499999046325684,16.439999999999998,2.3499999046325684C19.92,2.3499999046325684,22.75,5.199999904632568,22.75,8.689999904632568C22.75,15.569999904632569,16.68,20.209999904632568,12.86,21.51999990463257C12.61,21.60999990463257,12.31,21.64999990463257,12,21.64999990463257C12,21.64999990463257,12,21.64999990463257,12,21.64999990463257ZM7.56,3.8499999046325684C4.91,3.8499999046325684,2.75,6.019999904632568,2.75,8.689999904632568C2.75,15.519999904632568,9.32,19.319999904632567,11.63,20.10999990463257C11.81,20.16999990463257,12.2,20.16999990463257,12.38,20.10999990463257C14.68,19.319999904632567,21.26,15.529999904632568,21.26,8.689999904632568C21.26,6.019999904632568,19.1,3.8499999046325684,16.45,3.8499999046325684C14.93,3.8499999046325684,13.52,4.559999904632568,12.61,5.789999904632568C12.33,6.169999904632569,11.69,6.169999904632569,11.41,5.789999904632568C10.48,4.5499999046325685,9.08,3.8499999046325684,7.56,3.8499999046325684C7.56,3.8499999046325684,7.56,3.8499999046325684,7.56,3.8499999046325684Z" fill="#333333" fill-opacity="1"/></g><g style="opacity:0;"></g></g></g></g></svg>

+ 1 - 0
assets/icons/file.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="20" height="20" viewBox="0 0 20 20"><defs><clipPath id="master_svg0_62_8375"><rect x="0" y="0" width="20" height="20" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_62_8375)"><g><path d="M9.77219,9.6478940625C10.2601,9.1529240625,10.25789,8.3658240625,9.77219,7.8801240625C9.28738,7.3953140625,8.50161,7.3926640625,8.00442,7.8801240625L4.02606,11.8567640625C2.80675,13.0866640625,2.80984,15.0599640625,4.02606,16.2761640625C5.24273,17.4927640625,7.216,17.4958640625,8.44548,16.2761640625L15.9585,8.763124062500001C17.1783,7.5433640625,17.1783,5.5634740625,15.9585,4.3437140625C14.7392,3.1243940625,12.7588,3.1239540625,11.5391,4.3437140625L11.319,4.5655640625C10.95306,4.9314940625000006,10.35909,4.9314940625000006,9.99316,4.5655640625C9.62768,4.200074062500001,9.62724,3.6065540625,9.99316,3.2397440625L10.21325,3.0178840625000003C12.1737,1.0671530625,15.3358,1.0693620625,17.2843,3.0178840625000003C19.2328,4.9664040625000005,19.2359,8.127614062500001,17.2843,10.0889540625L9.77087,17.6015640625C7.81704,19.5403640625,4.65981,19.5358640625,2.71306,17.5891640625C0.766744,15.6428640625,0.761882,12.4851640625,2.70112,10.5317840625L6.6786,6.5543040625C7.90543,5.3345440625,9.88091,5.3371940625,11.09802,6.5543040625C12.3151,7.7714140625,12.3178,9.7468940625,11.09802,10.9737240625L7.34151,14.7302640625C6.97558,15.0961640625,6.38161,15.0961640625,6.01569,14.7302640625C5.64976,14.3642640625,5.64976,13.7703640625,6.01569,13.4043640625L9.77219,9.6478940625Z" fill="#333333" fill-opacity="1" style="mix-blend-mode:passthrough"/></g></g></svg>

+ 1 - 0
assets/icons/language.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="30.2" height="30.2" viewBox="0 0 30.2 30.2"><defs><style>.a{fill:#63524d;}</style></defs><path class="a" d="M64.746,44.955a15.148,15.148,0,1,0,1.187,5.878,15.05,15.05,0,0,0-1.187-5.878Zm.07,5.354H60.307a16.788,16.788,0,0,0-1.851-7.065,16.661,16.661,0,0,0,2.751-1.77A13.907,13.907,0,0,1,64.816,50.31ZM51.391,37.357a15.415,15.415,0,0,1,5.527,5.372,15.6,15.6,0,0,1-5.527,1.235ZM50.31,43.966a15.642,15.642,0,0,1-5.735-1.293,15.359,15.359,0,0,1,5.735-5.453v6.747Zm-5.366.06a16.664,16.664,0,0,0,5.366,1.047V50.31H42.224A15.689,15.689,0,0,1,44,43.657c.308.137.628.25.944.369Zm5.366,7.365v5.073a16.7,16.7,0,0,0-5.388,1.055q-.53.2-1.046.432a15.634,15.634,0,0,1-1.657-6.561Zm0,6.18v7.04a15.477,15.477,0,0,1-5.877-5.684A15.574,15.574,0,0,1,50.31,57.571Zm1.081,0a15.69,15.69,0,0,1,5.668,1.3,15.531,15.531,0,0,1-5.668,5.6v-6.9Zm5.32-.044a16.682,16.682,0,0,0-5.32-1.064V51.391h7.815a15.54,15.54,0,0,1-1.62,6.5c-.288-.128-.579-.251-.875-.362Zm-5.32-7.22V45.071a16.64,16.64,0,0,0,5.3-1.055c.262-.1.519-.189.775-.3A15.594,15.594,0,0,1,59.2,50.31Zm9.038-9.652a15.606,15.606,0,0,1-2.514,1.6q-.059-.1-.12-.2a16.826,16.826,0,0,0-4.906-5.074,13.959,13.959,0,0,1,7.54,3.667Zm-11.97-3.616a16.826,16.826,0,0,0-4.831,5.023l-.081.132A15.609,15.609,0,0,1,41.2,40.691a13.965,13.965,0,0,1,7.258-3.65ZM40.426,41.5A16.757,16.757,0,0,0,43,43.185a16.72,16.72,0,0,0-1.885,7.124H36.851A13.962,13.962,0,0,1,40.426,41.5Zm-3.575,9.887h4.261a16.7,16.7,0,0,0,1.773,7.047A16.729,16.729,0,0,0,40.358,60.1,13.912,13.912,0,0,1,36.851,51.391ZM41.127,60.9a15.6,15.6,0,0,1,2.288-1.493q.114.194.233.386a16.824,16.824,0,0,0,4.493,4.771A13.973,13.973,0,0,1,41.127,60.9ZM53.2,64.627A16.826,16.826,0,0,0,57.775,59.8q.14-.224.272-.451A15.611,15.611,0,0,1,60.5,60.938,13.966,13.966,0,0,1,53.2,64.627Zm8.078-4.486a16.7,16.7,0,0,0-2.7-1.77,16.609,16.609,0,0,0,1.739-6.981h4.5a13.874,13.874,0,0,1-3.541,8.751Z" transform="translate(-35.733 -35.733)"/></svg>

+ 5 - 0
assets/icons/like.svg

@@ -0,0 +1,5 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="18.626" height="16.156" viewBox="0 0 18.626 16.156">
+    <path class="a"
+        d="M10.67,103.1a2.237,2.237,0,0,1-1.4-.545L2.889,96.179A5.369,5.369,0,0,1,1.41,91.666,5.448,5.448,0,0,1,6.079,87a5.242,5.242,0,0,1,4.591,1.634A5.242,5.242,0,0,1,15.261,87a5.448,5.448,0,0,1,4.669,4.669A5.719,5.719,0,0,1,18.607,96.1l-6.536,6.536a2.173,2.173,0,0,1-1.4.467ZM6.779,88.475H6.313a3.963,3.963,0,0,0-3.424,3.346,3.7,3.7,0,0,0,1.089,3.19l6.381,6.381a.468.468,0,0,0,.311.078.588.588,0,0,0,.311-.078l6.536-6.536a3.85,3.85,0,0,0-2.412-6.381,3.836,3.836,0,0,0-3.346,1.167,1.5,1.5,0,0,1-2.179,0A3.82,3.82,0,0,0,6.779,88.475Z"
+        transform="translate(-1.357 -86.948)" />
+</svg>

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
assets/icons/lock.svg


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
assets/icons/logout.svg


+ 1 - 0
assets/icons/message.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="24" height="24" viewBox="0 0 24 24"><g><g><g><g><path d="M12,22.81C11.31,22.81,10.66,22.46,10.2,21.85C10.2,21.85,8.7,19.85,8.7,19.85C8.67,19.81,8.55,19.76,8.5,19.75C8.5,19.75,8,19.75,8,19.75C3.83,19.75,1.25,18.62,1.25,13C1.25,13,1.25,8,1.25,8C1.25,3.58,3.58,1.25,8,1.25C8,1.25,16,1.25,16,1.25C20.42,1.25,22.75,3.58,22.75,8C22.75,8,22.75,13,22.75,13C22.75,17.42,20.42,19.75,16,19.75C16,19.75,15.5,19.75,15.5,19.75C15.42,19.75,15.35,19.79,15.3,19.85C15.3,19.85,13.8,21.85,13.8,21.85C13.34,22.46,12.69,22.81,12,22.81C12,22.81,12,22.81,12,22.81ZM8,2.75C4.42,2.75,2.75,4.42,2.75,8C2.75,8,2.75,13,2.75,13C2.75,17.52,4.3,18.25,8,18.25C8,18.25,8.5,18.25,8.5,18.25C9.01,18.25,9.59,18.54,9.9,18.95C9.9,18.95,11.4,20.95,11.4,20.95C11.75,21.41,12.25,21.41,12.6,20.95C12.6,20.95,14.1,18.95,14.1,18.95C14.43,18.51,14.95,18.25,15.5,18.25C15.5,18.25,16,18.25,16,18.25C19.58,18.25,21.25,16.58,21.25,13C21.25,13,21.25,8,21.25,8C21.25,4.42,19.58,2.75,16,2.75C16,2.75,8,2.75,8,2.75C8,2.75,8,2.75,8,2.75Z" fill="#292D32" fill-opacity="1"/></g><g style="opacity:0;"></g><g><path d="M17,8.75C17,8.75,7,8.75,7,8.75C6.59,8.75,6.25,8.41,6.25,8C6.25,7.59,6.59,7.25,7,7.25C7,7.25,17,7.25,17,7.25C17.41,7.25,17.75,7.59,17.75,8C17.75,8.41,17.41,8.75,17,8.75C17,8.75,17,8.75,17,8.75Z" fill="#292D32" fill-opacity="1"/></g><g><path d="M13,13.75C13,13.75,7,13.75,7,13.75C6.59,13.75,6.25,13.41,6.25,13C6.25,12.59,6.59,12.25,7,12.25C7,12.25,13,12.25,13,12.25C13.41,12.25,13.75,12.59,13.75,13C13.75,13.41,13.41,13.75,13,13.75C13,13.75,13,13.75,13,13.75Z" fill="#292D32" fill-opacity="1"/></g></g></g></g></svg>

+ 1 - 0
assets/icons/notice.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1745199888571" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="19414" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M512 212l48.8 12c101.6 24.8 176 117.6 176 220.8v254.4l18.4 18.4 24.8 25.6h-536l24.8-25.6 18.4-18.4V444.8c0-103.2 73.6-196.8 176-220.8l48.8-12M512 64c-36.8 0-64 30.4-64 68v30.4C320.8 192 223.2 307.2 223.2 444.8v228.8L136 763.2v44.8h752v-44.8l-87.2-89.6V444.8c0-137.6-97.6-252.8-224.8-283.2v-28.8c0-32-17.6-60.8-48-67.2-5.6-1.6-11.2-1.6-16-1.6z m88 808H424c0 49.6 38.4 88 88 88s88-38.4 88-88z" p-id="19415" fill="#cdcdcd"></path></svg>

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
assets/icons/order.svg


+ 1 - 0
assets/icons/quotation.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="28" height="28" viewBox="0 0 28 28"><defs><clipPath id="master_svg0_59_3796"><rect x="0" y="0" width="28" height="28" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_59_3796)"><g><path d="M20.0566,0L27,6.99918L27,26.612C26.9982,27.3791,26.3808,28,25.6198,28L2.38086,28C1.622063,27.9947,1.00709027,27.3767,1,26.6118L1,1.39111C1,0.623271,1.619141,0,2.38086,0L20.0566,0ZM14.5,12.6005L8.94336,12.6005L8.94336,15.3995L14.5,15.3995L14.5,19.5997L20.0566,13.9984L14.5,8.39705L14.5,12.5972L14.5,12.6005Z" fill="#000000" fill-opacity="1" style="mix-blend-mode:passthrough"/></g></g></svg>

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
assets/icons/remark.svg


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
assets/icons/rfqs.svg


+ 1 - 0
assets/icons/selected.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="20" height="20" viewBox="0 0 20 20"><defs><clipPath id="master_svg0_64_00185"><rect x="0" y="0" width="20" height="20" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_64_00185)"><g><path d="M8.1412476171875,15.58723515625C7.8249976171875,15.58723515625,7.5099976171875,15.46603515625,7.2687476171875,15.22473515625L2.3324946171875,10.26853515625C1.8512456171875,9.784785156249999,1.8512456171875,8.999785156249999,2.3324946171875,8.51603515625C2.8149956171875,8.03228515625,3.5962476171875,8.03228515625,4.0774976171875,8.51603515625L8.1412476171875,12.59603515625L15.9062576171875,4.79978515625C16.3874576171875,4.31478515625,17.168757617187502,4.31478515625,17.6512576171875,4.79978515625C18.1324576171875,5.28353515625,18.1324576171875,6.06728515625,17.6512576171875,6.55103515625L9.0137476171875,15.22473515625C8.7724976171875,15.46603515625,8.4562476171875,15.58723515625,8.1412476171875,15.58723515625Z" fill="#B06B3C" fill-opacity="1" style="mix-blend-mode:passthrough"/></g></g></svg>

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
assets/icons/setting.svg


+ 1 - 0
assets/icons/swiperLeft.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="30" height="30" viewBox="0 0 30 30"><defs><clipPath id="master_svg0_64_06024"><rect x="0" y="0" width="30" height="30" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_64_06024)"><g><path d="M15,28.125C7.76252,28.125,1.875,22.2375,1.875,15C1.875,7.76251,7.76252,1.875,15,1.875C22.2375,1.875,28.125,7.76252,28.125,15C28.125,22.2375,22.2375,28.125,15,28.125ZM15,3.75C8.79655,3.75,3.75,8.79655,3.75,15C3.75,21.2034,8.79655,26.25,15,26.25C21.2034,26.25,26.25,21.2034,26.25,15C26.25,8.79655,21.2034,3.75,15,3.75Z" fill="#C58C46" fill-opacity="1" style="mix-blend-mode:passthrough"/></g><g><path d="M8.506897500000001,15.361970234375C8.5078548,15.365700234375,8.5125418,15.369480234375,8.5144066,15.373210234375C8.55941,15.479150234375,8.621297,15.580390234374999,8.707526,15.667580234375C8.708483,15.668540234375001,8.70939,15.668540234375001,8.710348,15.669440234375C8.711305,15.670350234375,8.711305,15.671310234375,8.712213,15.672260234374999L13.367840000000001,20.340990234375C13.733460000000001,20.707590234374997,14.32597,20.709490234375,14.69346,20.342890234374998C15.06005,19.977190234375,15.06096,19.384720234375,14.69533,19.017230234375L11.66817,15.981600234375L20.6054,15.981600234375C21.1229,15.981600234375,21.5428,15.561600234375,21.5428,15.044070234374999C21.5428,14.526550234375,21.122799999999998,14.106550234375,20.6054,14.106550234375L11.61847,14.106550234375L14.727229999999999,11.031560234375C15.09568,10.666890234375,15.0985,10.074379234375,14.73474,9.705930234375C14.5519,9.520320734375,14.31005,9.427490234375,14.068200000000001,9.427490234375C13.83007,9.427490234375,13.59195,9.518405534375,13.40911,9.698421234375L8.714128,14.341850234375C8.4375520706,14.616660234375,8.3681562,15.020690234375,8.506897500000001,15.361970234375Z" fill="#C58C46" fill-opacity="1" style="mix-blend-mode:passthrough"/></g></g></svg>

+ 1 - 0
assets/icons/swiperRight.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="30" height="30" viewBox="0 0 30 30"><defs><clipPath id="master_svg0_64_05966"><rect x="30" y="0" width="30" height="30" rx="0"/></clipPath></defs><g transform="matrix(-1,0,0,1,60,0)" clip-path="url(#master_svg0_64_05966)"><g><path d="M45,28.125C37.76252,28.125,31.875,22.2375,31.875,15C31.875,7.76251,37.76252,1.875,45,1.875C52.2375,1.875,58.125,7.76252,58.125,15C58.125,22.2375,52.2375,28.125,45,28.125ZM45,3.75C38.796549999999996,3.75,33.75,8.79655,33.75,15C33.75,21.2034,38.796549999999996,26.25,45,26.25C51.2034,26.25,56.25,21.2034,56.25,15C56.25,8.79655,51.2034,3.75,45,3.75Z" fill="#C58C46" fill-opacity="1" style="mix-blend-mode:passthrough"/></g><g><path d="M38.5068975,15.361970234375C38.5078548,15.365700234375,38.5125418,15.369480234375,38.5144066,15.373210234375C38.55941,15.479150234375,38.621297,15.580390234374999,38.707526,15.667580234375C38.708483,15.668540234375001,38.70939,15.668540234375001,38.710348,15.669440234375C38.711305,15.670350234375,38.711305,15.671310234375,38.712213,15.672260234374999L43.36784,20.340990234375C43.73346,20.707590234374997,44.32597,20.709490234375,44.69346,20.342890234374998C45.060050000000004,19.977190234375,45.06096,19.384720234375,44.69533,19.017230234375L41.66817,15.981600234375L50.6054,15.981600234375C51.1229,15.981600234375,51.5428,15.561600234375,51.5428,15.044070234374999C51.5428,14.526550234375,51.1228,14.106550234375,50.6054,14.106550234375L41.61847,14.106550234375L44.72723,11.031560234375C45.09568,10.666890234375,45.0985,10.074379234375,44.73474,9.705930234375C44.5519,9.520320734375,44.310050000000004,9.427490234375,44.0682,9.427490234375C43.83007,9.427490234375,43.59195,9.518405534375,43.40911,9.698421234375L38.714128,14.341850234375C38.4375520706,14.616660234375,38.3681562,15.020690234375,38.5068975,15.361970234375Z" fill="#C58C46" fill-opacity="1" style="mix-blend-mode:passthrough"/></g></g></svg>

+ 22 - 0
assets/icons/user.svg

@@ -0,0 +1,22 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24"
+    viewBox="0 0 24 24">
+    <defs>
+        <clipPath id="master_svg0_45_9428">
+            <rect x="0" y="0" width="24" height="24" rx="0" />
+        </clipPath>
+    </defs>
+    <g clip-path="url(#master_svg0_45_9428)">
+        <g>
+            <g>
+                <path
+                    d="M13.431638804779052,12.771158281249999C14.628418804779052,12.225748281249999,15.462568804779053,11.02131828125,15.462568804779053,9.61946828125C15.462568804779053,7.70719828125,13.911788804779054,6.15673828125,11.999508804779053,6.15673828125C10.086428804779054,6.15673828125,8.535968804779053,7.70719828125,8.535968804779053,9.61946828125C8.535968804779053,11.02099828125,9.369628804779053,12.22525828125,10.567218804779053,12.771158281249999C8.612308804779053,13.38215828125,7.189778804779053,15.20914828125,7.189778804779053,17.36263828125C7.189778804779053,17.633338281249998,7.409016804779053,17.85223828125,7.679199804779053,17.85223828125C7.949381804779053,17.85223828125,8.168782804779052,17.633338281249998,8.168782804779052,17.36263828125C8.168782804779052,15.25081828125,9.887048804779052,13.53238828125,11.999028804779051,13.53238828125C14.111488804779054,13.53238828125,15.829918804779053,15.25081828125,15.829918804779053,17.36263828125C15.829918804779053,17.633338281249998,16.048828804779053,17.85223828125,16.31933880477905,17.85223828125C16.590168804779054,17.85223828125,16.809078804779055,17.633338281249998,16.809078804779055,17.36263828125C16.809408804779054,15.20963828125,15.386398804779052,13.38215828125,13.431638804779052,12.771158281249999C13.431638804779052,12.771158281249999,13.431638804779052,12.771158281249999,13.431638804779052,12.771158281249999ZM9.515628804779052,9.619788281249999C9.515628804779052,8.25015828125,10.629878804779054,7.13639328125,12.000158804779053,7.13639328125C13.369958804779053,7.13639328125,14.484048804779054,8.25015828125,14.484048804779054,9.619788281249999C14.484048804779054,10.99023828125,13.369958804779053,12.104818281250001,12.000158804779053,12.104818281250001C10.629878804779054,12.104818281250001,9.515628804779052,10.99023828125,9.515628804779052,9.619788281249999C9.515628804779052,9.619788281249999,9.515628804779052,9.619788281249999,9.515628804779052,9.619788281249999Z"
+                    fill-opacity="1" style="mix-blend-mode:passthrough" />
+            </g>
+            <g>
+                <path
+                    d="M11.99972,22C6.48596,22,2,17.514,2,11.99976C2,6.48649,6.486,2,11.99972,2C17.514,2,22,6.486,22,11.99976C22,17.514,17.514,22,11.99972,22C11.99972,22,11.99972,22,11.99972,22ZM11.99972,2.926432C6.99622,2.926432,2.925903,6.99675,2.925903,11.99976C2.925903,17.0028,6.99622,21.0735,11.99972,21.0735C17.0033,21.0735,21.074,17.0028,21.074,11.99976C21.074,6.99675,17.0033,2.926432,11.99972,2.926432C11.99972,2.926432,11.99972,2.926432,11.99972,2.926432Z"
+                    fill-opacity="1" style="mix-blend-mode:passthrough" />
+            </g>
+        </g>
+    </g>
+</svg>

+ 1 - 0
assets/icons/userAvatar.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="20" height="20" viewBox="0 0 20 20"><defs><clipPath id="master_svg0_154_18918"><rect x="0" y="0" width="20" height="20" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_154_18918)"><g><path d="M10,2C11.7,2,13,3.3,13,5C13,6.7,11.7,8,10,8C8.3,8,7,6.7,7,5C7,3.3,8.3,2,10,2ZM10,0C7.2,0,5,2.2,5,5C5,7.8,7.2,10,10,10C12.8,10,15,7.8,15,5C15,2.2,12.8,0,10,0ZM16,14C17.1,14,18,14.9,18,16L18,18L2,18L2,16C2,14.9,2.9,14,4,14L16,14ZM16,12L4,12C1.8,12,0,13.8,0,16L0,18C0,19.1,0.9,20,2,20L18,20C19.1,20,20,19.1,20,18L20,16C20,13.8,18.2,12,16,12Z" fill="#333333" fill-opacity="1" style="mix-blend-mode:passthrough"/></g></g></svg>

BIN
assets/images/about_icon01.png


BIN
assets/images/about_icon02.png


BIN
assets/images/about_icon03.png


BIN
assets/images/about_img01.png


BIN
assets/images/about_img02.png


BIN
assets/images/about_team_01.png


BIN
assets/images/about_team_02.png


BIN
assets/images/about_team_03.png


BIN
assets/images/about_team_04.png


BIN
assets/images/about_team_05.png


BIN
assets/images/about_team_06.png


BIN
assets/images/addImage.png


BIN
assets/images/all_brand_banner.jpg


BIN
assets/images/arrow_left.png


BIN
assets/images/arrow_right.png


BIN
assets/images/avatar.png


BIN
assets/images/blog_banner.png


BIN
assets/images/contact_addr.png


BIN
assets/images/contact_email.png


BIN
assets/images/contact_phone.png


BIN
assets/images/decorate.png


BIN
assets/images/ejet_logo.png


BIN
assets/images/empty.png


BIN
assets/images/featured_banner.png


BIN
assets/images/featured_empty.png


BIN
assets/images/featured_img01.png


BIN
assets/images/featured_img02.png


BIN
assets/images/featured_img03.png


BIN
assets/images/featured_img04.png


BIN
assets/images/featured_img05.png


BIN
assets/images/file_delete.png


BIN
assets/images/footer_consult.png


BIN
assets/images/footer_consult_img01.png


BIN
assets/images/footer_consult_img02.png


BIN
assets/images/footer_consult_img03.png


BIN
assets/images/footer_consult_img04.png


BIN
assets/images/footer_guide_facebook.png


BIN
assets/images/footer_guide_img.png


BIN
assets/images/footer_guide_ins.png


BIN
assets/images/footer_guide_linkedin.png


BIN
assets/images/footer_guide_pinterest.png


BIN
assets/images/footer_guide_whatsApp.png


BIN
assets/images/footer_guide_youtube.png


BIN
assets/images/header_banner.png


BIN
assets/images/home_banner.png


BIN
assets/images/home_blog_img01.png


BIN
assets/images/home_blog_img02.png


BIN
assets/images/home_blog_img03.png


Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio