index.vue 35 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369
  1. <template>
  2. <div class="home-pages">
  3. <!-- 头部 -->
  4. <div class="home-head" @mouseleave="leaveClassify">
  5. <div class="classify">
  6. <div
  7. class="classify-list"
  8. v-for="(item, index) in classifyList"
  9. :class="item.id == classifyId && classifyShow ? 'classify-hig' : ''"
  10. :key="index"
  11. @mouseenter="enterClassify(item)"
  12. >
  13. <div class="label ellipsis">{{ item.label }}</div>
  14. <div class="info info1 ellipsis" v-if="item.extra && item.extra.oneLable1">{{ item.extra.oneLable1 }}</div>
  15. <div class="info ellipsis" v-if="item.extra && item.extra.oneLable2">{{ item.extra.oneLable2 }}</div>
  16. <div class="classify-border" v-if="item.id == classifyId && classifyShow"></div>
  17. </div>
  18. </div>
  19. <div class="classify-bos" v-if="classifyShow">
  20. <div v-for="(item, index) in classifyInfo" :key="index" class="classify-item">
  21. <div class="two-level ellipsis">{{ item.label || '' }}</div>
  22. <el-icon class="classify-icon" :size="14" color="#364153">
  23. <ArrowRight />
  24. </el-icon>
  25. <div class="classify-label">
  26. <div v-for="(item1, index1) in item.children" :key="index1">{{ item1.label || '' }}</div>
  27. </div>
  28. </div>
  29. </div>
  30. <div class="head-bos">
  31. <div class="carousel">
  32. <el-carousel trigger="click" height="407px">
  33. <el-carousel-item v-for="item in carouselList" :key="item">
  34. <img :src="item.imageUrl" alt="" />
  35. </el-carousel-item>
  36. </el-carousel>
  37. </div>
  38. <div class="head-box">
  39. <div v-for="(item, index) in AdList" :key="index" class="head-item">
  40. <img :src="item.imageUrl" alt="" />
  41. <div class="head-title">
  42. <div class="head1">{{ item.title }}</div>
  43. <div class="head2">
  44. <div>查看方案</div>
  45. </div>
  46. </div>
  47. </div>
  48. </div>
  49. </div>
  50. <div class="head-right">
  51. <div class="login-bos">
  52. <div class="login-box">
  53. <img src="@/assets/images/profile.jpg" alt="" />
  54. <div>
  55. <div class="login1">您好,欢迎来到优易达</div>
  56. <div class="login2">请先登录</div>
  57. </div>
  58. </div>
  59. <div>
  60. <el-button type="primary" round size="small" style="width: 64px" @click="onPath('/login')">登录</el-button>
  61. <el-button type="primary" plain round size="small" style="width: 64px" @click="onPath('/reg')">注册</el-button>
  62. </div>
  63. </div>
  64. <div class="real-time">
  65. <div class="real-title flex-row-between">
  66. <div class="real1">优易资讯</div>
  67. <div class="real2 flex-row-start">
  68. <div>更多</div>
  69. <el-icon :size="13" color="#83899F">
  70. <ArrowRight />
  71. </el-icon>
  72. </div>
  73. </div>
  74. <div class="real-list ellipsis" v-for="(item, index) in realList" :key="index">{{ item.announcementTitle }}</div>
  75. </div>
  76. <div class="interests">
  77. <div class="interests-title">企业会员权益</div>
  78. <div class="interests-bos">
  79. <div v-for="(item, index) in interestsList" :key="index" class="interests-item flex-column-center">
  80. <img :src="item.imageUrl" alt="" />
  81. <div>{{ item.title }}</div>
  82. </div>
  83. </div>
  84. </div>
  85. </div>
  86. </div>
  87. <!-- 热门方案 -->
  88. <div class="home-title flex-row-between">
  89. <div>
  90. <span class="title1">{{ hotTitle.title }}</span>
  91. <span class="title2">{{ hotTitle.subtitle }}</span>
  92. </div>
  93. <div class="title-more flex-row-start">
  94. <div style="margin-right: 5px">{{ hotTitle.linkWord }}</div>
  95. <el-icon :size="13" color="#83899F">
  96. <ArrowRight />
  97. </el-icon>
  98. </div>
  99. </div>
  100. <div class="hot-bos">
  101. <template v-for="(item, index) in hotList" :key="index">
  102. <div class="hot-list flex-column-center" v-if="Number(index) < 4">
  103. <div class="hot1">{{ item.advertTitle }}</div>
  104. <div class="hot2">{{ item.advertBrief }}</div>
  105. <img :src="item.coverImage" alt="" />
  106. </div>
  107. </template>
  108. </div>
  109. <!-- 场景采购 -->
  110. <div class="home-title flex-row-between">
  111. <div>
  112. <span class="title1">{{ sceneTitle.title }}</span>
  113. <span class="title2">{{ sceneTitle.subtitle }}</span>
  114. </div>
  115. <div class="title-more flex-row-start">
  116. <div style="margin-right: 5px">{{ sceneTitle.linkWord }}</div>
  117. <el-icon :size="13" color="#83899F">
  118. <ArrowRight />
  119. </el-icon>
  120. </div>
  121. </div>
  122. <div class="scene-bos">
  123. <template v-for="(item, index) in sceneList" :key="index">
  124. <div class="scene-list" v-if="Number(index) < 5">
  125. <div class="scene-box">
  126. <div class="scene1">{{ item.advertTitle }}</div>
  127. <div class="scene2">{{ item.advertBrief }}</div>
  128. </div>
  129. <img :src="item.coverImage" alt="" />
  130. </div>
  131. </template>
  132. </div>
  133. <!-- 大牌推荐 -->
  134. <div class="home-title flex-row-between">
  135. <div>
  136. <span class="title1">{{ bigbrandTitle.title }}</span>
  137. <span class="title2">{{ bigbrandTitle.subtitle }}</span>
  138. </div>
  139. <div class="title-more flex-row-start">
  140. <div style="margin-right: 5px">{{ bigbrandTitle.linkWord }}</div>
  141. <el-icon :size="13" color="#83899F">
  142. <ArrowRight />
  143. </el-icon>
  144. </div>
  145. </div>
  146. <div class="big-brand">
  147. <img class="bigBrand-one" :src="bigbrandOne.coverImage" alt="" />
  148. <div class="bigBrand-bos">
  149. <template v-for="(item, index) in bigbrandList" :key="index">
  150. <div class="bigBrand-list" v-if="Number(index) < 10">
  151. <img :src="item.coverImage" alt="" />
  152. <div class="bigBrand1">{{ item.advertTitle || '' }}</div>
  153. <div class="bigBrand2">
  154. {{ item.advertBrief || '' }}
  155. </div>
  156. </div>
  157. </template>
  158. </div>
  159. </div>
  160. <!-- 行家精选 -->
  161. <div class="home-title flex-row-between">
  162. <div>
  163. <span class="title1">{{ expertTitle.title }}</span>
  164. <span class="title2">{{ expertTitle.subtitle }}</span>
  165. </div>
  166. <div class="title-more flex-row-start">
  167. <div style="margin-right: 5px">{{ expertTitle.linkWord }}</div>
  168. <el-icon :size="13" color="#83899F">
  169. <ArrowRight />
  170. </el-icon>
  171. </div>
  172. </div>
  173. <div class="expert-bos">
  174. <template v-for="(item, index) in expertList" :key="index">
  175. <div class="expert-list" v-if="Number(index) < 5">
  176. <img :src="item.productImage" alt="" />
  177. <div class="itemName ellipsis">{{ item.itemName || '' }}</div>
  178. <div class="price">
  179. <span class="memberPrice">¥{{ item.memberPrice }}</span>
  180. <span class="marketPrice">¥{{ item.marketPrice }}</span>
  181. </div>
  182. </div>
  183. </template>
  184. </div>
  185. <!-- 采购指南 -->
  186. <div class="home-title flex-row-between">
  187. <div>
  188. <span class="title1">{{ procureTitle.title }}</span>
  189. <span class="title2">{{ procureTitle.subtitle }}</span>
  190. </div>
  191. <div class="title-more flex-row-start">
  192. <div style="margin-right: 5px">{{ procureTitle.linkWord }}</div>
  193. <el-icon :size="13" color="#83899F">
  194. <ArrowRight />
  195. </el-icon>
  196. </div>
  197. </div>
  198. <div class="procure-bos">
  199. <template v-for="(item, index) in expertList" :key="index">
  200. <div class="procure-list" v-if="Number(index) < 3">
  201. <img :src="item.productImage" alt="" />
  202. <div class="procure1">{{ item.itemName || '办公室' }}</div>
  203. <div class="procure2">{{ item.itemName || '干款好礼·百大品牌·个性定制' }}</div>
  204. </div>
  205. </template>
  206. </div>
  207. <!-- 循环-商品 -->
  208. <div v-for="(item1, index1) in homeList" :key="index1">
  209. <!-- 头部 -->
  210. <div class="home-title flex-row-between">
  211. <div>
  212. <span class="title1">{{ item1.floorName }}</span>
  213. <span class="title2">{{ item1.floorDescribe }}</span>
  214. </div>
  215. <div class="title-more flex-row-start">
  216. <div style="margin-right: 5px">{{ item1.floorLabel }}</div>
  217. <el-icon :size="13" color="#83899F">
  218. <ArrowRight />
  219. </el-icon>
  220. </div>
  221. </div>
  222. <!-- 商品 -->
  223. <div class="goods-bos" v-if="item1.imgOne">
  224. <img class="goods-img" :src="item1.imgOne" alt="" />
  225. <div class="home1-bos" v-if="item1.home1List && item1.home1List.length > 0">
  226. <div class="floorName">{{ item1.floorName }}</div>
  227. <div v-for="(item2, index2) in item1.home1List" :key="index2" class="home1-list">
  228. <img :src="item2.img" alt="" />
  229. <div style="flex: 1; width: 0">
  230. <div class="advertiseName">{{ item2.advertiseName }}</div>
  231. <div class="advertiseDescribe ellipsis">{{ item2.advertiseDescribe }}新政策执行中心城中心城中心啊实打实大苏打实打实水水的</div>
  232. </div>
  233. </div>
  234. </div>
  235. <div class="home2-bos" v-if="item1.home2List && item1.home2List.length > 0">
  236. <div>
  237. <div class="floorName">发现</div>
  238. <div class="home2-box">
  239. <div v-for="(item2, index2) in item1.home2List" :key="index2" class="home2-list">
  240. <div style="flex: 1; width: 0">
  241. <div class="advertiseName ellipsis">{{ item2.advertiseName }}</div>
  242. <div class="advertiseDescribe ellipsis">{{ item2.advertiseDescribe }}</div>
  243. <el-button class="bnt" type="primary" size="small">立即进入</el-button>
  244. </div>
  245. <img :src="item2.img" alt="" />
  246. </div>
  247. </div>
  248. </div>
  249. <div class="home2-two" v-if="item1.infoTwo">
  250. <div class="advertiseName">{{ item1.infoTwo.advertiseName }}</div>
  251. <div class="advertiseDescribe">{{ item1.infoTwo.advertiseDescribe }}</div>
  252. <img :src="item1.infoTwo.img" alt="" />
  253. </div>
  254. </div>
  255. </div>
  256. <div class="shop-bos">
  257. <div class="shop-nav">
  258. <div class="nav-title">采购导航</div>
  259. <div class="nav-bos">
  260. <div v-for="(item2, index2) in item1.navList" :key="index2" class="nav-list flex-row-center" :class="index2 == 0 ? 'hig' : ''">
  261. {{ item2.labelName }}
  262. </div>
  263. <div v-for="(item2, index2) in item1.navList" :key="index2" class="nav-list flex-row-center">
  264. {{ item2.labelName }}
  265. </div>
  266. <div v-for="(item2, index2) in item1.navList" :key="index2" class="nav-list flex-row-center">
  267. {{ item2.labelName }}
  268. </div>
  269. <div v-for="(item2, index2) in item1.navList" :key="index2" class="nav-list flex-row-center">
  270. {{ item2.labelName }}
  271. </div>
  272. <div v-for="(item2, index2) in item1.navList" :key="index2" class="nav-list flex-row-center">
  273. {{ item2.labelName }}
  274. </div>
  275. <div v-for="(item2, index2) in item1.navList" :key="index2" class="nav-list flex-row-center">
  276. {{ item2.labelName }}
  277. </div>
  278. <div v-for="(item2, index2) in item1.navList" :key="index2" class="nav-list flex-row-center">
  279. {{ item2.labelName }}
  280. </div>
  281. <div v-for="(item2, index2) in item1.navList" :key="index2" class="nav-list flex-row-center">
  282. {{ item2.labelName }}
  283. </div>
  284. <div v-for="(item2, index2) in item1.navList" :key="index2" class="nav-list flex-row-center">
  285. {{ item2.labelName }}
  286. </div>
  287. </div>
  288. </div>
  289. <template v-for="(item2, index2) in item1.shopList" :key="index2">
  290. <div class="shop-list" v-if="Number(index2) < 4" @click="onInfo(item2)">
  291. <img :src="item2.productImage" alt="" />
  292. <div class="itemName">{{ item2.itemName }}</div>
  293. <div class="price">
  294. <span class="memberPrice">¥{{ item2.memberPrice }}</span>
  295. <span class="marketPrice">¥{{ item2.marketPrice }}</span>
  296. </div>
  297. </div>
  298. </template>
  299. </div>
  300. </div>
  301. <!-- 项目案例 -->
  302. <div class="home-title flex-row-between">
  303. <div>
  304. <span class="title1">{{ projectTitle.title }}</span>
  305. <span class="title2">{{ projectTitle.subtitle }}</span>
  306. </div>
  307. <div class="title-more flex-row-start">
  308. <div style="margin-right: 5px">{{ projectTitle.linkWord }}</div>
  309. <el-icon :size="13" color="#83899F">
  310. <ArrowRight />
  311. </el-icon>
  312. </div>
  313. </div>
  314. <div class="project-bos">
  315. <template v-for="(item, index) in projectList" :key="index">
  316. <div class="project-list" v-if="Number(index) < 3">
  317. <img :src="item.uploadProgram" alt="" />
  318. <div class="project-box">
  319. <div class="project1">{{ item.caseTitle || '' }}</div>
  320. <div class="project2">
  321. {{ item.projectBrief || '' }}
  322. </div>
  323. <div class="project-more flex-row-between">
  324. <div></div>
  325. <div class="flex-row-start">
  326. <div style="margin-right: 5px">了解详情</div>
  327. <el-icon :size="14" color="#E7000B"><ArrowRight /></el-icon>
  328. </div>
  329. </div>
  330. </div>
  331. </div>
  332. </template>
  333. </div>
  334. </div>
  335. </template>
  336. <script setup lang="ts">
  337. import { onPath } from '@/utils/siteConfig';
  338. import {
  339. getProductCategoryTree,
  340. getHomeAdList,
  341. getYouYiZiXunPage,
  342. getEnterpriseMemberEquityList,
  343. getHomeThreeAdList,
  344. getHotSchemeTitle,
  345. getHotSchemeList,
  346. getScenePurchaseTitle,
  347. getScenePurchaseList,
  348. getPlatformFlashSaleTitle,
  349. getPlatformFlashSaleList,
  350. getExpertSelectionTitle,
  351. getPurchaseGuideTitle,
  352. getExpertSelectionList,
  353. getClassificationFloorList,
  354. getClassificationFloorDetail,
  355. getClassificationFloorLabel,
  356. getClassificationFloorDetail2,
  357. getProjectCaseTitle,
  358. getProjectCaseList
  359. } from '@/api/home/index';
  360. const classifyList = ref<any>([]);
  361. const classifyShow = ref<any>(false);
  362. const classifyId = ref<any>('');
  363. const classifyInfo = ref<any>([]);
  364. const carouselList = ref<any>([]);
  365. const realList = ref<any>([]);
  366. const interestsList = ref<any>([]);
  367. const AdList = ref<any>([]);
  368. const hotTitle = ref<any>('');
  369. const hotList = ref<any>([]);
  370. const sceneTitle = ref<any>('');
  371. const sceneList = ref<any>([]);
  372. const expertTitle = ref<any>('');
  373. const expertList = ref<any>([{}, {}, {}, {}, {}]);
  374. const procureTitle = ref<any>('');
  375. const procureList = ref<any>([{}, {}, {}, {}, {}]);
  376. const projectTitle = ref<any>('');
  377. const projectList = ref<any>([{}, {}, {}, {}, {}]);
  378. const bigbrandTitle = ref<any>('');
  379. const bigbrandList = ref<any>([]);
  380. const bigbrandOne = ref<any>({});
  381. const homeList = ref<any>([]);
  382. const router = useRouter();
  383. const enterClassify = (res: any) => {
  384. classifyShow.value = true;
  385. classifyId.value = res.id;
  386. classifyInfo.value = res.children;
  387. };
  388. const leaveClassify = () => {
  389. classifyShow.value = false;
  390. };
  391. //头部分类
  392. getProductCategoryTree({}).then((res) => {
  393. if (res.code == 200) {
  394. classifyList.value = res.data;
  395. }
  396. });
  397. //头部轮播
  398. getHomeAdList({}).then((res) => {
  399. if (res.code == 200) {
  400. carouselList.value = res.data;
  401. }
  402. });
  403. //头部优易资讯
  404. getYouYiZiXunPage({}).then((res) => {
  405. if (res.code == 200) {
  406. realList.value = res.data;
  407. }
  408. });
  409. //头部会员权益
  410. getEnterpriseMemberEquityList({}).then((res) => {
  411. if (res.code == 200) {
  412. interestsList.value = res.data;
  413. }
  414. });
  415. //首页三联广告(平台装修-楼层广告-首页三联广告)
  416. getHomeThreeAdList({}).then((res) => {
  417. if (res.code == 200) {
  418. AdList.value = res.data;
  419. }
  420. });
  421. //热门方案标题
  422. getHotSchemeTitle({}).then((res) => {
  423. if (res.code == 200) {
  424. hotTitle.value = res.data;
  425. }
  426. });
  427. //热门方案列表
  428. getHotSchemeList({}).then((res) => {
  429. if (res.code == 200) {
  430. hotList.value = res.data;
  431. }
  432. });
  433. //场景采购标题
  434. getScenePurchaseTitle({}).then((res) => {
  435. if (res.code == 200) {
  436. sceneTitle.value = res.data;
  437. }
  438. });
  439. //场景采购列表
  440. getScenePurchaseList({}).then((res) => {
  441. if (res.code == 200) {
  442. sceneList.value = res.data;
  443. }
  444. });
  445. //大牌推荐标题(平台闪购标题)
  446. getPlatformFlashSaleTitle({}).then((res) => {
  447. if (res.code == 200) {
  448. bigbrandTitle.value = res.data;
  449. }
  450. });
  451. //大牌推荐列表(平台闪购列表)
  452. getPlatformFlashSaleList({}).then((res) => {
  453. if (res.code == 200) {
  454. if (res.data.length > 0) {
  455. bigbrandOne.value = res.data[0];
  456. bigbrandList.value = res.data.slice(1);
  457. }
  458. }
  459. });
  460. //行家精选标题
  461. getExpertSelectionTitle({}).then((res) => {
  462. if (res.code == 200) {
  463. expertTitle.value = res.data;
  464. }
  465. });
  466. //行家精选列表
  467. getExpertSelectionList({}).then((res) => {
  468. if (res.code == 200) {
  469. expertList.value = res.data;
  470. }
  471. });
  472. //采购指南标题
  473. getPurchaseGuideTitle({}).then((res) => {
  474. if (res.code == 200) {
  475. procureTitle.value = res.data;
  476. }
  477. });
  478. //项目案例标题(平台装修-项目案例)
  479. getProjectCaseTitle({}).then((res) => {
  480. if (res.code == 200) {
  481. projectTitle.value = res.data;
  482. }
  483. });
  484. //项目案例列表(平台装修-项目案例)
  485. getProjectCaseList({}).then((res) => {
  486. if (res.code == 200) {
  487. projectList.value = res.data;
  488. }
  489. });
  490. //外面循环
  491. getClassificationFloorList({}).then(async (res) => {
  492. if (res.code == 200) {
  493. for (const item of res.data) {
  494. try {
  495. const datas1 = await getClassificationFloorDetail(item.floorNo);
  496. if (datas1.code == 200) {
  497. if (datas1.data.length > 0) {
  498. item.imgOne = datas1.data[0];
  499. if (datas1.data.length > 1) {
  500. item.home1List = datas1.data.slice(1, 4);
  501. }
  502. if (datas1.data.length > 4) {
  503. item.home2List = datas1.data.slice(4, 6);
  504. }
  505. if (datas1.data.length > 6) {
  506. item.infoTwo = datas1.data[6];
  507. }
  508. }
  509. }
  510. const datas2 = await getClassificationFloorLabel(item.floorNo);
  511. if (datas2.code == 200) {
  512. item.navList = datas2.data;
  513. }
  514. const datas3 = await getClassificationFloorDetail2(item.floorNo);
  515. if (datas2.code == 200) {
  516. item.shopList = datas3.data;
  517. }
  518. } catch (error) {}
  519. }
  520. homeList.value = res.data;
  521. }
  522. });
  523. const onInfo = (res: any) => {
  524. router.push('/shop/info?id=' + res.id);
  525. };
  526. </script>
  527. <style lang="scss" scoped>
  528. .home-pages {
  529. width: 1200px;
  530. margin: 0 auto;
  531. // 头部
  532. .home-head {
  533. width: 1200px;
  534. position: relative;
  535. display: flex;
  536. gap: 0px 10px;
  537. .classify {
  538. width: 234px;
  539. min-height: 539px;
  540. background: #ffffff;
  541. .classify-list {
  542. width: 100%;
  543. height: 40px;
  544. cursor: pointer;
  545. display: flex;
  546. align-items: center;
  547. padding-left: 15px;
  548. position: relative;
  549. &.classify-hig {
  550. border: 1px solid var(--el-color-primary);
  551. border-right: 0px solid var(--el-color-primary);
  552. }
  553. .label {
  554. max-width: 100px;
  555. font-weight: 600;
  556. font-size: 16px;
  557. color: #101828;
  558. white-space: nowrap;
  559. margin-right: 10px;
  560. &:hover {
  561. color: var(--el-color-primary);
  562. }
  563. }
  564. .info {
  565. max-width: 50px;
  566. font-size: 12px;
  567. color: #364153;
  568. white-space: nowrap;
  569. &.info1 {
  570. margin-right: 6px;
  571. }
  572. &:hover {
  573. color: var(--el-color-primary);
  574. }
  575. }
  576. .classify-border {
  577. position: absolute;
  578. right: -1px;
  579. top: 0px;
  580. width: 1px;
  581. height: 38px;
  582. background-color: #ffffff;
  583. z-index: 2;
  584. }
  585. }
  586. }
  587. .classify-bos {
  588. position: absolute;
  589. top: 0;
  590. right: 0;
  591. width: 966px;
  592. height: 100%;
  593. border: 1px solid var(--el-color-primary);
  594. background-color: #ffffff;
  595. overflow-y: auto;
  596. padding-left: 30px;
  597. z-index: 10;
  598. .classify-item {
  599. display: flex;
  600. padding-top: 10px;
  601. border-bottom: 1px solid #e5e7eb;
  602. .two-level {
  603. width: 90px;
  604. font-size: 14px;
  605. color: var(--el-color-primary);
  606. cursor: pointer;
  607. }
  608. .classify-icon {
  609. margin: 4px 15px 0 15px;
  610. }
  611. .classify-label {
  612. display: flex;
  613. flex-wrap: wrap;
  614. flex: 1;
  615. font-size: 14px;
  616. color: #364153;
  617. div {
  618. margin-right: 20px;
  619. margin-bottom: 10px;
  620. cursor: pointer;
  621. &:hover {
  622. color: var(--el-color-primary);
  623. }
  624. }
  625. }
  626. }
  627. }
  628. // 头部中间
  629. .head-bos {
  630. width: 756px;
  631. .carousel {
  632. width: 756px;
  633. height: 407px;
  634. background: #ffffff;
  635. img {
  636. width: 756px;
  637. height: 407px;
  638. }
  639. }
  640. .head-box {
  641. width: 756px;
  642. height: 122px;
  643. margin-top: 10px;
  644. display: flex;
  645. gap: 0 10px;
  646. .head-item {
  647. flex: 1;
  648. background-color: #ffffff;
  649. height: 122px;
  650. display: flex;
  651. padding-left: 20px;
  652. align-items: center;
  653. img {
  654. width: 84px;
  655. height: 84px;
  656. margin-right: 10px;
  657. }
  658. .head-title {
  659. .head1 {
  660. font-weight: 600;
  661. font-size: 22px;
  662. color: #101828;
  663. }
  664. .head2 {
  665. width: 76px;
  666. height: 21px;
  667. border-radius: 34px;
  668. border: 1px solid #000000;
  669. font-size: 12px;
  670. color: #000000;
  671. }
  672. }
  673. }
  674. }
  675. }
  676. .head-right {
  677. flex: 1;
  678. width: 0;
  679. height: 539px;
  680. background: #ffffff;
  681. display: flex;
  682. flex-direction: column;
  683. .login-bos {
  684. width: calc(100% - 20px);
  685. height: 110px;
  686. border-bottom: 1px solid #e5e7eb;
  687. margin: 0 10px;
  688. .login-box {
  689. display: flex;
  690. align-items: center;
  691. padding-top: 16px;
  692. margin-bottom: 10px;
  693. img {
  694. width: 40px;
  695. height: 40px;
  696. margin-right: 8px;
  697. }
  698. .login1 {
  699. font-size: 13px;
  700. color: #444444;
  701. }
  702. .login2 {
  703. margin-top: 2px;
  704. font-size: 12px;
  705. color: #6a7282;
  706. }
  707. }
  708. }
  709. .real-time {
  710. width: calc(100% - 20px);
  711. height: 227px;
  712. border-bottom: 1px solid #e5e7eb;
  713. margin: 0 10px;
  714. padding-top: 15px;
  715. .real-title {
  716. position: relative;
  717. margin-bottom: 12px;
  718. &::after {
  719. content: '';
  720. top: 4px;
  721. left: 0;
  722. position: absolute;
  723. width: 4px;
  724. height: 16px;
  725. background: var(--el-color-primary);
  726. }
  727. .real1 {
  728. font-weight: 600;
  729. font-size: 16px;
  730. color: #1d2129;
  731. padding-left: 15px;
  732. }
  733. .real2 {
  734. font-size: 13px;
  735. color: #83899f;
  736. cursor: pointer;
  737. }
  738. }
  739. .real-list {
  740. width: 100%;
  741. font-size: 14px;
  742. color: #1d2129;
  743. margin-bottom: 12px;
  744. cursor: pointer;
  745. &:hover {
  746. color: var(--el-color-primary);
  747. }
  748. }
  749. }
  750. .interests {
  751. flex: 1;
  752. width: calc(100% - 20px);
  753. margin: 0 10px;
  754. padding-top: 15px;
  755. .interests-title {
  756. position: relative;
  757. font-weight: 600;
  758. font-size: 16px;
  759. color: #1d2129;
  760. padding-left: 15px;
  761. &::after {
  762. content: '';
  763. top: 4px;
  764. left: 0;
  765. position: absolute;
  766. width: 4px;
  767. height: 16px;
  768. background: var(--el-color-primary);
  769. }
  770. }
  771. .interests-bos {
  772. display: flex;
  773. flex-wrap: wrap;
  774. .interests-item {
  775. width: 33.333%;
  776. font-size: 12px;
  777. color: #101828;
  778. margin-top: 15px;
  779. cursor: pointer;
  780. &:hover {
  781. color: var(--el-color-primary);
  782. }
  783. img {
  784. width: 34px;
  785. height: 34px;
  786. margin-bottom: 7px;
  787. }
  788. }
  789. }
  790. }
  791. }
  792. }
  793. //标题
  794. .home-title {
  795. width: 1200px;
  796. height: 56px;
  797. background: #ffffff;
  798. margin-top: 30px;
  799. padding: 0 20px;
  800. .title1 {
  801. font-weight: 600;
  802. font-size: 20px;
  803. color: #101828;
  804. }
  805. .title2 {
  806. font-size: 14px;
  807. color: #364153;
  808. margin-left: 10px;
  809. }
  810. .title-more {
  811. font-size: 14px;
  812. color: #364153;
  813. cursor: pointer;
  814. &:hover {
  815. color: var(--el-color-primary);
  816. }
  817. }
  818. }
  819. //热门方案
  820. .hot-bos {
  821. height: 176px;
  822. width: 1200px;
  823. display: flex;
  824. gap: 0 18px;
  825. margin-top: 12px;
  826. .hot-list {
  827. flex: 1;
  828. height: 176px;
  829. background: #ffffff;
  830. border-radius: 10px 10px 10px 10px;
  831. .hot1 {
  832. font-weight: 600;
  833. font-size: 16px;
  834. color: #101828;
  835. }
  836. .hot2 {
  837. font-size: 14px;
  838. color: #364153;
  839. margin: 2px 0 14px 0;
  840. }
  841. img {
  842. width: 80px;
  843. height: 80px;
  844. }
  845. }
  846. }
  847. // 场景采购
  848. .scene-bos {
  849. height: 304px;
  850. width: 1200px;
  851. display: flex;
  852. gap: 0 18px;
  853. margin-top: 12px;
  854. .scene-list {
  855. flex: 1;
  856. height: 304px;
  857. background: #ffffff;
  858. position: relative;
  859. .scene-box {
  860. padding-top: 35px;
  861. position: absolute;
  862. z-index: 2;
  863. width: 100%;
  864. .scene1 {
  865. font-weight: 600;
  866. font-size: 30px;
  867. color: #ffffff;
  868. text-align: center;
  869. width: 100%;
  870. }
  871. .scene2 {
  872. font-size: 17px;
  873. color: #ffffff;
  874. text-align: center;
  875. width: 100%;
  876. margin-top: 4px;
  877. }
  878. }
  879. img {
  880. position: absolute;
  881. width: 100%;
  882. height: 100%;
  883. top: 0;
  884. left: 0;
  885. background-color: #f4f4f4;
  886. }
  887. }
  888. }
  889. // 大牌推荐
  890. .big-brand {
  891. height: 334px;
  892. width: 1200px;
  893. margin-top: 12px;
  894. display: flex;
  895. .bigBrand-one {
  896. width: 233px;
  897. height: 334px;
  898. margin-right: 10px;
  899. }
  900. .bigBrand-bos {
  901. flex: 1;
  902. width: 0;
  903. display: flex;
  904. flex-wrap: wrap;
  905. gap: 10px;
  906. .bigBrand-list {
  907. width: 183.4px;
  908. height: 162px;
  909. background: #ffffff;
  910. display: flex;
  911. flex-direction: column;
  912. align-items: center;
  913. padding: 32px 20px 0 20px;
  914. img {
  915. width: 152px;
  916. height: 29px;
  917. }
  918. .bigBrand1 {
  919. font-weight: 600;
  920. font-size: 14px;
  921. color: #101828;
  922. margin: 10px 0 4px 0;
  923. }
  924. .bigBrand2 {
  925. font-weight: 400;
  926. font-size: 12px;
  927. color: #364153;
  928. display: -webkit-box;
  929. -webkit-line-clamp: 2;
  930. line-clamp: 2; /* 添加标准属性 */
  931. -webkit-box-orient: vertical;
  932. overflow: hidden;
  933. text-overflow: ellipsis;
  934. }
  935. }
  936. }
  937. }
  938. // 行家精选
  939. .expert-bos {
  940. width: 1200px;
  941. display: flex;
  942. margin-top: 12px;
  943. .expert-list {
  944. width: 230px;
  945. height: 306px;
  946. background: #ffffff;
  947. margin-left: 12.5px;
  948. padding: 20px;
  949. cursor: pointer;
  950. &:first-child {
  951. margin-left: 0;
  952. }
  953. img {
  954. width: 100%;
  955. height: 190px;
  956. }
  957. .itemName {
  958. font-weight: 400;
  959. font-size: 14px;
  960. color: #101828;
  961. margin: 27px 0 2px 0;
  962. }
  963. .price {
  964. .memberPrice {
  965. color: var(--el-color-primary);
  966. font-size: 16px;
  967. color: #e7000b;
  968. }
  969. .marketPrice {
  970. font-size: 12px;
  971. color: #99a1af;
  972. line-height: 20px;
  973. text-decoration-line: line-through;
  974. text-transform: none;
  975. margin-left: 6px;
  976. }
  977. }
  978. }
  979. }
  980. // 采购指南
  981. .procure-bos {
  982. display: flex;
  983. width: 1200px;
  984. margin-top: 12px;
  985. gap: 0 15px;
  986. .procure-list {
  987. width: 390px;
  988. height: 268px;
  989. background: #ffffff;
  990. cursor: pointer;
  991. img {
  992. width: 390px;
  993. height: 200px;
  994. }
  995. .procure1 {
  996. padding: 12px 20px 4px 20px;
  997. font-weight: 600;
  998. font-size: 14px;
  999. color: #101828;
  1000. }
  1001. .procure2 {
  1002. padding-left: 20px;
  1003. font-size: 12px;
  1004. color: #364153;
  1005. }
  1006. }
  1007. }
  1008. //循环-商品
  1009. .goods-bos {
  1010. height: 340px;
  1011. width: 1200px;
  1012. margin-top: 14px;
  1013. display: flex;
  1014. .goods-img {
  1015. width: 230px;
  1016. height: 340px;
  1017. cursor: pointer;
  1018. }
  1019. .home1-bos {
  1020. width: 476px;
  1021. height: 340px;
  1022. background: #ffffff;
  1023. margin-left: 10px;
  1024. padding: 18px 20px 0 20px;
  1025. display: flex;
  1026. flex-direction: column;
  1027. .floorName {
  1028. font-weight: 600;
  1029. font-size: 16px;
  1030. color: #101828;
  1031. }
  1032. .home1-list {
  1033. flex: 1;
  1034. display: flex;
  1035. border-bottom: 1px solid #e5e7eb;
  1036. align-items: center;
  1037. cursor: pointer;
  1038. .advertiseName {
  1039. font-weight: 600;
  1040. font-size: 14px;
  1041. color: #101828;
  1042. }
  1043. .advertiseDescribe {
  1044. font-weight: 400;
  1045. font-size: 12px;
  1046. color: #364153;
  1047. margin-top: 4px;
  1048. }
  1049. img {
  1050. width: 72px;
  1051. height: 72px;
  1052. margin-right: 10px;
  1053. }
  1054. &:last-child {
  1055. border-bottom: none;
  1056. }
  1057. }
  1058. }
  1059. .home2-bos {
  1060. width: 474px;
  1061. margin-left: 10px;
  1062. height: 340px;
  1063. background: #ffffff;
  1064. padding: 18px 20px 0 20px;
  1065. display: flex;
  1066. justify-content: space-between;
  1067. .floorName {
  1068. font-weight: 600;
  1069. font-size: 16px;
  1070. color: #101828;
  1071. }
  1072. .home2-box {
  1073. width: 249px;
  1074. .home2-list {
  1075. width: 249px;
  1076. height: 130px;
  1077. border: 1px solid #e5e7eb;
  1078. margin-top: 13px;
  1079. display: flex;
  1080. align-items: center;
  1081. padding: 0 10px;
  1082. cursor: pointer;
  1083. .advertiseName {
  1084. font-weight: 600;
  1085. font-size: 14px;
  1086. color: #101828;
  1087. }
  1088. .advertiseDescribe {
  1089. font-size: 12px;
  1090. color: #364153;
  1091. margin: 4px 0 10px 0;
  1092. }
  1093. .bnt {
  1094. width: 68px;
  1095. height: 24px;
  1096. }
  1097. img {
  1098. width: 72px;
  1099. height: 72px;
  1100. margin-left: 10px;
  1101. }
  1102. }
  1103. }
  1104. .home2-two {
  1105. width: 177px;
  1106. height: 273px;
  1107. border-radius: 0px 0px 0px 0px;
  1108. border: 1px solid #e5e7eb;
  1109. margin-top: 34px;
  1110. padding: 26px 10px;
  1111. cursor: pointer;
  1112. .advertiseName {
  1113. font-weight: 600;
  1114. font-size: 14px;
  1115. color: #101828;
  1116. }
  1117. .advertiseDescribe {
  1118. font-size: 12px;
  1119. color: #364153;
  1120. margin: 4px 0 30px 0;
  1121. display: -webkit-box;
  1122. -webkit-line-clamp: 2;
  1123. line-clamp: 2; /* 添加标准属性 */
  1124. -webkit-box-orient: vertical;
  1125. overflow: hidden;
  1126. text-overflow: ellipsis;
  1127. }
  1128. img {
  1129. width: 123px;
  1130. height: 122px;
  1131. margin: 0 17px;
  1132. }
  1133. }
  1134. }
  1135. }
  1136. .shop-bos {
  1137. display: flex;
  1138. margin-top: 14px;
  1139. .shop-nav {
  1140. width: 230px;
  1141. height: 306px;
  1142. background: #ffffff;
  1143. padding: 16px;
  1144. .nav-title {
  1145. font-weight: 600;
  1146. font-size: 16px;
  1147. color: #101828;
  1148. margin-bottom: 10px;
  1149. }
  1150. .nav-bos {
  1151. width: 100%;
  1152. display: flex;
  1153. flex-wrap: wrap;
  1154. justify-content: space-between;
  1155. .nav-list {
  1156. width: 94px;
  1157. height: 32px;
  1158. background: #f4f4f4;
  1159. border-radius: 4px 4px 4px 4px;
  1160. font-size: 14px;
  1161. color: #101828;
  1162. margin-bottom: 10px;
  1163. cursor: pointer;
  1164. &:hover {
  1165. color: var(--el-color-primary);
  1166. }
  1167. &.hig {
  1168. background: var(--el-color-primary);
  1169. color: #ffffff;
  1170. }
  1171. }
  1172. }
  1173. }
  1174. .shop-list {
  1175. width: 230px;
  1176. height: 306px;
  1177. background: #ffffff;
  1178. margin-left: 12.5px;
  1179. padding: 20px;
  1180. cursor: pointer;
  1181. img {
  1182. width: 100%;
  1183. height: 190px;
  1184. }
  1185. .itemName {
  1186. font-weight: 400;
  1187. font-size: 14px;
  1188. color: #101828;
  1189. margin: 27px 0 2px 0;
  1190. }
  1191. .price {
  1192. .memberPrice {
  1193. color: var(--el-color-primary);
  1194. font-size: 16px;
  1195. color: #e7000b;
  1196. }
  1197. .marketPrice {
  1198. font-size: 12px;
  1199. color: #99a1af;
  1200. line-height: 20px;
  1201. text-decoration-line: line-through;
  1202. text-transform: none;
  1203. margin-left: 6px;
  1204. }
  1205. }
  1206. }
  1207. }
  1208. //项目案例
  1209. .project-bos {
  1210. display: flex;
  1211. width: 1200px;
  1212. margin-top: 12px;
  1213. gap: 0 15px;
  1214. .project-list {
  1215. width: 390px;
  1216. height: 350px;
  1217. cursor: pointer;
  1218. border-radius: 10px;
  1219. overflow: hidden;
  1220. .project-box {
  1221. width: 390px;
  1222. height: 156px;
  1223. background: #ffffff;
  1224. border-radius: 10px;
  1225. margin-top: -20px;
  1226. z-index: 2;
  1227. position: absolute;
  1228. padding: 20px;
  1229. }
  1230. img {
  1231. width: 390px;
  1232. height: 180px;
  1233. }
  1234. .project1 {
  1235. font-weight: 600;
  1236. font-size: 16px;
  1237. color: #101828;
  1238. margin-bottom: 14px;
  1239. }
  1240. .project2 {
  1241. font-size: 14px;
  1242. color: #364153;
  1243. display: -webkit-box;
  1244. -webkit-line-clamp: 2;
  1245. line-clamp: 2; /* 添加标准属性 */
  1246. -webkit-box-orient: vertical;
  1247. overflow: hidden;
  1248. text-overflow: ellipsis;
  1249. }
  1250. .project-more {
  1251. text-align: right;
  1252. font-size: 14px;
  1253. color: var(--el-color-primary);
  1254. margin-top: 18px;
  1255. }
  1256. }
  1257. }
  1258. }
  1259. </style>